From 97c2b034cc963111365af8e71dc4e3fa2f64acc3 Mon Sep 17 00:00:00 2001 From: Critsium-xy Date: Wed, 18 Jun 2025 22:18:59 +0800 Subject: [PATCH 1/2] Rename module_base to source_base --- CMakeLists.txt | 2 +- docs/CONTRIBUTING.md | 4 +- python/pyabacus/CMakeLists.txt | 6 +- python/pyabacus/CONTRIBUTING.md | 6 +- python/pyabacus/examples/indexmap.py | 2 +- .../pyabacus/src/ModuleBase/py_base_math.cpp | 317 +- python/pyabacus/src/ModuleNAO/CMakeLists.txt | 10 +- python/pyabacus/src/ModuleNAO/py_m_nao.cpp | 8 +- python/pyabacus/src/hsolver/py_diago_cg.hpp | 97 +- python/pyabacus/src/hsolver/py_hsolver.cpp | 125 +- source/CMakeLists.txt | 30 +- source/Makefile.Objects | 16 +- source/module_base/assoc_laguerre.cpp | 137 - source/module_base/blas_connector.h | 440 - source/module_base/blas_connector_base.cpp | 77 - source/module_base/blas_connector_matrix.cpp | 575 - source/module_base/blas_connector_vector.cpp | 473 - source/module_base/gather_math_lib_info.cpp | 80 - source/module_base/global_file.cpp | 314 - source/module_base/grid/delley.cpp | 377 - source/module_base/grid/radial.cpp | 64 - source/module_base/kernels/math_kernel_op.h | 423 - .../kernels/test/math_ylm_op_test.cpp | 340 - source/module_base/math_ylmreal.cpp | 721 - source/module_base/memory.cpp | 502 - source/module_base/module_device/device.cpp | 719 - .../test/abfs-vector3_order_test.cpp | 26 - source/module_base/test/global_file_test.cpp | 160 - source/module_base/test/math_ylmreal_test.cpp | 504 - source/module_base/timer.cpp | 315 - source/module_basis/module_ao/ORB_atomic.h | 281 +- .../module_basis/module_ao/ORB_atomic_lm.cpp | 1394 +- source/module_basis/module_ao/ORB_atomic_lm.h | 379 +- .../module_ao/ORB_gaunt_table.cpp | 732 +- .../module_basis/module_ao/ORB_gaunt_table.h | 188 +- .../module_basis/module_ao/ORB_nonlocal.cpp | 93 +- source/module_basis/module_ao/ORB_nonlocal.h | 75 +- .../module_ao/ORB_nonlocal_lm.cpp | 401 +- source/module_basis/module_ao/ORB_read.cpp | 50 +- .../module_ao/parallel_orbitals.cpp | 71 +- .../module_ao/parallel_orbitals.h | 54 +- .../module_ao/test/1_snap_equal_test.cpp | 126 +- .../module_ao/test/CMakeLists.txt | 58 +- .../module_ao/test/ORB_atomic_lm_test.cpp | 483 +- .../module_ao/test/ORB_nonlocal_lm_test.cpp | 360 +- .../module_ao/test/ORB_nonlocal_test.cpp | 109 +- .../module_ao/test/ORB_read_test.cpp | 254 +- .../module_ao/test/ORB_unittest.h | 2 +- .../module_nao/atomic_radials.cpp | 16 +- .../module_basis/module_nao/beta_radials.cpp | 6 +- .../module_nao/hydrogen_radials.cpp | 224 +- .../module_nao/hydrogen_radials.h | 337 +- .../module_nao/numerical_radial.cpp | 78 +- .../module_nao/numerical_radial.h | 163 +- .../module_basis/module_nao/pswfc_radials.cpp | 6 +- .../module_nao/radial_collection.cpp | 50 +- source/module_basis/module_nao/radial_set.cpp | 54 +- source/module_basis/module_nao/radial_set.h | 147 +- .../module_nao/real_gaunt_table.cpp | 99 +- .../module_nao/sphbes_radials.cpp | 6 +- .../module_nao/test/atomic_radials_test.cpp | 11 +- .../module_nao/test/beta_radials_test.cpp | 533 +- .../module_nao/test/hydrogen_radials_test.cpp | 190 +- .../module_nao/test/numerical_radial_test.cpp | 35 +- .../module_nao/test/projgen_test.cpp | 108 +- .../test/radial_collection_test.cpp | 97 +- .../module_nao/test/real_gaunt_table_test.cpp | 281 +- .../module_nao/test/sphbes_radials_test.cpp | 43 +- .../test/two_center_bundle_test.cpp | 57 +- .../test/two_center_integrator_test.cpp | 10 +- .../module_nao/test/two_center_table_test.cpp | 6 +- .../module_nao/two_center_bundle.cpp | 58 +- .../module_nao/two_center_integrator.cpp | 66 +- .../module_nao/two_center_integrator.h | 56 +- .../module_nao/two_center_table.cpp | 6 +- .../module_nao/two_center_table.h | 66 +- .../module_pw/kernels/test/CMakeLists.txt | 12 +- .../module_pw/kernels/test/pw_op_test.cpp | 7013 +- .../module_pw/module_fft/fft_bundle.cpp | 36 +- .../module_pw/module_fft/fft_cuda.cpp | 2 +- .../module_pw/module_fft/fft_dsp.cpp | 14 +- .../module_pw/module_fft/fft_rocm.cpp | 54 +- source/module_basis/module_pw/pw_basis.cpp | 195 +- source/module_basis/module_pw/pw_basis.h | 409 +- source/module_basis/module_pw/pw_basis_big.h | 461 +- source/module_basis/module_pw/pw_basis_k.cpp | 6 +- source/module_basis/module_pw/pw_basis_k.h | 188 +- .../module_basis/module_pw/pw_basis_k_big.h | 60 +- .../module_basis/module_pw/pw_basis_sup.cpp | 155 +- source/module_basis/module_pw/pw_basis_sup.h | 2 +- .../module_basis/module_pw/pw_distributeg.cpp | 97 +- .../module_pw/pw_distributeg_method1.cpp | 135 +- .../module_pw/pw_distributeg_method2.cpp | 59 +- .../module_basis/module_pw/pw_distributer.cpp | 20 +- .../module_basis/module_pw/pw_gatherscatter.h | 190 +- source/module_basis/module_pw/pw_init.cpp | 229 +- .../module_basis/module_pw/pw_transform.cpp | 4 +- .../module_pw/pw_transform_gpu.cpp | 11 +- .../module_basis/module_pw/pw_transform_k.cpp | 56 +- .../module_pw/pw_transform_k_dsp.cpp | 37 +- .../module_pw/test/CMakeLists.txt | 10 +- source/module_basis/module_pw/test/Makefile | 10 +- .../module_basis/module_pw/test/generate.cpp | 170 +- .../module_basis/module_pw/test/test-big.cpp | 87 +- .../module_pw/test/test-other.cpp | 105 +- .../module_basis/module_pw/test/test1-1-1.cpp | 216 +- .../module_basis/module_pw/test/test1-1-2.cpp | 195 +- .../module_basis/module_pw/test/test1-2-2.cpp | 207 +- .../module_basis/module_pw/test/test1-2.cpp | 188 +- .../module_basis/module_pw/test/test1-3.cpp | 196 +- .../module_basis/module_pw/test/test1-4.cpp | 211 +- .../module_basis/module_pw/test/test1-5.cpp | 209 +- .../module_basis/module_pw/test/test2-1-1.cpp | 200 +- .../module_basis/module_pw/test/test2-1-2.cpp | 197 +- .../module_basis/module_pw/test/test2-2.cpp | 117 +- .../module_basis/module_pw/test/test2-3.cpp | 125 +- .../module_basis/module_pw/test/test3-1.cpp | 203 +- .../module_basis/module_pw/test/test3-2.cpp | 135 +- .../module_basis/module_pw/test/test3-3-2.cpp | 149 +- .../module_basis/module_pw/test/test3-3.cpp | 143 +- .../module_basis/module_pw/test/test4-1.cpp | 195 +- .../module_basis/module_pw/test/test4-2.cpp | 185 +- .../module_basis/module_pw/test/test4-3.cpp | 193 +- .../module_basis/module_pw/test/test4-4.cpp | 212 +- .../module_basis/module_pw/test/test4-5.cpp | 209 +- .../module_basis/module_pw/test/test5-1-1.cpp | 218 +- .../module_basis/module_pw/test/test5-1-2.cpp | 218 +- .../module_basis/module_pw/test/test5-2-1.cpp | 198 +- .../module_basis/module_pw/test/test5-2-2.cpp | 198 +- .../module_basis/module_pw/test/test5-3-1.cpp | 196 +- .../module_basis/module_pw/test/test5-4-1.cpp | 184 +- .../module_basis/module_pw/test/test5-4-2.cpp | 184 +- .../module_basis/module_pw/test/test6-1-1.cpp | 218 +- .../module_basis/module_pw/test/test6-1-2.cpp | 218 +- .../module_basis/module_pw/test/test6-2-1.cpp | 198 +- .../module_basis/module_pw/test/test6-2-2.cpp | 198 +- .../module_basis/module_pw/test/test6-3-1.cpp | 196 +- .../module_basis/module_pw/test/test6-4-1.cpp | 184 +- .../module_basis/module_pw/test/test6-4-2.cpp | 184 +- .../module_basis/module_pw/test/test7-1.cpp | 198 +- .../module_basis/module_pw/test/test7-2-1.cpp | 143 +- .../module_basis/module_pw/test/test7-3-1.cpp | 135 +- .../module_basis/module_pw/test/test7-3-2.cpp | 135 +- .../module_basis/module_pw/test/test8-1.cpp | 198 +- .../module_basis/module_pw/test/test8-2-1.cpp | 143 +- .../module_basis/module_pw/test/test8-3-1.cpp | 135 +- .../module_basis/module_pw/test/test8-3-2.cpp | 135 +- .../module_basis/module_pw/test/test_sup.cpp | 58 +- .../module_pw/test_gpu/pw_basis_C2C.cpp | 164 +- .../module_pw/test_gpu/pw_basis_C2R.cpp | 61 +- .../module_pw/test_gpu/pw_basis_k_C2C.cpp | 11 +- .../module_pw/test_serial/pw_basis_k_test.cpp | 280 +- .../module_pw/test_serial/pw_basis_test.cpp | 553 +- source/module_cell/atom_pseudo.cpp | 15 +- source/module_cell/atom_pseudo.h | 73 +- source/module_cell/atom_spec.cpp | 4 +- source/module_cell/bcast_cell.cpp | 195 +- source/module_cell/cell_index.cpp | 11 +- source/module_cell/check_atomic_stru.cpp | 20 +- source/module_cell/k_vector_utils.cpp | 21 +- source/module_cell/k_vector_utils.h | 4 +- source/module_cell/klist.cpp | 58 +- source/module_cell/klist.h | 30 +- .../module_cell/module_neighbor/sltk_atom.h | 64 +- .../module_neighbor/sltk_atom_arrange.cpp | 19 +- .../module_cell/module_neighbor/sltk_grid.cpp | 66 +- .../module_neighbor/sltk_grid_driver.cpp | 38 +- .../module_neighbor/sltk_grid_driver.h | 16 +- .../module_neighbor/test/prepare_unitcell.h | 595 +- .../module_symmetry/run_symmetry.cpp | 59 +- .../module_cell/module_symmetry/symm_other.h | 20 +- .../module_cell/module_symmetry/symm_rho.cpp | 380 +- source/module_cell/module_symmetry/symmetry.h | 318 +- .../module_symmetry/symmetry_basic.cpp | 1704 +- .../module_symmetry/symmetry_basic.h | 106 +- .../module_symmetry/test/symmetry_test.h | 18 +- source/module_cell/parallel_kpoints.cpp | 18 +- source/module_cell/parallel_kpoints.h | 8 +- source/module_cell/print_cell.cpp | 285 +- source/module_cell/pseudo.cpp | 59 +- source/module_cell/pseudo.h | 4 +- source/module_cell/read_atom_species.cpp | 400 +- source/module_cell/read_atoms.cpp | 514 +- source/module_cell/read_pp.cpp | 648 +- source/module_cell/read_pp.h | 58 +- source/module_cell/read_pp_blps.cpp | 90 +- source/module_cell/read_stru.cpp | 161 +- source/module_cell/setup_nonlocal.cpp | 12 +- source/module_cell/setup_nonlocal.h | 76 +- source/module_cell/test/CMakeLists.txt | 4 +- source/module_cell/test/klist_test.cpp | 73 +- source/module_cell/test/klist_test_para.cpp | 61 +- .../test/parallel_kpoints_test.cpp | 2 +- source/module_cell/test/unitcell_test.cpp | 199 +- .../module_cell/test/unitcell_test_para.cpp | 26 +- .../module_cell/test/unitcell_test_readpp.cpp | 206 +- .../test/unitcell_test_setupcell.cpp | 271 +- .../module_cell/test_pw/unitcell_test_pw.cpp | 163 +- source/module_cell/unitcell.cpp | 405 +- source/module_cell/unitcell.h | 95 +- source/module_cell/unitcell_data.h | 4 +- source/module_cell/update_cell.cpp | 255 +- source/module_elecstate/cal_dm.h | 54 +- source/module_elecstate/cal_nelec_nband.cpp | 27 +- source/module_elecstate/elecstate.cpp | 23 +- source/module_elecstate/elecstate_energy.cpp | 4 +- source/module_elecstate/elecstate_lcao.cpp | 7 +- .../elecstate_lcao_cal_tau.cpp | 5 +- source/module_elecstate/elecstate_print.cpp | 25 +- source/module_elecstate/elecstate_pw.cpp | 66 +- source/module_elecstate/elecstate_pw.h | 15 +- source/module_elecstate/elecstate_pw_sdft.cpp | 16 +- source/module_elecstate/elecstate_tools.h | 2 +- source/module_elecstate/fp_energy.cpp | 14 +- .../kernels/test/elecstate_op_test.cpp | 2637 +- source/module_elecstate/magnetism.cpp | 122 +- source/module_elecstate/magnetism.h | 38 +- source/module_elecstate/math_tools.h | 18 +- .../module_elecstate/module_charge/charge.cpp | 166 +- .../module_elecstate/module_charge/charge.h | 122 +- .../module_charge/charge_extra.cpp | 75 +- .../module_charge/charge_init.cpp | 301 +- .../module_charge/charge_mixing.cpp | 48 +- .../module_charge/charge_mixing.h | 93 +- .../module_charge/charge_mixing_dmr.cpp | 50 +- .../charge_mixing_preconditioner.cpp | 45 +- .../module_charge/charge_mixing_residual.cpp | 117 +- .../module_charge/charge_mixing_rho.cpp | 133 +- .../module_charge/charge_mpi.cpp | 15 +- .../module_charge/symmetry_rhog.cpp | 458 +- .../module_elecstate/module_dm/cal_dm_psi.cpp | 76 +- .../module_elecstate/module_dm/cal_dm_psi.h | 56 +- .../module_dm/cal_edm_tddft.cpp | 6 +- .../module_dm/density_matrix.cpp | 109 +- .../module_dm/density_matrix_io.cpp | 15 +- .../module_dm/test/prepare_unitcell.h | 142 +- .../module_pot/H_Hartree_pw.cpp | 18 +- .../module_pot/H_Hartree_pw.h | 34 +- .../module_pot/H_TDDFT_pw.cpp | 12 +- source/module_elecstate/module_pot/efield.cpp | 22 +- .../module_elecstate/module_pot/gatefield.cpp | 22 +- source/module_elecstate/module_pot/pot_base.h | 36 +- .../module_elecstate/module_pot/pot_local.cpp | 12 +- .../module_elecstate/module_pot/pot_local.h | 7 +- .../module_pot/pot_local_paw.cpp | 6 +- .../module_pot/pot_local_paw.h | 6 +- source/module_elecstate/module_pot/pot_xc.cpp | 12 +- .../module_pot/potential_new.cpp | 40 +- .../module_pot/potential_new.h | 13 +- .../module_pot/potential_types.cpp | 16 +- source/module_elecstate/occupy.cpp | 26 +- source/module_elecstate/occupy.h | 136 +- source/module_elecstate/read_orb.cpp | 37 +- source/module_elecstate/read_pseudo.cpp | 143 +- source/module_elecstate/test/CMakeLists.txt | 2 +- .../test/charge_mixing_test.cpp | 560 +- .../module_elecstate/test/prepare_unitcell.h | 509 +- .../test_mpi/charge_mpi_test.cpp | 27 +- .../module_ewald/H_Ewald_pw.cpp | 350 +- .../module_ewald/H_Ewald_pw.h | 33 +- .../module_surchem/H_correction_pw.cpp | 36 +- .../module_surchem/cal_vcav.cpp | 51 +- .../module_surchem/cal_vel.cpp | 26 +- .../module_surchem/sol_force.cpp | 148 +- .../module_surchem/surchem.h | 15 +- .../module_surchem/test/cal_epsilon_test.cpp | 10 +- .../module_surchem/test/cal_pseudo_test.cpp | 2 +- .../module_surchem/test/cal_totn_test.cpp | 4 +- .../module_surchem/test/cal_vcav_test.cpp | 8 +- .../module_surchem/test/cal_vel_test.cpp | 4 +- .../module_vdw/test/vdw_test.cpp | 416 +- .../module_hamilt_general/module_vdw/vdw.cpp | 37 +- .../module_vdw/vdw_parameters.h | 12 +- .../module_vdw/vdwd2.cpp | 29 +- .../module_vdw/vdwd3.cpp | 754 +- .../module_vdw/vdwd3_autoset_xcname.cpp | 310 +- .../module_vdw/vdwd3_autoset_xcparam.cpp | 107 +- .../module_vdw/vdwd3_parameters.cpp | 25 +- .../module_vdw/vdwd3_parameters_tab.cpp | 56548 +++++++--------- .../kernels/cuda/xc_functional_op.cu | 85 +- .../kernels/rocm/xc_functional_op.hip.cu | 86 +- .../module_xc/kernels/xc_functional_op.h | 35 +- .../module_xc/test/CMakeLists.txt | 22 +- .../module_xc/test/test_xc3.cpp | 290 +- .../module_xc/test/test_xc5.cpp | 571 +- .../module_xc/xc_functional.cpp | 191 +- .../module_xc/xc_functional.h | 492 +- .../module_xc/xc_functional_gradcorr.cpp | 1358 +- .../module_xc/xc_functional_libxc.cpp | 406 +- .../module_xc/xc_functional_libxc.h | 307 +- .../module_xc/xc_functional_libxc_vxc.cpp | 336 +- .../module_xc/xc_functional_vxc.cpp | 114 +- .../module_xc/xc_functional_wrapper_gcxc.cpp | 339 +- source/module_hamilt_general/operator.cpp | 51 +- source/module_hamilt_general/operator.h | 10 +- .../module_hamilt_lcao/hamilt_lcaodft/FORCE.h | 6 +- .../hamilt_lcaodft/FORCE_STRESS.cpp | 20 +- .../hamilt_lcaodft/FORCE_STRESS.h | 6 +- .../hamilt_lcaodft/FORCE_gamma.cpp | 6 +- .../hamilt_lcaodft/FORCE_k.cpp | 8 +- .../hamilt_lcaodft/LCAO_HS_arrays.hpp | 49 +- .../hamilt_lcaodft/LCAO_allocate.cpp | 2 +- .../hamilt_lcaodft/LCAO_domain.h | 6 +- .../hamilt_lcaodft/LCAO_hamilt.hpp | 92 +- .../hamilt_lcaodft/LCAO_nl_mu.cpp | 31 +- .../hamilt_lcaodft/LCAO_set_st.cpp | 12 +- .../hamilt_lcaodft/LCAO_set_zero.cpp | 24 +- .../hamilt_lcaodft/center2_orb-orb11.cpp | 52 +- .../hamilt_lcaodft/center2_orb-orb11.h | 4 +- .../hamilt_lcaodft/center2_orb-orb21.cpp | 5 +- .../hamilt_lcaodft/center2_orb-orb21.h | 2 +- .../hamilt_lcaodft/center2_orb-orb22.h | 2 +- .../hamilt_lcaodft/center2_orb.cpp | 22 +- .../hamilt_lcaodft/center2_orb.h | 2 +- .../module_hamilt_lcao/hamilt_lcaodft/edm.cpp | 36 +- .../hamilt_lcaodft/grid_init.cpp | 101 +- .../hamilt_lcaodft/hamilt_lcao.cpp | 28 +- .../operator_lcao/deepks_lcao.cpp | 16 +- .../operator_lcao/dftu_force_stress.hpp | 403 +- .../operator_lcao/dftu_lcao.cpp | 98 +- .../operator_lcao/dspin_force_stress.hpp | 382 +- .../operator_lcao/dspin_lcao.cpp | 223 +- .../operator_lcao/ekinetic_new.cpp | 14 +- .../operator_lcao/meta_lcao.cpp | 7 +- .../hamilt_lcaodft/operator_lcao/meta_lcao.h | 15 +- .../operator_lcao/nonlocal_force_stress.hpp | 432 +- .../operator_lcao/nonlocal_new.cpp | 8 +- .../operator_lcao/op_dftu_lcao.cpp | 17 +- .../operator_lcao/op_dftu_lcao.h | 9 +- .../operator_lcao/op_exx_lcao.cpp | 56 +- .../operator_lcao/operator_lcao.cpp | 131 +- .../operator_lcao/operator_lcao.h | 65 +- .../operator_lcao/overlap_new.cpp | 23 +- .../operator_lcao/td_ekinetic_lcao.cpp | 40 +- .../operator_lcao/td_ekinetic_lcao.h | 11 +- .../operator_lcao/td_nonlocal_lcao.cpp | 23 +- .../operator_lcao/veff_lcao.cpp | 67 +- .../hamilt_lcaodft/operator_lcao/veff_lcao.h | 55 +- .../pulay_force_stress_center2_template.hpp | 209 +- .../hamilt_lcaodft/record_adj.cpp | 16 +- .../hamilt_lcaodft/spar_u.cpp | 98 +- .../hamilt_lcaodft/stress_tools.h | 2 +- .../hamilt_lcaodft/wavefunc_in_pw.cpp | 811 +- .../hamilt_lcaodft/wavefunc_in_pw.h | 53 +- .../module_deepks/LCAO_deepks.h | 8 +- .../module_deepks/LCAO_deepks_interface.cpp | 6 +- .../module_deepks/LCAO_deepks_interface.h | 4 +- .../module_deepks/LCAO_deepks_io.cpp | 2 +- .../module_deepks/LCAO_deepks_io.h | 6 +- .../module_deepks/deepks_basic.cpp | 4 +- .../module_deepks/deepks_basic.h | 4 +- .../module_deepks/deepks_descriptor.cpp | 8 +- .../module_deepks/deepks_descriptor.h | 4 +- .../module_deepks/deepks_force.cpp | 326 +- .../module_deepks/deepks_force.h | 8 +- .../module_deepks/deepks_fpre.cpp | 16 +- .../module_deepks/deepks_fpre.h | 8 +- .../module_deepks/deepks_iterate.h | 10 +- .../module_deepks/deepks_orbital.cpp | 6 +- .../module_deepks/deepks_orbital.h | 8 +- .../module_deepks/deepks_orbpre.cpp | 8 +- .../module_deepks/deepks_orbpre.h | 8 +- .../module_deepks/deepks_pdm.cpp | 149 +- .../module_deepks/deepks_pdm.h | 6 +- .../module_deepks/deepks_phialpha.cpp | 16 +- .../module_deepks/deepks_phialpha.h | 6 +- .../module_deepks/deepks_spre.cpp | 16 +- .../module_deepks/deepks_spre.h | 8 +- .../module_deepks/deepks_vdelta.cpp | 8 +- .../module_deepks/deepks_vdelta.h | 4 +- .../module_deepks/deepks_vdpre.cpp | 126 +- .../module_deepks/deepks_vdpre.h | 8 +- .../module_deepks/deepks_vdrpre.cpp | 120 +- .../module_deepks/deepks_vdrpre.h | 8 +- .../module_deepks/test/LCAO_deepks_test.h | 4 +- .../test/LCAO_deepks_test_prep.cpp | 2 +- .../module_deepks/test/Makefile | 2 +- .../module_deepks/test/klist.h | 79 +- .../module_deepks/test/parallel_orbitals.h | 37 +- .../module_deltaspin/basic_funcs.cpp | 40 +- .../module_deltaspin/basic_funcs.h | 14 +- .../module_deltaspin/cal_mw.cpp | 84 +- .../module_deltaspin/cal_mw_from_lambda.cpp | 360 +- .../module_deltaspin/spin_constrain.cpp | 34 +- .../module_deltaspin/spin_constrain.h | 177 +- .../module_deltaspin/test/prepare_unitcell.h | 294 +- .../module_hamilt_lcao/module_dftu/dftu.cpp | 43 +- .../module_dftu/dftu_folding.cpp | 104 +- .../module_dftu/dftu_force.cpp | 12 +- .../module_dftu/dftu_hamilt.cpp | 191 +- .../module_dftu/dftu_io.cpp | 209 +- .../module_dftu/dftu_occup.cpp | 259 +- .../module_dftu/dftu_pw.cpp | 92 +- .../module_dftu/dftu_tools.cpp | 79 +- .../module_dftu/dftu_yukawa.cpp | 52 +- .../module_gint/cal_ddpsir_ylm.cpp | 63 +- .../module_gint/cal_dpsir_ylm.cpp | 44 +- .../module_gint/cal_psir_ylm.cpp | 22 +- .../module_hamilt_lcao/module_gint/gint.cpp | 193 +- .../module_gint/gint_force_cpu_interface.cpp | 705 +- .../module_gint/gint_force_gpu.cu | 318 +- .../module_gint/gint_fvl.cpp | 110 +- .../module_gint/gint_gamma.h | 31 +- .../module_gint/gint_gamma_env.cpp | 40 +- .../module_gint/gint_gamma_vl.cpp | 6 +- .../module_gint/gint_gpu_interface.cpp | 77 +- .../module_hamilt_lcao/module_gint/gint_k.h | 15 +- .../module_gint/gint_k_env.cpp | 36 +- .../module_gint/gint_k_pvdpr.cpp | 30 +- .../module_gint/gint_k_pvpr.cpp | 40 +- .../module_gint/gint_k_sparse1.cpp | 106 +- .../module_gint/gint_rho.cpp | 22 +- .../module_gint/gint_rho_cpu_interface.cpp | 358 +- .../module_gint/gint_rho_gpu.cu | 295 +- .../module_gint/gint_tau.cpp | 64 +- .../module_gint/gint_tools.cpp | 402 +- .../module_gint/gint_tools.h | 95 +- .../module_gint/gint_vl.cpp | 131 +- .../module_gint/gint_vl_cpu_interface.cpp | 504 +- .../module_gint/gint_vl_gpu.cu | 245 +- .../module_gint/grid_bigcell.cpp | 649 +- .../module_gint/grid_bigcell.h | 102 +- .../module_gint/grid_meshball.cpp | 235 +- .../module_gint/grid_meshcell.cpp | 252 +- .../module_gint/grid_meshcell.h | 77 +- .../module_gint/grid_meshk.h | 84 +- .../module_gint/grid_technique.cpp | 495 +- .../module_gint/gtask_force.cpp | 31 +- .../module_gint/gtask_rho.cpp | 36 +- .../module_gint/gtask_vl.cpp | 39 +- .../module_gint/init_orb.cpp | 83 +- .../module_gint/kernels/cuda/gemm_selector.cu | 55 +- .../module_gint/kernels/cuda/gint_force.cu | 42 +- .../kernels/cuda/vbatch_matrix_mul.cuh | 172 +- .../module_gint/mult_psi_dmr.cpp | 95 +- .../module_gint/temp_gint/gint_atom.cpp | 81 +- .../module_gint/temp_gint/gint_fvl.cpp | 22 +- .../module_gint/temp_gint/gint_fvl.h | 35 +- .../module_gint/temp_gint/gint_fvl_meta.cpp | 63 +- .../module_gint/temp_gint/gint_fvl_meta.h | 35 +- .../module_gint/temp_gint/gint_helper.h | 24 +- .../module_gint/temp_gint/gint_info.cpp | 188 +- .../module_gint/temp_gint/gint_interface.cpp | 73 +- .../module_gint/temp_gint/gint_rho.cpp | 10 +- .../module_gint/temp_gint/gint_tau.cpp | 9 +- .../module_gint/temp_gint/gint_type.h | 4 +- .../module_gint/temp_gint/gint_vl.cpp | 13 +- .../module_gint/temp_gint/gint_vl_metagga.cpp | 13 +- .../temp_gint/gint_vl_metagga_nspin4.cpp | 39 +- .../module_gint/temp_gint/gint_vl_nspin4.cpp | 24 +- .../module_gint/temp_gint/phi_operator.cpp | 71 +- .../module_gint/temp_gint/phi_operator.hpp | 147 +- .../module_gint/temp_gint/set_ddphi.cpp | 86 +- .../module_gint/test/test_sph.cu | 28 +- .../module_hcontainer/atom_pair.cpp | 97 +- .../module_hcontainer/atom_pair.h | 81 +- .../module_hcontainer/base_matrix.cpp | 21 +- .../module_hcontainer/func_folding.cpp | 44 +- .../module_hcontainer/hcontainer.h | 25 +- .../module_hcontainer/test/prepare_unitcell.h | 330 +- .../module_hcontainer/transfer.cpp | 21 +- .../module_hcontainer/transfer.h | 6 +- .../module_tddft/band_energy.cpp | 10 +- .../module_tddft/band_energy.h | 2 +- .../module_tddft/evolve_elec.cpp | 4 +- .../module_tddft/evolve_elec.h | 18 +- .../module_tddft/evolve_psi.cpp | 12 +- .../module_tddft/evolve_psi.h | 4 +- .../module_tddft/middle_hamilt.cpp | 8 +- .../module_tddft/middle_hamilt.h | 2 +- .../module_tddft/norm_psi.cpp | 10 +- .../module_tddft/norm_psi.h | 2 +- .../module_tddft/propagator.cpp | 12 +- .../module_tddft/propagator.h | 4 +- .../module_tddft/propagator_cn2.cpp | 12 +- .../module_tddft/propagator_etrs.cpp | 12 +- .../module_tddft/propagator_taylor.cpp | 14 +- .../module_tddft/snap_psibeta_half_tddft.cpp | 30 +- .../module_tddft/snap_psibeta_half_tddft.h | 36 +- .../module_tddft/solve_propagation.cpp | 111 +- .../module_tddft/td_current.cpp | 4 +- .../module_tddft/td_current.h | 17 +- .../module_tddft/td_velocity.h | 4 +- .../module_tddft/test/band_energy_test.cpp | 8 +- .../module_tddft/test/middle_hamilt_test.cpp | 4 +- .../module_tddft/test/norm_psi_test.cpp | 4 +- .../module_tddft/test/propagator_test1.cpp | 2 +- .../module_tddft/test/propagator_test2.cpp | 2 +- .../module_tddft/test/propagator_test3.cpp | 2 +- .../module_tddft/test/tddft_test.cpp | 8 +- .../module_tddft/test/upsi_test1.cpp | 4 +- .../module_tddft/test/upsi_test2.cpp | 4 +- .../module_tddft/test/upsi_test3.cpp | 4 +- .../module_hamilt_lcao/module_tddft/upsi.cpp | 6 +- source/module_hamilt_lcao/module_tddft/upsi.h | 2 +- .../hamilt_ofdft/kedf_lkt.cpp | 29 +- .../module_hamilt_pw/hamilt_ofdft/kedf_lkt.h | 12 +- .../module_hamilt_pw/hamilt_ofdft/kedf_ml.cpp | 256 +- .../hamilt_ofdft/kedf_ml_pot.cpp | 251 +- .../module_hamilt_pw/hamilt_ofdft/kedf_tf.cpp | 6 +- .../module_hamilt_pw/hamilt_ofdft/kedf_tf.h | 10 +- .../module_hamilt_pw/hamilt_ofdft/kedf_vw.cpp | 23 +- .../module_hamilt_pw/hamilt_ofdft/kedf_vw.h | 12 +- .../module_hamilt_pw/hamilt_ofdft/kedf_wt.cpp | 118 +- .../module_hamilt_pw/hamilt_ofdft/kedf_wt.h | 12 +- .../hamilt_ofdft/of_stress_pw.cpp | 10 +- .../hamilt_pwdft/VL_in_pw.cpp | 395 +- .../module_hamilt_pw/hamilt_pwdft/VL_in_pw.h | 47 +- .../hamilt_pwdft/VNL_grad_pw.cpp | 316 +- .../hamilt_pwdft/VNL_in_pw.cpp | 97 +- .../module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h | 8 +- .../module_hamilt_pw/hamilt_pwdft/elecond.cpp | 23 +- .../module_hamilt_pw/hamilt_pwdft/elecond.h | 8 +- .../module_hamilt_pw/hamilt_pwdft/forces.cpp | 46 +- source/module_hamilt_pw/hamilt_pwdft/forces.h | 37 +- .../hamilt_pwdft/forces_cc.cpp | 311 +- .../hamilt_pwdft/forces_nl.cpp | 8 +- .../hamilt_pwdft/forces_onsite.cpp | 37 +- .../hamilt_pwdft/forces_scc.cpp | 191 +- .../hamilt_pwdft/forces_us.cpp | 8 +- .../hamilt_pwdft/fs_kin_tools.cpp | 2 +- .../hamilt_pwdft/fs_kin_tools.h | 7 +- .../hamilt_pwdft/fs_nonlocal_tools.cpp | 18 +- .../hamilt_pwdft/fs_nonlocal_tools.h | 50 +- source/module_hamilt_pw/hamilt_pwdft/global.h | 55 +- .../hamilt_pwdft/hamilt_pw.cpp | 140 +- .../module_hamilt_pw/hamilt_pwdft/hamilt_pw.h | 21 +- .../hamilt_pwdft/kernels/cuda/force_op.cu | 469 +- .../hamilt_pwdft/kernels/cuda/stress_op.cu | 1178 +- .../hamilt_pwdft/kernels/stress_op.cpp | 212 +- .../hamilt_pwdft/kernels/stress_op.h | 128 +- .../kernels/test/ekinetic_op_test.cpp | 512 +- .../kernels/test/force_op_test.cpp | 2 +- .../kernels/test/meta_op_test.cpp | 62 +- .../kernels/test/nonlocal_op_test.cpp | 1029 +- .../kernels/test/stress_op_test.cpp | 3806 +- .../kernels/test/veff_op_test.cpp | 2323 +- .../hamilt_pwdft/kernels/test/vnl_op_test.cpp | 2 +- .../hamilt_pwdft/kernels/test/wf_op_test.cpp | 710 +- .../hamilt_pwdft/kernels/wf_op.cpp | 79 +- .../module_exx_helper/exx_helper.h | 27 +- .../hamilt_pwdft/nonlocal_maths.hpp | 21 +- .../hamilt_pwdft/onsite_proj_tools.cpp | 18 +- .../hamilt_pwdft/onsite_proj_tools.h | 52 +- .../hamilt_pwdft/onsite_projector.cpp | 348 +- .../hamilt_pwdft/onsite_projector.h | 315 +- .../hamilt_pwdft/operator_pw/ekinetic_pw.cpp | 102 +- .../hamilt_pwdft/operator_pw/ekinetic_pw.h | 63 +- .../hamilt_pwdft/operator_pw/meta_pw.cpp | 89 +- .../hamilt_pwdft/operator_pw/meta_pw.h | 100 +- .../hamilt_pwdft/operator_pw/nonlocal_pw.cpp | 245 +- .../hamilt_pwdft/operator_pw/nonlocal_pw.h | 70 +- .../operator_pw/onsite_proj_pw.cpp | 257 +- .../hamilt_pwdft/operator_pw/onsite_proj_pw.h | 53 +- .../hamilt_pwdft/operator_pw/op_exx_pw.cpp | 313 +- .../hamilt_pwdft/operator_pw/op_exx_pw.h | 89 +- .../hamilt_pwdft/operator_pw/operator_pw.cpp | 12 +- .../hamilt_pwdft/operator_pw/veff_pw.cpp | 80 +- .../hamilt_pwdft/operator_pw/veff_pw.h | 56 +- .../hamilt_pwdft/operator_pw/velocity_pw.cpp | 20 +- .../hamilt_pwdft/parallel_grid.cpp | 2 +- .../hamilt_pwdft/parallel_grid.h | 82 +- .../hamilt_pwdft/radial_proj.cpp | 138 +- .../hamilt_pwdft/radial_proj.h | 445 +- source/module_hamilt_pw/hamilt_pwdft/soc.h | 44 +- .../hamilt_pwdft/stress_func.h | 21 +- .../hamilt_pwdft/stress_func_cc.cpp | 515 +- .../hamilt_pwdft/stress_func_ewa.cpp | 417 +- .../hamilt_pwdft/stress_func_gga.cpp | 88 +- .../hamilt_pwdft/stress_func_har.cpp | 241 +- .../hamilt_pwdft/stress_func_kin.cpp | 22 +- .../hamilt_pwdft/stress_func_loc.cpp | 438 +- .../hamilt_pwdft/stress_func_mgga.cpp | 76 +- .../hamilt_pwdft/stress_func_nl.cpp | 92 +- .../hamilt_pwdft/stress_func_onsite.cpp | 42 +- .../hamilt_pwdft/stress_func_us.cpp | 24 +- .../hamilt_pwdft/stress_pw.cpp | 3 +- .../hamilt_pwdft/structure_factor.cpp | 329 +- .../hamilt_pwdft/structure_factor.h | 49 +- .../hamilt_pwdft/structure_factor_k.cpp | 24 +- .../hamilt_pwdft/test/CMakeLists.txt | 26 +- .../hamilt_stodft/hamilt_sdft_pw.cpp | 7 +- .../hamilt_stodft/kernels/hpsi_norm_op.cpp | 2 +- .../hamilt_stodft/kernels/hpsi_norm_op.h | 3 +- .../hamilt_stodft/sto_che.cpp | 9 +- .../module_hamilt_pw/hamilt_stodft/sto_che.h | 10 +- .../hamilt_stodft/sto_dos.cpp | 11 +- .../hamilt_stodft/sto_elecond.cpp | 90 +- .../hamilt_stodft/sto_forces.cpp | 41 +- .../hamilt_stodft/sto_iter.cpp | 66 +- .../module_hamilt_pw/hamilt_stodft/sto_iter.h | 36 +- .../hamilt_stodft/sto_stress_pw.cpp | 2 +- .../hamilt_stodft/sto_tool.cpp | 8 +- .../module_hamilt_pw/hamilt_stodft/sto_tool.h | 5 +- .../module_hamilt_pw/hamilt_stodft/sto_wf.cpp | 11 +- source/module_io/berryphase.cpp | 71 +- source/module_io/bessel_basis.cpp | 858 +- source/module_io/bessel_basis.h | 352 +- source/module_io/cal_dos.cpp | 131 +- source/module_io/cal_dos.h | 54 +- source/module_io/cal_mlkedf_descriptors.h | 138 +- source/module_io/cal_pLpR.cpp | 180 +- source/module_io/cal_pdos_gamma.cpp | 303 +- source/module_io/cal_pdos_gamma.h | 61 +- source/module_io/cal_pdos_multik.cpp | 524 +- source/module_io/cal_pdos_multik.h | 63 +- source/module_io/cal_r_overlap_R.cpp | 34 +- source/module_io/cal_r_overlap_R.h | 12 +- source/module_io/cal_test.cpp | 405 +- source/module_io/cif_io.cpp | 147 +- source/module_io/csr_reader.cpp | 2 +- source/module_io/fR_overlap.cpp | 123 +- source/module_io/fR_overlap.h | 42 +- source/module_io/file_reader.cpp | 2 +- source/module_io/filename.cpp | 127 +- source/module_io/get_pchg_lcao.cpp | 20 +- source/module_io/get_pchg_lcao.h | 8 +- source/module_io/get_pchg_pw.h | 11 +- source/module_io/get_wf_lcao.cpp | 46 +- source/module_io/get_wf_pw.h | 4 +- source/module_io/input_conv.cpp | 167 +- source/module_io/input_conv.h | 12 +- source/module_io/io_dmk.cpp | 52 +- source/module_io/io_dmk.h | 11 +- source/module_io/io_npz.cpp | 337 +- source/module_io/json_output/general_info.cpp | 2 +- source/module_io/json_output/output_info.h | 39 +- source/module_io/nscf_band.cpp | 110 +- source/module_io/nscf_band.h | 4 +- source/module_io/nscf_fermi_surf.cpp | 143 +- source/module_io/nscf_fermi_surf.h | 5 +- source/module_io/numerical_basis.cpp | 229 +- source/module_io/numerical_basis.h | 43 +- source/module_io/numerical_basis_jyjy.cpp | 12 +- source/module_io/numerical_basis_jyjy.h | 13 +- source/module_io/numerical_descriptor.cpp | 370 +- source/module_io/numerical_descriptor.h | 49 +- source/module_io/orb_io.cpp | 30 +- source/module_io/output.h | 110 +- source/module_io/output_log.cpp | 67 +- source/module_io/output_log.h | 24 +- source/module_io/output_mulliken.cpp | 41 +- source/module_io/output_mulliken.h | 74 +- source/module_io/output_sk.cpp | 5 +- source/module_io/para_json.cpp | 2 +- source/module_io/print_info.cpp | 324 +- source/module_io/print_info.h | 2 +- source/module_io/read_input.cpp | 54 +- source/module_io/read_input_item_deepks.cpp | 18 +- .../module_io/read_input_item_elec_stru.cpp | 89 +- source/module_io/read_input_item_exx_dftu.cpp | 35 +- source/module_io/read_input_item_md.cpp | 27 +- source/module_io/read_input_item_model.cpp | 4 +- source/module_io/read_input_item_ofdft.cpp | 25 +- source/module_io/read_input_item_other.cpp | 16 +- source/module_io/read_input_item_output.cpp | 11 +- .../module_io/read_input_item_postprocess.cpp | 4 +- source/module_io/read_input_item_relax.cpp | 8 +- source/module_io/read_input_item_sdft.cpp | 4 +- source/module_io/read_input_item_system.cpp | 45 +- source/module_io/read_input_item_tddft.cpp | 135 +- source/module_io/read_input_tool.h | 8 +- source/module_io/read_set_globalv.cpp | 4 +- source/module_io/read_wf2rho_pw.cpp | 150 +- source/module_io/read_wfc_lcao.cpp | 50 +- source/module_io/read_wfc_lcao.h | 11 +- source/module_io/read_wfc_nao.cpp | 238 +- source/module_io/read_wfc_pw.cpp | 33 +- source/module_io/restart.cpp | 81 +- source/module_io/restart.h | 88 +- source/module_io/restart_exx_csr.h | 52 +- source/module_io/rhog_io.cpp | 105 +- source/module_io/single_R_io.cpp | 60 +- source/module_io/sparse_matrix.cpp | 8 +- source/module_io/td_current_io.cpp | 26 +- source/module_io/test/CMakeLists.txt | 10 +- source/module_io/test/cal_dos_test.cpp | 226 +- source/module_io/test/cal_pLpR_test.cpp | 81 +- source/module_io/test/cif_io_test.cpp | 329 +- source/module_io/test/dos_test.h | 193 +- source/module_io/test/for_testing_klist.h | 78 +- source/module_io/test/io_dmk_test.cpp | 207 +- .../module_io/test/numerical_basis_test.cpp | 6 +- source/module_io/test/orb_io_test.cpp | 9 +- source/module_io/test/outputlog_test.cpp | 39 +- source/module_io/test/prepare_unitcell.h | 597 +- source/module_io/test/read_input_ptest.cpp | 17 +- source/module_io/test/read_wf2rho_pw_test.cpp | 159 +- source/module_io/test/read_wfc_pw_test.cpp | 223 +- source/module_io/test/single_R_io_test.cpp | 29 +- .../module_io/test/write_istate_info_test.cpp | 27 +- source/module_io/test/write_wfc_nao_test.cpp | 95 +- source/module_io/test_serial/CMakeLists.txt | 4 +- .../test_serial/io_system_variable_test.cpp | 16 +- .../module_io/test_serial/prepare_unitcell.h | 595 +- .../test_serial/read_input_item_test.cpp | 15 +- .../module_io/test_serial/read_input_test.cpp | 2 +- source/module_io/test_serial/rho_io_test.cpp | 111 +- source/module_io/to_qo.h | 478 +- source/module_io/to_qo_kernel.cpp | 135 +- source/module_io/to_qo_mpi.cpp | 52 +- source/module_io/to_qo_structures.cpp | 173 +- source/module_io/to_wannier90.cpp | 18 +- source/module_io/to_wannier90.h | 76 +- source/module_io/to_wannier90_lcao.cpp | 163 +- source/module_io/to_wannier90_lcao.h | 31 +- source/module_io/to_wannier90_lcao_in_pw.cpp | 134 +- source/module_io/to_wannier90_lcao_in_pw.h | 22 +- source/module_io/to_wannier90_pw.cpp | 515 +- source/module_io/to_wannier90_pw.h | 150 +- source/module_io/unk_overlap_lcao.cpp | 168 +- source/module_io/unk_overlap_lcao.h | 12 +- source/module_io/unk_overlap_pw.h | 18 +- source/module_io/winput.cpp | 19 +- source/module_io/write_HS.h | 76 +- source/module_io/write_HS.hpp | 292 +- source/module_io/write_HS_R.cpp | 220 +- source/module_io/write_HS_R.h | 110 +- source/module_io/write_HS_sparse.cpp | 764 +- source/module_io/write_HS_sparse.h | 4 +- source/module_io/write_cube.cpp | 4 +- source/module_io/write_dipole.cpp | 2 +- source/module_io/write_dos_lcao.h | 52 +- source/module_io/write_dos_pw.cpp | 71 +- source/module_io/write_dos_pw.h | 29 +- source/module_io/write_elecstat_pot.cpp | 33 +- source/module_io/write_istate_info.cpp | 57 +- source/module_io/write_istate_info.h | 6 +- source/module_io/write_libxc_r.cpp | 879 +- source/module_io/write_orb_info.cpp | 23 +- source/module_io/write_pao.cpp | 3 +- source/module_io/write_proj_band_lcao.cpp | 273 +- source/module_io/write_vxc.hpp | 161 +- source/module_io/write_vxc_lip.hpp | 562 +- source/module_io/write_vxc_r.hpp | 111 +- source/module_io/write_wfc_nao.cpp | 105 +- source/module_io/write_wfc_nao.h | 29 +- source/module_io/write_wfc_pw.cpp | 126 +- source/module_io/write_wfc_r.cpp | 33 +- source/module_io/write_wfc_r.h | 29 +- .../module_lr/ao_to_mo_transformer/ao_to_mo.h | 71 +- .../ao_to_mo_parallel.cpp | 271 +- .../ao_to_mo_transformer/ao_to_mo_serial.cpp | 301 +- source/module_lr/dm_trans/dm_trans.h | 71 +- .../module_lr/dm_trans/dm_trans_parallel.cpp | 148 +- source/module_lr/dm_trans/dm_trans_serial.cpp | 343 +- source/module_lr/dm_trans/dmr_complex.cpp | 135 +- source/module_lr/dm_trans/test/CMakeLists.txt | 16 +- source/module_lr/esolver_lrtd_lcao.cpp | 706 +- source/module_lr/hsolver_lrtd.hpp | 360 +- source/module_lr/lr_spectrum.cpp | 223 +- .../operator_casida/operator_lr_diag.h | 106 +- .../operator_casida/operator_lr_hxc.cpp | 231 +- source/module_lr/potentials/pot_hxc_lrtd.cpp | 504 +- source/module_lr/potentials/xc_kernel.cpp | 244 +- .../module_lr/ri_benchmark/ri_benchmark.hpp | 948 +- source/module_lr/utils/lr_util.cpp | 377 +- source/module_lr/utils/lr_util.h | 201 +- source/module_lr/utils/lr_util.hpp | 322 +- source/module_lr/utils/lr_util_hcontainer.h | 207 +- source/module_md/fire.cpp | 14 +- source/module_md/langevin.cpp | 15 +- source/module_md/md_func.cpp | 81 +- source/module_md/msst.cpp | 16 +- source/module_md/nhchain.cpp | 10 +- source/module_md/run_md.cpp | 40 +- source/module_md/test/CMakeLists.txt | 48 +- source/module_md/verlet.cpp | 10 +- source/module_parameter/input_parameter.h | 81 +- source/module_psi/psi.cpp | 17 +- source/module_psi/psi.h | 4 +- source/module_psi/psi_init.cpp | 25 +- source/module_psi/psi_initializer.cpp | 10 +- source/module_psi/psi_initializer.h | 6 +- source/module_psi/psi_initializer_atomic.cpp | 286 +- source/module_psi/psi_initializer_atomic.h | 2 +- source/module_psi/psi_initializer_file.cpp | 44 +- source/module_psi/psi_initializer_nao.cpp | 24 +- source/module_psi/psi_initializer_nao.h | 4 +- source/module_psi/psi_initializer_random.cpp | 4 +- source/module_rdmft/rdmft.cpp | 238 +- source/module_rdmft/rdmft.h | 55 +- source/module_rdmft/rdmft_tools.cpp | 274 +- source/module_rdmft/rdmft_tools.h | 238 +- source/module_relax/bfgs.cpp | 259 +- source/module_relax/bfgs.h | 74 +- source/module_relax/bfgs_basic.cpp | 15 +- source/module_relax/bfgs_basic.h | 10 +- source/module_relax/ions_move_basic.cpp | 37 +- source/module_relax/ions_move_basic.h | 28 +- source/module_relax/ions_move_bfgs.cpp | 14 +- source/module_relax/ions_move_bfgs.h | 5 +- source/module_relax/ions_move_cg.cpp | 61 +- source/module_relax/ions_move_cg.h | 46 +- source/module_relax/ions_move_methods.cpp | 33 +- source/module_relax/ions_move_sd.cpp | 14 +- source/module_relax/ions_move_sd.h | 2 +- source/module_relax/lattice_change_basic.cpp | 48 +- source/module_relax/lattice_change_basic.h | 10 +- source/module_relax/lattice_change_cg.cpp | 63 +- source/module_relax/lattice_change_cg.h | 42 +- .../module_relax/lattice_change_methods.cpp | 12 +- source/module_relax/lbfgs.cpp | 242 +- source/module_relax/lbfgs.h | 86 +- source/module_relax/relax_driver.cpp | 46 +- source/module_relax/relax_nsync.cpp | 23 +- source/module_relax/relax_sync.cpp | 15 +- source/module_relax/relax_sync.h | 8 +- source/module_relax/test/CMakeLists.txt | 12 +- source/module_relax/test/bfgs_test.cpp | 75 +- source/module_ri/ABFs_Construct-PCA.cpp | 304 +- source/module_ri/Exx_LRI.h | 163 +- source/module_ri/Exx_LRI.hpp | 514 +- source/module_ri/Exx_LRI_interface.hpp | 357 +- source/module_ri/Inverse_Matrix.hpp | 232 +- source/module_ri/LRI_CV.h | 219 +- source/module_ri/LRI_CV.hpp | 762 +- source/module_ri/LRI_CV_Tools.h | 196 +- source/module_ri/LRI_CV_Tools.hpp | 503 +- source/module_ri/Matrix_Orbs11.cpp | 85 +- source/module_ri/Matrix_Orbs11.h | 14 +- source/module_ri/Matrix_Orbs21.cpp | 78 +- source/module_ri/Matrix_Orbs21.h | 8 +- source/module_ri/Matrix_Orbs22.cpp | 17 +- source/module_ri/Matrix_Orbs22.h | 11 +- source/module_ri/Mix_DMk_2D.cpp | 78 +- source/module_ri/Mix_DMk_2D.h | 87 +- source/module_ri/Mix_Matrix.cpp | 74 +- source/module_ri/Mix_Matrix.h | 5 +- source/module_ri/RI_2D_Comm.hpp | 374 +- source/module_ri/RI_Util.hpp | 142 +- source/module_ri/RPA_LRI.h | 37 +- source/module_ri/abfs.h | 18 +- source/module_ri/conv_coulomb_pot_k.cpp | 265 +- source/module_ri/exx_abfs-abfs_index.h | 13 +- source/module_ri/exx_abfs-construct_orbs.cpp | 818 +- source/module_ri/exx_abfs-io.cpp | 468 +- source/module_ri/exx_abfs-io.h | 46 +- source/module_ri/exx_abfs-jle.cpp | 95 +- source/module_ri/exx_abfs.h | 27 +- source/module_ri/exx_lip.h | 63 +- source/module_ri/exx_lip.hpp | 386 +- source/module_ri/exx_opt_orb.h | 66 +- .../module_exx_symmetry/irreducible_sector.h | 281 +- .../module_exx_symmetry/symmetry_rotation.cpp | 975 +- .../symmetry_rotation_R.hpp | 568 +- .../symmetry_rotation_R_hcontainer.hpp | 482 +- source/module_ri/serialization_boost.h | 152 +- source/module_ri/serialization_cereal.h | 117 +- source/module_ri/test/dm_mixing_test.cpp | 41 +- .../element_basis_index-unittest.cpp | 131 +- source/module_ri/test_code/scalapack-test.cpp | 764 +- .../CMakeLists.txt | 0 .../abfs-vector3_order.cpp | 0 .../abfs-vector3_order.h | 0 .../{module_base => source_base}/array_pool.h | 0 source/source_base/assoc_laguerre.cpp | 137 + .../assoc_laguerre.h | 0 source/{module_base => source_base}/atom_in.h | 0 .../blacs_connector.h | 0 source/source_base/blas_connector.h | 901 + source/source_base/blas_connector_base.cpp | 81 + source/source_base/blas_connector_matrix.cpp | 829 + source/source_base/blas_connector_vector.cpp | 719 + .../clebsch_gordan_coeff.cpp | 6 +- .../clebsch_gordan_coeff.h | 8 +- .../complexarray.cpp | 0 .../complexarray.h | 0 .../complexmatrix.cpp | 0 .../complexmatrix.h | 0 .../{module_base => source_base}/constants.h | 0 .../container_operator.h | 0 .../cubic_spline.cpp | 0 .../cubic_spline.h | 0 .../element_basis_index.cpp | 0 .../element_basis_index.h | 0 .../element_covalent_radius.h | 0 .../element_elec_config.h | 0 .../element_name.h | 0 .../{module_base => source_base}/export.cpp | 0 source/{module_base => source_base}/export.h | 0 .../{module_base => source_base}/formatter.h | 316 +- source/source_base/gather_math_lib_info.cpp | 102 + source/source_base/global_file.cpp | 327 + .../global_file.h | 0 .../global_function-func_each_2.h | 0 .../global_function.cpp | 77 +- .../global_function.h | 0 .../global_function_ddotreal.cpp | 2 +- .../global_variable.cpp | 0 .../global_variable.h | 0 .../gram_schmidt_orth-inl.h | 0 .../gram_schmidt_orth.h | 0 .../grid/batch.cpp | 62 +- .../{module_base => source_base}/grid/batch.h | 0 source/source_base/grid/delley.cpp | 376 + .../grid/delley.h | 0 .../grid/partition.cpp | 87 +- .../grid/partition.h | 0 source/source_base/grid/radial.cpp | 67 + .../grid/radial.h | 0 .../grid/test/CMakeLists.txt | 0 .../grid/test/test_batch.cpp | 156 +- .../grid/test/test_delley.cpp | 59 +- .../grid/test/test_partition.cpp | 230 +- .../grid/test/test_radial.cpp | 65 +- .../{module_base => source_base}/intarray.cpp | 0 .../{module_base => source_base}/intarray.h | 0 .../inverse_matrix.cpp | 0 .../inverse_matrix.h | 0 .../kernels/cuda/math_kernel_op.cu | 188 +- .../kernels/cuda/math_kernel_op_vec.cu | 55 +- .../kernels/cuda/math_ylm_op.cu | 120 +- .../kernels/dsp/dsp_connector.cpp | 0 .../kernels/dsp/dsp_connector.h | 4 +- .../kernels/math_kernel_op.cpp | 24 +- source/source_base/kernels/math_kernel_op.h | 513 + .../kernels/math_kernel_op_vec.cpp | 17 +- .../kernels/math_ylm_op.cpp | 86 +- .../kernels/math_ylm_op.h | 0 .../kernels/rocm/math_kernel_op.hip.cu | 219 +- .../kernels/rocm/math_kernel_op_vec.hip.cu | 55 +- .../kernels/rocm/math_ylm_op.hip.cu | 133 +- .../kernels/test/CMakeLists.txt | 0 .../kernels/test/math_kernel_test.cpp | 189 +- .../kernels/test/math_ylm_op_test.cpp | 343 + .../lapack_connector.h | 0 .../lapack_wrapper.h | 0 .../{module_base => source_base}/libm/LICENCE | 0 .../libm/README.md | 0 .../libm/branred.cpp | 0 .../libm/cexp.cpp | 0 .../{module_base => source_base}/libm/exp.cpp | 0 .../{module_base => source_base}/libm/libm.h | 0 .../libm/sincos.cpp | 0 .../libm/test/CMakeLists.txt | 0 .../libm/test/libm_test.cpp | 0 source/{module_base => source_base}/macros.h | 0 source/{module_base => source_base}/main.cpp | 0 .../math_bspline.cpp | 0 .../math_bspline.h | 0 .../math_chebyshev.cpp | 12 +- .../math_chebyshev.h | 20 +- .../math_erf_complex.cpp | 0 .../math_erf_complex.h | 0 .../math_integral.cpp | 0 .../math_integral.h | 0 .../math_lebedev_laikov.cpp | 0 .../math_lebedev_laikov.h | 0 .../math_polyint.cpp | 0 .../math_polyint.h | 0 .../math_sphbes.cpp | 0 .../math_sphbes.h | 0 source/source_base/math_ylmreal.cpp | 707 + .../math_ylmreal.h | 0 .../{module_base => source_base}/mathzone.h | 0 .../mathzone_add1.cpp | 0 .../mathzone_add1.h | 0 .../{module_base => source_base}/matrix-inl.h | 0 .../{module_base => source_base}/matrix.cpp | 0 source/{module_base => source_base}/matrix.h | 0 .../{module_base => source_base}/matrix3.cpp | 0 source/{module_base => source_base}/matrix3.h | 0 .../matrix_wrapper.h | 0 .../matrix_wrapper_tianhe2.h | 0 source/{module_base => source_base}/mcd.c | 0 source/{module_base => source_base}/mcd.h | 0 source/source_base/memory.cpp | 481 + source/{module_base => source_base}/memory.h | 0 .../module_container/ATen/core/CMakeLists.txt | 0 .../module_container/ATen/core/tensor.cpp | 0 .../module_container/ATen/core/tensor.h | 0 .../ATen/core/tensor_accessor.h | 0 .../ATen/core/tensor_buffer.cpp | 0 .../ATen/core/tensor_buffer.h | 0 .../module_container/ATen/core/tensor_map.cpp | 0 .../module_container/ATen/core/tensor_map.h | 0 .../ATen/core/tensor_shape.cpp | 0 .../module_container/ATen/core/tensor_shape.h | 0 .../ATen/core/tensor_types.cpp | 0 .../module_container/ATen/core/tensor_types.h | 135 +- .../module_container/ATen/core/tensor_utils.h | 0 .../ATen/kernels/CMakeLists.txt | 0 .../module_container/ATen/kernels/blas.cpp | 0 .../module_container/ATen/kernels/blas.h | 0 .../ATen/kernels/cuda/blas.cu | 0 .../ATen/kernels/cuda/lapack.cu | 0 .../ATen/kernels/cuda/linalg.cu | 0 .../ATen/kernels/cuda/memory.cu | 0 .../module_container/ATen/kernels/lapack.cpp | 0 .../module_container/ATen/kernels/lapack.h | 0 .../module_container/ATen/kernels/linalg.cpp | 0 .../module_container/ATen/kernels/linalg.h | 0 .../module_container/ATen/kernels/memory.h | 0 .../ATen/kernels/memory_impl.cpp | 0 .../ATen/kernels/rocm/blas.hip.cu | 0 .../ATen/kernels/rocm/lapack.hip.cu | 0 .../ATen/kernels/rocm/linalg.hip.cu | 0 .../ATen/kernels/rocm/memory.hip.cu | 0 .../ATen/kernels/test/CMakeLists.txt | 0 .../ATen/kernels/test/blas_test.cpp | 0 .../ATen/kernels/test/lapack_test.cpp | 0 .../ATen/kernels/test/linalg_test.cpp | 0 .../ATen/kernels/test/memory_test.cpp | 0 .../module_container/ATen/ops/CMakeLists.txt | 0 .../module_container/ATen/ops/einsum_op.cpp | 0 .../module_container/ATen/ops/einsum_op.h | 0 .../module_container/ATen/ops/linalg_op.cpp | 0 .../module_container/ATen/ops/linalg_op.h | 0 .../ATen/ops/test/CMakeLists.txt | 0 .../ATen/ops/test/einsum_op_test.cpp | 0 .../ATen/ops/test/linalg_op_test.cpp | 0 .../module_container/ATen/tensor.h | 0 .../module_container/CMakeLists.txt | 0 .../module_container/base/core/CMakeLists.txt | 0 .../module_container/base/core/allocator.h | 0 .../base/core/bfc_allocator.h | 0 .../base/core/cpu_allocator.cpp | 0 .../base/core/cpu_allocator.h | 0 .../base/core/gpu_allocator.cpp | 0 .../base/core/gpu_allocator.h | 0 .../module_container/base/core/refcount.cpp | 0 .../module_container/base/core/refcount.h | 0 .../module_container/base/macros/cuda.h | 0 .../module_container/base/macros/macros.h | 0 .../module_container/base/macros/rocm.h | 0 .../module_container/base/third_party/blas.h | 0 .../base/third_party/cublas.h | 0 .../base/third_party/cusolver.h | 0 .../base/third_party/hipblas.h | 0 .../base/third_party/hipsolver.h | 0 .../base/third_party/lapack.h | 0 .../module_container/base/utils/array_ref.h | 0 .../module_container/base/utils/gtest.h | 0 .../module_container/base/utils/logging.h | 0 .../module_container/test/CMakeLists.txt | 0 .../module_container/test/allocator_test.cpp | 0 .../test/tensor_accessor_test.cpp | 0 .../test/tensor_buffer_test.cpp | 0 .../module_container/test/tensor_map_test.cpp | 0 .../test/tensor_shape_test.cpp | 0 .../module_container/test/tensor_test.cpp | 0 .../test/tensor_utils_test.cpp | 0 .../module_device/CMakeLists.txt | 0 .../module_device/cuda/memory_op.cu | 85 +- source/source_base/module_device/device.cpp | 776 + .../module_device/device.h | 0 .../module_device/memory_op.cpp | 111 +- .../module_device/memory_op.h | 0 .../module_device/rocm/memory_op.hip.cu | 92 +- .../module_device/test/CMakeLists.txt | 0 .../module_device/test/device_test.cpp | 2 +- .../module_device/test/memory_test.cpp | 22 +- .../module_device/types.h | 0 .../module_mixing/broyden_mixing.cpp | 62 +- .../module_mixing/broyden_mixing.h | 2 +- .../module_mixing/mixing.cpp | 2 +- .../module_mixing/mixing.h | 0 .../module_mixing/mixing_data.cpp | 0 .../module_mixing/mixing_data.h | 6 +- .../module_mixing/plain_mixing.cpp | 6 +- .../module_mixing/plain_mixing.h | 0 .../module_mixing/pulay_mixing.cpp | 8 +- .../module_mixing/pulay_mixing.h | 2 +- .../module_mixing/test/CMakeLists.txt | 0 .../module_mixing/test/mixing_test.cpp | 0 .../{module_base => source_base}/mymath.cpp | 0 source/{module_base => source_base}/mymath.h | 0 .../name_angular.h | 0 source/{module_base => source_base}/ndarray.h | 217 +- .../{module_base => source_base}/opt_CG.cpp | 0 source/{module_base => source_base}/opt_CG.h | 7 +- .../opt_DCsrch.cpp | 0 .../{module_base => source_base}/opt_DCsrch.h | 0 .../{module_base => source_base}/opt_TN.hpp | 0 .../para_gemm.cpp | 7 +- .../{module_base => source_base}/para_gemm.h | 14 +- .../parallel_2d.cpp | 2 +- .../parallel_2d.h | 4 +- .../parallel_comm.cpp | 0 .../parallel_comm.h | 0 .../parallel_common.cpp | 0 .../parallel_common.h | 0 .../parallel_device.cpp | 0 .../parallel_device.h | 60 +- .../parallel_global.cpp | 35 +- .../parallel_global.h | 0 .../parallel_reduce.cpp | 0 .../parallel_reduce.h | 0 .../{module_base => source_base}/projgen.cpp | 8 +- source/{module_base => source_base}/projgen.h | 0 source/{module_base => source_base}/random.h | 0 .../realarray.cpp | 0 .../{module_base => source_base}/realarray.h | 0 .../scalapack_connector.h | 0 .../sph_bessel_recursive-d1.cpp | 0 .../sph_bessel_recursive-d2.cpp | 0 .../sph_bessel_recursive.h | 0 .../spherical_bessel_transformer.cpp | 228 +- .../spherical_bessel_transformer.h | 0 .../test/CMakeLists.txt | 0 .../test/abfs-vector3_order_test.cpp | 28 + .../test/assoc_laguerre_test.cpp | 117 +- .../test/atom_in_test.cpp | 0 .../test/blas_connector_test.cpp | 0 .../test/clebsch_gordan_coeff_test.cpp | 0 .../test/complexarray_test.cpp | 0 .../test/complexmatrix_test.cpp | 0 .../test/container_operator_test.cpp | 0 .../test/cubic_spline_test.cpp | 230 +- .../test/data/bjo.bin | Bin .../test/data/bjxo.bin | Bin .../test/data/cos_periodic.dat | 0 .../test/data/exp_first_deriv.dat | 0 .../test/data/gen_ref.py | 0 .../test/data/log_second_deriv.dat | 0 .../test/data/sin_not_a_knot.dat | 0 .../test/data/sqrt_mix_bc.dat | 0 .../test/data/three_points_not_a_knot.dat | 0 .../test/data/two_points_first_deriv.dat | 0 .../test/data/two_points_periodic.dat | 0 .../test/data/two_points_second_deriv.dat | 0 .../test/element_basis_index_test.cpp | 0 .../test/formatter_test.cpp | 42 +- source/source_base/test/global_file_test.cpp | 160 + .../test/global_function_test.cpp | 0 .../test/gram_schmidt_orth_test.cpp | 0 .../test/intarray_test.cpp | 0 .../test/inverse_matrix_test.cpp | 0 .../test/lapack_connector_test.cpp | 0 .../test/math_bspline_test.cpp | 0 .../test/math_chebyshev_test.cpp | 0 .../test/math_integral_test.cpp | 294 +- .../test/math_polyint_test.cpp | 0 .../test/math_sphbes_test.cpp | 0 source/source_base/test/math_ylmreal_test.cpp | 840 + .../test/mathzone_add1_test.cpp | 0 .../test/mathzone_test.cpp | 0 .../test/matrix3_test.cpp | 0 .../test/matrix_test.cpp | 0 .../test/memory_test.cpp | 0 .../test/mymath_test.cpp | 0 .../test/ndarray_test.cpp | 7 +- .../test/opt_CG_test.cpp | 0 .../test/opt_TN_test.cpp | 0 .../test/opt_test_tools.cpp | 0 .../test/opt_test_tools.h | 0 .../test/perf_sphbes_test.cpp | 0 .../test/realarray_test.cpp | 0 .../test/sph_bessel_recursive_test.cpp | 0 .../spherical_bessel_transformer_test.cpp | 17 +- .../test/test_lebedev_laikov.cpp | 89 +- .../test/timer_test.cpp | 0 .../test/tool_check_test.cpp | 0 .../test/tool_quit_no_exit.cpp | 0 .../test/tool_quit_test.cpp | 0 .../test/tool_threading_test.cpp | 0 .../test/tool_title_test.cpp | 0 .../test/vector3_test.cpp | 0 .../test/ylm_test.cpp | 0 .../test_parallel/CMakeLists.txt | 0 .../test_parallel/blacs_connector_test.cpp | 0 .../test_parallel/blacs_connector_test.sh | 0 .../test_parallel/math_chebyshev_mpi_test.cpp | 22 +- .../test_parallel/parallel_2d_test.cpp | 0 .../test_parallel/parallel_2d_test.sh | 0 .../test_parallel/parallel_common_test.cpp | 4 +- .../test_parallel/parallel_common_test.sh | 0 .../test_parallel/parallel_global_test.cpp | 25 +- .../test_parallel/parallel_global_test.sh | 0 .../test_parallel/parallel_reduce_test.cpp | 6 +- .../test_parallel/parallel_reduce_test.sh | 0 .../test_parallel/test_para_gemm.cpp | 0 source/source_base/timer.cpp | 318 + source/{module_base => source_base}/timer.h | 0 .../tool_check.cpp | 0 .../{module_base => source_base}/tool_check.h | 0 .../tool_quit.cpp | 0 .../{module_base => source_base}/tool_quit.h | 0 .../tool_threading.h | 0 .../tool_title.cpp | 0 .../{module_base => source_base}/tool_title.h | 0 source/{module_base => source_base}/vector3.h | 0 source/{module_base => source_base}/ylm.cpp | 0 source/{module_base => source_base}/ylm.h | 0 source/source_esolver/esolver.cpp | 32 +- source/source_esolver/esolver.h | 6 +- source/source_esolver/esolver_dm2rho.cpp | 2 +- source/source_esolver/esolver_dp.cpp | 11 +- source/source_esolver/esolver_fp.cpp | 63 +- source/source_esolver/esolver_gets.cpp | 8 +- source/source_esolver/esolver_ks.cpp | 155 +- source/source_esolver/esolver_ks_lcao.cpp | 37 +- .../source_esolver/esolver_ks_lcao_tddft.cpp | 98 +- source/source_esolver/esolver_ks_lcao_tddft.h | 2 +- source/source_esolver/esolver_ks_lcaopw.cpp | 377 +- source/source_esolver/esolver_ks_pw.cpp | 58 +- source/source_esolver/esolver_ks_pw.h | 7 +- source/source_esolver/esolver_of.cpp | 55 +- source/source_esolver/esolver_of.h | 6 +- source/source_esolver/esolver_of_tool.cpp | 59 +- source/source_esolver/esolver_sdft_pw.cpp | 32 +- source/source_esolver/lcao_before_scf.cpp | 52 +- source/source_esolver/lcao_others.cpp | 196 +- source/source_esolver/pw_others.cpp | 33 +- source/source_esolver/pw_setup.cpp | 20 +- source/source_hsolver/diag_const_nums.h | 2 +- source/source_hsolver/diag_hs_para.cpp | 8 +- source/source_hsolver/diag_hs_para.h | 17 +- source/source_hsolver/diago_bpcg.cpp | 210 +- source/source_hsolver/diago_bpcg.h | 113 +- source/source_hsolver/diago_cg.cpp | 25 +- source/source_hsolver/diago_cg.h | 100 +- source/source_hsolver/diago_cusolver.cpp | 8 +- source/source_hsolver/diago_cusolver.h | 9 +- source/source_hsolver/diago_cusolvermp.cpp | 4 +- source/source_hsolver/diago_cusolvermp.h | 4 +- source/source_hsolver/diago_dav_subspace.cpp | 186 +- source/source_hsolver/diago_dav_subspace.h | 11 +- source/source_hsolver/diago_david.cpp | 264 +- source/source_hsolver/diago_david.h | 84 +- source/source_hsolver/diago_elpa.cpp | 140 +- source/source_hsolver/diago_elpa.h | 14 +- source/source_hsolver/diago_elpa_native.cpp | 14 +- source/source_hsolver/diago_elpa_native.h | 17 +- source/source_hsolver/diago_iter_assist.cpp | 89 +- source/source_hsolver/diago_iter_assist.h | 45 +- source/source_hsolver/diago_lapack.cpp | 27 +- source/source_hsolver/diago_lapack.h | 6 +- source/source_hsolver/diago_pexsi.cpp | 13 +- source/source_hsolver/diago_pexsi.h | 11 +- source/source_hsolver/diago_pxxxgvx.cpp | 12 +- source/source_hsolver/diago_pxxxgvx.h | 9 +- source/source_hsolver/diago_scalapack.cpp | 232 +- source/source_hsolver/diago_scalapack.h | 69 +- .../genelpa/elpa_new_complex.cpp | 369 +- .../source_hsolver/genelpa/elpa_new_real.cpp | 25 +- source/source_hsolver/genelpa/utils.cpp | 12 +- source/source_hsolver/hsolver_lcao.cpp | 12 +- source/source_hsolver/hsolver_lcaopw.cpp | 15 +- source/source_hsolver/hsolver_lcaopw.h | 6 +- source/source_hsolver/hsolver_pw.cpp | 133 +- source/source_hsolver/hsolver_pw.h | 17 +- source/source_hsolver/hsolver_pw_sdft.cpp | 20 +- .../source_hsolver/kernels/bpcg_kernel_op.cpp | 69 +- .../source_hsolver/kernels/bpcg_kernel_op.h | 115 +- .../kernels/cuda/bpcg_kernel_op.cu | 426 +- .../kernels/cuda/diag_cusolvermp.cu | 140 +- .../kernels/cuda/diag_cusolvermp.cuh | 22 +- source/source_hsolver/kernels/dngvd_op.h | 29 +- .../kernels/rocm/bpcg_kernel_op.hip.cu | 242 +- .../kernels/test/math_dngvd_test.cpp | 76 +- .../kernels/test/perf_math_kernel.cpp | 264 +- .../module_pexsi/pexsi_solver.cpp | 11 +- .../module_pexsi/simple_pexsi.cpp | 46 +- .../source_hsolver/para_linear_transform.cpp | 16 +- source/source_hsolver/para_linear_transform.h | 8 +- source/source_hsolver/parallel_k2d.cpp | 58 +- source/source_hsolver/parallel_k2d.h | 51 +- .../source_hsolver/test/diago_bpcg_test.cpp | 178 +- .../test/diago_cg_float_test.cpp | 207 +- .../test/diago_cg_real_test.cpp | 185 +- source/source_hsolver/test/diago_cg_test.cpp | 205 +- .../test/diago_david_float_test.cpp | 375 +- .../test/diago_david_real_test.cpp | 154 +- .../source_hsolver/test/diago_david_test.cpp | 373 +- source/source_hsolver/test/diago_elpa_utils.h | 48 +- .../source_hsolver/test/diago_lapack_test.cpp | 84 +- source/source_hsolver/test/diago_mock.h | 616 +- .../source_hsolver/test/diago_pexsi_test.cpp | 4 +- .../source_hsolver/test/parallel_k2d_test.cpp | 63 +- source/source_hsolver/test/test_hsolver.cpp | 2 +- .../source_hsolver/test/test_hsolver_pw.cpp | 218 +- .../source_hsolver/test/test_hsolver_sdft.cpp | 147 +- source/source_main/driver.cpp | 21 +- source/source_main/main.cpp | 4 +- 1276 files changed, 107921 insertions(+), 93245 deletions(-) delete mode 100644 source/module_base/assoc_laguerre.cpp delete mode 100644 source/module_base/blas_connector.h delete mode 100644 source/module_base/blas_connector_base.cpp delete mode 100644 source/module_base/blas_connector_matrix.cpp delete mode 100644 source/module_base/blas_connector_vector.cpp delete mode 100644 source/module_base/gather_math_lib_info.cpp delete mode 100644 source/module_base/global_file.cpp delete mode 100644 source/module_base/grid/delley.cpp delete mode 100644 source/module_base/grid/radial.cpp delete mode 100644 source/module_base/kernels/math_kernel_op.h delete mode 100644 source/module_base/kernels/test/math_ylm_op_test.cpp delete mode 100644 source/module_base/math_ylmreal.cpp delete mode 100644 source/module_base/memory.cpp delete mode 100644 source/module_base/module_device/device.cpp delete mode 100644 source/module_base/test/abfs-vector3_order_test.cpp delete mode 100644 source/module_base/test/global_file_test.cpp delete mode 100644 source/module_base/test/math_ylmreal_test.cpp delete mode 100644 source/module_base/timer.cpp rename source/{module_base => source_base}/CMakeLists.txt (100%) rename source/{module_base => source_base}/abfs-vector3_order.cpp (100%) rename source/{module_base => source_base}/abfs-vector3_order.h (100%) rename source/{module_base => source_base}/array_pool.h (100%) create mode 100644 source/source_base/assoc_laguerre.cpp rename source/{module_base => source_base}/assoc_laguerre.h (100%) rename source/{module_base => source_base}/atom_in.h (100%) rename source/{module_base => source_base}/blacs_connector.h (100%) create mode 100644 source/source_base/blas_connector.h create mode 100644 source/source_base/blas_connector_base.cpp create mode 100644 source/source_base/blas_connector_matrix.cpp create mode 100644 source/source_base/blas_connector_vector.cpp rename source/{module_base => source_base}/clebsch_gordan_coeff.cpp (96%) rename source/{module_base => source_base}/clebsch_gordan_coeff.h (93%) rename source/{module_base => source_base}/complexarray.cpp (100%) rename source/{module_base => source_base}/complexarray.h (100%) rename source/{module_base => source_base}/complexmatrix.cpp (100%) rename source/{module_base => source_base}/complexmatrix.h (100%) rename source/{module_base => source_base}/constants.h (100%) rename source/{module_base => source_base}/container_operator.h (100%) rename source/{module_base => source_base}/cubic_spline.cpp (100%) rename source/{module_base => source_base}/cubic_spline.h (100%) rename source/{module_base => source_base}/element_basis_index.cpp (100%) rename source/{module_base => source_base}/element_basis_index.h (100%) rename source/{module_base => source_base}/element_covalent_radius.h (100%) rename source/{module_base => source_base}/element_elec_config.h (100%) rename source/{module_base => source_base}/element_name.h (100%) rename source/{module_base => source_base}/export.cpp (100%) rename source/{module_base => source_base}/export.h (100%) rename source/{module_base => source_base}/formatter.h (61%) create mode 100644 source/source_base/gather_math_lib_info.cpp create mode 100644 source/source_base/global_file.cpp rename source/{module_base => source_base}/global_file.h (100%) rename source/{module_base => source_base}/global_function-func_each_2.h (100%) rename source/{module_base => source_base}/global_function.cpp (79%) rename source/{module_base => source_base}/global_function.h (100%) rename source/{module_base => source_base}/global_function_ddotreal.cpp (97%) rename source/{module_base => source_base}/global_variable.cpp (100%) rename source/{module_base => source_base}/global_variable.h (100%) rename source/{module_base => source_base}/gram_schmidt_orth-inl.h (100%) rename source/{module_base => source_base}/gram_schmidt_orth.h (100%) rename source/{module_base => source_base}/grid/batch.cpp (75%) rename source/{module_base => source_base}/grid/batch.h (100%) create mode 100644 source/source_base/grid/delley.cpp rename source/{module_base => source_base}/grid/delley.h (100%) rename source/{module_base => source_base}/grid/partition.cpp (69%) rename source/{module_base => source_base}/grid/partition.h (100%) create mode 100644 source/source_base/grid/radial.cpp rename source/{module_base => source_base}/grid/radial.h (100%) rename source/{module_base => source_base}/grid/test/CMakeLists.txt (100%) rename source/{module_base => source_base}/grid/test/test_batch.cpp (60%) rename source/{module_base => source_base}/grid/test/test_delley.cpp (70%) rename source/{module_base => source_base}/grid/test/test_partition.cpp (54%) rename source/{module_base => source_base}/grid/test/test_radial.cpp (69%) rename source/{module_base => source_base}/intarray.cpp (100%) rename source/{module_base => source_base}/intarray.h (100%) rename source/{module_base => source_base}/inverse_matrix.cpp (100%) rename source/{module_base => source_base}/inverse_matrix.h (100%) rename source/{module_base => source_base}/kernels/cuda/math_kernel_op.cu (75%) rename source/{module_base => source_base}/kernels/cuda/math_kernel_op_vec.cu (91%) rename source/{module_base => source_base}/kernels/cuda/math_ylm_op.cu (61%) rename source/{module_base => source_base}/kernels/dsp/dsp_connector.cpp (100%) rename source/{module_base => source_base}/kernels/dsp/dsp_connector.h (98%) rename source/{module_base => source_base}/kernels/math_kernel_op.cpp (86%) create mode 100644 source/source_base/kernels/math_kernel_op.h rename source/{module_base => source_base}/kernels/math_kernel_op_vec.cpp (93%) rename source/{module_base => source_base}/kernels/math_ylm_op.cpp (62%) rename source/{module_base => source_base}/kernels/math_ylm_op.h (100%) rename source/{module_base => source_base}/kernels/rocm/math_kernel_op.hip.cu (72%) rename source/{module_base => source_base}/kernels/rocm/math_kernel_op_vec.hip.cu (92%) rename source/{module_base => source_base}/kernels/rocm/math_ylm_op.hip.cu (57%) rename source/{module_base => source_base}/kernels/test/CMakeLists.txt (100%) rename source/{module_base => source_base}/kernels/test/math_kernel_test.cpp (83%) create mode 100644 source/source_base/kernels/test/math_ylm_op_test.cpp rename source/{module_base => source_base}/lapack_connector.h (100%) rename source/{module_base => source_base}/lapack_wrapper.h (100%) rename source/{module_base => source_base}/libm/LICENCE (100%) rename source/{module_base => source_base}/libm/README.md (100%) rename source/{module_base => source_base}/libm/branred.cpp (100%) rename source/{module_base => source_base}/libm/cexp.cpp (100%) rename source/{module_base => source_base}/libm/exp.cpp (100%) rename source/{module_base => source_base}/libm/libm.h (100%) rename source/{module_base => source_base}/libm/sincos.cpp (100%) rename source/{module_base => source_base}/libm/test/CMakeLists.txt (100%) rename source/{module_base => source_base}/libm/test/libm_test.cpp (100%) rename source/{module_base => source_base}/macros.h (100%) rename source/{module_base => source_base}/main.cpp (100%) rename source/{module_base => source_base}/math_bspline.cpp (100%) rename source/{module_base => source_base}/math_bspline.h (100%) rename source/{module_base => source_base}/math_chebyshev.cpp (99%) rename source/{module_base => source_base}/math_chebyshev.h (94%) rename source/{module_base => source_base}/math_erf_complex.cpp (100%) rename source/{module_base => source_base}/math_erf_complex.h (100%) rename source/{module_base => source_base}/math_integral.cpp (100%) rename source/{module_base => source_base}/math_integral.h (100%) rename source/{module_base => source_base}/math_lebedev_laikov.cpp (100%) rename source/{module_base => source_base}/math_lebedev_laikov.h (100%) rename source/{module_base => source_base}/math_polyint.cpp (100%) rename source/{module_base => source_base}/math_polyint.h (100%) rename source/{module_base => source_base}/math_sphbes.cpp (100%) rename source/{module_base => source_base}/math_sphbes.h (100%) create mode 100644 source/source_base/math_ylmreal.cpp rename source/{module_base => source_base}/math_ylmreal.h (100%) rename source/{module_base => source_base}/mathzone.h (100%) rename source/{module_base => source_base}/mathzone_add1.cpp (100%) rename source/{module_base => source_base}/mathzone_add1.h (100%) rename source/{module_base => source_base}/matrix-inl.h (100%) rename source/{module_base => source_base}/matrix.cpp (100%) rename source/{module_base => source_base}/matrix.h (100%) rename source/{module_base => source_base}/matrix3.cpp (100%) rename source/{module_base => source_base}/matrix3.h (100%) rename source/{module_base => source_base}/matrix_wrapper.h (100%) rename source/{module_base => source_base}/matrix_wrapper_tianhe2.h (100%) rename source/{module_base => source_base}/mcd.c (100%) rename source/{module_base => source_base}/mcd.h (100%) create mode 100644 source/source_base/memory.cpp rename source/{module_base => source_base}/memory.h (100%) rename source/{module_base => source_base}/module_container/ATen/core/CMakeLists.txt (100%) rename source/{module_base => source_base}/module_container/ATen/core/tensor.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/core/tensor.h (100%) rename source/{module_base => source_base}/module_container/ATen/core/tensor_accessor.h (100%) rename source/{module_base => source_base}/module_container/ATen/core/tensor_buffer.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/core/tensor_buffer.h (100%) rename source/{module_base => source_base}/module_container/ATen/core/tensor_map.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/core/tensor_map.h (100%) rename source/{module_base => source_base}/module_container/ATen/core/tensor_shape.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/core/tensor_shape.h (100%) rename source/{module_base => source_base}/module_container/ATen/core/tensor_types.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/core/tensor_types.h (79%) rename source/{module_base => source_base}/module_container/ATen/core/tensor_utils.h (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/CMakeLists.txt (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/blas.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/blas.h (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/cuda/blas.cu (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/cuda/lapack.cu (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/cuda/linalg.cu (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/cuda/memory.cu (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/lapack.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/lapack.h (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/linalg.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/linalg.h (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/memory.h (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/memory_impl.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/rocm/blas.hip.cu (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/rocm/lapack.hip.cu (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/rocm/linalg.hip.cu (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/rocm/memory.hip.cu (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/test/CMakeLists.txt (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/test/blas_test.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/test/lapack_test.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/test/linalg_test.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/kernels/test/memory_test.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/ops/CMakeLists.txt (100%) rename source/{module_base => source_base}/module_container/ATen/ops/einsum_op.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/ops/einsum_op.h (100%) rename source/{module_base => source_base}/module_container/ATen/ops/linalg_op.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/ops/linalg_op.h (100%) rename source/{module_base => source_base}/module_container/ATen/ops/test/CMakeLists.txt (100%) rename source/{module_base => source_base}/module_container/ATen/ops/test/einsum_op_test.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/ops/test/linalg_op_test.cpp (100%) rename source/{module_base => source_base}/module_container/ATen/tensor.h (100%) rename source/{module_base => source_base}/module_container/CMakeLists.txt (100%) rename source/{module_base => source_base}/module_container/base/core/CMakeLists.txt (100%) rename source/{module_base => source_base}/module_container/base/core/allocator.h (100%) rename source/{module_base => source_base}/module_container/base/core/bfc_allocator.h (100%) rename source/{module_base => source_base}/module_container/base/core/cpu_allocator.cpp (100%) rename source/{module_base => source_base}/module_container/base/core/cpu_allocator.h (100%) rename source/{module_base => source_base}/module_container/base/core/gpu_allocator.cpp (100%) rename source/{module_base => source_base}/module_container/base/core/gpu_allocator.h (100%) rename source/{module_base => source_base}/module_container/base/core/refcount.cpp (100%) rename source/{module_base => source_base}/module_container/base/core/refcount.h (100%) rename source/{module_base => source_base}/module_container/base/macros/cuda.h (100%) rename source/{module_base => source_base}/module_container/base/macros/macros.h (100%) rename source/{module_base => source_base}/module_container/base/macros/rocm.h (100%) rename source/{module_base => source_base}/module_container/base/third_party/blas.h (100%) rename source/{module_base => source_base}/module_container/base/third_party/cublas.h (100%) rename source/{module_base => source_base}/module_container/base/third_party/cusolver.h (100%) rename source/{module_base => source_base}/module_container/base/third_party/hipblas.h (100%) rename source/{module_base => source_base}/module_container/base/third_party/hipsolver.h (100%) rename source/{module_base => source_base}/module_container/base/third_party/lapack.h (100%) rename source/{module_base => source_base}/module_container/base/utils/array_ref.h (100%) rename source/{module_base => source_base}/module_container/base/utils/gtest.h (100%) rename source/{module_base => source_base}/module_container/base/utils/logging.h (100%) rename source/{module_base => source_base}/module_container/test/CMakeLists.txt (100%) rename source/{module_base => source_base}/module_container/test/allocator_test.cpp (100%) rename source/{module_base => source_base}/module_container/test/tensor_accessor_test.cpp (100%) rename source/{module_base => source_base}/module_container/test/tensor_buffer_test.cpp (100%) rename source/{module_base => source_base}/module_container/test/tensor_map_test.cpp (100%) rename source/{module_base => source_base}/module_container/test/tensor_shape_test.cpp (100%) rename source/{module_base => source_base}/module_container/test/tensor_test.cpp (100%) rename source/{module_base => source_base}/module_container/test/tensor_utils_test.cpp (100%) rename source/{module_base => source_base}/module_device/CMakeLists.txt (100%) rename source/{module_base => source_base}/module_device/cuda/memory_op.cu (88%) create mode 100644 source/source_base/module_device/device.cpp rename source/{module_base => source_base}/module_device/device.h (100%) rename source/{module_base => source_base}/module_device/memory_op.cpp (87%) rename source/{module_base => source_base}/module_device/memory_op.h (100%) rename source/{module_base => source_base}/module_device/rocm/memory_op.hip.cu (87%) rename source/{module_base => source_base}/module_device/test/CMakeLists.txt (100%) rename source/{module_base => source_base}/module_device/test/device_test.cpp (94%) rename source/{module_base => source_base}/module_device/test/memory_test.cpp (93%) rename source/{module_base => source_base}/module_device/types.h (100%) rename source/{module_base => source_base}/module_mixing/broyden_mixing.cpp (85%) rename source/{module_base => source_base}/module_mixing/broyden_mixing.h (99%) rename source/{module_base => source_base}/module_mixing/mixing.cpp (98%) rename source/{module_base => source_base}/module_mixing/mixing.h (100%) rename source/{module_base => source_base}/module_mixing/mixing_data.cpp (100%) rename source/{module_base => source_base}/module_mixing/mixing_data.h (94%) rename source/{module_base => source_base}/module_mixing/plain_mixing.cpp (97%) rename source/{module_base => source_base}/module_mixing/plain_mixing.h (100%) rename source/{module_base => source_base}/module_mixing/pulay_mixing.cpp (97%) rename source/{module_base => source_base}/module_mixing/pulay_mixing.h (99%) rename source/{module_base => source_base}/module_mixing/test/CMakeLists.txt (100%) rename source/{module_base => source_base}/module_mixing/test/mixing_test.cpp (100%) rename source/{module_base => source_base}/mymath.cpp (100%) rename source/{module_base => source_base}/mymath.h (100%) rename source/{module_base => source_base}/name_angular.h (100%) rename source/{module_base => source_base}/ndarray.h (57%) rename source/{module_base => source_base}/opt_CG.cpp (100%) rename source/{module_base => source_base}/opt_CG.h (98%) rename source/{module_base => source_base}/opt_DCsrch.cpp (100%) rename source/{module_base => source_base}/opt_DCsrch.h (100%) rename source/{module_base => source_base}/opt_TN.hpp (100%) rename source/{module_base => source_base}/para_gemm.cpp (99%) rename source/{module_base => source_base}/para_gemm.h (92%) rename source/{module_base => source_base}/parallel_2d.cpp (98%) rename source/{module_base => source_base}/parallel_2d.h (98%) rename source/{module_base => source_base}/parallel_comm.cpp (100%) rename source/{module_base => source_base}/parallel_comm.h (100%) rename source/{module_base => source_base}/parallel_common.cpp (100%) rename source/{module_base => source_base}/parallel_common.h (100%) rename source/{module_base => source_base}/parallel_device.cpp (100%) rename source/{module_base => source_base}/parallel_device.h (80%) rename source/{module_base => source_base}/parallel_global.cpp (94%) rename source/{module_base => source_base}/parallel_global.h (100%) rename source/{module_base => source_base}/parallel_reduce.cpp (100%) rename source/{module_base => source_base}/parallel_reduce.h (100%) rename source/{module_base => source_base}/projgen.cpp (98%) rename source/{module_base => source_base}/projgen.h (100%) rename source/{module_base => source_base}/random.h (100%) rename source/{module_base => source_base}/realarray.cpp (100%) rename source/{module_base => source_base}/realarray.h (100%) rename source/{module_base => source_base}/scalapack_connector.h (100%) rename source/{module_base => source_base}/sph_bessel_recursive-d1.cpp (100%) rename source/{module_base => source_base}/sph_bessel_recursive-d2.cpp (100%) rename source/{module_base => source_base}/sph_bessel_recursive.h (100%) rename source/{module_base => source_base}/spherical_bessel_transformer.cpp (67%) rename source/{module_base => source_base}/spherical_bessel_transformer.h (100%) rename source/{module_base => source_base}/test/CMakeLists.txt (100%) create mode 100644 source/source_base/test/abfs-vector3_order_test.cpp rename source/{module_base => source_base}/test/assoc_laguerre_test.cpp (75%) rename source/{module_base => source_base}/test/atom_in_test.cpp (100%) rename source/{module_base => source_base}/test/blas_connector_test.cpp (100%) rename source/{module_base => source_base}/test/clebsch_gordan_coeff_test.cpp (100%) rename source/{module_base => source_base}/test/complexarray_test.cpp (100%) rename source/{module_base => source_base}/test/complexmatrix_test.cpp (100%) rename source/{module_base => source_base}/test/container_operator_test.cpp (100%) rename source/{module_base => source_base}/test/cubic_spline_test.cpp (64%) rename source/{module_base => source_base}/test/data/bjo.bin (100%) rename source/{module_base => source_base}/test/data/bjxo.bin (100%) rename source/{module_base => source_base}/test/data/cos_periodic.dat (100%) rename source/{module_base => source_base}/test/data/exp_first_deriv.dat (100%) rename source/{module_base => source_base}/test/data/gen_ref.py (100%) rename source/{module_base => source_base}/test/data/log_second_deriv.dat (100%) rename source/{module_base => source_base}/test/data/sin_not_a_knot.dat (100%) rename source/{module_base => source_base}/test/data/sqrt_mix_bc.dat (100%) rename source/{module_base => source_base}/test/data/three_points_not_a_knot.dat (100%) rename source/{module_base => source_base}/test/data/two_points_first_deriv.dat (100%) rename source/{module_base => source_base}/test/data/two_points_periodic.dat (100%) rename source/{module_base => source_base}/test/data/two_points_second_deriv.dat (100%) rename source/{module_base => source_base}/test/element_basis_index_test.cpp (100%) rename source/{module_base => source_base}/test/formatter_test.cpp (95%) create mode 100644 source/source_base/test/global_file_test.cpp rename source/{module_base => source_base}/test/global_function_test.cpp (100%) rename source/{module_base => source_base}/test/gram_schmidt_orth_test.cpp (100%) rename source/{module_base => source_base}/test/intarray_test.cpp (100%) rename source/{module_base => source_base}/test/inverse_matrix_test.cpp (100%) rename source/{module_base => source_base}/test/lapack_connector_test.cpp (100%) rename source/{module_base => source_base}/test/math_bspline_test.cpp (100%) rename source/{module_base => source_base}/test/math_chebyshev_test.cpp (100%) rename source/{module_base => source_base}/test/math_integral_test.cpp (51%) rename source/{module_base => source_base}/test/math_polyint_test.cpp (100%) rename source/{module_base => source_base}/test/math_sphbes_test.cpp (100%) create mode 100644 source/source_base/test/math_ylmreal_test.cpp rename source/{module_base => source_base}/test/mathzone_add1_test.cpp (100%) rename source/{module_base => source_base}/test/mathzone_test.cpp (100%) rename source/{module_base => source_base}/test/matrix3_test.cpp (100%) rename source/{module_base => source_base}/test/matrix_test.cpp (100%) rename source/{module_base => source_base}/test/memory_test.cpp (100%) rename source/{module_base => source_base}/test/mymath_test.cpp (100%) rename source/{module_base => source_base}/test/ndarray_test.cpp (97%) rename source/{module_base => source_base}/test/opt_CG_test.cpp (100%) rename source/{module_base => source_base}/test/opt_TN_test.cpp (100%) rename source/{module_base => source_base}/test/opt_test_tools.cpp (100%) rename source/{module_base => source_base}/test/opt_test_tools.h (100%) rename source/{module_base => source_base}/test/perf_sphbes_test.cpp (100%) rename source/{module_base => source_base}/test/realarray_test.cpp (100%) rename source/{module_base => source_base}/test/sph_bessel_recursive_test.cpp (100%) rename source/{module_base => source_base}/test/spherical_bessel_transformer_test.cpp (97%) rename source/{module_base => source_base}/test/test_lebedev_laikov.cpp (62%) rename source/{module_base => source_base}/test/timer_test.cpp (100%) rename source/{module_base => source_base}/test/tool_check_test.cpp (100%) rename source/{module_base => source_base}/test/tool_quit_no_exit.cpp (100%) rename source/{module_base => source_base}/test/tool_quit_test.cpp (100%) rename source/{module_base => source_base}/test/tool_threading_test.cpp (100%) rename source/{module_base => source_base}/test/tool_title_test.cpp (100%) rename source/{module_base => source_base}/test/vector3_test.cpp (100%) rename source/{module_base => source_base}/test/ylm_test.cpp (100%) rename source/{module_base => source_base}/test_parallel/CMakeLists.txt (100%) rename source/{module_base => source_base}/test_parallel/blacs_connector_test.cpp (100%) rename source/{module_base => source_base}/test_parallel/blacs_connector_test.sh (100%) rename source/{module_base => source_base}/test_parallel/math_chebyshev_mpi_test.cpp (97%) rename source/{module_base => source_base}/test_parallel/parallel_2d_test.cpp (100%) rename source/{module_base => source_base}/test_parallel/parallel_2d_test.sh (100%) rename source/{module_base => source_base}/test_parallel/parallel_common_test.cpp (96%) rename source/{module_base => source_base}/test_parallel/parallel_common_test.sh (100%) rename source/{module_base => source_base}/test_parallel/parallel_global_test.cpp (88%) rename source/{module_base => source_base}/test_parallel/parallel_global_test.sh (100%) rename source/{module_base => source_base}/test_parallel/parallel_reduce_test.cpp (99%) rename source/{module_base => source_base}/test_parallel/parallel_reduce_test.sh (100%) rename source/{module_base => source_base}/test_parallel/test_para_gemm.cpp (100%) create mode 100644 source/source_base/timer.cpp rename source/{module_base => source_base}/timer.h (100%) rename source/{module_base => source_base}/tool_check.cpp (100%) rename source/{module_base => source_base}/tool_check.h (100%) rename source/{module_base => source_base}/tool_quit.cpp (100%) rename source/{module_base => source_base}/tool_quit.h (100%) rename source/{module_base => source_base}/tool_threading.h (100%) rename source/{module_base => source_base}/tool_title.cpp (100%) rename source/{module_base => source_base}/tool_title.h (100%) rename source/{module_base => source_base}/vector3.h (100%) rename source/{module_base => source_base}/ylm.cpp (100%) rename source/{module_base => source_base}/ylm.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7914ecc00a..d4e265adbe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -167,7 +167,7 @@ set(ABACUS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/source) set(ABACUS_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tests) set(ABACUS_BIN_PATH ${CMAKE_CURRENT_BINARY_DIR}/${ABACUS_BIN_NAME}) include_directories(${ABACUS_SOURCE_DIR}) -include_directories(${ABACUS_SOURCE_DIR}/module_base/module_container) +include_directories(${ABACUS_SOURCE_DIR}/source_base/module_container) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 916b0516bd..6b8acf305e 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -39,7 +39,7 @@ The source code of ABACUS is based on several modules. Under the ABACUS root dir For those who are interested in the source code, the following figure shows the structure of the source code. ```text -|-- module_base A basic module including +|-- source_base A basic module including | | (1) Mathematical library interface functions: BLAS, LAPACK, Scalapack; | | (2) Custom data classes: matrix, vector definitions and related functions; | | (3) Parallelization functions: MPI, OpenMP; @@ -183,7 +183,7 @@ pre-commit install ## Adding a unit test -We use [GoogleTest](https://github.com/google/googletest) as our test framework. Write your test under the corresponding module folder at `abacus-develop/tests`, then append the test to `tests/CMakeLists.txt`. If there are currently no unit tests provided for the module, do as follows. `module_base` provides a simple demonstration. +We use [GoogleTest](https://github.com/google/googletest) as our test framework. Write your test under the corresponding module folder at `abacus-develop/tests`, then append the test to `tests/CMakeLists.txt`. If there are currently no unit tests provided for the module, do as follows. `source_base` provides a simple demonstration. - Add a folder named `test` under the module. - Append the content below to `CMakeLists.txt` of the module: diff --git a/python/pyabacus/CMakeLists.txt b/python/pyabacus/CMakeLists.txt index 0de042e2db..cfe4df5e7e 100644 --- a/python/pyabacus/CMakeLists.txt +++ b/python/pyabacus/CMakeLists.txt @@ -12,7 +12,7 @@ find_package(pybind11 CONFIG REQUIRED) # set source path set(ABACUS_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../../source") -set(BASE_PATH "${ABACUS_SOURCE_DIR}/module_base") +set(BASE_PATH "${ABACUS_SOURCE_DIR}/source_base") set(NAO_PATH "${ABACUS_SOURCE_DIR}/module_basis/module_nao") set(HSOLVER_PATH "${ABACUS_SOURCE_DIR}/source_hsolver") set(PSI_PATH "${ABACUS_SOURCE_DIR}/module_psi") @@ -69,14 +69,14 @@ endif() include_directories( ${BASE_PATH} ${ABACUS_SOURCE_DIR} - ${ABACUS_SOURCE_DIR}/module_base/module_container + ${ABACUS_SOURCE_DIR}/source_base/module_container ) # add basic libraries set(CMAKE_POSITION_INDEPENDENT_CODE ON) # add base set(BASE_BINARY_DIR "${PROJECT_SOURCE_DIR}/build/base") -add_subdirectory(${ABACUS_SOURCE_DIR}/module_base ${BASE_BINARY_DIR}) +add_subdirectory(${ABACUS_SOURCE_DIR}/source_base ${BASE_BINARY_DIR}) # add parameter set(PARAMETER_BINARY_DIR "${PROJECT_SOURCE_DIR}/build/parameter") add_subdirectory(${ABACUS_SOURCE_DIR}/module_parameter ${PARAMETER_BINARY_DIR}) diff --git a/python/pyabacus/CONTRIBUTING.md b/python/pyabacus/CONTRIBUTING.md index 202e7385ac..2806c59cd4 100644 --- a/python/pyabacus/CONTRIBUTING.md +++ b/python/pyabacus/CONTRIBUTING.md @@ -72,7 +72,7 @@ find_package(pybind11 CONFIG REQUIRED) ```cmake # Set source path set(ABACUS_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../../source") -set(BASE_PATH "${ABACUS_SOURCE_DIR}/module_base") +set(BASE_PATH "${ABACUS_SOURCE_DIR}/source_base") set(NAO_PATH "${ABACUS_SOURCE_DIR}/module_basis/module_nao") set(HSOLVER_PATH "${ABACUS_SOURCE_DIR}/source_hsolver") set(PSI_PATH "${ABACUS_SOURCE_DIR}/module_psi") @@ -131,7 +131,7 @@ endif() include_directories( ${BASE_PATH} ${ABACUS_SOURCE_DIR} - ${ABACUS_SOURCE_DIR}/module_base/module_container + ${ABACUS_SOURCE_DIR}/source_base/module_container ) ``` - This section adds the necessary include directories for the project. @@ -141,7 +141,7 @@ include_directories( set(CMAKE_POSITION_INDEPENDENT_CODE ON) # Add base set(BASE_BINARY_DIR "${PROJECT_SOURCE_DIR}/build/base") -add_subdirectory(${ABACUS_SOURCE_DIR}/module_base ${BASE_BINARY_DIR}) +add_subdirectory(${ABACUS_SOURCE_DIR}/source_base ${BASE_BINARY_DIR}) # Add parameter set(PARAMETER_BINARY_DIR "${PROJECT_SOURCE_DIR}/build/parameter") add_subdirectory(${ABACUS_SOURCE_DIR}/module_parameter ${PARAMETER_BINARY_DIR}) diff --git a/python/pyabacus/examples/indexmap.py b/python/pyabacus/examples/indexmap.py index f9917919d8..9cfc798d58 100644 --- a/python/pyabacus/examples/indexmap.py +++ b/python/pyabacus/examples/indexmap.py @@ -60,7 +60,7 @@ def _index_map(ntype, natom, lmax, nzeta=None): 0, 1, -1, 2, -2, 3, -3, ..., l, -l - (see module_base/ylm.cpp and module_base/math_ylmreal.cpp + (see source_base/ylm.cpp and source_base/math_ylmreal.cpp for details) ''' diff --git a/python/pyabacus/src/ModuleBase/py_base_math.cpp b/python/pyabacus/src/ModuleBase/py_base_math.cpp index b9803c81cd..9129204289 100644 --- a/python/pyabacus/src/ModuleBase/py_base_math.cpp +++ b/python/pyabacus/src/ModuleBase/py_base_math.cpp @@ -1,10 +1,10 @@ +#include "source_base/math_integral.h" +#include "source_base/math_sphbes.h" +#include "source_base/spherical_bessel_transformer.h" + #include #include -#include "module_base/math_sphbes.h" -#include "module_base/math_integral.h" -#include "module_base/spherical_bessel_transformer.h" - namespace py = pybind11; using namespace pybind11::literals; template @@ -65,161 +65,166 @@ void bind_base_math(py::module& m) // python binding for class Integral py::class_(m, "Integral") .def(py::init<>()) - .def_static("Simpson_Integral", [](const int mesh, py::array_t func, py::array_t rab, double asum) { - py::buffer_info func_info = func.request(); - if (func_info.ndim != 1) - { - throw std::runtime_error("func array must be 1-dimensional"); - } - py::buffer_info rab_info = rab.request(); - if (rab.ndim() != 1) - { - throw std::runtime_error("rab array must be 1-dimensional"); - } + .def_static("Simpson_Integral", + [](const int mesh, py::array_t func, py::array_t rab, double asum) { + py::buffer_info func_info = func.request(); + if (func_info.ndim != 1) + { + throw std::runtime_error("func array must be 1-dimensional"); + } + py::buffer_info rab_info = rab.request(); + if (rab.ndim() != 1) + { + throw std::runtime_error("rab array must be 1-dimensional"); + } + + double isum = asum; + ModuleBase::Integral::Simpson_Integral(mesh, + static_cast(func_info.ptr), + static_cast(rab_info.ptr), + isum); + return isum; + }) + .def_static( + "Simpson_Integral", + [](const int mesh, py::array_t func, const double dr, double asum) { + py::buffer_info func_info = func.request(); + if (func_info.ndim != 1) + { + throw std::runtime_error("func array must be 1-dimensional"); + } - double isum = asum; - ModuleBase::Integral::Simpson_Integral(mesh, - static_cast(func_info.ptr), - static_cast(rab_info.ptr), - isum); - return isum; - }) - .def_static("Simpson_Integral", [](const int mesh, py::array_t func, const double dr, double asum){ - py::buffer_info func_info = func.request(); - if (func_info.ndim != 1) - { - throw std::runtime_error("func array must be 1-dimensional"); - } - double isum = asum; - ModuleBase::Integral::Simpson_Integral(mesh, - static_cast(func_info.ptr), - dr, - isum); + ModuleBase::Integral::Simpson_Integral(mesh, static_cast(func_info.ptr), dr, isum); return isum; - }) - .def_static("Simpson_Integral_0toall", [](const int mesh, py::array_t func, py::array_t rab, py::array_t asum){ - py::buffer_info func_info = func.request(); - if (func_info.ndim != 1) - { - throw std::runtime_error("func array must be 1-dimensional"); - } - py::buffer_info rab_info = rab.request(); - if (rab.ndim() != 1) - { - throw std::runtime_error("rab array must be 1-dimensional"); - } - py::buffer_info asum_info = asum.request(); - if (asum.ndim() != 1) - { - throw std::runtime_error("asum array must be 1-dimensional"); - } - ModuleBase::Integral::Simpson_Integral_0toall(mesh, - static_cast(func_info.ptr), - static_cast(rab_info.ptr), - static_cast(asum_info.ptr)); - }) - .def_static("Simpson_Integral_alltoinf", [](const int mesh, py::array_t func, py::array_t rab, py::array_t asum){ - py::buffer_info func_info = func.request(); - if (func_info.ndim != 1) - { - throw std::runtime_error("func array must be 1-dimensional"); - } - py::buffer_info rab_info = rab.request(); - if (rab.ndim() != 1) - { - throw std::runtime_error("rab array must be 1-dimensional"); - } - py::buffer_info asum_info = asum.request(); - if (asum.ndim() != 1) - { - throw std::runtime_error("asum array must be 1-dimensional"); - } - ModuleBase::Integral::Simpson_Integral_alltoinf(mesh, - static_cast(func_info.ptr), - static_cast(rab_info.ptr), - static_cast(asum_info.ptr)); - }) - .def_static("Simpson_Integral_alltoinf", [](const int mesh, py::array_t func, py::array_t rab, py::array_t asum){ - py::buffer_info func_info = func.request(); - if (func_info.ndim != 1) - { - throw std::runtime_error("func array must be 1-dimensional"); - } - py::buffer_info rab_info = rab.request(); - if (rab.ndim() != 1) - { - throw std::runtime_error("rab array must be 1-dimensional"); - } - py::buffer_info asum_info = asum.request(); - if (asum.ndim() != 1) - { - throw std::runtime_error("asum array must be 1-dimensional"); - } - ModuleBase::Integral::Simpson_Integral_alltoinf(mesh, - static_cast(func_info.ptr), - static_cast(rab_info.ptr), - static_cast(asum_info.ptr)); - }) - .def_static("simpson", [](const int n, py::array_t f, const double dx){ - py::buffer_info f_info = f.request(); - if (f_info.ndim != 1) - { - throw std::runtime_error("f array must be 1-dimensional"); - } - return ModuleBase::Integral::simpson(n, - static_cast(f_info.ptr), - dx); - }) - .def_static("simpson", [](const int n, py::array_t f, py::array_t h){ - py::buffer_info f_info = f.request(); - if (f_info.ndim != 1) - { - throw std::runtime_error("f array must be 1-dimensional"); - } - py::buffer_info h_info = h.request(); - if (h.ndim() != 1) - { - throw std::runtime_error("h array must be 1-dimensional"); - } - return ModuleBase::Integral::simpson(n, - static_cast(f_info.ptr), - static_cast(h_info.ptr)); - }) - .def_static("Gauss_Legendre_grid_and_weight", [](const int n, py::array_t x, py::array_t w){ - py::buffer_info x_info = x.request(); - if (x_info.ndim != 1) - { - throw std::runtime_error("x array must be 1-dimensional"); - } - py::buffer_info w_info = w.request(); - if (w.ndim() != 1) - { - throw std::runtime_error("w array must be 1-dimensional"); - } - ModuleBase::Integral::Gauss_Legendre_grid_and_weight(n, - static_cast(x_info.ptr), - static_cast(w_info.ptr)); - }) - .def_static("Gauss_Legendre_grid_and_weight", [](const double xmin, const double xmax, const int n, py::array_t x, py::array_t w){ - py::buffer_info x_info = x.request(); - if (x_info.ndim != 1) - { - throw std::runtime_error("x array must be 1-dimensional"); - } - py::buffer_info w_info = w.request(); - if (w.ndim() != 1) - { - throw std::runtime_error("w array must be 1-dimensional"); - } - ModuleBase::Integral::Gauss_Legendre_grid_and_weight(xmin, - xmax, - n, - static_cast(x_info.ptr), - static_cast(w_info.ptr)); - }); - py::class_(m, "SphericalBesselTransformer") - .def(py::init<>()); + }) + .def_static("Simpson_Integral_0toall", + [](const int mesh, py::array_t func, py::array_t rab, py::array_t asum) { + py::buffer_info func_info = func.request(); + if (func_info.ndim != 1) + { + throw std::runtime_error("func array must be 1-dimensional"); + } + py::buffer_info rab_info = rab.request(); + if (rab.ndim() != 1) + { + throw std::runtime_error("rab array must be 1-dimensional"); + } + py::buffer_info asum_info = asum.request(); + if (asum.ndim() != 1) + { + throw std::runtime_error("asum array must be 1-dimensional"); + } + ModuleBase::Integral::Simpson_Integral_0toall(mesh, + static_cast(func_info.ptr), + static_cast(rab_info.ptr), + static_cast(asum_info.ptr)); + }) + .def_static("Simpson_Integral_alltoinf", + [](const int mesh, py::array_t func, py::array_t rab, py::array_t asum) { + py::buffer_info func_info = func.request(); + if (func_info.ndim != 1) + { + throw std::runtime_error("func array must be 1-dimensional"); + } + py::buffer_info rab_info = rab.request(); + if (rab.ndim() != 1) + { + throw std::runtime_error("rab array must be 1-dimensional"); + } + py::buffer_info asum_info = asum.request(); + if (asum.ndim() != 1) + { + throw std::runtime_error("asum array must be 1-dimensional"); + } + ModuleBase::Integral::Simpson_Integral_alltoinf(mesh, + static_cast(func_info.ptr), + static_cast(rab_info.ptr), + static_cast(asum_info.ptr)); + }) + .def_static("Simpson_Integral_alltoinf", + [](const int mesh, py::array_t func, py::array_t rab, py::array_t asum) { + py::buffer_info func_info = func.request(); + if (func_info.ndim != 1) + { + throw std::runtime_error("func array must be 1-dimensional"); + } + py::buffer_info rab_info = rab.request(); + if (rab.ndim() != 1) + { + throw std::runtime_error("rab array must be 1-dimensional"); + } + py::buffer_info asum_info = asum.request(); + if (asum.ndim() != 1) + { + throw std::runtime_error("asum array must be 1-dimensional"); + } + ModuleBase::Integral::Simpson_Integral_alltoinf(mesh, + static_cast(func_info.ptr), + static_cast(rab_info.ptr), + static_cast(asum_info.ptr)); + }) + .def_static("simpson", + [](const int n, py::array_t f, const double dx) { + py::buffer_info f_info = f.request(); + if (f_info.ndim != 1) + { + throw std::runtime_error("f array must be 1-dimensional"); + } + return ModuleBase::Integral::simpson(n, static_cast(f_info.ptr), dx); + }) + .def_static("simpson", + [](const int n, py::array_t f, py::array_t h) { + py::buffer_info f_info = f.request(); + if (f_info.ndim != 1) + { + throw std::runtime_error("f array must be 1-dimensional"); + } + py::buffer_info h_info = h.request(); + if (h.ndim() != 1) + { + throw std::runtime_error("h array must be 1-dimensional"); + } + return ModuleBase::Integral::simpson(n, + static_cast(f_info.ptr), + static_cast(h_info.ptr)); + }) + .def_static("Gauss_Legendre_grid_and_weight", + [](const int n, py::array_t x, py::array_t w) { + py::buffer_info x_info = x.request(); + if (x_info.ndim != 1) + { + throw std::runtime_error("x array must be 1-dimensional"); + } + py::buffer_info w_info = w.request(); + if (w.ndim() != 1) + { + throw std::runtime_error("w array must be 1-dimensional"); + } + ModuleBase::Integral::Gauss_Legendre_grid_and_weight(n, + static_cast(x_info.ptr), + static_cast(w_info.ptr)); + }) + .def_static( + "Gauss_Legendre_grid_and_weight", + [](const double xmin, const double xmax, const int n, py::array_t x, py::array_t w) { + py::buffer_info x_info = x.request(); + if (x_info.ndim != 1) + { + throw std::runtime_error("x array must be 1-dimensional"); + } + py::buffer_info w_info = w.request(); + if (w.ndim() != 1) + { + throw std::runtime_error("w array must be 1-dimensional"); + } + ModuleBase::Integral::Gauss_Legendre_grid_and_weight(xmin, + xmax, + n, + static_cast(x_info.ptr), + static_cast(w_info.ptr)); + }); + py::class_(m, "SphericalBesselTransformer").def(py::init<>()); } PYBIND11_MODULE(_base_pack, m) diff --git a/python/pyabacus/src/ModuleNAO/CMakeLists.txt b/python/pyabacus/src/ModuleNAO/CMakeLists.txt index b9b7fe9935..d09448e454 100644 --- a/python/pyabacus/src/ModuleNAO/CMakeLists.txt +++ b/python/pyabacus/src/ModuleNAO/CMakeLists.txt @@ -13,12 +13,12 @@ list(APPEND _naos ${NAO_PATH}/two_center_integrator.cpp ${NAO_PATH}/two_center_table.cpp # dependency - ${ABACUS_SOURCE_DIR}/module_base/kernels/math_ylm_op.cpp - ${ABACUS_SOURCE_DIR}/module_base/kernels/math_kernel_op.cpp - ${ABACUS_SOURCE_DIR}/module_base/kernels/math_kernel_op_vec.cpp + ${ABACUS_SOURCE_DIR}/source_base/kernels/math_ylm_op.cpp + ${ABACUS_SOURCE_DIR}/source_base/kernels/math_kernel_op.cpp + ${ABACUS_SOURCE_DIR}/source_base/kernels/math_kernel_op_vec.cpp # ${ABACUS_SOURCE_DIR}/module_psi/kernels/psi_memory_op.cpp - ${ABACUS_SOURCE_DIR}/module_base/module_device/memory_op.cpp - ${ABACUS_SOURCE_DIR}/module_base/module_device/device.cpp + ${ABACUS_SOURCE_DIR}/source_base/module_device/memory_op.cpp + ${ABACUS_SOURCE_DIR}/source_base/module_device/device.cpp ) add_library(naopack SHARED ${_naos} diff --git a/python/pyabacus/src/ModuleNAO/py_m_nao.cpp b/python/pyabacus/src/ModuleNAO/py_m_nao.cpp index 92c5084d44..1ee8367fef 100644 --- a/python/pyabacus/src/ModuleNAO/py_m_nao.cpp +++ b/python/pyabacus/src/ModuleNAO/py_m_nao.cpp @@ -1,11 +1,11 @@ +#include "module_basis/module_nao/radial_collection.h" +#include "module_basis/module_nao/two_center_integrator.h" +#include "source_base/vector3.h" + #include #include #include -#include "module_base/vector3.h" -#include "module_basis/module_nao/radial_collection.h" -#include "module_basis/module_nao/two_center_integrator.h" - namespace py = pybind11; using namespace pybind11::literals; template diff --git a/python/pyabacus/src/hsolver/py_diago_cg.hpp b/python/pyabacus/src/hsolver/py_diago_cg.hpp index 95742ab62c..15cc3e5a77 100644 --- a/python/pyabacus/src/hsolver/py_diago_cg.hpp +++ b/python/pyabacus/src/hsolver/py_diago_cg.hpp @@ -1,22 +1,20 @@ #ifndef PYTHON_PYABACUS_SRC_PY_DIAGO_CG_HPP #define PYTHON_PYABACUS_SRC_PY_DIAGO_CG_HPP +#include "source_base/module_device/memory_op.h" +#include "source_hsolver/diago_cg.h" + +#include +#include +#include #include #include - -#include #include #include #include +#include #include -#include -#include -#include - -#include "source_hsolver/diago_cg.h" -#include "module_base/module_device/memory_op.h" - namespace py = pybind11; namespace py_hsolver @@ -24,8 +22,10 @@ namespace py_hsolver class PyDiagoCG { -public: - PyDiagoCG(int dim, int num_eigs) : dim{dim}, num_eigs{num_eigs} { } + public: + PyDiagoCG(int dim, int num_eigs) : dim{dim}, num_eigs{num_eigs} + { + } PyDiagoCG(const PyDiagoCG&) = delete; PyDiagoCG& operator=(const PyDiagoCG&) = delete; PyDiagoCG(PyDiagoCG&& other) @@ -37,9 +37,9 @@ class PyDiagoCG other.eig = nullptr; } - ~PyDiagoCG() + ~PyDiagoCG() { - if (psi != nullptr) + if (psi != nullptr) { delete psi; psi = nullptr; @@ -52,19 +52,20 @@ class PyDiagoCG } } - void init_eig() + void init_eig() { eig = new ct::Tensor(ct::DataType::DT_DOUBLE, {num_eigs}); eig->zero(); } - py::array_t get_eig() + py::array_t get_eig() { py::array_t eig_out(eig->NumElements()); py::buffer_info eig_buf = eig_out.request(); double* eig_out_ptr = static_cast(eig_buf.ptr); - if (eig == nullptr) { + if (eig == nullptr) + { throw std::runtime_error("eig is not initialized"); } double* eig_ptr = eig->data(); @@ -78,12 +79,10 @@ class PyDiagoCG py::buffer_info psi_buf = psi_in.request(); std::complex* psi_ptr = static_cast*>(psi_buf.ptr); - psi = new ct::TensorMap( - psi_ptr, - ct::DataType::DT_COMPLEX_DOUBLE, - ct::DeviceType::CpuDevice, - ct::TensorShape({num_eigs, dim}) - ); + psi = new ct::TensorMap(psi_ptr, + ct::DataType::DT_COMPLEX_DOUBLE, + ct::DeviceType::CpuDevice, + ct::TensorShape({num_eigs, dim})); } py::array_t> get_psi() @@ -92,7 +91,8 @@ class PyDiagoCG py::buffer_info psi_buf = psi_out.request(); std::complex* psi_out_ptr = static_cast*>(psi_buf.ptr); - if (psi == nullptr) { + if (psi == nullptr) + { throw std::runtime_error("psi is not initialized"); } std::complex* psi_ptr = psi->data>(); @@ -106,12 +106,7 @@ class PyDiagoCG py::buffer_info prec_buf = prec_in.request(); double* prec_ptr = static_cast(prec_buf.ptr); - prec = new ct::TensorMap( - prec_ptr, - ct::DataType::DT_DOUBLE, - ct::DeviceType::CpuDevice, - ct::TensorShape({dim}) - ); + prec = new ct::TensorMap(prec_ptr, ct::DataType::DT_DOUBLE, ct::DeviceType::CpuDevice, ct::TensorShape({dim})); } void diag(std::function>(py::array_t>)> mm_op, @@ -120,15 +115,15 @@ class PyDiagoCG const std::vector& diag_ethr, bool need_subspace, bool scf_type, - int nproc_in_pool = 1 - ) { + int nproc_in_pool = 1) + { const std::string basis_type = "pw"; const std::string calculation = scf_type ? "scf" : "nscf"; - auto hpsi_func = [mm_op] (const ct::Tensor& psi_in, ct::Tensor& hpsi_out) { + auto hpsi_func = [mm_op](const ct::Tensor& psi_in, ct::Tensor& hpsi_out) { const auto ndim = psi_in.shape().ndim(); REQUIRES_OK(ndim <= 2, "dims of psi_in should be less than or equal to 2"); - const int nvec = ndim == 1 ? 1 : psi_in.shape().dim_size(0); + const int nvec = ndim == 1 ? 1 : psi_in.shape().dim_size(0); const int ld_psi = ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1); // Note: numpy's py::array_t is row-major, and @@ -136,7 +131,9 @@ class PyDiagoCG py::array_t> psi({ld_psi, nvec}); py::buffer_info psi_buf = psi.request(); std::complex* psi_ptr = static_cast*>(psi_buf.ptr); - std::copy(psi_in.data>(), psi_in.data>() + nvec * ld_psi, psi_ptr); + std::copy(psi_in.data>(), + psi_in.data>() + nvec * ld_psi, + psi_ptr); py::array_t> hpsi = mm_op(psi); @@ -145,34 +142,30 @@ class PyDiagoCG std::copy(hpsi_ptr, hpsi_ptr + nvec * ld_psi, hpsi_out.data>()); }; - auto subspace_func = [] (const ct::Tensor& psi_in, ct::Tensor& psi_out) { /*do nothing*/ }; + auto subspace_func = [](const ct::Tensor& psi_in, ct::Tensor& psi_out) { /*do nothing*/ }; - auto spsi_func = [this] (const ct::Tensor& psi_in, ct::Tensor& spsi_out) { + auto spsi_func = [this](const ct::Tensor& psi_in, ct::Tensor& spsi_out) { const auto ndim = psi_in.shape().ndim(); REQUIRES_OK(ndim <= 2, "dims of psi_in should be less than or equal to 2"); - const int nrow = ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1); + const int nrow = ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1); const int nbands = ndim == 1 ? 1 : psi_in.shape().dim_size(0); - syncmem_z2z_h2h_op()( - spsi_out.data>(), - psi_in.data>(), - static_cast(nrow * nbands) - ); + syncmem_z2z_h2h_op()(spsi_out.data>(), + psi_in.data>(), + static_cast(nrow * nbands)); }; - cg = std::make_unique, base_device::DEVICE_CPU>>( - basis_type, - calculation, - need_subspace, - subspace_func, - tol, - diag_ndim, - nproc_in_pool - ); + cg = std::make_unique, base_device::DEVICE_CPU>>(basis_type, + calculation, + need_subspace, + subspace_func, + tol, + diag_ndim, + nproc_in_pool); cg->diag(hpsi_func, spsi_func, *psi, *eig, diag_ethr, *prec); } -private: + private: base_device::DEVICE_CPU* ctx = {}; int dim; diff --git a/python/pyabacus/src/hsolver/py_hsolver.cpp b/python/pyabacus/src/hsolver/py_hsolver.cpp index 0ff9527357..66230b747c 100644 --- a/python/pyabacus/src/hsolver/py_hsolver.cpp +++ b/python/pyabacus/src/hsolver/py_hsolver.cpp @@ -1,17 +1,16 @@ +#include "./py_diago_cg.hpp" +#include "./py_diago_dav_subspace.hpp" +#include "./py_diago_david.hpp" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/types.h" +#include "source_hsolver/diago_dav_subspace.h" + #include #include -#include -#include #include #include - -#include "source_hsolver/diago_dav_subspace.h" -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/module_device/types.h" - -#include "./py_diago_dav_subspace.hpp" -#include "./py_diago_david.hpp" -#include "./py_diago_cg.hpp" +#include +#include namespace py = pybind11; using namespace pybind11::literals; @@ -24,7 +23,8 @@ void bind_hsolver(py::module& m) .def_readonly("nproc", &hsolver::diag_comm_info::nproc); py::class_(m, "diago_dav_subspace") - .def(py::init(), R"pbdoc( + .def(py::init(), + R"pbdoc( Constructor of diago_dav_subspace, a class for diagonalizing a linear operator using the Davidson-Subspace Method. @@ -38,8 +38,12 @@ void bind_hsolver(py::module& m) The number of basis functions. nband : int The number of bands to be calculated. - )pbdoc", "nbasis"_a, "nband"_a) - .def("diag", &py_hsolver::PyDiagoDavSubspace::diag, R"pbdoc( + )pbdoc", + "nbasis"_a, + "nband"_a) + .def("diag", + &py_hsolver::PyDiagoDavSubspace::diag, + R"pbdoc( Diagonalize the linear operator using the Davidson-Subspace Method. Parameters @@ -74,21 +78,24 @@ void bind_hsolver(py::module& m) 0: LAPACK, 1: Gen-ELPA, 2: ScaLAPACK nb2d : int The block size in 2d block cyclic distribution if use elpa or scalapack. - )pbdoc", - "mm_op"_a, - "precond_vec"_a, - "dav_ndim"_a, - "tol"_a, - "max_iter"_a, - "need_subspace"_a, - "diag_ethr"_a, - "scf_type"_a, - "comm_info"_a, - "diago_subspace"_a, - "nb2d"_a) - .def("set_psi", &py_hsolver::PyDiagoDavSubspace::set_psi, R"pbdoc( + )pbdoc", + "mm_op"_a, + "precond_vec"_a, + "dav_ndim"_a, + "tol"_a, + "max_iter"_a, + "need_subspace"_a, + "diag_ethr"_a, + "scf_type"_a, + "comm_info"_a, + "diago_subspace"_a, + "nb2d"_a) + .def("set_psi", + &py_hsolver::PyDiagoDavSubspace::set_psi, + R"pbdoc( Set the initial guess of the eigenvectors, i.e. the wave functions. - )pbdoc", "psi_in"_a) + )pbdoc", + "psi_in"_a) .def("get_psi", &py_hsolver::PyDiagoDavSubspace::get_psi, R"pbdoc( Get the eigenvectors. )pbdoc") @@ -100,7 +107,8 @@ void bind_hsolver(py::module& m) )pbdoc"); py::class_(m, "diago_david") - .def(py::init(), R"pbdoc( + .def(py::init(), + R"pbdoc( Constructor of diago_david, a class for diagonalizing a linear operator using the Davidson Method. @@ -114,8 +122,12 @@ void bind_hsolver(py::module& m) The number of basis functions. nband : int The number of bands to be calculated. - )pbdoc", "nbasis"_a, "nband"_a) - .def("diag", &py_hsolver::PyDiagoDavid::diag, R"pbdoc( + )pbdoc", + "nbasis"_a, + "nband"_a) + .def("diag", + &py_hsolver::PyDiagoDavid::diag, + R"pbdoc( Diagonalize the linear operator using the Davidson Method. Parameters @@ -136,18 +148,21 @@ void bind_hsolver(py::module& m) The maximum number of iterations. use_paw : bool Whether to use the projector augmented wave method. - )pbdoc", - "mm_op"_a, - "precond_vec"_a, - "dav_ndim"_a, - "tol"_a, - "diag_ethr"_a, - "max_iter"_a, - "use_paw"_a, - "comm_info"_a) - .def("set_psi", &py_hsolver::PyDiagoDavid::set_psi, R"pbdoc( + )pbdoc", + "mm_op"_a, + "precond_vec"_a, + "dav_ndim"_a, + "tol"_a, + "diag_ethr"_a, + "max_iter"_a, + "use_paw"_a, + "comm_info"_a) + .def("set_psi", + &py_hsolver::PyDiagoDavid::set_psi, + R"pbdoc( Set the initial guess of the eigenvectors, i.e. the wave functions. - )pbdoc", "psi_in"_a) + )pbdoc", + "psi_in"_a) .def("get_psi", &py_hsolver::PyDiagoDavid::get_psi, R"pbdoc( Get the eigenvectors. )pbdoc") @@ -187,28 +202,34 @@ void bind_hsolver(py::module& m) Whether to use the SCF type, which is used to determine the convergence criterion. )pbdoc", - "mm_op"_a, - "max_iter"_a, - "tol"_a, - "diag_ethr"_a, - "need_subspace"_a, - "scf_type"_a, - "nproc_in_pool"_a) + "mm_op"_a, + "max_iter"_a, + "tol"_a, + "diag_ethr"_a, + "need_subspace"_a, + "scf_type"_a, + "nproc_in_pool"_a) .def("init_eig", &py_hsolver::PyDiagoCG::init_eig, R"pbdoc( Initialize the eigenvalues. )pbdoc") .def("get_eig", &py_hsolver::PyDiagoCG::get_eig, R"pbdoc( Get the eigenvalues. )pbdoc") - .def("set_psi", &py_hsolver::PyDiagoCG::set_psi, R"pbdoc( + .def("set_psi", + &py_hsolver::PyDiagoCG::set_psi, + R"pbdoc( Set the eigenvectors. - )pbdoc", "psi_in"_a) + )pbdoc", + "psi_in"_a) .def("get_psi", &py_hsolver::PyDiagoCG::get_psi, R"pbdoc( Get the eigenvectors. )pbdoc") - .def("set_prec", &py_hsolver::PyDiagoCG::set_prec, R"pbdoc( + .def("set_prec", + &py_hsolver::PyDiagoCG::set_prec, + R"pbdoc( Set the preconditioner. - )pbdoc", "prec_in"_a); + )pbdoc", + "prec_in"_a); } PYBIND11_MODULE(_hsolver_pack, m) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 062e93bbe9..57289f0b1e 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -1,4 +1,4 @@ -add_subdirectory(module_base) +add_subdirectory(source_base) add_subdirectory(module_cell) add_subdirectory(module_psi) add_subdirectory(module_elecstate) @@ -42,17 +42,17 @@ list(APPEND device_srcs # module_psi/kernels/psi_memory_op.cpp # module_psi/kernels/device.cpp - module_base/module_device/device.cpp - module_base/module_device/memory_op.cpp - module_base/kernels/math_kernel_op.cpp - module_base/kernels/math_kernel_op_vec.cpp + source_base/module_device/device.cpp + source_base/module_device/memory_op.cpp + source_base/kernels/math_kernel_op.cpp + source_base/kernels/math_kernel_op_vec.cpp module_hamilt_pw/hamilt_pwdft/kernels/force_op.cpp module_hamilt_pw/hamilt_pwdft/kernels/stress_op.cpp module_hamilt_pw/hamilt_pwdft/kernels/onsite_op.cpp module_hamilt_pw/hamilt_pwdft/kernels/wf_op.cpp module_hamilt_pw/hamilt_pwdft/kernels/vnl_op.cpp - module_base/kernels/math_ylm_op.cpp + source_base/kernels/math_ylm_op.cpp module_hamilt_general/module_xc/kernels/xc_functional_op.cpp ) @@ -70,15 +70,15 @@ if(USE_CUDA) module_elecstate/kernels/cuda/elecstate_op.cu # module_psi/kernels/cuda/memory_op.cu - module_base/module_device/cuda/memory_op.cu + source_base/module_device/cuda/memory_op.cu module_hamilt_pw/hamilt_pwdft/kernels/cuda/force_op.cu module_hamilt_pw/hamilt_pwdft/kernels/cuda/stress_op.cu module_hamilt_pw/hamilt_pwdft/kernels/cuda/wf_op.cu module_hamilt_pw/hamilt_pwdft/kernels/cuda/vnl_op.cu - module_base/kernels/cuda/math_ylm_op.cu - module_base/kernels/cuda/math_kernel_op.cu - module_base/kernels/cuda/math_kernel_op_vec.cu + source_base/kernels/cuda/math_ylm_op.cu + source_base/kernels/cuda/math_kernel_op.cu + source_base/kernels/cuda/math_kernel_op_vec.cu module_hamilt_general/module_xc/kernels/cuda/xc_functional_op.cu ) endif() @@ -97,22 +97,22 @@ if(USE_ROCM) module_elecstate/kernels/rocm/elecstate_op.hip.cu # module_psi/kernels/rocm/memory_op.hip.cu - module_base/module_device/rocm/memory_op.hip.cu + source_base/module_device/rocm/memory_op.hip.cu module_hamilt_pw/hamilt_pwdft/kernels/rocm/force_op.hip.cu module_hamilt_pw/hamilt_pwdft/kernels/rocm/stress_op.hip.cu module_hamilt_pw/hamilt_pwdft/kernels/rocm/wf_op.hip.cu module_hamilt_pw/hamilt_pwdft/kernels/rocm/vnl_op.hip.cu - module_base/kernels/rocm/math_kernel_op.hip.cu - module_base/kernels/rocm/math_kernel_op_vec.hip.cu - module_base/kernels/rocm/math_ylm_op.hip.cu + source_base/kernels/rocm/math_kernel_op.hip.cu + source_base/kernels/rocm/math_kernel_op_vec.hip.cu + source_base/kernels/rocm/math_ylm_op.hip.cu module_hamilt_general/module_xc/kernels/rocm/xc_functional_op.hip.cu ) endif() if(USE_DSP) list(APPEND device_srcs - module_base/kernels/dsp/dsp_connector.cpp + source_base/kernels/dsp/dsp_connector.cpp ) endif() diff --git a/source/Makefile.Objects b/source/Makefile.Objects index d58f43f895..53d6bf018a 100644 --- a/source/Makefile.Objects +++ b/source/Makefile.Objects @@ -18,14 +18,14 @@ VPATH=./src_global:\ ./module_cell/module_neighbor:\ ./module_cell/module_symmetry:\ ./module_cell:\ -./module_base:\ -./module_base/kernels:\ -./module_base/module_container/base/core:\ -./module_base/module_container/ATen/core:\ -./module_base/module_container/ATen/kernels:\ -./module_base/module_container/ATen/ops:\ -./module_base/module_device:\ -./module_base/module_mixing:\ +./source_base:\ +./source_base/kernels:\ +./source_base/module_container/base/core:\ +./source_base/module_container/ATen/core:\ +./source_base/module_container/ATen/kernels:\ +./source_base/module_container/ATen/ops:\ +./source_base/module_device:\ +./source_base/module_mixing:\ ./module_md:\ ./module_basis/module_pw:\ ./module_basis/module_pw/module_fft:\ diff --git a/source/module_base/assoc_laguerre.cpp b/source/module_base/assoc_laguerre.cpp deleted file mode 100644 index cdc3ef94d9..0000000000 --- a/source/module_base/assoc_laguerre.cpp +++ /dev/null @@ -1,137 +0,0 @@ -#include "module_base/assoc_laguerre.h" -#include "module_base/global_function.h" -//#include // use cmath the factorial function -#include -Assoc_Laguerre::Assoc_Laguerre() -{ -} - -Assoc_Laguerre::~Assoc_Laguerre() -{ -} - -void Assoc_Laguerre::generate(const int &n, const int &l, const double ns, double* const &s, double* L) -{ - for(int i = 0; i < ns; i++) - { - L[i] = this->value(n, l, s[i]); - } -} - -void Assoc_Laguerre::generate(const int &n, const int &l, std::vector &x, std::vector &y) -{ - for(int i = 0; i < x.size(); i++) - { - y[i] = this->value(n, l, x[i]); - } -} - -double Assoc_Laguerre::laguerre(const int &n, const double x) -{ - if(n == 0) - { - return 1; - } - else if(n == 1) - { - return -x + 1; - } - else if(n == 2) - { - return 0.5 * x * x - 2 * x + 1; - } - else if(n == 3) - { - return -x * x * x / 6.0 + 3.0 * x * x / 2.0 - 3.0 * x + 1; - } - else if(n >= 4) - { - double n_ = static_cast(n); - double first = (2*n_ - 1 - x)/n_ * Assoc_Laguerre::laguerre(n-1, x); - double second = (n_ - 1)/n_ * Assoc_Laguerre::laguerre(n-2, x); - return first - second; - } - else - { - ModuleBase::WARNING_QUIT("Assoc_Laguerre::laguerre", "n is out of range"); - return 0; - } -} - -double Assoc_Laguerre::associate_laguerre(const int &n, const double x, const int &a) -{ - // formula from https://en.wikipedia.org/wiki/Laguerre_polynomials - double n_ = static_cast(n); - double a_ = static_cast(a); - if(n == 0) - { - return 1; - } - else if(n == 1) - { - return -x + 1 + a_; - } - else if(n == 2) - { - return 0.5 * (x*x - 2*(a_+2)*x + (a_+1)*(a_+2)); - } - else if(n == 3) - { - return -x*x*x/6.0 + (a_+3)*x*x/2.0 - (a_+2)*(a_+3)*x/2.0 + (a_+1)*(a_+2)*(a_+3)/6.0; - } - else if(n >= 4) - { - double first = (2*n_ - 1 + a_ - x)/n_ * this->associate_laguerre(n-1, x, a); - double second = (n_ + a_ - 1)/n_ * this->associate_laguerre(n-2, x, a); - return first - second; - } - else - { - ModuleBase::WARNING_QUIT("Assoc_Laguerre::associate_laguerre", "n is out of range"); - return 0; - } -} - -int Assoc_Laguerre::factorial(const int &n) -{ - if(n == 0) - { - return 1; - } - else if(n > 0) - { - return n * this->factorial(n-1); - } - else - { - ModuleBase::WARNING_QUIT("Assoc_Laguerre::factorial", "n is out of range"); - return 0; - } -} - -double Assoc_Laguerre::value(const int &n, const int &l, const double &s) -{ - int k_ = 2*l + 1; - int n_ = n - l - 1; - if(k_ < 0) - { - ModuleBase::WARNING_QUIT("Assoc_Laguerre::value", "k is out of range"); - return 0; - } - if(n_ < 0) - { - ModuleBase::WARNING_QUIT("Assoc_Laguerre::value", "n is out of range"); - return 0; - } - double L = 0; - for(int iq = 0; iq <= n_; iq++) - { - L += std::pow(-s, iq) * - static_cast(this->factorial(n_ + k_)) / - static_cast(this->factorial(n_ - iq)) / - static_cast(this->factorial(k_ + iq)) / - static_cast(this->factorial(iq)); - } - //L = std::tr1::assoc_laguerre(n_, k_, s); // use standard library - return L; -} \ No newline at end of file diff --git a/source/module_base/blas_connector.h b/source/module_base/blas_connector.h deleted file mode 100644 index 7e988fd1bb..0000000000 --- a/source/module_base/blas_connector.h +++ /dev/null @@ -1,440 +0,0 @@ -#ifndef BLAS_CONNECTOR_H -#define BLAS_CONNECTOR_H - -#include -#include "module_base/module_device/types.h" -#include "macros.h" - -// These still need to be linked in the header file -// Because quite a lot of code will directly use the original cblas kernels. - -extern "C" -{ - // level 1: std::vector-std::vector operations, O(n) data and O(n) work. - - // Peize Lin add ?scal 2016-08-04, to compute x=a*x - void sscal_(const int *N, const float *alpha, float *X, const int *incX); - void dscal_(const int *N, const double *alpha, double *X, const int *incX); - void cscal_(const int *N, const std::complex *alpha, std::complex *X, const int *incX); - void zscal_(const int *N, const std::complex *alpha, std::complex *X, const int *incX); - - // Peize Lin add ?axpy 2016-08-04, to compute y=a*x+y - void saxpy_(const int *N, const float *alpha, const float *X, const int *incX, float *Y, const int *incY); - void daxpy_(const int *N, const double *alpha, const double *X, const int *incX, double *Y, const int *incY); - void caxpy_(const int *N, const std::complex *alpha, const std::complex *X, const int *incX, std::complex *Y, const int *incY); - void zaxpy_(const int *N, const std::complex *alpha, const std::complex *X, const int *incX, std::complex *Y, const int *incY); - - void dcopy_(long const *n, const double *a, int const *incx, double *b, int const *incy); - void zcopy_(long const *n, const std::complex *a, int const *incx, std::complex *b, int const *incy); - - //reason for passing results as argument instead of returning it: - //see https://www.numbercrunch.de/blog/2014/07/lost-in-translation/ - // void zdotc_(std::complex *result, const int *n, const std::complex *zx, - // const int *incx, const std::complex *zy, const int *incy); - // Peize Lin add ?dot 2017-10-27, to compute d=x*y - float sdot_(const int *N, const float *X, const int *incX, const float *Y, const int *incY); - double ddot_(const int *N, const double *X, const int *incX, const double *Y, const int *incY); - - // Peize Lin add ?nrm2 2018-06-12, to compute out = ||x||_2 = \sqrt{ \sum_i x_i**2 } - float snrm2_( const int *n, const float *X, const int *incX ); - double dnrm2_( const int *n, const double *X, const int *incX ); - double dznrm2_( const int *n, const std::complex *X, const int *incX ); - - // symmetric rank-k update - void dsyrk_( - const char* uplo, - const char* trans, - const int* n, - const int* k, - const double* alpha, - const double* a, - const int* lda, - const double* beta, - double* c, - const int* ldc - ); - - // level 2: matrix-std::vector operations, O(n^2) data and O(n^2) work. - void sgemv_(const char*const transa, const int*const m, const int*const n, - const float*const alpha, const float*const a, const int*const lda, const float*const x, const int*const incx, - const float*const beta, float*const y, const int*const incy); - void dgemv_(const char*const transa, const int*const m, const int*const n, - const double*const alpha, const double*const a, const int*const lda, const double*const x, const int*const incx, - const double*const beta, double*const y, const int*const incy); - - void cgemv_(const char *trans, const int *m, const int *n, const std::complex *alpha, - const std::complex *a, const int *lda, const std::complex *x, const int *incx, - const std::complex *beta, std::complex *y, const int *incy); - - void zgemv_(const char *trans, const int *m, const int *n, const std::complex *alpha, - const std::complex *a, const int *lda, const std::complex *x, const int *incx, - const std::complex *beta, std::complex *y, const int *incy); - - void dsymv_(const char *uplo, const int *n, - const double *alpha, const double *a, const int *lda, - const double *x, const int *incx, - const double *beta, double *y, const int *incy); - - // A := alpha x * y.T + A - void dger_(const int* m, - const int* n, - const double* alpha, - const double* x, - const int* incx, - const double* y, - const int* incy, - double* a, - const int* lda); - void zgerc_(const int* m, - const int* n, - const std::complex* alpha, - const std::complex* x, - const int* incx, - const std::complex* y, - const int* incy, - std::complex* a, - const int* lda); - - // level 3: matrix-matrix operations, O(n^2) data and O(n^3) work. - - // Peize Lin add ?gemm 2017-10-27, to compute C = a * A.? * B.? + b * C - // A is general - void sgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, - const float *alpha, const float *a, const int *lda, const float *b, const int *ldb, - const float *beta, float *c, const int *ldc); - void dgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, - const double *alpha, const double *a, const int *lda, const double *b, const int *ldb, - const double *beta, double *c, const int *ldc); - void cgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, - const std::complex *alpha, const std::complex *a, const int *lda, const std::complex *b, const int *ldb, - const std::complex *beta, std::complex *c, const int *ldc); - void zgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, - const std::complex *alpha, const std::complex *a, const int *lda, const std::complex *b, const int *ldb, - const std::complex *beta, std::complex *c, const int *ldc); - - // A is symmetric. C = a * A.? * B.? + b * C - void ssymm_(const char *side, const char *uplo, const int *m, const int *n, - const float *alpha, const float *a, const int *lda, const float *b, const int *ldb, - const float *beta, float *c, const int *ldc); - void dsymm_(const char *side, const char *uplo, const int *m, const int *n, - const double *alpha, const double *a, const int *lda, const double *b, const int *ldb, - const double *beta, double *c, const int *ldc); - void csymm_(const char *side, const char *uplo, const int *m, const int *n, - const std::complex *alpha, const std::complex *a, const int *lda, const std::complex *b, const int *ldb, - const std::complex *beta, std::complex *c, const int *ldc); - void zsymm_(const char *side, const char *uplo, const int *m, const int *n, - const std::complex *alpha, const std::complex *a, const int *lda, const std::complex *b, const int *ldb, - const std::complex *beta, std::complex *c, const int *ldc); - - // A is hermitian. C = a * A.? * B.? + b * C - void chemm_(char *side, char *uplo, int *m, int *n,std::complex *alpha, - std::complex *a, int *lda, std::complex *b, int *ldb, std::complex *beta, std::complex *c, int *ldc); - void zhemm_(char *side, char *uplo, int *m, int *n,std::complex *alpha, - std::complex *a, int *lda, std::complex *b, int *ldb, std::complex *beta, std::complex *c, int *ldc); - - //solving triangular matrix with multiple right hand sides - void dtrsm_(char *side, char* uplo, char *transa, char *diag, int *m, int *n, - double* alpha, double* a, int *lda, double*b, int *ldb); - void ztrsm_(char *side, char* uplo, char *transa, char *diag, int *m, int *n, - std::complex* alpha, std::complex* a, int *lda, std::complex*b, int *ldb); - -} - -// Class BlasConnector provide the connector to fortran lapack routine. -// The entire function in this class are static and inline function. -// Usage example: BlasConnector::functionname(parameter list). -class BlasConnector -{ -public: - - // Peize Lin add 2016-08-04 - // y=a*x+y - static - void axpy( const int n, const float alpha, const float *X, const int incX, float *Y, const int incY, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void axpy( const int n, const double alpha, const double *X, const int incX, double *Y, const int incY, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void axpy( const int n, const std::complex alpha, const std::complex *X, const int incX, std::complex *Y, const int incY, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void axpy( const int n, const std::complex alpha, const std::complex *X, const int incX, std::complex *Y, const int incY, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - - // Peize Lin add 2016-08-04 - // x=a*x - static - void scal( const int n, const float alpha, float *X, const int incX, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void scal( const int n, const double alpha, double *X, const int incX, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void scal( const int n, const std::complex alpha, std::complex *X, const int incX, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void scal( const int n, const std::complex alpha, std::complex *X, const int incX, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - - // Peize Lin add 2017-10-27 - // d=x*y - static - float dot( const int n, const float*const X, const int incX, const float*const Y, const int incY, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - double dot( const int n, const double*const X, const int incX, const double*const Y, const int incY, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - // d=x*y - static - float dotu( const int n, const float*const X, const int incX, const float*const Y, const int incY, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - double dotu( const int n, const double*const X, const int incX, const double*const Y, const int incY, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - std::complex dotu( const int n, const std::complex*const X, const int incX, const std::complex*const Y, const int incY, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - std::complex dotu( const int n, const std::complex*const X, const int incX, const std::complex*const Y, const int incY, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - // d=x.conj()*y - static - float dotc( const int n, const float*const X, const int incX, const float*const Y, const int incY, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - double dotc( const int n, const double*const X, const int incX, const double*const Y, const int incY, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - std::complex dotc( const int n, const std::complex*const X, const int incX, const std::complex*const Y, const int incY, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - std::complex dotc( const int n, const std::complex*const X, const int incX, const std::complex*const Y, const int incY, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - // Peize Lin add 2017-10-27, fix bug trans 2019-01-17 - // C = a * A.? * B.? + b * C - // Row Major by default - static - void gemm(const char transa, const char transb, const int m, const int n, const int k, - const float alpha, const float *a, const int lda, const float *b, const int ldb, - const float beta, float *c, const int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void gemm(const char transa, const char transb, const int m, const int n, const int k, - const double alpha, const double *a, const int lda, const double *b, const int ldb, - const double beta, double *c, const int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void gemm(const char transa, const char transb, const int m, const int n, const int k, - const std::complex alpha, const std::complex *a, const int lda, const std::complex *b, const int ldb, - const std::complex beta, std::complex *c, const int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void gemm(const char transa, const char transb, const int m, const int n, const int k, - const std::complex alpha, const std::complex *a, const int lda, const std::complex *b, const int ldb, - const std::complex beta, std::complex *c, const int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - // Col-Major if you need to use it - - static - void gemm_cm(const char transa, const char transb, const int m, const int n, const int k, - const float alpha, const float *a, const int lda, const float *b, const int ldb, - const float beta, float *c, const int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void gemm_cm(const char transa, const char transb, const int m, const int n, const int k, - const double alpha, const double *a, const int lda, const double *b, const int ldb, - const double beta, double *c, const int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void gemm_cm(const char transa, const char transb, const int m, const int n, const int k, - const std::complex alpha, const std::complex *a, const int lda, const std::complex *b, const int ldb, - const std::complex beta, std::complex *c, const int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void gemm_cm(const char transa, const char transb, const int m, const int n, const int k, - const std::complex alpha, const std::complex *a, const int lda, const std::complex *b, const int ldb, - const std::complex beta, std::complex *c, const int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - // side=='L': C = a * A * B + b * C. - // side=='R': C = a * B * A + b * C. - // A == A^T - // Because you cannot pack symm or hemm into a row-major kernel by exchanging parameters, so only col-major functions are provided. - static - void symm_cm(const char side, const char uplo, const int m, const int n, - const float alpha, const float *a, const int lda, const float *b, const int ldb, - const float beta, float *c, const int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void symm_cm(const char side, const char uplo, const int m, const int n, - const double alpha, const double *a, const int lda, const double *b, const int ldb, - const double beta, double *c, const int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void symm_cm(const char side, const char uplo, const int m, const int n, - const std::complex alpha, const std::complex *a, const int lda, const std::complex *b, const int ldb, - const std::complex beta, std::complex *c, const int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void symm_cm(const char side, const char uplo, const int m, const int n, - const std::complex alpha, const std::complex *a, const int lda, const std::complex *b, const int ldb, - const std::complex beta, std::complex *c, const int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - // side=='L': C = a * A * B + b * C. - // side=='R': C = a * B * A + b * C. - // A == A^H - static - void hemm_cm(const char side, const char uplo, const int m, const int n, - const float alpha, const float *a, const int lda, const float *b, const int ldb, - const float beta, float *c, const int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void hemm_cm(const char side, const char uplo, const int m, const int n, - const double alpha, const double *a, const int lda, const double *b, const int ldb, - const double beta, double *c, const int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void hemm_cm(char side, char uplo, int m, int n, - std::complex alpha, std::complex *a, int lda, std::complex *b, int ldb, - std::complex beta, std::complex *c, int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void hemm_cm(char side, char uplo, int m, int n, - std::complex alpha, std::complex *a, int lda, std::complex *b, int ldb, - std::complex beta, std::complex *c, int ldc, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - // y = A*x + beta*y - static - void gemv(const char trans, const int m, const int n, - const float alpha, const float* A, const int lda, const float* X, const int incx, - const float beta, float* Y, const int incy, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void gemv(const char trans, const int m, const int n, - const double alpha, const double* A, const int lda, const double* X, const int incx, - const double beta, double* Y, const int incy, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void gemv(const char trans, const int m, const int n, - const std::complex alpha, const std::complex *A, const int lda, const std::complex *X, const int incx, - const std::complex beta, std::complex *Y, const int incy, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void gemv(const char trans, const int m, const int n, - const std::complex alpha, const std::complex *A, const int lda, const std::complex *X, const int incx, - const std::complex beta, std::complex *Y, const int incy, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - // Peize Lin add 2018-06-12 - // out = ||x||_2 - static - float nrm2( const int n, const float *X, const int, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice ); - - static - double nrm2( const int n, const double *X, const int incX, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice ); - - static - double nrm2( const int n, const std::complex *X, const int incX, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice ); - - - // copies a into b - static - void copy(const long n, const double *a, const int incx, double *b, const int incy, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void copy(const long n, const std::complex *a, const int incx, std::complex *b, const int incy, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - // There is some other operators needed, so implemented manually here - template - static - void vector_mul_vector(const int& dim, T* result, const T* vector1, const T* vector2, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - template - static - void vector_div_vector(const int& dim, T* result, const T* vector1, const T* vector2, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - // y = alpha * x + beta * y - static - void vector_add_vector(const int& dim, float *result, const float *vector1, const float constant1, const float *vector2, const float constant2, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void vector_add_vector(const int& dim, double *result, const double *vector1, const double constant1, const double *vector2, const double constant2, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void vector_add_vector(const int& dim, std::complex *result, const std::complex *vector1, const float constant1, const std::complex *vector2, const float constant2, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); - - static - void vector_add_vector(const int& dim, std::complex *result, const std::complex *vector1, const double constant1, const std::complex *vector2, const double constant2, base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); -}; - -#ifdef __CUDA - -#include -#include "cublas_v2.h" - -// If you want to use cublas, you need these functions to create and destroy the cublas/hipblas handle. -// You also need to use these functions to translate the transpose parameter into cublas/hipblas datatype. - -namespace BlasUtils{ - - static cublasHandle_t cublas_handle = nullptr; - - void createGpuBlasHandle(); // Create a cublas/hipblas handle. - - void destoryBLAShandle(); // Destroy the cublas/hipblas handle. Do this when the software is about to end. - - cublasOperation_t judge_trans(bool is_complex, const char& trans, const char* name); // Translate a normal transpose parameter to a cublas/hipblas type. - - cublasSideMode_t judge_side(const char& trans); // Translate a normal side parameter to a cublas/hipblas type. - - cublasFillMode_t judge_fill(const char& trans); // Translate a normal fill parameter to a cublas/hipblas type. - -} - -#endif - -// If GATHER_INFO is defined, the original function is replaced with a "i" suffix, -// preventing changes on the original code. -// The real function call is at gather_math_lib_info.cpp -#ifdef GATHER_INFO - -#define zgemm_ zgemm_i -void zgemm_i(const char *transa, - const char *transb, - const int *m, - const int *n, - const int *k, - const std::complex *alpha, - const std::complex *a, - const int *lda, - const std::complex *b, - const int *ldb, - const std::complex *beta, - std::complex *c, - const int *ldc); - -#define zaxpy_ zaxpy_i -void zaxpy_i(const int *N, - const std::complex *alpha, - const std::complex *X, - const int *incX, - std::complex *Y, - const int *incY); - -/* -#define zgemv_ zgemv_i - -void zgemv_i(const char *trans, - const int *m, - const int *n, - const std::complex *alpha, - const std::complex *a, - const int *lda, - const std::complex *x, - const int *incx, - const std::complex *beta, - std::complex *y, - const int *incy); -*/ - -#endif // GATHER_INFO -#endif // BLAS_CONNECTOR_H diff --git a/source/module_base/blas_connector_base.cpp b/source/module_base/blas_connector_base.cpp deleted file mode 100644 index 1d1a81db94..0000000000 --- a/source/module_base/blas_connector_base.cpp +++ /dev/null @@ -1,77 +0,0 @@ -#include "blas_connector.h" -#include "macros.h" - -#ifdef __CUDA -#include -#include -#include "cublas_v2.h" -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/module_device/memory_op.h" - - -namespace BlasUtils{ - - void createGpuBlasHandle(){ - if (cublas_handle == nullptr) { - cublasErrcheck(cublasCreate(&cublas_handle)); - } - } - - void destoryBLAShandle(){ - if (cublas_handle != nullptr) { - cublasErrcheck(cublasDestroy(cublas_handle)); - cublas_handle = nullptr; - } - } - - - cublasOperation_t judge_trans(bool is_complex, const char& trans, const char* name) - { - if (trans == 'N') - { - return CUBLAS_OP_N; - } - else if(trans == 'T') - { - return CUBLAS_OP_T; - } - else if(is_complex && trans == 'C') - { - return CUBLAS_OP_C; - } - return CUBLAS_OP_N; - } - - cublasSideMode_t judge_side(const char& trans) - { - if (trans == 'L') - { - return CUBLAS_SIDE_LEFT; - } - else if (trans == 'R') - { - return CUBLAS_SIDE_RIGHT; - } - return CUBLAS_SIDE_LEFT; - } - - cublasFillMode_t judge_fill(const char& trans) - { - if (trans == 'F') - { - return CUBLAS_FILL_MODE_FULL; - } - else if (trans == 'U') - { - return CUBLAS_FILL_MODE_UPPER; - } - else if (trans == 'D') - { - return CUBLAS_FILL_MODE_LOWER; - } - return CUBLAS_FILL_MODE_FULL; - } - -} // namespace BlasUtils - -#endif \ No newline at end of file diff --git a/source/module_base/blas_connector_matrix.cpp b/source/module_base/blas_connector_matrix.cpp deleted file mode 100644 index 9beb7a7d59..0000000000 --- a/source/module_base/blas_connector_matrix.cpp +++ /dev/null @@ -1,575 +0,0 @@ -#include "blas_connector.h" -#include "macros.h" - -#ifdef __DSP -#include "module_base/kernels/dsp/dsp_connector.h" -#include "module_base/global_variable.h" -#endif - -#ifdef __CUDA -#include -#include -#include "cublas_v2.h" -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/module_device/memory_op.h" -#endif - - -// C = a * A.? * B.? + b * C -// Row-Major part -void BlasConnector::gemm(const char transa, const char transb, const int m, const int n, const int k, - const float alpha, const float *a, const int lda, const float *b, const int ldb, - const float beta, float *c, const int ldc, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - sgemm_(&transb, &transa, &n, &m, &k, - &alpha, b, &ldb, a, &lda, - &beta, c, &ldc); - } -#ifdef __DSP - else if (device_type == base_device::AbacusDevice_t::DspDevice){ - mtfunc::sgemm_mth_(&transb, &transa, &n, &m, &k, - &alpha, b, &ldb, a, &lda, - &beta, c, &ldc, GlobalV::MY_RANK); - } -#endif -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); - cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); - cublasErrcheck(cublasSgemm(BlasUtils::cublas_handle, cutransA, cutransB, n, m, k, &alpha, b, ldb, a, lda, &beta, c, ldc)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::gemm(const char transa, - const char transb, - const int m, - const int n, - const int k, - const double alpha, - const double* a, - const int lda, - const double* b, - const int ldb, - const double beta, - double* c, - const int ldc, - base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) - { - dgemm_(&transb, &transa, &n, &m, &k, &alpha, b, &ldb, a, &lda, &beta, c, &ldc); - } -#ifdef __DSP - else if (device_type == base_device::AbacusDevice_t::DspDevice) - { - mtfunc::dgemm_mth_(&transb, &transa, &n, &m, &k, &alpha, b, &ldb, a, &lda, &beta, c, &ldc, GlobalV::MY_RANK); - } -#endif - else if (device_type == base_device::AbacusDevice_t::GpuDevice) - { -#ifdef __CUDA - cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); - cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); - cublasErrcheck( - cublasDgemm(BlasUtils::cublas_handle, cutransA, cutransB, n, m, k, &alpha, b, ldb, a, lda, &beta, c, ldc)); -#endif - } - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::gemm(const char transa, - const char transb, - const int m, - const int n, - const int k, - const std::complex alpha, - const std::complex* a, - const int lda, - const std::complex* b, - const int ldb, - const std::complex beta, - std::complex* c, - const int ldc, - base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) - { - cgemm_(&transb, &transa, &n, &m, &k, &alpha, b, &ldb, a, &lda, &beta, c, &ldc); - } -#ifdef __DSP - else if (device_type == base_device::AbacusDevice_t::DspDevice) - { - mtfunc::cgemm_mth_(&transb, &transa, &n, &m, &k, &alpha, b, &ldb, a, &lda, &beta, c, &ldc, GlobalV::MY_RANK); - } -#endif - else if (device_type == base_device::AbacusDevice_t::GpuDevice) - { -#ifdef __CUDA - cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); - cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); - cublasErrcheck(cublasCgemm(BlasUtils::cublas_handle, - cutransA, - cutransB, - n, - m, - k, - (float2*)&alpha, - (float2*)b, - ldb, - (float2*)a, - lda, - (float2*)&beta, - (float2*)c, - ldc)); -#endif - } - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::gemm(const char transa, - const char transb, - const int m, - const int n, - const int k, - const std::complex alpha, - const std::complex* a, - const int lda, - const std::complex* b, - const int ldb, - const std::complex beta, - std::complex* c, - const int ldc, - base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) - { - zgemm_(&transb, &transa, &n, &m, &k, &alpha, b, &ldb, a, &lda, &beta, c, &ldc); - } -#ifdef __DSP - else if (device_type == base_device::AbacusDevice_t::DspDevice) - { - mtfunc::zgemm_mth_(&transb, &transa, &n, &m, &k, &alpha, b, &ldb, a, &lda, &beta, c, &ldc, GlobalV::MY_RANK); - } -#endif - else if (device_type == base_device::AbacusDevice_t::GpuDevice) - { -#ifdef __CUDA - cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); - cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); - cublasErrcheck(cublasZgemm(BlasUtils::cublas_handle, - cutransA, - cutransB, - n, - m, - k, - (double2*)&alpha, - (double2*)b, - ldb, - (double2*)a, - lda, - (double2*)&beta, - (double2*)c, - ldc)); -#endif - } - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -// Col-Major part -void BlasConnector::gemm_cm(const char transa, const char transb, const int m, const int n, const int k, - const float alpha, const float *a, const int lda, const float *b, const int ldb, - const float beta, float *c, const int ldc, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - sgemm_(&transa, &transb, &m, &n, &k, - &alpha, a, &lda, b, &ldb, - &beta, c, &ldc); - } -#ifdef __DSP - else if (device_type == base_device::AbacusDevice_t::DspDevice){ - mtfunc::sgemm_mth_(&transb, &transa, &m, &n, &k, - &alpha, a, &lda, b, &ldb, - &beta, c, &ldc, GlobalV::MY_RANK); - } -#endif -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); - cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); - cublasErrcheck(cublasSgemm(BlasUtils::cublas_handle, cutransA, cutransB, m, n, k, &alpha, a, lda, b, ldb, &beta, c, ldc)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::gemm_cm(const char transa, - const char transb, - const int m, - const int n, - const int k, - const double alpha, - const double* a, - const int lda, - const double* b, - const int ldb, - const double beta, - double* c, - const int ldc, - base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) - { - dgemm_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); - } -#ifdef __DSP - else if (device_type == base_device::AbacusDevice_t::DspDevice) - { - mtfunc::dgemm_mth_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc, GlobalV::MY_RANK); - } -#endif -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) - { - cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); - cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); - cublasErrcheck( - cublasDgemm(BlasUtils::cublas_handle, cutransA, cutransB, m, n, k, &alpha, a, lda, b, ldb, &beta, c, ldc)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::gemm_cm(const char transa, - const char transb, - const int m, - const int n, - const int k, - const std::complex alpha, - const std::complex* a, - const int lda, - const std::complex* b, - const int ldb, - const std::complex beta, - std::complex* c, - const int ldc, - base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) - { - cgemm_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); - } -#ifdef __DSP - else if (device_type == base_device::AbacusDevice_t::DspDevice) - { - mtfunc::cgemm_mth_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc, GlobalV::MY_RANK); - } -#endif -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) - { - cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); - cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); - cublasErrcheck(cublasCgemm(BlasUtils::cublas_handle, - cutransA, - cutransB, - m, - n, - k, - (float2*)&alpha, - (float2*)a, - lda, - (float2*)b, - ldb, - (float2*)&beta, - (float2*)c, - ldc)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::gemm_cm(const char transa, - const char transb, - const int m, - const int n, - const int k, - const std::complex alpha, - const std::complex* a, - const int lda, - const std::complex* b, - const int ldb, - const std::complex beta, - std::complex* c, - const int ldc, - base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) - { - zgemm_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); - } -#ifdef __DSP - else if (device_type == base_device::AbacusDevice_t::DspDevice) - { - mtfunc::zgemm_mth_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc, GlobalV::MY_RANK); - } -#endif -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) - { - cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); - cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); - cublasErrcheck(cublasZgemm(BlasUtils::cublas_handle, - cutransA, - cutransB, - m, - n, - k, - (double2*)&alpha, - (double2*)a, - lda, - (double2*)b, - ldb, - (double2*)&beta, - (double2*)c, - ldc)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -// Symm and Hemm part. Only col-major is supported. - -void BlasConnector::symm_cm(const char side, const char uplo, const int m, const int n, - const float alpha, const float *a, const int lda, const float *b, const int ldb, - const float beta, float *c, const int ldc, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - ssymm_(&side, &uplo, &m, &n, - &alpha, a, &lda, b, &ldb, - &beta, c, &ldc); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasSideMode_t sideMode = BlasUtils::judge_side(side); - cublasFillMode_t fillMode = BlasUtils::judge_fill(uplo); - cublasErrcheck(cublasSsymm(BlasUtils::cublas_handle, sideMode, fillMode, m, n, &alpha, a, lda, b, ldb, &beta, c, ldc)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::symm_cm(const char side, const char uplo, const int m, const int n, - const double alpha, const double *a, const int lda, const double *b, const int ldb, - const double beta, double *c, const int ldc, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - dsymm_(&side, &uplo, &m, &n, - &alpha, a, &lda, b, &ldb, - &beta, c, &ldc); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasSideMode_t sideMode = BlasUtils::judge_side(side); - cublasFillMode_t fillMode = BlasUtils::judge_fill(uplo); - cublasErrcheck(cublasDsymm(BlasUtils::cublas_handle, sideMode, fillMode, m, n, &alpha, a, lda, b, ldb, &beta, c, ldc)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::symm_cm(const char side, const char uplo, const int m, const int n, - const std::complex alpha, const std::complex *a, const int lda, const std::complex *b, const int ldb, - const std::complex beta, std::complex *c, const int ldc, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - csymm_(&side, &uplo, &m, &n, - &alpha, a, &lda, b, &ldb, - &beta, c, &ldc); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasSideMode_t sideMode = BlasUtils::judge_side(side); - cublasFillMode_t fillMode = BlasUtils::judge_fill(uplo); - cublasErrcheck(cublasCsymm(BlasUtils::cublas_handle, sideMode, fillMode, m, n, (float2*)&alpha, (float2*)a, lda, (float2*)b, ldb, (float2*)&beta, (float2*)c, ldc)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::symm_cm(const char side, const char uplo, const int m, const int n, - const std::complex alpha, const std::complex *a, const int lda, const std::complex *b, const int ldb, - const std::complex beta, std::complex *c, const int ldc, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - zsymm_(&side, &uplo, &m, &n, - &alpha, a, &lda, b, &ldb, - &beta, c, &ldc); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasSideMode_t sideMode = BlasUtils::judge_side(side); - cublasFillMode_t fillMode = BlasUtils::judge_fill(uplo); - cublasErrcheck(cublasZsymm(BlasUtils::cublas_handle, sideMode, fillMode, m, n, (double2*)&alpha, (double2*)a, lda, (double2*)b, ldb, (double2*)&beta, (double2*)c, ldc)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::hemm_cm(const char side, const char uplo, const int m, const int n, - const float alpha, const float *a, const int lda, const float *b, const int ldb, - const float beta, float *c, const int ldc, base_device::AbacusDevice_t device_type) -{ - symm_cm(side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc, device_type); -} - -void BlasConnector::hemm_cm(const char side, const char uplo, const int m, const int n, - const double alpha, const double *a, const int lda, const double *b, const int ldb, - const double beta, double *c, const int ldc, base_device::AbacusDevice_t device_type) -{ - symm_cm(side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc, device_type); -} - -void BlasConnector::hemm_cm(char side, char uplo, int m, int n, - std::complex alpha, std::complex *a, int lda, std::complex *b, int ldb, - std::complex beta, std::complex *c, int ldc, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - chemm_(&side, &uplo, &m, &n, - &alpha, a, &lda, b, &ldb, - &beta, c, &ldc); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasSideMode_t sideMode = BlasUtils::judge_side(side); - cublasFillMode_t fillMode = BlasUtils::judge_fill(uplo); - cublasErrcheck(cublasChemm(BlasUtils::cublas_handle, sideMode, fillMode, m, n, (float2*)&alpha, (float2*)a, lda, (float2*)b, ldb, (float2*)&beta, (float2*)c, ldc)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::hemm_cm(char side, char uplo, int m, int n, - std::complex alpha, std::complex *a, int lda, std::complex *b, int ldb, - std::complex beta, std::complex *c, int ldc, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - zhemm_(&side, &uplo, &m, &n, - &alpha, a, &lda, b, &ldb, - &beta, c, &ldc); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasSideMode_t sideMode = BlasUtils::judge_side(side); - cublasFillMode_t fillMode = BlasUtils::judge_fill(uplo); - cublasErrcheck(cublasZhemm(BlasUtils::cublas_handle, sideMode, fillMode, m, n, (double2*)&alpha, (double2*)a, lda, (double2*)b, ldb, (double2*)&beta, (double2*)c, ldc)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::gemv(const char trans, const int m, const int n, - const float alpha, const float* A, const int lda, const float* X, const int incx, - const float beta, float* Y, const int incy, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - sgemv_(&trans, &m, &n, &alpha, A, &lda, X, &incx, &beta, Y, &incy); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasOperation_t cutransA = BlasUtils::judge_trans(false, trans, "gemv_op"); - cublasErrcheck(cublasSgemv(BlasUtils::cublas_handle, cutransA, m, n, &alpha, A, lda, X, incx, &beta, Y, incy)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::gemv(const char trans, const int m, const int n, - const double alpha, const double* A, const int lda, const double* X, const int incx, - const double beta, double* Y, const int incy, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - dgemv_(&trans, &m, &n, &alpha, A, &lda, X, &incx, &beta, Y, &incy); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasOperation_t cutransA = BlasUtils::judge_trans(false, trans, "gemv_op"); - cublasErrcheck(cublasDgemv(BlasUtils::cublas_handle, cutransA, m, n, &alpha, A, lda, X, incx, &beta, Y, incy)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::gemv(const char trans, const int m, const int n, - const std::complex alpha, const std::complex *A, const int lda, const std::complex *X, const int incx, - const std::complex beta, std::complex *Y, const int incy, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - cgemv_(&trans, &m, &n, &alpha, A, &lda, X, &incx, &beta, Y, &incy); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cuFloatComplex alpha_cu = make_cuFloatComplex(alpha.real(), alpha.imag()); - cuFloatComplex beta_cu = make_cuFloatComplex(beta.real(), beta.imag()); - cublasOperation_t cutransA = BlasUtils::judge_trans(true, trans, "gemv_op"); - cublasErrcheck(cublasCgemv(BlasUtils::cublas_handle, cutransA, m, n, &alpha_cu, (cuFloatComplex*)A, lda, (cuFloatComplex*)X, incx, &beta_cu, (cuFloatComplex*)Y, incy)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::gemv(const char trans, const int m, const int n, - const std::complex alpha, const std::complex *A, const int lda, const std::complex *X, const int incx, - const std::complex beta, std::complex *Y, const int incy, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - zgemv_(&trans, &m, &n, &alpha, A, &lda, X, &incx, &beta, Y, &incy); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cuDoubleComplex alpha_cu = make_cuDoubleComplex(alpha.real(), alpha.imag()); - cuDoubleComplex beta_cu = make_cuDoubleComplex(beta.real(), beta.imag()); - cublasOperation_t cutransA = BlasUtils::judge_trans(true, trans, "gemv_op"); - cublasErrcheck(cublasZgemv(BlasUtils::cublas_handle, cutransA, m, n, &alpha_cu, (cuDoubleComplex*)A, lda, (cuDoubleComplex*)X, incx, &beta_cu, (cuDoubleComplex*)Y, incy)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} \ No newline at end of file diff --git a/source/module_base/blas_connector_vector.cpp b/source/module_base/blas_connector_vector.cpp deleted file mode 100644 index e87394b652..0000000000 --- a/source/module_base/blas_connector_vector.cpp +++ /dev/null @@ -1,473 +0,0 @@ -#include "blas_connector.h" -#include "macros.h" - -#ifdef __DSP -#include "module_base/kernels/dsp/dsp_connector.h" -#include "module_base/global_variable.h" -#endif - -#ifdef __CUDA -#include -#include -#include "cublas_v2.h" -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/module_device/memory_op.h" -#endif - - -void BlasConnector::axpy( const int n, const float alpha, const float *X, const int incX, float *Y, const int incY, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - saxpy_(&n, &alpha, X, &incX, Y, &incY); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasErrcheck(cublasSaxpy(BlasUtils::cublas_handle, n, &alpha, X, incX, Y, incY)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::axpy( const int n, const double alpha, const double *X, const int incX, double *Y, const int incY, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - daxpy_(&n, &alpha, X, &incX, Y, &incY); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasErrcheck(cublasDaxpy(BlasUtils::cublas_handle, n, &alpha, X, incX, Y, incY)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::axpy( const int n, const std::complex alpha, const std::complex *X, const int incX, std::complex *Y, const int incY, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - caxpy_(&n, &alpha, X, &incX, Y, &incY); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasErrcheck(cublasCaxpy(BlasUtils::cublas_handle, n, (float2*)&alpha, (float2*)X, incX, (float2*)Y, incY)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::axpy( const int n, const std::complex alpha, const std::complex *X, const int incX, std::complex *Y, const int incY, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - zaxpy_(&n, &alpha, X, &incX, Y, &incY); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasErrcheck(cublasZaxpy(BlasUtils::cublas_handle, n, (double2*)&alpha, (double2*)X, incX, (double2*)Y, incY)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - - -// x=a*x -void BlasConnector::scal( const int n, const float alpha, float *X, const int incX, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - sscal_(&n, &alpha, X, &incX); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasErrcheck(cublasSscal(BlasUtils::cublas_handle, n, &alpha, X, incX)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::scal( const int n, const double alpha, double *X, const int incX, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - dscal_(&n, &alpha, X, &incX); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasErrcheck(cublasDscal(BlasUtils::cublas_handle, n, &alpha, X, incX)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::scal( const int n, const std::complex alpha, std::complex *X, const int incX, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - cscal_(&n, &alpha, X, &incX); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasErrcheck(cublasCscal(BlasUtils::cublas_handle, n, (float2*)&alpha, (float2*)X, incX)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::scal( const int n, const std::complex alpha, std::complex *X, const int incX, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - zscal_(&n, &alpha, X, &incX); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - cublasErrcheck(cublasZscal(BlasUtils::cublas_handle, n, (double2*)&alpha, (double2*)X, incX)); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - - -// d=x*y -float BlasConnector::dot( const int n, const float*const X, const int incX, const float*const Y, const int incY, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - return sdot_(&n, X, &incX, Y, &incY); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice){ - float result = 0.0; - cublasErrcheck(cublasSdot(BlasUtils::cublas_handle, n, X, incX, Y, incY, &result)); - return result; - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -double BlasConnector::dot( const int n, const double*const X, const int incX, const double*const Y, const int incY, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - return ddot_(&n, X, &incX, Y, &incY); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice){ - double result = 0.0; - cublasErrcheck(cublasDdot(BlasUtils::cublas_handle, n, X, incX, Y, incY, &result)); - return result; - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -// d=x*y -float BlasConnector::dotu(const int n, const float*const X, const int incX, const float*const Y, const int incY, base_device::AbacusDevice_t device_type) -{ - return BlasConnector::dot(n, X, incX, Y, incY, device_type); -} - -double BlasConnector::dotu(const int n, const double*const X, const int incX, const double*const Y, const int incY, base_device::AbacusDevice_t device_type) -{ - return BlasConnector::dot(n, X, incX, Y, incY, device_type); -} - -std::complex BlasConnector::dotu(const int n, const std::complex*const X, const int incX, const std::complex*const Y, const int incY, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - const int incX2 = 2 * incX; - const int incY2 = 2 * incY; - const float*const x = reinterpret_cast(X); - const float*const y = reinterpret_cast(Y); - //Re(result)=Re(x)*Re(y)-Im(x)*Im(y) - //Im(result)=Re(x)*Im(y)+Im(x)*Re(y) - return std::complex( - BlasConnector::dot(n, x, incX2, y, incY2, device_type) - dot(n, x+1, incX2, y+1, incY2, device_type), - BlasConnector::dot(n, x, incX2, y+1, incY2, device_type) + dot(n, x+1, incX2, y, incY2, device_type)); - } - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -std::complex BlasConnector::dotu(const int n, const std::complex*const X, const int incX, const std::complex*const Y, const int incY, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - const int incX2 = 2 * incX; - const int incY2 = 2 * incY; - const double*const x = reinterpret_cast(X); - const double*const y = reinterpret_cast(Y); - //Re(result)=Re(x)*Re(y)-Im(x)*Im(y) - //Im(result)=Re(x)*Im(y)+Im(x)*Re(y) - return std::complex( - BlasConnector::dot(n, x, incX2, y, incY2, device_type) - dot(n, x+1, incX2, y+1, incY2, device_type), - BlasConnector::dot(n, x, incX2, y+1, incY2, device_type) + dot(n, x+1, incX2, y, incY2, device_type)); - } - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -// d = x.conj() * Vy -float BlasConnector::dotc(const int n, const float*const X, const int incX, const float*const Y, const int incY, base_device::AbacusDevice_t device_type) -{ - return BlasConnector::dot(n, X, incX, Y, incY, device_type); -} - -double BlasConnector::dotc(const int n, const double*const X, const int incX, const double*const Y, const int incY, base_device::AbacusDevice_t device_type) -{ - return BlasConnector::dot(n, X, incX, Y, incY, device_type); -} - -std::complex BlasConnector::dotc(const int n, const std::complex*const X, const int incX, const std::complex*const Y, const int incY, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - const int incX2 = 2 * incX; - const int incY2 = 2 * incY; - const float*const x = reinterpret_cast(X); - const float*const y = reinterpret_cast(Y); - // Re(result)=Re(X)*Re(Y)+Im(X)*Im(Y) - // Im(result)=Re(X)*Im(Y)-Im(X)*Re(Y) - return std::complex( - BlasConnector::dot(n, x, incX2, y, incY2, device_type) + dot(n, x+1, incX2, y+1, incY2, device_type), - BlasConnector::dot(n, x, incX2, y+1, incY2, device_type) - dot(n, x+1, incX2, y, incY2, device_type)); - } - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -std::complex BlasConnector::dotc(const int n, const std::complex*const X, const int incX, const std::complex*const Y, const int incY, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - const int incX2 = 2 * incX; - const int incY2 = 2 * incY; - const double*const x = reinterpret_cast(X); - const double*const y = reinterpret_cast(Y); - // Re(result)=Re(X)*Re(Y)+Im(X)*Im(Y) - // Im(result)=Re(X)*Im(Y)-Im(X)*Re(Y) - return std::complex( - BlasConnector::dot(n, x, incX2, y, incY2, device_type) + dot(n, x+1, incX2, y+1, incY2, device_type), - BlasConnector::dot(n, x, incX2, y+1, incY2, device_type) - dot(n, x+1, incX2, y, incY2, device_type)); - } - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -// out = ||x||_2 -float BlasConnector::nrm2( const int n, const float *X, const int incX, base_device::AbacusDevice_t device_type ) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - return snrm2_( &n, X, &incX ); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice){ - float result = 0.0; - cublasErrcheck(cublasSnrm2(BlasUtils::cublas_handle, n, X, incX, &result)); - return result; - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - - -double BlasConnector::nrm2( const int n, const double *X, const int incX, base_device::AbacusDevice_t device_type ) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - return dnrm2_( &n, X, &incX ); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice){ - double result = 0.0; - cublasErrcheck(cublasDnrm2(BlasUtils::cublas_handle, n, X, incX, &result)); - return result; - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - - -double BlasConnector::nrm2( const int n, const std::complex *X, const int incX, base_device::AbacusDevice_t device_type ) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - return dznrm2_( &n, X, &incX ); - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice){ - double result = 0.0; - cublasErrcheck(cublasDznrm2(BlasUtils::cublas_handle, n, (double2*)X, incX, &result)); - return result; - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -// copies a into b -void BlasConnector::copy(const long n, const double *a, const int incx, double *b, const int incy, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - dcopy_(&n, a, &incx, b, &incy); - } - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void BlasConnector::copy(const long n, const std::complex *a, const int incx, std::complex *b, const int incy, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::AbacusDevice_t::CpuDevice) { - zcopy_(&n, a, &incx, b, &incy); - } - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - - -template -void vector_mul_vector(const int& dim, T* result, const T* vector1, const T* vector2, base_device::AbacusDevice_t device_type){ - using Real = typename GetTypeReal::type; - if (device_type == base_device::AbacusDevice_t::CpuDevice) { -#ifdef _OPENMP -#pragma omp parallel for schedule(static, 4096 / sizeof(Real)) -#endif - for (int i = 0; i < dim; i++) - { - result[i] = vector1[i] * vector2[i]; - } - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - ModuleBase::vector_mul_vector_op()(dim, result, vector1, vector2); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - - -template -void vector_div_vector(const int& dim, T* result, const T* vector1, const T* vector2, base_device::AbacusDevice_t device_type){ - using Real = typename GetTypeReal::type; - if (device_type == base_device::AbacusDevice_t::CpuDevice) { -#ifdef _OPENMP -#pragma omp parallel for schedule(static, 4096 / sizeof(Real)) -#endif - for (int i = 0; i < dim; i++) - { - result[i] = vector1[i] / vector2[i]; - } - } -#ifdef __CUDA - else if (device_type == base_device::AbacusDevice_t::GpuDevice) { - ModuleBase::vector_div_vector_op()(dim, result, vector1, vector2); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void vector_add_vector(const int& dim, float *result, const float *vector1, const float constant1, const float *vector2, const float constant2, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::CpuDevice){ -#ifdef _OPENMP -#pragma omp parallel for schedule(static, 8192 / sizeof(float)) -#endif - for (int i = 0; i < dim; i++) - { - result[i] = vector1[i] * constant1 + vector2[i] * constant2; - } - } -#ifdef __CUDA - else if (device_type == base_device::GpuDevice) { - ModuleBase::vector_add_vector_op()(dim, result, vector1, constant1, vector2, constant2); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void vector_add_vector(const int& dim, double *result, const double *vector1, const double constant1, const double *vector2, const double constant2, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::CpuDevice){ -#ifdef _OPENMP -#pragma omp parallel for schedule(static, 8192 / sizeof(double)) -#endif - for (int i = 0; i < dim; i++) - { - result[i] = vector1[i] * constant1 + vector2[i] * constant2; - } - } -#ifdef __CUDA - else if (device_type == base_device::GpuDevice) { - ModuleBase::vector_add_vector_op()(dim, result, vector1, constant1, vector2, constant2); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void vector_add_vector(const int& dim, std::complex *result, const std::complex *vector1, const float constant1, const std::complex *vector2, const float constant2, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::CpuDevice){ -#ifdef _OPENMP -#pragma omp parallel for schedule(static, 8192 / sizeof(std::complex)) -#endif - for (int i = 0; i < dim; i++) - { - result[i] = vector1[i] * constant1 + vector2[i] * constant2; - } - } -#ifdef __CUDA - else if (device_type == base_device::GpuDevice) { - ModuleBase::vector_add_vector_op, base_device::DEVICE_GPU>()(dim, result, vector1, constant1, vector2, constant2); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} - -void vector_add_vector(const int& dim, std::complex *result, const std::complex *vector1, const double constant1, const std::complex *vector2, const double constant2, base_device::AbacusDevice_t device_type) -{ - if (device_type == base_device::CpuDevice){ -#ifdef _OPENMP -#pragma omp parallel for schedule(static, 8192 / sizeof(std::complex)) -#endif - for (int i = 0; i < dim; i++) - { - result[i] = vector1[i] * constant1 + vector2[i] * constant2; - } - } -#ifdef __CUDA - else if (device_type == base_device::GpuDevice) { - ModuleBase::vector_add_vector_op, base_device::DEVICE_GPU>()(dim, result, vector1, constant1, vector2, constant2); - } -#endif - else { - throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } -} \ No newline at end of file diff --git a/source/module_base/gather_math_lib_info.cpp b/source/module_base/gather_math_lib_info.cpp deleted file mode 100644 index ad1ed505f9..0000000000 --- a/source/module_base/gather_math_lib_info.cpp +++ /dev/null @@ -1,80 +0,0 @@ -// This file defines the math lib wrapper for output information before executing computations. - -/* -When INFO is defined in cmake configure, a macro of GATHER_INFO will be defined. -This macro will be used to output information before executing computations. -Results will output to OUT/math_info.log, see ModuleBase::Global_File::make_dir_out . -*/ - -#include -#undef GATHER_INFO -#include "module_base/blas_connector.h" -#include "module_base/lapack_connector.h" - -#include - -void zgemm_i(const char *transa, - const char *transb, - const int *m, - const int *n, - const int *k, - const std::complex *alpha, - const std::complex *a, - const int *lda, - const std::complex *b, - const int *ldb, - const std::complex *beta, - std::complex *c, - const int *ldc) -{ - GlobalV::ofs_info.unsetf(std::ios_base::floatfield); - GlobalV::ofs_info << "zgemm " << *transa << " " << *transb << " " << *m << " " << *n << " " - << *k << " " << *alpha << " " << *lda << " " << *ldb << " " << *beta << " " << *ldc << std::endl; - zgemm_(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc); -} - -void zaxpy_i(const int *N, - const std::complex *alpha, - const std::complex *X, - const int *incX, - std::complex *Y, - const int *incY) -{ - // std::cout << "zaxpy " << *N << std::endl; - // alpha is a coefficient - // incX, incY is always 1 - zaxpy_(N, alpha, X, incX, Y, incY); -} - -void zhegvx_i(const int *itype, - const char *jobz, - const char *range, - const char *uplo, - const int *n, - std::complex *a, - const int *lda, - std::complex *b, - const int *ldb, - const double *vl, - const double *vu, - const int *il, - const int *iu, - const double *abstol, - const int *m, - double *w, - std::complex *z, - const int *ldz, - std::complex *work, - const int *lwork, - double *rwork, - int *iwork, - int *ifail, - int *info) -{ - GlobalV::ofs_info.unsetf(std::ios_base::floatfield); - GlobalV::ofs_info << "zhegvx " << *itype << " " << *jobz << " " << *range << " " << *uplo - << " " << *n << " " << *lda << " " << *ldb << " " << *vl << " " << *vu << " " << *il << " " << *iu - << " " << *abstol << " " << *m << " " << *lwork << " " << *info << std::endl; - zhegvx_(itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, rwork, - iwork, ifail, info); -} diff --git a/source/module_base/global_file.cpp b/source/module_base/global_file.cpp deleted file mode 100644 index b5d7bcb8c5..0000000000 --- a/source/module_base/global_file.cpp +++ /dev/null @@ -1,314 +0,0 @@ -//========================================================== -// AUTHOR : mohan - -// DATE : 2008-11-10 -//========================================================== -#include "global_file.h" - -#ifdef __MPI -#include -#endif -#include -#include -#include "global_function.h" -#include "module_parameter/parameter.h" -#include "global_variable.h" -#include "module_base/parallel_common.h" -#include "module_base/parallel_reduce.h" - -//---------------------------------------------------------- -// EXPLAIN : Be Called in input.cpp -//---------------------------------------------------------- -namespace ModuleBase -{ -void ModuleBase::Global_File::make_dir_out( - const std::string &suffix, - const std::string &calculation, - const bool &out_dir, - const int rank, - const bool &restart, - const bool out_alllog) -{ -//---------------------------------------------------------- -// USE STL FUNCTION -// NAME : system -//---------------------------------------------------------- - -#ifdef __MPI - MPI_Barrier(MPI_COMM_WORLD); -#endif - int make_dir = 0; - // mohan update 2011-05-03 - std::string command0 = "test -d " + PARAM.globalv.global_out_dir + " || mkdir " + PARAM.globalv.global_out_dir; - - int times = 0; - while(times0) {break; -} - ++times; - } - -#ifdef __MPI - if(make_dir==0) - { - std::cout << " CAN NOT MAKE THE OUT DIR......." << std::endl; - ModuleBase::QUIT(); - } - MPI_Barrier(MPI_COMM_WORLD); -#endif - - if(calculation == "md") - { - int make_dir_stru = 0; - std::string command1 = "test -d " + PARAM.globalv.global_stru_dir + " || mkdir " + PARAM.globalv.global_stru_dir; - - times = 0; - while(times0) { break; -} - ++times; - } - -#ifdef __MPI - if(make_dir_stru==0) - { - std::cout << " CAN NOT MAKE THE STRU DIR......." << std::endl; - ModuleBase::QUIT(); - } - MPI_Barrier(MPI_COMM_WORLD); -#endif - } - - // make dir for HS matrix output in md calculation - if((out_dir) && calculation == "md") - { - int make_dir_matrix = 0; - std::string command1 = "test -d " + PARAM.globalv.global_matrix_dir + " || mkdir " + PARAM.globalv.global_matrix_dir; - - times = 0; - while(times0) { break; -} - ++times; - } - -#ifdef __MPI - if(make_dir_matrix==0) - { - std::cout << " CAN NOT MAKE THE MATRIX DIR......." << std::endl; - ModuleBase::QUIT(); - } - MPI_Barrier(MPI_COMM_WORLD); -#endif - } - - if(PARAM.inp.of_ml_gene_data == 1) - { - int make_dir_descrip = 0; - std::string command1 = "test -d " + PARAM.globalv.global_mlkedf_descriptor_dir + " || mkdir " + PARAM.globalv.global_mlkedf_descriptor_dir; - - times = 0; - while(times 0) - { - break; - } - ++times; - } - -#ifdef __MPI - if(make_dir_descrip == 0) - { - std::cout << " CAN NOT MAKE THE MLKEDF DESCRIPTOR DIR......." << std::endl; - ModuleBase::QUIT(); - } - MPI_Barrier(MPI_COMM_WORLD); -#endif - } - - // mohan add 2010-09-12 - if(out_alllog) - { - open_log(GlobalV::ofs_running, PARAM.globalv.log_file, calculation, restart); - #if defined(__CUDA) || defined(__ROCM) - open_log(GlobalV::ofs_device, "device" + std::to_string(rank) + ".log", calculation, restart); - #endif - } - else - { - if(rank==0) - { - open_log(GlobalV::ofs_running, PARAM.globalv.log_file, calculation, restart); - #if defined(__CUDA) || defined(__ROCM) - open_log(GlobalV::ofs_device, "device.log", calculation, restart); - #endif - } - } - - if(rank==0) - { - open_log(GlobalV::ofs_warning, "warning.log", calculation, restart); - } - -#ifdef GATHER_INFO - open_log(GlobalV::ofs_info, "math_info_" + std::to_string(rank) + ".log", calculation, restart); -#endif - - return; -} - -void ModuleBase::Global_File::make_dir_atom(const std::string &label) -{ -//---------------------------------------------------------- -// EXPLAIN : generate atom dir for each type of atom -//---------------------------------------------------------- - std::stringstream ss; - ss << PARAM.globalv.global_out_dir << label << "/"; - ModuleBase::GlobalFunc::MAKE_DIR(ss.str()); - return; -} - -void ModuleBase::Global_File::open_log(std::ofstream &ofs, const std::string &fn, const std::string &calculation, const bool &restart) -{ -//---------------------------------------------------------- -// USE GLOBAL VARIABLE : -// PARAM.globalv.global_out_dir : (default dir to store "*.log" file) -//---------------------------------------------------------- - std::stringstream ss; - ss << PARAM.globalv.global_out_dir << fn; - - if(calculation == "md" && restart) - { - ofs.open(ss.str(), std::ios::app); - } - else - { - ofs.open( ss.str() ); - } -// ofs << " WELCOME TO MESIA PROGRAM." << std::endl; -// ofs << " OPEN "< -#include -#include -#include - -namespace { - -struct DelleyTable { - const int lmax_; - const int ngrid_; - const int ntype_[6]; - const std::vector data_; -}; - -// Delley's table from the original article -const std::vector delley_table = { - { - 17, 110, {1, 1, 0, 3, 1, 0}, - { - 0.00000000000000000, 0.00000000000000000, 0.0038282704949371616, - 0.57735026918962576, 0.57735026918962576, 0.0097937375124875125, - 0.18511563534473617, 0.18511563534473617, 0.0082117372831911110, - 0.39568947305594191, 0.39568947305594191, 0.0095954713360709628, - 0.69042104838229218, 0.21595729184584883, 0.0099428148911781033, - 0.47836902881215020, 0.00000000000000000, 0.0096949963616630283, - } - }, - { - 23, 194, {1, 1, 1, 4, 1, 1}, - { - 0.00000000000000000, 0.00000000000000000, 0.0017823404472446112, - 0.57735026918962576, 0.57735026918962576, 0.0055733831788487380, - 0.70710678118654752, 0.00000000000000000, 0.0057169059499771019, - 0.44469331787174373, 0.44469331787174373, 0.0055187714672736137, - 0.28924656275754386, 0.28924656275754386, 0.0051582377118053831, - 0.67129734426952263, 0.31419699418258608, 0.0056087040825879968, - 0.12993354476500669, 0.12993354476500669, 0.0041067770281693941, - 0.34577021976112827, 0.00000000000000000, 0.0050518460646148085, - 0.52511857244364202, 0.15904171053835295, 0.0055302489162330937, - } - }, - { - 29, 302, {1, 1, 0, 6, 2, 2}, - { - 0.00000000000000000, 0.00000000000000000, 0.0008545911725128148, - 0.57735026918962576, 0.57735026918962576, 0.0035991192850255715, - 0.70117664160895449, 0.12923867271051493, 0.0036500458076772554, - 0.65663294102196118, 0.37103417838482119, 0.0036048226014198817, - 0.47290541325810046, 0.47290541325810046, 0.0035767296617433671, - 0.35156403455701051, 0.35156403455701051, 0.0034497884243058833, - 0.22196452362941784, 0.22196452362941784, 0.0031089531224136753, - 0.09618308522614784, 0.09618308522614784, 0.0023521014136891644, - 0.57189558918789607, 0.00000000000000000, 0.0036008209322164603, - 0.26441528870606625, 0.00000000000000000, 0.0029823449631718039, - 0.54486773725807738, 0.25100347517704651, 0.0035715405542733871, - 0.41277240831685310, 0.12335485325833274, 0.0033923122050061702, - } - }, - { - 35, 434, {1, 1, 1, 7, 2, 4}, - { - 0.00000000000000000, 0.00000000000000000, 0.0005265897968224436, - 0.57735026918962576, 0.57735026918962576, 0.0025123174189273072, - 0.70710678118654752, 0.00000000000600000, 0.0025482199720026072, - 0.69093463075091106, 0.21264682470755207, 0.0025304038011863550, - 0.64566647074242561, 0.40771266489776951, 0.0025132671745975644, - 0.49143426377847465, 0.49143426377847465, 0.0025017251684029361, - 0.39272597633680022, 0.39272597633680022, 0.0024453734373129800, - 0.28612890103076384, 0.28612890103076384, 0.0023026947822274158, - 0.17748360546091578, 0.17748360546091578, 0.0020142790209185282, - 0.07568084367178018, 0.07568084367178018, 0.0014624956215946138, - 0.21027252285730696, 0.00000000000000000, 0.0019109512821795323, - 0.47159869115131592, 0.00000000000000000, 0.0024174423756389808, - 0.33443631453434549, 0.09921769636429237, 0.0022366077604378487, - 0.45023303825826254, 0.20548236964030437, 0.0024169300443247753, - 0.55501523610768072, 0.31042840351665415, 0.0024966440545530860, - 0.59051570489252711, 0.10680182607580483, 0.0025122368545634951, - } - }, - { - 41, 590, {1, 1, 0, 8, 4, 6}, - { - 0.00000000000000000, 0.00000000000000000, 0.0001009005753378758, - 0.57735026918962576, 0.57735026918962576, 0.0018514016873890461, - 0.70404760433146996, 0.09291900596883211, 0.0018686219518306975, - 0.68084561988024238, 0.26999719217017240, 0.0018648696345606001, - 0.63723669159418917, 0.43342680786054810, 0.0018497643975168892, - 0.50447558060926046, 0.50447558060926046, 0.0018450277740822388, - 0.42175447334398773, 0.42175447334398773, 0.0018164174988262214, - 0.33201962086729379, 0.33201962086729379, 0.0017449464690023229, - 0.23917494336556047, 0.23917494336556047, 0.0016278016126848035, - 0.14024070738935403, 0.14024070738935403, 0.0015576827519901693, - 0.09161634328605240, 0.00000000000000000, 0.0012680968886048433, - 0.20326292518419433, 0.00000000000000000, 0.0011183965414769017, - 0.39364042372978295, 0.00000000000000000, 0.0017287035120530033, - 0.61262355812929648, 0.00000000000000000, 0.0018551905629473527, - 0.28114771623428322, 0.08959875911893791, 0.0014697353123693616, - 0.38175470908581117, 0.17327600238498666, 0.0016819651914742022, - 0.47452376478986998, 0.26422260656245780, 0.0017876372876796954, - 0.56127905075920534, 0.35189965873835832, 0.0018400735685528423, - 0.50324791996964975, 0.08886791018186295, 0.0018072536817113700, - 0.59768324320748616, 0.18154345643517542, 0.0018527289739424312, - } - }, - { - 47, 770, {1, 1, 1, 9, 4, 9}, - { - 0.00000000000000000, 0.00000000000000000, 0.0011685335608691628, - 0.57735026918962576, 0.57735026918962576, 0.0014121215930643264, - 0.70710678118654752, 0.00000000000000000, 0.0014468645950992776, - 0.11441365123336336, 0.11441365123336336, 0.0010478418864629224, - 0.19944675708548970, 0.19944675708548970, 0.0012392547584848484, - 0.28401278368259530, 0.28401278368259530, 0.0013259295792415379, - 0.36646411416548296, 0.36646411416548296, 0.0013756097758625958, - 0.44356118052513995, 0.44356118052513995, 0.0013999348863558624, - 0.51435709575333968, 0.51435709575333968, 0.0014096221218822673, - 0.63052081196671812, 0.45264446462279973, 0.0014108746499638577, - 0.67164784337293865, 0.31269529735024947, 0.0014134887639034478, - 0.69812332010174177, 0.15889512220405632, 0.0014366946685816802, - 0.12047667931264991, 0.00000000000000000, 0.0010901543574180667, - 0.30940302315480606, 0.00000000000000000, 0.0001869137844803852, - 0.34884276430183016, 0.00000000000000000, 0.0011284267652336505, - 0.53224214285417946, 0.00000000000000000, 0.0013844558026568455, - 0.23249923409267532, 0.06616159933437003, 0.0011853923885095502, - 0.32477344409682044, 0.14568618765136356, 0.0012949021664637693, - 0.41056989039349425, 0.22832839132127622, 0.0013525857420363760, - 0.49213658085114203, 0.30714431901543855, 0.0013925025908786082, - 0.56548849812588755, 0.38271180625074657, 0.0014073257894372725, - 0.43713473693946563, 0.07970715187939190, 0.0013128954307755017, - 0.52320749473197761, 0.15892620239864833, 0.0013784632898490457, - 0.60283033994386521, 0.23667220253873893, 0.0014125450609821936, - 0.62037164721742807, 0.07982328826030880, 0.0014289835314095131, - } - }, - { - 53, 974, {1, 1, 0, 12, 4, 12}, - { - 0.00000000000000000, 0.00000000800000000, 0.0001438294190527431, - 0.57735026918962576, 0.57735026918962576, 0.0011257722882870041, - 0.04292963545341347, 0.04292963545341347, 0.0004948029341949241, - 0.10514268540864042, 0.10514268540864042, 0.0007357990109125470, - 0.17500248676230874, 0.17500248676230874, 0.0008889132771304384, - 0.24776533796502568, 0.24776533796502568, 0.0009888347838921435, - 0.32065671239559574, 0.32065671239559574, 0.0010532996817094706, - 0.39165207498499835, 0.39165207498499835, 0.0010927788070145785, - 0.45908258741876237, 0.45908258741876237, 0.0011143893940632272, - 0.52145638884158605, 0.52145638884158605, 0.0011237247880515553, - 0.62531702446541989, 0.46685890569574328, 0.0011252393252438136, - 0.66379267445231699, 0.34461365423743822, 0.0011261532718159050, - 0.69104103984983007, 0.21195415185018465, 0.0011302869311238408, - 0.70529070074577603, 0.07162440144995566, 0.0011349865343639549, - 0.12366867626579899, 0.00000000000000000, 0.0006823367927109931, - 0.29407771144683870, 0.00000000000000000, 0.0009454158160447096, - 0.46977538492076491, 0.00000000000000000, 0.0010744299753856791, - 0.63345632411395669, 0.00000000000000000, 0.0011293000865691317, - 0.20291287527775228, 0.05974048614181342, 0.0008436884500901954, - 0.46026219424840539, 0.13757604084736365, 0.0010752557204488846, - 0.50306739996620357, 0.33910165263362857, 0.0011085772368644620, - 0.28176064224421343, 0.12716751914398195, 0.0009566475323783357, - 0.43315612917201574, 0.26931207404135125, 0.0010806632507173907, - 0.62561673585808142, 0.14197864526019183, 0.0011267971311962946, - 0.37983952168591567, 0.06709284600738255, 0.0010225687153580612, - 0.55175054214235205, 0.07057738183256172, 0.0011089602677131075, - 0.60296191561591869, 0.27838884778821546, 0.0011227906534357658, - 0.35896063295890958, 0.19795789389174069, 0.0010324018471174598, - 0.53486664381354765, 0.20873070611032740, 0.0011072493822838539, - 0.56749975460743735, 0.40551221378728359, 0.0011217800485199721, - } - }, - { - 59, 1202, {1, 1, 1, 13, 4, 16}, - { - 0.00006000000000000, 0.00000000000000000, 0.0001105189233267572, - 0.57735026918962576, 0.57735026918962576, 0.0009133159786443561, - 0.70710678118654752, 0.00000000000000000, 0.0009205232738090741, - 0.03712636449657089, 0.03712636449657089, 0.0003690421898017899, - 0.09140060412262223, 0.09140060412262223, 0.0005603990928680660, - 0.15310778524699062, 0.15310778524699062, 0.0006865297629282609, - 0.21809288916606116, 0.21809288916606116, 0.0007720338551145630, - 0.28398745322001746, 0.28398745322001746, 0.0008301545958894795, - 0.34911776009637644, 0.34911776009637644, 0.0008686692550179628, - 0.41214314614443092, 0.41214314614443092, 0.0008927076285846890, - 0.47189936271491266, 0.47189936271491266, 0.0009060820238568219, - 0.52731454528423366, 0.52731454528423366, 0.0009119777254940867, - 0.62094753324440192, 0.47838093807695216, 0.0009128720138604181, - 0.65697227118572905, 0.36983086645942597, 0.0009130714935691735, - 0.68417883090701434, 0.25258395570071777, 0.0009152873784554116, - 0.70126043301236308, 0.12832618665972300, 0.0009187436274321654, - 0.10723822154781661, 0.00000000000000000, 0.0005176977312965694, - 0.25820689594969680, 0.00006000000000000, 0.0007331143682101417, - 0.41727529553067168, 0.00000000000000000, 0.0008463232836379928, - 0.57003669117925033, 0.00000000000000000, 0.0009031122694253992, - 0.17717740226153253, 0.05210639477011284, 0.0006485778453163257, - 0.24757164634262876, 0.11156409571564867, 0.0007435030910982369, - 0.31736152466119767, 0.17465516775786261, 0.0008101731497468018, - 0.38542911506692237, 0.23902784793817240, 0.0008556299257311812, - 0.45074225931570644, 0.30294669735289819, 0.0008850282341265444, - 0.51235184864198708, 0.36498322605976536, 0.0009022692938426915, - 0.56937024984684411, 0.42386447815223403, 0.0009105760258970126, - 0.33546162890664885, 0.05905888853235508, 0.0007998527891839054, - 0.40902684270853572, 0.12172350510959870, 0.0008483389574594331, - 0.47853206759224352, 0.18575051945473351, 0.0008811048182425720, - 0.54343035696939004, 0.24941121623622365, 0.0009010091677105086, - 0.60311616930963100, 0.31122759471496082, 0.0009107813579482705, - 0.49322211848512846, 0.06266250624154169, 0.0008803208679738260, - 0.56321230207620997, 0.12677748006842827, 0.0009021342299040653, - 0.62698055090243917, 0.19060182227792370, 0.0009131578003189435, - 0.63942796347491023, 0.06424549224220589, 0.0009158016174693465, - } - } -}; // end of the definition of "delley_table" - -// size of each group of points with octahedral symmetry -// 6: (1, 0, 0) x sign x permutation (vertices) -// 8: (sqrt(1/3), sqrt(1/3), sqrt(1/3)) x sign (face centers) -// 12: (sqrt(2)/2, sqrt(2)/2, 0) x sign x permutation (edge centers) -// 24a: (u, u, sqrt(1-2u^2)) x sign x permutation -// 24b: (u, 0, sqrt(1-u^2)) x sign x permutation -// 48: (u, v, sqrt(1-u^2-v^2)) x sign x permutation -const int group_size[] = {6, 8, 12, 24, 24, 48}; - -using Fill_t = std::function; - -// functors that fill the grid group-wise -const std::vector fill = { - // (1, 0, 0) x sign x permutation (vertices) - [](double* grid, double, double) { - for (int i = 0; i < 3; ++i) { - for (double one : {-1.0, 1.0}) { - grid[i] = one; - grid[(i+1)%3] = 0.0; - grid[(i+2)%3] = 0.0; - std::advance(grid, 3); - } - } - }, - - // (sqrt(1/3), sqrt(1/3), sqrt(1/3)) x sign (face centers) - [](double* grid, double, double) { - const double a = std::sqrt(3) / 3.0; - for (int xsign : {-1, 1}) { - for (int ysign : {-1, 1}) { - for (int zsign : {-1, 1}) { - grid[0] = xsign * a; - grid[1] = ysign * a; - grid[2] = zsign * a; - std::advance(grid, 3); - } - } - } - }, - - // (sqrt(2)/2, sqrt(2)/2, 0) x sign x permutation (edge centers) - [](double* grid, double, double) { - const double a = std::sqrt(2) / 2.0; - for (int i = 0; i < 3; ++i) { - for (int sign1 : {-1, 1}) { - for (int sign2 : {-1, 1}) { - grid[i] = 0; - grid[(i+1)%3] = sign1 * a; - grid[(i+2)%3] = sign2 * a; - std::advance(grid, 3); - } - } - } - }, - - // (u, u, sqrt(1-2u^2)) x sign x permutation - [](double* grid, double x, double y) { - double u = x == y ? x : std::sqrt(1.0 - x * x - y * y); - double v = std::sqrt(1.0 - 2.0 * u * u); - for (int i = 0; i < 3; ++i) { - for (int sign1 : {-1, 1}) { - for (int sign2 : {-1, 1}) { - for (int sign3 : {-1, 1}) { - grid[i] = sign1 * u; - grid[(i+1)%3] = sign2 * u; - grid[(i+2)%3] = sign3 * v; - std::advance(grid, 3); - } - } - } - } - }, - - // (u, 0, sqrt(1-u^2)) x sign x permutation - [](double* grid, double x, double y) { - double u = x > 0 ? x : y; - double v = std::sqrt(1.0 - u * u); - for (int i0 = 0; i0 < 3; ++i0) { - for (int iu0 : {1, 2}) { - for (int sign_u : {-1, 1}) { - for (int sign_v : {-1, 1}) { - grid[i0] = 0; - grid[(i0+iu0)%3] = sign_u * u; - grid[(i0-iu0+3)%3] = sign_v * v; - std::advance(grid, 3); - } - } - } - } - }, - - // (u, v, sqrt(1-u^2-v^2)) x sign x permutation - [](double* grid, double x, double y) { - double r = x; - double s = y; - double t = std::sqrt(1.0 - r * r - s * s); - for (int ir = 0; ir < 3; ++ir) { - for (int irs : {1, 2}) { - for (int sign_r : {-1, 1}) { - for (int sign_s : {-1, 1}) { - for (int sign_t : {-1, 1}) { - grid[ir] = sign_r * r; - grid[(ir+irs)%3] = sign_s * s; - grid[(ir-irs+3)%3] = sign_t * t; - std::advance(grid, 3); - } - } - } - } - } - }, -}; // end of the definition of "fill" - -const DelleyTable* _find_delley(int& lmax) { - // NOTE: this function assumes elements in "delley_table" are - // arranged such that their members "lmax_" are in ascending order. - auto tab = std::find_if(delley_table.begin(), delley_table.end(), - [lmax](const DelleyTable& t) { return t.lmax_ >= lmax; }); - return tab == delley_table.end() ? nullptr : (lmax = tab->lmax_, &(*tab)); -} - -void _delley(const DelleyTable* tab, double* grid, double* weight) { - assert(tab); - const double* ptr = &tab->data_[0]; - for (int itype = 0; itype < 6; ++itype) { - int stride = group_size[itype]; - for (int i = 0; i < tab->ntype_[itype]; ++i, ptr += 3, - grid += 3*stride, weight += stride) { - fill[itype](grid, ptr[0], ptr[1]); - std::fill(weight, weight + stride, ptr[2]); - } - } -} - -} // end of anonymous namespace - - -int Grid::Angular::ngrid_delley(int& lmax) { - auto tab = _find_delley(lmax); - return tab ? tab->ngrid_ : -1; -} - - -int Grid::Angular::delley(int& lmax, double* grid, double* weight) { - auto tab = _find_delley(lmax); - return tab ? _delley(tab, grid, weight), 0 : -1; -} - - -int Grid::Angular::delley( - int& lmax, - std::vector& grid, - std::vector& weight -) { - auto tab = _find_delley(lmax); - if (!tab) { - return -1; - } - grid.resize(3 * tab->ngrid_); - weight.resize(tab->ngrid_); - _delley(tab, grid.data(), weight.data()); - return 0; -} diff --git a/source/module_base/grid/radial.cpp b/source/module_base/grid/radial.cpp deleted file mode 100644 index 6b34ec953d..0000000000 --- a/source/module_base/grid/radial.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "module_base/grid/radial.h" - -#include - -namespace Grid { -namespace Radial { - -void baker(int nbase, double R, double* r, double* w, int mult) { - int n = (nbase+1) * mult - 1; - double r0 = -R / std::log((2.0 * nbase + 1.0) / ((nbase+1)*(nbase+1))); - for (int i = 1; i <= n; ++i) { - r[i-1] = -r0 * std::log(1.0 - static_cast(i)*i/((n+1)*(n+1))); - w[i-1] = 2.0 * i * r0 * r[i-1] * r[i-1] / ((n+1+i)*(n+1-i)); - } -} - - -void baker(int nbase, double R, std::vector& r, - std::vector& w, int mult) { - int n = (nbase+1) * mult - 1; - r.resize(n); - w.resize(n); - baker(nbase, R, r.data(), w.data(), mult); -} - - -void murray(int n, double R, double* r, double* w) { - for (int i = 1; i <= n; ++i) { - double x = static_cast(i) / (n + 1); - r[i-1] = std::pow(x / (1.0 - x), 2) * R; - w[i-1] = 2.0 / (n + 1) * std::pow(R, 3) * std::pow(x, 5) - / std::pow(1.0 - x, 7); - } -} - - -void treutler_m4(int n, double R, double* r, double* w, double alpha) { - const double pi = std::acos(-1.0); - const double inv_ln2 = 1.0 / std::log(2.0); - - for (int i = 1; i <= n; ++i) { - double x = std::cos(i * pi / (n + 1)); - double beta = std::sqrt((1.0 + x) / (1.0 - x)); - double gamma = std::log((1.0 - x) / 2.0); - double delta = std::pow(1.0 + x, alpha); - r[i-1] = -R * inv_ln2 * delta * gamma; - w[i-1] = pi / (n + 1) * std::pow(delta * R * inv_ln2, 3) - * gamma * gamma * (beta - alpha / beta * gamma); - } -} - - -void mura(int n, double R, double* r, double* w) { - for (int i = 1; i <= n; ++i) { - double x = static_cast(i) / (n + 1); - double alpha = 1.0 - x * x * x; - r[i-1] = -R * std::log(alpha); - w[i-1] = 3.0 * R * std::pow(x * r[i-1], 2) / ((n+1) * alpha); - } -} - - -} // end of namespace Radial -} // end of namespace Grid diff --git a/source/module_base/kernels/math_kernel_op.h b/source/module_base/kernels/math_kernel_op.h deleted file mode 100644 index d26e96171c..0000000000 --- a/source/module_base/kernels/math_kernel_op.h +++ /dev/null @@ -1,423 +0,0 @@ -// TODO: This is a temperary location for these functions. -// And will be moved to a global module(module base) later. -#ifndef MODULE_HSOLVER_MATH_KERNEL_H -#define MODULE_HSOLVER_MATH_KERNEL_H - -#include "module_base/macros.h" - -#include "module_base/blas_connector.h" -#include "module_base/parallel_reduce.h" - -#include "module_base/module_device/memory_op.h" -#include "module_base/module_device/types.h" - -#if defined(__CUDA) || defined(__UT_USE_CUDA) -#include - -#include "cublas_v2.h" -#endif //__CUDA || __UT_USE_CUDA - -namespace ModuleBase { - -//--------------------------------------------------------------------------------- -//-----------------------------0. Tool Functions----------------------------------- -//--------------------------------------------------------------------------------- -inline std::complex set_real_tocomplex(const std::complex &x) { - return {x.real(), 0.0}; -} - -inline std::complex set_real_tocomplex(const std::complex &x) { - return {x.real(), 0.0}; -} - -inline double set_real_tocomplex(const double &x) { return x; } - -inline float set_real_tocomplex(const float &x) { return x; } - -inline std::complex get_conj(const std::complex &x) { - return {x.real(), -x.imag()}; -} - -inline std::complex get_conj(const std::complex &x) { - return {x.real(), -x.imag()}; -} - -inline double get_conj(const double &x) { return x; } - -inline float get_conj(const float &x) { return x; } - - -//--------------------------------------------------------------------------------- -//-----------------------------1. Vector Operations-------------------------------- -//--------------------------------------------------------------------------------- -template struct scal_op { - /// @brief x = alpha * x, where alpha and x are complex numbers - /// - /// Input Parameters - /// \param N : array size - /// \param alpha : input constant - /// \param X : input array - /// \param incx : computing strip of array X - /// - /// Output Parameters - /// \param X : output array - void operator()(const int &N, - const std::complex *alpha, std::complex *X, - const int &incx); -}; - -template struct vector_mul_real_op { - using Real = typename GetTypeReal::type; - /// @brief result[i] = vector[i] * constant, where vector is complex number and constant is real number。 - /// It is different from the scal_op, which is used to multiply a complex number by a complex number. - /// - /// Input Parameters - /// \param dim : array size - /// \param vector : input array - /// \param constant : input constant - /// - /// Output Parameters - /// \param result : output array - /// \note Use mulitple instead of divide. It is faster. - void operator()(const int dim, T* result, const T* vector, const Real constant); -}; - -// vector operator: result[i] = vector1[i](complex) * vector2[i](not complex) -template struct vector_mul_vector_op { - using Real = typename GetTypeReal::type; - /// @brief result[i] = vector1[i](complex) * vector2[i](not complex) - /// - /// Input Parameters - /// \param dim : array size - /// \param vector1 : input array A - /// \param vector2 : input array B - /// \param add : flag to control whether to add the result to the output array - /// - /// Output Parameters - /// \param result : output array - void operator()(const int& dim, T* result, const T* vector1, const Real* vector2, const bool& add = false); -}; - -// vector operator: result[i] = vector[i] / constant -template struct vector_div_constant_op { - using Real = typename GetTypeReal::type; - /// @brief result[i] = vector[i] / constant - /// - /// Input Parameters - /// \param dim : array size - /// \param vector : input array - /// \param constant : input constant - /// - /// Output Parameters - /// \param result : output array - void operator()(const int& dim, T* result, const T* vector, const Real constant); -}; - -// vector operator: result[i] = vector1[i](complex) / vector2[i](not complex) -template struct vector_div_vector_op { - using Real = typename GetTypeReal::type; - /// @brief result[i] = vector1[i](complex) / vector2[i](not complex) - /// - /// Input Parameters - /// \param dim : array size - /// \param vector1 : input array A - /// \param vector2 : input array B - /// - /// Output Parameters - /// \param result : output array - void operator()(const int &dim, T *result, const T *vector1, - const Real *vector2); -}; - -// compute Y = alpha * X + Y -template struct axpy_op { - /// @brief Y = alpha * X + Y - /// - /// Input Parameters - /// \param N : array size - /// \param alpha : input constant alpha - /// \param X : input array X - /// \param incX : computing strip of X - /// \param Y : computing strip of Y - /// \param incY : computing strip of Y - /// - /// Output Parameters - /// \param Y : output array Y - void operator()(const int &N, const T *alpha, const T *X, - const int &incX, T *Y, const int &incY); -}; - -// vector operator: result[i] = vector1[i] * constant1 + vector2[i] * constant2 -template -struct vector_add_vector_op { - using Real = typename GetTypeReal::type; - /// @brief result[i] = vector1[i] * constant1 + vector2[i] * constant2 - /// - /// Input Parameters - /// \param dim : array size - /// \param vector1 : input array A - /// \param constant1 : input constant a - /// \param vector2 : input array B - /// \param constant2 : input constant b - /// - /// Output Parameters - /// \param result : output array - void operator()(const int &dim, T *result, const T *vector1, - const Real constant1, const T *vector2, const Real constant2); -}; - -template struct dot_real_op { - using Real = typename GetTypeReal::type; - /// @brief dot_real_op computes the dot product of the given complex - /// arrays(treated as float arrays). And there's may have MPI communications - /// while enabling planewave parallization strategy. - /// - /// Input Parameters - /// \param dim : array size - /// \param psi_L : input array A - /// \param psi_R : input array B - /// \param reduce : flag to control whether to perform the MPI communications - /// - /// \return - /// FPTYPE : dot product result - Real operator()(const int &dim, const T *psi_L, - const T *psi_R, const bool reduce = true); -}; - - -//--------------------------------------------------------------------------------- -//-----------------------------2. Matrix Operations-------------------------------- -//--------------------------------------------------------------------------------- - -// compute y = alpha * op(A) * x + beta * y -template struct gemv_op { - /// @brief y = alpha * op(A) * x + beta * y - /// - /// Input Parameters - /// \param trans : whether to transpose A - /// \param m : first dimension of matrix - /// \param n : second dimension of matrix - /// \param alpha : input constant alpha - /// \param A : input matrix A - /// \param lda : leading dimention of A - /// \param X : input array X - /// \param incx : computing strip of X - /// \param beta : input constant beta - /// \param Y : input array Y - /// \param incy : computing strip of Y - /// - /// Output Parameters - /// \param Y : output array Y - void operator()(const char &trans, const int &m, - const int &n, const T *alpha, const T *A, const int &lda, - const T *X, const int &incx, const T *beta, T *Y, - const int &incy); -}; - -// compute C = alpha * op(A) * op(B) + beta * C -template struct gemm_op { - /// @brief C = alpha * op(A) * op(B) + beta * C - /// - /// Input Parameters - /// \param transa : whether to transpose matrix A - /// \param transb : whether to transpose matrix B - /// \param m : first dimension of matrix mulplication - /// \param n : second dimension of matrix mulplication - /// \param k : third dimension of matrix mulplication - /// \param alpha : input constant alpha - /// \param a : input matrix A - /// \param lda : leading dimention of A - /// \param b : input matrix B - /// \param ldb : leading dimention of A - /// \param beta : input constant beta - /// \param c : input matrix C - /// \param ldc : leading dimention of C - /// - /// Output Parameters - /// \param c : output matrix C - void operator()(const char &transa, const char &transb, - const int &m, const int &n, const int &k, const T *alpha, - const T *a, const int &lda, const T *b, const int &ldb, - const T *beta, T *c, const int &ldc); -}; - -#ifdef __DSP -// compute C = alpha * op(A) * op(B) + beta * C on DSP Hardware -template struct gemm_op_mt { - /// @brief C = alpha * op(A) * op(B) + beta * C - /// - /// Input Parameters - /// \param transa : whether to transpose matrix A - /// \param transb : whether to transpose matrix B - /// \param m : first dimension of matrix mulplication - /// \param n : second dimension of matrix mulplication - /// \param k : third dimension of matrix mulplication - /// \param alpha : input constant alpha - /// \param a : input matrix A - /// \param lda : leading dimention of A - /// \param b : input matrix B - /// \param ldb : leading dimention of A - /// \param beta : input constant beta - /// \param c : input matrix C - /// \param ldc : leading dimention of C - /// - /// Output Parameters - /// \param c : output matrix C - void operator()(const char &transa, const char &transb, - const int &m, const int &n, const int &k, const T *alpha, - const T *a, const int &lda, const T *b, const int &ldb, - const T *beta, T *c, const int &ldc); -}; -#endif - -template struct matrixTranspose_op { - /// @brief transpose the input matrix - /// - /// Input Parameters - /// \param row : first dimension of matrix - /// \param col : second dimension of matrix - /// \param input_matrix : input matrix - /// - /// Output Parameters - /// \param output_matrix : output matrix - void operator()(const int &row, const int &col, - const T *input_matrix, T *output_matrix); -}; - -template struct matrixCopy { - /// @brief copy matrix A to B, they can have different leading dimensions - /// - /// Input Parameters - /// \param n1 : first dimension of matrix - /// \param n2 : second dimension of matrix - /// \param A : input matrix A - /// \param LDA : leading dimension of A - /// \param LDB : leading dimension of B - /// - /// Output Parameters - /// \param B : output matrix B - void operator()(const int& n1, const int& n2, const T* A, const int& LDA, T* B, const int& LDB); -}; - -template -struct apply_eigenvalues_op { - using Real = typename GetTypeReal::type; - - void operator()(const Device *d, const int &nbase, const int &nbase_x, const int ¬conv, - T *result, const T *vectors, const Real *eigenvalues); -}; - -template -struct precondition_op { - using Real = typename GetTypeReal::type; - void operator()(const Device* d, - const int& dim, - T* psi_iter, - const int& nbase, - const int& notconv, - const Real* precondition, - const Real* eigenvalues); -}; - -template -struct normalize_op { - using Real = typename GetTypeReal::type; - void operator()(const Device* d, - const int& dim, - T* psi_iter, - const int& nbase, - const int& notconv, - Real* psi_norm = nullptr); -}; - -template -struct normalize_op { - using Real = typename GetTypeReal::type; - void operator()(const base_device::DEVICE_GPU* d, - const int& dim, - T* psi_iter, - const int& nbase, - const int& notconv, - Real* psi_norm); -}; - -#if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM -// Partially specialize functor for base_device::GpuDevice. -template struct dot_real_op { - using Real = typename GetTypeReal::type; - Real operator()(const int &dim, - const T *psi_L, const T *psi_R, const bool reduce = true); -}; - -// vector operator: result[i] = vector[i] / constant -template -struct vector_mul_real_op -{ - using Real = typename GetTypeReal::type; - void operator()(const int dim, T* result, const T* vector, const Real constant); -}; - -// vector operator: result[i] = vector1[i](complex) * vector2[i](not complex) -template struct vector_mul_vector_op { - using Real = typename GetTypeReal::type; - void operator()(const int& dim, T* result, const T* vector1, const Real* vector2, const bool& add = false); -}; - -// vector operator: result[i] = vector[i] / constant -template struct vector_div_constant_op { - using Real = typename GetTypeReal::type; - void operator()(const int& dim, T* result, const T* vector, const Real constant); -}; - -// vector operator: result[i] = vector1[i](complex) / vector2[i](not complex) -template struct vector_div_vector_op { - using Real = typename GetTypeReal::type; - void operator()(const int &dim, T *result, - const T *vector1, const Real *vector2); -}; - -// vector operator: result[i] = vector1[i] * constant1 + vector2[i] * constant2 -template -struct vector_add_vector_op { - using Real = typename GetTypeReal::type; - void operator()(const int &dim, T *result, - const T *vector1, const Real constant1, const T *vector2, - const Real constant2); -}; - -template struct matrixCopy { - void operator()(const int& n1, - const int& n2, - const T* A, // input - const int& LDA, - T* B, // output - const int& LDB); -}; - -void createGpuBlasHandle(); -void destoryBLAShandle(); - -// vector operator: result[i] = -lambda[i] * vector[i] -template struct apply_eigenvalues_op { - using Real = typename GetTypeReal::type; - - void operator()(const base_device::DEVICE_GPU *d, const int &nbase, const int &nbase_x, const int ¬conv, - T *result, const T *vectors, const Real *eigenvalues); -}; - -template -struct precondition_op { - using Real = typename GetTypeReal::type; - void operator()(const base_device::DEVICE_GPU* d, - const int& dim, - T* psi_iter, - const int& nbase, - const int& notconv, - const Real* precondition, - const Real* eigenvalues); -}; - -#endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM -} // namespace hsolver - -#endif // MODULE_HSOLVER_MATH_KERNEL_H \ No newline at end of file diff --git a/source/module_base/kernels/test/math_ylm_op_test.cpp b/source/module_base/kernels/test/math_ylm_op_test.cpp deleted file mode 100644 index 5da30d8111..0000000000 --- a/source/module_base/kernels/test/math_ylm_op_test.cpp +++ /dev/null @@ -1,340 +0,0 @@ -#include "module_base/kernels/math_ylm_op.h" - -#include "module_base/module_device/memory_op.h" - -#include -#include -#include - -class TestModuleBaseMathMultiDevice : public ::testing::Test -{ -protected: - // xx = tf.random.uniform([100], minval=-4, maxval=4, dtype = tf.float64) - - const base_device::DEVICE_CPU* cpu_ctx = {}; - const base_device::DEVICE_GPU* gpu_ctx = {}; - - int ng = 59, lmax = 1; - - double SQRT2 = 1.4142135623730951, PI = 3.1415926535897931, PI_HALF = 1.5707963267948966, - FOUR_PI = 12.566370614359172, SQRT_INVERSE_FOUR_PI = 0.28209479177387814; - - std::vector g - = {2, -2, -2, 1, -1, -1, 0, 0, 0, -1, 1, 1, -2, 2, 2, 2, -2, 0, 1, -1, 1, 0, 0, 2, -1, 1, - 3, 2, -2, 2, 1, -1, 3, -1, 1, -3, -2, 2, -2, 1, -1, -3, 0, 0, -2, -1, 1, -1, -2, 2, 0, 2, - 0, -2, 1, 1, -1, 0, 2, 0, -1, 3, 1, 3, -1, -1, 2, 0, 0, 1, 1, 1, 0, 2, 2, 3, -1, 1, - 2, 0, 2, 1, 1, 3, 1, 1, -3, 0, 2, -2, -1, 3, -1, 2, 2, -2, 1, 3, -1, 3, 1, -1, 2, 2, - 0, 1, 3, 1, 3, 1, 1, 2, 2, 2, -1, -3, 1, -2, -2, 2, -2, -2, -2, -3, -1, -1, -1, -3, -1, -2, - -2, 0, -3, -1, 1, 1, -3, -1, 0, -2, 0, -1, -1, 1, -2, 0, 2, 1, -3, 1, 0, -2, 2, -1, -1, 3, - -1, -1, -3, -2, 0, -2, -3, 1, -1, 0, -2, -2, -1, -1, -1, -2, 0, 0, -3, 1, 1}; - std::vector expected_ylm = {0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - 0.282095, - -0.282095, - -0.282095, - 0, - 0.282095, - 0.282095, - 0, - 0.282095, - 0.488603, - 0.441958, - 0.282095, - 0.441958, - -0.441958, - -0.282095, - -0.441958, - -0.488603, - -0.282095, - 0, - -0.345494, - -0.282095, - 0, - 0.147319, - -0.147319, - 0, - 0.282095, - 0.345494, - 0.147319, - 0.345494, - 0.441958, - -0.441958, - -0.345494, - -0.147319, - -0.282095, - -0.147319, - -0.147319, - 0, - 0.147319, - 0.147319, - 0.282095, - 0.147319, - 0.282095, - -0.282095, - -0.147319, - -0.147319, - 0, - 0.147319, - -0.147319, - 0, - 0.282095, - 0.345494, - 0.147319, - 0.345494, - 0.441958, - -0.441958, - -0.345494, - -0.147319, - -0.345494, - -0.282095, - 0, - 0.147319, - -0.282095, - -0.282095, - -2.99183e-17, - 0.282095, - 0.282095, - -0.345494, - -0.282095, - -0, - 0.147319, - -0.282095, - -0.147319, - 0.147319, - 0.282095, - -0.147319, - -0, - 0.282095, - 0.345494, - -0.345494, - -0.282095, - -2.99183e-17, - 0.147319, - -0.441958, - -0.488603, - -0.282095, - -2.11554e-17, - -0.441958, - -0.345494, - -0.147319, - -0.147319, - -2.11554e-17, - 0.147319, - -0.282095, - -0.147319, - -0.441958, - -0.345494, - -0.147319, - -0.441958, - -0.282095, - 0.147319, - 0.282095, - 0.282095, - 0.441958, - 0.147319, - 0.345494, - 0.441958, - -0.147319, - -2.99183e-17, - 0.282095, - 0.345494, - -0.147319, - -2.11554e-17, - 0.147319, - 0.147319, - 0.345494, - 0.441958, - -2.11554e-17, - 0.282095, - 0.488603, - 0.441958, - 0.282095, - 0.282095, - -0.488603, - -0.282095, - -0.282095, - 0.345494, - 0.282095, - -0, - -0.147319, - 0.282095, - 0.147319, - -0.147319, - -0.282095, - 0.147319, - -0, - -0.282095, - -0.345494, - -0, - -0.282095, - -0.488603, - -0.441958, - 0.147319, - -0, - -0.282095, - -0.345494, - 0.147319, - -0, - -0.147319, - -0.147319, - -0.345494, - -0.441958, - -0.282095, - -0.441958, - -0.147319, - -0.345494, - -0.441958, - -0.147319, - -0.282095, - 0.441958, - 0.282095, - 0.282095, - 0.147319, - 0.441958, - 0.345494, - 0.147319, - 0.441958, - 0.488603, - 0.282095, - -4.23108e-17, - 0.441958, - 0.345494, - 0.147319, - 0.147319, - -4.23108e-17, - -0.147319, - 0.345494, - 0.282095, - -5.98366e-17, - -0.147319}; - - using delmem_var_op = base_device::memory::delete_memory_op; - using resmem_var_op = base_device::memory::resize_memory_op; - using syncmem_var_h2d_op - = base_device::memory::synchronize_memory_op; - using syncmem_var_d2h_op - = base_device::memory::synchronize_memory_op; - - void SetUp() override - { - } - void TearDown() override { - } -}; - -TEST_F(TestModuleBaseMathMultiDevice, cal_ylm_real_op_cpu) -{ - std::vector p((lmax + 1) * (lmax + 1) * ng, 0.0); - std::vector ylm(expected_ylm.size(), 0.0); - ModuleBase::cal_ylm_real_op()(cpu_ctx, - ng, - lmax, - SQRT2, - PI, - PI_HALF, - FOUR_PI, - SQRT_INVERSE_FOUR_PI, - g.data(), - p.data(), - ylm.data()); - - for (int ii = 0; ii < ylm.size(); ii++) { - EXPECT_LT(fabs(ylm[ii] - expected_ylm[ii]), 6e-5); - } -} - -#if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM -TEST_F(TestModuleBaseMathMultiDevice, cal_ylm_real_op_gpu) -{ - std::vector p((lmax + 1) * (lmax + 1) * ng, 0.0); - std::vector ylm(expected_ylm.size(), 0.0); - double * d_ylm = nullptr, * d_g = nullptr, * d_p = nullptr; - - resmem_var_op()(d_g, g.size()); - resmem_var_op()(d_p, p.size()); - resmem_var_op()(d_ylm, ylm.size()); - - syncmem_var_h2d_op()(d_g, g.data(), g.size()); - syncmem_var_h2d_op()(d_p, p.data(), p.size()); - syncmem_var_h2d_op()(d_ylm, ylm.data(), ylm.size()); - - ModuleBase::cal_ylm_real_op()(gpu_ctx, - ng, - lmax, - SQRT2, - PI, - PI_HALF, - FOUR_PI, - SQRT_INVERSE_FOUR_PI, - d_g, - d_p, - d_ylm); - - syncmem_var_d2h_op()(ylm.data(), d_ylm, ylm.size()); - - for (int ii = 0; ii < ylm.size(); ii++) { - EXPECT_LT(fabs(ylm[ii] - expected_ylm[ii]), 6e-5); - } - - delmem_var_op()(d_g); - delmem_var_op()(d_p); - delmem_var_op()(d_ylm); -} - -#endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM \ No newline at end of file diff --git a/source/module_base/math_ylmreal.cpp b/source/module_base/math_ylmreal.cpp deleted file mode 100644 index 69c79dc089..0000000000 --- a/source/module_base/math_ylmreal.cpp +++ /dev/null @@ -1,721 +0,0 @@ -#include "math_ylmreal.h" - -#include "constants.h" -#include "module_base/kernels/math_ylm_op.h" -#include "module_base/libm/libm.h" -#include "module_base/module_device/memory_op.h" -#include "module_base/array_pool.h" -#include "realarray.h" -#include "timer.h" -#include "tool_quit.h" -#include "ylm.h" - -#include -#include - -namespace ModuleBase -{ - -YlmReal::YlmReal(){} -YlmReal::~YlmReal(){} - -void YlmReal::rlylm -( - const int lmax, - const double& x, - const double& y, - const double& z, // g_cartesian_vec(x,y,z) - double* rly // output -) -{ - ModuleBase::timer::tick("YlmReal","rlylm"); - - assert(lmax >= 0); - - //get xy_dependence - assert(lmax <= 19); - - double Am[20]; - double Bm[20]; - - // mohan add 2021-05-07 - for(int i=0; i<20; ++i) - { - Am[i]=0.0; - Bm[i]=0.0; - } - - //ZEROS(Am, 20); - //ZEROS(Bm, 20); - - double x2, x3, x4, x5; - double y2, y3, y4, y5; - - x2 = x * x; - x3 = x2 * x; - x4 = x3 * x; - x5 = x4 * x; - - y2 = y * y; - y3 = y2 * y; - y4 = y3 * y; - y5 = y4 * y; - - //x-y dependence - //Am - //Bm - for(int im = 0; im < lmax+1; im++) - { - if(im == 0) - { - Am[0] = 1.0; - Bm[0] = 0.0; - } - else if(im == 1) - { - Am[1] = x; - Bm[1] = y; - } - else if(im == 2) - { - Am[2] = x2- y2; - Bm[2] = 2.0 * x * y; - } - else if(im == 3) - { - Am[3] = x3 - 3.0 * x * y2; - Bm[3] = 3.0 * x2 * y - y3; - } - else if(im == 4) - { - Am[4] = x4 - 6.0 * x2 * y2 + y4; - Bm[4] = 4.0 * (x3 * y - x * y3); - } - else if(im == 5) - { - Am[5] = x5 - 10.0 * x3 * y2 + 5.0 * x * y4; - Bm[5] = 5.0 * x4 * y - 10.0 * x2 * y3 + y5; - } - else - { - for(int ip = 0; ip <= im; ip++) - { - double aux = Fact(im) / Fact(ip) / Fact(im - ip); - Am[im] += aux * pow(x, ip) * pow(y, im-ip) * cos( (im-ip) * ModuleBase::PI / 2.0 ); - Bm[im] += aux * pow(x, ip) * pow(y, im-ip) * sin( (im-ip) * ModuleBase::PI / 2.0 ); - } - } - } - - //z dependence - double zdep[20][20]; - - for(int il = 0; il < 20; il++) - { - for(int jl=0; jl < 20; jl++) - { - zdep[il][jl]=0.0; // mohan add 2021-05-07 - } -// ZEROS(zdep[il], 20); - } - - double z2 = z * z; - double z3 = z2 * z; - double z4 = z3 * z; - //double z5 = z4 * z; - - double r = sqrt(x*x + y*y + z*z); - double r2 = r * r; - double r3 = r2 * r; - double r4 = r3 * r; - - for(int il = 0; il < lmax + 1; il++) - { - if(il == 0) - { - zdep[0][0] = 1.0; - } - else if(il == 1) - { - zdep[1][0] = z; - zdep[1][1] = 1.0; - } - else if(il == 2) - { - zdep[2][0] = 0.5 * (3.0 * z2 - r2); - zdep[2][1] = sqrt(3.0) * z; - zdep[2][2] = sqrt(3.0) * 0.5; - } - else if(il == 3) - { - zdep[3][0] = 2.5 * z3 - 1.5 * z * r2; - zdep[3][1] = 0.25 * sqrt(6.0) * (5.0 * z2 - r2); - zdep[3][2] = 0.5 * sqrt(15.0) * z; - zdep[3][3] = 0.25 * sqrt(10.0); - } - else if(il == 4) - { - zdep[4][0] = 0.125 * (35.0 * z4 - 30.0 * r2 * z2 + 3.0 * r4); - zdep[4][1] = sqrt(10.0) * 0.25 * z * (7.0 * z2 - 3.0 * r2); - zdep[4][2] = sqrt(5.0) * 0.25 * (7.0 * z2 - r2); - zdep[4][3] = sqrt(70.0) * 0.25 * z; - zdep[4][4] = sqrt(35.0) * 0.125; - } - else if(il == 5) - { - zdep[5][0] = 0.125 * z *( 63.0 * z4 - 70.0 * z2 * r2 + 15.0 * r4); - zdep[5][1] = 0.125 * sqrt(15.0) * (21.0 * z4 - 14.0 * z2 * r2 + r4); - zdep[5][2] = 0.25 * sqrt(105.0) * z * (3.0 * z2 - r2); - zdep[5][3] = 0.0625 * sqrt(70.0) * (9.0 * z2 - r2); - zdep[5][4] = 0.375 * sqrt(35.0) * z; - zdep[5][5] = 0.1875 * sqrt(14.0); - } - else - { - for(int im = 0; im <= il; im++) - { - int kmax = static_cast( (il - im) / 2 ); - for(int ik = 0; ik <= kmax; ik++) - { - int twok = 2 * ik; - - double gamma; - double aux0, aux1, aux2, aux3; - - aux0 = pow(-1.0, ik) * pow(2.0, -il); - aux1 = Fact(il) / Fact(ik) / Fact(il-ik); - aux2 = Fact(2*il - twok) / Fact(il) / Fact(il - twok); - aux3 = Fact(il - twok) / Fact(il - twok - im); - - gamma = aux0 * aux1 * aux2 * aux3; - - assert(il - twok - im >= 0); - zdep[il][im] += pow(r, twok) * pow(z, il-twok-im) * gamma; - } - - if(im >= 1) - { - zdep[il][im] *= sqrt(2 * Fact(il - im) / Fact(il + im)); - - } - } - } - } - - //calc - int ic = 0; - - //special case for r=0 - double rpi = r; - const double tiny = 1.0E-10; - if (rpi < tiny) rpi += tiny; - - for(int il = 0; il <= lmax; il++) - { - double fac = sqrt( (2.0 * il + 1.0) / ModuleBase::FOUR_PI ); - - double rl = pow(rpi, il); - - //m=0 - rly[ic] = Am[0] * zdep[il][0] * fac / rl; - - ic++; - - //m ! = 0 - for(int im = 1; im <= il; im++) - { - //m>0 - rly[ic] = Am[im] * zdep[il][im] * pow(-1.0, im) * fac / rl; - - ic++; - - //m<0 - rly[ic] = Bm[im] * zdep[il][im] * pow(-1.0, im) * fac / rl; - - ic++; - } - } - - ModuleBase::timer::tick("YlmReal","rlylm"); - return; -} - - -void YlmReal::Ylm_Real2 -( - const int lmax2, // lmax2 = (lmax+1)^2 - const int ng, // - const ModuleBase::Vector3 *g, // g_cartesian_vec(x,y,z) - matrix &ylm // output -) -{ - if (ng<1 || lmax2<1) - { - ModuleBase::WARNING("YLM_REAL","ng<1 or lmax2<1"); - return; - } - -//---------------------------------------------------------- -// EXPLAIN : find out lmax -//---------------------------------------------------------- - bool out_of_range = true; - int lmax = 0; - for (int l= 0; l< 30; l++) - { - if ((l+1)*(l+1) == lmax2) - { - lmax = l; - out_of_range = false; - break; - } - } - if (out_of_range) - { - ModuleBase::WARNING_QUIT("YLM_REAL","l>30 or l<0"); - } - -//---------------------------------------------------------- -// Start CALC -//---------------------------------------------------------- - std::vector rly(lmax2); - - for (int ig = 0; ig < ng; ig++) - { - rlylm (lmax, g[ig].x, g[ig].y, g[ig].z, rly.data()); - - for (int lm = 0; lm < lmax2; lm++) - { - ylm (lm, ig) = rly[lm]; - } - } - - return; -} - -//========================================================== -// MEMBER FUNCTION : -// NAME : YLM_REAL(Real spherical harmonics ylm(G) up to l=lmax -// Use Numerical recursive algorithm as given in Numerical Recipes -//========================================================== -// from ylmr2.f90 - -template -void YlmReal::Ylm_Real(Device * ctx, const int lmax2, const int ng, const FPTYPE *g, FPTYPE * ylm) -{ - using resmem_var_op = base_device::memory::resize_memory_op; - using delmem_var_op = base_device::memory::delete_memory_op; - using cal_ylm_real_op = ModuleBase::cal_ylm_real_op; - - if (ng < 1 || lmax2 < 1) { - ModuleBase::WARNING("YLM_REAL","ng<1 or lmax2<1"); - return; - } - -//---------------------------------------------------------- -// EXPLAIN : find out lmax -//---------------------------------------------------------- - bool out_of_range = true; - int lmax = 0; - for (int l = 0; l < 30; l++) { - if ((l + 1) * (l + 1) == lmax2) { - lmax = l; - out_of_range = false; - break; - } - } - if (out_of_range) { - ModuleBase::WARNING_QUIT("YLM_REAL","l>30 or l<0"); - } - FPTYPE * p = nullptr, * phi = nullptr, * cost = nullptr; - resmem_var_op()(p, (lmax + 1) * (lmax + 1) * ng, "YlmReal::Ylm_Real"); - - cal_ylm_real_op()( - ctx, - ng, - lmax, - ModuleBase::SQRT2, - ModuleBase::PI, - ModuleBase::PI_HALF, - ModuleBase::FOUR_PI, - ModuleBase::SQRT_INVERSE_FOUR_PI, - g, - p, - ylm); - - delmem_var_op()(p); - delmem_var_op()(phi); - delmem_var_op()(cost); -} // end subroutine ylmr2 - -//========================================================== -// MEMBER FUNCTION : -// NAME : YLM_REAL(Real spherical harmonics ylm(G) up to l=lmax -// Use Numerical recursive algorithm as given in Numerical Recipes -//========================================================== -// from ylmr2.f90 -void YlmReal::Ylm_Real -( - const int lmax2, // lmax2 = (lmax+1)^2 - const int ng, // - const ModuleBase::Vector3 *g, // g_cartesian_vec(x,y,z) - matrix &ylm // output -) -{ - - if (ng<1 || lmax2<1) - { - ModuleBase::WARNING("YLM_REAL","ng<1 or lmax2<1"); - return; - } - -//---------------------------------------------------------- -// EXPLAIN : find out lmax -//---------------------------------------------------------- - bool out_of_range = true; - int lmax = 0; - for (int l= 0; l< 30; l++) - { - if ((l+1)*(l+1) == lmax2) - { - lmax = l; - out_of_range = false; - break; - } - } - if (out_of_range) - { - ModuleBase::WARNING_QUIT("YLM_REAL","l>30 or l<0"); - } - -//---------------------------------------------------------- -// EXPLAIN : if lmax = 1,only use Y00 , output result. -//---------------------------------------------------------- - if (lmax == 0) - { -#ifdef _OPENMP -#pragma omp parallel for -#endif - for (int i=0;i cost(ng); - std::vector phi(ng); - -#ifdef _OPENMP -#pragma omp parallel for -#endif - for (int ig = 0;ig < ng;ig++) - { - const double gmod = g[ig].norm(); - if (gmod < 1.0e-9) - { - cost[ig] = 0.0; - } - else - { - cost[ig] = g[ig].z / gmod; - }// endif - - // beware the arc tan, it is defined modulo pi - if (g[ig].x > 1.0e-9) - { - phi[ig] = atan(g[ig].y / g[ig].x); - } - else if (g[ig].x < -1.e-9) - { - phi[ig] = atan(g[ig].y / g[ig].x) + ModuleBase::PI; - } - else - { - phi[ig] = ModuleBase::PI_HALF * ((g[ig].y >= 0.0) ? 1.0 : -1.0); //HLX: modified on 10/13/2006 - } // end if - } // enddo - -//========================================================== -// NAME : p(Legendre Polynomials) (0 <= m <= l) -//========================================================== - ModuleBase::realArray p(lmax+1,lmax+1,ng); - int lm = -1; - for (int l=0; l<=lmax; l++) - { - const double c = sqrt((2*l+1) / ModuleBase::FOUR_PI); - if (l == 0) - { -#ifdef _OPENMP -#pragma omp parallel for -#endif - for (int i=0;i(l) / 2.0) ;//mohan modify 2007-10-13 - if (l%2 == 1) - { - p(l, l, i) = -p(l, l, i); - } - } - } // end if - - // Y_lm, m = 0 - ++lm; -#ifdef _OPENMP -#pragma omp parallel for -#endif - for (int i=0;i 0 - const double same = c * sqrt - ( - static_cast(Fact(l - m)) / - static_cast(Fact(l + m)) - ) - *ModuleBase::SQRT2; - - ++lm; -#ifdef _OPENMP -#pragma omp parallel for -#endif - for (int i=0;i *g, - matrix &ylm, - matrix &dylmx, - matrix &dylmy, - matrix &dylmz - ) -{ - ModuleBase::Ylm::set_coefficients(); - const int lmax = int(sqrt( double(lmax2) ) + 0.1) - 1; - std::vector tmpylm((lmax2+1) * (lmax2+1)); - Array_Pool tmpgylm((lmax2+1) * (lmax2+1), 3); - - for (int ig = 0;ig < ng;ig++) - { - ModuleBase::Vector3 gg = g[ig]; - double gmod = gg.norm(); - if (gmod < 1.0e-9) - { - for(int lm = 0 ; lm < lmax2 ; ++lm) - { - if(lm == 0) - ylm(lm,ig) = ModuleBase::SQRT_INVERSE_FOUR_PI; - else - ylm(lm,ig) = 0; - dylmx(lm,ig) = dylmy(lm,ig) = dylmz(lm,ig) = 0; - } - } - else - { - Ylm::grad_rl_sph_harm(lmax2, gg.x, gg.y, gg.z, tmpylm.data(),tmpgylm.get_ptr_2D()); - int lm = 0; - for(int il = 0 ; il <= lmax ; ++il) - { - for(int im = 0; im < 2*il+1; ++im, ++lm) - { - double rlylm = tmpylm[lm]; - ylm(lm,ig) = rlylm / pow(gmod,il); - dylmx(lm,ig) = ( tmpgylm[lm][0] - il*rlylm * gg.x / pow(gmod,2) )/pow(gmod,il); - dylmy(lm,ig) = ( tmpgylm[lm][1] - il*rlylm * gg.y / pow(gmod,2) )/pow(gmod,il); - dylmz(lm,ig) = ( tmpgylm[lm][2] - il*rlylm * gg.z / pow(gmod,2) )/pow(gmod,il); - } - } - - } - } - return; -} - - -//========================================================== -// MEMBER FUNCTION : -// NAME : Fact ( n! ) -// NAME : Semi_Fact ( n!! ) -//========================================================== -long double YlmReal::Fact(const int n) -{ - long double f = 1; - for (int i=n; i>1; i--) - { - f *= i; - } - return f; -} - -int YlmReal::Semi_Fact(const int n) -{ - int semif = 1; - for (int i=n; i>2; i -= 2) - { - semif *= i; - } - return semif; -} - -template void YlmReal::Ylm_Real(base_device::DEVICE_CPU*, - int, - int, - const float*, - float*); -template void YlmReal::Ylm_Real(base_device::DEVICE_CPU*, - int, - int, - const double*, - double*); -#if ((defined __CUDA) || (defined __ROCM)) -template void YlmReal::Ylm_Real(base_device::DEVICE_GPU*, - int, - int, - const float*, - float*); -template void YlmReal::Ylm_Real(base_device::DEVICE_GPU*, - int, - int, - const double*, - double*); -#endif -} // namespace ModuleBase diff --git a/source/module_base/memory.cpp b/source/module_base/memory.cpp deleted file mode 100644 index 3f8fe287af..0000000000 --- a/source/module_base/memory.cpp +++ /dev/null @@ -1,502 +0,0 @@ -//========================================================== -// AUTHOR : mohan -// DATE : 2008-11-18 -//========================================================== -#include -#include "memory.h" -#include "global_variable.h" -#include "module_base/parallel_reduce.h" - -namespace ModuleBase -{ -// 8 bit = 1 Byte -// 1024 Byte = 1 KB -// 1024 KB = 1 MB -// 1024 MB = 1 GB -double Memory::total = 0.0; -int Memory::complex_matrix_memory = 2*sizeof(double); // 16 byte -int Memory::double_memory = sizeof(double); // 8 byte -int Memory::int_memory = sizeof(int); // 4.0 Byte -int Memory::bool_memory = sizeof(bool); // 1.0 Byte -int Memory::float_memory = sizeof(float); // 4.0 Byte -int Memory::short_memory = sizeof(short); // 2.0 Byte - -int Memory::n_memory = 1000; -int Memory::n_now = 0; -bool Memory::init_flag = false; - -#if defined(__CUDA) || defined(__ROCM) - -double Memory::total_gpu = 0.0; -int Memory::n_now_gpu = 0; -bool Memory::init_flag_gpu = false; - -std::string *Memory::name_gpu; -std::string *Memory::class_name_gpu; -double *Memory::consume_gpu; - -#endif - - -std::string *Memory::name; -std::string *Memory::class_name; -double *Memory::consume; - -Memory::Memory() -{ -} - -Memory::~Memory() -{ -} - -double Memory::calculate_mem(const long &n_in,const std::string &type) -{ - double n = static_cast(n_in); - double mem = 0.0; - - double factor = 1.0/1024.0/1024.0; - double complex_matrix_mem = complex_matrix_memory * factor; - double double_mem = double_memory * factor; - double int_mem = int_memory * factor; - double bool_mem = bool_memory * factor; - double float_mem = float_memory * factor; - double short_mem = short_memory * factor; - - if(type=="ModuleBase::ComplexMatrix" || type=="complexmatrix" || type=="cdouble") - { - mem = complex_matrix_mem; - } - else if(type=="real" || type=="double") - { - mem = double_mem; - } - else if(type=="int") - { - mem = int_mem; - } - else if(type=="bool") - { - mem = bool_mem; - } - else if(type=="short") - { - mem = short_mem; - } - else if(type=="float") - { - mem = float_mem; - } - else if(type=="AtomLink") - { - mem = int_mem * 2 + double_mem * 3; - } - else if(type=="ModuleBase::Vector3") - { - mem = 3 * double_mem; - } - else - { - std::cout<<"not this type in memory storage : "<= n_memory) - { - std::cout<<" Error! Too many memories required."; - return 0.0; - } - - consume[find] = Memory::calculate_mem(n_in,type); - - if(consume[find] > 5) - { - print(find); - } - return consume[find]; -} - -void Memory::record -( - const std::string &name_in, - const size_t &n_in, - const bool accumulate -) -{ - if(!Memory::init_flag) - { - name = new std::string[n_memory]; - class_name = new std::string[n_memory]; - consume = new double[n_memory]; - for(int i=0;i= n_memory) - { - std::cout<<" Error! Too many memories has been recorded."; - return; - } - - const double factor = 1.0/1024.0/1024.0; - double size_mb = n_in * factor; - - if(accumulate) - { - consume[find] += size_mb; - Memory::total += size_mb; - } - else - { - if(consume[find] < size_mb) - { - Memory::total += size_mb - consume[find]; - consume[find] = size_mb; - if(consume[find] > 5) - { - print(find); - } - } - } - - return; -} - -#if defined(__CUDA) || defined(__ROCM) - -double Memory::record_gpu -( - const std::string &class_name_in, - const std::string &name_in, - const long &n_in, - const std::string &type, - const bool accumulate -) -{ - if(!Memory::init_flag_gpu) - { - name_gpu = new std::string[n_memory]; - class_name_gpu = new std::string[n_memory]; - consume_gpu = new double[n_memory]; - for(int i=0;i= n_memory) - { - std::cout<<" Error! Too many gpu memories required."; - return 0.0; - } - - consume_gpu[find] = Memory::calculate_mem(n_in,type); - - if(consume_gpu[find] > 5) - { - print(find); - } - return consume_gpu[find]; -} - -void Memory::record_gpu -( - const std::string &name_in, - const size_t &n_in, - const bool accumulate -) -{ - if(!Memory::init_flag_gpu) - { - name_gpu = new std::string[n_memory]; - class_name_gpu = new std::string[n_memory]; - consume_gpu = new double[n_memory]; - for(int i=0;i= n_memory) - { - std::cout<<" Error! Too many gpu memories has been recorded."; - return; - } - - const double factor = 1.0/1024.0/1024.0; - double size_mb = n_in * factor; - - if(accumulate) - { - consume_gpu[find] += size_mb; - Memory::total_gpu += size_mb; - } - else - { - if(consume_gpu[find] < size_mb) - { - Memory::total_gpu += size_mb - consume_gpu[find]; - consume_gpu[find] = size_mb; - if(consume_gpu[find] > 5) - { - print(find); - } - } - } - return; -} - -#endif - -void Memory::print(const int find) -{ - GlobalV::ofs_running <<"\n Warning_Memory_Consuming allocated: " - <<" "<0); - - bool *print_flag = new bool[n_memory]; - - for(int i=0; i0); - - bool *print_flag_gpu = new bool[n_memory]; - - for(int i=0; i -#include -#include -#ifdef __MPI -#include "mpi.h" -#endif - -#if defined(__CUDA) -#include -#endif - -#if defined(__ROCM) -#include -#endif - -namespace base_device { - -// for device -template <> -base_device::AbacusDevice_t -get_device_type(const base_device::DEVICE_CPU *dev) { - return base_device::CpuDevice; -} -template <> -base_device::AbacusDevice_t -get_device_type(const base_device::DEVICE_GPU *dev) { - return base_device::GpuDevice; -} - -// for precision -template <> std::string get_current_precision(const float *var) { - return "single"; -} -template <> std::string get_current_precision(const double *var) { - return "double"; -} -template <> std::string get_current_precision(const std::complex *var) { - return "single"; -} -template <> std::string get_current_precision(const std::complex *var) { - return "double"; -} - -namespace information { - -#if __MPI -int stringCmp(const void *a, const void *b) { - char *m = (char *)a; - char *n = (char *)b; - int i, sum = 0; - - for (i = 0; i < MPI_MAX_PROCESSOR_NAME; i++) { - if (m[i] == n[i]) { - continue; - } else { - sum = m[i] - n[i]; - break; - } - } - return sum; -} -int get_node_rank() { - char host_name[MPI_MAX_PROCESSOR_NAME]; - memset(host_name, '\0', sizeof(char) * MPI_MAX_PROCESSOR_NAME); - char(*host_names)[MPI_MAX_PROCESSOR_NAME]; - int n, namelen, color, rank, nprocs, myrank; - size_t bytes; - MPI_Comm nodeComm; - - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Get_processor_name(host_name, &namelen); - - bytes = nprocs * sizeof(char[MPI_MAX_PROCESSOR_NAME]); - host_names = (char(*)[MPI_MAX_PROCESSOR_NAME])malloc(bytes); - for (int ii = 0; ii < nprocs; ii++) { - memset(host_names[ii], '\0', sizeof(char) * MPI_MAX_PROCESSOR_NAME); - } - - strcpy(host_names[rank], host_name); - - for (n = 0; n < nprocs; n++) { - MPI_Bcast(&(host_names[n]), MPI_MAX_PROCESSOR_NAME, MPI_CHAR, n, - MPI_COMM_WORLD); - } - qsort(host_names, nprocs, sizeof(char[MPI_MAX_PROCESSOR_NAME]), stringCmp); - - color = 0; - for (n = 0; n < nprocs - 1; n++) { - if (strcmp(host_name, host_names[n]) == 0) { - break; - } - if (strcmp(host_names[n], host_names[n + 1])) { - color++; - } - } - - MPI_Comm_split(MPI_COMM_WORLD, color, 0, &nodeComm); - MPI_Comm_rank(nodeComm, &myrank); - - MPI_Barrier(MPI_COMM_WORLD); - int looprank = myrank; - // printf (" Assigning device %d to process on node %s rank %d, - // OK\n",looprank, host_name, rank ); - free(host_names); - return looprank; -} - -int get_node_rank_with_mpi_shared(const MPI_Comm mpi_comm) { - // 20240530 zhanghaochong - // The main difference between this function and the above is that it does not - // use hostname, but uses MPI's built-in function to achieve similar - // functions. - MPI_Comm localComm; - int localMpiRank; - MPI_Comm_split_type(mpi_comm, MPI_COMM_TYPE_SHARED, 0, MPI_INFO_NULL, - &localComm); - MPI_Comm_rank(localComm, &localMpiRank); - MPI_Comm_free(&localComm); - return localMpiRank; -} -#if defined(__CUDA) - -int set_device_by_rank(const MPI_Comm mpi_comm) { - int localMpiRank = get_node_rank_with_mpi_shared(mpi_comm); - int device_num = -1; - - cudaGetDeviceCount(&device_num); - if (device_num <= 0) { - ModuleBase::WARNING_QUIT("device", "can not find gpu device!"); - } - // warning: this is not a good way to assign devices, user should assign One - // process per GPU - int local_device_id = localMpiRank % device_num; - int ret = cudaSetDevice(local_device_id); - if (ret != cudaSuccess) { - ModuleBase::WARNING_QUIT("device", "cudaSetDevice failed!"); - } - return local_device_id; -} -#endif - -#endif - -std::string get_device_flag(const std::string &device, - const std::string &basis_type) { -if (device == "cpu") { - return "cpu"; // no extra checks required -} -std::string error_message; -if (device != "auto" and device != "gpu") -{ - error_message += "Parameter \"device\" can only be set to \"cpu\" or \"gpu\"!"; - ModuleBase::WARNING_QUIT("device", error_message); -} - -// Get available GPU count -int device_count = -1; -#if ((defined __CUDA) || (defined __ROCM)) -#if defined(__CUDA) -cudaGetDeviceCount(&device_count); -#elif defined(__ROCM) -hipGetDeviceCount(&device_count); -/***auto start_time = std::chrono::high_resolution_clock::now(); -std::cout << "Starting hipGetDeviceCount.." << std::endl; -auto end_time = std::chrono::high_resolution_clock::now(); -auto duration = std::chrono::duration_cast>(end_time - start_time); -std::cout << "hipGetDeviceCount took " << duration.count() << "seconds" << std::endl;***/ -#endif -if (device_count <= 0) -{ - error_message += "Cannot find GPU on this computer!\n"; -} -#else // CPU only -error_message += "ABACUS is built with CPU support only. Please rebuild with GPU support.\n"; -#endif - -if (basis_type == "lcao_in_pw") { - error_message += - "The GPU currently does not support the basis type \"lcao_in_pw\"!"; -} -if(error_message.empty()) -{ - return "gpu"; // possibly automatically set to GPU -} -else if (device == "gpu") -{ - ModuleBase::WARNING_QUIT("device", error_message); -} -else { return "cpu"; -} -} - -int get_device_kpar(const int& kpar, const int& bndpar) -{ -#if __MPI && (__CUDA || __ROCM) - int temp_nproc = 0; - int new_kpar = kpar; - MPI_Comm_size(MPI_COMM_WORLD, &temp_nproc); - if (temp_nproc != kpar * bndpar) - { - new_kpar = temp_nproc / bndpar; - ModuleBase::WARNING("Input_conv", "kpar is not compatible with the number of processors, auto set kpar value."); - } - - // get the CPU rank of current node - int node_rank = base_device::information::get_node_rank(); - - int device_num = -1; -#if defined(__CUDA) - cudaGetDeviceCount(&device_num); // get the number of GPU devices of current node - cudaSetDevice(node_rank % device_num); // band the CPU processor to the devices -#elif defined(__ROCM) - hipGetDeviceCount(&device_num); - hipSetDevice(node_rank % device_num); -#endif - return new_kpar; -#endif - return kpar; -} - -std::string get_device_info(std::string device_flag) { - std::string device_info = "Unknown"; - -#if defined(__CUDA) - if (device_flag == "gpu") { - int dev = 0; - cudaDeviceProp deviceProp; - cudaErrcheck(cudaGetDeviceProperties(&deviceProp, dev)); - device_info = deviceProp.name; - } -#elif defined(__ROCM) - if (device_flag == "gpu") { - int dev = 0; - hipDeviceProp_t deviceProp; - hipErrcheck(hipGetDeviceProperties(&deviceProp, dev)); - device_info = deviceProp.name; - } -#endif - if (device_flag == "cpu") { - std::ifstream cpuinfo("/proc/cpuinfo"); - std::string line = "", cpu_name = ""; - - while (std::getline(cpuinfo, line)) { - if (line.find("model name") != std::string::npos) { - // Extract the CPU name from the line - size_t colonPos = line.find(":"); - if (colonPos != std::string::npos) { - cpu_name = line.substr(colonPos + 2); // Skip the colon and space - break; // Stop after the first match - } - } - } - if (cpu_name != "") { - device_info = cpu_name; - } - cpuinfo.close(); - } - return device_info; -} - -#if defined(__CUDA) - -static bool is_init = false; - -template <> -void print_device_info( - const base_device::DEVICE_GPU *ctx, std::ofstream &ofs_device) { - if (is_init) { - return; - } - int deviceCount = 0; - cudaError_t error_id = cudaGetDeviceCount(&deviceCount); - if (error_id != cudaSuccess) { - ofs_device << "cudaGetDeviceCount returned " << static_cast(error_id) - << "\n-> " << cudaGetErrorString(error_id) << std::endl; - ModuleBase::WARNING_QUIT("device", "GPU returned is without cudaSuccess"); - } - // This function call returns 0 if there are no CUDA capable devices. - if (deviceCount == 0) { - ofs_device << "There are no available device(s) that support CUDA\n"; - } else { - ofs_device << "Detected " << deviceCount << " CUDA Capable device(s)\n"; - } - int dev = 0, driverVersion = 0, runtimeVersion = 0; - cudaErrcheck(cudaSetDevice(dev)); - cudaDeviceProp deviceProp; - cudaErrcheck(cudaGetDeviceProperties(&deviceProp, dev)); - ofs_device << "\nDevice " << dev << ":\t " << deviceProp.name << std::endl; - // Console log - cudaErrcheck(cudaDriverGetVersion(&driverVersion)); - cudaErrcheck(cudaRuntimeGetVersion(&runtimeVersion)); - char msg[1024]; - sprintf(msg, - " CUDA Driver Version / Runtime Version %d.%d / %d.%d\n", - driverVersion / 1000, (driverVersion % 100) / 10, - runtimeVersion / 1000, (runtimeVersion % 100) / 10); - ofs_device << msg << std::endl; - sprintf(msg, " CUDA Capability Major/Minor version number: %d.%d\n", - deviceProp.major, deviceProp.minor); - ofs_device << msg << std::endl; - sprintf(msg, - " GPU Max Clock rate: %.0f MHz (%0.2f " - "GHz)\n", - deviceProp.clockRate * 1e-3f, deviceProp.clockRate * 1e-6f); - ofs_device << msg << std::endl; - // This is supported in CUDA 5.0 (runtime API device properties) - sprintf(msg, " Memory Clock rate: %.0f Mhz\n", - deviceProp.memoryClockRate * 1e-3f); - ofs_device << msg << std::endl; - - sprintf(msg, " Memory Bus Width: %d-bit\n", - deviceProp.memoryBusWidth); - ofs_device << msg << std::endl; - sprintf(msg, - " Maximum Texture Dimension Size (x,y,z) 1D=(%d), 2D=(%d, " - "%d), 3D=(%d, %d, %d)\n", - deviceProp.maxTexture1D, deviceProp.maxTexture2D[0], - deviceProp.maxTexture2D[1], deviceProp.maxTexture3D[0], - deviceProp.maxTexture3D[1], deviceProp.maxTexture3D[2]); - ofs_device << msg << std::endl; - - sprintf( - msg, - " Maximum Layered 1D Texture Size, (num) layers 1D=(%d), %d layers\n", - deviceProp.maxTexture1DLayered[0], deviceProp.maxTexture1DLayered[1]); - ofs_device << msg << std::endl; - sprintf(msg, - " Maximum Layered 2D Texture Size, (num) layers 2D=(%d, %d), %d " - "layers\n", - deviceProp.maxTexture2DLayered[0], deviceProp.maxTexture2DLayered[1], - deviceProp.maxTexture2DLayered[2]); - ofs_device << msg << std::endl; - sprintf(msg, " Total amount of constant memory: %zu bytes\n", - deviceProp.totalConstMem); - ofs_device << msg << std::endl; - sprintf(msg, " Total amount of shared memory per block: %zu bytes\n", - deviceProp.sharedMemPerBlock); - ofs_device << msg << std::endl; - sprintf(msg, " Total shared memory per multiprocessor: %zu bytes\n", - deviceProp.sharedMemPerMultiprocessor); - ofs_device << msg << std::endl; - sprintf(msg, " Total number of registers available per block: %d\n", - deviceProp.regsPerBlock); - ofs_device << msg << std::endl; - sprintf(msg, " Warp size: %d\n", - deviceProp.warpSize); - ofs_device << msg << std::endl; - sprintf(msg, " Maximum number of threads per multiprocessor: %d\n", - deviceProp.maxThreadsPerMultiProcessor); - ofs_device << msg << std::endl; - sprintf(msg, " Maximum number of threads per block: %d\n", - deviceProp.maxThreadsPerBlock); - ofs_device << msg << std::endl; - sprintf(msg, " Max dimension size of a thread block (x,y,z): (%d, %d, %d)\n", - deviceProp.maxThreadsDim[0], deviceProp.maxThreadsDim[1], - deviceProp.maxThreadsDim[2]); - ofs_device << msg << std::endl; - sprintf(msg, " Max dimension size of a grid size (x,y,z): (%d, %d, %d)\n", - deviceProp.maxGridSize[0], deviceProp.maxGridSize[1], - deviceProp.maxGridSize[2]); - ofs_device << msg << std::endl; - sprintf(msg, " Maximum memory pitch: %zu bytes\n", - deviceProp.memPitch); - ofs_device << msg << std::endl; - sprintf(msg, " Texture alignment: %zu bytes\n", - deviceProp.textureAlignment); - ofs_device << msg << std::endl; - sprintf(msg, - " Concurrent copy and kernel execution: %s with %d copy " - "engine(s)\n", - (deviceProp.deviceOverlap ? "Yes" : "No"), - deviceProp.asyncEngineCount); - ofs_device << msg << std::endl; - sprintf(msg, " Run time limit on kernels: %s\n", - deviceProp.kernelExecTimeoutEnabled ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, " Integrated GPU sharing Host Memory: %s\n", - deviceProp.integrated ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, " Support host page-locked memory mapping: %s\n", - deviceProp.canMapHostMemory ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, " Alignment requirement for Surfaces: %s\n", - deviceProp.surfaceAlignment ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, " Device has ECC support: %s\n", - deviceProp.ECCEnabled ? "Enabled" : "Disabled"); - ofs_device << msg << std::endl; - sprintf(msg, " Device supports Unified Addressing (UVA): %s\n", - deviceProp.unifiedAddressing ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, " Device supports Managed Memory: %s\n", - deviceProp.managedMemory ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, " Device supports Compute Preemption: %s\n", - deviceProp.computePreemptionSupported ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, " Supports Cooperative Kernel Launch: %s\n", - deviceProp.cooperativeLaunch ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, " Supports MultiDevice Co-op Kernel Launch: %s\n", - deviceProp.cooperativeMultiDeviceLaunch ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, - " Device PCI Domain ID / Bus ID / location ID: %d / %d / %d\n", - deviceProp.pciDomainID, deviceProp.pciBusID, deviceProp.pciDeviceID); - ofs_device << msg << std::endl; - const char *sComputeMode[] = { - "Default (multiple host threads can use ::cudaSetDevice() with device " - "simultaneously)", - "Exclusive (only one host thread in one process is able to use " - "::cudaSetDevice() with this device)", - "Prohibited (no host thread can use ::cudaSetDevice() with this " - "device)", - "Exclusive Process (many threads in one process is able to use " - "::cudaSetDevice() with this device)", - "Unknown", - NULL}; - sprintf(msg, " Compute Mode:\n"); - ofs_device << msg << std::endl; - ofs_device << " " << sComputeMode[deviceProp.computeMode] << std::endl - << std::endl; - - // If there are 2 or more GPUs, query to determine whether RDMA is supported - if (deviceCount >= 2) { - cudaDeviceProp prop[64]; - int gpuid[64]; // we want to find the first two GPUs that can support P2P - int gpu_p2p_count = 0; - - for (int i = 0; i < deviceCount; i++) { - cudaErrcheck(cudaGetDeviceProperties(&prop[i], i)); - - // Only boards based on Fermi or later can support P2P - if (prop[i].major >= 2) { - // This is an array of P2P capable GPUs - gpuid[gpu_p2p_count++] = i; - } - } - - // Show all the combinations of support P2P GPUs - int can_access_peer; - - if (gpu_p2p_count >= 2) { - for (int i = 0; i < gpu_p2p_count; i++) { - for (int j = 0; j < gpu_p2p_count; j++) { - if (gpuid[i] == gpuid[j]) { - continue; - } - cudaErrcheck( - cudaDeviceCanAccessPeer(&can_access_peer, gpuid[i], gpuid[j])); - sprintf(msg, "> Peer access from %s (GPU%d) -> %s (GPU%d) : %s\n", - prop[gpuid[i]].name, gpuid[i], prop[gpuid[j]].name, gpuid[j], - can_access_peer ? "Yes" : "No"); - ofs_device << msg << std::endl; - } - } - } - } - - // csv masterlog info - // ***************************** - // exe and CUDA driver name - std::string sProfileString = "deviceQuery, CUDA Driver = CUDART"; - char cTemp[16]; - - // driver version - sProfileString += ", CUDA Driver Version = "; - - snprintf(cTemp, sizeof(cTemp), "%d.%d", driverVersion / 1000, - (driverVersion % 100) / 10); - sProfileString += cTemp; - - // Runtime version - sProfileString += ", CUDA Runtime Version = "; - snprintf(cTemp, sizeof(cTemp), "%d.%d", runtimeVersion / 1000, - (runtimeVersion % 100) / 10); - sProfileString += cTemp; - - // Device count - sProfileString += ", NumDevs = "; - snprintf(cTemp, sizeof(cTemp), "%d", deviceCount); - sProfileString += cTemp; - sProfileString += "\n"; - - ofs_device << sProfileString.c_str() << std::endl; - is_init = true; - ofs_device << "End of device informations." << std::endl << std::endl; -} - -template <> -void record_device_memory( - const base_device::DEVICE_GPU *ctx, std::ofstream &ofs_device, - std::string str, size_t size) { - ofs_device << "Allocate " << static_cast(size) / 8 / 1024 / 1024 - << " \tMB device memory\t" - << "from " << str << std::endl - << std::endl; -} - -#elif defined(__ROCM) - -static bool is_init = false; - -template <> -void print_device_info( - const base_device::DEVICE_GPU *ctx, std::ofstream &ofs_device) { - if (is_init) { - return; - } - int deviceCount = 0; - hipError_t error_id = hipGetDeviceCount(&deviceCount); - if (error_id != hipSuccess) { - ofs_device << "hipGetDeviceCount returned " << static_cast(error_id) - << "\n-> " << hipGetErrorString(error_id) << std::endl; - ModuleBase::WARNING_QUIT("device", "GPU returned is without hipSuccess"); - } - // This function call returns 0 if there are no CUDA capable devices. - if (deviceCount == 0) { - ofs_device << "There are no available device(s) that support CUDA\n"; - } else { - ofs_device << "Detected " << deviceCount << " CUDA Capable device(s)\n"; - } - int dev = 0, driverVersion = 0, runtimeVersion = 0; - hipErrcheck(hipSetDevice(dev)); - hipDeviceProp_t deviceProp; - hipErrcheck(hipGetDeviceProperties(&deviceProp, dev)); - ofs_device << "\nDevice " << dev << ":\t " << deviceProp.name << std::endl; - // Console log - hipErrcheck(hipDriverGetVersion(&driverVersion)); - hipErrcheck(hipRuntimeGetVersion(&runtimeVersion)); - char msg[1024]; - sprintf(msg, - " CUDA Driver Version / Runtime Version %d.%d / %d.%d\n", - driverVersion / 1000, (driverVersion % 100) / 10, - runtimeVersion / 1000, (runtimeVersion % 100) / 10); - ofs_device << msg << std::endl; - sprintf(msg, " CUDA Capability Major/Minor version number: %d.%d\n", - deviceProp.major, deviceProp.minor); - ofs_device << msg << std::endl; - sprintf(msg, - " GPU Max Clock rate: %.0f MHz (%0.2f " - "GHz)\n", - deviceProp.clockRate * 1e-3f, deviceProp.clockRate * 1e-6f); - ofs_device << msg << std::endl; - // This is supported in CUDA 5.0 (runtime API device properties) - sprintf(msg, " Memory Clock rate: %.0f Mhz\n", - deviceProp.memoryClockRate * 1e-3f); - ofs_device << msg << std::endl; - - sprintf(msg, " Memory Bus Width: %d-bit\n", - deviceProp.memoryBusWidth); - ofs_device << msg << std::endl; - sprintf(msg, - " Maximum Texture Dimension Size (x,y,z) 1D=(%d), 2D=(%d, " - "%d), 3D=(%d, %d, %d)\n", - deviceProp.maxTexture1D, deviceProp.maxTexture2D[0], - deviceProp.maxTexture2D[1], deviceProp.maxTexture3D[0], - deviceProp.maxTexture3D[1], deviceProp.maxTexture3D[2]); - ofs_device << msg << std::endl; - - sprintf(msg, " Total amount of constant memory: %zu bytes\n", - deviceProp.totalConstMem); - ofs_device << msg << std::endl; - sprintf(msg, " Total amount of shared memory per block: %zu bytes\n", - deviceProp.sharedMemPerBlock); - ofs_device << msg << std::endl; - sprintf(msg, " Total number of registers available per block: %d\n", - deviceProp.regsPerBlock); - ofs_device << msg << std::endl; - sprintf(msg, " Warp size: %d\n", - deviceProp.warpSize); - ofs_device << msg << std::endl; - sprintf(msg, " Maximum number of threads per multiprocessor: %d\n", - deviceProp.maxThreadsPerMultiProcessor); - ofs_device << msg << std::endl; - sprintf(msg, " Maximum number of threads per block: %d\n", - deviceProp.maxThreadsPerBlock); - ofs_device << msg << std::endl; - sprintf(msg, " Max dimension size of a thread block (x,y,z): (%d, %d, %d)\n", - deviceProp.maxThreadsDim[0], deviceProp.maxThreadsDim[1], - deviceProp.maxThreadsDim[2]); - ofs_device << msg << std::endl; - sprintf(msg, " Max dimension size of a grid size (x,y,z): (%d, %d, %d)\n", - deviceProp.maxGridSize[0], deviceProp.maxGridSize[1], - deviceProp.maxGridSize[2]); - ofs_device << msg << std::endl; - sprintf(msg, " Maximum memory pitch: %zu bytes\n", - deviceProp.memPitch); - ofs_device << msg << std::endl; - sprintf(msg, " Texture alignment: %zu bytes\n", - deviceProp.textureAlignment); - ofs_device << msg << std::endl; - sprintf(msg, " Run time limit on kernels: %s\n", - deviceProp.kernelExecTimeoutEnabled ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, " Integrated GPU sharing Host Memory: %s\n", - deviceProp.integrated ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, " Support host page-locked memory mapping: %s\n", - deviceProp.canMapHostMemory ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, " Device has ECC support: %s\n", - deviceProp.ECCEnabled ? "Enabled" : "Disabled"); - ofs_device << msg << std::endl; - sprintf(msg, " Device supports Managed Memory: %s\n", - deviceProp.managedMemory ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, " Supports Cooperative Kernel Launch: %s\n", - deviceProp.cooperativeLaunch ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, " Supports MultiDevice Co-op Kernel Launch: %s\n", - deviceProp.cooperativeMultiDeviceLaunch ? "Yes" : "No"); - ofs_device << msg << std::endl; - sprintf(msg, - " Device PCI Domain ID / Bus ID / location ID: %d / %d / %d\n", - deviceProp.pciDomainID, deviceProp.pciBusID, deviceProp.pciDeviceID); - ofs_device << msg << std::endl; - const char *sComputeMode[] = { - "Default (multiple host threads can use ::hipSetDevice() with device " - "simultaneously)", - "Exclusive (only one host thread in one process is able to use " - "::hipSetDevice() with this device)", - "Prohibited (no host thread can use ::hipSetDevice() with this " - "device)", - "Exclusive Process (many threads in one process is able to use " - "::hipSetDevice() with this device)", - "Unknown", - NULL}; - sprintf(msg, " Compute Mode:\n"); - ofs_device << msg << std::endl; - ofs_device << " " << sComputeMode[deviceProp.computeMode] << std::endl - << std::endl; - - // If there are 2 or more GPUs, query to determine whether RDMA is supported - if (deviceCount >= 2) { - hipDeviceProp_t prop[64]; - int gpuid[64]; // we want to find the first two GPUs that can support P2P - int gpu_p2p_count = 0; - - for (int i = 0; i < deviceCount; i++) { - hipErrcheck(hipGetDeviceProperties(&prop[i], i)); - - // Only boards based on Fermi or later can support P2P - if (prop[i].major >= 2) { - // This is an array of P2P capable GPUs - gpuid[gpu_p2p_count++] = i; - } - } - - // Show all the combinations of support P2P GPUs - int can_access_peer; - - if (gpu_p2p_count >= 2) { - for (int i = 0; i < gpu_p2p_count; i++) { - for (int j = 0; j < gpu_p2p_count; j++) { - if (gpuid[i] == gpuid[j]) { - continue; - } - hipErrcheck( - hipDeviceCanAccessPeer(&can_access_peer, gpuid[i], gpuid[j])); - sprintf(msg, "> Peer access from %s (GPU%d) -> %s (GPU%d) : %s\n", - prop[gpuid[i]].name, gpuid[i], prop[gpuid[j]].name, gpuid[j], - can_access_peer ? "Yes" : "No"); - ofs_device << msg << std::endl; - } - } - } - } - - // csv masterlog info - // ***************************** - // exe and CUDA driver name - std::string sProfileString = "deviceQuery, CUDA Driver = CUDART"; - char cTemp[16]; - - // driver version - sProfileString += ", CUDA Driver Version = "; - - snprintf(cTemp, sizeof(cTemp), "%d.%d", driverVersion / 1000, - (driverVersion % 100) / 10); - sProfileString += cTemp; - - // Runtime version - sProfileString += ", CUDA Runtime Version = "; - snprintf(cTemp, sizeof(cTemp), "%d.%d", runtimeVersion / 1000, - (runtimeVersion % 100) / 10); - sProfileString += cTemp; - - // Device count - sProfileString += ", NumDevs = "; - snprintf(cTemp, sizeof(cTemp), "%d", deviceCount); - sProfileString += cTemp; - sProfileString += "\n"; - - ofs_device << sProfileString.c_str() << std::endl; - is_init = true; - ofs_device << "End of device informations." << std::endl << std::endl; -} - -template <> -void record_device_memory( - const base_device::DEVICE_GPU *ctx, std::ofstream &ofs_device, - std::string str, size_t size) { - ofs_device << "Allocate " << static_cast(size) / 8 / 1024 / 1024 - << " \tMB device memory\t" - << "from " << str << std::endl - << std::endl; -} - -#endif - -} // end of namespace information -} // end of namespace base_device diff --git a/source/module_base/test/abfs-vector3_order_test.cpp b/source/module_base/test/abfs-vector3_order_test.cpp deleted file mode 100644 index 713fb38609..0000000000 --- a/source/module_base/test/abfs-vector3_order_test.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include "module_base/abfs-vector3_order.h" -#include "module_base/vector3.h" -#include "gtest/gtest.h" -#include "module_ri/abfs.h" - -/************************************************ - * unit test of functions in class Abfs::vector3_order - ***********************************************/ - -/** - * - Tested Function - * - Two constructor functions of Vector3_Order - * - overloaded operator of < - */ - -TEST(AbfsVector3Order,Vector3Order) -{ - ModuleBase::Vector3 vd31 (10.,10.,10.); - Abfs::Vector3_Order vdo31(vd31); - Abfs::Vector3_Order vdo32(10.0,10.0,10.0); - EXPECT_FALSE(vdo31 vi31 (2,2,2); - Abfs::Vector3_Order vio31(vi31); - Abfs::Vector3_Order vio32(2,2,2); - EXPECT_FALSE(vio31 -#include - -#ifdef __MPI -#include "mpi.h" -#endif - -/************************************************ - * unit test of functions in global_file.cpp - ***********************************************/ - -/** - * - Tested Function - * - mkdiratom - * - generate atom dir for each type of atom - * - openlog - * - Open the out file with the name *.log - */ - -class GlobalFile : public testing::Test -{ - -}; - -TEST_F(GlobalFile,mkdirout) -{ - std::string output; - testing::internal::CaptureStdout(); - ModuleBase::Global_File::make_dir_out("Si","m",false,0,true,true); - output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output,testing::HasSubstr("MAKE THE DIR")); - GlobalV::ofs_warning.close(); - EXPECT_TRUE(GlobalV::ofs_running.is_open()); - GlobalV::ofs_running.close(); - std::string dd = "OUT.Si/running_m_1.log"; - remove(dd.c_str()); - - testing::internal::CaptureStdout(); - ModuleBase::Global_File::make_dir_out("Si","md",false,0,true,false); - output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output,testing::HasSubstr("MAKE THE STRU DIR")); - EXPECT_TRUE(GlobalV::ofs_running.is_open()); - GlobalV::ofs_running.close(); - GlobalV::ofs_warning.close(); - std::string bb = "OUT.Si/running_md.log"; - remove(bb.c_str()); - - testing::internal::CaptureStdout(); - ModuleBase::Global_File::make_dir_out("Si","md",true,0,true,true); - output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output,testing::HasSubstr("MAKE THE MATRIX DIR")); - EXPECT_TRUE(GlobalV::ofs_running.is_open()); - GlobalV::ofs_running.close(); - std::string cc = "OUT.Si/running_md_1.log"; - remove(cc.c_str()); - std::string aa = "OUT.Si/warning.log"; - remove(aa.c_str()); - rmdir(PARAM.sys.global_stru_dir.c_str()); - rmdir(PARAM.sys.global_matrix_dir.c_str()); - rmdir(PARAM.sys.global_out_dir.c_str()); -} - -TEST_F(GlobalFile,mkdiratom) -{ - PARAM.sys.global_out_dir = "./"; - ModuleBase::Global_File::make_dir_atom("Si"); - int a = access("./Si/",0); - EXPECT_EQ(a , 0); - std::string ss = "./Si/"; - rmdir(ss.c_str()); -} - -TEST_F(GlobalFile,openlog) -{ - std::ofstream ofs; - ModuleBase::Global_File::open_log(ofs,"Si.log","md",true); - EXPECT_TRUE(ofs.is_open()); - ofs.close(); - ModuleBase::Global_File::open_log(ofs,"Si.log","md",false); - EXPECT_TRUE(ofs.is_open()); - ofs.close(); - std::string sss = "Si.log"; - remove(sss.c_str()); -} - -TEST_F(GlobalFile,closelog) -{ - std::ofstream ofs; - std::string sss = "Si.log"; - ofs.open(sss.c_str()); - ModuleBase::Global_File::close_log(ofs, sss); - EXPECT_FALSE(ofs.is_open()); - if (ofs.is_open()) - { - ofs.close(); - } - remove(sss.c_str()); -} - -TEST_F(GlobalFile,closealllog) -{ - /* - For module_io/input.cpp:line3578 close_log() is a void function, - All its contents is calling close_all_log() in module_base/global_file.cpp - For Input::close_log() what is left to test are the validities of parameters - GlobalV::MY_RANK and this->out_alllog. - */ - /* Test out_alllog == true case */ - std::string header = "running_"; - std::string tailCpuRank0 = "_cpu0.log"; - std::string tail = ".log"; - std::string f1 = header + PARAM.input.calculation + tailCpuRank0; - - if (GlobalV::ofs_running.is_open()) - { - GlobalV::ofs_running.close(); - } - if (GlobalV::ofs_warning.is_open()) - { - GlobalV::ofs_warning.close(); - } - GlobalV::ofs_running.open(f1.c_str()); - GlobalV::ofs_warning.open("warning.log"); - ModuleBase::Global_File::close_all_log(0,true,PARAM.input.calculation); - EXPECT_FALSE(GlobalV::ofs_running.is_open()); - if (GlobalV::ofs_running.is_open()) - { - GlobalV::ofs_running.close(); - } - EXPECT_FALSE(GlobalV::ofs_warning.is_open()); - if (GlobalV::ofs_warning.is_open()) - { - GlobalV::ofs_warning.close(); - } - remove(f1.c_str()); - //remove("warning.log"); - /* Test out_alllog == false case */ - GlobalV::ofs_running.open("running.log"); - GlobalV::ofs_warning.open("warning.log"); - ModuleBase::Global_File::close_all_log(0,false,PARAM.input.calculation); - EXPECT_FALSE(GlobalV::ofs_running.is_open()); - if (GlobalV::ofs_running.is_open()) - { - GlobalV::ofs_running.close(); - } - EXPECT_FALSE(GlobalV::ofs_warning.is_open()); - if (GlobalV::ofs_warning.is_open()) - { - GlobalV::ofs_warning.close(); - } - remove("running.log"); - remove("warning.log"); -} \ No newline at end of file diff --git a/source/module_base/test/math_ylmreal_test.cpp b/source/module_base/test/math_ylmreal_test.cpp deleted file mode 100644 index 891c948f7e..0000000000 --- a/source/module_base/test/math_ylmreal_test.cpp +++ /dev/null @@ -1,504 +0,0 @@ -#include"../math_ylmreal.h" -#include"../ylm.h" -#include"../vector3.h" -#include"../matrix.h" -#include"gtest/gtest.h" -#include -#include "module_psi/psi.h" -#include "module_base/array_pool.h" - -#define doublethreshold 1e-12 - -/************************************************ -* unit test of class YlmReal and Ylm -***********************************************/ - -/** - * For lmax <5 cases, the reference values are calculated by the formula from - * https://formulasearchengine.com/wiki/Table_of_spherical_harmonics. Note, these - * formula lack of the Condon–Shortley phase (-1)^m, and in this unit test, item - * (-1)^m is multiplied. - * For lmax >=5, the reference values are calculated by YlmReal::Ylm_Real. - * - * - Tested functions of class YlmReal - * - Ylm_Real - * - Ylm_Real2 - * - rlylm - * - YlmRealTemplate (double and float) - * - * - Tested functions of class Ylm - * - get_ylm_real - * - sph_harm - * - rl_sph_harm - * - grad_rl_sph_harm - * - equality_value_test: test the eqaulity of Ylm function between rl_sph_harm (spherical input) and get_ylm_real (Cartesian input) - * - equality_gradient_test:test the eqaulity of Ylm gradient function between grad_rl_sph_harm(spherical input) and rlylm (Cartesian input) - * - */ - -class YlmRealTest : public testing::Test -{ - protected: - - int lmax = 7; //maximum angular quantum number - int ng = 4; //test the 4 selected points on the sphere - int nylm = 64; //total Ylm number; - - ModuleBase::matrix ylm; //Ylm - ModuleBase::matrix *dylm; //dYlm/dx, dYlm/dy, dYlm/dz - ModuleBase::Vector3 *g; //vectors of the 4 points - double *ref; //reference of Ylm - double *rly; //Ylm - double (*rlgy)[3]; //the gradient of Ylm - std::vector rlyvector; //Ylm - ModuleBase::Array_Pool rlgyvector; //the gradient of Ylm - - //Ylm function - inline double norm(const double &x, const double &y, const double &z) {return sqrt(x*x + y*y + z*z);} - double y00(const double &x, const double &y, const double &z) {return 1.0/2.0/sqrt(M_PI);} - double y10(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return sqrt(3.0/(4.0*M_PI)) * z / r;} - double y11(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return -1.0*sqrt(3.0/(4.*M_PI)) * x / r;} - double y1m1(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return -1.0*sqrt(3./(4.*M_PI)) * y / r;} // y1m1 means Y1,-1 - double y20(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return 1./4. * sqrt(5./M_PI) * (-1.*x*x - y*y + 2.*z*z) / (r*r);} - double y21(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return -1.0*1./2. * sqrt(15./M_PI) * (z*x) / (r*r);} - double y2m1(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return -1.0*1./2. * sqrt(15./M_PI) * (z*y) / (r*r);} - double y22(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return 1./4. * sqrt(15./M_PI) * (x*x - y*y) / (r*r);} - double y2m2(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return 1./2. * sqrt(15./M_PI) * (x*y) / (r*r);} - double y30(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return 1./4. * sqrt(7./M_PI) * z*(2.*z*z-3.*x*x-3.*y*y) / (r*r*r);} - double y31(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return -1.0*1./4. * sqrt(21./2./M_PI) * x*(4.*z*z-x*x-y*y) / (r*r*r);} - double y3m1(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return -1.0*1./4. * sqrt(21./2./M_PI) * y*(4.*z*z-x*x-y*y) / (r*r*r);} - double y32(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return 1./4. * sqrt(105./M_PI) * (x*x - y*y)*z / (r*r*r);} - double y3m2(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return 1./2. * sqrt(105./M_PI) * x*y*z / (r*r*r);} - double y33(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return -1.0*1./4. * sqrt(35./2./M_PI) * x*(x*x - 3.*y*y) / (r*r*r);} - double y3m3(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return -1.0*1./4. * sqrt(35./2./M_PI) * y*(3.*x*x - y*y) / (r*r*r);} - double y40(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return 3./16.*sqrt(1./M_PI) * (35.*z*z*z*z - 30.*z*z*r*r + 3*r*r*r*r) / (r*r*r*r);} - double y41(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return -1.0*3./4.*sqrt(5./2./M_PI) * x*z*(7.*z*z - 3*r*r) / (r*r*r*r);} - double y4m1(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return -1.0*3./4.*sqrt(5./2./M_PI) * y*z*(7.*z*z - 3.*r*r) / (r*r*r*r);} - double y42(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return 3./8.*sqrt(5./M_PI) * (x*x-y*y)*(7.*z*z-r*r) / (r*r*r*r);} - double y4m2(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return 3./4.*sqrt(5./M_PI) * x*y*(7.*z*z - r*r) / (r*r*r*r);} - double y43(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return -1.0*3./4.*sqrt(35./2./M_PI) * x*z*(x*x - 3.*y*y) / (r*r*r*r);} - double y4m3(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return -1.0*3./4.*sqrt(35./2./M_PI) * y*z*(3.*x*x - y*y) / (r*r*r*r);} - double y44(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return 3./16.*sqrt(35./M_PI) * (x*x*(x*x - 3.*y*y) - y*y*(3.*x*x-y*y)) / (r*r*r*r);} - double y4m4(const double &x, const double &y, const double &z) {double r=norm(x,y,z); return 3./4.*sqrt(35./M_PI) * x*y*(x*x - y*y) / (r*r*r*r);} - - //the reference values are calculated by ModuleBase::Ylm::grad_rl_sph_harm - //1st dimension: example, 2nd dimension: Ylm, 3rd dimension: dx/dy/dz - double rlgyref[4][64][3] = { - { { 0.00000e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 4.88603e-01}, {-4.88603e-01, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, -4.88603e-01, 0.00000e+00}, {-6.30783e-01, 0.00000e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, -1.09255e+00}, - { 0.00000e+00, -0.00000e+00, 0.00000e+00}, { 1.09255e+00, 0.00000e+00, 0.00000e+00}, {-0.00000e+00, 1.09255e+00, -0.00000e+00}, - {-0.00000e+00, 0.00000e+00, -1.11953e+00}, { 1.37114e+00, 0.00000e+00, -0.00000e+00}, { 0.00000e+00, 4.57046e-01, 0.00000e+00}, - { 0.00000e+00, 0.00000e+00, 1.44531e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, {-1.77013e+00, 0.00000e+00, -0.00000e+00}, - { 0.00000e+00, -1.77013e+00, 0.00000e+00}, { 1.26943e+00, 0.00000e+00, -0.00000e+00}, { 0.00000e+00, 0.00000e+00, 2.00714e+00}, - { 0.00000e+00, 0.00000e+00, 0.00000e+00}, {-1.89235e+00, 0.00000e+00, 0.00000e+00}, {-0.00000e+00, -9.46175e-01, 0.00000e+00}, - {-0.00000e+00, 0.00000e+00, -1.77013e+00}, { 0.00000e+00, -0.00000e+00, 0.00000e+00}, { 2.50334e+00, 0.00000e+00, 0.00000e+00}, - {-0.00000e+00, 2.50334e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 1.75425e+00}, {-2.26473e+00, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, -4.52947e-01, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, -2.39677e+00}, {-0.00000e+00, -0.00000e+00, 0.00000e+00}, - { 2.44619e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 1.46771e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 2.07566e+00}, - {-0.00000e+00, 0.00000e+00, 0.00000e+00}, {-3.28191e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, -3.28191e+00, 0.00000e+00}, - {-1.90708e+00, 0.00000e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, -2.91311e+00}, { 0.00000e+00, -0.00000e+00, 0.00000e+00}, - { 2.76362e+00, 0.00000e+00, -0.00000e+00}, {-0.00000e+00, 9.21205e-01, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 2.76362e+00}, - { 0.00000e+00, 0.00000e+00, 0.00000e+00}, {-3.02739e+00, 0.00000e+00, 0.00000e+00}, {-0.00000e+00, -2.01826e+00, 0.00000e+00}, - {-0.00000e+00, 0.00000e+00, -2.36662e+00}, { 0.00000e+00, -0.00000e+00, 0.00000e+00}, { 4.09910e+00, 0.00000e+00, 0.00000e+00}, - {-0.00000e+00, 4.09910e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, -2.38995e+00}, { 3.16161e+00, 0.00000e+00, -0.00000e+00}, - { 0.00000e+00, 4.51658e-01, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 3.31900e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, - {-3.28564e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, -1.40813e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, -3.11349e+00}, - {-0.00000e+00, -0.00000e+00, 0.00000e+00}, { 3.63241e+00, 0.00000e+00, -0.00000e+00}, { 0.00000e+00, 2.59458e+00, 0.00000e+00}, - { 0.00000e+00, 0.00000e+00, 2.64596e+00}, { 0.00000e+00, 0.00000e+00, 0.00000e+00}, {-4.95014e+00, 0.00000e+00, -0.00000e+00}, - { 0.00000e+00, -4.95014e+00, 0.00000e+00} - }, - { - { 0.00000e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 4.88603e-01}, {-4.88603e-01, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, -4.88603e-01, 0.00000e+00}, { 0.00000e+00, -6.30783e-01, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, -0.00000e+00, -1.09255e+00}, { 0.00000e+00, -1.09255e+00, 0.00000e+00}, { 1.09255e+00, 0.00000e+00, -0.00000e+00}, - { 0.00000e+00, -0.00000e+00, -1.11953e+00}, { 4.57046e-01, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 1.37114e+00, -0.00000e+00}, - { 0.00000e+00, -0.00000e+00, -1.44531e+00}, { 0.00000e+00, 0.00000e+00, 0.00000e+00}, { 1.77013e+00, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, 1.77013e+00, 0.00000e+00}, { 0.00000e+00, 1.26943e+00, -0.00000e+00}, { 0.00000e+00, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, 0.00000e+00, 2.00714e+00}, { 0.00000e+00, 1.89235e+00, -0.00000e+00}, {-9.46175e-01, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 1.77013e+00}, { 0.00000e+00, 2.50334e+00, -0.00000e+00}, - {-2.50334e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 1.75425e+00}, {-4.52947e-01, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, -2.26473e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 2.39677e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, - {-1.46771e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, -2.44619e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 2.07566e+00}, - {-0.00000e+00, 0.00000e+00, 0.00000e+00}, {-3.28191e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, -3.28191e+00, 0.00000e+00}, - { 0.00000e+00, -1.90708e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, -0.00000e+00, -2.91311e+00}, - { 0.00000e+00, -2.76362e+00, 0.00000e+00}, { 9.21205e-01, 0.00000e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, -0.00000e+00, -2.76362e+00}, { 0.00000e+00, -3.02739e+00, 0.00000e+00}, { 2.01826e+00, 0.00000e+00, 0.00000e+00}, - {-0.00000e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, -0.00000e+00, -2.36662e+00}, { 0.00000e+00, -4.09910e+00, 0.00000e+00}, - { 4.09910e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, -0.00000e+00, -2.38995e+00}, { 4.51658e-01, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, 3.16161e+00, -0.00000e+00}, { 0.00000e+00, -0.00000e+00, -3.31900e+00}, { 0.00000e+00, 0.00000e+00, 0.00000e+00}, - { 1.40813e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 3.28564e+00, -0.00000e+00}, { 0.00000e+00, -0.00000e+00, -3.11349e+00}, - { 0.00000e+00, 0.00000e+00, 0.00000e+00}, { 2.59458e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 3.63241e+00, -0.00000e+00}, - { 0.00000e+00, 0.00000e+00, -2.64596e+00}, { 0.00000e+00, 0.00000e+00, 0.00000e+00}, { 4.95014e+00, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, 4.95014e+00, -0.00000e+00} - }, - { - { 0.00000e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 4.88603e-01}, {-4.88603e-01, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, -4.88603e-01, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 1.26157e+00}, {-1.09255e+00, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, -1.09255e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 2.22045e-16}, {-0.00000e+00, 0.00000e+00, -0.00000e+00}, - { 0.00000e+00, 0.00000e+00, 2.23906e+00}, {-1.82818e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, -1.82818e+00, 0.00000e+00}, - { 0.00000e+00, 0.00000e+00, 8.81212e-16}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, {-1.84324e-16, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, 5.55112e-17, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 3.38514e+00}, {-2.67619e+00, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, -2.67619e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 2.30756e-15}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, - {-5.52973e-16, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 1.66533e-16, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 0.00000e+00}, - {-0.00000e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 4.67801e+00}, {-3.62357e+00, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, -3.62357e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 4.87108e-15}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, - {-1.22267e-15, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 3.68219e-16, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 0.00000e+00}, - {-0.00000e+00, 0.00000e+00, 0.00000e+00}, { 4.93038e-32, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, -6.16298e-33, 0.00000e+00}, - { 0.00000e+00, 0.00000e+00, 6.10264e+00}, {-4.66097e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, -4.66097e+00, 0.00000e+00}, - { 0.00000e+00, 0.00000e+00, 8.98664e-15}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, {-2.30221e-15, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, 6.93334e-16, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, - { 1.77767e-31, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, -2.22209e-32, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 0.00000e+00}, - {-0.00000e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 7.64784e+00}, {-5.78122e+00, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, -5.78122e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 1.51096e-14}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, - {-3.91011e-15, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 1.17757e-15, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 0.00000e+00}, - {-0.00000e+00, 0.00000e+00, 0.00000e+00}, { 4.67737e-31, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, -5.84671e-32, 0.00000e+00}, - { 0.00000e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 0.00000e+00}, { 1.13319e-47, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, -1.41649e-48, 0.00000e+00} - }, - { - { 0.00000e+00, 0.00000e+00, 0.00000e+00}, { 0.00000e+00, 0.00000e+00, 4.88603e-01}, {-4.88603e-01, 0.00000e+00, 0.00000e+00}, - { 0.00000e+00, -4.88603e-01, 0.00000e+00}, { 3.64183e-01, 3.64183e-01, -7.28366e-01}, { 6.30783e-01, -0.00000e+00, 6.30783e-01}, - {-0.00000e+00, 6.30783e-01, 6.30783e-01}, {-6.30783e-01, 6.30783e-01, -1.66533e-16}, {-6.30783e-01, -6.30783e-01, 0.00000e+00}, - {-7.46353e-01, -7.46353e-01, 0.00000e+00}, { 0.00000e+00, 3.04697e-01, -1.21879e+00}, { 3.04697e-01, 0.00000e+00, -1.21879e+00}, - { 9.63537e-01, -9.63537e-01, 4.01253e-16}, { 9.63537e-01, 9.63537e-01, 9.63537e-01}, {-4.44089e-16, 1.18009e+00, -2.22045e-16}, - {-1.18009e+00, -1.11022e-16, 0.00000e+00}, { 4.88603e-01, 4.88603e-01, 1.30294e+00}, {-1.03006e+00, -7.72548e-01, 7.72548e-01}, - {-7.72548e-01, -1.03006e+00, 7.72548e-01}, {-7.28366e-01, 7.28366e-01, -5.25363e-16}, {-3.64183e-01, -3.64183e-01, -2.18510e+00}, - { 7.69185e-16, -2.04397e+00, -6.81324e-01}, { 2.04397e+00, 1.92296e-16, 6.81324e-01}, { 9.63537e-01, 9.63537e-01, -1.44756e-16}, - {-9.63537e-01, 9.63537e-01, -5.55112e-17}, { 5.19779e-01, 5.19779e-01, -1.81923e+00}, { 1.40917e+00, 8.05238e-01, 8.05238e-01}, - { 8.05238e-01, 1.40917e+00, 8.05238e-01}, { 0.00000e+00, -4.44089e-16, 3.24739e-16}, {-1.06523e+00, -1.06523e+00, 2.13046e+00}, - {-2.17439e-01, 1.73951e+00, 1.73951e+00}, {-1.73951e+00, 2.17439e-01, -1.73951e+00}, {-1.84503e+00, -1.84503e+00, -9.22517e-01}, - { 1.84503e+00, -1.84503e+00, 6.58625e-16}, { 1.45863e+00, 1.11022e-15, 0.00000e+00}, {-8.88178e-16, 1.45863e+00, 0.00000e+00}, - {-1.46807e+00, -1.46807e+00, 5.87227e-01}, {-4.48502e-01, -3.36617e-16, -2.24251e+00}, {-3.36617e-16, -4.48502e-01, -2.24251e+00}, - { 7.09144e-01, -7.09144e-01, 1.87222e-16}, { 2.12743e+00, 2.12743e+00, -9.38779e-16}, { 7.09144e-01, -5.11006e-16, -2.12743e+00}, - { 1.02201e-15, -7.09144e-01, 2.12743e+00}, { 1.81260e+00, 1.81260e+00, 2.58943e+00}, {-2.07154e+00, 2.07154e+00, -1.66969e-15}, - {-3.03637e+00, -2.31111e-15, -6.07275e-01}, { 1.84889e-15, -3.03637e+00, -6.07275e-01}, { 1.05183e+00, -1.05183e+00, 5.77778e-17}, - { 1.05183e+00, 1.05183e+00, 4.03986e-17}, { 1.27464e+00, 1.27464e+00, 1.69952e+00}, {-1.28472e+00, -1.20442e+00, 1.92707e+00}, - {-1.20442e+00, -1.28472e+00, 1.92707e+00}, {-8.52285e-01, 8.52285e-01, -6.74704e-16}, {-1.50789e+00, -1.50789e+00, -2.95022e+00}, - {-1.11260e+00, -2.08612e+00, 9.27164e-01}, { 2.08612e+00, 1.11260e+00, -9.27164e-01}, {-3.07506e-01, -3.07506e-01, -3.69007e+00}, - { 1.23002e+00, -1.23002e+00, 2.28018e-15}, { 3.69007e+00, -1.53753e-01, 1.84503e+00}, {-1.53753e-01, 3.69007e+00, 1.84503e+00}, - {-2.35197e+00, 2.35197e+00, -8.00513e-16}, {-2.35197e+00, -2.35197e+00, -7.83988e-01}, { 1.37903e-15, -1.46671e+00, 9.77875e-17}, - { 1.46671e+00, 1.14919e-15, 1.34475e-16} - } - }; - - void SetUp() - { - ylm.create(nylm,ng); - dylm = new ModuleBase::matrix[3]; - for(int i = 0 ; i < 3 ; ++i) dylm[i].create(nylm,ng); - g = new ModuleBase::Vector3[ng]; - g[0].set(1.0,0.0,0.0); - g[1].set(0.0,1.0,0.0); - g[2].set(0.0,0.0,1.0); - g[3].set(-1.0,-1.0,-1.0); - - rly = new double[nylm]; - rlyvector.resize(nylm); - rlgy = new double[nylm][3]; - rlgyvector = ModuleBase::Array_Pool(nylm,3); - ref = new double[64*4]{ - y00(g[0].x, g[0].y, g[0].z), y00(g[1].x, g[1].y, g[1].z), y00(g[2].x, g[2].y, g[2].z), y00(g[3].x, g[3].y, g[3].z), - y10(g[0].x, g[0].y, g[0].z), y10(g[1].x, g[1].y, g[1].z), y10(g[2].x, g[2].y, g[2].z), y10(g[3].x, g[3].y, g[3].z), - y11(g[0].x, g[0].y, g[0].z), y11(g[1].x, g[1].y, g[1].z), y11(g[2].x, g[2].y, g[2].z), y11(g[3].x, g[3].y, g[3].z), - y1m1(g[0].x, g[0].y, g[0].z), y1m1(g[1].x, g[1].y, g[1].z), y1m1(g[2].x, g[2].y, g[2].z), y1m1(g[3].x, g[3].y, g[3].z), - y20(g[0].x, g[0].y, g[0].z), y20(g[1].x, g[1].y, g[1].z), y20(g[2].x, g[2].y, g[2].z), y20(g[3].x, g[3].y, g[3].z), - y21(g[0].x, g[0].y, g[0].z), y21(g[1].x, g[1].y, g[1].z), y21(g[2].x, g[2].y, g[2].z), y21(g[3].x, g[3].y, g[3].z), - y2m1(g[0].x, g[0].y, g[0].z), y2m1(g[1].x, g[1].y, g[1].z), y2m1(g[2].x, g[2].y, g[2].z), y2m1(g[3].x, g[3].y, g[3].z), - y22(g[0].x, g[0].y, g[0].z), y22(g[1].x, g[1].y, g[1].z), y22(g[2].x, g[2].y, g[2].z), y22(g[3].x, g[3].y, g[3].z), - y2m2(g[0].x, g[0].y, g[0].z), y2m2(g[1].x, g[1].y, g[1].z), y2m2(g[2].x, g[2].y, g[2].z), y2m2(g[3].x, g[3].y, g[3].z), - y30(g[0].x, g[0].y, g[0].z), y30(g[1].x, g[1].y, g[1].z), y30(g[2].x, g[2].y, g[2].z), y30(g[3].x, g[3].y, g[3].z), - y31(g[0].x, g[0].y, g[0].z), y31(g[1].x, g[1].y, g[1].z), y31(g[2].x, g[2].y, g[2].z), y31(g[3].x, g[3].y, g[3].z), - y3m1(g[0].x, g[0].y, g[0].z), y3m1(g[1].x, g[1].y, g[1].z), y3m1(g[2].x, g[2].y, g[2].z), y3m1(g[3].x, g[3].y, g[3].z), - y32(g[0].x, g[0].y, g[0].z), y32(g[1].x, g[1].y, g[1].z), y32(g[2].x, g[2].y, g[2].z), y32(g[3].x, g[3].y, g[3].z), - y3m2(g[0].x, g[0].y, g[0].z), y3m2(g[1].x, g[1].y, g[1].z), y3m2(g[2].x, g[2].y, g[2].z), y3m2(g[3].x, g[3].y, g[3].z), - y33(g[0].x, g[0].y, g[0].z), y33(g[1].x, g[1].y, g[1].z), y33(g[2].x, g[2].y, g[2].z), y33(g[3].x, g[3].y, g[3].z), - y3m3(g[0].x, g[0].y, g[0].z), y3m3(g[1].x, g[1].y, g[1].z), y3m3(g[2].x, g[2].y, g[2].z), y3m3(g[3].x, g[3].y, g[3].z), - y40(g[0].x, g[0].y, g[0].z), y40(g[1].x, g[1].y, g[1].z), y40(g[2].x, g[2].y, g[2].z), y40(g[3].x, g[3].y, g[3].z), - y41(g[0].x, g[0].y, g[0].z), y41(g[1].x, g[1].y, g[1].z), y41(g[2].x, g[2].y, g[2].z), y41(g[3].x, g[3].y, g[3].z), - y4m1(g[0].x, g[0].y, g[0].z), y4m1(g[1].x, g[1].y, g[1].z), y4m1(g[2].x, g[2].y, g[2].z), y4m1(g[3].x, g[3].y, g[3].z), - y42(g[0].x, g[0].y, g[0].z), y42(g[1].x, g[1].y, g[1].z), y42(g[2].x, g[2].y, g[2].z), y42(g[3].x, g[3].y, g[3].z), - y4m2(g[0].x, g[0].y, g[0].z), y4m2(g[1].x, g[1].y, g[1].z), y4m2(g[2].x, g[2].y, g[2].z), y4m2(g[3].x, g[3].y, g[3].z), - y43(g[0].x, g[0].y, g[0].z), y43(g[1].x, g[1].y, g[1].z), y43(g[2].x, g[2].y, g[2].z), y43(g[3].x, g[3].y, g[3].z), - y4m3(g[0].x, g[0].y, g[0].z), y4m3(g[1].x, g[1].y, g[1].z), y4m3(g[2].x, g[2].y, g[2].z), y4m3(g[3].x, g[3].y, g[3].z), - y44(g[0].x, g[0].y, g[0].z), y44(g[1].x, g[1].y, g[1].z), y44(g[2].x, g[2].y, g[2].z), y44(g[3].x, g[3].y, g[3].z), - y4m4(g[0].x, g[0].y, g[0].z), y4m4(g[1].x, g[1].y, g[1].z), y4m4(g[2].x, g[2].y, g[2].z), y4m4(g[3].x, g[3].y, g[3].z), - 0.000000000000000, 0.000000000000000, 0.935602579627389, 0.090028400200397, - -0.452946651195697, -0.000000000000000, -0.000000000000000, -0.348678494661834, - -0.000000000000000, -0.452946651195697, -0.000000000000000, -0.348678494661834, - -0.000000000000000, 0.000000000000000, 0.000000000000000, -0.000000000000000, - -0.000000000000000, -0.000000000000000, 0.000000000000000, -0.000000000000000, - 0.489238299435250, 0.000000000000000, -0.000000000000000, -0.376615818502422, - 0.000000000000000, -0.489238299435250, -0.000000000000000, 0.376615818502422, - 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.532615198330370, - 0.000000000000000, 0.000000000000000, 0.000000000000000, -0.000000000000000, - -0.656382056840170, -0.000000000000000, -0.000000000000000, -0.168427714314628, - -0.000000000000000, -0.656382056840170, -0.000000000000000, -0.168427714314628, - -0.317846011338142, -0.317846011338142, 1.017107236282055, 0.226023830284901, - -0.000000000000000, -0.000000000000000, -0.000000000000000, 0.258942827786103, - -0.000000000000000, -0.000000000000000, -0.000000000000000, 0.258942827786103, - 0.460602629757462, -0.460602629757462, 0.000000000000000, -0.000000000000000, - 0.000000000000000, 0.000000000000000, 0.000000000000000, -0.409424559784410, - -0.000000000000000, -0.000000000000000, -0.000000000000000, 0.136474853261470, - -0.000000000000000, 0.000000000000000, -0.000000000000000, -0.136474853261470, - -0.504564900728724, -0.504564900728724, 0.000000000000000, -0.598002845308118, - -0.000000000000000, -0.000000000000000, 0.000000000000000, 0.000000000000000, - -0.000000000000000, -0.000000000000000, -0.000000000000000, 0.350610246256556, - -0.000000000000000, -0.000000000000000, -0.000000000000000, 0.350610246256556, - 0.683184105191914, -0.683184105191914, 0.000000000000000, -0.000000000000000, - 0.000000000000000, 0.000000000000000, 0.000000000000000, -0.202424920056864, - 0.000000000000000, 0.000000000000000, 1.092548430592079, -0.350435072502801, - 0.451658037912587, 0.000000000000000, -0.000000000000000, 0.046358202625865, - 0.000000000000000, 0.451658037912587, -0.000000000000000, 0.046358202625865, - 0.000000000000000, -0.000000000000000, 0.000000000000000, 0.000000000000000, - 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.492067081245654, - -0.469376801586882, -0.000000000000000, -0.000000000000000, 0.187354445356332, - -0.000000000000000, 0.469376801586882, -0.000000000000000, -0.187354445356332, - 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.355076798886913, - 0.000000000000000, 0.000000000000000, 0.000000000000000, -0.000000000000000, - 0.518915578720260, 0.000000000000000, -0.000000000000000, -0.443845998608641, - 0.000000000000000, 0.518915578720260, -0.000000000000000, -0.443845998608641, - 0.000000000000000, -0.000000000000000, 0.000000000000000, 0.000000000000000, - 0.000000000000000, 0.000000000000000, 0.000000000000000, 0.452635881587108, - -0.707162732524596, 0.000000000000000, -0.000000000000000, 0.120972027847095, - -0.000000000000000, 0.707162732524596, -0.000000000000000, -0.120972027847095 - } ; - } - - void TearDown() - { - delete [] dylm; - delete [] g; - delete [] ref; - delete [] rly; - delete [] rlgy; - } -}; - -TEST_F(YlmRealTest,Constructor) -{ - EXPECT_NO_THROW(ModuleBase::YlmReal YR); -} - -TEST_F(YlmRealTest,YlmReal) -{ - ModuleBase::YlmReal::Ylm_Real(nylm,ng,g,ylm); - for(int i=0;i(g), ylm.c); - for(int i=0;i gplus = g[j]; - ModuleBase::Vector3 gminus = g[j]; - gplus[id] += step/2; - gminus[id] -= step/2; - ModuleBase::YlmReal::Ylm_Real(nylm,1,&gplus,ylmplus); - ModuleBase::YlmReal::Ylm_Real(nylm,1,&gminus,ylmminus); - for(int i=0;i R (20.0, 0.0, 0.0); - const double xdr = R.x/R.norm(); - const double ydr = R.y/R.norm(); - const double zdr = R.z/R.norm(); - const int L = 9; - const double rl = std::pow( R.norm(), L); - //std::cout << " rl=" << rl << std::endl; - ModuleBase::Ylm::set_coefficients(); - - int nu = 100; - - // Peize Lin change rlya 2016-08-26 - std::vector rlya; - double rlyb[400]; - ModuleBase::Ylm::ZEROS( rlyb, 400); - - ModuleBase::Ylm::rl_sph_harm(L, xdr, ydr, zdr, rlya); - ModuleBase::Ylm::get_ylm_real(L+1, R, rlyb); - - for (int i=0; i < nu; i++) - { - double diff = fabs(rlya[i]-rlyb[i]); - EXPECT_LT(diff,1e-8); - } - -} - -//used to be test2 in ylm.h -TEST_F(YlmRealTest, equality_gradient_test) -{ - - - ModuleBase::Vector3 R (0.1,-0.2,0.5); - ModuleBase::Ylm::set_coefficients(); - - //int nu = 100; - - double rlya[100]; - double rlyb[400]; - - ModuleBase::Array_Pool grlya(100, 3); - double grlyb[400][3]; - - ModuleBase::Ylm::grad_rl_sph_harm (9, R.x, R.y, R.z, rlya, grlya.get_ptr_2D()); - ModuleBase::Ylm::rlylm (10, R.x, R.y, R.z, rlyb, grlyb); - - for (int i = 0; i < 100; i++) - { - double diffx = fabs(grlya[i][2]-grlyb[i][2]); - EXPECT_LT(diffx,1e-8); - } - -} -TEST_F(YlmRealTest,YlmRealTemplatefloat) -{ - ModuleBase::Vector3 *gg; - gg = new ModuleBase::Vector3[ng]; - gg[0].set(1.0,0.0,0.0); - gg[1].set(0.0,1.0,0.0); - gg[2].set(0.0,0.0,1.0); - gg[3].set(-1.0,-1.0,-1.0); - float*ccc; - ccc=new float[nylm*ng]; - base_device::DEVICE_CPU* cpu_ctx = {}; - ModuleBase::YlmReal::Ylm_Real(cpu_ctx, nylm, ng, reinterpret_cast(gg), ccc); - for(int i=0;i - -#ifdef __MPI -#include -#endif -#ifdef _OPENMP -#include -#endif - -#include - -#include "chrono" -#include "module_base/formatter.h" - -namespace ModuleBase -{ - -//---------------------------------------------------------- -// EXPLAIN : -//---------------------------------------------------------- -bool timer::disabled = false; -size_t timer::n_now = 0; -std::map> timer::timer_pool; - -void timer::finish(std::ofstream &ofs,const bool print_flag) -{ - timer::tick("","total"); - if(print_flag) { - print_all( ofs ); -} -} - -//---------------------------------------------------------- -// -//---------------------------------------------------------- -void timer::start() -{ - // first init ,then we can use tick - timer::tick("","total"); -} - -double timer::cpu_time() -{ -//---------------------------------------------------------- -// EXPLAIN : here static is important !! -// only first call can let t0 = 0,clock begin -// when enter this function second time , t0 > 0 -//---------------------------------------------------------- - static auto t1 = std::chrono::system_clock::now(); - const auto t2 = std::chrono::system_clock::now(); - auto duration = std::chrono::duration_cast(t2 - t1); - return double(duration.count()) * std::chrono::microseconds::period::num / std::chrono::microseconds::period::den; -} - -void timer::tick(const std::string &class_name,const std::string &name) -{ -//---------------------------------------------------------- -// EXPLAIN : if timer is disabled , return -//---------------------------------------------------------- - if (disabled) { - return; -} - -#ifdef _OPENMP - if(!omp_get_thread_num()) -#endif - { - Timer_One &timer_one = timer_pool[class_name][name]; - -//---------------------------------------------------------- -// CALL MEMBER FUNCTION : -// NAME : cpu_time -// -// EXPLAIN : -// if start_flag == true,means a new clock counting begin, -// hence we record the start time of this clock counting. -// if start_flag == false, means it's the end of this counting, -// so we add the time during this two 'time point' to the clock time storage. -//---------------------------------------------------------- - if(timer_one.start_flag) - { -#ifdef __MPI - int is_initialized = 0; - MPI_Initialized(&is_initialized); - if(is_initialized) - { - timer_one.cpu_start = MPI_Wtime(); - } -#else - timer_one.cpu_start = cpu_time(); -#endif - ++timer_one.calls; - timer_one.start_flag = false; - } - else - { -#ifdef __MPI - int is_initialized = 0; - MPI_Initialized(&is_initialized); - if(is_initialized) - { - timer_one.cpu_second += MPI_Wtime() - timer_one.cpu_start; - } -#else - timer_one.cpu_second += (cpu_time() - timer_one.cpu_start); -#endif - timer_one.start_flag = true; - } - } // end if(!omp_get_thread_num()) -} - -long double timer::print_until_now() -{ - // stop the clock - timer::tick("","total"); - // start again - timer::tick("","total"); - return timer_pool[""]["total"].cpu_second; -} - -void timer::write_to_json(std::string file_name) -{ -#ifdef __MPI - // in some unit test, the mpi is not initialized, so we need to check it - // if mpi is not initialized, we do not run this function - int is_initialized = 0; - MPI_Initialized(&is_initialized); - if (!is_initialized) { - return; -} - int my_rank = 0; - MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); - if (my_rank != 0) { - return; -} -#endif - - // check if a double is inf, if so, return "null", else return a string of the input double - auto double_to_string = [](double d) -> std::string - { - if(std::isinf(d)) - { - return "Infinity"; - } - else - { - return FmtCore::format("%.15f", d); - } - }; - - // The output json file format is like this: - // { - // "total": 1.0, - // "sub": [ - // { - // "class_name": "wavefunc", - // "sub": [ - // { - // "name": "evc", - // "cpu_second": 0.000318, - // "calls": 2, - // "cpu_second_per_call": 0.000159, - // "cpu_second_per_total": 0.000318 - // } - // ] - // } - // ] - // } - - std::ofstream ofs(file_name); - std::string indent = " "; - int order_a = 0; - ofs << "{\n"; - ofs << indent << "\"total\": " << timer_pool[""]["total"].cpu_second << ",\n"; - ofs << indent << "\"sub\": [\n"; - for(auto &timer_pool_A : timer_pool) - { - order_a ++; - // if calss_name == "", it means total time, so we skip it - if(timer_pool_A.first == "") - { - continue; - } - int order_b = 0; - const std::string class_name = timer_pool_A.first; - ofs << indent << indent << "{\n"; - ofs << indent << indent << indent << "\"class_name\": \"" << class_name << "\",\n"; - ofs << indent << indent << indent << "\"sub\": [\n"; - for(auto &timer_pool_B : timer_pool_A.second) - { - order_b ++; - const std::string name = timer_pool_B.first; - const Timer_One timer_one = timer_pool_B.second; - ofs << indent << indent << indent << indent << "{\n"; - ofs << indent << indent << indent << indent << "\"name\": \"" << name << "\",\n"; - ofs << indent << indent << indent << indent << "\"cpu_second\": " - << std::setprecision(15) << timer_one.cpu_second << ",\n"; - ofs << indent << indent << indent << indent << "\"calls\": " << timer_one.calls << ",\n"; - ofs << indent << indent << indent << indent << "\"cpu_second_per_call\": " - << double_to_string(timer_one.cpu_second/timer_one.calls) << ",\n"; - ofs << indent << indent << indent << indent << "\"cpu_second_per_total\": " - << double_to_string(timer_one.cpu_second/timer_pool[""]["total"].cpu_second) << "\n"; - - if (order_b == timer_pool_A.second.size()) - { - ofs << indent << indent << indent << indent << "}\n"; - } - else - { - ofs << indent << indent << indent << indent << "},\n"; - } - } - ofs << indent << indent << indent << "]\n"; - if (order_a == timer_pool.size()) - { - ofs << indent << indent << "}\n"; - } - else - { - ofs << indent << indent << "},\n"; - } - } - ofs << indent << "]\n"; - ofs << "}\n"; - ofs.close(); -} - -void timer::print_all(std::ofstream &ofs) -{ - constexpr double small = 0.1; // cpu = 10^6 - // if want to print > 1s , set small = 10^6 - - std::vector,Timer_One>> timer_pool_order; - for(auto &timer_pool_A : timer_pool) - { - const std::string class_name = timer_pool_A.first; - for(auto &timer_pool_B : timer_pool_A.second) - { - const std::string name = timer_pool_B.first; - const Timer_One timer_one = timer_pool_B.second; - if(timer_pool_order.size() < timer_one.order+1) - { - timer_pool_order.resize(timer_one.order+1); - } - //timer_pool_order[timer_one.order] = {{class_name, name}, timer_one}; //qianrui change it to make it compatible with old compiler version - timer_pool_order[timer_one.order] = std::pair, Timer_One> { - std::pair{class_name,name}, timer_one}; - } - } - std::vector class_names; - std::vector names; - std::vector times; - std::vector calls; - std::vector avgs; - std::vector pers; - for(auto &timer_pool_order_A : timer_pool_order) - { - const std::string &class_name = timer_pool_order_A.first.first; - const std::string &name = timer_pool_order_A.first.second; - const Timer_One &timer_one = timer_pool_order_A.second; - - if(timer_one.cpu_second < 0) - { - continue; - } - - // only print out timers that are larger than 1% - // mohan add 2025-03-09 - const double percentage_thr = 1.0; - const double percentage = timer_one.cpu_second / timer_pool_order[0].second.cpu_second * 100; - if(percentage titles = {"CLASS_NAME", "NAME", "TIME/s", "CALLS", "AVG/s", "PER/%"}; - std::vector formats = {"%-10s", "%-10s", "%6.2f", "%8d", "%6.2f", "%6.2f"}; - FmtTable time_statistics(/*titles=*/titles, - /*nrows=*/pers.size(), - /*formats=*/formats, - /*indent=*/0, - /*align=*/{/*value*/FmtTable::Align::LEFT, /*title*/FmtTable::Align::CENTER}); - time_statistics << class_names << names << times << calls << avgs << pers; - const std::string table = "\nTIME STATISTICS\n" + time_statistics.str(); - std::cout< - -#include "module_base/intarray.h" -#include "module_base/vector3.h" #include "ORB_atomic_lm.h" +#include "source_base/intarray.h" +#include "source_base/vector3.h" + +#include class Numerical_Orbital_AtomRelation { -public: - //========================================================== - // It's about two atoms relations, thread-safe interface - //========================================================== - double distance; - ModuleBase::Vector3 R1; - ModuleBase::Vector3 R2; //three-dimesion-coordinate of R - ModuleBase::Vector3 dR; // R1-R2 - - double& get_distance() - { - if(distance < 0.0) ModuleBase::WARNING_QUIT("NUMERICAL_ORBITAL","distance should be above zero!"); - return distance; - } - - double getX() { return R2.x - R1.x ; } - double getY() { return R2.y - R1.y ; } - double getZ() { return R2.z - R1.z ; } - ModuleBase::Vector3& getR1() { return R1; } - ModuleBase::Vector3& getR2() { return R2; } - ModuleBase::Vector3& getdR() { return dR; } - - void set_position(const ModuleBase::Vector3 &R1_in, const ModuleBase::Vector3 &R2_in) - { - R1 = R1_in; - R2 = R2_in; - dR = R1-R2; - distance = dR.norm(); - } + public: + //========================================================== + // It's about two atoms relations, thread-safe interface + //========================================================== + double distance; + ModuleBase::Vector3 R1; + ModuleBase::Vector3 R2; // three-dimesion-coordinate of R + ModuleBase::Vector3 dR; // R1-R2 + + double& get_distance() + { + if (distance < 0.0) + ModuleBase::WARNING_QUIT("NUMERICAL_ORBITAL", "distance should be above zero!"); + return distance; + } + + double getX() + { + return R2.x - R1.x; + } + double getY() + { + return R2.y - R1.y; + } + double getZ() + { + return R2.z - R1.z; + } + ModuleBase::Vector3& getR1() + { + return R1; + } + ModuleBase::Vector3& getR2() + { + return R2; + } + ModuleBase::Vector3& getdR() + { + return dR; + } + + void set_position(const ModuleBase::Vector3& R1_in, const ModuleBase::Vector3& R2_in) + { + R1 = R1_in; + R2 = R2_in; + dR = R1 - R2; + distance = dR.norm(); + } }; /// -///CLASS Num_Orbital +/// CLASS Num_Orbital ///------------------------------------------ /// -///Note : contain information about atoms +/// Note : contain information about atoms /// -///Feature : set and store information about atoms +/// Feature : set and store information about atoms /// class Numerical_Orbital { - friend class LCAO_Orbitals; - -public: - - Numerical_Orbital(); - ~Numerical_Orbital(); - - const int& getLmax() const { return this->lmax; } - const double& getRcut () const {return this->rcut; } - const int& getType() const { return this->type; } - const int& getTotal_nchi() const { return this->total_nchi; } - const int& getNchi(const int l) const { return this->nchi[l]; } - const std::string& getLabel() const { return this->label; } - - const inline Numerical_Orbital_Lm& PhiLN( const int &L, const int &N)const - { - assert(this->phiLN != nullptr); - return this->phiLN[ this->find_chi(L, N) ]; - } - - /// about the distance between two atoms. - static double& get_distance() - { - return NOAR.get_distance(); - } - - static double getX() { return NOAR.getX() ; } - static double getY() { return NOAR.getY() ; } - static double getZ() { return NOAR.getZ() ; } - static ModuleBase::Vector3& getR1() { return NOAR.getR1(); } - static ModuleBase::Vector3& getR2() { return NOAR.getR2(); } - static ModuleBase::Vector3& getdR() { return NOAR.getdR(); } - - /// - /// set information about Numerical Orbital - /// - void set_orbital_info( - const int& type_in, - const std::string& label_in, - const int& lmax_in, - const int* nchi_in, - const int& total_nchi); - - static void set_position(const ModuleBase::Vector3 &R1_in, const ModuleBase::Vector3 &R2_in) - { - NOAR.set_position(R1_in, R2_in); - } - - Numerical_Orbital_Lm*& chi() { return this->phiLN; } - -private: - - //========================================================== - // MEMBER FUNCTION : - // NAME : label (atom type) - // NAME : lmax( max value of L angular momentum) - // NAME : nchi( number of chi for each L) - // NAME : total_nchi(total chi for this type of atom, total number of NAOs) - // NAME : max_nchi( max chi for certain L) - // NAME : find_chi(lmax+1, max_nchi). - //=========================================================== - std::string label; - - int type; - int lmax; - int* nchi; - int total_nchi; - int max_nchi; - ModuleBase::IntArray find_chi; - double rcut; - - Numerical_Orbital_Lm* phiLN;// length: total_nchi (only store radial function ) - - //========================================================== - // Keep the old interface - //========================================================== - static Numerical_Orbital_AtomRelation NOAR; + friend class LCAO_Orbitals; + + public: + Numerical_Orbital(); + ~Numerical_Orbital(); + + const int& getLmax() const + { + return this->lmax; + } + const double& getRcut() const + { + return this->rcut; + } + const int& getType() const + { + return this->type; + } + const int& getTotal_nchi() const + { + return this->total_nchi; + } + const int& getNchi(const int l) const + { + return this->nchi[l]; + } + const std::string& getLabel() const + { + return this->label; + } + + const inline Numerical_Orbital_Lm& PhiLN(const int& L, const int& N) const + { + assert(this->phiLN != nullptr); + return this->phiLN[this->find_chi(L, N)]; + } + + /// about the distance between two atoms. + static double& get_distance() + { + return NOAR.get_distance(); + } + + static double getX() + { + return NOAR.getX(); + } + static double getY() + { + return NOAR.getY(); + } + static double getZ() + { + return NOAR.getZ(); + } + static ModuleBase::Vector3& getR1() + { + return NOAR.getR1(); + } + static ModuleBase::Vector3& getR2() + { + return NOAR.getR2(); + } + static ModuleBase::Vector3& getdR() + { + return NOAR.getdR(); + } + + /// + /// set information about Numerical Orbital + /// + void set_orbital_info(const int& type_in, + const std::string& label_in, + const int& lmax_in, + const int* nchi_in, + const int& total_nchi); + + static void set_position(const ModuleBase::Vector3& R1_in, const ModuleBase::Vector3& R2_in) + { + NOAR.set_position(R1_in, R2_in); + } + + Numerical_Orbital_Lm*& chi() + { + return this->phiLN; + } + + private: + //========================================================== + // MEMBER FUNCTION : + // NAME : label (atom type) + // NAME : lmax( max value of L angular momentum) + // NAME : nchi( number of chi for each L) + // NAME : total_nchi(total chi for this type of atom, total number of NAOs) + // NAME : max_nchi( max chi for certain L) + // NAME : find_chi(lmax+1, max_nchi). + //=========================================================== + std::string label; + + int type; + int lmax; + int* nchi; + int total_nchi; + int max_nchi; + ModuleBase::IntArray find_chi; + double rcut; + + Numerical_Orbital_Lm* phiLN; // length: total_nchi (only store radial function ) + + //========================================================== + // Keep the old interface + //========================================================== + static Numerical_Orbital_AtomRelation NOAR; }; #endif diff --git a/source/module_basis/module_ao/ORB_atomic_lm.cpp b/source/module_basis/module_ao/ORB_atomic_lm.cpp index 9807df4f3f..0ed1fe526f 100644 --- a/source/module_basis/module_ao/ORB_atomic_lm.cpp +++ b/source/module_basis/module_ao/ORB_atomic_lm.cpp @@ -1,11 +1,12 @@ #include "ORB_atomic_lm.h" -#include "module_base/sph_bessel_recursive.h" + #include "module_parameter/parameter.h" -#include "module_base/blas_connector.h" -#include "module_base/timer.h" -#include "module_base/math_integral.h" -#include "module_base/math_sphbes.h" -#include "module_base/constants.h" +#include "source_base/blas_connector.h" +#include "source_base/constants.h" +#include "source_base/math_integral.h" +#include "source_base/math_sphbes.h" +#include "source_base/sph_bessel_recursive.h" +#include "source_base/timer.h" #ifdef _OPENMP #include @@ -13,761 +14,818 @@ Numerical_Orbital_Lm::Numerical_Orbital_Lm() { - label = ""; - index_atom_type = 0; - angular_momentum_l = 0; - index_chi = 0; + label = ""; + index_atom_type = 0; + angular_momentum_l = 0; + index_chi = 0; - nr=1; - nk=1; + nr = 1; + nk = 1; - rcut=0.0; - kcut=0.0; - dk=0.0; + rcut = 0.0; + kcut = 0.0; + dk = 0.0; - nr_uniform = 1; - dr_uniform = -1.0; - zty = 0.0; + nr_uniform = 1; + dr_uniform = -1.0; + zty = 0.0; } Numerical_Orbital_Lm::~Numerical_Orbital_Lm() -{} - -void Numerical_Orbital_Lm::set_orbital_info -( - const std::string &label_in, - const int &index_atom_type_in, - const int &angular_momentum_l_in, - const int &index_chi_in, - const int &nr_in, - const double *rab_in, - const double *r_radial_in, - const Psi_Type &psi_type, // Peize Lin add 2017-12-12 - const double *psi_in, - const int &nk_in, - const double &dk_in, - // Peize Lin delete lat0 2016-02-03 - const double &dr_uniform_in, - bool flag_plot, // Peize Lin add flag_plot 2016-08-31 - bool flag_sbpool, // Peize Lin add flag_sbpool 2017-10-02 - const bool &force_flag // mohan add 2021-05-07 +{ +} + +void Numerical_Orbital_Lm::set_orbital_info(const std::string& label_in, + const int& index_atom_type_in, + const int& angular_momentum_l_in, + const int& index_chi_in, + const int& nr_in, + const double* rab_in, + const double* r_radial_in, + const Psi_Type& psi_type, // Peize Lin add 2017-12-12 + const double* psi_in, + const int& nk_in, + const double& dk_in, + // Peize Lin delete lat0 2016-02-03 + const double& dr_uniform_in, + bool flag_plot, // Peize Lin add flag_plot 2016-08-31 + bool flag_sbpool, // Peize Lin add flag_sbpool 2017-10-02 + const bool& force_flag // mohan add 2021-05-07 ) { - copy_parameter( - label_in, - index_atom_type_in, - angular_momentum_l_in, - index_chi_in, - nr_in, - rab_in, - r_radial_in, - nk_in, - dk_in, - dr_uniform_in); - - switch(psi_type) - { - case Psi_Type::Psi: - for (int ir = 0; ir < nr; ir++) - { - this->psi[ir] = psi_in[ir]; - this->psir[ir] = psi[ir] * r_radial[ir]; //mohan 2010-04-19 - } - break; - case Psi_Type::Psif: - for( int ik=0; ik!=nk; ++ik ) - { - this->psif[ik] = psi_in[ik]; - this->psik[ik] = psif[ik] * k_radial[ik]; - this->psik2[ik] = psik[ik] * k_radial[ik]; - } - break; - case Psi_Type::Psik: - psif.resize(0); - for( int ik=0; ik!=nk; ++ik ) - { - this->psik[ik] = psi_in[ik]; - this->psik2[ik] = psik[ik] * k_radial[ik]; - } - break; - case Psi_Type::Psik2: - psif.resize(0); - psik.resize(0); - for( int ik=0; ik!=nk; ++ik ) - this->psik2[ik] = psi_in[ik]; - break; - default: - throw std::domain_error(std::string(__FILE__)+" line "+std::to_string(__LINE__)); - } - - switch(psi_type) - { - case Psi_Type::Psif: - case Psi_Type::Psik: - case Psi_Type::Psik2: - if( flag_sbpool ) - { - this->cal_rradial_sbpool(); - } - else - { - throw std::domain_error("flag_sbpool false not finished in Numerical_Orbital_Lm::set_orbital_info_k. "+std::string(__FILE__)+" line "+std::to_string(__LINE__)); - } - break; - default: break; - } - - //liaochen modify on 2010/4/7 - //we do SBT on regular mesh - //so we first generate psi_uniform first - //we put uniform in ahead of cal_kradial - - /* - bool uni = true; - if (uni) - { - this->extra_uniform(dr_uniform, force_flag); - } - else - { - this->use_uniform(dr_uniform); - } - */ - this->extra_uniform(dr_uniform, force_flag); - - switch(psi_type) - { - case Psi_Type::Psi: - if( flag_sbpool ) - { - this->cal_kradial_sbpool(); - } - else - { - this->cal_kradial(); - } - break; - default: break; - } - -// this->norm_test(); // Peize Lin delete 2016-08-31 - if( flag_plot ) - { - this->plot(); // Peize Lin add flag_plot 2016-08-31 - } - return; + copy_parameter(label_in, + index_atom_type_in, + angular_momentum_l_in, + index_chi_in, + nr_in, + rab_in, + r_radial_in, + nk_in, + dk_in, + dr_uniform_in); + + switch (psi_type) + { + case Psi_Type::Psi: + for (int ir = 0; ir < nr; ir++) + { + this->psi[ir] = psi_in[ir]; + this->psir[ir] = psi[ir] * r_radial[ir]; // mohan 2010-04-19 + } + break; + case Psi_Type::Psif: + for (int ik = 0; ik != nk; ++ik) + { + this->psif[ik] = psi_in[ik]; + this->psik[ik] = psif[ik] * k_radial[ik]; + this->psik2[ik] = psik[ik] * k_radial[ik]; + } + break; + case Psi_Type::Psik: + psif.resize(0); + for (int ik = 0; ik != nk; ++ik) + { + this->psik[ik] = psi_in[ik]; + this->psik2[ik] = psik[ik] * k_radial[ik]; + } + break; + case Psi_Type::Psik2: + psif.resize(0); + psik.resize(0); + for (int ik = 0; ik != nk; ++ik) + this->psik2[ik] = psi_in[ik]; + break; + default: + throw std::domain_error(std::string(__FILE__) + " line " + std::to_string(__LINE__)); + } + + switch (psi_type) + { + case Psi_Type::Psif: + case Psi_Type::Psik: + case Psi_Type::Psik2: + if (flag_sbpool) + { + this->cal_rradial_sbpool(); + } + else + { + throw std::domain_error("flag_sbpool false not finished in Numerical_Orbital_Lm::set_orbital_info_k. " + + std::string(__FILE__) + " line " + std::to_string(__LINE__)); + } + break; + default: + break; + } + + // liaochen modify on 2010/4/7 + // we do SBT on regular mesh + // so we first generate psi_uniform first + // we put uniform in ahead of cal_kradial + + /* + bool uni = true; + if (uni) + { + this->extra_uniform(dr_uniform, force_flag); + } + else + { + this->use_uniform(dr_uniform); + } + */ + this->extra_uniform(dr_uniform, force_flag); + + switch (psi_type) + { + case Psi_Type::Psi: + if (flag_sbpool) + { + this->cal_kradial_sbpool(); + } + else + { + this->cal_kradial(); + } + break; + default: + break; + } + + // this->norm_test(); // Peize Lin delete 2016-08-31 + if (flag_plot) + { + this->plot(); // Peize Lin add flag_plot 2016-08-31 + } + return; } -void Numerical_Orbital_Lm::copy_parameter( - const std::string &label_in, - const int &index_atom_type_in, - const int &angular_momentum_l_in, - const int &index_chi_in, - const int &nr_in, - const double *rab_in, - const double *r_radial_in, - const int &nk_in, - const double &dk_in, - const double &dr_uniform_in) +void Numerical_Orbital_Lm::copy_parameter(const std::string& label_in, + const int& index_atom_type_in, + const int& angular_momentum_l_in, + const int& index_chi_in, + const int& nr_in, + const double* rab_in, + const double* r_radial_in, + const int& nk_in, + const double& dk_in, + const double& dr_uniform_in) { this->label = label_in; this->index_atom_type = index_atom_type_in; this->angular_momentum_l = angular_momentum_l_in; this->index_chi = index_chi_in; - assert(nr_in>=2); -// assert(nr_in<10000); // Peize Lin delete 2017-12-03 - assert(nr%2!=0); + assert(nr_in >= 2); + // assert(nr_in<10000); // Peize Lin delete 2017-12-03 + assert(nr % 2 != 0); this->nr = nr_in; - assert(r_radial_in[nr-1]>0.0); + assert(r_radial_in[nr - 1] > 0.0); // assert(r_radial_in[nr-1]<50); // Peize Lin delete 2017-08-18 - this->rcut = r_radial_in[nr-1]; - assert(nk_in>1); - //assert(nk_in<10000); // Jiyy delete 2022-07-18 + this->rcut = r_radial_in[nr - 1]; + assert(nk_in > 1); + // assert(nk_in<10000); // Jiyy delete 2022-07-18 this->nk = nk_in; - assert(nk%2!=0); - assert(dk_in>0); + assert(nk % 2 != 0); + assert(dk_in > 0); this->dk = dk_in; - this->dr_uniform=dr_uniform_in; - - /*********************************************************** - be careful! LiaoChen modify on 2010/4/21 - ************************************************************/ -// this->dk = ModuleBase::PI / rcut / 2.0; -// this->nk = this->nr; - - r_radial.resize(nr); - rab.resize(nr); - psi.resize(nr); - psir.resize(nr); - for (int ir = 0; ir < nr; ir++) - { - this->r_radial[ir] = r_radial_in[ir]; - this->rab[ir] = rab_in[ir]; - } - - k_radial.resize(nk); - psif.resize(nk); - psik.resize(nk); - psik2.resize(nk); - for (int ik = 0; ik < nk; ik++) - { - this->k_radial[ik] = ik * this->dk; - } - this->kcut = (nk-1) * this->dk; + this->dr_uniform = dr_uniform_in; + + /*********************************************************** + be careful! LiaoChen modify on 2010/4/21 + ************************************************************/ + // this->dk = ModuleBase::PI / rcut / 2.0; + // this->nk = this->nr; + + r_radial.resize(nr); + rab.resize(nr); + psi.resize(nr); + psir.resize(nr); + for (int ir = 0; ir < nr; ir++) + { + this->r_radial[ir] = r_radial_in[ir]; + this->rab[ir] = rab_in[ir]; + } + + k_radial.resize(nk); + psif.resize(nk); + psik.resize(nk); + psik2.resize(nk); + for (int ik = 0; ik < nk; ik++) + { + this->k_radial[ik] = ik * this->dk; + } + this->kcut = (nk - 1) * this->dk; } -#include "module_base/mathzone_add1.h" -void Numerical_Orbital_Lm::extra_uniform(const double &dr_uniform_in, const bool &force_flag) +#include "source_base/mathzone_add1.h" +void Numerical_Orbital_Lm::extra_uniform(const double& dr_uniform_in, const bool& force_flag) { - ModuleBase::timer::tick("NOrbital_Lm", "extra_uniform"); - - //--------------------------------------------- - // set the dr, fixed by liaochen. - // calculate the number of radial mesh points. - //--------------------------------------------- - assert(dr_uniform>0.0); - this->dr_uniform = dr_uniform_in; - this->nr_uniform = static_cast(rcut/dr_uniform) + 10; - - this->psi_uniform.resize(nr_uniform,0); - - // do interpolation here to make grid more dense + ModuleBase::timer::tick("NOrbital_Lm", "extra_uniform"); + + //--------------------------------------------- + // set the dr, fixed by liaochen. + // calculate the number of radial mesh points. + //--------------------------------------------- + assert(dr_uniform > 0.0); + this->dr_uniform = dr_uniform_in; + this->nr_uniform = static_cast(rcut / dr_uniform) + 10; + + this->psi_uniform.resize(nr_uniform, 0); + + // do interpolation here to make grid more dense #ifdef _OPENMP - #pragma omp parallel for schedule(static) +#pragma omp parallel for schedule(static) #endif - for (int ir = 0; ir < this->nr_uniform; ir++) - { - const double psi_uniform_tmp = - ModuleBase::Mathzone_Add1::Uni_RadialF(ModuleBase::GlobalFunc::VECTOR_TO_PTR(this->psi), this->nr, this->rab[0], ir * dr_uniform); - this->psi_uniform[ir] = psi_uniform_tmp; -// this->psi_uniform[ir] = ModuleBase::Mathzone::Polynomial_Interpolation(this->psi, this->nr, this->rab[0], ir * dr_uniform); - } - - //---------------------------------------------- - // calculate the dpsi_uniform - //---------------------------------------------- - this->dpsi_uniform.resize(this->nr_uniform); - this->ddpsi_uniform.resize(this->nr_uniform); - - double* y2 = new double[nr]; - - //-------------------------------------------------------------------------- - // old code to calculate the derivate dpsi/dr, - // has problem that the derivatives of orbitals oscillate a lot - // around r=0 - //-------------------------------------------------------------------------- - //ModuleBase::Mathzone_Add1::SplineD2 (r_radial, psi, nr, 100000.0, 100000.0, y2); - //double yp1=(this->psi[1]-this->psi[0])/this->r_radial[1]; - //std::cout<<"psi0="<<" "<psi[0]<<" "<<"psi1="<<" "<psi[1]<<" "<<"r1="<<" "<r_radial[1]<angular_momentum_l ) // added by pengfei 13-8-8 different l has different boundary conditions - { - case 0: ModuleBase::Mathzone_Add1::SplineD2 (ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_radial), ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi), nr, 0.0, 0.0, y2); break; - case 1: ModuleBase::Mathzone_Add1::SplineD2 (ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_radial), ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi), nr, 100000.0, 100000.0, y2); break; - case 2: ModuleBase::Mathzone_Add1::SplineD2 (ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_radial), ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi), nr, 0.0, 0.0, y2); break; - case 3: ModuleBase::Mathzone_Add1::SplineD2 (ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_radial), ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi), nr, 100000.0, 100000.0, y2); break; - case 4: ModuleBase::Mathzone_Add1::SplineD2 (ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_radial), ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi), nr, 0.0, 0.0, y2); break; - default: - //GlobalV::ofs_warning << " The angular momentum larger than 4 (g orbitals) may be error about eggbox. " << std::endl; - //GlobalV::ofs_warning << " Check file " << __FILE__ << " line " << __LINE__ <angular_momentum_l<psi_uniform), - this->nr_uniform, - dr_uniform, - angular_momentum_l, - tmp); - - this->zty = tmp[0]/ModuleBase::Mathzone_Add1::factorial (angular_momentum_l); - } - - delete [] y2; - delete [] rad; - delete [] tmp; - ModuleBase::timer::tick("NOrbital_Lm", "extra_uniform"); + for (int ir = 0; ir < this->nr_uniform; ir++) + { + const double psi_uniform_tmp + = ModuleBase::Mathzone_Add1::Uni_RadialF(ModuleBase::GlobalFunc::VECTOR_TO_PTR(this->psi), + this->nr, + this->rab[0], + ir * dr_uniform); + this->psi_uniform[ir] = psi_uniform_tmp; + // this->psi_uniform[ir] = ModuleBase::Mathzone::Polynomial_Interpolation(this->psi, this->nr, + // this->rab[0], ir * dr_uniform); + } + + //---------------------------------------------- + // calculate the dpsi_uniform + //---------------------------------------------- + this->dpsi_uniform.resize(this->nr_uniform); + this->ddpsi_uniform.resize(this->nr_uniform); + + double* y2 = new double[nr]; + + //-------------------------------------------------------------------------- + // old code to calculate the derivate dpsi/dr, + // has problem that the derivatives of orbitals oscillate a lot + // around r=0 + //-------------------------------------------------------------------------- + // ModuleBase::Mathzone_Add1::SplineD2 (r_radial, psi, nr, 100000.0, 100000.0, y2); + // double yp1=(this->psi[1]-this->psi[0])/this->r_radial[1]; + // std::cout<<"psi0="<<" "<psi[0]<<" "<<"psi1="<<" "<psi[1]<<" "<<"r1="<<" + // "<r_radial[1]<angular_momentum_l) // added by pengfei 13-8-8 different l has different boundary conditions + { + case 0: + ModuleBase::Mathzone_Add1::SplineD2(ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_radial), + ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi), + nr, + 0.0, + 0.0, + y2); + break; + case 1: + ModuleBase::Mathzone_Add1::SplineD2(ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_radial), + ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi), + nr, + 100000.0, + 100000.0, + y2); + break; + case 2: + ModuleBase::Mathzone_Add1::SplineD2(ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_radial), + ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi), + nr, + 0.0, + 0.0, + y2); + break; + case 3: + ModuleBase::Mathzone_Add1::SplineD2(ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_radial), + ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi), + nr, + 100000.0, + 100000.0, + y2); + break; + case 4: + ModuleBase::Mathzone_Add1::SplineD2(ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_radial), + ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi), + nr, + 0.0, + 0.0, + y2); + break; + default: + // GlobalV::ofs_warning << " The angular momentum larger than 4 (g orbitals) may be error about eggbox. " << + // std::endl; GlobalV::ofs_warning << " Check file " << __FILE__ << " line " << __LINE__ <angular_momentum_l<psi_uniform), + this->nr_uniform, + dr_uniform, + angular_momentum_l, + tmp); + + this->zty = tmp[0] / ModuleBase::Mathzone_Add1::factorial(angular_momentum_l); + } + + delete[] y2; + delete[] rad; + delete[] tmp; + ModuleBase::timer::tick("NOrbital_Lm", "extra_uniform"); } /* void Numerical_Orbital_Lm::use_uniform(const double &dr_uniform_in) { - assert(dr_uniform_in>0.0); - this->dr_uniform = dr_uniform_in; - // for save: +10, because in real space interpolation, - // there may be "one grid point" more than the cutoff. - this->nr_uniform = static_cast(rcut/dr_uniform)+10; - - this->psi_uniform.resize(nr_uniform,0); - - std::string orbital_type; - // Peize Lin update 2016-08-31 - if( 0==this->angular_momentum_l ) - { - orbital_type = 's'; - } - else if( 1==this->angular_momentum_l ) - { - orbital_type = 'p'; - } - else if( 2==this->angular_momentum_l ) - { - orbital_type = 'd'; - } - else if( 3<=this->angular_momentum_l && this->angular_momentum_l<=6 ) - { - orbital_type = 'f'+this->angular_momentum_l-3; - } - else if( 7<=this->angular_momentum_l && this->angular_momentum_l<=11 ) - { - orbital_type = 'k'+this->angular_momentum_l-7; - } - else - { - orbital_type = "L" + ModuleBase::GlobalFunc::TO_STRING(this->angular_momentum_l); - } - - std::cout << "===========================================================" << std::endl; - for(int i=0; ipsi_uniform[i] = - ModuleBase::Mathzone_Add1::Uni_RadialF(ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi), this->nr, this->rab[0], i*dr_uniform); - } - - this->dpsi_uniform.resize(nr_uniform); - - ModuleBase::Mathzone_Add1::Uni_Deriv_Phi ( - ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi_uniform), - nr_uniform, dr_uniform, - 1, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(dpsi_uniform)); + assert(dr_uniform_in>0.0); + this->dr_uniform = dr_uniform_in; + // for save: +10, because in real space interpolation, + // there may be "one grid point" more than the cutoff. + this->nr_uniform = static_cast(rcut/dr_uniform)+10; + + this->psi_uniform.resize(nr_uniform,0); + + std::string orbital_type; + // Peize Lin update 2016-08-31 + if( 0==this->angular_momentum_l ) + { + orbital_type = 's'; + } + else if( 1==this->angular_momentum_l ) + { + orbital_type = 'p'; + } + else if( 2==this->angular_momentum_l ) + { + orbital_type = 'd'; + } + else if( 3<=this->angular_momentum_l && this->angular_momentum_l<=6 ) + { + orbital_type = 'f'+this->angular_momentum_l-3; + } + else if( 7<=this->angular_momentum_l && this->angular_momentum_l<=11 ) + { + orbital_type = 'k'+this->angular_momentum_l-7; + } + else + { + orbital_type = "L" + ModuleBase::GlobalFunc::TO_STRING(this->angular_momentum_l); + } + + std::cout << "===========================================================" << std::endl; + for(int i=0; ipsi_uniform[i] = + ModuleBase::Mathzone_Add1::Uni_RadialF(ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi), this->nr, this->rab[0], +i*dr_uniform); + } + + this->dpsi_uniform.resize(nr_uniform); + + ModuleBase::Mathzone_Add1::Uni_Deriv_Phi ( + ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi_uniform), + nr_uniform, dr_uniform, + 1, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(dpsi_uniform)); #ifdef __NORMAL -#else - if(GlobalV::MY_RANK==0) - { - std::stringstream ss; - ss << PARAM.globalv.global_out_dir << this->label << "/" - << this->label << "-" << orbital_type << ".ORBITAL_NOR_uniform.txt"; - - std::ofstream ofs(ss.str().c_str()); - - for(int i=0; ilabel << "/" + << this->label << "-" << orbital_type << ".ORBITAL_NOR_uniform.txt"; + + std::ofstream ofs(ss.str().c_str()); + + for(int i=0; inr > 0); - assert( this->nr_uniform > 0); - double *jl = new double[nr]; - double *integrated_func = new double[nr]; - - const double pref = sqrt( 2.0 / ModuleBase::PI ); - //Sbt method - - /* - double* rad = new double[nr_uniform]; - for (int ir = 0; ir < nr_uniform; ir++) - { - rad[ir] = dr_uniform * ir; - } - - //liaochen add - ModuleBase::Mathzone_Add1::Sbt_new (3, angular_momentum_l, - k_radial, dk, nk, - rad, dr_uniform, nr_uniform, - psi_uniform, 0, this->psik); - - for (int ik = 0; ik < nk; ik++) this->psik[ik] *= (pref*k_radial[ik]); - delete [] rad; - */ - - //integration directly - for (int ik = 0; ik < nk; ik++) - { - ModuleBase::Sphbes::Spherical_Bessel( - this->nr, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(this->r_radial), - this->k_radial[ik], - this->angular_momentum_l, - jl); - - for (int ir = 0; ir < nr; ir++) - { - integrated_func[ir] = this->psir[ir] * this->r_radial[ir] * jl[ir]; - } - - ModuleBase::Integral::Simpson_Integral( - this->nr, - integrated_func, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(this->rab), - this->psif[ik]); - this->psif[ik] *= pref; - this->psik[ik] = this->psif[ik] * k_radial[ik]; - this->psik2[ik] = this->psik[ik] * k_radial[ik]; - } - - delete[] integrated_func; - delete[] jl; + assert(this->nr > 0); + assert(this->nr_uniform > 0); + double* jl = new double[nr]; + double* integrated_func = new double[nr]; + + const double pref = sqrt(2.0 / ModuleBase::PI); + // Sbt method + + /* + double* rad = new double[nr_uniform]; + for (int ir = 0; ir < nr_uniform; ir++) + { + rad[ir] = dr_uniform * ir; + } + + //liaochen add + ModuleBase::Mathzone_Add1::Sbt_new (3, angular_momentum_l, + k_radial, dk, nk, + rad, dr_uniform, nr_uniform, + psi_uniform, 0, this->psik); + + for (int ik = 0; ik < nk; ik++) this->psik[ik] *= (pref*k_radial[ik]); + delete [] rad; + */ + + // integration directly + for (int ik = 0; ik < nk; ik++) + { + ModuleBase::Sphbes::Spherical_Bessel(this->nr, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(this->r_radial), + this->k_radial[ik], + this->angular_momentum_l, + jl); + + for (int ir = 0; ir < nr; ir++) + { + integrated_func[ir] = this->psir[ir] * this->r_radial[ir] * jl[ir]; + } + + ModuleBase::Integral::Simpson_Integral(this->nr, + integrated_func, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(this->rab), + this->psif[ik]); + this->psif[ik] *= pref; + this->psik[ik] = this->psif[ik] * k_radial[ik]; + this->psik2[ik] = this->psik[ik] * k_radial[ik]; + } + + delete[] integrated_func; + delete[] jl; } /* // Peize Lin add 2017-10-02 void Numerical_Orbital_Lm::cal_kradial_sbpool(void) { - assert( this->nr > 0); - assert( this->nr_uniform > 0); - - // dr must be all the same for Sph_Bessel_Recursive_Pool and Simpson_Integral - const double dr = this->rab[0]; - for( size_t ir=1; irnr; ++ir ) - assert( dr == this->rab[ir] ); - - ModuleBase::Sph_Bessel_Recursive::D2* pSB = nullptr; - for( auto & sb : Sph_Bessel_Recursive_Pool::D2::sb_pool ) - if( this->dk * dr == sb.get_dx() ) - { - pSB = &sb; - break; - } - if(!pSB) - { - Sph_Bessel_Recursive_Pool::D2::sb_pool.push_back({}); - pSB = &Sph_Bessel_Recursive_Pool::D2::sb_pool.back(); - } - pSB->set_dx( this->dk * dr ); - pSB->cal_jlx( this->angular_momentum_l, this->nk, this->nr ); - const std::vector> &jl = pSB->get_jlx()[this->angular_momentum_l]; - - std::vector integrated_func( this->nr ); - const double pref = sqrt( 2.0 / ModuleBase::PI ); - - std::vector psir2(nr); - for( size_t ir=0; ir!=nr; ++ir ) - psir2[ir] = this->psir[ir] * this->r_radial[ir]; - - for (int ik = 0; ik < nk; ik++) - { - const std::vector &jlk = jl[ik]; - for (int ir = 0; ir < nr; ir++) - integrated_func[ir] = psir2[ir] * jlk[ir]; - ModuleBase::Integral::Simpson_Integral( - this->nr, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(integrated_func), - dr, - this->psik[ik]); - this->psik[ik] *= ( pref * k_radial[ik]); - } + assert( this->nr > 0); + assert( this->nr_uniform > 0); + + // dr must be all the same for Sph_Bessel_Recursive_Pool and Simpson_Integral + const double dr = this->rab[0]; + for( size_t ir=1; irnr; ++ir ) + assert( dr == this->rab[ir] ); + + ModuleBase::Sph_Bessel_Recursive::D2* pSB = nullptr; + for( auto & sb : Sph_Bessel_Recursive_Pool::D2::sb_pool ) + if( this->dk * dr == sb.get_dx() ) + { + pSB = &sb; + break; + } + if(!pSB) + { + Sph_Bessel_Recursive_Pool::D2::sb_pool.push_back({}); + pSB = &Sph_Bessel_Recursive_Pool::D2::sb_pool.back(); + } + pSB->set_dx( this->dk * dr ); + pSB->cal_jlx( this->angular_momentum_l, this->nk, this->nr ); + const std::vector> &jl = pSB->get_jlx()[this->angular_momentum_l]; + + std::vector integrated_func( this->nr ); + const double pref = sqrt( 2.0 / ModuleBase::PI ); + + std::vector psir2(nr); + for( size_t ir=0; ir!=nr; ++ir ) + psir2[ir] = this->psir[ir] * this->r_radial[ir]; + + for (int ik = 0; ik < nk; ik++) + { + const std::vector &jlk = jl[ik]; + for (int ir = 0; ir < nr; ir++) + integrated_func[ir] = psir2[ir] * jlk[ir]; + ModuleBase::Integral::Simpson_Integral( + this->nr, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(integrated_func), + dr, + this->psik[ik]); + this->psik[ik] *= ( pref * k_radial[ik]); + } } */ // Peize Lin add 2017-10-27 void Numerical_Orbital_Lm::cal_kradial_sbpool(void) { - assert( this->nr > 0); - assert( this->nr_uniform > 0); - - // dr must be all the same for Sph_Bessel_Recursive_Pool - const double dr = this->rab[0]; - - for( int ir=1; irnr; ++ir ) - { - assert( dr == this->rab[ir] ); - } - - ModuleBase::Sph_Bessel_Recursive::D2* pSB = nullptr; - for( auto & sb : ModuleBase::Sph_Bessel_Recursive_Pool::D2::sb_pool ) - { - if( this->dk * dr == sb.get_dx() ) - { - pSB = &sb; - break; - } - } - - if(!pSB) - { - ModuleBase::Sph_Bessel_Recursive_Pool::D2::sb_pool.push_back({}); - pSB = &ModuleBase::Sph_Bessel_Recursive_Pool::D2::sb_pool.back(); - } - pSB->set_dx( this->dk * dr ); - pSB->cal_jlx( this->angular_momentum_l, this->nk, this->nr ); - const std::vector> &jl = pSB->get_jlx()[this->angular_momentum_l]; - - const double pref = sqrt( 2.0 / ModuleBase::PI ); - - std::vector r_tmp(nr); - for( int ir=0; ir!=nr; ++ir ) - { - r_tmp[ir] = this->psir[ir] * this->r_radial[ir] * this->rab[ir]; - } - - constexpr double one_three=1.0/3.0, two_three=2.0/3.0, four_three=4.0/3.0; - r_tmp[0]*=one_three; - r_tmp[nr-1]*=one_three; - - for( int ir=1; ir!=nr-1; ++ir ) - { - r_tmp[ir] *= (ir&1) ? four_three : two_three; - } + assert(this->nr > 0); + assert(this->nr_uniform > 0); + + // dr must be all the same for Sph_Bessel_Recursive_Pool + const double dr = this->rab[0]; + + for (int ir = 1; ir < this->nr; ++ir) + { + assert(dr == this->rab[ir]); + } + + ModuleBase::Sph_Bessel_Recursive::D2* pSB = nullptr; + for (auto& sb: ModuleBase::Sph_Bessel_Recursive_Pool::D2::sb_pool) + { + if (this->dk * dr == sb.get_dx()) + { + pSB = &sb; + break; + } + } + + if (!pSB) + { + ModuleBase::Sph_Bessel_Recursive_Pool::D2::sb_pool.push_back({}); + pSB = &ModuleBase::Sph_Bessel_Recursive_Pool::D2::sb_pool.back(); + } + pSB->set_dx(this->dk * dr); + pSB->cal_jlx(this->angular_momentum_l, this->nk, this->nr); + const std::vector>& jl = pSB->get_jlx()[this->angular_momentum_l]; + + const double pref = sqrt(2.0 / ModuleBase::PI); + + std::vector r_tmp(nr); + for (int ir = 0; ir != nr; ++ir) + { + r_tmp[ir] = this->psir[ir] * this->r_radial[ir] * this->rab[ir]; + } + + constexpr double one_three = 1.0 / 3.0, two_three = 2.0 / 3.0, four_three = 4.0 / 3.0; + r_tmp[0] *= one_three; + r_tmp[nr - 1] *= one_three; + + for (int ir = 1; ir != nr - 1; ++ir) + { + r_tmp[ir] *= (ir & 1) ? four_three : two_three; + } #ifdef _OPENMP - #pragma omp parallel for schedule(static) +#pragma omp parallel for schedule(static) #endif - for (int ik = 0; ik < nk; ik++) - { + for (int ik = 0; ik < nk; ik++) + { #ifdef __NORMAL - double psi_f_tmp = 0.0; - for(int ir=0; irnr, ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_tmp), 1, ModuleBase::GlobalFunc::VECTOR_TO_PTR(jl[ik]), 1 ) ; + const double psi_f_tmp = pref + * BlasConnector::dot(this->nr, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_tmp), + 1, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(jl[ik]), + 1); #endif - this->psif[ik] = psi_f_tmp; - this->psik[ik] = psi_f_tmp * k_radial[ik]; - this->psik2[ik] = this->psik[ik] * k_radial[ik]; - } - return; + this->psif[ik] = psi_f_tmp; + this->psik[ik] = psi_f_tmp * k_radial[ik]; + this->psik2[ik] = this->psik[ik] * k_radial[ik]; + } + return; } // Peize Lin add 2017-12-11 void Numerical_Orbital_Lm::cal_rradial_sbpool(void) { - // dr must be all the same for Sph_Bessel_Recursive_Pool - const double dr = this->rab[0]; + // dr must be all the same for Sph_Bessel_Recursive_Pool + const double dr = this->rab[0]; - for( int ir=1; irnr; ++ir ) - { - assert( dr == this->rab[ir] ); - } + for (int ir = 1; ir < this->nr; ++ir) + { + assert(dr == this->rab[ir]); + } - ModuleBase::Sph_Bessel_Recursive::D2* pSB = nullptr; - for( auto & sb : ModuleBase::Sph_Bessel_Recursive_Pool::D2::sb_pool ) - { - if( dr * dk == sb.get_dx() ) - { - pSB = &sb; - break; - } - } + ModuleBase::Sph_Bessel_Recursive::D2* pSB = nullptr; + for (auto& sb: ModuleBase::Sph_Bessel_Recursive_Pool::D2::sb_pool) + { + if (dr * dk == sb.get_dx()) + { + pSB = &sb; + break; + } + } - if(!pSB) - { - ModuleBase::Sph_Bessel_Recursive_Pool::D2::sb_pool.push_back({}); - pSB = &ModuleBase::Sph_Bessel_Recursive_Pool::D2::sb_pool.back(); - } + if (!pSB) + { + ModuleBase::Sph_Bessel_Recursive_Pool::D2::sb_pool.push_back({}); + pSB = &ModuleBase::Sph_Bessel_Recursive_Pool::D2::sb_pool.back(); + } - pSB->set_dx( dr * dk ); - pSB->cal_jlx( this->angular_momentum_l, this->nr, this->nk ); + pSB->set_dx(dr * dk); + pSB->cal_jlx(this->angular_momentum_l, this->nr, this->nk); - const std::vector> &jl = pSB->get_jlx()[this->angular_momentum_l]; + const std::vector>& jl = pSB->get_jlx()[this->angular_momentum_l]; - const double pref = sqrt(2.0/ModuleBase::PI); + const double pref = sqrt(2.0 / ModuleBase::PI); - std::vector k_tmp(nk); + std::vector k_tmp(nk); - for( int ik=0; ik!=nk; ++ik ) - { - k_tmp[ik] = this->psik2[ik] * dk; - } + for (int ik = 0; ik != nk; ++ik) + { + k_tmp[ik] = this->psik2[ik] * dk; + } - constexpr double one_three=1.0/3.0, two_three=2.0/3.0, four_three=4.0/3.0; + constexpr double one_three = 1.0 / 3.0, two_three = 2.0 / 3.0, four_three = 4.0 / 3.0; - k_tmp[0]*=one_three; - k_tmp[nk-1]*=one_three; + k_tmp[0] *= one_three; + k_tmp[nk - 1] *= one_three; - for( int ik=1; ik!=nk-1; ++ik ) - { - k_tmp[ik] *= (ik&1) ? four_three : two_three; - } + for (int ik = 1; ik != nk - 1; ++ik) + { + k_tmp[ik] *= (ik & 1) ? four_three : two_three; + } - for( int ir = 0; ir!=nr; ++ir ) - { + for (int ir = 0; ir != nr; ++ir) + { #ifdef __NORMAL - // mohan add 2021-05-08, test needed - double kj_dot = 0.0; - for( int ik=0; ikpsi[ir] = pref * kj_dot; + // mohan add 2021-05-08, test needed + double kj_dot = 0.0; + for (int ik = 0; ik < nk; ++ik) + { + kj_dot += k_tmp[ik] * jl[ir][ik]; + } + this->psi[ir] = pref * kj_dot; #else - this->psi[ir] = pref * BlasConnector::dot( this->nk, ModuleBase::GlobalFunc::VECTOR_TO_PTR(k_tmp), 1, ModuleBase::GlobalFunc::VECTOR_TO_PTR(jl[ir]), 1 ); + this->psi[ir] = pref + * BlasConnector::dot(this->nk, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(k_tmp), + 1, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(jl[ir]), + 1); #endif - this->psir[ir] = this->psi[ir] * r_radial[ir]; - } + this->psir[ir] = this->psi[ir] * r_radial[ir]; + } } //=============================================== -//FOUND LOCAL VARIABLE -//asum : integral of psi*psi in whole space +// FOUND LOCAL VARIABLE +// asum : integral of psi*psi in whole space //=============================================== /* void Numerical_Orbital_Lm::norm_test(void)const { // ModuleBase::TITLE(ofs_onscaling, "Numerical_Orbital_Lm", "norm_test"); - //double asum_r = 0.0; - //double asum_k = 0.0; - - // note here psir = psi * r - double *f = new double[nr]; - for(int ir=0; irpsir[ir] * this->psir[ir]; - } + //double asum_r = 0.0; + //double asum_k = 0.0; + + // note here psir = psi * r + double *f = new double[nr]; + for(int ir=0; irpsir[ir] * this->psir[ir]; + } - double sumr = 0.0; - //double sumk = 0.0; + double sumr = 0.0; + //double sumk = 0.0; - ModuleBase::Integral::Simpson_Integral(this->nr, f, ModuleBase::GlobalFunc::VECTOR_TO_PTR(this->rab), sumr); + ModuleBase::Integral::Simpson_Integral(this->nr, f, ModuleBase::GlobalFunc::VECTOR_TO_PTR(this->rab), sumr); - delete[] f; - f = new double[nk]; - for(int ik=0; ikpsik[ik] * this->psik[ik]; - } + delete[] f; + f = new double[nk]; + for(int ik=0; ikpsik[ik] * this->psik[ik]; + } // ModuleBase::Integral::Simpson_Integral(this->nk, f, this->k_radial, sumk); - - //means nothing. - //GlobalV::ofs_running << std::setw(12) << sumk << std::endl; - delete[] f; - return; + //means nothing. + //GlobalV::ofs_running << std::setw(12) << sumk << std::endl; + + delete[] f; + return; } */ -void Numerical_Orbital_Lm::plot(void)const +void Numerical_Orbital_Lm::plot(void) const { - ModuleBase::TITLE("Numerical_Orbital_Lm","plot"); - - std::string orbital_type; - // Peize Lin update 2016-08-31 - if( 0==this->angular_momentum_l ) - { - orbital_type = 's'; - } - else if( 1==this->angular_momentum_l ) - { - orbital_type = 'p'; - } - else if( 2==this->angular_momentum_l ) - { - orbital_type = 'd'; - } - else if( 3<=this->angular_momentum_l && this->angular_momentum_l<=6 ) - { - orbital_type = 'f' + this->angular_momentum_l - 3; - } - else if( 7<=this->angular_momentum_l && this->angular_momentum_l<=11 ) - { - orbital_type = 'k' + this->angular_momentum_l - 7; - } - else - { - orbital_type = "L" + ModuleBase::GlobalFunc::TO_STRING(this->angular_momentum_l); - } - - if(GlobalV::MY_RANK==0) - { - std::stringstream ssr, ssk, ssru ,ssdru; // 2013-08-10 pengfei - ssr << PARAM.globalv.global_out_dir << this->label << "/" - << this->label << "-"<< orbital_type << index_chi+1 << "-orbital-r.dat"; - - ssk << PARAM.globalv.global_out_dir << this->label << "/" - << this->label << "-" << orbital_type << index_chi+1 << "-orbital-k.dat"; - - ssru << PARAM.globalv.global_out_dir << this->label << "/" - << this->label << "-" << orbital_type << index_chi+1 << "-orbital-ru.dat"; - - ssdru << PARAM.globalv.global_out_dir << this->label << "/" // 2013-08-10 pengfei - << this->label << "-" << orbital_type << index_chi+1 << "-orbital-dru.dat"; - - std::ofstream ofsr(ssr.str().c_str()); - std::ofstream ofsk(ssk.str().c_str()); - std::ofstream ofsru(ssru.str().c_str()); - std::ofstream ofsdru(ssdru.str().c_str()); // 2013-08-10 pengfei - - if (!ofsk || !ofsr || !ofsru || !ofsdru) // 2013-08-10 pengfei - { - ModuleBase::WARNING("Numerical_Orbital_Lm : plot", "Can't open files !"); - } - - for (int i = 0; i < this->nr; i++) - { - ofsr << this->r_radial[i] << " " << psi[i] << std::endl; - } - - for (int i = 0; i < this->nk; i++) - { - ofsk << this->k_radial[i] << " " << psik[i] << std::endl; - } - - for (int i = 0; i < this->nr_uniform; i++) - { - ofsru << this->dr_uniform * i << " " << psi_uniform[i] << std::endl; - } - - for (int i = 0; i < this->nr_uniform; i++) - { - ofsdru << this->dr_uniform * i << " " << dpsi_uniform[i] << std::endl;// output dphi/dr 2013-08-10 pengfei - } - ofsr.close(); - ofsk.close(); - ofsru.close(); - ofsdru.close(); // 13-08-10 pengfei - } - - return; + ModuleBase::TITLE("Numerical_Orbital_Lm", "plot"); + + std::string orbital_type; + // Peize Lin update 2016-08-31 + if (0 == this->angular_momentum_l) + { + orbital_type = 's'; + } + else if (1 == this->angular_momentum_l) + { + orbital_type = 'p'; + } + else if (2 == this->angular_momentum_l) + { + orbital_type = 'd'; + } + else if (3 <= this->angular_momentum_l && this->angular_momentum_l <= 6) + { + orbital_type = 'f' + this->angular_momentum_l - 3; + } + else if (7 <= this->angular_momentum_l && this->angular_momentum_l <= 11) + { + orbital_type = 'k' + this->angular_momentum_l - 7; + } + else + { + orbital_type = "L" + ModuleBase::GlobalFunc::TO_STRING(this->angular_momentum_l); + } + + if (GlobalV::MY_RANK == 0) + { + std::stringstream ssr, ssk, ssru, ssdru; // 2013-08-10 pengfei + ssr << PARAM.globalv.global_out_dir << this->label << "/" << this->label << "-" << orbital_type << index_chi + 1 + << "-orbital-r.dat"; + + ssk << PARAM.globalv.global_out_dir << this->label << "/" << this->label << "-" << orbital_type << index_chi + 1 + << "-orbital-k.dat"; + + ssru << PARAM.globalv.global_out_dir << this->label << "/" << this->label << "-" << orbital_type + << index_chi + 1 << "-orbital-ru.dat"; + + ssdru << PARAM.globalv.global_out_dir << this->label << "/" // 2013-08-10 pengfei + << this->label << "-" << orbital_type << index_chi + 1 << "-orbital-dru.dat"; + + std::ofstream ofsr(ssr.str().c_str()); + std::ofstream ofsk(ssk.str().c_str()); + std::ofstream ofsru(ssru.str().c_str()); + std::ofstream ofsdru(ssdru.str().c_str()); // 2013-08-10 pengfei + + if (!ofsk || !ofsr || !ofsru || !ofsdru) // 2013-08-10 pengfei + { + ModuleBase::WARNING("Numerical_Orbital_Lm : plot", "Can't open files !"); + } + + for (int i = 0; i < this->nr; i++) + { + ofsr << this->r_radial[i] << " " << psi[i] << std::endl; + } + + for (int i = 0; i < this->nk; i++) + { + ofsk << this->k_radial[i] << " " << psik[i] << std::endl; + } + + for (int i = 0; i < this->nr_uniform; i++) + { + ofsru << this->dr_uniform * i << " " << psi_uniform[i] << std::endl; + } + + for (int i = 0; i < this->nr_uniform; i++) + { + ofsdru << this->dr_uniform * i << " " << dpsi_uniform[i] << std::endl; // output dphi/dr 2013-08-10 pengfei + } + ofsr.close(); + ofsk.close(); + ofsru.close(); + ofsdru.close(); // 13-08-10 pengfei + } + + return; } diff --git a/source/module_basis/module_ao/ORB_atomic_lm.h b/source/module_basis/module_ao/ORB_atomic_lm.h index 134ad8316f..1e3f8124e6 100644 --- a/source/module_basis/module_ao/ORB_atomic_lm.h +++ b/source/module_basis/module_ao/ORB_atomic_lm.h @@ -1,15 +1,15 @@ //========================================================= -//AUTHOR : liaochen -//DATE : 2008-11-12 -//UPDATE : Peize Lin change all pointer to std::vector 2016-05-14 +// AUTHOR : liaochen +// DATE : 2008-11-12 +// UPDATE : Peize Lin change all pointer to std::vector 2016-05-14 //========================================================= #ifndef NUMERICAL_ORBITAL_LM_H #define NUMERICAL_ORBITAL_LM_H #include using std::vector; -#include "module_base/global_function.h" -#include "module_base/global_variable.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" /** * CLASS Num_orbital_lm @@ -20,137 +20,244 @@ using std::vector; class Numerical_Orbital_Lm { - friend class Numerical_Orbital; - - public: - - std::vector psi_uniform;// mohan add 2009-5-10 - std::vector dpsi_uniform; //liaochen add 2010/5/11 - std::vector ddpsi_uniform; //wenfei add 2022/7/13 - - int nr_uniform;// mohan add 2009-5-10 - double dr_uniform;// mohan add 2009-5-10 - double zty; ///< the valus of psi at 0. - - Numerical_Orbital_Lm(); - ~Numerical_Orbital_Lm(); - - // Peize Lin add 2017-12-12 - enum class Psi_Type{ Psi, Psif, Psik, Psik2 }; - - /// EXPLAIN : set information about Numerical_Orbital_Lm - void set_orbital_info - ( - const std::string &label_in, - const int &index_atom_type_in, - const int &angular_momentum_l_in, - const int &index_chi_in, - const int &nr_in, - const double *rab_in, - const double *r_radial_in, - const Psi_Type &psi_type, // Peize Lin add 2017-12-12 - const double *psi_in, - const int &nk_in, - const double &dk_in, - // Peize Lin delete lat0 2016-02-03 - const double &dr_uniform, - bool flag_plot, // Peize Lin add flag_plot 2016-08-31 - bool flag_sbpool, // Peize Lin add flag_sbpool 2017-10-02 - const bool &force_flag // mohan add 2021-05-07 - ); - -private: - - void copy_parameter( - const std::string &label_in, - const int &index_atom_type_in, - const int &angular_momentum_l_in, - const int &index_chi_in, - const int &nr_in, - const double *rab_in, - const double *r_radial_in, - const int &nk_in, - const double &dk_in, - const double &dr_uniform_in); - - void cal_kradial(void); - void cal_kradial_sbpool(void); - void cal_rradial_sbpool(void); - //void norm_test()const; - void plot()const; - //void use_uniform(const double &dr_uniform_in); - void extra_uniform(const double &dr_uniform_in, const bool &force_flag); - - std::string label; - int index_atom_type; - int angular_momentum_l; - int index_chi; - - int nr; - int nk; - - double rcut; - double kcut; - double dk; - - std::vector r_radial; /// k_radial; - - std::vector rab; - - std::vector psi; ///< psi(r) - std::vector psir; ///< psi(r) * r - std::vector psif; ///< psi(k) - std::vector psik; ///< psi(k) * k - std::vector psik2; ///< psi(k) * k^2 - -public: - - const std::string& getLabel() const { return label; } - const int& getType() const { return index_atom_type; } - const int& getL() const { return angular_momentum_l; } - const int& getChi() const { return index_chi; } - - const double* getPsiuniform() const { return ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi_uniform); } - const double* getDpsiuniform() const { return ModuleBase::GlobalFunc::VECTOR_TO_PTR(dpsi_uniform); } - const int& getNruniform() const { return nr_uniform; } - const double& getDruniform() const { return dr_uniform; } - - const int& getNr() const { return nr; } - const int& getNk() const { return nk; } - - const double& getRcut() const { return rcut; } - const double& getKcut() const { return kcut; } - - const double* getRadial() const { return ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_radial); } - const std::vector& get_r_radial() const { return r_radial; } - const double& getRadial(const int ir) const { return r_radial[ir]; } - - const double* getRab() const { return ModuleBase::GlobalFunc::VECTOR_TO_PTR(rab); } - const std::vector& get_rab() const { return rab; } - const double& getRab(const int ir) const { return rab[ir]; } - - const double& getDk()const { return dk; } - const double* getKpoint() const { return ModuleBase::GlobalFunc::VECTOR_TO_PTR(k_radial); } - const double& getKpoint(const int ik) const { return k_radial[ik]; } - const std::vector& get_k_radial() const { return k_radial; } - - const double* getPsi() const { return ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi);} - const double& getPsi(const int ir) const { return psi[ir];} - const std::vector& get_psi() const { return psi; } - const double* getPsi_r() const { return ModuleBase::GlobalFunc::VECTOR_TO_PTR(psir); } - const double& getPsi_r(const int ir) const { return psir[ir]; } - - const double* getPsif() const { return ModuleBase::GlobalFunc::VECTOR_TO_PTR(psif); } - const double& getPsif(const int ik) const { return psif[ik]; } - const std::vector& get_psif() const { return psif; } - const double* getPsi_k() const { return ModuleBase::GlobalFunc::VECTOR_TO_PTR(psik); } - const double& getPsi_k(const int ik) const { return psik[ik]; } - const std::vector& get_psi_k() const { return psik; } - const double* getPsi_k2() const { return ModuleBase::GlobalFunc::VECTOR_TO_PTR(psik2); } - const double& getPsi_k2(const int ik) const { return psik2[ik]; } - const std::vector& get_psi_k2() const { return psik2; } + friend class Numerical_Orbital; + + public: + std::vector psi_uniform; // mohan add 2009-5-10 + std::vector dpsi_uniform; // liaochen add 2010/5/11 + std::vector ddpsi_uniform; // wenfei add 2022/7/13 + + int nr_uniform; // mohan add 2009-5-10 + double dr_uniform; // mohan add 2009-5-10 + double zty; ///< the valus of psi at 0. + + Numerical_Orbital_Lm(); + ~Numerical_Orbital_Lm(); + + // Peize Lin add 2017-12-12 + enum class Psi_Type + { + Psi, + Psif, + Psik, + Psik2 + }; + + /// EXPLAIN : set information about Numerical_Orbital_Lm + void set_orbital_info(const std::string& label_in, + const int& index_atom_type_in, + const int& angular_momentum_l_in, + const int& index_chi_in, + const int& nr_in, + const double* rab_in, + const double* r_radial_in, + const Psi_Type& psi_type, // Peize Lin add 2017-12-12 + const double* psi_in, + const int& nk_in, + const double& dk_in, + // Peize Lin delete lat0 2016-02-03 + const double& dr_uniform, + bool flag_plot, // Peize Lin add flag_plot 2016-08-31 + bool flag_sbpool, // Peize Lin add flag_sbpool 2017-10-02 + const bool& force_flag // mohan add 2021-05-07 + ); + + private: + void copy_parameter(const std::string& label_in, + const int& index_atom_type_in, + const int& angular_momentum_l_in, + const int& index_chi_in, + const int& nr_in, + const double* rab_in, + const double* r_radial_in, + const int& nk_in, + const double& dk_in, + const double& dr_uniform_in); + + void cal_kradial(void); + void cal_kradial_sbpool(void); + void cal_rradial_sbpool(void); + // void norm_test()const; + void plot() const; + // void use_uniform(const double &dr_uniform_in); + void extra_uniform(const double& dr_uniform_in, const bool& force_flag); + + std::string label; + int index_atom_type; + int angular_momentum_l; + int index_chi; + + int nr; + int nk; + + double rcut; + double kcut; + double dk; + + std::vector r_radial; ///< points of r + std::vector k_radial; + + std::vector rab; + + std::vector psi; ///< psi(r) + std::vector psir; ///< psi(r) * r + std::vector psif; ///< psi(k) + std::vector psik; ///< psi(k) * k + std::vector psik2; ///< psi(k) * k^2 + + public: + const std::string& getLabel() const + { + return label; + } + const int& getType() const + { + return index_atom_type; + } + const int& getL() const + { + return angular_momentum_l; + } + const int& getChi() const + { + return index_chi; + } + + const double* getPsiuniform() const + { + return ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi_uniform); + } + const double* getDpsiuniform() const + { + return ModuleBase::GlobalFunc::VECTOR_TO_PTR(dpsi_uniform); + } + const int& getNruniform() const + { + return nr_uniform; + } + const double& getDruniform() const + { + return dr_uniform; + } + + const int& getNr() const + { + return nr; + } + const int& getNk() const + { + return nk; + } + + const double& getRcut() const + { + return rcut; + } + const double& getKcut() const + { + return kcut; + } + + const double* getRadial() const + { + return ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_radial); + } + const std::vector& get_r_radial() const + { + return r_radial; + } + const double& getRadial(const int ir) const + { + return r_radial[ir]; + } + + const double* getRab() const + { + return ModuleBase::GlobalFunc::VECTOR_TO_PTR(rab); + } + const std::vector& get_rab() const + { + return rab; + } + const double& getRab(const int ir) const + { + return rab[ir]; + } + + const double& getDk() const + { + return dk; + } + const double* getKpoint() const + { + return ModuleBase::GlobalFunc::VECTOR_TO_PTR(k_radial); + } + const double& getKpoint(const int ik) const + { + return k_radial[ik]; + } + const std::vector& get_k_radial() const + { + return k_radial; + } + + const double* getPsi() const + { + return ModuleBase::GlobalFunc::VECTOR_TO_PTR(psi); + } + const double& getPsi(const int ir) const + { + return psi[ir]; + } + const std::vector& get_psi() const + { + return psi; + } + const double* getPsi_r() const + { + return ModuleBase::GlobalFunc::VECTOR_TO_PTR(psir); + } + const double& getPsi_r(const int ir) const + { + return psir[ir]; + } + + const double* getPsif() const + { + return ModuleBase::GlobalFunc::VECTOR_TO_PTR(psif); + } + const double& getPsif(const int ik) const + { + return psif[ik]; + } + const std::vector& get_psif() const + { + return psif; + } + const double* getPsi_k() const + { + return ModuleBase::GlobalFunc::VECTOR_TO_PTR(psik); + } + const double& getPsi_k(const int ik) const + { + return psik[ik]; + } + const std::vector& get_psi_k() const + { + return psik; + } + const double* getPsi_k2() const + { + return ModuleBase::GlobalFunc::VECTOR_TO_PTR(psik2); + } + const double& getPsi_k2(const int ik) const + { + return psik2[ik]; + } + const std::vector& get_psi_k2() const + { + return psik2; + } }; #endif - diff --git a/source/module_basis/module_ao/ORB_gaunt_table.cpp b/source/module_basis/module_ao/ORB_gaunt_table.cpp index 26dfc38ed8..60bd48e923 100644 --- a/source/module_basis/module_ao/ORB_gaunt_table.cpp +++ b/source/module_basis/module_ao/ORB_gaunt_table.cpp @@ -1,57 +1,62 @@ -#include -#include #include "ORB_gaunt_table.h" -#include "module_base/timer.h" -#include "module_base/memory.h" -#include "module_base/mathzone.h" -#include "module_base/global_function.h" -#include "module_base/vector3.h" -#include "module_base/constants.h" -#include "module_base/math_ylmreal.h" - -ORB_gaunt_table::ORB_gaunt_table(){} -ORB_gaunt_table::~ORB_gaunt_table(){} - -void ORB_gaunt_table::init_Gaunt(const int &lmax) + +#include "source_base/constants.h" +#include "source_base/global_function.h" +#include "source_base/math_ylmreal.h" +#include "source_base/mathzone.h" +#include "source_base/memory.h" +#include "source_base/timer.h" +#include "source_base/vector3.h" + +#include +#include + +ORB_gaunt_table::ORB_gaunt_table() { -//////////////////////////////////////// -/// EXPLAIN : make table of Gaunt Coefficients -//////////////////////////////////////// +} +ORB_gaunt_table::~ORB_gaunt_table() +{ +} + +void ORB_gaunt_table::init_Gaunt(const int& lmax) +{ + //////////////////////////////////////// + /// EXPLAIN : make table of Gaunt Coefficients + //////////////////////////////////////// ModuleBase::TITLE("ORB_gaunt_table", "init_Gaunt"); ModuleBase::timer::tick("ORB_gaunt_table", "init_Gaunt"); - - const int nlm = (lmax * 2 + 1) * (lmax * 2 + 1); - this->Gaunt_Coefficients.create(nlm, nlm, nlm); - // Becaful! , L ends at 2*lmax+1 - for (int L = 0; L < 2*lmax + 1; L++) + const int nlm = (lmax * 2 + 1) * (lmax * 2 + 1); + this->Gaunt_Coefficients.create(nlm, nlm, nlm); + + // Becaful! , L ends at 2*lmax+1 + for (int L = 0; L < 2 * lmax + 1; L++) { - // m order is ( 0,0,1,-1,0,1,-1,2,-2...) - for (int m = 0; m < 2*L + 1 ; m++) + // m order is ( 0,0,1,-1,0,1,-1,2,-2...) + for (int m = 0; m < 2 * L + 1; m++) { - const int dim = this->get_lm_index(L,m); + const int dim = this->get_lm_index(L, m); for (int L1 = 0; L1 < lmax + 1; L1++) { - for (int m1 = 0; m1 < 2*L1+1 ; m1++) + for (int m1 = 0; m1 < 2 * L1 + 1; m1++) { - const int dim1 = this->get_lm_index(L1,m1); + const int dim1 = this->get_lm_index(L1, m1); for (int L2 = 0; L2 < lmax + 1; L2++) { - for (int m2 = 0; m2 < 2*L2+1 ; m2++) + for (int m2 = 0; m2 < 2 * L2 + 1; m2++) { - const int dim2 = this->get_lm_index(L2,m2); + const int dim2 = this->get_lm_index(L2, m2); ///////////////////// - ///call Calculate::Cal_G + /// call Calculate::Cal_G //////////////////// - - Gaunt_Coefficients(dim1, dim2, dim) = - this->Get_Gaunt_SH (L1, m1, L2, m2, L, m); - }// m2 - }// L2 - }// m1 - }// L1 - }// m - }// L + + Gaunt_Coefficients(dim1, dim2, dim) = this->Get_Gaunt_SH(L1, m1, L2, m2, L, m); + } // m2 + } // L2 + } // m1 + } // L1 + } // m + } // L ModuleBase::timer::tick("ORB_gaunt_table", "init_Gaunt"); return; @@ -60,399 +65,388 @@ void ORB_gaunt_table::init_Gaunt(const int &lmax) /* double ORB_gaunt_table::Cal_Gaunt_single ( - const int &L1, - const int &m1, - const int &L2, - const int &m2, - const int &L, - const int &m, - const double &s1, - const double &e1, - const double &s2, - const double &e2 + const int &L1, + const int &m1, + const int &L2, + const int &m2, + const int &L, + const int &m, + const double &s1, + const double &e1, + const double &s2, + const double &e2 ) { - ModuleBase::timer::tick("ORB_gaunt_table", "Cal_Gaunt_single"); - if ((L1 - L2 - L) % 2 != 0) - { - return 0.0; - } - - double result = 0.0; - static double absc[16] = { - -0.9894009349916499, -0.9445750230732326, -0.8656312023878318, -0.755404408355003, - -0.6178762444026438, -0.4580167776572274, -0.2816035507792589, -0.09501250983763744, - 0.09501250983763744, 0.2816035507792589, 0.4580167776572274, 0.6178762444026438, - 0.755404408355003, 0.8656312023878318, 0.9445750230732326, 0.9894009349916499 }; - - static double weight[16] = { - 0.02715245941175406, 0.06225352393864778, 0.0951585116824929, 0.1246289712555339, - 0.1495959888165768, 0.1691565193950026, 0.1826034150449236, 0.1894506104550685, - 0.1894506104550685, 0.1826034150449236, 0.1691565193950026, 0.1495959888165768, - 0.1246289712555339, 0.0951585116824929, 0.06225352393864778, 0.02715245941175406 }; - - for (int i = 0;i < 16;i++) - { - for (int j = 0;j < 16;j++) - { - double theta = ((s1 + e1) + (e1 - s1) * absc[i]) / 2; - - result += weight[i] * weight[j] * sin(theta) * - this->Ylm_Gaunt( this->get_lm_index(L1, m1), 16 * i + j) * - this->Ylm_Gaunt( this->get_lm_index(L2, m2), 16 * i + j) * - this->Ylm_Gaunt( this->get_lm_index(L, m), 16 * i + j); - } - } - - result *= ((e1 - s1) / 2) * ((e2 - s2) / 2); - ModuleBase::timer::tick("ORB_gaunt_table", "Cal_Gaunt_single"); - return result; + ModuleBase::timer::tick("ORB_gaunt_table", "Cal_Gaunt_single"); + if ((L1 - L2 - L) % 2 != 0) + { + return 0.0; + } + + double result = 0.0; + static double absc[16] = { + -0.9894009349916499, -0.9445750230732326, -0.8656312023878318, -0.755404408355003, + -0.6178762444026438, -0.4580167776572274, -0.2816035507792589, -0.09501250983763744, + 0.09501250983763744, 0.2816035507792589, 0.4580167776572274, 0.6178762444026438, + 0.755404408355003, 0.8656312023878318, 0.9445750230732326, 0.9894009349916499 }; + + static double weight[16] = { + 0.02715245941175406, 0.06225352393864778, 0.0951585116824929, 0.1246289712555339, + 0.1495959888165768, 0.1691565193950026, 0.1826034150449236, 0.1894506104550685, + 0.1894506104550685, 0.1826034150449236, 0.1691565193950026, 0.1495959888165768, + 0.1246289712555339, 0.0951585116824929, 0.06225352393864778, 0.02715245941175406 }; + + for (int i = 0;i < 16;i++) + { + for (int j = 0;j < 16;j++) + { + double theta = ((s1 + e1) + (e1 - s1) * absc[i]) / 2; + + result += weight[i] * weight[j] * sin(theta) * + this->Ylm_Gaunt( this->get_lm_index(L1, m1), 16 * i + j) * + this->Ylm_Gaunt( this->get_lm_index(L2, m2), 16 * i + j) * + this->Ylm_Gaunt( this->get_lm_index(L, m), 16 * i + j); + } + } + + result *= ((e1 - s1) / 2) * ((e2 - s2) / 2); + ModuleBase::timer::tick("ORB_gaunt_table", "Cal_Gaunt_single"); + return result; } */ /* void ORB_gaunt_table::init_Ylm_Gaunt ( - const int &lmax, - const double &s1, - const double &e1, - const double &s2, - const double &e2 + const int &lmax, + const double &s1, + const double &e1, + const double &s2, + const double &e2 ) { - ModuleBase::TITLE("ORB_gaunt_table", "init_Ylm_Gaunt"); - ModuleBase::timer::tick("ORB_gaunt_table", "inite_Ylm_Gaunt"); + ModuleBase::TITLE("ORB_gaunt_table", "init_Ylm_Gaunt"); + ModuleBase::timer::tick("ORB_gaunt_table", "inite_Ylm_Gaunt"); - const int nlm = (2*lmax+1) * (2*lmax+1); + const int nlm = (2*lmax+1) * (2*lmax+1); - static double absc[16] = { - -0.9894009349916499, -0.9445750230732326, -0.8656312023878318, -0.755404408355003, - -0.6178762444026438, -0.4580167776572274, -0.2816035507792589, -0.09501250983763744, - 0.09501250983763744, 0.2816035507792589, 0.4580167776572274, 0.6178762444026438, - 0.755404408355003, 0.8656312023878318, 0.9445750230732326, 0.9894009349916499 }; + static double absc[16] = { + -0.9894009349916499, -0.9445750230732326, -0.8656312023878318, -0.755404408355003, + -0.6178762444026438, -0.4580167776572274, -0.2816035507792589, -0.09501250983763744, + 0.09501250983763744, 0.2816035507792589, 0.4580167776572274, 0.6178762444026438, + 0.755404408355003, 0.8656312023878318, 0.9445750230732326, 0.9894009349916499 }; - //initialization of ylm_map + //initialization of ylm_map - ModuleBase::Vector3 g_gaunt[256]; + ModuleBase::Vector3 g_gaunt[256]; - this->Ylm_Gaunt.create(nlm , 256); + this->Ylm_Gaunt.create(nlm , 256); - for (int i = 0; i < 16; i++) - { - for (int j = 0; j < 16; j++) - { - const double theta = ((s1 + e1) + (e1 - s1) * absc[i]) / 2; - const double phi = ((s2 + e2) + (e2 - s2) * absc[j]) / 2; - ModuleBase::Vector3 u(sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta)); - g_gaunt[16*i+j] = u; - } - } + for (int i = 0; i < 16; i++) + { + for (int j = 0; j < 16; j++) + { + const double theta = ((s1 + e1) + (e1 - s1) * absc[i]) / 2; + const double phi = ((s2 + e2) + (e2 - s2) * absc[j]) / 2; + ModuleBase::Vector3 u(sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta)); + g_gaunt[16*i+j] = u; + } + } - ModuleBase::YlmReal::Ylm_Real(nlm, 256, &g_gaunt[0], this->Ylm_Gaunt); + ModuleBase::YlmReal::Ylm_Real(nlm, 256, &g_gaunt[0], this->Ylm_Gaunt); - ModuleBase::timer::tick("ORB_gaunt_table", "init_Ylm_Gaunt"); - return; + ModuleBase::timer::tick("ORB_gaunt_table", "init_Ylm_Gaunt"); + return; } */ -int ORB_gaunt_table::get_lm_index( - const int l, - const int m) +int ORB_gaunt_table::get_lm_index(const int l, const int m) { - return l*l+m; + return l * l + m; } - -///effective pointers +/// effective pointers int ORB_gaunt_table::EP_EL(const int& L) { - if(L % 2 == 0) return (L+2) * (L+4) * (3*L*L+14*L+24) / 192; - else return (L+1) * (L+3) * (L+5) * (3*L+5) / 192; + if (L % 2 == 0) + return (L + 2) * (L + 4) * (3 * L * L + 14 * L + 24) / 192; + else + return (L + 1) * (L + 3) * (L + 5) * (3 * L + 5) / 192; } - -int ORB_gaunt_table::index_func -( - const int& l1, - const int& l2, - const int& l3, - const int& m3 -) +int ORB_gaunt_table::index_func(const int& l1, const int& l2, const int& l3, const int& m3) { - const int aux1 = l1*(l1*l1*l1+6*l1*l1+11*l1+6)/24; - const int aux2 = l2*(l2*l2+3*l2+2)/6; - const int aux3 = l3*(l3+1)/2; - - return aux1 + aux2 + aux3 + m3; -} + const int aux1 = l1 * (l1 * l1 * l1 + 6 * l1 * l1 + 11 * l1 + 6) / 24; + const int aux2 = l2 * (l2 * l2 + 3 * l2 + 2) / 6; + const int aux3 = l3 * (l3 + 1) / 2; + return aux1 + aux2 + aux3 + m3; +} void ORB_gaunt_table::init_Gaunt_CH(const int& Lmax) { - ModuleBase::TITLE("ORB_gaunt_table","init_Gaunt_CH"); - ModuleBase::timer::tick("ORB_gaunt_table","init_Gaunt_CH"); - - int L = 2*Lmax + 1; - int Eff_Np = this->EP_EL(L); - - ModuleBase::Memory::record("ORB::Gaunt_CH", sizeof(double) * Eff_Np * 30); - - int ic1 = 0; - for(int l1 = 0; l1 <= L; l1++) - { - for(int l2 = 0; l2 <= l1; l2++) - { - for(int l3 = 0; l3 <= l2; l3++) - { - for(int m3 = 0; m3 <= l3; m3++) - { - int idx = index_func(l1, l2, l3, m3); - assert(ic1 == idx); - - int l_sum = l1 + l2 + l3; - if((l_sum % 2 == 0) && (l2 + l3 >= l1)) - { - int uplmt_m2 = l1 - m3 > l2 ? l2 : l1 - m3; - - int ic2 = 0; - for(int m2 = -l2; m2 <= uplmt_m2; m2++) - { - //m1 + m2 + m3 == 0 - int m1 = -m2 - m3; - assert(std::abs(m1) <= l1); - - Gaunt_CH[ic1][ic2] = Calc_Gaunt_CH(l1, m1, l2, m2, l3, m3); - ic2++; - } - } - - ic1++; - }// m3 - }// l3 - }// l2 - } // l1 - - ModuleBase::timer::tick("ORB_gaunt_table","init_Gaunt_CH"); - return; -} + ModuleBase::TITLE("ORB_gaunt_table", "init_Gaunt_CH"); + ModuleBase::timer::tick("ORB_gaunt_table", "init_Gaunt_CH"); + int L = 2 * Lmax + 1; + int Eff_Np = this->EP_EL(L); -//using wigner 3j expression -double ORB_gaunt_table::Calc_Gaunt_CH -( - const int& l1, - const int& m1, - const int& l2, - const int& m2, - const int& l3, - const int& m3 -) + ModuleBase::Memory::record("ORB::Gaunt_CH", sizeof(double) * Eff_Np * 30); + + int ic1 = 0; + for (int l1 = 0; l1 <= L; l1++) + { + for (int l2 = 0; l2 <= l1; l2++) + { + for (int l3 = 0; l3 <= l2; l3++) + { + for (int m3 = 0; m3 <= l3; m3++) + { + int idx = index_func(l1, l2, l3, m3); + assert(ic1 == idx); + + int l_sum = l1 + l2 + l3; + if ((l_sum % 2 == 0) && (l2 + l3 >= l1)) + { + int uplmt_m2 = l1 - m3 > l2 ? l2 : l1 - m3; + + int ic2 = 0; + for (int m2 = -l2; m2 <= uplmt_m2; m2++) + { + // m1 + m2 + m3 == 0 + int m1 = -m2 - m3; + assert(std::abs(m1) <= l1); + + Gaunt_CH[ic1][ic2] = Calc_Gaunt_CH(l1, m1, l2, m2, l3, m3); + ic2++; + } + } + + ic1++; + } // m3 + } // l3 + } // l2 + } // l1 + + ModuleBase::timer::tick("ORB_gaunt_table", "init_Gaunt_CH"); + return; +} + +// using wigner 3j expression +double ORB_gaunt_table::Calc_Gaunt_CH(const int& l1, + const int& m1, + const int& l2, + const int& m2, + const int& l3, + const int& m3) { - ModuleBase::timer::tick("ORB_gaunt_table","Calc_Gaunt_CH"); - - double fac = sqrt((2*l1+1) * (2*l2+1) * (2*l3+1) / ModuleBase::FOUR_PI); + ModuleBase::timer::tick("ORB_gaunt_table", "Calc_Gaunt_CH"); - int g = (l1+l2+l3)/2; - double triangle_f = sqrt( Fact(l1+l2-l3) * Fact(l1-l2+l3) * Fact(-l1+l2+l3) / Fact(2*g+1) ); + double fac = sqrt((2 * l1 + 1) * (2 * l2 + 1) * (2 * l3 + 1) / ModuleBase::FOUR_PI); - fac *= pow(-1.0, g) * triangle_f * Fact(g) / Fact(g-l1) / Fact(g-l2) / Fact(g-l3); + int g = (l1 + l2 + l3) / 2; + double triangle_f = sqrt(Fact(l1 + l2 - l3) * Fact(l1 - l2 + l3) * Fact(-l1 + l2 + l3) / Fact(2 * g + 1)); - double aux1 = sqrt(Fact(l1+m1) * Fact(l1-m1) * Fact(l2+m2) * Fact(l2-m2) * Fact(l3+m3) * Fact(l3-m3)); + fac *= pow(-1.0, g) * triangle_f * Fact(g) / Fact(g - l1) / Fact(g - l2) / Fact(g - l3); - int kmin = 0; + double aux1 = sqrt(Fact(l1 + m1) * Fact(l1 - m1) * Fact(l2 + m2) * Fact(l2 - m2) * Fact(l3 + m3) * Fact(l3 - m3)); + + int kmin = 0; int kmax = 0; - - kmin = (l2-l3-m1) > (l1-l3+m2) ? (l2-l3-m1) : (l1-l3+m2); - kmin = kmin > 0 ? kmin : 0; - kmax = (l1+l2-l3) > (l1-m1) ? (l1-m1) : (l1+l2-l3); - kmax = kmax > (l2+m2) ? (l2+m2) : kmax; + kmin = (l2 - l3 - m1) > (l1 - l3 + m2) ? (l2 - l3 - m1) : (l1 - l3 + m2); + kmin = kmin > 0 ? kmin : 0; + + kmax = (l1 + l2 - l3) > (l1 - m1) ? (l1 - m1) : (l1 + l2 - l3); + kmax = kmax > (l2 + m2) ? (l2 + m2) : kmax; - double aux2 = 0.0; - for(int k = kmin; k <= kmax; k++) - { - aux2 += pow(-1.0, k) / Fact(k) / Fact(l1+l2-l3-k) / Fact(l1-m1-k) / Fact(l2+m2-k) - / Fact(l3-l2+m1+k) / Fact(l3-l1+k-m2); - } + double aux2 = 0.0; + for (int k = kmin; k <= kmax; k++) + { + aux2 += pow(-1.0, k) / Fact(k) / Fact(l1 + l2 - l3 - k) / Fact(l1 - m1 - k) / Fact(l2 + m2 - k) + / Fact(l3 - l2 + m1 + k) / Fact(l3 - l1 + k - m2); + } - return fac * pow(-1.0, l1-l2-m3) * triangle_f * aux1 * aux2; + return fac * pow(-1.0, l1 - l2 - m3) * triangle_f * aux1 * aux2; - ModuleBase::timer::tick("ORB_gaunt_table","Calc_Gaunt_CH"); + ModuleBase::timer::tick("ORB_gaunt_table", "Calc_Gaunt_CH"); } - -double ORB_gaunt_table::Get_Gaunt_CH -( - const int& l1, - const int& m1, - const int& l2, - const int& m2, - const int& l3, - const int& m3 -) +double ORB_gaunt_table::Get_Gaunt_CH(const int& l1, + const int& m1, + const int& l2, + const int& m2, + const int& l3, + const int& m3) { - assert(l1 >= 0); - assert(l2 >= 0); - assert(l3 >= 0); - - int l_sum = l1 + l2 + l3; - - if(l_sum % 2 == 1) return 0.0; - - if(std::abs(m1) > l1 || std::abs(m2) > l2 || std::abs(m3) > l3) return 0.0; - - if( (m1 + m2 + m3) != 0) return 0.0; + assert(l1 >= 0); + assert(l2 >= 0); + assert(l3 >= 0); + + int l_sum = l1 + l2 + l3; + + if (l_sum % 2 == 1) + return 0.0; + + if (std::abs(m1) > l1 || std::abs(m2) > l2 || std::abs(m3) > l3) + return 0.0; + + if ((m1 + m2 + m3) != 0) + return 0.0; int L1 = l1; - int M1 = m1; - int L2 = l2; + int M1 = m1; + int L2 = l2; int M2 = m2; - Swap(L1, M1, L2, M2); - - int L3 = l3; - int M3 = m3; - Swap(L1, M1, L3, M3); - - Swap(L2, M2, L3, M3); - - if(M3 < 0) - { - M1 = -M1; - M2 = -M2; - M3 = -M3; - } - - int ic1 = index_func(L1, L2, L3, M3); - int ic2 = M2 + L2; - - try - { - return Gaunt_CH.at(ic1).at(ic2); - } // Peize Lin add 2016-08-26 - catch( std::out_of_range ) - { - return 0; - } + Swap(L1, M1, L2, M2); + + int L3 = l3; + int M3 = m3; + Swap(L1, M1, L3, M3); + + Swap(L2, M2, L3, M3); + + if (M3 < 0) + { + M1 = -M1; + M2 = -M2; + M3 = -M3; + } + + int ic1 = index_func(L1, L2, L3, M3); + int ic2 = M2 + L2; + + try + { + return Gaunt_CH.at(ic1).at(ic2); + } // Peize Lin add 2016-08-26 + catch (std::out_of_range) + { + return 0; + } } - -///Input value, -///m1, m2, m3 are restricted within 0 to 2l+1, -///and should be transformed first. -double ORB_gaunt_table::Get_Gaunt_SH -( - const int& l1, - const int& mm1, - const int& l2, - const int& mm2, - const int& l3, - const int& mm3 -) +/// Input value, +/// m1, m2, m3 are restricted within 0 to 2l+1, +/// and should be transformed first. +double ORB_gaunt_table::Get_Gaunt_SH(const int& l1, + const int& mm1, + const int& l2, + const int& mm2, + const int& l3, + const int& mm3) { - - //Tranform M index - int m1 = Index_M(mm1); - int m2 = Index_M(mm2); - int m3 = Index_M(mm3); - - if(m1 >= 0 && m2 >= 0 && m3 >= 0) - { - if(m1 * m2 * m3 > 0) - { - if(m1 == m2 + m3) return pow(-1.0, m1) * sqrt(2.0) / 2.0 - * Get_Gaunt_CH(l1, -m1, l2, m2, l3, m3); - else if(m2 == m1 + m3) return pow(-1.0, m2) * sqrt(2.0) / 2.0 - * Get_Gaunt_CH(l1, m1, l2, -m2, l3, m3); - else if(m3 == m1 + m2) return pow(-1.0, m3) * sqrt(2.0) / 2.0 - * Get_Gaunt_CH(l1, m1, l2, m2, l3, -m3); - else return 0.0; - } - else - { - if(m1 == 0 && m2 == 0 && m3 == 0) return Get_Gaunt_CH(l1, 0, l2, 0, l3, 0); - else if( (m1 == 0) && (m2 == m3)) return pow(-1.0, m2) * Get_Gaunt_CH(l1, 0, l2, m2, l3, -m2); - else if( (m2 == 0) && (m3 == m1)) return pow(-1.0, m1) * Get_Gaunt_CH(l2, 0, l1, m1, l3, -m1); - else if( (m3 == 0) && (m1 == m2)) return pow(-1.0, m2) * Get_Gaunt_CH(l3, 0, l2, m2, l1, -m2); - else return 0.0; - } - } - else - { - if(m1 >= 0 && m2 < 0 && m3 < 0) - { - if((m1 == 0) && (m2 == m3)) return pow(-1.0, m2) * Get_Gaunt_CH(l1, 0, l2, m2, l3, -m2); - else if(m1 > 0 && (m2 == m1+m3)) - return pow(-1.0, m3) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l1, m1, l2, -m2, l3, m3); - else if(m1 > 0 && (m3 == m1+m2)) - return pow(-1.0, m2) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l1, m1, l2, m2, l3, -m3); - else if(m1 > 0 && ( (m1+m2+m3) == 0)) - return pow(-1.0, m1+1) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l1, m1, l2, m2, l3, m3); - else return 0.0; - } - else if(m2 >= 0 && m1 < 0 && m3 < 0) - { - if((m2 == 0) && (m1 == m3)) return pow(-1.0, m1) * Get_Gaunt_CH(l2, 0, l1, m1, l3, -m1); - else if(m2 > 0 && (m1 == (m2 + m3))) - return pow(-1.0, m3) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l2, m2, l1, -m1, l3, m3); - else if(m2 > 0 && (m3 == (m2 + m1))) - return pow(-1.0, m1) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l2, m2, l1, m1, l3, -m3); - else if(m2 > 0 && ((m1+m2+m3) == 0)) - return pow(-1.0, m2+1) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l2, m2, l1, m1, l3, m3); - else return 0.0; - - } - else if(m3 >= 0 && m1 < 0 && m2 < 0) - { - if((m3 == 0) && (m1 == m2)) return pow(-1.0, m1) * Get_Gaunt_CH(l3, 0, l1, m1, l2, -m1); - else if(m3 > 0 && (m1 == m3+m2)) - return pow(-1.0, m2) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l3, m3, l1, -m1, l2, m2); - else if(m3 > 0 && (m2 == m3+m1)) - return pow(-1.0, m1) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l3, m3, l1, m1, l2, -m2); - else if(m3 > 0 && ( (m1+m2+m3) == 0)) - return pow(-1.0, m3+1) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l3, m3, l1, m1, l2, m2); - else return 0.0; - } - else return 0.0; - } -} + // Tranform M index + int m1 = Index_M(mm1); + int m2 = Index_M(mm2); + int m3 = Index_M(mm3); + if (m1 >= 0 && m2 >= 0 && m3 >= 0) + { + if (m1 * m2 * m3 > 0) + { + if (m1 == m2 + m3) + return pow(-1.0, m1) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l1, -m1, l2, m2, l3, m3); + else if (m2 == m1 + m3) + return pow(-1.0, m2) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l1, m1, l2, -m2, l3, m3); + else if (m3 == m1 + m2) + return pow(-1.0, m3) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l1, m1, l2, m2, l3, -m3); + else + return 0.0; + } + else + { + if (m1 == 0 && m2 == 0 && m3 == 0) + return Get_Gaunt_CH(l1, 0, l2, 0, l3, 0); + else if ((m1 == 0) && (m2 == m3)) + return pow(-1.0, m2) * Get_Gaunt_CH(l1, 0, l2, m2, l3, -m2); + else if ((m2 == 0) && (m3 == m1)) + return pow(-1.0, m1) * Get_Gaunt_CH(l2, 0, l1, m1, l3, -m1); + else if ((m3 == 0) && (m1 == m2)) + return pow(-1.0, m2) * Get_Gaunt_CH(l3, 0, l2, m2, l1, -m2); + else + return 0.0; + } + } + else + { + if (m1 >= 0 && m2 < 0 && m3 < 0) + { + if ((m1 == 0) && (m2 == m3)) + return pow(-1.0, m2) * Get_Gaunt_CH(l1, 0, l2, m2, l3, -m2); + else if (m1 > 0 && (m2 == m1 + m3)) + return pow(-1.0, m3) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l1, m1, l2, -m2, l3, m3); + else if (m1 > 0 && (m3 == m1 + m2)) + return pow(-1.0, m2) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l1, m1, l2, m2, l3, -m3); + else if (m1 > 0 && ((m1 + m2 + m3) == 0)) + return pow(-1.0, m1 + 1) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l1, m1, l2, m2, l3, m3); + else + return 0.0; + } + else if (m2 >= 0 && m1 < 0 && m3 < 0) + { + if ((m2 == 0) && (m1 == m3)) + return pow(-1.0, m1) * Get_Gaunt_CH(l2, 0, l1, m1, l3, -m1); + else if (m2 > 0 && (m1 == (m2 + m3))) + return pow(-1.0, m3) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l2, m2, l1, -m1, l3, m3); + else if (m2 > 0 && (m3 == (m2 + m1))) + return pow(-1.0, m1) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l2, m2, l1, m1, l3, -m3); + else if (m2 > 0 && ((m1 + m2 + m3) == 0)) + return pow(-1.0, m2 + 1) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l2, m2, l1, m1, l3, m3); + else + return 0.0; + } + else if (m3 >= 0 && m1 < 0 && m2 < 0) + { + if ((m3 == 0) && (m1 == m2)) + return pow(-1.0, m1) * Get_Gaunt_CH(l3, 0, l1, m1, l2, -m1); + else if (m3 > 0 && (m1 == m3 + m2)) + return pow(-1.0, m2) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l3, m3, l1, -m1, l2, m2); + else if (m3 > 0 && (m2 == m3 + m1)) + return pow(-1.0, m1) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l3, m3, l1, m1, l2, -m2); + else if (m3 > 0 && ((m1 + m2 + m3) == 0)) + return pow(-1.0, m3 + 1) * sqrt(2.0) / 2.0 * Get_Gaunt_CH(l3, m3, l1, m1, l2, m2); + else + return 0.0; + } + else + return 0.0; + } +} double ORB_gaunt_table::Fact(const int& n) { - double val = 1.0; - for(int i = 1; i <= n; i++) - { - val *= static_cast(i); - } - return val; + double val = 1.0; + for (int i = 1; i <= n; i++) + { + val *= static_cast(i); + } + return val; } - -void ORB_gaunt_table::Swap( - int& l1, - int& m1, - int& l2, - int & m2) +void ORB_gaunt_table::Swap(int& l1, int& m1, int& l2, int& m2) { - int tmp1=0, tmp2=0; - if(l1 >= l2) return; - else - { - tmp1 = l2; - tmp2 = m2; - - l2 = l1; - m2 = m1; - - l1 = tmp1; - m1 = tmp2; - } - return; -} + int tmp1 = 0, tmp2 = 0; + if (l1 >= l2) + return; + else + { + tmp1 = l2; + tmp2 = m2; + + l2 = l1; + m2 = m1; + l1 = tmp1; + m1 = tmp2; + } + return; +} int ORB_gaunt_table::Index_M(const int& m) { - if(m % 2 == 0) return (- m / 2); - else return ((m+1) / 2); + if (m % 2 == 0) + return (-m / 2); + else + return ((m + 1) / 2); } diff --git a/source/module_basis/module_ao/ORB_gaunt_table.h b/source/module_basis/module_ao/ORB_gaunt_table.h index 3db96604b6..fe3aa09b10 100644 --- a/source/module_basis/module_ao/ORB_gaunt_table.h +++ b/source/module_basis/module_ao/ORB_gaunt_table.h @@ -1,123 +1,95 @@ #ifndef ORB_GAUNT_TABLE_H #define ORB_GAUNT_TABLE_H +#include "source_base/matrix.h" +#include "source_base/realarray.h" + #include -#include "module_base/realarray.h" -#include "module_base/matrix.h" class ORB_gaunt_table { - public: - - ORB_gaunt_table(); - ~ORB_gaunt_table(); - - /** - * Method 2: - * using WIgner 3j symbols - * \f$ Y(l1,m1), Y(l2,m2), Y(L,M) \f$ - */ - - void init_Gaunt_CH(const int& Lmax); - double Get_Gaunt_CH( - const int& l1, - const int& m1, - const int& l2, - const int& m2, - const int& l3, - const int& m3 ); - - ///M defined here are restricted within 0 to 2l+1 - /// - ///should be transformed first - double Get_Gaunt_SH( - const int& l1, - const int& mm1, - const int& l2, - const int& mm2, - const int& l3, - const int& mm3 ); - - double Calc_Gaunt_CH( - const int& l1, - const int& m1, - const int& l2, - const int& m2, - const int& l3, - const int& m3 ); - - - /** - * MEthod 2 - * - * Directly Calculate integral of - * \f$ S(l_1,m_1), S(l_2,m_2), S(L,M) \f$ - */ - ModuleBase::realArray Gaunt_Coefficients; - - /// (1) Make Ylm_Gaunt Table. - ///---------------- + public: + ORB_gaunt_table(); + ~ORB_gaunt_table(); + + /** + * Method 2: + * using WIgner 3j symbols + * \f$ Y(l1,m1), Y(l2,m2), Y(L,M) \f$ + */ + + void init_Gaunt_CH(const int& Lmax); + double Get_Gaunt_CH(const int& l1, const int& m1, const int& l2, const int& m2, const int& l3, const int& m3); + + /// M defined here are restricted within 0 to 2l+1 + /// + /// should be transformed first + double Get_Gaunt_SH(const int& l1, const int& mm1, const int& l2, const int& mm2, const int& l3, const int& mm3); + + double Calc_Gaunt_CH(const int& l1, const int& m1, const int& l2, const int& m2, const int& l3, const int& m3); + + /** + * MEthod 2 + * + * Directly Calculate integral of + * \f$ S(l_1,m_1), S(l_2,m_2), S(L,M) \f$ + */ + ModuleBase::realArray Gaunt_Coefficients; + + /// (1) Make Ylm_Gaunt Table. + ///---------------- /* - void init_Ylm_Gaunt( - const int &lmax, - const double &s1, - const double &e1, - const double &s2, - const double &e2); + void init_Ylm_Gaunt( + const int &lmax, + const double &s1, + const double &e1, + const double &s2, + const double &e2); */ - /// (2) Use Ylm_Gaunt to calculate Gaunt Coefficinets element - ///------ + /// (2) Use Ylm_Gaunt to calculate Gaunt Coefficinets element + ///------ /* - double Cal_Gaunt_single( - const int &l1, - const int &m1, - const int &l2, - const int &m2, - const int &l, - const int &m, - const double &s1, - const double &e1, - const double &s2, - const double &e2); + double Cal_Gaunt_single( + const int &l1, + const int &m1, + const int &l2, + const int &m2, + const int &l, + const int &m, + const double &s1, + const double &e1, + const double &s2, + const double &e2); */ - /// (3) Make the whole Gaunt Coefficients table - /// ------------------------------------ - void init_Gaunt(const int &lmax); - - static int get_lm_index(const int l, const int m); - - static int Index_M(const int& m); - - private: - - // Index Function - // Yu's mehtod - // Peize Lin delete void ModuleBase::GlobalFunc::ZEROS(); 2016-08-26 - - //int P_EL(const int& L); - - int EP_EL(const int& L); - - int index_func( - const int& l1, - const int& l2, - const int& l3, - const int& m3 ); - - double Fact(const int& n); - - void Swap( - int& l1, - int& m1, - int& l2, - int& m2 ); - - //2*Lmax+1 - std::map> Gaunt_CH; // Peize Lin update 2016-08-26 - - //direct integral - ModuleBase::matrix Ylm_Gaunt; + /// (3) Make the whole Gaunt Coefficients table + /// ------------------------------------ + void init_Gaunt(const int& lmax); + + static int get_lm_index(const int l, const int m); + + static int Index_M(const int& m); + + private: + // Index Function + // Yu's mehtod + // Peize Lin delete void ModuleBase::GlobalFunc::ZEROS(); 2016-08-26 + + // int P_EL(const int& L); + + int EP_EL(const int& L); + + int index_func(const int& l1, const int& l2, const int& l3, const int& m3); + + double Fact(const int& n); + + void Swap(int& l1, int& m1, int& l2, int& m2); + + // 2*Lmax+1 + std::map> Gaunt_CH; // Peize Lin update 2016-08-26 + + // direct integral + ModuleBase::matrix Ylm_Gaunt; }; #endif diff --git a/source/module_basis/module_ao/ORB_nonlocal.cpp b/source/module_basis/module_ao/ORB_nonlocal.cpp index 86ec82be22..d42c14ba8f 100644 --- a/source/module_basis/module_ao/ORB_nonlocal.cpp +++ b/source/module_basis/module_ao/ORB_nonlocal.cpp @@ -1,68 +1,65 @@ #include "ORB_nonlocal.h" -#include "module_base/global_function.h" + +#include "source_base/global_function.h" Numerical_Nonlocal::Numerical_Nonlocal() { - //make std::pair of new and delete - //question remains - this->type = 0; - this->lmax = 0; - this->rcut_max = 0.0; - this->Proj = new Numerical_Nonlocal_Lm[1]; - this->nproj = -1; - //zhengdy-soc, for optimize nonlocal part + // make std::pair of new and delete + // question remains + this->type = 0; + this->lmax = 0; + this->rcut_max = 0.0; + this->Proj = new Numerical_Nonlocal_Lm[1]; + this->nproj = -1; + // zhengdy-soc, for optimize nonlocal part } Numerical_Nonlocal::~Numerical_Nonlocal() { - delete[] Proj; + delete[] Proj; } -void Numerical_Nonlocal::set_type_info -( - const int& type_in, - const std::string& label_in, - const std::string& type_ps_in, - const int& lmax_in, - const int& nproj_in, - const Numerical_Nonlocal_Lm* Proj_in -) +void Numerical_Nonlocal::set_type_info(const int& type_in, + const std::string& label_in, + const std::string& type_ps_in, + const int& lmax_in, + const int& nproj_in, + const Numerical_Nonlocal_Lm* Proj_in) { - //ModuleBase::TITLE("Numerical_Nonlocal","set_type_info"); + // ModuleBase::TITLE("Numerical_Nonlocal","set_type_info"); - this->type = type_in; - this->label = label_in; - this->type_ps = type_ps_in; + this->type = type_in; + this->label = label_in; + this->type_ps = type_ps_in; - if (lmax_in < -1 || lmax_in > 20) - { - ModuleBase::WARNING_QUIT("Numerical_Nonlocal", "bad input of lmax : should be between -1 and 20"); - } + if (lmax_in < -1 || lmax_in > 20) + { + ModuleBase::WARNING_QUIT("Numerical_Nonlocal", "bad input of lmax : should be between -1 and 20"); + } - this->lmax = lmax_in; + this->lmax = lmax_in; - this->nproj = nproj_in; + this->nproj = nproj_in; - assert(nproj >= 0); + assert(nproj >= 0); -//---------------------------------------------------------- -// EXPLAIN : non_local pseudopotential projector for each l -//---------------------------------------------------------- - //only store radial function - delete[] Proj; - this->Proj = nullptr; - this->Proj = new Numerical_Nonlocal_Lm[this->nproj]; + //---------------------------------------------------------- + // EXPLAIN : non_local pseudopotential projector for each l + //---------------------------------------------------------- + // only store radial function + delete[] Proj; + this->Proj = nullptr; + this->Proj = new Numerical_Nonlocal_Lm[this->nproj]; - for (int p1=0; p1Proj[p1] = Proj_in[p1]; - } + for (int p1 = 0; p1 < nproj; p1++) + { + this->Proj[p1] = Proj_in[p1]; + } - this->rcut_max = 0.0; - for(int p1=0; p1rcut_max = std::max( this->Proj[p1].getRcut(), rcut_max ); - } - return; + this->rcut_max = 0.0; + for (int p1 = 0; p1 < nproj; p1++) + { + this->rcut_max = std::max(this->Proj[p1].getRcut(), rcut_max); + } + return; } - diff --git a/source/module_basis/module_ao/ORB_nonlocal.h b/source/module_basis/module_ao/ORB_nonlocal.h index 8991620f16..05914de300 100644 --- a/source/module_basis/module_ao/ORB_nonlocal.h +++ b/source/module_basis/module_ao/ORB_nonlocal.h @@ -1,14 +1,14 @@ #ifndef NUMERICAL_NONLOCAL_H #define NUMERICAL_NONLOCAL_H -#include "module_base/complexarray.h" -#include "module_base/complexmatrix.h" #include "ORB_nonlocal_lm.h" +#include "source_base/complexarray.h" +#include "source_base/complexmatrix.h" /** * \class Numerical_Nonlocal *CLASS Numerical_Nonlocal *---------------------------- - * Note : contain nonlocal ps(:pseudopotential) information + * Note : contain nonlocal ps(:pseudopotential) information * about atoms * * Feature : set and store information about ps infomation @@ -20,47 +20,60 @@ */ class Numerical_Nonlocal { -public: + public: + Numerical_Nonlocal(); + ~Numerical_Nonlocal(); - Numerical_Nonlocal(); - ~Numerical_Nonlocal(); + const int& getLmax() const + { + return this->lmax; + } - const int& getLmax() const { return this->lmax; } + const int& getType() const + { + return this->type; + } - const int& getType() const { return this->type; } + const std::string& getLabel() const + { + return this->label; + } - const std::string& getLabel() const { return this->label; } + const std::string& getType_ps() const + { + return this->type_ps; + } - const std::string& getType_ps() const { return this->type_ps; } + void set_type_info(const int& type_in, + const std::string& label_in, + const std::string& type_ps_in, + const int& lmax_in, + const int& nproj_in, + const Numerical_Nonlocal_Lm* ps_orbital_in); + Numerical_Nonlocal_Lm* Proj; ///< length: nproj(only store radial function ) - void set_type_info( - const int& type_in, - const std::string& label_in, - const std::string& type_ps_in, - const int& lmax_in, - const int& nproj_in, - const Numerical_Nonlocal_Lm* ps_orbital_in); + const double& get_rcut_max() const + { + return rcut_max; + } + const int& get_nproj() const + { + return nproj; + } - Numerical_Nonlocal_Lm* Proj; ///< length: nproj(only store radial function ) + private: + std::string label = ""; /// #include @@ -16,58 +16,58 @@ Numerical_Nonlocal_Lm::Numerical_Nonlocal_Lm() { - label = ""; - index_atom_type = 0; - angular_momentum_l = 0; - index_proj = 0; - - nr = 1; - nk = 1; - - rcut = 0.0; - kcut = 0.0; - dk = 0.0; - - nr_uniform = 1; - dr_uniform = -1.0; - this->renew(); + label = ""; + index_atom_type = 0; + angular_momentum_l = 0; + index_proj = 0; + + nr = 1; + nk = 1; + + rcut = 0.0; + kcut = 0.0; + dk = 0.0; + + nr_uniform = 1; + dr_uniform = -1.0; + this->renew(); } Numerical_Nonlocal_Lm::~Numerical_Nonlocal_Lm() { - this->freemem(); + this->freemem(); } void Numerical_Nonlocal_Lm::renew() { - assert(nr_uniform>0); - assert(nr>0); - assert(nk>0); - this->r_radial = new double[nr]; - this->rab = new double[nr]; - this->beta_r = new double[nr]; - this->beta_uniform = new double[nr_uniform]; - this->dbeta_uniform = new double[nr_uniform]; - this->k_radial = new double[nk]; - this->beta_k = new double[nk]; - ModuleBase::GlobalFunc::ZEROS(r_radial, nr); - ModuleBase::GlobalFunc::ZEROS(rab, nr); - ModuleBase::GlobalFunc::ZEROS(beta_r, nr); - ModuleBase::GlobalFunc::ZEROS(beta_uniform, nr_uniform); - ModuleBase::GlobalFunc::ZEROS(dbeta_uniform, nr_uniform); - ModuleBase::GlobalFunc::ZEROS(k_radial, nk); - ModuleBase::GlobalFunc::ZEROS(beta_k, nk); + assert(nr_uniform > 0); + assert(nr > 0); + assert(nk > 0); + this->r_radial = new double[nr]; + this->rab = new double[nr]; + this->beta_r = new double[nr]; + this->beta_uniform = new double[nr_uniform]; + this->dbeta_uniform = new double[nr_uniform]; + this->k_radial = new double[nk]; + this->beta_k = new double[nk]; + ModuleBase::GlobalFunc::ZEROS(r_radial, nr); + ModuleBase::GlobalFunc::ZEROS(rab, nr); + ModuleBase::GlobalFunc::ZEROS(beta_r, nr); + ModuleBase::GlobalFunc::ZEROS(beta_uniform, nr_uniform); + ModuleBase::GlobalFunc::ZEROS(dbeta_uniform, nr_uniform); + ModuleBase::GlobalFunc::ZEROS(k_radial, nk); + ModuleBase::GlobalFunc::ZEROS(beta_k, nk); } void Numerical_Nonlocal_Lm::freemem() { - delete[] this->r_radial; - delete[] this->rab; - delete[] this->beta_r; - delete[] this->beta_uniform; - delete[] this->dbeta_uniform; - delete[] this->k_radial; - delete[] this->beta_k; + delete[] this->r_radial; + delete[] this->rab; + delete[] this->beta_r; + delete[] this->beta_uniform; + delete[] this->dbeta_uniform; + delete[] this->k_radial; + delete[] this->beta_k; r_radial = nullptr; rab = nullptr; @@ -78,202 +78,203 @@ void Numerical_Nonlocal_Lm::freemem() beta_k = nullptr; } -Numerical_Nonlocal_Lm& Numerical_Nonlocal_Lm::operator= -( - const Numerical_Nonlocal_Lm & nol -) +Numerical_Nonlocal_Lm& Numerical_Nonlocal_Lm::operator=(const Numerical_Nonlocal_Lm& nol) { - this->label = nol.label; - this->index_atom_type = nol.index_atom_type; - this->angular_momentum_l = nol.angular_momentum_l; + this->label = nol.label; + this->index_atom_type = nol.index_atom_type; + this->angular_momentum_l = nol.angular_momentum_l; this->index_proj = nol.index_proj; - this->nr = nol.nr; - this->nk = nol.nk; + this->nr = nol.nr; + this->nk = nol.nk; - this->nr_uniform = nol.nr_uniform; - this->dr_uniform = nol.dr_uniform; + this->nr_uniform = nol.nr_uniform; + this->dr_uniform = nol.dr_uniform; - this->rcut = nol.rcut; - this->kcut = nol.kcut; + this->rcut = nol.rcut; + this->kcut = nol.kcut; - this->dk = nol.dk; + this->dk = nol.dk; - this->freemem(); - this->renew(); + this->freemem(); + this->renew(); - for (int ir = 0; ir < nol.nr; ir++) - { - this->r_radial[ir] = nol.r_radial[ir]; - this->rab[ir] = nol.rab[ir]; - this->beta_r[ir] = nol.beta_r[ir]; - } + for (int ir = 0; ir < nol.nr; ir++) + { + this->r_radial[ir] = nol.r_radial[ir]; + this->rab[ir] = nol.rab[ir]; + this->beta_r[ir] = nol.beta_r[ir]; + } - for (int ir = 0; ir < nr_uniform; ir++) - { - this->beta_uniform[ir] = nol.beta_uniform[ir]; - this->dbeta_uniform[ir] = nol.dbeta_uniform[ir]; - } + for (int ir = 0; ir < nr_uniform; ir++) + { + this->beta_uniform[ir] = nol.beta_uniform[ir]; + this->dbeta_uniform[ir] = nol.dbeta_uniform[ir]; + } - for (int ik = 0; ik < nol.nk; ik++) - { - this->k_radial[ik] = nol.k_radial[ik]; - this->beta_k[ik] = nol.beta_k[ik]; - } + for (int ik = 0; ik < nol.nk; ik++) + { + this->k_radial[ik] = nol.k_radial[ik]; + this->beta_k[ik] = nol.beta_k[ik]; + } - return *this; + return *this; } -void Numerical_Nonlocal_Lm::set_NL_proj( - const std::string &label_in, - const int &index_atom_type_in, - const int &angular_momentum_l_in, - const int &nr_in, - const double *rab_in, - const double *r_radial_in, - const double *beta_r_in, - const int &nk_in, - const double &dk_in, - const double &dr_uniform_in) +void Numerical_Nonlocal_Lm::set_NL_proj(const std::string& label_in, + const int& index_atom_type_in, + const int& angular_momentum_l_in, + const int& nr_in, + const double* rab_in, + const double* r_radial_in, + const double* beta_r_in, + const int& nk_in, + const double& dk_in, + const double& dr_uniform_in) { - this->label = label_in; - this->index_atom_type = index_atom_type_in; - - this->angular_momentum_l = angular_momentum_l_in; - assert(angular_momentum_l_in>=-1); // -1 means no angular momentum. - - this->dr_uniform = dr_uniform_in; - - this->nr = nr_in; - assert(nr_in>1 && nr_in <10000); - assert(nr%2!=0); - - this->rcut = r_radial_in[nr-1]; - assert(rcut>=0.0); - - this->nk = nk_in; - assert(nk%2!=0); - - this->dk = dk_in; - assert(dk>0.0); + this->label = label_in; + this->index_atom_type = index_atom_type_in; + + this->angular_momentum_l = angular_momentum_l_in; + assert(angular_momentum_l_in >= -1); // -1 means no angular momentum. + + this->dr_uniform = dr_uniform_in; + + this->nr = nr_in; + assert(nr_in > 1 && nr_in < 10000); + assert(nr % 2 != 0); + + this->rcut = r_radial_in[nr - 1]; + assert(rcut >= 0.0); + + this->nk = nk_in; + assert(nk % 2 != 0); + + this->dk = dk_in; + assert(dk > 0.0); this->freemem(); this->renew(); - - for (int ir = 0; ir < nr; ir++) - { - this->r_radial[ir] = r_radial_in[ir]; - this->rab[ir] = rab_in[ir]; - this->beta_r[ir] = beta_r_in[ir]; - } - - for (int ik = 0; ik < nk; ik++) - { - this->k_radial[ik] = ik * this->dk; - } - this->kcut = (nk-1) * this->dk; - - // (1) extra the uniform mesh - //this->extra_uniform(dr_uniform); - // (2) get the beta_k - this->get_kradial(); - - return; + + for (int ir = 0; ir < nr; ir++) + { + this->r_radial[ir] = r_radial_in[ir]; + this->rab[ir] = rab_in[ir]; + this->beta_r[ir] = beta_r_in[ir]; + } + + for (int ik = 0; ik < nk; ik++) + { + this->k_radial[ik] = ik * this->dk; + } + this->kcut = (nk - 1) * this->dk; + + // (1) extra the uniform mesh + // this->extra_uniform(dr_uniform); + // (2) get the beta_k + this->get_kradial(); + + return; } void Numerical_Nonlocal_Lm::get_kradial() { - //ModuleBase::TITLE("Numerical_Nonlocal_Lm","get_kradial"); - double *jl = new double[nr]; - double *integrated_func = new double[nr]; + // ModuleBase::TITLE("Numerical_Nonlocal_Lm","get_kradial"); + double* jl = new double[nr]; + double* integrated_func = new double[nr]; const double pref = sqrt(2.0 / ModuleBase::PI); for (int ik = 0; ik < nk; ik++) { - ModuleBase::Sphbes::Spherical_Bessel( - this->nr, - this->r_radial, - this->k_radial[ik], - this->angular_momentum_l, - jl); + ModuleBase::Sphbes::Spherical_Bessel(this->nr, + this->r_radial, + this->k_radial[ik], + this->angular_momentum_l, + jl); for (int ir = 0; ir < nr; ir++) { - // beta_r is beta*r; + // beta_r is beta*r; integrated_func[ir] = this->beta_r[ir] * this->r_radial[ir] * jl[ir]; } - ModuleBase::Integral::Simpson_Integral( - this->nr, - integrated_func, - this->rab, - this->beta_k[ik]); + ModuleBase::Integral::Simpson_Integral(this->nr, integrated_func, this->rab, this->beta_k[ik]); - this->beta_k[ik] *= ( pref*k_radial[ik]); + this->beta_k[ik] *= (pref * k_radial[ik]); } delete[] integrated_func; delete[] jl; } - -void Numerical_Nonlocal_Lm::plot(const int &my_rank)const +void Numerical_Nonlocal_Lm::plot(const int& my_rank) const { - std::string orbital_type; - switch( this->angular_momentum_l ) - { - case 0: orbital_type = "s"; break; - case 1: orbital_type = "p"; break; - case 2: orbital_type = "d"; break; - case 3: orbital_type = "f"; break; - case 4: orbital_type = "g"; break; - default: ModuleBase::WARNING_QUIT("Numerical_Orbital_Lm::plot","Please check in functoin."); - } + std::string orbital_type; + switch (this->angular_momentum_l) + { + case 0: + orbital_type = "s"; + break; + case 1: + orbital_type = "p"; + break; + case 2: + orbital_type = "d"; + break; + case 3: + orbital_type = "f"; + break; + case 4: + orbital_type = "g"; + break; + default: + ModuleBase::WARNING_QUIT("Numerical_Orbital_Lm::plot", "Please check in functoin."); + } #ifdef __NORMAL #else - if(my_rank==0) - { - std::stringstream ssr, ssk, ssru; - ssr << PARAM.globalv.global_out_dir << this->label << "/" - << this->label << "-" << orbital_type << "-proj-r.dat"; - - ssk << PARAM.globalv.global_out_dir << this->label << "/" - << this->label << "-" << orbital_type << "-proj-k.dat"; - - ssru << PARAM.globalv.global_out_dir << this->label << "/" - << this->label << "-" << orbital_type << "-proj-ru.dat"; - - std::ofstream ofsr(ssr.str().c_str()); - std::ofstream ofsk(ssk.str().c_str()); - std::ofstream ofsru(ssru.str().c_str()); - - if (!ofsk || !ofsr || !ofsru) - { - ModuleBase::WARNING_QUIT("Numerical_Orbital_Lm::plot", "Can't open files!"); - } - - for (int i = 0; i < this->nr; i++) - { - ofsr << this->r_radial[i] << " " << this->beta_r[i] << std::endl; - } - - for (int i = 0; i < this->nk; i++) - { - ofsk << this->k_radial[i] << " " << this->beta_k[i] << std::endl; - } - - for (int i = 0; i < this->nr_uniform; i++) - { - ofsru << i * this->dr_uniform << " " << this->beta_uniform[i] << std::endl; - } - - ofsr.close(); - ofsk.close(); - ofsru.close(); - } + if (my_rank == 0) + { + std::stringstream ssr, ssk, ssru; + ssr << PARAM.globalv.global_out_dir << this->label << "/" << this->label << "-" << orbital_type + << "-proj-r.dat"; + + ssk << PARAM.globalv.global_out_dir << this->label << "/" << this->label << "-" << orbital_type + << "-proj-k.dat"; + + ssru << PARAM.globalv.global_out_dir << this->label << "/" << this->label << "-" << orbital_type + << "-proj-ru.dat"; + + std::ofstream ofsr(ssr.str().c_str()); + std::ofstream ofsk(ssk.str().c_str()); + std::ofstream ofsru(ssru.str().c_str()); + + if (!ofsk || !ofsr || !ofsru) + { + ModuleBase::WARNING_QUIT("Numerical_Orbital_Lm::plot", "Can't open files!"); + } + + for (int i = 0; i < this->nr; i++) + { + ofsr << this->r_radial[i] << " " << this->beta_r[i] << std::endl; + } + + for (int i = 0; i < this->nk; i++) + { + ofsk << this->k_radial[i] << " " << this->beta_k[i] << std::endl; + } + + for (int i = 0; i < this->nr_uniform; i++) + { + ofsru << i * this->dr_uniform << " " << this->beta_uniform[i] << std::endl; + } + + ofsr.close(); + ofsk.close(); + ofsru.close(); + } #endif - return; + return; } diff --git a/source/module_basis/module_ao/ORB_read.cpp b/source/module_basis/module_ao/ORB_read.cpp index c1c77461ee..f1ca349793 100644 --- a/source/module_basis/module_ao/ORB_read.cpp +++ b/source/module_basis/module_ao/ORB_read.cpp @@ -1,10 +1,10 @@ #include "ORB_read.h" -#include "module_base/math_integral.h" -#include "module_base/parallel_common.h" -#include "module_base/timer.h" -#include "module_base/tool_check.h" #include "module_parameter/parameter.h" +#include "source_base/math_integral.h" +#include "source_base/parallel_common.h" +#include "source_base/timer.h" +#include "source_base/tool_check.h" #include #include @@ -37,30 +37,30 @@ LCAO_Orbitals::~LCAO_Orbitals() delete[] Alpha; } -std::vector LCAO_Orbitals::cutoffs() const { +std::vector LCAO_Orbitals::cutoffs() const +{ std::vector cutoffs(ntype); - for (int it = 0; it < ntype; ++it) { + for (int it = 0; it < ntype; ++it) + { cutoffs[it] = Phi[it].getRcut(); } return cutoffs; } -void LCAO_Orbitals::init( - std::ofstream& ofs_in, - const int& ntype, - const std::string& orbital_dir, - const std::string* orbital_file, - const std::string& descriptor_file, - const int& lmax, - const double& lcao_ecut_in, - const double& lcao_dk_in, - const double& lcao_dr_in, - const double& lcao_rmax_in, - const bool& deepks_setorb, - const int& out_mat_r, - const bool& force_flag, - const int& my_rank -) +void LCAO_Orbitals::init(std::ofstream& ofs_in, + const int& ntype, + const std::string& orbital_dir, + const std::string* orbital_file, + const std::string& descriptor_file, + const int& lmax, + const double& lcao_ecut_in, + const double& lcao_dk_in, + const double& lcao_dr_in, + const double& lcao_rmax_in, + const bool& deepks_setorb, + const int& out_mat_r, + const bool& force_flag, + const int& my_rank) { assert(ntype > 0); assert(lmax >= 0); @@ -90,7 +90,6 @@ void LCAO_Orbitals::init( return; } - #ifdef __MPI // be called in UnitCell. void LCAO_Orbitals::bcast_files(const int& ntype_in, const int& my_rank) @@ -232,9 +231,10 @@ void LCAO_Orbitals::Read_Orbitals(std::ofstream& ofs_in, // } // this->kmesh = static_cast (PI / 0.01 / 4 / this->dk); - if (kmesh % 2 == 0) { + if (kmesh % 2 == 0) + { kmesh++; -} + } ModuleBase::GlobalFunc::OUT(ofs_in, "kmesh", kmesh); //----------------------------------------------------------------- diff --git a/source/module_basis/module_ao/parallel_orbitals.cpp b/source/module_basis/module_ao/parallel_orbitals.cpp index 4b6132cac4..f040c504af 100644 --- a/source/module_basis/module_ao/parallel_orbitals.cpp +++ b/source/module_basis/module_ao/parallel_orbitals.cpp @@ -1,8 +1,8 @@ #include "parallel_orbitals.h" -#include "module_base/blacs_connector.h" -#include "module_base/scalapack_connector.h" -#include "module_base/global_function.h" +#include "source_base/blacs_connector.h" +#include "source_base/global_function.h" +#include "source_base/scalapack_connector.h" Parallel_Orbitals::Parallel_Orbitals() { @@ -12,19 +12,18 @@ Parallel_Orbitals::Parallel_Orbitals() this->nlocstart = nullptr; this->nnr = 1; this->ncol_bands = 0; - this->nrow_bands=0; - this->nloc_wfc=0; - this->nloc_Eij=0; - this->lastband_in_proc=0; - this->lastband_number=0; - this->loc_size=0; + this->nrow_bands = 0; + this->nloc_wfc = 0; + this->nloc_Eij = 0; + this->lastband_in_proc = 0; + this->lastband_number = 0; + this->loc_size = 0; this->nbands = 0; - } Parallel_Orbitals::~Parallel_Orbitals() { - delete[] loc_sizes; + delete[] loc_sizes; delete[] nlocdim; delete[] nlocstart; } @@ -33,7 +32,7 @@ int Parallel_Orbitals::get_wfc_global_nbands() const { #ifdef __MPI return this->desc_wfc[3]; -#else +#else return this->ncol_bands; #endif } @@ -52,22 +51,22 @@ int Parallel_Orbitals::get_nbands() const return this->nbands; } -void Parallel_Orbitals::set_atomic_trace(const int* iat2iwt, const int &nat, const int &nlocal) +void Parallel_Orbitals::set_atomic_trace(const int* iat2iwt, const int& nat, const int& nlocal) { ModuleBase::TITLE("Parallel_Orbitals", "set_atomic_trace"); this->iat2iwt_ = iat2iwt; int nat_plus_1 = nat + 1; this->atom_begin_col.resize(nat_plus_1); this->atom_begin_row.resize(nat_plus_1); - for(int iat=0;iatatom_begin_col[iat] = -1; this->atom_begin_row[iat] = -1; int irow = iat2iwt[iat]; int icol = iat2iwt[iat]; - const int nw_global = (iat == nat-1) ? (nlocal - irow): (iat2iwt[iat+1] - irow); - //find the first local row index of atom iat - for(int i=0;iglobal2local_row_[irow] != -1) { @@ -76,8 +75,8 @@ void Parallel_Orbitals::set_atomic_trace(const int* iat2iwt, const int &nat, con } irow++; } - //find the first local col index of atom iat - for(int i=0;iglobal2local_col_[icol] != -1) { @@ -96,15 +95,15 @@ int Parallel_Orbitals::get_col_size(int iat) const { int size = this->atom_begin_col[iat]; // If the iat-th atom does not have an orbital matrix, return 0 - if(size == -1) + if (size == -1) { return 0; } iat += 1; // Traverse the orbital matrices of the atom and calculate the number of columns - while(this->atom_begin_col[iat] <= this->ncol) + while (this->atom_begin_col[iat] <= this->ncol) { - if(this->atom_begin_col[iat] != -1) + if (this->atom_begin_col[iat] != -1) { size = this->atom_begin_col[iat] - size; return size; @@ -118,14 +117,14 @@ int Parallel_Orbitals::get_col_size(int iat) const int Parallel_Orbitals::get_row_size(int iat) const { int size = this->atom_begin_row[iat]; - if(size == -1) + if (size == -1) { return 0; } iat += 1; - while(this->atom_begin_row[iat] <= this->nrow) + while (this->atom_begin_row[iat] <= this->nrow) { - if(this->atom_begin_row[iat] != -1) + if (this->atom_begin_row[iat] != -1) { size = this->atom_begin_row[iat] - size; return size; @@ -140,7 +139,7 @@ int Parallel_Orbitals::get_row_size(int iat) const std::vector Parallel_Orbitals::get_indexes_row() const { std::vector indexes(this->nrow); - for(int i = 0; i < this->nrow; i++) + for (int i = 0; i < this->nrow; i++) { #ifdef __MPI indexes[i] = this->local2global_row(i); @@ -154,7 +153,7 @@ std::vector Parallel_Orbitals::get_indexes_row() const std::vector Parallel_Orbitals::get_indexes_col() const { std::vector indexes(this->ncol); - for(int i = 0; i < this->ncol; i++) + for (int i = 0; i < this->ncol; i++) { #ifdef __MPI indexes[i] = this->local2global_col(i); @@ -168,14 +167,14 @@ std::vector Parallel_Orbitals::get_indexes_col() const std::vector Parallel_Orbitals::get_indexes_row(int iat) const { int size = this->get_row_size(iat); - if(size == 0) + if (size == 0) { return std::vector(); } std::vector indexes(size); int irow = this->atom_begin_row[iat]; int begin = this->iat2iwt_[iat]; - for(int i = 0; i < size; ++i) + for (int i = 0; i < size; ++i) { #ifdef __MPI indexes[i] = this->local2global_row(irow + i) - begin; @@ -189,14 +188,14 @@ std::vector Parallel_Orbitals::get_indexes_row(int iat) const std::vector Parallel_Orbitals::get_indexes_col(int iat) const { int size = this->get_col_size(iat); - if(size == 0) + if (size == 0) { return std::vector(); } std::vector indexes(size); int icol = this->atom_begin_col[iat]; int begin = this->iat2iwt_[iat]; - for(int i = 0; i < size; ++i) + for (int i = 0; i < size; ++i) { #ifdef __MPI indexes[i] = this->local2global_col(icol + i) - begin; @@ -221,10 +220,7 @@ void Parallel_Orbitals::set_desc_wfc_Eij(const int& nbasis, const int& nbands, c descinit_(desc_wfc1, &nbands, &nbasis, &this->nb, &this->nb, &ISRC, &ISRC, &this->blacs_ctxt, &lld, &info); descinit_(desc_Eij, &nbands, &nbands, &this->nb, &this->nb, &ISRC, &ISRC, &this->blacs_ctxt, &lld, &info); } -int Parallel_Orbitals::set_nloc_wfc_Eij( - const int& N_A, - std::ofstream& ofs_running, - std::ofstream& ofs_warning) +int Parallel_Orbitals::set_nloc_wfc_Eij(const int& N_A, std::ofstream& ofs_running, std::ofstream& ofs_warning) { ModuleBase::TITLE("Parallel_Orbitals", "set_nloc_wfc_Eij"); // for wavefuncton , calculate nbands_loc @@ -246,9 +242,8 @@ int Parallel_Orbitals::set_nloc_wfc_Eij( else { ModuleBase::WARNING_QUIT("Parallel_Orbitals::set_nloc_wfc_Eij", - "The number of columns of the 2D process grid exceeds the number of bands. " - "Try launching the calculation with fewer MPI processes." - ); + "The number of columns of the 2D process grid exceeds the number of bands. " + "Try launching the calculation with fewer MPI processes."); } } int col_b_bands = block / dim1; diff --git a/source/module_basis/module_ao/parallel_orbitals.h b/source/module_basis/module_ao/parallel_orbitals.h index 77f094e361..e8beffc5d4 100644 --- a/source/module_basis/module_ao/parallel_orbitals.h +++ b/source/module_basis/module_ao/parallel_orbitals.h @@ -1,13 +1,14 @@ #ifndef _PARALLEL_ORBITALS_H_ #define _PARALLEL_ORBITALS_H_ -#include "module_base/parallel_2d.h" +#include "source_base/parallel_2d.h" + #include /// This class packs the information of 2D-block-cyclic for LCAO code: /// parallel distribution of basis, wavefunction and matrix. class Parallel_Orbitals : public Parallel_2D { -public: + public: Parallel_Orbitals(); ~Parallel_Orbitals(); @@ -15,45 +16,41 @@ class Parallel_Orbitals : public Parallel_2D /// must divided on dim1 because of elpa interface int ncol_bands; int nrow_bands; - + /// ncol_bands*nrow long nloc_wfc; - //ncol_bands*ncol_bands + // ncol_bands*ncol_bands long nloc_Eij; int lastband_in_proc; - int lastband_number; + int lastband_number; ///--------------------------------------- /// number of elements(basis-pairs) in this processon /// on all adjacent atoms-pairs(2D division) ///--------------------------------------- - int nnr=1; - int *nlocdim; - int *nlocstart; - + int nnr = 1; + int* nlocdim; + int* nlocstart; + #ifdef __MPI - int desc_wfc[9]; //for wfc, nlocal*nbands - int desc_Eij[9]; // for Eij in TDDFT, nbands*nbands + int desc_wfc[9]; // for wfc, nlocal*nbands + int desc_Eij[9]; // for Eij in TDDFT, nbands*nbands int desc_wfc1[9]; // for wfc^T in TDDFT, nbands*nlocal /// set the local size of wavefunction and Eij - int set_nloc_wfc_Eij(const int& N_A/**< global row size*/, - std::ofstream& ofs_running, - std::ofstream& ofs_warning); + int set_nloc_wfc_Eij(const int& N_A /**< global row size*/, std::ofstream& ofs_running, std::ofstream& ofs_warning); ///@brief set the desc[9] of the 2D-block-cyclic distribution of wavefunction and Eij - void set_desc_wfc_Eij(const int& nbasis, - const int& nbands, - const int& lld); + void set_desc_wfc_Eij(const int& nbasis, const int& nbands, const int& lld); #endif int* loc_sizes; int loc_size; - int get_wfc_global_nbands () const; - int get_wfc_global_nbasis () const; + int get_wfc_global_nbands() const; + int get_wfc_global_nbasis() const; /** * @brief set row and col begin index for each atom @@ -64,7 +61,7 @@ class Parallel_Orbitals : public Parallel_2D * @param nat : number of atoms * @param nlocal : number of global orbitals */ - void set_atomic_trace(const int* iat2iwt, const int &nat, const int &nlocal); + void set_atomic_trace(const int* iat2iwt, const int& nat, const int& nlocal); /** * @brief dimension getters for 2D-block-cyclic division of Hamiltonian matrix @@ -72,9 +69,15 @@ class Parallel_Orbitals : public Parallel_2D * get_row_size() : total number of rows of Hamiltonian matrix in this processor * get_col_size(iat) : number of columns of Hamiltonian matrix in atom iat * get_row_size(iat) : number of rows of Hamiltonian matrix in atom iat - */ - int get_col_size()const { return this->ncol; }; - int get_row_size()const { return this->nrow; }; + */ + int get_col_size() const + { + return this->ncol; + }; + int get_row_size() const + { + return this->nrow; + }; int get_col_size(int iat) const; int get_row_size(int iat) const; @@ -88,18 +91,17 @@ class Parallel_Orbitals : public Parallel_2D * get_indexes_col() : global indexes (~NLOCAL) of columns of Hamiltonian matrix in this processor * get_indexes_row(iat) : global indexes (~nw) of rows of Hamiltonian matrix in atom iat * get_indexes_col(iat) : global indexes (~nw) of columns of Hamiltonian matrix in atom iat - */ + */ std::vector get_indexes_row() const; std::vector get_indexes_col() const; std::vector get_indexes_row(int iat) const; std::vector get_indexes_col(int iat) const; // private: - // orbital index for each atom + // orbital index for each atom std::vector atom_begin_row; std::vector atom_begin_col; const int* iat2iwt_ = nullptr; - }; #endif diff --git a/source/module_basis/module_ao/test/1_snap_equal_test.cpp b/source/module_basis/module_ao/test/1_snap_equal_test.cpp index 95e99fd3f6..f59ade365f 100644 --- a/source/module_basis/module_ao/test/1_snap_equal_test.cpp +++ b/source/module_basis/module_ao/test/1_snap_equal_test.cpp @@ -1,84 +1,75 @@ -#include -#include"ORB_unittest.h" -#include "module_base/global_variable.h" +#include "ORB_unittest.h" +#include "source_base/global_variable.h" -//Test whether the 2-center-int results -// and its derivative from two clases are equal. +#include + +// Test whether the 2-center-int results +// and its derivative from two clases are equal. // - ORB_gen_table::snap_psipsi(job=0) and Center2_Orb::Orb11::cal_overlap -// - ORB_gen_table::snap_psipsi(job=1) and Center2_Orb::Orb11::cal_grad_overlap +// - ORB_gen_table::snap_psipsi(job=1) and Center2_Orb::Orb11::cal_grad_overlap TEST_F(test_orb, equal_test) { - - this->set_center2orbs(); - //equal test - //orb - double olm_0[1] = { 0 }; - double olm_1[3] = { 0,0,0 }; - //center2orb + + this->set_center2orbs(); + // equal test + // orb + double olm_0[1] = {0}; + double olm_1[3] = {0, 0, 0}; + // center2orb double clm_0 = 0; - ModuleBase::Vector3 clm_1; + ModuleBase::Vector3 clm_1; - //test parameters - const double rmax = 5; //Ry - srand((unsigned)time(NULL)); + // test parameters + const double rmax = 5; // Ry + srand((unsigned)time(NULL)); ModuleBase::Vector3 R1(0, 0, 0); - ModuleBase::Vector3 R2(randr(rmax), randr(rmax), randr(rmax)); - std::cout << "random R2=(" << R2.x << "," << R2.y << "," << R2.z << ")" << std::endl; - ModuleBase::Vector3 dR = ModuleBase::Vector3(0.001, 0.001, 0.001); - //4. calculate overlap and grad_overlap by both methods - int T1 = 0; - - for (int T2 = 0;T2 < ORB.get_ntype();++T2) - { - for (int L1 = 0;L1 < ORB.Phi[T1].getLmax();++L1) - { - for (int N1 = 0;N1 < ORB.Phi[T1].getNchi(L1);++N1) - { - for (int L2 = 0;L2 < ORB.Phi[T2].getLmax();++L2) - { - for (int N2 = 0;N2 < ORB.Phi[T2].getNchi(L2);++N2) - { - for (int m1 = 0;m1 < 2 * L1 + 1;++m1) - { - for (int m2 = 0;m2 < 2 * L2 + 1;++m2) - { - OGT.snap_psipsi( - ORB, olm_0, 0, 'S', - R1, T1, L1, m1, N1, - R2, T2, L2, m2, N2 - ); - OGT.snap_psipsi( - ORB, olm_1, 1, 'S', - R1, T1, L1, m1, N1, - R2, T2, L2, m2, N2 - ); - //std::cout << this->mock_center2_orb11[T1][T2][L1][N1][L2][N2]->cal_overlap(R1, R2, m1, m2); - clm_0 = - test_center2_orb11[T1][T2][L1][N1][L2][N2]->cal_overlap(R1, R2, m1, m2); - clm_1 = - test_center2_orb11[T1][T2][L1][N1][L2][N2]->cal_grad_overlap(R1, R2, m1, m2); - EXPECT_NEAR(olm_0[0], clm_0, 1e-10); - EXPECT_NEAR(olm_1[0], clm_1.x, 1e-10); - EXPECT_NEAR(olm_1[1], clm_1.y, 1e-10); - EXPECT_NEAR(olm_1[2], clm_1.z, 1e-10); - ModuleBase::GlobalFunc::ZEROS(olm_1, 3); - } - } - } + ModuleBase::Vector3 R2(randr(rmax), randr(rmax), randr(rmax)); + std::cout << "random R2=(" << R2.x << "," << R2.y << "," << R2.z << ")" << std::endl; + ModuleBase::Vector3 dR = ModuleBase::Vector3(0.001, 0.001, 0.001); + // 4. calculate overlap and grad_overlap by both methods + int T1 = 0; - } - } - } - } + for (int T2 = 0; T2 < ORB.get_ntype(); ++T2) + { + for (int L1 = 0; L1 < ORB.Phi[T1].getLmax(); ++L1) + { + for (int N1 = 0; N1 < ORB.Phi[T1].getNchi(L1); ++N1) + { + for (int L2 = 0; L2 < ORB.Phi[T2].getLmax(); ++L2) + { + for (int N2 = 0; N2 < ORB.Phi[T2].getNchi(L2); ++N2) + { + for (int m1 = 0; m1 < 2 * L1 + 1; ++m1) + { + for (int m2 = 0; m2 < 2 * L2 + 1; ++m2) + { + OGT.snap_psipsi(ORB, olm_0, 0, 'S', R1, T1, L1, m1, N1, R2, T2, L2, m2, N2); + OGT.snap_psipsi(ORB, olm_1, 1, 'S', R1, T1, L1, m1, N1, R2, T2, L2, m2, N2); + // std::cout << this->mock_center2_orb11[T1][T2][L1][N1][L2][N2]->cal_overlap(R1, R2, + // m1, m2); + clm_0 = test_center2_orb11[T1][T2][L1][N1][L2][N2]->cal_overlap(R1, R2, m1, m2); + clm_1 = test_center2_orb11[T1][T2][L1][N1][L2][N2]->cal_grad_overlap(R1, R2, m1, m2); + EXPECT_NEAR(olm_0[0], clm_0, 1e-10); + EXPECT_NEAR(olm_1[0], clm_1.x, 1e-10); + EXPECT_NEAR(olm_1[1], clm_1.y, 1e-10); + EXPECT_NEAR(olm_1[2], clm_1.z, 1e-10); + ModuleBase::GlobalFunc::ZEROS(olm_1, 3); + } + } + } + } + } + } + } } -int main(int argc, char **argv) +int main(int argc, char** argv) { #ifdef __MPI MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD,&GlobalV::NPROC); - MPI_Comm_rank(MPI_COMM_WORLD,&GlobalV::MY_RANK); + MPI_Comm_size(MPI_COMM_WORLD, &GlobalV::NPROC); + MPI_Comm_rank(MPI_COMM_WORLD, &GlobalV::MY_RANK); #endif testing::InitGoogleTest(&argc, argv); int result = RUN_ALL_TESTS(); @@ -89,4 +80,3 @@ int main(int argc, char **argv) return result; } - diff --git a/source/module_basis/module_ao/test/CMakeLists.txt b/source/module_basis/module_ao/test/CMakeLists.txt index 1cde85d51e..a51a5aaeda 100644 --- a/source/module_basis/module_ao/test/CMakeLists.txt +++ b/source/module_basis/module_ao/test/CMakeLists.txt @@ -1,35 +1,35 @@ remove_definitions(-D__EXX) list(APPEND depend_files - ../../../module_base/math_integral.cpp - ../../../module_base/math_sphbes.cpp - ../../../module_base/math_polyint.cpp - ../../../module_base/math_ylmreal.cpp - ../../../module_base/ylm.cpp - ../../../module_base/memory.cpp - ../../../module_base/blas_connector_base.cpp - ../../../module_base/blas_connector_vector.cpp - ../../../module_base/blas_connector_matrix.cpp - ../../../module_base/complexarray.cpp - ../../../module_base/complexmatrix.cpp - ../../../module_base/matrix.cpp - ../../../module_base/realarray.cpp - ../../../module_base/intarray.cpp - ../../../module_base/sph_bessel_recursive-d1.cpp - ../../../module_base/sph_bessel_recursive-d2.cpp - ../../../module_base/tool_title.cpp - ../../../module_base/tool_quit.cpp - ../../../module_base/tool_check.cpp - ../../../module_base/timer.cpp - ../../../module_base/mathzone_add1.cpp - ../../../module_base/global_variable.cpp - ../../../module_base/global_function.cpp - ../../../module_base/global_file.cpp - ../../../module_base/libm/branred.cpp - ../../../module_base/libm/sincos.cpp - ../../../module_base/spherical_bessel_transformer.cpp - ../../../module_base/cubic_spline.cpp - ../../../module_base/parallel_2d.cpp + ../../../source_base/math_integral.cpp + ../../../source_base/math_sphbes.cpp + ../../../source_base/math_polyint.cpp + ../../../source_base/math_ylmreal.cpp + ../../../source_base/ylm.cpp + ../../../source_base/memory.cpp + ../../../source_base/blas_connector_base.cpp + ../../../source_base/blas_connector_vector.cpp + ../../../source_base/blas_connector_matrix.cpp + ../../../source_base/complexarray.cpp + ../../../source_base/complexmatrix.cpp + ../../../source_base/matrix.cpp + ../../../source_base/realarray.cpp + ../../../source_base/intarray.cpp + ../../../source_base/sph_bessel_recursive-d1.cpp + ../../../source_base/sph_bessel_recursive-d2.cpp + ../../../source_base/tool_title.cpp + ../../../source_base/tool_quit.cpp + ../../../source_base/tool_check.cpp + ../../../source_base/timer.cpp + ../../../source_base/mathzone_add1.cpp + ../../../source_base/global_variable.cpp + ../../../source_base/global_function.cpp + ../../../source_base/global_file.cpp + ../../../source_base/libm/branred.cpp + ../../../source_base/libm/sincos.cpp + ../../../source_base/spherical_bessel_transformer.cpp + ../../../source_base/cubic_spline.cpp + ../../../source_base/parallel_2d.cpp ../ORB_read.cpp ../ORB_atomic.cpp ../ORB_atomic_lm.cpp diff --git a/source/module_basis/module_ao/test/ORB_atomic_lm_test.cpp b/source/module_basis/module_ao/test/ORB_atomic_lm_test.cpp index bf46859517..6542d39199 100644 --- a/source/module_basis/module_ao/test/ORB_atomic_lm_test.cpp +++ b/source/module_basis/module_ao/test/ORB_atomic_lm_test.cpp @@ -1,13 +1,14 @@ +#include "source_base/math_integral.h" + #include "gtest/gtest.h" -#include "module_base/math_integral.h" #define private public #include "module_parameter/parameter.h" #undef private #include +#include +#include #include #include -#include -#include #ifdef __MPI #include @@ -53,7 +54,7 @@ class NumericalOrbitalLmTest : public ::testing::Test { -protected: + protected: void SetUp(); void TearDown(); @@ -66,7 +67,11 @@ class NumericalOrbitalLmTest : public ::testing::Test void init_with_different_k(double const& ecut, double const& dk); size_t calc_nk(double const& ecutwfc, double const& dk); size_t calc_nr_uniform(double const& rcut, double const& dr_uniform); - bool check_file_match(size_t const& nline, double const* col1, double const* col2, double const& tol, std::string const& fname); + bool check_file_match(size_t const& nline, + double const* col1, + double const* col2, + double const& tol, + std::string const& fname); // radial real-space mesh spacing double dr_; @@ -89,34 +94,38 @@ class NumericalOrbitalLmTest : public ::testing::Test bool force_flag_; }; - -size_t NumericalOrbitalLmTest::calc_nk(double const& ecutwfc, double const& dk) { +size_t NumericalOrbitalLmTest::calc_nk(double const& ecutwfc, double const& dk) +{ // current formula for calculating nk from ecutwfc & dk // see module_basis/module_ao/ORB_read.cpp, function "Read_Orbitals" size_t nk = 0; - if(ecutwfc < 20) { - nk = static_cast( 2 * sqrt(ecutwfc) / dk ) + 4; - } else { - nk = static_cast( sqrt(ecutwfc) / dk ) + 4; + if (ecutwfc < 20) + { + nk = static_cast(2 * sqrt(ecutwfc) / dk) + 4; + } + else + { + nk = static_cast(sqrt(ecutwfc) / dk) + 4; } - if (nk%2 == 0) { + if (nk % 2 == 0) + { ++nk; } return nk; } - -size_t NumericalOrbitalLmTest::calc_nr_uniform(double const& rcut, double const& dr_uniform) { - return static_cast(rcut/dr_uniform) + 10; +size_t NumericalOrbitalLmTest::calc_nr_uniform(double const& rcut, double const& dr_uniform) +{ + return static_cast(rcut / dr_uniform) + 10; } - -void NumericalOrbitalLmTest::SetUp() { +void NumericalOrbitalLmTest::SetUp() +{ /////////////////////////////////////////////////// // Parameters @@ -152,7 +161,6 @@ void NumericalOrbitalLmTest::SetUp() { // if true, extra_uniform will compute zty force_flag_ = true; - /////////////////////////////////////////////////// // Read orbital file /////////////////////////////////////////////////// @@ -164,7 +172,7 @@ void NumericalOrbitalLmTest::SetUp() { double rcut = 0.0; unsigned lmax = 0; std::vector nchi_l; // number of chi of each angular momentum - int nr_read = 0; // number of mesh points + int nr_read = 0; // number of mesh points // nr_ has to be odd, probably due to the way Simpson_Integral works // nr_ equals nr_read if nr_read is odd, @@ -183,9 +191,10 @@ void NumericalOrbitalLmTest::SetUp() { ifs >> lmax; // number of chi for each angular momentum - nchi_l.resize(lmax+1); + nchi_l.resize(lmax + 1); std::vector symbol = {"S", "P", "D", "F", "G", "H", "I", "K"}; - for (size_t l = 0; l <= lmax; ++l) { + for (size_t l = 0; l <= lmax; ++l) + { std::string key = symbol[l] + "orbital-->"; ModuleBase::GlobalFunc::SCAN_BEGIN(ifs, key); ifs >> nchi_l[l]; @@ -194,7 +203,7 @@ void NumericalOrbitalLmTest::SetUp() { ModuleBase::GlobalFunc::SCAN_BEGIN(ifs, "Mesh"); ifs >> nr_read; - nr_ = (nr_read%2) ? nr_read : nr_read+1; + nr_ = (nr_read % 2) ? nr_read : nr_read + 1; ModuleBase::GlobalFunc::SCAN_BEGIN(ifs, "dr"); ifs >> dr_; @@ -208,14 +217,16 @@ void NumericalOrbitalLmTest::SetUp() { r_radial_ = new double[nr_]; rab_ = new double[nr_]; - for (int i = 0; i != nr_; ++i) { - r_radial_[i] = i*dr_; + for (int i = 0; i != nr_; ++i) + { + r_radial_[i] = i * dr_; rab_[i] = dr_; } // used in the normalization of input chi - double* integrand= new double[nr_]; - for (int ir = 0; ir != nr_; ++ir) { + double* integrand = new double[nr_]; + for (int ir = 0; ir != nr_; ++ir) + { integrand[ir] = 0.0; } @@ -224,8 +235,10 @@ void NumericalOrbitalLmTest::SetUp() { size_t ichi_tot = 0; - for (size_t l = 0; l <= lmax; ++l) { - for (size_t ichi_l = 0; ichi_l < nchi_l[l]; ++ichi_l) { + for (size_t l = 0; l <= lmax; ++l) + { + for (size_t ichi_l = 0; ichi_l < nchi_l[l]; ++ichi_l) + { // the next block of the orbital file is like // Type L N @@ -236,7 +249,7 @@ void NumericalOrbitalLmTest::SetUp() { ifs >> type >> L >> N; assert(L == l); assert(N == ichi_l); - //std::cout << "l = " << l << " index_chi_l = " << N << std::endl; + // std::cout << "l = " << l << " index_chi_l = " << N << std::endl; l_[ichi_tot] = l; index_chi_l_[ichi_tot] = ichi_l; @@ -244,68 +257,85 @@ void NumericalOrbitalLmTest::SetUp() { // read & normalize chi chi_[ichi_tot] = new double[nr_]; - for (int ir = 0; ir != nr_; ++ir) { + for (int ir = 0; ir != nr_; ++ir) + { chi_[ichi_tot][ir] = 0.0; } - for (int ir = 0; ir != nr_read; ++ir) { + for (int ir = 0; ir != nr_read; ++ir) + { ifs >> chi_[ichi_tot][ir]; - integrand[ir] = std::pow(chi_[ichi_tot][ir]*r_radial_[ir], 2); + integrand[ir] = std::pow(chi_[ichi_tot][ir] * r_radial_[ir], 2); } // radint = \int_0^{\infty} dr r^2 [chi(r)]^2 double radint = 0.0; ModuleBase::Integral::Simpson_Integral(nr_, integrand, rab_, radint); - for (int ir = 0; ir != nr_; ++ir) { + for (int ir = 0; ir != nr_; ++ir) + { chi_[ichi_tot][ir] /= std::sqrt(radint); - } ++ichi_tot; - } } delete[] integrand; } - -void NumericalOrbitalLmTest::TearDown() { +void NumericalOrbitalLmTest::TearDown() +{ delete[] r_radial_; delete[] rab_; - for (size_t ichi = 0; ichi != chi_.size(); ++ichi) { + for (size_t ichi = 0; ichi != chi_.size(); ++ichi) + { delete[] chi_[ichi]; } } - -void NumericalOrbitalLmTest::init() { +void NumericalOrbitalLmTest::init() +{ // initialized the tested objects by pouring // the data collected in SetUp() into nolm_ - for (size_t ichi_tot = 0; ichi_tot != chi_.size(); ++ichi_tot) { - nolm_[ichi_tot].set_orbital_info(elem_label_, index_atom_type_, - l_[ichi_tot], index_chi_l_[ichi_tot], nr_, rab_, - r_radial_, psi_type_, chi_[ichi_tot], nk_, dk_, - dr_uniform_, flag_plot_, flag_sbpool_, force_flag_); + for (size_t ichi_tot = 0; ichi_tot != chi_.size(); ++ichi_tot) + { + nolm_[ichi_tot].set_orbital_info(elem_label_, + index_atom_type_, + l_[ichi_tot], + index_chi_l_[ichi_tot], + nr_, + rab_, + r_radial_, + psi_type_, + chi_[ichi_tot], + nk_, + dk_, + dr_uniform_, + flag_plot_, + flag_sbpool_, + force_flag_); } } - -void NumericalOrbitalLmTest::init_with_different_k(double const& ecut, double const& dk) { +void NumericalOrbitalLmTest::init_with_different_k(double const& ecut, double const& dk) +{ // initialize nolm_ with a k mesh specified by given ecut & dk this->dk_ = dk; this->nk_ = calc_nk(ecut, dk); this->init(); - } - -bool NumericalOrbitalLmTest::check_file_match(size_t const& nline, double const* col1, double const* col2, double const& tol, std::string const& fname) { +bool NumericalOrbitalLmTest::check_file_match(size_t const& nline, + double const* col1, + double const* col2, + double const& tol, + std::string const& fname) +{ /* This function checks whether the content of file named "fname" * contains certain data with certain format. @@ -323,21 +353,23 @@ bool NumericalOrbitalLmTest::check_file_match(size_t const& nline, double const* ifs.open(fname); - for (size_t i = 0; i != nline; ++i) { + for (size_t i = 0; i != nline; ++i) + { std::stringstream ss; std::getline(ifs, tmp_line); ss << tmp_line; ss >> tmp1 >> tmp2; - if( std::abs( col1[i] - std::stod(tmp1.c_str()) ) > tol || - std::abs( col2[i] - std::stod(tmp2.c_str()) ) > tol || - ss.tellg() != -1 ) { + if (std::abs(col1[i] - std::stod(tmp1.c_str())) > tol || std::abs(col2[i] - std::stod(tmp2.c_str())) > tol + || ss.tellg() != -1) + { return false; } } std::getline(ifs, tmp_line); - if ( ifs.tellg() != -1 ) { + if (ifs.tellg() != -1) + { return false; } @@ -346,14 +378,15 @@ bool NumericalOrbitalLmTest::check_file_match(size_t const& nline, double const* return true; } - -TEST_F(NumericalOrbitalLmTest, Init) { +TEST_F(NumericalOrbitalLmTest, Init) +{ // this test checks whether set_orbital_info works as expected // before // a brief check of the default constructor - for (size_t ichi_tot = 0; ichi_tot != chi_.size(); ++ichi_tot) { + for (size_t ichi_tot = 0; ichi_tot != chi_.size(); ++ichi_tot) + { EXPECT_EQ(nolm_[ichi_tot].label, ""); EXPECT_EQ(nolm_[ichi_tot].index_atom_type, 0); EXPECT_EQ(nolm_[ichi_tot].angular_momentum_l, 0); @@ -380,17 +413,17 @@ TEST_F(NumericalOrbitalLmTest, Init) { this->init(); // after - for (size_t ichi_tot = 0; ichi_tot != chi_.size(); ++ichi_tot) { + for (size_t ichi_tot = 0; ichi_tot != chi_.size(); ++ichi_tot) + { EXPECT_EQ(nolm_[ichi_tot].index_atom_type, index_atom_type_); EXPECT_EQ(nolm_[ichi_tot].nk, nk_); - EXPECT_EQ(nolm_[ichi_tot].nr_uniform, - this->calc_nr_uniform(nolm_[ichi_tot].rcut, dr_uniform_)); + EXPECT_EQ(nolm_[ichi_tot].nr_uniform, this->calc_nr_uniform(nolm_[ichi_tot].rcut, dr_uniform_)); - EXPECT_DOUBLE_EQ(nolm_[ichi_tot].kcut, (nk_-1)*dk_); + EXPECT_DOUBLE_EQ(nolm_[ichi_tot].kcut, (nk_ - 1) * dk_); EXPECT_DOUBLE_EQ(nolm_[ichi_tot].dk, dk_); EXPECT_DOUBLE_EQ(nolm_[ichi_tot].dr_uniform, dr_uniform_); // TODO zty yet to be understood - //EXPECT_DOUBLE_EQ(nolm_[ichi_tot].zty, 0.0); + // EXPECT_DOUBLE_EQ(nolm_[ichi_tot].zty, 0.0); EXPECT_EQ(nolm_[ichi_tot].r_radial.size(), nr_); EXPECT_EQ(nolm_[ichi_tot].k_radial.size(), nk_); @@ -400,18 +433,20 @@ TEST_F(NumericalOrbitalLmTest, Init) { EXPECT_EQ(nolm_[ichi_tot].psik.size(), nk_); EXPECT_EQ(nolm_[ichi_tot].psik2.size(), nk_); - for (int ir = 0; ir != nr_; ++ir) { - EXPECT_DOUBLE_EQ(nolm_[ichi_tot].r_radial[ir], ir*0.01); + for (int ir = 0; ir != nr_; ++ir) + { + EXPECT_DOUBLE_EQ(nolm_[ichi_tot].r_radial[ir], ir * 0.01); EXPECT_DOUBLE_EQ(nolm_[ichi_tot].psi[ir], chi_[ichi_tot][ir]); - EXPECT_DOUBLE_EQ(nolm_[ichi_tot].psir[ir], ir*0.01*chi_[ichi_tot][ir]); + EXPECT_DOUBLE_EQ(nolm_[ichi_tot].psir[ir], ir * 0.01 * chi_[ichi_tot][ir]); } // whether psif makes sense or not is checked in r2k2r_consistency - for (size_t ik = 0; ik != nk_; ++ik) { - EXPECT_DOUBLE_EQ(nolm_[ichi_tot].k_radial[ik], ik*dk_); - EXPECT_DOUBLE_EQ(nolm_[ichi_tot].psik[ik], ik*dk_*nolm_[ichi_tot].psif[ik]); - EXPECT_DOUBLE_EQ(nolm_[ichi_tot].psik2[ik], ik*dk_*nolm_[ichi_tot].psik[ik]); + for (size_t ik = 0; ik != nk_; ++ik) + { + EXPECT_DOUBLE_EQ(nolm_[ichi_tot].k_radial[ik], ik * dk_); + EXPECT_DOUBLE_EQ(nolm_[ichi_tot].psik[ik], ik * dk_ * nolm_[ichi_tot].psif[ik]); + EXPECT_DOUBLE_EQ(nolm_[ichi_tot].psik2[ik], ik * dk_ * nolm_[ichi_tot].psik[ik]); } } @@ -475,15 +510,16 @@ TEST_F(NumericalOrbitalLmTest, Init) { EXPECT_NEAR(nolm_[4].psi[700], 0.0, max_tol); } - -TEST_F(NumericalOrbitalLmTest, Getters) { +TEST_F(NumericalOrbitalLmTest, Getters) +{ // this test checks whether all the getters work as expected // whether the values make sense or not is tested in "initialize" this->init(); - for (size_t i = 0; i != chi_.size(); ++i) { + for (size_t i = 0; i != chi_.size(); ++i) + { EXPECT_EQ(nolm_[i].getLabel(), nolm_[i].label); EXPECT_EQ(nolm_[i].getType(), nolm_[i].index_atom_type); EXPECT_EQ(nolm_[i].getL(), nolm_[i].angular_momentum_l); @@ -523,14 +559,16 @@ TEST_F(NumericalOrbitalLmTest, Getters) { EXPECT_EQ(nolm_[i].get_psi_k(), nolm_[i].psik); EXPECT_EQ(nolm_[i].get_psi_k2(), nolm_[i].psik2); - for (size_t ir = 0; ir != nolm_[i].r_radial.size(); ++ir) { + for (size_t ir = 0; ir != nolm_[i].r_radial.size(); ++ir) + { EXPECT_EQ(nolm_[i].getRadial(ir), nolm_[i].r_radial[ir]); EXPECT_EQ(nolm_[i].getRab(ir), nolm_[i].rab[ir]); EXPECT_EQ(nolm_[i].getPsi(ir), nolm_[i].psi[ir]); EXPECT_EQ(nolm_[i].getPsi_r(ir), nolm_[i].psir[ir]); } - for (size_t ik = 0; ik != nolm_[i].k_radial.size(); ++ik) { + for (size_t ik = 0; ik != nolm_[i].k_radial.size(); ++ik) + { EXPECT_EQ(nolm_[i].getKpoint(ik), nolm_[i].k_radial[ik]); EXPECT_EQ(nolm_[i].getPsif(ik), nolm_[i].psif[ik]); EXPECT_EQ(nolm_[i].getPsi_k(ik), nolm_[i].psik[ik]); @@ -539,8 +577,8 @@ TEST_F(NumericalOrbitalLmTest, Getters) { } } - -TEST_F(NumericalOrbitalLmTest, PsiNormalization) { +TEST_F(NumericalOrbitalLmTest, PsiNormalization) +{ // This test checks the normalization of // 1. the radial function in the real space @@ -554,10 +592,12 @@ TEST_F(NumericalOrbitalLmTest, PsiNormalization) { double* rintegrand = new double[nr_]; double* kintegrand = new double[nk_]; - for (size_t i = 0; i != chi_.size(); ++i) { + for (size_t i = 0; i != chi_.size(); ++i) + { // normalization check of chi(r) - for (int ir = 0; ir != nr_; ++ir) { + for (int ir = 0; ir != nr_; ++ir) + { rintegrand[ir] = std::pow(nolm_[i].getPsi_r(ir), 2); } @@ -565,37 +605,40 @@ TEST_F(NumericalOrbitalLmTest, PsiNormalization) { EXPECT_NEAR(radint, 1.0, 1e-10); // normalization check of chi(k) - for (size_t ik = 0; ik != nk_; ++ik) { + for (size_t ik = 0; ik != nk_; ++ik) + { kintegrand[ik] = std::pow(nolm_[i].getPsi_k(ik), 2); } ModuleBase::Integral::Simpson_Integral(nk_, kintegrand, dk_, radint); EXPECT_NEAR(radint, 1.0, 1e-6); // what is a reasonable error? - } delete[] rintegrand; delete[] kintegrand; - // check the normalization of psi_uniform - for (size_t i = 0; i != chi_.size(); ++i) { + for (size_t i = 0; i != chi_.size(); ++i) + { int nr = nolm_[i].nr_uniform; // note that Simpson_Integral only accepts an odd number of mesh points - if (nr%2 == 0) { + if (nr % 2 == 0) + { ++nr; } rintegrand = new double[nr]; - for (int ir = 0; ir != nr; ++ir) { + for (int ir = 0; ir != nr; ++ir) + { rintegrand[ir] = 0.0; } // normalization check of psi_uniform - for (int ir = 0; ir != nolm_[i].nr_uniform; ++ir) { - rintegrand[ir] = std::pow(ir*dr_uniform_*nolm_[i].psi_uniform[ir], 2); + for (int ir = 0; ir != nolm_[i].nr_uniform; ++ir) + { + rintegrand[ir] = std::pow(ir * dr_uniform_ * nolm_[i].psi_uniform[ir], 2); } ModuleBase::Integral::Simpson_Integral(nr, rintegrand, dr_uniform_, radint); @@ -605,8 +648,8 @@ TEST_F(NumericalOrbitalLmTest, PsiNormalization) { } } - -TEST_F(NumericalOrbitalLmTest, K2RConsistency) { +TEST_F(NumericalOrbitalLmTest, K2RConsistency) +{ // This test checks whether the results of // cal_kradial & cal_kradial_sbpool agree. @@ -617,23 +660,29 @@ TEST_F(NumericalOrbitalLmTest, K2RConsistency) { double* kchik_ = new double[nk_]; double* k2chik_ = new double[nk_]; - for (size_t i = 0; i != chi_.size(); ++i) { + for (size_t i = 0; i != chi_.size(); ++i) + { // save previous chi(k) results obtained by init() - for (size_t ik = 0; ik != nk_; ++ik) { + for (size_t ik = 0; ik != nk_; ++ik) + { chik_[ik] = nolm_[i].getPsif(ik); kchik_[ik] = nolm_[i].getPsi_k(ik); k2chik_[ik] = nolm_[i].getPsi_k2(ik); } // use a different method than which used in init() - if (flag_sbpool_) { + if (flag_sbpool_) + { nolm_[i].cal_kradial(); - } else { + } + else + { nolm_[i].cal_kradial_sbpool(); } double max_tol = 1e-6; - for (size_t ik = 0; ik != nk_; ++ik) { + for (size_t ik = 0; ik != nk_; ++ik) + { EXPECT_NEAR(chik_[ik], nolm_[i].getPsif(ik), max_tol); EXPECT_NEAR(kchik_[ik], nolm_[i].getPsi_k(ik), max_tol); EXPECT_NEAR(k2chik_[ik], nolm_[i].getPsi_k2(ik), max_tol); @@ -641,8 +690,8 @@ TEST_F(NumericalOrbitalLmTest, K2RConsistency) { } } - -TEST_F(NumericalOrbitalLmTest, R2K2RConsistency) { +TEST_F(NumericalOrbitalLmTest, R2K2RConsistency) +{ // This test checks whether cal_rradial_sbpool brings chi(k) // back to the original chi(r) by looking at the error @@ -658,15 +707,18 @@ TEST_F(NumericalOrbitalLmTest, R2K2RConsistency) { // maximum tolerance of err double max_tol = 1e-6; - for (size_t i = 0; i != chi_.size(); ++i) { - for (int ir = 0; ir != nr_; ++ir) { + for (size_t i = 0; i != chi_.size(); ++i) + { + for (int ir = 0; ir != nr_; ++ir) + { rchi_[ir] = nolm_[i].getPsi_r(ir); } nolm_[i].cal_rradial_sbpool(); - for (int ir = 0; ir != nr_; ++ir) { - err_integrand[ir] = std::pow(rchi_[ir]-nolm_[i].getPsi_r(ir), 2); + for (int ir = 0; ir != nr_; ++ir) + { + err_integrand[ir] = std::pow(rchi_[ir] - nolm_[i].getPsi_r(ir), 2); } ModuleBase::Integral::Simpson_Integral(nr_, err_integrand, rab_, err); @@ -674,8 +726,8 @@ TEST_F(NumericalOrbitalLmTest, R2K2RConsistency) { } } - -TEST_F(NumericalOrbitalLmTest, FiniteDiffPsiUniform) { +TEST_F(NumericalOrbitalLmTest, FiniteDiffPsiUniform) +{ // this test checks whether dpsi_uniform agrees with the // finite difference of psi_uniform @@ -684,21 +736,21 @@ TEST_F(NumericalOrbitalLmTest, FiniteDiffPsiUniform) { double max_tol = 1e-3; - for (size_t i = 0; i != nolm_.size(); ++i) { + for (size_t i = 0; i != nolm_.size(); ++i) + { std::vector& f = nolm_[i].psi_uniform; - for (int ir = 4; ir != nolm_[i].nr_uniform-4; ++ir) { - double fd = - ( +1.0/280*f[ir-4] - 4.0/105*f[ir-3] + 1.0/5*f[ir-2] - 4.0/5*f[ir-1] - -1.0/280*f[ir+4] + 4.0/105*f[ir+3] - 1.0/5*f[ir+2] + 4.0/5*f[ir+1] - ) / nolm_[i].dr_uniform; + for (int ir = 4; ir != nolm_[i].nr_uniform - 4; ++ir) + { + double fd = (+1.0 / 280 * f[ir - 4] - 4.0 / 105 * f[ir - 3] + 1.0 / 5 * f[ir - 2] - 4.0 / 5 * f[ir - 1] + - 1.0 / 280 * f[ir + 4] + 4.0 / 105 * f[ir + 3] - 1.0 / 5 * f[ir + 2] + 4.0 / 5 * f[ir + 1]) + / nolm_[i].dr_uniform; EXPECT_NEAR(fd, nolm_[i].dpsi_uniform[ir], max_tol); } } - } - -TEST_F(NumericalOrbitalLmTest, PsiSave) { +TEST_F(NumericalOrbitalLmTest, PsiSave) +{ // This test checks whether plot() works as expected. // @@ -724,14 +776,14 @@ TEST_F(NumericalOrbitalLmTest, PsiSave) { // we now creat the directory to hold data files mkdir(dir.c_str(), 0777); - for (size_t i = 0; i != nolm_.size(); ++i) { + for (size_t i = 0; i != nolm_.size(); ++i) + { // this call should successfully write data to files ASSERT_NO_THROW(nolm_[i].plot()); - auto get_fname = [&] (std::string const& suffix) -> std::string { - return dir+"/O-" + orb[i] + std::to_string(nolm_[i].index_chi+1) - + "-orbital-" + suffix + ".dat"; + auto get_fname = [&](std::string const& suffix) -> std::string { + return dir + "/O-" + orb[i] + std::to_string(nolm_[i].index_chi + 1) + "-orbital-" + suffix + ".dat"; }; std::string psi_fname = get_fname("r"); @@ -739,20 +791,17 @@ TEST_F(NumericalOrbitalLmTest, PsiSave) { std::string psiru_fname = get_fname("ru"); std::string psidru_fname = get_fname("dru"); - EXPECT_TRUE(this->check_file_match(nolm_[i].nr, - nolm_[i].getRadial(), nolm_[i].getPsi(), tol, psi_fname)); - EXPECT_TRUE(this->check_file_match(nolm_[i].nk, - nolm_[i].getKpoint(), nolm_[i].getPsi_k(), tol, psik_fname)); + EXPECT_TRUE(this->check_file_match(nolm_[i].nr, nolm_[i].getRadial(), nolm_[i].getPsi(), tol, psi_fname)); + EXPECT_TRUE(this->check_file_match(nolm_[i].nk, nolm_[i].getKpoint(), nolm_[i].getPsi_k(), tol, psik_fname)); double* ru_mesh = new double[nolm_[i].nr_uniform]; - for (int ir = 0; ir != nolm_[i].nr_uniform; ++ir) { - ru_mesh[ir] = ir*nolm_[i].dr_uniform; + for (int ir = 0; ir != nolm_[i].nr_uniform; ++ir) + { + ru_mesh[ir] = ir * nolm_[i].dr_uniform; } - EXPECT_TRUE(this->check_file_match(nolm_[i].nr_uniform, - ru_mesh, nolm_[i].getPsiuniform(), tol, psiru_fname)); - EXPECT_TRUE(this->check_file_match(nolm_[i].nr_uniform, - ru_mesh, nolm_[i].getDpsiuniform(), tol, psidru_fname)); + EXPECT_TRUE(this->check_file_match(nolm_[i].nr_uniform, ru_mesh, nolm_[i].getPsiuniform(), tol, psiru_fname)); + EXPECT_TRUE(this->check_file_match(nolm_[i].nr_uniform, ru_mesh, nolm_[i].getDpsiuniform(), tol, psidru_fname)); remove(psi_fname.c_str()); remove(psik_fname.c_str()); @@ -761,11 +810,10 @@ TEST_F(NumericalOrbitalLmTest, PsiSave) { } remove(dir.c_str()); - } - -TEST_F(NumericalOrbitalLmTest, VariousPsiType) { +TEST_F(NumericalOrbitalLmTest, VariousPsiType) +{ // this test checks the behavior of set_orbital_info // under various input Psi_Type @@ -776,7 +824,8 @@ TEST_F(NumericalOrbitalLmTest, VariousPsiType) { // rather than an integration (as in r2k2r_consistency) double max_tol = 1e-3; - for (size_t i = 0; i != nolm_.size(); ++i) { + for (size_t i = 0; i != nolm_.size(); ++i) + { std::vector psi_ref, psif_ref, psik_ref, psik2_ref; psi_ref = nolm_[i].psi; @@ -784,47 +833,78 @@ TEST_F(NumericalOrbitalLmTest, VariousPsiType) { psik_ref = nolm_[i].psik; psik2_ref = nolm_[i].psik2; - // alternative Psi_Type input // Psi_Type == Psif - nolm_[i].set_orbital_info(elem_label_, index_atom_type_, - l_[i], index_chi_l_[i], nr_, rab_, - r_radial_, Numerical_Orbital_Lm::Psi_Type::Psif, - &psif_ref[0], nk_, dk_, - dr_uniform_, flag_plot_, flag_sbpool_, force_flag_); - - for (int ir = 0; ir != nolm_[i].nr; ++ir) { + nolm_[i].set_orbital_info(elem_label_, + index_atom_type_, + l_[i], + index_chi_l_[i], + nr_, + rab_, + r_radial_, + Numerical_Orbital_Lm::Psi_Type::Psif, + &psif_ref[0], + nk_, + dk_, + dr_uniform_, + flag_plot_, + flag_sbpool_, + force_flag_); + + for (int ir = 0; ir != nolm_[i].nr; ++ir) + { EXPECT_NEAR(nolm_[i].psi[ir], psi_ref[ir], max_tol); } // Psi_Type == Psik - nolm_[i].set_orbital_info(elem_label_, index_atom_type_, - l_[i], index_chi_l_[i], nr_, rab_, - r_radial_, Numerical_Orbital_Lm::Psi_Type::Psik, - &psik_ref[0], nk_, dk_, - dr_uniform_, flag_plot_, flag_sbpool_, force_flag_); - - for (int ir = 0; ir != nolm_[i].nr; ++ir) { + nolm_[i].set_orbital_info(elem_label_, + index_atom_type_, + l_[i], + index_chi_l_[i], + nr_, + rab_, + r_radial_, + Numerical_Orbital_Lm::Psi_Type::Psik, + &psik_ref[0], + nk_, + dk_, + dr_uniform_, + flag_plot_, + flag_sbpool_, + force_flag_); + + for (int ir = 0; ir != nolm_[i].nr; ++ir) + { EXPECT_NEAR(nolm_[i].psi[ir], psi_ref[ir], max_tol); } // Psi_Type == Psik2 - nolm_[i].set_orbital_info(elem_label_, index_atom_type_, - l_[i], index_chi_l_[i], nr_, rab_, - r_radial_, Numerical_Orbital_Lm::Psi_Type::Psik2, - &psik2_ref[0], nk_, dk_, - dr_uniform_, flag_plot_, flag_sbpool_, force_flag_); - - for (int ir = 0; ir != nolm_[i].nr; ++ir) { + nolm_[i].set_orbital_info(elem_label_, + index_atom_type_, + l_[i], + index_chi_l_[i], + nr_, + rab_, + r_radial_, + Numerical_Orbital_Lm::Psi_Type::Psik2, + &psik2_ref[0], + nk_, + dk_, + dr_uniform_, + flag_plot_, + flag_sbpool_, + force_flag_); + + for (int ir = 0; ir != nolm_[i].nr; ++ir) + { EXPECT_NEAR(nolm_[i].psi[ir], psi_ref[ir], max_tol); } - } } - -TEST_F(NumericalOrbitalLmTest, TurnOffSphBesPool) { +TEST_F(NumericalOrbitalLmTest, TurnOffSphBesPool) +{ // checks the behavior of set_orbital_info when sbpool is turned off // @@ -835,7 +915,8 @@ TEST_F(NumericalOrbitalLmTest, TurnOffSphBesPool) { flag_sbpool_ = false; EXPECT_NO_THROW(this->init()); - for (size_t i = 0; i != nolm_.size(); ++i) { + for (size_t i = 0; i != nolm_.size(); ++i) + { std::vector psi_ref, psif_ref, psik_ref, psik2_ref; psi_ref = nolm_[i].psi; @@ -843,37 +924,79 @@ TEST_F(NumericalOrbitalLmTest, TurnOffSphBesPool) { psik_ref = nolm_[i].psik; psik2_ref = nolm_[i].psik2; - EXPECT_NO_THROW(nolm_[i].set_orbital_info(elem_label_, index_atom_type_, - l_[i], index_chi_l_[i], nr_, rab_, - r_radial_, Numerical_Orbital_Lm::Psi_Type::Psi, - &psi_ref[0], nk_, dk_, - dr_uniform_, flag_plot_, false, force_flag_)); - EXPECT_THROW(nolm_[i].set_orbital_info(elem_label_, index_atom_type_, - l_[i], index_chi_l_[i], nr_, rab_, - r_radial_, Numerical_Orbital_Lm::Psi_Type::Psif, - &psif_ref[0], nk_, dk_, - dr_uniform_, flag_plot_, false, force_flag_), std::domain_error); - EXPECT_THROW(nolm_[i].set_orbital_info(elem_label_, index_atom_type_, - l_[i], index_chi_l_[i], nr_, rab_, - r_radial_, Numerical_Orbital_Lm::Psi_Type::Psik, - &psik_ref[0], nk_, dk_, - dr_uniform_, flag_plot_, false, force_flag_), std::domain_error); - EXPECT_THROW(nolm_[i].set_orbital_info(elem_label_, index_atom_type_, - l_[i], index_chi_l_[i], nr_, rab_, - r_radial_, Numerical_Orbital_Lm::Psi_Type::Psik2, - &psik2_ref[0], nk_, dk_, - dr_uniform_, flag_plot_, false, force_flag_), std::domain_error); + EXPECT_NO_THROW(nolm_[i].set_orbital_info(elem_label_, + index_atom_type_, + l_[i], + index_chi_l_[i], + nr_, + rab_, + r_radial_, + Numerical_Orbital_Lm::Psi_Type::Psi, + &psi_ref[0], + nk_, + dk_, + dr_uniform_, + flag_plot_, + false, + force_flag_)); + EXPECT_THROW(nolm_[i].set_orbital_info(elem_label_, + index_atom_type_, + l_[i], + index_chi_l_[i], + nr_, + rab_, + r_radial_, + Numerical_Orbital_Lm::Psi_Type::Psif, + &psif_ref[0], + nk_, + dk_, + dr_uniform_, + flag_plot_, + false, + force_flag_), + std::domain_error); + EXPECT_THROW(nolm_[i].set_orbital_info(elem_label_, + index_atom_type_, + l_[i], + index_chi_l_[i], + nr_, + rab_, + r_radial_, + Numerical_Orbital_Lm::Psi_Type::Psik, + &psik_ref[0], + nk_, + dk_, + dr_uniform_, + flag_plot_, + false, + force_flag_), + std::domain_error); + EXPECT_THROW(nolm_[i].set_orbital_info(elem_label_, + index_atom_type_, + l_[i], + index_chi_l_[i], + nr_, + rab_, + r_radial_, + Numerical_Orbital_Lm::Psi_Type::Psik2, + &psik2_ref[0], + nk_, + dk_, + dr_uniform_, + flag_plot_, + false, + force_flag_), + std::domain_error); } } - -int main(int argc, char **argv) +int main(int argc, char** argv) { #ifdef __MPI MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD,&GlobalV::NPROC); - MPI_Comm_rank(MPI_COMM_WORLD,&GlobalV::MY_RANK); + MPI_Comm_size(MPI_COMM_WORLD, &GlobalV::NPROC); + MPI_Comm_rank(MPI_COMM_WORLD, &GlobalV::MY_RANK); #endif testing::InitGoogleTest(&argc, argv); @@ -885,5 +1008,3 @@ int main(int argc, char **argv) return result; } - - diff --git a/source/module_basis/module_ao/test/ORB_nonlocal_lm_test.cpp b/source/module_basis/module_ao/test/ORB_nonlocal_lm_test.cpp index c2cf09ba08..15058f8a12 100644 --- a/source/module_basis/module_ao/test/ORB_nonlocal_lm_test.cpp +++ b/source/module_basis/module_ao/test/ORB_nonlocal_lm_test.cpp @@ -1,10 +1,12 @@ +#include "source_base/global_function.h" + #include "gtest/gtest.h" -#include "module_base/global_function.h" #define private public #include "module_parameter/parameter.h" #undef private -#include "module_base/global_variable.h" -#include "module_base/math_integral.h" +#include "source_base/global_variable.h" +#include "source_base/math_integral.h" + #include #include @@ -12,12 +14,10 @@ #include "module_basis/module_ao/ORB_nonlocal_lm.h" #undef private - #ifdef __MPI #include #endif - /*********************************************************** * unit test of class "Numerical_Nonlocal_Lm" ***********************************************************/ @@ -32,8 +32,8 @@ * applies a radial Fourier transform to beta_r to obtain beta_k * * - freemem - * deallocates the allocated memory of r_radial, rab, beta_r, - * beta_uniform, dbeta_uniform, k_radial & beta_k, and set them + * deallocates the allocated memory of r_radial, rab, beta_r, + * beta_uniform, dbeta_uniform, k_radial & beta_k, and set them * to nullptr * * - renew @@ -52,8 +52,7 @@ class NumericalNonlocalLmTest : public ::testing::Test { -protected: - + protected: void SetUp(); void TearDown(); @@ -67,7 +66,11 @@ class NumericalNonlocalLmTest : public ::testing::Test double err_r2k2r(Numerical_Nonlocal_Lm&); size_t calc_nk(double const& ecutwfc, double const& dk); void change_k(Numerical_Nonlocal_Lm&, double const& ecut, double const& dk); - bool check_file_match(size_t const& nline, double const* col1, double const* col2, double const& tol, std::string const& fname); + bool check_file_match(size_t const& nline, + double const* col1, + double const* col2, + double const& tol, + std::string const& fname); // number of beta projectors size_t nproj_; @@ -85,8 +88,8 @@ class NumericalNonlocalLmTest : public ::testing::Test double dr_uniform_; }; - -void NumericalNonlocalLmTest::SetUp() { +void NumericalNonlocalLmTest::SetUp() +{ /////////////////////////////////////////////////// // Parameters @@ -100,8 +103,8 @@ void NumericalNonlocalLmTest::SetUp() { // where a much larger value is used. double ecutwfc = 100.0; - // In normal ABACUS calculation, dk, nk & dr_uniform - // are retrieved from the LCAO_Orbitals object, + // In normal ABACUS calculation, dk, nk & dr_uniform + // are retrieved from the LCAO_Orbitals object, // see setupNonlocal() in module_cell/setup_nonlocal.cpp. // Here we just provide some reasonable values. dk_ = 0.01; @@ -127,7 +130,7 @@ void NumericalNonlocalLmTest::SetUp() { //----------- read header ------------ ModuleBase::GlobalFunc::SCAN_BEGIN(ifs, "" marking the end of PP_HEADER @@ -135,18 +138,24 @@ void NumericalNonlocalLmTest::SetUp() { std::string label; std::string val; - while(std::getline(ifs, linebuf)) { + while (std::getline(ifs, linebuf)) + { std::string::size_type pos = linebuf.find('='); - if (pos != std::string::npos) { + if (pos != std::string::npos) + { // extract the label // skip leading whitespaces auto label_start = linebuf.find_first_not_of(" \t"); - label = linebuf.substr(label_start, pos-label_start); - } else if (linebuf.find("/>") != std::string::npos) { + label = linebuf.substr(label_start, pos - label_start); + } + else if (linebuf.find("/>") != std::string::npos) + { // reach the end of PP_HEADER break; - } else { + } + else + { // skip lines without '=' or "/>" continue; } @@ -154,15 +163,21 @@ void NumericalNonlocalLmTest::SetUp() { val = trim(linebuf); // only the entries below are relevant to the current unit test - if (label == "element") { + if (label == "element") + { elem_label_ = val; - } else if (label == "number_of_proj") { + } + else if (label == "number_of_proj") + { nproj_ = std::atoi(val.c_str()); - } else if (label == "mesh_size") { + } + else if (label == "mesh_size") + { nmesh_upf = std::atoi(val.c_str()); } - if (linebuf.find("/>") != std::string::npos) { + if (linebuf.find("/>") != std::string::npos) + { // reach the end of PP_HEADER break; } @@ -174,7 +189,8 @@ void NumericalNonlocalLmTest::SetUp() { std::getline(ifs, linebuf); r_radial_ = new double[nmesh_upf]; - for (size_t ir = 0; ir != nmesh_upf; ++ir) { + for (size_t ir = 0; ir != nmesh_upf; ++ir) + { ifs >> r_radial_[ir]; } @@ -183,10 +199,11 @@ void NumericalNonlocalLmTest::SetUp() { std::getline(ifs, linebuf); rab_ = new double[nmesh_upf]; - for (size_t ir = 0; ir != nmesh_upf; ++ir) { + for (size_t ir = 0; ir != nmesh_upf; ++ir) + { ifs >> rab_[ir]; } - + //----------- read nonlocal projectors & initialize objects ------------ l_.resize(nproj_); @@ -195,118 +212,138 @@ void NumericalNonlocalLmTest::SetUp() { nnl.resize(nproj_); ModuleBase::GlobalFunc::SCAN_BEGIN(ifs, ""); - for (size_t iproj = 0; iproj != nproj_; ++iproj) { + for (size_t iproj = 0; iproj != nproj_; ++iproj) + { beta_r_[iproj] = new double[nmesh_upf]; // process beta headers - while(std::getline(ifs, linebuf)) { - if (linebuf.find('>') != std::string::npos) { + while (std::getline(ifs, linebuf)) + { + if (linebuf.find('>') != std::string::npos) + { // end of PP_BETA header, beta mesh starts break; } - if (linebuf.find("angular_momentum") != std::string::npos) { + if (linebuf.find("angular_momentum") != std::string::npos) + { l_[iproj] = std::atoi(trim(linebuf).c_str()); } } // read beta mesh (UPF mesh is r*beta(r)!) - for (size_t ir = 0; ir != nmesh_upf; ++ir) { + for (size_t ir = 0; ir != nmesh_upf; ++ir) + { ifs >> beta_r_[iproj][ir]; } - // determine the actual mesh size by ignoring the trailing + // determine the actual mesh size by ignoring the trailing // zeros (or small numbers) of beta // the code could fail if the original upf mesh size is even - // and there's no trailing zero. Currently we assume that + // and there's no trailing zero. Currently we assume that // there's always at least one trailing zero. - for (nr_[iproj] = nmesh_upf; nr_[iproj] > 1; --nr_[iproj]) { - if (std::abs(beta_r_[iproj][nr_[iproj]-1])>1e-14) { + for (nr_[iproj] = nmesh_upf; nr_[iproj] > 1; --nr_[iproj]) + { + if (std::abs(beta_r_[iproj][nr_[iproj] - 1]) > 1e-14) + { break; } } - if (nr_[iproj]%2 == 0) { + if (nr_[iproj] % 2 == 0) + { ++nr_[iproj]; } - while(std::getline(ifs, linebuf)) { - if (linebuf.find("/PP_BETA") != std::string::npos) { + while (std::getline(ifs, linebuf)) + { + if (linebuf.find("/PP_BETA") != std::string::npos) + { // reach beta mesh ending symbol break; } } - } } - -void NumericalNonlocalLmTest::TearDown() { +void NumericalNonlocalLmTest::TearDown() +{ delete[] r_radial_; delete[] rab_; - for (size_t ip = 0; ip != beta_r_.size(); ++ip) { + for (size_t ip = 0; ip != beta_r_.size(); ++ip) + { delete[] beta_r_[ip]; } } - -void NumericalNonlocalLmTest::init() { +void NumericalNonlocalLmTest::init() +{ // initialized the tested objects by pouring the data // collected in SetUp() to nnl; - for (size_t iproj = 0; iproj != nproj_; ++iproj) { - nnl[iproj].set_NL_proj(elem_label_, index_atom_type_, l_[iproj], - nr_[iproj], rab_, r_radial_, beta_r_[iproj], - nk_, dk_, dr_uniform_); + for (size_t iproj = 0; iproj != nproj_; ++iproj) + { + nnl[iproj].set_NL_proj(elem_label_, + index_atom_type_, + l_[iproj], + nr_[iproj], + rab_, + r_radial_, + beta_r_[iproj], + nk_, + dk_, + dr_uniform_); /* - // normalization check + // normalization check double* tmp = new double[nr_[iproj]]; for (int ir = 0; ir != nr_[iproj]; ++ir) { tmp[ir] = beta_r_[iproj][ir]*beta_r_[iproj][ir]; } double radint = 0.0; ModuleBase::Integral::Simpson_Integral(nr_[iproj], tmp, rab_, radint); - std::cout << "proj " << iproj + std::cout << "proj " << iproj << std::fixed << std::setprecision(12) << " radial integral = " << radint << std::endl; */ } } - -std::string NumericalNonlocalLmTest::trim(std::string const& str) { +std::string NumericalNonlocalLmTest::trim(std::string const& str) +{ // extract the substring between quotation marks (with whitespace trimmed) // str MUST contain a pair of quotation marks auto start = str.find('"'); auto end = str.find_last_of('"'); - std::string tmp = str.substr(start+1, end-start-1); + std::string tmp = str.substr(start + 1, end - start - 1); - if (tmp.length() == 0) { + if (tmp.length() == 0) + { return tmp; } start = tmp.find_first_not_of(" \t"); end = tmp.find_last_not_of(" \t"); - return tmp.substr(start, end-start+1); + return tmp.substr(start, end - start + 1); } - -double NumericalNonlocalLmTest::err_r2k2r(Numerical_Nonlocal_Lm& nnl_tmp) { +double NumericalNonlocalLmTest::err_r2k2r(Numerical_Nonlocal_Lm& nnl_tmp) +{ // err_r2k2r makes use of Numerical_Nonlocal_Lm::get_kradial() - // to transform beta_k back to beta_r. - // The error is computed as the difference between the origional + // to transform beta_k back to beta_r. + // The error is computed as the difference between the origional // and the transformed beta_r. double* beta_r_old = new double[nnl_tmp.nr]; double* rab_old = new double[nnl_tmp.nr]; double* err = new double[nnl_tmp.nr]; - for (int ir = 0; ir != nnl_tmp.nr; ++ir) { + for (int ir = 0; ir != nnl_tmp.nr; ++ir) + { beta_r_old[ir] = nnl_tmp.beta_r[ir]; rab_old[ir] = nnl_tmp.rab[ir]; } @@ -317,13 +354,15 @@ double NumericalNonlocalLmTest::err_r2k2r(Numerical_Nonlocal_Lm& nnl_tmp) { delete[] nnl_tmp.rab; nnl_tmp.rab = new double[nnl_tmp.nr]; - for (int ik = 0; ik != nnl_tmp.nr; ++ik) { + for (int ik = 0; ik != nnl_tmp.nr; ++ik) + { nnl_tmp.rab[ik] = nnl_tmp.dk; } nnl_tmp.get_kradial(); - for (int ir = 0; ir != nnl_tmp.nk; ++ir) { + for (int ir = 0; ir != nnl_tmp.nk; ++ir) + { err[ir] = std::pow(nnl_tmp.getBeta_k(ir) - beta_r_old[ir], 2); } @@ -333,29 +372,33 @@ double NumericalNonlocalLmTest::err_r2k2r(Numerical_Nonlocal_Lm& nnl_tmp) { return errint; } - -size_t NumericalNonlocalLmTest::calc_nk(double const& ecutwfc, double const& dk) { +size_t NumericalNonlocalLmTest::calc_nk(double const& ecutwfc, double const& dk) +{ // current formula for nk // see module_basis/module_ao/ORB_read.cpp, function "Read_Orbitals" size_t nk = 0; - if(ecutwfc < 20) { - nk = static_cast( 2 * sqrt(ecutwfc) / dk ) + 4; - } else { - nk = static_cast( sqrt(ecutwfc) / dk ) + 4; - } + if (ecutwfc < 20) + { + nk = static_cast(2 * sqrt(ecutwfc) / dk) + 4; + } + else + { + nk = static_cast(sqrt(ecutwfc) / dk) + 4; + } - if (nk%2 == 0) { + if (nk % 2 == 0) + { ++nk; } return nk; } - -void NumericalNonlocalLmTest::change_k(Numerical_Nonlocal_Lm& nnl_, double const& ecut, double const& dk) { +void NumericalNonlocalLmTest::change_k(Numerical_Nonlocal_Lm& nnl_, double const& ecut, double const& dk) +{ // recalculates k mesh & beta_k with given ecut & dk // used in r2k2r_consistency @@ -363,60 +406,62 @@ void NumericalNonlocalLmTest::change_k(Numerical_Nonlocal_Lm& nnl_, double const Numerical_Nonlocal_Lm tmp; tmp = nnl_; - nnl_.set_NL_proj( - tmp.label, - tmp.index_atom_type, - tmp.angular_momentum_l, - tmp.nr, - tmp.rab, - tmp.r_radial, - tmp.beta_r, - this->calc_nk(ecut, dk), - dk, - tmp.dr_uniform - ); + nnl_.set_NL_proj(tmp.label, + tmp.index_atom_type, + tmp.angular_momentum_l, + tmp.nr, + tmp.rab, + tmp.r_radial, + tmp.beta_r, + this->calc_nk(ecut, dk), + dk, + tmp.dr_uniform); } +TEST_F(NumericalNonlocalLmTest, Init) +{ -TEST_F(NumericalNonlocalLmTest, Init) { - this->init(); - for (size_t ip = 0; ip != nproj_; ++ip) { + for (size_t ip = 0; ip != nproj_; ++ip) + { EXPECT_EQ(elem_label_, nnl[ip].label); EXPECT_EQ(index_atom_type_, nnl[ip].index_atom_type); EXPECT_EQ(l_[ip], nnl[ip].angular_momentum_l); EXPECT_EQ(dr_uniform_, nnl[ip].dr_uniform); EXPECT_EQ(nr_[ip], nnl[ip].nr); - EXPECT_EQ(r_radial_[nr_[ip]-1], nnl[ip].rcut); + EXPECT_EQ(r_radial_[nr_[ip] - 1], nnl[ip].rcut); EXPECT_EQ(nk_, nnl[ip].nk); EXPECT_EQ(dk_, nnl[ip].dk); - + // freemem() & renew() will be tested elsewhere - for (int ir = 0; ir != nr_[ip]; ++ir) { + for (int ir = 0; ir != nr_[ip]; ++ir) + { EXPECT_EQ(r_radial_[ir], nnl[ip].r_radial[ir]); EXPECT_EQ(rab_[ir], nnl[ip].rab[ir]); EXPECT_EQ(beta_r_[ip][ir], nnl[ip].beta_r[ir]); } - for (size_t ik = 0; ik != nk_; ++ik) { - EXPECT_EQ(ik*dk_, nnl[ip].k_radial[ik]); + for (size_t ik = 0; ik != nk_; ++ik) + { + EXPECT_EQ(ik * dk_, nnl[ip].k_radial[ik]); } - EXPECT_EQ((nk_-1)*dk_, nnl[ip].kcut); + EXPECT_EQ((nk_ - 1) * dk_, nnl[ip].kcut); // get_kradial() will be tested elsewhere } } - -TEST_F(NumericalNonlocalLmTest, Getters) { +TEST_F(NumericalNonlocalLmTest, Getters) +{ // this test checks all the getter functions this->init(); - for (size_t iproj = 0; iproj != nnl.size(); ++iproj) { + for (size_t iproj = 0; iproj != nnl.size(); ++iproj) + { EXPECT_EQ(nnl[iproj].getType(), 42); // index_atom_type EXPECT_DOUBLE_EQ(nnl[iproj].getDk(), 0.01); @@ -425,15 +470,17 @@ TEST_F(NumericalNonlocalLmTest, Getters) { ASSERT_NE(nnl[iproj].getBeta_r(), nullptr); ASSERT_NE(nnl[iproj].getBeta_k(), nullptr); - for (int ir = 0; ir != nnl[iproj].nr; ++ir) { - EXPECT_DOUBLE_EQ(nnl[iproj].getRadial(ir), 0.01*ir); - EXPECT_DOUBLE_EQ(nnl[iproj].getRadial()[ir], 0.01*ir); + for (int ir = 0; ir != nnl[iproj].nr; ++ir) + { + EXPECT_DOUBLE_EQ(nnl[iproj].getRadial(ir), 0.01 * ir); + EXPECT_DOUBLE_EQ(nnl[iproj].getRadial()[ir], 0.01 * ir); EXPECT_DOUBLE_EQ(nnl[iproj].getBeta_r()[ir], nnl[iproj].getBeta_r(ir)); } - for (int ik = 0; ik != nnl[iproj].nk; ++ik) { - EXPECT_DOUBLE_EQ(nnl[iproj].getKpoint(ik), ik*0.01); - EXPECT_DOUBLE_EQ(nnl[iproj].getKpoint()[ik], ik*0.01); + for (int ik = 0; ik != nnl[iproj].nk; ++ik) + { + EXPECT_DOUBLE_EQ(nnl[iproj].getKpoint(ik), ik * 0.01); + EXPECT_DOUBLE_EQ(nnl[iproj].getKpoint()[ik], ik * 0.01); EXPECT_DOUBLE_EQ(nnl[iproj].getBeta_k()[ik], nnl[iproj].getBeta_k(ik)); } } @@ -446,7 +493,6 @@ TEST_F(NumericalNonlocalLmTest, Getters) { EXPECT_DOUBLE_EQ(nnl[0].getBeta_r(4), -3.2850076507e-01); EXPECT_DOUBLE_EQ(nnl[0].getBeta_r(132), 1.6220072646e-06); - EXPECT_EQ(nnl[1].getL(), 0); EXPECT_DOUBLE_EQ(nnl[1].getRcut(), 1.3200); EXPECT_DOUBLE_EQ(nnl[1].getBeta_r(0), 0.0); @@ -469,8 +515,8 @@ TEST_F(NumericalNonlocalLmTest, Getters) { EXPECT_DOUBLE_EQ(nnl[3].getBeta_r(150), 5.9608986436e-06); } - -TEST_F(NumericalNonlocalLmTest, DeepCopy) { +TEST_F(NumericalNonlocalLmTest, DeepCopy) +{ // this test checks whether the operator= overload properly // performs a deep copy @@ -498,30 +544,32 @@ TEST_F(NumericalNonlocalLmTest, DeepCopy) { ASSERT_NE(tmp.getBeta_k(), nullptr); ASSERT_NE(tmp.getBeta_r(), nullptr); - for (int ir = 0; ir != nnl[iproj].nr; ++ir) { + for (int ir = 0; ir != nnl[iproj].nr; ++ir) + { EXPECT_DOUBLE_EQ(tmp.r_radial[ir], nnl[iproj].r_radial[ir]); EXPECT_DOUBLE_EQ(tmp.rab[ir], nnl[iproj].rab[ir]); EXPECT_DOUBLE_EQ(tmp.beta_r[ir], nnl[iproj].beta_r[ir]); } - for (int ik = 0; ik != nnl[iproj].nk; ++ik) { + for (int ik = 0; ik != nnl[iproj].nk; ++ik) + { EXPECT_DOUBLE_EQ(tmp.k_radial[ik], nnl[iproj].k_radial[ik]); EXPECT_DOUBLE_EQ(tmp.beta_k[ik], nnl[iproj].beta_k[ik]); } } - -TEST_F(NumericalNonlocalLmTest, R2K2RConsistency) { +TEST_F(NumericalNonlocalLmTest, R2K2RConsistency) +{ /* - * This test checks whether get_kradial() works as expected - * by applying it to k*beta(k) and see if it gives back the + * This test checks whether get_kradial() works as expected + * by applying it to k*beta(k) and see if it gives back the * original r*beta(r). * * This is NOT a convergence test, so a large ecutwfc is used. * * get_kradial() transforms r*beta(r) to k*beta(k) according to - * + * * beta(k) = sqrt(2/pi) * \int_0^{\infty} beta(r) * jl(kr) * r^2 dr * * whose inverse transform @@ -535,7 +583,8 @@ TEST_F(NumericalNonlocalLmTest, R2K2RConsistency) { this->init(); double ecut = 1000.0; - for (size_t iproj = 0; iproj != nnl.size(); ++iproj) { + for (size_t iproj = 0; iproj != nnl.size(); ++iproj) + { Numerical_Nonlocal_Lm tmp; tmp = nnl[iproj]; this->change_k(tmp, ecut, tmp.dk); @@ -543,7 +592,6 @@ TEST_F(NumericalNonlocalLmTest, R2K2RConsistency) { } } - /* TEST_F(NumericalNonlocalLmTest, R2K2RConsistencyMany) { @@ -562,7 +610,7 @@ TEST_F(NumericalNonlocalLmTest, R2K2RConsistencyMany) { std::cout << "proj = " << iproj << " ecut = " << std::setw(8) << ecut_list[ie] << " dk = " << std::setw(6) << tmp.dk - << " error = " << std::setw(10) << err + << " error = " << std::setw(10) << err << std::endl; } std::cout << std::endl; @@ -571,7 +619,7 @@ TEST_F(NumericalNonlocalLmTest, R2K2RConsistencyMany) { std::cout << std::endl; - std::vector dk_list{0.001, 0.01, 0.1, + std::vector dk_list{0.001, 0.01, 0.1, 0.3, 1.0, 1.1, 1.2, 1.3, 1.5, 2.0}; std::cout << "dk convergence test" << std::endl; @@ -595,8 +643,8 @@ TEST_F(NumericalNonlocalLmTest, R2K2RConsistencyMany) { } */ - -TEST_F(NumericalNonlocalLmTest, FreeAndRenew) { +TEST_F(NumericalNonlocalLmTest, FreeAndRenew) +{ this->init(); @@ -628,29 +676,36 @@ TEST_F(NumericalNonlocalLmTest, FreeAndRenew) { ASSERT_NE(nnl[0].k_radial, nullptr); ASSERT_NE(nnl[0].beta_k, nullptr); - for (int ir = 0; ir != nnl[0].nr; ++ir) { + for (int ir = 0; ir != nnl[0].nr; ++ir) + { EXPECT_DOUBLE_EQ(nnl[0].r_radial[ir], 0.0); EXPECT_DOUBLE_EQ(nnl[0].rab[ir], 0.0); EXPECT_DOUBLE_EQ(nnl[0].beta_r[ir], 0.0); } - for (int ir = 0; ir != nnl[0].nr_uniform; ++ir) { + for (int ir = 0; ir != nnl[0].nr_uniform; ++ir) + { EXPECT_DOUBLE_EQ(nnl[0].beta_uniform[ir], 0.0); EXPECT_DOUBLE_EQ(nnl[0].dbeta_uniform[ir], 0.0); } - - for (int ik = 0; ik != nnl[0].nk; ++ik) { + + for (int ik = 0; ik != nnl[0].nk; ++ik) + { EXPECT_DOUBLE_EQ(nnl[0].k_radial[ik], 0.0); EXPECT_DOUBLE_EQ(nnl[0].beta_k[ik], 0.0); } } - -bool NumericalNonlocalLmTest::check_file_match(size_t const& nline, double const* col1, double const* col2, double const& tol, std::string const& fname) { +bool NumericalNonlocalLmTest::check_file_match(size_t const& nline, + double const* col1, + double const* col2, + double const& tol, + std::string const& fname) +{ /* This function checks whether the content of file named "fname" * contains certain data with certain format. - * + * * The file should contain only two colums of floating-point numbers, * each column should match col1 or col2 within a tolerance of tol, * and the number of lines should be nline. No empty line is allowed. @@ -664,21 +719,23 @@ bool NumericalNonlocalLmTest::check_file_match(size_t const& nline, double const ifs.open(fname); - for (size_t i = 0; i != nline; ++i) { + for (size_t i = 0; i != nline; ++i) + { std::stringstream ss; std::getline(ifs, tmp_line); ss << tmp_line; ss >> tmp1 >> tmp2; - if( std::abs( col1[i] - std::stod(tmp1.c_str()) ) > tol || - std::abs( col2[i] - std::stod(tmp2.c_str()) ) > tol || - ss.tellg() != -1 ) { + if (std::abs(col1[i] - std::stod(tmp1.c_str())) > tol || std::abs(col2[i] - std::stod(tmp2.c_str())) > tol + || ss.tellg() != -1) + { return false; } } std::getline(ifs, tmp_line); - if ( ifs.tellg() != -1 ) { + if (ifs.tellg() != -1) + { return false; } @@ -687,8 +744,8 @@ bool NumericalNonlocalLmTest::check_file_match(size_t const& nline, double const return true; } - -TEST_F(NumericalNonlocalLmTest, BetaSave) { +TEST_F(NumericalNonlocalLmTest, BetaSave) +{ this->init(); @@ -704,25 +761,25 @@ TEST_F(NumericalNonlocalLmTest, BetaSave) { mkdir(dir.c_str(), 0777); - for (size_t i : {0, 2}) { + for (size_t i: {0, 2}) + { ASSERT_NO_THROW(nnl[i].plot(0)); - std::string betar_fname = dir+"/O-" + orb[i] + "-proj-r.dat"; - std::string betak_fname = dir+"/O-" + orb[i] + "-proj-k.dat"; - std::string betaru_fname = dir+"/O-" + orb[i] + "-proj-ru.dat"; + std::string betar_fname = dir + "/O-" + orb[i] + "-proj-r.dat"; + std::string betak_fname = dir + "/O-" + orb[i] + "-proj-k.dat"; + std::string betaru_fname = dir + "/O-" + orb[i] + "-proj-ru.dat"; - EXPECT_EQ(true, this->check_file_match(nnl[i].nr, - nnl[i].r_radial, nnl[i].beta_r, tol, betar_fname)); - EXPECT_EQ(true, this->check_file_match(nnl[i].nk, - nnl[i].k_radial, nnl[i].beta_k, tol, betak_fname)); + EXPECT_EQ(true, this->check_file_match(nnl[i].nr, nnl[i].r_radial, nnl[i].beta_r, tol, betar_fname)); + EXPECT_EQ(true, this->check_file_match(nnl[i].nk, nnl[i].k_radial, nnl[i].beta_k, tol, betak_fname)); double* r_uniform_mesh = new double[nnl[i].nr_uniform]; - for (int ir = 0; ir != nnl[i].nr_uniform; ++ir) { - r_uniform_mesh[ir] = ir*nnl[i].dr_uniform; + for (int ir = 0; ir != nnl[i].nr_uniform; ++ir) + { + r_uniform_mesh[ir] = ir * nnl[i].dr_uniform; } - EXPECT_EQ(true, this->check_file_match(nnl[i].nr_uniform, - r_uniform_mesh, nnl[i].beta_uniform, tol, betaru_fname)); + EXPECT_EQ(true, + this->check_file_match(nnl[i].nr_uniform, r_uniform_mesh, nnl[i].beta_uniform, tol, betaru_fname)); remove(betar_fname.c_str()); remove(betak_fname.c_str()); @@ -730,17 +787,15 @@ TEST_F(NumericalNonlocalLmTest, BetaSave) { } remove(dir.c_str()); - } - -int main(int argc, char **argv) +int main(int argc, char** argv) { #ifdef __MPI MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD,&GlobalV::NPROC); - MPI_Comm_rank(MPI_COMM_WORLD,&GlobalV::MY_RANK); + MPI_Comm_size(MPI_COMM_WORLD, &GlobalV::NPROC); + MPI_Comm_rank(MPI_COMM_WORLD, &GlobalV::MY_RANK); #endif testing::InitGoogleTest(&argc, argv); int result = RUN_ALL_TESTS(); @@ -751,8 +806,3 @@ int main(int argc, char **argv) return result; } - - - - - diff --git a/source/module_basis/module_ao/test/ORB_nonlocal_test.cpp b/source/module_basis/module_ao/test/ORB_nonlocal_test.cpp index d1654144d1..506901f03c 100644 --- a/source/module_basis/module_ao/test/ORB_nonlocal_test.cpp +++ b/source/module_basis/module_ao/test/ORB_nonlocal_test.cpp @@ -1,5 +1,6 @@ +#include "source_base/global_variable.h" + #include "gtest/gtest.h" -#include "module_base/global_variable.h" #define private public #include "module_basis/module_ao/ORB_nonlocal.h" @@ -25,80 +26,76 @@ * */ - class NumericalNonlocalTest : public ::testing::Test { -protected: - - void SetUp(); - void TearDown(); - - // object under unit test - Numerical_Nonlocal nn; - - // parameters used to initialize the Numerical_Nonlocal object - std::string elem_label_; - int ielem_; - int lmax_; - double rcut_max_; - std::string type_ps_; - int nproj_; - std::vector nnl; + protected: + void SetUp(); + void TearDown(); + + // object under unit test + Numerical_Nonlocal nn; + + // parameters used to initialize the Numerical_Nonlocal object + std::string elem_label_; + int ielem_; + int lmax_; + double rcut_max_; + std::string type_ps_; + int nproj_; + std::vector nnl; }; - -void NumericalNonlocalTest::SetUp() { - elem_label_ = "O"; - ielem_ = 1; - lmax_ = 2; - type_ps_ = "NC"; - nproj_ = 4; - - nnl.resize(nproj_); - nnl[0].rcut = 1.0; - nnl[1].rcut = 3.0; - nnl[2].rcut = 4.0; - nnl[3].rcut = 2.0; - rcut_max_ = 4.0; +void NumericalNonlocalTest::SetUp() +{ + elem_label_ = "O"; + ielem_ = 1; + lmax_ = 2; + type_ps_ = "NC"; + nproj_ = 4; + + nnl.resize(nproj_); + nnl[0].rcut = 1.0; + nnl[1].rcut = 3.0; + nnl[2].rcut = 4.0; + nnl[3].rcut = 2.0; + rcut_max_ = 4.0; } - -void NumericalNonlocalTest::TearDown() { - +void NumericalNonlocalTest::TearDown() +{ } +TEST_F(NumericalNonlocalTest, SetTypeInfo) +{ -TEST_F(NumericalNonlocalTest, SetTypeInfo) { - - nn.set_type_info(ielem_, elem_label_, type_ps_, lmax_, nproj_, &nnl[0]); + nn.set_type_info(ielem_, elem_label_, type_ps_, lmax_, nproj_, &nnl[0]); - EXPECT_EQ(nn.label, elem_label_); - EXPECT_EQ(nn.type, ielem_); - EXPECT_EQ(nn.lmax, lmax_); - EXPECT_DOUBLE_EQ(nn.rcut_max, rcut_max_); - EXPECT_EQ(nn.nproj, nproj_); + EXPECT_EQ(nn.label, elem_label_); + EXPECT_EQ(nn.type, ielem_); + EXPECT_EQ(nn.lmax, lmax_); + EXPECT_DOUBLE_EQ(nn.rcut_max, rcut_max_); + EXPECT_EQ(nn.nproj, nproj_); } +TEST_F(NumericalNonlocalTest, Getters) +{ -TEST_F(NumericalNonlocalTest, Getters) { - - nn.set_type_info(ielem_, elem_label_, type_ps_, lmax_, nproj_, &nnl[0]); + nn.set_type_info(ielem_, elem_label_, type_ps_, lmax_, nproj_, &nnl[0]); - EXPECT_EQ(nn.getLmax(), nn.lmax); - EXPECT_EQ(nn.getType(), nn.type); - EXPECT_EQ(nn.getLabel(), nn.label); - EXPECT_EQ(nn.getType_ps(), nn.type_ps); - EXPECT_EQ(nn.get_rcut_max(), rcut_max_); + EXPECT_EQ(nn.getLmax(), nn.lmax); + EXPECT_EQ(nn.getType(), nn.type); + EXPECT_EQ(nn.getLabel(), nn.label); + EXPECT_EQ(nn.getType_ps(), nn.type_ps); + EXPECT_EQ(nn.get_rcut_max(), rcut_max_); } - -int main(int argc, char **argv) +int main(int argc, char** argv) { #ifdef __MPI MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD,&GlobalV::NPROC); - MPI_Comm_rank(MPI_COMM_WORLD,&GlobalV::MY_RANK); + MPI_Comm_size(MPI_COMM_WORLD, &GlobalV::NPROC); + MPI_Comm_rank(MPI_COMM_WORLD, &GlobalV::MY_RANK); #endif testing::InitGoogleTest(&argc, argv); int result = RUN_ALL_TESTS(); @@ -109,5 +106,3 @@ int main(int argc, char **argv) return result; } - - diff --git a/source/module_basis/module_ao/test/ORB_read_test.cpp b/source/module_basis/module_ao/test/ORB_read_test.cpp index 13385ecad4..54fbbd1f8b 100644 --- a/source/module_basis/module_ao/test/ORB_read_test.cpp +++ b/source/module_basis/module_ao/test/ORB_read_test.cpp @@ -1,8 +1,9 @@ -#include -#include "gtest/gtest.h" -#include "module_base/global_variable.h" #include "module_basis/module_ao/ORB_atomic.h" #include "module_basis/module_ao/ORB_atomic_lm.h" +#include "source_base/global_variable.h" + +#include "gtest/gtest.h" +#include #define private public #include "module_basis/module_ao/ORB_read.h" @@ -16,7 +17,7 @@ * unit test of class "LCAO_Orbitals" ***********************************************************/ -/** +/** * Tested functions: * * - Read_Orbitals @@ -33,8 +34,7 @@ class LcaoOrbitalsTest : public ::testing::Test { -protected: - + protected: void SetUp(); void TearDown(); @@ -61,8 +61,8 @@ class LcaoOrbitalsTest : public ::testing::Test double Rmax_; }; - -void LcaoOrbitalsTest::SetUp() { +void LcaoOrbitalsTest::SetUp() +{ ofs_log_.open("ORB_read_test.log"); ntype_ = 2; lmax_ = 2; @@ -82,8 +82,8 @@ void LcaoOrbitalsTest::SetUp() { Rmax_ = 20; } - -void LcaoOrbitalsTest::lcao_read() { +void LcaoOrbitalsTest::lcao_read() +{ // see UnitCell::read_atom_species in module_cell/read_atoms.cpp lcao_.read_in_flag = read_in_flag_; @@ -98,40 +98,41 @@ void LcaoOrbitalsTest::lcao_read() { lcao_.dR = dR_; lcao_.Rmax = Rmax_; - lcao_.Read_Orbitals(ofs_log_, ntype_, lmax_, deepks_setorb_, out_mat_r_, - force_flag_, my_rank_); + lcao_.Read_Orbitals(ofs_log_, ntype_, lmax_, deepks_setorb_, out_mat_r_, force_flag_, my_rank_); } - -void LcaoOrbitalsTest::TearDown() { +void LcaoOrbitalsTest::TearDown() +{ } - -TEST_F(LcaoOrbitalsTest, ReadInFlag) { +TEST_F(LcaoOrbitalsTest, ReadInFlag) +{ read_in_flag_ = false; EXPECT_EXIT(this->lcao_read(), testing::ExitedWithCode(1), ""); } - -TEST_F(LcaoOrbitalsTest, WrongOrbFile) { +TEST_F(LcaoOrbitalsTest, WrongOrbFile) +{ orbital_file_[0] = "./lcao_H2O/H_gga_8au_60Ry_2s1.orb"; EXPECT_EXIT(this->lcao_read(), testing::ExitedWithCode(1), ""); } - -TEST_F(LcaoOrbitalsTest, WrongDescFile) { +TEST_F(LcaoOrbitalsTest, WrongDescFile) +{ descriptor_file_ = "./lcao_H2O/jl.orb"; EXPECT_EXIT(this->lcao_read(), testing::ExitedWithCode(1), ""); } - -TEST_F(LcaoOrbitalsTest, BcastFiles) { +TEST_F(LcaoOrbitalsTest, BcastFiles) +{ #ifdef __MPI - if ( GlobalV::MY_RANK == 0 ) { + if (GlobalV::MY_RANK == 0) + { lcao_.orbital_file = orbital_file_; } - if ( GlobalV::MY_RANK != 0) { + if (GlobalV::MY_RANK != 0) + { EXPECT_EQ(lcao_.orbital_file, std::vector{}); } @@ -142,9 +143,9 @@ TEST_F(LcaoOrbitalsTest, BcastFiles) { #endif } +TEST_F(LcaoOrbitalsTest, ReadOrbitals) +{ -TEST_F(LcaoOrbitalsTest, ReadOrbitals) { - this->lcao_read(); // This test checks whether Read_Orbitals behaves as expected. @@ -168,44 +169,45 @@ TEST_F(LcaoOrbitalsTest, ReadOrbitals) { EXPECT_EQ(ao0.getNchi(1), 1); ASSERT_EQ(ao0.getTotal_nchi(), 3); - std::vector L0_list{0,0,1}; - std::vector N0_list{0,1,0}; + std::vector L0_list{0, 0, 1}; + std::vector N0_list{0, 1, 0}; - for (size_t i = 0; i != 3; ++i) { + for (size_t i = 0; i != 3; ++i) + { int L = L0_list[i], N = N0_list[i]; - EXPECT_EQ(ao0.PhiLN(L,N).getLabel(), "H"); - EXPECT_EQ(ao0.PhiLN(L,N).getType(), 0); - EXPECT_EQ(ao0.PhiLN(L,N).getL(), L); - EXPECT_EQ(ao0.PhiLN(L,N).getChi(), N); - EXPECT_EQ(ao0.PhiLN(L,N).getNr(), 801); - EXPECT_EQ(ao0.PhiLN(L,N).getNk(), lcao_.kmesh); - EXPECT_EQ(ao0.PhiLN(L,N).getDk(), lcao_.dk); - EXPECT_EQ(ao0.PhiLN(L,N).getDruniform(), lcao_.dr_uniform); - - for (int ir = 0; ir != 801; ++ir) { - EXPECT_DOUBLE_EQ(ao0.PhiLN(L,N).getRab(ir), 0.01); - EXPECT_DOUBLE_EQ(ao0.PhiLN(L,N).getRadial(ir), 0.01*ir); + EXPECT_EQ(ao0.PhiLN(L, N).getLabel(), "H"); + EXPECT_EQ(ao0.PhiLN(L, N).getType(), 0); + EXPECT_EQ(ao0.PhiLN(L, N).getL(), L); + EXPECT_EQ(ao0.PhiLN(L, N).getChi(), N); + EXPECT_EQ(ao0.PhiLN(L, N).getNr(), 801); + EXPECT_EQ(ao0.PhiLN(L, N).getNk(), lcao_.kmesh); + EXPECT_EQ(ao0.PhiLN(L, N).getDk(), lcao_.dk); + EXPECT_EQ(ao0.PhiLN(L, N).getDruniform(), lcao_.dr_uniform); + + for (int ir = 0; ir != 801; ++ir) + { + EXPECT_DOUBLE_EQ(ao0.PhiLN(L, N).getRab(ir), 0.01); + EXPECT_DOUBLE_EQ(ao0.PhiLN(L, N).getRadial(ir), 0.01 * ir); } } - EXPECT_NEAR(ao0.PhiLN(0,0).getPsi(0 ), 1.837183001954e+00, max_tol); - EXPECT_NEAR(ao0.PhiLN(0,0).getPsi(1 ), 1.836944589913e+00, max_tol); - EXPECT_NEAR(ao0.PhiLN(0,0).getPsi(4 ), 1.833374417163e+00, max_tol); - EXPECT_NEAR(ao0.PhiLN(0,0).getPsi(799), 3.037233152557e-07, max_tol); - EXPECT_NEAR(ao0.PhiLN(0,0).getPsi(800), 0.000000000000e+00, max_tol); - - EXPECT_NEAR(ao0.PhiLN(0,1).getPsi(0 ), -2.482045090982e+00, max_tol); - EXPECT_NEAR(ao0.PhiLN(0,1).getPsi(1 ), -2.481575045574e+00, max_tol); - EXPECT_NEAR(ao0.PhiLN(0,1).getPsi(4 ), -2.474535579529e+00, max_tol); - EXPECT_NEAR(ao0.PhiLN(0,1).getPsi(799), 1.115867959482e-06, max_tol); - EXPECT_NEAR(ao0.PhiLN(0,1).getPsi(800), 0.000000000000e+00, max_tol); + EXPECT_NEAR(ao0.PhiLN(0, 0).getPsi(0), 1.837183001954e+00, max_tol); + EXPECT_NEAR(ao0.PhiLN(0, 0).getPsi(1), 1.836944589913e+00, max_tol); + EXPECT_NEAR(ao0.PhiLN(0, 0).getPsi(4), 1.833374417163e+00, max_tol); + EXPECT_NEAR(ao0.PhiLN(0, 0).getPsi(799), 3.037233152557e-07, max_tol); + EXPECT_NEAR(ao0.PhiLN(0, 0).getPsi(800), 0.000000000000e+00, max_tol); - EXPECT_NEAR(ao0.PhiLN(1,0).getPsi(0 ), 0.000000000000e+00, max_tol); - EXPECT_NEAR(ao0.PhiLN(1,0).getPsi(1 ), -2.619148756396e-02, max_tol); - EXPECT_NEAR(ao0.PhiLN(1,0).getPsi(4 ), -1.045849793771e-01, max_tol); - EXPECT_NEAR(ao0.PhiLN(1,0).getPsi(799), 3.217573100688e-06, max_tol); - EXPECT_NEAR(ao0.PhiLN(1,0).getPsi(800), 0.000000000000e+00, max_tol); + EXPECT_NEAR(ao0.PhiLN(0, 1).getPsi(0), -2.482045090982e+00, max_tol); + EXPECT_NEAR(ao0.PhiLN(0, 1).getPsi(1), -2.481575045574e+00, max_tol); + EXPECT_NEAR(ao0.PhiLN(0, 1).getPsi(4), -2.474535579529e+00, max_tol); + EXPECT_NEAR(ao0.PhiLN(0, 1).getPsi(799), 1.115867959482e-06, max_tol); + EXPECT_NEAR(ao0.PhiLN(0, 1).getPsi(800), 0.000000000000e+00, max_tol); + EXPECT_NEAR(ao0.PhiLN(1, 0).getPsi(0), 0.000000000000e+00, max_tol); + EXPECT_NEAR(ao0.PhiLN(1, 0).getPsi(1), -2.619148756396e-02, max_tol); + EXPECT_NEAR(ao0.PhiLN(1, 0).getPsi(4), -1.045849793771e-01, max_tol); + EXPECT_NEAR(ao0.PhiLN(1, 0).getPsi(799), 3.217573100688e-06, max_tol); + EXPECT_NEAR(ao0.PhiLN(1, 0).getPsi(800), 0.000000000000e+00, max_tol); // O EXPECT_EQ(ao1.getType(), 1); @@ -216,56 +218,57 @@ TEST_F(LcaoOrbitalsTest, ReadOrbitals) { EXPECT_EQ(ao1.getNchi(2), 1); ASSERT_EQ(ao1.getTotal_nchi(), 5); - std::vector L1_list{0,0,1,1,2}; - std::vector N1_list{0,1,0,1,0}; + std::vector L1_list{0, 0, 1, 1, 2}; + std::vector N1_list{0, 1, 0, 1, 0}; - for (size_t i = 0; i != 5; ++i) { + for (size_t i = 0; i != 5; ++i) + { int L = L1_list[i], N = N1_list[i]; - EXPECT_EQ(ao1.PhiLN(L,N).getLabel(), "O"); - EXPECT_EQ(ao1.PhiLN(L,N).getType(), 1); - EXPECT_EQ(ao1.PhiLN(L,N).getL(), L); - EXPECT_EQ(ao1.PhiLN(L,N).getChi(), N); - EXPECT_EQ(ao1.PhiLN(L,N).getNr(), 701); - EXPECT_EQ(ao1.PhiLN(L,N).getNk(), lcao_.kmesh); - EXPECT_EQ(ao1.PhiLN(L,N).getDk(), lcao_.dk); - EXPECT_EQ(ao1.PhiLN(L,N).getDruniform(), lcao_.dr_uniform); - - for (int ir = 0; ir != 701; ++ir) { - EXPECT_DOUBLE_EQ(ao1.PhiLN(L,N).getRab(ir), 0.01); - EXPECT_DOUBLE_EQ(ao1.PhiLN(L,N).getRadial(ir), 0.01*ir); + EXPECT_EQ(ao1.PhiLN(L, N).getLabel(), "O"); + EXPECT_EQ(ao1.PhiLN(L, N).getType(), 1); + EXPECT_EQ(ao1.PhiLN(L, N).getL(), L); + EXPECT_EQ(ao1.PhiLN(L, N).getChi(), N); + EXPECT_EQ(ao1.PhiLN(L, N).getNr(), 701); + EXPECT_EQ(ao1.PhiLN(L, N).getNk(), lcao_.kmesh); + EXPECT_EQ(ao1.PhiLN(L, N).getDk(), lcao_.dk); + EXPECT_EQ(ao1.PhiLN(L, N).getDruniform(), lcao_.dr_uniform); + + for (int ir = 0; ir != 701; ++ir) + { + EXPECT_DOUBLE_EQ(ao1.PhiLN(L, N).getRab(ir), 0.01); + EXPECT_DOUBLE_EQ(ao1.PhiLN(L, N).getRadial(ir), 0.01 * ir); } } - EXPECT_NEAR(ao1.PhiLN(0,0).getPsi(0), 1.208504975904e+00, max_tol); - EXPECT_NEAR(ao1.PhiLN(0,0).getPsi(1), 1.208605373194e+00, max_tol); - EXPECT_NEAR(ao1.PhiLN(0,0).getPsi(4), 1.210103935461e+00, max_tol); - EXPECT_NEAR(ao1.PhiLN(0,0).getPsi(699), 4.465396560257e-08, max_tol); - EXPECT_NEAR(ao1.PhiLN(0,0).getPsi(700), 0.0, max_tol); - - EXPECT_NEAR(ao1.PhiLN(0,1).getPsi(0), 7.254873428942e-01, max_tol); - EXPECT_NEAR(ao1.PhiLN(0,1).getPsi(1), 7.256666701836e-01, max_tol); - EXPECT_NEAR(ao1.PhiLN(0,1).getPsi(4), 7.283448557011e-01, max_tol); - EXPECT_NEAR(ao1.PhiLN(0,1).getPsi(699), -1.916246212603e-06, max_tol); - EXPECT_NEAR(ao1.PhiLN(0,1).getPsi(700), 0.0, max_tol); - - EXPECT_NEAR(ao1.PhiLN(1,0).getPsi(0), 0.0, max_tol); - EXPECT_NEAR(ao1.PhiLN(1,0).getPsi(1), 4.626669306440e-02, max_tol); - EXPECT_NEAR(ao1.PhiLN(1,0).getPsi(4), 1.845014292772e-01, max_tol); - EXPECT_NEAR(ao1.PhiLN(1,0).getPsi(699), 2.870401658966e-07, max_tol); - EXPECT_NEAR(ao1.PhiLN(1,0).getPsi(700), 0.0, max_tol); - - EXPECT_NEAR(ao1.PhiLN(1,1).getPsi(0), 0.0, max_tol); - EXPECT_NEAR(ao1.PhiLN(1,1).getPsi(1), 3.375340101333e-02, max_tol); - EXPECT_NEAR(ao1.PhiLN(1,1).getPsi(4), 1.346256082234e-01, max_tol); - EXPECT_NEAR(ao1.PhiLN(1,1).getPsi(699), -2.771091616120e-06, max_tol); - EXPECT_NEAR(ao1.PhiLN(1,1).getPsi(700), 0.0, max_tol); - - EXPECT_NEAR(ao1.PhiLN(2,0).getPsi(0), 0.0, max_tol); - EXPECT_NEAR(ao1.PhiLN(2,0).getPsi(1), -3.343626342662e-04, max_tol); - EXPECT_NEAR(ao1.PhiLN(2,0).getPsi(4), -5.337546547975e-03, max_tol); - EXPECT_NEAR(ao1.PhiLN(2,0).getPsi(699), 1.396308876444e-06, max_tol); - EXPECT_NEAR(ao1.PhiLN(2,0).getPsi(700), 0.0, max_tol); - + EXPECT_NEAR(ao1.PhiLN(0, 0).getPsi(0), 1.208504975904e+00, max_tol); + EXPECT_NEAR(ao1.PhiLN(0, 0).getPsi(1), 1.208605373194e+00, max_tol); + EXPECT_NEAR(ao1.PhiLN(0, 0).getPsi(4), 1.210103935461e+00, max_tol); + EXPECT_NEAR(ao1.PhiLN(0, 0).getPsi(699), 4.465396560257e-08, max_tol); + EXPECT_NEAR(ao1.PhiLN(0, 0).getPsi(700), 0.0, max_tol); + + EXPECT_NEAR(ao1.PhiLN(0, 1).getPsi(0), 7.254873428942e-01, max_tol); + EXPECT_NEAR(ao1.PhiLN(0, 1).getPsi(1), 7.256666701836e-01, max_tol); + EXPECT_NEAR(ao1.PhiLN(0, 1).getPsi(4), 7.283448557011e-01, max_tol); + EXPECT_NEAR(ao1.PhiLN(0, 1).getPsi(699), -1.916246212603e-06, max_tol); + EXPECT_NEAR(ao1.PhiLN(0, 1).getPsi(700), 0.0, max_tol); + + EXPECT_NEAR(ao1.PhiLN(1, 0).getPsi(0), 0.0, max_tol); + EXPECT_NEAR(ao1.PhiLN(1, 0).getPsi(1), 4.626669306440e-02, max_tol); + EXPECT_NEAR(ao1.PhiLN(1, 0).getPsi(4), 1.845014292772e-01, max_tol); + EXPECT_NEAR(ao1.PhiLN(1, 0).getPsi(699), 2.870401658966e-07, max_tol); + EXPECT_NEAR(ao1.PhiLN(1, 0).getPsi(700), 0.0, max_tol); + + EXPECT_NEAR(ao1.PhiLN(1, 1).getPsi(0), 0.0, max_tol); + EXPECT_NEAR(ao1.PhiLN(1, 1).getPsi(1), 3.375340101333e-02, max_tol); + EXPECT_NEAR(ao1.PhiLN(1, 1).getPsi(4), 1.346256082234e-01, max_tol); + EXPECT_NEAR(ao1.PhiLN(1, 1).getPsi(699), -2.771091616120e-06, max_tol); + EXPECT_NEAR(ao1.PhiLN(1, 1).getPsi(700), 0.0, max_tol); + + EXPECT_NEAR(ao1.PhiLN(2, 0).getPsi(0), 0.0, max_tol); + EXPECT_NEAR(ao1.PhiLN(2, 0).getPsi(1), -3.343626342662e-04, max_tol); + EXPECT_NEAR(ao1.PhiLN(2, 0).getPsi(4), -5.337546547975e-03, max_tol); + EXPECT_NEAR(ao1.PhiLN(2, 0).getPsi(699), 1.396308876444e-06, max_tol); + EXPECT_NEAR(ao1.PhiLN(2, 0).getPsi(700), 0.0, max_tol); // Descriptor @@ -277,23 +280,25 @@ TEST_F(LcaoOrbitalsTest, ReadOrbitals) { EXPECT_EQ(aod.getNchi(2), 2); ASSERT_EQ(aod.getTotal_nchi(), 6); - std::vector Ld_list{0,0,1,1,2,2}; - std::vector Nd_list{0,1,0,1,0,1}; + std::vector Ld_list{0, 0, 1, 1, 2, 2}; + std::vector Nd_list{0, 1, 0, 1, 0, 1}; - for (size_t i = 0; i != 6; ++i) { + for (size_t i = 0; i != 6; ++i) + { int L = Ld_list[i], N = Nd_list[i]; - EXPECT_EQ(aod.PhiLN(L,N).getLabel(), ""); - EXPECT_EQ(aod.PhiLN(L,N).getType(), 0); - EXPECT_EQ(aod.PhiLN(L,N).getL(), L); - EXPECT_EQ(aod.PhiLN(L,N).getChi(), N); - EXPECT_EQ(aod.PhiLN(L,N).getNr(), 205); - EXPECT_EQ(aod.PhiLN(L,N).getNk(), lcao_.kmesh); - EXPECT_EQ(aod.PhiLN(L,N).getDk(), lcao_.dk); - EXPECT_EQ(aod.PhiLN(L,N).getDruniform(), lcao_.dr_uniform); - - for (int ir = 0; ir != 205; ++ir) { - EXPECT_DOUBLE_EQ(aod.PhiLN(L,N).getRab(ir), 0.01); - EXPECT_DOUBLE_EQ(aod.PhiLN(L,N).getRadial(ir), 0.01*ir); + EXPECT_EQ(aod.PhiLN(L, N).getLabel(), ""); + EXPECT_EQ(aod.PhiLN(L, N).getType(), 0); + EXPECT_EQ(aod.PhiLN(L, N).getL(), L); + EXPECT_EQ(aod.PhiLN(L, N).getChi(), N); + EXPECT_EQ(aod.PhiLN(L, N).getNr(), 205); + EXPECT_EQ(aod.PhiLN(L, N).getNk(), lcao_.kmesh); + EXPECT_EQ(aod.PhiLN(L, N).getDk(), lcao_.dk); + EXPECT_EQ(aod.PhiLN(L, N).getDruniform(), lcao_.dr_uniform); + + for (int ir = 0; ir != 205; ++ir) + { + EXPECT_DOUBLE_EQ(aod.PhiLN(L, N).getRab(ir), 0.01); + EXPECT_DOUBLE_EQ(aod.PhiLN(L, N).getRadial(ir), 0.01 * ir); } } @@ -302,8 +307,8 @@ TEST_F(LcaoOrbitalsTest, ReadOrbitals) { // getPsi() does not gives the numbers in jle.orb } - -TEST_F(LcaoOrbitalsTest, Getters) { +TEST_F(LcaoOrbitalsTest, Getters) +{ this->lcao_read(); @@ -321,14 +326,13 @@ TEST_F(LcaoOrbitalsTest, Getters) { EXPECT_EQ(lcao_.get_rcutmax_Phi(), lcao_.rcutmax_Phi); } - -int main(int argc, char **argv) +int main(int argc, char** argv) { #ifdef __MPI MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD,&GlobalV::NPROC); - MPI_Comm_rank(MPI_COMM_WORLD,&GlobalV::MY_RANK); + MPI_Comm_size(MPI_COMM_WORLD, &GlobalV::NPROC); + MPI_Comm_rank(MPI_COMM_WORLD, &GlobalV::MY_RANK); #endif testing::InitGoogleTest(&argc, argv); @@ -339,6 +343,4 @@ int main(int argc, char **argv) #endif return result; -} - - +} diff --git a/source/module_basis/module_ao/test/ORB_unittest.h b/source/module_basis/module_ao/test/ORB_unittest.h index 509a72541c..29b69efdf5 100644 --- a/source/module_basis/module_ao/test/ORB_unittest.h +++ b/source/module_basis/module_ao/test/ORB_unittest.h @@ -1,9 +1,9 @@ #ifndef _ORBUNITTEST_ #define _ORBUNITTEST_ -#include "module_base/global_function.h" #include "module_basis/module_ao/ORB_control.h" #include "module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb11.h" +#include "source_base/global_function.h" #include "gtest/gtest.h" //#include "mock_center2.h" diff --git a/source/module_basis/module_nao/atomic_radials.cpp b/source/module_basis/module_nao/atomic_radials.cpp index 42a9867662..243872f4f8 100644 --- a/source/module_basis/module_nao/atomic_radials.cpp +++ b/source/module_basis/module_nao/atomic_radials.cpp @@ -1,18 +1,18 @@ #include "module_basis/module_nao/atomic_radials.h" -#include "module_base/math_integral.h" -#include "module_base/parallel_common.h" -#include "module_base/tool_quit.h" +#include "source_base/math_integral.h" +#include "source_base/parallel_common.h" +#include "source_base/tool_quit.h" // FIXME: should update with pyabacus // #include "module_io/orb_io.h" -#include "module_base/projgen.h" +#include "source_base/projgen.h" #include #include -#include #include +#include AtomicRadials& AtomicRadials::operator=(const AtomicRadials& rhs) { @@ -305,7 +305,7 @@ void AtomicRadials::read_abacus_orb(std::ifstream& ifs, std::ofstream* ptr_log, // nzeta_max_ = *std::max_element(nzeta.begin(), nzeta.end()); // indexing(); - + // std::vector rgrid(nr); // std::iota(rgrid.begin(), rgrid.end(), 0); // std::for_each(rgrid.begin(), rgrid.end(), [dr](double& r) { r *= dr; }); @@ -315,8 +315,8 @@ void AtomicRadials::read_abacus_orb(std::ifstream& ifs, std::ofstream* ptr_log, // { // for (int izeta = 0; izeta < nzeta[l]; ++izeta) // { -// chi_[index(l, izeta)].build(l, true, nr, rgrid.data(), radials[ichi].data(), 0, izeta, symbol_, itype_, false); -// chi_[index(l, izeta)].normalize(); +// chi_[index(l, izeta)].build(l, true, nr, rgrid.data(), radials[ichi].data(), 0, izeta, symbol_, itype_, +// false); chi_[index(l, izeta)].normalize(); // ++ichi; // } // } diff --git a/source/module_basis/module_nao/beta_radials.cpp b/source/module_basis/module_nao/beta_radials.cpp index fdef1822d0..f220ed95b8 100644 --- a/source/module_basis/module_nao/beta_radials.cpp +++ b/source/module_basis/module_nao/beta_radials.cpp @@ -1,9 +1,9 @@ #include "module_basis/module_nao/beta_radials.h" #include "module_parameter/parameter.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_common.h" -#include "module_base/tool_quit.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_common.h" +#include "source_base/tool_quit.h" #include diff --git a/source/module_basis/module_nao/hydrogen_radials.cpp b/source/module_basis/module_nao/hydrogen_radials.cpp index a0e6479774..0cc29a3f18 100644 --- a/source/module_basis/module_nao/hydrogen_radials.cpp +++ b/source/module_basis/module_nao/hydrogen_radials.cpp @@ -1,10 +1,12 @@ #include "module_basis/module_nao/hydrogen_radials.h" -#include "module_base/global_variable.h" -#include "module_base/math_integral.h" -#include "module_base/atom_in.h" // for calculating slater screening constant -#include -#include + +#include "source_base/atom_in.h" // for calculating slater screening constant +#include "source_base/global_variable.h" +#include "source_base/math_integral.h" + #include +#include +#include HydrogenRadials& HydrogenRadials::operator=(const HydrogenRadials& rhs) { @@ -24,12 +26,15 @@ void HydrogenRadials::build(const int itype, const std::string strategy, std::ofstream* ptr_log) { - if(with_slater_screening&&rank==0) {printf("Build hydrogen_radials with Slater screening coefficients.\n");} + if (with_slater_screening && rank == 0) + { + printf("Build hydrogen_radials with Slater screening coefficients.\n"); + } cleanup(); itype_ = itype; symbol_ = symbol; // rcut should be determined as soon as possible... - //generate_hydrogen_radials(charge, nmax, 10.0, dr, rank, ptr_log); + // generate_hydrogen_radials(charge, nmax, 10.0, dr, rank, ptr_log); hydrogen(charge, with_slater_screening, nmax, dr, conv_thr, rank, strategy, ptr_log); set_rcut_max(); } @@ -50,42 +55,35 @@ std::vector HydrogenRadials::generate_hydrogen_radial_segment(const doub std::vector rvalue(ngrid); // initialize value for rgrid - for(int ir = 0; ir != ngrid; ++ir) + for (int ir = 0; ir != ngrid; ++ir) { rgrid[ir] = rmin + ir * dr; } double screened_charge = charge; - if(with_slater_screening) + if (with_slater_screening) { double sigma = slater_screening(symbol_, n, l); screened_charge = charge - sigma; } - double norm_factor = sqrt( - 4.0*std::pow(screened_charge, 3)* - static_cast(this->assoc_laguerre_.factorial(n - l - 1)) / - std::pow(double(n), 4) / - static_cast(this->assoc_laguerre_.factorial(n + l)) / - std::pow(a0, 3) - ); + double norm_factor = sqrt(4.0 * std::pow(screened_charge, 3) + * static_cast(this->assoc_laguerre_.factorial(n - l - 1)) / std::pow(double(n), 4) + / static_cast(this->assoc_laguerre_.factorial(n + l)) / std::pow(a0, 3)); - for(int ir = 0; ir != ngrid; ++ir) + for (int ir = 0; ir != ngrid; ++ir) { // Bohr radius is 1.0 double rho = 2.0 * rgrid[ir] * screened_charge / n / a0; - rvalue[ir] = norm_factor * std::pow(rho, l) * exp(-rho/2.0) * this->assoc_laguerre_.value( - n, l, rho - ); + rvalue[ir] = norm_factor * std::pow(rho, l) * exp(-rho / 2.0) * this->assoc_laguerre_.value(n, l, rho); } return rvalue; } -double HydrogenRadials::radial_norm(const std::vector rgrid, - const std::vector rvalue) +double HydrogenRadials::radial_norm(const std::vector rgrid, const std::vector rvalue) { std::vector integrand(rvalue.size()); - for(int ir = 0; ir != rvalue.size(); ++ir) + for (int ir = 0; ir != rvalue.size(); ++ir) { integrand[ir] = rvalue[ir] * rvalue[ir] * rgrid[ir] * rgrid[ir]; } @@ -106,19 +104,21 @@ double HydrogenRadials::generate_hydrogen_radial_toconv(const double charge, std::ofstream* ptr_log) { double norm = 0.0; - double rmax_ = 0.0; // in Bohr - double rmin_ = 0.0; // always to be 0, in Bohr + double rmax_ = 0.0; // in Bohr + double rmin_ = 0.0; // always to be 0, in Bohr double delta_r = 0.5; // stepsize for radius cutoff searching, in Bohr // clear the input vectors - rgrid.clear(); rgrid.shrink_to_fit(); - rvalue.clear(); rvalue.shrink_to_fit(); + rgrid.clear(); + rgrid.shrink_to_fit(); + rvalue.clear(); + rvalue.shrink_to_fit(); double dr = 0.01; // radial function realspace grid stepsize, in Bohr - if(delta_r < dr) + if (delta_r < dr) { dr = delta_r; } - if(rank == 0) + if (rank == 0) { printf("Searching for the cutoff radius for n = %d, l = %d, conv_thr = %6.4e\n", n, l, conv_thr); #ifdef __MPI @@ -128,20 +128,20 @@ double HydrogenRadials::generate_hydrogen_radial_toconv(const double charge, } int istep = 1; double delta_norm = 1.0; - while((std::fabs(delta_norm) > conv_thr)) + while ((std::fabs(delta_norm) > conv_thr)) { rmin_ = rmax_; rmax_ += delta_r; int ngrid = static_cast((rmax_ - rmin_) / dr) + 1; // [rmin, rmax] std::vector rgrid_segment(ngrid); - for(int ir = 0; ir != ngrid; ++ir) + for (int ir = 0; ir != ngrid; ++ir) { rgrid_segment[ir] = rmin_ + ir * dr; } - std::vector rvalue_segment = generate_hydrogen_radial_segment( - charge, with_slater_screening, n, l, rmin_, rmax_, dr, rank, ptr_log); + std::vector rvalue_segment + = generate_hydrogen_radial_segment(charge, with_slater_screening, n, l, rmin_, rmax_, dr, rank, ptr_log); // before push back, pop back the last element - if(rgrid.size() != 0) + if (rgrid.size() != 0) { rgrid.pop_back(); rvalue.pop_back(); @@ -151,10 +151,11 @@ double HydrogenRadials::generate_hydrogen_radial_toconv(const double charge, delta_norm = norm; norm = radial_norm(rgrid, rvalue); delta_norm = norm - delta_norm; - if((istep == 0)&&(rank == 0)) printf("%10d%12.2f%14.10f%18.10e\n", istep, rmax_, norm, delta_norm); + if ((istep == 0) && (rank == 0)) + printf("%10d%12.2f%14.10f%18.10e\n", istep, rmax_, norm, delta_norm); ++istep; } - if(rank == 0) + if (rank == 0) { printf("...\n"); printf("%10d%12.2f%14.10f%18.10e\n", istep, rmax_, norm, delta_norm); @@ -162,54 +163,53 @@ double HydrogenRadials::generate_hydrogen_radial_toconv(const double charge, return rmax_; } -std::vector> HydrogenRadials::unzip_strategy(const int nmax, - const std::string strategy) +std::vector> HydrogenRadials::unzip_strategy(const int nmax, const std::string strategy) { - if(strategy.substr(0, 6) != "energy") + if (strategy.substr(0, 6) != "energy") { // because for "energy", the nmax is used as the number of electrons assert(nmax < 8); } std::vector> nl_pairs; - if(strategy.substr(0, 7) == "minimal") + if (strategy.substr(0, 7) == "minimal") { - if(strategy == "minimal-nodeless") + if (strategy == "minimal-nodeless") { - for(int n = 1; n <= nmax; n++) + for (int n = 1; n <= nmax; n++) { std::pair nl_pair = std::make_pair(n, n - 1); nl_pairs.push_back(nl_pair); } } - else// if(strategy == "minimal-valence") + else // if(strategy == "minimal-valence") { - for(int l = 0; l < nmax; l++) + for (int l = 0; l < nmax; l++) { std::pair nl_pair = std::make_pair(nmax, l); nl_pairs.push_back(nl_pair); } } } - else if(strategy.substr(0, 6) == "energy") + else if (strategy.substr(0, 6) == "energy") { // 1s, -(n+1)-> 2s, -(l+1)-> 2p, 3s, -(n+1)-> 3p, 4s, -(l+1)-> 3d, 4p, 5s, -(n+1)-> 4d, 5p, 6s int starting_n = 1; int starting_l = 0; int nelec = 0; int nl_switch = 0; - while(nelec < nmax) // now nmax is the full number of electrons of certain atom + while (nelec < nmax) // now nmax is the full number of electrons of certain atom { int n = starting_n; int l = starting_l; do { nl_pairs.push_back(std::make_pair(n, l)); - nelec += (2*l + 1)*2; + nelec += (2 * l + 1) * 2; n++; l--; - } while ((l >= 0)&&(nelec < nmax)); - - if(nl_switch%2 == 1) + } while ((l >= 0) && (nelec < nmax)); + + if (nl_switch % 2 == 1) { starting_l++; } @@ -219,19 +219,22 @@ std::vector> HydrogenRadials::unzip_strategy(const int nmax, } nl_switch++; } - if(strategy == "energy-valence") + if (strategy == "energy-valence") { std::vector nmax_ls; std::vector nmax_minus1_ls; int real_nmax = 0; - for(auto nl_pair : nl_pairs) + for (auto nl_pair: nl_pairs) { - if(nl_pair.first > real_nmax) real_nmax = nl_pair.first; + if (nl_pair.first > real_nmax) + real_nmax = nl_pair.first; } - for(auto it = nl_pairs.begin(); it != nl_pairs.end();) + for (auto it = nl_pairs.begin(); it != nl_pairs.end();) { - if(it->first == real_nmax) nmax_ls.push_back(it->second); - else if(it->first == real_nmax - 1) nmax_minus1_ls.push_back(it->second); + if (it->first == real_nmax) + nmax_ls.push_back(it->second); + else if (it->first == real_nmax - 1) + nmax_minus1_ls.push_back(it->second); else { it = nl_pairs.erase(it); @@ -239,11 +242,11 @@ std::vector> HydrogenRadials::unzip_strategy(const int nmax, } ++it; } - for(auto it = nl_pairs.begin(); it != nl_pairs.end();) + for (auto it = nl_pairs.begin(); it != nl_pairs.end();) { - if(it->first == real_nmax - 1) + if (it->first == real_nmax - 1) { - if(std::find(nmax_ls.begin(), nmax_ls.end(), it->second) != nmax_ls.end()) + if (std::find(nmax_ls.begin(), nmax_ls.end(), it->second) != nmax_ls.end()) { it = nl_pairs.erase(it); continue; @@ -255,9 +258,9 @@ std::vector> HydrogenRadials::unzip_strategy(const int nmax, } else { - for(int n = 1; n <= nmax; n++) + for (int n = 1; n <= nmax; n++) { - for(int l = 0; l < n; l++) + for (int l = 0; l < n; l++) { std::pair nl_pair = std::make_pair(n, l); nl_pairs.push_back(nl_pair); @@ -267,13 +270,11 @@ std::vector> HydrogenRadials::unzip_strategy(const int nmax, return nl_pairs; } -void HydrogenRadials::smooth(std::vector& rgrid, - std::vector& rvalue, - const double sigma) +void HydrogenRadials::smooth(std::vector& rgrid, std::vector& rvalue, const double sigma) { double prefactor = 1.0 / sqrt(2.0 * M_PI) / sigma; double rmax = rgrid.back(); - for(int ir = 0; ir != rgrid.size(); ++ir) + for (int ir = 0; ir != rgrid.size(); ++ir) { double delta_r = rgrid[ir] - rmax; double smooth = prefactor * exp(-delta_r * delta_r / 2.0 / sigma / sigma); @@ -281,24 +282,24 @@ void HydrogenRadials::smooth(std::vector& rgrid, } } -std::map, std::pair, std::vector>> -HydrogenRadials::generate_orb(const double charge, - const bool with_slater_screening, - const int nmax, - const double dr, - const double conv_thr, - const int rank, - const std::string strategy, - std::ofstream* ptr_log) +std::map, std::pair, std::vector>> HydrogenRadials::generate_orb( + const double charge, + const bool with_slater_screening, + const int nmax, + const double dr, + const double conv_thr, + const int rank, + const std::string strategy, + std::ofstream* ptr_log) { // create space for storing all generated orbitals // (n, l) to (rgrid, rvalue) - std::map, std::pair, std::vector>> radials; + std::map, std::pair, std::vector>> radials; std::map, double> rmaxs; std::vector> nl_pairs = unzip_strategy(nmax, strategy); double rmax = 0.0; - for(auto nl_pair : nl_pairs) + for (auto nl_pair: nl_pairs) { int n = nl_pair.first; int l = nl_pair.second; @@ -315,13 +316,13 @@ HydrogenRadials::generate_orb(const double charge, ptr_log); radials[nl_pair] = std::make_pair(rgrid, rvalue); rmaxs[nl_pair] = rmax_nl; - if(rmax < rmax_nl) + if (rmax < rmax_nl) { rmax = rmax_nl; } } // zero padding towards rmax - for(auto& radial : radials) + for (auto& radial: radials) { int n = radial.first.first; int l = radial.first.second; @@ -330,10 +331,10 @@ HydrogenRadials::generate_orb(const double charge, std::vector& rgrid = radial.second.first; std::vector& rvalue = radial.second.second; - if(rmaxs[nl_pair] < rmax) + if (rmaxs[nl_pair] < rmax) { int ngrid = static_cast((rmax - rmaxs[nl_pair]) / dr); // (r, rmax] - for(int ir = 1; ir <= ngrid; ++ir) + for (int ir = 1; ir <= ngrid; ++ir) { rgrid.push_back(rmaxs[nl_pair] + ir * dr); rvalue.push_back(0.0); @@ -345,21 +346,20 @@ HydrogenRadials::generate_orb(const double charge, return radials; } -std::map, std::pair> -HydrogenRadials::mapping_nl_lzeta(const int nmax, - const std::string strategy) +std::map, std::pair> HydrogenRadials::mapping_nl_lzeta(const int nmax, + const std::string strategy) { std::map, std::pair> nl_lzeta; std::vector> nl_pairs = unzip_strategy(nmax, strategy); // initialize nzetas by all zeros // get lmax int lmax = 0; - for(auto nl_pair: nl_pairs) + for (auto nl_pair: nl_pairs) { - lmax = lmax>nl_pair.second?lmax:nl_pair.second; + lmax = lmax > nl_pair.second ? lmax : nl_pair.second; } std::vector nzetas(lmax + 1, 0); - for(auto nl_pair : nl_pairs) + for (auto nl_pair: nl_pairs) { int n = nl_pair.first; int l = nl_pair.second; @@ -369,10 +369,10 @@ HydrogenRadials::mapping_nl_lzeta(const int nmax, // import to standard RadialSet data structure lmax_ = lmax; nzeta_ = new int[lmax_ + 1]; - for(int l = 0; l <= lmax_; ++l) + for (int l = 0; l <= lmax_; ++l) { nzeta_[l] = nzetas[l]; - nzeta_max_ = nzeta_max_>nzeta_[l]?nzeta_max_:nzeta_[l]; + nzeta_max_ = nzeta_max_ > nzeta_[l] ? nzeta_max_ : nzeta_[l]; } indexing(); @@ -388,15 +388,15 @@ void HydrogenRadials::hydrogen(const double charge, const std::string strategy, std::ofstream* ptr_log) { - std::map, std::pair, std::vector>> orbitals = - generate_orb(charge, with_slater_screening, nmax, dr, conv_thr, rank, strategy, ptr_log); + std::map, std::pair, std::vector>> orbitals + = generate_orb(charge, with_slater_screening, nmax, dr, conv_thr, rank, strategy, ptr_log); std::map, std::pair> nl_lzeta = mapping_nl_lzeta(nmax, strategy); nchi_ = orbitals.size(); chi_ = new NumericalRadial[nchi_]; int ichi = 0; - for(auto orbital : orbitals) + for (auto orbital: orbitals) { int n = orbital.first.first; int l = orbital.first.second; @@ -404,54 +404,60 @@ void HydrogenRadials::hydrogen(const double charge, std::vector& rgrid = orbital.second.first; std::vector& rvalue = orbital.second.second; int lzeta = nl_lzeta[nl_pair].second; - chi_[index(l, lzeta)].build(l, true, rgrid.size(), rgrid.data(), rvalue.data(), 0, lzeta, symbol_, itype_, false); + chi_[index(l, lzeta)] + .build(l, true, rgrid.size(), rgrid.data(), rvalue.data(), 0, lzeta, symbol_, itype_, false); chi_[index(l, lzeta)].normalize(); //++ichi; } } -double HydrogenRadials::slater_screening(const std::string symbol, - const int n, - const int l) +double HydrogenRadials::slater_screening(const std::string symbol, const int n, const int l) { atom_in atom_db; std::vector electron_config = atom_db.groundstate_electronconfiguration[symbol]; int isubshell = 0; double sigma = 0.0; int _len = 0; - for(int n_ = 1; n_ <= n; ++n_) + for (int n_ = 1; n_ <= n; ++n_) { - if(n_ == n) _len += l + 1; - else _len += n_; + if (n_ == n) + _len += l + 1; + else + _len += n_; } - if(_len > electron_config.size()) + if (_len > electron_config.size()) { printf("Error: electron configuration is not enough for %s\n", symbol.c_str()); printf("n = %d, l = %d\n", n, l); exit(1); } // special case for 1s: for H and He, use 0.30 for 1s screening constant - if(symbol == "H") return 0.0; // only one 1s electron, no screening by "other electrons" - else if(symbol == "He") return 0.30; // only two 1s electrons, one screening the other - else if(n == 1) return 0.30; - for(int n_ = 1; n_ <= n; ++n_) + if (symbol == "H") + return 0.0; // only one 1s electron, no screening by "other electrons" + else if (symbol == "He") + return 0.30; // only two 1s electrons, one screening the other + else if (n == 1) + return 0.30; + for (int n_ = 1; n_ <= n; ++n_) { int lmax = (n_ == n) ? l : n_ - 1; - for(int l_ = 0; l_ <= lmax; ++l_) + for (int l_ = 0; l_ <= lmax; ++l_) { int nelec = electron_config[isubshell]; - if(n - n_ >= 2) sigma += nelec * 1.0; - else if(n - n_ == 1) + if (n - n_ >= 2) + sigma += nelec * 1.0; + else if (n - n_ == 1) { - double screening = (l > 1)? 1.00 : 0.85; + double screening = (l > 1) ? 1.00 : 0.85; sigma += nelec * screening; } else { - if(l_ == l) sigma += (nelec - 1) * 0.35; + if (l_ == l) + sigma += (nelec - 1) * 0.35; else { - double screening = (l > 1)? 1.00 : 0.35; + double screening = (l > 1) ? 1.00 : 0.35; sigma += nelec * screening; } } diff --git a/source/module_basis/module_nao/hydrogen_radials.h b/source/module_basis/module_nao/hydrogen_radials.h index a1242fb709..74255cfecb 100644 --- a/source/module_basis/module_nao/hydrogen_radials.h +++ b/source/module_basis/module_nao/hydrogen_radials.h @@ -2,7 +2,7 @@ #define HYDROGEN_RADIALS_H_ #include "module_basis/module_nao/radial_set.h" -#include "module_base/assoc_laguerre.h" +#include "source_base/assoc_laguerre.h" // include pair container #include // include map container @@ -19,178 +19,185 @@ 2. hydrogen() calls generate_orb() to generate the radial functions for each n, l pair. 3. generate_orb() calls generate_hydrogen_radial_toconv() to generate the radial function for set of n, l pairs. 4. with more details, unzip_strategy() is called to parse the strategy string to get the n, l pairs. - 5. for each n, l pair, generate_hydrogen_radial_toconv() is called to generate the radial function for a given n, l pair. + 5. for each n, l pair, generate_hydrogen_radial_toconv() is called to generate the radial function for a given n, l + pair. 6. note that the "toconv" means each radial function should have a norm converged to 1 at a certain radius, this is - also controlled by a convergence threshold (conv_thr), now set to 1e-6. Therefore each radial function will have different - rmax. - 7. if the norm of radial function is not converged to 1 at the given radius, the radius will be increased by dr, and the - radial function will be recalculated until the norm is converged to 1. + also controlled by a convergence threshold (conv_thr), now set to 1e-6. Therefore each radial function will have + different rmax. + 7. if the norm of radial function is not converged to 1 at the given radius, the radius will be increased by dr, and + the radial function will be recalculated until the norm is converged to 1. 8. the radial function is calculated by generate_hydrogen_radial_segment(), which is a wrapper of assoc_laguerre_. - 9. assoc_laguerre_ is a class that can calculate the radial function of hydrogen-like atom, with the help of associated - Laguerre polynomials. - 10. the radial function is calculated from 0.0 to a radius where the norm of radial function is converged, and the radial - function is stored in a pair of vectors, first vector is the radial grid, second vector is the radial function. - 11. after the first generation step, all radial functions are zero-padded to the same length, and stored in a map, with - the key being the n, l pair, and the value being the pair of vectors. - 12. to store the radial functions, they must indiced by the l, zeta pairs, so mapping_nl_lzeta() is called to map the n, l - pairs to the l, zeta pairs. - 13. finally, the radial functions are stored in NumericalRadials, with the key being the l, zeta pairs, and the value being - the pair of vectors. - + 9. assoc_laguerre_ is a class that can calculate the radial function of hydrogen-like atom, with the help of + associated Laguerre polynomials. + 10. the radial function is calculated from 0.0 to a radius where the norm of radial function is converged, and the + radial function is stored in a pair of vectors, first vector is the radial grid, second vector is the radial + function. + 11. after the first generation step, all radial functions are zero-padded to the same length, and stored in a map, + with the key being the n, l pair, and the value being the pair of vectors. + 12. to store the radial functions, they must indiced by the l, zeta pairs, so mapping_nl_lzeta() is called to map + the n, l pairs to the l, zeta pairs. + 13. finally, the radial functions are stored in NumericalRadials, with the key being the l, zeta pairs, and the + value being the pair of vectors. + User capable settings: - 1. charge of the nucleus charge according to pseudopotential, it is also a rescale of radius. Higher charge result in smaller - radius. - 2. generation strategy. minimal will only generate 1 orbital per angular momentum, double will generate 2 orbitals per angular - momentum, full will generate all orbitals per angular momentum up to nmax. Note: nmax is read from atom_database. - 3. conv_thr, the convergence threshold of the norm of radial function, if not reached, will continue to increase the radius. - user use this to control the accuracy of radial function. Too large conv_thr will result in inaccurate spherical Bessel - transformation results (in FFT-two_center_integrator) + 1. charge of the nucleus charge according to pseudopotential, it is also a rescale of radius. Higher charge result + in smaller radius. + 2. generation strategy. minimal will only generate 1 orbital per angular momentum, double will generate 2 orbitals + per angular momentum, full will generate all orbitals per angular momentum up to nmax. Note: nmax is read from + atom_database. + 3. conv_thr, the convergence threshold of the norm of radial function, if not reached, will continue to increase the + radius. user use this to control the accuracy of radial function. Too large conv_thr will result in inaccurate + spherical Bessel transformation results (in FFT-two_center_integrator) */ class HydrogenRadials : public RadialSet { - public: - /// @brief default constructor - HydrogenRadials() {} - /// @brief overloaded assignment operator - /// @param rhs HydrogenRadials object to be assigned - /// @return a reference to the assigned HydrogenRadials object - HydrogenRadials& operator=(const HydrogenRadials& rhs); - /// @brief copy constructor - /// @return a copy of the HydrogenRadials object - HydrogenRadials* clone() const { return new HydrogenRadials(*this); } // covariant return type - /// @brief destructor - ~HydrogenRadials() {} + public: + /// @brief default constructor + HydrogenRadials() + { + } + /// @brief overloaded assignment operator + /// @param rhs HydrogenRadials object to be assigned + /// @return a reference to the assigned HydrogenRadials object + HydrogenRadials& operator=(const HydrogenRadials& rhs); + /// @brief copy constructor + /// @return a copy of the HydrogenRadials object + HydrogenRadials* clone() const + { + return new HydrogenRadials(*this); + } // covariant return type + /// @brief destructor + ~HydrogenRadials() + { + } + + /// @brief build the hydrogen-like radial functions and push into NumericalRadials + /// @param itype index of the atom type + /// @param charge charge of the nucleus + /// @param nmax maxmium principal quantum number + /// @param rcut cutoff radius of the radial function (not used anymore) + /// @param dr step size of the radial grid + /// @param rank MPI rank + /// @param symbol element symbol, seems only useful when storing orbital information to file + /// @param strategy strategy string + /// @param ptr_log pointer to the log ofstream + void build(const int itype = 0, + const double charge = 1.0, + const bool with_slater_screening = false, + const int nmax = 0, + const double rcut = 10.0, + const double dr = 0.01, + const double conv_thr = 1e-6, + const int rank = 0, + const std::string symbol = "", + const std::string strategy = "minimal-valence", + std::ofstream* ptr_log = nullptr); - /// @brief build the hydrogen-like radial functions and push into NumericalRadials - /// @param itype index of the atom type - /// @param charge charge of the nucleus - /// @param nmax maxmium principal quantum number - /// @param rcut cutoff radius of the radial function (not used anymore) - /// @param dr step size of the radial grid - /// @param rank MPI rank - /// @param symbol element symbol, seems only useful when storing orbital information to file - /// @param strategy strategy string - /// @param ptr_log pointer to the log ofstream - void build(const int itype = 0, - const double charge = 1.0, - const bool with_slater_screening = false, - const int nmax = 0, - const double rcut = 10.0, - const double dr = 0.01, - const double conv_thr = 1e-6, - const int rank = 0, - const std::string symbol = "", - const std::string strategy = "minimal-valence", - std::ofstream* ptr_log = nullptr - ); + /// @brief parse the strategy string to get the n, l pairs + /// @param nmax maxmium principal quantum number + /// @param strategy strategy string + /// @return a vector of n, l pairs + std::vector> unzip_strategy(const int nmax = 0, const std::string strategy = "minimal-valence"); + /// @brief smooth the radial function to avoid high frequency noise in FFT-spherical bessel transform + /// @param rgrid radial grid + /// @param rvalue radial function + /// @param sigma sigma of the Gaussian kernel + void smooth(std::vector& rgrid, std::vector& rvalue, const double sigma = 0.1); + /// @brief generate hydrogen-like radial functions for a given n, l, from 0.0 to a radius where the norm of radial + /// function is converged + /// @param charge charge of the nucleus + /// @param n principal quantum number + /// @param l angular momentum quantum number + /// @param converge_threshold the threshold of norm of radial function, if not reached, will continue to increase + /// the radius + /// @param rank MPI rank + /// @param rgrid returned radial grid + /// @param rvalue returned radial function + /// @param ptr_log pointer to the log ofstream + /// @return the rmax of present radial function + double generate_hydrogen_radial_toconv(const double charge, + const bool with_slater_screening, + const int n, + const int l, + const double conv_thr, + const int rank, + std::vector& rgrid, + std::vector& rvalue, + std::ofstream* ptr_log = nullptr); + /// @brief returns the norm of the radial function + /// @param rgrid radial grid + /// @param rvalue radial function + /// @return norm of the radial function + double radial_norm(const std::vector rgrid, const std::vector rvalue); - /// @brief parse the strategy string to get the n, l pairs - /// @param nmax maxmium principal quantum number - /// @param strategy strategy string - /// @return a vector of n, l pairs - std::vector> unzip_strategy(const int nmax = 0, - const std::string strategy = "minimal-valence"); - /// @brief smooth the radial function to avoid high frequency noise in FFT-spherical bessel transform - /// @param rgrid radial grid - /// @param rvalue radial function - /// @param sigma sigma of the Gaussian kernel - void smooth(std::vector& rgrid, - std::vector& rvalue, - const double sigma = 0.1); - /// @brief generate hydrogen-like radial functions for a given n, l, from 0.0 to a radius where the norm of radial function is converged - /// @param charge charge of the nucleus - /// @param n principal quantum number - /// @param l angular momentum quantum number - /// @param converge_threshold the threshold of norm of radial function, if not reached, will continue to increase the radius - /// @param rank MPI rank - /// @param rgrid returned radial grid - /// @param rvalue returned radial function - /// @param ptr_log pointer to the log ofstream - /// @return the rmax of present radial function - double generate_hydrogen_radial_toconv(const double charge, - const bool with_slater_screening, - const int n, - const int l, - const double conv_thr, - const int rank, - std::vector& rgrid, - std::vector& rvalue, - std::ofstream* ptr_log = nullptr); - /// @brief returns the norm of the radial function - /// @param rgrid radial grid - /// @param rvalue radial function - /// @return norm of the radial function - double radial_norm(const std::vector rgrid, - const std::vector rvalue); + /// @brief generate set of hydrogen-like radial functions for a given charge, nmax, dr, rank, strategy + /// @param charge charge of the nucleus + /// @param nmax maxmium principal quantum number + /// @param dr step size of the radial grid + /// @param rank MPI rank + /// @param strategy strategy string + /// @param ptr_log pointer to the log ofstream + std::map, std::pair, std::vector>> generate_orb( + const double charge = 1.0, + const bool with_slater_screening = false, + const int nmax = 0, + const double dr = 0.01, + const double conv_thr = 1e-6, + const int rank = 0, + const std::string strategy = "minimal-valence", + std::ofstream* ptr_log = nullptr); + /// @brief mapping the n, l pairs to the l, zeta pairs + /// @param nmax maxmium principal quantum number + /// @param strategy strategy string + /// @return a map of n, l pairs to l, zeta pairs + std::map, std::pair> mapping_nl_lzeta(const int nmax = 0, + const std::string strategy = "minimal-valence"); + /// @brief kernel function of hydrogen-like radial functions + /// @param charge charge of the nucleus + /// @param nmax maxmium principal quantum number + /// @param dr step size of the radial grid + /// @param conv_thr convergence threshold of the norm of radial function + /// @param rank MPI rank + /// @param strategy strategy string + /// @param ptr_log pointer to the log ofstream + void hydrogen(const double charge = 1.0, + const bool with_slater_screening = false, + const int nmax = 0, + const double dr = 0.01, + const double conv_thr = 1e-6, + const int rank = 0, + const std::string strategy = "minimal-valence", + std::ofstream* ptr_log = nullptr); + /// @brief return the Slater screening constant for calculating effective nuclear charge + /// @note hoping to get a more accurate estimation of hydrogen-like atom radial function, by including many-electron + /// effect in this way + /// @details algorithm: + /// https://laney.edu/pinar-alscher/wp-content/uploads/sites/219/2016/04/Slater-rules-revised.pdf + /// @param n principal quantum number + /// @param l angular momentum quantum number + double slater_screening(const std::string symbol, const int n, const int l); - /// @brief generate set of hydrogen-like radial functions for a given charge, nmax, dr, rank, strategy - /// @param charge charge of the nucleus - /// @param nmax maxmium principal quantum number - /// @param dr step size of the radial grid - /// @param rank MPI rank - /// @param strategy strategy string - /// @param ptr_log pointer to the log ofstream - std::map, std::pair, std::vector>> - generate_orb(const double charge = 1.0, - const bool with_slater_screening = false, - const int nmax = 0, - const double dr = 0.01, - const double conv_thr = 1e-6, - const int rank = 0, - const std::string strategy = "minimal-valence", - std::ofstream* ptr_log = nullptr); - /// @brief mapping the n, l pairs to the l, zeta pairs - /// @param nmax maxmium principal quantum number - /// @param strategy strategy string - /// @return a map of n, l pairs to l, zeta pairs - std::map, std::pair> - mapping_nl_lzeta(const int nmax = 0, - const std::string strategy = "minimal-valence"); - /// @brief kernel function of hydrogen-like radial functions - /// @param charge charge of the nucleus - /// @param nmax maxmium principal quantum number - /// @param dr step size of the radial grid - /// @param conv_thr convergence threshold of the norm of radial function - /// @param rank MPI rank - /// @param strategy strategy string - /// @param ptr_log pointer to the log ofstream - void hydrogen(const double charge = 1.0, - const bool with_slater_screening = false, - const int nmax = 0, - const double dr = 0.01, - const double conv_thr = 1e-6, - const int rank = 0, - const std::string strategy = "minimal-valence", - std::ofstream* ptr_log = nullptr); - /// @brief return the Slater screening constant for calculating effective nuclear charge - /// @note hoping to get a more accurate estimation of hydrogen-like atom radial function, by including many-electron effect in this way - /// @details algorithm: https://laney.edu/pinar-alscher/wp-content/uploads/sites/219/2016/04/Slater-rules-revised.pdf - /// @param n principal quantum number - /// @param l angular momentum quantum number - double slater_screening(const std::string symbol, - const int n, - const int l); - private: - /// @brief generate hydrogen-like radial functions for a given n, l, in a given range [rmin, rmax] - /// @param charge charge of the nucleus - /// @param n principal quantum number - /// @param l angular momentum quantum number - /// @param rmin the minimal radius - /// @param rmax the maximal radius - /// @param dr step size of the radial grid - /// @param rank MPI rank - /// @param ptr_log pointer to the log ofstream - /// @return the radial function stored in std::vector - std::vector generate_hydrogen_radial_segment(const double charge = 1.0, - const bool with_slater_screening = false, - const int n = 0, - const int l = 0, - const double rmin = 0.0, - const double rmax = 10.0, - const double dr = 0.01, - const int rank = 0, - std::ofstream* ptr_log = nullptr); - /// @brief Associated Laguerre polynomials generator - Assoc_Laguerre assoc_laguerre_; + private: + /// @brief generate hydrogen-like radial functions for a given n, l, in a given range [rmin, rmax] + /// @param charge charge of the nucleus + /// @param n principal quantum number + /// @param l angular momentum quantum number + /// @param rmin the minimal radius + /// @param rmax the maximal radius + /// @param dr step size of the radial grid + /// @param rank MPI rank + /// @param ptr_log pointer to the log ofstream + /// @return the radial function stored in std::vector + std::vector generate_hydrogen_radial_segment(const double charge = 1.0, + const bool with_slater_screening = false, + const int n = 0, + const int l = 0, + const double rmin = 0.0, + const double rmax = 10.0, + const double dr = 0.01, + const int rank = 0, + std::ofstream* ptr_log = nullptr); + /// @brief Associated Laguerre polynomials generator + Assoc_Laguerre assoc_laguerre_; }; #endif // HYDROGEN_RADIALS_H_ \ No newline at end of file diff --git a/source/module_basis/module_nao/numerical_radial.cpp b/source/module_basis/module_nao/numerical_radial.cpp index f7f039c04e..444e0b6ed9 100644 --- a/source/module_basis/module_nao/numerical_radial.cpp +++ b/source/module_basis/module_nao/numerical_radial.cpp @@ -1,33 +1,24 @@ #include "module_basis/module_nao/numerical_radial.h" +#include "module_parameter/parameter.h" +#include "source_base/constants.h" +#include "source_base/cubic_spline.h" +#include "source_base/global_variable.h" +#include "source_base/math_integral.h" +#include "source_base/spherical_bessel_transformer.h" + #include #include #include #include #include -#include "module_base/constants.h" -#include "module_base/cubic_spline.h" -#include "module_base/global_variable.h" -#include "module_base/math_integral.h" -#include "module_base/spherical_bessel_transformer.h" -#include "module_parameter/parameter.h" - using ModuleBase::PI; -NumericalRadial::NumericalRadial(const NumericalRadial& other) : - symbol_(other.symbol_), - itype_(other.itype_), - l_(other.l_), - izeta_(other.izeta_), - nr_(other.nr_), - nk_(other.nk_), - ircut_(other.ircut_), - ikcut_(other.ikcut_), - is_fft_compliant_(other.is_fft_compliant_), - pr_(other.pr_), - pk_(other.pk_), - sbt_(other.sbt_) +NumericalRadial::NumericalRadial(const NumericalRadial& other) + : symbol_(other.symbol_), itype_(other.itype_), l_(other.l_), izeta_(other.izeta_), nr_(other.nr_), nk_(other.nk_), + ircut_(other.ircut_), ikcut_(other.ikcut_), is_fft_compliant_(other.is_fft_compliant_), pr_(other.pr_), + pk_(other.pk_), sbt_(other.sbt_) { // deep copy if (other.rgrid()) @@ -154,7 +145,9 @@ void NumericalRadial::build(const int l, set_icut(for_r_space, !for_r_space); } -void NumericalRadial::to_numerical_orbital_lm(Numerical_Orbital_Lm& orbital_lm, const int nk_legacy, const double lcao_dk) const +void NumericalRadial::to_numerical_orbital_lm(Numerical_Orbital_Lm& orbital_lm, + const int nk_legacy, + const double lcao_dk) const { #ifdef __DEBUG assert(rgrid_); @@ -169,9 +162,21 @@ void NumericalRadial::to_numerical_orbital_lm(Numerical_Orbital_Lm& orbital_lm, double* rab = new double[nr_]; std::fill(rab, rab + nr_, dr); - orbital_lm.set_orbital_info(symbol_, itype_, l_, izeta_, std::min(nr_, ircut_+1), rab, rgrid_, - Numerical_Orbital_Lm::Psi_Type::Psi, rvalue_, nk_legacy, lcao_dk, - 0.001 /* dr_uniform */, PARAM.inp.out_element_info, true, PARAM.inp.cal_force); + orbital_lm.set_orbital_info(symbol_, + itype_, + l_, + izeta_, + std::min(nr_, ircut_ + 1), + rab, + rgrid_, + Numerical_Orbital_Lm::Psi_Type::Psi, + rvalue_, + nk_legacy, + lcao_dk, + 0.001 /* dr_uniform */, + PARAM.inp.out_element_info, + true, + PARAM.inp.cal_force); delete[] rab; } @@ -212,7 +217,7 @@ void NumericalRadial::set_grid(const bool for_r_space, const int ngrid, const do if (mode == 't') { // obtain new values by a transform from the other space - // make sure a transform from the other space is available + // make sure a transform from the other space is available #ifdef __DEBUG assert(for_r_space ? (kgrid_ && kvalue_) : (rgrid_ && rvalue_)); #endif @@ -230,7 +235,7 @@ void NumericalRadial::set_grid(const bool for_r_space, const int ngrid, const do } else { // obtain new values by interpolation in the current space - // make sure an interpolation in the current space is available + // make sure an interpolation in the current space is available #ifdef __DEBUG assert(grid_tbu && value_tbu); #endif @@ -362,7 +367,7 @@ void NumericalRadial::radtab(const char op, double* rgrid_tab = new double[nr_tab]; double dr = rmax_tab / (nr_tab - 1); - std::for_each(rgrid_tab, rgrid_tab + nr_tab, [dr,&rgrid_tab](double& r) { r = dr * (&r - rgrid_tab); }); + std::for_each(rgrid_tab, rgrid_tab + nr_tab, [dr, &rgrid_tab](double& r) { r = dr * (&r - rgrid_tab); }); bool use_radrfft = is_fft_compliant(nr_tab, rgrid_tab, nk_, kgrid_); @@ -477,7 +482,10 @@ void NumericalRadial::set_icut(const bool for_r_space, const bool for_k_space, c assert(rgrid_ && rvalue_); #endif ircut_ = nr_; - while (ircut_ && std::abs(rvalue_[ircut_ - 1]) <= tol) { --ircut_; } + while (ircut_ && std::abs(rvalue_[ircut_ - 1]) <= tol) + { + --ircut_; + } } if (for_k_space) @@ -486,23 +494,24 @@ void NumericalRadial::set_icut(const bool for_r_space, const bool for_k_space, c assert(kgrid_ && kvalue_); #endif ikcut_ = nk_; - while (ikcut_ && std::abs(kvalue_[ikcut_ - 1]) <= tol) { --ikcut_; } + while (ikcut_ && std::abs(kvalue_[ikcut_ - 1]) <= tol) + { + --ikcut_; + } } } bool NumericalRadial::is_uniform(const int n, const double* const x, const double tol) { double dx = (x[n - 1] - x[0]) / (n - 1); - return std::all_of(x, x + n, - [&](const double& xi) { return std::abs(x[0] + (&xi - x) * dx - xi) < tol; }); + return std::all_of(x, x + n, [&](const double& xi) { return std::abs(x[0] + (&xi - x) * dx - xi) < tol; }); } bool NumericalRadial::is_fft_compliant(const int nr, const double* const rgrid, const int nk, const double* const kgrid, - const double tol - ) + const double tol) { if (!rgrid || !kgrid || nr != nk || nr < 2) { @@ -512,7 +521,6 @@ bool NumericalRadial::is_fft_compliant(const int nr, double dr = rgrid[nr - 1] / (nr - 1); double dk = kgrid[nk - 1] / (nk - 1); - return nr * std::abs(dr * dk - PI / (nr - 1)) < tol - && rgrid[0] == 0.0 && is_uniform(nr, rgrid, tol) + return nr * std::abs(dr * dk - PI / (nr - 1)) < tol && rgrid[0] == 0.0 && is_uniform(nr, rgrid, tol) && kgrid[0] == 0.0 && is_uniform(nk, kgrid, tol); } diff --git a/source/module_basis/module_nao/numerical_radial.h b/source/module_basis/module_nao/numerical_radial.h index f94f5a88b1..473a9f831b 100644 --- a/source/module_basis/module_nao/numerical_radial.h +++ b/source/module_basis/module_nao/numerical_radial.h @@ -1,12 +1,12 @@ #ifndef NUMERICAL_RADIAL_H_ #define NUMERICAL_RADIAL_H_ +#include "module_basis/module_ao/ORB_atomic_lm.h" +#include "source_base/spherical_bessel_transformer.h" + #include -#include #include - -#include "module_base/spherical_bessel_transformer.h" -#include "module_basis/module_ao/ORB_atomic_lm.h" +#include /** * @brief A class that represents a numerical radial function. @@ -36,7 +36,7 @@ * double dr = 0.01; * double* grid = new double[sz]; * for (int ir = 0; ir != sz; ++ir) { - * grid[ir] = ir * dr; + * grid[ir] = ir * dr; * f[ir] = std::exp(-grid[ir] * grid[ir]); * } * // grid does not necessarily have to be uniform; it just @@ -63,7 +63,7 @@ */ class NumericalRadial { -public: + public: NumericalRadial() = default; NumericalRadial(NumericalRadial const&); ///< Deep-copy grid & values @@ -98,8 +98,7 @@ class NumericalRadial const int izeta = 0, const std::string symbol = "", const int itype = 0, - const bool init_sbt = true - ); + const bool init_sbt = true); /** * @brief Overwrites the content of a Numerical_Orbital_Lm object with the current object. @@ -109,13 +108,13 @@ class NumericalRadial * use the k grid of NumericalRadial (which is FFT-compliant with r grid) to initialize * the k grid of Numerical_Orbital_Lm. */ - void to_numerical_orbital_lm(Numerical_Orbital_Lm& orbital_lm, + void to_numerical_orbital_lm(Numerical_Orbital_Lm& orbital_lm, const int nk_legacy = 4005, // equivalent to lcao_ecut = 1600 const double lcao_dk = 0.01) const; - /** + /** * @brief Sets a SphericalBesselTransformer. - * + * * By default the class uses an internal SphericalBesselTransformer, but one can optionally * use a shared one. This could be beneficial when there are a lot of NumericalRadial objects * whose grids have the same size. @@ -182,10 +181,7 @@ class NumericalRadial * * @note This function does not check the index bound; use with care! */ - void set_value(const bool for_r_space, - const double* const value, - const int p - ); + void set_value(const bool for_r_space, const double* const value, const int p); /// Removes the grid & values in r or k space. void wipe(const bool r_space = true, const bool k_space = true); @@ -262,42 +258,108 @@ class NumericalRadial * @name Getters */ ///@{ - std::string const& symbol() const { return symbol_; } - int itype() const { return itype_; } - int izeta() const { return izeta_; } - int l() const { return l_; } - int nr() const { return nr_; } // paired with rmax(), not rcut! - int nk() const { return nk_; } - double rcut() const { return rgrid_[std::min(ircut_, nr_-1)]; } ///< padded zeros ignored - double kcut() const { return kgrid_[std::min(ikcut_, nk_-1)]; } - double rmax() const { return rgrid_[nr_-1]; } ///< padded zeros considered - double kmax() const { return kgrid_[nk_-1]; } - const double* rgrid() const { return rgrid_; } - const double* kgrid() const { return kgrid_; } - const double* rvalue() const { return rvalue_; } - const double* kvalue() const { return kvalue_; } - double pr() const { return pr_; } - double pk() const { return pk_; } - bool is_fft_compliant() const { return is_fft_compliant_; } - ModuleBase::SphericalBesselTransformer sbt() const { return sbt_; } + std::string const& symbol() const + { + return symbol_; + } + int itype() const + { + return itype_; + } + int izeta() const + { + return izeta_; + } + int l() const + { + return l_; + } + int nr() const + { + return nr_; + } // paired with rmax(), not rcut! + int nk() const + { + return nk_; + } + double rcut() const + { + return rgrid_[std::min(ircut_, nr_ - 1)]; + } ///< padded zeros ignored + double kcut() const + { + return kgrid_[std::min(ikcut_, nk_ - 1)]; + } + double rmax() const + { + return rgrid_[nr_ - 1]; + } ///< padded zeros considered + double kmax() const + { + return kgrid_[nk_ - 1]; + } + const double* rgrid() const + { + return rgrid_; + } + const double* kgrid() const + { + return kgrid_; + } + const double* rvalue() const + { + return rvalue_; + } + const double* kvalue() const + { + return kvalue_; + } + double pr() const + { + return pr_; + } + double pk() const + { + return pk_; + } + bool is_fft_compliant() const + { + return is_fft_compliant_; + } + ModuleBase::SphericalBesselTransformer sbt() const + { + return sbt_; + } - double rgrid(int ir) const { return rgrid_[ir]; } - double kgrid(int ik) const { return kgrid_[ik]; } - double rvalue(int ir) const { return rvalue_[ir]; } - double kvalue(int ik) const { return kvalue_[ik]; } + double rgrid(int ir) const + { + return rgrid_[ir]; + } + double kgrid(int ik) const + { + return kgrid_[ik]; + } + double rvalue(int ir) const + { + return rvalue_[ir]; + } + double kvalue(int ik) const + { + return kvalue_[ik]; + } ///@} -private: - std::string symbol_ = ""; ///< chemical symbol - int itype_ = 0; ///< element index in calculation - int l_ = -1; ///< angular momentum - int izeta_ = 0; ///< further index for NumericalRadial objects with the same itype_and l_ + private: + std::string symbol_ = ""; ///< chemical symbol + int itype_ = 0; ///< element index in calculation + int l_ = -1; ///< angular momentum + int izeta_ = 0; ///< further index for NumericalRadial objects with the same itype_and l_ - int nr_ = 0; ///< number of r-space grid points - int nk_ = 0; ///< number of k-space grid points + int nr_ = 0; ///< number of r-space grid points + int nk_ = 0; ///< number of k-space grid points - double* rgrid_ = nullptr; ///< r-space grid - double* kgrid_ = nullptr; ///< k-space grid + double* rgrid_ = nullptr; ///< r-space grid + double* kgrid_ = nullptr; ///< k-space grid /** * @brief Index of the first trailing zero. @@ -307,7 +369,7 @@ class NumericalRadial * variables keep track of the actual cutoff radius. Specifically, * if there are no trailing zeros in rvalues_, then ircut_ = nr_; * if there are trailing zeros, then ircut_ is the index of the first - * trailing zero. For example, + * trailing zero. For example, * rvalues_ = {1, 2, 3, 0, 0, 0} -> ircut_ = 3 * rvalues_ = {1, 2, 3, 4, 5, 6} -> ircut_ = 6 * rvalues_ = {0, 0, 0, 0, 0, 0} -> ircut_ = 0 @@ -315,8 +377,8 @@ class NumericalRadial int ircut_ = 0; int ikcut_ = 0; - double* rvalue_ = nullptr; ///< r-space value - double* kvalue_ = nullptr; ///< k-space value + double* rvalue_ = nullptr; ///< r-space value + double* kvalue_ = nullptr; ///< k-space value /** * @brief A flag that tells whether the r & k grids are FFT-compliant. @@ -395,8 +457,7 @@ class NumericalRadial const double* const rgrid, const int nk, const double* const kgrid, - const double tol = 1e-15 - ); + const double tol = 1e-15); }; #endif diff --git a/source/module_basis/module_nao/pswfc_radials.cpp b/source/module_basis/module_nao/pswfc_radials.cpp index b871025029..d8cef912eb 100644 --- a/source/module_basis/module_nao/pswfc_radials.cpp +++ b/source/module_basis/module_nao/pswfc_radials.cpp @@ -1,13 +1,13 @@ #include "module_basis/module_nao/pswfc_radials.h" -#include "module_base/math_integral.h" -#include "module_base/tool_quit.h" +#include "source_base/math_integral.h" +#include "source_base/tool_quit.h" #include #include #ifdef __MPI -#include "module_base/parallel_common.h" +#include "source_base/parallel_common.h" #endif PswfcRadials& PswfcRadials::operator=(const PswfcRadials& rhs) diff --git a/source/module_basis/module_nao/radial_collection.cpp b/source/module_basis/module_nao/radial_collection.cpp index 10df8a6e5c..e2ccf4b713 100644 --- a/source/module_basis/module_nao/radial_collection.cpp +++ b/source/module_basis/module_nao/radial_collection.cpp @@ -1,26 +1,20 @@ #include "module_basis/module_nao/radial_collection.h" -#include -#include "module_base/spherical_bessel_transformer.h" #include "module_basis/module_nao/atomic_radials.h" #include "module_basis/module_nao/beta_radials.h" -#include "module_basis/module_nao/sphbes_radials.h" - -#include "module_base/parallel_common.h" -#include "module_base/tool_quit.h" -#include "module_base/global_variable.h" #include "module_basis/module_nao/hydrogen_radials.h" #include "module_basis/module_nao/pswfc_radials.h" +#include "module_basis/module_nao/sphbes_radials.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_common.h" +#include "source_base/spherical_bessel_transformer.h" +#include "source_base/tool_quit.h" -RadialCollection::RadialCollection(const RadialCollection& other) : - ntype_(other.ntype_), - lmax_(other.lmax_), - nchi_(other.nchi_), - nzeta_max_(other.nzeta_max_), - rcut_max_(other.rcut_max_), - radset_(nullptr), - iter_(nullptr), - nl_(nullptr) +#include + +RadialCollection::RadialCollection(const RadialCollection& other) + : ntype_(other.ntype_), lmax_(other.lmax_), nchi_(other.nchi_), nzeta_max_(other.nzeta_max_), + rcut_max_(other.rcut_max_), radset_(nullptr), iter_(nullptr), nl_(nullptr) { if (ntype_ == 0) { @@ -157,7 +151,7 @@ void RadialCollection::build(const RadialCollection* nls, const double radius) { cleanup(); this->ntype_ = nls->ntype(); - this->rcut_max_ = radius>0.0?radius:nls->rcut_max(); + this->rcut_max_ = radius > 0.0 ? radius : nls->rcut_max(); this->radset_ = new RadialSet*[ntype_]; this->lmax_ = nls->lmax(); this->nchi_ = nls->nchi(); @@ -199,15 +193,15 @@ void RadialCollection::build(const int nfile, const std::string* const file, con for (int itype = 0; itype < ntype_; ++itype) { - switch(file_type[itype]) + switch (file_type[itype]) { - case 'o': // orbital file + case 'o': // orbital file radset_[itype] = new AtomicRadials; break; - case 'c': // coefficient file + case 'c': // coefficient file radset_[itype] = new SphbesRadials; break; - default: // not supposed to happend + default: // not supposed to happend ModuleBase::WARNING_QUIT("RadialCollection::build", "Unrecognized file: " + file[itype]); } radset_[itype]->build(file[itype], itype); @@ -226,10 +220,10 @@ void RadialCollection::build(const int nfile, const std::string* const file, con set_rcut_max(); } -void RadialCollection::build(const int ntype, - const double* const charges, +void RadialCollection::build(const int ntype, + const double* const charges, const bool with_slater_screening, - const int* const nmax, + const int* const nmax, const std::string* symbols, const double conv_thr, const std::string* strategies, @@ -242,11 +236,11 @@ void RadialCollection::build(const int ntype, for (int itype = 0; itype < ntype_; ++itype) { radset_[itype] = new HydrogenRadials; - radset_[itype]->build(itype, - charges[itype], + radset_[itype]->build(itype, + charges[itype], with_slater_screening, - nmax[itype], - 10.0, // rcut should be determined automatically, in principle... + nmax[itype], + 10.0, // rcut should be determined automatically, in principle... 0.01, conv_thr, rank, diff --git a/source/module_basis/module_nao/radial_set.cpp b/source/module_basis/module_nao/radial_set.cpp index 3b00ba679a..96c66abb4e 100644 --- a/source/module_basis/module_nao/radial_set.cpp +++ b/source/module_basis/module_nao/radial_set.cpp @@ -1,11 +1,11 @@ #include "module_basis/module_nao/radial_set.h" +#include "source_base/spherical_bessel_transformer.h" + #include #include -#include #include - -#include "module_base/spherical_bessel_transformer.h" +#include // FIXME: should update with pyabacus // #include "module_io/orb_io.h" @@ -17,16 +17,9 @@ RadialSet::~RadialSet() delete[] index_map_; } -RadialSet::RadialSet(const RadialSet& other) : - symbol_(other.symbol_), - itype_(other.itype_), - lmax_(other.lmax_), - rcut_max_(other.rcut_max_), - nzeta_(nullptr), - nzeta_max_(other.nzeta_max_), - nchi_(other.nchi_), - chi_(nullptr), - index_map_(nullptr) +RadialSet::RadialSet(const RadialSet& other) + : symbol_(other.symbol_), itype_(other.itype_), lmax_(other.lmax_), rcut_max_(other.rcut_max_), nzeta_(nullptr), + nzeta_max_(other.nzeta_max_), nchi_(other.nchi_), chi_(nullptr), index_map_(nullptr) { if (nchi_ == 0) { @@ -202,9 +195,9 @@ void RadialSet::write_abacus_orb(const std::string& file_name, const int rank) c file_to.open(file_name, std::ios::out); std::vector sublayers = {"S", "P", "D", "F", "G", "H", "I", "J", "K"}; - if(file_to.good()) + if (file_to.good()) { - for(int i = 0; i < 75; ++i) + for (int i = 0; i < 75; ++i) { file_to << "-"; } @@ -213,40 +206,39 @@ void RadialSet::write_abacus_orb(const std::string& file_name, const int rank) c file_to << std::left << std::setw(28) << "Element" << symbol_ << std::endl; file_to << std::left << std::setw(28) << "Energy Cutoff(Ry)" << std::to_string(int(100.0)) << std::endl; // rcut .1f, not scientific - file_to << std::left << std::setw(28) << "Radius Cutoff(a.u.)" - << std::fixed << std::setprecision(1) << rcut_max_ << std::endl; + file_to << std::left << std::setw(28) << "Radius Cutoff(a.u.)" << std::fixed << std::setprecision(1) + << rcut_max_ << std::endl; file_to << std::left << std::setw(28) << "Lmax" << lmax_ << std::endl; - for(int l = 0; l <= lmax_; ++l) + for (int l = 0; l <= lmax_; ++l) { std::string title = "Number of " + sublayers[l] + "orbital-->"; file_to << std::left << std::setw(28) << title << nzeta_[l] << std::endl; } - for(int i = 0; i < 75; ++i) + for (int i = 0; i < 75; ++i) { file_to << "-"; } file_to << std::endl; file_to << "SUMMARY END\n\n"; - file_to << std::left << std::setw(28) << "Mesh" << std::setprecision(0) << int(rcut_max_/0.01) + 1 << std::endl; + file_to << std::left << std::setw(28) << "Mesh" << std::setprecision(0) << int(rcut_max_ / 0.01) + 1 + << std::endl; file_to << std::left << std::setw(28) << "dr" << std::setprecision(2) << 0.01 << std::endl; - for(int l = 0; l <= lmax_; l++) + for (int l = 0; l <= lmax_; l++) { - for(int izeta = 0; izeta < nzeta_[l]; izeta++) + for (int izeta = 0; izeta < nzeta_[l]; izeta++) { - file_to << std::right << std::setw(20) << "Type" - << std::right << std::setw(20) << "L" - << std::right << std::setw(20) << "N" << std::endl; - file_to << std::right << std::setw(20) << std::to_string(0) - << std::right << std::setw(20) << std::to_string(l) - << std::right << std::setw(20) << std::to_string(izeta); - for(int i = 0; i < int(rcut_max_/0.01) + 1; i++) + file_to << std::right << std::setw(20) << "Type" << std::right << std::setw(20) << "L" << std::right + << std::setw(20) << "N" << std::endl; + file_to << std::right << std::setw(20) << std::to_string(0) << std::right << std::setw(20) + << std::to_string(l) << std::right << std::setw(20) << std::to_string(izeta); + for (int i = 0; i < int(rcut_max_ / 0.01) + 1; i++) { - if(i % 4 == 0) + if (i % 4 == 0) { file_to << std::endl; } - file_to << std::left << std::setw(22) << std::setprecision(14) << std::scientific + file_to << std::left << std::setw(22) << std::setprecision(14) << std::scientific << chi_[index(l, izeta)].rvalue()[i]; } file_to << std::endl; diff --git a/source/module_basis/module_nao/radial_set.h b/source/module_basis/module_nao/radial_set.h index b102a30951..4f3f77a0ff 100644 --- a/source/module_basis/module_nao/radial_set.h +++ b/source/module_basis/module_nao/radial_set.h @@ -1,16 +1,16 @@ #ifndef RADIAL_SET_H_ #define RADIAL_SET_H_ +#include "module_basis/module_ao/ORB_atomic.h" +#include "module_basis/module_ao/ORB_nonlocal.h" +#include "module_basis/module_nao/numerical_radial.h" +#include "source_base/spherical_bessel_transformer.h" + #include #include #include #include -#include "module_base/spherical_bessel_transformer.h" -#include "module_basis/module_nao/numerical_radial.h" -#include "module_basis/module_ao/ORB_nonlocal.h" -#include "module_basis/module_ao/ORB_atomic.h" - /** * @brief An abstract class representing the set of all numerical radial * functions (of the same kind) from a single element. @@ -57,7 +57,9 @@ class RadialSet const int = 0, ///< the element index in calculation std::ofstream* const = nullptr, ///< output file stream for logging const int = 0 ///< MPI rank - ) {} + ) + { + } /** * @brief Builds from a Numerical_Nonlocal object. @@ -68,7 +70,9 @@ class RadialSet virtual void build(const Numerical_Nonlocal&, ///< Numerical_Nonlocal object const int = 0, ///< the element index in calculation std::ofstream* const = nullptr ///< output file stream for logging - ) {} + ) + { + } /** * @brief Builds from hydrogen-like radial functions. @@ -76,18 +80,21 @@ class RadialSet * Currently only HydrogenRadials objects are supposed to used this * interface. */ - virtual void build(const int = 0, ///< the element index in calculation - const double = 1.0, ///< nuclear charge - const bool = false, ///< whether to include Slater screening - const int = 0, ///< maximal principal quantum number or electrons - const double = 10.0, ///< maximal radius - const double = 0.01, ///< radial grid step - const double = 1e-6, ///< convergence threshold for norm of pseudowavefunction - const int = 0, ///< MPI rank - const std::string = "", ///< the name of the element - const std::string = "minimal-valence", ///< the strategy to generate whole set of radial functions - std::ofstream* const = nullptr ///< output file stream for logging - ) {} + virtual void build(const int = 0, ///< the element index in calculation + const double = 1.0, ///< nuclear charge + const bool = false, ///< whether to include Slater screening + const int = 0, ///< maximal principal quantum number or electrons + const double = 10.0, ///< maximal radius + const double = 0.01, ///< radial grid step + const double = 1e-6, ///< convergence threshold for norm of pseudowavefunction + const int = 0, ///< MPI rank + const std::string = "", ///< the name of the element + const std::string + = "minimal-valence", ///< the strategy to generate whole set of radial functions + std::ofstream* const = nullptr ///< output file stream for logging + ) + { + } /** * @brief Builds from pseudopotential file @@ -101,7 +108,9 @@ class RadialSet const double, ///< convergence threshold of norm of pseudowavefunction std::ofstream* const = nullptr, ///< output file stream for logging const int = 0 ///< MPI rank - ) {} + ) + { + } /** * @brief Builds with the truncated spherical Bessel functions. @@ -110,29 +119,29 @@ class RadialSet * spherical Bessel functions. * See the derived class "SphbesRadials" for the implementation. */ - virtual void build(const int, ///< maximum angular momentum - const int, ///< number of spherical Bessel functions - const double, ///< cutoff radius - const double = 0.1, ///< smoothing parameter - const double = 0.01, ///< radial grid spacing - const int = 0, ///< element index - std::ofstream* = nullptr, ///< output file stream for logging - const int = 0 ///< MPI rank - ) {}; + virtual void build(const int, ///< maximum angular momentum + const int, ///< number of spherical Bessel functions + const double, ///< cutoff radius + const double = 0.1, ///< smoothing parameter + const double = 0.01, ///< radial grid spacing + const int = 0, ///< element index + std::ofstream* = nullptr, ///< output file stream for logging + const int = 0 ///< MPI rank + ){}; /** * @brief write any RadialSet object to a file in ABACUS numerical atomic orbital format. - * + * * This function will write any RadialSet object to file in ABACUS numerical atomic orbital format. - * However its counterparts, - * `read_abacus_orb()` is in AtomicRadials, + * However its counterparts, + * `read_abacus_orb()` is in AtomicRadials, * `read_beta_upf100()` and `read_beta_upf201()` are in BetaRadials, - * `read_upf_pswfc()` is in PswfcRadials, - * `read_coeff()` is in SphbesRadials, + * `read_upf_pswfc()` is in PswfcRadials, + * `read_coeff()` is in SphbesRadials, * due to read-in procedures always vary from one to another. */ - void write_abacus_orb(const std::string&, ///< file name - const int = 0) const; ///< MPI rank + void write_abacus_orb(const std::string&, ///< file name + const int = 0) const; ///< MPI rank ///@} @@ -143,25 +152,51 @@ class RadialSet */ virtual void to_numerical_orbital(Numerical_Orbital&, const int nk_legacy = 4005, // equivalent to lcao_ecut = 1600 - const double lcao_dk = 0.01 - ) const; + const double lcao_dk = 0.01) const; /** * @name Getters */ ///@{ - const std::string& symbol() const { return symbol_; } - int itype() const { return itype_; } - int lmax() const { return lmax_; } - double rcut_max() const { return rcut_max_; } - - int nzeta(const int l) const { return (l >= 0 && l <= lmax_) ? nzeta_[l] : 0; } - int nzeta_max() const { return nzeta_max_; } - int nchi() const { return nchi_; } + const std::string& symbol() const + { + return symbol_; + } + int itype() const + { + return itype_; + } + int lmax() const + { + return lmax_; + } + double rcut_max() const + { + return rcut_max_; + } + + int nzeta(const int l) const + { + return (l >= 0 && l <= lmax_) ? nzeta_[l] : 0; + } + int nzeta_max() const + { + return nzeta_max_; + } + int nchi() const + { + return nchi_; + } const NumericalRadial& chi(const int l, const int izeta); - const NumericalRadial* cbegin() const { return chi_; } - const NumericalRadial* cend() const { return chi_ + nchi_; } + const NumericalRadial* cbegin() const + { + return chi_; + } + const NumericalRadial* cend() const + { + return chi_ + nchi_; + } ///@} /** @@ -183,14 +218,14 @@ class RadialSet ///@} protected: - std::string symbol_ = ""; ///< usually the chemical symbol - int itype_ = 0; ///< usually the index for element in calculation - int lmax_ = -1; ///< maximum angular momentum among all NumericalRadial objects - double rcut_max_ = 0.0; ///< maximum rcut (NOT rmax!) among all NumericalRadial objects - - int* nzeta_ = nullptr; ///< number of NumericalRadial objects for each angular momentum - int nzeta_max_ = 0; ///< maximum number of NumericalRadial objects among each angular momentum - int nchi_ = 0; ///< total number of NumericalRadial objects + std::string symbol_ = ""; ///< usually the chemical symbol + int itype_ = 0; ///< usually the index for element in calculation + int lmax_ = -1; ///< maximum angular momentum among all NumericalRadial objects + double rcut_max_ = 0.0; ///< maximum rcut (NOT rmax!) among all NumericalRadial objects + + int* nzeta_ = nullptr; ///< number of NumericalRadial objects for each angular momentum + int nzeta_max_ = 0; ///< maximum number of NumericalRadial objects among each angular momentum + int nchi_ = 0; ///< total number of NumericalRadial objects NumericalRadial* chi_ = nullptr; ///< array of NumericalRadial objects diff --git a/source/module_basis/module_nao/real_gaunt_table.cpp b/source/module_basis/module_nao/real_gaunt_table.cpp index 03f49a079a..cc1f86b634 100644 --- a/source/module_basis/module_nao/real_gaunt_table.cpp +++ b/source/module_basis/module_nao/real_gaunt_table.cpp @@ -1,15 +1,15 @@ #include "module_basis/module_nao/real_gaunt_table.h" +#include "source_base/constants.h" + #include #include #include -#include "module_base/constants.h" - void RealGauntTable::build(const int lmax) { #ifdef __DEBUG - assert( lmax >= 0 ); + assert(lmax >= 0); #endif // do nothing if lmax < lmax_ -- or shall we shrink the map & tensor? @@ -35,7 +35,7 @@ void RealGauntTable::build(const int lmax) for (int m2 = -l2; m2 <= m2_max; ++m2) { int m1 = -m2 - m3; - gaunt_table_[ std::array({l1, l2, l3, m1, m2, m3}) ] = gaunt(l1, l2, l3, m1, m2, m3); + gaunt_table_[std::array({l1, l2, l3, m1, m2, m3})] = gaunt(l1, l2, l3, m1, m2, m3); } } } @@ -47,7 +47,7 @@ void RealGauntTable::build(const int lmax) // build the real Gaunt table from tabulated standard Gaunt coefficients // this real Gaunt table is supposed to be used in two-center integrals, so the maximum // l of the third dimension is twice as large as the maximum l of the first two dimensions - real_gaunt_table_.resize({ (lmax + 1) * (lmax + 1), (lmax + 1) * (lmax + 1), (2 * lmax + 1) * (2 * lmax + 1) }); + real_gaunt_table_.resize({(lmax + 1) * (lmax + 1), (lmax + 1) * (lmax + 1), (2 * lmax + 1) * (2 * lmax + 1)}); real_gaunt_table_.zero(); for (int l1 = 0; l1 <= lmax; ++l1) @@ -75,26 +75,36 @@ void RealGauntTable::build(const int lmax) } } -const double& RealGauntTable::operator()(const int l1, const int l2, const int l3, const int m1, const int m2, const int m3) const +const double& RealGauntTable::operator()(const int l1, + const int l2, + const int l3, + const int m1, + const int m2, + const int m3) const { #ifdef __DEBUG - assert( is_valid_lm(l1, l2, l3, m1, m2, m3) ); - assert( l1 <= lmax_ && l2 <= lmax_ && l3 <= 2 * lmax_ ); + assert(is_valid_lm(l1, l2, l3, m1, m2, m3)); + assert(l1 <= lmax_ && l2 <= lmax_ && l3 <= 2 * lmax_); #endif return real_gaunt_table_.get_value(index_map(l1, m1), index_map(l2, m2), index_map(l3, m3)); } -double RealGauntTable::real_gaunt_lookup(const int l1, const int l2, const int l3, const int m1, const int m2, const int m3) const +double RealGauntTable::real_gaunt_lookup(const int l1, + const int l2, + const int l3, + const int m1, + const int m2, + const int m3) const { // This function calculates and returns the Gaunt coefficients of real spherical harmonics // from tabulated standard Gaunt coefficients. #ifdef __DEBUG - assert( is_valid_lm(l1, l2, l3, m1, m2, m3) ); - assert( l1 <= lmax_ && l2 <= lmax_ && l3 <= 2 * lmax_ ); + assert(is_valid_lm(l1, l2, l3, m1, m2, m3)); + assert(l1 <= lmax_ && l2 <= lmax_ && l3 <= 2 * lmax_); #endif - if ( !gaunt_select_l(l1, l2, l3) || !real_gaunt_select_m(m1, m2, m3) ) + if (!gaunt_select_l(l1, l2, l3) || !real_gaunt_select_m(m1, m2, m3)) { return 0.0; } @@ -102,12 +112,12 @@ double RealGauntTable::real_gaunt_lookup(const int l1, const int l2, const int l std::array m = {std::abs(m1), std::abs(m2), std::abs(m3)}; int& m_absmax = *std::max_element(m.begin(), m.end()); - if ( m1 == 0 || m2 == 0 || m3 == 0 ) + if (m1 == 0 || m2 == 0 || m3 == 0) { m_absmax = -m_absmax; return minus_1_pow(m_absmax) * gaunt_lookup(l1, l2, l3, m[0], m[1], m[2]); } - else if ( m1 + m2 + m3 == 0 ) + else if (m1 + m2 + m3 == 0) { return ModuleBase::SQRT2 / 2.0 * minus_1_pow(m_absmax + 1) * gaunt_lookup(l1, l2, l3, m1, m2, m3); } @@ -123,17 +133,17 @@ double RealGauntTable::gaunt(const int l1, const int l2, const int l3, const int // This function computes the Gaunt coefficients from the Wigner-3j expression #ifdef __DEBUG - assert( is_valid_lm(l1, l2, l3, m1, m2, m3) ); + assert(is_valid_lm(l1, l2, l3, m1, m2, m3)); #endif - if ( !gaunt_select_l(l1, l2, l3) || !gaunt_select_m(m1, m2, m3) ) + if (!gaunt_select_l(l1, l2, l3) || !gaunt_select_m(m1, m2, m3)) { return 0.0; } int g = (l1 + l2 + l3) / 2; - double pref = std::sqrt( (2 * l1 + 1) * (2 * l2 + 1) * (2 * l3 + 1) / ModuleBase::FOUR_PI); - double tri = std::sqrt( factorial(l1 + l2 - l3) * factorial(l2 + l3 - l1) * factorial(l3 + l1 - l2) - / factorial(l1 + l2 + l3 + 1) ); + double pref = std::sqrt((2 * l1 + 1) * (2 * l2 + 1) * (2 * l3 + 1) / ModuleBase::FOUR_PI); + double tri = std::sqrt(factorial(l1 + l2 - l3) * factorial(l2 + l3 - l1) * factorial(l3 + l1 - l2) + / factorial(l1 + l2 + l3 + 1)); // wigner3j(l1,l2,l3,0,0,0) double wigner1 = minus_1_pow(g) * tri * factorial(g) / factorial(g - l1) / factorial(g - l2) / factorial(g - l3); @@ -149,18 +159,18 @@ double RealGauntTable::gaunt(const int l1, const int l2, const int l3, const int for (int k = kmin; k <= kmax; ++k) { wigner2 += minus_1_pow(k) / factorial(k) / factorial(l1 - m1 - k) / factorial(l2 + m2 - k) - / factorial(l3 - l2 + m1 + k) / factorial(l3 - l1 - m2 + k) / factorial(l1 + l2 - l3 - k); + / factorial(l3 - l2 + m1 + k) / factorial(l3 - l1 - m2 + k) / factorial(l1 + l2 - l3 - k); } - wigner2 *= tri * minus_1_pow(l1 - l2 - m3) * std::sqrt( - factorial(l1 + m1) * factorial(l1 - m1) * - factorial(l2 + m2) * factorial(l2 - m2) * - factorial(l3 + m3) * factorial(l3 - m3) ); + wigner2 *= tri * minus_1_pow(l1 - l2 - m3) + * std::sqrt(factorial(l1 + m1) * factorial(l1 - m1) * factorial(l2 + m2) * factorial(l2 - m2) + * factorial(l3 + m3) * factorial(l3 - m3)); return pref * wigner1 * wigner2; } -bool RealGauntTable::is_valid_lm(const int l1, const int l2, const int l3, const int m1, const int m2, const int m3) const +bool RealGauntTable::is_valid_lm(const int l1, const int l2, const int l3, const int m1, const int m2, const int m3) + const { return std::abs(m1) <= l1 && std::abs(m2) <= l2 && std::abs(m3) <= l3; } @@ -172,35 +182,40 @@ bool RealGauntTable::gaunt_select_l(const int l1, const int l2, const int l3) co bool RealGauntTable::real_gaunt_select_m(const int m1, const int m2, const int m3) const { - return ( ( (m1 < 0) + (m2 < 0) + (m3 < 0) ) % 2 == 0 ) && - ( std::abs(m1) + std::abs(m2) == std::abs(m3) || - std::abs(m2) + std::abs(m3) == std::abs(m1) || - std::abs(m3) + std::abs(m1) == std::abs(m2) ); + return (((m1 < 0) + (m2 < 0) + (m3 < 0)) % 2 == 0) + && (std::abs(m1) + std::abs(m2) == std::abs(m3) || std::abs(m2) + std::abs(m3) == std::abs(m1) + || std::abs(m3) + std::abs(m1) == std::abs(m2)); } -double RealGauntTable::gaunt_lookup(const int l1, const int l2, const int l3, const int m1, const int m2, const int m3) const +double RealGauntTable::gaunt_lookup(const int l1, const int l2, const int l3, const int m1, const int m2, const int m3) + const { #ifdef __DEBUG - assert( is_valid_lm(l1, l2, l3, m1, m2, m3) ); - assert( l1 <= 2 * lmax_ && l2 <= 2 * lmax_ && l3 <= 2 * lmax_ ); + assert(is_valid_lm(l1, l2, l3, m1, m2, m3)); + assert(l1 <= 2 * lmax_ && l2 <= 2 * lmax_ && l3 <= 2 * lmax_); #endif - return ( gaunt_select_l(l1, l2, l3) && gaunt_select_m(m1, m2, m3) ) - ? gaunt_table_.at( gaunt_key(l1, l2, l3, m1, m2, m3) ) - : 0.0; + return (gaunt_select_l(l1, l2, l3) && gaunt_select_m(m1, m2, m3)) + ? gaunt_table_.at(gaunt_key(l1, l2, l3, m1, m2, m3)) + : 0.0; } -std::array RealGauntTable::gaunt_key(const int l1, const int l2, const int l3, const int m1, const int m2, const int m3) const +std::array RealGauntTable::gaunt_key(const int l1, + const int l2, + const int l3, + const int m1, + const int m2, + const int m3) const { #ifdef __DEBUG - assert( is_valid_lm(l1, l2, l3, m1, m2, m3) ); + assert(is_valid_lm(l1, l2, l3, m1, m2, m3)); #endif std::array key{l1, l2, l3, m1, m2, m3}; arrange(key[0], key[1], key[3], key[4]); arrange(key[0], key[2], key[3], key[5]); arrange(key[1], key[2], key[4], key[5]); - if ( key[5] < 0 ) + if (key[5] < 0) { key[3] = -key[3]; key[4] = -key[4]; @@ -211,7 +226,7 @@ std::array RealGauntTable::gaunt_key(const int l1, const int l2, const i void RealGauntTable::arrange(int& l1, int& l2, int& m1, int& m2) const { - if ( l1 < l2 ) + if (l1 < l2) { std::swap(l1, l2); std::swap(m1, m2); @@ -221,10 +236,10 @@ void RealGauntTable::arrange(int& l1, int& l2, int& m1, int& m2) const double RealGauntTable::factorial(const int n) const { #ifdef __DEBUG - assert( n >= 0 ); + assert(n >= 0); #endif double val = 1.0; - for(int i = 2; i <= n; i++) + for (int i = 2; i <= n; i++) { val *= static_cast(i); } @@ -234,7 +249,7 @@ double RealGauntTable::factorial(const int n) const int RealGauntTable::index_map(int l, int m) const { #ifdef __DEBUG - assert( std::abs(m) <= l ); + assert(std::abs(m) <= l); #endif return l * l + l + m; } diff --git a/source/module_basis/module_nao/sphbes_radials.cpp b/source/module_basis/module_nao/sphbes_radials.cpp index 829b446031..f71fb064c6 100644 --- a/source/module_basis/module_nao/sphbes_radials.cpp +++ b/source/module_basis/module_nao/sphbes_radials.cpp @@ -1,8 +1,8 @@ #include "module_basis/module_nao/sphbes_radials.h" -#include "module_base/math_sphbes.h" -#include "module_base/parallel_common.h" -#include "module_base/tool_quit.h" +#include "source_base/math_sphbes.h" +#include "source_base/parallel_common.h" +#include "source_base/tool_quit.h" #include #include diff --git a/source/module_basis/module_nao/test/atomic_radials_test.cpp b/source/module_basis/module_nao/test/atomic_radials_test.cpp index f1a64c2e07..57a964c5f4 100644 --- a/source/module_basis/module_nao/test/atomic_radials_test.cpp +++ b/source/module_basis/module_nao/test/atomic_radials_test.cpp @@ -1,15 +1,16 @@ #include "module_basis/module_nao/atomic_radials.h" +#include "source_base/spherical_bessel_transformer.h" + #include "gtest/gtest.h" -#include "module_base/spherical_bessel_transformer.h" #ifdef __MPI #include #endif -#include "module_base/constants.h" -#include "module_base/global_variable.h" #include "module_basis/module_ao/ORB_atomic.h" +#include "source_base/constants.h" +#include "source_base/global_variable.h" using ModuleBase::SphericalBesselTransformer; @@ -43,9 +44,9 @@ class AtomicRadialsTest : public ::testing::Test void SetUp(); void TearDown(){}; - AtomicRadials Ti_radials; //!< object under test + AtomicRadials Ti_radials; //!< object under test std::string file = "../../../../../tests/PP_ORB/Ti_gga_10au_100Ry_4s2p2d1f.orb"; //!< orbital file to read from - std::string log_file = "./test_files/atomic_radials.log"; //!< file for logging + std::string log_file = "./test_files/atomic_radials.log"; //!< file for logging double tol = 1e-12; //!< numerical tolerance for grid & values }; diff --git a/source/module_basis/module_nao/test/beta_radials_test.cpp b/source/module_basis/module_nao/test/beta_radials_test.cpp index d9378f28a0..a8319b4770 100644 --- a/source/module_basis/module_nao/test/beta_radials_test.cpp +++ b/source/module_basis/module_nao/test/beta_radials_test.cpp @@ -6,8 +6,8 @@ #include #endif -#include "module_base/constants.h" -#include "module_base/global_variable.h" +#include "source_base/constants.h" +#include "source_base/global_variable.h" /*********************************************************** * Unit test of class "BetaRadials" @@ -34,286 +34,289 @@ class BetaRadialsTest : public ::testing::Test { protected: void SetUp(); - void TearDown() {} + void TearDown() + { + } BetaRadials beta; //!< object under test - std::string dir = "../../../../../tests/PP_ORB/"; //!< directory with test files + std::string dir = "../../../../../tests/PP_ORB/"; //!< directory with test files std::string log_file = "./test_files/beta_radials.log"; //!< file for logging }; -void BetaRadialsTest::SetUp() { +void BetaRadialsTest::SetUp() +{ #ifdef __MPI MPI_Comm_rank(MPI_COMM_WORLD, &GlobalV::MY_RANK); #endif } -//TEST_F(BetaRadialsTest, ReadAndGet100) +// TEST_F(BetaRadialsTest, ReadAndGet100) //{ -// /* -// * Read beta projectors from a UPF file of old format -// * */ -// std::string file100 = "Zn.LDA.UPF"; //!< a UPF 1.0.0 file to read from -// beta.build(dir+file100, 314, nullptr, GlobalV::MY_RANK); -// -// EXPECT_EQ(beta.itype(), 314); -// EXPECT_EQ(beta.symbol(), "Zn"); -// EXPECT_EQ(beta.lmax(), 2); -// EXPECT_EQ(beta.nzeta(0), 0); -// EXPECT_EQ(beta.nzeta(1), 1); -// EXPECT_EQ(beta.nzeta(2), 1); -// EXPECT_EQ(beta.nzeta_max(), 1); -// EXPECT_EQ(beta.nchi(), 2); -// -// EXPECT_DOUBLE_EQ(beta.rcut_max(), 3.36331676102); -// -// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rgrid()[0] , 3.21829939971e-05); -// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rgrid()[4] , 3.39007851980e-05); -// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rgrid()[888], 3.31987661585e+00); -// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rgrid()[889], 3.36331676102e+00); -// -// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rgrid()[0] , 3.21829939971e-05); -// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rgrid()[4] , 3.39007851980e-05); -// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rgrid()[887], 3.27699753773e+00); -// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rgrid()[888], 3.31987661585e+00); -// -// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rvalue()[0] , -9.73759791529e-09); -// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rvalue()[4] , -1.08048430719e-08); -// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rvalue()[600], -5.66090228695e-02); -// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rvalue()[888], -1.89079314582e-11); -// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rvalue()[889], 1.99483148995e-12); -// -// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rvalue()[0] , -2.84316719619e-11); -// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rvalue()[4] , -3.32316831459e-11); -// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rvalue()[600], -3.87224488590e-01); -// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rvalue()[887], 3.31894955664e-11); -// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rvalue()[888], -3.22751710952e-12); -//} -// -//TEST_F(BetaRadialsTest, ReadAndGetVoid) { -// /* -// * This test reads a UPF file with no beta projectors. -// * The test is to check that the code does not crash. -// * */ -// std::string file0 = "H.pz-vbc.UPF"; //!< a UPF file with no beta projectors -// beta.build(dir+file0, 5, nullptr, GlobalV::MY_RANK); -// -// EXPECT_EQ(beta.nchi(), 0); -// EXPECT_EQ(beta.itype(), 5); -// EXPECT_EQ(beta.lmax(), -1); -// EXPECT_EQ(beta.symbol(), "H"); -//} -// -//TEST_F(BetaRadialsTest, ReadAndGet201) +// /* +// * Read beta projectors from a UPF file of old format +// * */ +// std::string file100 = "Zn.LDA.UPF"; //!< a UPF 1.0.0 file to read from +// beta.build(dir+file100, 314, nullptr, GlobalV::MY_RANK); +// +// EXPECT_EQ(beta.itype(), 314); +// EXPECT_EQ(beta.symbol(), "Zn"); +// EXPECT_EQ(beta.lmax(), 2); +// EXPECT_EQ(beta.nzeta(0), 0); +// EXPECT_EQ(beta.nzeta(1), 1); +// EXPECT_EQ(beta.nzeta(2), 1); +// EXPECT_EQ(beta.nzeta_max(), 1); +// EXPECT_EQ(beta.nchi(), 2); +// +// EXPECT_DOUBLE_EQ(beta.rcut_max(), 3.36331676102); +// +// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rgrid()[0] , 3.21829939971e-05); +// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rgrid()[4] , 3.39007851980e-05); +// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rgrid()[888], 3.31987661585e+00); +// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rgrid()[889], 3.36331676102e+00); +// +// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rgrid()[0] , 3.21829939971e-05); +// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rgrid()[4] , 3.39007851980e-05); +// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rgrid()[887], 3.27699753773e+00); +// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rgrid()[888], 3.31987661585e+00); +// +// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rvalue()[0] , -9.73759791529e-09); +// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rvalue()[4] , -1.08048430719e-08); +// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rvalue()[600], -5.66090228695e-02); +// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rvalue()[888], -1.89079314582e-11); +// EXPECT_DOUBLE_EQ(beta.chi(1, 0).ptr_rvalue()[889], 1.99483148995e-12); +// +// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rvalue()[0] , -2.84316719619e-11); +// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rvalue()[4] , -3.32316831459e-11); +// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rvalue()[600], -3.87224488590e-01); +// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rvalue()[887], 3.31894955664e-11); +// EXPECT_DOUBLE_EQ(beta.chi(2, 0).ptr_rvalue()[888], -3.22751710952e-12); +// } +// +// TEST_F(BetaRadialsTest, ReadAndGetVoid) { +// /* +// * This test reads a UPF file with no beta projectors. +// * The test is to check that the code does not crash. +// * */ +// std::string file0 = "H.pz-vbc.UPF"; //!< a UPF file with no beta projectors +// beta.build(dir+file0, 5, nullptr, GlobalV::MY_RANK); +// +// EXPECT_EQ(beta.nchi(), 0); +// EXPECT_EQ(beta.itype(), 5); +// EXPECT_EQ(beta.lmax(), -1); +// EXPECT_EQ(beta.symbol(), "H"); +// } +// +// TEST_F(BetaRadialsTest, ReadAndGet201) //{ -// /* -// * This test read beta projectors from a UPF file of 2.0.1 format -// * */ -// std::string file201 = "Pb_ONCV_PBE-1.0.upf"; //!< a UPF 2.0.1 file to read from -// beta.build(dir+file201, 999, nullptr, GlobalV::MY_RANK); -// -// EXPECT_EQ(beta.itype(), 999); -// EXPECT_EQ(beta.symbol(), "Pb"); -// EXPECT_EQ(beta.lmax(), 3); -// EXPECT_EQ(beta.nzeta(0), 2); -// EXPECT_EQ(beta.nzeta(1), 2); -// EXPECT_EQ(beta.nzeta(2), 2); -// EXPECT_EQ(beta.nzeta(3), 2); -// EXPECT_EQ(beta.nzeta_max(), 2); -// EXPECT_EQ(beta.nchi(), 8); -// -// // NOTE: neither "cutoff_radius_index" nor "cutoff_radius" is reliable! -// // the code reads all the values first and then reverse scan to determine the grid size -// EXPECT_DOUBLE_EQ(beta.rcut_max(), 3.68); -// -// EXPECT_EQ(beta.chi(0,0).rcut(), 3.64); -// EXPECT_EQ(beta.chi(0,0).nr(), 365); -// EXPECT_EQ(beta.chi(0,0).izeta(), 0); -// EXPECT_DOUBLE_EQ(beta.chi(0, 0).ptr_rgrid()[0] , 0.0000); -// EXPECT_DOUBLE_EQ(beta.chi(0, 0).ptr_rgrid()[8] , 0.0800); -// EXPECT_DOUBLE_EQ(beta.chi(0, 0).ptr_rgrid()[364], 3.6400); -// EXPECT_DOUBLE_EQ(beta.chi(0, 0).ptr_rvalue()[0] , 0.0000000000e+00); -// EXPECT_DOUBLE_EQ(beta.chi(0, 0).ptr_rvalue()[4] , 5.9689893417e-02); -// EXPECT_DOUBLE_EQ(beta.chi(0, 0).ptr_rvalue()[364], -4.5888625103e-07); -// -// EXPECT_EQ(beta.chi(3,1).rcut(), 3.68); -// EXPECT_EQ(beta.chi(3,1).nr(), 369); -// EXPECT_EQ(beta.chi(3,1).izeta(), 1); -// EXPECT_DOUBLE_EQ(beta.chi(3, 1).ptr_rgrid()[0] , 0.0000); -// EXPECT_DOUBLE_EQ(beta.chi(3, 1).ptr_rgrid()[8] , 0.0800); -// EXPECT_DOUBLE_EQ(beta.chi(3, 1).ptr_rgrid()[368], 3.6800); -// EXPECT_DOUBLE_EQ(beta.chi(3, 1).ptr_rvalue()[0] , 0.0000000000e+00); -// EXPECT_DOUBLE_EQ(beta.chi(3, 1).ptr_rvalue()[4] , 1.7908487484e-06); -// EXPECT_DOUBLE_EQ(beta.chi(3, 1).ptr_rvalue()[368], -7.0309158570e-06); -//} -// -//TEST_F(BetaRadialsTest, BatchSet) +// /* +// * This test read beta projectors from a UPF file of 2.0.1 format +// * */ +// std::string file201 = "Pb_ONCV_PBE-1.0.upf"; //!< a UPF 2.0.1 file to read from +// beta.build(dir+file201, 999, nullptr, GlobalV::MY_RANK); +// +// EXPECT_EQ(beta.itype(), 999); +// EXPECT_EQ(beta.symbol(), "Pb"); +// EXPECT_EQ(beta.lmax(), 3); +// EXPECT_EQ(beta.nzeta(0), 2); +// EXPECT_EQ(beta.nzeta(1), 2); +// EXPECT_EQ(beta.nzeta(2), 2); +// EXPECT_EQ(beta.nzeta(3), 2); +// EXPECT_EQ(beta.nzeta_max(), 2); +// EXPECT_EQ(beta.nchi(), 8); +// +// // NOTE: neither "cutoff_radius_index" nor "cutoff_radius" is reliable! +// // the code reads all the values first and then reverse scan to determine the grid size +// EXPECT_DOUBLE_EQ(beta.rcut_max(), 3.68); +// +// EXPECT_EQ(beta.chi(0,0).rcut(), 3.64); +// EXPECT_EQ(beta.chi(0,0).nr(), 365); +// EXPECT_EQ(beta.chi(0,0).izeta(), 0); +// EXPECT_DOUBLE_EQ(beta.chi(0, 0).ptr_rgrid()[0] , 0.0000); +// EXPECT_DOUBLE_EQ(beta.chi(0, 0).ptr_rgrid()[8] , 0.0800); +// EXPECT_DOUBLE_EQ(beta.chi(0, 0).ptr_rgrid()[364], 3.6400); +// EXPECT_DOUBLE_EQ(beta.chi(0, 0).ptr_rvalue()[0] , 0.0000000000e+00); +// EXPECT_DOUBLE_EQ(beta.chi(0, 0).ptr_rvalue()[4] , 5.9689893417e-02); +// EXPECT_DOUBLE_EQ(beta.chi(0, 0).ptr_rvalue()[364], -4.5888625103e-07); +// +// EXPECT_EQ(beta.chi(3,1).rcut(), 3.68); +// EXPECT_EQ(beta.chi(3,1).nr(), 369); +// EXPECT_EQ(beta.chi(3,1).izeta(), 1); +// EXPECT_DOUBLE_EQ(beta.chi(3, 1).ptr_rgrid()[0] , 0.0000); +// EXPECT_DOUBLE_EQ(beta.chi(3, 1).ptr_rgrid()[8] , 0.0800); +// EXPECT_DOUBLE_EQ(beta.chi(3, 1).ptr_rgrid()[368], 3.6800); +// EXPECT_DOUBLE_EQ(beta.chi(3, 1).ptr_rvalue()[0] , 0.0000000000e+00); +// EXPECT_DOUBLE_EQ(beta.chi(3, 1).ptr_rvalue()[4] , 1.7908487484e-06); +// EXPECT_DOUBLE_EQ(beta.chi(3, 1).ptr_rvalue()[368], -7.0309158570e-06); +// } +// +// TEST_F(BetaRadialsTest, BatchSet) //{ -// std::string file201 = "Pb_ONCV_PBE-1.0.upf"; //!< a UPF 2.0.1 file to read from -// beta.build(dir+file201, 999, nullptr, GlobalV::MY_RANK); -// -// ModuleBase::SphericalBesselTransformer sbt; -// beta.set_transformer(&sbt); -// for (int l = 0; l != beta.lmax(); ++l) { -// for (int izeta = 0; izeta != beta.nzeta(l); ++izeta) { -// EXPECT_EQ(beta.chi(l, izeta).ptr_sbt(), &sbt); -// } -// } -// -// beta.set_uniform_grid(true, 2001, 20.0); -// for (int l = 0; l != beta.lmax(); ++l) { -// for (int izeta = 0; izeta != beta.nzeta(l); ++izeta) { -// EXPECT_EQ(beta.chi(l, izeta).nr(), 2001); -// EXPECT_EQ(beta.chi(l, izeta).rcut(), 20.0); -// EXPECT_EQ(beta.chi(l, izeta).ptr_rgrid()[1500], 15.0); -// EXPECT_EQ(beta.chi(l, izeta).ptr_rvalue()[1500], 0.0); -// } -// } -// -// double grid[5] = {0.0, 1.1, 2.2, 3.3, 4.4}; -// beta.set_grid(true, 5, grid); -// for (int l = 0; l != beta.lmax(); ++l) { -// for (int izeta = 0; izeta != beta.nzeta(l); ++izeta) { -// EXPECT_EQ(beta.chi(l, izeta).ptr_rgrid()[0], 0.0); -// EXPECT_EQ(beta.chi(l, izeta).ptr_rgrid()[1], 1.1); -// EXPECT_EQ(beta.chi(l, izeta).ptr_rgrid()[2], 2.2); -// EXPECT_EQ(beta.chi(l, izeta).ptr_rgrid()[3], 3.3); -// EXPECT_EQ(beta.chi(l, izeta).ptr_rgrid()[4], 4.4); -// } -// } -//} -// -//TEST_F(BetaRadialsTest, Copy) +// std::string file201 = "Pb_ONCV_PBE-1.0.upf"; //!< a UPF 2.0.1 file to read from +// beta.build(dir+file201, 999, nullptr, GlobalV::MY_RANK); +// +// ModuleBase::SphericalBesselTransformer sbt; +// beta.set_transformer(&sbt); +// for (int l = 0; l != beta.lmax(); ++l) { +// for (int izeta = 0; izeta != beta.nzeta(l); ++izeta) { +// EXPECT_EQ(beta.chi(l, izeta).ptr_sbt(), &sbt); +// } +// } +// +// beta.set_uniform_grid(true, 2001, 20.0); +// for (int l = 0; l != beta.lmax(); ++l) { +// for (int izeta = 0; izeta != beta.nzeta(l); ++izeta) { +// EXPECT_EQ(beta.chi(l, izeta).nr(), 2001); +// EXPECT_EQ(beta.chi(l, izeta).rcut(), 20.0); +// EXPECT_EQ(beta.chi(l, izeta).ptr_rgrid()[1500], 15.0); +// EXPECT_EQ(beta.chi(l, izeta).ptr_rvalue()[1500], 0.0); +// } +// } +// +// double grid[5] = {0.0, 1.1, 2.2, 3.3, 4.4}; +// beta.set_grid(true, 5, grid); +// for (int l = 0; l != beta.lmax(); ++l) { +// for (int izeta = 0; izeta != beta.nzeta(l); ++izeta) { +// EXPECT_EQ(beta.chi(l, izeta).ptr_rgrid()[0], 0.0); +// EXPECT_EQ(beta.chi(l, izeta).ptr_rgrid()[1], 1.1); +// EXPECT_EQ(beta.chi(l, izeta).ptr_rgrid()[2], 2.2); +// EXPECT_EQ(beta.chi(l, izeta).ptr_rgrid()[3], 3.3); +// EXPECT_EQ(beta.chi(l, izeta).ptr_rgrid()[4], 4.4); +// } +// } +// } +// +// TEST_F(BetaRadialsTest, Copy) //{ -// /* -// * This test checks whether -// * -// * 1. copy constructor -// * 2. assignment operator -// * 3. polymorphic clone -// * -// * work as expected. -// * */ -// std::string file201 = "Pb_ONCV_PBE-1.0.upf"; //!< a UPF 2.0.1 file to read from -// beta.build(dir + file201, 999, nullptr, GlobalV::MY_RANK); -// -// // copy constructor -// BetaRadials Pb_copy(beta); -// -// EXPECT_EQ(Pb_copy.itype(), 999); -// EXPECT_EQ(Pb_copy.symbol(), "Pb"); -// EXPECT_EQ(Pb_copy.lmax(), 3); -// EXPECT_EQ(Pb_copy.nzeta(0), 2); -// EXPECT_EQ(Pb_copy.nzeta(1), 2); -// EXPECT_EQ(Pb_copy.nzeta(2), 2); -// EXPECT_EQ(Pb_copy.nzeta(3), 2); -// EXPECT_EQ(Pb_copy.nzeta_max(), 2); -// EXPECT_EQ(Pb_copy.nchi(), 8); -// -// EXPECT_DOUBLE_EQ(Pb_copy.rcut_max(), 3.68); -// -// EXPECT_EQ(Pb_copy.chi(0, 0).rcut(), 3.64); -// EXPECT_EQ(Pb_copy.chi(0, 0).nr(), 365); -// EXPECT_EQ(Pb_copy.chi(0, 0).izeta(), 0); -// EXPECT_DOUBLE_EQ(Pb_copy.chi(0, 0).ptr_rgrid()[0], 0.0000); -// EXPECT_DOUBLE_EQ(Pb_copy.chi(0, 0).ptr_rgrid()[8], 0.0800); -// EXPECT_DOUBLE_EQ(Pb_copy.chi(0, 0).ptr_rgrid()[364], 3.6400); -// EXPECT_DOUBLE_EQ(Pb_copy.chi(0, 0).ptr_rvalue()[0], 0.0000000000e+00); -// EXPECT_DOUBLE_EQ(Pb_copy.chi(0, 0).ptr_rvalue()[4], 5.9689893417e-02); -// EXPECT_DOUBLE_EQ(Pb_copy.chi(0, 0).ptr_rvalue()[364], -4.5888625103e-07); -// -// EXPECT_EQ(Pb_copy.chi(3, 1).rcut(), 3.68); -// EXPECT_EQ(Pb_copy.chi(3, 1).nr(), 369); -// EXPECT_EQ(Pb_copy.chi(3, 1).izeta(), 1); -// EXPECT_DOUBLE_EQ(Pb_copy.chi(3, 1).ptr_rgrid()[0], 0.0000); -// EXPECT_DOUBLE_EQ(Pb_copy.chi(3, 1).ptr_rgrid()[8], 0.0800); -// EXPECT_DOUBLE_EQ(Pb_copy.chi(3, 1).ptr_rgrid()[368], 3.6800); -// EXPECT_DOUBLE_EQ(Pb_copy.chi(3, 1).ptr_rvalue()[0], 0.0000000000e+00); -// EXPECT_DOUBLE_EQ(Pb_copy.chi(3, 1).ptr_rvalue()[4], 1.7908487484e-06); -// EXPECT_DOUBLE_EQ(Pb_copy.chi(3, 1).ptr_rvalue()[368], -7.0309158570e-06); -// -// // assignment operator -// BetaRadials Pb_assign; -// Pb_assign = beta; -// -// EXPECT_EQ(Pb_assign.itype(), 999); -// EXPECT_EQ(Pb_assign.symbol(), "Pb"); -// EXPECT_EQ(Pb_assign.lmax(), 3); -// EXPECT_EQ(Pb_assign.nzeta(0), 2); -// EXPECT_EQ(Pb_assign.nzeta(1), 2); -// EXPECT_EQ(Pb_assign.nzeta(2), 2); -// EXPECT_EQ(Pb_assign.nzeta(3), 2); -// EXPECT_EQ(Pb_assign.nzeta_max(), 2); -// EXPECT_EQ(Pb_assign.nchi(), 8); -// -// EXPECT_DOUBLE_EQ(Pb_assign.rcut_max(), 3.68); -// -// EXPECT_EQ(Pb_assign.chi(0, 0).rcut(), 3.64); -// EXPECT_EQ(Pb_assign.chi(0, 0).nr(), 365); -// EXPECT_EQ(Pb_assign.chi(0, 0).izeta(), 0); -// EXPECT_DOUBLE_EQ(Pb_assign.chi(0, 0).ptr_rgrid()[0], 0.0000); -// EXPECT_DOUBLE_EQ(Pb_assign.chi(0, 0).ptr_rgrid()[8], 0.0800); -// EXPECT_DOUBLE_EQ(Pb_assign.chi(0, 0).ptr_rgrid()[364], 3.6400); -// EXPECT_DOUBLE_EQ(Pb_assign.chi(0, 0).ptr_rvalue()[0], 0.0000000000e+00); -// EXPECT_DOUBLE_EQ(Pb_assign.chi(0, 0).ptr_rvalue()[4], 5.9689893417e-02); -// EXPECT_DOUBLE_EQ(Pb_assign.chi(0, 0).ptr_rvalue()[364], -4.5888625103e-07); -// -// EXPECT_EQ(Pb_assign.chi(3, 1).rcut(), 3.68); -// EXPECT_EQ(Pb_assign.chi(3, 1).nr(), 369); -// EXPECT_EQ(Pb_assign.chi(3, 1).izeta(), 1); -// EXPECT_DOUBLE_EQ(Pb_assign.chi(3, 1).ptr_rgrid()[0], 0.0000); -// EXPECT_DOUBLE_EQ(Pb_assign.chi(3, 1).ptr_rgrid()[8], 0.0800); -// EXPECT_DOUBLE_EQ(Pb_assign.chi(3, 1).ptr_rgrid()[368], 3.6800); -// EXPECT_DOUBLE_EQ(Pb_assign.chi(3, 1).ptr_rvalue()[0], 0.0000000000e+00); -// EXPECT_DOUBLE_EQ(Pb_assign.chi(3, 1).ptr_rvalue()[4], 1.7908487484e-06); -// EXPECT_DOUBLE_EQ(Pb_assign.chi(3, 1).ptr_rvalue()[368], -7.0309158570e-06); -// -// // polymorphic clone -// RadialSet* Pb_clone = beta.clone(); -// -// EXPECT_EQ(Pb_clone->itype(), 999); -// EXPECT_EQ(Pb_clone->symbol(), "Pb"); -// EXPECT_EQ(Pb_clone->lmax(), 3); -// EXPECT_EQ(Pb_clone->nzeta(0), 2); -// EXPECT_EQ(Pb_clone->nzeta(1), 2); -// EXPECT_EQ(Pb_clone->nzeta(2), 2); -// EXPECT_EQ(Pb_clone->nzeta(3), 2); -// EXPECT_EQ(Pb_clone->nzeta_max(), 2); -// EXPECT_EQ(Pb_clone->nchi(), 8); -// -// EXPECT_DOUBLE_EQ(Pb_clone->rcut_max(), 3.68); -// -// EXPECT_EQ(Pb_clone->chi(0, 0).rcut(), 3.64); -// EXPECT_EQ(Pb_clone->chi(0, 0).nr(), 365); -// EXPECT_EQ(Pb_clone->chi(0, 0).izeta(), 0); -// EXPECT_DOUBLE_EQ(Pb_clone->chi(0, 0).ptr_rgrid()[0], 0.0000); -// EXPECT_DOUBLE_EQ(Pb_clone->chi(0, 0).ptr_rgrid()[8], 0.0800); -// EXPECT_DOUBLE_EQ(Pb_clone->chi(0, 0).ptr_rgrid()[364], 3.6400); -// EXPECT_DOUBLE_EQ(Pb_clone->chi(0, 0).ptr_rvalue()[0], 0.0000000000e+00); -// EXPECT_DOUBLE_EQ(Pb_clone->chi(0, 0).ptr_rvalue()[4], 5.9689893417e-02); -// EXPECT_DOUBLE_EQ(Pb_clone->chi(0, 0).ptr_rvalue()[364], -4.5888625103e-07); -// -// EXPECT_EQ(Pb_clone->chi(3, 1).rcut(), 3.68); -// EXPECT_EQ(Pb_clone->chi(3, 1).nr(), 369); -// EXPECT_EQ(Pb_clone->chi(3, 1).izeta(), 1); -// EXPECT_DOUBLE_EQ(Pb_clone->chi(3, 1).ptr_rgrid()[0], 0.0000); -// EXPECT_DOUBLE_EQ(Pb_clone->chi(3, 1).ptr_rgrid()[8], 0.0800); -// EXPECT_DOUBLE_EQ(Pb_clone->chi(3, 1).ptr_rgrid()[368], 3.6800); -// EXPECT_DOUBLE_EQ(Pb_clone->chi(3, 1).ptr_rvalue()[0], 0.0000000000e+00); -// EXPECT_DOUBLE_EQ(Pb_clone->chi(3, 1).ptr_rvalue()[4], 1.7908487484e-06); -// EXPECT_DOUBLE_EQ(Pb_clone->chi(3, 1).ptr_rvalue()[368], -7.0309158570e-06); -// -// delete Pb_clone; -//} -// -//TEST_F(BetaRadialsTest, BeginAndEnd) +// /* +// * This test checks whether +// * +// * 1. copy constructor +// * 2. assignment operator +// * 3. polymorphic clone +// * +// * work as expected. +// * */ +// std::string file201 = "Pb_ONCV_PBE-1.0.upf"; //!< a UPF 2.0.1 file to read from +// beta.build(dir + file201, 999, nullptr, GlobalV::MY_RANK); +// +// // copy constructor +// BetaRadials Pb_copy(beta); +// +// EXPECT_EQ(Pb_copy.itype(), 999); +// EXPECT_EQ(Pb_copy.symbol(), "Pb"); +// EXPECT_EQ(Pb_copy.lmax(), 3); +// EXPECT_EQ(Pb_copy.nzeta(0), 2); +// EXPECT_EQ(Pb_copy.nzeta(1), 2); +// EXPECT_EQ(Pb_copy.nzeta(2), 2); +// EXPECT_EQ(Pb_copy.nzeta(3), 2); +// EXPECT_EQ(Pb_copy.nzeta_max(), 2); +// EXPECT_EQ(Pb_copy.nchi(), 8); +// +// EXPECT_DOUBLE_EQ(Pb_copy.rcut_max(), 3.68); +// +// EXPECT_EQ(Pb_copy.chi(0, 0).rcut(), 3.64); +// EXPECT_EQ(Pb_copy.chi(0, 0).nr(), 365); +// EXPECT_EQ(Pb_copy.chi(0, 0).izeta(), 0); +// EXPECT_DOUBLE_EQ(Pb_copy.chi(0, 0).ptr_rgrid()[0], 0.0000); +// EXPECT_DOUBLE_EQ(Pb_copy.chi(0, 0).ptr_rgrid()[8], 0.0800); +// EXPECT_DOUBLE_EQ(Pb_copy.chi(0, 0).ptr_rgrid()[364], 3.6400); +// EXPECT_DOUBLE_EQ(Pb_copy.chi(0, 0).ptr_rvalue()[0], 0.0000000000e+00); +// EXPECT_DOUBLE_EQ(Pb_copy.chi(0, 0).ptr_rvalue()[4], 5.9689893417e-02); +// EXPECT_DOUBLE_EQ(Pb_copy.chi(0, 0).ptr_rvalue()[364], -4.5888625103e-07); +// +// EXPECT_EQ(Pb_copy.chi(3, 1).rcut(), 3.68); +// EXPECT_EQ(Pb_copy.chi(3, 1).nr(), 369); +// EXPECT_EQ(Pb_copy.chi(3, 1).izeta(), 1); +// EXPECT_DOUBLE_EQ(Pb_copy.chi(3, 1).ptr_rgrid()[0], 0.0000); +// EXPECT_DOUBLE_EQ(Pb_copy.chi(3, 1).ptr_rgrid()[8], 0.0800); +// EXPECT_DOUBLE_EQ(Pb_copy.chi(3, 1).ptr_rgrid()[368], 3.6800); +// EXPECT_DOUBLE_EQ(Pb_copy.chi(3, 1).ptr_rvalue()[0], 0.0000000000e+00); +// EXPECT_DOUBLE_EQ(Pb_copy.chi(3, 1).ptr_rvalue()[4], 1.7908487484e-06); +// EXPECT_DOUBLE_EQ(Pb_copy.chi(3, 1).ptr_rvalue()[368], -7.0309158570e-06); +// +// // assignment operator +// BetaRadials Pb_assign; +// Pb_assign = beta; +// +// EXPECT_EQ(Pb_assign.itype(), 999); +// EXPECT_EQ(Pb_assign.symbol(), "Pb"); +// EXPECT_EQ(Pb_assign.lmax(), 3); +// EXPECT_EQ(Pb_assign.nzeta(0), 2); +// EXPECT_EQ(Pb_assign.nzeta(1), 2); +// EXPECT_EQ(Pb_assign.nzeta(2), 2); +// EXPECT_EQ(Pb_assign.nzeta(3), 2); +// EXPECT_EQ(Pb_assign.nzeta_max(), 2); +// EXPECT_EQ(Pb_assign.nchi(), 8); +// +// EXPECT_DOUBLE_EQ(Pb_assign.rcut_max(), 3.68); +// +// EXPECT_EQ(Pb_assign.chi(0, 0).rcut(), 3.64); +// EXPECT_EQ(Pb_assign.chi(0, 0).nr(), 365); +// EXPECT_EQ(Pb_assign.chi(0, 0).izeta(), 0); +// EXPECT_DOUBLE_EQ(Pb_assign.chi(0, 0).ptr_rgrid()[0], 0.0000); +// EXPECT_DOUBLE_EQ(Pb_assign.chi(0, 0).ptr_rgrid()[8], 0.0800); +// EXPECT_DOUBLE_EQ(Pb_assign.chi(0, 0).ptr_rgrid()[364], 3.6400); +// EXPECT_DOUBLE_EQ(Pb_assign.chi(0, 0).ptr_rvalue()[0], 0.0000000000e+00); +// EXPECT_DOUBLE_EQ(Pb_assign.chi(0, 0).ptr_rvalue()[4], 5.9689893417e-02); +// EXPECT_DOUBLE_EQ(Pb_assign.chi(0, 0).ptr_rvalue()[364], -4.5888625103e-07); +// +// EXPECT_EQ(Pb_assign.chi(3, 1).rcut(), 3.68); +// EXPECT_EQ(Pb_assign.chi(3, 1).nr(), 369); +// EXPECT_EQ(Pb_assign.chi(3, 1).izeta(), 1); +// EXPECT_DOUBLE_EQ(Pb_assign.chi(3, 1).ptr_rgrid()[0], 0.0000); +// EXPECT_DOUBLE_EQ(Pb_assign.chi(3, 1).ptr_rgrid()[8], 0.0800); +// EXPECT_DOUBLE_EQ(Pb_assign.chi(3, 1).ptr_rgrid()[368], 3.6800); +// EXPECT_DOUBLE_EQ(Pb_assign.chi(3, 1).ptr_rvalue()[0], 0.0000000000e+00); +// EXPECT_DOUBLE_EQ(Pb_assign.chi(3, 1).ptr_rvalue()[4], 1.7908487484e-06); +// EXPECT_DOUBLE_EQ(Pb_assign.chi(3, 1).ptr_rvalue()[368], -7.0309158570e-06); +// +// // polymorphic clone +// RadialSet* Pb_clone = beta.clone(); +// +// EXPECT_EQ(Pb_clone->itype(), 999); +// EXPECT_EQ(Pb_clone->symbol(), "Pb"); +// EXPECT_EQ(Pb_clone->lmax(), 3); +// EXPECT_EQ(Pb_clone->nzeta(0), 2); +// EXPECT_EQ(Pb_clone->nzeta(1), 2); +// EXPECT_EQ(Pb_clone->nzeta(2), 2); +// EXPECT_EQ(Pb_clone->nzeta(3), 2); +// EXPECT_EQ(Pb_clone->nzeta_max(), 2); +// EXPECT_EQ(Pb_clone->nchi(), 8); +// +// EXPECT_DOUBLE_EQ(Pb_clone->rcut_max(), 3.68); +// +// EXPECT_EQ(Pb_clone->chi(0, 0).rcut(), 3.64); +// EXPECT_EQ(Pb_clone->chi(0, 0).nr(), 365); +// EXPECT_EQ(Pb_clone->chi(0, 0).izeta(), 0); +// EXPECT_DOUBLE_EQ(Pb_clone->chi(0, 0).ptr_rgrid()[0], 0.0000); +// EXPECT_DOUBLE_EQ(Pb_clone->chi(0, 0).ptr_rgrid()[8], 0.0800); +// EXPECT_DOUBLE_EQ(Pb_clone->chi(0, 0).ptr_rgrid()[364], 3.6400); +// EXPECT_DOUBLE_EQ(Pb_clone->chi(0, 0).ptr_rvalue()[0], 0.0000000000e+00); +// EXPECT_DOUBLE_EQ(Pb_clone->chi(0, 0).ptr_rvalue()[4], 5.9689893417e-02); +// EXPECT_DOUBLE_EQ(Pb_clone->chi(0, 0).ptr_rvalue()[364], -4.5888625103e-07); +// +// EXPECT_EQ(Pb_clone->chi(3, 1).rcut(), 3.68); +// EXPECT_EQ(Pb_clone->chi(3, 1).nr(), 369); +// EXPECT_EQ(Pb_clone->chi(3, 1).izeta(), 1); +// EXPECT_DOUBLE_EQ(Pb_clone->chi(3, 1).ptr_rgrid()[0], 0.0000); +// EXPECT_DOUBLE_EQ(Pb_clone->chi(3, 1).ptr_rgrid()[8], 0.0800); +// EXPECT_DOUBLE_EQ(Pb_clone->chi(3, 1).ptr_rgrid()[368], 3.6800); +// EXPECT_DOUBLE_EQ(Pb_clone->chi(3, 1).ptr_rvalue()[0], 0.0000000000e+00); +// EXPECT_DOUBLE_EQ(Pb_clone->chi(3, 1).ptr_rvalue()[4], 1.7908487484e-06); +// EXPECT_DOUBLE_EQ(Pb_clone->chi(3, 1).ptr_rvalue()[368], -7.0309158570e-06); +// +// delete Pb_clone; +// } +// +// TEST_F(BetaRadialsTest, BeginAndEnd) //{ -// std::string file201 = "Pb_ONCV_PBE-1.0.upf"; //!< a UPF 2.0.1 file to read from -// beta.build(dir + file201, 999, nullptr, GlobalV::MY_RANK); +// std::string file201 = "Pb_ONCV_PBE-1.0.upf"; //!< a UPF 2.0.1 file to read from +// beta.build(dir + file201, 999, nullptr, GlobalV::MY_RANK); // -// EXPECT_EQ(beta.cbegin(), &beta.chi(0, 0)); -// EXPECT_EQ(beta.cend() - 1, &beta.chi(3, 1)); -//} +// EXPECT_EQ(beta.cbegin(), &beta.chi(0, 0)); +// EXPECT_EQ(beta.cend() - 1, &beta.chi(3, 1)); +// } int main(int argc, char** argv) { diff --git a/source/module_basis/module_nao/test/hydrogen_radials_test.cpp b/source/module_basis/module_nao/test/hydrogen_radials_test.cpp index db169801d1..a3d0b4bd6b 100644 --- a/source/module_basis/module_nao/test/hydrogen_radials_test.cpp +++ b/source/module_basis/module_nao/test/hydrogen_radials_test.cpp @@ -1,7 +1,9 @@ +#include "module_basis/module_nao/hydrogen_radials.h" + +#include "source_base/math_integral.h" + #include #include -#include "module_basis/module_nao/hydrogen_radials.h" -#include "module_base/math_integral.h" #ifdef __MPI #include @@ -9,31 +11,31 @@ class HydrogenRadialsTest : public ::testing::Test { - protected: - virtual void SetUp() - { - // set up the test case - itype_ = 1; - charge_ = 1.0; - nmax_ = 3; - rcut_ = 20.0; - dr_ = 0.01; - rank_ = 0; - ptr_log_ = NULL; - } + protected: + virtual void SetUp() + { + // set up the test case + itype_ = 1; + charge_ = 1.0; + nmax_ = 3; + rcut_ = 20.0; + dr_ = 0.01; + rank_ = 0; + ptr_log_ = NULL; + } - virtual void TearDown() - { - // tear down the test case - } + virtual void TearDown() + { + // tear down the test case + } - int itype_; - double charge_; - int nmax_; - double rcut_; - double dr_; - int rank_; - std::ofstream* ptr_log_; + int itype_; + double charge_; + int nmax_; + double rcut_; + double dr_; + int rank_; + std::ofstream* ptr_log_; }; TEST_F(HydrogenRadialsTest, UnzipStrategy) @@ -78,7 +80,9 @@ TEST_F(HydrogenRadialsTest, UnzipStrategy) EXPECT_EQ(nl_pairs[1].second, 0); EXPECT_EQ(nl_pairs[2].first, 2); // 2p EXPECT_EQ(nl_pairs[2].second, 1); - nl_pairs = hr.unzip_strategy(29, "energy-full"); // Cu, 1s1 2s2 2p6 3s2 3p6 3d10 4s1 -> 1s2s2p3s3p4s3d -> [1s][2s][2p3s][3p4s][3d] + nl_pairs = hr.unzip_strategy( + 29, + "energy-full"); // Cu, 1s1 2s2 2p6 3s2 3p6 3d10 4s1 -> 1s2s2p3s3p4s3d -> [1s][2s][2p3s][3p4s][3d] EXPECT_EQ(nl_pairs.size(), 7); EXPECT_EQ(nl_pairs[0].first, 1); // 1s EXPECT_EQ(nl_pairs[0].second, 0); @@ -154,7 +158,7 @@ TEST_F(HydrogenRadialsTest, RadialNorm) std::vector r2f2; for (int i = 0; i < r.size(); i++) { - r2f2.push_back(r[i]*r[i]*f[i]*f[i]); + r2f2.push_back(r[i] * r[i] * f[i] * f[i]); } double norm = hr.radial_norm(r, f); EXPECT_EQ(norm, sqrt(ModuleBase::Integral::simpson(r.size(), r2f2.data(), dr))); @@ -199,7 +203,7 @@ TEST_F(HydrogenRadialsTest, MappingNLLZeta) lzeta = nl_lzeta_map[std::make_pair(1, 0)].second; EXPECT_EQ(l, 0); EXPECT_EQ(lzeta, 0); - // full, 1s, 2s, 2p, 3s, 3p, 3d, 4s, 4p, 4d, 4f, + // full, 1s, 2s, 2p, 3s, 3p, 3d, 4s, 4p, 4d, 4f, // map (1, 0), (2, 0), (3, 0), (4, 0) to (0, 0), (0, 1), (0, 2), (0, 3) // (2, 1), (3, 1), (4, 1) to (1, 0), (1, 1), (1, 2) // (3, 2), (4, 2) to (2, 0), (2, 1) @@ -254,38 +258,20 @@ TEST_F(HydrogenRadialsTest, GenerateHydrogenRadialToconv) std::vector r; std::vector Rnl; - double rmax_chg1_n1l0 = hr.generate_hydrogen_radial_toconv( - 1.0, - false, - 1, - 0, - 1e-7, - 0, - r, - Rnl - ); + double rmax_chg1_n1l0 = hr.generate_hydrogen_radial_toconv(1.0, false, 1, 0, 1e-7, 0, r, Rnl); std::vector r2Rnl2; for (int i = 0; i < r.size(); i++) { - r2Rnl2.push_back(r[i]*r[i]*Rnl[i]*Rnl[i]); + r2Rnl2.push_back(r[i] * r[i] * Rnl[i] * Rnl[i]); } double norm = ModuleBase::Integral::simpson(r.size(), r2Rnl2.data(), 0.01); EXPECT_NEAR(norm, 1.0, 1e-6); - double rmax_chg4_n2l1 = hr.generate_hydrogen_radial_toconv( - 4.0, - false, - 2, - 1, - 1e-7, - 0, - r, - Rnl - ); + double rmax_chg4_n2l1 = hr.generate_hydrogen_radial_toconv(4.0, false, 2, 1, 1e-7, 0, r, Rnl); r2Rnl2.clear(); for (int i = 0; i < r.size(); i++) { - r2Rnl2.push_back(r[i]*r[i]*Rnl[i]*Rnl[i]); + r2Rnl2.push_back(r[i] * r[i] * Rnl[i] * Rnl[i]); } norm = ModuleBase::Integral::simpson(r.size(), r2Rnl2.data(), 0.01); EXPECT_NEAR(norm, 1.0, 1e-6); @@ -297,38 +283,14 @@ TEST_F(HydrogenRadialsTest, Build) { HydrogenRadials hr; // build 1s 2p 3d - hr.build( - itype_, - charge_, - false, - nmax_, - rcut_, - dr_, - 1e-6, - rank_, - "H", - "minimal-nodeless", - ptr_log_ - ); + hr.build(itype_, charge_, false, nmax_, rcut_, dr_, 1e-6, rank_, "H", "minimal-nodeless", ptr_log_); // nmax = 1, minimal, yields 1s orbital EXPECT_EQ(hr.lmax(), 2); EXPECT_EQ(hr.nzeta(0), 1); EXPECT_EQ(hr.nzeta_max(), 1); EXPECT_EQ(hr.nchi(), 3); // Cu, minimal-valence, 4s 4p 4d - hr.build( - itype_, - charge_, - false, - 4, - rcut_, - dr_, - 1e-6, - rank_, - "Cu", - "minimal-valence", - ptr_log_ - ); + hr.build(itype_, charge_, false, 4, rcut_, dr_, 1e-6, rank_, "Cu", "minimal-valence", ptr_log_); // nmax = 4, minimal-valence, yields 4s 4p 4d 4f orbitals EXPECT_EQ(hr.lmax(), 3); EXPECT_EQ(hr.nzeta(0), 1); @@ -338,19 +300,7 @@ TEST_F(HydrogenRadialsTest, Build) EXPECT_EQ(hr.nzeta_max(), 1); EXPECT_EQ(hr.nchi(), 4); // Cu, energy-full, 1s 2s 2p 3s 3p 4s 3d - hr.build( - itype_, - charge_, - false, - 29, - rcut_, - dr_, - 1e-6, - rank_, - "Cu", - "energy-full", - ptr_log_ - ); + hr.build(itype_, charge_, false, 29, rcut_, dr_, 1e-6, rank_, "Cu", "energy-full", ptr_log_); // nmax = 29, energy-full, yields 1s 2s 2p 3s 3p 4s 3d orbitals EXPECT_EQ(hr.lmax(), 2); EXPECT_EQ(hr.nzeta(0), 4); @@ -361,19 +311,17 @@ TEST_F(HydrogenRadialsTest, Build) EXPECT_EQ(hr.nchi(), 7); // Cu, energy-valence, 3p 4s 3d printf("Unittest for generating Cu energy-valence orbitals without Slater screening:\n"); - hr.build( - itype_, - 29, // use the real nuclear charge for Cu - false, - 29, - rcut_, - dr_, - 1e-6, - rank_, - "Cu", - "energy-valence", - ptr_log_ - ); + hr.build(itype_, + 29, // use the real nuclear charge for Cu + false, + 29, + rcut_, + dr_, + 1e-6, + rank_, + "Cu", + "energy-valence", + ptr_log_); // nmax = 29, energy-valence, yields 3p 4s 3d orbitals EXPECT_EQ(hr.lmax(), 2); EXPECT_EQ(hr.nzeta(0), 1); @@ -385,19 +333,17 @@ TEST_F(HydrogenRadialsTest, Build) // test with Slater screening on Cu // Cu, energy-valence, 3p 4s 3d printf("Unittest for generating Cu energy-valence orbitals with Slater screening:\n"); - hr.build( - itype_, - 29, // use the real nuclear charge for Cu - true, - 29, - rcut_, - dr_, - 1e-6, - rank_, - "Cu", - "energy-valence", - ptr_log_ - ); + hr.build(itype_, + 29, // use the real nuclear charge for Cu + true, + 29, + rcut_, + dr_, + 1e-6, + rank_, + "Cu", + "energy-valence", + ptr_log_); // nmax = 29, energy-valence, yields 3p 4s 3d orbitals EXPECT_EQ(hr.lmax(), 2); EXPECT_EQ(hr.nzeta(0), 1); @@ -407,19 +353,7 @@ TEST_F(HydrogenRadialsTest, Build) EXPECT_EQ(hr.nzeta_max(), 1); EXPECT_EQ(hr.nchi(), 3); // build 1s 2s 2p 3s 3p 3d 4s 4p 4d 4f - hr.build( - itype_, - charge_, - false, - 4, - rcut_, - dr_, - 1e-6, - rank_, - "H", - "full", - ptr_log_ - ); + hr.build(itype_, charge_, false, 4, rcut_, dr_, 1e-6, rank_, "H", "full", ptr_log_); // nmax = 4, full, yields 1s 2s 2p 3s 3p 3d 4s 4p 4d 4f orbitals EXPECT_EQ(hr.lmax(), 3); EXPECT_EQ(hr.nzeta(0), 4); diff --git a/source/module_basis/module_nao/test/numerical_radial_test.cpp b/source/module_basis/module_nao/test/numerical_radial_test.cpp index 170699040d..531fc574c7 100644 --- a/source/module_basis/module_nao/test/numerical_radial_test.cpp +++ b/source/module_basis/module_nao/test/numerical_radial_test.cpp @@ -1,16 +1,16 @@ -#include -#include -#include +#include "source_base/spherical_bessel_transformer.h" #include "gtest/gtest.h" -#include "module_base/spherical_bessel_transformer.h" +#include +#include +#include #ifdef __MPI #include #endif -#include "module_base/constants.h" #include "module_basis/module_nao/numerical_radial.h" +#include "source_base/constants.h" using ModuleBase::PI; using ModuleBase::SphericalBesselTransformer; @@ -236,7 +236,7 @@ TEST_F(NumericalRadialTest, GridSetAndWipe) double dr = 0.01; int nr = 5000; int pr = -1; - for (int ir = 0; ir != nr ; ++ir) + for (int ir = 0; ir != nr; ++ir) { double r = ir * dr; grid[ir] = r; @@ -313,7 +313,8 @@ TEST_F(NumericalRadialTest, SetUniformGrid) } } -TEST_F(NumericalRadialTest, Interpolate) { +TEST_F(NumericalRadialTest, Interpolate) +{ /* * This test starts with a NumericalRadial object with k-space values * @@ -328,27 +329,29 @@ TEST_F(NumericalRadialTest, Interpolate) { double dk = 0.01; int sz = 10000; int pk = -2; - double pref = 48 * std::sqrt(2./PI); - for (int ik = 0; ik != sz; ++ik) { + double pref = 48 * std::sqrt(2. / PI); + for (int ik = 0; ik != sz; ++ik) + { double k = ik * dk; - k *= std::exp(0.02*k); + k *= std::exp(0.02 * k); grid[ik] = k; - f[ik] = pref / std::pow(k*k+1, 4); + f[ik] = pref / std::pow(k * k + 1, 4); } chi.build(2, false, sz, grid, f, pk); - chi.set_uniform_grid(false, sz, PI/50*(sz-1), 'i', true); + chi.set_uniform_grid(false, sz, PI / 50 * (sz - 1), 'i', true); double dr = PI / chi.kmax(); for (int ir = 0; ir != sz; ++ir) { double r = ir * dr; - EXPECT_NEAR(r*r*std::exp(-r), chi.rvalue(ir), tol*2); // slightly relax the tolerance due to interpolation + EXPECT_NEAR(r * r * std::exp(-r), chi.rvalue(ir), tol * 2); // slightly relax the tolerance due to interpolation } } -TEST_F(NumericalRadialTest, ZeroPadding) { +TEST_F(NumericalRadialTest, ZeroPadding) +{ /* * This test checks whether set_grid properly pads the value array. * */ @@ -366,7 +369,7 @@ TEST_F(NumericalRadialTest, ZeroPadding) { chi.build(2, false, sz1, grid, f, pk); int sz2 = 10000; - chi.set_uniform_grid(false, sz2, dk*(sz2-1), 'i'); + chi.set_uniform_grid(false, sz2, dk * (sz2 - 1), 'i'); for (int ik = 0; ik != sz1; ++ik) { @@ -400,7 +403,7 @@ TEST_F(NumericalRadialTest, SetValue) chi.build(1, true, sz, grid, f, p); EXPECT_EQ(chi.rcut(), sz_cut * dx); - EXPECT_EQ(chi.rmax(), (sz-1) * dx); + EXPECT_EQ(chi.rmax(), (sz - 1) * dx); for (int ir = 0; ir != sz; ++ir) { diff --git a/source/module_basis/module_nao/test/projgen_test.cpp b/source/module_basis/module_nao/test/projgen_test.cpp index 2feaadfb7a..2793e1f98a 100644 --- a/source/module_basis/module_nao/test/projgen_test.cpp +++ b/source/module_basis/module_nao/test/projgen_test.cpp @@ -1,21 +1,21 @@ -#include "module_base/projgen.h" -#include "gtest/gtest.h" +#include "source_base/projgen.h" -#include "module_base/math_integral.h" -#include "module_base/math_sphbes.h" -#include "module_base/cubic_spline.h" +#include "source_base/cubic_spline.h" +#include "source_base/math_integral.h" +#include "source_base/math_sphbes.h" -#include -#include +#include "gtest/gtest.h" #include +#include #include #include +#include /*********************************************************** * Unit test of functions in projgen.cpp * "projgen" : generate the projector coefficients * "smoothgen" : smooth the projector coefficients and optimize the sigma - * + * ***********************************************************/ TEST(projgen_test, projgen) @@ -28,15 +28,17 @@ TEST(projgen_test, projgen) std::vector r(nr_nao); std::vector orb(nr_nao); - for (int i = 0; i < nr_nao; ++i) { + for (int i = 0; i < nr_nao; ++i) + { r[i] = i * dr; orb[i] = r[i] * r[i] * std::exp(-r[i]); } // normalize the input orbital std::vector integrand(nr_nao); - std::transform(r.begin(), r.end(), orb.begin(), integrand.begin(), - [](double r_i, double orb_i) { return std::pow(r_i * orb_i, 2); }); + std::transform(r.begin(), r.end(), orb.begin(), integrand.begin(), [](double r_i, double orb_i) { + return std::pow(r_i * orb_i, 2); + }); double N = 1.0 / std::sqrt(ModuleBase::Integral::simpson(nr_nao, integrand.data(), dr)); std::for_each(orb.begin(), orb.end(), [N](double& chi_i) { chi_i *= N; }); @@ -49,29 +51,14 @@ TEST(projgen_test, projgen) // compare with python script result std::vector ref = { - 0.000000000000e+00, - 2.344902364599e-05, - 9.378381332712e-05, - 2.109675345121e-04, - 3.749388271050e-04, - 5.856118515995e-04, - 8.428763536364e-04, - 1.146597746904e-03, - 1.496617214310e-03, - 1.892751827321e-03, - 2.334794683381e-03, - 2.822515061259e-03, - 3.355658594204e-03, - 3.933947460740e-03, - 4.557080592928e-03, - 5.224733901903e-03, - 5.936560520491e-03, - 6.692191062668e-03, - 7.491233899644e-03, - 8.333275452302e-03, + 0.000000000000e+00, 2.344902364599e-05, 9.378381332712e-05, 2.109675345121e-04, 3.749388271050e-04, + 5.856118515995e-04, 8.428763536364e-04, 1.146597746904e-03, 1.496617214310e-03, 1.892751827321e-03, + 2.334794683381e-03, 2.822515061259e-03, 3.355658594204e-03, 3.933947460740e-03, 4.557080592928e-03, + 5.224733901903e-03, 5.936560520491e-03, 6.692191062668e-03, 7.491233899644e-03, 8.333275452302e-03, }; - for (int i = 0; i < 20; ++i) { + for (int i = 0; i < 20; ++i) + { EXPECT_NEAR(alpha[i], ref[i], 1e-12); } } @@ -86,15 +73,17 @@ TEST(smoothgen_test, smoothgen) std::vector r(nr_nao); std::vector orb(nr_nao); - for (int i = 0; i < nr_nao; ++i) { + for (int i = 0; i < nr_nao; ++i) + { r[i] = i * dr; orb[i] = r[i] * r[i] * std::exp(-r[i]); } // normalize the input orbital std::vector integrand(nr_nao); - std::transform(r.begin(), r.end(), orb.begin(), integrand.begin(), - [](double r_i, double orb_i) { return std::pow(r_i * orb_i, 2); }); + std::transform(r.begin(), r.end(), orb.begin(), integrand.begin(), [](double r_i, double orb_i) { + return std::pow(r_i * orb_i, 2); + }); double N = 1.0 / std::sqrt(ModuleBase::Integral::simpson(nr_nao, integrand.data(), dr)); std::for_each(orb.begin(), orb.end(), [N](double& chi_i) { chi_i *= N; }); @@ -106,31 +95,30 @@ TEST(smoothgen_test, smoothgen) smoothgen(nr_nao, r.data(), orb.data(), rcut_proj, alpha); // compare with python script result - std::vector ref = { - 0, - 4.3350439973614511e-05, - 0.00017167638355532129, - 0.00038242839374460959, - 0.0006731078535961104, - 0.0010412661227313883, - 0.0014845037064463464, - 0.0020004694372387291, - 0.0025868596685825239, - 0.0032414174807783905, - 0.0039619318987114734, - 0.0047462371213502306, - 0.0055922117628221264, - 0.006497778104904167, - 0.0074609013607684835, - 0.0084795889498252546, - 0.0095518897835073727, - 0.010675893561843302, - 0.01184973008066669, - 0.013071568549313281 - }; - - for (int i = 0; i < 20; ++i) { - //std::cout< ref = {0, + 4.3350439973614511e-05, + 0.00017167638355532129, + 0.00038242839374460959, + 0.0006731078535961104, + 0.0010412661227313883, + 0.0014845037064463464, + 0.0020004694372387291, + 0.0025868596685825239, + 0.0032414174807783905, + 0.0039619318987114734, + 0.0047462371213502306, + 0.0055922117628221264, + 0.006497778104904167, + 0.0074609013607684835, + 0.0084795889498252546, + 0.0095518897835073727, + 0.010675893561843302, + 0.01184973008066669, + 0.013071568549313281}; + + for (int i = 0; i < 20; ++i) + { + // std::cout< @@ -35,13 +37,14 @@ class RadialCollectionTest : public ::testing::Test void SetUp(); void TearDown(); - RadialCollection orb; //!< object under test - int nfile = 0; // number of orbital/pseudopotential files - std::string* file = nullptr; //!< orbitals file to read from - std::string log_file = "./test_files/radial_collection.log"; //!< file for logging + RadialCollection orb; //!< object under test + int nfile = 0; // number of orbital/pseudopotential files + std::string* file = nullptr; //!< orbitals file to read from + std::string log_file = "./test_files/radial_collection.log"; //!< file for logging }; -void RadialCollectionTest::SetUp() { +void RadialCollectionTest::SetUp() +{ std::string dir = "../../../../../tests/PP_ORB/"; nfile = 4; file = new std::string[nfile]; @@ -51,11 +54,13 @@ void RadialCollectionTest::SetUp() { file[3] = dir + "Fe_gga_9au_100Ry_4s2p2d1f.orb"; } -void RadialCollectionTest::TearDown() { +void RadialCollectionTest::TearDown() +{ delete[] file; } -TEST_F(RadialCollectionTest, BuildAndGet) { +TEST_F(RadialCollectionTest, BuildAndGet) +{ orb.build(nfile, file, 'o'); EXPECT_EQ(orb.symbol(0), "C"); @@ -67,21 +72,21 @@ TEST_F(RadialCollectionTest, BuildAndGet) { EXPECT_EQ(orb.lmax(), 3); EXPECT_DOUBLE_EQ(orb.rcut_max(), 10.0); - EXPECT_EQ(orb.nzeta(0,0), 2); - EXPECT_EQ(orb.nzeta(0,1), 2); - EXPECT_EQ(orb.nzeta(0,2), 1); + EXPECT_EQ(orb.nzeta(0, 0), 2); + EXPECT_EQ(orb.nzeta(0, 1), 2); + EXPECT_EQ(orb.nzeta(0, 2), 1); - EXPECT_EQ(orb.nzeta(1,0), 2); - EXPECT_EQ(orb.nzeta(1,1), 1); + EXPECT_EQ(orb.nzeta(1, 0), 2); + EXPECT_EQ(orb.nzeta(1, 1), 1); - EXPECT_EQ(orb.nzeta(2,0), 2); - EXPECT_EQ(orb.nzeta(2,1), 2); - EXPECT_EQ(orb.nzeta(2,2), 1); + EXPECT_EQ(orb.nzeta(2, 0), 2); + EXPECT_EQ(orb.nzeta(2, 1), 2); + EXPECT_EQ(orb.nzeta(2, 2), 1); - EXPECT_EQ(orb.nzeta(3,0), 4); - EXPECT_EQ(orb.nzeta(3,1), 2); - EXPECT_EQ(orb.nzeta(3,2), 2); - EXPECT_EQ(orb.nzeta(3,3), 1); + EXPECT_EQ(orb.nzeta(3, 0), 4); + EXPECT_EQ(orb.nzeta(3, 1), 2); + EXPECT_EQ(orb.nzeta(3, 2), 2); + EXPECT_EQ(orb.nzeta(3, 3), 1); EXPECT_EQ(orb.nzeta_max(0), 2); EXPECT_EQ(orb.nzeta_max(1), 2); @@ -94,20 +99,25 @@ TEST_F(RadialCollectionTest, BuildAndGet) { EXPECT_EQ(orb.nchi(3), 9); EXPECT_EQ(orb.nchi(), 22); - for (int itype = 0; itype <= 3; ++itype) { + for (int itype = 0; itype <= 3; ++itype) + { EXPECT_EQ(orb(itype).itype(), itype); } - for (int itype = 0; itype <= 3; ++itype) { - for (int l = 0; l <= orb(itype).lmax(); ++l) { - for (int izeta = 0; izeta != orb(itype).nzeta(l); ++izeta) { + for (int itype = 0; itype <= 3; ++itype) + { + for (int l = 0; l <= orb(itype).lmax(); ++l) + { + for (int izeta = 0; izeta != orb(itype).nzeta(l); ++izeta) + { EXPECT_EQ(orb(itype, l, izeta).l(), l); } } } } -TEST_F(RadialCollectionTest, BatchSet) { +TEST_F(RadialCollectionTest, BatchSet) +{ orb.build(nfile, file, 'o'); ModuleBase::SphericalBesselTransformer sbt; @@ -120,9 +130,12 @@ TEST_F(RadialCollectionTest, BatchSet) { EXPECT_EQ(orb.rcut_max(), 10.0); std::array rcut = {8, 8, 10, 9}; - for (int itype = 0; itype != orb.ntype(); ++itype) { - for (int l = 0; l <= orb(itype).lmax(); ++l) { - for (int izeta = 0; izeta != orb.nzeta(itype, l); ++izeta) { + for (int itype = 0; itype != orb.ntype(); ++itype) + { + for (int l = 0; l <= orb(itype).lmax(); ++l) + { + for (int izeta = 0; izeta != orb.nzeta(itype, l); ++izeta) + { EXPECT_EQ(sbt, orb(itype, l, izeta).sbt()); EXPECT_DOUBLE_EQ(orb(itype, l, izeta).rcut(), rcut[itype]); } @@ -135,9 +148,12 @@ TEST_F(RadialCollectionTest, BatchSet) { grid[2] = 3.14; orb.set_grid(true, 3, grid, 'i'); - for (int itype = 0; itype != orb.ntype(); ++itype) { - for (int l = 0; l <= orb(itype).lmax(); ++l) { - for (int izeta = 0; izeta != orb.nzeta(itype, l); ++izeta) { + for (int itype = 0; itype != orb.ntype(); ++itype) + { + for (int l = 0; l <= orb(itype).lmax(); ++l) + { + for (int izeta = 0; izeta != orb.nzeta(itype, l); ++izeta) + { EXPECT_DOUBLE_EQ(orb(itype, l, izeta).rcut(), 3.14); } } @@ -271,13 +287,14 @@ TEST_F(RadialCollectionTest, Iteration) EXPECT_EQ(*(orb.cbegin() + 17), &orb(0, 2, 0)); EXPECT_EQ(*(orb.cbegin() + 21), &orb(3, 3, 0)); EXPECT_EQ(*(orb.cend() - 1), &orb(3, 3, 0)); - //EXPECT_EQ(*(orb.cbegin() + 5), &orb(1, 0, 0)); - //EXPECT_EQ(*(orb.cbegin() + 8), &orb(2, 0, 0)); - //EXPECT_EQ(*(orb.cbegin() + 13), &orb(3, 0, 0)); - //EXPECT_EQ(*(orb.cend() - 1), &orb(3, 3, 0)); + // EXPECT_EQ(*(orb.cbegin() + 5), &orb(1, 0, 0)); + // EXPECT_EQ(*(orb.cbegin() + 8), &orb(2, 0, 0)); + // EXPECT_EQ(*(orb.cbegin() + 13), &orb(3, 0, 0)); + // EXPECT_EQ(*(orb.cend() - 1), &orb(3, 3, 0)); } -TEST_F(RadialCollectionTest, Build2) { +TEST_F(RadialCollectionTest, Build2) +{ // build a collection of truncated spherical Bessel functions int lmax = 3; int nbes = 10; @@ -292,16 +309,16 @@ TEST_F(RadialCollectionTest, Build2) { EXPECT_EQ(orb.lmax(), lmax); EXPECT_DOUBLE_EQ(orb.rcut_max(), rcut); - for (int l = 0; l <= lmax; ++l) { + for (int l = 0; l <= lmax; ++l) + { EXPECT_EQ(orb.nzeta(0, l), nbes); } EXPECT_EQ(orb.nzeta_max(0), nbes); - EXPECT_EQ(orb.nchi(0), nbes*(lmax+1)); - EXPECT_EQ(orb.nchi(), nbes*(lmax+1)); + EXPECT_EQ(orb.nchi(0), nbes * (lmax + 1)); + EXPECT_EQ(orb.nchi(), nbes * (lmax + 1)); } - int main(int argc, char** argv) { diff --git a/source/module_basis/module_nao/test/real_gaunt_table_test.cpp b/source/module_basis/module_nao/test/real_gaunt_table_test.cpp index 3f8c198060..dd9ac3ee97 100644 --- a/source/module_basis/module_nao/test/real_gaunt_table_test.cpp +++ b/source/module_basis/module_nao/test/real_gaunt_table_test.cpp @@ -1,8 +1,8 @@ #include "module_basis/module_nao/real_gaunt_table.h" -#include "gtest/gtest.h" +#include "gtest/gtest.h" +#include #include -#include #ifdef __MPI #include @@ -11,8 +11,8 @@ #include using iclock = std::chrono::high_resolution_clock; -#include "module_base/constants.h" #include "module_basis/module_ao/ORB_gaunt_table.h" +#include "source_base/constants.h" /*********************************************************** * Unit test of class "RealGauntTable" @@ -33,18 +33,22 @@ using iclock = std::chrono::high_resolution_clock; class RealGauntTableTest : public ::testing::Test { protected: - void SetUp() { /*rgt.build(lmax);*/ } - void TearDown() {} + void SetUp() + { /*rgt.build(lmax);*/ + } + void TearDown() + { + } - int lmax = 10; //!< maximum angular momentum - //RealGauntTable rgt; //!< object under test + int lmax = 10; //!< maximum angular momentum + // RealGauntTable rgt; //!< object under test const double tol = 1e-12; //!< numerical error tolerance for individual Gaunt coefficient }; TEST_F(RealGauntTableTest, LegacyConsistency) { - //iclock::time_point start; - //std::chrono::duration dur; + // iclock::time_point start; + // std::chrono::duration dur; // this test checks whether the coefficients in RealGauntTable is consistent with those of ORB_gaunt_table // this test shall be removed in the future once the refactoring is finished @@ -52,32 +56,32 @@ TEST_F(RealGauntTableTest, LegacyConsistency) RealGauntTable::instance().build(lmax); - //start = iclock::now(); + // start = iclock::now(); ogt.init_Gaunt_CH(lmax); ogt.init_Gaunt(lmax); - //dur = iclock::now() - start; - //std::cout << "time elased = " << dur.count() << " s" << std::endl; + // dur = iclock::now() - start; + // std::cout << "time elased = " << dur.count() << " s" << std::endl; - //RealGauntTable rgt2; - //start = iclock::now(); - //rgt2.build(lmax); - //dur = iclock::now() - start; - //std::cout << "time elased = " << dur.count() << " s" << std::endl; + // RealGauntTable rgt2; + // start = iclock::now(); + // rgt2.build(lmax); + // dur = iclock::now() - start; + // std::cout << "time elased = " << dur.count() << " s" << std::endl; for (int l1 = 0; l1 <= lmax; ++l1) { - for (int mm1 = 0; mm1 <= 2*l1; ++mm1) + for (int mm1 = 0; mm1 <= 2 * l1; ++mm1) { int index1 = ogt.get_lm_index(l1, mm1); for (int l2 = 0; l2 <= lmax; ++l2) { - for (int mm2 = 0; mm2 <= 2*l2; ++mm2) + for (int mm2 = 0; mm2 <= 2 * l2; ++mm2) { int index2 = ogt.get_lm_index(l2, mm2); - for (int l3 = 0; l3 <= 2*lmax; ++l3) - //for (int l3 = std::abs(l1-l2); l3 <= 2*lmax; l3 += 2) + for (int l3 = 0; l3 <= 2 * lmax; ++l3) + // for (int l3 = std::abs(l1-l2); l3 <= 2*lmax; l3 += 2) { - for (int mm3 = 0; mm3 <= 2*l3; ++mm3) + for (int mm3 = 0; mm3 <= 2 * l3; ++mm3) { int index3 = ogt.get_lm_index(l3, mm3); @@ -85,8 +89,9 @@ TEST_F(RealGauntTableTest, LegacyConsistency) int m2 = ogt.Index_M(mm2); int m3 = ogt.Index_M(mm3); - EXPECT_NEAR(RealGauntTable::instance()(l1, l2, l3, m1, m2, m3), - ogt.Gaunt_Coefficients(index1, index2, index3), tol); + EXPECT_NEAR(RealGauntTable::instance()(l1, l2, l3, m1, m2, m3), + ogt.Gaunt_Coefficients(index1, index2, index3), + tol); } } } @@ -104,63 +109,68 @@ TEST_F(RealGauntTableTest, SanityCheck) EXPECT_NEAR(RealGauntTable::instance()(4, 0, 4, 3, 0, 3), ModuleBase::SQRT_INVERSE_FOUR_PI, tol); EXPECT_NEAR(RealGauntTable::instance()(4, 0, 4, -3, 0, -3), ModuleBase::SQRT_INVERSE_FOUR_PI, tol); - EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, 2, -1, -1), -std::sqrt(15.0) / 7.0 * ModuleBase::SQRT_INVERSE_FOUR_PI, tol); - EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, -1, 2, -1), -std::sqrt(15.0) / 7.0 * ModuleBase::SQRT_INVERSE_FOUR_PI, tol); + EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, 2, -1, -1), + -std::sqrt(15.0) / 7.0 * ModuleBase::SQRT_INVERSE_FOUR_PI, + tol); + EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, -1, 2, -1), + -std::sqrt(15.0) / 7.0 * ModuleBase::SQRT_INVERSE_FOUR_PI, + tol); EXPECT_NEAR(RealGauntTable::instance()(3, 3, 2, 2, 1, 1), ModuleBase::SQRT_INVERSE_FOUR_PI / std::sqrt(6.0), tol); EXPECT_NEAR(RealGauntTable::instance()(2, 3, 3, 1, 1, 2), ModuleBase::SQRT_INVERSE_FOUR_PI / std::sqrt(6.0), tol); - EXPECT_NEAR(RealGauntTable::instance()(4, 5, 7, 3, -2, -5), ModuleBase::SQRT_INVERSE_FOUR_PI * std::sqrt(210.0) / 221.0, tol); + EXPECT_NEAR(RealGauntTable::instance()(4, 5, 7, 3, -2, -5), + ModuleBase::SQRT_INVERSE_FOUR_PI * std::sqrt(210.0) / 221.0, + tol); } /** -* @brief real gaunt function test: -* Using sympy realgaunt function test points set. -* 2 failed test case with a sign error occurred -* on some cases of the actual Gaunt coefficients of 2 negative m -*/ + * @brief real gaunt function test: + * Using sympy realgaunt function test points set. + * 2 failed test case with a sign error occurred + * on some cases of the actual Gaunt coefficients of 2 negative m + */ TEST_F(RealGauntTableTest, Check2) { - const double PI = 3.14159265358979323846; - for(int i=0;i<3;i++){ - for(int j=-i;j<=i;j++){ - EXPECT_NEAR(RealGauntTable::instance()(0, i, i, 0, j, j), 1/(2*sqrt(PI)), tol); + const double PI = 3.14159265358979323846; + for (int i = 0; i < 3; i++) + { + for (int j = -i; j <= i; j++) + { + EXPECT_NEAR(RealGauntTable::instance()(0, i, i, 0, j, j), 1 / (2 * sqrt(PI)), tol); } } - + // EXPECT_NEAR(rgt(1, 1, 2, -1, 1, -2), -sqrt(15)/(10*sqrt(PI)), tol); //wrong case // EXPECT_NEAR(rgt(1, 1, 2, -1, 1, -2),-sqrt(15)/(10*sqrt(PI)), tol); //wrong case - - EXPECT_NEAR(RealGauntTable::instance()(1, 1, 2, 0, 0, 0),sqrt(5)/(5*sqrt(PI)), tol); - EXPECT_NEAR(RealGauntTable::instance()(1, 1, 2, 1, 1, 0),-sqrt(5)/(10*sqrt(PI)), tol); - EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, 0, 0, 0),sqrt(5)/(7*sqrt(PI)), tol); - EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, 0, 2, 2),-sqrt(5)/(7*sqrt(PI)), tol); - EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, -2, -2, 0),-sqrt(5)/(7*sqrt(PI)), tol); - - EXPECT_NEAR(RealGauntTable::instance()(1, 1, 2, -1, 0, -1),sqrt(15)/(10*sqrt(PI)), tol); - EXPECT_NEAR(RealGauntTable::instance()(1, 1, 2, 0, 1, 1),sqrt(15)/(10*sqrt(PI)), tol); - EXPECT_NEAR(RealGauntTable::instance()(1, 1, 2, 1, 1, 2),sqrt(15)/(10*sqrt(PI)), tol); - - EXPECT_NEAR(RealGauntTable::instance()(1, 1, 2, -1, -1, 2),-sqrt(15)/(10*sqrt(PI)), tol); - - EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, 0, 1, 1),sqrt(5)/(14*sqrt(PI)), tol); - EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, 1, 1, 2),sqrt(15)/(14*sqrt(PI)), tol); - EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, -1, -1, 2),-sqrt(15)/(14*sqrt(PI)), tol); - - -} + EXPECT_NEAR(RealGauntTable::instance()(1, 1, 2, 0, 0, 0), sqrt(5) / (5 * sqrt(PI)), tol); + EXPECT_NEAR(RealGauntTable::instance()(1, 1, 2, 1, 1, 0), -sqrt(5) / (10 * sqrt(PI)), tol); + EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, 0, 0, 0), sqrt(5) / (7 * sqrt(PI)), tol); + EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, 0, 2, 2), -sqrt(5) / (7 * sqrt(PI)), tol); + EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, -2, -2, 0), -sqrt(5) / (7 * sqrt(PI)), tol); + EXPECT_NEAR(RealGauntTable::instance()(1, 1, 2, -1, 0, -1), sqrt(15) / (10 * sqrt(PI)), tol); + EXPECT_NEAR(RealGauntTable::instance()(1, 1, 2, 0, 1, 1), sqrt(15) / (10 * sqrt(PI)), tol); + EXPECT_NEAR(RealGauntTable::instance()(1, 1, 2, 1, 1, 2), sqrt(15) / (10 * sqrt(PI)), tol); + + EXPECT_NEAR(RealGauntTable::instance()(1, 1, 2, -1, -1, 2), -sqrt(15) / (10 * sqrt(PI)), tol); + + EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, 0, 1, 1), sqrt(5) / (14 * sqrt(PI)), tol); + EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, 1, 1, 2), sqrt(15) / (14 * sqrt(PI)), tol); + EXPECT_NEAR(RealGauntTable::instance()(2, 2, 2, -1, -1, 2), -sqrt(15) / (14 * sqrt(PI)), tol); +} /** -* @brief gaunt function test: -* Use the sympy gaunt function run results as the test set. -* Test set results are stored in Gaunt.txt with data structure -* l1 l2 l3 m1 m2 m3 gaunt(l1,l2,l3,m1,m2,m3). -* Double precision machine error (1e-15) is used to compare the -* accuracy of the function in abacus and the gaunt function in sumpy. -*/ -struct gaunt_ans{ + * @brief gaunt function test: + * Use the sympy gaunt function run results as the test set. + * Test set results are stored in Gaunt.txt with data structure + * l1 l2 l3 m1 m2 m3 gaunt(l1,l2,l3,m1,m2,m3). + * Double precision machine error (1e-15) is used to compare the + * accuracy of the function in abacus and the gaunt function in sumpy. + */ +struct gaunt_ans +{ int l1; int l2; int l3; @@ -168,9 +178,7 @@ struct gaunt_ans{ int m2; int m3; double gaunt; -}typedef gaunt_ans; - - +} typedef gaunt_ans; // the length of the values in gaunt.txt #define len_gaunt 7242 @@ -179,92 +187,115 @@ TEST_F(RealGauntTableTest, Check3) gaunt_ans ga_ref[len_gaunt]; gaunt_ans ga_func[len_gaunt]; - - int len=len_gaunt; - std::ifstream infile("../../../../../source/module_basis/module_nao/test/gaunt.txt"); - if (!infile) { - EXPECT_NEAR(0,1,tol); + int len = len_gaunt; + std::ifstream infile("../../../../../source/module_basis/module_nao/test/gaunt.txt"); + if (!infile) + { + EXPECT_NEAR(0, 1, tol); } double tmp; - for(int i=0;i>ga_ref[i].l1>>ga_ref[i].l2>>ga_ref[i].l3>>ga_ref[i].m1>>ga_ref[i].m2>>ga_ref[i].m3>>ga_ref[i].gaunt; + for (int i = 0; i < len; i++) + { + infile >> ga_ref[i].l1 >> ga_ref[i].l2 >> ga_ref[i].l3 >> ga_ref[i].m1 >> ga_ref[i].m2 >> ga_ref[i].m3 + >> ga_ref[i].gaunt; } - int cnt=0; - const double PI = 3.14159265358979323846; + int cnt = 0; + const double PI = 3.14159265358979323846; int l_max = 10; int l3_max = 24; - for(int l1=0;l1<=l_max;l1++){ - for(int l2=l1;l2<=l_max;l2++){ - for(int l3=l2;l3<=l3_max;l3++){ - for(int m1=-l1;m1<=l1;m1++){ - for(int m2=-l2;m2<=l2;m2++){ - for(int m3=0;m3<=l3;m3++){ - double gaunt = RealGauntTable::instance().gaunt(l1,l2,l3,m1,m2,m3); + for (int l1 = 0; l1 <= l_max; l1++) + { + for (int l2 = l1; l2 <= l_max; l2++) + { + for (int l3 = l2; l3 <= l3_max; l3++) + { + for (int m1 = -l1; m1 <= l1; m1++) + { + for (int m2 = -l2; m2 <= l2; m2++) + { + for (int m3 = 0; m3 <= l3; m3++) + { + double gaunt = RealGauntTable::instance().gaunt(l1, l2, l3, m1, m2, m3); double gaunt_symmetry[20]; double tmp; int cnt_sym = 0; - if(gaunt>tol&&cnt tol && cnt < len_gaunt) + { + ga_func[cnt].l1 = l1, ga_func[cnt].l2 = l2, ga_func[cnt].l3 = l3; + ga_func[cnt].m1 = m1, ga_func[cnt].m2 = m2, ga_func[cnt].m3 = m3; + ga_func[cnt++].gaunt = gaunt; // Detects whether the values of functions omitted in the loop due to symmetry are equal - if(l3<=10){ - - gaunt_symmetry[cnt_sym++] = RealGauntTable::instance().gaunt(l2,l1,l3,m2,m1,m3); - gaunt_symmetry[cnt_sym++] = RealGauntTable::instance().gaunt(l2,l1,l3,-m2,-m1,-m3); - - gaunt_symmetry[cnt_sym++] = RealGauntTable::instance().gaunt(l2,l3,l1,m2,m3,m1); - gaunt_symmetry[cnt_sym++] = RealGauntTable::instance().gaunt(l2,l3,l1,-m2,-m3,-m1); - - gaunt_symmetry[cnt_sym++] = RealGauntTable::instance().gaunt(l1,l3,l2,m1,m3,m2); - gaunt_symmetry[cnt_sym++] = RealGauntTable::instance().gaunt(l1,l3,l2,-m1,-m3,-m2); - - gaunt_symmetry[cnt_sym++] = RealGauntTable::instance().gaunt(l3,l2,l1,m3,m2,m1); - gaunt_symmetry[cnt_sym++] = RealGauntTable::instance().gaunt(l3,l2,l1,-m3,-m2,-m1); - - gaunt_symmetry[cnt_sym++] = RealGauntTable::instance().gaunt(l3,l1,l2,m3,m1,m2); - gaunt_symmetry[cnt_sym++] = RealGauntTable::instance().gaunt(l3,l1,l2,-m3,-m1,-m2); - - gaunt_symmetry[cnt_sym++] = RealGauntTable::instance().gaunt(l1,l2,l3,-m1,-m2,-m3); - - } else{ - gaunt_symmetry[cnt_sym++] = RealGauntTable::instance().gaunt(l2,l1,l3,m2,m1,m3); - gaunt_symmetry[cnt_sym++] = RealGauntTable::instance().gaunt(l2,l1,l3,-m2,-m1,-m3); - gaunt_symmetry[cnt_sym++] = RealGauntTable::instance().gaunt(l1,l2,l3,-m1,-m2,-m3); + if (l3 <= 10) + { + + gaunt_symmetry[cnt_sym++] + = RealGauntTable::instance().gaunt(l2, l1, l3, m2, m1, m3); + gaunt_symmetry[cnt_sym++] + = RealGauntTable::instance().gaunt(l2, l1, l3, -m2, -m1, -m3); + + gaunt_symmetry[cnt_sym++] + = RealGauntTable::instance().gaunt(l2, l3, l1, m2, m3, m1); + gaunt_symmetry[cnt_sym++] + = RealGauntTable::instance().gaunt(l2, l3, l1, -m2, -m3, -m1); + + gaunt_symmetry[cnt_sym++] + = RealGauntTable::instance().gaunt(l1, l3, l2, m1, m3, m2); + gaunt_symmetry[cnt_sym++] + = RealGauntTable::instance().gaunt(l1, l3, l2, -m1, -m3, -m2); + + gaunt_symmetry[cnt_sym++] + = RealGauntTable::instance().gaunt(l3, l2, l1, m3, m2, m1); + gaunt_symmetry[cnt_sym++] + = RealGauntTable::instance().gaunt(l3, l2, l1, -m3, -m2, -m1); + + gaunt_symmetry[cnt_sym++] + = RealGauntTable::instance().gaunt(l3, l1, l2, m3, m1, m2); + gaunt_symmetry[cnt_sym++] + = RealGauntTable::instance().gaunt(l3, l1, l2, -m3, -m1, -m2); + + gaunt_symmetry[cnt_sym++] + = RealGauntTable::instance().gaunt(l1, l2, l3, -m1, -m2, -m3); + } + else + { + gaunt_symmetry[cnt_sym++] + = RealGauntTable::instance().gaunt(l2, l1, l3, m2, m1, m3); + gaunt_symmetry[cnt_sym++] + = RealGauntTable::instance().gaunt(l2, l1, l3, -m2, -m1, -m3); + gaunt_symmetry[cnt_sym++] + = RealGauntTable::instance().gaunt(l1, l2, l3, -m1, -m2, -m3); + } + for (int i = 0; i < cnt_sym; i++) + { + EXPECT_NEAR(gaunt_symmetry[i], gaunt, tol); } - for(int i=0;i @@ -30,8 +30,8 @@ using ModuleBase::Sphbes; class SphbesRadialsTest : public ::testing::Test { protected: - void SetUp() {}; - void TearDown() {}; + void SetUp(){}; + void TearDown(){}; /// Object under test SphbesRadials I_radials; @@ -40,7 +40,7 @@ class SphbesRadialsTest : public ::testing::Test std::string file = "../../../../../source/module_basis/module_nao/test/I_sphbes_coeff.txt"; /// numerical tolerance for grid & values - double tol = 1e-12; + double tol = 1e-12; }; TEST_F(SphbesRadialsTest, Build) @@ -109,35 +109,42 @@ TEST_F(SphbesRadialsTest, Build2) EXPECT_EQ(I_radials.nzeta(2), nbes); EXPECT_EQ(I_radials.nzeta(3), nbes); EXPECT_EQ(I_radials.nzeta_max(), nbes); - EXPECT_EQ(I_radials.nchi(), nbes*(lmax+1)); + EXPECT_EQ(I_radials.nchi(), nbes * (lmax + 1)); - double* zeros = new double[nbes*(lmax+1)]; + double* zeros = new double[nbes * (lmax + 1)]; Sphbes::sphbes_zeros(lmax, nbes, zeros, true); - for (int l = 0; l <= lmax; ++l) { + for (int l = 0; l <= lmax; ++l) + { - for (int zeta = 0; zeta < nbes; ++zeta) { + for (int zeta = 0; zeta < nbes; ++zeta) + { // Checks whether the spherical Bessel coefficients are correct. - for (int i = 0; i < nbes; i++) { + for (int i = 0; i < nbes; i++) + { EXPECT_EQ(I_radials.coeff(l, zeta)[i], double(i == zeta)); } // Checks whether the radial grid is computed correctly. - for (int i = 0; i < I_radials.chi(l, zeta).nr(); ++i) { - double q = zeros[l*nbes+zeta] / rcut; + for (int i = 0; i < I_radials.chi(l, zeta).nr(); ++i) + { + double q = zeros[l * nbes + zeta] / rcut; EXPECT_NEAR(I_radials.chi(l, zeta).rvalue(i), - Sphbes::sphbesj(l, q * I_radials.chi(l, zeta).rgrid(i)), tol); + Sphbes::sphbesj(l, q * I_radials.chi(l, zeta).rgrid(i)), + tol); } // Checks whether the radial grid & values are computed correctly. // NOTE: the radial functions are just truncated spherical Bessel functions. - double q = zeros[l*nbes+zeta] / rcut; - for (int i = 0; i < I_radials.chi(l, zeta).nr(); ++i) { + double q = zeros[l * nbes + zeta] / rcut; + for (int i = 0; i < I_radials.chi(l, zeta).nr(); ++i) + { EXPECT_NEAR(I_radials.chi(l, zeta).rgrid(i), i * dr, tol); - + EXPECT_NEAR(I_radials.chi(l, zeta).rvalue(i), - Sphbes::sphbesj(l, q * I_radials.chi(l, zeta).rgrid(i)), tol); + Sphbes::sphbesj(l, q * I_radials.chi(l, zeta).rgrid(i)), + tol); } } } diff --git a/source/module_basis/module_nao/test/two_center_bundle_test.cpp b/source/module_basis/module_nao/test/two_center_bundle_test.cpp index a517b486d5..3dc9e76a25 100644 --- a/source/module_basis/module_nao/test/two_center_bundle_test.cpp +++ b/source/module_basis/module_nao/test/two_center_bundle_test.cpp @@ -1,8 +1,9 @@ #include "module_basis/module_nao/two_center_bundle.h" +#include "source_base/global_variable.h" +#include "source_base/ylm.h" + #include "gtest/gtest.h" -#include "module_base/ylm.h" -#include "module_base/global_variable.h" #ifdef __MPI #include @@ -32,26 +33,26 @@ void TwoCenterBundleTest::SetUp() MPI_Comm_rank(MPI_COMM_WORLD, &GlobalV::MY_RANK); #endif - //std::string dir = "../../../../../tests/PP_ORB/"; + // std::string dir = "../../../../../tests/PP_ORB/"; - //int nfile_orb = 3; - //std::string* file_orb = new std::string[nfile_orb]; - //file_orb[0] = dir + "C_gga_8au_100Ry_2s2p1d.orb"; - //file_orb[1] = dir + "Fe_gga_9au_100Ry_4s2p2d1f.orb"; - //file_orb[2] = dir + "O_gga_10au_100Ry_2s2p1d.orb"; + // int nfile_orb = 3; + // std::string* file_orb = new std::string[nfile_orb]; + // file_orb[0] = dir + "C_gga_8au_100Ry_2s2p1d.orb"; + // file_orb[1] = dir + "Fe_gga_9au_100Ry_4s2p2d1f.orb"; + // file_orb[2] = dir + "O_gga_10au_100Ry_2s2p1d.orb"; - //int nfile_pp = 3; - //std::string* file_pp = new std::string[nfile_pp]; - //file_pp[0] = dir + "C_ONCV_PBE-1.0.upf"; - //file_pp[1] = dir + "Fe_ONCV_PBE-1.0.upf"; - //file_pp[2] = dir + "O_ONCV_PBE-1.0.upf"; + // int nfile_pp = 3; + // std::string* file_pp = new std::string[nfile_pp]; + // file_pp[0] = dir + "C_ONCV_PBE-1.0.upf"; + // file_pp[1] = dir + "Fe_ONCV_PBE-1.0.upf"; + // file_pp[2] = dir + "O_ONCV_PBE-1.0.upf"; - //int nfile_desc = 0; + // int nfile_desc = 0; - //bundle.build(nfile_orb, file_orb, nfile_pp, file_pp, nfile_desc, nullptr); + // bundle.build(nfile_orb, file_orb, nfile_pp, file_pp, nfile_desc, nullptr); - //delete[] file_orb; - //delete[] file_pp; + // delete[] file_orb; + // delete[] file_pp; } void TwoCenterBundleTest::TearDown() @@ -61,20 +62,20 @@ void TwoCenterBundleTest::TearDown() TEST_F(TwoCenterBundleTest, Build) { // transfer ownership to ovl - //TwoCenterIntegrator* ovl = bundle.overlap_orb.release(); - //TwoCenterIntegrator* psibeta = bundle.overlap_orb_beta.release(); - //TwoCenterIntegrator* kin = bundle.kinetic_orb.release(); + // TwoCenterIntegrator* ovl = bundle.overlap_orb.release(); + // TwoCenterIntegrator* psibeta = bundle.overlap_orb_beta.release(); + // TwoCenterIntegrator* kin = bundle.kinetic_orb.release(); - //ModuleBase::Vector3 vR0 = {0.0, 0.0, 0.0}; - //double out; - //ovl->calculate(0, 0, 0, 0, 0, 0, 0, 0, vR0, false, &out); - //std::cout << "out = " << out << std::endl; + // ModuleBase::Vector3 vR0 = {0.0, 0.0, 0.0}; + // double out; + // ovl->calculate(0, 0, 0, 0, 0, 0, 0, 0, vR0, false, &out); + // std::cout << "out = " << out << std::endl; - //psibeta->calculate(0, 0, 0, 0, 0, 0, 0, 0, vR0, false, &out); - //std::cout << "out = " << out << std::endl; + // psibeta->calculate(0, 0, 0, 0, 0, 0, 0, 0, vR0, false, &out); + // std::cout << "out = " << out << std::endl; - //kin->calculate(0, 0, 0, 0, 0, 0, 0, 0, vR0, false, &out); - //std::cout << "out = " << out << std::endl; + // kin->calculate(0, 0, 0, 0, 0, 0, 0, 0, vR0, false, &out); + // std::cout << "out = " << out << std::endl; } int main(int argc, char** argv) diff --git a/source/module_basis/module_nao/test/two_center_integrator_test.cpp b/source/module_basis/module_nao/test/two_center_integrator_test.cpp index c616504eed..b0f8a8bf1c 100644 --- a/source/module_basis/module_nao/test/two_center_integrator_test.cpp +++ b/source/module_basis/module_nao/test/two_center_integrator_test.cpp @@ -1,10 +1,10 @@ #include "module_basis/module_nao/two_center_integrator.h" -#include "module_base/constants.h" -#include "module_base/math_sphbes.h" -#include "module_base/spherical_bessel_transformer.h" -#include "module_base/vector3.h" -#include "module_base/ylm.h" +#include "source_base/constants.h" +#include "source_base/math_sphbes.h" +#include "source_base/spherical_bessel_transformer.h" +#include "source_base/vector3.h" +#include "source_base/ylm.h" #include "gtest/gtest.h" #include diff --git a/source/module_basis/module_nao/test/two_center_table_test.cpp b/source/module_basis/module_nao/test/two_center_table_test.cpp index 554f1cce3f..1fc2afa005 100644 --- a/source/module_basis/module_nao/test/two_center_table_test.cpp +++ b/source/module_basis/module_nao/test/two_center_table_test.cpp @@ -1,8 +1,8 @@ #include "module_basis/module_nao/two_center_table.h" -#include "module_base/constants.h" -#include "module_base/math_integral.h" -#include "module_base/spherical_bessel_transformer.h" +#include "source_base/constants.h" +#include "source_base/math_integral.h" +#include "source_base/spherical_bessel_transformer.h" #include "gtest/gtest.h" #include diff --git a/source/module_basis/module_nao/two_center_bundle.cpp b/source/module_basis/module_nao/two_center_bundle.cpp index e01ad1bfa2..8ac1569c13 100644 --- a/source/module_basis/module_nao/two_center_bundle.cpp +++ b/source/module_basis/module_nao/two_center_bundle.cpp @@ -1,11 +1,11 @@ #include "module_basis/module_nao/two_center_bundle.h" -#include "module_base/global_variable.h" -#include "module_base/memory.h" -#include "module_base/parallel_common.h" -#include "module_base/ylm.h" #include "module_basis/module_nao/real_gaunt_table.h" #include "module_parameter/parameter.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" +#include "source_base/parallel_common.h" +#include "source_base/ylm.h" #include @@ -63,29 +63,49 @@ void TwoCenterBundle::tabulate() { ModuleBase::SphericalBesselTransformer sbt(true); orb_->set_transformer(sbt); - if (beta_) { beta_->set_transformer(sbt); } - if (alpha_) { + if (beta_) + { + beta_->set_transformer(sbt); + } + if (alpha_) + { alpha_->set_transformer(sbt); -} - if (orb_onsite_) { + } + if (orb_onsite_) + { orb_onsite_->set_transformer(sbt); -} + } //================================================================ // build two-center integration tables //================================================================ // set up a universal radial grid double rmax = orb_->rcut_max(); - if (beta_) { rmax = std::max(rmax, beta_->rcut_max()); } - if (alpha_) { rmax = std::max(rmax, alpha_->rcut_max()); } + if (beta_) + { + rmax = std::max(rmax, beta_->rcut_max()); + } + if (alpha_) + { + rmax = std::max(rmax, alpha_->rcut_max()); + } double dr = 0.01; double cutoff = 2.0 * rmax; int nr = static_cast(rmax / dr) + 1; orb_->set_uniform_grid(true, nr, cutoff, 'i', true); - if (beta_) { beta_->set_uniform_grid(true, nr, cutoff, 'i', true); } - if (alpha_) { alpha_->set_uniform_grid(true, nr, cutoff, 'i', true);} - if (orb_onsite_) { orb_onsite_->set_uniform_grid(true, nr, cutoff, 'i', true);} + if (beta_) + { + beta_->set_uniform_grid(true, nr, cutoff, 'i', true); + } + if (alpha_) + { + alpha_->set_uniform_grid(true, nr, cutoff, 'i', true); + } + if (orb_onsite_) + { + orb_onsite_->set_uniform_grid(true, nr, cutoff, 'i', true); + } // build TwoCenterIntegrator objects kinetic_orb = std::unique_ptr(new TwoCenterIntegrator); @@ -129,12 +149,14 @@ void TwoCenterBundle::tabulate(const double lcao_ecut, ModuleBase::SphericalBesselTransformer sbt(true); orb_->set_transformer(sbt); beta_->set_transformer(sbt); - if (alpha_) { + if (alpha_) + { alpha_->set_transformer(sbt); -} - if (orb_onsite_) { + } + if (orb_onsite_) + { orb_onsite_->set_transformer(sbt); -} + } //================================================================ // build two-center integration tables diff --git a/source/module_basis/module_nao/two_center_integrator.cpp b/source/module_basis/module_nao/two_center_integrator.cpp index cfacc0f07a..df36590e8e 100644 --- a/source/module_basis/module_nao/two_center_integrator.cpp +++ b/source/module_basis/module_nao/two_center_integrator.cpp @@ -1,12 +1,10 @@ #include "module_basis/module_nao/two_center_integrator.h" -#include "module_base/vector3.h" -#include "module_base/ylm.h" -#include "module_base/array_pool.h" +#include "source_base/array_pool.h" +#include "source_base/vector3.h" +#include "source_base/ylm.h" -TwoCenterIntegrator::TwoCenterIntegrator(): - is_tabulated_(false), - op_('\0') +TwoCenterIntegrator::TwoCenterIntegrator() : is_tabulated_(false), op_('\0') { } @@ -22,25 +20,27 @@ void TwoCenterIntegrator::tabulate(const RadialCollection& bra, is_tabulated_ = true; } -void TwoCenterIntegrator::calculate(const int itype1, - const int l1, - const int izeta1, - const int m1, +void TwoCenterIntegrator::calculate(const int itype1, + const int l1, + const int izeta1, + const int m1, const int itype2, const int l2, const int izeta2, const int m2, - const ModuleBase::Vector3& vR, // R = R2 - R1 + const ModuleBase::Vector3& vR, // R = R2 - R1 double* out, double* grad_out) const { #ifdef __DEBUG - assert( is_tabulated_ ); - assert( out || grad_out ); + assert(is_tabulated_); + assert(out || grad_out); #endif - if (out) *out = 0.0; - if (grad_out) std::fill(grad_out, grad_out + 3, 0.0); + if (out) + *out = 0.0; + if (grad_out) + std::fill(grad_out, grad_out + 3, 0.0); double R = vR.norm(); if (R > table_.rmax()) @@ -53,12 +53,13 @@ void TwoCenterIntegrator::calculate(const int itype1, // generate all necessary real (solid) spherical harmonics const int lmax = l1 + l2; - std::vector Rl_Y((lmax+1) * (lmax+1)); - ModuleBase::Array_Pool grad_Rl_Y((lmax+1) * (lmax+1), 3); + std::vector Rl_Y((lmax + 1) * (lmax + 1)); + ModuleBase::Array_Pool grad_Rl_Y((lmax + 1) * (lmax + 1), 3); // R^l * Y is necessary anyway ModuleBase::Ylm::rl_sph_harm(l1 + l2, vR[0], vR[1], vR[2], Rl_Y); - if (grad_out) ModuleBase::Ylm::grad_rl_sph_harm(l1 + l2, vR[0], vR[1], vR[2], Rl_Y.data(), grad_Rl_Y.get_ptr_2D()); + if (grad_out) + ModuleBase::Ylm::grad_rl_sph_harm(l1 + l2, vR[0], vR[1], vR[2], Rl_Y.data(), grad_Rl_Y.get_ptr_2D()); double tmp[2] = {0.0, 0.0}; double* S_by_Rl = tmp; @@ -71,7 +72,7 @@ void TwoCenterIntegrator::calculate(const int itype1, // look up S/R^l and (d/dR)(S/R^l) (if necessary) from the radial table table_.lookup(itype1, l1, izeta1, itype2, l2, izeta2, l, R, S_by_Rl, d_S_by_Rl); - for (int m = -l; m <= l; ++m) + for (int m = -l; m <= l; ++m) { double G = RealGauntTable::instance()(l1, l2, l, m1, m2, m); @@ -84,8 +85,9 @@ void TwoCenterIntegrator::calculate(const int itype1, { for (int i = 0; i < 3; ++i) { - grad_out[i] += sign * G * ( (*d_S_by_Rl) * uR[i] * Rl_Y[ylm_index(l, m)] - + (*S_by_Rl) * grad_Rl_Y[ylm_index(l, m)][i] ); + grad_out[i] += sign * G + * ((*d_S_by_Rl) * uR[i] * Rl_Y[ylm_index(l, m)] + + (*S_by_Rl) * grad_Rl_Y[ylm_index(l, m)][i]); } } } @@ -93,17 +95,17 @@ void TwoCenterIntegrator::calculate(const int itype1, } } -void TwoCenterIntegrator::snap(const int itype1, - const int l1, - const int izeta1, - const int m1, +void TwoCenterIntegrator::snap(const int itype1, + const int l1, + const int izeta1, + const int m1, const int itype2, - const ModuleBase::Vector3& vR, + const ModuleBase::Vector3& vR, const bool deriv, std::vector>& out) const { #ifdef __DEBUG - assert( is_tabulated_ ); + assert(is_tabulated_); #endif out.resize(deriv ? 4 : 1); @@ -120,11 +122,11 @@ void TwoCenterIntegrator::snap(const int itype1, return; } - for(size_t i = 0; i < out.size(); ++i) - { - out[i].resize(num_ket); + for (size_t i = 0; i < out.size(); ++i) + { + out[i].resize(num_ket); std::fill(out[i].begin(), out[i].end(), 0.0); - } + } int index = 0; double tmp[3] = {0.0, 0.0, 0.0}; @@ -135,7 +137,7 @@ void TwoCenterIntegrator::snap(const int itype1, // NOTE: here the order of m is consistent with the rest of ABACUS // i.e., 0, 1, -1, 2, -2, 3, -3, ... // whether it should be rearranged to -l, -l+1, ..., l will be studied later - for (int mm2 = 0; mm2 <= 2*l2; ++mm2) + for (int mm2 = 0; mm2 <= 2 * l2; ++mm2) { int m2 = (mm2 % 2 == 0) ? -mm2 / 2 : (mm2 + 1) / 2; calculate(itype1, l1, izeta1, m1, itype2, l2, izeta2, m2, vR, &out[0][index], deriv ? tmp : nullptr); diff --git a/source/module_basis/module_nao/two_center_integrator.h b/source/module_basis/module_nao/two_center_integrator.h index 0dd0c69a1c..222a75769b 100644 --- a/source/module_basis/module_nao/two_center_integrator.h +++ b/source/module_basis/module_nao/two_center_integrator.h @@ -1,19 +1,19 @@ #ifndef TWO_CENTER_INTEGRATOR_H_ #define TWO_CENTER_INTEGRATOR_H_ -#include "module_basis/module_nao/two_center_table.h" -#include "module_basis/module_nao/real_gaunt_table.h" #include "module_basis/module_nao/radial_collection.h" -#include "module_base/vector3.h" +#include "module_basis/module_nao/real_gaunt_table.h" +#include "module_basis/module_nao/two_center_table.h" +#include "source_base/vector3.h" /*! * @brief A class to compute two-center integrals * * This class computes two-center integrals * - * / + * / * I(R) = | dr phi1(r) (op) phi2(r - R) - * / + * / * * as well as their gradients, where op is 1 (overlap) or minus Laplacian (kinetic), * and phi1, phi2 are "atomic-orbital-like" functions of the form @@ -22,8 +22,8 @@ * * where chi is some numerical radial function and Ylm is some real spherical harmonics. * - * This class is designed to efficiently compute the two-center integrals between - * two "collections" of the above functions with various R, e.g., the overlap integrals + * This class is designed to efficiently compute the two-center integrals between + * two "collections" of the above functions with various R, e.g., the overlap integrals * between all numerical atomic orbitals and all Kleinman-Bylander nonlocal projectors, * the overlap & kinetic integrals between all numerical atomic orbitals, etc. * This is done by tabulating the radial part of the integrals on an r-space grid and @@ -38,7 +38,9 @@ class TwoCenterIntegrator TwoCenterIntegrator(const TwoCenterIntegrator&) = delete; TwoCenterIntegrator& operator=(const TwoCenterIntegrator&) = delete; - ~TwoCenterIntegrator() {} + ~TwoCenterIntegrator() + { + } /*! * @brief Tabulates the radial part of a two-center integral. @@ -53,17 +55,16 @@ class TwoCenterIntegrator const RadialCollection& ket, const char op, const int nr, - const double cutoff - ); + const double cutoff); /*! * @brief Compute the two-center integrals. * * This function calculates the two-center integral * - * / + * / * I(R) = | dr phi1(r) (op_) phi2(r - R) - * / + * / * * or its gradient by using the tabulated radial part and real Gaunt coefficients. * @@ -84,18 +85,17 @@ class TwoCenterIntegrator * * @note out and grad_out cannot be both nullptr. * */ - void calculate(const int itype1, - const int l1, - const int izeta1, - const int m1, + void calculate(const int itype1, + const int l1, + const int izeta1, + const int m1, const int itype2, const int l2, const int izeta2, const int m2, - const ModuleBase::Vector3& vR, // vR = R2 - R1 + const ModuleBase::Vector3& vR, // vR = R2 - R1 double* out = nullptr, - double* grad_out = nullptr - ) const; + double* grad_out = nullptr) const; /*! * @brief Compute a batch of two-center integrals. @@ -103,18 +103,20 @@ class TwoCenterIntegrator * This function calculates the two-center integrals (and optionally their gradients) * between one orbital and all orbitals of a certain type from the other collection. * */ - void snap(const int itype1, - const int l1, - const int izeta1, - const int m1, + void snap(const int itype1, + const int l1, + const int izeta1, + const int m1, const int itype2, - const ModuleBase::Vector3& vR, // vR = R2 - R1 + const ModuleBase::Vector3& vR, // vR = R2 - R1 const bool deriv, - std::vector>& out - ) const; + std::vector>& out) const; /// Returns the amount of heap memory used by table_ (in bytes). - size_t table_memory() const { return table_.memory(); } + size_t table_memory() const + { + return table_.memory(); + } private: bool is_tabulated_; diff --git a/source/module_basis/module_nao/two_center_table.cpp b/source/module_basis/module_nao/two_center_table.cpp index f5f6e07193..a2b5db84c0 100644 --- a/source/module_basis/module_nao/two_center_table.cpp +++ b/source/module_basis/module_nao/two_center_table.cpp @@ -1,8 +1,8 @@ #include "module_basis/module_nao/two_center_table.h" -#include "module_base/constants.h" -#include "module_base/cubic_spline.h" -#include "module_base/math_integral.h" +#include "source_base/constants.h" +#include "source_base/cubic_spline.h" +#include "source_base/math_integral.h" #include #include diff --git a/source/module_basis/module_nao/two_center_table.h b/source/module_basis/module_nao/two_center_table.h index dff8a21502..6d2a824d04 100644 --- a/source/module_basis/module_nao/two_center_table.h +++ b/source/module_basis/module_nao/two_center_table.h @@ -1,24 +1,28 @@ #ifndef TWO_CENTER_TABLE_H #define TWO_CENTER_TABLE_H -#include -#include "module_base/spherical_bessel_transformer.h" #include "module_basis/module_nao/radial_collection.h" +#include "source_base/spherical_bessel_transformer.h" + +#include class TwoCenterTable { public: TwoCenterTable() = default; - ~TwoCenterTable() { delete[] rgrid_; } + ~TwoCenterTable() + { + delete[] rgrid_; + } TwoCenterTable(const TwoCenterTable&) = delete; TwoCenterTable& operator=(const TwoCenterTable&) = delete; - void build(const RadialCollection& bra, //!< [in] radial collection involved in - const RadialCollection& ket, //!< [in] radial collection involved in - const char op, //!< [in] operator of the two-center integral - const int nr, //!< [in] number of table grid points - const double cutoff //!< [in] cutoff radius of the table + void build(const RadialCollection& bra, //!< [in] radial collection involved in + const RadialCollection& ket, //!< [in] radial collection involved in + const char op, //!< [in] operator of the two-center integral + const int nr, //!< [in] number of table grid points + const double cutoff //!< [in] cutoff radius of the table ); /*! @@ -26,16 +30,28 @@ class TwoCenterTable * */ //!@{ //! returns the operator of the two-center integral - char op() const { return op_; } + char op() const + { + return op_; + } //! returns the number of radial points of each table - int nr() const { return nr_; } + int nr() const + { + return nr_; + } // returns the number of table entries - int ntab() const { return ntab_; } + int ntab() const + { + return ntab_; + } //! returns the radius cutoff of the table - double rmax() const { return rmax_; } + double rmax() const + { + return rmax_; + } //! gets the read-only pointer to a specific table const double* table(const int itype1, //!< [in] element index of chi1 @@ -74,19 +90,23 @@ class TwoCenterTable } /// maximum angular momentum of the ket - int lmax_ket() const { return nchi_ket_.shape().dim_size(1) - 1; } + int lmax_ket() const + { + return nchi_ket_.shape().dim_size(1) - 1; + } /// Returns the amount of heap memory used by this class (in bytes). - size_t memory() const { - return (table_.NumElements() + dtable_.NumElements() - + nchi_ket_.NumElements() + index_map_.NumElements() + nr_) * sizeof(double); + size_t memory() const + { + return (table_.NumElements() + dtable_.NumElements() + nchi_ket_.NumElements() + index_map_.NumElements() + nr_) + * sizeof(double); } private: - char op_ = '\0'; //!< operator associated with the present table - int ntab_ = 0; //!< number of table entries - int nr_ = 0; //!< number of radial points of each table - double rmax_= 0.0; //!< cutoff radius of the table + char op_ = '\0'; //!< operator associated with the present table + int ntab_ = 0; //!< number of table entries + int nr_ = 0; //!< number of radial points of each table + double rmax_ = 0.0; //!< cutoff radius of the table double* rgrid_ = nullptr; /// Table of size ntype x lmax that stores the number of radial functions of given type and l @@ -119,12 +139,10 @@ class TwoCenterTable /// double factorial double dfact(int l) const; - typedef void(TwoCenterTable::*looped_func)(const NumericalRadial*, const NumericalRadial*, const int l); + typedef void (TwoCenterTable::*looped_func)(const NumericalRadial*, const NumericalRadial*, const int l); /// loop-execute a function over all pairwise radial functions & l with non-vanishing Gaunt coefficients - void two_center_loop(const RadialCollection& bra, - const RadialCollection& ket, - looped_func f); + void two_center_loop(const RadialCollection& bra, const RadialCollection& ket, looped_func f); /// various looped functions during the construction of table void _indexing(const NumericalRadial* it1, const NumericalRadial* it2, const int l); diff --git a/source/module_basis/module_pw/kernels/test/CMakeLists.txt b/source/module_basis/module_pw/kernels/test/CMakeLists.txt index b0c35b294a..861474785a 100644 --- a/source/module_basis/module_pw/kernels/test/CMakeLists.txt +++ b/source/module_basis/module_pw/kernels/test/CMakeLists.txt @@ -4,10 +4,10 @@ AddTest( TARGET PW_Kernels_UTs LIBS parameter ${math_libs} psi device SOURCES pw_op_test.cpp - ../../../../module_base/tool_quit.cpp ../../../../module_base/global_variable.cpp - ../../../../module_base/parallel_global.cpp ../../../../module_base/parallel_reduce.cpp - ../../../../module_base/parallel_comm.cpp - ../../../../module_base/complexmatrix.cpp ../../../../module_base/matrix.cpp ../../../../module_base/memory.cpp - ../../../../module_base/libm/branred.cpp ../../../../module_base/libm/sincos.cpp - ../../../../module_base/blas_connector_base.cpp ../../../../module_base/blas_connector_vector.cpp ../../../../module_base/blas_connector_matrix.cpp + ../../../../source_base/tool_quit.cpp ../../../../source_base/global_variable.cpp + ../../../../source_base/parallel_global.cpp ../../../../source_base/parallel_reduce.cpp + ../../../../source_base/parallel_comm.cpp + ../../../../source_base/complexmatrix.cpp ../../../../source_base/matrix.cpp ../../../../source_base/memory.cpp + ../../../../source_base/libm/branred.cpp ../../../../source_base/libm/sincos.cpp + ../../../../source_base/blas_connector_base.cpp ../../../../source_base/blas_connector_vector.cpp ../../../../source_base/blas_connector_matrix.cpp ) \ No newline at end of file diff --git a/source/module_basis/module_pw/kernels/test/pw_op_test.cpp b/source/module_basis/module_pw/kernels/test/pw_op_test.cpp index e9bc07bd9e..496c38ab00 100644 --- a/source/module_basis/module_pw/kernels/test/pw_op_test.cpp +++ b/source/module_basis/module_pw/kernels/test/pw_op_test.cpp @@ -1,6 +1,6 @@ #include "module_basis/module_pw/kernels/pw_op.h" -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/memory_op.h" #include #include @@ -8,20 +8,6971 @@ class TestModulePWPWMultiDevice : public ::testing::Test { protected: - const int npwk = 59; const int nxyz = 1728; const bool add = false; const double factor = 1.0; - const std::vector box_index = {10, 11, 0, 1, 2, 23, 12, 13, 14, 24, 25, 131, 120, 142, 143, 132, 133, 155, 144, 145, 146, 167, 156, 157, 158, 168, 169, 170, 287, 276, 277, 288, 289, 300, 301, 302, 313, 314, 1451, 1440, 1570, 1571, 1582, 1583, 1572, 1594, 1595, 1584, 1585, 1607, 1596, 1597, 1714, 1715, 1704, 1726, 1727, 1716, 1717}; - const std::vector > in_1 = {{-0.0157932, -0}, {0.140385, 0}, {1.15637, 0}, {0.140385, 0}, {-0.0157932, -0}, {-0.00612284, -0}, {0.140385, 0}, {0.0746255, 0}, {-0.0151924, -0}, {-0.0157932, -0}, {-0.0151924, -0}, {-0.0151924, -0}, {-0.0157932, -0}, {-0.0151924, -0}, {0.0746255, 0}, {0.140385, 0}, {-0.00612284, -0}, {-0.00612284, -0}, {0.140385, 0}, {0.0746255, 0}, {-0.0151924, -0}, {-0.0151924, -0}, {0.0746255, 0}, {0.140385, 0}, {-0.00612284, -0}, {-0.0151924, -0}, {-0.00612284, -0}, {-0.0151924, -0}, {-0.0151924, -0}, {-0.00612284, -0}, {-0.0151924, -0}, {-0.0157932, -0}, {-0.0151924, -0}, {-0.0151924, -0}, {-0.00612284, -0}, {-0.0151924, -0}, {-0.0151924, -0}, {-0.0157932, -0}, {-0.0151924, -0}, {-0.0157932, -0}, {-0.0157932, -0}, {-0.0151924, -0}, {-0.0151924, -0}, {-0.00612284, -0}, {-0.0151924, -0}, {-0.0151924, -0}, {0.0746255, 0}, {0.140385, 0}, {-0.00612284, -0}, {-0.0151924, -0}, {-0.00612284, -0}, {-0.0151924, -0}, {-0.0151924, -0}, {-0.00612284, -0}, {-0.0151924, -0}, {-0.00612284, -0}, {0.140385, 0}, {0.0746255, 0}, {-0.0151924, -0}}; - const std::vector > out_1 = {{1.15637, 0}, {0.140385, 0}, {-0.0157932, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0157932, -0}, {0.140385, 0}, {0.140385, 0}, {0.0746255, 0}, {-0.0151924, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.00612284, -0}, {-0.0157932, -0}, {-0.0151924, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0157932, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0151924, -0}, {0.140385, 0}, {-0.00612284, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0151924, -0}, {0.0746255, 0}, {0.140385, 0}, {0.0746255, 0}, {-0.0151924, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.00612284, -0}, {0.0746255, 0}, {0.140385, 0}, {-0.00612284, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0151924, -0}, {-0.0151924, -0}, {-0.00612284, -0}, {-0.0151924, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.00612284, -0}, {-0.0151924, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0151924, -0}, {-0.0157932, -0}, {-0.0151924, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0151924, -0}, {-0.00612284, -0}, {-0.0151924, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0151924, -0}, {-0.0157932, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0157932, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0151924, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0157932, -0}, {-0.0151924, -0}, {-0.0151924, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0151924, -0}, {-0.00612284, -0}, {0.140385, 0}, {-0.00612284, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0151924, -0}, {0.0746255, 0}, {-0.00612284, -0}, {-0.0151924, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0151924, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0151924, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.0151924, -0}, {-0.00612284, -0}, {0.0746255, 0}, {-0.0151924, -0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-0.00612284, -0}, {0.140385, 0}}; - const std::vector > in_2 = {{2.16277, 0}, {2.17701, 0}, {2.14383, 0}, {1.92793, 0}, {1.51507, 0}, {1.08798, -2.4037e-17}, {0.905261, 0}, {1.08798, 0}, {1.51507, 0}, {1.92793, 2.4037e-17}, {2.14383, 0}, {2.17701, 0}, {2.17701, 0}, {2.16623, 5.55112e-17}, {2.03322, 0}, {1.69928, 0}, {1.25388, 0}, {0.930725, -2.77556e-17}, {0.930725, 0}, {1.25388, 0}, {1.69928, 0}, {2.03322, -2.77556e-17}, {2.16623, 0}, {2.17701, 0}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 0}, {0.981652, 0}, {0.824264, 0}, {0.981652, 0}, {1.36223, 0}, {1.76522, 0}, {2.03322, 0}, {2.14383, 0}, {2.16623, 0}, {1.92793, 0}, {1.69928, 0}, {1.36223, 0}, {1.00712, 0}, {0.775362, 0}, {0.775362, 1.20185e-17}, {1.00712, 0}, {1.36223, 0}, {1.69928, 0}, {1.92793, -1.20185e-17}, {2.03322, 0}, {2.03322, 0}, {1.51507, 0}, {1.25388, 0}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, {0.775362, -4.50694e-18}, {0.981652, 0}, {1.25388, 0}, {1.51507, 0}, {1.69928, 4.50694e-18}, {1.76522, 0}, {1.69928, 0}, {1.08798, 0}, {0.930725, -2.77556e-17}, {0.824264, 0}, {0.775362, 0}, {0.775362, 0}, {0.824264, 1.38778e-17}, {0.930725, 0}, {1.08798, 0}, {1.25388, 0}, {1.36223, 1.38778e-17}, {1.36223, 0}, {1.25388, 0}, {0.905261, 0}, {0.930725, 0}, {0.981652, 0}, {1.00712, 0}, {0.981652, 0}, {0.930725, 0}, {0.905261, 0}, {0.930725, 0}, {0.981652, 0}, {1.00712, 0}, {0.981652, 0}, {0.930725, 0}, {1.08798, 0}, {1.25388, 0}, {1.36223, 0}, {1.36223, 0}, {1.25388, 0}, {1.08798, 0}, {0.930725, 0}, {0.824264, 0}, {0.775362, 0}, {0.775362, 0}, {0.824264, 0}, {0.930725, 0}, {1.51507, 0}, {1.69928, -2.77556e-17}, {1.76522, 0}, {1.69928, 0}, {1.51507, 0}, {1.25388, 1.38778e-17}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, {0.775362, 1.38778e-17}, {0.981652, 0}, {1.25388, 0}, {1.92793, 0}, {2.03322, 0}, {2.03322, 0}, {1.92793, 0}, {1.69928, 0}, {1.36223, 0}, {1.00712, 0}, {0.775362, 0}, {0.775362, 0}, {1.00712, 0}, {1.36223, 0}, {1.69928, 0}, {2.14383, 0}, {2.16623, -3.54439e-19}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 1.77219e-19}, {0.981652, 0}, {0.824264, 0}, {0.981652, 0}, {1.36223, 1.77219e-19}, {1.76522, 0}, {2.03322, 0}, {2.17701, 0}, {2.17701, 0}, {2.16623, 0}, {2.03322, 0}, {1.69928, 0}, {1.25388, 0}, {0.930725, 0}, {0.930725, 0}, {1.25388, 0}, {1.69928, 0}, {2.03322, 0}, {2.16623, 0}, {2.17701, -6.93889e-18}, {2.16623, -6.93889e-18}, {2.03322, -6.93889e-18}, {1.69928, -6.93889e-18}, {1.25388, -6.93889e-18}, {0.930725, -3.09759e-17}, {0.930725, -6.93889e-18}, {1.25388, -6.93889e-18}, {1.69928, -6.93889e-18}, {2.03322, 1.70981e-17}, {2.16623, -6.93889e-18}, {2.17701, -6.93889e-18}, {2.16623, 0}, {2.07555, 0}, {1.82256, 0}, {1.42048, 0}, {1.03162, 0}, {0.869317, -2.4037e-17}, {1.03162, 0}, {1.42048, 0}, {1.82256, 0}, {2.07555, 2.4037e-17}, {2.16623, 0}, {2.17945, 0}, {2.03322, 0}, {1.82256, -5.55112e-17}, {1.48405, 0}, {1.1084, 0}, {0.85665, 0}, {0.85665, 2.77556e-17}, {1.1084, 0}, {1.48405, 0}, {1.82256, 0}, {2.03322, 2.77556e-17}, {2.11997, 0}, {2.11997, 0}, {1.69928, 0}, {1.42048, 0}, {1.1084, 0}, {0.858837, 0}, {0.763031, 0}, {0.858837, 0}, {1.1084, 0}, {1.42048, 0}, {1.69928, 0}, {1.88226, 0}, {1.94478, 0}, {1.88226, 0}, {1.25388, 3.46945e-18}, {1.03162, -2.42861e-17}, {0.85665, 3.46945e-18}, {0.763031, 3.46945e-18}, {0.763031, 3.46945e-18}, {0.85665, 1.73472e-17}, {1.03162, 3.46945e-18}, {1.25388, 3.46945e-18}, {1.46388, 3.46945e-18}, {1.59252, 1.73472e-17}, {1.59252, 3.46945e-18}, {1.46388, 3.46945e-18}, {0.930725, -2.4037e-17}, {0.869317, -3.79148e-17}, {0.85665, -2.4037e-17}, {0.858837, -1.7563e-17}, {0.85665, -2.4037e-17}, {0.869317, -1.70981e-17}, {0.930725, -2.4037e-17}, {1.04306, -2.72741e-17}, {1.15758, -2.4037e-17}, {1.20632, -1.70981e-17}, {1.15758, -2.4037e-17}, {1.04306, -2.72741e-17}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, {1.1084, 0}, {1.03162, 0}, {0.930725, 0}, {0.864823, 0}, {0.851575, 0}, {0.862449, 0}, {0.862449, 0}, {0.851575, 0}, {0.864823, 0}, {1.25388, -2.47509e-17}, {1.42048, -3.86287e-17}, {1.48405, -1.08732e-17}, {1.42048, 3.00463e-18}, {1.25388, 1.68824e-17}, {1.04306, 4.78583e-17}, {0.851575, 3.39806e-17}, {0.72366, 2.70417e-17}, {0.679431, 1.68824e-17}, {0.72366, -2.15723e-19}, {0.851575, -1.40935e-17}, {1.04306, -2.10324e-17}, {1.69928, 3.46945e-18}, {1.82256, 1.73472e-17}, {1.82256, 3.46945e-18}, {1.69928, 3.46945e-18}, {1.46388, 3.46945e-18}, {1.15758, -3.46945e-18}, {0.862449, 3.46945e-18}, {0.679431, 3.46945e-18}, {0.679431, 3.46945e-18}, {0.862449, -3.46945e-18}, {1.15758, 3.46945e-18}, {1.46388, 3.46945e-18}, {2.03322, 2.4037e-17}, {2.07555, 2.5603e-17}, {2.03322, 2.4037e-17}, {1.88226, 2.4037e-17}, {1.59252, -2.4037e-17}, {1.20632, 2.32541e-17}, {0.862449, 2.4037e-17}, {0.72366, 2.4037e-17}, {0.862449, 7.21111e-17}, {1.20632, 2.32541e-17}, {1.59252, 2.4037e-17}, {1.88226, 2.4037e-17}, {2.16623, 0}, {2.16623, 0}, {2.11997, 0}, {1.94478, 0}, {1.59252, 0}, {1.15758, -4.80741e-17}, {0.851575, 0}, {0.851575, 0}, {1.15758, 0}, {1.59252, 4.80741e-17}, {1.94478, 0}, {2.11997, 0}, {2.17701, -1.68824e-17}, {2.17945, -3.07602e-17}, {2.11997, -3.00463e-18}, {1.88226, -3.00463e-18}, {1.46388, 3.93426e-18}, {1.04306, -1.31639e-17}, {0.864823, -3.00463e-18}, {1.04306, 9.01389e-18}, {1.46388, 3.93426e-18}, {1.88226, 3.49102e-17}, {2.11997, -3.00463e-18}, {2.17945, -1.50231e-17}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 0}, {0.981652, 0}, {0.824264, 2.4037e-17}, {0.981652, 0}, {1.36223, 0}, {1.76522, 0}, {2.03322, -2.4037e-17}, {2.14383, 0}, {2.16623, 0}, {2.03322, -2.77556e-17}, {1.82256, -2.77556e-17}, {1.48405, -2.77556e-17}, {1.1084, -2.77556e-17}, {0.85665, -2.77556e-17}, {0.85665, -3.71854e-18}, {1.1084, -2.77556e-17}, {1.48405, -2.77556e-17}, {1.82256, -2.77556e-17}, {2.03322, -5.17926e-17}, {2.11997, -2.77556e-17}, {2.11997, -2.77556e-17}, {1.76522, 0}, {1.48405, 0}, {1.16145, 0}, {0.899033, 0}, {0.797429, 0}, {0.899033, 9.01389e-18}, {1.16145, 0}, {1.48405, 0}, {1.76522, 0}, {1.94478, -9.01389e-18}, {2.00496, 0}, {1.94478, 0}, {1.36223, 0}, {1.1084, -2.77556e-17}, {0.899033, 0}, {0.782576, 0}, {0.782576, 0}, {0.899033, 1.38778e-17}, {1.1084, 0}, {1.36223, 0}, {1.59252, 0}, {1.7299, 1.38778e-17}, {1.7299, 0}, {1.59252, 0}, {0.981652, 0}, {0.85665, 2.77556e-17}, {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, {0.85665, -1.38778e-17}, {0.981652, 0}, {1.15758, 0}, {1.31866, 0}, {1.38444, -1.38778e-17}, {1.31866, 0}, {1.15758, 0}, {0.824264, 1.38778e-17}, {0.85665, 1.38778e-17}, {0.899033, 1.73472e-17}, {0.899033, 6.93889e-18}, {0.85665, 1.38778e-17}, {0.824264, 1.68824e-17}, {0.851575, 1.77767e-17}, {0.931265, 2.03519e-17}, {1.00096, 1.38778e-17}, {1.00096, 1.08732e-17}, {0.931265, 6.50938e-18}, {0.851575, 1.43426e-17}, {0.981652, 0}, {1.1084, 0}, {1.16145, 0}, {1.1084, 0}, {0.981652, 0}, {0.851575, 0}, {0.771224, 0}, {0.743927, 0}, {0.740598, 0}, {0.743927, 0}, {0.771224, 0}, {0.851575, 0}, {1.36223, 0}, {1.48405, -6.93889e-18}, {1.48405, 0}, {1.36223, 0}, {1.15758, 0}, {0.931265, 3.46945e-18}, {0.743927, 0}, {0.639427, 0}, {0.639427, 0}, {0.743927, 3.46945e-18}, {0.931265, 0}, {1.15758, 0}, {1.76522, 0}, {1.82256, 2.93165e-18}, {1.76522, 0}, {1.59252, 0}, {1.31866, 0}, {1.00096, -4.95399e-17}, {0.740598, 0}, {0.639427, 0}, {0.740598, 0}, {1.00096, 4.66082e-17}, {1.31866, 0}, {1.59252, 0}, {2.03322, 1.38778e-17}, {2.03322, 1.38778e-17}, {1.94478, 1.38778e-17}, {1.7299, 1.38778e-17}, {1.38444, 1.38778e-17}, {1.00096, 1.38778e-17}, {0.743927, 1.38778e-17}, {0.743927, 1.38778e-17}, {1.00096, 1.38778e-17}, {1.38444, 1.38778e-17}, {1.7299, 1.38778e-17}, {1.94478, 1.38778e-17}, {2.14383, 0}, {2.11997, 0}, {2.00496, 0}, {1.7299, 0}, {1.31866, 0}, {0.931265, 4.80741e-17}, {0.771224, 0}, {0.931265, 0}, {1.31866, 0}, {1.7299, -4.80741e-17}, {2.00496, 0}, {2.11997, 0}, {2.16623, 0}, {2.11997, 0}, {1.94478, 0}, {1.59252, 0}, {1.15758, 0}, {0.851575, 0}, {0.851575, 0}, {1.15758, 0}, {1.59252, 0}, {1.94478, 0}, {2.11997, 0}, {2.16623, 0}, {1.92793, 0}, {1.69928, 0}, {1.36223, 0}, {1.00712, 0}, {0.775362, 0}, {0.775362, 0}, {1.00712, 0}, {1.36223, 0}, {1.69928, 0}, {1.92793, 0}, {2.03322, 0}, {2.03322, 0}, {1.69928, -2.77556e-17}, {1.42048, -2.77556e-17}, {1.1084, -2.77556e-17}, {0.858837, -2.77556e-17}, {0.763031, -2.77556e-17}, {0.858837, -2.77556e-17}, {1.1084, -2.77556e-17}, {1.42048, -2.77556e-17}, {1.69928, -2.77556e-17}, {1.88226, -2.77556e-17}, {1.94478, -2.77556e-17}, {1.88226, -2.77556e-17}, {1.36223, 0}, {1.1084, -2.77556e-17}, {0.899033, 0}, {0.782576, 0}, {0.782576, 0}, {0.899033, 1.38778e-17}, {1.1084, 0}, {1.36223, 0}, {1.59252, 0}, {1.7299, 1.38778e-17}, {1.7299, 0}, {1.59252, 0}, {1.00712, 0}, {0.858837, 0}, {0.782576, 0}, {0.761485, 0}, {0.782576, 0}, {0.858837, 0}, {1.00712, 0}, {1.20632, 0}, {1.38444, 0}, {1.45645, 0}, {1.38444, 0}, {1.20632, 0}, {0.775362, 0}, {0.763031, 0}, {0.782576, 0}, {0.782576, 0}, {0.763031, 0}, {0.775362, 0}, {0.862449, 0}, {1.00096, 0}, {1.10759, 0}, {1.10759, 0}, {1.00096, 0}, {0.862449, 0}, {0.775362, 5.32872e-18}, {0.858837, 8.79816e-18}, {0.899033, 1.85927e-18}, {0.858837, 1.85927e-18}, {0.775362, 1.24548e-19}, {0.72366, -1.61018e-18}, {0.743927, 1.85927e-18}, {0.804389, -4.14999e-18}, {0.836162, 1.24548e-19}, {0.804389, -1.61018e-18}, {0.743927, 1.85927e-18}, {0.72366, 7.86853e-18}, {1.00712, 0}, {1.1084, 6.93889e-18}, {1.1084, 0}, {1.00712, 0}, {0.862449, 0}, {0.743927, -3.46945e-18}, {0.683306, 0}, {0.666068, 0}, {0.666068, 0}, {0.683306, -3.46945e-18}, {0.743927, 0}, {0.862449, 0}, {1.36223, 0}, {1.42048, -2.16167e-19}, {1.36223, 0}, {1.20632, 0}, {1.00096, 0}, {0.804389, 1.08084e-19}, {0.666068, 0}, {0.616617, 0}, {0.666068, 0}, {0.804389, 1.08084e-19}, {1.00096, 0}, {1.20632, 0}, {1.69928, 0}, {1.69928, 0}, {1.59252, 0}, {1.38444, 0}, {1.10759, 0}, {0.836162, 0}, {0.666068, 0}, {0.666068, 0}, {0.836162, 0}, {1.10759, 0}, {1.38444, 0}, {1.59252, 0}, {1.92793, 2.13894e-17}, {1.88226, 2.58963e-17}, {1.7299, 2.58963e-17}, {1.45645, 2.58963e-17}, {1.10759, 2.81498e-17}, {0.804389, 2.58963e-17}, {0.683306, 2.58963e-17}, {0.804389, 3.19056e-17}, {1.10759, 2.81498e-17}, {1.45645, 2.58963e-17}, {1.7299, 2.58963e-17}, {1.88226, 1.9887e-17}, {2.03322, 0}, {1.94478, 0}, {1.7299, 0}, {1.38444, 0}, {1.00096, 0}, {0.743927, 2.4037e-17}, {0.743927, 0}, {1.00096, 0}, {1.38444, 0}, {1.7299, -2.4037e-17}, {1.94478, 0}, {2.03322, 0}, {2.03322, 0}, {1.88226, -5.55112e-17}, {1.59252, 0}, {1.20632, 0}, {0.862449, 0}, {0.72366, 2.77556e-17}, {0.862449, 0}, {1.20632, 0}, {1.59252, 0}, {1.88226, 2.77556e-17}, {2.03322, 0}, {2.07555, 0}, {1.51507, 0}, {1.25388, -5.55112e-17}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, {0.775362, 3.22625e-17}, {0.981652, 0}, {1.25388, 0}, {1.51507, 0}, {1.69928, 2.32486e-17}, {1.76522, 0}, {1.69928, 0}, {1.25388, 0}, {1.03162, 2.77556e-17}, {0.85665, 0}, {0.763031, 0}, {0.763031, 0}, {0.85665, -1.38778e-17}, {1.03162, 0}, {1.25388, 0}, {1.46388, 0}, {1.59252, -1.38778e-17}, {1.59252, 0}, {1.46388, 0}, {0.981652, 0}, {0.85665, 0}, {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, {0.85665, 0}, {0.981652, 0}, {1.15758, 0}, {1.31866, 0}, {1.38444, 0}, {1.31866, 0}, {1.15758, 0}, {0.775362, 0}, {0.763031, 0}, {0.782576, 0}, {0.782576, 0}, {0.763031, 0}, {0.775362, 0}, {0.862449, 0}, {1.00096, 0}, {1.10759, 0}, {1.10759, 0}, {1.00096, 0}, {0.862449, 0}, {0.698375, 0}, {0.763031, 0}, {0.797429, 0}, {0.763031, 0}, {0.698375, 0}, {0.679431, 7.51157e-19}, {0.740598, 0}, {0.836162, 0}, {0.881874, 0}, {0.836162, -7.51157e-19}, {0.740598, 0}, {0.679431, 0}, {0.775362, 0}, {0.85665, -8.67362e-19}, {0.85665, 0}, {0.775362, 0}, {0.679431, 0}, {0.639427, 4.33681e-19}, {0.666068, 0}, {0.707352, 0}, {0.707352, 0}, {0.666068, 4.33681e-19}, {0.639427, 0}, {0.679431, 0}, {0.981652, 0}, {1.03162, 1.40862e-18}, {0.981652, 0}, {0.862449, 0}, {0.740598, 0}, {0.666068, 1.13142e-17}, {0.641509, 0}, {0.63886, 0}, {0.641509, 0}, {0.666068, -1.27228e-17}, {0.740598, 0}, {0.862449, 0}, {1.25388, 0}, {1.25388, 0}, {1.15758, 0}, {1.00096, 0}, {0.836162, 0}, {0.707352, -2.4037e-17}, {0.63886, 0}, {0.63886, 0}, {0.707352, 0}, {0.836162, 2.4037e-17}, {1.00096, 0}, {1.15758, 0}, {1.51507, 0}, {1.46388, 0}, {1.31866, 0}, {1.10759, 0}, {0.881874, 0}, {0.707352, 0}, {0.641509, 0}, {0.707352, 0}, {0.881874, 0}, {1.10759, 0}, {1.31866, 0}, {1.46388, 0}, {1.69928, 0}, {1.59252, 0}, {1.38444, 0}, {1.10759, 0}, {0.836162, 0}, {0.666068, 0}, {0.666068, 0}, {0.836162, 0}, {1.10759, 0}, {1.38444, 0}, {1.59252, 0}, {1.69928, 0}, {1.76522, 0}, {1.59252, 0}, {1.31866, 0}, {1.00096, 0}, {0.740598, 0}, {0.639427, 0}, {0.740598, 0}, {1.00096, 0}, {1.31866, 0}, {1.59252, 0}, {1.76522, 0}, {1.82256, 0}, {1.69928, 0}, {1.46388, 0}, {1.15758, 0}, {0.862449, 0}, {0.679431, 0}, {0.679431, 1.20185e-17}, {0.862449, 0}, {1.15758, 0}, {1.46388, 0}, {1.69928, -1.20185e-17}, {1.82256, 0}, {1.82256, 0}, {1.08798, 1.85927e-18}, {0.930725, 1.85927e-18}, {0.824264, 1.85927e-18}, {0.775362, 1.85927e-18}, {0.775362, 1.85927e-18}, {0.824264, 1.85927e-18}, {0.930725, 1.85927e-18}, {1.08798, 1.85927e-18}, {1.25388, 1.85927e-18}, {1.36223, 1.85927e-18}, {1.36223, 1.85927e-18}, {1.25388, 1.85927e-18}, {0.930725, 1.85927e-18}, {0.869317, 1.85927e-18}, {0.85665, 1.57371e-17}, {0.858837, 1.66044e-17}, {0.85665, 1.08732e-17}, {0.869317, 1.38778e-17}, {0.930725, 6.93889e-18}, {1.04306, -5.5133e-18}, {1.15758, -7.15462e-18}, {1.20632, -1.01592e-17}, {1.15758, -1.70981e-17}, {1.04306, -5.5133e-18}, {0.824264, -1.20185e-17}, {0.85665, -5.07962e-18}, {0.899033, -8.54907e-18}, {0.899033, -1.20185e-17}, {0.85665, -1.20185e-17}, {0.824264, -2.14972e-17}, {0.851575, -1.90113e-17}, {0.931265, -1.80278e-17}, {1.00096, -1.20185e-17}, {1.00096, -9.47871e-18}, {0.931265, -8.49514e-18}, {0.851575, -6.00926e-18}, {0.775362, -5.07962e-18}, {0.858837, -5.07962e-18}, {0.899033, -5.07962e-18}, {0.858837, -1.20185e-17}, {0.775362, -1.5488e-17}, {0.72366, -1.5488e-17}, {0.743927, -2.75065e-17}, {0.804389, -1.80278e-17}, {0.836162, -1.5488e-17}, {0.804389, -1.5488e-17}, {0.743927, -3.46945e-18}, {0.72366, -6.00926e-18}, {0.775362, -1.20185e-17}, {0.85665, -1.28859e-17}, {0.85665, -1.89574e-17}, {0.775362, -1.89574e-17}, {0.679431, -2.24269e-17}, {0.639427, -3.40117e-17}, {0.666068, -1.89574e-17}, {0.707352, -2.49667e-17}, {0.707352, -2.24269e-17}, {0.666068, -9.97466e-18}, {0.639427, -1.89574e-17}, {0.679431, -1.29482e-17}, {0.824264, -1.10889e-17}, {0.869317, -1.71739e-17}, {0.824264, -1.45583e-17}, {0.72366, -2.14972e-17}, {0.639427, -3.19056e-17}, {0.616617, -5.29001e-17}, {0.63886, -4.21894e-17}, {0.655231, -4.32269e-17}, {0.63886, -3.19056e-17}, {0.616617, -4.82604e-18}, {0.639427, -1.81523e-17}, {0.72366, -1.01759e-17}, {0.930725, -1.20185e-17}, {0.930725, -8.54907e-18}, {0.851575, -1.20185e-17}, {0.743927, -1.20185e-17}, {0.666068, -1.20185e-17}, {0.63886, -1.37532e-17}, {0.640151, -1.20185e-17}, {0.640151, -1.20185e-17}, {0.63886, -1.20185e-17}, {0.666068, -1.37532e-17}, {0.743927, -1.20185e-17}, {0.851575, -1.20185e-17}, {1.08798, 1.85927e-18}, {1.04306, 1.85927e-18}, {0.931265, -1.20185e-17}, {0.804389, -1.20185e-17}, {0.707352, -1.89574e-17}, {0.655231, -1.89574e-17}, {0.640151, -2.4037e-17}, {0.655231, -2.4037e-17}, {0.707352, -1.89574e-17}, {0.804389, -1.89574e-17}, {0.931265, 0}, {1.04306, 0}, {1.25388, -1.20185e-17}, {1.15758, -1.89574e-17}, {1.00096, -1.89574e-17}, {0.836162, -1.89574e-17}, {0.707352, -2.24269e-17}, {0.63886, -6.93889e-18}, {0.63886, -2.49667e-17}, {0.707352, -2.49667e-17}, {0.836162, -2.24269e-17}, {1.00096, -3.09759e-17}, {1.15758, -1.29482e-17}, {1.25388, -1.29482e-17}, {1.36223, -1.29482e-17}, {1.20632, -1.29482e-17}, {1.00096, -4.07037e-17}, {0.804389, -1.29482e-17}, {0.666068, 1.10889e-17}, {0.616617, -1.29482e-17}, {0.666068, -1.10889e-17}, {0.804389, -1.29482e-17}, {1.00096, -3.69852e-17}, {1.20632, -1.29482e-17}, {1.36223, 1.29482e-17}, {1.42048, -1.29482e-17}, {1.36223, -1.20185e-17}, {1.15758, -1.20185e-17}, {0.931265, -1.20185e-17}, {0.743927, -1.20185e-17}, {0.639427, -1.20185e-17}, {0.639427, -1.20185e-17}, {0.743927, -1.20185e-17}, {0.931265, -1.20185e-17}, {1.15758, -1.20185e-17}, {1.36223, -1.20185e-17}, {1.48405, -1.20185e-17}, {1.48405, -1.20185e-17}, {1.25388, 1.57371e-17}, {1.04306, 1.57371e-17}, {0.851575, -1.20185e-17}, {0.72366, -1.20185e-17}, {0.679431, -2.58963e-17}, {0.72366, -4.09195e-17}, {0.851575, -2.4037e-17}, {1.04306, -3.60556e-17}, {1.25388, -2.58963e-17}, {1.42048, -1.08732e-17}, {1.48405, 0}, {1.42048, 1.20185e-17}, {0.905261, 0}, {0.930725, 3.46945e-18}, {0.981652, 0}, {1.00712, 0}, {0.981652, 0}, {0.930725, -1.73472e-18}, {0.905261, 0}, {0.930725, 0}, {0.981652, 0}, {1.00712, -1.73472e-18}, {0.981652, 0}, {0.930725, 0}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, {1.1084, 1.73472e-18}, {1.03162, 0}, {0.930725, -6.00926e-18}, {0.864823, 0}, {0.851575, -8.67362e-19}, {0.862449, 0}, {0.862449, 6.00926e-18}, {0.851575, 0}, {0.864823, -8.67362e-19}, {0.981652, 0}, {1.1084, 3.46945e-18}, {1.16145, 0}, {1.1084, 0}, {0.981652, 0}, {0.851575, -1.73472e-18}, {0.771224, 0}, {0.743927, 0}, {0.740598, 0}, {0.743927, -1.73472e-18}, {0.771224, 0}, {0.851575, 0}, {1.00712, 0}, {1.1084, 6.93889e-18}, {1.1084, 0}, {1.00712, 0}, {0.862449, 0}, {0.743927, -3.46945e-18}, {0.683306, 0}, {0.666068, 0}, {0.666068, 0}, {0.683306, -3.46945e-18}, {0.743927, 0}, {0.862449, 0}, {0.981652, 0}, {1.03162, -1.38028e-18}, {0.981652, 0}, {0.862449, 0}, {0.740598, 0}, {0.666068, 6.90141e-19}, {0.641509, 0}, {0.63886, 0}, {0.641509, 0}, {0.666068, 6.90141e-19}, {0.740598, 0}, {0.862449, 0}, {0.930725, -8.67362e-18}, {0.930725, -8.67362e-18}, {0.851575, -6.93889e-18}, {0.743927, -6.93889e-18}, {0.666068, 4.33681e-18}, {0.63886, 1.63553e-17}, {0.640151, 9.47871e-18}, {0.640151, 1.24833e-17}, {0.63886, 4.33681e-18}, {0.666068, -7.68171e-18}, {0.743927, -2.53981e-18}, {0.851575, -5.54444e-18}, {0.905261, 0}, {0.864823, -1.73472e-18}, {0.771224, 0}, {0.683306, 0}, {0.641509, 0}, {0.640151, 8.67362e-19}, {0.645833, 0}, {0.640151, 0}, {0.641509, 0}, {0.683306, 8.67362e-19}, {0.771224, 0}, {0.864823, 0}, {0.930725, 0}, {0.851575, 0}, {0.743927, 0}, {0.666068, 0}, {0.63886, 0}, {0.640151, 0}, {0.640151, 0}, {0.63886, 0}, {0.666068, 0}, {0.743927, 0}, {0.851575, 0}, {0.930725, 0}, {0.981652, 0}, {0.862449, 0}, {0.740598, 0}, {0.666068, 0}, {0.641509, 0}, {0.63886, 0}, {0.641509, 0}, {0.666068, 0}, {0.740598, 0}, {0.862449, 0}, {0.981652, 0}, {1.03162, 0}, {1.00712, 1.38778e-17}, {0.862449, 1.38778e-17}, {0.743927, 0}, {0.683306, 0}, {0.666068, -6.93889e-18}, {0.666068, -1.29482e-17}, {0.683306, -1.20185e-17}, {0.743927, -1.20185e-17}, {0.862449, -6.93889e-18}, {1.00712, -9.29636e-19}, {1.1084, 1.20185e-17}, {1.1084, 1.20185e-17}, {0.981652, 0}, {0.851575, 1.38778e-17}, {0.771224, 0}, {0.743927, 0}, {0.740598, 0}, {0.743927, -6.93889e-18}, {0.771224, 0}, {0.851575, 0}, {0.981652, 0}, {1.1084, -6.93889e-18}, {1.16145, 0}, {1.1084, 0}, {0.930725, 0}, {0.864823, 0}, {0.851575, 0}, {0.862449, 0}, {0.862449, 0}, {0.851575, 0}, {0.864823, 0}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, {1.1084, 0}, {1.03162, 0}, {1.08798, 0}, {1.25388, 0}, {1.36223, 0}, {1.36223, 0}, {1.25388, 0}, {1.08798, 1.20185e-17}, {0.930725, 0}, {0.824264, 0}, {0.775362, 0}, {0.775362, -1.20185e-17}, {0.824264, 0}, {0.930725, 0}, {1.25388, 2.77556e-17}, {1.42048, -1.38778e-17}, {1.48405, -1.38778e-17}, {1.42048, 0}, {1.25388, -1.38778e-17}, {1.04306, 6.93889e-18}, {0.851575, 3.09759e-17}, {0.72366, 0}, {0.679431, -1.38778e-17}, {0.72366, 6.93889e-18}, {0.851575, -1.70981e-17}, {1.04306, 0}, {1.36223, 0}, {1.48405, -6.93889e-18}, {1.48405, 0}, {1.36223, 0}, {1.15758, 0}, {0.931265, 3.46945e-18}, {0.743927, 0}, {0.639427, 0}, {0.639427, 0}, {0.743927, 3.46945e-18}, {0.931265, 0}, {1.15758, 0}, {1.36223, 0}, {1.42048, -2.07544e-18}, {1.36223, 0}, {1.20632, 0}, {1.00096, 0}, {0.804389, 1.03772e-18}, {0.666068, 0}, {0.616617, 0}, {0.666068, 0}, {0.804389, 1.03772e-18}, {1.00096, 0}, {1.20632, 0}, {1.25388, 0}, {1.25388, 0}, {1.15758, 0}, {1.00096, 0}, {0.836162, 0}, {0.707352, 0}, {0.63886, 0}, {0.63886, 0}, {0.707352, 0}, {0.836162, 0}, {1.00096, 0}, {1.15758, 0}, {1.08798, -4.64818e-19}, {1.04306, 0}, {0.931265, 0}, {0.804389, 0}, {0.707352, 2.32409e-19}, {0.655231, 0}, {0.640151, -6.00926e-18}, {0.655231, -4.50694e-18}, {0.707352, 2.32409e-19}, {0.804389, 0}, {0.931265, 6.00926e-18}, {1.04306, 4.50694e-18}, {0.930725, 0}, {0.851575, 0}, {0.743927, 0}, {0.666068, 0}, {0.63886, 0}, {0.640151, 0}, {0.640151, 0}, {0.63886, 0}, {0.666068, 0}, {0.743927, 0}, {0.851575, 0}, {0.930725, 0}, {0.824264, 0}, {0.72366, 0}, {0.639427, 0}, {0.616617, 0}, {0.63886, 0}, {0.655231, -1.50231e-18}, {0.63886, 0}, {0.616617, 0}, {0.639427, 0}, {0.72366, 1.50231e-18}, {0.824264, 0}, {0.869317, 0}, {0.775362, 0}, {0.679431, 0}, {0.639427, 0}, {0.666068, 0}, {0.707352, 0}, {0.707352, 0}, {0.666068, 0}, {0.639427, 0}, {0.679431, 0}, {0.775362, 0}, {0.85665, 0}, {0.85665, 0}, {0.775362, -6.93889e-18}, {0.72366, -3.46945e-18}, {0.743927, 0}, {0.804389, 0}, {0.836162, 4.64818e-19}, {0.804389, 1.73472e-18}, {0.743927, 0}, {0.72366, 6.00926e-18}, {0.775362, 6.47408e-18}, {0.858837, 1.73472e-18}, {0.899033, 0}, {0.858837, -6.00926e-18}, {0.824264, 0}, {0.851575, 0}, {0.931265, 0}, {1.00096, 0}, {1.00096, 0}, {0.931265, 0}, {0.851575, 0}, {0.824264, 0}, {0.85665, 0}, {0.899033, 0}, {0.899033, 0}, {0.85665, 0}, {0.930725, 0}, {1.04306, 0}, {1.15758, 0}, {1.20632, 0}, {1.15758, 0}, {1.04306, 0}, {0.930725, 0}, {0.869317, 0}, {0.85665, 0}, {0.858837, 0}, {0.85665, 0}, {0.869317, 0}, {1.51507, 0}, {1.69928, 0}, {1.76522, 0}, {1.69928, 0}, {1.51507, 0}, {1.25388, -2.4037e-17}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, {0.775362, 2.4037e-17}, {0.981652, 0}, {1.25388, 0}, {1.69928, 0}, {1.82256, -1.38778e-17}, {1.82256, 0}, {1.69928, 0}, {1.46388, 0}, {1.15758, -4.11352e-17}, {0.862449, 0}, {0.679431, 0}, {0.679431, 0}, {0.862449, 5.5013e-17}, {1.15758, 0}, {1.46388, 0}, {1.76522, 0}, {1.82256, 6.6502e-18}, {1.76522, 0}, {1.59252, 0}, {1.31866, 0}, {1.00096, -3.3251e-18}, {0.740598, 0}, {0.639427, 0}, {0.740598, 0}, {1.00096, -3.3251e-18}, {1.31866, 0}, {1.59252, 0}, {1.69928, 0}, {1.69928, 0}, {1.59252, 0}, {1.38444, 0}, {1.10759, 0}, {0.836162, 0}, {0.666068, 0}, {0.666068, 0}, {0.836162, 0}, {1.10759, 0}, {1.38444, 0}, {1.59252, 0}, {1.51507, 0}, {1.46388, 0}, {1.31866, 0}, {1.10759, 0}, {0.881874, 0}, {0.707352, 0}, {0.641509, 0}, {0.707352, 0}, {0.881874, 0}, {1.10759, 0}, {1.31866, 0}, {1.46388, 0}, {1.25388, 1.38778e-17}, {1.15758, 0}, {1.00096, 0}, {0.836162, 2.77556e-17}, {0.707352, -6.93889e-18}, {0.63886, -1.20185e-17}, {0.63886, -6.00926e-18}, {0.707352, -2.58963e-17}, {0.836162, -6.93889e-18}, {1.00096, 1.20185e-17}, {1.15758, 6.00926e-18}, {1.25388, -1.85927e-18}, {0.981652, 0}, {0.862449, 1.38778e-17}, {0.740598, 0}, {0.666068, 0}, {0.641509, 0}, {0.63886, -6.93889e-18}, {0.641509, 0}, {0.666068, 0}, {0.740598, 0}, {0.862449, -6.93889e-18}, {0.981652, 0}, {1.03162, 0}, {0.775362, 0}, {0.679431, 0}, {0.639427, 0}, {0.666068, 0}, {0.707352, 0}, {0.707352, 0}, {0.666068, 0}, {0.639427, 0}, {0.679431, 0}, {0.775362, 0}, {0.85665, 0}, {0.85665, 0}, {0.698375, 0}, {0.679431, 0}, {0.740598, 0}, {0.836162, 0}, {0.881874, 0}, {0.836162, -6.00926e-18}, {0.740598, 0}, {0.679431, 0}, {0.698375, 0}, {0.763031, 6.00926e-18}, {0.797429, 0}, {0.763031, 0}, {0.775362, 0}, {0.862449, 0}, {1.00096, 0}, {1.10759, 0}, {1.10759, 0}, {1.00096, 0}, {0.862449, 0}, {0.775362, 0}, {0.763031, 0}, {0.782576, 0}, {0.782576, 0}, {0.763031, 0}, {0.981652, 0}, {1.15758, 0}, {1.31866, 0}, {1.38444, 0}, {1.31866, 0}, {1.15758, 0}, {0.981652, 0}, {0.85665, 0}, {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, {0.85665, 0}, {1.25388, 0}, {1.46388, 0}, {1.59252, 0}, {1.59252, 0}, {1.46388, 0}, {1.25388, 2.4037e-17}, {1.03162, 0}, {0.85665, 0}, {0.763031, 0}, {0.763031, -2.4037e-17}, {0.85665, 0}, {1.03162, 0}, {1.92793, 1.20185e-17}, {2.03322, 2.58963e-17}, {2.03322, 3.97741e-17}, {1.92793, 1.20185e-17}, {1.69928, 3.60556e-17}, {1.36223, 5.07962e-18}, {1.00712, -1.85927e-18}, {0.775362, 1.20185e-17}, {0.775362, -1.20185e-17}, {1.00712, 5.07962e-18}, {1.36223, -1.85927e-18}, {1.69928, 1.20185e-17}, {2.03322, 2.41616e-17}, {2.07555, 2.2009e-17}, {2.03322, 7.96727e-17}, {1.88226, 1.35184e-16}, {1.59252, 2.41616e-17}, {1.20632, 2.52379e-17}, {0.862449, 4.44801e-17}, {0.72366, -3.13496e-17}, {0.862449, 2.41616e-17}, {1.20632, 2.52379e-17}, {1.59252, -5.16681e-17}, {1.88226, -3.13496e-17}, {2.03322, 3.97741e-17}, {2.03322, 2.58963e-17}, {1.94478, 3.97741e-17}, {1.7299, 3.97741e-17}, {1.38444, 3.97741e-17}, {1.00096, 4.6713e-17}, {0.743927, 3.97741e-17}, {0.743927, 3.97741e-17}, {1.00096, 3.97741e-17}, {1.38444, 4.6713e-17}, {1.7299, 3.97741e-17}, {1.94478, 3.97741e-17}, {1.92793, 3.97741e-17}, {1.88226, 1.20185e-17}, {1.7299, 3.97741e-17}, {1.45645, 3.97741e-17}, {1.10759, 3.97741e-17}, {0.804389, 5.36519e-17}, {0.683306, 3.97741e-17}, {0.804389, 3.97741e-17}, {1.10759, 3.97741e-17}, {1.45645, 5.36519e-17}, {1.7299, 3.97741e-17}, {1.88226, 3.97741e-17}, {1.69928, 3.60556e-17}, {1.59252, 6.38111e-17}, {1.38444, 3.60556e-17}, {1.10759, 3.60556e-17}, {0.836162, 3.60556e-17}, {0.666068, 2.21778e-17}, {0.666068, 3.60556e-17}, {0.836162, 3.60556e-17}, {1.10759, 3.60556e-17}, {1.38444, 2.21778e-17}, {1.59252, 3.60556e-17}, {1.69928, 3.60556e-17}, {1.36223, 7.16174e-17}, {1.20632, 8.54952e-17}, {1.00096, 8.54952e-17}, {0.804389, 5.77396e-17}, {0.666068, 3.32044e-17}, {0.616617, 1.4247e-17}, {0.666068, -3.75829e-17}, {0.804389, -3.19678e-17}, {1.00096, -1.48697e-17}, {1.20632, -9.79007e-18}, {1.36223, 4.20398e-17}, {1.42048, 6.41803e-17}, {1.00712, 2.21778e-17}, {0.862449, 3.60556e-17}, {0.743927, 4.99333e-17}, {0.683306, 4.99333e-17}, {0.666068, 4.62148e-17}, {0.666068, 3.4769e-17}, {0.683306, 2.03185e-17}, {0.743927, 8.29997e-18}, {0.862449, -1.85927e-18}, {1.00712, -4.29122e-18}, {1.1084, -3.71854e-18}, {1.1084, 8.29997e-18}, {0.775362, -1.85927e-18}, {0.72366, 1.20185e-17}, {0.743927, 1.89574e-17}, {0.804389, 2.58963e-17}, {0.836162, 2.21778e-17}, {0.804389, 1.52389e-17}, {0.743927, -2.49095e-19}, {0.72366, -1.57371e-17}, {0.775362, -2.58963e-17}, {0.858837, -3.28352e-17}, {0.899033, -2.42861e-17}, {0.858837, -1.57371e-17}, {0.775362, -1.20185e-17}, {0.862449, 1.85927e-18}, {1.00096, 1.22676e-17}, {1.10759, 1.57371e-17}, {1.10759, 1.20185e-17}, {1.00096, 2.07499e-18}, {0.862449, -1.21431e-17}, {0.775362, -2.58963e-17}, {0.763031, -3.60556e-17}, {0.782576, -3.99898e-17}, {0.782576, -3.61801e-17}, {0.763031, -2.58963e-17}, {1.00712, -7.36012e-17}, {1.20632, -7.36012e-17}, {1.38444, -1.809e-17}, {1.45645, 1.14003e-17}, {1.38444, 3.67072e-17}, {1.20632, 5.77396e-17}, {1.00712, 2.9984e-17}, {0.858837, 1.52389e-17}, {0.782576, -1.73761e-17}, {0.761485, -3.84085e-17}, {0.782576, -6.61641e-17}, {0.858837, -8.09093e-17}, {1.36223, -2.58963e-17}, {1.59252, 1.85927e-18}, {1.7299, 1.85927e-18}, {1.7299, 1.85927e-18}, {1.59252, -1.85927e-18}, {1.36223, -1.57371e-17}, {1.1084, -1.57371e-17}, {0.899033, -3.97741e-17}, {0.782576, -4.99333e-17}, {0.782576, -6.38111e-17}, {0.899033, -6.38111e-17}, {1.1084, -3.97741e-17}, {1.69928, -1.85927e-18}, {1.88226, 2.58963e-17}, {1.94478, 1.20185e-17}, {1.88226, 2.58963e-17}, {1.69928, 2.21778e-17}, {1.42048, 8.29997e-18}, {1.1084, -8.79816e-18}, {0.858837, -1.57371e-17}, {0.763031, -2.58963e-17}, {0.858837, -3.97741e-17}, {1.1084, -8.79816e-18}, {1.42048, -1.57371e-17}, {2.14383, 0}, {2.16623, -3.54439e-19}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 1.77219e-19}, {0.981652, 0}, {0.824264, 0}, {0.981652, 0}, {1.36223, 1.77219e-19}, {1.76522, 0}, {2.03322, 0}, {2.16623, -6.93889e-18}, {2.16623, -6.93889e-18}, {2.11997, -6.93889e-18}, {1.94478, -6.93889e-18}, {1.59252, -6.93889e-18}, {1.15758, -6.93889e-18}, {0.851575, 1.70981e-17}, {0.851575, -6.93889e-18}, {1.15758, -6.93889e-18}, {1.59252, -6.93889e-18}, {1.94478, -3.09759e-17}, {2.11997, -6.93889e-18}, {2.14383, 0}, {2.11997, 0}, {2.00496, 0}, {1.7299, 0}, {1.31866, 0}, {0.931265, 4.80741e-17}, {0.771224, 0}, {0.931265, 0}, {1.31866, 0}, {1.7299, -4.80741e-17}, {2.00496, 0}, {2.11997, 0}, {2.03322, 0}, {1.94478, 0}, {1.7299, 0}, {1.38444, 0}, {1.00096, 0}, {0.743927, 0}, {0.743927, 0}, {1.00096, 0}, {1.38444, 0}, {1.7299, 0}, {1.94478, 0}, {2.03322, 0}, {1.76522, 0}, {1.59252, 5.55112e-17}, {1.31866, 0}, {1.00096, 0}, {0.740598, 0}, {0.639427, -2.77556e-17}, {0.740598, 0}, {1.00096, 0}, {1.31866, 0}, {1.59252, -2.77556e-17}, {1.76522, 0}, {1.82256, 0}, {1.36223, 3.46945e-18}, {1.15758, 3.1225e-17}, {0.931265, 3.1225e-17}, {0.743927, 3.1225e-17}, {0.639427, 2.75065e-17}, {0.639427, 1.36287e-17}, {0.743927, 1.61018e-18}, {0.931265, -1.04083e-17}, {1.15758, -2.05676e-17}, {1.36223, -3.44454e-17}, {1.48405, -2.24269e-17}, {1.48405, -1.04083e-17}, {0.981652, 0}, {0.851575, 1.38778e-17}, {0.771224, 0}, {0.743927, 0}, {0.740598, 0}, {0.743927, -6.93889e-18}, {0.771224, 0}, {0.851575, 0}, {0.981652, 0}, {1.1084, -6.93889e-18}, {1.16145, 0}, {1.1084, 0}, {0.824264, 0}, {0.851575, 0}, {0.931265, 0}, {1.00096, 0}, {1.00096, 0}, {0.931265, 0}, {0.851575, 0}, {0.824264, 0}, {0.85665, 0}, {0.899033, 0}, {0.899033, 0}, {0.85665, 0}, {0.981652, 0}, {1.15758, 0}, {1.31866, 0}, {1.38444, 0}, {1.31866, 0}, {1.15758, 0}, {0.981652, 0}, {0.85665, 0}, {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, {0.85665, 0}, {1.36223, 3.1225e-17}, {1.59252, 3.1225e-17}, {1.7299, 1.73472e-17}, {1.7299, -3.46945e-18}, {1.59252, -1.04083e-17}, {1.36223, -1.04083e-17}, {1.1084, -2.75065e-17}, {0.899033, -1.70981e-17}, {0.782576, -1.04083e-17}, {0.782576, -1.04083e-17}, {0.899033, 2.05676e-17}, {1.1084, 3.09759e-17}, {1.76522, 0}, {1.94478, 2.77556e-17}, {2.00496, 0}, {1.94478, 0}, {1.76522, 0}, {1.48405, -1.38778e-17}, {1.16145, 0}, {0.899033, 0}, {0.797429, 0}, {0.899033, -1.38778e-17}, {1.16145, 0}, {1.48405, 0}, {2.03322, 0}, {2.11997, 1.38778e-17}, {2.11997, 0}, {2.03322, 0}, {1.82256, 0}, {1.48405, -6.93889e-18}, {1.1084, 0}, {0.85665, 0}, {0.85665, 0}, {1.1084, -6.93889e-18}, {1.48405, 0}, {1.82256, 0}, {2.17701, 0}, {2.17701, 0}, {2.16623, 0}, {2.03322, 0}, {1.69928, 0}, {1.25388, 0}, {0.930725, 0}, {0.930725, 0}, {1.25388, 0}, {1.69928, 0}, {2.03322, 0}, {2.16623, 0}, {2.17701, -5.20417e-18}, {2.17945, -2.77556e-17}, {2.11997, 0}, {1.88226, 0}, {1.46388, 2.60209e-18}, {1.04306, -1.01592e-17}, {0.864823, 0}, {1.04306, 1.20185e-17}, {1.46388, 2.60209e-18}, {1.88226, 3.79148e-17}, {2.11997, 0}, {2.17945, -1.20185e-17}, {2.16623, 0}, {2.11997, 0}, {1.94478, 0}, {1.59252, 0}, {1.15758, 0}, {0.851575, 0}, {0.851575, 0}, {1.15758, 0}, {1.59252, 0}, {1.94478, 0}, {2.11997, 0}, {2.16623, 0}, {2.03322, 0}, {1.88226, 0}, {1.59252, 0}, {1.20632, 0}, {0.862449, 0}, {0.72366, 2.4037e-17}, {0.862449, 0}, {1.20632, 0}, {1.59252, 0}, {1.88226, -2.4037e-17}, {2.03322, 0}, {2.07555, 0}, {1.69928, 0}, {1.46388, 0}, {1.15758, 0}, {0.862449, 0}, {0.679431, 0}, {0.679431, -1.20185e-17}, {0.862449, 0}, {1.15758, 0}, {1.46388, 0}, {1.69928, 1.20185e-17}, {1.82256, 0}, {1.82256, 0}, {1.25388, 0}, {1.04306, 0}, {0.851575, 0}, {0.72366, 0}, {0.679431, 0}, {0.72366, 1.50231e-18}, {0.851575, 0}, {1.04306, 0}, {1.25388, 0}, {1.42048, -1.50231e-18}, {1.48405, 0}, {1.42048, 0}, {0.930725, 0}, {0.864823, 0}, {0.851575, 0}, {0.862449, 0}, {0.862449, 0}, {0.851575, 0}, {0.864823, 0}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, {1.1084, 0}, {1.03162, 0}, {0.930725, 0}, {1.04306, 0}, {1.15758, 0}, {1.20632, 0}, {1.15758, 0}, {1.04306, 0}, {0.930725, 0}, {0.869317, 0}, {0.85665, 0}, {0.858837, 0}, {0.85665, 0}, {0.869317, 0}, {1.25388, 0}, {1.46388, 0}, {1.59252, 0}, {1.59252, 0}, {1.46388, 0}, {1.25388, 0}, {1.03162, 0}, {0.85665, 0}, {0.763031, 0}, {0.763031, 0}, {0.85665, 0}, {1.03162, 0}, {1.69928, 0}, {1.88226, 2.77556e-17}, {1.94478, 0}, {1.88226, 0}, {1.69928, 0}, {1.42048, -1.38778e-17}, {1.1084, 0}, {0.858837, 0}, {0.763031, 0}, {0.858837, -1.38778e-17}, {1.1084, 0}, {1.42048, 0}, {2.03322, 0}, {2.11997, 0}, {2.11997, 0}, {2.03322, 0}, {1.82256, 0}, {1.48405, 0}, {1.1084, 0}, {0.85665, 0}, {0.85665, 0}, {1.1084, 0}, {1.48405, 0}, {1.82256, 0}, {2.16623, 0}, {2.17945, 5.846e-18}, {2.16623, 0}, {2.07555, 0}, {1.82256, 0}, {1.42048, -2.923e-18}, {1.03162, 0}, {0.869317, 0}, {1.03162, 0}, {1.42048, -2.923e-18}, {1.82256, 0}, {2.07555, 0}}; - const std::vector > out_2 = {{2.16277, 0}, {2.17701, 0}, {2.14383, 0}, {1.92793, 0}, {1.51507, 0}, {1.08798, -2.4037e-17}, {0.905261, 0}, {1.08798, 0}, {1.51507, 0}, {1.92793, 2.4037e-17}, {2.14383, 0}, {2.17701, 0}, {2.17701, 0}, {2.16623, 5.55112e-17}, {2.03322, 0}, {1.69928, 0}, {1.25388, 0}, {0.930725, -2.77556e-17}, {0.930725, 0}, {1.25388, 0}, {1.69928, 0}, {2.03322, -2.77556e-17}, {2.16623, 0}, {2.17701, 0}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 0}, {0.981652, 0}, {0.824264, 0}, {0.981652, 0}, {1.36223, 0}, {1.76522, 0}, {2.03322, 0}, {2.14383, 0}, {2.16623, 0}, {1.92793, 0}, {1.69928, 0}, {1.36223, 0}, {1.00712, 0}, {0.775362, 0}, {0.775362, 1.20185e-17}, {1.00712, 0}, {1.36223, 0}, {1.69928, 0}, {1.92793, -1.20185e-17}, {2.03322, 0}, {2.03322, 0}, {1.51507, 0}, {1.25388, 0}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, {0.775362, -4.50694e-18}, {0.981652, 0}, {1.25388, 0}, {1.51507, 0}, {1.69928, 4.50694e-18}, {1.76522, 0}, {1.69928, 0}, {1.08798, 0}, {0.930725, -2.77556e-17}, {0.824264, 0}, {0.775362, 0}, {0.775362, 0}, {0.824264, 1.38778e-17}, {0.930725, 0}, {1.08798, 0}, {1.25388, 0}, {1.36223, 1.38778e-17}, {1.36223, 0}, {1.25388, 0}, {0.905261, 0}, {0.930725, 0}, {0.981652, 0}, {1.00712, 0}, {0.981652, 0}, {0.930725, 0}, {0.905261, 0}, {0.930725, 0}, {0.981652, 0}, {1.00712, 0}, {0.981652, 0}, {0.930725, 0}, {1.08798, 0}, {1.25388, 0}, {1.36223, 0}, {1.36223, 0}, {1.25388, 0}, {1.08798, 0}, {0.930725, 0}, {0.824264, 0}, {0.775362, 0}, {0.775362, 0}, {0.824264, 0}, {0.930725, 0}, {1.51507, 0}, {1.69928, -2.77556e-17}, {1.76522, 0}, {1.69928, 0}, {1.51507, 0}, {1.25388, 1.38778e-17}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, {0.775362, 1.38778e-17}, {0.981652, 0}, {1.25388, 0}, {1.92793, 0}, {2.03322, 0}, {2.03322, 0}, {1.92793, 0}, {1.69928, 0}, {1.36223, 0}, {1.00712, 0}, {0.775362, 0}, {0.775362, 0}, {1.00712, 0}, {1.36223, 0}, {1.69928, 0}, {2.14383, 0}, {2.16623, -3.54439e-19}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 1.77219e-19}, {0.981652, 0}, {0.824264, 0}, {0.981652, 0}, {1.36223, 1.77219e-19}, {1.76522, 0}, {2.03322, 0}, {2.17701, 0}, {2.17701, 0}, {2.16623, 0}, {2.03322, 0}, {1.69928, 0}, {1.25388, 0}, {0.930725, 0}, {0.930725, 0}, {1.25388, 0}, {1.69928, 0}, {2.03322, 0}, {2.16623, 0}, {2.17701, -6.93889e-18}, {2.16623, -6.93889e-18}, {2.03322, -6.93889e-18}, {1.69928, -6.93889e-18}, {1.25388, -6.93889e-18}, {0.930725, -3.09759e-17}, {0.930725, -6.93889e-18}, {1.25388, -6.93889e-18}, {1.69928, -6.93889e-18}, {2.03322, 1.70981e-17}, {2.16623, -6.93889e-18}, {2.17701, -6.93889e-18}, {2.16623, 0}, {2.07555, 0}, {1.82256, 0}, {1.42048, 0}, {1.03162, 0}, {0.869317, -2.4037e-17}, {1.03162, 0}, {1.42048, 0}, {1.82256, 0}, {2.07555, 2.4037e-17}, {2.16623, 0}, {2.17945, 0}, {2.03322, 0}, {1.82256, -5.55112e-17}, {1.48405, 0}, {1.1084, 0}, {0.85665, 0}, {0.85665, 2.77556e-17}, {1.1084, 0}, {1.48405, 0}, {1.82256, 0}, {2.03322, 2.77556e-17}, {2.11997, 0}, {2.11997, 0}, {1.69928, 0}, {1.42048, 0}, {1.1084, 0}, {0.858837, 0}, {0.763031, 0}, {0.858837, 0}, {1.1084, 0}, {1.42048, 0}, {1.69928, 0}, {1.88226, 0}, {1.94478, 0}, {1.88226, 0}, {1.25388, 3.46945e-18}, {1.03162, -2.42861e-17}, {0.85665, 3.46945e-18}, {0.763031, 3.46945e-18}, {0.763031, 3.46945e-18}, {0.85665, 1.73472e-17}, {1.03162, 3.46945e-18}, {1.25388, 3.46945e-18}, {1.46388, 3.46945e-18}, {1.59252, 1.73472e-17}, {1.59252, 3.46945e-18}, {1.46388, 3.46945e-18}, {0.930725, -2.4037e-17}, {0.869317, -3.79148e-17}, {0.85665, -2.4037e-17}, {0.858837, -1.7563e-17}, {0.85665, -2.4037e-17}, {0.869317, -1.70981e-17}, {0.930725, -2.4037e-17}, {1.04306, -2.72741e-17}, {1.15758, -2.4037e-17}, {1.20632, -1.70981e-17}, {1.15758, -2.4037e-17}, {1.04306, -2.72741e-17}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, {1.1084, 0}, {1.03162, 0}, {0.930725, 0}, {0.864823, 0}, {0.851575, 0}, {0.862449, 0}, {0.862449, 0}, {0.851575, 0}, {0.864823, 0}, {1.25388, -2.47509e-17}, {1.42048, -3.86287e-17}, {1.48405, -1.08732e-17}, {1.42048, 3.00463e-18}, {1.25388, 1.68824e-17}, {1.04306, 4.78583e-17}, {0.851575, 3.39806e-17}, {0.72366, 2.70417e-17}, {0.679431, 1.68824e-17}, {0.72366, -2.15723e-19}, {0.851575, -1.40935e-17}, {1.04306, -2.10324e-17}, {1.69928, 3.46945e-18}, {1.82256, 1.73472e-17}, {1.82256, 3.46945e-18}, {1.69928, 3.46945e-18}, {1.46388, 3.46945e-18}, {1.15758, -3.46945e-18}, {0.862449, 3.46945e-18}, {0.679431, 3.46945e-18}, {0.679431, 3.46945e-18}, {0.862449, -3.46945e-18}, {1.15758, 3.46945e-18}, {1.46388, 3.46945e-18}, {2.03322, 2.4037e-17}, {2.07555, 2.5603e-17}, {2.03322, 2.4037e-17}, {1.88226, 2.4037e-17}, {1.59252, -2.4037e-17}, {1.20632, 2.32541e-17}, {0.862449, 2.4037e-17}, {0.72366, 2.4037e-17}, {0.862449, 7.21111e-17}, {1.20632, 2.32541e-17}, {1.59252, 2.4037e-17}, {1.88226, 2.4037e-17}, {2.16623, 0}, {2.16623, 0}, {2.11997, 0}, {1.94478, 0}, {1.59252, 0}, {1.15758, -4.80741e-17}, {0.851575, 0}, {0.851575, 0}, {1.15758, 0}, {1.59252, 4.80741e-17}, {1.94478, 0}, {2.11997, 0}, {2.17701, -1.68824e-17}, {2.17945, -3.07602e-17}, {2.11997, -3.00463e-18}, {1.88226, -3.00463e-18}, {1.46388, 3.93426e-18}, {1.04306, -1.31639e-17}, {0.864823, -3.00463e-18}, {1.04306, 9.01389e-18}, {1.46388, 3.93426e-18}, {1.88226, 3.49102e-17}, {2.11997, -3.00463e-18}, {2.17945, -1.50231e-17}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 0}, {0.981652, 0}, {0.824264, 2.4037e-17}, {0.981652, 0}, {1.36223, 0}, {1.76522, 0}, {2.03322, -2.4037e-17}, {2.14383, 0}, {2.16623, 0}, {2.03322, -2.77556e-17}, {1.82256, -2.77556e-17}, {1.48405, -2.77556e-17}, {1.1084, -2.77556e-17}, {0.85665, -2.77556e-17}, {0.85665, -3.71854e-18}, {1.1084, -2.77556e-17}, {1.48405, -2.77556e-17}, {1.82256, -2.77556e-17}, {2.03322, -5.17926e-17}, {2.11997, -2.77556e-17}, {2.11997, -2.77556e-17}, {1.76522, 0}, {1.48405, 0}, {1.16145, 0}, {0.899033, 0}, {0.797429, 0}, {0.899033, 9.01389e-18}, {1.16145, 0}, {1.48405, 0}, {1.76522, 0}, {1.94478, -9.01389e-18}, {2.00496, 0}, {1.94478, 0}, {1.36223, 0}, {1.1084, -2.77556e-17}, {0.899033, 0}, {0.782576, 0}, {0.782576, 0}, {0.899033, 1.38778e-17}, {1.1084, 0}, {1.36223, 0}, {1.59252, 0}, {1.7299, 1.38778e-17}, {1.7299, 0}, {1.59252, 0}, {0.981652, 0}, {0.85665, 2.77556e-17}, {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, {0.85665, -1.38778e-17}, {0.981652, 0}, {1.15758, 0}, {1.31866, 0}, {1.38444, -1.38778e-17}, {1.31866, 0}, {1.15758, 0}, {0.824264, 1.38778e-17}, {0.85665, 1.38778e-17}, {0.899033, 1.73472e-17}, {0.899033, 6.93889e-18}, {0.85665, 1.38778e-17}, {0.824264, 1.68824e-17}, {0.851575, 1.77767e-17}, {0.931265, 2.03519e-17}, {1.00096, 1.38778e-17}, {1.00096, 1.08732e-17}, {0.931265, 6.50938e-18}, {0.851575, 1.43426e-17}, {0.981652, 0}, {1.1084, 0}, {1.16145, 0}, {1.1084, 0}, {0.981652, 0}, {0.851575, 0}, {0.771224, 0}, {0.743927, 0}, {0.740598, 0}, {0.743927, 0}, {0.771224, 0}, {0.851575, 0}, {1.36223, 0}, {1.48405, -6.93889e-18}, {1.48405, 0}, {1.36223, 0}, {1.15758, 0}, {0.931265, 3.46945e-18}, {0.743927, 0}, {0.639427, 0}, {0.639427, 0}, {0.743927, 3.46945e-18}, {0.931265, 0}, {1.15758, 0}, {1.76522, 0}, {1.82256, 2.93165e-18}, {1.76522, 0}, {1.59252, 0}, {1.31866, 0}, {1.00096, -4.95399e-17}, {0.740598, 0}, {0.639427, 0}, {0.740598, 0}, {1.00096, 4.66082e-17}, {1.31866, 0}, {1.59252, 0}, {2.03322, 1.38778e-17}, {2.03322, 1.38778e-17}, {1.94478, 1.38778e-17}, {1.7299, 1.38778e-17}, {1.38444, 1.38778e-17}, {1.00096, 1.38778e-17}, {0.743927, 1.38778e-17}, {0.743927, 1.38778e-17}, {1.00096, 1.38778e-17}, {1.38444, 1.38778e-17}, {1.7299, 1.38778e-17}, {1.94478, 1.38778e-17}, {2.14383, 0}, {2.11997, 0}, {2.00496, 0}, {1.7299, 0}, {1.31866, 0}, {0.931265, 4.80741e-17}, {0.771224, 0}, {0.931265, 0}, {1.31866, 0}, {1.7299, -4.80741e-17}, {2.00496, 0}, {2.11997, 0}, {2.16623, 0}, {2.11997, 0}, {1.94478, 0}, {1.59252, 0}, {1.15758, 0}, {0.851575, 0}, {0.851575, 0}, {1.15758, 0}, {1.59252, 0}, {1.94478, 0}, {2.11997, 0}, {2.16623, 0}, {1.92793, 0}, {1.69928, 0}, {1.36223, 0}, {1.00712, 0}, {0.775362, 0}, {0.775362, 0}, {1.00712, 0}, {1.36223, 0}, {1.69928, 0}, {1.92793, 0}, {2.03322, 0}, {2.03322, 0}, {1.69928, -2.77556e-17}, {1.42048, -2.77556e-17}, {1.1084, -2.77556e-17}, {0.858837, -2.77556e-17}, {0.763031, -2.77556e-17}, {0.858837, -2.77556e-17}, {1.1084, -2.77556e-17}, {1.42048, -2.77556e-17}, {1.69928, -2.77556e-17}, {1.88226, -2.77556e-17}, {1.94478, -2.77556e-17}, {1.88226, -2.77556e-17}, {1.36223, 0}, {1.1084, -2.77556e-17}, {0.899033, 0}, {0.782576, 0}, {0.782576, 0}, {0.899033, 1.38778e-17}, {1.1084, 0}, {1.36223, 0}, {1.59252, 0}, {1.7299, 1.38778e-17}, {1.7299, 0}, {1.59252, 0}, {1.00712, 0}, {0.858837, 0}, {0.782576, 0}, {0.761485, 0}, {0.782576, 0}, {0.858837, 0}, {1.00712, 0}, {1.20632, 0}, {1.38444, 0}, {1.45645, 0}, {1.38444, 0}, {1.20632, 0}, {0.775362, 0}, {0.763031, 0}, {0.782576, 0}, {0.782576, 0}, {0.763031, 0}, {0.775362, 0}, {0.862449, 0}, {1.00096, 0}, {1.10759, 0}, {1.10759, 0}, {1.00096, 0}, {0.862449, 0}, {0.775362, 5.32872e-18}, {0.858837, 8.79816e-18}, {0.899033, 1.85927e-18}, {0.858837, 1.85927e-18}, {0.775362, 1.24548e-19}, {0.72366, -1.61018e-18}, {0.743927, 1.85927e-18}, {0.804389, -4.14999e-18}, {0.836162, 1.24548e-19}, {0.804389, -1.61018e-18}, {0.743927, 1.85927e-18}, {0.72366, 7.86853e-18}, {1.00712, 0}, {1.1084, 6.93889e-18}, {1.1084, 0}, {1.00712, 0}, {0.862449, 0}, {0.743927, -3.46945e-18}, {0.683306, 0}, {0.666068, 0}, {0.666068, 0}, {0.683306, -3.46945e-18}, {0.743927, 0}, {0.862449, 0}, {1.36223, 0}, {1.42048, -2.16167e-19}, {1.36223, 0}, {1.20632, 0}, {1.00096, 0}, {0.804389, 1.08084e-19}, {0.666068, 0}, {0.616617, 0}, {0.666068, 0}, {0.804389, 1.08084e-19}, {1.00096, 0}, {1.20632, 0}, {1.69928, 0}, {1.69928, 0}, {1.59252, 0}, {1.38444, 0}, {1.10759, 0}, {0.836162, 0}, {0.666068, 0}, {0.666068, 0}, {0.836162, 0}, {1.10759, 0}, {1.38444, 0}, {1.59252, 0}, {1.92793, 2.13894e-17}, {1.88226, 2.58963e-17}, {1.7299, 2.58963e-17}, {1.45645, 2.58963e-17}, {1.10759, 2.81498e-17}, {0.804389, 2.58963e-17}, {0.683306, 2.58963e-17}, {0.804389, 3.19056e-17}, {1.10759, 2.81498e-17}, {1.45645, 2.58963e-17}, {1.7299, 2.58963e-17}, {1.88226, 1.9887e-17}, {2.03322, 0}, {1.94478, 0}, {1.7299, 0}, {1.38444, 0}, {1.00096, 0}, {0.743927, 2.4037e-17}, {0.743927, 0}, {1.00096, 0}, {1.38444, 0}, {1.7299, -2.4037e-17}, {1.94478, 0}, {2.03322, 0}, {2.03322, 0}, {1.88226, -5.55112e-17}, {1.59252, 0}, {1.20632, 0}, {0.862449, 0}, {0.72366, 2.77556e-17}, {0.862449, 0}, {1.20632, 0}, {1.59252, 0}, {1.88226, 2.77556e-17}, {2.03322, 0}, {2.07555, 0}, {1.51507, 0}, {1.25388, -5.55112e-17}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, {0.775362, 3.22625e-17}, {0.981652, 0}, {1.25388, 0}, {1.51507, 0}, {1.69928, 2.32486e-17}, {1.76522, 0}, {1.69928, 0}, {1.25388, 0}, {1.03162, 2.77556e-17}, {0.85665, 0}, {0.763031, 0}, {0.763031, 0}, {0.85665, -1.38778e-17}, {1.03162, 0}, {1.25388, 0}, {1.46388, 0}, {1.59252, -1.38778e-17}, {1.59252, 0}, {1.46388, 0}, {0.981652, 0}, {0.85665, 0}, {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, {0.85665, 0}, {0.981652, 0}, {1.15758, 0}, {1.31866, 0}, {1.38444, 0}, {1.31866, 0}, {1.15758, 0}, {0.775362, 0}, {0.763031, 0}, {0.782576, 0}, {0.782576, 0}, {0.763031, 0}, {0.775362, 0}, {0.862449, 0}, {1.00096, 0}, {1.10759, 0}, {1.10759, 0}, {1.00096, 0}, {0.862449, 0}, {0.698375, 0}, {0.763031, 0}, {0.797429, 0}, {0.763031, 0}, {0.698375, 0}, {0.679431, 7.51157e-19}, {0.740598, 0}, {0.836162, 0}, {0.881874, 0}, {0.836162, -7.51157e-19}, {0.740598, 0}, {0.679431, 0}, {0.775362, 0}, {0.85665, -8.67362e-19}, {0.85665, 0}, {0.775362, 0}, {0.679431, 0}, {0.639427, 4.33681e-19}, {0.666068, 0}, {0.707352, 0}, {0.707352, 0}, {0.666068, 4.33681e-19}, {0.639427, 0}, {0.679431, 0}, {0.981652, 0}, {1.03162, 1.40862e-18}, {0.981652, 0}, {0.862449, 0}, {0.740598, 0}, {0.666068, 1.13142e-17}, {0.641509, 0}, {0.63886, 0}, {0.641509, 0}, {0.666068, -1.27228e-17}, {0.740598, 0}, {0.862449, 0}, {1.25388, 0}, {1.25388, 0}, {1.15758, 0}, {1.00096, 0}, {0.836162, 0}, {0.707352, -2.4037e-17}, {0.63886, 0}, {0.63886, 0}, {0.707352, 0}, {0.836162, 2.4037e-17}, {1.00096, 0}, {1.15758, 0}, {1.51507, 0}, {1.46388, 0}, {1.31866, 0}, {1.10759, 0}, {0.881874, 0}, {0.707352, 0}, {0.641509, 0}, {0.707352, 0}, {0.881874, 0}, {1.10759, 0}, {1.31866, 0}, {1.46388, 0}, {1.69928, 0}, {1.59252, 0}, {1.38444, 0}, {1.10759, 0}, {0.836162, 0}, {0.666068, 0}, {0.666068, 0}, {0.836162, 0}, {1.10759, 0}, {1.38444, 0}, {1.59252, 0}, {1.69928, 0}, {1.76522, 0}, {1.59252, 0}, {1.31866, 0}, {1.00096, 0}, {0.740598, 0}, {0.639427, 0}, {0.740598, 0}, {1.00096, 0}, {1.31866, 0}, {1.59252, 0}, {1.76522, 0}, {1.82256, 0}, {1.69928, 0}, {1.46388, 0}, {1.15758, 0}, {0.862449, 0}, {0.679431, 0}, {0.679431, 1.20185e-17}, {0.862449, 0}, {1.15758, 0}, {1.46388, 0}, {1.69928, -1.20185e-17}, {1.82256, 0}, {1.82256, 0}, {1.08798, 1.85927e-18}, {0.930725, 1.85927e-18}, {0.824264, 1.85927e-18}, {0.775362, 1.85927e-18}, {0.775362, 1.85927e-18}, {0.824264, 1.85927e-18}, {0.930725, 1.85927e-18}, {1.08798, 1.85927e-18}, {1.25388, 1.85927e-18}, {1.36223, 1.85927e-18}, {1.36223, 1.85927e-18}, {1.25388, 1.85927e-18}, {0.930725, 1.85927e-18}, {0.869317, 1.85927e-18}, {0.85665, 1.57371e-17}, {0.858837, 1.66044e-17}, {0.85665, 1.08732e-17}, {0.869317, 1.38778e-17}, {0.930725, 6.93889e-18}, {1.04306, -5.5133e-18}, {1.15758, -7.15462e-18}, {1.20632, -1.01592e-17}, {1.15758, -1.70981e-17}, {1.04306, -5.5133e-18}, {0.824264, -1.20185e-17}, {0.85665, -5.07962e-18}, {0.899033, -8.54907e-18}, {0.899033, -1.20185e-17}, {0.85665, -1.20185e-17}, {0.824264, -2.14972e-17}, {0.851575, -1.90113e-17}, {0.931265, -1.80278e-17}, {1.00096, -1.20185e-17}, {1.00096, -9.47871e-18}, {0.931265, -8.49514e-18}, {0.851575, -6.00926e-18}, {0.775362, -5.07962e-18}, {0.858837, -5.07962e-18}, {0.899033, -5.07962e-18}, {0.858837, -1.20185e-17}, {0.775362, -1.5488e-17}, {0.72366, -1.5488e-17}, {0.743927, -2.75065e-17}, {0.804389, -1.80278e-17}, {0.836162, -1.5488e-17}, {0.804389, -1.5488e-17}, {0.743927, -3.46945e-18}, {0.72366, -6.00926e-18}, {0.775362, -1.20185e-17}, {0.85665, -1.28859e-17}, {0.85665, -1.89574e-17}, {0.775362, -1.89574e-17}, {0.679431, -2.24269e-17}, {0.639427, -3.40117e-17}, {0.666068, -1.89574e-17}, {0.707352, -2.49667e-17}, {0.707352, -2.24269e-17}, {0.666068, -9.97466e-18}, {0.639427, -1.89574e-17}, {0.679431, -1.29482e-17}, {0.824264, -1.10889e-17}, {0.869317, -1.71739e-17}, {0.824264, -1.45583e-17}, {0.72366, -2.14972e-17}, {0.639427, -3.19056e-17}, {0.616617, -5.29001e-17}, {0.63886, -4.21894e-17}, {0.655231, -4.32269e-17}, {0.63886, -3.19056e-17}, {0.616617, -4.82604e-18}, {0.639427, -1.81523e-17}, {0.72366, -1.01759e-17}, {0.930725, -1.20185e-17}, {0.930725, -8.54907e-18}, {0.851575, -1.20185e-17}, {0.743927, -1.20185e-17}, {0.666068, -1.20185e-17}, {0.63886, -1.37532e-17}, {0.640151, -1.20185e-17}, {0.640151, -1.20185e-17}, {0.63886, -1.20185e-17}, {0.666068, -1.37532e-17}, {0.743927, -1.20185e-17}, {0.851575, -1.20185e-17}, {1.08798, 1.85927e-18}, {1.04306, 1.85927e-18}, {0.931265, -1.20185e-17}, {0.804389, -1.20185e-17}, {0.707352, -1.89574e-17}, {0.655231, -1.89574e-17}, {0.640151, -2.4037e-17}, {0.655231, -2.4037e-17}, {0.707352, -1.89574e-17}, {0.804389, -1.89574e-17}, {0.931265, 0}, {1.04306, 0}, {1.25388, -1.20185e-17}, {1.15758, -1.89574e-17}, {1.00096, -1.89574e-17}, {0.836162, -1.89574e-17}, {0.707352, -2.24269e-17}, {0.63886, -6.93889e-18}, {0.63886, -2.49667e-17}, {0.707352, -2.49667e-17}, {0.836162, -2.24269e-17}, {1.00096, -3.09759e-17}, {1.15758, -1.29482e-17}, {1.25388, -1.29482e-17}, {1.36223, -1.29482e-17}, {1.20632, -1.29482e-17}, {1.00096, -4.07037e-17}, {0.804389, -1.29482e-17}, {0.666068, 1.10889e-17}, {0.616617, -1.29482e-17}, {0.666068, -1.10889e-17}, {0.804389, -1.29482e-17}, {1.00096, -3.69852e-17}, {1.20632, -1.29482e-17}, {1.36223, 1.29482e-17}, {1.42048, -1.29482e-17}, {1.36223, -1.20185e-17}, {1.15758, -1.20185e-17}, {0.931265, -1.20185e-17}, {0.743927, -1.20185e-17}, {0.639427, -1.20185e-17}, {0.639427, -1.20185e-17}, {0.743927, -1.20185e-17}, {0.931265, -1.20185e-17}, {1.15758, -1.20185e-17}, {1.36223, -1.20185e-17}, {1.48405, -1.20185e-17}, {1.48405, -1.20185e-17}, {1.25388, 1.57371e-17}, {1.04306, 1.57371e-17}, {0.851575, -1.20185e-17}, {0.72366, -1.20185e-17}, {0.679431, -2.58963e-17}, {0.72366, -4.09195e-17}, {0.851575, -2.4037e-17}, {1.04306, -3.60556e-17}, {1.25388, -2.58963e-17}, {1.42048, -1.08732e-17}, {1.48405, 0}, {1.42048, 1.20185e-17}, {0.905261, 0}, {0.930725, 3.46945e-18}, {0.981652, 0}, {1.00712, 0}, {0.981652, 0}, {0.930725, -1.73472e-18}, {0.905261, 0}, {0.930725, 0}, {0.981652, 0}, {1.00712, -1.73472e-18}, {0.981652, 0}, {0.930725, 0}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, {1.1084, 1.73472e-18}, {1.03162, 0}, {0.930725, -6.00926e-18}, {0.864823, 0}, {0.851575, -8.67362e-19}, {0.862449, 0}, {0.862449, 6.00926e-18}, {0.851575, 0}, {0.864823, -8.67362e-19}, {0.981652, 0}, {1.1084, 3.46945e-18}, {1.16145, 0}, {1.1084, 0}, {0.981652, 0}, {0.851575, -1.73472e-18}, {0.771224, 0}, {0.743927, 0}, {0.740598, 0}, {0.743927, -1.73472e-18}, {0.771224, 0}, {0.851575, 0}, {1.00712, 0}, {1.1084, 6.93889e-18}, {1.1084, 0}, {1.00712, 0}, {0.862449, 0}, {0.743927, -3.46945e-18}, {0.683306, 0}, {0.666068, 0}, {0.666068, 0}, {0.683306, -3.46945e-18}, {0.743927, 0}, {0.862449, 0}, {0.981652, 0}, {1.03162, -1.38028e-18}, {0.981652, 0}, {0.862449, 0}, {0.740598, 0}, {0.666068, 6.90141e-19}, {0.641509, 0}, {0.63886, 0}, {0.641509, 0}, {0.666068, 6.90141e-19}, {0.740598, 0}, {0.862449, 0}, {0.930725, -8.67362e-18}, {0.930725, -8.67362e-18}, {0.851575, -6.93889e-18}, {0.743927, -6.93889e-18}, {0.666068, 4.33681e-18}, {0.63886, 1.63553e-17}, {0.640151, 9.47871e-18}, {0.640151, 1.24833e-17}, {0.63886, 4.33681e-18}, {0.666068, -7.68171e-18}, {0.743927, -2.53981e-18}, {0.851575, -5.54444e-18}, {0.905261, 0}, {0.864823, -1.73472e-18}, {0.771224, 0}, {0.683306, 0}, {0.641509, 0}, {0.640151, 8.67362e-19}, {0.645833, 0}, {0.640151, 0}, {0.641509, 0}, {0.683306, 8.67362e-19}, {0.771224, 0}, {0.864823, 0}, {0.930725, 0}, {0.851575, 0}, {0.743927, 0}, {0.666068, 0}, {0.63886, 0}, {0.640151, 0}, {0.640151, 0}, {0.63886, 0}, {0.666068, 0}, {0.743927, 0}, {0.851575, 0}, {0.930725, 0}, {0.981652, 0}, {0.862449, 0}, {0.740598, 0}, {0.666068, 0}, {0.641509, 0}, {0.63886, 0}, {0.641509, 0}, {0.666068, 0}, {0.740598, 0}, {0.862449, 0}, {0.981652, 0}, {1.03162, 0}, {1.00712, 1.38778e-17}, {0.862449, 1.38778e-17}, {0.743927, 0}, {0.683306, 0}, {0.666068, -6.93889e-18}, {0.666068, -1.29482e-17}, {0.683306, -1.20185e-17}, {0.743927, -1.20185e-17}, {0.862449, -6.93889e-18}, {1.00712, -9.29636e-19}, {1.1084, 1.20185e-17}, {1.1084, 1.20185e-17}, {0.981652, 0}, {0.851575, 1.38778e-17}, {0.771224, 0}, {0.743927, 0}, {0.740598, 0}, {0.743927, -6.93889e-18}, {0.771224, 0}, {0.851575, 0}, {0.981652, 0}, {1.1084, -6.93889e-18}, {1.16145, 0}, {1.1084, 0}, {0.930725, 0}, {0.864823, 0}, {0.851575, 0}, {0.862449, 0}, {0.862449, 0}, {0.851575, 0}, {0.864823, 0}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, {1.1084, 0}, {1.03162, 0}, {1.08798, 0}, {1.25388, 0}, {1.36223, 0}, {1.36223, 0}, {1.25388, 0}, {1.08798, 1.20185e-17}, {0.930725, 0}, {0.824264, 0}, {0.775362, 0}, {0.775362, -1.20185e-17}, {0.824264, 0}, {0.930725, 0}, {1.25388, 2.77556e-17}, {1.42048, -1.38778e-17}, {1.48405, -1.38778e-17}, {1.42048, 0}, {1.25388, -1.38778e-17}, {1.04306, 6.93889e-18}, {0.851575, 3.09759e-17}, {0.72366, 0}, {0.679431, -1.38778e-17}, {0.72366, 6.93889e-18}, {0.851575, -1.70981e-17}, {1.04306, 0}, {1.36223, 0}, {1.48405, -6.93889e-18}, {1.48405, 0}, {1.36223, 0}, {1.15758, 0}, {0.931265, 3.46945e-18}, {0.743927, 0}, {0.639427, 0}, {0.639427, 0}, {0.743927, 3.46945e-18}, {0.931265, 0}, {1.15758, 0}, {1.36223, 0}, {1.42048, -2.07544e-18}, {1.36223, 0}, {1.20632, 0}, {1.00096, 0}, {0.804389, 1.03772e-18}, {0.666068, 0}, {0.616617, 0}, {0.666068, 0}, {0.804389, 1.03772e-18}, {1.00096, 0}, {1.20632, 0}, {1.25388, 0}, {1.25388, 0}, {1.15758, 0}, {1.00096, 0}, {0.836162, 0}, {0.707352, 0}, {0.63886, 0}, {0.63886, 0}, {0.707352, 0}, {0.836162, 0}, {1.00096, 0}, {1.15758, 0}, {1.08798, -4.64818e-19}, {1.04306, 0}, {0.931265, 0}, {0.804389, 0}, {0.707352, 2.32409e-19}, {0.655231, 0}, {0.640151, -6.00926e-18}, {0.655231, -4.50694e-18}, {0.707352, 2.32409e-19}, {0.804389, 0}, {0.931265, 6.00926e-18}, {1.04306, 4.50694e-18}, {0.930725, 0}, {0.851575, 0}, {0.743927, 0}, {0.666068, 0}, {0.63886, 0}, {0.640151, 0}, {0.640151, 0}, {0.63886, 0}, {0.666068, 0}, {0.743927, 0}, {0.851575, 0}, {0.930725, 0}, {0.824264, 0}, {0.72366, 0}, {0.639427, 0}, {0.616617, 0}, {0.63886, 0}, {0.655231, -1.50231e-18}, {0.63886, 0}, {0.616617, 0}, {0.639427, 0}, {0.72366, 1.50231e-18}, {0.824264, 0}, {0.869317, 0}, {0.775362, 0}, {0.679431, 0}, {0.639427, 0}, {0.666068, 0}, {0.707352, 0}, {0.707352, 0}, {0.666068, 0}, {0.639427, 0}, {0.679431, 0}, {0.775362, 0}, {0.85665, 0}, {0.85665, 0}, {0.775362, -6.93889e-18}, {0.72366, -3.46945e-18}, {0.743927, 0}, {0.804389, 0}, {0.836162, 4.64818e-19}, {0.804389, 1.73472e-18}, {0.743927, 0}, {0.72366, 6.00926e-18}, {0.775362, 6.47408e-18}, {0.858837, 1.73472e-18}, {0.899033, 0}, {0.858837, -6.00926e-18}, {0.824264, 0}, {0.851575, 0}, {0.931265, 0}, {1.00096, 0}, {1.00096, 0}, {0.931265, 0}, {0.851575, 0}, {0.824264, 0}, {0.85665, 0}, {0.899033, 0}, {0.899033, 0}, {0.85665, 0}, {0.930725, 0}, {1.04306, 0}, {1.15758, 0}, {1.20632, 0}, {1.15758, 0}, {1.04306, 0}, {0.930725, 0}, {0.869317, 0}, {0.85665, 0}, {0.858837, 0}, {0.85665, 0}, {0.869317, 0}, {1.51507, 0}, {1.69928, 0}, {1.76522, 0}, {1.69928, 0}, {1.51507, 0}, {1.25388, -2.4037e-17}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, {0.775362, 2.4037e-17}, {0.981652, 0}, {1.25388, 0}, {1.69928, 0}, {1.82256, -1.38778e-17}, {1.82256, 0}, {1.69928, 0}, {1.46388, 0}, {1.15758, -4.11352e-17}, {0.862449, 0}, {0.679431, 0}, {0.679431, 0}, {0.862449, 5.5013e-17}, {1.15758, 0}, {1.46388, 0}, {1.76522, 0}, {1.82256, 6.6502e-18}, {1.76522, 0}, {1.59252, 0}, {1.31866, 0}, {1.00096, -3.3251e-18}, {0.740598, 0}, {0.639427, 0}, {0.740598, 0}, {1.00096, -3.3251e-18}, {1.31866, 0}, {1.59252, 0}, {1.69928, 0}, {1.69928, 0}, {1.59252, 0}, {1.38444, 0}, {1.10759, 0}, {0.836162, 0}, {0.666068, 0}, {0.666068, 0}, {0.836162, 0}, {1.10759, 0}, {1.38444, 0}, {1.59252, 0}, {1.51507, 0}, {1.46388, 0}, {1.31866, 0}, {1.10759, 0}, {0.881874, 0}, {0.707352, 0}, {0.641509, 0}, {0.707352, 0}, {0.881874, 0}, {1.10759, 0}, {1.31866, 0}, {1.46388, 0}, {1.25388, 1.38778e-17}, {1.15758, 0}, {1.00096, 0}, {0.836162, 2.77556e-17}, {0.707352, -6.93889e-18}, {0.63886, -1.20185e-17}, {0.63886, -6.00926e-18}, {0.707352, -2.58963e-17}, {0.836162, -6.93889e-18}, {1.00096, 1.20185e-17}, {1.15758, 6.00926e-18}, {1.25388, -1.85927e-18}, {0.981652, 0}, {0.862449, 1.38778e-17}, {0.740598, 0}, {0.666068, 0}, {0.641509, 0}, {0.63886, -6.93889e-18}, {0.641509, 0}, {0.666068, 0}, {0.740598, 0}, {0.862449, -6.93889e-18}, {0.981652, 0}, {1.03162, 0}, {0.775362, 0}, {0.679431, 0}, {0.639427, 0}, {0.666068, 0}, {0.707352, 0}, {0.707352, 0}, {0.666068, 0}, {0.639427, 0}, {0.679431, 0}, {0.775362, 0}, {0.85665, 0}, {0.85665, 0}, {0.698375, 0}, {0.679431, 0}, {0.740598, 0}, {0.836162, 0}, {0.881874, 0}, {0.836162, -6.00926e-18}, {0.740598, 0}, {0.679431, 0}, {0.698375, 0}, {0.763031, 6.00926e-18}, {0.797429, 0}, {0.763031, 0}, {0.775362, 0}, {0.862449, 0}, {1.00096, 0}, {1.10759, 0}, {1.10759, 0}, {1.00096, 0}, {0.862449, 0}, {0.775362, 0}, {0.763031, 0}, {0.782576, 0}, {0.782576, 0}, {0.763031, 0}, {0.981652, 0}, {1.15758, 0}, {1.31866, 0}, {1.38444, 0}, {1.31866, 0}, {1.15758, 0}, {0.981652, 0}, {0.85665, 0}, {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, {0.85665, 0}, {1.25388, 0}, {1.46388, 0}, {1.59252, 0}, {1.59252, 0}, {1.46388, 0}, {1.25388, 2.4037e-17}, {1.03162, 0}, {0.85665, 0}, {0.763031, 0}, {0.763031, -2.4037e-17}, {0.85665, 0}, {1.03162, 0}, {1.92793, 1.20185e-17}, {2.03322, 2.58963e-17}, {2.03322, 3.97741e-17}, {1.92793, 1.20185e-17}, {1.69928, 3.60556e-17}, {1.36223, 5.07962e-18}, {1.00712, -1.85927e-18}, {0.775362, 1.20185e-17}, {0.775362, -1.20185e-17}, {1.00712, 5.07962e-18}, {1.36223, -1.85927e-18}, {1.69928, 1.20185e-17}, {2.03322, 2.41616e-17}, {2.07555, 2.2009e-17}, {2.03322, 7.96727e-17}, {1.88226, 1.35184e-16}, {1.59252, 2.41616e-17}, {1.20632, 2.52379e-17}, {0.862449, 4.44801e-17}, {0.72366, -3.13496e-17}, {0.862449, 2.41616e-17}, {1.20632, 2.52379e-17}, {1.59252, -5.16681e-17}, {1.88226, -3.13496e-17}, {2.03322, 3.97741e-17}, {2.03322, 2.58963e-17}, {1.94478, 3.97741e-17}, {1.7299, 3.97741e-17}, {1.38444, 3.97741e-17}, {1.00096, 4.6713e-17}, {0.743927, 3.97741e-17}, {0.743927, 3.97741e-17}, {1.00096, 3.97741e-17}, {1.38444, 4.6713e-17}, {1.7299, 3.97741e-17}, {1.94478, 3.97741e-17}, {1.92793, 3.97741e-17}, {1.88226, 1.20185e-17}, {1.7299, 3.97741e-17}, {1.45645, 3.97741e-17}, {1.10759, 3.97741e-17}, {0.804389, 5.36519e-17}, {0.683306, 3.97741e-17}, {0.804389, 3.97741e-17}, {1.10759, 3.97741e-17}, {1.45645, 5.36519e-17}, {1.7299, 3.97741e-17}, {1.88226, 3.97741e-17}, {1.69928, 3.60556e-17}, {1.59252, 6.38111e-17}, {1.38444, 3.60556e-17}, {1.10759, 3.60556e-17}, {0.836162, 3.60556e-17}, {0.666068, 2.21778e-17}, {0.666068, 3.60556e-17}, {0.836162, 3.60556e-17}, {1.10759, 3.60556e-17}, {1.38444, 2.21778e-17}, {1.59252, 3.60556e-17}, {1.69928, 3.60556e-17}, {1.36223, 7.16174e-17}, {1.20632, 8.54952e-17}, {1.00096, 8.54952e-17}, {0.804389, 5.77396e-17}, {0.666068, 3.32044e-17}, {0.616617, 1.4247e-17}, {0.666068, -3.75829e-17}, {0.804389, -3.19678e-17}, {1.00096, -1.48697e-17}, {1.20632, -9.79007e-18}, {1.36223, 4.20398e-17}, {1.42048, 6.41803e-17}, {1.00712, 2.21778e-17}, {0.862449, 3.60556e-17}, {0.743927, 4.99333e-17}, {0.683306, 4.99333e-17}, {0.666068, 4.62148e-17}, {0.666068, 3.4769e-17}, {0.683306, 2.03185e-17}, {0.743927, 8.29997e-18}, {0.862449, -1.85927e-18}, {1.00712, -4.29122e-18}, {1.1084, -3.71854e-18}, {1.1084, 8.29997e-18}, {0.775362, -1.85927e-18}, {0.72366, 1.20185e-17}, {0.743927, 1.89574e-17}, {0.804389, 2.58963e-17}, {0.836162, 2.21778e-17}, {0.804389, 1.52389e-17}, {0.743927, -2.49095e-19}, {0.72366, -1.57371e-17}, {0.775362, -2.58963e-17}, {0.858837, -3.28352e-17}, {0.899033, -2.42861e-17}, {0.858837, -1.57371e-17}, {0.775362, -1.20185e-17}, {0.862449, 1.85927e-18}, {1.00096, 1.22676e-17}, {1.10759, 1.57371e-17}, {1.10759, 1.20185e-17}, {1.00096, 2.07499e-18}, {0.862449, -1.21431e-17}, {0.775362, -2.58963e-17}, {0.763031, -3.60556e-17}, {0.782576, -3.99898e-17}, {0.782576, -3.61801e-17}, {0.763031, -2.58963e-17}, {1.00712, -7.36012e-17}, {1.20632, -7.36012e-17}, {1.38444, -1.809e-17}, {1.45645, 1.14003e-17}, {1.38444, 3.67072e-17}, {1.20632, 5.77396e-17}, {1.00712, 2.9984e-17}, {0.858837, 1.52389e-17}, {0.782576, -1.73761e-17}, {0.761485, -3.84085e-17}, {0.782576, -6.61641e-17}, {0.858837, -8.09093e-17}, {1.36223, -2.58963e-17}, {1.59252, 1.85927e-18}, {1.7299, 1.85927e-18}, {1.7299, 1.85927e-18}, {1.59252, -1.85927e-18}, {1.36223, -1.57371e-17}, {1.1084, -1.57371e-17}, {0.899033, -3.97741e-17}, {0.782576, -4.99333e-17}, {0.782576, -6.38111e-17}, {0.899033, -6.38111e-17}, {1.1084, -3.97741e-17}, {1.69928, -1.85927e-18}, {1.88226, 2.58963e-17}, {1.94478, 1.20185e-17}, {1.88226, 2.58963e-17}, {1.69928, 2.21778e-17}, {1.42048, 8.29997e-18}, {1.1084, -8.79816e-18}, {0.858837, -1.57371e-17}, {0.763031, -2.58963e-17}, {0.858837, -3.97741e-17}, {1.1084, -8.79816e-18}, {1.42048, -1.57371e-17}, {2.14383, 0}, {2.16623, -3.54439e-19}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 1.77219e-19}, {0.981652, 0}, {0.824264, 0}, {0.981652, 0}, {1.36223, 1.77219e-19}, {1.76522, 0}, {2.03322, 0}, {2.16623, -6.93889e-18}, {2.16623, -6.93889e-18}, {2.11997, -6.93889e-18}, {1.94478, -6.93889e-18}, {1.59252, -6.93889e-18}, {1.15758, -6.93889e-18}, {0.851575, 1.70981e-17}, {0.851575, -6.93889e-18}, {1.15758, -6.93889e-18}, {1.59252, -6.93889e-18}, {1.94478, -3.09759e-17}, {2.11997, -6.93889e-18}, {2.14383, 0}, {2.11997, 0}, {2.00496, 0}, {1.7299, 0}, {1.31866, 0}, {0.931265, 4.80741e-17}, {0.771224, 0}, {0.931265, 0}, {1.31866, 0}, {1.7299, -4.80741e-17}, {2.00496, 0}, {2.11997, 0}, {2.03322, 0}, {1.94478, 0}, {1.7299, 0}, {1.38444, 0}, {1.00096, 0}, {0.743927, 0}, {0.743927, 0}, {1.00096, 0}, {1.38444, 0}, {1.7299, 0}, {1.94478, 0}, {2.03322, 0}, {1.76522, 0}, {1.59252, 5.55112e-17}, {1.31866, 0}, {1.00096, 0}, {0.740598, 0}, {0.639427, -2.77556e-17}, {0.740598, 0}, {1.00096, 0}, {1.31866, 0}, {1.59252, -2.77556e-17}, {1.76522, 0}, {1.82256, 0}, {1.36223, 3.46945e-18}, {1.15758, 3.1225e-17}, {0.931265, 3.1225e-17}, {0.743927, 3.1225e-17}, {0.639427, 2.75065e-17}, {0.639427, 1.36287e-17}, {0.743927, 1.61018e-18}, {0.931265, -1.04083e-17}, {1.15758, -2.05676e-17}, {1.36223, -3.44454e-17}, {1.48405, -2.24269e-17}, {1.48405, -1.04083e-17}, {0.981652, 0}, {0.851575, 1.38778e-17}, {0.771224, 0}, {0.743927, 0}, {0.740598, 0}, {0.743927, -6.93889e-18}, {0.771224, 0}, {0.851575, 0}, {0.981652, 0}, {1.1084, -6.93889e-18}, {1.16145, 0}, {1.1084, 0}, {0.824264, 0}, {0.851575, 0}, {0.931265, 0}, {1.00096, 0}, {1.00096, 0}, {0.931265, 0}, {0.851575, 0}, {0.824264, 0}, {0.85665, 0}, {0.899033, 0}, {0.899033, 0}, {0.85665, 0}, {0.981652, 0}, {1.15758, 0}, {1.31866, 0}, {1.38444, 0}, {1.31866, 0}, {1.15758, 0}, {0.981652, 0}, {0.85665, 0}, {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, {0.85665, 0}, {1.36223, 3.1225e-17}, {1.59252, 3.1225e-17}, {1.7299, 1.73472e-17}, {1.7299, -3.46945e-18}, {1.59252, -1.04083e-17}, {1.36223, -1.04083e-17}, {1.1084, -2.75065e-17}, {0.899033, -1.70981e-17}, {0.782576, -1.04083e-17}, {0.782576, -1.04083e-17}, {0.899033, 2.05676e-17}, {1.1084, 3.09759e-17}, {1.76522, 0}, {1.94478, 2.77556e-17}, {2.00496, 0}, {1.94478, 0}, {1.76522, 0}, {1.48405, -1.38778e-17}, {1.16145, 0}, {0.899033, 0}, {0.797429, 0}, {0.899033, -1.38778e-17}, {1.16145, 0}, {1.48405, 0}, {2.03322, 0}, {2.11997, 1.38778e-17}, {2.11997, 0}, {2.03322, 0}, {1.82256, 0}, {1.48405, -6.93889e-18}, {1.1084, 0}, {0.85665, 0}, {0.85665, 0}, {1.1084, -6.93889e-18}, {1.48405, 0}, {1.82256, 0}, {2.17701, 0}, {2.17701, 0}, {2.16623, 0}, {2.03322, 0}, {1.69928, 0}, {1.25388, 0}, {0.930725, 0}, {0.930725, 0}, {1.25388, 0}, {1.69928, 0}, {2.03322, 0}, {2.16623, 0}, {2.17701, -5.20417e-18}, {2.17945, -2.77556e-17}, {2.11997, 0}, {1.88226, 0}, {1.46388, 2.60209e-18}, {1.04306, -1.01592e-17}, {0.864823, 0}, {1.04306, 1.20185e-17}, {1.46388, 2.60209e-18}, {1.88226, 3.79148e-17}, {2.11997, 0}, {2.17945, -1.20185e-17}, {2.16623, 0}, {2.11997, 0}, {1.94478, 0}, {1.59252, 0}, {1.15758, 0}, {0.851575, 0}, {0.851575, 0}, {1.15758, 0}, {1.59252, 0}, {1.94478, 0}, {2.11997, 0}, {2.16623, 0}, {2.03322, 0}, {1.88226, 0}, {1.59252, 0}, {1.20632, 0}, {0.862449, 0}, {0.72366, 2.4037e-17}, {0.862449, 0}, {1.20632, 0}, {1.59252, 0}, {1.88226, -2.4037e-17}, {2.03322, 0}, {2.07555, 0}, {1.69928, 0}, {1.46388, 0}, {1.15758, 0}, {0.862449, 0}, {0.679431, 0}, {0.679431, -1.20185e-17}, {0.862449, 0}, {1.15758, 0}, {1.46388, 0}, {1.69928, 1.20185e-17}, {1.82256, 0}, {1.82256, 0}, {1.25388, 0}, {1.04306, 0}, {0.851575, 0}, {0.72366, 0}, {0.679431, 0}, {0.72366, 1.50231e-18}, {0.851575, 0}, {1.04306, 0}, {1.25388, 0}, {1.42048, -1.50231e-18}, {1.48405, 0}, {1.42048, 0}, {0.930725, 0}, {0.864823, 0}, {0.851575, 0}, {0.862449, 0}, {0.862449, 0}, {0.851575, 0}, {0.864823, 0}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, {1.1084, 0}, {1.03162, 0}, {0.930725, 0}, {1.04306, 0}, {1.15758, 0}, {1.20632, 0}, {1.15758, 0}, {1.04306, 0}, {0.930725, 0}, {0.869317, 0}, {0.85665, 0}, {0.858837, 0}, {0.85665, 0}, {0.869317, 0}, {1.25388, 0}, {1.46388, 0}, {1.59252, 0}, {1.59252, 0}, {1.46388, 0}, {1.25388, 0}, {1.03162, 0}, {0.85665, 0}, {0.763031, 0}, {0.763031, 0}, {0.85665, 0}, {1.03162, 0}, {1.69928, 0}, {1.88226, 2.77556e-17}, {1.94478, 0}, {1.88226, 0}, {1.69928, 0}, {1.42048, -1.38778e-17}, {1.1084, 0}, {0.858837, 0}, {0.763031, 0}, {0.858837, -1.38778e-17}, {1.1084, 0}, {1.42048, 0}, {2.03322, 0}, {2.11997, 0}, {2.11997, 0}, {2.03322, 0}, {1.82256, 0}, {1.48405, 0}, {1.1084, 0}, {0.85665, 0}, {0.85665, 0}, {1.1084, 0}, {1.48405, 0}, {1.82256, 0}, {2.16623, 0}, {2.17945, 5.846e-18}, {2.16623, 0}, {2.07555, 0}, {1.82256, 0}, {1.42048, -2.923e-18}, {1.03162, 0}, {0.869317, 0}, {1.03162, 0}, {1.42048, -2.923e-18}, {1.82256, 0}, {2.07555, 0}}; - const std::vector > in_3 = {{-1922.64, 0}, {-1001.68, 433.439}, {-219.942, 33.69}, {-68.6663, -31.5682}, {-19.01, -3.81031}, {-0.58927, -0.511793}, {0.996488, -7.89357e-17}, {-0.58927, 0.511793}, {-19.01, 3.81031}, {-68.6663, 31.5682}, {-219.942, -33.69}, {-1001.68, -433.439}, {-1001.68, 433.439}, {-517.273, 5.9508e-14}, {-352.926, -115.37}, {-141.346, -11.6655}, {-25.4876, 7.80357}, {-0.501786, 1.37769}, {1.08582, -0.0715093}, {0.894073, 0.768163}, {-2.92014, 2.09061}, {-25.1033, -5.63667}, {-174.402, -55.7416}, {-690.893, -8.6513e-15}, {-219.942, 33.69}, {-352.926, -115.37}, {-281.447, 7.54952e-14}, {-85.5703, 25.4729}, {-13.6457, 2.44125}, {0.99011, 1.07155}, {0.910811, -0.175105}, {0.653152, -0.025503}, {0.169545, -0.652296}, {-11.7051, -3.59868}, {-72.4614, -2.89031e-14}, {-174.402, 55.7416}, {-68.6663, -31.5682}, {-141.346, -11.6655}, {-85.5703, 25.4729}, {-28.2549, -3.81917e-14}, {-9.75792, -2.71861}, {1.33155, -0.16363}, {0.66818, -0.0435261}, {0.136765, 0.00586452}, {0.71571, -0.0128863}, {1.26225, -4.03935e-14}, {-11.7051, 3.59868}, {-25.1033, 5.63667}, {-19.01, -3.81031}, {-25.4876, 7.80357}, {-13.6457, 2.44125}, {-9.75792, -2.71861}, {1.25751, 1.30778e-15}, {1.13756, -0.487619}, {0.344756, -0.0047045}, {0.187321, 0.0707209}, {0.272653, -2.48445e-14}, {0.71571, 0.0128863}, {0.169545, 0.652296}, {-2.92014, -2.09061}, {-0.58927, -0.511793}, {-0.501786, 1.37769}, {0.99011, 1.07155}, {1.33155, -0.16363}, {1.13756, -0.487619}, {0.536417, -2.98492e-14}, {0.198078, 0.0681101}, {0.245083, -9.7141e-15}, {0.187321, -0.0707209}, {0.136765, -0.00586452}, {0.653152, 0.025503}, {0.894073, -0.768163}, {0.996488, -5.0257e-15}, {1.08582, -0.0715093}, {0.910811, -0.175105}, {0.66818, -0.0435261}, {0.344756, -0.0047045}, {0.198078, 0.0681101}, {0.256446, -1.4581e-15}, {0.198078, -0.0681101}, {0.344756, 0.0047045}, {0.66818, 0.0435261}, {0.910811, 0.175105}, {1.08582, 0.0715093}, {-0.58927, 0.511793}, {0.894073, 0.768163}, {0.653152, -0.025503}, {0.136765, 0.00586452}, {0.187321, 0.0707209}, {0.245083, -9.70357e-15}, {0.198078, -0.0681101}, {0.536417, 2.82968e-14}, {1.13756, 0.487619}, {1.33155, 0.16363}, {0.99011, -1.07155}, {-0.501786, -1.37769}, {-19.01, 3.81031}, {-2.92014, 2.09061}, {0.169545, -0.652296}, {0.71571, -0.0128863}, {0.272653, 2.48445e-14}, {0.187321, -0.0707209}, {0.344756, 0.0047045}, {1.13756, 0.487619}, {1.25751, -1.30778e-15}, {-9.75792, 2.71861}, {-13.6457, -2.44125}, {-25.4876, -7.80357}, {-68.6663, 31.5682}, {-25.1033, -5.63667}, {-11.7051, -3.59868}, {1.26225, 6.30607e-14}, {0.71571, 0.0128863}, {0.136765, -0.00586452}, {0.66818, 0.0435261}, {1.33155, 0.16363}, {-9.75792, 2.71861}, {-28.2549, 2.77768e-14}, {-85.5703, -25.4729}, {-141.346, 11.6655}, {-219.942, -33.69}, {-174.402, -55.7416}, {-72.4614, -7.99361e-15}, {-11.7051, 3.59868}, {0.169545, 0.652296}, {0.653152, 0.025503}, {0.910811, 0.175105}, {0.99011, -1.07155}, {-13.6457, -2.44125}, {-85.5703, -25.4729}, {-281.447, -5.40755e-14}, {-352.926, 115.37}, {-1001.68, -433.439}, {-690.893, 1.06581e-14}, {-174.402, 55.7416}, {-25.1033, 5.63667}, {-2.92014, -2.09061}, {0.894073, -0.768163}, {1.08582, 0.0715093}, {-0.501786, -1.37769}, {-25.4876, -7.80357}, {-141.346, 11.6655}, {-352.926, 115.37}, {-517.273, -3.16493e-14}, {-1001.68, 433.439}, {-517.273, 7.54952e-14}, {-352.926, -115.37}, {-141.346, -11.6655}, {-25.4876, 7.80357}, {-0.501786, 1.37769}, {1.08582, -0.0715093}, {0.894073, 0.768163}, {-2.92014, 2.09061}, {-25.1033, -5.63667}, {-174.402, -55.7416}, {-690.893, 1.97704e-14}, {-517.273, 2.84217e-14}, {-1001.68, -433.439}, {-690.893, -4.9738e-14}, {-174.402, 55.7416}, {-25.1033, 5.63667}, {-2.92014, -2.09061}, {0.894073, -0.768163}, {1.08582, 0.0715093}, {-0.501786, -1.37769}, {-25.4876, -7.80357}, {-141.346, 11.6655}, {-352.926, 115.37}, {-352.926, -115.37}, {-690.893, -2.4841e-14}, {-352.926, 115.37}, {-100.781, 4.56302e-14}, {-39.4244, -13.5375}, {-8.79435, -1.30817}, {0.157364, -0.195195}, {0.548415, 3.66208e-14}, {0.157364, 0.195195}, {-8.79435, 1.30817}, {-39.4244, 13.5375}, {-100.781, 1.20069e-14}, {-141.346, -11.6655}, {-174.402, 55.7416}, {-100.781, 5.10703e-14}, {-85.5703, -25.4729}, {-36.1195, 2.5003e-14}, {-5.30025, 1.65834}, {0.642398, 0.553017}, {0.422501, 0.0375059}, {0.608177, 0.0924076}, {0.984075, -0.568373}, {-6.57219, -1.46426e-14}, {-39.4244, -13.5375}, {-25.4876, 7.80357}, {-25.1033, 5.63667}, {-39.4244, -13.5375}, {-36.1195, 1.14353e-14}, {-9.75792, 2.71861}, {-0.90306, 1.82384e-14}, {0.856068, 0.244528}, {0.331794, -0.0443841}, {0.197596, -0.0729406}, {0.718888, -1.86825e-14}, {0.984075, 0.568373}, {-8.79435, -1.30817}, {-0.501786, 1.37769}, {-2.92014, -2.09061}, {-8.79435, -1.30817}, {-5.30025, 1.65834}, {-0.90306, 6.65646e-14}, {1.13756, 0.487619}, {0.609244, 2.33578e-14}, {0.183862, -0.0625824}, {0.116983, -1.51613e-14}, {0.197596, 0.0729406}, {0.608177, -0.0924076}, {0.157364, -0.195195}, {1.08582, -0.0715093}, {0.894073, -0.768163}, {0.157364, -0.195195}, {0.642398, 0.553017}, {0.856068, 0.244528}, {0.609244, -1.08488e-14}, {0.198078, -0.0681101}, {0.119232, -2.82893e-14}, {0.183862, 0.0625824}, {0.331794, 0.0443841}, {0.422501, -0.0375059}, {0.548415, -1.3122e-14}, {0.894073, 0.768163}, {1.08582, 0.0715093}, {0.548415, 5.96745e-15}, {0.422501, 0.0375059}, {0.331794, -0.0443841}, {0.183862, -0.0625824}, {0.119232, -5.39905e-15}, {0.198078, 0.0681101}, {0.609244, 1.71134e-16}, {0.856068, -0.244528}, {0.642398, -0.553017}, {0.157364, 0.195195}, {-2.92014, 2.09061}, {-0.501786, -1.37769}, {0.157364, 0.195195}, {0.608177, 0.0924076}, {0.197596, -0.0729406}, {0.116983, 1.40688e-14}, {0.183862, 0.0625824}, {0.609244, -5.18358e-15}, {1.13756, -0.487619}, {-0.90306, -2.30043e-15}, {-5.30025, -1.65834}, {-8.79435, 1.30817}, {-25.1033, -5.63667}, {-25.4876, -7.80357}, {-8.79435, 1.30817}, {0.984075, -0.568373}, {0.718888, -3.72397e-14}, {0.197596, 0.0729406}, {0.331794, 0.0443841}, {0.856068, -0.244528}, {-0.90306, -2.49328e-14}, {-9.75792, -2.71861}, {-36.1195, -2.84933e-14}, {-39.4244, 13.5375}, {-174.402, -55.7416}, {-141.346, 11.6655}, {-39.4244, 13.5375}, {-6.57219, -3.10862e-15}, {0.984075, 0.568373}, {0.608177, -0.0924076}, {0.422501, -0.0375059}, {0.642398, -0.553017}, {-5.30025, -1.65834}, {-36.1195, -1.1744e-14}, {-85.5703, 25.4729}, {-100.781, -5.24575e-15}, {-690.893, -1.64069e-14}, {-352.926, 115.37}, {-100.781, 4.28486e-15}, {-39.4244, -13.5375}, {-8.79435, -1.30817}, {0.157364, -0.195195}, {0.548415, -2.47213e-15}, {0.157364, 0.195195}, {-8.79435, 1.30817}, {-39.4244, 13.5375}, {-100.781, -2.09326e-14}, {-352.926, -115.37}, {-219.942, 33.69}, {-352.926, -115.37}, {-281.447, -2.30926e-14}, {-85.5703, 25.4729}, {-13.6457, 2.44125}, {0.99011, 1.07155}, {0.910811, -0.175105}, {0.653152, -0.025503}, {0.169545, -0.652296}, {-11.7051, -3.59868}, {-72.4614, -2.45898e-14}, {-174.402, 55.7416}, {-352.926, -115.37}, {-690.893, -6.4928e-14}, {-352.926, 115.37}, {-100.781, 3.07079e-14}, {-39.4244, -13.5375}, {-8.79435, -1.30817}, {0.157364, -0.195195}, {0.548415, 3.23816e-15}, {0.157364, 0.195195}, {-8.79435, 1.30817}, {-39.4244, 13.5375}, {-100.781, 1.55451e-14}, {-281.447, -4.17444e-14}, {-352.926, 115.37}, {-219.942, -33.69}, {-174.402, -55.7416}, {-72.4614, 6.06555e-15}, {-11.7051, 3.59868}, {0.169545, 0.652296}, {0.653152, 0.025503}, {0.910811, 0.175105}, {0.99011, -1.07155}, {-13.6457, -2.44125}, {-85.5703, -25.4729}, {-85.5703, 25.4729}, {-100.781, 3.55271e-15}, {-174.402, -55.7416}, {-141.346, 11.6655}, {-39.4244, 13.5375}, {-6.57219, -3.34301e-15}, {0.984075, 0.568373}, {0.608177, -0.0924076}, {0.422501, -0.0375059}, {0.642398, -0.553017}, {-5.30025, -1.65834}, {-36.1195, -1.78338e-14}, {-13.6457, 2.44125}, {-39.4244, -13.5375}, {-72.4614, -5.77808e-15}, {-39.4244, 13.5375}, {-13.6457, -2.44125}, {-5.30025, -1.65834}, {1.10754, 3.09516e-15}, {0.438213, -0.0482423}, {0.123572, -2.49539e-14}, {0.438213, 0.0482423}, {1.10754, 2.15556e-14}, {-5.30025, 1.65834}, {0.99011, 1.07155}, {-8.79435, -1.30817}, {-11.7051, 3.59868}, {-6.57219, -5.10703e-15}, {-5.30025, -1.65834}, {1.33155, 0.16363}, {0.856068, -0.244528}, {0.234236, -8.58421e-15}, {0.175034, 0.0639427}, {0.247817, -1.38739e-14}, {0.438213, -0.0482423}, {0.642398, 0.553017}, {0.910811, -0.175105}, {0.157364, -0.195195}, {0.169545, 0.652296}, {0.984075, 0.568373}, {1.10754, 2.34291e-14}, {0.856068, -0.244528}, {0.344756, 0.0047045}, {0.183862, 0.0625824}, {0.22958, 1.50402e-14}, {0.175034, -0.0639427}, {0.123572, -1.0726e-14}, {0.422501, 0.0375059}, {0.653152, -0.025503}, {0.548415, -2.20767e-15}, {0.653152, 0.025503}, {0.608177, -0.0924076}, {0.438213, -0.0482423}, {0.234236, 2.35693e-14}, {0.183862, 0.0625824}, {0.245083, -5.32172e-15}, {0.183862, -0.0625824}, {0.234236, -1.68369e-14}, {0.438213, 0.0482423}, {0.608177, 0.0924076}, {0.169545, -0.652296}, {0.157364, 0.195195}, {0.910811, 0.175105}, {0.422501, -0.0375059}, {0.123572, 1.25992e-14}, {0.175034, 0.0639427}, {0.22958, -2.41685e-15}, {0.183862, -0.0625824}, {0.344756, -0.0047045}, {0.856068, 0.244528}, {1.10754, 1.86174e-15}, {0.984075, -0.568373}, {-11.7051, -3.59868}, {-8.79435, 1.30817}, {0.99011, -1.07155}, {0.642398, -0.553017}, {0.438213, 0.0482423}, {0.247817, 1.27324e-14}, {0.175034, -0.0639427}, {0.234236, -1.14132e-14}, {0.856068, 0.244528}, {1.33155, -0.16363}, {-5.30025, 1.65834}, {-6.57219, -1.79842e-15}, {-72.4614, 1.40308e-14}, {-39.4244, 13.5375}, {-13.6457, -2.44125}, {-5.30025, -1.65834}, {1.10754, 2.81848e-17}, {0.438213, -0.0482423}, {0.123572, 4.57785e-15}, {0.438213, 0.0482423}, {1.10754, -6.1253e-15}, {-5.30025, 1.65834}, {-13.6457, 2.44125}, {-39.4244, -13.5375}, {-174.402, 55.7416}, {-100.781, 1.86517e-14}, {-85.5703, -25.4729}, {-36.1195, 3.01981e-14}, {-5.30025, 1.65834}, {0.642398, 0.553017}, {0.422501, 0.0375059}, {0.608177, 0.0924076}, {0.984075, -0.568373}, {-6.57219, -5.76082e-15}, {-39.4244, -13.5375}, {-141.346, -11.6655}, {-68.6663, -31.5682}, {-141.346, -11.6655}, {-85.5703, 25.4729}, {-28.2549, 4.44089e-15}, {-9.75792, -2.71861}, {1.33155, -0.16363}, {0.66818, -0.0435261}, {0.136765, 0.00586452}, {0.71571, -0.0128863}, {1.26225, -1.09583e-14}, {-11.7051, 3.59868}, {-25.1033, 5.63667}, {-141.346, -11.6655}, {-174.402, 55.7416}, {-100.781, 9.10383e-15}, {-85.5703, -25.4729}, {-36.1195, -8.23997e-15}, {-5.30025, 1.65834}, {0.642398, 0.553017}, {0.422501, 0.0375059}, {0.608177, 0.0924076}, {0.984075, -0.568373}, {-6.57219, -6.49073e-15}, {-39.4244, -13.5375}, {-85.5703, 25.4729}, {-100.781, 1.24345e-14}, {-174.402, -55.7416}, {-141.346, 11.6655}, {-39.4244, 13.5375}, {-6.57219, 2.87424e-15}, {0.984075, 0.568373}, {0.608177, -0.0924076}, {0.422501, -0.0375059}, {0.642398, -0.553017}, {-5.30025, -1.65834}, {-36.1195, 3.06972e-14}, {-28.2549, -9.32587e-15}, {-85.5703, -25.4729}, {-141.346, 11.6655}, {-68.6663, 31.5682}, {-25.1033, -5.63667}, {-11.7051, -3.59868}, {1.26225, 9.24574e-15}, {0.71571, 0.0128863}, {0.136765, -0.00586452}, {0.66818, 0.0435261}, {1.33155, 0.16363}, {-9.75792, 2.71861}, {-9.75792, -2.71861}, {-36.1195, -5.77316e-15}, {-39.4244, 13.5375}, {-25.1033, -5.63667}, {-25.4876, -7.80357}, {-8.79435, 1.30817}, {0.984075, -0.568373}, {0.718888, -6.50192e-16}, {0.197596, 0.0729406}, {0.331794, 0.0443841}, {0.856068, -0.244528}, {-0.90306, 2.42655e-15}, {1.33155, -0.16363}, {-5.30025, 1.65834}, {-6.57219, 5.16254e-15}, {-11.7051, -3.59868}, {-8.79435, 1.30817}, {0.99011, -1.07155}, {0.642398, -0.553017}, {0.438213, 0.0482423}, {0.247817, -3.29037e-15}, {0.175034, -0.0639427}, {0.234236, 7.12867e-15}, {0.856068, 0.244528}, {0.66818, -0.0435261}, {0.642398, 0.553017}, {0.984075, 0.568373}, {1.26225, 6.85556e-15}, {0.984075, -0.568373}, {0.642398, -0.553017}, {0.66818, 0.0435261}, {0.331794, 0.0443841}, {0.175034, -0.0639427}, {0.110194, 2.47264e-15}, {0.175034, 0.0639427}, {0.331794, -0.0443841}, {0.136765, 0.00586452}, {0.422501, 0.0375059}, {0.608177, -0.0924076}, {0.71571, 0.0128863}, {0.718888, -7.88276e-15}, {0.438213, 0.0482423}, {0.331794, 0.0443841}, {0.187321, -0.0707209}, {0.116983, 4.30402e-15}, {0.175034, 0.0639427}, {0.247817, 1.06916e-14}, {0.197596, -0.0729406}, {0.71571, -0.0128863}, {0.608177, 0.0924076}, {0.422501, -0.0375059}, {0.136765, -0.00586452}, {0.197596, 0.0729406}, {0.247817, 1.63574e-14}, {0.175034, -0.0639427}, {0.116983, -5.83814e-16}, {0.187321, 0.0707209}, {0.331794, -0.0443841}, {0.438213, -0.0482423}, {0.718888, 5.76196e-15}, {1.26225, -5.32052e-16}, {0.984075, -0.568373}, {0.642398, -0.553017}, {0.66818, 0.0435261}, {0.331794, 0.0443841}, {0.175034, -0.0639427}, {0.110194, -5.31886e-16}, {0.175034, 0.0639427}, {0.331794, -0.0443841}, {0.66818, -0.0435261}, {0.642398, 0.553017}, {0.984075, 0.568373}, {-11.7051, 3.59868}, {-6.57219, 9.99201e-16}, {-5.30025, -1.65834}, {1.33155, 0.16363}, {0.856068, -0.244528}, {0.234236, 8.80874e-16}, {0.175034, 0.0639427}, {0.247817, 2.06115e-15}, {0.438213, -0.0482423}, {0.642398, 0.553017}, {0.99011, 1.07155}, {-8.79435, -1.30817}, {-25.1033, 5.63667}, {-39.4244, -13.5375}, {-36.1195, -5.55112e-16}, {-9.75792, 2.71861}, {-0.90306, 1.33227e-15}, {0.856068, 0.244528}, {0.331794, -0.0443841}, {0.197596, -0.0729406}, {0.718888, 1.33227e-15}, {0.984075, 0.568373}, {-8.79435, -1.30817}, {-25.4876, 7.80357}, {-19.01, -3.81031}, {-25.4876, 7.80357}, {-13.6457, 2.44125}, {-9.75792, -2.71861}, {1.25751, -4.45683e-15}, {1.13756, -0.487619}, {0.344756, -0.0047045}, {0.187321, 0.0707209}, {0.272653, -7.53357e-15}, {0.71571, 0.0128863}, {0.169545, 0.652296}, {-2.92014, -2.09061}, {-25.4876, 7.80357}, {-25.1033, 5.63667}, {-39.4244, -13.5375}, {-36.1195, -3.44169e-15}, {-9.75792, 2.71861}, {-0.90306, 4.82121e-15}, {0.856068, 0.244528}, {0.331794, -0.0443841}, {0.197596, -0.0729406}, {0.718888, -7.48575e-15}, {0.984075, 0.568373}, {-8.79435, -1.30817}, {-13.6457, 2.44125}, {-39.4244, -13.5375}, {-72.4614, -9.78397e-15}, {-39.4244, 13.5375}, {-13.6457, -2.44125}, {-5.30025, -1.65834}, {1.10754, 7.85206e-15}, {0.438213, -0.0482423}, {0.123572, -8.69677e-15}, {0.438213, 0.0482423}, {1.10754, 1.69858e-15}, {-5.30025, 1.65834}, {-9.75792, -2.71861}, {-36.1195, -1.76525e-14}, {-39.4244, 13.5375}, {-25.1033, -5.63667}, {-25.4876, -7.80357}, {-8.79435, 1.30817}, {0.984075, -0.568373}, {0.718888, -7.73968e-15}, {0.197596, 0.0729406}, {0.331794, 0.0443841}, {0.856068, -0.244528}, {-0.90306, -1.5862e-15}, {1.25751, -5.77316e-15}, {-9.75792, 2.71861}, {-13.6457, -2.44125}, {-25.4876, -7.80357}, {-19.01, 3.81031}, {-2.92014, 2.09061}, {0.169545, -0.652296}, {0.71571, -0.0128863}, {0.272653, 7.41352e-15}, {0.187321, -0.0707209}, {0.344756, 0.0047045}, {1.13756, 0.487619}, {1.13756, -0.487619}, {-0.90306, 1.44884e-14}, {-5.30025, -1.65834}, {-8.79435, 1.30817}, {-2.92014, 2.09061}, {-0.501786, -1.37769}, {0.157364, 0.195195}, {0.608177, 0.0924076}, {0.197596, -0.0729406}, {0.116983, -1.55166e-14}, {0.183862, 0.0625824}, {0.609244, -4.87742e-15}, {0.344756, -0.0047045}, {0.856068, 0.244528}, {1.10754, 1.37806e-14}, {0.984075, -0.568373}, {0.169545, -0.652296}, {0.157364, 0.195195}, {0.910811, 0.175105}, {0.422501, -0.0375059}, {0.123572, -2.23074e-14}, {0.175034, 0.0639427}, {0.22958, 7.56348e-15}, {0.183862, -0.0625824}, {0.187321, 0.0707209}, {0.331794, -0.0443841}, {0.438213, -0.0482423}, {0.718888, 2.74173e-15}, {0.71571, -0.0128863}, {0.608177, 0.0924076}, {0.422501, -0.0375059}, {0.136765, -0.00586452}, {0.197596, 0.0729406}, {0.247817, 1.79677e-14}, {0.175034, -0.0639427}, {0.116983, 2.32163e-15}, {0.272653, 1.09197e-14}, {0.197596, -0.0729406}, {0.123572, -5.44548e-15}, {0.197596, 0.0729406}, {0.272653, 1.31859e-14}, {0.197596, -0.0729406}, {0.123572, 7.19444e-15}, {0.197596, 0.0729406}, {0.272653, 2.36674e-14}, {0.197596, -0.0729406}, {0.123572, -1.17805e-14}, {0.197596, 0.0729406}, {0.71571, 0.0128863}, {0.718888, -5.54157e-15}, {0.438213, 0.0482423}, {0.331794, 0.0443841}, {0.187321, -0.0707209}, {0.116983, -2.0205e-15}, {0.175034, 0.0639427}, {0.247817, 1.79555e-14}, {0.197596, -0.0729406}, {0.136765, 0.00586452}, {0.422501, 0.0375059}, {0.608177, -0.0924076}, {0.169545, 0.652296}, {0.984075, 0.568373}, {1.10754, 2.94209e-15}, {0.856068, -0.244528}, {0.344756, 0.0047045}, {0.183862, 0.0625824}, {0.22958, -5.96334e-15}, {0.175034, -0.0639427}, {0.123572, -5.29063e-15}, {0.422501, 0.0375059}, {0.910811, -0.175105}, {0.157364, -0.195195}, {-2.92014, -2.09061}, {-8.79435, -1.30817}, {-5.30025, 1.65834}, {-0.90306, -6.27276e-15}, {1.13756, 0.487619}, {0.609244, -1.51453e-14}, {0.183862, -0.0625824}, {0.116983, -9.54253e-15}, {0.197596, 0.0729406}, {0.608177, -0.0924076}, {0.157364, -0.195195}, {-0.501786, 1.37769}, {-0.58927, -0.511793}, {-0.501786, 1.37769}, {0.99011, 1.07155}, {1.33155, -0.16363}, {1.13756, -0.487619}, {0.536417, 6.39291e-15}, {0.198078, 0.0681101}, {0.245083, -7.14518e-15}, {0.187321, -0.0707209}, {0.136765, -0.00586452}, {0.653152, 0.025503}, {0.894073, -0.768163}, {-0.501786, 1.37769}, {-2.92014, -2.09061}, {-8.79435, -1.30817}, {-5.30025, 1.65834}, {-0.90306, 2.35457e-14}, {1.13756, 0.487619}, {0.609244, -7.22771e-15}, {0.183862, -0.0625824}, {0.116983, -1.22214e-14}, {0.197596, 0.0729406}, {0.608177, -0.0924076}, {0.157364, -0.195195}, {0.99011, 1.07155}, {-8.79435, -1.30817}, {-11.7051, 3.59868}, {-6.57219, 3.69149e-15}, {-5.30025, -1.65834}, {1.33155, 0.16363}, {0.856068, -0.244528}, {0.234236, -2.03201e-14}, {0.175034, 0.0639427}, {0.247817, 4.15067e-15}, {0.438213, -0.0482423}, {0.642398, 0.553017}, {1.33155, -0.16363}, {-5.30025, 1.65834}, {-6.57219, 1.11022e-16}, {-11.7051, -3.59868}, {-8.79435, 1.30817}, {0.99011, -1.07155}, {0.642398, -0.553017}, {0.438213, 0.0482423}, {0.247817, 1.74335e-15}, {0.175034, -0.0639427}, {0.234236, 3.04986e-14}, {0.856068, 0.244528}, {1.13756, -0.487619}, {-0.90306, 9.27036e-15}, {-5.30025, -1.65834}, {-8.79435, 1.30817}, {-2.92014, 2.09061}, {-0.501786, -1.37769}, {0.157364, 0.195195}, {0.608177, 0.0924076}, {0.197596, -0.0729406}, {0.116983, 2.00811e-14}, {0.183862, 0.0625824}, {0.609244, 2.11012e-14}, {0.536417, 5.32907e-15}, {1.13756, 0.487619}, {1.33155, 0.16363}, {0.99011, -1.07155}, {-0.501786, -1.37769}, {-0.58927, 0.511793}, {0.894073, 0.768163}, {0.653152, -0.025503}, {0.136765, 0.00586452}, {0.187321, 0.0707209}, {0.245083, 2.79908e-15}, {0.198078, -0.0681101}, {0.198078, 0.0681101}, {0.609244, 7.88258e-15}, {0.856068, -0.244528}, {0.642398, -0.553017}, {0.157364, 0.195195}, {0.894073, 0.768163}, {1.08582, 0.0715093}, {0.548415, 5.03212e-15}, {0.422501, 0.0375059}, {0.331794, -0.0443841}, {0.183862, -0.0625824}, {0.119232, 2.62842e-15}, {0.245083, -6.6277e-15}, {0.183862, -0.0625824}, {0.234236, -7.99412e-15}, {0.438213, 0.0482423}, {0.608177, 0.0924076}, {0.653152, -0.025503}, {0.548415, -3.30034e-15}, {0.653152, 0.025503}, {0.608177, -0.0924076}, {0.438213, -0.0482423}, {0.234236, -1.1971e-15}, {0.183862, 0.0625824}, {0.187321, -0.0707209}, {0.116983, -1.06477e-14}, {0.175034, 0.0639427}, {0.247817, -4.66294e-15}, {0.197596, -0.0729406}, {0.136765, 0.00586452}, {0.422501, 0.0375059}, {0.608177, -0.0924076}, {0.71571, 0.0128863}, {0.718888, -5.45392e-15}, {0.438213, 0.0482423}, {0.331794, 0.0443841}, {0.136765, -0.00586452}, {0.197596, 0.0729406}, {0.247817, -1.46619e-14}, {0.175034, -0.0639427}, {0.116983, 1.57673e-14}, {0.187321, 0.0707209}, {0.331794, -0.0443841}, {0.438213, -0.0482423}, {0.718888, -6.92367e-15}, {0.71571, -0.0128863}, {0.608177, 0.0924076}, {0.422501, -0.0375059}, {0.653152, 0.025503}, {0.608177, -0.0924076}, {0.438213, -0.0482423}, {0.234236, 1.13307e-14}, {0.183862, 0.0625824}, {0.245083, 3.39358e-15}, {0.183862, -0.0625824}, {0.234236, -2.49775e-14}, {0.438213, 0.0482423}, {0.608177, 0.0924076}, {0.653152, -0.025503}, {0.548415, -7.98332e-15}, {0.894073, -0.768163}, {0.157364, -0.195195}, {0.642398, 0.553017}, {0.856068, 0.244528}, {0.609244, 9.84471e-15}, {0.198078, -0.0681101}, {0.119232, -1.08306e-14}, {0.183862, 0.0625824}, {0.331794, 0.0443841}, {0.422501, -0.0375059}, {0.548415, -1.93693e-15}, {1.08582, -0.0715093}, {0.996488, -8.65654e-15}, {1.08582, -0.0715093}, {0.910811, -0.175105}, {0.66818, -0.0435261}, {0.344756, -0.0047045}, {0.198078, 0.0681101}, {0.256446, 1.87526e-15}, {0.198078, -0.0681101}, {0.344756, 0.0047045}, {0.66818, 0.0435261}, {0.910811, 0.175105}, {1.08582, 0.0715093}, {1.08582, -0.0715093}, {0.894073, -0.768163}, {0.157364, -0.195195}, {0.642398, 0.553017}, {0.856068, 0.244528}, {0.609244, 1.10978e-14}, {0.198078, -0.0681101}, {0.119232, -8.91416e-15}, {0.183862, 0.0625824}, {0.331794, 0.0443841}, {0.422501, -0.0375059}, {0.548415, 3.58509e-15}, {0.910811, -0.175105}, {0.157364, -0.195195}, {0.169545, 0.652296}, {0.984075, 0.568373}, {1.10754, -2.44636e-15}, {0.856068, -0.244528}, {0.344756, 0.0047045}, {0.183862, 0.0625824}, {0.22958, -1.29025e-14}, {0.175034, -0.0639427}, {0.123572, 7.36999e-15}, {0.422501, 0.0375059}, {0.66818, -0.0435261}, {0.642398, 0.553017}, {0.984075, 0.568373}, {1.26225, -1.48159e-14}, {0.984075, -0.568373}, {0.642398, -0.553017}, {0.66818, 0.0435261}, {0.331794, 0.0443841}, {0.175034, -0.0639427}, {0.110194, -1.04245e-14}, {0.175034, 0.0639427}, {0.331794, -0.0443841}, {0.344756, -0.0047045}, {0.856068, 0.244528}, {1.10754, -1.46688e-14}, {0.984075, -0.568373}, {0.169545, -0.652296}, {0.157364, 0.195195}, {0.910811, 0.175105}, {0.422501, -0.0375059}, {0.123572, 1.07388e-15}, {0.175034, 0.0639427}, {0.22958, 6.57697e-16}, {0.183862, -0.0625824}, {0.198078, 0.0681101}, {0.609244, -9.21485e-15}, {0.856068, -0.244528}, {0.642398, -0.553017}, {0.157364, 0.195195}, {0.894073, 0.768163}, {1.08582, 0.0715093}, {0.548415, 1.74673e-15}, {0.422501, 0.0375059}, {0.331794, -0.0443841}, {0.183862, -0.0625824}, {0.119232, -3.30104e-15}, {0.256446, 7.05931e-16}, {0.198078, -0.0681101}, {0.344756, 0.0047045}, {0.66818, 0.0435261}, {0.910811, 0.175105}, {1.08582, 0.0715093}, {0.996488, 9.09906e-16}, {1.08582, -0.0715093}, {0.910811, -0.175105}, {0.66818, -0.0435261}, {0.344756, -0.0047045}, {0.198078, 0.0681101}, {0.198078, -0.0681101}, {0.119232, 1.58207e-15}, {0.183862, 0.0625824}, {0.331794, 0.0443841}, {0.422501, -0.0375059}, {0.548415, -1.33616e-15}, {1.08582, -0.0715093}, {0.894073, -0.768163}, {0.157364, -0.195195}, {0.642398, 0.553017}, {0.856068, 0.244528}, {0.609244, 8.54405e-15}, {0.344756, 0.0047045}, {0.183862, 0.0625824}, {0.22958, -3.6568e-15}, {0.175034, -0.0639427}, {0.123572, -3.76603e-15}, {0.422501, 0.0375059}, {0.910811, -0.175105}, {0.157364, -0.195195}, {0.169545, 0.652296}, {0.984075, 0.568373}, {1.10754, 1.63819e-14}, {0.856068, -0.244528}, {0.66818, 0.0435261}, {0.331794, 0.0443841}, {0.175034, -0.0639427}, {0.110194, 5.40016e-15}, {0.175034, 0.0639427}, {0.331794, -0.0443841}, {0.66818, -0.0435261}, {0.642398, 0.553017}, {0.984075, 0.568373}, {1.26225, 1.79667e-14}, {0.984075, -0.568373}, {0.642398, -0.553017}, {0.910811, 0.175105}, {0.422501, -0.0375059}, {0.123572, -1.23235e-14}, {0.175034, 0.0639427}, {0.22958, 1.33292e-14}, {0.183862, -0.0625824}, {0.344756, -0.0047045}, {0.856068, 0.244528}, {1.10754, 8.56991e-15}, {0.984075, -0.568373}, {0.169545, -0.652296}, {0.157364, 0.195195}, {1.08582, 0.0715093}, {0.548415, -1.18239e-14}, {0.422501, 0.0375059}, {0.331794, -0.0443841}, {0.183862, -0.0625824}, {0.119232, 1.51533e-14}, {0.198078, 0.0681101}, {0.609244, -6.48772e-15}, {0.856068, -0.244528}, {0.642398, -0.553017}, {0.157364, 0.195195}, {0.894073, 0.768163}, {-0.58927, 0.511793}, {0.894073, 0.768163}, {0.653152, -0.025503}, {0.136765, 0.00586452}, {0.187321, 0.0707209}, {0.245083, 1.57505e-14}, {0.198078, -0.0681101}, {0.536417, -9.99313e-15}, {1.13756, 0.487619}, {1.33155, 0.16363}, {0.99011, -1.07155}, {-0.501786, -1.37769}, {0.894073, 0.768163}, {1.08582, 0.0715093}, {0.548415, -7.38298e-15}, {0.422501, 0.0375059}, {0.331794, -0.0443841}, {0.183862, -0.0625824}, {0.119232, 1.81233e-14}, {0.198078, 0.0681101}, {0.609244, -1.0975e-14}, {0.856068, -0.244528}, {0.642398, -0.553017}, {0.157364, 0.195195}, {0.653152, -0.025503}, {0.548415, 1.88434e-15}, {0.653152, 0.025503}, {0.608177, -0.0924076}, {0.438213, -0.0482423}, {0.234236, 2.71911e-14}, {0.183862, 0.0625824}, {0.245083, -1.67171e-15}, {0.183862, -0.0625824}, {0.234236, -8.38368e-15}, {0.438213, 0.0482423}, {0.608177, 0.0924076}, {0.136765, 0.00586452}, {0.422501, 0.0375059}, {0.608177, -0.0924076}, {0.71571, 0.0128863}, {0.718888, 7.24348e-16}, {0.438213, 0.0482423}, {0.331794, 0.0443841}, {0.187321, -0.0707209}, {0.116983, -9.46735e-15}, {0.175034, 0.0639427}, {0.247817, 1.47624e-14}, {0.197596, -0.0729406}, {0.187321, 0.0707209}, {0.331794, -0.0443841}, {0.438213, -0.0482423}, {0.718888, -1.28977e-15}, {0.71571, -0.0128863}, {0.608177, 0.0924076}, {0.422501, -0.0375059}, {0.136765, -0.00586452}, {0.197596, 0.0729406}, {0.247817, 9.21922e-15}, {0.175034, -0.0639427}, {0.116983, 2.0981e-14}, {0.245083, 1.31681e-14}, {0.183862, -0.0625824}, {0.234236, 4.47544e-15}, {0.438213, 0.0482423}, {0.608177, 0.0924076}, {0.653152, -0.025503}, {0.548415, -5.02797e-15}, {0.653152, 0.025503}, {0.608177, -0.0924076}, {0.438213, -0.0482423}, {0.234236, 2.14729e-14}, {0.183862, 0.0625824}, {0.198078, -0.0681101}, {0.119232, 7.21645e-16}, {0.183862, 0.0625824}, {0.331794, 0.0443841}, {0.422501, -0.0375059}, {0.548415, 1.65598e-16}, {1.08582, -0.0715093}, {0.894073, -0.768163}, {0.157364, -0.195195}, {0.642398, 0.553017}, {0.856068, 0.244528}, {0.609244, 5.67284e-15}, {0.536417, -4.88498e-15}, {0.198078, 0.0681101}, {0.245083, -9.15934e-15}, {0.187321, -0.0707209}, {0.136765, -0.00586452}, {0.653152, 0.025503}, {0.894073, -0.768163}, {-0.58927, -0.511793}, {-0.501786, 1.37769}, {0.99011, 1.07155}, {1.33155, -0.16363}, {1.13756, -0.487619}, {1.13756, 0.487619}, {0.609244, -2.50355e-14}, {0.183862, -0.0625824}, {0.116983, -1.90958e-14}, {0.197596, 0.0729406}, {0.608177, -0.0924076}, {0.157364, -0.195195}, {-0.501786, 1.37769}, {-2.92014, -2.09061}, {-8.79435, -1.30817}, {-5.30025, 1.65834}, {-0.90306, -8.72338e-15}, {1.33155, 0.16363}, {0.856068, -0.244528}, {0.234236, -3.1225e-14}, {0.175034, 0.0639427}, {0.247817, -5.50801e-15}, {0.438213, -0.0482423}, {0.642398, 0.553017}, {0.99011, 1.07155}, {-8.79435, -1.30817}, {-11.7051, 3.59868}, {-6.57219, 4.93573e-16}, {-5.30025, -1.65834}, {0.99011, -1.07155}, {0.642398, -0.553017}, {0.438213, 0.0482423}, {0.247817, -1.77636e-15}, {0.175034, -0.0639427}, {0.234236, 1.59054e-14}, {0.856068, 0.244528}, {1.33155, -0.16363}, {-5.30025, 1.65834}, {-6.57219, -5.24722e-15}, {-11.7051, -3.59868}, {-8.79435, 1.30817}, {-0.501786, -1.37769}, {0.157364, 0.195195}, {0.608177, 0.0924076}, {0.197596, -0.0729406}, {0.116983, 1.53547e-14}, {0.183862, 0.0625824}, {0.609244, 8.8169e-15}, {1.13756, -0.487619}, {-0.90306, -2.36814e-14}, {-5.30025, -1.65834}, {-8.79435, 1.30817}, {-2.92014, 2.09061}, {-19.01, 3.81031}, {-2.92014, 2.09061}, {0.169545, -0.652296}, {0.71571, -0.0128863}, {0.272653, 7.53357e-15}, {0.187321, -0.0707209}, {0.344756, 0.0047045}, {1.13756, 0.487619}, {1.25751, 4.45683e-15}, {-9.75792, 2.71861}, {-13.6457, -2.44125}, {-25.4876, -7.80357}, {-2.92014, 2.09061}, {-0.501786, -1.37769}, {0.157364, 0.195195}, {0.608177, 0.0924076}, {0.197596, -0.0729406}, {0.116983, 9.80781e-15}, {0.183862, 0.0625824}, {0.609244, 1.49587e-14}, {1.13756, -0.487619}, {-0.90306, 7.06758e-15}, {-5.30025, -1.65834}, {-8.79435, 1.30817}, {0.169545, -0.652296}, {0.157364, 0.195195}, {0.910811, 0.175105}, {0.422501, -0.0375059}, {0.123572, 6.06665e-15}, {0.175034, 0.0639427}, {0.22958, 6.1993e-15}, {0.183862, -0.0625824}, {0.344756, -0.0047045}, {0.856068, 0.244528}, {1.10754, -2.28577e-15}, {0.984075, -0.568373}, {0.71571, -0.0128863}, {0.608177, 0.0924076}, {0.422501, -0.0375059}, {0.136765, -0.00586452}, {0.197596, 0.0729406}, {0.247817, -1.83171e-14}, {0.175034, -0.0639427}, {0.116983, 1.17627e-15}, {0.187321, 0.0707209}, {0.331794, -0.0443841}, {0.438213, -0.0482423}, {0.718888, 5.88753e-15}, {0.272653, -1.09197e-14}, {0.197596, -0.0729406}, {0.123572, 1.17805e-14}, {0.197596, 0.0729406}, {0.272653, -2.36674e-14}, {0.197596, -0.0729406}, {0.123572, -7.19444e-15}, {0.197596, 0.0729406}, {0.272653, -1.31859e-14}, {0.197596, -0.0729406}, {0.123572, 5.44548e-15}, {0.197596, 0.0729406}, {0.187321, -0.0707209}, {0.116983, -2.02963e-15}, {0.175034, 0.0639427}, {0.247817, -1.83777e-14}, {0.197596, -0.0729406}, {0.136765, 0.00586452}, {0.422501, 0.0375059}, {0.608177, -0.0924076}, {0.71571, 0.0128863}, {0.718888, -2.82656e-15}, {0.438213, 0.0482423}, {0.331794, 0.0443841}, {0.344756, 0.0047045}, {0.183862, 0.0625824}, {0.22958, -7.32747e-15}, {0.175034, -0.0639427}, {0.123572, 2.2981e-14}, {0.422501, 0.0375059}, {0.910811, -0.175105}, {0.157364, -0.195195}, {0.169545, 0.652296}, {0.984075, 0.568373}, {1.10754, -1.49351e-14}, {0.856068, -0.244528}, {1.13756, 0.487619}, {0.609244, 4.66294e-15}, {0.183862, -0.0625824}, {0.116983, 1.55431e-14}, {0.197596, 0.0729406}, {0.608177, -0.0924076}, {0.157364, -0.195195}, {-0.501786, 1.37769}, {-2.92014, -2.09061}, {-8.79435, -1.30817}, {-5.30025, 1.65834}, {-0.90306, -1.49364e-14}, {1.25751, 5.77316e-15}, {1.13756, -0.487619}, {0.344756, -0.0047045}, {0.187321, 0.0707209}, {0.272653, -7.41352e-15}, {0.71571, 0.0128863}, {0.169545, 0.652296}, {-2.92014, -2.09061}, {-19.01, -3.81031}, {-25.4876, 7.80357}, {-13.6457, 2.44125}, {-9.75792, -2.71861}, {-9.75792, 2.71861}, {-0.90306, -1.11022e-15}, {0.856068, 0.244528}, {0.331794, -0.0443841}, {0.197596, -0.0729406}, {0.718888, 1.06265e-14}, {0.984075, 0.568373}, {-8.79435, -1.30817}, {-25.4876, 7.80357}, {-25.1033, 5.63667}, {-39.4244, -13.5375}, {-36.1195, 1.53615e-14}, {-13.6457, -2.44125}, {-5.30025, -1.65834}, {1.10754, -3.75347e-16}, {0.438213, -0.0482423}, {0.123572, 6.59532e-15}, {0.438213, 0.0482423}, {1.10754, -9.60557e-15}, {-5.30025, 1.65834}, {-13.6457, 2.44125}, {-39.4244, -13.5375}, {-72.4614, 8.85487e-15}, {-39.4244, 13.5375}, {-25.4876, -7.80357}, {-8.79435, 1.30817}, {0.984075, -0.568373}, {0.718888, 6.66134e-15}, {0.197596, 0.0729406}, {0.331794, 0.0443841}, {0.856068, -0.244528}, {-0.90306, -3.2321e-15}, {-9.75792, -2.71861}, {-36.1195, 3.07691e-15}, {-39.4244, 13.5375}, {-25.1033, -5.63667}, {-68.6663, 31.5682}, {-25.1033, -5.63667}, {-11.7051, -3.59868}, {1.26225, 5.32907e-15}, {0.71571, 0.0128863}, {0.136765, -0.00586452}, {0.66818, 0.0435261}, {1.33155, 0.16363}, {-9.75792, 2.71861}, {-28.2549, -1.30009e-14}, {-85.5703, -25.4729}, {-141.346, 11.6655}, {-25.1033, -5.63667}, {-25.4876, -7.80357}, {-8.79435, 1.30817}, {0.984075, -0.568373}, {0.718888, 1.04645e-15}, {0.197596, 0.0729406}, {0.331794, 0.0443841}, {0.856068, -0.244528}, {-0.90306, -1.12605e-14}, {-9.75792, -2.71861}, {-36.1195, -4.7106e-15}, {-39.4244, 13.5375}, {-11.7051, -3.59868}, {-8.79435, 1.30817}, {0.99011, -1.07155}, {0.642398, -0.553017}, {0.438213, 0.0482423}, {0.247817, -2.82239e-15}, {0.175034, -0.0639427}, {0.234236, -3.56681e-15}, {0.856068, 0.244528}, {1.33155, -0.16363}, {-5.30025, 1.65834}, {-6.57219, -1.16432e-14}, {1.26225, 3.58047e-15}, {0.984075, -0.568373}, {0.642398, -0.553017}, {0.66818, 0.0435261}, {0.331794, 0.0443841}, {0.175034, -0.0639427}, {0.110194, 2.93524e-15}, {0.175034, 0.0639427}, {0.331794, -0.0443841}, {0.66818, -0.0435261}, {0.642398, 0.553017}, {0.984075, 0.568373}, {0.71571, 0.0128863}, {0.718888, -5.34729e-15}, {0.438213, 0.0482423}, {0.331794, 0.0443841}, {0.187321, -0.0707209}, {0.116983, 2.48202e-15}, {0.175034, 0.0639427}, {0.247817, -1.39069e-14}, {0.197596, -0.0729406}, {0.136765, 0.00586452}, {0.422501, 0.0375059}, {0.608177, -0.0924076}, {0.136765, -0.00586452}, {0.197596, 0.0729406}, {0.247817, -9.0622e-15}, {0.175034, -0.0639427}, {0.116983, 2.82922e-15}, {0.187321, 0.0707209}, {0.331794, -0.0443841}, {0.438213, -0.0482423}, {0.718888, 3.1417e-15}, {0.71571, -0.0128863}, {0.608177, 0.0924076}, {0.422501, -0.0375059}, {0.66818, 0.0435261}, {0.331794, 0.0443841}, {0.175034, -0.0639427}, {0.110194, 2.79023e-16}, {0.175034, 0.0639427}, {0.331794, -0.0443841}, {0.66818, -0.0435261}, {0.642398, 0.553017}, {0.984075, 0.568373}, {1.26225, -1.87546e-14}, {0.984075, -0.568373}, {0.642398, -0.553017}, {1.33155, 0.16363}, {0.856068, -0.244528}, {0.234236, -4.71845e-15}, {0.175034, 0.0639427}, {0.247817, 1.06316e-14}, {0.438213, -0.0482423}, {0.642398, 0.553017}, {0.99011, 1.07155}, {-8.79435, -1.30817}, {-11.7051, 3.59868}, {-6.57219, -1.15544e-14}, {-5.30025, -1.65834}, {-9.75792, 2.71861}, {-0.90306, -8.43769e-15}, {0.856068, 0.244528}, {0.331794, -0.0443841}, {0.197596, -0.0729406}, {0.718888, 4.79381e-15}, {0.984075, 0.568373}, {-8.79435, -1.30817}, {-25.4876, 7.80357}, {-25.1033, 5.63667}, {-39.4244, -13.5375}, {-36.1195, -2.29847e-15}, {-28.2549, 1.17684e-14}, {-9.75792, -2.71861}, {1.33155, -0.16363}, {0.66818, -0.0435261}, {0.136765, 0.00586452}, {0.71571, -0.0128863}, {1.26225, -6.27057e-15}, {-11.7051, 3.59868}, {-25.1033, 5.63667}, {-68.6663, -31.5682}, {-141.346, -11.6655}, {-85.5703, 25.4729}, {-85.5703, -25.4729}, {-36.1195, -8.88178e-15}, {-5.30025, 1.65834}, {0.642398, 0.553017}, {0.422501, 0.0375059}, {0.608177, 0.0924076}, {0.984075, -0.568373}, {-6.57219, -9.51947e-16}, {-39.4244, -13.5375}, {-141.346, -11.6655}, {-174.402, 55.7416}, {-100.781, -1.32589e-14}, {-141.346, 11.6655}, {-39.4244, 13.5375}, {-6.57219, 9.32587e-15}, {0.984075, 0.568373}, {0.608177, -0.0924076}, {0.422501, -0.0375059}, {0.642398, -0.553017}, {-5.30025, -1.65834}, {-36.1195, -1.51055e-14}, {-85.5703, 25.4729}, {-100.781, -1.03368e-14}, {-174.402, -55.7416}, {-219.942, -33.69}, {-174.402, -55.7416}, {-72.4614, 3.19744e-14}, {-11.7051, 3.59868}, {0.169545, 0.652296}, {0.653152, 0.025503}, {0.910811, 0.175105}, {0.99011, -1.07155}, {-13.6457, -2.44125}, {-85.5703, -25.4729}, {-281.447, 2.89669e-14}, {-352.926, 115.37}, {-174.402, -55.7416}, {-141.346, 11.6655}, {-39.4244, 13.5375}, {-6.57219, -4.88498e-15}, {0.984075, 0.568373}, {0.608177, -0.0924076}, {0.422501, -0.0375059}, {0.642398, -0.553017}, {-5.30025, -1.65834}, {-36.1195, -1.82141e-14}, {-85.5703, 25.4729}, {-100.781, -9.27444e-15}, {-72.4614, -4.85029e-15}, {-39.4244, 13.5375}, {-13.6457, -2.44125}, {-5.30025, -1.65834}, {1.10754, 3.15158e-15}, {0.438213, -0.0482423}, {0.123572, -1.13913e-14}, {0.438213, 0.0482423}, {1.10754, 1.54585e-14}, {-5.30025, 1.65834}, {-13.6457, 2.44125}, {-39.4244, -13.5375}, {-11.7051, 3.59868}, {-6.57219, -1.02973e-14}, {-5.30025, -1.65834}, {1.33155, 0.16363}, {0.856068, -0.244528}, {0.234236, -8.67871e-16}, {0.175034, 0.0639427}, {0.247817, -9.0156e-15}, {0.438213, -0.0482423}, {0.642398, 0.553017}, {0.99011, 1.07155}, {-8.79435, -1.30817}, {0.169545, 0.652296}, {0.984075, 0.568373}, {1.10754, -9.28424e-15}, {0.856068, -0.244528}, {0.344756, 0.0047045}, {0.183862, 0.0625824}, {0.22958, -2.66014e-15}, {0.175034, -0.0639427}, {0.123572, -1.71764e-14}, {0.422501, 0.0375059}, {0.910811, -0.175105}, {0.157364, -0.195195}, {0.653152, 0.025503}, {0.608177, -0.0924076}, {0.438213, -0.0482423}, {0.234236, 3.00826e-14}, {0.183862, 0.0625824}, {0.245083, 6.85206e-15}, {0.183862, -0.0625824}, {0.234236, -3.07568e-14}, {0.438213, 0.0482423}, {0.608177, 0.0924076}, {0.653152, -0.025503}, {0.548415, 1.36866e-15}, {0.910811, 0.175105}, {0.422501, -0.0375059}, {0.123572, 5.7454e-15}, {0.175034, 0.0639427}, {0.22958, -8.11296e-15}, {0.183862, -0.0625824}, {0.344756, -0.0047045}, {0.856068, 0.244528}, {1.10754, -2.31121e-14}, {0.984075, -0.568373}, {0.169545, -0.652296}, {0.157364, 0.195195}, {0.99011, -1.07155}, {0.642398, -0.553017}, {0.438213, 0.0482423}, {0.247817, 1.40998e-14}, {0.175034, -0.0639427}, {0.234236, 1.26193e-14}, {0.856068, 0.244528}, {1.33155, -0.16363}, {-5.30025, 1.65834}, {-6.57219, 2.68492e-14}, {-11.7051, -3.59868}, {-8.79435, 1.30817}, {-13.6457, -2.44125}, {-5.30025, -1.65834}, {1.10754, -1.79197e-14}, {0.438213, -0.0482423}, {0.123572, 2.88317e-14}, {0.438213, 0.0482423}, {1.10754, 9.5501e-15}, {-5.30025, 1.65834}, {-13.6457, 2.44125}, {-39.4244, -13.5375}, {-72.4614, -2.75686e-15}, {-39.4244, 13.5375}, {-85.5703, -25.4729}, {-36.1195, 1.73195e-14}, {-5.30025, 1.65834}, {0.642398, 0.553017}, {0.422501, 0.0375059}, {0.608177, 0.0924076}, {0.984075, -0.568373}, {-6.57219, 4.82121e-15}, {-39.4244, -13.5375}, {-141.346, -11.6655}, {-174.402, 55.7416}, {-100.781, -7.48575e-15}, {-281.447, 3.90799e-14}, {-85.5703, 25.4729}, {-13.6457, 2.44125}, {0.99011, 1.07155}, {0.910811, -0.175105}, {0.653152, -0.025503}, {0.169545, -0.652296}, {-11.7051, -3.59868}, {-72.4614, -2.1037e-14}, {-174.402, 55.7416}, {-219.942, 33.69}, {-352.926, -115.37}, {-352.926, 115.37}, {-100.781, -1.07118e-15}, {-39.4244, -13.5375}, {-8.79435, -1.30817}, {0.157364, -0.195195}, {0.548415, -1.6234e-14}, {0.157364, 0.195195}, {-8.79435, 1.30817}, {-39.4244, 13.5375}, {-100.781, -2.85409e-14}, {-352.926, -115.37}, {-690.893, 8.12484e-14}, {-1001.68, -433.439}, {-690.893, -3.19744e-14}, {-174.402, 55.7416}, {-25.1033, 5.63667}, {-2.92014, -2.09061}, {0.894073, -0.768163}, {1.08582, 0.0715093}, {-0.501786, -1.37769}, {-25.4876, -7.80357}, {-141.346, 11.6655}, {-352.926, 115.37}, {-517.273, -7.42819e-14}, {-690.893, -4.996e-15}, {-352.926, 115.37}, {-100.781, 2.12053e-14}, {-39.4244, -13.5375}, {-8.79435, -1.30817}, {0.157364, -0.195195}, {0.548415, 6.04246e-15}, {0.157364, 0.195195}, {-8.79435, 1.30817}, {-39.4244, 13.5375}, {-100.781, -6.2645e-15}, {-352.926, -115.37}, {-174.402, 55.7416}, {-100.781, -3.9968e-15}, {-85.5703, -25.4729}, {-36.1195, 1.77636e-15}, {-5.30025, 1.65834}, {0.642398, 0.553017}, {0.422501, 0.0375059}, {0.608177, 0.0924076}, {0.984075, -0.568373}, {-6.57219, -1.20726e-14}, {-39.4244, -13.5375}, {-141.346, -11.6655}, {-25.1033, 5.63667}, {-39.4244, -13.5375}, {-36.1195, 7.10543e-15}, {-9.75792, 2.71861}, {-0.90306, -6.56569e-15}, {0.856068, 0.244528}, {0.331794, -0.0443841}, {0.197596, -0.0729406}, {0.718888, 1.18948e-14}, {0.984075, 0.568373}, {-8.79435, -1.30817}, {-25.4876, 7.80357}, {-2.92014, -2.09061}, {-8.79435, -1.30817}, {-5.30025, 1.65834}, {-0.90306, 1.58207e-14}, {1.13756, 0.487619}, {0.609244, -2.48678e-15}, {0.183862, -0.0625824}, {0.116983, -2.16976e-14}, {0.197596, 0.0729406}, {0.608177, -0.0924076}, {0.157364, -0.195195}, {-0.501786, 1.37769}, {0.894073, -0.768163}, {0.157364, -0.195195}, {0.642398, 0.553017}, {0.856068, 0.244528}, {0.609244, -1.09297e-14}, {0.198078, -0.0681101}, {0.119232, -1.83728e-14}, {0.183862, 0.0625824}, {0.331794, 0.0443841}, {0.422501, -0.0375059}, {0.548415, -2.94779e-14}, {1.08582, -0.0715093}, {1.08582, 0.0715093}, {0.548415, 1.00198e-14}, {0.422501, 0.0375059}, {0.331794, -0.0443841}, {0.183862, -0.0625824}, {0.119232, 1.21228e-14}, {0.198078, 0.0681101}, {0.609244, 4.84268e-15}, {0.856068, -0.244528}, {0.642398, -0.553017}, {0.157364, 0.195195}, {0.894073, 0.768163}, {-0.501786, -1.37769}, {0.157364, 0.195195}, {0.608177, 0.0924076}, {0.197596, -0.0729406}, {0.116983, 5.39933e-14}, {0.183862, 0.0625824}, {0.609244, -1.87156e-15}, {1.13756, -0.487619}, {-0.90306, -6.7538e-14}, {-5.30025, -1.65834}, {-8.79435, 1.30817}, {-2.92014, 2.09061}, {-25.4876, -7.80357}, {-8.79435, 1.30817}, {0.984075, -0.568373}, {0.718888, 4.88498e-14}, {0.197596, 0.0729406}, {0.331794, 0.0443841}, {0.856068, -0.244528}, {-0.90306, -6.80815e-15}, {-9.75792, -2.71861}, {-36.1195, -8.78654e-15}, {-39.4244, 13.5375}, {-25.1033, -5.63667}, {-141.346, 11.6655}, {-39.4244, 13.5375}, {-6.57219, 2.26485e-14}, {0.984075, 0.568373}, {0.608177, -0.0924076}, {0.422501, -0.0375059}, {0.642398, -0.553017}, {-5.30025, -1.65834}, {-36.1195, -1.97408e-15}, {-85.5703, 25.4729}, {-100.781, -2.76711e-14}, {-174.402, -55.7416}, {-352.926, 115.37}, {-100.781, 4.53139e-15}, {-39.4244, -13.5375}, {-8.79435, -1.30817}, {0.157364, -0.195195}, {0.548415, -2.27175e-14}, {0.157364, 0.195195}, {-8.79435, 1.30817}, {-39.4244, 13.5375}, {-100.781, -5.34849e-14}, {-352.926, -115.37}, {-690.893, 7.92872e-15}, {-517.273, -5.68434e-14}, {-352.926, -115.37}, {-141.346, -11.6655}, {-25.4876, 7.80357}, {-0.501786, 1.37769}, {1.08582, -0.0715093}, {0.894073, 0.768163}, {-2.92014, 2.09061}, {-25.1033, -5.63667}, {-174.402, -55.7416}, {-690.893, 1.78665e-14}, {-1001.68, 433.439}}; - const std::vector > out_3 = {{-0.199195, -0.0194965}, {-0.419867, -0.250833}, {-1.11264, 0}, {-0.419867, 0.250833}, {-0.199195, 0.0194965}, {-0.418409, -5.00654e-18}, {-0.419867, 0.250833}, {-0.18608, 3.44375e-17}, {-0.267653, -0.0667649}, {-0.199195, 0.0194965}, {-0.267653, -0.0667649}, {-0.267653, 0.0667649}, {-0.199195, -0.0194965}, {-0.267653, 0.0667649}, {-0.18608, -1.83156e-17}, {-0.419867, -0.250833}, {-0.418409, 6.16791e-18}, {-0.418409, 1.14412e-17}, {-0.419867, 0.250833}, {-0.18608, 4.36893e-17}, {-0.267653, -0.0667649}, {-0.267653, 0.0667649}, {-0.18608, 1.64477e-17}, {-0.419867, -0.250833}, {-0.418409, -2.87836e-17}, {-0.267653, -0.0667649}, {-0.418409, -1.43756e-17}, {-0.267653, 0.0667649}, {-0.267653, -0.0667649}, {-0.418409, -9.49474e-18}, {-0.267653, 0.0667649}, {-0.199195, 0.0194965}, {-0.267653, -0.0667649}, {-0.267653, -0.0667649}, {-0.418409, -3.75741e-17}, {-0.267653, 0.0667649}, {-0.267653, 0.0667649}, {-0.199195, -0.0194965}, {-0.267653, 0.0667649}, {-0.199195, -0.0194965}, {-0.199195, 0.0194965}, {-0.267653, -0.0667649}, {-0.267653, -0.0667649}, {-0.418409, 4.70188e-17}, {-0.267653, 0.0667649}, {-0.267653, 0.0667649}, {-0.18608, -4.29872e-17}, {-0.419867, -0.250833}, {-0.418409, -1.85037e-17}, {-0.267653, -0.0667649}, {-0.418409, -2.89121e-18}, {-0.267653, 0.0667649}, {-0.267653, -0.0667649}, {-0.418409, 4.58838e-18}, {-0.267653, 0.0667649}, {-0.418409, 1.03394e-17}, {-0.419867, 0.250833}, {-0.18608, -3.28955e-17}, {-0.267653, -0.0667649}}; - const std::vector > out_3_init = {{-0.0719135, 0}, {0.15981, 0}, {0, 0}, {0.15981, 0}, {-0.0719135, 0}, {-0.0185867, 0}, {0.15981, 0}, {0.113268, 0}, {-0.0634128, 0}, {-0.0719135, 0}, {-0.0634128, 0}, {-0.0634128, 0}, {-0.0719135, 0}, {-0.0634128, 0}, {0.113268, 0}, {0.15981, 0}, {-0.0185867, 0}, {-0.0185867, 0}, {0.15981, 0}, {0.113268, 0}, {-0.0634128, 0}, {-0.0634128, 0}, {0.113268, 0}, {0.15981, 0}, {-0.0185867, 0}, {-0.0634128, 0}, {-0.0185867, 0}, {-0.0634128, 0}, {-0.0634128, 0}, {-0.0185867, 0}, {-0.0634128, 0}, {-0.0719135, 0}, {-0.0634128, 0}, {-0.0634128, 0}, {-0.0185867, 0}, {-0.0634128, 0}, {-0.0634128, 0}, {-0.0719135, 0}, {-0.0634128, 0}, {-0.0719135, 0}, {-0.0719135, 0}, {-0.0634128, 0}, {-0.0634128, 0}, {-0.0185867, 0}, {-0.0634128, 0}, {-0.0634128, 0}, {0.113268, 0}, {0.15981, 0}, {-0.0185867, 0}, {-0.0634128, 0}, {-0.0185867, 0}, {-0.0634128, 0}, {-0.0634128, 0}, {-0.0185867, 0}, {-0.0634128, 0}, {-0.0185867, 0}, {0.15981, 0}, {0.113268, 0}, {-0.0634128, 0}}; + const std::vector box_index + = {10, 11, 0, 1, 2, 23, 12, 13, 14, 24, 25, 131, 120, 142, 143, + 132, 133, 155, 144, 145, 146, 167, 156, 157, 158, 168, 169, 170, 287, 276, + 277, 288, 289, 300, 301, 302, 313, 314, 1451, 1440, 1570, 1571, 1582, 1583, 1572, + 1594, 1595, 1584, 1585, 1607, 1596, 1597, 1714, 1715, 1704, 1726, 1727, 1716, 1717}; + const std::vector> in_1 = { + {-0.0157932, -0}, {0.140385, 0}, {1.15637, 0}, {0.140385, 0}, {-0.0157932, -0}, {-0.00612284, -0}, + {0.140385, 0}, {0.0746255, 0}, {-0.0151924, -0}, {-0.0157932, -0}, {-0.0151924, -0}, {-0.0151924, -0}, + {-0.0157932, -0}, {-0.0151924, -0}, {0.0746255, 0}, {0.140385, 0}, {-0.00612284, -0}, {-0.00612284, -0}, + {0.140385, 0}, {0.0746255, 0}, {-0.0151924, -0}, {-0.0151924, -0}, {0.0746255, 0}, {0.140385, 0}, + {-0.00612284, -0}, {-0.0151924, -0}, {-0.00612284, -0}, {-0.0151924, -0}, {-0.0151924, -0}, {-0.00612284, -0}, + {-0.0151924, -0}, {-0.0157932, -0}, {-0.0151924, -0}, {-0.0151924, -0}, {-0.00612284, -0}, {-0.0151924, -0}, + {-0.0151924, -0}, {-0.0157932, -0}, {-0.0151924, -0}, {-0.0157932, -0}, {-0.0157932, -0}, {-0.0151924, -0}, + {-0.0151924, -0}, {-0.00612284, -0}, {-0.0151924, -0}, {-0.0151924, -0}, {0.0746255, 0}, {0.140385, 0}, + {-0.00612284, -0}, {-0.0151924, -0}, {-0.00612284, -0}, {-0.0151924, -0}, {-0.0151924, -0}, {-0.00612284, -0}, + {-0.0151924, -0}, {-0.00612284, -0}, {0.140385, 0}, {0.0746255, 0}, {-0.0151924, -0}}; + const std::vector> out_1 = {{1.15637, 0}, + {0.140385, 0}, + {-0.0157932, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0157932, -0}, + {0.140385, 0}, + {0.140385, 0}, + {0.0746255, 0}, + {-0.0151924, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.00612284, -0}, + {-0.0157932, -0}, + {-0.0151924, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0157932, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0151924, -0}, + {0.140385, 0}, + {-0.00612284, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0151924, -0}, + {0.0746255, 0}, + {0.140385, 0}, + {0.0746255, 0}, + {-0.0151924, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.00612284, -0}, + {0.0746255, 0}, + {0.140385, 0}, + {-0.00612284, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0151924, -0}, + {-0.0151924, -0}, + {-0.00612284, -0}, + {-0.0151924, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.00612284, -0}, + {-0.0151924, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0151924, -0}, + {-0.0157932, -0}, + {-0.0151924, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0151924, -0}, + {-0.00612284, -0}, + {-0.0151924, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0151924, -0}, + {-0.0157932, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0157932, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0151924, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0157932, -0}, + {-0.0151924, -0}, + {-0.0151924, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0151924, -0}, + {-0.00612284, -0}, + {0.140385, 0}, + {-0.00612284, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0151924, -0}, + {0.0746255, 0}, + {-0.00612284, -0}, + {-0.0151924, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0151924, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0151924, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.0151924, -0}, + {-0.00612284, -0}, + {0.0746255, 0}, + {-0.0151924, -0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-0.00612284, -0}, + {0.140385, 0}}; + const std::vector> in_2 = {{2.16277, 0}, + {2.17701, 0}, + {2.14383, 0}, + {1.92793, 0}, + {1.51507, 0}, + {1.08798, -2.4037e-17}, + {0.905261, 0}, + {1.08798, 0}, + {1.51507, 0}, + {1.92793, 2.4037e-17}, + {2.14383, 0}, + {2.17701, 0}, + {2.17701, 0}, + {2.16623, 5.55112e-17}, + {2.03322, 0}, + {1.69928, 0}, + {1.25388, 0}, + {0.930725, -2.77556e-17}, + {0.930725, 0}, + {1.25388, 0}, + {1.69928, 0}, + {2.03322, -2.77556e-17}, + {2.16623, 0}, + {2.17701, 0}, + {2.14383, 0}, + {2.03322, 0}, + {1.76522, 0}, + {1.36223, 0}, + {0.981652, 0}, + {0.824264, 0}, + {0.981652, 0}, + {1.36223, 0}, + {1.76522, 0}, + {2.03322, 0}, + {2.14383, 0}, + {2.16623, 0}, + {1.92793, 0}, + {1.69928, 0}, + {1.36223, 0}, + {1.00712, 0}, + {0.775362, 0}, + {0.775362, 1.20185e-17}, + {1.00712, 0}, + {1.36223, 0}, + {1.69928, 0}, + {1.92793, -1.20185e-17}, + {2.03322, 0}, + {2.03322, 0}, + {1.51507, 0}, + {1.25388, 0}, + {0.981652, 0}, + {0.775362, 0}, + {0.698375, 0}, + {0.775362, -4.50694e-18}, + {0.981652, 0}, + {1.25388, 0}, + {1.51507, 0}, + {1.69928, 4.50694e-18}, + {1.76522, 0}, + {1.69928, 0}, + {1.08798, 0}, + {0.930725, -2.77556e-17}, + {0.824264, 0}, + {0.775362, 0}, + {0.775362, 0}, + {0.824264, 1.38778e-17}, + {0.930725, 0}, + {1.08798, 0}, + {1.25388, 0}, + {1.36223, 1.38778e-17}, + {1.36223, 0}, + {1.25388, 0}, + {0.905261, 0}, + {0.930725, 0}, + {0.981652, 0}, + {1.00712, 0}, + {0.981652, 0}, + {0.930725, 0}, + {0.905261, 0}, + {0.930725, 0}, + {0.981652, 0}, + {1.00712, 0}, + {0.981652, 0}, + {0.930725, 0}, + {1.08798, 0}, + {1.25388, 0}, + {1.36223, 0}, + {1.36223, 0}, + {1.25388, 0}, + {1.08798, 0}, + {0.930725, 0}, + {0.824264, 0}, + {0.775362, 0}, + {0.775362, 0}, + {0.824264, 0}, + {0.930725, 0}, + {1.51507, 0}, + {1.69928, -2.77556e-17}, + {1.76522, 0}, + {1.69928, 0}, + {1.51507, 0}, + {1.25388, 1.38778e-17}, + {0.981652, 0}, + {0.775362, 0}, + {0.698375, 0}, + {0.775362, 1.38778e-17}, + {0.981652, 0}, + {1.25388, 0}, + {1.92793, 0}, + {2.03322, 0}, + {2.03322, 0}, + {1.92793, 0}, + {1.69928, 0}, + {1.36223, 0}, + {1.00712, 0}, + {0.775362, 0}, + {0.775362, 0}, + {1.00712, 0}, + {1.36223, 0}, + {1.69928, 0}, + {2.14383, 0}, + {2.16623, -3.54439e-19}, + {2.14383, 0}, + {2.03322, 0}, + {1.76522, 0}, + {1.36223, 1.77219e-19}, + {0.981652, 0}, + {0.824264, 0}, + {0.981652, 0}, + {1.36223, 1.77219e-19}, + {1.76522, 0}, + {2.03322, 0}, + {2.17701, 0}, + {2.17701, 0}, + {2.16623, 0}, + {2.03322, 0}, + {1.69928, 0}, + {1.25388, 0}, + {0.930725, 0}, + {0.930725, 0}, + {1.25388, 0}, + {1.69928, 0}, + {2.03322, 0}, + {2.16623, 0}, + {2.17701, -6.93889e-18}, + {2.16623, -6.93889e-18}, + {2.03322, -6.93889e-18}, + {1.69928, -6.93889e-18}, + {1.25388, -6.93889e-18}, + {0.930725, -3.09759e-17}, + {0.930725, -6.93889e-18}, + {1.25388, -6.93889e-18}, + {1.69928, -6.93889e-18}, + {2.03322, 1.70981e-17}, + {2.16623, -6.93889e-18}, + {2.17701, -6.93889e-18}, + {2.16623, 0}, + {2.07555, 0}, + {1.82256, 0}, + {1.42048, 0}, + {1.03162, 0}, + {0.869317, -2.4037e-17}, + {1.03162, 0}, + {1.42048, 0}, + {1.82256, 0}, + {2.07555, 2.4037e-17}, + {2.16623, 0}, + {2.17945, 0}, + {2.03322, 0}, + {1.82256, -5.55112e-17}, + {1.48405, 0}, + {1.1084, 0}, + {0.85665, 0}, + {0.85665, 2.77556e-17}, + {1.1084, 0}, + {1.48405, 0}, + {1.82256, 0}, + {2.03322, 2.77556e-17}, + {2.11997, 0}, + {2.11997, 0}, + {1.69928, 0}, + {1.42048, 0}, + {1.1084, 0}, + {0.858837, 0}, + {0.763031, 0}, + {0.858837, 0}, + {1.1084, 0}, + {1.42048, 0}, + {1.69928, 0}, + {1.88226, 0}, + {1.94478, 0}, + {1.88226, 0}, + {1.25388, 3.46945e-18}, + {1.03162, -2.42861e-17}, + {0.85665, 3.46945e-18}, + {0.763031, 3.46945e-18}, + {0.763031, 3.46945e-18}, + {0.85665, 1.73472e-17}, + {1.03162, 3.46945e-18}, + {1.25388, 3.46945e-18}, + {1.46388, 3.46945e-18}, + {1.59252, 1.73472e-17}, + {1.59252, 3.46945e-18}, + {1.46388, 3.46945e-18}, + {0.930725, -2.4037e-17}, + {0.869317, -3.79148e-17}, + {0.85665, -2.4037e-17}, + {0.858837, -1.7563e-17}, + {0.85665, -2.4037e-17}, + {0.869317, -1.70981e-17}, + {0.930725, -2.4037e-17}, + {1.04306, -2.72741e-17}, + {1.15758, -2.4037e-17}, + {1.20632, -1.70981e-17}, + {1.15758, -2.4037e-17}, + {1.04306, -2.72741e-17}, + {0.930725, 0}, + {1.03162, 0}, + {1.1084, 0}, + {1.1084, 0}, + {1.03162, 0}, + {0.930725, 0}, + {0.864823, 0}, + {0.851575, 0}, + {0.862449, 0}, + {0.862449, 0}, + {0.851575, 0}, + {0.864823, 0}, + {1.25388, -2.47509e-17}, + {1.42048, -3.86287e-17}, + {1.48405, -1.08732e-17}, + {1.42048, 3.00463e-18}, + {1.25388, 1.68824e-17}, + {1.04306, 4.78583e-17}, + {0.851575, 3.39806e-17}, + {0.72366, 2.70417e-17}, + {0.679431, 1.68824e-17}, + {0.72366, -2.15723e-19}, + {0.851575, -1.40935e-17}, + {1.04306, -2.10324e-17}, + {1.69928, 3.46945e-18}, + {1.82256, 1.73472e-17}, + {1.82256, 3.46945e-18}, + {1.69928, 3.46945e-18}, + {1.46388, 3.46945e-18}, + {1.15758, -3.46945e-18}, + {0.862449, 3.46945e-18}, + {0.679431, 3.46945e-18}, + {0.679431, 3.46945e-18}, + {0.862449, -3.46945e-18}, + {1.15758, 3.46945e-18}, + {1.46388, 3.46945e-18}, + {2.03322, 2.4037e-17}, + {2.07555, 2.5603e-17}, + {2.03322, 2.4037e-17}, + {1.88226, 2.4037e-17}, + {1.59252, -2.4037e-17}, + {1.20632, 2.32541e-17}, + {0.862449, 2.4037e-17}, + {0.72366, 2.4037e-17}, + {0.862449, 7.21111e-17}, + {1.20632, 2.32541e-17}, + {1.59252, 2.4037e-17}, + {1.88226, 2.4037e-17}, + {2.16623, 0}, + {2.16623, 0}, + {2.11997, 0}, + {1.94478, 0}, + {1.59252, 0}, + {1.15758, -4.80741e-17}, + {0.851575, 0}, + {0.851575, 0}, + {1.15758, 0}, + {1.59252, 4.80741e-17}, + {1.94478, 0}, + {2.11997, 0}, + {2.17701, -1.68824e-17}, + {2.17945, -3.07602e-17}, + {2.11997, -3.00463e-18}, + {1.88226, -3.00463e-18}, + {1.46388, 3.93426e-18}, + {1.04306, -1.31639e-17}, + {0.864823, -3.00463e-18}, + {1.04306, 9.01389e-18}, + {1.46388, 3.93426e-18}, + {1.88226, 3.49102e-17}, + {2.11997, -3.00463e-18}, + {2.17945, -1.50231e-17}, + {2.14383, 0}, + {2.03322, 0}, + {1.76522, 0}, + {1.36223, 0}, + {0.981652, 0}, + {0.824264, 2.4037e-17}, + {0.981652, 0}, + {1.36223, 0}, + {1.76522, 0}, + {2.03322, -2.4037e-17}, + {2.14383, 0}, + {2.16623, 0}, + {2.03322, -2.77556e-17}, + {1.82256, -2.77556e-17}, + {1.48405, -2.77556e-17}, + {1.1084, -2.77556e-17}, + {0.85665, -2.77556e-17}, + {0.85665, -3.71854e-18}, + {1.1084, -2.77556e-17}, + {1.48405, -2.77556e-17}, + {1.82256, -2.77556e-17}, + {2.03322, -5.17926e-17}, + {2.11997, -2.77556e-17}, + {2.11997, -2.77556e-17}, + {1.76522, 0}, + {1.48405, 0}, + {1.16145, 0}, + {0.899033, 0}, + {0.797429, 0}, + {0.899033, 9.01389e-18}, + {1.16145, 0}, + {1.48405, 0}, + {1.76522, 0}, + {1.94478, -9.01389e-18}, + {2.00496, 0}, + {1.94478, 0}, + {1.36223, 0}, + {1.1084, -2.77556e-17}, + {0.899033, 0}, + {0.782576, 0}, + {0.782576, 0}, + {0.899033, 1.38778e-17}, + {1.1084, 0}, + {1.36223, 0}, + {1.59252, 0}, + {1.7299, 1.38778e-17}, + {1.7299, 0}, + {1.59252, 0}, + {0.981652, 0}, + {0.85665, 2.77556e-17}, + {0.797429, 0}, + {0.782576, 0}, + {0.797429, 0}, + {0.85665, -1.38778e-17}, + {0.981652, 0}, + {1.15758, 0}, + {1.31866, 0}, + {1.38444, -1.38778e-17}, + {1.31866, 0}, + {1.15758, 0}, + {0.824264, 1.38778e-17}, + {0.85665, 1.38778e-17}, + {0.899033, 1.73472e-17}, + {0.899033, 6.93889e-18}, + {0.85665, 1.38778e-17}, + {0.824264, 1.68824e-17}, + {0.851575, 1.77767e-17}, + {0.931265, 2.03519e-17}, + {1.00096, 1.38778e-17}, + {1.00096, 1.08732e-17}, + {0.931265, 6.50938e-18}, + {0.851575, 1.43426e-17}, + {0.981652, 0}, + {1.1084, 0}, + {1.16145, 0}, + {1.1084, 0}, + {0.981652, 0}, + {0.851575, 0}, + {0.771224, 0}, + {0.743927, 0}, + {0.740598, 0}, + {0.743927, 0}, + {0.771224, 0}, + {0.851575, 0}, + {1.36223, 0}, + {1.48405, -6.93889e-18}, + {1.48405, 0}, + {1.36223, 0}, + {1.15758, 0}, + {0.931265, 3.46945e-18}, + {0.743927, 0}, + {0.639427, 0}, + {0.639427, 0}, + {0.743927, 3.46945e-18}, + {0.931265, 0}, + {1.15758, 0}, + {1.76522, 0}, + {1.82256, 2.93165e-18}, + {1.76522, 0}, + {1.59252, 0}, + {1.31866, 0}, + {1.00096, -4.95399e-17}, + {0.740598, 0}, + {0.639427, 0}, + {0.740598, 0}, + {1.00096, 4.66082e-17}, + {1.31866, 0}, + {1.59252, 0}, + {2.03322, 1.38778e-17}, + {2.03322, 1.38778e-17}, + {1.94478, 1.38778e-17}, + {1.7299, 1.38778e-17}, + {1.38444, 1.38778e-17}, + {1.00096, 1.38778e-17}, + {0.743927, 1.38778e-17}, + {0.743927, 1.38778e-17}, + {1.00096, 1.38778e-17}, + {1.38444, 1.38778e-17}, + {1.7299, 1.38778e-17}, + {1.94478, 1.38778e-17}, + {2.14383, 0}, + {2.11997, 0}, + {2.00496, 0}, + {1.7299, 0}, + {1.31866, 0}, + {0.931265, 4.80741e-17}, + {0.771224, 0}, + {0.931265, 0}, + {1.31866, 0}, + {1.7299, -4.80741e-17}, + {2.00496, 0}, + {2.11997, 0}, + {2.16623, 0}, + {2.11997, 0}, + {1.94478, 0}, + {1.59252, 0}, + {1.15758, 0}, + {0.851575, 0}, + {0.851575, 0}, + {1.15758, 0}, + {1.59252, 0}, + {1.94478, 0}, + {2.11997, 0}, + {2.16623, 0}, + {1.92793, 0}, + {1.69928, 0}, + {1.36223, 0}, + {1.00712, 0}, + {0.775362, 0}, + {0.775362, 0}, + {1.00712, 0}, + {1.36223, 0}, + {1.69928, 0}, + {1.92793, 0}, + {2.03322, 0}, + {2.03322, 0}, + {1.69928, -2.77556e-17}, + {1.42048, -2.77556e-17}, + {1.1084, -2.77556e-17}, + {0.858837, -2.77556e-17}, + {0.763031, -2.77556e-17}, + {0.858837, -2.77556e-17}, + {1.1084, -2.77556e-17}, + {1.42048, -2.77556e-17}, + {1.69928, -2.77556e-17}, + {1.88226, -2.77556e-17}, + {1.94478, -2.77556e-17}, + {1.88226, -2.77556e-17}, + {1.36223, 0}, + {1.1084, -2.77556e-17}, + {0.899033, 0}, + {0.782576, 0}, + {0.782576, 0}, + {0.899033, 1.38778e-17}, + {1.1084, 0}, + {1.36223, 0}, + {1.59252, 0}, + {1.7299, 1.38778e-17}, + {1.7299, 0}, + {1.59252, 0}, + {1.00712, 0}, + {0.858837, 0}, + {0.782576, 0}, + {0.761485, 0}, + {0.782576, 0}, + {0.858837, 0}, + {1.00712, 0}, + {1.20632, 0}, + {1.38444, 0}, + {1.45645, 0}, + {1.38444, 0}, + {1.20632, 0}, + {0.775362, 0}, + {0.763031, 0}, + {0.782576, 0}, + {0.782576, 0}, + {0.763031, 0}, + {0.775362, 0}, + {0.862449, 0}, + {1.00096, 0}, + {1.10759, 0}, + {1.10759, 0}, + {1.00096, 0}, + {0.862449, 0}, + {0.775362, 5.32872e-18}, + {0.858837, 8.79816e-18}, + {0.899033, 1.85927e-18}, + {0.858837, 1.85927e-18}, + {0.775362, 1.24548e-19}, + {0.72366, -1.61018e-18}, + {0.743927, 1.85927e-18}, + {0.804389, -4.14999e-18}, + {0.836162, 1.24548e-19}, + {0.804389, -1.61018e-18}, + {0.743927, 1.85927e-18}, + {0.72366, 7.86853e-18}, + {1.00712, 0}, + {1.1084, 6.93889e-18}, + {1.1084, 0}, + {1.00712, 0}, + {0.862449, 0}, + {0.743927, -3.46945e-18}, + {0.683306, 0}, + {0.666068, 0}, + {0.666068, 0}, + {0.683306, -3.46945e-18}, + {0.743927, 0}, + {0.862449, 0}, + {1.36223, 0}, + {1.42048, -2.16167e-19}, + {1.36223, 0}, + {1.20632, 0}, + {1.00096, 0}, + {0.804389, 1.08084e-19}, + {0.666068, 0}, + {0.616617, 0}, + {0.666068, 0}, + {0.804389, 1.08084e-19}, + {1.00096, 0}, + {1.20632, 0}, + {1.69928, 0}, + {1.69928, 0}, + {1.59252, 0}, + {1.38444, 0}, + {1.10759, 0}, + {0.836162, 0}, + {0.666068, 0}, + {0.666068, 0}, + {0.836162, 0}, + {1.10759, 0}, + {1.38444, 0}, + {1.59252, 0}, + {1.92793, 2.13894e-17}, + {1.88226, 2.58963e-17}, + {1.7299, 2.58963e-17}, + {1.45645, 2.58963e-17}, + {1.10759, 2.81498e-17}, + {0.804389, 2.58963e-17}, + {0.683306, 2.58963e-17}, + {0.804389, 3.19056e-17}, + {1.10759, 2.81498e-17}, + {1.45645, 2.58963e-17}, + {1.7299, 2.58963e-17}, + {1.88226, 1.9887e-17}, + {2.03322, 0}, + {1.94478, 0}, + {1.7299, 0}, + {1.38444, 0}, + {1.00096, 0}, + {0.743927, 2.4037e-17}, + {0.743927, 0}, + {1.00096, 0}, + {1.38444, 0}, + {1.7299, -2.4037e-17}, + {1.94478, 0}, + {2.03322, 0}, + {2.03322, 0}, + {1.88226, -5.55112e-17}, + {1.59252, 0}, + {1.20632, 0}, + {0.862449, 0}, + {0.72366, 2.77556e-17}, + {0.862449, 0}, + {1.20632, 0}, + {1.59252, 0}, + {1.88226, 2.77556e-17}, + {2.03322, 0}, + {2.07555, 0}, + {1.51507, 0}, + {1.25388, -5.55112e-17}, + {0.981652, 0}, + {0.775362, 0}, + {0.698375, 0}, + {0.775362, 3.22625e-17}, + {0.981652, 0}, + {1.25388, 0}, + {1.51507, 0}, + {1.69928, 2.32486e-17}, + {1.76522, 0}, + {1.69928, 0}, + {1.25388, 0}, + {1.03162, 2.77556e-17}, + {0.85665, 0}, + {0.763031, 0}, + {0.763031, 0}, + {0.85665, -1.38778e-17}, + {1.03162, 0}, + {1.25388, 0}, + {1.46388, 0}, + {1.59252, -1.38778e-17}, + {1.59252, 0}, + {1.46388, 0}, + {0.981652, 0}, + {0.85665, 0}, + {0.797429, 0}, + {0.782576, 0}, + {0.797429, 0}, + {0.85665, 0}, + {0.981652, 0}, + {1.15758, 0}, + {1.31866, 0}, + {1.38444, 0}, + {1.31866, 0}, + {1.15758, 0}, + {0.775362, 0}, + {0.763031, 0}, + {0.782576, 0}, + {0.782576, 0}, + {0.763031, 0}, + {0.775362, 0}, + {0.862449, 0}, + {1.00096, 0}, + {1.10759, 0}, + {1.10759, 0}, + {1.00096, 0}, + {0.862449, 0}, + {0.698375, 0}, + {0.763031, 0}, + {0.797429, 0}, + {0.763031, 0}, + {0.698375, 0}, + {0.679431, 7.51157e-19}, + {0.740598, 0}, + {0.836162, 0}, + {0.881874, 0}, + {0.836162, -7.51157e-19}, + {0.740598, 0}, + {0.679431, 0}, + {0.775362, 0}, + {0.85665, -8.67362e-19}, + {0.85665, 0}, + {0.775362, 0}, + {0.679431, 0}, + {0.639427, 4.33681e-19}, + {0.666068, 0}, + {0.707352, 0}, + {0.707352, 0}, + {0.666068, 4.33681e-19}, + {0.639427, 0}, + {0.679431, 0}, + {0.981652, 0}, + {1.03162, 1.40862e-18}, + {0.981652, 0}, + {0.862449, 0}, + {0.740598, 0}, + {0.666068, 1.13142e-17}, + {0.641509, 0}, + {0.63886, 0}, + {0.641509, 0}, + {0.666068, -1.27228e-17}, + {0.740598, 0}, + {0.862449, 0}, + {1.25388, 0}, + {1.25388, 0}, + {1.15758, 0}, + {1.00096, 0}, + {0.836162, 0}, + {0.707352, -2.4037e-17}, + {0.63886, 0}, + {0.63886, 0}, + {0.707352, 0}, + {0.836162, 2.4037e-17}, + {1.00096, 0}, + {1.15758, 0}, + {1.51507, 0}, + {1.46388, 0}, + {1.31866, 0}, + {1.10759, 0}, + {0.881874, 0}, + {0.707352, 0}, + {0.641509, 0}, + {0.707352, 0}, + {0.881874, 0}, + {1.10759, 0}, + {1.31866, 0}, + {1.46388, 0}, + {1.69928, 0}, + {1.59252, 0}, + {1.38444, 0}, + {1.10759, 0}, + {0.836162, 0}, + {0.666068, 0}, + {0.666068, 0}, + {0.836162, 0}, + {1.10759, 0}, + {1.38444, 0}, + {1.59252, 0}, + {1.69928, 0}, + {1.76522, 0}, + {1.59252, 0}, + {1.31866, 0}, + {1.00096, 0}, + {0.740598, 0}, + {0.639427, 0}, + {0.740598, 0}, + {1.00096, 0}, + {1.31866, 0}, + {1.59252, 0}, + {1.76522, 0}, + {1.82256, 0}, + {1.69928, 0}, + {1.46388, 0}, + {1.15758, 0}, + {0.862449, 0}, + {0.679431, 0}, + {0.679431, 1.20185e-17}, + {0.862449, 0}, + {1.15758, 0}, + {1.46388, 0}, + {1.69928, -1.20185e-17}, + {1.82256, 0}, + {1.82256, 0}, + {1.08798, 1.85927e-18}, + {0.930725, 1.85927e-18}, + {0.824264, 1.85927e-18}, + {0.775362, 1.85927e-18}, + {0.775362, 1.85927e-18}, + {0.824264, 1.85927e-18}, + {0.930725, 1.85927e-18}, + {1.08798, 1.85927e-18}, + {1.25388, 1.85927e-18}, + {1.36223, 1.85927e-18}, + {1.36223, 1.85927e-18}, + {1.25388, 1.85927e-18}, + {0.930725, 1.85927e-18}, + {0.869317, 1.85927e-18}, + {0.85665, 1.57371e-17}, + {0.858837, 1.66044e-17}, + {0.85665, 1.08732e-17}, + {0.869317, 1.38778e-17}, + {0.930725, 6.93889e-18}, + {1.04306, -5.5133e-18}, + {1.15758, -7.15462e-18}, + {1.20632, -1.01592e-17}, + {1.15758, -1.70981e-17}, + {1.04306, -5.5133e-18}, + {0.824264, -1.20185e-17}, + {0.85665, -5.07962e-18}, + {0.899033, -8.54907e-18}, + {0.899033, -1.20185e-17}, + {0.85665, -1.20185e-17}, + {0.824264, -2.14972e-17}, + {0.851575, -1.90113e-17}, + {0.931265, -1.80278e-17}, + {1.00096, -1.20185e-17}, + {1.00096, -9.47871e-18}, + {0.931265, -8.49514e-18}, + {0.851575, -6.00926e-18}, + {0.775362, -5.07962e-18}, + {0.858837, -5.07962e-18}, + {0.899033, -5.07962e-18}, + {0.858837, -1.20185e-17}, + {0.775362, -1.5488e-17}, + {0.72366, -1.5488e-17}, + {0.743927, -2.75065e-17}, + {0.804389, -1.80278e-17}, + {0.836162, -1.5488e-17}, + {0.804389, -1.5488e-17}, + {0.743927, -3.46945e-18}, + {0.72366, -6.00926e-18}, + {0.775362, -1.20185e-17}, + {0.85665, -1.28859e-17}, + {0.85665, -1.89574e-17}, + {0.775362, -1.89574e-17}, + {0.679431, -2.24269e-17}, + {0.639427, -3.40117e-17}, + {0.666068, -1.89574e-17}, + {0.707352, -2.49667e-17}, + {0.707352, -2.24269e-17}, + {0.666068, -9.97466e-18}, + {0.639427, -1.89574e-17}, + {0.679431, -1.29482e-17}, + {0.824264, -1.10889e-17}, + {0.869317, -1.71739e-17}, + {0.824264, -1.45583e-17}, + {0.72366, -2.14972e-17}, + {0.639427, -3.19056e-17}, + {0.616617, -5.29001e-17}, + {0.63886, -4.21894e-17}, + {0.655231, -4.32269e-17}, + {0.63886, -3.19056e-17}, + {0.616617, -4.82604e-18}, + {0.639427, -1.81523e-17}, + {0.72366, -1.01759e-17}, + {0.930725, -1.20185e-17}, + {0.930725, -8.54907e-18}, + {0.851575, -1.20185e-17}, + {0.743927, -1.20185e-17}, + {0.666068, -1.20185e-17}, + {0.63886, -1.37532e-17}, + {0.640151, -1.20185e-17}, + {0.640151, -1.20185e-17}, + {0.63886, -1.20185e-17}, + {0.666068, -1.37532e-17}, + {0.743927, -1.20185e-17}, + {0.851575, -1.20185e-17}, + {1.08798, 1.85927e-18}, + {1.04306, 1.85927e-18}, + {0.931265, -1.20185e-17}, + {0.804389, -1.20185e-17}, + {0.707352, -1.89574e-17}, + {0.655231, -1.89574e-17}, + {0.640151, -2.4037e-17}, + {0.655231, -2.4037e-17}, + {0.707352, -1.89574e-17}, + {0.804389, -1.89574e-17}, + {0.931265, 0}, + {1.04306, 0}, + {1.25388, -1.20185e-17}, + {1.15758, -1.89574e-17}, + {1.00096, -1.89574e-17}, + {0.836162, -1.89574e-17}, + {0.707352, -2.24269e-17}, + {0.63886, -6.93889e-18}, + {0.63886, -2.49667e-17}, + {0.707352, -2.49667e-17}, + {0.836162, -2.24269e-17}, + {1.00096, -3.09759e-17}, + {1.15758, -1.29482e-17}, + {1.25388, -1.29482e-17}, + {1.36223, -1.29482e-17}, + {1.20632, -1.29482e-17}, + {1.00096, -4.07037e-17}, + {0.804389, -1.29482e-17}, + {0.666068, 1.10889e-17}, + {0.616617, -1.29482e-17}, + {0.666068, -1.10889e-17}, + {0.804389, -1.29482e-17}, + {1.00096, -3.69852e-17}, + {1.20632, -1.29482e-17}, + {1.36223, 1.29482e-17}, + {1.42048, -1.29482e-17}, + {1.36223, -1.20185e-17}, + {1.15758, -1.20185e-17}, + {0.931265, -1.20185e-17}, + {0.743927, -1.20185e-17}, + {0.639427, -1.20185e-17}, + {0.639427, -1.20185e-17}, + {0.743927, -1.20185e-17}, + {0.931265, -1.20185e-17}, + {1.15758, -1.20185e-17}, + {1.36223, -1.20185e-17}, + {1.48405, -1.20185e-17}, + {1.48405, -1.20185e-17}, + {1.25388, 1.57371e-17}, + {1.04306, 1.57371e-17}, + {0.851575, -1.20185e-17}, + {0.72366, -1.20185e-17}, + {0.679431, -2.58963e-17}, + {0.72366, -4.09195e-17}, + {0.851575, -2.4037e-17}, + {1.04306, -3.60556e-17}, + {1.25388, -2.58963e-17}, + {1.42048, -1.08732e-17}, + {1.48405, 0}, + {1.42048, 1.20185e-17}, + {0.905261, 0}, + {0.930725, 3.46945e-18}, + {0.981652, 0}, + {1.00712, 0}, + {0.981652, 0}, + {0.930725, -1.73472e-18}, + {0.905261, 0}, + {0.930725, 0}, + {0.981652, 0}, + {1.00712, -1.73472e-18}, + {0.981652, 0}, + {0.930725, 0}, + {0.930725, 0}, + {1.03162, 0}, + {1.1084, 0}, + {1.1084, 1.73472e-18}, + {1.03162, 0}, + {0.930725, -6.00926e-18}, + {0.864823, 0}, + {0.851575, -8.67362e-19}, + {0.862449, 0}, + {0.862449, 6.00926e-18}, + {0.851575, 0}, + {0.864823, -8.67362e-19}, + {0.981652, 0}, + {1.1084, 3.46945e-18}, + {1.16145, 0}, + {1.1084, 0}, + {0.981652, 0}, + {0.851575, -1.73472e-18}, + {0.771224, 0}, + {0.743927, 0}, + {0.740598, 0}, + {0.743927, -1.73472e-18}, + {0.771224, 0}, + {0.851575, 0}, + {1.00712, 0}, + {1.1084, 6.93889e-18}, + {1.1084, 0}, + {1.00712, 0}, + {0.862449, 0}, + {0.743927, -3.46945e-18}, + {0.683306, 0}, + {0.666068, 0}, + {0.666068, 0}, + {0.683306, -3.46945e-18}, + {0.743927, 0}, + {0.862449, 0}, + {0.981652, 0}, + {1.03162, -1.38028e-18}, + {0.981652, 0}, + {0.862449, 0}, + {0.740598, 0}, + {0.666068, 6.90141e-19}, + {0.641509, 0}, + {0.63886, 0}, + {0.641509, 0}, + {0.666068, 6.90141e-19}, + {0.740598, 0}, + {0.862449, 0}, + {0.930725, -8.67362e-18}, + {0.930725, -8.67362e-18}, + {0.851575, -6.93889e-18}, + {0.743927, -6.93889e-18}, + {0.666068, 4.33681e-18}, + {0.63886, 1.63553e-17}, + {0.640151, 9.47871e-18}, + {0.640151, 1.24833e-17}, + {0.63886, 4.33681e-18}, + {0.666068, -7.68171e-18}, + {0.743927, -2.53981e-18}, + {0.851575, -5.54444e-18}, + {0.905261, 0}, + {0.864823, -1.73472e-18}, + {0.771224, 0}, + {0.683306, 0}, + {0.641509, 0}, + {0.640151, 8.67362e-19}, + {0.645833, 0}, + {0.640151, 0}, + {0.641509, 0}, + {0.683306, 8.67362e-19}, + {0.771224, 0}, + {0.864823, 0}, + {0.930725, 0}, + {0.851575, 0}, + {0.743927, 0}, + {0.666068, 0}, + {0.63886, 0}, + {0.640151, 0}, + {0.640151, 0}, + {0.63886, 0}, + {0.666068, 0}, + {0.743927, 0}, + {0.851575, 0}, + {0.930725, 0}, + {0.981652, 0}, + {0.862449, 0}, + {0.740598, 0}, + {0.666068, 0}, + {0.641509, 0}, + {0.63886, 0}, + {0.641509, 0}, + {0.666068, 0}, + {0.740598, 0}, + {0.862449, 0}, + {0.981652, 0}, + {1.03162, 0}, + {1.00712, 1.38778e-17}, + {0.862449, 1.38778e-17}, + {0.743927, 0}, + {0.683306, 0}, + {0.666068, -6.93889e-18}, + {0.666068, -1.29482e-17}, + {0.683306, -1.20185e-17}, + {0.743927, -1.20185e-17}, + {0.862449, -6.93889e-18}, + {1.00712, -9.29636e-19}, + {1.1084, 1.20185e-17}, + {1.1084, 1.20185e-17}, + {0.981652, 0}, + {0.851575, 1.38778e-17}, + {0.771224, 0}, + {0.743927, 0}, + {0.740598, 0}, + {0.743927, -6.93889e-18}, + {0.771224, 0}, + {0.851575, 0}, + {0.981652, 0}, + {1.1084, -6.93889e-18}, + {1.16145, 0}, + {1.1084, 0}, + {0.930725, 0}, + {0.864823, 0}, + {0.851575, 0}, + {0.862449, 0}, + {0.862449, 0}, + {0.851575, 0}, + {0.864823, 0}, + {0.930725, 0}, + {1.03162, 0}, + {1.1084, 0}, + {1.1084, 0}, + {1.03162, 0}, + {1.08798, 0}, + {1.25388, 0}, + {1.36223, 0}, + {1.36223, 0}, + {1.25388, 0}, + {1.08798, 1.20185e-17}, + {0.930725, 0}, + {0.824264, 0}, + {0.775362, 0}, + {0.775362, -1.20185e-17}, + {0.824264, 0}, + {0.930725, 0}, + {1.25388, 2.77556e-17}, + {1.42048, -1.38778e-17}, + {1.48405, -1.38778e-17}, + {1.42048, 0}, + {1.25388, -1.38778e-17}, + {1.04306, 6.93889e-18}, + {0.851575, 3.09759e-17}, + {0.72366, 0}, + {0.679431, -1.38778e-17}, + {0.72366, 6.93889e-18}, + {0.851575, -1.70981e-17}, + {1.04306, 0}, + {1.36223, 0}, + {1.48405, -6.93889e-18}, + {1.48405, 0}, + {1.36223, 0}, + {1.15758, 0}, + {0.931265, 3.46945e-18}, + {0.743927, 0}, + {0.639427, 0}, + {0.639427, 0}, + {0.743927, 3.46945e-18}, + {0.931265, 0}, + {1.15758, 0}, + {1.36223, 0}, + {1.42048, -2.07544e-18}, + {1.36223, 0}, + {1.20632, 0}, + {1.00096, 0}, + {0.804389, 1.03772e-18}, + {0.666068, 0}, + {0.616617, 0}, + {0.666068, 0}, + {0.804389, 1.03772e-18}, + {1.00096, 0}, + {1.20632, 0}, + {1.25388, 0}, + {1.25388, 0}, + {1.15758, 0}, + {1.00096, 0}, + {0.836162, 0}, + {0.707352, 0}, + {0.63886, 0}, + {0.63886, 0}, + {0.707352, 0}, + {0.836162, 0}, + {1.00096, 0}, + {1.15758, 0}, + {1.08798, -4.64818e-19}, + {1.04306, 0}, + {0.931265, 0}, + {0.804389, 0}, + {0.707352, 2.32409e-19}, + {0.655231, 0}, + {0.640151, -6.00926e-18}, + {0.655231, -4.50694e-18}, + {0.707352, 2.32409e-19}, + {0.804389, 0}, + {0.931265, 6.00926e-18}, + {1.04306, 4.50694e-18}, + {0.930725, 0}, + {0.851575, 0}, + {0.743927, 0}, + {0.666068, 0}, + {0.63886, 0}, + {0.640151, 0}, + {0.640151, 0}, + {0.63886, 0}, + {0.666068, 0}, + {0.743927, 0}, + {0.851575, 0}, + {0.930725, 0}, + {0.824264, 0}, + {0.72366, 0}, + {0.639427, 0}, + {0.616617, 0}, + {0.63886, 0}, + {0.655231, -1.50231e-18}, + {0.63886, 0}, + {0.616617, 0}, + {0.639427, 0}, + {0.72366, 1.50231e-18}, + {0.824264, 0}, + {0.869317, 0}, + {0.775362, 0}, + {0.679431, 0}, + {0.639427, 0}, + {0.666068, 0}, + {0.707352, 0}, + {0.707352, 0}, + {0.666068, 0}, + {0.639427, 0}, + {0.679431, 0}, + {0.775362, 0}, + {0.85665, 0}, + {0.85665, 0}, + {0.775362, -6.93889e-18}, + {0.72366, -3.46945e-18}, + {0.743927, 0}, + {0.804389, 0}, + {0.836162, 4.64818e-19}, + {0.804389, 1.73472e-18}, + {0.743927, 0}, + {0.72366, 6.00926e-18}, + {0.775362, 6.47408e-18}, + {0.858837, 1.73472e-18}, + {0.899033, 0}, + {0.858837, -6.00926e-18}, + {0.824264, 0}, + {0.851575, 0}, + {0.931265, 0}, + {1.00096, 0}, + {1.00096, 0}, + {0.931265, 0}, + {0.851575, 0}, + {0.824264, 0}, + {0.85665, 0}, + {0.899033, 0}, + {0.899033, 0}, + {0.85665, 0}, + {0.930725, 0}, + {1.04306, 0}, + {1.15758, 0}, + {1.20632, 0}, + {1.15758, 0}, + {1.04306, 0}, + {0.930725, 0}, + {0.869317, 0}, + {0.85665, 0}, + {0.858837, 0}, + {0.85665, 0}, + {0.869317, 0}, + {1.51507, 0}, + {1.69928, 0}, + {1.76522, 0}, + {1.69928, 0}, + {1.51507, 0}, + {1.25388, -2.4037e-17}, + {0.981652, 0}, + {0.775362, 0}, + {0.698375, 0}, + {0.775362, 2.4037e-17}, + {0.981652, 0}, + {1.25388, 0}, + {1.69928, 0}, + {1.82256, -1.38778e-17}, + {1.82256, 0}, + {1.69928, 0}, + {1.46388, 0}, + {1.15758, -4.11352e-17}, + {0.862449, 0}, + {0.679431, 0}, + {0.679431, 0}, + {0.862449, 5.5013e-17}, + {1.15758, 0}, + {1.46388, 0}, + {1.76522, 0}, + {1.82256, 6.6502e-18}, + {1.76522, 0}, + {1.59252, 0}, + {1.31866, 0}, + {1.00096, -3.3251e-18}, + {0.740598, 0}, + {0.639427, 0}, + {0.740598, 0}, + {1.00096, -3.3251e-18}, + {1.31866, 0}, + {1.59252, 0}, + {1.69928, 0}, + {1.69928, 0}, + {1.59252, 0}, + {1.38444, 0}, + {1.10759, 0}, + {0.836162, 0}, + {0.666068, 0}, + {0.666068, 0}, + {0.836162, 0}, + {1.10759, 0}, + {1.38444, 0}, + {1.59252, 0}, + {1.51507, 0}, + {1.46388, 0}, + {1.31866, 0}, + {1.10759, 0}, + {0.881874, 0}, + {0.707352, 0}, + {0.641509, 0}, + {0.707352, 0}, + {0.881874, 0}, + {1.10759, 0}, + {1.31866, 0}, + {1.46388, 0}, + {1.25388, 1.38778e-17}, + {1.15758, 0}, + {1.00096, 0}, + {0.836162, 2.77556e-17}, + {0.707352, -6.93889e-18}, + {0.63886, -1.20185e-17}, + {0.63886, -6.00926e-18}, + {0.707352, -2.58963e-17}, + {0.836162, -6.93889e-18}, + {1.00096, 1.20185e-17}, + {1.15758, 6.00926e-18}, + {1.25388, -1.85927e-18}, + {0.981652, 0}, + {0.862449, 1.38778e-17}, + {0.740598, 0}, + {0.666068, 0}, + {0.641509, 0}, + {0.63886, -6.93889e-18}, + {0.641509, 0}, + {0.666068, 0}, + {0.740598, 0}, + {0.862449, -6.93889e-18}, + {0.981652, 0}, + {1.03162, 0}, + {0.775362, 0}, + {0.679431, 0}, + {0.639427, 0}, + {0.666068, 0}, + {0.707352, 0}, + {0.707352, 0}, + {0.666068, 0}, + {0.639427, 0}, + {0.679431, 0}, + {0.775362, 0}, + {0.85665, 0}, + {0.85665, 0}, + {0.698375, 0}, + {0.679431, 0}, + {0.740598, 0}, + {0.836162, 0}, + {0.881874, 0}, + {0.836162, -6.00926e-18}, + {0.740598, 0}, + {0.679431, 0}, + {0.698375, 0}, + {0.763031, 6.00926e-18}, + {0.797429, 0}, + {0.763031, 0}, + {0.775362, 0}, + {0.862449, 0}, + {1.00096, 0}, + {1.10759, 0}, + {1.10759, 0}, + {1.00096, 0}, + {0.862449, 0}, + {0.775362, 0}, + {0.763031, 0}, + {0.782576, 0}, + {0.782576, 0}, + {0.763031, 0}, + {0.981652, 0}, + {1.15758, 0}, + {1.31866, 0}, + {1.38444, 0}, + {1.31866, 0}, + {1.15758, 0}, + {0.981652, 0}, + {0.85665, 0}, + {0.797429, 0}, + {0.782576, 0}, + {0.797429, 0}, + {0.85665, 0}, + {1.25388, 0}, + {1.46388, 0}, + {1.59252, 0}, + {1.59252, 0}, + {1.46388, 0}, + {1.25388, 2.4037e-17}, + {1.03162, 0}, + {0.85665, 0}, + {0.763031, 0}, + {0.763031, -2.4037e-17}, + {0.85665, 0}, + {1.03162, 0}, + {1.92793, 1.20185e-17}, + {2.03322, 2.58963e-17}, + {2.03322, 3.97741e-17}, + {1.92793, 1.20185e-17}, + {1.69928, 3.60556e-17}, + {1.36223, 5.07962e-18}, + {1.00712, -1.85927e-18}, + {0.775362, 1.20185e-17}, + {0.775362, -1.20185e-17}, + {1.00712, 5.07962e-18}, + {1.36223, -1.85927e-18}, + {1.69928, 1.20185e-17}, + {2.03322, 2.41616e-17}, + {2.07555, 2.2009e-17}, + {2.03322, 7.96727e-17}, + {1.88226, 1.35184e-16}, + {1.59252, 2.41616e-17}, + {1.20632, 2.52379e-17}, + {0.862449, 4.44801e-17}, + {0.72366, -3.13496e-17}, + {0.862449, 2.41616e-17}, + {1.20632, 2.52379e-17}, + {1.59252, -5.16681e-17}, + {1.88226, -3.13496e-17}, + {2.03322, 3.97741e-17}, + {2.03322, 2.58963e-17}, + {1.94478, 3.97741e-17}, + {1.7299, 3.97741e-17}, + {1.38444, 3.97741e-17}, + {1.00096, 4.6713e-17}, + {0.743927, 3.97741e-17}, + {0.743927, 3.97741e-17}, + {1.00096, 3.97741e-17}, + {1.38444, 4.6713e-17}, + {1.7299, 3.97741e-17}, + {1.94478, 3.97741e-17}, + {1.92793, 3.97741e-17}, + {1.88226, 1.20185e-17}, + {1.7299, 3.97741e-17}, + {1.45645, 3.97741e-17}, + {1.10759, 3.97741e-17}, + {0.804389, 5.36519e-17}, + {0.683306, 3.97741e-17}, + {0.804389, 3.97741e-17}, + {1.10759, 3.97741e-17}, + {1.45645, 5.36519e-17}, + {1.7299, 3.97741e-17}, + {1.88226, 3.97741e-17}, + {1.69928, 3.60556e-17}, + {1.59252, 6.38111e-17}, + {1.38444, 3.60556e-17}, + {1.10759, 3.60556e-17}, + {0.836162, 3.60556e-17}, + {0.666068, 2.21778e-17}, + {0.666068, 3.60556e-17}, + {0.836162, 3.60556e-17}, + {1.10759, 3.60556e-17}, + {1.38444, 2.21778e-17}, + {1.59252, 3.60556e-17}, + {1.69928, 3.60556e-17}, + {1.36223, 7.16174e-17}, + {1.20632, 8.54952e-17}, + {1.00096, 8.54952e-17}, + {0.804389, 5.77396e-17}, + {0.666068, 3.32044e-17}, + {0.616617, 1.4247e-17}, + {0.666068, -3.75829e-17}, + {0.804389, -3.19678e-17}, + {1.00096, -1.48697e-17}, + {1.20632, -9.79007e-18}, + {1.36223, 4.20398e-17}, + {1.42048, 6.41803e-17}, + {1.00712, 2.21778e-17}, + {0.862449, 3.60556e-17}, + {0.743927, 4.99333e-17}, + {0.683306, 4.99333e-17}, + {0.666068, 4.62148e-17}, + {0.666068, 3.4769e-17}, + {0.683306, 2.03185e-17}, + {0.743927, 8.29997e-18}, + {0.862449, -1.85927e-18}, + {1.00712, -4.29122e-18}, + {1.1084, -3.71854e-18}, + {1.1084, 8.29997e-18}, + {0.775362, -1.85927e-18}, + {0.72366, 1.20185e-17}, + {0.743927, 1.89574e-17}, + {0.804389, 2.58963e-17}, + {0.836162, 2.21778e-17}, + {0.804389, 1.52389e-17}, + {0.743927, -2.49095e-19}, + {0.72366, -1.57371e-17}, + {0.775362, -2.58963e-17}, + {0.858837, -3.28352e-17}, + {0.899033, -2.42861e-17}, + {0.858837, -1.57371e-17}, + {0.775362, -1.20185e-17}, + {0.862449, 1.85927e-18}, + {1.00096, 1.22676e-17}, + {1.10759, 1.57371e-17}, + {1.10759, 1.20185e-17}, + {1.00096, 2.07499e-18}, + {0.862449, -1.21431e-17}, + {0.775362, -2.58963e-17}, + {0.763031, -3.60556e-17}, + {0.782576, -3.99898e-17}, + {0.782576, -3.61801e-17}, + {0.763031, -2.58963e-17}, + {1.00712, -7.36012e-17}, + {1.20632, -7.36012e-17}, + {1.38444, -1.809e-17}, + {1.45645, 1.14003e-17}, + {1.38444, 3.67072e-17}, + {1.20632, 5.77396e-17}, + {1.00712, 2.9984e-17}, + {0.858837, 1.52389e-17}, + {0.782576, -1.73761e-17}, + {0.761485, -3.84085e-17}, + {0.782576, -6.61641e-17}, + {0.858837, -8.09093e-17}, + {1.36223, -2.58963e-17}, + {1.59252, 1.85927e-18}, + {1.7299, 1.85927e-18}, + {1.7299, 1.85927e-18}, + {1.59252, -1.85927e-18}, + {1.36223, -1.57371e-17}, + {1.1084, -1.57371e-17}, + {0.899033, -3.97741e-17}, + {0.782576, -4.99333e-17}, + {0.782576, -6.38111e-17}, + {0.899033, -6.38111e-17}, + {1.1084, -3.97741e-17}, + {1.69928, -1.85927e-18}, + {1.88226, 2.58963e-17}, + {1.94478, 1.20185e-17}, + {1.88226, 2.58963e-17}, + {1.69928, 2.21778e-17}, + {1.42048, 8.29997e-18}, + {1.1084, -8.79816e-18}, + {0.858837, -1.57371e-17}, + {0.763031, -2.58963e-17}, + {0.858837, -3.97741e-17}, + {1.1084, -8.79816e-18}, + {1.42048, -1.57371e-17}, + {2.14383, 0}, + {2.16623, -3.54439e-19}, + {2.14383, 0}, + {2.03322, 0}, + {1.76522, 0}, + {1.36223, 1.77219e-19}, + {0.981652, 0}, + {0.824264, 0}, + {0.981652, 0}, + {1.36223, 1.77219e-19}, + {1.76522, 0}, + {2.03322, 0}, + {2.16623, -6.93889e-18}, + {2.16623, -6.93889e-18}, + {2.11997, -6.93889e-18}, + {1.94478, -6.93889e-18}, + {1.59252, -6.93889e-18}, + {1.15758, -6.93889e-18}, + {0.851575, 1.70981e-17}, + {0.851575, -6.93889e-18}, + {1.15758, -6.93889e-18}, + {1.59252, -6.93889e-18}, + {1.94478, -3.09759e-17}, + {2.11997, -6.93889e-18}, + {2.14383, 0}, + {2.11997, 0}, + {2.00496, 0}, + {1.7299, 0}, + {1.31866, 0}, + {0.931265, 4.80741e-17}, + {0.771224, 0}, + {0.931265, 0}, + {1.31866, 0}, + {1.7299, -4.80741e-17}, + {2.00496, 0}, + {2.11997, 0}, + {2.03322, 0}, + {1.94478, 0}, + {1.7299, 0}, + {1.38444, 0}, + {1.00096, 0}, + {0.743927, 0}, + {0.743927, 0}, + {1.00096, 0}, + {1.38444, 0}, + {1.7299, 0}, + {1.94478, 0}, + {2.03322, 0}, + {1.76522, 0}, + {1.59252, 5.55112e-17}, + {1.31866, 0}, + {1.00096, 0}, + {0.740598, 0}, + {0.639427, -2.77556e-17}, + {0.740598, 0}, + {1.00096, 0}, + {1.31866, 0}, + {1.59252, -2.77556e-17}, + {1.76522, 0}, + {1.82256, 0}, + {1.36223, 3.46945e-18}, + {1.15758, 3.1225e-17}, + {0.931265, 3.1225e-17}, + {0.743927, 3.1225e-17}, + {0.639427, 2.75065e-17}, + {0.639427, 1.36287e-17}, + {0.743927, 1.61018e-18}, + {0.931265, -1.04083e-17}, + {1.15758, -2.05676e-17}, + {1.36223, -3.44454e-17}, + {1.48405, -2.24269e-17}, + {1.48405, -1.04083e-17}, + {0.981652, 0}, + {0.851575, 1.38778e-17}, + {0.771224, 0}, + {0.743927, 0}, + {0.740598, 0}, + {0.743927, -6.93889e-18}, + {0.771224, 0}, + {0.851575, 0}, + {0.981652, 0}, + {1.1084, -6.93889e-18}, + {1.16145, 0}, + {1.1084, 0}, + {0.824264, 0}, + {0.851575, 0}, + {0.931265, 0}, + {1.00096, 0}, + {1.00096, 0}, + {0.931265, 0}, + {0.851575, 0}, + {0.824264, 0}, + {0.85665, 0}, + {0.899033, 0}, + {0.899033, 0}, + {0.85665, 0}, + {0.981652, 0}, + {1.15758, 0}, + {1.31866, 0}, + {1.38444, 0}, + {1.31866, 0}, + {1.15758, 0}, + {0.981652, 0}, + {0.85665, 0}, + {0.797429, 0}, + {0.782576, 0}, + {0.797429, 0}, + {0.85665, 0}, + {1.36223, 3.1225e-17}, + {1.59252, 3.1225e-17}, + {1.7299, 1.73472e-17}, + {1.7299, -3.46945e-18}, + {1.59252, -1.04083e-17}, + {1.36223, -1.04083e-17}, + {1.1084, -2.75065e-17}, + {0.899033, -1.70981e-17}, + {0.782576, -1.04083e-17}, + {0.782576, -1.04083e-17}, + {0.899033, 2.05676e-17}, + {1.1084, 3.09759e-17}, + {1.76522, 0}, + {1.94478, 2.77556e-17}, + {2.00496, 0}, + {1.94478, 0}, + {1.76522, 0}, + {1.48405, -1.38778e-17}, + {1.16145, 0}, + {0.899033, 0}, + {0.797429, 0}, + {0.899033, -1.38778e-17}, + {1.16145, 0}, + {1.48405, 0}, + {2.03322, 0}, + {2.11997, 1.38778e-17}, + {2.11997, 0}, + {2.03322, 0}, + {1.82256, 0}, + {1.48405, -6.93889e-18}, + {1.1084, 0}, + {0.85665, 0}, + {0.85665, 0}, + {1.1084, -6.93889e-18}, + {1.48405, 0}, + {1.82256, 0}, + {2.17701, 0}, + {2.17701, 0}, + {2.16623, 0}, + {2.03322, 0}, + {1.69928, 0}, + {1.25388, 0}, + {0.930725, 0}, + {0.930725, 0}, + {1.25388, 0}, + {1.69928, 0}, + {2.03322, 0}, + {2.16623, 0}, + {2.17701, -5.20417e-18}, + {2.17945, -2.77556e-17}, + {2.11997, 0}, + {1.88226, 0}, + {1.46388, 2.60209e-18}, + {1.04306, -1.01592e-17}, + {0.864823, 0}, + {1.04306, 1.20185e-17}, + {1.46388, 2.60209e-18}, + {1.88226, 3.79148e-17}, + {2.11997, 0}, + {2.17945, -1.20185e-17}, + {2.16623, 0}, + {2.11997, 0}, + {1.94478, 0}, + {1.59252, 0}, + {1.15758, 0}, + {0.851575, 0}, + {0.851575, 0}, + {1.15758, 0}, + {1.59252, 0}, + {1.94478, 0}, + {2.11997, 0}, + {2.16623, 0}, + {2.03322, 0}, + {1.88226, 0}, + {1.59252, 0}, + {1.20632, 0}, + {0.862449, 0}, + {0.72366, 2.4037e-17}, + {0.862449, 0}, + {1.20632, 0}, + {1.59252, 0}, + {1.88226, -2.4037e-17}, + {2.03322, 0}, + {2.07555, 0}, + {1.69928, 0}, + {1.46388, 0}, + {1.15758, 0}, + {0.862449, 0}, + {0.679431, 0}, + {0.679431, -1.20185e-17}, + {0.862449, 0}, + {1.15758, 0}, + {1.46388, 0}, + {1.69928, 1.20185e-17}, + {1.82256, 0}, + {1.82256, 0}, + {1.25388, 0}, + {1.04306, 0}, + {0.851575, 0}, + {0.72366, 0}, + {0.679431, 0}, + {0.72366, 1.50231e-18}, + {0.851575, 0}, + {1.04306, 0}, + {1.25388, 0}, + {1.42048, -1.50231e-18}, + {1.48405, 0}, + {1.42048, 0}, + {0.930725, 0}, + {0.864823, 0}, + {0.851575, 0}, + {0.862449, 0}, + {0.862449, 0}, + {0.851575, 0}, + {0.864823, 0}, + {0.930725, 0}, + {1.03162, 0}, + {1.1084, 0}, + {1.1084, 0}, + {1.03162, 0}, + {0.930725, 0}, + {1.04306, 0}, + {1.15758, 0}, + {1.20632, 0}, + {1.15758, 0}, + {1.04306, 0}, + {0.930725, 0}, + {0.869317, 0}, + {0.85665, 0}, + {0.858837, 0}, + {0.85665, 0}, + {0.869317, 0}, + {1.25388, 0}, + {1.46388, 0}, + {1.59252, 0}, + {1.59252, 0}, + {1.46388, 0}, + {1.25388, 0}, + {1.03162, 0}, + {0.85665, 0}, + {0.763031, 0}, + {0.763031, 0}, + {0.85665, 0}, + {1.03162, 0}, + {1.69928, 0}, + {1.88226, 2.77556e-17}, + {1.94478, 0}, + {1.88226, 0}, + {1.69928, 0}, + {1.42048, -1.38778e-17}, + {1.1084, 0}, + {0.858837, 0}, + {0.763031, 0}, + {0.858837, -1.38778e-17}, + {1.1084, 0}, + {1.42048, 0}, + {2.03322, 0}, + {2.11997, 0}, + {2.11997, 0}, + {2.03322, 0}, + {1.82256, 0}, + {1.48405, 0}, + {1.1084, 0}, + {0.85665, 0}, + {0.85665, 0}, + {1.1084, 0}, + {1.48405, 0}, + {1.82256, 0}, + {2.16623, 0}, + {2.17945, 5.846e-18}, + {2.16623, 0}, + {2.07555, 0}, + {1.82256, 0}, + {1.42048, -2.923e-18}, + {1.03162, 0}, + {0.869317, 0}, + {1.03162, 0}, + {1.42048, -2.923e-18}, + {1.82256, 0}, + {2.07555, 0}}; + const std::vector> out_2 = {{2.16277, 0}, + {2.17701, 0}, + {2.14383, 0}, + {1.92793, 0}, + {1.51507, 0}, + {1.08798, -2.4037e-17}, + {0.905261, 0}, + {1.08798, 0}, + {1.51507, 0}, + {1.92793, 2.4037e-17}, + {2.14383, 0}, + {2.17701, 0}, + {2.17701, 0}, + {2.16623, 5.55112e-17}, + {2.03322, 0}, + {1.69928, 0}, + {1.25388, 0}, + {0.930725, -2.77556e-17}, + {0.930725, 0}, + {1.25388, 0}, + {1.69928, 0}, + {2.03322, -2.77556e-17}, + {2.16623, 0}, + {2.17701, 0}, + {2.14383, 0}, + {2.03322, 0}, + {1.76522, 0}, + {1.36223, 0}, + {0.981652, 0}, + {0.824264, 0}, + {0.981652, 0}, + {1.36223, 0}, + {1.76522, 0}, + {2.03322, 0}, + {2.14383, 0}, + {2.16623, 0}, + {1.92793, 0}, + {1.69928, 0}, + {1.36223, 0}, + {1.00712, 0}, + {0.775362, 0}, + {0.775362, 1.20185e-17}, + {1.00712, 0}, + {1.36223, 0}, + {1.69928, 0}, + {1.92793, -1.20185e-17}, + {2.03322, 0}, + {2.03322, 0}, + {1.51507, 0}, + {1.25388, 0}, + {0.981652, 0}, + {0.775362, 0}, + {0.698375, 0}, + {0.775362, -4.50694e-18}, + {0.981652, 0}, + {1.25388, 0}, + {1.51507, 0}, + {1.69928, 4.50694e-18}, + {1.76522, 0}, + {1.69928, 0}, + {1.08798, 0}, + {0.930725, -2.77556e-17}, + {0.824264, 0}, + {0.775362, 0}, + {0.775362, 0}, + {0.824264, 1.38778e-17}, + {0.930725, 0}, + {1.08798, 0}, + {1.25388, 0}, + {1.36223, 1.38778e-17}, + {1.36223, 0}, + {1.25388, 0}, + {0.905261, 0}, + {0.930725, 0}, + {0.981652, 0}, + {1.00712, 0}, + {0.981652, 0}, + {0.930725, 0}, + {0.905261, 0}, + {0.930725, 0}, + {0.981652, 0}, + {1.00712, 0}, + {0.981652, 0}, + {0.930725, 0}, + {1.08798, 0}, + {1.25388, 0}, + {1.36223, 0}, + {1.36223, 0}, + {1.25388, 0}, + {1.08798, 0}, + {0.930725, 0}, + {0.824264, 0}, + {0.775362, 0}, + {0.775362, 0}, + {0.824264, 0}, + {0.930725, 0}, + {1.51507, 0}, + {1.69928, -2.77556e-17}, + {1.76522, 0}, + {1.69928, 0}, + {1.51507, 0}, + {1.25388, 1.38778e-17}, + {0.981652, 0}, + {0.775362, 0}, + {0.698375, 0}, + {0.775362, 1.38778e-17}, + {0.981652, 0}, + {1.25388, 0}, + {1.92793, 0}, + {2.03322, 0}, + {2.03322, 0}, + {1.92793, 0}, + {1.69928, 0}, + {1.36223, 0}, + {1.00712, 0}, + {0.775362, 0}, + {0.775362, 0}, + {1.00712, 0}, + {1.36223, 0}, + {1.69928, 0}, + {2.14383, 0}, + {2.16623, -3.54439e-19}, + {2.14383, 0}, + {2.03322, 0}, + {1.76522, 0}, + {1.36223, 1.77219e-19}, + {0.981652, 0}, + {0.824264, 0}, + {0.981652, 0}, + {1.36223, 1.77219e-19}, + {1.76522, 0}, + {2.03322, 0}, + {2.17701, 0}, + {2.17701, 0}, + {2.16623, 0}, + {2.03322, 0}, + {1.69928, 0}, + {1.25388, 0}, + {0.930725, 0}, + {0.930725, 0}, + {1.25388, 0}, + {1.69928, 0}, + {2.03322, 0}, + {2.16623, 0}, + {2.17701, -6.93889e-18}, + {2.16623, -6.93889e-18}, + {2.03322, -6.93889e-18}, + {1.69928, -6.93889e-18}, + {1.25388, -6.93889e-18}, + {0.930725, -3.09759e-17}, + {0.930725, -6.93889e-18}, + {1.25388, -6.93889e-18}, + {1.69928, -6.93889e-18}, + {2.03322, 1.70981e-17}, + {2.16623, -6.93889e-18}, + {2.17701, -6.93889e-18}, + {2.16623, 0}, + {2.07555, 0}, + {1.82256, 0}, + {1.42048, 0}, + {1.03162, 0}, + {0.869317, -2.4037e-17}, + {1.03162, 0}, + {1.42048, 0}, + {1.82256, 0}, + {2.07555, 2.4037e-17}, + {2.16623, 0}, + {2.17945, 0}, + {2.03322, 0}, + {1.82256, -5.55112e-17}, + {1.48405, 0}, + {1.1084, 0}, + {0.85665, 0}, + {0.85665, 2.77556e-17}, + {1.1084, 0}, + {1.48405, 0}, + {1.82256, 0}, + {2.03322, 2.77556e-17}, + {2.11997, 0}, + {2.11997, 0}, + {1.69928, 0}, + {1.42048, 0}, + {1.1084, 0}, + {0.858837, 0}, + {0.763031, 0}, + {0.858837, 0}, + {1.1084, 0}, + {1.42048, 0}, + {1.69928, 0}, + {1.88226, 0}, + {1.94478, 0}, + {1.88226, 0}, + {1.25388, 3.46945e-18}, + {1.03162, -2.42861e-17}, + {0.85665, 3.46945e-18}, + {0.763031, 3.46945e-18}, + {0.763031, 3.46945e-18}, + {0.85665, 1.73472e-17}, + {1.03162, 3.46945e-18}, + {1.25388, 3.46945e-18}, + {1.46388, 3.46945e-18}, + {1.59252, 1.73472e-17}, + {1.59252, 3.46945e-18}, + {1.46388, 3.46945e-18}, + {0.930725, -2.4037e-17}, + {0.869317, -3.79148e-17}, + {0.85665, -2.4037e-17}, + {0.858837, -1.7563e-17}, + {0.85665, -2.4037e-17}, + {0.869317, -1.70981e-17}, + {0.930725, -2.4037e-17}, + {1.04306, -2.72741e-17}, + {1.15758, -2.4037e-17}, + {1.20632, -1.70981e-17}, + {1.15758, -2.4037e-17}, + {1.04306, -2.72741e-17}, + {0.930725, 0}, + {1.03162, 0}, + {1.1084, 0}, + {1.1084, 0}, + {1.03162, 0}, + {0.930725, 0}, + {0.864823, 0}, + {0.851575, 0}, + {0.862449, 0}, + {0.862449, 0}, + {0.851575, 0}, + {0.864823, 0}, + {1.25388, -2.47509e-17}, + {1.42048, -3.86287e-17}, + {1.48405, -1.08732e-17}, + {1.42048, 3.00463e-18}, + {1.25388, 1.68824e-17}, + {1.04306, 4.78583e-17}, + {0.851575, 3.39806e-17}, + {0.72366, 2.70417e-17}, + {0.679431, 1.68824e-17}, + {0.72366, -2.15723e-19}, + {0.851575, -1.40935e-17}, + {1.04306, -2.10324e-17}, + {1.69928, 3.46945e-18}, + {1.82256, 1.73472e-17}, + {1.82256, 3.46945e-18}, + {1.69928, 3.46945e-18}, + {1.46388, 3.46945e-18}, + {1.15758, -3.46945e-18}, + {0.862449, 3.46945e-18}, + {0.679431, 3.46945e-18}, + {0.679431, 3.46945e-18}, + {0.862449, -3.46945e-18}, + {1.15758, 3.46945e-18}, + {1.46388, 3.46945e-18}, + {2.03322, 2.4037e-17}, + {2.07555, 2.5603e-17}, + {2.03322, 2.4037e-17}, + {1.88226, 2.4037e-17}, + {1.59252, -2.4037e-17}, + {1.20632, 2.32541e-17}, + {0.862449, 2.4037e-17}, + {0.72366, 2.4037e-17}, + {0.862449, 7.21111e-17}, + {1.20632, 2.32541e-17}, + {1.59252, 2.4037e-17}, + {1.88226, 2.4037e-17}, + {2.16623, 0}, + {2.16623, 0}, + {2.11997, 0}, + {1.94478, 0}, + {1.59252, 0}, + {1.15758, -4.80741e-17}, + {0.851575, 0}, + {0.851575, 0}, + {1.15758, 0}, + {1.59252, 4.80741e-17}, + {1.94478, 0}, + {2.11997, 0}, + {2.17701, -1.68824e-17}, + {2.17945, -3.07602e-17}, + {2.11997, -3.00463e-18}, + {1.88226, -3.00463e-18}, + {1.46388, 3.93426e-18}, + {1.04306, -1.31639e-17}, + {0.864823, -3.00463e-18}, + {1.04306, 9.01389e-18}, + {1.46388, 3.93426e-18}, + {1.88226, 3.49102e-17}, + {2.11997, -3.00463e-18}, + {2.17945, -1.50231e-17}, + {2.14383, 0}, + {2.03322, 0}, + {1.76522, 0}, + {1.36223, 0}, + {0.981652, 0}, + {0.824264, 2.4037e-17}, + {0.981652, 0}, + {1.36223, 0}, + {1.76522, 0}, + {2.03322, -2.4037e-17}, + {2.14383, 0}, + {2.16623, 0}, + {2.03322, -2.77556e-17}, + {1.82256, -2.77556e-17}, + {1.48405, -2.77556e-17}, + {1.1084, -2.77556e-17}, + {0.85665, -2.77556e-17}, + {0.85665, -3.71854e-18}, + {1.1084, -2.77556e-17}, + {1.48405, -2.77556e-17}, + {1.82256, -2.77556e-17}, + {2.03322, -5.17926e-17}, + {2.11997, -2.77556e-17}, + {2.11997, -2.77556e-17}, + {1.76522, 0}, + {1.48405, 0}, + {1.16145, 0}, + {0.899033, 0}, + {0.797429, 0}, + {0.899033, 9.01389e-18}, + {1.16145, 0}, + {1.48405, 0}, + {1.76522, 0}, + {1.94478, -9.01389e-18}, + {2.00496, 0}, + {1.94478, 0}, + {1.36223, 0}, + {1.1084, -2.77556e-17}, + {0.899033, 0}, + {0.782576, 0}, + {0.782576, 0}, + {0.899033, 1.38778e-17}, + {1.1084, 0}, + {1.36223, 0}, + {1.59252, 0}, + {1.7299, 1.38778e-17}, + {1.7299, 0}, + {1.59252, 0}, + {0.981652, 0}, + {0.85665, 2.77556e-17}, + {0.797429, 0}, + {0.782576, 0}, + {0.797429, 0}, + {0.85665, -1.38778e-17}, + {0.981652, 0}, + {1.15758, 0}, + {1.31866, 0}, + {1.38444, -1.38778e-17}, + {1.31866, 0}, + {1.15758, 0}, + {0.824264, 1.38778e-17}, + {0.85665, 1.38778e-17}, + {0.899033, 1.73472e-17}, + {0.899033, 6.93889e-18}, + {0.85665, 1.38778e-17}, + {0.824264, 1.68824e-17}, + {0.851575, 1.77767e-17}, + {0.931265, 2.03519e-17}, + {1.00096, 1.38778e-17}, + {1.00096, 1.08732e-17}, + {0.931265, 6.50938e-18}, + {0.851575, 1.43426e-17}, + {0.981652, 0}, + {1.1084, 0}, + {1.16145, 0}, + {1.1084, 0}, + {0.981652, 0}, + {0.851575, 0}, + {0.771224, 0}, + {0.743927, 0}, + {0.740598, 0}, + {0.743927, 0}, + {0.771224, 0}, + {0.851575, 0}, + {1.36223, 0}, + {1.48405, -6.93889e-18}, + {1.48405, 0}, + {1.36223, 0}, + {1.15758, 0}, + {0.931265, 3.46945e-18}, + {0.743927, 0}, + {0.639427, 0}, + {0.639427, 0}, + {0.743927, 3.46945e-18}, + {0.931265, 0}, + {1.15758, 0}, + {1.76522, 0}, + {1.82256, 2.93165e-18}, + {1.76522, 0}, + {1.59252, 0}, + {1.31866, 0}, + {1.00096, -4.95399e-17}, + {0.740598, 0}, + {0.639427, 0}, + {0.740598, 0}, + {1.00096, 4.66082e-17}, + {1.31866, 0}, + {1.59252, 0}, + {2.03322, 1.38778e-17}, + {2.03322, 1.38778e-17}, + {1.94478, 1.38778e-17}, + {1.7299, 1.38778e-17}, + {1.38444, 1.38778e-17}, + {1.00096, 1.38778e-17}, + {0.743927, 1.38778e-17}, + {0.743927, 1.38778e-17}, + {1.00096, 1.38778e-17}, + {1.38444, 1.38778e-17}, + {1.7299, 1.38778e-17}, + {1.94478, 1.38778e-17}, + {2.14383, 0}, + {2.11997, 0}, + {2.00496, 0}, + {1.7299, 0}, + {1.31866, 0}, + {0.931265, 4.80741e-17}, + {0.771224, 0}, + {0.931265, 0}, + {1.31866, 0}, + {1.7299, -4.80741e-17}, + {2.00496, 0}, + {2.11997, 0}, + {2.16623, 0}, + {2.11997, 0}, + {1.94478, 0}, + {1.59252, 0}, + {1.15758, 0}, + {0.851575, 0}, + {0.851575, 0}, + {1.15758, 0}, + {1.59252, 0}, + {1.94478, 0}, + {2.11997, 0}, + {2.16623, 0}, + {1.92793, 0}, + {1.69928, 0}, + {1.36223, 0}, + {1.00712, 0}, + {0.775362, 0}, + {0.775362, 0}, + {1.00712, 0}, + {1.36223, 0}, + {1.69928, 0}, + {1.92793, 0}, + {2.03322, 0}, + {2.03322, 0}, + {1.69928, -2.77556e-17}, + {1.42048, -2.77556e-17}, + {1.1084, -2.77556e-17}, + {0.858837, -2.77556e-17}, + {0.763031, -2.77556e-17}, + {0.858837, -2.77556e-17}, + {1.1084, -2.77556e-17}, + {1.42048, -2.77556e-17}, + {1.69928, -2.77556e-17}, + {1.88226, -2.77556e-17}, + {1.94478, -2.77556e-17}, + {1.88226, -2.77556e-17}, + {1.36223, 0}, + {1.1084, -2.77556e-17}, + {0.899033, 0}, + {0.782576, 0}, + {0.782576, 0}, + {0.899033, 1.38778e-17}, + {1.1084, 0}, + {1.36223, 0}, + {1.59252, 0}, + {1.7299, 1.38778e-17}, + {1.7299, 0}, + {1.59252, 0}, + {1.00712, 0}, + {0.858837, 0}, + {0.782576, 0}, + {0.761485, 0}, + {0.782576, 0}, + {0.858837, 0}, + {1.00712, 0}, + {1.20632, 0}, + {1.38444, 0}, + {1.45645, 0}, + {1.38444, 0}, + {1.20632, 0}, + {0.775362, 0}, + {0.763031, 0}, + {0.782576, 0}, + {0.782576, 0}, + {0.763031, 0}, + {0.775362, 0}, + {0.862449, 0}, + {1.00096, 0}, + {1.10759, 0}, + {1.10759, 0}, + {1.00096, 0}, + {0.862449, 0}, + {0.775362, 5.32872e-18}, + {0.858837, 8.79816e-18}, + {0.899033, 1.85927e-18}, + {0.858837, 1.85927e-18}, + {0.775362, 1.24548e-19}, + {0.72366, -1.61018e-18}, + {0.743927, 1.85927e-18}, + {0.804389, -4.14999e-18}, + {0.836162, 1.24548e-19}, + {0.804389, -1.61018e-18}, + {0.743927, 1.85927e-18}, + {0.72366, 7.86853e-18}, + {1.00712, 0}, + {1.1084, 6.93889e-18}, + {1.1084, 0}, + {1.00712, 0}, + {0.862449, 0}, + {0.743927, -3.46945e-18}, + {0.683306, 0}, + {0.666068, 0}, + {0.666068, 0}, + {0.683306, -3.46945e-18}, + {0.743927, 0}, + {0.862449, 0}, + {1.36223, 0}, + {1.42048, -2.16167e-19}, + {1.36223, 0}, + {1.20632, 0}, + {1.00096, 0}, + {0.804389, 1.08084e-19}, + {0.666068, 0}, + {0.616617, 0}, + {0.666068, 0}, + {0.804389, 1.08084e-19}, + {1.00096, 0}, + {1.20632, 0}, + {1.69928, 0}, + {1.69928, 0}, + {1.59252, 0}, + {1.38444, 0}, + {1.10759, 0}, + {0.836162, 0}, + {0.666068, 0}, + {0.666068, 0}, + {0.836162, 0}, + {1.10759, 0}, + {1.38444, 0}, + {1.59252, 0}, + {1.92793, 2.13894e-17}, + {1.88226, 2.58963e-17}, + {1.7299, 2.58963e-17}, + {1.45645, 2.58963e-17}, + {1.10759, 2.81498e-17}, + {0.804389, 2.58963e-17}, + {0.683306, 2.58963e-17}, + {0.804389, 3.19056e-17}, + {1.10759, 2.81498e-17}, + {1.45645, 2.58963e-17}, + {1.7299, 2.58963e-17}, + {1.88226, 1.9887e-17}, + {2.03322, 0}, + {1.94478, 0}, + {1.7299, 0}, + {1.38444, 0}, + {1.00096, 0}, + {0.743927, 2.4037e-17}, + {0.743927, 0}, + {1.00096, 0}, + {1.38444, 0}, + {1.7299, -2.4037e-17}, + {1.94478, 0}, + {2.03322, 0}, + {2.03322, 0}, + {1.88226, -5.55112e-17}, + {1.59252, 0}, + {1.20632, 0}, + {0.862449, 0}, + {0.72366, 2.77556e-17}, + {0.862449, 0}, + {1.20632, 0}, + {1.59252, 0}, + {1.88226, 2.77556e-17}, + {2.03322, 0}, + {2.07555, 0}, + {1.51507, 0}, + {1.25388, -5.55112e-17}, + {0.981652, 0}, + {0.775362, 0}, + {0.698375, 0}, + {0.775362, 3.22625e-17}, + {0.981652, 0}, + {1.25388, 0}, + {1.51507, 0}, + {1.69928, 2.32486e-17}, + {1.76522, 0}, + {1.69928, 0}, + {1.25388, 0}, + {1.03162, 2.77556e-17}, + {0.85665, 0}, + {0.763031, 0}, + {0.763031, 0}, + {0.85665, -1.38778e-17}, + {1.03162, 0}, + {1.25388, 0}, + {1.46388, 0}, + {1.59252, -1.38778e-17}, + {1.59252, 0}, + {1.46388, 0}, + {0.981652, 0}, + {0.85665, 0}, + {0.797429, 0}, + {0.782576, 0}, + {0.797429, 0}, + {0.85665, 0}, + {0.981652, 0}, + {1.15758, 0}, + {1.31866, 0}, + {1.38444, 0}, + {1.31866, 0}, + {1.15758, 0}, + {0.775362, 0}, + {0.763031, 0}, + {0.782576, 0}, + {0.782576, 0}, + {0.763031, 0}, + {0.775362, 0}, + {0.862449, 0}, + {1.00096, 0}, + {1.10759, 0}, + {1.10759, 0}, + {1.00096, 0}, + {0.862449, 0}, + {0.698375, 0}, + {0.763031, 0}, + {0.797429, 0}, + {0.763031, 0}, + {0.698375, 0}, + {0.679431, 7.51157e-19}, + {0.740598, 0}, + {0.836162, 0}, + {0.881874, 0}, + {0.836162, -7.51157e-19}, + {0.740598, 0}, + {0.679431, 0}, + {0.775362, 0}, + {0.85665, -8.67362e-19}, + {0.85665, 0}, + {0.775362, 0}, + {0.679431, 0}, + {0.639427, 4.33681e-19}, + {0.666068, 0}, + {0.707352, 0}, + {0.707352, 0}, + {0.666068, 4.33681e-19}, + {0.639427, 0}, + {0.679431, 0}, + {0.981652, 0}, + {1.03162, 1.40862e-18}, + {0.981652, 0}, + {0.862449, 0}, + {0.740598, 0}, + {0.666068, 1.13142e-17}, + {0.641509, 0}, + {0.63886, 0}, + {0.641509, 0}, + {0.666068, -1.27228e-17}, + {0.740598, 0}, + {0.862449, 0}, + {1.25388, 0}, + {1.25388, 0}, + {1.15758, 0}, + {1.00096, 0}, + {0.836162, 0}, + {0.707352, -2.4037e-17}, + {0.63886, 0}, + {0.63886, 0}, + {0.707352, 0}, + {0.836162, 2.4037e-17}, + {1.00096, 0}, + {1.15758, 0}, + {1.51507, 0}, + {1.46388, 0}, + {1.31866, 0}, + {1.10759, 0}, + {0.881874, 0}, + {0.707352, 0}, + {0.641509, 0}, + {0.707352, 0}, + {0.881874, 0}, + {1.10759, 0}, + {1.31866, 0}, + {1.46388, 0}, + {1.69928, 0}, + {1.59252, 0}, + {1.38444, 0}, + {1.10759, 0}, + {0.836162, 0}, + {0.666068, 0}, + {0.666068, 0}, + {0.836162, 0}, + {1.10759, 0}, + {1.38444, 0}, + {1.59252, 0}, + {1.69928, 0}, + {1.76522, 0}, + {1.59252, 0}, + {1.31866, 0}, + {1.00096, 0}, + {0.740598, 0}, + {0.639427, 0}, + {0.740598, 0}, + {1.00096, 0}, + {1.31866, 0}, + {1.59252, 0}, + {1.76522, 0}, + {1.82256, 0}, + {1.69928, 0}, + {1.46388, 0}, + {1.15758, 0}, + {0.862449, 0}, + {0.679431, 0}, + {0.679431, 1.20185e-17}, + {0.862449, 0}, + {1.15758, 0}, + {1.46388, 0}, + {1.69928, -1.20185e-17}, + {1.82256, 0}, + {1.82256, 0}, + {1.08798, 1.85927e-18}, + {0.930725, 1.85927e-18}, + {0.824264, 1.85927e-18}, + {0.775362, 1.85927e-18}, + {0.775362, 1.85927e-18}, + {0.824264, 1.85927e-18}, + {0.930725, 1.85927e-18}, + {1.08798, 1.85927e-18}, + {1.25388, 1.85927e-18}, + {1.36223, 1.85927e-18}, + {1.36223, 1.85927e-18}, + {1.25388, 1.85927e-18}, + {0.930725, 1.85927e-18}, + {0.869317, 1.85927e-18}, + {0.85665, 1.57371e-17}, + {0.858837, 1.66044e-17}, + {0.85665, 1.08732e-17}, + {0.869317, 1.38778e-17}, + {0.930725, 6.93889e-18}, + {1.04306, -5.5133e-18}, + {1.15758, -7.15462e-18}, + {1.20632, -1.01592e-17}, + {1.15758, -1.70981e-17}, + {1.04306, -5.5133e-18}, + {0.824264, -1.20185e-17}, + {0.85665, -5.07962e-18}, + {0.899033, -8.54907e-18}, + {0.899033, -1.20185e-17}, + {0.85665, -1.20185e-17}, + {0.824264, -2.14972e-17}, + {0.851575, -1.90113e-17}, + {0.931265, -1.80278e-17}, + {1.00096, -1.20185e-17}, + {1.00096, -9.47871e-18}, + {0.931265, -8.49514e-18}, + {0.851575, -6.00926e-18}, + {0.775362, -5.07962e-18}, + {0.858837, -5.07962e-18}, + {0.899033, -5.07962e-18}, + {0.858837, -1.20185e-17}, + {0.775362, -1.5488e-17}, + {0.72366, -1.5488e-17}, + {0.743927, -2.75065e-17}, + {0.804389, -1.80278e-17}, + {0.836162, -1.5488e-17}, + {0.804389, -1.5488e-17}, + {0.743927, -3.46945e-18}, + {0.72366, -6.00926e-18}, + {0.775362, -1.20185e-17}, + {0.85665, -1.28859e-17}, + {0.85665, -1.89574e-17}, + {0.775362, -1.89574e-17}, + {0.679431, -2.24269e-17}, + {0.639427, -3.40117e-17}, + {0.666068, -1.89574e-17}, + {0.707352, -2.49667e-17}, + {0.707352, -2.24269e-17}, + {0.666068, -9.97466e-18}, + {0.639427, -1.89574e-17}, + {0.679431, -1.29482e-17}, + {0.824264, -1.10889e-17}, + {0.869317, -1.71739e-17}, + {0.824264, -1.45583e-17}, + {0.72366, -2.14972e-17}, + {0.639427, -3.19056e-17}, + {0.616617, -5.29001e-17}, + {0.63886, -4.21894e-17}, + {0.655231, -4.32269e-17}, + {0.63886, -3.19056e-17}, + {0.616617, -4.82604e-18}, + {0.639427, -1.81523e-17}, + {0.72366, -1.01759e-17}, + {0.930725, -1.20185e-17}, + {0.930725, -8.54907e-18}, + {0.851575, -1.20185e-17}, + {0.743927, -1.20185e-17}, + {0.666068, -1.20185e-17}, + {0.63886, -1.37532e-17}, + {0.640151, -1.20185e-17}, + {0.640151, -1.20185e-17}, + {0.63886, -1.20185e-17}, + {0.666068, -1.37532e-17}, + {0.743927, -1.20185e-17}, + {0.851575, -1.20185e-17}, + {1.08798, 1.85927e-18}, + {1.04306, 1.85927e-18}, + {0.931265, -1.20185e-17}, + {0.804389, -1.20185e-17}, + {0.707352, -1.89574e-17}, + {0.655231, -1.89574e-17}, + {0.640151, -2.4037e-17}, + {0.655231, -2.4037e-17}, + {0.707352, -1.89574e-17}, + {0.804389, -1.89574e-17}, + {0.931265, 0}, + {1.04306, 0}, + {1.25388, -1.20185e-17}, + {1.15758, -1.89574e-17}, + {1.00096, -1.89574e-17}, + {0.836162, -1.89574e-17}, + {0.707352, -2.24269e-17}, + {0.63886, -6.93889e-18}, + {0.63886, -2.49667e-17}, + {0.707352, -2.49667e-17}, + {0.836162, -2.24269e-17}, + {1.00096, -3.09759e-17}, + {1.15758, -1.29482e-17}, + {1.25388, -1.29482e-17}, + {1.36223, -1.29482e-17}, + {1.20632, -1.29482e-17}, + {1.00096, -4.07037e-17}, + {0.804389, -1.29482e-17}, + {0.666068, 1.10889e-17}, + {0.616617, -1.29482e-17}, + {0.666068, -1.10889e-17}, + {0.804389, -1.29482e-17}, + {1.00096, -3.69852e-17}, + {1.20632, -1.29482e-17}, + {1.36223, 1.29482e-17}, + {1.42048, -1.29482e-17}, + {1.36223, -1.20185e-17}, + {1.15758, -1.20185e-17}, + {0.931265, -1.20185e-17}, + {0.743927, -1.20185e-17}, + {0.639427, -1.20185e-17}, + {0.639427, -1.20185e-17}, + {0.743927, -1.20185e-17}, + {0.931265, -1.20185e-17}, + {1.15758, -1.20185e-17}, + {1.36223, -1.20185e-17}, + {1.48405, -1.20185e-17}, + {1.48405, -1.20185e-17}, + {1.25388, 1.57371e-17}, + {1.04306, 1.57371e-17}, + {0.851575, -1.20185e-17}, + {0.72366, -1.20185e-17}, + {0.679431, -2.58963e-17}, + {0.72366, -4.09195e-17}, + {0.851575, -2.4037e-17}, + {1.04306, -3.60556e-17}, + {1.25388, -2.58963e-17}, + {1.42048, -1.08732e-17}, + {1.48405, 0}, + {1.42048, 1.20185e-17}, + {0.905261, 0}, + {0.930725, 3.46945e-18}, + {0.981652, 0}, + {1.00712, 0}, + {0.981652, 0}, + {0.930725, -1.73472e-18}, + {0.905261, 0}, + {0.930725, 0}, + {0.981652, 0}, + {1.00712, -1.73472e-18}, + {0.981652, 0}, + {0.930725, 0}, + {0.930725, 0}, + {1.03162, 0}, + {1.1084, 0}, + {1.1084, 1.73472e-18}, + {1.03162, 0}, + {0.930725, -6.00926e-18}, + {0.864823, 0}, + {0.851575, -8.67362e-19}, + {0.862449, 0}, + {0.862449, 6.00926e-18}, + {0.851575, 0}, + {0.864823, -8.67362e-19}, + {0.981652, 0}, + {1.1084, 3.46945e-18}, + {1.16145, 0}, + {1.1084, 0}, + {0.981652, 0}, + {0.851575, -1.73472e-18}, + {0.771224, 0}, + {0.743927, 0}, + {0.740598, 0}, + {0.743927, -1.73472e-18}, + {0.771224, 0}, + {0.851575, 0}, + {1.00712, 0}, + {1.1084, 6.93889e-18}, + {1.1084, 0}, + {1.00712, 0}, + {0.862449, 0}, + {0.743927, -3.46945e-18}, + {0.683306, 0}, + {0.666068, 0}, + {0.666068, 0}, + {0.683306, -3.46945e-18}, + {0.743927, 0}, + {0.862449, 0}, + {0.981652, 0}, + {1.03162, -1.38028e-18}, + {0.981652, 0}, + {0.862449, 0}, + {0.740598, 0}, + {0.666068, 6.90141e-19}, + {0.641509, 0}, + {0.63886, 0}, + {0.641509, 0}, + {0.666068, 6.90141e-19}, + {0.740598, 0}, + {0.862449, 0}, + {0.930725, -8.67362e-18}, + {0.930725, -8.67362e-18}, + {0.851575, -6.93889e-18}, + {0.743927, -6.93889e-18}, + {0.666068, 4.33681e-18}, + {0.63886, 1.63553e-17}, + {0.640151, 9.47871e-18}, + {0.640151, 1.24833e-17}, + {0.63886, 4.33681e-18}, + {0.666068, -7.68171e-18}, + {0.743927, -2.53981e-18}, + {0.851575, -5.54444e-18}, + {0.905261, 0}, + {0.864823, -1.73472e-18}, + {0.771224, 0}, + {0.683306, 0}, + {0.641509, 0}, + {0.640151, 8.67362e-19}, + {0.645833, 0}, + {0.640151, 0}, + {0.641509, 0}, + {0.683306, 8.67362e-19}, + {0.771224, 0}, + {0.864823, 0}, + {0.930725, 0}, + {0.851575, 0}, + {0.743927, 0}, + {0.666068, 0}, + {0.63886, 0}, + {0.640151, 0}, + {0.640151, 0}, + {0.63886, 0}, + {0.666068, 0}, + {0.743927, 0}, + {0.851575, 0}, + {0.930725, 0}, + {0.981652, 0}, + {0.862449, 0}, + {0.740598, 0}, + {0.666068, 0}, + {0.641509, 0}, + {0.63886, 0}, + {0.641509, 0}, + {0.666068, 0}, + {0.740598, 0}, + {0.862449, 0}, + {0.981652, 0}, + {1.03162, 0}, + {1.00712, 1.38778e-17}, + {0.862449, 1.38778e-17}, + {0.743927, 0}, + {0.683306, 0}, + {0.666068, -6.93889e-18}, + {0.666068, -1.29482e-17}, + {0.683306, -1.20185e-17}, + {0.743927, -1.20185e-17}, + {0.862449, -6.93889e-18}, + {1.00712, -9.29636e-19}, + {1.1084, 1.20185e-17}, + {1.1084, 1.20185e-17}, + {0.981652, 0}, + {0.851575, 1.38778e-17}, + {0.771224, 0}, + {0.743927, 0}, + {0.740598, 0}, + {0.743927, -6.93889e-18}, + {0.771224, 0}, + {0.851575, 0}, + {0.981652, 0}, + {1.1084, -6.93889e-18}, + {1.16145, 0}, + {1.1084, 0}, + {0.930725, 0}, + {0.864823, 0}, + {0.851575, 0}, + {0.862449, 0}, + {0.862449, 0}, + {0.851575, 0}, + {0.864823, 0}, + {0.930725, 0}, + {1.03162, 0}, + {1.1084, 0}, + {1.1084, 0}, + {1.03162, 0}, + {1.08798, 0}, + {1.25388, 0}, + {1.36223, 0}, + {1.36223, 0}, + {1.25388, 0}, + {1.08798, 1.20185e-17}, + {0.930725, 0}, + {0.824264, 0}, + {0.775362, 0}, + {0.775362, -1.20185e-17}, + {0.824264, 0}, + {0.930725, 0}, + {1.25388, 2.77556e-17}, + {1.42048, -1.38778e-17}, + {1.48405, -1.38778e-17}, + {1.42048, 0}, + {1.25388, -1.38778e-17}, + {1.04306, 6.93889e-18}, + {0.851575, 3.09759e-17}, + {0.72366, 0}, + {0.679431, -1.38778e-17}, + {0.72366, 6.93889e-18}, + {0.851575, -1.70981e-17}, + {1.04306, 0}, + {1.36223, 0}, + {1.48405, -6.93889e-18}, + {1.48405, 0}, + {1.36223, 0}, + {1.15758, 0}, + {0.931265, 3.46945e-18}, + {0.743927, 0}, + {0.639427, 0}, + {0.639427, 0}, + {0.743927, 3.46945e-18}, + {0.931265, 0}, + {1.15758, 0}, + {1.36223, 0}, + {1.42048, -2.07544e-18}, + {1.36223, 0}, + {1.20632, 0}, + {1.00096, 0}, + {0.804389, 1.03772e-18}, + {0.666068, 0}, + {0.616617, 0}, + {0.666068, 0}, + {0.804389, 1.03772e-18}, + {1.00096, 0}, + {1.20632, 0}, + {1.25388, 0}, + {1.25388, 0}, + {1.15758, 0}, + {1.00096, 0}, + {0.836162, 0}, + {0.707352, 0}, + {0.63886, 0}, + {0.63886, 0}, + {0.707352, 0}, + {0.836162, 0}, + {1.00096, 0}, + {1.15758, 0}, + {1.08798, -4.64818e-19}, + {1.04306, 0}, + {0.931265, 0}, + {0.804389, 0}, + {0.707352, 2.32409e-19}, + {0.655231, 0}, + {0.640151, -6.00926e-18}, + {0.655231, -4.50694e-18}, + {0.707352, 2.32409e-19}, + {0.804389, 0}, + {0.931265, 6.00926e-18}, + {1.04306, 4.50694e-18}, + {0.930725, 0}, + {0.851575, 0}, + {0.743927, 0}, + {0.666068, 0}, + {0.63886, 0}, + {0.640151, 0}, + {0.640151, 0}, + {0.63886, 0}, + {0.666068, 0}, + {0.743927, 0}, + {0.851575, 0}, + {0.930725, 0}, + {0.824264, 0}, + {0.72366, 0}, + {0.639427, 0}, + {0.616617, 0}, + {0.63886, 0}, + {0.655231, -1.50231e-18}, + {0.63886, 0}, + {0.616617, 0}, + {0.639427, 0}, + {0.72366, 1.50231e-18}, + {0.824264, 0}, + {0.869317, 0}, + {0.775362, 0}, + {0.679431, 0}, + {0.639427, 0}, + {0.666068, 0}, + {0.707352, 0}, + {0.707352, 0}, + {0.666068, 0}, + {0.639427, 0}, + {0.679431, 0}, + {0.775362, 0}, + {0.85665, 0}, + {0.85665, 0}, + {0.775362, -6.93889e-18}, + {0.72366, -3.46945e-18}, + {0.743927, 0}, + {0.804389, 0}, + {0.836162, 4.64818e-19}, + {0.804389, 1.73472e-18}, + {0.743927, 0}, + {0.72366, 6.00926e-18}, + {0.775362, 6.47408e-18}, + {0.858837, 1.73472e-18}, + {0.899033, 0}, + {0.858837, -6.00926e-18}, + {0.824264, 0}, + {0.851575, 0}, + {0.931265, 0}, + {1.00096, 0}, + {1.00096, 0}, + {0.931265, 0}, + {0.851575, 0}, + {0.824264, 0}, + {0.85665, 0}, + {0.899033, 0}, + {0.899033, 0}, + {0.85665, 0}, + {0.930725, 0}, + {1.04306, 0}, + {1.15758, 0}, + {1.20632, 0}, + {1.15758, 0}, + {1.04306, 0}, + {0.930725, 0}, + {0.869317, 0}, + {0.85665, 0}, + {0.858837, 0}, + {0.85665, 0}, + {0.869317, 0}, + {1.51507, 0}, + {1.69928, 0}, + {1.76522, 0}, + {1.69928, 0}, + {1.51507, 0}, + {1.25388, -2.4037e-17}, + {0.981652, 0}, + {0.775362, 0}, + {0.698375, 0}, + {0.775362, 2.4037e-17}, + {0.981652, 0}, + {1.25388, 0}, + {1.69928, 0}, + {1.82256, -1.38778e-17}, + {1.82256, 0}, + {1.69928, 0}, + {1.46388, 0}, + {1.15758, -4.11352e-17}, + {0.862449, 0}, + {0.679431, 0}, + {0.679431, 0}, + {0.862449, 5.5013e-17}, + {1.15758, 0}, + {1.46388, 0}, + {1.76522, 0}, + {1.82256, 6.6502e-18}, + {1.76522, 0}, + {1.59252, 0}, + {1.31866, 0}, + {1.00096, -3.3251e-18}, + {0.740598, 0}, + {0.639427, 0}, + {0.740598, 0}, + {1.00096, -3.3251e-18}, + {1.31866, 0}, + {1.59252, 0}, + {1.69928, 0}, + {1.69928, 0}, + {1.59252, 0}, + {1.38444, 0}, + {1.10759, 0}, + {0.836162, 0}, + {0.666068, 0}, + {0.666068, 0}, + {0.836162, 0}, + {1.10759, 0}, + {1.38444, 0}, + {1.59252, 0}, + {1.51507, 0}, + {1.46388, 0}, + {1.31866, 0}, + {1.10759, 0}, + {0.881874, 0}, + {0.707352, 0}, + {0.641509, 0}, + {0.707352, 0}, + {0.881874, 0}, + {1.10759, 0}, + {1.31866, 0}, + {1.46388, 0}, + {1.25388, 1.38778e-17}, + {1.15758, 0}, + {1.00096, 0}, + {0.836162, 2.77556e-17}, + {0.707352, -6.93889e-18}, + {0.63886, -1.20185e-17}, + {0.63886, -6.00926e-18}, + {0.707352, -2.58963e-17}, + {0.836162, -6.93889e-18}, + {1.00096, 1.20185e-17}, + {1.15758, 6.00926e-18}, + {1.25388, -1.85927e-18}, + {0.981652, 0}, + {0.862449, 1.38778e-17}, + {0.740598, 0}, + {0.666068, 0}, + {0.641509, 0}, + {0.63886, -6.93889e-18}, + {0.641509, 0}, + {0.666068, 0}, + {0.740598, 0}, + {0.862449, -6.93889e-18}, + {0.981652, 0}, + {1.03162, 0}, + {0.775362, 0}, + {0.679431, 0}, + {0.639427, 0}, + {0.666068, 0}, + {0.707352, 0}, + {0.707352, 0}, + {0.666068, 0}, + {0.639427, 0}, + {0.679431, 0}, + {0.775362, 0}, + {0.85665, 0}, + {0.85665, 0}, + {0.698375, 0}, + {0.679431, 0}, + {0.740598, 0}, + {0.836162, 0}, + {0.881874, 0}, + {0.836162, -6.00926e-18}, + {0.740598, 0}, + {0.679431, 0}, + {0.698375, 0}, + {0.763031, 6.00926e-18}, + {0.797429, 0}, + {0.763031, 0}, + {0.775362, 0}, + {0.862449, 0}, + {1.00096, 0}, + {1.10759, 0}, + {1.10759, 0}, + {1.00096, 0}, + {0.862449, 0}, + {0.775362, 0}, + {0.763031, 0}, + {0.782576, 0}, + {0.782576, 0}, + {0.763031, 0}, + {0.981652, 0}, + {1.15758, 0}, + {1.31866, 0}, + {1.38444, 0}, + {1.31866, 0}, + {1.15758, 0}, + {0.981652, 0}, + {0.85665, 0}, + {0.797429, 0}, + {0.782576, 0}, + {0.797429, 0}, + {0.85665, 0}, + {1.25388, 0}, + {1.46388, 0}, + {1.59252, 0}, + {1.59252, 0}, + {1.46388, 0}, + {1.25388, 2.4037e-17}, + {1.03162, 0}, + {0.85665, 0}, + {0.763031, 0}, + {0.763031, -2.4037e-17}, + {0.85665, 0}, + {1.03162, 0}, + {1.92793, 1.20185e-17}, + {2.03322, 2.58963e-17}, + {2.03322, 3.97741e-17}, + {1.92793, 1.20185e-17}, + {1.69928, 3.60556e-17}, + {1.36223, 5.07962e-18}, + {1.00712, -1.85927e-18}, + {0.775362, 1.20185e-17}, + {0.775362, -1.20185e-17}, + {1.00712, 5.07962e-18}, + {1.36223, -1.85927e-18}, + {1.69928, 1.20185e-17}, + {2.03322, 2.41616e-17}, + {2.07555, 2.2009e-17}, + {2.03322, 7.96727e-17}, + {1.88226, 1.35184e-16}, + {1.59252, 2.41616e-17}, + {1.20632, 2.52379e-17}, + {0.862449, 4.44801e-17}, + {0.72366, -3.13496e-17}, + {0.862449, 2.41616e-17}, + {1.20632, 2.52379e-17}, + {1.59252, -5.16681e-17}, + {1.88226, -3.13496e-17}, + {2.03322, 3.97741e-17}, + {2.03322, 2.58963e-17}, + {1.94478, 3.97741e-17}, + {1.7299, 3.97741e-17}, + {1.38444, 3.97741e-17}, + {1.00096, 4.6713e-17}, + {0.743927, 3.97741e-17}, + {0.743927, 3.97741e-17}, + {1.00096, 3.97741e-17}, + {1.38444, 4.6713e-17}, + {1.7299, 3.97741e-17}, + {1.94478, 3.97741e-17}, + {1.92793, 3.97741e-17}, + {1.88226, 1.20185e-17}, + {1.7299, 3.97741e-17}, + {1.45645, 3.97741e-17}, + {1.10759, 3.97741e-17}, + {0.804389, 5.36519e-17}, + {0.683306, 3.97741e-17}, + {0.804389, 3.97741e-17}, + {1.10759, 3.97741e-17}, + {1.45645, 5.36519e-17}, + {1.7299, 3.97741e-17}, + {1.88226, 3.97741e-17}, + {1.69928, 3.60556e-17}, + {1.59252, 6.38111e-17}, + {1.38444, 3.60556e-17}, + {1.10759, 3.60556e-17}, + {0.836162, 3.60556e-17}, + {0.666068, 2.21778e-17}, + {0.666068, 3.60556e-17}, + {0.836162, 3.60556e-17}, + {1.10759, 3.60556e-17}, + {1.38444, 2.21778e-17}, + {1.59252, 3.60556e-17}, + {1.69928, 3.60556e-17}, + {1.36223, 7.16174e-17}, + {1.20632, 8.54952e-17}, + {1.00096, 8.54952e-17}, + {0.804389, 5.77396e-17}, + {0.666068, 3.32044e-17}, + {0.616617, 1.4247e-17}, + {0.666068, -3.75829e-17}, + {0.804389, -3.19678e-17}, + {1.00096, -1.48697e-17}, + {1.20632, -9.79007e-18}, + {1.36223, 4.20398e-17}, + {1.42048, 6.41803e-17}, + {1.00712, 2.21778e-17}, + {0.862449, 3.60556e-17}, + {0.743927, 4.99333e-17}, + {0.683306, 4.99333e-17}, + {0.666068, 4.62148e-17}, + {0.666068, 3.4769e-17}, + {0.683306, 2.03185e-17}, + {0.743927, 8.29997e-18}, + {0.862449, -1.85927e-18}, + {1.00712, -4.29122e-18}, + {1.1084, -3.71854e-18}, + {1.1084, 8.29997e-18}, + {0.775362, -1.85927e-18}, + {0.72366, 1.20185e-17}, + {0.743927, 1.89574e-17}, + {0.804389, 2.58963e-17}, + {0.836162, 2.21778e-17}, + {0.804389, 1.52389e-17}, + {0.743927, -2.49095e-19}, + {0.72366, -1.57371e-17}, + {0.775362, -2.58963e-17}, + {0.858837, -3.28352e-17}, + {0.899033, -2.42861e-17}, + {0.858837, -1.57371e-17}, + {0.775362, -1.20185e-17}, + {0.862449, 1.85927e-18}, + {1.00096, 1.22676e-17}, + {1.10759, 1.57371e-17}, + {1.10759, 1.20185e-17}, + {1.00096, 2.07499e-18}, + {0.862449, -1.21431e-17}, + {0.775362, -2.58963e-17}, + {0.763031, -3.60556e-17}, + {0.782576, -3.99898e-17}, + {0.782576, -3.61801e-17}, + {0.763031, -2.58963e-17}, + {1.00712, -7.36012e-17}, + {1.20632, -7.36012e-17}, + {1.38444, -1.809e-17}, + {1.45645, 1.14003e-17}, + {1.38444, 3.67072e-17}, + {1.20632, 5.77396e-17}, + {1.00712, 2.9984e-17}, + {0.858837, 1.52389e-17}, + {0.782576, -1.73761e-17}, + {0.761485, -3.84085e-17}, + {0.782576, -6.61641e-17}, + {0.858837, -8.09093e-17}, + {1.36223, -2.58963e-17}, + {1.59252, 1.85927e-18}, + {1.7299, 1.85927e-18}, + {1.7299, 1.85927e-18}, + {1.59252, -1.85927e-18}, + {1.36223, -1.57371e-17}, + {1.1084, -1.57371e-17}, + {0.899033, -3.97741e-17}, + {0.782576, -4.99333e-17}, + {0.782576, -6.38111e-17}, + {0.899033, -6.38111e-17}, + {1.1084, -3.97741e-17}, + {1.69928, -1.85927e-18}, + {1.88226, 2.58963e-17}, + {1.94478, 1.20185e-17}, + {1.88226, 2.58963e-17}, + {1.69928, 2.21778e-17}, + {1.42048, 8.29997e-18}, + {1.1084, -8.79816e-18}, + {0.858837, -1.57371e-17}, + {0.763031, -2.58963e-17}, + {0.858837, -3.97741e-17}, + {1.1084, -8.79816e-18}, + {1.42048, -1.57371e-17}, + {2.14383, 0}, + {2.16623, -3.54439e-19}, + {2.14383, 0}, + {2.03322, 0}, + {1.76522, 0}, + {1.36223, 1.77219e-19}, + {0.981652, 0}, + {0.824264, 0}, + {0.981652, 0}, + {1.36223, 1.77219e-19}, + {1.76522, 0}, + {2.03322, 0}, + {2.16623, -6.93889e-18}, + {2.16623, -6.93889e-18}, + {2.11997, -6.93889e-18}, + {1.94478, -6.93889e-18}, + {1.59252, -6.93889e-18}, + {1.15758, -6.93889e-18}, + {0.851575, 1.70981e-17}, + {0.851575, -6.93889e-18}, + {1.15758, -6.93889e-18}, + {1.59252, -6.93889e-18}, + {1.94478, -3.09759e-17}, + {2.11997, -6.93889e-18}, + {2.14383, 0}, + {2.11997, 0}, + {2.00496, 0}, + {1.7299, 0}, + {1.31866, 0}, + {0.931265, 4.80741e-17}, + {0.771224, 0}, + {0.931265, 0}, + {1.31866, 0}, + {1.7299, -4.80741e-17}, + {2.00496, 0}, + {2.11997, 0}, + {2.03322, 0}, + {1.94478, 0}, + {1.7299, 0}, + {1.38444, 0}, + {1.00096, 0}, + {0.743927, 0}, + {0.743927, 0}, + {1.00096, 0}, + {1.38444, 0}, + {1.7299, 0}, + {1.94478, 0}, + {2.03322, 0}, + {1.76522, 0}, + {1.59252, 5.55112e-17}, + {1.31866, 0}, + {1.00096, 0}, + {0.740598, 0}, + {0.639427, -2.77556e-17}, + {0.740598, 0}, + {1.00096, 0}, + {1.31866, 0}, + {1.59252, -2.77556e-17}, + {1.76522, 0}, + {1.82256, 0}, + {1.36223, 3.46945e-18}, + {1.15758, 3.1225e-17}, + {0.931265, 3.1225e-17}, + {0.743927, 3.1225e-17}, + {0.639427, 2.75065e-17}, + {0.639427, 1.36287e-17}, + {0.743927, 1.61018e-18}, + {0.931265, -1.04083e-17}, + {1.15758, -2.05676e-17}, + {1.36223, -3.44454e-17}, + {1.48405, -2.24269e-17}, + {1.48405, -1.04083e-17}, + {0.981652, 0}, + {0.851575, 1.38778e-17}, + {0.771224, 0}, + {0.743927, 0}, + {0.740598, 0}, + {0.743927, -6.93889e-18}, + {0.771224, 0}, + {0.851575, 0}, + {0.981652, 0}, + {1.1084, -6.93889e-18}, + {1.16145, 0}, + {1.1084, 0}, + {0.824264, 0}, + {0.851575, 0}, + {0.931265, 0}, + {1.00096, 0}, + {1.00096, 0}, + {0.931265, 0}, + {0.851575, 0}, + {0.824264, 0}, + {0.85665, 0}, + {0.899033, 0}, + {0.899033, 0}, + {0.85665, 0}, + {0.981652, 0}, + {1.15758, 0}, + {1.31866, 0}, + {1.38444, 0}, + {1.31866, 0}, + {1.15758, 0}, + {0.981652, 0}, + {0.85665, 0}, + {0.797429, 0}, + {0.782576, 0}, + {0.797429, 0}, + {0.85665, 0}, + {1.36223, 3.1225e-17}, + {1.59252, 3.1225e-17}, + {1.7299, 1.73472e-17}, + {1.7299, -3.46945e-18}, + {1.59252, -1.04083e-17}, + {1.36223, -1.04083e-17}, + {1.1084, -2.75065e-17}, + {0.899033, -1.70981e-17}, + {0.782576, -1.04083e-17}, + {0.782576, -1.04083e-17}, + {0.899033, 2.05676e-17}, + {1.1084, 3.09759e-17}, + {1.76522, 0}, + {1.94478, 2.77556e-17}, + {2.00496, 0}, + {1.94478, 0}, + {1.76522, 0}, + {1.48405, -1.38778e-17}, + {1.16145, 0}, + {0.899033, 0}, + {0.797429, 0}, + {0.899033, -1.38778e-17}, + {1.16145, 0}, + {1.48405, 0}, + {2.03322, 0}, + {2.11997, 1.38778e-17}, + {2.11997, 0}, + {2.03322, 0}, + {1.82256, 0}, + {1.48405, -6.93889e-18}, + {1.1084, 0}, + {0.85665, 0}, + {0.85665, 0}, + {1.1084, -6.93889e-18}, + {1.48405, 0}, + {1.82256, 0}, + {2.17701, 0}, + {2.17701, 0}, + {2.16623, 0}, + {2.03322, 0}, + {1.69928, 0}, + {1.25388, 0}, + {0.930725, 0}, + {0.930725, 0}, + {1.25388, 0}, + {1.69928, 0}, + {2.03322, 0}, + {2.16623, 0}, + {2.17701, -5.20417e-18}, + {2.17945, -2.77556e-17}, + {2.11997, 0}, + {1.88226, 0}, + {1.46388, 2.60209e-18}, + {1.04306, -1.01592e-17}, + {0.864823, 0}, + {1.04306, 1.20185e-17}, + {1.46388, 2.60209e-18}, + {1.88226, 3.79148e-17}, + {2.11997, 0}, + {2.17945, -1.20185e-17}, + {2.16623, 0}, + {2.11997, 0}, + {1.94478, 0}, + {1.59252, 0}, + {1.15758, 0}, + {0.851575, 0}, + {0.851575, 0}, + {1.15758, 0}, + {1.59252, 0}, + {1.94478, 0}, + {2.11997, 0}, + {2.16623, 0}, + {2.03322, 0}, + {1.88226, 0}, + {1.59252, 0}, + {1.20632, 0}, + {0.862449, 0}, + {0.72366, 2.4037e-17}, + {0.862449, 0}, + {1.20632, 0}, + {1.59252, 0}, + {1.88226, -2.4037e-17}, + {2.03322, 0}, + {2.07555, 0}, + {1.69928, 0}, + {1.46388, 0}, + {1.15758, 0}, + {0.862449, 0}, + {0.679431, 0}, + {0.679431, -1.20185e-17}, + {0.862449, 0}, + {1.15758, 0}, + {1.46388, 0}, + {1.69928, 1.20185e-17}, + {1.82256, 0}, + {1.82256, 0}, + {1.25388, 0}, + {1.04306, 0}, + {0.851575, 0}, + {0.72366, 0}, + {0.679431, 0}, + {0.72366, 1.50231e-18}, + {0.851575, 0}, + {1.04306, 0}, + {1.25388, 0}, + {1.42048, -1.50231e-18}, + {1.48405, 0}, + {1.42048, 0}, + {0.930725, 0}, + {0.864823, 0}, + {0.851575, 0}, + {0.862449, 0}, + {0.862449, 0}, + {0.851575, 0}, + {0.864823, 0}, + {0.930725, 0}, + {1.03162, 0}, + {1.1084, 0}, + {1.1084, 0}, + {1.03162, 0}, + {0.930725, 0}, + {1.04306, 0}, + {1.15758, 0}, + {1.20632, 0}, + {1.15758, 0}, + {1.04306, 0}, + {0.930725, 0}, + {0.869317, 0}, + {0.85665, 0}, + {0.858837, 0}, + {0.85665, 0}, + {0.869317, 0}, + {1.25388, 0}, + {1.46388, 0}, + {1.59252, 0}, + {1.59252, 0}, + {1.46388, 0}, + {1.25388, 0}, + {1.03162, 0}, + {0.85665, 0}, + {0.763031, 0}, + {0.763031, 0}, + {0.85665, 0}, + {1.03162, 0}, + {1.69928, 0}, + {1.88226, 2.77556e-17}, + {1.94478, 0}, + {1.88226, 0}, + {1.69928, 0}, + {1.42048, -1.38778e-17}, + {1.1084, 0}, + {0.858837, 0}, + {0.763031, 0}, + {0.858837, -1.38778e-17}, + {1.1084, 0}, + {1.42048, 0}, + {2.03322, 0}, + {2.11997, 0}, + {2.11997, 0}, + {2.03322, 0}, + {1.82256, 0}, + {1.48405, 0}, + {1.1084, 0}, + {0.85665, 0}, + {0.85665, 0}, + {1.1084, 0}, + {1.48405, 0}, + {1.82256, 0}, + {2.16623, 0}, + {2.17945, 5.846e-18}, + {2.16623, 0}, + {2.07555, 0}, + {1.82256, 0}, + {1.42048, -2.923e-18}, + {1.03162, 0}, + {0.869317, 0}, + {1.03162, 0}, + {1.42048, -2.923e-18}, + {1.82256, 0}, + {2.07555, 0}}; + const std::vector> in_3 = {{-1922.64, 0}, + {-1001.68, 433.439}, + {-219.942, 33.69}, + {-68.6663, -31.5682}, + {-19.01, -3.81031}, + {-0.58927, -0.511793}, + {0.996488, -7.89357e-17}, + {-0.58927, 0.511793}, + {-19.01, 3.81031}, + {-68.6663, 31.5682}, + {-219.942, -33.69}, + {-1001.68, -433.439}, + {-1001.68, 433.439}, + {-517.273, 5.9508e-14}, + {-352.926, -115.37}, + {-141.346, -11.6655}, + {-25.4876, 7.80357}, + {-0.501786, 1.37769}, + {1.08582, -0.0715093}, + {0.894073, 0.768163}, + {-2.92014, 2.09061}, + {-25.1033, -5.63667}, + {-174.402, -55.7416}, + {-690.893, -8.6513e-15}, + {-219.942, 33.69}, + {-352.926, -115.37}, + {-281.447, 7.54952e-14}, + {-85.5703, 25.4729}, + {-13.6457, 2.44125}, + {0.99011, 1.07155}, + {0.910811, -0.175105}, + {0.653152, -0.025503}, + {0.169545, -0.652296}, + {-11.7051, -3.59868}, + {-72.4614, -2.89031e-14}, + {-174.402, 55.7416}, + {-68.6663, -31.5682}, + {-141.346, -11.6655}, + {-85.5703, 25.4729}, + {-28.2549, -3.81917e-14}, + {-9.75792, -2.71861}, + {1.33155, -0.16363}, + {0.66818, -0.0435261}, + {0.136765, 0.00586452}, + {0.71571, -0.0128863}, + {1.26225, -4.03935e-14}, + {-11.7051, 3.59868}, + {-25.1033, 5.63667}, + {-19.01, -3.81031}, + {-25.4876, 7.80357}, + {-13.6457, 2.44125}, + {-9.75792, -2.71861}, + {1.25751, 1.30778e-15}, + {1.13756, -0.487619}, + {0.344756, -0.0047045}, + {0.187321, 0.0707209}, + {0.272653, -2.48445e-14}, + {0.71571, 0.0128863}, + {0.169545, 0.652296}, + {-2.92014, -2.09061}, + {-0.58927, -0.511793}, + {-0.501786, 1.37769}, + {0.99011, 1.07155}, + {1.33155, -0.16363}, + {1.13756, -0.487619}, + {0.536417, -2.98492e-14}, + {0.198078, 0.0681101}, + {0.245083, -9.7141e-15}, + {0.187321, -0.0707209}, + {0.136765, -0.00586452}, + {0.653152, 0.025503}, + {0.894073, -0.768163}, + {0.996488, -5.0257e-15}, + {1.08582, -0.0715093}, + {0.910811, -0.175105}, + {0.66818, -0.0435261}, + {0.344756, -0.0047045}, + {0.198078, 0.0681101}, + {0.256446, -1.4581e-15}, + {0.198078, -0.0681101}, + {0.344756, 0.0047045}, + {0.66818, 0.0435261}, + {0.910811, 0.175105}, + {1.08582, 0.0715093}, + {-0.58927, 0.511793}, + {0.894073, 0.768163}, + {0.653152, -0.025503}, + {0.136765, 0.00586452}, + {0.187321, 0.0707209}, + {0.245083, -9.70357e-15}, + {0.198078, -0.0681101}, + {0.536417, 2.82968e-14}, + {1.13756, 0.487619}, + {1.33155, 0.16363}, + {0.99011, -1.07155}, + {-0.501786, -1.37769}, + {-19.01, 3.81031}, + {-2.92014, 2.09061}, + {0.169545, -0.652296}, + {0.71571, -0.0128863}, + {0.272653, 2.48445e-14}, + {0.187321, -0.0707209}, + {0.344756, 0.0047045}, + {1.13756, 0.487619}, + {1.25751, -1.30778e-15}, + {-9.75792, 2.71861}, + {-13.6457, -2.44125}, + {-25.4876, -7.80357}, + {-68.6663, 31.5682}, + {-25.1033, -5.63667}, + {-11.7051, -3.59868}, + {1.26225, 6.30607e-14}, + {0.71571, 0.0128863}, + {0.136765, -0.00586452}, + {0.66818, 0.0435261}, + {1.33155, 0.16363}, + {-9.75792, 2.71861}, + {-28.2549, 2.77768e-14}, + {-85.5703, -25.4729}, + {-141.346, 11.6655}, + {-219.942, -33.69}, + {-174.402, -55.7416}, + {-72.4614, -7.99361e-15}, + {-11.7051, 3.59868}, + {0.169545, 0.652296}, + {0.653152, 0.025503}, + {0.910811, 0.175105}, + {0.99011, -1.07155}, + {-13.6457, -2.44125}, + {-85.5703, -25.4729}, + {-281.447, -5.40755e-14}, + {-352.926, 115.37}, + {-1001.68, -433.439}, + {-690.893, 1.06581e-14}, + {-174.402, 55.7416}, + {-25.1033, 5.63667}, + {-2.92014, -2.09061}, + {0.894073, -0.768163}, + {1.08582, 0.0715093}, + {-0.501786, -1.37769}, + {-25.4876, -7.80357}, + {-141.346, 11.6655}, + {-352.926, 115.37}, + {-517.273, -3.16493e-14}, + {-1001.68, 433.439}, + {-517.273, 7.54952e-14}, + {-352.926, -115.37}, + {-141.346, -11.6655}, + {-25.4876, 7.80357}, + {-0.501786, 1.37769}, + {1.08582, -0.0715093}, + {0.894073, 0.768163}, + {-2.92014, 2.09061}, + {-25.1033, -5.63667}, + {-174.402, -55.7416}, + {-690.893, 1.97704e-14}, + {-517.273, 2.84217e-14}, + {-1001.68, -433.439}, + {-690.893, -4.9738e-14}, + {-174.402, 55.7416}, + {-25.1033, 5.63667}, + {-2.92014, -2.09061}, + {0.894073, -0.768163}, + {1.08582, 0.0715093}, + {-0.501786, -1.37769}, + {-25.4876, -7.80357}, + {-141.346, 11.6655}, + {-352.926, 115.37}, + {-352.926, -115.37}, + {-690.893, -2.4841e-14}, + {-352.926, 115.37}, + {-100.781, 4.56302e-14}, + {-39.4244, -13.5375}, + {-8.79435, -1.30817}, + {0.157364, -0.195195}, + {0.548415, 3.66208e-14}, + {0.157364, 0.195195}, + {-8.79435, 1.30817}, + {-39.4244, 13.5375}, + {-100.781, 1.20069e-14}, + {-141.346, -11.6655}, + {-174.402, 55.7416}, + {-100.781, 5.10703e-14}, + {-85.5703, -25.4729}, + {-36.1195, 2.5003e-14}, + {-5.30025, 1.65834}, + {0.642398, 0.553017}, + {0.422501, 0.0375059}, + {0.608177, 0.0924076}, + {0.984075, -0.568373}, + {-6.57219, -1.46426e-14}, + {-39.4244, -13.5375}, + {-25.4876, 7.80357}, + {-25.1033, 5.63667}, + {-39.4244, -13.5375}, + {-36.1195, 1.14353e-14}, + {-9.75792, 2.71861}, + {-0.90306, 1.82384e-14}, + {0.856068, 0.244528}, + {0.331794, -0.0443841}, + {0.197596, -0.0729406}, + {0.718888, -1.86825e-14}, + {0.984075, 0.568373}, + {-8.79435, -1.30817}, + {-0.501786, 1.37769}, + {-2.92014, -2.09061}, + {-8.79435, -1.30817}, + {-5.30025, 1.65834}, + {-0.90306, 6.65646e-14}, + {1.13756, 0.487619}, + {0.609244, 2.33578e-14}, + {0.183862, -0.0625824}, + {0.116983, -1.51613e-14}, + {0.197596, 0.0729406}, + {0.608177, -0.0924076}, + {0.157364, -0.195195}, + {1.08582, -0.0715093}, + {0.894073, -0.768163}, + {0.157364, -0.195195}, + {0.642398, 0.553017}, + {0.856068, 0.244528}, + {0.609244, -1.08488e-14}, + {0.198078, -0.0681101}, + {0.119232, -2.82893e-14}, + {0.183862, 0.0625824}, + {0.331794, 0.0443841}, + {0.422501, -0.0375059}, + {0.548415, -1.3122e-14}, + {0.894073, 0.768163}, + {1.08582, 0.0715093}, + {0.548415, 5.96745e-15}, + {0.422501, 0.0375059}, + {0.331794, -0.0443841}, + {0.183862, -0.0625824}, + {0.119232, -5.39905e-15}, + {0.198078, 0.0681101}, + {0.609244, 1.71134e-16}, + {0.856068, -0.244528}, + {0.642398, -0.553017}, + {0.157364, 0.195195}, + {-2.92014, 2.09061}, + {-0.501786, -1.37769}, + {0.157364, 0.195195}, + {0.608177, 0.0924076}, + {0.197596, -0.0729406}, + {0.116983, 1.40688e-14}, + {0.183862, 0.0625824}, + {0.609244, -5.18358e-15}, + {1.13756, -0.487619}, + {-0.90306, -2.30043e-15}, + {-5.30025, -1.65834}, + {-8.79435, 1.30817}, + {-25.1033, -5.63667}, + {-25.4876, -7.80357}, + {-8.79435, 1.30817}, + {0.984075, -0.568373}, + {0.718888, -3.72397e-14}, + {0.197596, 0.0729406}, + {0.331794, 0.0443841}, + {0.856068, -0.244528}, + {-0.90306, -2.49328e-14}, + {-9.75792, -2.71861}, + {-36.1195, -2.84933e-14}, + {-39.4244, 13.5375}, + {-174.402, -55.7416}, + {-141.346, 11.6655}, + {-39.4244, 13.5375}, + {-6.57219, -3.10862e-15}, + {0.984075, 0.568373}, + {0.608177, -0.0924076}, + {0.422501, -0.0375059}, + {0.642398, -0.553017}, + {-5.30025, -1.65834}, + {-36.1195, -1.1744e-14}, + {-85.5703, 25.4729}, + {-100.781, -5.24575e-15}, + {-690.893, -1.64069e-14}, + {-352.926, 115.37}, + {-100.781, 4.28486e-15}, + {-39.4244, -13.5375}, + {-8.79435, -1.30817}, + {0.157364, -0.195195}, + {0.548415, -2.47213e-15}, + {0.157364, 0.195195}, + {-8.79435, 1.30817}, + {-39.4244, 13.5375}, + {-100.781, -2.09326e-14}, + {-352.926, -115.37}, + {-219.942, 33.69}, + {-352.926, -115.37}, + {-281.447, -2.30926e-14}, + {-85.5703, 25.4729}, + {-13.6457, 2.44125}, + {0.99011, 1.07155}, + {0.910811, -0.175105}, + {0.653152, -0.025503}, + {0.169545, -0.652296}, + {-11.7051, -3.59868}, + {-72.4614, -2.45898e-14}, + {-174.402, 55.7416}, + {-352.926, -115.37}, + {-690.893, -6.4928e-14}, + {-352.926, 115.37}, + {-100.781, 3.07079e-14}, + {-39.4244, -13.5375}, + {-8.79435, -1.30817}, + {0.157364, -0.195195}, + {0.548415, 3.23816e-15}, + {0.157364, 0.195195}, + {-8.79435, 1.30817}, + {-39.4244, 13.5375}, + {-100.781, 1.55451e-14}, + {-281.447, -4.17444e-14}, + {-352.926, 115.37}, + {-219.942, -33.69}, + {-174.402, -55.7416}, + {-72.4614, 6.06555e-15}, + {-11.7051, 3.59868}, + {0.169545, 0.652296}, + {0.653152, 0.025503}, + {0.910811, 0.175105}, + {0.99011, -1.07155}, + {-13.6457, -2.44125}, + {-85.5703, -25.4729}, + {-85.5703, 25.4729}, + {-100.781, 3.55271e-15}, + {-174.402, -55.7416}, + {-141.346, 11.6655}, + {-39.4244, 13.5375}, + {-6.57219, -3.34301e-15}, + {0.984075, 0.568373}, + {0.608177, -0.0924076}, + {0.422501, -0.0375059}, + {0.642398, -0.553017}, + {-5.30025, -1.65834}, + {-36.1195, -1.78338e-14}, + {-13.6457, 2.44125}, + {-39.4244, -13.5375}, + {-72.4614, -5.77808e-15}, + {-39.4244, 13.5375}, + {-13.6457, -2.44125}, + {-5.30025, -1.65834}, + {1.10754, 3.09516e-15}, + {0.438213, -0.0482423}, + {0.123572, -2.49539e-14}, + {0.438213, 0.0482423}, + {1.10754, 2.15556e-14}, + {-5.30025, 1.65834}, + {0.99011, 1.07155}, + {-8.79435, -1.30817}, + {-11.7051, 3.59868}, + {-6.57219, -5.10703e-15}, + {-5.30025, -1.65834}, + {1.33155, 0.16363}, + {0.856068, -0.244528}, + {0.234236, -8.58421e-15}, + {0.175034, 0.0639427}, + {0.247817, -1.38739e-14}, + {0.438213, -0.0482423}, + {0.642398, 0.553017}, + {0.910811, -0.175105}, + {0.157364, -0.195195}, + {0.169545, 0.652296}, + {0.984075, 0.568373}, + {1.10754, 2.34291e-14}, + {0.856068, -0.244528}, + {0.344756, 0.0047045}, + {0.183862, 0.0625824}, + {0.22958, 1.50402e-14}, + {0.175034, -0.0639427}, + {0.123572, -1.0726e-14}, + {0.422501, 0.0375059}, + {0.653152, -0.025503}, + {0.548415, -2.20767e-15}, + {0.653152, 0.025503}, + {0.608177, -0.0924076}, + {0.438213, -0.0482423}, + {0.234236, 2.35693e-14}, + {0.183862, 0.0625824}, + {0.245083, -5.32172e-15}, + {0.183862, -0.0625824}, + {0.234236, -1.68369e-14}, + {0.438213, 0.0482423}, + {0.608177, 0.0924076}, + {0.169545, -0.652296}, + {0.157364, 0.195195}, + {0.910811, 0.175105}, + {0.422501, -0.0375059}, + {0.123572, 1.25992e-14}, + {0.175034, 0.0639427}, + {0.22958, -2.41685e-15}, + {0.183862, -0.0625824}, + {0.344756, -0.0047045}, + {0.856068, 0.244528}, + {1.10754, 1.86174e-15}, + {0.984075, -0.568373}, + {-11.7051, -3.59868}, + {-8.79435, 1.30817}, + {0.99011, -1.07155}, + {0.642398, -0.553017}, + {0.438213, 0.0482423}, + {0.247817, 1.27324e-14}, + {0.175034, -0.0639427}, + {0.234236, -1.14132e-14}, + {0.856068, 0.244528}, + {1.33155, -0.16363}, + {-5.30025, 1.65834}, + {-6.57219, -1.79842e-15}, + {-72.4614, 1.40308e-14}, + {-39.4244, 13.5375}, + {-13.6457, -2.44125}, + {-5.30025, -1.65834}, + {1.10754, 2.81848e-17}, + {0.438213, -0.0482423}, + {0.123572, 4.57785e-15}, + {0.438213, 0.0482423}, + {1.10754, -6.1253e-15}, + {-5.30025, 1.65834}, + {-13.6457, 2.44125}, + {-39.4244, -13.5375}, + {-174.402, 55.7416}, + {-100.781, 1.86517e-14}, + {-85.5703, -25.4729}, + {-36.1195, 3.01981e-14}, + {-5.30025, 1.65834}, + {0.642398, 0.553017}, + {0.422501, 0.0375059}, + {0.608177, 0.0924076}, + {0.984075, -0.568373}, + {-6.57219, -5.76082e-15}, + {-39.4244, -13.5375}, + {-141.346, -11.6655}, + {-68.6663, -31.5682}, + {-141.346, -11.6655}, + {-85.5703, 25.4729}, + {-28.2549, 4.44089e-15}, + {-9.75792, -2.71861}, + {1.33155, -0.16363}, + {0.66818, -0.0435261}, + {0.136765, 0.00586452}, + {0.71571, -0.0128863}, + {1.26225, -1.09583e-14}, + {-11.7051, 3.59868}, + {-25.1033, 5.63667}, + {-141.346, -11.6655}, + {-174.402, 55.7416}, + {-100.781, 9.10383e-15}, + {-85.5703, -25.4729}, + {-36.1195, -8.23997e-15}, + {-5.30025, 1.65834}, + {0.642398, 0.553017}, + {0.422501, 0.0375059}, + {0.608177, 0.0924076}, + {0.984075, -0.568373}, + {-6.57219, -6.49073e-15}, + {-39.4244, -13.5375}, + {-85.5703, 25.4729}, + {-100.781, 1.24345e-14}, + {-174.402, -55.7416}, + {-141.346, 11.6655}, + {-39.4244, 13.5375}, + {-6.57219, 2.87424e-15}, + {0.984075, 0.568373}, + {0.608177, -0.0924076}, + {0.422501, -0.0375059}, + {0.642398, -0.553017}, + {-5.30025, -1.65834}, + {-36.1195, 3.06972e-14}, + {-28.2549, -9.32587e-15}, + {-85.5703, -25.4729}, + {-141.346, 11.6655}, + {-68.6663, 31.5682}, + {-25.1033, -5.63667}, + {-11.7051, -3.59868}, + {1.26225, 9.24574e-15}, + {0.71571, 0.0128863}, + {0.136765, -0.00586452}, + {0.66818, 0.0435261}, + {1.33155, 0.16363}, + {-9.75792, 2.71861}, + {-9.75792, -2.71861}, + {-36.1195, -5.77316e-15}, + {-39.4244, 13.5375}, + {-25.1033, -5.63667}, + {-25.4876, -7.80357}, + {-8.79435, 1.30817}, + {0.984075, -0.568373}, + {0.718888, -6.50192e-16}, + {0.197596, 0.0729406}, + {0.331794, 0.0443841}, + {0.856068, -0.244528}, + {-0.90306, 2.42655e-15}, + {1.33155, -0.16363}, + {-5.30025, 1.65834}, + {-6.57219, 5.16254e-15}, + {-11.7051, -3.59868}, + {-8.79435, 1.30817}, + {0.99011, -1.07155}, + {0.642398, -0.553017}, + {0.438213, 0.0482423}, + {0.247817, -3.29037e-15}, + {0.175034, -0.0639427}, + {0.234236, 7.12867e-15}, + {0.856068, 0.244528}, + {0.66818, -0.0435261}, + {0.642398, 0.553017}, + {0.984075, 0.568373}, + {1.26225, 6.85556e-15}, + {0.984075, -0.568373}, + {0.642398, -0.553017}, + {0.66818, 0.0435261}, + {0.331794, 0.0443841}, + {0.175034, -0.0639427}, + {0.110194, 2.47264e-15}, + {0.175034, 0.0639427}, + {0.331794, -0.0443841}, + {0.136765, 0.00586452}, + {0.422501, 0.0375059}, + {0.608177, -0.0924076}, + {0.71571, 0.0128863}, + {0.718888, -7.88276e-15}, + {0.438213, 0.0482423}, + {0.331794, 0.0443841}, + {0.187321, -0.0707209}, + {0.116983, 4.30402e-15}, + {0.175034, 0.0639427}, + {0.247817, 1.06916e-14}, + {0.197596, -0.0729406}, + {0.71571, -0.0128863}, + {0.608177, 0.0924076}, + {0.422501, -0.0375059}, + {0.136765, -0.00586452}, + {0.197596, 0.0729406}, + {0.247817, 1.63574e-14}, + {0.175034, -0.0639427}, + {0.116983, -5.83814e-16}, + {0.187321, 0.0707209}, + {0.331794, -0.0443841}, + {0.438213, -0.0482423}, + {0.718888, 5.76196e-15}, + {1.26225, -5.32052e-16}, + {0.984075, -0.568373}, + {0.642398, -0.553017}, + {0.66818, 0.0435261}, + {0.331794, 0.0443841}, + {0.175034, -0.0639427}, + {0.110194, -5.31886e-16}, + {0.175034, 0.0639427}, + {0.331794, -0.0443841}, + {0.66818, -0.0435261}, + {0.642398, 0.553017}, + {0.984075, 0.568373}, + {-11.7051, 3.59868}, + {-6.57219, 9.99201e-16}, + {-5.30025, -1.65834}, + {1.33155, 0.16363}, + {0.856068, -0.244528}, + {0.234236, 8.80874e-16}, + {0.175034, 0.0639427}, + {0.247817, 2.06115e-15}, + {0.438213, -0.0482423}, + {0.642398, 0.553017}, + {0.99011, 1.07155}, + {-8.79435, -1.30817}, + {-25.1033, 5.63667}, + {-39.4244, -13.5375}, + {-36.1195, -5.55112e-16}, + {-9.75792, 2.71861}, + {-0.90306, 1.33227e-15}, + {0.856068, 0.244528}, + {0.331794, -0.0443841}, + {0.197596, -0.0729406}, + {0.718888, 1.33227e-15}, + {0.984075, 0.568373}, + {-8.79435, -1.30817}, + {-25.4876, 7.80357}, + {-19.01, -3.81031}, + {-25.4876, 7.80357}, + {-13.6457, 2.44125}, + {-9.75792, -2.71861}, + {1.25751, -4.45683e-15}, + {1.13756, -0.487619}, + {0.344756, -0.0047045}, + {0.187321, 0.0707209}, + {0.272653, -7.53357e-15}, + {0.71571, 0.0128863}, + {0.169545, 0.652296}, + {-2.92014, -2.09061}, + {-25.4876, 7.80357}, + {-25.1033, 5.63667}, + {-39.4244, -13.5375}, + {-36.1195, -3.44169e-15}, + {-9.75792, 2.71861}, + {-0.90306, 4.82121e-15}, + {0.856068, 0.244528}, + {0.331794, -0.0443841}, + {0.197596, -0.0729406}, + {0.718888, -7.48575e-15}, + {0.984075, 0.568373}, + {-8.79435, -1.30817}, + {-13.6457, 2.44125}, + {-39.4244, -13.5375}, + {-72.4614, -9.78397e-15}, + {-39.4244, 13.5375}, + {-13.6457, -2.44125}, + {-5.30025, -1.65834}, + {1.10754, 7.85206e-15}, + {0.438213, -0.0482423}, + {0.123572, -8.69677e-15}, + {0.438213, 0.0482423}, + {1.10754, 1.69858e-15}, + {-5.30025, 1.65834}, + {-9.75792, -2.71861}, + {-36.1195, -1.76525e-14}, + {-39.4244, 13.5375}, + {-25.1033, -5.63667}, + {-25.4876, -7.80357}, + {-8.79435, 1.30817}, + {0.984075, -0.568373}, + {0.718888, -7.73968e-15}, + {0.197596, 0.0729406}, + {0.331794, 0.0443841}, + {0.856068, -0.244528}, + {-0.90306, -1.5862e-15}, + {1.25751, -5.77316e-15}, + {-9.75792, 2.71861}, + {-13.6457, -2.44125}, + {-25.4876, -7.80357}, + {-19.01, 3.81031}, + {-2.92014, 2.09061}, + {0.169545, -0.652296}, + {0.71571, -0.0128863}, + {0.272653, 7.41352e-15}, + {0.187321, -0.0707209}, + {0.344756, 0.0047045}, + {1.13756, 0.487619}, + {1.13756, -0.487619}, + {-0.90306, 1.44884e-14}, + {-5.30025, -1.65834}, + {-8.79435, 1.30817}, + {-2.92014, 2.09061}, + {-0.501786, -1.37769}, + {0.157364, 0.195195}, + {0.608177, 0.0924076}, + {0.197596, -0.0729406}, + {0.116983, -1.55166e-14}, + {0.183862, 0.0625824}, + {0.609244, -4.87742e-15}, + {0.344756, -0.0047045}, + {0.856068, 0.244528}, + {1.10754, 1.37806e-14}, + {0.984075, -0.568373}, + {0.169545, -0.652296}, + {0.157364, 0.195195}, + {0.910811, 0.175105}, + {0.422501, -0.0375059}, + {0.123572, -2.23074e-14}, + {0.175034, 0.0639427}, + {0.22958, 7.56348e-15}, + {0.183862, -0.0625824}, + {0.187321, 0.0707209}, + {0.331794, -0.0443841}, + {0.438213, -0.0482423}, + {0.718888, 2.74173e-15}, + {0.71571, -0.0128863}, + {0.608177, 0.0924076}, + {0.422501, -0.0375059}, + {0.136765, -0.00586452}, + {0.197596, 0.0729406}, + {0.247817, 1.79677e-14}, + {0.175034, -0.0639427}, + {0.116983, 2.32163e-15}, + {0.272653, 1.09197e-14}, + {0.197596, -0.0729406}, + {0.123572, -5.44548e-15}, + {0.197596, 0.0729406}, + {0.272653, 1.31859e-14}, + {0.197596, -0.0729406}, + {0.123572, 7.19444e-15}, + {0.197596, 0.0729406}, + {0.272653, 2.36674e-14}, + {0.197596, -0.0729406}, + {0.123572, -1.17805e-14}, + {0.197596, 0.0729406}, + {0.71571, 0.0128863}, + {0.718888, -5.54157e-15}, + {0.438213, 0.0482423}, + {0.331794, 0.0443841}, + {0.187321, -0.0707209}, + {0.116983, -2.0205e-15}, + {0.175034, 0.0639427}, + {0.247817, 1.79555e-14}, + {0.197596, -0.0729406}, + {0.136765, 0.00586452}, + {0.422501, 0.0375059}, + {0.608177, -0.0924076}, + {0.169545, 0.652296}, + {0.984075, 0.568373}, + {1.10754, 2.94209e-15}, + {0.856068, -0.244528}, + {0.344756, 0.0047045}, + {0.183862, 0.0625824}, + {0.22958, -5.96334e-15}, + {0.175034, -0.0639427}, + {0.123572, -5.29063e-15}, + {0.422501, 0.0375059}, + {0.910811, -0.175105}, + {0.157364, -0.195195}, + {-2.92014, -2.09061}, + {-8.79435, -1.30817}, + {-5.30025, 1.65834}, + {-0.90306, -6.27276e-15}, + {1.13756, 0.487619}, + {0.609244, -1.51453e-14}, + {0.183862, -0.0625824}, + {0.116983, -9.54253e-15}, + {0.197596, 0.0729406}, + {0.608177, -0.0924076}, + {0.157364, -0.195195}, + {-0.501786, 1.37769}, + {-0.58927, -0.511793}, + {-0.501786, 1.37769}, + {0.99011, 1.07155}, + {1.33155, -0.16363}, + {1.13756, -0.487619}, + {0.536417, 6.39291e-15}, + {0.198078, 0.0681101}, + {0.245083, -7.14518e-15}, + {0.187321, -0.0707209}, + {0.136765, -0.00586452}, + {0.653152, 0.025503}, + {0.894073, -0.768163}, + {-0.501786, 1.37769}, + {-2.92014, -2.09061}, + {-8.79435, -1.30817}, + {-5.30025, 1.65834}, + {-0.90306, 2.35457e-14}, + {1.13756, 0.487619}, + {0.609244, -7.22771e-15}, + {0.183862, -0.0625824}, + {0.116983, -1.22214e-14}, + {0.197596, 0.0729406}, + {0.608177, -0.0924076}, + {0.157364, -0.195195}, + {0.99011, 1.07155}, + {-8.79435, -1.30817}, + {-11.7051, 3.59868}, + {-6.57219, 3.69149e-15}, + {-5.30025, -1.65834}, + {1.33155, 0.16363}, + {0.856068, -0.244528}, + {0.234236, -2.03201e-14}, + {0.175034, 0.0639427}, + {0.247817, 4.15067e-15}, + {0.438213, -0.0482423}, + {0.642398, 0.553017}, + {1.33155, -0.16363}, + {-5.30025, 1.65834}, + {-6.57219, 1.11022e-16}, + {-11.7051, -3.59868}, + {-8.79435, 1.30817}, + {0.99011, -1.07155}, + {0.642398, -0.553017}, + {0.438213, 0.0482423}, + {0.247817, 1.74335e-15}, + {0.175034, -0.0639427}, + {0.234236, 3.04986e-14}, + {0.856068, 0.244528}, + {1.13756, -0.487619}, + {-0.90306, 9.27036e-15}, + {-5.30025, -1.65834}, + {-8.79435, 1.30817}, + {-2.92014, 2.09061}, + {-0.501786, -1.37769}, + {0.157364, 0.195195}, + {0.608177, 0.0924076}, + {0.197596, -0.0729406}, + {0.116983, 2.00811e-14}, + {0.183862, 0.0625824}, + {0.609244, 2.11012e-14}, + {0.536417, 5.32907e-15}, + {1.13756, 0.487619}, + {1.33155, 0.16363}, + {0.99011, -1.07155}, + {-0.501786, -1.37769}, + {-0.58927, 0.511793}, + {0.894073, 0.768163}, + {0.653152, -0.025503}, + {0.136765, 0.00586452}, + {0.187321, 0.0707209}, + {0.245083, 2.79908e-15}, + {0.198078, -0.0681101}, + {0.198078, 0.0681101}, + {0.609244, 7.88258e-15}, + {0.856068, -0.244528}, + {0.642398, -0.553017}, + {0.157364, 0.195195}, + {0.894073, 0.768163}, + {1.08582, 0.0715093}, + {0.548415, 5.03212e-15}, + {0.422501, 0.0375059}, + {0.331794, -0.0443841}, + {0.183862, -0.0625824}, + {0.119232, 2.62842e-15}, + {0.245083, -6.6277e-15}, + {0.183862, -0.0625824}, + {0.234236, -7.99412e-15}, + {0.438213, 0.0482423}, + {0.608177, 0.0924076}, + {0.653152, -0.025503}, + {0.548415, -3.30034e-15}, + {0.653152, 0.025503}, + {0.608177, -0.0924076}, + {0.438213, -0.0482423}, + {0.234236, -1.1971e-15}, + {0.183862, 0.0625824}, + {0.187321, -0.0707209}, + {0.116983, -1.06477e-14}, + {0.175034, 0.0639427}, + {0.247817, -4.66294e-15}, + {0.197596, -0.0729406}, + {0.136765, 0.00586452}, + {0.422501, 0.0375059}, + {0.608177, -0.0924076}, + {0.71571, 0.0128863}, + {0.718888, -5.45392e-15}, + {0.438213, 0.0482423}, + {0.331794, 0.0443841}, + {0.136765, -0.00586452}, + {0.197596, 0.0729406}, + {0.247817, -1.46619e-14}, + {0.175034, -0.0639427}, + {0.116983, 1.57673e-14}, + {0.187321, 0.0707209}, + {0.331794, -0.0443841}, + {0.438213, -0.0482423}, + {0.718888, -6.92367e-15}, + {0.71571, -0.0128863}, + {0.608177, 0.0924076}, + {0.422501, -0.0375059}, + {0.653152, 0.025503}, + {0.608177, -0.0924076}, + {0.438213, -0.0482423}, + {0.234236, 1.13307e-14}, + {0.183862, 0.0625824}, + {0.245083, 3.39358e-15}, + {0.183862, -0.0625824}, + {0.234236, -2.49775e-14}, + {0.438213, 0.0482423}, + {0.608177, 0.0924076}, + {0.653152, -0.025503}, + {0.548415, -7.98332e-15}, + {0.894073, -0.768163}, + {0.157364, -0.195195}, + {0.642398, 0.553017}, + {0.856068, 0.244528}, + {0.609244, 9.84471e-15}, + {0.198078, -0.0681101}, + {0.119232, -1.08306e-14}, + {0.183862, 0.0625824}, + {0.331794, 0.0443841}, + {0.422501, -0.0375059}, + {0.548415, -1.93693e-15}, + {1.08582, -0.0715093}, + {0.996488, -8.65654e-15}, + {1.08582, -0.0715093}, + {0.910811, -0.175105}, + {0.66818, -0.0435261}, + {0.344756, -0.0047045}, + {0.198078, 0.0681101}, + {0.256446, 1.87526e-15}, + {0.198078, -0.0681101}, + {0.344756, 0.0047045}, + {0.66818, 0.0435261}, + {0.910811, 0.175105}, + {1.08582, 0.0715093}, + {1.08582, -0.0715093}, + {0.894073, -0.768163}, + {0.157364, -0.195195}, + {0.642398, 0.553017}, + {0.856068, 0.244528}, + {0.609244, 1.10978e-14}, + {0.198078, -0.0681101}, + {0.119232, -8.91416e-15}, + {0.183862, 0.0625824}, + {0.331794, 0.0443841}, + {0.422501, -0.0375059}, + {0.548415, 3.58509e-15}, + {0.910811, -0.175105}, + {0.157364, -0.195195}, + {0.169545, 0.652296}, + {0.984075, 0.568373}, + {1.10754, -2.44636e-15}, + {0.856068, -0.244528}, + {0.344756, 0.0047045}, + {0.183862, 0.0625824}, + {0.22958, -1.29025e-14}, + {0.175034, -0.0639427}, + {0.123572, 7.36999e-15}, + {0.422501, 0.0375059}, + {0.66818, -0.0435261}, + {0.642398, 0.553017}, + {0.984075, 0.568373}, + {1.26225, -1.48159e-14}, + {0.984075, -0.568373}, + {0.642398, -0.553017}, + {0.66818, 0.0435261}, + {0.331794, 0.0443841}, + {0.175034, -0.0639427}, + {0.110194, -1.04245e-14}, + {0.175034, 0.0639427}, + {0.331794, -0.0443841}, + {0.344756, -0.0047045}, + {0.856068, 0.244528}, + {1.10754, -1.46688e-14}, + {0.984075, -0.568373}, + {0.169545, -0.652296}, + {0.157364, 0.195195}, + {0.910811, 0.175105}, + {0.422501, -0.0375059}, + {0.123572, 1.07388e-15}, + {0.175034, 0.0639427}, + {0.22958, 6.57697e-16}, + {0.183862, -0.0625824}, + {0.198078, 0.0681101}, + {0.609244, -9.21485e-15}, + {0.856068, -0.244528}, + {0.642398, -0.553017}, + {0.157364, 0.195195}, + {0.894073, 0.768163}, + {1.08582, 0.0715093}, + {0.548415, 1.74673e-15}, + {0.422501, 0.0375059}, + {0.331794, -0.0443841}, + {0.183862, -0.0625824}, + {0.119232, -3.30104e-15}, + {0.256446, 7.05931e-16}, + {0.198078, -0.0681101}, + {0.344756, 0.0047045}, + {0.66818, 0.0435261}, + {0.910811, 0.175105}, + {1.08582, 0.0715093}, + {0.996488, 9.09906e-16}, + {1.08582, -0.0715093}, + {0.910811, -0.175105}, + {0.66818, -0.0435261}, + {0.344756, -0.0047045}, + {0.198078, 0.0681101}, + {0.198078, -0.0681101}, + {0.119232, 1.58207e-15}, + {0.183862, 0.0625824}, + {0.331794, 0.0443841}, + {0.422501, -0.0375059}, + {0.548415, -1.33616e-15}, + {1.08582, -0.0715093}, + {0.894073, -0.768163}, + {0.157364, -0.195195}, + {0.642398, 0.553017}, + {0.856068, 0.244528}, + {0.609244, 8.54405e-15}, + {0.344756, 0.0047045}, + {0.183862, 0.0625824}, + {0.22958, -3.6568e-15}, + {0.175034, -0.0639427}, + {0.123572, -3.76603e-15}, + {0.422501, 0.0375059}, + {0.910811, -0.175105}, + {0.157364, -0.195195}, + {0.169545, 0.652296}, + {0.984075, 0.568373}, + {1.10754, 1.63819e-14}, + {0.856068, -0.244528}, + {0.66818, 0.0435261}, + {0.331794, 0.0443841}, + {0.175034, -0.0639427}, + {0.110194, 5.40016e-15}, + {0.175034, 0.0639427}, + {0.331794, -0.0443841}, + {0.66818, -0.0435261}, + {0.642398, 0.553017}, + {0.984075, 0.568373}, + {1.26225, 1.79667e-14}, + {0.984075, -0.568373}, + {0.642398, -0.553017}, + {0.910811, 0.175105}, + {0.422501, -0.0375059}, + {0.123572, -1.23235e-14}, + {0.175034, 0.0639427}, + {0.22958, 1.33292e-14}, + {0.183862, -0.0625824}, + {0.344756, -0.0047045}, + {0.856068, 0.244528}, + {1.10754, 8.56991e-15}, + {0.984075, -0.568373}, + {0.169545, -0.652296}, + {0.157364, 0.195195}, + {1.08582, 0.0715093}, + {0.548415, -1.18239e-14}, + {0.422501, 0.0375059}, + {0.331794, -0.0443841}, + {0.183862, -0.0625824}, + {0.119232, 1.51533e-14}, + {0.198078, 0.0681101}, + {0.609244, -6.48772e-15}, + {0.856068, -0.244528}, + {0.642398, -0.553017}, + {0.157364, 0.195195}, + {0.894073, 0.768163}, + {-0.58927, 0.511793}, + {0.894073, 0.768163}, + {0.653152, -0.025503}, + {0.136765, 0.00586452}, + {0.187321, 0.0707209}, + {0.245083, 1.57505e-14}, + {0.198078, -0.0681101}, + {0.536417, -9.99313e-15}, + {1.13756, 0.487619}, + {1.33155, 0.16363}, + {0.99011, -1.07155}, + {-0.501786, -1.37769}, + {0.894073, 0.768163}, + {1.08582, 0.0715093}, + {0.548415, -7.38298e-15}, + {0.422501, 0.0375059}, + {0.331794, -0.0443841}, + {0.183862, -0.0625824}, + {0.119232, 1.81233e-14}, + {0.198078, 0.0681101}, + {0.609244, -1.0975e-14}, + {0.856068, -0.244528}, + {0.642398, -0.553017}, + {0.157364, 0.195195}, + {0.653152, -0.025503}, + {0.548415, 1.88434e-15}, + {0.653152, 0.025503}, + {0.608177, -0.0924076}, + {0.438213, -0.0482423}, + {0.234236, 2.71911e-14}, + {0.183862, 0.0625824}, + {0.245083, -1.67171e-15}, + {0.183862, -0.0625824}, + {0.234236, -8.38368e-15}, + {0.438213, 0.0482423}, + {0.608177, 0.0924076}, + {0.136765, 0.00586452}, + {0.422501, 0.0375059}, + {0.608177, -0.0924076}, + {0.71571, 0.0128863}, + {0.718888, 7.24348e-16}, + {0.438213, 0.0482423}, + {0.331794, 0.0443841}, + {0.187321, -0.0707209}, + {0.116983, -9.46735e-15}, + {0.175034, 0.0639427}, + {0.247817, 1.47624e-14}, + {0.197596, -0.0729406}, + {0.187321, 0.0707209}, + {0.331794, -0.0443841}, + {0.438213, -0.0482423}, + {0.718888, -1.28977e-15}, + {0.71571, -0.0128863}, + {0.608177, 0.0924076}, + {0.422501, -0.0375059}, + {0.136765, -0.00586452}, + {0.197596, 0.0729406}, + {0.247817, 9.21922e-15}, + {0.175034, -0.0639427}, + {0.116983, 2.0981e-14}, + {0.245083, 1.31681e-14}, + {0.183862, -0.0625824}, + {0.234236, 4.47544e-15}, + {0.438213, 0.0482423}, + {0.608177, 0.0924076}, + {0.653152, -0.025503}, + {0.548415, -5.02797e-15}, + {0.653152, 0.025503}, + {0.608177, -0.0924076}, + {0.438213, -0.0482423}, + {0.234236, 2.14729e-14}, + {0.183862, 0.0625824}, + {0.198078, -0.0681101}, + {0.119232, 7.21645e-16}, + {0.183862, 0.0625824}, + {0.331794, 0.0443841}, + {0.422501, -0.0375059}, + {0.548415, 1.65598e-16}, + {1.08582, -0.0715093}, + {0.894073, -0.768163}, + {0.157364, -0.195195}, + {0.642398, 0.553017}, + {0.856068, 0.244528}, + {0.609244, 5.67284e-15}, + {0.536417, -4.88498e-15}, + {0.198078, 0.0681101}, + {0.245083, -9.15934e-15}, + {0.187321, -0.0707209}, + {0.136765, -0.00586452}, + {0.653152, 0.025503}, + {0.894073, -0.768163}, + {-0.58927, -0.511793}, + {-0.501786, 1.37769}, + {0.99011, 1.07155}, + {1.33155, -0.16363}, + {1.13756, -0.487619}, + {1.13756, 0.487619}, + {0.609244, -2.50355e-14}, + {0.183862, -0.0625824}, + {0.116983, -1.90958e-14}, + {0.197596, 0.0729406}, + {0.608177, -0.0924076}, + {0.157364, -0.195195}, + {-0.501786, 1.37769}, + {-2.92014, -2.09061}, + {-8.79435, -1.30817}, + {-5.30025, 1.65834}, + {-0.90306, -8.72338e-15}, + {1.33155, 0.16363}, + {0.856068, -0.244528}, + {0.234236, -3.1225e-14}, + {0.175034, 0.0639427}, + {0.247817, -5.50801e-15}, + {0.438213, -0.0482423}, + {0.642398, 0.553017}, + {0.99011, 1.07155}, + {-8.79435, -1.30817}, + {-11.7051, 3.59868}, + {-6.57219, 4.93573e-16}, + {-5.30025, -1.65834}, + {0.99011, -1.07155}, + {0.642398, -0.553017}, + {0.438213, 0.0482423}, + {0.247817, -1.77636e-15}, + {0.175034, -0.0639427}, + {0.234236, 1.59054e-14}, + {0.856068, 0.244528}, + {1.33155, -0.16363}, + {-5.30025, 1.65834}, + {-6.57219, -5.24722e-15}, + {-11.7051, -3.59868}, + {-8.79435, 1.30817}, + {-0.501786, -1.37769}, + {0.157364, 0.195195}, + {0.608177, 0.0924076}, + {0.197596, -0.0729406}, + {0.116983, 1.53547e-14}, + {0.183862, 0.0625824}, + {0.609244, 8.8169e-15}, + {1.13756, -0.487619}, + {-0.90306, -2.36814e-14}, + {-5.30025, -1.65834}, + {-8.79435, 1.30817}, + {-2.92014, 2.09061}, + {-19.01, 3.81031}, + {-2.92014, 2.09061}, + {0.169545, -0.652296}, + {0.71571, -0.0128863}, + {0.272653, 7.53357e-15}, + {0.187321, -0.0707209}, + {0.344756, 0.0047045}, + {1.13756, 0.487619}, + {1.25751, 4.45683e-15}, + {-9.75792, 2.71861}, + {-13.6457, -2.44125}, + {-25.4876, -7.80357}, + {-2.92014, 2.09061}, + {-0.501786, -1.37769}, + {0.157364, 0.195195}, + {0.608177, 0.0924076}, + {0.197596, -0.0729406}, + {0.116983, 9.80781e-15}, + {0.183862, 0.0625824}, + {0.609244, 1.49587e-14}, + {1.13756, -0.487619}, + {-0.90306, 7.06758e-15}, + {-5.30025, -1.65834}, + {-8.79435, 1.30817}, + {0.169545, -0.652296}, + {0.157364, 0.195195}, + {0.910811, 0.175105}, + {0.422501, -0.0375059}, + {0.123572, 6.06665e-15}, + {0.175034, 0.0639427}, + {0.22958, 6.1993e-15}, + {0.183862, -0.0625824}, + {0.344756, -0.0047045}, + {0.856068, 0.244528}, + {1.10754, -2.28577e-15}, + {0.984075, -0.568373}, + {0.71571, -0.0128863}, + {0.608177, 0.0924076}, + {0.422501, -0.0375059}, + {0.136765, -0.00586452}, + {0.197596, 0.0729406}, + {0.247817, -1.83171e-14}, + {0.175034, -0.0639427}, + {0.116983, 1.17627e-15}, + {0.187321, 0.0707209}, + {0.331794, -0.0443841}, + {0.438213, -0.0482423}, + {0.718888, 5.88753e-15}, + {0.272653, -1.09197e-14}, + {0.197596, -0.0729406}, + {0.123572, 1.17805e-14}, + {0.197596, 0.0729406}, + {0.272653, -2.36674e-14}, + {0.197596, -0.0729406}, + {0.123572, -7.19444e-15}, + {0.197596, 0.0729406}, + {0.272653, -1.31859e-14}, + {0.197596, -0.0729406}, + {0.123572, 5.44548e-15}, + {0.197596, 0.0729406}, + {0.187321, -0.0707209}, + {0.116983, -2.02963e-15}, + {0.175034, 0.0639427}, + {0.247817, -1.83777e-14}, + {0.197596, -0.0729406}, + {0.136765, 0.00586452}, + {0.422501, 0.0375059}, + {0.608177, -0.0924076}, + {0.71571, 0.0128863}, + {0.718888, -2.82656e-15}, + {0.438213, 0.0482423}, + {0.331794, 0.0443841}, + {0.344756, 0.0047045}, + {0.183862, 0.0625824}, + {0.22958, -7.32747e-15}, + {0.175034, -0.0639427}, + {0.123572, 2.2981e-14}, + {0.422501, 0.0375059}, + {0.910811, -0.175105}, + {0.157364, -0.195195}, + {0.169545, 0.652296}, + {0.984075, 0.568373}, + {1.10754, -1.49351e-14}, + {0.856068, -0.244528}, + {1.13756, 0.487619}, + {0.609244, 4.66294e-15}, + {0.183862, -0.0625824}, + {0.116983, 1.55431e-14}, + {0.197596, 0.0729406}, + {0.608177, -0.0924076}, + {0.157364, -0.195195}, + {-0.501786, 1.37769}, + {-2.92014, -2.09061}, + {-8.79435, -1.30817}, + {-5.30025, 1.65834}, + {-0.90306, -1.49364e-14}, + {1.25751, 5.77316e-15}, + {1.13756, -0.487619}, + {0.344756, -0.0047045}, + {0.187321, 0.0707209}, + {0.272653, -7.41352e-15}, + {0.71571, 0.0128863}, + {0.169545, 0.652296}, + {-2.92014, -2.09061}, + {-19.01, -3.81031}, + {-25.4876, 7.80357}, + {-13.6457, 2.44125}, + {-9.75792, -2.71861}, + {-9.75792, 2.71861}, + {-0.90306, -1.11022e-15}, + {0.856068, 0.244528}, + {0.331794, -0.0443841}, + {0.197596, -0.0729406}, + {0.718888, 1.06265e-14}, + {0.984075, 0.568373}, + {-8.79435, -1.30817}, + {-25.4876, 7.80357}, + {-25.1033, 5.63667}, + {-39.4244, -13.5375}, + {-36.1195, 1.53615e-14}, + {-13.6457, -2.44125}, + {-5.30025, -1.65834}, + {1.10754, -3.75347e-16}, + {0.438213, -0.0482423}, + {0.123572, 6.59532e-15}, + {0.438213, 0.0482423}, + {1.10754, -9.60557e-15}, + {-5.30025, 1.65834}, + {-13.6457, 2.44125}, + {-39.4244, -13.5375}, + {-72.4614, 8.85487e-15}, + {-39.4244, 13.5375}, + {-25.4876, -7.80357}, + {-8.79435, 1.30817}, + {0.984075, -0.568373}, + {0.718888, 6.66134e-15}, + {0.197596, 0.0729406}, + {0.331794, 0.0443841}, + {0.856068, -0.244528}, + {-0.90306, -3.2321e-15}, + {-9.75792, -2.71861}, + {-36.1195, 3.07691e-15}, + {-39.4244, 13.5375}, + {-25.1033, -5.63667}, + {-68.6663, 31.5682}, + {-25.1033, -5.63667}, + {-11.7051, -3.59868}, + {1.26225, 5.32907e-15}, + {0.71571, 0.0128863}, + {0.136765, -0.00586452}, + {0.66818, 0.0435261}, + {1.33155, 0.16363}, + {-9.75792, 2.71861}, + {-28.2549, -1.30009e-14}, + {-85.5703, -25.4729}, + {-141.346, 11.6655}, + {-25.1033, -5.63667}, + {-25.4876, -7.80357}, + {-8.79435, 1.30817}, + {0.984075, -0.568373}, + {0.718888, 1.04645e-15}, + {0.197596, 0.0729406}, + {0.331794, 0.0443841}, + {0.856068, -0.244528}, + {-0.90306, -1.12605e-14}, + {-9.75792, -2.71861}, + {-36.1195, -4.7106e-15}, + {-39.4244, 13.5375}, + {-11.7051, -3.59868}, + {-8.79435, 1.30817}, + {0.99011, -1.07155}, + {0.642398, -0.553017}, + {0.438213, 0.0482423}, + {0.247817, -2.82239e-15}, + {0.175034, -0.0639427}, + {0.234236, -3.56681e-15}, + {0.856068, 0.244528}, + {1.33155, -0.16363}, + {-5.30025, 1.65834}, + {-6.57219, -1.16432e-14}, + {1.26225, 3.58047e-15}, + {0.984075, -0.568373}, + {0.642398, -0.553017}, + {0.66818, 0.0435261}, + {0.331794, 0.0443841}, + {0.175034, -0.0639427}, + {0.110194, 2.93524e-15}, + {0.175034, 0.0639427}, + {0.331794, -0.0443841}, + {0.66818, -0.0435261}, + {0.642398, 0.553017}, + {0.984075, 0.568373}, + {0.71571, 0.0128863}, + {0.718888, -5.34729e-15}, + {0.438213, 0.0482423}, + {0.331794, 0.0443841}, + {0.187321, -0.0707209}, + {0.116983, 2.48202e-15}, + {0.175034, 0.0639427}, + {0.247817, -1.39069e-14}, + {0.197596, -0.0729406}, + {0.136765, 0.00586452}, + {0.422501, 0.0375059}, + {0.608177, -0.0924076}, + {0.136765, -0.00586452}, + {0.197596, 0.0729406}, + {0.247817, -9.0622e-15}, + {0.175034, -0.0639427}, + {0.116983, 2.82922e-15}, + {0.187321, 0.0707209}, + {0.331794, -0.0443841}, + {0.438213, -0.0482423}, + {0.718888, 3.1417e-15}, + {0.71571, -0.0128863}, + {0.608177, 0.0924076}, + {0.422501, -0.0375059}, + {0.66818, 0.0435261}, + {0.331794, 0.0443841}, + {0.175034, -0.0639427}, + {0.110194, 2.79023e-16}, + {0.175034, 0.0639427}, + {0.331794, -0.0443841}, + {0.66818, -0.0435261}, + {0.642398, 0.553017}, + {0.984075, 0.568373}, + {1.26225, -1.87546e-14}, + {0.984075, -0.568373}, + {0.642398, -0.553017}, + {1.33155, 0.16363}, + {0.856068, -0.244528}, + {0.234236, -4.71845e-15}, + {0.175034, 0.0639427}, + {0.247817, 1.06316e-14}, + {0.438213, -0.0482423}, + {0.642398, 0.553017}, + {0.99011, 1.07155}, + {-8.79435, -1.30817}, + {-11.7051, 3.59868}, + {-6.57219, -1.15544e-14}, + {-5.30025, -1.65834}, + {-9.75792, 2.71861}, + {-0.90306, -8.43769e-15}, + {0.856068, 0.244528}, + {0.331794, -0.0443841}, + {0.197596, -0.0729406}, + {0.718888, 4.79381e-15}, + {0.984075, 0.568373}, + {-8.79435, -1.30817}, + {-25.4876, 7.80357}, + {-25.1033, 5.63667}, + {-39.4244, -13.5375}, + {-36.1195, -2.29847e-15}, + {-28.2549, 1.17684e-14}, + {-9.75792, -2.71861}, + {1.33155, -0.16363}, + {0.66818, -0.0435261}, + {0.136765, 0.00586452}, + {0.71571, -0.0128863}, + {1.26225, -6.27057e-15}, + {-11.7051, 3.59868}, + {-25.1033, 5.63667}, + {-68.6663, -31.5682}, + {-141.346, -11.6655}, + {-85.5703, 25.4729}, + {-85.5703, -25.4729}, + {-36.1195, -8.88178e-15}, + {-5.30025, 1.65834}, + {0.642398, 0.553017}, + {0.422501, 0.0375059}, + {0.608177, 0.0924076}, + {0.984075, -0.568373}, + {-6.57219, -9.51947e-16}, + {-39.4244, -13.5375}, + {-141.346, -11.6655}, + {-174.402, 55.7416}, + {-100.781, -1.32589e-14}, + {-141.346, 11.6655}, + {-39.4244, 13.5375}, + {-6.57219, 9.32587e-15}, + {0.984075, 0.568373}, + {0.608177, -0.0924076}, + {0.422501, -0.0375059}, + {0.642398, -0.553017}, + {-5.30025, -1.65834}, + {-36.1195, -1.51055e-14}, + {-85.5703, 25.4729}, + {-100.781, -1.03368e-14}, + {-174.402, -55.7416}, + {-219.942, -33.69}, + {-174.402, -55.7416}, + {-72.4614, 3.19744e-14}, + {-11.7051, 3.59868}, + {0.169545, 0.652296}, + {0.653152, 0.025503}, + {0.910811, 0.175105}, + {0.99011, -1.07155}, + {-13.6457, -2.44125}, + {-85.5703, -25.4729}, + {-281.447, 2.89669e-14}, + {-352.926, 115.37}, + {-174.402, -55.7416}, + {-141.346, 11.6655}, + {-39.4244, 13.5375}, + {-6.57219, -4.88498e-15}, + {0.984075, 0.568373}, + {0.608177, -0.0924076}, + {0.422501, -0.0375059}, + {0.642398, -0.553017}, + {-5.30025, -1.65834}, + {-36.1195, -1.82141e-14}, + {-85.5703, 25.4729}, + {-100.781, -9.27444e-15}, + {-72.4614, -4.85029e-15}, + {-39.4244, 13.5375}, + {-13.6457, -2.44125}, + {-5.30025, -1.65834}, + {1.10754, 3.15158e-15}, + {0.438213, -0.0482423}, + {0.123572, -1.13913e-14}, + {0.438213, 0.0482423}, + {1.10754, 1.54585e-14}, + {-5.30025, 1.65834}, + {-13.6457, 2.44125}, + {-39.4244, -13.5375}, + {-11.7051, 3.59868}, + {-6.57219, -1.02973e-14}, + {-5.30025, -1.65834}, + {1.33155, 0.16363}, + {0.856068, -0.244528}, + {0.234236, -8.67871e-16}, + {0.175034, 0.0639427}, + {0.247817, -9.0156e-15}, + {0.438213, -0.0482423}, + {0.642398, 0.553017}, + {0.99011, 1.07155}, + {-8.79435, -1.30817}, + {0.169545, 0.652296}, + {0.984075, 0.568373}, + {1.10754, -9.28424e-15}, + {0.856068, -0.244528}, + {0.344756, 0.0047045}, + {0.183862, 0.0625824}, + {0.22958, -2.66014e-15}, + {0.175034, -0.0639427}, + {0.123572, -1.71764e-14}, + {0.422501, 0.0375059}, + {0.910811, -0.175105}, + {0.157364, -0.195195}, + {0.653152, 0.025503}, + {0.608177, -0.0924076}, + {0.438213, -0.0482423}, + {0.234236, 3.00826e-14}, + {0.183862, 0.0625824}, + {0.245083, 6.85206e-15}, + {0.183862, -0.0625824}, + {0.234236, -3.07568e-14}, + {0.438213, 0.0482423}, + {0.608177, 0.0924076}, + {0.653152, -0.025503}, + {0.548415, 1.36866e-15}, + {0.910811, 0.175105}, + {0.422501, -0.0375059}, + {0.123572, 5.7454e-15}, + {0.175034, 0.0639427}, + {0.22958, -8.11296e-15}, + {0.183862, -0.0625824}, + {0.344756, -0.0047045}, + {0.856068, 0.244528}, + {1.10754, -2.31121e-14}, + {0.984075, -0.568373}, + {0.169545, -0.652296}, + {0.157364, 0.195195}, + {0.99011, -1.07155}, + {0.642398, -0.553017}, + {0.438213, 0.0482423}, + {0.247817, 1.40998e-14}, + {0.175034, -0.0639427}, + {0.234236, 1.26193e-14}, + {0.856068, 0.244528}, + {1.33155, -0.16363}, + {-5.30025, 1.65834}, + {-6.57219, 2.68492e-14}, + {-11.7051, -3.59868}, + {-8.79435, 1.30817}, + {-13.6457, -2.44125}, + {-5.30025, -1.65834}, + {1.10754, -1.79197e-14}, + {0.438213, -0.0482423}, + {0.123572, 2.88317e-14}, + {0.438213, 0.0482423}, + {1.10754, 9.5501e-15}, + {-5.30025, 1.65834}, + {-13.6457, 2.44125}, + {-39.4244, -13.5375}, + {-72.4614, -2.75686e-15}, + {-39.4244, 13.5375}, + {-85.5703, -25.4729}, + {-36.1195, 1.73195e-14}, + {-5.30025, 1.65834}, + {0.642398, 0.553017}, + {0.422501, 0.0375059}, + {0.608177, 0.0924076}, + {0.984075, -0.568373}, + {-6.57219, 4.82121e-15}, + {-39.4244, -13.5375}, + {-141.346, -11.6655}, + {-174.402, 55.7416}, + {-100.781, -7.48575e-15}, + {-281.447, 3.90799e-14}, + {-85.5703, 25.4729}, + {-13.6457, 2.44125}, + {0.99011, 1.07155}, + {0.910811, -0.175105}, + {0.653152, -0.025503}, + {0.169545, -0.652296}, + {-11.7051, -3.59868}, + {-72.4614, -2.1037e-14}, + {-174.402, 55.7416}, + {-219.942, 33.69}, + {-352.926, -115.37}, + {-352.926, 115.37}, + {-100.781, -1.07118e-15}, + {-39.4244, -13.5375}, + {-8.79435, -1.30817}, + {0.157364, -0.195195}, + {0.548415, -1.6234e-14}, + {0.157364, 0.195195}, + {-8.79435, 1.30817}, + {-39.4244, 13.5375}, + {-100.781, -2.85409e-14}, + {-352.926, -115.37}, + {-690.893, 8.12484e-14}, + {-1001.68, -433.439}, + {-690.893, -3.19744e-14}, + {-174.402, 55.7416}, + {-25.1033, 5.63667}, + {-2.92014, -2.09061}, + {0.894073, -0.768163}, + {1.08582, 0.0715093}, + {-0.501786, -1.37769}, + {-25.4876, -7.80357}, + {-141.346, 11.6655}, + {-352.926, 115.37}, + {-517.273, -7.42819e-14}, + {-690.893, -4.996e-15}, + {-352.926, 115.37}, + {-100.781, 2.12053e-14}, + {-39.4244, -13.5375}, + {-8.79435, -1.30817}, + {0.157364, -0.195195}, + {0.548415, 6.04246e-15}, + {0.157364, 0.195195}, + {-8.79435, 1.30817}, + {-39.4244, 13.5375}, + {-100.781, -6.2645e-15}, + {-352.926, -115.37}, + {-174.402, 55.7416}, + {-100.781, -3.9968e-15}, + {-85.5703, -25.4729}, + {-36.1195, 1.77636e-15}, + {-5.30025, 1.65834}, + {0.642398, 0.553017}, + {0.422501, 0.0375059}, + {0.608177, 0.0924076}, + {0.984075, -0.568373}, + {-6.57219, -1.20726e-14}, + {-39.4244, -13.5375}, + {-141.346, -11.6655}, + {-25.1033, 5.63667}, + {-39.4244, -13.5375}, + {-36.1195, 7.10543e-15}, + {-9.75792, 2.71861}, + {-0.90306, -6.56569e-15}, + {0.856068, 0.244528}, + {0.331794, -0.0443841}, + {0.197596, -0.0729406}, + {0.718888, 1.18948e-14}, + {0.984075, 0.568373}, + {-8.79435, -1.30817}, + {-25.4876, 7.80357}, + {-2.92014, -2.09061}, + {-8.79435, -1.30817}, + {-5.30025, 1.65834}, + {-0.90306, 1.58207e-14}, + {1.13756, 0.487619}, + {0.609244, -2.48678e-15}, + {0.183862, -0.0625824}, + {0.116983, -2.16976e-14}, + {0.197596, 0.0729406}, + {0.608177, -0.0924076}, + {0.157364, -0.195195}, + {-0.501786, 1.37769}, + {0.894073, -0.768163}, + {0.157364, -0.195195}, + {0.642398, 0.553017}, + {0.856068, 0.244528}, + {0.609244, -1.09297e-14}, + {0.198078, -0.0681101}, + {0.119232, -1.83728e-14}, + {0.183862, 0.0625824}, + {0.331794, 0.0443841}, + {0.422501, -0.0375059}, + {0.548415, -2.94779e-14}, + {1.08582, -0.0715093}, + {1.08582, 0.0715093}, + {0.548415, 1.00198e-14}, + {0.422501, 0.0375059}, + {0.331794, -0.0443841}, + {0.183862, -0.0625824}, + {0.119232, 1.21228e-14}, + {0.198078, 0.0681101}, + {0.609244, 4.84268e-15}, + {0.856068, -0.244528}, + {0.642398, -0.553017}, + {0.157364, 0.195195}, + {0.894073, 0.768163}, + {-0.501786, -1.37769}, + {0.157364, 0.195195}, + {0.608177, 0.0924076}, + {0.197596, -0.0729406}, + {0.116983, 5.39933e-14}, + {0.183862, 0.0625824}, + {0.609244, -1.87156e-15}, + {1.13756, -0.487619}, + {-0.90306, -6.7538e-14}, + {-5.30025, -1.65834}, + {-8.79435, 1.30817}, + {-2.92014, 2.09061}, + {-25.4876, -7.80357}, + {-8.79435, 1.30817}, + {0.984075, -0.568373}, + {0.718888, 4.88498e-14}, + {0.197596, 0.0729406}, + {0.331794, 0.0443841}, + {0.856068, -0.244528}, + {-0.90306, -6.80815e-15}, + {-9.75792, -2.71861}, + {-36.1195, -8.78654e-15}, + {-39.4244, 13.5375}, + {-25.1033, -5.63667}, + {-141.346, 11.6655}, + {-39.4244, 13.5375}, + {-6.57219, 2.26485e-14}, + {0.984075, 0.568373}, + {0.608177, -0.0924076}, + {0.422501, -0.0375059}, + {0.642398, -0.553017}, + {-5.30025, -1.65834}, + {-36.1195, -1.97408e-15}, + {-85.5703, 25.4729}, + {-100.781, -2.76711e-14}, + {-174.402, -55.7416}, + {-352.926, 115.37}, + {-100.781, 4.53139e-15}, + {-39.4244, -13.5375}, + {-8.79435, -1.30817}, + {0.157364, -0.195195}, + {0.548415, -2.27175e-14}, + {0.157364, 0.195195}, + {-8.79435, 1.30817}, + {-39.4244, 13.5375}, + {-100.781, -5.34849e-14}, + {-352.926, -115.37}, + {-690.893, 7.92872e-15}, + {-517.273, -5.68434e-14}, + {-352.926, -115.37}, + {-141.346, -11.6655}, + {-25.4876, 7.80357}, + {-0.501786, 1.37769}, + {1.08582, -0.0715093}, + {0.894073, 0.768163}, + {-2.92014, 2.09061}, + {-25.1033, -5.63667}, + {-174.402, -55.7416}, + {-690.893, 1.78665e-14}, + {-1001.68, 433.439}}; + const std::vector> out_3 + = {{-0.199195, -0.0194965}, {-0.419867, -0.250833}, {-1.11264, 0}, + {-0.419867, 0.250833}, {-0.199195, 0.0194965}, {-0.418409, -5.00654e-18}, + {-0.419867, 0.250833}, {-0.18608, 3.44375e-17}, {-0.267653, -0.0667649}, + {-0.199195, 0.0194965}, {-0.267653, -0.0667649}, {-0.267653, 0.0667649}, + {-0.199195, -0.0194965}, {-0.267653, 0.0667649}, {-0.18608, -1.83156e-17}, + {-0.419867, -0.250833}, {-0.418409, 6.16791e-18}, {-0.418409, 1.14412e-17}, + {-0.419867, 0.250833}, {-0.18608, 4.36893e-17}, {-0.267653, -0.0667649}, + {-0.267653, 0.0667649}, {-0.18608, 1.64477e-17}, {-0.419867, -0.250833}, + {-0.418409, -2.87836e-17}, {-0.267653, -0.0667649}, {-0.418409, -1.43756e-17}, + {-0.267653, 0.0667649}, {-0.267653, -0.0667649}, {-0.418409, -9.49474e-18}, + {-0.267653, 0.0667649}, {-0.199195, 0.0194965}, {-0.267653, -0.0667649}, + {-0.267653, -0.0667649}, {-0.418409, -3.75741e-17}, {-0.267653, 0.0667649}, + {-0.267653, 0.0667649}, {-0.199195, -0.0194965}, {-0.267653, 0.0667649}, + {-0.199195, -0.0194965}, {-0.199195, 0.0194965}, {-0.267653, -0.0667649}, + {-0.267653, -0.0667649}, {-0.418409, 4.70188e-17}, {-0.267653, 0.0667649}, + {-0.267653, 0.0667649}, {-0.18608, -4.29872e-17}, {-0.419867, -0.250833}, + {-0.418409, -1.85037e-17}, {-0.267653, -0.0667649}, {-0.418409, -2.89121e-18}, + {-0.267653, 0.0667649}, {-0.267653, -0.0667649}, {-0.418409, 4.58838e-18}, + {-0.267653, 0.0667649}, {-0.418409, 1.03394e-17}, {-0.419867, 0.250833}, + {-0.18608, -3.28955e-17}, {-0.267653, -0.0667649}}; + const std::vector> out_3_init + = {{-0.0719135, 0}, {0.15981, 0}, {0, 0}, {0.15981, 0}, {-0.0719135, 0}, {-0.0185867, 0}, + {0.15981, 0}, {0.113268, 0}, {-0.0634128, 0}, {-0.0719135, 0}, {-0.0634128, 0}, {-0.0634128, 0}, + {-0.0719135, 0}, {-0.0634128, 0}, {0.113268, 0}, {0.15981, 0}, {-0.0185867, 0}, {-0.0185867, 0}, + {0.15981, 0}, {0.113268, 0}, {-0.0634128, 0}, {-0.0634128, 0}, {0.113268, 0}, {0.15981, 0}, + {-0.0185867, 0}, {-0.0634128, 0}, {-0.0185867, 0}, {-0.0634128, 0}, {-0.0634128, 0}, {-0.0185867, 0}, + {-0.0634128, 0}, {-0.0719135, 0}, {-0.0634128, 0}, {-0.0634128, 0}, {-0.0185867, 0}, {-0.0634128, 0}, + {-0.0634128, 0}, {-0.0719135, 0}, {-0.0634128, 0}, {-0.0719135, 0}, {-0.0719135, 0}, {-0.0634128, 0}, + {-0.0634128, 0}, {-0.0185867, 0}, {-0.0634128, 0}, {-0.0634128, 0}, {0.113268, 0}, {0.15981, 0}, + {-0.0185867, 0}, {-0.0634128, 0}, {-0.0185867, 0}, {-0.0634128, 0}, {-0.0634128, 0}, {-0.0185867, 0}, + {-0.0634128, 0}, {-0.0185867, 0}, {0.15981, 0}, {0.113268, 0}, {-0.0634128, 0}}; const base_device::DEVICE_CPU* cpu_ctx = {}; const base_device::DEVICE_GPU* gpu_ctx = {}; @@ -54,9 +7005,11 @@ class TestModulePWPWMultiDevice : public ::testing::Test using synchronize_memory_int_h2d_op = base_device::memory::synchronize_memory_op; - void SetUp() override { + void SetUp() override + { } - void TearDown() override { + void TearDown() override + { } }; @@ -73,7 +7026,8 @@ TEST_F(TestModulePWPWMultiDevice, set_3d_fft_box_op_cpu) { std::vector> res(out_1.size(), std::complex{0, 0}); set_3d_fft_box_cpu_op()(this->npwk, box_index.data(), in_1.data(), res.data()); - for (int ii = 0; ii < this->nxyz; ii++) { + for (int ii = 0; ii < this->nxyz; ii++) + { EXPECT_LT(std::abs(res[ii] - out_1[ii]), 1e-12); } } @@ -82,7 +7036,8 @@ TEST_F(TestModulePWPWMultiDevice, set_recip_to_real_output_op_cpu) { std::vector> res(out_2.size(), std::complex{0, 0}); set_recip_to_real_output_cpu_op()(this->nxyz, this->add, this->factor, in_2.data(), res.data()); - for (int ii = 0; ii < this->nxyz; ii++) { + for (int ii = 0; ii < this->nxyz; ii++) + { EXPECT_LT(std::abs(res[ii] - out_2[ii]), 1e-12); } } @@ -90,8 +7045,15 @@ TEST_F(TestModulePWPWMultiDevice, set_recip_to_real_output_op_cpu) TEST_F(TestModulePWPWMultiDevice, set_real_to_recip_output_op_cpu) { std::vector> res = out_3_init; - set_real_to_recip_output_cpu_op()(this->npwk, this->nxyz, true, this->factor, box_index.data(), in_3.data(), res.data()); - for (int ii = 0; ii < out_3.size(); ii++) { + set_real_to_recip_output_cpu_op()(this->npwk, + this->nxyz, + true, + this->factor, + box_index.data(), + in_3.data(), + res.data()); + for (int ii = 0; ii < out_3.size(); ii++) + { EXPECT_LT(std::abs(res[ii] - out_3[ii]), 5e-6); } } @@ -100,8 +7062,8 @@ TEST_F(TestModulePWPWMultiDevice, set_real_to_recip_output_op_cpu) TEST_F(TestModulePWPWMultiDevice, set_3d_fft_box_op_gpu) { std::vector> res(out_1.size(), std::complex{0, 0}); - int * d_box_index = NULL; - std::complex* d_res = NULL, * d_in_1 = NULL; + int* d_box_index = NULL; + std::complex*d_res = NULL, *d_in_1 = NULL; resize_memory_int_gpu_op()(d_box_index, box_index.size()); resize_memory_complex_gpu_op()(d_res, res.size()); resize_memory_complex_gpu_op()(d_in_1, in_1.size()); @@ -113,7 +7075,8 @@ TEST_F(TestModulePWPWMultiDevice, set_3d_fft_box_op_gpu) synchronize_memory_complex_d2h_op()(res.data(), d_res, res.size()); - for (int ii = 0; ii < this->nxyz; ii++) { + for (int ii = 0; ii < this->nxyz; ii++) + { EXPECT_LT(fabs(res[ii] - out_1[ii]), 1e-12); } delete_memory_int_gpu_op()(d_box_index); @@ -124,7 +7087,7 @@ TEST_F(TestModulePWPWMultiDevice, set_3d_fft_box_op_gpu) TEST_F(TestModulePWPWMultiDevice, set_recip_to_real_output_op_gpu) { std::vector> res(out_2.size(), std::complex{0, 0}); - std::complex* d_res = NULL, * d_in_2 = NULL; + std::complex*d_res = NULL, *d_in_2 = NULL; resize_memory_complex_gpu_op()(d_res, res.size()); resize_memory_complex_gpu_op()(d_in_2, in_2.size()); synchronize_memory_complex_h2d_op()(d_res, res.data(), res.size()); @@ -134,7 +7097,8 @@ TEST_F(TestModulePWPWMultiDevice, set_recip_to_real_output_op_gpu) synchronize_memory_complex_d2h_op()(res.data(), d_res, res.size()); - for (int ii = 0; ii < this->nxyz; ii++) { + for (int ii = 0; ii < this->nxyz; ii++) + { EXPECT_LT(fabs(res[ii] - out_2[ii]), 1e-12); } delete_memory_complex_gpu_op()(d_res); @@ -144,8 +7108,8 @@ TEST_F(TestModulePWPWMultiDevice, set_recip_to_real_output_op_gpu) TEST_F(TestModulePWPWMultiDevice, set_real_to_recip_output_op_gpu) { std::vector> res = out_3_init; - int * d_box_index = NULL; - std::complex* d_res = NULL, * d_in_3 = NULL; + int* d_box_index = NULL; + std::complex*d_res = NULL, *d_in_3 = NULL; resize_memory_int_gpu_op()(d_box_index, box_index.size()); resize_memory_complex_gpu_op()(d_res, res.size()); resize_memory_complex_gpu_op()(d_in_3, in_3.size()); @@ -157,7 +7121,8 @@ TEST_F(TestModulePWPWMultiDevice, set_real_to_recip_output_op_gpu) synchronize_memory_complex_d2h_op()(res.data(), d_res, res.size()); - for (int ii = 0; ii < out_3.size(); ii++) { + for (int ii = 0; ii < out_3.size(); ii++) + { EXPECT_LT(fabs(res[ii] - out_3[ii]), 5e-6); } delete_memory_int_gpu_op()(d_box_index); diff --git a/source/module_basis/module_pw/module_fft/fft_bundle.cpp b/source/module_basis/module_pw/module_fft/fft_bundle.cpp index 7c0edeab08..5a7fe04f02 100644 --- a/source/module_basis/module_pw/module_fft/fft_bundle.cpp +++ b/source/module_basis/module_pw/module_fft/fft_bundle.cpp @@ -1,8 +1,8 @@ #include "fft_bundle.h" -#include "module_base/module_device/device.h" -#include "module_base/module_device/memory_op.h" -#include "module_base/tool_quit.h" +#include "source_base/module_device/device.h" +#include "source_base/module_device/memory_op.h" +#include "source_base/tool_quit.h" #include #if defined(__CUDA) @@ -64,7 +64,9 @@ void FFT_Bundle::initfft(int nx_in, else if (this->precision == "double") { double_flag = true; - }else{ + } + else + { ModuleBase::WARNING_QUIT("FFT_Bundle", "Please set the precision to single or double or mixing"); } #if defined(__DSP) @@ -76,9 +78,10 @@ void FFT_Bundle::initfft(int nx_in, } fft_double = make_unique>(); fft_double->initfft(nx_in, ny_in, nz_in); - }else + } + else #endif - if (device == "cpu") + if (device == "cpu") { if (float_flag) { @@ -92,7 +95,8 @@ void FFT_Bundle::initfft(int nx_in, fft_double ->initfft(nx_in, ny_in, nz_in, lixy_in, rixy_in, ns_in, nplane_in, nproc_in, gamma_only_in, xprime_in); } - }else if (device == "gpu") + } + else if (device == "gpu") { #if defined(__ROCM) fft_float = make_unique>(); @@ -105,7 +109,9 @@ void FFT_Bundle::initfft(int nx_in, fft_double = make_unique>(); fft_double->initfft(nx_in, ny_in, nz_in); #endif - }else{ + } + else + { ModuleBase::WARNING_QUIT("FFT_Bundle", "Please set the device to cpu or gpu or dsp"); } } @@ -148,7 +154,7 @@ void FFT_Bundle::clear() void FFT_Bundle::resource_handler(const int flag) const { - if (this->device=="dsp") + if (this->device == "dsp") { if (double_flag) { @@ -227,27 +233,23 @@ void FFT_Bundle::fftxyc2r(std::complex* in, double* out) const } template <> -void FFT_Bundle::fft3D_forward(std::complex* in, - std::complex* out) const +void FFT_Bundle::fft3D_forward(std::complex* in, std::complex* out) const { fft_float->fft3D_forward(in, out); } template <> -void FFT_Bundle::fft3D_forward(std::complex* in, - std::complex* out) const +void FFT_Bundle::fft3D_forward(std::complex* in, std::complex* out) const { fft_double->fft3D_forward(in, out); } template <> -void FFT_Bundle::fft3D_backward(std::complex* in, - std::complex* out) const +void FFT_Bundle::fft3D_backward(std::complex* in, std::complex* out) const { fft_float->fft3D_backward(in, out); } template <> -void FFT_Bundle::fft3D_backward(std::complex* in, - std::complex* out) const +void FFT_Bundle::fft3D_backward(std::complex* in, std::complex* out) const { fft_double->fft3D_backward(in, out); } diff --git a/source/module_basis/module_pw/module_fft/fft_cuda.cpp b/source/module_basis/module_pw/module_fft/fft_cuda.cpp index aab80e2944..6f9afc6349 100644 --- a/source/module_basis/module_pw/module_fft/fft_cuda.cpp +++ b/source/module_basis/module_pw/module_fft/fft_cuda.cpp @@ -1,7 +1,7 @@ #include "fft_cuda.h" -#include "module_base/module_device/memory_op.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/module_device/memory_op.h" namespace ModulePW { diff --git a/source/module_basis/module_pw/module_fft/fft_dsp.cpp b/source/module_basis/module_pw/module_fft/fft_dsp.cpp index a463f340cc..84f2dcbb69 100644 --- a/source/module_basis/module_pw/module_fft/fft_dsp.cpp +++ b/source/module_basis/module_pw/module_fft/fft_dsp.cpp @@ -1,6 +1,6 @@ #include "fft_dsp.h" -#include "module_base/global_variable.h" +#include "source_base/global_variable.h" #include #include @@ -24,14 +24,14 @@ void FFT_DSP::setupFFT() PLAN* ptr_plan_forward; PLAN* ptr_plan_backward; INT num_thread = 8; - INT size=0; + INT size = 0; hthread_dat_load(cluster_id, FFT_DAT_DIR); // compute the size of and malloc thread size = nx * ny * nz * 2 * sizeof(E); forward_in = (E*)hthread_malloc((int)cluster_id, size, HT_MEM_RW); - //init 3d fft problem + // init 3d fft problem pbm_forward.num_dim = 3; pbm_forward.n[0] = nx; pbm_forward.n[1] = ny; @@ -40,7 +40,7 @@ void FFT_DSP::setupFFT() pbm_forward.in = forward_in; pbm_forward.out = forward_in; - //make ptr plan + // make ptr plan make_plan(&pbm_forward, &ptr_plan_forward, cluster_id, num_thread); ptr_plan_forward->in = forward_in; ptr_plan_forward->out = forward_in; @@ -68,7 +68,7 @@ void FFT_DSP::resource_handler(const int flag) const hthread_barrier_destroy(b_id); hthread_group_destroy(thread_id_for); } - else if (flag==1) + else if (flag == 1) { INT num_thread = 8; thread_id_for = hthread_group_create(cluster_id, num_thread, NULL, 0, 0, NULL); @@ -76,7 +76,9 @@ void FFT_DSP::resource_handler(const int flag) const b_id = hthread_barrier_create(cluster_id); args_for[0] = b_id; args_back[0] = b_id; - }else{ + } + else + { ModuleBase::WARNING_QUIT("FFT_DSP", "Error use of fft resource handle"); } } diff --git a/source/module_basis/module_pw/module_fft/fft_rocm.cpp b/source/module_basis/module_pw/module_fft/fft_rocm.cpp index 1dd9c433ec..8b4412e408 100644 --- a/source/module_basis/module_pw/module_fft/fft_rocm.cpp +++ b/source/module_basis/module_pw/module_fft/fft_rocm.cpp @@ -1,12 +1,11 @@ #include "fft_rocm.h" -#include "module_base/module_device/memory_op.h" + #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/module_device/memory_op.h" namespace ModulePW { template -void FFT_ROCM::initfft(int nx_in, - int ny_in, - int nz_in) +void FFT_ROCM::initfft(int nx_in, int ny_in, int nz_in) { this->nx = nx_in; this->ny = ny_in; @@ -17,9 +16,8 @@ void FFT_ROCM::setupFFT() { hipfftPlan3d(&c_handle, this->nx, this->ny, this->nz, HIPFFT_C2C); resmem_cd_op()(this->c_auxr_3d, this->nx * this->ny * this->nz); - } -template <> +template <> void FFT_ROCM::setupFFT() { hipfftPlan3d(&z_handle, this->nx, this->ny, this->nz, HIPFFT_Z2Z); @@ -64,47 +62,49 @@ void FFT_ROCM::clear() } } template <> -void FFT_ROCM::fft3D_forward(std::complex* in, - std::complex* out) const +void FFT_ROCM::fft3D_forward(std::complex* in, std::complex* out) const { - CHECK_CUFFT(hipfftExecC2C(this->c_handle, + CHECK_CUFFT(hipfftExecC2C(this->c_handle, reinterpret_cast(in), - reinterpret_cast(out), + reinterpret_cast(out), HIPFFT_FORWARD)); } template <> -void FFT_ROCM::fft3D_forward(std::complex* in, - std::complex* out) const +void FFT_ROCM::fft3D_forward(std::complex* in, std::complex* out) const { - CHECK_CUFFT(hipfftExecZ2Z(this->z_handle, + CHECK_CUFFT(hipfftExecZ2Z(this->z_handle, reinterpret_cast(in), - reinterpret_cast(out), + reinterpret_cast(out), HIPFFT_FORWARD)); } template <> -void FFT_ROCM::fft3D_backward(std::complex* in, - std::complex* out) const +void FFT_ROCM::fft3D_backward(std::complex* in, std::complex* out) const { - CHECK_CUFFT(hipfftExecC2C(this->c_handle, + CHECK_CUFFT(hipfftExecC2C(this->c_handle, reinterpret_cast(in), - reinterpret_cast(out), + reinterpret_cast(out), HIPFFT_BACKWARD)); } template <> -void FFT_ROCM::fft3D_backward(std::complex* in, - std::complex* out) const +void FFT_ROCM::fft3D_backward(std::complex* in, std::complex* out) const { - CHECK_CUFFT(hipfftExecZ2Z(this->z_handle, + CHECK_CUFFT(hipfftExecZ2Z(this->z_handle, reinterpret_cast(in), - reinterpret_cast(out), + reinterpret_cast(out), HIPFFT_BACKWARD)); } -template <> std::complex* -FFT_ROCM::get_auxr_3d_data() const {return this->c_auxr_3d;} -template <> std::complex* -FFT_ROCM::get_auxr_3d_data() const {return this->z_auxr_3d;} +template <> +std::complex* FFT_ROCM::get_auxr_3d_data() const +{ + return this->c_auxr_3d; +} +template <> +std::complex* FFT_ROCM::get_auxr_3d_data() const +{ + return this->z_auxr_3d; +} template FFT_ROCM::FFT_ROCM(); template FFT_ROCM::~FFT_ROCM(); template FFT_ROCM::FFT_ROCM(); template FFT_ROCM::~FFT_ROCM(); -}// namespace ModulePW \ No newline at end of file +} // namespace ModulePW \ No newline at end of file diff --git a/source/module_basis/module_pw/pw_basis.cpp b/source/module_basis/module_pw/pw_basis.cpp index f4f7abf1dd..8322ae338a 100644 --- a/source/module_basis/module_pw/pw_basis.cpp +++ b/source/module_basis/module_pw/pw_basis.cpp @@ -1,26 +1,28 @@ #include "pw_basis.h" -#include -#include "module_base/mymath.h" -#include "module_base/timer.h" -#include "module_base/global_function.h" +#include "source_base/global_function.h" +#include "source_base/mymath.h" +#include "source_base/timer.h" +#include namespace ModulePW { PW_Basis::PW_Basis() { - classname="PW_Basis"; + classname = "PW_Basis"; } -PW_Basis::PW_Basis(std::string device_, std::string precision_) : device(std::move(device_)), precision(std::move(precision_)) { - classname="PW_Basis"; - this->fft_bundle.setfft("cpu",this->precision); +PW_Basis::PW_Basis(std::string device_, std::string precision_) + : device(std::move(device_)), precision(std::move(precision_)) +{ + classname = "PW_Basis"; + this->fft_bundle.setfft("cpu", this->precision); this->double_data_ = (this->precision == "double") || (this->precision == "mixing"); - this->float_data_ = (this->precision == "single") || (this->precision == "mixing"); + this->float_data_ = (this->precision == "single") || (this->precision == "mixing"); } -PW_Basis:: ~PW_Basis() +PW_Basis::~PW_Basis() { delete[] ig2isz; delete[] istot2ixy; @@ -48,7 +50,7 @@ PW_Basis:: ~PW_Basis() #endif } -/// +/// /// distribute plane wave basis and real-space grids to different processors /// set up maps for fft and create arrays for MPI_Alltoall /// set up ffts @@ -60,14 +62,32 @@ void PW_Basis::setuptransform() this->distribute_g(); this->getstartgr(); this->fft_bundle.clear(); - - if(this->xprime) + + if (this->xprime) { - this->fft_bundle.initfft(this->nx,this->ny,this->nz,this->lix,this->rix,this->nst,this->nplane,this->poolnproc,this->gamma_only, this->xprime); + this->fft_bundle.initfft(this->nx, + this->ny, + this->nz, + this->lix, + this->rix, + this->nst, + this->nplane, + this->poolnproc, + this->gamma_only, + this->xprime); } - else + else { - this->fft_bundle.initfft(this->nx,this->ny,this->nz,this->liy,this->riy,this->nst,this->nplane,this->poolnproc,this->gamma_only, this->xprime); + this->fft_bundle.initfft(this->nx, + this->ny, + this->nz, + this->liy, + this->riy, + this->nst, + this->nplane, + this->poolnproc, + this->gamma_only, + this->xprime); } this->fft_bundle.setupFFT(); ModuleBase::timer::tick(this->classname, "setuptransform"); @@ -75,54 +95,55 @@ void PW_Basis::setuptransform() void PW_Basis::getstartgr() { - if(this->gamma_only) + if (this->gamma_only) { - this->nmaxgr = ( this->npw > (this->nrxx+1)/2 ) ? this->npw : (this->nrxx+1)/2; + this->nmaxgr = (this->npw > (this->nrxx + 1) / 2) ? this->npw : (this->nrxx + 1) / 2; } else { - this->nmaxgr = ( this->npw > this->nrxx ) ? this->npw : this->nrxx; + this->nmaxgr = (this->npw > this->nrxx) ? this->npw : this->nrxx; } - + //--------------------------------------------- - // sum : starting plane of FFT box. - //--------------------------------------------- - delete[] this->numg; this->numg = new int[poolnproc]; - delete[] this->startg; this->startg = new int[poolnproc]; - delete[] this->startr; this->startr = new int[poolnproc]; - delete[] this->numr; this->numr = new int[poolnproc]; + // sum : starting plane of FFT box. + //--------------------------------------------- + delete[] this->numg; + this->numg = new int[poolnproc]; + delete[] this->startg; + this->startg = new int[poolnproc]; + delete[] this->startr; + this->startr = new int[poolnproc]; + delete[] this->numr; + this->numr = new int[poolnproc]; - // Each processor has a set of full sticks, - // 'rank_use' processor send a piece(npps[ip]) of these sticks(nst_per[rank_use]) - // to all the other processors in this pool - for (int ip = 0;ip < poolnproc; ++ip) + // Each processor has a set of full sticks, + // 'rank_use' processor send a piece(npps[ip]) of these sticks(nst_per[rank_use]) + // to all the other processors in this pool + for (int ip = 0; ip < poolnproc; ++ip) { this->numg[ip] = this->nst_per[poolrank] * this->numz[ip]; } - - // Each processor in a pool send a piece of each stick(nst_per[ip]) to - // other processors in this pool - // rank_use processor receive datas in npps[rank_p] planes. - for (int ip = 0;ip < poolnproc; ++ip) + // Each processor in a pool send a piece of each stick(nst_per[ip]) to + // other processors in this pool + // rank_use processor receive datas in npps[rank_p] planes. + for (int ip = 0; ip < poolnproc; ++ip) { this->numr[ip] = this->nst_per[ip] * this->numz[poolrank]; } - - // startg record the starting 'numg' position in each processor. - this->startg[0] = 0; - for (int ip = 1;ip < poolnproc; ++ip) + // startg record the starting 'numg' position in each processor. + this->startg[0] = 0; + for (int ip = 1; ip < poolnproc; ++ip) { - this->startg[ip] = this->startg[ip-1] + this->numg[ip-1]; + this->startg[ip] = this->startg[ip - 1] + this->numg[ip - 1]; } - - // startr record the starting 'numr' position - this->startr[0] = 0; - for (int ip = 1;ip < poolnproc; ++ip) + // startr record the starting 'numr' position + this->startr[0] = 0; + for (int ip = 1; ip < poolnproc; ++ip) { - this->startr[ip] = this->startr[ip-1] + this->numr[ip-1]; + this->startr[ip] = this->startr[ip - 1] + this->numr[ip - 1]; } return; } @@ -131,20 +152,23 @@ void PW_Basis::getstartgr() /// Collect planewaves on current core, and construct gg, gdirect, gcar according to ig2isz and is2fftixy. /// known: ig2isz, is2fftixy /// output: gg, gdirect, gcar -/// +/// void PW_Basis::collect_local_pw() { - if(this->npw <= 0) + if (this->npw <= 0) { return; } this->ig_gge0 = -1; - delete[] this->gg; this->gg = new double[this->npw]; - delete[] this->gdirect; this->gdirect = new ModuleBase::Vector3[this->npw]; - delete[] this->gcar; this->gcar = new ModuleBase::Vector3[this->npw]; + delete[] this->gg; + this->gg = new double[this->npw]; + delete[] this->gdirect; + this->gdirect = new ModuleBase::Vector3[this->npw]; + delete[] this->gcar; + this->gcar = new ModuleBase::Vector3[this->npw]; ModuleBase::Vector3 f; - for(int ig = 0 ; ig < this-> npw ; ++ig) + for (int ig = 0; ig < this->npw; ++ig) { int isz = this->ig2isz[ig]; int iz = isz % this->nz; @@ -152,15 +176,15 @@ void PW_Basis::collect_local_pw() int ixy = this->is2fftixy[is]; int ix = ixy / this->fftny; int iy = ixy % this->fftny; - if (ix >= int(this->nx/2) + 1) + if (ix >= int(this->nx / 2) + 1) { ix -= this->nx; } - if (iy >= int(this->ny/2) + 1) + if (iy >= int(this->ny / 2) + 1) { iy -= this->ny; } - if (iz >= int(this->nz/2) + 1) + if (iz >= int(this->nz / 2) + 1) { iz -= this->nz; } @@ -170,7 +194,7 @@ void PW_Basis::collect_local_pw() this->gg[ig] = f * (this->GGT * f); this->gdirect[ig] = f; this->gcar[ig] = f * this->G; - if(this->gg[ig] < 1e-8) + if (this->gg[ig] < 1e-8) { this->ig_gge0 = ig; } @@ -182,21 +206,24 @@ void PW_Basis::collect_local_pw() /// Collect modulus of planewaves on current cores /// known: ig2isz, is2fftixy /// output: ig2igg, gg_uniq, ngg -/// +/// void PW_Basis::collect_uniqgg() { - if(this->npw <= 0) + if (this->npw <= 0) { return; } this->ig_gge0 = -1; - delete[] this->ig2igg; this->ig2igg = new int [this->npw]; - - int *sortindex = new int [this->npw];//Reconstruct the mapping of the plane wave index ig according to the energy size of the plane waves - double *tmpgg = new double [this->npw];//Ranking the plane waves by energy size while ensuring that the same energy is preserved for each wave to correspond - double *tmpgg2 = new double [this->npw];//ranking the plane waves by energy size and removing the duplicates + delete[] this->ig2igg; + this->ig2igg = new int[this->npw]; + + int* sortindex = new int[this->npw]; // Reconstruct the mapping of the plane wave index ig according to the energy + // size of the plane waves + double* tmpgg = new double[this->npw]; // Ranking the plane waves by energy size while ensuring that the same energy + // is preserved for each wave to correspond + double* tmpgg2 = new double[this->npw]; // ranking the plane waves by energy size and removing the duplicates ModuleBase::Vector3 f; - for(int ig = 0 ; ig < this-> npw ; ++ig) + for (int ig = 0; ig < this->npw; ++ig) { int isz = this->ig2isz[ig]; int iz = isz % this->nz; @@ -204,15 +231,15 @@ void PW_Basis::collect_uniqgg() int ixy = this->is2fftixy[is]; int ix = ixy / this->fftny; int iy = ixy % this->fftny; - if (ix >= int(this->nx/2) + 1) + if (ix >= int(this->nx / 2) + 1) { ix -= this->nx; } - if (iy >= int(this->ny/2) + 1) + if (iy >= int(this->ny / 2) + 1) { iy -= this->ny; } - if (iz >= int(this->nz/2) + 1) + if (iz >= int(this->nz / 2) + 1) { iz -= this->nz; } @@ -220,7 +247,7 @@ void PW_Basis::collect_uniqgg() f.y = iy; f.z = iz; tmpgg[ig] = f * (this->GGT * f); - if(tmpgg[ig] < 1e-8) + if (tmpgg[ig] < 1e-8) { this->ig_gge0 = ig; } @@ -228,13 +255,12 @@ void PW_Basis::collect_uniqgg() ModuleBase::GlobalFunc::ZEROS(sortindex, this->npw); ModuleBase::heapsort(this->npw, tmpgg, sortindex); - int igg = 0; this->ig2igg[sortindex[0]] = 0; tmpgg2[0] = tmpgg[0]; - double avg_gg = tmpgg2[igg];//For waves with similar energy,take the average - int avg_n = 1;//The number of waves required to take the average + double avg_gg = tmpgg2[igg]; // For waves with similar energy,take the average + int avg_n = 1; // The number of waves required to take the average for (int ig = 1; ig < this->npw; ++ig) { if (std::abs(tmpgg[ig] - tmpgg2[igg]) > 1.0e-8) @@ -243,7 +269,7 @@ void PW_Basis::collect_uniqgg() ++igg; tmpgg2[igg] = tmpgg[ig]; avg_gg = tmpgg2[igg]; - avg_n = 1; + avg_n = 1; } else { @@ -254,29 +280,30 @@ void PW_Basis::collect_uniqgg() } tmpgg2[igg] = avg_gg / double(avg_n); this->ngg = igg + 1; - delete[] this->gg_uniq; this->gg_uniq = new double [this->ngg]; - for(int igg = 0 ; igg < this->ngg ; ++igg) + delete[] this->gg_uniq; + this->gg_uniq = new double[this->ngg]; + for (int igg = 0; igg < this->ngg; ++igg) { - gg_uniq[igg] = tmpgg2[igg]; + gg_uniq[igg] = tmpgg2[igg]; } delete[] sortindex; delete[] tmpgg; delete[] tmpgg2; } -void PW_Basis::getfftixy2is(int * fftixy2is) const +void PW_Basis::getfftixy2is(int* fftixy2is) const { -//Note: please assert when is1 >= is2, fftixy2is[is1] >= fftixy2is[is2]! - for(int ixy = 0 ; ixy < this->fftnxy ; ++ixy) + // Note: please assert when is1 >= is2, fftixy2is[is1] >= fftixy2is[is2]! + for (int ixy = 0; ixy < this->fftnxy; ++ixy) { fftixy2is[ixy] = -1; } int ixy = 0; - for(int is = 0; is < this->nst; ++is) + for (int is = 0; is < this->nst; ++is) { - for(; ixy < this->fftnxy ; ++ixy) + for (; ixy < this->fftnxy; ++ixy) { - if(this->is2fftixy[is] == ixy) + if (this->is2fftixy[is] == ixy) { fftixy2is[ixy] = is; ++ixy; @@ -286,12 +313,14 @@ void PW_Basis::getfftixy2is(int * fftixy2is) const } } -void PW_Basis::set_device(std::string device_) { +void PW_Basis::set_device(std::string device_) +{ this->device = std::move(device_); } -void PW_Basis::set_precision(std::string precision_) { +void PW_Basis::set_precision(std::string precision_) +{ this->precision = std::move(precision_); } -} +} // namespace ModulePW diff --git a/source/module_basis/module_pw/pw_basis.h b/source/module_basis/module_pw/pw_basis.h index e0f5dd071b..f991ec8ac7 100644 --- a/source/module_basis/module_pw/pw_basis.h +++ b/source/module_basis/module_pw/pw_basis.h @@ -1,13 +1,14 @@ #ifndef PWBASIS_H #define PWBASIS_H -#include "module_base/macros.h" -#include "module_base/module_device/memory_op.h" -#include "module_base/matrix.h" -#include "module_base/matrix3.h" -#include "module_base/vector3.h" -#include #include "module_fft/fft_bundle.h" +#include "source_base/macros.h" +#include "source_base/matrix.h" +#include "source_base/matrix3.h" +#include "source_base/module_device/memory_op.h" +#include "source_base/vector3.h" + +#include #include #ifdef __MPI #include "mpi.h" @@ -35,7 +36,8 @@ namespace ModulePW * pwtest.initgrids(lat0,latvec,gridecut); * pwtest.initgrids(lat0,latvec,N1,N2,N3); * //double lat0: unit length, (unit: bohr) - * //ModuleBase::Matrix3 latvec: lattice vector, (unit: lat0), e.g. ModuleBase::Matrix3 latvec(1, 1, 0, 0, 2, 0, 0, 0, 2); + * //ModuleBase::Matrix3 latvec: lattice vector, (unit: lat0), e.g. ModuleBase::Matrix3 latvec(1, 1, 0, 0, 2, 0, 0, 0, + * 2); * //double gridecut: cutoff energy to generate FFT grids, (unit: Ry) * //int N1,N2,N3: FFT grids * 2. init parameters @@ -55,199 +57,190 @@ namespace ModulePW class PW_Basis { -public: + public: std::string classname; PW_Basis(); PW_Basis(std::string device_, std::string precision_); virtual ~PW_Basis(); - //Init mpi parameters + // Init mpi parameters #ifdef __MPI - void initmpi( - const int poolnproc_in, // Number of processors in this pool - const int poolrank_in, // Rank in this pool - MPI_Comm pool_world_in //Comm world for pw_basis + void initmpi(const int poolnproc_in, // Number of processors in this pool + const int poolrank_in, // Rank in this pool + MPI_Comm pool_world_in // Comm world for pw_basis ); #endif - //Init the grids for FFT - virtual void initgrids( - const double lat0_in, //unit length (unit in bohr) - const ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors (unit in lat0) - const double gridecut //unit in Ry, ecut to set up grids - ); - //Init the grids for FFT - virtual void initgrids( - const double lat0_in, - const ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors - const int nx_in, int ny_in, int nz_in - ); - - //Init some parameters - void initparameters( - const bool gamma_only_in, - const double pwecut_in, //unit in Ry, ecut to decides plane waves - const int distribution_type_in = 1, - const bool xprime_in = true + // Init the grids for FFT + virtual void initgrids(const double lat0_in, // unit length (unit in bohr) + const ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors (unit in lat0) + const double gridecut // unit in Ry, ecut to set up grids ); - - //Set parameters about full planewave, only used in OFDFT for now. - void setfullpw( - const bool inpt_full_pw = false, - const int inpt_full_pw_dim = 0 - ); -//=============================================== -// distribution maps -//=============================================== -public: + // Init the grids for FFT + virtual void initgrids(const double lat0_in, + const ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors + const int nx_in, + int ny_in, + int nz_in); + + // Init some parameters + void initparameters(const bool gamma_only_in, + const double pwecut_in, // unit in Ry, ecut to decides plane waves + const int distribution_type_in = 1, + const bool xprime_in = true); + + // Set parameters about full planewave, only used in OFDFT for now. + void setfullpw(const bool inpt_full_pw = false, const int inpt_full_pw_dim = 0); + //=============================================== + // distribution maps + //=============================================== + public: #ifdef __MPI - MPI_Comm pool_world=MPI_COMM_NULL; + MPI_Comm pool_world = MPI_COMM_NULL; #endif - int *ig2isz=nullptr; // map ig to (is, iz). - int *ig2ixyz_gpu = nullptr; - int *istot2ixy=nullptr; // istot2ixy[is]: iy + ix * ny of is^th stick among all sticks. - int *is2fftixy=nullptr, * d_is2fftixy = nullptr; // is2fftixy[is]: iy + ix * ny of is^th stick among sticks on current proc. - int *fftixy2ip=nullptr; // fftixy2ip[iy + ix * fftny]: ip of proc which contains stick on (ix, iy). if no stick: -1 - int nst=0; //num. of sticks in current proc. - int *nst_per=nullptr;// nst on each core - int nstnz=0; // nst * nz - int nstot=0; //num. of sticks in total. - int npw=0; //num. of plane waves in current proc. - int *npw_per=nullptr; //npw on each core - int npwtot=0; // total num. of plane waves in all proc. in this pool - - //real space - int nrxx=0; //num. of real space grids - int *startz=nullptr; //startz[ip]: starting z plane in the ip-th proc. in current POOL_WORLD - int *numz=nullptr; //numz[ip]: num. of z planes in the ip-th proc. in current POOL_WORLD - int *numg=nullptr; //numg[ip] : nst_per[poolrank] * numz[ip] - int *numr=nullptr; //numr[ip] : numz[poolrank] * nst_per[ip] - int *startg=nullptr; // startg[ip] = numg[ip-1] + startg[ip-1] - int *startr=nullptr; // startr[ip] = numr[ip-1] + startr[ip-1] - int startz_current=0; - int nplane=0; //num. of planes in current proc. - - ModuleBase::Vector3 *gdirect=nullptr; //(= *G1d) ; // ig = new Vector igc[npw] - ModuleBase::Vector3 *gcar=nullptr; //G vectors in cartesian corrdinate - double *gg=nullptr; // modulus (G^2) of G vectors [npw] - //gg[ng]=ig[ng]*GGT*ig[ng]/(lat0*lat0)=g[ng]*g[ng] (/lat0*lat0) - // gg_global dimension: [cutgg_num_now] (save memory skill is used) - int ig_gge0=-1; //ig when gg == 0 - - //distribute plane waves and grids and set up fft + int* ig2isz = nullptr; // map ig to (is, iz). + int* ig2ixyz_gpu = nullptr; + int* istot2ixy = nullptr; // istot2ixy[is]: iy + ix * ny of is^th stick among all sticks. + int *is2fftixy = nullptr, + *d_is2fftixy = nullptr; // is2fftixy[is]: iy + ix * ny of is^th stick among sticks on current proc. + int* fftixy2ip + = nullptr; // fftixy2ip[iy + ix * fftny]: ip of proc which contains stick on (ix, iy). if no stick: -1 + int nst = 0; // num. of sticks in current proc. + int* nst_per = nullptr; // nst on each core + int nstnz = 0; // nst * nz + int nstot = 0; // num. of sticks in total. + int npw = 0; // num. of plane waves in current proc. + int* npw_per = nullptr; // npw on each core + int npwtot = 0; // total num. of plane waves in all proc. in this pool + + // real space + int nrxx = 0; // num. of real space grids + int* startz = nullptr; // startz[ip]: starting z plane in the ip-th proc. in current POOL_WORLD + int* numz = nullptr; // numz[ip]: num. of z planes in the ip-th proc. in current POOL_WORLD + int* numg = nullptr; // numg[ip] : nst_per[poolrank] * numz[ip] + int* numr = nullptr; // numr[ip] : numz[poolrank] * nst_per[ip] + int* startg = nullptr; // startg[ip] = numg[ip-1] + startg[ip-1] + int* startr = nullptr; // startr[ip] = numr[ip-1] + startr[ip-1] + int startz_current = 0; + int nplane = 0; // num. of planes in current proc. + + ModuleBase::Vector3* gdirect = nullptr; //(= *G1d) ; // ig = new Vector igc[npw] + ModuleBase::Vector3* gcar = nullptr; // G vectors in cartesian corrdinate + double* gg = nullptr; // modulus (G^2) of G vectors [npw] + // gg[ng]=ig[ng]*GGT*ig[ng]/(lat0*lat0)=g[ng]*g[ng] (/lat0*lat0) + // gg_global dimension: [cutgg_num_now] (save memory skill is used) + int ig_gge0 = -1; // ig when gg == 0 + + // distribute plane waves and grids and set up fft void setuptransform(); -protected: - int *startnsz_per=nullptr;//useless intermediate variable// startnsz_per[ip]: starting is * nz stick in the ip^th proc. + protected: + int* startnsz_per + = nullptr; // useless intermediate variable// startnsz_per[ip]: starting is * nz stick in the ip^th proc. - //distribute plane waves to different processors + // distribute plane waves to different processors void distribute_g(); - //distribute real-space grids to different processors + // distribute real-space grids to different processors virtual void distribute_r(); - //prepare for MPI_Alltoall + // prepare for MPI_Alltoall void getstartgr(); - -public: - //collect gdirect, gcar, gg + public: + // collect gdirect, gcar, gg void collect_local_pw(); -public: - int ngg=0; //number of different modulus (G^2) of G vectors - int *ig2igg=nullptr;//[npw] map ig to igg(nstot) (in distributeg method1 and method2) - void count_pw_st( - int* st_length2D, // the number of planewaves that belong to the stick located on (x, y). - int* st_bottom2D // the z-coordinate of the bottom of stick on (x, y). + // Count the total number of planewaves (tot_npw) and sticks (this->nstot) (in distributeg method1 and method2) + void count_pw_st(int* st_length2D, // the number of planewaves that belong to the stick located on (x, y). + int* st_bottom2D // the z-coordinate of the bottom of stick on (x, y). ); - //get ig2isz and is2fftixy - void get_ig2isz_is2fftixy( - int* st_bottom, // minimum z of stick, stored in 1d array with tot_nst elements. - int* st_length // the stick on (x, y) consists of st_length[x*fftny+y] planewaves. + // get ig2isz and is2fftixy + void get_ig2isz_is2fftixy(int* st_bottom, // minimum z of stick, stored in 1d array with tot_nst elements. + int* st_length // the stick on (x, y) consists of st_length[x*fftny+y] planewaves. ); - //Collect the x, y indexs, length of the sticks (in distributeg method1) - void collect_st( - int* st_length2D, // the number of planewaves that belong to the stick located on (x, y), stored in 2d x-y plane. - int* st_bottom2D, // the z-coordinate of the bottom of stick on (x, y), stored in 2d x-y plane. - int* st_i, // x or x + fftnx (if x < 0) of stick. - int* st_j, // y or y + fftny (if y < 0) of stick. - int* st_length // number of planewaves in stick, stored in 1d array with tot_nst elements. + // Collect the x, y indexs, length of the sticks (in distributeg method1) + void collect_st(int* st_length2D, // the number of planewaves that belong to the stick located on (x, y), stored in + // 2d x-y plane. + int* st_bottom2D, // the z-coordinate of the bottom of stick on (x, y), stored in 2d x-y plane. + int* st_i, // x or x + fftnx (if x < 0) of stick. + int* st_j, // y or y + fftny (if y < 0) of stick. + int* st_length // number of planewaves in stick, stored in 1d array with tot_nst elements. ); - //get istot2ixy - void get_istot2ixy( - int* st_i, // x or x + fftnx (if x < 0) of stick. - int* st_j // y or y + fftny (if y < 0) of stick. + // get istot2ixy + void get_istot2ixy(int* st_i, // x or x + fftnx (if x < 0) of stick. + int* st_j // y or y + fftny (if y < 0) of stick. ); - //Create the maps from ixy to (in method 2) + // Create the maps from ixy to (in method 2) void create_maps( - int* st_length2D // the number of planewaves that belong to the stick located on (x, y), stored in 2d x-y plane. + int* st_length2D // the number of planewaves that belong to the stick located on (x, y), stored in 2d x-y plane. ); -//=============================================== -// FFT -//=============================================== -public: - // FFT dimensions for wave functions. - int fftnx=0, fftny=0, fftnz=0, fftnxyz=0, fftnxy=0; - int nx=0, ny=0, nz=0, nxyz=0, nxy=0; // Gamma_only: fftny = int(ny/2)-1 , others: fftny = ny - int liy=0, riy=0;// liy: the left edge of the pw ball; riy: the right edge of the pw ball in the y direction - int lix=0, rix=0;// lix: the left edge of the pw ball; rix: the right edge of the pw ball in the x direction - bool xprime = true; // true: when do recip2real, x-fft will be done last and when doing real2recip, x-fft will be - // done first; false: y-fft For gamma_only, true: we use half x; false: we use half y - int ng_xeq0 = 0; //only used when xprime = true, number of g whose gx = 0 - int nmaxgr = 0; // Gamma_only: max between npw and (nrxx+1)/2, others: max between npw and nrxx - // Thus complex[nmaxgr] is able to contain either reciprocal or real data + //=============================================== + // FFT + //=============================================== + public: + // FFT dimensions for wave functions. + int fftnx = 0, fftny = 0, fftnz = 0, fftnxyz = 0, fftnxy = 0; + int nx = 0, ny = 0, nz = 0, nxyz = 0, nxy = 0; // Gamma_only: fftny = int(ny/2)-1 , others: fftny = ny + int liy = 0, riy = 0; // liy: the left edge of the pw ball; riy: the right edge of the pw ball in the y direction + int lix = 0, rix = 0; // lix: the left edge of the pw ball; rix: the right edge of the pw ball in the x direction + bool xprime = true; // true: when do recip2real, x-fft will be done last and when doing real2recip, x-fft will be + // done first; false: y-fft For gamma_only, true: we use half x; false: we use half y + int ng_xeq0 = 0; // only used when xprime = true, number of g whose gx = 0 + int nmaxgr = 0; // Gamma_only: max between npw and (nrxx+1)/2, others: max between npw and nrxx + // Thus complex[nmaxgr] is able to contain either reciprocal or real data // FFT ft; FFT_Bundle fft_bundle; - //The position of pointer in and out can be equal(in-place transform) or different(out-of-place transform). - + // The position of pointer in and out can be equal(in-place transform) or different(out-of-place transform). + template void real2recip(const FPTYPE* in, std::complex* out, @@ -268,27 +261,27 @@ class PW_Basis std::complex* out, const bool add = false, const FPTYPE factor = 1.0) const; // in:(nz, ns) ; out(nplane,nx*ny) - + template void real2recip_gpu(const FPTYPE* in, - std::complex* out, - const bool add = false, - const FPTYPE factor = 1.0) const; // in:(nplane,nx*ny) ; out(nz, ns) + std::complex* out, + const bool add = false, + const FPTYPE factor = 1.0) const; // in:(nplane,nx*ny) ; out(nz, ns) template void real2recip_gpu(const std::complex* in, - std::complex* out, - const bool add = false, - const FPTYPE factor = 1.0) const; // in:(nplane,nx*ny) ; out(nz, ns) + std::complex* out, + const bool add = false, + const FPTYPE factor = 1.0) const; // in:(nplane,nx*ny) ; out(nz, ns) template void recip2real_gpu(const std::complex* in, - FPTYPE* out, - const bool add = false, - const FPTYPE factor = 1.0) const; // in:(nz, ns) ; out(nplane,nx*ny) + FPTYPE* out, + const bool add = false, + const FPTYPE factor = 1.0) const; // in:(nz, ns) ; out(nplane,nx*ny) template void recip2real_gpu(const std::complex* in, - std::complex* out, - const bool add = false, - const FPTYPE factor = 1.0) const; // in:(nz, ns) ; out(nplane,nx*ny) + std::complex* out, + const bool add = false, + const FPTYPE factor = 1.0) const; // in:(nz, ns) ; out(nplane,nx*ny) /** * @brief Converts data from reciprocal space to real space on Cpu @@ -297,7 +290,8 @@ class PW_Basis * It supports complex types as input. * The output can be either the same fundamental type or the underlying real type of a complex type. * - * @tparam FPTYPE The type of the input data, which can only be a compelx type (e.g., std::complex, std::complex) + * @tparam FPTYPE The type of the input data, which can only be a compelx type (e.g., std::complex, + * std::complex) * @tparam Device The device type, must be base_device::DEVICE_CPU. * @tparam std::enable_if::type>::value, int>::type * SFINAE constraint to ensure that FPTYPE is a complex type. @@ -350,13 +344,10 @@ class PW_Basis && std::is_same::value, int>::type = 0> - void recip_to_real(TK* in, - TR* out, - const bool add = false, - const typename GetTypeReal::type factor = 1.0) const - { - this->recip2real_gpu(in,out,add,factor); - }; + void recip_to_real(TK* in, TR* out, const bool add = false, const typename GetTypeReal::type factor = 1.0) const + { + this->recip2real_gpu(in, out, add, factor); + }; // template ::type>::value - && (std::is_same::type>::value || std::is_same::value) - && std::is_same::value ,int>::type = 0> - void real_to_recip(TR* in, - TK* out, - const bool add = false, - const typename GetTypeReal::type factor = 1.0) const + template ::type>::value + && (std::is_same::type>::value + || std::is_same::value) + && std::is_same::value, + int>::type + = 0> + void real_to_recip(TR* in, TK* out, const bool add = false, const typename GetTypeReal::type factor = 1.0) const { this->real2recip(in, out, add, factor); } - template ::type>::value - && (std::is_same::type>::value || std::is_same::value) - && std::is_same::value ,int>::type = 0> - void real_to_recip(TR* in, - TK* out, - const bool add = false, - const typename GetTypeReal::type factor = 1.0) const - { - this->real2recip_gpu(in,out,add,factor); - }; + template ::type>::value + && (std::is_same::type>::value + || std::is_same::value) + && std::is_same::value, + int>::type + = 0> + void real_to_recip(TR* in, TK* out, const bool add = false, const typename GetTypeReal::type factor = 1.0) const + { + this->real2recip_gpu(in, out, add, factor); + }; protected: - //gather planes and scatter sticks of all processors + // gather planes and scatter sticks of all processors template void gatherp_scatters(std::complex* in, std::complex* out) const; @@ -421,25 +416,25 @@ class PW_Basis void gathers_scatterp(std::complex* in, std::complex* out) const; public: - //get fftixy2is; - void getfftixy2is(int * fftixy2is) const; + // get fftixy2is; + void getfftixy2is(int* fftixy2is) const; using resmem_int_op = base_device::memory::resize_memory_op; using delmem_int_op = base_device::memory::delete_memory_op; - using syncmem_int_h2d_op = base_device::memory::synchronize_memory_op; + using syncmem_int_h2d_op + = base_device::memory::synchronize_memory_op; // using default_device_cpu = base_device::DEVICE_CPU; - + void set_device(std::string device_); void set_precision(std::string precision_); -protected: - - std::string device = "cpu"; ///< cpu or gpu - std::string precision = "double"; ///< single, double, mixing - bool double_data_ = true; ///< if has double data - bool float_data_ = false; ///< if has float data + protected: + std::string device = "cpu"; ///< cpu or gpu + std::string precision = "double"; ///< single, double, mixing + bool double_data_ = true; ///< if has double data + bool float_data_ = false; ///< if has float data }; -} -#endif // PWBASIS_H -#include "pw_basis_sup.h" +} // namespace ModulePW +#endif // PWBASIS_H #include "pw_basis_big.h" //temporary it will be removed +#include "pw_basis_sup.h" diff --git a/source/module_basis/module_pw/pw_basis_big.h b/source/module_basis/module_pw/pw_basis_big.h index 18aa822f44..a5e9d119bf 100644 --- a/source/module_basis/module_pw/pw_basis_big.h +++ b/source/module_basis/module_pw/pw_basis_big.h @@ -1,12 +1,12 @@ #ifndef PW_BASIS_BIG_H #define PW_BASIS_BIG_H -#include "module_base/constants.h" -#include "module_base/global_function.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" #ifdef __MPI #include "mpi.h" #endif -// temporary class, because previous ABACUS consider big grid for fft grids +// temporary class, because previous ABACUS consider big grid for fft grids // which are used for grid integration in LCAO. // In fact, it is unnecessary. It will be moved after grid integration is refactored. namespace ModulePW @@ -14,16 +14,16 @@ namespace ModulePW class PW_Basis_Big : public PW_Basis_Sup { -public: - // combine [bx,by,bz] FFT grids into a big one - // typical values are bx=2, by=2, bz=2 - // nbx=nx/bx, nby=ny/by, nbz=nz/bz, - PW_Basis_Big() - { - } - PW_Basis_Big(std::string device_, std::string precision_) : PW_Basis_Sup(device_, precision_) - { - } + public: + // combine [bx,by,bz] FFT grids into a big one + // typical values are bx=2, by=2, bz=2 + // nbx=nx/bx, nby=ny/by, nbz=nz/bz, + PW_Basis_Big() + { + } + PW_Basis_Big(std::string device_, std::string precision_) : PW_Basis_Sup(device_, precision_) + { + } ~PW_Basis_Big(){}; void setbxyz(const int bx_in, const int by_in, const int bz_in) @@ -34,46 +34,47 @@ class PW_Basis_Big : public PW_Basis_Sup bxyz = bx * by * bz; } int bx = 1, by = 1, bz = 1, bxyz = 1; - int nbx=0; - int nby=0; - int nbz=0; - int nbzp=0; - int nbxx=0; - int nbzp_start=0; + int nbx = 0; + int nby = 0; + int nbz = 0; + int nbzp = 0; + int nbxx = 0; + int nbzp_start = 0; void autoset_big_cell_size(int& b_size, const int& nc_size, const int nproc = 0) { - //original default setting is 4 + // original default setting is 4 b_size = 4; - //only for bz - if(nproc > 0) + // only for bz + if (nproc > 0) { int candidate_lists[4] = {4, 3, 5, 2}; int max_bz[4]; - for(int i=0;i<4;i++) + for (int i = 0; i < 4; i++) { int tmp = candidate_lists[i]; max_bz[i] = nc_size / tmp; - if(nc_size % tmp!=0) - {//ignore candidates which can't be factored by nc_size - max_bz[i]=0; + if (nc_size % tmp != 0) + { // ignore candidates which can't be factored by nc_size + max_bz[i] = 0; continue; - } - if(max_bz[i] % nproc == 0) + } + if (max_bz[i] % nproc == 0) { b_size = tmp; return; } } - //choose maximum residual + // choose maximum residual double res = 0.0; double res_temp = 0.0; - for(int i=0;i<4;i++) + for (int i = 0; i < 4; i++) { - if(max_bz[i]==0) continue; + if (max_bz[i] == 0) + continue; res_temp = double(max_bz[i] % nproc) / nproc; - if(res < res_temp) + if (res < res_temp) { res = res_temp; b_size = candidate_lists[i]; @@ -81,268 +82,279 @@ class PW_Basis_Big : public PW_Basis_Sup } return; } - //for bx and by, choose maximum residual of (5,4,3) + // for bx and by, choose maximum residual of (5,4,3) else { int res = 0; int res_temp = 0; - for(int i=5;i>2;i--) + for (int i = 5; i > 2; i--) { res_temp = nc_size % i; - if(res_temp == 0) + if (res_temp == 0) { b_size = i; return; } - else if(res < res_temp) + else if (res < res_temp) { res = res_temp; b_size = i; - } + } } return; } } + virtual void initgrids(const double lat0_in, const ModuleBase::Matrix3 latvec_in, const double gridecut) + { + // init lattice + this->lat0 = lat0_in; + this->latvec = latvec_in; + this->omega = std::abs(latvec.Det()) * lat0 * lat0 * lat0; + this->GT = latvec.Inverse(); + this->G = GT.Transpose(); + this->GGT = G * GT; - virtual void initgrids(const double lat0_in,const ModuleBase::Matrix3 latvec_in, - const double gridecut){ - //init lattice - this->lat0 = lat0_in; - this->latvec = latvec_in; - this->omega = std::abs(latvec.Det()) * lat0 * lat0 * lat0; - this->GT = latvec.Inverse(); - this->G = GT.Transpose(); - this->GGT = G * GT; + //------------------------------------------------------------ + //-------------------------init grids------------------------- + //------------------------------------------------------------ + this->tpiba = ModuleBase::TWO_PI / this->lat0; + this->tpiba2 = this->tpiba * this->tpiba; + this->gridecut_lat = gridecut / tpiba2; + ModuleBase::Vector3 lat; + int* ibox = new int[3]; - //------------------------------------------------------------ - //-------------------------init grids------------------------- - //------------------------------------------------------------ - this->tpiba = ModuleBase::TWO_PI / this->lat0; - this->tpiba2 = this->tpiba * this->tpiba; - this->gridecut_lat = gridecut / tpiba2; - ModuleBase::Vector3 lat; - int *ibox = new int[3]; - - lat.x = latvec.e11; - lat.y = latvec.e12; - lat.z = latvec.e13; - ibox[0] = 2 * int(sqrt(gridecut_lat) * sqrt(lat * lat)) + 1; + lat.x = latvec.e11; + lat.y = latvec.e12; + lat.z = latvec.e13; + ibox[0] = 2 * int(sqrt(gridecut_lat) * sqrt(lat * lat)) + 1; - lat.x = latvec.e21; - lat.y = latvec.e22; - lat.z = latvec.e23; - ibox[1] = 2 * int(sqrt(gridecut_lat) * sqrt(lat * lat)) + 1; + lat.x = latvec.e21; + lat.y = latvec.e22; + lat.z = latvec.e23; + ibox[1] = 2 * int(sqrt(gridecut_lat) * sqrt(lat * lat)) + 1; - lat.x = latvec.e31; - lat.y = latvec.e32; - lat.z = latvec.e33; - ibox[2] = 2 * int(sqrt(gridecut_lat) * sqrt(lat * lat)) + 1; + lat.x = latvec.e31; + lat.y = latvec.e32; + lat.z = latvec.e33; + ibox[2] = 2 * int(sqrt(gridecut_lat) * sqrt(lat * lat)) + 1; - // We should check if ibox is the minimum number to cover the planewave ball. - // Find the minimum number of ibox by traveling all possible ibox - int n1,n2,n3; - n1 = n2 = n3 = 0; - for(int igz = -ibox[2]+this->poolrank; igz <= ibox[2]; igz += this->poolnproc) - { - for(int igy = -ibox[1]; igy <= ibox[1]; ++igy) + // We should check if ibox is the minimum number to cover the planewave ball. + // Find the minimum number of ibox by traveling all possible ibox + int n1, n2, n3; + n1 = n2 = n3 = 0; + for (int igz = -ibox[2] + this->poolrank; igz <= ibox[2]; igz += this->poolnproc) { - for(int igx = -ibox[0]; igx <= ibox[0]; ++igx) + for (int igy = -ibox[1]; igy <= ibox[1]; ++igy) { - ModuleBase::Vector3 f; - f.x = igx; - f.y = igy; - f.z = igz; - double modulus = f * (this->GGT * f); - if(modulus <= this->gridecut_lat) + for (int igx = -ibox[0]; igx <= ibox[0]; ++igx) { - if(n1 < std::abs(igx)) n1 = std::abs(igx); - if(n2 < std::abs(igy)) n2 = std::abs(igy); - if(n3 < std::abs(igz)) n3 = std::abs(igz); + ModuleBase::Vector3 f; + f.x = igx; + f.y = igy; + f.z = igz; + double modulus = f * (this->GGT * f); + if (modulus <= this->gridecut_lat) + { + if (n1 < std::abs(igx)) + n1 = std::abs(igx); + if (n2 < std::abs(igy)) + n2 = std::abs(igy); + if (n3 < std::abs(igz)) + n3 = std::abs(igz); + } } } } - } - ibox[0] = 2*n1+1; - ibox[1] = 2*n2+1; - ibox[2] = 2*n3+1; + ibox[0] = 2 * n1 + 1; + ibox[1] = 2 * n2 + 1; + ibox[2] = 2 * n3 + 1; #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, ibox, 3, MPI_INT, MPI_MAX , this->pool_world); + MPI_Allreduce(MPI_IN_PLACE, ibox, 3, MPI_INT, MPI_MAX, this->pool_world); #endif - // Find the minimal FFT box size the factors into the primes (2,3,5,7). - for (int i = 0; i < 3; i++) - { - int b = 0; - int n2 = 0; - int n3 = 0; - int n5 = 0; - //int n7 = 0; - bool done_factoring = false; - - // increase ibox[i] by 1 until it is totally factorizable by (2,3,5,7) - do + // Find the minimal FFT box size the factors into the primes (2,3,5,7). + for (int i = 0; i < 3; i++) { - b = ibox[i]; + int b = 0; + int n2 = 0; + int n3 = 0; + int n5 = 0; + // int n7 = 0; + bool done_factoring = false; - //n2 = n3 = n5 = n7 = 0; - n2 = n3 = n5 = 0; - done_factoring = false; - if ((this->full_pw && this->full_pw_dim == 2) && b % 2 != 0) done_factoring = true; // full_pw_dim = 2 means FFT dimensions should be even. - while (!done_factoring) - { - if (b % 2 == 0 && (!this->full_pw || this->full_pw_dim != 1)) // full_pw_dim = 1 means FFT dimension should be odd. - { - n2++; - b /= 2; - continue; - } - if (b % 3 == 0) - { - n3++; - b /= 3; - continue; - } - if (b % 5 == 0) - { - n5++; - b /= 5; - continue; - } - //if (b%7==0) { n7++; b /= 7; continue; } - done_factoring = true; - } - ibox[i] += 1; - } - while (b != 1); - ibox[i] -= 1; - // b==1 means fftbox[i] is (2,3,5,7) factorizable - } - //autoset bx/by/bz if not set in INPUT - if(!this->bz) - { - this->autoset_big_cell_size(this->bz, ibox[2], this->poolnproc); - } - if(!this->bx) - { - //if cz == cx, autoset bx==bz for keeping same symmetry - if(ibox[0] == ibox[2]) - { - this->bx = this->bz; + // increase ibox[i] by 1 until it is totally factorizable by (2,3,5,7) + do + { + b = ibox[i]; + + // n2 = n3 = n5 = n7 = 0; + n2 = n3 = n5 = 0; + done_factoring = false; + if ((this->full_pw && this->full_pw_dim == 2) && b % 2 != 0) + done_factoring = true; // full_pw_dim = 2 means FFT dimensions should be even. + while (!done_factoring) + { + if (b % 2 == 0 + && (!this->full_pw + || this->full_pw_dim != 1)) // full_pw_dim = 1 means FFT dimension should be odd. + { + n2++; + b /= 2; + continue; + } + if (b % 3 == 0) + { + n3++; + b /= 3; + continue; + } + if (b % 5 == 0) + { + n5++; + b /= 5; + continue; + } + // if (b%7==0) { n7++; b /= 7; continue; } + done_factoring = true; + } + ibox[i] += 1; + } while (b != 1); + ibox[i] -= 1; + // b==1 means fftbox[i] is (2,3,5,7) factorizable } - else + // autoset bx/by/bz if not set in INPUT + if (!this->bz) { - this->autoset_big_cell_size(this->bx, ibox[0]); + this->autoset_big_cell_size(this->bz, ibox[2], this->poolnproc); } - } - if(!this->by) - { - //if cz == cy, autoset by==bz for keeping same symmetry - if(ibox[1] == ibox[2]) + if (!this->bx) { - this->by = this->bz; + // if cz == cx, autoset bx==bz for keeping same symmetry + if (ibox[0] == ibox[2]) + { + this->bx = this->bz; + } + else + { + this->autoset_big_cell_size(this->bx, ibox[0]); + } } - else + if (!this->by) { - this->autoset_big_cell_size(this->by, ibox[1]); + // if cz == cy, autoset by==bz for keeping same symmetry + if (ibox[1] == ibox[2]) + { + this->by = this->bz; + } + else + { + this->autoset_big_cell_size(this->by, ibox[1]); + } } - } - this->bxyz = this->bx * this->by * this->bz; - if(ibox[0]%this->bx != 0) ibox[0] += (this->bx - ibox[0] % this->bx); - if(ibox[1]%this->by != 0) ibox[1] += (this->by - ibox[1] % this->by); - if(ibox[2]%this->bz != 0) ibox[2] += (this->bz - ibox[2] % this->bz); - - this->nx = ibox[0]; - this->ny = ibox[1]; - this->nz = ibox[2]; - this->nxy =this->nx * this->ny; - this->nxyz = this->nxy * this->nz; - this->nbx = this->nx / bx; - this->nby = this->ny / by; - this->nbz = this->nz / bz; + this->bxyz = this->bx * this->by * this->bz; + if (ibox[0] % this->bx != 0) + ibox[0] += (this->bx - ibox[0] % this->bx); + if (ibox[1] % this->by != 0) + ibox[1] += (this->by - ibox[1] % this->by); + if (ibox[2] % this->bz != 0) + ibox[2] += (this->bz - ibox[2] % this->bz); - delete[] ibox; - return; + this->nx = ibox[0]; + this->ny = ibox[1]; + this->nz = ibox[2]; + this->nxy = this->nx * this->ny; + this->nxyz = this->nxy * this->nz; + this->nbx = this->nx / bx; + this->nby = this->ny / by; + this->nbz = this->nz / bz; + delete[] ibox; + return; } - virtual void initgrids( - const double lat0_in, - const ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors - const int nx_in, int ny_in, int nz_in - ) + virtual void initgrids(const double lat0_in, + const ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors + const int nx_in, + int ny_in, + int nz_in) { this->lat0 = lat0_in; this->tpiba = ModuleBase::TWO_PI / this->lat0; - this->tpiba2 = this->tpiba*this->tpiba; + this->tpiba2 = this->tpiba * this->tpiba; this->latvec = latvec_in; this->omega = std::abs(latvec.Det()) * lat0 * lat0 * lat0; this->GT = latvec.Inverse(); - this->G = GT.Transpose(); - this->GGT = G * GT; + this->G = GT.Transpose(); + this->GGT = G * GT; this->nx = nx_in; this->ny = ny_in; this->nz = nz_in; // autoset bx/by/bz if not set in INPUT if (!this->bz) { - this->autoset_big_cell_size(this->bz, nz, this->poolnproc); + this->autoset_big_cell_size(this->bz, nz, this->poolnproc); } if (!this->bx) { - // if cz == cx, autoset bx==bz for keeping same symmetry - if (nx == nz) - { - this->bx = this->bz; - } - else - { - this->autoset_big_cell_size(this->bx, nx); - } + // if cz == cx, autoset bx==bz for keeping same symmetry + if (nx == nz) + { + this->bx = this->bz; + } + else + { + this->autoset_big_cell_size(this->bx, nx); + } } if (!this->by) { - // if cz == cy, autoset by==bz for keeping same symmetry - if (ny == nz) - { - this->by = this->bz; - } - else - { - this->autoset_big_cell_size(this->by, ny); - } + // if cz == cy, autoset by==bz for keeping same symmetry + if (ny == nz) + { + this->by = this->bz; + } + else + { + this->autoset_big_cell_size(this->by, ny); + } } this->bxyz = this->bx * this->by * this->bz; - if(this->nx%this->bx != 0) this->nx += (this->bx - this->nx % this->bx); - if(this->ny%this->by != 0) this->ny += (this->by - this->ny % this->by); - if(this->nz%this->bz != 0) this->nz += (this->bz - this->nz % this->bz); + if (this->nx % this->bx != 0) + this->nx += (this->bx - this->nx % this->bx); + if (this->ny % this->by != 0) + this->ny += (this->by - this->ny % this->by); + if (this->nz % this->bz != 0) + this->nz += (this->bz - this->nz % this->bz); this->nbx = this->nx / bx; this->nby = this->ny / by; this->nbz = this->nz / bz; this->nxy = this->nx * this->ny; this->nxyz = this->nxy * this->nz; - int *ibox = new int[3]; - ibox[0] = int((this->nx-1)/2)+1; - ibox[1] = int((this->ny-1)/2)+1; - ibox[2] = int((this->nz-1)/2)+1; + int* ibox = new int[3]; + ibox[0] = int((this->nx - 1) / 2) + 1; + ibox[1] = int((this->ny - 1) / 2) + 1; + ibox[2] = int((this->nz - 1) / 2) + 1; this->gridecut_lat = 1e20; int count = 0; - for(int igz = -ibox[2]; igz <= ibox[2]; ++igz) + for (int igz = -ibox[2]; igz <= ibox[2]; ++igz) { - for(int igy = -ibox[1]; igy <= ibox[1]; ++igy) + for (int igy = -ibox[1]; igy <= ibox[1]; ++igy) { - for(int igx = -ibox[0]; igx <= ibox[0]; ++igx) + for (int igx = -ibox[0]; igx <= ibox[0]; ++igx) { ++count; - if(count%this->poolnproc != this->poolrank) continue; - if(std::abs(igx)<=ibox[0]-1 && std::abs(igy)<=ibox[1]-1 && std::abs(igz)<=ibox[2]-1 ) continue; + if (count % this->poolnproc != this->poolrank) + continue; + if (std::abs(igx) <= ibox[0] - 1 && std::abs(igy) <= ibox[1] - 1 && std::abs(igz) <= ibox[2] - 1) + continue; ModuleBase::Vector3 f; f.x = igx; f.y = igy; f.z = igz; double modulus = f * (this->GGT * f); - if(modulus < this->gridecut_lat) + if (modulus < this->gridecut_lat) { this->gridecut_lat = modulus; } @@ -350,7 +362,7 @@ class PW_Basis_Big : public PW_Basis_Sup } } #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &this->gridecut_lat, 1, MPI_DOUBLE, MPI_MIN , this->pool_world); + MPI_Allreduce(MPI_IN_PLACE, &this->gridecut_lat, 1, MPI_DOUBLE, MPI_MIN, this->pool_world); #endif this->gridecut_lat -= 1e-6; @@ -360,21 +372,25 @@ class PW_Basis_Big : public PW_Basis_Sup } virtual void distribute_r() - { - delete[] this->numz; this->numz = new int[this->poolnproc]; - delete[] this->startz; this->startz = new int[this->poolnproc]; + { + delete[] this->numz; + this->numz = new int[this->poolnproc]; + delete[] this->startz; + this->startz = new int[this->poolnproc]; ModuleBase::GlobalFunc::ZEROS(this->numz, this->poolnproc); ModuleBase::GlobalFunc::ZEROS(this->startz, this->poolnproc); int npbz = this->nbz / this->poolnproc; int modbz = this->nbz % this->poolnproc; this->startz[0] = 0; - for(int ip = 0 ; ip < this->poolnproc ; ++ip) + for (int ip = 0; ip < this->poolnproc; ++ip) { - this->numz[ip] = npbz*this->bz; - if(ip < modbz) this->numz[ip]+=this->bz; - if(ip < this->poolnproc - 1) this->startz[ip+1] = this->startz[ip] + numz[ip]; - if(ip == this->poolrank) + this->numz[ip] = npbz * this->bz; + if (ip < modbz) + this->numz[ip] += this->bz; + if (ip < this->poolnproc - 1) + this->startz[ip + 1] = this->startz[ip] + numz[ip]; + if (ip == this->poolrank) { this->nplane = numz[ip]; this->startz_current = startz[ip]; @@ -386,7 +402,6 @@ class PW_Basis_Big : public PW_Basis_Sup this->nbzp_start = this->startz[this->poolrank] / this->bz; return; } - }; -} +} // namespace ModulePW #endif \ No newline at end of file diff --git a/source/module_basis/module_pw/pw_basis_k.cpp b/source/module_basis/module_pw/pw_basis_k.cpp index a4689ab2d2..8602d1a25e 100644 --- a/source/module_basis/module_pw/pw_basis_k.cpp +++ b/source/module_basis/module_pw/pw_basis_k.cpp @@ -1,9 +1,9 @@ #include "pw_basis_k.h" -#include "module_base/constants.h" -#include "module_base/memory.h" -#include "module_base/timer.h" #include "module_parameter/parameter.h" +#include "source_base/constants.h" +#include "source_base/memory.h" +#include "source_base/timer.h" #include namespace ModulePW diff --git a/source/module_basis/module_pw/pw_basis_k.h b/source/module_basis/module_pw/pw_basis_k.h index cf2202e2b3..34a10cb90e 100644 --- a/source/module_basis/module_pw/pw_basis_k.h +++ b/source/module_basis/module_pw/pw_basis_k.h @@ -1,9 +1,9 @@ #ifndef PWBASISK_H #define PWBASISK_H -#include "pw_basis.h" #include "module_psi/psi.h" -#include "module_base/module_device/device.h" +#include "pw_basis.h" +#include "source_base/module_device/device.h" namespace ModulePW { @@ -56,58 +56,59 @@ namespace ModulePW class PW_Basis_K : public PW_Basis { -public: + public: PW_Basis_K(); - PW_Basis_K(std::string device_, std::string precision_) : PW_Basis(device_, precision_) {classname="PW_Basis_K";} + PW_Basis_K(std::string device_, std::string precision_) : PW_Basis(device_, precision_) + { + classname = "PW_Basis_K"; + } ~PW_Basis_K(); - //init parameters of pw_basis_k class - void initparameters( - const bool gamma_only_in, - const double ecut_in, - const int nk_in, //number of k points in this pool - const ModuleBase::Vector3 *kvec_d, // Direct coordinates of k points - const int distribution_type_in = 1, - const bool xprime_in = true - ); + // init parameters of pw_basis_k class + void initparameters(const bool gamma_only_in, + const double ecut_in, + const int nk_in, // number of k points in this pool + const ModuleBase::Vector3* kvec_d, // Direct coordinates of k points + const int distribution_type_in = 1, + const bool xprime_in = true); public: - int nks=0;//number of k points in this pool - ModuleBase::Vector3 *kvec_d=nullptr; // Direct coordinates of k points - ModuleBase::Vector3 *kvec_c=nullptr; // Cartesian coordinates of k points - int *npwk=nullptr; //[nks] number of plane waves of different k-points - int npwk_max=0; //max npwk among all nks k-points, it may be smaller than npw - //npw cutoff: (|g|+|k|)^2, npwk in the the npw ball, thus is smaller - double gk_ecut=0; //Energy cut off for (g+k)^2/2 + int nks = 0; // number of k points in this pool + ModuleBase::Vector3* kvec_d = nullptr; // Direct coordinates of k points + ModuleBase::Vector3* kvec_c = nullptr; // Cartesian coordinates of k points + int* npwk = nullptr; //[nks] number of plane waves of different k-points + int npwk_max = 0; // max npwk among all nks k-points, it may be smaller than npw + // npw cutoff: (|g|+|k|)^2, npwk in the the npw ball, thus is smaller + double gk_ecut = 0; // Energy cut off for (g+k)^2/2 -public: - //prepare for transforms between real and reciprocal spaces + public: + // prepare for transforms between real and reciprocal spaces void setuptransform(); - int *igl2isz_k=nullptr, * d_igl2isz_k = nullptr; //[npwk_max*nks] map (igl,ik) to (is,iz) - int *igl2ig_k=nullptr;//[npwk_max*nks] map (igl,ik) to ig - int *ig2ixyz_k=nullptr; ///< [npw] map ig to ixyz - std::vector ig2ixyz_k_cpu; /// [npw] map ig to ixyz,which is used in dsp fft. - double *gk2=nullptr; // modulus (G+K)^2 of G vectors [npwk_max*nks] + int *igl2isz_k = nullptr, *d_igl2isz_k = nullptr; //[npwk_max*nks] map (igl,ik) to (is,iz) + int* igl2ig_k = nullptr; //[npwk_max*nks] map (igl,ik) to ig + int* ig2ixyz_k = nullptr; ///< [npw] map ig to ixyz + std::vector ig2ixyz_k_cpu; /// [npw] map ig to ixyz,which is used in dsp fft. + double* gk2 = nullptr; // modulus (G+K)^2 of G vectors [npwk_max*nks] // liuyu add 2023-09-06 - double erf_ecut=0.0; // the value of the constant energy cutoff - double erf_height=0.0; // the height of the energy step for reciprocal vectors - double erf_sigma=0.0; // the width of the energy step for reciprocal vectors + double erf_ecut = 0.0; // the value of the constant energy cutoff + double erf_height = 0.0; // the height of the energy step for reciprocal vectors + double erf_sigma = 0.0; // the width of the energy step for reciprocal vectors - //collect gdirect, gcar, gg + // collect gdirect, gcar, gg void collect_local_pw(const double& erf_ecut_in = 0.0, const double& erf_height_in = 0.0, const double& erf_sigma_in = 0.1); private: - float * s_gk2 = nullptr; - double * d_gk2 = nullptr; // modulus (G+K)^2 of G vectors [npwk_max*nks] - //create igl2isz_k map array for fft + float* s_gk2 = nullptr; + double* d_gk2 = nullptr; // modulus (G+K)^2 of G vectors [npwk_max*nks] + // create igl2isz_k map array for fft void setupIndGk(); // get ig2ixyz_k void get_ig2ixyz_k(); - //calculate G+K, it is a private function + // calculate G+K, it is a private function ModuleBase::Vector3 cal_GplusK_cartesian(const int ik, const int ig) const; public: @@ -135,33 +136,33 @@ class PW_Basis_K : public PW_Basis const int ik, const bool add = false, const FPTYPE factor = 1.0) const; // in:(nz, ns) ; out(nplane,nx*ny) - #if defined(__DSP) +#if defined(__DSP) template void convolution(const Device* ctx, - const int ik, - const int size, - const std::complex* input, - const FPTYPE* input1, - std::complex* output, - const bool add = false, - const FPTYPE factor =1.0) const ; + const int ik, + const int size, + const std::complex* input, + const FPTYPE* input1, + std::complex* output, + const bool add = false, + const FPTYPE factor = 1.0) const; template void real2recip_dsp(const std::complex* in, - std::complex* out, - const int ik, - const bool add = false, - const FPTYPE factor = 1.0) const; // in:(nplane,nx*ny) ; out(nz, ns) + std::complex* out, + const int ik, + const bool add = false, + const FPTYPE factor = 1.0) const; // in:(nplane,nx*ny) ; out(nz, ns) template void recip2real_dsp(const std::complex* in, - std::complex* out, - const int ik, - const bool add = false, - const FPTYPE factor = 1.0) const; // in:(nz, ns) ; out(nplane,nx*ny) - - #endif + std::complex* out, + const int ik, + const bool add = false, + const FPTYPE factor = 1.0) const; // in:(nz, ns) ; out(nplane,nx*ny) - template +#endif + + template void real_to_recip(const Device* ctx, const std::complex* in, std::complex* out, @@ -176,7 +177,6 @@ class PW_Basis_K : public PW_Basis const bool add = false, const FPTYPE factor = 1.0) const; // in:(nz, ns) ; out(nplane,nx*ny) - template ::value, int>::type = 0> @@ -186,11 +186,11 @@ class PW_Basis_K : public PW_Basis const bool add = false, const typename GetTypeReal::type factor = 1.0) const { - #if defined(__DSP) +#if defined(__DSP) this->real2recip_dsp(in, out, ik, add, factor); - #else - this->real2recip(in,out,ik,add,factor); - #endif +#else + this->real2recip(in, out, ik, add, factor); +#endif } template ::type factor = 1.0) const { - - #if defined(__DSP) - this->recip2real_dsp(in,out,ik,add,factor); - #else - this->recip2real(in,out,ik,add,factor); - #endif + +#if defined(__DSP) + this->recip2real_dsp(in, out, ik, add, factor); +#else + this->recip2real(in, out, ik, add, factor); +#endif } template void real2recip_gpu(const std::complex* in, - std::complex* out, - const int ik, - const bool add = false, - const FPTYPE factor = 1.0) const; // in:(nplane,nx*ny) ; out(nz, ns) - + std::complex* out, + const int ik, + const bool add = false, + const FPTYPE factor = 1.0) const; // in:(nplane,nx*ny) ; out(nz, ns) + template void recip2real_gpu(const std::complex* in, - std::complex* out, - const int ik, - const bool add = false, - const FPTYPE factor = 1.0) const; // in:(nz, ns) ; out(nplane,nx*ny) + std::complex* out, + const int ik, + const bool add = false, + const FPTYPE factor = 1.0) const; // in:(nz, ns) ; out(nplane,nx*ny) template & getgcar(const int ik, const int igl) const; - //get G-direct + // get G-direct ModuleBase::Vector3 getgdirect(const int ik, const int igl) const; - //get (G+K) + // get (G+K) ModuleBase::Vector3 getgpluskcar(const int ik, const int igl) const; - //get igl2isz_k + // get igl2isz_k int& getigl2isz(const int ik, const int igl) const; - //get igl2ig_k or igk(ik,ig) in older ABACUS + // get igl2ig_k or igk(ik,ig) in older ABACUS int& getigl2ig(const int ik, const int igl) const; - //get ig_to_ix + // get ig_to_ix std::vector get_ig2ix(const int ik) const; - //get ig_to_iy + // get ig_to_iy std::vector get_ig2iy(const int ik) const; - //get ig_to_iz + // get ig_to_iz std::vector get_ig2iz(const int ik) const; - template FPTYPE * get_gk2_data() const; - template FPTYPE * get_gcar_data() const; - template FPTYPE * get_kvec_c_data() const; + template + FPTYPE* get_gk2_data() const; + template + FPTYPE* get_gcar_data() const; + template + FPTYPE* get_kvec_c_data() const; -private: - float * s_gcar = nullptr, * s_kvec_c = nullptr; - double * d_gcar = nullptr, * d_kvec_c = nullptr; + private: + float *s_gcar = nullptr, *s_kvec_c = nullptr; + double *d_gcar = nullptr, *d_kvec_c = nullptr; }; -} -#endif //PlaneWave_K class +} // namespace ModulePW +#endif // PlaneWave_K class #include "./pw_basis_k_big.h" //temporary it will be removed - diff --git a/source/module_basis/module_pw/pw_basis_k_big.h b/source/module_basis/module_pw/pw_basis_k_big.h index 065f122924..11f0389fe9 100644 --- a/source/module_basis/module_pw/pw_basis_k_big.h +++ b/source/module_basis/module_pw/pw_basis_k_big.h @@ -1,28 +1,31 @@ #ifndef PW_BASIS_K_BIG_H #define PW_BASIS_K_BIG_H -#include "module_base/constants.h" -#include "module_base/global_function.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" -// temporary class, because previous ABACUS consider big grid for fft grids +// temporary class, because previous ABACUS consider big grid for fft grids // which are used for grid integration in LCAO. // In fact, it is unnecessary. It will be moved after grid integration is refactored. namespace ModulePW { -class PW_Basis_K_Big: public PW_Basis_K +class PW_Basis_K_Big : public PW_Basis_K { -public: - + public: // combine [bx,by,bz] FFT grids into a big one - // typical values are bx=2, by=2, bz=2 - // nbx=nx/bx, nby=ny/by, nbz=nz/bz, - // Note: this class can only use initgrids(lat0_in, latvec_in, PW_Basis_Big::nx, PW_Basis_Big::ny, PW_Basis_Big::nz)!!! - PW_Basis_K_Big(){ + // typical values are bx=2, by=2, bz=2 + // nbx=nx/bx, nby=ny/by, nbz=nz/bz, + // Note: this class can only use initgrids(lat0_in, latvec_in, PW_Basis_Big::nx, PW_Basis_Big::ny, + // PW_Basis_Big::nz)!!! + PW_Basis_K_Big() + { bx = 1; by = 1; bz = 1; } - PW_Basis_K_Big(std::string device_, std::string precision_) : PW_Basis_K(device_, precision_) {} + PW_Basis_K_Big(std::string device_, std::string precision_) : PW_Basis_K(device_, precision_) + { + } ~PW_Basis_K_Big(){}; void setbxyz(const int bx_in, const int by_in, const int bz_in) { @@ -30,12 +33,12 @@ class PW_Basis_K_Big: public PW_Basis_K by = by_in; bz = bz_in; } - int bx=0; - int by=0; - int bz=0; - int nbx=0; - int nby=0; - int nbz=0; + int bx = 0; + int by = 0; + int bz = 0; + int nbx = 0; + int nby = 0; + int nbz = 0; virtual void distribute_r() { @@ -45,20 +48,26 @@ class PW_Basis_K_Big: public PW_Basis_K this->nbx = this->nx / bx; this->nby = this->ny / by; this->nbz = this->nz / bz; - delete[] this->numz; this->numz = new int[this->poolnproc]; - delete[] this->startz; this->startz = new int[this->poolnproc]; + delete[] this->numz; + this->numz = new int[this->poolnproc]; + delete[] this->startz; + this->startz = new int[this->poolnproc]; ModuleBase::GlobalFunc::ZEROS(this->numz, this->poolnproc); ModuleBase::GlobalFunc::ZEROS(this->startz, this->poolnproc); int npbz = this->nbz / this->poolnproc; int modbz = this->nbz % this->poolnproc; this->startz[0] = 0; - for(int ip = 0 ; ip < this->poolnproc ; ++ip) + for (int ip = 0; ip < this->poolnproc; ++ip) { - this->numz[ip] = npbz*this->bz; - if(ip < modbz) { this->numz[ip]+=this->bz;} - if(ip < this->poolnproc - 1) this->startz[ip+1] = this->startz[ip] + numz[ip]; - if(ip == this->poolrank) + this->numz[ip] = npbz * this->bz; + if (ip < modbz) + { + this->numz[ip] += this->bz; + } + if (ip < this->poolnproc - 1) + this->startz[ip + 1] = this->startz[ip] + numz[ip]; + if (ip == this->poolrank) { this->nplane = numz[ip]; this->startz_current = startz[ip]; @@ -67,7 +76,6 @@ class PW_Basis_K_Big: public PW_Basis_K this->nrxx = this->numz[this->poolrank] * this->nxy; return; } - }; -} +} // namespace ModulePW #endif \ No newline at end of file diff --git a/source/module_basis/module_pw/pw_basis_sup.cpp b/source/module_basis/module_pw/pw_basis_sup.cpp index 1b420f60da..eea6058da9 100644 --- a/source/module_basis/module_pw/pw_basis_sup.cpp +++ b/source/module_basis/module_pw/pw_basis_sup.cpp @@ -1,6 +1,6 @@ -#include "module_base/timer.h" -#include "pw_basis.h" #include "module_parameter/parameter.h" +#include "pw_basis.h" +#include "source_base/timer.h" namespace ModulePW { @@ -23,28 +23,28 @@ void PW_Basis_Sup::setuptransform(const ModulePW::PW_Basis* pw_rho) if (this->xprime) { this->fft_bundle.initfft(this->nx, - this->ny, - this->nz, - this->lix, - this->rix, - this->nst, - this->nplane, - this->poolnproc, - this->gamma_only, - this->xprime); + this->ny, + this->nz, + this->lix, + this->rix, + this->nst, + this->nplane, + this->poolnproc, + this->gamma_only, + this->xprime); } else { this->fft_bundle.initfft(this->nx, - this->ny, - this->nz, - this->liy, - this->riy, - this->nst, - this->nplane, - this->poolnproc, - this->gamma_only, - this->xprime); + this->ny, + this->nz, + this->liy, + this->riy, + this->nst, + this->nplane, + this->poolnproc, + this->gamma_only, + this->xprime); } this->fft_bundle.setupFFT(); ModuleBase::timer::tick(this->classname, "setuptransform"); @@ -100,9 +100,10 @@ void PW_Basis_Sup::distribution_method3(const ModulePW::PW_Basis* pw_rho) this->npw_per = new int[this->poolnproc]; // number of planewaves on each core. delete[] this->fftixy2ip; this->fftixy2ip = new int[this->fftnxy]; // ip of core which contains the stick on (x, y). - for (int ixy = 0; ixy < this->fftnxy; ++ixy) { + for (int ixy = 0; ixy < this->fftnxy; ++ixy) + { this->fftixy2ip[ixy] = -1; // meaning this stick has not been distributed or there is no stick on (x, y). -} + } if (poolrank == 0) { // (1) Count the total number of planewaves (tot_npw) and sticks (this->nstot). @@ -114,12 +115,12 @@ void PW_Basis_Sup::distribution_method3(const ModulePW::PW_Basis* pw_rho) this->count_pw_st(st_length2D, st_bottom2D); } #ifdef __MPI - MPI_Bcast(&this->npwtot, 1, MPI_INT, 0, this->pool_world); - MPI_Bcast(&this->nstot, 1, MPI_INT, 0, this->pool_world); - MPI_Bcast(&liy, 1, MPI_INT, 0, this->pool_world); - MPI_Bcast(&riy, 1, MPI_INT, 0, this->pool_world); - MPI_Bcast(&lix, 1, MPI_INT, 0, this->pool_world); - MPI_Bcast(&rix, 1, MPI_INT, 0, this->pool_world); + MPI_Bcast(&this->npwtot, 1, MPI_INT, 0, this->pool_world); + MPI_Bcast(&this->nstot, 1, MPI_INT, 0, this->pool_world); + MPI_Bcast(&liy, 1, MPI_INT, 0, this->pool_world); + MPI_Bcast(&riy, 1, MPI_INT, 0, this->pool_world); + MPI_Bcast(&lix, 1, MPI_INT, 0, this->pool_world); + MPI_Bcast(&rix, 1, MPI_INT, 0, this->pool_world); #endif delete[] this->istot2ixy; this->istot2ixy = new int[this->nstot]; @@ -165,13 +166,13 @@ void PW_Basis_Sup::distribution_method3(const ModulePW::PW_Basis* pw_rho) #endif } #ifdef __MPI - - MPI_Bcast(st_length2D, this->fftnxy, MPI_INT, 0, this->pool_world); - MPI_Bcast(st_bottom2D, this->fftnxy, MPI_INT, 0, this->pool_world); - MPI_Bcast(this->fftixy2ip, this->fftnxy, MPI_INT, 0, this->pool_world); - MPI_Bcast(this->istot2ixy, this->nstot, MPI_INT, 0, this->pool_world); - MPI_Bcast(this->nst_per, this->poolnproc, MPI_INT, 0, this->pool_world); - MPI_Bcast(this->npw_per, this->poolnproc, MPI_INT, 0, this->pool_world); + + MPI_Bcast(st_length2D, this->fftnxy, MPI_INT, 0, this->pool_world); + MPI_Bcast(st_bottom2D, this->fftnxy, MPI_INT, 0, this->pool_world); + MPI_Bcast(this->fftixy2ip, this->fftnxy, MPI_INT, 0, this->pool_world); + MPI_Bcast(this->istot2ixy, this->nstot, MPI_INT, 0, this->pool_world); + MPI_Bcast(this->nst_per, this->poolnproc, MPI_INT, 0, this->pool_world); + MPI_Bcast(this->npw_per, this->poolnproc, MPI_INT, 0, this->pool_world); #endif this->npw = this->npw_per[this->poolrank]; this->nst = this->nst_per[this->poolrank]; @@ -213,11 +214,14 @@ void PW_Basis_Sup::divide_sticks_3( int fftnx_s = nx_s; if (this->gamma_only) { - if (this->xprime) { + if (this->xprime) + { fftnx_s = int(nx_s / 2) + 1; - } else { + } + else + { fftny_s = int(ny_s / 2) + 1; -} + } } int fftnxy_s = fftnx_s * fftny_s; @@ -227,19 +231,23 @@ void PW_Basis_Sup::divide_sticks_3( { int ix = ixy / fftny_s; int iy = ixy % fftny_s; - if (ix >= int(nx_s / 2) + 1) { + if (ix >= int(nx_s / 2) + 1) + { ix -= nx_s; -} - if (iy >= int(ny_s / 2) + 1) { + } + if (iy >= int(ny_s / 2) + 1) + { iy -= ny_s; -} + } - if (ix < 0) { + if (ix < 0) + { ix += nx; -} - if (iy < 0) { + } + if (iy < 0) + { iy += ny; -} + } int index = ix * this->fftny + iy; int ip = fftixy2ip_s[ixy]; if (ip >= 0) @@ -355,9 +363,10 @@ void PW_Basis_Sup::get_ig2isz_is2fftixy( fftixy2is[ixy] = st_move; st_move++; } - if (st_move == this->nst) { + if (st_move == this->nst) + { break; -} + } } // distribute planewaves in the same order as smooth grids first. @@ -370,25 +379,31 @@ void PW_Basis_Sup::get_ig2isz_is2fftixy( int ixy = pw_rho->is2fftixy[is]; int ix = ixy / pw_rho->fftny; int iy = ixy % pw_rho->fftny; - if (ix >= int(pw_rho->nx / 2) + 1) { + if (ix >= int(pw_rho->nx / 2) + 1) + { ix -= pw_rho->nx; -} - if (iy >= int(pw_rho->ny / 2) + 1) { + } + if (iy >= int(pw_rho->ny / 2) + 1) + { iy -= pw_rho->ny; -} - if (iz >= int(pw_rho->nz / 2) + 1) { + } + if (iz >= int(pw_rho->nz / 2) + 1) + { iz -= pw_rho->nz; -} + } - if (ix < 0) { + if (ix < 0) + { ix += this->nx; -} - if (iy < 0) { + } + if (iy < 0) + { iy += this->ny; -} - if (iz < 0) { + } + if (iz < 0) + { iz += this->nz; -} + } int ixy_now = ix * this->fftny + iy; int index = ixy_now * this->nz + iz; int is_now = fftixy2is[ixy_now]; @@ -396,9 +411,10 @@ void PW_Basis_Sup::get_ig2isz_is2fftixy( this->ig2isz[ig] = isz_now; pw_filled++; found[index] = true; - if (xprime && ix == 0) { + if (xprime && ix == 0) + { ng_xeq0++; -} + } } assert(pw_filled == pw_rho->npw); @@ -411,24 +427,27 @@ void PW_Basis_Sup::get_ig2isz_is2fftixy( for (int iz = zstart; iz < zstart + st_length2D[ixy]; ++iz) { int z = iz; - if (z < 0) { + if (z < 0) + { z += this->nz; -} + } if (!found[ixy * this->nz + z]) { found[ixy * this->nz + z] = true; int is = fftixy2is[ixy]; this->ig2isz[pw_filled] = is * this->nz + z; pw_filled++; - if (xprime && ixy / fftny == 0) { + if (xprime && ixy / fftny == 0) + { ng_xeq0++; -} + } } } } - if (pw_filled == this->npw) { + if (pw_filled == this->npw) + { break; -} + } } delete[] fftixy2is; diff --git a/source/module_basis/module_pw/pw_basis_sup.h b/source/module_basis/module_pw/pw_basis_sup.h index 1a093e8645..9e6ada0054 100644 --- a/source/module_basis/module_pw/pw_basis_sup.h +++ b/source/module_basis/module_pw/pw_basis_sup.h @@ -1,7 +1,7 @@ #ifndef PWBASIS_SUP_H #define PWBASIS_SUP_H -#include "module_base/complexmatrix.h" +#include "source_base/complexmatrix.h" namespace ModulePW { diff --git a/source/module_basis/module_pw/pw_distributeg.cpp b/source/module_basis/module_pw/pw_distributeg.cpp index 0ae3d51553..c0162facf1 100644 --- a/source/module_basis/module_pw/pw_distributeg.cpp +++ b/source/module_basis/module_pw/pw_distributeg.cpp @@ -1,8 +1,8 @@ -#include "pw_basis.h" -#include "module_base/tool_quit.h" -#include "module_base/global_function.h" -#include "module_base/timer.h" #include "module_parameter/parameter.h" +#include "pw_basis.h" +#include "source_base/global_function.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" namespace ModulePW { /** @@ -13,11 +13,11 @@ namespace ModulePW void PW_Basis::distribute_g() { ModuleBase::timer::tick(this->classname, "distributeg"); - if(this->distribution_type == 1) + if (this->distribution_type == 1) { this->distribution_method1(); } - else if(this->distribution_type == 2) + else if (this->distribution_type == 2) { this->distribution_method2(); } @@ -25,8 +25,10 @@ void PW_Basis::distribute_g() { ModuleBase::WARNING_QUIT("divide", "No such division type."); } - ModuleBase::CHECK_WARNING_QUIT((this->npw == 0), "pw_distributeg.cpp", PARAM.inp.calculation, - "Current core has no plane waves! Please reduce the cores."); + ModuleBase::CHECK_WARNING_QUIT((this->npw == 0), + "pw_distributeg.cpp", + PARAM.inp.calculation, + "Current core has no plane waves! Please reduce the cores."); ModuleBase::timer::tick(this->classname, "distributeg"); return; } @@ -34,16 +36,15 @@ void PW_Basis::distribute_g() /** * @brief (1) We count the total number of planewaves (tot_npw) and sticks (this->nstot) here. * - * Meanwhile, we record the number of planewaves on (x, y) in st_length2D, and store the smallest z-coordinate of each stick in st_bottom2D, - * so that we can scan a much smaller area in step(2). + * Meanwhile, we record the number of planewaves on (x, y) in st_length2D, and store the smallest z-coordinate of each + * stick in st_bottom2D, so that we can scan a much smaller area in step(2). * * @param in: fftnx, fftny, nz, ggecut, GGT * @param out: tot_npw, this->nstot, st_length2D, st_bottom2D, this->riy, this->liy */ -void PW_Basis::count_pw_st( - int* st_length2D, // the number of planewaves that belong to the stick located on (x, y). - int* st_bottom2D // the z-coordinate of the bottom of stick on (x, y). +void PW_Basis::count_pw_st(int* st_length2D, // the number of planewaves that belong to the stick located on (x, y). + int* st_bottom2D // the z-coordinate of the bottom of stick on (x, y). ) { ModuleBase::GlobalFunc::ZEROS(st_length2D, this->fftnxy); @@ -74,7 +75,7 @@ void PW_Basis::count_pw_st( if (this->gamma_only) { - if(this->xprime) + if (this->xprime) { ix_start = 0; ix_end = this->fftnx - 1; @@ -101,10 +102,14 @@ void PW_Basis::count_pw_st( // so that its index in st_length and st_bottom is 9 * 10 + 2 = 92. int x = ix; int y = iy; - if (x < 0) { x += this->nx; -} - if (y < 0) { y += this->ny; -} + if (x < 0) + { + x += this->nx; + } + if (y < 0) + { + y += this->ny; + } int index = x * this->fftny + y; int length = 0; // number of planewave on stick (x, y). @@ -116,18 +121,28 @@ void PW_Basis::count_pw_st( double modulus = f * (this->GGT * f); if (modulus <= this->ggecut || this->full_pw) { - if (length == 0) { st_bottom2D[index] = iz; // length == 0 means this point is the bottom of stick (x, y). -} + if (length == 0) + { + st_bottom2D[index] = iz; // length == 0 means this point is the bottom of stick (x, y). + } ++this->npwtot; ++length; - if(iy < this->riy) { this->riy = iy; -} - if(iy > this->liy) { this->liy = iy; -} - if(ix < this->rix) { this->rix = ix; -} - if(ix > this->lix) { this->lix = ix; -} + if (iy < this->riy) + { + this->riy = iy; + } + if (iy > this->liy) + { + this->liy = iy; + } + if (ix < this->rix) + { + this->rix = ix; + } + if (ix > this->lix) + { + this->lix = ix; + } } } if (length > 0) @@ -154,16 +169,19 @@ void PW_Basis::count_pw_st( */ void PW_Basis::get_ig2isz_is2fftixy( - int* st_bottom2D, // minimum z of stick, stored in 1d array with this->nstot elements. - int* st_length2D // the stick on (x, y) consists of st_length[x*fftny+y] planewaves. + int* st_bottom2D, // minimum z of stick, stored in 1d array with this->nstot elements. + int* st_length2D // the stick on (x, y) consists of st_length[x*fftny+y] planewaves. ) { if (this->npw == 0) { - delete[] this->ig2isz; this->ig2isz = nullptr; // map ig to the z coordinate of this planewave. - delete[] this->is2fftixy; this->is2fftixy = nullptr; // map is (index of sticks) to ixy (iy + ix * fftny). + delete[] this->ig2isz; + this->ig2isz = nullptr; // map ig to the z coordinate of this planewave. + delete[] this->is2fftixy; + this->is2fftixy = nullptr; // map is (index of sticks) to ixy (iy + ix * fftny). #if defined(__CUDA) || defined(__ROCM) - if (this->device == "gpu") { + if (this->device == "gpu") + { delmem_int_op()(this->d_is2fftixy); d_is2fftixy = nullptr; } @@ -171,15 +189,17 @@ void PW_Basis::get_ig2isz_is2fftixy( return; } - delete[] this->ig2isz; this->ig2isz = new int[this->npw]; // map ig to the z coordinate of this planewave. + delete[] this->ig2isz; + this->ig2isz = new int[this->npw]; // map ig to the z coordinate of this planewave. ModuleBase::GlobalFunc::ZEROS(this->ig2isz, this->npw); - delete[] this->is2fftixy; this->is2fftixy = new int[this->nst]; // map is (index of sticks) to ixy (iy + ix * fftny). + delete[] this->is2fftixy; + this->is2fftixy = new int[this->nst]; // map is (index of sticks) to ixy (iy + ix * fftny). for (int is = 0; is < this->nst; ++is) { this->is2fftixy[is] = -1; } - int st_move = 0; // this is the st_move^th stick on current core. + int st_move = 0; // this is the st_move^th stick on current core. int pw_filled = 0; // how many current core's planewaves have been found. for (int ixy = 0; ixy < this->fftnxy; ++ixy) { @@ -220,10 +240,11 @@ void PW_Basis::get_ig2isz_is2fftixy( ig2ixyz[igl] = iz + iy * nz + ix * ny * nz; } #if defined(__CUDA) || defined(__ROCM) - if (this->device == "gpu") { + if (this->device == "gpu") + { resmem_int_op()(d_is2fftixy, this->nst); syncmem_int_h2d_op()(this->d_is2fftixy, this->is2fftixy, this->nst); - resmem_int_op()(ig2ixyz_gpu,this->npw); + resmem_int_op()(ig2ixyz_gpu, this->npw); syncmem_int_h2d_op()(ig2ixyz_gpu, ig2ixyz.data(), this->npw); } #endif diff --git a/source/module_basis/module_pw/pw_distributeg_method1.cpp b/source/module_basis/module_pw/pw_distributeg_method1.cpp index bd3de9e26b..c3c7e3ace5 100644 --- a/source/module_basis/module_pw/pw_distributeg_method1.cpp +++ b/source/module_basis/module_pw/pw_distributeg_method1.cpp @@ -1,7 +1,6 @@ #include "pw_basis.h" -#include "module_base/mymath.h" -#include "module_base/global_function.h" - +#include "source_base/global_function.h" +#include "source_base/mymath.h" namespace ModulePW { @@ -25,50 +24,53 @@ namespace ModulePW void PW_Basis::distribution_method1() { // initial the variables needed by all process - int *st_bottom2D = new int[fftnxy]; // st_bottom2D[ixy], minimum z of stick on (x, y). - int *st_length2D = new int[fftnxy]; // st_length2D[ixy], number of planewaves in stick on (x, y). - delete[] this->nst_per; this->nst_per = new int[this->poolnproc]; // number of sticks on each core. - delete[] this->npw_per; this->npw_per = new int[this->poolnproc]; // number of planewaves on each core. - delete[] this->fftixy2ip; this->fftixy2ip = new int[this->fftnxy]; // ip of core which contains the stick on (x, y). + int* st_bottom2D = new int[fftnxy]; // st_bottom2D[ixy], minimum z of stick on (x, y). + int* st_length2D = new int[fftnxy]; // st_length2D[ixy], number of planewaves in stick on (x, y). + delete[] this->nst_per; + this->nst_per = new int[this->poolnproc]; // number of sticks on each core. + delete[] this->npw_per; + this->npw_per = new int[this->poolnproc]; // number of planewaves on each core. + delete[] this->fftixy2ip; + this->fftixy2ip = new int[this->fftnxy]; // ip of core which contains the stick on (x, y). for (int ixy = 0; ixy < this->fftnxy; ++ixy) - this->fftixy2ip[ixy] = -1; // meaning this stick has not been distributed or there is no stick on (x, y). + this->fftixy2ip[ixy] = -1; // meaning this stick has not been distributed or there is no stick on (x, y). if (poolrank == 0) { /** - * @brief (1) Count the total number of planewaves (tot_npw) and sticks (this->nstot). - * - * @note the funcion here is defined in pw_distributeg.cpp - * Actually we will scan [(2 * ibox[0] + 1) * (2 * ibox[1] + 1)] points on x-y plane, - * but we define st_length2D with (fftny * fftnx) points here, because the diameter - * of the sphere should be shorter than the sides of the cube. - * calculate this->nstot and this->npwtot, liy, riy - */ + * @brief (1) Count the total number of planewaves (tot_npw) and sticks (this->nstot). + * + * @note the funcion here is defined in pw_distributeg.cpp + * Actually we will scan [(2 * ibox[0] + 1) * (2 * ibox[1] + 1)] points on x-y plane, + * but we define st_length2D with (fftny * fftnx) points here, because the diameter + * of the sphere should be shorter than the sides of the cube. + * calculate this->nstot and this->npwtot, liy, riy + */ this->count_pw_st(st_length2D, st_bottom2D); } #ifdef __MPI - MPI_Bcast(&this->npwtot, 1, MPI_INT, 0, this->pool_world); - MPI_Bcast(&this->nstot, 1, MPI_INT, 0, this->pool_world); - MPI_Bcast(&liy, 1, MPI_INT, 0, this->pool_world); - MPI_Bcast(&riy, 1, MPI_INT, 0, this->pool_world); - MPI_Bcast(&lix, 1, MPI_INT, 0, this->pool_world); - MPI_Bcast(&rix, 1, MPI_INT, 0, this->pool_world); + MPI_Bcast(&this->npwtot, 1, MPI_INT, 0, this->pool_world); + MPI_Bcast(&this->nstot, 1, MPI_INT, 0, this->pool_world); + MPI_Bcast(&liy, 1, MPI_INT, 0, this->pool_world); + MPI_Bcast(&riy, 1, MPI_INT, 0, this->pool_world); + MPI_Bcast(&lix, 1, MPI_INT, 0, this->pool_world); + MPI_Bcast(&rix, 1, MPI_INT, 0, this->pool_world); #endif - delete[] this->istot2ixy; + delete[] this->istot2ixy; this->istot2ixy = new int[this->nstot]; - if(poolrank == 0) + if (poolrank == 0) { #ifdef __MPI // Parallel line // (2) Collect the x, y indexs, and length of the sticks. - int* st_i = new int[this->nstot]; // x or x + fftnx (if x < 0) of stick. - int* st_j = new int[this->nstot]; // y or y + fftny (if y < 0) of stick. - int* st_length = new int[this->nstot]; // number of planewaves in stick. + int* st_i = new int[this->nstot]; // x or x + fftnx (if x < 0) of stick. + int* st_j = new int[this->nstot]; // y or y + fftny (if y < 0) of stick. + int* st_length = new int[this->nstot]; // number of planewaves in stick. this->collect_st(st_length2D, st_bottom2D, st_i, st_j, st_length); // (3) Distribute the sticks to cores. - //get nst_per, npw_per, fftixy2ip, and startnsz_per + // get nst_per, npw_per, fftixy2ip, and startnsz_per this->startnsz_per = new int[this->poolnproc]; this->divide_sticks_1(st_i, st_j, st_length); delete[] st_length; @@ -77,9 +79,9 @@ void PW_Basis::distribution_method1() this->get_istot2ixy(st_i, st_j); delete[] st_i; delete[] st_j; - //We do not need startnsz_per after it. + // We do not need startnsz_per after it. delete[] this->startnsz_per; - this->startnsz_per=nullptr; + this->startnsz_per = nullptr; #else // Serial line // get nst_per, npw_per, fftixy2ip, and istot2ixy @@ -98,12 +100,12 @@ void PW_Basis::distribution_method1() #endif } #ifdef __MPI - MPI_Bcast(st_length2D, this->fftnxy, MPI_INT, 0, this->pool_world); - MPI_Bcast(st_bottom2D, this->fftnxy, MPI_INT, 0, this->pool_world); - MPI_Bcast(this->fftixy2ip, this->fftnxy, MPI_INT, 0, this->pool_world); - MPI_Bcast(this->istot2ixy, this->nstot, MPI_INT, 0, this->pool_world); - MPI_Bcast(this->nst_per, this->poolnproc, MPI_INT, 0 , this->pool_world); - MPI_Bcast(this->npw_per, this->poolnproc, MPI_INT, 0 , this->pool_world); + MPI_Bcast(st_length2D, this->fftnxy, MPI_INT, 0, this->pool_world); + MPI_Bcast(st_bottom2D, this->fftnxy, MPI_INT, 0, this->pool_world); + MPI_Bcast(this->fftixy2ip, this->fftnxy, MPI_INT, 0, this->pool_world); + MPI_Bcast(this->istot2ixy, this->nstot, MPI_INT, 0, this->pool_world); + MPI_Bcast(this->nst_per, this->poolnproc, MPI_INT, 0, this->pool_world); + MPI_Bcast(this->npw_per, this->poolnproc, MPI_INT, 0, this->pool_world); #endif this->npw = this->npw_per[this->poolrank]; this->nst = this->nst_per[this->poolrank]; @@ -129,16 +131,16 @@ void PW_Basis::distribution_method1() */ void PW_Basis::collect_st( - int* st_length2D, // the number of planewaves that belong to the stick located on (x, y), stored in 2d x-y plane. - int* st_bottom2D, // the z-coordinate of the bottom of stick on (x, y), stored in 2d x-y plane. - int* st_i, // x or x + fftnx (if x < 0) of stick. - int* st_j, // y or y + fftny (if y < 0) of stick. - int* st_length // number of planewaves in stick, stored in 1d array with this->nstot elements. + int* st_length2D, // the number of planewaves that belong to the stick located on (x, y), stored in 2d x-y plane. + int* st_bottom2D, // the z-coordinate of the bottom of stick on (x, y), stored in 2d x-y plane. + int* st_i, // x or x + fftnx (if x < 0) of stick. + int* st_j, // y or y + fftny (if y < 0) of stick. + int* st_length // number of planewaves in stick, stored in 1d array with this->nstot elements. ) { - int *temp_st_i = new int[this->nstot]; // x or x + fftnx (if x < 0) of stick. - int *temp_st_j = new int[this->nstot]; // y or y + fftny (if y < 0) of stick. - double *temp_st_length = new double[this->nstot]; // length of sticks. + int* temp_st_i = new int[this->nstot]; // x or x + fftnx (if x < 0) of stick. + int* temp_st_j = new int[this->nstot]; // y or y + fftny (if y < 0) of stick. + double* temp_st_length = new double[this->nstot]; // length of sticks. ModuleBase::GlobalFunc::ZEROS(temp_st_length, this->nstot); ModuleBase::Vector3 f; @@ -158,7 +160,7 @@ void PW_Basis::collect_st( if (this->gamma_only) { - if(this->xprime) + if (this->xprime) { ix_start = 0; ix_end = this->fftnx - 1; @@ -182,8 +184,10 @@ void PW_Basis::collect_st( // so that its index in st_length and st_bottom is 9 * 10 + 2 = 92. int x = ix; int y = iy; - if (x < 0) x += nx; - if (y < 0) y += ny; + if (x < 0) + x += nx; + if (y < 0) + y += ny; int index = x * this->fftny + y; if (st_length2D[index] > 0) // meaning there is a stick on (x, y) point. { @@ -221,13 +225,14 @@ void PW_Basis::collect_st( assert(is == this->nstot); // std::cout<<"collect sticks done\n"; - // As we will distribute the longest sticks preferentially in Step(3), we rearrange st_* in the order of length decreasing. + // As we will distribute the longest sticks preferentially in Step(3), we rearrange st_* in the order of length + // decreasing. - int *st_sorted_index = new int[this->nstot]; // indexs in the order of length increasing. + int* st_sorted_index = new int[this->nstot]; // indexs in the order of length increasing. st_sorted_index[0] = 0; ModuleBase::heapsort(this->nstot, temp_st_length, st_sorted_index); // sort st_* in the order of length increasing. - int index = 0; // indexs in the order of length decreasing. + int index = 0; // indexs in the order of length decreasing. for (int istot = 0; istot < this->nstot; ++istot) { index = (this->nstot - 1) - istot; @@ -246,22 +251,20 @@ void PW_Basis::collect_st( return; } - /** * @brief (3-1) Distribute sticks to cores according to the number of plane waves. * - * We have rearranged sticks in the order of length decreasing, so that we will distribute the longest stick preferentially here. - * For each stick, we find the core that contains the least planewaves firstly, and distribute the stick to it, - * then update npw_per, this->fftixy2ip, and this->startnsz_per. + * We have rearranged sticks in the order of length decreasing, so that we will distribute the longest stick + * preferentially here. For each stick, we find the core that contains the least planewaves firstly, and distribute the + * stick to it, then update npw_per, this->fftixy2ip, and this->startnsz_per. * * @param in: tot_npw, this->nstot, st_i, st_j, st_length * @param out: npw_per, nst_per, this->fftixy2ip, this->startnsz_per */ -void PW_Basis::divide_sticks_1( - int* st_i, // x or x + fftnx (if x < 0) of stick. - int* st_j, // y or y + fftny (if y < 0) of stick. - int* st_length // the stick on (x, y) consists of st_length[x*fftny+y] planewaves. +void PW_Basis::divide_sticks_1(int* st_i, // x or x + fftnx (if x < 0) of stick. + int* st_j, // y or y + fftny (if y < 0) of stick. + int* st_length // the stick on (x, y) consists of st_length[x*fftny+y] planewaves. ) { ModuleBase::GlobalFunc::ZEROS(this->nst_per, poolnproc); @@ -296,7 +299,7 @@ void PW_Basis::divide_sticks_1( this->fftixy2ip[st_i[is] * this->fftny + st_j[is]] = ipmin; } - this->startnsz_per[0] = 0; + this->startnsz_per[0] = 0; for (int ip = 1; ip < poolnproc; ++ip) { this->startnsz_per[ip] = this->startnsz_per[ip - 1] + this->nst_per[ip - 1] * this->nz; @@ -305,7 +308,8 @@ void PW_Basis::divide_sticks_1( } /** - * @brief (3-2) Rearrange sticks in the order of the ip of core increasing, in each core, sticks are sorted in the order of ixy increasing. + * @brief (3-2) Rearrange sticks in the order of the ip of core increasing, in each core, sticks are sorted in the order + * of ixy increasing. * * (st_start + st_move) is the new index of sticks. * Then get istot2ixy (istot2ixy[is]: iy + ix * fftny of is^th stick among all sticks) on the first core @@ -314,9 +318,8 @@ void PW_Basis::divide_sticks_1( * @param out: istot2ixy */ -void PW_Basis::get_istot2ixy( - int* st_i, // x or x + fftnx (if x < 0) of stick. - int* st_j // y or y + fftny (if y < 0) of stick. +void PW_Basis::get_istot2ixy(int* st_i, // x or x + fftnx (if x < 0) of stick. + int* st_j // y or y + fftny (if y < 0) of stick. ) { assert(this->poolrank == 0); @@ -329,7 +332,7 @@ void PW_Basis::get_istot2ixy( int ip = this->fftixy2ip[ixy]; if (ip != -1) { - this->istot2ixy[this->startnsz_per[ip] / this->nz + st_move[ip]] = (ixy / fftny)*ny + ixy % fftny; + this->istot2ixy[this->startnsz_per[ip] / this->nz + st_move[ip]] = (ixy / fftny) * ny + ixy % fftny; st_move[ip]++; } } @@ -337,4 +340,4 @@ void PW_Basis::get_istot2ixy( return; } -} +} // namespace ModulePW diff --git a/source/module_basis/module_pw/pw_distributeg_method2.cpp b/source/module_basis/module_pw/pw_distributeg_method2.cpp index 2456a9d4ac..2c073283f4 100644 --- a/source/module_basis/module_pw/pw_distributeg_method2.cpp +++ b/source/module_basis/module_pw/pw_distributeg_method2.cpp @@ -1,7 +1,6 @@ #include "pw_basis.h" -#include "module_base/mymath.h" -#include "module_base/global_function.h" - +#include "source_base/global_function.h" +#include "source_base/mymath.h" namespace ModulePW { @@ -26,24 +25,27 @@ void PW_Basis::distribution_method2() { // initial the variables needed by all proc. - int *st_bottom2D = new int[fftnxy]; // st_bottom2D[ixy], minimum z of stick on (x, y). - int *st_length2D = new int[fftnxy]; // st_length2D[ixy], number of planewaves in stick on (x, y). - delete[] this->nst_per; this->nst_per = new int[this->poolnproc]; // number of sticks on each core. - delete[] this->npw_per; this->npw_per = new int[this->poolnproc]; // number of planewaves on each core. - delete[] this->fftixy2ip; this->fftixy2ip = new int[this->fftnxy]; // ip of core which contains the stick on (x, y). + int* st_bottom2D = new int[fftnxy]; // st_bottom2D[ixy], minimum z of stick on (x, y). + int* st_length2D = new int[fftnxy]; // st_length2D[ixy], number of planewaves in stick on (x, y). + delete[] this->nst_per; + this->nst_per = new int[this->poolnproc]; // number of sticks on each core. + delete[] this->npw_per; + this->npw_per = new int[this->poolnproc]; // number of planewaves on each core. + delete[] this->fftixy2ip; + this->fftixy2ip = new int[this->fftnxy]; // ip of core which contains the stick on (x, y). for (int ixy = 0; ixy < this->fftnxy; ++ixy) - this->fftixy2ip[ixy] = -1; // meaning this stick has not been distributed or there is no stick on (x, y). + this->fftixy2ip[ixy] = -1; // meaning this stick has not been distributed or there is no stick on (x, y). if (poolrank == 0) { /** - * @brief (1) Count the total number of planewaves (tot_npw) and sticks (this->nstot). - * - * @note the funcion here is defined in pw_distributeg.cpp - * Actually we will scan [(2 * ibox[0] + 1) * (2 * ibox[1] + 1)] points on x-y plane, - * but we define st_length2D with (fftny * fftnx) points here, because the diameter - * of the sphere should be shorter than the sides of the cube. - * calculate this->nstot and this->npwtot, liy, riy - */ + * @brief (1) Count the total number of planewaves (tot_npw) and sticks (this->nstot). + * + * @note the funcion here is defined in pw_distributeg.cpp + * Actually we will scan [(2 * ibox[0] + 1) * (2 * ibox[1] + 1)] points on x-y plane, + * but we define st_length2D with (fftny * fftnx) points here, because the diameter + * of the sphere should be shorter than the sides of the cube. + * calculate this->nstot and this->npwtot, liy, riy + */ this->count_pw_st(st_length2D, st_bottom2D); } #ifdef __MPI @@ -54,13 +56,13 @@ void PW_Basis::distribution_method2() MPI_Bcast(&lix, 1, MPI_INT, 0, this->pool_world); MPI_Bcast(&rix, 1, MPI_INT, 0, this->pool_world); #endif - delete[] this->istot2ixy; + delete[] this->istot2ixy; this->istot2ixy = new int[this->nstot]; - if(poolrank == 0) + if (poolrank == 0) { #ifdef __MPI - + // Parallel line // (2) Devide the sticks to each core, sticks are in the order of ixy increasing. // get nst_per and startnsz_per @@ -70,9 +72,9 @@ void PW_Basis::distribution_method2() // (3) Create the maps from ixy to ip, istot, and from istot to ixy // get istot2ixy, fftixy2ip, npw_per this->create_maps(st_length2D); - //We do not need startnsz_per after it. + // We do not need startnsz_per after it. delete[] this->startnsz_per; - this->startnsz_per=nullptr; + this->startnsz_per = nullptr; #else // Serial line // get nst_per, npw_per, fftixy2ip, and istot2ixy @@ -128,8 +130,10 @@ void PW_Basis::divide_sticks_2() for (int ip = 0; ip < this->poolnproc; ++ip) { nst_per[ip] = average_nst; - if (ip < mods) nst_per[ip]++; - if (ip >= 1) this->startnsz_per[ip] = this->startnsz_per[ip-1] + this->nst_per[ip-1] * this->nz; + if (ip < mods) + nst_per[ip]++; + if (ip >= 1) + this->startnsz_per[ip] = this->startnsz_per[ip - 1] + this->nst_per[ip - 1] * this->nz; } } @@ -140,7 +144,7 @@ void PW_Basis::divide_sticks_2() */ void PW_Basis::create_maps( - int* st_length2D // the number of planewaves that belong to the stick located on (x, y), stored in 2d x-y plane. + int* st_length2D // the number of planewaves that belong to the stick located on (x, y), stored in 2d x-y plane. ) { ModuleBase::GlobalFunc::ZEROS(this->istot2ixy, this->nstot); @@ -158,9 +162,10 @@ void PW_Basis::create_maps( if (ip < this->poolnproc - 1) { // all of sticks on current core are found, skip to next core - if (st_move * this->nz >= this->startnsz_per[ip + 1]) ip++; + if (st_move * this->nz >= this->startnsz_per[ip + 1]) + ip++; } } } } -} +} // namespace ModulePW diff --git a/source/module_basis/module_pw/pw_distributer.cpp b/source/module_basis/module_pw/pw_distributer.cpp index b4a577c12b..0d3465067f 100644 --- a/source/module_basis/module_pw/pw_distributer.cpp +++ b/source/module_basis/module_pw/pw_distributer.cpp @@ -1,5 +1,5 @@ #include "pw_basis.h" -#include "module_base/global_function.h" +#include "source_base/global_function.h" namespace ModulePW { @@ -10,20 +10,24 @@ namespace ModulePW */ void PW_Basis::distribute_r() { - delete[] this->numz; this->numz = new int[this->poolnproc]; - delete[] this->startz; this->startz = new int[this->poolnproc]; + delete[] this->numz; + this->numz = new int[this->poolnproc]; + delete[] this->startz; + this->startz = new int[this->poolnproc]; ModuleBase::GlobalFunc::ZEROS(this->numz, this->poolnproc); ModuleBase::GlobalFunc::ZEROS(this->startz, this->poolnproc); int npz = this->nz / this->poolnproc; int modz = this->nz % this->poolnproc; this->startz[0] = 0; - for(int ip = 0 ; ip < this->poolnproc ; ++ip) + for (int ip = 0; ip < this->poolnproc; ++ip) { this->numz[ip] = npz; - if(ip < modz) this->numz[ip]++; - if(ip < this->poolnproc - 1) this->startz[ip+1] = this->startz[ip] + numz[ip]; - if(ip == this->poolrank) + if (ip < modz) + this->numz[ip]++; + if (ip < this->poolnproc - 1) + this->startz[ip + 1] = this->startz[ip] + numz[ip]; + if (ip == this->poolrank) { this->nplane = numz[ip]; this->startz_current = startz[ip]; @@ -33,4 +37,4 @@ void PW_Basis::distribute_r() return; } -} +} // namespace ModulePW diff --git a/source/module_basis/module_pw/pw_gatherscatter.h b/source/module_basis/module_pw/pw_gatherscatter.h index 97be6e5c23..2e7c8530b7 100644 --- a/source/module_basis/module_pw/pw_gatherscatter.h +++ b/source/module_basis/module_pw/pw_gatherscatter.h @@ -1,6 +1,6 @@ #include "pw_basis.h" -#include "module_base/global_function.h" -#include "module_base/timer.h" +#include "source_base/global_function.h" +#include "source_base/timer.h" #include "typeinfo" namespace ModulePW { @@ -14,77 +14,77 @@ namespace ModulePW template void PW_Basis::gatherp_scatters(std::complex* in, std::complex* out) const { - //ModuleBase::timer::tick(this->classname, "gatherp_scatters"); - - if(this->poolnproc == 1) //In this case nst=nstot, nz = nplane, + // ModuleBase::timer::tick(this->classname, "gatherp_scatters"); + + if (this->poolnproc == 1) // In this case nst=nstot, nz = nplane, { #ifdef _OPENMP #pragma omp parallel for #endif - for(int is = 0 ; is < this->nst ; ++is) + for (int is = 0; is < this->nst; ++is) { int ixy = this->istot2ixy[is]; - //int ixy = (ixy / fftny)*ny + ixy % fftny; - std::complex *outp = &out[is*nz]; - std::complex *inp = &in[ixy*nz]; - for(int iz = 0 ; iz < this->nz ; ++iz) + // int ixy = (ixy / fftny)*ny + ixy % fftny; + std::complex* outp = &out[is * nz]; + std::complex* inp = &in[ixy * nz]; + for (int iz = 0; iz < this->nz; ++iz) { outp[iz] = inp[iz]; } } - //ModuleBase::timer::tick(this->classname, "gatherp_scatters"); + // ModuleBase::timer::tick(this->classname, "gatherp_scatters"); return; } #ifdef __MPI - //change (nplane fftnxy) to (nplane,nstot) - // Hence, we can send them at one time. + // change (nplane fftnxy) to (nplane,nstot) + // Hence, we can send them at one time. #ifdef _OPENMP #pragma omp parallel for #endif - for (int istot = 0;istot < nstot; ++istot) - { - int ixy = this->istot2ixy[istot]; - //int ixy = (ixy / fftny)*ny + ixy % fftny; - std::complex *outp = &out[istot*nplane]; - std::complex *inp = &in[ixy*nplane]; - for (int iz = 0; iz < nplane; ++iz) - { - outp[iz] = inp[iz]; - } - } + for (int istot = 0; istot < nstot; ++istot) + { + int ixy = this->istot2ixy[istot]; + // int ixy = (ixy / fftny)*ny + ixy % fftny; + std::complex* outp = &out[istot * nplane]; + std::complex* inp = &in[ixy * nplane]; + for (int iz = 0; iz < nplane; ++iz) + { + outp[iz] = inp[iz]; + } + } - //exchange data + // exchange data //(nplane,nstot) to (numz[ip],ns, poolnproc) - if(typeid(T) == typeid(double)) - { - MPI_Alltoallv(out, numr, startr, MPI_DOUBLE_COMPLEX, in, numg, startg, MPI_DOUBLE_COMPLEX, this->pool_world); - } - else if(typeid(T) == typeid(float)) - { - MPI_Alltoallv(out, numr, startr, MPI_COMPLEX, in, numg, startg, MPI_COMPLEX, this->pool_world); - } + if (typeid(T) == typeid(double)) + { + MPI_Alltoallv(out, numr, startr, MPI_DOUBLE_COMPLEX, in, numg, startg, MPI_DOUBLE_COMPLEX, this->pool_world); + } + else if (typeid(T) == typeid(float)) + { + MPI_Alltoallv(out, numr, startr, MPI_COMPLEX, in, numg, startg, MPI_COMPLEX, this->pool_world); + } // change (nz,ns) to (numz[ip],ns, poolnproc) #ifdef _OPENMP #pragma omp parallel for collapse(2) #endif - for (int ip = 0; ip < this->poolnproc ;++ip) - { - for (int is = 0; is < this->nst; ++is) - { + for (int ip = 0; ip < this->poolnproc; ++ip) + { + for (int is = 0; is < this->nst; ++is) + { int nzip = this->numz[ip]; - std::complex *outp0 = &out[startz[ip]]; - std::complex *inp0 = &in[startg[ip]]; - std::complex *outp = &outp0[is * nz]; - std::complex *inp = &inp0[is * nzip ]; - for (int izip = 0; izip < nzip; ++izip) - { - outp[izip] = inp[izip]; - } - } - } + std::complex* outp0 = &out[startz[ip]]; + std::complex* inp0 = &in[startg[ip]]; + std::complex* outp = &outp0[is * nz]; + std::complex* inp = &inp0[is * nzip]; + for (int izip = 0; izip < nzip; ++izip) + { + outp[izip] = inp[izip]; + } + } + } #endif - //ModuleBase::timer::tick(this->classname, "gatherp_scatters"); + // ModuleBase::timer::tick(this->classname, "gatherp_scatters"); return; } @@ -99,12 +99,12 @@ template void PW_Basis::gathers_scatterp(std::complex* in, std::complex* out) const { // ModuleBase::timer::tick(this->classname, "gathers_scatterp"); - if(this->poolnproc == 1) //In this case nrxx=fftnx*fftny*nz, nst = nstot, + if (this->poolnproc == 1) // In this case nrxx=fftnx*fftny*nz, nst = nstot, { #ifdef _OPENMP -#pragma omp parallel for schedule(static, 4096/sizeof(T)) +#pragma omp parallel for schedule(static, 4096 / sizeof(T)) #endif - for(int i = 0; i < this->nrxx; ++i) + for (int i = 0; i < this->nrxx; ++i) { out[i] = std::complex(0, 0); } @@ -112,13 +112,13 @@ void PW_Basis::gathers_scatterp(std::complex* in, std::complex* out) const #ifdef _OPENMP #pragma omp parallel for #endif - for(int is = 0 ; is < this->nst ; ++is) + for (int is = 0; is < this->nst; ++is) { int ixy = istot2ixy[is]; - //int ixy = (ixy / fftny)*ny + ixy % fftny; - std::complex *outp = &out[ixy*nz]; - std::complex *inp = &in[is*nz]; - for(int iz = 0 ; iz < this->nz ; ++iz) + // int ixy = (ixy / fftny)*ny + ixy % fftny; + std::complex* outp = &out[ixy * nz]; + std::complex* inp = &in[is * nz]; + for (int iz = 0; iz < this->nz; ++iz) { outp[iz] = inp[iz]; } @@ -128,64 +128,62 @@ void PW_Basis::gathers_scatterp(std::complex* in, std::complex* out) const } #ifdef __MPI // change (nz,ns) to (numz[ip],ns, poolnproc) - // Hence, we can send them at one time. + // Hence, we can send them at one time. #ifdef _OPENMP #pragma omp parallel for collapse(2) #endif - for (int ip = 0; ip < this->poolnproc ;++ip) - { - for (int is = 0; is < this->nst; ++is) - { + for (int ip = 0; ip < this->poolnproc; ++ip) + { + for (int is = 0; is < this->nst; ++is) + { int nzip = this->numz[ip]; - std::complex *outp0 = &out[startg[ip]]; - std::complex *inp0 = &in[startz[ip]]; - std::complex *outp = &outp0[is * nzip]; - std::complex *inp = &inp0[is * nz ]; - for (int izip = 0; izip < nzip; ++izip) - { - outp[izip] = inp[izip]; - } - } - } + std::complex* outp0 = &out[startg[ip]]; + std::complex* inp0 = &in[startz[ip]]; + std::complex* outp = &outp0[is * nzip]; + std::complex* inp = &inp0[is * nz]; + for (int izip = 0; izip < nzip; ++izip) + { + outp[izip] = inp[izip]; + } + } + } - //exchange data + // exchange data //(numz[ip],ns, poolnproc) to (nplane,nstot) - if(typeid(T) == typeid(double)) - { - MPI_Alltoallv(out, numg, startg, MPI_DOUBLE_COMPLEX, in, numr, startr, MPI_DOUBLE_COMPLEX, this->pool_world); - } - else if(typeid(T) == typeid(float)) - { - MPI_Alltoallv(out, numg, startg, MPI_COMPLEX, in, numr, startr, MPI_COMPLEX, this->pool_world); - } + if (typeid(T) == typeid(double)) + { + MPI_Alltoallv(out, numg, startg, MPI_DOUBLE_COMPLEX, in, numr, startr, MPI_DOUBLE_COMPLEX, this->pool_world); + } + else if (typeid(T) == typeid(float)) + { + MPI_Alltoallv(out, numg, startg, MPI_COMPLEX, in, numr, startr, MPI_COMPLEX, this->pool_world); + } #ifdef _OPENMP -#pragma omp parallel for schedule(static, 4096/sizeof(T)) +#pragma omp parallel for schedule(static, 4096 / sizeof(T)) #endif - for(int i = 0; i < this->nrxx; ++i) + for (int i = 0; i < this->nrxx; ++i) { out[i] = std::complex(0, 0); } - //change (nplane,nstot) to (nplane fftnxy) + // change (nplane,nstot) to (nplane fftnxy) #ifdef _OPENMP #pragma omp parallel for #endif - for (int istot = 0;istot < nstot; ++istot) - { - int ixy = this->istot2ixy[istot]; - //int ixy = (ixy / fftny)*ny + ixy % fftny; - std::complex *outp = &out[ixy * nplane]; - std::complex *inp = &in[istot * nplane]; - for (int iz = 0; iz < nplane; ++iz) - { - outp[iz] = inp[iz]; - } + for (int istot = 0; istot < nstot; ++istot) + { + int ixy = this->istot2ixy[istot]; + // int ixy = (ixy / fftny)*ny + ixy % fftny; + std::complex* outp = &out[ixy * nplane]; + std::complex* inp = &in[istot * nplane]; + for (int iz = 0; iz < nplane; ++iz) + { + outp[iz] = inp[iz]; + } } #endif // ModuleBase::timer::tick(this->classname, "gathers_scatterp"); return; } - - -} +} // namespace ModulePW diff --git a/source/module_basis/module_pw/pw_init.cpp b/source/module_basis/module_pw/pw_init.cpp index b70662491e..67da578f71 100644 --- a/source/module_basis/module_pw/pw_init.cpp +++ b/source/module_basis/module_pw/pw_init.cpp @@ -1,48 +1,42 @@ #include "pw_basis.h" -#include "module_base/constants.h" +#include "source_base/constants.h" namespace ModulePW { #ifdef __MPI -void PW_Basis:: initmpi( - const int poolnproc_in, - const int poolrank_in, - MPI_Comm pool_world_in -) +void PW_Basis::initmpi(const int poolnproc_in, const int poolrank_in, MPI_Comm pool_world_in) { - this->poolnproc = poolnproc_in; - this->poolrank = poolrank_in; - this->pool_world = pool_world_in; + this->poolnproc = poolnproc_in; + this->poolrank = poolrank_in; + this->pool_world = pool_world_in; } #endif -/// +/// /// Init the grids for FFT /// Input: lattice vectors of the cell, Energy cut off for G^2/2 /// Output: fftnx, fftny, fftnz, fftnxyz, latvec, G, GT, GGT -/// -void PW_Basis:: initgrids( - const double lat0_in, //unit length (unit in bohr) - const ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors - const double gridecut -) +/// +void PW_Basis::initgrids(const double lat0_in, // unit length (unit in bohr) + const ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors + const double gridecut) { - //init lattice + // init lattice this->lat0 = lat0_in; this->tpiba = ModuleBase::TWO_PI / this->lat0; - this->tpiba2 = this->tpiba*this->tpiba; + this->tpiba2 = this->tpiba * this->tpiba; this->latvec = latvec_in; this->omega = std::abs(latvec.Det()) * lat0 * lat0 * lat0; this->GT = latvec.Inverse(); - this->G = GT.Transpose(); - this->GGT = G * GT; + this->G = GT.Transpose(); + this->GGT = G * GT; //------------------------------------------------------------ //-------------------------init grids------------------------- //----------------------------------------------------------- this->gridecut_lat = gridecut / this->tpiba2; ModuleBase::Vector3 lat; - int *ibox = new int[3];// ibox[i] are the minimal FFT dimensions, - + int* ibox = new int[3]; // ibox[i] are the minimal FFT dimensions, + lat.x = latvec.e11; lat.y = latvec.e12; lat.z = latvec.e13; @@ -57,142 +51,148 @@ void PW_Basis:: initgrids( lat.y = latvec.e32; lat.z = latvec.e33; ibox[2] = int(sqrt(this->gridecut_lat) * sqrt(lat * lat)) + 1; - - // We should check if ibox is the minimum number to cover the planewave ball. + + // We should check if ibox is the minimum number to cover the planewave ball. // Find the minimum number of ibox by traveling all possible ibox - int n1,n2,n3; + int n1, n2, n3; n1 = n2 = n3 = 0; - for(int igz = -ibox[2]+this->poolrank; igz <= ibox[2]; igz += this->poolnproc) + for (int igz = -ibox[2] + this->poolrank; igz <= ibox[2]; igz += this->poolnproc) { - for(int igy = -ibox[1]; igy <= ibox[1]; ++igy) + for (int igy = -ibox[1]; igy <= ibox[1]; ++igy) { - for(int igx = -ibox[0]; igx <= ibox[0]; ++igx) + for (int igx = -ibox[0]; igx <= ibox[0]; ++igx) { ModuleBase::Vector3 f; f.x = igx; f.y = igy; f.z = igz; double modulus = f * (this->GGT * f); - if(modulus <= this->gridecut_lat) + if (modulus <= this->gridecut_lat) { - if(n1 < std::abs(igx)) n1 = std::abs(igx); - if(n2 < std::abs(igy)) n2 = std::abs(igy); - if(n3 < std::abs(igz)) n3 = std::abs(igz); + if (n1 < std::abs(igx)) + n1 = std::abs(igx); + if (n2 < std::abs(igy)) + n2 = std::abs(igy); + if (n3 < std::abs(igz)) + n3 = std::abs(igz); } } } } - ibox[0] = 2*n1+1; - ibox[1] = 2*n2+1; - ibox[2] = 2*n3+1; + ibox[0] = 2 * n1 + 1; + ibox[1] = 2 * n2 + 1; + ibox[2] = 2 * n3 + 1; #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, ibox, 3, MPI_INT, MPI_MAX , this->pool_world); + MPI_Allreduce(MPI_IN_PLACE, ibox, 3, MPI_INT, MPI_MAX, this->pool_world); #endif // Find the minimal FFT box size the factors into the primes (2,3,5,7). for (int i = 0; i < 3; i++) { - int b = 0; + int b = 0; int n2 = 0; int n3 = 0; int n5 = 0; - //int n7 = 0; + // int n7 = 0; bool done_factoring = false; - - // increase ibox[i] by 1 until it is totally factorizable by (2,3,5,7) + + // increase ibox[i] by 1 until it is totally factorizable by (2,3,5,7) do { - b = ibox[i]; - - //n2 = n3 = n5 = n7 = 0; - n2 = n3 = n5 = 0; - done_factoring = false; - if ((this->full_pw && this->full_pw_dim == 2) && b % 2 != 0) done_factoring = true; // full_pw_dim = 2 means FFT dimensions should be even. - while (!done_factoring) - { - if (b % 2 == 0 && (!this->full_pw || this->full_pw_dim != 1)) // full_pw_dim = 1 means FFT dimension should be odd. - { - n2++; - b /= 2; - continue; - } - if (b % 3 == 0) - { - n3++; - b /= 3; - continue; - } - if (b % 5 == 0) - { - n5++; - b /= 5; - continue; - } - //if (b%7==0) { n7++; b /= 7; continue; } - done_factoring = true; - } + b = ibox[i]; + + // n2 = n3 = n5 = n7 = 0; + n2 = n3 = n5 = 0; + done_factoring = false; + if ((this->full_pw && this->full_pw_dim == 2) && b % 2 != 0) + done_factoring = true; // full_pw_dim = 2 means FFT dimensions should be even. + while (!done_factoring) + { + if (b % 2 == 0 + && (!this->full_pw || this->full_pw_dim != 1)) // full_pw_dim = 1 means FFT dimension should be odd. + { + n2++; + b /= 2; + continue; + } + if (b % 3 == 0) + { + n3++; + b /= 3; + continue; + } + if (b % 5 == 0) + { + n5++; + b /= 5; + continue; + } + // if (b%7==0) { n7++; b /= 7; continue; } + done_factoring = true; + } ibox[i] += 1; - } - while (b != 1); + } while (b != 1); ibox[i] -= 1; - // b==1 means fftbox[i] is (2,3,5,7) factorizable + // b==1 means fftbox[i] is (2,3,5,7) factorizable } this->nx = ibox[0]; this->ny = ibox[1]; this->nz = ibox[2]; - this->nxy =this->nx * this->ny; + this->nxy = this->nx * this->ny; this->nxyz = this->nxy * this->nz; - delete[] ibox; + delete[] ibox; return; } -/// +/// /// Init the grids for FFT /// Input: lattice vectors of the cell, nx, ny, nz /// Output: nx, ny, nz, nxyz, latvec, G, GT, GGT -/// -void PW_Basis:: initgrids( - const double lat0_in, - const ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors - const int nx_in, int ny_in, int nz_in -) +/// +void PW_Basis::initgrids(const double lat0_in, + const ModuleBase::Matrix3 latvec_in, // Unitcell lattice vectors + const int nx_in, + int ny_in, + int nz_in) { this->lat0 = lat0_in; this->tpiba = ModuleBase::TWO_PI / this->lat0; - this->tpiba2 = this->tpiba*this->tpiba; + this->tpiba2 = this->tpiba * this->tpiba; this->latvec = latvec_in; this->omega = std::abs(latvec.Det()) * lat0 * lat0 * lat0; this->GT = latvec.Inverse(); - this->G = GT.Transpose(); - this->GGT = G * GT; + this->G = GT.Transpose(); + this->GGT = G * GT; this->nx = nx_in; this->ny = ny_in; this->nz = nz_in; this->nxy = this->nx * this->ny; this->nxyz = this->nxy * this->nz; - int *ibox = new int[3]; - ibox[0] = int((this->nx-1)/2)+1; - ibox[1] = int((this->ny-1)/2)+1; - ibox[2] = int((this->nz-1)/2)+1; + int* ibox = new int[3]; + ibox[0] = int((this->nx - 1) / 2) + 1; + ibox[1] = int((this->ny - 1) / 2) + 1; + ibox[2] = int((this->nz - 1) / 2) + 1; this->gridecut_lat = 1e20; int count = 0; - for(int igz = -ibox[2]; igz <= ibox[2]; ++igz) + for (int igz = -ibox[2]; igz <= ibox[2]; ++igz) { - for(int igy = -ibox[1]; igy <= ibox[1]; ++igy) + for (int igy = -ibox[1]; igy <= ibox[1]; ++igy) { - for(int igx = -ibox[0]; igx <= ibox[0]; ++igx) + for (int igx = -ibox[0]; igx <= ibox[0]; ++igx) { ++count; - if(count%this->poolnproc != this->poolrank) continue; - if(std::abs(igx)<=ibox[0]-1 && std::abs(igy)<=ibox[1]-1 && std::abs(igz)<=ibox[2]-1 ) continue; + if (count % this->poolnproc != this->poolrank) + continue; + if (std::abs(igx) <= ibox[0] - 1 && std::abs(igy) <= ibox[1] - 1 && std::abs(igz) <= ibox[2] - 1) + continue; ModuleBase::Vector3 f; f.x = igx; f.y = igy; f.z = igz; double modulus = f * (this->GGT * f); - if(modulus < this->gridecut_lat) + if (modulus < this->gridecut_lat) { this->gridecut_lat = modulus; } @@ -200,7 +200,7 @@ void PW_Basis:: initgrids( } } #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, &this->gridecut_lat, 1, MPI_DOUBLE, MPI_MIN , this->pool_world); + MPI_Allreduce(MPI_IN_PLACE, &this->gridecut_lat, 1, MPI_DOUBLE, MPI_MIN, this->pool_world); #endif this->gridecut_lat -= 1e-6; @@ -208,14 +208,11 @@ void PW_Basis:: initgrids( return; } - -//Init some parameters -void PW_Basis:: initparameters( - const bool gamma_only_in, - const double pwecut_in, - const int distribution_type_in, - const bool xprime_in -) +// Init some parameters +void PW_Basis::initparameters(const bool gamma_only_in, + const double pwecut_in, + const int distribution_type_in, + const bool xprime_in) { this->xprime = xprime_in; this->gamma_only = gamma_only_in; @@ -223,19 +220,21 @@ void PW_Basis:: initparameters( // we have F(-k) = F(k)*, so that only half of planewaves are needed. this->fftny = this->ny; this->fftnx = this->nx; - if (this->gamma_only) + if (this->gamma_only) { - if(this->xprime) this->fftnx = int(this->nx / 2) + 1; - else this->fftny = int(this->ny / 2) + 1; - } - + if (this->xprime) + this->fftnx = int(this->nx / 2) + 1; + else + this->fftny = int(this->ny / 2) + 1; + } + this->fftnz = this->nz; this->fftnxy = this->fftnx * this->fftny; this->fftnxyz = this->fftnxy * this->fftnz; this->ggecut = pwecut_in / this->tpiba2; - //ggecut should be no larger than gridecut - if(this->ggecut > this->gridecut_lat) + // ggecut should be no larger than gridecut + if (this->ggecut > this->gridecut_lat) { this->ggecut = this->gridecut_lat; } @@ -243,13 +242,11 @@ void PW_Basis:: initparameters( } // Set parameters about full planewave, used only in OFDFT for now. sunliang added 2022-08-30 -void PW_Basis::setfullpw( - const bool inpt_full_pw, - const int inpt_full_pw_dim -) +void PW_Basis::setfullpw(const bool inpt_full_pw, const int inpt_full_pw_dim) { this->full_pw = inpt_full_pw; this->full_pw_dim = inpt_full_pw_dim; - if (!this->full_pw) this->full_pw_dim = 0; + if (!this->full_pw) + this->full_pw_dim = 0; } -} \ No newline at end of file +} // namespace ModulePW \ No newline at end of file diff --git a/source/module_basis/module_pw/pw_transform.cpp b/source/module_basis/module_pw/pw_transform.cpp index 9d83d57e3c..5af52bdcba 100644 --- a/source/module_basis/module_pw/pw_transform.cpp +++ b/source/module_basis/module_pw/pw_transform.cpp @@ -1,9 +1,9 @@ -#include "module_base/global_function.h" -#include "module_base/timer.h" #include "module_basis/module_pw/kernels/pw_op.h" #include "module_fft/fft_bundle.h" #include "pw_basis.h" #include "pw_gatherscatter.h" +#include "source_base/global_function.h" +#include "source_base/timer.h" #include #include diff --git a/source/module_basis/module_pw/pw_transform_gpu.cpp b/source/module_basis/module_pw/pw_transform_gpu.cpp index 6b3cfb045f..d4de9274d9 100644 --- a/source/module_basis/module_pw/pw_transform_gpu.cpp +++ b/source/module_basis/module_pw/pw_transform_gpu.cpp @@ -1,6 +1,6 @@ -#include "module_base/timer.h" #include "module_basis/module_pw/kernels/pw_op.h" #include "pw_basis.h" +#include "source_base/timer.h" namespace ModulePW { #if (defined(__CUDA) || defined(__ROCM)) @@ -10,10 +10,11 @@ void PW_Basis::real2recip_gpu(const FPTYPE* in, std::complex* out, const ModuleBase::timer::tick(this->classname, "real_to_recip gpu"); assert(this->poolnproc == 1); const size_t size = this->nrxx; - base_device::memory::cast_memory_op, FPTYPE,base_device::DEVICE_GPU, base_device::DEVICE_GPU>()( - this->fft_bundle.get_auxr_3d_data(), - in, - size); + base_device::memory:: + cast_memory_op, FPTYPE, base_device::DEVICE_GPU, base_device::DEVICE_GPU>()( + this->fft_bundle.get_auxr_3d_data(), + in, + size); this->fft_bundle.fft3D_forward(this->fft_bundle.get_auxr_3d_data(), this->fft_bundle.get_auxr_3d_data()); diff --git a/source/module_basis/module_pw/pw_transform_k.cpp b/source/module_basis/module_pw/pw_transform_k.cpp index 61fb2892c2..bc61e28aea 100644 --- a/source/module_basis/module_pw/pw_transform_k.cpp +++ b/source/module_basis/module_pw/pw_transform_k.cpp @@ -1,7 +1,7 @@ -#include "module_base/timer.h" #include "module_basis/module_pw/kernels/pw_op.h" #include "pw_basis_k.h" #include "pw_gatherscatter.h" +#include "source_base/timer.h" #include #include @@ -306,11 +306,11 @@ void PW_Basis_K::real_to_recip(const base_device::DEVICE_CPU* /*dev*/, const bool add, const double factor) const { - #if defined(__DSP) - this->real2recip_dsp(in,out,ik,add,factor); - #else - this->real2recip(in, out, ik, add, factor); - #endif +#if defined(__DSP) + this->real2recip_dsp(in, out, ik, add, factor); +#else + this->real2recip(in, out, ik, add, factor); +#endif } template <> @@ -331,11 +331,11 @@ void PW_Basis_K::recip_to_real(const base_device::DEVICE_CPU* /*dev*/, const bool add, const double factor) const { - #if defined(__DSP) - this->recip2real_dsp(in,out,ik,add,factor); - #else - this->recip2real(in, out, ik, add, factor); - #endif +#if defined(__DSP) + this->recip2real_dsp(in, out, ik, add, factor); +#else + this->recip2real(in, out, ik, add, factor); +#endif } #if (defined(__CUDA) || defined(__ROCM)) @@ -356,7 +356,8 @@ void PW_Basis_K::real_to_recip(const base_device::DEVICE_GPU* ctx, in, this->nrxx); - this->fft_bundle.fft3D_forward(this->fft_bundle.get_auxr_3d_data(), this->fft_bundle.get_auxr_3d_data()); + this->fft_bundle.fft3D_forward(this->fft_bundle.get_auxr_3d_data(), + this->fft_bundle.get_auxr_3d_data()); const int startig = ik * this->npwk_max; const int npw_k = this->npwk[ik]; @@ -387,7 +388,8 @@ void PW_Basis_K::real_to_recip(const base_device::DEVICE_GPU* ctx, in, this->nrxx); - this->fft_bundle.fft3D_forward(this->fft_bundle.get_auxr_3d_data(), this->fft_bundle.get_auxr_3d_data()); + this->fft_bundle.fft3D_forward(this->fft_bundle.get_auxr_3d_data(), + this->fft_bundle.get_auxr_3d_data()); const int startig = ik * this->npwk_max; const int npw_k = this->npwk[ik]; @@ -425,7 +427,8 @@ void PW_Basis_K::recip_to_real(const base_device::DEVICE_GPU* ctx, this->ig2ixyz_k + startig, in, this->fft_bundle.get_auxr_3d_data()); - this->fft_bundle.fft3D_backward(this->fft_bundle.get_auxr_3d_data(), this->fft_bundle.get_auxr_3d_data()); + this->fft_bundle.fft3D_backward(this->fft_bundle.get_auxr_3d_data(), + this->fft_bundle.get_auxr_3d_data()); set_recip_to_real_output_op()(this->nrxx, add, @@ -459,7 +462,8 @@ void PW_Basis_K::recip_to_real(const base_device::DEVICE_GPU* ctx, this->ig2ixyz_k + startig, in, this->fft_bundle.get_auxr_3d_data()); - this->fft_bundle.fft3D_backward(this->fft_bundle.get_auxr_3d_data(), this->fft_bundle.get_auxr_3d_data()); + this->fft_bundle.fft3D_backward(this->fft_bundle.get_auxr_3d_data(), + this->fft_bundle.get_auxr_3d_data()); set_recip_to_real_output_op()(this->nrxx, add, @@ -472,10 +476,10 @@ void PW_Basis_K::recip_to_real(const base_device::DEVICE_GPU* ctx, template void PW_Basis_K::real2recip_gpu(const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const FPTYPE factor) const + std::complex* out, + const int ik, + const bool add, + const FPTYPE factor) const { ModuleBase::timer::tick(this->classname, "real_to_recip gpu"); assert(this->gamma_only == false); @@ -487,7 +491,8 @@ void PW_Basis_K::real2recip_gpu(const std::complex* in, in, this->nrxx); - this->fft_bundle.fft3D_forward(this->fft_bundle.get_auxr_3d_data(), this->fft_bundle.get_auxr_3d_data()); + this->fft_bundle.fft3D_forward(this->fft_bundle.get_auxr_3d_data(), + this->fft_bundle.get_auxr_3d_data()); const int startig = ik * this->npwk_max; const int npw_k = this->npwk[ik]; @@ -502,10 +507,10 @@ void PW_Basis_K::real2recip_gpu(const std::complex* in, } template void PW_Basis_K::recip2real_gpu(const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const FPTYPE factor) const + std::complex* out, + const int ik, + const bool add, + const FPTYPE factor) const { ModuleBase::timer::tick(this->classname, "recip_to_real gpu"); assert(this->gamma_only == false); @@ -523,7 +528,8 @@ void PW_Basis_K::recip2real_gpu(const std::complex* in, this->ig2ixyz_k + startig, in, this->fft_bundle.get_auxr_3d_data()); - this->fft_bundle.fft3D_backward(this->fft_bundle.get_auxr_3d_data(), this->fft_bundle.get_auxr_3d_data()); + this->fft_bundle.fft3D_backward(this->fft_bundle.get_auxr_3d_data(), + this->fft_bundle.get_auxr_3d_data()); set_recip_to_real_output_op()(this->nrxx, add, diff --git a/source/module_basis/module_pw/pw_transform_k_dsp.cpp b/source/module_basis/module_pw/pw_transform_k_dsp.cpp index 8c33041c1f..555c5aaab3 100644 --- a/source/module_basis/module_pw/pw_transform_k_dsp.cpp +++ b/source/module_basis/module_pw/pw_transform_k_dsp.cpp @@ -1,31 +1,29 @@ -#include "module_base/timer.h" #include "module_basis/module_pw/kernels/pw_op.h" #include "pw_basis_k.h" #include "pw_gatherscatter.h" +#include "source_base/timer.h" #include #include -#if defined (__DSP) +#if defined(__DSP) namespace ModulePW { - template <> +template <> void PW_Basis_K::real2recip_dsp(const std::complex* in, std::complex* out, const int ik, const bool add, const float factor) const - { - - } - template <> +{ +} +template <> void PW_Basis_K::recip2real_dsp(const std::complex* in, std::complex* out, const int ik, const bool add, const float factor) const - { - - } +{ +} template <> void PW_Basis_K::real2recip_dsp(const std::complex* in, std::complex* out, @@ -45,8 +43,7 @@ void PW_Basis_K::real2recip_dsp(const std::complex* in, // 3d fft this->fft_bundle.resource_handler(1); - this->fft_bundle.fft3D_forward(auxr, - auxr); + this->fft_bundle.fft3D_forward(auxr, auxr); this->fft_bundle.resource_handler(0); // copy the result from the auxr to the out ,while consider the add set_real_to_recip_output_op()(npw_k, @@ -147,15 +144,15 @@ void PW_Basis_K::convolution(const base_device::DEVICE_CPU* ctx, } template void PW_Basis_K::real2recip_dsp(const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const float factor) const; // in:(nplane,nx*ny) ; out(nz, ns) + std::complex* out, + const int ik, + const bool add, + const float factor) const; // in:(nplane,nx*ny) ; out(nz, ns) template void PW_Basis_K::recip2real_dsp(const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const float factor) const; // in:(nz, ns) ; out(nplane,nx*ny) + std::complex* out, + const int ik, + const bool add, + const float factor) const; // in:(nz, ns) ; out(nplane,nx*ny) template void PW_Basis_K::real2recip_dsp(const std::complex* in, std::complex* out, diff --git a/source/module_basis/module_pw/test/CMakeLists.txt b/source/module_basis/module_pw/test/CMakeLists.txt index 8b1038af93..8fddff4322 100644 --- a/source/module_basis/module_pw/test/CMakeLists.txt +++ b/source/module_basis/module_pw/test/CMakeLists.txt @@ -2,11 +2,11 @@ add_definitions(-D__NORMAL) AddTest( TARGET pw_test LIBS parameter ${math_libs} planewave device - SOURCES ../../../module_base/matrix.cpp ../../../module_base/complexmatrix.cpp ../../../module_base/matrix3.cpp ../../../module_base/tool_quit.cpp - ../../../module_base/mymath.cpp ../../../module_base/timer.cpp ../../../module_base/memory.cpp - ../../../module_base/blas_connector_base.cpp ../../../module_base/blas_connector_vector.cpp ../../../module_base/blas_connector_matrix.cpp - ../../../module_base/libm/branred.cpp ../../../module_base/libm/sincos.cpp - ../../../module_base/module_device/memory_op.cpp + SOURCES ../../../source_base/matrix.cpp ../../../source_base/complexmatrix.cpp ../../../source_base/matrix3.cpp ../../../source_base/tool_quit.cpp + ../../../source_base/mymath.cpp ../../../source_base/timer.cpp ../../../source_base/memory.cpp + ../../../source_base/blas_connector_base.cpp ../../../source_base/blas_connector_vector.cpp ../../../source_base/blas_connector_matrix.cpp + ../../../source_base/libm/branred.cpp ../../../source_base/libm/sincos.cpp + ../../../source_base/module_device/memory_op.cpp depend_mock.cpp pw_test.cpp test1-1-1.cpp test1-1-2.cpp test1-2.cpp test1-3.cpp test1-4.cpp test1-5.cpp test2-1-1.cpp test2-1-2.cpp test2-2.cpp test2-3.cpp test3-1.cpp test3-2.cpp test3-3.cpp test3-3-2.cpp diff --git a/source/module_basis/module_pw/test/Makefile b/source/module_basis/module_pw/test/Makefile index 0e60ff17bf..7d62b4a997 100644 --- a/source/module_basis/module_pw/test/Makefile +++ b/source/module_basis/module_pw/test/Makefile @@ -25,7 +25,7 @@ GTEST_DIR = /home/qianrui/gnucompile/g_gtest # Compiler information #========================== HONG = -D__NORMAL -INCLUDES = -I. -I../../../ -I../../../source_main -I../../../module_base/module_container +INCLUDES = -I. -I../../../ -I../../../source_main -I../../../source_base/module_container LIBS = OPTS = -Ofast -march=native -std=c++11 -m64 ${INCLUDES} OBJ_DIR = obj @@ -102,10 +102,10 @@ GTESTOPTS = -I${GTEST_DIR}/include -L${GTEST_DIR}/lib -lgtest -lpthread -w # Objects #========================== VPATH=../../../source_main\ -../../../module_base\ -../../../module_base/module_device\ -../../../module_base/module_container/ATen/core\ -../../../module_base/module_container/ATen\ +../../../source_base\ +../../../source_base/module_device\ +../../../source_base/module_container/ATen/core\ +../../../source_base/module_container/ATen\ ../../../module_parameter\ ../module_fft\ ../\ diff --git a/source/module_basis/module_pw/test/generate.cpp b/source/module_basis/module_pw/test/generate.cpp index 06876e4e8d..293c3f7f26 100644 --- a/source/module_basis/module_pw/test/generate.cpp +++ b/source/module_basis/module_pw/test/generate.cpp @@ -1,24 +1,25 @@ #include "../pw_basis.h" -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" using namespace std; void create_pools(const int totnproc, const int myrank, const int nproc) -{ +{ int mypool = 1; - if(myrank < nproc) mypool = 0; - MPI_Comm_split(MPI_COMM_WORLD,mypool,1,&POOL_WORLD); + if (myrank < nproc) + mypool = 0; + MPI_Comm_split(MPI_COMM_WORLD, mypool, 1, &POOL_WORLD); return; } -int main(int argc, char **argv) +int main(int argc, char** argv) { int totnproc, myrank; - setupmpi(argc,argv,totnproc, myrank); + setupmpi(argc, argv, totnproc, myrank); const int nn = totnproc; int npw_per_ref[nn][nn]; int nst_per_ref[nn][nn]; @@ -29,112 +30,115 @@ int main(int argc, char **argv) int ny_ref; int fftny_ref; int nz_ref; - if(myrank == 0) cout<<"Generating ref..."< *kvec_d; + ModuleBase::Vector3* kvec_d; //-------------------------------------------------- lat0 = 3; ModuleBase::Matrix3 la(1, 1, 0, 0, 1, 0, 0, 0, 1); @@ -31,36 +31,36 @@ TEST_F(PWTEST,test_big) wfcecut = 20; nks = 2; kvec_d = new ModuleBase::Vector3[nks]; - kvec_d[0].set(0,0,0.5); - kvec_d[1].set(0.5,0.5,0.5); + kvec_d[0].set(0, 0, 0.5); + kvec_d[1].set(0.5, 0.5, 0.5); gamma_only = false; int distribution_type = 1; bool xprime = true; //-------------------------------------------------- - //init //Real parameters + // init //Real parameters #ifdef __MPI pwtest.initmpi(nproc_in_pool, rank_in_pool, POOL_WORLD); pwktest.initmpi(nproc_in_pool, rank_in_pool, POOL_WORLD); #endif - pwtest.setbxyz(2,2,2); - pwktest.setbxyz(2,2,2); - pwtest.initgrids(lat0,latvec, 11, 11, 11); - EXPECT_EQ(pwtest.nx%2, 0); - EXPECT_EQ(pwtest.ny%2, 0); - EXPECT_EQ(pwtest.nz%2, 0); - pwtest.initgrids(lat0,latvec, 2*wfcecut); - pwtest.initgrids(lat0,latvec, 3*wfcecut); - pwktest.initgrids(lat0,latvec, pwtest.nx, pwtest.ny, pwtest.nz); - pwtest.initparameters(gamma_only,wfcecut,distribution_type,xprime); - pwktest.initparameters(gamma_only,wfcecut,nks,kvec_d,distribution_type, xprime); + pwtest.setbxyz(2, 2, 2); + pwktest.setbxyz(2, 2, 2); + pwtest.initgrids(lat0, latvec, 11, 11, 11); + EXPECT_EQ(pwtest.nx % 2, 0); + EXPECT_EQ(pwtest.ny % 2, 0); + EXPECT_EQ(pwtest.nz % 2, 0); + pwtest.initgrids(lat0, latvec, 2 * wfcecut); + pwtest.initgrids(lat0, latvec, 3 * wfcecut); + pwktest.initgrids(lat0, latvec, pwtest.nx, pwtest.ny, pwtest.nz); + pwtest.initparameters(gamma_only, wfcecut, distribution_type, xprime); + pwktest.initparameters(gamma_only, wfcecut, nks, kvec_d, distribution_type, xprime); static_cast(pwtest).setuptransform(); pwktest.setuptransform(); - EXPECT_EQ(pwtest.nx%2, 0); - EXPECT_EQ(pwtest.ny%2, 0); - EXPECT_EQ(pwtest.nz%2, 0); - EXPECT_EQ(pwktest.nx%2, 0); - EXPECT_EQ(pwktest.ny%2, 0); - EXPECT_EQ(pwktest.nz%2, 0); + EXPECT_EQ(pwtest.nx % 2, 0); + EXPECT_EQ(pwtest.ny % 2, 0); + EXPECT_EQ(pwtest.nz % 2, 0); + EXPECT_EQ(pwktest.nx % 2, 0); + EXPECT_EQ(pwktest.ny % 2, 0); + EXPECT_EQ(pwktest.nz % 2, 0); int bsize = 0; pwtest.autoset_big_cell_size(bsize, 12); @@ -70,10 +70,9 @@ TEST_F(PWTEST,test_big) pwtest.autoset_big_cell_size(bsize, 14, 4); EXPECT_EQ(bsize, 2); - delete[] kvec_d; - ModulePW::PW_Basis_Big *p_pw = new ModulePW::PW_Basis_Big(device_flag, precision_flag); - ModulePW::PW_Basis_K_Big *p_pwk = new ModulePW::PW_Basis_K_Big(device_flag, precision_flag); + ModulePW::PW_Basis_Big* p_pw = new ModulePW::PW_Basis_Big(device_flag, precision_flag); + ModulePW::PW_Basis_K_Big* p_pwk = new ModulePW::PW_Basis_K_Big(device_flag, precision_flag); delete p_pw; delete p_pwk; fftw_cleanup(); @@ -84,12 +83,13 @@ TEST_F(PWTEST,test_big) class TestPW_Basis_Big : public ::testing::Test { - public: + public: ModulePW::PW_Basis_Big pwtest = ModulePW::PW_Basis_Big(); }; // Test the function with nproc = 0 (bx and by) -TEST_F(TestPW_Basis_Big, BxByTest) { +TEST_F(TestPW_Basis_Big, BxByTest) +{ int b_size = 0; int nc_size = 12; pwtest.autoset_big_cell_size(b_size, nc_size); @@ -97,7 +97,8 @@ TEST_F(TestPW_Basis_Big, BxByTest) { } // Test the function with nproc > 0 (bz) -TEST_F(TestPW_Basis_Big, BzTest) { +TEST_F(TestPW_Basis_Big, BzTest) +{ int b_size = 0; int nc_size = 12; int nproc = 2; @@ -106,7 +107,8 @@ TEST_F(TestPW_Basis_Big, BzTest) { } // Test the function with nproc > 0 (bz) and nc_size not factored by any candidate -TEST_F(TestPW_Basis_Big, BzNoFactorTest) { +TEST_F(TestPW_Basis_Big, BzNoFactorTest) +{ int b_size = 0; int nc_size = 11; int nproc = 2; @@ -115,7 +117,8 @@ TEST_F(TestPW_Basis_Big, BzNoFactorTest) { } // Test the function with nproc > 0 (bz) and nc_size not factored by any candidate -TEST_F(TestPW_Basis_Big, BzNoFactorNoResultTest) { +TEST_F(TestPW_Basis_Big, BzNoFactorNoResultTest) +{ int b_size = 0; int nc_size = 11; int nproc = 3; @@ -124,7 +127,8 @@ TEST_F(TestPW_Basis_Big, BzNoFactorNoResultTest) { } // Test the function with nproc > 0 (bz) and nc_size smaller than candidates -TEST_F(TestPW_Basis_Big, BzSmallTest) { +TEST_F(TestPW_Basis_Big, BzSmallTest) +{ int b_size = 0; int nc_size = 2; int nproc = 2; @@ -133,7 +137,8 @@ TEST_F(TestPW_Basis_Big, BzSmallTest) { } // Test the function with nproc > 0 (bz) and nc_size smaller than candidates -TEST_F(TestPW_Basis_Big, BzSmallNoResultTest) { +TEST_F(TestPW_Basis_Big, BzSmallNoResultTest) +{ int b_size = 0; int nc_size = 2; int nproc = 3; @@ -142,7 +147,8 @@ TEST_F(TestPW_Basis_Big, BzSmallNoResultTest) { } // Test the function with nproc > 0 (bz) and nc_size not divisible by nproc -TEST_F(TestPW_Basis_Big, BzNprocTest) { +TEST_F(TestPW_Basis_Big, BzNprocTest) +{ int b_size = 0; int nc_size = 12; int nproc = 3; @@ -151,7 +157,8 @@ TEST_F(TestPW_Basis_Big, BzNprocTest) { } // Test the function with nproc > 0 (bz) and nc_size not divisible by nproc -TEST_F(TestPW_Basis_Big, BzNprocNoResultTest) { +TEST_F(TestPW_Basis_Big, BzNprocNoResultTest) +{ int b_size = 0; int nc_size = 12; int nproc = 5; diff --git a/source/module_basis/module_pw/test/test-other.cpp b/source/module_basis/module_pw/test/test-other.cpp index 308f4c6c68..440a284988 100644 --- a/source/module_basis/module_pw/test/test-other.cpp +++ b/source/module_basis/module_pw/test/test-other.cpp @@ -3,20 +3,21 @@ //--------------------------------------------- #include "../pw_basis_k.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" -#include "module_base/module_device/types.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" +#include "source_base/module_device/types.h" + #include "gmock/gmock.h" using namespace std; -TEST_F(PWTEST,test_other) +TEST_F(PWTEST, test_other) { - cout<<"Test other codes"< *kvec_d = new ModuleBase::Vector3[nks]; - kvec_d[0].set(0,0,0.5); - kvec_d[1].set(0.5,0.5,0.5); + ModuleBase::Vector3* kvec_d = new ModuleBase::Vector3[nks]; + kvec_d[0].set(0, 0, 0.5); + kvec_d[1].set(0.5, 0.5, 0.5); pwktest.set_precision("double"); - pwktest.initgrids(2, latvec, 4,4,4); + pwktest.initgrids(2, latvec, 4, 4, 4); pwktest.initparameters(true, 20, nks, kvec_d); pwktest.setuptransform(); pwktest.collect_local_pw(); @@ -47,79 +48,80 @@ TEST_F(PWTEST,test_other) pwktest.setuptransform(); pwktest.collect_local_pw(); const int nrxx = pwktest.nrxx; - complex * rhor1 = new complex [nrxx]; - complex * rhor2 = new complex [nrxx]; + complex* rhor1 = new complex[nrxx]; + complex* rhor2 = new complex[nrxx]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofr1 = new complex [nrxx]; - complex * rhofr2 = new complex [nrxx]; + complex* rhofr1 = new complex[nrxx]; + complex* rhofr2 = new complex[nrxx]; #endif const base_device::DEVICE_CPU* ctx; - for(int ik = 0; ik < nks; ++ik) + for (int ik = 0; ik < nks; ++ik) { const int npwk = pwktest.npwk[ik]; - complex * rhog1 = new complex [npwk]; - complex * rhog2 = new complex [npwk]; + complex* rhog1 = new complex[npwk]; + complex* rhog2 = new complex[npwk]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg1 = new complex [npwk]; - complex * rhofg2 = new complex [npwk]; + complex* rhofg1 = new complex[npwk]; + complex* rhofg2 = new complex[npwk]; #endif - for(int ig = 0 ; ig < npwk ; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - rhog1[ig] = 1.0/(pwktest.getgk2(ik,ig)+1) + ModuleBase::IMAG_UNIT / (std::abs(pwktest.getgdirect(ik,ig).x+1) + 1); - rhog2[ig] = 1.0/(pwktest.getgk2(ik,ig)+1) + ModuleBase::IMAG_UNIT / (std::abs(pwktest.getgdirect(ik,ig).x+1) + 1); - } + rhog1[ig] = 1.0 / (pwktest.getgk2(ik, ig) + 1) + + ModuleBase::IMAG_UNIT / (std::abs(pwktest.getgdirect(ik, ig).x + 1) + 1); + rhog2[ig] = 1.0 / (pwktest.getgk2(ik, ig) + 1) + + ModuleBase::IMAG_UNIT / (std::abs(pwktest.getgdirect(ik, ig).x + 1) + 1); + } #ifdef __ENABLE_FLOAT_FFTW - for(int ig = 0 ; ig < npwk ; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - rhofg1[ig] = 1.0/(pwktest.getgk2(ik,ig)+1) + ModuleBase::IMAG_UNIT / (std::abs(pwktest.getgdirect(ik,ig).x+1) + 1); - rhofg2[ig] = 1.0/(pwktest.getgk2(ik,ig)+1) + ModuleBase::IMAG_UNIT / (std::abs(pwktest.getgdirect(ik,ig).x+1) + 1); - } + rhofg1[ig] = 1.0 / (pwktest.getgk2(ik, ig) + 1) + + ModuleBase::IMAG_UNIT / (std::abs(pwktest.getgdirect(ik, ig).x + 1) + 1); + rhofg2[ig] = 1.0 / (pwktest.getgk2(ik, ig) + 1) + + ModuleBase::IMAG_UNIT / (std::abs(pwktest.getgdirect(ik, ig).x + 1) + 1); + } #endif pwktest.recip_to_real(ctx, rhog1, rhor1, ik); pwktest.recip2real(rhog2, rhor2, ik); - for(int ir = 0 ; ir < nrxx; ++ir) + for (int ir = 0; ir < nrxx; ++ir) { - EXPECT_NEAR(std::abs(rhor1[ir]),std::abs(rhor2[ir]),1e-8); + EXPECT_NEAR(std::abs(rhor1[ir]), std::abs(rhor2[ir]), 1e-8); } pwktest.real_to_recip(ctx, rhor1, rhog1, ik); pwktest.real2recip(rhor2, rhog2, ik); - for(int ig = 0 ; ig < npwk; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - EXPECT_NEAR(std::abs(rhog1[ig]),std::abs(rhog2[ig]),1e-8); + EXPECT_NEAR(std::abs(rhog1[ig]), std::abs(rhog2[ig]), 1e-8); } #ifdef __ENABLE_FLOAT_FFTW pwktest.recip_to_real(ctx, rhofg1, rhofr1, ik); pwktest.recip2real(rhofg2, rhofr2, ik); - for(int ir = 0 ; ir < nrxx; ++ir) + for (int ir = 0; ir < nrxx; ++ir) { - EXPECT_NEAR(std::abs(rhofr1[ir]),std::abs(rhofr2[ir]),1e-6); + EXPECT_NEAR(std::abs(rhofr1[ir]), std::abs(rhofr2[ir]), 1e-6); } pwktest.real_to_recip(ctx, rhofr1, rhofg1, ik); pwktest.real2recip(rhofr2, rhofg2, ik); - for(int ig = 0 ; ig < npwk; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - EXPECT_NEAR(std::abs(rhofg1[ig]),std::abs(rhofg2[ig]),1e-6); + EXPECT_NEAR(std::abs(rhofg1[ig]), std::abs(rhofg2[ig]), 1e-6); } #endif - - - delete [] rhog1; - delete [] rhog2; + delete[] rhog1; + delete[] rhog2; #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg1; - delete [] rhofg2; + delete[] rhofg1; + delete[] rhofg2; #endif } - delete [] rhor1; - delete [] rhor2; + delete[] rhor1; + delete[] rhor2; #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofr1; - delete [] rhofr2; + delete[] rhofr1; + delete[] rhofr2; #endif - double* d_kvec_c = pwktest.get_kvec_c_data(); double* d_gcar = pwktest.get_gcar_data(); double* d_gk2 = pwktest.get_gk2_data(); @@ -129,10 +131,9 @@ TEST_F(PWTEST,test_other) float* s_gk2 = pwktest.get_gk2_data(); #endif - delete[] kvec_d; - ModulePW::PW_Basis *p_pw = new ModulePW::PW_Basis(device_flag, precision_flag); - ModulePW::PW_Basis_K *p_pwk = new ModulePW::PW_Basis_K(device_flag, precision_flag); + ModulePW::PW_Basis* p_pw = new ModulePW::PW_Basis(device_flag, precision_flag); + ModulePW::PW_Basis_K* p_pwk = new ModulePW::PW_Basis_K(device_flag, precision_flag); delete p_pw; delete p_pwk; fftw_cleanup(); diff --git a/source/module_basis/module_pw/test/test1-1-1.cpp b/source/module_basis/module_pw/test/test1-1-1.cpp index a7ea166c66..cccab31e2d 100644 --- a/source/module_basis/module_pw/test/test1-1-1.cpp +++ b/source/module_basis/module_pw/test/test1-1-1.cpp @@ -1,20 +1,20 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test1_1_1) +TEST_F(PWTEST, test1_1_1) { - cout<<"dividemthd 1, gamma_only: off, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(iy >= int(pwtest.ny/2) +1) f.y -= pwtest.ny; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (iy >= int(pwtest.ny / 2) + 1) + f.y -= pwtest.ny; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -187,25 +185,29 @@ TEST_F(PWTEST,test1_1_1) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + for (int igg = 1; igg < pwtest.ngg; ++igg) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + if (pwtest.ig_gge0 >= 0) + { + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); + } + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; - //Add tests for gg_uniq - ModuleBase::Matrix3 latvec2(5.1358423233,0.0,0.0,0.1578526541,5.1334159104,0.0,-2.646847675,-2.5667081359,3.5753437737); + // Add tests for gg_uniq + ModuleBase::Matrix3 + latvec2(5.1358423233, 0.0, 0.0, 0.1578526541, 5.1334159104, 0.0, -2.646847675, -2.5667081359, 3.5753437737); gamma_only = false; wfcecut = 240; lat0 = 1.88972613; @@ -216,17 +218,15 @@ TEST_F(PWTEST,test1_1_1) pwtest.setuptransform(); pwtest.collect_local_pw(); pwtest.collect_uniqgg(); - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); } - int * irindex = new int [pwtest.fftnxy]; + int* irindex = new int[pwtest.fftnxy]; pwtest.getfftixy2is(irindex); - for(int is = 0 ; is < pwtest.nst ;++is) + for (int is = 0; is < pwtest.nst; ++is) { - EXPECT_EQ(irindex[pwtest.is2fftixy[is]],is); + EXPECT_EQ(irindex[pwtest.is2fftixy[is]], is); } delete[] irindex; - - } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test1-1-2.cpp b/source/module_basis/module_pw/test/test1-1-2.cpp index 4f9aa5ec6f..ae7dab49a2 100644 --- a/source/module_basis/module_pw/test/test1-1-2.cpp +++ b/source/module_basis/module_pw/test/test1-1-2.cpp @@ -1,20 +1,20 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test1_1_2) +TEST_F(PWTEST, test1_1_2) { - cout<<"dividemthd 1, gamma_only: on, xprime: false, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -186,20 +182,23 @@ TEST_F(PWTEST,test1_1_2) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); + } + for (int igg = 1; igg < pwtest.ngg; ++igg) + { + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + if (pwtest.ig_gge0 >= 0) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test1-2-2.cpp b/source/module_basis/module_pw/test/test1-2-2.cpp index db5b9765fb..bb7a2c6f71 100644 --- a/source/module_basis/module_pw/test/test1-2-2.cpp +++ b/source/module_basis/module_pw/test/test1-2-2.cpp @@ -3,21 +3,21 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test1_2_2) +TEST_F(PWTEST, test1_2_2) { - cout<<"dividemthd 1, gamma_only: off, check fft between double and complex"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix - int(nx/2); - double vy = iy - int(ny/2); - double vz = iz - int(nz/2); - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix - int(nx / 2); + double vy = iy - int(ny / 2); + double vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulus+1); - if(vy > 0) tmp[ix*ny*nz + iy*nz + iz]+=ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); - else if(vy < 0) tmp[ix*ny*nz + iy*nz + iz]-=ModuleBase::IMAG_UNIT / (std::abs(-v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] = 1.0 / (modulus + 1); + if (vy > 0) + tmp[ix * ny * nz + iy * nz + iz] += ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); + else if (vy < 0) + tmp[ix * ny * nz + iy * nz + iz] -= ModuleBase::IMAG_UNIT / (std::abs(-v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1); - if(pwtest.gdirect[ig].y > 0) + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1); + if (pwtest.gdirect[ig].y > 0) { - rhog[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); + rhog[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); } - else if(pwtest.gdirect[ig].y < 0) + else if (pwtest.gdirect[ig].y < 0) { - rhog[ig]-=ModuleBase::IMAG_UNIT / (std::abs(-pwtest.gdirect[ig].x+1) + 1); - rhogr[ig]-=ModuleBase::IMAG_UNIT / (std::abs(-pwtest.gdirect[ig].x+1) + 1); + rhog[ig] -= ModuleBase::IMAG_UNIT / (std::abs(-pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] -= ModuleBase::IMAG_UNIT / (std::abs(-pwtest.gdirect[ig].x + 1) + 1); } - } - double * rhor = new double [nrxx]; + } + double* rhor = new double[nrxx]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npw]; - complex * rhofgr = new complex [nmaxgr]; - complex * rhofgout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + complex* rhofg = new complex[npw]; + complex* rhofgr = new complex[nmaxgr]; + complex* rhofgout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhofg[ig] = 1.0/(pwtest.gg[ig]+1); - rhofgr[ig] = 1.0/(pwtest.gg[ig]+1); - if(pwtest.gdirect[ig].y > 0) + rhofg[ig] = 1.0 / (pwtest.gg[ig] + 1); + rhofgr[ig] = 1.0 / (pwtest.gg[ig] + 1); + if (pwtest.gdirect[ig].y > 0) { - rhofg[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhofgr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); + rhofg[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhofgr[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); } - else if(pwtest.gdirect[ig].y < 0) + else if (pwtest.gdirect[ig].y < 0) { - rhofg[ig]-=ModuleBase::IMAG_UNIT / (std::abs(-pwtest.gdirect[ig].x+1) + 1); - rhofgr[ig]-=ModuleBase::IMAG_UNIT / (std::abs(-pwtest.gdirect[ig].x+1) + 1); + rhofg[ig] -= ModuleBase::IMAG_UNIT / (std::abs(-pwtest.gdirect[ig].x + 1) + 1); + rhofgr[ig] -= ModuleBase::IMAG_UNIT / (std::abs(-pwtest.gdirect[ig].x + 1) + 1); } - } - float * rhofr = new float [nrxx]; + } + float* rhofr = new float[nrxx]; #endif - - pwtest.recip2real(rhog,rhor);//check out-of-place transform - pwtest.recip2real(rhogr,(double*)rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor); // check out-of-place transform + + pwtest.recip2real(rhogr, (double*)rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.recip2real(rhofg,rhofr);//check out-of-place transform + pwtest.recip2real(rhofg, rhofr); // check out-of-place transform - pwtest.recip2real(rhofgr,(float*)rhofgr);//check in-place transform + pwtest.recip2real(rhofgr, (float*)rhofgr); // check in-place transform #endif int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz],1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((double*)rhogr)[ixy*nplane+iz],1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz], 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((double*)rhogr)[ixy * nplane + iz], 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz],1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((float*)rhofgr)[ixy*nplane+iz],1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz], 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((float*)rhofgr)[ixy * nplane + iz], 1e-4); #endif } } - - - pwtest.real2recip(rhor,rhogout);//check out-of-place transform + pwtest.real2recip(rhor, rhogout); // check out-of-place transform - pwtest.real2recip((double*)rhogr,rhogr);//check in-place transform + pwtest.real2recip((double*)rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.real2recip(rhofr,rhofgout);//check out-of-place transform + pwtest.real2recip(rhofr, rhofgout); // check out-of-place transform - pwtest.real2recip((float*)rhofgr,rhofgr);//check in-place transform + pwtest.real2recip((float*)rhofgr, rhofgr); // check in-place transform #endif - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-4); - EXPECT_NEAR(rhofgr[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofgr[ig].imag(),rhofgout[ig].imag(),1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-4); + EXPECT_NEAR(rhofgr[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofgr[ig].imag(), rhofgout[ig].imag(), 1e-4); #endif } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; - delete [] rhofr; - delete [] rhofgr; + delete[] rhofg; + delete[] rhofgout; + delete[] rhofr; + delete[] rhofgr; fftwf_cleanup(); #endif } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test1-2.cpp b/source/module_basis/module_pw/test/test1-2.cpp index 6f76590a81..28c830d53b 100644 --- a/source/module_basis/module_pw/test/test1-2.cpp +++ b/source/module_basis/module_pw/test/test1-2.cpp @@ -3,21 +3,21 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test1_2) +TEST_F(PWTEST, test1_2) { - cout<<"dividemthd 1, gamma_only: off, xprime: false, check fft between complex and complex"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix - int(nx/2); - double vy = iy - int(ny/2); - double vz = iz - int(nz/2); - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix - int(nx / 2); + double vy = iy - int(ny / 2); + double vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulus+1) + ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] + = 1.0 / (modulus + 1) + ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhor = new complex [nrxx]; + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhor = new complex[nrxx]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npw]; - complex * rhofgr = new complex [nmaxgr]; - complex * rhofgout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + complex* rhofg = new complex[npw]; + complex* rhofgr = new complex[nmaxgr]; + complex* rhofgout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhofg[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhofgr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhofr = new complex [nrxx]; + rhofg[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhofgr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhofr = new complex[nrxx]; #endif - - pwtest.recip2real(rhog,rhor);//check out-of-place transform - pwtest.recip2real(rhogr,rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor); // check out-of-place transform + + pwtest.recip2real(rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.recip2real(rhofg,rhofr);//check out-of-place transform + pwtest.recip2real(rhofg, rhofr); // check out-of-place transform - pwtest.recip2real(rhofgr,rhofgr);//check in-place transform + pwtest.recip2real(rhofgr, rhofgr); // check in-place transform #endif int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhor[ixy*nplane+iz].imag(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhogr[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhogr[ixy*nplane+iz].imag(),1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhor[ixy * nplane + iz].imag(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhogr[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhogr[ixy * nplane + iz].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofr[ixy*nplane+iz].imag(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofgr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofgr[ixy*nplane+iz].imag(),1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofr[ixy * nplane + iz].imag(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofgr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofgr[ixy * nplane + iz].imag(), 1e-4); #endif } } - - - pwtest.real2recip(rhor,rhogout);//check out-of-place transform + pwtest.real2recip(rhor, rhogout); // check out-of-place transform - pwtest.real2recip(rhogr,rhogr);//check in-place transform + pwtest.real2recip(rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.real2recip(rhofr,rhofgout);//check out-of-place transform + pwtest.real2recip(rhofr, rhofgout); // check out-of-place transform - pwtest.real2recip(rhofgr,rhofgr);//check in-place transform + pwtest.real2recip(rhofgr, rhofgr); // check in-place transform #endif - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-4); - EXPECT_NEAR(rhofgr[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofgr[ig].imag(),rhofgout[ig].imag(),1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-4); + EXPECT_NEAR(rhofgr[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofgr[ig].imag(), rhofgout[ig].imag(), 1e-4); #endif } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; - delete [] rhofr; - delete [] rhofgr; + delete[] rhofg; + delete[] rhofgout; + delete[] rhofr; + delete[] rhofgr; fftwf_cleanup(); #endif } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test1-3.cpp b/source/module_basis/module_pw/test/test1-3.cpp index bb2103212e..088e970f83 100644 --- a/source/module_basis/module_pw/test/test1-3.cpp +++ b/source/module_basis/module_pw/test/test1-3.cpp @@ -3,21 +3,21 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test1_3) +TEST_F(PWTEST, test1_3) { - cout<<"dividemthd 1, gamma_only: on, xprime: false, check fft"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix - int(nx/2); - double vy = iy - int(ny/2); - double vz = iz - int(nz/2); - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix - int(nx / 2); + double vy = iy - int(ny / 2); + double vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut) { - tmp[ix*ny*nz + iy*nz + iz] = 1.0/(modulus+1); - if(vy > 0) tmp[ix*ny*nz + iy*nz + iz]+=ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); - else if(vy < 0) tmp[ix*ny*nz + iy*nz + iz]-=ModuleBase::IMAG_UNIT / (std::abs(-v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] = 1.0 / (modulus + 1); + if (vy > 0) + tmp[ix * ny * nz + iy * nz + iz] += ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); + else if (vy < 0) + tmp[ix * ny * nz + iy * nz + iz] -= ModuleBase::IMAG_UNIT / (std::abs(-v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1); - if(pwtest.gdirect[ig].y > 0) + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1); + if (pwtest.gdirect[ig].y > 0) { - rhog[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); + rhog[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); } - } - double * rhor = new double [nrxx]; + } + double* rhor = new double[nrxx]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npw]; - complex * rhofgr = new complex [nmaxgr]; - complex * rhofgout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + complex* rhofg = new complex[npw]; + complex* rhofgr = new complex[nmaxgr]; + complex* rhofgout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhofg[ig] = 1.0/(pwtest.gg[ig]+1); - rhofgr[ig] = 1.0/(pwtest.gg[ig]+1); - if(pwtest.gdirect[ig].y > 0) + rhofg[ig] = 1.0 / (pwtest.gg[ig] + 1); + rhofgr[ig] = 1.0 / (pwtest.gg[ig] + 1); + if (pwtest.gdirect[ig].y > 0) { - rhofg[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhofgr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); + rhofg[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhofgr[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); } - } - float * rhofr = new float [nrxx]; + } + float* rhofr = new float[nrxx]; #endif - - pwtest.recip2real(rhog,rhor);//check out-of-place transform - pwtest.recip2real(rhogr,(double*)rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor); // check out-of-place transform + + pwtest.recip2real(rhogr, (double*)rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.recip2real(rhofg,rhofr);//check out-of-place transform + pwtest.recip2real(rhofg, rhofr); // check out-of-place transform - pwtest.recip2real(rhofgr,(float*)rhofgr);//check in-place transform + pwtest.recip2real(rhofgr, (float*)rhofgr); // check in-place transform #endif int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz],1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((double*)rhogr)[ixy*nplane+iz],1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz], 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((double*)rhogr)[ixy * nplane + iz], 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz],1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((float*)rhofgr)[ixy*nplane+iz],1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz], 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((float*)rhofgr)[ixy * nplane + iz], 1e-4); #endif } } - - - pwtest.real2recip(rhor,rhogout);//check out-of-place transform - pwtest.real2recip((double*)rhogr,rhogr);//check in-place transform + pwtest.real2recip(rhor, rhogout); // check out-of-place transform + + pwtest.real2recip((double*)rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.real2recip(rhofr,rhofgout);//check out-of-place transform + pwtest.real2recip(rhofr, rhofgout); // check out-of-place transform - pwtest.real2recip((float*)rhofgr,rhofgr);//check in-place transform + pwtest.real2recip((float*)rhofgr, rhofgr); // check in-place transform #endif - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-4); - EXPECT_NEAR(rhofgr[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofgr[ig].imag(),rhofgout[ig].imag(),1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-4); + EXPECT_NEAR(rhofgr[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofgr[ig].imag(), rhofgout[ig].imag(), 1e-4); #endif } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; - delete [] rhofr; - delete [] rhofgr; + delete[] rhofg; + delete[] rhofgout; + delete[] rhofr; + delete[] rhofgr; fftwf_cleanup(); #endif } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test1-4.cpp b/source/module_basis/module_pw/test/test1-4.cpp index 4ea6ec5c9e..f52d80f89b 100644 --- a/source/module_basis/module_pw/test/test1-4.cpp +++ b/source/module_basis/module_pw/test/test1-4.cpp @@ -3,33 +3,33 @@ //--------------------------------------------- #include "../pw_basis_k.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test1_4) +TEST_F(PWTEST, test1_4) { - cout<<"dividemthd 1, gamma_only: off, xprime: false, 2 kpoints, check fft"< *kvec_d; + ModuleBase::Vector3* kvec_d; int nks; //-------------------------------------------------- lat0 = 2; ModuleBase::Matrix3 la(1, 1, 0, 0, 2, 0, 0, 0, 2); nks = 2; kvec_d = new ModuleBase::Vector3[nks]; - kvec_d[0].set(0,0,0.5); - kvec_d[1].set(0.5,0.5,0.5); + kvec_d[0].set(0, 0, 0.5); + kvec_d[1].set(0.5, 0.5, 0.5); latvec = la; wfcecut = 10; gamma_only = false; @@ -39,17 +39,16 @@ TEST_F(PWTEST,test1_4) #ifdef __MPI pwtest.initmpi(nproc_in_pool, rank_in_pool, POOL_WORLD); #endif - //Useless, only to test reinit function. - pwtest.initgrids(2, latvec, 4,4,4); - pwtest.initparameters(true, 200, nks, kvec_d, 2,xprime); + // Useless, only to test reinit function. + pwtest.initgrids(2, latvec, 4, 4, 4); + pwtest.initparameters(true, 200, nks, kvec_d, 2, xprime); pwtest.setuptransform(); pwtest.collect_local_pw(); - EXPECT_EQ(pwtest.nstot,5); - + EXPECT_EQ(pwtest.nstot, 5); - //init //real parameter - pwtest.initgrids(lat0,latvec,4*wfcecut); - pwtest.initparameters(gamma_only,wfcecut,nks,kvec_d,distribution_type, xprime); + // init //real parameter + pwtest.initgrids(lat0, latvec, 4 * wfcecut); + pwtest.initparameters(gamma_only, wfcecut, nks, kvec_d, distribution_type, xprime); pwtest.setuptransform(); pwtest.collect_local_pw(); @@ -62,156 +61,164 @@ TEST_F(PWTEST,test1_4) double tpiba2 = ModuleBase::TWO_PI * ModuleBase::TWO_PI / lat0 / lat0; double ggecut = wfcecut / tpiba2; - ModuleBase::Matrix3 GT,G,GGT; + ModuleBase::Matrix3 GT, G, GGT; GT = latvec.Inverse(); - G = GT.Transpose(); - GGT = G * GT; - complex *tmp = new complex [nx*ny*nz]; - complex * rhor = new complex [nrxx]; - complex * rhogr = new complex [nmaxgr]; + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + complex* rhor = new complex[nrxx]; + complex* rhogr = new complex[nmaxgr]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofr = new complex [nrxx]; - complex * rhofgr = new complex [nmaxgr]; + complex* rhofr = new complex[nrxx]; + complex* rhofgr = new complex[nmaxgr]; #endif - for(int ik = 0; ik < nks; ++ik) + for (int ik = 0; ik < nks; ++ik) { int npwk = pwtest.npwk[ik]; - if(rank_in_pool == 0) + if (rank_in_pool == 0) { ModuleBase::Vector3 kk = kvec_d[ik]; - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix - int(nx/2); - double vy = iy - int(ny/2); - double vz = iz - int(nz/2); - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix - int(nx / 2); + double vy = iy - int(ny / 2); + double vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); // double modulus = v * (GGT * v); - double modulusgk = (v+kk) * (GGT * (v+kk)); + double modulusgk = (v + kk) * (GGT * (v + kk)); if (modulusgk <= ggecut) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulusgk+1) + ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] + = 1.0 / (modulusgk + 1) + ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - complex * rhog = new complex [npwk]; - complex * rhogout = new complex [npwk]; + complex* rhog = new complex[npwk]; + complex* rhogout = new complex[npwk]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npwk]; - complex * rhofgout = new complex [npwk]; + complex* rhofg = new complex[npwk]; + complex* rhofgout = new complex[npwk]; #endif - for(int ig = 0 ; ig < npwk ; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - rhog[ig] = 1.0/(pwtest.getgk2(ik,ig)+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik,ig).x+1) + 1); - rhogr[ig] = 1.0/(pwtest.getgk2(ik,ig)+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik,ig).x+1) + 1); - } + rhog[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1) + + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik, ig).x + 1) + 1); + rhogr[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1) + + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik, ig).x + 1) + 1); + } #ifdef __ENABLE_FLOAT_FFTW - for(int ig = 0 ; ig < npwk ; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - rhofg[ig] = 1.0/(pwtest.getgk2(ik,ig)+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik,ig).x+1) + 1); - rhofgr[ig] = 1.0/(pwtest.getgk2(ik,ig)+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik,ig).x+1) + 1); - } + rhofg[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1) + + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik, ig).x + 1) + 1); + rhofgr[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1) + + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik, ig).x + 1) + 1); + } #endif - pwtest.recip2real(rhog,rhor,ik); //check out-of-place transform + pwtest.recip2real(rhog, rhor, ik); // check out-of-place transform - pwtest.recip2real(rhogr,rhogr,ik); //check in-place transform + pwtest.recip2real(rhogr, rhogr, ik); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.recip2real(rhofg,rhofr,ik); //check out-of-place transform + pwtest.recip2real(rhofg, rhofr, ik); // check out-of-place transform - pwtest.recip2real(rhofgr,rhofgr,ik); //check in-place transform + pwtest.recip2real(rhofgr, rhofgr, ik); // check in-place transform #endif int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhor[ixy*nplane+iz].imag(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhogr[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhogr[ixy*nplane+iz].imag(),1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhor[ixy * nplane + iz].imag(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhogr[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhogr[ixy * nplane + iz].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofr[ixy*nplane+iz].imag(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofgr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofgr[ixy*nplane+iz].imag(),1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofr[ixy * nplane + iz].imag(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofgr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofgr[ixy * nplane + iz].imag(), 1e-4); #endif } } - pwtest.real2recip(rhor,rhogout,ik); + pwtest.real2recip(rhor, rhogout, ik); - pwtest.real2recip(rhogr,rhogr,ik); + pwtest.real2recip(rhogr, rhogr, ik); #ifdef __ENABLE_FLOAT_FFTW - pwtest.real2recip(rhofr,rhofgout,ik); + pwtest.real2recip(rhofr, rhofgout, ik); - pwtest.real2recip(rhofgr,rhofgr,ik); + pwtest.real2recip(rhofgr, rhofgr, ik); #endif - for(int ig = 0 ; ig < npwk ; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhog[ig].real(),rhogr[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogr[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogr[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogr[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-4); - EXPECT_NEAR(rhofg[ig].real(),rhofgr[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgr[ig].imag(),1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgr[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgr[ig].imag(), 1e-4); #endif } - - delete [] rhog; - delete [] rhogout; + delete[] rhog; + delete[] rhogout; #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; + delete[] rhofg; + delete[] rhofgout; #endif - //check igl2ig - for(int igl = 0; igl < npwk ; ++igl) - { - const int isz = pwtest.getigl2isz(ik,igl); - for(int ig = 0 ; ig < pwtest.npw; ++ig) + // check igl2ig + for (int igl = 0; igl < npwk; ++igl) + { + const int isz = pwtest.getigl2isz(ik, igl); + for (int ig = 0; ig < pwtest.npw; ++ig) { - if(isz == pwtest.ig2isz[ig]){ - EXPECT_EQ(ig,pwtest.getigl2ig(ik,igl));} + if (isz == pwtest.ig2isz[ig]) + { + EXPECT_EQ(ig, pwtest.getigl2ig(ik, igl)); + } } } - } - delete []tmp; - delete [] rhor; + delete[] tmp; + delete[] rhor; delete[] kvec_d; delete[] rhogr; fftw_cleanup(); diff --git a/source/module_basis/module_pw/test/test1-5.cpp b/source/module_basis/module_pw/test/test1-5.cpp index 6729192d8a..f806dfa887 100644 --- a/source/module_basis/module_pw/test/test1-5.cpp +++ b/source/module_basis/module_pw/test/test1-5.cpp @@ -3,32 +3,32 @@ //--------------------------------------------- #include "../pw_basis_k.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test1_5) +TEST_F(PWTEST, test1_5) { - cout<<"dividemthd 1, gamma_only: on, xprime: false, gamma kpoint, check fft"< *kvec_d; + ModuleBase::Vector3* kvec_d; int nks; //-------------------------------------------------- lat0 = 2.7; ModuleBase::Matrix3 la(1, 0.3, 0, 0, 2, 0, 0, 0, 2); nks = 1; kvec_d = new ModuleBase::Vector3[nks]; - kvec_d[0].set(0,0,0); + kvec_d[0].set(0, 0, 0); latvec = la; wfcecut = 10; gamma_only = true; @@ -38,9 +38,9 @@ TEST_F(PWTEST,test1_5) #ifdef __MPI pwtest.initmpi(nproc_in_pool, rank_in_pool, POOL_WORLD); #endif - //init //real parameter - pwtest.initgrids(lat0,latvec,4*wfcecut); - pwtest.initparameters(gamma_only,wfcecut,nks,kvec_d,distribution_type, xprime); + // init //real parameter + pwtest.initgrids(lat0, latvec, 4 * wfcecut); + pwtest.initparameters(gamma_only, wfcecut, nks, kvec_d, distribution_type, xprime); pwtest.setuptransform(); pwtest.collect_local_pw(); @@ -53,166 +53,171 @@ TEST_F(PWTEST,test1_5) double tpiba2 = ModuleBase::TWO_PI * ModuleBase::TWO_PI / lat0 / lat0; double ggecut = wfcecut / tpiba2; - ModuleBase::Matrix3 GT,G,GGT; + ModuleBase::Matrix3 GT, G, GGT; GT = latvec.Inverse(); - G = GT.Transpose(); - GGT = G * GT; - complex *tmp = new complex [nx*ny*nz]; - complex * rhogr = new complex [nmaxgr]; - double * rhor = new double [nrxx]; + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + complex* rhogr = new complex[nmaxgr]; + double* rhor = new double[nrxx]; #ifdef __ENABLE_FLOAT_FFTW - float * rhofr = new float [nrxx]; - complex * rhofgr = new complex [nmaxgr]; + float* rhofr = new float[nrxx]; + complex* rhofgr = new complex[nmaxgr]; #endif - for(int ik = 0; ik < nks; ++ik) + for (int ik = 0; ik < nks; ++ik) { int npwk = pwtest.npwk[ik]; - if(rank_in_pool == 0) + if (rank_in_pool == 0) { ModuleBase::Vector3 kk = kvec_d[ik]; - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix - int(nx/2); - double vy = iy - int(ny/2); - double vz = iz - int(nz/2); - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix - int(nx / 2); + double vy = iy - int(ny / 2); + double vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); // double modulus = v * (GGT * v); - double modulusgk = (v+kk) * (GGT * (v+kk)); + double modulusgk = (v + kk) * (GGT * (v + kk)); if (modulusgk <= ggecut) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulusgk+1); - if(vy > 0) tmp[ix*ny*nz + iy*nz + iz]+=ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); - else if(vy < 0) tmp[ix*ny*nz + iy*nz + iz]-=ModuleBase::IMAG_UNIT / (std::abs(-v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] = 1.0 / (modulusgk + 1); + if (vy > 0) + tmp[ix * ny * nz + iy * nz + iz] += ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); + else if (vy < 0) + tmp[ix * ny * nz + iy * nz + iz] -= ModuleBase::IMAG_UNIT / (std::abs(-v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - complex * rhog = new complex [npwk]; - complex * rhogout = new complex [npwk]; + complex* rhog = new complex[npwk]; + complex* rhogout = new complex[npwk]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npwk]; - complex * rhofgout = new complex [npwk]; + complex* rhofg = new complex[npwk]; + complex* rhofgout = new complex[npwk]; #endif - for(int ig = 0 ; ig < npwk ; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - rhog[ig] = 1.0/(pwtest.getgk2(ik,ig)+1); - rhogr[ig] = 1.0/(pwtest.getgk2(ik,ig)+1); - ModuleBase::Vector3 f = pwtest.getgdirect(ik,ig); - if(f.y > 0) + rhog[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1); + rhogr[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1); + ModuleBase::Vector3 f = pwtest.getgdirect(ik, ig); + if (f.y > 0) { - rhog[ig]+=ModuleBase::IMAG_UNIT / (std::abs(f.x+1) + 1); - rhogr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(f.x+1) + 1); + rhog[ig] += ModuleBase::IMAG_UNIT / (std::abs(f.x + 1) + 1); + rhogr[ig] += ModuleBase::IMAG_UNIT / (std::abs(f.x + 1) + 1); } - } + } #ifdef __ENABLE_FLOAT_FFTW - for(int ig = 0 ; ig < npwk ; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - rhofg[ig] = 1.0/(pwtest.getgk2(ik,ig)+1); - rhofgr[ig] = 1.0/(pwtest.getgk2(ik,ig)+1); - ModuleBase::Vector3 f = pwtest.getgdirect(ik,ig); - if(f.y > 0) + rhofg[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1); + rhofgr[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1); + ModuleBase::Vector3 f = pwtest.getgdirect(ik, ig); + if (f.y > 0) { - rhofg[ig]+=ModuleBase::IMAG_UNIT / (std::abs(f.x+1) + 1); - rhofgr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(f.x+1) + 1); + rhofg[ig] += ModuleBase::IMAG_UNIT / (std::abs(f.x + 1) + 1); + rhofgr[ig] += ModuleBase::IMAG_UNIT / (std::abs(f.x + 1) + 1); } - } + } #endif - pwtest.recip2real(rhog,rhor,ik); //check out-of-place transform + pwtest.recip2real(rhog, rhor, ik); // check out-of-place transform - pwtest.recip2real(rhogr,(double*)rhogr,ik); //check in-place transform + pwtest.recip2real(rhogr, (double*)rhogr, ik); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.recip2real(rhofg,rhofr,ik); //check out-of-place transform + pwtest.recip2real(rhofg, rhofr, ik); // check out-of-place transform - pwtest.recip2real(rhofgr,(float*)rhofgr,ik); //check in-place transform + pwtest.recip2real(rhofgr, (float*)rhofgr, ik); // check in-place transform #endif int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz],1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((double*)rhogr)[ixy*nplane+iz],1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz], 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((double*)rhogr)[ixy * nplane + iz], 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz],1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((float*)rhofgr)[ixy*nplane+iz],1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz], 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((float*)rhofgr)[ixy * nplane + iz], 1e-4); #endif } } - pwtest.real2recip(rhor,rhogout,ik); + pwtest.real2recip(rhor, rhogout, ik); - pwtest.real2recip((double*)rhogr,rhogr,ik); + pwtest.real2recip((double*)rhogr, rhogr, ik); #ifdef __ENABLE_FLOAT_FFTW - pwtest.real2recip(rhofr,rhofgout,ik); + pwtest.real2recip(rhofr, rhofgout, ik); - pwtest.real2recip((float*)rhofgr,rhofgr,ik); + pwtest.real2recip((float*)rhofgr, rhofgr, ik); #endif - for(int ig = 0 ; ig < npwk ; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhog[ig].real(),rhogr[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogr[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogr[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogr[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-6); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-6); - EXPECT_NEAR(rhofg[ig].real(),rhofgr[ig].real(),1e-6); - EXPECT_NEAR(rhofg[ig].imag(),rhofgr[ig].imag(),1e-6); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-6); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-6); + EXPECT_NEAR(rhofg[ig].real(), rhofgr[ig].real(), 1e-6); + EXPECT_NEAR(rhofg[ig].imag(), rhofgr[ig].imag(), 1e-6); #endif } - - delete [] rhog; - delete [] rhogout; + delete[] rhog; + delete[] rhogout; #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; + delete[] rhofg; + delete[] rhofgout; #endif - //check igl2ig - for(int igl = 0; igl < npwk ; ++igl) - { - const int isz = pwtest.getigl2isz(ik,igl); - for(int ig = 0 ; ig < pwtest.npw; ++ig) + // check igl2ig + for (int igl = 0; igl < npwk; ++igl) + { + const int isz = pwtest.getigl2isz(ik, igl); + for (int ig = 0; ig < pwtest.npw; ++ig) { - if(isz == pwtest.ig2isz[ig]){ - EXPECT_EQ(ig,pwtest.getigl2ig(ik,igl));} + if (isz == pwtest.ig2isz[ig]) + { + EXPECT_EQ(ig, pwtest.getigl2ig(ik, igl)); + } } } - } - delete []tmp; - delete [] rhor; + delete[] tmp; + delete[] rhor; delete[] kvec_d; delete[] rhogr; fftw_cleanup(); diff --git a/source/module_basis/module_pw/test/test2-1-1.cpp b/source/module_basis/module_pw/test/test2-1-1.cpp index a41e92a49b..6bb08bcfaf 100644 --- a/source/module_basis/module_pw/test/test2-1-1.cpp +++ b/source/module_basis/module_pw/test/test2-1-1.cpp @@ -1,20 +1,20 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test2_1_1) +TEST_F(PWTEST, test2_1_1) { - cout<<"dividemthd 2, gamma_only: off, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(iy >= int(pwtest.ny/2) +1) f.y -= pwtest.ny; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (iy >= int(pwtest.ny / 2) + 1) + f.y -= pwtest.ny; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -187,20 +184,23 @@ TEST_F(PWTEST,test2_1_1) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); + } + for (int igg = 1; igg < pwtest.ngg; ++igg) + { + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + if (pwtest.ig_gge0 >= 0) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test2-1-2.cpp b/source/module_basis/module_pw/test/test2-1-2.cpp index 0a5713aabf..7c1a4cb6b4 100644 --- a/source/module_basis/module_pw/test/test2-1-2.cpp +++ b/source/module_basis/module_pw/test/test2-1-2.cpp @@ -1,20 +1,20 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test2_1_2) +TEST_F(PWTEST, test2_1_2) { - cout<<"dividemthd 2, gamma_only: on, xprime: false, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -186,20 +182,23 @@ TEST_F(PWTEST,test2_1_2) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); + } + for (int igg = 1; igg < pwtest.ngg; ++igg) + { + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + if (pwtest.ig_gge0 >= 0) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test2-2.cpp b/source/module_basis/module_pw/test/test2-2.cpp index 8ce6db3c1c..0319bfd0f5 100644 --- a/source/module_basis/module_pw/test/test2-2.cpp +++ b/source/module_basis/module_pw/test/test2-2.cpp @@ -3,21 +3,21 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test2_2) +TEST_F(PWTEST, test2_2) { - cout<<"dividemthd 2, gamma_only: off, xprime: false, check fft"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix - int(nx/2); - double vy = iy - int(ny/2); - double vz = iz - int(nz/2); - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix - int(nx / 2); + double vy = iy - int(ny / 2); + double vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulus+1) + ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] + = 1.0 / (modulus + 1) + ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - //output - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + // output + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhor = new complex [nrxx]; - pwtest.recip2real(rhog,rhor); + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhor = new complex[nrxx]; + pwtest.recip2real(rhog, rhor); int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhor[ixy*nplane+iz].imag(),1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhor[ixy * nplane + iz].imag(), 1e-6); } } - pwtest.real2recip(rhor,rhogout); - for(int ig = 0 ; ig < npw ; ++ig) + pwtest.real2recip(rhor, rhogout); + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete []tmp; + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW fftwf_cleanup(); diff --git a/source/module_basis/module_pw/test/test2-3.cpp b/source/module_basis/module_pw/test/test2-3.cpp index 5f1d1b0cb5..5ff05d8297 100644 --- a/source/module_basis/module_pw/test/test2-3.cpp +++ b/source/module_basis/module_pw/test/test2-3.cpp @@ -3,21 +3,21 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test2_3) +TEST_F(PWTEST, test2_3) { - cout<<"dividemthd 2, gamma_only: on, xprime: false, check fft"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix - int(nx/2); - double vy = iy - int(ny/2); - double vz = iz - int(nz/2); - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix - int(nx / 2); + double vy = iy - int(ny / 2); + double vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut) { - tmp[ix*ny*nz + iy*nz + iz] = 1.0/(modulus+1); - if(vy > 0) tmp[ix*ny*nz + iy*nz + iz]+=ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); - else if(vy < 0) tmp[ix*ny*nz + iy*nz + iz]-=ModuleBase::IMAG_UNIT / (std::abs(-v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] = 1.0 / (modulus + 1); + if (vy > 0) + tmp[ix * ny * nz + iy * nz + iz] += ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); + else if (vy < 0) + tmp[ix * ny * nz + iy * nz + iz] -= ModuleBase::IMAG_UNIT / (std::abs(-v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1); - if(pwtest.gdirect[ig].y > 0) rhog[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - double * rhor = new double [nrxx]; - pwtest.recip2real(rhog,rhor); + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1); + if (pwtest.gdirect[ig].y > 0) + rhog[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + double* rhor = new double[nrxx]; + pwtest.recip2real(rhog, rhor); int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz],1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz], 1e-6); } } - - - pwtest.real2recip(rhor,rhogout); - for(int ig = 0 ; ig < npw ; ++ig) + + pwtest.real2recip(rhor, rhogout); + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW diff --git a/source/module_basis/module_pw/test/test3-1.cpp b/source/module_basis/module_pw/test/test3-1.cpp index 800aa4dec6..a0b1f2e10f 100644 --- a/source/module_basis/module_pw/test/test3-1.cpp +++ b/source/module_basis/module_pw/test/test3-1.cpp @@ -1,20 +1,20 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test3_1) +TEST_F(PWTEST, test3_1) { - cout<<"dividemthd 1, gamma_only: on, xprime: true, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -184,25 +180,30 @@ TEST_F(PWTEST,test3_1) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + for (int igg = 1; igg < pwtest.ngg; ++igg) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; - for(int ig = 0 ; ig < pwtest.npw ; ++ig) + if (pwtest.ig_gge0 >= 0) { - if(ig < pwtest.ng_xeq0) EXPECT_EQ(pwtest.gdirect[ig].x, 0); - else EXPECT_NE(pwtest.gdirect[ig].x, 0); + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); + } + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; + for (int ig = 0; ig < pwtest.npw; ++ig) + { + if (ig < pwtest.ng_xeq0) + EXPECT_EQ(pwtest.gdirect[ig].x, 0); + else + EXPECT_NE(pwtest.gdirect[ig].x, 0); } } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test3-2.cpp b/source/module_basis/module_pw/test/test3-2.cpp index 9c667ab574..7b4338ff13 100644 --- a/source/module_basis/module_pw/test/test3-2.cpp +++ b/source/module_basis/module_pw/test/test3-2.cpp @@ -3,21 +3,23 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test3_2) +TEST_F(PWTEST, test3_2) { - cout<<"dividemthd 1, gamma_only: off, xprime: true, check fft between complex and complex, reset ggecut to latecut"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix - int(nx/2); - double vy = iy - int(ny/2); - double vz = iz - int(nz/2); - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix - int(nx / 2); + double vy = iy - int(ny / 2); + double vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulus+1) + ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] + = 1.0 / (modulus + 1) + ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhor = new complex [nrxx]; + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhor = new complex[nrxx]; ModuleBase::GlobalFunc::ZEROS(rhor, nrxx); - - pwtest.recip2real(rhog,rhor);//check out-of-place transform - pwtest.recip2real(rhogr,rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor); // check out-of-place transform + + pwtest.recip2real(rhogr, rhogr); // check in-place transform int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhor[ixy*nplane+iz].imag(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhogr[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhogr[ixy*nplane+iz].imag(),1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhor[ixy * nplane + iz].imag(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhogr[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhogr[ixy * nplane + iz].imag(), 1e-6); } } - ModuleBase::GlobalFunc::ZEROS(rhogout, npw); - pwtest.real2recip(rhor,rhogout,true, 1);//check out-of-place transform + pwtest.real2recip(rhor, rhogout, true, 1); // check out-of-place transform - pwtest.real2recip(rhogr,rhogr);//check in-place transform + pwtest.real2recip(rhogr, rhogr); // check in-place transform - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW diff --git a/source/module_basis/module_pw/test/test3-3-2.cpp b/source/module_basis/module_pw/test/test3-3-2.cpp index 46decccd20..a4d6ee5e93 100644 --- a/source/module_basis/module_pw/test/test3-3-2.cpp +++ b/source/module_basis/module_pw/test/test3-3-2.cpp @@ -3,21 +3,21 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test3_3_2) +TEST_F(PWTEST, test3_3_2) { - cout<<"dividemthd 1, gamma_only: off, xprime: true, check fft between r & c"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix - int(nx/2); - double vy = iy - int(ny/2); - double vz = iz - int(nz/2); - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix - int(nx / 2); + double vy = iy - int(ny / 2); + double vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut) { - tmp[ix*ny*nz + iy*nz + iz] = 1.0/(modulus+1); - if(vx > 0) tmp[ix*ny*nz + iy*nz + iz]+=ModuleBase::IMAG_UNIT / (std::abs(v.y+1) + 1); - else if(vx < 0) tmp[ix*ny*nz + iy*nz + iz]-=ModuleBase::IMAG_UNIT / (std::abs(-v.y+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] = 1.0 / (modulus + 1); + if (vx > 0) + tmp[ix * ny * nz + iy * nz + iz] += ModuleBase::IMAG_UNIT / (std::abs(v.y + 1) + 1); + else if (vx < 0) + tmp[ix * ny * nz + iy * nz + iz] -= ModuleBase::IMAG_UNIT / (std::abs(-v.y + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1); - if(pwtest.gdirect[ig].x > 0) + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1); + if (pwtest.gdirect[ig].x > 0) { - rhog[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y+1) + 1); - rhogr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y+1) + 1); + rhog[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y + 1) + 1); + rhogr[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y + 1) + 1); } - else if(pwtest.gdirect[ig].x < 0) + else if (pwtest.gdirect[ig].x < 0) { - rhog[ig]-=ModuleBase::IMAG_UNIT / (std::abs(-pwtest.gdirect[ig].y+1) + 1); - rhogr[ig]-=ModuleBase::IMAG_UNIT / (std::abs(-pwtest.gdirect[ig].y+1) + 1); + rhog[ig] -= ModuleBase::IMAG_UNIT / (std::abs(-pwtest.gdirect[ig].y + 1) + 1); + rhogr[ig] -= ModuleBase::IMAG_UNIT / (std::abs(-pwtest.gdirect[ig].y + 1) + 1); } - } - double * rhor = new double [nrxx]; + } + double* rhor = new double[nrxx]; ModuleBase::GlobalFunc::ZEROS(rhor, nrxx); - pwtest.recip2real(rhog,rhor,true,1);//check out-of-place transform // test add fft - - pwtest.recip2real(rhogr, (double *)rhogr);//check in-place transform - + pwtest.recip2real(rhog, rhor, true, 1); // check out-of-place transform // test add fft + pwtest.recip2real(rhogr, (double*)rhogr); // check in-place transform int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz],1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((double*)rhogr)[ixy*nplane+iz],1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz], 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((double*)rhogr)[ixy * nplane + iz], 1e-6); } } ModuleBase::GlobalFunc::ZEROS(rhogout, npw); - pwtest.real2recip(rhor,rhogout,true,1);//check out-of-place transform + pwtest.real2recip(rhor, rhogout, true, 1); // check out-of-place transform - pwtest.real2recip((double *)rhogr,rhogr);//check in-place transform + pwtest.real2recip((double*)rhogr, rhogr); // check in-place transform - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW diff --git a/source/module_basis/module_pw/test/test3-3.cpp b/source/module_basis/module_pw/test/test3-3.cpp index 9195324892..dd377f2217 100644 --- a/source/module_basis/module_pw/test/test3-3.cpp +++ b/source/module_basis/module_pw/test/test3-3.cpp @@ -3,21 +3,21 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test3_3) +TEST_F(PWTEST, test3_3) { - cout<<"dividemthd 1, gamma_only: on, xprime: true, check fft"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix - int(nx/2); - double vy = iy - int(ny/2); - double vz = iz - int(nz/2); - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix - int(nx / 2); + double vy = iy - int(ny / 2); + double vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut) { - tmp[ix*ny*nz + iy*nz + iz] = 1.0/(modulus+1); - if(vx > 0) tmp[ix*ny*nz + iy*nz + iz]+=ModuleBase::IMAG_UNIT / (std::abs(v.y+1) + 1); - else if(vx < 0) tmp[ix*ny*nz + iy*nz + iz]-=ModuleBase::IMAG_UNIT / (std::abs(-v.y+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] = 1.0 / (modulus + 1); + if (vx > 0) + tmp[ix * ny * nz + iy * nz + iz] += ModuleBase::IMAG_UNIT / (std::abs(v.y + 1) + 1); + else if (vx < 0) + tmp[ix * ny * nz + iy * nz + iz] -= ModuleBase::IMAG_UNIT / (std::abs(-v.y + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1); - if(pwtest.gdirect[ig].x > 0) + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1); + if (pwtest.gdirect[ig].x > 0) { - rhog[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y+1) + 1); - rhogr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y+1) + 1); + rhog[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y + 1) + 1); + rhogr[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y + 1) + 1); } - } - double * rhor = new double [nrxx]; + } + double* rhor = new double[nrxx]; ModuleBase::GlobalFunc::ZEROS(rhor, nrxx); - pwtest.recip2real(rhog,rhor,true,1);//check out-of-place transform // test add fft - - pwtest.recip2real(rhogr,(double*)rhogr);//check in-place transform - + pwtest.recip2real(rhog, rhor, true, 1); // check out-of-place transform // test add fft + pwtest.recip2real(rhogr, (double*)rhogr); // check in-place transform int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz],1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((double*)rhogr)[ixy*nplane+iz],1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz], 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((double*)rhogr)[ixy * nplane + iz], 1e-6); } } ModuleBase::GlobalFunc::ZEROS(rhogout, npw); - pwtest.real2recip(rhor,rhogout,true,1);//check out-of-place transform + pwtest.real2recip(rhor, rhogout, true, 1); // check out-of-place transform - pwtest.real2recip((double*)rhogr,rhogr);//check in-place transform + pwtest.real2recip((double*)rhogr, rhogr); // check in-place transform - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW diff --git a/source/module_basis/module_pw/test/test4-1.cpp b/source/module_basis/module_pw/test/test4-1.cpp index 06c8a5d716..e9110932a1 100644 --- a/source/module_basis/module_pw/test/test4-1.cpp +++ b/source/module_basis/module_pw/test/test4-1.cpp @@ -1,20 +1,20 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test4_1) +TEST_F(PWTEST, test4_1) { - cout<<"dividemthd 2, gamma_only: on, xprime: true, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -184,20 +180,23 @@ TEST_F(PWTEST,test4_1) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); + } + for (int igg = 1; igg < pwtest.ngg; ++igg) + { + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + if (pwtest.ig_gge0 >= 0) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test4-2.cpp b/source/module_basis/module_pw/test/test4-2.cpp index e1941a4b2f..8bf5745b1c 100644 --- a/source/module_basis/module_pw/test/test4-2.cpp +++ b/source/module_basis/module_pw/test/test4-2.cpp @@ -3,21 +3,23 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test4_2) +TEST_F(PWTEST, test4_2) { - cout<<"dividemthd 2, gamma_only: off, xprime: true, check fft between complex and complex, reset ggecut to latecut"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix - int(nx/2); - double vy = iy - int(ny/2); - double vz = iz - int(nz/2); - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix - int(nx / 2); + double vy = iy - int(ny / 2); + double vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulus+1) + ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] + = 1.0 / (modulus + 1) + ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhor = new complex [nrxx]; + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhor = new complex[nrxx]; ModuleBase::GlobalFunc::ZEROS(rhor, nrxx); #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npw]; - complex * rhofgr = new complex [nmaxgr]; - complex * rhofgout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + complex* rhofg = new complex[npw]; + complex* rhofgr = new complex[nmaxgr]; + complex* rhofgout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhofg[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhofgr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhofr = new complex [nrxx]; + rhofg[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhofgr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhofr = new complex[nrxx]; ModuleBase::GlobalFunc::ZEROS(rhofr, nrxx); #endif - - pwtest.recip2real(rhog,rhor,true,1);//check out-of-place transform - pwtest.recip2real(rhogr,rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor, true, 1); // check out-of-place transform + + pwtest.recip2real(rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.recip2real(rhofg,rhofr,true, float(1));//check out-of-place transform + pwtest.recip2real(rhofg, rhofr, true, float(1)); // check out-of-place transform - pwtest.recip2real(rhofgr,rhofgr);//check in-place transform + pwtest.recip2real(rhofgr, rhofgr); // check in-place transform #endif int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhor[ixy*nplane+iz].imag(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhogr[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhogr[ixy*nplane+iz].imag(),1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhor[ixy * nplane + iz].imag(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhogr[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhogr[ixy * nplane + iz].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofr[ixy*nplane+iz].imag(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofgr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofgr[ixy*nplane+iz].imag(),1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofr[ixy * nplane + iz].imag(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofgr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofgr[ixy * nplane + iz].imag(), 1e-4); #endif } } - ModuleBase::GlobalFunc::ZEROS(rhogout, npw); - pwtest.real2recip(rhor,rhogout,true, 1);//check out-of-place transform + pwtest.real2recip(rhor, rhogout, true, 1); // check out-of-place transform - pwtest.real2recip(rhogr,rhogr);//check in-place transform + pwtest.real2recip(rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW ModuleBase::GlobalFunc::ZEROS(rhofgout, npw); - pwtest.real2recip(rhofr,rhofgout, true, float(1));//check out-of-place transform + pwtest.real2recip(rhofr, rhofgout, true, float(1)); // check out-of-place transform - pwtest.real2recip(rhofgr,rhofgr);//check in-place transform + pwtest.real2recip(rhofgr, rhofgr); // check in-place transform #endif - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-4); - EXPECT_NEAR(rhofgr[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofgr[ig].imag(),rhofgout[ig].imag(),1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-4); + EXPECT_NEAR(rhofgr[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofgr[ig].imag(), rhofgout[ig].imag(), 1e-4); #endif } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; - delete [] rhofr; - delete [] rhofgr; + delete[] rhofg; + delete[] rhofgout; + delete[] rhofr; + delete[] rhofgr; fftwf_cleanup(); #endif } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test4-3.cpp b/source/module_basis/module_pw/test/test4-3.cpp index 3700766743..8ab9e2404a 100644 --- a/source/module_basis/module_pw/test/test4-3.cpp +++ b/source/module_basis/module_pw/test/test4-3.cpp @@ -3,21 +3,21 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test4_3) +TEST_F(PWTEST, test4_3) { - cout<<"dividemthd 2, gamma_only: on, xprime: true, check fft"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix - int(nx/2); - double vy = iy - int(ny/2); - double vz = iz - int(nz/2); - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix - int(nx / 2); + double vy = iy - int(ny / 2); + double vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut) { - tmp[ix*ny*nz + iy*nz + iz] = 1.0/(modulus+1); - if(vx > 0) tmp[ix*ny*nz + iy*nz + iz]+=ModuleBase::IMAG_UNIT / (std::abs(v.y+1) + 1); - else if(vx < 0) tmp[ix*ny*nz + iy*nz + iz]-=ModuleBase::IMAG_UNIT / (std::abs(-v.y+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] = 1.0 / (modulus + 1); + if (vx > 0) + tmp[ix * ny * nz + iy * nz + iz] += ModuleBase::IMAG_UNIT / (std::abs(v.y + 1) + 1); + else if (vx < 0) + tmp[ix * ny * nz + iy * nz + iz] -= ModuleBase::IMAG_UNIT / (std::abs(-v.y + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1); - if(pwtest.gdirect[ig].x > 0) + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1); + if (pwtest.gdirect[ig].x > 0) { - rhog[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y+1) + 1); - rhogr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y+1) + 1); + rhog[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y + 1) + 1); + rhogr[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y + 1) + 1); } - } - double * rhor = new double [nrxx]; + } + double* rhor = new double[nrxx]; ModuleBase::GlobalFunc::ZEROS(rhor, nrxx); #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npw]; - complex * rhofgr = new complex [nmaxgr]; - complex * rhofgout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + complex* rhofg = new complex[npw]; + complex* rhofgr = new complex[nmaxgr]; + complex* rhofgout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhofg[ig] = 1.0/(pwtest.gg[ig]+1); - rhofgr[ig] = 1.0/(pwtest.gg[ig]+1); - if(pwtest.gdirect[ig].x > 0) + rhofg[ig] = 1.0 / (pwtest.gg[ig] + 1); + rhofgr[ig] = 1.0 / (pwtest.gg[ig] + 1); + if (pwtest.gdirect[ig].x > 0) { - rhofg[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y+1) + 1); - rhofgr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y+1) + 1); + rhofg[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y + 1) + 1); + rhofgr[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y + 1) + 1); } - } - float * rhofr = new float [nrxx]; + } + float* rhofr = new float[nrxx]; ModuleBase::GlobalFunc::ZEROS(rhofr, nrxx); #endif - pwtest.recip2real(rhog,rhor,true,1);//check out-of-place transform // test add fft + pwtest.recip2real(rhog, rhor, true, 1); // check out-of-place transform // test add fft - pwtest.recip2real(rhogr,(double*)rhogr);//check in-place transform + pwtest.recip2real(rhogr, (double*)rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.recip2real(rhofg,rhofr,true,float(1));//check out-of-place transform + pwtest.recip2real(rhofg, rhofr, true, float(1)); // check out-of-place transform - pwtest.recip2real(rhofgr,(float*)rhofgr);//check in-place transform + pwtest.recip2real(rhofgr, (float*)rhofgr); // check in-place transform #endif - - int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz],1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((double*)rhogr)[ixy*nplane+iz],1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz], 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((double*)rhogr)[ixy * nplane + iz], 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz],1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((float*)rhofgr)[ixy*nplane+iz],1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz], 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((float*)rhofgr)[ixy * nplane + iz], 1e-4); #endif } } ModuleBase::GlobalFunc::ZEROS(rhogout, npw); - pwtest.real2recip(rhor,rhogout,true,1);//check out-of-place transform + pwtest.real2recip(rhor, rhogout, true, 1); // check out-of-place transform - pwtest.real2recip((double*)rhogr,rhogr);//check in-place transform + pwtest.real2recip((double*)rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW ModuleBase::GlobalFunc::ZEROS(rhofgout, npw); - pwtest.real2recip(rhofr,rhofgout,true,float(1));//check out-of-place transform + pwtest.real2recip(rhofr, rhofgout, true, float(1)); // check out-of-place transform - pwtest.real2recip((float*)rhofgr,rhofgr);//check in-place transform + pwtest.real2recip((float*)rhofgr, rhofgr); // check in-place transform #endif - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-4); - EXPECT_NEAR(rhofgr[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofgr[ig].imag(),rhofgout[ig].imag(),1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-4); + EXPECT_NEAR(rhofgr[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofgr[ig].imag(), rhofgout[ig].imag(), 1e-4); #endif } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; - delete [] rhofr; - delete [] rhofgr; + delete[] rhofg; + delete[] rhofgout; + delete[] rhofr; + delete[] rhofgr; fftwf_cleanup(); #endif } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test4-4.cpp b/source/module_basis/module_pw/test/test4-4.cpp index 7eb0241318..d3e2f96c13 100644 --- a/source/module_basis/module_pw/test/test4-4.cpp +++ b/source/module_basis/module_pw/test/test4-4.cpp @@ -3,33 +3,33 @@ //--------------------------------------------- #include "../pw_basis_k.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test4_4) +TEST_F(PWTEST, test4_4) { - cout<<"dividemthd 2, gamma_only: off, xprime: true, 2 kpoints, check fft"< *kvec_d; + ModuleBase::Vector3* kvec_d; int nks; //-------------------------------------------------- lat0 = 4; ModuleBase::Matrix3 la(1, 5, 0, 0, 1, 0, 0, 0, 1); nks = 2; kvec_d = new ModuleBase::Vector3[nks]; - kvec_d[0].set(0,0,0); - kvec_d[1].set(0,0.5,0.5); + kvec_d[0].set(0, 0, 0); + kvec_d[1].set(0, 0.5, 0.5); latvec = la; wfcecut = 40; gamma_only = false; @@ -37,12 +37,12 @@ TEST_F(PWTEST,test4_4) bool xprime = true; //-------------------------------------------------- - //init //real parameter + // init //real parameter #ifdef __MPI pwtest.initmpi(nproc_in_pool, rank_in_pool, POOL_WORLD); #endif - pwtest.initgrids(lat0,latvec,4*wfcecut); - pwtest.initparameters(gamma_only,wfcecut,nks,kvec_d,distribution_type,xprime); + pwtest.initgrids(lat0, latvec, 4 * wfcecut); + pwtest.initparameters(gamma_only, wfcecut, nks, kvec_d, distribution_type, xprime); pwtest.setuptransform(); pwtest.collect_local_pw(); @@ -55,167 +55,177 @@ TEST_F(PWTEST,test4_4) double tpiba2 = ModuleBase::TWO_PI * ModuleBase::TWO_PI / lat0 / lat0; double ggecut = wfcecut / tpiba2; - ModuleBase::Matrix3 GT,G,GGT; + ModuleBase::Matrix3 GT, G, GGT; GT = latvec.Inverse(); - G = GT.Transpose(); - GGT = G * GT; - complex *tmp = new complex [nx*ny*nz]; - complex * rhor = new complex [nrxx]; - complex * rhogr = new complex [nmaxgr]; + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + complex* rhor = new complex[nrxx]; + complex* rhogr = new complex[nmaxgr]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofr = new complex [nrxx]; - complex * rhofgr = new complex [nmaxgr]; + complex* rhofr = new complex[nrxx]; + complex* rhofgr = new complex[nmaxgr]; #endif - for(int ik = 0; ik < nks; ++ik) + for (int ik = 0; ik < nks; ++ik) { int npwk = pwtest.npwk[ik]; - if(rank_in_pool == 0) + if (rank_in_pool == 0) { ModuleBase::Vector3 kk = kvec_d[ik]; - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix - int(nx/2); - double vy = iy - int(ny/2); - double vz = iz - int(nz/2); - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix - int(nx / 2); + double vy = iy - int(ny / 2); + double vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); // double modulus = v * (GGT * v); - double modulusgk = (v+kk) * (GGT * (v+kk)); + double modulusgk = (v + kk) * (GGT * (v + kk)); if (modulusgk <= ggecut) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulusgk+1) + ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] + = 1.0 / (modulusgk + 1) + ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - complex * rhog = new complex [npwk]; - complex * rhogout = new complex [npwk]; + complex* rhog = new complex[npwk]; + complex* rhogout = new complex[npwk]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npwk]; - complex * rhofgout = new complex [npwk]; + complex* rhofg = new complex[npwk]; + complex* rhofgout = new complex[npwk]; #endif - for(int ig = 0 ; ig < npwk ; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - rhog[ig] = 1.0/(pwtest.getgk2(ik,ig)+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik,ig).x+1) + 1); - rhogr[ig] = 1.0/(pwtest.getgk2(ik,ig)+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik,ig).x+1) + 1); - } + rhog[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1) + + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik, ig).x + 1) + 1); + rhogr[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1) + + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik, ig).x + 1) + 1); + } #ifdef __ENABLE_FLOAT_FFTW - for(int ig = 0 ; ig < npwk ; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - rhofg[ig] = 1.0/(pwtest.getgk2(ik,ig)+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik,ig).x+1) + 1); - rhofgr[ig] = 1.0/(pwtest.getgk2(ik,ig)+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik,ig).x+1) + 1); - } + rhofg[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1) + + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik, ig).x + 1) + 1); + rhofgr[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1) + + ModuleBase::IMAG_UNIT / (std::abs(pwtest.getgdirect(ik, ig).x + 1) + 1); + } #endif ModuleBase::GlobalFunc::ZEROS(rhor, nrxx); - pwtest.recip2real(rhog,rhor,ik, true, 1); //check out-of-place transform + pwtest.recip2real(rhog, rhor, ik, true, 1); // check out-of-place transform - pwtest.recip2real(rhogr,rhogr,ik); //check in-place transform + pwtest.recip2real(rhogr, rhogr, ik); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW ModuleBase::GlobalFunc::ZEROS(rhofr, nrxx); - pwtest.recip2real(rhofg,rhofr,ik, true, float(1)); //check out-of-place transform + pwtest.recip2real(rhofg, rhofr, ik, true, float(1)); // check out-of-place transform - pwtest.recip2real(rhofgr,rhofgr,ik); //check in-place transform + pwtest.recip2real(rhofgr, rhofgr, ik); // check in-place transform #endif int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhor[ixy*nplane+iz].imag(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhogr[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhogr[ixy*nplane+iz].imag(),1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhor[ixy * nplane + iz].imag(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhogr[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhogr[ixy * nplane + iz].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofr[ixy*nplane+iz].imag(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofgr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofgr[ixy*nplane+iz].imag(),1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofr[ixy * nplane + iz].imag(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofgr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofgr[ixy * nplane + iz].imag(), 1e-4); #endif } } ModuleBase::GlobalFunc::ZEROS(rhogout, npwk); - pwtest.real2recip(rhor,rhogout,ik, true, 1); + pwtest.real2recip(rhor, rhogout, ik, true, 1); - pwtest.real2recip(rhogr,rhogr,ik); + pwtest.real2recip(rhogr, rhogr, ik); #ifdef __ENABLE_FLOAT_FFTW ModuleBase::GlobalFunc::ZEROS(rhofgout, npwk); - pwtest.real2recip(rhofr,rhofgout,ik, true, float(1)); + pwtest.real2recip(rhofr, rhofgout, ik, true, float(1)); - pwtest.real2recip(rhofgr,rhofgr,ik); + pwtest.real2recip(rhofgr, rhofgr, ik); #endif - for(int ig = 0 ; ig < npwk ; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhog[ig].real(),rhogr[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogr[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogr[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogr[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-4); - EXPECT_NEAR(rhofg[ig].real(),rhofgr[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgr[ig].imag(),1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgr[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgr[ig].imag(), 1e-4); #endif } - - delete [] rhog; - delete [] rhogout; + delete[] rhog; + delete[] rhogout; #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; + delete[] rhofg; + delete[] rhofgout; #endif - //check getgcar(ik,ig) - for(int igl = 0 ; igl < npwk; ++igl) + // check getgcar(ik,ig) + for (int igl = 0; igl < npwk; ++igl) { - EXPECT_NEAR(pwtest.getgcar(ik,igl).norm2(), (pwtest.getgdirect(ik,igl) * G).norm2(), 1e-8); - EXPECT_NEAR(pwtest.getgpluskcar(ik,igl).norm2(), ((pwtest.getgdirect(ik,igl) + kvec_d[ik]) * G).norm2(), 1e-8); + EXPECT_NEAR(pwtest.getgcar(ik, igl).norm2(), (pwtest.getgdirect(ik, igl) * G).norm2(), 1e-8); + EXPECT_NEAR(pwtest.getgpluskcar(ik, igl).norm2(), + ((pwtest.getgdirect(ik, igl) + kvec_d[ik]) * G).norm2(), + 1e-8); } - //check igl2ig - for(int igl = 0; igl < npwk ; ++igl) - { - const int isz = pwtest.getigl2isz(ik,igl); - for(int ig = 0 ; ig < pwtest.npw; ++ig) + // check igl2ig + for (int igl = 0; igl < npwk; ++igl) + { + const int isz = pwtest.getigl2isz(ik, igl); + for (int ig = 0; ig < pwtest.npw; ++ig) { - if(isz == pwtest.ig2isz[ig]){ - EXPECT_EQ(ig,pwtest.getigl2ig(ik,igl));} + if (isz == pwtest.ig2isz[ig]) + { + EXPECT_EQ(ig, pwtest.getigl2ig(ik, igl)); + } } } - } - delete []tmp; - delete [] rhor; + delete[] tmp; + delete[] rhor; delete[] kvec_d; delete[] rhogr; fftw_cleanup(); diff --git a/source/module_basis/module_pw/test/test4-5.cpp b/source/module_basis/module_pw/test/test4-5.cpp index c2aea38c8c..5fa52d96e2 100644 --- a/source/module_basis/module_pw/test/test4-5.cpp +++ b/source/module_basis/module_pw/test/test4-5.cpp @@ -3,32 +3,32 @@ //--------------------------------------------- #include "../pw_basis_k.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test4_5) +TEST_F(PWTEST, test4_5) { - cout<<"dividemthd 2, gamma_only: on, xprime: true, gamma kpoint, check fft"< *kvec_d; + ModuleBase::Vector3* kvec_d; int nks; //-------------------------------------------------- lat0 = 5; ModuleBase::Matrix3 la(1, 0.3, 0, 0, 2, 0, 0, 0, 6); nks = 1; kvec_d = new ModuleBase::Vector3[nks]; - kvec_d[0].set(0,0,0); + kvec_d[0].set(0, 0, 0); latvec = la; wfcecut = 10; gamma_only = true; @@ -36,12 +36,12 @@ TEST_F(PWTEST,test4_5) bool xprime = true; //-------------------------------------------------- - //init //real parameter + // init //real parameter #ifdef __MPI pwtest.initmpi(nproc_in_pool, rank_in_pool, POOL_WORLD); #endif - pwtest.initgrids(lat0,latvec,4*wfcecut); - pwtest.initparameters(gamma_only,wfcecut,nks,kvec_d,distribution_type, xprime); + pwtest.initgrids(lat0, latvec, 4 * wfcecut); + pwtest.initparameters(gamma_only, wfcecut, nks, kvec_d, distribution_type, xprime); pwtest.setuptransform(); pwtest.collect_local_pw(); @@ -54,170 +54,175 @@ TEST_F(PWTEST,test4_5) double tpiba2 = ModuleBase::TWO_PI * ModuleBase::TWO_PI / lat0 / lat0; double ggecut = wfcecut / tpiba2; - ModuleBase::Matrix3 GT,G,GGT; + ModuleBase::Matrix3 GT, G, GGT; GT = latvec.Inverse(); - G = GT.Transpose(); - GGT = G * GT; - complex *tmp = new complex [nx*ny*nz]; - complex * rhogr = new complex [nmaxgr]; - double * rhor = new double [nrxx]; + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + complex* rhogr = new complex[nmaxgr]; + double* rhor = new double[nrxx]; #ifdef __ENABLE_FLOAT_FFTW - float * rhofr = new float [nrxx]; - complex * rhofgr = new complex [nmaxgr]; + float* rhofr = new float[nrxx]; + complex* rhofgr = new complex[nmaxgr]; #endif - for(int ik = 0; ik < nks; ++ik) + for (int ik = 0; ik < nks; ++ik) { int npwk = pwtest.npwk[ik]; - if(rank_in_pool == 0) + if (rank_in_pool == 0) { ModuleBase::Vector3 kk = kvec_d[ik]; - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix - int(nx/2); - double vy = iy - int(ny/2); - double vz = iz - int(nz/2); - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix - int(nx / 2); + double vy = iy - int(ny / 2); + double vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); // double modulus = v * (GGT * v); - double modulusgk = (v+kk) * (GGT * (v+kk)); + double modulusgk = (v + kk) * (GGT * (v + kk)); if (modulusgk <= ggecut) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulusgk+1); - if(vx > 0) tmp[ix*ny*nz + iy*nz + iz]+=ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); - else if(vx < 0) tmp[ix*ny*nz + iy*nz + iz]-=ModuleBase::IMAG_UNIT / (std::abs(-v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] = 1.0 / (modulusgk + 1); + if (vx > 0) + tmp[ix * ny * nz + iy * nz + iz] += ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); + else if (vx < 0) + tmp[ix * ny * nz + iy * nz + iz] -= ModuleBase::IMAG_UNIT / (std::abs(-v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - complex * rhog = new complex [npwk]; - complex * rhogout = new complex [npwk]; + complex* rhog = new complex[npwk]; + complex* rhogout = new complex[npwk]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npwk]; - complex * rhofgout = new complex [npwk]; + complex* rhofg = new complex[npwk]; + complex* rhofgout = new complex[npwk]; #endif - for(int ig = 0 ; ig < npwk ; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - rhog[ig] = 1.0/(pwtest.getgk2(ik,ig)+1); - rhogr[ig] = 1.0/(pwtest.getgk2(ik,ig)+1); - ModuleBase::Vector3 f = pwtest.getgdirect(ik,ig); - if(f.x > 0) + rhog[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1); + rhogr[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1); + ModuleBase::Vector3 f = pwtest.getgdirect(ik, ig); + if (f.x > 0) { - rhog[ig]+=ModuleBase::IMAG_UNIT / (std::abs(f.x+1) + 1); - rhogr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(f.x+1) + 1); + rhog[ig] += ModuleBase::IMAG_UNIT / (std::abs(f.x + 1) + 1); + rhogr[ig] += ModuleBase::IMAG_UNIT / (std::abs(f.x + 1) + 1); } - } + } #ifdef __ENABLE_FLOAT_FFTW - for(int ig = 0 ; ig < npwk ; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - rhofg[ig] = 1.0/(pwtest.getgk2(ik,ig)+1); - rhofgr[ig] = 1.0/(pwtest.getgk2(ik,ig)+1); - ModuleBase::Vector3 f = pwtest.getgdirect(ik,ig); - if(f.x > 0) + rhofg[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1); + rhofgr[ig] = 1.0 / (pwtest.getgk2(ik, ig) + 1); + ModuleBase::Vector3 f = pwtest.getgdirect(ik, ig); + if (f.x > 0) { - rhofg[ig]+=ModuleBase::IMAG_UNIT / (std::abs(f.x+1) + 1); - rhofgr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(f.x+1) + 1); + rhofg[ig] += ModuleBase::IMAG_UNIT / (std::abs(f.x + 1) + 1); + rhofgr[ig] += ModuleBase::IMAG_UNIT / (std::abs(f.x + 1) + 1); } - } + } #endif ModuleBase::GlobalFunc::ZEROS(rhor, nrxx); - pwtest.recip2real(rhog,rhor,ik,true, 1); //check out-of-place transform + pwtest.recip2real(rhog, rhor, ik, true, 1); // check out-of-place transform - pwtest.recip2real(rhogr,(double*)rhogr,ik); //check in-place transform + pwtest.recip2real(rhogr, (double*)rhogr, ik); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW ModuleBase::GlobalFunc::ZEROS(rhofr, nrxx); - pwtest.recip2real(rhofg,rhofr,ik); //check out-of-place transform + pwtest.recip2real(rhofg, rhofr, ik); // check out-of-place transform - pwtest.recip2real(rhofgr,(float*)rhofgr,ik); //check in-place transform + pwtest.recip2real(rhofgr, (float*)rhofgr, ik); // check in-place transform #endif int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz],1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((double*)rhogr)[ixy*nplane+iz],1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz], 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((double*)rhogr)[ixy * nplane + iz], 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz],1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((float*)rhofgr)[ixy*nplane+iz],1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz], 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((float*)rhofgr)[ixy * nplane + iz], 1e-4); #endif } } ModuleBase::GlobalFunc::ZEROS(rhogout, npwk); - pwtest.real2recip(rhor,rhogout,ik,true, 1.0); + pwtest.real2recip(rhor, rhogout, ik, true, 1.0); - pwtest.real2recip((double*)rhogr,rhogr,ik); + pwtest.real2recip((double*)rhogr, rhogr, ik); #ifdef __ENABLE_FLOAT_FFTW ModuleBase::GlobalFunc::ZEROS(rhofgout, npwk); - pwtest.real2recip(rhofr,rhofgout,ik,true, 1.0); + pwtest.real2recip(rhofr, rhofgout, ik, true, 1.0); - pwtest.real2recip((float*)rhofgr,rhofgr,ik); + pwtest.real2recip((float*)rhofgr, rhofgr, ik); #endif - for(int ig = 0 ; ig < npwk ; ++ig) + for (int ig = 0; ig < npwk; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhog[ig].real(),rhogr[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogr[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogr[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogr[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-6); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-6); - EXPECT_NEAR(rhofg[ig].real(),rhofgr[ig].real(),1e-6); - EXPECT_NEAR(rhofg[ig].imag(),rhofgr[ig].imag(),1e-6); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-6); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-6); + EXPECT_NEAR(rhofg[ig].real(), rhofgr[ig].real(), 1e-6); + EXPECT_NEAR(rhofg[ig].imag(), rhofgr[ig].imag(), 1e-6); #endif } - - delete [] rhog; - delete [] rhogout; + delete[] rhog; + delete[] rhogout; #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; + delete[] rhofg; + delete[] rhofgout; #endif - //check igl2ig - for(int igl = 0; igl < npwk ; ++igl) - { - const int isz = pwtest.getigl2isz(ik,igl); - for(int ig = 0 ; ig < pwtest.npw; ++ig) + // check igl2ig + for (int igl = 0; igl < npwk; ++igl) + { + const int isz = pwtest.getigl2isz(ik, igl); + for (int ig = 0; ig < pwtest.npw; ++ig) { - if(isz == pwtest.ig2isz[ig]){ - EXPECT_EQ(ig,pwtest.getigl2ig(ik,igl));} + if (isz == pwtest.ig2isz[ig]) + { + EXPECT_EQ(ig, pwtest.getigl2ig(ik, igl)); + } } } - } - delete []tmp; - delete [] rhor; + delete[] tmp; + delete[] rhor; delete[] kvec_d; delete[] rhogr; fftw_cleanup(); diff --git a/source/module_basis/module_pw/test/test5-1-1.cpp b/source/module_basis/module_pw/test/test5-1-1.cpp index f669733eee..c6d5c49737 100644 --- a/source/module_basis/module_pw/test/test5-1-1.cpp +++ b/source/module_basis/module_pw/test/test5-1-1.cpp @@ -1,20 +1,21 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test5_1_1) +TEST_F(PWTEST, test5_1_1) { - cout<<"dividemthd 1, gamma_only: off, full_pw: true, full_pw_dim: 1, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(iy >= int(pwtest.ny/2) +1) f.y -= pwtest.ny; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (iy >= int(pwtest.ny / 2) + 1) + f.y -= pwtest.ny; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -189,25 +189,29 @@ TEST_F(PWTEST,test5_1_1) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + for (int igg = 1; igg < pwtest.ngg; ++igg) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + if (pwtest.ig_gge0 >= 0) + { + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); + } + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; - //Add tests for gg_uniq - ModuleBase::Matrix3 latvec2(5.1358423233,0.0,0.0,0.1578526541,5.1334159104,0.0,-2.646847675,-2.5667081359,3.5753437737); + // Add tests for gg_uniq + ModuleBase::Matrix3 + latvec2(5.1358423233, 0.0, 0.0, 0.1578526541, 5.1334159104, 0.0, -2.646847675, -2.5667081359, 3.5753437737); gamma_only = false; wfcecut = 240; lat0 = 1.88972613; @@ -218,17 +222,15 @@ TEST_F(PWTEST,test5_1_1) pwtest.setuptransform(); pwtest.collect_local_pw(); pwtest.collect_uniqgg(); - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); } - int * irindex = new int [pwtest.fftnxy]; + int* irindex = new int[pwtest.fftnxy]; pwtest.getfftixy2is(irindex); - for(int is = 0 ; is < pwtest.nst ;++is) + for (int is = 0; is < pwtest.nst; ++is) { - EXPECT_EQ(irindex[pwtest.is2fftixy[is]],is); + EXPECT_EQ(irindex[pwtest.is2fftixy[is]], is); } delete[] irindex; - - } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test5-1-2.cpp b/source/module_basis/module_pw/test/test5-1-2.cpp index 77cec7c36a..030af6d9f0 100644 --- a/source/module_basis/module_pw/test/test5-1-2.cpp +++ b/source/module_basis/module_pw/test/test5-1-2.cpp @@ -1,20 +1,21 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test5_1_2) +TEST_F(PWTEST, test5_1_2) { - cout<<"dividemthd 1, gamma_only: off, full_pw: true, full_pw_dim: 2, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(iy >= int(pwtest.ny/2) +1) f.y -= pwtest.ny; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (iy >= int(pwtest.ny / 2) + 1) + f.y -= pwtest.ny; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -189,25 +189,29 @@ TEST_F(PWTEST,test5_1_2) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + for (int igg = 1; igg < pwtest.ngg; ++igg) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + if (pwtest.ig_gge0 >= 0) + { + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); + } + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; - //Add tests for gg_uniq - ModuleBase::Matrix3 latvec2(5.1358423233,0.0,0.0,0.1578526541,5.1334159104,0.0,-2.646847675,-2.5667081359,3.5753437737); + // Add tests for gg_uniq + ModuleBase::Matrix3 + latvec2(5.1358423233, 0.0, 0.0, 0.1578526541, 5.1334159104, 0.0, -2.646847675, -2.5667081359, 3.5753437737); gamma_only = false; wfcecut = 240; lat0 = 1.88972613; @@ -218,17 +222,15 @@ TEST_F(PWTEST,test5_1_2) pwtest.setuptransform(); pwtest.collect_local_pw(); pwtest.collect_uniqgg(); - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); } - int * irindex = new int [pwtest.fftnxy]; + int* irindex = new int[pwtest.fftnxy]; pwtest.getfftixy2is(irindex); - for(int is = 0 ; is < pwtest.nst ;++is) + for (int is = 0; is < pwtest.nst; ++is) { - EXPECT_EQ(irindex[pwtest.is2fftixy[is]],is); + EXPECT_EQ(irindex[pwtest.is2fftixy[is]], is); } delete[] irindex; - - } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test5-2-1.cpp b/source/module_basis/module_pw/test/test5-2-1.cpp index fdc624522b..232a8c95d8 100644 --- a/source/module_basis/module_pw/test/test5-2-1.cpp +++ b/source/module_basis/module_pw/test/test5-2-1.cpp @@ -1,20 +1,21 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test5_2_1) +TEST_F(PWTEST, test5_2_1) { - cout<<"dividemthd 1, gamma_only: on, full_pw: true, full_pw_dim: 1, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -188,20 +187,23 @@ TEST_F(PWTEST,test5_2_1) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); + } + for (int igg = 1; igg < pwtest.ngg; ++igg) + { + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + if (pwtest.ig_gge0 >= 0) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test5-2-2.cpp b/source/module_basis/module_pw/test/test5-2-2.cpp index 530e27be2a..93bdf53bd6 100644 --- a/source/module_basis/module_pw/test/test5-2-2.cpp +++ b/source/module_basis/module_pw/test/test5-2-2.cpp @@ -1,20 +1,21 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test5_2_2) +TEST_F(PWTEST, test5_2_2) { - cout<<"dividemthd 1, gamma_only: on, full_pw: true, full_pw_dim: 2, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -188,20 +187,23 @@ TEST_F(PWTEST,test5_2_2) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); + } + for (int igg = 1; igg < pwtest.ngg; ++igg) + { + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + if (pwtest.ig_gge0 >= 0) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test5-3-1.cpp b/source/module_basis/module_pw/test/test5-3-1.cpp index 5ce5d80dea..f9e3e01d6f 100644 --- a/source/module_basis/module_pw/test/test5-3-1.cpp +++ b/source/module_basis/module_pw/test/test5-3-1.cpp @@ -3,21 +3,21 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test5_3_1) +TEST_F(PWTEST, test5_3_1) { - cout<<"dividemthd 1, gamma_only: on, xprime: false, full_pw: true, full_pw_dim: 1, check fft"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix + int(nx/2) - nx + 1; - double vy = iy + int(ny/2) - ny + 1; - double vz = iz + int(nz/2) - nz + 1; - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix + int(nx / 2) - nx + 1; + double vy = iy + int(ny / 2) - ny + 1; + double vz = iz + int(nz / 2) - nz + 1; + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut || full_pw) { - tmp[ix*ny*nz + iy*nz + iz] = 1.0/(modulus+1); - if(vy > 0) tmp[ix*ny*nz + iy*nz + iz]+=ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); - else if(vy < 0) tmp[ix*ny*nz + iy*nz + iz]-=ModuleBase::IMAG_UNIT / (std::abs(-v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] = 1.0 / (modulus + 1); + if (vy > 0) + tmp[ix * ny * nz + iy * nz + iz] += ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); + else if (vy < 0) + tmp[ix * ny * nz + iy * nz + iz] -= ModuleBase::IMAG_UNIT / (std::abs(-v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1); - if(pwtest.gdirect[ig].y > 0) + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1); + if (pwtest.gdirect[ig].y > 0) { - rhog[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); + rhog[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); } - } - double * rhor = new double [nrxx]; + } + double* rhor = new double[nrxx]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npw]; - complex * rhofgr = new complex [nmaxgr]; - complex * rhofgout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + complex* rhofg = new complex[npw]; + complex* rhofgr = new complex[nmaxgr]; + complex* rhofgout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhofg[ig] = 1.0/(pwtest.gg[ig]+1); - rhofgr[ig] = 1.0/(pwtest.gg[ig]+1); - if(pwtest.gdirect[ig].y > 0) + rhofg[ig] = 1.0 / (pwtest.gg[ig] + 1); + rhofgr[ig] = 1.0 / (pwtest.gg[ig] + 1); + if (pwtest.gdirect[ig].y > 0) { - rhofg[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhofgr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); + rhofg[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhofgr[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); } - } - float * rhofr = new float [nrxx]; + } + float* rhofr = new float[nrxx]; #endif - - pwtest.recip2real(rhog,rhor);//check out-of-place transform - pwtest.recip2real(rhogr,(double*)rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor); // check out-of-place transform + + pwtest.recip2real(rhogr, (double*)rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.recip2real(rhofg,rhofr);//check out-of-place transform + pwtest.recip2real(rhofg, rhofr); // check out-of-place transform - pwtest.recip2real(rhofgr,(float*)rhofgr);//check in-place transform + pwtest.recip2real(rhofgr, (float*)rhofgr); // check in-place transform #endif int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz],1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((double*)rhogr)[ixy*nplane+iz],1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz], 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((double*)rhogr)[ixy * nplane + iz], 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz],1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((float*)rhofgr)[ixy*nplane+iz],1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz], 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((float*)rhofgr)[ixy * nplane + iz], 1e-4); #endif } } - - - pwtest.real2recip(rhor,rhogout);//check out-of-place transform - pwtest.real2recip((double*)rhogr,rhogr);//check in-place transform + pwtest.real2recip(rhor, rhogout); // check out-of-place transform + + pwtest.real2recip((double*)rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.real2recip(rhofr,rhofgout);//check out-of-place transform + pwtest.real2recip(rhofr, rhofgout); // check out-of-place transform - pwtest.real2recip((float*)rhofgr,rhofgr);//check in-place transform + pwtest.real2recip((float*)rhofgr, rhofgr); // check in-place transform #endif - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-4); - EXPECT_NEAR(rhofgr[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofgr[ig].imag(),rhofgout[ig].imag(),1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-4); + EXPECT_NEAR(rhofgr[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofgr[ig].imag(), rhofgout[ig].imag(), 1e-4); #endif } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; - delete [] rhofr; - delete [] rhofgr; + delete[] rhofg; + delete[] rhofgout; + delete[] rhofr; + delete[] rhofgr; fftwf_cleanup(); #endif } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test5-4-1.cpp b/source/module_basis/module_pw/test/test5-4-1.cpp index ac6a38c1b8..cc42ad38ea 100644 --- a/source/module_basis/module_pw/test/test5-4-1.cpp +++ b/source/module_basis/module_pw/test/test5-4-1.cpp @@ -3,21 +3,23 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test5_4_1) +TEST_F(PWTEST, test5_4_1) { - cout<<"dividemthd 1, gamma_only: off, xprime: false, full_pw: true, full_pw_dim: 1, check fft between complex and complex"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix + int(nx/2) - nx + 1; - double vy = iy + int(ny/2) - ny + 1; - double vz = iz + int(nz/2) - nz + 1; - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix + int(nx / 2) - nx + 1; + double vy = iy + int(ny / 2) - ny + 1; + double vz = iz + int(nz / 2) - nz + 1; + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut || full_pw) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulus+1) + ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] + = 1.0 / (modulus + 1) + ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhor = new complex [nrxx]; + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhor = new complex[nrxx]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npw]; - complex * rhofgr = new complex [nmaxgr]; - complex * rhofgout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + complex* rhofg = new complex[npw]; + complex* rhofgr = new complex[nmaxgr]; + complex* rhofgout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhofg[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhofgr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhofr = new complex [nrxx]; + rhofg[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhofgr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhofr = new complex[nrxx]; #endif - - pwtest.recip2real(rhog,rhor);//check out-of-place transform - pwtest.recip2real(rhogr,rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor); // check out-of-place transform + + pwtest.recip2real(rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.recip2real(rhofg,rhofr);//check out-of-place transform + pwtest.recip2real(rhofg, rhofr); // check out-of-place transform - pwtest.recip2real(rhofgr,rhofgr);//check in-place transform + pwtest.recip2real(rhofgr, rhofgr); // check in-place transform #endif int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhor[ixy*nplane+iz].imag(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhogr[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhogr[ixy*nplane+iz].imag(),1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhor[ixy * nplane + iz].imag(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhogr[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhogr[ixy * nplane + iz].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofr[ixy*nplane+iz].imag(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofgr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofgr[ixy*nplane+iz].imag(),1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofr[ixy * nplane + iz].imag(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofgr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofgr[ixy * nplane + iz].imag(), 1e-4); #endif } } - - - pwtest.real2recip(rhor,rhogout);//check out-of-place transform + pwtest.real2recip(rhor, rhogout); // check out-of-place transform - pwtest.real2recip(rhogr,rhogr);//check in-place transform + pwtest.real2recip(rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.real2recip(rhofr,rhofgout);//check out-of-place transform + pwtest.real2recip(rhofr, rhofgout); // check out-of-place transform - pwtest.real2recip(rhofgr,rhofgr);//check in-place transform + pwtest.real2recip(rhofgr, rhofgr); // check in-place transform #endif - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-4); - EXPECT_NEAR(rhofgr[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofgr[ig].imag(),rhofgout[ig].imag(),1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-4); + EXPECT_NEAR(rhofgr[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofgr[ig].imag(), rhofgout[ig].imag(), 1e-4); #endif } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; - delete [] rhofr; - delete [] rhofgr; + delete[] rhofg; + delete[] rhofgout; + delete[] rhofr; + delete[] rhofgr; fftwf_cleanup(); #endif } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test5-4-2.cpp b/source/module_basis/module_pw/test/test5-4-2.cpp index 4aefc7e49d..8c6c149170 100644 --- a/source/module_basis/module_pw/test/test5-4-2.cpp +++ b/source/module_basis/module_pw/test/test5-4-2.cpp @@ -3,21 +3,23 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test5_4_2) +TEST_F(PWTEST, test5_4_2) { - cout<<"dividemthd 1, gamma_only: off, xprime: false, full_pw: true, full_pw_dim: 2, check fft between complex and complex"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix + int(nx/2) - nx + 1; - double vy = iy + int(ny/2) - ny + 1; - double vz = iz + int(nz/2) - nz + 1; - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix + int(nx / 2) - nx + 1; + double vy = iy + int(ny / 2) - ny + 1; + double vz = iz + int(nz / 2) - nz + 1; + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut || full_pw) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulus+1) + ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] + = 1.0 / (modulus + 1) + ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g((double(int(nx/2))-1.)/nx, (double(int(ny/2))-1.)/ny, (double(int(nz/2))-1.)/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g((double(int(nx / 2)) - 1.) / nx, + (double(int(ny / 2)) - 1.) / ny, + (double(int(nz / 2)) - 1.) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhor = new complex [nrxx]; + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhor = new complex[nrxx]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npw]; - complex * rhofgr = new complex [nmaxgr]; - complex * rhofgout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + complex* rhofg = new complex[npw]; + complex* rhofgr = new complex[nmaxgr]; + complex* rhofgout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhofg[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhofgr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhofr = new complex [nrxx]; + rhofg[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhofgr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhofr = new complex[nrxx]; #endif - - pwtest.recip2real(rhog,rhor);//check out-of-place transform - pwtest.recip2real(rhogr,rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor); // check out-of-place transform + + pwtest.recip2real(rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.recip2real(rhofg,rhofr);//check out-of-place transform + pwtest.recip2real(rhofg, rhofr); // check out-of-place transform - pwtest.recip2real(rhofgr,rhofgr);//check in-place transform + pwtest.recip2real(rhofgr, rhofgr); // check in-place transform #endif int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhor[ixy*nplane+iz].imag(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhogr[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhogr[ixy*nplane+iz].imag(),1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhor[ixy * nplane + iz].imag(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhogr[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhogr[ixy * nplane + iz].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofr[ixy*nplane+iz].imag(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofgr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofgr[ixy*nplane+iz].imag(),1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofr[ixy * nplane + iz].imag(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofgr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofgr[ixy * nplane + iz].imag(), 1e-4); #endif } } - - - pwtest.real2recip(rhor,rhogout);//check out-of-place transform + pwtest.real2recip(rhor, rhogout); // check out-of-place transform - pwtest.real2recip(rhogr,rhogr);//check in-place transform + pwtest.real2recip(rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.real2recip(rhofr,rhofgout);//check out-of-place transform + pwtest.real2recip(rhofr, rhofgout); // check out-of-place transform - pwtest.real2recip(rhofgr,rhofgr);//check in-place transform + pwtest.real2recip(rhofgr, rhofgr); // check in-place transform #endif - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-4); - EXPECT_NEAR(rhofgr[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofgr[ig].imag(),rhofgout[ig].imag(),1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-4); + EXPECT_NEAR(rhofgr[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofgr[ig].imag(), rhofgout[ig].imag(), 1e-4); #endif } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; - delete [] rhofr; - delete [] rhofgr; + delete[] rhofg; + delete[] rhofgout; + delete[] rhofr; + delete[] rhofgr; fftwf_cleanup(); #endif } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test6-1-1.cpp b/source/module_basis/module_pw/test/test6-1-1.cpp index 904b120f62..76552aba1c 100644 --- a/source/module_basis/module_pw/test/test6-1-1.cpp +++ b/source/module_basis/module_pw/test/test6-1-1.cpp @@ -1,20 +1,21 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test6_1_1) +TEST_F(PWTEST, test6_1_1) { - cout<<"dividemthd 2, gamma_only: off, full_pw: true, full_pw_dim: 1, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(iy >= int(pwtest.ny/2) +1) f.y -= pwtest.ny; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (iy >= int(pwtest.ny / 2) + 1) + f.y -= pwtest.ny; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -189,25 +189,29 @@ TEST_F(PWTEST,test6_1_1) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + for (int igg = 1; igg < pwtest.ngg; ++igg) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + if (pwtest.ig_gge0 >= 0) + { + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); + } + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; - //Add tests for gg_uniq - ModuleBase::Matrix3 latvec2(5.1358423233,0.0,0.0,0.1578526541,5.1334159104,0.0,-2.646847675,-2.5667081359,3.5753437737); + // Add tests for gg_uniq + ModuleBase::Matrix3 + latvec2(5.1358423233, 0.0, 0.0, 0.1578526541, 5.1334159104, 0.0, -2.646847675, -2.5667081359, 3.5753437737); gamma_only = false; wfcecut = 240; lat0 = 1.88972613; @@ -218,17 +222,15 @@ TEST_F(PWTEST,test6_1_1) pwtest.setuptransform(); pwtest.collect_local_pw(); pwtest.collect_uniqgg(); - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); } - int * irindex = new int [pwtest.fftnxy]; + int* irindex = new int[pwtest.fftnxy]; pwtest.getfftixy2is(irindex); - for(int is = 0 ; is < pwtest.nst ;++is) + for (int is = 0; is < pwtest.nst; ++is) { - EXPECT_EQ(irindex[pwtest.is2fftixy[is]],is); + EXPECT_EQ(irindex[pwtest.is2fftixy[is]], is); } delete[] irindex; - - } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test6-1-2.cpp b/source/module_basis/module_pw/test/test6-1-2.cpp index f9434655c5..25bed6a158 100644 --- a/source/module_basis/module_pw/test/test6-1-2.cpp +++ b/source/module_basis/module_pw/test/test6-1-2.cpp @@ -1,20 +1,21 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test6_1_2) +TEST_F(PWTEST, test6_1_2) { - cout<<"dividemthd 2, gamma_only: off, full_pw: true, full_pw_dim: 2, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(iy >= int(pwtest.ny/2) +1) f.y -= pwtest.ny; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (iy >= int(pwtest.ny / 2) + 1) + f.y -= pwtest.ny; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.nz + ix*pwtest.ny*pwtest.nz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.nz + ix * pwtest.ny * pwtest.nz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -189,25 +189,29 @@ TEST_F(PWTEST,test6_1_2) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + for (int igg = 1; igg < pwtest.ngg; ++igg) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + if (pwtest.ig_gge0 >= 0) + { + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); + } + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; - //Add tests for gg_uniq - ModuleBase::Matrix3 latvec2(5.1358423233,0.0,0.0,0.1578526541,5.1334159104,0.0,-2.646847675,-2.5667081359,3.5753437737); + // Add tests for gg_uniq + ModuleBase::Matrix3 + latvec2(5.1358423233, 0.0, 0.0, 0.1578526541, 5.1334159104, 0.0, -2.646847675, -2.5667081359, 3.5753437737); gamma_only = false; wfcecut = 240; lat0 = 1.88972613; @@ -218,17 +222,15 @@ TEST_F(PWTEST,test6_1_2) pwtest.setuptransform(); pwtest.collect_local_pw(); pwtest.collect_uniqgg(); - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); } - int * irindex = new int [pwtest.fftnxy]; + int* irindex = new int[pwtest.fftnxy]; pwtest.getfftixy2is(irindex); - for(int is = 0 ; is < pwtest.nst ;++is) + for (int is = 0; is < pwtest.nst; ++is) { - EXPECT_EQ(irindex[pwtest.is2fftixy[is]],is); + EXPECT_EQ(irindex[pwtest.is2fftixy[is]], is); } delete[] irindex; - - } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test6-2-1.cpp b/source/module_basis/module_pw/test/test6-2-1.cpp index 684c95d2e7..33ab7bc875 100644 --- a/source/module_basis/module_pw/test/test6-2-1.cpp +++ b/source/module_basis/module_pw/test/test6-2-1.cpp @@ -1,20 +1,21 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test6_2_1) +TEST_F(PWTEST, test6_2_1) { - cout<<"dividemthd 2, gamma_only: on, full_pw: true, full_pw_dim: 1, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -188,20 +187,23 @@ TEST_F(PWTEST,test6_2_1) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); + } + for (int igg = 1; igg < pwtest.ngg; ++igg) + { + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + if (pwtest.ig_gge0 >= 0) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test6-2-2.cpp b/source/module_basis/module_pw/test/test6-2-2.cpp index ae3fe8e337..2f95d63854 100644 --- a/source/module_basis/module_pw/test/test6-2-2.cpp +++ b/source/module_basis/module_pw/test/test6-2-2.cpp @@ -1,20 +1,21 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test6_2_2) +TEST_F(PWTEST, test6_2_2) { - cout<<"dividemthd 2, gamma_only: on, full_pw: true, full_pw_dim: 2, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -189,20 +188,23 @@ TEST_F(PWTEST,test6_2_2) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); + } + for (int igg = 1; igg < pwtest.ngg; ++igg) + { + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + if (pwtest.ig_gge0 >= 0) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test6-3-1.cpp b/source/module_basis/module_pw/test/test6-3-1.cpp index 76e44d34f6..2ba31dcb53 100644 --- a/source/module_basis/module_pw/test/test6-3-1.cpp +++ b/source/module_basis/module_pw/test/test6-3-1.cpp @@ -3,21 +3,21 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test6_3_1) +TEST_F(PWTEST, test6_3_1) { - cout<<"dividemthd 2, gamma_only: on, xprime: false, full_pw: true, full_pw_dim: 1, check fft"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix + int(nx/2) - nx + 1; - double vy = iy + int(ny/2) - ny + 1; - double vz = iz + int(nz/2) - nz + 1; - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix + int(nx / 2) - nx + 1; + double vy = iy + int(ny / 2) - ny + 1; + double vz = iz + int(nz / 2) - nz + 1; + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut || full_pw) { - tmp[ix*ny*nz + iy*nz + iz] = 1.0/(modulus+1); - if(vy > 0) tmp[ix*ny*nz + iy*nz + iz]+=ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); - else if(vy < 0) tmp[ix*ny*nz + iy*nz + iz]-=ModuleBase::IMAG_UNIT / (std::abs(-v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] = 1.0 / (modulus + 1); + if (vy > 0) + tmp[ix * ny * nz + iy * nz + iz] += ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); + else if (vy < 0) + tmp[ix * ny * nz + iy * nz + iz] -= ModuleBase::IMAG_UNIT / (std::abs(-v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1); - if(pwtest.gdirect[ig].y > 0) + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1); + if (pwtest.gdirect[ig].y > 0) { - rhog[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); + rhog[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); } - } - double * rhor = new double [nrxx]; + } + double* rhor = new double[nrxx]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npw]; - complex * rhofgr = new complex [nmaxgr]; - complex * rhofgout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + complex* rhofg = new complex[npw]; + complex* rhofgr = new complex[nmaxgr]; + complex* rhofgout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhofg[ig] = 1.0/(pwtest.gg[ig]+1); - rhofgr[ig] = 1.0/(pwtest.gg[ig]+1); - if(pwtest.gdirect[ig].y > 0) + rhofg[ig] = 1.0 / (pwtest.gg[ig] + 1); + rhofgr[ig] = 1.0 / (pwtest.gg[ig] + 1); + if (pwtest.gdirect[ig].y > 0) { - rhofg[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhofgr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); + rhofg[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhofgr[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); } - } - float * rhofr = new float [nrxx]; + } + float* rhofr = new float[nrxx]; #endif - - pwtest.recip2real(rhog,rhor);//check out-of-place transform - pwtest.recip2real(rhogr,(double*)rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor); // check out-of-place transform + + pwtest.recip2real(rhogr, (double*)rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.recip2real(rhofg,rhofr);//check out-of-place transform + pwtest.recip2real(rhofg, rhofr); // check out-of-place transform - pwtest.recip2real(rhofgr,(float*)rhofgr);//check in-place transform + pwtest.recip2real(rhofgr, (float*)rhofgr); // check in-place transform #endif int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz],1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((double*)rhogr)[ixy*nplane+iz],1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz], 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((double*)rhogr)[ixy * nplane + iz], 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz],1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((float*)rhofgr)[ixy*nplane+iz],1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz], 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((float*)rhofgr)[ixy * nplane + iz], 1e-4); #endif } } - - - pwtest.real2recip(rhor,rhogout);//check out-of-place transform - pwtest.real2recip((double*)rhogr,rhogr);//check in-place transform + pwtest.real2recip(rhor, rhogout); // check out-of-place transform + + pwtest.real2recip((double*)rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.real2recip(rhofr,rhofgout);//check out-of-place transform + pwtest.real2recip(rhofr, rhofgout); // check out-of-place transform - pwtest.real2recip((float*)rhofgr,rhofgr);//check in-place transform + pwtest.real2recip((float*)rhofgr, rhofgr); // check in-place transform #endif - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-4); - EXPECT_NEAR(rhofgr[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofgr[ig].imag(),rhofgout[ig].imag(),1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-4); + EXPECT_NEAR(rhofgr[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofgr[ig].imag(), rhofgout[ig].imag(), 1e-4); #endif } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; - delete [] rhofr; - delete [] rhofgr; + delete[] rhofg; + delete[] rhofgout; + delete[] rhofr; + delete[] rhofgr; fftwf_cleanup(); #endif } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test6-4-1.cpp b/source/module_basis/module_pw/test/test6-4-1.cpp index 646c662399..bb9eb6cc93 100644 --- a/source/module_basis/module_pw/test/test6-4-1.cpp +++ b/source/module_basis/module_pw/test/test6-4-1.cpp @@ -3,21 +3,23 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test6_4_1) +TEST_F(PWTEST, test6_4_1) { - cout<<"dividemthd 2, gamma_only: off, xprime: false, full_pw: true, full_pw_dim: 1, check fft between complex and complex"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix + int(nx/2) - nx + 1; - double vy = iy + int(ny/2) - ny + 1; - double vz = iz + int(nz/2) - nz + 1; - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix + int(nx / 2) - nx + 1; + double vy = iy + int(ny / 2) - ny + 1; + double vz = iz + int(nz / 2) - nz + 1; + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut || full_pw) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulus+1) + ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] + = 1.0 / (modulus + 1) + ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhor = new complex [nrxx]; + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhor = new complex[nrxx]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npw]; - complex * rhofgr = new complex [nmaxgr]; - complex * rhofgout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + complex* rhofg = new complex[npw]; + complex* rhofgr = new complex[nmaxgr]; + complex* rhofgout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhofg[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhofgr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhofr = new complex [nrxx]; + rhofg[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhofgr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhofr = new complex[nrxx]; #endif - - pwtest.recip2real(rhog,rhor);//check out-of-place transform - pwtest.recip2real(rhogr,rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor); // check out-of-place transform + + pwtest.recip2real(rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.recip2real(rhofg,rhofr);//check out-of-place transform + pwtest.recip2real(rhofg, rhofr); // check out-of-place transform - pwtest.recip2real(rhofgr,rhofgr);//check in-place transform + pwtest.recip2real(rhofgr, rhofgr); // check in-place transform #endif int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhor[ixy*nplane+iz].imag(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhogr[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhogr[ixy*nplane+iz].imag(),1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhor[ixy * nplane + iz].imag(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhogr[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhogr[ixy * nplane + iz].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofr[ixy*nplane+iz].imag(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofgr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofgr[ixy*nplane+iz].imag(),1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofr[ixy * nplane + iz].imag(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofgr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofgr[ixy * nplane + iz].imag(), 1e-4); #endif } } - - - pwtest.real2recip(rhor,rhogout);//check out-of-place transform + pwtest.real2recip(rhor, rhogout); // check out-of-place transform - pwtest.real2recip(rhogr,rhogr);//check in-place transform + pwtest.real2recip(rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.real2recip(rhofr,rhofgout);//check out-of-place transform + pwtest.real2recip(rhofr, rhofgout); // check out-of-place transform - pwtest.real2recip(rhofgr,rhofgr);//check in-place transform + pwtest.real2recip(rhofgr, rhofgr); // check in-place transform #endif - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-4); - EXPECT_NEAR(rhofgr[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofgr[ig].imag(),rhofgout[ig].imag(),1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-4); + EXPECT_NEAR(rhofgr[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofgr[ig].imag(), rhofgout[ig].imag(), 1e-4); #endif } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; - delete [] rhofr; - delete [] rhofgr; + delete[] rhofg; + delete[] rhofgout; + delete[] rhofr; + delete[] rhofgr; fftwf_cleanup(); #endif } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test6-4-2.cpp b/source/module_basis/module_pw/test/test6-4-2.cpp index 3e8531bdb8..00d1a16b2d 100644 --- a/source/module_basis/module_pw/test/test6-4-2.cpp +++ b/source/module_basis/module_pw/test/test6-4-2.cpp @@ -3,21 +3,23 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test6_4_2) +TEST_F(PWTEST, test6_4_2) { - cout<<"dividemthd 2, gamma_only: off, xprime: false, full_pw: true, full_pw_dim: 2, check fft between complex and complex"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix + int(nx/2) - nx + 1; - double vy = iy + int(ny/2) - ny + 1; - double vz = iz + int(nz/2) - nz + 1; - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix + int(nx / 2) - nx + 1; + double vy = iy + int(ny / 2) - ny + 1; + double vz = iz + int(nz / 2) - nz + 1; + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut || full_pw) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulus+1) + ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] + = 1.0 / (modulus + 1) + ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g((double(int(nx/2))-1.)/nx, (double(int(ny/2))-1.)/ny, (double(int(nz/2))-1.)/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g((double(int(nx / 2)) - 1.) / nx, + (double(int(ny / 2)) - 1.) / ny, + (double(int(nz / 2)) - 1.) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhor = new complex [nrxx]; + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhor = new complex[nrxx]; #ifdef __ENABLE_FLOAT_FFTW - complex * rhofg = new complex [npw]; - complex * rhofgr = new complex [nmaxgr]; - complex * rhofgout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + complex* rhofg = new complex[npw]; + complex* rhofgr = new complex[nmaxgr]; + complex* rhofgout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhofg[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhofgr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhofr = new complex [nrxx]; + rhofg[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhofgr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhofr = new complex[nrxx]; #endif - - pwtest.recip2real(rhog,rhor);//check out-of-place transform - pwtest.recip2real(rhogr,rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor); // check out-of-place transform + + pwtest.recip2real(rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.recip2real(rhofg,rhofr);//check out-of-place transform + pwtest.recip2real(rhofg, rhofr); // check out-of-place transform - pwtest.recip2real(rhofgr,rhofgr);//check in-place transform + pwtest.recip2real(rhofgr, rhofgr); // check in-place transform #endif int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhor[ixy*nplane+iz].imag(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhogr[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhogr[ixy*nplane+iz].imag(),1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhor[ixy * nplane + iz].imag(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhogr[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhogr[ixy * nplane + iz].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofr[ixy*nplane+iz].imag(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhofgr[ixy*nplane+iz].real(),1e-4); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhofgr[ixy*nplane+iz].imag(),1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofr[ixy * nplane + iz].imag(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhofgr[ixy * nplane + iz].real(), 1e-4); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhofgr[ixy * nplane + iz].imag(), 1e-4); #endif } } - - - pwtest.real2recip(rhor,rhogout);//check out-of-place transform + pwtest.real2recip(rhor, rhogout); // check out-of-place transform - pwtest.real2recip(rhogr,rhogr);//check in-place transform + pwtest.real2recip(rhogr, rhogr); // check in-place transform #ifdef __ENABLE_FLOAT_FFTW - pwtest.real2recip(rhofr,rhofgout);//check out-of-place transform + pwtest.real2recip(rhofr, rhofgout); // check out-of-place transform - pwtest.real2recip(rhofgr,rhofgr);//check in-place transform + pwtest.real2recip(rhofgr, rhofgr); // check in-place transform #endif - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); #ifdef __ENABLE_FLOAT_FFTW - EXPECT_NEAR(rhofg[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofg[ig].imag(),rhofgout[ig].imag(),1e-4); - EXPECT_NEAR(rhofgr[ig].real(),rhofgout[ig].real(),1e-4); - EXPECT_NEAR(rhofgr[ig].imag(),rhofgout[ig].imag(),1e-4); + EXPECT_NEAR(rhofg[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofg[ig].imag(), rhofgout[ig].imag(), 1e-4); + EXPECT_NEAR(rhofgr[ig].real(), rhofgout[ig].real(), 1e-4); + EXPECT_NEAR(rhofgr[ig].imag(), rhofgout[ig].imag(), 1e-4); #endif } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW - delete [] rhofg; - delete [] rhofgout; - delete [] rhofr; - delete [] rhofgr; + delete[] rhofg; + delete[] rhofgout; + delete[] rhofr; + delete[] rhofgr; fftwf_cleanup(); #endif } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test7-1.cpp b/source/module_basis/module_pw/test/test7-1.cpp index 7ec6630061..11cc630494 100644 --- a/source/module_basis/module_pw/test/test7-1.cpp +++ b/source/module_basis/module_pw/test/test7-1.cpp @@ -1,20 +1,22 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test7_1) +TEST_F(PWTEST, test7_1) { - cout<<"dividemthd 1, gamma_only: on, xprime: true, full_pw: true, full_pw_dim: 0, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -186,20 +185,23 @@ TEST_F(PWTEST,test7_1) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); + } + for (int igg = 1; igg < pwtest.ngg; ++igg) + { + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + if (pwtest.ig_gge0 >= 0) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test7-2-1.cpp b/source/module_basis/module_pw/test/test7-2-1.cpp index d79768285c..5db0f6fe36 100644 --- a/source/module_basis/module_pw/test/test7-2-1.cpp +++ b/source/module_basis/module_pw/test/test7-2-1.cpp @@ -3,21 +3,21 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test7_2_1) +TEST_F(PWTEST, test7_2_1) { - cout<<"dividemthd 1, gamma_only: on, xprime: true, full_pw: true, full_pw_dim: 1, check fft"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix + int(nx/2) - nx + 1; - double vy = iy + int(ny/2) - ny + 1; - double vz = iz + int(nz/2) - nz + 1; - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix + int(nx / 2) - nx + 1; + double vy = iy + int(ny / 2) - ny + 1; + double vz = iz + int(nz / 2) - nz + 1; + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut || full_pw) { - tmp[ix*ny*nz + iy*nz + iz] = 1.0/(modulus+1); - if(vx > 0) tmp[ix*ny*nz + iy*nz + iz]+=ModuleBase::IMAG_UNIT / (std::abs(v.y+1) + 1); - else if(vx < 0) tmp[ix*ny*nz + iy*nz + iz]-=ModuleBase::IMAG_UNIT / (std::abs(-v.y+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] = 1.0 / (modulus + 1); + if (vx > 0) + tmp[ix * ny * nz + iy * nz + iz] += ModuleBase::IMAG_UNIT / (std::abs(v.y + 1) + 1); + else if (vx < 0) + tmp[ix * ny * nz + iy * nz + iz] -= ModuleBase::IMAG_UNIT / (std::abs(-v.y + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1); - if(pwtest.gdirect[ig].x > 0) + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1); + if (pwtest.gdirect[ig].x > 0) { - rhog[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y+1) + 1); - rhogr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y+1) + 1); + rhog[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y + 1) + 1); + rhogr[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y + 1) + 1); } - } - double * rhor = new double [nrxx]; + } + double* rhor = new double[nrxx]; ModuleBase::GlobalFunc::ZEROS(rhor, nrxx); - pwtest.recip2real(rhog,rhor,true,1.0);//check out-of-place transform // test add fft - - pwtest.recip2real(rhogr,(double*)rhogr);//check in-place transform - + pwtest.recip2real(rhog, rhor, true, 1.0); // check out-of-place transform // test add fft + pwtest.recip2real(rhogr, (double*)rhogr); // check in-place transform int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz],1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((double*)rhogr)[ixy*nplane+iz],1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz], 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((double*)rhogr)[ixy * nplane + iz], 1e-6); } } ModuleBase::GlobalFunc::ZEROS(rhogout, npw); - pwtest.real2recip(rhor,rhogout,true,1.0);//check out-of-place transform + pwtest.real2recip(rhor, rhogout, true, 1.0); // check out-of-place transform - pwtest.real2recip((double*)rhogr,rhogr);//check in-place transform + pwtest.real2recip((double*)rhogr, rhogr); // check in-place transform - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW diff --git a/source/module_basis/module_pw/test/test7-3-1.cpp b/source/module_basis/module_pw/test/test7-3-1.cpp index 7970368d74..e7cd987333 100644 --- a/source/module_basis/module_pw/test/test7-3-1.cpp +++ b/source/module_basis/module_pw/test/test7-3-1.cpp @@ -3,21 +3,23 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test7_3_1) +TEST_F(PWTEST, test7_3_1) { - cout<<"dividemthd 1, gamma_only: off, xprime: true, full_pw: true, full_pw_dim: 1, check fft between complex and complex, reset ggecut to latecut"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix + int(nx/2) - nx + 1; - double vy = iy + int(ny/2) - ny + 1; - double vz = iz + int(nz/2) - nz + 1; - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix + int(nx / 2) - nx + 1; + double vy = iy + int(ny / 2) - ny + 1; + double vz = iz + int(nz / 2) - nz + 1; + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut || full_pw) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulus+1) + ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] + = 1.0 / (modulus + 1) + ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhor = new complex [nrxx]; + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhor = new complex[nrxx]; ModuleBase::GlobalFunc::ZEROS(rhor, nrxx); - - pwtest.recip2real(rhog,rhor);//check out-of-place transform - pwtest.recip2real(rhogr,rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor); // check out-of-place transform + + pwtest.recip2real(rhogr, rhogr); // check in-place transform int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhor[ixy*nplane+iz].imag(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhogr[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhogr[ixy*nplane+iz].imag(),1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhor[ixy * nplane + iz].imag(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhogr[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhogr[ixy * nplane + iz].imag(), 1e-6); } } - ModuleBase::GlobalFunc::ZEROS(rhogout, npw); - pwtest.real2recip(rhor,rhogout,true, 1);//check out-of-place transform + pwtest.real2recip(rhor, rhogout, true, 1); // check out-of-place transform - pwtest.real2recip(rhogr,rhogr);//check in-place transform + pwtest.real2recip(rhogr, rhogr); // check in-place transform - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW diff --git a/source/module_basis/module_pw/test/test7-3-2.cpp b/source/module_basis/module_pw/test/test7-3-2.cpp index 279efb21ce..1140e7b656 100644 --- a/source/module_basis/module_pw/test/test7-3-2.cpp +++ b/source/module_basis/module_pw/test/test7-3-2.cpp @@ -3,21 +3,23 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test7_3_2) +TEST_F(PWTEST, test7_3_2) { - cout<<"dividemthd 1, gamma_only: off, xprime: true, full_pw: true, full_pw_dim: 2, check fft between complex and complex, reset ggecut to latecut"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix + int(nx/2) - nx + 1; - double vy = iy + int(ny/2) - ny + 1; - double vz = iz + int(nz/2) - nz + 1; - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix + int(nx / 2) - nx + 1; + double vy = iy + int(ny / 2) - ny + 1; + double vz = iz + int(nz / 2) - nz + 1; + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut || full_pw) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulus+1) + ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] + = 1.0 / (modulus + 1) + ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); - ModuleBase::Vector3 delta_g((double(int(nx/2))-1.)/nx, (double(int(ny/2))-1.)/ny, (double(int(nz/2))-1.)/nz); - // ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + ModuleBase::Vector3 delta_g((double(int(nx / 2)) - 1.) / nx, + (double(int(ny / 2)) - 1.) / ny, + (double(int(nz / 2)) - 1.) / nz); + // ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhor = new complex [nrxx]; + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhor = new complex[nrxx]; ModuleBase::GlobalFunc::ZEROS(rhor, nrxx); - - pwtest.recip2real(rhog,rhor);//check out-of-place transform - pwtest.recip2real(rhogr,rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor); // check out-of-place transform + + pwtest.recip2real(rhogr, rhogr); // check in-place transform int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhor[ixy*nplane+iz].imag(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhogr[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhogr[ixy*nplane+iz].imag(),1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhor[ixy * nplane + iz].imag(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhogr[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhogr[ixy * nplane + iz].imag(), 1e-6); } } - ModuleBase::GlobalFunc::ZEROS(rhogout, npw); - pwtest.real2recip(rhor,rhogout,true, 1);//check out-of-place transform + pwtest.real2recip(rhor, rhogout, true, 1); // check out-of-place transform - pwtest.real2recip(rhogr,rhogr);//check in-place transform + pwtest.real2recip(rhogr, rhogr); // check in-place transform - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW diff --git a/source/module_basis/module_pw/test/test8-1.cpp b/source/module_basis/module_pw/test/test8-1.cpp index ee7e8dc985..03b2937b66 100644 --- a/source/module_basis/module_pw/test/test8-1.cpp +++ b/source/module_basis/module_pw/test/test8-1.cpp @@ -1,20 +1,22 @@ #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/global_function.h" -#include "module_base/constants.h" #include "pw_test.h" -extern int nproc_in_pool,rank_in_pool; +#include "source_base/constants.h" +#include "source_base/global_function.h" +extern int nproc_in_pool, rank_in_pool; using namespace std; -TEST_F(PWTEST,test8_1) +TEST_F(PWTEST, test8_1) { - cout<<"dividemthd 2, gamma_only: on, xprime: true, full_pw: true, full_pw_dim: 0, check gcar,gdirect,gg,istot2ixy,ig2isz"< f; f.x = ix; f.y = iy; f.z = iz; - if(iz >= int(pwtest.nz/2) +1) f.z -= pwtest.nz; - if(ix >= int(pwtest.nx/2) +1) f.x -= pwtest.nx; + if (iz >= int(pwtest.nz / 2) + 1) + f.z -= pwtest.nz; + if (ix >= int(pwtest.nx / 2) + 1) + f.x -= pwtest.nx; double modulus = f * (GGT * f); if (modulus <= ggecut) { - EXPECT_EQ(tmpx[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.x)); - EXPECT_EQ(tmpy[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.y)); - EXPECT_EQ(tmpz[iz + iy*pwtest.fftnz + ix*pwtest.fftny*pwtest.fftnz], int(f.z)); + EXPECT_EQ(tmpx[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.x)); + EXPECT_EQ(tmpy[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.y)); + EXPECT_EQ(tmpz[iz + iy * pwtest.fftnz + ix * pwtest.fftny * pwtest.fftnz], int(f.z)); } - } } } } - for(int ig = 0 ;ig < pwtest.npw ; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { ModuleBase::Vector3 f; f.x = pwtest.gdirect[ig].x; @@ -186,20 +185,23 @@ TEST_F(PWTEST,test8_1) f.z = pwtest.gdirect[ig].z; ModuleBase::Vector3 gcar; gcar = f * G; - double modulus = f*GGT*f; - EXPECT_NEAR(gcar.x,pwtest.gcar[ig].x,1e-6); - EXPECT_NEAR(gcar.y,pwtest.gcar[ig].y,1e-6); - EXPECT_NEAR(gcar.z,pwtest.gcar[ig].z,1e-6); - EXPECT_NEAR(modulus,pwtest.gg[ig],1e-6); - EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]],1e-8); + double modulus = f * GGT * f; + EXPECT_NEAR(gcar.x, pwtest.gcar[ig].x, 1e-6); + EXPECT_NEAR(gcar.y, pwtest.gcar[ig].y, 1e-6); + EXPECT_NEAR(gcar.z, pwtest.gcar[ig].z, 1e-6); + EXPECT_NEAR(modulus, pwtest.gg[ig], 1e-6); + EXPECT_NEAR(pwtest.gg[ig], pwtest.gg_uniq[pwtest.ig2igg[ig]], 1e-8); + } + for (int igg = 1; igg < pwtest.ngg; ++igg) + { + EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg - 1]); } - for(int igg = 1 ; igg < pwtest.ngg ; ++igg) + if (pwtest.ig_gge0 >= 0) { - EXPECT_GT(pwtest.gg_uniq[igg], pwtest.gg_uniq[igg-1]); + EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8); } - if(pwtest.ig_gge0 >= 0) {EXPECT_NEAR(0.0, pwtest.gg[pwtest.ig_gge0], 1e-8);} - delete [] startnst; - delete [] tmpx; - delete [] tmpy; - delete [] tmpz; + delete[] startnst; + delete[] tmpx; + delete[] tmpy; + delete[] tmpz; } \ No newline at end of file diff --git a/source/module_basis/module_pw/test/test8-2-1.cpp b/source/module_basis/module_pw/test/test8-2-1.cpp index 351c77e835..98753ad773 100644 --- a/source/module_basis/module_pw/test/test8-2-1.cpp +++ b/source/module_basis/module_pw/test/test8-2-1.cpp @@ -3,21 +3,21 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test8_2_1) +TEST_F(PWTEST, test8_2_1) { - cout<<"dividemthd 2, gamma_only: on, xprime: true, full_pw: true, full_pw_dim: 1, check fft"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix + int(nx/2) - nx + 1; - double vy = iy + int(ny/2) - ny + 1; - double vz = iz + int(nz/2) - nz + 1; - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix + int(nx / 2) - nx + 1; + double vy = iy + int(ny / 2) - ny + 1; + double vz = iz + int(nz / 2) - nz + 1; + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut || full_pw) { - tmp[ix*ny*nz + iy*nz + iz] = 1.0/(modulus+1); - if(vx > 0) tmp[ix*ny*nz + iy*nz + iz]+=ModuleBase::IMAG_UNIT / (std::abs(v.y+1) + 1); - else if(vx < 0) tmp[ix*ny*nz + iy*nz + iz]-=ModuleBase::IMAG_UNIT / (std::abs(-v.y+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] = 1.0 / (modulus + 1); + if (vx > 0) + tmp[ix * ny * nz + iy * nz + iz] += ModuleBase::IMAG_UNIT / (std::abs(v.y + 1) + 1); + else if (vx < 0) + tmp[ix * ny * nz + iy * nz + iz] -= ModuleBase::IMAG_UNIT / (std::abs(-v.y + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1); + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1); double a = rhog[ig].real(); - if(pwtest.gdirect[ig].x > 0) + if (pwtest.gdirect[ig].x > 0) { - rhog[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y+1) + 1); - rhogr[ig]+=ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y+1) + 1); + rhog[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y + 1) + 1); + rhogr[ig] += ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].y + 1) + 1); } - } - double * rhor = new double [nrxx]; + } + double* rhor = new double[nrxx]; ModuleBase::GlobalFunc::ZEROS(rhor, nrxx); - pwtest.recip2real(rhog,rhor,true,1);//check out-of-place transform // test add fft - - pwtest.recip2real(rhogr,(double*)rhogr);//check in-place transform - + pwtest.recip2real(rhog, rhor, true, 1); // check out-of-place transform // test add fft + pwtest.recip2real(rhogr, (double*)rhogr); // check in-place transform int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz],1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),((double*)rhogr)[ixy*nplane+iz],1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz], 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), ((double*)rhogr)[ixy * nplane + iz], 1e-6); } } ModuleBase::GlobalFunc::ZEROS(rhogout, npw); - pwtest.real2recip(rhor,rhogout,true,1);//check out-of-place transform + pwtest.real2recip(rhor, rhogout, true, 1); // check out-of-place transform - pwtest.real2recip((double*)rhogr,rhogr);//check in-place transform + pwtest.real2recip((double*)rhogr, rhogr); // check in-place transform - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW diff --git a/source/module_basis/module_pw/test/test8-3-1.cpp b/source/module_basis/module_pw/test/test8-3-1.cpp index 6dbbb73f7c..b8a847d6b3 100644 --- a/source/module_basis/module_pw/test/test8-3-1.cpp +++ b/source/module_basis/module_pw/test/test8-3-1.cpp @@ -3,21 +3,23 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test8_3_1) +TEST_F(PWTEST, test8_3_1) { - cout<<"dividemthd 2, gamma_only: off, xprime: true, full_pw: true, full_pw_dim: 1, check fft between complex and complex, reset ggecut to latecut"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix + int(nx/2) - nx + 1; - double vy = iy + int(ny/2) - ny + 1; - double vz = iz + int(nz/2) - nz + 1; - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix + int(nx / 2) - nx + 1; + double vy = iy + int(ny / 2) - ny + 1; + double vz = iz + int(nz / 2) - nz + 1; + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut || full_pw) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulus+1) + ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] + = 1.0 / (modulus + 1) + ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - - ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + + ModuleBase::Vector3 delta_g(double(int(nx / 2)) / nx, + double(int(ny / 2)) / ny, + double(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhor = new complex [nrxx]; + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhor = new complex[nrxx]; ModuleBase::GlobalFunc::ZEROS(rhor, nrxx); - - pwtest.recip2real(rhog,rhor);//check out-of-place transform - pwtest.recip2real(rhogr,rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor); // check out-of-place transform + + pwtest.recip2real(rhogr, rhogr); // check in-place transform int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhor[ixy*nplane+iz].imag(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhogr[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhogr[ixy*nplane+iz].imag(),1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhor[ixy * nplane + iz].imag(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhogr[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhogr[ixy * nplane + iz].imag(), 1e-6); } } - ModuleBase::GlobalFunc::ZEROS(rhogout, npw); - pwtest.real2recip(rhor,rhogout,true, 1);//check out-of-place transform + pwtest.real2recip(rhor, rhogout, true, 1); // check out-of-place transform - pwtest.real2recip(rhogr,rhogr);//check in-place transform + pwtest.real2recip(rhogr, rhogr); // check in-place transform - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW diff --git a/source/module_basis/module_pw/test/test8-3-2.cpp b/source/module_basis/module_pw/test/test8-3-2.cpp index e60d878f6c..5a0153f02c 100644 --- a/source/module_basis/module_pw/test/test8-3-2.cpp +++ b/source/module_basis/module_pw/test/test8-3-2.cpp @@ -3,21 +3,23 @@ //--------------------------------------------- #include "../pw_basis.h" #ifdef __MPI -#include "test_tool.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" +#include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" using namespace std; -TEST_F(PWTEST,test8_3_2) +TEST_F(PWTEST, test8_3_2) { - cout<<"dividemthd 2, gamma_only: off, xprime: true, full_pw: true, full_pw_dim: 2, check fft between complex and complex, reset ggecut to latecut"< *tmp = new complex [nx*ny*nz]; - if(rank_in_pool == 0) + G = GT.Transpose(); + GGT = G * GT; + complex* tmp = new complex[nx * ny * nz]; + if (rank_in_pool == 0) { - for(int ix = 0 ; ix < nx ; ++ix) + for (int ix = 0; ix < nx; ++ix) { - for(int iy = 0 ; iy < ny ; ++iy) + for (int iy = 0; iy < ny; ++iy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { - tmp[ix*ny*nz + iy*nz + iz]=0.0; - double vx = ix + int(nx/2) - nx + 1; - double vy = iy + int(ny/2) - ny + 1; - double vz = iz + int(nz/2) - nz + 1; - ModuleBase::Vector3 v(vx,vy,vz); + tmp[ix * ny * nz + iy * nz + iz] = 0.0; + double vx = ix + int(nx / 2) - nx + 1; + double vy = iy + int(ny / 2) - ny + 1; + double vz = iz + int(nz / 2) - nz + 1; + ModuleBase::Vector3 v(vx, vy, vz); double modulus = v * (GGT * v); if (modulus <= ggecut || full_pw) { - tmp[ix*ny*nz + iy*nz + iz]=1.0/(modulus+1) + ModuleBase::IMAG_UNIT / (std::abs(v.x+1) + 1); + tmp[ix * ny * nz + iy * nz + iz] + = 1.0 / (modulus + 1) + ModuleBase::IMAG_UNIT / (std::abs(v.x + 1) + 1); } } - } + } } - fftw_plan pp = fftw_plan_dft_3d(nx,ny,nz,(fftw_complex *) tmp, (fftw_complex *) tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); + fftw_plan pp + = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); - ModuleBase::Vector3 delta_g((double(int(nx/2))-1.)/nx, (double(int(ny/2))-1.)/ny, (double(int(nz/2))-1.)/nz); - // ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + ModuleBase::Vector3 delta_g((double(int(nx / 2)) - 1.) / nx, + (double(int(ny / 2)) - 1.) / ny, + (double(int(nz / 2)) - 1.) / nz); + // ModuleBase::Vector3 delta_g(double(int(nx/2))/nx, double(int(ny/2))/ny, double(int(nz/2))/nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nz ; ++iz) + for (int iz = 0; iz < nz; ++iz) { int ix = ixy / ny; int iy = ixy % ny; ModuleBase::Vector3 real_r(ix, iy, iz); double phase_im = -delta_g * real_r; - complex phase(0,ModuleBase::TWO_PI * phase_im); + complex phase(0, ModuleBase::TWO_PI * phase_im); tmp[ixy * nz + iz] *= exp(phase); } } } #ifdef __MPI - MPI_Bcast(tmp,2*nx*ny*nz,MPI_DOUBLE,0,POOL_WORLD); + MPI_Bcast(tmp, 2 * nx * ny * nz, MPI_DOUBLE, 0, POOL_WORLD); #endif - - complex * rhog = new complex [npw]; - complex * rhogr = new complex [nmaxgr]; - complex * rhogout = new complex [npw]; - for(int ig = 0 ; ig < npw ; ++ig) + + complex* rhog = new complex[npw]; + complex* rhogr = new complex[nmaxgr]; + complex* rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) { - rhog[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - rhogr[ig] = 1.0/(pwtest.gg[ig]+1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x+1) + 1); - } - complex * rhor = new complex [nrxx]; + rhog[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + rhogr[ig] = 1.0 / (pwtest.gg[ig] + 1) + ModuleBase::IMAG_UNIT / (std::abs(pwtest.gdirect[ig].x + 1) + 1); + } + complex* rhor = new complex[nrxx]; ModuleBase::GlobalFunc::ZEROS(rhor, nrxx); - - pwtest.recip2real(rhog,rhor);//check out-of-place transform - pwtest.recip2real(rhogr,rhogr);//check in-place transform + pwtest.recip2real(rhog, rhor); // check out-of-place transform + + pwtest.recip2real(rhogr, rhogr); // check in-place transform int startiz = pwtest.startz_current; - for(int ixy = 0 ; ixy < nx * ny ; ++ixy) + for (int ixy = 0; ixy < nx * ny; ++ixy) { - for(int iz = 0 ; iz < nplane ; ++iz) + for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhor[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhor[ixy*nplane+iz].imag(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(),rhogr[ixy*nplane+iz].real(),1e-6); - EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(),rhogr[ixy*nplane+iz].imag(),1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhor[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhor[ixy * nplane + iz].imag(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].real(), rhogr[ixy * nplane + iz].real(), 1e-6); + EXPECT_NEAR(tmp[ixy * nz + startiz + iz].imag(), rhogr[ixy * nplane + iz].imag(), 1e-6); } } - ModuleBase::GlobalFunc::ZEROS(rhogout, npw); - pwtest.real2recip(rhor,rhogout,true, 1);//check out-of-place transform + pwtest.real2recip(rhor, rhogout, true, 1); // check out-of-place transform - pwtest.real2recip(rhogr,rhogr);//check in-place transform + pwtest.real2recip(rhogr, rhogr); // check in-place transform - for(int ig = 0 ; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(rhog[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhog[ig].imag(),rhogout[ig].imag(),1e-6); - EXPECT_NEAR(rhogr[ig].real(),rhogout[ig].real(),1e-6); - EXPECT_NEAR(rhogr[ig].imag(),rhogout[ig].imag(),1e-6); + EXPECT_NEAR(rhog[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhog[ig].imag(), rhogout[ig].imag(), 1e-6); + EXPECT_NEAR(rhogr[ig].real(), rhogout[ig].real(), 1e-6); + EXPECT_NEAR(rhogr[ig].imag(), rhogout[ig].imag(), 1e-6); } - - delete [] rhog; - delete [] rhogout; - delete [] rhor; - delete [] tmp; - delete [] rhogr; + + delete[] rhog; + delete[] rhogout; + delete[] rhor; + delete[] tmp; + delete[] rhogr; fftw_cleanup(); #ifdef __ENABLE_FLOAT_FFTW diff --git a/source/module_basis/module_pw/test/test_sup.cpp b/source/module_basis/module_pw/test/test_sup.cpp index c3a10a85fc..fdc5b3a8bd 100644 --- a/source/module_basis/module_pw/test/test_sup.cpp +++ b/source/module_basis/module_pw/test/test_sup.cpp @@ -1,12 +1,12 @@ #include "../pw_basis.h" #ifdef __MPI -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" #include "test_tool.h" #endif -#include "module_base/constants.h" -#include "module_base/global_function.h" #include "pw_test.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" extern int nproc_in_pool, rank_in_pool; using namespace std; @@ -60,34 +60,30 @@ TEST_F(PWTEST, test_sup) const int nz_ref = 15; // some results for different number of processors - int npw_per_ref[12][12] = { - {1751}, - {874, 877}, - {583, 584, 584}, - {439, 436, 438, 438}, - {351, 350, 350, 350, 350}, - {293, 293, 293, 291, 291, 290}, - {249, 251, 251, 251, 251, 249, 249}, - {221, 218, 220, 218, 218, 218, 218, 220}, - {196, 196, 196, 194, 194, 194, 194, 193, 194}, - {177, 176, 176, 176, 174, 174, 174, 176, 174, 174}, - {161, 161, 161, 159, 159, 158, 158, 158, 159, 158, 159}, - {147, 148, 148, 145, 146, 146, 145, 145, 145, 146, 145, 145} - }; - int nst_per_ref[12][12] = { - {161}, - {80, 81}, - {53, 54, 54}, - {41, 40, 40, 40}, - {33, 32, 32, 32, 32}, - {27, 27, 27, 27, 27, 26}, - {23, 23, 23, 23, 23, 23, 23}, - {21, 20, 20, 20, 20, 20, 20, 20}, - {18, 18, 18, 18, 18, 18, 18, 17, 18}, - {17, 16, 16, 16, 16, 16, 16, 16, 16, 16}, - {15, 15, 15, 15, 15, 14, 14, 14, 15, 14, 15}, - {13, 14, 14, 13, 14, 14, 13, 13, 13, 14, 13, 13} - }; + int npw_per_ref[12][12] = {{1751}, + {874, 877}, + {583, 584, 584}, + {439, 436, 438, 438}, + {351, 350, 350, 350, 350}, + {293, 293, 293, 291, 291, 290}, + {249, 251, 251, 251, 251, 249, 249}, + {221, 218, 220, 218, 218, 218, 218, 220}, + {196, 196, 196, 194, 194, 194, 194, 193, 194}, + {177, 176, 176, 176, 174, 174, 174, 176, 174, 174}, + {161, 161, 161, 159, 159, 158, 158, 158, 159, 158, 159}, + {147, 148, 148, 145, 146, 146, 145, 145, 145, 146, 145, 145}}; + int nst_per_ref[12][12] = {{161}, + {80, 81}, + {53, 54, 54}, + {41, 40, 40, 40}, + {33, 32, 32, 32, 32}, + {27, 27, 27, 27, 27, 26}, + {23, 23, 23, 23, 23, 23, 23}, + {21, 20, 20, 20, 20, 20, 20, 20}, + {18, 18, 18, 18, 18, 18, 18, 17, 18}, + {17, 16, 16, 16, 16, 16, 16, 16, 16, 16}, + {15, 15, 15, 15, 15, 14, 14, 14, 15, 14, 15}, + {13, 14, 14, 13, 14, 14, 13, 13, 13, 14, 13, 13}}; int* npw_per = nullptr; if (rank_in_pool == 0) { diff --git a/source/module_basis/module_pw/test_gpu/pw_basis_C2C.cpp b/source/module_basis/module_pw/test_gpu/pw_basis_C2C.cpp index 9ec1f00ce0..f342679f21 100644 --- a/source/module_basis/module_pw/test_gpu/pw_basis_C2C.cpp +++ b/source/module_basis/module_pw/test_gpu/pw_basis_C2C.cpp @@ -1,9 +1,9 @@ #include "cuda_runtime.h" #include "fftw3.h" -#include "module_base/module_device/device.h" -#include "module_base/vector3.h" #include "module_basis/module_pw/pw_basis.h" #include "module_basis/module_pw/pw_basis_k.h" +#include "source_base/module_device/device.h" +#include "source_base/vector3.h" #include #include @@ -75,104 +75,102 @@ class PW_BASIS_K_GPU_TEST : public ::testing::Test G = GT.Transpose(); GGT = G * GT; tmp = new complex[nx * ny * nz]; - if (rank_in_pool == 0) + if (rank_in_pool == 0) + { + for (int ix = 0; ix < nx; ++ix) { - for (int ix = 0; ix < nx; ++ix) + const T vx = ix - int(nx / 2); + for (int iy = 0; iy < ny; ++iy) { - const T vx = ix - int(nx / 2); - for (int iy = 0; iy < ny; ++iy) + const int offset = (ix * ny + iy) * nz; + const T vy = iy - int(ny / 2); + for (int iz = 0; iz < nz; ++iz) { - const int offset = (ix * ny + iy) * nz; - const T vy = iy - int(ny / 2); - for (int iz = 0; iz < nz; ++iz) + tmp[offset + iz] = 0.0; + T vz = iz - int(nz / 2); + ModuleBase::Vector3 v(vx, vy, vz); + T modulus = v * (GGT * v); + if (modulus <= ggecut) { - tmp[offset + iz] = 0.0; - T vz = iz - int(nz / 2); - ModuleBase::Vector3 v(vx, vy, vz); - T modulus = v * (GGT * v); - if (modulus <= ggecut) + tmp[offset + iz] = 1.0 / (modulus + 1); + if (vy > 0) + { + tmp[offset + iz] += std::complex(0, 1.0) / (std::abs(static_cast(v.x) + 1) + 1); + } + else if (vy < 0) { - tmp[offset + iz] = 1.0 / (modulus + 1); - if (vy > 0) - { - tmp[offset + iz] - += std::complex(0, 1.0) / (std::abs(static_cast(v.x) + 1) + 1); - } - else if (vy < 0) - { - tmp[offset + iz] - -= std::complex(0, 1.0) / (std::abs(-static_cast(v.x) + 1) + 1); - } + tmp[offset + iz] -= std::complex(0, 1.0) / (std::abs(-static_cast(v.x) + 1) + 1); } } } } - if (typeid(T) == typeid(double)) - { - fftw_plan pp = fftw_plan_dft_3d(nx, - ny, - nz, - (fftw_complex*)tmp, - (fftw_complex*)tmp, - FFTW_BACKWARD, - FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - } - else if (typeid(T) == typeid(float)) + } + if (typeid(T) == typeid(double)) + { + fftw_plan pp = fftw_plan_dft_3d(nx, + ny, + nz, + (fftw_complex*)tmp, + (fftw_complex*)tmp, + FFTW_BACKWARD, + FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + } + else if (typeid(T) == typeid(float)) + { + fftwf_plan pp = fftwf_plan_dft_3d(nx, + ny, + nz, + (fftwf_complex*)tmp, + (fftwf_complex*)tmp, + FFTW_BACKWARD, + FFTW_ESTIMATE); + fftwf_execute(pp); + fftwf_destroy_plan(pp); + } + ModuleBase::Vector3 delta_g(T(int(nx / 2)) / nx, T(int(ny / 2)) / ny, T(int(nz / 2)) / nz); + for (int ixy = 0; ixy < nx * ny; ++ixy) + { + const int ix = ixy / ny; + const int iy = ixy % ny; + for (int iz = 0; iz < nz; ++iz) { - fftwf_plan pp = fftwf_plan_dft_3d(nx, - ny, - nz, - (fftwf_complex*)tmp, - (fftwf_complex*)tmp, - FFTW_BACKWARD, - FFTW_ESTIMATE); - fftwf_execute(pp); - fftwf_destroy_plan(pp); + ModuleBase::Vector3 real_r(ix, iy, iz); + T phase_im = -delta_g * real_r; + complex phase(0, ModuleBase::TWO_PI * phase_im); + tmp[ixy * nz + iz] *= exp(phase); } - ModuleBase::Vector3 delta_g(T(int(nx / 2)) / nx, T(int(ny / 2)) / ny, T(int(nz / 2)) / nz); - for (int ixy = 0; ixy < nx * ny; ++ixy) + } + + h_rhog = new complex[npw]; + h_rhogout = new complex[npw]; + for (int ig = 0; ig < npw; ++ig) + { + h_rhog[ig] = 1.0 / (pwtest.gg[ig] + 1); + + if (pwtest.gdirect[ig].y > 0) { - const int ix = ixy / ny; - const int iy = ixy % ny; - for (int iz = 0; iz < nz; ++iz) - { - ModuleBase::Vector3 real_r(ix, iy, iz); - T phase_im = -delta_g * real_r; - complex phase(0, ModuleBase::TWO_PI * phase_im); - tmp[ixy * nz + iz] *= exp(phase); - } + h_rhog[ig] += std::complex(0, 1.0) / (std::abs(float(pwtest.gdirect[ig].x) + 1) + 1); } - - h_rhog = new complex[npw]; - h_rhogout = new complex[npw]; - for (int ig = 0; ig < npw; ++ig) + else if (pwtest.gdirect[ig].y < 0) { - h_rhog[ig] = 1.0 / (pwtest.gg[ig] + 1); - - if (pwtest.gdirect[ig].y > 0) - { - h_rhog[ig] += std::complex(0, 1.0) / (std::abs(float(pwtest.gdirect[ig].x) + 1) + 1); - } - else if (pwtest.gdirect[ig].y < 0) - { - h_rhog[ig] -= std::complex(0, 1.0) / (std::abs(float(-pwtest.gdirect[ig].x) + 1) + 1); - } + h_rhog[ig] -= std::complex(0, 1.0) / (std::abs(float(-pwtest.gdirect[ig].x) + 1) + 1); } + } - cudaMalloc((void**)&d_rhog, npw * sizeof(complex)); - cudaMalloc((void**)&d_rhor, nrxx * sizeof(complex)); - cudaMemcpy(d_rhog, h_rhog, npw * sizeof(complex), cudaMemcpyHostToDevice); + cudaMalloc((void**)&d_rhog, npw * sizeof(complex)); + cudaMalloc((void**)&d_rhor, nrxx * sizeof(complex)); + cudaMemcpy(d_rhog, h_rhog, npw * sizeof(complex), cudaMemcpyHostToDevice); - h_rhor = new complex[nrxx]; + h_rhor = new complex[nrxx]; - pwtest.recip_to_real, std::complex,base_device::DEVICE_GPU>(d_rhog, d_rhor); - cudaMemcpy(h_rhor, d_rhor, nrxx * sizeof(complex), cudaMemcpyDeviceToHost); + pwtest.recip_to_real, std::complex, base_device::DEVICE_GPU>(d_rhog, d_rhor); + cudaMemcpy(h_rhor, d_rhor, nrxx * sizeof(complex), cudaMemcpyDeviceToHost); - pwtest.real_to_recip, std::complex,base_device::DEVICE_GPU>(d_rhor, d_rhog); - cudaMemcpy(h_rhogout, d_rhog, npw * sizeof(complex), cudaMemcpyDeviceToHost); - } + pwtest.real_to_recip, std::complex, base_device::DEVICE_GPU>(d_rhor, d_rhog); + cudaMemcpy(h_rhogout, d_rhog, npw * sizeof(complex), cudaMemcpyDeviceToHost); + } } ModulePW::PW_Basis* access_pw() { @@ -191,8 +189,8 @@ class PW_BASIS_K_GPU_TEST : public ::testing::Test } }; -using MixedTypes = ::testing::Types, - TypePair >; +using MixedTypes + = ::testing::Types, TypePair>; TYPED_TEST_CASE(PW_BASIS_K_GPU_TEST, MixedTypes); diff --git a/source/module_basis/module_pw/test_gpu/pw_basis_C2R.cpp b/source/module_basis/module_pw/test_gpu/pw_basis_C2R.cpp index 398805c2ef..e37d8b2673 100644 --- a/source/module_basis/module_pw/test_gpu/pw_basis_C2R.cpp +++ b/source/module_basis/module_pw/test_gpu/pw_basis_C2R.cpp @@ -1,8 +1,8 @@ #include "cuda_runtime.h" #include "fftw3.h" -#include "module_base/module_device/device.h" -#include "module_base/vector3.h" #include "module_basis/module_pw/pw_basis.h" +#include "source_base/module_device/device.h" +#include "source_base/vector3.h" #include #include @@ -34,7 +34,7 @@ class PW_BASIS_C2R_GPU_TEST : public ::testing::Test void init(ModulePW::PW_Basis& pwtest) { cout << "dividemthd 1, gamma_only: off, check fft between T and complex" << endl; - + ModuleBase::Matrix3 latvec(1, 1, 0, 0, 1, 1, 0, 0, 2); T wfcecut; T lat0 = 2.2; @@ -92,31 +92,41 @@ class PW_BASIS_C2R_GPU_TEST : public ::testing::Test tmp[offset + iz] = 1.0 / (modulus + 1); if (vy > 0) { - tmp[offset + iz] += std::complex(0,1.0) / (std::abs(static_cast(v.x) + 1) + 1); + tmp[offset + iz] += std::complex(0, 1.0) / (std::abs(static_cast(v.x) + 1) + 1); } else if (vy < 0) { - tmp[offset + iz] -= std::complex(0,1.0) / (std::abs(-static_cast(v.x) + 1) + 1); + tmp[offset + iz] -= std::complex(0, 1.0) / (std::abs(-static_cast(v.x) + 1) + 1); } } } } } - if (typeid(T)==typeid(double)) + if (typeid(T) == typeid(double)) + { + fftw_plan pp = fftw_plan_dft_3d(nx, + ny, + nz, + (fftw_complex*)tmp, + (fftw_complex*)tmp, + FFTW_BACKWARD, + FFTW_ESTIMATE); + fftw_execute(pp); + fftw_destroy_plan(pp); + } + else if (typeid(T) == typeid(float)) { - fftw_plan pp - = fftw_plan_dft_3d(nx, ny, nz, (fftw_complex*)tmp, (fftw_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); - fftw_execute(pp); - fftw_destroy_plan(pp); - }else if (typeid(T)==typeid(float)){ - fftwf_plan pp - = fftwf_plan_dft_3d(nx, ny, nz, (fftwf_complex*)tmp, (fftwf_complex*)tmp, FFTW_BACKWARD, FFTW_ESTIMATE); + fftwf_plan pp = fftwf_plan_dft_3d(nx, + ny, + nz, + (fftwf_complex*)tmp, + (fftwf_complex*)tmp, + FFTW_BACKWARD, + FFTW_ESTIMATE); fftwf_execute(pp); fftwf_destroy_plan(pp); } - ModuleBase::Vector3 delta_g(T(int(nx / 2)) / nx, - T(int(ny / 2)) / ny, - T(int(nz / 2)) / nz); + ModuleBase::Vector3 delta_g(T(int(nx / 2)) / nx, T(int(ny / 2)) / ny, T(int(nz / 2)) / nz); for (int ixy = 0; ixy < nx * ny; ++ixy) { const int ix = ixy / ny; @@ -157,10 +167,8 @@ class PW_BASIS_C2R_GPU_TEST : public ::testing::Test pwtest.recip_to_real, T, base_device::DEVICE_GPU>(d_rhog, d_rhor); cudaMemcpy(h_rhor, d_rhor, nrxx * sizeof(T), cudaMemcpyDeviceToHost); - pwtest.real_to_recip,base_device::DEVICE_GPU>(d_rhor,d_rhog); - cudaMemcpy(h_rhogout,d_rhog,npw * sizeof(complex),cudaMemcpyDeviceToHost); - - + pwtest.real_to_recip, base_device::DEVICE_GPU>(d_rhor, d_rhog); + cudaMemcpy(h_rhogout, d_rhog, npw * sizeof(complex), cudaMemcpyDeviceToHost); } ModulePW::PW_Basis* access_pw() { @@ -179,9 +187,8 @@ class PW_BASIS_C2R_GPU_TEST : public ::testing::Test } }; -using MixedTypes = ::testing::Types, - TypePair - >; +using MixedTypes + = ::testing::Types, TypePair>; TYPED_TEST_CASE(PW_BASIS_C2R_GPU_TEST, MixedTypes); @@ -206,8 +213,7 @@ TYPED_TEST(PW_BASIS_C2R_GPU_TEST, Mixing) const int startz = ixy * nplane; for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(this->tmp[offset + iz].real(), - this->h_rhor[startz + iz], 1e-4); + EXPECT_NEAR(this->tmp[offset + iz].real(), this->h_rhor[startz + iz], 1e-4); } } for (int ig = 0; ig < pwtest.npw; ++ig) @@ -250,12 +256,11 @@ TYPED_TEST(PW_BASIS_C2R_GPU_TEST, FloatDouble) const int startz = ixy * nplane; for (int iz = 0; iz < nplane; ++iz) { - EXPECT_NEAR(this->tmp[offset + iz].real(), - this->h_rhor[startz + iz], 1e-4); + EXPECT_NEAR(this->tmp[offset + iz].real(), this->h_rhor[startz + iz], 1e-4); } } - for (int ig = 0; ig < pwtest.npw; ++ig) + for (int ig = 0; ig < pwtest.npw; ++ig) { EXPECT_NEAR(this->h_rhog[ig].real(), this->h_rhogout[ig].real(), 1e-4); EXPECT_NEAR(this->h_rhog[ig].imag(), this->h_rhogout[ig].imag(), 1e-4); diff --git a/source/module_basis/module_pw/test_gpu/pw_basis_k_C2C.cpp b/source/module_basis/module_pw/test_gpu/pw_basis_k_C2C.cpp index fe215a0841..0ed37939a8 100644 --- a/source/module_basis/module_pw/test_gpu/pw_basis_k_C2C.cpp +++ b/source/module_basis/module_pw/test_gpu/pw_basis_k_C2C.cpp @@ -1,9 +1,9 @@ #include "cuda_runtime.h" #include "fftw3.h" -#include "module_base/module_device/device.h" -#include "module_base/vector3.h" #include "module_basis/module_pw/pw_basis.h" #include "module_basis/module_pw/pw_basis_k.h" +#include "source_base/module_device/device.h" +#include "source_base/vector3.h" #include #include @@ -196,8 +196,8 @@ class PW_BASIS_K_GPU_TEST : public ::testing::Test } }; -using MixedTypes = ::testing::Types, - TypePair >; +using MixedTypes + = ::testing::Types, TypePair>; TYPED_TEST_CASE(PW_BASIS_K_GPU_TEST, MixedTypes); @@ -258,7 +258,8 @@ TYPED_TEST(PW_BASIS_K_GPU_TEST, FloatDouble) const int ny = pwtest.ny; const int nz = pwtest.nz; const int nplane = pwtest.nplane; - const int npwk = pwtest.npwk[0];; + const int npwk = pwtest.npwk[0]; + ; for (int ixy = 0; ixy < nx * ny; ++ixy) { const int offset = ixy * nz + startiz; diff --git a/source/module_basis/module_pw/test_serial/pw_basis_k_test.cpp b/source/module_basis/module_pw/test_serial/pw_basis_k_test.cpp index 2b4b4fc6ce..cdceef5dd1 100644 --- a/source/module_basis/module_pw/test_serial/pw_basis_k_test.cpp +++ b/source/module_basis/module_pw/test_serial/pw_basis_k_test.cpp @@ -1,7 +1,8 @@ +#include "source_base/constants.h" +#include "source_base/global_function.h" +#include "source_base/matrix3.h" + #include "gtest/gtest.h" -#include "module_base/global_function.h" -#include "module_base/constants.h" -#include "module_base/matrix3.h" /************************************************ * serial unit test of functions in pw_basis.cpp @@ -25,167 +26,160 @@ #define protected public #define private public -#include "../pw_basis_k.h" #include "../pw_basis.h" +#include "../pw_basis_k.h" #undef private #undef protected -class PWBasisKTEST: public testing::Test +class PWBasisKTEST : public testing::Test { -public: - std::string precision_double = "double"; - std::string precision_single = "single"; - std::string device_flag = "cpu"; - ModulePW::PW_Basis_K basis_k; + public: + std::string precision_double = "double"; + std::string precision_single = "single"; + std::string device_flag = "cpu"; + ModulePW::PW_Basis_K basis_k; }; -TEST_F(PWBasisKTEST,Constructor) +TEST_F(PWBasisKTEST, Constructor) { - ModulePW::PW_Basis_K basis_k2(device_flag, precision_double); - EXPECT_EQ(basis_k2.classname,"PW_Basis_K"); - EXPECT_EQ(basis_k2.device,"cpu"); - EXPECT_EQ(basis_k2.fft_bundle.device,"cpu"); - EXPECT_EQ(basis_k2.precision,"double"); - EXPECT_EQ(basis_k2.fft_bundle.precision,"double"); - ModulePW::PW_Basis_K basis_k3(device_flag, precision_single); - EXPECT_EQ(basis_k3.precision,"single"); - EXPECT_EQ(basis_k3.fft_bundle.precision,"single"); + ModulePW::PW_Basis_K basis_k2(device_flag, precision_double); + EXPECT_EQ(basis_k2.classname, "PW_Basis_K"); + EXPECT_EQ(basis_k2.device, "cpu"); + EXPECT_EQ(basis_k2.fft_bundle.device, "cpu"); + EXPECT_EQ(basis_k2.precision, "double"); + EXPECT_EQ(basis_k2.fft_bundle.precision, "double"); + ModulePW::PW_Basis_K basis_k3(device_flag, precision_single); + EXPECT_EQ(basis_k3.precision, "single"); + EXPECT_EQ(basis_k3.fft_bundle.precision, "single"); } -TEST_F(PWBasisKTEST,Initgrids1) +TEST_F(PWBasisKTEST, Initgrids1) { - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - double gridecut=10.0; - basis_k.initgrids(lat0,latvec,gridecut); - EXPECT_DOUBLE_EQ(basis_k.lat0,lat0); - EXPECT_DOUBLE_EQ(basis_k.tpiba,ModuleBase::TWO_PI/lat0); - EXPECT_DOUBLE_EQ(basis_k.tpiba2,basis_k.tpiba*basis_k.tpiba); - EXPECT_DOUBLE_EQ(basis_k.latvec.e11,latvec.e11); - EXPECT_DOUBLE_EQ(basis_k.GT.e11,latvec.Inverse().e11); - EXPECT_DOUBLE_EQ(basis_k.G.e11,basis_k.GT.Transpose().e11); - EXPECT_DOUBLE_EQ(basis_k.GGT.e11,(basis_k.G*basis_k.GT).e11); - EXPECT_DOUBLE_EQ(basis_k.gridecut_lat,gridecut/basis_k.tpiba2); - EXPECT_NEAR(basis_k.gridecut_lat,0.904561,1e-4); - EXPECT_EQ(basis_k.nx,20); - EXPECT_EQ(basis_k.ny,20); - EXPECT_EQ(basis_k.nz,20); - EXPECT_TRUE(basis_k.nx%2==0 || basis_k.nx%3==0 || basis_k.nx%5==0); - EXPECT_TRUE(basis_k.ny%2==0 || basis_k.ny%3==0 || basis_k.ny%5==0); - EXPECT_TRUE(basis_k.nz%2==0 || basis_k.nz%3==0 || basis_k.nz%5==0); + double lat0 = 1.8897261254578281; + ModuleBase::Matrix3 latvec(10.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 10.0); + double gridecut = 10.0; + basis_k.initgrids(lat0, latvec, gridecut); + EXPECT_DOUBLE_EQ(basis_k.lat0, lat0); + EXPECT_DOUBLE_EQ(basis_k.tpiba, ModuleBase::TWO_PI / lat0); + EXPECT_DOUBLE_EQ(basis_k.tpiba2, basis_k.tpiba * basis_k.tpiba); + EXPECT_DOUBLE_EQ(basis_k.latvec.e11, latvec.e11); + EXPECT_DOUBLE_EQ(basis_k.GT.e11, latvec.Inverse().e11); + EXPECT_DOUBLE_EQ(basis_k.G.e11, basis_k.GT.Transpose().e11); + EXPECT_DOUBLE_EQ(basis_k.GGT.e11, (basis_k.G * basis_k.GT).e11); + EXPECT_DOUBLE_EQ(basis_k.gridecut_lat, gridecut / basis_k.tpiba2); + EXPECT_NEAR(basis_k.gridecut_lat, 0.904561, 1e-4); + EXPECT_EQ(basis_k.nx, 20); + EXPECT_EQ(basis_k.ny, 20); + EXPECT_EQ(basis_k.nz, 20); + EXPECT_TRUE(basis_k.nx % 2 == 0 || basis_k.nx % 3 == 0 || basis_k.nx % 5 == 0); + EXPECT_TRUE(basis_k.ny % 2 == 0 || basis_k.ny % 3 == 0 || basis_k.ny % 5 == 0); + EXPECT_TRUE(basis_k.nz % 2 == 0 || basis_k.nz % 3 == 0 || basis_k.nz % 5 == 0); } -TEST_F(PWBasisKTEST,Initgrids2) +TEST_F(PWBasisKTEST, Initgrids2) { - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - int nx_in = 20; - int ny_in = 20; - int nz_in = 20; - basis_k.initgrids(lat0,latvec,nx_in,ny_in,nz_in); - EXPECT_DOUBLE_EQ(basis_k.lat0,lat0); - EXPECT_DOUBLE_EQ(basis_k.tpiba,ModuleBase::TWO_PI/lat0); - EXPECT_DOUBLE_EQ(basis_k.tpiba2,basis_k.tpiba*basis_k.tpiba); - EXPECT_DOUBLE_EQ(basis_k.latvec.e11,latvec.e11); - EXPECT_DOUBLE_EQ(basis_k.GT.e11,latvec.Inverse().e11); - EXPECT_DOUBLE_EQ(basis_k.G.e11,basis_k.GT.Transpose().e11); - EXPECT_DOUBLE_EQ(basis_k.GGT.e11,(basis_k.G*basis_k.GT).e11); - EXPECT_EQ(basis_k.nx,nx_in); - EXPECT_EQ(basis_k.ny,ny_in); - EXPECT_EQ(basis_k.nz,nz_in); - EXPECT_NEAR(basis_k.gridecut_lat,0.999999,1e-4); - EXPECT_NEAR(basis_k.gridecut_lat*basis_k.tpiba2,11.0551,1e-4); + double lat0 = 1.8897261254578281; + ModuleBase::Matrix3 latvec(10.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 10.0); + int nx_in = 20; + int ny_in = 20; + int nz_in = 20; + basis_k.initgrids(lat0, latvec, nx_in, ny_in, nz_in); + EXPECT_DOUBLE_EQ(basis_k.lat0, lat0); + EXPECT_DOUBLE_EQ(basis_k.tpiba, ModuleBase::TWO_PI / lat0); + EXPECT_DOUBLE_EQ(basis_k.tpiba2, basis_k.tpiba * basis_k.tpiba); + EXPECT_DOUBLE_EQ(basis_k.latvec.e11, latvec.e11); + EXPECT_DOUBLE_EQ(basis_k.GT.e11, latvec.Inverse().e11); + EXPECT_DOUBLE_EQ(basis_k.G.e11, basis_k.GT.Transpose().e11); + EXPECT_DOUBLE_EQ(basis_k.GGT.e11, (basis_k.G * basis_k.GT).e11); + EXPECT_EQ(basis_k.nx, nx_in); + EXPECT_EQ(basis_k.ny, ny_in); + EXPECT_EQ(basis_k.nz, nz_in); + EXPECT_NEAR(basis_k.gridecut_lat, 0.999999, 1e-4); + EXPECT_NEAR(basis_k.gridecut_lat * basis_k.tpiba2, 11.0551, 1e-4); } -TEST_F(PWBasisKTEST, Initparameters) +TEST_F(PWBasisKTEST, Initparameters) { - ModulePW::PW_Basis_K basis_k(device_flag, precision_single); - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - int nx_in = 20; - int ny_in = 20; - int nz_in = 20; - basis_k.initgrids(lat0,latvec,nx_in,ny_in,nz_in); - const bool gamma_only_in = true; - const double gk_ecut_in = 2.0; - const int nks_in = 3; - const ModuleBase::Vector3 kvec_d_in[3] = { {0.0, 0.0, 0.0}, {0.1, 0.2, 0.3}, {0.4, 0.5, 0.6} }; - const int distribution_type_in = 1; - const bool xprime_in = true; - basis_k.initparameters(gamma_only_in, gk_ecut_in, nks_in,kvec_d_in, distribution_type_in, xprime_in); - EXPECT_EQ(basis_k.nks, nks_in); - EXPECT_NE(basis_k.kvec_d, nullptr); - for(int i=0; i kvec_d_in[3] = {{0.0, 0.0, 0.0}, {0.1, 0.2, 0.3}, {0.4, 0.5, 0.6}}; + const int distribution_type_in = 1; + const bool xprime_in = true; + basis_k.initparameters(gamma_only_in, gk_ecut_in, nks_in, kvec_d_in, distribution_type_in, xprime_in); + EXPECT_EQ(basis_k.nks, nks_in); + EXPECT_NE(basis_k.kvec_d, nullptr); + for (int i = 0; i < nks_in; i++) + { + EXPECT_EQ(basis_k.kvec_d[i], kvec_d_in[i]); + } + EXPECT_NE(basis_k.kvec_c, nullptr); + for (int i = 0; i < nks_in; i++) + { + EXPECT_EQ(basis_k.kvec_c[i], kvec_d_in[i] * basis_k.G); + } + EXPECT_GT(basis_k.gk_ecut, 0.0); + EXPECT_GT(basis_k.ggecut, 0.0); + EXPECT_LE(basis_k.ggecut, basis_k.gridecut_lat); + EXPECT_FALSE(basis_k.gamma_only); + EXPECT_EQ(basis_k.xprime, xprime_in); + if (basis_k.gamma_only) + { + EXPECT_EQ(basis_k.fftny, basis_k.ny); + EXPECT_EQ(basis_k.fftnx, int(basis_k.nx / 2) + 1); + } + else + { + EXPECT_EQ(basis_k.fftny, basis_k.ny); + EXPECT_EQ(basis_k.fftnx, basis_k.nx); + } + EXPECT_EQ(basis_k.fftnz, basis_k.nz); + EXPECT_EQ(basis_k.fftnxy, basis_k.fftnx * basis_k.fftny); + EXPECT_EQ(basis_k.fftnxyz, basis_k.fftnxy * basis_k.fftnz); + EXPECT_EQ(basis_k.distribution_type, distribution_type_in); } -TEST_F(PWBasisKTEST, SetupTransform) +TEST_F(PWBasisKTEST, SetupTransform) { - ModulePW::PW_Basis_K basis_k(device_flag, precision_double); - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - double gridecut=10.0; - basis_k.initgrids(lat0,latvec,gridecut); - const bool gamma_only_in = true; - const double gk_ecut_in = 10.0; - const int nks_in = 3; - const ModuleBase::Vector3 kvec_d_in[3] = { {0.0, 0.0, 0.0}, {0.1, 0.2, 0.3}, {0.4, 0.5, 0.6} }; - const int distribution_type_in = 1; - const bool xprime_in = true; - basis_k.initparameters(gamma_only_in, gk_ecut_in, nks_in,kvec_d_in, distribution_type_in, xprime_in); - EXPECT_NO_THROW(basis_k.setuptransform()); - EXPECT_EQ(basis_k.npw,3695); + ModulePW::PW_Basis_K basis_k(device_flag, precision_double); + double lat0 = 1.8897261254578281; + ModuleBase::Matrix3 latvec(10.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 10.0); + double gridecut = 10.0; + basis_k.initgrids(lat0, latvec, gridecut); + const bool gamma_only_in = true; + const double gk_ecut_in = 10.0; + const int nks_in = 3; + const ModuleBase::Vector3 kvec_d_in[3] = {{0.0, 0.0, 0.0}, {0.1, 0.2, 0.3}, {0.4, 0.5, 0.6}}; + const int distribution_type_in = 1; + const bool xprime_in = true; + basis_k.initparameters(gamma_only_in, gk_ecut_in, nks_in, kvec_d_in, distribution_type_in, xprime_in); + EXPECT_NO_THROW(basis_k.setuptransform()); + EXPECT_EQ(basis_k.npw, 3695); } -TEST_F(PWBasisKTEST, CollectLocalPW) +TEST_F(PWBasisKTEST, CollectLocalPW) { - ModulePW::PW_Basis_K basis_k(device_flag, precision_double); - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - double gridecut=10.0; - basis_k.initgrids(lat0,latvec,gridecut); - const bool gamma_only_in = true; - const double gk_ecut_in = 11.0; - const int nks_in = 3; - const ModuleBase::Vector3 kvec_d_in[3] = { {0.0, 0.0, 0.0}, {0.1, 0.2, 0.3}, {0.4, 0.5, 0.6} }; - const int distribution_type_in = 1; - const bool xprime_in = true; - basis_k.initparameters(gamma_only_in, gk_ecut_in, nks_in,kvec_d_in, distribution_type_in, xprime_in); - EXPECT_NO_THROW(basis_k.setuptransform()); - EXPECT_NO_THROW(basis_k.collect_local_pw()); - EXPECT_EQ(basis_k.npw,3695); - EXPECT_EQ(basis_k.npwk_max,2721); + ModulePW::PW_Basis_K basis_k(device_flag, precision_double); + double lat0 = 1.8897261254578281; + ModuleBase::Matrix3 latvec(10.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 10.0); + double gridecut = 10.0; + basis_k.initgrids(lat0, latvec, gridecut); + const bool gamma_only_in = true; + const double gk_ecut_in = 11.0; + const int nks_in = 3; + const ModuleBase::Vector3 kvec_d_in[3] = {{0.0, 0.0, 0.0}, {0.1, 0.2, 0.3}, {0.4, 0.5, 0.6}}; + const int distribution_type_in = 1; + const bool xprime_in = true; + basis_k.initparameters(gamma_only_in, gk_ecut_in, nks_in, kvec_d_in, distribution_type_in, xprime_in); + EXPECT_NO_THROW(basis_k.setuptransform()); + EXPECT_NO_THROW(basis_k.collect_local_pw()); + EXPECT_EQ(basis_k.npw, 3695); + EXPECT_EQ(basis_k.npwk_max, 2721); } - - diff --git a/source/module_basis/module_pw/test_serial/pw_basis_test.cpp b/source/module_basis/module_pw/test_serial/pw_basis_test.cpp index 0814263ef2..ebd700d839 100644 --- a/source/module_basis/module_pw/test_serial/pw_basis_test.cpp +++ b/source/module_basis/module_pw/test_serial/pw_basis_test.cpp @@ -1,7 +1,8 @@ +#include "source_base/constants.h" +#include "source_base/global_function.h" +#include "source_base/matrix3.h" + #include "gtest/gtest.h" -#include "module_base/global_function.h" -#include "module_base/constants.h" -#include "module_base/matrix3.h" /************************************************ * serial unit test of functions in pw_basis.cpp @@ -41,324 +42,304 @@ #undef private #undef protected -class PWBasisTEST: public testing::Test +class PWBasisTEST : public testing::Test { -public: - std::string precision_flag = "double"; - std::string device_flag = "cpu"; - ModulePW::PW_Basis pwb; - ModulePW::PW_Basis pwb1; + public: + std::string precision_flag = "double"; + std::string device_flag = "cpu"; + ModulePW::PW_Basis pwb; + ModulePW::PW_Basis pwb1; }; -TEST_F(PWBasisTEST,Constructor) +TEST_F(PWBasisTEST, Constructor) { - ModulePW::PW_Basis pwb2(device_flag, precision_flag); - EXPECT_EQ(pwb1.classname,"PW_Basis"); - EXPECT_EQ(pwb2.classname,"PW_Basis"); - EXPECT_EQ(pwb2.device,"cpu"); - EXPECT_EQ(pwb2.precision,"double"); - EXPECT_EQ(pwb2.fft_bundle.device,"cpu"); - EXPECT_EQ(pwb2.fft_bundle.precision,"double"); + ModulePW::PW_Basis pwb2(device_flag, precision_flag); + EXPECT_EQ(pwb1.classname, "PW_Basis"); + EXPECT_EQ(pwb2.classname, "PW_Basis"); + EXPECT_EQ(pwb2.device, "cpu"); + EXPECT_EQ(pwb2.precision, "double"); + EXPECT_EQ(pwb2.fft_bundle.device, "cpu"); + EXPECT_EQ(pwb2.fft_bundle.precision, "double"); } -TEST_F(PWBasisTEST,Initgrids1) +TEST_F(PWBasisTEST, Initgrids1) { - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - double gridecut=10.0; - pwb.initgrids(lat0,latvec,gridecut); - EXPECT_DOUBLE_EQ(pwb.lat0,lat0); - EXPECT_DOUBLE_EQ(pwb.tpiba,ModuleBase::TWO_PI/lat0); - EXPECT_DOUBLE_EQ(pwb.tpiba2,pwb.tpiba*pwb.tpiba); - EXPECT_DOUBLE_EQ(pwb.latvec.e11,latvec.e11); - EXPECT_DOUBLE_EQ(pwb.GT.e11,latvec.Inverse().e11); - EXPECT_DOUBLE_EQ(pwb.G.e11,pwb.GT.Transpose().e11); - EXPECT_DOUBLE_EQ(pwb.GGT.e11,(pwb.G*pwb.GT).e11); - EXPECT_DOUBLE_EQ(pwb.gridecut_lat,gridecut/pwb.tpiba2); - EXPECT_NEAR(pwb.gridecut_lat,0.904561,1e-4); - EXPECT_EQ(pwb.nx,20); - EXPECT_EQ(pwb.ny,20); - EXPECT_EQ(pwb.nz,20); - EXPECT_TRUE(pwb.nx%2==0 || pwb.nx%3==0 || pwb.nx%5==0); - EXPECT_TRUE(pwb.ny%2==0 || pwb.ny%3==0 || pwb.ny%5==0); - EXPECT_TRUE(pwb.nz%2==0 || pwb.nz%3==0 || pwb.nz%5==0); + double lat0 = 1.8897261254578281; + ModuleBase::Matrix3 latvec(10.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 10.0); + double gridecut = 10.0; + pwb.initgrids(lat0, latvec, gridecut); + EXPECT_DOUBLE_EQ(pwb.lat0, lat0); + EXPECT_DOUBLE_EQ(pwb.tpiba, ModuleBase::TWO_PI / lat0); + EXPECT_DOUBLE_EQ(pwb.tpiba2, pwb.tpiba * pwb.tpiba); + EXPECT_DOUBLE_EQ(pwb.latvec.e11, latvec.e11); + EXPECT_DOUBLE_EQ(pwb.GT.e11, latvec.Inverse().e11); + EXPECT_DOUBLE_EQ(pwb.G.e11, pwb.GT.Transpose().e11); + EXPECT_DOUBLE_EQ(pwb.GGT.e11, (pwb.G * pwb.GT).e11); + EXPECT_DOUBLE_EQ(pwb.gridecut_lat, gridecut / pwb.tpiba2); + EXPECT_NEAR(pwb.gridecut_lat, 0.904561, 1e-4); + EXPECT_EQ(pwb.nx, 20); + EXPECT_EQ(pwb.ny, 20); + EXPECT_EQ(pwb.nz, 20); + EXPECT_TRUE(pwb.nx % 2 == 0 || pwb.nx % 3 == 0 || pwb.nx % 5 == 0); + EXPECT_TRUE(pwb.ny % 2 == 0 || pwb.ny % 3 == 0 || pwb.ny % 5 == 0); + EXPECT_TRUE(pwb.nz % 2 == 0 || pwb.nz % 3 == 0 || pwb.nz % 5 == 0); } -TEST_F(PWBasisTEST,Initgrids2) +TEST_F(PWBasisTEST, Initgrids2) { - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - int nx_in = 20; - int ny_in = 20; - int nz_in = 20; - pwb.initgrids(lat0,latvec,nx_in,ny_in,nz_in); - EXPECT_DOUBLE_EQ(pwb.lat0,lat0); - EXPECT_DOUBLE_EQ(pwb.tpiba,ModuleBase::TWO_PI/lat0); - EXPECT_DOUBLE_EQ(pwb.tpiba2,pwb.tpiba*pwb.tpiba); - EXPECT_DOUBLE_EQ(pwb.latvec.e11,latvec.e11); - EXPECT_DOUBLE_EQ(pwb.GT.e11,latvec.Inverse().e11); - EXPECT_DOUBLE_EQ(pwb.G.e11,pwb.GT.Transpose().e11); - EXPECT_DOUBLE_EQ(pwb.GGT.e11,(pwb.G*pwb.GT).e11); - EXPECT_EQ(pwb.nx,nx_in); - EXPECT_EQ(pwb.ny,ny_in); - EXPECT_EQ(pwb.nz,nz_in); - EXPECT_NEAR(pwb.gridecut_lat,0.999999,1e-4); - EXPECT_NEAR(pwb.gridecut_lat*pwb.tpiba2,11.0551,1e-4); + double lat0 = 1.8897261254578281; + ModuleBase::Matrix3 latvec(10.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 10.0); + int nx_in = 20; + int ny_in = 20; + int nz_in = 20; + pwb.initgrids(lat0, latvec, nx_in, ny_in, nz_in); + EXPECT_DOUBLE_EQ(pwb.lat0, lat0); + EXPECT_DOUBLE_EQ(pwb.tpiba, ModuleBase::TWO_PI / lat0); + EXPECT_DOUBLE_EQ(pwb.tpiba2, pwb.tpiba * pwb.tpiba); + EXPECT_DOUBLE_EQ(pwb.latvec.e11, latvec.e11); + EXPECT_DOUBLE_EQ(pwb.GT.e11, latvec.Inverse().e11); + EXPECT_DOUBLE_EQ(pwb.G.e11, pwb.GT.Transpose().e11); + EXPECT_DOUBLE_EQ(pwb.GGT.e11, (pwb.G * pwb.GT).e11); + EXPECT_EQ(pwb.nx, nx_in); + EXPECT_EQ(pwb.ny, ny_in); + EXPECT_EQ(pwb.nz, nz_in); + EXPECT_NEAR(pwb.gridecut_lat, 0.999999, 1e-4); + EXPECT_NEAR(pwb.gridecut_lat * pwb.tpiba2, 11.0551, 1e-4); } -TEST_F(PWBasisTEST,Initparameters) +TEST_F(PWBasisTEST, Initparameters) { - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - double gridecut=10.0; - //initparameters is always called after initgrids - //because of nx,ny,nz, and tpiba2 - pwb.initgrids(lat0,latvec,gridecut); - bool gamma_only_in = true; - double pwecut_in = 11.0; - int distribution_type_in = 1; - bool xprime_in = true; - pwb.initparameters(gamma_only_in,pwecut_in,distribution_type_in,xprime_in); - EXPECT_EQ(pwb.xprime,xprime_in); - EXPECT_EQ(pwb.gamma_only,gamma_only_in); - EXPECT_EQ(pwb.xprime,xprime_in); - EXPECT_TRUE(pwb.gamma_only); - EXPECT_TRUE(pwb.xprime); - EXPECT_EQ(pwb.fftnx,int(pwb.nx/2)+1); - EXPECT_EQ(pwb.fftny,pwb.ny); - EXPECT_EQ(pwb.fftnz,pwb.nz); - EXPECT_EQ(pwb.ggecut,pwb.gridecut_lat); - EXPECT_EQ(pwb.distribution_type,distribution_type_in); + double lat0 = 1.8897261254578281; + ModuleBase::Matrix3 latvec(10.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 10.0); + double gridecut = 10.0; + // initparameters is always called after initgrids + // because of nx,ny,nz, and tpiba2 + pwb.initgrids(lat0, latvec, gridecut); + bool gamma_only_in = true; + double pwecut_in = 11.0; + int distribution_type_in = 1; + bool xprime_in = true; + pwb.initparameters(gamma_only_in, pwecut_in, distribution_type_in, xprime_in); + EXPECT_EQ(pwb.xprime, xprime_in); + EXPECT_EQ(pwb.gamma_only, gamma_only_in); + EXPECT_EQ(pwb.xprime, xprime_in); + EXPECT_TRUE(pwb.gamma_only); + EXPECT_TRUE(pwb.xprime); + EXPECT_EQ(pwb.fftnx, int(pwb.nx / 2) + 1); + EXPECT_EQ(pwb.fftny, pwb.ny); + EXPECT_EQ(pwb.fftnz, pwb.nz); + EXPECT_EQ(pwb.ggecut, pwb.gridecut_lat); + EXPECT_EQ(pwb.distribution_type, distribution_type_in); } -TEST_F(PWBasisTEST,Setfullpw) +TEST_F(PWBasisTEST, Setfullpw) { - bool inpt_full_pw = false; - int inpt_full_pw_dim = 2; - pwb.setfullpw(inpt_full_pw,inpt_full_pw_dim); - EXPECT_FALSE(pwb.full_pw); - EXPECT_EQ(pwb.full_pw_dim,0); + bool inpt_full_pw = false; + int inpt_full_pw_dim = 2; + pwb.setfullpw(inpt_full_pw, inpt_full_pw_dim); + EXPECT_FALSE(pwb.full_pw); + EXPECT_EQ(pwb.full_pw_dim, 0); } -TEST_F(PWBasisTEST,DistributeR) +TEST_F(PWBasisTEST, DistributeR) { - //distribute_r depends on initgrids - //because of nz - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - double gridecut=10.0; - //initparameters is always called after initgrids - //because of nx,ny,nz, and tpiba2 - pwb.initgrids(lat0,latvec,gridecut); - //this is serial test, so that - EXPECT_EQ(pwb.poolrank,0); - EXPECT_EQ(pwb.poolnproc,1); - pwb.distribute_r(); - EXPECT_EQ(pwb.startz[0],0); - EXPECT_EQ(pwb.numz[0],pwb.nz); - EXPECT_EQ(pwb.nplane,pwb.nz); - EXPECT_EQ(pwb.nplane,20); - EXPECT_EQ(pwb.nxy,400); - EXPECT_EQ(pwb.nrxx,pwb.numz[0]*pwb.nxy); + // distribute_r depends on initgrids + // because of nz + double lat0 = 1.8897261254578281; + ModuleBase::Matrix3 latvec(10.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 10.0); + double gridecut = 10.0; + // initparameters is always called after initgrids + // because of nx,ny,nz, and tpiba2 + pwb.initgrids(lat0, latvec, gridecut); + // this is serial test, so that + EXPECT_EQ(pwb.poolrank, 0); + EXPECT_EQ(pwb.poolnproc, 1); + pwb.distribute_r(); + EXPECT_EQ(pwb.startz[0], 0); + EXPECT_EQ(pwb.numz[0], pwb.nz); + EXPECT_EQ(pwb.nplane, pwb.nz); + EXPECT_EQ(pwb.nplane, 20); + EXPECT_EQ(pwb.nxy, 400); + EXPECT_EQ(pwb.nrxx, pwb.numz[0] * pwb.nxy); } -TEST_F(PWBasisTEST,DistributeMethod1) +TEST_F(PWBasisTEST, DistributeMethod1) { - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - double gridecut=10.0; - //initparameters is always called after initgrids - //because of nx,ny,nz, and tpiba2 - //call initgrids - pwb.initgrids(lat0,latvec,gridecut); - bool gamma_only_in = true; - double pwecut_in = 11.0; - int distribution_type_in = 1; - bool xprime_in = true; - //call initparameters - pwb.initparameters(gamma_only_in,pwecut_in,distribution_type_in,xprime_in); - EXPECT_TRUE(pwb.gamma_only); - EXPECT_TRUE(pwb.xprime); - EXPECT_EQ(pwb.fftnx,int(pwb.nx/2)+1); - EXPECT_EQ(pwb.fftny,pwb.ny); - EXPECT_EQ(pwb.fftnz,pwb.nz); - EXPECT_EQ(pwb.distribution_type,distribution_type_in); - EXPECT_EQ(pwb.fftnxy,pwb.fftnx*pwb.fftny); - EXPECT_EQ(pwb.fftnx,11); - EXPECT_EQ(pwb.fftny,20); - EXPECT_EQ(pwb.fftnz,20); - //distribute_method1 depends on initparamters - //because of fftnxy - EXPECT_EQ(pwb.fftnxy,220); - EXPECT_EQ(pwb.distribution_type,1); - //call distribute_g - pwb.distribute_g(); - EXPECT_EQ(pwb.npwtot,1994); - EXPECT_EQ(pwb.nstot,156); + double lat0 = 1.8897261254578281; + ModuleBase::Matrix3 latvec(10.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 10.0); + double gridecut = 10.0; + // initparameters is always called after initgrids + // because of nx,ny,nz, and tpiba2 + // call initgrids + pwb.initgrids(lat0, latvec, gridecut); + bool gamma_only_in = true; + double pwecut_in = 11.0; + int distribution_type_in = 1; + bool xprime_in = true; + // call initparameters + pwb.initparameters(gamma_only_in, pwecut_in, distribution_type_in, xprime_in); + EXPECT_TRUE(pwb.gamma_only); + EXPECT_TRUE(pwb.xprime); + EXPECT_EQ(pwb.fftnx, int(pwb.nx / 2) + 1); + EXPECT_EQ(pwb.fftny, pwb.ny); + EXPECT_EQ(pwb.fftnz, pwb.nz); + EXPECT_EQ(pwb.distribution_type, distribution_type_in); + EXPECT_EQ(pwb.fftnxy, pwb.fftnx * pwb.fftny); + EXPECT_EQ(pwb.fftnx, 11); + EXPECT_EQ(pwb.fftny, 20); + EXPECT_EQ(pwb.fftnz, 20); + // distribute_method1 depends on initparamters + // because of fftnxy + EXPECT_EQ(pwb.fftnxy, 220); + EXPECT_EQ(pwb.distribution_type, 1); + // call distribute_g + pwb.distribute_g(); + EXPECT_EQ(pwb.npwtot, 1994); + EXPECT_EQ(pwb.nstot, 156); } -TEST_F(PWBasisTEST,DistributeMethod2) +TEST_F(PWBasisTEST, DistributeMethod2) { - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - double gridecut=10.0; - //initparameters is always called after initgrids - //because of nx,ny,nz, and tpiba2 - //call initgrids - pwb.initgrids(lat0,latvec,gridecut); - bool gamma_only_in = true; - double pwecut_in = 11.0; - int distribution_type_in = 2; - bool xprime_in = true; - //call initparameters - pwb.initparameters(gamma_only_in,pwecut_in,distribution_type_in,xprime_in); - EXPECT_TRUE(pwb.gamma_only); - EXPECT_TRUE(pwb.xprime); - EXPECT_EQ(pwb.fftnx,int(pwb.nx/2)+1); - EXPECT_EQ(pwb.fftny,pwb.ny); - EXPECT_EQ(pwb.fftnz,pwb.nz); - EXPECT_EQ(pwb.distribution_type,distribution_type_in); - EXPECT_EQ(pwb.fftnxy,pwb.fftnx*pwb.fftny); - EXPECT_EQ(pwb.fftnx,11); - EXPECT_EQ(pwb.fftny,20); - EXPECT_EQ(pwb.fftnz,20); - //distribute_method1 depends on initparamters - //because of fftnxy - EXPECT_EQ(pwb.fftnxy,220); - EXPECT_EQ(pwb.distribution_type,2); - //call distribute_g - pwb.distribute_g(); - EXPECT_EQ(pwb.npwtot,1994); - EXPECT_EQ(pwb.nstot,156); - EXPECT_EQ(pwb.npw,1994); - EXPECT_EQ(pwb.nst,156); - EXPECT_EQ(pwb.nstnz,3120); + double lat0 = 1.8897261254578281; + ModuleBase::Matrix3 latvec(10.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 10.0); + double gridecut = 10.0; + // initparameters is always called after initgrids + // because of nx,ny,nz, and tpiba2 + // call initgrids + pwb.initgrids(lat0, latvec, gridecut); + bool gamma_only_in = true; + double pwecut_in = 11.0; + int distribution_type_in = 2; + bool xprime_in = true; + // call initparameters + pwb.initparameters(gamma_only_in, pwecut_in, distribution_type_in, xprime_in); + EXPECT_TRUE(pwb.gamma_only); + EXPECT_TRUE(pwb.xprime); + EXPECT_EQ(pwb.fftnx, int(pwb.nx / 2) + 1); + EXPECT_EQ(pwb.fftny, pwb.ny); + EXPECT_EQ(pwb.fftnz, pwb.nz); + EXPECT_EQ(pwb.distribution_type, distribution_type_in); + EXPECT_EQ(pwb.fftnxy, pwb.fftnx * pwb.fftny); + EXPECT_EQ(pwb.fftnx, 11); + EXPECT_EQ(pwb.fftny, 20); + EXPECT_EQ(pwb.fftnz, 20); + // distribute_method1 depends on initparamters + // because of fftnxy + EXPECT_EQ(pwb.fftnxy, 220); + EXPECT_EQ(pwb.distribution_type, 2); + // call distribute_g + pwb.distribute_g(); + EXPECT_EQ(pwb.npwtot, 1994); + EXPECT_EQ(pwb.nstot, 156); + EXPECT_EQ(pwb.npw, 1994); + EXPECT_EQ(pwb.nst, 156); + EXPECT_EQ(pwb.nstnz, 3120); } -TEST_F(PWBasisTEST,GetStartGR) +TEST_F(PWBasisTEST, GetStartGR) { - //getstartgr is called after distribute_r and distribute_g in setuptransform - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - double gridecut=10.0; - //initparameters is always called after initgrids - //because of nx,ny,nz, and tpiba2 - //call initgrids - pwb.initgrids(lat0,latvec,gridecut); - //call distribute_r - pwb.distribute_r(); - bool gamma_only_in = true; - double pwecut_in = 11.0; - int distribution_type_in = 2; - bool xprime_in = true; - //call initparameters - pwb.initparameters(gamma_only_in,pwecut_in,distribution_type_in,xprime_in); - //call distribute_g - pwb.distribute_g(); - //call getstartgr - pwb.getstartgr(); - EXPECT_TRUE(pwb.gamma_only); - EXPECT_EQ(pwb.npw,1994); - EXPECT_EQ(pwb.nz,20); - EXPECT_EQ(pwb.nst,156); - EXPECT_EQ(pwb.nrxx,8000); - EXPECT_EQ(pwb.nxy,400); - EXPECT_EQ(pwb.nplane,20); - EXPECT_EQ(pwb.nmaxgr,4000); - EXPECT_EQ(pwb.numg[0],3120); - EXPECT_EQ(pwb.numr[0],3120); - EXPECT_EQ(pwb.startg[0],0); - EXPECT_EQ(pwb.startr[0],0); + // getstartgr is called after distribute_r and distribute_g in setuptransform + double lat0 = 1.8897261254578281; + ModuleBase::Matrix3 latvec(10.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 10.0); + double gridecut = 10.0; + // initparameters is always called after initgrids + // because of nx,ny,nz, and tpiba2 + // call initgrids + pwb.initgrids(lat0, latvec, gridecut); + // call distribute_r + pwb.distribute_r(); + bool gamma_only_in = true; + double pwecut_in = 11.0; + int distribution_type_in = 2; + bool xprime_in = true; + // call initparameters + pwb.initparameters(gamma_only_in, pwecut_in, distribution_type_in, xprime_in); + // call distribute_g + pwb.distribute_g(); + // call getstartgr + pwb.getstartgr(); + EXPECT_TRUE(pwb.gamma_only); + EXPECT_EQ(pwb.npw, 1994); + EXPECT_EQ(pwb.nz, 20); + EXPECT_EQ(pwb.nst, 156); + EXPECT_EQ(pwb.nrxx, 8000); + EXPECT_EQ(pwb.nxy, 400); + EXPECT_EQ(pwb.nplane, 20); + EXPECT_EQ(pwb.nmaxgr, 4000); + EXPECT_EQ(pwb.numg[0], 3120); + EXPECT_EQ(pwb.numr[0], 3120); + EXPECT_EQ(pwb.startg[0], 0); + EXPECT_EQ(pwb.startr[0], 0); } -TEST_F(PWBasisTEST,SetupTransform) +TEST_F(PWBasisTEST, SetupTransform) { - //getstartgr is called after distribute_r and distribute_g in setuptransform - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - double gridecut=10.0; - //initparameters is always called after initgrids - //because of nx,ny,nz, and tpiba2 - //call initgrids - pwb.initgrids(lat0,latvec,gridecut); - bool gamma_only_in = true; - double pwecut_in = 11.0; - int distribution_type_in = 2; - bool xprime_in = true; - pwb.initparameters(gamma_only_in,pwecut_in,distribution_type_in,xprime_in); - //setuptransform for FFT - //which calls fft planning functions - //currently this is just a trivial test to see its successfull calling - EXPECT_NO_THROW(pwb.setuptransform()); - EXPECT_EQ(pwb.npw,1994); + // getstartgr is called after distribute_r and distribute_g in setuptransform + double lat0 = 1.8897261254578281; + ModuleBase::Matrix3 latvec(10.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 10.0); + double gridecut = 10.0; + // initparameters is always called after initgrids + // because of nx,ny,nz, and tpiba2 + // call initgrids + pwb.initgrids(lat0, latvec, gridecut); + bool gamma_only_in = true; + double pwecut_in = 11.0; + int distribution_type_in = 2; + bool xprime_in = true; + pwb.initparameters(gamma_only_in, pwecut_in, distribution_type_in, xprime_in); + // setuptransform for FFT + // which calls fft planning functions + // currently this is just a trivial test to see its successfull calling + EXPECT_NO_THROW(pwb.setuptransform()); + EXPECT_EQ(pwb.npw, 1994); } -TEST_F(PWBasisTEST,CollectLocalPW) +TEST_F(PWBasisTEST, CollectLocalPW) { - //getstartgr is called after distribute_r and distribute_g in setuptransform - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - double gridecut=10.0; - //initparameters is always called after initgrids - //because of nx,ny,nz, and tpiba2 - //call initgrids - pwb.initgrids(lat0,latvec,gridecut); - bool gamma_only_in = true; - double pwecut_in = 11.0; - int distribution_type_in = 2; - bool xprime_in = true; - pwb.initparameters(gamma_only_in,pwecut_in,distribution_type_in,xprime_in); - //setuptransform for FFT - //which calls fft planning functions - //currently this is just a trivial test to see its successfull calling - EXPECT_NO_THROW(pwb.setuptransform()); - EXPECT_EQ(pwb.npw,1994); - pwb.collect_local_pw(); - EXPECT_EQ(pwb.ig_gge0,9); + // getstartgr is called after distribute_r and distribute_g in setuptransform + double lat0 = 1.8897261254578281; + ModuleBase::Matrix3 latvec(10.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 10.0); + double gridecut = 10.0; + // initparameters is always called after initgrids + // because of nx,ny,nz, and tpiba2 + // call initgrids + pwb.initgrids(lat0, latvec, gridecut); + bool gamma_only_in = true; + double pwecut_in = 11.0; + int distribution_type_in = 2; + bool xprime_in = true; + pwb.initparameters(gamma_only_in, pwecut_in, distribution_type_in, xprime_in); + // setuptransform for FFT + // which calls fft planning functions + // currently this is just a trivial test to see its successfull calling + EXPECT_NO_THROW(pwb.setuptransform()); + EXPECT_EQ(pwb.npw, 1994); + pwb.collect_local_pw(); + EXPECT_EQ(pwb.ig_gge0, 9); } -TEST_F(PWBasisTEST,CollectUniqgg) +TEST_F(PWBasisTEST, CollectUniqgg) { - //getstartgr is called after distribute_r and distribute_g in setuptransform - double lat0 = 1.8897261254578281; - ModuleBase::Matrix3 latvec(10.0,0.0,0.0, - 0.0,10.0,0.0, - 0.0,0.0,10.0); - double gridecut=10.0; - //initparameters is always called after initgrids - //because of nx,ny,nz, and tpiba2 - //call initgrids - pwb.initgrids(lat0,latvec,gridecut); - bool gamma_only_in = true; - double pwecut_in = 11.0; - int distribution_type_in = 2; - bool xprime_in = true; - pwb.initparameters(gamma_only_in,pwecut_in,distribution_type_in,xprime_in); - //setuptransform for FFT - //which calls fft planning functions - //currently this is just a trivial test to see its successfull calling - EXPECT_NO_THROW(pwb.setuptransform()); - EXPECT_EQ(pwb.npw,1994); - pwb.collect_local_pw(); - EXPECT_EQ(pwb.ig_gge0,9); - pwb.collect_uniqgg(); - EXPECT_EQ(pwb.ngg,78); + // getstartgr is called after distribute_r and distribute_g in setuptransform + double lat0 = 1.8897261254578281; + ModuleBase::Matrix3 latvec(10.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 10.0); + double gridecut = 10.0; + // initparameters is always called after initgrids + // because of nx,ny,nz, and tpiba2 + // call initgrids + pwb.initgrids(lat0, latvec, gridecut); + bool gamma_only_in = true; + double pwecut_in = 11.0; + int distribution_type_in = 2; + bool xprime_in = true; + pwb.initparameters(gamma_only_in, pwecut_in, distribution_type_in, xprime_in); + // setuptransform for FFT + // which calls fft planning functions + // currently this is just a trivial test to see its successfull calling + EXPECT_NO_THROW(pwb.setuptransform()); + EXPECT_EQ(pwb.npw, 1994); + pwb.collect_local_pw(); + EXPECT_EQ(pwb.ig_gge0, 9); + pwb.collect_uniqgg(); + EXPECT_EQ(pwb.ngg, 78); } diff --git a/source/module_cell/atom_pseudo.cpp b/source/module_cell/atom_pseudo.cpp index 0b6767f8ed..09d16506b1 100644 --- a/source/module_cell/atom_pseudo.cpp +++ b/source/module_cell/atom_pseudo.cpp @@ -1,5 +1,4 @@ #include "atom_pseudo.h" -#include "module_parameter/parameter.h" #include "module_parameter/parameter.h" Atom_pseudo::Atom_pseudo() @@ -86,7 +85,7 @@ void Atom_pseudo::set_d_so(ModuleBase::ComplexMatrix& d_so_in, || fabs(this->d_so(is, L1, L2).imag()) > 1.0e-8) { // std::cout << "tt in atom is=" << is << " L1=" << - //L1 + // L1 //<< " L2=" // << L2 << " " << d_so(is, L1, L2) << std::endl; @@ -107,9 +106,10 @@ void Atom_pseudo::set_d_so(ModuleBase::ComplexMatrix& d_so_in, { for (int is2 = 0; is2 < 2; is2++) { - if (is >= PARAM.inp.nspin) { + if (is >= PARAM.inp.nspin) + { break; -} + } for (int L1 = 0; L1 < nproj_soc; L1++) { for (int L2 = 0; L2 < nproj_soc; L2++) @@ -142,7 +142,7 @@ void Atom_pseudo::set_d_so(ModuleBase::ComplexMatrix& d_so_in, return; } -#include "module_base/parallel_common.h" +#include "source_base/parallel_common.h" #ifdef __MPI void Atom_pseudo::bcast_atom_pseudo() @@ -219,9 +219,10 @@ void Atom_pseudo::bcast_atom_pseudo() // == end of pseudo_vl == // == pseudo == - if (nbeta == 0) { + if (nbeta == 0) + { return; -} + } if (GlobalV::MY_RANK != 0) { diff --git a/source/module_cell/atom_pseudo.h b/source/module_cell/atom_pseudo.h index c02687c78f..5977b0fc59 100644 --- a/source/module_cell/atom_pseudo.h +++ b/source/module_cell/atom_pseudo.h @@ -1,53 +1,48 @@ #ifndef ATOM_PSEUDO_H #define ATOM_PSEUDO_H -#include "module_base/global_variable.h" -#include "module_base/vector3.h" #include "module_io/output.h" -#include "module_base/complexarray.h" -#include "module_base/complexmatrix.h" #include "pseudo.h" - +#include "source_base/complexarray.h" +#include "source_base/complexmatrix.h" +#include "source_base/global_variable.h" +#include "source_base/vector3.h" class Atom_pseudo : public pseudo { -public: - - Atom_pseudo(); - ~Atom_pseudo(); - - // mohan add 2021-05-07 - ModuleBase::ComplexArray d_so; //(:,:,:), spin-orbit case - ModuleBase::matrix d_real; //(:,:), non-spin-orbit case - int nproj; - int nproj_soc; // dimension of D_ij^so - std::vector non_zero_count_soc = {0, 0, 0, 0}; - std::vector> index1_soc = {{}, {}, {}, {}}; - std::vector> index2_soc = {{}, {}, {}, {}}; - - void set_d_so( // mohan add 2021-05-07 - ModuleBase::ComplexMatrix &d_so_in, - const int &nproj_in, - const int &nproj_in_so, - const bool has_so); - - - inline void get_d(const int& is, const int& p1, const int& p2, const std::complex*& tmp_d) - { - tmp_d = &this->d_so(is, p1, p2); - return; - } - inline void get_d(const int& is, const int& p1, const int& p2, const double*& tmp_d) - { - tmp_d = &this->d_real(p1, p2); - return; - } - + public: + Atom_pseudo(); + ~Atom_pseudo(); + + // mohan add 2021-05-07 + ModuleBase::ComplexArray d_so; //(:,:,:), spin-orbit case + ModuleBase::matrix d_real; //(:,:), non-spin-orbit case + int nproj; + int nproj_soc; // dimension of D_ij^so + std::vector non_zero_count_soc = {0, 0, 0, 0}; + std::vector> index1_soc = {{}, {}, {}, {}}; + std::vector> index2_soc = {{}, {}, {}, {}}; + + void set_d_so( // mohan add 2021-05-07 + ModuleBase::ComplexMatrix& d_so_in, + const int& nproj_in, + const int& nproj_in_so, + const bool has_so); + + inline void get_d(const int& is, const int& p1, const int& p2, const std::complex*& tmp_d) + { + tmp_d = &this->d_so(is, p1, p2); + return; + } + inline void get_d(const int& is, const int& p1, const int& p2, const double*& tmp_d) + { + tmp_d = &this->d_real(p1, p2); + return; + } #ifdef __MPI - void bcast_atom_pseudo(void); // for upf201 + void bcast_atom_pseudo(void); // for upf201 #endif - }; #endif diff --git a/source/module_cell/atom_spec.cpp b/source/module_cell/atom_spec.cpp index db6e9086e5..9c3418ad49 100644 --- a/source/module_cell/atom_spec.cpp +++ b/source/module_cell/atom_spec.cpp @@ -1,5 +1,7 @@ #include "atom_spec.h" + #include "module_parameter/parameter.h" + #include Atom::Atom() @@ -73,7 +75,7 @@ void Atom::print_Atom(std::ofstream& ofs) return; } -#include "module_base/parallel_common.h" +#include "source_base/parallel_common.h" #ifdef __MPI void Atom::bcast_atom() { diff --git a/source/module_cell/bcast_cell.cpp b/source/module_cell/bcast_cell.cpp index bb07b54e82..1a05a565f4 100644 --- a/source/module_cell/bcast_cell.cpp +++ b/source/module_cell/bcast_cell.cpp @@ -1,121 +1,118 @@ -#include "unitcell.h" -#include "module_base/parallel_common.h" #include "module_parameter/parameter.h" +#include "source_base/parallel_common.h" +#include "unitcell.h" #ifdef __EXX -#include "module_ri/serialization_cereal.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_ri/serialization_cereal.h" #endif namespace unitcell { - void bcast_atoms_tau(Atom* atoms, - const int ntype) - { - #ifdef __MPI - MPI_Barrier(MPI_COMM_WORLD); - for (int i = 0; i < ntype; i++) { - atoms[i].bcast_atom(); // bcast tau array - } - #endif - } - - void bcast_atoms_pseudo(Atom* atoms, - const int ntype) +void bcast_atoms_tau(Atom* atoms, const int ntype) +{ +#ifdef __MPI + MPI_Barrier(MPI_COMM_WORLD); + for (int i = 0; i < ntype; i++) { - #ifdef __MPI - MPI_Barrier(MPI_COMM_WORLD); - for (int i = 0; i < ntype; i++) - { - atoms[i].bcast_atom2(); - } - #endif + atoms[i].bcast_atom(); // bcast tau array } +#endif +} - void bcast_Lattice(Lattice& lat) +void bcast_atoms_pseudo(Atom* atoms, const int ntype) +{ +#ifdef __MPI + MPI_Barrier(MPI_COMM_WORLD); + for (int i = 0; i < ntype; i++) { - #ifdef __MPI - MPI_Barrier(MPI_COMM_WORLD); - // distribute lattice parameters. - ModuleBase::Matrix3& latvec = lat.latvec; - ModuleBase::Matrix3& latvec_supercell = lat.latvec_supercell; - Parallel_Common::bcast_string(lat.Coordinate); - Parallel_Common::bcast_double(lat.lat0); - Parallel_Common::bcast_double(lat.lat0_angstrom); - Parallel_Common::bcast_double(lat.tpiba); - Parallel_Common::bcast_double(lat.tpiba2); - Parallel_Common::bcast_double(lat.omega); - Parallel_Common::bcast_string(lat.latName); - - // distribute lattice vectors. - Parallel_Common::bcast_double(latvec.e11); - Parallel_Common::bcast_double(latvec.e12); - Parallel_Common::bcast_double(latvec.e13); - Parallel_Common::bcast_double(latvec.e21); - Parallel_Common::bcast_double(latvec.e22); - Parallel_Common::bcast_double(latvec.e23); - Parallel_Common::bcast_double(latvec.e31); - Parallel_Common::bcast_double(latvec.e32); - Parallel_Common::bcast_double(latvec.e33); + atoms[i].bcast_atom2(); + } +#endif +} - // distribute lattice vectors. - for (int i = 0; i < 3; i++) - { - Parallel_Common::bcast_double(lat.a1[i]); - Parallel_Common::bcast_double(lat.a2[i]); - Parallel_Common::bcast_double(lat.a3[i]); - Parallel_Common::bcast_double(lat.latcenter[i]); - Parallel_Common::bcast_int(lat.lc[i]); - } +void bcast_Lattice(Lattice& lat) +{ +#ifdef __MPI + MPI_Barrier(MPI_COMM_WORLD); + // distribute lattice parameters. + ModuleBase::Matrix3& latvec = lat.latvec; + ModuleBase::Matrix3& latvec_supercell = lat.latvec_supercell; + Parallel_Common::bcast_string(lat.Coordinate); + Parallel_Common::bcast_double(lat.lat0); + Parallel_Common::bcast_double(lat.lat0_angstrom); + Parallel_Common::bcast_double(lat.tpiba); + Parallel_Common::bcast_double(lat.tpiba2); + Parallel_Common::bcast_double(lat.omega); + Parallel_Common::bcast_string(lat.latName); - // distribute superlattice vectors. - Parallel_Common::bcast_double(latvec_supercell.e11); - Parallel_Common::bcast_double(latvec_supercell.e12); - Parallel_Common::bcast_double(latvec_supercell.e13); - Parallel_Common::bcast_double(latvec_supercell.e21); - Parallel_Common::bcast_double(latvec_supercell.e22); - Parallel_Common::bcast_double(latvec_supercell.e23); - Parallel_Common::bcast_double(latvec_supercell.e31); - Parallel_Common::bcast_double(latvec_supercell.e32); - Parallel_Common::bcast_double(latvec_supercell.e33); + // distribute lattice vectors. + Parallel_Common::bcast_double(latvec.e11); + Parallel_Common::bcast_double(latvec.e12); + Parallel_Common::bcast_double(latvec.e13); + Parallel_Common::bcast_double(latvec.e21); + Parallel_Common::bcast_double(latvec.e22); + Parallel_Common::bcast_double(latvec.e23); + Parallel_Common::bcast_double(latvec.e31); + Parallel_Common::bcast_double(latvec.e32); + Parallel_Common::bcast_double(latvec.e33); - // distribute Change the lattice vectors or not - #endif - } - - void bcast_magnetism(Magnetism& magnet, const int ntype) + // distribute lattice vectors. + for (int i = 0; i < 3; i++) { - #ifdef __MPI - MPI_Barrier(MPI_COMM_WORLD); - Parallel_Common::bcast_double(magnet.start_mag, ntype); - if (PARAM.inp.nspin == 4) - { - Parallel_Common::bcast_double(magnet.ux_[0]); - Parallel_Common::bcast_double(magnet.ux_[1]); - Parallel_Common::bcast_double(magnet.ux_[2]); - } - #endif + Parallel_Common::bcast_double(lat.a1[i]); + Parallel_Common::bcast_double(lat.a2[i]); + Parallel_Common::bcast_double(lat.a3[i]); + Parallel_Common::bcast_double(lat.latcenter[i]); + Parallel_Common::bcast_int(lat.lc[i]); } - void bcast_unitcell(UnitCell& ucell) + // distribute superlattice vectors. + Parallel_Common::bcast_double(latvec_supercell.e11); + Parallel_Common::bcast_double(latvec_supercell.e12); + Parallel_Common::bcast_double(latvec_supercell.e13); + Parallel_Common::bcast_double(latvec_supercell.e21); + Parallel_Common::bcast_double(latvec_supercell.e22); + Parallel_Common::bcast_double(latvec_supercell.e23); + Parallel_Common::bcast_double(latvec_supercell.e31); + Parallel_Common::bcast_double(latvec_supercell.e32); + Parallel_Common::bcast_double(latvec_supercell.e33); + + // distribute Change the lattice vectors or not +#endif +} + +void bcast_magnetism(Magnetism& magnet, const int ntype) +{ +#ifdef __MPI + MPI_Barrier(MPI_COMM_WORLD); + Parallel_Common::bcast_double(magnet.start_mag, ntype); + if (PARAM.inp.nspin == 4) { - #ifdef __MPI - const int ntype = ucell.ntype; - Parallel_Common::bcast_int(ucell.nat); + Parallel_Common::bcast_double(magnet.ux_[0]); + Parallel_Common::bcast_double(magnet.ux_[1]); + Parallel_Common::bcast_double(magnet.ux_[2]); + } +#endif +} - bcast_Lattice(ucell.lat); - bcast_magnetism(ucell.magnet,ntype); - bcast_atoms_tau(ucell.atoms,ntype); +void bcast_unitcell(UnitCell& ucell) +{ +#ifdef __MPI + const int ntype = ucell.ntype; + Parallel_Common::bcast_int(ucell.nat); - for (int i = 0; i < ntype; i++) - { - Parallel_Common::bcast_string(ucell.orbital_fn[i]); - } + bcast_Lattice(ucell.lat); + bcast_magnetism(ucell.magnet, ntype); + bcast_atoms_tau(ucell.atoms, ntype); - #ifdef __EXX - ModuleBase::bcast_data_cereal(GlobalC::exx_info.info_ri.files_abfs, - MPI_COMM_WORLD, - 0); - #endif - return; - #endif + for (int i = 0; i < ntype; i++) + { + Parallel_Common::bcast_string(ucell.orbital_fn[i]); } + +#ifdef __EXX + ModuleBase::bcast_data_cereal(GlobalC::exx_info.info_ri.files_abfs, MPI_COMM_WORLD, 0); +#endif + return; +#endif } +} // namespace unitcell diff --git a/source/module_cell/cell_index.cpp b/source/module_cell/cell_index.cpp index 3470d1ee82..b7d7722c21 100644 --- a/source/module_cell/cell_index.cpp +++ b/source/module_cell/cell_index.cpp @@ -1,7 +1,8 @@ #include "cell_index.h" -#include "module_base/name_angular.h" -#include "module_base/tool_quit.h" +#include "source_base/name_angular.h" +#include "source_base/tool_quit.h" + #include CellIndex::CellIndex(const std::vector& atomLabels_in, @@ -185,7 +186,7 @@ int CellIndex::iw2l(int iat, int iw) { ModuleBase::WARNING_QUIT("CellIndex::iw2l", "localized wave funciton index out of range [0, nw)"); } - throw std::out_of_range(std::string(__FILE__)+" line "+std::to_string(__LINE__)); + throw std::out_of_range(std::string(__FILE__) + " line " + std::to_string(__LINE__)); } int CellIndex::iw2z(int iat, int iw) @@ -210,7 +211,7 @@ int CellIndex::iw2z(int iat, int iw) { ModuleBase::WARNING_QUIT("CellIndex::iw2l", "localized wave funciton index out of range [0, nw)"); } - throw std::out_of_range(std::string(__FILE__)+" line "+std::to_string(__LINE__)); + throw std::out_of_range(std::string(__FILE__) + " line " + std::to_string(__LINE__)); } int CellIndex::iw2m(int iat, int iw) @@ -235,7 +236,7 @@ int CellIndex::iw2m(int iat, int iw) { ModuleBase::WARNING_QUIT("CellIndex::iw2l", "localized wave funciton index out of range [0, nw)"); } - throw std::out_of_range(std::string(__FILE__)+" line "+std::to_string(__LINE__)); + throw std::out_of_range(std::string(__FILE__) + " line " + std::to_string(__LINE__)); } bool CellIndex::check_nspin(int nspin) diff --git a/source/module_cell/check_atomic_stru.cpp b/source/module_cell/check_atomic_stru.cpp index b22cfe985d..021db6a414 100644 --- a/source/module_cell/check_atomic_stru.cpp +++ b/source/module_cell/check_atomic_stru.cpp @@ -1,7 +1,7 @@ #include "check_atomic_stru.h" -#include "module_base/element_covalent_radius.h" -#include "module_base/timer.h" +#include "source_base/element_covalent_radius.h" +#include "source_base/timer.h" namespace unitcell { @@ -21,7 +21,7 @@ void check_atomic_stru(UnitCell& ucell, const double& factor) if (GlobalV::MY_RANK == 0) { - + const int ntype = ucell.ntype; const double lat0 = ucell.lat0; const double warning_coef = 0.6; @@ -52,7 +52,7 @@ void check_atomic_stru(UnitCell& ucell, const double& factor) std::cout << mess.str(); } } - std::vector latvec (9); + std::vector latvec(9); latvec[0] = ucell.a1.x; latvec[1] = ucell.a2.x; latvec[2] = ucell.a3.x; @@ -62,7 +62,7 @@ void check_atomic_stru(UnitCell& ucell, const double& factor) latvec[6] = ucell.a1.z; latvec[7] = ucell.a2.z; latvec[8] = ucell.a3.z; - std::vector A(27*3); + std::vector A(27 * 3); std::vector cell(27); std::vector label(ntype); for (int i = 0; i < 27; i++) @@ -127,7 +127,7 @@ void check_atomic_stru(UnitCell& ucell, const double& factor) if (flag) { const double sqrt_bon = sqrt(bond_length) * lat0; - #pragma omp critical +#pragma omp critical { no_warning = false; all_pass = all_pass && (sqrt_bon < factor_error ? false : true); @@ -136,10 +136,10 @@ void check_atomic_stru(UnitCell& ucell, const double& factor) << sqrt_bon << " Bohr (" << sqrt_bon * bohr_to_a << " Angstrom)\n"; } } - } + } } // ia2 - } // it2 - } // iat + } // it2 + } // iat } } if (!all_pass || !no_warning) @@ -171,4 +171,4 @@ void check_atomic_stru(UnitCell& ucell, const double& factor) ModuleBase::timer::tick("unitcell", "check_atomic_stru"); } -} +} // namespace unitcell diff --git a/source/module_cell/k_vector_utils.cpp b/source/module_cell/k_vector_utils.cpp index a9dd7e7f56..e4d84489a0 100644 --- a/source/module_cell/k_vector_utils.cpp +++ b/source/module_cell/k_vector_utils.cpp @@ -4,13 +4,12 @@ #include "k_vector_utils.h" #include "klist.h" -#include "module_base/global_variable.h" -#include "module_base/matrix3.h" - -#include "module_base/formatter.h" -#include "module_base/parallel_common.h" -#include "module_base/parallel_reduce.h" #include "module_parameter/parameter.h" +#include "source_base/formatter.h" +#include "source_base/global_variable.h" +#include "source_base/matrix3.h" +#include "source_base/parallel_common.h" +#include "source_base/parallel_reduce.h" namespace KVectorUtils { @@ -341,7 +340,6 @@ void kvec_mpi_k(K_Vectors& kv) } // END SUBROUTINE #endif - void kvec_ibz_kpoint(K_Vectors& kv, const ModuleSymmetry::Symmetry& symm, bool use_symm, @@ -365,9 +363,12 @@ void kvec_ibz_kpoint(K_Vectors& kv, ModuleBase::Matrix3 k_vec; if (kv.get_is_mp()) { - k_vec1 = ModuleBase::Vector3(recip_vec1.x / kv.nmp[0], recip_vec1.y / kv.nmp[0], recip_vec1.z / kv.nmp[0]); - k_vec2 = ModuleBase::Vector3(recip_vec2.x / kv.nmp[1], recip_vec2.y / kv.nmp[1], recip_vec2.z / kv.nmp[1]); - k_vec3 = ModuleBase::Vector3(recip_vec3.x / kv.nmp[2], recip_vec3.y / kv.nmp[2], recip_vec3.z / kv.nmp[2]); + k_vec1 + = ModuleBase::Vector3(recip_vec1.x / kv.nmp[0], recip_vec1.y / kv.nmp[0], recip_vec1.z / kv.nmp[0]); + k_vec2 + = ModuleBase::Vector3(recip_vec2.x / kv.nmp[1], recip_vec2.y / kv.nmp[1], recip_vec2.z / kv.nmp[1]); + k_vec3 + = ModuleBase::Vector3(recip_vec3.x / kv.nmp[2], recip_vec3.y / kv.nmp[2], recip_vec3.z / kv.nmp[2]); k_vec = ModuleBase::Matrix3(k_vec1.x, k_vec1.y, k_vec1.z, diff --git a/source/module_cell/k_vector_utils.h b/source/module_cell/k_vector_utils.h index c492a49ad0..684ec1571d 100644 --- a/source/module_cell/k_vector_utils.h +++ b/source/module_cell/k_vector_utils.h @@ -5,9 +5,9 @@ #ifndef K_VECTOR_UTILS_H #define K_VECTOR_UTILS_H -#include "module_base/global_variable.h" -#include "module_base/matrix3.h" #include "module_cell/unitcell.h" +#include "source_base/global_variable.h" +#include "source_base/matrix3.h" class K_Vectors; diff --git a/source/module_cell/klist.cpp b/source/module_cell/klist.cpp index da5f9f16a0..ba673b4ba8 100644 --- a/source/module_cell/klist.cpp +++ b/source/module_cell/klist.cpp @@ -1,22 +1,22 @@ #include "klist.h" #include "k_vector_utils.h" -#include "module_base/formatter.h" -#include "module_base/memory.h" -#include "module_base/parallel_common.h" -#include "module_base/parallel_global.h" -#include "module_base/parallel_reduce.h" #include "module_cell/module_symmetry/symmetry.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/berryphase.h" #include "module_parameter/parameter.h" +#include "source_base/formatter.h" +#include "source_base/memory.h" +#include "source_base/parallel_common.h" +#include "source_base/parallel_global.h" +#include "source_base/parallel_reduce.h" void K_Vectors::cal_ik_global() { const int my_pool = this->para_k.my_pool; this->ik2iktot.resize(this->nks); #ifdef __MPI - if(this->nspin == 2) + if (this->nspin == 2) { for (int ik = 0; ik < this->nks / 2; ++ik) { @@ -37,7 +37,6 @@ void K_Vectors::cal_ik_global() this->ik2iktot[ik] = ik; } #endif - } void K_Vectors::set(const UnitCell& ucell, @@ -75,7 +74,7 @@ void K_Vectors::set(const UnitCell& ucell, this->nspin = (this->nspin == 4) ? 1 : this->nspin; // read KPT file and generate K-point grid - bool read_succesfully = this->read_kpoints(ucell,k_file_name); + bool read_succesfully = this->read_kpoints(ucell, k_file_name); #ifdef __MPI Parallel_Common::bcast_bool(read_succesfully); #endif @@ -111,9 +110,10 @@ void K_Vectors::set(const UnitCell& ucell, ModuleSymmetry::Symmetry::symm_flag = 0; match = true; KVectorUtils::kvec_ibz_kpoint(*this, symm, ModuleSymmetry::Symmetry::symm_flag, skpt1, ucell, match); - } else { - ModuleBase::WARNING_QUIT("K_Vectors::ibz_kpoint", - "Possible solutions: \n \ + } + else + { + ModuleBase::WARNING_QUIT("K_Vectors::ibz_kpoint", "Possible solutions: \n \ 1. Refine the lattice parameters in STRU;\n \ 2. Use a different`symmetry_prec`. \n \ 3. Close symemtry: set `symmetry` to 0 in INPUT. \n \ @@ -126,15 +126,15 @@ void K_Vectors::set(const UnitCell& ucell, // Improve k point information // Complement the coordinates of k point -// this->set_both_kvec(reciprocal_vec, latvec, skpt2); + // this->set_both_kvec(reciprocal_vec, latvec, skpt2); KVectorUtils::set_both_kvec(*this, reciprocal_vec, latvec, skpt2); if (GlobalV::MY_RANK == 0) { // output kpoints file std::stringstream skpt; - skpt << PARAM.globalv.global_out_dir << "KPT.info"; //mohan modified 20250325 - std::ofstream ofkpt(skpt.str().c_str()); // clear kpoints + skpt << PARAM.globalv.global_out_dir << "KPT.info"; // mohan modified 20250325 + std::ofstream ofkpt(skpt.str().c_str()); // clear kpoints ofkpt << skpt2 << skpt1; ofkpt.close(); } @@ -185,8 +185,7 @@ void K_Vectors::renew(const int& kpoint_number) // Read the KPT file, which contains K-point coordinates, weights, and grid size information // Generate K-point grid according to different parameters of the KPT file -bool K_Vectors::read_kpoints(const UnitCell& ucell, - const std::string& fn) +bool K_Vectors::read_kpoints(const UnitCell& ucell, const std::string& fn) { ModuleBase::TITLE("K_Vectors", "read_kpoints"); if (GlobalV::MY_RANK != 0) @@ -217,12 +216,9 @@ bool K_Vectors::read_kpoints(const UnitCell& ucell, double b1 = sqrt(btmp.e11 * btmp.e11 + btmp.e12 * btmp.e12 + btmp.e13 * btmp.e13); double b2 = sqrt(btmp.e21 * btmp.e21 + btmp.e22 * btmp.e22 + btmp.e23 * btmp.e23); double b3 = sqrt(btmp.e31 * btmp.e31 + btmp.e32 * btmp.e32 + btmp.e33 * btmp.e33); - int nk1 - = std::max(1, static_cast(b1 * ModuleBase::TWO_PI / PARAM.inp.kspacing[0] / ucell.lat0 + 1)); - int nk2 - = std::max(1, static_cast(b2 * ModuleBase::TWO_PI / PARAM.inp.kspacing[1] / ucell.lat0 + 1)); - int nk3 - = std::max(1, static_cast(b3 * ModuleBase::TWO_PI / PARAM.inp.kspacing[2] / ucell.lat0 + 1)); + int nk1 = std::max(1, static_cast(b1 * ModuleBase::TWO_PI / PARAM.inp.kspacing[0] / ucell.lat0 + 1)); + int nk2 = std::max(1, static_cast(b2 * ModuleBase::TWO_PI / PARAM.inp.kspacing[1] / ucell.lat0 + 1)); + int nk3 = std::max(1, static_cast(b3 * ModuleBase::TWO_PI / PARAM.inp.kspacing[2] / ucell.lat0 + 1)); GlobalV::ofs_warning << " Generate k-points file according to KSPACING: " << fn << std::endl; std::ofstream ofs(fn.c_str()); @@ -421,7 +417,8 @@ void K_Vectors::interpolate_k_between(std::ifstream& ifk, std::vector= 0); nkstot += nkl[iks]; /* ISSUE#3482: to distinguish different kline segments */ - if ((nkl[iks] == 1) && (iks != (nks_special - 1))) { + if ((nkl[iks] == 1) && (iks != (nks_special - 1))) + { kpt_segid++; } kpt_segids.push_back(kpt_segid); @@ -486,19 +483,22 @@ void K_Vectors::Monkhorst_Pack(const int* nmp_in, const double* koffset_in, cons for (int x = 1; x <= mpnx; x++) { double v1 = Monkhorst_Pack_formula(k_type, koffset_in[0], x, mpnx); - if (std::abs(v1) < 1.0e-10) { + if (std::abs(v1) < 1.0e-10) + { v1 = 0.0; // mohan update 2012-06-10 } for (int y = 1; y <= mpny; y++) { double v2 = Monkhorst_Pack_formula(k_type, koffset_in[1], y, mpny); - if (std::abs(v2) < 1.0e-10) { + if (std::abs(v2) < 1.0e-10) + { v2 = 0.0; } for (int z = 1; z <= mpnz; z++) { double v3 = Monkhorst_Pack_formula(k_type, koffset_in[2], z, mpnz); - if (std::abs(v3) < 1.0e-10) { + if (std::abs(v3) < 1.0e-10) + { v3 = 0.0; } // index of nks kpoint @@ -522,7 +522,8 @@ void K_Vectors::update_use_ibz(const int& nkstot_ibz, const std::vector>& kvec_d_ibz, const std::vector& wk_ibz) { - if (GlobalV::MY_RANK != 0) { + if (GlobalV::MY_RANK != 0) + { return; } ModuleBase::TITLE("K_Vectors", "update_use_ibz"); @@ -550,7 +551,8 @@ void K_Vectors::update_use_ibz(const int& nkstot_ibz, void K_Vectors::normalize_wk(const int& degspin) { - if (GlobalV::MY_RANK != 0) { + if (GlobalV::MY_RANK != 0) + { return; } double sum = 0.0; diff --git a/source/module_cell/klist.h b/source/module_cell/klist.h index a832c1959f..14979b5364 100644 --- a/source/module_cell/klist.h +++ b/source/module_cell/klist.h @@ -1,17 +1,18 @@ #ifndef K_VECTORS_H #define K_VECTORS_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/matrix3.h" +#include "k_vector_utils.h" #include "module_cell/unitcell.h" #include "parallel_kpoints.h" -#include "k_vector_utils.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/matrix3.h" + #include class K_Vectors { -public: + public: std::vector> kvec_c; /// Cartesian coordinates of k points std::vector> kvec_d; /// Direct coordinates of k points @@ -20,10 +21,10 @@ class K_Vectors std::vector ngk; /// ngk, number of plane waves for each k point std::vector isk; /// distinguish spin up and down k points - int nmp[3]={0}; /// Number of Monhorst-Pack + int nmp[3] = {0}; /// Number of Monhorst-Pack std::vector kl_segids; /// index of kline segment - /// @brief equal k points to each ibz-kpont, corresponding to a certain symmetry operations. + /// @brief equal k points to each ibz-kpont, corresponding to a certain symmetry operations. /// dim: [iks_ibz][(isym, kvec_d)] std::vector>> kstars; @@ -37,7 +38,6 @@ class K_Vectors Parallel_Kpoints para_k; ///< parallel for kpoints - /** * @brief Set up the k-points for the system. * @@ -58,12 +58,12 @@ class K_Vectors * @note Only available for nspin = 1 or 2 or 4. */ void set(const UnitCell& ucell, - const ModuleSymmetry::Symmetry& symm, - const std::string& k_file_name, - const int& nspin, - const ModuleBase::Matrix3& reciprocal_vec, - const ModuleBase::Matrix3& latvec, - std::ofstream& ofs); + const ModuleSymmetry::Symmetry& symm, + const std::string& k_file_name, + const int& nspin, + const ModuleBase::Matrix3& reciprocal_vec, + const ModuleBase::Matrix3& latvec, + std::ofstream& ofs); int get_nks() const { @@ -278,8 +278,6 @@ class K_Vectors */ void normalize_wk(const int& degspin); - - // step 4 : *2 kpoints. /** diff --git a/source/module_cell/module_neighbor/sltk_atom.h b/source/module_cell/module_neighbor/sltk_atom.h index 76b4a8c314..89ae81507f 100644 --- a/source/module_cell/module_neighbor/sltk_atom.h +++ b/source/module_cell/module_neighbor/sltk_atom.h @@ -1,44 +1,50 @@ #ifndef INCLUDE_FATOM #define INCLUDE_FATOM -#include #include "sltk_util.h" -#include "module_base/timer.h" +#include "source_base/timer.h" + +#include #include -// a class contains the atom position, +// a class contains the atom position, // the type and the index, class FAtom { -public: - double x; - double y; - double z; + public: + double x; + double y; + double z; - int type; - int natom; + int type; + int natom; - int cell_x; - int cell_y; - int cell_z; + int cell_x; + int cell_y; + int cell_z; - FAtom(); - FAtom(const double& x_in, const double& y_in, const double& z_in, - const int& type_in, const int& natom_in, - const int& cell_x_in, const int& cell_y_in, const int& cell_z_in) - { - x = x_in; - y = y_in; - z = z_in; - type = type_in; - natom = natom_in; - cell_x = cell_x_in; - cell_y = cell_y_in; - cell_z = cell_z_in; - } - ~FAtom() - { - } + FAtom(); + FAtom(const double& x_in, + const double& y_in, + const double& z_in, + const int& type_in, + const int& natom_in, + const int& cell_x_in, + const int& cell_y_in, + const int& cell_z_in) + { + x = x_in; + y = y_in; + z = z_in; + type = type_in; + natom = natom_in; + cell_x = cell_x_in; + cell_y = cell_y_in; + cell_z = cell_z_in; + } + ~FAtom() + { + } }; #endif diff --git a/source/module_cell/module_neighbor/sltk_atom_arrange.cpp b/source/module_cell/module_neighbor/sltk_atom_arrange.cpp index 24c72a4a12..a12091df45 100644 --- a/source/module_cell/module_neighbor/sltk_atom_arrange.cpp +++ b/source/module_cell/module_neighbor/sltk_atom_arrange.cpp @@ -1,9 +1,9 @@ #include "sltk_atom_arrange.h" -#include "module_base/timer.h" #include "module_parameter/parameter.h" #include "sltk_grid.h" #include "sltk_grid_driver.h" +#include "source_base/timer.h" // update the followig class in near future #include "module_cell/unitcell.h" @@ -32,7 +32,7 @@ double atom_arrange::set_sr_NL(std::ofstream& ofs_in, else { sr = 2 * (rcutmax_Phi + rcutmax_Beta) + 0.001; // 0.001 is added to make safe. - // sr = 2 * longest_orb_rcut + 0.001; + // sr = 2 * longest_orb_rcut + 0.001; } if (output_level != "m") // xiaohui add 'output_level', 2015-09-16 @@ -54,7 +54,7 @@ double atom_arrange::set_sr_NL(std::ofstream& ofs_in, ModuleBase::GlobalFunc::OUT(ofs_in, "longest orb rcut (Bohr)", rcutmax_Phi); ModuleBase::GlobalFunc::OUT(ofs_in, "longest nonlocal projector rcut (Bohr)", rcutmax_Beta); ModuleBase::GlobalFunc::OUT(ofs_in, "search radius (Bohr)", sr); - } + } return sr; } @@ -83,10 +83,11 @@ void atom_arrange::search(const bool pbc_flag, /* 2024-12-04 Zhang Haochong The neighboring atom search module has been completely rewritten. - The new algorithm places atoms into boxes with an edge length of twice the atomic radius. The neighboring + The new algorithm places atoms into boxes with an edge length of twice the atomic radius. The neighboring atom list stores the data using the atom's type and its index within that type. - By setting pbc_flag = false, periodic boundary conditions can be forcibly disabled. In this case, the search - process will not expand the supercell, and the neighboring atoms will only consider those within the original unit cell. + By setting pbc_flag = false, periodic boundary conditions can be forcibly disabled. In this case, the search + process will not expand the supercell, and the neighboring atoms will only consider those within the original unit + cell. */ const double radius_lat0unit = search_radius_bohr / ucell.lat0; @@ -94,7 +95,8 @@ void atom_arrange::search(const bool pbc_flag, grid_d.init(ofs_in, ucell, radius_lat0unit, pbc_flag); - // The screen output is very time-consuming. To avoid interfering with the timing, we will insert logging here earlier. + // The screen output is very time-consuming. To avoid interfering with the timing, we will insert logging here + // earlier. ModuleBase::timer::tick("atom_arrange", "search"); if (test_only) @@ -114,7 +116,8 @@ void atom_arrange::search(const bool pbc_flag, ofs_in << " " << std::setw(5) << it << std::setw(5) << ia << std::setw(8) << grid_d.getAdjacentNum() + 1 << std::endl; - std::cout << " adjacent atoms of " << ucell.atoms[it].label + std::to_string(ia + 1) << ":" << std::endl; + std::cout << " adjacent atoms of " << ucell.atoms[it].label + std::to_string(ia + 1) << ":" + << std::endl; std::cout << "getAdjacentNum: " << grid_d.getAdjacentNum() + 1 << std::endl; /* for (int ad = 0; ad < grid_d.getAdjacentNum() + 1; ad++) diff --git a/source/module_cell/module_neighbor/sltk_grid.cpp b/source/module_cell/module_neighbor/sltk_grid.cpp index 73ccbcf989..7dd2bc1f00 100644 --- a/source/module_cell/module_neighbor/sltk_grid.cpp +++ b/source/module_cell/module_neighbor/sltk_grid.cpp @@ -1,9 +1,9 @@ #include "sltk_grid.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/memory.h" -#include "module_base/timer.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" +#include "source_base/timer.h" Grid::Grid(const int& test_grid_in) : test_grid(test_grid_in) { @@ -140,10 +140,8 @@ void Grid::Check_Expand_Condition(const UnitCell& ucell) glayerY_minus = extend_d22; glayerZ_minus = extend_d33; // End, 2016-09-05, LiuXh - } - void Grid::setMemberVariables(std::ofstream& ofs_in, // output data to ofs const UnitCell& ucell) { @@ -202,22 +200,22 @@ void Grid::setMemberVariables(std::ofstream& ofs_in, // output data to ofs this->box_edge_length = sradius + 0.1; // To avoid edge cases, the size of the box is slightly increased. -/* warning box algorithm - this->box_nx = std::ceil((this->x_max - this->x_min) / box_edge_length) + 1; - this->box_ny = std::ceil((this->y_max - this->y_min) / box_edge_length) + 1; - this->box_nz = std::ceil((this->z_max - this->z_min) / box_edge_length) + 1; - ModuleBase::GlobalFunc::OUT(ofs_in, "BoxNumber", box_nx, box_ny, box_nz); + /* warning box algorithm + this->box_nx = std::ceil((this->x_max - this->x_min) / box_edge_length) + 1; + this->box_ny = std::ceil((this->y_max - this->y_min) / box_edge_length) + 1; + this->box_nz = std::ceil((this->z_max - this->z_min) / box_edge_length) + 1; + ModuleBase::GlobalFunc::OUT(ofs_in, "BoxNumber", box_nx, box_ny, box_nz); - atoms_in_box.resize(this->box_nx); - for (int i = 0; i < this->box_nx; i++) - { - atoms_in_box[i].resize(this->box_ny); - for (int j = 0; j < this->box_ny; j++) + atoms_in_box.resize(this->box_nx); + for (int i = 0; i < this->box_nx; i++) { - atoms_in_box[i][j].resize(this->box_nz); + atoms_in_box[i].resize(this->box_ny); + for (int j = 0; j < this->box_ny; j++) + { + atoms_in_box[i][j].resize(this->box_nz); + } } - } - */ + */ this->box_nx = glayerX + glayerX_minus; this->box_ny = glayerY + glayerY_minus; this->box_nz = glayerZ + glayerZ_minus; @@ -247,7 +245,7 @@ void Grid::setMemberVariables(std::ofstream& ofs_in, // output data to ofs double z = ucell.atoms[i].tau[j].z + vec1[2] * ix + vec2[2] * iy + vec3[2] * iz; FAtom atom(x, y, z, i, j, ix, iy, iz); int box_i_x, box_i_y, box_i_z; - //this->getBox(box_i_x, box_i_y, box_i_z, x, y, z); + // this->getBox(box_i_x, box_i_y, box_i_z, x, y, z); box_i_x = ix + glayerX_minus; box_i_y = iy + glayerY_minus; box_i_z = iz + glayerZ_minus; @@ -257,7 +255,7 @@ void Grid::setMemberVariables(std::ofstream& ofs_in, // output data to ofs } } } - + this->all_adj_info.resize(ucell.ntype); for (int i = 0; i < ucell.ntype; i++) { @@ -269,17 +267,19 @@ void Grid::Construct_Adjacent(const UnitCell& ucell) { ModuleBase::timer::tick("Grid", "constru_adj"); - for (int i_type = 0; i_type < ucell.ntype; i_type++) + for (int i_type = 0; i_type < ucell.ntype; i_type++) { for (int j_atom = 0; j_atom < ucell.atoms[i_type].na; j_atom++) { FAtom atom(ucell.atoms[i_type].tau[j_atom].x, - ucell.atoms[i_type].tau[j_atom].y, - ucell.atoms[i_type].tau[j_atom].z, - i_type, - j_atom, - 0, 0 ,0); + ucell.atoms[i_type].tau[j_atom].y, + ucell.atoms[i_type].tau[j_atom].z, + i_type, + j_atom, + 0, + 0, + 0); this->Construct_Adjacent_near_box(atom); } @@ -290,9 +290,9 @@ void Grid::Construct_Adjacent(const UnitCell& ucell) void Grid::Construct_Adjacent_near_box(const FAtom& fatom) { ModuleBase::timer::tick("Grid", "adj_near_box"); - int box_i_x=0; - int box_i_y=0; - int box_i_z=0; + int box_i_x = 0; + int box_i_y = 0; + int box_i_z = 0; this->getBox(box_i_x, box_i_y, box_i_z, fatom.x, fatom.y, fatom.z); for (int box_i_x_adj = 0; box_i_x_adj < glayerX + glayerX_minus; box_i_x_adj++) @@ -301,7 +301,7 @@ void Grid::Construct_Adjacent_near_box(const FAtom& fatom) { for (int box_i_z_adj = 0; box_i_z_adj < glayerZ + glayerZ_minus; box_i_z_adj++) { - for (auto &fatom2 : this->atoms_in_box[box_i_x_adj][box_i_y_adj][box_i_z_adj]) + for (auto& fatom2: this->atoms_in_box[box_i_x_adj][box_i_y_adj][box_i_z_adj]) { this->Construct_Adjacent_final(fatom, &fatom2); } @@ -311,8 +311,7 @@ void Grid::Construct_Adjacent_near_box(const FAtom& fatom) ModuleBase::timer::tick("Grid", "adj_near_box"); } -void Grid::Construct_Adjacent_final(const FAtom& fatom1, - FAtom* fatom2) +void Grid::Construct_Adjacent_final(const FAtom& fatom1, FAtom* fatom2) { double delta_x = fatom1.x - fatom2->x; double delta_y = fatom1.y - fatom2->y; @@ -320,7 +319,6 @@ void Grid::Construct_Adjacent_final(const FAtom& fatom1, double dr = delta_x * delta_x + delta_y * delta_y + delta_z * delta_z; - // 20241204 zhanghaochong // dr == 0 means the same atom // the atom itself is neighbour atom, but the order itself must on last in the list. diff --git a/source/module_cell/module_neighbor/sltk_grid_driver.cpp b/source/module_cell/module_neighbor/sltk_grid_driver.cpp index 01aaf63bae..2400db2252 100644 --- a/source/module_cell/module_neighbor/sltk_grid_driver.cpp +++ b/source/module_cell/module_neighbor/sltk_grid_driver.cpp @@ -1,31 +1,25 @@ #include "sltk_grid_driver.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/timer.h" #include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/timer.h" #ifdef _OPENMP #include #endif -Grid_Driver::Grid_Driver( - const int &test_d_in, - const int &test_grid_in) -:test_deconstructor(test_d_in), -Grid(test_grid_in) +Grid_Driver::Grid_Driver(const int& test_d_in, const int& test_grid_in) + : test_deconstructor(test_d_in), Grid(test_grid_in) { - test_deconstructor = test_d_in; + test_deconstructor = test_d_in; } Grid_Driver::~Grid_Driver() { } -void Grid_Driver::Find_atom(const UnitCell& ucell, - const int ntype, - const int nnumber, - AdjacentAtomInfo* adjs) const +void Grid_Driver::Find_atom(const UnitCell& ucell, const int ntype, const int nnumber, AdjacentAtomInfo* adjs) const { ModuleBase::timer::tick("Grid_Driver", "Find_atom"); // std::cout << "lenght in Find atom = " << atomlink[offset].fatom.getAdjacentSet()->getLength() << std::endl; @@ -47,18 +41,20 @@ void Grid_Driver::Find_atom(const UnitCell& ucell, // for some unknown reason, the last neighbour atom must be it self // is self must in last, the order cannot be changed. // if self not in last, test 701_LJ_MD_Anderson will assert - local_adjs->ntype.push_back(ntype); - local_adjs->natom.push_back(nnumber); - local_adjs->box.push_back(ModuleBase::Vector3(0, 0, 0)); - local_adjs->adjacent_tau.push_back(ModuleBase::Vector3(ucell.atoms[ntype].tau[nnumber].x, ucell.atoms[ntype].tau[nnumber].y, ucell.atoms[ntype].tau[nnumber].z)); + local_adjs->ntype.push_back(ntype); + local_adjs->natom.push_back(nnumber); + local_adjs->box.push_back(ModuleBase::Vector3(0, 0, 0)); + local_adjs->adjacent_tau.push_back(ModuleBase::Vector3(ucell.atoms[ntype].tau[nnumber].x, + ucell.atoms[ntype].tau[nnumber].y, + ucell.atoms[ntype].tau[nnumber].z)); ModuleBase::timer::tick("Grid_Driver", "Find_atom"); return; } void Grid_Driver::Find_atom(const UnitCell& ucell, - const ModuleBase::Vector3& cartesian_posi, - const int& ntype, - const int& nnumber, - AdjacentAtomInfo* adjs) const + const ModuleBase::Vector3& cartesian_posi, + const int& ntype, + const int& nnumber, + AdjacentAtomInfo* adjs) const { this->Find_atom(ucell, ntype, nnumber, adjs); } diff --git a/source/module_cell/module_neighbor/sltk_grid_driver.h b/source/module_cell/module_neighbor/sltk_grid_driver.h index 1316420a1e..01d764f14a 100644 --- a/source/module_cell/module_neighbor/sltk_grid_driver.h +++ b/source/module_cell/module_neighbor/sltk_grid_driver.h @@ -1,13 +1,13 @@ #ifndef GRID_DRIVER_H #define GRID_DRIVER_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/vector3.h" #include "module_cell/unitcell.h" #include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" #include "sltk_atom.h" #include "sltk_grid.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/vector3.h" #include #include @@ -49,7 +49,10 @@ class Grid_Driver : public Grid // adjacent of this atom,and store the information // in 'adj_num','ntype','natom' //========================================================== - Grid_Driver(){ test_deconstructor = false; }; + Grid_Driver() + { + test_deconstructor = false; + }; Grid_Driver(const int& test_d_in, const int& test_grid_in); ~Grid_Driver(); @@ -65,10 +68,7 @@ class Grid_Driver : public Grid // 2. And store results into parameter adjs when adjs is // NOT NULL //========================================================== - void Find_atom(const UnitCell& ucell, - const int ntype, - const int nnumber, - AdjacentAtomInfo* adjs = nullptr) const; + void Find_atom(const UnitCell& ucell, const int ntype, const int nnumber, AdjacentAtomInfo* adjs = nullptr) const; // cartesian_posi and ucell is deprecated 20241204 zhanghaochong // this interface is deprecated, please use Find_atom above diff --git a/source/module_cell/module_neighbor/test/prepare_unitcell.h b/source/module_cell/module_neighbor/test/prepare_unitcell.h index a494215b9c..b49bd5a38e 100644 --- a/source/module_cell/module_neighbor/test/prepare_unitcell.h +++ b/source/module_cell/module_neighbor/test/prepare_unitcell.h @@ -1,328 +1,305 @@ #ifndef PREPARE_UNITCELL_H #define PREPARE_UNITCELL_H -#include -#include -#include "module_base/mathzone.h" +#include "source_base/mathzone.h" + +#include +#include class UcellTestPrepare { -public: - UcellTestPrepare()=default; - UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in); - UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in, - std::valarray mbl_in, - std::valarray velocity_in); - UcellTestPrepare(const UcellTestPrepare &utp); + public: + UcellTestPrepare() = default; + UcellTestPrepare(std::string latname_in, + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in); + UcellTestPrepare(std::string latname_in, + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in, + std::valarray mbl_in, + std::valarray velocity_in); + UcellTestPrepare(const UcellTestPrepare& utp); + + std::string latname; + int lmaxmax; + bool init_vel; + bool selective_dynamics; + bool relax_new; + std::string fixed_axes; + double lat0; + std::valarray latvec; + std::vector elements; + std::vector pp_files; + std::vector pp_types; + std::vector orb_files; + std::valarray natom; + std::vector atomic_mass; + std::string coor_type; + std::valarray coordinates; + std::valarray mbl; + std::valarray velocity; + // ntype + int ntype; + int atomic_index; - std::string latname; - int lmaxmax; - bool init_vel; - bool selective_dynamics; - bool relax_new; - std::string fixed_axes; - double lat0; - std::valarray latvec; - std::vector elements; - std::vector pp_files; - std::vector pp_types; - std::vector orb_files; - std::valarray natom; - std::vector atomic_mass; - std::string coor_type; - std::valarray coordinates; - std::valarray mbl; - std::valarray velocity; - // ntype - int ntype; - int atomic_index; + UnitCell* SetUcellInfo() + { + // basic info + this->ntype = this->elements.size(); + UnitCell* ucell = new UnitCell; + ucell->setup(this->latname, this->ntype, this->lmaxmax, this->init_vel, this->fixed_axes); - UnitCell* SetUcellInfo() - { - //basic info - this->ntype = this->elements.size(); - UnitCell* ucell = new UnitCell; - ucell->setup(this->latname, - this->ntype, - this->lmaxmax, - this->init_vel, - this->fixed_axes); - - delete[] ucell->magnet.start_mag; //mag set here - ucell->atom_label.resize(ucell->ntype); - ucell->atom_mass.resize(ucell->ntype); - ucell->pseudo_fn.resize(ucell->ntype); - ucell->pseudo_type.resize(ucell->ntype); - ucell->orbital_fn.resize(ucell->ntype); - ucell->magnet.start_mag = new double[ucell->ntype]; //mag set here - ucell->magnet.ux_[0] = 0.0; // ux_ set here - ucell->magnet.ux_[1] = 0.0; - ucell->magnet.ux_[2] = 0.0; - for(int it=0;itntype;++it) - { - ucell->atom_label[it] = this->elements[it]; - ucell->atom_mass[it] = this->atomic_mass[it]; - ucell->pseudo_fn[it] = this->pp_files[it]; - ucell->pseudo_type[it] = this->pp_types[it]; - ucell->orbital_fn[it] = this->orb_files[it]; - ucell->magnet.start_mag[it] = 0.0; //mag set here - } - //lattice info - ucell->lat0 = this->lat0; - ucell->lat0_angstrom = ucell->lat0 * 0.529177; - ucell->tpiba = ModuleBase::TWO_PI/ucell->lat0; - ucell->tpiba2 = ucell->tpiba * ucell->tpiba; - ucell->latvec.e11 = this->latvec[0]; - ucell->latvec.e12 = this->latvec[1]; - ucell->latvec.e13 = this->latvec[2]; - ucell->latvec.e21 = this->latvec[3]; - ucell->latvec.e22 = this->latvec[4]; - ucell->latvec.e23 = this->latvec[5]; - ucell->latvec.e31 = this->latvec[6]; - ucell->latvec.e32 = this->latvec[7]; - ucell->latvec.e33 = this->latvec[8]; - ucell->a1.x = ucell->latvec.e11; - ucell->a1.y = ucell->latvec.e12; - ucell->a1.z = ucell->latvec.e13; - ucell->a2.x = ucell->latvec.e21; - ucell->a2.y = ucell->latvec.e22; - ucell->a2.z = ucell->latvec.e23; - ucell->a3.x = ucell->latvec.e31; - ucell->a3.y = ucell->latvec.e32; - ucell->a3.z = ucell->latvec.e33; - ucell->GT = ucell->latvec.Inverse(); - ucell->G = ucell->GT.Transpose(); - ucell->GGT = ucell->G*ucell->GT; - ucell->invGGT = ucell->GGT.Inverse(); - ucell->omega = std::abs(ucell->latvec.Det())*(ucell->lat0)*(ucell->lat0)*(ucell->lat0); - //atomic info - ucell->Coordinate = this->coor_type; - ucell->atoms = new Atom[ucell->ntype]; - ucell->set_atom_flag = true; - this->atomic_index = 0; - for(int it=0;itntype;++it) - { - ucell->atoms[it].label = this->elements[it]; - ucell->atoms[it].nw = 0; - ucell->atoms[it].nwl = 2; - ucell->atoms[it].l_nchi.resize(ucell->atoms[it].nwl+1); - for(int L=0; Latoms[it].nwl+1; L++) - { - ucell->atoms[it].l_nchi[L] = 1; - ucell->atoms[it].nw += (2*L + 1) * ucell->atoms[it].l_nchi[L]; - } - ucell->atoms[it].na = this->natom[it]; - //coordinates and related physical quantities - ucell->atoms[it].tau.resize(ucell->atoms[it].na); - ucell->atoms[it].dis.resize(ucell->atoms[it].na); - ucell->atoms[it].taud.resize(ucell->atoms[it].na); - ucell->atoms[it].vel.resize(ucell->atoms[it].na); - ucell->atoms[it].mag.resize(ucell->atoms[it].na); - ucell->atoms[it].angle1.resize(ucell->atoms[it].na); - ucell->atoms[it].angle2.resize(ucell->atoms[it].na); - ucell->atoms[it].m_loc_.resize(ucell->atoms[it].na); - ucell->atoms[it].mbl.resize(ucell->atoms[it].na); - ucell->atoms[it].mass = ucell->atom_mass[it]; // mass set here + delete[] ucell->magnet.start_mag; // mag set here + ucell->atom_label.resize(ucell->ntype); + ucell->atom_mass.resize(ucell->ntype); + ucell->pseudo_fn.resize(ucell->ntype); + ucell->pseudo_type.resize(ucell->ntype); + ucell->orbital_fn.resize(ucell->ntype); + ucell->magnet.start_mag = new double[ucell->ntype]; // mag set here + ucell->magnet.ux_[0] = 0.0; // ux_ set here + ucell->magnet.ux_[1] = 0.0; + ucell->magnet.ux_[2] = 0.0; + for (int it = 0; it < ucell->ntype; ++it) + { + ucell->atom_label[it] = this->elements[it]; + ucell->atom_mass[it] = this->atomic_mass[it]; + ucell->pseudo_fn[it] = this->pp_files[it]; + ucell->pseudo_type[it] = this->pp_types[it]; + ucell->orbital_fn[it] = this->orb_files[it]; + ucell->magnet.start_mag[it] = 0.0; // mag set here + } + // lattice info + ucell->lat0 = this->lat0; + ucell->lat0_angstrom = ucell->lat0 * 0.529177; + ucell->tpiba = ModuleBase::TWO_PI / ucell->lat0; + ucell->tpiba2 = ucell->tpiba * ucell->tpiba; + ucell->latvec.e11 = this->latvec[0]; + ucell->latvec.e12 = this->latvec[1]; + ucell->latvec.e13 = this->latvec[2]; + ucell->latvec.e21 = this->latvec[3]; + ucell->latvec.e22 = this->latvec[4]; + ucell->latvec.e23 = this->latvec[5]; + ucell->latvec.e31 = this->latvec[6]; + ucell->latvec.e32 = this->latvec[7]; + ucell->latvec.e33 = this->latvec[8]; + ucell->a1.x = ucell->latvec.e11; + ucell->a1.y = ucell->latvec.e12; + ucell->a1.z = ucell->latvec.e13; + ucell->a2.x = ucell->latvec.e21; + ucell->a2.y = ucell->latvec.e22; + ucell->a2.z = ucell->latvec.e23; + ucell->a3.x = ucell->latvec.e31; + ucell->a3.y = ucell->latvec.e32; + ucell->a3.z = ucell->latvec.e33; + ucell->GT = ucell->latvec.Inverse(); + ucell->G = ucell->GT.Transpose(); + ucell->GGT = ucell->G * ucell->GT; + ucell->invGGT = ucell->GGT.Inverse(); + ucell->omega = std::abs(ucell->latvec.Det()) * (ucell->lat0) * (ucell->lat0) * (ucell->lat0); + // atomic info + ucell->Coordinate = this->coor_type; + ucell->atoms = new Atom[ucell->ntype]; + ucell->set_atom_flag = true; + this->atomic_index = 0; + for (int it = 0; it < ucell->ntype; ++it) + { + ucell->atoms[it].label = this->elements[it]; + ucell->atoms[it].nw = 0; + ucell->atoms[it].nwl = 2; + ucell->atoms[it].l_nchi.resize(ucell->atoms[it].nwl + 1); + for (int L = 0; L < ucell->atoms[it].nwl + 1; L++) + { + ucell->atoms[it].l_nchi[L] = 1; + ucell->atoms[it].nw += (2 * L + 1) * ucell->atoms[it].l_nchi[L]; + } + ucell->atoms[it].na = this->natom[it]; + // coordinates and related physical quantities + ucell->atoms[it].tau.resize(ucell->atoms[it].na); + ucell->atoms[it].dis.resize(ucell->atoms[it].na); + ucell->atoms[it].taud.resize(ucell->atoms[it].na); + ucell->atoms[it].vel.resize(ucell->atoms[it].na); + ucell->atoms[it].mag.resize(ucell->atoms[it].na); + ucell->atoms[it].angle1.resize(ucell->atoms[it].na); + ucell->atoms[it].angle2.resize(ucell->atoms[it].na); + ucell->atoms[it].m_loc_.resize(ucell->atoms[it].na); + ucell->atoms[it].mbl.resize(ucell->atoms[it].na); + ucell->atoms[it].mass = ucell->atom_mass[it]; // mass set here - for(int ia=0; iaatoms[it].na; ++ia) - { - if (ucell->Coordinate == "Direct") - { - ucell->atoms[it].taud[ia].x = this->coordinates[this->atomic_index*3+0]; - ucell->atoms[it].taud[ia].y = this->coordinates[this->atomic_index*3+1]; - ucell->atoms[it].taud[ia].z = this->coordinates[this->atomic_index*3+2]; - ucell->atoms[it].tau[ia] = ucell->atoms[it].taud[ia]*ucell->latvec; - } - else if (ucell->Coordinate == "Cartesian") - { - ucell->atoms[it].tau[ia].x = this->coordinates[this->atomic_index*3+0]; - ucell->atoms[it].tau[ia].y = this->coordinates[this->atomic_index*3+1]; - ucell->atoms[it].tau[ia].z = this->coordinates[this->atomic_index*3+2]; - ModuleBase::Mathzone::Cartesian_to_Direct( - ucell->atoms[it].tau[ia].x, ucell->atoms[it].tau[ia].y, ucell->atoms[it].tau[ia].z, - ucell->latvec.e11, ucell->latvec.e12, ucell->latvec.e13, - ucell->latvec.e21, ucell->latvec.e22, ucell->latvec.e23, - ucell->latvec.e31, ucell->latvec.e32, ucell->latvec.e33, - ucell->atoms[it].taud[ia].x, ucell->atoms[it].taud[ia].y, ucell->atoms[it].taud[ia].z); - } + for (int ia = 0; ia < ucell->atoms[it].na; ++ia) + { + if (ucell->Coordinate == "Direct") + { + ucell->atoms[it].taud[ia].x = this->coordinates[this->atomic_index * 3 + 0]; + ucell->atoms[it].taud[ia].y = this->coordinates[this->atomic_index * 3 + 1]; + ucell->atoms[it].taud[ia].z = this->coordinates[this->atomic_index * 3 + 2]; + ucell->atoms[it].tau[ia] = ucell->atoms[it].taud[ia] * ucell->latvec; + } + else if (ucell->Coordinate == "Cartesian") + { + ucell->atoms[it].tau[ia].x = this->coordinates[this->atomic_index * 3 + 0]; + ucell->atoms[it].tau[ia].y = this->coordinates[this->atomic_index * 3 + 1]; + ucell->atoms[it].tau[ia].z = this->coordinates[this->atomic_index * 3 + 2]; + ModuleBase::Mathzone::Cartesian_to_Direct(ucell->atoms[it].tau[ia].x, + ucell->atoms[it].tau[ia].y, + ucell->atoms[it].tau[ia].z, + ucell->latvec.e11, + ucell->latvec.e12, + ucell->latvec.e13, + ucell->latvec.e21, + ucell->latvec.e22, + ucell->latvec.e23, + ucell->latvec.e31, + ucell->latvec.e32, + ucell->latvec.e33, + ucell->atoms[it].taud[ia].x, + ucell->atoms[it].taud[ia].y, + ucell->atoms[it].taud[ia].z); + } ucell->atoms[it].dis[ia].set(0, 0, 0); - if(this->init_vel) - { - ucell->atoms[it].vel[ia].x = this->velocity[this->atomic_index*3+0]; - ucell->atoms[it].vel[ia].y = this->velocity[this->atomic_index*3+1]; - ucell->atoms[it].vel[ia].z = this->velocity[this->atomic_index*3+2]; - } - else - { - ucell->atoms[it].vel[ia].set(0,0,0); - } - ucell->atoms[it].m_loc_[ia].set(0,0,0); - ucell->atoms[it].angle1[ia] = 0; - ucell->atoms[it].angle2[ia] = 0; - if(this->selective_dynamics) - { - ucell->atoms[it].mbl[ia].x = this->mbl[this->atomic_index*3+0]; - ucell->atoms[it].mbl[ia].y = this->mbl[this->atomic_index*3+1]; - ucell->atoms[it].mbl[ia].z = this->mbl[this->atomic_index*3+2]; - } - else - { - ucell->atoms[it].mbl[ia] = {1,1,1}; - } - ++(this->atomic_index); - } - } - ucell->nat = this->natom.sum(); - return ucell; - } + if (this->init_vel) + { + ucell->atoms[it].vel[ia].x = this->velocity[this->atomic_index * 3 + 0]; + ucell->atoms[it].vel[ia].y = this->velocity[this->atomic_index * 3 + 1]; + ucell->atoms[it].vel[ia].z = this->velocity[this->atomic_index * 3 + 2]; + } + else + { + ucell->atoms[it].vel[ia].set(0, 0, 0); + } + ucell->atoms[it].m_loc_[ia].set(0, 0, 0); + ucell->atoms[it].angle1[ia] = 0; + ucell->atoms[it].angle2[ia] = 0; + if (this->selective_dynamics) + { + ucell->atoms[it].mbl[ia].x = this->mbl[this->atomic_index * 3 + 0]; + ucell->atoms[it].mbl[ia].y = this->mbl[this->atomic_index * 3 + 1]; + ucell->atoms[it].mbl[ia].z = this->mbl[this->atomic_index * 3 + 2]; + } + else + { + ucell->atoms[it].mbl[ia] = {1, 1, 1}; + } + ++(this->atomic_index); + } + } + ucell->nat = this->natom.sum(); + return ucell; + } }; UcellTestPrepare::UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in): - latname(latname_in), - lmaxmax(lmaxmax_in), - init_vel(init_vel_in), - selective_dynamics(selective_dynamics_in), - relax_new(relax_new_in), - fixed_axes(fixed_axes_in), - lat0(lat0_in), - latvec(latvec_in), - elements(elements_in), - pp_files(pp_files_in), - pp_types(pp_types_in), - orb_files(orb_files_in), - natom(natom_in), - atomic_mass(atomic_mass_in), - coor_type(coor_type_in), - coordinates(coordinates_in) + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in) + : latname(latname_in), lmaxmax(lmaxmax_in), init_vel(init_vel_in), selective_dynamics(selective_dynamics_in), + relax_new(relax_new_in), fixed_axes(fixed_axes_in), lat0(lat0_in), latvec(latvec_in), elements(elements_in), + pp_files(pp_files_in), pp_types(pp_types_in), orb_files(orb_files_in), natom(natom_in), + atomic_mass(atomic_mass_in), coor_type(coor_type_in), coordinates(coordinates_in) { - mbl = std::valarray(0.0, coordinates_in.size()); - velocity = std::valarray(0.0, coordinates_in.size()); + mbl = std::valarray(0.0, coordinates_in.size()); + velocity = std::valarray(0.0, coordinates_in.size()); } UcellTestPrepare::UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in, - std::valarray mbl_in, - std::valarray velocity_in): - latname(latname_in), - lmaxmax(lmaxmax_in), - init_vel(init_vel_in), - selective_dynamics(selective_dynamics_in), - relax_new(relax_new_in), - fixed_axes(fixed_axes_in), - lat0(lat0_in), - latvec(latvec_in), - elements(elements_in), - pp_files(pp_files_in), - pp_types(pp_types_in), - orb_files(orb_files_in), - natom(natom_in), - atomic_mass(atomic_mass_in), - coor_type(coor_type_in), - coordinates(coordinates_in), - mbl(mbl_in), - velocity(velocity_in) // velocity assume the existence of mbl in print_stru_file() -{} - -UcellTestPrepare::UcellTestPrepare(const UcellTestPrepare &utp): - latname(utp.latname), - lmaxmax(utp.lmaxmax), - init_vel(utp.init_vel), - selective_dynamics(utp.selective_dynamics), - relax_new(utp.relax_new), - fixed_axes(utp.fixed_axes), - lat0(utp.lat0), - latvec(utp.latvec), - elements(utp.elements), - pp_files(utp.pp_files), - pp_types(utp.pp_types), - orb_files(utp.orb_files), - natom(utp.natom), - atomic_mass(utp.atomic_mass), - coor_type(utp.coor_type), - coordinates(utp.coordinates), - mbl(utp.mbl), - velocity(utp.velocity) // velocity assume the existence of mbl in print_stru_file() -{} + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in, + std::valarray mbl_in, + std::valarray velocity_in) + : latname(latname_in), lmaxmax(lmaxmax_in), init_vel(init_vel_in), selective_dynamics(selective_dynamics_in), + relax_new(relax_new_in), fixed_axes(fixed_axes_in), lat0(lat0_in), latvec(latvec_in), elements(elements_in), + pp_files(pp_files_in), pp_types(pp_types_in), orb_files(orb_files_in), natom(natom_in), + atomic_mass(atomic_mass_in), coor_type(coor_type_in), coordinates(coordinates_in), mbl(mbl_in), + velocity(velocity_in) // velocity assume the existence of mbl in print_stru_file() +{ +} -std::map UcellTestLib +UcellTestPrepare::UcellTestPrepare(const UcellTestPrepare& utp) + : latname(utp.latname), lmaxmax(utp.lmaxmax), init_vel(utp.init_vel), selective_dynamics(utp.selective_dynamics), + relax_new(utp.relax_new), fixed_axes(utp.fixed_axes), lat0(utp.lat0), latvec(utp.latvec), elements(utp.elements), + pp_files(utp.pp_files), pp_types(utp.pp_types), orb_files(utp.orb_files), natom(utp.natom), + atomic_mass(utp.atomic_mass), coor_type(utp.coor_type), coordinates(utp.coordinates), mbl(utp.mbl), + velocity(utp.velocity) // velocity assume the existence of mbl in print_stru_file() { - {"Si", UcellTestPrepare( - "fcc", //latname - 2, //lmaxmax - true, //init_vel - true, //selective_dyanmics - true, //relax_new - "volume", //fixed_axes - 10.2, //lat0 - {-0.5,0.0,0.5, //latvec - 0.0,0.5,0.5, - -0.5,0.5,0.0}, - {"Si"}, //elements - {"Si.upf"}, //upf file - {"upf201"}, //upf types - {"Si.orb"}, //orb file - {2}, //number of each elements - {28.0}, //atomic mass - "Cartesian", //coordination type - {0.0,0.0,0.0, //atomic coordinates - 0.25,0.25,0.25})} -}; +} + +std::map UcellTestLib{{"Si", + UcellTestPrepare("fcc", // latname + 2, // lmaxmax + true, // init_vel + true, // selective_dyanmics + true, // relax_new + "volume", // fixed_axes + 10.2, // lat0 + {-0.5, + 0.0, + 0.5, // latvec + 0.0, + 0.5, + 0.5, + -0.5, + 0.5, + 0.0}, + {"Si"}, // elements + {"Si.upf"}, // upf file + {"upf201"}, // upf types + {"Si.orb"}, // orb file + {2}, // number of each elements + {28.0}, // atomic mass + "Cartesian", // coordination type + {0.0, + 0.0, + 0.0, // atomic coordinates + 0.25, + 0.25, + 0.25})}}; #endif diff --git a/source/module_cell/module_symmetry/run_symmetry.cpp b/source/module_cell/module_symmetry/run_symmetry.cpp index 2eff5fb0ae..8ff5cf1c50 100644 --- a/source/module_cell/module_symmetry/run_symmetry.cpp +++ b/source/module_cell/module_symmetry/run_symmetry.cpp @@ -1,55 +1,52 @@ +#include "source_base/global_variable.h" +#include "source_base/parallel_global.h" +#include "symmetry.h" + #include #include #include #include -#include "symmetry.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_global.h" void calculate(); -int main(int argc, char **argv) +int main(int argc, char** argv) { - std::cout << "Hello, this is the 'symmetry' module of ABACUS." << std::endl; + std::cout << "Hello, this is the 'symmetry' module of ABACUS." << std::endl; - std::cout << "The module does symmetry analysis for an input geometry." << std::endl; - Parallel_Global::read_pal_param(argc,argv); - //std::cout << "Right now, the module is still empty, soon we will have more tests." << std::endl; + std::cout << "The module does symmetry analysis for an input geometry." << std::endl; + Parallel_Global::read_pal_param(argc, argv); + // std::cout << "Right now, the module is still empty, soon we will have more tests." << std::endl; calculate(); return 0; } - void calculate() { - //std::ofstream ofs("log.txt"); - std::ofstream ofs_running("log.txt"); - //std::ofstream ofs("useless.txt"); - std::ofstream ofs_warning("warning.txt"); - std::ifstream ifs("INPUT"); - UnitCell ucell; - ModuleSymmetry::Symmetry symm; - ifs >> ucell.ntype; - ucell.latName = "none"; - ifs.close(); - output out; - ucell.setup_cell( - "STRU", - ofs_running); - std::cout << "set up cell classic done." << std::endl; + // std::ofstream ofs("log.txt"); + std::ofstream ofs_running("log.txt"); + // std::ofstream ofs("useless.txt"); + std::ofstream ofs_warning("warning.txt"); + std::ifstream ifs("INPUT"); + UnitCell ucell; + ModuleSymmetry::Symmetry symm; + ifs >> ucell.ntype; + ucell.latName = "none"; + ifs.close(); + output out; + ucell.setup_cell("STRU", ofs_running); + std::cout << "set up cell classic done." << std::endl; symm.analy_sys(ucell.lat, ucell.st, ucell.atoms, ofs_running); - ofs_running.close(); -// ooo.set_orb_tables(); - - //ofs.close(); + ofs_running.close(); + // ooo.set_orb_tables(); - std::cout << "--------------------" << std::endl; - std::cout << " Have a great day! " << std::endl; - std::cout << "--------------------" << std::endl; + // ofs.close(); + std::cout << "--------------------" << std::endl; + std::cout << " Have a great day! " << std::endl; + std::cout << "--------------------" << std::endl; return; } diff --git a/source/module_cell/module_symmetry/symm_other.h b/source/module_cell/module_symmetry/symm_other.h index 8107d7f632..db7457b2f9 100644 --- a/source/module_cell/module_symmetry/symm_other.h +++ b/source/module_cell/module_symmetry/symm_other.h @@ -1,21 +1,23 @@ #ifndef SYMM_OTHER_H #define SYMM_OTHER_H -#include "module_base/vector3.h" -#include "module_base/global_function.h" +#include "source_base/global_function.h" +#include "source_base/vector3.h" namespace ModuleSymmetry { namespace Symm_Other { - void print1(const int &ibrav, const double *cel_const, std::ofstream &ofs_running); +void print1(const int& ibrav, const double* cel_const, std::ofstream& ofs_running); - bool right_hand_sense(ModuleBase::Vector3 &v1,ModuleBase::Vector3 &v2,ModuleBase::Vector3 &v3); +bool right_hand_sense(ModuleBase::Vector3& v1, + ModuleBase::Vector3& v2, + ModuleBase::Vector3& v3); - double celvol(const ModuleBase::Vector3 &a, - const ModuleBase::Vector3 &b, const ModuleBase::Vector3 &c); +double celvol(const ModuleBase::Vector3& a, + const ModuleBase::Vector3& b, + const ModuleBase::Vector3& c); - -} -} +} // namespace Symm_Other +} // namespace ModuleSymmetry #endif diff --git a/source/module_cell/module_symmetry/symm_rho.cpp b/source/module_cell/module_symmetry/symm_rho.cpp index 858054df23..c79fb8b043 100644 --- a/source/module_cell/module_symmetry/symm_rho.cpp +++ b/source/module_cell/module_symmetry/symm_rho.cpp @@ -1,33 +1,32 @@ #include "symmetry.h" using namespace ModuleSymmetry; -#include "module_base/libm/libm.h" #include "module_parameter/parameter.h" +#include "source_base/libm/libm.h" -void Symmetry::rho_symmetry( double *rho, - const int &nr1, const int &nr2, const int &nr3) +void Symmetry::rho_symmetry(double* rho, const int& nr1, const int& nr2, const int& nr3) { - ModuleBase::timer::tick("Symmetry","rho_symmetry"); + ModuleBase::timer::tick("Symmetry", "rho_symmetry"); - // allocate flag for each FFT grid. + // allocate flag for each FFT grid. bool* symflag = new bool[nr1 * nr2 * nr3]; - for (int i=0; i0 ); - assert(nrotk <=48 ); - int *ri = new int[nrotk]; - int *rj = new int[nrotk]; - int *rk = new int[nrotk]; + assert(nrotk > 0); + assert(nrotk <= 48); + int* ri = new int[nrotk]; + int* rj = new int[nrotk]; + int* rk = new int[nrotk]; int ci = 0; - for (int i = 0; i< nr1; ++i) + for (int i = 0; i < nr1; ++i) { - for (int j = 0; j< nr2; ++j) + for (int j = 0; j < nr2; ++j) { - for (int k = 0; k< nr3; ++k) + for (int k = 0; k < nr3; ++k) { if (!symflag[i * nr2 * nr3 + j * nr3 + k]) { @@ -37,7 +36,7 @@ void Symmetry::rho_symmetry( double *rho, { this->rotate(gmatrix[isym], gtrans[isym], i, j, k, nr1, nr2, nr3, ri[isym], rj[isym], rk[isym]); const int index = ri[isym] * nr2 * nr3 + rj[isym] * nr3 + rk[isym]; - sum += rho[ index ]; + sum += rho[index]; } sum /= nrotk; @@ -56,133 +55,141 @@ void Symmetry::rho_symmetry( double *rho, delete[] ri; delete[] rj; delete[] rk; - ModuleBase::timer::tick("Symmetry","rho_symmetry"); + ModuleBase::timer::tick("Symmetry", "rho_symmetry"); } -void Symmetry::rhog_symmetry(std::complex *rhogtot, - int* ixyz2ipw, const int &nx, const int &ny, const int &nz, - const int &fftnx, const int &fftny, const int &fftnz) +void Symmetry::rhog_symmetry(std::complex* rhogtot, + int* ixyz2ipw, + const int& nx, + const int& ny, + const int& nz, + const int& fftnx, + const int& fftny, + const int& fftnz) { - ModuleBase::timer::tick("Symmetry","rhog_symmetry"); - // ---------------------------------------------------------------------- - // the current way is to cluster the FFT grid points into groups in advance. - // and use OpenMP to realize parallel calculation, one thread works in one group. - // ---------------------------------------------------------------------- + ModuleBase::timer::tick("Symmetry", "rhog_symmetry"); + // ---------------------------------------------------------------------- + // the current way is to cluster the FFT grid points into groups in advance. + // and use OpenMP to realize parallel calculation, one thread works in one group. + // ---------------------------------------------------------------------- - const int nxyz = fftnx*fftny*fftnz; - assert(nxyz>0); + const int nxyz = fftnx * fftny * fftnz; + assert(nxyz > 0); - // allocate flag for each FFT grid. + // allocate flag for each FFT grid. // which group the grid belongs to - int* symflag = new int[nxyz]; + int* symflag = new int[nxyz]; // which rotration operation the grid corresponds to - int(*isymflag)[48] = new int[nxyz][48]; + int(*isymflag)[48] = new int[nxyz][48]; // group information - int(*table_xyz)[48] = new int[nxyz][48]; + int(*table_xyz)[48] = new int[nxyz][48]; // how many symmetry operations have been covered - int* count_xyz = new int[nxyz]; + int* count_xyz = new int[nxyz]; - for (int i = 0; i < nxyz; i++) - { - symflag[i] = -1; - } - int group_index = 0; + for (int i = 0; i < nxyz; i++) + { + symflag[i] = -1; + } + int group_index = 0; - assert(nrotk >0 ); - assert(nrotk <=48 ); + assert(nrotk > 0); + assert(nrotk <= 48); - //map the gmatrix to inv - std::vectorinvmap(this->nrotk, -1); + // map the gmatrix to inv + std::vector invmap(this->nrotk, -1); this->gmatrix_invmap(kgmatrix, nrotk, invmap.data()); - // ------------------------------------------------------------------------ - // This code defines a lambda function called "rotate_recip" that takes - // a 3x3 matrix and a 3D vector as input. It performs a rotation operation - // on the vector using the matrix and returns the rotated vector. - // Specifically, it calculates the new coordinates of the vector after - // the rotation and applies periodic boundary conditions to ensure that - // the coordinates are within the FFT-grid dimensions. - // The rotated vector is returned by modifying the input vector. - // ------------------------------------------------------------------------ - //rotate function (different from real space, without scaling gmatrix) - auto rotate_recip = [&] (ModuleBase::Matrix3& g, ModuleBase::Vector3& g0, int& ii, int& jj, int& kk) - { - ii = int(g.e11 * g0.x + g.e21 * g0.y + g.e31 * g0.z) ; + // ------------------------------------------------------------------------ + // This code defines a lambda function called "rotate_recip" that takes + // a 3x3 matrix and a 3D vector as input. It performs a rotation operation + // on the vector using the matrix and returns the rotated vector. + // Specifically, it calculates the new coordinates of the vector after + // the rotation and applies periodic boundary conditions to ensure that + // the coordinates are within the FFT-grid dimensions. + // The rotated vector is returned by modifying the input vector. + // ------------------------------------------------------------------------ + // rotate function (different from real space, without scaling gmatrix) + auto rotate_recip = [&](ModuleBase::Matrix3& g, ModuleBase::Vector3& g0, int& ii, int& jj, int& kk) { + ii = int(g.e11 * g0.x + g.e21 * g0.y + g.e31 * g0.z); if (ii < 0) { ii += 10 * nx; } - ii = ii%nx; - jj = int(g.e12 * g0.x + g.e22 * g0.y + g.e32 * g0.z) ; + ii = ii % nx; + jj = int(g.e12 * g0.x + g.e22 * g0.y + g.e32 * g0.z); if (jj < 0) { jj += 10 * ny; } - jj = jj%ny; + jj = jj % ny; kk = int(g.e13 * g0.x + g.e23 * g0.y + g.e33 * g0.z); if (kk < 0) { kk += 10 * nz; } - kk = kk%nz; + kk = kk % nz; return; }; - // ------------------------------------------------------------------------ + // ------------------------------------------------------------------------ // Trying to group fft grids first. - // It iterates over each FFT-grid point and checks if it is within the - // PW-sphere. If it is, put all the FFT-grid points connected by the + // It iterates over each FFT-grid point and checks if it is within the + // PW-sphere. If it is, put all the FFT-grid points connected by the // rotation operation into one group( the index is stored in int(*table_xyz)). // The code marks the point as processed to avoid redundant calculations // by using int* symflag. - // ------------------------------------------------------------------------ + // ------------------------------------------------------------------------ - ModuleBase::timer::tick("Symmetry","group_fft_grids"); - for (int i = 0; i< fftnx; ++i) + ModuleBase::timer::tick("Symmetry", "group_fft_grids"); + for (int i = 0; i < fftnx; ++i) { - //tmp variable + // tmp variable ModuleBase::Vector3 tmp_gdirect0(0, 0, 0); - tmp_gdirect0.x=(i>int(nx/2)+1)?(i-nx):i; - for (int j = 0; j< fftny; ++j) + tmp_gdirect0.x = (i > int(nx / 2) + 1) ? (i - nx) : i; + for (int j = 0; j < fftny; ++j) { - tmp_gdirect0.y=(j>int(ny/2)+1)?(j-ny):j; - for (int k = 0; k< fftnz; ++k) + tmp_gdirect0.y = (j > int(ny / 2) + 1) ? (j - ny) : j; + for (int k = 0; k < fftnz; ++k) { - int ixyz0=(i*fftny+j)*fftnz+k; + int ixyz0 = (i * fftny + j) * fftnz + k; if (symflag[ixyz0] == -1) { - int ipw0=ixyz2ipw[ixyz0]; - //if a fft-grid is not in pw-sphere, just do not consider it. - if (ipw0 == -1) { + int ipw0 = ixyz2ipw[ixyz0]; + // if a fft-grid is not in pw-sphere, just do not consider it. + if (ipw0 == -1) + { continue; } - tmp_gdirect0.z=(k>int(nz/2)+1)?(k-nz):k; - int rot_count=0; + tmp_gdirect0.z = (k > int(nz / 2) + 1) ? (k - nz) : k; + int rot_count = 0; for (int isym = 0; isym < nrotk; ++isym) { - if (invmap[isym] < 0 || invmap[isym] > nrotk) { continue; } - //tmp variables - int ii, jj, kk=0; + if (invmap[isym] < 0 || invmap[isym] > nrotk) + { + continue; + } + // tmp variables + int ii, jj, kk = 0; rotate_recip(kgmatrix[invmap[isym]], tmp_gdirect0, ii, jj, kk); - if(ii>=fftnx || jj>=fftny || kk>= fftnz) + if (ii >= fftnx || jj >= fftny || kk >= fftnz) { - if(!PARAM.globalv.gamma_only_pw) + if (!PARAM.globalv.gamma_only_pw) { std::cout << " ROTATE OUT OF FFT-GRID IN RHOG_SYMMETRY !" << std::endl; - ModuleBase::QUIT(); + ModuleBase::QUIT(); } // for gamma_only_pw, just do not consider this rotation. continue; } - int ixyz=(ii*fftny+jj)*fftnz+kk; - //fft-grid index to (ip, ig) - int ipw=ixyz2ipw[ixyz]; - if(ipw==-1) //not in pw-sphere + int ixyz = (ii * fftny + jj) * fftnz + kk; + // fft-grid index to (ip, ig) + int ipw = ixyz2ipw[ixyz]; + if (ipw == -1) // not in pw-sphere { - continue; //else, just skip it + continue; // else, just skip it } symflag[ixyz] = group_index; isymflag[group_index][rot_count] = invmap[isym]; @@ -191,115 +198,114 @@ void Symmetry::rhog_symmetry(std::complex *rhogtot, assert(rot_count <= nrotk); count_xyz[group_index] = rot_count; } - group_index++; + group_index++; } } } } - ModuleBase::timer::tick("Symmetry","group_fft_grids"); + ModuleBase::timer::tick("Symmetry", "group_fft_grids"); - // ------------------------------------------------------------------- - // This code performs symmetry operations on the reciprocal space - // charge density using FFT-grids. It iterates over each FFT-grid - // point in a particular group, applies a phase factor and sums the - // charge density over the symmetry operations, and then divides by - // the number of symmetry operations. Finally, it updates the charge - // density for each FFT-grid point using the calculated sum. - // ------------------------------------------------------------------- + // ------------------------------------------------------------------- + // This code performs symmetry operations on the reciprocal space + // charge density using FFT-grids. It iterates over each FFT-grid + // point in a particular group, applies a phase factor and sums the + // charge density over the symmetry operations, and then divides by + // the number of symmetry operations. Finally, it updates the charge + // density for each FFT-grid point using the calculated sum. + // ------------------------------------------------------------------- #ifdef _OPENMP #pragma omp parallel for schedule(static) #endif - for (int g_index = 0; g_index < group_index; g_index++) - { - // record the index and gphase but not the final gdirect for each symm-opt - int *ipw_record = new int[nrotk]; - int *ixyz_record = new int[nrotk]; - std::complex* gphase_record = new std::complex [nrotk]; - std::complex sum(0, 0); - int rot_count=0; - - for (int c_index = 0; c_index < count_xyz[g_index]; ++c_index) - { - int ixyz0 = table_xyz[g_index][c_index]; - int ipw0 = ixyz2ipw[ixyz0]; - - if (symflag[ixyz0] == g_index) - { - // note : do not use PBC after rotation. - // we need a real gdirect to get the correspoding rhogtot. - int k = ixyz0%fftnz; - int j = ((ixyz0-k)/fftnz)%fftny; - int i = ((ixyz0-k)/fftnz-j)/fftny; - - //fft-grid index to gdirect - ModuleBase::Vector3 tmp_gdirect_double(0.0, 0.0, 0.0); - tmp_gdirect_double.x=static_cast((i>int(nx/2)+1)?(i-nx):i); - tmp_gdirect_double.y=static_cast((j>int(ny/2)+1)?(j-ny):j); - tmp_gdirect_double.z=static_cast((k>int(nz/2)+1)?(k-nz):k); - - //calculate phase factor - tmp_gdirect_double = tmp_gdirect_double * ModuleBase::TWO_PI; - - double cos_arg = 0.0, sin_arg = 0.0; - double arg_gtrans = tmp_gdirect_double * gtrans[isymflag[g_index][c_index]]; - - std::complex phase_gtrans (ModuleBase::libm::cos(arg_gtrans), - ModuleBase::libm::sin(arg_gtrans)); - - // for each pricell in supercell: - for (int ipt = 0;ipt < ((ModuleSymmetry::Symmetry::pricell_loop) ? this->ncell : 1);++ipt) - { - double arg = tmp_gdirect_double * ptrans[ipt]; - double tmp_cos = 0.0, tmp_sin = 0.0; - ModuleBase::libm::sincos(arg, &tmp_sin, &tmp_cos); - cos_arg += tmp_cos; - sin_arg += tmp_sin; - } - - // add nothing to sum, so don't consider this isym into rot_count - cos_arg/=static_cast(ncell); - sin_arg/=static_cast(ncell); - - //deal with double-zero - if (equal(cos_arg, 0.0) && equal(sin_arg, 0.0)) - { - continue; - } - - std::complex gphase(cos_arg, sin_arg); - gphase = phase_gtrans * gphase; - - //deal with small difference from 1 - if (equal(gphase.real(), 1.0) && equal(gphase.imag(), 0)) - { - gphase = std::complex(1.0, 0.0); - } - - gphase_record[rot_count]=gphase; - sum += rhogtot[ipw0]*gphase; - //record - ipw_record[rot_count]=ipw0; - ixyz_record[rot_count]=ixyz0; - ++rot_count; - //assert(rot_count<=nrotk); - }//end if section - }//end c_index loop - sum /= rot_count; - for (int isym = 0; isym < rot_count; ++isym) - { - rhogtot[ipw_record[isym]] = sum/gphase_record[isym]; - } - - //Clean the records variables for each fft grid point - delete[] ipw_record; - delete[] ixyz_record; - delete[] gphase_record; - }//end g_index loop - - delete[] symflag; - delete[] isymflag; - delete[] table_xyz; - delete[] count_xyz; - ModuleBase::timer::tick("Symmetry","rhog_symmetry"); + for (int g_index = 0; g_index < group_index; g_index++) + { + // record the index and gphase but not the final gdirect for each symm-opt + int* ipw_record = new int[nrotk]; + int* ixyz_record = new int[nrotk]; + std::complex* gphase_record = new std::complex[nrotk]; + std::complex sum(0, 0); + int rot_count = 0; + + for (int c_index = 0; c_index < count_xyz[g_index]; ++c_index) + { + int ixyz0 = table_xyz[g_index][c_index]; + int ipw0 = ixyz2ipw[ixyz0]; + + if (symflag[ixyz0] == g_index) + { + // note : do not use PBC after rotation. + // we need a real gdirect to get the correspoding rhogtot. + int k = ixyz0 % fftnz; + int j = ((ixyz0 - k) / fftnz) % fftny; + int i = ((ixyz0 - k) / fftnz - j) / fftny; + + // fft-grid index to gdirect + ModuleBase::Vector3 tmp_gdirect_double(0.0, 0.0, 0.0); + tmp_gdirect_double.x = static_cast((i > int(nx / 2) + 1) ? (i - nx) : i); + tmp_gdirect_double.y = static_cast((j > int(ny / 2) + 1) ? (j - ny) : j); + tmp_gdirect_double.z = static_cast((k > int(nz / 2) + 1) ? (k - nz) : k); + + // calculate phase factor + tmp_gdirect_double = tmp_gdirect_double * ModuleBase::TWO_PI; + + double cos_arg = 0.0, sin_arg = 0.0; + double arg_gtrans = tmp_gdirect_double * gtrans[isymflag[g_index][c_index]]; + + std::complex phase_gtrans(ModuleBase::libm::cos(arg_gtrans), ModuleBase::libm::sin(arg_gtrans)); + + // for each pricell in supercell: + for (int ipt = 0; ipt < ((ModuleSymmetry::Symmetry::pricell_loop) ? this->ncell : 1); ++ipt) + { + double arg = tmp_gdirect_double * ptrans[ipt]; + double tmp_cos = 0.0, tmp_sin = 0.0; + ModuleBase::libm::sincos(arg, &tmp_sin, &tmp_cos); + cos_arg += tmp_cos; + sin_arg += tmp_sin; + } + + // add nothing to sum, so don't consider this isym into rot_count + cos_arg /= static_cast(ncell); + sin_arg /= static_cast(ncell); + + // deal with double-zero + if (equal(cos_arg, 0.0) && equal(sin_arg, 0.0)) + { + continue; + } + + std::complex gphase(cos_arg, sin_arg); + gphase = phase_gtrans * gphase; + + // deal with small difference from 1 + if (equal(gphase.real(), 1.0) && equal(gphase.imag(), 0)) + { + gphase = std::complex(1.0, 0.0); + } + + gphase_record[rot_count] = gphase; + sum += rhogtot[ipw0] * gphase; + // record + ipw_record[rot_count] = ipw0; + ixyz_record[rot_count] = ixyz0; + ++rot_count; + // assert(rot_count<=nrotk); + } // end if section + } // end c_index loop + sum /= rot_count; + for (int isym = 0; isym < rot_count; ++isym) + { + rhogtot[ipw_record[isym]] = sum / gphase_record[isym]; + } + + // Clean the records variables for each fft grid point + delete[] ipw_record; + delete[] ixyz_record; + delete[] gphase_record; + } // end g_index loop + + delete[] symflag; + delete[] isymflag; + delete[] table_xyz; + delete[] count_xyz; + ModuleBase::timer::tick("Symmetry", "rhog_symmetry"); } diff --git a/source/module_cell/module_symmetry/symmetry.h b/source/module_cell/module_symmetry/symmetry.h index 748ca49d58..7b8ea711ca 100644 --- a/source/module_cell/module_symmetry/symmetry.h +++ b/source/module_cell/module_symmetry/symmetry.h @@ -1,12 +1,12 @@ #ifndef SYMMETRY_H #define SYMMETRY_H -#include "module_cell/unitcell_data.h" #include "module_cell/atom_spec.h" -#include "module_base/timer.h" -#include "module_base/mathzone.h" -#include "module_base/constants.h" +#include "module_cell/unitcell_data.h" #include "module_io/output.h" +#include "source_base/constants.h" +#include "source_base/mathzone.h" +#include "source_base/timer.h" #include "symmetry_basic.h" namespace ModuleSymmetry @@ -15,157 +15,189 @@ namespace ModuleSymmetry class Symmetry : public Symmetry_Basic { -public: - - Symmetry() - { - this->epsilon = 1e-6; - }; - ~Symmetry() {}; - - //symmetry flag for levels - //-1 : no symmetry at all, k points would be total nks in KPT - //0 : only basic time-reversal symmetry is considered, point k and -k would fold to k - //1 : point group symmetry is considered + public: + Symmetry() + { + this->epsilon = 1e-6; + }; + ~Symmetry(){}; + + // symmetry flag for levels + //-1 : no symmetry at all, k points would be total nks in KPT + // 0 : only basic time-reversal symmetry is considered, point k and -k would fold to k + // 1 : point group symmetry is considered static int symm_flag; static bool symm_autoclose; // controled by INPUT static bool pricell_loop; ///< whether to loop primitive cell in rhog_symmetry, Only for AFM /// @brief analyze the symmetry of the system /// @param lat structure of lattice - /// @param st + /// @param st /// @param atoms all atoms - /// @param ofs_running - /// get the symmetry information of the system, gmatries (rotation 3*3 matrixs), gtrans (transfer a collections vector3), etc. + /// @param ofs_running + /// get the symmetry information of the system, gmatries (rotation 3*3 matrixs), gtrans (transfer a collections + /// vector3), etc. void analy_sys(const Lattice& lat, const Statistics& st, Atom* atoms, std::ofstream& ofs_running); - ModuleBase::Vector3 s1, s2, s3; - ModuleBase::Vector3 a1, a2, a3; //primitive cell vectors(might be changed during the process of the program) - ModuleBase::Vector3 p1, p2, p3; //primitive cell vectors - - int ntype=0; //the number of atomic species - int nat =0; //the number of all atoms - int *na =nullptr;//number of atoms for each species - int *istart=nullptr; //start number of atom. - int itmin_type=0; //the type has smallest number of atoms - int itmin_start=0; - - // direct coordinates of atoms. - double *newpos=nullptr; - // positions of atoms after rotation. - double *rotpos=nullptr; - - - std::vector> ptrans; // the translation vectors of the primitive cell in the input structure - int ncell=1; //the number of primitive cells within one supercell - int *index=nullptr; - - double cel_const[6]={0.0}; - double pcel_const[6]={0.0}; //cel_const of primitive cell - double pre_const[6]={0.0}; //cel_const of input configuration, first 3 is moduli of a1, a2, a3, last 3 is eular angle - - bool symflag_fft[48]={false}; - int sym_test=0; - int pbrav=0; //ibrav of primitive cell - int real_brav=0; // the real ibrav for the cell pengfei Li 3-15-2022 - std::string ilattname; //the bravais lattice type of the supercell - std::string plattname; //the bravais lattice type of the primitive cell - - ModuleBase::Matrix3 gmatrix[48]; //the rotation matrices for all space group operations - ModuleBase::Matrix3 kgmatrix[48]; //the rotation matrices in reciprocal space - ModuleBase::Vector3 gtrans[48]; - - ModuleBase::Matrix3 symop[48]; //the rotation matrices for the pure bravais lattice - int nop=0; //the number of point group operations of the pure bravais lattice without basis - int nrot=0; //the number of pure point group rotations - int nrotk = -1; //the number of all space group operations, >0 means the nrotk has been analyzed - int max_nrotk = -1; ///< record the maximum number of symmetry operations during cell-relax - int pgnumber=0; //the serial number of point group - int spgnumber=0; //the serial number of point group in space group - std::string pgname; //the Schoenflies name of the point group R in {R|0} - std::string spgname; //the Schoenflies name of the point group R in the space group {R|t} - - ModuleBase::Matrix3 optlat; //the optimized-symmetry lattice - ModuleBase::Matrix3 plat; //the primitive lattice - - bool all_mbl = true; ///< whether all the atoms are movable in all the directions - - int standard_lat(ModuleBase::Vector3& a, - ModuleBase::Vector3& b, - ModuleBase::Vector3& c, - double* celconst)const; - - void lattice_type(ModuleBase::Vector3 &v1, - ModuleBase::Vector3 &v2, - ModuleBase::Vector3 &v3, - ModuleBase::Vector3 &v01, - ModuleBase::Vector3 &v02, - ModuleBase::Vector3 &v03, - double* cel_const, - double* pre_const, - int& real_brav, - std::string& bravname, + ModuleBase::Vector3 s1, s2, s3; + ModuleBase::Vector3 a1, a2, a3; // primitive cell vectors(might be changed during the process of the + // program) + ModuleBase::Vector3 p1, p2, p3; // primitive cell vectors + + int ntype = 0; // the number of atomic species + int nat = 0; // the number of all atoms + int* na = nullptr; // number of atoms for each species + int* istart = nullptr; // start number of atom. + int itmin_type = 0; // the type has smallest number of atoms + int itmin_start = 0; + + // direct coordinates of atoms. + double* newpos = nullptr; + // positions of atoms after rotation. + double* rotpos = nullptr; + + std::vector> + ptrans; // the translation vectors of the primitive cell in the input structure + int ncell = 1; // the number of primitive cells within one supercell + int* index = nullptr; + + double cel_const[6] = {0.0}; + double pcel_const[6] = {0.0}; // cel_const of primitive cell + double pre_const[6] + = {0.0}; // cel_const of input configuration, first 3 is moduli of a1, a2, a3, last 3 is eular angle + + bool symflag_fft[48] = {false}; + int sym_test = 0; + int pbrav = 0; // ibrav of primitive cell + int real_brav = 0; // the real ibrav for the cell pengfei Li 3-15-2022 + std::string ilattname; // the bravais lattice type of the supercell + std::string plattname; // the bravais lattice type of the primitive cell + + ModuleBase::Matrix3 gmatrix[48]; // the rotation matrices for all space group operations + ModuleBase::Matrix3 kgmatrix[48]; // the rotation matrices in reciprocal space + ModuleBase::Vector3 gtrans[48]; + + ModuleBase::Matrix3 symop[48]; // the rotation matrices for the pure bravais lattice + int nop = 0; // the number of point group operations of the pure bravais lattice without basis + int nrot = 0; // the number of pure point group rotations + int nrotk = -1; // the number of all space group operations, >0 means the nrotk has been analyzed + int max_nrotk = -1; ///< record the maximum number of symmetry operations during cell-relax + int pgnumber = 0; // the serial number of point group + int spgnumber = 0; // the serial number of point group in space group + std::string pgname; // the Schoenflies name of the point group R in {R|0} + std::string spgname; // the Schoenflies name of the point group R in the space group {R|t} + + ModuleBase::Matrix3 optlat; // the optimized-symmetry lattice + ModuleBase::Matrix3 plat; // the primitive lattice + + bool all_mbl = true; ///< whether all the atoms are movable in all the directions + + int standard_lat(ModuleBase::Vector3& a, + ModuleBase::Vector3& b, + ModuleBase::Vector3& c, + double* celconst) const; + + void lattice_type(ModuleBase::Vector3& v1, + ModuleBase::Vector3& v2, + ModuleBase::Vector3& v3, + ModuleBase::Vector3& v01, + ModuleBase::Vector3& v02, + ModuleBase::Vector3& v03, + double* cel_const, + double* pre_const, + int& real_brav, + std::string& bravname, const Atom* atoms, - bool convert_atoms, - double* newpos = nullptr)const; - - void getgroup(int& nrot, - int& nrotk, - std::ofstream& ofs_running, - const int& nop, - const ModuleBase::Matrix3* symop, - ModuleBase::Matrix3* gmatrix, - ModuleBase::Vector3* gtrans, - double* pos, double* rotpos, int* index, - const int ntype, const int itmin_type, const int itmin_start, - int* istart, int* na)const; - - bool checksym(const ModuleBase::Matrix3 &s, - ModuleBase::Vector3& gtrans, - double* pos, double* rotpos, int* index, - const int itmin_type, const int ntype, const int itmin_start, - int* istart, int* na)const; + bool convert_atoms, + double* newpos = nullptr) const; + + void getgroup(int& nrot, + int& nrotk, + std::ofstream& ofs_running, + const int& nop, + const ModuleBase::Matrix3* symop, + ModuleBase::Matrix3* gmatrix, + ModuleBase::Vector3* gtrans, + double* pos, + double* rotpos, + int* index, + const int ntype, + const int itmin_type, + const int itmin_start, + int* istart, + int* na) const; + + bool checksym(const ModuleBase::Matrix3& s, + ModuleBase::Vector3& gtrans, + double* pos, + double* rotpos, + int* index, + const int itmin_type, + const int ntype, + const int itmin_start, + int* istart, + int* na) const; /// @brief primitive cell analysis void pricell(double* pos, const Atom* atoms); - /// ----------------------- - /// Symmetrize the charge density, the forces, and the stress - /// ----------------------- - void rho_symmetry(double *rho, const int &nr1, const int &nr2, const int &nr3); + /// ----------------------- + /// Symmetrize the charge density, the forces, and the stress + /// ----------------------- + void rho_symmetry(double* rho, const int& nr1, const int& nr2, const int& nr3); - void rhog_symmetry(std::complex *rhogtot, int* ixyz2ipw, const int &nx, - const int &ny, const int &nz, const int & fftnx, const int &fftny, const int &fftnz); + void rhog_symmetry(std::complex* rhogtot, + int* ixyz2ipw, + const int& nx, + const int& ny, + const int& nz, + const int& fftnx, + const int& fftny, + const int& fftnz); /// symmetrize a vector3 with nat elements, which can be forces or variation of atom positions in relax - void symmetrize_vec3_nat(double* v)const; // force + void symmetrize_vec3_nat(double* v) const; // force /// symmetrize a 3*3 tensor, which can be stress or variation of unitcell in cell-relax - void symmetrize_mat3(ModuleBase::matrix& sigma, const Lattice& lat)const; // stress + void symmetrize_mat3(ModuleBase::matrix& sigma, const Lattice& lat) const; // stress - //convert n rotation-matrices from sa on basis {a1, a2, a3} to sb on basis {b1, b2, b3} - void gmatrix_convert(const ModuleBase::Matrix3* sa, ModuleBase::Matrix3* sb, - const int n, const ModuleBase::Matrix3 &a, const ModuleBase::Matrix3 &b)const; + // convert n rotation-matrices from sa on basis {a1, a2, a3} to sb on basis {b1, b2, b3} + void gmatrix_convert(const ModuleBase::Matrix3* sa, + ModuleBase::Matrix3* sb, + const int n, + const ModuleBase::Matrix3& a, + const ModuleBase::Matrix3& b) const; - void gmatrix_convert_int(const ModuleBase::Matrix3* sa, ModuleBase::Matrix3* sb, - const int n, const ModuleBase::Matrix3 &a, const ModuleBase::Matrix3 &b)const; + void gmatrix_convert_int(const ModuleBase::Matrix3* sa, + ModuleBase::Matrix3* sb, + const int n, + const ModuleBase::Matrix3& a, + const ModuleBase::Matrix3& b) const; - //convert n translation-vectors from va on basis {a1, a2, a3} to vb on basis {b1, b2, b3} - void gtrans_convert(const ModuleBase::Vector3* va, ModuleBase::Vector3* vb, - const int n, const ModuleBase::Matrix3 &a, const ModuleBase::Matrix3 &b)const; + // convert n translation-vectors from va on basis {a1, a2, a3} to vb on basis {b1, b2, b3} + void gtrans_convert(const ModuleBase::Vector3* va, + ModuleBase::Vector3* vb, + const int n, + const ModuleBase::Matrix3& a, + const ModuleBase::Matrix3& b) const; - void gmatrix_invmap(const ModuleBase::Matrix3* s, const int n, int* invmap) const; + void gmatrix_invmap(const ModuleBase::Matrix3* s, const int n, int* invmap) const; - void hermite_normal_form(const ModuleBase::Matrix3 &s, ModuleBase::Matrix3 &H, ModuleBase::Matrix3 &b) const; + void hermite_normal_form(const ModuleBase::Matrix3& s, ModuleBase::Matrix3& H, ModuleBase::Matrix3& b) const; - int get_rotated_atom(int isym, int iat)const + int get_rotated_atom(int isym, int iat) const { - if (!this->isym_rotiat_.empty()) { return this->isym_rotiat_[isym][iat]; } - else { return -1; } + if (!this->isym_rotiat_.empty()) + { + return this->isym_rotiat_[isym][iat]; + } + else + { + return -1; + } } - private: - + private: /// atom-map for each symmetry operation: isym_rotiat[isym][iat]=rotiat std::vector> isym_rotiat_; @@ -173,26 +205,32 @@ class Symmetry : public Symmetry_Basic void set_atom_map(const Atom* atoms); /// @brief check if all the atoms are movable /// delta_pos symmetrization in relax is only meaningful when all the atoms are movable in all the directions. - bool is_all_movable(const Atom* atoms, const Statistics& st)const; + bool is_all_movable(const Atom* atoms, const Statistics& st) const; // to be called in lattice_type - void get_shortest_latvec(ModuleBase::Vector3 &a1, - ModuleBase::Vector3 &a2, ModuleBase::Vector3 &a3)const; - - void get_optlat(ModuleBase::Vector3 &v1, ModuleBase::Vector3 &v2, - ModuleBase::Vector3 &v3, ModuleBase::Vector3 &w1, - ModuleBase::Vector3 &w2, ModuleBase::Vector3 &w3, - int& real_brav, double* cel_const, double* tmp_const)const; - - /// Loop the magmom of each atoms in its type when NSPIN>1. + void get_shortest_latvec(ModuleBase::Vector3& a1, + ModuleBase::Vector3& a2, + ModuleBase::Vector3& a3) const; + + void get_optlat(ModuleBase::Vector3& v1, + ModuleBase::Vector3& v2, + ModuleBase::Vector3& v3, + ModuleBase::Vector3& w1, + ModuleBase::Vector3& w2, + ModuleBase::Vector3& w3, + int& real_brav, + double* cel_const, + double* tmp_const) const; + + /// Loop the magmom of each atoms in its type when NSPIN>1. /// If not all the same, primitive cells should not be looped in rhog_symmetry. - bool magmom_same_check(const Atom* atoms)const; + bool magmom_same_check(const Atom* atoms) const; - /// Analyze magnetic group without time-reversal symmetry + /// Analyze magnetic group without time-reversal symmetry /// (because currently the charge density symmetrization does not support it) /// Method: treat atoms with different magmom as atoms of different type void analyze_magnetic_group(const Atom* atoms, const Statistics& st, int& nrot_out, int& nrotk_out); }; -} +} // namespace ModuleSymmetry #endif diff --git a/source/module_cell/module_symmetry/symmetry_basic.cpp b/source/module_cell/module_symmetry/symmetry_basic.cpp index dffa59f69d..2cab52893b 100644 --- a/source/module_cell/module_symmetry/symmetry_basic.cpp +++ b/source/module_cell/module_symmetry/symmetry_basic.cpp @@ -1,6 +1,6 @@ -#include "symmetry.h" -#include "module_base/mymath.h" #include "module_parameter/parameter.h" +#include "source_base/mymath.h" +#include "symmetry.h" bool ModuleSymmetry::test_brav = 0; @@ -9,954 +9,1016 @@ namespace ModuleSymmetry // Find the type of bravais lattice. std::string Symmetry_Basic::get_brav_name(const int ibrav) const { - switch(ibrav) - { - case 1: return "01. Cubic P (simple)"; - case 2: return "02. Cubic I (body-centered)"; - case 3: return "03. Cubic F (face-centered)"; - case 4: return "04. Hexagonal cell"; - case 5: return "05. Tetrogonal P (simple)"; - case 6: return "06. Tetrogonal I (body-centered)"; - case 7: return "07. Rhombohedral (Trigonal) cell"; - case 8: return "08. Orthorhombic P(simple)"; - case 9: return "09. Orthorhombic I (body-centered)"; - case 10: return "10. Orthorhombic F (face-centered)"; - case 11: return "11. Orthorhombic C (base-centered)"; - case 12: return "12. Monoclinic P (simple)"; - case 13: return "13. Monoclinic A (base-center)"; - case 14: return "14. Triclinic cell"; - case 15: return "wrong !! "; - } - return "Congratulations!You have found a bravais lattice that never existed!"; + switch (ibrav) + { + case 1: + return "01. Cubic P (simple)"; + case 2: + return "02. Cubic I (body-centered)"; + case 3: + return "03. Cubic F (face-centered)"; + case 4: + return "04. Hexagonal cell"; + case 5: + return "05. Tetrogonal P (simple)"; + case 6: + return "06. Tetrogonal I (body-centered)"; + case 7: + return "07. Rhombohedral (Trigonal) cell"; + case 8: + return "08. Orthorhombic P(simple)"; + case 9: + return "09. Orthorhombic I (body-centered)"; + case 10: + return "10. Orthorhombic F (face-centered)"; + case 11: + return "11. Orthorhombic C (base-centered)"; + case 12: + return "12. Monoclinic P (simple)"; + case 13: + return "13. Monoclinic A (base-center)"; + case 14: + return "14. Triclinic cell"; + case 15: + return "wrong !! "; + } + return "Congratulations!You have found a bravais lattice that never existed!"; } // Control the accuracy -bool Symmetry_Basic::equal(const double &m,const double &n)const +bool Symmetry_Basic::equal(const double& m, const double& n) const { - //if( fabs(m-n) < 1.0e-5 ) - if( fabs(m-n) < epsilon ) //LiuXh add 2021-08-12, use accuracy for symmetry - { - return true; - } - return false; + // if( fabs(m-n) < 1.0e-5 ) + if (fabs(m - n) < epsilon) // LiuXh add 2021-08-12, use accuracy for symmetry + { + return true; + } + return false; } // check the boundary condition of atom positions. -void Symmetry_Basic::check_boundary(double &x)const +void Symmetry_Basic::check_boundary(double& x) const { - if(equal(x,-0.5) || equal(x,0.5)) x=-0.5; - return; + if (equal(x, -0.5) || equal(x, 0.5)) + x = -0.5; + return; } double Symmetry_Basic::get_translation_vector(const double& x1, const double& x2) const { - double t=0.0; // "t"ranslation - t = x2 - x1; - t = fmod(t+100.0, 1.0); - if( fabs(t-1) < epsilon * 0.5) t = 0.0; - return t; + double t = 0.0; // "t"ranslation + t = x2 - x1; + t = fmod(t + 100.0, 1.0); + if (fabs(t - 1) < epsilon * 0.5) + t = 0.0; + return t; } -void Symmetry_Basic::check_translation(double &x, const double &t) const +void Symmetry_Basic::check_translation(double& x, const double& t) const { - x += t; - //impose the periodic boundary condition - x = fmod(x + 100.5,1) - 0.5; - return; + x += t; + // impose the periodic boundary condition + x = fmod(x + 100.5, 1) - 0.5; + return; } -double Symmetry_Basic::check_diff(const double& x1, const double& x2)const +double Symmetry_Basic::check_diff(const double& x1, const double& x2) const { - double diff = x1 - x2; - diff = fmod(diff + 100,1); - //for reasons of safety - if(fabs(diff - 1.0) < epsilon) - { - diff = 0; - } - return diff; + double diff = x1 - x2; + diff = fmod(diff + 100, 1); + // for reasons of safety + if (fabs(diff - 1.0) < epsilon) + { + diff = 0; + } + return diff; } - void Symmetry_Basic::order_atoms(double* pos, const int& nat, const int* index) const { - double** tmp = new double*[nat]; - for(int ia=0; ia &old1, - const ModuleBase::Vector3 &old2, - const ModuleBase::Vector3 &old3, - const ModuleBase::Vector3 &new1, - const ModuleBase::Vector3 &new2, - const ModuleBase::Vector3 &new3 - ) +// convert a set of vectors (va) represented in the basis vectors old1, old2, old3 +// to a set of vectors (vb) represented in the basis vectors new1, new2, new3 +void Symmetry_Basic::veccon(double* carpos, + double* rotpos, + const int num, + const ModuleBase::Vector3& old1, + const ModuleBase::Vector3& old2, + const ModuleBase::Vector3& old3, + const ModuleBase::Vector3& new1, + const ModuleBase::Vector3& new2, + const ModuleBase::Vector3& new3) { - GlobalV::ofs_running << "\n old1:" << old1.x << " " << old1.y << " " << old1.z; - GlobalV::ofs_running << "\n old2:" << old2.x << " " << old2.y << " " << old2.z; - GlobalV::ofs_running << "\n old3:" << old3.x << " " << old3.y << " " << old3.z; - - GlobalV::ofs_running << "\n new1:" << new1.x << " " << new1.y << " " << new1.z; - GlobalV::ofs_running << "\n new2:" << new2.x << " " << new2.y << " " << new2.z; - GlobalV::ofs_running << "\n new3:" << new3.x << " " << new3.y << " " << new3.z; - - ModuleBase::Matrix3 oldlat; - oldlat.e11 = old1.x; - oldlat.e12 = old1.y; - oldlat.e13 = old1.z; - oldlat.e21 = old2.x; - oldlat.e22 = old2.y; - oldlat.e23 = old2.z; - oldlat.e31 = old3.x; - oldlat.e32 = old3.y; - oldlat.e33 = old3.z; - - ModuleBase::Matrix3 newlat; - newlat.e11 = new1.x; - newlat.e12 = new1.y; - newlat.e13 = new1.z; - newlat.e21 = new2.x; - newlat.e22 = new2.y; - newlat.e23 = new2.z; - newlat.e31 = new3.x; - newlat.e32 = new3.y; - newlat.e33 = new3.z; - - ModuleBase::Matrix3 GT = newlat.Inverse(); - - ModuleBase::Vector3 car; - ModuleBase::Vector3 direct_old; - ModuleBase::Vector3 direct_new; - - //calculate the reciprocal vectors rb1, rb2, rb3 for the vectors new1, new2, new3 - //this->recip(1.0, new1, new2, new3, rb1, rb2, rb3); - - for(int i = 0; i < num; ++i) - { - direct_old.x = carpos[i * 3 + 0]; - direct_old.y = carpos[i * 3 + 1]; - direct_old.z = carpos[i * 3 + 2]; - - car = direct_old * oldlat; - direct_new = car * GT; - - rotpos[i * 3 + 0] = direct_new.x; - rotpos[i * 3 + 1] = direct_new.y; - rotpos[i * 3 + 2] = direct_new.z; - } - return; -} + GlobalV::ofs_running << "\n old1:" << old1.x << " " << old1.y << " " << old1.z; + GlobalV::ofs_running << "\n old2:" << old2.x << " " << old2.y << " " << old2.z; + GlobalV::ofs_running << "\n old3:" << old3.x << " " << old3.y << " " << old3.z; + + GlobalV::ofs_running << "\n new1:" << new1.x << " " << new1.y << " " << new1.z; + GlobalV::ofs_running << "\n new2:" << new2.x << " " << new2.y << " " << new2.z; + GlobalV::ofs_running << "\n new3:" << new3.x << " " << new3.y << " " << new3.z; + + ModuleBase::Matrix3 oldlat; + oldlat.e11 = old1.x; + oldlat.e12 = old1.y; + oldlat.e13 = old1.z; + oldlat.e21 = old2.x; + oldlat.e22 = old2.y; + oldlat.e23 = old2.z; + oldlat.e31 = old3.x; + oldlat.e32 = old3.y; + oldlat.e33 = old3.z; + + ModuleBase::Matrix3 newlat; + newlat.e11 = new1.x; + newlat.e12 = new1.y; + newlat.e13 = new1.z; + newlat.e21 = new2.x; + newlat.e22 = new2.y; + newlat.e23 = new2.z; + newlat.e31 = new3.x; + newlat.e32 = new3.y; + newlat.e33 = new3.z; + + ModuleBase::Matrix3 GT = newlat.Inverse(); + + ModuleBase::Vector3 car; + ModuleBase::Vector3 direct_old; + ModuleBase::Vector3 direct_new; + + // calculate the reciprocal vectors rb1, rb2, rb3 for the vectors new1, new2, new3 + // this->recip(1.0, new1, new2, new3, rb1, rb2, rb3); + + for (int i = 0; i < num; ++i) + { + direct_old.x = carpos[i * 3 + 0]; + direct_old.y = carpos[i * 3 + 1]; + direct_old.z = carpos[i * 3 + 2]; + car = direct_old * oldlat; + direct_new = car * GT; -//generate all point group symmetry operations from the generation group -void Symmetry_Basic::matrigen(ModuleBase::Matrix3 *symgen, const int ngen, ModuleBase::Matrix3* symop, int &nop) const + rotpos[i * 3 + 0] = direct_new.x; + rotpos[i * 3 + 1] = direct_new.y; + rotpos[i * 3 + 2] = direct_new.z; + } + return; +} + +// generate all point group symmetry operations from the generation group +void Symmetry_Basic::matrigen(ModuleBase::Matrix3* symgen, const int ngen, ModuleBase::Matrix3* symop, int& nop) const { - int m1=0; - int m2=0; - int n=0; - - ModuleBase::Matrix3 iden(1,0,0,0,1,0,0,0,1); - ModuleBase::Matrix3 sig(1,0,0,0,1,0,0,0,1); - ModuleBase::Matrix3 temp1(1,0,0,0,1,0,0,0,1); - ModuleBase::Matrix3 temp2(1,0,0,0,1,0,0,0,1); - - bool flag = 0; - int order = 0; - int now = 0; - - symop[0] = iden; //identity (the trivial element) - nop = 1; - - //take all generators - for(int i = 0; i < ngen; ++i) - { - sig = symgen[i]; - flag = 1; - for(int j = 0; j < nop; ++j) - { - if(symop[j] == sig) - { - flag = 0; - break; - } - } - if(flag == 0) - { - continue; - } - - //Determine the order of the operation - temp1 = sig; - for(int j = 1; j < 100; ++j) - { - order = j; - if(temp1 == iden) - { - break; - } - temp1= sig * temp1; - } - now = nop; - for(int j = 0; j < nop; ++j) - { - temp1 = symop[j]; - for(int k = 1; k < order; ++k) - { - temp1 = sig * temp1; - - for(int l = 0; l < nop; ++l) - { - temp2 = symop[l] * temp1; - flag = 1; - for(int m = 0; m < now; ++m) - { - if(symop[m] == temp2) - { - flag = 0; - break; - } - } - if(flag == 0) - { - continue; //the new-found element has already existed. - } - - ++now; //the number of elements we found - if(now > 48) - { - std::cout<<"\n a: now= "< 48) - { - std::cout<<"\n b: now= "< 48) + { + std::cout << "\n a: now= " << now << std::endl; + std::cout << "\n There are too many symmetrical matrices!" << std::endl; + return; + } + symop[now - 1] = temp2; + } + } + if (j == 0) + { + n = now; + } + } + + m1 = nop; + m2 = now; + for (int j = 1; j < 50; ++j) + { + for (int k = nop; k < n; ++k) + { + for (int m = m1; m < m2; ++m) + { + temp1 = symop[k] * symop[m]; + flag = 1; + for (int l = 0; l < now; ++l) + { + if (symop[l] == temp1) + { + flag = 0; + break; + } + } + if (flag == 0) + { + continue; // the new-found element has already existed + } + + ++now; + if (now > 48) + { + std::cout << "\n b: now= " << now << std::endl; + std::cout << "\n There are too many symmetrical matrices!" << std::endl; + return; + } + symop[now - 1] = temp1; + } + } + if (now == m2) + { + break; // if no more new element could be found, stop the loop + } + m1 = m2; + m2 = now; + } + nop = now; + } } //-------------------------------------------------------------- -// set up all possible space group operators +// set up all possible space group operators // (integer rotation matrices and nontrivial translations -// given in crystal coordinates) +// given in crystal coordinates) // of a lattice with some arbitrary basis (atomic arrangement). //-------------------------------------------------------------- -void Symmetry_Basic::setgroup(ModuleBase::Matrix3* symop, int &nop, const int &ibrav) const +void Symmetry_Basic::setgroup(ModuleBase::Matrix3* symop, int& nop, const int& ibrav) const { - if(PARAM.inp.test_symmetry) ModuleBase::TITLE("Symmetry_Basic","setgroup"); - - ModuleBase::Matrix3 symgen[3]; - - ModuleBase::Matrix3 inv(-1,0,0,0,-1,0,0,0,-1); - ModuleBase::Matrix3 r3d(0,1,0,0,0,1,1,0,0); - ModuleBase::Matrix3 r6z(1,1,0,-1,0,0,0,0,1); - ModuleBase::Matrix3 r2hex(1,0,0,-1,-1,0,0,0,-1); - ModuleBase::Matrix3 r2tri(-1,0,0,0,0,-1,0,-1,0); - ModuleBase::Matrix3 r4zp(0,1,0,-1,0,0,0,0,1); - ModuleBase::Matrix3 r2yp(-1,0,0,0,1,0,0,0,-1); - ModuleBase::Matrix3 r4zbc(0,0,-1,1,1,1,0,-1,0); - ModuleBase::Matrix3 r4zfc(1,0,-1,1,0,0,1,-1,0); - ModuleBase::Matrix3 r2zp(-1,0,0,0,-1,0,0,0,1); - ModuleBase::Matrix3 r2ybc(0,0,1,-1,-1,-1,1,0,0); - ModuleBase::Matrix3 r2zbc(0,1,0,1,0,0,-1,-1,-1); - ModuleBase::Matrix3 r2ybas(0,-1,0,-1,0,0,0,0,-1); - ModuleBase::Matrix3 r2yfc(0,-1,1,0,-1,0,1,-1,0); - ModuleBase::Matrix3 r2zfc(0,1,-1,1,0,-1,0,0,-1); - - //the pure translation lattice (bravais lattice) has some maximum symmetry - //set first up the point group operations for this symmetry. - symgen[0] = inv; - - if(ibrav == 14) - { - this->matrigen(symgen, 1, symop, nop); - } - else if(ibrav == 13) - { - symgen[1] = r2ybas; - this->matrigen(symgen, 2, symop, nop); - } - else if(ibrav == 12) - { - symgen[1] = r2yp; - this->matrigen(symgen, 2, symop, nop); - } - else if(ibrav == 11) - { - symgen[1] = r2zp; - symgen[2] = r2ybas; - this->matrigen(symgen, 3, symop, nop); - } - else if(ibrav == 10) - { - symgen[1] = r2zfc; - symgen[2] = r2yfc; - this->matrigen(symgen, 3, symop, nop); - } - else if(ibrav == 9) - { - symgen[1] = r2zbc; - symgen[2] = r2ybc; - this->matrigen(symgen, 3, symop, nop); - } - else if(ibrav == 8) - { - symgen[1] = r2zp; - symgen[2] = r2yp; - this->matrigen(symgen, 3, symop, nop); - } - else if(ibrav == 7) - { - symgen[1] = r2tri; - symgen[2] = r3d; - this->matrigen(symgen, 3, symop, nop); - } - else if(ibrav == 6) - { - symgen[1] = r4zbc; - symgen[2] = r2ybc; - this->matrigen(symgen, 3, symop, nop); - } - else if(ibrav == 5) - { - symgen[1] = r4zp; - symgen[2] = r2yp; - this->matrigen(symgen, 3, symop, nop); - } - else if(ibrav == 4) - { - symgen[1] = r6z; - symgen[2] = r2hex; - this->matrigen(symgen, 3, symop, nop); - } - else if(ibrav == 3) - { - symgen[1] = r3d; - symgen[2] = r4zfc; - this->matrigen(symgen, 3, symop, nop); - } - else if(ibrav == 2) - { - symgen[1] = r3d; - symgen[2] = r4zbc; - this->matrigen(symgen, 3, symop, nop); - } - else if(ibrav == 1) - { - symgen[1] = r3d; - symgen[2] = r4zp; - this->matrigen(symgen, 3, symop, nop); - } - - if(test_brav) - { - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"ROTATION MATRICES",nop); - } - - if(PARAM.inp.test_symmetry > 1) - { - GlobalV::ofs_running<<" THERE ARE " << nop << " ROTATION MATRICES FOR THE PURE BRAVAIS LATTICE"<matrigen(symgen, 1, symop, nop); + } + else if (ibrav == 13) + { + symgen[1] = r2ybas; + this->matrigen(symgen, 2, symop, nop); + } + else if (ibrav == 12) + { + symgen[1] = r2yp; + this->matrigen(symgen, 2, symop, nop); + } + else if (ibrav == 11) + { + symgen[1] = r2zp; + symgen[2] = r2ybas; + this->matrigen(symgen, 3, symop, nop); + } + else if (ibrav == 10) + { + symgen[1] = r2zfc; + symgen[2] = r2yfc; + this->matrigen(symgen, 3, symop, nop); + } + else if (ibrav == 9) + { + symgen[1] = r2zbc; + symgen[2] = r2ybc; + this->matrigen(symgen, 3, symop, nop); + } + else if (ibrav == 8) + { + symgen[1] = r2zp; + symgen[2] = r2yp; + this->matrigen(symgen, 3, symop, nop); + } + else if (ibrav == 7) + { + symgen[1] = r2tri; + symgen[2] = r3d; + this->matrigen(symgen, 3, symop, nop); + } + else if (ibrav == 6) + { + symgen[1] = r4zbc; + symgen[2] = r2ybc; + this->matrigen(symgen, 3, symop, nop); + } + else if (ibrav == 5) + { + symgen[1] = r4zp; + symgen[2] = r2yp; + this->matrigen(symgen, 3, symop, nop); + } + else if (ibrav == 4) + { + symgen[1] = r6z; + symgen[2] = r2hex; + this->matrigen(symgen, 3, symop, nop); + } + else if (ibrav == 3) + { + symgen[1] = r3d; + symgen[2] = r4zfc; + this->matrigen(symgen, 3, symop, nop); + } + else if (ibrav == 2) + { + symgen[1] = r3d; + symgen[2] = r4zbc; + this->matrigen(symgen, 3, symop, nop); + } + else if (ibrav == 1) + { + symgen[1] = r3d; + symgen[2] = r4zp; + this->matrigen(symgen, 3, symop, nop); + } + + if (test_brav) + { + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "ROTATION MATRICES", nop); + } + + if (PARAM.inp.test_symmetry > 1) + { + GlobalV::ofs_running << " THERE ARE " << nop << " ROTATION MATRICES FOR THE PURE BRAVAIS LATTICE" << std::endl; + GlobalV::ofs_running << " E11 E12 E13 E21 E22 E23 E31 E32 E33" << std::endl; + for (int i = 0; i < nop; ++i) + { + GlobalV::ofs_running << " " << std::setw(3) << i + 1 << std::setw(4) << symop[i].e11 << std::setw(4) + << symop[i].e12 << std::setw(4) << symop[i].e13 << std::setw(4) << symop[i].e21 + << std::setw(4) << symop[i].e22 << std::setw(4) << symop[i].e23 << std::setw(4) + << symop[i].e31 << std::setw(4) << symop[i].e32 << std::setw(4) << symop[i].e33 + << std::endl; + } + } + + return; } -int Symmetry_Basic::subgroup(const int& nrot, const int& ninv, - const int& nc2, const int& nc3, const int& nc4, const int& nc6, - const int& ns1, const int& ns3, const int& ns4, const int& ns6)const +int Symmetry_Basic::subgroup(const int& nrot, + const int& ninv, + const int& nc2, + const int& nc3, + const int& nc4, + const int& nc6, + const int& ns1, + const int& ns3, + const int& ns4, + const int& ns6) const { if (nrot > 24) { if (ninv) { // if (nc2 >= 7 && nc3 >= 2 && nc6 >= 2 && ns1 >= 7 && ns3 >= 2 && ns6 >= 2) return 27;//D_6h - if (nc2 >= 3 && nc3 >= 8 && ns1 >= 3 && ns6 >= 8) return 29; //T_h + if (nc2 >= 3 && nc3 >= 8 && ns1 >= 3 && ns6 >= 8) + return 29; // T_h } else { - if (nc2 >= 9 && nc3 >= 8 && nc4 >= 6) return 30; //O - if (nc2 >= 3 && nc3 >= 8 && ns1 >= 6 && ns4 >= 6) return 31; //T_d + if (nc2 >= 9 && nc3 >= 8 && nc4 >= 6) + return 30; // O + if (nc2 >= 3 && nc3 >= 8 && ns1 >= 6 && ns4 >= 6) + return 31; // T_d } } - if (nrot > 16)//not else if: nrot>24 can also fall in this part and below + if (nrot > 16) // not else if: nrot>24 can also fall in this part and below { - if (ninv && nc2 >= 5 && nc4 >= 2 && ns1 >= 5 && ns4 >= 2) return 20; //D_4h + if (ninv && nc2 >= 5 && nc4 >= 2 && ns1 >= 5 && ns4 >= 2) + return 20; // D_4h } if (nrot > 12) { if (ninv) { - if (nc2 >= 1 && nc3 >= 2 && nc6 >= 2 && ns1 >= 1 && ns3 >= 2 && ns6 >= 2) return 23;//C_6h - if (nc2 >= 3 && nc3 >= 2 && ns1 >= 3 && ns6 >= 2)return 13;//D_3d + if (nc2 >= 1 && nc3 >= 2 && nc6 >= 2 && ns1 >= 1 && ns3 >= 2 && ns6 >= 2) + return 23; // C_6h + if (nc2 >= 3 && nc3 >= 2 && ns1 >= 3 && ns6 >= 2) + return 13; // D_3d } else { - if (nc2 >= 3 && nc3 >= 8)return 28; //T - if (nc2 >= 3 && nc3 >= 2 && ns1 >= 4 && ns3 >= 2) return 26;//D_3h - if (nc2 >= 1 && nc3 >= 2 && nc6 >= 2 && ns1 >= 6) return 25;//C_6v - if (nc2 >= 7 && nc3 >= 2 && nc6 >= 2) return 24;//D_6 + if (nc2 >= 3 && nc3 >= 8) + return 28; // T + if (nc2 >= 3 && nc3 >= 2 && ns1 >= 4 && ns3 >= 2) + return 26; // D_3h + if (nc2 >= 1 && nc3 >= 2 && nc6 >= 2 && ns1 >= 6) + return 25; // C_6v + if (nc2 >= 7 && nc3 >= 2 && nc6 >= 2) + return 24; // D_6 } } if (nrot > 8) { if (ninv) { - if (nc2 >= 1 && nc4 >= 2 && ns1 >= 1 && ns4 >= 2) return 16;//C_4h - if (nc2 >= 3 && ns1 >= 3)return 8;//D_2h + if (nc2 >= 1 && nc4 >= 2 && ns1 >= 1 && ns4 >= 2) + return 16; // C_4h + if (nc2 >= 3 && ns1 >= 3) + return 8; // D_2h } else { - if (nc2 >= 3 && ns1 >= 2 && ns4 >= 2)return 19;//D_2d - if (nc2 >= 1 && nc4 >= 2 && ns1 >= 4) return 18;//C_4v - if (nc2 >= 5 && nc4 >= 2)return 17;//D_4 + if (nc2 >= 3 && ns1 >= 2 && ns4 >= 2) + return 19; // D_2d + if (nc2 >= 1 && nc4 >= 2 && ns1 >= 4) + return 18; // C_4v + if (nc2 >= 5 && nc4 >= 2) + return 17; // D_4 } } if (nrot > 6) { - if (nc3 >= 2 && ns1 >= 1 && ns3 >= 2)return 22;//C_3h - if (nc2 >= 1 && nc3 >= 2 && nc6 >= 2)return 21;//C_6 - if (nc3 >= 2 && ns1 >= 3)return 12;//C_3v - if (nc2 >= 3 && nc3 >= 2)return 11;//D_3 - if (ninv && nc3 >= 2 && ns3 >= 2)return 10;//S_6 + if (nc3 >= 2 && ns1 >= 1 && ns3 >= 2) + return 22; // C_3h + if (nc2 >= 1 && nc3 >= 2 && nc6 >= 2) + return 21; // C_6 + if (nc3 >= 2 && ns1 >= 3) + return 12; // C_3v + if (nc2 >= 3 && nc3 >= 2) + return 11; // D_3 + if (ninv && nc3 >= 2 && ns3 >= 2) + return 10; // S_6 } if (nrot > 4) { - if (nc2 >= 1 && ns4 >= 2)return 15;//S_4 - if (nc2 >= 1 && nc4 >= 2)return 14;//C_4 - if (nc2 >= 1 && ns1 >= 2)return 7;//C_2v - if (nc2 >= 3)return 6;//D_2 - if (ninv && nc2 >= 1 && ns1 >= 1)return 5;//C_2h + if (nc2 >= 1 && ns4 >= 2) + return 15; // S_4 + if (nc2 >= 1 && nc4 >= 2) + return 14; // C_4 + if (nc2 >= 1 && ns1 >= 2) + return 7; // C_2v + if (nc2 >= 3) + return 6; // D_2 + if (ninv && nc2 >= 1 && ns1 >= 1) + return 5; // C_2h } if (nrot > 3) { - if (nc3 >= 2)return 9;//C_3 + if (nc3 >= 2) + return 9; // C_3 } if (nrot > 2) { - if (ns1 >= 1)return 4;//C_1h - if (nc2 >= 1)return 3;//C_2 - if (ninv)return 2;//S_2 + if (ns1 >= 1) + return 4; // C_1h + if (nc2 >= 1) + return 3; // C_2 + if (ninv) + return 2; // S_2 } - return 1;//C_1 + return 1; // C_1 } - -bool Symmetry_Basic::pointgroup(const int& nrot, int& pgnumber, - std::string& pgname, const ModuleBase::Matrix3* gmatrix, std::ofstream& ofs_running)const +bool Symmetry_Basic::pointgroup(const int& nrot, + int& pgnumber, + std::string& pgname, + const ModuleBase::Matrix3* gmatrix, + std::ofstream& ofs_running) const { - //------------------------------------------------------------------------- - //return the name of the point group - //the "name" (Schoenflies mark) of the group defined by following key: - // 1 --> C_1 9 --> C_3 17 --> D_4 25 --> C_6v * - // 2 --> S_2 10 --> S_6 18 --> C_4v 26 --> D_3h * - // 3 --> C_2 11 --> D_3 19 --> D_2d 27 --> D_6h * - // 4 --> C_1h 12 --> C_3v 20 --> D_4h 28 --> T * - // 5 --> C_2h 13 --> D_3d 21 --> C_6 29 --> T_h * - // 6 --> D_2 14 --> C_4 22 --> C_3h 30 --> O * - // 7 --> C_2v 15 --> S_4 23 --> C_6h 31 --> T_d * - // 8 --> D_2h 16 --> C_4h 24 --> D_6 32 --> O_h * - //------------------------------------------------------------------------- - - //there are four trivial cases which could be easily determined - //because the number of their elements are exclusive - if (PARAM.inp.test_symmetry) ModuleBase::TITLE("Symmetry_Basic", "pointgroup"); - - std::vector pgdict = { "none", "C_1", "S_2", "C_2", "C_1h", "C_2h", - "D_2", "C_2v", "D_2h", "C_3", "S_6", "D_3", "C_3v", "D_3d", "C_4", "S_4", "C_4h", - "D_4", "C_4v", "D_2d", "D_4h", "C_6", "C_3h", "C_6h", "D_6", "C_6v", "D_3h", "D_6h", - "T", "T_h", "O", "T_d", "O_h" }; - - if(nrot == 1) - { - pgnumber = 1; - pgname="C_1"; + //------------------------------------------------------------------------- + // return the name of the point group + // the "name" (Schoenflies mark) of the group defined by following key: + // 1 --> C_1 9 --> C_3 17 --> D_4 25 --> C_6v * + // 2 --> S_2 10 --> S_6 18 --> C_4v 26 --> D_3h * + // 3 --> C_2 11 --> D_3 19 --> D_2d 27 --> D_6h * + // 4 --> C_1h 12 --> C_3v 20 --> D_4h 28 --> T * + // 5 --> C_2h 13 --> D_3d 21 --> C_6 29 --> T_h * + // 6 --> D_2 14 --> C_4 22 --> C_3h 30 --> O * + // 7 --> C_2v 15 --> S_4 23 --> C_6h 31 --> T_d * + // 8 --> D_2h 16 --> C_4h 24 --> D_6 32 --> O_h * + //------------------------------------------------------------------------- + + // there are four trivial cases which could be easily determined + // because the number of their elements are exclusive + if (PARAM.inp.test_symmetry) + ModuleBase::TITLE("Symmetry_Basic", "pointgroup"); + + std::vector pgdict + = {"none", "C_1", "S_2", "C_2", "C_1h", "C_2h", "D_2", "C_2v", "D_2h", "C_3", "S_6", + "D_3", "C_3v", "D_3d", "C_4", "S_4", "C_4h", "D_4", "C_4v", "D_2d", "D_4h", "C_6", + "C_3h", "C_6h", "D_6", "C_6v", "D_3h", "D_6h", "T", "T_h", "O", "T_d", "O_h"}; + + if (nrot == 1) + { + pgnumber = 1; + pgname = "C_1"; return true; - } - if(nrot == 3) - { - pgnumber = 9; - pgname="C_3"; + } + if (nrot == 3) + { + pgnumber = 9; + pgname = "C_3"; return true; - } - if(nrot == 16) - { - pgnumber = 20; - pgname="D_4h"; + } + if (nrot == 16) + { + pgnumber = 20; + pgname = "D_4h"; return true; - } - if(nrot == 48) - { - pgnumber = 32; - pgname="O_h"; + } + if (nrot == 48) + { + pgnumber = 32; + pgname = "O_h"; return true; - } - - //------------------------------------------------------------------------------- - //all other groups need further investigations and detailed analysis - //first determine the type of elements and count them - //Possible elements are E, I, C_2, C_3, C_4, C_6 and S_1, S_3, S_4, S_6 (S_1 = m) - //The type of a symmetry operation can be identified simply by - //calculating the trace and the determinant of the rotation matrix. The - //combination of these two quantities is specific for specific elements: - //------------------------------------------------------------------------------- - - // Element: E I C_2 C_3 C_4 C_6 S_1 S_6 S_4 S_3 - // Trace: +3 -3 -1 0 +1 +2 +1 0 -1 -2 - // Determinant: +1 -1 +1 +1 +1 +1 -1 -1 -1 -1 - - int trace = 0; - int det = 0; - int ninv = 0; - - int nc2 = 0; - int nc3 = 0; - int nc4 = 0; - int nc6 = 0; - int ns1 = 0; - int ns3 = 0; //mohan add 2012-01-15 - int ns4 = 0; - int ns6 = 0; //mohan add 2012-01-15 - - for(int i = 0; i < nrot; ++i) - { - //calculate the trace of a matrix - trace = int(gmatrix[i].e11+gmatrix[i].e22+gmatrix[i].e33); - //calculate the determinant of a matrix - det = int(gmatrix[i].Det()); - - if(trace == 3) - { - continue; //found unity operator (trivial) - } - //found inversion - if(trace == -3) - { - ninv = 1; - continue; - } - - if(trace == -1 && det == 1) ++nc2; - else if(trace == 0 && det == 1) ++nc3; - else if(trace == 1 && det == 1) ++nc4; - else if(trace == 2 && det == 1) ++nc6; - else if(trace == 1 && det == -1) ++ns1; - else if(trace == 0 && det == -1) ++ns6; //mohan add 2012-01-15 - else if(trace == -1 && det == -1) ++ns4; - else if(trace == -2 && det == -1) ++ns3; //mohan add 2012-01-15 - } - - if(test_brav) - { - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"C2",nc2); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"C3",nc3); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"C4",nc4); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"C6",nc6); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"S1",ns1); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"S3",ns3); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"S4",ns4); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"S6",ns6); - } - - if(nrot == 2) - { - if(ninv == 1) - { - pgnumber = 2; - pgname="S_2"; + } + + //------------------------------------------------------------------------------- + // all other groups need further investigations and detailed analysis + // first determine the type of elements and count them + // Possible elements are E, I, C_2, C_3, C_4, C_6 and S_1, S_3, S_4, S_6 (S_1 = m) + // The type of a symmetry operation can be identified simply by + // calculating the trace and the determinant of the rotation matrix. The + // combination of these two quantities is specific for specific elements: + //------------------------------------------------------------------------------- + + // Element: E I C_2 C_3 C_4 C_6 S_1 S_6 S_4 S_3 + // Trace: +3 -3 -1 0 +1 +2 +1 0 -1 -2 + // Determinant: +1 -1 +1 +1 +1 +1 -1 -1 -1 -1 + + int trace = 0; + int det = 0; + int ninv = 0; + + int nc2 = 0; + int nc3 = 0; + int nc4 = 0; + int nc6 = 0; + int ns1 = 0; + int ns3 = 0; // mohan add 2012-01-15 + int ns4 = 0; + int ns6 = 0; // mohan add 2012-01-15 + + for (int i = 0; i < nrot; ++i) + { + // calculate the trace of a matrix + trace = int(gmatrix[i].e11 + gmatrix[i].e22 + gmatrix[i].e33); + // calculate the determinant of a matrix + det = int(gmatrix[i].Det()); + + if (trace == 3) + { + continue; // found unity operator (trivial) + } + // found inversion + if (trace == -3) + { + ninv = 1; + continue; + } + + if (trace == -1 && det == 1) + ++nc2; + else if (trace == 0 && det == 1) + ++nc3; + else if (trace == 1 && det == 1) + ++nc4; + else if (trace == 2 && det == 1) + ++nc6; + else if (trace == 1 && det == -1) + ++ns1; + else if (trace == 0 && det == -1) + ++ns6; // mohan add 2012-01-15 + else if (trace == -1 && det == -1) + ++ns4; + else if (trace == -2 && det == -1) + ++ns3; // mohan add 2012-01-15 + } + + if (test_brav) + { + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "C2", nc2); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "C3", nc3); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "C4", nc4); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "C6", nc6); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "S1", ns1); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "S3", ns3); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "S4", ns4); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "S6", ns6); + } + + if (nrot == 2) + { + if (ninv == 1) + { + pgnumber = 2; + pgname = "S_2"; return true; - } - if(nc2 == 1) - { - pgnumber = 3; - pgname="C_2"; + } + if (nc2 == 1) + { + pgnumber = 3; + pgname = "C_2"; return true; - } - if(ns1 == 1) - { - pgnumber = 4; - pgname="C_1h"; + } + if (ns1 == 1) + { + pgnumber = 4; + pgname = "C_1h"; return true; - } - } - if(nrot == 4) - { - if(ninv == 1) - { - pgnumber = 5; - pgname="C_2h"; + } + } + if (nrot == 4) + { + if (ninv == 1) + { + pgnumber = 5; + pgname = "C_2h"; return true; - } - if(nc2 == 3) - { - pgnumber = 6; - pgname="D_2"; + } + if (nc2 == 3) + { + pgnumber = 6; + pgname = "D_2"; return true; - } - if(ns1 == 2) - { - pgnumber = 7; - pgname="C_2v"; + } + if (ns1 == 2) + { + pgnumber = 7; + pgname = "C_2v"; return true; - } - if(nc4 == 2) - { - pgnumber = 14; - pgname="C_4"; + } + if (nc4 == 2) + { + pgnumber = 14; + pgname = "C_4"; return true; - } - if(ns4 == 2) - { - pgnumber = 15; - pgname="S_4"; + } + if (ns4 == 2) + { + pgnumber = 15; + pgname = "S_4"; return true; - } - } - if(nrot == 6) - { - if(ninv == 1) - { - pgnumber = 10; - pgname="S_6"; + } + } + if (nrot == 6) + { + if (ninv == 1) + { + pgnumber = 10; + pgname = "S_6"; return true; - } - if(nc2 == 3) - { - pgnumber = 11; - pgname="D_3"; + } + if (nc2 == 3) + { + pgnumber = 11; + pgname = "D_3"; return true; - } - if(ns1 == 3) - { - pgnumber = 12; - pgname="C_3v"; + } + if (ns1 == 3) + { + pgnumber = 12; + pgname = "C_3v"; return true; - } - if(nc2 == 1) - { - pgnumber = 21; - pgname="C_6"; + } + if (nc2 == 1) + { + pgnumber = 21; + pgname = "C_6"; return true; - } - if(ns1 == 1) - { - pgnumber = 22; - pgname="C_3h"; + } + if (ns1 == 1) + { + pgnumber = 22; + pgname = "C_3h"; return true; - } - } - if(nrot == 8) - { - if(ns1 == 3) - { - pgnumber = 8; - pgname="D_2h"; + } + } + if (nrot == 8) + { + if (ns1 == 3) + { + pgnumber = 8; + pgname = "D_2h"; return true; - } - if(ns1 == 1) - { - pgnumber = 16; - pgname="C_4h"; + } + if (ns1 == 1) + { + pgnumber = 16; + pgname = "C_4h"; return true; - } - if(ns1 == 0) - { - pgnumber = 17; - pgname="D_4"; + } + if (ns1 == 0) + { + pgnumber = 17; + pgname = "D_4"; return true; - } - if(ns1 == 4) - { - pgnumber = 18; - pgname="C_4v"; + } + if (ns1 == 4) + { + pgnumber = 18; + pgname = "C_4v"; return true; - } - if(ns1 == 2) - { - pgnumber = 19; - pgname="D_2d"; + } + if (ns1 == 2) + { + pgnumber = 19; + pgname = "D_2d"; return true; - } - } - if(nrot == 12) - { - if(ns1 == 3) - { - pgnumber = 13; - pgname="D_3d"; + } + } + if (nrot == 12) + { + if (ns1 == 3) + { + pgnumber = 13; + pgname = "D_3d"; return true; - } - if(ns1 == 1) - { - pgnumber = 23; - pgname="C_6h"; + } + if (ns1 == 1) + { + pgnumber = 23; + pgname = "C_6h"; return true; - } - if(nc2 == 7) - { - pgnumber = 24; - pgname="D_6"; + } + if (nc2 == 7) + { + pgnumber = 24; + pgname = "D_6"; return true; - } - if(ns1 == 6) - { - pgnumber = 25; - pgname="C_6v"; + } + if (ns1 == 6) + { + pgnumber = 25; + pgname = "C_6v"; return true; - } - if(ns1 == 4) - { - pgnumber = 26; - pgname="D_3h"; + } + if (ns1 == 4) + { + pgnumber = 26; + pgname = "D_3h"; return true; - } - if(nc3 == 8) - { - pgnumber = 28; - pgname="T"; + } + if (nc3 == 8) + { + pgnumber = 28; + pgname = "T"; return true; - } - } - if(nrot == 24) - { - if(nc6 == 2) - { - pgnumber = 27; - pgname="D_6h"; + } + } + if (nrot == 24) + { + if (nc6 == 2) + { + pgnumber = 27; + pgname = "D_6h"; return true; - } - if(ninv == 1) - { - pgnumber = 29; - pgname="T_h"; + } + if (ninv == 1) + { + pgnumber = 29; + pgname = "T_h"; return true; - } - if(nc4 == 6) - { - pgnumber = 30; - pgname="O"; + } + if (nc4 == 6) + { + pgnumber = 30; + pgname = "O"; return true; - } - if(ns4 == 6) - { - pgnumber = 31; - pgname="T_d"; + } + if (ns4 == 6) + { + pgnumber = 31; + pgname = "T_d"; return true; - } - } + } + } GlobalV::ofs_running << "\n WARNING: Symmetry operations cannot completely constitute a point group.\n\ - It'll be better to try another `symmetry_prec`.\n Now search the subgroups ..." << std::endl; + It'll be better to try another `symmetry_prec`.\n Now search the subgroups ..." + << std::endl; pgnumber = this->subgroup(nrot, ninv, nc2, nc3, nc4, nc6, ns1, ns3, ns4, ns6); pgname = pgdict[pgnumber]; return false; } - -void Symmetry_Basic::rotate( ModuleBase::Matrix3 &gmatrix, ModuleBase::Vector3 >rans, - int i, int j, int k, // FFT grid index. - const int nr1, const int nr2, const int nr3, // dimension of FFT grid. - int &ri, int &rj, int &rk) +void Symmetry_Basic::rotate(ModuleBase::Matrix3& gmatrix, + ModuleBase::Vector3& gtrans, + int i, + int j, + int k, // FFT grid index. + const int nr1, + const int nr2, + const int nr3, // dimension of FFT grid. + int& ri, + int& rj, + int& rk) { - static ModuleBase::Matrix3 g; - g.e11 = gmatrix.e11; - g.e21 = gmatrix.e21 * (double)nr1 / (double)nr2; - g.e31 = gmatrix.e31 * (double)nr1 / (double)nr3; - g.e12 = gmatrix.e12 * (double)nr2 / (double)nr1; - g.e22 = gmatrix.e22; - g.e32 = gmatrix.e32 * (double)nr2 / (double)nr3; - g.e13 = gmatrix.e13 * (double)nr3 / (double)nr1; - g.e23 = gmatrix.e23 * (double)nr3 / (double)nr2; - g.e33 = gmatrix.e33; - - ri = int(g.e11 * i + g.e21 * j + g.e31 * k) + (int)(gtrans.x * nr1); - if (ri < 0) - { - ri += 10 * nr1; - } - ri = ri%nr1; - rj = int(g.e12 * i + g.e22 * j + g.e32 * k) + (int)(gtrans.y * nr2); - if (rj < 0) - { - rj += 10 * nr2; - } - rj = rj%nr2; - rk = int(g.e13 * i + g.e23 * j + g.e33 * k) + (int)(gtrans.z * nr3); - if (rk < 0) - { - rk += 10 * nr3; - } - rk = rk%nr3; - return; + static ModuleBase::Matrix3 g; + g.e11 = gmatrix.e11; + g.e21 = gmatrix.e21 * (double)nr1 / (double)nr2; + g.e31 = gmatrix.e31 * (double)nr1 / (double)nr3; + g.e12 = gmatrix.e12 * (double)nr2 / (double)nr1; + g.e22 = gmatrix.e22; + g.e32 = gmatrix.e32 * (double)nr2 / (double)nr3; + g.e13 = gmatrix.e13 * (double)nr3 / (double)nr1; + g.e23 = gmatrix.e23 * (double)nr3 / (double)nr2; + g.e33 = gmatrix.e33; + + ri = int(g.e11 * i + g.e21 * j + g.e31 * k) + (int)(gtrans.x * nr1); + if (ri < 0) + { + ri += 10 * nr1; + } + ri = ri % nr1; + rj = int(g.e12 * i + g.e22 * j + g.e32 * k) + (int)(gtrans.y * nr2); + if (rj < 0) + { + rj += 10 * nr2; + } + rj = rj % nr2; + rk = int(g.e13 * i + g.e23 * j + g.e33 * k) + (int)(gtrans.z * nr3); + if (rk < 0) + { + rk += 10 * nr3; + } + rk = rk % nr3; + return; } -// atom ordering for each atom type +// atom ordering for each atom type // by a "weighted function" f // (instead of ordering by x, y, z directly) -void Symmetry_Basic::atom_ordering_new(double *posi, const int natom, int *subindex) const +void Symmetry_Basic::atom_ordering_new(double* posi, const int natom, int* subindex) const { - //order the atomic positions inside a supercell by a unique ordering scheme - subindex[0] = 0; - - if(natom == 1) - { - //if there is only one atom, it is not necessary to order - return; - } - - std::vector tmpx(natom); - std::vector tmpy(natom); - std::vector tmpz(natom); - for(int i=0; iorder_atoms(posi, natom, subindex); - for(int i=0; i1) //need a new sort - { - subindex[0] = 0; - for(int j=0; jorder_atoms(&posi[i*3], nxequal, subindex); - } - i=ix_right; - } - - delete[] weighted_func; - return; + // order the atomic positions inside a supercell by a unique ordering scheme + subindex[0] = 0; + + if (natom == 1) + { + // if there is only one atom, it is not necessary to order + return; + } + + std::vector tmpx(natom); + std::vector tmpy(natom); + std::vector tmpz(natom); + for (int i = 0; i < natom; i++) + { + tmpx[i] = posi[i * 3]; + tmpy[i] = posi[i * 3 + 1]; + tmpz[i] = posi[i * 3 + 2]; + } + double x_max = *max_element(tmpx.begin(), tmpx.end()); + double x_min = *min_element(tmpx.begin(), tmpx.end()); + double y_max = *max_element(tmpy.begin(), tmpy.end()); + double y_min = *min_element(tmpy.begin(), tmpy.end()); + double z_max = *max_element(tmpz.begin(), tmpz.end()); + double z_min = *min_element(tmpz.begin(), tmpz.end()); + + double* weighted_func = new double[natom]; + + // the first time: f(x, y, z) + for (int i = 0; i < natom; i++) + { + weighted_func[i] = 1 / epsilon / epsilon * tmpx[i] + 1 / epsilon * tmpy[i] + tmpz[i]; + } + ModuleBase::heapsort(natom, weighted_func, subindex); + this->order_atoms(posi, natom, subindex); + for (int i = 0; i < natom; i++) + { + tmpx[i] = posi[i * 3]; + tmpy[i] = posi[i * 3 + 1]; + tmpz[i] = posi[i * 3 + 2]; + } + + // the second time: f(y, z) for fixed x + for (int i = 0; i < natom - 1;) + { + int ix_right = i + 1; // right bound is no included + while (ix_right < natom && equal(tmpx[ix_right], tmpx[i])) + { + ++ix_right; + } + + int nxequal = ix_right - i; + if (nxequal > 1) // need a new sort + { + subindex[0] = 0; + for (int j = 0; j < nxequal; ++j) + { + weighted_func[j] = 1 / epsilon * tmpy[i + j] + tmpz[i + j]; + } + ModuleBase::heapsort(nxequal, weighted_func, subindex); + this->order_atoms(&posi[i * 3], nxequal, subindex); + } + i = ix_right; + } + + delete[] weighted_func; + return; } -void Symmetry_Basic::test_atom_ordering(double *posi, const int natom, int *subindex) const +void Symmetry_Basic::test_atom_ordering(double* posi, const int natom, int* subindex) const { - //an interface to test a protected function - this->atom_ordering_new(posi, natom, subindex); -} + // an interface to test a protected function + this->atom_ordering_new(posi, natom, subindex); } +} // namespace ModuleSymmetry diff --git a/source/module_cell/module_symmetry/symmetry_basic.h b/source/module_cell/module_symmetry/symmetry_basic.h index 5a2a5bf567..71f6332e0b 100644 --- a/source/module_cell/module_symmetry/symmetry_basic.h +++ b/source/module_cell/module_symmetry/symmetry_basic.h @@ -4,68 +4,84 @@ //========================================================== #ifndef SYMMETRY_BASIC_H #define SYMMETRY_BASIC_H +#include "source_base/matrix3.h" +#include "source_base/mymath.h" +#include "source_base/ylm.h" #include "symm_other.h" -#include "module_base/mymath.h" -#include "module_base/ylm.h" -#include "module_base/matrix3.h" namespace ModuleSymmetry { class Symmetry_Basic { - public: + public: + Symmetry_Basic(){}; + ~Symmetry_Basic(){}; - Symmetry_Basic() {}; - ~Symmetry_Basic() {}; + double epsilon; ///< the precision of symmetry operation + double epsilon_input; ///< the input value of symmetry_prec, should not be changed - double epsilon; ///< the precision of symmetry operation - double epsilon_input; ///< the input value of symmetry_prec, should not be changed - - // control accuray - bool equal(const double &m, const double &n)const; - void check_boundary(double &x)const; - double get_translation_vector(const double& x1, const double& x2)const; - void check_translation(double &x, const double &t) const; + // control accuray + bool equal(const double& m, const double& n) const; + void check_boundary(double& x) const; + double get_translation_vector(const double& x1, const double& x2) const; + void check_translation(double& x, const double& t) const; double check_diff(const double& x1, const double& x2) const; - - void veccon( - double *va, - double *vb, - const int num, - const ModuleBase::Vector3 &aa1, - const ModuleBase::Vector3 &aa2, - const ModuleBase::Vector3 &aa3, - const ModuleBase::Vector3 &bb1, - const ModuleBase::Vector3 &bb2, - const ModuleBase::Vector3 &bb3 - ); - void matrigen(ModuleBase::Matrix3 *symgen, const int ngen, ModuleBase::Matrix3* symop, int &nop) const; - void setgroup(ModuleBase::Matrix3 *symop, int &nop, const int &ibrav) const; - void rotate( - ModuleBase::Matrix3 &gmatrix, ModuleBase::Vector3 >rans, - int i, int j, int k, const int, const int, const int, int&, int&, int&); - void test_atom_ordering(double *posi, const int natom, int *subindex) const; + + void veccon(double* va, + double* vb, + const int num, + const ModuleBase::Vector3& aa1, + const ModuleBase::Vector3& aa2, + const ModuleBase::Vector3& aa3, + const ModuleBase::Vector3& bb1, + const ModuleBase::Vector3& bb2, + const ModuleBase::Vector3& bb3); + void matrigen(ModuleBase::Matrix3* symgen, const int ngen, ModuleBase::Matrix3* symop, int& nop) const; + void setgroup(ModuleBase::Matrix3* symop, int& nop, const int& ibrav) const; + void rotate(ModuleBase::Matrix3& gmatrix, + ModuleBase::Vector3& gtrans, + int i, + int j, + int k, + const int, + const int, + const int, + int&, + int&, + int&); + void test_atom_ordering(double* posi, const int natom, int* subindex) const; /// find out the greatest subgrop according to the number of operations of certain type. /// used to deal with incomplete group due to a subtle`symmetry_prec` - int subgroup(const int& nrot, const int& ninv, const int& nc2, const int& nc3, const int& nc4, const int& nc6, - const int& ns1, const int& ns3, const int& ns4, const int& ns6)const; - bool pointgroup(const int& nrot, int& pgnumber, std::string& pgname, const ModuleBase::Matrix3* gmatrix, std::ofstream& ofs_running)const; + int subgroup(const int& nrot, + const int& ninv, + const int& nc2, + const int& nc3, + const int& nc4, + const int& nc6, + const int& ns1, + const int& ns3, + const int& ns4, + const int& ns6) const; + bool pointgroup(const int& nrot, + int& pgnumber, + std::string& pgname, + const ModuleBase::Matrix3* gmatrix, + std::ofstream& ofs_running) const; -protected: + protected: std::string get_brav_name(const int ibrav) const; - void atom_ordering(double *posi, const int natom, int *subindex); - void atom_ordering_new(double *posi, const int natom, int *subindex) const; - - private: + void atom_ordering(double* posi, const int natom, int* subindex); + void atom_ordering_new(double* posi, const int natom, int* subindex) const; - void order_atoms(double* pos, const int &nat, const int *index) const; - void order_y(double *pos, const int &oldpos, const int &newpos); - void order_z(double *pos, const int &oldpos, const int &newpos); + private: + void order_atoms(double* pos, const int& nat, const int* index) const; + void order_y(double* pos, const int& oldpos, const int& newpos); + void order_z(double* pos, const int& oldpos, const int& newpos); }; -//for test only +// for test only extern bool test_brav; -}//end of define namespace +} // namespace ModuleSymmetry #endif diff --git a/source/module_cell/module_symmetry/test/symmetry_test.h b/source/module_cell/module_symmetry/test/symmetry_test.h index f50e045ff3..3437d34f22 100644 --- a/source/module_cell/module_symmetry/test/symmetry_test.h +++ b/source/module_cell/module_symmetry/test/symmetry_test.h @@ -1,6 +1,7 @@ #pragma once -#include "module_base/mathzone.h" #include "module_cell/unitcell.h" +#include "source_base/mathzone.h" + #include "gtest/gtest.h" #define DOUBLETHRESHOLD 1e-8 @@ -14,22 +15,23 @@ struct atomtype_ struct stru_ { int ibrav; - std::string point_group; // Schoenflies symbol + std::string point_group; // Schoenflies symbol std::string point_group_hm; // Hermann–Mauguin notation. std::string space_group; std::vector cell; std::vector all_type; - std::string coordtype; // caltesian or direct - std::vector force_zero_iat; // the index of atoms whose force should be zero - std::map force_oppo_iat; // the index of atoms pairs whose forces should be opposite + std::string coordtype; // caltesian or direct + std::vector force_zero_iat; // the index of atoms whose force should be zero + std::map force_oppo_iat; // the index of atoms pairs whose forces should be opposite std::vector> force_oppo_iat_xyz; //{ia1, ia2, xoppo(1)/eq(0), yoppo, zoppo} - std::vector> stress_zero; //a set of elements in the stress tensor that should be zero - std::vector>> stress_eq; //a set of elements in the stress tensor that should be equal + std::vector> stress_zero; // a set of elements in the stress tensor that should be zero + std::vector>> + stress_eq; // a set of elements in the stress tensor that should be equal }; class SymmetryTest : public testing::Test { -protected: + protected: UnitCell ucell; std::ofstream ofs_running; void construct_ucell(stru_& stru); diff --git a/source/module_cell/parallel_kpoints.cpp b/source/module_cell/parallel_kpoints.cpp index a0351e6560..8d0f804477 100644 --- a/source/module_cell/parallel_kpoints.cpp +++ b/source/module_cell/parallel_kpoints.cpp @@ -1,7 +1,7 @@ #include "parallel_kpoints.h" -#include "module_base/parallel_common.h" -#include "module_base/parallel_global.h" +#include "source_base/parallel_common.h" +#include "source_base/parallel_global.h" // the kpoints here are reduced after symmetry applied. void Parallel_Kpoints::kinfo(int& nkstot_in, @@ -109,7 +109,6 @@ void Parallel_Kpoints::set_startpro_pool() return; } - // gather kpoints from all processor pools, only need to be called by the first processor of each pool. void Parallel_Kpoints::gatherkvec(const std::vector>& vec_local, std::vector>& vec_global) const @@ -150,7 +149,6 @@ void Parallel_Kpoints::pool_collection(double& value, const double* wk, const in { MPI_Status ierror; MPI_Recv(&value, 1, MPI_DOUBLE, this->startpro_pool[pool], ik, MPI_COMM_WORLD, &ierror); - } } else @@ -192,7 +190,9 @@ void Parallel_Kpoints::pool_collection(double* value_re, return; } -void Parallel_Kpoints::pool_collection(std::complex* value, const ModuleBase::ComplexArray& w, const int& ik) const +void Parallel_Kpoints::pool_collection(std::complex* value, + const ModuleBase::ComplexArray& w, + const int& ik) const { const int dim2 = w.getBound2(); const int dim3 = w.getBound3(); @@ -211,10 +211,10 @@ void Parallel_Kpoints::pool_collection_aux(T* value, const V& w, const int& dim, T* p = &w.ptr[begin]; // temprary restrict kpar=1 for NSPIN=2 case for generating_orbitals int pool = 0; - if (this->nspin != 2) - { - pool = this->whichpool[ik]; - } + if (this->nspin != 2) + { + pool = this->whichpool[ik]; + } if (this->rank_in_pool == 0) { diff --git a/source/module_cell/parallel_kpoints.h b/source/module_cell/parallel_kpoints.h index 971a2849f2..f29ae540fb 100644 --- a/source/module_cell/parallel_kpoints.h +++ b/source/module_cell/parallel_kpoints.h @@ -1,10 +1,10 @@ #ifndef PARALLEL_KPOINTS_H #define PARALLEL_KPOINTS_H -#include "module_base/complexarray.h" -#include "module_base/global_function.h" -#include "module_base/realarray.h" -#include "module_base/vector3.h" +#include "source_base/complexarray.h" +#include "source_base/global_function.h" +#include "source_base/realarray.h" +#include "source_base/vector3.h" class Parallel_Kpoints { diff --git a/source/module_cell/print_cell.cpp b/source/module_cell/print_cell.cpp index 3ad653ee83..1f509a5874 100644 --- a/source/module_cell/print_cell.cpp +++ b/source/module_cell/print_cell.cpp @@ -1,169 +1,162 @@ -#include -#include - #include "print_cell.h" -#include "module_base/formatter.h" -#include "module_base/tool_title.h" -#include "module_base/global_variable.h" + +#include "source_base/formatter.h" +#include "source_base/global_variable.h" +#include "source_base/tool_title.h" + +#include +#include namespace unitcell { - void print_tau(Atom* atoms, - const std::string& Coordinate, - const int ntype, - const double lat0, - std::ofstream &ofs) - { - ModuleBase::TITLE("UnitCell", "print_tau"); - // assert (direct || Coordinate == "Cartesian" || Coordinate == "Cartesian_angstrom"); // this line causes abort in unittest ReadAtomPositionsCACXY. - // previously there are two if-statements, the first is `if(Coordinate == "Direct")` and the second is `if(Coordinate == "Cartesian" || Coordiante == "Cartesian_angstrom")` - // however the Coordinate can also be value among Cartesian_angstrom_center_xy, Cartesian_angstrom_center_xz, Cartesian_angstrom_center_yz and Cartesian_angstrom_center_xyz +void print_tau(Atom* atoms, const std::string& Coordinate, const int ntype, const double lat0, std::ofstream& ofs) +{ + ModuleBase::TITLE("UnitCell", "print_tau"); + // assert (direct || Coordinate == "Cartesian" || Coordinate == "Cartesian_angstrom"); // this line causes abort in + // unittest ReadAtomPositionsCACXY. previously there are two if-statements, the first is `if(Coordinate == + // "Direct")` and the second is `if(Coordinate == "Cartesian" || Coordiante == "Cartesian_angstrom")` however the + // Coordinate can also be value among Cartesian_angstrom_center_xy, Cartesian_angstrom_center_xz, + // Cartesian_angstrom_center_yz and Cartesian_angstrom_center_xyz - // if Coordinate has value one of them, this print_tau will not print anything. - std::regex pattern("Direct|Cartesian(_angstrom)?(_center_(xy|xz|yz|xyz))?"); - assert(std::regex_search(Coordinate, pattern)); - bool direct = (Coordinate == "Direct"); + // if Coordinate has value one of them, this print_tau will not print anything. + std::regex pattern("Direct|Cartesian(_angstrom)?(_center_(xy|xz|yz|xyz))?"); + assert(std::regex_search(Coordinate, pattern)); + bool direct = (Coordinate == "Direct"); - //---------------------- - // print atom positions - //---------------------- - std::string table; - table += direct? " DIRECT COORDINATES\n": FmtCore::format(" CARTESIAN COORDINATES ( UNIT = %15.8f Bohr ).\n", lat0); - table += FmtCore::format("%5s%19s%19s%19s%8s\n", "atom", "x", "y", "z", "mag"); - for(int it = 0; it < ntype; it++) + //---------------------- + // print atom positions + //---------------------- + std::string table; + table + += direct ? " DIRECT COORDINATES\n" : FmtCore::format(" CARTESIAN COORDINATES ( UNIT = %15.8f Bohr ).\n", lat0); + table += FmtCore::format("%5s%19s%19s%19s%8s\n", "atom", "x", "y", "z", "mag"); + for (int it = 0; it < ntype; it++) + { + for (int ia = 0; ia < atoms[it].na; ia++) { - for (int ia = 0; ia < atoms[it].na; ia++) - { - const double& x = direct? atoms[it].taud[ia].x: atoms[it].tau[ia].x; - const double& y = direct? atoms[it].taud[ia].y: atoms[it].tau[ia].y; - const double& z = direct? atoms[it].taud[ia].z: atoms[it].tau[ia].z; - table += FmtCore::format("%5s%19.12f%19.12f%19.12f%8.4f\n", - atoms[it].label, - x, - y, - z, - atoms[it].mag[ia]); - } + const double& x = direct ? atoms[it].taud[ia].x : atoms[it].tau[ia].x; + const double& y = direct ? atoms[it].taud[ia].y : atoms[it].tau[ia].y; + const double& z = direct ? atoms[it].taud[ia].z : atoms[it].tau[ia].z; + table += FmtCore::format("%5s%19.12f%19.12f%19.12f%8.4f\n", atoms[it].label, x, y, z, atoms[it].mag[ia]); } - table += "\n"; - ofs << table; + } + table += "\n"; + ofs << table; + // print velocities + ofs << " ATOMIC VELOCITIES" << std::endl; + ofs << std::setprecision(12); + ofs << std::setw(5) << "atom" << std::setw(19) << "vx" << std::setw(19) << "vy" << std::setw(19) << "vz" + << std::endl; - // print velocities - ofs << " ATOMIC VELOCITIES" << std::endl; - ofs << std::setprecision(12); - ofs << std::setw(5) << "atom" - << std::setw(19) << "vx" - << std::setw(19) << "vy" - << std::setw(19) << "vz" - << std::endl; - - for(int it = 0; it < ntype; it++) - { - for (int ia = 0; ia < atoms[it].na; ia++) - { - ofs << std::setw(5) << atoms[it].label; - ofs << " " << std::setw(18) << atoms[it].vel[ia].x; - ofs << " " << std::setw(18) << atoms[it].vel[ia].y; - ofs << " " << std::setw(18) << atoms[it].vel[ia].z; - ofs << std::endl; - } - } - ofs << std::endl; - ofs << std::setprecision(6); // return to 6, as original + for (int it = 0; it < ntype; it++) + { + for (int ia = 0; ia < atoms[it].na; ia++) + { + ofs << std::setw(5) << atoms[it].label; + ofs << " " << std::setw(18) << atoms[it].vel[ia].x; + ofs << " " << std::setw(18) << atoms[it].vel[ia].y; + ofs << " " << std::setw(18) << atoms[it].vel[ia].z; + ofs << std::endl; + } + } + ofs << std::endl; + ofs << std::setprecision(6); // return to 6, as original + return; +} - return; +void print_stru_file(const UnitCell& ucell, + const Atom* atoms, + const ModuleBase::Matrix3& latvec, + const std::string& fn, + const int& nspin, + const bool& direct, + const bool& vel, + const bool& magmom, + const bool& orb, + const bool& dpks_desc, + const int& iproc) +{ + ModuleBase::TITLE("UnitCell", "print_stru_file"); + if (iproc != 0) + { + return; // old: if(GlobalV::MY_RANK != 0) return; } - - void print_stru_file(const UnitCell& ucell, - const Atom* atoms, - const ModuleBase::Matrix3& latvec, - const std::string& fn, - const int& nspin, - const bool& direct, - const bool& vel, - const bool& magmom, - const bool& orb, - const bool& dpks_desc, - const int& iproc) + // ATOMIC_SPECIES + std::string str = "ATOMIC_SPECIES\n"; + for (int it = 0; it < ucell.ntype; it++) { - ModuleBase::TITLE("UnitCell","print_stru_file"); - if (iproc != 0) + str += FmtCore::format("%s %8.4f %s %s\n", + ucell.atom_label[it], + ucell.atom_mass[it], + ucell.pseudo_fn[it], + ucell.pseudo_type[it]); + } + // NUMERICAL_ORBITAL + if (orb) + { + str += "\nNUMERICAL_ORBITAL\n"; + for (int it = 0; it < ucell.ntype; it++) { - return; // old: if(GlobalV::MY_RANK != 0) return; - } - // ATOMIC_SPECIES - std::string str = "ATOMIC_SPECIES\n"; - for(int it=0; it> one_string && one_string[0] != '#') { - if (one_string == "auto" || one_string == "upf" - || one_string == "vwr" || one_string == "upf201" || one_string == "blps") + if (one_string == "auto" || one_string == "upf" || one_string == "vwr" || one_string == "upf201" + || one_string == "blps") { ucell.pseudo_type[i] = one_string; } @@ -60,37 +57,38 @@ bool read_atom_species(std::ifstream& ifa, } else { - GlobalV::ofs_warning << "unrecognized pseudopotential type: " - << one_string << ", check your STRU file." << std::endl; + GlobalV::ofs_warning << "unrecognized pseudopotential type: " << one_string + << ", check your STRU file." << std::endl; ModuleBase::WARNING_QUIT("read_atom_species", "unrecognized pseudopotential type."); } } // Peize Lin test for bsse 2021.04.07 const std::string bsse_label = "empty"; - ucell.atoms[i].flag_empty_element = - (search( ucell.atom_label[i].begin(), ucell.atom_label[i].end(), - bsse_label.begin(), bsse_label.end() ) != ucell.atom_label[i].end()) - ? true : false; + ucell.atoms[i].flag_empty_element + = (search(ucell.atom_label[i].begin(), ucell.atom_label[i].end(), bsse_label.begin(), bsse_label.end()) + != ucell.atom_label[i].end()) + ? true + : false; } } - if((PARAM.inp.basis_type == "lcao") - ||(PARAM.inp.basis_type == "lcao_in_pw") - ||((PARAM.inp.basis_type == "pw")&&(PARAM.inp.init_wfc.substr(0, 3) == "nao")) - || PARAM.inp.onsite_radius > 0.0) + if ((PARAM.inp.basis_type == "lcao") || (PARAM.inp.basis_type == "lcao_in_pw") + || ((PARAM.inp.basis_type == "pw") && (PARAM.inp.init_wfc.substr(0, 3) == "nao")) + || PARAM.inp.onsite_radius > 0.0) { - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "NUMERICAL_ORBITAL") ) + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "NUMERICAL_ORBITAL")) { - for(int i=0; i> ucell.orbital_fn[i]; } - } + } // caoyu add 2021-03-16 - if(PARAM.globalv.deepks_setorb) + if (PARAM.globalv.deepks_setorb) { - if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "NUMERICAL_DESCRIPTOR")) { + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "NUMERICAL_DESCRIPTOR")) + { ifa >> ucell.descriptor_file; } } @@ -101,13 +99,13 @@ bool read_atom_species(std::ifstream& ifa, } #ifdef __LCAO // Peize Lin add 2016-09-23 -#ifdef __MPI +#ifdef __MPI #ifdef __EXX - if( GlobalC::exx_info.info_global.cal_exx || PARAM.inp.rpa ) + if (GlobalC::exx_info.info_global.cal_exx || PARAM.inp.rpa) { - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "ABFS_ORBITAL") ) + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "ABFS_ORBITAL")) { - for(int i=0; i> ofile; @@ -122,28 +120,26 @@ bool read_atom_species(std::ifstream& ifa, return true; } -bool read_lattice_constant(std::ifstream& ifa, - std::ofstream& ofs_running, - Lattice& lat) +bool read_lattice_constant(std::ifstream& ifa, std::ofstream& ofs_running, Lattice& lat) { //========================== // read in lattice constant //========================== double& lat0 = lat.lat0; - double& lat0_angstrom =lat.lat0_angstrom; + double& lat0_angstrom = lat.lat0_angstrom; std::string& latName = lat.latName; ModuleBase::Matrix3& latvec = lat.latvec; - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_CONSTANT") ) + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_CONSTANT")) { ModuleBase::GlobalFunc::READ_VALUE(ifa, lat0); - if(lat0<=0.0) + if (lat0 <= 0.0) { - ModuleBase::WARNING_QUIT("read_atom_species","lattice constant <= 0.0"); + ModuleBase::WARNING_QUIT("read_atom_species", "lattice constant <= 0.0"); } lat0_angstrom = lat0 * 0.529177; - ModuleBase::GlobalFunc::OUT(ofs_running,"lattice constant (Bohr)",lat0); - ModuleBase::GlobalFunc::OUT(ofs_running,"lattice constant (Angstrom)",lat0_angstrom); - lat.tpiba = ModuleBase::TWO_PI / lat0; + ModuleBase::GlobalFunc::OUT(ofs_running, "lattice constant (Bohr)", lat0); + ModuleBase::GlobalFunc::OUT(ofs_running, "lattice constant (Angstrom)", lat0_angstrom); + lat.tpiba = ModuleBase::TWO_PI / lat0; lat.tpiba2 = lat.tpiba * lat.tpiba; } @@ -151,25 +147,21 @@ bool read_lattice_constant(std::ifstream& ifa, // Read in latticies vector //=========================== - if(latName=="none") + if (latName == "none") { // check the existence of keyword "LATTICE_PARAMETERS" - if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, - "LATTICE_PARAMETERS", - true, - false)) + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS", true, false)) { ModuleBase::WARNING_QUIT("unitcell::read_lattice_constant", - "do not use LATTICE_PARAMETERS without explicit specification of lattice type"); + "do not use LATTICE_PARAMETERS without explicit specification of lattice type"); } // check the existence of keyword "LATTICE_VECTORS" - if( !ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_VECTORS") ) + if (!ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_VECTORS")) { - ModuleBase::WARNING_QUIT("unitcell::read_lattice_constant", - "Please set LATTICE_VECTORS in the STRU file"); + ModuleBase::WARNING_QUIT("unitcell::read_lattice_constant", "Please set LATTICE_VECTORS in the STRU file"); } - else if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_VECTORS") ) + else if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_VECTORS")) { // Reading lattice vectors. notice // here that only one cpu read these @@ -181,104 +173,155 @@ bool read_lattice_constant(std::ifstream& ifa, ifa >> latvec.e31 >> latvec.e32; ModuleBase::GlobalFunc::READ_VALUE(ifa, latvec.e33); } - }//supply lattice vectors + } // supply lattice vectors else { - if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, - "LATTICE_VECTORS", - true, - false)) + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_VECTORS", true, false)) { ModuleBase::WARNING_QUIT("unitcell::read_lattice_constant", - "do not use LATTICE_VECTORS along with explicit specification of lattice type"); + "do not use LATTICE_VECTORS along with explicit specification of lattice type"); } - if(latName=="sc") - {//simple-cubic, ibrav = 1 - latvec.e11 = 1.0; latvec.e12 = 0.0; latvec.e13 = 0.0; - latvec.e21 = 0.0; latvec.e22 = 1.0; latvec.e23 = 0.0; - latvec.e31 = 0.0; latvec.e32 = 0.0; latvec.e33 = 1.0; + if (latName == "sc") + { // simple-cubic, ibrav = 1 + latvec.e11 = 1.0; + latvec.e12 = 0.0; + latvec.e13 = 0.0; + latvec.e21 = 0.0; + latvec.e22 = 1.0; + latvec.e23 = 0.0; + latvec.e31 = 0.0; + latvec.e32 = 0.0; + latvec.e33 = 1.0; } - else if(latName=="fcc") - {//face-centered cubic, ibrav = 2 - latvec.e11 =-0.5; latvec.e12 = 0.0; latvec.e13 = 0.5; - latvec.e21 = 0.0; latvec.e22 = 0.5; latvec.e23 = 0.5; - latvec.e31 =-0.5; latvec.e32 = 0.5; latvec.e33 = 0.0; + else if (latName == "fcc") + { // face-centered cubic, ibrav = 2 + latvec.e11 = -0.5; + latvec.e12 = 0.0; + latvec.e13 = 0.5; + latvec.e21 = 0.0; + latvec.e22 = 0.5; + latvec.e23 = 0.5; + latvec.e31 = -0.5; + latvec.e32 = 0.5; + latvec.e33 = 0.0; } - else if(latName=="bcc") - {//body-centered cubic, ibrav = 3 - latvec.e11 = 0.5; latvec.e12 = 0.5; latvec.e13 = 0.5; - latvec.e21 =-0.5; latvec.e22 = 0.5; latvec.e23 = 0.5; - latvec.e31 =-0.5; latvec.e32 =-0.5; latvec.e33 = 0.5; + else if (latName == "bcc") + { // body-centered cubic, ibrav = 3 + latvec.e11 = 0.5; + latvec.e12 = 0.5; + latvec.e13 = 0.5; + latvec.e21 = -0.5; + latvec.e22 = 0.5; + latvec.e23 = 0.5; + latvec.e31 = -0.5; + latvec.e32 = -0.5; + latvec.e33 = 0.5; } - else if(latName=="hexagonal") - {//hexagonal, ibrav = 4 + else if (latName == "hexagonal") + { // hexagonal, ibrav = 4 double e22 = sqrt(3.0) / 2.0; - latvec.e11 = 1.0; latvec.e12 = 0.0; latvec.e13 = 0.0; - latvec.e21 =-0.5; latvec.e22 = e22; latvec.e23 = 0.0; - latvec.e31 = 0.0; latvec.e32 = 0.0; latvec.e33 = 0.0; - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS") ) + latvec.e11 = 1.0; + latvec.e12 = 0.0; + latvec.e13 = 0.0; + latvec.e21 = -0.5; + latvec.e22 = e22; + latvec.e23 = 0.0; + latvec.e31 = 0.0; + latvec.e32 = 0.0; + latvec.e33 = 0.0; + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS")) { ModuleBase::GlobalFunc::READ_VALUE(ifa, latvec.e33); } } - else if(latName=="trigonal") - {//trigonal, ibrav = 5 + else if (latName == "trigonal") + { // trigonal, ibrav = 5 double t1 = 0.0; double t2 = 0.0; - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS") ) + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS")) { - double cosab=0.0; + double cosab = 0.0; ModuleBase::GlobalFunc::READ_VALUE(ifa, cosab); - t1 = sqrt(1.0 + 2.0*cosab); + t1 = sqrt(1.0 + 2.0 * cosab); t2 = sqrt(1.0 - cosab); } double e11 = t2 / sqrt(2.0); double e12 = -t2 / sqrt(6.0); double e13 = t1 / sqrt(3.0); double e22 = sqrt(2.0) * t2 / sqrt(3.0); - latvec.e11 = e11; latvec.e12 = e12; latvec.e13 = e13; - latvec.e21 = 0.0; latvec.e22 = e22; latvec.e23 = e13; - latvec.e31 =-e11; latvec.e32 = e12; latvec.e33 = e13; + latvec.e11 = e11; + latvec.e12 = e12; + latvec.e13 = e13; + latvec.e21 = 0.0; + latvec.e22 = e22; + latvec.e23 = e13; + latvec.e31 = -e11; + latvec.e32 = e12; + latvec.e33 = e13; } - else if(latName=="st") - {//simple tetragonal, ibrav= 6 - latvec.e11 = 1.0; latvec.e12 = 0.0; latvec.e13 = 0.0; - latvec.e21 = 0.0; latvec.e22 = 1.0; latvec.e23 = 0.0; - latvec.e31 = 0.0; latvec.e32 = 0.0; latvec.e33 = 0.0; - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS") ) + else if (latName == "st") + { // simple tetragonal, ibrav= 6 + latvec.e11 = 1.0; + latvec.e12 = 0.0; + latvec.e13 = 0.0; + latvec.e21 = 0.0; + latvec.e22 = 1.0; + latvec.e23 = 0.0; + latvec.e31 = 0.0; + latvec.e32 = 0.0; + latvec.e33 = 0.0; + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS")) { ModuleBase::GlobalFunc::READ_VALUE(ifa, latvec.e33); } } - else if(latName=="bct") - {//body-centered tetragonal, ibrav = 7 + else if (latName == "bct") + { // body-centered tetragonal, ibrav = 7 double cba = 0.0; - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS") ) + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS")) { ModuleBase::GlobalFunc::READ_VALUE(ifa, cba); cba = cba / 2.0; } - latvec.e11 = 0.5; latvec.e12 =-0.5; latvec.e13 = cba; - latvec.e21 = 0.5; latvec.e22 = 0.5; latvec.e23 = cba; - latvec.e31 =-0.5; latvec.e32 =-0.5; latvec.e33 = cba; + latvec.e11 = 0.5; + latvec.e12 = -0.5; + latvec.e13 = cba; + latvec.e21 = 0.5; + latvec.e22 = 0.5; + latvec.e23 = cba; + latvec.e31 = -0.5; + latvec.e32 = -0.5; + latvec.e33 = cba; } - else if(latName=="so") - {//simple orthorhombic, ibrav = 8 - latvec.e11 = 1.0; latvec.e12 = 0.0; latvec.e13 = 0.0; - latvec.e21 = 0.0; latvec.e22 = 0.0; latvec.e23 = 0.0; - latvec.e31 = 0.0; latvec.e32 = 0.0; latvec.e33 = 0.0; - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS") ) + else if (latName == "so") + { // simple orthorhombic, ibrav = 8 + latvec.e11 = 1.0; + latvec.e12 = 0.0; + latvec.e13 = 0.0; + latvec.e21 = 0.0; + latvec.e22 = 0.0; + latvec.e23 = 0.0; + latvec.e31 = 0.0; + latvec.e32 = 0.0; + latvec.e33 = 0.0; + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS")) { ifa >> latvec.e22; ModuleBase::GlobalFunc::READ_VALUE(ifa, latvec.e33); } } - else if(latName=="baco") - {//base-centered orthorhombic, ibrav = 9 - latvec.e11 = 0.5; latvec.e12 = 0.0; latvec.e13 = 0.0; - latvec.e21 =-0.5; latvec.e22 = 0.0; latvec.e23 = 0.0; - latvec.e31 = 0.0; latvec.e32 = 0.0; latvec.e33 = 0.0; - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS") ) + else if (latName == "baco") + { // base-centered orthorhombic, ibrav = 9 + latvec.e11 = 0.5; + latvec.e12 = 0.0; + latvec.e13 = 0.0; + latvec.e21 = -0.5; + latvec.e22 = 0.0; + latvec.e23 = 0.0; + latvec.e31 = 0.0; + latvec.e32 = 0.0; + latvec.e33 = 0.0; + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS")) { ifa >> latvec.e12; latvec.e12 = latvec.e12 / 2.0; @@ -286,90 +329,127 @@ bool read_lattice_constant(std::ifstream& ifa, ModuleBase::GlobalFunc::READ_VALUE(ifa, latvec.e33); } } - else if(latName=="fco") - {//face-centered orthorhombic, ibrav = 10 - double bba = 0.0; double cba = 0.0; - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS") ) + else if (latName == "fco") + { // face-centered orthorhombic, ibrav = 10 + double bba = 0.0; + double cba = 0.0; + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS")) { ifa >> bba; ModuleBase::GlobalFunc::READ_VALUE(ifa, cba); - bba = bba / 2.0; cba = cba / 2.0; + bba = bba / 2.0; + cba = cba / 2.0; } - latvec.e11 = 0.5; latvec.e12 = 0.0; latvec.e13 = cba; - latvec.e21 = 0.5; latvec.e22 = bba; latvec.e23 = 0.0; - latvec.e31 = 0.0; latvec.e32 = bba; latvec.e33 = cba; + latvec.e11 = 0.5; + latvec.e12 = 0.0; + latvec.e13 = cba; + latvec.e21 = 0.5; + latvec.e22 = bba; + latvec.e23 = 0.0; + latvec.e31 = 0.0; + latvec.e32 = bba; + latvec.e33 = cba; } - else if(latName=="bco") - {//body-centered orthorhombic, ibrav = 11 - double bba = 0.0; double cba = 0.0; - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS") ) + else if (latName == "bco") + { // body-centered orthorhombic, ibrav = 11 + double bba = 0.0; + double cba = 0.0; + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS")) { ifa >> bba; ModuleBase::GlobalFunc::READ_VALUE(ifa, cba); - bba = bba / 2.0; cba = cba / 2.0; + bba = bba / 2.0; + cba = cba / 2.0; } - latvec.e11 = 0.5; latvec.e12 = bba; latvec.e13 = cba; - latvec.e21 =-0.5; latvec.e22 = bba; latvec.e23 = cba; - latvec.e31 =-0.5; latvec.e32 =-bba; latvec.e33 = cba; + latvec.e11 = 0.5; + latvec.e12 = bba; + latvec.e13 = cba; + latvec.e21 = -0.5; + latvec.e22 = bba; + latvec.e23 = cba; + latvec.e31 = -0.5; + latvec.e32 = -bba; + latvec.e33 = cba; } - else if(latName=="sm") - {//simple monoclinic, ibrav = 12 - double bba = 0.0; double cba = 0.0; + else if (latName == "sm") + { // simple monoclinic, ibrav = 12 + double bba = 0.0; + double cba = 0.0; double cosab = 0.0; - double e21 = 0.0; double e22 = 0.0; - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS") ) + double e21 = 0.0; + double e22 = 0.0; + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS")) { ifa >> bba >> cba; ModuleBase::GlobalFunc::READ_VALUE(ifa, cosab); e21 = bba * cosab; - e22 = bba * sqrt(1.0-cosab*cosab); + e22 = bba * sqrt(1.0 - cosab * cosab); } - latvec.e11 = 1.0; latvec.e12 = 0.0; latvec.e13 = 0.0; - latvec.e21 = e21; latvec.e22 = e22; latvec.e23 = 0.0; - latvec.e31 = 0.0; latvec.e32 = 0.0; latvec.e33 = cba; + latvec.e11 = 1.0; + latvec.e12 = 0.0; + latvec.e13 = 0.0; + latvec.e21 = e21; + latvec.e22 = e22; + latvec.e23 = 0.0; + latvec.e31 = 0.0; + latvec.e32 = 0.0; + latvec.e33 = cba; } - else if(latName=="bacm") - {//base-centered monoclinic, ibrav = 13 - double bba = 0.0; double cba = 0.0; + else if (latName == "bacm") + { // base-centered monoclinic, ibrav = 13 + double bba = 0.0; + double cba = 0.0; double cosab = 0.0; - double e21 = 0.0; double e22 = 0.0; - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS") ) + double e21 = 0.0; + double e22 = 0.0; + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS")) { ifa >> bba >> cba; ModuleBase::GlobalFunc::READ_VALUE(ifa, cosab); e21 = bba * cosab; - e22 = bba * sqrt(1.0-cosab*cosab); + e22 = bba * sqrt(1.0 - cosab * cosab); cba = cba / 2.0; } - latvec.e11 = 0.5; latvec.e12 = 0.0; latvec.e13 =-cba; - latvec.e21 = e21; latvec.e22 = e22; latvec.e23 = 0.0; - latvec.e31 = 0.5; latvec.e32 = 0.0; latvec.e33 = cba; + latvec.e11 = 0.5; + latvec.e12 = 0.0; + latvec.e13 = -cba; + latvec.e21 = e21; + latvec.e22 = e22; + latvec.e23 = 0.0; + latvec.e31 = 0.5; + latvec.e32 = 0.0; + latvec.e33 = cba; } - else if(latName=="triclinic") - {//triclinic, ibrav = 14 - double bba = 0.0; + else if (latName == "triclinic") + { // triclinic, ibrav = 14 + double bba = 0.0; double cba = 0.0; - double cosab = 0.0; + double cosab = 0.0; double cosac = 0.0; - double cosbc = 0.0; + double cosbc = 0.0; double sinab = 0.0; double term = 0.0; - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS") ) + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifa, "LATTICE_PARAMETERS")) { ifa >> bba >> cba >> cosab >> cosac; ModuleBase::GlobalFunc::READ_VALUE(ifa, cosbc); - sinab = sqrt(1.0-cosab*cosab); + sinab = sqrt(1.0 - cosab * cosab); } - latvec.e11 = 1.0; latvec.e12 = 0.0; latvec.e13 = 0.0; - latvec.e21 = bba * cosab; latvec.e22 = bba * sinab; latvec.e23 = 0.0; - latvec.e31 = cba * cosac; latvec.e32 = cba * (cosbc - cosac*cosab) / sinab; - term = 1.0 + 2.0 * cosab*cosac*cosbc - cosab*cosab - cosac*cosac - cosbc*cosbc; - term = sqrt(term)/sinab; + latvec.e11 = 1.0; + latvec.e12 = 0.0; + latvec.e13 = 0.0; + latvec.e21 = bba * cosab; + latvec.e22 = bba * sinab; + latvec.e23 = 0.0; + latvec.e31 = cba * cosac; + latvec.e32 = cba * (cosbc - cosac * cosab) / sinab; + term = 1.0 + 2.0 * cosab * cosac * cosbc - cosab * cosab - cosac * cosac - cosbc * cosbc; + term = sqrt(term) / sinab; latvec.e33 = cba * term; } else - { - ModuleBase::WARNING_QUIT("unitcell::read_lattice_constant","latname not supported!"); + { + ModuleBase::WARNING_QUIT("unitcell::read_lattice_constant", "latname not supported!"); } } @@ -388,4 +468,4 @@ bool read_lattice_constant(std::ifstream& ifa, return true; } -} +} // namespace unitcell diff --git a/source/module_cell/read_atoms.cpp b/source/module_cell/read_atoms.cpp index 2db4f1f616..cbd6422317 100644 --- a/source/module_cell/read_atoms.cpp +++ b/source/module_cell/read_atoms.cpp @@ -1,48 +1,43 @@ -#include // Peize Lin fix bug about strcmp 2016-08-02 -#include -#include -#include - -#include "unitcell.h" -#include "module_parameter/parameter.h" #include "module_cell/print_cell.h" #include "module_cell/read_stru.h" #include "module_elecstate/read_orb.h" -#include "module_base/timer.h" -#include "module_base/constants.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/formatter.h" -#include "module_base/mathzone.h" +#include "module_parameter/parameter.h" +#include "source_base/constants.h" +#include "source_base/formatter.h" +#include "source_base/mathzone.h" +#include "source_base/timer.h" +#include "unitcell.h" + +#include +#include // Peize Lin fix bug about strcmp 2016-08-02 +#include +#include #ifdef __LCAO #include "module_basis/module_ao/ORB_read.h" // to use 'ORB' -- mohan 2021-01-30 #endif bool unitcell::read_atom_positions(UnitCell& ucell, - std::ifstream &ifpos, - std::ofstream &ofs_running, - std::ofstream &ofs_warning) + std::ifstream& ifpos, + std::ofstream& ofs_running, + std::ofstream& ofs_warning) { - ModuleBase::TITLE("UnitCell","read_atom_positions"); + ModuleBase::TITLE("UnitCell", "read_atom_positions"); - std::string& Coordinate = ucell.Coordinate; - const int ntype = ucell.ntype; + std::string& Coordinate = ucell.Coordinate; + const int ntype = ucell.ntype; - if( ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifpos, "ATOMIC_POSITIONS")) + if (ModuleBase::GlobalFunc::SCAN_LINE_BEGIN(ifpos, "ATOMIC_POSITIONS")) { ModuleBase::GlobalFunc::READ_VALUE(ifpos, Coordinate); - if(Coordinate != "Cartesian" - && Coordinate != "Direct" - && Coordinate != "Cartesian_angstrom" - && Coordinate != "Cartesian_au" - && Coordinate != "Cartesian_angstrom_center_xy" - && Coordinate != "Cartesian_angstrom_center_xz" - && Coordinate != "Cartesian_angstrom_center_yz" - && Coordinate != "Cartesian_angstrom_center_xyz" - ) + if (Coordinate != "Cartesian" && Coordinate != "Direct" && Coordinate != "Cartesian_angstrom" + && Coordinate != "Cartesian_au" && Coordinate != "Cartesian_angstrom_center_xy" + && Coordinate != "Cartesian_angstrom_center_xz" && Coordinate != "Cartesian_angstrom_center_yz" + && Coordinate != "Cartesian_angstrom_center_xyz") { - ModuleBase::WARNING("read_atom_position","Cartesian or Direct?"); + ModuleBase::WARNING("read_atom_position", "Cartesian or Direct?"); ofs_warning << " There are several options for you:" << std::endl; ofs_warning << " Direct" << std::endl; ofs_warning << " Cartesian_angstrom" << std::endl; @@ -63,20 +58,21 @@ bool unitcell::read_atom_positions(UnitCell& ucell, // calculate total number of ucell.atoms // and adjust the order of atom species //====================================== - for (int it = 0;it < ntype; it++) + for (int it = 0; it < ntype; it++) { - ofs_running << "\n READING ATOM TYPE " << it+1 << std::endl; - + ofs_running << "\n READING ATOM TYPE " << it + 1 << std::endl; + //======================================= // (1) read in atom label // start magnetization //======================================= ModuleBase::GlobalFunc::READ_VALUE(ifpos, ucell.atoms[it].label); - if(ucell.atoms[it].label != ucell.atom_label[it]) + if (ucell.atoms[it].label != ucell.atom_label[it]) { - ofs_warning << " Label orders in ATOMIC_POSITIONS and ATOMIC_SPECIES sections do not match!" << std::endl; - ofs_warning << " Label read from ATOMIC_POSITIONS is " << ucell.atoms[it].label << std::endl; + ofs_warning << " Label orders in ATOMIC_POSITIONS and ATOMIC_SPECIES sections do not match!" + << std::endl; + ofs_warning << " Label read from ATOMIC_POSITIONS is " << ucell.atoms[it].label << std::endl; ofs_warning << " Label from ATOMIC_SPECIES is " << ucell.atom_label[it] << std::endl; return false; } @@ -92,12 +88,12 @@ bool unitcell::read_atom_positions(UnitCell& ucell, // int* ucell.atoms[it].l_nchi; //=========================================== - if ((PARAM.inp.basis_type == "lcao")||(PARAM.inp.basis_type == "lcao_in_pw")) + if ((PARAM.inp.basis_type == "lcao") || (PARAM.inp.basis_type == "lcao_in_pw")) { std::string orbital_file = PARAM.inp.orbital_dir + ucell.orbital_fn[it]; elecstate::read_orb_file(it, orbital_file, ofs_running, &(ucell.atoms[it])); } - else if(PARAM.inp.basis_type == "pw") + else if (PARAM.inp.basis_type == "pw") { if ((PARAM.inp.init_wfc.substr(0, 3) == "nao") || PARAM.inp.onsite_radius > 0.0) { @@ -108,19 +104,19 @@ bool unitcell::read_atom_positions(UnitCell& ucell, { ucell.atoms[it].nw = 0; ucell.atoms[it].nwl = 2; - if ( ucell.lmaxmax != 2 ) + if (ucell.lmaxmax != 2) { ucell.atoms[it].nwl = ucell.lmaxmax; } - ucell.atoms[it].l_nchi.resize(ucell.atoms[it].nwl+1, 0); - for(int L=0; L 0) { - ucell.atoms[it].tau.resize(na, ModuleBase::Vector3(0,0,0)); - ucell.atoms[it].dis.resize(na, ModuleBase::Vector3(0,0,0)); - ucell.atoms[it].taud.resize(na, ModuleBase::Vector3(0,0,0)); - ucell.atoms[it].vel.resize(na, ModuleBase::Vector3(0,0,0)); - ucell.atoms[it].mbl.resize(na, ModuleBase::Vector3(0,0,0)); + ucell.atoms[it].tau.resize(na, ModuleBase::Vector3(0, 0, 0)); + ucell.atoms[it].dis.resize(na, ModuleBase::Vector3(0, 0, 0)); + ucell.atoms[it].taud.resize(na, ModuleBase::Vector3(0, 0, 0)); + ucell.atoms[it].vel.resize(na, ModuleBase::Vector3(0, 0, 0)); + ucell.atoms[it].mbl.resize(na, ModuleBase::Vector3(0, 0, 0)); ucell.atoms[it].mag.resize(na, 0); ucell.atoms[it].angle1.resize(na, 0); ucell.atoms[it].angle2.resize(na, 0); - ucell.atoms[it].m_loc_.resize(na, ModuleBase::Vector3(0,0,0)); - ucell.atoms[it].lambda.resize(na, ModuleBase::Vector3(0,0,0)); - ucell.atoms[it].constrain.resize(na, ModuleBase::Vector3(0,0,0)); - ucell.atoms[it].mass = ucell.atom_mass[it]; //mohan add 2011-11-07 - for (int ia = 0;ia < na; ia++) + ucell.atoms[it].m_loc_.resize(na, ModuleBase::Vector3(0, 0, 0)); + ucell.atoms[it].lambda.resize(na, ModuleBase::Vector3(0, 0, 0)); + ucell.atoms[it].constrain.resize(na, ModuleBase::Vector3(0, 0, 0)); + ucell.atoms[it].mass = ucell.atom_mass[it]; // mohan add 2011-11-07 + for (int ia = 0; ia < na; ia++) { - // modify the reading of frozen ions and velocities -- Yuanbo Li 2021/8/20 + // modify the reading of frozen ions and velocities -- Yuanbo Li 2021/8/20 ifpos >> v.x >> v.y >> v.z; - mv.x = true ; - mv.y = true ; - mv.z = true ; - ucell.atoms[it].vel[ia].set(0,0,0); - ucell.atoms[it].mag[ia]=ucell.magnet.start_mag[it]; - //if this line is used, default startmag_type would be 2 - ucell.atoms[it].angle1[ia]=0; - ucell.atoms[it].angle2[ia]=0; - ucell.atoms[it].m_loc_[ia].set(0,0,0); - ucell.atoms[it].lambda[ia].set(0,0,0); - ucell.atoms[it].constrain[ia].set(0,0,0); + mv.x = true; + mv.y = true; + mv.z = true; + ucell.atoms[it].vel[ia].set(0, 0, 0); + ucell.atoms[it].mag[ia] = ucell.magnet.start_mag[it]; + // if this line is used, default startmag_type would be 2 + ucell.atoms[it].angle1[ia] = 0; + ucell.atoms[it].angle2[ia] = 0; + ucell.atoms[it].m_loc_[ia].set(0, 0, 0); + ucell.atoms[it].lambda[ia].set(0, 0, 0); + ucell.atoms[it].constrain[ia].set(0, 0, 0); std::string tmpid; tmpid = ifpos.get(); - if( (int)tmpid[0] < 0 ) + if ((int)tmpid[0] < 0) { - std::cout << "read_atom_positions, mismatch in atom number for atom type: " + std::cout << "read_atom_positions, mismatch in atom number for atom type: " << ucell.atoms[it].label << std::endl; - exit(1); + exit(1); } - bool input_vec_mag=false; - bool input_angle_mag=false; + bool input_vec_mag = false; + bool input_angle_mag = false; // read if catch goodbit before "\n" and "#" - while ( (tmpid != "\n") && (ifpos.good()) && (tmpid !="#") ) + while ((tmpid != "\n") && (ifpos.good()) && (tmpid != "#")) { - tmpid = ifpos.get() ; + tmpid = ifpos.get(); // old method of reading frozen ions char tmp = (char)tmpid[0]; - if ( tmp >= 48 && tmp <= 57 ) + if (tmp >= 48 && tmp <= 57) { - mv.x = std::stoi(tmpid); - ifpos >> mv.y >> mv.z ; + mv.x = std::stoi(tmpid); + ifpos >> mv.y >> mv.z; } // new method of reading frozen ions and velocities - if ( tmp >= 'a' && tmp <='z') + if (tmp >= 'a' && tmp <= 'z') { ifpos.putback(tmp); ifpos >> tmpid; } - if ( tmpid == "m" ) + if (tmpid == "m") { - ifpos >> mv.x >> mv.y >> mv.z ; + ifpos >> mv.x >> mv.y >> mv.z; } - else if ( tmpid == "v" ||tmpid == "vel" || tmpid == "velocity" ) + else if (tmpid == "v" || tmpid == "vel" || tmpid == "velocity") { - ifpos >> ucell.atoms[it].vel[ia].x >> ucell.atoms[it].vel[ia].y >> ucell.atoms[it].vel[ia].z; + ifpos >> ucell.atoms[it].vel[ia].x >> ucell.atoms[it].vel[ia].y + >> ucell.atoms[it].vel[ia].z; } - else if ( tmpid == "mag" || tmpid == "magmom") + else if (tmpid == "mag" || tmpid == "magmom") { set_element_mag_zero = true; - double tmpamg=0; + double tmpamg = 0; ifpos >> tmpamg; - tmp=ifpos.get(); - while (tmp==' ') + tmp = ifpos.get(); + while (tmp == ' ') { - tmp=ifpos.get(); + tmp = ifpos.get(); } - - if((tmp >= 48 && tmp <= 57) or tmp=='-') + + if ((tmp >= 48 && tmp <= 57) or tmp == '-') { ifpos.putback(tmp); - ifpos >> ucell.atoms[it].m_loc_[ia].y>>ucell.atoms[it].m_loc_[ia].z; - ucell.atoms[it].m_loc_[ia].x=tmpamg; - ucell.atoms[it].mag[ia]=sqrt(pow(ucell.atoms[it].m_loc_[ia].x,2) - +pow(ucell.atoms[it].m_loc_[ia].y,2) - +pow(ucell.atoms[it].m_loc_[ia].z,2)); - input_vec_mag=true; - + ifpos >> ucell.atoms[it].m_loc_[ia].y >> ucell.atoms[it].m_loc_[ia].z; + ucell.atoms[it].m_loc_[ia].x = tmpamg; + ucell.atoms[it].mag[ia] + = sqrt(pow(ucell.atoms[it].m_loc_[ia].x, 2) + pow(ucell.atoms[it].m_loc_[ia].y, 2) + + pow(ucell.atoms[it].m_loc_[ia].z, 2)); + input_vec_mag = true; } else { ifpos.putback(tmp); - ucell.atoms[it].mag[ia]=tmpamg; + ucell.atoms[it].mag[ia] = tmpamg; } } - else if ( tmpid == "angle1") + else if (tmpid == "angle1") { - ifpos >> ucell.atoms[it].angle1[ia]; - ucell.atoms[it].angle1[ia]=ucell.atoms[it].angle1[ia]/180 *ModuleBase::PI; - input_angle_mag=true; - set_element_mag_zero = true; + ifpos >> ucell.atoms[it].angle1[ia]; + ucell.atoms[it].angle1[ia] = ucell.atoms[it].angle1[ia] / 180 * ModuleBase::PI; + input_angle_mag = true; + set_element_mag_zero = true; } - else if ( tmpid == "angle2") + else if (tmpid == "angle2") { - ifpos >> ucell.atoms[it].angle2[ia]; - ucell.atoms[it].angle2[ia]=ucell.atoms[it].angle2[ia]/180 *ModuleBase::PI; - input_angle_mag=true; - set_element_mag_zero = true; - } - else if ( tmpid == "lambda") + ifpos >> ucell.atoms[it].angle2[ia]; + ucell.atoms[it].angle2[ia] = ucell.atoms[it].angle2[ia] / 180 * ModuleBase::PI; + input_angle_mag = true; + set_element_mag_zero = true; + } + else if (tmpid == "lambda") { - double tmplam=0; + double tmplam = 0; ifpos >> tmplam; - tmp=ifpos.get(); - while (tmp==' ') + tmp = ifpos.get(); + while (tmp == ' ') { - tmp=ifpos.get(); + tmp = ifpos.get(); } - if((tmp >= 48 && tmp <= 57) or tmp=='-') + if ((tmp >= 48 && tmp <= 57) or tmp == '-') { ifpos.putback(tmp); - ifpos >> ucell.atoms[it].lambda[ia].y>>ucell.atoms[it].lambda[ia].z; - ucell.atoms[it].lambda[ia].x=tmplam; + ifpos >> ucell.atoms[it].lambda[ia].y >> ucell.atoms[it].lambda[ia].z; + ucell.atoms[it].lambda[ia].x = tmplam; } else { ifpos.putback(tmp); - ucell.atoms[it].lambda[ia].z=tmplam; + ucell.atoms[it].lambda[ia].z = tmplam; } ucell.atoms[it].lambda[ia].x /= ModuleBase::Ry_to_eV; ucell.atoms[it].lambda[ia].y /= ModuleBase::Ry_to_eV; ucell.atoms[it].lambda[ia].z /= ModuleBase::Ry_to_eV; } - else if ( tmpid == "sc") + else if (tmpid == "sc") { - double tmplam=0; + double tmplam = 0; ifpos >> tmplam; - tmp=ifpos.get(); - while (tmp==' ') + tmp = ifpos.get(); + while (tmp == ' ') { - tmp=ifpos.get(); + tmp = ifpos.get(); } - if((tmp >= 48 && tmp <= 57) or tmp=='-') + if ((tmp >= 48 && tmp <= 57) or tmp == '-') { ifpos.putback(tmp); - ifpos >> ucell.atoms[it].constrain[ia].y>>ucell.atoms[it].constrain[ia].z; - ucell.atoms[it].constrain[ia].x=tmplam; + ifpos >> ucell.atoms[it].constrain[ia].y >> ucell.atoms[it].constrain[ia].z; + ucell.atoms[it].constrain[ia].x = tmplam; } else { ifpos.putback(tmp); - ucell.atoms[it].constrain[ia].z=tmplam; + ucell.atoms[it].constrain[ia].z = tmplam; } - } + } } // move to next line - while ( (tmpid != "\n") && (ifpos.good()) ) + while ((tmpid != "\n") && (ifpos.good())) { - tmpid = ifpos.get(); + tmpid = ifpos.get(); } std::string mags; // ---------------------------------------------------------------------------- // recalcualte mag and m_loc_ from read in angle1, angle2 and mag or mx, my, mz - if(input_angle_mag) - {// angle1 or angle2 are given, calculate mx, my, mz from angle1 and angle2 and mag - ucell.atoms[it].m_loc_[ia].z = ucell.atoms[it].mag[ia] * - cos(ucell.atoms[it].angle1[ia]); - if(std::abs(sin(ucell.atoms[it].angle1[ia])) > 1e-10 ) + if (input_angle_mag) + { // angle1 or angle2 are given, calculate mx, my, mz from angle1 and angle2 and mag + ucell.atoms[it].m_loc_[ia].z = ucell.atoms[it].mag[ia] * cos(ucell.atoms[it].angle1[ia]); + if (std::abs(sin(ucell.atoms[it].angle1[ia])) > 1e-10) { - ucell.atoms[it].m_loc_[ia].x = ucell.atoms[it].mag[ia] * - sin(ucell.atoms[it].angle1[ia]) * cos(ucell.atoms[it].angle2[ia]); - ucell.atoms[it].m_loc_[ia].y = ucell.atoms[it].mag[ia] * - sin(ucell.atoms[it].angle1[ia]) * sin(ucell.atoms[it].angle2[ia]); + ucell.atoms[it].m_loc_[ia].x = ucell.atoms[it].mag[ia] * sin(ucell.atoms[it].angle1[ia]) + * cos(ucell.atoms[it].angle2[ia]); + ucell.atoms[it].m_loc_[ia].y = ucell.atoms[it].mag[ia] * sin(ucell.atoms[it].angle1[ia]) + * sin(ucell.atoms[it].angle2[ia]); } } else if (input_vec_mag) - {// mx, my, mz are given, calculate angle1 and angle2 from mx, my, mz - double mxy=sqrt(pow(ucell.atoms[it].m_loc_[ia].x,2)+pow(ucell.atoms[it].m_loc_[ia].y,2)); - ucell.atoms[it].angle1[ia]=atan2(mxy,ucell.atoms[it].m_loc_[ia].z); - if(mxy>1e-8) + { // mx, my, mz are given, calculate angle1 and angle2 from mx, my, mz + double mxy = sqrt(pow(ucell.atoms[it].m_loc_[ia].x, 2) + pow(ucell.atoms[it].m_loc_[ia].y, 2)); + ucell.atoms[it].angle1[ia] = atan2(mxy, ucell.atoms[it].m_loc_[ia].z); + if (mxy > 1e-8) { - ucell.atoms[it].angle2[ia]=atan2(ucell.atoms[it].m_loc_[ia].y,ucell.atoms[it].m_loc_[ia].x); + ucell.atoms[it].angle2[ia] + = atan2(ucell.atoms[it].m_loc_[ia].y, ucell.atoms[it].m_loc_[ia].x); } } - else// only one mag is given, assume it is z + else // only one mag is given, assume it is z { ucell.atoms[it].m_loc_[ia].x = 0; ucell.atoms[it].m_loc_[ia].y = 0; ucell.atoms[it].m_loc_[ia].z = ucell.atoms[it].mag[ia]; } - if(PARAM.inp.nspin==4) + if (PARAM.inp.nspin == 4) { - if(!PARAM.inp.noncolin) + if (!PARAM.inp.noncolin) { - //collinear case with nspin = 4, only z component is used + // collinear case with nspin = 4, only z component is used ucell.atoms[it].m_loc_[ia].x = 0; ucell.atoms[it].m_loc_[ia].y = 0; } - //print only ia==0 && mag>0 to avoid too much output - //print when ia!=0 && mag[ia] != mag[0] to avoid too much output - // 'A || (!A && B)' is equivalent to 'A || B',so the following - // code is equivalent to 'ia==0 || (...)' - if(ia==0 || (ucell.atoms[it].m_loc_[ia].x != ucell.atoms[it].m_loc_[0].x - || ucell.atoms[it].m_loc_[ia].y != ucell.atoms[it].m_loc_[0].y - || ucell.atoms[it].m_loc_[ia].z != ucell.atoms[it].m_loc_[0].z)) + // print only ia==0 && mag>0 to avoid too much output + // print when ia!=0 && mag[ia] != mag[0] to avoid too much output + // 'A || (!A && B)' is equivalent to 'A || B',so the following + // code is equivalent to 'ia==0 || (...)' + if (ia == 0 + || (ucell.atoms[it].m_loc_[ia].x != ucell.atoms[it].m_loc_[0].x + || ucell.atoms[it].m_loc_[ia].y != ucell.atoms[it].m_loc_[0].y + || ucell.atoms[it].m_loc_[ia].z != ucell.atoms[it].m_loc_[0].z)) { - //use a stringstream to generate string: "concollinear magnetization of element it is:" + // use a stringstream to generate string: "concollinear magnetization of element it is:" std::stringstream ss; - ss << "magnetization of element " << it+1; - if(ia!=0) + ss << "magnetization of element " << it + 1; + if (ia != 0) { - ss<<" (atom"<0 to avoid too much output - //print when ia!=0 && mag[ia] != mag[0] to avoid too much output - if(ia==0 || (ucell.atoms[it].mag[ia] != ucell.atoms[it].mag[0])) + // print only ia==0 && mag>0 to avoid too much output + // print when ia!=0 && mag[ia] != mag[0] to avoid too much output + if (ia == 0 || (ucell.atoms[it].mag[ia] != ucell.atoms[it].mag[0])) { - //use a stringstream to generate string: "cocollinear magnetization of element it is:" + // use a stringstream to generate string: "cocollinear magnetization of element it is:" std::stringstream ss; - ss << "magnetization of element " << it+1; - if(ia!=0) + ss << "magnetization of element " << it + 1; + if (ia != 0) { - ss<<" (atom"< 1e-5) + if (std::abs(ucell.atoms[it].mag[ia]) > 1e-5) { autoset_mag = 0; break; @@ -513,62 +521,62 @@ bool unitcell::read_atom_positions(UnitCell& ucell, } if (autoset_mag) { - if(PARAM.inp.nspin==4) + if (PARAM.inp.nspin == 4) { - for (int it = 0;it < ntype; it++) + for (int it = 0; it < ntype; it++) { - for (int ia = 0;ia < ucell.atoms[it].na; ia++) + for (int ia = 0; ia < ucell.atoms[it].na; ia++) { ucell.atoms[it].m_loc_[ia].x = 1.0; ucell.atoms[it].m_loc_[ia].y = 1.0; ucell.atoms[it].m_loc_[ia].z = 1.0; - ucell.atoms[it].mag[ia] = sqrt(pow(ucell.atoms[it].m_loc_[ia].x,2) - +pow(ucell.atoms[it].m_loc_[ia].y,2) - +pow(ucell.atoms[it].m_loc_[ia].z,2)); - ModuleBase::GlobalFunc::OUT(ofs_running,"Autoset magnetism for this atom", 1.0, 1.0, 1.0); + ucell.atoms[it].mag[ia] + = sqrt(pow(ucell.atoms[it].m_loc_[ia].x, 2) + pow(ucell.atoms[it].m_loc_[ia].y, 2) + + pow(ucell.atoms[it].m_loc_[ia].z, 2)); + ModuleBase::GlobalFunc::OUT(ofs_running, "Autoset magnetism for this atom", 1.0, 1.0, 1.0); } } } - else if(PARAM.inp.nspin==2) + else if (PARAM.inp.nspin == 2) { - for (int it = 0;it < ntype; it++) + for (int it = 0; it < ntype; it++) { - for (int ia = 0;ia < ucell.atoms[it].na; ia++) + for (int ia = 0; ia < ucell.atoms[it].na; ia++) { ucell.atoms[it].mag[ia] = 1.0; ucell.atoms[it].m_loc_[ia].x = ucell.atoms[it].mag[ia]; - ModuleBase::GlobalFunc::OUT(ofs_running,"Autoset magnetism for this atom", 1.0); + ModuleBase::GlobalFunc::OUT(ofs_running, "Autoset magnetism for this atom", 1.0); } } } } // End Autoset magnetization - } // end scan_begin + } // end scan_begin - //check if any atom can move in MD - if(!ucell.if_atoms_can_move() && PARAM.inp.calculation=="md" && PARAM.inp.esolver_type!="tddft") + // check if any atom can move in MD + if (!ucell.if_atoms_can_move() && PARAM.inp.calculation == "md" && PARAM.inp.esolver_type != "tddft") { ModuleBase::WARNING("read_atoms", "no atoms can move in MD simulations!"); return false; - } + } ofs_running << std::endl; - ModuleBase::GlobalFunc::OUT(ofs_running,"TOTAL ATOM NUMBER",ucell.nat); + ModuleBase::GlobalFunc::OUT(ofs_running, "TOTAL ATOM NUMBER", ucell.nat); if (ucell.nat == 0) { - ModuleBase::WARNING("read_atom_positions","no atoms found in the system!"); + ModuleBase::WARNING("read_atom_positions", "no atoms found in the system!"); return false; } - // mohan add 2010-06-30 - unitcell::check_dtau(ucell.atoms,ucell.ntype, ucell.lat0, ucell.latvec); + // mohan add 2010-06-30 + unitcell::check_dtau(ucell.atoms, ucell.ntype, ucell.lat0, ucell.latvec); if (unitcell::check_tau(ucell.atoms, ucell.ntype, ucell.lat0)) { - unitcell::print_tau(ucell.atoms,ucell.Coordinate,ucell.ntype,ucell.lat0,ofs_running); + unitcell::print_tau(ucell.atoms, ucell.Coordinate, ucell.ntype, ucell.lat0, ofs_running); return true; } return false; -}//end read_atom_positions +} // end read_atom_positions diff --git a/source/module_cell/read_pp.cpp b/source/module_cell/read_pp.cpp index c6bb4ab208..17605e08f6 100644 --- a/source/module_cell/read_pp.cpp +++ b/source/module_cell/read_pp.cpp @@ -1,16 +1,15 @@ #include "read_pp.h" #include "module_parameter/parameter.h" -#include +#include "source_base/math_integral.h" // for numerical integration +#include #include // Peize Lin fix bug about strcpy 2016-08-02 #include #include #include #include -#include "module_base/math_integral.h" // for numerical integration - Pseudopot_upf::Pseudopot_upf() { } @@ -19,112 +18,113 @@ Pseudopot_upf::~Pseudopot_upf() { } -int Pseudopot_upf::init_pseudo_reader(const std::string &fn, std::string &type, Atom_pseudo& pp) +int Pseudopot_upf::init_pseudo_reader(const std::string& fn, std::string& type, Atom_pseudo& pp) { - ModuleBase::TITLE("Pseudopot_upf","init"); + ModuleBase::TITLE("Pseudopot_upf", "init"); // First check if this pseudo-potential has spin-orbit information std::ifstream ifs(fn.c_str(), std::ios::in); - // can't find the file. - if (!ifs) + // can't find the file. + if (!ifs) { return 1; } // if(GlobalV::global_pseudo_type=="auto") //zws - if (type == "auto") - { - set_pseudo_type(fn, type); - } + if (type == "auto") + { + set_pseudo_type(fn, type); + } - int info = -1; - // read in the .UPF type of pseudopotentials - // if(GlobalV::global_pseudo_type=="upf") - if (type == "upf") - { - info = read_pseudo_upf(ifs, pp); - } - // read in the .vwr type of pseudopotentials - // else if(GlobalV::global_pseudo_type=="vwr") - else if (type == "vwr") - { - info = read_pseudo_vwr(ifs, pp); - } - // else if(GlobalV::global_pseudo_type=="upf201") - else if (type == "upf201") - { - info = read_pseudo_upf201(ifs, pp); - } - // else if(GlobalV::global_pseudo_type=="blps") // sunliang added 2021.7 - else if (type == "blps") - { - info = read_pseudo_blps(ifs, pp); - } + int info = -1; + // read in the .UPF type of pseudopotentials + // if(GlobalV::global_pseudo_type=="upf") + if (type == "upf") + { + info = read_pseudo_upf(ifs, pp); + } + // read in the .vwr type of pseudopotentials + // else if(GlobalV::global_pseudo_type=="vwr") + else if (type == "vwr") + { + info = read_pseudo_vwr(ifs, pp); + } + // else if(GlobalV::global_pseudo_type=="upf201") + else if (type == "upf201") + { + info = read_pseudo_upf201(ifs, pp); + } + // else if(GlobalV::global_pseudo_type=="blps") // sunliang added 2021.7 + else if (type == "blps") + { + info = read_pseudo_blps(ifs, pp); + } else { return 4; } - return info; + return info; } - //---------------------------------------------------------- // setting the type of the pseudopotential file //---------------------------------------------------------- -int Pseudopot_upf::set_pseudo_type(const std::string &fn, std::string &type) //zws add +int Pseudopot_upf::set_pseudo_type(const std::string& fn, std::string& type) // zws add { std::ifstream pptype_ifs(fn.c_str(), std::ios::in); std::string dummy; - std::string strversion; + std::string strversion; - if (pptype_ifs.good()) - { - getline(pptype_ifs,dummy); + if (pptype_ifs.good()) + { + getline(pptype_ifs, dummy); - std::stringstream wdsstream(dummy); - getline(wdsstream,strversion,'"'); - getline(wdsstream,strversion,'"'); + std::stringstream wdsstream(dummy); + getline(wdsstream, strversion, '"'); + getline(wdsstream, strversion, '"'); - if ( trim(strversion) == "2.0.1" ) - { - type = "upf201"; - // GlobalV::global_pseudo_type = "upf201"; - } - else - { - type = "upf"; - // GlobalV::global_pseudo_type = "upf"; - } - } - return 0; + if (trim(strversion) == "2.0.1") + { + type = "upf201"; + // GlobalV::global_pseudo_type = "upf201"; + } + else + { + type = "upf"; + // GlobalV::global_pseudo_type = "upf"; + } + } + return 0; } -std::string& Pseudopot_upf::trim(std::string &in_str) +std::string& Pseudopot_upf::trim(std::string& in_str) { - static const std::string deltri = " \t" ; // delete tab or space + static const std::string deltri = " \t"; // delete tab or space std::string::size_type position = in_str.find_first_of(deltri, 0); if (position == std::string::npos) - { + { return in_str; - } - return trim(in_str.erase(position, 1) ); + } + return trim(in_str.erase(position, 1)); } -std::string Pseudopot_upf::trimend(std::string &in_str) +std::string Pseudopot_upf::trimend(std::string& in_str) { - const std::string &deltri =" \t" ; - std::string::size_type position = in_str.find_last_not_of(deltri)+1; - std::string tmpstr=in_str.erase(position); - return tmpstr.erase(0,tmpstr.find_first_not_of(deltri)); -} //zws - + const std::string& deltri = " \t"; + std::string::size_type position = in_str.find_last_not_of(deltri) + 1; + std::string tmpstr = in_str.erase(position); + return tmpstr.erase(0, tmpstr.find_first_not_of(deltri)); +} // zws int Pseudopot_upf::average_p(const double& lambda, Atom_pseudo& pp) { int error = 0; double lambda_ = lambda; - if(!PARAM.inp.lspinorb) { lambda_ = 0.0; } + if (!PARAM.inp.lspinorb) + { + lambda_ = 0.0; + } if (pp.has_so && pp.tvanp) { error++; @@ -146,261 +146,273 @@ int Pseudopot_upf::average_p(const double& lambda, Atom_pseudo& pp) return error; } - //if(std::abs(lambda_)<1.0e-8) - if(!PARAM.inp.lspinorb) - { - int new_nbeta = 0; //calculate the new nbeta - for(int nb=0; nb< pp.nbeta; nb++) - { - new_nbeta++; - if(pp.lll[nb] != 0 && std::abs(pp.jjj[nb] - pp.lll[nb] - 0.5) < 1e-6) //two J = l +- 0.5 average to one - { - new_nbeta--; - } - } + // if(std::abs(lambda_)<1.0e-8) + if (!PARAM.inp.lspinorb) + { + int new_nbeta = 0; // calculate the new nbeta + for (int nb = 0; nb < pp.nbeta; nb++) + { + new_nbeta++; + if (pp.lll[nb] != 0 && std::abs(pp.jjj[nb] - pp.lll[nb] - 0.5) < 1e-6) // two J = l +- 0.5 average to one + { + new_nbeta--; + } + } - pp.nbeta = new_nbeta; - ModuleBase::matrix dion_new; - dion_new.create(pp.nbeta, pp.nbeta); + pp.nbeta = new_nbeta; + ModuleBase::matrix dion_new; + dion_new.create(pp.nbeta, pp.nbeta); - int old_nbeta=-1; - for(int nb=0; nb1e-6) - { - error = 1; - std::cout<<"warning_quit! error beta function 1 !" <1e-6) - { - error = 1; - std::cout<<"warning_quit! error beta function 2 !" < 1e-6) + { + error = 1; + std::cout << "warning_quit! error beta function 1 !" << std::endl; + return error; + } + ind = old_nbeta + 1; + ind1 = old_nbeta; + } + else + { + if (std::abs(pp.jjj[old_nbeta + 1] - pp.lll[old_nbeta + 1] + 0.5) > 1e-6) + { + error = 1; + std::cout << "warning_quit! error beta function 2 !" << std::endl; + return error; + } + ind = old_nbeta; + ind1 = old_nbeta + 1; + } + double vion1 = ((l + 1.0) * pp.dion(ind, ind) + l * pp.dion(ind1, ind1)) / (2.0 * l + 1.0); + if (std::abs(vion1) < 1.0e-8) + { + vion1 = 0.1; + } + // average beta (betar) + for (int ir = 0; ir < pp.mesh; ir++) + { + pp.betar(nb, ir) = 1.0 / (2.0 * l + 1.0) + * ((l + 1.0) * sqrt(std::abs(pp.dion(ind, ind) / vion1)) * pp.betar(ind, ir) + + l * sqrt(std::abs(pp.dion(ind1, ind1) / vion1)) * pp.betar(ind1, ir)); + } + // average the dion matrix + pp.dion(nb, nb) = vion1; + old_nbeta++; + } + else + { + for (int ir = 0; ir < pp.mesh; ir++) + { + pp.betar(nb, ir) = pp.betar(old_nbeta, ir); + } + pp.dion(nb, nb) = pp.dion(old_nbeta, old_nbeta); + } + pp.lll[nb] = pp.lll[old_nbeta]; // reset the lll index, ignore jjj index + } - //store the old dion and then recreate dion - for(int i=0;i1e-6) - {error++; std::cout<<"warning_quit! error chi function 1 !"<1e-6) - {error++; std::cout<<"warning_quit! error chi function 2 !"<1e-6) - { - error = 1; - std::cout<<"warning_quit! error beta function 1 !" <1e-6) - { - error = 1; - std::cout<<"warning_quit! error beta function 2 !" <1e-6) - {error++; std::cout<<"warning_quit! error chi function 1 !"<1e-6) - {error++; std::cout<<"warning_quit! error chi function 2 !"< 1e-6) + { + error++; + std::cout << "warning_quit! error chi function 1 !" << std::endl; + return error; + } + // ModuleBase::WARNING_QUIT("average_p", "error chi function 1 !"); + ind = old_nwfc + 1; + ind1 = old_nwfc; + } + else + { + if (std::abs(pp.jchi[old_nwfc + 1] - pp.lchi[old_nwfc + 1] + 0.5) > 1e-6) + { + error++; + std::cout << "warning_quit! error chi function 2 !" << std::endl; + return error; + } + // ModuleBase::WARNING_QUIT("average_p", "error chi function 2 !"); + ind = old_nwfc; + ind1 = old_nwfc + 1; + } + // average chi + for (int ir = 0; ir < pp.mesh; ir++) + { + pp.chi(nb, ir) = 1.0 / (2.0 * l + 1.0) * ((l + 1.0) * pp.chi(ind, ir) + (l * pp.chi(ind1, ir))); + } + old_nwfc++; + } + else + { + for (int ir = 0; ir < pp.mesh; ir++) + { + pp.chi(nb, ir) = pp.chi(old_nwfc, ir); + } + } + pp.lchi[nb] = pp.lchi[old_nwfc]; // reset lchi index + } + pp.has_so = false; + return error; + } + else // lambda_ != 0, modulate the soc effect in pseudopotential + { + for (int nb = 0; nb < pp.nbeta; nb++) + { + int l = pp.lll[nb]; + int ind = 0, ind1 = 0; + if (l != 0) + { + if (std::abs(pp.jjj[nb] - pp.lll[nb] + 0.5) < 1e-6) + { + if (std::abs(pp.jjj[nb + 1] - pp.lll[nb + 1] - 0.5) > 1e-6) + { + error = 1; + std::cout << "warning_quit! error beta function 1 !" << std::endl; + return error; + } + ind = nb + 1; + ind1 = nb; + } + else + { + if (std::abs(pp.jjj[nb + 1] - pp.lll[nb + 1] + 0.5) > 1e-6) + { + error = 1; + std::cout << "warning_quit! error beta function 2 !" << std::endl; + return error; + } + ind = nb; + ind1 = nb + 1; + } + double vion1 = ((l + 1.0) * pp.dion(ind, ind) + l * pp.dion(ind1, ind1)) / (2.0 * l + 1.0); + if (std::abs(vion1) < 1.0e-10) + { + vion1 = 0.1; + } + // average beta (betar) + const double sqrtDplus = sqrt(std::abs(pp.dion(ind, ind) / vion1)); + const double sqrtDminus = sqrt(std::abs(pp.dion(ind1, ind1) / vion1)); + pp.dion(ind, ind) = vion1; + pp.dion(ind1, ind1) = vion1; + for (int ir = 0; ir < pp.mesh; ir++) + { + double avera = 1.0 / (2.0 * l + 1.0) + * ((l + 1.0) * sqrtDplus * pp.betar(ind, ir) + l * sqrtDminus * pp.betar(ind1, ir)); + double delta + = 1.0 / (2.0 * l + 1.0) * (sqrtDplus * pp.betar(ind, ir) - sqrtDminus * pp.betar(ind1, ir)); + pp.betar(ind, ir) = (avera + l * delta * lambda_); + pp.betar(ind1, ir) = (avera - (l + 1) * delta * lambda_); + } + nb++; + } + } + + for (int nb = 0; nb < pp.nchi; nb++) + { + int l = pp.lchi[nb]; + int ind = 0, ind1 = 0; + if (l != 0) + { + if (std::abs(pp.jchi[nb] - pp.lchi[nb] + 0.5) < 1e-6) + { + if (std::abs(pp.jchi[nb + 1] - pp.lchi[nb + 1] - 0.5) > 1e-6) + { + error++; + std::cout << "warning_quit! error chi function 1 !" << std::endl; + return error; + } + ind = nb + 1; + ind1 = nb; + } + else + { + if (std::abs(pp.jchi[nb + 1] - pp.lchi[nb + 1] + 0.5) > 1e-6) + { + error++; + std::cout << "warning_quit! error chi function 2 !" << std::endl; + return error; + } + ind = nb; + ind1 = nb + 1; + } + // average chi + for (int ir = 0; ir < pp.mesh; ir++) + { + double avera = 0.5 * (pp.chi(ind, ir) + pp.chi(ind1, ir)); + double delta = 0.5 * (pp.chi(ind, ir) - pp.chi(ind1, ir)); + pp.chi(ind, ir) = avera + delta * lambda_; + pp.chi(ind1, ir) = avera - delta * lambda_; + } + nb++; + } + } + return error; + } } // Peize Lin add for bsse 2021.04.07 void Pseudopot_upf::set_empty_element(Atom_pseudo& pp) { - pp.zv = 0; - for(int ir=0; ir> temp; - } + if (mesh_changed) + { + double temp = 0.; + ifs >> temp; + } } \ No newline at end of file diff --git a/source/module_cell/read_pp.h b/source/module_cell/read_pp.h index 6029269639..63388ce82c 100644 --- a/source/module_cell/read_pp.h +++ b/source/module_cell/read_pp.h @@ -1,27 +1,27 @@ #ifndef PSEUDOPOT_UPF_H #define PSEUDOPOT_UPF_H -#include - #include "atom_pseudo.h" -#include "module_base/matrix.h" -#include "module_base/realarray.h" +#include "source_base/matrix.h" +#include "source_base/realarray.h" + +#include class Pseudopot_upf { -public: - //PP_INFO - //PP_HEADER - //PP_MESH - //PP_NLCC - //PP_LOCAL - //PP_NONLOCAL - //PP_PSWFC - //PP_PSRHOATOM - //addinfo - - Pseudopot_upf(); - ~Pseudopot_upf(); + public: + // PP_INFO + // PP_HEADER + // PP_MESH + // PP_NLCC + // PP_LOCAL + // PP_NONLOCAL + // PP_PSWFC + // PP_PSRHOATOM + // addinfo + + Pseudopot_upf(); + ~Pseudopot_upf(); std::string relativistic; // relativistic: no, scalar, full int lmax_rho; // maximum angular momentum component in rho (should be 2*lmax) @@ -33,13 +33,13 @@ class Pseudopot_upf int lloc; // L of channel used to generate local potential // (if < 0 it was generated by smoothing AE potential) // double rcloc; // vloc = v_ae for r > rcloc - bool q_with_l; // if .true. qfunc is pseudized in - int nqf; // number of Q coefficients + bool q_with_l; // if .true. qfunc is pseudized in + int nqf; // number of Q coefficients // bool has_wfc; // if true, UPF contain AE and PS wfc for each beta // need 'new' and 'delete' - bool coulomb_potential = false; // coulomb potentail : z/r - ModuleBase::matrix chi; // chi(nwfc,mesh) atomic wavefcts + bool coulomb_potential = false; // coulomb potentail : z/r + ModuleBase::matrix chi; // chi(nwfc,mesh) atomic wavefcts std::vector kbeta = {}; // kbeta(nbeta):number of mesh points for projector i (must be .le. mesh ) std::vector els_beta = {}; // els_beta(nwfc):label for the beta std::vector nchi = {}; // nchi(nwfc) value of pseudo-n for wavefcts @@ -47,12 +47,12 @@ class Pseudopot_upf std::vector rcut_chi = {}; // rcut_chi(nwfc) cutoff inner radius std::vector rcutus_chi = {}; // rcutus_chi(nwfc) ultrasoft outer radius std::vector rinner = {}; // rinner(2*lmax+1) r_L - ModuleBase::matrix qfunc; // qfunc(nbeta*(nbeta+1)/2,mesh) Q_{mu,nu}(|r|) function for |r|> r_L - ModuleBase::realArray qfcoef; // qfcoef(nbeta,nbeta,2*lmax+1,nqf) coefficients for Q for |r| r_L + ModuleBase::realArray qfcoef; // qfcoef(nbeta,nbeta,2*lmax+1,nqf) coefficients for Q for |r| rcut = {}; // cut-off radius(nbeta) - std::vector rcutus = {}; // ultrasoft cut-off radius (nbeta) + std::vector rcut = {}; // cut-off radius(nbeta) + std::vector rcutus = {}; // ultrasoft cut-off radius (nbeta) int nd; // nl_5 // Number of nonzero Dij @@ -67,12 +67,12 @@ class Pseudopot_upf void print_pseudo_upf(std::ofstream& ofs, Atom_pseudo& pp); int average_p(const double& lambda, Atom_pseudo& pp); // zhengdy add 2020-10-20 - void set_empty_element(Atom_pseudo& pp); // Peize Lin add for bsse 2022.04.07 - void set_upf_q(Atom_pseudo& pp); // liuyu add 2023-09-21 + void set_empty_element(Atom_pseudo& pp); // Peize Lin add for bsse 2022.04.07 + void set_upf_q(Atom_pseudo& pp); // liuyu add 2023-09-21 void complete_default(Atom_pseudo& pp); private: - bool mesh_changed = false; // if the mesh is even, it will be changed to odd + bool mesh_changed = false; // if the mesh is even, it will be changed to odd void skip_number(std::ifstream& ifs, bool mesh_changed); // skip the last number if the mesh is even int set_pseudo_type(const std::string& fn, std::string& type); @@ -127,4 +127,4 @@ class Pseudopot_upf void complete_default_vl(Atom_pseudo& pp); }; -#endif //pseudopot_upf class +#endif // pseudopot_upf class diff --git a/source/module_cell/read_pp_blps.cpp b/source/module_cell/read_pp_blps.cpp index 222565da19..702523cde3 100644 --- a/source/module_cell/read_pp_blps.cpp +++ b/source/module_cell/read_pp_blps.cpp @@ -1,8 +1,8 @@ #include "read_pp.h" -#include "module_base/atom_in.h" -#include "module_base/element_name.h" +#include "source_base/atom_in.h" +#include "source_base/element_name.h" -int Pseudopot_upf::read_pseudo_blps(std::ifstream &ifs, Atom_pseudo& pp) +int Pseudopot_upf::read_pseudo_blps(std::ifstream& ifs, Atom_pseudo& pp) { // double bohr2a = 0.529177249; pp.nlcc = false; @@ -31,7 +31,7 @@ int Pseudopot_upf::read_pseudo_blps(std::ifstream &ifs, Atom_pseudo& pp) ifs.ignore(300, '\n'); atom_in ai; - for (auto each_type: ModuleBase::element_name) + for (auto each_type: ModuleBase::element_name) { if (zatom == ai.atom_Z[each_type]) { @@ -43,11 +43,11 @@ int Pseudopot_upf::read_pseudo_blps(std::ifstream &ifs, Atom_pseudo& pp) int pspcod, pspxc, lloc, r2well; ifs >> pspcod >> pspxc >> pp.lmax >> lloc >> pp.mesh >> r2well; this->mesh_changed = false; - if (pp.mesh%2 == 0) - { - pp.mesh -= 1; + if (pp.mesh % 2 == 0) + { + pp.mesh -= 1; this->mesh_changed = true; - } + } if (pspxc == 2) { @@ -91,69 +91,69 @@ int Pseudopot_upf::read_pseudo_blps(std::ifstream &ifs, Atom_pseudo& pp) int num = 0; if (pspcod == 8) { - for(int i = 0;i < pp.mesh; ++i) + for (int i = 0; i < pp.mesh; ++i) { ifs >> num >> pp.r[i] >> pp.vloc_at[i]; - pp.vloc_at[i] = pp.vloc_at[i]*2; // Hartree to Ry + pp.vloc_at[i] = pp.vloc_at[i] * 2; // Hartree to Ry } } else if (pspcod == 6) { double temp = 0.; - for(int i = 0;i < pp.mesh; ++i) + for (int i = 0; i < pp.mesh; ++i) { ifs >> num >> pp.r[i] >> temp >> pp.vloc_at[i]; - pp.vloc_at[i] = pp.vloc_at[i]*2; // Hartree to Ry + pp.vloc_at[i] = pp.vloc_at[i] * 2; // Hartree to Ry } } pp.rab[0] = pp.r[1] - pp.r[0]; - for(int i = 1; i < pp.mesh - 1; ++i) + for (int i = 1; i < pp.mesh - 1; ++i) { - pp.rab[i] = (pp.r[i+1] - pp.r[i-1])/2.0; + pp.rab[i] = (pp.r[i + 1] - pp.r[i - 1]) / 2.0; } pp.rab[pp.mesh - 1] = pp.r[pp.mesh - 1] - pp.r[pp.mesh - 2]; pp.rho_at = std::vector(pp.mesh, 0.0); - double charge = zion/pp.r[pp.mesh - 1]; - for(int i = 0;i < pp.mesh; ++i) + double charge = zion / pp.r[pp.mesh - 1]; + for (int i = 0; i < pp.mesh; ++i) { pp.rho_at[i] = charge; } return 0; } -//parameters -//read_pp.h <--> blps_real -//nv - -//psd head -//pp_type(NC or US) - -//tvanp False -//nlcc False -//dft pspxc 2->lda, 11->gga -//zp zion -//etotps - -//ecutwfc - -//ecutrho - -//lmax lmax -//mesh mmax -//nwfc - -//nbeta - -//els - -//lchi - -//oc - - -//rab rab[ir]=(r[ir+1]-r[ir-1])/2.0 -//rho_atc(nonlocal) - -//vloc -//chi - -//rho_at - +// parameters +// read_pp.h <--> blps_real +// nv - +// psd head +// pp_type(NC or US) - +// tvanp False +// nlcc False +// dft pspxc 2->lda, 11->gga +// zp zion +// etotps - +// ecutwfc - +// ecutrho - +// lmax lmax +// mesh mmax +// nwfc - +// nbeta - +// els - +// lchi - +// oc - + +// rab rab[ir]=(r[ir+1]-r[ir-1])/2.0 +// rho_atc(nonlocal) - +// vloc +// chi - +// rho_at - // lll - // kbeta - // beta - // dion - -//nn - -//jchi - -//jjj - -//nd - +// nn - +// jchi - +// jjj - +// nd - diff --git a/source/module_cell/read_stru.cpp b/source/module_cell/read_stru.cpp index 8cba080427..692f23b260 100644 --- a/source/module_cell/read_stru.cpp +++ b/source/module_cell/read_stru.cpp @@ -1,91 +1,94 @@ #include "read_stru.h" -#include "module_base/timer.h" -#include "module_base/vector3.h" -#include "module_base/mathzone.h" -bool unitcell::check_tau(const Atom* atoms, - const int& ntype, - const double& lat0) +#include "source_base/mathzone.h" +#include "source_base/timer.h" +#include "source_base/vector3.h" + +bool unitcell::check_tau(const Atom* atoms, const int& ntype, const double& lat0) { - ModuleBase::TITLE("UnitCell","check_tau"); - ModuleBase::timer::tick("UnitCell","check_tau"); + ModuleBase::TITLE("UnitCell", "check_tau"); + ModuleBase::timer::tick("UnitCell", "check_tau"); - ModuleBase::Vector3 diff = 0.0; - double norm = 0.0; - double tolerence_bohr = 1.0e-3; + ModuleBase::Vector3 diff = 0.0; + double norm = 0.0; + double tolerence_bohr = 1.0e-3; - for(int T1=0; T1< ntype; T1++) - { - for(int I1=0; I1< atoms[T1].na; I1++) - { - double shortest_norm = 10000.0; // a large number - for(int T2=0; T2 norm ) - { - shortest_norm = norm; - } - if( norm < tolerence_bohr ) // unit is Bohr - { - GlobalV::ofs_warning << " two atoms are too close!" << std::endl; - GlobalV::ofs_warning << " type:" << atoms[T1].label << " atom " << I1 + 1 << std::endl; - GlobalV::ofs_warning << " type:" << atoms[T2].label << " atom " << I2 + 1 << std::endl; - GlobalV::ofs_warning << " distance = " << norm << " Bohr" << std::endl; - return false; - } - } - } - } - } - } - ModuleBase::timer::tick("UnitCell","check_tau"); - return true; + for (int T1 = 0; T1 < ntype; T1++) + { + for (int I1 = 0; I1 < atoms[T1].na; I1++) + { + double shortest_norm = 10000.0; // a large number + for (int T2 = 0; T2 < ntype; T2++) + { + for (int I2 = 0; I2 < atoms[T2].na; I2++) + { + if (T1 == T2 && I1 == I2) + { + shortest_norm = 0.0; + } + else + { + diff = atoms[T1].tau[I1] - atoms[T2].tau[I2]; + norm = diff.norm() * lat0; + if (shortest_norm > norm) + { + shortest_norm = norm; + } + if (norm < tolerence_bohr) // unit is Bohr + { + GlobalV::ofs_warning << " two atoms are too close!" << std::endl; + GlobalV::ofs_warning << " type:" << atoms[T1].label << " atom " << I1 + 1 << std::endl; + GlobalV::ofs_warning << " type:" << atoms[T2].label << " atom " << I2 + 1 << std::endl; + GlobalV::ofs_warning << " distance = " << norm << " Bohr" << std::endl; + return false; + } + } + } + } + } + } + ModuleBase::timer::tick("UnitCell", "check_tau"); + return true; } - -void unitcell::check_dtau(Atom* atoms, - const int& ntype, - const double& lat0, - ModuleBase::Matrix3& latvec) +void unitcell::check_dtau(Atom* atoms, const int& ntype, const double& lat0, ModuleBase::Matrix3& latvec) { - for(int it=0; ittaud[ia].x=fmod(atom1->taud[ia].x + 10000,1.0); - atom1->taud[ia].y=fmod(atom1->taud[ia].y + 10000,1.0); - atom1->taud[ia].z=fmod(atom1->taud[ia].z + 10000,1.0); - - double cx2=0.0; - double cy2=0.0; - double cz2=0.0; + for (int it = 0; it < ntype; it++) + { + Atom* atom1 = &atoms[it]; + for (int ia = 0; ia < atoms[it].na; ia++) + { + // mohan add 2011-04-07 + // fmod(x,1.0) set the result between the [0,1.0), + // while the x may be the negtivate value,thus we add 10000. + atom1->taud[ia].x = fmod(atom1->taud[ia].x + 10000, 1.0); + atom1->taud[ia].y = fmod(atom1->taud[ia].y + 10000, 1.0); + atom1->taud[ia].z = fmod(atom1->taud[ia].z + 10000, 1.0); - ModuleBase::Mathzone::Direct_to_Cartesian( - atom1->taud[ia].x, atom1->taud[ia].y, atom1->taud[ia].z, - latvec.e11, latvec.e12, latvec.e13, - latvec.e21, latvec.e22, latvec.e23, - latvec.e31, latvec.e32, latvec.e33, - cx2, cy2, cz2); + double cx2 = 0.0; + double cy2 = 0.0; + double cz2 = 0.0; - atom1->tau[ia].x = cx2; - atom1->tau[ia].y = cy2; - atom1->tau[ia].z = cz2; + ModuleBase::Mathzone::Direct_to_Cartesian(atom1->taud[ia].x, + atom1->taud[ia].y, + atom1->taud[ia].z, + latvec.e11, + latvec.e12, + latvec.e13, + latvec.e21, + latvec.e22, + latvec.e23, + latvec.e31, + latvec.e32, + latvec.e33, + cx2, + cy2, + cz2); - } - } - return; + atom1->tau[ia].x = cx2; + atom1->tau[ia].y = cy2; + atom1->tau[ia].z = cz2; + } + } + return; } diff --git a/source/module_cell/setup_nonlocal.cpp b/source/module_cell/setup_nonlocal.cpp index c31557e25e..24070c4fb5 100644 --- a/source/module_cell/setup_nonlocal.cpp +++ b/source/module_cell/setup_nonlocal.cpp @@ -1,7 +1,7 @@ #include "setup_nonlocal.h" -#include "module_base/parallel_common.h" #include "module_parameter/parameter.h" +#include "source_base/parallel_common.h" #ifdef __LCAO //#include "../module_hamilt_pw/hamilt_pwdft/global.h" @@ -22,7 +22,7 @@ InfoNonlocal::~InfoNonlocal() delete[] nproj; } -#include "../module_base/complexmatrix.h" +#include "../source_base/complexmatrix.h" void InfoNonlocal::Set_NonLocal(const int& it, Atom* atom, int& n_projectors, @@ -141,7 +141,8 @@ void InfoNonlocal::Set_NonLocal(const int& it, dk, dr_uniform); // delta k mesh in reciprocal space - if (PARAM.inp.out_element_info) { + if (PARAM.inp.out_element_info) + { tmpBeta_lm[p1].plot(GlobalV::MY_RANK); } @@ -391,9 +392,10 @@ void InfoNonlocal::Read_NonLocal(const int& it, dk, dr_uniform); // delta k mesh in reciprocal space - if (PARAM.inp.out_element_info) { + if (PARAM.inp.out_element_info) + { tmpBeta_lm[p1].plot(my_rank); -} + } delete[] radial_ps; delete[] rab_ps; diff --git a/source/module_cell/setup_nonlocal.h b/source/module_cell/setup_nonlocal.h index eef458968d..5156b22814 100644 --- a/source/module_cell/setup_nonlocal.h +++ b/source/module_cell/setup_nonlocal.h @@ -1,50 +1,46 @@ #ifndef INFONONLOCAL_H #define INFONONLOCAL_H -#include "atom_spec.h" -#include "../module_base/global_function.h" -#include "../module_base/global_variable.h" #include "../module_basis/module_ao/ORB_nonlocal.h" #include "../module_basis/module_ao/ORB_read.h" +#include "../source_base/global_function.h" +#include "../source_base/global_variable.h" +#include "atom_spec.h" class InfoNonlocal { - public: - InfoNonlocal(); - ~InfoNonlocal(); - /// - ///NON-LOCAL part for LCAO - /// - Numerical_Nonlocal* Beta;/// nonlocal projectors (1-dimension array) - int *nproj; //mohan add 2010-12-19 - int nprojmax; // mohan add 2010-03-07 - double rcutmax_Beta; //caoyu add 2021-05-24 - const double& get_rcutmax_Beta(void) const { return rcutmax_Beta; } - /// in order to get rid of the .NONLOCAL file. - void Set_NonLocal( - const int &it, - Atom* atom, - int &n_projectors, - const int& kmesh, - const double& dk, - const double& dr_uniform, - std::ofstream &log); - /// read in the NONLOCAL projector from file. - void Read_NonLocal( - const int &it, - Atom* atom, - int &n_projectors, - const int &my_rank, - const int& kmesh, - const double& dk, - const double& dr_uniform, - const std::string& nonlocalFile); - //workflow to setup nonlocal part for LCAO - void setupNonlocal( - const int& ntype, - Atom* atoms, - std::ofstream &log, - LCAO_Orbitals &orb - ); + public: + InfoNonlocal(); + ~InfoNonlocal(); + /// + /// NON-LOCAL part for LCAO + /// + Numerical_Nonlocal* Beta; /// nonlocal projectors (1-dimension array) + int* nproj; // mohan add 2010-12-19 + int nprojmax; // mohan add 2010-03-07 + double rcutmax_Beta; // caoyu add 2021-05-24 + const double& get_rcutmax_Beta(void) const + { + return rcutmax_Beta; + } + /// in order to get rid of the .NONLOCAL file. + void Set_NonLocal(const int& it, + Atom* atom, + int& n_projectors, + const int& kmesh, + const double& dk, + const double& dr_uniform, + std::ofstream& log); + /// read in the NONLOCAL projector from file. + void Read_NonLocal(const int& it, + Atom* atom, + int& n_projectors, + const int& my_rank, + const int& kmesh, + const double& dk, + const double& dr_uniform, + const std::string& nonlocalFile); + // workflow to setup nonlocal part for LCAO + void setupNonlocal(const int& ntype, Atom* atoms, std::ofstream& log, LCAO_Orbitals& orb); }; #endif \ No newline at end of file diff --git a/source/module_cell/test/CMakeLists.txt b/source/module_cell/test/CMakeLists.txt index 149b394bcc..d0a207aaa9 100644 --- a/source/module_cell/test/CMakeLists.txt +++ b/source/module_cell/test/CMakeLists.txt @@ -85,8 +85,8 @@ add_test(NAME MODULE_CELL_klist_test_para4 AddTest( TARGET MODULE_CELL_ParaKpoints LIBS parameter MPI::MPI_CXX - SOURCES parallel_kpoints_test.cpp ../../module_base/global_variable.cpp ../../module_base/parallel_global.cpp - ../../module_base/parallel_common.cpp ../../module_base/parallel_comm.cpp ../parallel_kpoints.cpp + SOURCES parallel_kpoints_test.cpp ../../source_base/global_variable.cpp ../../source_base/parallel_global.cpp + ../../source_base/parallel_common.cpp ../../source_base/parallel_comm.cpp ../parallel_kpoints.cpp ) find_program(BASH bash) diff --git a/source/module_cell/test/klist_test.cpp b/source/module_cell/test/klist_test.cpp index 3bedf060fc..6359c699df 100644 --- a/source/module_cell/test/klist_test.cpp +++ b/source/module_cell/test/klist_test.cpp @@ -18,9 +18,9 @@ #include "module_io/berryphase.h" #include "module_parameter/parameter.h" #undef private -#include "module_base/mathzone.h" -#include "module_base/parallel_global.h" #include "module_cell/parallel_kpoints.h" +#include "source_base/mathzone.h" +#include "source_base/parallel_global.h" bool berryphase::berry_phase_flag = false; pseudo::pseudo() @@ -84,7 +84,6 @@ Fcoef::~Fcoef() { } - /************************************************ * unit test of class K_Vectors ***********************************************/ @@ -294,7 +293,7 @@ TEST_F(KlistTest, ReadKpointsGammaOnlyLocal) PARAM.sys.gamma_only_local = true; std::string k_file = "KPT_GO"; kv->nspin = 1; - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); ifs.open("KPT_GO"); std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); EXPECT_THAT(str, testing::HasSubstr("Gamma")); @@ -311,7 +310,7 @@ TEST_F(KlistTest, ReadKpointsKspacing) PARAM.input.kspacing[2] = 0.052918; // 0.52918/Bohr = 1/A setucell(); std::string k_file = "./support/KPT3"; - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); EXPECT_EQ(kv->get_nkstot(), 343); PARAM.input.kspacing[0] = 0.0; PARAM.input.kspacing[1] = 0.0; @@ -326,7 +325,7 @@ TEST_F(KlistTest, ReadKpointsKspacing3values) PARAM.input.kspacing[2] = 0.07; // 0.52918/Bohr = 1/A setucell(); std::string k_file = "./support/KPT3"; - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); EXPECT_EQ(kv->get_nkstot(), 210); PARAM.input.kspacing[0] = 0.0; PARAM.input.kspacing[1] = 0.0; @@ -341,7 +340,7 @@ TEST_F(KlistTest, ReadKpointsInvalidKspacing3values) PARAM.input.kspacing[2] = 0.07; // 0.52918/Bohr = 1/A std::string k_file = "./support/KPT3"; testing::internal::CaptureStdout(); - EXPECT_EXIT(kv->read_kpoints(ucell,k_file), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(kv->read_kpoints(ucell, k_file), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); PARAM.input.kspacing[0] = 0.0; PARAM.input.kspacing[1] = 0.0; @@ -352,7 +351,7 @@ TEST_F(KlistTest, ReadKpointsGamma) { std::string k_file = "./support/KPT"; kv->nspin = 1; - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); EXPECT_EQ(kv->get_nkstot(), 512); } @@ -360,7 +359,7 @@ TEST_F(KlistTest, ReadKpointsMP) { std::string k_file = "./support/KPT1"; kv->nspin = 1; - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); EXPECT_EQ(kv->get_nkstot(), 512); } @@ -370,7 +369,7 @@ TEST_F(KlistTest, ReadKpointsLine) // symm_flag is required in read_kpoints for a k list std::string k_file = "./support/KPT2"; kv->nspin = 1; - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); EXPECT_EQ(kv->get_nkstot(), 122); } @@ -379,11 +378,11 @@ TEST_F(KlistTest, ReadKpointsCartesian) std::string k_file = "./support/KPT4"; // Cartesian: non-spin case nspin=1 kv->nspin = 1; - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); EXPECT_EQ(kv->kvec_c.size(), 5); // spin case nspin=2 kv->nspin = 2; - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); EXPECT_EQ(kv->kvec_c.size(), 10); } @@ -394,13 +393,13 @@ TEST_F(KlistTest, ReadKpointsLineCartesian) kv->nspin = 1; kv->set_kup_and_kdw(); // Read from k point file under the case of Line_Cartesian. - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); EXPECT_EQ(kv->get_nkstot(), 51); EXPECT_EQ(kv->kvec_c.size(), 51); // Line Cartesian: spin case nspin=2 kv->nspin = 2; // Read from k point file under the case of Line_Cartesian. - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); EXPECT_EQ(kv->get_nkstot(), 51); EXPECT_EQ(kv->kvec_c.size(), 102); } @@ -411,7 +410,7 @@ TEST_F(KlistTest, ReadKpointsDirect) kv->nspin = 1; kv->set_kup_and_kdw(); // Read from k point file under the case of Direct - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); EXPECT_EQ(kv->get_nkstot(), 6); EXPECT_TRUE(kv->kd_done); } @@ -421,7 +420,7 @@ TEST_F(KlistTest, ReadKpointsWarning1) std::string k_file = "arbitrary_1"; kv->nspin = 1; GlobalV::ofs_warning.open("klist_tmp_warning_1"); - EXPECT_NO_THROW(kv->read_kpoints(ucell,k_file)); + EXPECT_NO_THROW(kv->read_kpoints(ucell, k_file)); GlobalV::ofs_warning.close(); ifs.open("klist_tmp_warning_1"); std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); @@ -438,7 +437,7 @@ TEST_F(KlistTest, ReadKpointsWarning2) ofs.close(); kv->nspin = 1; GlobalV::ofs_warning.open("klist_tmp_warning_2"); - EXPECT_NO_THROW(kv->read_kpoints(ucell,k_file)); + EXPECT_NO_THROW(kv->read_kpoints(ucell, k_file)); GlobalV::ofs_warning.close(); ifs.open("klist_tmp_warning_2"); std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); @@ -457,7 +456,7 @@ TEST_F(KlistTest, ReadKpointsWarning3) ofs.close(); kv->nspin = 1; GlobalV::ofs_warning.open("klist_tmp_warning_3"); - EXPECT_NO_THROW(kv->read_kpoints(ucell,k_file)); + EXPECT_NO_THROW(kv->read_kpoints(ucell, k_file)); GlobalV::ofs_warning.close(); ifs.open("klist_tmp_warning_3"); std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); @@ -477,7 +476,7 @@ TEST_F(KlistTest, ReadKpointsWarning4) ofs.close(); kv->nspin = 1; GlobalV::ofs_warning.open("klist_tmp_warning_4"); - EXPECT_NO_THROW(kv->read_kpoints(ucell,k_file)); + EXPECT_NO_THROW(kv->read_kpoints(ucell, k_file)); GlobalV::ofs_warning.close(); ifs.open("klist_tmp_warning_4"); std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); @@ -498,7 +497,7 @@ TEST_F(KlistTest, ReadKpointsWarning5) // Cartesian: non-spin case nspin=1 kv->nspin = 1; GlobalV::ofs_warning.open("klist_tmp_warning_5"); - EXPECT_NO_THROW(kv->read_kpoints(ucell,k_file)); + EXPECT_NO_THROW(kv->read_kpoints(ucell, k_file)); GlobalV::ofs_warning.close(); ifs.open("klist_tmp_warning_5"); std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); @@ -520,7 +519,7 @@ TEST_F(KlistTest, ReadKpointsWarning6) kv->nspin = 1; ModuleSymmetry::Symmetry::symm_flag = 1; GlobalV::ofs_warning.open("klist_tmp_warning_6"); - EXPECT_NO_THROW(kv->read_kpoints(ucell,k_file)); + EXPECT_NO_THROW(kv->read_kpoints(ucell, k_file)); GlobalV::ofs_warning.close(); ifs.open("klist_tmp_warning_6"); std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); @@ -542,7 +541,7 @@ TEST_F(KlistTest, ReadKpointsWarning7) kv->nspin = 1; ModuleSymmetry::Symmetry::symm_flag = 1; GlobalV::ofs_warning.open("klist_tmp_warning_7"); - EXPECT_NO_THROW(kv->read_kpoints(ucell,k_file)); + EXPECT_NO_THROW(kv->read_kpoints(ucell, k_file)); GlobalV::ofs_warning.close(); ifs.open("klist_tmp_warning_7"); std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); @@ -558,14 +557,14 @@ TEST_F(KlistTest, SetKupKdown) std::string k_file = "./support/KPT4"; // Cartesian: non-spin case nspin=1 kv->nspin = 1; - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); kv->set_kup_and_kdw(); for (int ik = 0; ik < 5; ik++) { EXPECT_EQ(kv->isk[ik], 0); } kv->nspin = 4; - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); kv->set_kup_and_kdw(); for (int ik = 0; ik < 5; ik++) { @@ -575,7 +574,7 @@ TEST_F(KlistTest, SetKupKdown) EXPECT_EQ(kv->isk[ik + 15], 0); } kv->nspin = 2; - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); kv->set_kup_and_kdw(); for (int ik = 0; ik < 5; ik++) { @@ -593,7 +592,7 @@ TEST_F(KlistTest, SetAfterVC) kv->kvec_c[0].x = 0; kv->kvec_c[0].y = 0; kv->kvec_c[0].z = 0; -// kv->set_after_vc(PARAM.input.nspin, ucell.G, ucell.latvec); + // kv->set_after_vc(PARAM.input.nspin, ucell.G, ucell.latvec); KVectorUtils::set_after_vc(*kv, PARAM.input.nspin, ucell.G); EXPECT_TRUE(kv->kd_done); @@ -615,7 +614,7 @@ TEST_F(KlistTest, PrintKlists) kv->kvec_c[0].x = 0; kv->kvec_c[0].y = 0; kv->kvec_c[0].z = 0; -// kv->set_after_vc(PARAM.input.nspin, ucell.G, ucell.latvec); + // kv->set_after_vc(PARAM.input.nspin, ucell.G, ucell.latvec); KVectorUtils::set_after_vc(*kv, PARAM.input.nspin, ucell.G); EXPECT_TRUE(kv->kd_done); KVectorUtils::print_klists(*kv, GlobalV::ofs_running); @@ -651,32 +650,32 @@ TEST_F(KlistTest, SetBothKvecFinalSCF) kv->kvec_c[0].y = 0.0; kv->kvec_c[0].z = 0.0; std::string skpt; -// PARAM.input.final_scf = true; + // PARAM.input.final_scf = true; kv->kd_done = false; kv->kc_done = false; // case 1 kv->k_nkstot = 0; -// kv->set_both_kvec(ucell.G, ucell.latvec, skpt); + // kv->set_both_kvec(ucell.G, ucell.latvec, skpt); KVectorUtils::set_both_kvec(*kv, ucell.G, ucell.latvec, skpt); EXPECT_TRUE(kv->kd_done); EXPECT_TRUE(kv->kc_done); // case 2 kv->k_nkstot = 1; kv->k_kword = "D"; -// kv->set_both_kvec(ucell.G, ucell.latvec, skpt); + // kv->set_both_kvec(ucell.G, ucell.latvec, skpt); KVectorUtils::set_both_kvec(*kv, ucell.G, ucell.latvec, skpt); EXPECT_TRUE(kv->kd_done); EXPECT_TRUE(kv->kc_done); // case 3 kv->k_kword = "C"; -// kv->set_both_kvec(ucell.G, ucell.latvec, skpt); + // kv->set_both_kvec(ucell.G, ucell.latvec, skpt); KVectorUtils::set_both_kvec(*kv, ucell.G, ucell.latvec, skpt); EXPECT_TRUE(kv->kc_done); EXPECT_TRUE(kv->kd_done); // case 4 GlobalV::ofs_warning.open("klist_tmp_warning_8"); kv->k_kword = "arbitrary"; -// kv->set_both_kvec(ucell.G, ucell.latvec, skpt); + // kv->set_both_kvec(ucell.G, ucell.latvec, skpt); KVectorUtils::set_both_kvec(*kv, ucell.G, ucell.latvec, skpt); GlobalV::ofs_warning.close(); ifs.open("klist_tmp_warning_8"); @@ -698,13 +697,13 @@ TEST_F(KlistTest, SetBothKvec) kv->kc_done = false; kv->kd_done = true; std::string skpt; -// PARAM.input.final_scf = false; -// kv->set_both_kvec(ucell.G, ucell.latvec, skpt); + // PARAM.input.final_scf = false; + // kv->set_both_kvec(ucell.G, ucell.latvec, skpt); KVectorUtils::set_both_kvec(*kv, ucell.G, ucell.latvec, skpt); EXPECT_TRUE(kv->kc_done); kv->kc_done = true; kv->kd_done = false; -// kv->set_both_kvec(ucell.G, ucell.latvec, skpt); + // kv->set_both_kvec(ucell.G, ucell.latvec, skpt); KVectorUtils::set_both_kvec(*kv, ucell.G, ucell.latvec, skpt); EXPECT_TRUE(kv->kd_done); } @@ -746,7 +745,7 @@ TEST_F(KlistTest, IbzKpoint) // read KPT std::string k_file = "./support/KPT1"; kv->nspin = 1; - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); EXPECT_EQ(kv->get_nkstot(), 512); // calculate ibz_kpoint std::string skpt; @@ -770,7 +769,7 @@ TEST_F(KlistTest, IbzKpointIsMP) // read KPT std::string k_file = "./support/KPT1"; kv->nspin = 1; - kv->read_kpoints(ucell,k_file); + kv->read_kpoints(ucell, k_file); EXPECT_EQ(kv->get_nkstot(), 512); EXPECT_TRUE(kv->is_mp); // calculate ibz_kpoint diff --git a/source/module_cell/test/klist_test_para.cpp b/source/module_cell/test/klist_test_para.cpp index f7cb12fec1..b108f4edc4 100644 --- a/source/module_cell/test/klist_test_para.cpp +++ b/source/module_cell/test/klist_test_para.cpp @@ -1,5 +1,5 @@ -#include "module_base/mathzone.h" -#include "module_base/parallel_global.h" +#include "source_base/mathzone.h" +#include "source_base/parallel_global.h" #define private public #include "module_parameter/parameter.h" #undef private @@ -87,7 +87,6 @@ Fcoef::~Fcoef() { } - /************************************************ * unit test of class K_Vectors ***********************************************/ @@ -207,9 +206,10 @@ TEST_F(KlistParaTest, Set) // construct cell and symmetry ModuleSymmetry::Symmetry symm; construct_ucell(stru_lib[0]); - if (GlobalV::MY_RANK == 0) { + if (GlobalV::MY_RANK == 0) + { GlobalV::ofs_running.open("tmp_klist_5"); -} + } symm.analy_sys(ucell.lat, ucell.st, ucell.atoms, GlobalV::ofs_running); // read KPT std::string k_file = "./support/KPT1"; @@ -231,24 +231,28 @@ TEST_F(KlistParaTest, Set) GlobalV::RANK_IN_POOL, GlobalV::MY_POOL); ModuleSymmetry::Symmetry::symm_flag = 1; - kv->set(ucell,symm, k_file, kv->nspin, ucell.G, ucell.latvec, GlobalV::ofs_running); + kv->set(ucell, symm, k_file, kv->nspin, ucell.G, ucell.latvec, GlobalV::ofs_running); EXPECT_EQ(kv->get_nkstot(), 35); EXPECT_TRUE(kv->kc_done); EXPECT_TRUE(kv->kd_done); if (GlobalV::NPROC == 4) { - if (GlobalV::MY_RANK == 0) { + if (GlobalV::MY_RANK == 0) + { EXPECT_EQ(kv->get_nks(), 18); -} - if (GlobalV::MY_RANK == 1) { + } + if (GlobalV::MY_RANK == 1) + { EXPECT_EQ(kv->get_nks(), 18); -} - if (GlobalV::MY_RANK == 2) { + } + if (GlobalV::MY_RANK == 2) + { EXPECT_EQ(kv->get_nks(), 17); -} - if (GlobalV::MY_RANK == 3) { + } + if (GlobalV::MY_RANK == 3) + { EXPECT_EQ(kv->get_nks(), 17); -} + } } ClearUcell(); if (GlobalV::MY_RANK == 0) @@ -264,9 +268,10 @@ TEST_F(KlistParaTest, SetAfterVC) // construct cell and symmetry ModuleSymmetry::Symmetry symm; construct_ucell(stru_lib[0]); - if (GlobalV::MY_RANK == 0) { + if (GlobalV::MY_RANK == 0) + { GlobalV::ofs_running.open("tmp_klist_6"); -} + } symm.analy_sys(ucell.lat, ucell.st, ucell.atoms, GlobalV::ofs_running); // read KPT std::string k_file = "./support/KPT1"; @@ -288,28 +293,32 @@ TEST_F(KlistParaTest, SetAfterVC) GlobalV::RANK_IN_POOL, GlobalV::MY_POOL); ModuleSymmetry::Symmetry::symm_flag = 1; - kv->set(ucell,symm, k_file, kv->nspin, ucell.G, ucell.latvec, GlobalV::ofs_running); + kv->set(ucell, symm, k_file, kv->nspin, ucell.G, ucell.latvec, GlobalV::ofs_running); EXPECT_EQ(kv->get_nkstot(), 35); EXPECT_TRUE(kv->kc_done); EXPECT_TRUE(kv->kd_done); if (GlobalV::NPROC == 4) { - if (GlobalV::MY_RANK == 0) { + if (GlobalV::MY_RANK == 0) + { EXPECT_EQ(kv->get_nks(), 35); -} - if (GlobalV::MY_RANK == 1) { + } + if (GlobalV::MY_RANK == 1) + { EXPECT_EQ(kv->get_nks(), 35); -} - if (GlobalV::MY_RANK == 2) { + } + if (GlobalV::MY_RANK == 2) + { EXPECT_EQ(kv->get_nks(), 35); -} - if (GlobalV::MY_RANK == 3) { + } + if (GlobalV::MY_RANK == 3) + { EXPECT_EQ(kv->get_nks(), 35); -} + } } // call set_after_vc here kv->kc_done = false; -// kv->set_after_vc(kv->nspin, ucell.G, ucell.latvec); + // kv->set_after_vc(kv->nspin, ucell.G, ucell.latvec); KVectorUtils::set_after_vc(*kv, kv->nspin, ucell.G); EXPECT_TRUE(kv->kc_done); EXPECT_TRUE(kv->kd_done); diff --git a/source/module_cell/test/parallel_kpoints_test.cpp b/source/module_cell/test/parallel_kpoints_test.cpp index f5b82ecfd5..26abbf1815 100644 --- a/source/module_cell/test/parallel_kpoints_test.cpp +++ b/source/module_cell/test/parallel_kpoints_test.cpp @@ -1,5 +1,5 @@ #ifdef __MPI -#include "module_base/parallel_global.h" +#include "source_base/parallel_global.h" #include "gmock/gmock.h" #include "gtest/gtest.h" diff --git a/source/module_cell/test/unitcell_test.cpp b/source/module_cell/test/unitcell_test.cpp index 11c10d15fc..126f12b33f 100644 --- a/source/module_cell/test/unitcell_test.cpp +++ b/source/module_cell/test/unitcell_test.cpp @@ -3,18 +3,17 @@ #define private public #include "module_parameter/parameter.h" #undef private +#include "memory" +#include "module_cell/print_cell.h" +#include "module_cell/read_stru.h" +#include "module_cell/update_cell.h" #include "module_elecstate/cal_ux.h" #include "module_elecstate/read_orb.h" #include "module_elecstate/read_pseudo.h" -#include "module_cell/read_stru.h" -#include "module_cell/print_cell.h" -#include "memory" -#include "module_cell/read_stru.h" -#include "module_base/global_variable.h" -#include "module_base/mathzone.h" #include "prepare_unitcell.h" -#include "module_cell/update_cell.h" -#include "module_cell/read_stru.h" +#include "source_base/global_variable.h" +#include "source_base/mathzone.h" + #include #include #include @@ -738,7 +737,7 @@ TEST_F(UcellTest, CheckDTau) UcellTestPrepare utp = UcellTestLib["C1H2-CheckDTau"]; PARAM.input.relax_new = utp.relax_new; ucell = utp.SetUcellInfo(); - unitcell::check_dtau(ucell->atoms,ucell->ntype, ucell->lat0, ucell->latvec); + unitcell::check_dtau(ucell->atoms, ucell->ntype, ucell->lat0, ucell->latvec); for (int it = 0; it < utp.natom.size(); ++it) { for (int ia = 0; ia < utp.natom[it]; ++ia) @@ -759,7 +758,7 @@ TEST_F(UcellTest, CheckTauFalse) PARAM.input.relax_new = utp.relax_new; ucell = utp.SetUcellInfo(); GlobalV::ofs_warning.open("checktau_warning"); - unitcell::check_tau(ucell->atoms ,ucell->ntype, ucell->lat0); + unitcell::check_tau(ucell->atoms, ucell->ntype, ucell->lat0); GlobalV::ofs_warning.close(); std::ifstream ifs; ifs.open("checktau_warning"); @@ -775,24 +774,24 @@ TEST_F(UcellTest, CheckTauTrue) PARAM.input.relax_new = utp.relax_new; ucell = utp.SetUcellInfo(); GlobalV::ofs_warning.open("checktau_warning"); - int atom=0; - //cause the ucell->lat0 is 0.5,if the type of the check_tau has - //an int type,it will set to zero,and it will not pass the unittest - ucell->lat0=0.5; - ucell->nat=3; - for (int it=0;itntype;it++) + int atom = 0; + // cause the ucell->lat0 is 0.5,if the type of the check_tau has + // an int type,it will set to zero,and it will not pass the unittest + ucell->lat0 = 0.5; + ucell->nat = 3; + for (int it = 0; it < ucell->ntype; it++) { - for(int ia=0; iaatoms[it].na; ++ia) + for (int ia = 0; ia < ucell->atoms[it].na; ++ia) { - - for (int i=0;i<3;i++) + + for (int i = 0; i < 3; i++) { - ucell->atoms[it].tau[ia][i]=((atom+i)/(ucell->nat*3.0)); + ucell->atoms[it].tau[ia][i] = ((atom + i) / (ucell->nat * 3.0)); } - atom+=3; + atom += 3; } } - EXPECT_EQ(unitcell::check_tau(ucell->atoms ,ucell->ntype, ucell->lat0),true); + EXPECT_EQ(unitcell::check_tau(ucell->atoms, ucell->ntype, ucell->lat0), true); GlobalV::ofs_warning.close(); } @@ -810,9 +809,9 @@ TEST_F(UcellDeathTest, PeriodicBoundaryAdjustment1) PARAM.input.relax_new = utp.relax_new; ucell = utp.SetUcellInfo(); testing::internal::CaptureStdout(); - EXPECT_EXIT(unitcell::periodic_boundary_adjustment( - ucell->atoms,ucell->latvec,ucell->ntype), - ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(unitcell::periodic_boundary_adjustment(ucell->atoms, ucell->latvec, ucell->ntype), + ::testing::ExitedWithCode(1), + ""); std::string output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("the movement of atom is larger than the length of cell")); } @@ -822,8 +821,7 @@ TEST_F(UcellTest, PeriodicBoundaryAdjustment2) UcellTestPrepare utp = UcellTestLib["C1H2-Index"]; PARAM.input.relax_new = utp.relax_new; ucell = utp.SetUcellInfo(); - EXPECT_NO_THROW(unitcell::periodic_boundary_adjustment( - ucell->atoms,ucell->latvec,ucell->ntype)); + EXPECT_NO_THROW(unitcell::periodic_boundary_adjustment(ucell->atoms, ucell->latvec, ucell->ntype)); } TEST_F(UcellTest, PrintCell) @@ -895,8 +893,7 @@ TEST_F(UcellTest, PrintSTRU) * CASE: nspin1|Cartesian|no vel|no mag|no orb|no dpks_desc|rank0 * */ - unitcell::print_stru_file(*ucell,ucell->atoms,ucell->latvec, - fn, 1, false, false, false, false, false, 0); + unitcell::print_stru_file(*ucell, ucell->atoms, ucell->latvec, fn, 1, false, false, false, false, false, 0); std::ifstream ifs; ifs.open("C1H2_STRU"); std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); @@ -927,8 +924,7 @@ TEST_F(UcellTest, PrintSTRU) * CASE: nspin2|Direct|vel|no mag|no orb|no dpks_desc|rank0 * */ - unitcell::print_stru_file(*ucell,ucell->atoms,ucell->latvec, - fn, 2, true, true, false, false, false, 0); + unitcell::print_stru_file(*ucell, ucell->atoms, ucell->latvec, fn, 2, true, true, false, false, false, 0); ifs.open("C1H2_STRU"); str = {(std::istreambuf_iterator(ifs)), std::istreambuf_iterator()}; EXPECT_THAT(str, testing::HasSubstr("ATOMIC_SPECIES")); @@ -969,8 +965,7 @@ TEST_F(UcellTest, PrintSTRU) ucell->orbital_fn[1] = "__unittest_orbital_fn_1__"; ucell->atom_mulliken = {{-1, 0.5}, {-1, 0.4}, {-1, 0.3}}; // first index is iat, the second is components, starts seems from 1 - unitcell::print_stru_file(*ucell,ucell->atoms,ucell->latvec, - fn, 2, true, false, true, true, true, 0); + unitcell::print_stru_file(*ucell, ucell->atoms, ucell->latvec, fn, 2, true, false, true, true, true, 0); ifs.open("C1H2_STRU"); str = {(std::istreambuf_iterator(ifs)), std::istreambuf_iterator()}; EXPECT_THAT(str, testing::HasSubstr("ATOMIC_SPECIES")); @@ -1014,16 +1009,16 @@ TEST_F(UcellTest, PrintTauDirect) // open a file std::ofstream ofs("print_tau_direct"); - unitcell::print_tau(ucell->atoms,ucell->Coordinate,ucell->ntype,ucell->lat0,ofs); + unitcell::print_tau(ucell->atoms, ucell->Coordinate, ucell->ntype, ucell->lat0, ofs); ofs.close(); - + // readin the data std::ifstream ifs; ifs.open("print_tau_direct"); std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); EXPECT_THAT(str, testing::HasSubstr("DIRECT COORDINATES")); EXPECT_THAT(str, testing::HasSubstr(" C 0.100000000000 0.100000000000 0.100000000000 0.0000")); - EXPECT_THAT(str, testing::HasSubstr(" H 0.150000000000 0.150000000000 0.150000000000 0.0000")); + EXPECT_THAT(str, testing::HasSubstr(" H 0.150000000000 0.150000000000 0.150000000000 0.0000")); ifs.close(); remove("print_tau_direct"); @@ -1038,7 +1033,7 @@ TEST_F(UcellTest, PrintTauCartesian) // open a file std::ofstream ofs("print_tau_Cartesian"); - unitcell::print_tau(ucell->atoms,ucell->Coordinate,ucell->ntype,ucell->lat0,ofs); + unitcell::print_tau(ucell->atoms, ucell->Coordinate, ucell->ntype, ucell->lat0, ofs); ofs.close(); // readin the data @@ -1064,7 +1059,7 @@ TEST_F(UcellTest, UpdateVel) { vel_in[iat].set(iat * 0.1, iat * 0.1, iat * 0.1); } - unitcell::update_vel(vel_in,ucell->ntype,ucell->nat,ucell->atoms); + unitcell::update_vel(vel_in, ucell->ntype, ucell->nat, ucell->atoms); for (int iat = 0; iat < ucell->nat; ++iat) { EXPECT_DOUBLE_EQ(vel_in[iat].x, 0.1 * iat); @@ -1131,7 +1126,9 @@ TEST_F(UcellDeathTest, ReadOrbFileWarning) std::ofstream ofs_running; ofs_running.open("tmp_readorbfile"); testing::internal::CaptureStdout(); - EXPECT_EXIT(elecstate::read_orb_file(0, orb_file, ofs_running, &(ucell->atoms[0])), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(elecstate::read_orb_file(0, orb_file, ofs_running, &(ucell->atoms[0])), + ::testing::ExitedWithCode(1), + ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("ABACUS Cannot find the ORBITAL file")); ofs_running.close(); @@ -1142,9 +1139,9 @@ class UcellTestReadStru : public ::testing::Test protected: std::unique_ptr ucell{new UnitCell}; std::string output; - void SetUp() override + void SetUp() override { - ucell->ntype = 2; + ucell->ntype = 2; ucell->atom_mass.resize(ucell->ntype); ucell->atom_label.resize(ucell->ntype); ucell->pseudo_fn.resize(ucell->ntype); @@ -1169,7 +1166,7 @@ TEST_F(UcellTestReadStru, ReadAtomSpecies) PARAM.input.test_pseudo_cell = 2; PARAM.input.basis_type = "lcao"; PARAM.sys.deepks_setorb = true; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); @@ -1189,12 +1186,12 @@ TEST_F(UcellTestReadStru, ReadAtomSpeciesWarning1) ucell->atoms = new Atom[ucell->ntype]; ucell->set_atom_flag = true; testing::internal::CaptureStdout(); - EXPECT_EXIT(unitcell::read_atom_species(ifa, ofs_running,*ucell), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(unitcell::read_atom_species(ifa, ofs_running, *ucell), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("unrecognized pseudopotential type.")); ofs_running.close(); ifa.close(); - //remove("read_atom_species.txt"); + // remove("read_atom_species.txt"); } TEST_F(UcellTestReadStru, ReadLatticeConstantWarning1) @@ -1207,7 +1204,7 @@ TEST_F(UcellTestReadStru, ReadLatticeConstantWarning1) ucell->atoms = new Atom[ucell->ntype]; ucell->set_atom_flag = true; testing::internal::CaptureStdout(); - EXPECT_EXIT(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("lattice constant <= 0.0")); ofs_running.close(); @@ -1225,7 +1222,7 @@ TEST_F(UcellTestReadStru, ReadLatticeConstantWarning2) ucell->atoms = new Atom[ucell->ntype]; ucell->set_atom_flag = true; testing::internal::CaptureStdout(); - EXPECT_EXIT(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("do not use LATTICE_PARAMETERS without explicit specification of lattice type")); @@ -1245,7 +1242,7 @@ TEST_F(UcellTestReadStru, ReadLatticeConstantWarning3) ucell->set_atom_flag = true; ucell->latName = "bcc"; testing::internal::CaptureStdout(); - EXPECT_EXIT(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("do not use LATTICE_VECTORS along with explicit specification of lattice type")); @@ -1280,7 +1277,7 @@ TEST_F(UcellTestReadStru, ReadAtomSpeciesLatName) std::ofstream ofs_running; ofs_running.open("read_atom_species.tmp"); ucell->latName = latName_in[i]; - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); if (ucell->latName == "sc") { EXPECT_DOUBLE_EQ(ucell->latvec.e11, 1.0); @@ -1304,7 +1301,7 @@ TEST_F(UcellDeathTest, ReadAtomSpeciesWarning5) ucell->set_atom_flag = true; ucell->latName = "arbitrary"; testing::internal::CaptureStdout(); - EXPECT_EXIT(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("latname not supported")); ofs_running.close(); @@ -1328,15 +1325,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsS1) PARAM.input.basis_type = "lcao"; PARAM.sys.deepks_setorb = true; PARAM.input.nspin = 1; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning); + unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning); ofs_running.close(); ofs_warning.close(); ifa.close(); @@ -1360,15 +1357,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsS2) PARAM.input.basis_type = "lcao"; PARAM.sys.deepks_setorb = true; PARAM.input.nspin = 2; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning); + unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning); ofs_running.close(); ofs_warning.close(); ifa.close(); @@ -1393,15 +1390,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsS4Noncolin) PARAM.sys.deepks_setorb = true; PARAM.input.nspin = 4; PARAM.input.noncolin = true; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning); + unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning); ofs_running.close(); ofs_warning.close(); ifa.close(); @@ -1426,15 +1423,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsS4Colin) PARAM.sys.deepks_setorb = true; PARAM.input.nspin = 4; PARAM.input.noncolin = false; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning); + unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning); ofs_running.close(); ofs_warning.close(); ifa.close(); @@ -1458,15 +1455,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsC) PARAM.input.basis_type = "lcao"; PARAM.sys.deepks_setorb = true; PARAM.input.nspin = 1; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning); + unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning); ofs_running.close(); ofs_warning.close(); ifa.close(); @@ -1490,15 +1487,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsCA) PARAM.input.basis_type = "lcao"; PARAM.sys.deepks_setorb = true; PARAM.input.nspin = 1; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning); + unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning); ofs_running.close(); ofs_warning.close(); ifa.close(); @@ -1522,15 +1519,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsCACXY) PARAM.input.basis_type = "lcao"; PARAM.sys.deepks_setorb = true; PARAM.input.nspin = 1; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning); + unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning); ofs_running.close(); ofs_warning.close(); ifa.close(); @@ -1554,15 +1551,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsCACXZ) PARAM.input.basis_type = "lcao"; PARAM.sys.deepks_setorb = true; PARAM.input.nspin = 1; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning); + unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning); ofs_running.close(); ofs_warning.close(); ifa.close(); @@ -1586,15 +1583,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsCACYZ) PARAM.input.basis_type = "lcao"; PARAM.sys.deepks_setorb = true; PARAM.input.nspin = 1; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning); + unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning); ofs_running.close(); ofs_warning.close(); ifa.close(); @@ -1618,15 +1615,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsCACXYZ) PARAM.input.basis_type = "lcao"; PARAM.sys.deepks_setorb = true; PARAM.input.nspin = 1; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning); + unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning); ofs_running.close(); ofs_warning.close(); ifa.close(); @@ -1651,15 +1648,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsCAU) PARAM.sys.deepks_setorb = true; PARAM.input.nspin = 1; PARAM.input.fixed_atoms = true; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning); + unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning); ofs_running.close(); ofs_warning.close(); ifa.close(); @@ -1683,15 +1680,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsAutosetMag) PARAM.input.basis_type = "lcao"; PARAM.sys.deepks_setorb = true; PARAM.input.nspin = 2; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning); + unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning); for (int it = 0; it < ucell->ntype; it++) { for (int ia = 0; ia < ucell->atoms[it].na; ia++) @@ -1704,7 +1701,7 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsAutosetMag) PARAM.input.nspin = 4; delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning); + unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning); for (int it = 0; it < ucell->ntype; it++) { for (int ia = 0; ia < ucell->atoms[it].na; ia++) @@ -1737,15 +1734,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsWarning1) PARAM.input.test_pseudo_cell = 2; PARAM.input.basis_type = "lcao"; PARAM.sys.deepks_setorb = true; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - EXPECT_NO_THROW(unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning)); + EXPECT_NO_THROW(unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning)); ofs_running.close(); ofs_warning.close(); ifa.close(); @@ -1781,15 +1778,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsWarning2) PARAM.input.test_pseudo_cell = 2; PARAM.input.basis_type = "lcao"; PARAM.sys.deepks_setorb = true; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - EXPECT_NO_THROW(unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning)); + EXPECT_NO_THROW(unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning)); ofs_running.close(); ofs_warning.close(); ifa.close(); @@ -1818,15 +1815,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsWarning3) PARAM.input.test_pseudo_cell = 2; PARAM.input.basis_type = "lcao"; PARAM.sys.deepks_setorb = true; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - EXPECT_NO_THROW(unitcell::read_atom_positions(*ucell,ifa, ofs_running, GlobalV::ofs_warning)); + EXPECT_NO_THROW(unitcell::read_atom_positions(*ucell, ifa, ofs_running, GlobalV::ofs_warning)); ofs_running.close(); GlobalV::ofs_warning.close(); ifa.close(); @@ -1856,8 +1853,8 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsWarning4) PARAM.input.test_pseudo_cell = 2; PARAM.input.basis_type = "lcao"; PARAM.sys.deepks_setorb = true; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); @@ -1865,7 +1862,7 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsWarning4) delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; testing::internal::CaptureStdout(); - EXPECT_EXIT(unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("read_atom_positions, mismatch in atom number for atom type: Mg")); ofs_running.close(); @@ -1891,15 +1888,15 @@ TEST_F(UcellTestReadStru, ReadAtomPositionsWarning5) PARAM.sys.deepks_setorb = true; PARAM.input.calculation = "md"; PARAM.input.esolver_type = "arbitrary"; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); // mandatory preliminaries delete[] ucell->magnet.start_mag; ucell->magnet.start_mag = new double[ucell->ntype]; - EXPECT_NO_THROW(unitcell::read_atom_positions(*ucell,ifa, ofs_running, GlobalV::ofs_warning)); + EXPECT_NO_THROW(unitcell::read_atom_positions(*ucell, ifa, ofs_running, GlobalV::ofs_warning)); ofs_running.close(); GlobalV::ofs_warning.close(); ifa.close(); diff --git a/source/module_cell/test/unitcell_test_para.cpp b/source/module_cell/test/unitcell_test_para.cpp index 4a9319fd81..706cdc136e 100644 --- a/source/module_cell/test/unitcell_test_para.cpp +++ b/source/module_cell/test/unitcell_test_para.cpp @@ -4,18 +4,19 @@ #include "module_parameter/parameter.h" #undef private #include "memory" -#include "module_base/global_variable.h" -#include "module_base/mathzone.h" #include "module_cell/unitcell.h" #include "module_elecstate/read_pseudo.h" +#include "source_base/global_variable.h" +#include "source_base/mathzone.h" + #include #include #ifdef __MPI #include "mpi.h" #endif -#include "prepare_unitcell.h" -#include "../update_cell.h" #include "../bcast_cell.h" +#include "../update_cell.h" +#include "prepare_unitcell.h" #ifdef __LCAO InfoNonlocal::InfoNonlocal() { @@ -161,15 +162,14 @@ TEST_F(UcellTest, UpdatePosTau) pos_in[iat * 3 + ik] = (iat * 3 + ik) / (ucell->nat * 3.0) * (ucell->lat.lat0); } } - unitcell::update_pos_tau(ucell->lat,pos_in,ucell->ntype,ucell->nat,ucell->atoms); + unitcell::update_pos_tau(ucell->lat, pos_in, ucell->ntype, ucell->nat, ucell->atoms); for (int iat = 0; iat < ucell->nat; ++iat) { int it, ia; ucell->iat2iait(iat, &ia, &it); for (int ik = 0; ik < 3; ++ik) { - EXPECT_DOUBLE_EQ(ucell->atoms[it].tau[ia][ik], - (iat*3+ik)/(ucell->nat*3.0)); + EXPECT_DOUBLE_EQ(ucell->atoms[it].tau[ia][ik], (iat * 3 + ik) / (ucell->nat * 3.0)); } } delete[] pos_in; @@ -188,8 +188,7 @@ TEST_F(UcellTest, UpdatePosTaud_pointer) ucell->iat2iait(iat, &ia, &it); tmp[iat] = ucell->atoms[it].taud[ia]; } - unitcell::update_pos_taud(ucell->lat,pos_in,ucell->ntype, - ucell->nat,ucell->atoms); + unitcell::update_pos_taud(ucell->lat, pos_in, ucell->ntype, ucell->nat, ucell->atoms); for (int iat = 0; iat < ucell->nat; ++iat) { int it, ia; @@ -202,7 +201,7 @@ TEST_F(UcellTest, UpdatePosTaud_pointer) delete[] pos_in; } -//test update_pos_taud with ModuleBase::Vector3 version +// test update_pos_taud with ModuleBase::Vector3 version TEST_F(UcellTest, UpdatePosTaud_Vector3) { ModuleBase::Vector3* pos_in = new ModuleBase::Vector3[ucell->nat]; @@ -214,13 +213,12 @@ TEST_F(UcellTest, UpdatePosTaud_Vector3) { pos_in[iat][ik] = 0.01; } - int it=0; - int ia=0; + int it = 0; + int ia = 0; ucell->iat2iait(iat, &ia, &it); tmp[iat] = ucell->atoms[it].taud[ia]; } - unitcell::update_pos_taud(ucell->lat,pos_in,ucell->ntype, - ucell->nat,ucell->atoms); + unitcell::update_pos_taud(ucell->lat, pos_in, ucell->ntype, ucell->nat, ucell->atoms); for (int iat = 0; iat < ucell->nat; ++iat) { int it, ia; diff --git a/source/module_cell/test/unitcell_test_readpp.cpp b/source/module_cell/test/unitcell_test_readpp.cpp index 980da0b6a9..0d95b8260f 100644 --- a/source/module_cell/test/unitcell_test_readpp.cpp +++ b/source/module_cell/test/unitcell_test_readpp.cpp @@ -4,29 +4,38 @@ #include "module_parameter/parameter.h" #undef private #include "memory" -#include "module_base/global_variable.h" -#include "module_base/mathzone.h" #include "module_cell/check_atomic_stru.h" #include "module_cell/unitcell.h" #include "module_elecstate/read_pseudo.h" +#include "source_base/global_variable.h" +#include "source_base/mathzone.h" +#include "string.h" + #include #include -#include "string.h" #ifdef __MPI #include "mpi.h" #endif #include "prepare_unitcell.h" #ifdef __LCAO -InfoNonlocal::InfoNonlocal() {} -InfoNonlocal::~InfoNonlocal() {} +InfoNonlocal::InfoNonlocal() +{ +} +InfoNonlocal::~InfoNonlocal() +{ +} #endif -Magnetism::Magnetism() { +Magnetism::Magnetism() +{ this->tot_mag = 0.0; this->abs_mag = 0.0; this->start_mag = nullptr; } -Magnetism::~Magnetism() { delete[] this->start_mag; } +Magnetism::~Magnetism() +{ + delete[] this->start_mag; +} #define private public #include "module_parameter/parameter.h" #undef private @@ -97,19 +106,22 @@ Magnetism::~Magnetism() { delete[] this->start_mag; } // mock function #ifdef __LCAO -void LCAO_Orbitals::bcast_files(const int& ntype_in, const int& my_rank) { +void LCAO_Orbitals::bcast_files(const int& ntype_in, const int& my_rank) +{ return; } #endif -class UcellTest : public ::testing::Test { +class UcellTest : public ::testing::Test +{ protected: UcellTestPrepare utp = UcellTestLib["C1H2-Read"]; std::unique_ptr ucell; std::ofstream ofs; std::string pp_dir; std::string output; - void SetUp() { + void SetUp() + { ofs.open("running.log"); PARAM.input.relax_new = utp.relax_new; PARAM.sys.global_out_dir = "./"; @@ -123,52 +135,50 @@ class UcellTest : public ::testing::Test { PARAM.input.nspin = 1; PARAM.input.basis_type = "pw"; PARAM.input.nelec = 10.0; - PARAM.input.nupdown = 0.0; + PARAM.input.nupdown = 0.0; PARAM.sys.two_fermi = false; PARAM.input.nbands = 6; PARAM.sys.nlocal = 6; PARAM.input.lspinorb = false; } - void TearDown() { ofs.close(); } + void TearDown() + { + ofs.close(); + } }; using UcellDeathTest = UcellTest; -TEST_F(UcellDeathTest, ReadCellPPWarning1) { +TEST_F(UcellDeathTest, ReadCellPPWarning1) +{ PARAM.input.lspinorb = true; ucell->pseudo_fn[1] = "H_sr.upf"; testing::internal::CaptureStdout(); - EXPECT_EXIT(elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell), - ::testing::ExitedWithCode(1), - ""); + EXPECT_EXIT(elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output, - testing::HasSubstr("error when average the pseudopotential.")); + EXPECT_THAT(output, testing::HasSubstr("error when average the pseudopotential.")); } -TEST_F(UcellDeathTest, ReadCellPPWarning2) { +TEST_F(UcellDeathTest, ReadCellPPWarning2) +{ pp_dir = "./arbitrary/"; testing::internal::CaptureStdout(); - EXPECT_EXIT(elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell), - ::testing::ExitedWithCode(1), - ""); + EXPECT_EXIT(elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output, - testing::HasSubstr("Couldn't find pseudopotential file")); + EXPECT_THAT(output, testing::HasSubstr("Couldn't find pseudopotential file")); } -TEST_F(UcellDeathTest, ReadCellPPWarning3) { +TEST_F(UcellDeathTest, ReadCellPPWarning3) +{ ucell->pseudo_type[0] = "upf"; testing::internal::CaptureStdout(); - EXPECT_EXIT(elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell), - ::testing::ExitedWithCode(1), - ""); + EXPECT_EXIT(elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output, - testing::HasSubstr("Pseudopotential data do not match.")); + EXPECT_THAT(output, testing::HasSubstr("Pseudopotential data do not match.")); } -TEST_F(UcellDeathTest, ReadCellPPWarning4) { +TEST_F(UcellDeathTest, ReadCellPPWarning4) +{ PARAM.input.dft_functional = "LDA"; testing::internal::CaptureStdout(); EXPECT_NO_THROW(elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell)); @@ -177,17 +187,17 @@ TEST_F(UcellDeathTest, ReadCellPPWarning4) { EXPECT_THAT(output, testing::HasSubstr("DFT FUNC. (SET TO) : LDA")); } -TEST_F(UcellDeathTest, ReadCellPPWarning5) { +TEST_F(UcellDeathTest, ReadCellPPWarning5) +{ ucell->pseudo_type[0] = "upf0000"; testing::internal::CaptureStdout(); - EXPECT_EXIT(elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell), - ::testing::ExitedWithCode(1), - ""); + EXPECT_EXIT(elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("Unknown pseudopotential type.")); } -TEST_F(UcellTest, ReadCellPP) { +TEST_F(UcellTest, ReadCellPP) +{ ucell->atoms[1].flag_empty_element = true; elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell); EXPECT_EQ(ucell->atoms[0].ncpp.pp_type, "NC"); @@ -198,32 +208,30 @@ TEST_F(UcellTest, ReadCellPP) { ofs.close(); std::ifstream ifs; ifs.open("running.log"); - std::string str((std::istreambuf_iterator(ifs)), - std::istreambuf_iterator()); - EXPECT_THAT(str, - testing::HasSubstr("Read in pseudopotential file is C.upf")); + std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); + EXPECT_THAT(str, testing::HasSubstr("Read in pseudopotential file is C.upf")); EXPECT_THAT(str, testing::HasSubstr("pseudopotential type = NC")); - EXPECT_THAT(str, - testing::HasSubstr("exchange-correlation functional = PBE")); + EXPECT_THAT(str, testing::HasSubstr("exchange-correlation functional = PBE")); EXPECT_THAT(str, testing::HasSubstr("valence electrons = 4")); - EXPECT_THAT(str, - testing::HasSubstr("Read in pseudopotential file is H.upf")); + EXPECT_THAT(str, testing::HasSubstr("Read in pseudopotential file is H.upf")); EXPECT_THAT(str, testing::HasSubstr("valence electrons = 0")); } -TEST_F(UcellTest, CalMeshx) { +TEST_F(UcellTest, CalMeshx) +{ elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell); - elecstate::cal_meshx(ucell->meshx,ucell->atoms,ucell->ntype); + elecstate::cal_meshx(ucell->meshx, ucell->atoms, ucell->ntype); EXPECT_EQ(ucell->atoms[0].ncpp.msh, 1247); EXPECT_EQ(ucell->atoms[1].ncpp.msh, 1165); EXPECT_EQ(ucell->meshx, 1247); } -TEST_F(UcellTest, CalNatomwfc1) { +TEST_F(UcellTest, CalNatomwfc1) +{ elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell); EXPECT_FALSE(ucell->atoms[0].ncpp.has_so); EXPECT_FALSE(ucell->atoms[1].ncpp.has_so); - elecstate::cal_natomwfc(ofs,ucell->natomwfc,ucell->ntype,ucell->atoms); + elecstate::cal_natomwfc(ofs, ucell->natomwfc, ucell->ntype, ucell->atoms); EXPECT_EQ(ucell->atoms[0].ncpp.nchi, 2); EXPECT_EQ(ucell->atoms[1].ncpp.nchi, 1); EXPECT_EQ(ucell->atoms[0].na, 1); @@ -231,13 +239,14 @@ TEST_F(UcellTest, CalNatomwfc1) { EXPECT_EQ(ucell->natomwfc, (1 + 3) * 1 + 1 * 2); } -TEST_F(UcellTest, CalNatomwfc2) { +TEST_F(UcellTest, CalNatomwfc2) +{ PARAM.input.lspinorb = false; PARAM.input.nspin = 4; elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell); EXPECT_FALSE(ucell->atoms[0].ncpp.has_so); EXPECT_FALSE(ucell->atoms[1].ncpp.has_so); - elecstate::cal_natomwfc(ofs,ucell->natomwfc,ucell->ntype,ucell->atoms); + elecstate::cal_natomwfc(ofs, ucell->natomwfc, ucell->ntype, ucell->atoms); EXPECT_EQ(ucell->atoms[0].ncpp.nchi, 2); EXPECT_EQ(ucell->atoms[1].ncpp.nchi, 1); EXPECT_EQ(ucell->atoms[0].na, 1); @@ -245,27 +254,28 @@ TEST_F(UcellTest, CalNatomwfc2) { EXPECT_EQ(ucell->natomwfc, ((1 + 3) * 1 + 1 * 2) * 2); } -TEST_F(UcellTest, CalNatomwfc3) { +TEST_F(UcellTest, CalNatomwfc3) +{ PARAM.input.lspinorb = true; PARAM.input.nspin = 4; elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell); EXPECT_TRUE(ucell->atoms[0].ncpp.has_so); EXPECT_TRUE(ucell->atoms[1].ncpp.has_so); - elecstate::cal_natomwfc(ofs,ucell->natomwfc,ucell->ntype,ucell->atoms); + elecstate::cal_natomwfc(ofs, ucell->natomwfc, ucell->ntype, ucell->atoms); EXPECT_EQ(ucell->atoms[0].ncpp.nchi, 3); EXPECT_EQ(ucell->atoms[1].ncpp.nchi, 1); EXPECT_EQ(ucell->atoms[0].na, 1); EXPECT_EQ(ucell->atoms[1].na, 2); - EXPECT_EQ(ucell->natomwfc, - ((2 * 0 + 2) + (2 * 1 + 2) + (2 * 1)) * 1 + (2 * 0 + 2) * 2); + EXPECT_EQ(ucell->natomwfc, ((2 * 0 + 2) + (2 * 1 + 2) + (2 * 1)) * 1 + (2 * 0 + 2) * 2); } -TEST_F(UcellTest, CalNwfc1) { +TEST_F(UcellTest, CalNwfc1) +{ elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell); EXPECT_FALSE(ucell->atoms[0].ncpp.has_so); EXPECT_FALSE(ucell->atoms[1].ncpp.has_so); PARAM.sys.nlocal = 3 * 9; - elecstate::cal_nwfc(ofs,*ucell,ucell->atoms); + elecstate::cal_nwfc(ofs, *ucell, ucell->atoms); EXPECT_EQ(ucell->atoms[0].iw2l[8], 2); EXPECT_EQ(ucell->atoms[0].iw2n[8], 0); EXPECT_EQ(ucell->atoms[0].iw2m[8], 4); @@ -324,41 +334,42 @@ TEST_F(UcellTest, CalNwfc1) { EXPECT_EQ(ucell->iwt2iw[20], 2); } -TEST_F(UcellTest, CalNwfc2) { +TEST_F(UcellTest, CalNwfc2) +{ PARAM.input.nspin = 4; PARAM.input.basis_type = "lcao"; elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell); EXPECT_FALSE(ucell->atoms[0].ncpp.has_so); EXPECT_FALSE(ucell->atoms[1].ncpp.has_so); PARAM.sys.nlocal = 3 * 9 * 2; - EXPECT_NO_THROW(elecstate::cal_nwfc(ofs,*ucell,ucell->atoms)); + EXPECT_NO_THROW(elecstate::cal_nwfc(ofs, *ucell, ucell->atoms)); } -TEST_F(UcellDeathTest, CheckStructure) { +TEST_F(UcellDeathTest, CheckStructure) +{ elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell); EXPECT_FALSE(ucell->atoms[0].ncpp.has_so); EXPECT_FALSE(ucell->atoms[1].ncpp.has_so); // trial 1 - + testing::internal::CaptureStdout(); double factor = 0.2; ucell->set_iat2itia(); EXPECT_NO_THROW(unitcell::check_atomic_stru(*ucell, factor)); output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output,testing::HasSubstr("WARNING: Some atoms are too close!!!")); + EXPECT_THAT(output, testing::HasSubstr("WARNING: Some atoms are too close!!!")); // trial 2 GlobalV::ofs_running.open("CheckStructure2.txt"); ::testing::FLAGS_gtest_death_test_style = "threadsafe"; factor = 0.4; - EXPECT_EXIT(unitcell::check_atomic_stru(*ucell, factor), - ::testing::ExitedWithCode(1), - ""); + EXPECT_EXIT(unitcell::check_atomic_stru(*ucell, factor), ::testing::ExitedWithCode(1), ""); std::ifstream ifs("CheckStructure2.txt"); - if (ifs.is_open()) + if (ifs.is_open()) { std::string line; - while (std::getline(ifs, line)) { - output+=line; + while (std::getline(ifs, line)) + { + output += line; } } EXPECT_THAT(output, testing::HasSubstr("The structure is unreasonable!")); @@ -369,42 +380,44 @@ TEST_F(UcellDeathTest, CheckStructure) { factor = 0.2; EXPECT_NO_THROW(unitcell::check_atomic_stru(*ucell, factor)); output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output,testing::HasSubstr("Notice: symbol 'arbitrary' is not an element " - "symbol!!!! set the covalent radius to be 0.")); + EXPECT_THAT(output, + testing::HasSubstr("Notice: symbol 'arbitrary' is not an element " + "symbol!!!! set the covalent radius to be 0.")); // trial 4 ucell->atoms[0].label = "Fe1"; testing::internal::CaptureStdout(); factor = 0.2; EXPECT_NO_THROW(unitcell::check_atomic_stru(*ucell, factor)); output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output,testing::HasSubstr("WARNING: Some atoms are too close!!!")); + EXPECT_THAT(output, testing::HasSubstr("WARNING: Some atoms are too close!!!")); } -TEST_F(UcellDeathTest, ReadPseudoWarning1) { +TEST_F(UcellDeathTest, ReadPseudoWarning1) +{ PARAM.input.pseudo_dir = pp_dir; PARAM.input.out_element_info = true; ucell->pseudo_fn[1] = "H_sr_lda.upf"; testing::internal::CaptureStdout(); EXPECT_EXIT(elecstate::read_pseudo(ofs, *ucell), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output, - testing::HasSubstr("All DFT functional must consistent.")); + EXPECT_THAT(output, testing::HasSubstr("All DFT functional must consistent.")); } -TEST_F(UcellDeathTest, ReadPseudoWarning2) { +TEST_F(UcellDeathTest, ReadPseudoWarning2) +{ PARAM.input.pseudo_dir = pp_dir; PARAM.input.out_element_info = true; ucell->pseudo_fn[0] = "Al_ONCV_PBE-1.0.upf"; testing::internal::CaptureStdout(); EXPECT_NO_THROW(elecstate::read_pseudo(ofs, *ucell)); output = testing::internal::GetCapturedStdout(); - EXPECT_THAT( - output, - testing::HasSubstr("Warning: the number of valence electrons in " - "pseudopotential > 3 for Al: [Ne] 3s2 3p1")); + EXPECT_THAT(output, + testing::HasSubstr("Warning: the number of valence electrons in " + "pseudopotential > 3 for Al: [Ne] 3s2 3p1")); } -TEST_F(UcellTest, CalNelec) { +TEST_F(UcellTest, CalNelec) +{ elecstate::read_cell_pseudopots(pp_dir, ofs, *ucell); EXPECT_EQ(4, ucell->atoms[0].ncpp.zv); EXPECT_EQ(1, ucell->atoms[1].ncpp.zv); @@ -459,7 +472,9 @@ TEST_F(UcellTest, CalNbandsLCAOINPW) PARAM.sys.nlocal = PARAM.input.nbands - 1; std::vector nelec_spin(2, 5.0); testing::internal::CaptureStdout(); - EXPECT_EXIT(elecstate::cal_nbands(PARAM.input.nelec, PARAM.sys.nlocal, nelec_spin, PARAM.input.nbands), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(elecstate::cal_nbands(PARAM.input.nelec, PARAM.sys.nlocal, nelec_spin, PARAM.input.nbands), + ::testing::ExitedWithCode(1), + ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("NLOCAL < NBANDS")); } @@ -469,7 +484,9 @@ TEST_F(UcellTest, CalNbandsWarning1) PARAM.input.nbands = PARAM.input.nelec / 2 - 1; std::vector nelec_spin(2, 5.0); testing::internal::CaptureStdout(); - EXPECT_EXIT(elecstate::cal_nbands(PARAM.input.nelec, PARAM.sys.nlocal, nelec_spin, PARAM.input.nbands), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(elecstate::cal_nbands(PARAM.input.nelec, PARAM.sys.nlocal, nelec_spin, PARAM.input.nbands), + ::testing::ExitedWithCode(1), + ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("Too few bands!")); } @@ -477,12 +494,14 @@ TEST_F(UcellTest, CalNbandsWarning1) TEST_F(UcellTest, CalNbandsWarning2) { PARAM.input.nspin = 2; - PARAM.input.nupdown = 4.0; + PARAM.input.nupdown = 4.0; std::vector nelec_spin(2); - nelec_spin[0] = (PARAM.input.nelec + PARAM.input.nupdown ) / 2.0; - nelec_spin[1] = (PARAM.input.nelec - PARAM.input.nupdown ) / 2.0; + nelec_spin[0] = (PARAM.input.nelec + PARAM.input.nupdown) / 2.0; + nelec_spin[1] = (PARAM.input.nelec - PARAM.input.nupdown) / 2.0; testing::internal::CaptureStdout(); - EXPECT_EXIT(elecstate::cal_nbands(PARAM.input.nelec, PARAM.sys.nlocal, nelec_spin, PARAM.input.nbands), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(elecstate::cal_nbands(PARAM.input.nelec, PARAM.sys.nlocal, nelec_spin, PARAM.input.nbands), + ::testing::ExitedWithCode(1), + ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("Too few spin up bands!")); } @@ -490,12 +509,14 @@ TEST_F(UcellTest, CalNbandsWarning2) TEST_F(UcellTest, CalNbandsWarning3) { PARAM.input.nspin = 2; - PARAM.input.nupdown = -4.0; + PARAM.input.nupdown = -4.0; std::vector nelec_spin(2); - nelec_spin[0] = (PARAM.input.nelec + PARAM.input.nupdown ) / 2.0; - nelec_spin[1] = (PARAM.input.nelec - PARAM.input.nupdown ) / 2.0; + nelec_spin[0] = (PARAM.input.nelec + PARAM.input.nupdown) / 2.0; + nelec_spin[1] = (PARAM.input.nelec - PARAM.input.nupdown) / 2.0; testing::internal::CaptureStdout(); - EXPECT_EXIT(elecstate::cal_nbands(PARAM.input.nelec, PARAM.sys.nlocal, nelec_spin, PARAM.input.nbands), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(elecstate::cal_nbands(PARAM.input.nelec, PARAM.sys.nlocal, nelec_spin, PARAM.input.nbands), + ::testing::ExitedWithCode(1), + ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("Too few spin down bands!")); } @@ -563,14 +584,17 @@ TEST_F(UcellTest, CalNbandsGaussWarning) std::vector nelec_spin(2, 5.0); PARAM.input.smearing_method = "gaussian"; testing::internal::CaptureStdout(); - EXPECT_EXIT(elecstate::cal_nbands(PARAM.input.nelec, PARAM.sys.nlocal, nelec_spin, PARAM.input.nbands), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(elecstate::cal_nbands(PARAM.input.nelec, PARAM.sys.nlocal, nelec_spin, PARAM.input.nbands), + ::testing::ExitedWithCode(1), + ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("for smearing, num. of bands > num. of occupied bands")); } #ifdef __MPI #include "mpi.h" -int main(int argc, char** argv) { +int main(int argc, char** argv) +{ MPI_Init(&argc, &argv); testing::InitGoogleTest(&argc, argv); diff --git a/source/module_cell/test/unitcell_test_setupcell.cpp b/source/module_cell/test/unitcell_test_setupcell.cpp index 383a9d0312..5bc72644c0 100644 --- a/source/module_cell/test/unitcell_test_setupcell.cpp +++ b/source/module_cell/test/unitcell_test_setupcell.cpp @@ -1,33 +1,42 @@ -#include "gtest/gtest.h" #include "gmock/gmock.h" +#include "gtest/gtest.h" #define private public #include "module_parameter/parameter.h" #undef private #include "memory" -#include "module_base/mathzone.h" -#include "module_base/global_variable.h" #include "module_cell/unitcell.h" -#include -#include -#include -#include "prepare_unitcell.h" #include "module_cell/update_cell.h" +#include "prepare_unitcell.h" +#include "source_base/global_variable.h" +#include "source_base/mathzone.h" + +#include +#include +#include #ifdef __LCAO #include "module_basis/module_ao/ORB_read.h" -InfoNonlocal::InfoNonlocal(){} -InfoNonlocal::~InfoNonlocal(){} -LCAO_Orbitals::LCAO_Orbitals(){} -LCAO_Orbitals::~LCAO_Orbitals(){} +InfoNonlocal::InfoNonlocal() +{ +} +InfoNonlocal::~InfoNonlocal() +{ +} +LCAO_Orbitals::LCAO_Orbitals() +{ +} +LCAO_Orbitals::~LCAO_Orbitals() +{ +} #endif Magnetism::Magnetism() { - this->tot_mag = 0.0; - this->abs_mag = 0.0; - this->start_mag = nullptr; + this->tot_mag = 0.0; + this->abs_mag = 0.0; + this->start_mag = nullptr; } Magnetism::~Magnetism() { - delete[] this->start_mag; + delete[] this->start_mag; } /************************************************ @@ -50,24 +59,22 @@ Magnetism::~Magnetism() * - setup_cell_after_vc */ -//mock function +// mock function #ifdef __LCAO -void LCAO_Orbitals::bcast_files( - const int &ntype_in, - const int &my_rank) +void LCAO_Orbitals::bcast_files(const int& ntype_in, const int& my_rank) { - return; + return; } class UcellTest : public ::testing::Test { -protected: - std::unique_ptr ucell{new UnitCell}; - std::string output; - void SetUp() + protected: + std::unique_ptr ucell{new UnitCell}; + std::string output; + void SetUp() { - ucell->lmaxmax = 2; - ucell->ntype = 2; + ucell->lmaxmax = 2; + ucell->ntype = 2; ucell->atom_mass.resize(ucell->ntype); ucell->atom_label.resize(ucell->ntype); ucell->pseudo_fn.resize(ucell->ntype); @@ -78,138 +85,138 @@ class UcellTest : public ::testing::Test using UcellDeathTest = UcellTest; -TEST_F(UcellTest,SetupCellS1) +TEST_F(UcellTest, SetupCellS1) { - std::string fn = "./support/STRU_MgO"; - std::ofstream ofs_running; - ofs_running.open("setup_cell.tmp"); - PARAM.input.nspin = 1; - - ucell->setup_cell(fn,ofs_running); - ofs_running.close(); - remove("setup_cell.tmp"); + std::string fn = "./support/STRU_MgO"; + std::ofstream ofs_running; + ofs_running.open("setup_cell.tmp"); + PARAM.input.nspin = 1; + + ucell->setup_cell(fn, ofs_running); + ofs_running.close(); + remove("setup_cell.tmp"); } -TEST_F(UcellTest,SetupCellS2) +TEST_F(UcellTest, SetupCellS2) { - std::string fn = "./support/STRU_MgO"; - std::ofstream ofs_running; - ofs_running.open("setup_cell.tmp"); - PARAM.input.nspin = 2; - - ucell->setup_cell(fn,ofs_running); - ofs_running.close(); - remove("setup_cell.tmp"); + std::string fn = "./support/STRU_MgO"; + std::ofstream ofs_running; + ofs_running.open("setup_cell.tmp"); + PARAM.input.nspin = 2; + + ucell->setup_cell(fn, ofs_running); + ofs_running.close(); + remove("setup_cell.tmp"); } -TEST_F(UcellTest,SetupCellS4) +TEST_F(UcellTest, SetupCellS4) { - std::string fn = "./support/STRU_MgO"; - std::ofstream ofs_running; - ofs_running.open("setup_cell.tmp"); - PARAM.input.nspin = 4; - - ucell->setup_cell(fn,ofs_running); - ofs_running.close(); - remove("setup_cell.tmp"); + std::string fn = "./support/STRU_MgO"; + std::ofstream ofs_running; + ofs_running.open("setup_cell.tmp"); + PARAM.input.nspin = 4; + + ucell->setup_cell(fn, ofs_running); + ofs_running.close(); + remove("setup_cell.tmp"); } -TEST_F(UcellDeathTest,SetupCellWarning1) +TEST_F(UcellDeathTest, SetupCellWarning1) { - std::string fn = "./STRU_MgO"; - std::ofstream ofs_running; - ofs_running.open("setup_cell.tmp"); - - testing::internal::CaptureStdout(); - EXPECT_EXIT(ucell->setup_cell(fn,ofs_running),::testing::ExitedWithCode(1),""); - output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output,testing::HasSubstr("Can not find the file containing atom positions.!")); - ofs_running.close(); - remove("setup_cell.tmp"); + std::string fn = "./STRU_MgO"; + std::ofstream ofs_running; + ofs_running.open("setup_cell.tmp"); + + testing::internal::CaptureStdout(); + EXPECT_EXIT(ucell->setup_cell(fn, ofs_running), ::testing::ExitedWithCode(1), ""); + output = testing::internal::GetCapturedStdout(); + EXPECT_THAT(output, testing::HasSubstr("Can not find the file containing atom positions.!")); + ofs_running.close(); + remove("setup_cell.tmp"); } -TEST_F(UcellDeathTest,SetupCellWarning2) +TEST_F(UcellDeathTest, SetupCellWarning2) { - std::string fn = "./support/STRU_MgO_WarningC2"; - std::ofstream ofs_running; - ofs_running.open("setup_cell.tmp"); - - testing::internal::CaptureStdout(); - EXPECT_EXIT(ucell->setup_cell(fn,ofs_running),::testing::ExitedWithCode(1),""); - output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output,testing::HasSubstr("Something wrong during read_atom_positions")); - ofs_running.close(); - remove("setup_cell.tmp"); + std::string fn = "./support/STRU_MgO_WarningC2"; + std::ofstream ofs_running; + ofs_running.open("setup_cell.tmp"); + + testing::internal::CaptureStdout(); + EXPECT_EXIT(ucell->setup_cell(fn, ofs_running), ::testing::ExitedWithCode(1), ""); + output = testing::internal::GetCapturedStdout(); + EXPECT_THAT(output, testing::HasSubstr("Something wrong during read_atom_positions")); + ofs_running.close(); + remove("setup_cell.tmp"); } -TEST_F(UcellTest,SetupCellAfterVC) +TEST_F(UcellTest, SetupCellAfterVC) { - std::string fn = "./support/STRU_MgO"; - std::ofstream ofs_running; - ofs_running.open("setup_cell.tmp"); - PARAM.input.nspin = 1; - - delete[] ucell->magnet.start_mag; - ucell->magnet.start_mag = new double[ucell->ntype]; - - - ucell->setup_cell(fn,ofs_running); - ucell->lat0 = 1.0; - ucell->latvec.Zero(); - ucell->latvec.e11 = 10.0; - ucell->latvec.e22 = 10.0; - ucell->latvec.e33 = 10.0; - for (int i =0;intype;i++) - { - ucell->atoms[i].na = 1; - ucell->atoms[i].taud.resize(ucell->atoms[i].na); - ucell->atoms[i].tau.resize(ucell->atoms[i].na); - ucell->atoms[i].taud[0].x = 0.1; - ucell->atoms[i].taud[0].y = 0.1; - ucell->atoms[i].taud[0].z = 0.1; - } - - unitcell::setup_cell_after_vc(*ucell,ofs_running); - EXPECT_EQ(ucell->lat0_angstrom,0.529177); - EXPECT_EQ(ucell->tpiba,ModuleBase::TWO_PI); - EXPECT_EQ(ucell->tpiba2,ModuleBase::TWO_PI*ModuleBase::TWO_PI); - EXPECT_EQ(ucell->a1.x ,10.0); - EXPECT_EQ(ucell->a2.y ,10.0); - EXPECT_EQ(ucell->a3.z ,10.0); - EXPECT_EQ(ucell->omega,1000.0); - EXPECT_EQ(ucell->GT.e11,0.1); - EXPECT_EQ(ucell->GT.e22,0.1); - EXPECT_EQ(ucell->GT.e33,0.1); - EXPECT_EQ(ucell->G.e11,0.1); - EXPECT_EQ(ucell->G.e22,0.1); - EXPECT_EQ(ucell->G.e33,0.1); - - for (int it = 0; it < ucell->ntype; it++) { + std::string fn = "./support/STRU_MgO"; + std::ofstream ofs_running; + ofs_running.open("setup_cell.tmp"); + PARAM.input.nspin = 1; + + delete[] ucell->magnet.start_mag; + ucell->magnet.start_mag = new double[ucell->ntype]; + + ucell->setup_cell(fn, ofs_running); + ucell->lat0 = 1.0; + ucell->latvec.Zero(); + ucell->latvec.e11 = 10.0; + ucell->latvec.e22 = 10.0; + ucell->latvec.e33 = 10.0; + for (int i = 0; i < ucell->ntype; i++) + { + ucell->atoms[i].na = 1; + ucell->atoms[i].taud.resize(ucell->atoms[i].na); + ucell->atoms[i].tau.resize(ucell->atoms[i].na); + ucell->atoms[i].taud[0].x = 0.1; + ucell->atoms[i].taud[0].y = 0.1; + ucell->atoms[i].taud[0].z = 0.1; + } + + unitcell::setup_cell_after_vc(*ucell, ofs_running); + EXPECT_EQ(ucell->lat0_angstrom, 0.529177); + EXPECT_EQ(ucell->tpiba, ModuleBase::TWO_PI); + EXPECT_EQ(ucell->tpiba2, ModuleBase::TWO_PI * ModuleBase::TWO_PI); + EXPECT_EQ(ucell->a1.x, 10.0); + EXPECT_EQ(ucell->a2.y, 10.0); + EXPECT_EQ(ucell->a3.z, 10.0); + EXPECT_EQ(ucell->omega, 1000.0); + EXPECT_EQ(ucell->GT.e11, 0.1); + EXPECT_EQ(ucell->GT.e22, 0.1); + EXPECT_EQ(ucell->GT.e33, 0.1); + EXPECT_EQ(ucell->G.e11, 0.1); + EXPECT_EQ(ucell->G.e22, 0.1); + EXPECT_EQ(ucell->G.e33, 0.1); + + for (int it = 0; it < ucell->ntype; it++) + { Atom* atom = &ucell->atoms[it]; - for (int ia = 0; ia < atom->na; ia++) { - EXPECT_EQ(atom->tau[ia].x,1); - EXPECT_EQ(atom->tau[ia].y,1); - EXPECT_EQ(atom->tau[ia].z,1); + for (int ia = 0; ia < atom->na; ia++) + { + EXPECT_EQ(atom->tau[ia].x, 1); + EXPECT_EQ(atom->tau[ia].y, 1); + EXPECT_EQ(atom->tau[ia].z, 1); } } - ofs_running.close(); - remove("setup_cell.tmp"); + ofs_running.close(); + remove("setup_cell.tmp"); } - #ifdef __MPI #include "mpi.h" -int main(int argc, char **argv) +int main(int argc, char** argv) { - MPI_Init(&argc, &argv); - testing::InitGoogleTest(&argc, argv); + MPI_Init(&argc, &argv); + testing::InitGoogleTest(&argc, argv); - MPI_Comm_size(MPI_COMM_WORLD,&GlobalV::NPROC); - MPI_Comm_rank(MPI_COMM_WORLD,&GlobalV::MY_RANK); + MPI_Comm_size(MPI_COMM_WORLD, &GlobalV::NPROC); + MPI_Comm_rank(MPI_COMM_WORLD, &GlobalV::MY_RANK); - int result = RUN_ALL_TESTS(); - MPI_Finalize(); - return result; + int result = RUN_ALL_TESTS(); + MPI_Finalize(); + return result; } #endif #endif diff --git a/source/module_cell/test_pw/unitcell_test_pw.cpp b/source/module_cell/test_pw/unitcell_test_pw.cpp index d0d1307e9c..2309050bb9 100644 --- a/source/module_cell/test_pw/unitcell_test_pw.cpp +++ b/source/module_cell/test_pw/unitcell_test_pw.cpp @@ -1,25 +1,26 @@ -#include "gtest/gtest.h" #include "gmock/gmock.h" +#include "gtest/gtest.h" #define private public #include "module_parameter/parameter.h" #undef private #include "memory" -#include "module_base/mathzone.h" -#include "module_base/global_variable.h" -#include "module_cell/unitcell.h" #include "module_cell/read_stru.h" -#include -#include +#include "module_cell/unitcell.h" +#include "source_base/global_variable.h" +#include "source_base/mathzone.h" + +#include +#include Magnetism::Magnetism() { - this->tot_mag = 0.0; - this->abs_mag = 0.0; - this->start_mag = nullptr; + this->tot_mag = 0.0; + this->abs_mag = 0.0; + this->start_mag = nullptr; } Magnetism::~Magnetism() { - delete[] this->start_mag; + delete[] this->start_mag; } /************************************************ @@ -38,13 +39,13 @@ Magnetism::~Magnetism() class UcellTest : public ::testing::Test { -protected: - std::unique_ptr ucell{new UnitCell}; - std::string output; - void SetUp() + protected: + std::unique_ptr ucell{new UnitCell}; + std::string output; + void SetUp() { - ucell->lmaxmax = 2; - ucell->ntype = 2; + ucell->lmaxmax = 2; + ucell->ntype = 2; ucell->atom_mass.resize(ucell->ntype); ucell->atom_label.resize(ucell->ntype); ucell->pseudo_fn.resize(ucell->ntype); @@ -53,92 +54,92 @@ class UcellTest : public ::testing::Test } }; -TEST_F(UcellTest,ReadAtomSpecies) +TEST_F(UcellTest, ReadAtomSpecies) { #ifdef __MPI -if(GlobalV::MY_RANK==0) -{ + if (GlobalV::MY_RANK == 0) + { #endif - std::string fn = "./support/STRU_MgO"; - std::ifstream ifa(fn.c_str()); - std::ofstream ofs_running; - ofs_running.open("read_atom_species.tmp"); - ucell->atoms = new Atom[ucell->ntype]; - ucell->set_atom_flag = true; - PARAM.input.test_pseudo_cell = 2; - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); - EXPECT_DOUBLE_EQ(ucell->latvec.e11,4.27957); - EXPECT_DOUBLE_EQ(ucell->latvec.e22,4.27957); - EXPECT_DOUBLE_EQ(ucell->latvec.e33,4.27957); - ofs_running.close(); - ifa.close(); - remove("read_atom_species.tmp"); + std::string fn = "./support/STRU_MgO"; + std::ifstream ifa(fn.c_str()); + std::ofstream ofs_running; + ofs_running.open("read_atom_species.tmp"); + ucell->atoms = new Atom[ucell->ntype]; + ucell->set_atom_flag = true; + PARAM.input.test_pseudo_cell = 2; + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); + EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); + EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); + EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); + ofs_running.close(); + ifa.close(); + remove("read_atom_species.tmp"); #ifdef __MPI -} + } #endif } -TEST_F(UcellTest,ReadAtomPositions) +TEST_F(UcellTest, ReadAtomPositions) { #ifdef __MPI -if(GlobalV::MY_RANK==0) -{ + if (GlobalV::MY_RANK == 0) + { #endif - std::string fn = "./support/STRU_MgO"; - std::ifstream ifa(fn.c_str()); - std::ofstream ofs_running; - std::ofstream ofs_warning; - ofs_running.open("read_atom_species.tmp"); - ofs_warning.open("read_atom_species.warn"); - ucell->atoms = new Atom[ucell->ntype]; - ucell->set_atom_flag = true; - PARAM.input.test_pseudo_cell = 2; - PARAM.input.basis_type = "pw"; - //call read_atom_species - EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running,*ucell)); - EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running,ucell->lat)); - EXPECT_DOUBLE_EQ(ucell->latvec.e11,4.27957); - EXPECT_DOUBLE_EQ(ucell->latvec.e22,4.27957); - EXPECT_DOUBLE_EQ(ucell->latvec.e33,4.27957); - //mandatory preliminaries - delete[] ucell->magnet.start_mag; - ucell->magnet.start_mag = new double[ucell->ntype]; - //call read_atom_positions - EXPECT_NO_THROW(unitcell::read_atom_positions(*ucell,ifa, ofs_running, ofs_warning)); - ofs_running.close(); - ofs_warning.close(); - ifa.close(); - remove("read_atom_species.tmp"); - remove("read_atom_species.warn"); + std::string fn = "./support/STRU_MgO"; + std::ifstream ifa(fn.c_str()); + std::ofstream ofs_running; + std::ofstream ofs_warning; + ofs_running.open("read_atom_species.tmp"); + ofs_warning.open("read_atom_species.warn"); + ucell->atoms = new Atom[ucell->ntype]; + ucell->set_atom_flag = true; + PARAM.input.test_pseudo_cell = 2; + PARAM.input.basis_type = "pw"; + // call read_atom_species + EXPECT_NO_THROW(unitcell::read_atom_species(ifa, ofs_running, *ucell)); + EXPECT_NO_THROW(unitcell::read_lattice_constant(ifa, ofs_running, ucell->lat)); + EXPECT_DOUBLE_EQ(ucell->latvec.e11, 4.27957); + EXPECT_DOUBLE_EQ(ucell->latvec.e22, 4.27957); + EXPECT_DOUBLE_EQ(ucell->latvec.e33, 4.27957); + // mandatory preliminaries + delete[] ucell->magnet.start_mag; + ucell->magnet.start_mag = new double[ucell->ntype]; + // call read_atom_positions + EXPECT_NO_THROW(unitcell::read_atom_positions(*ucell, ifa, ofs_running, ofs_warning)); + ofs_running.close(); + ofs_warning.close(); + ifa.close(); + remove("read_atom_species.tmp"); + remove("read_atom_species.warn"); #ifdef __MPI -} + } #endif } -TEST_F(UcellTest,SetupCell) +TEST_F(UcellTest, SetupCell) { - std::string fn = "./support/STRU_MgO"; - std::ofstream ofs_running; - ofs_running.open("setup_cell.tmp"); - PARAM.input.nspin = 1; - ucell->setup_cell(fn,ofs_running); - ofs_running.close(); - remove("setup_cell.tmp"); + std::string fn = "./support/STRU_MgO"; + std::ofstream ofs_running; + ofs_running.open("setup_cell.tmp"); + PARAM.input.nspin = 1; + ucell->setup_cell(fn, ofs_running); + ofs_running.close(); + remove("setup_cell.tmp"); } #ifdef __MPI #include "mpi.h" -int main(int argc, char **argv) +int main(int argc, char** argv) { - MPI_Init(&argc, &argv); - testing::InitGoogleTest(&argc, argv); + MPI_Init(&argc, &argv); + testing::InitGoogleTest(&argc, argv); - MPI_Comm_size(MPI_COMM_WORLD,&GlobalV::NPROC); - MPI_Comm_rank(MPI_COMM_WORLD,&GlobalV::MY_RANK); + MPI_Comm_size(MPI_COMM_WORLD, &GlobalV::NPROC); + MPI_Comm_rank(MPI_COMM_WORLD, &GlobalV::MY_RANK); - int result = RUN_ALL_TESTS(); - MPI_Finalize(); - return result; + int result = RUN_ALL_TESTS(); + MPI_Finalize(); + return result; } #endif diff --git a/source/module_cell/unitcell.cpp b/source/module_cell/unitcell.cpp index 53c686a326..5198635d0a 100755 --- a/source/module_cell/unitcell.cpp +++ b/source/module_cell/unitcell.cpp @@ -1,18 +1,18 @@ -#include -#include // Peize Lin fix bug about strcmp 2016-08-02 - -#include "module_base/constants.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" #include "unitcell.h" + #include "bcast_cell.h" -#include "module_parameter/parameter.h" #include "module_cell/read_stru.h" -#include "module_base/atom_in.h" -#include "module_base/element_elec_config.h" -#include "module_base/global_file.h" -#include "module_base/parallel_common.h" #include "module_parameter/parameter.h" +#include "source_base/atom_in.h" +#include "source_base/constants.h" +#include "source_base/element_elec_config.h" +#include "source_base/global_file.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_common.h" + +#include +#include // Peize Lin fix bug about strcmp 2016-08-02 #ifdef __MPI #include "mpi.h" @@ -23,21 +23,21 @@ #endif #include "update_cell.h" -UnitCell::UnitCell() +UnitCell::UnitCell() { itia2iat.create(1, 1); } -UnitCell::~UnitCell() +UnitCell::~UnitCell() { - if (set_atom_flag) + if (set_atom_flag) { delete[] atoms; } } - -void UnitCell::print_cell(std::ofstream& ofs) const { +void UnitCell::print_cell(std::ofstream& ofs) const +{ ModuleBase::GlobalFunc::OUT(ofs, "print_unitcell()"); @@ -58,16 +58,18 @@ void UnitCell::print_cell(std::ofstream& ofs) const { return; } - -void UnitCell::set_iat2itia() { +void UnitCell::set_iat2itia() +{ assert(nat > 0); delete[] iat2it; delete[] iat2ia; this->iat2it = new int[nat]; this->iat2ia = new int[nat]; int iat = 0; - for (int it = 0; it < ntype; it++) { - for (int ia = 0; ia < atoms[it].na; ia++) { + for (int it = 0; it < ntype; it++) + { + for (int ia = 0; ia < atoms[it].na; ia++) + { this->iat2it[iat] = it; this->iat2ia[iat] = ia; ++iat; @@ -76,28 +78,36 @@ void UnitCell::set_iat2itia() { return; } -std::map UnitCell::get_atom_Counts() const { +std::map UnitCell::get_atom_Counts() const +{ std::map atomCounts; - for (int it = 0; it < this->ntype; it++) { + for (int it = 0; it < this->ntype; it++) + { atomCounts.insert(std::pair(it, this->atoms[it].na)); } return atomCounts; } -std::map UnitCell::get_orbital_Counts() const { +std::map UnitCell::get_orbital_Counts() const +{ std::map orbitalCounts; - for (int it = 0; it < this->ntype; it++) { + for (int it = 0; it < this->ntype; it++) + { orbitalCounts.insert(std::pair(it, this->atoms[it].nw)); } return orbitalCounts; } -std::map> UnitCell::get_lnchi_Counts() const { +std::map> UnitCell::get_lnchi_Counts() const +{ std::map> lnchiCounts; - for (int it = 0; it < this->ntype; it++) { - for (int L = 0; L < this->atoms[it].nwl + 1; L++) { + for (int it = 0; it < this->ntype; it++) + { + for (int L = 0; L < this->atoms[it].nwl + 1; L++) + { // Check if the key 'it' exists in the outer map - if (lnchiCounts.find(it) == lnchiCounts.end()) { + if (lnchiCounts.find(it) == lnchiCounts.end()) + { // If it doesn't exist, initialize an empty inner map lnchiCounts[it] = std::map(); } @@ -109,27 +119,34 @@ std::map> UnitCell::get_lnchi_Counts() const { return lnchiCounts; } -std::vector UnitCell::get_atomLabels() const { +std::vector UnitCell::get_atomLabels() const +{ std::vector atomLabels(this->ntype); - for (int it = 0; it < this->ntype; it++) { + for (int it = 0; it < this->ntype; it++) + { atomLabels[it] = this->atoms[it].label; } return atomLabels; } -std::vector UnitCell::get_atomCounts() const { +std::vector UnitCell::get_atomCounts() const +{ std::vector atomCounts(this->ntype); - for (int it = 0; it < this->ntype; it++) { + for (int it = 0; it < this->ntype; it++) + { atomCounts[it] = this->atoms[it].na; } return atomCounts; } -std::vector> UnitCell::get_lnchiCounts() const { +std::vector> UnitCell::get_lnchiCounts() const +{ std::vector> lnchiCounts(this->ntype); - for (int it = 0; it < this->ntype; it++) { + for (int it = 0; it < this->ntype; it++) + { lnchiCounts[it].resize(this->atoms[it].nwl + 1); - for (int L = 0; L < this->atoms[it].nwl + 1; L++) { + for (int L = 0; L < this->atoms[it].nwl + 1; L++) + { lnchiCounts[it][L] = this->atoms[it].l_nchi[L]; } } @@ -138,50 +155,50 @@ std::vector> UnitCell::get_lnchiCounts() const { std::vector> UnitCell::get_target_mag() const { - std::vector> target_mag(this->nat); - for (int it = 0; it < this->ntype; it++) - { - for (int ia = 0; ia < this->atoms[it].na; ia++) - { - int iat = itia2iat(it, ia); - target_mag[iat] = this->atoms[it].m_loc_[ia]; - } - } - return target_mag; + std::vector> target_mag(this->nat); + for (int it = 0; it < this->ntype; it++) + { + for (int ia = 0; ia < this->atoms[it].na; ia++) + { + int iat = itia2iat(it, ia); + target_mag[iat] = this->atoms[it].m_loc_[ia]; + } + } + return target_mag; } std::vector> UnitCell::get_lambda() const { - std::vector> lambda(this->nat); - for (int it = 0; it < this->ntype; it++) - { - for (int ia = 0; ia < this->atoms[it].na; ia++) - { - int iat = itia2iat(it, ia); - lambda[iat] = this->atoms[it].lambda[ia]; - } - } - return lambda; + std::vector> lambda(this->nat); + for (int it = 0; it < this->ntype; it++) + { + for (int ia = 0; ia < this->atoms[it].na; ia++) + { + int iat = itia2iat(it, ia); + lambda[iat] = this->atoms[it].lambda[ia]; + } + } + return lambda; } std::vector> UnitCell::get_constrain() const { - std::vector> constrain(this->nat); - for (int it = 0; it < this->ntype; it++) - { - for (int ia = 0; ia < this->atoms[it].na; ia++) - { - int iat = itia2iat(it, ia); - constrain[iat] = this->atoms[it].constrain[ia]; - } - } - return constrain; + std::vector> constrain(this->nat); + for (int it = 0; it < this->ntype; it++) + { + for (int ia = 0; ia < this->atoms[it].na; ia++) + { + int iat = itia2iat(it, ia); + constrain[iat] = this->atoms[it].constrain[ia]; + } + } + return constrain; } //============================================================== // Calculate various lattice related quantities for given latvec //============================================================== -void UnitCell::setup_cell(const std::string& fn, std::ofstream& log) +void UnitCell::setup_cell(const std::string& fn, std::ofstream& log) { ModuleBase::TITLE("UnitCell", "setup_cell"); @@ -207,17 +224,17 @@ void UnitCell::setup_cell(const std::string& fn, std::ofstream& log) this->pseudo_type.resize(ntype); this->orbital_fn.resize(ntype); - if (GlobalV::MY_RANK == 0) + if (GlobalV::MY_RANK == 0) { // open "atom_unitcell" file. std::ifstream ifa(fn.c_str(), std::ios::in); - if (!ifa) + if (!ifa) { GlobalV::ofs_warning << fn; ok = false; } - if (ok) + if (ok) { log << "\n\n"; log << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" @@ -265,11 +282,11 @@ void UnitCell::setup_cell(const std::string& fn, std::ofstream& log) //======================== // call read_atom_species //======================== - const bool read_atom_species = unitcell::read_atom_species(ifa, log ,*this); + const bool read_atom_species = unitcell::read_atom_species(ifa, log, *this); //======================== // call read_lattice_constant //======================== - const bool read_lattice_constant = unitcell::read_lattice_constant(ifa, log ,this->lat); + const bool read_lattice_constant = unitcell::read_lattice_constant(ifa, log, this->lat); //========================== // call read_atom_positions //========================== @@ -280,14 +297,13 @@ void UnitCell::setup_cell(const std::string& fn, std::ofstream& log) Parallel_Common::bcast_bool(ok); Parallel_Common::bcast_bool(ok2); #endif - if (!ok) { - ModuleBase::WARNING_QUIT( - "UnitCell::setup_cell", - "Can not find the file containing atom positions.!"); + if (!ok) + { + ModuleBase::WARNING_QUIT("UnitCell::setup_cell", "Can not find the file containing atom positions.!"); } - if (!ok2) { - ModuleBase::WARNING_QUIT("UnitCell::setup_cell", - "Something wrong during read_atom_positions."); + if (!ok2) + { + ModuleBase::WARNING_QUIT("UnitCell::setup_cell", "Something wrong during read_atom_positions."); } #ifdef __MPI @@ -302,18 +318,17 @@ void UnitCell::setup_cell(const std::string& fn, std::ofstream& log) assert(lat0 > 0.0); this->omega = latvec.Det() * this->lat0 * this->lat0 * this->lat0; - if (this->omega < 0) { std::cout << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << std::endl; std::cout << " Warning: The lattice vector is left-handed; a right-handed vector is prefered." << std::endl; std::cout << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << std::endl; - GlobalV::ofs_warning << - "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << std::endl; - GlobalV::ofs_warning << - " Warning: The lattice vector is left-handed; a right-handed vector is prefered." << std::endl; - GlobalV::ofs_warning << - "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << std::endl; + GlobalV::ofs_warning << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" + << std::endl; + GlobalV::ofs_warning << " Warning: The lattice vector is left-handed; a right-handed vector is prefered." + << std::endl; + GlobalV::ofs_warning << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" + << std::endl; this->omega = std::abs(this->omega); } else if (this->omega == 0) @@ -343,13 +358,8 @@ void UnitCell::setup_cell(const std::string& fn, std::ofstream& log) this->invGGT0 = GGT.Inverse(); log << std::endl; - output::printM3(log, - "Lattice vectors: (Cartesian coordinate: in unit of a_0)", - latvec); - output::printM3( - log, - "Reciprocal vectors: (Cartesian coordinate: in unit of 2 pi/a_0)", - G); + output::printM3(log, "Lattice vectors: (Cartesian coordinate: in unit of a_0)", latvec); + output::printM3(log, "Reciprocal vectors: (Cartesian coordinate: in unit of 2 pi/a_0)", G); //=================================== // set index for iat2it, iat2ia @@ -359,8 +369,7 @@ void UnitCell::setup_cell(const std::string& fn, std::ofstream& log) return; } - -void UnitCell::set_iat2iwt(const int& npol_in) +void UnitCell::set_iat2iwt(const int& npol_in) { #ifdef __DEBUG assert(npol_in == 1 || npol_in == 2); @@ -372,9 +381,9 @@ void UnitCell::set_iat2iwt(const int& npol_in) int iat = 0; int iwt = 0; - for (int it = 0; it < this->ntype; it++) + for (int it = 0; it < this->ntype; it++) { - for (int ia = 0; ia < atoms[it].na; ia++) + for (int ia = 0; ia < atoms[it].na; ia++) { this->iat2iwt[iat] = iwt; iwt += atoms[it].nw * this->npol; @@ -384,174 +393,176 @@ void UnitCell::set_iat2iwt(const int& npol_in) return; } - - // check if any atom can be moved -bool UnitCell::if_atoms_can_move() const +bool UnitCell::if_atoms_can_move() const { - for (int it = 0; it < this->ntype; it++) + for (int it = 0; it < this->ntype; it++) { Atom* atom = &atoms[it]; - for (int ia = 0; ia < atom->na; ia++) - { - if (atom->mbl[ia].x || atom->mbl[ia].y || atom->mbl[ia].z) - { - return true; - } - } - } + for (int ia = 0; ia < atom->na; ia++) + { + if (atom->mbl[ia].x || atom->mbl[ia].y || atom->mbl[ia].z) + { + return true; + } + } + } return false; } // check if lattice vector can be changed -bool UnitCell::if_cell_can_change() const +bool UnitCell::if_cell_can_change() const { - // need to be fixed next - if (this->lc[0] || this->lc[1] || this->lc[2]) - { - return true; - } - return false; + // need to be fixed next + if (this->lc[0] || this->lc[1] || this->lc[2]) + { + return true; + } + return false; } void UnitCell::setup(const std::string& latname_in, const int& ntype_in, const int& lmaxmax_in, const bool& init_vel_in, - const std::string& fixed_axes_in) { + const std::string& fixed_axes_in) +{ this->latName = latname_in; this->ntype = ntype_in; this->lmaxmax = lmaxmax_in; this->init_vel = init_vel_in; // pengfei Li add 2018-11-11 - if (fixed_axes_in == "None") { + if (fixed_axes_in == "None") + { this->lc[0] = 1; this->lc[1] = 1; this->lc[2] = 1; - } else if (fixed_axes_in == "volume") { + } + else if (fixed_axes_in == "volume") + { this->lc[0] = 1; this->lc[1] = 1; this->lc[2] = 1; - if (!PARAM.inp.relax_new) { - ModuleBase::WARNING_QUIT( - "Input", - "there are bugs in the old implementation; set relax_new to be " - "1 for fixed_volume relaxation"); + if (!PARAM.inp.relax_new) + { + ModuleBase::WARNING_QUIT("Input", + "there are bugs in the old implementation; set relax_new to be " + "1 for fixed_volume relaxation"); } - } else if (fixed_axes_in == "shape") { - if (!PARAM.inp.relax_new) { - ModuleBase::WARNING_QUIT( - "Input", - "set relax_new to be 1 for fixed_shape relaxation"); + } + else if (fixed_axes_in == "shape") + { + if (!PARAM.inp.relax_new) + { + ModuleBase::WARNING_QUIT("Input", "set relax_new to be 1 for fixed_shape relaxation"); } this->lc[0] = 1; this->lc[1] = 1; this->lc[2] = 1; - } else if (fixed_axes_in == "a") { + } + else if (fixed_axes_in == "a") + { this->lc[0] = 0; this->lc[1] = 1; this->lc[2] = 1; - } else if (fixed_axes_in == "b") { + } + else if (fixed_axes_in == "b") + { this->lc[0] = 1; this->lc[1] = 0; this->lc[2] = 1; - } else if (fixed_axes_in == "c") { + } + else if (fixed_axes_in == "c") + { this->lc[0] = 1; this->lc[1] = 1; this->lc[2] = 0; - } else if (fixed_axes_in == "ab") { + } + else if (fixed_axes_in == "ab") + { this->lc[0] = 0; this->lc[1] = 0; this->lc[2] = 1; - } else if (fixed_axes_in == "ac") { + } + else if (fixed_axes_in == "ac") + { this->lc[0] = 0; this->lc[1] = 1; this->lc[2] = 0; - } else if (fixed_axes_in == "bc") { + } + else if (fixed_axes_in == "bc") + { this->lc[0] = 1; this->lc[1] = 0; this->lc[2] = 0; - } else if (fixed_axes_in == "abc") { + } + else if (fixed_axes_in == "abc") + { this->lc[0] = 0; this->lc[1] = 0; this->lc[2] = 0; - } else { - ModuleBase::WARNING_QUIT( - "Input", - "fixed_axes should be none, volume, shape, a, b, c, ab, ac, bc or abc!"); + } + else + { + ModuleBase::WARNING_QUIT("Input", "fixed_axes should be none, volume, shape, a, b, c, ab, ac, bc or abc!"); } return; } - -void UnitCell::compare_atom_labels(const std::string &label1, const std::string &label2) +void UnitCell::compare_atom_labels(const std::string& label1, const std::string& label2) { - if (label1!= label2) //'!( "Ag" == "Ag" || "47" == "47" || "Silver" == Silver" )' + if (label1 != label2) //'!( "Ag" == "Ag" || "47" == "47" || "Silver" == Silver" )' { atom_in ai; - if (!(std::to_string(ai.atom_Z[label1]) == label2 - || // '!( "Ag" == "47" )' - ai.atom_symbol[label1] == label2 || // '!( "Ag" == "Silver" )' - label1 == std::to_string(ai.atom_Z[label2]) - || // '!( "47" == "Ag" )' - label1 == std::to_string(ai.symbol_Z[label2]) - || // '!( "47" == "Silver" )' - label1 == ai.atom_symbol[label2] || // '!( "Silver" == "Ag" )' - std::to_string(ai.symbol_Z[label1]) - == label2)) // '!( "Silver" == "47" )' + if (!(std::to_string(ai.atom_Z[label1]) == label2 || // '!( "Ag" == "47" )' + ai.atom_symbol[label1] == label2 || // '!( "Ag" == "Silver" )' + label1 == std::to_string(ai.atom_Z[label2]) || // '!( "47" == "Ag" )' + label1 == std::to_string(ai.symbol_Z[label2]) || // '!( "47" == "Silver" )' + label1 == ai.atom_symbol[label2] || // '!( "Silver" == "Ag" )' + std::to_string(ai.symbol_Z[label1]) == label2)) // '!( "Silver" == "47" )' { std::string stru_label = ""; std::string psuedo_label = ""; - for (int ip = 0; ip < label1.length(); ip++) - { - if (!(isdigit(label1[ip]) || label1[ip] == '_')) - { - stru_label += label1[ip]; - } - else - { - break; - } - } - stru_label[0] = toupper(stru_label[0]); - - for (int ip = 0; ip < label2.length(); ip++) - { - if (!(isdigit(label2[ip]) || label2[ip] == '_')) - { - psuedo_label += label2[ip]; - } - else - { - break; - } - } + for (int ip = 0; ip < label1.length(); ip++) + { + if (!(isdigit(label1[ip]) || label1[ip] == '_')) + { + stru_label += label1[ip]; + } + else + { + break; + } + } + stru_label[0] = toupper(stru_label[0]); + + for (int ip = 0; ip < label2.length(); ip++) + { + if (!(isdigit(label2[ip]) || label2[ip] == '_')) + { + psuedo_label += label2[ip]; + } + else + { + break; + } + } psuedo_label[0] = toupper(psuedo_label[0]); - if (!(stru_label == psuedo_label - || //' !("Ag1" == "ag_locpsp" || "47" == "47" || "Silver" == - //Silver" )' - std::to_string(ai.atom_Z[stru_label]) == psuedo_label - || // ' !("Ag1" == "47" )' - ai.atom_symbol[stru_label] == psuedo_label - || // ' !("Ag1" == "Silver")' - stru_label == std::to_string(ai.atom_Z[psuedo_label]) - || // ' !("47" == "Ag1" )' - stru_label == std::to_string(ai.symbol_Z[psuedo_label]) - || // ' !("47" == "Silver1" )' - stru_label == ai.atom_symbol[psuedo_label] - || // ' !("Silver1" == "Ag" )' - std::to_string(ai.symbol_Z[stru_label]) - == psuedo_label)) // ' !("Silver1" == "47" )' + if (!(stru_label == psuedo_label || //' !("Ag1" == "ag_locpsp" || "47" == "47" || "Silver" == + // Silver" )' + std::to_string(ai.atom_Z[stru_label]) == psuedo_label || // ' !("Ag1" == "47" )' + ai.atom_symbol[stru_label] == psuedo_label || // ' !("Ag1" == "Silver")' + stru_label == std::to_string(ai.atom_Z[psuedo_label]) || // ' !("47" == "Ag1" )' + stru_label == std::to_string(ai.symbol_Z[psuedo_label]) || // ' !("47" == "Silver1" )' + stru_label == ai.atom_symbol[psuedo_label] || // ' !("Silver1" == "Ag" )' + std::to_string(ai.symbol_Z[stru_label]) == psuedo_label)) // ' !("Silver1" == "47" )' { - std::string atom_label_in_orbtial - = "atom label in orbital file "; - std::string mismatch_with_pseudo - = " mismatch with pseudo file of "; + std::string atom_label_in_orbtial = "atom label in orbital file "; + std::string mismatch_with_pseudo = " mismatch with pseudo file of "; ModuleBase::WARNING_QUIT("UnitCell::read_pseudo", - atom_label_in_orbtial + label1 - + mismatch_with_pseudo + label2); + atom_label_in_orbtial + label1 + mismatch_with_pseudo + label2); } } } diff --git a/source/module_cell/unitcell.h b/source/module_cell/unitcell.h index e7b3e3bdcf..2fa3f40d56 100644 --- a/source/module_cell/unitcell.h +++ b/source/module_cell/unitcell.h @@ -1,11 +1,11 @@ #ifndef UNITCELL_H #define UNITCELL_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" #include "module_elecstate/magnetism.h" #include "module_io/output.h" #include "module_symmetry/symmetry.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" #ifdef __LCAO #include "module_basis/module_ao/ORB_read.h" @@ -13,7 +13,8 @@ #endif // provide the basic information about unitcell. -class UnitCell { +class UnitCell +{ public: Atom* atoms = nullptr; @@ -64,21 +65,27 @@ class UnitCell { public: // indexing tool for find orbital global index from it,ia,iw template - inline Tiait - itiaiw2iwt(const Tiait& it, const Tiait& ia, const Tiait& iw) const { + inline Tiait itiaiw2iwt(const Tiait& it, const Tiait& ia, const Tiait& iw) const + { return Tiait(this->iat2iwt[this->itia2iat(it, ia)] + iw); } // initialize iat2iwt void set_iat2iwt(const int& npol_in); // get iat2iwt - inline const int* get_iat2iwt() const { return iat2iwt.data(); } + inline const int* get_iat2iwt() const + { + return iat2iwt.data(); + } // get npol - inline const int& get_npol() const { return npol; } + inline const int& get_npol() const + { + return npol; + } private: std::vector iat2iwt; // iat ==> iwt, the first global index for orbital of this atom - int npol = 1; // number of spin polarizations, initialized in set_iat2iwt - // ----------------- END of iat2iwt part ----------------- + int npol = 1; // number of spin polarizations, initialized in set_iat2iwt + // ----------------- END of iat2iwt part ----------------- public: //======================================================== @@ -86,8 +93,10 @@ class UnitCell { // return true if the last out is reset //======================================================== template - inline bool iat2iait(const Tiat iat, Tiait* ia, Tiait* it) const { - if (iat >= nat) { + inline bool iat2iait(const Tiat iat, Tiait* ia, Tiait* it) const + { + if (iat >= nat) + { *ia = 0; *it = ntype; return false; @@ -98,11 +107,8 @@ class UnitCell { } template - inline bool ijat2iaitjajt(const Tiat ijat, - Tiait* ia, - Tiait* it, - Tiait* ja, - Tiait* jt) const { + inline bool ijat2iaitjajt(const Tiat ijat, Tiait* ia, Tiait* it, Tiait* ja, Tiait* jt) const + { Tiat iat = ijat / nat; Tiat jat = ijat % nat; iat2iait(iat, ia, it); @@ -111,8 +117,10 @@ class UnitCell { } template - inline bool step_it(Tiait* it) const { - if (++(*it) >= ntype) { + inline bool step_it(Tiait* it) const + { + if (++(*it) >= ntype) + { *it = 0; return true; } @@ -120,8 +128,10 @@ class UnitCell { } template - inline bool step_ia(const Tiait it, Tiait* ia) const { - if (++(*ia) >= atoms[it].na) { + inline bool step_ia(const Tiait it, Tiait* ia) const + { + if (++(*ia) >= atoms[it].na) + { *ia = 0; return true; } @@ -129,34 +139,37 @@ class UnitCell { } template - inline bool step_iait(Tiait* ia, Tiait* it) const { - if (step_ia(*it, ia)) { + inline bool step_iait(Tiait* ia, Tiait* it) const + { + if (step_ia(*it, ia)) + { return step_it(it); } return false; } template - inline bool - step_jajtiait(Tiait* ja, Tiait* jt, Tiait* ia, Tiait* it) const { - if (step_iait(ja, jt)) { + inline bool step_jajtiait(Tiait* ja, Tiait* jt, Tiait* ia, Tiait* it) const + { + if (step_iait(ja, jt)) + { return step_iait(ia, it); } return false; } // get tau for atom iat - inline const ModuleBase::Vector3& get_tau(const int& iat) const { + inline const ModuleBase::Vector3& get_tau(const int& iat) const + { return atoms[iat2it[iat]].tau[iat2ia[iat]]; } // calculate vector between two atoms with R cell - inline const ModuleBase::Vector3 - cal_dtau(const int& iat1, - const int& iat2, - const ModuleBase::Vector3& R) const { - return get_tau(iat2) + double(R.x) * a1 + double(R.y) * a2 - + double(R.z) * a3 - get_tau(iat1); + inline const ModuleBase::Vector3 cal_dtau(const int& iat1, + const int& iat2, + const ModuleBase::Vector3& R) const + { + return get_tau(iat2) + double(R.x) * a1 + double(R.y) * a2 + double(R.z) * a3 - get_tau(iat1); } // LiuXh add 20180515 @@ -166,10 +179,8 @@ class UnitCell { ModuleBase::Matrix3 invGGT0; // I'm doing a bad thing here! Will change later - bool ionic_position_updated - = false; // whether the ionic position has been updated - bool cell_parameter_updated - = false; // whether the cell parameters are updated + bool ionic_position_updated = false; // whether the ionic position has been updated + bool cell_parameter_updated = false; // whether the cell parameters are updated //============================================================ // meshx : max number of mesh point in pseudopotential file @@ -186,9 +197,9 @@ class UnitCell { int nmax = 0; int nmax_total = 0; // mohan add 2009-09-10 int lmax_ppwf = 0; - int lmaxmax = 0; // liuyu 2021-07-04 + int lmaxmax = 0; // liuyu 2021-07-04 bool init_vel = false; // liuyu 2021-07-15 - // double nelec; + // double nelec; private: ModuleBase::Matrix3 stress; // calculate stress on the cell @@ -198,13 +209,13 @@ class UnitCell { ~UnitCell(); void print_cell(std::ofstream& ofs) const; - std::vector atom_mass; + std::vector atom_mass; std::vector atom_label; std::vector pseudo_fn; std::vector pseudo_type; - std::vector orbital_fn; // filenames of orbitals, liuyu add 2022-10-19 - std::string descriptor_file; // filenames of descriptor_file, liuyu add 2023-04-06 + std::vector orbital_fn; // filenames of orbitals, liuyu add 2022-10-19 + std::string descriptor_file; // filenames of descriptor_file, liuyu add 2023-04-06 void set_iat2itia(); @@ -233,7 +244,7 @@ class UnitCell { /// @brief check consistency between two atom labels from STRU and pseudo or /// orb file - void compare_atom_labels(const std::string &label1, const std::string &label2); + void compare_atom_labels(const std::string& label1, const std::string& label2); /// @brief get atomCounts, which is a map from element type to atom number std::map get_atom_Counts() const; /// @brief get orbitalCounts, which is a map from element type to orbital diff --git a/source/module_cell/unitcell_data.h b/source/module_cell/unitcell_data.h index 09aab0a0dc..c93c469866 100644 --- a/source/module_cell/unitcell_data.h +++ b/source/module_cell/unitcell_data.h @@ -1,8 +1,8 @@ #ifndef UNITCELL_DATA_H #define UNITCELL_DATA_H -#include "module_base/intarray.h" -#include "module_base/matrix3.h" +#include "source_base/intarray.h" +#include "source_base/matrix3.h" /// @brief info of lattice struct Lattice { diff --git a/source/module_cell/update_cell.cpp b/source/module_cell/update_cell.cpp index ca8abbc0f1..7aa9b748c0 100644 --- a/source/module_cell/update_cell.cpp +++ b/source/module_cell/update_cell.cpp @@ -1,6 +1,7 @@ #include "update_cell.h" + #include "bcast_cell.h" -#include "module_base/global_function.h" +#include "source_base/global_function.h" namespace unitcell { void remake_cell(Lattice& lat) @@ -11,22 +12,22 @@ void remake_cell(Lattice& lat) // from current latvec the lattice parameters, then use the parameters // to reconstruct latvec std::string& latName = lat.latName; - ModuleBase::Matrix3& latvec = lat.latvec; + ModuleBase::Matrix3& latvec = lat.latvec; - if (latName == "none") { - ModuleBase::WARNING_QUIT("UnitCell", - "to use fixed_ibrav, latname must be provided"); - } else if (latName == "sc") // ibrav = 1 + if (latName == "none") + { + ModuleBase::WARNING_QUIT("UnitCell", "to use fixed_ibrav, latname must be provided"); + } + else if (latName == "sc") // ibrav = 1 { - double celldm = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) - + pow(latvec.e13, 2)); + double celldm = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) + pow(latvec.e13, 2)); latvec.Zero(); latvec.e11 = latvec.e22 = latvec.e33 = celldm; - } else if (latName == "fcc") // ibrav = 2 + } + else if (latName == "fcc") // ibrav = 2 { - double celldm = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) - + pow(latvec.e13, 2)) / std::sqrt(2.0); + double celldm = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) + pow(latvec.e13, 2)) / std::sqrt(2.0); latvec.e11 = -celldm; latvec.e12 = 0.0; @@ -37,11 +38,10 @@ void remake_cell(Lattice& lat) latvec.e31 = -celldm; latvec.e32 = celldm; latvec.e33 = 0.0; - } else if (latName == "bcc") // ibrav = 3 + } + else if (latName == "bcc") // ibrav = 3 { - double celldm = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) - + pow(latvec.e13, 2)) - / std::sqrt(3.0); + double celldm = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) + pow(latvec.e13, 2)) / std::sqrt(3.0); latvec.e11 = celldm; latvec.e12 = celldm; @@ -52,12 +52,11 @@ void remake_cell(Lattice& lat) latvec.e31 = -celldm; latvec.e32 = -celldm; latvec.e33 = celldm; - } else if (latName == "hexagonal") // ibrav = 4 + } + else if (latName == "hexagonal") // ibrav = 4 { - double celldm1 = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) - + pow(latvec.e13, 2)); - double celldm3 = std::sqrt(pow(latvec.e31, 2) + pow(latvec.e32, 2) - + pow(latvec.e33, 2)); + double celldm1 = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) + pow(latvec.e13, 2)); + double celldm3 = std::sqrt(pow(latvec.e31, 2) + pow(latvec.e32, 2) + pow(latvec.e33, 2)); double e22 = sqrt(3.0) / 2.0; latvec.e11 = celldm1; @@ -69,17 +68,16 @@ void remake_cell(Lattice& lat) latvec.e31 = 0.0; latvec.e32 = 0.0; latvec.e33 = celldm3; - } else if (latName == "trigonal") // ibrav = 5 + } + else if (latName == "trigonal") // ibrav = 5 { - double celldm1 = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) - + pow(latvec.e13, 2)); - double celldm2 = std::sqrt(pow(latvec.e21, 2) + pow(latvec.e22, 2) - + pow(latvec.e23, 2)); - double celldm12 = (latvec.e11 * latvec.e21 + latvec.e12 * latvec.e22 - + latvec.e13 * latvec.e23); + double celldm1 = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) + pow(latvec.e13, 2)); + double celldm2 = std::sqrt(pow(latvec.e21, 2) + pow(latvec.e22, 2) + pow(latvec.e23, 2)); + double celldm12 = (latvec.e11 * latvec.e21 + latvec.e12 * latvec.e22 + latvec.e13 * latvec.e23); double cos12 = celldm12 / celldm1 / celldm2; - if (cos12 <= -0.5 || cos12 >= 1.0) { + if (cos12 <= -0.5 || cos12 >= 1.0) + { ModuleBase::WARNING_QUIT("unitcell", "wrong cos12!"); } double t1 = sqrt(1.0 + 2.0 * cos12); @@ -99,12 +97,11 @@ void remake_cell(Lattice& lat) latvec.e31 = -e11; latvec.e32 = e12; latvec.e33 = e13; - } else if (latName == "st") // ibrav = 6 + } + else if (latName == "st") // ibrav = 6 { - double celldm1 = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) - + pow(latvec.e13, 2)); - double celldm3 = std::sqrt(pow(latvec.e31, 2) + pow(latvec.e32, 2) - + pow(latvec.e33, 2)); + double celldm1 = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) + pow(latvec.e13, 2)); + double celldm3 = std::sqrt(pow(latvec.e31, 2) + pow(latvec.e32, 2) + pow(latvec.e33, 2)); latvec.e11 = celldm1; latvec.e12 = 0.0; latvec.e13 = 0.0; @@ -114,7 +111,8 @@ void remake_cell(Lattice& lat) latvec.e31 = 0.0; latvec.e32 = 0.0; latvec.e33 = celldm3; - } else if (latName == "bct") // ibrav = 7 + } + else if (latName == "bct") // ibrav = 7 { double celldm1 = std::abs(latvec.e11); double celldm2 = std::abs(latvec.e13); @@ -128,14 +126,12 @@ void remake_cell(Lattice& lat) latvec.e31 = -celldm1; latvec.e32 = -celldm1; latvec.e33 = celldm2; - } else if (latName == "so") // ibrav = 8 + } + else if (latName == "so") // ibrav = 8 { - double celldm1 = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) - + pow(latvec.e13, 2)); - double celldm2 = std::sqrt(pow(latvec.e21, 2) + pow(latvec.e22, 2) - + pow(latvec.e23, 2)); - double celldm3 = std::sqrt(pow(latvec.e31, 2) + pow(latvec.e32, 2) - + pow(latvec.e33, 2)); + double celldm1 = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) + pow(latvec.e13, 2)); + double celldm2 = std::sqrt(pow(latvec.e21, 2) + pow(latvec.e22, 2) + pow(latvec.e23, 2)); + double celldm3 = std::sqrt(pow(latvec.e31, 2) + pow(latvec.e32, 2) + pow(latvec.e33, 2)); latvec.e11 = celldm1; latvec.e12 = 0.0; @@ -146,7 +142,8 @@ void remake_cell(Lattice& lat) latvec.e31 = 0.0; latvec.e32 = 0.0; latvec.e33 = celldm3; - } else if (latName == "baco") // ibrav = 9 + } + else if (latName == "baco") // ibrav = 9 { double celldm1 = std::abs(latvec.e11); double celldm2 = std::abs(latvec.e22); @@ -161,7 +158,8 @@ void remake_cell(Lattice& lat) latvec.e31 = 0.0; latvec.e32 = 0.0; latvec.e33 = celldm3; - } else if (latName == "fco") // ibrav = 10 + } + else if (latName == "fco") // ibrav = 10 { double celldm1 = std::abs(latvec.e11); double celldm2 = std::abs(latvec.e22); @@ -176,7 +174,8 @@ void remake_cell(Lattice& lat) latvec.e31 = 0.0; latvec.e32 = celldm2; latvec.e33 = celldm3; - } else if (latName == "bco") // ibrav = 11 + } + else if (latName == "bco") // ibrav = 11 { double celldm1 = std::abs(latvec.e11); double celldm2 = std::abs(latvec.e12); @@ -191,16 +190,13 @@ void remake_cell(Lattice& lat) latvec.e31 = -celldm1; latvec.e32 = -celldm2; latvec.e33 = celldm3; - } else if (latName == "sm") // ibrav = 12 + } + else if (latName == "sm") // ibrav = 12 { - double celldm1 = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) - + pow(latvec.e13, 2)); - double celldm2 = std::sqrt(pow(latvec.e21, 2) + pow(latvec.e22, 2) - + pow(latvec.e23, 2)); - double celldm3 = std::sqrt(pow(latvec.e31, 2) + pow(latvec.e32, 2) - + pow(latvec.e33, 2)); - double celldm12 = (latvec.e11 * latvec.e21 + latvec.e12 * latvec.e22 - + latvec.e13 * latvec.e23); + double celldm1 = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) + pow(latvec.e13, 2)); + double celldm2 = std::sqrt(pow(latvec.e21, 2) + pow(latvec.e22, 2) + pow(latvec.e23, 2)); + double celldm3 = std::sqrt(pow(latvec.e31, 2) + pow(latvec.e32, 2) + pow(latvec.e33, 2)); + double celldm12 = (latvec.e11 * latvec.e21 + latvec.e12 * latvec.e22 + latvec.e13 * latvec.e23); double cos12 = celldm12 / celldm1 / celldm2; double e21 = celldm2 * cos12; @@ -215,15 +211,16 @@ void remake_cell(Lattice& lat) latvec.e31 = 0.0; latvec.e32 = 0.0; latvec.e33 = celldm3; - } else if (latName == "bacm") // ibrav = 13 + } + else if (latName == "bacm") // ibrav = 13 { double celldm1 = std::abs(latvec.e11); - double celldm2 = std::sqrt(pow(latvec.e21, 2) + pow(latvec.e22, 2) - + pow(latvec.e23, 2)); + double celldm2 = std::sqrt(pow(latvec.e21, 2) + pow(latvec.e22, 2) + pow(latvec.e23, 2)); double celldm3 = std::abs(latvec.e13); double cos12 = latvec.e21 / celldm2; - if (cos12 >= 1.0) { + if (cos12 >= 1.0) + { ModuleBase::WARNING_QUIT("unitcell", "wrong cos12!"); } @@ -239,26 +236,22 @@ void remake_cell(Lattice& lat) latvec.e31 = celldm1; latvec.e32 = 0.0; latvec.e33 = celldm3; - } else if (latName == "triclinic") // ibrav = 14 + } + else if (latName == "triclinic") // ibrav = 14 { - double celldm1 = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) - + pow(latvec.e13, 2)); - double celldm2 = std::sqrt(pow(latvec.e21, 2) + pow(latvec.e22, 2) - + pow(latvec.e23, 2)); - double celldm3 = std::sqrt(pow(latvec.e31, 2) + pow(latvec.e32, 2) - + pow(latvec.e33, 2)); - double celldm12 = (latvec.e11 * latvec.e21 + latvec.e12 * latvec.e22 - + latvec.e13 * latvec.e23); + double celldm1 = std::sqrt(pow(latvec.e11, 2) + pow(latvec.e12, 2) + pow(latvec.e13, 2)); + double celldm2 = std::sqrt(pow(latvec.e21, 2) + pow(latvec.e22, 2) + pow(latvec.e23, 2)); + double celldm3 = std::sqrt(pow(latvec.e31, 2) + pow(latvec.e32, 2) + pow(latvec.e33, 2)); + double celldm12 = (latvec.e11 * latvec.e21 + latvec.e12 * latvec.e22 + latvec.e13 * latvec.e23); double cos12 = celldm12 / celldm1 / celldm2; - double celldm13 = (latvec.e11 * latvec.e31 + latvec.e12 * latvec.e32 - + latvec.e13 * latvec.e33); + double celldm13 = (latvec.e11 * latvec.e31 + latvec.e12 * latvec.e32 + latvec.e13 * latvec.e33); double cos13 = celldm13 / celldm1 / celldm3; - double celldm23 = (latvec.e21 * latvec.e31 + latvec.e22 * latvec.e32 - + latvec.e23 * latvec.e33); + double celldm23 = (latvec.e21 * latvec.e31 + latvec.e22 * latvec.e32 + latvec.e23 * latvec.e33); double cos23 = celldm23 / celldm2 / celldm3; double sin12 = std::sqrt(1.0 - cos12 * cos12); - if (cos12 >= 1.0) { + if (cos12 >= 1.0) + { ModuleBase::WARNING_QUIT("unitcell", "wrong cos12!"); } @@ -270,34 +263,33 @@ void remake_cell(Lattice& lat) latvec.e23 = 0.0; latvec.e31 = celldm3 * cos13; latvec.e32 = celldm3 * (cos23 - cos13 * cos12) / sin12; - double term = 1.0 + 2.0 * cos12 * cos13 * cos23 - cos12 * cos12 - - cos13 * cos13 - cos23 * cos23; + double term = 1.0 + 2.0 * cos12 * cos13 * cos23 - cos12 * cos12 - cos13 * cos13 - cos23 * cos23; term = sqrt(term) / sin12; latvec.e33 = celldm3 * term; - } - else + } + else { std::cout << "latname is : " << latName << std::endl; - ModuleBase::WARNING_QUIT("UnitCell::remake_cell", - "latname not supported!"); + ModuleBase::WARNING_QUIT("UnitCell::remake_cell", "latname not supported!"); } } // LiuXh add a new function here, // 20180515 -void setup_cell_after_vc(UnitCell& ucell, std::ofstream& log) { +void setup_cell_after_vc(UnitCell& ucell, std::ofstream& log) +{ ModuleBase::TITLE("UnitCell", "setup_cell_after_vc"); assert(ucell.lat0 > 0.0); - ucell.omega = std::abs(ucell.latvec.Det()) * - pow(ucell.lat0, 3); - if (ucell.omega <= 0) + ucell.omega = std::abs(ucell.latvec.Det()) * pow(ucell.lat0, 3); + if (ucell.omega <= 0) { ModuleBase::WARNING_QUIT("setup_cell_after_vc", "Cell volume <= 0 ."); - } else { + } + else + { log << std::endl; ModuleBase::GlobalFunc::OUT(log, "Volume (Bohr^3)", ucell.omega); - ModuleBase::GlobalFunc::OUT(log, "Volume (A^3)", - ucell.omega * pow(ModuleBase::BOHR_TO_A, 3)); + ModuleBase::GlobalFunc::OUT(log, "Volume (A^3)", ucell.omega * pow(ModuleBase::BOHR_TO_A, 3)); } ucell.lat0_angstrom = ucell.lat0 * 0.529177; @@ -326,9 +318,11 @@ void setup_cell_after_vc(UnitCell& ucell, std::ofstream& log) { ucell.GGT = ucell.G * ucell.GT; ucell.invGGT = ucell.GGT.Inverse(); - for (int it = 0; it < ucell.ntype; it++) { + for (int it = 0; it < ucell.ntype; it++) + { Atom* atom = &ucell.atoms[it]; - for (int ia = 0; ia < atom->na; ia++) { + for (int ia = 0; ia < atom->na; ia++) + { atom->tau[ia] = atom->taud[ia] * ucell.latvec; } } @@ -338,28 +332,23 @@ void setup_cell_after_vc(UnitCell& ucell, std::ofstream& log) { #endif log << std::endl; - output::printM3(log, - "Lattice vectors: (Cartesian coordinate: in unit of a_0)", - ucell.latvec); - output::printM3(log, - "Reciprocal vectors: (Cartesian coordinate: in unit of 2 pi/a_0)", - ucell.G); + output::printM3(log, "Lattice vectors: (Cartesian coordinate: in unit of a_0)", ucell.latvec); + output::printM3(log, "Reciprocal vectors: (Cartesian coordinate: in unit of 2 pi/a_0)", ucell.G); return; } -void update_pos_tau(const Lattice& lat, - const double* pos, - const int ntype, - const int nat, - Atom* atoms) +void update_pos_tau(const Lattice& lat, const double* pos, const int ntype, const int nat, Atom* atoms) { int iat = 0; - for (int it = 0; it < ntype; it++) { + for (int it = 0; it < ntype; it++) + { Atom* atom = &atoms[it]; - for (int ia = 0; ia < atom->na; ia++) { - for (int ik = 0; ik < 3; ++ik) { - if (atom->mbl[ia][ik]) + for (int ia = 0; ia < atom->na; ia++) + { + for (int ik = 0; ik < 3; ++ik) + { + if (atom->mbl[ia][ik]) { atom->dis[ia][ik] = pos[3 * iat + ik] / lat.lat0 - atom->tau[ia][ik]; atom->tau[ia][ik] = pos[3 * iat + ik] / lat.lat0; @@ -372,23 +361,19 @@ void update_pos_tau(const Lattice& lat, } } assert(iat == nat); - periodic_boundary_adjustment(atoms,lat.latvec,ntype); + periodic_boundary_adjustment(atoms, lat.latvec, ntype); bcast_atoms_tau(atoms, ntype); } -void update_pos_taud(const Lattice& lat, - const double* posd_in, - const int ntype, - const int nat, - Atom* atoms) +void update_pos_taud(const Lattice& lat, const double* posd_in, const int ntype, const int nat, Atom* atoms) { int iat = 0; - for (int it = 0; it < ntype; it++) + for (int it = 0; it < ntype; it++) { Atom* atom = &atoms[it]; - for (int ia = 0; ia < atom->na; ia++) + for (int ia = 0; ia < atom->na; ia++) { - for (int ik = 0; ik < 3; ++ik) + for (int ik = 0; ik < 3; ++ik) { atom->taud[ia][ik] += posd_in[3 * iat + ik]; atom->dis[ia][ik] = posd_in[3 * iat + ik]; @@ -397,7 +382,7 @@ void update_pos_taud(const Lattice& lat, } } assert(iat == nat); - periodic_boundary_adjustment(atoms,lat.latvec,ntype); + periodic_boundary_adjustment(atoms, lat.latvec, ntype); bcast_atoms_tau(atoms, ntype); } @@ -409,12 +394,12 @@ void update_pos_taud(const Lattice& lat, Atom* atoms) { int iat = 0; - for (int it = 0; it < ntype; it++) + for (int it = 0; it < ntype; it++) { Atom* atom = &atoms[it]; - for (int ia = 0; ia < atom->na; ia++) + for (int ia = 0; ia < atom->na; ia++) { - for (int ik = 0; ik < 3; ++ik) + for (int ik = 0; ik < 3; ++ik) { atom->taud[ia][ik] += posd_in[iat][ik]; atom->dis[ia][ik] = posd_in[iat][ik]; @@ -423,20 +408,17 @@ void update_pos_taud(const Lattice& lat, } } assert(iat == nat); - periodic_boundary_adjustment(atoms,lat.latvec,ntype); + periodic_boundary_adjustment(atoms, lat.latvec, ntype); bcast_atoms_tau(atoms, ntype); } -void update_vel(const ModuleBase::Vector3* vel_in, - const int ntype, - const int nat, - Atom* atoms) +void update_vel(const ModuleBase::Vector3* vel_in, const int ntype, const int nat, Atom* atoms) { int iat = 0; - for (int it = 0; it < ntype; ++it) + for (int it = 0; it < ntype; ++it) { Atom* atom = &atoms[it]; - for (int ia = 0; ia < atom->na; ++ia) + for (int ia = 0; ia < atom->na; ++ia) { atoms[it].vel[ia] = vel_in[iat]; ++iat; @@ -445,9 +427,7 @@ void update_vel(const ModuleBase::Vector3* vel_in, assert(iat == nat); } -void periodic_boundary_adjustment(Atom* atoms, - const ModuleBase::Matrix3& latvec, - const int ntype) +void periodic_boundary_adjustment(Atom* atoms, const ModuleBase::Matrix3& latvec, const int ntype) { //---------------------------------------------- // because of the periodic boundary condition @@ -455,34 +435,31 @@ void periodic_boundary_adjustment(Atom* atoms, // first adjust direct coordinates, // then update them into cartesian coordinates, //---------------------------------------------- - for (int it = 0; it < ntype; it++) { + for (int it = 0; it < ntype; it++) + { Atom* atom = &atoms[it]; - for (int ia = 0; ia < atom->na; ia++) { + for (int ia = 0; ia < atom->na; ia++) + { // mohan update 2011-03-21 - for (int ik = 0; ik < 3; ik++) + for (int ik = 0; ik < 3; ik++) { - if (atom->taud[ia][ik] < 0) + if (atom->taud[ia][ik] < 0) { atom->taud[ia][ik] += 1.0; } - if (atom->taud[ia][ik] >= 1.0) + if (atom->taud[ia][ik] >= 1.0) { atom->taud[ia][ik] -= 1.0; } } - if (atom->taud[ia].x < 0 - || atom->taud[ia].y < 0 - || atom->taud[ia].z < 0 - || atom->taud[ia].x >= 1.0 - || atom->taud[ia].y >= 1.0 - || atom->taud[ia].z >= 1.0) + if (atom->taud[ia].x < 0 || atom->taud[ia].y < 0 || atom->taud[ia].z < 0 || atom->taud[ia].x >= 1.0 + || atom->taud[ia].y >= 1.0 || atom->taud[ia].z >= 1.0) { GlobalV::ofs_warning << " it=" << it + 1 << " ia=" << ia + 1 << std::endl; - GlobalV::ofs_warning << "d=" << atom->taud[ia].x << " " - << atom->taud[ia].y << " " - << atom->taud[ia].z << std::endl; + GlobalV::ofs_warning << "d=" << atom->taud[ia].x << " " << atom->taud[ia].y << " " << atom->taud[ia].z + << std::endl; ModuleBase::WARNING_QUIT("Ions_Move_Basic::move_ions", - "the movement of atom is larger than the length of cell."); + "the movement of atom is larger than the length of cell."); } atom->tau[ia] = atom->taud[ia] * latvec; diff --git a/source/module_elecstate/cal_dm.h b/source/module_elecstate/cal_dm.h index 99815b296b..396f0e6d68 100644 --- a/source/module_elecstate/cal_dm.h +++ b/source/module_elecstate/cal_dm.h @@ -2,20 +2,23 @@ #define CAL_DM_H #include "math_tools.h" -#include "module_base/timer.h" -#include "module_base/matrix.h" -#include "module_base/complexmatrix.h" +#include "source_base/complexmatrix.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" namespace elecstate { // for gamma_only(double case) and multi-k(complex case) -inline void cal_dm(const Parallel_Orbitals* ParaV, const ModuleBase::matrix& wg, const psi::Psi& wfc, std::vector& dm) +inline void cal_dm(const Parallel_Orbitals* ParaV, + const ModuleBase::matrix& wg, + const psi::Psi& wfc, + std::vector& dm) { ModuleBase::TITLE("elecstate", "cal_dm"); - ModuleBase::timer::tick("elecstate","cal_dm"); + ModuleBase::timer::tick("elecstate", "cal_dm"); - //dm.resize(wfc.get_nk(), ParaV->ncol, ParaV->nrow); + // dm.resize(wfc.get_nk(), ParaV->ncol, ParaV->nrow); const int nbands_local = wfc.get_nbands(); const int nbasis_local = wfc.get_nbasis(); @@ -24,14 +27,10 @@ inline void cal_dm(const Parallel_Orbitals* ParaV, const ModuleBase::matrix& wg, for (int ik = 0; ik < wfc.get_nk(); ++ik) { wfc.fix_k(ik); - //dm.fix_k(ik); + // dm.fix_k(ik); dm[ik].create(ParaV->ncol, ParaV->nrow); // wg_wfc(ib,iw) = wg[ib] * wfc(ib,iw); - psi::Psi wg_wfc(1, - wfc.get_nbands(), - wfc.get_nbasis(), - wfc.get_nbasis(), - true); + psi::Psi wg_wfc(1, wfc.get_nbands(), wfc.get_nbasis(), wfc.get_nbasis(), true); wg_wfc.set_all_psi(wfc.get_pointer(), wg_wfc.size()); int ib_global = 0; @@ -46,8 +45,10 @@ inline void cal_dm(const Parallel_Orbitals* ParaV, const ModuleBase::matrix& wg, ModuleBase::WARNING_QUIT("ElecStateLCAO::cal_dm", "please check global2local_col!"); } } - if (ib_global >= wg.nc) { continue; -} + if (ib_global >= wg.nc) + { + continue; + } const double wg_local = wg(ik, ib_global); double* wg_wfc_pointer = &(wg_wfc(0, ib_local, 0)); BlasConnector::scal(nbasis_local, wg_local, wg_wfc_pointer, 1); @@ -60,17 +61,20 @@ inline void cal_dm(const Parallel_Orbitals* ParaV, const ModuleBase::matrix& wg, psiMulPsi(wg_wfc, wfc, dm[ik]); #endif } - ModuleBase::timer::tick("elecstate","cal_dm"); + ModuleBase::timer::tick("elecstate", "cal_dm"); return; } -inline void cal_dm(const Parallel_Orbitals* ParaV, const ModuleBase::matrix& wg, const psi::Psi>& wfc, std::vector& dm) +inline void cal_dm(const Parallel_Orbitals* ParaV, + const ModuleBase::matrix& wg, + const psi::Psi>& wfc, + std::vector& dm) { ModuleBase::TITLE("elecstate", "cal_dm"); - ModuleBase::timer::tick("elecstate","cal_dm"); + ModuleBase::timer::tick("elecstate", "cal_dm"); - //dm.resize(wfc.get_nk(), ParaV->ncol, ParaV->nrow); + // dm.resize(wfc.get_nk(), ParaV->ncol, ParaV->nrow); const int nbands_local = wfc.get_nbands(); const int nbasis_local = wfc.get_nbasis(); @@ -79,7 +83,7 @@ inline void cal_dm(const Parallel_Orbitals* ParaV, const ModuleBase::matrix& wg, for (int ik = 0; ik < wfc.get_nk(); ++ik) { wfc.fix_k(ik); - //dm.fix_k(ik); + // dm.fix_k(ik); dm[ik].create(ParaV->ncol, ParaV->nrow); // wg_wfc(ib,iw) = wg[ib] * wfc(ib,iw); psi::Psi> wg_wfc(1, wfc.get_nbands(), wfc.get_nbasis(), wfc.get_nbasis(), true); @@ -88,7 +92,7 @@ inline void cal_dm(const Parallel_Orbitals* ParaV, const ModuleBase::matrix& wg, #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int i = 0;i= wg.nc) { continue; -} + if (ib_global >= wg.nc) + { + continue; + } const double wg_local = wg(ik, ib_global); std::complex* wg_wfc_pointer = &(wg_wfc(0, ib_local, 0)); BlasConnector::scal(nbasis_local, wg_local, wg_wfc_pointer, 1); @@ -120,10 +126,10 @@ inline void cal_dm(const Parallel_Orbitals* ParaV, const ModuleBase::matrix& wg, #endif } - ModuleBase::timer::tick("elecstate","cal_dm"); + ModuleBase::timer::tick("elecstate", "cal_dm"); return; } -}//namespace elecstate +} // namespace elecstate #endif diff --git a/source/module_elecstate/cal_nelec_nband.cpp b/source/module_elecstate/cal_nelec_nband.cpp index 4e70415707..d29f168e7c 100644 --- a/source/module_elecstate/cal_nelec_nband.cpp +++ b/source/module_elecstate/cal_nelec_nband.cpp @@ -1,8 +1,10 @@ #include "cal_nelec_nband.h" -#include "module_base/constants.h" + #include "module_parameter/parameter.h" +#include "source_base/constants.h" -namespace elecstate { +namespace elecstate +{ void cal_nelec(const Atom* atoms, const int& ntype, double& nelec) { @@ -46,7 +48,8 @@ void cal_nbands(const int& nelec, const int& nlocal, const std::vector& // calculate number of bands (setup.f90) //======================================= double occupied_bands = static_cast(nelec / ModuleBase::DEGSPIN); - if (PARAM.inp.lspinorb == 1) { + if (PARAM.inp.lspinorb == 1) + { occupied_bands = static_cast(nelec); } @@ -64,7 +67,8 @@ void cal_nbands(const int& nelec, const int& nlocal, const std::vector& const int nbands1 = static_cast(occupied_bands) + 10; const int nbands2 = static_cast(1.2 * occupied_bands) + 1; nbands = std::max(nbands1, nbands2); - if (PARAM.inp.basis_type != "pw") { + if (PARAM.inp.basis_type != "pw") + { nbands = std::min(nbands, nlocal); } } @@ -73,7 +77,8 @@ void cal_nbands(const int& nelec, const int& nlocal, const std::vector& const int nbands3 = nelec + 20; const int nbands4 = static_cast(1.2 * nelec) + 1; nbands = std::max(nbands3, nbands4); - if (PARAM.inp.basis_type != "pw") { + if (PARAM.inp.basis_type != "pw") + { nbands = std::min(nbands, nlocal); } } @@ -83,17 +88,19 @@ void cal_nbands(const int& nelec, const int& nlocal, const std::vector& const int nbands3 = static_cast(max_occ) + 11; const int nbands4 = static_cast(1.2 * max_occ) + 1; nbands = std::max(nbands3, nbands4); - if (PARAM.inp.basis_type != "pw") { + if (PARAM.inp.basis_type != "pw") + { nbands = std::min(nbands, nlocal); } } ModuleBase::GlobalFunc::AUTO_SET("NBANDS", nbands); } - // else if ( PARAM.inp.calculation=="scf" || PARAM.inp.calculation=="md" || PARAM.inp.calculation=="relax") //pengfei - // 2014-10-13 + // else if ( PARAM.inp.calculation=="scf" || PARAM.inp.calculation=="md" || PARAM.inp.calculation=="relax") + // //pengfei 2014-10-13 else { - if (nbands < occupied_bands) { + if (nbands < occupied_bands) + { ModuleBase::WARNING_QUIT("unitcell", "Too few bands!"); } if (PARAM.inp.nspin == 2) @@ -139,4 +146,4 @@ void cal_nbands(const int& nelec, const int& nlocal, const std::vector& ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "NBANDS", nbands); } -} \ No newline at end of file +} // namespace elecstate \ No newline at end of file diff --git a/source/module_elecstate/elecstate.cpp b/source/module_elecstate/elecstate.cpp index ee4857afd8..684b85bf22 100644 --- a/source/module_elecstate/elecstate.cpp +++ b/source/module_elecstate/elecstate.cpp @@ -1,11 +1,11 @@ #include "elecstate.h" + #include "module_parameter/parameter.h" -#include "module_base/global_variable.h" -#include "module_parameter/parameter.h" -#include "module_base/memory.h" -#include "module_base/parallel_reduce.h" -#include "module_base/tool_title.h" #include "occupy.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" +#include "source_base/parallel_reduce.h" +#include "source_base/tool_title.h" namespace elecstate { @@ -15,8 +15,6 @@ const double* ElecState::getRho(int spin) const return &(this->charge->rho[spin][0]); } - - void ElecState::init_nelec_spin() { this->nelec_spin.resize(PARAM.inp.nspin); @@ -27,22 +25,22 @@ void ElecState::init_nelec_spin() } } -void ElecState::init_scf(const int istep, +void ElecState::init_scf(const int istep, const UnitCell& ucell, const Parallel_Grid& pgrid, - const ModuleBase::ComplexMatrix& strucfac, + const ModuleBase::ComplexMatrix& strucfac, const bool* numeric, - ModuleSymmetry::Symmetry& symm, + ModuleSymmetry::Symmetry& symm, const void* wfcpw) { //! core correction potential. - this->charge->set_rho_core(ucell,strucfac, numeric); + this->charge->set_rho_core(ucell, strucfac, numeric); //! other effective potentials need charge density, // choose charge density from ionic step 0. if (istep == 0) { - this->charge->init_rho(this->eferm,ucell, pgrid, strucfac, symm, (const void*)this->klist, wfcpw); + this->charge->init_rho(this->eferm, ucell, pgrid, strucfac, symm, (const void*)this->klist, wfcpw); this->charge->check_rho(); // check the rho } @@ -53,7 +51,6 @@ void ElecState::init_scf(const int istep, this->pot->init_pot(istep, this->charge); } - void ElecState::init_ks(Charge* chg_in, // pointer for class Charge const K_Vectors* klist_in, int nk_in, diff --git a/source/module_elecstate/elecstate_energy.cpp b/source/module_elecstate/elecstate_energy.cpp index d7b4f7ed10..224012b7a2 100644 --- a/source/module_elecstate/elecstate_energy.cpp +++ b/source/module_elecstate/elecstate_energy.cpp @@ -1,8 +1,8 @@ #include "elecstate.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_reduce.h" #include "module_hamilt_general/module_xc/xc_functional.h" #include "module_parameter/parameter.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_reduce.h" #include diff --git a/source/module_elecstate/elecstate_lcao.cpp b/source/module_elecstate/elecstate_lcao.cpp index efa7b1d76b..fbe9f0dea3 100644 --- a/source/module_elecstate/elecstate_lcao.cpp +++ b/source/module_elecstate/elecstate_lcao.cpp @@ -1,15 +1,14 @@ #include "elecstate_lcao.h" #include "cal_dm.h" -#include "module_base/timer.h" #include "module_elecstate/module_dm/cal_dm_psi.h" #include "module_hamilt_general/module_xc/xc_functional.h" #include "module_hamilt_lcao/module_deltaspin/spin_constrain.h" #include "module_hamilt_lcao/module_gint/grid_technique.h" +#include "module_hamilt_lcao/module_gint/temp_gint/gint_interface.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" - -#include "module_hamilt_lcao/module_gint/temp_gint/gint_interface.h" +#include "source_base/timer.h" #include @@ -71,7 +70,7 @@ void ElecStateLCAO::psiToRho(const psi::Psi& psi) //------------------------------------------------------------ ModuleBase::GlobalFunc::NOTE("Calculate the charge on real space grid!"); -#ifndef __NEW_GINT +#ifndef __NEW_GINT this->gint_gamma->transfer_DM2DtoGrid(this->DM->get_DMR_vector()); // transfer DM2D to DM_grid in gint Gint_inout inout(this->charge->rho, Gint_Tools::job_type::rho, PARAM.inp.nspin); this->gint_gamma->cal_gint(&inout); diff --git a/source/module_elecstate/elecstate_lcao_cal_tau.cpp b/source/module_elecstate/elecstate_lcao_cal_tau.cpp index 9f2c0bd40b..294b03f72d 100644 --- a/source/module_elecstate/elecstate_lcao_cal_tau.cpp +++ b/source/module_elecstate/elecstate_lcao_cal_tau.cpp @@ -1,7 +1,6 @@ #include "elecstate_lcao.h" #include "module_hamilt_lcao/module_gint/temp_gint/gint_interface.h" - -#include "module_base/timer.h" +#include "source_base/timer.h" namespace elecstate { @@ -46,4 +45,4 @@ void ElecStateLCAO::cal_tau(const psi::Psi& psi) ModuleBase::timer::tick("ElecStateLCAO", "cal_tau"); return; } -} \ No newline at end of file +} // namespace elecstate \ No newline at end of file diff --git a/source/module_elecstate/elecstate_print.cpp b/source/module_elecstate/elecstate_print.cpp index 0a31f58fff..ab9991344b 100644 --- a/source/module_elecstate/elecstate_print.cpp +++ b/source/module_elecstate/elecstate_print.cpp @@ -1,7 +1,4 @@ #include "elecstate.h" -#include "module_base/formatter.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_common.h" #include "module_elecstate/module_pot/H_Hartree_pw.h" #include "module_elecstate/module_pot/efield.h" #include "module_elecstate/module_pot/gatefield.h" @@ -9,6 +6,9 @@ #include "module_hamilt_lcao/module_deepks/LCAO_deepks.h" #include "module_parameter/parameter.h" #include "occupy.h" +#include "source_base/formatter.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_common.h" namespace elecstate { /** @@ -159,7 +159,7 @@ void print_band(const ModuleBase::matrix& ekb, const int& ik, const int& printe, const int& iter, - std::ofstream &ofs) + std::ofstream& ofs) { const double largest_eig = 1.0e10; @@ -183,13 +183,11 @@ void print_band(const ModuleBase::matrix& ekb, if (printe > 0 && ((iter + 1) % printe == 0)) { ofs << std::setprecision(6); - ofs << " Energy (eV) & Occupations for spin=" << klist->isk[ik] + 1 - << " k-point=" << ik + 1 << std::endl; + ofs << " Energy (eV) & Occupations for spin=" << klist->isk[ik] + 1 << " k-point=" << ik + 1 << std::endl; ofs << std::setiosflags(std::ios::showpoint); for (int ib = 0; ib < PARAM.globalv.nbands_l; ib++) { - ofs << " " << std::setw(6) << ib + 1 << std::setw(15) - << ekb(ik, ib) * ModuleBase::Ry_to_eV; + ofs << " " << std::setw(6) << ib + 1 << std::setw(15) << ekb(ik, ib) * ModuleBase::Ry_to_eV; // for the first electron iteration, we don't have the energy // spectrum, so we can't get the occupations. ofs << std::setw(15) << wg(ik, ib); @@ -349,16 +347,14 @@ void print_etot(const Magnetism& magnet, // for each SCF step, we print out energy FmtTable table(/*titles=*/{"Energy", "Rydberg", "eV"}, /*nrows=*/titles.size(), - /*formats=*/{"%-14s", "%20.10f", "%20.10f"}, + /*formats=*/{"%-14s", "%20.10f", "%20.10f"}, /*indents=*/0, - /*align=*/{/*value*/FmtTable::Align::LEFT, /*title*/FmtTable::Align::CENTER}); + /*align=*/{/*value*/ FmtTable::Align::LEFT, /*title*/ FmtTable::Align::CENTER}); // print out the titles table << titles << energies_Ry << energies_eV; GlobalV::ofs_running << table.str() << std::endl; - - if (PARAM.inp.out_level == "ie" || PARAM.inp.out_level == "m") { std::vector mag; @@ -368,10 +364,7 @@ void print_etot(const Magnetism& magnet, mag = {magnet.tot_mag, magnet.abs_mag}; break; case 4: - mag = {magnet.tot_mag_nc[0], - magnet.tot_mag_nc[1], - magnet.tot_mag_nc[2], - magnet.abs_mag}; + mag = {magnet.tot_mag_nc[0], magnet.tot_mag_nc[1], magnet.tot_mag_nc[2], magnet.abs_mag}; break; default: mag = {}; diff --git a/source/module_elecstate/elecstate_pw.cpp b/source/module_elecstate/elecstate_pw.cpp index ef7a168752..a303089e3e 100644 --- a/source/module_elecstate/elecstate_pw.cpp +++ b/source/module_elecstate/elecstate_pw.cpp @@ -1,15 +1,16 @@ #include "elecstate_pw.h" -#include "module_base/constants.h" -#include "module_base/libm/libm.h" -#include "module_base/math_ylmreal.h" -#include "module_base/module_device/device.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" #include "module_hamilt_general/module_xc/xc_functional.h" #include "module_parameter/parameter.h" - -namespace elecstate { +#include "source_base/constants.h" +#include "source_base/libm/libm.h" +#include "source_base/math_ylmreal.h" +#include "source_base/module_device/device.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" + +namespace elecstate +{ template ElecStatePW::ElecStatePW(ModulePW::PW_Basis_K* wfc_basis_in, @@ -29,8 +30,8 @@ ElecStatePW::ElecStatePW(ModulePW::PW_Basis_K* wfc_basis_in, this->init_ks(chg_in, pkv_in, pkv_in->get_nks(), rhodpw_in, bigpw_in); } -template -ElecStatePW::~ElecStatePW() +template +ElecStatePW::~ElecStatePW() { if (PARAM.inp.device == "gpu" || PARAM.inp.precision == "single") { @@ -56,8 +57,8 @@ ElecStatePW::~ElecStatePW() delmem_complex_op()(this->wfcr_another_spin); } -template -void ElecStatePW::init_rho_data() +template +void ElecStatePW::init_rho_data() { if (this->init_rho) { @@ -85,21 +86,22 @@ void ElecStatePW::init_rho_data() { this->kin_r = new Real*[this->charge->nspin]; resmem_var_op()(this->kin_r_data, this->charge->nspin * this->charge->nrxx); - for (int ii = 0; ii < this->charge->nspin; ii++) { + for (int ii = 0; ii < this->charge->nspin; ii++) + { this->kin_r[ii] = this->kin_r_data + ii * this->charge->nrxx; } } } else { - this->rho = reinterpret_cast(this->charge->rho); + this->rho = reinterpret_cast(this->charge->rho); if (PARAM.globalv.double_grid || PARAM.globalv.use_uspp) { this->rhog = reinterpret_cast(this->charge->rhog); } if (XC_Functional::get_func_type() == 3 || PARAM.inp.out_elf[0] > 0) { - this->kin_r = reinterpret_cast(this->charge->kin_r); + this->kin_r = reinterpret_cast(this->charge->kin_r); } } resmem_complex_op()(this->wfcr, this->basis->nmaxgr, "ElecSPW::wfcr"); @@ -107,7 +109,7 @@ void ElecStatePW::init_rho_data() this->init_rho = true; } -template +template void ElecStatePW::psiToRho(const psi::Psi& psi) { ModuleBase::TITLE("ElecStatePW", "psiToRho"); @@ -115,15 +117,15 @@ void ElecStatePW::psiToRho(const psi::Psi& psi) this->init_rho_data(); - for(int is=0; isrho[is], this->charge->nrxx); - setmem_var_op()(this->rho[is], 0, this->charge->nrxx); + // ModuleBase::GlobalFunc::ZEROS(this->rho[is], this->charge->nrxx); + setmem_var_op()(this->rho[is], 0, this->charge->nrxx); if (XC_Functional::get_func_type() == 3) { // ModuleBase::GlobalFunc::ZEROS(this->charge->kin_r[is], this->charge->nrxx); - setmem_var_op()(this->kin_r[is], 0, this->charge->nrxx); + setmem_var_op()(this->kin_r[is], 0, this->charge->nrxx); } if (PARAM.globalv.double_grid || PARAM.globalv.use_uspp) { @@ -154,13 +156,13 @@ void ElecStatePW::psiToRho(const psi::Psi& psi) ModuleBase::timer::tick("ElecStatePW", "psiToRho"); } -template +template void ElecStatePW::updateRhoK(const psi::Psi& psi) { this->rhoBandK(psi); } -template +template void ElecStatePW::parallelK() { #ifdef __MPI @@ -168,7 +170,7 @@ void ElecStatePW::parallelK() #endif } -template +template void ElecStatePW::rhoBandK(const psi::Psi& psi) { ModuleBase::TITLE("ElecStatePW", "rhoBandK"); @@ -202,9 +204,9 @@ void ElecStatePW::rhoBandK(const psi::Psi& psi) /// be care of when smearing_sigma is large, wg would less than 0 /// - this->basis->recip_to_real(this->ctx, &psi(ibnd,0), this->wfcr, ik); + this->basis->recip_to_real(this->ctx, &psi(ibnd, 0), this->wfcr, ik); - this->basis->recip_to_real(this->ctx, &psi(ibnd,npwx), this->wfcr_another_spin, ik); + this->basis->recip_to_real(this->ctx, &psi(ibnd, npwx), this->wfcr_another_spin, ik); const auto w1 = static_cast(this->wg(ik, ibnd) / ucell->omega); @@ -230,7 +232,7 @@ void ElecStatePW::rhoBandK(const psi::Psi& psi) /// only occupied band should be calculated. /// - this->basis->recip_to_real(this->ctx, &psi(ibnd,0), this->wfcr, ik); + this->basis->recip_to_real(this->ctx, &psi(ibnd, 0), this->wfcr, ik); const auto w1 = static_cast(this->wg(ik, ibnd) / ucell->omega); @@ -245,7 +247,7 @@ void ElecStatePW::rhoBandK(const psi::Psi& psi) { for (int j = 0; j < 3; j++) { - setmem_complex_op()(this->wfcr, 0, this->charge->nrxx); + setmem_complex_op()(this->wfcr, 0, this->charge->nrxx); meta_op()(this->ctx, ik, @@ -293,7 +295,7 @@ void ElecStatePW::cal_becsum(const psi::Psi& psi) // get |beta> if (this->ppcell->nkb > 0) { - this->ppcell->getvnl(this->ctx, *ucell,ik, this->vkb); + this->ppcell->getvnl(this->ctx, *ucell, ik, this->vkb); } // becp = @@ -341,9 +343,7 @@ void ElecStatePW::cal_becsum(const psi::Psi& psi) T *auxk1 = nullptr, *auxk2 = nullptr, *aux_gk = nullptr; resmem_complex_op()(auxk1, nbands * atom->ncpp.nh, "ElecState::auxk1"); resmem_complex_op()(auxk2, nbands * atom->ncpp.nh, "ElecState::auxk2"); - resmem_complex_op()(aux_gk, - atom->ncpp.nh * atom->ncpp.nh * npol * npol, - "ElecState::aux_gk"); + resmem_complex_op()(aux_gk, atom->ncpp.nh * atom->ncpp.nh * npol * npol, "ElecState::aux_gk"); for (int ia = 0; ia < atom->na; ia++) { const int iat = ucell->itia2iat(it, ia); @@ -559,6 +559,6 @@ template class ElecStatePW, base_device::DEVICE_CPU>; #if ((defined __CUDA) || (defined __ROCM)) template class ElecStatePW, base_device::DEVICE_GPU>; template class ElecStatePW, base_device::DEVICE_GPU>; -#endif +#endif } // namespace elecstate diff --git a/source/module_elecstate/elecstate_pw.h b/source/module_elecstate/elecstate_pw.h index 6007c8a4fe..8eeccb84bd 100644 --- a/source/module_elecstate/elecstate_pw.h +++ b/source/module_elecstate/elecstate_pw.h @@ -1,13 +1,13 @@ #ifndef ELECSTATEPW_H #define ELECSTATEPW_H -#include - #include "elecstate.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_elecstate/kernels/elecstate_op.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/meta_op.h" -#include "module_base/kernels/math_kernel_op.h" +#include "source_base/kernels/math_kernel_op.h" + +#include namespace elecstate { @@ -49,7 +49,6 @@ class ElecStatePW : public ElecState ModulePW::PW_Basis_K* basis = nullptr; protected: - ModulePW::PW_Basis* rhopw_smooth = nullptr; UnitCell* ucell = nullptr; @@ -59,10 +58,10 @@ class ElecStatePW : public ElecState //! calculate electronic charge density on grid points or density matrix in real space //! the consequence charge density rho saved into rho_out, preparing for charge mixing. void updateRhoK(const psi::Psi& psi); // override; - + //! sum over all pools for rho and ebands void parallelK(); - + //! calcualte rho for each k void rhoBandK(const psi::Psi& psi); @@ -73,7 +72,7 @@ class ElecStatePW : public ElecState //! \sum_lm Q_lm(r) \sum_i w_i void addusdens_g(const Real* becsum, T** rhog); - Device * ctx = {}; + Device* ctx = {}; bool init_rho = false; @@ -82,7 +81,7 @@ class ElecStatePW : public ElecState Real* rho_data = nullptr; T* rhog_data = nullptr; Real* kin_r_data = nullptr; - T* wfcr = nullptr; + T* wfcr = nullptr; T* wfcr_another_spin = nullptr; private: diff --git a/source/module_elecstate/elecstate_pw_sdft.cpp b/source/module_elecstate/elecstate_pw_sdft.cpp index 269efc06f2..cc5fd8bbe7 100644 --- a/source/module_elecstate/elecstate_pw_sdft.cpp +++ b/source/module_elecstate/elecstate_pw_sdft.cpp @@ -1,10 +1,10 @@ #include "./elecstate_pw_sdft.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/timer.h" #include "module_hamilt_general/module_xc/xc_functional.h" #include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/timer.h" namespace elecstate { @@ -26,10 +26,12 @@ void ElecStatePW_SDFT::psiToRho(const psi::Psi& psi) psi.fix_k(ik); this->updateRhoK(psi); } - if (PARAM.inp.device == "gpu" || PARAM.inp.precision == "single") { - for (int ii = 0; ii < nspin; ii++) { - castmem_var_d2h_op()(this->charge->rho[ii], this->rho[ii], this->charge->nrxx); - } + if (PARAM.inp.device == "gpu" || PARAM.inp.precision == "single") + { + for (int ii = 0; ii < nspin; ii++) + { + castmem_var_d2h_op()(this->charge->rho[ii], this->rho[ii], this->charge->nrxx); + } } this->parallelK(); } diff --git a/source/module_elecstate/elecstate_tools.h b/source/module_elecstate/elecstate_tools.h index 884217f778..6d144ab91b 100644 --- a/source/module_elecstate/elecstate_tools.h +++ b/source/module_elecstate/elecstate_tools.h @@ -1,7 +1,7 @@ #ifndef ELECSTATE_TOOLS_H #define ELECSTATE_TOOLS_H #include "elecstate.h" -#include "module_base/matrix.h" +#include "source_base/matrix.h" namespace elecstate { diff --git a/source/module_elecstate/fp_energy.cpp b/source/module_elecstate/fp_energy.cpp index 3218f3aae0..3fe809a7be 100644 --- a/source/module_elecstate/fp_energy.cpp +++ b/source/module_elecstate/fp_energy.cpp @@ -1,10 +1,8 @@ #include "fp_energy.h" #include "module_parameter/parameter.h" -#include "module_base/global_variable.h" - - -#include "module_base/tool_quit.h" +#include "source_base/global_variable.h" +#include "source_base/tool_quit.h" #include #include @@ -15,16 +13,16 @@ namespace elecstate /// @brief calculate etot double fenergy::calculate_etot() { - etot = eband + deband + (etxc - etxcc) + ewald_energy + hartree_energy + demet + descf + exx + efield - + gatefield + evdw + esol_el + esol_cav + edftu + edeepks_scf + escon; + etot = eband + deband + (etxc - etxcc) + ewald_energy + hartree_energy + demet + descf + exx + efield + gatefield + + evdw + esol_el + esol_cav + edftu + edeepks_scf + escon; return etot; } /// @brief calculate etot_harris double fenergy::calculate_harris() { - etot_harris = eband + deband_harris + (etxc - etxcc) + ewald_energy + hartree_energy + demet + descf + exx - + efield + gatefield + evdw + esol_el + esol_cav + edftu + edeepks_scf + escon; + etot_harris = eband + deband_harris + (etxc - etxcc) + ewald_energy + hartree_energy + demet + descf + exx + efield + + gatefield + evdw + esol_el + esol_cav + edftu + edeepks_scf + escon; return etot_harris; } diff --git a/source/module_elecstate/kernels/test/elecstate_op_test.cpp b/source/module_elecstate/kernels/test/elecstate_op_test.cpp index 973df83cea..2db7e57c6a 100644 --- a/source/module_elecstate/kernels/test/elecstate_op_test.cpp +++ b/source/module_elecstate/kernels/test/elecstate_op_test.cpp @@ -1,6 +1,6 @@ #include "module_elecstate/kernels/elecstate_op.h" -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/memory_op.h" #include #include @@ -16,18 +16,2534 @@ class TestModuleElecstateMultiDevice : public ::testing::Test const bool DOMAG_Z = true; const double w1 = 0.00011779029181838057; const double w2 = 5.8895145909190286e-05; - const std::vector expected_rho = {0.000169776, 0.000178569, 0.000193478, 0.000190963, 0.000162992, 0.00012976, 0.000115885, 0.000130059, 0.00016338, 0.000191117, 0.000193323, 0.000178366, 0.000179064, 0.000204228, 0.000227792, 0.000219629, 0.000183672, 0.000153516, 0.000153676, 0.000183952, 0.000219538, 0.000227101, 0.00020339, 0.000178705, 0.000194839, 0.000228625, 0.000243426, 0.000219702, 0.000181133, 0.000163767, 0.00018138, 0.000219691, 0.000242614, 0.000227273, 0.000193857, 0.00017819, 0.000192755, 0.000220801, 0.000220073, 0.00019118, 0.000164701, 0.000164856, 0.000191352, 0.000219611, 0.000219514, 0.000191386, 0.000165518, 0.000166079, 0.00016434, 0.000184444, 0.00018134, 0.000164698, 0.000156019, 0.000164894, 0.000181257, 0.000183649, 0.00016312, 0.000135954, 0.000124381, 0.000136818, 0.000130335, 0.00015378, 0.000163817, 0.000164888, 0.000164963, 0.000163834, 0.000153372, 0.000129503, 0.000101264, 8.32226e-05, 8.35355e-05, 0.000102059, 0.000116058, 0.000153881, 0.000181671, 0.00019171, 0.000181563, 0.000153518, 0.000115431, 7.94008e-05, 5.55859e-05, 4.77218e-05, 5.59624e-05, 8.00408e-05, 0.000130395, 0.000184659, 0.000220604, 0.000220398, 0.000184101, 0.000129668, 7.94357e-05, 4.63696e-05, 3.15498e-05, 3.16778e-05, 4.67709e-05, 8.00837e-05, 0.000164257, 0.000220901, 0.000243906, 0.000220232, 0.000163282, 0.000101221, 5.55696e-05, 3.15687e-05, 2.46811e-05, 3.17951e-05, 5.61029e-05, 0.00010208, 0.000192313, 0.000228466, 0.000228055, 0.00019132, 0.000135475, 8.28695e-05, 4.76363e-05, 3.17207e-05, 3.18329e-05, 4.80319e-05, 8.3641e-05, 0.000136545, 0.000194159, 0.000203962, 0.000193564, 0.000164464, 0.000123269, 8.29177e-05, 5.58212e-05, 4.6815e-05, 5.60991e-05, 8.35257e-05, 0.000124162, 0.000165391, 0.000178568, 0.000178447, 0.000177044, 0.000164353, 0.000135345, 0.000101334, 7.98722e-05, 8.00263e-05, 0.00010178, 0.000135967, 0.000164933, 0.000177413, 0.00017896, 0.000203835, 0.000227343, 0.000219346, 0.000183589, 0.000153552, 0.000153811, 0.000184272, 0.000220133, 0.000227869, 0.000204034, 0.000178996, 0.000204641, 0.000245599, 0.000266381, 0.000242499, 0.000200025, 0.000180655, 0.000200547, 0.000243195, 0.000266727, 0.000245475, 0.000204416, 0.000185313, 0.00022891, 0.000267126, 0.000266303, 0.000227029, 0.000191299, 0.000191546, 0.000227565, 0.000266585, 0.000266819, 0.000228355, 0.000192972, 0.000193226, 0.000220892, 0.000243298, 0.000227224, 0.000193116, 0.000176958, 0.00019338, 0.000227396, 0.000242974, 0.000220189, 0.00018224, 0.000165126, 0.000182777, 0.000184452, 0.000200435, 0.000191399, 0.000176968, 0.000176991, 0.000191342, 0.000200057, 0.000183759, 0.000149563, 0.000123756, 0.000124008, 0.000150211, 0.000153857, 0.000180864, 0.000191681, 0.000193468, 0.000191384, 0.000180279, 0.000153109, 0.000115507, 8.4576e-05, 7.32605e-05, 8.49347e-05, 0.000116163, 0.000154093, 0.000200993, 0.000227986, 0.000227634, 0.000200117, 0.000153102, 0.000101786, 6.24711e-05, 4.30082e-05, 4.3128e-05, 6.28796e-05, 0.000102542, 0.000184984, 0.000244115, 0.000267228, 0.000243129, 0.000183648, 0.000115422, 6.24715e-05, 3.36981e-05, 2.53705e-05, 3.38925e-05, 6.3015e-05, 0.00011646, 0.000221235, 0.000267707, 0.000267073, 0.000219788, 0.000149084, 8.43875e-05, 4.30356e-05, 2.54251e-05, 2.55042e-05, 4.33728e-05, 8.52167e-05, 0.000150469, 0.000228728, 0.000245742, 0.000227673, 0.000181087, 0.000122902, 7.29834e-05, 4.31838e-05, 3.39974e-05, 4.3403e-05, 7.35933e-05, 0.000124051, 0.000182539, 0.000204196, 0.000203779, 0.00019146, 0.000163418, 0.000122899, 8.45893e-05, 6.29222e-05, 6.30623e-05, 8.50736e-05, 0.000123809, 0.000164615, 0.000192509, 0.000178745, 0.000184257, 0.000191376, 0.000180885, 0.000149064, 0.000115799, 0.000102469, 0.000116203, 0.000149836, 0.000181829, 0.000192182, 0.000184698, 0.000194197, 0.000227602, 0.000242531, 0.000219264, 0.000181092, 0.000163967, 0.000181826, 0.000220523, 0.000243831, 0.000228498, 0.000194599, 0.000178222, 0.00022836, 0.000266431, 0.000265778, 0.000226824, 0.000191362, 0.000191812, 0.000228048, 0.000267291, 0.000267602, 0.00022895, 0.000193197, 0.000193038, 0.000243596, 0.000266133, 0.000244166, 0.00020288, 0.000183901, 0.00020362, 0.00024537, 0.000267252, 0.000244248, 0.000202034, 0.000182436, 0.000201798, 0.000219914, 0.000226984, 0.000202831, 0.000177819, 0.000178022, 0.000203359, 0.000227581, 0.000220314, 0.000184942, 0.000154877, 0.000154845, 0.000184784, 0.000181151, 0.000191228, 0.00018371, 0.000177896, 0.00018366, 0.000191138, 0.000181046, 0.000149503, 0.000116298, 0.000102854, 0.000116343, 0.000149588, 0.000163791, 0.000191618, 0.000203375, 0.000203111, 0.00019099, 0.000163151, 0.000122788, 8.45394e-05, 6.28441e-05, 6.28824e-05, 8.47057e-05, 0.000123192, 0.000181825, 0.000228007, 0.0002451, 0.000227175, 0.000180756, 0.000122709, 7.28545e-05, 4.30544e-05, 3.38231e-05, 4.31296e-05, 7.31592e-05, 0.000123445, 0.000220837, 0.000267297, 0.000266739, 0.000219626, 0.000149104, 8.44935e-05, 4.312e-05, 2.54477e-05, 2.54607e-05, 4.32413e-05, 8.49761e-05, 0.000150132, 0.00024411, 0.000267192, 0.00024319, 0.000183917, 0.000115847, 6.28857e-05, 3.39986e-05, 2.55682e-05, 3.40292e-05, 6.31138e-05, 0.000116538, 0.000185036, 0.000228282, 0.000227879, 0.000200457, 0.000153624, 0.000102398, 6.30086e-05, 4.34058e-05, 4.34269e-05, 6.31469e-05, 0.000102846, 0.000154464, 0.00020137, 0.000193957, 0.000191754, 0.000180646, 0.000153539, 0.000115928, 8.48887e-05, 7.34535e-05, 8.5078e-05, 0.000116387, 0.000154285, 0.000181475, 0.000192302, 0.000177651, 0.000191707, 0.000200165, 0.000183666, 0.000149307, 0.000123383, 0.000123605, 0.00014996, 0.00018462, 0.000201118, 0.000192363, 0.000177876, 0.000191783, 0.000219569, 0.00021921, 0.000190941, 0.000164941, 0.000165437, 0.000192324, 0.000221049, 0.000221193, 0.000192766, 0.000166159, 0.00016585, 0.00021996, 0.00024227, 0.00022661, 0.000193081, 0.000177415, 0.000194268, 0.0002287, 0.000244543, 0.00022165, 0.000183213, 0.000165438, 0.000182397, 0.000219454, 0.000226546, 0.00020266, 0.000177976, 0.000178476, 0.000204075, 0.000228484, 0.000221241, 0.000185699, 0.000155343, 0.000154979, 0.00018457, 0.00019067, 0.00019267, 0.000177686, 0.000169169, 0.000178188, 0.000193597, 0.000191769, 0.000164278, 0.000131062, 0.000116874, 0.000130584, 0.000163371, 0.000164266, 0.000176694, 0.000177869, 0.000177851, 0.000176716, 0.000164456, 0.000135833, 0.000101933, 8.03218e-05, 8.02043e-05, 0.000101624, 0.000135492, 0.000164644, 0.000193371, 0.000203198, 0.000192973, 0.00016421, 0.000123358, 8.31557e-05, 5.59935e-05, 4.6818e-05, 5.58866e-05, 8.30724e-05, 0.000123516, 0.000191606, 0.000227705, 0.000227401, 0.000190999, 0.000135555, 8.31647e-05, 4.78966e-05, 3.18287e-05, 3.17699e-05, 4.77766e-05, 8.31897e-05, 0.000135944, 0.00022038, 0.000243396, 0.000220002, 0.00016352, 0.000101796, 5.61586e-05, 3.19688e-05, 2.48775e-05, 3.18148e-05, 5.59491e-05, 0.000101777, 0.000163838, 0.000220371, 0.000220283, 0.000184384, 0.000130411, 8.03645e-05, 4.71541e-05, 3.20674e-05, 3.19629e-05, 4.68692e-05, 8.00456e-05, 0.000130283, 0.000184483, 0.000191758, 0.000181752, 0.000154082, 0.000116363, 8.04071e-05, 5.6379e-05, 4.82162e-05, 5.6199e-05, 8.01134e-05, 0.000116105, 0.000153974, 0.000181753, 0.000165222, 0.000164124, 0.000153901, 0.000130258, 0.000101987, 8.36893e-05, 8.37044e-05, 0.000102039, 0.000130355, 0.000154029, 0.000164235, 0.000165266, 0.000165291, 0.000181461, 0.000183847, 0.000163329, 0.000136024, 0.000124216, 0.000136499, 0.000164162, 0.00018475, 0.000182137, 0.000165623, 0.00015673, 0.000163569, 0.00018354, 0.000180875, 0.000164863, 0.000156711, 0.000166032, 0.000182847, 0.000185594, 0.000165052, 0.000137407, 0.000125083, 0.000136701, 0.000183577, 0.000199544, 0.000191064, 0.000177383, 0.000178094, 0.000193021, 0.000202132, 0.000185895, 0.000151357, 0.000124942, 0.00012448, 0.000149918, 0.000180558, 0.000190738, 0.000183719, 0.000178516, 0.000184812, 0.000192645, 0.000182663, 0.000150976, 0.000117447, 0.000103605, 0.00011663, 0.000149349, 0.000164042, 0.000176567, 0.000178014, 0.00017829, 0.000177355, 0.000165163, 0.000136503, 0.000102511, 8.07849e-05, 8.05329e-05, 0.000101763, 0.000135398, 0.000155504, 0.000176838, 0.00018384, 0.000176902, 0.000155733, 0.000122862, 8.78198e-05, 6.26008e-05, 5.37126e-05, 6.23463e-05, 8.73915e-05, 0.000122452, 0.000164634, 0.000191497, 0.000191418, 0.00016453, 0.000122719, 8.18656e-05, 5.29609e-05, 3.90106e-05, 3.89192e-05, 5.27242e-05, 8.16226e-05, 0.000122647, 0.000181433, 0.000200572, 0.000181486, 0.000136005, 8.78125e-05, 5.30691e-05, 3.46193e-05, 2.90604e-05, 3.43956e-05, 5.26804e-05, 8.74193e-05, 0.00013578, 0.000184272, 0.000184487, 0.000150048, 0.000102277, 6.28005e-05, 3.92835e-05, 2.92168e-05, 2.90551e-05, 3.88043e-05, 6.20696e-05, 0.000101486, 0.000149456, 0.000163873, 0.000150183, 0.000116786, 8.07673e-05, 5.40762e-05, 3.93422e-05, 3.47e-05, 3.89455e-05, 5.3295e-05, 7.971e-05, 0.000115732, 0.000149515, 0.000136441, 0.00012402, 0.000103157, 8.06774e-05, 6.28601e-05, 5.33021e-05, 5.31329e-05, 6.23436e-05, 7.98387e-05, 0.000102157, 0.000123181, 0.000136111, 0.000124411, 0.000123824, 0.000116395, 0.000102099, 8.80972e-05, 8.23993e-05, 8.80746e-05, 0.000101969, 0.000116088, 0.000123418, 0.00012412, 0.000123477, 0.000136384, 0.00014958, 0.000149401, 0.000135994, 0.000123413, 0.000123714, 0.000136778, 0.00015033, 0.000150286, 0.000136742, 0.000123842, 0.000123745, 0.000129876, 0.000153196, 0.000163656, 0.000165404, 0.000166112, 0.000165473, 0.00015535, 0.000131594, 0.00010315, 8.46425e-05, 8.43506e-05, 0.000102184, 0.000153082, 0.000180108, 0.000191611, 0.000194349, 0.000193074, 0.000182444, 0.000155389, 0.000117587, 8.6239e-05, 7.44187e-05, 8.54958e-05, 0.000115985, 0.000163108, 0.000191128, 0.000203621, 0.000204191, 0.000192609, 0.000164915, 0.000124426, 8.59286e-05, 6.39458e-05, 6.36734e-05, 8.50474e-05, 0.000122922, 0.00016427, 0.000193218, 0.000203544, 0.000193735, 0.000165102, 0.000124183, 8.38875e-05, 5.66566e-05, 4.74156e-05, 5.63674e-05, 8.32827e-05, 0.000123342, 0.000164511, 0.000191479, 0.000191563, 0.00016474, 0.000122895, 8.20151e-05, 5.31381e-05, 3.92361e-05, 3.91765e-05, 5.29581e-05, 8.17365e-05, 0.000122592, 0.000163723, 0.000180812, 0.000163935, 0.00012388, 8.20223e-05, 5.22662e-05, 3.65683e-05, 3.18566e-05, 3.64529e-05, 5.2034e-05, 8.16996e-05, 0.000123551, 0.0001538, 0.000154107, 0.000123809, 8.38231e-05, 5.32741e-05, 3.6669e-05, 3.01209e-05, 3.00101e-05, 3.63253e-05, 5.26796e-05, 8.30355e-05, 0.000123075, 0.000130433, 0.000116752, 8.56391e-05, 5.67519e-05, 3.94538e-05, 3.2037e-05, 3.0099e-05, 3.16854e-05, 3.87272e-05, 5.56478e-05, 8.43587e-05, 0.000115836, 0.00010236, 8.57183e-05, 6.38156e-05, 4.75674e-05, 3.94416e-05, 3.67055e-05, 3.65041e-05, 3.88229e-05, 4.65113e-05, 6.24189e-05, 8.44039e-05, 0.000101803, 8.41204e-05, 7.4067e-05, 6.36153e-05, 5.65795e-05, 5.33297e-05, 5.24404e-05, 5.30374e-05, 5.59239e-05, 6.25876e-05, 7.28955e-05, 8.33033e-05, 8.80873e-05, 8.4031e-05, 8.5275e-05, 8.51082e-05, 8.36835e-05, 8.23938e-05, 8.24628e-05, 8.37687e-05, 8.49763e-05, 8.48556e-05, 8.35455e-05, 8.2405e-05, 8.26193e-05, 0.000102056, 0.000115945, 0.000123228, 0.000124114, 0.000123743, 0.000124869, 0.000124326, 0.000116858, 0.000102542, 8.85546e-05, 8.28387e-05, 8.83948e-05, 0.000115515, 0.000153178, 0.000181461, 0.000192345, 0.000182929, 0.000155283, 0.000117307, 8.11734e-05, 5.70951e-05, 4.88782e-05, 5.66632e-05, 8.01132e-05, 0.000153026, 0.000199999, 0.000227897, 0.000228681, 0.000201896, 0.000155064, 0.000103597, 6.39952e-05, 4.4215e-05, 4.40134e-05, 6.32707e-05, 0.00010215, 0.00018076, 0.000227277, 0.000245333, 0.000228261, 0.000182143, 0.000123998, 7.39655e-05, 4.40085e-05, 3.46431e-05, 4.37634e-05, 7.3327e-05, 0.000122863, 0.000190936, 0.00022738, 0.000227646, 0.000191525, 0.000136033, 8.35705e-05, 4.83429e-05, 3.23506e-05, 3.23385e-05, 4.8263e-05, 8.33041e-05, 0.000135512, 0.000181134, 0.000200401, 0.000181425, 0.000135892, 8.76473e-05, 5.30001e-05, 3.47412e-05, 2.93641e-05, 3.48117e-05, 5.30612e-05, 8.75565e-05, 0.000135598, 0.000153668, 0.000153945, 0.000123591, 8.35558e-05, 5.30393e-05, 3.65508e-05, 3.01554e-05, 3.01799e-05, 3.65648e-05, 5.28929e-05, 8.31275e-05, 0.000123022, 0.00011622, 0.000103006, 7.38389e-05, 4.83881e-05, 3.4772e-05, 3.01478e-05, 2.93687e-05, 3.00549e-05, 3.44657e-05, 4.77231e-05, 7.28621e-05, 0.000102207, 8.0567e-05, 6.37096e-05, 4.39393e-05, 3.23335e-05, 2.93244e-05, 3.0128e-05, 3.00339e-05, 2.89846e-05, 3.16325e-05, 4.28335e-05, 6.25121e-05, 8.00199e-05, 5.67399e-05, 4.39985e-05, 3.45114e-05, 3.22339e-05, 3.47269e-05, 3.65371e-05, 3.45117e-05, 3.17005e-05, 3.35899e-05, 4.28176e-05, 5.58289e-05, 6.26212e-05, 4.8614e-05, 4.37771e-05, 4.35783e-05, 4.81697e-05, 5.31171e-05, 5.31103e-05, 4.80256e-05, 4.31076e-05, 4.2978e-05, 4.77782e-05, 5.30685e-05, 5.34388e-05, 5.64569e-05, 6.30598e-05, 7.32512e-05, 8.3521e-05, 8.81195e-05, 8.39039e-05, 7.36216e-05, 6.30901e-05, 5.61824e-05, 5.32249e-05, 5.26704e-05, 5.35023e-05, 8.0015e-05, 0.00010211, 0.000123169, 0.000136376, 0.000136928, 0.000124447, 0.00010336, 8.07737e-05, 6.3059e-05, 5.36874e-05, 5.36252e-05, 6.27624e-05, 0.000129242, 0.000183365, 0.00022001, 0.000220842, 0.000185267, 0.000131075, 8.08007e-05, 4.75724e-05, 3.25427e-05, 3.24257e-05, 4.70969e-05, 7.96796e-05, 0.000183131, 0.000242521, 0.000266806, 0.000243863, 0.000184888, 0.000116656, 6.35454e-05, 3.45949e-05, 2.61054e-05, 3.44031e-05, 6.29404e-05, 0.000115378, 0.000219078, 0.000266116, 0.000266622, 0.000220161, 0.000149719, 8.50357e-05, 4.36645e-05, 2.60092e-05, 2.60116e-05, 4.35972e-05, 8.46568e-05, 0.000148832, 0.000219273, 0.000242736, 0.000219796, 0.00016338, 0.0001016, 5.6097e-05, 3.21594e-05, 2.52787e-05, 3.23251e-05, 5.6299e-05, 0.000101538, 0.0001629, 0.0001837, 0.000183984, 0.0001495, 0.000101615, 6.22155e-05, 3.89983e-05, 2.92949e-05, 2.94338e-05, 3.93295e-05, 6.24674e-05, 0.000101468, 0.000149009, 0.000130057, 0.000116254, 8.50146e-05, 5.61045e-05, 3.89505e-05, 3.18085e-05, 3.01956e-05, 3.20324e-05, 3.91534e-05, 5.5959e-05, 8.44065e-05, 0.000115619, 8.03256e-05, 6.34002e-05, 4.35985e-05, 3.20142e-05, 2.90869e-05, 3.00446e-05, 3.01262e-05, 2.91771e-05, 3.18231e-05, 4.29453e-05, 6.24943e-05, 7.98732e-05, 4.73275e-05, 3.44193e-05, 2.57751e-05, 2.49389e-05, 2.90501e-05, 3.17653e-05, 2.90994e-05, 2.47974e-05, 2.52566e-05, 3.35478e-05, 4.65605e-05, 5.36004e-05, 3.23057e-05, 2.58073e-05, 2.56053e-05, 3.18332e-05, 3.89116e-05, 3.89798e-05, 3.18589e-05, 2.53347e-05, 2.51871e-05, 3.15495e-05, 3.88849e-05, 3.92491e-05, 3.21381e-05, 3.39911e-05, 4.31034e-05, 5.5901e-05, 6.23845e-05, 5.61972e-05, 4.32888e-05, 3.38106e-05, 3.16759e-05, 3.44439e-05, 3.66118e-05, 3.48588e-05, 4.6815e-05, 6.25659e-05, 8.44258e-05, 0.000101752, 0.000102168, 8.5279e-05, 6.31952e-05, 4.69861e-05, 3.91033e-05, 3.67077e-05, 3.67876e-05, 3.92044e-05, 7.95397e-05, 0.000115317, 0.000149266, 0.00016403, 0.000150495, 0.000116888, 8.06518e-05, 5.39992e-05, 3.9481e-05, 3.504e-05, 3.93308e-05, 5.34902e-05, 0.000162245, 0.000218994, 0.000242976, 0.000220373, 0.000163988, 0.000102049, 5.63514e-05, 3.22528e-05, 2.52347e-05, 3.21075e-05, 5.58345e-05, 0.000100854, 0.000218578, 0.000265718, 0.0002664, 0.000220051, 0.000149616, 8.49083e-05, 4.35382e-05, 2.58968e-05, 2.5888e-05, 4.3411e-05, 8.4347e-05, 0.000148382, 0.000241876, 0.000265842, 0.000242791, 0.00018387, 0.000115791, 6.29115e-05, 3.42048e-05, 2.59007e-05, 3.43398e-05, 6.29914e-05, 0.000115408, 0.000182897, 0.000219059, 0.000219486, 0.000183833, 0.000129775, 7.9756e-05, 4.68533e-05, 3.21433e-05, 3.23118e-05, 4.72629e-05, 8.00321e-05, 0.00012946, 0.000183057, 0.000163127, 0.00014946, 0.000115913, 7.97889e-05, 5.32883e-05, 3.89858e-05, 3.48174e-05, 3.94074e-05, 5.38133e-05, 7.98969e-05, 0.000115367, 0.000148786, 0.000101745, 8.49632e-05, 6.29319e-05, 4.67002e-05, 3.88037e-05, 3.64789e-05, 3.67183e-05, 3.92949e-05, 4.6957e-05, 6.25904e-05, 8.4203e-05, 0.000101331, 5.62433e-05, 4.34449e-05, 3.39337e-05, 3.16952e-05, 3.43572e-05, 3.64712e-05, 3.47172e-05, 3.19884e-05, 3.37851e-05, 4.28128e-05, 5.55935e-05, 6.22174e-05, 3.20578e-05, 2.55638e-05, 2.53584e-05, 3.16044e-05, 3.87762e-05, 3.89851e-05, 3.19469e-05, 2.54096e-05, 2.51908e-05, 3.14512e-05, 3.86897e-05, 3.90057e-05, 2.48989e-05, 2.53537e-05, 3.35944e-05, 4.64923e-05, 5.33536e-05, 4.69089e-05, 3.39239e-05, 2.52956e-05, 2.45176e-05, 2.87455e-05, 3.16431e-05, 2.91355e-05, 3.16775e-05, 4.27794e-05, 6.2334e-05, 7.97092e-05, 8.00862e-05, 6.30546e-05, 4.32192e-05, 3.16837e-05, 2.8838e-05, 2.98786e-05, 3.0009e-05, 2.90585e-05, 5.54665e-05, 8.39616e-05, 0.000115411, 0.000130106, 0.000116386, 8.50888e-05, 5.6121e-05, 3.89503e-05, 3.17868e-05, 3.00998e-05, 3.18029e-05, 3.87681e-05, 0.00010074, 0.000148546, 0.000183762, 0.000184484, 0.000150126, 0.000102135, 6.25699e-05, 3.91984e-05, 2.93405e-05, 2.92906e-05, 3.89402e-05, 6.18243e-05, 0.000189968, 0.000226648, 0.000227274, 0.000191338, 0.000135795, 8.32333e-05, 4.79955e-05, 3.20438e-05, 3.20297e-05, 4.78504e-05, 8.26649e-05, 0.000134614, 0.000226111, 0.000244162, 0.000227213, 0.000181152, 0.000123019, 7.31013e-05, 4.33658e-05, 3.41949e-05, 4.34179e-05, 7.2966e-05, 0.000122298, 0.000179849, 0.00022641, 0.000227013, 0.000200217, 0.000153416, 0.000102096, 6.283e-05, 4.34486e-05, 4.35768e-05, 6.30788e-05, 0.000102009, 0.000152574, 0.00019898, 0.000190797, 0.000181278, 0.000153628, 0.000115686, 7.97449e-05, 5.60445e-05, 4.82651e-05, 5.64563e-05, 8.01779e-05, 0.000115496, 0.00015265, 0.000180303, 0.000135822, 0.000123417, 0.000102333, 7.97159e-05, 6.21003e-05, 5.30044e-05, 5.33078e-05, 6.27516e-05, 8.00614e-05, 0.000101861, 0.000122438, 0.000135312, 8.34484e-05, 7.3298e-05, 6.27092e-05, 5.56834e-05, 5.27088e-05, 5.22875e-05, 5.32935e-05, 5.62897e-05, 6.27241e-05, 7.26334e-05, 8.2733e-05, 8.7425e-05, 4.79875e-05, 4.31295e-05, 4.28933e-05, 4.75375e-05, 5.2729e-05, 5.30717e-05, 4.81982e-05, 4.32335e-05, 4.28738e-05, 4.73926e-05, 5.24865e-05, 5.28037e-05, 3.1743e-05, 3.36193e-05, 4.27264e-05, 5.55719e-05, 6.22051e-05, 5.61732e-05, 4.32948e-05, 3.37181e-05, 3.14217e-05, 3.40299e-05, 3.61221e-05, 3.44009e-05, 3.15416e-05, 4.26766e-05, 6.22434e-05, 7.96303e-05, 8.00287e-05, 6.30029e-05, 4.31349e-05, 3.15386e-05, 2.8622e-05, 2.96133e-05, 2.97547e-05, 2.88637e-05, 4.73524e-05, 7.24157e-05, 0.000101778, 0.000115845, 0.000102578, 7.3278e-05, 4.77667e-05, 3.41975e-05, 2.96799e-05, 2.90223e-05, 2.97829e-05, 3.41793e-05, 8.24296e-05, 0.000122382, 0.000153314, 0.000153853, 0.000123517, 8.33491e-05, 5.27466e-05, 3.6259e-05, 2.98878e-05, 2.98951e-05, 3.61821e-05, 5.23392e-05, 0.000134706, 0.000180492, 0.00020022, 0.000181553, 0.000136011, 8.76068e-05, 5.28457e-05, 3.45468e-05, 2.91322e-05, 3.44743e-05, 5.25143e-05, 8.67563e-05, 0.000192476, 0.000202953, 0.000193269, 0.000164542, 0.000123406, 8.30327e-05, 5.5932e-05, 4.68833e-05, 5.59711e-05, 8.29089e-05, 0.000122833, 0.000163568, 0.000202578, 0.000203146, 0.000191496, 0.000163576, 0.000122925, 8.45632e-05, 6.29273e-05, 6.30011e-05, 8.4632e-05, 0.000122567, 0.000162534, 0.000190239, 0.000193094, 0.000191727, 0.000180882, 0.000153543, 0.000115707, 8.47041e-05, 7.33911e-05, 8.49485e-05, 0.00011576, 0.000152812, 0.000179443, 0.000190543, 0.000164985, 0.00016428, 0.000153902, 0.000129894, 0.000101524, 8.34307e-05, 8.36724e-05, 0.000101963, 0.000129796, 0.000152824, 0.000162829, 0.000164318, 0.000124187, 0.000123646, 0.000115948, 0.000101433, 8.75308e-05, 8.21529e-05, 8.80862e-05, 0.000101914, 0.000115608, 0.000122509, 0.000123176, 0.000122883, 8.35386e-05, 8.47608e-05, 8.44441e-05, 8.29716e-05, 8.18669e-05, 8.22377e-05, 8.3701e-05, 8.47534e-05, 8.42682e-05, 8.26769e-05, 8.15331e-05, 8.19515e-05, 5.59126e-05, 6.25578e-05, 7.27056e-05, 8.2978e-05, 8.77087e-05, 8.36486e-05, 7.33599e-05, 6.26251e-05, 5.54514e-05, 5.23311e-05, 5.18043e-05, 5.28019e-05, 4.65013e-05, 6.23551e-05, 8.42158e-05, 0.000101497, 0.000101889, 8.49668e-05, 6.27798e-05, 4.64125e-05, 3.83834e-05, 3.59317e-05, 3.60993e-05, 3.87052e-05, 5.55151e-05, 8.41575e-05, 0.000115586, 0.000130113, 0.000116211, 8.47823e-05, 5.5718e-05, 3.84676e-05, 3.1255e-05, 2.95943e-05, 3.14276e-05, 3.85969e-05, 8.27265e-05, 0.000122767, 0.000153602, 0.000153933, 0.000123423, 8.31643e-05, 5.25199e-05, 3.60119e-05, 2.96459e-05, 2.97056e-05, 3.61091e-05, 5.24442e-05, 0.0001231, 0.000163422, 0.000180773, 0.000163969, 0.000123715, 8.16183e-05, 5.17916e-05, 3.61707e-05, 3.15677e-05, 3.62194e-05, 5.17592e-05, 8.13068e-05, 0.000163955, 0.000191154, 0.000191505, 0.000164707, 0.000122651, 8.15762e-05, 5.26784e-05, 3.88668e-05, 3.88879e-05, 5.26703e-05, 8.13391e-05, 0.000122042, 0.000177949, 0.000178224, 0.000177098, 0.000164478, 0.000135415, 0.000101353, 7.98668e-05, 7.99553e-05, 0.000101514, 0.000135364, 0.000164031, 0.0001765, 0.000178256, 0.000184406, 0.000191805, 0.000181199, 0.000149144, 0.00011576, 0.000102371, 0.000115917, 0.000149093, 0.000180508, 0.00019063, 0.000183509, 0.000177763, 0.000192413, 0.000200895, 0.000183997, 0.000149287, 0.000123244, 0.000123385, 0.000149437, 0.000183498, 0.0001995, 0.000190872, 0.00017711, 0.000165789, 0.000182296, 0.000184419, 0.000163397, 0.0001358, 0.000123931, 0.000136118, 0.000163418, 0.00018347, 0.00018064, 0.000164539, 0.000156455, 0.000136691, 0.000150007, 0.000149512, 0.000135719, 0.000122961, 0.000123217, 0.000136137, 0.000149324, 0.000148911, 0.000135376, 0.000122941, 0.00012351, 0.000101983, 0.000115965, 0.00012304, 0.000123648, 0.000123107, 0.000124119, 0.000123373, 0.000115602, 0.000101093, 8.72159e-05, 8.18811e-05, 8.79275e-05, 7.9881e-05, 0.000102134, 0.000123047, 0.000135942, 0.000136207, 0.00012351, 0.000102223, 7.94634e-05, 6.17064e-05, 5.24766e-05, 5.27153e-05, 6.22537e-05, 7.97623e-05, 0.000115769, 0.000149534, 0.000163824, 0.000149842, 0.000115968, 7.95996e-05, 5.29026e-05, 3.84306e-05, 3.41378e-05, 3.87003e-05, 5.32672e-05, 0.000101581, 0.000149594, 0.000184453, 0.000184526, 0.000149665, 0.000101448, 6.18208e-05, 3.84618e-05, 2.86739e-05, 2.87762e-05, 3.87297e-05, 6.21174e-05, 0.000135957, 0.00018172, 0.000200931, 0.000181658, 0.000135758, 8.72314e-05, 5.24467e-05, 3.4166e-05, 2.88205e-05, 3.43373e-05, 5.27495e-05, 8.75491e-05, 0.000164855, 0.000191857, 0.000191831, 0.000164733, 0.00012255, 8.14472e-05, 5.25465e-05, 3.87505e-05, 3.88353e-05, 5.27865e-05, 8.17652e-05, 0.000122809, 0.000176973, 0.000184073, 0.000177107, 0.000155669, 0.000122434, 8.72103e-05, 6.20709e-05, 5.33865e-05, 6.22328e-05, 8.744e-05, 0.000122554, 0.000155593}; - const std::vector> wfcr = {{0.923838, -0.766723}, {0.946855, -0.787058}, {0.98573, -0.819083}, {0.979491, -0.813515}, {0.904645, -0.751906}, {0.806637, -0.67153}, {0.762282, -0.634627}, {0.808631, -0.671024}, {0.907874, -0.750202}, {0.982864, -0.810243}, {0.988344, -0.815121}, {0.948235, -0.784292}, {0.94822, -0.78808}, {1.01275, -0.841533}, {1.07019, -0.888017}, {1.05126, -0.871455}, {0.961291, -0.797015}, {0.878556, -0.728999}, {0.879115, -0.729255}, {0.962554, -0.796984}, {1.05236, -0.869683}, {1.07057, -0.884247}, {1.01257, -0.837506}, {0.948058, -0.786339}, {0.98916, -0.822}, {1.07203, -0.889774}, {1.10691, -0.917254}, {1.05194, -0.870988}, {0.954991, -0.791043}, {0.907701, -0.752602}, {0.955251, -0.792053}, {1.05176, -0.871156}, {1.1057, -0.914953}, {1.07012, -0.88562}, {0.987688, -0.818688}, {0.946156, -0.785852}, {0.984195, -0.817182}, {1.05394, -0.87392}, {1.0527, -0.871877}, {0.981212, -0.812574}, {0.91036, -0.754655}, {0.910444, -0.755421}, {0.981031, -0.81369}, {1.05148, -0.871097}, {1.0516, -0.870478}, {0.981773, -0.812974}, {0.912427, -0.756748}, {0.913464, -0.758645}, {0.908971, -0.754295}, {0.963366, -0.79862}, {0.955384, -0.791681}, {0.910268, -0.754744}, {0.885649, -0.734965}, {0.910563, -0.755494}, {0.95523, -0.791423}, {0.962139, -0.795868}, {0.907001, -0.749786}, {0.827693, -0.684931}, {0.791008, -0.655941}, {0.829214, -0.688433}, {0.809457, -0.671775}, {0.879509, -0.729387}, {0.907706, -0.752877}, {0.910496, -0.755542}, {0.910841, -0.755549}, {0.908354, -0.752191}, {0.879698, -0.726779}, {0.808843, -0.66724}, {0.715068, -0.590231}, {0.647503, -0.535978}, {0.647961, -0.537899}, {0.716026, -0.594774}, {0.76381, -0.633945}, {0.879729, -0.729707}, {0.955803, -0.792947}, {0.981976, -0.814417}, {0.956255, -0.791826}, {0.880226, -0.72699}, {0.763934, -0.629583}, {0.633519, -0.522245}, {0.529231, -0.437973}, {0.489342, -0.407046}, {0.529559, -0.441213}, {0.633801, -0.527082}, {0.809945, -0.671563}, {0.963921, -0.799094}, {1.05348, -0.873514}, {1.05332, -0.872713}, {0.963433, -0.796712}, {0.809205, -0.667849}, {0.633275, -0.522824}, {0.482815, -0.40069}, {0.396853, -0.332197}, {0.397105, -0.333528}, {0.483473, -0.404133}, {0.6341, -0.527068}, {0.909689, -0.752964}, {1.05459, -0.873619}, {1.10791, -0.918271}, {1.05302, -0.872265}, {0.90709, -0.750598}, {0.713992, -0.591227}, {0.527792, -0.439548}, {0.395934, -0.333532}, {0.348973, -0.296229}, {0.397168, -0.334944}, {0.530053, -0.441972}, {0.716797, -0.593993}, {0.984821, -0.814125}, {1.07256, -0.888377}, {1.07113, -0.888141}, {0.981027, -0.813528}, {0.825252, -0.684905}, {0.644281, -0.537062}, {0.486491, -0.409564}, {0.395306, -0.3362}, {0.396422, -0.336303}, {0.489654, -0.409894}, {0.648876, -0.537628}, {0.830161, -0.685605}, {0.989527, -0.818036}, {1.01305, -0.839816}, {0.986307, -0.818834}, {0.908865, -0.75512}, {0.786138, -0.6546}, {0.643264, -0.53866}, {0.526119, -0.443962}, {0.48143, -0.407024}, {0.528918, -0.443292}, {0.648267, -0.537452}, {0.792158, -0.653131}, {0.914289, -0.753784}, {0.948358, -0.785236}, {0.946951, -0.786282}, {0.942838, -0.783644}, {0.908251, -0.755238}, {0.823591, -0.686102}, {0.711542, -0.594982}, {0.630997, -0.529084}, {0.632407, -0.528638}, {0.715391, -0.593543}, {0.828847, -0.683616}, {0.913505, -0.752152}, {0.946682, -0.781005}, {0.94745, -0.788449}, {1.01127, -0.841328}, {1.06872, -0.887642}, {1.05023, -0.871317}, {0.960676, -0.797313}, {0.878136, -0.729712}, {0.878906, -0.730291}, {0.962866, -0.798309}, {1.05343, -0.871288}, {1.07215, -0.886011}, {1.01393, -0.839118}, {0.948459, -0.787425}, {1.01296, -0.84335}, {1.11059, -0.922846}, {1.15768, -0.959828}, {1.10507, -0.915186}, {1.00344, -0.831421}, {0.953133, -0.790722}, {1.00417, -0.833196}, {1.1063, -0.916922}, {1.15903, -0.959721}, {1.11171, -0.920924}, {1.01359, -0.841467}, {0.964068, -0.802384}, {1.07183, -0.891375}, {1.15889, -0.961665}, {1.1579, -0.959214}, {1.06925, -0.885504}, {0.981048, -0.813396}, {0.981203, -0.814497}, {1.06956, -0.887687}, {1.15808, -0.960244}, {1.15877, -0.960442}, {1.07156, -0.889051}, {0.98419, -0.818312}, {0.984327, -0.819464}, {1.05334, -0.875089}, {1.10617, -0.917553}, {1.0693, -0.886373}, {0.985548, -0.817425}, {0.943012, -0.782968}, {0.985796, -0.818496}, {1.06949, -0.886967}, {1.10601, -0.916251}, {1.05287, -0.87224}, {0.957248, -0.794249}, {0.910429, -0.756958}, {0.95766, -0.796621}, {0.962589, -0.799601}, {1.00376, -0.833124}, {0.980864, -0.814135}, {0.943034, -0.782996}, {0.943291, -0.782814}, {0.981453, -0.813129}, {1.0043, -0.830548}, {0.962815, -0.795639}, {0.868239, -0.718263}, {0.788907, -0.654425}, {0.788959, -0.655994}, {0.86827, -0.722043}, {0.878994, -0.730451}, {0.953312, -0.791624}, {0.981566, -0.814761}, {0.986549, -0.818046}, {0.982076, -0.812596}, {0.954135, -0.787486}, {0.879849, -0.725061}, {0.763971, -0.630051}, {0.652763, -0.540298}, {0.606386, -0.504236}, {0.652418, -0.543523}, {0.763313, -0.635249}, {0.879898, -0.730735}, {1.00539, -0.834003}, {1.07124, -0.887672}, {1.07125, -0.885982}, {1.00547, -0.829434}, {0.88019, -0.724606}, {0.71756, -0.590964}, {0.56108, -0.464272}, {0.464024, -0.387048}, {0.463816, -0.388608}, {0.560587, -0.468581}, {0.717063, -0.596964}, {0.964907, -0.79963}, {1.10884, -0.918112}, {1.16062, -0.96002}, {1.1078, -0.914798}, {0.963434, -0.794295}, {0.763661, -0.629857}, {0.560587, -0.464871}, {0.409729, -0.343813}, {0.354046, -0.300064}, {0.409886, -0.34602}, {0.56118, -0.469098}, {0.764854, -0.635378}, {1.05615, -0.873364}, {1.16173, -0.96079}, {1.16047, -0.959515}, {1.05297, -0.870166}, {0.866966, -0.716971}, {0.650974, -0.540976}, {0.462596, -0.389054}, {0.353371, -0.301627}, {0.353899, -0.302122}, {0.464307, -0.390691}, {0.653947, -0.543888}, {0.870675, -0.720663}, {1.07423, -0.887613}, {1.11286, -0.920772}, {1.07081, -0.886703}, {0.954616, -0.791248}, {0.78542, -0.653081}, {0.603294, -0.505609}, {0.461777, -0.391636}, {0.408783, -0.348602}, {0.463771, -0.391654}, {0.607272, -0.505968}, {0.790837, -0.65401}, {0.960022, -0.792498}, {1.01446, -0.839305}, {1.01249, -0.839574}, {0.980906, -0.814407}, {0.905738, -0.752993}, {0.784415, -0.654267}, {0.64917, -0.544714}, {0.558676, -0.471242}, {0.559894, -0.471059}, {0.652772, -0.544183}, {0.789988, -0.653468}, {0.912063, -0.752107}, {0.986013, -0.813704}, {0.947943, -0.786696}, {0.961747, -0.799577}, {0.98013, -0.8149}, {0.952881, -0.792257}, {0.864487, -0.719835}, {0.761105, -0.635464}, {0.715723, -0.598056}, {0.763315, -0.635511}, {0.868656, -0.719369}, {0.958234, -0.790858}, {0.985232, -0.812944}, {0.964889, -0.798132}, {0.986425, -0.821971}, {1.06872, -0.888871}, {1.10427, -0.916299}, {1.05044, -0.870663}, {0.954341, -0.791611}, {0.907489, -0.753982}, {0.955531, -0.794102}, {1.05292, -0.873803}, {1.10779, -0.918069}, {1.07234, -0.888798}, {0.988752, -0.82125}, {0.945192, -0.787184}, {1.07002, -0.890928}, {1.15705, -0.960808}, {1.15661, -0.958449}, {1.06867, -0.885218}, {0.981026, -0.813747}, {0.981551, -0.815461}, {1.07025, -0.889167}, {1.15912, -0.962105}, {1.15997, -0.962456}, {1.07242, -0.890862}, {0.984159, -0.819515}, {0.983228, -0.819809}, {1.10577, -0.919416}, {1.15678, -0.959814}, {1.10845, -0.918813}, {1.01016, -0.837834}, {0.961188, -0.798356}, {1.01121, -0.840304}, {1.11041, -0.922003}, {1.15925, -0.961781}, {1.10809, -0.919633}, {1.00705, -0.837288}, {0.956173, -0.796589}, {1.00563, -0.83779}, {1.0509, -0.873278}, {1.06811, -0.886659}, {1.0097, -0.838137}, {0.945196, -0.785}, {0.945791, -0.785383}, {1.01137, -0.838798}, {1.07049, -0.886646}, {1.0534, -0.872207}, {0.964632, -0.799738}, {0.881846, -0.732942}, {0.881132, -0.733616}, {0.962726, -0.801192}, {0.953683, -0.792715}, {0.980082, -0.81419}, {0.9608, -0.79781}, {0.945936, -0.784524}, {0.96199, -0.796106}, {0.982244, -0.811106}, {0.956339, -0.788946}, {0.868699, -0.71735}, {0.765224, -0.633848}, {0.718571, -0.597372}, {0.763758, -0.635912}, {0.866261, -0.720794}, {0.906923, -0.753674}, {0.981456, -0.814563}, {1.01186, -0.838282}, {1.01232, -0.836397}, {0.982821, -0.809633}, {0.909065, -0.747462}, {0.78849, -0.648623}, {0.653285, -0.539379}, {0.561887, -0.466699}, {0.56111, -0.467981}, {0.651279, -0.5431}, {0.786027, -0.654231}, {0.95633, -0.79314}, {1.07174, -0.887175}, {1.11221, -0.918584}, {1.07195, -0.882926}, {0.957053, -0.786518}, {0.788597, -0.647974}, {0.606688, -0.500441}, {0.464746, -0.38669}, {0.410517, -0.344417}, {0.463565, -0.388925}, {0.604997, -0.50505}, {0.787204, -0.654458}, {1.0551, -0.872699}, {1.16145, -0.959325}, {1.16097, -0.957426}, {1.05411, -0.867994}, {0.868563, -0.715153}, {0.652854, -0.53954}, {0.46448, -0.387728}, {0.354829, -0.300232}, {0.354491, -0.300814}, {0.463852, -0.389801}, {0.652697, -0.543512}, {0.869216, -0.720441}, {1.11001, -0.916672}, {1.16138, -0.95894}, {1.10807, -0.914757}, {0.963429, -0.795738}, {0.763685, -0.63268}, {0.560783, -0.468402}, {0.410032, -0.347146}, {0.354347, -0.302496}, {0.410228, -0.347288}, {0.56176, -0.469298}, {0.765819, -0.634738}, {0.966148, -0.798407}, {1.07317, -0.886755}, {1.07168, -0.886629}, {1.00467, -0.832134}, {0.87882, -0.729311}, {0.716169, -0.597018}, {0.5599, -0.470567}, {0.463163, -0.392404}, {0.463558, -0.392165}, {0.561382, -0.470049}, {0.719143, -0.596626}, {0.88289, -0.729284}, {1.00835, -0.832346}, {0.988023, -0.818802}, {0.981672, -0.815011}, {0.952472, -0.791468}, {0.877698, -0.730165}, {0.761775, -0.635523}, {0.650706, -0.545214}, {0.604801, -0.507751}, {0.65197, -0.545178}, {0.764633, -0.635155}, {0.882053, -0.729255}, {0.957158, -0.790261}, {0.984764, -0.814137}, {0.944125, -0.785381}, {0.980634, -0.816017}, {1.00247, -0.833302}, {0.960503, -0.797932}, {0.865661, -0.719861}, {0.786294, -0.655153}, {0.786934, -0.655821}, {0.867738, -0.72121}, {0.964114, -0.798652}, {1.00697, -0.832725}, {0.9845, -0.814772}, {0.945659, -0.784752}, {0.980221, -0.81691}, {1.04993, -0.87276}, {1.04997, -0.870966}, {0.980039, -0.812739}, {0.910231, -0.756159}, {0.910895, -0.758138}, {0.98214, -0.817416}, {1.05352, -0.87563}, {1.05427, -0.875431}, {0.98389, -0.817603}, {0.912607, -0.760119}, {0.911159, -0.760133}, {1.0503, -0.874212}, {1.10335, -0.916192}, {1.06756, -0.885521}, {0.985103, -0.817782}, {0.943571, -0.784771}, {0.987028, -0.821611}, {1.07126, -0.891067}, {1.10818, -0.920883}, {1.05497, -0.876791}, {0.958468, -0.797971}, {0.910028, -0.759186}, {0.955566, -0.797109}, {1.04949, -0.872734}, {1.06685, -0.886073}, {1.00903, -0.838073}, {0.945229, -0.785811}, {0.946373, -0.787131}, {1.01229, -0.841303}, {1.07162, -0.889596}, {1.05463, -0.87523}, {0.965725, -0.80243}, {0.882442, -0.73492}, {0.880931, -0.734627}, {0.961731, -0.801255}, {0.978262, -0.813467}, {0.983539, -0.81753}, {0.944576, -0.785031}, {0.921942, -0.765645}, {0.946845, -0.78501}, {0.987626, -0.817416}, {0.983227, -0.813215}, {0.909684, -0.753089}, {0.81169, -0.673669}, {0.765633, -0.6372}, {0.808995, -0.673899}, {0.905172, -0.753411}, {0.908055, -0.754985}, {0.942135, -0.782595}, {0.945962, -0.784348}, {0.946988, -0.78301}, {0.945025, -0.779221}, {0.912205, -0.751041}, {0.828845, -0.682783}, {0.717196, -0.592456}, {0.635566, -0.527221}, {0.634306, -0.527791}, {0.713839, -0.594297}, {0.824462, -0.685961}, {0.909756, -0.755058}, {0.986802, -0.817238}, {1.01281, -0.836246}, {0.988323, -0.813324}, {0.912603, -0.749164}, {0.791099, -0.649177}, {0.648844, -0.533821}, {0.531268, -0.439455}, {0.48471, -0.403144}, {0.529169, -0.440952}, {0.64542, -0.537299}, {0.787479, -0.654588}, {0.982643, -0.813071}, {1.07224, -0.885117}, {1.07268, -0.883124}, {0.984031, -0.80821}, {0.82931, -0.68049}, {0.649052, -0.53364}, {0.491369, -0.406426}, {0.399245, -0.332894}, {0.398288, -0.333291}, {0.488944, -0.408094}, {0.646189, -0.537301}, {0.826964, -0.685747}, {1.05484, -0.870787}, {1.10917, -0.91438}, {1.05505, -0.868682}, {0.909755, -0.748716}, {0.717298, -0.591352}, {0.531557, -0.440698}, {0.399524, -0.334343}, {0.351496, -0.296061}, {0.398033, -0.334165}, {0.529442, -0.441226}, {0.715595, -0.593279}, {0.908919, -0.751527}, {1.05492, -0.870641}, {1.05462, -0.870578}, {0.964648, -0.796749}, {0.810731, -0.670714}, {0.635379, -0.527789}, {0.485236, -0.406039}, {0.398919, -0.336311}, {0.398286, -0.335741}, {0.483848, -0.404716}, {0.634293, -0.526529}, {0.810581, -0.670086}, {0.965132, -0.79669}, {0.983137, -0.813267}, {0.956533, -0.792503}, {0.880212, -0.730296}, {0.764332, -0.635357}, {0.63446, -0.529235}, {0.530208, -0.44443}, {0.489803, -0.411621}, {0.529553, -0.44349}, {0.633996, -0.527433}, {0.764852, -0.633001}, {0.881578, -0.728017}, {0.957708, -0.791087}, {0.911065, -0.756731}, {0.90759, -0.754743}, {0.878865, -0.730867}, {0.808498, -0.672442}, {0.714952, -0.595549}, {0.646991, -0.540274}, {0.646913, -0.540487}, {0.71513, -0.595704}, {0.809667, -0.671647}, {0.881103, -0.72891}, {0.909906, -0.752574}, {0.912056, -0.755782}, {0.910096, -0.758283}, {0.953976, -0.794023}, {0.960955, -0.79835}, {0.906061, -0.752102}, {0.826491, -0.686809}, {0.789153, -0.657105}, {0.827152, -0.688951}, {0.907821, -0.754678}, {0.963956, -0.799534}, {0.957414, -0.793498}, {0.912436, -0.757324}, {0.886661, -0.737845}, {0.905238, -0.754449}, {0.9598, -0.798109}, {0.953186, -0.791836}, {0.909625, -0.756445}, {0.886077, -0.738438}, {0.911681, -0.76052}, {0.95712, -0.797639}, {0.964931, -0.802832}, {0.910193, -0.756825}, {0.830028, -0.691083}, {0.791203, -0.660238}, {0.826951, -0.690435}, {0.959333, -0.798864}, {1.00072, -0.832245}, {0.979131, -0.814474}, {0.942911, -0.785392}, {0.94444, -0.787394}, {0.983443, -0.819466}, {1.00692, -0.837934}, {0.96591, -0.803247}, {0.871256, -0.725178}, {0.79087, -0.659725}, {0.788973, -0.659029}, {0.866207, -0.722797}, {0.951502, -0.792164}, {0.978073, -0.81405}, {0.959796, -0.799062}, {0.946133, -0.787637}, {0.96307, -0.800928}, {0.983832, -0.817045}, {0.958292, -0.79525}, {0.870968, -0.723293}, {0.767495, -0.63878}, {0.720162, -0.600778}, {0.763979, -0.637559}, {0.864966, -0.720942}, {0.907024, -0.754961}, {0.941191, -0.78304}, {0.945516, -0.78567}, {0.94707, -0.785292}, {0.945425, -0.782215}, {0.912778, -0.75433}, {0.829649, -0.685964}, {0.718325, -0.595226}, {0.636876, -0.529364}, {0.635356, -0.529169}, {0.714159, -0.594905}, {0.82393, -0.686022}, {0.883695, -0.734345}, {0.943046, -0.78228}, {0.962661, -0.796255}, {0.945518, -0.779638}, {0.887909, -0.730577}, {0.78874, -0.648806}, {0.666353, -0.549122}, {0.56184, -0.464538}, {0.519736, -0.431134}, {0.559555, -0.464971}, {0.662326, -0.55068}, {0.783983, -0.651881}, {0.910466, -0.754149}, {0.982984, -0.812088}, {0.984028, -0.810411}, {0.913295, -0.750132}, {0.789162, -0.647354}, {0.644338, -0.528999}, {0.51765, -0.426214}, {0.44362, -0.36659}, {0.442638, -0.366719}, {0.514944, -0.427134}, {0.640588, -0.531597}, {0.785351, -0.6515}, {0.956983, -0.790247}, {1.00705, -0.829835}, {0.958737, -0.788403}, {0.830394, -0.681967}, {0.667196, -0.54804}, {0.51823, -0.426587}, {0.417992, -0.345236}, {0.382564, -0.316793}, {0.416077, -0.344799}, {0.514972, -0.426665}, {0.663527, -0.549448}, {0.827298, -0.684327}, {0.964904, -0.795846}, {0.965713, -0.796009}, {0.87102, -0.71776}, {0.718984, -0.592754}, {0.563014, -0.464941}, {0.444786, -0.368332}, {0.383195, -0.318124}, {0.382071, -0.317315}, {0.441832, -0.36636}, {0.55925, -0.462805}, {0.715535, -0.591263}, {0.868694, -0.717077}, {0.909407, -0.751137}, {0.870192, -0.719561}, {0.766991, -0.634981}, {0.637511, -0.528456}, {0.521302, -0.43282}, {0.444302, -0.369591}, {0.417088, -0.347316}, {0.442097, -0.367674}, {0.517827, -0.429316}, {0.634041, -0.524121}, {0.764456, -0.630976}, {0.868927, -0.717143}, {0.828542, -0.686918}, {0.789339, -0.655616}, {0.719679, -0.598187}, {0.636449, -0.529015}, {0.561686, -0.467087}, {0.516942, -0.430452}, {0.515986, -0.429929}, {0.559338, -0.465207}, {0.633862, -0.525378}, {0.71781, -0.593316}, {0.788424, -0.651268}, {0.828303, -0.685161}, {0.789856, -0.65752}, {0.78791, -0.656065}, {0.764306, -0.635606}, {0.716127, -0.594935}, {0.665021, -0.552867}, {0.642661, -0.535285}, {0.664276, -0.553589}, {0.715337, -0.594958}, {0.764184, -0.633695}, {0.78849, -0.652733}, {0.79048, -0.654887}, {0.787598, -0.65419}, {0.826413, -0.689125}, {0.866134, -0.720901}, {0.866302, -0.719642}, {0.8266, -0.686494}, {0.786849, -0.654679}, {0.787158, -0.656254}, {0.827716, -0.689988}, {0.868472, -0.722502}, {0.869048, -0.721551}, {0.829017, -0.688201}, {0.788291, -0.655726}, {0.787238, -0.65636}, {0.806404, -0.672542}, {0.876255, -0.729902}, {0.905549, -0.754561}, {0.909824, -0.759239}, {0.911367, -0.761343}, {0.909808, -0.759645}, {0.88218, -0.735273}, {0.812453, -0.676096}, {0.719265, -0.598635}, {0.650973, -0.542973}, {0.649308, -0.542686}, {0.714759, -0.597186}, {0.875528, -0.730116}, {0.949787, -0.791812}, {0.979432, -0.816962}, {0.986245, -0.822968}, {0.983221, -0.820008}, {0.956268, -0.79652}, {0.882883, -0.734657}, {0.767908, -0.639209}, {0.657054, -0.548106}, {0.609749, -0.509898}, {0.653488, -0.546611}, {0.76165, -0.636052}, {0.903865, -0.7535}, {0.978521, -0.815542}, {1.01024, -0.841477}, {1.01218, -0.842025}, {0.98366, -0.817067}, {0.91053, -0.755649}, {0.79074, -0.656558}, {0.656537, -0.546318}, {0.565677, -0.472109}, {0.564151, -0.471486}, {0.652219, -0.544642}, {0.784485, -0.654334}, {0.907658, -0.755482}, {0.984871, -0.818772}, {1.0117, -0.839332}, {0.987933, -0.817759}, {0.912552, -0.754259}, {0.791414, -0.654168}, {0.650012, -0.538202}, {0.53361, -0.443007}, {0.487743, -0.40577}, {0.531668, -0.442571}, {0.646238, -0.537976}, {0.78641, -0.654744}, {0.90948, -0.754644}, {0.982071, -0.8131}, {0.983366, -0.811973}, {0.912734, -0.751998}, {0.788623, -0.64916}, {0.644089, -0.530499}, {0.518145, -0.427377}, {0.445015, -0.367508}, {0.444493, -0.367452}, {0.516436, -0.427656}, {0.641086, -0.531906}, {0.784847, -0.65175}, {0.908595, -0.751269}, {0.95569, -0.788474}, {0.910793, -0.749804}, {0.792214, -0.651229}, {0.644767, -0.529732}, {0.51472, -0.422831}, {0.430638, -0.353559}, {0.402011, -0.329908}, {0.42975, -0.353253}, {0.512703, -0.422949}, {0.641682, -0.530892}, {0.788888, -0.653118}, {0.881405, -0.727209}, {0.882682, -0.727454}, {0.791455, -0.651686}, {0.651413, -0.535995}, {0.519546, -0.427026}, {0.431407, -0.35383}, {0.391367, -0.320231}, {0.390692, -0.319587}, {0.42934, -0.352217}, {0.516202, -0.425168}, {0.647468, -0.534536}, {0.788186, -0.65087}, {0.811606, -0.669797}, {0.767676, -0.633926}, {0.657384, -0.543041}, {0.535325, -0.44185}, {0.446838, -0.367812}, {0.403221, -0.330752}, {0.391118, -0.320245}, {0.401141, -0.328762}, {0.443013, -0.364033}, {0.53056, -0.436964}, {0.652954, -0.538357}, {0.764991, -0.63103}, {0.718148, -0.594358}, {0.656668, -0.544524}, {0.566534, -0.469907}, {0.489575, -0.405152}, {0.446437, -0.368157}, {0.431026, -0.354731}, {0.429791, -0.353818}, {0.443038, -0.365117}, {0.484873, -0.399705}, {0.561764, -0.462965}, {0.653134, -0.538495}, {0.716845, -0.591951}, {0.64991, -0.540158}, {0.609517, -0.50724}, {0.565223, -0.469676}, {0.533674, -0.442191}, {0.518439, -0.42892}, {0.513936, -0.425524}, {0.516595, -0.428252}, {0.530587, -0.439604}, {0.561827, -0.464433}, {0.606721, -0.500747}, {0.648357, -0.535584}, {0.665914, -0.551716}, {0.648763, -0.540834}, {0.653791, -0.54453}, {0.653749, -0.543279}, {0.64854, -0.538368}, {0.643221, -0.534567}, {0.642987, -0.535396}, {0.648008, -0.539679}, {0.653278, -0.542816}, {0.653614, -0.541465}, {0.64882, -0.536941}, {0.643841, -0.533909}, {0.643781, -0.535683}, {0.714768, -0.596264}, {0.762447, -0.634828}, {0.786361, -0.654068}, {0.788876, -0.656779}, {0.787038, -0.65659}, {0.790289, -0.659955}, {0.788985, -0.658021}, {0.765755, -0.636952}, {0.717875, -0.595989}, {0.666946, -0.55406}, {0.644335, -0.536754}, {0.66505, -0.555112}, {0.760297, -0.634533}, {0.875585, -0.730602}, {0.952714, -0.795538}, {0.980608, -0.819361}, {0.956432, -0.798904}, {0.881715, -0.735447}, {0.766887, -0.638576}, {0.638077, -0.53103}, {0.53475, -0.445826}, {0.494181, -0.413213}, {0.531879, -0.445148}, {0.632794, -0.528872}, {0.875148, -0.730244}, {1.00053, -0.83478}, {1.06809, -0.891045}, {1.0702, -0.892241}, {1.00602, -0.837831}, {0.881951, -0.733898}, {0.720757, -0.600013}, {0.565916, -0.472267}, {0.469701, -0.393385}, {0.468381, -0.392782}, {0.562022, -0.470403}, {0.714748, -0.596952}, {0.951724, -0.792978}, {1.0675, -0.888794}, {1.10965, -0.922755}, {1.07095, -0.889341}, {0.956984, -0.794048}, {0.789425, -0.655373}, {0.609099, -0.506893}, {0.469117, -0.39185}, {0.415847, -0.348108}, {0.467634, -0.390967}, {0.60581, -0.505486}, {0.784489, -0.653943}, {0.979257, -0.813659}, {1.06928, -0.887139}, {1.0707, -0.886703}, {0.982609, -0.812689}, {0.828142, -0.684875}, {0.648738, -0.537238}, {0.492989, -0.409118}, {0.4031, -0.334897}, {0.403108, -0.334733}, {0.492489, -0.40889}, {0.646821, -0.537445}, {0.824799, -0.685681}, {0.955085, -0.790936}, {1.0053, -0.831093}, {0.957134, -0.790022}, {0.828631, -0.683406}, {0.665481, -0.548845}, {0.517532, -0.426748}, {0.419298, -0.345152}, {0.385841, -0.316888}, {0.419992, -0.345177}, {0.51773, -0.427116}, {0.664126, -0.549783}, {0.826087, -0.684663}, {0.880649, -0.727353}, {0.881829, -0.727543}, {0.790393, -0.651558}, {0.650103, -0.535468}, {0.518382, -0.426105}, {0.431098, -0.352788}, {0.392378, -0.31945}, {0.392765, -0.319301}, {0.43158, -0.352366}, {0.517685, -0.425494}, {0.64784, -0.534816}, {0.787744, -0.651055}, {0.766142, -0.632214}, {0.721214, -0.595266}, {0.610714, -0.50388}, {0.494908, -0.407265}, {0.42059, -0.343957}, {0.392784, -0.318851}, {0.388285, -0.313951}, {0.392534, -0.317921}, {0.419281, -0.341768}, {0.492016, -0.403823}, {0.607014, -0.500108}, {0.718572, -0.592754}, {0.637533, -0.52682}, {0.566598, -0.46887}, {0.470787, -0.389088}, {0.404848, -0.332564}, {0.386843, -0.31513}, {0.392913, -0.318428}, {0.392354, -0.317861}, {0.384923, -0.312895}, {0.401295, -0.32789}, {0.466159, -0.382542}, {0.562529, -0.462891}, {0.635899, -0.52438}, {0.534317, -0.442955}, {0.470272, -0.390355}, {0.417093, -0.344997}, {0.404226, -0.332048}, {0.420386, -0.34365}, {0.431316, -0.352355}, {0.418891, -0.342817}, {0.401172, -0.328919}, {0.412834, -0.338725}, {0.465949, -0.38262}, {0.531553, -0.437516}, {0.562139, -0.464363}, {0.493902, -0.410825}, {0.468791, -0.389727}, {0.468461, -0.387955}, {0.493162, -0.407106}, {0.517902, -0.427462}, {0.517514, -0.427864}, {0.491941, -0.407082}, {0.466408, -0.385269}, {0.466295, -0.383977}, {0.491793, -0.404673}, {0.517697, -0.427228}, {0.518528, -0.42989}, {0.531833, -0.443231}, {0.562443, -0.46799}, {0.606581, -0.503922}, {0.647608, -0.538209}, {0.664726, -0.553393}, {0.648354, -0.540326}, {0.607691, -0.505701}, {0.563439, -0.467066}, {0.532447, -0.439851}, {0.518209, -0.428159}, {0.514734, -0.426852}, {0.51796, -0.431201}, {0.63291, -0.527945}, {0.715274, -0.596042}, {0.785456, -0.654767}, {0.826009, -0.689563}, {0.827315, -0.691394}, {0.788912, -0.658884}, {0.719733, -0.599566}, {0.637066, -0.529045}, {0.563173, -0.467104}, {0.519211, -0.431518}, {0.518209, -0.432111}, {0.560322, -0.467836}, {0.804534, -0.670781}, {0.958095, -0.799225}, {1.04923, -0.875744}, {1.05128, -0.877321}, {0.963287, -0.803076}, {0.810688, -0.674956}, {0.636615, -0.529804}, {0.488106, -0.406971}, {0.403106, -0.337317}, {0.402144, -0.336993}, {0.485081, -0.405626}, {0.631544, -0.526882}, {0.958055, -0.79803}, {1.10253, -0.918344}, {1.15661, -0.962985}, {1.10614, -0.920206}, {0.963386, -0.80095}, {0.765061, -0.636437}, {0.563985, -0.470531}, {0.415273, -0.348206}, {0.360323, -0.302975}, {0.414176, -0.347174}, {0.561166, -0.46844}, {0.760355, -0.633544}, {1.04883, -0.871692}, {1.15629, -0.960328}, {1.15785, -0.960684}, {1.05242, -0.872646}, {0.867692, -0.719841}, {0.653288, -0.543268}, {0.46733, -0.390256}, {0.360202, -0.301767}, {0.360488, -0.301459}, {0.467436, -0.389396}, {0.651834, -0.542053}, {0.864392, -0.718579}, {1.05051, -0.870624}, {1.10574, -0.91547}, {1.05255, -0.870705}, {0.907469, -0.750694}, {0.71528, -0.592387}, {0.53113, -0.44062}, {0.402088, -0.333687}, {0.356814, -0.295451}, {0.403793, -0.333737}, {0.53271, -0.440658}, {0.71494, -0.592355}, {0.905299, -0.750602}, {0.962527, -0.795674}, {0.963539, -0.795964}, {0.868658, -0.717384}, {0.716134, -0.591464}, {0.560512, -0.462618}, {0.444341, -0.365573}, {0.385921, -0.315861}, {0.38723, -0.316126}, {0.447067, -0.366095}, {0.562225, -0.46285}, {0.715526, -0.591141}, {0.866741, -0.716797}, {0.810385, -0.668894}, {0.766125, -0.632463}, {0.655207, -0.540786}, {0.532737, -0.438747}, {0.444947, -0.364279}, {0.403385, -0.327604}, {0.393803, -0.318229}, {0.405352, -0.328076}, {0.446911, -0.364238}, {0.532732, -0.437343}, {0.653233, -0.538395}, {0.764153, -0.630586}, {0.636884, -0.525658}, {0.56563, -0.467236}, {0.469448, -0.386983}, {0.403469, -0.330156}, {0.386116, -0.312813}, {0.393426, -0.316676}, {0.394081, -0.316956}, {0.387161, -0.312747}, {0.403133, -0.328102}, {0.467077, -0.382661}, {0.562605, -0.462635}, {0.635504, -0.52367}, {0.488623, -0.403785}, {0.416667, -0.34438}, {0.361438, -0.296958}, {0.356958, -0.290352}, {0.386262, -0.312133}, {0.404112, -0.326145}, {0.386502, -0.312506}, {0.356316, -0.289069}, {0.359029, -0.292435}, {0.413136, -0.337829}, {0.485974, -0.398889}, {0.52064, -0.428934}, {0.403403, -0.333963}, {0.360809, -0.298182}, {0.360349, -0.295854}, {0.402612, -0.328872}, {0.445255, -0.363448}, {0.445368, -0.364105}, {0.402454, -0.329396}, {0.359032, -0.293563}, {0.35822, -0.292418}, {0.400701, -0.327542}, {0.444074, -0.36458}, {0.445233, -0.367395}, {0.402024, -0.333495}, {0.413791, -0.342564}, {0.466418, -0.385211}, {0.531149, -0.438704}, {0.560721, -0.463913}, {0.531951, -0.440594}, {0.467203, -0.386301}, {0.413744, -0.340377}, {0.401158, -0.328617}, {0.418162, -0.342867}, {0.430282, -0.354513}, {0.41901, -0.346944}, {0.484747, -0.403068}, {0.560524, -0.465807}, {0.650941, -0.541315}, {0.714135, -0.594855}, {0.715245, -0.596488}, {0.653683, -0.544691}, {0.56358, -0.46785}, {0.487006, -0.402145}, {0.444771, -0.366269}, {0.430556, -0.355326}, {0.430243, -0.356659}, {0.443622, -0.368824}, {0.631331, -0.52601}, {0.760034, -0.633521}, {0.864246, -0.721319}, {0.905595, -0.756611}, {0.867511, -0.724622}, {0.765155, -0.63787}, {0.636401, -0.528868}, {0.521239, -0.43214}, {0.44557, -0.369658}, {0.419224, -0.348898}, {0.443767, -0.370103}, {0.51758, -0.431538}, {0.902427, -0.750354}, {1.0479, -0.872403}, {1.10353, -0.919235}, {1.05113, -0.875217}, {0.907076, -0.754595}, {0.715588, -0.595226}, {0.531267, -0.4429}, {0.401164, -0.335981}, {0.354514, -0.29758}, {0.400529, -0.3349}, {0.529216, -0.440394}, {0.71172, -0.591331}, {1.04799, -0.870268}, {1.1553, -0.959763}, {1.15687, -0.960888}, {1.05157, -0.873127}, {0.86693, -0.720155}, {0.652405, -0.543334}, {0.466182, -0.390255}, {0.358867, -0.301778}, {0.359218, -0.301236}, {0.466438, -0.388562}, {0.651091, -0.540517}, {0.863696, -0.716755}, {1.10337, -0.914346}, {1.15682, -0.958479}, {1.10563, -0.915858}, {0.962001, -0.79721}, {0.762856, -0.63331}, {0.561523, -0.46775}, {0.41347, -0.345587}, {0.359925, -0.300571}, {0.41527, -0.345087}, {0.563153, -0.466513}, {0.762393, -0.631297}, {0.959567, -0.794961}, {1.05093, -0.869067}, {1.05202, -0.869833}, {0.962698, -0.796173}, {0.808564, -0.669304}, {0.633566, -0.525067}, {0.48557, -0.40248}, {0.402562, -0.33291}, {0.404139, -0.33315}, {0.488902, -0.402767}, {0.635809, -0.524588}, {0.808142, -0.667819}, {0.960699, -0.794449}, {0.907461, -0.749272}, {0.868488, -0.717353}, {0.764704, -0.631891}, {0.63457, -0.52412}, {0.519165, -0.427631}, {0.444969, -0.364663}, {0.421215, -0.343753}, {0.448056, -0.365789}, {0.522742, -0.428483}, {0.63591, -0.52337}, {0.763448, -0.629741}, {0.866741, -0.715477}, {0.716895, -0.591475}, {0.654918, -0.540733}, {0.563903, -0.465064}, {0.486687, -0.399506}, {0.444944, -0.362568}, {0.432395, -0.350326}, {0.433953, -0.351298}, {0.448218, -0.364282}, {0.488829, -0.399619}, {0.563356, -0.462603}, {0.652812, -0.5373}, {0.715764, -0.589874}, {0.533085, -0.439668}, {0.468573, -0.386357}, {0.414961, -0.340431}, {0.40239, -0.327359}, {0.419967, -0.339572}, {0.43294, -0.349558}, {0.422056, -0.341476}, {0.404494, -0.328566}, {0.415001, -0.338524}, {0.466539, -0.381848}, {0.531036, -0.435857}, {0.561168, -0.461839}, {0.402562, -0.331819}, {0.35989, -0.295816}, {0.359447, -0.293397}, {0.402073, -0.326571}, {0.445463, -0.361607}, {0.446387, -0.362917}, {0.403877, -0.328788}, {0.360206, -0.293206}, {0.35868, -0.291907}, {0.400427, -0.3266}, {0.44338, -0.363148}, {0.444425, -0.365557}, {0.354795, -0.292411}, {0.358461, -0.294534}, {0.413036, -0.338535}, {0.485775, -0.398405}, {0.519963, -0.427309}, {0.487338, -0.400927}, {0.414766, -0.340547}, {0.358915, -0.29314}, {0.353852, -0.287985}, {0.38281, -0.312243}, {0.400808, -0.328623}, {0.38392, -0.316159}, {0.399797, -0.330293}, {0.464635, -0.383794}, {0.560507, -0.46371}, {0.633218, -0.525109}, {0.63433, -0.526812}, {0.563097, -0.467156}, {0.467112, -0.385647}, {0.40105, -0.328851}, {0.38306, -0.313193}, {0.389456, -0.319348}, {0.389569, -0.32094}, {0.38292, -0.316338}, {0.528231, -0.438023}, {0.649458, -0.539454}, {0.760684, -0.633373}, {0.807088, -0.673172}, {0.763381, -0.636653}, {0.653433, -0.543507}, {0.531722, -0.440136}, {0.443716, -0.365774}, {0.400837, -0.330437}, {0.389558, -0.322152}, {0.400043, -0.331604}, {0.441644, -0.366167}, {0.711186, -0.591151}, {0.862936, -0.718641}, {0.95913, -0.800092}, {0.960843, -0.801868}, {0.867175, -0.72286}, {0.715938, -0.595418}, {0.560808, -0.465502}, {0.443789, -0.368554}, {0.383526, -0.319373}, {0.383013, -0.319325}, {0.44195, -0.36779}, {0.557256, -0.462962}, {0.977648, -0.810535}, {1.06704, -0.886339}, {1.06819, -0.887951}, {0.980195, -0.814622}, {0.825755, -0.686283}, {0.645961, -0.53792}, {0.489583, -0.409603}, {0.399407, -0.335432}, {0.399886, -0.334684}, {0.490293, -0.407243}, {0.645521, -0.533948}, {0.823687, -0.681448}, {1.06705, -0.883747}, {1.10838, -0.918884}, {1.06907, -0.886589}, {0.95443, -0.791821}, {0.786003, -0.653136}, {0.605002, -0.504557}, {0.465166, -0.389591}, {0.413125, -0.345878}, {0.466744, -0.38827}, {0.606417, -0.501713}, {0.785557, -0.648974}, {0.952244, -0.787455}, {1.06833, -0.883635}, {1.06952, -0.885097}, {1.00419, -0.831485}, {0.878647, -0.728307}, {0.716209, -0.594817}, {0.561322, -0.46725}, {0.466711, -0.388645}, {0.468032, -0.388457}, {0.564014, -0.466269}, {0.717716, -0.592374}, {0.87765, -0.724591}, {1.00188, -0.827957}, {0.981157, -0.810639}, {0.956112, -0.790469}, {0.879911, -0.728015}, {0.763366, -0.631984}, {0.633787, -0.524711}, {0.531582, -0.439568}, {0.493744, -0.407396}, {0.534328, -0.440214}, {0.636773, -0.524598}, {0.764022, -0.629912}, {0.878061, -0.724537}, {0.954022, -0.78775}, {0.828059, -0.683667}, {0.789068, -0.652029}, {0.71852, -0.593719}, {0.634587, -0.523508}, {0.560808, -0.4612}, {0.51873, -0.425334}, {0.520357, -0.426373}, {0.564205, -0.463048}, {0.636747, -0.523687}, {0.717815, -0.59119}, {0.786736, -0.648461}, {0.826821, -0.681998}, {0.649228, -0.535679}, {0.608408, -0.50211}, {0.563277, -0.463787}, {0.531714, -0.435906}, {0.518103, -0.423142}, {0.516232, -0.421199}, {0.520815, -0.425671}, {0.534699, -0.438152}, {0.564022, -0.463018}, {0.606713, -0.49853}, {0.647261, -0.532381}, {0.66494, -0.547781}, {0.492575, -0.405916}, {0.467289, -0.384442}, {0.4668, -0.382423}, {0.492099, -0.401766}, {0.518402, -0.422978}, {0.519799, -0.424699}, {0.495055, -0.405101}, {0.468805, -0.383745}, {0.466945, -0.38203}, {0.490834, -0.401783}, {0.516067, -0.423401}, {0.517019, -0.425414}, {0.400898, -0.329801}, {0.413008, -0.338882}, {0.465946, -0.381611}, {0.531245, -0.435391}, {0.561639, -0.461154}, {0.533497, -0.43849}, {0.468642, -0.384621}, {0.414223, -0.338637}, {0.400306, -0.326367}, {0.416338, -0.339949}, {0.428254, -0.351089}, {0.417374, -0.343294}, {0.399594, -0.328789}, {0.464844, -0.3824}, {0.560931, -0.462366}, {0.633766, -0.523808}, {0.634952, -0.525598}, {0.563632, -0.466039}, {0.467259, -0.384538}, {0.400536, -0.327602}, {0.38188, -0.311703}, {0.387949, -0.317652}, {0.388236, -0.319187}, {0.382124, -0.314681}, {0.489021, -0.403565}, {0.604161, -0.499775}, {0.715285, -0.593659}, {0.762404, -0.634212}, {0.717409, -0.596802}, {0.607089, -0.503536}, {0.491217, -0.405252}, {0.416324, -0.342052}, {0.387747, -0.318786}, {0.382927, -0.315842}, {0.387675, -0.320242}, {0.415449, -0.34289}, {0.644393, -0.53344}, {0.784142, -0.65123}, {0.876642, -0.730128}, {0.877801, -0.731866}, {0.786903, -0.655285}, {0.647201, -0.537342}, {0.515433, -0.426767}, {0.427312, -0.35388}, {0.387554, -0.321775}, {0.387507, -0.321928}, {0.426776, -0.353605}, {0.513737, -0.424754}, {0.823246, -0.682551}, {0.951828, -0.791418}, {1.00178, -0.83441}, {0.953937, -0.794564}, {0.82609, -0.687217}, {0.663244, -0.551235}, {0.514813, -0.428497}, {0.415598, -0.347231}, {0.381434, -0.319109}, {0.415698, -0.346224}, {0.514178, -0.42597}, {0.661235, -0.547082}, {0.984781, -0.815022}, {1.01025, -0.838096}, {0.985469, -0.818317}, {0.909201, -0.755153}, {0.787025, -0.654425}, {0.644702, -0.537847}, {0.52825, -0.442488}, {0.483731, -0.405004}, {0.530046, -0.440713}, {0.646902, -0.534216}, {0.788132, -0.649354}, {0.908919, -0.750002}, {1.01037, -0.83604}, {1.01118, -0.837953}, {0.98149, -0.813885}, {0.906876, -0.752516}, {0.785619, -0.652988}, {0.650901, -0.54244}, {0.561214, -0.468264}, {0.562294, -0.467636}, {0.653163, -0.540255}, {0.787078, -0.64889}, {0.906451, -0.747133}, {0.979986, -0.80913}, {0.98654, -0.816116}, {0.98265, -0.813695}, {0.954239, -0.790607}, {0.878967, -0.728661}, {0.762746, -0.632876}, {0.652418, -0.54172}, {0.607499, -0.503995}, {0.654281, -0.541388}, {0.764528, -0.631079}, {0.878747, -0.724656}, {0.952076, -0.785469}, {0.980567, -0.810022}, {0.912, -0.754273}, {0.909769, -0.752995}, {0.880516, -0.728879}, {0.809042, -0.669481}, {0.715417, -0.59168}, {0.648686, -0.536196}, {0.649766, -0.5368}, {0.717448, -0.592368}, {0.809641, -0.668138}, {0.878603, -0.7249}, {0.906776, -0.748411}, {0.910568, -0.752242}, {0.791359, -0.654261}, {0.789521, -0.65297}, {0.764816, -0.631996}, {0.715789, -0.590571}, {0.665251, -0.548223}, {0.644496, -0.531108}, {0.66716, -0.5502}, {0.717495, -0.591957}, {0.764264, -0.630378}, {0.786857, -0.648783}, {0.788898, -0.650666}, {0.78759, -0.650334}, {0.649246, -0.536372}, {0.654126, -0.540102}, {0.653381, -0.538512}, {0.648056, -0.533315}, {0.643744, -0.529732}, {0.644924, -0.531266}, {0.650434, -0.536217}, {0.654632, -0.539431}, {0.653068, -0.537504}, {0.647008, -0.53224}, {0.642242, -0.528879}, {0.64337, -0.530862}, {0.531406, -0.438506}, {0.562406, -0.463459}, {0.606572, -0.499316}, {0.647903, -0.533552}, {0.665775, -0.548963}, {0.650015, -0.536311}, {0.60901, -0.501905}, {0.563297, -0.462993}, {0.530511, -0.435111}, {0.515271, -0.422811}, {0.51211, -0.42136}, {0.516491, -0.426036}, {0.484781, -0.39971}, {0.561479, -0.462725}, {0.652189, -0.538158}, {0.715419, -0.591481}, {0.716504, -0.592977}, {0.654612, -0.541131}, {0.563513, -0.464147}, {0.48534, -0.398085}, {0.441579, -0.361759}, {0.426772, -0.350591}, {0.427162, -0.352141}, {0.442105, -0.364881}, {0.529563, -0.436884}, {0.651593, -0.538419}, {0.762769, -0.632033}, {0.808653, -0.671341}, {0.764284, -0.634396}, {0.653533, -0.540988}, {0.530723, -0.437448}, {0.441427, -0.362931}, {0.39759, -0.327517}, {0.38631, -0.319391}, {0.397944, -0.329317}, {0.441357, -0.364525}, {0.646085, -0.533756}, {0.78606, -0.651431}, {0.878182, -0.729949}, {0.878711, -0.731235}, {0.787196, -0.654323}, {0.646905, -0.536238}, {0.514485, -0.425654}, {0.425728, -0.352824}, {0.385668, -0.320849}, {0.385984, -0.321259}, {0.426281, -0.353325}, {0.51451, -0.424868}, {0.787758, -0.651546}, {0.906306, -0.752333}, {0.952243, -0.792423}, {0.906773, -0.754853}, {0.788039, -0.655204}, {0.640298, -0.531913}, {0.509624, -0.424236}, {0.425075, -0.355511}, {0.396859, -0.332418}, {0.426052, -0.354922}, {0.510788, -0.422509}, {0.640808, -0.528803}, {0.908923, -0.752185}, {0.980113, -0.813766}, {0.980349, -0.815309}, {0.909182, -0.756104}, {0.784639, -0.652386}, {0.639432, -0.532617}, {0.512855, -0.429188}, {0.439865, -0.369439}, {0.440679, -0.368711}, {0.514694, -0.426899}, {0.641037, -0.528785}, {0.785194, -0.647739}, {0.946748, -0.783834}, {0.946529, -0.785583}, {0.943249, -0.783444}, {0.908934, -0.755117}, {0.824279, -0.685704}, {0.712322, -0.594182}, {0.631914, -0.527946}, {0.6331, -0.527236}, {0.71521, -0.591859}, {0.827387, -0.681631}, {0.911075, -0.750006}, {0.944203, -0.779044}, {0.947184, -0.784971}, {0.962878, -0.799005}, {0.982007, -0.814874}, {0.954503, -0.791986}, {0.865704, -0.718843}, {0.762315, -0.63375}, {0.71698, -0.595846}, {0.763879, -0.63292}, {0.867535, -0.716331}, {0.955232, -0.78739}, {0.981437, -0.809425}, {0.962042, -0.795239}, {0.945708, -0.784084}, {0.983782, -0.815902}, {1.00546, -0.833419}, {0.962426, -0.797379}, {0.866852, -0.718308}, {0.787475, -0.652825}, {0.78806, -0.653039}, {0.867819, -0.718022}, {0.96225, -0.794931}, {1.00355, -0.828595}, {0.981294, -0.810865}, {0.944566, -0.781922}, {0.913382, -0.757119}, {0.957874, -0.793793}, {0.963784, -0.797984}, {0.907436, -0.750829}, {0.827225, -0.684541}, {0.790036, -0.654195}, {0.827928, -0.685662}, {0.907448, -0.750932}, {0.961898, -0.795203}, {0.954595, -0.788875}, {0.910793, -0.753218}, {0.887621, -0.735102}, {0.829546, -0.687252}, {0.869225, -0.719695}, {0.86813, -0.718096}, {0.827234, -0.684027}, {0.787186, -0.651334}, {0.787726, -0.652348}, {0.828031, -0.685654}, {0.86761, -0.717612}, {0.866847, -0.716087}, {0.826627, -0.68263}, {0.787418, -0.650923}, {0.788735, -0.653033}, {0.716677, -0.593447}, {0.764484, -0.632507}, {0.787625, -0.651319}, {0.789417, -0.653108}, {0.787396, -0.652028}, {0.790602, -0.654735}, {0.788655, -0.652241}, {0.764062, -0.63058}, {0.714914, -0.589188}, {0.663901, -0.54742}, {0.642708, -0.531102}, {0.665509, -0.550974}, {0.634351, -0.52513}, {0.717483, -0.593546}, {0.78737, -0.651674}, {0.827261, -0.685377}, {0.827992, -0.686135}, {0.788917, -0.652818}, {0.718532, -0.592914}, {0.634171, -0.521962}, {0.558888, -0.459903}, {0.51483, -0.424804}, {0.515329, -0.426581}, {0.559799, -0.46383}, {0.633949, -0.524656}, {0.763686, -0.632159}, {0.867462, -0.719031}, {0.90766, -0.75297}, {0.86835, -0.719775}, {0.76471, -0.632255}, {0.634321, -0.522887}, {0.517281, -0.426082}, {0.440303, -0.363863}, {0.414205, -0.343879}, {0.440819, -0.366376}, {0.517661, -0.429242}, {0.715567, -0.591908}, {0.867818, -0.718954}, {0.962938, -0.799185}, {0.962965, -0.799541}, {0.867722, -0.719489}, {0.715028, -0.5916}, {0.558272, -0.461703}, {0.439627, -0.365042}, {0.378583, -0.316396}, {0.379025, -0.317238}, {0.440662, -0.366905}, {0.559279, -0.463209}, {0.828, -0.684575}, {0.95621, -0.79272}, {1.00468, -0.834531}, {0.955213, -0.793591}, {0.826086, -0.685655}, {0.66216, -0.549645}, {0.512582, -0.427217}, {0.412397, -0.346391}, {0.37819, -0.318824}, {0.413906, -0.34669}, {0.515009, -0.427307}, {0.664666, -0.549073}, {0.911802, -0.753779}, {0.982307, -0.814784}, {0.98149, -0.815631}, {0.909447, -0.75593}, {0.784343, -0.652083}, {0.638684, -0.532487}, {0.511624, -0.429351}, {0.438347, -0.369906}, {0.439502, -0.369508}, {0.514655, -0.4281}, {0.642532, -0.530388}, {0.787852, -0.649535}, {0.94453, -0.781219}, {0.962011, -0.79828}, {0.94307, -0.783709}, {0.884037, -0.734886}, {0.783612, -0.652211}, {0.66033, -0.55168}, {0.555968, -0.466755}, {0.515608, -0.432876}, {0.558439, -0.465275}, {0.664239, -0.548746}, {0.787542, -0.648241}, {0.886935, -0.730943}}; - - const std::vector> wfcr_2 = {{-1.04493, 0.615688}, {-1.06977, 0.631876}, {-1.11054, 0.657279}, {-1.09964, 0.652241}, {-1.01219, 0.601667}, {-0.900492, 0.535509}, {-0.851148, 0.504342}, {-0.905186, 0.532964}, {-1.01925, 0.597305}, {-1.10611, 0.647275}, {-1.11469, 0.65304}, {-1.07155, 0.629455}, {-1.06919, 0.632572}, {-1.13929, 0.676268}, {-1.20108, 0.714099}, {-1.17741, 0.70052}, {-1.07525, 0.639493}, {-0.983179, 0.583099}, {-0.986424, 0.581855}, {-1.0835, 0.635772}, {-1.1872, 0.694674}, {-1.20917, 0.707372}, {-1.14414, 0.670785}, {-1.07073, 0.630447}, {-1.1097, 0.659275}, {-1.20066, 0.715109}, {-1.23859, 0.737959}, {-1.17679, 0.700538}, {-1.06941, 0.635141}, {-1.01939, 0.602723}, {-1.07668, 0.633135}, {-1.18832, 0.695962}, {-1.25024, 0.730935}, {-1.20931, 0.707519}, {-1.11409, 0.654257}, {-1.06425, 0.628851}, {-1.09915, 0.655024}, {-1.17668, 0.701808}, {-1.17599, 0.700685}, {-1.09784, 0.652789}, {-1.02166, 0.605407}, {-1.02577, 0.604855}, {-1.1085, 0.650449}, {-1.18919, 0.69552}, {-1.1883, 0.694368}, {-1.10665, 0.648136}, {-1.02461, 0.603665}, {-1.02207, 0.606491}, {-1.01184, 0.603829}, {-1.07352, 0.639851}, {-1.06674, 0.63446}, {-1.01946, 0.604735}, {-0.995659, 0.588429}, {-1.02691, 0.604062}, {-1.0787, 0.631808}, {-1.08586, 0.634447}, {-1.02126, 0.597121}, {-0.928339, 0.545466}, {-0.883314, 0.523111}, {-0.923441, 0.550196}, {-0.899158, 0.535895}, {-0.979266, 0.581943}, {-1.01385, 0.601005}, {-1.02051, 0.603424}, {-1.02385, 0.603299}, {-1.02247, 0.599959}, {-0.98985, 0.578848}, {-0.908372, 0.530875}, {-0.800363, 0.469599}, {-0.72164, 0.426891}, {-0.719673, 0.428941}, {-0.794487, 0.474495}, {-0.847753, 0.503045}, {-0.979917, 0.579784}, {-1.06852, 0.631067}, {-1.10083, 0.648709}, {-1.07326, 0.630403}, {-0.987296, 0.577914}, {-0.854969, 0.499752}, {-0.706649, 0.41444}, {-0.587992, 0.347976}, {-0.541792, 0.323726}, {-0.585514, 0.350606}, {-0.70153, 0.418275}, {-0.899908, 0.531212}, {-1.07557, 0.634031}, {-1.17943, 0.694395}, {-1.18113, 0.693788}, {-1.07976, 0.632306}, {-0.904516, 0.528696}, {-0.704858, 0.413064}, {-0.53476, 0.316459}, {-0.437762, 0.262493}, {-0.437345, 0.263282}, {-0.533149, 0.31855}, {-0.701541, 0.415762}, {-1.01368, 0.596358}, {-1.18014, 0.694045}, {-1.24311, 0.730044}, {-1.18206, 0.692411}, {-1.01616, 0.593956}, {-0.796338, 0.466089}, {-0.585168, 0.345371}, {-0.43641, 0.261419}, {-0.383443, 0.231703}, {-0.436798, 0.261883}, {-0.584997, 0.346602}, {-0.794811, 0.468186}, {-1.10211, 0.647408}, {-1.20487, 0.707561}, {-1.20547, 0.706679}, {-1.10324, 0.645443}, {-0.9249, 0.54126}, {-0.718091, 0.422601}, {-0.538746, 0.320817}, {-0.435585, 0.262183}, {-0.436396, 0.261854}, {-0.540445, 0.320361}, {-0.719187, 0.423026}, {-0.924581, 0.542895}, {-1.113, 0.653554}, {-1.14286, 0.670879}, {-1.11329, 0.652757}, {-1.02355, 0.60014}, {-0.881332, 0.518509}, {-0.717047, 0.425022}, {-0.583374, 0.348633}, {-0.532489, 0.318429}, {-0.585722, 0.347216}, {-0.720151, 0.423379}, {-0.883396, 0.517889}, {-1.02402, 0.600711}, {-1.0714, 0.629639}, {-1.07118, 0.629932}, {-1.06498, 0.626702}, {-1.02219, 0.60281}, {-0.922587, 0.54634}, {-0.793452, 0.472108}, {-0.701665, 0.418007}, {-0.703508, 0.416851}, {-0.797895, 0.469267}, {-0.927254, 0.543205}, {-1.02524, 0.600537}, {-1.06618, 0.625584}, {-1.07066, 0.632364}, {-1.14196, 0.676121}, {-1.20383, 0.713861}, {-1.17911, 0.700059}, {-1.07535, 0.638753}, {-0.981919, 0.582124}, {-0.984444, 0.580758}, {-1.0813, 0.634679}, {-1.18499, 0.693687}, {-1.20712, 0.706558}, {-1.14271, 0.670185}, {-1.07059, 0.630066}, {-1.14113, 0.677179}, {-1.24972, 0.743092}, {-1.30064, 0.77366}, {-1.23971, 0.737078}, {-1.12538, 0.667908}, {-1.07096, 0.633052}, {-1.13158, 0.665463}, {-1.24888, 0.731698}, {-1.30874, 0.765641}, {-1.25458, 0.734583}, {-1.14303, 0.671605}, {-1.08667, 0.641951}, {-1.20279, 0.716023}, {-1.30017, 0.774582}, {-1.29903, 0.773363}, {-1.20048, 0.713583}, {-1.10409, 0.654302}, {-1.10804, 0.65355}, {-1.21047, 0.710638}, {-1.31077, 0.767229}, {-1.3097, 0.766012}, {-1.20837, 0.708204}, {-1.10709, 0.652335}, {-1.10534, 0.655524}, {-1.17844, 0.702482}, {-1.23876, 0.738047}, {-1.19943, 0.713613}, {-1.10865, 0.658222}, {-1.06494, 0.630025}, {-1.11649, 0.657392}, {-1.21185, 0.710495}, {-1.25126, 0.731794}, {-1.18768, 0.694769}, {-1.0758, 0.631837}, {-1.01978, 0.603169}, {-1.07114, 0.637261}, {-1.07458, 0.640304}, {-1.12296, 0.667999}, {-1.10069, 0.653581}, {-1.06231, 0.629345}, {-1.06618, 0.629337}, {-1.11071, 0.652682}, {-1.13538, 0.664695}, {-1.08553, 0.634604}, {-0.975045, 0.571348}, {-0.882132, 0.520308}, {-0.879736, 0.522713}, {-0.967961, 0.577041}, {-0.979676, 0.582276}, {-1.06587, 0.632036}, {-1.10142, 0.651953}, {-1.11062, 0.655856}, {-1.1075, 0.65173}, {-1.07562, 0.630549}, {-0.989725, 0.578822}, {-0.856301, 0.501377}, {-0.728391, 0.429099}, {-0.674072, 0.40052}, {-0.724417, 0.43233}, {-0.848649, 0.505872}, {-0.979843, 0.579951}, {-1.12384, 0.663901}, {-1.20145, 0.708602}, {-1.20388, 0.708299}, {-1.13006, 0.662763}, {-0.987367, 0.57766}, {-0.802035, 0.469571}, {-0.624138, 0.367771}, {-0.513752, 0.306069}, {-0.512452, 0.307222}, {-0.620172, 0.37061}, {-0.795639, 0.472713}, {-1.07506, 0.633833}, {-1.2403, 0.730333}, {-1.3018, 0.765187}, {-1.24365, 0.729105}, {-1.08006, 0.631723}, {-0.852938, 0.499052}, {-0.622565, 0.366591}, {-0.45203, 0.269866}, {-0.388963, 0.234878}, {-0.450838, 0.27105}, {-0.619713, 0.368657}, {-0.848402, 0.501463}, {-1.17916, 0.693359}, {-1.30199, 0.764703}, {-1.30342, 0.763947}, {-1.18252, 0.691534}, {-0.97088, 0.56762}, {-0.724971, 0.42592}, {-0.511241, 0.304164}, {-0.387754, 0.234222}, {-0.38784, 0.234322}, {-0.510919, 0.304677}, {-0.723214, 0.42719}, {-0.967602, 0.569545}, {-1.20358, 0.706572}, {-1.25131, 0.733695}, {-1.20587, 0.705777}, {-1.07361, 0.628004}, {-0.879535, 0.516072}, {-0.671022, 0.397126}, {-0.509763, 0.305332}, {-0.449406, 0.270429}, {-0.510742, 0.304617}, {-0.671518, 0.396441}, {-0.878216, 0.516153}, {-1.07083, 0.628829}, {-1.14175, 0.670052}, {-1.14289, 0.67034}, {-1.10746, 0.649425}, {-1.01958, 0.599055}, {-0.878265, 0.518646}, {-0.722197, 0.429517}, {-0.618564, 0.369407}, {-0.619678, 0.368504}, {-0.724415, 0.427276}, {-0.879343, 0.516117}, {-1.01841, 0.597142}, {-1.10517, 0.648415}, {-1.07089, 0.629711}, {-1.08784, 0.640443}, {-1.10671, 0.65259}, {-1.07164, 0.63361}, {-0.967419, 0.573961}, {-0.848169, 0.504282}, {-0.796655, 0.472531}, {-0.851287, 0.501844}, {-0.971227, 0.56971}, {-1.07353, 0.628657}, {-1.10617, 0.648262}, {-1.08661, 0.637928}, {-1.11352, 0.659089}, {-1.20587, 0.714958}, {-1.24309, 0.737564}, {-1.17881, 0.699564}, {-1.06849, 0.633478}, {-1.0163, 0.600639}, {-1.0726, 0.63113}, {-1.18407, 0.694443}, {-1.24624, 0.729989}, {-1.20607, 0.706959}, {-1.11256, 0.653862}, {-1.06537, 0.62855}, {-1.20489, 0.715789}, {-1.30261, 0.774429}, {-1.30082, 0.773075}, {-1.20094, 0.712933}, {-1.10316, 0.653288}, {-1.10616, 0.652442}, {-1.2082, 0.709777}, {-1.30851, 0.766763}, {-1.30772, 0.765808}, {-1.20699, 0.708014}, {-1.10674, 0.652034}, {-1.10632, 0.655189}, {-1.24196, 0.738968}, {-1.30045, 0.773641}, {-1.24726, 0.741281}, {-1.13861, 0.675603}, {-1.08631, 0.642631}, {-1.14508, 0.674583}, {-1.25718, 0.737854}, {-1.30991, 0.767062}, {-1.24841, 0.731}, {-1.13115, 0.664375}, {-1.07224, 0.633464}, {-1.12816, 0.669934}, {-1.17821, 0.700917}, {-1.20023, 0.71342}, {-1.13771, 0.675491}, {-1.06857, 0.633331}, {-1.07204, 0.633353}, {-1.14667, 0.674633}, {-1.21128, 0.710071}, {-1.18787, 0.695054}, {-1.08323, 0.634527}, {-0.986582, 0.580744}, {-0.984499, 0.583235}, {-1.07704, 0.640412}, {-1.06784, 0.634178}, {-1.10102, 0.653052}, {-1.08316, 0.641724}, {-1.0696, 0.632519}, {-1.08898, 0.641911}, {-1.11056, 0.652098}, {-1.07799, 0.631063}, {-0.974995, 0.570435}, {-0.854717, 0.501743}, {-0.799953, 0.472682}, {-0.850384, 0.505045}, {-0.966944, 0.574877}, {-1.01415, 0.600477}, {-1.10138, 0.651245}, {-1.13891, 0.672627}, {-1.14134, 0.672702}, {-1.1078, 0.650989}, {-1.02241, 0.599037}, {-0.883392, 0.516958}, {-0.728201, 0.427206}, {-0.623299, 0.368098}, {-0.621454, 0.369282}, {-0.722947, 0.429979}, {-0.875709, 0.519656}, {-1.06812, 0.630338}, {-1.20095, 0.707869}, {-1.24904, 0.735132}, {-1.20449, 0.707355}, {-1.07385, 0.629166}, {-0.881776, 0.516164}, {-0.674754, 0.396097}, {-0.513634, 0.303952}, {-0.45194, 0.269769}, {-0.511184, 0.305241}, {-0.670112, 0.398045}, {-0.875788, 0.517966}, {-1.17817, 0.693416}, {-1.30084, 0.764601}, {-1.30242, 0.7641}, {-1.18214, 0.69212}, {-0.971424, 0.568318}, {-0.726289, 0.426163}, {-0.512779, 0.303672}, {-0.388904, 0.233297}, {-0.3883, 0.233598}, {-0.510769, 0.304568}, {-0.722696, 0.427561}, {-0.966851, 0.569916}, {-1.24109, 0.728966}, {-1.3023, 0.763707}, {-1.24407, 0.728168}, {-1.08036, 0.631761}, {-0.852769, 0.499772}, {-0.621637, 0.367132}, {-0.45052, 0.269493}, {-0.387539, 0.233563}, {-0.450217, 0.269405}, {-0.620134, 0.367305}, {-0.849488, 0.500483}, {-1.07618, 0.63282}, {-1.20341, 0.705967}, {-1.20521, 0.706043}, {-1.13058, 0.661754}, {-0.986483, 0.578209}, {-0.799278, 0.470884}, {-0.619924, 0.36839}, {-0.50952, 0.304951}, {-0.509893, 0.304472}, {-0.62015, 0.367231}, {-0.797705, 0.469649}, {-0.982737, 0.577377}, {-1.12646, 0.661401}, {-1.11236, 0.652928}, {-1.10779, 0.650208}, {-1.07401, 0.631043}, {-0.985667, 0.580886}, {-0.850086, 0.503365}, {-0.721652, 0.429122}, {-0.669176, 0.397736}, {-0.723064, 0.427427}, {-0.850822, 0.500367}, {-0.983821, 0.57733}, {-1.07008, 0.627881}, {-1.10454, 0.648347}, {-1.06606, 0.627901}, {-1.10813, 0.653696}, {-1.13019, 0.667865}, {-1.07805, 0.638393}, {-0.966779, 0.573489}, {-0.875544, 0.519073}, {-0.877057, 0.517943}, {-0.969825, 0.57009}, {-1.07964, 0.633012}, {-1.1288, 0.661633}, {-1.10523, 0.648594}, {-1.0646, 0.625919}, {-1.10452, 0.654055}, {-1.18302, 0.701075}, {-1.18079, 0.699708}, {-1.09935, 0.651024}, {-1.01976, 0.602869}, {-1.0216, 0.602244}, {-1.10343, 0.648611}, {-1.18411, 0.694744}, {-1.18376, 0.694186}, {-1.10341, 0.647791}, {-1.02382, 0.602792}, {-1.02457, 0.605343}, {-1.182, 0.701323}, {-1.24273, 0.737311}, {-1.20227, 0.712744}, {-1.10938, 0.656802}, {-1.0635, 0.628242}, {-1.11361, 0.655887}, {-1.20837, 0.709731}, {-1.24781, 0.731578}, {-1.18471, 0.694405}, {-1.07387, 0.630771}, {-1.01956, 0.601495}, {-1.07302, 0.63559}, {-1.17998, 0.700155}, {-1.20233, 0.713009}, {-1.13938, 0.675057}, {-1.06929, 0.6327}, {-1.07172, 0.632702}, {-1.1456, 0.674243}, {-1.20984, 0.709956}, {-1.18637, 0.694859}, {-1.08187, 0.633818}, {-0.985647, 0.579423}, {-0.984349, 0.581663}, {-1.07791, 0.639116}, {-1.0996, 0.651507}, {-1.10962, 0.65697}, {-1.06894, 0.632458}, {-1.04524, 0.617755}, {-1.07315, 0.632808}, {-1.11669, 0.656378}, {-1.10742, 0.648933}, {-1.01953, 0.596458}, {-0.905076, 0.530223}, {-0.851508, 0.501191}, {-0.901462, 0.533148}, {-1.01305, 0.600326}, {-1.0203, 0.60305}, {-1.06264, 0.627693}, {-1.06956, 0.631499}, {-1.07127, 0.631833}, {-1.06741, 0.628131}, {-1.02698, 0.602525}, {-0.928732, 0.543495}, {-0.79891, 0.46733}, {-0.704322, 0.413299}, {-0.702406, 0.414261}, {-0.793746, 0.469485}, {-0.921849, 0.545315}, {-1.02066, 0.601756}, {-1.11019, 0.654216}, {-1.14079, 0.67186}, {-1.11263, 0.654448}, {-1.02511, 0.601767}, {-0.885157, 0.518572}, {-0.7219, 0.42267}, {-0.587234, 0.344633}, {-0.533765, 0.314734}, {-0.584189, 0.345469}, {-0.716846, 0.423727}, {-0.879668, 0.519176}, {-1.09999, 0.647331}, {-1.20253, 0.707144}, {-1.20356, 0.707013}, {-1.10282, 0.646961}, {-0.926639, 0.543028}, {-0.721512, 0.423028}, {-0.542383, 0.319125}, {-0.437928, 0.259211}, {-0.436833, 0.259377}, {-0.539418, 0.319564}, {-0.717516, 0.423597}, {-0.922708, 0.543563}, {-1.17912, 0.692928}, {-1.24174, 0.728813}, {-1.18134, 0.692403}, {-1.01687, 0.595516}, {-0.798379, 0.468055}, {-0.587552, 0.346047}, {-0.438091, 0.260123}, {-0.384093, 0.229365}, {-0.43687, 0.260139}, {-0.585073, 0.346261}, {-0.794943, 0.468596}, {-1.0134, 0.59624}, {-1.17953, 0.69234}, {-1.18111, 0.692221}, {-1.08034, 0.632519}, {-0.905602, 0.530613}, {-0.705634, 0.41509}, {-0.534527, 0.316801}, {-0.436732, 0.260698}, {-0.436544, 0.260534}, {-0.533502, 0.316457}, {-0.703025, 0.414865}, {-0.901596, 0.53067}, {-1.07652, 0.632739}, {-1.10169, 0.646366}, {-1.07386, 0.629462}, {-0.987618, 0.579122}, {-0.854223, 0.502221}, {-0.704195, 0.416081}, {-0.584345, 0.34711}, {-0.538627, 0.320402}, {-0.584518, 0.346398}, {-0.703109, 0.414803}, {-0.850786, 0.500677}, {-0.982751, 0.577725}, {-1.07026, 0.628631}, {-1.02438, 0.601959}, {-1.02192, 0.600836}, {-0.98774, 0.581656}, {-0.904114, 0.533809}, {-0.79445, 0.470359}, {-0.716003, 0.4243}, {-0.716668, 0.423722}, {-0.79527, 0.468538}, {-0.902875, 0.530746}, {-0.983777, 0.577929}, {-1.01729, 0.597687}, {-1.02232, 0.600718}, {-1.02563, 0.605009}, {-1.07541, 0.635206}, {-1.0804, 0.638865}, {-1.01412, 0.600199}, {-0.92128, 0.545227}, {-0.878868, 0.519145}, {-0.923384, 0.543748}, {-1.01594, 0.596785}, {-1.07964, 0.63358}, {-1.07226, 0.629465}, {-1.02276, 0.601203}, {-0.996484, 0.586831}, {-1.01764, 0.601283}, {-1.08006, 0.638125}, {-1.07164, 0.632736}, {-1.02117, 0.602376}, {-0.994184, 0.585759}, {-1.02338, 0.602105}, {-1.07441, 0.63122}, {-1.08158, 0.634721}, {-1.01751, 0.596905}, {-0.925899, 0.543716}, {-0.883295, 0.51999}, {-0.926588, 0.546849}, {-1.07928, 0.638003}, {-1.12852, 0.666717}, {-1.1052, 0.652351}, {-1.06444, 0.627723}, {-1.06573, 0.627793}, {-1.10846, 0.651937}, {-1.13229, 0.664716}, {-1.08227, 0.634346}, {-0.97208, 0.569569}, {-0.880115, 0.516712}, {-0.879597, 0.518299}, {-0.970382, 0.573297}, {-1.07181, 0.632878}, {-1.10599, 0.65259}, {-1.08756, 0.64134}, {-1.07226, 0.632033}, {-1.08965, 0.641667}, {-1.10974, 0.652268}, {-1.07634, 0.631105}, {-0.972939, 0.569345}, {-0.852578, 0.498928}, {-0.798308, 0.468614}, {-0.850135, 0.501029}, {-0.968836, 0.572095}, {-1.02308, 0.602803}, {-1.06604, 0.627856}, {-1.07256, 0.631719}, {-1.07321, 0.63208}, {-1.06817, 0.628492}, {-1.02686, 0.602845}, {-0.928066, 0.543288}, {-0.797879, 0.466131}, {-0.703114, 0.411117}, {-0.701461, 0.411711}, {-0.793734, 0.467404}, {-0.923278, 0.544201}, {-0.996552, 0.585947}, {-1.06638, 0.627066}, {-1.08855, 0.640374}, {-1.06695, 0.627687}, {-0.998424, 0.586746}, {-0.882562, 0.517475}, {-0.740561, 0.433051}, {-0.619411, 0.361755}, {-0.570359, 0.333737}, {-0.616389, 0.361889}, {-0.736227, 0.433006}, {-0.878979, 0.516988}, {-1.02387, 0.601419}, {-1.10642, 0.650034}, {-1.10644, 0.650222}, {-1.02442, 0.60194}, {-0.881877, 0.517732}, {-0.716058, 0.419767}, {-0.570909, 0.334288}, {-0.485779, 0.284589}, {-0.484422, 0.284385}, {-0.567689, 0.333735}, {-0.712813, 0.419026}, {-0.879963, 0.517007}, {-1.07186, 0.629553}, {-1.12788, 0.662279}, {-1.07234, 0.62956}, {-0.926374, 0.543807}, {-0.741121, 0.435112}, {-0.571991, 0.336067}, {-0.458048, 0.269567}, {-0.417794, 0.246316}, {-0.456244, 0.269076}, {-0.569351, 0.335394}, {-0.738834, 0.434614}, {-0.925054, 0.543618}, {-1.07728, 0.632698}, {-1.07801, 0.632597}, {-0.971053, 0.569618}, {-0.799145, 0.46903}, {-0.622477, 0.366075}, {-0.488434, 0.288236}, {-0.418855, 0.247976}, {-0.418257, 0.247793}, {-0.486751, 0.287841}, {-0.620063, 0.365782}, {-0.796599, 0.469021}, {-0.969105, 0.569791}, {-1.01413, 0.595421}, {-0.970685, 0.569339}, {-0.85451, 0.501219}, {-0.70756, 0.415738}, {-0.574974, 0.339005}, {-0.487221, 0.288358}, {-0.456992, 0.270943}, {-0.486623, 0.288223}, {-0.573232, 0.338789}, {-0.704434, 0.415518}, {-0.850838, 0.501053}, {-0.968158, 0.569254}, {-0.92519, 0.543229}, {-0.882194, 0.51778}, {-0.803052, 0.471756}, {-0.706815, 0.416138}, {-0.619971, 0.365984}, {-0.568649, 0.336233}, {-0.568759, 0.336209}, {-0.619567, 0.365764}, {-0.704601, 0.415476}, {-0.798918, 0.470675}, {-0.87795, 0.516724}, {-0.923379, 0.542786}, {-0.884667, 0.520219}, {-0.883259, 0.51966}, {-0.854793, 0.503429}, {-0.797038, 0.469961}, {-0.736807, 0.434731}, {-0.711432, 0.419602}, {-0.737571, 0.434541}, {-0.796883, 0.469038}, {-0.852281, 0.501427}, {-0.879063, 0.517115}, {-0.881391, 0.518406}, {-0.879834, 0.517378}, {-0.927968, 0.547149}, {-0.97308, 0.574077}, {-0.971079, 0.572991}, {-0.923322, 0.544691}, {-0.876938, 0.516942}, {-0.877867, 0.516857}, {-0.925038, 0.543949}, {-0.97148, 0.570775}, {-0.971238, 0.570472}, {-0.925198, 0.54363}, {-0.880027, 0.517624}, {-0.881342, 0.519098}, {-0.905261, 0.532232}, {-0.986474, 0.579813}, {-1.01989, 0.599225}, {-1.0238, 0.601451}, {-1.02426, 0.601747}, {-1.02099, 0.599699}, {-0.987607, 0.579669}, {-0.905969, 0.531174}, {-0.798101, 0.467542}, {-0.72016, 0.42201}, {-0.720125, 0.422628}, {-0.797852, 0.468896}, {-0.986293, 0.579881}, {-1.07406, 0.631167}, {-1.10871, 0.651354}, {-1.11517, 0.655243}, {-1.10903, 0.651682}, {-1.07501, 0.631306}, {-0.988028, 0.579365}, {-0.85407, 0.499886}, {-0.725942, 0.424484}, {-0.672192, 0.393574}, {-0.724529, 0.425328}, {-0.852022, 0.500918}, {-1.02151, 0.599866}, {-1.11025, 0.651759}, {-1.14672, 0.673324}, {-1.14635, 0.673516}, {-1.10985, 0.652165}, {-1.02238, 0.600139}, {-0.882131, 0.516646}, {-0.726101, 0.424177}, {-0.620723, 0.36236}, {-0.619458, 0.362492}, {-0.72324, 0.42442}, {-0.879634, 0.516698}, {-1.02751, 0.602403}, {-1.11779, 0.655467}, {-1.14703, 0.673228}, {-1.11639, 0.655914}, {-1.02655, 0.603206}, {-0.88504, 0.519278}, {-0.720782, 0.42163}, {-0.585325, 0.341387}, {-0.531499, 0.309997}, {-0.582725, 0.340861}, {-0.717742, 0.420747}, {-0.883837, 0.518304}, {-1.02796, 0.602183}, {-1.11047, 0.651014}, {-1.10939, 0.651263}, {-1.02593, 0.602986}, {-0.882233, 0.518555}, {-0.715708, 0.419907}, {-0.570063, 0.333351}, {-0.484523, 0.282643}, {-0.483116, 0.282058}, {-0.567128, 0.331875}, {-0.713848, 0.418182}, {-0.882855, 0.517167}, {-1.02199, 0.599068}, {-1.07366, 0.629911}, {-1.02043, 0.599504}, {-0.884401, 0.520205}, {-0.716345, 0.421387}, {-0.56779, 0.333442}, {-0.47071, 0.275723}, {-0.436787, 0.255572}, {-0.468615, 0.274475}, {-0.565496, 0.331577}, {-0.715802, 0.419703}, {-0.885756, 0.519153}, {-0.985163, 0.578322}, {-0.984799, 0.578416}, {-0.880689, 0.517839}, {-0.722333, 0.425213}, {-0.5733, 0.337599}, {-0.473054, 0.278322}, {-0.426851, 0.250876}, {-0.425935, 0.250373}, {-0.47102, 0.277097}, {-0.57163, 0.336279}, {-0.721943, 0.424302}, {-0.881215, 0.517432}, {-0.902077, 0.530131}, {-0.851875, 0.500612}, {-0.727772, 0.42798}, {-0.590537, 0.347631}, {-0.490625, 0.289009}, {-0.440981, 0.259799}, {-0.427392, 0.251893}, {-0.439815, 0.259496}, {-0.488748, 0.288593}, {-0.588595, 0.347321}, {-0.726286, 0.427859}, {-0.851099, 0.500605}, {-0.795741, 0.467606}, {-0.727098, 0.427028}, {-0.626118, 0.367814}, {-0.539122, 0.316956}, {-0.489706, 0.288146}, {-0.472129, 0.278046}, {-0.471836, 0.27824}, {-0.488623, 0.28861}, {-0.536973, 0.317434}, {-0.623193, 0.368112}, {-0.724465, 0.427131}, {-0.794673, 0.46762}, {-0.720678, 0.423073}, {-0.676324, 0.396777}, {-0.626258, 0.367444}, {-0.589273, 0.345945}, {-0.570823, 0.335379}, {-0.566018, 0.332904}, {-0.570768, 0.336172}, {-0.588258, 0.346969}, {-0.623633, 0.368075}, {-0.672792, 0.396846}, {-0.718107, 0.422911}, {-0.737603, 0.433613}, {-0.722283, 0.423834}, {-0.728986, 0.42768}, {-0.727991, 0.427139}, {-0.720161, 0.422664}, {-0.713041, 0.418684}, {-0.713393, 0.41919}, {-0.720525, 0.423738}, {-0.727079, 0.427877}, {-0.726446, 0.427577}, {-0.719392, 0.423225}, {-0.713255, 0.419219}, {-0.714531, 0.419555}, {-0.799373, 0.469489}, {-0.854376, 0.501776}, {-0.880596, 0.517094}, {-0.881919, 0.517847}, {-0.879022, 0.516233}, {-0.882802, 0.518575}, {-0.881332, 0.517737}, {-0.853975, 0.501544}, {-0.797942, 0.468444}, {-0.73916, 0.433814}, {-0.71441, 0.419334}, {-0.740444, 0.434774}, {-0.854991, 0.500054}, {-0.988714, 0.578671}, {-1.07639, 0.630481}, {-1.106, 0.648363}, {-1.07561, 0.630936}, {-0.98788, 0.579518}, {-0.854852, 0.501122}, {-0.706168, 0.413345}, {-0.587145, 0.343059}, {-0.541148, 0.315861}, {-0.586502, 0.342447}, {-0.705576, 0.412342}, {-0.989327, 0.579265}, {-1.13501, 0.664759}, {-1.21114, 0.709777}, {-1.2101, 0.70974}, {-1.13284, 0.664816}, {-0.988005, 0.57971}, {-0.801632, 0.469741}, {-0.622966, 0.36422}, {-0.511953, 0.298751}, {-0.511106, 0.298363}, {-0.621344, 0.363315}, {-0.801058, 0.468872}, {-1.0793, 0.631768}, {-1.21307, 0.710265}, {-1.25875, 0.737693}, {-1.21017, 0.710106}, {-1.07603, 0.631937}, {-0.881893, 0.517766}, {-0.673716, 0.394781}, {-0.51159, 0.298897}, {-0.449334, 0.26217}, {-0.509696, 0.297844}, {-0.672192, 0.393401}, {-0.882901, 0.516871}, {-1.1106, 0.649654}, {-1.2128, 0.709962}, {-1.21081, 0.70994}, {-1.10632, 0.649904}, {-0.927359, 0.545417}, {-0.720736, 0.423647}, {-0.540637, 0.316915}, {-0.435294, 0.25434}, {-0.434083, 0.253519}, {-0.538503, 0.314981}, {-0.720599, 0.421735}, {-0.930431, 0.544346}, {-1.07923, 0.631452}, {-1.13403, 0.664443}, {-1.07582, 0.631816}, {-0.927302, 0.545923}, {-0.740516, 0.436481}, {-0.570648, 0.335906}, {-0.456112, 0.26754}, {-0.415358, 0.242998}, {-0.454166, 0.265765}, {-0.569239, 0.333348}, {-0.741985, 0.434341}, {-0.931255, 0.544775}, {-0.988196, 0.5792}, {-0.98678, 0.579449}, {-0.881273, 0.518924}, {-0.721905, 0.426146}, {-0.572437, 0.338054}, {-0.472017, 0.278022}, {-0.425594, 0.249832}, {-0.424547, 0.24896}, {-0.47006, 0.275868}, {-0.571895, 0.33565}, {-0.723826, 0.424366}, {-0.88424, 0.518015}, {-0.852081, 0.500741}, {-0.799693, 0.470788}, {-0.674951, 0.398321}, {-0.545042, 0.322126}, {-0.46119, 0.272203}, {-0.428512, 0.252143}, {-0.422002, 0.247952}, {-0.426989, 0.251169}, {-0.459488, 0.270718}, {-0.544554, 0.320731}, {-0.675807, 0.39739}, {-0.800728, 0.470367}, {-0.702968, 0.413776}, {-0.623145, 0.367063}, {-0.516467, 0.304462}, {-0.443168, 0.261075}, {-0.42274, 0.248531}, {-0.428859, 0.25187}, {-0.428239, 0.251868}, {-0.421193, 0.248522}, {-0.441405, 0.261049}, {-0.515109, 0.304423}, {-0.622407, 0.367025}, {-0.702752, 0.41376}, {-0.586221, 0.344444}, {-0.515515, 0.302523}, {-0.456974, 0.267827}, {-0.442766, 0.259231}, {-0.460513, 0.269644}, {-0.472793, 0.277306}, {-0.459831, 0.270586}, {-0.441288, 0.260678}, {-0.454798, 0.269209}, {-0.513224, 0.303469}, {-0.584727, 0.344884}, {-0.617478, 0.363388}, {-0.542921, 0.317484}, {-0.516465, 0.301428}, {-0.516762, 0.301423}, {-0.544064, 0.31763}, {-0.571358, 0.334191}, {-0.571299, 0.334997}, {-0.54357, 0.319674}, {-0.515301, 0.303841}, {-0.514096, 0.303413}, {-0.540611, 0.318664}, {-0.568043, 0.333992}, {-0.56901, 0.333618}, {-0.589065, 0.343441}, {-0.625492, 0.364584}, {-0.675477, 0.39411}, {-0.720855, 0.421284}, {-0.739418, 0.432921}, {-0.720916, 0.42282}, {-0.675078, 0.396514}, {-0.624235, 0.366955}, {-0.587287, 0.345145}, {-0.569362, 0.334102}, {-0.565215, 0.330882}, {-0.57068, 0.333266}, {-0.706877, 0.41252}, {-0.802308, 0.468612}, {-0.881907, 0.515721}, {-0.926581, 0.542539}, {-0.926536, 0.543113}, {-0.881726, 0.517212}, {-0.80192, 0.470464}, {-0.706327, 0.414159}, {-0.62062, 0.363464}, {-0.57, 0.333274}, {-0.570207, 0.332912}, {-0.621126, 0.362399}, {-0.90873, 0.530699}, {-1.08565, 0.635072}, {-1.188, 0.695829}, {-1.18662, 0.69561}, {-1.08251, 0.634875}, {-0.905949, 0.531375}, {-0.705979, 0.413922}, {-0.535547, 0.313587}, {-0.437947, 0.255777}, {-0.437593, 0.254904}, {-0.535213, 0.3116}, {-0.707025, 0.412153}, {-1.08689, 0.635973}, {-1.25264, 0.73346}, {-1.31127, 0.768447}, {-1.24889, 0.732614}, {-1.08208, 0.635364}, {-0.853578, 0.501501}, {-0.622781, 0.365838}, {-0.45166, 0.264924}, {-0.388031, 0.227055}, {-0.450773, 0.263432}, {-0.622945, 0.364108}, {-0.856448, 0.500854}, {-1.19134, 0.697143}, {-1.31299, 0.768776}, {-1.31039, 0.768294}, {-1.18545, 0.696338}, {-0.971812, 0.571913}, {-0.725656, 0.427572}, {-0.511728, 0.301479}, {-0.387194, 0.227697}, {-0.386477, 0.226781}, {-0.510983, 0.29949}, {-0.727508, 0.426065}, {-0.976979, 0.571804}, {-1.19068, 0.696587}, {-1.25079, 0.732704}, {-1.1858, 0.696342}, {-1.01738, 0.599244}, {-0.796976, 0.470654}, {-0.585708, 0.346253}, {-0.435927, 0.257375}, {-0.381444, 0.224607}, {-0.434799, 0.255504}, {-0.585954, 0.343788}, {-0.800727, 0.469028}, {-1.02363, 0.598893}, {-1.08479, 0.635221}, {-1.08247, 0.635402}, {-0.971785, 0.572516}, {-0.797441, 0.471572}, {-0.620067, 0.367457}, {-0.486057, 0.287752}, {-0.41627, 0.245654}, {-0.415492, 0.244604}, {-0.485065, 0.2852}, {-0.621396, 0.364724}, {-0.801868, 0.469708}, {-0.97699, 0.571703}, {-0.905153, 0.53149}, {-0.852577, 0.502286}, {-0.726367, 0.429708}, {-0.588237, 0.349011}, {-0.488417, 0.289583}, {-0.438975, 0.259306}, {-0.425261, 0.250486}, {-0.437732, 0.257719}, {-0.487727, 0.28711}, {-0.589745, 0.346591}, {-0.729669, 0.427989}, {-0.855327, 0.501453}, {-0.703319, 0.41442}, {-0.62243, 0.367877}, {-0.515097, 0.305252}, {-0.441756, 0.26166}, {-0.421583, 0.248768}, {-0.42783, 0.251684}, {-0.427143, 0.251292}, {-0.420185, 0.247711}, {-0.440973, 0.260248}, {-0.515615, 0.303875}, {-0.623635, 0.366892}, {-0.703934, 0.414065}, {-0.533671, 0.314612}, {-0.453954, 0.267697}, {-0.39369, 0.231851}, {-0.38951, 0.228701}, {-0.421824, 0.247209}, {-0.440785, 0.258508}, {-0.420829, 0.247546}, {-0.388011, 0.229143}, {-0.392316, 0.232138}, {-0.453072, 0.267754}, {-0.533292, 0.314564}, {-0.57029, 0.336116}, {-0.438553, 0.256808}, {-0.392833, 0.229247}, {-0.393994, 0.229459}, {-0.441827, 0.257486}, {-0.489145, 0.285717}, {-0.488796, 0.286388}, {-0.440773, 0.259222}, {-0.392313, 0.231597}, {-0.390874, 0.231116}, {-0.436942, 0.258006}, {-0.483803, 0.28496}, {-0.48443, 0.284558}, {-0.440034, 0.255265}, {-0.455729, 0.263975}, {-0.516139, 0.299649}, {-0.58876, 0.343042}, {-0.621226, 0.363101}, {-0.588249, 0.344708}, {-0.51498, 0.302475}, {-0.45396, 0.267145}, {-0.438129, 0.257929}, {-0.455412, 0.267611}, {-0.468271, 0.274171}, {-0.45667, 0.266107}, {-0.537417, 0.311164}, {-0.625532, 0.363069}, {-0.728288, 0.424258}, {-0.798674, 0.46667}, {-0.798327, 0.467367}, {-0.727316, 0.426259}, {-0.62415, 0.366026}, {-0.535974, 0.31438}, {-0.486437, 0.285064}, {-0.469332, 0.274268}, {-0.469741, 0.273311}, {-0.487532, 0.282546}, {-0.707721, 0.411529}, {-0.856201, 0.49932}, {-0.974282, 0.569611}, {-1.01899, 0.596722}, {-0.972922, 0.570185}, {-0.854309, 0.500753}, {-0.706267, 0.413877}, {-0.573897, 0.336038}, {-0.486771, 0.284451}, {-0.456904, 0.266092}, {-0.486865, 0.282677}, {-0.574523, 0.333405}, {-1.02299, 0.598635}, {-1.1894, 0.697064}, {-1.2498, 0.733129}, {-1.18546, 0.695737}, {-1.01748, 0.597491}, {-0.79733, 0.468729}, {-0.58658, 0.345381}, {-0.437813, 0.257914}, {-0.384434, 0.225752}, {-0.438174, 0.256085}, {-0.588516, 0.343368}, {-0.801632, 0.468227}, {-1.19078, 0.697726}, {-1.31196, 0.769254}, {-1.30916, 0.768367}, {-1.18415, 0.695981}, {-0.970579, 0.571599}, {-0.72483, 0.427978}, {-0.511733, 0.302925}, {-0.388224, 0.229839}, {-0.388251, 0.228873}, {-0.512822, 0.300964}, {-0.72872, 0.426904}, {-0.977243, 0.572377}, {-1.25252, 0.733774}, {-1.31023, 0.768428}, {-1.24677, 0.732767}, {-1.0792, 0.636165}, {-0.850589, 0.503134}, {-0.620269, 0.368135}, {-0.449893, 0.267523}, {-0.386958, 0.229629}, {-0.450238, 0.265791}, {-0.622845, 0.366137}, {-0.856684, 0.502408}, {-1.08719, 0.636906}, {-1.18796, 0.696076}, {-1.18495, 0.696012}, {-1.07929, 0.636323}, {-0.902007, 0.534065}, {-0.702217, 0.417304}, {-0.532352, 0.316932}, {-0.435207, 0.258779}, {-0.435193, 0.257762}, {-0.53342, 0.314548}, {-0.706287, 0.414984}, {-0.909094, 0.532826}, {-1.08639, 0.636101}, {-1.01814, 0.597751}, {-0.970386, 0.572001}, {-0.850826, 0.503959}, {-0.702987, 0.41806}, {-0.571434, 0.34027}, {-0.484887, 0.288176}, {-0.455049, 0.269532}, {-0.484962, 0.286385}, {-0.573141, 0.337476}, {-0.707446, 0.41532}, {-0.856843, 0.502007}, {-0.97477, 0.571052}, {-0.796031, 0.469208}, {-0.724431, 0.429006}, {-0.621865, 0.369769}, {-0.53516, 0.318509}, {-0.486935, 0.288976}, {-0.470153, 0.277962}, {-0.469968, 0.277278}, {-0.487042, 0.287093}, {-0.536759, 0.315898}, {-0.62514, 0.367115}, {-0.727891, 0.427035}, {-0.797522, 0.468481}, {-0.584838, 0.345936}, {-0.512712, 0.304136}, {-0.453815, 0.269255}, {-0.440236, 0.260336}, {-0.458798, 0.270305}, {-0.471412, 0.277328}, {-0.458391, 0.269826}, {-0.440037, 0.259275}, {-0.454387, 0.267663}, {-0.5139, 0.302439}, {-0.585817, 0.344822}, {-0.617751, 0.364292}, {-0.437406, 0.257946}, {-0.391269, 0.230261}, {-0.392486, 0.230267}, {-0.440697, 0.258108}, {-0.48835, 0.286095}, {-0.488075, 0.286356}, {-0.43998, 0.258676}, {-0.391587, 0.230699}, {-0.390463, 0.230296}, {-0.436875, 0.25772}, {-0.483753, 0.285394}, {-0.483935, 0.28553}, {-0.385785, 0.224752}, {-0.392231, 0.227792}, {-0.455032, 0.264624}, {-0.536732, 0.313147}, {-0.57402, 0.335814}, {-0.536115, 0.314239}, {-0.453803, 0.266436}, {-0.390558, 0.229759}, {-0.384116, 0.226347}, {-0.415576, 0.244881}, {-0.435087, 0.255852}, {-0.416633, 0.244006}, {-0.440106, 0.254204}, {-0.515621, 0.298598}, {-0.624637, 0.363576}, {-0.705867, 0.412455}, {-0.705416, 0.413}, {-0.623349, 0.365204}, {-0.513732, 0.301146}, {-0.438066, 0.257127}, {-0.416682, 0.244805}, {-0.423233, 0.248207}, {-0.423834, 0.247287}, {-0.41827, 0.242427}, {-0.589561, 0.341428}, {-0.729069, 0.424294}, {-0.855077, 0.49969}, {-0.905735, 0.530443}, {-0.853543, 0.500136}, {-0.726651, 0.425682}, {-0.587148, 0.344}, {-0.486337, 0.285155}, {-0.437067, 0.256122}, {-0.424451, 0.24771}, {-0.437945, 0.253996}, {-0.488099, 0.282088}, {-0.801556, 0.467116}, {-0.97579, 0.570585}, {-1.08388, 0.635122}, {-1.08247, 0.634772}, {-0.972363, 0.570176}, {-0.797905, 0.467856}, {-0.620246, 0.363894}, {-0.486552, 0.285597}, {-0.417809, 0.244731}, {-0.418033, 0.243582}, {-0.487599, 0.283007}, {-0.622706, 0.361654}, {-1.10965, 0.65101}, {-1.21079, 0.711131}, {-1.20826, 0.710059}, {-1.10336, 0.648844}, {-0.924243, 0.544416}, {-0.7183, 0.424519}, {-0.540084, 0.320516}, {-0.43731, 0.259747}, {-0.438113, 0.258732}, {-0.54291, 0.318508}, {-0.723657, 0.423584}, {-0.93133, 0.545568}, {-1.21182, 0.711241}, {-1.256, 0.73798}, {-1.20609, 0.709803}, {-1.07111, 0.631903}, {-0.877161, 0.519296}, {-0.670496, 0.398656}, {-0.510842, 0.304668}, {-0.451047, 0.268372}, {-0.512848, 0.302991}, {-0.675332, 0.396892}, {-0.884895, 0.519056}, {-1.07967, 0.633252}, {-1.20972, 0.710039}, {-1.20645, 0.709786}, {-1.12718, 0.66538}, {-0.981426, 0.581637}, {-0.795717, 0.473475}, {-0.618989, 0.369437}, {-0.510313, 0.304479}, {-0.511346, 0.30353}, {-0.62263, 0.367283}, {-0.802631, 0.471574}, {-0.990581, 0.580938}, {-1.1353, 0.66563}, {-1.10424, 0.649018}, {-1.07113, 0.632162}, {-0.981394, 0.581887}, {-0.848011, 0.504798}, {-0.700556, 0.417972}, {-0.583449, 0.347961}, {-0.539142, 0.320392}, {-0.585668, 0.346231}, {-0.705652, 0.415267}, {-0.855872, 0.502135}, {-0.989913, 0.579978}, {-1.07677, 0.631228}, {-0.924009, 0.545039}, {-0.876862, 0.519905}, {-0.796041, 0.473948}, {-0.701154, 0.418152}, {-0.617103, 0.367554}, {-0.567934, 0.337124}, {-0.56887, 0.336345}, {-0.620183, 0.36534}, {-0.706598, 0.414928}, {-0.802914, 0.470492}, {-0.8828, 0.517229}, {-0.926374, 0.544028}, {-0.717393, 0.425178}, {-0.670585, 0.399036}, {-0.620299, 0.369539}, {-0.585078, 0.347812}, {-0.568818, 0.33689}, {-0.565262, 0.333697}, {-0.570292, 0.335869}, {-0.588104, 0.345608}, {-0.624537, 0.366309}, {-0.674901, 0.395645}, {-0.720158, 0.42297}, {-0.737567, 0.434958}, {-0.539442, 0.320262}, {-0.511871, 0.303883}, {-0.512536, 0.303441}, {-0.541221, 0.31934}, {-0.569817, 0.335458}, {-0.570279, 0.335327}, {-0.542523, 0.318698}, {-0.514408, 0.301887}, {-0.51385, 0.301549}, {-0.540959, 0.318058}, {-0.56805, 0.335129}, {-0.56748, 0.33604}, {-0.43746, 0.257892}, {-0.452672, 0.265945}, {-0.51339, 0.301114}, {-0.586792, 0.344189}, {-0.619905, 0.363743}, {-0.587106, 0.344438}, {-0.513736, 0.301232}, {-0.452759, 0.26559}, {-0.437264, 0.257159}, {-0.454851, 0.268413}, {-0.467503, 0.276449}, {-0.455078, 0.269016}, {-0.438703, 0.255565}, {-0.513974, 0.299445}, {-0.623115, 0.364126}, {-0.704706, 0.412806}, {-0.704563, 0.413009}, {-0.622574, 0.364719}, {-0.512886, 0.300346}, {-0.437213, 0.25657}, {-0.415979, 0.245083}, {-0.422697, 0.249493}, {-0.423244, 0.249186}, {-0.417325, 0.244282}, {-0.543151, 0.315196}, {-0.675047, 0.393466}, {-0.801031, 0.46879}, {-0.853036, 0.500088}, {-0.799929, 0.468793}, {-0.67305, 0.394009}, {-0.540705, 0.316669}, {-0.455555, 0.267677}, {-0.423304, 0.249443}, {-0.418287, 0.245957}, {-0.424648, 0.247973}, {-0.457794, 0.265668}, {-0.723195, 0.421314}, {-0.883309, 0.516813}, {-0.987705, 0.579312}, {-0.986577, 0.578825}, {-0.880376, 0.516046}, {-0.719542, 0.421598}, {-0.569005, 0.334029}, {-0.468952, 0.27624}, {-0.424209, 0.249912}, {-0.42493, 0.248861}, {-0.47107, 0.273931}, {-0.572251, 0.332207}, {-0.930661, 0.544704}, {-1.07783, 0.632375}, {-1.13263, 0.665132}, {-1.07442, 0.630815}, {-0.925447, 0.543264}, {-0.738253, 0.433963}, {-0.568962, 0.335582}, {-0.456279, 0.269836}, {-0.417773, 0.246317}, {-0.457798, 0.267946}, {-0.572286, 0.333571}, {-0.743182, 0.433634}, {-1.11706, 0.656463}, {-1.14464, 0.673436}, {-1.11251, 0.6551}, {-1.02147, 0.602427}, {-0.879756, 0.520502}, {-0.717022, 0.426186}, {-0.584683, 0.348691}, {-0.534343, 0.317812}, {-0.587821, 0.346913}, {-0.722973, 0.424257}, {-0.887441, 0.520088}, {-1.02882, 0.603639}, {-1.14503, 0.673245}, {-1.14215, 0.67305}, {-1.10347, 0.651965}, {-1.01495, 0.60155}, {-0.875566, 0.520781}, {-0.722298, 0.430863}, {-0.620614, 0.369979}, {-0.622518, 0.368974}, {-0.727856, 0.428557}, {-0.884004, 0.518671}, {-1.02437, 0.60064}, {-1.11098, 0.65206}, {-1.11276, 0.655192}, {-1.10335, 0.652221}, {-1.06692, 0.633092}, {-0.979481, 0.583027}, {-0.847324, 0.505374}, {-0.722435, 0.430777}, {-0.672011, 0.399129}, {-0.726718, 0.428976}, {-0.855318, 0.502484}, {-0.989619, 0.580052}, {-1.07648, 0.630829}, {-1.10921, 0.651047}, {-1.02138, 0.603333}, {-1.01464, 0.602294}, {-0.97934, 0.583296}, {-0.898166, 0.535699}, {-0.792642, 0.472433}, {-0.717578, 0.426351}, {-0.719855, 0.425531}, {-0.79909, 0.470018}, {-0.907516, 0.531987}, {-0.989315, 0.579107}, {-1.02234, 0.598925}, {-1.02428, 0.602035}, {-0.879469, 0.521897}, {-0.875239, 0.521424}, {-0.847141, 0.505252}, {-0.792492, 0.47204}, {-0.736017, 0.437054}, {-0.713142, 0.421708}, {-0.740207, 0.435787}, {-0.799879, 0.469154}, {-0.855876, 0.500826}, {-0.882982, 0.516646}, {-0.884015, 0.518738}, {-0.878991, 0.518584}, {-0.716712, 0.426845}, {-0.721954, 0.430288}, {-0.721974, 0.429445}, {-0.716853, 0.425024}, {-0.712423, 0.420965}, {-0.714245, 0.420629}, {-0.721741, 0.423623}, {-0.728444, 0.426391}, {-0.728185, 0.425916}, {-0.721121, 0.422809}, {-0.713604, 0.420658}, {-0.712023, 0.422312}, {-0.584246, 0.347455}, {-0.619863, 0.367543}, {-0.670681, 0.396429}, {-0.717902, 0.423371}, {-0.738138, 0.43445}, {-0.720411, 0.423002}, {-0.674652, 0.395097}, {-0.623858, 0.36491}, {-0.587194, 0.344227}, {-0.569305, 0.335587}, {-0.564246, 0.334606}, {-0.567819, 0.337851}, {-0.533451, 0.314664}, {-0.620866, 0.365225}, {-0.724074, 0.425719}, {-0.795665, 0.467732}, {-0.796426, 0.467626}, {-0.725876, 0.425255}, {-0.622675, 0.364176}, {-0.534507, 0.313134}, {-0.485271, 0.285983}, {-0.468406, 0.277793}, {-0.468399, 0.278379}, {-0.484976, 0.287408}, {-0.58629, 0.34312}, {-0.725238, 0.424946}, {-0.851612, 0.499892}, {-0.903225, 0.530304}, {-0.851867, 0.499358}, {-0.725244, 0.424248}, {-0.585612, 0.342671}, {-0.484763, 0.28516}, {-0.435776, 0.258224}, {-0.42345, 0.251509}, {-0.436708, 0.258139}, {-0.485944, 0.285239}, {-0.721074, 0.421389}, {-0.881011, 0.516467}, {-0.98582, 0.578833}, {-0.985376, 0.578198}, {-0.87965, 0.515168}, {-0.718866, 0.42065}, {-0.568146, 0.333548}, {-0.468024, 0.276761}, {-0.423433, 0.251491}, {-0.42428, 0.250931}, {-0.470191, 0.275668}, {-0.570757, 0.33309}, {-0.885804, 0.518833}, {-1.0219, 0.600042}, {-1.07367, 0.630722}, {-1.0198, 0.598373}, {-0.882177, 0.517091}, {-0.712562, 0.418363}, {-0.563839, 0.332924}, {-0.468411, 0.27824}, {-0.436962, 0.259253}, {-0.470481, 0.276772}, {-0.567437, 0.33153}, {-0.716733, 0.418563}, {-1.02799, 0.603482}, {-1.10961, 0.652286}, {-1.10785, 0.651229}, {-1.02335, 0.60134}, {-0.878572, 0.516856}, {-0.711954, 0.420536}, {-0.567972, 0.337443}, {-0.485389, 0.288975}, {-0.486686, 0.287995}, {-0.571684, 0.335511}, {-0.717425, 0.419661}, {-0.884505, 0.518018}, {-1.07232, 0.630852}, {-1.07056, 0.630918}, {-1.0632, 0.627608}, {-1.0203, 0.60372}, {-0.92158, 0.547172}, {-0.793655, 0.472723}, {-0.702726, 0.41841}, {-0.704923, 0.417269}, {-0.799497, 0.469998}, {-0.929183, 0.544382}, {-1.02747, 0.602005}, {-1.06817, 0.627034}, {-1.07036, 0.631004}, {-1.0844, 0.641468}, {-1.10189, 0.653626}, {-1.06773, 0.634808}, {-0.965988, 0.575278}, {-0.849279, 0.505626}, {-0.799301, 0.473928}, {-0.85452, 0.503455}, {-0.974792, 0.571657}, {-1.07746, 0.630846}, {-1.10995, 0.650385}, {-1.08889, 0.639677}, {-1.06271, 0.628629}, {-1.10156, 0.654342}, {-1.12316, 0.668716}, {-1.07351, 0.639698}, {-0.966127, 0.575326}, {-0.878149, 0.521311}, {-0.88134, 0.520328}, {-0.974653, 0.57238}, {-1.08471, 0.635055}, {-1.13383, 0.663357}, {-1.10905, 0.649966}, {-1.06538, 0.626932}, {-1.01991, 0.605809}, {-1.06726, 0.636002}, {-1.07311, 0.639927}, {-1.01044, 0.601935}, {-0.921916, 0.54774}, {-0.882583, 0.522}, {-0.928425, 0.546209}, {-1.02128, 0.598346}, {-1.08496, 0.634306}, {-1.07694, 0.629854}, {-1.02525, 0.601719}, {-0.995061, 0.587574}, {-0.92145, 0.549256}, {-0.965175, 0.575824}, {-0.964778, 0.574777}, {-0.920679, 0.547078}, {-0.878039, 0.519858}, {-0.881313, 0.519436}, {-0.929312, 0.545241}, {-0.97583, 0.570653}, {-0.975371, 0.569835}, {-0.928372, 0.54369}, {-0.88077, 0.518931}, {-0.878351, 0.521218}, {-0.793243, 0.473276}, {-0.847351, 0.504481}, {-0.875002, 0.519428}, {-0.879228, 0.520414}, {-0.879135, 0.518658}, {-0.884544, 0.51981}, {-0.883567, 0.517258}, {-0.856226, 0.500205}, {-0.800052, 0.468039}, {-0.740536, 0.435682}, {-0.713862, 0.423286}, {-0.736976, 0.439354}, {-0.701142, 0.416783}, {-0.795548, 0.471179}, {-0.876019, 0.517617}, {-0.922854, 0.544232}, {-0.924957, 0.544023}, {-0.881358, 0.516598}, {-0.801881, 0.468728}, {-0.706368, 0.413108}, {-0.620816, 0.365091}, {-0.570009, 0.33812}, {-0.569014, 0.339552}, {-0.617693, 0.368557}, {-0.701801, 0.414316}, {-0.849151, 0.500379}, {-0.967938, 0.570028}, {-1.01459, 0.596709}, {-0.970387, 0.569212}, {-0.852688, 0.498733}, {-0.704774, 0.412047}, {-0.572499, 0.336444}, {-0.48579, 0.288353}, {-0.456139, 0.272769}, {-0.485267, 0.289806}, {-0.570888, 0.338727}, {-0.795518, 0.467383}, {-0.969111, 0.569707}, {-1.07832, 0.63391}, {-1.07892, 0.633197}, {-0.97037, 0.567968}, {-0.796351, 0.465497}, {-0.618458, 0.36283}, {-0.484734, 0.28727}, {-0.416415, 0.249265}, {-0.416842, 0.249412}, {-0.485523, 0.287876}, {-0.61865, 0.364149}, {-0.92568, 0.54321}, {-1.07309, 0.6305}, {-1.12941, 0.66324}, {-1.07294, 0.628773}, {-0.924866, 0.541062}, {-0.737495, 0.43222}, {-0.567629, 0.335295}, {-0.45474, 0.271532}, {-0.41644, 0.249404}, {-0.456398, 0.270956}, {-0.56995, 0.33514}, {-0.739305, 0.433371}, {-1.02543, 0.602078}, {-1.10773, 0.650928}, {-1.10713, 0.649962}, {-1.02353, 0.600065}, {-0.878905, 0.515649}, {-0.711811, 0.419746}, {-0.567276, 0.337426}, {-0.484466, 0.289703}, {-0.485758, 0.288954}, {-0.570555, 0.336006}, {-0.715695, 0.419294}, {-0.8821, 0.516913}, {-1.06758, 0.627366}, {-1.08843, 0.640068}, {-1.06526, 0.626339}, {-0.994871, 0.585351}, {-0.877686, 0.518046}, {-0.736047, 0.436923}, {-0.617298, 0.368225}, {-0.571703, 0.340401}, {-0.620535, 0.36644}, {-0.741319, 0.434861}, {-0.883244, 0.517288}, {-0.999225, 0.5861}}; + const std::vector expected_rho + = {0.000169776, 0.000178569, 0.000193478, 0.000190963, 0.000162992, 0.00012976, 0.000115885, 0.000130059, + 0.00016338, 0.000191117, 0.000193323, 0.000178366, 0.000179064, 0.000204228, 0.000227792, 0.000219629, + 0.000183672, 0.000153516, 0.000153676, 0.000183952, 0.000219538, 0.000227101, 0.00020339, 0.000178705, + 0.000194839, 0.000228625, 0.000243426, 0.000219702, 0.000181133, 0.000163767, 0.00018138, 0.000219691, + 0.000242614, 0.000227273, 0.000193857, 0.00017819, 0.000192755, 0.000220801, 0.000220073, 0.00019118, + 0.000164701, 0.000164856, 0.000191352, 0.000219611, 0.000219514, 0.000191386, 0.000165518, 0.000166079, + 0.00016434, 0.000184444, 0.00018134, 0.000164698, 0.000156019, 0.000164894, 0.000181257, 0.000183649, + 0.00016312, 0.000135954, 0.000124381, 0.000136818, 0.000130335, 0.00015378, 0.000163817, 0.000164888, + 0.000164963, 0.000163834, 0.000153372, 0.000129503, 0.000101264, 8.32226e-05, 8.35355e-05, 0.000102059, + 0.000116058, 0.000153881, 0.000181671, 0.00019171, 0.000181563, 0.000153518, 0.000115431, 7.94008e-05, + 5.55859e-05, 4.77218e-05, 5.59624e-05, 8.00408e-05, 0.000130395, 0.000184659, 0.000220604, 0.000220398, + 0.000184101, 0.000129668, 7.94357e-05, 4.63696e-05, 3.15498e-05, 3.16778e-05, 4.67709e-05, 8.00837e-05, + 0.000164257, 0.000220901, 0.000243906, 0.000220232, 0.000163282, 0.000101221, 5.55696e-05, 3.15687e-05, + 2.46811e-05, 3.17951e-05, 5.61029e-05, 0.00010208, 0.000192313, 0.000228466, 0.000228055, 0.00019132, + 0.000135475, 8.28695e-05, 4.76363e-05, 3.17207e-05, 3.18329e-05, 4.80319e-05, 8.3641e-05, 0.000136545, + 0.000194159, 0.000203962, 0.000193564, 0.000164464, 0.000123269, 8.29177e-05, 5.58212e-05, 4.6815e-05, + 5.60991e-05, 8.35257e-05, 0.000124162, 0.000165391, 0.000178568, 0.000178447, 0.000177044, 0.000164353, + 0.000135345, 0.000101334, 7.98722e-05, 8.00263e-05, 0.00010178, 0.000135967, 0.000164933, 0.000177413, + 0.00017896, 0.000203835, 0.000227343, 0.000219346, 0.000183589, 0.000153552, 0.000153811, 0.000184272, + 0.000220133, 0.000227869, 0.000204034, 0.000178996, 0.000204641, 0.000245599, 0.000266381, 0.000242499, + 0.000200025, 0.000180655, 0.000200547, 0.000243195, 0.000266727, 0.000245475, 0.000204416, 0.000185313, + 0.00022891, 0.000267126, 0.000266303, 0.000227029, 0.000191299, 0.000191546, 0.000227565, 0.000266585, + 0.000266819, 0.000228355, 0.000192972, 0.000193226, 0.000220892, 0.000243298, 0.000227224, 0.000193116, + 0.000176958, 0.00019338, 0.000227396, 0.000242974, 0.000220189, 0.00018224, 0.000165126, 0.000182777, + 0.000184452, 0.000200435, 0.000191399, 0.000176968, 0.000176991, 0.000191342, 0.000200057, 0.000183759, + 0.000149563, 0.000123756, 0.000124008, 0.000150211, 0.000153857, 0.000180864, 0.000191681, 0.000193468, + 0.000191384, 0.000180279, 0.000153109, 0.000115507, 8.4576e-05, 7.32605e-05, 8.49347e-05, 0.000116163, + 0.000154093, 0.000200993, 0.000227986, 0.000227634, 0.000200117, 0.000153102, 0.000101786, 6.24711e-05, + 4.30082e-05, 4.3128e-05, 6.28796e-05, 0.000102542, 0.000184984, 0.000244115, 0.000267228, 0.000243129, + 0.000183648, 0.000115422, 6.24715e-05, 3.36981e-05, 2.53705e-05, 3.38925e-05, 6.3015e-05, 0.00011646, + 0.000221235, 0.000267707, 0.000267073, 0.000219788, 0.000149084, 8.43875e-05, 4.30356e-05, 2.54251e-05, + 2.55042e-05, 4.33728e-05, 8.52167e-05, 0.000150469, 0.000228728, 0.000245742, 0.000227673, 0.000181087, + 0.000122902, 7.29834e-05, 4.31838e-05, 3.39974e-05, 4.3403e-05, 7.35933e-05, 0.000124051, 0.000182539, + 0.000204196, 0.000203779, 0.00019146, 0.000163418, 0.000122899, 8.45893e-05, 6.29222e-05, 6.30623e-05, + 8.50736e-05, 0.000123809, 0.000164615, 0.000192509, 0.000178745, 0.000184257, 0.000191376, 0.000180885, + 0.000149064, 0.000115799, 0.000102469, 0.000116203, 0.000149836, 0.000181829, 0.000192182, 0.000184698, + 0.000194197, 0.000227602, 0.000242531, 0.000219264, 0.000181092, 0.000163967, 0.000181826, 0.000220523, + 0.000243831, 0.000228498, 0.000194599, 0.000178222, 0.00022836, 0.000266431, 0.000265778, 0.000226824, + 0.000191362, 0.000191812, 0.000228048, 0.000267291, 0.000267602, 0.00022895, 0.000193197, 0.000193038, + 0.000243596, 0.000266133, 0.000244166, 0.00020288, 0.000183901, 0.00020362, 0.00024537, 0.000267252, + 0.000244248, 0.000202034, 0.000182436, 0.000201798, 0.000219914, 0.000226984, 0.000202831, 0.000177819, + 0.000178022, 0.000203359, 0.000227581, 0.000220314, 0.000184942, 0.000154877, 0.000154845, 0.000184784, + 0.000181151, 0.000191228, 0.00018371, 0.000177896, 0.00018366, 0.000191138, 0.000181046, 0.000149503, + 0.000116298, 0.000102854, 0.000116343, 0.000149588, 0.000163791, 0.000191618, 0.000203375, 0.000203111, + 0.00019099, 0.000163151, 0.000122788, 8.45394e-05, 6.28441e-05, 6.28824e-05, 8.47057e-05, 0.000123192, + 0.000181825, 0.000228007, 0.0002451, 0.000227175, 0.000180756, 0.000122709, 7.28545e-05, 4.30544e-05, + 3.38231e-05, 4.31296e-05, 7.31592e-05, 0.000123445, 0.000220837, 0.000267297, 0.000266739, 0.000219626, + 0.000149104, 8.44935e-05, 4.312e-05, 2.54477e-05, 2.54607e-05, 4.32413e-05, 8.49761e-05, 0.000150132, + 0.00024411, 0.000267192, 0.00024319, 0.000183917, 0.000115847, 6.28857e-05, 3.39986e-05, 2.55682e-05, + 3.40292e-05, 6.31138e-05, 0.000116538, 0.000185036, 0.000228282, 0.000227879, 0.000200457, 0.000153624, + 0.000102398, 6.30086e-05, 4.34058e-05, 4.34269e-05, 6.31469e-05, 0.000102846, 0.000154464, 0.00020137, + 0.000193957, 0.000191754, 0.000180646, 0.000153539, 0.000115928, 8.48887e-05, 7.34535e-05, 8.5078e-05, + 0.000116387, 0.000154285, 0.000181475, 0.000192302, 0.000177651, 0.000191707, 0.000200165, 0.000183666, + 0.000149307, 0.000123383, 0.000123605, 0.00014996, 0.00018462, 0.000201118, 0.000192363, 0.000177876, + 0.000191783, 0.000219569, 0.00021921, 0.000190941, 0.000164941, 0.000165437, 0.000192324, 0.000221049, + 0.000221193, 0.000192766, 0.000166159, 0.00016585, 0.00021996, 0.00024227, 0.00022661, 0.000193081, + 0.000177415, 0.000194268, 0.0002287, 0.000244543, 0.00022165, 0.000183213, 0.000165438, 0.000182397, + 0.000219454, 0.000226546, 0.00020266, 0.000177976, 0.000178476, 0.000204075, 0.000228484, 0.000221241, + 0.000185699, 0.000155343, 0.000154979, 0.00018457, 0.00019067, 0.00019267, 0.000177686, 0.000169169, + 0.000178188, 0.000193597, 0.000191769, 0.000164278, 0.000131062, 0.000116874, 0.000130584, 0.000163371, + 0.000164266, 0.000176694, 0.000177869, 0.000177851, 0.000176716, 0.000164456, 0.000135833, 0.000101933, + 8.03218e-05, 8.02043e-05, 0.000101624, 0.000135492, 0.000164644, 0.000193371, 0.000203198, 0.000192973, + 0.00016421, 0.000123358, 8.31557e-05, 5.59935e-05, 4.6818e-05, 5.58866e-05, 8.30724e-05, 0.000123516, + 0.000191606, 0.000227705, 0.000227401, 0.000190999, 0.000135555, 8.31647e-05, 4.78966e-05, 3.18287e-05, + 3.17699e-05, 4.77766e-05, 8.31897e-05, 0.000135944, 0.00022038, 0.000243396, 0.000220002, 0.00016352, + 0.000101796, 5.61586e-05, 3.19688e-05, 2.48775e-05, 3.18148e-05, 5.59491e-05, 0.000101777, 0.000163838, + 0.000220371, 0.000220283, 0.000184384, 0.000130411, 8.03645e-05, 4.71541e-05, 3.20674e-05, 3.19629e-05, + 4.68692e-05, 8.00456e-05, 0.000130283, 0.000184483, 0.000191758, 0.000181752, 0.000154082, 0.000116363, + 8.04071e-05, 5.6379e-05, 4.82162e-05, 5.6199e-05, 8.01134e-05, 0.000116105, 0.000153974, 0.000181753, + 0.000165222, 0.000164124, 0.000153901, 0.000130258, 0.000101987, 8.36893e-05, 8.37044e-05, 0.000102039, + 0.000130355, 0.000154029, 0.000164235, 0.000165266, 0.000165291, 0.000181461, 0.000183847, 0.000163329, + 0.000136024, 0.000124216, 0.000136499, 0.000164162, 0.00018475, 0.000182137, 0.000165623, 0.00015673, + 0.000163569, 0.00018354, 0.000180875, 0.000164863, 0.000156711, 0.000166032, 0.000182847, 0.000185594, + 0.000165052, 0.000137407, 0.000125083, 0.000136701, 0.000183577, 0.000199544, 0.000191064, 0.000177383, + 0.000178094, 0.000193021, 0.000202132, 0.000185895, 0.000151357, 0.000124942, 0.00012448, 0.000149918, + 0.000180558, 0.000190738, 0.000183719, 0.000178516, 0.000184812, 0.000192645, 0.000182663, 0.000150976, + 0.000117447, 0.000103605, 0.00011663, 0.000149349, 0.000164042, 0.000176567, 0.000178014, 0.00017829, + 0.000177355, 0.000165163, 0.000136503, 0.000102511, 8.07849e-05, 8.05329e-05, 0.000101763, 0.000135398, + 0.000155504, 0.000176838, 0.00018384, 0.000176902, 0.000155733, 0.000122862, 8.78198e-05, 6.26008e-05, + 5.37126e-05, 6.23463e-05, 8.73915e-05, 0.000122452, 0.000164634, 0.000191497, 0.000191418, 0.00016453, + 0.000122719, 8.18656e-05, 5.29609e-05, 3.90106e-05, 3.89192e-05, 5.27242e-05, 8.16226e-05, 0.000122647, + 0.000181433, 0.000200572, 0.000181486, 0.000136005, 8.78125e-05, 5.30691e-05, 3.46193e-05, 2.90604e-05, + 3.43956e-05, 5.26804e-05, 8.74193e-05, 0.00013578, 0.000184272, 0.000184487, 0.000150048, 0.000102277, + 6.28005e-05, 3.92835e-05, 2.92168e-05, 2.90551e-05, 3.88043e-05, 6.20696e-05, 0.000101486, 0.000149456, + 0.000163873, 0.000150183, 0.000116786, 8.07673e-05, 5.40762e-05, 3.93422e-05, 3.47e-05, 3.89455e-05, + 5.3295e-05, 7.971e-05, 0.000115732, 0.000149515, 0.000136441, 0.00012402, 0.000103157, 8.06774e-05, + 6.28601e-05, 5.33021e-05, 5.31329e-05, 6.23436e-05, 7.98387e-05, 0.000102157, 0.000123181, 0.000136111, + 0.000124411, 0.000123824, 0.000116395, 0.000102099, 8.80972e-05, 8.23993e-05, 8.80746e-05, 0.000101969, + 0.000116088, 0.000123418, 0.00012412, 0.000123477, 0.000136384, 0.00014958, 0.000149401, 0.000135994, + 0.000123413, 0.000123714, 0.000136778, 0.00015033, 0.000150286, 0.000136742, 0.000123842, 0.000123745, + 0.000129876, 0.000153196, 0.000163656, 0.000165404, 0.000166112, 0.000165473, 0.00015535, 0.000131594, + 0.00010315, 8.46425e-05, 8.43506e-05, 0.000102184, 0.000153082, 0.000180108, 0.000191611, 0.000194349, + 0.000193074, 0.000182444, 0.000155389, 0.000117587, 8.6239e-05, 7.44187e-05, 8.54958e-05, 0.000115985, + 0.000163108, 0.000191128, 0.000203621, 0.000204191, 0.000192609, 0.000164915, 0.000124426, 8.59286e-05, + 6.39458e-05, 6.36734e-05, 8.50474e-05, 0.000122922, 0.00016427, 0.000193218, 0.000203544, 0.000193735, + 0.000165102, 0.000124183, 8.38875e-05, 5.66566e-05, 4.74156e-05, 5.63674e-05, 8.32827e-05, 0.000123342, + 0.000164511, 0.000191479, 0.000191563, 0.00016474, 0.000122895, 8.20151e-05, 5.31381e-05, 3.92361e-05, + 3.91765e-05, 5.29581e-05, 8.17365e-05, 0.000122592, 0.000163723, 0.000180812, 0.000163935, 0.00012388, + 8.20223e-05, 5.22662e-05, 3.65683e-05, 3.18566e-05, 3.64529e-05, 5.2034e-05, 8.16996e-05, 0.000123551, + 0.0001538, 0.000154107, 0.000123809, 8.38231e-05, 5.32741e-05, 3.6669e-05, 3.01209e-05, 3.00101e-05, + 3.63253e-05, 5.26796e-05, 8.30355e-05, 0.000123075, 0.000130433, 0.000116752, 8.56391e-05, 5.67519e-05, + 3.94538e-05, 3.2037e-05, 3.0099e-05, 3.16854e-05, 3.87272e-05, 5.56478e-05, 8.43587e-05, 0.000115836, + 0.00010236, 8.57183e-05, 6.38156e-05, 4.75674e-05, 3.94416e-05, 3.67055e-05, 3.65041e-05, 3.88229e-05, + 4.65113e-05, 6.24189e-05, 8.44039e-05, 0.000101803, 8.41204e-05, 7.4067e-05, 6.36153e-05, 5.65795e-05, + 5.33297e-05, 5.24404e-05, 5.30374e-05, 5.59239e-05, 6.25876e-05, 7.28955e-05, 8.33033e-05, 8.80873e-05, + 8.4031e-05, 8.5275e-05, 8.51082e-05, 8.36835e-05, 8.23938e-05, 8.24628e-05, 8.37687e-05, 8.49763e-05, + 8.48556e-05, 8.35455e-05, 8.2405e-05, 8.26193e-05, 0.000102056, 0.000115945, 0.000123228, 0.000124114, + 0.000123743, 0.000124869, 0.000124326, 0.000116858, 0.000102542, 8.85546e-05, 8.28387e-05, 8.83948e-05, + 0.000115515, 0.000153178, 0.000181461, 0.000192345, 0.000182929, 0.000155283, 0.000117307, 8.11734e-05, + 5.70951e-05, 4.88782e-05, 5.66632e-05, 8.01132e-05, 0.000153026, 0.000199999, 0.000227897, 0.000228681, + 0.000201896, 0.000155064, 0.000103597, 6.39952e-05, 4.4215e-05, 4.40134e-05, 6.32707e-05, 0.00010215, + 0.00018076, 0.000227277, 0.000245333, 0.000228261, 0.000182143, 0.000123998, 7.39655e-05, 4.40085e-05, + 3.46431e-05, 4.37634e-05, 7.3327e-05, 0.000122863, 0.000190936, 0.00022738, 0.000227646, 0.000191525, + 0.000136033, 8.35705e-05, 4.83429e-05, 3.23506e-05, 3.23385e-05, 4.8263e-05, 8.33041e-05, 0.000135512, + 0.000181134, 0.000200401, 0.000181425, 0.000135892, 8.76473e-05, 5.30001e-05, 3.47412e-05, 2.93641e-05, + 3.48117e-05, 5.30612e-05, 8.75565e-05, 0.000135598, 0.000153668, 0.000153945, 0.000123591, 8.35558e-05, + 5.30393e-05, 3.65508e-05, 3.01554e-05, 3.01799e-05, 3.65648e-05, 5.28929e-05, 8.31275e-05, 0.000123022, + 0.00011622, 0.000103006, 7.38389e-05, 4.83881e-05, 3.4772e-05, 3.01478e-05, 2.93687e-05, 3.00549e-05, + 3.44657e-05, 4.77231e-05, 7.28621e-05, 0.000102207, 8.0567e-05, 6.37096e-05, 4.39393e-05, 3.23335e-05, + 2.93244e-05, 3.0128e-05, 3.00339e-05, 2.89846e-05, 3.16325e-05, 4.28335e-05, 6.25121e-05, 8.00199e-05, + 5.67399e-05, 4.39985e-05, 3.45114e-05, 3.22339e-05, 3.47269e-05, 3.65371e-05, 3.45117e-05, 3.17005e-05, + 3.35899e-05, 4.28176e-05, 5.58289e-05, 6.26212e-05, 4.8614e-05, 4.37771e-05, 4.35783e-05, 4.81697e-05, + 5.31171e-05, 5.31103e-05, 4.80256e-05, 4.31076e-05, 4.2978e-05, 4.77782e-05, 5.30685e-05, 5.34388e-05, + 5.64569e-05, 6.30598e-05, 7.32512e-05, 8.3521e-05, 8.81195e-05, 8.39039e-05, 7.36216e-05, 6.30901e-05, + 5.61824e-05, 5.32249e-05, 5.26704e-05, 5.35023e-05, 8.0015e-05, 0.00010211, 0.000123169, 0.000136376, + 0.000136928, 0.000124447, 0.00010336, 8.07737e-05, 6.3059e-05, 5.36874e-05, 5.36252e-05, 6.27624e-05, + 0.000129242, 0.000183365, 0.00022001, 0.000220842, 0.000185267, 0.000131075, 8.08007e-05, 4.75724e-05, + 3.25427e-05, 3.24257e-05, 4.70969e-05, 7.96796e-05, 0.000183131, 0.000242521, 0.000266806, 0.000243863, + 0.000184888, 0.000116656, 6.35454e-05, 3.45949e-05, 2.61054e-05, 3.44031e-05, 6.29404e-05, 0.000115378, + 0.000219078, 0.000266116, 0.000266622, 0.000220161, 0.000149719, 8.50357e-05, 4.36645e-05, 2.60092e-05, + 2.60116e-05, 4.35972e-05, 8.46568e-05, 0.000148832, 0.000219273, 0.000242736, 0.000219796, 0.00016338, + 0.0001016, 5.6097e-05, 3.21594e-05, 2.52787e-05, 3.23251e-05, 5.6299e-05, 0.000101538, 0.0001629, + 0.0001837, 0.000183984, 0.0001495, 0.000101615, 6.22155e-05, 3.89983e-05, 2.92949e-05, 2.94338e-05, + 3.93295e-05, 6.24674e-05, 0.000101468, 0.000149009, 0.000130057, 0.000116254, 8.50146e-05, 5.61045e-05, + 3.89505e-05, 3.18085e-05, 3.01956e-05, 3.20324e-05, 3.91534e-05, 5.5959e-05, 8.44065e-05, 0.000115619, + 8.03256e-05, 6.34002e-05, 4.35985e-05, 3.20142e-05, 2.90869e-05, 3.00446e-05, 3.01262e-05, 2.91771e-05, + 3.18231e-05, 4.29453e-05, 6.24943e-05, 7.98732e-05, 4.73275e-05, 3.44193e-05, 2.57751e-05, 2.49389e-05, + 2.90501e-05, 3.17653e-05, 2.90994e-05, 2.47974e-05, 2.52566e-05, 3.35478e-05, 4.65605e-05, 5.36004e-05, + 3.23057e-05, 2.58073e-05, 2.56053e-05, 3.18332e-05, 3.89116e-05, 3.89798e-05, 3.18589e-05, 2.53347e-05, + 2.51871e-05, 3.15495e-05, 3.88849e-05, 3.92491e-05, 3.21381e-05, 3.39911e-05, 4.31034e-05, 5.5901e-05, + 6.23845e-05, 5.61972e-05, 4.32888e-05, 3.38106e-05, 3.16759e-05, 3.44439e-05, 3.66118e-05, 3.48588e-05, + 4.6815e-05, 6.25659e-05, 8.44258e-05, 0.000101752, 0.000102168, 8.5279e-05, 6.31952e-05, 4.69861e-05, + 3.91033e-05, 3.67077e-05, 3.67876e-05, 3.92044e-05, 7.95397e-05, 0.000115317, 0.000149266, 0.00016403, + 0.000150495, 0.000116888, 8.06518e-05, 5.39992e-05, 3.9481e-05, 3.504e-05, 3.93308e-05, 5.34902e-05, + 0.000162245, 0.000218994, 0.000242976, 0.000220373, 0.000163988, 0.000102049, 5.63514e-05, 3.22528e-05, + 2.52347e-05, 3.21075e-05, 5.58345e-05, 0.000100854, 0.000218578, 0.000265718, 0.0002664, 0.000220051, + 0.000149616, 8.49083e-05, 4.35382e-05, 2.58968e-05, 2.5888e-05, 4.3411e-05, 8.4347e-05, 0.000148382, + 0.000241876, 0.000265842, 0.000242791, 0.00018387, 0.000115791, 6.29115e-05, 3.42048e-05, 2.59007e-05, + 3.43398e-05, 6.29914e-05, 0.000115408, 0.000182897, 0.000219059, 0.000219486, 0.000183833, 0.000129775, + 7.9756e-05, 4.68533e-05, 3.21433e-05, 3.23118e-05, 4.72629e-05, 8.00321e-05, 0.00012946, 0.000183057, + 0.000163127, 0.00014946, 0.000115913, 7.97889e-05, 5.32883e-05, 3.89858e-05, 3.48174e-05, 3.94074e-05, + 5.38133e-05, 7.98969e-05, 0.000115367, 0.000148786, 0.000101745, 8.49632e-05, 6.29319e-05, 4.67002e-05, + 3.88037e-05, 3.64789e-05, 3.67183e-05, 3.92949e-05, 4.6957e-05, 6.25904e-05, 8.4203e-05, 0.000101331, + 5.62433e-05, 4.34449e-05, 3.39337e-05, 3.16952e-05, 3.43572e-05, 3.64712e-05, 3.47172e-05, 3.19884e-05, + 3.37851e-05, 4.28128e-05, 5.55935e-05, 6.22174e-05, 3.20578e-05, 2.55638e-05, 2.53584e-05, 3.16044e-05, + 3.87762e-05, 3.89851e-05, 3.19469e-05, 2.54096e-05, 2.51908e-05, 3.14512e-05, 3.86897e-05, 3.90057e-05, + 2.48989e-05, 2.53537e-05, 3.35944e-05, 4.64923e-05, 5.33536e-05, 4.69089e-05, 3.39239e-05, 2.52956e-05, + 2.45176e-05, 2.87455e-05, 3.16431e-05, 2.91355e-05, 3.16775e-05, 4.27794e-05, 6.2334e-05, 7.97092e-05, + 8.00862e-05, 6.30546e-05, 4.32192e-05, 3.16837e-05, 2.8838e-05, 2.98786e-05, 3.0009e-05, 2.90585e-05, + 5.54665e-05, 8.39616e-05, 0.000115411, 0.000130106, 0.000116386, 8.50888e-05, 5.6121e-05, 3.89503e-05, + 3.17868e-05, 3.00998e-05, 3.18029e-05, 3.87681e-05, 0.00010074, 0.000148546, 0.000183762, 0.000184484, + 0.000150126, 0.000102135, 6.25699e-05, 3.91984e-05, 2.93405e-05, 2.92906e-05, 3.89402e-05, 6.18243e-05, + 0.000189968, 0.000226648, 0.000227274, 0.000191338, 0.000135795, 8.32333e-05, 4.79955e-05, 3.20438e-05, + 3.20297e-05, 4.78504e-05, 8.26649e-05, 0.000134614, 0.000226111, 0.000244162, 0.000227213, 0.000181152, + 0.000123019, 7.31013e-05, 4.33658e-05, 3.41949e-05, 4.34179e-05, 7.2966e-05, 0.000122298, 0.000179849, + 0.00022641, 0.000227013, 0.000200217, 0.000153416, 0.000102096, 6.283e-05, 4.34486e-05, 4.35768e-05, + 6.30788e-05, 0.000102009, 0.000152574, 0.00019898, 0.000190797, 0.000181278, 0.000153628, 0.000115686, + 7.97449e-05, 5.60445e-05, 4.82651e-05, 5.64563e-05, 8.01779e-05, 0.000115496, 0.00015265, 0.000180303, + 0.000135822, 0.000123417, 0.000102333, 7.97159e-05, 6.21003e-05, 5.30044e-05, 5.33078e-05, 6.27516e-05, + 8.00614e-05, 0.000101861, 0.000122438, 0.000135312, 8.34484e-05, 7.3298e-05, 6.27092e-05, 5.56834e-05, + 5.27088e-05, 5.22875e-05, 5.32935e-05, 5.62897e-05, 6.27241e-05, 7.26334e-05, 8.2733e-05, 8.7425e-05, + 4.79875e-05, 4.31295e-05, 4.28933e-05, 4.75375e-05, 5.2729e-05, 5.30717e-05, 4.81982e-05, 4.32335e-05, + 4.28738e-05, 4.73926e-05, 5.24865e-05, 5.28037e-05, 3.1743e-05, 3.36193e-05, 4.27264e-05, 5.55719e-05, + 6.22051e-05, 5.61732e-05, 4.32948e-05, 3.37181e-05, 3.14217e-05, 3.40299e-05, 3.61221e-05, 3.44009e-05, + 3.15416e-05, 4.26766e-05, 6.22434e-05, 7.96303e-05, 8.00287e-05, 6.30029e-05, 4.31349e-05, 3.15386e-05, + 2.8622e-05, 2.96133e-05, 2.97547e-05, 2.88637e-05, 4.73524e-05, 7.24157e-05, 0.000101778, 0.000115845, + 0.000102578, 7.3278e-05, 4.77667e-05, 3.41975e-05, 2.96799e-05, 2.90223e-05, 2.97829e-05, 3.41793e-05, + 8.24296e-05, 0.000122382, 0.000153314, 0.000153853, 0.000123517, 8.33491e-05, 5.27466e-05, 3.6259e-05, + 2.98878e-05, 2.98951e-05, 3.61821e-05, 5.23392e-05, 0.000134706, 0.000180492, 0.00020022, 0.000181553, + 0.000136011, 8.76068e-05, 5.28457e-05, 3.45468e-05, 2.91322e-05, 3.44743e-05, 5.25143e-05, 8.67563e-05, + 0.000192476, 0.000202953, 0.000193269, 0.000164542, 0.000123406, 8.30327e-05, 5.5932e-05, 4.68833e-05, + 5.59711e-05, 8.29089e-05, 0.000122833, 0.000163568, 0.000202578, 0.000203146, 0.000191496, 0.000163576, + 0.000122925, 8.45632e-05, 6.29273e-05, 6.30011e-05, 8.4632e-05, 0.000122567, 0.000162534, 0.000190239, + 0.000193094, 0.000191727, 0.000180882, 0.000153543, 0.000115707, 8.47041e-05, 7.33911e-05, 8.49485e-05, + 0.00011576, 0.000152812, 0.000179443, 0.000190543, 0.000164985, 0.00016428, 0.000153902, 0.000129894, + 0.000101524, 8.34307e-05, 8.36724e-05, 0.000101963, 0.000129796, 0.000152824, 0.000162829, 0.000164318, + 0.000124187, 0.000123646, 0.000115948, 0.000101433, 8.75308e-05, 8.21529e-05, 8.80862e-05, 0.000101914, + 0.000115608, 0.000122509, 0.000123176, 0.000122883, 8.35386e-05, 8.47608e-05, 8.44441e-05, 8.29716e-05, + 8.18669e-05, 8.22377e-05, 8.3701e-05, 8.47534e-05, 8.42682e-05, 8.26769e-05, 8.15331e-05, 8.19515e-05, + 5.59126e-05, 6.25578e-05, 7.27056e-05, 8.2978e-05, 8.77087e-05, 8.36486e-05, 7.33599e-05, 6.26251e-05, + 5.54514e-05, 5.23311e-05, 5.18043e-05, 5.28019e-05, 4.65013e-05, 6.23551e-05, 8.42158e-05, 0.000101497, + 0.000101889, 8.49668e-05, 6.27798e-05, 4.64125e-05, 3.83834e-05, 3.59317e-05, 3.60993e-05, 3.87052e-05, + 5.55151e-05, 8.41575e-05, 0.000115586, 0.000130113, 0.000116211, 8.47823e-05, 5.5718e-05, 3.84676e-05, + 3.1255e-05, 2.95943e-05, 3.14276e-05, 3.85969e-05, 8.27265e-05, 0.000122767, 0.000153602, 0.000153933, + 0.000123423, 8.31643e-05, 5.25199e-05, 3.60119e-05, 2.96459e-05, 2.97056e-05, 3.61091e-05, 5.24442e-05, + 0.0001231, 0.000163422, 0.000180773, 0.000163969, 0.000123715, 8.16183e-05, 5.17916e-05, 3.61707e-05, + 3.15677e-05, 3.62194e-05, 5.17592e-05, 8.13068e-05, 0.000163955, 0.000191154, 0.000191505, 0.000164707, + 0.000122651, 8.15762e-05, 5.26784e-05, 3.88668e-05, 3.88879e-05, 5.26703e-05, 8.13391e-05, 0.000122042, + 0.000177949, 0.000178224, 0.000177098, 0.000164478, 0.000135415, 0.000101353, 7.98668e-05, 7.99553e-05, + 0.000101514, 0.000135364, 0.000164031, 0.0001765, 0.000178256, 0.000184406, 0.000191805, 0.000181199, + 0.000149144, 0.00011576, 0.000102371, 0.000115917, 0.000149093, 0.000180508, 0.00019063, 0.000183509, + 0.000177763, 0.000192413, 0.000200895, 0.000183997, 0.000149287, 0.000123244, 0.000123385, 0.000149437, + 0.000183498, 0.0001995, 0.000190872, 0.00017711, 0.000165789, 0.000182296, 0.000184419, 0.000163397, + 0.0001358, 0.000123931, 0.000136118, 0.000163418, 0.00018347, 0.00018064, 0.000164539, 0.000156455, + 0.000136691, 0.000150007, 0.000149512, 0.000135719, 0.000122961, 0.000123217, 0.000136137, 0.000149324, + 0.000148911, 0.000135376, 0.000122941, 0.00012351, 0.000101983, 0.000115965, 0.00012304, 0.000123648, + 0.000123107, 0.000124119, 0.000123373, 0.000115602, 0.000101093, 8.72159e-05, 8.18811e-05, 8.79275e-05, + 7.9881e-05, 0.000102134, 0.000123047, 0.000135942, 0.000136207, 0.00012351, 0.000102223, 7.94634e-05, + 6.17064e-05, 5.24766e-05, 5.27153e-05, 6.22537e-05, 7.97623e-05, 0.000115769, 0.000149534, 0.000163824, + 0.000149842, 0.000115968, 7.95996e-05, 5.29026e-05, 3.84306e-05, 3.41378e-05, 3.87003e-05, 5.32672e-05, + 0.000101581, 0.000149594, 0.000184453, 0.000184526, 0.000149665, 0.000101448, 6.18208e-05, 3.84618e-05, + 2.86739e-05, 2.87762e-05, 3.87297e-05, 6.21174e-05, 0.000135957, 0.00018172, 0.000200931, 0.000181658, + 0.000135758, 8.72314e-05, 5.24467e-05, 3.4166e-05, 2.88205e-05, 3.43373e-05, 5.27495e-05, 8.75491e-05, + 0.000164855, 0.000191857, 0.000191831, 0.000164733, 0.00012255, 8.14472e-05, 5.25465e-05, 3.87505e-05, + 3.88353e-05, 5.27865e-05, 8.17652e-05, 0.000122809, 0.000176973, 0.000184073, 0.000177107, 0.000155669, + 0.000122434, 8.72103e-05, 6.20709e-05, 5.33865e-05, 6.22328e-05, 8.744e-05, 0.000122554, 0.000155593}; + const std::vector> wfcr + = {{0.923838, -0.766723}, {0.946855, -0.787058}, {0.98573, -0.819083}, {0.979491, -0.813515}, + {0.904645, -0.751906}, {0.806637, -0.67153}, {0.762282, -0.634627}, {0.808631, -0.671024}, + {0.907874, -0.750202}, {0.982864, -0.810243}, {0.988344, -0.815121}, {0.948235, -0.784292}, + {0.94822, -0.78808}, {1.01275, -0.841533}, {1.07019, -0.888017}, {1.05126, -0.871455}, + {0.961291, -0.797015}, {0.878556, -0.728999}, {0.879115, -0.729255}, {0.962554, -0.796984}, + {1.05236, -0.869683}, {1.07057, -0.884247}, {1.01257, -0.837506}, {0.948058, -0.786339}, + {0.98916, -0.822}, {1.07203, -0.889774}, {1.10691, -0.917254}, {1.05194, -0.870988}, + {0.954991, -0.791043}, {0.907701, -0.752602}, {0.955251, -0.792053}, {1.05176, -0.871156}, + {1.1057, -0.914953}, {1.07012, -0.88562}, {0.987688, -0.818688}, {0.946156, -0.785852}, + {0.984195, -0.817182}, {1.05394, -0.87392}, {1.0527, -0.871877}, {0.981212, -0.812574}, + {0.91036, -0.754655}, {0.910444, -0.755421}, {0.981031, -0.81369}, {1.05148, -0.871097}, + {1.0516, -0.870478}, {0.981773, -0.812974}, {0.912427, -0.756748}, {0.913464, -0.758645}, + {0.908971, -0.754295}, {0.963366, -0.79862}, {0.955384, -0.791681}, {0.910268, -0.754744}, + {0.885649, -0.734965}, {0.910563, -0.755494}, {0.95523, -0.791423}, {0.962139, -0.795868}, + {0.907001, -0.749786}, {0.827693, -0.684931}, {0.791008, -0.655941}, {0.829214, -0.688433}, + {0.809457, -0.671775}, {0.879509, -0.729387}, {0.907706, -0.752877}, {0.910496, -0.755542}, + {0.910841, -0.755549}, {0.908354, -0.752191}, {0.879698, -0.726779}, {0.808843, -0.66724}, + {0.715068, -0.590231}, {0.647503, -0.535978}, {0.647961, -0.537899}, {0.716026, -0.594774}, + {0.76381, -0.633945}, {0.879729, -0.729707}, {0.955803, -0.792947}, {0.981976, -0.814417}, + {0.956255, -0.791826}, {0.880226, -0.72699}, {0.763934, -0.629583}, {0.633519, -0.522245}, + {0.529231, -0.437973}, {0.489342, -0.407046}, {0.529559, -0.441213}, {0.633801, -0.527082}, + {0.809945, -0.671563}, {0.963921, -0.799094}, {1.05348, -0.873514}, {1.05332, -0.872713}, + {0.963433, -0.796712}, {0.809205, -0.667849}, {0.633275, -0.522824}, {0.482815, -0.40069}, + {0.396853, -0.332197}, {0.397105, -0.333528}, {0.483473, -0.404133}, {0.6341, -0.527068}, + {0.909689, -0.752964}, {1.05459, -0.873619}, {1.10791, -0.918271}, {1.05302, -0.872265}, + {0.90709, -0.750598}, {0.713992, -0.591227}, {0.527792, -0.439548}, {0.395934, -0.333532}, + {0.348973, -0.296229}, {0.397168, -0.334944}, {0.530053, -0.441972}, {0.716797, -0.593993}, + {0.984821, -0.814125}, {1.07256, -0.888377}, {1.07113, -0.888141}, {0.981027, -0.813528}, + {0.825252, -0.684905}, {0.644281, -0.537062}, {0.486491, -0.409564}, {0.395306, -0.3362}, + {0.396422, -0.336303}, {0.489654, -0.409894}, {0.648876, -0.537628}, {0.830161, -0.685605}, + {0.989527, -0.818036}, {1.01305, -0.839816}, {0.986307, -0.818834}, {0.908865, -0.75512}, + {0.786138, -0.6546}, {0.643264, -0.53866}, {0.526119, -0.443962}, {0.48143, -0.407024}, + {0.528918, -0.443292}, {0.648267, -0.537452}, {0.792158, -0.653131}, {0.914289, -0.753784}, + {0.948358, -0.785236}, {0.946951, -0.786282}, {0.942838, -0.783644}, {0.908251, -0.755238}, + {0.823591, -0.686102}, {0.711542, -0.594982}, {0.630997, -0.529084}, {0.632407, -0.528638}, + {0.715391, -0.593543}, {0.828847, -0.683616}, {0.913505, -0.752152}, {0.946682, -0.781005}, + {0.94745, -0.788449}, {1.01127, -0.841328}, {1.06872, -0.887642}, {1.05023, -0.871317}, + {0.960676, -0.797313}, {0.878136, -0.729712}, {0.878906, -0.730291}, {0.962866, -0.798309}, + {1.05343, -0.871288}, {1.07215, -0.886011}, {1.01393, -0.839118}, {0.948459, -0.787425}, + {1.01296, -0.84335}, {1.11059, -0.922846}, {1.15768, -0.959828}, {1.10507, -0.915186}, + {1.00344, -0.831421}, {0.953133, -0.790722}, {1.00417, -0.833196}, {1.1063, -0.916922}, + {1.15903, -0.959721}, {1.11171, -0.920924}, {1.01359, -0.841467}, {0.964068, -0.802384}, + {1.07183, -0.891375}, {1.15889, -0.961665}, {1.1579, -0.959214}, {1.06925, -0.885504}, + {0.981048, -0.813396}, {0.981203, -0.814497}, {1.06956, -0.887687}, {1.15808, -0.960244}, + {1.15877, -0.960442}, {1.07156, -0.889051}, {0.98419, -0.818312}, {0.984327, -0.819464}, + {1.05334, -0.875089}, {1.10617, -0.917553}, {1.0693, -0.886373}, {0.985548, -0.817425}, + {0.943012, -0.782968}, {0.985796, -0.818496}, {1.06949, -0.886967}, {1.10601, -0.916251}, + {1.05287, -0.87224}, {0.957248, -0.794249}, {0.910429, -0.756958}, {0.95766, -0.796621}, + {0.962589, -0.799601}, {1.00376, -0.833124}, {0.980864, -0.814135}, {0.943034, -0.782996}, + {0.943291, -0.782814}, {0.981453, -0.813129}, {1.0043, -0.830548}, {0.962815, -0.795639}, + {0.868239, -0.718263}, {0.788907, -0.654425}, {0.788959, -0.655994}, {0.86827, -0.722043}, + {0.878994, -0.730451}, {0.953312, -0.791624}, {0.981566, -0.814761}, {0.986549, -0.818046}, + {0.982076, -0.812596}, {0.954135, -0.787486}, {0.879849, -0.725061}, {0.763971, -0.630051}, + {0.652763, -0.540298}, {0.606386, -0.504236}, {0.652418, -0.543523}, {0.763313, -0.635249}, + {0.879898, -0.730735}, {1.00539, -0.834003}, {1.07124, -0.887672}, {1.07125, -0.885982}, + {1.00547, -0.829434}, {0.88019, -0.724606}, {0.71756, -0.590964}, {0.56108, -0.464272}, + {0.464024, -0.387048}, {0.463816, -0.388608}, {0.560587, -0.468581}, {0.717063, -0.596964}, + {0.964907, -0.79963}, {1.10884, -0.918112}, {1.16062, -0.96002}, {1.1078, -0.914798}, + {0.963434, -0.794295}, {0.763661, -0.629857}, {0.560587, -0.464871}, {0.409729, -0.343813}, + {0.354046, -0.300064}, {0.409886, -0.34602}, {0.56118, -0.469098}, {0.764854, -0.635378}, + {1.05615, -0.873364}, {1.16173, -0.96079}, {1.16047, -0.959515}, {1.05297, -0.870166}, + {0.866966, -0.716971}, {0.650974, -0.540976}, {0.462596, -0.389054}, {0.353371, -0.301627}, + {0.353899, -0.302122}, {0.464307, -0.390691}, {0.653947, -0.543888}, {0.870675, -0.720663}, + {1.07423, -0.887613}, {1.11286, -0.920772}, {1.07081, -0.886703}, {0.954616, -0.791248}, + {0.78542, -0.653081}, {0.603294, -0.505609}, {0.461777, -0.391636}, {0.408783, -0.348602}, + {0.463771, -0.391654}, {0.607272, -0.505968}, {0.790837, -0.65401}, {0.960022, -0.792498}, + {1.01446, -0.839305}, {1.01249, -0.839574}, {0.980906, -0.814407}, {0.905738, -0.752993}, + {0.784415, -0.654267}, {0.64917, -0.544714}, {0.558676, -0.471242}, {0.559894, -0.471059}, + {0.652772, -0.544183}, {0.789988, -0.653468}, {0.912063, -0.752107}, {0.986013, -0.813704}, + {0.947943, -0.786696}, {0.961747, -0.799577}, {0.98013, -0.8149}, {0.952881, -0.792257}, + {0.864487, -0.719835}, {0.761105, -0.635464}, {0.715723, -0.598056}, {0.763315, -0.635511}, + {0.868656, -0.719369}, {0.958234, -0.790858}, {0.985232, -0.812944}, {0.964889, -0.798132}, + {0.986425, -0.821971}, {1.06872, -0.888871}, {1.10427, -0.916299}, {1.05044, -0.870663}, + {0.954341, -0.791611}, {0.907489, -0.753982}, {0.955531, -0.794102}, {1.05292, -0.873803}, + {1.10779, -0.918069}, {1.07234, -0.888798}, {0.988752, -0.82125}, {0.945192, -0.787184}, + {1.07002, -0.890928}, {1.15705, -0.960808}, {1.15661, -0.958449}, {1.06867, -0.885218}, + {0.981026, -0.813747}, {0.981551, -0.815461}, {1.07025, -0.889167}, {1.15912, -0.962105}, + {1.15997, -0.962456}, {1.07242, -0.890862}, {0.984159, -0.819515}, {0.983228, -0.819809}, + {1.10577, -0.919416}, {1.15678, -0.959814}, {1.10845, -0.918813}, {1.01016, -0.837834}, + {0.961188, -0.798356}, {1.01121, -0.840304}, {1.11041, -0.922003}, {1.15925, -0.961781}, + {1.10809, -0.919633}, {1.00705, -0.837288}, {0.956173, -0.796589}, {1.00563, -0.83779}, + {1.0509, -0.873278}, {1.06811, -0.886659}, {1.0097, -0.838137}, {0.945196, -0.785}, + {0.945791, -0.785383}, {1.01137, -0.838798}, {1.07049, -0.886646}, {1.0534, -0.872207}, + {0.964632, -0.799738}, {0.881846, -0.732942}, {0.881132, -0.733616}, {0.962726, -0.801192}, + {0.953683, -0.792715}, {0.980082, -0.81419}, {0.9608, -0.79781}, {0.945936, -0.784524}, + {0.96199, -0.796106}, {0.982244, -0.811106}, {0.956339, -0.788946}, {0.868699, -0.71735}, + {0.765224, -0.633848}, {0.718571, -0.597372}, {0.763758, -0.635912}, {0.866261, -0.720794}, + {0.906923, -0.753674}, {0.981456, -0.814563}, {1.01186, -0.838282}, {1.01232, -0.836397}, + {0.982821, -0.809633}, {0.909065, -0.747462}, {0.78849, -0.648623}, {0.653285, -0.539379}, + {0.561887, -0.466699}, {0.56111, -0.467981}, {0.651279, -0.5431}, {0.786027, -0.654231}, + {0.95633, -0.79314}, {1.07174, -0.887175}, {1.11221, -0.918584}, {1.07195, -0.882926}, + {0.957053, -0.786518}, {0.788597, -0.647974}, {0.606688, -0.500441}, {0.464746, -0.38669}, + {0.410517, -0.344417}, {0.463565, -0.388925}, {0.604997, -0.50505}, {0.787204, -0.654458}, + {1.0551, -0.872699}, {1.16145, -0.959325}, {1.16097, -0.957426}, {1.05411, -0.867994}, + {0.868563, -0.715153}, {0.652854, -0.53954}, {0.46448, -0.387728}, {0.354829, -0.300232}, + {0.354491, -0.300814}, {0.463852, -0.389801}, {0.652697, -0.543512}, {0.869216, -0.720441}, + {1.11001, -0.916672}, {1.16138, -0.95894}, {1.10807, -0.914757}, {0.963429, -0.795738}, + {0.763685, -0.63268}, {0.560783, -0.468402}, {0.410032, -0.347146}, {0.354347, -0.302496}, + {0.410228, -0.347288}, {0.56176, -0.469298}, {0.765819, -0.634738}, {0.966148, -0.798407}, + {1.07317, -0.886755}, {1.07168, -0.886629}, {1.00467, -0.832134}, {0.87882, -0.729311}, + {0.716169, -0.597018}, {0.5599, -0.470567}, {0.463163, -0.392404}, {0.463558, -0.392165}, + {0.561382, -0.470049}, {0.719143, -0.596626}, {0.88289, -0.729284}, {1.00835, -0.832346}, + {0.988023, -0.818802}, {0.981672, -0.815011}, {0.952472, -0.791468}, {0.877698, -0.730165}, + {0.761775, -0.635523}, {0.650706, -0.545214}, {0.604801, -0.507751}, {0.65197, -0.545178}, + {0.764633, -0.635155}, {0.882053, -0.729255}, {0.957158, -0.790261}, {0.984764, -0.814137}, + {0.944125, -0.785381}, {0.980634, -0.816017}, {1.00247, -0.833302}, {0.960503, -0.797932}, + {0.865661, -0.719861}, {0.786294, -0.655153}, {0.786934, -0.655821}, {0.867738, -0.72121}, + {0.964114, -0.798652}, {1.00697, -0.832725}, {0.9845, -0.814772}, {0.945659, -0.784752}, + {0.980221, -0.81691}, {1.04993, -0.87276}, {1.04997, -0.870966}, {0.980039, -0.812739}, + {0.910231, -0.756159}, {0.910895, -0.758138}, {0.98214, -0.817416}, {1.05352, -0.87563}, + {1.05427, -0.875431}, {0.98389, -0.817603}, {0.912607, -0.760119}, {0.911159, -0.760133}, + {1.0503, -0.874212}, {1.10335, -0.916192}, {1.06756, -0.885521}, {0.985103, -0.817782}, + {0.943571, -0.784771}, {0.987028, -0.821611}, {1.07126, -0.891067}, {1.10818, -0.920883}, + {1.05497, -0.876791}, {0.958468, -0.797971}, {0.910028, -0.759186}, {0.955566, -0.797109}, + {1.04949, -0.872734}, {1.06685, -0.886073}, {1.00903, -0.838073}, {0.945229, -0.785811}, + {0.946373, -0.787131}, {1.01229, -0.841303}, {1.07162, -0.889596}, {1.05463, -0.87523}, + {0.965725, -0.80243}, {0.882442, -0.73492}, {0.880931, -0.734627}, {0.961731, -0.801255}, + {0.978262, -0.813467}, {0.983539, -0.81753}, {0.944576, -0.785031}, {0.921942, -0.765645}, + {0.946845, -0.78501}, {0.987626, -0.817416}, {0.983227, -0.813215}, {0.909684, -0.753089}, + {0.81169, -0.673669}, {0.765633, -0.6372}, {0.808995, -0.673899}, {0.905172, -0.753411}, + {0.908055, -0.754985}, {0.942135, -0.782595}, {0.945962, -0.784348}, {0.946988, -0.78301}, + {0.945025, -0.779221}, {0.912205, -0.751041}, {0.828845, -0.682783}, {0.717196, -0.592456}, + {0.635566, -0.527221}, {0.634306, -0.527791}, {0.713839, -0.594297}, {0.824462, -0.685961}, + {0.909756, -0.755058}, {0.986802, -0.817238}, {1.01281, -0.836246}, {0.988323, -0.813324}, + {0.912603, -0.749164}, {0.791099, -0.649177}, {0.648844, -0.533821}, {0.531268, -0.439455}, + {0.48471, -0.403144}, {0.529169, -0.440952}, {0.64542, -0.537299}, {0.787479, -0.654588}, + {0.982643, -0.813071}, {1.07224, -0.885117}, {1.07268, -0.883124}, {0.984031, -0.80821}, + {0.82931, -0.68049}, {0.649052, -0.53364}, {0.491369, -0.406426}, {0.399245, -0.332894}, + {0.398288, -0.333291}, {0.488944, -0.408094}, {0.646189, -0.537301}, {0.826964, -0.685747}, + {1.05484, -0.870787}, {1.10917, -0.91438}, {1.05505, -0.868682}, {0.909755, -0.748716}, + {0.717298, -0.591352}, {0.531557, -0.440698}, {0.399524, -0.334343}, {0.351496, -0.296061}, + {0.398033, -0.334165}, {0.529442, -0.441226}, {0.715595, -0.593279}, {0.908919, -0.751527}, + {1.05492, -0.870641}, {1.05462, -0.870578}, {0.964648, -0.796749}, {0.810731, -0.670714}, + {0.635379, -0.527789}, {0.485236, -0.406039}, {0.398919, -0.336311}, {0.398286, -0.335741}, + {0.483848, -0.404716}, {0.634293, -0.526529}, {0.810581, -0.670086}, {0.965132, -0.79669}, + {0.983137, -0.813267}, {0.956533, -0.792503}, {0.880212, -0.730296}, {0.764332, -0.635357}, + {0.63446, -0.529235}, {0.530208, -0.44443}, {0.489803, -0.411621}, {0.529553, -0.44349}, + {0.633996, -0.527433}, {0.764852, -0.633001}, {0.881578, -0.728017}, {0.957708, -0.791087}, + {0.911065, -0.756731}, {0.90759, -0.754743}, {0.878865, -0.730867}, {0.808498, -0.672442}, + {0.714952, -0.595549}, {0.646991, -0.540274}, {0.646913, -0.540487}, {0.71513, -0.595704}, + {0.809667, -0.671647}, {0.881103, -0.72891}, {0.909906, -0.752574}, {0.912056, -0.755782}, + {0.910096, -0.758283}, {0.953976, -0.794023}, {0.960955, -0.79835}, {0.906061, -0.752102}, + {0.826491, -0.686809}, {0.789153, -0.657105}, {0.827152, -0.688951}, {0.907821, -0.754678}, + {0.963956, -0.799534}, {0.957414, -0.793498}, {0.912436, -0.757324}, {0.886661, -0.737845}, + {0.905238, -0.754449}, {0.9598, -0.798109}, {0.953186, -0.791836}, {0.909625, -0.756445}, + {0.886077, -0.738438}, {0.911681, -0.76052}, {0.95712, -0.797639}, {0.964931, -0.802832}, + {0.910193, -0.756825}, {0.830028, -0.691083}, {0.791203, -0.660238}, {0.826951, -0.690435}, + {0.959333, -0.798864}, {1.00072, -0.832245}, {0.979131, -0.814474}, {0.942911, -0.785392}, + {0.94444, -0.787394}, {0.983443, -0.819466}, {1.00692, -0.837934}, {0.96591, -0.803247}, + {0.871256, -0.725178}, {0.79087, -0.659725}, {0.788973, -0.659029}, {0.866207, -0.722797}, + {0.951502, -0.792164}, {0.978073, -0.81405}, {0.959796, -0.799062}, {0.946133, -0.787637}, + {0.96307, -0.800928}, {0.983832, -0.817045}, {0.958292, -0.79525}, {0.870968, -0.723293}, + {0.767495, -0.63878}, {0.720162, -0.600778}, {0.763979, -0.637559}, {0.864966, -0.720942}, + {0.907024, -0.754961}, {0.941191, -0.78304}, {0.945516, -0.78567}, {0.94707, -0.785292}, + {0.945425, -0.782215}, {0.912778, -0.75433}, {0.829649, -0.685964}, {0.718325, -0.595226}, + {0.636876, -0.529364}, {0.635356, -0.529169}, {0.714159, -0.594905}, {0.82393, -0.686022}, + {0.883695, -0.734345}, {0.943046, -0.78228}, {0.962661, -0.796255}, {0.945518, -0.779638}, + {0.887909, -0.730577}, {0.78874, -0.648806}, {0.666353, -0.549122}, {0.56184, -0.464538}, + {0.519736, -0.431134}, {0.559555, -0.464971}, {0.662326, -0.55068}, {0.783983, -0.651881}, + {0.910466, -0.754149}, {0.982984, -0.812088}, {0.984028, -0.810411}, {0.913295, -0.750132}, + {0.789162, -0.647354}, {0.644338, -0.528999}, {0.51765, -0.426214}, {0.44362, -0.36659}, + {0.442638, -0.366719}, {0.514944, -0.427134}, {0.640588, -0.531597}, {0.785351, -0.6515}, + {0.956983, -0.790247}, {1.00705, -0.829835}, {0.958737, -0.788403}, {0.830394, -0.681967}, + {0.667196, -0.54804}, {0.51823, -0.426587}, {0.417992, -0.345236}, {0.382564, -0.316793}, + {0.416077, -0.344799}, {0.514972, -0.426665}, {0.663527, -0.549448}, {0.827298, -0.684327}, + {0.964904, -0.795846}, {0.965713, -0.796009}, {0.87102, -0.71776}, {0.718984, -0.592754}, + {0.563014, -0.464941}, {0.444786, -0.368332}, {0.383195, -0.318124}, {0.382071, -0.317315}, + {0.441832, -0.36636}, {0.55925, -0.462805}, {0.715535, -0.591263}, {0.868694, -0.717077}, + {0.909407, -0.751137}, {0.870192, -0.719561}, {0.766991, -0.634981}, {0.637511, -0.528456}, + {0.521302, -0.43282}, {0.444302, -0.369591}, {0.417088, -0.347316}, {0.442097, -0.367674}, + {0.517827, -0.429316}, {0.634041, -0.524121}, {0.764456, -0.630976}, {0.868927, -0.717143}, + {0.828542, -0.686918}, {0.789339, -0.655616}, {0.719679, -0.598187}, {0.636449, -0.529015}, + {0.561686, -0.467087}, {0.516942, -0.430452}, {0.515986, -0.429929}, {0.559338, -0.465207}, + {0.633862, -0.525378}, {0.71781, -0.593316}, {0.788424, -0.651268}, {0.828303, -0.685161}, + {0.789856, -0.65752}, {0.78791, -0.656065}, {0.764306, -0.635606}, {0.716127, -0.594935}, + {0.665021, -0.552867}, {0.642661, -0.535285}, {0.664276, -0.553589}, {0.715337, -0.594958}, + {0.764184, -0.633695}, {0.78849, -0.652733}, {0.79048, -0.654887}, {0.787598, -0.65419}, + {0.826413, -0.689125}, {0.866134, -0.720901}, {0.866302, -0.719642}, {0.8266, -0.686494}, + {0.786849, -0.654679}, {0.787158, -0.656254}, {0.827716, -0.689988}, {0.868472, -0.722502}, + {0.869048, -0.721551}, {0.829017, -0.688201}, {0.788291, -0.655726}, {0.787238, -0.65636}, + {0.806404, -0.672542}, {0.876255, -0.729902}, {0.905549, -0.754561}, {0.909824, -0.759239}, + {0.911367, -0.761343}, {0.909808, -0.759645}, {0.88218, -0.735273}, {0.812453, -0.676096}, + {0.719265, -0.598635}, {0.650973, -0.542973}, {0.649308, -0.542686}, {0.714759, -0.597186}, + {0.875528, -0.730116}, {0.949787, -0.791812}, {0.979432, -0.816962}, {0.986245, -0.822968}, + {0.983221, -0.820008}, {0.956268, -0.79652}, {0.882883, -0.734657}, {0.767908, -0.639209}, + {0.657054, -0.548106}, {0.609749, -0.509898}, {0.653488, -0.546611}, {0.76165, -0.636052}, + {0.903865, -0.7535}, {0.978521, -0.815542}, {1.01024, -0.841477}, {1.01218, -0.842025}, + {0.98366, -0.817067}, {0.91053, -0.755649}, {0.79074, -0.656558}, {0.656537, -0.546318}, + {0.565677, -0.472109}, {0.564151, -0.471486}, {0.652219, -0.544642}, {0.784485, -0.654334}, + {0.907658, -0.755482}, {0.984871, -0.818772}, {1.0117, -0.839332}, {0.987933, -0.817759}, + {0.912552, -0.754259}, {0.791414, -0.654168}, {0.650012, -0.538202}, {0.53361, -0.443007}, + {0.487743, -0.40577}, {0.531668, -0.442571}, {0.646238, -0.537976}, {0.78641, -0.654744}, + {0.90948, -0.754644}, {0.982071, -0.8131}, {0.983366, -0.811973}, {0.912734, -0.751998}, + {0.788623, -0.64916}, {0.644089, -0.530499}, {0.518145, -0.427377}, {0.445015, -0.367508}, + {0.444493, -0.367452}, {0.516436, -0.427656}, {0.641086, -0.531906}, {0.784847, -0.65175}, + {0.908595, -0.751269}, {0.95569, -0.788474}, {0.910793, -0.749804}, {0.792214, -0.651229}, + {0.644767, -0.529732}, {0.51472, -0.422831}, {0.430638, -0.353559}, {0.402011, -0.329908}, + {0.42975, -0.353253}, {0.512703, -0.422949}, {0.641682, -0.530892}, {0.788888, -0.653118}, + {0.881405, -0.727209}, {0.882682, -0.727454}, {0.791455, -0.651686}, {0.651413, -0.535995}, + {0.519546, -0.427026}, {0.431407, -0.35383}, {0.391367, -0.320231}, {0.390692, -0.319587}, + {0.42934, -0.352217}, {0.516202, -0.425168}, {0.647468, -0.534536}, {0.788186, -0.65087}, + {0.811606, -0.669797}, {0.767676, -0.633926}, {0.657384, -0.543041}, {0.535325, -0.44185}, + {0.446838, -0.367812}, {0.403221, -0.330752}, {0.391118, -0.320245}, {0.401141, -0.328762}, + {0.443013, -0.364033}, {0.53056, -0.436964}, {0.652954, -0.538357}, {0.764991, -0.63103}, + {0.718148, -0.594358}, {0.656668, -0.544524}, {0.566534, -0.469907}, {0.489575, -0.405152}, + {0.446437, -0.368157}, {0.431026, -0.354731}, {0.429791, -0.353818}, {0.443038, -0.365117}, + {0.484873, -0.399705}, {0.561764, -0.462965}, {0.653134, -0.538495}, {0.716845, -0.591951}, + {0.64991, -0.540158}, {0.609517, -0.50724}, {0.565223, -0.469676}, {0.533674, -0.442191}, + {0.518439, -0.42892}, {0.513936, -0.425524}, {0.516595, -0.428252}, {0.530587, -0.439604}, + {0.561827, -0.464433}, {0.606721, -0.500747}, {0.648357, -0.535584}, {0.665914, -0.551716}, + {0.648763, -0.540834}, {0.653791, -0.54453}, {0.653749, -0.543279}, {0.64854, -0.538368}, + {0.643221, -0.534567}, {0.642987, -0.535396}, {0.648008, -0.539679}, {0.653278, -0.542816}, + {0.653614, -0.541465}, {0.64882, -0.536941}, {0.643841, -0.533909}, {0.643781, -0.535683}, + {0.714768, -0.596264}, {0.762447, -0.634828}, {0.786361, -0.654068}, {0.788876, -0.656779}, + {0.787038, -0.65659}, {0.790289, -0.659955}, {0.788985, -0.658021}, {0.765755, -0.636952}, + {0.717875, -0.595989}, {0.666946, -0.55406}, {0.644335, -0.536754}, {0.66505, -0.555112}, + {0.760297, -0.634533}, {0.875585, -0.730602}, {0.952714, -0.795538}, {0.980608, -0.819361}, + {0.956432, -0.798904}, {0.881715, -0.735447}, {0.766887, -0.638576}, {0.638077, -0.53103}, + {0.53475, -0.445826}, {0.494181, -0.413213}, {0.531879, -0.445148}, {0.632794, -0.528872}, + {0.875148, -0.730244}, {1.00053, -0.83478}, {1.06809, -0.891045}, {1.0702, -0.892241}, + {1.00602, -0.837831}, {0.881951, -0.733898}, {0.720757, -0.600013}, {0.565916, -0.472267}, + {0.469701, -0.393385}, {0.468381, -0.392782}, {0.562022, -0.470403}, {0.714748, -0.596952}, + {0.951724, -0.792978}, {1.0675, -0.888794}, {1.10965, -0.922755}, {1.07095, -0.889341}, + {0.956984, -0.794048}, {0.789425, -0.655373}, {0.609099, -0.506893}, {0.469117, -0.39185}, + {0.415847, -0.348108}, {0.467634, -0.390967}, {0.60581, -0.505486}, {0.784489, -0.653943}, + {0.979257, -0.813659}, {1.06928, -0.887139}, {1.0707, -0.886703}, {0.982609, -0.812689}, + {0.828142, -0.684875}, {0.648738, -0.537238}, {0.492989, -0.409118}, {0.4031, -0.334897}, + {0.403108, -0.334733}, {0.492489, -0.40889}, {0.646821, -0.537445}, {0.824799, -0.685681}, + {0.955085, -0.790936}, {1.0053, -0.831093}, {0.957134, -0.790022}, {0.828631, -0.683406}, + {0.665481, -0.548845}, {0.517532, -0.426748}, {0.419298, -0.345152}, {0.385841, -0.316888}, + {0.419992, -0.345177}, {0.51773, -0.427116}, {0.664126, -0.549783}, {0.826087, -0.684663}, + {0.880649, -0.727353}, {0.881829, -0.727543}, {0.790393, -0.651558}, {0.650103, -0.535468}, + {0.518382, -0.426105}, {0.431098, -0.352788}, {0.392378, -0.31945}, {0.392765, -0.319301}, + {0.43158, -0.352366}, {0.517685, -0.425494}, {0.64784, -0.534816}, {0.787744, -0.651055}, + {0.766142, -0.632214}, {0.721214, -0.595266}, {0.610714, -0.50388}, {0.494908, -0.407265}, + {0.42059, -0.343957}, {0.392784, -0.318851}, {0.388285, -0.313951}, {0.392534, -0.317921}, + {0.419281, -0.341768}, {0.492016, -0.403823}, {0.607014, -0.500108}, {0.718572, -0.592754}, + {0.637533, -0.52682}, {0.566598, -0.46887}, {0.470787, -0.389088}, {0.404848, -0.332564}, + {0.386843, -0.31513}, {0.392913, -0.318428}, {0.392354, -0.317861}, {0.384923, -0.312895}, + {0.401295, -0.32789}, {0.466159, -0.382542}, {0.562529, -0.462891}, {0.635899, -0.52438}, + {0.534317, -0.442955}, {0.470272, -0.390355}, {0.417093, -0.344997}, {0.404226, -0.332048}, + {0.420386, -0.34365}, {0.431316, -0.352355}, {0.418891, -0.342817}, {0.401172, -0.328919}, + {0.412834, -0.338725}, {0.465949, -0.38262}, {0.531553, -0.437516}, {0.562139, -0.464363}, + {0.493902, -0.410825}, {0.468791, -0.389727}, {0.468461, -0.387955}, {0.493162, -0.407106}, + {0.517902, -0.427462}, {0.517514, -0.427864}, {0.491941, -0.407082}, {0.466408, -0.385269}, + {0.466295, -0.383977}, {0.491793, -0.404673}, {0.517697, -0.427228}, {0.518528, -0.42989}, + {0.531833, -0.443231}, {0.562443, -0.46799}, {0.606581, -0.503922}, {0.647608, -0.538209}, + {0.664726, -0.553393}, {0.648354, -0.540326}, {0.607691, -0.505701}, {0.563439, -0.467066}, + {0.532447, -0.439851}, {0.518209, -0.428159}, {0.514734, -0.426852}, {0.51796, -0.431201}, + {0.63291, -0.527945}, {0.715274, -0.596042}, {0.785456, -0.654767}, {0.826009, -0.689563}, + {0.827315, -0.691394}, {0.788912, -0.658884}, {0.719733, -0.599566}, {0.637066, -0.529045}, + {0.563173, -0.467104}, {0.519211, -0.431518}, {0.518209, -0.432111}, {0.560322, -0.467836}, + {0.804534, -0.670781}, {0.958095, -0.799225}, {1.04923, -0.875744}, {1.05128, -0.877321}, + {0.963287, -0.803076}, {0.810688, -0.674956}, {0.636615, -0.529804}, {0.488106, -0.406971}, + {0.403106, -0.337317}, {0.402144, -0.336993}, {0.485081, -0.405626}, {0.631544, -0.526882}, + {0.958055, -0.79803}, {1.10253, -0.918344}, {1.15661, -0.962985}, {1.10614, -0.920206}, + {0.963386, -0.80095}, {0.765061, -0.636437}, {0.563985, -0.470531}, {0.415273, -0.348206}, + {0.360323, -0.302975}, {0.414176, -0.347174}, {0.561166, -0.46844}, {0.760355, -0.633544}, + {1.04883, -0.871692}, {1.15629, -0.960328}, {1.15785, -0.960684}, {1.05242, -0.872646}, + {0.867692, -0.719841}, {0.653288, -0.543268}, {0.46733, -0.390256}, {0.360202, -0.301767}, + {0.360488, -0.301459}, {0.467436, -0.389396}, {0.651834, -0.542053}, {0.864392, -0.718579}, + {1.05051, -0.870624}, {1.10574, -0.91547}, {1.05255, -0.870705}, {0.907469, -0.750694}, + {0.71528, -0.592387}, {0.53113, -0.44062}, {0.402088, -0.333687}, {0.356814, -0.295451}, + {0.403793, -0.333737}, {0.53271, -0.440658}, {0.71494, -0.592355}, {0.905299, -0.750602}, + {0.962527, -0.795674}, {0.963539, -0.795964}, {0.868658, -0.717384}, {0.716134, -0.591464}, + {0.560512, -0.462618}, {0.444341, -0.365573}, {0.385921, -0.315861}, {0.38723, -0.316126}, + {0.447067, -0.366095}, {0.562225, -0.46285}, {0.715526, -0.591141}, {0.866741, -0.716797}, + {0.810385, -0.668894}, {0.766125, -0.632463}, {0.655207, -0.540786}, {0.532737, -0.438747}, + {0.444947, -0.364279}, {0.403385, -0.327604}, {0.393803, -0.318229}, {0.405352, -0.328076}, + {0.446911, -0.364238}, {0.532732, -0.437343}, {0.653233, -0.538395}, {0.764153, -0.630586}, + {0.636884, -0.525658}, {0.56563, -0.467236}, {0.469448, -0.386983}, {0.403469, -0.330156}, + {0.386116, -0.312813}, {0.393426, -0.316676}, {0.394081, -0.316956}, {0.387161, -0.312747}, + {0.403133, -0.328102}, {0.467077, -0.382661}, {0.562605, -0.462635}, {0.635504, -0.52367}, + {0.488623, -0.403785}, {0.416667, -0.34438}, {0.361438, -0.296958}, {0.356958, -0.290352}, + {0.386262, -0.312133}, {0.404112, -0.326145}, {0.386502, -0.312506}, {0.356316, -0.289069}, + {0.359029, -0.292435}, {0.413136, -0.337829}, {0.485974, -0.398889}, {0.52064, -0.428934}, + {0.403403, -0.333963}, {0.360809, -0.298182}, {0.360349, -0.295854}, {0.402612, -0.328872}, + {0.445255, -0.363448}, {0.445368, -0.364105}, {0.402454, -0.329396}, {0.359032, -0.293563}, + {0.35822, -0.292418}, {0.400701, -0.327542}, {0.444074, -0.36458}, {0.445233, -0.367395}, + {0.402024, -0.333495}, {0.413791, -0.342564}, {0.466418, -0.385211}, {0.531149, -0.438704}, + {0.560721, -0.463913}, {0.531951, -0.440594}, {0.467203, -0.386301}, {0.413744, -0.340377}, + {0.401158, -0.328617}, {0.418162, -0.342867}, {0.430282, -0.354513}, {0.41901, -0.346944}, + {0.484747, -0.403068}, {0.560524, -0.465807}, {0.650941, -0.541315}, {0.714135, -0.594855}, + {0.715245, -0.596488}, {0.653683, -0.544691}, {0.56358, -0.46785}, {0.487006, -0.402145}, + {0.444771, -0.366269}, {0.430556, -0.355326}, {0.430243, -0.356659}, {0.443622, -0.368824}, + {0.631331, -0.52601}, {0.760034, -0.633521}, {0.864246, -0.721319}, {0.905595, -0.756611}, + {0.867511, -0.724622}, {0.765155, -0.63787}, {0.636401, -0.528868}, {0.521239, -0.43214}, + {0.44557, -0.369658}, {0.419224, -0.348898}, {0.443767, -0.370103}, {0.51758, -0.431538}, + {0.902427, -0.750354}, {1.0479, -0.872403}, {1.10353, -0.919235}, {1.05113, -0.875217}, + {0.907076, -0.754595}, {0.715588, -0.595226}, {0.531267, -0.4429}, {0.401164, -0.335981}, + {0.354514, -0.29758}, {0.400529, -0.3349}, {0.529216, -0.440394}, {0.71172, -0.591331}, + {1.04799, -0.870268}, {1.1553, -0.959763}, {1.15687, -0.960888}, {1.05157, -0.873127}, + {0.86693, -0.720155}, {0.652405, -0.543334}, {0.466182, -0.390255}, {0.358867, -0.301778}, + {0.359218, -0.301236}, {0.466438, -0.388562}, {0.651091, -0.540517}, {0.863696, -0.716755}, + {1.10337, -0.914346}, {1.15682, -0.958479}, {1.10563, -0.915858}, {0.962001, -0.79721}, + {0.762856, -0.63331}, {0.561523, -0.46775}, {0.41347, -0.345587}, {0.359925, -0.300571}, + {0.41527, -0.345087}, {0.563153, -0.466513}, {0.762393, -0.631297}, {0.959567, -0.794961}, + {1.05093, -0.869067}, {1.05202, -0.869833}, {0.962698, -0.796173}, {0.808564, -0.669304}, + {0.633566, -0.525067}, {0.48557, -0.40248}, {0.402562, -0.33291}, {0.404139, -0.33315}, + {0.488902, -0.402767}, {0.635809, -0.524588}, {0.808142, -0.667819}, {0.960699, -0.794449}, + {0.907461, -0.749272}, {0.868488, -0.717353}, {0.764704, -0.631891}, {0.63457, -0.52412}, + {0.519165, -0.427631}, {0.444969, -0.364663}, {0.421215, -0.343753}, {0.448056, -0.365789}, + {0.522742, -0.428483}, {0.63591, -0.52337}, {0.763448, -0.629741}, {0.866741, -0.715477}, + {0.716895, -0.591475}, {0.654918, -0.540733}, {0.563903, -0.465064}, {0.486687, -0.399506}, + {0.444944, -0.362568}, {0.432395, -0.350326}, {0.433953, -0.351298}, {0.448218, -0.364282}, + {0.488829, -0.399619}, {0.563356, -0.462603}, {0.652812, -0.5373}, {0.715764, -0.589874}, + {0.533085, -0.439668}, {0.468573, -0.386357}, {0.414961, -0.340431}, {0.40239, -0.327359}, + {0.419967, -0.339572}, {0.43294, -0.349558}, {0.422056, -0.341476}, {0.404494, -0.328566}, + {0.415001, -0.338524}, {0.466539, -0.381848}, {0.531036, -0.435857}, {0.561168, -0.461839}, + {0.402562, -0.331819}, {0.35989, -0.295816}, {0.359447, -0.293397}, {0.402073, -0.326571}, + {0.445463, -0.361607}, {0.446387, -0.362917}, {0.403877, -0.328788}, {0.360206, -0.293206}, + {0.35868, -0.291907}, {0.400427, -0.3266}, {0.44338, -0.363148}, {0.444425, -0.365557}, + {0.354795, -0.292411}, {0.358461, -0.294534}, {0.413036, -0.338535}, {0.485775, -0.398405}, + {0.519963, -0.427309}, {0.487338, -0.400927}, {0.414766, -0.340547}, {0.358915, -0.29314}, + {0.353852, -0.287985}, {0.38281, -0.312243}, {0.400808, -0.328623}, {0.38392, -0.316159}, + {0.399797, -0.330293}, {0.464635, -0.383794}, {0.560507, -0.46371}, {0.633218, -0.525109}, + {0.63433, -0.526812}, {0.563097, -0.467156}, {0.467112, -0.385647}, {0.40105, -0.328851}, + {0.38306, -0.313193}, {0.389456, -0.319348}, {0.389569, -0.32094}, {0.38292, -0.316338}, + {0.528231, -0.438023}, {0.649458, -0.539454}, {0.760684, -0.633373}, {0.807088, -0.673172}, + {0.763381, -0.636653}, {0.653433, -0.543507}, {0.531722, -0.440136}, {0.443716, -0.365774}, + {0.400837, -0.330437}, {0.389558, -0.322152}, {0.400043, -0.331604}, {0.441644, -0.366167}, + {0.711186, -0.591151}, {0.862936, -0.718641}, {0.95913, -0.800092}, {0.960843, -0.801868}, + {0.867175, -0.72286}, {0.715938, -0.595418}, {0.560808, -0.465502}, {0.443789, -0.368554}, + {0.383526, -0.319373}, {0.383013, -0.319325}, {0.44195, -0.36779}, {0.557256, -0.462962}, + {0.977648, -0.810535}, {1.06704, -0.886339}, {1.06819, -0.887951}, {0.980195, -0.814622}, + {0.825755, -0.686283}, {0.645961, -0.53792}, {0.489583, -0.409603}, {0.399407, -0.335432}, + {0.399886, -0.334684}, {0.490293, -0.407243}, {0.645521, -0.533948}, {0.823687, -0.681448}, + {1.06705, -0.883747}, {1.10838, -0.918884}, {1.06907, -0.886589}, {0.95443, -0.791821}, + {0.786003, -0.653136}, {0.605002, -0.504557}, {0.465166, -0.389591}, {0.413125, -0.345878}, + {0.466744, -0.38827}, {0.606417, -0.501713}, {0.785557, -0.648974}, {0.952244, -0.787455}, + {1.06833, -0.883635}, {1.06952, -0.885097}, {1.00419, -0.831485}, {0.878647, -0.728307}, + {0.716209, -0.594817}, {0.561322, -0.46725}, {0.466711, -0.388645}, {0.468032, -0.388457}, + {0.564014, -0.466269}, {0.717716, -0.592374}, {0.87765, -0.724591}, {1.00188, -0.827957}, + {0.981157, -0.810639}, {0.956112, -0.790469}, {0.879911, -0.728015}, {0.763366, -0.631984}, + {0.633787, -0.524711}, {0.531582, -0.439568}, {0.493744, -0.407396}, {0.534328, -0.440214}, + {0.636773, -0.524598}, {0.764022, -0.629912}, {0.878061, -0.724537}, {0.954022, -0.78775}, + {0.828059, -0.683667}, {0.789068, -0.652029}, {0.71852, -0.593719}, {0.634587, -0.523508}, + {0.560808, -0.4612}, {0.51873, -0.425334}, {0.520357, -0.426373}, {0.564205, -0.463048}, + {0.636747, -0.523687}, {0.717815, -0.59119}, {0.786736, -0.648461}, {0.826821, -0.681998}, + {0.649228, -0.535679}, {0.608408, -0.50211}, {0.563277, -0.463787}, {0.531714, -0.435906}, + {0.518103, -0.423142}, {0.516232, -0.421199}, {0.520815, -0.425671}, {0.534699, -0.438152}, + {0.564022, -0.463018}, {0.606713, -0.49853}, {0.647261, -0.532381}, {0.66494, -0.547781}, + {0.492575, -0.405916}, {0.467289, -0.384442}, {0.4668, -0.382423}, {0.492099, -0.401766}, + {0.518402, -0.422978}, {0.519799, -0.424699}, {0.495055, -0.405101}, {0.468805, -0.383745}, + {0.466945, -0.38203}, {0.490834, -0.401783}, {0.516067, -0.423401}, {0.517019, -0.425414}, + {0.400898, -0.329801}, {0.413008, -0.338882}, {0.465946, -0.381611}, {0.531245, -0.435391}, + {0.561639, -0.461154}, {0.533497, -0.43849}, {0.468642, -0.384621}, {0.414223, -0.338637}, + {0.400306, -0.326367}, {0.416338, -0.339949}, {0.428254, -0.351089}, {0.417374, -0.343294}, + {0.399594, -0.328789}, {0.464844, -0.3824}, {0.560931, -0.462366}, {0.633766, -0.523808}, + {0.634952, -0.525598}, {0.563632, -0.466039}, {0.467259, -0.384538}, {0.400536, -0.327602}, + {0.38188, -0.311703}, {0.387949, -0.317652}, {0.388236, -0.319187}, {0.382124, -0.314681}, + {0.489021, -0.403565}, {0.604161, -0.499775}, {0.715285, -0.593659}, {0.762404, -0.634212}, + {0.717409, -0.596802}, {0.607089, -0.503536}, {0.491217, -0.405252}, {0.416324, -0.342052}, + {0.387747, -0.318786}, {0.382927, -0.315842}, {0.387675, -0.320242}, {0.415449, -0.34289}, + {0.644393, -0.53344}, {0.784142, -0.65123}, {0.876642, -0.730128}, {0.877801, -0.731866}, + {0.786903, -0.655285}, {0.647201, -0.537342}, {0.515433, -0.426767}, {0.427312, -0.35388}, + {0.387554, -0.321775}, {0.387507, -0.321928}, {0.426776, -0.353605}, {0.513737, -0.424754}, + {0.823246, -0.682551}, {0.951828, -0.791418}, {1.00178, -0.83441}, {0.953937, -0.794564}, + {0.82609, -0.687217}, {0.663244, -0.551235}, {0.514813, -0.428497}, {0.415598, -0.347231}, + {0.381434, -0.319109}, {0.415698, -0.346224}, {0.514178, -0.42597}, {0.661235, -0.547082}, + {0.984781, -0.815022}, {1.01025, -0.838096}, {0.985469, -0.818317}, {0.909201, -0.755153}, + {0.787025, -0.654425}, {0.644702, -0.537847}, {0.52825, -0.442488}, {0.483731, -0.405004}, + {0.530046, -0.440713}, {0.646902, -0.534216}, {0.788132, -0.649354}, {0.908919, -0.750002}, + {1.01037, -0.83604}, {1.01118, -0.837953}, {0.98149, -0.813885}, {0.906876, -0.752516}, + {0.785619, -0.652988}, {0.650901, -0.54244}, {0.561214, -0.468264}, {0.562294, -0.467636}, + {0.653163, -0.540255}, {0.787078, -0.64889}, {0.906451, -0.747133}, {0.979986, -0.80913}, + {0.98654, -0.816116}, {0.98265, -0.813695}, {0.954239, -0.790607}, {0.878967, -0.728661}, + {0.762746, -0.632876}, {0.652418, -0.54172}, {0.607499, -0.503995}, {0.654281, -0.541388}, + {0.764528, -0.631079}, {0.878747, -0.724656}, {0.952076, -0.785469}, {0.980567, -0.810022}, + {0.912, -0.754273}, {0.909769, -0.752995}, {0.880516, -0.728879}, {0.809042, -0.669481}, + {0.715417, -0.59168}, {0.648686, -0.536196}, {0.649766, -0.5368}, {0.717448, -0.592368}, + {0.809641, -0.668138}, {0.878603, -0.7249}, {0.906776, -0.748411}, {0.910568, -0.752242}, + {0.791359, -0.654261}, {0.789521, -0.65297}, {0.764816, -0.631996}, {0.715789, -0.590571}, + {0.665251, -0.548223}, {0.644496, -0.531108}, {0.66716, -0.5502}, {0.717495, -0.591957}, + {0.764264, -0.630378}, {0.786857, -0.648783}, {0.788898, -0.650666}, {0.78759, -0.650334}, + {0.649246, -0.536372}, {0.654126, -0.540102}, {0.653381, -0.538512}, {0.648056, -0.533315}, + {0.643744, -0.529732}, {0.644924, -0.531266}, {0.650434, -0.536217}, {0.654632, -0.539431}, + {0.653068, -0.537504}, {0.647008, -0.53224}, {0.642242, -0.528879}, {0.64337, -0.530862}, + {0.531406, -0.438506}, {0.562406, -0.463459}, {0.606572, -0.499316}, {0.647903, -0.533552}, + {0.665775, -0.548963}, {0.650015, -0.536311}, {0.60901, -0.501905}, {0.563297, -0.462993}, + {0.530511, -0.435111}, {0.515271, -0.422811}, {0.51211, -0.42136}, {0.516491, -0.426036}, + {0.484781, -0.39971}, {0.561479, -0.462725}, {0.652189, -0.538158}, {0.715419, -0.591481}, + {0.716504, -0.592977}, {0.654612, -0.541131}, {0.563513, -0.464147}, {0.48534, -0.398085}, + {0.441579, -0.361759}, {0.426772, -0.350591}, {0.427162, -0.352141}, {0.442105, -0.364881}, + {0.529563, -0.436884}, {0.651593, -0.538419}, {0.762769, -0.632033}, {0.808653, -0.671341}, + {0.764284, -0.634396}, {0.653533, -0.540988}, {0.530723, -0.437448}, {0.441427, -0.362931}, + {0.39759, -0.327517}, {0.38631, -0.319391}, {0.397944, -0.329317}, {0.441357, -0.364525}, + {0.646085, -0.533756}, {0.78606, -0.651431}, {0.878182, -0.729949}, {0.878711, -0.731235}, + {0.787196, -0.654323}, {0.646905, -0.536238}, {0.514485, -0.425654}, {0.425728, -0.352824}, + {0.385668, -0.320849}, {0.385984, -0.321259}, {0.426281, -0.353325}, {0.51451, -0.424868}, + {0.787758, -0.651546}, {0.906306, -0.752333}, {0.952243, -0.792423}, {0.906773, -0.754853}, + {0.788039, -0.655204}, {0.640298, -0.531913}, {0.509624, -0.424236}, {0.425075, -0.355511}, + {0.396859, -0.332418}, {0.426052, -0.354922}, {0.510788, -0.422509}, {0.640808, -0.528803}, + {0.908923, -0.752185}, {0.980113, -0.813766}, {0.980349, -0.815309}, {0.909182, -0.756104}, + {0.784639, -0.652386}, {0.639432, -0.532617}, {0.512855, -0.429188}, {0.439865, -0.369439}, + {0.440679, -0.368711}, {0.514694, -0.426899}, {0.641037, -0.528785}, {0.785194, -0.647739}, + {0.946748, -0.783834}, {0.946529, -0.785583}, {0.943249, -0.783444}, {0.908934, -0.755117}, + {0.824279, -0.685704}, {0.712322, -0.594182}, {0.631914, -0.527946}, {0.6331, -0.527236}, + {0.71521, -0.591859}, {0.827387, -0.681631}, {0.911075, -0.750006}, {0.944203, -0.779044}, + {0.947184, -0.784971}, {0.962878, -0.799005}, {0.982007, -0.814874}, {0.954503, -0.791986}, + {0.865704, -0.718843}, {0.762315, -0.63375}, {0.71698, -0.595846}, {0.763879, -0.63292}, + {0.867535, -0.716331}, {0.955232, -0.78739}, {0.981437, -0.809425}, {0.962042, -0.795239}, + {0.945708, -0.784084}, {0.983782, -0.815902}, {1.00546, -0.833419}, {0.962426, -0.797379}, + {0.866852, -0.718308}, {0.787475, -0.652825}, {0.78806, -0.653039}, {0.867819, -0.718022}, + {0.96225, -0.794931}, {1.00355, -0.828595}, {0.981294, -0.810865}, {0.944566, -0.781922}, + {0.913382, -0.757119}, {0.957874, -0.793793}, {0.963784, -0.797984}, {0.907436, -0.750829}, + {0.827225, -0.684541}, {0.790036, -0.654195}, {0.827928, -0.685662}, {0.907448, -0.750932}, + {0.961898, -0.795203}, {0.954595, -0.788875}, {0.910793, -0.753218}, {0.887621, -0.735102}, + {0.829546, -0.687252}, {0.869225, -0.719695}, {0.86813, -0.718096}, {0.827234, -0.684027}, + {0.787186, -0.651334}, {0.787726, -0.652348}, {0.828031, -0.685654}, {0.86761, -0.717612}, + {0.866847, -0.716087}, {0.826627, -0.68263}, {0.787418, -0.650923}, {0.788735, -0.653033}, + {0.716677, -0.593447}, {0.764484, -0.632507}, {0.787625, -0.651319}, {0.789417, -0.653108}, + {0.787396, -0.652028}, {0.790602, -0.654735}, {0.788655, -0.652241}, {0.764062, -0.63058}, + {0.714914, -0.589188}, {0.663901, -0.54742}, {0.642708, -0.531102}, {0.665509, -0.550974}, + {0.634351, -0.52513}, {0.717483, -0.593546}, {0.78737, -0.651674}, {0.827261, -0.685377}, + {0.827992, -0.686135}, {0.788917, -0.652818}, {0.718532, -0.592914}, {0.634171, -0.521962}, + {0.558888, -0.459903}, {0.51483, -0.424804}, {0.515329, -0.426581}, {0.559799, -0.46383}, + {0.633949, -0.524656}, {0.763686, -0.632159}, {0.867462, -0.719031}, {0.90766, -0.75297}, + {0.86835, -0.719775}, {0.76471, -0.632255}, {0.634321, -0.522887}, {0.517281, -0.426082}, + {0.440303, -0.363863}, {0.414205, -0.343879}, {0.440819, -0.366376}, {0.517661, -0.429242}, + {0.715567, -0.591908}, {0.867818, -0.718954}, {0.962938, -0.799185}, {0.962965, -0.799541}, + {0.867722, -0.719489}, {0.715028, -0.5916}, {0.558272, -0.461703}, {0.439627, -0.365042}, + {0.378583, -0.316396}, {0.379025, -0.317238}, {0.440662, -0.366905}, {0.559279, -0.463209}, + {0.828, -0.684575}, {0.95621, -0.79272}, {1.00468, -0.834531}, {0.955213, -0.793591}, + {0.826086, -0.685655}, {0.66216, -0.549645}, {0.512582, -0.427217}, {0.412397, -0.346391}, + {0.37819, -0.318824}, {0.413906, -0.34669}, {0.515009, -0.427307}, {0.664666, -0.549073}, + {0.911802, -0.753779}, {0.982307, -0.814784}, {0.98149, -0.815631}, {0.909447, -0.75593}, + {0.784343, -0.652083}, {0.638684, -0.532487}, {0.511624, -0.429351}, {0.438347, -0.369906}, + {0.439502, -0.369508}, {0.514655, -0.4281}, {0.642532, -0.530388}, {0.787852, -0.649535}, + {0.94453, -0.781219}, {0.962011, -0.79828}, {0.94307, -0.783709}, {0.884037, -0.734886}, + {0.783612, -0.652211}, {0.66033, -0.55168}, {0.555968, -0.466755}, {0.515608, -0.432876}, + {0.558439, -0.465275}, {0.664239, -0.548746}, {0.787542, -0.648241}, {0.886935, -0.730943}}; - std::vector> wfcr_another_spin_2 = { - {-0.000850659, 0.00221376}, {-0.000824667, 0.00233258}, {-0.00025408, 0.00206122}, {0.000478631, 0.00162836}, {0.000857409, 0.00122164}, {0.000690617, 0.000865747}, {0.000252532, 0.000500086}, {-1.97358e-05, 0.000150978}, {3.69117e-05, -3.74248e-06}, {0.000177712, 0.000233336}, {4.52095e-05, 0.00087035}, {-0.000415234, 0.00165232}, {5.94142e-05, 0.00267949}, {0.00105166, 0.00268062}, {0.00175924, 0.00262548}, {0.00167774, 0.00273249}, {0.000846263, 0.00287114}, {-0.0001803, 0.00269879}, {-0.000812061, 0.00205795}, {-0.000897011, 0.00122219}, {-0.000744479, 0.000720935}, {-0.000710161, 0.000892154}, {-0.000785981, 0.00158813}, {-0.00061953, 0.00231689}, {0.0014205, 0.00323172}, {0.00245194, 0.00326343}, {0.00254339, 0.00338285}, {0.00164597, 0.00365304}, {0.000352848, 0.00378036}, {-0.000612417, 0.00341444}, {-0.0009668, 0.00255828}, {-0.000968044, 0.00166251}, {-0.000992893, 0.00128342}, {-0.00105907, 0.00161763}, {-0.000796136, 0.00235437}, {0.000102526, 0.00297995}, {0.00151406, 0.00372578}, {0.00180885, 0.00385756}, {0.00133698, 0.00394148}, {0.000458959, 0.00402696}, {-0.000265637, 0.00393919}, {-0.00055238, 0.00347791}, {-0.000558492, 0.00269481}, {-0.000606658, 0.00195161}, {-0.000774242, 0.00167125}, {-0.000782284, 0.00200075}, {-0.000304306, 0.00269993}, {0.000621885, 0.00335765}, {-0.000255288, 0.00377188}, {-0.000578666, 0.00396859}, {-0.000801606, 0.00387581}, {-0.0007455, 0.00376145}, {-0.000428125, 0.00363368}, {-5.61308e-05, 0.00326119}, {0.000151935, 0.00250074}, {0.000143064, 0.00157857}, {4.12433e-05, 0.00100732}, {-7.37259e-06, 0.00118311}, {7.50117e-06, 0.00203634}, {-3.97326e-05, 0.00307286}, {-0.00262995, 0.00309697}, {-0.00275212, 0.00329879}, {-0.00201295, 0.00311649}, {-0.000892036, 0.00305148}, {9.92763e-05, 0.00304081}, {0.000765938, 0.00255441}, {0.00121087, 0.00127004}, {0.00152584, -0.000387784}, {0.00155589, -0.00144191}, {0.0010114, -0.00115733}, {-0.000172708, 0.000309335}, {-0.00160859, 0.00203217}, {-0.00361979, 0.00187857}, {-0.00293702, 0.0020949}, {-0.00142119, 0.00205592}, {-8.49879e-06, 0.00220368}, {0.000950259, 0.00208594}, {0.00175599, 0.000889985}, {0.00272285, -0.00149533}, {0.00356402, -0.00401823}, {0.00349632, -0.00515843}, {0.00200782, -0.00417881}, {-0.000474875, -0.00175451}, {-0.00272874, 0.000620624}, {-0.00238927, 0.000700564}, {-0.00121046, 0.00101474}, {7.99908e-05, 0.00125414}, {0.000848624, 0.00143781}, {0.00148146, 0.000696302}, {0.00268859, -0.0016751}, {0.00443425, -0.00512418}, {0.00565872, -0.00790653}, {0.00515424, -0.00837321}, {0.0027683, -0.00631599}, {-0.000267813, -0.00310631}, {-0.00226091, -0.000507626}, {-5.16118e-05, 0.000139308}, {0.00064619, 0.000615711}, {0.000801952, 0.00101293}, {0.000697033, 0.000835273}, {0.00136019, -0.000850858}, {0.00329127, -0.00418559}, {0.00564976, -0.00788611}, {0.00680305, -0.00997969}, {0.00576458, -0.00931341}, {0.00313569, -0.00645509}, {0.000621442, -0.00315179}, {-0.000426931, -0.000880551}, {0.00141297, 0.000348494}, {0.000943319, 0.000937462}, {-2.78181e-08, 0.00120799}, {-0.000355539, 0.000441123}, {0.000843933, -0.00190748}, {0.00334012, -0.00531184}, {0.00565542, -0.00821328}, {0.00629755, -0.00908454}, {0.00503133, -0.00758886}, {0.00300479, -0.00477347}, {0.00163284, -0.00214256}, {0.00134622, -0.000504425}, {0.00104173, 0.00101466}, {-0.000272058, 0.00155855}, {-0.00137594, 0.00151119}, {-0.00120731, 0.000368374}, {0.000486366, -0.00186183}, {0.00278219, -0.00436307}, {0.00429818, -0.00594823}, {0.0043304, -0.00589442}, {0.00333931, -0.00443482}, {0.00235727, -0.00247746}, {0.00194516, -0.000844953}, {0.00174431, 0.00024405}, {-0.000282354, 0.00169861}, {-0.00135553, 0.00204457}, {-0.00167071, 0.00175434}, {-0.000877419, 0.000760329}, {0.000573651, -0.000631027}, {0.00178955, -0.00186146}, {0.00217847, -0.00245592}, {0.00187432, -0.00229522}, {0.00146274, -0.00160787}, {0.00132002, -0.000723407}, {0.00124627, 0.000161286}, {0.000757131, 0.000994601}, {-0.000411389, 0.002483}, {0.000664762, 0.00256688}, {0.00147098, 0.00225153}, {0.00160136, 0.00163982}, {0.0011106, 0.00093562}, {0.000409698, 0.00034921}, {-0.000123655, 1.93428e-05}, {-0.000436175, -5.55788e-06}, {-0.000723632, 0.000259591}, {-0.00109888, 0.000762119}, {-0.00137175, 0.00140734}, {-0.00118961, 0.00204395}, {0.00181892, 0.00296487}, {0.00312759, 0.00289344}, {0.00315861, 0.0026423}, {0.00193264, 0.00233801}, {0.00025056, 0.00195006}, {-0.000993451, 0.00141113}, {-0.00149501, 0.000806377}, {-0.00159212, 0.000409872}, {-0.00170222, 0.000499137}, {-0.00176687, 0.0011095}, {-0.00129634, 0.00196539}, {2.67417e-05, 0.00266619}, {0.0034084, 0.00333155}, {0.0038427, 0.00313401}, {0.00269018, 0.00290156}, {0.000672062, 0.00269719}, {-0.00105739, 0.00236236}, {-0.00183363, 0.00177282}, {-0.00186106, 0.00108585}, {-0.00174584, 0.000698806}, {-0.00171999, 0.000929376}, {-0.00137804, 0.00171646}, {-0.000198099, 0.00263587}, {0.0017048, 0.00322729}, {0.00268187, 0.00333104}, {0.00199517, 0.00308239}, {0.000412822, 0.00283221}, {-0.00110048, 0.00265381}, {-0.0017948, 0.00239084}, {-0.00168035, 0.00190336}, {-0.00132851, 0.00131573}, {-0.00117801, 0.00098954}, {-0.0010729, 0.0012226}, {-0.00050065, 0.00195873}, {0.000729861, 0.00279654}, {0.00209266, 0.00330113}, {2.19272e-05, 0.00277353}, {-0.000957074, 0.00256523}, {-0.00174148, 0.00235975}, {-0.00187231, 0.00231918}, {-0.00139096, 0.00225199}, {-0.00075164, 0.00186676}, {-0.000374476, 0.00115971}, {-0.00028408, 0.000522671}, {-0.00017942, 0.000435763}, {0.000160266, 0.00102929}, {0.000567512, 0.00194182}, {0.000607946, 0.00261943}, {-0.0024215, 0.00177225}, {-0.00263682, 0.00167568}, {-0.00209535, 0.00164535}, {-0.00114102, 0.00184997}, {-0.000248941, 0.00187832}, {0.000321309, 0.0012058}, {0.000615769, -0.000147999}, {0.00077493, -0.00146392}, {0.000776697, -0.00187237}, {0.000421758, -0.00110328}, {-0.000414171, 0.000280854}, {-0.00152766, 0.00139216}, {-0.00274443, 0.000749227}, {-0.00197066, 0.000793853}, {-0.000775567, 0.00100805}, {0.000155336, 0.0013392}, {0.000657256, 0.00104115}, {0.00104563, -0.000468441}, {0.00158167, -0.00278986}, {0.0020371, -0.00464365}, {0.00183998, -0.0048709}, {0.000677836, -0.00340594}, {-0.0010533, -0.00129872}, {-0.00243964, 0.000223927}, {-0.00104825, 0.000168518}, {-9.99667e-05, 0.000343194}, {0.000542457, 0.000711696}, {0.000631678, 0.000824043}, {0.000711702, -0.000259321}, {0.0014042, -0.00280632}, {0.00259882, -0.00578326}, {0.00340756, -0.007483}, {0.0029706, -0.0068919}, {0.00132982, -0.00451958}, {-0.000507229, -0.00191114}, {-0.00140519, -0.000323743}, {0.000775353, 0.000221899}, {0.000887833, 0.000489889}, {0.000405415, 0.000801136}, {-0.000135239, 0.00037554}, {0.000194675, -0.00156994}, {0.00168329, -0.00471438}, {0.00352434, -0.00751854}, {0.00444058, -0.00833396}, {0.00380996, -0.00674179}, {0.00220887, -0.00386533}, {0.000850235, -0.00137242}, {0.000474651, -0.0001314}, {0.000988472, 0.000741314}, {0.000104752, 0.00105288}, {-0.000928353, 0.00112477}, {-0.00119781, 0.000146563}, {-8.73e-05, -0.00221071}, {0.00201349, -0.00511534}, {0.00390545, -0.00699787}, {0.00453751, -0.0067628}, {0.00383244, -0.0046732}, {0.00261536, -0.00208014}, {0.00175651, -0.000269502}, {0.0013939, 0.000473638}, {-0.000278078, 0.00139766}, {-0.00127652, 0.00169414}, {-0.0017797, 0.00150281}, {-0.00123359, 0.000298155}, {0.000314453, -0.00178583}, {0.00212936, -0.00380278}, {0.00330561, -0.00463548}, {0.00342906, -0.00387201}, {0.00278692, -0.00210491}, {0.00197045, -0.000384446}, {0.00129739, 0.000639583}, {0.000627818, 0.00108077}, {-0.00124773, 0.00197888}, {-0.00129968, 0.00219642}, {-0.000820366, 0.00186852}, {6.2613e-05, 0.000856692}, {0.000997415, -0.000513844}, {0.0016175, -0.00159544}, {0.0017559, -0.00187196}, {0.00149077, -0.00132339}, {0.00100921, -0.000377133}, {0.000441083, 0.000486924}, {-0.000176634, 0.00109135}, {-0.000794482, 0.0015546}, {0.000812117, 0.00215362}, {0.00217721, 0.00235972}, {0.00250808, 0.00206105}, {0.00185072, 0.00130905}, {0.000847902, 0.000425322}, {0.000100345, -0.000204685}, {-0.00032629, -0.00038357}, {-0.000784331, -0.000183488}, {-0.00148305, 0.00019328}, {-0.00210058, 0.000617194}, {-0.00200482, 0.00109475}, {-0.000889417, 0.00164666}, {0.00344363, 0.00240202}, {0.00412826, 0.00234947}, {0.0030609, 0.00205558}, {0.00102515, 0.00158366}, {-0.000727613, 0.000985268}, {-0.00151951, 0.000361307}, {-0.00163598, -0.000105598}, {-0.00175167, -0.000215457}, {-0.00204384, 0.00012061}, {-0.00193658, 0.000797118}, {-0.000752743, 0.00155791}, {0.00139869, 0.0021397}, {0.00429725, 0.00243424}, {0.00348847, 0.00225357}, {0.00123152, 0.00205561}, {-0.00107539, 0.0017845}, {-0.00224766, 0.00130311}, {-0.00219818, 0.00063953}, {-0.00173366, 8.04705e-05}, {-0.00154505, -1.44906e-05}, {-0.00145589, 0.00048098}, {-0.000696593, 0.00132523}, {0.00109584, 0.00208225}, {0.00321415, 0.00244832}, {0.00244031, 0.0022015}, {0.000620396, 0.00202706}, {-0.00149422, 0.00192451}, {-0.00265921, 0.0017784}, {-0.00248193, 0.0014026}, {-0.00160714, 0.000815412}, {-0.000946948, 0.000317101}, {-0.000758728, 0.000266482}, {-0.000495671, 0.000759492}, {0.000449455, 0.00152111}, {0.00190388, 0.00212198}, {0.00288065, 0.0023187}, {-0.000688485, 0.0016919}, {-0.00217813, 0.00155269}, {-0.00290026, 0.00151515}, {-0.0024853, 0.00150412}, {-0.00140646, 0.00128748}, {-0.000490928, 0.000773425}, {-0.000160101, 0.000184896}, {-0.000140597, -8.53298e-05}, {0.000100468, 0.000185019}, {0.000674583, 0.000838289}, {0.00106589, 0.00146436}, {0.00063142, 0.00174561}, {-0.00260573, 0.0010079}, {-0.00281905, 0.000850244}, {-0.00211981, 0.000891521}, {-0.00101254, 0.0010516}, {-0.000171228, 0.000910086}, {0.000118564, 0.000196445}, {9.63571e-05, -0.000829039}, {0.000145403, -0.00151408}, {0.00031269, -0.00136667}, {0.000236222, -0.000495381}, {-0.000440811, 0.000488826}, {-0.00159713, 0.00101378}, {-0.00209376, 0.00037292}, {-0.00132175, 0.000178588}, {-0.000357631, 0.000357329}, {0.000135574, 0.000621458}, {6.97704e-05, 0.0002626}, {-8.86416e-05, -0.0010209}, {0.000107486, -0.00264534}, {0.000561535, -0.00353785}, {0.000703078, -0.00306147}, {8.94859e-05, -0.00158364}, {-0.00107076, -0.00013794}, {-0.00201802, 0.000490441}, {-0.000230884, 3.1371e-05}, {0.000383229, -0.000104351}, {0.000428404, 0.000237989}, {-0.000165206, 0.000391835}, {-0.000709238, -0.000511882}, {-0.00047087, -0.00248403}, {0.000543768, -0.00442134}, {0.0015335, -0.00497688}, {0.00164608, -0.00374876}, {0.000793595, -0.00164089}, {-0.000266218, -4.59147e-05}, {-0.000662338, 0.000355773}, {0.000838677, 0.000108863}, {0.000500847, 0.000184552}, {-0.000462377, 0.000611161}, {-0.00142202, 0.000407798}, {-0.0014377, -0.00112731}, {-0.00019289, -0.00347252}, {0.00160799, -0.00513285}, {0.00279916, -0.00490715}, {0.00274911, -0.00296621}, {0.00184213, -0.000696689}, {0.00100447, 0.00053703}, {0.000772938, 0.000514692}, {0.000124405, 0.000544474}, {-0.000809288, 0.000897244}, {-0.00179564, 0.00124025}, {-0.00206921, 0.000585713}, {-0.00109742, -0.00130986}, {0.000817474, -0.00346153}, {0.00266122, -0.00439688}, {0.0034805, -0.00344643}, {0.00309768, -0.00134185}, {0.00211648, 0.000457057}, {0.00125909, 0.0010494}, {0.000713378, 0.000753483}, {-0.00124118, 0.00114723}, {-0.00166679, 0.0016648}, {-0.00172845, 0.00177442}, {-0.00111678, 0.000815018}, {0.000181631, -0.00098021}, {0.00170334, -0.00252241}, {0.00274777, -0.00276665}, {0.00285775, -0.00162362}, {0.00211934, -7.41674e-06}, {0.00102324, 0.00101721}, {4.04591e-05, 0.00115183}, {-0.000681188, 0.000968203}, {-0.00124712, 0.00172152}, {-0.000503703, 0.00217425}, {0.000211257, 0.00202485}, {0.000767816, 0.00105073}, {0.00119491, -0.00030522}, {0.00149454, -0.00123516}, {0.00152478, -0.00122728}, {0.00109947, -0.000465569}, {0.000216125, 0.000401356}, {-0.000826921, 0.000878568}, {-0.00157212, 0.00102008}, {-0.00170337, 0.00123249}, {0.00184474, 0.001294}, {0.00283925, 0.00159354}, {0.00251948, 0.00129289}, {0.00143807, 0.000500437}, {0.0004614, -0.000345234}, {-3.9144e-05, -0.000819144}, {-0.000396374, -0.000822161}, {-0.00109119, -0.000579709}, {-0.00204712, -0.000355138}, {-0.00254108, -0.000180772}, {-0.00186409, 0.000122903}, {-8.78541e-05, 0.000672901}, {0.00383137, 0.0011233}, {0.00350436, 0.00127091}, {0.00169583, 0.00120797}, {-0.000300211, 0.000879763}, {-0.0013451, 0.000336338}, {-0.00136446, -0.000243029}, {-0.0011625, -0.000631526}, {-0.00139716, -0.000687156}, {-0.00179999, -0.000428682}, {-0.00145363, 3.06954e-06}, {0.000152943, 0.00045451}, {0.00238365, 0.000838344}, {0.00342454, 0.00105368}, {0.00153576, 0.00130977}, {-0.000938952, 0.00152474}, {-0.00244623, 0.00141073}, {-0.00236447, 0.000855341}, {-0.00138811, 9.4757e-05}, {-0.000669021, -0.000436948}, {-0.000617606, -0.000454379}, {-0.000575121, -4.02195e-05}, {0.000337306, 0.000464277}, {0.00209292, 0.000781006}, {0.00354879, 0.000912453}, {0.000717081, 0.0011431}, {-0.00162143, 0.00147068}, {-0.00320893, 0.00170016}, {-0.00312581, 0.00153008}, {-0.00175628, 0.000924823}, {-0.000323504, 0.000205368}, {0.000294365, -0.000195537}, {0.000293711, -8.92853e-05}, {0.000530904, 0.00033686}, {0.00143664, 0.000728738}, {0.00240627, 0.000900161}, {0.0023238, 0.000963991}, {-0.00217873, 0.0011431}, {-0.00348199, 0.00126879}, {-0.0033341, 0.0012921}, {-0.00193091, 0.00108826}, {-0.000318486, 0.000656389}, {0.000557299, 0.000175283}, {0.000618021, -0.000107607}, {0.00051748, -6.10013e-05}, {0.000796446, 0.000239548}, {0.00122393, 0.000594966}, {0.00101531, 0.000854539}, {-0.000287338, 0.00101178}, {-0.00308394, 0.00078988}, {-0.00282581, 0.000545468}, {-0.00157908, 0.000472976}, {-0.000254897, 0.000507047}, {0.000361377, 0.000400072}, {0.000251192, 2.70184e-05}, {2.11797e-05, -0.000427374}, {0.000163505, -0.000602871}, {0.000493456, -0.000298751}, {0.000345515, 0.000318715}, {-0.000671211, 0.000845599}, {-0.00213771, 0.000987026}, {-0.00173982, 0.000138796}, {-0.000746363, -0.000276445}, {0.000115931, -7.95682e-05}, {0.00015399, 0.000363158}, {-0.000466155, 0.000372438}, {-0.000940082, -0.000301362}, {-0.000678774, -0.00116418}, {7.15204e-05, -0.00142417}, {0.000471506, -0.000764501}, {-4.80198e-05, 0.000324541}, {-0.00117162, 0.000990485}, {-0.00195998, 0.000807742}, {0.00010666, -0.000411199}, {0.000559929, -0.000534979}, {0.000124969, 0.000177635}, {-0.00103976, 0.000812724}, {-0.00194435, 0.00045067}, {-0.0017105, -0.000837987}, {-0.000442787, -0.00198498}, {0.000841294, -0.00193352}, {0.00116176, -0.000670932}, {0.00047464, 0.000741505}, {-0.000358119, 0.00117588}, {-0.000477469, 0.000489336}, {0.000557711, -0.000448939}, {2.14563e-05, 5.1863e-05}, {-0.00125621, 0.00111261}, {-0.00244309, 0.00143189}, {-0.00247485, 0.000335699}, {-0.00108655, -0.00145352}, {0.000859953, -0.00243917}, {0.0020968, -0.00176869}, {0.00203615, -5.04466e-05}, {0.00118411, 0.00123797}, {0.000515273, 0.00116288}, {0.000465298, 0.000173111}, {-0.000523707, 7.49832e-05}, {-0.00129984, 0.00109782}, {-0.00218758, 0.00201665}, {-0.00238082, 0.00163377}, {-0.00134821, -8.95559e-05}, {0.000544868, -0.00188137}, {0.00222292, -0.00231004}, {0.00275675, -0.00111937}, {0.00209201, 0.000561396}, {0.00097507, 0.00133038}, {0.000184764, 0.000840209}, {-0.000155834, 3.24209e-05}, {-0.001461, 0.000795685}, {-0.00141069, 0.00188087}, {-0.00124781, 0.00225242}, {-0.000643685, 0.0012467}, {0.000498695, -0.000580925}, {0.0017598, -0.00189078}, {0.00242939, -0.00176781}, {0.00206917, -0.000530854}, {0.000889091, 0.000638683}, {-0.00042233, 0.000863347}, {-0.0012548, 0.000368828}, {-0.00149871, 0.000137595}, {-0.000600014, 0.00125626}, {0.000440209, 0.0019785}, {0.00101314, 0.0018198}, {0.00122965, 0.000677783}, {0.0013687, -0.00072864}, {0.00146561, -0.00146476}, {0.00123002, -0.00118843}, {0.000388083, -0.000386593}, {-0.000907184, 0.000168035}, {-0.00204432, 0.000181923}, {-0.00238166, 6.42756e-05}, {-0.00175623, 0.000404465}, {0.00199557, 0.000263447}, {0.00247435, 0.000538173}, {0.00180618, 0.000268668}, {0.000754365, -0.000364617}, {4.72554e-05, -0.000926542}, {-0.00026345, -0.00110933}, {-0.000678776, -0.000972234}, {-0.00153395, -0.000817447}, {-0.00246206, -0.000843655}, {-0.00263013, -0.000935596}, {-0.00154663, -0.000803184}, {0.000360354, -0.000324686}, {0.00282182, -0.000181848}, {0.00180775, 0.000362276}, {7.00146e-06, 0.000732201}, {-0.00126844, 0.000697148}, {-0.00137827, 0.000289147}, {-0.000824003, -0.000228184}, {-0.000583612, -0.000584569}, {-0.00102006, -0.00070715}, {-0.00148547, -0.000717379}, {-0.00102567, -0.000744172}, {0.000534689, -0.000757712}, {0.00224657, -0.000600078}, {0.00133015, 0.000104398}, {-0.000843026, 0.00102754}, {-0.00256504, 0.00167641}, {-0.00270407, 0.00161494}, {-0.00144203, 0.000923632}, {-6.64642e-06, 0.000113986}, {0.000547055, -0.000334838}, {0.000289877, -0.000366624}, {0.000180305, -0.000299112}, {0.000918105, -0.000412609}, {0.00208642, -0.000612658}, {0.00248263, -0.000519398}, {-0.0015507, 0.00082568}, {-0.0034411, 0.00164957}, {-0.00371457, 0.0019666}, {-0.00222345, 0.0015614}, {-8.25219e-05, 0.000764932}, {0.00134496, 0.00014339}, {0.00160211, -6.27988e-06}, {0.00133526, 0.00013365}, {0.00140551, 0.0001729}, {0.00186843, -2.94509e-05}, {0.00188474, -0.000196806}, {0.000660482, 6.84618e-05}, {-0.00359162, 0.00117955}, {-0.00394685, 0.00137818}, {-0.0025872, 0.00121969}, {-0.000423216, 0.000818799}, {0.00123655, 0.000463904}, {0.00176489, 0.000358813}, {0.00156645, 0.000459431}, {0.00142312, 0.000557829}, {0.00155579, 0.000518922}, {0.00138269, 0.00042539}, {0.000221478, 0.000483263}, {-0.00179918, 0.000785753}, {-0.00331757, 0.000681835}, {-0.00220791, 0.000308687}, {-0.000444879, 0.000212208}, {0.000802004, 0.000435465}, {0.00101794, 0.000751507}, {0.000661517, 0.000891308}, {0.000525362, 0.000800192}, {0.000826648, 0.000669702}, {0.000968204, 0.000719148}, {0.000214973, 0.000952495}, {-0.00141191, 0.00114009}, {-0.00296008, 0.00104732}, {-0.00133102, -0.00031431}, {-1.68337e-05, -0.000566196}, {0.000632161, 9.58244e-05}, {0.000179505, 0.00109555}, {-0.000724178, 0.00159265}, {-0.00104486, 0.0012803}, {-0.00043404, 0.000641017}, {0.000415266, 0.000418534}, {0.000483599, 0.000846099}, {-0.000509911, 0.00141033}, {-0.00176972, 0.0013876}, {-0.00216637, 0.000610358}, {0.000378534, -0.00093279}, {0.000695835, -0.000328522}, {-0.000191029, 0.00120703}, {-0.00165606, 0.00235426}, {-0.0024236, 0.00215362}, {-0.00179325, 0.000914903}, {-0.000322277, -0.000121804}, {0.000712069, -2.65834e-05}, {0.000537899, 0.00091902}, {-0.000409751, 0.00155347}, {-0.000993859, 0.00105462}, {-0.000563175, -0.000187827}, {0.00042485, -0.000618514}, {-0.000277729, 0.000935412}, {-0.00173402, 0.00267169}, {-0.00280059, 0.00302497}, {-0.00248115, 0.0016338}, {-0.000904025, -0.000295759}, {0.000754963, -0.00114656}, {0.00134079, -0.000423828}, {0.000739223, 0.00084546}, {-0.000135323, 0.00122109}, {-0.000338016, 0.000335609}, {0.000142723, -0.000740402}, {-0.000675449, 0.0003245}, {-0.00135006, 0.0021808}, {-0.00207717, 0.00321564}, {-0.00200301, 0.00234654}, {-0.000837009, 0.000130504}, {0.000759899, -0.0017094}, {0.00170088, -0.00187498}, {0.00142337, -0.000645998}, {0.000350221, 0.000518958}, {-0.000572076, 0.000502558}, {-0.000785952, -0.00036669}, {-0.0005826, -0.00072658}, {-0.00117033, 0.0010344}, {-0.000890367, 0.00239042}, {-0.000582166, 0.00238781}, {5.51232e-05, 0.000768668}, {0.000968865, -0.00134512}, {0.00164892, -0.00244056}, {0.00152962, -0.00196554}, {0.000524819, -0.000735357}, {-0.000830946, -2.62602e-05}, {-0.00179096, -0.000286841}, {-0.00197987, -0.000759252}, {-0.00161236, -0.000370295}, {9.67618e-07, 0.000931598}, {0.000995034, 0.00153071}, {0.00139055, 0.000986414}, {0.00141007, -0.000436504}, {0.00130878, -0.00174739}, {0.00104571, -0.00210457}, {0.000362801, -0.00153128}, {-0.000817367, -0.000790513}, {-0.00211045, -0.000571193}, {-0.00284145, -0.000813133}, {-0.00255406, -0.000842124}, {-0.00139341, -0.000159969}, {0.00145723, -0.00051303}, {0.00164934, -0.000286049}, {0.000923179, -0.000373457}, {-1.50408e-05, -0.000625309}, {-0.000612659, -0.00074709}, {-0.000919935, -0.00060566}, {-0.00136618, -0.000365436}, {-0.00213309, -0.000317819}, {-0.00280477, -0.000576078}, {-0.00268961, -0.00094449}, {-0.0015172, -0.00109731}, {0.000187925, -0.000893071}, {0.00129587, -0.000798419}, {0.000158906, 0.00020614}, {-0.00117883, 0.000975943}, {-0.00170154, 0.00115875}, {-0.00124111, 0.000867268}, {-0.000550201, 0.000487262}, {-0.000471313, 0.000266527}, {-0.00105364, 0.000102517}, {-0.00151183, -0.000268484}, {-0.00106577, -0.000893038}, {0.000193081, -0.00144211}, {0.00129811, -0.0014609}, {-0.000694365, 0.000111926}, {-0.00241287, 0.00150284}, {-0.00303923, 0.00224209}, {-0.00209269, 0.00203013}, {-0.00032754, 0.00130537}, {0.000969676, 0.000745078}, {0.00113847, 0.000600864}, {0.000634264, 0.000529758}, {0.000405736, 6.77302e-05}, {0.000827027, -0.000762891}, {0.00128459, -0.00135793}, {0.000842255, -0.00107487}, {-0.00314295, 0.00121727}, {-0.00398818, 0.00210678}, {-0.00298255, 0.00216122}, {-0.000715846, 0.00155526}, {0.00143399, 0.000959614}, {0.00244066, 0.000853001}, {0.00235477, 0.00107475}, {0.00196991, 0.0010571}, {0.00183944, 0.00048565}, {0.001678, -0.000297241}, {0.000758259, -0.000573442}, {-0.00112358, 5.01733e-05}, {-0.00410814, 0.00137059}, {-0.00330837, 0.00137364}, {-0.00115352, 0.00106281}, {0.00107898, 0.000850138}, {0.0023451, 0.00103993}, {0.00255984, 0.00149989}, {0.00236571, 0.00177804}, {0.00226054, 0.00155252}, {0.00201827, 0.000965194}, {0.00100376, 0.000502181}, {-0.000956968, 0.000534863}, {-0.00308429, 0.000973054}, {-0.0028829, 0.000436756}, {-0.00110773, 0.000167191}, {0.000651311, 0.000473464}, {0.00146196, 0.00129255}, {0.00138454, 0.00213227}, {0.00117829, 0.0024759}, {0.00135942, 0.00221233}, {0.00160184, 0.00168487}, {0.00110211, 0.0013266}, {-0.000466811, 0.00125253}, {-0.00240698, 0.00120983}, {-0.00346005, 0.0009182}, {-0.000632782, -0.000577207}, {0.000635365, -3.94854e-05}, {0.000771369, 0.0014756}, {-3.73475e-05, 0.00296403}, {-0.000741049, 0.00343415}, {-0.000542003, 0.00276521}, {0.000282592, 0.00173449}, {0.000678746, 0.00121102}, {-6.88672e-05, 0.00132984}, {-0.00153606, 0.00146107}, {-0.00249666, 0.000976697}, {-0.0020841, 1.17346e-05}, {0.000753646, -0.000548754}, {0.000617308, 0.00129148}, {-0.000695988, 0.0034929}, {-0.00203612, 0.00442797}, {-0.00223574, 0.00347947}, {-0.00123133, 0.00157252}, {-9.02653e-05, 0.000255751}, {7.34624e-05, 0.000248659}, {-0.000794045, 0.00088217}, {-0.00166211, 0.00094888}, {-0.00148988, 6.42361e-05}, {-0.00031348, -0.000863744}, {0.000456483, 0.000608535}, {-0.000604918, 0.00313614}, {-0.0020511, 0.00475253}, {-0.00264988, 0.00410325}, {-0.0019219, 0.00164859}, {-0.000588009, -0.000746064}, {0.000149688, -0.00151773}, {-0.000225379, -0.000745959}, {-0.00108693, 0.000154799}, {-0.00135942, 2.18475e-05}, {-0.000650927, -0.000822873}, {0.000322916, -0.000945364}, {-0.000607399, 0.00182776}, {-0.00131512, 0.0038504}, {-0.00175392, 0.00399247}, {-0.00134636, 0.00187678}, {-0.000332892, -0.00105811}, {0.000423803, -0.00281499}, {0.000261107, -0.00258398}, {-0.000646136, -0.00129865}, {-0.00146371, -0.000514196}, {-0.00151269, -0.000779952}, {-0.000911194, -0.00115304}, {-0.000411512, -0.000322679}, {-0.000867282, 0.00193138}, {-0.000486437, 0.00276038}, {-1.35831e-05, 0.00172419}, {0.000544091, -0.000666089}, {0.00087913, -0.00279809}, {0.000624222, -0.00336212}, {-0.000271843, -0.00244049}, {-0.00141094, -0.00125204}, {-0.0022103, -0.000853659}, {-0.00233624, -0.00111864}, {-0.00191303, -0.00100408}, {-0.00133161, 0.000197752}, {0.000194878, 0.000797578}, {0.00110693, 0.000825472}, {0.0013971, -0.000212241}, {0.00116602, -0.00165516}, {0.000612288, -0.00249766}, {-0.000157435, -0.00227736}, {-0.00111529, -0.00143563}, {-0.0021413, -0.000817017}, {-0.00291883, -0.000823905}, {-0.00306116, -0.0010721}, {-0.00239347, -0.00087611}, {-0.00113639, -5.18101e-05}, {0.00102125, -0.000807487}, {0.00105345, -0.000485227}, {0.000166927, -0.000213507}, {-0.00094218, 1.24723e-05}, {-0.00166322, 0.000317754}, {-0.0019481, 0.000728524}, {-0.0021791, 0.00105711}, {-0.00260779, 0.00102987}, {-0.00297418, 0.000546126}, {-0.0027215, -0.000186904}, {-0.00160397, -0.00078721}, {-6.61755e-05, -0.000985953}, {0.000329234, -0.000542752}, {-0.000719155, 0.000767918}, {-0.00174749, 0.00168844}, {-0.00198482, 0.00193268}, {-0.00145141, 0.00181473}, {-0.000869482, 0.00178525}, {-0.000890393, 0.00189163}, {-0.00142466, 0.00172581}, {-0.00174984, 0.000913185}, {-0.00128338, -0.000368005}, {-0.000234127, -0.00139491}, {0.000537466, -0.00147333}, {-0.00168221, 0.000800791}, {-0.00280472, 0.00215657}, {-0.00273725, 0.00261712}, {-0.00145783, 0.00229386}, {0.000145804, 0.00192936}, {0.001059, 0.00204242}, {0.000997031, 0.00236793}, {0.000521408, 0.00216271}, {0.000344534, 0.00106061}, {0.000553847, -0.000408225}, {0.000548347, -0.00119428}, {-0.000255449, -0.0006658}, {-0.003496, 0.00170968}, {-0.00344178, 0.00222347}, {-0.00187325, 0.00199334}, {0.000319292, 0.00161855}, {0.00200026, 0.00177115}, {0.00264115, 0.00244428}, {0.00254026, 0.00291995}, {0.00227272, 0.0024991}, {0.0019883, 0.00126046}, {0.00129319, 7.35466e-05}, {-0.000174447, -0.000171995}, {-0.00209945, 0.000623649}, {-0.00360734, 0.00133873}, {-0.0021703, 0.00118988}, {-5.05481e-05, 0.00113971}, {0.00168386, 0.00162029}, {0.00255812, 0.00257233}, {0.002828, 0.00339162}, {0.00292124, 0.00344}, {0.00282294, 0.00263503}, {0.00206942, 0.00154151}, {0.000362512, 0.000871077}, {-0.00185049, 0.000872856}, {-0.00348659, 0.00119725}, {-0.00194572, 0.000339146}, {-0.000244247, 0.000657071}, {0.000915061, 0.00177077}, {0.00126201, 0.00321189}, {0.00131316, 0.00416785}, {0.00162389, 0.00412598}, {0.00207051, 0.00326743}, {0.00192382, 0.00224869}, {0.000654039, 0.00159925}, {-0.00135816, 0.00132319}, {-0.00296409, 0.00106805}, {-0.00316435, 0.000645663}, {6.55117e-05, 0.000132232}, {0.000617656, 0.00185297}, {0.000100959, 0.00404774}, {-0.000654945, 0.00534757}, {-0.000700874, 0.00498998}, {3.09265e-05, 0.00343747}, {0.000653185, 0.00188692}, {0.000252531, 0.00116799}, {-0.00111913, 0.00110664}, {-0.00240307, 0.000938406}, {-0.00250864, 0.000294188}, {-0.00135208, -0.000286716}, {0.000868648, 0.00137508}, {-0.000104883, 0.00421796}, {-0.00161118, 0.00620505}, {-0.00236684, 0.00592248}, {-0.00188737, 0.00362859}, {-0.000899015, 0.00100207}, {-0.000546404, -0.000371853}, {-0.00120603, -0.000307679}, {-0.00210338, 0.000113344}, {-0.0021182, -0.000103027}, {-0.000964516, -0.000716191}, {0.000450775, -0.000497793}, {0.000207818, 0.00318285}, {-0.00130497, 0.00579402}, {-0.00243518, 0.00617887}, {-0.00240675, 0.0038693}, {-0.00157165, 0.000398834}, {-0.00097118, -0.00202301}, {-0.00123945, -0.00238234}, {-0.00196024, -0.00149752}, {-0.00212286, -0.000885259}, {-0.00121054, -0.00107458}, {0.00018794, -0.0011001}, {0.0008803, 0.00032464}, {-0.000761788, 0.0039177}, {-0.00145842, 0.00507368}, {-0.00148637, 0.00364586}, {-0.000942266, 0.0003575}, {-0.000538492, -0.00269366}, {-0.000845693, -0.0038141}, {-0.00167743, -0.00304428}, {-0.00224425, -0.00180712}, {-0.00193182, -0.00131005}, {-0.000927982, -0.00134559}, {-6.83017e-05, -0.000687589}, {-4.55839e-05, 0.00136361}, {-0.000761573, 0.00278107}, {-0.000234762, 0.00248914}, {0.000317487, 0.000440221}, {0.0004477, -0.00213936}, {-0.000121671, -0.00363042}, {-0.00118122, -0.00338277}, {-0.00214753, -0.00214008}, {-0.00251903, -0.00116332}, {-0.00225303, -0.000964868}, {-0.00172029, -0.000920589}, {-0.00130623, -0.00011436}, {-0.00106494, 0.00148846}, {0.00024908, 0.000629334}, {0.00112484, 5.72396e-05}, {0.00116563, -0.00109332}, {0.000382475, -0.00203896}, {-0.000789633, -0.00211082}, {-0.00183343, -0.00134922}, {-0.00249117, -0.000433324}, {-0.00281178, -2.4032e-05}, {-0.00291254, -0.000171425}, {-0.00274451, -0.000360928}, {-0.00212756, -0.000126269}, {-0.00102379, 0.000410084}, {0.00121868, -0.000670007}, {0.000845468, -7.05047e-05}, {-0.000563981, 0.000589868}, {-0.00205899, 0.00117309}, {-0.00281552, 0.00173963}, {-0.0027804, 0.00231553}, {-0.00253607, 0.00270756}, {-0.00257146, 0.00259391}, {-0.00272752, 0.0018272}, {-0.00238943, 0.000651798}, {-0.00122431, -0.0004006}, {0.000306085, -0.000870168}, {0.00023735, 0.000169826}, {-0.000975848, 0.00148156}, {-0.00212441, 0.00227317}, {-0.00246224, 0.00252934}, {-0.002011, 0.00276566}, {-0.00144212, 0.00330621}, {-0.00134638, 0.00380937}, {-0.00163725, 0.00355609}, {-0.00168626, 0.00222682}, {-0.00104194, 0.000374539}, {1.08809e-05, -0.000920227}, {0.000639579, -0.000923125}, {-0.00167471, 0.00144179}, {-0.00256276, 0.0023415}, {-0.00241464, 0.0024758}, {-0.00133867, 0.00239653}, {-8.33317e-05, 0.00284382}, {0.000623536, 0.00382888}, {0.000661179, 0.00449995}, {0.000479659, 0.00395831}, {0.000519103, 0.00221804}, {0.000700286, 0.000333267}, {0.000514513, -0.000472097}, {-0.000379928, 0.000148812}, {-0.00299063, 0.00178471}, {-0.00263682, 0.00188112}, {-0.00124121, 0.00176059}, {0.00045278, 0.00214826}, {0.0017348, 0.0033027}, {0.00237436, 0.00458413}, {0.00256959, 0.00495634}, {0.00252461, 0.00395717}, {0.00213843, 0.00218478}, {0.00114506, 0.000806929}, {-0.000445777, 0.000555252}, {-0.00209478, 0.00116675}, {-0.00268127, 0.00118712}, {-0.00141003, 0.00128755}, {8.66201e-05, 0.00196049}, {0.00129488, 0.00328712}, {0.00216343, 0.00471442}, {0.00284479, 0.00540091}, {0.00326913, 0.00490115}, {0.00305032, 0.00354661}, {0.00186178, 0.00215928}, {-9.08147e-05, 0.00137236}, {-0.00201181, 0.00119917}, {-0.00300126, 0.00122708}, {-0.00116756, 0.000909944}, {-0.000296202, 0.0021814}, {0.000102549, 0.00404616}, {0.000382626, 0.00560597}, {0.00101114, 0.00604626}, {0.00190104, 0.00525103}, {0.0023531, 0.00383196}, {0.00170404, 0.00256591}, {4.64022e-05, 0.00179014}, {-0.00171486, 0.00131392}, {-0.00256568, 0.000868226}, {-0.00219669, 0.000574464}, {0.000130329, 0.00204781}, {-0.000447043, 0.00472096}, {-0.00131336, 0.00684164}, {-0.00148165, 0.00714546}, {-0.00069716, 0.00559183}, {0.000284722, 0.00333404}, {0.000446043, 0.00167319}, {-0.000466081, 0.00101348}, {-0.00166205, 0.000794723}, {-0.00206656, 0.000379372}, {-0.00136156, -8.04534e-05}, {-0.000281149, 0.000275429}, {0.000188126, 0.0042154}, {-0.00159028, 0.00716199}, {-0.0027869, 0.00795655}, {-0.00266121, 0.00605702}, {-0.00171094, 0.00277782}, {-0.00107464, 0.000132255}, {-0.00134268, -0.000841632}, {-0.00197922, -0.000688349}, {-0.00192975, -0.000583599}, {-0.000787651, -0.000884621}, {0.000677016, -0.000705298}, {0.00118786, 0.00104095}, {-0.000671626, 0.00573111}, {-0.00233448, 0.00738883}, {-0.0028127, 0.00606795}, {-0.00226063, 0.00253427}, {-0.00168196, -0.000987316}, {-0.00180508, -0.00268707}, {-0.00231453, -0.00252145}, {-0.00221803, -0.00181284}, {-0.000968108, -0.00161727}, {0.000817859, -0.00157524}, {0.00180554, -0.000419976}, {0.00115696, 0.0024051}, {-0.001204, 0.00516846}, {-0.00162698, 0.00494292}, {-0.0012682, 0.00229898}, {-0.000945128, -0.00114084}, {-0.00133418, -0.00334519}, {-0.00219961, -0.00352788}, {-0.00258819, -0.00255407}, {-0.00180596, -0.00179433}, {-0.000193999, -0.00164776}, {0.00109442, -0.00123954}, {0.00112421, 0.0004306}, {1.89061e-05, 0.00311067}, {-0.000589831, 0.00275862}, {0.000110773, 0.00154341}, {0.000437935, -0.000699136}, {-0.000204417, -0.00254751}, {-0.00155355, -0.00296892}, {-0.00264895, -0.00213355}, {-0.00268869, -0.00108587}, {-0.00175274, -0.000644117}, {-0.000690906, -0.000643559}, {-0.000296111, -0.000263718}, {-0.00058353, 0.000931149}, {-0.00087713, 0.00233777}, {0.000668283, 0.000248119}, {0.00132806, -0.000437232}, {0.000738037, -0.00109884}, {-0.000816317, -0.0012108}, {-0.0023579, -0.000613787}, {-0.00304042, 0.000312979}, {-0.00280838, 0.000972553}, {-0.00228455, 0.00105885}, {-0.00204254, 0.000768028}, {-0.0020198, 0.000526613}, {-0.00166182, 0.000528644}, {-0.000631287, 0.00055431}, {0.00176357, -0.000286297}, {0.000612084, 0.000609432}, {-0.00143759, 0.00145769}, {-0.0030684, 0.00211654}, {-0.00343171, 0.0027218}, {-0.00278635, 0.00333831}, {-0.00207308, 0.00371553}, {-0.00189469, 0.00344003}, {-0.0019428, 0.00235859}, {-0.00143668, 0.000846352}, {-0.000100277, -0.00037913}, {0.00135214, -0.000762469}, {0.000434445, 0.000783103}, {-0.00120828, 0.00181673}, {-0.00258284, 0.00235325}, {-0.00292445, 0.00271486}, {-0.00234709, 0.00345433}, {-0.00160745, 0.00455722}, {-0.00130022, 0.00526206}, {-0.00130219, 0.00473033}, {-0.00101084, 0.0029208}, {-0.000107747, 0.000784285}, {0.000959583, -0.000457078}, {0.00130316, -0.00028696}, {-0.00140426, 0.00159201}, {-0.00234945, 0.00198777}, {-0.00232965, 0.0020839}, {-0.00145429, 0.00262293}, {-0.000353497, 0.00398803}, {0.000386349, 0.00557276}, {0.000671157, 0.00618422}, {0.000820179, 0.00513094}, {0.00108491, 0.00293582}, {0.00129026, 0.000955324}, {0.000985641, 0.000247738}, {-3.87389e-05, 0.000761993}, {-0.00237468, 0.00153928}, {-0.00215182, 0.0015805}, {-0.00114885, 0.00201655}, {0.000170784, 0.00331119}, {0.00136561, 0.00515003}, {0.0022223, 0.00649228}, {0.00270601, 0.00639769}, {0.00277501, 0.00485909}, {0.00230399, 0.00283682}, {0.00122444, 0.00145334}, {-0.000262247, 0.00111188}, {-0.00165088, 0.00135585}, {-0.00201851, 0.00137731}, {-0.00137103, 0.00211839}, {-0.000484952, 0.0035597}, {0.000571075, 0.0053218}, {0.00176368, 0.00661389}, {0.00285414, 0.00676431}, {0.00338151, 0.005726}, {0.00295488, 0.00409583}, {0.00160775, 0.00263604}, {-0.000130185, 0.00174453}, {-0.00154364, 0.00134154}, {-0.00217304, 0.0012096}, {-0.00111807, 0.00227216}, {-0.00127286, 0.00436788}, {-0.00124095, 0.00639557}, {-0.000527549, 0.00739678}, {0.000797411, 0.00700213}, {0.00199679, 0.00563142}, {0.00224587, 0.00406707}, {0.00135669, 0.00282933}, {-5.03695e-05, 0.00193582}, {-0.00109495, 0.00121081}, {-0.00137594, 0.000747473}, {-0.00120017, 0.000984002}, {-0.000799825, 0.00436847}, {-0.00223745, 0.00722247}, {-0.00281127, 0.00846958}, {-0.00205333, 0.0075343}, {-0.000625014, 0.00524057}, {0.000318493, 0.00301769}, {0.00021019, 0.00170262}, {-0.000462619, 0.00107437}, {-0.00074718, 0.000486608}, {-0.000253058, -0.000144515}, {0.000429062, -7.65462e-05}, {0.000343932, 0.00148698}, {-0.00134733, 0.00636626}, {-0.00330364, 0.00850293}, {-0.00364703, 0.00783554}, {-0.00265319, 0.00497093}, {-0.00153655, 0.00181632}, {-0.00117674, -7.14351e-05}, {-0.00130248, -0.000614516}, {-0.000931936, -0.000807034}, {0.000416027, -0.00130901}, {0.00201253, -0.00155793}, {0.00248166, -0.000347455}, {0.00111728, 0.00270967}, {-0.00192699, 0.00660756}, {-0.00312919, 0.00695557}, {-0.00279919, 0.00456761}, {-0.00199951, 0.0011128}, {-0.00175629, -0.00136787}, {-0.00197247, -0.00212369}, {-0.00161602, -0.0019814}, {2.94031e-05, -0.0020944}, {0.00236069, -0.00251844}, {0.00377906, -0.00211064}, {0.00309261, 0.000135028}, {0.000647509, 0.00370285}, {-0.00149831, 0.0046433}, {-0.001407, 0.00349878}, {-0.000897936, 0.000836171}, {-0.00104484, -0.00156051}, {-0.00187465, -0.00248865}, {-0.00229402, -0.00220971}, {-0.00125325, -0.00186899}, {0.00103509, -0.00211821}, {0.00308684, -0.00238043}, {0.0034149, -0.00151485}, {0.00186506, 0.000807039}, {-0.000276379, 0.00345293}, {2.21473e-05, 0.00173809}, {0.000698765, 0.000473142}, {0.000419186, -0.000968488}, {-0.000989215, -0.00160609}, {-0.00244581, -0.00126079}, {-0.00260952, -0.000611524}, {-0.00118894, -0.000426697}, {0.000732035, -0.000763853}, {0.0016879, -0.000946242}, {0.001175, -0.000330561}, {3.39965e-05, 0.000926242}, {-0.000478581, 0.001901}, {0.00154008, -0.000206973}, {0.00156732, -0.000400041}, {7.41494e-05, -0.000267091}, {-0.00201443, 0.000269015}, {-0.00325338, 0.00100147}, {-0.00295024, 0.00155809}, {-0.00171113, 0.00167696}, {-0.000753479, 0.0013894}, {-0.000694384, 0.000948383}, {-0.00102477, 0.000584833}, {-0.000770711, 0.000333006}, {0.000360217, 8.44586e-05}, {0.00186264, 0.00022094}, {-5.23372e-05, 0.00119935}, {-0.00227965, 0.00190951}, {-0.00342172, 0.00236577}, {-0.00302498, 0.00282837}, {-0.00184894, 0.00335118}, {-0.00100949, 0.00358948}, {-0.000879113, 0.00309693}, {-0.000839542, 0.00182768}, {-0.000100609, 0.000326464}, {0.00128725, -0.000621994}, {0.00229895, -0.000585715}, {0.000200884, 0.00111429}, {-0.00163536, 0.00176005}, {-0.00279638, 0.00209268}, {-0.00274624, 0.00264774}, {-0.00188855, 0.00379729}, {-0.0010681, 0.00512943}, {-0.000729571, 0.00566254}, {-0.000573505, 0.00473298}, {-2.67328e-05, 0.0026937}, {0.000989068, 0.000715804}, {0.00181155, -0.000149942}, {0.00160535, 0.000224563}, {-0.00136764, 0.00148465}, {-0.00217036, 0.0016419}, {-0.00200225, 0.00199952}, {-0.00109176, 0.00316358}, {-5.77449e-05, 0.0050243}, {0.000631244, 0.0065833}, {0.000974006, 0.00672095}, {0.00125359, 0.00519826}, {0.00158657, 0.00292302}, {0.00170031, 0.00120678}, {0.00118943, 0.000711506}, {-6.45869e-07, 0.00107013}, {-0.00195023, 0.00154243}, {-0.00179105, 0.00189847}, {-0.000956701, 0.0029312}, {0.000222618, 0.00469048}, {0.00137826, 0.0065037}, {0.00225456, 0.00735722}, {0.00272337, 0.00669574}, {0.00271171, 0.00489771}, {0.00216871, 0.00297272}, {0.00113323, 0.00176315}, {-0.000169929, 0.00139191}, {-0.00133759, 0.00143066}, {-0.0017792, 0.00218462}, {-0.00163111, 0.00352628}, {-0.00097876, 0.00523263}, {0.000195696, 0.00673274}, {0.00161796, 0.00741956}, {0.0027547, 0.00701766}, {0.00310866, 0.00574842}, {0.00254461, 0.00415704}, {0.00136593, 0.00276132}, {8.11069e-05, 0.00182156}, {-0.000925202, 0.00138445}, {-0.00153561, 0.00147572}, {-0.00176118, 0.00384196}, {-0.00248835, 0.00613248}, {-0.00225474, 0.00760546}, {-0.000938517, 0.00774121}, {0.000779032, 0.00678386}, {0.00192464, 0.00539543}, {0.00200691, 0.00407296}, {0.00133241, 0.0028903}, {0.000594913, 0.00175883}, {0.000176473, 0.000856728}, {-0.000139405, 0.000706218}, {-0.000781128, 0.00175313}, {-0.00237342, 0.00576071}, {-0.00385602, 0.00799681}, {-0.0035961, 0.00813768}, {-0.00200032, 0.00653029}, {-0.000315142, 0.00444386}, {0.000526001, 0.00289121}, {0.000634738, 0.00190366}, {0.000800818, 0.000907301}, {0.00146162, -0.000284669}, {0.00210308, -0.00096813}, {0.00173442, -0.000121442}, {-2.74434e-05, 0.00248231}, {-0.00306346, 0.00651427}, {-0.00433561, 0.00755447}, {-0.00360454, 0.00609212}, {-0.00205619, 0.00351098}, {-0.000954652, 0.00144609}, {-0.000454266, 0.00040217}, {0.000300936, -0.000332987}, {0.00195782, -0.0015058}, {0.0039316, -0.00275347}, {0.00470337, -0.00274976}, {0.0032171, -0.000552245}, {1.18578e-05, 0.0032017}, {-0.00278559, 0.00529792}, {-0.00304365, 0.00488066}, {-0.00208558, 0.00269857}, {-0.00131795, 0.000494252}, {-0.00115003, -0.00066359}, {-0.000680505, -0.00114459}, {0.00111467, -0.00197779}, {0.00395805, -0.00341799}, {0.00614145, -0.00439941}, {0.00592998, -0.00350115}, {0.00317673, -0.000485857}, {-0.000434266, 0.00315866}, {-0.00114186, 0.00274722}, {-0.000603376, 0.00171376}, {-0.000292862, 0.000142556}, {-0.000859221, -0.000796188}, {-0.00144753, -0.000996808}, {-0.000631289, -0.00130061}, {0.0019365, -0.0023754}, {0.00486464, -0.0037873}, {0.00609966, -0.00426294}, {0.00474494, -0.00292566}, {0.00186663, -0.000279677}, {-0.000495147, 0.00207097}, {0.0010389, 0.000458118}, {0.00129929, -3.2414e-05}, {0.000254368, -0.00029649}, {-0.00145191, -0.000101111}, {-0.00218416, 0.000116184}, {-0.000931996, -0.000250261}, {0.0016051, -0.0012645}, {0.00356913, -0.00226958}, {0.00361965, -0.00244876}, {0.00210709, -0.00159178}, {0.000614925, -0.000313465}, {0.000357166, 0.000496235}, {0.00231154, -0.000353224}, {0.00139957, 0.000153351}, {-0.000782743, 0.00081739}, {-0.00271041, 0.0013913}, {-0.00298066, 0.00163455}, {-0.00157505, 0.00146486}, {0.000189534, 0.000997357}, {0.000954008, 0.000444072}, {0.00056752, -2.9647e-05}, {7.38775e-05, -0.00036653}, {0.000491613, -0.000563068}, {0.00165481, -0.000583696}, {0.00107511, 0.000844773}, {-0.000968891, 0.00160569}, {-0.0025605, 0.00194004}, {-0.00274394, 0.00205876}, {-0.00171173, 0.00227382}, {-0.000511421, 0.00257089}, {6.06774e-06, 0.00256985}, {-5.62534e-05, 0.00192717}, {8.92828e-05, 0.00077179}, {0.000932978, -0.000286196}, {0.0020071, -0.000619504}, {0.00225286, -9.55433e-05}, {-0.000457187, 0.00142148}, {-0.00175798, 0.00174224}, {-0.00213, 0.00196691}, {-0.00155549, 0.00262817}, {-0.000700077, 0.00381462}, {-0.000222762, 0.00488127}, {-0.000169522, 0.00494942}, {-4.29217e-05, 0.00373502}, {0.000552901, 0.00189056}, {0.00137638, 0.000503154}, {0.00169516, 0.000210339}, {0.000994046, 0.000763479}, {-0.00126864, 0.00169309}, {-0.00142429, 0.0018686}, {-0.000845566, 0.00247045}, {2.08382e-05, 0.00381255}, {0.000659182, 0.00545956}, {0.00090646, 0.00641924}, {0.000988042, 0.00595926}, {0.00116566, 0.00427861}, {0.00138367, 0.00237854}, {0.00129204, 0.00124335}, {0.000631733, 0.00110148}, {-0.000412285, 0.00144003}, {-0.00135563, 0.00217956}, {-0.000962677, 0.0028371}, {-0.000158956, 0.00400678}, {0.000746208, 0.00550259}, {0.00149912, 0.0066804}, {0.00198086, 0.00685389}, {0.00215632, 0.00584917}, {0.00198962, 0.00417877}, {0.00144263, 0.00266101}, {0.000567934, 0.00182998}, {-0.00041124, 0.00166503}, {-0.00114971, 0.00183961}, {-0.00156959, 0.00329811}, {-0.00154812, 0.00472258}, {-0.000922947, 0.00600033}, {0.0002038, 0.00677764}, {0.00142044, 0.00685166}, {0.00222583, 0.00621927}, {0.00233875, 0.00506127}, {0.00183873, 0.00368253}, {0.00103489, 0.00243575}, {0.000208034, 0.00164366}, {-0.00053006, 0.00152392}, {-0.00115678, 0.00212534}, {-0.00251414, 0.00470392}, {-0.0031696, 0.00646804}, {-0.00249403, 0.00706199}, {-0.000867051, 0.00662023}, {0.000772703, 0.00571651}, {0.00168179, 0.0047547}, {0.00181524, 0.0036989}, {0.00163996, 0.00237664}, {0.00150699, 0.000980486}, {0.00125336, 0.000178167}, {0.000444341, 0.000640027}, {-0.00100736, 0.00240404}, {-0.00372239, 0.00542758}, {-0.00448722, 0.00671962}, {-0.00334363, 0.00621626}, {-0.00136296, 0.00486449}, {0.00023217, 0.00366658}, {0.00108734, 0.00277141}, {0.00173833, 0.00160672}, {0.0027026, -0.000155468}, {0.00364879, -0.00187089}, {0.00355844, -0.00226777}, {0.00176387, -0.00059971}, {-0.00118108, 0.00251424}, {-0.00399583, 0.00472759}, {-0.00409661, 0.00507554}, {-0.00257529, 0.00385367}, {-0.000928577, 0.00244868}, {0.000117921, 0.00154953}, {0.00108849, 0.000650323}, {0.00281213, -0.0010673}, {0.00511138, -0.00345559}, {0.00656547, -0.00512779}, {0.00569569, -0.00457654}, {0.00245072, -0.00163705}, {-0.00149525, 0.00215623}, {-0.00260025, 0.00283664}, {-0.0019566, 0.00252812}, {-0.000833706, 0.0014622}, {-0.000274303, 0.000695937}, {0.000132097, 0.000143541}, {0.00157885, -0.0011095}, {0.00442016, -0.00349888}, {0.00733432, -0.00609325}, {0.00823824, -0.00713493}, {0.00614784, -0.00557337}, {0.00218363, -0.00211808}, {-0.00128994, 0.00124256}, {-0.000123401, 0.000854128}, {0.000453969, 0.000646113}, {0.00030688, 0.000373685}, {-0.000391903, 0.000283943}, {-0.000231813, -0.000262111}, {0.00183423, -0.00195531}, {0.00511927, -0.00451608}, {0.00751976, -0.00659521}, {0.00730252, -0.00679844}, {0.00465911, -0.00489722}, {0.00152116, -0.00206403}, {-0.000180551, 0.000104839}, {0.0018963, -0.000141144}, {0.0014379, 0.000268168}, {-0.000127957, 0.000715867}, {-0.00147232, 0.000855295}, {-0.00105054, 0.000142885}, {0.00129946, -0.00150999}, {0.00403861, -0.00343374}, {0.00524854, -0.00460669}, {0.00432995, -0.00443504}, {0.00243836, -0.00319148}, {0.00126506, -0.00171543}, {0.0013995, -0.000681907}, {0.00225673, 7.23815e-05}, {0.000585681, 0.000943757}, {-0.0015829, 0.00154213}, {-0.00263207, 0.00158107}, {-0.00177623, 0.00103909}, {0.000223906, 0.000176443}, {0.00179653, -0.000649631}, {0.00201579, -0.00120673}, {0.00135432, -0.00146062}, {0.00102523, -0.00146935}, {0.00162118, -0.00124164}, {0.0024511, -0.000723483}, {-0.000154943, 0.00156692}, {-0.00142295, 0.00195714}, {-0.00184099, 0.00190483}, {-0.00121448, 0.00170676}, {-0.000172926, 0.0016225}, {0.000460365, 0.00159834}, {0.000433118, 0.00135799}, {0.000214275, 0.000759356}, {0.000406697, 3.91325e-05}, {0.00104141, -0.000326933}, {0.0014867, -3.42658e-05}, {0.00107903, 0.000762432}, {-0.000753044, 0.00198762}, {-0.000877387, 0.00210716}, {-0.000388019, 0.0022298}, {0.000247307, 0.00273539}, {0.000477011, 0.00351262}, {0.000194824, 0.00396464}, {-0.000187014, 0.00355761}, {-0.000184846, 0.00237644}, {0.000245467, 0.00112622}, {0.000651997, 0.000554658}, {0.000544468, 0.000839059}, {-9.30268e-05, 0.00151463}, {-0.000403431, 0.00243266}, {0.000286467, 0.00262747}, {0.00100229, 0.00314263}, {0.00127252, 0.00408365}, {0.00100513, 0.00499286}, {0.000531865, 0.00517755}, {0.000259253, 0.00434466}, {0.000279959, 0.0029229}, {0.000328336, 0.00174231}, {0.000111703, 0.0013628}, {-0.00033151, 0.00168054}, {-0.000622446, 0.00216128}, {-0.000137769, 0.00316293}, {0.000474186, 0.00373584}, {0.000923713, 0.00446389}, {0.00107932, 0.0052212}, {0.00103894, 0.00562663}, {0.000964015, 0.00532408}, {0.000885674, 0.00432542}, {0.000685293, 0.00307646}, {0.000265918, 0.00215933}, {-0.000271117, 0.00188898}, {-0.000642302, 0.00215959}, {-0.000597533, 0.00265122}, {-0.00100542, 0.00399852}, {-0.00100453, 0.00490882}, {-0.00062628, 0.0054026}, {3.83936e-05, 0.00552668}, {0.000727159, 0.00534067}, {0.00116081, 0.00480813}, {0.00121274, 0.00389263}, {0.000953263, 0.00274662}, {0.000546559, 0.00176346}, {0.000112018, 0.0013857}, {-0.00031816, 0.00180742}, {-0.000723358, 0.00282935}, {-0.00281408, 0.00435114}, {-0.00311088, 0.00524849}, {-0.00222225, 0.00520514}, {-0.000745311, 0.00477071}, {0.000542117, 0.00434811}, {0.00127201, 0.00379908}, {0.00160782, 0.0027327}, {0.00184164, 0.00114821}, {0.00193386, -0.000278334}, {0.00150077, -0.000626659}, {0.000276326, 0.000483073}, {-0.00143443, 0.002502}, {-0.00414115, 0.00374612}, {-0.00399791, 0.00430666}, {-0.00240286, 0.00385926}, {-0.000554662, 0.00332491}, {0.000764381, 0.00295489}, {0.00168498, 0.00215531}, {0.00273173, 0.000339295}, {0.00391123, -0.00211464}, {0.00442328, -0.00385595}, {0.00335944, -0.00361691}, {0.000717651, -0.00135349}, {-0.00231005, 0.0016348}, {-0.00365285, 0.00232984}, {-0.00278792, 0.00256214}, {-0.00109614, 0.00216252}, {0.000240346, 0.00189326}, {0.0011766, 0.00143774}, {0.00250374, -0.0001259}, {0.00459497, -0.00303389}, {0.00657677, -0.00611828}, {0.00687616, -0.00750867}, {0.00468409, -0.00617734}, {0.000901089, -0.00286973}, {-0.00241721, 0.000483923}, {-0.00143984, 0.00084618}, {-0.000447711, 0.00106599}, {0.000337655, 0.00107168}, {0.000600646, 0.00100688}, {0.00127956, 6.66812e-05}, {0.00330641, -0.00246444}, {0.00624328, -0.00605344}, {0.00829448, -0.00891638}, {0.00779645, -0.00931868}, {0.00477746, -0.00700737}, {0.00105523, -0.00342405}, {-0.00125896, -0.000496316}, {0.000966925, 7.28597e-05}, {0.00111309, 0.000576299}, {0.000480653, 0.000944169}, {-7.74375e-05, 0.00073422}, {0.000814661, -0.000830886}, {0.00346075, -0.00382169}, {0.00646833, -0.00709314}, {0.00780522, -0.00893505}, {0.00657037, -0.00836397}, {0.00377812, -0.0058766}, {0.00140297, -0.00297302}, {0.000624171, -0.000921167}, {0.00194438, 0.000232843}, {0.000836254, 0.00099782}, {-0.000729045, 0.00137722}, {-0.0012933, 0.000831765}, {6.42774e-05, -0.000917899}, {0.00271073, -0.00339083}, {0.00489816, -0.00548679}, {0.00527083, -0.00621866}, {0.00399808, -0.00540245}, {0.00245975, -0.00369449}, {0.00183763, -0.00197794}, {0.00202921, -0.000700615}, {0.00119042, 0.000918855}, {-0.000561453, 0.00163398}, {-0.00195718, 0.0017527}, {-0.00189511, 0.00112586}, {-0.000381752, -3.45243e-05}, {0.00145983, -0.00125615}, {0.0024085, -0.00209436}, {0.00219995, -0.00236859}, {0.00160762, -0.00216675}, {0.00151792, -0.00166024}, {0.00196498, -0.000940752}, {0.00211146, -3.96837e-05} - }; + const std::vector> wfcr_2 + = {{-1.04493, 0.615688}, {-1.06977, 0.631876}, {-1.11054, 0.657279}, {-1.09964, 0.652241}, + {-1.01219, 0.601667}, {-0.900492, 0.535509}, {-0.851148, 0.504342}, {-0.905186, 0.532964}, + {-1.01925, 0.597305}, {-1.10611, 0.647275}, {-1.11469, 0.65304}, {-1.07155, 0.629455}, + {-1.06919, 0.632572}, {-1.13929, 0.676268}, {-1.20108, 0.714099}, {-1.17741, 0.70052}, + {-1.07525, 0.639493}, {-0.983179, 0.583099}, {-0.986424, 0.581855}, {-1.0835, 0.635772}, + {-1.1872, 0.694674}, {-1.20917, 0.707372}, {-1.14414, 0.670785}, {-1.07073, 0.630447}, + {-1.1097, 0.659275}, {-1.20066, 0.715109}, {-1.23859, 0.737959}, {-1.17679, 0.700538}, + {-1.06941, 0.635141}, {-1.01939, 0.602723}, {-1.07668, 0.633135}, {-1.18832, 0.695962}, + {-1.25024, 0.730935}, {-1.20931, 0.707519}, {-1.11409, 0.654257}, {-1.06425, 0.628851}, + {-1.09915, 0.655024}, {-1.17668, 0.701808}, {-1.17599, 0.700685}, {-1.09784, 0.652789}, + {-1.02166, 0.605407}, {-1.02577, 0.604855}, {-1.1085, 0.650449}, {-1.18919, 0.69552}, + {-1.1883, 0.694368}, {-1.10665, 0.648136}, {-1.02461, 0.603665}, {-1.02207, 0.606491}, + {-1.01184, 0.603829}, {-1.07352, 0.639851}, {-1.06674, 0.63446}, {-1.01946, 0.604735}, + {-0.995659, 0.588429}, {-1.02691, 0.604062}, {-1.0787, 0.631808}, {-1.08586, 0.634447}, + {-1.02126, 0.597121}, {-0.928339, 0.545466}, {-0.883314, 0.523111}, {-0.923441, 0.550196}, + {-0.899158, 0.535895}, {-0.979266, 0.581943}, {-1.01385, 0.601005}, {-1.02051, 0.603424}, + {-1.02385, 0.603299}, {-1.02247, 0.599959}, {-0.98985, 0.578848}, {-0.908372, 0.530875}, + {-0.800363, 0.469599}, {-0.72164, 0.426891}, {-0.719673, 0.428941}, {-0.794487, 0.474495}, + {-0.847753, 0.503045}, {-0.979917, 0.579784}, {-1.06852, 0.631067}, {-1.10083, 0.648709}, + {-1.07326, 0.630403}, {-0.987296, 0.577914}, {-0.854969, 0.499752}, {-0.706649, 0.41444}, + {-0.587992, 0.347976}, {-0.541792, 0.323726}, {-0.585514, 0.350606}, {-0.70153, 0.418275}, + {-0.899908, 0.531212}, {-1.07557, 0.634031}, {-1.17943, 0.694395}, {-1.18113, 0.693788}, + {-1.07976, 0.632306}, {-0.904516, 0.528696}, {-0.704858, 0.413064}, {-0.53476, 0.316459}, + {-0.437762, 0.262493}, {-0.437345, 0.263282}, {-0.533149, 0.31855}, {-0.701541, 0.415762}, + {-1.01368, 0.596358}, {-1.18014, 0.694045}, {-1.24311, 0.730044}, {-1.18206, 0.692411}, + {-1.01616, 0.593956}, {-0.796338, 0.466089}, {-0.585168, 0.345371}, {-0.43641, 0.261419}, + {-0.383443, 0.231703}, {-0.436798, 0.261883}, {-0.584997, 0.346602}, {-0.794811, 0.468186}, + {-1.10211, 0.647408}, {-1.20487, 0.707561}, {-1.20547, 0.706679}, {-1.10324, 0.645443}, + {-0.9249, 0.54126}, {-0.718091, 0.422601}, {-0.538746, 0.320817}, {-0.435585, 0.262183}, + {-0.436396, 0.261854}, {-0.540445, 0.320361}, {-0.719187, 0.423026}, {-0.924581, 0.542895}, + {-1.113, 0.653554}, {-1.14286, 0.670879}, {-1.11329, 0.652757}, {-1.02355, 0.60014}, + {-0.881332, 0.518509}, {-0.717047, 0.425022}, {-0.583374, 0.348633}, {-0.532489, 0.318429}, + {-0.585722, 0.347216}, {-0.720151, 0.423379}, {-0.883396, 0.517889}, {-1.02402, 0.600711}, + {-1.0714, 0.629639}, {-1.07118, 0.629932}, {-1.06498, 0.626702}, {-1.02219, 0.60281}, + {-0.922587, 0.54634}, {-0.793452, 0.472108}, {-0.701665, 0.418007}, {-0.703508, 0.416851}, + {-0.797895, 0.469267}, {-0.927254, 0.543205}, {-1.02524, 0.600537}, {-1.06618, 0.625584}, + {-1.07066, 0.632364}, {-1.14196, 0.676121}, {-1.20383, 0.713861}, {-1.17911, 0.700059}, + {-1.07535, 0.638753}, {-0.981919, 0.582124}, {-0.984444, 0.580758}, {-1.0813, 0.634679}, + {-1.18499, 0.693687}, {-1.20712, 0.706558}, {-1.14271, 0.670185}, {-1.07059, 0.630066}, + {-1.14113, 0.677179}, {-1.24972, 0.743092}, {-1.30064, 0.77366}, {-1.23971, 0.737078}, + {-1.12538, 0.667908}, {-1.07096, 0.633052}, {-1.13158, 0.665463}, {-1.24888, 0.731698}, + {-1.30874, 0.765641}, {-1.25458, 0.734583}, {-1.14303, 0.671605}, {-1.08667, 0.641951}, + {-1.20279, 0.716023}, {-1.30017, 0.774582}, {-1.29903, 0.773363}, {-1.20048, 0.713583}, + {-1.10409, 0.654302}, {-1.10804, 0.65355}, {-1.21047, 0.710638}, {-1.31077, 0.767229}, + {-1.3097, 0.766012}, {-1.20837, 0.708204}, {-1.10709, 0.652335}, {-1.10534, 0.655524}, + {-1.17844, 0.702482}, {-1.23876, 0.738047}, {-1.19943, 0.713613}, {-1.10865, 0.658222}, + {-1.06494, 0.630025}, {-1.11649, 0.657392}, {-1.21185, 0.710495}, {-1.25126, 0.731794}, + {-1.18768, 0.694769}, {-1.0758, 0.631837}, {-1.01978, 0.603169}, {-1.07114, 0.637261}, + {-1.07458, 0.640304}, {-1.12296, 0.667999}, {-1.10069, 0.653581}, {-1.06231, 0.629345}, + {-1.06618, 0.629337}, {-1.11071, 0.652682}, {-1.13538, 0.664695}, {-1.08553, 0.634604}, + {-0.975045, 0.571348}, {-0.882132, 0.520308}, {-0.879736, 0.522713}, {-0.967961, 0.577041}, + {-0.979676, 0.582276}, {-1.06587, 0.632036}, {-1.10142, 0.651953}, {-1.11062, 0.655856}, + {-1.1075, 0.65173}, {-1.07562, 0.630549}, {-0.989725, 0.578822}, {-0.856301, 0.501377}, + {-0.728391, 0.429099}, {-0.674072, 0.40052}, {-0.724417, 0.43233}, {-0.848649, 0.505872}, + {-0.979843, 0.579951}, {-1.12384, 0.663901}, {-1.20145, 0.708602}, {-1.20388, 0.708299}, + {-1.13006, 0.662763}, {-0.987367, 0.57766}, {-0.802035, 0.469571}, {-0.624138, 0.367771}, + {-0.513752, 0.306069}, {-0.512452, 0.307222}, {-0.620172, 0.37061}, {-0.795639, 0.472713}, + {-1.07506, 0.633833}, {-1.2403, 0.730333}, {-1.3018, 0.765187}, {-1.24365, 0.729105}, + {-1.08006, 0.631723}, {-0.852938, 0.499052}, {-0.622565, 0.366591}, {-0.45203, 0.269866}, + {-0.388963, 0.234878}, {-0.450838, 0.27105}, {-0.619713, 0.368657}, {-0.848402, 0.501463}, + {-1.17916, 0.693359}, {-1.30199, 0.764703}, {-1.30342, 0.763947}, {-1.18252, 0.691534}, + {-0.97088, 0.56762}, {-0.724971, 0.42592}, {-0.511241, 0.304164}, {-0.387754, 0.234222}, + {-0.38784, 0.234322}, {-0.510919, 0.304677}, {-0.723214, 0.42719}, {-0.967602, 0.569545}, + {-1.20358, 0.706572}, {-1.25131, 0.733695}, {-1.20587, 0.705777}, {-1.07361, 0.628004}, + {-0.879535, 0.516072}, {-0.671022, 0.397126}, {-0.509763, 0.305332}, {-0.449406, 0.270429}, + {-0.510742, 0.304617}, {-0.671518, 0.396441}, {-0.878216, 0.516153}, {-1.07083, 0.628829}, + {-1.14175, 0.670052}, {-1.14289, 0.67034}, {-1.10746, 0.649425}, {-1.01958, 0.599055}, + {-0.878265, 0.518646}, {-0.722197, 0.429517}, {-0.618564, 0.369407}, {-0.619678, 0.368504}, + {-0.724415, 0.427276}, {-0.879343, 0.516117}, {-1.01841, 0.597142}, {-1.10517, 0.648415}, + {-1.07089, 0.629711}, {-1.08784, 0.640443}, {-1.10671, 0.65259}, {-1.07164, 0.63361}, + {-0.967419, 0.573961}, {-0.848169, 0.504282}, {-0.796655, 0.472531}, {-0.851287, 0.501844}, + {-0.971227, 0.56971}, {-1.07353, 0.628657}, {-1.10617, 0.648262}, {-1.08661, 0.637928}, + {-1.11352, 0.659089}, {-1.20587, 0.714958}, {-1.24309, 0.737564}, {-1.17881, 0.699564}, + {-1.06849, 0.633478}, {-1.0163, 0.600639}, {-1.0726, 0.63113}, {-1.18407, 0.694443}, + {-1.24624, 0.729989}, {-1.20607, 0.706959}, {-1.11256, 0.653862}, {-1.06537, 0.62855}, + {-1.20489, 0.715789}, {-1.30261, 0.774429}, {-1.30082, 0.773075}, {-1.20094, 0.712933}, + {-1.10316, 0.653288}, {-1.10616, 0.652442}, {-1.2082, 0.709777}, {-1.30851, 0.766763}, + {-1.30772, 0.765808}, {-1.20699, 0.708014}, {-1.10674, 0.652034}, {-1.10632, 0.655189}, + {-1.24196, 0.738968}, {-1.30045, 0.773641}, {-1.24726, 0.741281}, {-1.13861, 0.675603}, + {-1.08631, 0.642631}, {-1.14508, 0.674583}, {-1.25718, 0.737854}, {-1.30991, 0.767062}, + {-1.24841, 0.731}, {-1.13115, 0.664375}, {-1.07224, 0.633464}, {-1.12816, 0.669934}, + {-1.17821, 0.700917}, {-1.20023, 0.71342}, {-1.13771, 0.675491}, {-1.06857, 0.633331}, + {-1.07204, 0.633353}, {-1.14667, 0.674633}, {-1.21128, 0.710071}, {-1.18787, 0.695054}, + {-1.08323, 0.634527}, {-0.986582, 0.580744}, {-0.984499, 0.583235}, {-1.07704, 0.640412}, + {-1.06784, 0.634178}, {-1.10102, 0.653052}, {-1.08316, 0.641724}, {-1.0696, 0.632519}, + {-1.08898, 0.641911}, {-1.11056, 0.652098}, {-1.07799, 0.631063}, {-0.974995, 0.570435}, + {-0.854717, 0.501743}, {-0.799953, 0.472682}, {-0.850384, 0.505045}, {-0.966944, 0.574877}, + {-1.01415, 0.600477}, {-1.10138, 0.651245}, {-1.13891, 0.672627}, {-1.14134, 0.672702}, + {-1.1078, 0.650989}, {-1.02241, 0.599037}, {-0.883392, 0.516958}, {-0.728201, 0.427206}, + {-0.623299, 0.368098}, {-0.621454, 0.369282}, {-0.722947, 0.429979}, {-0.875709, 0.519656}, + {-1.06812, 0.630338}, {-1.20095, 0.707869}, {-1.24904, 0.735132}, {-1.20449, 0.707355}, + {-1.07385, 0.629166}, {-0.881776, 0.516164}, {-0.674754, 0.396097}, {-0.513634, 0.303952}, + {-0.45194, 0.269769}, {-0.511184, 0.305241}, {-0.670112, 0.398045}, {-0.875788, 0.517966}, + {-1.17817, 0.693416}, {-1.30084, 0.764601}, {-1.30242, 0.7641}, {-1.18214, 0.69212}, + {-0.971424, 0.568318}, {-0.726289, 0.426163}, {-0.512779, 0.303672}, {-0.388904, 0.233297}, + {-0.3883, 0.233598}, {-0.510769, 0.304568}, {-0.722696, 0.427561}, {-0.966851, 0.569916}, + {-1.24109, 0.728966}, {-1.3023, 0.763707}, {-1.24407, 0.728168}, {-1.08036, 0.631761}, + {-0.852769, 0.499772}, {-0.621637, 0.367132}, {-0.45052, 0.269493}, {-0.387539, 0.233563}, + {-0.450217, 0.269405}, {-0.620134, 0.367305}, {-0.849488, 0.500483}, {-1.07618, 0.63282}, + {-1.20341, 0.705967}, {-1.20521, 0.706043}, {-1.13058, 0.661754}, {-0.986483, 0.578209}, + {-0.799278, 0.470884}, {-0.619924, 0.36839}, {-0.50952, 0.304951}, {-0.509893, 0.304472}, + {-0.62015, 0.367231}, {-0.797705, 0.469649}, {-0.982737, 0.577377}, {-1.12646, 0.661401}, + {-1.11236, 0.652928}, {-1.10779, 0.650208}, {-1.07401, 0.631043}, {-0.985667, 0.580886}, + {-0.850086, 0.503365}, {-0.721652, 0.429122}, {-0.669176, 0.397736}, {-0.723064, 0.427427}, + {-0.850822, 0.500367}, {-0.983821, 0.57733}, {-1.07008, 0.627881}, {-1.10454, 0.648347}, + {-1.06606, 0.627901}, {-1.10813, 0.653696}, {-1.13019, 0.667865}, {-1.07805, 0.638393}, + {-0.966779, 0.573489}, {-0.875544, 0.519073}, {-0.877057, 0.517943}, {-0.969825, 0.57009}, + {-1.07964, 0.633012}, {-1.1288, 0.661633}, {-1.10523, 0.648594}, {-1.0646, 0.625919}, + {-1.10452, 0.654055}, {-1.18302, 0.701075}, {-1.18079, 0.699708}, {-1.09935, 0.651024}, + {-1.01976, 0.602869}, {-1.0216, 0.602244}, {-1.10343, 0.648611}, {-1.18411, 0.694744}, + {-1.18376, 0.694186}, {-1.10341, 0.647791}, {-1.02382, 0.602792}, {-1.02457, 0.605343}, + {-1.182, 0.701323}, {-1.24273, 0.737311}, {-1.20227, 0.712744}, {-1.10938, 0.656802}, + {-1.0635, 0.628242}, {-1.11361, 0.655887}, {-1.20837, 0.709731}, {-1.24781, 0.731578}, + {-1.18471, 0.694405}, {-1.07387, 0.630771}, {-1.01956, 0.601495}, {-1.07302, 0.63559}, + {-1.17998, 0.700155}, {-1.20233, 0.713009}, {-1.13938, 0.675057}, {-1.06929, 0.6327}, + {-1.07172, 0.632702}, {-1.1456, 0.674243}, {-1.20984, 0.709956}, {-1.18637, 0.694859}, + {-1.08187, 0.633818}, {-0.985647, 0.579423}, {-0.984349, 0.581663}, {-1.07791, 0.639116}, + {-1.0996, 0.651507}, {-1.10962, 0.65697}, {-1.06894, 0.632458}, {-1.04524, 0.617755}, + {-1.07315, 0.632808}, {-1.11669, 0.656378}, {-1.10742, 0.648933}, {-1.01953, 0.596458}, + {-0.905076, 0.530223}, {-0.851508, 0.501191}, {-0.901462, 0.533148}, {-1.01305, 0.600326}, + {-1.0203, 0.60305}, {-1.06264, 0.627693}, {-1.06956, 0.631499}, {-1.07127, 0.631833}, + {-1.06741, 0.628131}, {-1.02698, 0.602525}, {-0.928732, 0.543495}, {-0.79891, 0.46733}, + {-0.704322, 0.413299}, {-0.702406, 0.414261}, {-0.793746, 0.469485}, {-0.921849, 0.545315}, + {-1.02066, 0.601756}, {-1.11019, 0.654216}, {-1.14079, 0.67186}, {-1.11263, 0.654448}, + {-1.02511, 0.601767}, {-0.885157, 0.518572}, {-0.7219, 0.42267}, {-0.587234, 0.344633}, + {-0.533765, 0.314734}, {-0.584189, 0.345469}, {-0.716846, 0.423727}, {-0.879668, 0.519176}, + {-1.09999, 0.647331}, {-1.20253, 0.707144}, {-1.20356, 0.707013}, {-1.10282, 0.646961}, + {-0.926639, 0.543028}, {-0.721512, 0.423028}, {-0.542383, 0.319125}, {-0.437928, 0.259211}, + {-0.436833, 0.259377}, {-0.539418, 0.319564}, {-0.717516, 0.423597}, {-0.922708, 0.543563}, + {-1.17912, 0.692928}, {-1.24174, 0.728813}, {-1.18134, 0.692403}, {-1.01687, 0.595516}, + {-0.798379, 0.468055}, {-0.587552, 0.346047}, {-0.438091, 0.260123}, {-0.384093, 0.229365}, + {-0.43687, 0.260139}, {-0.585073, 0.346261}, {-0.794943, 0.468596}, {-1.0134, 0.59624}, + {-1.17953, 0.69234}, {-1.18111, 0.692221}, {-1.08034, 0.632519}, {-0.905602, 0.530613}, + {-0.705634, 0.41509}, {-0.534527, 0.316801}, {-0.436732, 0.260698}, {-0.436544, 0.260534}, + {-0.533502, 0.316457}, {-0.703025, 0.414865}, {-0.901596, 0.53067}, {-1.07652, 0.632739}, + {-1.10169, 0.646366}, {-1.07386, 0.629462}, {-0.987618, 0.579122}, {-0.854223, 0.502221}, + {-0.704195, 0.416081}, {-0.584345, 0.34711}, {-0.538627, 0.320402}, {-0.584518, 0.346398}, + {-0.703109, 0.414803}, {-0.850786, 0.500677}, {-0.982751, 0.577725}, {-1.07026, 0.628631}, + {-1.02438, 0.601959}, {-1.02192, 0.600836}, {-0.98774, 0.581656}, {-0.904114, 0.533809}, + {-0.79445, 0.470359}, {-0.716003, 0.4243}, {-0.716668, 0.423722}, {-0.79527, 0.468538}, + {-0.902875, 0.530746}, {-0.983777, 0.577929}, {-1.01729, 0.597687}, {-1.02232, 0.600718}, + {-1.02563, 0.605009}, {-1.07541, 0.635206}, {-1.0804, 0.638865}, {-1.01412, 0.600199}, + {-0.92128, 0.545227}, {-0.878868, 0.519145}, {-0.923384, 0.543748}, {-1.01594, 0.596785}, + {-1.07964, 0.63358}, {-1.07226, 0.629465}, {-1.02276, 0.601203}, {-0.996484, 0.586831}, + {-1.01764, 0.601283}, {-1.08006, 0.638125}, {-1.07164, 0.632736}, {-1.02117, 0.602376}, + {-0.994184, 0.585759}, {-1.02338, 0.602105}, {-1.07441, 0.63122}, {-1.08158, 0.634721}, + {-1.01751, 0.596905}, {-0.925899, 0.543716}, {-0.883295, 0.51999}, {-0.926588, 0.546849}, + {-1.07928, 0.638003}, {-1.12852, 0.666717}, {-1.1052, 0.652351}, {-1.06444, 0.627723}, + {-1.06573, 0.627793}, {-1.10846, 0.651937}, {-1.13229, 0.664716}, {-1.08227, 0.634346}, + {-0.97208, 0.569569}, {-0.880115, 0.516712}, {-0.879597, 0.518299}, {-0.970382, 0.573297}, + {-1.07181, 0.632878}, {-1.10599, 0.65259}, {-1.08756, 0.64134}, {-1.07226, 0.632033}, + {-1.08965, 0.641667}, {-1.10974, 0.652268}, {-1.07634, 0.631105}, {-0.972939, 0.569345}, + {-0.852578, 0.498928}, {-0.798308, 0.468614}, {-0.850135, 0.501029}, {-0.968836, 0.572095}, + {-1.02308, 0.602803}, {-1.06604, 0.627856}, {-1.07256, 0.631719}, {-1.07321, 0.63208}, + {-1.06817, 0.628492}, {-1.02686, 0.602845}, {-0.928066, 0.543288}, {-0.797879, 0.466131}, + {-0.703114, 0.411117}, {-0.701461, 0.411711}, {-0.793734, 0.467404}, {-0.923278, 0.544201}, + {-0.996552, 0.585947}, {-1.06638, 0.627066}, {-1.08855, 0.640374}, {-1.06695, 0.627687}, + {-0.998424, 0.586746}, {-0.882562, 0.517475}, {-0.740561, 0.433051}, {-0.619411, 0.361755}, + {-0.570359, 0.333737}, {-0.616389, 0.361889}, {-0.736227, 0.433006}, {-0.878979, 0.516988}, + {-1.02387, 0.601419}, {-1.10642, 0.650034}, {-1.10644, 0.650222}, {-1.02442, 0.60194}, + {-0.881877, 0.517732}, {-0.716058, 0.419767}, {-0.570909, 0.334288}, {-0.485779, 0.284589}, + {-0.484422, 0.284385}, {-0.567689, 0.333735}, {-0.712813, 0.419026}, {-0.879963, 0.517007}, + {-1.07186, 0.629553}, {-1.12788, 0.662279}, {-1.07234, 0.62956}, {-0.926374, 0.543807}, + {-0.741121, 0.435112}, {-0.571991, 0.336067}, {-0.458048, 0.269567}, {-0.417794, 0.246316}, + {-0.456244, 0.269076}, {-0.569351, 0.335394}, {-0.738834, 0.434614}, {-0.925054, 0.543618}, + {-1.07728, 0.632698}, {-1.07801, 0.632597}, {-0.971053, 0.569618}, {-0.799145, 0.46903}, + {-0.622477, 0.366075}, {-0.488434, 0.288236}, {-0.418855, 0.247976}, {-0.418257, 0.247793}, + {-0.486751, 0.287841}, {-0.620063, 0.365782}, {-0.796599, 0.469021}, {-0.969105, 0.569791}, + {-1.01413, 0.595421}, {-0.970685, 0.569339}, {-0.85451, 0.501219}, {-0.70756, 0.415738}, + {-0.574974, 0.339005}, {-0.487221, 0.288358}, {-0.456992, 0.270943}, {-0.486623, 0.288223}, + {-0.573232, 0.338789}, {-0.704434, 0.415518}, {-0.850838, 0.501053}, {-0.968158, 0.569254}, + {-0.92519, 0.543229}, {-0.882194, 0.51778}, {-0.803052, 0.471756}, {-0.706815, 0.416138}, + {-0.619971, 0.365984}, {-0.568649, 0.336233}, {-0.568759, 0.336209}, {-0.619567, 0.365764}, + {-0.704601, 0.415476}, {-0.798918, 0.470675}, {-0.87795, 0.516724}, {-0.923379, 0.542786}, + {-0.884667, 0.520219}, {-0.883259, 0.51966}, {-0.854793, 0.503429}, {-0.797038, 0.469961}, + {-0.736807, 0.434731}, {-0.711432, 0.419602}, {-0.737571, 0.434541}, {-0.796883, 0.469038}, + {-0.852281, 0.501427}, {-0.879063, 0.517115}, {-0.881391, 0.518406}, {-0.879834, 0.517378}, + {-0.927968, 0.547149}, {-0.97308, 0.574077}, {-0.971079, 0.572991}, {-0.923322, 0.544691}, + {-0.876938, 0.516942}, {-0.877867, 0.516857}, {-0.925038, 0.543949}, {-0.97148, 0.570775}, + {-0.971238, 0.570472}, {-0.925198, 0.54363}, {-0.880027, 0.517624}, {-0.881342, 0.519098}, + {-0.905261, 0.532232}, {-0.986474, 0.579813}, {-1.01989, 0.599225}, {-1.0238, 0.601451}, + {-1.02426, 0.601747}, {-1.02099, 0.599699}, {-0.987607, 0.579669}, {-0.905969, 0.531174}, + {-0.798101, 0.467542}, {-0.72016, 0.42201}, {-0.720125, 0.422628}, {-0.797852, 0.468896}, + {-0.986293, 0.579881}, {-1.07406, 0.631167}, {-1.10871, 0.651354}, {-1.11517, 0.655243}, + {-1.10903, 0.651682}, {-1.07501, 0.631306}, {-0.988028, 0.579365}, {-0.85407, 0.499886}, + {-0.725942, 0.424484}, {-0.672192, 0.393574}, {-0.724529, 0.425328}, {-0.852022, 0.500918}, + {-1.02151, 0.599866}, {-1.11025, 0.651759}, {-1.14672, 0.673324}, {-1.14635, 0.673516}, + {-1.10985, 0.652165}, {-1.02238, 0.600139}, {-0.882131, 0.516646}, {-0.726101, 0.424177}, + {-0.620723, 0.36236}, {-0.619458, 0.362492}, {-0.72324, 0.42442}, {-0.879634, 0.516698}, + {-1.02751, 0.602403}, {-1.11779, 0.655467}, {-1.14703, 0.673228}, {-1.11639, 0.655914}, + {-1.02655, 0.603206}, {-0.88504, 0.519278}, {-0.720782, 0.42163}, {-0.585325, 0.341387}, + {-0.531499, 0.309997}, {-0.582725, 0.340861}, {-0.717742, 0.420747}, {-0.883837, 0.518304}, + {-1.02796, 0.602183}, {-1.11047, 0.651014}, {-1.10939, 0.651263}, {-1.02593, 0.602986}, + {-0.882233, 0.518555}, {-0.715708, 0.419907}, {-0.570063, 0.333351}, {-0.484523, 0.282643}, + {-0.483116, 0.282058}, {-0.567128, 0.331875}, {-0.713848, 0.418182}, {-0.882855, 0.517167}, + {-1.02199, 0.599068}, {-1.07366, 0.629911}, {-1.02043, 0.599504}, {-0.884401, 0.520205}, + {-0.716345, 0.421387}, {-0.56779, 0.333442}, {-0.47071, 0.275723}, {-0.436787, 0.255572}, + {-0.468615, 0.274475}, {-0.565496, 0.331577}, {-0.715802, 0.419703}, {-0.885756, 0.519153}, + {-0.985163, 0.578322}, {-0.984799, 0.578416}, {-0.880689, 0.517839}, {-0.722333, 0.425213}, + {-0.5733, 0.337599}, {-0.473054, 0.278322}, {-0.426851, 0.250876}, {-0.425935, 0.250373}, + {-0.47102, 0.277097}, {-0.57163, 0.336279}, {-0.721943, 0.424302}, {-0.881215, 0.517432}, + {-0.902077, 0.530131}, {-0.851875, 0.500612}, {-0.727772, 0.42798}, {-0.590537, 0.347631}, + {-0.490625, 0.289009}, {-0.440981, 0.259799}, {-0.427392, 0.251893}, {-0.439815, 0.259496}, + {-0.488748, 0.288593}, {-0.588595, 0.347321}, {-0.726286, 0.427859}, {-0.851099, 0.500605}, + {-0.795741, 0.467606}, {-0.727098, 0.427028}, {-0.626118, 0.367814}, {-0.539122, 0.316956}, + {-0.489706, 0.288146}, {-0.472129, 0.278046}, {-0.471836, 0.27824}, {-0.488623, 0.28861}, + {-0.536973, 0.317434}, {-0.623193, 0.368112}, {-0.724465, 0.427131}, {-0.794673, 0.46762}, + {-0.720678, 0.423073}, {-0.676324, 0.396777}, {-0.626258, 0.367444}, {-0.589273, 0.345945}, + {-0.570823, 0.335379}, {-0.566018, 0.332904}, {-0.570768, 0.336172}, {-0.588258, 0.346969}, + {-0.623633, 0.368075}, {-0.672792, 0.396846}, {-0.718107, 0.422911}, {-0.737603, 0.433613}, + {-0.722283, 0.423834}, {-0.728986, 0.42768}, {-0.727991, 0.427139}, {-0.720161, 0.422664}, + {-0.713041, 0.418684}, {-0.713393, 0.41919}, {-0.720525, 0.423738}, {-0.727079, 0.427877}, + {-0.726446, 0.427577}, {-0.719392, 0.423225}, {-0.713255, 0.419219}, {-0.714531, 0.419555}, + {-0.799373, 0.469489}, {-0.854376, 0.501776}, {-0.880596, 0.517094}, {-0.881919, 0.517847}, + {-0.879022, 0.516233}, {-0.882802, 0.518575}, {-0.881332, 0.517737}, {-0.853975, 0.501544}, + {-0.797942, 0.468444}, {-0.73916, 0.433814}, {-0.71441, 0.419334}, {-0.740444, 0.434774}, + {-0.854991, 0.500054}, {-0.988714, 0.578671}, {-1.07639, 0.630481}, {-1.106, 0.648363}, + {-1.07561, 0.630936}, {-0.98788, 0.579518}, {-0.854852, 0.501122}, {-0.706168, 0.413345}, + {-0.587145, 0.343059}, {-0.541148, 0.315861}, {-0.586502, 0.342447}, {-0.705576, 0.412342}, + {-0.989327, 0.579265}, {-1.13501, 0.664759}, {-1.21114, 0.709777}, {-1.2101, 0.70974}, + {-1.13284, 0.664816}, {-0.988005, 0.57971}, {-0.801632, 0.469741}, {-0.622966, 0.36422}, + {-0.511953, 0.298751}, {-0.511106, 0.298363}, {-0.621344, 0.363315}, {-0.801058, 0.468872}, + {-1.0793, 0.631768}, {-1.21307, 0.710265}, {-1.25875, 0.737693}, {-1.21017, 0.710106}, + {-1.07603, 0.631937}, {-0.881893, 0.517766}, {-0.673716, 0.394781}, {-0.51159, 0.298897}, + {-0.449334, 0.26217}, {-0.509696, 0.297844}, {-0.672192, 0.393401}, {-0.882901, 0.516871}, + {-1.1106, 0.649654}, {-1.2128, 0.709962}, {-1.21081, 0.70994}, {-1.10632, 0.649904}, + {-0.927359, 0.545417}, {-0.720736, 0.423647}, {-0.540637, 0.316915}, {-0.435294, 0.25434}, + {-0.434083, 0.253519}, {-0.538503, 0.314981}, {-0.720599, 0.421735}, {-0.930431, 0.544346}, + {-1.07923, 0.631452}, {-1.13403, 0.664443}, {-1.07582, 0.631816}, {-0.927302, 0.545923}, + {-0.740516, 0.436481}, {-0.570648, 0.335906}, {-0.456112, 0.26754}, {-0.415358, 0.242998}, + {-0.454166, 0.265765}, {-0.569239, 0.333348}, {-0.741985, 0.434341}, {-0.931255, 0.544775}, + {-0.988196, 0.5792}, {-0.98678, 0.579449}, {-0.881273, 0.518924}, {-0.721905, 0.426146}, + {-0.572437, 0.338054}, {-0.472017, 0.278022}, {-0.425594, 0.249832}, {-0.424547, 0.24896}, + {-0.47006, 0.275868}, {-0.571895, 0.33565}, {-0.723826, 0.424366}, {-0.88424, 0.518015}, + {-0.852081, 0.500741}, {-0.799693, 0.470788}, {-0.674951, 0.398321}, {-0.545042, 0.322126}, + {-0.46119, 0.272203}, {-0.428512, 0.252143}, {-0.422002, 0.247952}, {-0.426989, 0.251169}, + {-0.459488, 0.270718}, {-0.544554, 0.320731}, {-0.675807, 0.39739}, {-0.800728, 0.470367}, + {-0.702968, 0.413776}, {-0.623145, 0.367063}, {-0.516467, 0.304462}, {-0.443168, 0.261075}, + {-0.42274, 0.248531}, {-0.428859, 0.25187}, {-0.428239, 0.251868}, {-0.421193, 0.248522}, + {-0.441405, 0.261049}, {-0.515109, 0.304423}, {-0.622407, 0.367025}, {-0.702752, 0.41376}, + {-0.586221, 0.344444}, {-0.515515, 0.302523}, {-0.456974, 0.267827}, {-0.442766, 0.259231}, + {-0.460513, 0.269644}, {-0.472793, 0.277306}, {-0.459831, 0.270586}, {-0.441288, 0.260678}, + {-0.454798, 0.269209}, {-0.513224, 0.303469}, {-0.584727, 0.344884}, {-0.617478, 0.363388}, + {-0.542921, 0.317484}, {-0.516465, 0.301428}, {-0.516762, 0.301423}, {-0.544064, 0.31763}, + {-0.571358, 0.334191}, {-0.571299, 0.334997}, {-0.54357, 0.319674}, {-0.515301, 0.303841}, + {-0.514096, 0.303413}, {-0.540611, 0.318664}, {-0.568043, 0.333992}, {-0.56901, 0.333618}, + {-0.589065, 0.343441}, {-0.625492, 0.364584}, {-0.675477, 0.39411}, {-0.720855, 0.421284}, + {-0.739418, 0.432921}, {-0.720916, 0.42282}, {-0.675078, 0.396514}, {-0.624235, 0.366955}, + {-0.587287, 0.345145}, {-0.569362, 0.334102}, {-0.565215, 0.330882}, {-0.57068, 0.333266}, + {-0.706877, 0.41252}, {-0.802308, 0.468612}, {-0.881907, 0.515721}, {-0.926581, 0.542539}, + {-0.926536, 0.543113}, {-0.881726, 0.517212}, {-0.80192, 0.470464}, {-0.706327, 0.414159}, + {-0.62062, 0.363464}, {-0.57, 0.333274}, {-0.570207, 0.332912}, {-0.621126, 0.362399}, + {-0.90873, 0.530699}, {-1.08565, 0.635072}, {-1.188, 0.695829}, {-1.18662, 0.69561}, + {-1.08251, 0.634875}, {-0.905949, 0.531375}, {-0.705979, 0.413922}, {-0.535547, 0.313587}, + {-0.437947, 0.255777}, {-0.437593, 0.254904}, {-0.535213, 0.3116}, {-0.707025, 0.412153}, + {-1.08689, 0.635973}, {-1.25264, 0.73346}, {-1.31127, 0.768447}, {-1.24889, 0.732614}, + {-1.08208, 0.635364}, {-0.853578, 0.501501}, {-0.622781, 0.365838}, {-0.45166, 0.264924}, + {-0.388031, 0.227055}, {-0.450773, 0.263432}, {-0.622945, 0.364108}, {-0.856448, 0.500854}, + {-1.19134, 0.697143}, {-1.31299, 0.768776}, {-1.31039, 0.768294}, {-1.18545, 0.696338}, + {-0.971812, 0.571913}, {-0.725656, 0.427572}, {-0.511728, 0.301479}, {-0.387194, 0.227697}, + {-0.386477, 0.226781}, {-0.510983, 0.29949}, {-0.727508, 0.426065}, {-0.976979, 0.571804}, + {-1.19068, 0.696587}, {-1.25079, 0.732704}, {-1.1858, 0.696342}, {-1.01738, 0.599244}, + {-0.796976, 0.470654}, {-0.585708, 0.346253}, {-0.435927, 0.257375}, {-0.381444, 0.224607}, + {-0.434799, 0.255504}, {-0.585954, 0.343788}, {-0.800727, 0.469028}, {-1.02363, 0.598893}, + {-1.08479, 0.635221}, {-1.08247, 0.635402}, {-0.971785, 0.572516}, {-0.797441, 0.471572}, + {-0.620067, 0.367457}, {-0.486057, 0.287752}, {-0.41627, 0.245654}, {-0.415492, 0.244604}, + {-0.485065, 0.2852}, {-0.621396, 0.364724}, {-0.801868, 0.469708}, {-0.97699, 0.571703}, + {-0.905153, 0.53149}, {-0.852577, 0.502286}, {-0.726367, 0.429708}, {-0.588237, 0.349011}, + {-0.488417, 0.289583}, {-0.438975, 0.259306}, {-0.425261, 0.250486}, {-0.437732, 0.257719}, + {-0.487727, 0.28711}, {-0.589745, 0.346591}, {-0.729669, 0.427989}, {-0.855327, 0.501453}, + {-0.703319, 0.41442}, {-0.62243, 0.367877}, {-0.515097, 0.305252}, {-0.441756, 0.26166}, + {-0.421583, 0.248768}, {-0.42783, 0.251684}, {-0.427143, 0.251292}, {-0.420185, 0.247711}, + {-0.440973, 0.260248}, {-0.515615, 0.303875}, {-0.623635, 0.366892}, {-0.703934, 0.414065}, + {-0.533671, 0.314612}, {-0.453954, 0.267697}, {-0.39369, 0.231851}, {-0.38951, 0.228701}, + {-0.421824, 0.247209}, {-0.440785, 0.258508}, {-0.420829, 0.247546}, {-0.388011, 0.229143}, + {-0.392316, 0.232138}, {-0.453072, 0.267754}, {-0.533292, 0.314564}, {-0.57029, 0.336116}, + {-0.438553, 0.256808}, {-0.392833, 0.229247}, {-0.393994, 0.229459}, {-0.441827, 0.257486}, + {-0.489145, 0.285717}, {-0.488796, 0.286388}, {-0.440773, 0.259222}, {-0.392313, 0.231597}, + {-0.390874, 0.231116}, {-0.436942, 0.258006}, {-0.483803, 0.28496}, {-0.48443, 0.284558}, + {-0.440034, 0.255265}, {-0.455729, 0.263975}, {-0.516139, 0.299649}, {-0.58876, 0.343042}, + {-0.621226, 0.363101}, {-0.588249, 0.344708}, {-0.51498, 0.302475}, {-0.45396, 0.267145}, + {-0.438129, 0.257929}, {-0.455412, 0.267611}, {-0.468271, 0.274171}, {-0.45667, 0.266107}, + {-0.537417, 0.311164}, {-0.625532, 0.363069}, {-0.728288, 0.424258}, {-0.798674, 0.46667}, + {-0.798327, 0.467367}, {-0.727316, 0.426259}, {-0.62415, 0.366026}, {-0.535974, 0.31438}, + {-0.486437, 0.285064}, {-0.469332, 0.274268}, {-0.469741, 0.273311}, {-0.487532, 0.282546}, + {-0.707721, 0.411529}, {-0.856201, 0.49932}, {-0.974282, 0.569611}, {-1.01899, 0.596722}, + {-0.972922, 0.570185}, {-0.854309, 0.500753}, {-0.706267, 0.413877}, {-0.573897, 0.336038}, + {-0.486771, 0.284451}, {-0.456904, 0.266092}, {-0.486865, 0.282677}, {-0.574523, 0.333405}, + {-1.02299, 0.598635}, {-1.1894, 0.697064}, {-1.2498, 0.733129}, {-1.18546, 0.695737}, + {-1.01748, 0.597491}, {-0.79733, 0.468729}, {-0.58658, 0.345381}, {-0.437813, 0.257914}, + {-0.384434, 0.225752}, {-0.438174, 0.256085}, {-0.588516, 0.343368}, {-0.801632, 0.468227}, + {-1.19078, 0.697726}, {-1.31196, 0.769254}, {-1.30916, 0.768367}, {-1.18415, 0.695981}, + {-0.970579, 0.571599}, {-0.72483, 0.427978}, {-0.511733, 0.302925}, {-0.388224, 0.229839}, + {-0.388251, 0.228873}, {-0.512822, 0.300964}, {-0.72872, 0.426904}, {-0.977243, 0.572377}, + {-1.25252, 0.733774}, {-1.31023, 0.768428}, {-1.24677, 0.732767}, {-1.0792, 0.636165}, + {-0.850589, 0.503134}, {-0.620269, 0.368135}, {-0.449893, 0.267523}, {-0.386958, 0.229629}, + {-0.450238, 0.265791}, {-0.622845, 0.366137}, {-0.856684, 0.502408}, {-1.08719, 0.636906}, + {-1.18796, 0.696076}, {-1.18495, 0.696012}, {-1.07929, 0.636323}, {-0.902007, 0.534065}, + {-0.702217, 0.417304}, {-0.532352, 0.316932}, {-0.435207, 0.258779}, {-0.435193, 0.257762}, + {-0.53342, 0.314548}, {-0.706287, 0.414984}, {-0.909094, 0.532826}, {-1.08639, 0.636101}, + {-1.01814, 0.597751}, {-0.970386, 0.572001}, {-0.850826, 0.503959}, {-0.702987, 0.41806}, + {-0.571434, 0.34027}, {-0.484887, 0.288176}, {-0.455049, 0.269532}, {-0.484962, 0.286385}, + {-0.573141, 0.337476}, {-0.707446, 0.41532}, {-0.856843, 0.502007}, {-0.97477, 0.571052}, + {-0.796031, 0.469208}, {-0.724431, 0.429006}, {-0.621865, 0.369769}, {-0.53516, 0.318509}, + {-0.486935, 0.288976}, {-0.470153, 0.277962}, {-0.469968, 0.277278}, {-0.487042, 0.287093}, + {-0.536759, 0.315898}, {-0.62514, 0.367115}, {-0.727891, 0.427035}, {-0.797522, 0.468481}, + {-0.584838, 0.345936}, {-0.512712, 0.304136}, {-0.453815, 0.269255}, {-0.440236, 0.260336}, + {-0.458798, 0.270305}, {-0.471412, 0.277328}, {-0.458391, 0.269826}, {-0.440037, 0.259275}, + {-0.454387, 0.267663}, {-0.5139, 0.302439}, {-0.585817, 0.344822}, {-0.617751, 0.364292}, + {-0.437406, 0.257946}, {-0.391269, 0.230261}, {-0.392486, 0.230267}, {-0.440697, 0.258108}, + {-0.48835, 0.286095}, {-0.488075, 0.286356}, {-0.43998, 0.258676}, {-0.391587, 0.230699}, + {-0.390463, 0.230296}, {-0.436875, 0.25772}, {-0.483753, 0.285394}, {-0.483935, 0.28553}, + {-0.385785, 0.224752}, {-0.392231, 0.227792}, {-0.455032, 0.264624}, {-0.536732, 0.313147}, + {-0.57402, 0.335814}, {-0.536115, 0.314239}, {-0.453803, 0.266436}, {-0.390558, 0.229759}, + {-0.384116, 0.226347}, {-0.415576, 0.244881}, {-0.435087, 0.255852}, {-0.416633, 0.244006}, + {-0.440106, 0.254204}, {-0.515621, 0.298598}, {-0.624637, 0.363576}, {-0.705867, 0.412455}, + {-0.705416, 0.413}, {-0.623349, 0.365204}, {-0.513732, 0.301146}, {-0.438066, 0.257127}, + {-0.416682, 0.244805}, {-0.423233, 0.248207}, {-0.423834, 0.247287}, {-0.41827, 0.242427}, + {-0.589561, 0.341428}, {-0.729069, 0.424294}, {-0.855077, 0.49969}, {-0.905735, 0.530443}, + {-0.853543, 0.500136}, {-0.726651, 0.425682}, {-0.587148, 0.344}, {-0.486337, 0.285155}, + {-0.437067, 0.256122}, {-0.424451, 0.24771}, {-0.437945, 0.253996}, {-0.488099, 0.282088}, + {-0.801556, 0.467116}, {-0.97579, 0.570585}, {-1.08388, 0.635122}, {-1.08247, 0.634772}, + {-0.972363, 0.570176}, {-0.797905, 0.467856}, {-0.620246, 0.363894}, {-0.486552, 0.285597}, + {-0.417809, 0.244731}, {-0.418033, 0.243582}, {-0.487599, 0.283007}, {-0.622706, 0.361654}, + {-1.10965, 0.65101}, {-1.21079, 0.711131}, {-1.20826, 0.710059}, {-1.10336, 0.648844}, + {-0.924243, 0.544416}, {-0.7183, 0.424519}, {-0.540084, 0.320516}, {-0.43731, 0.259747}, + {-0.438113, 0.258732}, {-0.54291, 0.318508}, {-0.723657, 0.423584}, {-0.93133, 0.545568}, + {-1.21182, 0.711241}, {-1.256, 0.73798}, {-1.20609, 0.709803}, {-1.07111, 0.631903}, + {-0.877161, 0.519296}, {-0.670496, 0.398656}, {-0.510842, 0.304668}, {-0.451047, 0.268372}, + {-0.512848, 0.302991}, {-0.675332, 0.396892}, {-0.884895, 0.519056}, {-1.07967, 0.633252}, + {-1.20972, 0.710039}, {-1.20645, 0.709786}, {-1.12718, 0.66538}, {-0.981426, 0.581637}, + {-0.795717, 0.473475}, {-0.618989, 0.369437}, {-0.510313, 0.304479}, {-0.511346, 0.30353}, + {-0.62263, 0.367283}, {-0.802631, 0.471574}, {-0.990581, 0.580938}, {-1.1353, 0.66563}, + {-1.10424, 0.649018}, {-1.07113, 0.632162}, {-0.981394, 0.581887}, {-0.848011, 0.504798}, + {-0.700556, 0.417972}, {-0.583449, 0.347961}, {-0.539142, 0.320392}, {-0.585668, 0.346231}, + {-0.705652, 0.415267}, {-0.855872, 0.502135}, {-0.989913, 0.579978}, {-1.07677, 0.631228}, + {-0.924009, 0.545039}, {-0.876862, 0.519905}, {-0.796041, 0.473948}, {-0.701154, 0.418152}, + {-0.617103, 0.367554}, {-0.567934, 0.337124}, {-0.56887, 0.336345}, {-0.620183, 0.36534}, + {-0.706598, 0.414928}, {-0.802914, 0.470492}, {-0.8828, 0.517229}, {-0.926374, 0.544028}, + {-0.717393, 0.425178}, {-0.670585, 0.399036}, {-0.620299, 0.369539}, {-0.585078, 0.347812}, + {-0.568818, 0.33689}, {-0.565262, 0.333697}, {-0.570292, 0.335869}, {-0.588104, 0.345608}, + {-0.624537, 0.366309}, {-0.674901, 0.395645}, {-0.720158, 0.42297}, {-0.737567, 0.434958}, + {-0.539442, 0.320262}, {-0.511871, 0.303883}, {-0.512536, 0.303441}, {-0.541221, 0.31934}, + {-0.569817, 0.335458}, {-0.570279, 0.335327}, {-0.542523, 0.318698}, {-0.514408, 0.301887}, + {-0.51385, 0.301549}, {-0.540959, 0.318058}, {-0.56805, 0.335129}, {-0.56748, 0.33604}, + {-0.43746, 0.257892}, {-0.452672, 0.265945}, {-0.51339, 0.301114}, {-0.586792, 0.344189}, + {-0.619905, 0.363743}, {-0.587106, 0.344438}, {-0.513736, 0.301232}, {-0.452759, 0.26559}, + {-0.437264, 0.257159}, {-0.454851, 0.268413}, {-0.467503, 0.276449}, {-0.455078, 0.269016}, + {-0.438703, 0.255565}, {-0.513974, 0.299445}, {-0.623115, 0.364126}, {-0.704706, 0.412806}, + {-0.704563, 0.413009}, {-0.622574, 0.364719}, {-0.512886, 0.300346}, {-0.437213, 0.25657}, + {-0.415979, 0.245083}, {-0.422697, 0.249493}, {-0.423244, 0.249186}, {-0.417325, 0.244282}, + {-0.543151, 0.315196}, {-0.675047, 0.393466}, {-0.801031, 0.46879}, {-0.853036, 0.500088}, + {-0.799929, 0.468793}, {-0.67305, 0.394009}, {-0.540705, 0.316669}, {-0.455555, 0.267677}, + {-0.423304, 0.249443}, {-0.418287, 0.245957}, {-0.424648, 0.247973}, {-0.457794, 0.265668}, + {-0.723195, 0.421314}, {-0.883309, 0.516813}, {-0.987705, 0.579312}, {-0.986577, 0.578825}, + {-0.880376, 0.516046}, {-0.719542, 0.421598}, {-0.569005, 0.334029}, {-0.468952, 0.27624}, + {-0.424209, 0.249912}, {-0.42493, 0.248861}, {-0.47107, 0.273931}, {-0.572251, 0.332207}, + {-0.930661, 0.544704}, {-1.07783, 0.632375}, {-1.13263, 0.665132}, {-1.07442, 0.630815}, + {-0.925447, 0.543264}, {-0.738253, 0.433963}, {-0.568962, 0.335582}, {-0.456279, 0.269836}, + {-0.417773, 0.246317}, {-0.457798, 0.267946}, {-0.572286, 0.333571}, {-0.743182, 0.433634}, + {-1.11706, 0.656463}, {-1.14464, 0.673436}, {-1.11251, 0.6551}, {-1.02147, 0.602427}, + {-0.879756, 0.520502}, {-0.717022, 0.426186}, {-0.584683, 0.348691}, {-0.534343, 0.317812}, + {-0.587821, 0.346913}, {-0.722973, 0.424257}, {-0.887441, 0.520088}, {-1.02882, 0.603639}, + {-1.14503, 0.673245}, {-1.14215, 0.67305}, {-1.10347, 0.651965}, {-1.01495, 0.60155}, + {-0.875566, 0.520781}, {-0.722298, 0.430863}, {-0.620614, 0.369979}, {-0.622518, 0.368974}, + {-0.727856, 0.428557}, {-0.884004, 0.518671}, {-1.02437, 0.60064}, {-1.11098, 0.65206}, + {-1.11276, 0.655192}, {-1.10335, 0.652221}, {-1.06692, 0.633092}, {-0.979481, 0.583027}, + {-0.847324, 0.505374}, {-0.722435, 0.430777}, {-0.672011, 0.399129}, {-0.726718, 0.428976}, + {-0.855318, 0.502484}, {-0.989619, 0.580052}, {-1.07648, 0.630829}, {-1.10921, 0.651047}, + {-1.02138, 0.603333}, {-1.01464, 0.602294}, {-0.97934, 0.583296}, {-0.898166, 0.535699}, + {-0.792642, 0.472433}, {-0.717578, 0.426351}, {-0.719855, 0.425531}, {-0.79909, 0.470018}, + {-0.907516, 0.531987}, {-0.989315, 0.579107}, {-1.02234, 0.598925}, {-1.02428, 0.602035}, + {-0.879469, 0.521897}, {-0.875239, 0.521424}, {-0.847141, 0.505252}, {-0.792492, 0.47204}, + {-0.736017, 0.437054}, {-0.713142, 0.421708}, {-0.740207, 0.435787}, {-0.799879, 0.469154}, + {-0.855876, 0.500826}, {-0.882982, 0.516646}, {-0.884015, 0.518738}, {-0.878991, 0.518584}, + {-0.716712, 0.426845}, {-0.721954, 0.430288}, {-0.721974, 0.429445}, {-0.716853, 0.425024}, + {-0.712423, 0.420965}, {-0.714245, 0.420629}, {-0.721741, 0.423623}, {-0.728444, 0.426391}, + {-0.728185, 0.425916}, {-0.721121, 0.422809}, {-0.713604, 0.420658}, {-0.712023, 0.422312}, + {-0.584246, 0.347455}, {-0.619863, 0.367543}, {-0.670681, 0.396429}, {-0.717902, 0.423371}, + {-0.738138, 0.43445}, {-0.720411, 0.423002}, {-0.674652, 0.395097}, {-0.623858, 0.36491}, + {-0.587194, 0.344227}, {-0.569305, 0.335587}, {-0.564246, 0.334606}, {-0.567819, 0.337851}, + {-0.533451, 0.314664}, {-0.620866, 0.365225}, {-0.724074, 0.425719}, {-0.795665, 0.467732}, + {-0.796426, 0.467626}, {-0.725876, 0.425255}, {-0.622675, 0.364176}, {-0.534507, 0.313134}, + {-0.485271, 0.285983}, {-0.468406, 0.277793}, {-0.468399, 0.278379}, {-0.484976, 0.287408}, + {-0.58629, 0.34312}, {-0.725238, 0.424946}, {-0.851612, 0.499892}, {-0.903225, 0.530304}, + {-0.851867, 0.499358}, {-0.725244, 0.424248}, {-0.585612, 0.342671}, {-0.484763, 0.28516}, + {-0.435776, 0.258224}, {-0.42345, 0.251509}, {-0.436708, 0.258139}, {-0.485944, 0.285239}, + {-0.721074, 0.421389}, {-0.881011, 0.516467}, {-0.98582, 0.578833}, {-0.985376, 0.578198}, + {-0.87965, 0.515168}, {-0.718866, 0.42065}, {-0.568146, 0.333548}, {-0.468024, 0.276761}, + {-0.423433, 0.251491}, {-0.42428, 0.250931}, {-0.470191, 0.275668}, {-0.570757, 0.33309}, + {-0.885804, 0.518833}, {-1.0219, 0.600042}, {-1.07367, 0.630722}, {-1.0198, 0.598373}, + {-0.882177, 0.517091}, {-0.712562, 0.418363}, {-0.563839, 0.332924}, {-0.468411, 0.27824}, + {-0.436962, 0.259253}, {-0.470481, 0.276772}, {-0.567437, 0.33153}, {-0.716733, 0.418563}, + {-1.02799, 0.603482}, {-1.10961, 0.652286}, {-1.10785, 0.651229}, {-1.02335, 0.60134}, + {-0.878572, 0.516856}, {-0.711954, 0.420536}, {-0.567972, 0.337443}, {-0.485389, 0.288975}, + {-0.486686, 0.287995}, {-0.571684, 0.335511}, {-0.717425, 0.419661}, {-0.884505, 0.518018}, + {-1.07232, 0.630852}, {-1.07056, 0.630918}, {-1.0632, 0.627608}, {-1.0203, 0.60372}, + {-0.92158, 0.547172}, {-0.793655, 0.472723}, {-0.702726, 0.41841}, {-0.704923, 0.417269}, + {-0.799497, 0.469998}, {-0.929183, 0.544382}, {-1.02747, 0.602005}, {-1.06817, 0.627034}, + {-1.07036, 0.631004}, {-1.0844, 0.641468}, {-1.10189, 0.653626}, {-1.06773, 0.634808}, + {-0.965988, 0.575278}, {-0.849279, 0.505626}, {-0.799301, 0.473928}, {-0.85452, 0.503455}, + {-0.974792, 0.571657}, {-1.07746, 0.630846}, {-1.10995, 0.650385}, {-1.08889, 0.639677}, + {-1.06271, 0.628629}, {-1.10156, 0.654342}, {-1.12316, 0.668716}, {-1.07351, 0.639698}, + {-0.966127, 0.575326}, {-0.878149, 0.521311}, {-0.88134, 0.520328}, {-0.974653, 0.57238}, + {-1.08471, 0.635055}, {-1.13383, 0.663357}, {-1.10905, 0.649966}, {-1.06538, 0.626932}, + {-1.01991, 0.605809}, {-1.06726, 0.636002}, {-1.07311, 0.639927}, {-1.01044, 0.601935}, + {-0.921916, 0.54774}, {-0.882583, 0.522}, {-0.928425, 0.546209}, {-1.02128, 0.598346}, + {-1.08496, 0.634306}, {-1.07694, 0.629854}, {-1.02525, 0.601719}, {-0.995061, 0.587574}, + {-0.92145, 0.549256}, {-0.965175, 0.575824}, {-0.964778, 0.574777}, {-0.920679, 0.547078}, + {-0.878039, 0.519858}, {-0.881313, 0.519436}, {-0.929312, 0.545241}, {-0.97583, 0.570653}, + {-0.975371, 0.569835}, {-0.928372, 0.54369}, {-0.88077, 0.518931}, {-0.878351, 0.521218}, + {-0.793243, 0.473276}, {-0.847351, 0.504481}, {-0.875002, 0.519428}, {-0.879228, 0.520414}, + {-0.879135, 0.518658}, {-0.884544, 0.51981}, {-0.883567, 0.517258}, {-0.856226, 0.500205}, + {-0.800052, 0.468039}, {-0.740536, 0.435682}, {-0.713862, 0.423286}, {-0.736976, 0.439354}, + {-0.701142, 0.416783}, {-0.795548, 0.471179}, {-0.876019, 0.517617}, {-0.922854, 0.544232}, + {-0.924957, 0.544023}, {-0.881358, 0.516598}, {-0.801881, 0.468728}, {-0.706368, 0.413108}, + {-0.620816, 0.365091}, {-0.570009, 0.33812}, {-0.569014, 0.339552}, {-0.617693, 0.368557}, + {-0.701801, 0.414316}, {-0.849151, 0.500379}, {-0.967938, 0.570028}, {-1.01459, 0.596709}, + {-0.970387, 0.569212}, {-0.852688, 0.498733}, {-0.704774, 0.412047}, {-0.572499, 0.336444}, + {-0.48579, 0.288353}, {-0.456139, 0.272769}, {-0.485267, 0.289806}, {-0.570888, 0.338727}, + {-0.795518, 0.467383}, {-0.969111, 0.569707}, {-1.07832, 0.63391}, {-1.07892, 0.633197}, + {-0.97037, 0.567968}, {-0.796351, 0.465497}, {-0.618458, 0.36283}, {-0.484734, 0.28727}, + {-0.416415, 0.249265}, {-0.416842, 0.249412}, {-0.485523, 0.287876}, {-0.61865, 0.364149}, + {-0.92568, 0.54321}, {-1.07309, 0.6305}, {-1.12941, 0.66324}, {-1.07294, 0.628773}, + {-0.924866, 0.541062}, {-0.737495, 0.43222}, {-0.567629, 0.335295}, {-0.45474, 0.271532}, + {-0.41644, 0.249404}, {-0.456398, 0.270956}, {-0.56995, 0.33514}, {-0.739305, 0.433371}, + {-1.02543, 0.602078}, {-1.10773, 0.650928}, {-1.10713, 0.649962}, {-1.02353, 0.600065}, + {-0.878905, 0.515649}, {-0.711811, 0.419746}, {-0.567276, 0.337426}, {-0.484466, 0.289703}, + {-0.485758, 0.288954}, {-0.570555, 0.336006}, {-0.715695, 0.419294}, {-0.8821, 0.516913}, + {-1.06758, 0.627366}, {-1.08843, 0.640068}, {-1.06526, 0.626339}, {-0.994871, 0.585351}, + {-0.877686, 0.518046}, {-0.736047, 0.436923}, {-0.617298, 0.368225}, {-0.571703, 0.340401}, + {-0.620535, 0.36644}, {-0.741319, 0.434861}, {-0.883244, 0.517288}, {-0.999225, 0.5861}}; - std::vector expected_rho_2 { - 8.66322e-05, 9.09154e-05, 9.80794e-05, 9.62722e-05, 8.16604e-05, 6.46466e-05, 5.76474e-05, 6.49856e-05, 8.21971e-05, 9.67325e-05, 9.82953e-05, 9.09594e-05, 9.08935e-05, 0.000103381, 0.000114995, 0.000110548, 9.21788e-05, 7.69555e-05, 7.72464e-05, 9.2947e-05, 0.00011143, 0.000115579, 0.000103597, 9.09303e-05, 9.81246e-05, 0.000115021, 0.000122426, 0.000110464, 9.11147e-05, 8.25973e-05, 9.18823e-05, 0.000111692, 0.000123525, 0.000115612, 9.83109e-05, 8.99972e-05, 9.64228e-05, 0.000110554, 0.000110366, 9.60819e-05, 8.30607e-05, 8.35169e-05, 9.72864e-05, 0.000111778, 0.00011156, 9.68686e-05, 8.32922e-05, 8.31881e-05, 8.17731e-05, 9.19864e-05, 9.07279e-05, 8.27491e-05, 7.87781e-05, 8.35978e-05, 9.20407e-05, 9.31494e-05, 8.24252e-05, 6.828e-05, 6.20692e-05, 6.80515e-05, 6.45305e-05, 7.64246e-05, 8.18118e-05, 8.27818e-05, 8.31747e-05, 8.27708e-05, 7.74396e-05, 6.51951e-05, 5.07151e-05, 4.14035e-05, 4.13397e-05, 5.04355e-05, 5.72317e-05, 7.63516e-05, 9.06979e-05, 9.61549e-05, 9.12462e-05, 7.70786e-05, 5.77605e-05, 3.95271e-05, 2.74958e-05, 2.34614e-05, 2.74307e-05, 3.92893e-05, 6.43151e-05, 9.18088e-05, 0.000110324, 0.000110512, 9.22121e-05, 6.46479e-05, 3.93121e-05, 2.27458e-05, 1.53501e-05, 1.53502e-05, 2.27178e-05, 3.91666e-05, 8.14631e-05, 0.000110395, 0.000122401, 0.000110528, 8.15908e-05, 5.01446e-05, 2.71976e-05, 1.52503e-05, 1.18282e-05, 1.5279e-05, 2.72311e-05, 5.01152e-05, 9.62222e-05, 0.000114984, 0.000114997, 9.62193e-05, 6.76356e-05, 4.08901e-05, 2.31617e-05, 1.52301e-05, 1.52593e-05, 2.32485e-05, 4.10021e-05, 6.77051e-05, 9.81138e-05, 0.000103432, 9.80899e-05, 8.29138e-05, 6.15808e-05, 4.0922e-05, 2.72051e-05, 2.26743e-05, 2.73074e-05, 4.11016e-05, 6.17575e-05, 8.3011e-05, 9.09546e-05, 9.09482e-05, 8.99295e-05, 8.29393e-05, 6.77091e-05, 5.02057e-05, 3.92875e-05, 3.93831e-05, 5.04644e-05, 6.80165e-05, 8.31457e-05, 8.9998e-05, 9.10633e-05, 0.000103727, 0.000115365, 0.000110745, 9.21349e-05, 7.67424e-05, 7.69412e-05, 9.2585e-05, 0.000111041, 0.00011522, 0.000103358, 9.08835e-05, 0.000103701, 0.000124504, 0.000134884, 0.000122512, 0.000100863, 9.11523e-05, 0.000101495, 0.00012339, 0.0001354, 0.00012448, 0.000103513, 9.3817e-05, 0.000115401, 0.000134897, 0.00013461, 0.000114867, 9.70076e-05, 9.74646e-05, 0.000116038, 0.000135857, 0.000135583, 0.000115536, 9.7247e-05, 9.72654e-05, 0.000110854, 0.000122458, 0.000114721, 9.7906e-05, 9.01702e-05, 9.88692e-05, 0.000116222, 0.00012375, 0.000111506, 9.16747e-05, 8.26758e-05, 9.1491e-05, 9.21537e-05, 0.00010055, 9.65106e-05, 8.97913e-05, 9.02754e-05, 9.7747e-05, 0.000101942, 9.31185e-05, 7.5218e-05, 6.17738e-05, 6.16731e-05, 7.47928e-05, 7.64941e-05, 9.04369e-05, 9.64812e-05, 9.79791e-05, 9.72543e-05, 9.15561e-05, 7.7423e-05, 5.79902e-05, 4.20914e-05, 3.62082e-05, 4.1915e-05, 5.74885e-05, 7.63542e-05, 0.000100344, 0.000114587, 0.000114905, 0.000101082, 7.70694e-05, 5.08717e-05, 3.09099e-05, 2.10637e-05, 2.10258e-05, 3.07413e-05, 5.0444e-05, 9.17286e-05, 0.000122015, 0.000134293, 0.000122399, 9.22065e-05, 5.7515e-05, 3.07442e-05, 1.63273e-05, 1.21628e-05, 1.62989e-05, 3.06228e-05, 5.72021e-05, 0.000110202, 0.000134277, 0.00013443, 0.000110521, 7.44908e-05, 4.16398e-05, 2.0846e-05, 1.20913e-05, 1.20963e-05, 2.08422e-05, 4.15524e-05, 7.42453e-05, 0.000114719, 0.000123921, 0.000114978, 9.1113e-05, 6.12461e-05, 3.58088e-05, 2.07988e-05, 1.62058e-05, 2.08303e-05, 3.58149e-05, 6.11144e-05, 9.0823e-05, 0.000103218, 0.000103394, 9.70724e-05, 8.236e-05, 6.12713e-05, 4.15842e-05, 3.05734e-05, 3.0615e-05, 4.16597e-05, 6.12289e-05, 8.20841e-05, 9.66965e-05, 9.08957e-05, 9.38534e-05, 9.72175e-05, 9.12804e-05, 7.45219e-05, 5.7346e-05, 5.05292e-05, 5.75136e-05, 7.46703e-05, 9.11503e-05, 9.6815e-05, 9.3506e-05, 9.86094e-05, 0.000115747, 0.000123048, 0.000110663, 9.08732e-05, 8.20784e-05, 9.12166e-05, 0.000110974, 0.000122855, 0.000115104, 9.80793e-05, 9.01144e-05, 0.000115677, 0.000135256, 0.000134858, 0.000114877, 9.68091e-05, 9.71348e-05, 0.000115643, 0.000135466, 0.000135259, 0.000115324, 9.71789e-05, 9.73665e-05, 0.000123007, 0.000134853, 0.000123983, 0.000103236, 9.38226e-05, 0.000104024, 0.000125149, 0.000135709, 0.000123261, 0.000101352, 9.13447e-05, 0.000101393, 0.000110692, 0.000114818, 0.000103106, 9.08733e-05, 9.13118e-05, 0.000104243, 0.000116106, 0.000111556, 9.282e-05, 7.71886e-05, 7.71179e-05, 9.2474e-05, 9.08436e-05, 9.65136e-05, 9.33522e-05, 9.09421e-05, 9.4111e-05, 9.76827e-05, 9.18949e-05, 7.51509e-05, 5.78519e-05, 5.08473e-05, 5.76128e-05, 7.453e-05, 8.18096e-05, 9.64211e-05, 0.00010304, 0.000103372, 9.72367e-05, 8.26992e-05, 6.17002e-05, 4.19795e-05, 3.0861e-05, 3.07771e-05, 4.16703e-05, 6.10691e-05, 9.05933e-05, 0.000114455, 0.000123711, 0.000114913, 9.12288e-05, 6.14839e-05, 3.60552e-05, 2.09796e-05, 1.63161e-05, 2.08773e-05, 3.57783e-05, 6.0974e-05, 0.00011007, 0.000134092, 0.00013429, 0.000110516, 7.45997e-05, 4.17636e-05, 2.09183e-05, 1.21148e-05, 1.20948e-05, 2.08283e-05, 4.15268e-05, 7.41847e-05, 0.000122013, 0.000134236, 0.00012238, 9.22473e-05, 5.754e-05, 3.0698e-05, 1.62329e-05, 1.206e-05, 1.62133e-05, 3.0595e-05, 5.72528e-05, 9.17953e-05, 0.000114645, 0.000114906, 0.000101072, 7.70042e-05, 5.0684e-05, 3.06272e-05, 2.07683e-05, 2.07734e-05, 3.05934e-05, 5.04678e-05, 7.6513e-05, 0.000100497, 9.79817e-05, 9.71761e-05, 9.1389e-05, 7.7092e-05, 5.7483e-05, 4.15174e-05, 3.56908e-05, 4.1552e-05, 5.73798e-05, 7.66353e-05, 9.06577e-05, 9.66092e-05, 9.01536e-05, 9.74878e-05, 0.000101498, 9.245e-05, 7.44172e-05, 6.10165e-05, 6.11036e-05, 7.45356e-05, 9.22486e-05, 0.000100826, 9.67187e-05, 8.98243e-05, 9.70445e-05, 0.000111374, 0.00011095, 9.61412e-05, 8.26514e-05, 8.28281e-05, 9.64852e-05, 0.000111005, 0.00011091, 9.64205e-05, 8.31343e-05, 8.34063e-05, 0.000111252, 0.000122974, 0.00011505, 9.789e-05, 8.98579e-05, 9.83735e-05, 0.000115662, 0.000123223, 0.00011106, 9.13501e-05, 8.25301e-05, 9.16022e-05, 0.000110875, 0.00011508, 0.000103296, 9.09165e-05, 9.12227e-05, 0.000104068, 0.000115891, 0.000111329, 9.25934e-05, 7.69896e-05, 7.69925e-05, 9.24877e-05, 9.62098e-05, 9.79353e-05, 9.08547e-05, 8.68207e-05, 9.14111e-05, 9.88162e-05, 9.70291e-05, 8.21707e-05, 6.48023e-05, 5.7497e-05, 6.46014e-05, 8.16684e-05, 8.27292e-05, 8.97105e-05, 9.08607e-05, 9.11018e-05, 9.03403e-05, 8.34977e-05, 6.81965e-05, 5.04528e-05, 3.92764e-05, 3.91645e-05, 5.00874e-05, 6.75631e-05, 8.26807e-05, 9.77966e-05, 0.000103231, 9.81339e-05, 8.32174e-05, 6.19824e-05, 4.12142e-05, 2.73047e-05, 2.26135e-05, 2.71287e-05, 4.08387e-05, 6.14492e-05, 9.5941e-05, 0.000114618, 0.000114753, 9.62806e-05, 6.79379e-05, 4.11991e-05, 2.33238e-05, 1.52523e-05, 1.52009e-05, 2.31512e-05, 4.08889e-05, 6.75442e-05, 0.000110162, 0.000122095, 0.000110427, 8.17862e-05, 5.0443e-05, 2.73845e-05, 1.52887e-05, 1.17873e-05, 1.52261e-05, 2.72218e-05, 5.01503e-05, 8.14217e-05, 0.000110171, 0.000110381, 9.23012e-05, 6.48832e-05, 3.9473e-05, 2.27385e-05, 1.52364e-05, 1.52218e-05, 2.26613e-05, 3.92454e-05, 6.446e-05, 9.18326e-05, 9.60882e-05, 9.12528e-05, 7.71986e-05, 5.7831e-05, 3.94017e-05, 2.72065e-05, 2.31332e-05, 2.71896e-05, 3.92494e-05, 5.73943e-05, 7.65381e-05, 9.07352e-05, 8.31427e-05, 8.27674e-05, 7.73859e-05, 6.49247e-05, 5.02016e-05, 4.07965e-05, 4.08239e-05, 5.01779e-05, 6.46007e-05, 7.66709e-05, 8.19891e-05, 8.28065e-05, 8.35102e-05, 9.18766e-05, 9.27847e-05, 8.17862e-05, 6.74957e-05, 6.13643e-05, 6.76295e-05, 8.17635e-05, 9.22908e-05, 9.10504e-05, 8.28937e-05, 7.87637e-05, 8.22849e-05, 9.26854e-05, 9.12148e-05, 8.27857e-05, 7.84198e-05, 8.30329e-05, 9.14518e-05, 9.2624e-05, 8.19604e-05, 6.79017e-05, 6.18754e-05, 6.81775e-05, 9.25767e-05, 0.000101186, 9.70021e-05, 8.99369e-05, 9.01047e-05, 9.73949e-05, 0.000101531, 9.26836e-05, 7.47587e-05, 6.13449e-05, 6.13879e-05, 7.48154e-05, 9.12466e-05, 9.71234e-05, 9.38859e-05, 9.12418e-05, 9.41784e-05, 9.75881e-05, 9.16882e-05, 7.48419e-05, 5.7471e-05, 5.04671e-05, 5.735e-05, 7.45579e-05, 8.30465e-05, 9.01483e-05, 9.12569e-05, 9.13645e-05, 9.0462e-05, 8.35058e-05, 6.81106e-05, 5.029e-05, 3.90704e-05, 3.89626e-05, 4.99716e-05, 6.76468e-05, 7.87113e-05, 9.01335e-05, 9.39391e-05, 9.02488e-05, 7.89857e-05, 6.16455e-05, 4.33448e-05, 3.03039e-05, 2.5719e-05, 3.00896e-05, 4.29655e-05, 6.12441e-05, 8.30431e-05, 9.69831e-05, 9.70005e-05, 8.31465e-05, 6.15899e-05, 4.05755e-05, 2.57776e-05, 1.86682e-05, 1.85838e-05, 2.55399e-05, 4.02659e-05, 6.13476e-05, 9.10058e-05, 0.000100754, 9.10671e-05, 6.79588e-05, 4.34991e-05, 2.59208e-05, 1.66364e-05, 1.38535e-05, 1.65237e-05, 2.57166e-05, 4.32744e-05, 6.78031e-05, 9.19258e-05, 9.2011e-05, 7.46443e-05, 5.05692e-05, 3.07138e-05, 1.89438e-05, 1.39542e-05, 1.39193e-05, 1.88335e-05, 3.0524e-05, 5.0329e-05, 7.44332e-05, 8.14517e-05, 7.45835e-05, 5.78007e-05, 3.96656e-05, 2.62394e-05, 1.8878e-05, 1.66234e-05, 1.88392e-05, 2.61126e-05, 3.9394e-05, 5.74216e-05, 7.42891e-05, 6.77927e-05, 6.1626e-05, 5.10893e-05, 3.96228e-05, 3.05259e-05, 2.57029e-05, 2.57095e-05, 3.0487e-05, 3.94058e-05, 5.06384e-05, 6.11215e-05, 6.75673e-05, 6.20323e-05, 6.18517e-05, 5.79597e-05, 5.04221e-05, 4.31041e-05, 4.01789e-05, 4.31609e-05, 5.03565e-05, 5.75884e-05, 6.12606e-05, 6.15807e-05, 6.13564e-05, 6.83477e-05, 7.51768e-05, 7.48743e-05, 6.76831e-05, 6.10303e-05, 6.11212e-05, 6.78223e-05, 7.47709e-05, 7.47231e-05, 6.78197e-05, 6.13917e-05, 6.16178e-05, 6.49478e-05, 7.71124e-05, 8.24084e-05, 8.30366e-05, 8.3113e-05, 8.2574e-05, 7.72343e-05, 6.49572e-05, 5.03889e-05, 4.1034e-05, 4.10616e-05, 5.04397e-05, 7.7096e-05, 9.14035e-05, 9.73827e-05, 9.85289e-05, 9.745e-05, 9.15351e-05, 7.72625e-05, 5.76774e-05, 4.16496e-05, 3.57343e-05, 4.15711e-05, 5.75326e-05, 8.26488e-05, 9.76164e-05, 0.000104147, 0.000104112, 9.75951e-05, 8.27725e-05, 6.15501e-05, 4.16477e-05, 3.04254e-05, 3.03387e-05, 4.14158e-05, 6.12942e-05, 8.35527e-05, 9.88914e-05, 0.000104181, 9.87409e-05, 8.34934e-05, 6.20137e-05, 4.10679e-05, 2.70421e-05, 2.22973e-05, 2.68419e-05, 4.07662e-05, 6.18287e-05, 8.3592e-05, 9.75876e-05, 9.74655e-05, 8.34024e-05, 6.16774e-05, 4.05533e-05, 2.56844e-05, 1.85318e-05, 1.8432e-05, 2.54295e-05, 4.03112e-05, 6.16577e-05, 8.26502e-05, 9.12599e-05, 8.24937e-05, 6.20038e-05, 4.06802e-05, 2.55355e-05, 1.75271e-05, 1.50834e-05, 1.73705e-05, 2.53091e-05, 4.05511e-05, 6.20811e-05, 7.68584e-05, 7.68226e-05, 6.14732e-05, 4.13786e-05, 2.60704e-05, 1.77422e-05, 1.44378e-05, 1.43768e-05, 1.75887e-05, 2.5905e-05, 4.12998e-05, 6.1503e-05, 6.44774e-05, 5.74996e-05, 4.19824e-05, 2.76574e-05, 1.90971e-05, 1.54284e-05, 1.44949e-05, 1.53584e-05, 1.89738e-05, 2.75087e-05, 4.18484e-05, 5.74214e-05, 5.01704e-05, 4.18764e-05, 3.10576e-05, 2.30361e-05, 1.90141e-05, 1.76813e-05, 1.76715e-05, 1.89671e-05, 2.29164e-05, 3.08538e-05, 4.1656e-05, 5.00712e-05, 4.11307e-05, 3.62124e-05, 3.10515e-05, 2.74997e-05, 2.58148e-05, 2.53961e-05, 2.58429e-05, 2.74708e-05, 3.08846e-05, 3.59342e-05, 4.09046e-05, 4.31158e-05, 4.13051e-05, 4.20711e-05, 4.19582e-05, 4.10662e-05, 4.02686e-05, 4.03232e-05, 4.1151e-05, 4.19172e-05, 4.18481e-05, 4.10294e-05, 4.03126e-05, 4.04364e-05, 5.06155e-05, 5.78197e-05, 6.1418e-05, 6.16014e-05, 6.12029e-05, 6.17377e-05, 6.15337e-05, 5.77658e-05, 5.04237e-05, 4.32622e-05, 4.04156e-05, 4.34227e-05, 5.778e-05, 7.72949e-05, 9.16478e-05, 9.68004e-05, 9.15827e-05, 7.72559e-05, 5.78292e-05, 3.94324e-05, 2.72353e-05, 2.31232e-05, 2.71658e-05, 3.9334e-05, 7.74069e-05, 0.000101898, 0.000116062, 0.00011591, 0.000101613, 7.72834e-05, 5.08426e-05, 3.06695e-05, 2.06929e-05, 2.06281e-05, 3.05117e-05, 5.07404e-05, 9.21132e-05, 0.000116379, 0.000125368, 0.000115951, 9.17105e-05, 6.15938e-05, 3.59114e-05, 2.06762e-05, 1.59391e-05, 2.05251e-05, 3.57262e-05, 6.16439e-05, 9.75006e-05, 0.000116315, 0.000116028, 9.69599e-05, 6.81701e-05, 4.11648e-05, 2.31304e-05, 1.497e-05, 1.48831e-05, 2.2922e-05, 4.10572e-05, 6.84373e-05, 9.20819e-05, 0.000101742, 9.16747e-05, 6.81962e-05, 4.35172e-05, 2.5825e-05, 1.64692e-05, 1.36392e-05, 1.63083e-05, 2.56285e-05, 4.35352e-05, 6.85557e-05, 7.72709e-05, 7.7123e-05, 6.16001e-05, 4.13891e-05, 2.60307e-05, 1.76754e-05, 1.43446e-05, 1.42662e-05, 1.74955e-05, 2.58979e-05, 4.14633e-05, 6.18535e-05, 5.75279e-05, 5.07178e-05, 3.61754e-05, 2.3609e-05, 1.68921e-05, 1.45595e-05, 1.41095e-05, 1.44533e-05, 1.6751e-05, 2.35235e-05, 3.61993e-05, 5.07919e-05, 3.91875e-05, 3.08059e-05, 2.11715e-05, 1.55836e-05, 1.41639e-05, 1.45683e-05, 1.45369e-05, 1.40858e-05, 1.54888e-05, 2.10853e-05, 3.07491e-05, 3.91687e-05, 2.72276e-05, 2.10439e-05, 1.6526e-05, 1.55049e-05, 1.67723e-05, 1.76942e-05, 1.67656e-05, 1.54714e-05, 1.64506e-05, 2.09369e-05, 2.71419e-05, 3.02327e-05, 2.32975e-05, 2.10623e-05, 2.10794e-05, 2.33753e-05, 2.58044e-05, 2.58327e-05, 2.3421e-05, 2.10763e-05, 2.09878e-05, 2.31935e-05, 2.55737e-05, 2.56238e-05, 2.73837e-05, 3.08709e-05, 3.60198e-05, 4.10568e-05, 4.32392e-05, 4.11388e-05, 3.61005e-05, 3.08807e-05, 2.73295e-05, 2.56666e-05, 2.52632e-05, 2.57222e-05, 3.94509e-05, 5.0844e-05, 6.14707e-05, 6.79005e-05, 6.79324e-05, 6.15427e-05, 5.091e-05, 3.94853e-05, 3.04655e-05, 2.5677e-05, 2.56766e-05, 3.04566e-05, 6.52224e-05, 9.31688e-05, 0.000111636, 0.000111426, 9.27543e-05, 6.49682e-05, 3.94451e-05, 2.26841e-05, 1.51496e-05, 1.51048e-05, 2.25892e-05, 3.94453e-05, 9.33948e-05, 0.000124097, 0.000136045, 0.000123471, 9.27359e-05, 5.77238e-05, 3.07261e-05, 1.61489e-05, 1.19044e-05, 1.60545e-05, 3.06629e-05, 5.7974e-05, 0.000112213, 0.00013634, 0.000135895, 0.000111323, 7.48859e-05, 4.17808e-05, 2.07768e-05, 1.18839e-05, 1.18261e-05, 2.06603e-05, 4.18627e-05, 7.5471e-05, 0.000112075, 0.000123759, 0.000111372, 8.21093e-05, 5.04555e-05, 2.72668e-05, 1.50951e-05, 1.15417e-05, 1.49795e-05, 2.71821e-05, 5.07176e-05, 8.2836e-05, 9.3071e-05, 9.27882e-05, 7.49231e-05, 5.05499e-05, 3.05981e-05, 1.87928e-05, 1.37615e-05, 1.36923e-05, 1.86483e-05, 3.05759e-05, 5.08632e-05, 7.54661e-05, 6.48898e-05, 5.76692e-05, 4.19495e-05, 2.75549e-05, 1.89906e-05, 1.5311e-05, 1.43475e-05, 1.51972e-05, 1.88649e-05, 2.75587e-05, 4.21453e-05, 5.78966e-05, 3.9248e-05, 3.07889e-05, 2.1117e-05, 1.55287e-05, 1.41142e-05, 1.45114e-05, 1.44648e-05, 1.40122e-05, 1.54417e-05, 2.10965e-05, 3.08335e-05, 3.92814e-05, 2.26041e-05, 1.63605e-05, 1.22984e-05, 1.20185e-05, 1.40794e-05, 1.53786e-05, 1.40393e-05, 1.19595e-05, 1.22387e-05, 1.63121e-05, 2.25775e-05, 2.58083e-05, 1.52133e-05, 1.21873e-05, 1.22459e-05, 1.54024e-05, 1.88995e-05, 1.89024e-05, 1.54004e-05, 1.2224e-05, 1.21442e-05, 1.51648e-05, 1.8568e-05, 1.85904e-05, 1.52431e-05, 1.63375e-05, 2.09782e-05, 2.73461e-05, 3.04946e-05, 2.7379e-05, 2.10084e-05, 1.63406e-05, 1.52236e-05, 1.64328e-05, 1.73416e-05, 1.64535e-05, 2.27128e-05, 3.08087e-05, 4.18391e-05, 5.03947e-05, 5.04006e-05, 4.18566e-05, 3.08344e-05, 2.27398e-05, 1.87218e-05, 1.74033e-05, 1.73951e-05, 1.87007e-05, 3.9473e-05, 5.78588e-05, 7.50138e-05, 8.2125e-05, 7.48966e-05, 5.7753e-05, 3.94666e-05, 2.60485e-05, 1.87206e-05, 1.64654e-05, 1.86666e-05, 2.59867e-05, 8.27404e-05, 0.000111934, 0.00012365, 0.000111275, 8.1998e-05, 5.03825e-05, 2.7291e-05, 1.52076e-05, 1.17062e-05, 1.51701e-05, 2.73422e-05, 5.0759e-05, 0.000112183, 0.000136224, 0.000135712, 0.000111112, 7.47242e-05, 4.17312e-05, 2.08291e-05, 1.19892e-05, 1.19634e-05, 2.08234e-05, 4.20088e-05, 7.55401e-05, 0.000124106, 0.000135883, 0.000123173, 9.24298e-05, 5.75206e-05, 3.06425e-05, 1.61379e-05, 1.19258e-05, 1.61001e-05, 3.0743e-05, 5.80896e-05, 9.35032e-05, 0.000111652, 0.000111227, 9.24528e-05, 6.47171e-05, 3.92995e-05, 2.26094e-05, 1.51019e-05, 1.50692e-05, 2.25857e-05, 3.9522e-05, 6.53946e-05, 9.33417e-05, 8.20955e-05, 7.47285e-05, 5.75932e-05, 3.94005e-05, 2.60533e-05, 1.87413e-05, 1.64766e-05, 1.86833e-05, 2.60547e-05, 3.96349e-05, 5.80821e-05, 7.51669e-05, 5.02863e-05, 4.17488e-05, 3.08309e-05, 2.28454e-05, 1.88855e-05, 1.75709e-05, 1.75375e-05, 1.88254e-05, 2.28457e-05, 3.09539e-05, 4.19444e-05, 5.03859e-05, 2.71935e-05, 2.09331e-05, 1.64039e-05, 1.54095e-05, 1.6702e-05, 1.76184e-05, 1.66633e-05, 1.53633e-05, 1.63794e-05, 2.09409e-05, 2.72145e-05, 3.02914e-05, 1.51892e-05, 1.21439e-05, 1.21997e-05, 1.53637e-05, 1.88666e-05, 1.88593e-05, 1.5342e-05, 1.21656e-05, 1.21029e-05, 1.51529e-05, 1.85798e-05, 1.85949e-05, 1.17432e-05, 1.21202e-05, 1.63204e-05, 2.27422e-05, 2.60479e-05, 2.27438e-05, 1.631e-05, 1.20929e-05, 1.17078e-05, 1.37042e-05, 1.50048e-05, 1.37306e-05, 1.52148e-05, 2.09101e-05, 3.07645e-05, 3.93638e-05, 3.93532e-05, 3.07402e-05, 2.0885e-05, 1.51962e-05, 1.3756e-05, 1.41788e-05, 1.41814e-05, 1.37657e-05, 2.73366e-05, 4.19078e-05, 5.77672e-05, 6.48865e-05, 5.76395e-05, 4.17704e-05, 2.72732e-05, 1.87191e-05, 1.51143e-05, 1.42244e-05, 1.50955e-05, 1.87179e-05, 5.06906e-05, 7.52524e-05, 9.29474e-05, 9.2741e-05, 7.48323e-05, 5.03879e-05, 3.04564e-05, 1.87464e-05, 1.38085e-05, 1.37865e-05, 1.87196e-05, 3.05405e-05, 9.74795e-05, 0.000116125, 0.000115675, 9.64954e-05, 6.77666e-05, 4.1002e-05, 2.32303e-05, 1.52373e-05, 1.52473e-05, 2.33342e-05, 4.14095e-05, 6.86143e-05, 0.00011628, 0.000124984, 0.000115345, 9.10867e-05, 6.11978e-05, 3.58388e-05, 2.0838e-05, 1.6225e-05, 2.08974e-05, 3.6138e-05, 6.19849e-05, 9.22708e-05, 0.000115881, 0.000115395, 0.000100903, 7.66527e-05, 5.04949e-05, 3.06063e-05, 2.08002e-05, 2.08273e-05, 3.07772e-05, 5.10388e-05, 7.76675e-05, 0.000102004, 9.6622e-05, 9.11078e-05, 7.66659e-05, 5.73619e-05, 3.91961e-05, 2.7183e-05, 2.3168e-05, 2.72634e-05, 3.94836e-05, 5.79917e-05, 7.75239e-05, 9.17518e-05, 6.77806e-05, 6.12041e-05, 5.05518e-05, 3.92544e-05, 3.03881e-05, 2.56935e-05, 2.57244e-05, 3.0515e-05, 3.95455e-05, 5.10054e-05, 6.16552e-05, 6.79733e-05, 4.09585e-05, 3.58647e-05, 3.07075e-05, 2.72891e-05, 2.57428e-05, 2.53784e-05, 2.57997e-05, 2.74051e-05, 3.08748e-05, 3.60454e-05, 4.10812e-05, 4.31817e-05, 2.31814e-05, 2.08745e-05, 2.08989e-05, 2.32603e-05, 2.57515e-05, 2.57767e-05, 2.33168e-05, 2.09521e-05, 2.09063e-05, 2.31931e-05, 2.56191e-05, 2.56172e-05, 1.51909e-05, 1.62382e-05, 2.08659e-05, 2.72571e-05, 3.04249e-05, 2.7288e-05, 2.08881e-05, 1.62277e-05, 1.51569e-05, 1.64297e-05, 1.73737e-05, 1.64598e-05, 1.51838e-05, 2.08412e-05, 3.06768e-05, 3.92843e-05, 3.92823e-05, 3.0662e-05, 2.08056e-05, 1.51367e-05, 1.3732e-05, 1.41918e-05, 1.42078e-05, 1.37723e-05, 2.32265e-05, 3.5956e-05, 5.07332e-05, 5.75853e-05, 5.06296e-05, 3.58225e-05, 2.31252e-05, 1.64447e-05, 1.42211e-05, 1.38692e-05, 1.4242e-05, 1.65e-05, 4.12571e-05, 6.16827e-05, 7.72212e-05, 7.70569e-05, 6.13316e-05, 4.09608e-05, 2.56398e-05, 1.74473e-05, 1.42779e-05, 1.42823e-05, 1.74887e-05, 2.57862e-05, 6.84855e-05, 9.19718e-05, 0.000101609, 9.14239e-05, 6.78236e-05, 4.31905e-05, 2.5698e-05, 1.65497e-05, 1.38525e-05, 1.65716e-05, 2.58421e-05, 4.36037e-05, 9.88708e-05, 0.000103874, 9.81691e-05, 8.28256e-05, 6.15396e-05, 4.0977e-05, 2.72947e-05, 2.27648e-05, 2.74383e-05, 4.13847e-05, 6.23138e-05, 8.37999e-05, 0.000103912, 0.000103509, 9.67478e-05, 8.19822e-05, 6.1124e-05, 4.16613e-05, 3.07474e-05, 3.08425e-05, 4.20181e-05, 6.18685e-05, 8.30481e-05, 9.77341e-05, 9.82092e-05, 9.67521e-05, 9.06468e-05, 7.65236e-05, 5.7328e-05, 4.16696e-05, 3.59813e-05, 4.19427e-05, 5.79567e-05, 7.74948e-05, 9.16855e-05, 9.74247e-05, 8.28789e-05, 8.19976e-05, 7.65258e-05, 6.44141e-05, 5.01504e-05, 4.10349e-05, 4.11857e-05, 5.06194e-05, 6.51737e-05, 7.73949e-05, 8.26825e-05, 8.31363e-05, 6.15958e-05, 6.11302e-05, 5.73028e-05, 5.01146e-05, 4.31576e-05, 4.04287e-05, 4.34557e-05, 5.06456e-05, 5.79151e-05, 6.16386e-05, 6.18737e-05, 6.13428e-05, 4.09852e-05, 4.16046e-05, 4.15638e-05, 4.09067e-05, 4.03309e-05, 4.04668e-05, 4.12492e-05, 4.19597e-05, 4.19134e-05, 4.1155e-05, 4.0413e-05, 4.03626e-05, 2.72162e-05, 3.05892e-05, 3.57505e-05, 4.09116e-05, 4.3206e-05, 4.11048e-05, 3.60004e-05, 3.07648e-05, 2.72865e-05, 2.57221e-05, 2.53449e-05, 2.57118e-05, 2.25935e-05, 3.05611e-05, 4.15529e-05, 5.01706e-05, 5.02358e-05, 4.16825e-05, 3.06465e-05, 2.26033e-05, 1.869e-05, 1.74698e-05, 1.7486e-05, 1.87176e-05, 2.7179e-05, 4.16129e-05, 5.74309e-05, 6.46102e-05, 5.74249e-05, 4.15782e-05, 2.71151e-05, 1.86346e-05, 1.51183e-05, 1.429e-05, 1.51572e-05, 1.86996e-05, 4.10804e-05, 6.14229e-05, 7.69694e-05, 7.68745e-05, 6.12028e-05, 4.08569e-05, 2.55658e-05, 1.74179e-05, 1.42905e-05, 1.4313e-05, 1.74965e-05, 2.57203e-05, 6.2066e-05, 8.27082e-05, 9.13211e-05, 8.2338e-05, 6.1582e-05, 4.02122e-05, 2.52532e-05, 1.74845e-05, 1.52059e-05, 1.75491e-05, 2.54369e-05, 4.05731e-05, 8.36872e-05, 9.7572e-05, 9.72614e-05, 8.29754e-05, 6.1194e-05, 4.02683e-05, 2.57056e-05, 1.87943e-05, 1.88352e-05, 2.58781e-05, 4.06858e-05, 6.1881e-05, 9.11604e-05, 9.09433e-05, 8.97738e-05, 8.27768e-05, 6.76535e-05, 5.02587e-05, 3.93946e-05, 3.95204e-05, 5.06554e-05, 6.83027e-05, 8.35192e-05, 9.03549e-05, 9.09251e-05, 9.34907e-05, 9.66706e-05, 9.08773e-05, 7.44488e-05, 5.75375e-05, 5.08561e-05, 5.79338e-05, 7.52098e-05, 9.18113e-05, 9.74707e-05, 9.39304e-05, 8.97876e-05, 9.66831e-05, 0.000100632, 9.19744e-05, 7.44687e-05, 6.1424e-05, 6.16938e-05, 7.5243e-05, 9.3048e-05, 0.000101631, 9.73214e-05, 8.99967e-05, 8.28788e-05, 9.0908e-05, 9.19405e-05, 8.14719e-05, 6.77283e-05, 6.19263e-05, 6.83383e-05, 8.25151e-05, 9.30239e-05, 9.16713e-05, 8.3231e-05, 7.86483e-05, 6.77747e-05, 7.43941e-05, 7.42783e-05, 6.75513e-05, 6.13236e-05, 6.16367e-05, 6.83729e-05, 7.52619e-05, 7.5154e-05, 6.81697e-05, 6.15483e-05, 6.14381e-05, 5.02524e-05, 5.7278e-05, 6.09839e-05, 6.14804e-05, 6.13631e-05, 6.19952e-05, 6.17372e-05, 5.79135e-05, 5.05996e-05, 4.34772e-05, 4.05653e-05, 4.33571e-05, 3.91853e-05, 5.03518e-05, 6.09775e-05, 6.76033e-05, 6.78186e-05, 6.14673e-05, 5.08104e-05, 3.94382e-05, 3.05512e-05, 2.58703e-05, 2.58594e-05, 3.04716e-05, 3.91182e-05, 5.72138e-05, 7.43163e-05, 8.15969e-05, 7.4541e-05, 5.74709e-05, 3.92547e-05, 2.59746e-05, 1.88019e-05, 1.66394e-05, 1.88158e-05, 2.59525e-05, 5.01373e-05, 7.44284e-05, 9.21485e-05, 9.21714e-05, 7.44557e-05, 5.01126e-05, 3.02846e-05, 1.87074e-05, 1.38806e-05, 1.39013e-05, 1.87651e-05, 3.03507e-05, 6.7845e-05, 9.12321e-05, 0.000101032, 9.10848e-05, 6.76191e-05, 4.3037e-05, 2.56028e-05, 1.65294e-05, 1.38838e-05, 1.65946e-05, 2.57473e-05, 4.32516e-05, 8.32788e-05, 9.72228e-05, 9.707e-05, 8.29066e-05, 6.11549e-05, 4.02184e-05, 2.56613e-05, 1.877e-05, 1.8817e-05, 2.58228e-05, 4.05219e-05, 6.15633e-05, 9.03046e-05, 9.39009e-05, 8.99376e-05, 7.84724e-05, 6.11747e-05, 4.31508e-05, 3.04285e-05, 2.60745e-05, 3.05872e-05, 4.35037e-05, 6.17051e-05, 7.90354e-05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8.66315e-05, 9.09147e-05, 9.80789e-05, 9.62719e-05, 8.16601e-05, 6.46465e-05, 5.76473e-05, 6.49856e-05, 8.21971e-05, 9.67325e-05, 9.82952e-05, 9.0959e-05, 9.08927e-05, 0.00010338, 0.000114993, 0.000110547, 9.21777e-05, 7.69547e-05, 7.72459e-05, 9.29467e-05, 0.00011143, 0.000115579, 0.000103597, 9.09296e-05, 9.81232e-05, 0.000115019, 0.000122424, 0.000110462, 9.1113e-05, 8.25959e-05, 9.18814e-05, 0.000111692, 0.000123525, 0.000115612, 9.83101e-05, 8.99962e-05, 9.64209e-05, 0.000110552, 0.000110364, 9.608e-05, 8.30589e-05, 8.35155e-05, 9.72855e-05, 0.000111778, 0.000111559, 9.68681e-05, 8.32914e-05, 8.31867e-05, 8.17714e-05, 9.19845e-05, 9.07261e-05, 8.27473e-05, 7.87765e-05, 8.35966e-05, 9.204e-05, 9.31491e-05, 8.24251e-05, 6.82798e-05, 6.20687e-05, 6.80504e-05, 6.45286e-05, 7.64225e-05, 8.18102e-05, 8.27806e-05, 8.31736e-05, 8.277e-05, 7.74392e-05, 6.51948e-05, 5.07146e-05, 4.14032e-05, 4.13397e-05, 5.04347e-05, 5.72298e-05, 7.63501e-05, 9.06972e-05, 9.61543e-05, 9.12456e-05, 7.70782e-05, 5.77594e-05, 3.95237e-05, 2.74913e-05, 2.34588e-05, 2.74303e-05, 3.92884e-05, 6.43143e-05, 9.18085e-05, 0.000110324, 0.000110512, 9.22118e-05, 6.46467e-05, 3.93067e-05, 2.27347e-05, 1.53387e-05, 1.53446e-05, 2.27166e-05, 3.9166e-05, 8.14631e-05, 0.000110395, 0.000122401, 0.000110528, 8.15905e-05, 5.01413e-05, 2.71865e-05, 1.52331e-05, 1.1814e-05, 1.52729e-05, 2.72298e-05, 5.01151e-05, 9.62219e-05, 0.000114984, 0.000114996, 9.62192e-05, 6.76351e-05, 4.08854e-05, 2.315e-05, 1.52157e-05, 1.52495e-05, 2.32447e-05, 4.10012e-05, 6.77049e-05, 9.81136e-05, 0.000103432, 9.80894e-05, 8.29136e-05, 6.15804e-05, 4.09188e-05, 2.71988e-05, 2.2668e-05, 2.73037e-05, 4.11003e-05, 6.1757e-05, 8.30106e-05, 9.09542e-05, 9.09475e-05, 8.99288e-05, 8.29392e-05, 6.77091e-05, 5.02049e-05, 3.92862e-05, 3.9382e-05, 5.04639e-05, 6.80162e-05, 8.31456e-05, 8.99978e-05, 9.10625e-05, 0.000103726, 0.000115364, 0.000110745, 9.21347e-05, 7.67423e-05, 7.69412e-05, 9.25849e-05, 0.000111041, 0.00011522, 0.000103358, 9.08829e-05, 0.000103699, 0.000124502, 0.000134882, 0.000122511, 0.000100862, 9.11519e-05, 0.000101494, 0.000123389, 0.0001354, 0.000124479, 0.000103512, 9.38161e-05, 0.000115398, 0.000134894, 0.000134608, 0.000114866, 9.70069e-05, 9.74638e-05, 0.000116037, 0.000135856, 0.000135582, 0.000115535, 9.72462e-05, 9.72638e-05, 0.000110852, 0.000122456, 0.00011472, 9.7905e-05, 9.01691e-05, 9.88684e-05, 0.000116222, 0.000123749, 0.000111506, 9.16742e-05, 8.26748e-05, 9.14892e-05, 9.21528e-05, 0.000100549, 9.65096e-05, 8.97903e-05, 9.02746e-05, 9.77465e-05, 0.000101942, 9.31185e-05, 7.5218e-05, 6.17737e-05, 6.16726e-05, 7.47919e-05, 7.6493e-05, 9.04358e-05, 9.64803e-05, 9.79785e-05, 9.72538e-05, 9.15559e-05, 7.7423e-05, 5.79898e-05, 4.20909e-05, 3.6208e-05, 4.1915e-05, 5.7488e-05, 7.63532e-05, 0.000100344, 0.000114586, 0.000114905, 0.000101081, 7.70692e-05, 5.08705e-05, 3.09068e-05, 2.10605e-05, 2.10244e-05, 3.0741e-05, 5.04433e-05, 9.17285e-05, 0.000122015, 0.000134293, 0.000122399, 9.22064e-05, 5.75138e-05, 3.07395e-05, 1.63193e-05, 1.21562e-05, 1.62963e-05, 3.06224e-05, 5.72019e-05, 0.000110202, 0.000134277, 0.000134429, 0.000110521, 7.44905e-05, 4.16369e-05, 2.08379e-05, 1.20808e-05, 1.20892e-05, 2.08398e-05, 4.15521e-05, 7.42453e-05, 0.000114718, 0.000123921, 0.000114978, 9.11128e-05, 6.12455e-05, 3.58052e-05, 2.07913e-05, 1.6198e-05, 2.0826e-05, 3.58136e-05, 6.1114e-05, 9.08227e-05, 0.000103217, 0.000103393, 9.70718e-05, 8.23598e-05, 6.12709e-05, 4.15819e-05, 3.05696e-05, 3.06119e-05, 4.16583e-05, 6.12284e-05, 8.20838e-05, 9.66963e-05, 9.0895e-05, 9.38527e-05, 9.7217e-05, 9.12803e-05, 7.45217e-05, 5.73454e-05, 5.05284e-05, 5.75131e-05, 7.46702e-05, 9.11502e-05, 9.68149e-05, 9.35056e-05, 9.86088e-05, 0.000115746, 0.000123047, 0.000110662, 9.08731e-05, 8.20784e-05, 9.12165e-05, 0.000110974, 0.000122854, 0.000115104, 9.80787e-05, 9.0114e-05, 0.000115675, 0.000135254, 0.000134856, 0.000114877, 9.6809e-05, 9.71345e-05, 0.000115643, 0.000135466, 0.000135258, 0.000115323, 9.71786e-05, 9.73658e-05, 0.000123004, 0.000134851, 0.000123983, 0.000103235, 9.38218e-05, 0.000104024, 0.000125148, 0.000135708, 0.00012326, 0.000101352, 9.13441e-05, 0.000101391, 0.000110691, 0.000114817, 0.000103105, 9.08721e-05, 9.13109e-05, 0.000104243, 0.000116106, 0.000111556, 9.28199e-05, 7.71883e-05, 7.71169e-05, 9.24724e-05, 9.08432e-05, 9.65127e-05, 9.3351e-05, 9.09411e-05, 9.41105e-05, 9.76826e-05, 9.18949e-05, 7.51509e-05, 5.78519e-05, 5.08472e-05, 5.76124e-05, 7.45295e-05, 8.18087e-05, 9.64201e-05, 0.000103039, 0.000103371, 9.72366e-05, 8.26992e-05, 6.17001e-05, 4.19793e-05, 3.08608e-05, 3.07771e-05, 4.16703e-05, 6.10686e-05, 9.05927e-05, 0.000114455, 0.000123711, 0.000114913, 9.12288e-05, 6.14837e-05, 3.60544e-05, 2.09781e-05, 1.63149e-05, 2.0877e-05, 3.57782e-05, 6.09735e-05, 0.00011007, 0.000134092, 0.00013429, 0.000110516, 7.45996e-05, 4.17628e-05, 2.0916e-05, 1.21116e-05, 1.20928e-05, 2.08279e-05, 4.15268e-05, 7.41846e-05, 0.000122013, 0.000134236, 0.00012238, 9.22471e-05, 5.75396e-05, 3.06965e-05, 1.62295e-05, 1.20562e-05, 1.62114e-05, 3.05946e-05, 5.72527e-05, 9.17952e-05, 0.000114645, 0.000114906, 0.000101072, 7.70036e-05, 5.06837e-05, 3.06257e-05, 2.07652e-05, 2.07706e-05, 3.05921e-05, 5.04672e-05, 7.65127e-05, 0.000100497, 9.79813e-05, 9.71754e-05, 9.13883e-05, 7.70917e-05, 5.74829e-05, 4.15163e-05, 3.5689e-05, 4.15507e-05, 5.73792e-05, 7.66351e-05, 9.06575e-05, 9.6609e-05, 9.01531e-05, 9.74872e-05, 0.000101497, 9.24498e-05, 7.4417e-05, 6.1016e-05, 6.11031e-05, 7.45354e-05, 9.22485e-05, 0.000100825, 9.67183e-05, 8.98237e-05, 9.70439e-05, 0.000111373, 0.000110949, 9.6141e-05, 8.26513e-05, 8.2828e-05, 9.64851e-05, 0.000111005, 0.000110909, 9.64198e-05, 8.31339e-05, 8.34063e-05, 0.00011125, 0.000122972, 0.000115049, 9.78899e-05, 8.98577e-05, 9.83733e-05, 0.000115662, 0.000123223, 0.00011106, 9.13499e-05, 8.25301e-05, 9.16015e-05, 0.000110873, 0.000115079, 0.000103295, 9.09156e-05, 9.12219e-05, 0.000104067, 0.000115891, 0.000111329, 9.25933e-05, 7.69896e-05, 7.69919e-05, 9.24861e-05, 9.62096e-05, 9.79348e-05, 9.08532e-05, 8.68193e-05, 9.14106e-05, 9.88162e-05, 9.70291e-05, 8.21707e-05, 6.48022e-05, 5.74967e-05, 6.46006e-05, 8.16677e-05, 8.27285e-05, 8.97089e-05, 9.08592e-05, 9.11012e-05, 9.03402e-05, 8.34976e-05, 6.81965e-05, 5.04528e-05, 3.92763e-05, 3.91643e-05, 5.00872e-05, 6.7563e-05, 8.26795e-05, 9.77956e-05, 0.000103231, 9.81339e-05, 8.32174e-05, 6.19824e-05, 4.12142e-05, 2.73047e-05, 2.26135e-05, 2.71286e-05, 4.08386e-05, 6.14486e-05, 9.59406e-05, 0.000114618, 0.000114753, 9.62806e-05, 6.79378e-05, 4.1199e-05, 2.33236e-05, 1.5252e-05, 1.52008e-05, 2.31512e-05, 4.08887e-05, 6.75437e-05, 0.000110162, 0.000122095, 0.000110427, 8.1786e-05, 5.04425e-05, 2.7384e-05, 1.52882e-05, 1.17868e-05, 1.52259e-05, 2.72217e-05, 5.01501e-05, 8.14217e-05, 0.000110171, 0.000110381, 9.23009e-05, 6.48822e-05, 3.94723e-05, 2.27382e-05, 1.52357e-05, 1.52209e-05, 2.26608e-05, 3.9245e-05, 6.44599e-05, 9.18325e-05, 9.60882e-05, 9.12524e-05, 7.71975e-05, 5.783e-05, 3.94015e-05, 2.72061e-05, 2.3132e-05, 2.71885e-05, 3.92488e-05, 5.7394e-05, 7.6538e-05, 9.07352e-05, 8.31423e-05, 8.27667e-05, 7.73851e-05, 6.49244e-05, 5.02015e-05, 4.07957e-05, 4.08228e-05, 5.01773e-05, 6.46006e-05, 7.66708e-05, 8.19889e-05, 8.28063e-05, 8.351e-05, 9.18762e-05, 9.27842e-05, 8.17859e-05, 6.74954e-05, 6.13638e-05, 6.76291e-05, 8.17634e-05, 9.22907e-05, 9.10499e-05, 8.2893e-05, 7.87633e-05, 8.22845e-05, 9.26847e-05, 9.12144e-05, 8.27857e-05, 7.84197e-05, 8.30327e-05, 9.14516e-05, 9.26237e-05, 8.19596e-05, 6.79007e-05, 6.1875e-05, 6.81775e-05, 9.25758e-05, 0.000101185, 9.70021e-05, 8.99366e-05, 9.01045e-05, 9.73948e-05, 0.000101531, 9.26834e-05, 7.47584e-05, 6.13447e-05, 6.13878e-05, 7.48148e-05, 9.12463e-05, 9.71231e-05, 9.38848e-05, 9.12407e-05, 9.41781e-05, 9.75881e-05, 9.16881e-05, 7.48419e-05, 5.7471e-05, 5.04669e-05, 5.73494e-05, 7.45571e-05, 8.30462e-05, 9.01466e-05, 9.12548e-05, 9.13636e-05, 9.04619e-05, 8.35056e-05, 6.81103e-05, 5.02898e-05, 3.90701e-05, 3.89621e-05, 4.99712e-05, 6.76468e-05, 7.87096e-05, 9.01314e-05, 9.39381e-05, 9.02487e-05, 7.89855e-05, 6.16451e-05, 4.33445e-05, 3.03036e-05, 2.57187e-05, 3.00893e-05, 4.29654e-05, 6.12437e-05, 8.30418e-05, 9.69825e-05, 9.70005e-05, 8.31464e-05, 6.15897e-05, 4.05753e-05, 2.57775e-05, 1.86681e-05, 1.85836e-05, 2.55398e-05, 4.02655e-05, 6.13465e-05, 9.10055e-05, 0.000100754, 9.10671e-05, 6.79587e-05, 4.34987e-05, 2.59205e-05, 1.66363e-05, 1.38535e-05, 1.65236e-05, 2.57164e-05, 4.32738e-05, 6.78025e-05, 9.19257e-05, 9.20109e-05, 7.46441e-05, 5.05682e-05, 3.07125e-05, 1.89433e-05, 1.39541e-05, 1.39193e-05, 1.88334e-05, 3.05237e-05, 5.03287e-05, 7.44332e-05, 8.14516e-05, 7.45834e-05, 5.77995e-05, 3.96636e-05, 2.62384e-05, 1.88778e-05, 1.66231e-05, 1.88389e-05, 2.61124e-05, 3.93938e-05, 5.74216e-05, 7.42891e-05, 6.77926e-05, 6.16252e-05, 5.10875e-05, 3.96217e-05, 3.05258e-05, 2.57025e-05, 2.57087e-05, 3.04867e-05, 3.94057e-05, 5.06384e-05, 6.11214e-05, 6.75672e-05, 6.2032e-05, 6.18509e-05, 5.7959e-05, 5.0422e-05, 4.31037e-05, 4.01778e-05, 4.31602e-05, 5.03564e-05, 5.75883e-05, 6.12602e-05, 6.15802e-05, 6.13561e-05, 6.83476e-05, 7.51764e-05, 7.4874e-05, 6.76828e-05, 6.10298e-05, 6.11205e-05, 6.78221e-05, 7.47707e-05, 7.47225e-05, 6.78187e-05, 6.13909e-05, 6.16175e-05, 6.49475e-05, 7.71121e-05, 8.24083e-05, 8.30366e-05, 8.31129e-05, 8.25739e-05, 7.7234e-05, 6.49567e-05, 5.03879e-05, 4.10331e-05, 4.10612e-05, 5.04396e-05, 7.70957e-05, 9.14035e-05, 9.73825e-05, 9.85284e-05, 9.74498e-05, 9.15351e-05, 7.72624e-05, 5.76772e-05, 4.16493e-05, 3.57341e-05, 4.15708e-05, 5.75321e-05, 8.26488e-05, 9.76155e-05, 0.000104145, 0.000104111, 9.75948e-05, 8.27723e-05, 6.15499e-05, 4.16476e-05, 3.04253e-05, 3.03385e-05, 4.14154e-05, 6.1294e-05, 8.35514e-05, 9.8889e-05, 0.000104179, 9.87406e-05, 8.3493e-05, 6.20129e-05, 4.10672e-05, 2.70415e-05, 2.22969e-05, 2.68416e-05, 4.07661e-05, 6.18285e-05, 8.35898e-05, 9.75861e-05, 9.74652e-05, 8.34022e-05, 6.16766e-05, 4.05523e-05, 2.56833e-05, 1.85309e-05, 1.84314e-05, 2.54294e-05, 4.0311e-05, 6.16564e-05, 8.26492e-05, 9.12597e-05, 8.24936e-05, 6.20034e-05, 4.06795e-05, 2.55347e-05, 1.75263e-05, 1.50827e-05, 1.73701e-05, 2.53089e-05, 4.05503e-05, 6.20796e-05, 7.68583e-05, 7.68225e-05, 6.14728e-05, 4.13775e-05, 2.60689e-05, 1.77413e-05, 1.44374e-05, 1.43766e-05, 1.75885e-05, 2.59044e-05, 4.12989e-05, 6.15025e-05, 6.44773e-05, 5.74994e-05, 4.19809e-05, 2.76546e-05, 1.90951e-05, 1.54279e-05, 1.44949e-05, 1.53584e-05, 1.89736e-05, 2.75083e-05, 4.18481e-05, 5.74213e-05, 5.01703e-05, 4.18752e-05, 3.10545e-05, 2.30333e-05, 1.90133e-05, 1.76812e-05, 1.76712e-05, 1.89671e-05, 2.29162e-05, 3.08536e-05, 4.16559e-05, 5.00711e-05, 4.11303e-05, 3.62105e-05, 3.10493e-05, 2.74991e-05, 2.58147e-05, 2.53952e-05, 2.58421e-05, 2.74706e-05, 3.08843e-05, 3.59338e-05, 4.09044e-05, 4.31158e-05, 4.13046e-05, 4.20702e-05, 4.19578e-05, 4.10662e-05, 4.02676e-05, 4.03219e-05, 4.11503e-05, 4.19168e-05, 4.18474e-05, 4.10286e-05, 4.03121e-05, 4.04362e-05, 5.06155e-05, 5.78195e-05, 6.14178e-05, 6.16009e-05, 6.12021e-05, 6.17371e-05, 6.15333e-05, 5.77652e-05, 5.04226e-05, 4.32609e-05, 4.04148e-05, 4.34225e-05, 5.77798e-05, 7.72948e-05, 9.16478e-05, 9.68003e-05, 9.15823e-05, 7.72554e-05, 5.78285e-05, 3.94314e-05, 2.72343e-05, 2.31223e-05, 2.71654e-05, 3.93339e-05, 7.74068e-05, 0.000101898, 0.000116062, 0.000115909, 0.000101612, 7.72829e-05, 5.08421e-05, 3.06689e-05, 2.06925e-05, 2.06279e-05, 3.05115e-05, 5.07401e-05, 9.21128e-05, 0.000116377, 0.000125366, 0.00011595, 9.17101e-05, 6.15932e-05, 3.59107e-05, 2.06756e-05, 1.59389e-05, 2.0525e-05, 3.5726e-05, 6.16438e-05, 9.74988e-05, 0.000116313, 0.000116027, 9.69596e-05, 6.81692e-05, 4.11633e-05, 2.31286e-05, 1.49687e-05, 1.48825e-05, 2.29218e-05, 4.10572e-05, 6.84367e-05, 9.20802e-05, 0.000101741, 9.16746e-05, 6.81956e-05, 4.35156e-05, 2.58227e-05, 1.64668e-05, 1.36375e-05, 1.63075e-05, 2.56284e-05, 4.35347e-05, 6.85541e-05, 7.72705e-05, 7.7123e-05, 6.15996e-05, 4.13877e-05, 2.60284e-05, 1.76731e-05, 1.43428e-05, 1.42652e-05, 1.74952e-05, 2.58975e-05, 4.14622e-05, 6.18523e-05, 5.75279e-05, 5.07174e-05, 3.61735e-05, 2.36056e-05, 1.68891e-05, 1.45581e-05, 1.4109e-05, 1.44531e-05, 1.67507e-05, 2.35227e-05, 3.61985e-05, 5.07917e-05, 3.91872e-05, 3.08038e-05, 2.11666e-05, 1.55788e-05, 1.41619e-05, 1.45681e-05, 1.45369e-05, 1.40857e-05, 1.54883e-05, 2.10848e-05, 3.07489e-05, 3.91687e-05, 2.72264e-05, 2.10397e-05, 1.65208e-05, 1.55025e-05, 1.6772e-05, 1.76936e-05, 1.67648e-05, 1.54707e-05, 1.645e-05, 2.09366e-05, 2.71418e-05, 3.02326e-05, 2.32956e-05, 2.1059e-05, 2.10776e-05, 2.33751e-05, 2.58035e-05, 2.58309e-05, 2.34196e-05, 2.10754e-05, 2.09872e-05, 2.31931e-05, 2.55736e-05, 2.56236e-05, 2.73827e-05, 3.08702e-05, 3.60198e-05, 4.10563e-05, 4.32377e-05, 4.11373e-05, 3.60995e-05, 3.08798e-05, 2.73288e-05, 2.56661e-05, 2.5263e-05, 2.57218e-05, 3.94508e-05, 5.08438e-05, 6.14704e-05, 6.79e-05, 6.79318e-05, 6.15421e-05, 5.09093e-05, 3.94843e-05, 3.04645e-05, 2.56761e-05, 2.56761e-05, 3.04564e-05, 6.52222e-05, 9.31688e-05, 0.000111636, 0.000111425, 9.2753e-05, 6.49667e-05, 3.94435e-05, 2.26826e-05, 1.51484e-05, 1.51041e-05, 2.2589e-05, 3.94452e-05, 9.33948e-05, 0.000124096, 0.000136044, 0.000123469, 9.27346e-05, 5.77223e-05, 3.07242e-05, 1.61471e-05, 1.19035e-05, 1.60543e-05, 3.06628e-05, 5.79738e-05, 0.000112212, 0.000136339, 0.000135894, 0.000111322, 7.48849e-05, 4.1779e-05, 2.07744e-05, 1.1882e-05, 1.18255e-05, 2.06603e-05, 4.18626e-05, 7.5471e-05, 0.000112074, 0.000123758, 0.000111372, 8.21087e-05, 5.04538e-05, 2.72637e-05, 1.50915e-05, 1.15391e-05, 1.49784e-05, 2.71819e-05, 5.07176e-05, 8.28354e-05, 9.307e-05, 9.27877e-05, 7.49227e-05, 5.05485e-05, 3.05949e-05, 1.87884e-05, 1.37574e-05, 1.36897e-05, 1.86474e-05, 3.05757e-05, 5.08626e-05, 7.54648e-05, 6.48895e-05, 5.76686e-05, 4.19476e-05, 2.75511e-05, 1.89862e-05, 1.53073e-05, 1.43451e-05, 1.51961e-05, 1.88645e-05, 2.75582e-05, 4.21444e-05, 5.78959e-05, 3.92476e-05, 3.07863e-05, 2.11113e-05, 1.55225e-05, 1.41105e-05, 1.45101e-05, 1.44644e-05, 1.4012e-05, 1.54413e-05, 2.10959e-05, 3.08332e-05, 3.92814e-05, 2.26021e-05, 1.63542e-05, 1.229e-05, 1.20133e-05, 1.40781e-05, 1.53785e-05, 1.4039e-05, 1.19589e-05, 1.22382e-05, 1.63119e-05, 2.25774e-05, 2.5808e-05, 1.52094e-05, 1.21802e-05, 1.22407e-05, 1.5401e-05, 1.8899e-05, 1.89012e-05, 1.5399e-05, 1.2223e-05, 1.21438e-05, 1.51644e-05, 1.85676e-05, 1.85896e-05, 1.52398e-05, 1.63343e-05, 2.09774e-05, 2.73458e-05, 3.04931e-05, 2.7377e-05, 2.10069e-05, 1.63399e-05, 1.52233e-05, 1.64325e-05, 1.73414e-05, 1.64524e-05, 2.27119e-05, 3.08084e-05, 4.1839e-05, 5.03939e-05, 5.03993e-05, 4.18553e-05, 3.08334e-05, 2.27394e-05, 1.87217e-05, 1.74032e-05, 1.7395e-05, 1.87e-05, 3.9473e-05, 5.78585e-05, 7.50136e-05, 8.21248e-05, 7.48959e-05, 5.77519e-05, 3.94655e-05, 2.60477e-05, 1.872e-05, 1.64648e-05, 1.86663e-05, 2.59866e-05, 8.274e-05, 0.000111934, 0.000123649, 0.000111273, 8.19958e-05, 5.03803e-05, 2.72889e-05, 1.52058e-05, 1.17051e-05, 1.51698e-05, 2.73422e-05, 5.07587e-05, 0.000112183, 0.000136224, 0.000135711, 0.00011111, 7.47221e-05, 4.17285e-05, 2.08256e-05, 1.19863e-05, 1.19623e-05, 2.08233e-05, 4.20087e-05, 7.55399e-05, 0.000124105, 0.000135882, 0.000123172, 9.24287e-05, 5.75187e-05, 3.06388e-05, 1.61334e-05, 1.19226e-05, 1.60989e-05, 3.07427e-05, 5.80895e-05, 9.35031e-05, 0.000111651, 0.000111226, 9.24521e-05, 6.47158e-05, 3.92962e-05, 2.26038e-05, 1.50962e-05, 1.50656e-05, 2.25841e-05, 3.95216e-05, 6.53944e-05, 9.33412e-05, 8.20948e-05, 7.47278e-05, 5.75916e-05, 3.93971e-05, 2.60478e-05, 1.87349e-05, 1.64714e-05, 1.86803e-05, 2.60535e-05, 3.96345e-05, 5.80816e-05, 7.51661e-05, 5.02855e-05, 4.17464e-05, 3.08259e-05, 2.28389e-05, 1.88796e-05, 1.75667e-05, 1.75349e-05, 1.88242e-05, 2.28453e-05, 3.09536e-05, 4.19441e-05, 5.03856e-05, 2.71912e-05, 2.09263e-05, 1.63945e-05, 1.54023e-05, 1.66987e-05, 1.76173e-05, 1.66629e-05, 1.53631e-05, 1.63793e-05, 2.09409e-05, 2.72145e-05, 3.02911e-05, 1.51842e-05, 1.21341e-05, 1.21909e-05, 1.536e-05, 1.88659e-05, 1.88591e-05, 1.53418e-05, 1.21654e-05, 1.21027e-05, 1.51522e-05, 1.85791e-05, 1.85939e-05, 1.17376e-05, 1.21133e-05, 1.6317e-05, 2.27416e-05, 2.60473e-05, 2.27428e-05, 1.63092e-05, 1.20924e-05, 1.17064e-05, 1.3702e-05, 1.50036e-05, 1.37289e-05, 1.5212e-05, 2.09085e-05, 3.07643e-05, 3.93634e-05, 3.9352e-05, 3.0739e-05, 2.08845e-05, 1.51956e-05, 1.37543e-05, 1.41772e-05, 1.41809e-05, 1.37643e-05, 2.73363e-05, 4.19078e-05, 5.77671e-05, 6.48861e-05, 5.76386e-05, 4.17696e-05, 2.7273e-05, 1.8719e-05, 1.51138e-05, 1.42242e-05, 1.50954e-05, 1.87175e-05, 5.06903e-05, 7.52521e-05, 9.29473e-05, 9.27405e-05, 7.48309e-05, 5.03866e-05, 3.04557e-05, 1.87461e-05, 1.38084e-05, 1.37863e-05, 1.87195e-05, 3.05405e-05, 9.74791e-05, 0.000116125, 0.000115674, 9.64934e-05, 6.77646e-05, 4.10003e-05, 2.32287e-05, 1.52361e-05, 1.52469e-05, 2.33341e-05, 4.14093e-05, 6.86136e-05, 0.00011628, 0.000124984, 0.000115344, 9.1085e-05, 6.11957e-05, 3.58356e-05, 2.08342e-05, 1.62223e-05, 2.08966e-05, 3.61378e-05, 6.19845e-05, 9.22705e-05, 0.000115881, 0.000115394, 0.000100902, 7.66513e-05, 5.04919e-05, 3.06011e-05, 2.07947e-05, 2.08239e-05, 3.07759e-05, 5.10382e-05, 7.76673e-05, 0.000102004, 9.66212e-05, 9.1107e-05, 7.66648e-05, 5.73593e-05, 3.91909e-05, 2.7176e-05, 2.31618e-05, 2.72597e-05, 3.9482e-05, 5.79912e-05, 7.75237e-05, 9.17513e-05, 6.77797e-05, 6.12023e-05, 5.05485e-05, 3.92491e-05, 3.03813e-05, 2.56868e-05, 2.57194e-05, 3.05122e-05, 3.95444e-05, 5.1005e-05, 6.16549e-05, 6.79727e-05, 4.09564e-05, 3.58595e-05, 3.07001e-05, 2.72819e-05, 2.57373e-05, 2.53745e-05, 2.57973e-05, 2.74039e-05, 3.08744e-05, 3.60453e-05, 4.10811e-05, 4.31813e-05, 2.31768e-05, 2.08653e-05, 2.08896e-05, 2.32549e-05, 2.57491e-05, 2.57757e-05, 2.33163e-05, 2.09519e-05, 2.09061e-05, 2.31925e-05, 2.56188e-05, 2.56165e-05, 1.51848e-05, 1.62293e-05, 2.086e-05, 2.72552e-05, 3.04246e-05, 2.72879e-05, 2.08881e-05, 1.62269e-05, 1.51542e-05, 1.64262e-05, 1.73724e-05, 1.64586e-05, 1.51795e-05, 2.08373e-05, 3.06754e-05, 3.92841e-05, 3.92821e-05, 3.06618e-05, 2.0805e-05, 1.51334e-05, 1.37253e-05, 1.41862e-05, 1.42066e-05, 1.37711e-05, 2.32254e-05, 3.59556e-05, 5.07331e-05, 5.75851e-05, 5.06292e-05, 3.58222e-05, 2.31241e-05, 1.64402e-05, 1.42145e-05, 1.38656e-05, 1.42416e-05, 1.64995e-05, 4.1257e-05, 6.16825e-05, 7.72211e-05, 7.70566e-05, 6.1331e-05, 4.09606e-05, 2.56393e-05, 1.74452e-05, 1.42756e-05, 1.42815e-05, 1.74886e-05, 2.57862e-05, 6.84849e-05, 9.19716e-05, 0.000101609, 9.14228e-05, 6.78223e-05, 4.319e-05, 2.56978e-05, 1.65496e-05, 1.38525e-05, 1.65716e-05, 2.5842e-05, 4.36033e-05, 9.88706e-05, 0.000103874, 9.81678e-05, 8.28242e-05, 6.15387e-05, 4.09762e-05, 2.7294e-05, 2.27644e-05, 2.74382e-05, 4.13846e-05, 6.23133e-05, 8.37993e-05, 0.000103912, 0.000103508, 9.67468e-05, 8.19811e-05, 6.11222e-05, 4.16585e-05, 3.07446e-05, 3.08408e-05, 4.20176e-05, 6.18682e-05, 8.30477e-05, 9.77339e-05, 9.82087e-05, 9.67515e-05, 9.0646e-05, 7.65218e-05, 5.73244e-05, 4.16647e-05, 3.5977e-05, 4.19404e-05, 5.79558e-05, 7.74944e-05, 9.16853e-05, 9.74244e-05, 8.28781e-05, 8.19966e-05, 7.65239e-05, 6.44104e-05, 5.01449e-05, 4.10289e-05, 4.11812e-05, 5.06168e-05, 6.51726e-05, 7.73944e-05, 8.26822e-05, 8.31357e-05, 6.15942e-05, 6.11273e-05, 5.72985e-05, 5.01091e-05, 4.31518e-05, 4.04236e-05, 4.3452e-05, 5.06437e-05, 5.79142e-05, 6.16383e-05, 6.18734e-05, 6.13421e-05, 4.09818e-05, 4.15985e-05, 4.15572e-05, 4.09014e-05, 4.0327e-05, 4.04638e-05, 4.12472e-05, 4.19588e-05, 4.1913e-05, 4.11548e-05, 4.04129e-05, 4.03618e-05, 2.72111e-05, 3.05815e-05, 3.57446e-05, 4.09086e-05, 4.32044e-05, 4.11038e-05, 3.59997e-05, 3.07639e-05, 2.72845e-05, 2.572e-05, 2.53444e-05, 2.57109e-05, 2.2589e-05, 3.05561e-05, 4.15504e-05, 5.01698e-05, 5.02356e-05, 4.16823e-05, 3.06455e-05, 2.25988e-05, 1.86818e-05, 1.74636e-05, 1.7485e-05, 1.87168e-05, 2.71773e-05, 4.16117e-05, 5.74306e-05, 6.46101e-05, 5.74248e-05, 4.15777e-05, 2.71114e-05, 1.86239e-05, 1.51043e-05, 1.42819e-05, 1.51561e-05, 1.86992e-05, 4.10803e-05, 6.14228e-05, 7.69694e-05, 7.68745e-05, 6.12028e-05, 4.0856e-05, 2.55604e-05, 1.74061e-05, 1.42788e-05, 1.43076e-05, 1.74957e-05, 2.57203e-05, 6.20656e-05, 8.27079e-05, 9.13211e-05, 8.23376e-05, 6.15819e-05, 4.02118e-05, 2.52499e-05, 1.74787e-05, 1.52014e-05, 1.75472e-05, 2.54363e-05, 4.05728e-05, 8.36866e-05, 9.75719e-05, 9.72608e-05, 8.29743e-05, 6.11935e-05, 4.02683e-05, 2.57052e-05, 1.87937e-05, 1.88347e-05, 2.58778e-05, 4.06853e-05, 6.18802e-05, 9.11601e-05, 9.09426e-05, 8.97729e-05, 8.27763e-05, 6.76532e-05, 5.02583e-05, 3.93943e-05, 3.95204e-05, 5.06554e-05, 6.83026e-05, 8.35189e-05, 9.03547e-05, 9.09245e-05, 9.34901e-05, 9.667e-05, 9.08764e-05, 7.44473e-05, 5.75357e-05, 5.08546e-05, 5.79332e-05, 7.52097e-05, 9.18112e-05, 9.74706e-05, 9.39301e-05, 8.97869e-05, 9.66823e-05, 0.000100631, 9.19722e-05, 7.44656e-05, 6.14208e-05, 6.16916e-05, 7.5242e-05, 9.30476e-05, 0.000101631, 9.7321e-05, 8.99961e-05, 8.28777e-05, 9.09063e-05, 9.1938e-05, 8.14685e-05, 6.77245e-05, 6.19228e-05, 6.8336e-05, 8.25139e-05, 9.30233e-05, 9.16709e-05, 8.32304e-05, 7.86475e-05, 6.77727e-05, 7.43911e-05, 7.42748e-05, 6.75477e-05, 6.13202e-05, 6.16339e-05, 6.83709e-05, 7.52609e-05, 7.51536e-05, 6.81695e-05, 6.15479e-05, 6.14371e-05, 5.02493e-05, 5.72736e-05, 6.09801e-05, 6.14777e-05, 6.13608e-05, 6.19933e-05, 6.1736e-05, 5.7913e-05, 5.05991e-05, 4.34769e-05, 4.05652e-05, 4.33561e-05, 3.91816e-05, 5.03478e-05, 6.09751e-05, 6.7602e-05, 6.78175e-05, 6.14664e-05, 5.08095e-05, 3.94358e-05, 3.05471e-05, 2.58674e-05, 2.58591e-05, 3.04706e-05, 3.9116e-05, 5.72121e-05, 7.43156e-05, 8.15964e-05, 7.45406e-05, 5.74702e-05, 3.92512e-05, 2.59651e-05, 1.87897e-05, 1.66323e-05, 1.88148e-05, 2.59517e-05, 5.0137e-05, 7.44282e-05, 9.21484e-05, 9.21712e-05, 7.44555e-05, 5.01106e-05, 3.02757e-05, 1.86899e-05, 1.38632e-05, 1.38928e-05, 1.87636e-05, 3.03505e-05, 6.78448e-05, 9.12319e-05, 0.000101032, 9.10847e-05, 6.76189e-05, 4.30339e-05, 2.55919e-05, 1.65129e-05, 1.38705e-05, 1.65889e-05, 2.57461e-05, 4.32515e-05, 8.32783e-05, 9.72226e-05, 9.70697e-05, 8.29063e-05, 6.11548e-05, 4.02162e-05, 2.56549e-05, 1.87621e-05, 1.88117e-05, 2.58205e-05, 4.0521e-05, 6.15628e-05, 9.03043e-05, 9.39006e-05, 8.99368e-05, 7.84719e-05, 6.11747e-05, 4.31503e-05, 3.04273e-05, 2.60732e-05, 3.05863e-05, 4.35031e-05, 6.17045e-05, 7.90349e-05 - }; + std::vector> wfcr_another_spin_2 + = {{-0.000850659, 0.00221376}, {-0.000824667, 0.00233258}, {-0.00025408, 0.00206122}, + {0.000478631, 0.00162836}, {0.000857409, 0.00122164}, {0.000690617, 0.000865747}, + {0.000252532, 0.000500086}, {-1.97358e-05, 0.000150978}, {3.69117e-05, -3.74248e-06}, + {0.000177712, 0.000233336}, {4.52095e-05, 0.00087035}, {-0.000415234, 0.00165232}, + {5.94142e-05, 0.00267949}, {0.00105166, 0.00268062}, {0.00175924, 0.00262548}, + {0.00167774, 0.00273249}, {0.000846263, 0.00287114}, {-0.0001803, 0.00269879}, + {-0.000812061, 0.00205795}, {-0.000897011, 0.00122219}, {-0.000744479, 0.000720935}, + {-0.000710161, 0.000892154}, {-0.000785981, 0.00158813}, {-0.00061953, 0.00231689}, + {0.0014205, 0.00323172}, {0.00245194, 0.00326343}, {0.00254339, 0.00338285}, + {0.00164597, 0.00365304}, {0.000352848, 0.00378036}, {-0.000612417, 0.00341444}, + {-0.0009668, 0.00255828}, {-0.000968044, 0.00166251}, {-0.000992893, 0.00128342}, + {-0.00105907, 0.00161763}, {-0.000796136, 0.00235437}, {0.000102526, 0.00297995}, + {0.00151406, 0.00372578}, {0.00180885, 0.00385756}, {0.00133698, 0.00394148}, + {0.000458959, 0.00402696}, {-0.000265637, 0.00393919}, {-0.00055238, 0.00347791}, + {-0.000558492, 0.00269481}, {-0.000606658, 0.00195161}, {-0.000774242, 0.00167125}, + {-0.000782284, 0.00200075}, {-0.000304306, 0.00269993}, {0.000621885, 0.00335765}, + {-0.000255288, 0.00377188}, {-0.000578666, 0.00396859}, {-0.000801606, 0.00387581}, + {-0.0007455, 0.00376145}, {-0.000428125, 0.00363368}, {-5.61308e-05, 0.00326119}, + {0.000151935, 0.00250074}, {0.000143064, 0.00157857}, {4.12433e-05, 0.00100732}, + {-7.37259e-06, 0.00118311}, {7.50117e-06, 0.00203634}, {-3.97326e-05, 0.00307286}, + {-0.00262995, 0.00309697}, {-0.00275212, 0.00329879}, {-0.00201295, 0.00311649}, + {-0.000892036, 0.00305148}, {9.92763e-05, 0.00304081}, {0.000765938, 0.00255441}, + {0.00121087, 0.00127004}, {0.00152584, -0.000387784}, {0.00155589, -0.00144191}, + {0.0010114, -0.00115733}, {-0.000172708, 0.000309335}, {-0.00160859, 0.00203217}, + {-0.00361979, 0.00187857}, {-0.00293702, 0.0020949}, {-0.00142119, 0.00205592}, + {-8.49879e-06, 0.00220368}, {0.000950259, 0.00208594}, {0.00175599, 0.000889985}, + {0.00272285, -0.00149533}, {0.00356402, -0.00401823}, {0.00349632, -0.00515843}, + {0.00200782, -0.00417881}, {-0.000474875, -0.00175451}, {-0.00272874, 0.000620624}, + {-0.00238927, 0.000700564}, {-0.00121046, 0.00101474}, {7.99908e-05, 0.00125414}, + {0.000848624, 0.00143781}, {0.00148146, 0.000696302}, {0.00268859, -0.0016751}, + {0.00443425, -0.00512418}, {0.00565872, -0.00790653}, {0.00515424, -0.00837321}, + {0.0027683, -0.00631599}, {-0.000267813, -0.00310631}, {-0.00226091, -0.000507626}, + {-5.16118e-05, 0.000139308}, {0.00064619, 0.000615711}, {0.000801952, 0.00101293}, + {0.000697033, 0.000835273}, {0.00136019, -0.000850858}, {0.00329127, -0.00418559}, + {0.00564976, -0.00788611}, {0.00680305, -0.00997969}, {0.00576458, -0.00931341}, + {0.00313569, -0.00645509}, {0.000621442, -0.00315179}, {-0.000426931, -0.000880551}, + {0.00141297, 0.000348494}, {0.000943319, 0.000937462}, {-2.78181e-08, 0.00120799}, + {-0.000355539, 0.000441123}, {0.000843933, -0.00190748}, {0.00334012, -0.00531184}, + {0.00565542, -0.00821328}, {0.00629755, -0.00908454}, {0.00503133, -0.00758886}, + {0.00300479, -0.00477347}, {0.00163284, -0.00214256}, {0.00134622, -0.000504425}, + {0.00104173, 0.00101466}, {-0.000272058, 0.00155855}, {-0.00137594, 0.00151119}, + {-0.00120731, 0.000368374}, {0.000486366, -0.00186183}, {0.00278219, -0.00436307}, + {0.00429818, -0.00594823}, {0.0043304, -0.00589442}, {0.00333931, -0.00443482}, + {0.00235727, -0.00247746}, {0.00194516, -0.000844953}, {0.00174431, 0.00024405}, + {-0.000282354, 0.00169861}, {-0.00135553, 0.00204457}, {-0.00167071, 0.00175434}, + {-0.000877419, 0.000760329}, {0.000573651, -0.000631027}, {0.00178955, -0.00186146}, + {0.00217847, -0.00245592}, {0.00187432, -0.00229522}, {0.00146274, -0.00160787}, + {0.00132002, -0.000723407}, {0.00124627, 0.000161286}, {0.000757131, 0.000994601}, + {-0.000411389, 0.002483}, {0.000664762, 0.00256688}, {0.00147098, 0.00225153}, + {0.00160136, 0.00163982}, {0.0011106, 0.00093562}, {0.000409698, 0.00034921}, + {-0.000123655, 1.93428e-05}, {-0.000436175, -5.55788e-06}, {-0.000723632, 0.000259591}, + {-0.00109888, 0.000762119}, {-0.00137175, 0.00140734}, {-0.00118961, 0.00204395}, + {0.00181892, 0.00296487}, {0.00312759, 0.00289344}, {0.00315861, 0.0026423}, + {0.00193264, 0.00233801}, {0.00025056, 0.00195006}, {-0.000993451, 0.00141113}, + {-0.00149501, 0.000806377}, {-0.00159212, 0.000409872}, {-0.00170222, 0.000499137}, + {-0.00176687, 0.0011095}, {-0.00129634, 0.00196539}, {2.67417e-05, 0.00266619}, + {0.0034084, 0.00333155}, {0.0038427, 0.00313401}, {0.00269018, 0.00290156}, + {0.000672062, 0.00269719}, {-0.00105739, 0.00236236}, {-0.00183363, 0.00177282}, + {-0.00186106, 0.00108585}, {-0.00174584, 0.000698806}, {-0.00171999, 0.000929376}, + {-0.00137804, 0.00171646}, {-0.000198099, 0.00263587}, {0.0017048, 0.00322729}, + {0.00268187, 0.00333104}, {0.00199517, 0.00308239}, {0.000412822, 0.00283221}, + {-0.00110048, 0.00265381}, {-0.0017948, 0.00239084}, {-0.00168035, 0.00190336}, + {-0.00132851, 0.00131573}, {-0.00117801, 0.00098954}, {-0.0010729, 0.0012226}, + {-0.00050065, 0.00195873}, {0.000729861, 0.00279654}, {0.00209266, 0.00330113}, + {2.19272e-05, 0.00277353}, {-0.000957074, 0.00256523}, {-0.00174148, 0.00235975}, + {-0.00187231, 0.00231918}, {-0.00139096, 0.00225199}, {-0.00075164, 0.00186676}, + {-0.000374476, 0.00115971}, {-0.00028408, 0.000522671}, {-0.00017942, 0.000435763}, + {0.000160266, 0.00102929}, {0.000567512, 0.00194182}, {0.000607946, 0.00261943}, + {-0.0024215, 0.00177225}, {-0.00263682, 0.00167568}, {-0.00209535, 0.00164535}, + {-0.00114102, 0.00184997}, {-0.000248941, 0.00187832}, {0.000321309, 0.0012058}, + {0.000615769, -0.000147999}, {0.00077493, -0.00146392}, {0.000776697, -0.00187237}, + {0.000421758, -0.00110328}, {-0.000414171, 0.000280854}, {-0.00152766, 0.00139216}, + {-0.00274443, 0.000749227}, {-0.00197066, 0.000793853}, {-0.000775567, 0.00100805}, + {0.000155336, 0.0013392}, {0.000657256, 0.00104115}, {0.00104563, -0.000468441}, + {0.00158167, -0.00278986}, {0.0020371, -0.00464365}, {0.00183998, -0.0048709}, + {0.000677836, -0.00340594}, {-0.0010533, -0.00129872}, {-0.00243964, 0.000223927}, + {-0.00104825, 0.000168518}, {-9.99667e-05, 0.000343194}, {0.000542457, 0.000711696}, + {0.000631678, 0.000824043}, {0.000711702, -0.000259321}, {0.0014042, -0.00280632}, + {0.00259882, -0.00578326}, {0.00340756, -0.007483}, {0.0029706, -0.0068919}, + {0.00132982, -0.00451958}, {-0.000507229, -0.00191114}, {-0.00140519, -0.000323743}, + {0.000775353, 0.000221899}, {0.000887833, 0.000489889}, {0.000405415, 0.000801136}, + {-0.000135239, 0.00037554}, {0.000194675, -0.00156994}, {0.00168329, -0.00471438}, + {0.00352434, -0.00751854}, {0.00444058, -0.00833396}, {0.00380996, -0.00674179}, + {0.00220887, -0.00386533}, {0.000850235, -0.00137242}, {0.000474651, -0.0001314}, + {0.000988472, 0.000741314}, {0.000104752, 0.00105288}, {-0.000928353, 0.00112477}, + {-0.00119781, 0.000146563}, {-8.73e-05, -0.00221071}, {0.00201349, -0.00511534}, + {0.00390545, -0.00699787}, {0.00453751, -0.0067628}, {0.00383244, -0.0046732}, + {0.00261536, -0.00208014}, {0.00175651, -0.000269502}, {0.0013939, 0.000473638}, + {-0.000278078, 0.00139766}, {-0.00127652, 0.00169414}, {-0.0017797, 0.00150281}, + {-0.00123359, 0.000298155}, {0.000314453, -0.00178583}, {0.00212936, -0.00380278}, + {0.00330561, -0.00463548}, {0.00342906, -0.00387201}, {0.00278692, -0.00210491}, + {0.00197045, -0.000384446}, {0.00129739, 0.000639583}, {0.000627818, 0.00108077}, + {-0.00124773, 0.00197888}, {-0.00129968, 0.00219642}, {-0.000820366, 0.00186852}, + {6.2613e-05, 0.000856692}, {0.000997415, -0.000513844}, {0.0016175, -0.00159544}, + {0.0017559, -0.00187196}, {0.00149077, -0.00132339}, {0.00100921, -0.000377133}, + {0.000441083, 0.000486924}, {-0.000176634, 0.00109135}, {-0.000794482, 0.0015546}, + {0.000812117, 0.00215362}, {0.00217721, 0.00235972}, {0.00250808, 0.00206105}, + {0.00185072, 0.00130905}, {0.000847902, 0.000425322}, {0.000100345, -0.000204685}, + {-0.00032629, -0.00038357}, {-0.000784331, -0.000183488}, {-0.00148305, 0.00019328}, + {-0.00210058, 0.000617194}, {-0.00200482, 0.00109475}, {-0.000889417, 0.00164666}, + {0.00344363, 0.00240202}, {0.00412826, 0.00234947}, {0.0030609, 0.00205558}, + {0.00102515, 0.00158366}, {-0.000727613, 0.000985268}, {-0.00151951, 0.000361307}, + {-0.00163598, -0.000105598}, {-0.00175167, -0.000215457}, {-0.00204384, 0.00012061}, + {-0.00193658, 0.000797118}, {-0.000752743, 0.00155791}, {0.00139869, 0.0021397}, + {0.00429725, 0.00243424}, {0.00348847, 0.00225357}, {0.00123152, 0.00205561}, + {-0.00107539, 0.0017845}, {-0.00224766, 0.00130311}, {-0.00219818, 0.00063953}, + {-0.00173366, 8.04705e-05}, {-0.00154505, -1.44906e-05}, {-0.00145589, 0.00048098}, + {-0.000696593, 0.00132523}, {0.00109584, 0.00208225}, {0.00321415, 0.00244832}, + {0.00244031, 0.0022015}, {0.000620396, 0.00202706}, {-0.00149422, 0.00192451}, + {-0.00265921, 0.0017784}, {-0.00248193, 0.0014026}, {-0.00160714, 0.000815412}, + {-0.000946948, 0.000317101}, {-0.000758728, 0.000266482}, {-0.000495671, 0.000759492}, + {0.000449455, 0.00152111}, {0.00190388, 0.00212198}, {0.00288065, 0.0023187}, + {-0.000688485, 0.0016919}, {-0.00217813, 0.00155269}, {-0.00290026, 0.00151515}, + {-0.0024853, 0.00150412}, {-0.00140646, 0.00128748}, {-0.000490928, 0.000773425}, + {-0.000160101, 0.000184896}, {-0.000140597, -8.53298e-05}, {0.000100468, 0.000185019}, + {0.000674583, 0.000838289}, {0.00106589, 0.00146436}, {0.00063142, 0.00174561}, + {-0.00260573, 0.0010079}, {-0.00281905, 0.000850244}, {-0.00211981, 0.000891521}, + {-0.00101254, 0.0010516}, {-0.000171228, 0.000910086}, {0.000118564, 0.000196445}, + {9.63571e-05, -0.000829039}, {0.000145403, -0.00151408}, {0.00031269, -0.00136667}, + {0.000236222, -0.000495381}, {-0.000440811, 0.000488826}, {-0.00159713, 0.00101378}, + {-0.00209376, 0.00037292}, {-0.00132175, 0.000178588}, {-0.000357631, 0.000357329}, + {0.000135574, 0.000621458}, {6.97704e-05, 0.0002626}, {-8.86416e-05, -0.0010209}, + {0.000107486, -0.00264534}, {0.000561535, -0.00353785}, {0.000703078, -0.00306147}, + {8.94859e-05, -0.00158364}, {-0.00107076, -0.00013794}, {-0.00201802, 0.000490441}, + {-0.000230884, 3.1371e-05}, {0.000383229, -0.000104351}, {0.000428404, 0.000237989}, + {-0.000165206, 0.000391835}, {-0.000709238, -0.000511882}, {-0.00047087, -0.00248403}, + {0.000543768, -0.00442134}, {0.0015335, -0.00497688}, {0.00164608, -0.00374876}, + {0.000793595, -0.00164089}, {-0.000266218, -4.59147e-05}, {-0.000662338, 0.000355773}, + {0.000838677, 0.000108863}, {0.000500847, 0.000184552}, {-0.000462377, 0.000611161}, + {-0.00142202, 0.000407798}, {-0.0014377, -0.00112731}, {-0.00019289, -0.00347252}, + {0.00160799, -0.00513285}, {0.00279916, -0.00490715}, {0.00274911, -0.00296621}, + {0.00184213, -0.000696689}, {0.00100447, 0.00053703}, {0.000772938, 0.000514692}, + {0.000124405, 0.000544474}, {-0.000809288, 0.000897244}, {-0.00179564, 0.00124025}, + {-0.00206921, 0.000585713}, {-0.00109742, -0.00130986}, {0.000817474, -0.00346153}, + {0.00266122, -0.00439688}, {0.0034805, -0.00344643}, {0.00309768, -0.00134185}, + {0.00211648, 0.000457057}, {0.00125909, 0.0010494}, {0.000713378, 0.000753483}, + {-0.00124118, 0.00114723}, {-0.00166679, 0.0016648}, {-0.00172845, 0.00177442}, + {-0.00111678, 0.000815018}, {0.000181631, -0.00098021}, {0.00170334, -0.00252241}, + {0.00274777, -0.00276665}, {0.00285775, -0.00162362}, {0.00211934, -7.41674e-06}, + {0.00102324, 0.00101721}, {4.04591e-05, 0.00115183}, {-0.000681188, 0.000968203}, + {-0.00124712, 0.00172152}, {-0.000503703, 0.00217425}, {0.000211257, 0.00202485}, + {0.000767816, 0.00105073}, {0.00119491, -0.00030522}, {0.00149454, -0.00123516}, + {0.00152478, -0.00122728}, {0.00109947, -0.000465569}, {0.000216125, 0.000401356}, + {-0.000826921, 0.000878568}, {-0.00157212, 0.00102008}, {-0.00170337, 0.00123249}, + {0.00184474, 0.001294}, {0.00283925, 0.00159354}, {0.00251948, 0.00129289}, + {0.00143807, 0.000500437}, {0.0004614, -0.000345234}, {-3.9144e-05, -0.000819144}, + {-0.000396374, -0.000822161}, {-0.00109119, -0.000579709}, {-0.00204712, -0.000355138}, + {-0.00254108, -0.000180772}, {-0.00186409, 0.000122903}, {-8.78541e-05, 0.000672901}, + {0.00383137, 0.0011233}, {0.00350436, 0.00127091}, {0.00169583, 0.00120797}, + {-0.000300211, 0.000879763}, {-0.0013451, 0.000336338}, {-0.00136446, -0.000243029}, + {-0.0011625, -0.000631526}, {-0.00139716, -0.000687156}, {-0.00179999, -0.000428682}, + {-0.00145363, 3.06954e-06}, {0.000152943, 0.00045451}, {0.00238365, 0.000838344}, + {0.00342454, 0.00105368}, {0.00153576, 0.00130977}, {-0.000938952, 0.00152474}, + {-0.00244623, 0.00141073}, {-0.00236447, 0.000855341}, {-0.00138811, 9.4757e-05}, + {-0.000669021, -0.000436948}, {-0.000617606, -0.000454379}, {-0.000575121, -4.02195e-05}, + {0.000337306, 0.000464277}, {0.00209292, 0.000781006}, {0.00354879, 0.000912453}, + {0.000717081, 0.0011431}, {-0.00162143, 0.00147068}, {-0.00320893, 0.00170016}, + {-0.00312581, 0.00153008}, {-0.00175628, 0.000924823}, {-0.000323504, 0.000205368}, + {0.000294365, -0.000195537}, {0.000293711, -8.92853e-05}, {0.000530904, 0.00033686}, + {0.00143664, 0.000728738}, {0.00240627, 0.000900161}, {0.0023238, 0.000963991}, + {-0.00217873, 0.0011431}, {-0.00348199, 0.00126879}, {-0.0033341, 0.0012921}, + {-0.00193091, 0.00108826}, {-0.000318486, 0.000656389}, {0.000557299, 0.000175283}, + {0.000618021, -0.000107607}, {0.00051748, -6.10013e-05}, {0.000796446, 0.000239548}, + {0.00122393, 0.000594966}, {0.00101531, 0.000854539}, {-0.000287338, 0.00101178}, + {-0.00308394, 0.00078988}, {-0.00282581, 0.000545468}, {-0.00157908, 0.000472976}, + {-0.000254897, 0.000507047}, {0.000361377, 0.000400072}, {0.000251192, 2.70184e-05}, + {2.11797e-05, -0.000427374}, {0.000163505, -0.000602871}, {0.000493456, -0.000298751}, + {0.000345515, 0.000318715}, {-0.000671211, 0.000845599}, {-0.00213771, 0.000987026}, + {-0.00173982, 0.000138796}, {-0.000746363, -0.000276445}, {0.000115931, -7.95682e-05}, + {0.00015399, 0.000363158}, {-0.000466155, 0.000372438}, {-0.000940082, -0.000301362}, + {-0.000678774, -0.00116418}, {7.15204e-05, -0.00142417}, {0.000471506, -0.000764501}, + {-4.80198e-05, 0.000324541}, {-0.00117162, 0.000990485}, {-0.00195998, 0.000807742}, + {0.00010666, -0.000411199}, {0.000559929, -0.000534979}, {0.000124969, 0.000177635}, + {-0.00103976, 0.000812724}, {-0.00194435, 0.00045067}, {-0.0017105, -0.000837987}, + {-0.000442787, -0.00198498}, {0.000841294, -0.00193352}, {0.00116176, -0.000670932}, + {0.00047464, 0.000741505}, {-0.000358119, 0.00117588}, {-0.000477469, 0.000489336}, + {0.000557711, -0.000448939}, {2.14563e-05, 5.1863e-05}, {-0.00125621, 0.00111261}, + {-0.00244309, 0.00143189}, {-0.00247485, 0.000335699}, {-0.00108655, -0.00145352}, + {0.000859953, -0.00243917}, {0.0020968, -0.00176869}, {0.00203615, -5.04466e-05}, + {0.00118411, 0.00123797}, {0.000515273, 0.00116288}, {0.000465298, 0.000173111}, + {-0.000523707, 7.49832e-05}, {-0.00129984, 0.00109782}, {-0.00218758, 0.00201665}, + {-0.00238082, 0.00163377}, {-0.00134821, -8.95559e-05}, {0.000544868, -0.00188137}, + {0.00222292, -0.00231004}, {0.00275675, -0.00111937}, {0.00209201, 0.000561396}, + {0.00097507, 0.00133038}, {0.000184764, 0.000840209}, {-0.000155834, 3.24209e-05}, + {-0.001461, 0.000795685}, {-0.00141069, 0.00188087}, {-0.00124781, 0.00225242}, + {-0.000643685, 0.0012467}, {0.000498695, -0.000580925}, {0.0017598, -0.00189078}, + {0.00242939, -0.00176781}, {0.00206917, -0.000530854}, {0.000889091, 0.000638683}, + {-0.00042233, 0.000863347}, {-0.0012548, 0.000368828}, {-0.00149871, 0.000137595}, + {-0.000600014, 0.00125626}, {0.000440209, 0.0019785}, {0.00101314, 0.0018198}, + {0.00122965, 0.000677783}, {0.0013687, -0.00072864}, {0.00146561, -0.00146476}, + {0.00123002, -0.00118843}, {0.000388083, -0.000386593}, {-0.000907184, 0.000168035}, + {-0.00204432, 0.000181923}, {-0.00238166, 6.42756e-05}, {-0.00175623, 0.000404465}, + {0.00199557, 0.000263447}, {0.00247435, 0.000538173}, {0.00180618, 0.000268668}, + {0.000754365, -0.000364617}, {4.72554e-05, -0.000926542}, {-0.00026345, -0.00110933}, + {-0.000678776, -0.000972234}, {-0.00153395, -0.000817447}, {-0.00246206, -0.000843655}, + {-0.00263013, -0.000935596}, {-0.00154663, -0.000803184}, {0.000360354, -0.000324686}, + {0.00282182, -0.000181848}, {0.00180775, 0.000362276}, {7.00146e-06, 0.000732201}, + {-0.00126844, 0.000697148}, {-0.00137827, 0.000289147}, {-0.000824003, -0.000228184}, + {-0.000583612, -0.000584569}, {-0.00102006, -0.00070715}, {-0.00148547, -0.000717379}, + {-0.00102567, -0.000744172}, {0.000534689, -0.000757712}, {0.00224657, -0.000600078}, + {0.00133015, 0.000104398}, {-0.000843026, 0.00102754}, {-0.00256504, 0.00167641}, + {-0.00270407, 0.00161494}, {-0.00144203, 0.000923632}, {-6.64642e-06, 0.000113986}, + {0.000547055, -0.000334838}, {0.000289877, -0.000366624}, {0.000180305, -0.000299112}, + {0.000918105, -0.000412609}, {0.00208642, -0.000612658}, {0.00248263, -0.000519398}, + {-0.0015507, 0.00082568}, {-0.0034411, 0.00164957}, {-0.00371457, 0.0019666}, + {-0.00222345, 0.0015614}, {-8.25219e-05, 0.000764932}, {0.00134496, 0.00014339}, + {0.00160211, -6.27988e-06}, {0.00133526, 0.00013365}, {0.00140551, 0.0001729}, + {0.00186843, -2.94509e-05}, {0.00188474, -0.000196806}, {0.000660482, 6.84618e-05}, + {-0.00359162, 0.00117955}, {-0.00394685, 0.00137818}, {-0.0025872, 0.00121969}, + {-0.000423216, 0.000818799}, {0.00123655, 0.000463904}, {0.00176489, 0.000358813}, + {0.00156645, 0.000459431}, {0.00142312, 0.000557829}, {0.00155579, 0.000518922}, + {0.00138269, 0.00042539}, {0.000221478, 0.000483263}, {-0.00179918, 0.000785753}, + {-0.00331757, 0.000681835}, {-0.00220791, 0.000308687}, {-0.000444879, 0.000212208}, + {0.000802004, 0.000435465}, {0.00101794, 0.000751507}, {0.000661517, 0.000891308}, + {0.000525362, 0.000800192}, {0.000826648, 0.000669702}, {0.000968204, 0.000719148}, + {0.000214973, 0.000952495}, {-0.00141191, 0.00114009}, {-0.00296008, 0.00104732}, + {-0.00133102, -0.00031431}, {-1.68337e-05, -0.000566196}, {0.000632161, 9.58244e-05}, + {0.000179505, 0.00109555}, {-0.000724178, 0.00159265}, {-0.00104486, 0.0012803}, + {-0.00043404, 0.000641017}, {0.000415266, 0.000418534}, {0.000483599, 0.000846099}, + {-0.000509911, 0.00141033}, {-0.00176972, 0.0013876}, {-0.00216637, 0.000610358}, + {0.000378534, -0.00093279}, {0.000695835, -0.000328522}, {-0.000191029, 0.00120703}, + {-0.00165606, 0.00235426}, {-0.0024236, 0.00215362}, {-0.00179325, 0.000914903}, + {-0.000322277, -0.000121804}, {0.000712069, -2.65834e-05}, {0.000537899, 0.00091902}, + {-0.000409751, 0.00155347}, {-0.000993859, 0.00105462}, {-0.000563175, -0.000187827}, + {0.00042485, -0.000618514}, {-0.000277729, 0.000935412}, {-0.00173402, 0.00267169}, + {-0.00280059, 0.00302497}, {-0.00248115, 0.0016338}, {-0.000904025, -0.000295759}, + {0.000754963, -0.00114656}, {0.00134079, -0.000423828}, {0.000739223, 0.00084546}, + {-0.000135323, 0.00122109}, {-0.000338016, 0.000335609}, {0.000142723, -0.000740402}, + {-0.000675449, 0.0003245}, {-0.00135006, 0.0021808}, {-0.00207717, 0.00321564}, + {-0.00200301, 0.00234654}, {-0.000837009, 0.000130504}, {0.000759899, -0.0017094}, + {0.00170088, -0.00187498}, {0.00142337, -0.000645998}, {0.000350221, 0.000518958}, + {-0.000572076, 0.000502558}, {-0.000785952, -0.00036669}, {-0.0005826, -0.00072658}, + {-0.00117033, 0.0010344}, {-0.000890367, 0.00239042}, {-0.000582166, 0.00238781}, + {5.51232e-05, 0.000768668}, {0.000968865, -0.00134512}, {0.00164892, -0.00244056}, + {0.00152962, -0.00196554}, {0.000524819, -0.000735357}, {-0.000830946, -2.62602e-05}, + {-0.00179096, -0.000286841}, {-0.00197987, -0.000759252}, {-0.00161236, -0.000370295}, + {9.67618e-07, 0.000931598}, {0.000995034, 0.00153071}, {0.00139055, 0.000986414}, + {0.00141007, -0.000436504}, {0.00130878, -0.00174739}, {0.00104571, -0.00210457}, + {0.000362801, -0.00153128}, {-0.000817367, -0.000790513}, {-0.00211045, -0.000571193}, + {-0.00284145, -0.000813133}, {-0.00255406, -0.000842124}, {-0.00139341, -0.000159969}, + {0.00145723, -0.00051303}, {0.00164934, -0.000286049}, {0.000923179, -0.000373457}, + {-1.50408e-05, -0.000625309}, {-0.000612659, -0.00074709}, {-0.000919935, -0.00060566}, + {-0.00136618, -0.000365436}, {-0.00213309, -0.000317819}, {-0.00280477, -0.000576078}, + {-0.00268961, -0.00094449}, {-0.0015172, -0.00109731}, {0.000187925, -0.000893071}, + {0.00129587, -0.000798419}, {0.000158906, 0.00020614}, {-0.00117883, 0.000975943}, + {-0.00170154, 0.00115875}, {-0.00124111, 0.000867268}, {-0.000550201, 0.000487262}, + {-0.000471313, 0.000266527}, {-0.00105364, 0.000102517}, {-0.00151183, -0.000268484}, + {-0.00106577, -0.000893038}, {0.000193081, -0.00144211}, {0.00129811, -0.0014609}, + {-0.000694365, 0.000111926}, {-0.00241287, 0.00150284}, {-0.00303923, 0.00224209}, + {-0.00209269, 0.00203013}, {-0.00032754, 0.00130537}, {0.000969676, 0.000745078}, + {0.00113847, 0.000600864}, {0.000634264, 0.000529758}, {0.000405736, 6.77302e-05}, + {0.000827027, -0.000762891}, {0.00128459, -0.00135793}, {0.000842255, -0.00107487}, + {-0.00314295, 0.00121727}, {-0.00398818, 0.00210678}, {-0.00298255, 0.00216122}, + {-0.000715846, 0.00155526}, {0.00143399, 0.000959614}, {0.00244066, 0.000853001}, + {0.00235477, 0.00107475}, {0.00196991, 0.0010571}, {0.00183944, 0.00048565}, + {0.001678, -0.000297241}, {0.000758259, -0.000573442}, {-0.00112358, 5.01733e-05}, + {-0.00410814, 0.00137059}, {-0.00330837, 0.00137364}, {-0.00115352, 0.00106281}, + {0.00107898, 0.000850138}, {0.0023451, 0.00103993}, {0.00255984, 0.00149989}, + {0.00236571, 0.00177804}, {0.00226054, 0.00155252}, {0.00201827, 0.000965194}, + {0.00100376, 0.000502181}, {-0.000956968, 0.000534863}, {-0.00308429, 0.000973054}, + {-0.0028829, 0.000436756}, {-0.00110773, 0.000167191}, {0.000651311, 0.000473464}, + {0.00146196, 0.00129255}, {0.00138454, 0.00213227}, {0.00117829, 0.0024759}, + {0.00135942, 0.00221233}, {0.00160184, 0.00168487}, {0.00110211, 0.0013266}, + {-0.000466811, 0.00125253}, {-0.00240698, 0.00120983}, {-0.00346005, 0.0009182}, + {-0.000632782, -0.000577207}, {0.000635365, -3.94854e-05}, {0.000771369, 0.0014756}, + {-3.73475e-05, 0.00296403}, {-0.000741049, 0.00343415}, {-0.000542003, 0.00276521}, + {0.000282592, 0.00173449}, {0.000678746, 0.00121102}, {-6.88672e-05, 0.00132984}, + {-0.00153606, 0.00146107}, {-0.00249666, 0.000976697}, {-0.0020841, 1.17346e-05}, + {0.000753646, -0.000548754}, {0.000617308, 0.00129148}, {-0.000695988, 0.0034929}, + {-0.00203612, 0.00442797}, {-0.00223574, 0.00347947}, {-0.00123133, 0.00157252}, + {-9.02653e-05, 0.000255751}, {7.34624e-05, 0.000248659}, {-0.000794045, 0.00088217}, + {-0.00166211, 0.00094888}, {-0.00148988, 6.42361e-05}, {-0.00031348, -0.000863744}, + {0.000456483, 0.000608535}, {-0.000604918, 0.00313614}, {-0.0020511, 0.00475253}, + {-0.00264988, 0.00410325}, {-0.0019219, 0.00164859}, {-0.000588009, -0.000746064}, + {0.000149688, -0.00151773}, {-0.000225379, -0.000745959}, {-0.00108693, 0.000154799}, + {-0.00135942, 2.18475e-05}, {-0.000650927, -0.000822873}, {0.000322916, -0.000945364}, + {-0.000607399, 0.00182776}, {-0.00131512, 0.0038504}, {-0.00175392, 0.00399247}, + {-0.00134636, 0.00187678}, {-0.000332892, -0.00105811}, {0.000423803, -0.00281499}, + {0.000261107, -0.00258398}, {-0.000646136, -0.00129865}, {-0.00146371, -0.000514196}, + {-0.00151269, -0.000779952}, {-0.000911194, -0.00115304}, {-0.000411512, -0.000322679}, + {-0.000867282, 0.00193138}, {-0.000486437, 0.00276038}, {-1.35831e-05, 0.00172419}, + {0.000544091, -0.000666089}, {0.00087913, -0.00279809}, {0.000624222, -0.00336212}, + {-0.000271843, -0.00244049}, {-0.00141094, -0.00125204}, {-0.0022103, -0.000853659}, + {-0.00233624, -0.00111864}, {-0.00191303, -0.00100408}, {-0.00133161, 0.000197752}, + {0.000194878, 0.000797578}, {0.00110693, 0.000825472}, {0.0013971, -0.000212241}, + {0.00116602, -0.00165516}, {0.000612288, -0.00249766}, {-0.000157435, -0.00227736}, + {-0.00111529, -0.00143563}, {-0.0021413, -0.000817017}, {-0.00291883, -0.000823905}, + {-0.00306116, -0.0010721}, {-0.00239347, -0.00087611}, {-0.00113639, -5.18101e-05}, + {0.00102125, -0.000807487}, {0.00105345, -0.000485227}, {0.000166927, -0.000213507}, + {-0.00094218, 1.24723e-05}, {-0.00166322, 0.000317754}, {-0.0019481, 0.000728524}, + {-0.0021791, 0.00105711}, {-0.00260779, 0.00102987}, {-0.00297418, 0.000546126}, + {-0.0027215, -0.000186904}, {-0.00160397, -0.00078721}, {-6.61755e-05, -0.000985953}, + {0.000329234, -0.000542752}, {-0.000719155, 0.000767918}, {-0.00174749, 0.00168844}, + {-0.00198482, 0.00193268}, {-0.00145141, 0.00181473}, {-0.000869482, 0.00178525}, + {-0.000890393, 0.00189163}, {-0.00142466, 0.00172581}, {-0.00174984, 0.000913185}, + {-0.00128338, -0.000368005}, {-0.000234127, -0.00139491}, {0.000537466, -0.00147333}, + {-0.00168221, 0.000800791}, {-0.00280472, 0.00215657}, {-0.00273725, 0.00261712}, + {-0.00145783, 0.00229386}, {0.000145804, 0.00192936}, {0.001059, 0.00204242}, + {0.000997031, 0.00236793}, {0.000521408, 0.00216271}, {0.000344534, 0.00106061}, + {0.000553847, -0.000408225}, {0.000548347, -0.00119428}, {-0.000255449, -0.0006658}, + {-0.003496, 0.00170968}, {-0.00344178, 0.00222347}, {-0.00187325, 0.00199334}, + {0.000319292, 0.00161855}, {0.00200026, 0.00177115}, {0.00264115, 0.00244428}, + {0.00254026, 0.00291995}, {0.00227272, 0.0024991}, {0.0019883, 0.00126046}, + {0.00129319, 7.35466e-05}, {-0.000174447, -0.000171995}, {-0.00209945, 0.000623649}, + {-0.00360734, 0.00133873}, {-0.0021703, 0.00118988}, {-5.05481e-05, 0.00113971}, + {0.00168386, 0.00162029}, {0.00255812, 0.00257233}, {0.002828, 0.00339162}, + {0.00292124, 0.00344}, {0.00282294, 0.00263503}, {0.00206942, 0.00154151}, + {0.000362512, 0.000871077}, {-0.00185049, 0.000872856}, {-0.00348659, 0.00119725}, + {-0.00194572, 0.000339146}, {-0.000244247, 0.000657071}, {0.000915061, 0.00177077}, + {0.00126201, 0.00321189}, {0.00131316, 0.00416785}, {0.00162389, 0.00412598}, + {0.00207051, 0.00326743}, {0.00192382, 0.00224869}, {0.000654039, 0.00159925}, + {-0.00135816, 0.00132319}, {-0.00296409, 0.00106805}, {-0.00316435, 0.000645663}, + {6.55117e-05, 0.000132232}, {0.000617656, 0.00185297}, {0.000100959, 0.00404774}, + {-0.000654945, 0.00534757}, {-0.000700874, 0.00498998}, {3.09265e-05, 0.00343747}, + {0.000653185, 0.00188692}, {0.000252531, 0.00116799}, {-0.00111913, 0.00110664}, + {-0.00240307, 0.000938406}, {-0.00250864, 0.000294188}, {-0.00135208, -0.000286716}, + {0.000868648, 0.00137508}, {-0.000104883, 0.00421796}, {-0.00161118, 0.00620505}, + {-0.00236684, 0.00592248}, {-0.00188737, 0.00362859}, {-0.000899015, 0.00100207}, + {-0.000546404, -0.000371853}, {-0.00120603, -0.000307679}, {-0.00210338, 0.000113344}, + {-0.0021182, -0.000103027}, {-0.000964516, -0.000716191}, {0.000450775, -0.000497793}, + {0.000207818, 0.00318285}, {-0.00130497, 0.00579402}, {-0.00243518, 0.00617887}, + {-0.00240675, 0.0038693}, {-0.00157165, 0.000398834}, {-0.00097118, -0.00202301}, + {-0.00123945, -0.00238234}, {-0.00196024, -0.00149752}, {-0.00212286, -0.000885259}, + {-0.00121054, -0.00107458}, {0.00018794, -0.0011001}, {0.0008803, 0.00032464}, + {-0.000761788, 0.0039177}, {-0.00145842, 0.00507368}, {-0.00148637, 0.00364586}, + {-0.000942266, 0.0003575}, {-0.000538492, -0.00269366}, {-0.000845693, -0.0038141}, + {-0.00167743, -0.00304428}, {-0.00224425, -0.00180712}, {-0.00193182, -0.00131005}, + {-0.000927982, -0.00134559}, {-6.83017e-05, -0.000687589}, {-4.55839e-05, 0.00136361}, + {-0.000761573, 0.00278107}, {-0.000234762, 0.00248914}, {0.000317487, 0.000440221}, + {0.0004477, -0.00213936}, {-0.000121671, -0.00363042}, {-0.00118122, -0.00338277}, + {-0.00214753, -0.00214008}, {-0.00251903, -0.00116332}, {-0.00225303, -0.000964868}, + {-0.00172029, -0.000920589}, {-0.00130623, -0.00011436}, {-0.00106494, 0.00148846}, + {0.00024908, 0.000629334}, {0.00112484, 5.72396e-05}, {0.00116563, -0.00109332}, + {0.000382475, -0.00203896}, {-0.000789633, -0.00211082}, {-0.00183343, -0.00134922}, + {-0.00249117, -0.000433324}, {-0.00281178, -2.4032e-05}, {-0.00291254, -0.000171425}, + {-0.00274451, -0.000360928}, {-0.00212756, -0.000126269}, {-0.00102379, 0.000410084}, + {0.00121868, -0.000670007}, {0.000845468, -7.05047e-05}, {-0.000563981, 0.000589868}, + {-0.00205899, 0.00117309}, {-0.00281552, 0.00173963}, {-0.0027804, 0.00231553}, + {-0.00253607, 0.00270756}, {-0.00257146, 0.00259391}, {-0.00272752, 0.0018272}, + {-0.00238943, 0.000651798}, {-0.00122431, -0.0004006}, {0.000306085, -0.000870168}, + {0.00023735, 0.000169826}, {-0.000975848, 0.00148156}, {-0.00212441, 0.00227317}, + {-0.00246224, 0.00252934}, {-0.002011, 0.00276566}, {-0.00144212, 0.00330621}, + {-0.00134638, 0.00380937}, {-0.00163725, 0.00355609}, {-0.00168626, 0.00222682}, + {-0.00104194, 0.000374539}, {1.08809e-05, -0.000920227}, {0.000639579, -0.000923125}, + {-0.00167471, 0.00144179}, {-0.00256276, 0.0023415}, {-0.00241464, 0.0024758}, + {-0.00133867, 0.00239653}, {-8.33317e-05, 0.00284382}, {0.000623536, 0.00382888}, + {0.000661179, 0.00449995}, {0.000479659, 0.00395831}, {0.000519103, 0.00221804}, + {0.000700286, 0.000333267}, {0.000514513, -0.000472097}, {-0.000379928, 0.000148812}, + {-0.00299063, 0.00178471}, {-0.00263682, 0.00188112}, {-0.00124121, 0.00176059}, + {0.00045278, 0.00214826}, {0.0017348, 0.0033027}, {0.00237436, 0.00458413}, + {0.00256959, 0.00495634}, {0.00252461, 0.00395717}, {0.00213843, 0.00218478}, + {0.00114506, 0.000806929}, {-0.000445777, 0.000555252}, {-0.00209478, 0.00116675}, + {-0.00268127, 0.00118712}, {-0.00141003, 0.00128755}, {8.66201e-05, 0.00196049}, + {0.00129488, 0.00328712}, {0.00216343, 0.00471442}, {0.00284479, 0.00540091}, + {0.00326913, 0.00490115}, {0.00305032, 0.00354661}, {0.00186178, 0.00215928}, + {-9.08147e-05, 0.00137236}, {-0.00201181, 0.00119917}, {-0.00300126, 0.00122708}, + {-0.00116756, 0.000909944}, {-0.000296202, 0.0021814}, {0.000102549, 0.00404616}, + {0.000382626, 0.00560597}, {0.00101114, 0.00604626}, {0.00190104, 0.00525103}, + {0.0023531, 0.00383196}, {0.00170404, 0.00256591}, {4.64022e-05, 0.00179014}, + {-0.00171486, 0.00131392}, {-0.00256568, 0.000868226}, {-0.00219669, 0.000574464}, + {0.000130329, 0.00204781}, {-0.000447043, 0.00472096}, {-0.00131336, 0.00684164}, + {-0.00148165, 0.00714546}, {-0.00069716, 0.00559183}, {0.000284722, 0.00333404}, + {0.000446043, 0.00167319}, {-0.000466081, 0.00101348}, {-0.00166205, 0.000794723}, + {-0.00206656, 0.000379372}, {-0.00136156, -8.04534e-05}, {-0.000281149, 0.000275429}, + {0.000188126, 0.0042154}, {-0.00159028, 0.00716199}, {-0.0027869, 0.00795655}, + {-0.00266121, 0.00605702}, {-0.00171094, 0.00277782}, {-0.00107464, 0.000132255}, + {-0.00134268, -0.000841632}, {-0.00197922, -0.000688349}, {-0.00192975, -0.000583599}, + {-0.000787651, -0.000884621}, {0.000677016, -0.000705298}, {0.00118786, 0.00104095}, + {-0.000671626, 0.00573111}, {-0.00233448, 0.00738883}, {-0.0028127, 0.00606795}, + {-0.00226063, 0.00253427}, {-0.00168196, -0.000987316}, {-0.00180508, -0.00268707}, + {-0.00231453, -0.00252145}, {-0.00221803, -0.00181284}, {-0.000968108, -0.00161727}, + {0.000817859, -0.00157524}, {0.00180554, -0.000419976}, {0.00115696, 0.0024051}, + {-0.001204, 0.00516846}, {-0.00162698, 0.00494292}, {-0.0012682, 0.00229898}, + {-0.000945128, -0.00114084}, {-0.00133418, -0.00334519}, {-0.00219961, -0.00352788}, + {-0.00258819, -0.00255407}, {-0.00180596, -0.00179433}, {-0.000193999, -0.00164776}, + {0.00109442, -0.00123954}, {0.00112421, 0.0004306}, {1.89061e-05, 0.00311067}, + {-0.000589831, 0.00275862}, {0.000110773, 0.00154341}, {0.000437935, -0.000699136}, + {-0.000204417, -0.00254751}, {-0.00155355, -0.00296892}, {-0.00264895, -0.00213355}, + {-0.00268869, -0.00108587}, {-0.00175274, -0.000644117}, {-0.000690906, -0.000643559}, + {-0.000296111, -0.000263718}, {-0.00058353, 0.000931149}, {-0.00087713, 0.00233777}, + {0.000668283, 0.000248119}, {0.00132806, -0.000437232}, {0.000738037, -0.00109884}, + {-0.000816317, -0.0012108}, {-0.0023579, -0.000613787}, {-0.00304042, 0.000312979}, + {-0.00280838, 0.000972553}, {-0.00228455, 0.00105885}, {-0.00204254, 0.000768028}, + {-0.0020198, 0.000526613}, {-0.00166182, 0.000528644}, {-0.000631287, 0.00055431}, + {0.00176357, -0.000286297}, {0.000612084, 0.000609432}, {-0.00143759, 0.00145769}, + {-0.0030684, 0.00211654}, {-0.00343171, 0.0027218}, {-0.00278635, 0.00333831}, + {-0.00207308, 0.00371553}, {-0.00189469, 0.00344003}, {-0.0019428, 0.00235859}, + {-0.00143668, 0.000846352}, {-0.000100277, -0.00037913}, {0.00135214, -0.000762469}, + {0.000434445, 0.000783103}, {-0.00120828, 0.00181673}, {-0.00258284, 0.00235325}, + {-0.00292445, 0.00271486}, {-0.00234709, 0.00345433}, {-0.00160745, 0.00455722}, + {-0.00130022, 0.00526206}, {-0.00130219, 0.00473033}, {-0.00101084, 0.0029208}, + {-0.000107747, 0.000784285}, {0.000959583, -0.000457078}, {0.00130316, -0.00028696}, + {-0.00140426, 0.00159201}, {-0.00234945, 0.00198777}, {-0.00232965, 0.0020839}, + {-0.00145429, 0.00262293}, {-0.000353497, 0.00398803}, {0.000386349, 0.00557276}, + {0.000671157, 0.00618422}, {0.000820179, 0.00513094}, {0.00108491, 0.00293582}, + {0.00129026, 0.000955324}, {0.000985641, 0.000247738}, {-3.87389e-05, 0.000761993}, + {-0.00237468, 0.00153928}, {-0.00215182, 0.0015805}, {-0.00114885, 0.00201655}, + {0.000170784, 0.00331119}, {0.00136561, 0.00515003}, {0.0022223, 0.00649228}, + {0.00270601, 0.00639769}, {0.00277501, 0.00485909}, {0.00230399, 0.00283682}, + {0.00122444, 0.00145334}, {-0.000262247, 0.00111188}, {-0.00165088, 0.00135585}, + {-0.00201851, 0.00137731}, {-0.00137103, 0.00211839}, {-0.000484952, 0.0035597}, + {0.000571075, 0.0053218}, {0.00176368, 0.00661389}, {0.00285414, 0.00676431}, + {0.00338151, 0.005726}, {0.00295488, 0.00409583}, {0.00160775, 0.00263604}, + {-0.000130185, 0.00174453}, {-0.00154364, 0.00134154}, {-0.00217304, 0.0012096}, + {-0.00111807, 0.00227216}, {-0.00127286, 0.00436788}, {-0.00124095, 0.00639557}, + {-0.000527549, 0.00739678}, {0.000797411, 0.00700213}, {0.00199679, 0.00563142}, + {0.00224587, 0.00406707}, {0.00135669, 0.00282933}, {-5.03695e-05, 0.00193582}, + {-0.00109495, 0.00121081}, {-0.00137594, 0.000747473}, {-0.00120017, 0.000984002}, + {-0.000799825, 0.00436847}, {-0.00223745, 0.00722247}, {-0.00281127, 0.00846958}, + {-0.00205333, 0.0075343}, {-0.000625014, 0.00524057}, {0.000318493, 0.00301769}, + {0.00021019, 0.00170262}, {-0.000462619, 0.00107437}, {-0.00074718, 0.000486608}, + {-0.000253058, -0.000144515}, {0.000429062, -7.65462e-05}, {0.000343932, 0.00148698}, + {-0.00134733, 0.00636626}, {-0.00330364, 0.00850293}, {-0.00364703, 0.00783554}, + {-0.00265319, 0.00497093}, {-0.00153655, 0.00181632}, {-0.00117674, -7.14351e-05}, + {-0.00130248, -0.000614516}, {-0.000931936, -0.000807034}, {0.000416027, -0.00130901}, + {0.00201253, -0.00155793}, {0.00248166, -0.000347455}, {0.00111728, 0.00270967}, + {-0.00192699, 0.00660756}, {-0.00312919, 0.00695557}, {-0.00279919, 0.00456761}, + {-0.00199951, 0.0011128}, {-0.00175629, -0.00136787}, {-0.00197247, -0.00212369}, + {-0.00161602, -0.0019814}, {2.94031e-05, -0.0020944}, {0.00236069, -0.00251844}, + {0.00377906, -0.00211064}, {0.00309261, 0.000135028}, {0.000647509, 0.00370285}, + {-0.00149831, 0.0046433}, {-0.001407, 0.00349878}, {-0.000897936, 0.000836171}, + {-0.00104484, -0.00156051}, {-0.00187465, -0.00248865}, {-0.00229402, -0.00220971}, + {-0.00125325, -0.00186899}, {0.00103509, -0.00211821}, {0.00308684, -0.00238043}, + {0.0034149, -0.00151485}, {0.00186506, 0.000807039}, {-0.000276379, 0.00345293}, + {2.21473e-05, 0.00173809}, {0.000698765, 0.000473142}, {0.000419186, -0.000968488}, + {-0.000989215, -0.00160609}, {-0.00244581, -0.00126079}, {-0.00260952, -0.000611524}, + {-0.00118894, -0.000426697}, {0.000732035, -0.000763853}, {0.0016879, -0.000946242}, + {0.001175, -0.000330561}, {3.39965e-05, 0.000926242}, {-0.000478581, 0.001901}, + {0.00154008, -0.000206973}, {0.00156732, -0.000400041}, {7.41494e-05, -0.000267091}, + {-0.00201443, 0.000269015}, {-0.00325338, 0.00100147}, {-0.00295024, 0.00155809}, + {-0.00171113, 0.00167696}, {-0.000753479, 0.0013894}, {-0.000694384, 0.000948383}, + {-0.00102477, 0.000584833}, {-0.000770711, 0.000333006}, {0.000360217, 8.44586e-05}, + {0.00186264, 0.00022094}, {-5.23372e-05, 0.00119935}, {-0.00227965, 0.00190951}, + {-0.00342172, 0.00236577}, {-0.00302498, 0.00282837}, {-0.00184894, 0.00335118}, + {-0.00100949, 0.00358948}, {-0.000879113, 0.00309693}, {-0.000839542, 0.00182768}, + {-0.000100609, 0.000326464}, {0.00128725, -0.000621994}, {0.00229895, -0.000585715}, + {0.000200884, 0.00111429}, {-0.00163536, 0.00176005}, {-0.00279638, 0.00209268}, + {-0.00274624, 0.00264774}, {-0.00188855, 0.00379729}, {-0.0010681, 0.00512943}, + {-0.000729571, 0.00566254}, {-0.000573505, 0.00473298}, {-2.67328e-05, 0.0026937}, + {0.000989068, 0.000715804}, {0.00181155, -0.000149942}, {0.00160535, 0.000224563}, + {-0.00136764, 0.00148465}, {-0.00217036, 0.0016419}, {-0.00200225, 0.00199952}, + {-0.00109176, 0.00316358}, {-5.77449e-05, 0.0050243}, {0.000631244, 0.0065833}, + {0.000974006, 0.00672095}, {0.00125359, 0.00519826}, {0.00158657, 0.00292302}, + {0.00170031, 0.00120678}, {0.00118943, 0.000711506}, {-6.45869e-07, 0.00107013}, + {-0.00195023, 0.00154243}, {-0.00179105, 0.00189847}, {-0.000956701, 0.0029312}, + {0.000222618, 0.00469048}, {0.00137826, 0.0065037}, {0.00225456, 0.00735722}, + {0.00272337, 0.00669574}, {0.00271171, 0.00489771}, {0.00216871, 0.00297272}, + {0.00113323, 0.00176315}, {-0.000169929, 0.00139191}, {-0.00133759, 0.00143066}, + {-0.0017792, 0.00218462}, {-0.00163111, 0.00352628}, {-0.00097876, 0.00523263}, + {0.000195696, 0.00673274}, {0.00161796, 0.00741956}, {0.0027547, 0.00701766}, + {0.00310866, 0.00574842}, {0.00254461, 0.00415704}, {0.00136593, 0.00276132}, + {8.11069e-05, 0.00182156}, {-0.000925202, 0.00138445}, {-0.00153561, 0.00147572}, + {-0.00176118, 0.00384196}, {-0.00248835, 0.00613248}, {-0.00225474, 0.00760546}, + {-0.000938517, 0.00774121}, {0.000779032, 0.00678386}, {0.00192464, 0.00539543}, + {0.00200691, 0.00407296}, {0.00133241, 0.0028903}, {0.000594913, 0.00175883}, + {0.000176473, 0.000856728}, {-0.000139405, 0.000706218}, {-0.000781128, 0.00175313}, + {-0.00237342, 0.00576071}, {-0.00385602, 0.00799681}, {-0.0035961, 0.00813768}, + {-0.00200032, 0.00653029}, {-0.000315142, 0.00444386}, {0.000526001, 0.00289121}, + {0.000634738, 0.00190366}, {0.000800818, 0.000907301}, {0.00146162, -0.000284669}, + {0.00210308, -0.00096813}, {0.00173442, -0.000121442}, {-2.74434e-05, 0.00248231}, + {-0.00306346, 0.00651427}, {-0.00433561, 0.00755447}, {-0.00360454, 0.00609212}, + {-0.00205619, 0.00351098}, {-0.000954652, 0.00144609}, {-0.000454266, 0.00040217}, + {0.000300936, -0.000332987}, {0.00195782, -0.0015058}, {0.0039316, -0.00275347}, + {0.00470337, -0.00274976}, {0.0032171, -0.000552245}, {1.18578e-05, 0.0032017}, + {-0.00278559, 0.00529792}, {-0.00304365, 0.00488066}, {-0.00208558, 0.00269857}, + {-0.00131795, 0.000494252}, {-0.00115003, -0.00066359}, {-0.000680505, -0.00114459}, + {0.00111467, -0.00197779}, {0.00395805, -0.00341799}, {0.00614145, -0.00439941}, + {0.00592998, -0.00350115}, {0.00317673, -0.000485857}, {-0.000434266, 0.00315866}, + {-0.00114186, 0.00274722}, {-0.000603376, 0.00171376}, {-0.000292862, 0.000142556}, + {-0.000859221, -0.000796188}, {-0.00144753, -0.000996808}, {-0.000631289, -0.00130061}, + {0.0019365, -0.0023754}, {0.00486464, -0.0037873}, {0.00609966, -0.00426294}, + {0.00474494, -0.00292566}, {0.00186663, -0.000279677}, {-0.000495147, 0.00207097}, + {0.0010389, 0.000458118}, {0.00129929, -3.2414e-05}, {0.000254368, -0.00029649}, + {-0.00145191, -0.000101111}, {-0.00218416, 0.000116184}, {-0.000931996, -0.000250261}, + {0.0016051, -0.0012645}, {0.00356913, -0.00226958}, {0.00361965, -0.00244876}, + {0.00210709, -0.00159178}, {0.000614925, -0.000313465}, {0.000357166, 0.000496235}, + {0.00231154, -0.000353224}, {0.00139957, 0.000153351}, {-0.000782743, 0.00081739}, + {-0.00271041, 0.0013913}, {-0.00298066, 0.00163455}, {-0.00157505, 0.00146486}, + {0.000189534, 0.000997357}, {0.000954008, 0.000444072}, {0.00056752, -2.9647e-05}, + {7.38775e-05, -0.00036653}, {0.000491613, -0.000563068}, {0.00165481, -0.000583696}, + {0.00107511, 0.000844773}, {-0.000968891, 0.00160569}, {-0.0025605, 0.00194004}, + {-0.00274394, 0.00205876}, {-0.00171173, 0.00227382}, {-0.000511421, 0.00257089}, + {6.06774e-06, 0.00256985}, {-5.62534e-05, 0.00192717}, {8.92828e-05, 0.00077179}, + {0.000932978, -0.000286196}, {0.0020071, -0.000619504}, {0.00225286, -9.55433e-05}, + {-0.000457187, 0.00142148}, {-0.00175798, 0.00174224}, {-0.00213, 0.00196691}, + {-0.00155549, 0.00262817}, {-0.000700077, 0.00381462}, {-0.000222762, 0.00488127}, + {-0.000169522, 0.00494942}, {-4.29217e-05, 0.00373502}, {0.000552901, 0.00189056}, + {0.00137638, 0.000503154}, {0.00169516, 0.000210339}, {0.000994046, 0.000763479}, + {-0.00126864, 0.00169309}, {-0.00142429, 0.0018686}, {-0.000845566, 0.00247045}, + {2.08382e-05, 0.00381255}, {0.000659182, 0.00545956}, {0.00090646, 0.00641924}, + {0.000988042, 0.00595926}, {0.00116566, 0.00427861}, {0.00138367, 0.00237854}, + {0.00129204, 0.00124335}, {0.000631733, 0.00110148}, {-0.000412285, 0.00144003}, + {-0.00135563, 0.00217956}, {-0.000962677, 0.0028371}, {-0.000158956, 0.00400678}, + {0.000746208, 0.00550259}, {0.00149912, 0.0066804}, {0.00198086, 0.00685389}, + {0.00215632, 0.00584917}, {0.00198962, 0.00417877}, {0.00144263, 0.00266101}, + {0.000567934, 0.00182998}, {-0.00041124, 0.00166503}, {-0.00114971, 0.00183961}, + {-0.00156959, 0.00329811}, {-0.00154812, 0.00472258}, {-0.000922947, 0.00600033}, + {0.0002038, 0.00677764}, {0.00142044, 0.00685166}, {0.00222583, 0.00621927}, + {0.00233875, 0.00506127}, {0.00183873, 0.00368253}, {0.00103489, 0.00243575}, + {0.000208034, 0.00164366}, {-0.00053006, 0.00152392}, {-0.00115678, 0.00212534}, + {-0.00251414, 0.00470392}, {-0.0031696, 0.00646804}, {-0.00249403, 0.00706199}, + {-0.000867051, 0.00662023}, {0.000772703, 0.00571651}, {0.00168179, 0.0047547}, + {0.00181524, 0.0036989}, {0.00163996, 0.00237664}, {0.00150699, 0.000980486}, + {0.00125336, 0.000178167}, {0.000444341, 0.000640027}, {-0.00100736, 0.00240404}, + {-0.00372239, 0.00542758}, {-0.00448722, 0.00671962}, {-0.00334363, 0.00621626}, + {-0.00136296, 0.00486449}, {0.00023217, 0.00366658}, {0.00108734, 0.00277141}, + {0.00173833, 0.00160672}, {0.0027026, -0.000155468}, {0.00364879, -0.00187089}, + {0.00355844, -0.00226777}, {0.00176387, -0.00059971}, {-0.00118108, 0.00251424}, + {-0.00399583, 0.00472759}, {-0.00409661, 0.00507554}, {-0.00257529, 0.00385367}, + {-0.000928577, 0.00244868}, {0.000117921, 0.00154953}, {0.00108849, 0.000650323}, + {0.00281213, -0.0010673}, {0.00511138, -0.00345559}, {0.00656547, -0.00512779}, + {0.00569569, -0.00457654}, {0.00245072, -0.00163705}, {-0.00149525, 0.00215623}, + {-0.00260025, 0.00283664}, {-0.0019566, 0.00252812}, {-0.000833706, 0.0014622}, + {-0.000274303, 0.000695937}, {0.000132097, 0.000143541}, {0.00157885, -0.0011095}, + {0.00442016, -0.00349888}, {0.00733432, -0.00609325}, {0.00823824, -0.00713493}, + {0.00614784, -0.00557337}, {0.00218363, -0.00211808}, {-0.00128994, 0.00124256}, + {-0.000123401, 0.000854128}, {0.000453969, 0.000646113}, {0.00030688, 0.000373685}, + {-0.000391903, 0.000283943}, {-0.000231813, -0.000262111}, {0.00183423, -0.00195531}, + {0.00511927, -0.00451608}, {0.00751976, -0.00659521}, {0.00730252, -0.00679844}, + {0.00465911, -0.00489722}, {0.00152116, -0.00206403}, {-0.000180551, 0.000104839}, + {0.0018963, -0.000141144}, {0.0014379, 0.000268168}, {-0.000127957, 0.000715867}, + {-0.00147232, 0.000855295}, {-0.00105054, 0.000142885}, {0.00129946, -0.00150999}, + {0.00403861, -0.00343374}, {0.00524854, -0.00460669}, {0.00432995, -0.00443504}, + {0.00243836, -0.00319148}, {0.00126506, -0.00171543}, {0.0013995, -0.000681907}, + {0.00225673, 7.23815e-05}, {0.000585681, 0.000943757}, {-0.0015829, 0.00154213}, + {-0.00263207, 0.00158107}, {-0.00177623, 0.00103909}, {0.000223906, 0.000176443}, + {0.00179653, -0.000649631}, {0.00201579, -0.00120673}, {0.00135432, -0.00146062}, + {0.00102523, -0.00146935}, {0.00162118, -0.00124164}, {0.0024511, -0.000723483}, + {-0.000154943, 0.00156692}, {-0.00142295, 0.00195714}, {-0.00184099, 0.00190483}, + {-0.00121448, 0.00170676}, {-0.000172926, 0.0016225}, {0.000460365, 0.00159834}, + {0.000433118, 0.00135799}, {0.000214275, 0.000759356}, {0.000406697, 3.91325e-05}, + {0.00104141, -0.000326933}, {0.0014867, -3.42658e-05}, {0.00107903, 0.000762432}, + {-0.000753044, 0.00198762}, {-0.000877387, 0.00210716}, {-0.000388019, 0.0022298}, + {0.000247307, 0.00273539}, {0.000477011, 0.00351262}, {0.000194824, 0.00396464}, + {-0.000187014, 0.00355761}, {-0.000184846, 0.00237644}, {0.000245467, 0.00112622}, + {0.000651997, 0.000554658}, {0.000544468, 0.000839059}, {-9.30268e-05, 0.00151463}, + {-0.000403431, 0.00243266}, {0.000286467, 0.00262747}, {0.00100229, 0.00314263}, + {0.00127252, 0.00408365}, {0.00100513, 0.00499286}, {0.000531865, 0.00517755}, + {0.000259253, 0.00434466}, {0.000279959, 0.0029229}, {0.000328336, 0.00174231}, + {0.000111703, 0.0013628}, {-0.00033151, 0.00168054}, {-0.000622446, 0.00216128}, + {-0.000137769, 0.00316293}, {0.000474186, 0.00373584}, {0.000923713, 0.00446389}, + {0.00107932, 0.0052212}, {0.00103894, 0.00562663}, {0.000964015, 0.00532408}, + {0.000885674, 0.00432542}, {0.000685293, 0.00307646}, {0.000265918, 0.00215933}, + {-0.000271117, 0.00188898}, {-0.000642302, 0.00215959}, {-0.000597533, 0.00265122}, + {-0.00100542, 0.00399852}, {-0.00100453, 0.00490882}, {-0.00062628, 0.0054026}, + {3.83936e-05, 0.00552668}, {0.000727159, 0.00534067}, {0.00116081, 0.00480813}, + {0.00121274, 0.00389263}, {0.000953263, 0.00274662}, {0.000546559, 0.00176346}, + {0.000112018, 0.0013857}, {-0.00031816, 0.00180742}, {-0.000723358, 0.00282935}, + {-0.00281408, 0.00435114}, {-0.00311088, 0.00524849}, {-0.00222225, 0.00520514}, + {-0.000745311, 0.00477071}, {0.000542117, 0.00434811}, {0.00127201, 0.00379908}, + {0.00160782, 0.0027327}, {0.00184164, 0.00114821}, {0.00193386, -0.000278334}, + {0.00150077, -0.000626659}, {0.000276326, 0.000483073}, {-0.00143443, 0.002502}, + {-0.00414115, 0.00374612}, {-0.00399791, 0.00430666}, {-0.00240286, 0.00385926}, + {-0.000554662, 0.00332491}, {0.000764381, 0.00295489}, {0.00168498, 0.00215531}, + {0.00273173, 0.000339295}, {0.00391123, -0.00211464}, {0.00442328, -0.00385595}, + {0.00335944, -0.00361691}, {0.000717651, -0.00135349}, {-0.00231005, 0.0016348}, + {-0.00365285, 0.00232984}, {-0.00278792, 0.00256214}, {-0.00109614, 0.00216252}, + {0.000240346, 0.00189326}, {0.0011766, 0.00143774}, {0.00250374, -0.0001259}, + {0.00459497, -0.00303389}, {0.00657677, -0.00611828}, {0.00687616, -0.00750867}, + {0.00468409, -0.00617734}, {0.000901089, -0.00286973}, {-0.00241721, 0.000483923}, + {-0.00143984, 0.00084618}, {-0.000447711, 0.00106599}, {0.000337655, 0.00107168}, + {0.000600646, 0.00100688}, {0.00127956, 6.66812e-05}, {0.00330641, -0.00246444}, + {0.00624328, -0.00605344}, {0.00829448, -0.00891638}, {0.00779645, -0.00931868}, + {0.00477746, -0.00700737}, {0.00105523, -0.00342405}, {-0.00125896, -0.000496316}, + {0.000966925, 7.28597e-05}, {0.00111309, 0.000576299}, {0.000480653, 0.000944169}, + {-7.74375e-05, 0.00073422}, {0.000814661, -0.000830886}, {0.00346075, -0.00382169}, + {0.00646833, -0.00709314}, {0.00780522, -0.00893505}, {0.00657037, -0.00836397}, + {0.00377812, -0.0058766}, {0.00140297, -0.00297302}, {0.000624171, -0.000921167}, + {0.00194438, 0.000232843}, {0.000836254, 0.00099782}, {-0.000729045, 0.00137722}, + {-0.0012933, 0.000831765}, {6.42774e-05, -0.000917899}, {0.00271073, -0.00339083}, + {0.00489816, -0.00548679}, {0.00527083, -0.00621866}, {0.00399808, -0.00540245}, + {0.00245975, -0.00369449}, {0.00183763, -0.00197794}, {0.00202921, -0.000700615}, + {0.00119042, 0.000918855}, {-0.000561453, 0.00163398}, {-0.00195718, 0.0017527}, + {-0.00189511, 0.00112586}, {-0.000381752, -3.45243e-05}, {0.00145983, -0.00125615}, + {0.0024085, -0.00209436}, {0.00219995, -0.00236859}, {0.00160762, -0.00216675}, + {0.00151792, -0.00166024}, {0.00196498, -0.000940752}, {0.00211146, -3.96837e-05}}; + + std::vector expected_rho_2{ + 8.66322e-05, 9.09154e-05, 9.80794e-05, 9.62722e-05, 8.16604e-05, 6.46466e-05, 5.76474e-05, 6.49856e-05, + 8.21971e-05, 9.67325e-05, 9.82953e-05, 9.09594e-05, 9.08935e-05, 0.000103381, 0.000114995, 0.000110548, + 9.21788e-05, 7.69555e-05, 7.72464e-05, 9.2947e-05, 0.00011143, 0.000115579, 0.000103597, 9.09303e-05, + 9.81246e-05, 0.000115021, 0.000122426, 0.000110464, 9.11147e-05, 8.25973e-05, 9.18823e-05, 0.000111692, + 0.000123525, 0.000115612, 9.83109e-05, 8.99972e-05, 9.64228e-05, 0.000110554, 0.000110366, 9.60819e-05, + 8.30607e-05, 8.35169e-05, 9.72864e-05, 0.000111778, 0.00011156, 9.68686e-05, 8.32922e-05, 8.31881e-05, + 8.17731e-05, 9.19864e-05, 9.07279e-05, 8.27491e-05, 7.87781e-05, 8.35978e-05, 9.20407e-05, 9.31494e-05, + 8.24252e-05, 6.828e-05, 6.20692e-05, 6.80515e-05, 6.45305e-05, 7.64246e-05, 8.18118e-05, 8.27818e-05, + 8.31747e-05, 8.27708e-05, 7.74396e-05, 6.51951e-05, 5.07151e-05, 4.14035e-05, 4.13397e-05, 5.04355e-05, + 5.72317e-05, 7.63516e-05, 9.06979e-05, 9.61549e-05, 9.12462e-05, 7.70786e-05, 5.77605e-05, 3.95271e-05, + 2.74958e-05, 2.34614e-05, 2.74307e-05, 3.92893e-05, 6.43151e-05, 9.18088e-05, 0.000110324, 0.000110512, + 9.22121e-05, 6.46479e-05, 3.93121e-05, 2.27458e-05, 1.53501e-05, 1.53502e-05, 2.27178e-05, 3.91666e-05, + 8.14631e-05, 0.000110395, 0.000122401, 0.000110528, 8.15908e-05, 5.01446e-05, 2.71976e-05, 1.52503e-05, + 1.18282e-05, 1.5279e-05, 2.72311e-05, 5.01152e-05, 9.62222e-05, 0.000114984, 0.000114997, 9.62193e-05, + 6.76356e-05, 4.08901e-05, 2.31617e-05, 1.52301e-05, 1.52593e-05, 2.32485e-05, 4.10021e-05, 6.77051e-05, + 9.81138e-05, 0.000103432, 9.80899e-05, 8.29138e-05, 6.15808e-05, 4.0922e-05, 2.72051e-05, 2.26743e-05, + 2.73074e-05, 4.11016e-05, 6.17575e-05, 8.3011e-05, 9.09546e-05, 9.09482e-05, 8.99295e-05, 8.29393e-05, + 6.77091e-05, 5.02057e-05, 3.92875e-05, 3.93831e-05, 5.04644e-05, 6.80165e-05, 8.31457e-05, 8.9998e-05, + 9.10633e-05, 0.000103727, 0.000115365, 0.000110745, 9.21349e-05, 7.67424e-05, 7.69412e-05, 9.2585e-05, + 0.000111041, 0.00011522, 0.000103358, 9.08835e-05, 0.000103701, 0.000124504, 0.000134884, 0.000122512, + 0.000100863, 9.11523e-05, 0.000101495, 0.00012339, 0.0001354, 0.00012448, 0.000103513, 9.3817e-05, + 0.000115401, 0.000134897, 0.00013461, 0.000114867, 9.70076e-05, 9.74646e-05, 0.000116038, 0.000135857, + 0.000135583, 0.000115536, 9.7247e-05, 9.72654e-05, 0.000110854, 0.000122458, 0.000114721, 9.7906e-05, + 9.01702e-05, 9.88692e-05, 0.000116222, 0.00012375, 0.000111506, 9.16747e-05, 8.26758e-05, 9.1491e-05, + 9.21537e-05, 0.00010055, 9.65106e-05, 8.97913e-05, 9.02754e-05, 9.7747e-05, 0.000101942, 9.31185e-05, + 7.5218e-05, 6.17738e-05, 6.16731e-05, 7.47928e-05, 7.64941e-05, 9.04369e-05, 9.64812e-05, 9.79791e-05, + 9.72543e-05, 9.15561e-05, 7.7423e-05, 5.79902e-05, 4.20914e-05, 3.62082e-05, 4.1915e-05, 5.74885e-05, + 7.63542e-05, 0.000100344, 0.000114587, 0.000114905, 0.000101082, 7.70694e-05, 5.08717e-05, 3.09099e-05, + 2.10637e-05, 2.10258e-05, 3.07413e-05, 5.0444e-05, 9.17286e-05, 0.000122015, 0.000134293, 0.000122399, + 9.22065e-05, 5.7515e-05, 3.07442e-05, 1.63273e-05, 1.21628e-05, 1.62989e-05, 3.06228e-05, 5.72021e-05, + 0.000110202, 0.000134277, 0.00013443, 0.000110521, 7.44908e-05, 4.16398e-05, 2.0846e-05, 1.20913e-05, + 1.20963e-05, 2.08422e-05, 4.15524e-05, 7.42453e-05, 0.000114719, 0.000123921, 0.000114978, 9.1113e-05, + 6.12461e-05, 3.58088e-05, 2.07988e-05, 1.62058e-05, 2.08303e-05, 3.58149e-05, 6.11144e-05, 9.0823e-05, + 0.000103218, 0.000103394, 9.70724e-05, 8.236e-05, 6.12713e-05, 4.15842e-05, 3.05734e-05, 3.0615e-05, + 4.16597e-05, 6.12289e-05, 8.20841e-05, 9.66965e-05, 9.08957e-05, 9.38534e-05, 9.72175e-05, 9.12804e-05, + 7.45219e-05, 5.7346e-05, 5.05292e-05, 5.75136e-05, 7.46703e-05, 9.11503e-05, 9.6815e-05, 9.3506e-05, + 9.86094e-05, 0.000115747, 0.000123048, 0.000110663, 9.08732e-05, 8.20784e-05, 9.12166e-05, 0.000110974, + 0.000122855, 0.000115104, 9.80793e-05, 9.01144e-05, 0.000115677, 0.000135256, 0.000134858, 0.000114877, + 9.68091e-05, 9.71348e-05, 0.000115643, 0.000135466, 0.000135259, 0.000115324, 9.71789e-05, 9.73665e-05, + 0.000123007, 0.000134853, 0.000123983, 0.000103236, 9.38226e-05, 0.000104024, 0.000125149, 0.000135709, + 0.000123261, 0.000101352, 9.13447e-05, 0.000101393, 0.000110692, 0.000114818, 0.000103106, 9.08733e-05, + 9.13118e-05, 0.000104243, 0.000116106, 0.000111556, 9.282e-05, 7.71886e-05, 7.71179e-05, 9.2474e-05, + 9.08436e-05, 9.65136e-05, 9.33522e-05, 9.09421e-05, 9.4111e-05, 9.76827e-05, 9.18949e-05, 7.51509e-05, + 5.78519e-05, 5.08473e-05, 5.76128e-05, 7.453e-05, 8.18096e-05, 9.64211e-05, 0.00010304, 0.000103372, + 9.72367e-05, 8.26992e-05, 6.17002e-05, 4.19795e-05, 3.0861e-05, 3.07771e-05, 4.16703e-05, 6.10691e-05, + 9.05933e-05, 0.000114455, 0.000123711, 0.000114913, 9.12288e-05, 6.14839e-05, 3.60552e-05, 2.09796e-05, + 1.63161e-05, 2.08773e-05, 3.57783e-05, 6.0974e-05, 0.00011007, 0.000134092, 0.00013429, 0.000110516, + 7.45997e-05, 4.17636e-05, 2.09183e-05, 1.21148e-05, 1.20948e-05, 2.08283e-05, 4.15268e-05, 7.41847e-05, + 0.000122013, 0.000134236, 0.00012238, 9.22473e-05, 5.754e-05, 3.0698e-05, 1.62329e-05, 1.206e-05, + 1.62133e-05, 3.0595e-05, 5.72528e-05, 9.17953e-05, 0.000114645, 0.000114906, 0.000101072, 7.70042e-05, + 5.0684e-05, 3.06272e-05, 2.07683e-05, 2.07734e-05, 3.05934e-05, 5.04678e-05, 7.6513e-05, 0.000100497, + 9.79817e-05, 9.71761e-05, 9.1389e-05, 7.7092e-05, 5.7483e-05, 4.15174e-05, 3.56908e-05, 4.1552e-05, + 5.73798e-05, 7.66353e-05, 9.06577e-05, 9.66092e-05, 9.01536e-05, 9.74878e-05, 0.000101498, 9.245e-05, + 7.44172e-05, 6.10165e-05, 6.11036e-05, 7.45356e-05, 9.22486e-05, 0.000100826, 9.67187e-05, 8.98243e-05, + 9.70445e-05, 0.000111374, 0.00011095, 9.61412e-05, 8.26514e-05, 8.28281e-05, 9.64852e-05, 0.000111005, + 0.00011091, 9.64205e-05, 8.31343e-05, 8.34063e-05, 0.000111252, 0.000122974, 0.00011505, 9.789e-05, + 8.98579e-05, 9.83735e-05, 0.000115662, 0.000123223, 0.00011106, 9.13501e-05, 8.25301e-05, 9.16022e-05, + 0.000110875, 0.00011508, 0.000103296, 9.09165e-05, 9.12227e-05, 0.000104068, 0.000115891, 0.000111329, + 9.25934e-05, 7.69896e-05, 7.69925e-05, 9.24877e-05, 9.62098e-05, 9.79353e-05, 9.08547e-05, 8.68207e-05, + 9.14111e-05, 9.88162e-05, 9.70291e-05, 8.21707e-05, 6.48023e-05, 5.7497e-05, 6.46014e-05, 8.16684e-05, + 8.27292e-05, 8.97105e-05, 9.08607e-05, 9.11018e-05, 9.03403e-05, 8.34977e-05, 6.81965e-05, 5.04528e-05, + 3.92764e-05, 3.91645e-05, 5.00874e-05, 6.75631e-05, 8.26807e-05, 9.77966e-05, 0.000103231, 9.81339e-05, + 8.32174e-05, 6.19824e-05, 4.12142e-05, 2.73047e-05, 2.26135e-05, 2.71287e-05, 4.08387e-05, 6.14492e-05, + 9.5941e-05, 0.000114618, 0.000114753, 9.62806e-05, 6.79379e-05, 4.11991e-05, 2.33238e-05, 1.52523e-05, + 1.52009e-05, 2.31512e-05, 4.08889e-05, 6.75442e-05, 0.000110162, 0.000122095, 0.000110427, 8.17862e-05, + 5.0443e-05, 2.73845e-05, 1.52887e-05, 1.17873e-05, 1.52261e-05, 2.72218e-05, 5.01503e-05, 8.14217e-05, + 0.000110171, 0.000110381, 9.23012e-05, 6.48832e-05, 3.9473e-05, 2.27385e-05, 1.52364e-05, 1.52218e-05, + 2.26613e-05, 3.92454e-05, 6.446e-05, 9.18326e-05, 9.60882e-05, 9.12528e-05, 7.71986e-05, 5.7831e-05, + 3.94017e-05, 2.72065e-05, 2.31332e-05, 2.71896e-05, 3.92494e-05, 5.73943e-05, 7.65381e-05, 9.07352e-05, + 8.31427e-05, 8.27674e-05, 7.73859e-05, 6.49247e-05, 5.02016e-05, 4.07965e-05, 4.08239e-05, 5.01779e-05, + 6.46007e-05, 7.66709e-05, 8.19891e-05, 8.28065e-05, 8.35102e-05, 9.18766e-05, 9.27847e-05, 8.17862e-05, + 6.74957e-05, 6.13643e-05, 6.76295e-05, 8.17635e-05, 9.22908e-05, 9.10504e-05, 8.28937e-05, 7.87637e-05, + 8.22849e-05, 9.26854e-05, 9.12148e-05, 8.27857e-05, 7.84198e-05, 8.30329e-05, 9.14518e-05, 9.2624e-05, + 8.19604e-05, 6.79017e-05, 6.18754e-05, 6.81775e-05, 9.25767e-05, 0.000101186, 9.70021e-05, 8.99369e-05, + 9.01047e-05, 9.73949e-05, 0.000101531, 9.26836e-05, 7.47587e-05, 6.13449e-05, 6.13879e-05, 7.48154e-05, + 9.12466e-05, 9.71234e-05, 9.38859e-05, 9.12418e-05, 9.41784e-05, 9.75881e-05, 9.16882e-05, 7.48419e-05, + 5.7471e-05, 5.04671e-05, 5.735e-05, 7.45579e-05, 8.30465e-05, 9.01483e-05, 9.12569e-05, 9.13645e-05, + 9.0462e-05, 8.35058e-05, 6.81106e-05, 5.029e-05, 3.90704e-05, 3.89626e-05, 4.99716e-05, 6.76468e-05, + 7.87113e-05, 9.01335e-05, 9.39391e-05, 9.02488e-05, 7.89857e-05, 6.16455e-05, 4.33448e-05, 3.03039e-05, + 2.5719e-05, 3.00896e-05, 4.29655e-05, 6.12441e-05, 8.30431e-05, 9.69831e-05, 9.70005e-05, 8.31465e-05, + 6.15899e-05, 4.05755e-05, 2.57776e-05, 1.86682e-05, 1.85838e-05, 2.55399e-05, 4.02659e-05, 6.13476e-05, + 9.10058e-05, 0.000100754, 9.10671e-05, 6.79588e-05, 4.34991e-05, 2.59208e-05, 1.66364e-05, 1.38535e-05, + 1.65237e-05, 2.57166e-05, 4.32744e-05, 6.78031e-05, 9.19258e-05, 9.2011e-05, 7.46443e-05, 5.05692e-05, + 3.07138e-05, 1.89438e-05, 1.39542e-05, 1.39193e-05, 1.88335e-05, 3.0524e-05, 5.0329e-05, 7.44332e-05, + 8.14517e-05, 7.45835e-05, 5.78007e-05, 3.96656e-05, 2.62394e-05, 1.8878e-05, 1.66234e-05, 1.88392e-05, + 2.61126e-05, 3.9394e-05, 5.74216e-05, 7.42891e-05, 6.77927e-05, 6.1626e-05, 5.10893e-05, 3.96228e-05, + 3.05259e-05, 2.57029e-05, 2.57095e-05, 3.0487e-05, 3.94058e-05, 5.06384e-05, 6.11215e-05, 6.75673e-05, + 6.20323e-05, 6.18517e-05, 5.79597e-05, 5.04221e-05, 4.31041e-05, 4.01789e-05, 4.31609e-05, 5.03565e-05, + 5.75884e-05, 6.12606e-05, 6.15807e-05, 6.13564e-05, 6.83477e-05, 7.51768e-05, 7.48743e-05, 6.76831e-05, + 6.10303e-05, 6.11212e-05, 6.78223e-05, 7.47709e-05, 7.47231e-05, 6.78197e-05, 6.13917e-05, 6.16178e-05, + 6.49478e-05, 7.71124e-05, 8.24084e-05, 8.30366e-05, 8.3113e-05, 8.2574e-05, 7.72343e-05, 6.49572e-05, + 5.03889e-05, 4.1034e-05, 4.10616e-05, 5.04397e-05, 7.7096e-05, 9.14035e-05, 9.73827e-05, 9.85289e-05, + 9.745e-05, 9.15351e-05, 7.72625e-05, 5.76774e-05, 4.16496e-05, 3.57343e-05, 4.15711e-05, 5.75326e-05, + 8.26488e-05, 9.76164e-05, 0.000104147, 0.000104112, 9.75951e-05, 8.27725e-05, 6.15501e-05, 4.16477e-05, + 3.04254e-05, 3.03387e-05, 4.14158e-05, 6.12942e-05, 8.35527e-05, 9.88914e-05, 0.000104181, 9.87409e-05, + 8.34934e-05, 6.20137e-05, 4.10679e-05, 2.70421e-05, 2.22973e-05, 2.68419e-05, 4.07662e-05, 6.18287e-05, + 8.3592e-05, 9.75876e-05, 9.74655e-05, 8.34024e-05, 6.16774e-05, 4.05533e-05, 2.56844e-05, 1.85318e-05, + 1.8432e-05, 2.54295e-05, 4.03112e-05, 6.16577e-05, 8.26502e-05, 9.12599e-05, 8.24937e-05, 6.20038e-05, + 4.06802e-05, 2.55355e-05, 1.75271e-05, 1.50834e-05, 1.73705e-05, 2.53091e-05, 4.05511e-05, 6.20811e-05, + 7.68584e-05, 7.68226e-05, 6.14732e-05, 4.13786e-05, 2.60704e-05, 1.77422e-05, 1.44378e-05, 1.43768e-05, + 1.75887e-05, 2.5905e-05, 4.12998e-05, 6.1503e-05, 6.44774e-05, 5.74996e-05, 4.19824e-05, 2.76574e-05, + 1.90971e-05, 1.54284e-05, 1.44949e-05, 1.53584e-05, 1.89738e-05, 2.75087e-05, 4.18484e-05, 5.74214e-05, + 5.01704e-05, 4.18764e-05, 3.10576e-05, 2.30361e-05, 1.90141e-05, 1.76813e-05, 1.76715e-05, 1.89671e-05, + 2.29164e-05, 3.08538e-05, 4.1656e-05, 5.00712e-05, 4.11307e-05, 3.62124e-05, 3.10515e-05, 2.74997e-05, + 2.58148e-05, 2.53961e-05, 2.58429e-05, 2.74708e-05, 3.08846e-05, 3.59342e-05, 4.09046e-05, 4.31158e-05, + 4.13051e-05, 4.20711e-05, 4.19582e-05, 4.10662e-05, 4.02686e-05, 4.03232e-05, 4.1151e-05, 4.19172e-05, + 4.18481e-05, 4.10294e-05, 4.03126e-05, 4.04364e-05, 5.06155e-05, 5.78197e-05, 6.1418e-05, 6.16014e-05, + 6.12029e-05, 6.17377e-05, 6.15337e-05, 5.77658e-05, 5.04237e-05, 4.32622e-05, 4.04156e-05, 4.34227e-05, + 5.778e-05, 7.72949e-05, 9.16478e-05, 9.68004e-05, 9.15827e-05, 7.72559e-05, 5.78292e-05, 3.94324e-05, + 2.72353e-05, 2.31232e-05, 2.71658e-05, 3.9334e-05, 7.74069e-05, 0.000101898, 0.000116062, 0.00011591, + 0.000101613, 7.72834e-05, 5.08426e-05, 3.06695e-05, 2.06929e-05, 2.06281e-05, 3.05117e-05, 5.07404e-05, + 9.21132e-05, 0.000116379, 0.000125368, 0.000115951, 9.17105e-05, 6.15938e-05, 3.59114e-05, 2.06762e-05, + 1.59391e-05, 2.05251e-05, 3.57262e-05, 6.16439e-05, 9.75006e-05, 0.000116315, 0.000116028, 9.69599e-05, + 6.81701e-05, 4.11648e-05, 2.31304e-05, 1.497e-05, 1.48831e-05, 2.2922e-05, 4.10572e-05, 6.84373e-05, + 9.20819e-05, 0.000101742, 9.16747e-05, 6.81962e-05, 4.35172e-05, 2.5825e-05, 1.64692e-05, 1.36392e-05, + 1.63083e-05, 2.56285e-05, 4.35352e-05, 6.85557e-05, 7.72709e-05, 7.7123e-05, 6.16001e-05, 4.13891e-05, + 2.60307e-05, 1.76754e-05, 1.43446e-05, 1.42662e-05, 1.74955e-05, 2.58979e-05, 4.14633e-05, 6.18535e-05, + 5.75279e-05, 5.07178e-05, 3.61754e-05, 2.3609e-05, 1.68921e-05, 1.45595e-05, 1.41095e-05, 1.44533e-05, + 1.6751e-05, 2.35235e-05, 3.61993e-05, 5.07919e-05, 3.91875e-05, 3.08059e-05, 2.11715e-05, 1.55836e-05, + 1.41639e-05, 1.45683e-05, 1.45369e-05, 1.40858e-05, 1.54888e-05, 2.10853e-05, 3.07491e-05, 3.91687e-05, + 2.72276e-05, 2.10439e-05, 1.6526e-05, 1.55049e-05, 1.67723e-05, 1.76942e-05, 1.67656e-05, 1.54714e-05, + 1.64506e-05, 2.09369e-05, 2.71419e-05, 3.02327e-05, 2.32975e-05, 2.10623e-05, 2.10794e-05, 2.33753e-05, + 2.58044e-05, 2.58327e-05, 2.3421e-05, 2.10763e-05, 2.09878e-05, 2.31935e-05, 2.55737e-05, 2.56238e-05, + 2.73837e-05, 3.08709e-05, 3.60198e-05, 4.10568e-05, 4.32392e-05, 4.11388e-05, 3.61005e-05, 3.08807e-05, + 2.73295e-05, 2.56666e-05, 2.52632e-05, 2.57222e-05, 3.94509e-05, 5.0844e-05, 6.14707e-05, 6.79005e-05, + 6.79324e-05, 6.15427e-05, 5.091e-05, 3.94853e-05, 3.04655e-05, 2.5677e-05, 2.56766e-05, 3.04566e-05, + 6.52224e-05, 9.31688e-05, 0.000111636, 0.000111426, 9.27543e-05, 6.49682e-05, 3.94451e-05, 2.26841e-05, + 1.51496e-05, 1.51048e-05, 2.25892e-05, 3.94453e-05, 9.33948e-05, 0.000124097, 0.000136045, 0.000123471, + 9.27359e-05, 5.77238e-05, 3.07261e-05, 1.61489e-05, 1.19044e-05, 1.60545e-05, 3.06629e-05, 5.7974e-05, + 0.000112213, 0.00013634, 0.000135895, 0.000111323, 7.48859e-05, 4.17808e-05, 2.07768e-05, 1.18839e-05, + 1.18261e-05, 2.06603e-05, 4.18627e-05, 7.5471e-05, 0.000112075, 0.000123759, 0.000111372, 8.21093e-05, + 5.04555e-05, 2.72668e-05, 1.50951e-05, 1.15417e-05, 1.49795e-05, 2.71821e-05, 5.07176e-05, 8.2836e-05, + 9.3071e-05, 9.27882e-05, 7.49231e-05, 5.05499e-05, 3.05981e-05, 1.87928e-05, 1.37615e-05, 1.36923e-05, + 1.86483e-05, 3.05759e-05, 5.08632e-05, 7.54661e-05, 6.48898e-05, 5.76692e-05, 4.19495e-05, 2.75549e-05, + 1.89906e-05, 1.5311e-05, 1.43475e-05, 1.51972e-05, 1.88649e-05, 2.75587e-05, 4.21453e-05, 5.78966e-05, + 3.9248e-05, 3.07889e-05, 2.1117e-05, 1.55287e-05, 1.41142e-05, 1.45114e-05, 1.44648e-05, 1.40122e-05, + 1.54417e-05, 2.10965e-05, 3.08335e-05, 3.92814e-05, 2.26041e-05, 1.63605e-05, 1.22984e-05, 1.20185e-05, + 1.40794e-05, 1.53786e-05, 1.40393e-05, 1.19595e-05, 1.22387e-05, 1.63121e-05, 2.25775e-05, 2.58083e-05, + 1.52133e-05, 1.21873e-05, 1.22459e-05, 1.54024e-05, 1.88995e-05, 1.89024e-05, 1.54004e-05, 1.2224e-05, + 1.21442e-05, 1.51648e-05, 1.8568e-05, 1.85904e-05, 1.52431e-05, 1.63375e-05, 2.09782e-05, 2.73461e-05, + 3.04946e-05, 2.7379e-05, 2.10084e-05, 1.63406e-05, 1.52236e-05, 1.64328e-05, 1.73416e-05, 1.64535e-05, + 2.27128e-05, 3.08087e-05, 4.18391e-05, 5.03947e-05, 5.04006e-05, 4.18566e-05, 3.08344e-05, 2.27398e-05, + 1.87218e-05, 1.74033e-05, 1.73951e-05, 1.87007e-05, 3.9473e-05, 5.78588e-05, 7.50138e-05, 8.2125e-05, + 7.48966e-05, 5.7753e-05, 3.94666e-05, 2.60485e-05, 1.87206e-05, 1.64654e-05, 1.86666e-05, 2.59867e-05, + 8.27404e-05, 0.000111934, 0.00012365, 0.000111275, 8.1998e-05, 5.03825e-05, 2.7291e-05, 1.52076e-05, + 1.17062e-05, 1.51701e-05, 2.73422e-05, 5.0759e-05, 0.000112183, 0.000136224, 0.000135712, 0.000111112, + 7.47242e-05, 4.17312e-05, 2.08291e-05, 1.19892e-05, 1.19634e-05, 2.08234e-05, 4.20088e-05, 7.55401e-05, + 0.000124106, 0.000135883, 0.000123173, 9.24298e-05, 5.75206e-05, 3.06425e-05, 1.61379e-05, 1.19258e-05, + 1.61001e-05, 3.0743e-05, 5.80896e-05, 9.35032e-05, 0.000111652, 0.000111227, 9.24528e-05, 6.47171e-05, + 3.92995e-05, 2.26094e-05, 1.51019e-05, 1.50692e-05, 2.25857e-05, 3.9522e-05, 6.53946e-05, 9.33417e-05, + 8.20955e-05, 7.47285e-05, 5.75932e-05, 3.94005e-05, 2.60533e-05, 1.87413e-05, 1.64766e-05, 1.86833e-05, + 2.60547e-05, 3.96349e-05, 5.80821e-05, 7.51669e-05, 5.02863e-05, 4.17488e-05, 3.08309e-05, 2.28454e-05, + 1.88855e-05, 1.75709e-05, 1.75375e-05, 1.88254e-05, 2.28457e-05, 3.09539e-05, 4.19444e-05, 5.03859e-05, + 2.71935e-05, 2.09331e-05, 1.64039e-05, 1.54095e-05, 1.6702e-05, 1.76184e-05, 1.66633e-05, 1.53633e-05, + 1.63794e-05, 2.09409e-05, 2.72145e-05, 3.02914e-05, 1.51892e-05, 1.21439e-05, 1.21997e-05, 1.53637e-05, + 1.88666e-05, 1.88593e-05, 1.5342e-05, 1.21656e-05, 1.21029e-05, 1.51529e-05, 1.85798e-05, 1.85949e-05, + 1.17432e-05, 1.21202e-05, 1.63204e-05, 2.27422e-05, 2.60479e-05, 2.27438e-05, 1.631e-05, 1.20929e-05, + 1.17078e-05, 1.37042e-05, 1.50048e-05, 1.37306e-05, 1.52148e-05, 2.09101e-05, 3.07645e-05, 3.93638e-05, + 3.93532e-05, 3.07402e-05, 2.0885e-05, 1.51962e-05, 1.3756e-05, 1.41788e-05, 1.41814e-05, 1.37657e-05, + 2.73366e-05, 4.19078e-05, 5.77672e-05, 6.48865e-05, 5.76395e-05, 4.17704e-05, 2.72732e-05, 1.87191e-05, + 1.51143e-05, 1.42244e-05, 1.50955e-05, 1.87179e-05, 5.06906e-05, 7.52524e-05, 9.29474e-05, 9.2741e-05, + 7.48323e-05, 5.03879e-05, 3.04564e-05, 1.87464e-05, 1.38085e-05, 1.37865e-05, 1.87196e-05, 3.05405e-05, + 9.74795e-05, 0.000116125, 0.000115675, 9.64954e-05, 6.77666e-05, 4.1002e-05, 2.32303e-05, 1.52373e-05, + 1.52473e-05, 2.33342e-05, 4.14095e-05, 6.86143e-05, 0.00011628, 0.000124984, 0.000115345, 9.10867e-05, + 6.11978e-05, 3.58388e-05, 2.0838e-05, 1.6225e-05, 2.08974e-05, 3.6138e-05, 6.19849e-05, 9.22708e-05, + 0.000115881, 0.000115395, 0.000100903, 7.66527e-05, 5.04949e-05, 3.06063e-05, 2.08002e-05, 2.08273e-05, + 3.07772e-05, 5.10388e-05, 7.76675e-05, 0.000102004, 9.6622e-05, 9.11078e-05, 7.66659e-05, 5.73619e-05, + 3.91961e-05, 2.7183e-05, 2.3168e-05, 2.72634e-05, 3.94836e-05, 5.79917e-05, 7.75239e-05, 9.17518e-05, + 6.77806e-05, 6.12041e-05, 5.05518e-05, 3.92544e-05, 3.03881e-05, 2.56935e-05, 2.57244e-05, 3.0515e-05, + 3.95455e-05, 5.10054e-05, 6.16552e-05, 6.79733e-05, 4.09585e-05, 3.58647e-05, 3.07075e-05, 2.72891e-05, + 2.57428e-05, 2.53784e-05, 2.57997e-05, 2.74051e-05, 3.08748e-05, 3.60454e-05, 4.10812e-05, 4.31817e-05, + 2.31814e-05, 2.08745e-05, 2.08989e-05, 2.32603e-05, 2.57515e-05, 2.57767e-05, 2.33168e-05, 2.09521e-05, + 2.09063e-05, 2.31931e-05, 2.56191e-05, 2.56172e-05, 1.51909e-05, 1.62382e-05, 2.08659e-05, 2.72571e-05, + 3.04249e-05, 2.7288e-05, 2.08881e-05, 1.62277e-05, 1.51569e-05, 1.64297e-05, 1.73737e-05, 1.64598e-05, + 1.51838e-05, 2.08412e-05, 3.06768e-05, 3.92843e-05, 3.92823e-05, 3.0662e-05, 2.08056e-05, 1.51367e-05, + 1.3732e-05, 1.41918e-05, 1.42078e-05, 1.37723e-05, 2.32265e-05, 3.5956e-05, 5.07332e-05, 5.75853e-05, + 5.06296e-05, 3.58225e-05, 2.31252e-05, 1.64447e-05, 1.42211e-05, 1.38692e-05, 1.4242e-05, 1.65e-05, + 4.12571e-05, 6.16827e-05, 7.72212e-05, 7.70569e-05, 6.13316e-05, 4.09608e-05, 2.56398e-05, 1.74473e-05, + 1.42779e-05, 1.42823e-05, 1.74887e-05, 2.57862e-05, 6.84855e-05, 9.19718e-05, 0.000101609, 9.14239e-05, + 6.78236e-05, 4.31905e-05, 2.5698e-05, 1.65497e-05, 1.38525e-05, 1.65716e-05, 2.58421e-05, 4.36037e-05, + 9.88708e-05, 0.000103874, 9.81691e-05, 8.28256e-05, 6.15396e-05, 4.0977e-05, 2.72947e-05, 2.27648e-05, + 2.74383e-05, 4.13847e-05, 6.23138e-05, 8.37999e-05, 0.000103912, 0.000103509, 9.67478e-05, 8.19822e-05, + 6.1124e-05, 4.16613e-05, 3.07474e-05, 3.08425e-05, 4.20181e-05, 6.18685e-05, 8.30481e-05, 9.77341e-05, + 9.82092e-05, 9.67521e-05, 9.06468e-05, 7.65236e-05, 5.7328e-05, 4.16696e-05, 3.59813e-05, 4.19427e-05, + 5.79567e-05, 7.74948e-05, 9.16855e-05, 9.74247e-05, 8.28789e-05, 8.19976e-05, 7.65258e-05, 6.44141e-05, + 5.01504e-05, 4.10349e-05, 4.11857e-05, 5.06194e-05, 6.51737e-05, 7.73949e-05, 8.26825e-05, 8.31363e-05, + 6.15958e-05, 6.11302e-05, 5.73028e-05, 5.01146e-05, 4.31576e-05, 4.04287e-05, 4.34557e-05, 5.06456e-05, + 5.79151e-05, 6.16386e-05, 6.18737e-05, 6.13428e-05, 4.09852e-05, 4.16046e-05, 4.15638e-05, 4.09067e-05, + 4.03309e-05, 4.04668e-05, 4.12492e-05, 4.19597e-05, 4.19134e-05, 4.1155e-05, 4.0413e-05, 4.03626e-05, + 2.72162e-05, 3.05892e-05, 3.57505e-05, 4.09116e-05, 4.3206e-05, 4.11048e-05, 3.60004e-05, 3.07648e-05, + 2.72865e-05, 2.57221e-05, 2.53449e-05, 2.57118e-05, 2.25935e-05, 3.05611e-05, 4.15529e-05, 5.01706e-05, + 5.02358e-05, 4.16825e-05, 3.06465e-05, 2.26033e-05, 1.869e-05, 1.74698e-05, 1.7486e-05, 1.87176e-05, + 2.7179e-05, 4.16129e-05, 5.74309e-05, 6.46102e-05, 5.74249e-05, 4.15782e-05, 2.71151e-05, 1.86346e-05, + 1.51183e-05, 1.429e-05, 1.51572e-05, 1.86996e-05, 4.10804e-05, 6.14229e-05, 7.69694e-05, 7.68745e-05, + 6.12028e-05, 4.08569e-05, 2.55658e-05, 1.74179e-05, 1.42905e-05, 1.4313e-05, 1.74965e-05, 2.57203e-05, + 6.2066e-05, 8.27082e-05, 9.13211e-05, 8.2338e-05, 6.1582e-05, 4.02122e-05, 2.52532e-05, 1.74845e-05, + 1.52059e-05, 1.75491e-05, 2.54369e-05, 4.05731e-05, 8.36872e-05, 9.7572e-05, 9.72614e-05, 8.29754e-05, + 6.1194e-05, 4.02683e-05, 2.57056e-05, 1.87943e-05, 1.88352e-05, 2.58781e-05, 4.06858e-05, 6.1881e-05, + 9.11604e-05, 9.09433e-05, 8.97738e-05, 8.27768e-05, 6.76535e-05, 5.02587e-05, 3.93946e-05, 3.95204e-05, + 5.06554e-05, 6.83027e-05, 8.35192e-05, 9.03549e-05, 9.09251e-05, 9.34907e-05, 9.66706e-05, 9.08773e-05, + 7.44488e-05, 5.75375e-05, 5.08561e-05, 5.79338e-05, 7.52098e-05, 9.18113e-05, 9.74707e-05, 9.39304e-05, + 8.97876e-05, 9.66831e-05, 0.000100632, 9.19744e-05, 7.44687e-05, 6.1424e-05, 6.16938e-05, 7.5243e-05, + 9.3048e-05, 0.000101631, 9.73214e-05, 8.99967e-05, 8.28788e-05, 9.0908e-05, 9.19405e-05, 8.14719e-05, + 6.77283e-05, 6.19263e-05, 6.83383e-05, 8.25151e-05, 9.30239e-05, 9.16713e-05, 8.3231e-05, 7.86483e-05, + 6.77747e-05, 7.43941e-05, 7.42783e-05, 6.75513e-05, 6.13236e-05, 6.16367e-05, 6.83729e-05, 7.52619e-05, + 7.5154e-05, 6.81697e-05, 6.15483e-05, 6.14381e-05, 5.02524e-05, 5.7278e-05, 6.09839e-05, 6.14804e-05, + 6.13631e-05, 6.19952e-05, 6.17372e-05, 5.79135e-05, 5.05996e-05, 4.34772e-05, 4.05653e-05, 4.33571e-05, + 3.91853e-05, 5.03518e-05, 6.09775e-05, 6.76033e-05, 6.78186e-05, 6.14673e-05, 5.08104e-05, 3.94382e-05, + 3.05512e-05, 2.58703e-05, 2.58594e-05, 3.04716e-05, 3.91182e-05, 5.72138e-05, 7.43163e-05, 8.15969e-05, + 7.4541e-05, 5.74709e-05, 3.92547e-05, 2.59746e-05, 1.88019e-05, 1.66394e-05, 1.88158e-05, 2.59525e-05, + 5.01373e-05, 7.44284e-05, 9.21485e-05, 9.21714e-05, 7.44557e-05, 5.01126e-05, 3.02846e-05, 1.87074e-05, + 1.38806e-05, 1.39013e-05, 1.87651e-05, 3.03507e-05, 6.7845e-05, 9.12321e-05, 0.000101032, 9.10848e-05, + 6.76191e-05, 4.3037e-05, 2.56028e-05, 1.65294e-05, 1.38838e-05, 1.65946e-05, 2.57473e-05, 4.32516e-05, + 8.32788e-05, 9.72228e-05, 9.707e-05, 8.29066e-05, 6.11549e-05, 4.02184e-05, 2.56613e-05, 1.877e-05, + 1.8817e-05, 2.58228e-05, 4.05219e-05, 6.15633e-05, 9.03046e-05, 9.39009e-05, 8.99376e-05, 7.84724e-05, + 6.11747e-05, 4.31508e-05, 3.04285e-05, 2.60745e-05, 3.05872e-05, 4.35037e-05, 6.17051e-05, 7.90354e-05, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8.66315e-05, 9.09147e-05, 9.80789e-05, 9.62719e-05, 8.16601e-05, 6.46465e-05, 5.76473e-05, 6.49856e-05, + 8.21971e-05, 9.67325e-05, 9.82952e-05, 9.0959e-05, 9.08927e-05, 0.00010338, 0.000114993, 0.000110547, + 9.21777e-05, 7.69547e-05, 7.72459e-05, 9.29467e-05, 0.00011143, 0.000115579, 0.000103597, 9.09296e-05, + 9.81232e-05, 0.000115019, 0.000122424, 0.000110462, 9.1113e-05, 8.25959e-05, 9.18814e-05, 0.000111692, + 0.000123525, 0.000115612, 9.83101e-05, 8.99962e-05, 9.64209e-05, 0.000110552, 0.000110364, 9.608e-05, + 8.30589e-05, 8.35155e-05, 9.72855e-05, 0.000111778, 0.000111559, 9.68681e-05, 8.32914e-05, 8.31867e-05, + 8.17714e-05, 9.19845e-05, 9.07261e-05, 8.27473e-05, 7.87765e-05, 8.35966e-05, 9.204e-05, 9.31491e-05, + 8.24251e-05, 6.82798e-05, 6.20687e-05, 6.80504e-05, 6.45286e-05, 7.64225e-05, 8.18102e-05, 8.27806e-05, + 8.31736e-05, 8.277e-05, 7.74392e-05, 6.51948e-05, 5.07146e-05, 4.14032e-05, 4.13397e-05, 5.04347e-05, + 5.72298e-05, 7.63501e-05, 9.06972e-05, 9.61543e-05, 9.12456e-05, 7.70782e-05, 5.77594e-05, 3.95237e-05, + 2.74913e-05, 2.34588e-05, 2.74303e-05, 3.92884e-05, 6.43143e-05, 9.18085e-05, 0.000110324, 0.000110512, + 9.22118e-05, 6.46467e-05, 3.93067e-05, 2.27347e-05, 1.53387e-05, 1.53446e-05, 2.27166e-05, 3.9166e-05, + 8.14631e-05, 0.000110395, 0.000122401, 0.000110528, 8.15905e-05, 5.01413e-05, 2.71865e-05, 1.52331e-05, + 1.1814e-05, 1.52729e-05, 2.72298e-05, 5.01151e-05, 9.62219e-05, 0.000114984, 0.000114996, 9.62192e-05, + 6.76351e-05, 4.08854e-05, 2.315e-05, 1.52157e-05, 1.52495e-05, 2.32447e-05, 4.10012e-05, 6.77049e-05, + 9.81136e-05, 0.000103432, 9.80894e-05, 8.29136e-05, 6.15804e-05, 4.09188e-05, 2.71988e-05, 2.2668e-05, + 2.73037e-05, 4.11003e-05, 6.1757e-05, 8.30106e-05, 9.09542e-05, 9.09475e-05, 8.99288e-05, 8.29392e-05, + 6.77091e-05, 5.02049e-05, 3.92862e-05, 3.9382e-05, 5.04639e-05, 6.80162e-05, 8.31456e-05, 8.99978e-05, + 9.10625e-05, 0.000103726, 0.000115364, 0.000110745, 9.21347e-05, 7.67423e-05, 7.69412e-05, 9.25849e-05, + 0.000111041, 0.00011522, 0.000103358, 9.08829e-05, 0.000103699, 0.000124502, 0.000134882, 0.000122511, + 0.000100862, 9.11519e-05, 0.000101494, 0.000123389, 0.0001354, 0.000124479, 0.000103512, 9.38161e-05, + 0.000115398, 0.000134894, 0.000134608, 0.000114866, 9.70069e-05, 9.74638e-05, 0.000116037, 0.000135856, + 0.000135582, 0.000115535, 9.72462e-05, 9.72638e-05, 0.000110852, 0.000122456, 0.00011472, 9.7905e-05, + 9.01691e-05, 9.88684e-05, 0.000116222, 0.000123749, 0.000111506, 9.16742e-05, 8.26748e-05, 9.14892e-05, + 9.21528e-05, 0.000100549, 9.65096e-05, 8.97903e-05, 9.02746e-05, 9.77465e-05, 0.000101942, 9.31185e-05, + 7.5218e-05, 6.17737e-05, 6.16726e-05, 7.47919e-05, 7.6493e-05, 9.04358e-05, 9.64803e-05, 9.79785e-05, + 9.72538e-05, 9.15559e-05, 7.7423e-05, 5.79898e-05, 4.20909e-05, 3.6208e-05, 4.1915e-05, 5.7488e-05, + 7.63532e-05, 0.000100344, 0.000114586, 0.000114905, 0.000101081, 7.70692e-05, 5.08705e-05, 3.09068e-05, + 2.10605e-05, 2.10244e-05, 3.0741e-05, 5.04433e-05, 9.17285e-05, 0.000122015, 0.000134293, 0.000122399, + 9.22064e-05, 5.75138e-05, 3.07395e-05, 1.63193e-05, 1.21562e-05, 1.62963e-05, 3.06224e-05, 5.72019e-05, + 0.000110202, 0.000134277, 0.000134429, 0.000110521, 7.44905e-05, 4.16369e-05, 2.08379e-05, 1.20808e-05, + 1.20892e-05, 2.08398e-05, 4.15521e-05, 7.42453e-05, 0.000114718, 0.000123921, 0.000114978, 9.11128e-05, + 6.12455e-05, 3.58052e-05, 2.07913e-05, 1.6198e-05, 2.0826e-05, 3.58136e-05, 6.1114e-05, 9.08227e-05, + 0.000103217, 0.000103393, 9.70718e-05, 8.23598e-05, 6.12709e-05, 4.15819e-05, 3.05696e-05, 3.06119e-05, + 4.16583e-05, 6.12284e-05, 8.20838e-05, 9.66963e-05, 9.0895e-05, 9.38527e-05, 9.7217e-05, 9.12803e-05, + 7.45217e-05, 5.73454e-05, 5.05284e-05, 5.75131e-05, 7.46702e-05, 9.11502e-05, 9.68149e-05, 9.35056e-05, + 9.86088e-05, 0.000115746, 0.000123047, 0.000110662, 9.08731e-05, 8.20784e-05, 9.12165e-05, 0.000110974, + 0.000122854, 0.000115104, 9.80787e-05, 9.0114e-05, 0.000115675, 0.000135254, 0.000134856, 0.000114877, + 9.6809e-05, 9.71345e-05, 0.000115643, 0.000135466, 0.000135258, 0.000115323, 9.71786e-05, 9.73658e-05, + 0.000123004, 0.000134851, 0.000123983, 0.000103235, 9.38218e-05, 0.000104024, 0.000125148, 0.000135708, + 0.00012326, 0.000101352, 9.13441e-05, 0.000101391, 0.000110691, 0.000114817, 0.000103105, 9.08721e-05, + 9.13109e-05, 0.000104243, 0.000116106, 0.000111556, 9.28199e-05, 7.71883e-05, 7.71169e-05, 9.24724e-05, + 9.08432e-05, 9.65127e-05, 9.3351e-05, 9.09411e-05, 9.41105e-05, 9.76826e-05, 9.18949e-05, 7.51509e-05, + 5.78519e-05, 5.08472e-05, 5.76124e-05, 7.45295e-05, 8.18087e-05, 9.64201e-05, 0.000103039, 0.000103371, + 9.72366e-05, 8.26992e-05, 6.17001e-05, 4.19793e-05, 3.08608e-05, 3.07771e-05, 4.16703e-05, 6.10686e-05, + 9.05927e-05, 0.000114455, 0.000123711, 0.000114913, 9.12288e-05, 6.14837e-05, 3.60544e-05, 2.09781e-05, + 1.63149e-05, 2.0877e-05, 3.57782e-05, 6.09735e-05, 0.00011007, 0.000134092, 0.00013429, 0.000110516, + 7.45996e-05, 4.17628e-05, 2.0916e-05, 1.21116e-05, 1.20928e-05, 2.08279e-05, 4.15268e-05, 7.41846e-05, + 0.000122013, 0.000134236, 0.00012238, 9.22471e-05, 5.75396e-05, 3.06965e-05, 1.62295e-05, 1.20562e-05, + 1.62114e-05, 3.05946e-05, 5.72527e-05, 9.17952e-05, 0.000114645, 0.000114906, 0.000101072, 7.70036e-05, + 5.06837e-05, 3.06257e-05, 2.07652e-05, 2.07706e-05, 3.05921e-05, 5.04672e-05, 7.65127e-05, 0.000100497, + 9.79813e-05, 9.71754e-05, 9.13883e-05, 7.70917e-05, 5.74829e-05, 4.15163e-05, 3.5689e-05, 4.15507e-05, + 5.73792e-05, 7.66351e-05, 9.06575e-05, 9.6609e-05, 9.01531e-05, 9.74872e-05, 0.000101497, 9.24498e-05, + 7.4417e-05, 6.1016e-05, 6.11031e-05, 7.45354e-05, 9.22485e-05, 0.000100825, 9.67183e-05, 8.98237e-05, + 9.70439e-05, 0.000111373, 0.000110949, 9.6141e-05, 8.26513e-05, 8.2828e-05, 9.64851e-05, 0.000111005, + 0.000110909, 9.64198e-05, 8.31339e-05, 8.34063e-05, 0.00011125, 0.000122972, 0.000115049, 9.78899e-05, + 8.98577e-05, 9.83733e-05, 0.000115662, 0.000123223, 0.00011106, 9.13499e-05, 8.25301e-05, 9.16015e-05, + 0.000110873, 0.000115079, 0.000103295, 9.09156e-05, 9.12219e-05, 0.000104067, 0.000115891, 0.000111329, + 9.25933e-05, 7.69896e-05, 7.69919e-05, 9.24861e-05, 9.62096e-05, 9.79348e-05, 9.08532e-05, 8.68193e-05, + 9.14106e-05, 9.88162e-05, 9.70291e-05, 8.21707e-05, 6.48022e-05, 5.74967e-05, 6.46006e-05, 8.16677e-05, + 8.27285e-05, 8.97089e-05, 9.08592e-05, 9.11012e-05, 9.03402e-05, 8.34976e-05, 6.81965e-05, 5.04528e-05, + 3.92763e-05, 3.91643e-05, 5.00872e-05, 6.7563e-05, 8.26795e-05, 9.77956e-05, 0.000103231, 9.81339e-05, + 8.32174e-05, 6.19824e-05, 4.12142e-05, 2.73047e-05, 2.26135e-05, 2.71286e-05, 4.08386e-05, 6.14486e-05, + 9.59406e-05, 0.000114618, 0.000114753, 9.62806e-05, 6.79378e-05, 4.1199e-05, 2.33236e-05, 1.5252e-05, + 1.52008e-05, 2.31512e-05, 4.08887e-05, 6.75437e-05, 0.000110162, 0.000122095, 0.000110427, 8.1786e-05, + 5.04425e-05, 2.7384e-05, 1.52882e-05, 1.17868e-05, 1.52259e-05, 2.72217e-05, 5.01501e-05, 8.14217e-05, + 0.000110171, 0.000110381, 9.23009e-05, 6.48822e-05, 3.94723e-05, 2.27382e-05, 1.52357e-05, 1.52209e-05, + 2.26608e-05, 3.9245e-05, 6.44599e-05, 9.18325e-05, 9.60882e-05, 9.12524e-05, 7.71975e-05, 5.783e-05, + 3.94015e-05, 2.72061e-05, 2.3132e-05, 2.71885e-05, 3.92488e-05, 5.7394e-05, 7.6538e-05, 9.07352e-05, + 8.31423e-05, 8.27667e-05, 7.73851e-05, 6.49244e-05, 5.02015e-05, 4.07957e-05, 4.08228e-05, 5.01773e-05, + 6.46006e-05, 7.66708e-05, 8.19889e-05, 8.28063e-05, 8.351e-05, 9.18762e-05, 9.27842e-05, 8.17859e-05, + 6.74954e-05, 6.13638e-05, 6.76291e-05, 8.17634e-05, 9.22907e-05, 9.10499e-05, 8.2893e-05, 7.87633e-05, + 8.22845e-05, 9.26847e-05, 9.12144e-05, 8.27857e-05, 7.84197e-05, 8.30327e-05, 9.14516e-05, 9.26237e-05, + 8.19596e-05, 6.79007e-05, 6.1875e-05, 6.81775e-05, 9.25758e-05, 0.000101185, 9.70021e-05, 8.99366e-05, + 9.01045e-05, 9.73948e-05, 0.000101531, 9.26834e-05, 7.47584e-05, 6.13447e-05, 6.13878e-05, 7.48148e-05, + 9.12463e-05, 9.71231e-05, 9.38848e-05, 9.12407e-05, 9.41781e-05, 9.75881e-05, 9.16881e-05, 7.48419e-05, + 5.7471e-05, 5.04669e-05, 5.73494e-05, 7.45571e-05, 8.30462e-05, 9.01466e-05, 9.12548e-05, 9.13636e-05, + 9.04619e-05, 8.35056e-05, 6.81103e-05, 5.02898e-05, 3.90701e-05, 3.89621e-05, 4.99712e-05, 6.76468e-05, + 7.87096e-05, 9.01314e-05, 9.39381e-05, 9.02487e-05, 7.89855e-05, 6.16451e-05, 4.33445e-05, 3.03036e-05, + 2.57187e-05, 3.00893e-05, 4.29654e-05, 6.12437e-05, 8.30418e-05, 9.69825e-05, 9.70005e-05, 8.31464e-05, + 6.15897e-05, 4.05753e-05, 2.57775e-05, 1.86681e-05, 1.85836e-05, 2.55398e-05, 4.02655e-05, 6.13465e-05, + 9.10055e-05, 0.000100754, 9.10671e-05, 6.79587e-05, 4.34987e-05, 2.59205e-05, 1.66363e-05, 1.38535e-05, + 1.65236e-05, 2.57164e-05, 4.32738e-05, 6.78025e-05, 9.19257e-05, 9.20109e-05, 7.46441e-05, 5.05682e-05, + 3.07125e-05, 1.89433e-05, 1.39541e-05, 1.39193e-05, 1.88334e-05, 3.05237e-05, 5.03287e-05, 7.44332e-05, + 8.14516e-05, 7.45834e-05, 5.77995e-05, 3.96636e-05, 2.62384e-05, 1.88778e-05, 1.66231e-05, 1.88389e-05, + 2.61124e-05, 3.93938e-05, 5.74216e-05, 7.42891e-05, 6.77926e-05, 6.16252e-05, 5.10875e-05, 3.96217e-05, + 3.05258e-05, 2.57025e-05, 2.57087e-05, 3.04867e-05, 3.94057e-05, 5.06384e-05, 6.11214e-05, 6.75672e-05, + 6.2032e-05, 6.18509e-05, 5.7959e-05, 5.0422e-05, 4.31037e-05, 4.01778e-05, 4.31602e-05, 5.03564e-05, + 5.75883e-05, 6.12602e-05, 6.15802e-05, 6.13561e-05, 6.83476e-05, 7.51764e-05, 7.4874e-05, 6.76828e-05, + 6.10298e-05, 6.11205e-05, 6.78221e-05, 7.47707e-05, 7.47225e-05, 6.78187e-05, 6.13909e-05, 6.16175e-05, + 6.49475e-05, 7.71121e-05, 8.24083e-05, 8.30366e-05, 8.31129e-05, 8.25739e-05, 7.7234e-05, 6.49567e-05, + 5.03879e-05, 4.10331e-05, 4.10612e-05, 5.04396e-05, 7.70957e-05, 9.14035e-05, 9.73825e-05, 9.85284e-05, + 9.74498e-05, 9.15351e-05, 7.72624e-05, 5.76772e-05, 4.16493e-05, 3.57341e-05, 4.15708e-05, 5.75321e-05, + 8.26488e-05, 9.76155e-05, 0.000104145, 0.000104111, 9.75948e-05, 8.27723e-05, 6.15499e-05, 4.16476e-05, + 3.04253e-05, 3.03385e-05, 4.14154e-05, 6.1294e-05, 8.35514e-05, 9.8889e-05, 0.000104179, 9.87406e-05, + 8.3493e-05, 6.20129e-05, 4.10672e-05, 2.70415e-05, 2.22969e-05, 2.68416e-05, 4.07661e-05, 6.18285e-05, + 8.35898e-05, 9.75861e-05, 9.74652e-05, 8.34022e-05, 6.16766e-05, 4.05523e-05, 2.56833e-05, 1.85309e-05, + 1.84314e-05, 2.54294e-05, 4.0311e-05, 6.16564e-05, 8.26492e-05, 9.12597e-05, 8.24936e-05, 6.20034e-05, + 4.06795e-05, 2.55347e-05, 1.75263e-05, 1.50827e-05, 1.73701e-05, 2.53089e-05, 4.05503e-05, 6.20796e-05, + 7.68583e-05, 7.68225e-05, 6.14728e-05, 4.13775e-05, 2.60689e-05, 1.77413e-05, 1.44374e-05, 1.43766e-05, + 1.75885e-05, 2.59044e-05, 4.12989e-05, 6.15025e-05, 6.44773e-05, 5.74994e-05, 4.19809e-05, 2.76546e-05, + 1.90951e-05, 1.54279e-05, 1.44949e-05, 1.53584e-05, 1.89736e-05, 2.75083e-05, 4.18481e-05, 5.74213e-05, + 5.01703e-05, 4.18752e-05, 3.10545e-05, 2.30333e-05, 1.90133e-05, 1.76812e-05, 1.76712e-05, 1.89671e-05, + 2.29162e-05, 3.08536e-05, 4.16559e-05, 5.00711e-05, 4.11303e-05, 3.62105e-05, 3.10493e-05, 2.74991e-05, + 2.58147e-05, 2.53952e-05, 2.58421e-05, 2.74706e-05, 3.08843e-05, 3.59338e-05, 4.09044e-05, 4.31158e-05, + 4.13046e-05, 4.20702e-05, 4.19578e-05, 4.10662e-05, 4.02676e-05, 4.03219e-05, 4.11503e-05, 4.19168e-05, + 4.18474e-05, 4.10286e-05, 4.03121e-05, 4.04362e-05, 5.06155e-05, 5.78195e-05, 6.14178e-05, 6.16009e-05, + 6.12021e-05, 6.17371e-05, 6.15333e-05, 5.77652e-05, 5.04226e-05, 4.32609e-05, 4.04148e-05, 4.34225e-05, + 5.77798e-05, 7.72948e-05, 9.16478e-05, 9.68003e-05, 9.15823e-05, 7.72554e-05, 5.78285e-05, 3.94314e-05, + 2.72343e-05, 2.31223e-05, 2.71654e-05, 3.93339e-05, 7.74068e-05, 0.000101898, 0.000116062, 0.000115909, + 0.000101612, 7.72829e-05, 5.08421e-05, 3.06689e-05, 2.06925e-05, 2.06279e-05, 3.05115e-05, 5.07401e-05, + 9.21128e-05, 0.000116377, 0.000125366, 0.00011595, 9.17101e-05, 6.15932e-05, 3.59107e-05, 2.06756e-05, + 1.59389e-05, 2.0525e-05, 3.5726e-05, 6.16438e-05, 9.74988e-05, 0.000116313, 0.000116027, 9.69596e-05, + 6.81692e-05, 4.11633e-05, 2.31286e-05, 1.49687e-05, 1.48825e-05, 2.29218e-05, 4.10572e-05, 6.84367e-05, + 9.20802e-05, 0.000101741, 9.16746e-05, 6.81956e-05, 4.35156e-05, 2.58227e-05, 1.64668e-05, 1.36375e-05, + 1.63075e-05, 2.56284e-05, 4.35347e-05, 6.85541e-05, 7.72705e-05, 7.7123e-05, 6.15996e-05, 4.13877e-05, + 2.60284e-05, 1.76731e-05, 1.43428e-05, 1.42652e-05, 1.74952e-05, 2.58975e-05, 4.14622e-05, 6.18523e-05, + 5.75279e-05, 5.07174e-05, 3.61735e-05, 2.36056e-05, 1.68891e-05, 1.45581e-05, 1.4109e-05, 1.44531e-05, + 1.67507e-05, 2.35227e-05, 3.61985e-05, 5.07917e-05, 3.91872e-05, 3.08038e-05, 2.11666e-05, 1.55788e-05, + 1.41619e-05, 1.45681e-05, 1.45369e-05, 1.40857e-05, 1.54883e-05, 2.10848e-05, 3.07489e-05, 3.91687e-05, + 2.72264e-05, 2.10397e-05, 1.65208e-05, 1.55025e-05, 1.6772e-05, 1.76936e-05, 1.67648e-05, 1.54707e-05, + 1.645e-05, 2.09366e-05, 2.71418e-05, 3.02326e-05, 2.32956e-05, 2.1059e-05, 2.10776e-05, 2.33751e-05, + 2.58035e-05, 2.58309e-05, 2.34196e-05, 2.10754e-05, 2.09872e-05, 2.31931e-05, 2.55736e-05, 2.56236e-05, + 2.73827e-05, 3.08702e-05, 3.60198e-05, 4.10563e-05, 4.32377e-05, 4.11373e-05, 3.60995e-05, 3.08798e-05, + 2.73288e-05, 2.56661e-05, 2.5263e-05, 2.57218e-05, 3.94508e-05, 5.08438e-05, 6.14704e-05, 6.79e-05, + 6.79318e-05, 6.15421e-05, 5.09093e-05, 3.94843e-05, 3.04645e-05, 2.56761e-05, 2.56761e-05, 3.04564e-05, + 6.52222e-05, 9.31688e-05, 0.000111636, 0.000111425, 9.2753e-05, 6.49667e-05, 3.94435e-05, 2.26826e-05, + 1.51484e-05, 1.51041e-05, 2.2589e-05, 3.94452e-05, 9.33948e-05, 0.000124096, 0.000136044, 0.000123469, + 9.27346e-05, 5.77223e-05, 3.07242e-05, 1.61471e-05, 1.19035e-05, 1.60543e-05, 3.06628e-05, 5.79738e-05, + 0.000112212, 0.000136339, 0.000135894, 0.000111322, 7.48849e-05, 4.1779e-05, 2.07744e-05, 1.1882e-05, + 1.18255e-05, 2.06603e-05, 4.18626e-05, 7.5471e-05, 0.000112074, 0.000123758, 0.000111372, 8.21087e-05, + 5.04538e-05, 2.72637e-05, 1.50915e-05, 1.15391e-05, 1.49784e-05, 2.71819e-05, 5.07176e-05, 8.28354e-05, + 9.307e-05, 9.27877e-05, 7.49227e-05, 5.05485e-05, 3.05949e-05, 1.87884e-05, 1.37574e-05, 1.36897e-05, + 1.86474e-05, 3.05757e-05, 5.08626e-05, 7.54648e-05, 6.48895e-05, 5.76686e-05, 4.19476e-05, 2.75511e-05, + 1.89862e-05, 1.53073e-05, 1.43451e-05, 1.51961e-05, 1.88645e-05, 2.75582e-05, 4.21444e-05, 5.78959e-05, + 3.92476e-05, 3.07863e-05, 2.11113e-05, 1.55225e-05, 1.41105e-05, 1.45101e-05, 1.44644e-05, 1.4012e-05, + 1.54413e-05, 2.10959e-05, 3.08332e-05, 3.92814e-05, 2.26021e-05, 1.63542e-05, 1.229e-05, 1.20133e-05, + 1.40781e-05, 1.53785e-05, 1.4039e-05, 1.19589e-05, 1.22382e-05, 1.63119e-05, 2.25774e-05, 2.5808e-05, + 1.52094e-05, 1.21802e-05, 1.22407e-05, 1.5401e-05, 1.8899e-05, 1.89012e-05, 1.5399e-05, 1.2223e-05, + 1.21438e-05, 1.51644e-05, 1.85676e-05, 1.85896e-05, 1.52398e-05, 1.63343e-05, 2.09774e-05, 2.73458e-05, + 3.04931e-05, 2.7377e-05, 2.10069e-05, 1.63399e-05, 1.52233e-05, 1.64325e-05, 1.73414e-05, 1.64524e-05, + 2.27119e-05, 3.08084e-05, 4.1839e-05, 5.03939e-05, 5.03993e-05, 4.18553e-05, 3.08334e-05, 2.27394e-05, + 1.87217e-05, 1.74032e-05, 1.7395e-05, 1.87e-05, 3.9473e-05, 5.78585e-05, 7.50136e-05, 8.21248e-05, + 7.48959e-05, 5.77519e-05, 3.94655e-05, 2.60477e-05, 1.872e-05, 1.64648e-05, 1.86663e-05, 2.59866e-05, + 8.274e-05, 0.000111934, 0.000123649, 0.000111273, 8.19958e-05, 5.03803e-05, 2.72889e-05, 1.52058e-05, + 1.17051e-05, 1.51698e-05, 2.73422e-05, 5.07587e-05, 0.000112183, 0.000136224, 0.000135711, 0.00011111, + 7.47221e-05, 4.17285e-05, 2.08256e-05, 1.19863e-05, 1.19623e-05, 2.08233e-05, 4.20087e-05, 7.55399e-05, + 0.000124105, 0.000135882, 0.000123172, 9.24287e-05, 5.75187e-05, 3.06388e-05, 1.61334e-05, 1.19226e-05, + 1.60989e-05, 3.07427e-05, 5.80895e-05, 9.35031e-05, 0.000111651, 0.000111226, 9.24521e-05, 6.47158e-05, + 3.92962e-05, 2.26038e-05, 1.50962e-05, 1.50656e-05, 2.25841e-05, 3.95216e-05, 6.53944e-05, 9.33412e-05, + 8.20948e-05, 7.47278e-05, 5.75916e-05, 3.93971e-05, 2.60478e-05, 1.87349e-05, 1.64714e-05, 1.86803e-05, + 2.60535e-05, 3.96345e-05, 5.80816e-05, 7.51661e-05, 5.02855e-05, 4.17464e-05, 3.08259e-05, 2.28389e-05, + 1.88796e-05, 1.75667e-05, 1.75349e-05, 1.88242e-05, 2.28453e-05, 3.09536e-05, 4.19441e-05, 5.03856e-05, + 2.71912e-05, 2.09263e-05, 1.63945e-05, 1.54023e-05, 1.66987e-05, 1.76173e-05, 1.66629e-05, 1.53631e-05, + 1.63793e-05, 2.09409e-05, 2.72145e-05, 3.02911e-05, 1.51842e-05, 1.21341e-05, 1.21909e-05, 1.536e-05, + 1.88659e-05, 1.88591e-05, 1.53418e-05, 1.21654e-05, 1.21027e-05, 1.51522e-05, 1.85791e-05, 1.85939e-05, + 1.17376e-05, 1.21133e-05, 1.6317e-05, 2.27416e-05, 2.60473e-05, 2.27428e-05, 1.63092e-05, 1.20924e-05, + 1.17064e-05, 1.3702e-05, 1.50036e-05, 1.37289e-05, 1.5212e-05, 2.09085e-05, 3.07643e-05, 3.93634e-05, + 3.9352e-05, 3.0739e-05, 2.08845e-05, 1.51956e-05, 1.37543e-05, 1.41772e-05, 1.41809e-05, 1.37643e-05, + 2.73363e-05, 4.19078e-05, 5.77671e-05, 6.48861e-05, 5.76386e-05, 4.17696e-05, 2.7273e-05, 1.8719e-05, + 1.51138e-05, 1.42242e-05, 1.50954e-05, 1.87175e-05, 5.06903e-05, 7.52521e-05, 9.29473e-05, 9.27405e-05, + 7.48309e-05, 5.03866e-05, 3.04557e-05, 1.87461e-05, 1.38084e-05, 1.37863e-05, 1.87195e-05, 3.05405e-05, + 9.74791e-05, 0.000116125, 0.000115674, 9.64934e-05, 6.77646e-05, 4.10003e-05, 2.32287e-05, 1.52361e-05, + 1.52469e-05, 2.33341e-05, 4.14093e-05, 6.86136e-05, 0.00011628, 0.000124984, 0.000115344, 9.1085e-05, + 6.11957e-05, 3.58356e-05, 2.08342e-05, 1.62223e-05, 2.08966e-05, 3.61378e-05, 6.19845e-05, 9.22705e-05, + 0.000115881, 0.000115394, 0.000100902, 7.66513e-05, 5.04919e-05, 3.06011e-05, 2.07947e-05, 2.08239e-05, + 3.07759e-05, 5.10382e-05, 7.76673e-05, 0.000102004, 9.66212e-05, 9.1107e-05, 7.66648e-05, 5.73593e-05, + 3.91909e-05, 2.7176e-05, 2.31618e-05, 2.72597e-05, 3.9482e-05, 5.79912e-05, 7.75237e-05, 9.17513e-05, + 6.77797e-05, 6.12023e-05, 5.05485e-05, 3.92491e-05, 3.03813e-05, 2.56868e-05, 2.57194e-05, 3.05122e-05, + 3.95444e-05, 5.1005e-05, 6.16549e-05, 6.79727e-05, 4.09564e-05, 3.58595e-05, 3.07001e-05, 2.72819e-05, + 2.57373e-05, 2.53745e-05, 2.57973e-05, 2.74039e-05, 3.08744e-05, 3.60453e-05, 4.10811e-05, 4.31813e-05, + 2.31768e-05, 2.08653e-05, 2.08896e-05, 2.32549e-05, 2.57491e-05, 2.57757e-05, 2.33163e-05, 2.09519e-05, + 2.09061e-05, 2.31925e-05, 2.56188e-05, 2.56165e-05, 1.51848e-05, 1.62293e-05, 2.086e-05, 2.72552e-05, + 3.04246e-05, 2.72879e-05, 2.08881e-05, 1.62269e-05, 1.51542e-05, 1.64262e-05, 1.73724e-05, 1.64586e-05, + 1.51795e-05, 2.08373e-05, 3.06754e-05, 3.92841e-05, 3.92821e-05, 3.06618e-05, 2.0805e-05, 1.51334e-05, + 1.37253e-05, 1.41862e-05, 1.42066e-05, 1.37711e-05, 2.32254e-05, 3.59556e-05, 5.07331e-05, 5.75851e-05, + 5.06292e-05, 3.58222e-05, 2.31241e-05, 1.64402e-05, 1.42145e-05, 1.38656e-05, 1.42416e-05, 1.64995e-05, + 4.1257e-05, 6.16825e-05, 7.72211e-05, 7.70566e-05, 6.1331e-05, 4.09606e-05, 2.56393e-05, 1.74452e-05, + 1.42756e-05, 1.42815e-05, 1.74886e-05, 2.57862e-05, 6.84849e-05, 9.19716e-05, 0.000101609, 9.14228e-05, + 6.78223e-05, 4.319e-05, 2.56978e-05, 1.65496e-05, 1.38525e-05, 1.65716e-05, 2.5842e-05, 4.36033e-05, + 9.88706e-05, 0.000103874, 9.81678e-05, 8.28242e-05, 6.15387e-05, 4.09762e-05, 2.7294e-05, 2.27644e-05, + 2.74382e-05, 4.13846e-05, 6.23133e-05, 8.37993e-05, 0.000103912, 0.000103508, 9.67468e-05, 8.19811e-05, + 6.11222e-05, 4.16585e-05, 3.07446e-05, 3.08408e-05, 4.20176e-05, 6.18682e-05, 8.30477e-05, 9.77339e-05, + 9.82087e-05, 9.67515e-05, 9.0646e-05, 7.65218e-05, 5.73244e-05, 4.16647e-05, 3.5977e-05, 4.19404e-05, + 5.79558e-05, 7.74944e-05, 9.16853e-05, 9.74244e-05, 8.28781e-05, 8.19966e-05, 7.65239e-05, 6.44104e-05, + 5.01449e-05, 4.10289e-05, 4.11812e-05, 5.06168e-05, 6.51726e-05, 7.73944e-05, 8.26822e-05, 8.31357e-05, + 6.15942e-05, 6.11273e-05, 5.72985e-05, 5.01091e-05, 4.31518e-05, 4.04236e-05, 4.3452e-05, 5.06437e-05, + 5.79142e-05, 6.16383e-05, 6.18734e-05, 6.13421e-05, 4.09818e-05, 4.15985e-05, 4.15572e-05, 4.09014e-05, + 4.0327e-05, 4.04638e-05, 4.12472e-05, 4.19588e-05, 4.1913e-05, 4.11548e-05, 4.04129e-05, 4.03618e-05, + 2.72111e-05, 3.05815e-05, 3.57446e-05, 4.09086e-05, 4.32044e-05, 4.11038e-05, 3.59997e-05, 3.07639e-05, + 2.72845e-05, 2.572e-05, 2.53444e-05, 2.57109e-05, 2.2589e-05, 3.05561e-05, 4.15504e-05, 5.01698e-05, + 5.02356e-05, 4.16823e-05, 3.06455e-05, 2.25988e-05, 1.86818e-05, 1.74636e-05, 1.7485e-05, 1.87168e-05, + 2.71773e-05, 4.16117e-05, 5.74306e-05, 6.46101e-05, 5.74248e-05, 4.15777e-05, 2.71114e-05, 1.86239e-05, + 1.51043e-05, 1.42819e-05, 1.51561e-05, 1.86992e-05, 4.10803e-05, 6.14228e-05, 7.69694e-05, 7.68745e-05, + 6.12028e-05, 4.0856e-05, 2.55604e-05, 1.74061e-05, 1.42788e-05, 1.43076e-05, 1.74957e-05, 2.57203e-05, + 6.20656e-05, 8.27079e-05, 9.13211e-05, 8.23376e-05, 6.15819e-05, 4.02118e-05, 2.52499e-05, 1.74787e-05, + 1.52014e-05, 1.75472e-05, 2.54363e-05, 4.05728e-05, 8.36866e-05, 9.75719e-05, 9.72608e-05, 8.29743e-05, + 6.11935e-05, 4.02683e-05, 2.57052e-05, 1.87937e-05, 1.88347e-05, 2.58778e-05, 4.06853e-05, 6.18802e-05, + 9.11601e-05, 9.09426e-05, 8.97729e-05, 8.27763e-05, 6.76532e-05, 5.02583e-05, 3.93943e-05, 3.95204e-05, + 5.06554e-05, 6.83026e-05, 8.35189e-05, 9.03547e-05, 9.09245e-05, 9.34901e-05, 9.667e-05, 9.08764e-05, + 7.44473e-05, 5.75357e-05, 5.08546e-05, 5.79332e-05, 7.52097e-05, 9.18112e-05, 9.74706e-05, 9.39301e-05, + 8.97869e-05, 9.66823e-05, 0.000100631, 9.19722e-05, 7.44656e-05, 6.14208e-05, 6.16916e-05, 7.5242e-05, + 9.30476e-05, 0.000101631, 9.7321e-05, 8.99961e-05, 8.28777e-05, 9.09063e-05, 9.1938e-05, 8.14685e-05, + 6.77245e-05, 6.19228e-05, 6.8336e-05, 8.25139e-05, 9.30233e-05, 9.16709e-05, 8.32304e-05, 7.86475e-05, + 6.77727e-05, 7.43911e-05, 7.42748e-05, 6.75477e-05, 6.13202e-05, 6.16339e-05, 6.83709e-05, 7.52609e-05, + 7.51536e-05, 6.81695e-05, 6.15479e-05, 6.14371e-05, 5.02493e-05, 5.72736e-05, 6.09801e-05, 6.14777e-05, + 6.13608e-05, 6.19933e-05, 6.1736e-05, 5.7913e-05, 5.05991e-05, 4.34769e-05, 4.05652e-05, 4.33561e-05, + 3.91816e-05, 5.03478e-05, 6.09751e-05, 6.7602e-05, 6.78175e-05, 6.14664e-05, 5.08095e-05, 3.94358e-05, + 3.05471e-05, 2.58674e-05, 2.58591e-05, 3.04706e-05, 3.9116e-05, 5.72121e-05, 7.43156e-05, 8.15964e-05, + 7.45406e-05, 5.74702e-05, 3.92512e-05, 2.59651e-05, 1.87897e-05, 1.66323e-05, 1.88148e-05, 2.59517e-05, + 5.0137e-05, 7.44282e-05, 9.21484e-05, 9.21712e-05, 7.44555e-05, 5.01106e-05, 3.02757e-05, 1.86899e-05, + 1.38632e-05, 1.38928e-05, 1.87636e-05, 3.03505e-05, 6.78448e-05, 9.12319e-05, 0.000101032, 9.10847e-05, + 6.76189e-05, 4.30339e-05, 2.55919e-05, 1.65129e-05, 1.38705e-05, 1.65889e-05, 2.57461e-05, 4.32515e-05, + 8.32783e-05, 9.72226e-05, 9.70697e-05, 8.29063e-05, 6.11548e-05, 4.02162e-05, 2.56549e-05, 1.87621e-05, + 1.88117e-05, 2.58205e-05, 4.0521e-05, 6.15628e-05, 9.03043e-05, 9.39006e-05, 8.99368e-05, 7.84719e-05, + 6.11747e-05, 4.31503e-05, 3.04273e-05, 2.60732e-05, 3.05863e-05, 4.35031e-05, 6.17045e-05, 7.90349e-05}; const base_device::DEVICE_CPU* cpu_ctx = {}; const base_device::DEVICE_GPU* gpu_ctx = {}; @@ -51,54 +2567,52 @@ class TestModuleElecstateMultiDevice : public ::testing::Test using syncmem_var_d2h_op = base_device::memory::synchronize_memory_op; - void SetUp() override { + void SetUp() override + { } - void TearDown() override { + void TearDown() override + { } }; TEST_F(TestModuleElecstateMultiDevice, elecstate_pw_op_cpu) { std::vector rho_data(expected_rho.size(), 0); - double ** rho = new double* [1]; + double** rho = new double*[1]; rho[0] = rho_data.data(); - elecstate_cpu_op()( - this->cpu_ctx, - this->spin, this->nrxx, - this->w1, - rho, - this->wfcr.data()); - - // check the result - for (int ii = 0; ii < rho_data.size(); ii++) { + elecstate_cpu_op()(this->cpu_ctx, this->spin, this->nrxx, this->w1, rho, this->wfcr.data()); + + // check the result + for (int ii = 0; ii < rho_data.size(); ii++) + { EXPECT_LT(fabs(rho_data[ii] - expected_rho[ii]), 6e-5); } - delete [] rho; + delete[] rho; } TEST_F(TestModuleElecstateMultiDevice, elecstate_pw_spin_op_cpu) { std::vector rho_data(expected_rho_2.size(), 0); - double ** rho = new double* [4]; + double** rho = new double*[4]; rho[0] = rho_data.data(); rho[1] = rho_data.data() + this->nrxx; rho[2] = rho_data.data() + this->nrxx * 2; rho[3] = rho_data.data() + this->nrxx * 3; - elecstate_cpu_op()( - this->cpu_ctx, - this->DOMAG, - this->DOMAG_Z, - this->nrxx, - this->w1, - rho, - this->wfcr_2.data(), - this->wfcr_another_spin_2.data()); - - // check the result - for (int ii = 0; ii < rho_data.size(); ii++) { + elecstate_cpu_op()(this->cpu_ctx, + this->DOMAG, + this->DOMAG_Z, + this->nrxx, + this->w1, + rho, + this->wfcr_2.data(), + this->wfcr_another_spin_2.data()); + + // check the result + for (int ii = 0; ii < rho_data.size(); ii++) + { EXPECT_LT(fabs(rho_data[ii] - expected_rho_2[ii]), 5e-4); } - delete [] rho; + delete[] rho; } #if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM @@ -111,21 +2625,17 @@ TEST_F(TestModuleElecstateMultiDevice, elecstate_pw_op_gpu) resize_memory_complex_op()(d_wfcr, wfcr.size()); syncmem_var_h2d_op()(d_rho_data, rho_data.data(), rho_data.size()); syncmem_complex_h2d_op()(d_wfcr, wfcr.data(), wfcr.size()); - double ** rho = new double* [1]; + double** rho = new double*[1]; rho[0] = d_rho_data; - elecstate_gpu_op()( - this->gpu_ctx, - this->spin, this->nrxx, - this->w1, - rho, - d_wfcr); - + elecstate_gpu_op()(this->gpu_ctx, this->spin, this->nrxx, this->w1, rho, d_wfcr); + syncmem_var_d2h_op()(rho_data.data(), d_rho_data, rho_data.size()); - // check the result - for (int ii = 0; ii < rho_data.size(); ii++) { + // check the result + for (int ii = 0; ii < rho_data.size(); ii++) + { EXPECT_LT(fabs(rho_data[ii] - expected_rho[ii]), 6e-5); } - delete [] rho; + delete[] rho; delete_memory_var_op()(this->gpu_ctx, d_rho_data); delete_memory_complex_op()(this->gpu_ctx, d_wfcr); } @@ -142,31 +2652,30 @@ TEST_F(TestModuleElecstateMultiDevice, elecstate_pw_spin_op_gpu) syncmem_var_h2d_op()(d_rho_data_2, rho_data_2.data(), rho_data_2.size()); syncmem_complex_h2d_op()(d_wfcr_2, wfcr_2.data(), wfcr_2.size()); syncmem_complex_h2d_op()(d_wfcr_another_spin_2, wfcr_another_spin_2.data(), wfcr_another_spin_2.size()); - double ** rho = new double* [4]; + double** rho = new double*[4]; rho[0] = d_rho_data_2; rho[1] = d_rho_data_2 + this->nrxx; rho[2] = d_rho_data_2 + this->nrxx * 2; rho[3] = d_rho_data_2 + this->nrxx * 3; - elecstate_gpu_op()( - this->gpu_ctx, - this->DOMAG, - this->DOMAG_Z, - this->nrxx, - this->w1, - rho, - d_wfcr_2, - d_wfcr_another_spin_2); - + elecstate_gpu_op()(this->gpu_ctx, + this->DOMAG, + this->DOMAG_Z, + this->nrxx, + this->w1, + rho, + d_wfcr_2, + d_wfcr_another_spin_2); + syncmem_var_d2h_op()(rho_data_2.data(), d_rho_data_2, rho_data_2.size()); - // check the result - for (int ii = 0; ii < rho_data_2.size(); ii++) { + // check the result + for (int ii = 0; ii < rho_data_2.size(); ii++) + { EXPECT_LT(fabs(rho_data_2[ii] - expected_rho_2[ii]), 5e-4); } - delete [] rho; + delete[] rho; delete_memory_var_op()(this->gpu_ctx, d_rho_data_2); delete_memory_complex_op()(this->gpu_ctx, d_wfcr_2); delete_memory_complex_op()(this->gpu_ctx, d_wfcr_another_spin_2); } #endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM - diff --git a/source/module_elecstate/magnetism.cpp b/source/module_elecstate/magnetism.cpp index 8a0090484f..644acff368 100644 --- a/source/module_elecstate/magnetism.cpp +++ b/source/module_elecstate/magnetism.cpp @@ -1,7 +1,7 @@ #include "magnetism.h" -#include "module_base/parallel_reduce.h" #include "module_parameter/parameter.h" +#include "source_base/parallel_reduce.h" //#include "module_elecstate/module_charge/charge.h" Magnetism::Magnetism() @@ -18,19 +18,19 @@ Magnetism::~Magnetism() } void Magnetism::compute_mag(const double& omega, - const int& nrxx, - const int& nxyz, - const double* const * rho, - double* nelec_spin) + const int& nrxx, + const int& nxyz, + const double* const* rho, + double* nelec_spin) { - assert(nxyz>0); + assert(nxyz > 0); - if (PARAM.inp.nspin==2) + if (PARAM.inp.nspin == 2) { this->tot_mag = 0.00; this->abs_mag = 0.00; - for (int ir=0; irtot_mag += diff; @@ -43,76 +43,76 @@ void Magnetism::compute_mag(const double& omega, this->tot_mag *= omega / nxyz; this->abs_mag *= omega / nxyz; - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"Total magnetism (Bohr mag/cell)",this->tot_mag); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"Absolute magnetism (Bohr mag/cell)",this->abs_mag); - - //update number of electrons for each spin - //if TWO_EFERMI, no need to update - if(!PARAM.globalv.two_fermi) - { - nelec_spin[0] = (PARAM.inp.nelec + this->tot_mag) / 2; - nelec_spin[1] = (PARAM.inp.nelec - this->tot_mag) / 2; - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"Electron number for spin up", nelec_spin[0]); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"Electron number for spin down", nelec_spin[1]); - } + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "Total magnetism (Bohr mag/cell)", this->tot_mag); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "Absolute magnetism (Bohr mag/cell)", this->abs_mag); + + // update number of electrons for each spin + // if TWO_EFERMI, no need to update + if (!PARAM.globalv.two_fermi) + { + nelec_spin[0] = (PARAM.inp.nelec + this->tot_mag) / 2; + nelec_spin[1] = (PARAM.inp.nelec - this->tot_mag) / 2; + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "Electron number for spin up", nelec_spin[0]); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "Electron number for spin down", nelec_spin[1]); + } } - // noncolliear : - else if(PARAM.inp.nspin==4) - { - for(int i=0;i<3;i++) - { - this->tot_mag_nc[i] = 0.00; - } - - this->abs_mag = 0.00; - for (int ir=0; irtot_mag_nc[i] += rho[i+1][ir]; - } - this->abs_mag += std::abs(diff); - } + // noncolliear : + else if (PARAM.inp.nspin == 4) + { + for (int i = 0; i < 3; i++) + { + this->tot_mag_nc[i] = 0.00; + } + + this->abs_mag = 0.00; + for (int ir = 0; ir < nrxx; ir++) + { + double diff = sqrt(pow(rho[1][ir], 2) + pow(rho[2][ir], 2) + pow(rho[3][ir], 2)); + + for (int i = 0; i < 3; i++) + { + this->tot_mag_nc[i] += rho[i + 1][ir]; + } + this->abs_mag += std::abs(diff); + } #ifdef __MPI Parallel_Reduce::reduce_pool(this->tot_mag_nc, 3); Parallel_Reduce::reduce_pool(this->abs_mag); #endif - for(int i=0;i<3;i++) - { - this->tot_mag_nc[i] *= omega/ nxyz; - } + for (int i = 0; i < 3; i++) + { + this->tot_mag_nc[i] *= omega / nxyz; + } - this->abs_mag *= omega/ nxyz; + this->abs_mag *= omega / nxyz; - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"Total magnetism along x (Bohr mag/cell)", - this->tot_mag_nc[0]); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, + "Total magnetism along x (Bohr mag/cell)", + this->tot_mag_nc[0]); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running," y (Bohr mag/cell)", - this->tot_mag_nc[1]); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, + " y (Bohr mag/cell)", + this->tot_mag_nc[1]); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running," z (Bohr mag/cell)", - this->tot_mag_nc[2]); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, + " z (Bohr mag/cell)", + this->tot_mag_nc[2]); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"Absolute magnetism (Bohr mag/cell)",this->abs_mag); - } + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "Absolute magnetism (Bohr mag/cell)", this->abs_mag); + } return; } - -bool Magnetism::judge_parallel(const double a[3], const ModuleBase::Vector3 &b) +bool Magnetism::judge_parallel(const double a[3], const ModuleBase::Vector3& b) { - bool jp=false; + bool jp = false; - double cross=0.0; + double cross = 0.0; - cross = pow((a[1]*b.z-a[2]*b.y),2) - + pow((a[2]*b.x-a[0]*b.z),2) - + pow((a[0]*b.y-a[1]*b.x),2); + cross = pow((a[1] * b.z - a[2] * b.y), 2) + pow((a[2] * b.x - a[0] * b.z), 2) + pow((a[0] * b.y - a[1] * b.x), 2); - jp = (fabs(cross)<1e-6); - return jp; + jp = (fabs(cross) < 1e-6); + return jp; } diff --git a/source/module_elecstate/magnetism.h b/source/module_elecstate/magnetism.h index c6bd9ed96c..747384d4ef 100644 --- a/source/module_elecstate/magnetism.h +++ b/source/module_elecstate/magnetism.h @@ -1,47 +1,45 @@ #ifndef MAGNETISM_H #define MAGNETISM_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/vector3.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/vector3.h" class Magnetism { -public: + public: // constructor and deconstructor Magnetism(); ~Magnetism(); // notice : bcast (MPI operation) is done in unitcell - double *start_mag=nullptr; + double* start_mag = nullptr; // tot_mag : majority spin - minority spin (nelup - neldw). double tot_mag; - double tot_mag_nc[3]={0.0}; + double tot_mag_nc[3] = {0.0}; double abs_mag; - void compute_mag(const double& omega, - const int& nrxx, - const int& nxyz, - const double* const * rho, - double* nelec_spin = nullptr); + void compute_mag(const double& omega, + const int& nrxx, + const int& nxyz, + const double* const* rho, + double* nelec_spin = nullptr); - ModuleBase::Vector3 *m_loc_=nullptr; //magnetization for each element along c-axis + ModuleBase::Vector3* m_loc_ = nullptr; // magnetization for each element along c-axis - double *angle1_=nullptr; //angle between c-axis and real spin std::vector + double* angle1_ = nullptr; // angle between c-axis and real spin std::vector - double *angle2_=nullptr; //angle between a-axis and real spin std::vector projection in ab-plane + double* angle2_ = nullptr; // angle between a-axis and real spin std::vector projection in ab-plane - double ux_[3]={0.0}; + double ux_[3] = {0.0}; - bool lsign_=false; - -private: - - bool judge_parallel(const double a[3], const ModuleBase::Vector3 &b); + bool lsign_ = false; + private: + bool judge_parallel(const double a[3], const ModuleBase::Vector3& b); }; /* diff --git a/source/module_elecstate/math_tools.h b/source/module_elecstate/math_tools.h index 3798c4df0f..df09cb606e 100644 --- a/source/module_elecstate/math_tools.h +++ b/source/module_elecstate/math_tools.h @@ -1,9 +1,9 @@ -#include "module_base/blas_connector.h" -#include "module_base/complexmatrix.h" -#include "module_base/matrix.h" -#include "module_base/scalapack_connector.h" #include "module_psi/psi.h" -#include "module_base/timer.h" +#include "source_base/blas_connector.h" +#include "source_base/complexmatrix.h" +#include "source_base/matrix.h" +#include "source_base/scalapack_connector.h" +#include "source_base/timer.h" #ifdef __MPI inline void psiMulPsiMpi(const psi::Psi& psi1, @@ -12,7 +12,7 @@ inline void psiMulPsiMpi(const psi::Psi& psi1, const int* desc_psi, const int* desc_dm) { - ModuleBase::timer::tick("psiMulPsiMpi","pdgemm"); + ModuleBase::timer::tick("psiMulPsiMpi", "pdgemm"); const double one_float = 1.0, zero_float = 0.0; const int one_int = 1; const char N_char = 'N', T_char = 'T'; @@ -37,7 +37,7 @@ inline void psiMulPsiMpi(const psi::Psi& psi1, &one_int, &one_int, desc_dm); - ModuleBase::timer::tick("psiMulPsiMpi","pdgemm"); + ModuleBase::timer::tick("psiMulPsiMpi", "pdgemm"); } inline void psiMulPsiMpi(const psi::Psi>& psi1, @@ -46,7 +46,7 @@ inline void psiMulPsiMpi(const psi::Psi>& psi1, const int* desc_psi, const int* desc_dm) { - ModuleBase::timer::tick("psiMulPsiMpi","pdgemm"); + ModuleBase::timer::tick("psiMulPsiMpi", "pdgemm"); const std::complex one_complex = {1.0, 0.0}, zero_complex = {0.0, 0.0}; const int one_int = 1; const char N_char = 'N', T_char = 'T'; @@ -71,7 +71,7 @@ inline void psiMulPsiMpi(const psi::Psi>& psi1, &one_int, &one_int, desc_dm); - ModuleBase::timer::tick("psiMulPsiMpi","pdgemm"); + ModuleBase::timer::tick("psiMulPsiMpi", "pdgemm"); } #else diff --git a/source/module_elecstate/module_charge/charge.cpp b/source/module_elecstate/module_charge/charge.cpp index 252b336af6..e6c3e1c638 100644 --- a/source/module_elecstate/module_charge/charge.cpp +++ b/source/module_elecstate/module_charge/charge.cpp @@ -18,18 +18,18 @@ //---------------------------------------------------------- #include "charge.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/libm/libm.h" -#include "module_base/math_integral.h" -#include "module_base/memory.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" -#include "module_base/tool_threading.h" #include "module_cell/unitcell.h" #include "module_elecstate/magnetism.h" #include "module_hamilt_general/module_xc/xc_functional.h" #include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/libm/libm.h" +#include "source_base/math_integral.h" +#include "source_base/memory.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/tool_threading.h" #include @@ -232,16 +232,15 @@ void Charge::atomic_rho(const int spin_number_need, ModuleBase::timer::tick("Charge", "atomic_rho"); { - ModuleBase::ComplexMatrix rho_g3d = [&]() -> ModuleBase::ComplexMatrix - { - // use interpolation to get three dimension charge density. - ModuleBase::ComplexMatrix rho_g3d(spin_number_need, this->rhopw->npw); + ModuleBase::ComplexMatrix rho_g3d = [&]() -> ModuleBase::ComplexMatrix { + // use interpolation to get three dimension charge density. + ModuleBase::ComplexMatrix rho_g3d(spin_number_need, this->rhopw->npw); for (int it = 0; it < ucell.ntype; it++) { // check the start magnetization const int startmag_type = [&]() -> int { - if (ucell.magnet.start_mag[it] != 0.0) + if (ucell.magnet.start_mag[it] != 0.0) { return 1; } @@ -281,8 +280,10 @@ void Charge::atomic_rho(const int spin_number_need, double r2 = atom->ncpp.r[ir] * atom->ncpp.r[ir]; rhoatm[ir] = atom->ncpp.rho_at[ir] / ModuleBase::FOUR_PI / r2; } - rhoatm[0] - = pow((rhoatm[2] / rhoatm[1]), atom->ncpp.r[1] / (atom->ncpp.r[2] - atom->ncpp.r[1])); // zws add, sunliang updated 2024-03-04 + rhoatm[0] = pow( + (rhoatm[2] / rhoatm[1]), + atom->ncpp.r[1] + / (atom->ncpp.r[2] - atom->ncpp.r[1])); // zws add, sunliang updated 2024-03-04 if (rhoatm[0] < 1e-12) { rhoatm[0] = rhoatm[1]; @@ -332,7 +333,10 @@ void Charge::atomic_rho(const int spin_number_need, { rho1d[ir] = rhoatm[ir]; } - ModuleBase::Integral::Simpson_Integral(mesh, rho1d.data(), atom->ncpp.rab.data(), rho_lgl[0]); + ModuleBase::Integral::Simpson_Integral(mesh, + rho1d.data(), + atom->ncpp.rab.data(), + rho_lgl[0]); gstart = 1; } if (PARAM.inp.test_charge > 0) @@ -343,15 +347,15 @@ void Charge::atomic_rho(const int spin_number_need, // G=0 term only belong to 1 cpu. // Other processors start from '0' //---------------------------------------------------------- - #ifdef _OPENMP - #pragma omp parallel +#ifdef _OPENMP +#pragma omp parallel { - #endif +#endif std::vector rho1d(ucell.meshx); - #ifdef _OPENMP - #pragma omp for - #endif +#ifdef _OPENMP +#pragma omp for +#endif for (int igg = gstart; igg < this->rhopw->ngg; ++igg) { const double gx = sqrt(this->rhopw->gg_uniq[igg]) * ucell.tpiba; @@ -367,11 +371,14 @@ void Charge::atomic_rho(const int spin_number_need, rho1d[ir] = rhoatm[ir] * ModuleBase::libm::sin(gxx) / gxx; } } - ModuleBase::Integral::Simpson_Integral(mesh, rho1d.data(), atom->ncpp.rab.data(), rho_lgl[igg]); + ModuleBase::Integral::Simpson_Integral(mesh, + rho1d.data(), + atom->ncpp.rab.data(), + rho_lgl[igg]); } - #ifdef _OPENMP - #pragma omp single - #endif +#ifdef _OPENMP +#pragma omp single +#endif { if (PARAM.inp.test_charge > 0) std::cout << " |G|>0 term done." << std::endl; @@ -380,16 +387,16 @@ void Charge::atomic_rho(const int spin_number_need, // EXPLAIN : Complete the transfer of rho from real space to // reciprocal space //---------------------------------------------------------- - #ifdef _OPENMP - #pragma omp for - #endif - for (int igg = 0; igg < this->rhopw->ngg; igg++) - { - rho_lgl[igg] /= omega; - } - #ifdef _OPENMP +#ifdef _OPENMP +#pragma omp for +#endif + for (int igg = 0; igg < this->rhopw->ngg; igg++) + { + rho_lgl[igg] /= omega; + } +#ifdef _OPENMP } - #endif +#endif return rho_lgl; }(); //---------------------------------------------------------- @@ -397,9 +404,9 @@ void Charge::atomic_rho(const int spin_number_need, //---------------------------------------------------------- if (spin_number_need == 1) { - #ifdef _OPENMP - #pragma omp parallel for - #endif +#ifdef _OPENMP +#pragma omp parallel for +#endif for (int ig = 0; ig < this->rhopw->npw; ig++) { rho_g3d(0, ig) += strucFac(it, ig) * rho_lgl[this->rhopw->ig2igg[ig]]; @@ -410,9 +417,9 @@ void Charge::atomic_rho(const int spin_number_need, { if (startmag_type == 1) { - #ifdef _OPENMP - #pragma omp parallel for - #endif +#ifdef _OPENMP +#pragma omp parallel for +#endif for (int ig = 0; ig < this->rhopw->npw; ig++) { const std::complex swap = strucFac(it, ig) * rho_lgl[this->rhopw->ig2igg[ig]]; @@ -433,9 +440,9 @@ void Charge::atomic_rho(const int spin_number_need, const double up = 0.5 * (1 + atom->mag[ia] / atom->ncpp.zv); const double dw = 0.5 * (1 - atom->mag[ia] / atom->ncpp.zv); // std::cout << " atom " << ia << " up=" << up << " dw=" << dw << std::endl; - #ifdef _OPENMP - #pragma omp parallel for - #endif +#ifdef _OPENMP +#pragma omp parallel for +#endif for (int ig = 0; ig < this->rhopw->npw; ig++) { const double Gtau = this->rhopw->gcar[ig][0] * atom->tau[ia].x @@ -462,9 +469,9 @@ void Charge::atomic_rho(const int spin_number_need, ModuleBase::libm::sincos(atom->angle1[0], &sin_a1, &cos_a1); ModuleBase::libm::sincos(atom->angle2[0], &sin_a2, &cos_a2); } - #ifdef _OPENMP - #pragma omp parallel for - #endif +#ifdef _OPENMP +#pragma omp parallel for +#endif for (int ig = 0; ig < this->rhopw->npw; ig++) { const std::complex swap = strucFac(it, ig) * rho_lgl[this->rhopw->ig2igg[ig]]; @@ -475,8 +482,7 @@ void Charge::atomic_rho(const int spin_number_need, += swap * (ucell.magnet.start_mag[it] / atom->ncpp.zv) * sin_a1 * cos_a2; rho_g3d(2, ig) += swap * (ucell.magnet.start_mag[it] / atom->ncpp.zv) * sin_a1 * sin_a2; - rho_g3d(3, ig) - += swap * (ucell.magnet.start_mag[it] / atom->ncpp.zv) * cos_a1; + rho_g3d(3, ig) += swap * (ucell.magnet.start_mag[it] / atom->ncpp.zv) * cos_a1; } else if (PARAM.globalv.domag_z) { @@ -500,9 +506,9 @@ void Charge::atomic_rho(const int spin_number_need, { ModuleBase::libm::sincos(atom->angle2[ia], &sin_a2, &cos_a2); } - #ifdef _OPENMP - #pragma omp parallel for - #endif +#ifdef _OPENMP +#pragma omp parallel for +#endif for (int ig = 0; ig < this->rhopw->npw; ig++) { const double Gtau = this->rhopw->gcar[ig][0] * atom->tau[ia].x @@ -535,7 +541,8 @@ void Charge::atomic_rho(const int spin_number_need, } else { - ModuleBase::WARNING_QUIT("Charge::spin_number_need", " Either 1 or 2 or 4, check SPIN number !"); + ModuleBase::WARNING_QUIT("Charge::spin_number_need", + " Either 1 or 2 or 4, check SPIN number !"); } } } @@ -548,15 +555,15 @@ void Charge::atomic_rho(const int spin_number_need, { this->rhopw->recip2real(&rho_g3d(is, 0), rho_in[is]); - for (int ir = 0; ir < this->rhopw->nrxx; ++ir) - { - ne[is] += rho_in[is][ir]; - } + for (int ir = 0; ir < this->rhopw->nrxx; ++ir) + { + ne[is] += rho_in[is][ir]; + } - ne[is] *= omega / (double)this->rhopw->nxyz; - #ifdef __MPI + ne[is] *= omega / (double)this->rhopw->nxyz; +#ifdef __MPI Parallel_Reduce::reduce_pool(ne[is]); - #endif +#endif // we check that everything is correct double neg = 0.0; double rea = 0.0; @@ -570,11 +577,11 @@ void Charge::atomic_rho(const int spin_number_need, ima += std::abs(this->rhopw->fft_bundle.get_auxr_data()[ir].imag()); } - #ifdef __MPI +#ifdef __MPI Parallel_Reduce::reduce_pool(neg); Parallel_Reduce::reduce_pool(ima); Parallel_Reduce::reduce_pool(sumrea); - #endif +#endif // mohan fix bug 2011-04-03 neg = neg / (double)this->rhopw->nxyz * omega; ima = ima / (double)this->rhopw->nxyz * omega; @@ -590,10 +597,10 @@ void Charge::atomic_rho(const int spin_number_need, double ne_tot = 0.0; int spin0 = 1; - if (spin_number_need == 2) - { - spin0 = spin_number_need; - } + if (spin_number_need == 2) + { + spin0 = spin_number_need; + } for (int is = 0; is < spin0; ++is) { GlobalV::ofs_warning << "\n SETUP ATOMIC RHO FOR SPIN " << is + 1 << std::endl; @@ -603,13 +610,13 @@ void Charge::atomic_rho(const int spin_number_need, ModuleBase::GlobalFunc::OUT(GlobalV::ofs_warning, "total electron number from rho", ne_tot); ModuleBase::GlobalFunc::OUT(GlobalV::ofs_warning, "should be", PARAM.inp.nelec); - for (int is = 0; is < spin_number_need; ++is) - { - for (int ir = 0; ir < this->rhopw->nrxx; ++ir) - { - rho_in[is][ir] = rho_in[is][ir] / ne_tot * PARAM.inp.nelec; - } - } + for (int is = 0; is < spin_number_need; ++is) + { + for (int ir = 0; ir < this->rhopw->nrxx; ++ir) + { + rho_in[is][ir] = rho_in[is][ir] / ne_tot * PARAM.inp.nelec; + } + } } ModuleBase::timer::tick("Charge", "atomic_rho"); @@ -646,7 +653,7 @@ double Charge::cal_rho2ne(const double* rho_in) const void Charge::check_rho() { - if (this->nspin==1 || this->nspin==4) + if (this->nspin == 1 || this->nspin == 4) { double ne = 0.0; ne = this->cal_rho2ne(rho[0]); @@ -662,14 +669,18 @@ void Charge::check_rho() ne_up = this->cal_rho2ne(rho[0]); if (ne_up < 0.0) { - ModuleBase::WARNING_QUIT("Charge", "Number of spin-down electrons set in starting magnetization exceeds all available."); + ModuleBase::WARNING_QUIT( + "Charge", + "Number of spin-down electrons set in starting magnetization exceeds all available."); } // for spin down double ne_dn = 0.0; ne_dn = this->cal_rho2ne(rho[1]); if (ne_dn < 0.0) { - ModuleBase::WARNING_QUIT("Charge", "Number of spin-up electrons set in starting magnetization exceeds all available."); + ModuleBase::WARNING_QUIT( + "Charge", + "Number of spin-up electrons set in starting magnetization exceeds all available."); } // for total charge if (std::abs(ne_up + ne_dn - PARAM.inp.nelec) > 1.0e-6) @@ -687,7 +698,8 @@ void Charge::init_final_scf() assert(allocate_rho_final_scf == false); if (PARAM.inp.test_charge > 1) { - std::cout << "\n spin_number = " << PARAM.inp.nspin << " real_point_number = " << this->rhopw->nrxx << std::endl; + std::cout << "\n spin_number = " << PARAM.inp.nspin << " real_point_number = " << this->rhopw->nrxx + << std::endl; } // allocate memory diff --git a/source/module_elecstate/module_charge/charge.h b/source/module_elecstate/module_charge/charge.h index 1a2c874fd7..985851927d 100644 --- a/source/module_elecstate/module_charge/charge.h +++ b/source/module_elecstate/module_charge/charge.h @@ -1,16 +1,16 @@ #ifndef CHARGE_H #define CHARGE_H -#include "module_base/complexmatrix.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_global.h" #include "module_basis/module_pw/pw_basis.h" #include "module_cell/module_symmetry/symmetry.h" #include "module_elecstate/fp_energy.h" #include "module_hamilt_pw/hamilt_pwdft/parallel_grid.h" +#include "source_base/complexmatrix.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_global.h" -//a forward declaration of UnitCell +// a forward declaration of UnitCell class UnitCell; //========================================================== @@ -35,33 +35,33 @@ class Charge // NAME : rhog_core [ngm], the core charge in reciprocal space //========================================================== - double **rho = nullptr; - double **rho_save = nullptr; + double** rho = nullptr; + double** rho_save = nullptr; - std::complex **rhog = nullptr; - std::complex **rhog_save = nullptr; + std::complex** rhog = nullptr; + std::complex** rhog_save = nullptr; - double **kin_r = nullptr; // kinetic energy density in real space, for meta-GGA - double **kin_r_save = nullptr; // kinetic energy density in real space, for meta-GGA + double** kin_r = nullptr; // kinetic energy density in real space, for meta-GGA + double** kin_r_save = nullptr; // kinetic energy density in real space, for meta-GGA // wenfei 2021-07-28 const Parallel_Grid* pgrid = nullptr; - private: - //temporary - double *_space_rho = nullptr; - double *_space_rho_save = nullptr; - std::complex *_space_rhog = nullptr; - std::complex *_space_rhog_save = nullptr; - double *_space_kin_r = nullptr; - double *_space_kin_r_save = nullptr; + private: + // temporary + double* _space_rho = nullptr; + double* _space_rho_save = nullptr; + std::complex* _space_rhog = nullptr; + std::complex* _space_rhog_save = nullptr; + double* _space_kin_r = nullptr; + double* _space_kin_r_save = nullptr; public: - double **nhat = nullptr; //compensation charge for PAW - double **nhat_save = nullptr; //compensation charge for PAW - // wenfei 2023-09-05 + double** nhat = nullptr; // compensation charge for PAW + double** nhat_save = nullptr; // compensation charge for PAW + // wenfei 2023-09-05 - double *rho_core = nullptr; - std::complex *rhog_core = nullptr; + double* rho_core = nullptr; + std::complex* rhog_core = nullptr; int prenspin = 1; @@ -85,7 +85,7 @@ class Charge const void* klist = nullptr, const void* wfcpw = nullptr); - void allocate(const int &nspin_in); + void allocate(const int& nspin_in); void atomic_rho(const int spin_number_need, const double& omega, @@ -93,9 +93,7 @@ class Charge const ModuleBase::ComplexMatrix& strucFac, const UnitCell& ucell) const; - void set_rho_core(const UnitCell& ucell, - const ModuleBase::ComplexMatrix& structure_factor, - const bool* numeric); + void set_rho_core(const UnitCell& ucell, const ModuleBase::ComplexMatrix& structure_factor, const bool* numeric); void set_rho_core_paw(); void renormalize_rho(); @@ -104,29 +102,26 @@ class Charge void save_rho_before_sum_band(); - // for non-linear core correction - void non_linear_core_correction - ( - const bool &numeric, - const double omega, - const double tpiba2, - const int mesh, - const double *r, - const double *rab, - const double *rhoc, - double *rhocg - ) const; + // for non-linear core correction + void non_linear_core_correction(const bool& numeric, + const double omega, + const double tpiba2, + const int mesh, + const double* r, + const double* rab, + const double* rhoc, + double* rhocg) const; - double cal_rho2ne(const double *rho_in) const; + double cal_rho2ne(const double* rho_in) const; - void check_rho(); // to check whether the charge density is normal + void check_rho(); // to check whether the charge density is normal - void init_final_scf(); //LiuXh add 20180619 + void init_final_scf(); // LiuXh add 20180619 - public: + public: /** * @brief init some arrays for mpi_inter_pools, rho_mpi - * + * */ void init_chgmpi(); @@ -136,27 +131,29 @@ class Charge */ void rho_mpi(); - /** - * @brief Reduce among different pools + /** + * @brief Reduce among different pools * If NPROC_IN_POOLs are all the same, use GlobalV::KP_WORLD * else, gather rho in a POOL, and then reduce among different POOLs - * - * @param array_rho f(rho): an array [nrxx] - */ - void reduce_diff_pools(double* array_rho) const; + * + * @param array_rho f(rho): an array [nrxx] + */ + void reduce_diff_pools(double* array_rho) const; - void set_omega(double* omega_in){this->omega_ = omega_in;}; + void set_omega(double* omega_in) + { + this->omega_ = omega_in; + }; // mohan add 2021-02-20 - int nrxx=0; // number of r vectors in this processor - int nxyz = 0; // total number of r vectors - int ngmc=0; // number of g vectors in this processor - int nspin=0; // number of spins - ModulePW::PW_Basis* rhopw = nullptr;// When double_grid is used, rhopw = rhodpw (dense grid) - bool cal_elf = false; // whether to calculate electron localization function (ELF) + int nrxx = 0; // number of r vectors in this processor + int nxyz = 0; // total number of r vectors + int ngmc = 0; // number of g vectors in this processor + int nspin = 0; // number of spins + ModulePW::PW_Basis* rhopw = nullptr; // When double_grid is used, rhopw = rhodpw (dense grid) + bool cal_elf = false; // whether to calculate electron localization function (ELF) private: - - void destroy(); // free arrays liuyu 2023-03-12 + void destroy(); // free arrays liuyu 2023-03-12 double* omega_ = nullptr; // omega for non-linear core correction @@ -165,10 +162,9 @@ class Charge bool allocate_rho_final_scf; // LiuXh add 20180606 #ifdef __MPI private: - int *rec = nullptr; //The number of elements each process should receive into the receive buffer. - int *dis = nullptr; //The displacement (relative to recvbuf) for each process in the receive buffer. + int* rec = nullptr; // The number of elements each process should receive into the receive buffer. + int* dis = nullptr; // The displacement (relative to recvbuf) for each process in the receive buffer. #endif - }; #endif // charge diff --git a/source/module_elecstate/module_charge/charge_extra.cpp b/source/module_elecstate/module_charge/charge_extra.cpp index 35b5b2a1e0..d44117837f 100644 --- a/source/module_elecstate/module_charge/charge_extra.cpp +++ b/source/module_elecstate/module_charge/charge_extra.cpp @@ -1,10 +1,10 @@ #include "charge_extra.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/timer.h" -#include "module_base/tool_threading.h" #include "module_io/cube_io.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/timer.h" +#include "source_base/tool_threading.h" Charge_Extra::Charge_Extra() { @@ -12,7 +12,7 @@ Charge_Extra::Charge_Extra() Charge_Extra::~Charge_Extra() { - if(pot_order == 3) + if (pot_order == 3) { delete[] dis_old1; delete[] dis_old2; @@ -40,7 +40,7 @@ void Charge_Extra::Init_CE(const int& nspin, const int& natom, const int& nrxx, } else { - ModuleBase::WARNING_QUIT("Charge_Extra","charge extrapolation method is not available !"); + ModuleBase::WARNING_QUIT("Charge_Extra", "charge extrapolation method is not available !"); } this->nspin = nspin; @@ -63,26 +63,25 @@ void Charge_Extra::Init_CE(const int& nspin, const int& natom, const int& nrxx, } } - if(pot_order == 3) + if (pot_order == 3) { dis_old1 = new ModuleBase::Vector3[natom]; dis_old2 = new ModuleBase::Vector3[natom]; - dis_now = new ModuleBase::Vector3[natom]; + dis_now = new ModuleBase::Vector3[natom]; } alpha = 1.0; - beta = 0.0; + beta = 0.0; } -void Charge_Extra::extrapolate_charge( - Parallel_Grid* Pgrid, - UnitCell& ucell, - Charge* chr, - Structure_Factor* sf, - std::ofstream& ofs_running, - std::ofstream& ofs_warning) +void Charge_Extra::extrapolate_charge(Parallel_Grid* Pgrid, + UnitCell& ucell, + Charge* chr, + Structure_Factor* sf, + std::ofstream& ofs_running, + std::ofstream& ofs_warning) { - ModuleBase::TITLE("Charge_Extra","extrapolate_charge"); + ModuleBase::TITLE("Charge_Extra", "extrapolate_charge"); ModuleBase::timer::tick("Charge_Extra", "extrapolate_charge"); //------------------------------------------------------- // Charge density extrapolation: @@ -91,12 +90,12 @@ void Charge_Extra::extrapolate_charge( // * pot_order=1 : subtract old atomic charge density and sum the new // if dynamics is done the routine extrapolates also the difference // between the scf charge and the atomic one; - // * pot_order=2 : first order extrapolation: + // * pot_order=2 : first order extrapolation: // \[ \rho(t+dt) = 2\ \rho(t)-\rho(t-dt); \] // * pot_order=3 : second order extrapolation: // \[ \rho(t+dt) = \rho(t) + \alpha_0\ (\rho(t) - \rho(t-dt)) // + \beta_0\ (\rho(t-dt)- \rho(t-2 dt)). \] - // + // // The \(\alpha_0\) and \(\beta_0\) parameters are calculated in find_alpha_and_beta() // so that \(|\tau'-\tau(t+dt)|\) is minimum. \(\tau'\) and \(\tau(t+dt)\) are respectively // the atomic positions at time t+dt and the extrapolated one: @@ -105,17 +104,16 @@ void Charge_Extra::extrapolate_charge( //------------------------------------------------------- rho_extr = std::min(istep, pot_order); - if(rho_extr == 0) + if (rho_extr == 0) { sf->setup_structure_factor(&ucell, *Pgrid, chr->rhopw); ofs_running << " charge density from previous step !" << std::endl; return; } - // if(lsda || noncolin) rho2zeta(); - if(rho_extr == 1) + if (rho_extr == 1) { ofs_running << " NEW-OLD atomic charge density approx. for the potential !" << std::endl; @@ -131,7 +129,7 @@ void Charge_Extra::extrapolate_charge( } } // first order extrapolation - else if(rho_extr ==2) + else if (rho_extr == 2) { ofs_running << " first order charge density extrapolation !" << std::endl; @@ -181,7 +179,7 @@ void Charge_Extra::extrapolate_charge( #endif for (int is = 0; is < this->nspin; is++) { - for(int ir=0; irrhopw->nrxx; ir++) + for (int ir = 0; ir < chr->rhopw->nrxx; ir++) { chr->rho[is][ir] /= ucell.omega; chr->rho[is][ir] += rho_atom[is][ir]; @@ -199,35 +197,36 @@ void Charge_Extra::extrapolate_charge( void Charge_Extra::find_alpha_and_beta(const int& natom, std::ofstream& ofs_running, std::ofstream& ofs_warning) { - if(istep < 3) return; + if (istep < 3) + return; double a11 = 0.0; double a12 = 0.0; double a21 = 0.0; double a22 = 0.0; - double b1 = 0.0; - double b2 = 0.0; - double c = 0.0; + double b1 = 0.0; + double b2 = 0.0; + double c = 0.0; double det = 0.0; #ifdef _OPENMP #pragma omp parallel for schedule(static, 16) \ reduction(+:a11) reduction(+:a12) reduction(+:a22) \ reduction(+:b1) reduction(+:b2) reduction(+:c) #endif - for(int i=0; i void Charge::init_rho(elecstate::efermi& eferm_iout, const UnitCell& ucell, @@ -29,7 +29,7 @@ void Charge::init_rho(elecstate::efermi& eferm_iout, ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "init_chg", PARAM.inp.init_chg); const int nspin = PARAM.inp.nspin; - assert(nspin>0); + assert(nspin > 0); std::cout << " START CHARGE : " << PARAM.inp.init_chg << std::endl; @@ -61,29 +61,30 @@ void Charge::init_rho(elecstate::efermi& eferm_iout, { std::stringstream ssc; ssc << PARAM.globalv.global_readin_dir << "chgs" << is + 1 << ".cube"; - if (ModuleIO::read_vdata_palgrid(pgrid, - (PARAM.inp.esolver_type == "sdft" ? GlobalV::RANK_IN_BPGROUP : GlobalV::MY_RANK), - GlobalV::ofs_running, - ssc.str(), - this->rho[is], - ucell.nat)) + if (ModuleIO::read_vdata_palgrid( + pgrid, + (PARAM.inp.esolver_type == "sdft" ? GlobalV::RANK_IN_BPGROUP : GlobalV::MY_RANK), + GlobalV::ofs_running, + ssc.str(), + this->rho[is], + ucell.nat)) { GlobalV::ofs_running << " Read electron density from file: " << ssc.str() << std::endl; } - else if (is > 0) // nspin=2 or 4 + else if (is > 0) // nspin=2 or 4 { - if (is == 1) // failed at the second spin + if (is == 1) // failed at the second spin { std::cout << " Incomplete electron density file." << std::endl; read_error = true; break; } - else if (is == 2) // read 2 files when nspin=4 + else if (is == 2) // read 2 files when nspin=4 { GlobalV::ofs_running << " Didn't read in the electron density but would rearrange it later. " - << std::endl; + << std::endl; } - else if (is == 3) // read 2 files when nspin=4 + else if (is == 3) // read 2 files when nspin=4 { GlobalV::ofs_running << " rearrange electron density " << std::endl; for (int ir = 0; ir < this->rhopw->nrxx; ir++) @@ -219,15 +220,16 @@ void Charge::init_rho(elecstate::efermi& eferm_iout, } catch (const std::exception& e) { - // try to load from the output of `out_chg` + // try to load from the output of `out_chg` std::stringstream ssc; ssc << PARAM.globalv.global_readin_dir << "chgs" << is + 1 << ".cube"; - if (ModuleIO::read_vdata_palgrid(pgrid, - (PARAM.inp.esolver_type == "sdft" ? GlobalV::RANK_IN_BPGROUP : GlobalV::MY_RANK), - GlobalV::ofs_running, - ssc.str(), - this->rho[is], - ucell.nat)) + if (ModuleIO::read_vdata_palgrid( + pgrid, + (PARAM.inp.esolver_type == "sdft" ? GlobalV::RANK_IN_BPGROUP : GlobalV::MY_RANK), + GlobalV::ofs_running, + ssc.str(), + this->rho[is], + ucell.nat)) { GlobalV::ofs_running << " Read in electron density: " << ssc.str() << std::endl; } @@ -249,27 +251,35 @@ void Charge::init_rho(elecstate::efermi& eferm_iout, const ModulePW::PW_Basis_K* pw_wfc = reinterpret_cast(const_cast(wfcpw)); const K_Vectors* kv = reinterpret_cast(klist); - ModuleIO::read_wf2rho_pw(pw_wfc, symm, *this, - PARAM.globalv.global_readin_dir, - GlobalV::KPAR, GlobalV::MY_POOL, GlobalV::MY_RANK, - GlobalV::NPROC_IN_POOL, GlobalV::RANK_IN_POOL, - PARAM.inp.nbands, nspin, PARAM.globalv.npol, - kv->get_nkstot(),kv->ik2iktot,kv->isk,GlobalV::ofs_running); + ModuleIO::read_wf2rho_pw(pw_wfc, + symm, + *this, + PARAM.globalv.global_readin_dir, + GlobalV::KPAR, + GlobalV::MY_POOL, + GlobalV::MY_RANK, + GlobalV::NPROC_IN_POOL, + GlobalV::RANK_IN_POOL, + PARAM.inp.nbands, + nspin, + PARAM.globalv.npol, + kv->get_nkstot(), + kv->ik2iktot, + kv->isk, + GlobalV::ofs_running); } } //========================================================== // computes the core charge on the real space 3D mesh. //========================================================== -void Charge::set_rho_core(const UnitCell& ucell, - const ModuleBase::ComplexMatrix& structure_factor, - const bool* numeric) +void Charge::set_rho_core(const UnitCell& ucell, const ModuleBase::ComplexMatrix& structure_factor, const bool* numeric) { - ModuleBase::TITLE("Charge","set_rho_core"); - ModuleBase::timer::tick("Charge","set_rho_core"); + ModuleBase::TITLE("Charge", "set_rho_core"); + ModuleBase::timer::tick("Charge", "set_rho_core"); bool bl = false; - for (int it = 0; itrho_core, this->rhopw->nrxx); - ModuleBase::timer::tick("Charge","set_rho_core"); + ModuleBase::GlobalFunc::ZEROS(this->rho_core, this->rhopw->nrxx); + ModuleBase::timer::tick("Charge", "set_rho_core"); return; } - double *rhocg = new double[this->rhopw->ngg]; - ModuleBase::GlobalFunc::ZEROS(rhocg, this->rhopw->ngg ); + double* rhocg = new double[this->rhopw->ngg]; + ModuleBase::GlobalFunc::ZEROS(rhocg, this->rhopw->ngg); - // three dimension. - std::complex *vg = new std::complex[this->rhopw->npw]; + // three dimension. + std::complex* vg = new std::complex[this->rhopw->npw]; - for (int it = 0; it < ucell.ntype;it++) + for (int it = 0; it < ucell.ntype; it++) { if (ucell.atoms[it].ncpp.nlcc) { -//---------------------------------------------------------- -// EXPLAIN : drhoc compute the radial fourier transform for -// each shell of g vec -//---------------------------------------------------------- - this->non_linear_core_correction( - numeric, - ucell.omega, - ucell.tpiba2, - ucell.atoms[it].ncpp.msh, - ucell.atoms[it].ncpp.r.data(), - ucell.atoms[it].ncpp.rab.data(), - ucell.atoms[it].ncpp.rho_atc.data(), - rhocg); -//---------------------------------------------------------- -// EXPLAIN : multiply by the structure factor and sum -//---------------------------------------------------------- - for (int ig = 0; ig < this->rhopw->npw ; ig++) + //---------------------------------------------------------- + // EXPLAIN : drhoc compute the radial fourier transform for + // each shell of g vec + //---------------------------------------------------------- + this->non_linear_core_correction(numeric, + ucell.omega, + ucell.tpiba2, + ucell.atoms[it].ncpp.msh, + ucell.atoms[it].ncpp.r.data(), + ucell.atoms[it].ncpp.rab.data(), + ucell.atoms[it].ncpp.rho_atc.data(), + rhocg); + //---------------------------------------------------------- + // EXPLAIN : multiply by the structure factor and sum + //---------------------------------------------------------- + for (int ig = 0; ig < this->rhopw->npw; ig++) { vg[ig] += structure_factor(it, ig) * rhocg[this->rhopw->ig2igg[ig]]; } } } - // for tmp use. - for(int ig=0; ig< this->rhopw->npw; ig++) - { - this->rhog_core[ig] = vg[ig]; - } + // for tmp use. + for (int ig = 0; ig < this->rhopw->npw; ig++) + { + this->rhog_core[ig] = vg[ig]; + } this->rhopw->recip2real(vg, this->rho_core); @@ -345,106 +354,100 @@ void Charge::set_rho_core(const UnitCell& ucell, // mentioned above) uncomment the following lines. SdG, Oct 15 1999 } - // mohan fix bug 2011-04-03 + // mohan fix bug 2011-04-03 Parallel_Reduce::reduce_pool(rhoneg); Parallel_Reduce::reduce_pool(rhoima); - // mohan changed 2010-2-2, make this same as in atomic_rho. - // still lack something...... + // mohan changed 2010-2-2, make this same as in atomic_rho. + // still lack something...... rhoneg /= this->rhopw->nxyz * ucell.omega; rhoima /= this->rhopw->nxyz * ucell.omega; // calculate core_only exch-corr energy etxcc=E_xc[rho_core] if required // The term was present in previous versions of the code but it shouldn't - delete [] rhocg; - delete [] vg; - ModuleBase::timer::tick("Charge","set_rho_core"); + delete[] rhocg; + delete[] vg; + ModuleBase::timer::tick("Charge", "set_rho_core"); return; } // end subroutine set_rhoc void Charge::set_rho_core_paw() { - ModuleBase::TITLE("Charge","set_rho_core_paw"); + ModuleBase::TITLE("Charge", "set_rho_core_paw"); } - -void Charge::non_linear_core_correction -( - const bool &numeric, - const double omega, - const double tpiba2, - const int mesh, - const double *r, - const double *rab, - const double *rhoc, - double *rhocg) const +void Charge::non_linear_core_correction(const bool& numeric, + const double omega, + const double tpiba2, + const int mesh, + const double* r, + const double* rab, + const double* rhoc, + double* rhocg) const { - ModuleBase::TITLE("charge","drhoc"); - - // use labmda instead of repeating codes - const auto kernel = [&](int num_threads, int thread_id) - { + ModuleBase::TITLE("charge", "drhoc"); - double gx = 0.0; - double rhocg1 = 0.0; - double *aux; + // use labmda instead of repeating codes + const auto kernel = [&](int num_threads, int thread_id) { + double gx = 0.0; + double rhocg1 = 0.0; + double* aux; - // here we compute the fourier transform is the charge in numeric form - if (numeric) - { - aux = new double [mesh]; - // G=0 term - - int igl0 = 0; - if (this->rhopw->gg_uniq [0] < 1.0e-8) + // here we compute the fourier transform is the charge in numeric form + if (numeric) { - // single thread term - if (thread_id == 0) - { - for (int ir = 0;ir < mesh; ir++) - { - aux [ir] = r [ir] * r [ir] * rhoc [ir]; - } - ModuleBase::Integral::Simpson_Integral(mesh, aux, rab, rhocg1); - //rhocg [1] = fpi * rhocg1 / omega; - rhocg [0] = ModuleBase::FOUR_PI * rhocg1 / omega;//mohan modify 2008-01-19 - } - igl0 = 1; - } + aux = new double[mesh]; + // G=0 term + + int igl0 = 0; + if (this->rhopw->gg_uniq[0] < 1.0e-8) + { + // single thread term + if (thread_id == 0) + { + for (int ir = 0; ir < mesh; ir++) + { + aux[ir] = r[ir] * r[ir] * rhoc[ir]; + } + ModuleBase::Integral::Simpson_Integral(mesh, aux, rab, rhocg1); + // rhocg [1] = fpi * rhocg1 / omega; + rhocg[0] = ModuleBase::FOUR_PI * rhocg1 / omega; // mohan modify 2008-01-19 + } + igl0 = 1; + } - int igl_beg, igl_end; - // exclude igl0 - ModuleBase::TASK_DIST_1D(num_threads, thread_id, this->rhopw->ngg - igl0, igl_beg, igl_end); - igl_beg += igl0; - igl_end += igl_beg; + int igl_beg, igl_end; + // exclude igl0 + ModuleBase::TASK_DIST_1D(num_threads, thread_id, this->rhopw->ngg - igl0, igl_beg, igl_end); + igl_beg += igl0; + igl_end += igl_beg; - // G <> 0 term - for (int igl = igl_beg; igl < igl_end;igl++) - { - gx = sqrt(this->rhopw->gg_uniq[igl] * tpiba2); - ModuleBase::Sphbes::Spherical_Bessel(mesh, r, gx, 0, aux); - for (int ir = 0;ir < mesh; ir++) + // G <> 0 term + for (int igl = igl_beg; igl < igl_end; igl++) { - aux [ir] = r[ir] * r[ir] * rhoc [ir] * aux [ir]; + gx = sqrt(this->rhopw->gg_uniq[igl] * tpiba2); + ModuleBase::Sphbes::Spherical_Bessel(mesh, r, gx, 0, aux); + for (int ir = 0; ir < mesh; ir++) + { + aux[ir] = r[ir] * r[ir] * rhoc[ir] * aux[ir]; + } // enddo + ModuleBase::Integral::Simpson_Integral(mesh, aux, rab, rhocg1); + rhocg[igl] = ModuleBase::FOUR_PI * rhocg1 / omega; } // enddo - ModuleBase::Integral::Simpson_Integral(mesh, aux, rab, rhocg1); - rhocg [igl] = ModuleBase::FOUR_PI * rhocg1 / omega; - } // enddo - delete [] aux; - } - else - { - // here the case where the charge is in analytic form, - // check old version before 2008-12-9 - } - - }; // end kernel + delete[] aux; + } + else + { + // here the case where the charge is in analytic form, + // check old version before 2008-12-9 + } + }; // end kernel - // do not use omp parallel when this function is already in parallel block - // - // it is called in parallel block in Forces::cal_force_cc, - // but not in other funtcion such as Stress_Func::stress_cc. - ModuleBase::TRY_OMP_PARALLEL(kernel); + // do not use omp parallel when this function is already in parallel block + // + // it is called in parallel block in Forces::cal_force_cc, + // but not in other funtcion such as Stress_Func::stress_cc. + ModuleBase::TRY_OMP_PARALLEL(kernel); return; } diff --git a/source/module_elecstate/module_charge/charge_mixing.cpp b/source/module_elecstate/module_charge/charge_mixing.cpp index e6e7d7f0ef..2754b96dcc 100644 --- a/source/module_elecstate/module_charge/charge_mixing.cpp +++ b/source/module_elecstate/module_charge/charge_mixing.cpp @@ -1,10 +1,10 @@ #include "charge_mixing.h" -#include "module_parameter/parameter.h" -#include "module_base/module_mixing/broyden_mixing.h" -#include "module_base/module_mixing/pulay_mixing.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/module_mixing/broyden_mixing.h" +#include "source_base/module_mixing/pulay_mixing.h" +#include "source_base/timer.h" Charge_Mixing::Charge_Mixing() { @@ -58,14 +58,14 @@ void Charge_Mixing::set_mixing(const std::string& mixing_mode_in, } // print into running.log - GlobalV::ofs_running<<"\n ----------- Charge Mixing Parameters ------------"<mixing_mode); ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "mixing_beta", this->mixing_beta); ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "mixing_gg0", this->mixing_gg0); ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "mixing_gg0_min", PARAM.inp.mixing_gg0_min); - if (PARAM.inp.nspin==2 || PARAM.inp.nspin==4) + if (PARAM.inp.nspin == 2 || PARAM.inp.nspin == 4) { ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "mixing_beta_mag", this->mixing_beta_mag); ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "mixing_gg0_mag", PARAM.inp.mixing_gg0_mag); @@ -108,7 +108,7 @@ void Charge_Mixing::init_mixing() ModuleBase::WARNING_QUIT("Charge_Mixing", "This Mixing mode is not implemended yet,coming soon."); } - if ( PARAM.globalv.double_grid) + if (PARAM.globalv.double_grid) { // ONLY smooth part of charge density is mixed by specific mixing method // The high_frequency part is mixed by plain mixing method. @@ -119,23 +119,21 @@ void Charge_Mixing::init_mixing() // allocate memory for mixing data, if exists, free it first and then allocate new memory // initailize rho_mdata if (PARAM.inp.scf_thr_type == 1) - { - if (PARAM.inp.nspin == 4 && PARAM.inp.mixing_angle > 0 ) + { + if (PARAM.inp.nspin == 4 && PARAM.inp.mixing_angle > 0) { - this->mixing->init_mixing_data(this->rho_mdata, - this->rhopw->npw * 2, - sizeof(std::complex)); + this->mixing->init_mixing_data(this->rho_mdata, this->rhopw->npw * 2, sizeof(std::complex)); } else { this->mixing->init_mixing_data(this->rho_mdata, - this->rhopw->npw * PARAM.inp.nspin, - sizeof(std::complex)); + this->rhopw->npw * PARAM.inp.nspin, + sizeof(std::complex)); } } else { - if (PARAM.inp.nspin == 4 && PARAM.inp.mixing_angle > 0 ) + if (PARAM.inp.nspin == 4 && PARAM.inp.mixing_angle > 0) { this->mixing->init_mixing_data(this->rho_mdata, this->rhopw->nrxx * 2, sizeof(double)); } @@ -144,7 +142,7 @@ void Charge_Mixing::init_mixing() this->mixing->init_mixing_data(this->rho_mdata, this->rhopw->nrxx * PARAM.inp.nspin, sizeof(double)); } } - + // initailize tau_mdata if ((XC_Functional::get_ked_flag()) && mixing_tau) { @@ -182,11 +180,14 @@ void Charge_Mixing::mix_reset() } } -bool Charge_Mixing::if_scf_oscillate(const int iteration, const double drho, const int iternum_used, const double threshold) +bool Charge_Mixing::if_scf_oscillate(const int iteration, + const double drho, + const int iternum_used, + const double threshold) { ModuleBase::TITLE("Charge_Mixing", "if_scf_oscillate"); - if(this->_drho_history.size() == 0) + if (this->_drho_history.size() == 0) { this->_drho_history.resize(PARAM.inp.scf_nmax); } @@ -194,13 +195,13 @@ bool Charge_Mixing::if_scf_oscillate(const int iteration, const double drho, con // add drho into history this->_drho_history[iteration - 1] = drho; - if(threshold >= 0) // close the function + if (threshold >= 0) // close the function { return false; } // check if the history is long enough - if(iteration < iternum_used + this->mixing_restart_last) + if (iteration < iternum_used + this->mixing_restart_last) { return false; } @@ -220,13 +221,14 @@ bool Charge_Mixing::if_scf_oscillate(const int iteration, const double drho, con } double numerator = iternum_used * sumXY - sumX * sumY; double denominator = iternum_used * sumXX - sumX * sumX; - if (denominator == 0) { + if (denominator == 0) + { return false; } - slope = numerator / denominator; + slope = numerator / denominator; // if the slope is less than the threshold, return true - if(slope > threshold) + if (slope > threshold) { return true; } diff --git a/source/module_elecstate/module_charge/charge_mixing.h b/source/module_elecstate/module_charge/charge_mixing.h index d6fdbc2586..95c39eb26a 100644 --- a/source/module_elecstate/module_charge/charge_mixing.h +++ b/source/module_elecstate/module_charge/charge_mixing.h @@ -2,20 +2,20 @@ #define CHARGE_MIXING_H #include "charge.h" #include "module_elecstate/module_dm/density_matrix.h" -#include "module_base/module_mixing/mixing.h" -#include "module_base/module_mixing/plain_mixing.h" +#include "source_base/module_mixing/mixing.h" +#include "source_base/module_mixing/plain_mixing.h" class Charge_Mixing { - /// Charge_Mixing class - /// This class is used to mix charge density, kinetic energy density and real-space density matrix - /// This Charge_Mixing class offers the following interfaces: - /// 1. set_mixing() to set all private mixing parameters - /// 2. init_mixing() to initialize mixing, including allocating memory for mixing data and reset mixing - /// 3. mix_rho() to mix charge density - /// 4. mix_dmr() to mix real-space density matrix - /// how to use it: - /// you can (re)start a mixing by calling set_mixing() and init_mixing() before calling mix_rho() or mix_dmr() + /// Charge_Mixing class + /// This class is used to mix charge density, kinetic energy density and real-space density matrix + /// This Charge_Mixing class offers the following interfaces: + /// 1. set_mixing() to set all private mixing parameters + /// 2. init_mixing() to initialize mixing, including allocating memory for mixing data and reset mixing + /// 3. mix_rho() to mix charge density + /// 4. mix_dmr() to mix real-space density matrix + /// how to use it: + /// you can (re)start a mixing by calling set_mixing() and init_mixing() before calling mix_rho() or mix_dmr() public: Charge_Mixing(); @@ -49,7 +49,11 @@ class Charge_Mixing double& omega_in, double& tpiba_in); - void close_kerker_gg0() { mixing_gg0 = 0.0; mixing_gg0_mag = 0.0; } + void close_kerker_gg0() + { + mixing_gg0 = 0.0; + mixing_gg0_mag = 0.0; + } /** * @brief initialize mixing, including constructing mixing and allocating memory for mixing data * @brief this function should be called at eachiterinit() @@ -74,7 +78,7 @@ class Charge_Mixing */ void mix_dmr(elecstate::DensityMatrix* DM); void mix_dmr(elecstate::DensityMatrix, double>* DM); - + /** * @brief Get the drho between rho and rho_save, similar for get_dkin * @@ -83,10 +87,10 @@ class Charge_Mixing double get_dkin(Charge* chr, const double nelec); /** - * @brief reset mixing, actually we only call init_mixing() to reset mixing instead of this function + * @brief reset mixing, actually we only call init_mixing() to reset mixing instead of this function */ void mix_reset(); - + /** * @brief Set the smooth and dense grids * @param rhopw_in smooth grid @@ -96,28 +100,45 @@ class Charge_Mixing // extracting parameters normally these parameters will not be used outside charge mixing // while Exx is using them as well as some other places - const std::string& get_mixing_mode() const {return mixing_mode;} - double get_mixing_beta() const {return mixing_beta;} - int get_mixing_ndim() const {return mixing_ndim;} - double get_mixing_gg0() const {return mixing_gg0;} - Base_Mixing::Mixing* get_mixing() const {return mixing;} + const std::string& get_mixing_mode() const + { + return mixing_mode; + } + double get_mixing_beta() const + { + return mixing_beta; + } + int get_mixing_ndim() const + { + return mixing_ndim; + } + double get_mixing_gg0() const + { + return mixing_gg0; + } + Base_Mixing::Mixing* get_mixing() const + { + return mixing; + } // for mixing restart - int mixing_restart_step = 0; //which step to restart mixing during SCF, always equal to scf_namx except for the mixing restart - int mixing_restart_count = 0; // the number of restart mixing during SCF. Do not set mixing_restart_count as bool since I want to keep some flexibility in the future - int mixing_restart_last = 0; // the label of mixing restart step, store the step number of the last mixing restart + int mixing_restart_step + = 0; // which step to restart mixing during SCF, always equal to scf_namx except for the mixing restart + int mixing_restart_count = 0; // the number of restart mixing during SCF. Do not set mixing_restart_count as bool + // since I want to keep some flexibility in the future + int mixing_restart_last = 0; // the label of mixing restart step, store the step number of the last mixing restart // to calculate the slope of drho curve during SCF, which is used to determine if SCF oscillate bool if_scf_oscillate(const int iteration, const double drho, const int iternum_used, const double threshold); - + private: - // mixing_data - Base_Mixing::Mixing* mixing = nullptr; ///< Mixing object to mix charge density, kinetic energy density and compensation density - Base_Mixing::Mixing_Data rho_mdata; ///< Mixing data for charge density - Base_Mixing::Mixing_Data tau_mdata; ///< Mixing data for kinetic energy density - Base_Mixing::Mixing_Data nhat_mdata; ///< Mixing data for compensation density - Base_Mixing::Mixing_Data dmr_mdata; ///< Mixing data for real space density matrix + Base_Mixing::Mixing* mixing + = nullptr; ///< Mixing object to mix charge density, kinetic energy density and compensation density + Base_Mixing::Mixing_Data rho_mdata; ///< Mixing data for charge density + Base_Mixing::Mixing_Data tau_mdata; ///< Mixing data for kinetic energy density + Base_Mixing::Mixing_Data nhat_mdata; ///< Mixing data for compensation density + Base_Mixing::Mixing_Data dmr_mdata; ///< Mixing data for real space density matrix Base_Mixing::Plain_Mixing* mixing_highf = nullptr; ///< The high_frequency part is mixed by plain mixing method. //====================================== @@ -133,11 +154,11 @@ class Charge_Mixing double mixing_gg0_min = 0.1; ///< minimum kerker coefficient double mixing_angle = 0.0; ///< mixing angle for nspin=4 bool mixing_dmr = false; ///< whether to mixing real space density matrix - double* omega = nullptr; ///< omega for non-linear core correction - double* tpiba = nullptr; ///< 2*pi/beta for non-linear core correction - double* tpiba2 = nullptr; ///< 2*pi/beta^2 for non-linear core correction - std::vector _drho_history; ///< history of drho used to determine the oscillation, size is scf_nmax - + double* omega = nullptr; ///< omega for non-linear core correction + double* tpiba = nullptr; ///< 2*pi/beta for non-linear core correction + double* tpiba2 = nullptr; ///< 2*pi/beta^2 for non-linear core correction + std::vector _drho_history; ///< history of drho used to determine the oscillation, size is scf_nmax + bool new_e_iteration = true; ModulePW::PW_Basis* rhopw = nullptr; ///< smooth grid @@ -197,7 +218,7 @@ class Charge_Mixing * @param data_d dense data * @param data_s smooth data * @param data_hf high frequency data = dense data - smooth data - * + * */ void combine_data(std::complex* data_d, std::complex*& data_s, std::complex*& data_hf); /** diff --git a/source/module_elecstate/module_charge/charge_mixing_dmr.cpp b/source/module_elecstate/module_charge/charge_mixing_dmr.cpp index 516e489d68..f4e20afc0c 100644 --- a/source/module_elecstate/module_charge/charge_mixing_dmr.cpp +++ b/source/module_elecstate/module_charge/charge_mixing_dmr.cpp @@ -1,13 +1,13 @@ #include "charge_mixing.h" - #include "module_parameter/parameter.h" -#include "module_base/timer.h" +#include "source_base/timer.h" void Charge_Mixing::allocate_mixing_dmr(const int nnr) { // Note that: we cannot allocate memory for dmr_mdata in set_mixing. - // since the size of dmr_mdata is given by the size of HContainer.nnr, which is calculated in DensityMatrix::init_DMR(). - // and DensityMatrix::init_DMR() is called in beforescf(). While set_mixing() is called in ESolver_KS::Init(). + // since the size of dmr_mdata is given by the size of HContainer.nnr, which is calculated in + // DensityMatrix::init_DMR(). and DensityMatrix::init_DMR() is called in beforescf(). While set_mixing() is called + // in ESolver_KS::Init(). ModuleBase::TITLE("Charge_Mixing", "allocate_mixing_dmr"); ModuleBase::timer::tick("Charge_Mixing", "allocate_mixing_dmr"); // @@ -37,21 +37,21 @@ void Charge_Mixing::mix_dmr(elecstate::DensityMatrix* DM) std::vector*> dmr = DM->get_DMR_vector(); std::vector>& dmr_save = DM->get_DMR_save(); // - //const int dmr_nspin = (PARAM.inp.nspin == 2) ? 2 : 1; + // const int dmr_nspin = (PARAM.inp.nspin == 2) ? 2 : 1; double* dmr_in = nullptr; double* dmr_out = nullptr; if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 4) { dmr_in = dmr_save[0].data(); dmr_out = dmr[0]->get_wrapper(); - this->mixing->push_data(this->dmr_mdata, dmr_in, dmr_out, nullptr, false); + this->mixing->push_data(this->dmr_mdata, dmr_in, dmr_out, nullptr, false); this->mixing->mix_data(this->dmr_mdata, dmr_out); } else if (PARAM.inp.nspin == 2) { // magnetic density matrix double* dmr_mag = nullptr; - double* dmr_mag_save = nullptr; + double* dmr_mag_save = nullptr; const int nnr = dmr[0]->get_nnr(); // allocate dmr_mag[is*nnrx] and dmr_mag_save[is*nnrx] dmr_mag = new double[nnr * PARAM.inp.nspin]; @@ -80,9 +80,8 @@ void Charge_Mixing::mix_dmr(elecstate::DensityMatrix* DM) dmr_in = dmr_mag_save; dmr_out = dmr_mag; // no kerker in mixing_dmr - //auto screen = std::bind(&Charge_Mixing::Kerker_screen_real, this, std::placeholders::_1); - auto twobeta_mix - = [this, nnr](double* out, const double* in, const double* sres) { + // auto screen = std::bind(&Charge_Mixing::Kerker_screen_real, this, std::placeholders::_1); + auto twobeta_mix = [this, nnr](double* out, const double* in, const double* sres) { #ifdef _OPENMP #pragma omp parallel for schedule(static, 256) #endif @@ -100,9 +99,9 @@ void Charge_Mixing::mix_dmr(elecstate::DensityMatrix* DM) } }; this->mixing->push_data(this->dmr_mdata, dmr_in, dmr_out, nullptr, twobeta_mix, false); - //auto inner_product - // = std::bind(&Charge_Mixing::inner_product_real, this, std::placeholders::_1, std::placeholders::_2); - //this->mixing->cal_coef(this->rho_mdata, inner_product); + // auto inner_product + // = std::bind(&Charge_Mixing::inner_product_real, this, std::placeholders::_1, std::placeholders::_2); + // this->mixing->cal_coef(this->rho_mdata, inner_product); this->mixing->mix_data(this->dmr_mdata, dmr_out); // get new dmr from dmr_mag dmr_up = dmr[0]->get_wrapper(); @@ -114,8 +113,8 @@ void Charge_Mixing::mix_dmr(elecstate::DensityMatrix* DM) } for (int ir = 0; ir < nnr; ir++) { - dmr_up[ir] = 0.5 * (dmr_mag[ir] + dmr_mag[ir+nnr]); - dmr_down[ir] = 0.5 * (dmr_mag[ir] - dmr_mag[ir+nnr]); + dmr_up[ir] = 0.5 * (dmr_mag[ir] + dmr_mag[ir + nnr]); + dmr_down[ir] = 0.5 * (dmr_mag[ir] - dmr_mag[ir + nnr]); } // delete delete[] dmr_mag; @@ -136,21 +135,21 @@ void Charge_Mixing::mix_dmr(elecstate::DensityMatrix, doubl std::vector*> dmr = DM->get_DMR_vector(); std::vector>& dmr_save = DM->get_DMR_save(); // - //const int dmr_nspin = (PARAM.inp.nspin == 2) ? 2 : 1; + // const int dmr_nspin = (PARAM.inp.nspin == 2) ? 2 : 1; double* dmr_in = nullptr; double* dmr_out = nullptr; if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 4) { dmr_in = dmr_save[0].data(); dmr_out = dmr[0]->get_wrapper(); - this->mixing->push_data(this->dmr_mdata, dmr_in, dmr_out, nullptr, false); + this->mixing->push_data(this->dmr_mdata, dmr_in, dmr_out, nullptr, false); this->mixing->mix_data(this->dmr_mdata, dmr_out); } else if (PARAM.inp.nspin == 2) { // magnetic density matrix double* dmr_mag = nullptr; - double* dmr_mag_save = nullptr; + double* dmr_mag_save = nullptr; const int nnr = dmr[0]->get_nnr(); // allocate dmr_mag[is*nnrx] and dmr_mag_save[is*nnrx] dmr_mag = new double[nnr * PARAM.inp.nspin]; @@ -179,9 +178,8 @@ void Charge_Mixing::mix_dmr(elecstate::DensityMatrix, doubl dmr_in = dmr_mag_save; dmr_out = dmr_mag; // no kerker in mixing_dmr - //auto screen = std::bind(&Charge_Mixing::Kerker_screen_real, this, std::placeholders::_1); - auto twobeta_mix - = [this, nnr](double* out, const double* in, const double* sres) { + // auto screen = std::bind(&Charge_Mixing::Kerker_screen_real, this, std::placeholders::_1); + auto twobeta_mix = [this, nnr](double* out, const double* in, const double* sres) { #ifdef _OPENMP #pragma omp parallel for schedule(static, 256) #endif @@ -199,9 +197,9 @@ void Charge_Mixing::mix_dmr(elecstate::DensityMatrix, doubl } }; this->mixing->push_data(this->dmr_mdata, dmr_in, dmr_out, nullptr, twobeta_mix, false); - //auto inner_product - // = std::bind(&Charge_Mixing::inner_product_real, this, std::placeholders::_1, std::placeholders::_2); - //this->mixing->cal_coef(this->rho_mdata, inner_product); + // auto inner_product + // = std::bind(&Charge_Mixing::inner_product_real, this, std::placeholders::_1, std::placeholders::_2); + // this->mixing->cal_coef(this->rho_mdata, inner_product); this->mixing->mix_data(this->dmr_mdata, dmr_out); // get new dmr from dmr_mag dmr_up = dmr[0]->get_wrapper(); @@ -213,8 +211,8 @@ void Charge_Mixing::mix_dmr(elecstate::DensityMatrix, doubl } for (int ir = 0; ir < nnr; ir++) { - dmr_up[ir] = 0.5 * (dmr_mag[ir] + dmr_mag[ir+nnr]); - dmr_down[ir] = 0.5 * (dmr_mag[ir] - dmr_mag[ir+nnr]); + dmr_up[ir] = 0.5 * (dmr_mag[ir] + dmr_mag[ir + nnr]); + dmr_down[ir] = 0.5 * (dmr_mag[ir] - dmr_mag[ir + nnr]); } // delete delete[] dmr_mag; diff --git a/source/module_elecstate/module_charge/charge_mixing_preconditioner.cpp b/source/module_elecstate/module_charge/charge_mixing_preconditioner.cpp index ad8ea3801b..7f129b5210 100644 --- a/source/module_elecstate/module_charge/charge_mixing_preconditioner.cpp +++ b/source/module_elecstate/module_charge/charge_mixing_preconditioner.cpp @@ -1,22 +1,24 @@ #include "charge_mixing.h" - -#include "module_parameter/parameter.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" void Charge_Mixing::Kerker_screen_recip(std::complex* drhog) { - if (this->mixing_gg0 <= 0.0 || this->mixing_beta <= 0.1) { + if (this->mixing_gg0 <= 0.0 || this->mixing_beta <= 0.1) + { return; -} + } double fac = 0.0; double gg0 = 0.0; double amin = 0.0; /// consider a resize for mixing_angle int resize_tmp = 1; - if (PARAM.inp.nspin == 4 && this->mixing_angle > 0) { resize_tmp = 2; -} + if (PARAM.inp.nspin == 4 && this->mixing_angle > 0) + { + resize_tmp = 2; + } /// implement Kerker for density and magnetization separately for (int is = 0; is < PARAM.inp.nspin / resize_tmp; ++is) @@ -30,10 +32,10 @@ void Charge_Mixing::Kerker_screen_recip(std::complex* drhog) assert(is == 1); // make sure break works #endif double is_mag = PARAM.inp.nspin - 1; - //for (int ig = 0; ig < this->rhopw->npw * is_mag; ig++) + // for (int ig = 0; ig < this->rhopw->npw * is_mag; ig++) //{ - // drhog[is * this->rhopw->npw + ig] *= 1; - //} + // drhog[is * this->rhopw->npw + ig] *= 1; + // } break; } fac = this->mixing_gg0_mag; @@ -61,14 +63,17 @@ void Charge_Mixing::Kerker_screen_recip(std::complex* drhog) void Charge_Mixing::Kerker_screen_real(double* drhor) { - if (this->mixing_gg0 <= 0.0001 || this->mixing_beta <= 0.1) { + if (this->mixing_gg0 <= 0.0001 || this->mixing_beta <= 0.1) + { return; -} + } /// consider a resize for mixing_angle int resize_tmp = 1; - if (PARAM.inp.nspin == 4 && this->mixing_angle > 0) { resize_tmp = 2; -} - + if (PARAM.inp.nspin == 4 && this->mixing_angle > 0) + { + resize_tmp = 2; + } + std::vector> drhog(this->rhopw->npw * PARAM.inp.nspin / resize_tmp); std::vector drhor_filter(this->rhopw->nrxx * PARAM.inp.nspin / resize_tmp); for (int is = 0; is < PARAM.inp.nspin / resize_tmp; ++is) @@ -93,8 +98,10 @@ void Charge_Mixing::Kerker_screen_real(double* drhor) assert(is == 1); /// make sure break works #endif double is_mag = PARAM.inp.nspin - 1; - if (PARAM.inp.nspin == 4 && this->mixing_angle > 0) { is_mag = 1; -} + if (PARAM.inp.nspin == 4 && this->mixing_angle > 0) + { + is_mag = 1; + } for (int ig = 0; ig < this->rhopw->npw * is_mag; ig++) { drhog[is * this->rhopw->npw + ig] = 0; @@ -109,7 +116,7 @@ void Charge_Mixing::Kerker_screen_real(double* drhor) fac = this->mixing_gg0; amin = this->mixing_beta; } - + gg0 = std::pow(fac * 0.529177 / *this->tpiba, 2); #ifdef _OPENMP #pragma omp parallel for schedule(static, 512) @@ -118,7 +125,7 @@ void Charge_Mixing::Kerker_screen_real(double* drhor) { double gg = this->rhopw->gg[ig]; // I have not decided how to handle gg=0 part, will be changed in future - //if (gg == 0) + // if (gg == 0) //{ // drhog[is * this->rhopw->npw + ig] *= 0; // continue; diff --git a/source/module_elecstate/module_charge/charge_mixing_residual.cpp b/source/module_elecstate/module_charge/charge_mixing_residual.cpp index b195f1c790..b648cb183a 100644 --- a/source/module_elecstate/module_charge/charge_mixing_residual.cpp +++ b/source/module_elecstate/module_charge/charge_mixing_residual.cpp @@ -1,9 +1,8 @@ #include "charge_mixing.h" - -#include "module_parameter/parameter.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/parallel_reduce.h" +#include "module_parameter/parameter.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" double Charge_Mixing::get_drho(Charge* chr, const double nelec) { @@ -79,7 +78,7 @@ double Charge_Mixing::get_dkin(Charge* chr, const double nelec) ModuleBase::TITLE("Charge_Mixing", "get_dkin"); ModuleBase::timer::tick("Charge_Mixing", "get_dkin"); double dkin = 0.0; - + // Get dkin from kin_r and kin_r_save for PW and LCAO both, which is different from drho. for (int is = 0; is < PARAM.inp.nspin; is++) { @@ -126,19 +125,18 @@ double Charge_Mixing::inner_product_recip_rho(std::complex* rho1, std::c double sum = 0.0; - auto part_of_noncolin = [&]() - { + auto part_of_noncolin = [&]() { double sum = 0.0; #ifdef _OPENMP #pragma omp parallel for reduction(+ : sum) #endif for (int ig = 0; ig < this->rhopw->npw; ++ig) { - if (this->rhopw->gg[ig] < 1e-8) - { - continue; - } - sum += (conj(rhog1[0][ig]) * rhog2[0][ig]).real() / this->rhopw->gg[ig]; + if (this->rhopw->gg[ig] < 1e-8) + { + continue; + } + sum += (conj(rhog1[0][ig]) * rhog2[0][ig]).real() / this->rhopw->gg[ig]; } sum *= fac; return sum; @@ -157,9 +155,10 @@ double Charge_Mixing::inner_product_recip_rho(std::complex* rho1, std::c #endif for (int ig = 0; ig < this->rhopw->npw; ++ig) { - if (this->rhopw->gg[ig] < 1e-8) { + if (this->rhopw->gg[ig] < 1e-8) + { continue; -} + } sum += (conj(rhog1[0][ig] + rhog1[1][ig]) * (rhog2[0][ig] + rhog2[1][ig])).real() / this->rhopw->gg[ig]; } sum *= fac; @@ -198,9 +197,11 @@ double Charge_Mixing::inner_product_recip_rho(std::complex* rho1, std::c } case 4: // non-collinear spin, added by zhengdy - if (!PARAM.globalv.domag && !PARAM.globalv.domag_z) { + if (!PARAM.globalv.domag && !PARAM.globalv.domag_z) + { sum += part_of_noncolin(); - } else + } + else { // another part with magnetization #ifdef _OPENMP @@ -208,10 +209,10 @@ double Charge_Mixing::inner_product_recip_rho(std::complex* rho1, std::c #endif for (int ig = 0; ig < this->rhopw->npw; ig++) { - if (ig == this->rhopw->ig_gge0) - { - continue; - } + if (ig == this->rhopw->ig_gge0) + { + continue; + } sum += (conj(rhog1[0][ig]) * rhog2[0][ig]).real() / this->rhopw->gg[ig]; } sum *= fac; @@ -232,9 +233,10 @@ double Charge_Mixing::inner_product_recip_rho(std::complex* rho1, std::c #endif for (int ig = 0; ig < this->rhopw->npw; ig++) { - if (ig == ig0) { + if (ig == ig0) + { continue; -} + } sum += fac3 * ((conj(rhog1[1][ig]) * rhog2[1][ig]).real() + (conj(rhog1[2][ig]) * rhog2[2][ig]).real() + (conj(rhog1[3][ig]) * rhog2[3][ig]).real()); @@ -264,8 +266,10 @@ double Charge_Mixing::inner_product_recip_simple(std::complex* rho1, std double rnorm = 0.0; // consider a resize for mixing_angle int resize_tmp = 1; - if (PARAM.inp.nspin == 4 && this->mixing_angle > 0) { resize_tmp = 2; -} + if (PARAM.inp.nspin == 4 && this->mixing_angle > 0) + { + resize_tmp = 2; + } #ifdef _OPENMP #pragma omp parallel for reduction(+ : rnorm) #endif @@ -295,28 +299,28 @@ double Charge_Mixing::inner_product_recip_hartree(std::complex* rhog1, s const int npw = this->rhopw->npw; // a lambda function for summing the charge density - auto part_of_rho = [&]() - { + auto part_of_rho = [&]() { double sum = 0.0; #ifdef _OPENMP #pragma omp parallel for reduction(+ : sum) #endif for (int ig = 0; ig < this->rhopw->npw; ++ig) { - if (this->rhopw->gg[ig] < 1e-8) { + if (this->rhopw->gg[ig] < 1e-8) + { continue; -} + } sum += (conj(rhog1[ig]) * rhog2[ig]).real() / this->rhopw->gg[ig]; } sum *= fac; return sum; }; - - if (PARAM.inp.nspin==1) + + if (PARAM.inp.nspin == 1) { sum += part_of_rho(); } - else if (PARAM.inp.nspin==2) + else if (PARAM.inp.nspin == 2) { // charge density part #ifdef _OPENMP @@ -324,9 +328,10 @@ double Charge_Mixing::inner_product_recip_hartree(std::complex* rhog1, s #endif for (int ig = 0; ig < this->rhopw->npw; ++ig) { - if (this->rhopw->gg[ig] < 1e-8) { + if (this->rhopw->gg[ig] < 1e-8) + { continue; -} + } sum += (conj(rhog1[ig]) * (rhog2[ig])).real() / this->rhopw->gg[ig]; } sum *= fac; @@ -360,7 +365,7 @@ double Charge_Mixing::inner_product_recip_hartree(std::complex* rhog1, s sum2 += mag; sum += sum2; } - else if (PARAM.inp.nspin==4) + else if (PARAM.inp.nspin == 4) { if (!PARAM.globalv.domag && !PARAM.globalv.domag_z) { @@ -374,9 +379,10 @@ double Charge_Mixing::inner_product_recip_hartree(std::complex* rhog1, s #endif for (int ig = 0; ig < this->rhopw->npw; ig++) { - if (ig == this->rhopw->ig_gge0) { + if (ig == this->rhopw->ig_gge0) + { continue; -} + } sum += (conj(rhog1[ig]) * rhog2[ig]).real() / this->rhopw->gg[ig]; } sum *= fac; @@ -384,8 +390,9 @@ double Charge_Mixing::inner_product_recip_hartree(std::complex* rhog1, s if (ig0 > 0) { sum += fac2 - * ((conj(rhog1[ig0 + npw]) * rhog2[ig0 + npw]).real() + (conj(rhog1[ig0 + 2*npw]) * rhog2[ig0 + 2*npw]).real() - + (conj(rhog1[ig0 + 3*npw]) * rhog2[ig0 + 3*npw]).real()); + * ((conj(rhog1[ig0 + npw]) * rhog2[ig0 + npw]).real() + + (conj(rhog1[ig0 + 2 * npw]) * rhog2[ig0 + 2 * npw]).real() + + (conj(rhog1[ig0 + 3 * npw]) * rhog2[ig0 + 3 * npw]).real()); } double fac3 = fac2; if (PARAM.globalv.gamma_only_pw) @@ -397,12 +404,14 @@ double Charge_Mixing::inner_product_recip_hartree(std::complex* rhog1, s #endif for (int ig = 0; ig < this->rhopw->npw; ig++) { - if (ig == ig0) { + if (ig == ig0) + { continue; -} + } sum += fac3 - * ((conj(rhog1[ig + npw]) * rhog2[ig + npw]).real() + (conj(rhog1[ig + 2*npw]) * rhog2[ig + 2*npw]).real() - + (conj(rhog1[ig + 3*npw]) * rhog2[ig + 3*npw]).real()); + * ((conj(rhog1[ig + npw]) * rhog2[ig + npw]).real() + + (conj(rhog1[ig + 2 * npw]) * rhog2[ig + 2 * npw]).real() + + (conj(rhog1[ig + 3 * npw]) * rhog2[ig + 3 * npw]).real()); } } else if (this->mixing_angle > 0) @@ -413,17 +422,17 @@ double Charge_Mixing::inner_product_recip_hartree(std::complex* rhog1, s #endif for (int ig = 0; ig < this->rhopw->npw; ig++) { - if (ig == this->rhopw->ig_gge0) { + if (ig == this->rhopw->ig_gge0) + { continue; -} + } sum += (conj(rhog1[ig]) * rhog2[ig]).real() / this->rhopw->gg[ig]; } sum *= fac; const int ig0 = this->rhopw->ig_gge0; if (ig0 > 0) { - sum += fac2 - * ((conj(rhog1[ig0 + this->rhopw->npw]) * rhog2[ig0 + this->rhopw->npw]).real()); + sum += fac2 * ((conj(rhog1[ig0 + this->rhopw->npw]) * rhog2[ig0 + this->rhopw->npw]).real()); } double fac3 = fac2; if (PARAM.globalv.gamma_only_pw) @@ -435,11 +444,11 @@ double Charge_Mixing::inner_product_recip_hartree(std::complex* rhog1, s #endif for (int ig = 0; ig < this->rhopw->npw; ig++) { - if (ig == ig0) { + if (ig == ig0) + { continue; -} - sum += fac3 - * ((conj(rhog1[ig + this->rhopw->npw]) * rhog2[ig + this->rhopw->npw]).real()); + } + sum += fac3 * ((conj(rhog1[ig + this->rhopw->npw]) * rhog2[ig + this->rhopw->npw]).real()); } } } @@ -459,10 +468,10 @@ double Charge_Mixing::inner_product_real(double* rho1, double* rho2) double rnorm = 0.0; // consider a resize for mixing_angle int resize_tmp = 1; - if (PARAM.inp.nspin == 4 && this->mixing_angle > 0) - { - resize_tmp = 2; - } + if (PARAM.inp.nspin == 4 && this->mixing_angle > 0) + { + resize_tmp = 2; + } #ifdef _OPENMP #pragma omp parallel for reduction(+ : rnorm) diff --git a/source/module_elecstate/module_charge/charge_mixing_rho.cpp b/source/module_elecstate/module_charge/charge_mixing_rho.cpp index 7b0d110633..4fcf965435 100644 --- a/source/module_elecstate/module_charge/charge_mixing_rho.cpp +++ b/source/module_elecstate/module_charge/charge_mixing_rho.cpp @@ -1,7 +1,7 @@ #include "charge_mixing.h" -#include "module_parameter/parameter.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" void Charge_Mixing::mix_rho_recip(Charge* chr) { @@ -14,7 +14,7 @@ void Charge_Mixing::mix_rho_recip(Charge* chr) std::complex* rhoghf_in = nullptr; std::complex* rhoghf_out = nullptr; - if ( PARAM.globalv.double_grid) + if (PARAM.globalv.double_grid) { // divide into smooth part and high_frequency part divide_data(chr->rhog_save[0], rhogs_in, rhoghf_in); @@ -38,8 +38,8 @@ void Charge_Mixing::mix_rho_recip(Charge* chr) else if (PARAM.inp.nspin == 2) { // magnetic density - std::complex *rhog_mag = nullptr; - std::complex *rhog_mag_save = nullptr; + std::complex* rhog_mag = nullptr; + std::complex* rhog_mag_save = nullptr; const int npw = this->rhopw->npw; // allocate rhog_mag[is*ngmc] and rhog_mag_save[is*ngmc] rhog_mag = new std::complex[npw * PARAM.inp.nspin]; @@ -90,14 +90,14 @@ void Charge_Mixing::mix_rho_recip(Charge* chr) } for (int ig = 0; ig < npw; ig++) { - chr->rhog[0][ig] = 0.5 * (rhog_mag[ig] + rhog_mag[ig+npw]); - chr->rhog[1][ig] = 0.5 * (rhog_mag[ig] - rhog_mag[ig+npw]); + chr->rhog[0][ig] = 0.5 * (rhog_mag[ig] + rhog_mag[ig + npw]); + chr->rhog[1][ig] = 0.5 * (rhog_mag[ig] - rhog_mag[ig + npw]); } // delete delete[] rhog_mag; delete[] rhog_mag_save; // get rhogs_out for combine_data() - if ( PARAM.globalv.double_grid) + if (PARAM.globalv.double_grid) { for (int ig = 0; ig < npw; ig++) { @@ -140,7 +140,7 @@ void Charge_Mixing::mix_rho_recip(Charge* chr) // special broyden mixing for {rho, |m|} proposed by J. Phys. Soc. Jpn. 82 (2013) 114706 // here only consider the case of mixing_angle = 1, which mean only change |m| and keep angle fixed // old support see mix_rho_recip() - if ( PARAM.globalv.double_grid) + if (PARAM.globalv.double_grid) { ModuleBase::WARNING_QUIT("Charge_Mixing", "double_grid is not supported for new mixing method yet."); } @@ -154,9 +154,12 @@ void Charge_Mixing::mix_rho_recip(Charge* chr) for (int ir = 0; ir < nrxx; ir++) { // |m| for rho - rho_magabs[ir] = std::sqrt(chr->rho[1][ir] * chr->rho[1][ir] + chr->rho[2][ir] * chr->rho[2][ir] + chr->rho[3][ir] * chr->rho[3][ir]); + rho_magabs[ir] = std::sqrt(chr->rho[1][ir] * chr->rho[1][ir] + chr->rho[2][ir] * chr->rho[2][ir] + + chr->rho[3][ir] * chr->rho[3][ir]); // |m| for rho_save - rho_magabs_save[ir] = std::sqrt(chr->rho_save[1][ir] * chr->rho_save[1][ir] + chr->rho_save[2][ir] * chr->rho_save[2][ir] + chr->rho_save[3][ir] * chr->rho_save[3][ir]); + rho_magabs_save[ir] + = std::sqrt(chr->rho_save[1][ir] * chr->rho_save[1][ir] + chr->rho_save[2][ir] * chr->rho_save[2][ir] + + chr->rho_save[3][ir] * chr->rho_save[3][ir]); } // allocate memory for rhog_magabs and rhog_magabs_save const int npw = this->rhopw->npw; @@ -167,7 +170,7 @@ void Charge_Mixing::mix_rho_recip(Charge* chr) // calculate rhog_magabs and rhog_magabs_save for (int ig = 0; ig < npw; ig++) { - rhog_magabs[ig] = chr->rhog[0][ig]; // rho + rhog_magabs[ig] = chr->rhog[0][ig]; // rho rhog_magabs_save[ig] = chr->rhog_save[0][ig]; // rho_save } // FT to get rhog_magabs and rhog_magabs_save @@ -204,10 +207,13 @@ void Charge_Mixing::mix_rho_recip(Charge* chr) for (int ig = 0; ig < npw; ig++) { chr->rhog[0][ig] = rhog_magabs[ig]; // rhog - double norm = std::sqrt(chr->rho[1][ig] * chr->rho[1][ig] + chr->rho[2][ig] * chr->rho[2][ig] + chr->rho[3][ig] * chr->rho[3][ig]); - if (std::abs(norm) < 1e-10) { continue; -} - double rescale_tmp = rho_magabs[npw + ig] / norm; + double norm = std::sqrt(chr->rho[1][ig] * chr->rho[1][ig] + chr->rho[2][ig] * chr->rho[2][ig] + + chr->rho[3][ig] * chr->rho[3][ig]); + if (std::abs(norm) < 1e-10) + { + continue; + } + double rescale_tmp = rho_magabs[npw + ig] / norm; chr->rho[1][ig] *= rescale_tmp; chr->rho[2][ig] *= rescale_tmp; chr->rho[3][ig] *= rescale_tmp; @@ -219,7 +225,7 @@ void Charge_Mixing::mix_rho_recip(Charge* chr) delete[] rho_magabs_save; } - if ( PARAM.globalv.double_grid) + if (PARAM.globalv.double_grid) { // plain mixing for high_frequencies const int ndimhf = (this->rhodpw->npw - this->rhopw->npw) * PARAM.inp.nspin; @@ -243,7 +249,8 @@ void Charge_Mixing::mix_rho_recip(Charge* chr) { // use rhodpw for double_grid // rhodpw is the same as rhopw for ! PARAM.globalv.double_grid - this->rhodpw->recip_to_real,double,base_device::DEVICE_CPU>(chr->rhog[is], chr->rho[is]); + this->rhodpw->recip_to_real, double, base_device::DEVICE_CPU>(chr->rhog[is], + chr->rho[is]); } } // For kinetic energy density @@ -261,7 +268,7 @@ void Charge_Mixing::mix_rho_recip(Charge* chr) std::complex*taugs_in = kin_g_save.data(), *taugs_out = kin_g.data(); // for high frequency part std::complex*taughf_in = nullptr, *taughf_out = nullptr; - if ( PARAM.globalv.double_grid) + if (PARAM.globalv.double_grid) { // divide into smooth part and high_frequency part divide_data(kin_g_save.data(), taugs_in, taughf_in); @@ -274,7 +281,7 @@ void Charge_Mixing::mix_rho_recip(Charge* chr) this->mixing->mix_data(this->tau_mdata, taugs_out); - if ( PARAM.globalv.double_grid) + if (PARAM.globalv.double_grid) { // simple mixing for high_frequencies const int ndimhf = (this->rhodpw->npw - this->rhopw->npw) * PARAM.inp.nspin; @@ -292,21 +299,20 @@ void Charge_Mixing::mix_rho_recip(Charge* chr) } } - return; } void Charge_Mixing::mix_rho_real(Charge* chr) { - double* rhor_in=nullptr; - double* rhor_out=nullptr; + double* rhor_in = nullptr; + double* rhor_out = nullptr; if (PARAM.inp.nspin == 1) { rhor_in = chr->rho_save[0]; rhor_out = chr->rho[0]; auto screen = std::bind(&Charge_Mixing::Kerker_screen_real, this, std::placeholders::_1); - this->mixing->push_data(this->rho_mdata, rhor_in, rhor_out, screen, true); + this->mixing->push_data(this->rho_mdata, rhor_in, rhor_out, screen, true); auto inner_product = std::bind(&Charge_Mixing::inner_product_real, this, std::placeholders::_1, std::placeholders::_2); this->mixing->cal_coef(this->rho_mdata, inner_product); @@ -315,8 +321,8 @@ void Charge_Mixing::mix_rho_real(Charge* chr) else if (PARAM.inp.nspin == 2) { // magnetic density - double *rho_mag = nullptr; - double *rho_mag_save = nullptr; + double* rho_mag = nullptr; + double* rho_mag_save = nullptr; const int nrxx = this->rhopw->nrxx; // allocate rho_mag[is*nnrx] and rho_mag_save[is*nnrx] rho_mag = new double[nrxx * PARAM.inp.nspin]; @@ -338,8 +344,7 @@ void Charge_Mixing::mix_rho_real(Charge* chr) rhor_in = rho_mag_save; rhor_out = rho_mag; auto screen = std::bind(&Charge_Mixing::Kerker_screen_real, this, std::placeholders::_1); - auto twobeta_mix - = [this, nrxx](double* out, const double* in, const double* sres) { + auto twobeta_mix = [this, nrxx](double* out, const double* in, const double* sres) { #ifdef _OPENMP #pragma omp parallel for schedule(static, 256) #endif @@ -365,12 +370,12 @@ void Charge_Mixing::mix_rho_real(Charge* chr) for (int is = 0; is < PARAM.inp.nspin; is++) { ModuleBase::GlobalFunc::ZEROS(chr->rho[is], nrxx); - //ModuleBase::GlobalFunc::ZEROS(rho_save[is], nrxx); + // ModuleBase::GlobalFunc::ZEROS(rho_save[is], nrxx); } for (int ir = 0; ir < nrxx; ir++) { - chr->rho[0][ir] = 0.5 * (rho_mag[ir] + rho_mag[ir+nrxx]); - chr->rho[1][ir] = 0.5 * (rho_mag[ir] - rho_mag[ir+nrxx]); + chr->rho[0][ir] = 0.5 * (rho_mag[ir] + rho_mag[ir + nrxx]); + chr->rho[1][ir] = 0.5 * (rho_mag[ir] - rho_mag[ir + nrxx]); } // delete delete[] rho_mag; @@ -383,8 +388,7 @@ void Charge_Mixing::mix_rho_real(Charge* chr) rhor_out = chr->rho[0]; const int nrxx = this->rhopw->nrxx; auto screen = std::bind(&Charge_Mixing::Kerker_screen_real, this, std::placeholders::_1); - auto twobeta_mix - = [this, nrxx](double* out, const double* in, const double* sres) { + auto twobeta_mix = [this, nrxx](double* out, const double* in, const double* sres) { #ifdef _OPENMP #pragma omp parallel for schedule(static, 256) #endif @@ -420,23 +424,21 @@ void Charge_Mixing::mix_rho_real(Charge* chr) // calculate rho_magabs and rho_magabs_save for (int ir = 0; ir < nrxx; ir++) { - rho_magabs[ir] = chr->rho[0][ir]; // rho + rho_magabs[ir] = chr->rho[0][ir]; // rho rho_magabs_save[ir] = chr->rho_save[0][ir]; // rho_save - // |m| for rho - rho_magabs[nrxx + ir] = std::sqrt(chr->rho[1][ir] * chr->rho[1][ir] - + chr->rho[2][ir] * chr->rho[2][ir] - + chr->rho[3][ir] * chr->rho[3][ir]); - // |m| for rho_save - rho_magabs_save[nrxx + ir] = std::sqrt(chr->rho_save[1][ir] * chr->rho_save[1][ir] - + chr->rho_save[2][ir] * chr->rho_save[2][ir] - + chr->rho_save[3][ir] * chr->rho_save[3][ir]); - } + // |m| for rho + rho_magabs[nrxx + ir] = std::sqrt(chr->rho[1][ir] * chr->rho[1][ir] + chr->rho[2][ir] * chr->rho[2][ir] + + chr->rho[3][ir] * chr->rho[3][ir]); + // |m| for rho_save + rho_magabs_save[nrxx + ir] + = std::sqrt(chr->rho_save[1][ir] * chr->rho_save[1][ir] + chr->rho_save[2][ir] * chr->rho_save[2][ir] + + chr->rho_save[3][ir] * chr->rho_save[3][ir]); + } rhor_in = rho_magabs_save; rhor_out = rho_magabs; auto screen = std::bind(&Charge_Mixing::Kerker_screen_real, this, std::placeholders::_1); - auto twobeta_mix - = [this, nrxx](double* out, const double* in, const double* sres) { + auto twobeta_mix = [this, nrxx](double* out, const double* in, const double* sres) { #ifdef _OPENMP #pragma omp parallel for schedule(static, 256) #endif @@ -463,15 +465,14 @@ void Charge_Mixing::mix_rho_real(Charge* chr) for (int ir = 0; ir < nrxx; ir++) { chr->rho[0][ir] = rho_magabs[ir]; // rho - double norm = std::sqrt(chr->rho[1][ir] * chr->rho[1][ir] - + chr->rho[2][ir] * chr->rho[2][ir] - + chr->rho[3][ir] * chr->rho[3][ir]); + double norm = std::sqrt(chr->rho[1][ir] * chr->rho[1][ir] + chr->rho[2][ir] * chr->rho[2][ir] + + chr->rho[3][ir] * chr->rho[3][ir]); - if (norm < 1e-10) - { - continue; - } - double rescale_tmp = rho_magabs[nrxx + ir] / norm; + if (norm < 1e-10) + { + continue; + } + double rescale_tmp = rho_magabs[nrxx + ir] / norm; chr->rho[1][ir] *= rescale_tmp; chr->rho[2][ir] *= rescale_tmp; chr->rho[3][ir] *= rescale_tmp; @@ -480,9 +481,9 @@ void Charge_Mixing::mix_rho_real(Charge* chr) delete[] rho_magabs; delete[] rho_magabs_save; } - - double *taur_out=nullptr; - double *taur_in=nullptr; + + double* taur_out = nullptr; + double* taur_in = nullptr; if ((XC_Functional::get_ked_flag()) && mixing_tau) { taur_in = chr->kin_r_save[0]; @@ -493,10 +494,8 @@ void Charge_Mixing::mix_rho_real(Charge* chr) this->mixing->mix_data(this->tau_mdata, taur_out); } - } - void Charge_Mixing::mix_rho(Charge* chr) { ModuleBase::TITLE("Charge_Mixing", "mix_rho"); @@ -513,7 +512,7 @@ void Charge_Mixing::mix_rho(Charge* chr) #ifdef _OPENMP #pragma omp parallel for schedule(static, 512) #endif - for(int ir = 0 ; ir < nrxx ; ++ir) + for (int ir = 0; ir < nrxx; ++ir) { rho123_is[ir] = chr->rho[is][ir]; } @@ -529,7 +528,7 @@ void Charge_Mixing::mix_rho(Charge* chr) #ifdef _OPENMP #pragma omp parallel for schedule(static, 512) #endif - for(int ir = 0 ; ir < nrxx ; ++ir) + for (int ir = 0; ir < nrxx; ++ir) { kin_r123_is[ir] = chr->kin_r[is][ir]; } @@ -556,7 +555,7 @@ void Charge_Mixing::mix_rho(Charge* chr) #ifdef _OPENMP #pragma omp parallel for schedule(static, 512) #endif - for(int ir = 0 ; ir < nrxx ; ++ir) + for (int ir = 0; ir < nrxx; ++ir) { chr->rho_save[is][ir] = rho123_is[ir]; } @@ -571,18 +570,18 @@ void Charge_Mixing::mix_rho(Charge* chr) #ifdef _OPENMP #pragma omp parallel for schedule(static, 512) #endif - for(int ir = 0 ; ir < nrxx ; ++ir) + for (int ir = 0; ir < nrxx; ++ir) { chr->kin_r_save[is][ir] = kin_r123_is[ir]; } } } - if (new_e_iteration) - { - new_e_iteration = false; - } + if (new_e_iteration) + { + new_e_iteration = false; + } - ModuleBase::timer::tick("Charge_Mixing", "mix_rho"); + ModuleBase::timer::tick("Charge_Mixing", "mix_rho"); return; } diff --git a/source/module_elecstate/module_charge/charge_mpi.cpp b/source/module_elecstate/module_charge/charge_mpi.cpp index c94a8f5133..2569252f03 100644 --- a/source/module_elecstate/module_charge/charge_mpi.cpp +++ b/source/module_elecstate/module_charge/charge_mpi.cpp @@ -1,10 +1,10 @@ #include "charge.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" #include "module_hamilt_general/module_xc/xc_functional.h" #include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" #ifdef __MPI void Charge::init_chgmpi() { @@ -109,7 +109,7 @@ void Charge::reduce_diff_pools(double* array_rho) const delete[] array_tot; delete[] array_tmp; } - if(PARAM.globalv.all_ks_run && PARAM.inp.bndpar > 1) + if (PARAM.globalv.all_ks_run && PARAM.inp.bndpar > 1) { MPI_Allreduce(MPI_IN_PLACE, array_rho, this->nrxx, MPI_DOUBLE, MPI_SUM, BP_WORLD); } @@ -119,9 +119,10 @@ void Charge::reduce_diff_pools(double* array_rho) const void Charge::rho_mpi() { ModuleBase::TITLE("Charge", "rho_mpi"); - if (GlobalV::KPAR * PARAM.inp.bndpar <= 1) { + if (GlobalV::KPAR * PARAM.inp.bndpar <= 1) + { return; -} + } ModuleBase::timer::tick("Charge", "rho_mpi"); for (int is = 0; is < PARAM.inp.nspin; ++is) diff --git a/source/module_elecstate/module_charge/symmetry_rhog.cpp b/source/module_elecstate/module_charge/symmetry_rhog.cpp index 0ed87bd572..327254ce7e 100644 --- a/source/module_elecstate/module_charge/symmetry_rhog.cpp +++ b/source/module_elecstate/module_charge/symmetry_rhog.cpp @@ -1,237 +1,273 @@ -#include "symmetry_rho.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/parallel_global.h" #include "module_hamilt_general/module_xc/xc_functional.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/parallel_global.h" +#include "symmetry_rho.h" - -void Symmetry_rho::psymmg(std::complex* rhog_part, const ModulePW::PW_Basis *rho_basis, ModuleSymmetry::Symmetry &symm) const -{ - //(1) get fftixy2is and do Allreduce - int * fftixy2is = new int [rho_basis->fftnxy]; - rho_basis->getfftixy2is(fftixy2is); //current proc +void Symmetry_rho::psymmg(std::complex* rhog_part, + const ModulePW::PW_Basis* rho_basis, + ModuleSymmetry::Symmetry& symm) const +{ + //(1) get fftixy2is and do Allreduce + int* fftixy2is = new int[rho_basis->fftnxy]; + rho_basis->getfftixy2is(fftixy2is); // current proc #ifdef __MPI - MPI_Allreduce(MPI_IN_PLACE, fftixy2is, rho_basis->fftnxy, MPI_INT, MPI_SUM, POOL_WORLD); - if(rho_basis->poolnproc>1) - for (int i=0;ifftnxy;++i) - fftixy2is[i]+=rho_basis->poolnproc-1; - - // (2) reduce all rho from the first pool. - std::complex* rhogtot; - int* ig2isztot; - if(GlobalV::RANK_IN_POOL == 0) - { - rhogtot = new std::complex[rho_basis->npwtot]; - ModuleBase::GlobalFunc::ZEROS(rhogtot, rho_basis->npwtot); - ig2isztot = new int[rho_basis->npwtot]; - ModuleBase::GlobalFunc::ZEROS(rhogtot, rho_basis->npwtot); - } - // find max_npw - int max_npw=0; - for (int proc = 0; proc < rho_basis->poolnproc; ++proc) - { - if(rho_basis->npw_per[proc] > max_npw) - { - max_npw=rho_basis->npw_per[proc]; - } - } - this->reduce_to_fullrhog(rho_basis, rhogtot, rhog_part, ig2isztot, rho_basis->ig2isz, max_npw); - - // (3) get ixy2ipw and do rhog_symmetry on proc 0 of each pool - if(GlobalV::RANK_IN_POOL==0) - { + MPI_Allreduce(MPI_IN_PLACE, fftixy2is, rho_basis->fftnxy, MPI_INT, MPI_SUM, POOL_WORLD); + if (rho_basis->poolnproc > 1) + for (int i = 0; i < rho_basis->fftnxy; ++i) + fftixy2is[i] += rho_basis->poolnproc - 1; + + // (2) reduce all rho from the first pool. + std::complex* rhogtot; + int* ig2isztot; + if (GlobalV::RANK_IN_POOL == 0) + { + rhogtot = new std::complex[rho_basis->npwtot]; + ModuleBase::GlobalFunc::ZEROS(rhogtot, rho_basis->npwtot); + ig2isztot = new int[rho_basis->npwtot]; + ModuleBase::GlobalFunc::ZEROS(rhogtot, rho_basis->npwtot); + } + // find max_npw + int max_npw = 0; + for (int proc = 0; proc < rho_basis->poolnproc; ++proc) + { + if (rho_basis->npw_per[proc] > max_npw) + { + max_npw = rho_basis->npw_per[proc]; + } + } + this->reduce_to_fullrhog(rho_basis, rhogtot, rhog_part, ig2isztot, rho_basis->ig2isz, max_npw); + + // (3) get ixy2ipw and do rhog_symmetry on proc 0 of each pool + if (GlobalV::RANK_IN_POOL == 0) + { #endif - //init ixyz2ipw - int* ixyz2ipw = new int[rho_basis->fftnxyz]; - for(int i=0;ifftnxyz;++i) ixyz2ipw[i]=-1; + // init ixyz2ipw + int* ixyz2ipw = new int[rho_basis->fftnxyz]; + for (int i = 0; i < rho_basis->fftnxyz; ++i) + ixyz2ipw[i] = -1; #ifdef __MPI - this->get_ixyz2ipw(rho_basis, ig2isztot, fftixy2is, ixyz2ipw); - symm.rhog_symmetry(rhogtot, ixyz2ipw, rho_basis->nx, rho_basis->ny, rho_basis->nz, - rho_basis->fftnx, rho_basis->fftny, rho_basis->fftnz); + this->get_ixyz2ipw(rho_basis, ig2isztot, fftixy2is, ixyz2ipw); + symm.rhog_symmetry(rhogtot, + ixyz2ipw, + rho_basis->nx, + rho_basis->ny, + rho_basis->nz, + rho_basis->fftnx, + rho_basis->fftny, + rho_basis->fftnz); #else - this->get_ixyz2ipw(rho_basis, rho_basis->ig2isz, fftixy2is, ixyz2ipw); - symm.rhog_symmetry(rhog_part, ixyz2ipw, rho_basis->nx, rho_basis->ny, rho_basis->nz, - rho_basis->fftnx, rho_basis->fftny, rho_basis->fftnz); + this->get_ixyz2ipw(rho_basis, rho_basis->ig2isz, fftixy2is, ixyz2ipw); + symm.rhog_symmetry(rhog_part, + ixyz2ipw, + rho_basis->nx, + rho_basis->ny, + rho_basis->nz, + rho_basis->fftnx, + rho_basis->fftny, + rho_basis->fftnz); #endif - delete[] ixyz2ipw; + delete[] ixyz2ipw; #ifdef __MPI - } + } - // (4) send the result to other procs in the same pool - this->rhog_piece_to_all(rho_basis, rhogtot, rhog_part); + // (4) send the result to other procs in the same pool + this->rhog_piece_to_all(rho_basis, rhogtot, rhog_part); - if(GlobalV::RANK_IN_POOL==0) - { - delete[] rhogtot; - delete[] ig2isztot; - } + if (GlobalV::RANK_IN_POOL == 0) + { + delete[] rhogtot; + delete[] ig2isztot; + } #endif - delete[] fftixy2is; - return; + delete[] fftixy2is; + return; } #ifdef __MPI -void Symmetry_rho::reduce_to_fullrhog(const ModulePW::PW_Basis *rho_basis, - std::complex* rhogtot, std::complex* rhogin, - int* ig2isztot, const int* ig2iszin, int max_npw) const +void Symmetry_rho::reduce_to_fullrhog(const ModulePW::PW_Basis* rho_basis, + std::complex* rhogtot, + std::complex* rhogin, + int* ig2isztot, + const int* ig2iszin, + int max_npw) const { - ModuleBase::TITLE("Symmetry_rho","reduce_to_fullrhog"); - - std::complex* rhog_piece = new std::complex[max_npw]; - int* ig2isz_piece = new int[max_npw]; - - int npw_start=0; - for(int proc=0; procpoolnproc; ++proc) - { - ModuleBase::GlobalFunc::ZEROS(rhog_piece, max_npw); - ModuleBase::GlobalFunc::ZEROS(ig2isz_piece, max_npw); - - MPI_Status ierror; - - // case 1: the first part of rho in processor 0 in each pool. - if(proc == 0 && GlobalV::RANK_IN_POOL ==0) - { - for(int ig=0; ignpw; ++ig) - { - rhog_piece[ig] = rhogin[ig]; - ig2isz_piece[ig]=ig2iszin[ig]; - } - } - - // case 2: > first part rho: send the rho to - // processor 0 in each pool - else if(proc == GlobalV::RANK_IN_POOL ) - { - for(int ig=0; ignpw; ++ig) - { - rhog_piece[ig] = rhogin[ig]; - ig2isz_piece[ig]=ig2iszin[ig]; - } - MPI_Send(rhog_piece,rho_basis->npw, MPI_DOUBLE_COMPLEX, 0, proc, POOL_WORLD); - MPI_Send(ig2isz_piece, rho_basis->npw, MPI_INT, 0, proc+rho_basis->poolnproc, POOL_WORLD); - } - - // case 2: > first part rho: processor 0 receive the rho - // from other processors - else if(GlobalV::RANK_IN_POOL==0) - { - MPI_Recv(rhog_piece, rho_basis->npw_per[proc], MPI_DOUBLE_COMPLEX, proc, proc, POOL_WORLD, &ierror); - MPI_Recv(ig2isz_piece, rho_basis->npw_per[proc], MPI_INT, proc, proc+rho_basis->poolnproc, POOL_WORLD, &ierror); - } - - if(GlobalV::RANK_IN_POOL==0) - { - for(int ig=0; ignpw_per[proc]; ++ig) - { - rhogtot[npw_start+ig] = rhog_piece[ig]; - ig2isztot[npw_start+ig] = ig2isz_piece[ig]; - } - npw_start+=rho_basis->npw_per[proc]; - } - } - if(GlobalV::RANK_IN_POOL==0) assert(npw_start==rho_basis->npwtot); - delete[] rhog_piece; - delete[] ig2isz_piece; - - MPI_Barrier(MPI_COMM_WORLD); - - return; + ModuleBase::TITLE("Symmetry_rho", "reduce_to_fullrhog"); + + std::complex* rhog_piece = new std::complex[max_npw]; + int* ig2isz_piece = new int[max_npw]; + + int npw_start = 0; + for (int proc = 0; proc < rho_basis->poolnproc; ++proc) + { + ModuleBase::GlobalFunc::ZEROS(rhog_piece, max_npw); + ModuleBase::GlobalFunc::ZEROS(ig2isz_piece, max_npw); + + MPI_Status ierror; + + // case 1: the first part of rho in processor 0 in each pool. + if (proc == 0 && GlobalV::RANK_IN_POOL == 0) + { + for (int ig = 0; ig < rho_basis->npw; ++ig) + { + rhog_piece[ig] = rhogin[ig]; + ig2isz_piece[ig] = ig2iszin[ig]; + } + } + + // case 2: > first part rho: send the rho to + // processor 0 in each pool + else if (proc == GlobalV::RANK_IN_POOL) + { + for (int ig = 0; ig < rho_basis->npw; ++ig) + { + rhog_piece[ig] = rhogin[ig]; + ig2isz_piece[ig] = ig2iszin[ig]; + } + MPI_Send(rhog_piece, rho_basis->npw, MPI_DOUBLE_COMPLEX, 0, proc, POOL_WORLD); + MPI_Send(ig2isz_piece, rho_basis->npw, MPI_INT, 0, proc + rho_basis->poolnproc, POOL_WORLD); + } + + // case 2: > first part rho: processor 0 receive the rho + // from other processors + else if (GlobalV::RANK_IN_POOL == 0) + { + MPI_Recv(rhog_piece, rho_basis->npw_per[proc], MPI_DOUBLE_COMPLEX, proc, proc, POOL_WORLD, &ierror); + MPI_Recv(ig2isz_piece, + rho_basis->npw_per[proc], + MPI_INT, + proc, + proc + rho_basis->poolnproc, + POOL_WORLD, + &ierror); + } + + if (GlobalV::RANK_IN_POOL == 0) + { + for (int ig = 0; ig < rho_basis->npw_per[proc]; ++ig) + { + rhogtot[npw_start + ig] = rhog_piece[ig]; + ig2isztot[npw_start + ig] = ig2isz_piece[ig]; + } + npw_start += rho_basis->npw_per[proc]; + } + } + if (GlobalV::RANK_IN_POOL == 0) + assert(npw_start == rho_basis->npwtot); + delete[] rhog_piece; + delete[] ig2isz_piece; + + MPI_Barrier(MPI_COMM_WORLD); + + return; } -void Symmetry_rho::rhog_piece_to_all(const ModulePW::PW_Basis *rho_basis, - std::complex* rhogtot, std::complex* rhog_part) const -{ - ModuleBase::TITLE(" Symmetry_rho","rhog_piece_to_all"); - - MPI_Status ierror; - - if(GlobalV::RANK_IN_POOL==0) - { - // proc 0: send to other proc in pool - // itself: directly copy - for(int ig=0;ignpw;++ig) - { - rhog_part[ig]=rhogtot[ig]; - } - int npw_start=rho_basis->npw; - for(int proc=1;procpoolnproc;++proc) - { - MPI_Send(&rhogtot[npw_start], rho_basis->npw_per[proc], MPI_DOUBLE_COMPLEX, proc, proc, POOL_WORLD); - npw_start+=rho_basis->npw_per[proc]; - } - assert(npw_start==rho_basis->npwtot); - }// GlobalV::RANK_IN_POOL == 0 - else - { - MPI_Recv(rhog_part, rho_basis->npw_per[GlobalV::RANK_IN_POOL], MPI_DOUBLE_COMPLEX, 0, GlobalV::RANK_IN_POOL, POOL_WORLD, &ierror); - } - return; +void Symmetry_rho::rhog_piece_to_all(const ModulePW::PW_Basis* rho_basis, + std::complex* rhogtot, + std::complex* rhog_part) const +{ + ModuleBase::TITLE(" Symmetry_rho", "rhog_piece_to_all"); + + MPI_Status ierror; + + if (GlobalV::RANK_IN_POOL == 0) + { + // proc 0: send to other proc in pool + // itself: directly copy + for (int ig = 0; ig < rho_basis->npw; ++ig) + { + rhog_part[ig] = rhogtot[ig]; + } + int npw_start = rho_basis->npw; + for (int proc = 1; proc < rho_basis->poolnproc; ++proc) + { + MPI_Send(&rhogtot[npw_start], rho_basis->npw_per[proc], MPI_DOUBLE_COMPLEX, proc, proc, POOL_WORLD); + npw_start += rho_basis->npw_per[proc]; + } + assert(npw_start == rho_basis->npwtot); + } // GlobalV::RANK_IN_POOL == 0 + else + { + MPI_Recv(rhog_part, + rho_basis->npw_per[GlobalV::RANK_IN_POOL], + MPI_DOUBLE_COMPLEX, + 0, + GlobalV::RANK_IN_POOL, + POOL_WORLD, + &ierror); + } + return; } #endif // only for MYRANK==0 -void Symmetry_rho::get_ixyz2ipw(const ModulePW::PW_Basis *rho_basis, - const int* ig2isztot, const int* fftixy2is, int* ixyz2ipw) const +void Symmetry_rho::get_ixyz2ipw(const ModulePW::PW_Basis* rho_basis, + const int* ig2isztot, + const int* fftixy2is, + int* ixyz2ipw) const { - //step 1: get ipsz2ipw - - //get ipsz2ipw from ig2isztot - int* ipsz2ipw = new int [rho_basis->nstot*rho_basis->nz]; - for(int i=0;instot*rho_basis->nz;++i) ipsz2ipw[i]=-1; - - int npw_count=0; - int nstnz_count=0; - int ipsz=0; //global index of a z-grid on stick - int isz=0; //local index of a z-grid stick on ip core - int ipw=0; // global index of pw (in npwtot) - for (int ip=0;ippoolnproc;++ip) - { - for (int ig=0;ignpw_per[ip];++ig) - { - ipw=npw_count+ig; - isz=ig2isztot[ipw]; - ipsz=nstnz_count+isz; - ipsz2ipw[ipsz]=ipw; - } - npw_count+=rho_basis->npw_per[ip]; - nstnz_count+=rho_basis->nst_per[ip]*rho_basis->nz; - } - assert(npw_count==rho_basis->npwtot); - assert(nstnz_count==rho_basis->nstot*rho_basis->nz); - - //step2: ixyz to ipsz - - //save the start-index of (nst*nz) till each core + // step 1: get ipsz2ipw + + // get ipsz2ipw from ig2isztot + int* ipsz2ipw = new int[rho_basis->nstot * rho_basis->nz]; + for (int i = 0; i < rho_basis->nstot * rho_basis->nz; ++i) + ipsz2ipw[i] = -1; + + int npw_count = 0; + int nstnz_count = 0; + int ipsz = 0; // global index of a z-grid on stick + int isz = 0; // local index of a z-grid stick on ip core + int ipw = 0; // global index of pw (in npwtot) + for (int ip = 0; ip < rho_basis->poolnproc; ++ip) + { + for (int ig = 0; ig < rho_basis->npw_per[ip]; ++ig) + { + ipw = npw_count + ig; + isz = ig2isztot[ipw]; + ipsz = nstnz_count + isz; + ipsz2ipw[ipsz] = ipw; + } + npw_count += rho_basis->npw_per[ip]; + nstnz_count += rho_basis->nst_per[ip] * rho_basis->nz; + } + assert(npw_count == rho_basis->npwtot); + assert(nstnz_count == rho_basis->nstot * rho_basis->nz); + + // step2: ixyz to ipsz + + // save the start-index of (nst*nz) till each core int* nstnz_start = new int[rho_basis->poolnproc]; - nstnz_start[0]=0; - for (int ip=1; ippoolnproc; ++ip) - nstnz_start[ip]=nstnz_start[ip-1]+rho_basis->nst_per[ip-1]*rho_basis->nz; - - //tmp variables - int ixy, ixyz, ip, is, ig=0; - - for (int ix=0;ixfftnx;++ix) - { - for (int iy=0;iyfftny;++iy) - { - for(int iz=0;izfftnz;++iz) - { - ixy = ix*rho_basis->fftny + iy; - ixyz = ixy*rho_basis->fftnz+iz; - ip = rho_basis->fftixy2ip[ixy]; - if (ip==-1) continue; //not in any core - is = fftixy2is[ixy]; //stick-index on ip=proc core - if (is==-1) continue; //not on any stick - ipsz = nstnz_start[ip]+is*rho_basis->nz+iz; - ipw = ipsz2ipw[ipsz]; - ixyz2ipw[ixyz] = ipw; - } - } - } - assert (ixyz==rho_basis->fftnxyz-1); - - delete[] nstnz_start; - delete[] ipsz2ipw; - return; + nstnz_start[0] = 0; + for (int ip = 1; ip < rho_basis->poolnproc; ++ip) + nstnz_start[ip] = nstnz_start[ip - 1] + rho_basis->nst_per[ip - 1] * rho_basis->nz; + + // tmp variables + int ixy, ixyz, ip, is, ig = 0; + + for (int ix = 0; ix < rho_basis->fftnx; ++ix) + { + for (int iy = 0; iy < rho_basis->fftny; ++iy) + { + for (int iz = 0; iz < rho_basis->fftnz; ++iz) + { + ixy = ix * rho_basis->fftny + iy; + ixyz = ixy * rho_basis->fftnz + iz; + ip = rho_basis->fftixy2ip[ixy]; + if (ip == -1) + continue; // not in any core + is = fftixy2is[ixy]; // stick-index on ip=proc core + if (is == -1) + continue; // not on any stick + ipsz = nstnz_start[ip] + is * rho_basis->nz + iz; + ipw = ipsz2ipw[ipsz]; + ixyz2ipw[ixyz] = ipw; + } + } + } + assert(ixyz == rho_basis->fftnxyz - 1); + + delete[] nstnz_start; + delete[] ipsz2ipw; + return; } \ No newline at end of file diff --git a/source/module_elecstate/module_dm/cal_dm_psi.cpp b/source/module_elecstate/module_dm/cal_dm_psi.cpp index 21d91e5225..e90e838863 100644 --- a/source/module_elecstate/module_dm/cal_dm_psi.cpp +++ b/source/module_elecstate/module_dm/cal_dm_psi.cpp @@ -1,19 +1,19 @@ #include "cal_dm_psi.h" #include "module_parameter/parameter.h" -#include "module_base/blas_connector.h" -#include "module_base/scalapack_connector.h" -#include "module_base/timer.h" #include "module_psi/psi.h" +#include "source_base/blas_connector.h" +#include "source_base/scalapack_connector.h" +#include "source_base/timer.h" namespace elecstate { // for Gamma-Only case where DMK is double void cal_dm_psi(const Parallel_Orbitals* ParaV, - const ModuleBase::matrix& wg, - const psi::Psi& wfc, - elecstate::DensityMatrix& DM) + const ModuleBase::matrix& wg, + const psi::Psi& wfc, + elecstate::DensityMatrix& DM) { ModuleBase::TITLE("elecstate", "cal_dm"); ModuleBase::timer::tick("elecstate", "cal_dm"); @@ -33,14 +33,9 @@ void cal_dm_psi(const Parallel_Orbitals* ParaV, // dm[ik].create(ParaV->ncol, ParaV->nrow); // wg_wfc(ib,iw) = wg[ib] * wfc(ib,iw); - psi::Psi wg_wfc(1, - wfc.get_nbands(), - wfc.get_nbasis(), - wfc.get_nbasis(), - true); + psi::Psi wg_wfc(1, wfc.get_nbands(), wfc.get_nbasis(), wfc.get_nbasis(), true); wg_wfc.set_all_psi(wfc.get_pointer(), wg_wfc.size()); - int ib_global = 0; for (int ib_local = 0; ib_local < nbands_local; ++ib_local) { @@ -53,10 +48,10 @@ void cal_dm_psi(const Parallel_Orbitals* ParaV, ModuleBase::WARNING_QUIT("ElecStateLCAO::cal_dm", "please check global2local_col!"); } } - if (ib_global >= wg.nc) - { - continue; - } + if (ib_global >= wg.nc) + { + continue; + } const double wg_local = wg(ik, ib_global); double* wg_wfc_pointer = &(wg_wfc(0, ib_local, 0)); @@ -76,9 +71,9 @@ void cal_dm_psi(const Parallel_Orbitals* ParaV, } void cal_dm_psi(const Parallel_Orbitals* ParaV, - const ModuleBase::matrix& wg, - const psi::Psi>& wfc, - elecstate::DensityMatrix, double>& DM) + const ModuleBase::matrix& wg, + const psi::Psi>& wfc, + elecstate::DensityMatrix, double>& DM) { ModuleBase::TITLE("elecstate", "cal_dm"); ModuleBase::timer::tick("elecstate", "cal_dm"); @@ -94,14 +89,10 @@ void cal_dm_psi(const Parallel_Orbitals* ParaV, wfc.fix_k(ik); std::complex* dmk_pointer = DM.get_DMK_pointer(ik); // dm.fix_k(ik); - //dm[ik].create(ParaV->ncol, ParaV->nrow); + // dm[ik].create(ParaV->ncol, ParaV->nrow); // wg_wfc(ib,iw) = wg[ib] * wfc(ib,iw); - psi::Psi> wg_wfc(1, - wfc.get_nbands(), - wfc.get_nbasis(), - wfc.get_nbasis(), - true); - + psi::Psi> wg_wfc(1, wfc.get_nbands(), wfc.get_nbasis(), wfc.get_nbasis(), true); + const std::complex* pwfc = wfc.get_pointer(); std::complex* pwg_wfc = wg_wfc.get_pointer(); #ifdef _OPENMP @@ -124,11 +115,11 @@ void cal_dm_psi(const Parallel_Orbitals* ParaV, ModuleBase::WARNING_QUIT("ElecStateLCAO::cal_dm", "please check global2local_col!"); } } - if (ib_global >= wg.nc) - { - continue; - } - const double wg_local = wg(ik, ib_global); + if (ib_global >= wg.nc) + { + continue; + } + const double wg_local = wg(ik, ib_global); std::complex* wg_wfc_pointer = &(wg_wfc(0, ib_local, 0)); BlasConnector::scal(nbasis_local, wg_local, wg_wfc_pointer, 1); } @@ -139,7 +130,8 @@ void cal_dm_psi(const Parallel_Orbitals* ParaV, if (PARAM.inp.ks_solver == "cg_in_lcao") { psiMulPsi(wg_wfc, wfc, dmk_pointer); - } else + } + else { psiMulPsiMpi(wg_wfc, wfc, dmk_pointer, ParaV->desc_wfc, ParaV->desc); } @@ -154,10 +146,10 @@ void cal_dm_psi(const Parallel_Orbitals* ParaV, #ifdef __MPI void psiMulPsiMpi(const psi::Psi& psi1, - const psi::Psi& psi2, - double* dm_out, - const int* desc_psi, - const int* desc_dm) + const psi::Psi& psi2, + double* dm_out, + const int* desc_psi, + const int* desc_dm) { ModuleBase::timer::tick("psiMulPsiMpi", "pdgemm"); const double one_float = 1.0, zero_float = 0.0; @@ -189,10 +181,10 @@ void psiMulPsiMpi(const psi::Psi& psi1, } void psiMulPsiMpi(const psi::Psi>& psi1, - const psi::Psi>& psi2, - std::complex* dm_out, - const int* desc_psi, - const int* desc_dm) + const psi::Psi>& psi2, + std::complex* dm_out, + const int* desc_psi, + const int* desc_dm) { ModuleBase::timer::tick("psiMulPsiMpi", "pdgemm"); const std::complex one_complex = {1.0, 0.0}, zero_complex = {0.0, 0.0}; @@ -247,8 +239,8 @@ void psiMulPsi(const psi::Psi& psi1, const psi::Psi& psi2, doubl } void psiMulPsi(const psi::Psi>& psi1, - const psi::Psi>& psi2, - std::complex* dm_out) + const psi::Psi>& psi2, + std::complex* dm_out) { const int one_int = 1; const char N_char = 'N', T_char = 'T'; diff --git a/source/module_elecstate/module_dm/cal_dm_psi.h b/source/module_elecstate/module_dm/cal_dm_psi.h index cdd25eb7da..9c5a9639bc 100644 --- a/source/module_elecstate/module_dm/cal_dm_psi.h +++ b/source/module_elecstate/module_dm/cal_dm_psi.h @@ -1,37 +1,43 @@ #ifndef CAL_DM_PSI_H #define CAL_DM_PSI_H -#include "module_base/matrix.h" #include "density_matrix.h" +#include "source_base/matrix.h" namespace elecstate { - // for Gamma-Only case where DMK is double - void cal_dm_psi(const Parallel_Orbitals* ParaV, const ModuleBase::matrix& wg, const psi::Psi& wfc, elecstate::DensityMatrix& DM); +// for Gamma-Only case where DMK is double +void cal_dm_psi(const Parallel_Orbitals* ParaV, + const ModuleBase::matrix& wg, + const psi::Psi& wfc, + elecstate::DensityMatrix& DM); - // for Multi-k case where DMK is complex - void cal_dm_psi(const Parallel_Orbitals* ParaV, const ModuleBase::matrix& wg, const psi::Psi>& wfc, elecstate::DensityMatrix, double>& DM); +// for Multi-k case where DMK is complex +void cal_dm_psi(const Parallel_Orbitals* ParaV, + const ModuleBase::matrix& wg, + const psi::Psi>& wfc, + elecstate::DensityMatrix, double>& DM); - // for Gamma-Only case with MPI - void psiMulPsiMpi(const psi::Psi& psi1, - const psi::Psi& psi2, - double* dm_out, - const int* desc_psi, - const int* desc_dm); - - // for multi-k case with MPI - void psiMulPsiMpi(const psi::Psi>& psi1, - const psi::Psi>& psi2, - std::complex* dm_out, - const int* desc_psi, - const int* desc_dm); +// for Gamma-Only case with MPI +void psiMulPsiMpi(const psi::Psi& psi1, + const psi::Psi& psi2, + double* dm_out, + const int* desc_psi, + const int* desc_dm); - // for Gamma-Only case without MPI - void psiMulPsi(const psi::Psi& psi1, const psi::Psi& psi2, double* dm_out); +// for multi-k case with MPI +void psiMulPsiMpi(const psi::Psi>& psi1, + const psi::Psi>& psi2, + std::complex* dm_out, + const int* desc_psi, + const int* desc_dm); - // for multi-k case without MPI - void psiMulPsi(const psi::Psi>& psi1, - const psi::Psi>& psi2, - std::complex* dm_out); -}; +// for Gamma-Only case without MPI +void psiMulPsi(const psi::Psi& psi1, const psi::Psi& psi2, double* dm_out); + +// for multi-k case without MPI +void psiMulPsi(const psi::Psi>& psi1, + const psi::Psi>& psi2, + std::complex* dm_out); +}; // namespace elecstate #endif diff --git a/source/module_elecstate/module_dm/cal_edm_tddft.cpp b/source/module_elecstate/module_dm/cal_edm_tddft.cpp index f3dd47ffe5..90249c7fa4 100644 --- a/source/module_elecstate/module_dm/cal_edm_tddft.cpp +++ b/source/module_elecstate/module_dm/cal_edm_tddft.cpp @@ -1,7 +1,7 @@ #include "cal_edm_tddft.h" -#include "module_base/lapack_connector.h" -#include "module_base/scalapack_connector.h" +#include "source_base/lapack_connector.h" +#include "source_base/scalapack_connector.h" namespace elecstate { @@ -255,4 +255,4 @@ void cal_edm_tddft(Parallel_Orbitals& pv, } return; } -} // namespace ModuleESolver +} // namespace elecstate diff --git a/source/module_elecstate/module_dm/density_matrix.cpp b/source/module_elecstate/module_dm/density_matrix.cpp index 4521071d65..501a6d1320 100644 --- a/source/module_elecstate/module_dm/density_matrix.cpp +++ b/source/module_elecstate/module_dm/density_matrix.cpp @@ -1,11 +1,11 @@ #include "density_matrix.h" -#include "module_parameter/parameter.h" -#include "module_base/libm/libm.h" -#include "module_base/memory.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_cell/klist.h" +#include "module_parameter/parameter.h" +#include "source_base/libm/libm.h" +#include "source_base/memory.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" namespace elecstate { @@ -26,7 +26,10 @@ DensityMatrix::~DensityMatrix() } template -DensityMatrix::DensityMatrix(const Parallel_Orbitals* paraV_in, const int nspin, const std::vector>& kvec_d, const int nk) +DensityMatrix::DensityMatrix(const Parallel_Orbitals* paraV_in, + const int nspin, + const std::vector>& kvec_d, + const int nk) : _paraV(paraV_in), _nspin(nspin), _kvec_d(kvec_d), _nk((nk > 0 && nk <= _kvec_d.size()) ? nk : _kvec_d.size()) { ModuleBase::TITLE("DensityMatrix", "DensityMatrix-MK"); @@ -40,7 +43,8 @@ DensityMatrix::DensityMatrix(const Parallel_Orbitals* paraV_in, const in } template -DensityMatrix::DensityMatrix(const Parallel_Orbitals* paraV_in, const int nspin) :_paraV(paraV_in), _nspin(nspin), _kvec_d({ ModuleBase::Vector3(0,0,0) }), _nk(1) +DensityMatrix::DensityMatrix(const Parallel_Orbitals* paraV_in, const int nspin) + : _paraV(paraV_in), _nspin(nspin), _kvec_d({ModuleBase::Vector3(0, 0, 0)}), _nk(1) { ModuleBase::TITLE("DensityMatrix", "DensityMatrix-GO"); this->_DMK.resize(_nspin); @@ -98,7 +102,7 @@ void DensityMatrix, double>::cal_DMR(const int ik_in) // calculate kphase and target_mat_ptr std::vector> kphase_vec(r_size * this->_nk); std::vector target_DMR_mat_vec(r_size); - for(int ir = 0; ir < r_size; ++ir) + for (int ir = 0; ir < r_size; ++ir) { const ModuleBase::Vector3 r_index = target_ap.get_R_index(ir); hamilt::BaseMatrix* target_mat = target_ap.find_matrix(r_index); @@ -110,10 +114,10 @@ void DensityMatrix, double>::cal_DMR(const int ik_in) } #endif target_DMR_mat_vec[ir] = target_mat->get_pointer(); - for(int ik = 0; ik < this->_nk; ++ik) + for (int ik = 0; ik < this->_nk; ++ik) { - if(ik_in >= 0 && ik_in != ik) - { + if (ik_in >= 0 && ik_in != ik) + { continue; } // cal k_phase @@ -130,7 +134,7 @@ void DensityMatrix, double>::cal_DMR(const int ik_in) // step_trace = 0 for NSPIN=1,2; ={0, 1, local_col, local_col+1} for NSPIN=4 // step_trace is used when nspin = 4; int step_trace[4]{}; - if(PARAM.inp.nspin == 4) + if (PARAM.inp.nspin == 4) { const int npol = 2; for (int is = 0; is < npol; is++) @@ -141,18 +145,19 @@ void DensityMatrix, double>::cal_DMR(const int ik_in) } } } - for(int ik = 0; ik < this->_nk; ++ik) + for (int ik = 0; ik < this->_nk; ++ik) { - if(ik_in >= 0 && ik_in != ik) - { + if (ik_in >= 0 && ik_in != ik) + { continue; } // copy column-major DMK to row-major tmp_DMK_mat (for the purpose of computational efficiency) - const std::complex* DMK_mat_ptr = this->_DMK[ik + ik_begin].data() + col_ap * this->_paraV->nrow + row_ap; - for(int icol = 0; icol < col_size; ++icol) + const std::complex* DMK_mat_ptr + = this->_DMK[ik + ik_begin].data() + col_ap * this->_paraV->nrow + row_ap; + for (int icol = 0; icol < col_size; ++icol) { - for(int irow = 0; irow < row_size; ++irow) + for (int irow = 0; irow < row_size; ++irow) { tmp_DMK_mat[irow * col_size + icol] = DMK_mat_ptr[icol * ld_hk + irow]; } @@ -160,36 +165,32 @@ void DensityMatrix, double>::cal_DMR(const int ik_in) // if nspin != 4, fill DMR // if nspin == 4, fill tmp_DMR - for(int ir = 0; ir < r_size; ++ir) + for (int ir = 0; ir < r_size; ++ir) { std::complex kphase = kphase_vec[ik * r_size + ir]; - if(PARAM.inp.nspin != 4) + if (PARAM.inp.nspin != 4) { double* target_DMR_mat = target_DMR_mat_vec[ir]; - for(int i = 0; i < mat_size; i++) + for (int i = 0; i < mat_size; i++) { - target_DMR_mat[i] += kphase.real() * tmp_DMK_mat[i].real() - - kphase.imag() * tmp_DMK_mat[i].imag(); + target_DMR_mat[i] + += kphase.real() * tmp_DMK_mat[i].real() - kphase.imag() * tmp_DMK_mat[i].imag(); } - } else if(PARAM.inp.nspin == 4) + } + else if (PARAM.inp.nspin == 4) { std::complex* tmp_DMR_mat = &tmp_DMR[ir * mat_size]; - BlasConnector::axpy(mat_size, - kphase, - tmp_DMK_mat.data(), - 1, - tmp_DMR_mat, - 1); + BlasConnector::axpy(mat_size, kphase, tmp_DMK_mat.data(), 1, tmp_DMR_mat, 1); } } } // if nspin == 4 // copy tmp_DMR to fill target_DMR - if(PARAM.inp.nspin == 4) + if (PARAM.inp.nspin == 4) { std::complex tmp[4]{}; - for(int ir = 0; ir < r_size; ++ir) + for (int ir = 0; ir < r_size; ++ir) { std::complex* tmp_DMR_mat = &tmp_DMR[ir * mat_size]; double* target_DMR_mat = target_DMR_mat_vec[ir]; @@ -222,9 +223,11 @@ void DensityMatrix, double>::cal_DMR(const int ik_in) // calculate DMR from DMK using blas for multi-k calculation template <> -void DensityMatrix::cal_DMR_full(hamilt::HContainer>* dmR_out)const{} +void DensityMatrix::cal_DMR_full(hamilt::HContainer>* dmR_out) const +{ +} template <> -void DensityMatrix, double>::cal_DMR_full(hamilt::HContainer>* dmR_out)const +void DensityMatrix, double>::cal_DMR_full(hamilt::HContainer>* dmR_out) const { ModuleBase::TITLE("DensityMatrix", "cal_DMR_full"); @@ -252,7 +255,7 @@ void DensityMatrix, double>::cal_DMR_full(hamilt::HContaine // calculate kphase and target_mat_ptr std::vector> kphase_vec(r_size * this->_nk); std::vector*> target_DMR_mat_vec(r_size); - for(int ir = 0; ir < r_size; ++ir) + for (int ir = 0; ir < r_size; ++ir) { const ModuleBase::Vector3 r_index = target_ap.get_R_index(ir); hamilt::BaseMatrix>* target_mat = target_ap.find_matrix(r_index); @@ -264,7 +267,7 @@ void DensityMatrix, double>::cal_DMR_full(hamilt::HContaine } #endif target_DMR_mat_vec[ir] = target_mat->get_pointer(); - for(int ik = 0; ik < this->_nk; ++ik) + for (int ik = 0; ik < this->_nk; ++ik) { // cal k_phase // if TK==std::complex, kphase is e^{ikR} @@ -277,28 +280,23 @@ void DensityMatrix, double>::cal_DMR_full(hamilt::HContaine } std::vector> tmp_DMK_mat(mat_size); - for(int ik = 0; ik < this->_nk; ++ik) + for (int ik = 0; ik < this->_nk; ++ik) { // copy column-major DMK to row-major tmp_DMK_mat (for the purpose of computational efficiency) const std::complex* DMK_mat_ptr = this->_DMK[ik].data() + col_ap * this->_paraV->nrow + row_ap; - for(int icol = 0; icol < col_size; ++icol) + for (int icol = 0; icol < col_size; ++icol) { - for(int irow = 0; irow < row_size; ++irow) + for (int irow = 0; irow < row_size; ++irow) { tmp_DMK_mat[irow * col_size + icol] = DMK_mat_ptr[icol * ld_hk + irow]; } } - for(int ir = 0; ir < r_size; ++ir) + for (int ir = 0; ir < r_size; ++ir) { std::complex kphase = kphase_vec[ik * r_size + ir]; std::complex* target_DMR_mat = target_DMR_mat_vec[ir]; - BlasConnector::axpy(mat_size, - kphase, - tmp_DMK_mat.data(), - 1, - target_DMR_mat, - 1); + BlasConnector::axpy(mat_size, kphase, tmp_DMK_mat.data(), 1, target_DMR_mat, 1); } } } @@ -372,12 +370,7 @@ void DensityMatrix::cal_DMR(const int ik_in) DMK_ptr += col_ap * this->_paraV->nrow + row_ap; for (int mu = 0; mu < row_size; ++mu) { - BlasConnector::axpy(col_size, - kphase, - DMK_ptr, - ld_hk, - target_DMR_ptr, - 1); + BlasConnector::axpy(col_size, kphase, DMK_ptr, ld_hk, target_DMR_ptr, 1); DMK_ptr += 1; target_DMR_ptr += col_size; } @@ -398,11 +391,11 @@ void DensityMatrix::switch_dmr(const int mode) else { ModuleBase::timer::tick("DensityMatrix", "switch_dmr"); - switch(mode) + switch (mode) { case 0: // switch to original density matrix - if (this->dmr_tmp_ != nullptr && this->dmr_origin_.size() != 0) + if (this->dmr_tmp_ != nullptr && this->dmr_origin_.size() != 0) { this->_DMR[0]->allocate(this->dmr_origin_.data(), false); delete[] this->dmr_tmp_; @@ -412,7 +405,7 @@ void DensityMatrix::switch_dmr(const int mode) break; case 1: // switch to total magnetization density matrix, dmr_up + dmr_down - if(this->dmr_tmp_ == nullptr) + if (this->dmr_tmp_ == nullptr) { const size_t size = this->_DMR[0]->get_nnr(); this->dmr_tmp_ = new TR[size]; @@ -435,7 +428,7 @@ void DensityMatrix::switch_dmr(const int mode) break; case 2: // switch to magnetization density matrix, dmr_up - dmr_down - if(this->dmr_tmp_ == nullptr) + if (this->dmr_tmp_ == nullptr) { const size_t size = this->_DMR[0]->get_nnr(); this->dmr_tmp_ = new TR[size]; @@ -464,8 +457,8 @@ void DensityMatrix::switch_dmr(const int mode) } // T of HContainer can be double or complex -template class DensityMatrix; // Gamma-Only case -template class DensityMatrix, double>; // Multi-k case +template class DensityMatrix; // Gamma-Only case +template class DensityMatrix, double>; // Multi-k case template class DensityMatrix, std::complex>; // For EXX in future } // namespace elecstate diff --git a/source/module_elecstate/module_dm/density_matrix_io.cpp b/source/module_elecstate/module_dm/density_matrix_io.cpp index ceeff57a0e..07b6cf2a45 100644 --- a/source/module_elecstate/module_dm/density_matrix_io.cpp +++ b/source/module_elecstate/module_dm/density_matrix_io.cpp @@ -1,11 +1,10 @@ #include "density_matrix.h" - -#include "module_parameter/parameter.h" -#include "module_base/libm/libm.h" -#include "module_base/memory.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_cell/klist.h" +#include "module_parameter/parameter.h" +#include "source_base/libm/libm.h" +#include "source_base/memory.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" namespace elecstate { @@ -439,8 +438,8 @@ void DensityMatrix, double>::write_DMK(const std::string di } // T of HContainer can be double or complex -template class DensityMatrix; // Gamma-Only case -template class DensityMatrix, double>; // Multi-k case +template class DensityMatrix; // Gamma-Only case +template class DensityMatrix, double>; // Multi-k case template class DensityMatrix, std::complex>; // For EXX in future } // namespace elecstate \ No newline at end of file diff --git a/source/module_elecstate/module_dm/test/prepare_unitcell.h b/source/module_elecstate/module_dm/test/prepare_unitcell.h index f3370fd655..5c79ad1a78 100644 --- a/source/module_elecstate/module_dm/test/prepare_unitcell.h +++ b/source/module_elecstate/module_dm/test/prepare_unitcell.h @@ -1,10 +1,10 @@ #ifndef PREPARE_UNITCELL_H #define PREPARE_UNITCELL_H +#include "source_base/mathzone.h" + #include #include -#include "module_base/mathzone.h" - class UcellTestPrepare { public: @@ -73,16 +73,16 @@ class UcellTestPrepare this->ntype = this->elements.size(); static UnitCell ucell; ucell.setup(this->latname, this->ntype, this->lmaxmax, this->init_vel, this->fixed_axes); - + delete[] ucell.magnet.start_mag; // mag set here - + ucell.atom_label.resize(ucell.ntype); - ucell.atom_mass.resize(ucell.ntype); - ucell.pseudo_fn.resize(ucell.ntype); - ucell.pseudo_type.resize(ucell.ntype); + ucell.atom_mass.resize(ucell.ntype); + ucell.pseudo_fn.resize(ucell.ntype); + ucell.pseudo_type.resize(ucell.ntype); ucell.orbital_fn.resize(ucell.ntype); ucell.magnet.start_mag = new double[ucell.ntype]; // mag set here - ucell.magnet.ux_[0] = 0.0; // ux_ set here + ucell.magnet.ux_[0] = 0.0; // ux_ set here ucell.magnet.ux_[1] = 0.0; ucell.magnet.ux_[2] = 0.0; for (int it = 0; it < ucell.ntype; ++it) @@ -279,25 +279,13 @@ UcellTestPrepare::UcellTestPrepare(std::string latname_in, std::vector atomic_mass_in, std::string coor_type_in, std::valarray coordinates_in) - : latname(latname_in), - lmaxmax(lmaxmax_in), - init_vel(init_vel_in), - selective_dynamics(selective_dynamics_in), - relax_new(relax_new_in), - fixed_axes(fixed_axes_in), - lat0(lat0_in), - latvec(latvec_in), - elements(elements_in), - pp_files(pp_files_in), - pp_types(pp_types_in), - orb_files(orb_files_in), - natom(natom_in), - atomic_mass(atomic_mass_in), - coor_type(coor_type_in), - coordinates(coordinates_in) + : latname(latname_in), lmaxmax(lmaxmax_in), init_vel(init_vel_in), selective_dynamics(selective_dynamics_in), + relax_new(relax_new_in), fixed_axes(fixed_axes_in), lat0(lat0_in), latvec(latvec_in), elements(elements_in), + pp_files(pp_files_in), pp_types(pp_types_in), orb_files(orb_files_in), natom(natom_in), + atomic_mass(atomic_mass_in), coor_type(coor_type_in), coordinates(coordinates_in) { mbl = std::valarray(0.0, coordinates_in.size()); - velocity = std::valarray(0.0, coordinates_in.size()); + velocity = std::valarray(0.0, coordinates_in.size()); } UcellTestPrepare::UcellTestPrepare(std::string latname_in, @@ -318,79 +306,51 @@ UcellTestPrepare::UcellTestPrepare(std::string latname_in, std::valarray coordinates_in, std::valarray mbl_in, std::valarray velocity_in) - : latname(latname_in), - lmaxmax(lmaxmax_in), - init_vel(init_vel_in), - selective_dynamics(selective_dynamics_in), - relax_new(relax_new_in), - fixed_axes(fixed_axes_in), - lat0(lat0_in), - latvec(latvec_in), - elements(elements_in), - pp_files(pp_files_in), - pp_types(pp_types_in), - orb_files(orb_files_in), - natom(natom_in), - atomic_mass(atomic_mass_in), - coor_type(coor_type_in), - coordinates(coordinates_in), - mbl(mbl_in), + : latname(latname_in), lmaxmax(lmaxmax_in), init_vel(init_vel_in), selective_dynamics(selective_dynamics_in), + relax_new(relax_new_in), fixed_axes(fixed_axes_in), lat0(lat0_in), latvec(latvec_in), elements(elements_in), + pp_files(pp_files_in), pp_types(pp_types_in), orb_files(orb_files_in), natom(natom_in), + atomic_mass(atomic_mass_in), coor_type(coor_type_in), coordinates(coordinates_in), mbl(mbl_in), velocity(velocity_in) // velocity assume the existence of mbl in print_stru_file() { } UcellTestPrepare::UcellTestPrepare(const UcellTestPrepare& utp) - : latname(utp.latname), - lmaxmax(utp.lmaxmax), - init_vel(utp.init_vel), - selective_dynamics(utp.selective_dynamics), - relax_new(utp.relax_new), - fixed_axes(utp.fixed_axes), - lat0(utp.lat0), - latvec(utp.latvec), - elements(utp.elements), - pp_files(utp.pp_files), - pp_types(utp.pp_types), - orb_files(utp.orb_files), - natom(utp.natom), - atomic_mass(utp.atomic_mass), - coor_type(utp.coor_type), - coordinates(utp.coordinates), - mbl(utp.mbl), + : latname(utp.latname), lmaxmax(utp.lmaxmax), init_vel(utp.init_vel), selective_dynamics(utp.selective_dynamics), + relax_new(utp.relax_new), fixed_axes(utp.fixed_axes), lat0(utp.lat0), latvec(utp.latvec), elements(utp.elements), + pp_files(utp.pp_files), pp_types(utp.pp_types), orb_files(utp.orb_files), natom(utp.natom), + atomic_mass(utp.atomic_mass), coor_type(utp.coor_type), coordinates(utp.coordinates), mbl(utp.mbl), velocity(utp.velocity) // velocity assume the existence of mbl in print_stru_file() { } -std::map UcellTestLib{ - {"Si", - UcellTestPrepare("fcc", // latname - 2, // lmaxmax - true, // init_vel - true, // selective_dyanmics - true, // relax_new - "volume", // fixed_axes - 10.2, // lat0 - {-0.5, - 0.0, - 0.5, // latvec - 0.0, - 0.5, - 0.5, - -0.5, - 0.5, - 0.0}, - {"Si"}, // elements - {"Si.upf"}, // upf file - {"upf201"}, // upf types - {"Si.orb"}, // orb file - {2}, // number of each elements - {28.0}, // atomic mass - "Cartesian", // coordination type - {0.0, - 0.0, - 0.0, // atomic coordinates - 0.25, - 0.25, - 0.25})} -}; +std::map UcellTestLib{{"Si", + UcellTestPrepare("fcc", // latname + 2, // lmaxmax + true, // init_vel + true, // selective_dyanmics + true, // relax_new + "volume", // fixed_axes + 10.2, // lat0 + {-0.5, + 0.0, + 0.5, // latvec + 0.0, + 0.5, + 0.5, + -0.5, + 0.5, + 0.0}, + {"Si"}, // elements + {"Si.upf"}, // upf file + {"upf201"}, // upf types + {"Si.orb"}, // orb file + {2}, // number of each elements + {28.0}, // atomic mass + "Cartesian", // coordination type + {0.0, + 0.0, + 0.0, // atomic coordinates + 0.25, + 0.25, + 0.25})}}; #endif diff --git a/source/module_elecstate/module_pot/H_Hartree_pw.cpp b/source/module_elecstate/module_pot/H_Hartree_pw.cpp index 898817f736..265a21e41b 100644 --- a/source/module_elecstate/module_pot/H_Hartree_pw.cpp +++ b/source/module_elecstate/module_pot/H_Hartree_pw.cpp @@ -1,9 +1,9 @@ #include "H_Hartree_pw.h" #include "module_parameter/parameter.h" -#include "module_base/constants.h" -#include "module_base/timer.h" -#include "module_base/parallel_reduce.h" +#include "source_base/constants.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" namespace elecstate { @@ -13,10 +13,10 @@ double H_Hartree_pw::hartree_energy = 0.0; //-------------------------------------------------------------------- // Transform charge density to hartree potential. //-------------------------------------------------------------------- -ModuleBase::matrix H_Hartree_pw::v_hartree(const UnitCell &cell, - ModulePW::PW_Basis *rho_basis, - const int &nspin, - const double *const *const rho) +ModuleBase::matrix H_Hartree_pw::v_hartree(const UnitCell& cell, + ModulePW::PW_Basis* rho_basis, + const int& nspin, + const double* const* const rho) { ModuleBase::TITLE("H_Hartree_pw", "v_hartree"); ModuleBase::timer::tick("H_Hartree_pw", "v_hartree"); @@ -45,7 +45,7 @@ ModuleBase::matrix H_Hartree_pw::v_hartree(const UnitCell &cell, std::vector> vh_g(rho_basis->npw); #ifdef _OPENMP -#pragma omp parallel for reduction(+:ehart) +#pragma omp parallel for reduction(+ : ehart) #endif for (int ig = 0; ig < rho_basis->npw; ig++) { @@ -101,7 +101,7 @@ PotHartree::PotHartree(const ModulePW::PW_Basis* rho_basis_in) this->fixed_mode = false; } -void PotHartree::cal_v_eff(const Charge*const chg, const UnitCell*const ucell, ModuleBase::matrix& v_eff) +void PotHartree::cal_v_eff(const Charge* const chg, const UnitCell* const ucell, ModuleBase::matrix& v_eff) { v_eff += H_Hartree_pw::v_hartree(*ucell, const_cast(this->rho_basis_), v_eff.nr, chg->rho); return; diff --git a/source/module_elecstate/module_pot/H_Hartree_pw.h b/source/module_elecstate/module_pot/H_Hartree_pw.h index aed9eced2b..4bf1edd651 100644 --- a/source/module_elecstate/module_pot/H_Hartree_pw.h +++ b/source/module_elecstate/module_pot/H_Hartree_pw.h @@ -1,11 +1,11 @@ #ifndef HHARTREEPW_H #define HHARTREEPW_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/matrix.h" -#include "module_cell/unitcell.h" #include "module_basis/module_pw/pw_basis.h" +#include "module_cell/unitcell.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/matrix.h" namespace elecstate { @@ -20,18 +20,18 @@ class H_Hartree_pw static double hartree_energy; // compute the Hartree energy - static ModuleBase::matrix v_hartree(const UnitCell &cell, - ModulePW::PW_Basis *rho_basis, - const int &nspin, - const double *const *const rho); + static ModuleBase::matrix v_hartree(const UnitCell& cell, + ModulePW::PW_Basis* rho_basis, + const int& nspin, + const double* const* const rho); static int get_Z(std::string str); - static void cast_C2R(std::complex *src, double *dst, int dim); + static void cast_C2R(std::complex* src, double* dst, int dim); - static void lapl_rho(const std::complex *rhog, double *lapn); + static void lapl_rho(const std::complex* rhog, double* lapn); - static void shape_gradn(const std::complex *PS_TOTN, ModulePW::PW_Basis *rho_basis, double *eprime); + static void shape_gradn(const std::complex* PS_TOTN, ModulePW::PW_Basis* rho_basis, double* eprime); static void eps_pot(const std::complex* PS_TOTN, const std::complex* phi, @@ -39,11 +39,11 @@ class H_Hartree_pw double* d_eps, double* vwork); - static void test_res(const UnitCell &ucell, - ModulePW::PW_Basis *rho_basis, - const std::complex *tot_N, - std::complex *phi, - double *d_eps); + static void test_res(const UnitCell& ucell, + ModulePW::PW_Basis* rho_basis, + const std::complex* tot_N, + std::complex* phi, + double* d_eps); private: }; @@ -59,7 +59,7 @@ class PotHartree : public PotBase public: PotHartree(const ModulePW::PW_Basis* rho_basis_in); - void cal_v_eff(const Charge*const chg, const UnitCell*const ucell, ModuleBase::matrix& v_eff); + void cal_v_eff(const Charge* const chg, const UnitCell* const ucell, ModuleBase::matrix& v_eff); }; } // namespace elecstate diff --git a/source/module_elecstate/module_pot/H_TDDFT_pw.cpp b/source/module_elecstate/module_pot/H_TDDFT_pw.cpp index c75511e190..2b7748a4cf 100644 --- a/source/module_elecstate/module_pot/H_TDDFT_pw.cpp +++ b/source/module_elecstate/module_pot/H_TDDFT_pw.cpp @@ -1,12 +1,12 @@ #include "H_TDDFT_pw.h" -#include "module_base/constants.h" -#include "module_base/math_integral.h" -#include "module_base/timer.h" #include "module_hamilt_lcao/module_tddft/evolve_elec.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/input_conv.h" #include "module_parameter/parameter.h" +#include "source_base/constants.h" +#include "source_base/math_integral.h" +#include "source_base/timer.h" namespace elecstate { @@ -114,7 +114,7 @@ void H_TDDFT_pw::cal_fixed_v(double* vl_pseudo) { return; } - //std::cout << "calculate electric potential" << std::endl; + // std::cout << "calculate electric potential" << std::endl; ModuleBase::timer::tick("H_TDDFT_pw", "cal_fixed_v"); @@ -280,8 +280,8 @@ int H_TDDFT_pw::check_ncut(int t_type) void H_TDDFT_pw::update_At() { - //std::cout << "calculate electric potential" << std::endl; - // time evolve + // std::cout << "calculate electric potential" << std::endl; + // time evolve H_TDDFT_pw::istep++; // judgement to skip vext diff --git a/source/module_elecstate/module_pot/efield.cpp b/source/module_elecstate/module_pot/efield.cpp index ed602d5405..78820e5a29 100644 --- a/source/module_elecstate/module_pot/efield.cpp +++ b/source/module_elecstate/module_pot/efield.cpp @@ -1,11 +1,11 @@ #include "efield.h" -#include "module_parameter/parameter.h" #include "gatefield.h" -#include "module_base/constants.h" -#include "module_base/global_variable.h" -#include "module_base/timer.h" -#include "module_base/parallel_reduce.h" +#include "module_parameter/parameter.h" +#include "source_base/constants.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" namespace elecstate { @@ -56,7 +56,7 @@ ModuleBase::matrix Efield::add_efield(const UnitCell& cell, } double latvec; // latvec along the efield direction - double area; // surface area along the efield direction + double area; // surface area along the efield direction prepare(cell, latvec, area); double ion_dipole = 0; @@ -139,7 +139,7 @@ ModuleBase::matrix Efield::add_efield(const UnitCell& cell, //======================================================= // calculate dipole density in surface calculations //======================================================= -double Efield::cal_ion_dipole(const UnitCell &cell, const double &bmod) +double Efield::cal_ion_dipole(const UnitCell& cell, const double& bmod) { double ion_dipole = 0; for (int it = 0; it < cell.ntype; ++it) @@ -207,7 +207,7 @@ double Efield::cal_induced_dipole(const UnitCell& cell, { double induced_dipole = 0; - double *induced_rho = new double[rho_basis->nrxx]; + double* induced_rho = new double[rho_basis->nrxx]; solvent.induced_charge(cell, rho_basis, induced_rho); for (int ir = 0; ir < rho_basis->nrxx; ++ir) @@ -231,7 +231,7 @@ double Efield::cal_induced_dipole(const UnitCell& cell, return induced_dipole; } -double Efield::saw_function(const double &a, const double &b, const double &x) +double Efield::saw_function(const double& a, const double& b, const double& x) { assert(x >= 0); assert(x <= 1); @@ -252,7 +252,7 @@ double Efield::saw_function(const double &a, const double &b, const double &x) } } -void Efield::compute_force(const UnitCell &cell, ModuleBase::matrix &fdip) +void Efield::compute_force(const UnitCell& cell, ModuleBase::matrix& fdip) { if (PARAM.inp.dip_cor_flag) { @@ -287,7 +287,7 @@ void Efield::compute_force(const UnitCell &cell, ModuleBase::matrix &fdip) } } -void Efield::prepare(const UnitCell &cell, double &latvec, double &area) +void Efield::prepare(const UnitCell& cell, double& latvec, double& area) { if (efield_dir == 0) { diff --git a/source/module_elecstate/module_pot/gatefield.cpp b/source/module_elecstate/module_pot/gatefield.cpp index 3a59f54632..f57c8a26d8 100644 --- a/source/module_elecstate/module_pot/gatefield.cpp +++ b/source/module_elecstate/module_pot/gatefield.cpp @@ -1,8 +1,8 @@ #include "gatefield.h" -#include "module_parameter/parameter.h" #include "efield.h" -#include "module_base/timer.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" namespace elecstate { @@ -16,11 +16,11 @@ double Gatefield::block_down = 0.45; double Gatefield::block_up = 0.55; double Gatefield::block_height = 0.1; -void Gatefield::add_gatefield(double *vltot, - const UnitCell &cell, - const ModulePW::PW_Basis *rho_basis, - const bool &linear, - const bool &quadratic) +void Gatefield::add_gatefield(double* vltot, + const UnitCell& cell, + const ModulePW::PW_Basis* rho_basis, + const bool& linear, + const bool& quadratic) { ModuleBase::TITLE("Gatefield", "add_gatefield"); ModuleBase::timer::tick("Gatefield", "add_gatefield"); @@ -29,7 +29,7 @@ void Gatefield::add_gatefield(double *vltot, // preparation for constants //======================================================= double latvec; // latvec along the efield direction - double area; // surface area along the efield direction + double area; // surface area along the efield direction Efield::prepare(cell, latvec, area); double ion_charge = 0; @@ -52,7 +52,7 @@ void Gatefield::add_gatefield(double *vltot, { double pos = cell.atoms[it].taud[ia][Efield::efield_dir]; factor += zval * (mopopla(zgate, pos, true) + 1.0 / 6.0); // linear part - factor += zval * mopopla(zgate, pos, false); // quadratic part + factor += zval * mopopla(zgate, pos, false); // quadratic part } } etotgatefield @@ -140,7 +140,7 @@ void Gatefield::add_gatefield(double *vltot, ModuleBase::timer::tick("Gatefield", "add_gatefield"); } -double Gatefield::mopopla(double &zgate, double z, bool flag) +double Gatefield::mopopla(double& zgate, double z, bool flag) { while (z > 1.0) z -= 1.0; @@ -168,7 +168,7 @@ double Gatefield::mopopla(double &zgate, double z, bool flag) } } -void Gatefield::compute_force(const UnitCell &cell, ModuleBase::matrix &fgate) +void Gatefield::compute_force(const UnitCell& cell, ModuleBase::matrix& fgate) { int iat = 0; for (int it = 0; it < cell.ntype; ++it) diff --git a/source/module_elecstate/module_pot/pot_base.h b/source/module_elecstate/module_pot/pot_base.h index 2f91793612..9d913e8f30 100644 --- a/source/module_elecstate/module_pot/pot_base.h +++ b/source/module_elecstate/module_pot/pot_base.h @@ -1,32 +1,40 @@ #ifndef POTBASE_H #define POTBASE_H -#include "module_base/complexmatrix.h" -#include "module_base/matrix.h" -#include "module_cell/unitcell.h" #include "module_basis/module_pw/pw_basis.h" +#include "module_cell/unitcell.h" #include "module_elecstate/module_charge/charge.h" +#include "source_base/complexmatrix.h" +#include "source_base/matrix.h" namespace elecstate { /** This class is the base class of Potential module 1. Main class Potential is derived from it. 2. components of potentials on real space grids can derived from it and will be registered into Potential. - a. cal_fixed_v() is a virtual function, it can be override to contribute potentials which do not change with Charge object. - b. cal_v_eff() is a virtual function, it can be override to contribute potentials which change with Charge object. - c. fixed_mode should be set "true" if you want Potential class call cal_fixed_v() - d. dynamic_mode should be set "true" if you want Potential class call cal_v_eff() - e. rho_basis_ is needed to provide number of real space grids(nrxx) and number of spin(nspin) and FFT(real<->recip) interface + a. cal_fixed_v() is a virtual function, it can be override to contribute potentials which do not change with Charge + object. b. cal_v_eff() is a virtual function, it can be override to contribute potentials which change with Charge + object. c. fixed_mode should be set "true" if you want Potential class call cal_fixed_v() d. dynamic_mode should be set + "true" if you want Potential class call cal_v_eff() e. rho_basis_ is needed to provide number of real space grids(nrxx) + and number of spin(nspin) and FFT(real<->recip) interface */ class PotBase { public: - PotBase(){} - virtual ~PotBase(){} - - virtual void cal_v_eff(const Charge*const chg, const UnitCell*const ucell, ModuleBase::matrix& v_eff){} - - virtual void cal_fixed_v(double* vl_pseudo){} + PotBase() + { + } + virtual ~PotBase() + { + } + + virtual void cal_v_eff(const Charge* const chg, const UnitCell* const ucell, ModuleBase::matrix& v_eff) + { + } + + virtual void cal_fixed_v(double* vl_pseudo) + { + } bool fixed_mode = 0; bool dynamic_mode = 0; diff --git a/source/module_elecstate/module_pot/pot_local.cpp b/source/module_elecstate/module_pot/pot_local.cpp index 101f527efc..509c57f0d1 100644 --- a/source/module_elecstate/module_pot/pot_local.cpp +++ b/source/module_elecstate/module_pot/pot_local.cpp @@ -1,7 +1,7 @@ #include "pot_local.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" #include @@ -11,12 +11,12 @@ namespace elecstate //========================================================== // This routine computes the local potential in real space //========================================================== -void PotLocal::cal_fixed_v(double *vl_pseudo) // store the local pseudopotential +void PotLocal::cal_fixed_v(double* vl_pseudo) // store the local pseudopotential { ModuleBase::TITLE("PotLocal", "cal_fixed_v"); ModuleBase::timer::tick("PotLocal", "cal_fixed_v"); - std::complex *vg = new std::complex[this->rho_basis_->npw]; + std::complex* vg = new std::complex[this->rho_basis_->npw]; ModuleBase::GlobalFunc::ZEROS(vg, this->rho_basis_->npw); @@ -29,14 +29,14 @@ void PotLocal::cal_fixed_v(double *vl_pseudo) // store the local pseudopotential } /// save the V_local at G=0 - if(this->rho_basis_->npw > 0) + if (this->rho_basis_->npw > 0) { *vl_of_0_ = vg[0].real(); } // recip2real should be a const function, but now it isn't // a dangerous usage appears here, which should be fix in the future. - const_cast(this->rho_basis_)->recip2real(vg, vl_pseudo); + const_cast(this->rho_basis_)->recip2real(vg, vl_pseudo); delete[] vg; diff --git a/source/module_elecstate/module_pot/pot_local.h b/source/module_elecstate/module_pot/pot_local.h index df31ac471b..a50f090fe0 100644 --- a/source/module_elecstate/module_pot/pot_local.h +++ b/source/module_elecstate/module_pot/pot_local.h @@ -1,8 +1,8 @@ #ifndef POTLOCAL_H #define POTLOCAL_H -#include "module_base/matrix.h" #include "pot_base.h" +#include "source_base/matrix.h" namespace elecstate { @@ -25,14 +25,13 @@ class PotLocal : public PotBase void cal_fixed_v(double* vl_pseudo) override; - private: - + private: /// @brief save the value of vloc at G=0; this is a static member because there is only one vl(0) for all instances double* vl_of_0_ = nullptr; // std::vector vltot; - const ModuleBase::matrix* vloc_ = nullptr; // local pseduopotentials + const ModuleBase::matrix* vloc_ = nullptr; // local pseduopotentials const ModuleBase::ComplexMatrix* sf_ = nullptr; // structure factors int ntype_ = 0; }; diff --git a/source/module_elecstate/module_pot/pot_local_paw.cpp b/source/module_elecstate/module_pot/pot_local_paw.cpp index 9b48d50098..33396d49c1 100644 --- a/source/module_elecstate/module_pot/pot_local_paw.cpp +++ b/source/module_elecstate/module_pot/pot_local_paw.cpp @@ -1,7 +1,7 @@ #include "pot_local_paw.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" #include @@ -11,7 +11,7 @@ namespace elecstate //========================================================== // This routine computes the local potential in real space //========================================================== -void PotLocal_PAW::cal_fixed_v(double *vl_pseudo // store the local pseudopotential +void PotLocal_PAW::cal_fixed_v(double* vl_pseudo // store the local pseudopotential ) { ModuleBase::TITLE("PotLocal_PAW", "cal_fixed_v"); diff --git a/source/module_elecstate/module_pot/pot_local_paw.h b/source/module_elecstate/module_pot/pot_local_paw.h index 8c37ef93a6..0ca0531e67 100644 --- a/source/module_elecstate/module_pot/pot_local_paw.h +++ b/source/module_elecstate/module_pot/pot_local_paw.h @@ -1,8 +1,8 @@ #ifndef POTLOCALPAW_H #define POTLOCALPAW_H -#include "module_base/matrix.h" #include "pot_base.h" +#include "source_base/matrix.h" namespace elecstate { @@ -12,8 +12,8 @@ class PotLocal_PAW : public PotBase public: PotLocal_PAW() { - this->fixed_mode = true; - this->dynamic_mode = false; + this->fixed_mode = true; + this->dynamic_mode = false; } void cal_fixed_v(double* vl_pseudo) override; diff --git a/source/module_elecstate/module_pot/pot_xc.cpp b/source/module_elecstate/module_pot/pot_xc.cpp index 907363fb17..29e8a98bdd 100644 --- a/source/module_elecstate/module_pot/pot_xc.cpp +++ b/source/module_elecstate/module_pot/pot_xc.cpp @@ -1,7 +1,7 @@ #include "pot_xc.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/timer.h" #ifdef USE_LIBXC #include "module_hamilt_general/module_xc/xc_functional_libxc.h" @@ -10,12 +10,12 @@ namespace elecstate { -void PotXC::cal_v_eff(const Charge*const chg, const UnitCell*const ucell, ModuleBase::matrix& v_eff) +void PotXC::cal_v_eff(const Charge* const chg, const UnitCell* const ucell, ModuleBase::matrix& v_eff) { ModuleBase::TITLE("PotXC", "cal_veff"); ModuleBase::timer::tick("PotXC", "cal_veff"); const int nrxx_current = chg->nrxx; - + //---------------------------------------------------------- // calculate the exchange-correlation potential //---------------------------------------------------------- @@ -24,7 +24,11 @@ void PotXC::cal_v_eff(const Charge*const chg, const UnitCell*const ucell, Module { #ifdef USE_LIBXC const std::tuple etxc_vtxc_v - = XC_Functional_Libxc::v_xc_meta(XC_Functional::get_func_id(), nrxx_current, ucell->omega, ucell->tpiba, chg); + = XC_Functional_Libxc::v_xc_meta(XC_Functional::get_func_id(), + nrxx_current, + ucell->omega, + ucell->tpiba, + chg); *(this->etxc_) = std::get<0>(etxc_vtxc_v); *(this->vtxc_) = std::get<1>(etxc_vtxc_v); v_eff += std::get<2>(etxc_vtxc_v); diff --git a/source/module_elecstate/module_pot/potential_new.cpp b/source/module_elecstate/module_pot/potential_new.cpp index d12bb72fa0..f32f475212 100644 --- a/source/module_elecstate/module_pot/potential_new.cpp +++ b/source/module_elecstate/module_pot/potential_new.cpp @@ -1,13 +1,13 @@ #include "potential_new.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/memory.h" -#include "module_base/timer.h" -#include "module_base/tool_quit.h" -#include "module_base/tool_title.h" #include "module_hamilt_general/module_xc/xc_functional.h" #include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" +#include "source_base/tool_title.h" #include @@ -94,14 +94,14 @@ void Potential::allocate() ModuleBase::TITLE("Potential", "allocate"); int nrxx = this->rho_basis_->nrxx; int nrxx_smooth = this->rho_basis_smooth_->nrxx; - if (nrxx == 0) - { - return; - } - if (nrxx_smooth == 0) - { - return; - } + if (nrxx == 0) + { + return; + } + if (nrxx_smooth == 0) + { + return; + } this->v_effective_fixed.resize(nrxx); ModuleBase::Memory::record("Pot::veff_fix", sizeof(double) * nrxx); @@ -149,10 +149,10 @@ void Potential::allocate() } } -void Potential::update_from_charge(const Charge*const chg, const UnitCell*const ucell) +void Potential::update_from_charge(const Charge* const chg, const UnitCell* const ucell) { ModuleBase::TITLE("Potential", "update_from_charge"); - //ModuleBase::timer::tick("Potential", "update_from_charge"); + // ModuleBase::timer::tick("Potential", "update_from_charge"); if (!this->fixed_done) { @@ -188,7 +188,7 @@ void Potential::update_from_charge(const Charge*const chg, const UnitCell*const // There's no need to synchronize memory for double precision pointers while in a CPU environment } - //ModuleBase::timer::tick("Potential", "update_from_charge"); + // ModuleBase::timer::tick("Potential", "update_from_charge"); } void Potential::cal_fixed_v(double* vl_pseudo) @@ -208,7 +208,7 @@ void Potential::cal_fixed_v(double* vl_pseudo) ModuleBase::timer::tick("Potential", "cal_fixed_v"); } -void Potential::cal_v_eff(const Charge*const chg, const UnitCell*const ucell, ModuleBase::matrix& v_eff) +void Potential::cal_v_eff(const Charge* const chg, const UnitCell* const ucell, ModuleBase::matrix& v_eff) { ModuleBase::TITLE("Potential", "cal_veff"); ModuleBase::timer::tick("Potential", "cal_veff"); @@ -241,7 +241,7 @@ void Potential::cal_v_eff(const Charge*const chg, const UnitCell*const ucell, Mo ModuleBase::timer::tick("Potential", "cal_veff"); } -void Potential::init_pot(int istep, const Charge*const chg) +void Potential::init_pot(int istep, const Charge* const chg) { ModuleBase::TITLE("Potential", "init_pot"); ModuleBase::timer::tick("Potential", "init_pot"); @@ -277,7 +277,7 @@ void Potential::interpolate_vrs() ModuleBase::TITLE("Potential", "interpolate_vrs"); ModuleBase::timer::tick("Potential", "interpolate_vrs"); - if ( PARAM.globalv.double_grid) + if (PARAM.globalv.double_grid) { if (rho_basis_->gamma_only != rho_basis_smooth_->gamma_only) { diff --git a/source/module_elecstate/module_pot/potential_new.h b/source/module_elecstate/module_pot/potential_new.h index 103a46e064..27beb90bc3 100644 --- a/source/module_elecstate/module_pot/potential_new.h +++ b/source/module_elecstate/module_pot/potential_new.h @@ -1,11 +1,11 @@ #ifndef POTENTIALNEW_H #define POTENTIALNEW_H -#include "module_base/complexmatrix.h" #include "module_hamilt_general/module_surchem/surchem.h" #include "module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h" #include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" #include "pot_base.h" +#include "source_base/complexmatrix.h" #include @@ -65,11 +65,11 @@ class Potential : public PotBase ~Potential(); // initialize potential when SCF begin - void init_pot(int istep, const Charge*const chg); + void init_pot(int istep, const Charge* const chg); // initialize potential components before SCF void pot_register(const std::vector& components_list); // update potential from current charge - void update_from_charge(const Charge*const chg, const UnitCell*const ucell); + void update_from_charge(const Charge* const chg, const UnitCell* const ucell); // interface for SCF-converged, etxc vtxc for Energy, vnew for force_scc void get_vnew(const Charge* chg, ModuleBase::matrix& vnew); @@ -170,14 +170,13 @@ class Potential : public PotBase { return this->v_effective_fixed.data(); } - const ModulePW::PW_Basis *get_rho_basis() const + const ModulePW::PW_Basis* get_rho_basis() const { return this->rho_basis_; } - // What about adding a function to get the wfc? + // What about adding a function to get the wfc? // This is useful for the calculation of the exx energy - /// @brief get the value of vloc at G=0; /// @return vl(0) double get_vl_of_0() const @@ -186,7 +185,7 @@ class Potential : public PotBase } private: - void cal_v_eff(const Charge*const chg, const UnitCell*const ucell, ModuleBase::matrix& v_eff) override; + void cal_v_eff(const Charge* const chg, const UnitCell* const ucell, ModuleBase::matrix& v_eff) override; void cal_fixed_v(double* vl_pseudo) override; // interpolate potential on the smooth mesh if necessary void interpolate_vrs(); diff --git a/source/module_elecstate/module_pot/potential_types.cpp b/source/module_elecstate/module_pot/potential_types.cpp index c3dd585096..7d27f53ae2 100644 --- a/source/module_elecstate/module_pot/potential_types.cpp +++ b/source/module_elecstate/module_pot/potential_types.cpp @@ -1,18 +1,18 @@ #include "H_Hartree_pw.h" #include "efield.h" -#include "module_parameter/parameter.h" #include "gatefield.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/memory.h" -#include "module_base/timer.h" -#include "module_base/tool_quit.h" -#include "module_base/tool_title.h" +#include "module_parameter/parameter.h" #include "pot_local.h" +#include "pot_local_paw.h" #include "pot_surchem.hpp" #include "pot_xc.h" #include "potential_new.h" -#include "pot_local_paw.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" +#include "source_base/tool_title.h" #ifdef __LCAO #include "H_TDDFT_pw.h" #endif diff --git a/source/module_elecstate/occupy.cpp b/source/module_elecstate/occupy.cpp index 580f90de81..fab8a33d60 100644 --- a/source/module_elecstate/occupy.cpp +++ b/source/module_elecstate/occupy.cpp @@ -1,9 +1,9 @@ #include "occupy.h" -#include "module_base/constants.h" -#include "module_base/mymath.h" -#include "module_base/parallel_reduce.h" #include "module_parameter/parameter.h" +#include "source_base/constants.h" +#include "source_base/mymath.h" +#include "source_base/parallel_reduce.h" Occupy::Occupy() { @@ -141,12 +141,14 @@ void Occupy::iweights( { assert(is < 2); double degspin = 2.0; - if (PARAM.inp.nspin == 4) { + if (PARAM.inp.nspin == 4) + { degspin = 1.0; -} - if (is != -1) { + } + if (is != -1) + { degspin = 1.0; -} + } double ib_mind = nelec / degspin; int ib_min = std::ceil(ib_mind); @@ -226,9 +228,10 @@ void Occupy::gweights(const int nks, for (int ik = 0; ik < nks; ik++) { // mohan add 2011-04-03 - if (is != -1 && is != isk[ik]) { + if (is != -1 && is != isk[ik]) + { continue; -} + } for (int ib = 0; ib < PARAM.globalv.nbands_l; ib++) { @@ -402,9 +405,10 @@ double Occupy::sumkg(const ModuleBase::matrix& ekb, double sum2 = 0.0; for (int ik = 0; ik < nks; ik++) { - if (is != -1 && is != isk[ik]) { + if (is != -1 && is != isk[ik]) + { continue; -} + } double sum1 = 0.0; for (int ib = 0; ib < nband; ib++) diff --git a/source/module_elecstate/occupy.h b/source/module_elecstate/occupy.h index 8f7b4a3477..93dfb66d88 100644 --- a/source/module_elecstate/occupy.h +++ b/source/module_elecstate/occupy.h @@ -1,33 +1,31 @@ #ifndef OCCUPY_H #define OCCUPY_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/matrix.h" -#include "module_base/vector3.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/matrix.h" +#include "source_base/vector3.h" class Occupy { -public: - + public: Occupy(); ~Occupy(); - static void decision(const std::string &name,const std::string &smearing_method,const double &smearing_sigma); + static void decision(const std::string& name, const std::string& smearing_method, const double& smearing_sigma); - static const bool& gauss(void) - { + static const bool& gauss(void) + { return use_gaussian_broadening; } - static const bool& fix(void) - { + static const bool& fix(void) + { return fixed_occupations; } -public: - + public: // gaussian_broadening static bool use_gaussian_broadening; static int gaussian_type; @@ -59,59 +57,65 @@ class Occupy const int& is, const std::vector& isk); - static void tweights(const int nks,const int nspin,const int nband, - const double &nelec,const int ntetra, - const ModuleBase::matrix &tetra,double **ekb,double &ef,ModuleBase::matrix &wg); - - static double wsweight(const ModuleBase::Vector3 &r, ModuleBase::Vector3 *rws,const int nrws); - -private: - static void efermig(const ModuleBase::matrix& ekb, - const int nbnd, - const int nks, - const double& nelec, - const std::vector& wk, - const double& smearing_sigma, - const int ngauss, - double& ef, - const int& is, - const std::vector& isk); - - static double sumkg(const ModuleBase::matrix& ekb, - const int nband, - const int nks, - const std::vector& wk, - const double& smearing_sigma, - const int ngauss, - const double& e, - const int& is, - const std::vector& isk); - - static double wgauss(const double& x, const int n); - - static double w1gauss(const double& x, const int n); - - //============================ - // Needed in tweights - //============================ - static void efermit(double** ekb, - const int nband, - const int nks, - const double& nelec, - const int nspin, - const int ntetra, - const ModuleBase::matrix& tetra, - double& ef); - - static double sumkt(double** ekb, - const int nband, - const int nks, - const int nspin, - const int ntetra, - const ModuleBase::matrix& tetra, - const double& eup); - - static void piksort(const int n, double* a); + static void tweights(const int nks, + const int nspin, + const int nband, + const double& nelec, + const int ntetra, + const ModuleBase::matrix& tetra, + double** ekb, + double& ef, + ModuleBase::matrix& wg); + + static double wsweight(const ModuleBase::Vector3& r, ModuleBase::Vector3* rws, const int nrws); + + private: + static void efermig(const ModuleBase::matrix& ekb, + const int nbnd, + const int nks, + const double& nelec, + const std::vector& wk, + const double& smearing_sigma, + const int ngauss, + double& ef, + const int& is, + const std::vector& isk); + + static double sumkg(const ModuleBase::matrix& ekb, + const int nband, + const int nks, + const std::vector& wk, + const double& smearing_sigma, + const int ngauss, + const double& e, + const int& is, + const std::vector& isk); + + static double wgauss(const double& x, const int n); + + static double w1gauss(const double& x, const int n); + + //============================ + // Needed in tweights + //============================ + static void efermit(double** ekb, + const int nband, + const int nks, + const double& nelec, + const int nspin, + const int ntetra, + const ModuleBase::matrix& tetra, + double& ef); + + static double sumkt(double** ekb, + const int nband, + const int nks, + const int nspin, + const int ntetra, + const ModuleBase::matrix& tetra, + const double& eup); + + static void piksort(const int n, double* a); }; #endif diff --git a/source/module_elecstate/read_orb.cpp b/source/module_elecstate/read_orb.cpp index 56acf1d6c9..2897ad1c51 100644 --- a/source/module_elecstate/read_orb.cpp +++ b/source/module_elecstate/read_orb.cpp @@ -1,38 +1,39 @@ #include "read_orb.h" -#include "module_base/formatter.h" -namespace elecstate { - void read_orb_file(int it, std::string &orb_file, std::ofstream &ofs_running, Atom* atom) - { - // the maximum L is 9 like cc-pV9Z, according to the +#include "source_base/formatter.h" + +namespace elecstate +{ +void read_orb_file(int it, std::string& orb_file, std::ofstream& ofs_running, Atom* atom) +{ + // the maximum L is 9 like cc-pV9Z, according to the // basissetexchange https://www.basissetexchange.org/ // there is no orbitals with L>9 presently const std::string spectrum = "SPDFGHIKLM"; - std::ifstream ifs(orb_file.c_str(), std::ios::in); // pengfei 2014-10-13 + std::ifstream ifs(orb_file.c_str(), std::ios::in); // pengfei 2014-10-13 // mohan add return 2021-04-26 if (!ifs) { - std::cout << " Element index " << it+1 << std::endl; + std::cout << " Element index " << it + 1 << std::endl; std::cout << " orbital file: " << orb_file << std::endl; - ModuleBase::WARNING_QUIT("UnitCell::read_orb_file", - "ABACUS Cannot find the ORBITAL file (basis sets)"); + ModuleBase::WARNING_QUIT("UnitCell::read_orb_file", "ABACUS Cannot find the ORBITAL file (basis sets)"); } std::string word; atom->nw = 0; while (ifs.good()) { ifs >> word; - if (word == "Element") // pengfei Li 16-2-29 + if (word == "Element") // pengfei Li 16-2-29 { ModuleBase::GlobalFunc::READ_VALUE(ifs, atom->label_orb); } if (word == "Lmax") { ModuleBase::GlobalFunc::READ_VALUE(ifs, atom->nwl); - atom->l_nchi.resize(atom->nwl+1, 0); + atom->l_nchi.resize(atom->nwl + 1, 0); } // assert(atom->nwl<10); // cannot understand why restrict the maximum value of atom->nwl - if (word == "Cutoff(a.u.)") // pengfei Li 16-2-29 + if (word == "Cutoff(a.u.)") // pengfei Li 16-2-29 { ModuleBase::GlobalFunc::READ_VALUE(ifs, atom->Rcut); } @@ -44,27 +45,27 @@ namespace elecstate { if (word == spectrum.substr(i, 1) + "orbital-->") { ModuleBase::GlobalFunc::READ_VALUE(ifs, atom->l_nchi[i]); - atom->nw += (2*i + 1) * atom->l_nchi[i]; + atom->nw += (2 * i + 1) * atom->l_nchi[i]; std::stringstream ss; ss << "L=" << i << ", number of zeta"; - ModuleBase::GlobalFunc::OUT(ofs_running,ss.str(),atom->l_nchi[i]); + ModuleBase::GlobalFunc::OUT(ofs_running, ss.str(), atom->l_nchi[i]); valid = true; break; } } if (!valid) { - ModuleBase::WARNING_QUIT("UnitCell::read_orb_file", + ModuleBase::WARNING_QUIT("UnitCell::read_orb_file", "ABACUS does not support numerical atomic orbital with L > 9, " "or an invalid orbital label is found in the ORBITAL file."); } } } ifs.close(); - if(!atom->nw) + if (!atom->nw) { - ModuleBase::WARNING_QUIT("UnitCell::read_orb_file","get nw = 0"); + ModuleBase::WARNING_QUIT("UnitCell::read_orb_file", "get nw = 0"); } } -} \ No newline at end of file +} // namespace elecstate \ No newline at end of file diff --git a/source/module_elecstate/read_pseudo.cpp b/source/module_elecstate/read_pseudo.cpp index d6b382ea6c..f668905a24 100644 --- a/source/module_elecstate/read_pseudo.cpp +++ b/source/module_elecstate/read_pseudo.cpp @@ -1,15 +1,18 @@ #include "read_pseudo.h" -#include "module_parameter/parameter.h" -#include "module_base/global_file.h" -#include "module_cell/read_pp.h" + #include "module_cell/bcast_cell.h" -#include "module_base/element_elec_config.h" -#include "module_base/parallel_common.h" +#include "module_cell/read_pp.h" +#include "module_parameter/parameter.h" +#include "source_base/element_elec_config.h" +#include "source_base/global_file.h" +#include "source_base/parallel_common.h" #include // Peize Lin fix bug about strcmp 2016-08-02 -namespace elecstate { -void read_pseudo(std::ofstream& ofs, UnitCell& ucell) { +namespace elecstate +{ +void read_pseudo(std::ofstream& ofs, UnitCell& ucell) +{ // read in non-local pseudopotential and ouput the projectors. ofs << "\n\n"; ofs << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" @@ -58,23 +61,28 @@ void read_pseudo(std::ofstream& ofs, UnitCell& ucell) { read_cell_pseudopots(PARAM.inp.pseudo_dir, ofs, ucell); - if (GlobalV::MY_RANK == 0) { - for (int it = 0; it < ucell.ntype; it++) { + if (GlobalV::MY_RANK == 0) + { + for (int it = 0; it < ucell.ntype; it++) + { Atom* atom = &ucell.atoms[it]; - if (!(atom->label_orb.empty())) { + if (!(atom->label_orb.empty())) + { ucell.compare_atom_labels(atom->label_orb, atom->ncpp.psd); } } - if (PARAM.inp.out_element_info) { - for (int i = 0; i < ucell.ntype; i++) { + if (PARAM.inp.out_element_info) + { + for (int i = 0; i < ucell.ntype; i++) + { ModuleBase::Global_File::make_dir_atom(ucell.atoms[i].label); } - for (int it = 0; it < ucell.ntype; it++) { + for (int it = 0; it < ucell.ntype; it++) + { Atom* atom = &ucell.atoms[it]; std::stringstream ss; - ss << PARAM.globalv.global_out_dir << atom->label << "/" - << atom->label << ".NONLOCAL"; + ss << PARAM.globalv.global_out_dir << atom->label << "/" << atom->label << ".NONLOCAL"; std::ofstream ofs(ss.str().c_str()); ofs << "
" << std::endl; @@ -89,16 +97,18 @@ void read_pseudo(std::ofstream& ofs, UnitCell& ucell) { ofs << "\n" << std::endl; ofs << std::setw(10) << atom->ncpp.nbeta << "\t" << "nummber of projectors." << std::endl; - for (int ib = 0; ib < atom->ncpp.nbeta; ib++) { - for (int ib2 = 0; ib2 < atom->ncpp.nbeta; ib2++) { - ofs << std::setw(10) << atom->ncpp.lll[ib] << " " - << atom->ncpp.lll[ib2] << " " + for (int ib = 0; ib < atom->ncpp.nbeta; ib++) + { + for (int ib2 = 0; ib2 < atom->ncpp.nbeta; ib2++) + { + ofs << std::setw(10) << atom->ncpp.lll[ib] << " " << atom->ncpp.lll[ib2] << " " << atom->ncpp.dion(ib, ib2) << std::endl; } } ofs << "" << std::endl; - for (int i = 0; i < atom->ncpp.nbeta; i++) { + for (int i = 0; i < atom->ncpp.nbeta; i++) + { ofs << "" << std::endl; ofs << std::setw(10) << i << "\t" << "the index of projectors." << std::endl; @@ -108,23 +118,26 @@ void read_pseudo(std::ofstream& ofs, UnitCell& ucell) { // mohan add // only keep the nonzero part. int cut_mesh = atom->ncpp.mesh; - for (int j = atom->ncpp.mesh - 1; j >= 0; --j) { - if (std::abs(atom->ncpp.betar(i, j)) > 1.0e-10) { + for (int j = atom->ncpp.mesh - 1; j >= 0; --j) + { + if (std::abs(atom->ncpp.betar(i, j)) > 1.0e-10) + { cut_mesh = j; break; } } - if (cut_mesh % 2 == 0) { + if (cut_mesh % 2 == 0) + { ++cut_mesh; } ofs << std::setw(10) << cut_mesh << "\t" << "the number of mesh points." << std::endl; - for (int j = 0; j < cut_mesh; ++j) { - ofs << std::setw(15) << atom->ncpp.r[j] << std::setw(15) - << atom->ncpp.betar(i, j) << std::setw(15) - << atom->ncpp.rab[j] << std::endl; + for (int j = 0; j < cut_mesh; ++j) + { + ofs << std::setw(15) << atom->ncpp.r[j] << std::setw(15) << atom->ncpp.betar(i, j) + << std::setw(15) << atom->ncpp.rab[j] << std::endl; } ofs << "" << std::endl; } @@ -135,43 +148,46 @@ void read_pseudo(std::ofstream& ofs, UnitCell& ucell) { } #ifdef __MPI - unitcell::bcast_atoms_pseudo(ucell.atoms,ucell.ntype); + unitcell::bcast_atoms_pseudo(ucell.atoms, ucell.ntype); #endif - for (int it = 0; it < ucell.ntype; it++) { - if (ucell.atoms[0].ncpp.xc_func != ucell.atoms[it].ncpp.xc_func) { - GlobalV::ofs_warning << "\n type " << ucell.atoms[0].label - << " functional is " << ucell.atoms[0].ncpp.xc_func; + for (int it = 0; it < ucell.ntype; it++) + { + if (ucell.atoms[0].ncpp.xc_func != ucell.atoms[it].ncpp.xc_func) + { + GlobalV::ofs_warning << "\n type " << ucell.atoms[0].label << " functional is " + << ucell.atoms[0].ncpp.xc_func; - GlobalV::ofs_warning << "\n type " << ucell.atoms[it].label - << " functional is " << ucell.atoms[it].ncpp.xc_func - << std::endl; + GlobalV::ofs_warning << "\n type " << ucell.atoms[it].label << " functional is " + << ucell.atoms[it].ncpp.xc_func << std::endl; - ModuleBase::WARNING_QUIT("setup_cell", - "All DFT functional must consistent."); + ModuleBase::WARNING_QUIT("setup_cell", "All DFT functional must consistent."); } } // setup the total number of PAOs - cal_natomwfc(ofs,ucell.natomwfc,ucell.ntype,ucell.atoms); + cal_natomwfc(ofs, ucell.natomwfc, ucell.ntype, ucell.atoms); // Calculate the information of atoms from the pseudopotential to set PARAM CalAtomsInfo ca; ca.cal_atoms_info(ucell.atoms, ucell.ntype, PARAM); // setup PARAM.globalv.nlocal - cal_nwfc(ofs,ucell,ucell.atoms); + cal_nwfc(ofs, ucell, ucell.atoms); // Check whether the number of valence is minimum - if (GlobalV::MY_RANK == 0) { + if (GlobalV::MY_RANK == 0) + { int abtype = 0; - for (int it = 0; it < ucell.ntype; it++) { - if (ModuleBase::MinZval.find(ucell.atoms[it].ncpp.psd) - != ModuleBase::MinZval.end()) { - if (ucell.atoms[it].ncpp.zv - > ModuleBase::MinZval.at(ucell.atoms[it].ncpp.psd)) { + for (int it = 0; it < ucell.ntype; it++) + { + if (ModuleBase::MinZval.find(ucell.atoms[it].ncpp.psd) != ModuleBase::MinZval.end()) + { + if (ucell.atoms[it].ncpp.zv > ModuleBase::MinZval.at(ucell.atoms[it].ncpp.psd)) + { abtype += 1; - if (abtype == 1) { + if (abtype == 1) + { std::cout << "\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" "%%%%%%%%%%%%%%%%%%%%%%%%%%" @@ -185,27 +201,25 @@ void read_pseudo(std::ofstream& ofs, UnitCell& ucell) { "pseudopotential > " << ModuleBase::MinZval.at(ucell.atoms[it].ncpp.psd); std::cout << " for " << ucell.atoms[it].ncpp.psd << ": " - << ModuleBase::EleConfig.at(ucell.atoms[it].ncpp.psd) - << std::endl; + << ModuleBase::EleConfig.at(ucell.atoms[it].ncpp.psd) << std::endl; ofs << " Warning: the number of valence electrons in " "pseudopotential > " << ModuleBase::MinZval.at(ucell.atoms[it].ncpp.psd); ofs << " for " << ucell.atoms[it].ncpp.psd << ": " - << ModuleBase::EleConfig.at(ucell.atoms[it].ncpp.psd) - << std::endl; + << ModuleBase::EleConfig.at(ucell.atoms[it].ncpp.psd) << std::endl; } } } - if (abtype > 0) { + if (abtype > 0) + { std::cout << " Pseudopotentials with additional electrons can " "yield (more) accurate outcomes, but may be " "less efficient." << std::endl; - std::cout - << " If you're confident that your chosen pseudopotential is " - "appropriate, you can safely ignore " - "this warning." - << std::endl; + std::cout << " If you're confident that your chosen pseudopotential is " + "appropriate, you can safely ignore " + "this warning." + << std::endl; std::cout << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" "%%%%%%%%%%%%\n" @@ -225,7 +239,7 @@ void read_pseudo(std::ofstream& ofs, UnitCell& ucell) { } } - cal_meshx(ucell.meshx,ucell.atoms,ucell.ntype); + cal_meshx(ucell.meshx, ucell.atoms, ucell.ntype); #ifdef __MPI Parallel_Common::bcast_int(ucell.meshx); @@ -259,7 +273,9 @@ void read_cell_pseudopots(const std::string& pp_dir, std::ofstream& log, UnitCel if (GlobalV::MY_RANK == 0) { pp_address = pp_dir + ucell.pseudo_fn[i]; - error = upf.init_pseudo_reader(pp_address, ucell.pseudo_type[i], ucell.atoms[i].ncpp); // xiaohui add 2013-06-23 + error = upf.init_pseudo_reader(pp_address, + ucell.pseudo_type[i], + ucell.atoms[i].ncpp); // xiaohui add 2013-06-23 if (error == 0) // mohan add 2021-04-16 { @@ -311,7 +327,7 @@ void read_cell_pseudopots(const std::string& pp_dir, std::ofstream& log, UnitCel if (GlobalV::MY_RANK == 0) { - upf.complete_default(ucell.atoms[i].ncpp); + upf.complete_default(ucell.atoms[i].ncpp); log << "\n Read in pseudopotential file is " << ucell.pseudo_fn[i] << std::endl; ModuleBase::GlobalFunc::OUT(log, "pseudopotential type", ucell.atoms[i].ncpp.pp_type); ModuleBase::GlobalFunc::OUT(log, "exchange-correlation functional", ucell.atoms[i].ncpp.xc_func); @@ -334,13 +350,12 @@ void read_cell_pseudopots(const std::string& pp_dir, std::ofstream& log, UnitCel { std::cout << " NAME OF ELEMENT : " << ucell.atoms[i].label << std::endl; std::cout << " DFT FUNC. (PSEUDO) : " << ucell.atoms[i].ncpp.xc_func << std::endl; - std::cout << " DFT FUNC. (SET TO) : " << xc_func1 << std::endl; + std::cout << " DFT FUNC. (SET TO) : " << xc_func1 << std::endl; std::cout << " MAKE SURE THIS DFT FUNCTIONAL IS WHAT YOU NEED" << std::endl; - GlobalV::ofs_warning << " NAME OF ELEMENT : " << ucell.atoms[i].label << std::endl; GlobalV::ofs_warning << " DFT FUNC. (PSEUDO) : " << ucell.atoms[i].ncpp.xc_func << std::endl; - GlobalV::ofs_warning << " DFT FUNC. (SET TO) : " << xc_func1 << std::endl; + GlobalV::ofs_warning << " DFT FUNC. (SET TO) : " << xc_func1 << std::endl; GlobalV::ofs_warning << " MAKE SURE THIS DFT FUNCTIONAL IS WHAT YOU NEED" << std::endl; ucell.atoms[i].ncpp.xc_func = xc_func1; @@ -354,7 +369,7 @@ void read_cell_pseudopots(const std::string& pp_dir, std::ofstream& log, UnitCel void print_unitcell_pseudo(const std::string& fn, UnitCell& ucell) { - if (PARAM.inp.test_pseudo_cell) + if (PARAM.inp.test_pseudo_cell) { ModuleBase::TITLE("UnitCell", "print_unitcell_pseudo"); } @@ -370,4 +385,4 @@ void print_unitcell_pseudo(const std::string& fn, UnitCell& ucell) return; } -} +} // namespace elecstate diff --git a/source/module_elecstate/test/CMakeLists.txt b/source/module_elecstate/test/CMakeLists.txt index 9a8ba6d88b..090bac0cd8 100644 --- a/source/module_elecstate/test/CMakeLists.txt +++ b/source/module_elecstate/test/CMakeLists.txt @@ -57,7 +57,7 @@ AddTest( ../occupy.cpp ../../module_psi/psi.cpp # ../../module_psi/kernels/psi_memory_op.cpp - ../../module_base/module_device/memory_op.cpp + ../../source_base/module_device/memory_op.cpp ) AddTest( diff --git a/source/module_elecstate/test/charge_mixing_test.cpp b/source/module_elecstate/test/charge_mixing_test.cpp index 2580730cf8..fe31e87d9d 100644 --- a/source/module_elecstate/test/charge_mixing_test.cpp +++ b/source/module_elecstate/test/charge_mixing_test.cpp @@ -2,10 +2,10 @@ #include "gtest/gtest.h" #define private public #include "../module_charge/charge_mixing.h" -#include "module_base/module_mixing/broyden_mixing.h" #include "module_basis/module_pw/pw_basis.h" #include "module_hamilt_general/module_xc/xc_functional.h" #include "module_parameter/parameter.h" +#include "source_base/module_mixing/broyden_mixing.h" #ifdef _OPENMP #include @@ -94,8 +94,8 @@ class ChargeMixingTest : public ::testing::Test PARAM.input.mixing_mode = "broyden"; PARAM.input.mixing_beta = 0.8; PARAM.input.mixing_ndim = 8; - PARAM.input.mixing_gg0 = 1.0; - PARAM.input.mixing_tau = false; + PARAM.input.mixing_gg0 = 1.0; + PARAM.input.mixing_tau = false; PARAM.input.mixing_beta_mag = 1.6; PARAM.input.mixing_gg0_mag = 0.0; PARAM.input.mixing_gg0_min = 0.1; @@ -106,7 +106,7 @@ class ChargeMixingTest : public ::testing::Test } ModulePW::PW_Basis pw_basis; ModulePW::PW_Basis_Sup pw_dbasis; - Charge charge; + Charge charge; }; TEST_F(ChargeMixingTest, SetMixingTest) @@ -122,17 +122,17 @@ TEST_F(ChargeMixingTest, SetMixingTest) PARAM.input.mixing_gg0 = 1.0; CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); EXPECT_EQ(CMtest.get_mixing_mode(), "broyden"); EXPECT_EQ(CMtest.get_mixing_beta(), 1.0); EXPECT_EQ(CMtest.get_mixing_ndim(), 1); @@ -147,17 +147,17 @@ TEST_F(ChargeMixingTest, SetMixingTest) PARAM.input.mixing_tau = true; PARAM.input.mixing_mode = "plain"; CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); EXPECT_EQ(CMtest.mixing_mode, "plain"); EXPECT_EQ(CMtest.mixing_tau, true); @@ -165,17 +165,18 @@ TEST_F(ChargeMixingTest, SetMixingTest) std::string output; testing::internal::CaptureStdout(); EXPECT_EXIT(CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba);, ::testing::ExitedWithCode(1), ""); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); + , ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("You'd better set mixing_beta to [0.0, 1.0]!")); @@ -184,17 +185,18 @@ TEST_F(ChargeMixingTest, SetMixingTest) PARAM.input.nspin = 2; testing::internal::CaptureStdout(); EXPECT_EXIT(CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba);, ::testing::ExitedWithCode(1), ""); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); + , ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("You'd better set mixing_beta_mag >= 0.0!")); @@ -204,17 +206,18 @@ TEST_F(ChargeMixingTest, SetMixingTest) PARAM.input.mixing_mode = "nothing"; testing::internal::CaptureStdout(); EXPECT_EXIT(CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba);, ::testing::ExitedWithCode(1), ""); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); + , ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("This Mixing mode is not implemended yet,coming soon.")); } @@ -231,23 +234,23 @@ TEST_F(ChargeMixingTest, InitMixingTest) CMtest.set_rhopw(&pw_basis, &pw_basis); CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); - - PARAM.input.scf_thr_type= 1; + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); + + PARAM.input.scf_thr_type = 1; CMtest.init_mixing(); EXPECT_EQ(CMtest.rho_mdata.length, pw_basis.npw); - - PARAM.input.scf_thr_type= 2; + + PARAM.input.scf_thr_type = 2; CMtest.init_mixing(); EXPECT_EQ(CMtest.rho_mdata.length, pw_basis.nrxx); @@ -258,17 +261,17 @@ TEST_F(ChargeMixingTest, InitMixingTest) PARAM.input.nspin = 1; PARAM.input.mixing_tau = true; CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); XC_Functional::func_type = 3; XC_Functional::ked_flag = true; CMtest.init_mixing(); @@ -277,17 +280,17 @@ TEST_F(ChargeMixingTest, InitMixingTest) PARAM.input.nspin = 4; PARAM.input.mixing_angle = 1.0; CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); CMtest.init_mixing(); EXPECT_EQ(CMtest.rho_mdata.length, 2 * pw_basis.nrxx); } @@ -297,17 +300,17 @@ TEST_F(ChargeMixingTest, InnerDotRealTest) Charge_Mixing CMtest; // non mixing angle case CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); CMtest.set_rhopw(&pw_basis, &pw_basis); PARAM.input.nspin = 4; @@ -320,22 +323,22 @@ TEST_F(ChargeMixingTest, InnerDotRealTest) drho2[i] = double(i); } double inner = CMtest.inner_product_real(drho1.data(), drho2.data()); - EXPECT_NEAR(inner, 0.5 * pw_basis.nrxx * PARAM.input.nspin * (pw_basis.nrxx * PARAM.input.nspin - 1), 1e-8); + EXPECT_NEAR(inner, 0.5 * pw_basis.nrxx * PARAM.input.nspin * (pw_basis.nrxx * PARAM.input.nspin - 1), 1e-8); // mixing angle case PARAM.input.mixing_angle = 1.0; CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); PARAM.input.nspin = 4; // a simple sum for inner product @@ -347,7 +350,7 @@ TEST_F(ChargeMixingTest, InnerDotRealTest) drho2[i] = double(i); } inner = CMtest.inner_product_real(drho1.data(), drho2.data()); - EXPECT_NEAR(inner, 0.5 * pw_basis.nrxx * 2 * (pw_basis.nrxx * 2 - 1), 1e-8); + EXPECT_NEAR(inner, 0.5 * pw_basis.nrxx * 2 * (pw_basis.nrxx * 2 - 1), 1e-8); } TEST_F(ChargeMixingTest, InnerDotRecipSimpleTest) @@ -355,17 +358,17 @@ TEST_F(ChargeMixingTest, InnerDotRecipSimpleTest) Charge_Mixing CMtest; // non mixing angle case CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); CMtest.set_rhopw(&pw_basis, &pw_basis); PARAM.input.nspin = 2; @@ -403,17 +406,17 @@ TEST_F(ChargeMixingTest, InnerDotRecipHartreeTest) ucell.tpiba2 = 1.0; ucell.omega = 2.0; CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); PARAM.input.nspin = 1; std::vector> drhog1(pw_basis.npw); std::vector> drhog2(pw_basis.npw); @@ -442,15 +445,15 @@ TEST_F(ChargeMixingTest, InnerDotRecipHartreeTest) // set mag for (int i = 0; i < pw_basis.npw; ++i) { - drhog1_mag[i] = drhog1[i] + drhog1[i+pw_basis.npw]; - drhog1_mag[i+pw_basis.npw] = drhog1[i] - drhog1[i+pw_basis.npw]; - drhog2_mag[i] = drhog2[i] + drhog2[i+pw_basis.npw]; - drhog2_mag[i+pw_basis.npw] = drhog2[i] - drhog2[i+pw_basis.npw]; + drhog1_mag[i] = drhog1[i] + drhog1[i + pw_basis.npw]; + drhog1_mag[i + pw_basis.npw] = drhog1[i] - drhog1[i + pw_basis.npw]; + drhog2_mag[i] = drhog2[i] + drhog2[i + pw_basis.npw]; + drhog2_mag[i + pw_basis.npw] = drhog2[i] - drhog2[i + pw_basis.npw]; } - PARAM.sys.gamma_only_pw= false; + PARAM.sys.gamma_only_pw = false; inner = CMtest.inner_product_recip_hartree(drhog1_mag.data(), drhog2_mag.data()); EXPECT_NEAR(inner, 236763.82650318215, 1e-8); - PARAM.sys.gamma_only_pw= true; + PARAM.sys.gamma_only_pw = true; inner = CMtest.inner_product_recip_hartree(drhog1_mag.data(), drhog2_mag.data()); EXPECT_NEAR(inner, 236763.82650318215 * 2, 1e-8); @@ -468,7 +471,7 @@ TEST_F(ChargeMixingTest, InnerDotRecipHartreeTest) PARAM.sys.domag_z = false; inner = CMtest.inner_product_recip_hartree(drhog1.data(), drhog2.data()); EXPECT_NEAR(inner, 28260.091995611871, 1e-8); - PARAM.sys.gamma_only_pw= true; + PARAM.sys.gamma_only_pw = true; PARAM.sys.domag = true; PARAM.sys.domag_z = true; inner = CMtest.inner_product_recip_hartree(drhog1.data(), drhog2.data()); @@ -478,17 +481,17 @@ TEST_F(ChargeMixingTest, InnerDotRecipHartreeTest) PARAM.input.nspin = 4; PARAM.input.mixing_angle = 1.0; CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); drhog1.resize(pw_basis.npw * 2); drhog2.resize(pw_basis.npw * 2); for (int i = 0; i < pw_basis.npw * 2; ++i) @@ -496,10 +499,10 @@ TEST_F(ChargeMixingTest, InnerDotRecipHartreeTest) drhog1[i] = std::complex(1.0, double(i)); drhog2[i] = std::complex(1.0, 1.0); } - PARAM.sys.gamma_only_pw= false; + PARAM.sys.gamma_only_pw = false; inner = CMtest.inner_product_recip_hartree(drhog1.data(), drhog2.data()); EXPECT_NEAR(inner, 36548.881431837777, 1e-8); - PARAM.sys.gamma_only_pw= true; + PARAM.sys.gamma_only_pw = true; inner = CMtest.inner_product_recip_hartree(drhog1.data(), drhog2.data()); EXPECT_NEAR(inner, 44776.555369916401, 1e-8); } @@ -524,17 +527,17 @@ TEST_F(ChargeMixingTest, InnerDotRecipRhoTest) ucell.tpiba2 = 1.0; ucell.omega = 2.0; CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); PARAM.input.nspin = 1; std::vector> drhog1(pw_basis.npw); std::vector> drhog2(pw_basis.npw); @@ -557,10 +560,10 @@ TEST_F(ChargeMixingTest, InnerDotRecipRhoTest) drhog1[i] = std::complex(1.0, double(i)); drhog2[i] = std::complex(1.0, 1.0); } - PARAM.sys.gamma_only_pw= false; + PARAM.sys.gamma_only_pw = false; inner = CMtest.inner_product_recip_rho(drhog1.data(), drhog2.data()); EXPECT_NEAR(inner, 236763.82650318215, 1e-8); - PARAM.sys.gamma_only_pw= true; + PARAM.sys.gamma_only_pw = true; inner = CMtest.inner_product_recip_rho(drhog1.data(), drhog2.data()); EXPECT_NEAR(inner, 236763.82650318215 * 2, 1e-8); @@ -577,7 +580,7 @@ TEST_F(ChargeMixingTest, InnerDotRecipRhoTest) PARAM.sys.domag_z = false; inner = CMtest.inner_product_recip_rho(drhog1.data(), drhog2.data()); EXPECT_NEAR(inner, 28260.091995611871, 1e-8); - PARAM.sys.gamma_only_pw= true; + PARAM.sys.gamma_only_pw = true; PARAM.sys.domag = true; PARAM.sys.domag_z = true; inner = CMtest.inner_product_recip_rho(drhog1.data(), drhog2.data()); @@ -590,29 +593,29 @@ TEST_F(ChargeMixingTest, KerkerScreenRecipTest) CMtest.set_rhopw(&pw_basis, &pw_basis); ucell.tpiba = 1.0; CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); // nspin = 1 PARAM.input.nspin = 1; - std::complex* drhog = new std::complex[PARAM.input.nspin*pw_basis.npw]; - std::complex* drhog_old = new std::complex[PARAM.input.nspin*pw_basis.npw]; - for (int i = 0; i < PARAM.input.nspin*pw_basis.npw; ++i) + std::complex* drhog = new std::complex[PARAM.input.nspin * pw_basis.npw]; + std::complex* drhog_old = new std::complex[PARAM.input.nspin * pw_basis.npw]; + for (int i = 0; i < PARAM.input.nspin * pw_basis.npw; ++i) { drhog_old[i] = drhog[i] = std::complex(1.0, 1.0); } // no kerker CMtest.mixing_gg0 = 0.0; CMtest.Kerker_screen_recip(drhog); - for (int i = 0; i < PARAM.input.nspin*pw_basis.npw; ++i) + for (int i = 0; i < PARAM.input.nspin * pw_basis.npw; ++i) { EXPECT_EQ(drhog[i], drhog_old[i]); } @@ -634,16 +637,16 @@ TEST_F(ChargeMixingTest, KerkerScreenRecipTest) PARAM.input.nspin = 2; CMtest.mixing_beta = 0.4; CMtest.mixing_beta_mag = 1.6; - drhog = new std::complex[PARAM.input.nspin*pw_basis.npw]; - drhog_old = new std::complex[PARAM.input.nspin*pw_basis.npw]; - for (int i = 0; i < PARAM.input.nspin*pw_basis.npw; ++i) + drhog = new std::complex[PARAM.input.nspin * pw_basis.npw]; + drhog_old = new std::complex[PARAM.input.nspin * pw_basis.npw]; + for (int i = 0; i < PARAM.input.nspin * pw_basis.npw; ++i) { drhog_old[i] = drhog[i] = std::complex(1.0, 1.0); } // mixing_gg0 = 0.0 CMtest.mixing_gg0 = 0.0; CMtest.Kerker_screen_recip(drhog); - for (int i = 0; i < PARAM.input.nspin*pw_basis.npw; ++i) + for (int i = 0; i < PARAM.input.nspin * pw_basis.npw; ++i) { EXPECT_EQ(drhog[i], drhog_old[i]); } @@ -659,24 +662,24 @@ TEST_F(ChargeMixingTest, KerkerScreenRecipTest) EXPECT_NEAR(drhog[i].real(), ref, 1e-10); EXPECT_NEAR(drhog[i].imag(), ref, 1e-10); // mag - EXPECT_NEAR(drhog[i+pw_basis.npw].real(), 1.0, 1e-10); - EXPECT_NEAR(drhog[i+pw_basis.npw].imag(), 1.0, 1e-10); + EXPECT_NEAR(drhog[i + pw_basis.npw].real(), 1.0, 1e-10); + EXPECT_NEAR(drhog[i + pw_basis.npw].imag(), 1.0, 1e-10); } delete[] drhog; delete[] drhog_old; // nspin = 4 PARAM.input.nspin = 4; - drhog = new std::complex[PARAM.input.nspin*pw_basis.npw]; - drhog_old = new std::complex[PARAM.input.nspin*pw_basis.npw]; - for (int i = 0; i < PARAM.input.nspin*pw_basis.npw; ++i) + drhog = new std::complex[PARAM.input.nspin * pw_basis.npw]; + drhog_old = new std::complex[PARAM.input.nspin * pw_basis.npw]; + for (int i = 0; i < PARAM.input.nspin * pw_basis.npw; ++i) { drhog_old[i] = drhog[i] = std::complex(1.0, 1.0); } // mixing_gg0 = 0.0 CMtest.mixing_gg0 = 0.0; CMtest.Kerker_screen_recip(drhog); - for (int i = 0; i < PARAM.input.nspin*pw_basis.npw; ++i) + for (int i = 0; i < PARAM.input.nspin * pw_basis.npw; ++i) { EXPECT_EQ(drhog[i], drhog_old[i]); } @@ -692,7 +695,7 @@ TEST_F(ChargeMixingTest, KerkerScreenRecipTest) EXPECT_NEAR(drhog[i].real(), ref, 1e-10); EXPECT_NEAR(drhog[i].imag(), ref, 1e-10); } - for (int i = 0; i < 3*pw_basis.npw; ++i) + for (int i = 0; i < 3 * pw_basis.npw; ++i) { EXPECT_NEAR(drhog[i + pw_basis.npw].real(), 1.0, 1e-10); EXPECT_NEAR(drhog[i + pw_basis.npw].imag(), 1.0, 1e-10); @@ -732,29 +735,29 @@ TEST_F(ChargeMixingTest, KerkerScreenRealTest) CMtest.set_rhopw(&pw_basis, &pw_basis); ucell.tpiba = 1.0; CMtest.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); // nspin = 1 PARAM.input.nspin = 1; - double* drhor = new double[PARAM.input.nspin*pw_basis.nrxx]; - double* drhor_ref = new double[PARAM.input.nspin*pw_basis.nrxx]; - for (int i = 0; i < PARAM.input.nspin*pw_basis.nrxx; ++i) + double* drhor = new double[PARAM.input.nspin * pw_basis.nrxx]; + double* drhor_ref = new double[PARAM.input.nspin * pw_basis.nrxx]; + for (int i = 0; i < PARAM.input.nspin * pw_basis.nrxx; ++i) { drhor_ref[i] = drhor[i] = 1.0; } // no kerker CMtest.mixing_gg0 = 0.0; CMtest.Kerker_screen_real(drhor); - for (int i = 0; i < PARAM.input.nspin*pw_basis.nrxx; ++i) + for (int i = 0; i < PARAM.input.nspin * pw_basis.nrxx; ++i) { EXPECT_EQ(drhor[i], drhor_ref[i]); } @@ -764,16 +767,16 @@ TEST_F(ChargeMixingTest, KerkerScreenRealTest) // nspin = 2 PARAM.input.nspin = 2; CMtest.mixing_gg0 = 0.0; - std::complex* drhog = new std::complex[PARAM.input.nspin*pw_basis.npw]; - std::complex* drhog_old = new std::complex[PARAM.input.nspin*pw_basis.npw]; - drhor = new double[PARAM.input.nspin*pw_basis.nrxx]; - drhor_ref = new double[PARAM.input.nspin*pw_basis.nrxx]; - for (int i = 0; i < PARAM.input.nspin*pw_basis.npw; ++i) + std::complex* drhog = new std::complex[PARAM.input.nspin * pw_basis.npw]; + std::complex* drhog_old = new std::complex[PARAM.input.nspin * pw_basis.npw]; + drhor = new double[PARAM.input.nspin * pw_basis.nrxx]; + drhor_ref = new double[PARAM.input.nspin * pw_basis.nrxx]; + for (int i = 0; i < PARAM.input.nspin * pw_basis.npw; ++i) { drhog_old[i] = drhog[i] = std::complex(1.0, 1.0); } CMtest.Kerker_screen_recip(drhog); // no kerker - for (int i = 0; i < PARAM.input.nspin*pw_basis.npw; ++i) + for (int i = 0; i < PARAM.input.nspin * pw_basis.npw; ++i) { EXPECT_EQ(drhog[i], drhog_old[i]); } @@ -785,7 +788,7 @@ TEST_F(ChargeMixingTest, KerkerScreenRealTest) const double gg0 = std::pow(0.529177, 2); for (int i = 0; i < pw_basis.npw; ++i) { - std::complex ration = drhog[i] / drhog[i+pw_basis.npw]; + std::complex ration = drhog[i] / drhog[i + pw_basis.npw]; double gg = this->pw_basis.gg[i]; double ration_ref = std::max(gg / (gg + gg0), 0.1 / CMtest.mixing_beta); EXPECT_NEAR(ration.real(), ration_ref, 1e-10); @@ -812,12 +815,11 @@ TEST_F(ChargeMixingTest, KerkerScreenRealTest) delete[] drhog_old; delete[] drhor; delete[] drhor_ref; - } TEST_F(ChargeMixingTest, MixRhoTest) { - PARAM.sys.double_grid = false; + PARAM.sys.double_grid = false; charge.set_rhopw(&pw_basis); const int nspin = PARAM.input.nspin = 1; PARAM.sys.domag_z = false; @@ -855,12 +857,12 @@ TEST_F(ChargeMixingTest, MixRhoTest) std::vector real_save_ref(nspin * nrxx); std::vector> recip_ref(nspin * npw); std::vector> recip_save_ref(nspin * npw); - for(int i = 0 ; i < nspin * npw; ++i) + for (int i = 0; i < nspin * npw; ++i) { - recip_ref[i] = std::complex(double(i), 1.0); - recip_save_ref[i] = std::complex(double(i), 0.0); + recip_ref[i] = std::complex(double(i), 1.0); + recip_save_ref[i] = std::complex(double(i), 0.0); } - for(int i = 0 ; i < nspin ; ++i) + for (int i = 0; i < nspin; ++i) { pw_basis.recip2real(recip_ref.data() + i * npw, real_ref.data() + i * nrxx); pw_basis.recip2real(recip_save_ref.data() + i * npw, real_save_ref.data() + i * nrxx); @@ -869,7 +871,7 @@ TEST_F(ChargeMixingTest, MixRhoTest) // RECIPROCAL Charge_Mixing CMtest_recip; CMtest_recip.set_rhopw(&pw_basis, &pw_basis); - PARAM.input.scf_thr_type= 1; + PARAM.input.scf_thr_type = 1; CMtest_recip.set_mixing(PARAM.input.mixing_mode, PARAM.input.mixing_beta, PARAM.input.mixing_ndim, @@ -880,62 +882,62 @@ TEST_F(ChargeMixingTest, MixRhoTest) PARAM.input.mixing_gg0_min, PARAM.input.mixing_angle, PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + ucell.omega, + ucell.tpiba); CMtest_recip.init_mixing(); - for(int i = 0 ; i < nspin * npw; ++i) + for (int i = 0; i < nspin * npw; ++i) { charge._space_rhog[i] = recip_ref[i]; charge._space_rhog_save[i] = recip_save_ref[i]; } - for(int i = 0 ; i < nspin * nrxx; ++i) + for (int i = 0; i < nspin * nrxx; ++i) { charge._space_rho[i] = real_ref[i]; charge._space_rho_save[i] = real_save_ref[i]; } CMtest_recip.mix_rho(&charge); - for(int is = 0 ; is < nspin; ++is) + for (int is = 0; is < nspin; ++is) { - for(int ir = 0 ; ir < nrxx ; ++ir) + for (int ir = 0; ir < nrxx; ++ir) { - EXPECT_NEAR(charge.rho_save[is][ir], real_ref[is*nrxx + ir], 1e-8); + EXPECT_NEAR(charge.rho_save[is][ir], real_ref[is * nrxx + ir], 1e-8); } - for(int ig = 0; ig < npw ; ++ig) + for (int ig = 0; ig < npw; ++ig) { - EXPECT_NEAR(charge.rhog[is][ig].real(), recip_save_ref[is*npw + ig].real(), 1e-8); - EXPECT_NEAR(charge.rhog[is][ig].imag(), recip_save_ref[is*npw + ig].imag() + 0.7, 1e-8); + EXPECT_NEAR(charge.rhog[is][ig].real(), recip_save_ref[is * npw + ig].real(), 1e-8); + EXPECT_NEAR(charge.rhog[is][ig].imag(), recip_save_ref[is * npw + ig].imag() + 0.7, 1e-8); } } // REAL Charge_Mixing CMtest_real; - PARAM.input.scf_thr_type= 2; + PARAM.input.scf_thr_type = 2; CMtest_real.set_rhopw(&pw_basis, &pw_basis); CMtest_real.set_mixing(PARAM.input.mixing_mode, - PARAM.input.mixing_beta, - PARAM.input.mixing_ndim, - PARAM.input.mixing_gg0, - PARAM.input.mixing_tau, - PARAM.input.mixing_beta_mag, - PARAM.input.mixing_gg0_mag, - PARAM.input.mixing_gg0_min, - PARAM.input.mixing_angle, - PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + PARAM.input.mixing_beta, + PARAM.input.mixing_ndim, + PARAM.input.mixing_gg0, + PARAM.input.mixing_tau, + PARAM.input.mixing_beta_mag, + PARAM.input.mixing_gg0_mag, + PARAM.input.mixing_gg0_min, + PARAM.input.mixing_angle, + PARAM.input.mixing_dmr, + ucell.omega, + ucell.tpiba); CMtest_real.init_mixing(); - for(int i = 0 ; i < nspin * nrxx; ++i) + for (int i = 0; i < nspin * nrxx; ++i) { charge._space_rho[i] = real_ref[i]; charge._space_rho_save[i] = real_save_ref[i]; } CMtest_recip.mix_rho(&charge); - for(int is = 0 ; is < nspin; ++is) + for (int is = 0; is < nspin; ++is) { - for(int ir = 0 ; ir < nrxx ; ++ir) + for (int ir = 0; ir < nrxx; ++ir) { - EXPECT_NEAR(charge.rho_save[is][ir], real_ref[is*nrxx + ir], 1e-8); - EXPECT_NEAR(charge.rho[is][ir], 0.3*real_save_ref[is*nrxx+ir] + 0.7*real_ref[is*nrxx+ir], 1e-8); + EXPECT_NEAR(charge.rho_save[is][ir], real_ref[is * nrxx + ir], 1e-8); + EXPECT_NEAR(charge.rho[is][ir], 0.3 * real_save_ref[is * nrxx + ir] + 0.7 * real_ref[is * nrxx + ir], 1e-8); } } @@ -956,7 +958,7 @@ TEST_F(ChargeMixingTest, MixRhoTest) TEST_F(ChargeMixingTest, MixDoubleGridRhoTest) { - PARAM.sys.double_grid = true; + PARAM.sys.double_grid = true; charge.set_rhopw(&pw_dbasis); const int nspin = PARAM.input.nspin = 1; PARAM.sys.domag_z = false; @@ -1009,7 +1011,7 @@ TEST_F(ChargeMixingTest, MixDoubleGridRhoTest) Charge_Mixing CMtest_recip; CMtest_recip.set_rhopw(&pw_basis, &pw_dbasis); - PARAM.input.scf_thr_type= 1; + PARAM.input.scf_thr_type = 1; CMtest_recip.set_mixing(PARAM.input.mixing_mode, PARAM.input.mixing_beta, PARAM.input.mixing_ndim, @@ -1020,8 +1022,8 @@ TEST_F(ChargeMixingTest, MixDoubleGridRhoTest) PARAM.input.mixing_gg0_min, PARAM.input.mixing_angle, PARAM.input.mixing_dmr, - ucell.omega, - ucell.tpiba); + ucell.omega, + ucell.tpiba); CMtest_recip.init_mixing(); for (int i = 0; i < nspin * npw; ++i) @@ -1112,31 +1114,15 @@ TEST_F(ChargeMixingTest, SCFOscillationTest) bool scf_oscillate = false; std::vector drho(scf_nmax, 0.0); std::vector scf_oscillate_ref(scf_nmax, false); - drho = {6.83639633652e-05, - 4.93523029235e-05, - 3.59230097735e-05, - 2.68356403913e-05, - 2.17490806464e-05, - 2.14231642508e-05, - 1.67507494811e-05, - 1.53575889539e-05, - 1.26504511554e-05, - 1.04762016224e-05, - 8.10000162918e-06, - 7.66427917682e-06, - 6.70112820094e-06, - 5.68594436664e-06, - 4.80120233733e-06, - 4.86519757184e-06, - 4.37855804356e-06, - 4.29922703412e-06, - 4.36398486331e-06, - 4.94224615955e-06}; - scf_oscillate_ref = {false,false,false,false,false,true,false,false,false,false, - false,false,true,false,false,true,true,true,true,true}; + drho = {6.83639633652e-05, 4.93523029235e-05, 3.59230097735e-05, 2.68356403913e-05, 2.17490806464e-05, + 2.14231642508e-05, 1.67507494811e-05, 1.53575889539e-05, 1.26504511554e-05, 1.04762016224e-05, + 8.10000162918e-06, 7.66427917682e-06, 6.70112820094e-06, 5.68594436664e-06, 4.80120233733e-06, + 4.86519757184e-06, 4.37855804356e-06, 4.29922703412e-06, 4.36398486331e-06, 4.94224615955e-06}; + scf_oscillate_ref = {false, false, false, false, false, true, false, false, false, false, + false, false, true, false, false, true, true, true, true, true}; for (int i = 1; i <= scf_nmax; ++i) { - scf_oscillate = CMtest.if_scf_oscillate(i,drho[i-1],scf_os_ndim,scf_os_thr); - EXPECT_EQ(scf_oscillate, scf_oscillate_ref[i-1]); - } + scf_oscillate = CMtest.if_scf_oscillate(i, drho[i - 1], scf_os_ndim, scf_os_thr); + EXPECT_EQ(scf_oscillate, scf_oscillate_ref[i - 1]); + } } diff --git a/source/module_elecstate/test/prepare_unitcell.h b/source/module_elecstate/test/prepare_unitcell.h index 37f761c7eb..576d6d7047 100644 --- a/source/module_elecstate/test/prepare_unitcell.h +++ b/source/module_elecstate/test/prepare_unitcell.h @@ -1,278 +1,267 @@ #ifndef PREPARE_UNITCELL_H #define PREPARE_UNITCELL_H -#include -#include -#include "module_base/mathzone.h" +#include "source_base/mathzone.h" + +#include +#include class UcellTestPrepare { -public: - UcellTestPrepare()=default; - UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in, - std::valarray mbl_in, - std::valarray velocity_in); - UcellTestPrepare(const UcellTestPrepare &utp); + public: + UcellTestPrepare() = default; + UcellTestPrepare(std::string latname_in, + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in, + std::valarray mbl_in, + std::valarray velocity_in); + UcellTestPrepare(const UcellTestPrepare& utp); - std::string latname; - int lmaxmax; - bool init_vel; - bool selective_dynamics; - bool relax_new; - std::string fixed_axes; - double lat0; - std::valarray latvec; - std::vector elements; - std::vector pp_files; - std::vector pp_types; - std::vector orb_files; - std::valarray natom; - std::vector atomic_mass; - std::string coor_type; - std::valarray coordinates; - std::valarray mbl; - std::valarray velocity; - // ntype - int ntype; - int atomic_index; + std::string latname; + int lmaxmax; + bool init_vel; + bool selective_dynamics; + bool relax_new; + std::string fixed_axes; + double lat0; + std::valarray latvec; + std::vector elements; + std::vector pp_files; + std::vector pp_types; + std::vector orb_files; + std::valarray natom; + std::vector atomic_mass; + std::string coor_type; + std::valarray coordinates; + std::valarray mbl; + std::valarray velocity; + // ntype + int ntype; + int atomic_index; std::unique_ptr SetUcellInfo() { - //basic info - this->ntype = this->elements.size(); + // basic info + this->ntype = this->elements.size(); std::unique_ptr ucell(new UnitCell); - ucell->setup(this->latname, - this->ntype, - this->lmaxmax, - this->init_vel, - this->fixed_axes); - delete[] ucell->magnet.start_mag; //mag set here - - ucell->atom_label.resize(ucell->ntype); - ucell->atom_mass.resize(ucell->ntype); - ucell->pseudo_fn.resize(ucell->ntype); - ucell->pseudo_type.resize(ucell->ntype); - ucell->orbital_fn.resize(ucell->ntype); - ucell->magnet.start_mag = new double[ucell->ntype]; //mag set here - ucell->magnet.ux_[0] = 0.0; // ux_ set here - ucell->magnet.ux_[1] = 0.0; - ucell->magnet.ux_[2] = 0.0; - for(int it=0;itntype;++it) - { - ucell->atom_label[it] = this->elements[it]; - ucell->atom_mass[it] = this->atomic_mass[it]; - ucell->pseudo_fn[it] = this->pp_files[it]; - ucell->pseudo_type[it] = this->pp_types[it]; - ucell->orbital_fn[it] = this->orb_files[it]; - ucell->magnet.start_mag[it] = 0.0; //mag set here - } - //lattice info - ucell->lat0 = this->lat0; - ucell->lat0_angstrom = ucell->lat0 * 0.529177; - ucell->tpiba = ModuleBase::TWO_PI/ucell->lat0; - ucell->tpiba2 = ucell->tpiba * ucell->tpiba; - ucell->latvec.e11 = this->latvec[0]; - ucell->latvec.e12 = this->latvec[1]; - ucell->latvec.e13 = this->latvec[2]; - ucell->latvec.e21 = this->latvec[3]; - ucell->latvec.e22 = this->latvec[4]; - ucell->latvec.e23 = this->latvec[5]; - ucell->latvec.e31 = this->latvec[6]; - ucell->latvec.e32 = this->latvec[7]; - ucell->latvec.e33 = this->latvec[8]; - ucell->a1.x = ucell->latvec.e11; - ucell->a1.y = ucell->latvec.e12; - ucell->a1.z = ucell->latvec.e13; - ucell->a2.x = ucell->latvec.e21; - ucell->a2.y = ucell->latvec.e22; - ucell->a2.z = ucell->latvec.e23; - ucell->a3.x = ucell->latvec.e31; - ucell->a3.y = ucell->latvec.e32; - ucell->a3.z = ucell->latvec.e33; - ucell->GT = ucell->latvec.Inverse(); - ucell->G = ucell->GT.Transpose(); - ucell->GGT = ucell->G*ucell->GT; - ucell->invGGT = ucell->GGT.Inverse(); - ucell->omega = std::abs(ucell->latvec.Det())*(ucell->lat0)*(ucell->lat0)*(ucell->lat0); - //atomic info - ucell->Coordinate = this->coor_type; - ucell->atoms = new Atom[ucell->ntype]; - ucell->set_atom_flag = true; - this->atomic_index = 0; - for(int it=0;itntype;++it) - { - ucell->atoms[it].label = this->elements[it]; - ucell->atoms[it].nw = 0; - ucell->atoms[it].nwl = 2; - ucell->atoms[it].l_nchi.resize(ucell->atoms[it].nwl+1); - for(int L=0; Latoms[it].nwl+1; L++) - { - ucell->atoms[it].l_nchi[L] = 1; - ucell->atoms[it].nw += (2*L + 1) * ucell->atoms[it].l_nchi[L]; - } - ucell->atoms[it].na = this->natom[it]; - //coordinates and related physical quantities - ucell->atoms[it].tau.resize(ucell->atoms[it].na); - ucell->atoms[it].dis.resize(ucell->atoms[it].na); - ucell->atoms[it].taud.resize(ucell->atoms[it].na); - ucell->atoms[it].vel.resize(ucell->atoms[it].na); - ucell->atoms[it].mag.resize(ucell->atoms[it].na); - ucell->atoms[it].angle1.resize(ucell->atoms[it].na); - ucell->atoms[it].angle2.resize(ucell->atoms[it].na); - ucell->atoms[it].m_loc_.resize(ucell->atoms[it].na); - ucell->atoms[it].mbl.resize(ucell->atoms[it].na); - ucell->atoms[it].mass = ucell->atom_mass[it]; // mass set here - for(int ia=0; iaatoms[it].na; ++ia) - { - if (ucell->Coordinate == "Direct") - { - ucell->atoms[it].taud[ia].x = this->coordinates[this->atomic_index*3+0]; - ucell->atoms[it].taud[ia].y = this->coordinates[this->atomic_index*3+1]; - ucell->atoms[it].taud[ia].z = this->coordinates[this->atomic_index*3+2]; - ucell->atoms[it].tau[ia] = ucell->atoms[it].taud[ia]*ucell->latvec; - } - else if (ucell->Coordinate == "Cartesian") - { - ucell->atoms[it].tau[ia].x = this->coordinates[this->atomic_index*3+0]; - ucell->atoms[it].tau[ia].y = this->coordinates[this->atomic_index*3+1]; - ucell->atoms[it].tau[ia].z = this->coordinates[this->atomic_index*3+2]; - ModuleBase::Mathzone::Cartesian_to_Direct( - ucell->atoms[it].tau[ia].x, ucell->atoms[it].tau[ia].y, ucell->atoms[it].tau[ia].z, - ucell->latvec.e11, ucell->latvec.e12, ucell->latvec.e13, - ucell->latvec.e21, ucell->latvec.e22, ucell->latvec.e23, - ucell->latvec.e31, ucell->latvec.e32, ucell->latvec.e33, - ucell->atoms[it].taud[ia].x, ucell->atoms[it].taud[ia].y, ucell->atoms[it].taud[ia].z); - } + ucell->setup(this->latname, this->ntype, this->lmaxmax, this->init_vel, this->fixed_axes); + delete[] ucell->magnet.start_mag; // mag set here + + ucell->atom_label.resize(ucell->ntype); + ucell->atom_mass.resize(ucell->ntype); + ucell->pseudo_fn.resize(ucell->ntype); + ucell->pseudo_type.resize(ucell->ntype); + ucell->orbital_fn.resize(ucell->ntype); + ucell->magnet.start_mag = new double[ucell->ntype]; // mag set here + ucell->magnet.ux_[0] = 0.0; // ux_ set here + ucell->magnet.ux_[1] = 0.0; + ucell->magnet.ux_[2] = 0.0; + for (int it = 0; it < ucell->ntype; ++it) + { + ucell->atom_label[it] = this->elements[it]; + ucell->atom_mass[it] = this->atomic_mass[it]; + ucell->pseudo_fn[it] = this->pp_files[it]; + ucell->pseudo_type[it] = this->pp_types[it]; + ucell->orbital_fn[it] = this->orb_files[it]; + ucell->magnet.start_mag[it] = 0.0; // mag set here + } + // lattice info + ucell->lat0 = this->lat0; + ucell->lat0_angstrom = ucell->lat0 * 0.529177; + ucell->tpiba = ModuleBase::TWO_PI / ucell->lat0; + ucell->tpiba2 = ucell->tpiba * ucell->tpiba; + ucell->latvec.e11 = this->latvec[0]; + ucell->latvec.e12 = this->latvec[1]; + ucell->latvec.e13 = this->latvec[2]; + ucell->latvec.e21 = this->latvec[3]; + ucell->latvec.e22 = this->latvec[4]; + ucell->latvec.e23 = this->latvec[5]; + ucell->latvec.e31 = this->latvec[6]; + ucell->latvec.e32 = this->latvec[7]; + ucell->latvec.e33 = this->latvec[8]; + ucell->a1.x = ucell->latvec.e11; + ucell->a1.y = ucell->latvec.e12; + ucell->a1.z = ucell->latvec.e13; + ucell->a2.x = ucell->latvec.e21; + ucell->a2.y = ucell->latvec.e22; + ucell->a2.z = ucell->latvec.e23; + ucell->a3.x = ucell->latvec.e31; + ucell->a3.y = ucell->latvec.e32; + ucell->a3.z = ucell->latvec.e33; + ucell->GT = ucell->latvec.Inverse(); + ucell->G = ucell->GT.Transpose(); + ucell->GGT = ucell->G * ucell->GT; + ucell->invGGT = ucell->GGT.Inverse(); + ucell->omega = std::abs(ucell->latvec.Det()) * (ucell->lat0) * (ucell->lat0) * (ucell->lat0); + // atomic info + ucell->Coordinate = this->coor_type; + ucell->atoms = new Atom[ucell->ntype]; + ucell->set_atom_flag = true; + this->atomic_index = 0; + for (int it = 0; it < ucell->ntype; ++it) + { + ucell->atoms[it].label = this->elements[it]; + ucell->atoms[it].nw = 0; + ucell->atoms[it].nwl = 2; + ucell->atoms[it].l_nchi.resize(ucell->atoms[it].nwl + 1); + for (int L = 0; L < ucell->atoms[it].nwl + 1; L++) + { + ucell->atoms[it].l_nchi[L] = 1; + ucell->atoms[it].nw += (2 * L + 1) * ucell->atoms[it].l_nchi[L]; + } + ucell->atoms[it].na = this->natom[it]; + // coordinates and related physical quantities + ucell->atoms[it].tau.resize(ucell->atoms[it].na); + ucell->atoms[it].dis.resize(ucell->atoms[it].na); + ucell->atoms[it].taud.resize(ucell->atoms[it].na); + ucell->atoms[it].vel.resize(ucell->atoms[it].na); + ucell->atoms[it].mag.resize(ucell->atoms[it].na); + ucell->atoms[it].angle1.resize(ucell->atoms[it].na); + ucell->atoms[it].angle2.resize(ucell->atoms[it].na); + ucell->atoms[it].m_loc_.resize(ucell->atoms[it].na); + ucell->atoms[it].mbl.resize(ucell->atoms[it].na); + ucell->atoms[it].mass = ucell->atom_mass[it]; // mass set here + for (int ia = 0; ia < ucell->atoms[it].na; ++ia) + { + if (ucell->Coordinate == "Direct") + { + ucell->atoms[it].taud[ia].x = this->coordinates[this->atomic_index * 3 + 0]; + ucell->atoms[it].taud[ia].y = this->coordinates[this->atomic_index * 3 + 1]; + ucell->atoms[it].taud[ia].z = this->coordinates[this->atomic_index * 3 + 2]; + ucell->atoms[it].tau[ia] = ucell->atoms[it].taud[ia] * ucell->latvec; + } + else if (ucell->Coordinate == "Cartesian") + { + ucell->atoms[it].tau[ia].x = this->coordinates[this->atomic_index * 3 + 0]; + ucell->atoms[it].tau[ia].y = this->coordinates[this->atomic_index * 3 + 1]; + ucell->atoms[it].tau[ia].z = this->coordinates[this->atomic_index * 3 + 2]; + ModuleBase::Mathzone::Cartesian_to_Direct(ucell->atoms[it].tau[ia].x, + ucell->atoms[it].tau[ia].y, + ucell->atoms[it].tau[ia].z, + ucell->latvec.e11, + ucell->latvec.e12, + ucell->latvec.e13, + ucell->latvec.e21, + ucell->latvec.e22, + ucell->latvec.e23, + ucell->latvec.e31, + ucell->latvec.e32, + ucell->latvec.e33, + ucell->atoms[it].taud[ia].x, + ucell->atoms[it].taud[ia].y, + ucell->atoms[it].taud[ia].z); + } ucell->atoms[it].dis[ia].set(0, 0, 0); - if(this->init_vel) - { - ucell->atoms[it].vel[ia].x = this->velocity[this->atomic_index*3+0]; - ucell->atoms[it].vel[ia].y = this->velocity[this->atomic_index*3+1]; - ucell->atoms[it].vel[ia].z = this->velocity[this->atomic_index*3+2]; - } - else - { - ucell->atoms[it].vel[ia].set(0,0,0); - } - ucell->atoms[it].m_loc_[ia].set(0,0,0); - ucell->atoms[it].angle1[ia] = 0; - ucell->atoms[it].angle2[ia] = 0; - if(this->selective_dynamics) - { - ucell->atoms[it].mbl[ia].x = this->mbl[this->atomic_index*3+0]; - ucell->atoms[it].mbl[ia].y = this->mbl[this->atomic_index*3+1]; - ucell->atoms[it].mbl[ia].z = this->mbl[this->atomic_index*3+2]; - } - else - { - ucell->atoms[it].mbl[ia] = {1,1,1}; - } - ++(this->atomic_index); - } - } - ucell->nat = this->natom.sum(); - return ucell; - }; + if (this->init_vel) + { + ucell->atoms[it].vel[ia].x = this->velocity[this->atomic_index * 3 + 0]; + ucell->atoms[it].vel[ia].y = this->velocity[this->atomic_index * 3 + 1]; + ucell->atoms[it].vel[ia].z = this->velocity[this->atomic_index * 3 + 2]; + } + else + { + ucell->atoms[it].vel[ia].set(0, 0, 0); + } + ucell->atoms[it].m_loc_[ia].set(0, 0, 0); + ucell->atoms[it].angle1[ia] = 0; + ucell->atoms[it].angle2[ia] = 0; + if (this->selective_dynamics) + { + ucell->atoms[it].mbl[ia].x = this->mbl[this->atomic_index * 3 + 0]; + ucell->atoms[it].mbl[ia].y = this->mbl[this->atomic_index * 3 + 1]; + ucell->atoms[it].mbl[ia].z = this->mbl[this->atomic_index * 3 + 2]; + } + else + { + ucell->atoms[it].mbl[ia] = {1, 1, 1}; + } + ++(this->atomic_index); + } + } + ucell->nat = this->natom.sum(); + return ucell; + }; }; UcellTestPrepare::UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in, - std::valarray mbl_in, - std::valarray velocity_in): - latname(latname_in), - lmaxmax(lmaxmax_in), - init_vel(init_vel_in), - selective_dynamics(selective_dynamics_in), - relax_new(relax_new_in), - fixed_axes(fixed_axes_in), - lat0(lat0_in), - latvec(latvec_in), - elements(elements_in), - pp_files(pp_files_in), - pp_types(pp_types_in), - orb_files(orb_files_in), - natom(natom_in), - atomic_mass(atomic_mass_in), - coor_type(coor_type_in), - coordinates(coordinates_in), - mbl(mbl_in), - velocity(velocity_in) // velocity assume the existence of mbl in print_stru_file() -{} - -UcellTestPrepare::UcellTestPrepare(const UcellTestPrepare &utp): - latname(utp.latname), - lmaxmax(utp.lmaxmax), - init_vel(utp.init_vel), - selective_dynamics(utp.selective_dynamics), - relax_new(utp.relax_new), - fixed_axes(utp.fixed_axes), - lat0(utp.lat0), - latvec(utp.latvec), - elements(utp.elements), - pp_files(utp.pp_files), - pp_types(utp.pp_types), - orb_files(utp.orb_files), - natom(utp.natom), - atomic_mass(utp.atomic_mass), - coor_type(utp.coor_type), - coordinates(utp.coordinates), - mbl(utp.mbl), - velocity(utp.velocity) // velocity assume the existence of mbl in print_stru_file() -{} + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in, + std::valarray mbl_in, + std::valarray velocity_in) + : latname(latname_in), lmaxmax(lmaxmax_in), init_vel(init_vel_in), selective_dynamics(selective_dynamics_in), + relax_new(relax_new_in), fixed_axes(fixed_axes_in), lat0(lat0_in), latvec(latvec_in), elements(elements_in), + pp_files(pp_files_in), pp_types(pp_types_in), orb_files(orb_files_in), natom(natom_in), + atomic_mass(atomic_mass_in), coor_type(coor_type_in), coordinates(coordinates_in), mbl(mbl_in), + velocity(velocity_in) // velocity assume the existence of mbl in print_stru_file() +{ +} -std::map UcellTestLib +UcellTestPrepare::UcellTestPrepare(const UcellTestPrepare& utp) + : latname(utp.latname), lmaxmax(utp.lmaxmax), init_vel(utp.init_vel), selective_dynamics(utp.selective_dynamics), + relax_new(utp.relax_new), fixed_axes(utp.fixed_axes), lat0(utp.lat0), latvec(utp.latvec), elements(utp.elements), + pp_files(utp.pp_files), pp_types(utp.pp_types), orb_files(utp.orb_files), natom(utp.natom), + atomic_mass(utp.atomic_mass), coor_type(utp.coor_type), coordinates(utp.coordinates), mbl(utp.mbl), + velocity(utp.velocity) // velocity assume the existence of mbl in print_stru_file() { - {"Si", UcellTestPrepare( - "fcc", //latname - 2, //lmaxmax - true, //init_vel - true, //selective_dyanmics - true, //relax_new - "volume", //fixed_axes - 10.2, //lat0 - {-0.5,0.0,0.5, //latvec - 0.0,0.5,0.5, - -0.5,0.5,0.0}, - {"Si"}, //elements - {"Si.upf"}, //upf file - {"upf201"}, //upf types - {"Si.orb"}, //orb file - {2}, //number of each elements - {28.0}, //atomic mass - "Cartesian", //coordination type - {0.0,0.0,0.0, //atomic coordinates - 0.25,0.25,0.25}, - {1,1,1, - 1,1,1}, - {0,0,0, - 0,0,0})}, +} + +std::map UcellTestLib{ + {"Si", + UcellTestPrepare("fcc", // latname + 2, // lmaxmax + true, // init_vel + true, // selective_dyanmics + true, // relax_new + "volume", // fixed_axes + 10.2, // lat0 + {-0.5, + 0.0, + 0.5, // latvec + 0.0, + 0.5, + 0.5, + -0.5, + 0.5, + 0.0}, + {"Si"}, // elements + {"Si.upf"}, // upf file + {"upf201"}, // upf types + {"Si.orb"}, // orb file + {2}, // number of each elements + {28.0}, // atomic mass + "Cartesian", // coordination type + {0.0, + 0.0, + 0.0, // atomic coordinates + 0.25, + 0.25, + 0.25}, + {1, 1, 1, 1, 1, 1}, + {0, 0, 0, 0, 0, 0})}, }; #endif diff --git a/source/module_elecstate/test_mpi/charge_mpi_test.cpp b/source/module_elecstate/test_mpi/charge_mpi_test.cpp index 81d0fff751..5bcd240b06 100644 --- a/source/module_elecstate/test_mpi/charge_mpi_test.cpp +++ b/source/module_elecstate/test_mpi/charge_mpi_test.cpp @@ -1,11 +1,11 @@ #include "gmock/gmock.h" #include "gtest/gtest.h" #define private public -#include "module_base/matrix3.h" -#include "module_base/parallel_global.h" #include "module_elecstate/module_charge/charge.h" #include "module_hamilt_general/module_xc/xc_functional.h" #include "module_parameter/parameter.h" +#include "source_base/matrix3.h" +#include "source_base/parallel_global.h" bool XC_Functional::ked_flag = false; Charge::Charge() @@ -19,9 +19,10 @@ Charge::~Charge() auto sum_array = [](const double* v, const int& nv) { double sum = 0; - for (int i = 0; i < nv; ++i) { + for (int i = 0; i < nv; ++i) + { sum += v[i]; -} + } return sum; }; /************************************************ @@ -60,15 +61,15 @@ TEST_F(ChargeMpiTest, reduce_diff_pools1) { GlobalV::KPAR = 2; Parallel_Global::init_pools(GlobalV::NPROC, - GlobalV::MY_RANK, - PARAM.input.bndpar, - GlobalV::KPAR, - GlobalV::NPROC_IN_BNDGROUP, - GlobalV::RANK_IN_BPGROUP, - GlobalV::MY_BNDGROUP, - GlobalV::NPROC_IN_POOL, - GlobalV::RANK_IN_POOL, - GlobalV::MY_POOL); + GlobalV::MY_RANK, + PARAM.input.bndpar, + GlobalV::KPAR, + GlobalV::NPROC_IN_BNDGROUP, + GlobalV::RANK_IN_BPGROUP, + GlobalV::MY_BNDGROUP, + GlobalV::NPROC_IN_POOL, + GlobalV::RANK_IN_POOL, + GlobalV::MY_POOL); ModulePW::PW_Basis* rhopw = new ModulePW::PW_Basis(); rhopw->initmpi(GlobalV::NPROC_IN_POOL, GlobalV::RANK_IN_POOL, POOL_WORLD); rhopw->initgrids(lat0, latvec, 40); diff --git a/source/module_hamilt_general/module_ewald/H_Ewald_pw.cpp b/source/module_hamilt_general/module_ewald/H_Ewald_pw.cpp index 2c8cc60f9d..aa252d2442 100644 --- a/source/module_hamilt_general/module_ewald/H_Ewald_pw.cpp +++ b/source/module_hamilt_general/module_ewald/H_Ewald_pw.cpp @@ -1,14 +1,14 @@ #include "H_Ewald_pw.h" -#include "module_parameter/parameter.h" -#include "module_base/mymath.h" // use heapsort -#include "module_parameter/parameter.h" + #include "dnrm2.h" -#include "module_base/parallel_reduce.h" -#include "module_base/constants.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/constants.h" +#include "source_base/mymath.h" // use heapsort +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" -double H_Ewald_pw::alpha=0.0; +double H_Ewald_pw::alpha = 0.0; int H_Ewald_pw::mxr = 200; H_Ewald_pw::H_Ewald_pw(){}; H_Ewald_pw::~H_Ewald_pw(){}; @@ -17,29 +17,29 @@ double H_Ewald_pw::compute_ewald(const UnitCell& cell, const ModulePW::PW_Basis* rho_basis, const ModuleBase::ComplexMatrix& strucFac) { - ModuleBase::TITLE("H_Ewald_pw","compute_ewald"); - ModuleBase::timer::tick("H_Ewald_pw","compute_ewald"); - -//---------------------------------------------------------- -// Calculates Ewald energy with both G- and R-space terms. -// Determines optimal alpha. Should hopefully work for any structure. -//---------------------------------------------------------- - //int ng=0; - int nr=0; - int na=0; - int nb=0; - //int nt=0; - int nrm=0; - - double ewaldg=0.0; - double ewaldr=0.0; - double ewalds=0.0; - - ModuleBase::Vector3 dtau ; - double rmax=0.0; - double rr=0.0; - double upperbound=0.0; - double fact=0; + ModuleBase::TITLE("H_Ewald_pw", "compute_ewald"); + ModuleBase::timer::tick("H_Ewald_pw", "compute_ewald"); + + //---------------------------------------------------------- + // Calculates Ewald energy with both G- and R-space terms. + // Determines optimal alpha. Should hopefully work for any structure. + //---------------------------------------------------------- + // int ng=0; + int nr = 0; + int na = 0; + int nb = 0; + // int nt=0; + int nrm = 0; + + double ewaldg = 0.0; + double ewaldr = 0.0; + double ewalds = 0.0; + + ModuleBase::Vector3 dtau; + double rmax = 0.0; + double rr = 0.0; + double upperbound = 0.0; + double fact = 0; // total ionic charge in the cell // ewald energy computed in reciprocal space // ewald energy computed in real space @@ -51,13 +51,13 @@ double H_Ewald_pw::compute_ewald(const UnitCell& cell, // buffer variable // used to optimize alpha - if(PARAM.inp.test_energy) + if (PARAM.inp.test_energy) { - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"mxr",mxr); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "mxr", mxr); } - //r = new ModuleBase::Vector3[mxr]; - //r2 = new double[mxr]; - //int* irr = new int[mxr]; + // r = new ModuleBase::Vector3[mxr]; + // r2 = new double[mxr]; + // int* irr = new int[mxr]; std::vector> vec_r(mxr); std::vector vec_r2(mxr); std::vector vec_irr(mxr); @@ -67,18 +67,18 @@ double H_Ewald_pw::compute_ewald(const UnitCell& cell, // (1) calculate total ionic charge double charge = 0.0; - for (int it = 0;it < cell.ntype;it++) + for (int it = 0; it < cell.ntype; it++) { { - charge += cell.atoms[it].na * cell.atoms[it].ncpp.zv;//mohan modify 2007-11-7 + charge += cell.atoms[it].na * cell.atoms[it].ncpp.zv; // mohan modify 2007-11-7 } } - if(PARAM.inp.test_energy) + if (PARAM.inp.test_energy) { - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"Total ionic charge",charge); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "Total ionic charge", charge); } - // (2) calculate the converged value: alpha + // (2) calculate the converged value: alpha H_Ewald_pw::alpha = 2.90; do { @@ -88,82 +88,83 @@ double H_Ewald_pw::compute_ewald(const UnitCell& cell, if (alpha <= 0.0) { - ModuleBase::WARNING_QUIT("ewald","Can't find optimal alpha."); + ModuleBase::WARNING_QUIT("ewald", "Can't find optimal alpha."); } - upperbound = 2.0 * charge * charge * sqrt(2.0 * alpha / ModuleBase::TWO_PI) * - erfc(sqrt(cell.tpiba2 * rho_basis->ggecut / 4.0 / alpha)); - } - while (upperbound > 1.0e-7); - if(PARAM.inp.test_energy) + upperbound = 2.0 * charge * charge * sqrt(2.0 * alpha / ModuleBase::TWO_PI) + * erfc(sqrt(cell.tpiba2 * rho_basis->ggecut / 4.0 / alpha)); + } while (upperbound > 1.0e-7); + if (PARAM.inp.test_energy) { - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"alpha",alpha); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"Upper bound",upperbound); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "alpha", alpha); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "Upper bound", upperbound); } // G-space sum here. // Determine if this processor contains G=0 and set the constant term if (rho_basis->ig_gge0 >= 0) { - ewaldg = - charge * charge / alpha / 4.0; + ewaldg = -charge * charge / alpha / 4.0; } else { ewaldg = 0.0; } - // in plane wave basis, only use k=0 point is not - // called "gamma_only", only if the wave functions - // are stored as double type, the gamma_only = true. - // I don't know why "gamma_only" in plane wave - // makes the fact below is 2, that's a little complicated - // to understand. I think that may because only half - // the G vectors are used. Unfortunately implement the - // function hasn't in my plan list yet. - // - // but that's not the term "gamma_only" I want to use in LCAO, - fact = 1.0; + // in plane wave basis, only use k=0 point is not + // called "gamma_only", only if the wave functions + // are stored as double type, the gamma_only = true. + // I don't know why "gamma_only" in plane wave + // makes the fact below is 2, that's a little complicated + // to understand. I think that may because only half + // the G vectors are used. Unfortunately implement the + // function hasn't in my plan list yet. + // + // but that's not the term "gamma_only" I want to use in LCAO, + fact = 1.0; - //GlobalV::ofs_running << "\n pwb.gstart = " << pwb.gstart << std::endl; + // GlobalV::ofs_running << "\n pwb.gstart = " << pwb.gstart << std::endl; for (int ig = 0; ig < rho_basis->npw; ig++) { - if(ig == rho_basis->ig_gge0) - { + if (ig == rho_basis->ig_gge0) + { continue; } std::complex rhon = ModuleBase::ZERO; - for (int it=0; it(cell.atoms[it].ncpp.zv) * conj(strucFac(it, ig)); } } - ewaldg += fact * std::abs(rhon) * std::abs(rhon) - * exp(- rho_basis->gg[ig] * cell.tpiba2 / alpha / 4.0 ) / rho_basis->gg[ig] / cell.tpiba2; + ewaldg += fact * std::abs(rhon) * std::abs(rhon) * exp(-rho_basis->gg[ig] * cell.tpiba2 / alpha / 4.0) + / rho_basis->gg[ig] / cell.tpiba2; } ewaldg = ModuleBase::FOUR_PI / cell.omega * ewaldg; -// std::cout << "\n ewaldg = " << ewaldg; + // std::cout << "\n ewaldg = " << ewaldg; // Here add the other constant term - if (rho_basis->ig_gge0 >= 0) - { - for (int it = 0; it < cell.ntype;it++) - { + if (rho_basis->ig_gge0 >= 0) + { + for (int it = 0; it < cell.ntype; it++) + { { - ewaldg = ewaldg - cell.atoms[it].na * cell.atoms[it].ncpp.zv * cell.atoms[it].ncpp.zv * sqrt(8.0 / ModuleBase::TWO_PI * alpha); + ewaldg = ewaldg + - cell.atoms[it].na * cell.atoms[it].ncpp.zv * cell.atoms[it].ncpp.zv + * sqrt(8.0 / ModuleBase::TWO_PI * alpha); } - } - }//mohan modify 2007-11-7, 2010-07-26 + } + } // mohan modify 2007-11-7, 2010-07-26 // R-space sum here (only done for the processor that contains G=0) ewaldr = 0.0; #ifdef __MPI rmax = 4.0 / sqrt(alpha) / cell.lat0; - if(PARAM.inp.test_energy) + if (PARAM.inp.test_energy) { - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"rmax(unit lat0)",rmax); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "rmax(unit lat0)", rmax); } int size = 0; @@ -180,12 +181,12 @@ double H_Ewald_pw::compute_ewald(const UnitCell& cell, int ia1 = 0; int it2 = 0; int ia2 = 0; - for(int na1=ia_start; na1cell.latvec, bg-->G // and sum to the real space part - if(PARAM.inp.test_energy>1) + if (PARAM.inp.test_energy > 1) { - ModuleBase::GlobalFunc::OUT("dtau.x",dtau.x); - ModuleBase::GlobalFunc::OUT("dtau.y",dtau.y); - ModuleBase::GlobalFunc::OUT("dtau.z",dtau.z); - ModuleBase::GlobalFunc::OUT("nrm",nrm); + ModuleBase::GlobalFunc::OUT("dtau.x", dtau.x); + ModuleBase::GlobalFunc::OUT("dtau.y", dtau.y); + ModuleBase::GlobalFunc::OUT("dtau.z", dtau.z); + ModuleBase::GlobalFunc::OUT("nrm", nrm); } - for(nr=0; nr1) + if (PARAM.inp.test_energy > 1) { - ModuleBase::GlobalFunc::OUT("ewaldr",ewaldr); + ModuleBase::GlobalFunc::OUT("ewaldr", ewaldr); } } } #else if (rho_basis->ig_gge0 >= 0) - { + { rmax = 4.0 / sqrt(alpha) / cell.lat0; - if(PARAM.inp.test_energy) ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"rmax(unit lat0)",rmax); + if (PARAM.inp.test_energy) + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "rmax(unit lat0)", rmax); // with this choice terms up to ZiZj*erfc(4) are counted (erfc(4)=2x10^-8 - int nt1=0; - int nt2=0; + int nt1 = 0; + int nt2 = 0; for (nt1 = 0; nt1 < cell.ntype; nt1++) { @@ -235,62 +236,62 @@ double H_Ewald_pw::compute_ewald(const UnitCell& cell, { for (nb = 0; nb < cell.atoms[nt2].na; nb++) { - //calculate tau[na]-tau[nb] + // calculate tau[na]-tau[nb] dtau = cell.atoms[nt1].tau[na] - cell.atoms[nt2].tau[nb]; - //generates nearest-neighbors shells + // generates nearest-neighbors shells H_Ewald_pw::rgen(dtau, rmax, irr, cell.latvec, cell.G, r, r2, nrm); // at-->cell.latvec, bg-->G // and sum to the real space part - if (PARAM.inp.test_energy>1) + if (PARAM.inp.test_energy > 1) { - ModuleBase::GlobalFunc::OUT("dtau.x",dtau.x); - ModuleBase::GlobalFunc::OUT("dtau.y",dtau.y); - ModuleBase::GlobalFunc::OUT("dtau.z",dtau.z); - ModuleBase::GlobalFunc::OUT("nrm",nrm); + ModuleBase::GlobalFunc::OUT("dtau.x", dtau.x); + ModuleBase::GlobalFunc::OUT("dtau.y", dtau.y); + ModuleBase::GlobalFunc::OUT("dtau.z", dtau.z); + ModuleBase::GlobalFunc::OUT("nrm", nrm); } - for (nr = 0;nr < nrm;nr++) + for (nr = 0; nr < nrm; nr++) { - rr = sqrt(r2 [nr]) * cell.lat0; + rr = sqrt(r2[nr]) * cell.lat0; { - ewaldr = ewaldr + cell.atoms[nt1].ncpp.zv * cell.atoms[nt2].ncpp.zv * - erfc(sqrt(alpha) * rr) / rr; + ewaldr + = ewaldr + + cell.atoms[nt1].ncpp.zv * cell.atoms[nt2].ncpp.zv * erfc(sqrt(alpha) * rr) / rr; } } // enddo - if (PARAM.inp.test_energy>1) ModuleBase::GlobalFunc::OUT("ewaldr",ewaldr); + if (PARAM.inp.test_energy > 1) + ModuleBase::GlobalFunc::OUT("ewaldr", ewaldr); } // enddo - } // enddo - } // nt2 - }//nt1 - } // endif + } // enddo + } // nt2 + } // nt1 + } // endif #endif ewalds = 0.50 * ModuleBase::e2 * (ewaldg + ewaldr); - // mohan fix bug 2010-07-26 + // mohan fix bug 2010-07-26 Parallel_Reduce::reduce_pool(ewalds); - if (PARAM.inp.test_energy>1) + if (PARAM.inp.test_energy > 1) { - ModuleBase::GlobalFunc::OUT("ewaldg",ewaldg); - ModuleBase::GlobalFunc::OUT("ewaldr",ewaldr); - ModuleBase::GlobalFunc::OUT("ewalds",ewalds); + ModuleBase::GlobalFunc::OUT("ewaldg", ewaldg); + ModuleBase::GlobalFunc::OUT("ewaldr", ewaldr); + ModuleBase::GlobalFunc::OUT("ewalds", ewalds); } - ModuleBase::timer::tick("H_Ewald_pw","compute_ewald"); + ModuleBase::timer::tick("H_Ewald_pw", "compute_ewald"); return ewalds; } // end function ewald - -void H_Ewald_pw::rgen( - const ModuleBase::Vector3 &dtau, - const double &rmax, - int *irr, - const ModuleBase::Matrix3 &latvec, - const ModuleBase::Matrix3 &G, - ModuleBase::Vector3 *r, - double *r2, - int &nrm) +void H_Ewald_pw::rgen(const ModuleBase::Vector3& dtau, + const double& rmax, + int* irr, + const ModuleBase::Matrix3& latvec, + const ModuleBase::Matrix3& G, + ModuleBase::Vector3* r, + double* r2, + int& nrm) { //------------------------------------------------------------------- // generates neighbours shells (in units of alat) with length @@ -312,12 +313,12 @@ void H_Ewald_pw::rgen( // input: the radius of the sphere in real sp // and here the local variables - int nm1=0; - int nm2=0; - int nm3=0; - int i=0; - int j=0; - int k=0; + int nm1 = 0; + int nm2 = 0; + int nm3 = 0; + int i = 0; + int j = 0; + int k = 0; // index on R vectors for order // maximum values for trial vectors // counters on trial vectors @@ -328,8 +329,8 @@ void H_Ewald_pw::rgen( ModuleBase::Vector3 t; ModuleBase::Vector3 t1; - double tt=0.0; - double bg1[3]={0,0,0}; + double tt = 0.0; + double bg1[3] = {0, 0, 0}; // buffer contains the actual r // buffer cotains the modulus of actual r // used for swapping @@ -361,11 +362,11 @@ void H_Ewald_pw::rgen( nm3 = (int)(dnrm2(3, bg1, 1) * rmax + 2); - if (PARAM.inp.test_energy>1) + if (PARAM.inp.test_energy > 1) { - ModuleBase::GlobalFunc::OUT("nm1",nm1); - ModuleBase::GlobalFunc::OUT("nm2",nm2); - ModuleBase::GlobalFunc::OUT("nm3",nm3); + ModuleBase::GlobalFunc::OUT("nm1", nm1); + ModuleBase::GlobalFunc::OUT("nm2", nm2); + ModuleBase::GlobalFunc::OUT("nm3", nm3); } for (i = -nm1; i <= nm1; i++) // mohan fix bug, add '='. 2009-02-27 @@ -374,13 +375,13 @@ void H_Ewald_pw::rgen( { for (k = -nm3; k <= nm3; k++) { - ModuleBase::Vector3 t1(i,j,k); -// out.printV3(t1); + ModuleBase::Vector3 t1(i, j, k); + // out.printV3(t1); t = t1 * latvec; // bug ! first '*latvec', second '-dtau'. - t = t - dtau; // bug ! t = t - dtau, not t1 = t1 -tau; + t = t - dtau; // bug ! t = t - dtau, not t1 = t1 -tau; -// out.printV3(t); // mohan fix 2bugs here, 2009-2-27 -// out.printM3("latvec",latvec); + // out.printV3(t); // mohan fix 2bugs here, 2009-2-27 + // out.printM3("latvec",latvec); tt = t.x * t.x + t.y * t.y + t.z * t.z; @@ -394,9 +395,9 @@ void H_Ewald_pw::rgen( r2[nrm] = tt; nrm++; } // endif - } // enddo - } // enddo - } // enddo + } // enddo + } // enddo + } // enddo // reorder the vectors in order of increasing magnitude // initialize the index inside sorting routine @@ -406,35 +407,34 @@ void H_Ewald_pw::rgen( ModuleBase::heapsort(nrm, r2, irr); } - // mohan fix bug 2011-06-07 - for(int i=0; i &dtau, - const double &rmax, - int *irr, - const ModuleBase::Matrix3 &at, - const ModuleBase::Matrix3 &bg, - ModuleBase::Vector3 *r, - double *r2, - int &nrm - ); + static void rgen(const ModuleBase::Vector3& dtau, + const double& rmax, + int* irr, + const ModuleBase::Matrix3& at, + const ModuleBase::Matrix3& bg, + ModuleBase::Vector3* r, + double* r2, + int& nrm); - // the coefficient of ewald method - static double alpha; + // the coefficient of ewald method + static double alpha; static int mxr; - }; -#endif //ewald energy +#endif // ewald energy diff --git a/source/module_hamilt_general/module_surchem/H_correction_pw.cpp b/source/module_hamilt_general/module_surchem/H_correction_pw.cpp index b9f6a39548..4e1f4f4c41 100644 --- a/source/module_hamilt_general/module_surchem/H_correction_pw.cpp +++ b/source/module_hamilt_general/module_surchem/H_correction_pw.cpp @@ -1,11 +1,11 @@ -#include - -#include "module_base/constants.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" #include "module_hamilt_general/module_xc/xc_functional.h" +#include "source_base/constants.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" #include "surchem.h" +#include + ModuleBase::matrix surchem::v_correction(const UnitCell& cell, const Parallel_Grid& pgrid, const ModulePW::PW_Basis* rho_basis, @@ -17,21 +17,21 @@ ModuleBase::matrix surchem::v_correction(const UnitCell& cell, ModuleBase::TITLE("surchem", "v_cor"); ModuleBase::timer::tick("surchem", "v_cor"); - assert(rho_basis->nrxx>0); - + assert(rho_basis->nrxx > 0); + double* porter = new double[rho_basis->nrxx]; - for (int i = 0; i < rho_basis->nrxx; i++) - { - porter[i] = 0.0; - } + for (int i = 0; i < rho_basis->nrxx; i++) + { + porter[i] = 0.0; + } const int nspin0 = (nspin == 2) ? 2 : 1; - for (int is = 0; is < nspin0; is++) - { - for (int ir = 0; ir < rho_basis->nrxx; ir++) - { - porter[ir] += rho[is][ir]; - } - } + for (int is = 0; is < nspin0; is++) + { + for (int ir = 0; ir < rho_basis->nrxx; ir++) + { + porter[ir] += rho[is][ir]; + } + } complex* porter_g = new complex[rho_basis->npw]; ModuleBase::GlobalFunc::ZEROS(porter_g, rho_basis->npw); diff --git a/source/module_hamilt_general/module_surchem/cal_vcav.cpp b/source/module_hamilt_general/module_surchem/cal_vcav.cpp index 86d6923524..961e4d28cd 100644 --- a/source/module_hamilt_general/module_surchem/cal_vcav.cpp +++ b/source/module_hamilt_general/module_surchem/cal_vcav.cpp @@ -1,35 +1,34 @@ -#include "module_base/timer.h" #include "module_hamilt_general/module_xc/xc_functional.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" #include "surchem.h" -void lapl_rho(const double& tpiba2, - const std::complex* rhog, - double* lapn, - const ModulePW::PW_Basis* rho_basis) +void lapl_rho(const double& tpiba2, const std::complex* rhog, double* lapn, const ModulePW::PW_Basis* rho_basis) { - std::complex *gdrtmpg = new std::complex[rho_basis->npw]; + std::complex* gdrtmpg = new std::complex[rho_basis->npw]; ModuleBase::GlobalFunc::ZEROS(lapn, rho_basis->nrxx); - std::complex *aux = new std::complex[rho_basis->nmaxgr]; + std::complex* aux = new std::complex[rho_basis->nmaxgr]; // the formula is : rho(r)^prime = \int iG * rho(G)e^{iGr} dG - for (int ig = 0; ig < rho_basis->npw; ig++) { + for (int ig = 0; ig < rho_basis->npw; ig++) + { gdrtmpg[ig] = rhog[ig]; -} - for(int i = 0 ; i < 3 ; ++i) + } + for (int i = 0; i < 3; ++i) { // calculate the charge density gradient in reciprocal space. - for (int ig = 0; ig < rho_basis->npw; ig++) { + for (int ig = 0; ig < rho_basis->npw; ig++) + { aux[ig] = gdrtmpg[ig] * pow(rho_basis->gcar[ig][i], 2); -} + } // bring the gdr from G --> R rho_basis->recip2real(aux, aux); // remember to multily 2pi/a0, which belongs to G vectors. - for (int ir = 0; ir < rho_basis->nrxx; ir++) { + for (int ir = 0; ir < rho_basis->nrxx; ir++) + { lapn[ir] -= aux[ir].real() * tpiba2; -} - + } } delete[] gdrtmpg; @@ -42,7 +41,7 @@ void lapl_rho(const double& tpiba2, void shape_gradn(const complex* ps_totn, const ModulePW::PW_Basis* rho_basis, double* eprime) { - double *ps_totn_real = new double[rho_basis->nrxx]; + double* ps_totn_real = new double[rho_basis->nrxx]; ModuleBase::GlobalFunc::ZEROS(ps_totn_real, rho_basis->nrxx); rho_basis->recip2real(ps_totn, ps_totn_real); @@ -64,11 +63,11 @@ void surchem::createcavity(const UnitCell& ucell, const complex* ps_totn, double* vwork) { - ModuleBase::Vector3 *nablan = new ModuleBase::Vector3[rho_basis->nrxx]; + ModuleBase::Vector3* nablan = new ModuleBase::Vector3[rho_basis->nrxx]; ModuleBase::GlobalFunc::ZEROS(nablan, rho_basis->nrxx); - double *nablan_2 = new double[rho_basis->nrxx]; - double *sqrt_nablan_2 = new double[rho_basis->nrxx]; - double *lapn = new double[rho_basis->nrxx]; + double* nablan_2 = new double[rho_basis->nrxx]; + double* sqrt_nablan_2 = new double[rho_basis->nrxx]; + double* lapn = new double[rho_basis->nrxx]; ModuleBase::GlobalFunc::ZEROS(nablan_2, rho_basis->nrxx); ModuleBase::GlobalFunc::ZEROS(sqrt_nablan_2, rho_basis->nrxx); @@ -84,7 +83,7 @@ void surchem::createcavity(const UnitCell& ucell, } // Laplacian of n - lapl_rho(ucell.tpiba2,ps_totn, lapn, rho_basis); + lapl_rho(ucell.tpiba2, ps_totn, lapn, rho_basis); //------------------------------------------------------------- // add -Lap(n)/|\nabla n| to vwork and copy \sqrt(|\nabla n|^2) @@ -104,7 +103,7 @@ void surchem::createcavity(const UnitCell& ucell, // term1 = gamma*A / n, where // gamma * A = exp(-(log(n/n_c))^2 /(2 sigma^2)) /(sigma * sqrt(2*pi) ) //------------------------------------------------------------- - double *term1 = new double[rho_basis->nrxx]; + double* term1 = new double[rho_basis->nrxx]; shape_gradn(ps_totn, rho_basis, term1); //------------------------------------------------------------- @@ -131,11 +130,11 @@ void surchem::createcavity(const UnitCell& ucell, // packs the real array into a complex one // to G space - complex *inv_gn = new complex[rho_basis->npw]; + complex* inv_gn = new complex[rho_basis->npw]; rho_basis->real2recip(sqrt_nablan_2, inv_gn); - + // \nabla(1 / |\nabla n|), ggn in real space - ModuleBase::Vector3 *ggn = new ModuleBase::Vector3[rho_basis->nrxx]; + ModuleBase::Vector3* ggn = new ModuleBase::Vector3[rho_basis->nrxx]; XC_Functional::grad_rho(inv_gn, ggn, rho_basis, ucell.tpiba); //------------------------------------------------------------- @@ -170,7 +169,7 @@ ModuleBase::matrix surchem::cal_vcav(const UnitCell& ucell, ModuleBase::TITLE("surchem", "cal_vcav"); ModuleBase::timer::tick("surchem", "cal_vcav"); - double *tmp_Vcav = new double[rho_basis->nrxx]; + double* tmp_Vcav = new double[rho_basis->nrxx]; ModuleBase::GlobalFunc::ZEROS(tmp_Vcav, rho_basis->nrxx); createcavity(ucell, rho_basis, ps_totn, tmp_Vcav); diff --git a/source/module_hamilt_general/module_surchem/cal_vel.cpp b/source/module_hamilt_general/module_surchem/cal_vel.cpp index ac0771cbde..afa2ca91d8 100644 --- a/source/module_hamilt_general/module_surchem/cal_vel.cpp +++ b/source/module_hamilt_general/module_surchem/cal_vel.cpp @@ -1,6 +1,6 @@ -#include "module_base/timer.h" #include "module_hamilt_general/module_xc/xc_functional.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" #include "surchem.h" void shape_gradn(const double* PS_TOTN_real, const ModulePW::PW_Basis* rho_basis, double* eprime) @@ -23,7 +23,7 @@ void eps_pot(const double* PS_TOTN_real, double* d_eps, double* vwork) { - double *eprime = new double[rho_basis->nrxx]; + double* eprime = new double[rho_basis->nrxx]; ModuleBase::GlobalFunc::ZEROS(eprime, rho_basis->nrxx); shape_gradn(PS_TOTN_real, rho_basis, eprime); @@ -33,8 +33,8 @@ void eps_pot(const double* PS_TOTN_real, eprime[ir] = eprime[ir] * (PARAM.inp.eb_k - 1); } - ModuleBase::Vector3 *nabla_phi = new ModuleBase::Vector3[rho_basis->nrxx]; - double *phisq = new double[rho_basis->nrxx]; + ModuleBase::Vector3* nabla_phi = new ModuleBase::Vector3[rho_basis->nrxx]; + double* phisq = new double[rho_basis->nrxx]; // nabla phi XC_Functional::grad_rho(phi, nabla_phi, rho_basis, tpiba); @@ -66,26 +66,26 @@ ModuleBase::matrix surchem::cal_vel(const UnitCell& cell, rho_basis->recip2real(TOTN, TOTN_real); // -4pi * TOTN(G) - complex *B = new complex[rho_basis->npw]; + complex* B = new complex[rho_basis->npw]; for (int ig = 0; ig < rho_basis->npw; ig++) { B[ig] = -4.0 * ModuleBase::PI * TOTN[ig]; } // Build a nrxx vector to DO FFT . - double *PS_TOTN_real = new double[rho_basis->nrxx]; + double* PS_TOTN_real = new double[rho_basis->nrxx]; rho_basis->recip2real(PS_TOTN, PS_TOTN_real); // build epsilon in real space (nrxx) - double *epsilon = new double[rho_basis->nrxx]; - double *epsilon0 = new double[rho_basis->nrxx]; + double* epsilon = new double[rho_basis->nrxx]; + double* epsilon0 = new double[rho_basis->nrxx]; cal_epsilon(rho_basis, PS_TOTN_real, epsilon, epsilon0); - complex *Sol_phi = new complex[rho_basis->npw]; - complex *Sol_phi0 = new complex[rho_basis->npw]; + complex* Sol_phi = new complex[rho_basis->npw]; + complex* Sol_phi0 = new complex[rho_basis->npw]; int ncgsol = 0; - double *tmp_Vel = new double[rho_basis->nrxx]; + double* tmp_Vel = new double[rho_basis->nrxx]; ModuleBase::GlobalFunc::ZEROS(tmp_Vel, rho_basis->nrxx); // Calculate Sol_phi with epsilon. @@ -96,8 +96,8 @@ ModuleBase::matrix surchem::cal_vel(const UnitCell& cell, // Calculate Sol_phi0 with epsilon0. minimize_cg(cell, rho_basis, epsilon0, B, Sol_phi0, ncgsol); - double *phi_tilda_R = new double[rho_basis->nrxx]; - double *phi_tilda_R0 = new double[rho_basis->nrxx]; + double* phi_tilda_R = new double[rho_basis->nrxx]; + double* phi_tilda_R0 = new double[rho_basis->nrxx]; rho_basis->recip2real(Sol_phi, phi_tilda_R); rho_basis->recip2real(Sol_phi0, phi_tilda_R0); diff --git a/source/module_hamilt_general/module_surchem/sol_force.cpp b/source/module_hamilt_general/module_surchem/sol_force.cpp index 00c4da4404..d6c5b4ae18 100644 --- a/source/module_hamilt_general/module_surchem/sol_force.cpp +++ b/source/module_hamilt_general/module_surchem/sol_force.cpp @@ -1,19 +1,18 @@ -#include "surchem.h" -#include "module_base/timer.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" +#include "surchem.h" void surchem::force_cor_one(const UnitCell& cell, const ModulePW::PW_Basis* rho_basis, const ModuleBase::matrix& vloc, ModuleBase::matrix& forcesol) { - - - //delta phi multiply by the derivative of nuclear charge density with respect to the positions - std::complex *N = new std::complex[rho_basis->npw]; - std::complex *vloc_at = new std::complex[rho_basis->npw]; - std::complex *delta_phi_g = new complex[rho_basis->npw]; - //ModuleBase::GlobalFunc::ZEROS(delta_phi_g, rho_basis->npw); + + // delta phi multiply by the derivative of nuclear charge density with respect to the positions + std::complex* N = new std::complex[rho_basis->npw]; + std::complex* vloc_at = new std::complex[rho_basis->npw]; + std::complex* delta_phi_g = new complex[rho_basis->npw]; + // ModuleBase::GlobalFunc::ZEROS(delta_phi_g, rho_basis->npw); rho_basis->real2recip(this->delta_phi, delta_phi_g); // GlobalC::UFFT.ToReciSpace(this->delta_phi, delta_phi_g,rho_basis); @@ -22,43 +21,43 @@ void surchem::force_cor_one(const UnitCell& cell, // ModuleBase::GlobalFunc::ZEROS(vg, ngmc); int iat = 0; - for (int it = 0;it < cell.ntype;it++) + for (int it = 0; it < cell.ntype; it++) { - for (int ia = 0;ia < cell.atoms[it].na ; ia++) + for (int ia = 0; ia < cell.atoms[it].na; ia++) { for (int ig = 0; ig < rho_basis->npw; ig++) - { - complex phase = exp( ModuleBase::NEG_IMAG_UNIT *ModuleBase::TWO_PI * ( rho_basis->gcar[ig] * cell.atoms[it].tau[ia])); - //vloc for each atom + { + complex phase = exp(ModuleBase::NEG_IMAG_UNIT * ModuleBase::TWO_PI + * (rho_basis->gcar[ig] * cell.atoms[it].tau[ia])); + // vloc for each atom vloc_at[ig] = vloc(it, rho_basis->ig2igg[ig]) * phase; - if(rho_basis->ig_gge0 == ig) + if (rho_basis->ig_gge0 == ig) { N[ig] = cell.atoms[it].ncpp.zv / cell.omega; } else { - const double fac = ModuleBase::e2 * ModuleBase::FOUR_PI / - (cell.tpiba2 * rho_basis->gg[ig]); + const double fac = ModuleBase::e2 * ModuleBase::FOUR_PI / (cell.tpiba2 * rho_basis->gg[ig]); N[ig] = -vloc_at[ig] / fac; } - - //force for each atom + + // force for each atom forcesol(iat, 0) += rho_basis->gcar[ig][0] * imag(conj(delta_phi_g[ig]) * N[ig]); forcesol(iat, 1) += rho_basis->gcar[ig][1] * imag(conj(delta_phi_g[ig]) * N[ig]); forcesol(iat, 2) += rho_basis->gcar[ig][2] * imag(conj(delta_phi_g[ig]) * N[ig]); } - - forcesol(iat, 0) *= (cell.tpiba * cell.omega); - forcesol(iat, 1) *= (cell.tpiba * cell.omega); - forcesol(iat, 2) *= (cell.tpiba * cell.omega); - //unit Ry/Bohr - forcesol(iat, 0) *= 2 ; - forcesol(iat, 1) *= 2 ; - forcesol(iat, 2) *= 2 ; - - //cout<<"Force1"< *n_pseudo = new complex[rho_basis->npw]; - ModuleBase::GlobalFunc::ZEROS(n_pseudo,rho_basis->npw); + + complex* n_pseudo = new complex[rho_basis->npw]; + ModuleBase::GlobalFunc::ZEROS(n_pseudo, rho_basis->npw); // this->gauss_charge(cell, pwb, n_pseudo); - double *Vcav_sum = new double[rho_basis->nrxx]; + double* Vcav_sum = new double[rho_basis->nrxx]; ModuleBase::GlobalFunc::ZEROS(Vcav_sum, rho_basis->nrxx); - std::complex *Vcav_g = new complex[rho_basis->npw]; - std::complex *Vel_g = new complex[rho_basis->npw]; + std::complex* Vcav_g = new complex[rho_basis->npw]; + std::complex* Vel_g = new complex[rho_basis->npw]; ModuleBase::GlobalFunc::ZEROS(Vcav_g, rho_basis->npw); ModuleBase::GlobalFunc::ZEROS(Vel_g, rho_basis->npw); - for(int is=0; isnrxx; ir++) - { + for (int is = 0; is < PARAM.inp.nspin; is++) + { + for (int ir = 0; ir < rho_basis->nrxx; ir++) + { Vcav_sum[ir] += this->Vcav(is, ir); } } @@ -96,58 +94,58 @@ void surchem::force_cor_two(const UnitCell& cell, const ModulePW::PW_Basis* rho_ int iat = 0; // double Ael1 = 0; - for (int it = 0;it < cell.ntype;it++) + for (int it = 0; it < cell.ntype; it++) { double RCS = this->GetAtom.atom_RCS[cell.atoms[it].ncpp.psd]; double sigma_rc_k = RCS / 2.5; - for (int ia = 0;ia < cell.atoms[it].na;ia++) + for (int ia = 0; ia < cell.atoms[it].na; ia++) { - //cell.atoms[0].tau[0].z = 3.302; - //cout<npw); + // cell.atoms[0].tau[0].z = 3.302; + // cout<npw); for (int ig = 0; ig < rho_basis->npw; ig++) { // G^2 double gg = rho_basis->gg[ig]; gg = gg * cell.tpiba2; - complex phase = exp( ModuleBase::NEG_IMAG_UNIT *ModuleBase::TWO_PI * ( rho_basis->gcar[ig] * cell.atoms[it].tau[ia])); + complex phase = exp(ModuleBase::NEG_IMAG_UNIT * ModuleBase::TWO_PI + * (rho_basis->gcar[ig] * cell.atoms[it].tau[ia])); n_pseudo[ig].real((this->GetAtom.atom_Z[cell.atoms[it].ncpp.psd] - cell.atoms[it].ncpp.zv) * phase.real() * exp(-0.5 * gg * (sigma_rc_k * sigma_rc_k))); n_pseudo[ig].imag((this->GetAtom.atom_Z[cell.atoms[it].ncpp.psd] - cell.atoms[it].ncpp.zv) * phase.imag() * exp(-0.5 * gg * (sigma_rc_k * sigma_rc_k))); } - + for (int ig = 0; ig < rho_basis->npw; ig++) - { + { n_pseudo[ig] /= cell.omega; } for (int ig = 0; ig < rho_basis->npw; ig++) { - forcesol(iat, 0) -= rho_basis->gcar[ig][0] * imag(conj(Vcav_g[ig]+Vel_g[ig]) * n_pseudo[ig]); - forcesol(iat, 1) -= rho_basis->gcar[ig][1] * imag(conj(Vcav_g[ig]+Vel_g[ig]) * n_pseudo[ig]); - forcesol(iat, 2) -= rho_basis->gcar[ig][2] * imag(conj(Vcav_g[ig]+Vel_g[ig]) * n_pseudo[ig]); + forcesol(iat, 0) -= rho_basis->gcar[ig][0] * imag(conj(Vcav_g[ig] + Vel_g[ig]) * n_pseudo[ig]); + forcesol(iat, 1) -= rho_basis->gcar[ig][1] * imag(conj(Vcav_g[ig] + Vel_g[ig]) * n_pseudo[ig]); + forcesol(iat, 2) -= rho_basis->gcar[ig][2] * imag(conj(Vcav_g[ig] + Vel_g[ig]) * n_pseudo[ig]); } - forcesol(iat, 0) *= (cell.tpiba * cell.omega); - forcesol(iat, 1) *= (cell.tpiba * cell.omega); - forcesol(iat, 2) *= (cell.tpiba * cell.omega); - //eV/Ang - forcesol(iat, 0) *= 2 ; - forcesol(iat, 1) *= 2 ; - forcesol(iat, 2) *= 2 ; + forcesol(iat, 0) *= (cell.tpiba * cell.omega); + forcesol(iat, 1) *= (cell.tpiba * cell.omega); + forcesol(iat, 2) *= (cell.tpiba * cell.omega); + // eV/Ang + forcesol(iat, 0) *= 2; + forcesol(iat, 1) *= 2; + forcesol(iat, 2) *= 2; - //cout<<"Force2"< all_type; }; -void construct_ucell(stru_ &stru, UnitCell &ucell) +void construct_ucell(stru_& stru, UnitCell& ucell) { std::vector coord = stru.all_type; ucell.a1 = ModuleBase::Vector3(stru.cell[0], stru.cell[1], stru.cell[2]); ucell.a2 = ModuleBase::Vector3(stru.cell[3], stru.cell[4], stru.cell[5]); ucell.a3 = ModuleBase::Vector3(stru.cell[6], stru.cell[7], stru.cell[8]); - ucell.latvec.e11 = stru.cell[0]; ucell.latvec.e12 = stru.cell[1]; ucell.latvec.e13 = stru.cell[2]; - ucell.latvec.e21 = stru.cell[3]; ucell.latvec.e22 = stru.cell[4]; ucell.latvec.e23 = stru.cell[5]; - ucell.latvec.e31 = stru.cell[6]; ucell.latvec.e32 = stru.cell[7]; ucell.latvec.e33 = stru.cell[8]; + ucell.latvec.e11 = stru.cell[0]; + ucell.latvec.e12 = stru.cell[1]; + ucell.latvec.e13 = stru.cell[2]; + ucell.latvec.e21 = stru.cell[3]; + ucell.latvec.e22 = stru.cell[4]; + ucell.latvec.e23 = stru.cell[5]; + ucell.latvec.e31 = stru.cell[6]; + ucell.latvec.e32 = stru.cell[7]; + ucell.latvec.e33 = stru.cell[8]; ucell.lat0 = 10.2; ucell.ntype = stru.all_type.size(); ucell.atoms = new Atom[ucell.ntype]; @@ -123,40 +134,38 @@ void construct_ucell(stru_ &stru, UnitCell &ucell) ucell.omega = std::abs(ucell.latvec.Det()) * ucell.lat0 * ucell.lat0 * ucell.lat0; ucell.itia2iat.create(ucell.ntype, nmax); - int iat=0; - for(int it = 0;it < ucell.ntype;it++) - { - for(int ia=0; ia{0.5,0.5,0.0,0.5,0.0,0.5,0.0,0.5,0.5}, - std::vector{atomtype_{"Si", - std::vector>{ - {0., 0., 0.}, - {0.3, 0.25, 0.25} - }}}}; - construct_ucell(structure,ucell); + void SetUp() + { + stru_ structure{ + std::vector{0.5, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.5}, + std::vector{atomtype_{"Si", std::vector>{{0., 0., 0.}, {0.3, 0.25, 0.25}}}}}; + construct_ucell(structure, ucell); input.vdw_method = "d2"; input.vdw_s6 = "0.75"; - input.vdw_d = 20; + input.vdw_d = 20; input.vdw_C6_file = "default"; input.vdw_C6_unit = "Jnm6/mol"; input.vdw_R0_file = "default"; @@ -166,7 +175,8 @@ class vdwd2Test: public testing::Test input.vdw_radius_unit = "Bohr"; } - void TearDown(){ + void TearDown() + { ClearUcell(ucell); } }; @@ -180,9 +190,10 @@ TEST_F(vdwd2Test, D2Default) EXPECT_EQ(vdwd2_test.parameter().damping(), input.vdw_d); EXPECT_EQ(vdwd2_test.parameter().model(), input.vdw_cutoff_type); EXPECT_EQ(vdwd2_test.parameter().radius_, 56.6918); - double Si_C6 = 9.23*1e6 / (ModuleBase::ELECTRONVOLT_SI * ModuleBase::NA) / pow(ModuleBase::BOHR_TO_A, 6)/ ModuleBase::Ry_to_eV; - EXPECT_NEAR(vdwd2_test.parameter().C6_["Si"], Si_C6,1e-13); - EXPECT_EQ(vdwd2_test.parameter().R0_["Si"], 1.716/ModuleBase::BOHR_TO_A); + double Si_C6 = 9.23 * 1e6 / (ModuleBase::ELECTRONVOLT_SI * ModuleBase::NA) / pow(ModuleBase::BOHR_TO_A, 6) + / ModuleBase::Ry_to_eV; + EXPECT_NEAR(vdwd2_test.parameter().C6_["Si"], Si_C6, 1e-13); + EXPECT_EQ(vdwd2_test.parameter().R0_["Si"], 1.716 / ModuleBase::BOHR_TO_A); EXPECT_EQ(vdwd2_test.parameter().period().x, 2 * ceil(56.6918 / ucell.lat0 / sqrt(ucell.a1.norm2())) + 1); EXPECT_EQ(vdwd2_test.parameter().period().y, 2 * ceil(56.6918 / ucell.lat0 / sqrt(ucell.a2.norm2())) + 1); EXPECT_EQ(vdwd2_test.parameter().period().z, 2 * ceil(56.6918 / ucell.lat0 / sqrt(ucell.a3.norm2())) + 1); @@ -192,11 +203,10 @@ TEST_F(vdwd2Test, WrongVdwType) { input.vdw_method = "d2d3"; testing::internal::CaptureStdout(); - EXPECT_EXIT( vdw::make_vdw(ucell, input); ,::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(vdw::make_vdw(ucell, input);, ::testing::ExitedWithCode(1), ""); std::string output = testing::internal::GetCapturedStdout(); } - // mohan comment out 2025-04-05 since the original code has been removed. // further investigation is needed. /* @@ -211,13 +221,13 @@ TEST_F(vdwd2Test, OneAtomWarning) GlobalV::ofs_warning.open("warning.log"); std::ifstream ifs; std::string output; - + std::unique_ptr vdw_test = vdw::make_vdw(ucell1, input); GlobalV::ofs_warning.close(); - ifs.open("warning.log"); - getline(ifs,output); - EXPECT_THAT(output,testing::HasSubstr("warning")); + ifs.open("warning.log"); + getline(ifs,output); + EXPECT_THAT(output,testing::HasSubstr("warning")); EXPECT_EQ(vdw_test,nullptr); ifs.close(); @@ -230,11 +240,12 @@ TEST_F(vdwd2Test, D2ReadFile) input.vdw_C6_file = "c6.txt"; input.vdw_R0_file = "r0.txt"; vdw::Vdwd2 vdwd2_test(ucell); - + vdwd2_test.parameter().initial_parameters(input); - double Si_C6 = 9.13*1e6 / (ModuleBase::ELECTRONVOLT_SI * ModuleBase::NA) / pow(ModuleBase::BOHR_TO_A, 6)/ ModuleBase::Ry_to_eV; - EXPECT_NEAR(vdwd2_test.parameter().C6_["Si"], Si_C6,1e-13); - EXPECT_EQ(vdwd2_test.parameter().R0_["Si"], 1.626/ModuleBase::BOHR_TO_A); + double Si_C6 = 9.13 * 1e6 / (ModuleBase::ELECTRONVOLT_SI * ModuleBase::NA) / pow(ModuleBase::BOHR_TO_A, 6) + / ModuleBase::Ry_to_eV; + EXPECT_NEAR(vdwd2_test.parameter().C6_["Si"], Si_C6, 1e-13); + EXPECT_EQ(vdwd2_test.parameter().R0_["Si"], 1.626 / ModuleBase::BOHR_TO_A); } TEST_F(vdwd2Test, D2ReadFileError) @@ -242,10 +253,14 @@ TEST_F(vdwd2Test, D2ReadFileError) input.vdw_C6_file = "c6_wrong.txt"; input.vdw_R0_file = "r0_wrong.txt"; vdw::Vdwd2 vdwd2_test(ucell); - + testing::internal::CaptureStdout(); - EXPECT_EXIT(vdwd2_test.parameter().C6_input(input.vdw_C6_file, input.vdw_C6_unit), ::testing::ExitedWithCode(1), ""); - EXPECT_EXIT(vdwd2_test.parameter().R0_input(input.vdw_R0_file, input.vdw_R0_unit), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(vdwd2_test.parameter().C6_input(input.vdw_C6_file, input.vdw_C6_unit), + ::testing::ExitedWithCode(1), + ""); + EXPECT_EXIT(vdwd2_test.parameter().R0_input(input.vdw_R0_file, input.vdw_R0_unit), + ::testing::ExitedWithCode(1), + ""); std::string output = testing::internal::GetCapturedStdout(); } @@ -256,7 +271,7 @@ TEST_F(vdwd2Test, D2c6UniteVA6) vdwd2_test.parameter().initial_parameters(input); double Si_C6 = 9.23 / pow(ModuleBase::BOHR_TO_A, 6) * ModuleBase::Ry_to_eV; - EXPECT_NEAR(vdwd2_test.parameter().C6_["Si"], Si_C6,1e-13); + EXPECT_NEAR(vdwd2_test.parameter().C6_["Si"], Si_C6, 1e-13); } TEST_F(vdwd2Test, D2r0UnitBohr) @@ -275,8 +290,12 @@ TEST_F(vdwd2Test, D2WrongUnit) vdw::Vdwd2 vdwd2_test(ucell); testing::internal::CaptureStdout(); - EXPECT_EXIT(vdwd2_test.parameter().C6_input(input.vdw_C6_file, input.vdw_C6_unit), ::testing::ExitedWithCode(1), ""); - EXPECT_EXIT(vdwd2_test.parameter().R0_input(input.vdw_R0_file, input.vdw_R0_unit), ::testing::ExitedWithCode(1), ""); + EXPECT_EXIT(vdwd2_test.parameter().C6_input(input.vdw_C6_file, input.vdw_C6_unit), + ::testing::ExitedWithCode(1), + ""); + EXPECT_EXIT(vdwd2_test.parameter().R0_input(input.vdw_R0_file, input.vdw_R0_unit), + ::testing::ExitedWithCode(1), + ""); std::string output = testing::internal::GetCapturedStdout(); } @@ -284,83 +303,79 @@ TEST_F(vdwd2Test, D2RadiusUnitAngstrom) { input.vdw_cutoff_radius = "56.6918"; input.vdw_radius_unit = "Angstrom"; - + vdw::Vdwd2 vdwd2_test(ucell); vdwd2_test.parameter().initial_parameters(input); - EXPECT_EQ(vdwd2_test.parameter().radius_, 56.6918/ModuleBase::BOHR_TO_A); + EXPECT_EQ(vdwd2_test.parameter().radius_, 56.6918 / ModuleBase::BOHR_TO_A); } TEST_F(vdwd2Test, D2CutoffTypePeriod) { input.vdw_cutoff_type = "period"; - input.vdw_cutoff_period = {3,3,3}; - + input.vdw_cutoff_period = {3, 3, 3}; + vdw::Vdwd2 vdwd2_test(ucell); vdwd2_test.parameter().initial_parameters(input); EXPECT_EQ(vdwd2_test.parameter().period(), input.vdw_cutoff_period); } TEST_F(vdwd2Test, D2R0ZeroQuit) -{ +{ vdw::Vdwd2 vdwd2_test(ucell); vdwd2_test.parameter().initial_parameters(input); vdwd2_test.parameter().R0_["Si"] = 0.0; - + testing::internal::CaptureStdout(); EXPECT_EXIT(vdwd2_test.get_energy(), ::testing::ExitedWithCode(1), ""); std::string output = testing::internal::GetCapturedStdout(); } TEST_F(vdwd2Test, D2GetEnergy) -{ +{ auto vdw_solver = vdw::make_vdw(ucell, input); double ene = vdw_solver->get_energy(); - EXPECT_NEAR(ene,-0.034526673470525196,1E-10); + EXPECT_NEAR(ene, -0.034526673470525196, 1E-10); } TEST_F(vdwd2Test, D2GetForce) -{ +{ auto vdw_solver = vdw::make_vdw(ucell, input); std::vector> force = vdw_solver->get_force(); - EXPECT_NEAR(force[0].x, -0.00078824525563651242,1e-12); - EXPECT_NEAR(force[0].y, 2.6299822052061785e-08,1e-12); - EXPECT_NEAR(force[0].z, 2.6299822050796364e-08,1e-12); - EXPECT_NEAR(force[1].x, 0.00078824525563651025,1e-12); - EXPECT_NEAR(force[1].y, -2.6299822051961511e-08,1e-12); - EXPECT_NEAR(force[1].z, -2.6299822050777911e-08,1e-12); + EXPECT_NEAR(force[0].x, -0.00078824525563651242, 1e-12); + EXPECT_NEAR(force[0].y, 2.6299822052061785e-08, 1e-12); + EXPECT_NEAR(force[0].z, 2.6299822050796364e-08, 1e-12); + EXPECT_NEAR(force[1].x, 0.00078824525563651025, 1e-12); + EXPECT_NEAR(force[1].y, -2.6299822051961511e-08, 1e-12); + EXPECT_NEAR(force[1].z, -2.6299822050777911e-08, 1e-12); } TEST_F(vdwd2Test, D2GetStress) -{ +{ auto vdw_solver = vdw::make_vdw(ucell, input); ModuleBase::Matrix3 stress = vdw_solver->get_stress(); - EXPECT_NEAR(stress.e11, -0.00020532319044269705,1e-12); - EXPECT_NEAR(stress.e12, -3.5642821939401251e-08,1e-12); - EXPECT_NEAR(stress.e13, -3.5642821939437223e-08,1e-12); - EXPECT_NEAR(stress.e21, -3.5642821939401251e-08,1e-12); - EXPECT_NEAR(stress.e22, -0.00020491799872060745,1e-12); - EXPECT_NEAR(stress.e23, -4.4369449138539291e-06,1e-12); - EXPECT_NEAR(stress.e31, -3.5642821939437223e-08,1e-12); - EXPECT_NEAR(stress.e32, -4.4369449138539291e-06,1e-12); - EXPECT_NEAR(stress.e33, -0.00020491799872060734,1e-12); -} - - - -class vdwd3Test: public testing::Test + EXPECT_NEAR(stress.e11, -0.00020532319044269705, 1e-12); + EXPECT_NEAR(stress.e12, -3.5642821939401251e-08, 1e-12); + EXPECT_NEAR(stress.e13, -3.5642821939437223e-08, 1e-12); + EXPECT_NEAR(stress.e21, -3.5642821939401251e-08, 1e-12); + EXPECT_NEAR(stress.e22, -0.00020491799872060745, 1e-12); + EXPECT_NEAR(stress.e23, -4.4369449138539291e-06, 1e-12); + EXPECT_NEAR(stress.e31, -3.5642821939437223e-08, 1e-12); + EXPECT_NEAR(stress.e32, -4.4369449138539291e-06, 1e-12); + EXPECT_NEAR(stress.e33, -0.00020491799872060734, 1e-12); +} + +class vdwd3Test : public testing::Test { - protected: + protected: UnitCell ucell; Input_para input; - void SetUp(){ - stru_ structure{std::vector{0.5,0.5,0.0,0.5,0.0,0.5,0.0,0.5,0.5}, - std::vector{atomtype_{"Si", - std::vector>{ - {0., 0., 0.}, - {0.3, 0.25, 0.25} - }}}}; - construct_ucell(structure,ucell); + void SetUp() + { + stru_ structure{ + std::vector{0.5, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.5}, + std::vector{atomtype_{"Si", std::vector>{{0., 0., 0.}, {0.3, 0.25, 0.25}}}}}; + construct_ucell(structure, ucell); input.vdw_method = "d3_0"; input.vdw_s6 = "1.0"; @@ -373,10 +388,11 @@ class vdwd3Test: public testing::Test input.vdw_cutoff_radius = "95"; input.vdw_cn_thr_unit = "Bohr"; input.vdw_cn_thr = 40; - input.vdw_cutoff_period = {3,3,3}; + input.vdw_cutoff_period = {3, 3, 3}; } - void TearDown(){ + void TearDown() + { ClearUcell(ucell); } }; @@ -394,7 +410,7 @@ TEST_F(vdwd3Test, D30Default) EXPECT_EQ(vdwd3_test.parameter().version(), "d3_0"); EXPECT_EQ(vdwd3_test.parameter().model(), "radius"); EXPECT_EQ(vdwd3_test.parameter().rthr2(), std::pow(95, 2)); - EXPECT_EQ(vdwd3_test.parameter().cn_thr2(), std::pow(40, 2)); + EXPECT_EQ(vdwd3_test.parameter().cn_thr2(), std::pow(40, 2)); } TEST_F(vdwd3Test, D30UnitA) @@ -406,8 +422,8 @@ TEST_F(vdwd3Test, D30UnitA) const std::string xc = "pbe"; vdwd3_test.parameter().initial_parameters(xc, input); - EXPECT_EQ(vdwd3_test.parameter().rthr2(), std::pow(95/ModuleBase::BOHR_TO_A, 2)); - EXPECT_EQ(vdwd3_test.parameter().cn_thr2(), std::pow(40/ModuleBase::BOHR_TO_A, 2)); + EXPECT_EQ(vdwd3_test.parameter().rthr2(), std::pow(95 / ModuleBase::BOHR_TO_A, 2)); + EXPECT_EQ(vdwd3_test.parameter().cn_thr2(), std::pow(40 / ModuleBase::BOHR_TO_A, 2)); } TEST_F(vdwd3Test, D30Period) @@ -421,93 +437,93 @@ TEST_F(vdwd3Test, D30Period) std::vector rep_vdw_ref = {input.vdw_cutoff_period.x, input.vdw_cutoff_period.y, input.vdw_cutoff_period.z}; EXPECT_EQ(vdwd3_test.parameter().period(), input.vdw_cutoff_period); - EXPECT_EQ(vdwd3_test.rep_vdw_, rep_vdw_ref); + EXPECT_EQ(vdwd3_test.rep_vdw_, rep_vdw_ref); } TEST_F(vdwd3Test, D30GetEnergy) -{ +{ auto vdw_solver = vdw::make_vdw(ucell, input); double ene = vdw_solver->get_energy(); - EXPECT_NEAR(ene,-0.20932367230529664,1E-10); + EXPECT_NEAR(ene, -0.20932367230529664, 1E-10); } TEST_F(vdwd3Test, D30GetForce) -{ +{ auto vdw_solver = vdw::make_vdw(ucell, input); std::vector> force = vdw_solver->get_force(); - EXPECT_NEAR(force[0].x, -0.032450975169023302,1e-12); - EXPECT_NEAR(force[0].y, 0.0,1e-12); - EXPECT_NEAR(force[0].z, 0.0,1e-12); - EXPECT_NEAR(force[1].x, 0.032450975169023302,1e-12); - EXPECT_NEAR(force[1].y, 0.0,1e-12); - EXPECT_NEAR(force[1].z, 0.0,1e-12); + EXPECT_NEAR(force[0].x, -0.032450975169023302, 1e-12); + EXPECT_NEAR(force[0].y, 0.0, 1e-12); + EXPECT_NEAR(force[0].z, 0.0, 1e-12); + EXPECT_NEAR(force[1].x, 0.032450975169023302, 1e-12); + EXPECT_NEAR(force[1].y, 0.0, 1e-12); + EXPECT_NEAR(force[1].z, 0.0, 1e-12); } TEST_F(vdwd3Test, D30GetStress) -{ +{ auto vdw_solver = vdw::make_vdw(ucell, input); ModuleBase::Matrix3 stress = vdw_solver->get_stress(); - EXPECT_NEAR(stress.e11, -0.0011141545452036336,1e-12); - EXPECT_NEAR(stress.e12, 0.0,1e-12); - EXPECT_NEAR(stress.e13, 0.0,1e-12); - EXPECT_NEAR(stress.e21, 0.0,1e-12); - EXPECT_NEAR(stress.e22, -0.0012740017248971929,1e-12); - EXPECT_NEAR(stress.e23, 0.00049503596239307496,1e-12); - EXPECT_NEAR(stress.e31, 0.0,1e-12); - EXPECT_NEAR(stress.e32, 0.00049503596239307496,1e-12); - EXPECT_NEAR(stress.e33, -0.0012740017248971936,1e-12); + EXPECT_NEAR(stress.e11, -0.0011141545452036336, 1e-12); + EXPECT_NEAR(stress.e12, 0.0, 1e-12); + EXPECT_NEAR(stress.e13, 0.0, 1e-12); + EXPECT_NEAR(stress.e21, 0.0, 1e-12); + EXPECT_NEAR(stress.e22, -0.0012740017248971929, 1e-12); + EXPECT_NEAR(stress.e23, 0.00049503596239307496, 1e-12); + EXPECT_NEAR(stress.e31, 0.0, 1e-12); + EXPECT_NEAR(stress.e32, 0.00049503596239307496, 1e-12); + EXPECT_NEAR(stress.e33, -0.0012740017248971936, 1e-12); } TEST_F(vdwd3Test, D3bjGetEnergy) -{ - input.vdw_method = "d3_bj"; +{ + input.vdw_method = "d3_bj"; auto vdw_solver = vdw::make_vdw(ucell, input); double ene = vdw_solver->get_energy(); - EXPECT_NEAR(ene,-0.047458675421836918,1E-10); + EXPECT_NEAR(ene, -0.047458675421836918, 1E-10); } TEST_F(vdwd3Test, D3bjGetForce) -{ +{ input.vdw_method = "d3_bj"; auto vdw_solver = vdw::make_vdw(ucell, input); std::vector> force = vdw_solver->get_force(); - EXPECT_NEAR(force[0].x, -0.0026006968781200602,1e-12); - EXPECT_NEAR(force[0].y, 0.0,1e-12); - EXPECT_NEAR(force[0].z, 0.0,1e-12); - EXPECT_NEAR(force[1].x, 0.0026006968781200602,1e-12); - EXPECT_NEAR(force[1].y, 0.0,1e-12); - EXPECT_NEAR(force[1].z, 0.0,1e-12); + EXPECT_NEAR(force[0].x, -0.0026006968781200602, 1e-12); + EXPECT_NEAR(force[0].y, 0.0, 1e-12); + EXPECT_NEAR(force[0].z, 0.0, 1e-12); + EXPECT_NEAR(force[1].x, 0.0026006968781200602, 1e-12); + EXPECT_NEAR(force[1].y, 0.0, 1e-12); + EXPECT_NEAR(force[1].z, 0.0, 1e-12); } TEST_F(vdwd3Test, D3bjGetStress) -{ +{ input.vdw_method = "d3_bj"; auto vdw_solver = vdw::make_vdw(ucell, input); ModuleBase::Matrix3 stress = vdw_solver->get_stress(); - EXPECT_NEAR(stress.e11, -0.00014376286737216365,1e-12); - EXPECT_NEAR(stress.e12, 0.0,1e-12); - EXPECT_NEAR(stress.e13, 0.0,1e-12); - EXPECT_NEAR(stress.e21, 0.0,1e-12); - EXPECT_NEAR(stress.e22, -0.00015350088004991452,1e-12); - EXPECT_NEAR(stress.e23, 1.8204947825641812e-05,1e-12); - EXPECT_NEAR(stress.e31, 0.0,1e-12); - EXPECT_NEAR(stress.e32, 1.8204947825641816e-05,1e-12); - EXPECT_NEAR(stress.e33, -0.0001535008800499145,1e-12); -} - - -class vdwd3abcTest: public testing::Test + EXPECT_NEAR(stress.e11, -0.00014376286737216365, 1e-12); + EXPECT_NEAR(stress.e12, 0.0, 1e-12); + EXPECT_NEAR(stress.e13, 0.0, 1e-12); + EXPECT_NEAR(stress.e21, 0.0, 1e-12); + EXPECT_NEAR(stress.e22, -0.00015350088004991452, 1e-12); + EXPECT_NEAR(stress.e23, 1.8204947825641812e-05, 1e-12); + EXPECT_NEAR(stress.e31, 0.0, 1e-12); + EXPECT_NEAR(stress.e32, 1.8204947825641816e-05, 1e-12); + EXPECT_NEAR(stress.e33, -0.0001535008800499145, 1e-12); +} + +class vdwd3abcTest : public testing::Test { - protected: + protected: UnitCell ucell; Input_para input; - void SetUp(){ + void SetUp() + { stru_ structure{ std::vector{0.75, 0.75, 0.0, 0.75, 0.0, 0.75, 0.0, 0.75, 0.75}, std::vector{atomtype_{"Si", std::vector>{{0., 0., 0.}, {0.3, 0.25, 0.25}}}, atomtype_{"C", std::vector>{{0.5, 0.5, 0.5}}}}}; - construct_ucell(structure,ucell); + construct_ucell(structure, ucell); input.vdw_method = "d3_0"; input.vdw_s6 = "1.0"; @@ -520,87 +536,87 @@ class vdwd3abcTest: public testing::Test input.vdw_cutoff_radius = "95"; input.vdw_cn_thr_unit = "Bohr"; input.vdw_cn_thr = 40; - input.vdw_cutoff_period = {3,3,3}; + input.vdw_cutoff_period = {3, 3, 3}; } - void TearDown(){ + void TearDown() + { ClearUcell(ucell); } }; - TEST_F(vdwd3abcTest, D30GetEnergy) -{ +{ auto vdw_solver = vdw::make_vdw(ucell, input); double ene = vdw_solver->get_energy(); - EXPECT_NEAR(ene,-0.11487062308916372,1E-10); + EXPECT_NEAR(ene, -0.11487062308916372, 1E-10); } TEST_F(vdwd3abcTest, D30GetForce) -{ +{ auto vdw_solver = vdw::make_vdw(ucell, input); std::vector> force = vdw_solver->get_force(); - EXPECT_NEAR(force[0].x, 0.030320738678429094,1e-12); - EXPECT_NEAR(force[0].y, 0.025570534655235538,1e-12); - EXPECT_NEAR(force[0].z, 0.025570534655235538,1e-12); - EXPECT_NEAR(force[1].x, -0.0067036811361536061,1e-12); - EXPECT_NEAR(force[1].y, 0.0037813111009633712,1e-12); - EXPECT_NEAR(force[1].z, 0.0037813111009634614,1e-12); + EXPECT_NEAR(force[0].x, 0.030320738678429094, 1e-12); + EXPECT_NEAR(force[0].y, 0.025570534655235538, 1e-12); + EXPECT_NEAR(force[0].z, 0.025570534655235538, 1e-12); + EXPECT_NEAR(force[1].x, -0.0067036811361536061, 1e-12); + EXPECT_NEAR(force[1].y, 0.0037813111009633712, 1e-12); + EXPECT_NEAR(force[1].z, 0.0037813111009634614, 1e-12); } TEST_F(vdwd3abcTest, D30GetStress) -{ +{ auto vdw_solver = vdw::make_vdw(ucell, input); ModuleBase::Matrix3 stress = vdw_solver->get_stress(); - EXPECT_NEAR(stress.e11, -0.00023421562840819491,1e-12); - EXPECT_NEAR(stress.e12, -0.00015112406243413323,1e-12); - EXPECT_NEAR(stress.e13, -0.00015112406243413302,1e-12); - EXPECT_NEAR(stress.e21, -0.00015112406243413323,1e-12); - EXPECT_NEAR(stress.e22, -0.00023139547090668657,1e-12); - EXPECT_NEAR(stress.e23, -0.00014931418741042754,1e-12); - EXPECT_NEAR(stress.e31, -0.00015112406243413302,1e-12); - EXPECT_NEAR(stress.e32, -0.00014931418741042754,1e-12); - EXPECT_NEAR(stress.e33, -0.00023139547090668714,1e-12); + EXPECT_NEAR(stress.e11, -0.00023421562840819491, 1e-12); + EXPECT_NEAR(stress.e12, -0.00015112406243413323, 1e-12); + EXPECT_NEAR(stress.e13, -0.00015112406243413302, 1e-12); + EXPECT_NEAR(stress.e21, -0.00015112406243413323, 1e-12); + EXPECT_NEAR(stress.e22, -0.00023139547090668657, 1e-12); + EXPECT_NEAR(stress.e23, -0.00014931418741042754, 1e-12); + EXPECT_NEAR(stress.e31, -0.00015112406243413302, 1e-12); + EXPECT_NEAR(stress.e32, -0.00014931418741042754, 1e-12); + EXPECT_NEAR(stress.e33, -0.00023139547090668714, 1e-12); } TEST_F(vdwd3abcTest, D3bjGetEnergy) -{ +{ input.vdw_method = "d3_bj"; auto vdw_solver = vdw::make_vdw(ucell, input); double ene = vdw_solver->get_energy(); - EXPECT_NEAR(ene,-0.030667806197006021,1E-10); + EXPECT_NEAR(ene, -0.030667806197006021, 1E-10); } TEST_F(vdwd3abcTest, D3bjGetForce) -{ +{ input.vdw_method = "d3_bj"; auto vdw_solver = vdw::make_vdw(ucell, input); std::vector> force = vdw_solver->get_force(); - EXPECT_NEAR(force[0].x, -0.0010630099217696475,1e-12); - EXPECT_NEAR(force[0].y, -0.0010031953309458587,1e-12); - EXPECT_NEAR(force[0].z, -0.0010031953309458642,1e-12); - EXPECT_NEAR(force[1].x, 0.00015471729604904047,1e-12); - EXPECT_NEAR(force[1].y,-0.00010902508913277635,1e-12); - EXPECT_NEAR(force[1].z, -0.00010902508913277528,1e-12); + EXPECT_NEAR(force[0].x, -0.0010630099217696475, 1e-12); + EXPECT_NEAR(force[0].y, -0.0010031953309458587, 1e-12); + EXPECT_NEAR(force[0].z, -0.0010031953309458642, 1e-12); + EXPECT_NEAR(force[1].x, 0.00015471729604904047, 1e-12); + EXPECT_NEAR(force[1].y, -0.00010902508913277635, 1e-12); + EXPECT_NEAR(force[1].z, -0.00010902508913277528, 1e-12); } TEST_F(vdwd3abcTest, D3bjGetStress) -{ +{ input.vdw_method = "d3_bj"; auto vdw_solver = vdw::make_vdw(ucell, input); ModuleBase::Matrix3 stress = vdw_solver->get_stress(); - EXPECT_NEAR(stress.e11, -3.3803329202372578e-05,1e-12); - EXPECT_NEAR(stress.e12, 5.1291622417145846e-06,1e-12); - EXPECT_NEAR(stress.e13, 5.1291622417145889e-06,1e-12); - EXPECT_NEAR(stress.e21, 5.1291622417145863e-06,1e-12); - EXPECT_NEAR(stress.e22, -3.427844212559098e-05,1e-12); - EXPECT_NEAR(stress.e23, 4.3904235877576825e-06,1e-12); - EXPECT_NEAR(stress.e31, 5.1291622417145914e-06,1e-12); - EXPECT_NEAR(stress.e32, 4.3904235877576833e-06,1e-12); - EXPECT_NEAR(stress.e33, -3.4278442125590892e-05,1e-12); -} - -int main(int argc, char **argv) + EXPECT_NEAR(stress.e11, -3.3803329202372578e-05, 1e-12); + EXPECT_NEAR(stress.e12, 5.1291622417145846e-06, 1e-12); + EXPECT_NEAR(stress.e13, 5.1291622417145889e-06, 1e-12); + EXPECT_NEAR(stress.e21, 5.1291622417145863e-06, 1e-12); + EXPECT_NEAR(stress.e22, -3.427844212559098e-05, 1e-12); + EXPECT_NEAR(stress.e23, 4.3904235877576825e-06, 1e-12); + EXPECT_NEAR(stress.e31, 5.1291622417145914e-06, 1e-12); + EXPECT_NEAR(stress.e32, 4.3904235877576833e-06, 1e-12); + EXPECT_NEAR(stress.e33, -3.4278442125590892e-05, 1e-12); +} + +int main(int argc, char** argv) { MPI_Init(&argc, &argv); testing::InitGoogleTest(&argc, argv); diff --git a/source/module_hamilt_general/module_vdw/vdw.cpp b/source/module_hamilt_general/module_vdw/vdw.cpp index 791200da72..ccf0212acc 100644 --- a/source/module_hamilt_general/module_vdw/vdw.cpp +++ b/source/module_hamilt_general/module_vdw/vdw.cpp @@ -1,13 +1,13 @@ -#include -#include - #include "vdw.h" + +#include "source_base/tool_quit.h" #include "vdwd2.h" #include "vdwd3.h" -#include "module_base/tool_quit.h" -std::string parse_xcname(const std::string &xc_input, - const std::vector &xc_psp) +#include +#include + +std::string parse_xcname(const std::string& xc_input, const std::vector& xc_psp) { if (xc_input != "default") { @@ -16,35 +16,32 @@ std::string parse_xcname(const std::string &xc_input, if (xc_psp.size() <= 0) { - ModuleBase::WARNING_QUIT("ModuleHamiltGeneral::ModuleVDW::parse_xcname", - "XC name automatic inference failed: no pseudopotential files are found"); + ModuleBase::WARNING_QUIT("ModuleHamiltGeneral::ModuleVDW::parse_xcname", + "XC name automatic inference failed: no pseudopotential files are found"); } std::vector xc_psp_uniq = xc_psp; std::sort(xc_psp_uniq.begin(), xc_psp_uniq.end()); auto last = std::unique(xc_psp_uniq.begin(), xc_psp_uniq.end()); xc_psp_uniq.erase(last, xc_psp_uniq.end()); - + if (xc_psp_uniq.size() > 1) { - ModuleBase::WARNING_QUIT("ModuleHamiltGeneral::ModuleVDW::parse_xcname", - "XC name automatic inference failed: inconsistency in XC names is found" - " in the pseudopotential files"); + ModuleBase::WARNING_QUIT("ModuleHamiltGeneral::ModuleVDW::parse_xcname", + "XC name automatic inference failed: inconsistency in XC names is found" + " in the pseudopotential files"); } const std::string xc = xc_psp_uniq[0]; std::cout << " ***WARNING*** ModuleHamiltGeneral::ModuleVDW::parse_xcname: " - << "XC name is automatically inferred from pseudopotential as `" - << xc << "`" << std::endl; + << "XC name is automatically inferred from pseudopotential as `" << xc << "`" << std::endl; return xc; } namespace vdw { -std::unique_ptr make_vdw(const UnitCell &ucell, - const Input_para &input, - std::ofstream* plog) +std::unique_ptr make_vdw(const UnitCell& ucell, const Input_para& input, std::ofstream* plog) { - // NOTE: the following lines are incorrect! + // NOTE: the following lines are incorrect! // NOTE: VDW interaction exists between images even if there is only one // NOTE: atom in cell. See issue#5401: https://github.com/deepmodeling/abacus-develop/issues/5401 // if (ucell.nat < 2 && input.vdw_method != "none") @@ -72,8 +69,8 @@ std::unique_ptr make_vdw(const UnitCell &ucell, } else if (input.vdw_method != "none") { - ModuleBase::WARNING_QUIT("ModuleHamiltGeneral::ModuleVDW::make_vdw", - "Unrecognized Van der Waals correction method: " + input.vdw_method); + ModuleBase::WARNING_QUIT("ModuleHamiltGeneral::ModuleVDW::make_vdw", + "Unrecognized Van der Waals correction method: " + input.vdw_method); return nullptr; } return nullptr; // "none" method diff --git a/source/module_hamilt_general/module_vdw/vdw_parameters.h b/source/module_hamilt_general/module_vdw/vdw_parameters.h index 68c3a4abe5..4972efd880 100644 --- a/source/module_hamilt_general/module_vdw/vdw_parameters.h +++ b/source/module_hamilt_general/module_vdw/vdw_parameters.h @@ -1,7 +1,7 @@ #ifndef VDW_PARAMETERS_H #define VDW_PARAMETERS_H -#include "module_base/vector3.h" +#include "source_base/vector3.h" #include @@ -14,8 +14,14 @@ class VdwParameters VdwParameters() = default; virtual ~VdwParameters() = default; - inline const std::string &model() const { return model_; } - inline const ModuleBase::Vector3 &period() const { return period_; }; + inline const std::string& model() const + { + return model_; + } + inline const ModuleBase::Vector3& period() const + { + return period_; + }; protected: std::string model_; diff --git a/source/module_hamilt_general/module_vdw/vdwd2.cpp b/source/module_hamilt_general/module_vdw/vdwd2.cpp index 0439683580..a1547332f6 100644 --- a/source/module_hamilt_general/module_vdw/vdwd2.cpp +++ b/source/module_hamilt_general/module_vdw/vdwd2.cpp @@ -5,7 +5,8 @@ //========================================================== #include "vdwd2.h" -#include "module_base/timer.h" + +#include "source_base/timer.h" namespace vdw { @@ -23,8 +24,8 @@ void Vdwd2::cal_energy() double r_sqr, int, int, - const ModuleBase::Vector3 &, - const ModuleBase::Vector3 &) { + const ModuleBase::Vector3&, + const ModuleBase::Vector3&) { const double tmp_damp_recip = 1 + exp(-para_.damping() * (r / R0_sum - 1)); energy_ -= C6_product / pow(r_sqr, 3) / tmp_damp_recip / 2; }; @@ -47,8 +48,8 @@ void Vdwd2::cal_force() double r_sqr, int it1, int ia1, - const ModuleBase::Vector3 &tau1, - const ModuleBase::Vector3 &tau2) { + const ModuleBase::Vector3& tau1, + const ModuleBase::Vector3& tau2) { const double tmp_exp = exp(-para_.damping() * (r / R0_sum - 1)); const double tmp_factor = C6_product / pow(r_sqr, 3) / r / (1 + tmp_exp) * (-6 / r + tmp_exp / (1 + tmp_exp) * para_.damping() / R0_sum); @@ -56,7 +57,7 @@ void Vdwd2::cal_force() }; index_loops(force); - std::for_each(force_.begin(), force_.end(), [&](ModuleBase::Vector3 &f) { + std::for_each(force_.begin(), force_.end(), [&](ModuleBase::Vector3& f) { f *= para_.scaling() / ucell_.lat0; }); ModuleBase::timer::tick("Vdwd2", "force"); @@ -75,16 +76,22 @@ void Vdwd2::cal_stress() double r_sqr, int it1, int ia1, - const ModuleBase::Vector3 &tau1, - const ModuleBase::Vector3 &tau2) { + const ModuleBase::Vector3& tau1, + const ModuleBase::Vector3& tau2) { const double tmp_exp = exp(-para_.damping() * (r / R0_sum - 1)); const double tmp_factor = C6_product / pow(r_sqr, 3) / r / (1 + tmp_exp) * (-6 / r + tmp_exp / (1 + tmp_exp) * para_.damping() / R0_sum); const ModuleBase::Vector3 dr = tau2 - tau1; stress_ += tmp_factor / 2 - * ModuleBase::Matrix3(dr.x * dr.x, dr.x * dr.y, dr.x * dr.z, - dr.y * dr.x, dr.y * dr.y, dr.y * dr.z, - dr.z * dr.x, dr.z * dr.y, dr.z * dr.z); + * ModuleBase::Matrix3(dr.x * dr.x, + dr.x * dr.y, + dr.x * dr.z, + dr.y * dr.x, + dr.y * dr.y, + dr.y * dr.z, + dr.z * dr.x, + dr.z * dr.y, + dr.z * dr.z); }; index_loops(stress); diff --git a/source/module_hamilt_general/module_vdw/vdwd3.cpp b/source/module_hamilt_general/module_vdw/vdwd3.cpp index b5b0798c63..4f8130ab41 100644 --- a/source/module_hamilt_general/module_vdw/vdwd3.cpp +++ b/source/module_hamilt_general/module_vdw/vdwd3.cpp @@ -6,10 +6,10 @@ #include "vdwd3.h" -#include "module_base/constants.h" -#include "module_base/element_name.h" -#include "module_base/global_function.h" -#include "module_base/timer.h" +#include "source_base/constants.h" +#include "source_base/element_name.h" +#include "source_base/global_function.h" +#include "source_base/timer.h" namespace vdw { @@ -24,35 +24,39 @@ void Vdwd3::init() std::vector at_kind = atom_kind(); iz_.reserve(ucell_.nat); xyz_.reserve(ucell_.nat); - for (size_t it = 0; it != ucell_.ntype; it++) { + for (size_t it = 0; it != ucell_.ntype; it++) + { for (size_t ia = 0; ia != ucell_.atoms[it].na; ia++) { iz_.emplace_back(at_kind[it]); xyz_.emplace_back(ucell_.atoms[it].tau[ia] * ucell_.lat0); } -} + } std::vector tau_max(3); if (para_.model() == "radius") { rep_vdw_.resize(3); set_criteria(para_.rthr2(), lat_, tau_max); - for (size_t i = 0; i < 3; i++) { + for (size_t i = 0; i < 3; i++) + { rep_vdw_[i] = std::ceil(tau_max[i]); -} + } } - else if (para_.model() == "period") { + else if (para_.model() == "period") + { rep_vdw_ = {para_.period().x, para_.period().y, para_.period().z}; -} + } rep_cn_.resize(3); set_criteria(para_.cn_thr2(), lat_, tau_max); - for (size_t i = 0; i < 3; i++) { + for (size_t i = 0; i < 3; i++) + { rep_cn_[i] = ceil(tau_max[i]); -} + } } -void Vdwd3::set_criteria(double rthr, const std::vector> &lat, std::vector &tau_max) +void Vdwd3::set_criteria(double rthr, const std::vector>& lat, std::vector& tau_max) { tau_max.resize(3); double r_cutoff = std::sqrt(rthr); @@ -70,15 +74,17 @@ void Vdwd3::set_criteria(double rthr, const std::vector Vdwd3::atom_kind() { std::vector atom_kind(ucell_.ntype); - for (size_t i = 0; i != ucell_.ntype; i++) { - for (int j = 0; j != ModuleBase::element_name.size(); j++) { + for (size_t i = 0; i != ucell_.ntype; i++) + { + for (int j = 0; j != ModuleBase::element_name.size(); j++) + { if (ucell_.atoms[i].ncpp.psd == ModuleBase::element_name[j]) { atom_kind[i] = j; break; } -} -} + } + } return atom_kind; } @@ -97,7 +103,8 @@ void Vdwd3::cal_energy() if (para_.version() == "d3_0") // DFT-D3(zero-damping) { double tmp; - for (int iat = 0; iat != ucell_.nat - 1; iat++) { + for (int iat = 0; iat != ucell_.nat - 1; iat++) + { for (int jat = iat + 1; jat != ucell_.nat; jat++) { get_c6(iz_[iat], iz_[jat], cn[iat], cn[jat], c6); @@ -106,16 +113,19 @@ void Vdwd3::cal_energy() ij = lin(iat, jat); cc6ab[ij] = std::sqrt(c6); } - for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) { - for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) { + for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) + { + for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) + { for (int tauz = -rep_vdw_[2]; tauz <= rep_vdw_[2]; tauz++) { tau = static_cast(taux) * lat_[0] + static_cast(tauy) * lat_[1] + static_cast(tauz) * lat_[2]; r2 = (xyz_[iat] - xyz_[jat] + tau).norm2(); // |r+T|^2 - if (r2 > para_.rthr2()) { // neglect the distance larger than rthr2 + if (r2 > para_.rthr2()) + { // neglect the distance larger than rthr2 continue; -} + } rr = para_.r0ab()[iz_[iat]][iz_[jat]] / std::sqrt(r2); // zero-damping function tmp = para_.rs6() * rr; @@ -130,10 +140,10 @@ void Vdwd3::cal_energy() r8 = r6 * r2; e8 += c8 * damp8 / r8; } // end tau -} -} + } + } } // end jat -} + } for (int iat = 0; iat != ucell_.nat; iat++) { @@ -144,19 +154,23 @@ void Vdwd3::cal_energy() ij = lin(iat, jat); cc6ab[ij] = std::sqrt(c6); } - for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) { - for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) { + for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) + { + for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) + { for (int tauz = -rep_vdw_[2]; tauz <= rep_vdw_[2]; tauz++) { - if (taux == 0 && tauy == 0 && tauz == 0) { + if (taux == 0 && tauy == 0 && tauz == 0) + { continue; -} + } tau = static_cast(taux) * lat_[0] + static_cast(tauy) * lat_[1] + static_cast(tauz) * lat_[2]; r2 = tau.norm2(); - if (r2 > para_.rthr2()) { + if (r2 > para_.rthr2()) + { continue; -} + } rr = para_.r0ab()[iz_[iat]][iz_[jat]] / std::sqrt(r2); // zero-damping function @@ -172,10 +186,10 @@ void Vdwd3::cal_energy() r8 = r6 * r2; e8 += c8 * damp8 / r8 * 0.5; } // end tau -} -} - } // end iat - } // end d3_0 + } + } + } // end iat + } // end d3_0 else if (para_.version() == "d3_bj") // DFT-D3(BJ-damping) { double r42; @@ -189,16 +203,19 @@ void Vdwd3::cal_energy() ij = lin(iat, jat); cc6ab[ij] = std::sqrt(c6); } - for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) { - for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) { + for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) + { + for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) + { for (int tauz = -rep_vdw_[2]; tauz <= rep_vdw_[2]; tauz++) { tau = static_cast(taux) * lat_[0] + static_cast(tauy) * lat_[1] + static_cast(tauz) * lat_[2]; r2 = (xyz_[iat] - xyz_[jat] + tau).norm2(); - if (r2 > para_.rthr2()) { + if (r2 > para_.rthr2()) + { continue; -} + } rr = para_.r0ab()[iz_[iat]][iz_[jat]] / std::sqrt(r2); // BJ-damping function @@ -213,8 +230,8 @@ void Vdwd3::cal_energy() r8 = r6 * r2; e8 += c8 / (r8 + damp8); } // end tau -} -} + } + } } // end jat int jat = iat; get_c6(iz_[iat], iz_[jat], cn[iat], cn[jat], c6); @@ -226,19 +243,23 @@ void Vdwd3::cal_energy() ij = lin(iat, jat); cc6ab[ij] = std::sqrt(c6); } - for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) { - for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) { + for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) + { + for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) + { for (int tauz = -rep_vdw_[2]; tauz <= rep_vdw_[2]; tauz++) { - if (taux == 0 && tauy == 0 && tauz == 0) { + if (taux == 0 && tauy == 0 && tauz == 0) + { continue; -} + } tau = static_cast(taux) * lat_[0] + static_cast(tauy) * lat_[1] + static_cast(tauz) * lat_[2]; r2 = tau.norm2(); - if (r2 > para_.rthr2()) { + if (r2 > para_.rthr2()) + { continue; -} + } rr = para_.r0ab()[iz_[iat]][iz_[jat]] / std::sqrt(r2); r6 = std::pow(r2, 3); @@ -248,10 +269,10 @@ void Vdwd3::cal_energy() r8 = r6 * r2; e8 += c8 / (r8 + damp8) * 0.5; } // end tau -} -} + } + } } // end iat - } // end d3_bj + } // end d3_bj if (para_.abc()) { @@ -277,9 +298,10 @@ void Vdwd3::cal_force() pbc_gdisp(g, smearing_sigma); - for (size_t iat = 0; iat != ucell_.nat; iat++) { + for (size_t iat = 0; iat != ucell_.nat; iat++) + { force_[iat] = -2.0 * g[iat]; -} + } ModuleBase::timer::tick("Vdwd3", "cal_force"); } @@ -297,18 +319,25 @@ void Vdwd3::cal_stress() pbc_gdisp(g, smearing_sigma); - stress_ = ModuleBase::Matrix3(2.0 * smearing_sigma(0, 0), 2.0 * smearing_sigma(0, 1), 2.0 * smearing_sigma(0, 2), - 2.0 * smearing_sigma(1, 0), 2.0 * smearing_sigma(1, 1), 2.0 * smearing_sigma(1, 2), - 2.0 * smearing_sigma(2, 0), 2.0 * smearing_sigma(2, 1), 2.0 * smearing_sigma(2, 2)) + stress_ = ModuleBase::Matrix3(2.0 * smearing_sigma(0, 0), + 2.0 * smearing_sigma(0, 1), + 2.0 * smearing_sigma(0, 2), + 2.0 * smearing_sigma(1, 0), + 2.0 * smearing_sigma(1, 1), + 2.0 * smearing_sigma(1, 2), + 2.0 * smearing_sigma(2, 0), + 2.0 * smearing_sigma(2, 1), + 2.0 * smearing_sigma(2, 2)) / ucell_.omega; ModuleBase::timer::tick("Vdwd3", "cal_stress"); } -void Vdwd3::get_c6(int iat, int jat, double nci, double ncj, double &c6) +void Vdwd3::get_c6(int iat, int jat, double nci, double ncj, double& c6) { double c6mem = -1e99, rsum = 0.0, csum = 0.0, r_save = 1e99; double cn1, cn2, r; - for (size_t i = 0; i != para_.mxc()[iat]; i++) { + for (size_t i = 0; i != para_.mxc()[iat]; i++) + { for (size_t j = 0; j != para_.mxc()[jat]; j++) { c6 = para_.c6ab()[0][j][i][jat][iat]; @@ -327,54 +356,60 @@ void Vdwd3::get_c6(int iat, int jat, double nci, double ncj, double &c6) csum += tmp1 * c6; } } -} + } c6 = (rsum > 1e-99) ? csum / rsum : c6mem; } -void Vdwd3::pbc_ncoord(std::vector &cn) +void Vdwd3::pbc_ncoord(std::vector& cn) { for (size_t i = 0; i != ucell_.nat; i++) { double xn = 0.0; ModuleBase::Vector3 tau; double r2, rr; - for (size_t iat = 0; iat != ucell_.nat; iat++) { - for (int taux = -rep_cn_[0]; taux <= rep_cn_[0]; taux++) { - for (int tauy = -rep_cn_[1]; tauy <= rep_cn_[1]; tauy++) { + for (size_t iat = 0; iat != ucell_.nat; iat++) + { + for (int taux = -rep_cn_[0]; taux <= rep_cn_[0]; taux++) + { + for (int tauy = -rep_cn_[1]; tauy <= rep_cn_[1]; tauy++) + { for (int tauz = -rep_cn_[2]; tauz <= rep_cn_[2]; tauz++) { - if (iat == i && taux == 0 && tauy == 0 && tauz == 0) { + if (iat == i && taux == 0 && tauy == 0 && tauz == 0) + { continue; -} + } tau = static_cast(taux) * lat_[0] + static_cast(tauy) * lat_[1] + static_cast(tauz) * lat_[2]; r2 = (xyz_[iat] - xyz_[i] + tau).norm2(); - if (r2 > para_.cn_thr2()) { + if (r2 > para_.cn_thr2()) + { continue; -} + } rr = (para_.rcov()[iz_[i]] + para_.rcov()[iz_[iat]]) / std::sqrt(r2); xn += 1.0 / (1.0 + exp(-para_.k1() * (rr - 1.0))); } -} -} -} + } + } + } cn[i] = xn; } } -void Vdwd3::pbc_three_body(const std::vector &iz, - const std::vector> &lat, - const std::vector> &xyz, - const std::vector &rep_cn, - const std::vector &cc6ab, - double &eabc) +void Vdwd3::pbc_three_body(const std::vector& iz, + const std::vector>& lat, + const std::vector>& xyz, + const std::vector& rep_cn, + const std::vector& cc6ab, + double& eabc) { double sr9 = 0.75, alp9 = -16.0; int ij, ik, jk; double r0ij, r0ik, r0jk, c9, rij2, rik2, rjk2, rr0ij, rr0ik, rr0jk, geomean, fdamp, tmp1, tmp2, tmp3, tmp4, ang; ModuleBase::Vector3 ijvec, ikvec, jkvec, jtau, ktau; std::vector repmin(3), repmax(3); - for (int iat = 2; iat != ucell_.nat; iat++) { + for (int iat = 2; iat != ucell_.nat; iat++) + { for (int jat = 1; jat != iat; jat++) { ijvec = xyz_[jat] - xyz_[iat]; @@ -406,28 +441,33 @@ void Vdwd3::pbc_three_body(const std::vector &iz, jtau = static_cast(jtaux) * lat_[0] + static_cast(jtauy) * lat_[1] + static_cast(jtauz) * lat_[2]; rij2 = (ijvec + jtau).norm2(); - if (rij2 > para_.cn_thr2()) { + if (rij2 > para_.cn_thr2()) + { continue; -} + } rr0ij = std::sqrt(rij2) / r0ij; - for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) { - for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) { + for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) + { + for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) + { for (int ktauz = repmin[2]; ktauz <= repmax[2]; ktauz++) { ktau = static_cast(ktaux) * lat_[0] + static_cast(ktauy) * lat_[1] + static_cast(ktauz) * lat_[2]; rik2 = (ikvec + ktau).norm2(); - if (rik2 > para_.cn_thr2()) { + if (rik2 > para_.cn_thr2()) + { continue; -} + } rr0ik = std::sqrt(rik2) / r0ik; rjk2 = (jkvec + ktau - jtau).norm2(); - if (rjk2 > para_.cn_thr2()) { + if (rjk2 > para_.cn_thr2()) + { continue; -} + } rr0jk = std::sqrt(rjk2) / r0jk; geomean = std::pow(rr0ij * rr0ik * rr0jk, 1.0 / 3.0); @@ -441,14 +481,14 @@ void Vdwd3::pbc_three_body(const std::vector &iz, eabc += ang * c9 * fdamp; } // end ktau -} -} + } + } } // end jtauz - } // end jtauy - } // end jtaux - } // end kat - } // end jat -} + } // end jtauy + } // end jtaux + } // end kat + } // end jat + } // end iat for (int iat = 1; iat != ucell_.nat; iat++) @@ -479,33 +519,39 @@ void Vdwd3::pbc_three_body(const std::vector &iz, { repmin[2] = std::max(-rep_cn_[2], jtauz - rep_cn_[2]); repmax[2] = std::min(rep_cn_[2], jtauz + rep_cn_[2]); - if (jtaux == 0 && jtauy == 0 && jtauz == 0) { + if (jtaux == 0 && jtauy == 0 && jtauz == 0) + { continue; -} + } jtau = static_cast(jtaux) * lat_[0] + static_cast(jtauy) * lat_[1] + static_cast(jtauz) * lat_[2]; rij2 = (ijvec + jtau).norm2(); - if (rij2 > para_.cn_thr2()) { + if (rij2 > para_.cn_thr2()) + { continue; -} + } rr0ij = std::sqrt(rij2) / r0ij; - for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) { - for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) { + for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) + { + for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) + { for (int ktauz = repmin[2]; ktauz <= repmax[2]; ktauz++) { ktau = static_cast(ktaux) * lat_[0] + static_cast(ktauy) * lat_[1] + static_cast(ktauz) * lat_[2]; rik2 = (ikvec + ktau).norm2(); - if (rik2 > para_.cn_thr2()) { + if (rik2 > para_.cn_thr2()) + { continue; -} + } rr0ik = std::sqrt(rik2) / r0ik; rjk2 = (jkvec + ktau - jtau).norm2(); - if (rjk2 > para_.cn_thr2()) { + if (rjk2 > para_.cn_thr2()) + { continue; -} + } rr0jk = std::sqrt(rjk2) / r0jk; geomean = std::pow(rr0ij * rr0ik * rr0jk, 1.0 / 3.0); @@ -519,15 +565,16 @@ void Vdwd3::pbc_three_body(const std::vector &iz, eabc += ang * c9 * fdamp / 2.0; } // end ktau -} -} + } + } } // end jtauz - } // end jtauy - } // end jtaux - } // end kat - } // end iat + } // end jtauy + } // end jtaux + } // end kat + } // end iat - for (int iat = 1; iat != ucell_.nat; iat++) { + for (int iat = 1; iat != ucell_.nat; iat++) + { for (int jat = 0; jat != iat; jat++) { int kat = jat; @@ -558,30 +605,36 @@ void Vdwd3::pbc_three_body(const std::vector &iz, jtau = static_cast(jtaux) * lat_[0] + static_cast(jtauy) * lat_[1] + static_cast(jtauz) * lat_[2]; rij2 = (ijvec + jtau).norm2(); - if (rij2 > para_.cn_thr2()) { + if (rij2 > para_.cn_thr2()) + { continue; -} + } rr0ij = std::sqrt(rij2) / r0ij; - for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) { - for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) { + for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) + { + for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) + { for (int ktauz = repmin[2]; ktauz <= repmax[2]; ktauz++) { - if (jtaux == ktaux && jtauy == ktauy && jtauz == ktauz) { + if (jtaux == ktaux && jtauy == ktauy && jtauz == ktauz) + { continue; -} + } ktau = static_cast(ktaux) * lat_[0] + static_cast(ktauy) * lat_[1] + static_cast(ktauz) * lat_[2]; rik2 = (ikvec + ktau).norm2(); - if (rik2 > para_.cn_thr2()) { + if (rik2 > para_.cn_thr2()) + { continue; -} + } rr0ik = std::sqrt(rik2) / r0ik; rjk2 = (jkvec + ktau - jtau).norm2(); - if (rjk2 > para_.cn_thr2()) { + if (rjk2 > para_.cn_thr2()) + { continue; -} + } rr0jk = std::sqrt(rjk2) / r0jk; geomean = std::pow(rr0ij * rr0ik * rr0jk, 1.0 / 3.0); @@ -595,13 +648,13 @@ void Vdwd3::pbc_three_body(const std::vector &iz, eabc += ang * c9 * fdamp / 2.0; } // end ktau -} -} + } + } } // end jtauz - } // end jtauy - } // end jtaux - } // end jat -} + } // end jtauy + } // end jtaux + } // end jat + } // end iat for (int iat = 0; iat != ucell_.nat; iat++) @@ -634,37 +687,45 @@ void Vdwd3::pbc_three_body(const std::vector &iz, repmax[2] = std::min(rep_cn_[2], jtauz + rep_cn_[2]); jtau = static_cast(jtaux) * lat_[0] + static_cast(jtauy) * lat_[1] + static_cast(jtauz) * lat_[2]; - if (jtaux == 0 && jtauy == 0 && jtauz == 0) { + if (jtaux == 0 && jtauy == 0 && jtauz == 0) + { continue; -} + } rij2 = jtau.norm2(); - if (rij2 > para_.cn_thr2()) { + if (rij2 > para_.cn_thr2()) + { continue; -} + } rr0ij = std::sqrt(rij2) / r0ij; - for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) { - for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) { + for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) + { + for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) + { for (int ktauz = repmin[2]; ktauz <= repmax[2]; ktauz++) { - if (ktaux == 0 && ktauy == 0 && ktauz == 0) { + if (ktaux == 0 && ktauy == 0 && ktauz == 0) + { continue; -} - if (jtaux == ktaux && jtauy == ktauy && jtauz == ktauz) { + } + if (jtaux == ktaux && jtauy == ktauy && jtauz == ktauz) + { continue; -} + } ktau = static_cast(ktaux) * lat_[0] + static_cast(ktauy) * lat_[1] + static_cast(ktauz) * lat_[2]; rik2 = ktau.norm2(); - if (rik2 > para_.cn_thr2()) { + if (rik2 > para_.cn_thr2()) + { continue; -} + } rr0ik = std::sqrt(rik2) / r0ik; rjk2 = (jkvec + ktau - jtau).norm2(); - if (rjk2 > para_.cn_thr2()) { + if (rjk2 > para_.cn_thr2()) + { continue; -} + } rr0jk = std::sqrt(rjk2) / r0jk; geomean = std::pow(rr0ij * rr0ik * rr0jk, 1.0 / 3.0); @@ -678,21 +739,31 @@ void Vdwd3::pbc_three_body(const std::vector &iz, eabc += ang * c9 * fdamp / 6.0; } // end ktau -} -} + } + } } // end jtauz - } // end jtauy - } // end jtaux - } // end iat -} - -void Vdwd3::get_dc6_dcnij(int mxci, int mxcj, double cni, double cnj, int izi, int izj, - int iat, int jat, double &c6check, double &dc6i, double &dc6j) + } // end jtauy + } // end jtaux + } // end iat +} + +void Vdwd3::get_dc6_dcnij(int mxci, + int mxcj, + double cni, + double cnj, + int izi, + int izj, + int iat, + int jat, + double& c6check, + double& dc6i, + double& dc6j) { double r_save = 9999.0, c6mem = -1e99, zaehler = 0.0, nenner = 0.0; double dzaehler_i = 0.0, dnenner_i = 0.0, dzaehler_j = 0.0, dnenner_j = 0.0; double c6ref = 0.0, cn_refi = 0.0, cn_refj = 0.0, r = 0.0, expterm = 0.0, term = 0.0; - for (size_t a = 0; a != mxci; a++) { + for (size_t a = 0; a != mxci; a++) + { for (size_t b = 0; b != mxcj; b++) { c6ref = para_.c6ab()[0][b][a][izj][izi]; @@ -719,7 +790,7 @@ void Vdwd3::get_dc6_dcnij(int mxci, int mxcj, double cni, double cnj, int izi, i dnenner_j += term; } } -} + } if (nenner > 1e-99) { @@ -735,7 +806,7 @@ void Vdwd3::get_dc6_dcnij(int mxci, int mxcj, double cni, double cnj, int izi, i } } -void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::matrix &smearing_sigma) +void Vdwd3::pbc_gdisp(std::vector>& g, ModuleBase::matrix& smearing_sigma) { std::vector c6save(ucell_.nat * (ucell_.nat + 1)), dc6_rest_sum(ucell_.nat * (ucell_.nat + 1) / 2), dc6i(ucell_.nat), cn(ucell_.nat); @@ -756,8 +827,17 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m double damp6 = 0.0, damp8 = 0.0; for (int iat = 0; iat != ucell_.nat; iat++) { - get_dc6_dcnij(para_.mxc()[iz_[iat]], para_.mxc()[iz_[iat]], cn[iat], cn[iat], - iz_[iat], iz_[iat], iat, iat, c6, dc6iji, dc6ijj); + get_dc6_dcnij(para_.mxc()[iz_[iat]], + para_.mxc()[iz_[iat]], + cn[iat], + cn[iat], + iz_[iat], + iz_[iat], + iat, + iat, + c6, + dc6iji, + dc6ijj); linii = lin(iat, iat); c6save[linii] = c6; @@ -766,8 +846,10 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m r42 = para_.r2r4()[iz_[iat]] * para_.r2r4()[iz_[iat]]; rcovij = para_.rcov()[iz_[iat]] + para_.rcov()[iz_[iat]]; - for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) { - for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) { + for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) + { + for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) + { for (int tauz = -rep_vdw_[2]; tauz <= rep_vdw_[2]; tauz++) { tau = static_cast(taux) * lat_[0] + static_cast(tauy) * lat_[1] @@ -804,12 +886,21 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m dc6_rest_sum[linii] += dc6_rest; } } // end tau -} -} + } + } for (int jat = 0; jat != iat; jat++) { - get_dc6_dcnij(para_.mxc()[iz_[iat]], para_.mxc()[iz_[jat]], cn[iat], cn[jat], - iz_[iat], iz_[jat], iat, jat, c6, dc6iji, dc6ijj); + get_dc6_dcnij(para_.mxc()[iz_[iat]], + para_.mxc()[iz_[jat]], + cn[iat], + cn[jat], + iz_[iat], + iz_[jat], + iat, + jat, + c6, + dc6iji, + dc6ijj); linij = lin(iat, jat); c6save[linij] = c6; @@ -818,16 +909,19 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m rcovij = para_.rcov()[iz_[iat]] + para_.rcov()[iz_[jat]]; dc6ij[jat][iat] = dc6iji; dc6ij[iat][jat] = dc6ijj; - for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) { - for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) { + for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) + { + for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) + { for (int tauz = -rep_vdw_[2]; tauz <= rep_vdw_[2]; tauz++) { tau = static_cast(taux) * lat_[0] + static_cast(tauy) * lat_[1] + static_cast(tauz) * lat_[2]; r2 = (xyz_[jat] - xyz_[iat] + tau).norm2(); - if (r2 > para_.rthr2()) { + if (r2 > para_.rthr2()) + { continue; -} + } r = std::sqrt(r2); r6 = std::pow(r2, 3); @@ -853,18 +947,27 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m dc6i[jat] += dc6_rest * dc6ijj; dc6_rest_sum[linij] += dc6_rest; } // end tau -} -} + } + } } // end jat - } // end iat - } // end d3_0 + } // end iat + } // end d3_0 else if (para_.version() == "d3_bj") { double r4; for (int iat = 0; iat != ucell_.nat; iat++) { - get_dc6_dcnij(para_.mxc()[iz_[iat]], para_.mxc()[iz_[iat]], cn[iat], cn[iat], - iz_[iat], iz_[iat], iat, iat, c6, dc6iji, dc6ijj); + get_dc6_dcnij(para_.mxc()[iz_[iat]], + para_.mxc()[iz_[iat]], + cn[iat], + cn[iat], + iz_[iat], + iz_[iat], + iat, + iat, + c6, + dc6iji, + dc6ijj); linii = lin(iat, iat); c6save[linii] = c6; @@ -873,8 +976,10 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m r0 = para_.rs6() * std::sqrt(3.0 * r42) + para_.rs18(); rcovij = para_.rcov()[iz_[iat]] + para_.rcov()[iz_[iat]]; - for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) { - for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) { + for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) + { + for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) + { for (int tauz = -rep_vdw_[2]; tauz <= rep_vdw_[2]; tauz++) { tau = static_cast(taux) * lat_[0] + static_cast(tauy) * lat_[1] @@ -904,12 +1009,21 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m dc6_rest_sum[linii] += dc6_rest; } } // end tau -} -} + } + } for (int jat = 0; jat != iat; jat++) { - get_dc6_dcnij(para_.mxc()[iz_[iat]], para_.mxc()[iz_[jat]], cn[iat], cn[jat], - iz_[iat], iz_[jat], iat, jat, c6, dc6iji, dc6ijj); + get_dc6_dcnij(para_.mxc()[iz_[iat]], + para_.mxc()[iz_[jat]], + cn[iat], + cn[jat], + iz_[iat], + iz_[jat], + iat, + jat, + c6, + dc6iji, + dc6ijj); linij = lin(iat, jat); c6save[linij] = c6; @@ -918,16 +1032,19 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m rcovij = para_.rcov()[iz_[iat]] + para_.rcov()[iz_[jat]]; dc6ij[jat][iat] = dc6iji; dc6ij[iat][jat] = dc6ijj; - for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) { - for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) { + for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) + { + for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) + { for (int tauz = -rep_vdw_[2]; tauz <= rep_vdw_[2]; tauz++) { tau = static_cast(taux) * lat_[0] + static_cast(tauy) * lat_[1] + static_cast(tauz) * lat_[2]; r2 = (xyz_[jat] - xyz_[iat] + tau).norm2(); - if (r2 > para_.rthr2()) { + if (r2 > para_.rthr2()) + { continue; -} + } r = std::sqrt(r2); r4 = r2 * r2; @@ -948,11 +1065,11 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m dc6i[jat] += dc6_rest * dc6ijj; dc6_rest_sum[linij] += dc6_rest; } // end tau -} -} + } + } } // end jat - } // end iat - } // end d3_bj + } // end iat + } // end d3_bj if (para_.abc()) { @@ -995,27 +1112,32 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m jtau = static_cast(jtaux) * lat_[0] + static_cast(jtauy) * lat_[1] + static_cast(jtauz) * lat_[2]; rij2 = (ijvec + jtau).norm2(); - if (rij2 > para_.cn_thr2()) { + if (rij2 > para_.cn_thr2()) + { continue; -} + } rr0ij = std::sqrt(rij2) / para_.r0ab()[iz_[jat]][iz_[iat]]; - for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) { - for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) { + for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) + { + for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) + { for (int ktauz = repmin[2]; ktauz <= repmax[2]; ktauz++) { ktau = static_cast(ktaux) * lat_[0] + static_cast(ktauy) * lat_[1] + static_cast(ktauz) * lat_[2]; rik2 = (ikvec + ktau).norm2(); - if (rik2 > para_.cn_thr2()) { + if (rik2 > para_.cn_thr2()) + { continue; -} + } rjk2 = (jkvec + ktau - jtau).norm2(); - if (rjk2 > para_.cn_thr2()) { + if (rjk2 > para_.cn_thr2()) + { continue; -} + } rr0ik = std::sqrt(rik2) / para_.r0ab()[iz_[kat]][iz_[iat]]; rr0jk = std::sqrt(rjk2) / para_.r0ab()[iz_[kat]][iz_[jat]]; @@ -1033,8 +1155,9 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m r = std::sqrt(rij2); dang = -0.375 * (std::pow(rij2, 3) + std::pow(rij2, 2) * (rjk2 + rik2) - + rij2 * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rik2 - + 3.0 * std::pow(rik2, 2)) + + rij2 + * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rik2 + + 3.0 * std::pow(rik2, 2)) - 5.0 * std::pow(rjk2 - rik2, 2) * (rjk2 + rik2)) / (r * geomean3 * geomean2); tmp1 = -dang * c9 * damp9 + dfdmp / r * c9 * ang; @@ -1044,8 +1167,9 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m r = std::sqrt(rik2); dang = -0.375 * (std::pow(rik2, 3) + std::pow(rik2, 2) * (rjk2 + rij2) - + rik2 * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rij2 - + 3.0 * std::pow(rij2, 2)) + + rik2 + * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rij2 + + 3.0 * std::pow(rij2, 2)) - 5.0 * std::pow(rjk2 - rij2, 2) * (rjk2 + rij2)) / (r * geomean3 * geomean2); tmp1 = -dang * c9 * damp9 + dfdmp / r * c9 * ang; @@ -1055,8 +1179,9 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m r = std::sqrt(rjk2); dang = -0.375 * (std::pow(rjk2, 3) + std::pow(rjk2, 2) * (rik2 + rij2) - + rjk2 * (3.0 * std::pow(rik2, 2) + 2.0 * rik2 * rij2 - + 3.0 * std::pow(rij2, 2)) + + rjk2 + * (3.0 * std::pow(rik2, 2) + 2.0 * rik2 * rij2 + + 3.0 * std::pow(rij2, 2)) - 5.0 * std::pow(rik2 - rij2, 2) * (rik2 + rij2)) / (r * geomean3 * geomean2); tmp1 = -dang * c9 * damp9 + dfdmp / r * c9 * ang; @@ -1073,13 +1198,13 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m dc9 = (dc6ij[iat][kat] / c6ik + dc6ij[jat][kat] / c6jk) * c9 * 0.5; dc6i[kat] += dc6_rest * dc9; } // end ktau -} -} + } + } } // end jtauz - } // end jtauy - } // end jtaux - } // end kat - } // end jat + } // end jtauy + } // end jtaux + } // end kat + } // end jat } for (int iat = 1; iat != ucell_.nat; iat++) { @@ -1111,33 +1236,39 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m { repmin[2] = std::max(-rep_cn_[2], jtauz - rep_cn_[2]); repmax[2] = std::min(rep_cn_[2], jtauz + rep_cn_[2]); - if (jtaux == 0 && jtauy == 0 && jtauz == 0) { + if (jtaux == 0 && jtauy == 0 && jtauz == 0) + { continue; -} + } jtau = static_cast(jtaux) * lat_[0] + static_cast(jtauy) * lat_[1] + static_cast(jtauz) * lat_[2]; rij2 = jtau.norm2(); - if (rij2 > para_.cn_thr2()) { + if (rij2 > para_.cn_thr2()) + { continue; -} + } rr0ij = std::sqrt(rij2) / para_.r0ab()[iz_[jat]][iz_[iat]]; - for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) { - for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) { + for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) + { + for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) + { for (int ktauz = repmin[2]; ktauz <= repmax[2]; ktauz++) { ktau = static_cast(ktaux) * lat_[0] + static_cast(ktauy) * lat_[1] + static_cast(ktauz) * lat_[2]; rik2 = (ikvec + ktau).norm2(); - if (rik2 > para_.cn_thr2()) { + if (rik2 > para_.cn_thr2()) + { continue; -} + } rjk2 = (jkvec + ktau - jtau).norm2(); - if (rjk2 > para_.cn_thr2()) { + if (rjk2 > para_.cn_thr2()) + { continue; -} + } rr0ik = std::sqrt(rik2) / para_.r0ab()[iz_[kat]][iz_[iat]]; rr0jk = std::sqrt(rjk2) / para_.r0ab()[iz_[kat]][iz_[jat]]; @@ -1155,8 +1286,9 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m r = std::sqrt(rij2); dang = -0.375 * (std::pow(rij2, 3) + std::pow(rij2, 2) * (rjk2 + rik2) - + rij2 * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rik2 - + 3.0 * std::pow(rik2, 2)) + + rij2 + * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rik2 + + 3.0 * std::pow(rik2, 2)) - 5.0 * std::pow(rjk2 - rik2, 2) * (rjk2 + rik2)) / (r * geomean3 * geomean2); tmp1 = -dang * c9 * damp9 + dfdmp / r * c9 * ang; @@ -1166,8 +1298,9 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m r = std::sqrt(rik2); dang = -0.375 * (std::pow(rik2, 3) + std::pow(rik2, 2) * (rjk2 + rij2) - + rik2 * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rij2 - + 3.0 * std::pow(rij2, 2)) + + rik2 + * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rij2 + + 3.0 * std::pow(rij2, 2)) - 5.0 * std::pow(rjk2 - rij2, 2) * (rjk2 + rij2)) / (r * geomean3 * geomean2); tmp1 = -dang * c9 * damp9 + dfdmp / r * c9 * ang; @@ -1177,8 +1310,9 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m r = std::sqrt(rjk2); dang = -0.375 * (std::pow(rjk2, 3) + std::pow(rjk2, 2) * (rik2 + rij2) - + rjk2 * (3.0 * std::pow(rik2, 2) + 2.0 * rik2 * rij2 - + 3.0 * std::pow(rij2, 2)) + + rjk2 + * (3.0 * std::pow(rik2, 2) + 2.0 * rik2 * rij2 + + 3.0 * std::pow(rij2, 2)) - 5.0 * std::pow(rik2 - rij2, 2) * (rik2 + rij2)) / (r * geomean3 * geomean2); tmp1 = -dang * c9 * damp9 + dfdmp / r * c9 * ang; @@ -1195,15 +1329,16 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m dc9 = (dc6ij[iat][kat] / c6ik + dc6ij[jat][kat] / c6jk) * c9 * 0.5; dc6i[kat] += dc6_rest * dc9; } // end ktau -} -} + } + } } // end jtauz - } // end jtauy - } // end jtaux - } // end kat - } // end iat + } // end jtauy + } // end jtaux + } // end kat + } // end iat - for (int iat = 1; iat != ucell_.nat; iat++) { + for (int iat = 1; iat != ucell_.nat; iat++) + { for (int jat = 0; jat != iat; jat++) { int kat = jat; @@ -1234,31 +1369,37 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m jtau = static_cast(jtaux) * lat_[0] + static_cast(jtauy) * lat_[1] + static_cast(jtauz) * lat_[2]; rij2 = (ijvec + jtau).norm2(); - if (rij2 > para_.cn_thr2()) { + if (rij2 > para_.cn_thr2()) + { continue; -} + } rr0ij = std::sqrt(rij2) / para_.r0ab()[iz_[jat]][iz_[iat]]; - for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) { - for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) { + for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) + { + for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) + { for (int ktauz = repmin[2]; ktauz <= repmax[2]; ktauz++) { - if (jtaux == ktaux && jtauy == ktauy && jtauz == ktauz) { + if (jtaux == ktaux && jtauy == ktauy && jtauz == ktauz) + { continue; -} + } ktau = static_cast(ktaux) * lat_[0] + static_cast(ktauy) * lat_[1] + static_cast(ktauz) * lat_[2]; rik2 = (ikvec + ktau).norm2(); - if (rik2 > para_.cn_thr2()) { + if (rik2 > para_.cn_thr2()) + { continue; -} + } rr0ik = std::sqrt(rik2) / para_.r0ab()[iz_[kat]][iz_[iat]]; rjk2 = (jkvec + ktau - jtau).norm2(); - if (rjk2 > para_.cn_thr2()) { + if (rjk2 > para_.cn_thr2()) + { continue; -} + } rr0jk = std::sqrt(rjk2) / para_.r0ab()[iz_[kat]][iz_[jat]]; geomean2 = rij2 * rjk2 * rik2; @@ -1275,8 +1416,9 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m r = std::sqrt(rij2); dang = -0.375 * (std::pow(rij2, 3) + std::pow(rij2, 2) * (rjk2 + rik2) - + rij2 * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rik2 - + 3.0 * std::pow(rik2, 2)) + + rij2 + * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rik2 + + 3.0 * std::pow(rik2, 2)) - 5.0 * std::pow(rjk2 - rik2, 2) * (rjk2 + rik2)) / (r * geomean3 * geomean2); tmp1 = -dang * c9 * damp9 + dfdmp / r * c9 * ang; @@ -1286,8 +1428,9 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m r = std::sqrt(rik2); dang = -0.375 * (std::pow(rik2, 3) + std::pow(rik2, 2) * (rjk2 + rij2) - + rik2 * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rij2 - + 3.0 * std::pow(rij2, 2)) + + rik2 + * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rij2 + + 3.0 * std::pow(rij2, 2)) - 5.0 * std::pow(rjk2 - rij2, 2) * (rjk2 + rij2)) / (r * geomean3 * geomean2); tmp1 = -dang * c9 * damp9 + dfdmp / r * c9 * ang; @@ -1297,8 +1440,9 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m r = std::sqrt(rjk2); dang = -0.375 * (std::pow(rjk2, 3) + std::pow(rjk2, 2) * (rik2 + rij2) - + rjk2 * (3.0 * std::pow(rik2, 2) + 2.0 * rik2 * rij2 - + 3.0 * std::pow(rij2, 2)) + + rjk2 + * (3.0 * std::pow(rik2, 2) + 2.0 * rik2 * rij2 + + 3.0 * std::pow(rij2, 2)) - 5.0 * std::pow(rik2 - rij2, 2) * (rik2 + rij2)) / (r * geomean3 * geomean2); tmp1 = -dang * c9 * damp9 + dfdmp / r * c9 * ang; @@ -1315,13 +1459,13 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m dc9 = (dc6ij[iat][kat] / c6ik + dc6ij[jat][kat] / c6jk) * c9 * 0.5; dc6i[kat] += dc6_rest * dc9; } // end ktau -} -} + } + } } // end jtauz - } // end jtauy - } // end jtaux - } // end jat -} + } // end jtauy + } // end jtaux + } // end jat + } // end iat for (int iat = 0; iat != ucell_.nat; iat++) @@ -1351,39 +1495,47 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m { repmin[2] = std::max(-rep_cn_[2], jtauz - rep_cn_[2]); repmax[2] = std::min(rep_cn_[2], jtauz + rep_cn_[2]); - if (jtaux == 0 && jtauy == 0 && jtauz == 0) { + if (jtaux == 0 && jtauy == 0 && jtauz == 0) + { continue; -} + } jtau = static_cast(jtaux) * lat_[0] + static_cast(jtauy) * lat_[1] + static_cast(jtauz) * lat_[2]; rij2 = jtau.norm2(); - if (rij2 > para_.cn_thr2()) { + if (rij2 > para_.cn_thr2()) + { continue; -} + } rr0ij = std::sqrt(rij2) / para_.r0ab()[iz_[jat]][iz_[iat]]; - for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) { - for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) { + for (int ktaux = repmin[0]; ktaux <= repmax[0]; ktaux++) + { + for (int ktauy = repmin[1]; ktauy <= repmax[1]; ktauy++) + { for (int ktauz = repmin[2]; ktauz <= repmax[2]; ktauz++) { - if (ktaux == 0 && ktauy == 0 && ktauz == 0) { + if (ktaux == 0 && ktauy == 0 && ktauz == 0) + { continue; -} - if (jtaux == ktaux && jtauy == ktauy && jtauz == ktauz) { + } + if (jtaux == ktaux && jtauy == ktauy && jtauz == ktauz) + { continue; -} + } ktau = static_cast(ktaux) * lat_[0] + static_cast(ktauy) * lat_[1] + static_cast(ktauz) * lat_[2]; rik2 = ktau.norm2(); - if (rik2 > para_.cn_thr2()) { + if (rik2 > para_.cn_thr2()) + { continue; -} + } rr0ik = std::sqrt(rik2) / para_.r0ab()[iz_[kat]][iz_[iat]]; rjk2 = (jkvec + ktau - jtau).norm2(); - if (rjk2 > para_.cn_thr2()) { + if (rjk2 > para_.cn_thr2()) + { continue; -} + } rr0jk = std::sqrt(rjk2) / para_.r0ab()[iz_[kat]][iz_[jat]]; geomean2 = rij2 * rjk2 * rik2; @@ -1400,8 +1552,9 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m r = std::sqrt(rij2); dang = -0.375 * (std::pow(rij2, 3) + std::pow(rij2, 2) * (rjk2 + rik2) - + rij2 * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rik2 - + 3.0 * std::pow(rik2, 2)) + + rij2 + * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rik2 + + 3.0 * std::pow(rik2, 2)) - 5.0 * std::pow(rjk2 - rik2, 2) * (rjk2 + rik2)) / (r * geomean3 * geomean2); tmp1 = -dang * c9 * damp9 + dfdmp / r * c9 * ang; @@ -1411,8 +1564,9 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m r = std::sqrt(rik2); dang = -0.375 * (std::pow(rik2, 3) + std::pow(rik2, 2) * (rjk2 + rij2) - + rik2 * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rij2 - + 3.0 * std::pow(rij2, 2)) + + rik2 + * (3.0 * std::pow(rjk2, 2) + 2.0 * rjk2 * rij2 + + 3.0 * std::pow(rij2, 2)) - 5.0 * std::pow(rjk2 - rij2, 2) * (rjk2 + rij2)) / (r * geomean3 * geomean2); tmp1 = -dang * c9 * damp9 + dfdmp / r * c9 * ang; @@ -1422,8 +1576,9 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m r = std::sqrt(rjk2); dang = -0.375 * (std::pow(rjk2, 3) + std::pow(rjk2, 2) * (rik2 + rij2) - + rjk2 * (3.0 * std::pow(rik2, 2) + 2.0 * rik2 * rij2 - + 3.0 * std::pow(rij2, 2)) + + rjk2 + * (3.0 * std::pow(rik2, 2) + 2.0 * rik2 * rij2 + + 3.0 * std::pow(rij2, 2)) - 5.0 * std::pow(rik2 - rij2, 2) * (rik2 + rij2)) / (r * geomean3 * geomean2); tmp1 = -dang * c9 * damp9 + dfdmp / r * c9 * ang; @@ -1440,42 +1595,47 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m dc9 = (dc6ij[iat][kat] / c6ik + dc6ij[jat][kat] / c6jk) * c9 * 0.5; dc6i[kat] += dc6_rest * dc9; } // end ktau -} -} + } + } } // end jtauz - } // end jtauy - } // jtaux - } // end iat + } // end jtauy + } // jtaux + } // end iat } // dE/dr_ij * dr_ij/dxyz_i double expterm, dcnn, x1; ModuleBase::Vector3 rij, vec3; - for (int iat = 1; iat != ucell_.nat; iat++) { + for (int iat = 1; iat != ucell_.nat; iat++) + { for (int jat = 0; jat != iat; jat++) { linij = lin(iat, jat); rcovij = para_.rcov()[iz_[iat]] + para_.rcov()[iz_[jat]]; - for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) { - for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) { + for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) + { + for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) + { for (int tauz = -rep_vdw_[2]; tauz <= rep_vdw_[2]; tauz++) { tau = static_cast(taux) * lat_[0] + static_cast(tauy) * lat_[1] + static_cast(tauz) * lat_[2]; rij = xyz_[jat] - xyz_[iat] + tau; r2 = rij.norm2(); - if (r2 > para_.rthr2() || r2 < 0.5) { + if (r2 > para_.rthr2() || r2 < 0.5) + { continue; -} + } r = std::sqrt(r2); if (r2 < para_.cn_thr2()) { expterm = exp(-para_.k1() * (rcovij / r - 1.0)); dcnn = -para_.k1() * rcovij * expterm / (r2 * (expterm + 1.0) * (expterm + 1.0)); } - else { + else + { dcnn = 0.0; -} + } x1 = drij[linij][taux + rep_vdw_[0]][tauy + rep_vdw_[1]][tauz + rep_vdw_[2]] + dcnn * (dc6i[iat] + dc6i[jat]); vec3 = x1 * rij / r; @@ -1484,28 +1644,32 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m std::vector vec = {vec3.x, vec3.y, vec3.z}; std::vector rij_vec = {rij.x, rij.y, rij.z}; - for (size_t i = 0; i != 3; i++) { + for (size_t i = 0; i != 3; i++) + { for (size_t j = 0; j != 3; j++) { smearing_sigma(i, j) += vec[j] * rij_vec[i]; } -} + } } // end tau -} -} + } + } } // end iat, jat -} + } for (int iat = 0; iat != ucell_.nat; iat++) { linii = lin(iat, iat); rcovij = para_.rcov()[iz_[iat]] + para_.rcov()[iz_[iat]]; - for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) { - for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) { + for (int taux = -rep_vdw_[0]; taux <= rep_vdw_[0]; taux++) + { + for (int tauy = -rep_vdw_[1]; tauy <= rep_vdw_[1]; tauy++) + { for (int tauz = -rep_vdw_[2]; tauz <= rep_vdw_[2]; tauz++) { - if (taux == 0 && tauy == 0 && tauz == 0) { + if (taux == 0 && tauy == 0 && tauz == 0) + { continue; -} + } tau = static_cast(taux) * lat_[0] + static_cast(tauy) * lat_[1] + static_cast(tauz) * lat_[2]; r2 = tau.norm2(); @@ -1515,23 +1679,25 @@ void Vdwd3::pbc_gdisp(std::vector> &g, ModuleBase::m expterm = exp(-para_.k1() * (rcovij / r - 1.0)); dcnn = -para_.k1() * rcovij * expterm / (r2 * (expterm + 1.0) * (expterm + 1.0)); } - else { + else + { dcnn = 0.0; -} + } x1 = drij[linii][taux + rep_vdw_[0]][tauy + rep_vdw_[1]][tauz + rep_vdw_[2]] + dcnn * dc6i[iat]; vec3 = x1 * tau / r; std::vector vec = {vec3.x, vec3.y, vec3.z}; std::vector tau_vec = {tau.x, tau.y, tau.z}; - for (size_t i = 0; i != 3; i++) { + for (size_t i = 0; i != 3; i++) + { for (size_t j = 0; j != 3; j++) { smearing_sigma(i, j) += vec[j] * tau_vec[i]; } -} + } } // end tau -} -} + } + } } // end iat } diff --git a/source/module_hamilt_general/module_vdw/vdwd3_autoset_xcname.cpp b/source/module_hamilt_general/module_vdw/vdwd3_autoset_xcname.cpp index bec17fbd15..7112edd5ca 100644 --- a/source/module_hamilt_general/module_vdw/vdwd3_autoset_xcname.cpp +++ b/source/module_hamilt_general/module_vdw/vdwd3_autoset_xcname.cpp @@ -2,38 +2,38 @@ * Intro * ----- * This file stores the mapping from LibXC xcname to the "conventional" - * + * * XCNotSupportedError * ------------------- * GGA_X_REVSSB_D * GGA_X_SSB_D - * + * * in J. Chem. Phys. 131, 094103 2009, a simplified version of PBC (the * correlation part of PBE XC) is used as the correlation part, but libXC * does not directly support one named as * GGA_C_SPBEC. - * + * * Certainly, those XC with dispersion correction in form of non-local * correlation are not supported. Such as: - * + * * vdw-DF family nonlocal dispersion correction included are not supported: * GGA_X_OPTB86B_VDW - * GGA_X_OPTB88_VDW - * GGA_X_OPTPBE_VDW + * GGA_X_OPTB88_VDW + * GGA_X_OPTPBE_VDW * GGA_X_PBEK1_VDW - * + * * VV09, VV10 and rVV10 nonlocal correlation included are not supported: - * GGA_XC_VV10 - * HYB_GGA_XC_LC_VV10 - * HYB_MGGA_XC_WB97M_V - * HYB_GGA_XC_WB97X_V - * MGGA_X_VCML - * MGGA_C_REVSCAN_VV10 - * MGGA_C_SCAN_VV10 - * MGGA_C_SCANL_VV10 - * MGGA_XC_B97M_V + * GGA_XC_VV10 + * HYB_GGA_XC_LC_VV10 + * HYB_MGGA_XC_WB97M_V + * HYB_GGA_XC_WB97X_V + * MGGA_X_VCML + * MGGA_C_REVSCAN_VV10 + * MGGA_C_SCAN_VV10 + * MGGA_C_SCANL_VV10 + * MGGA_XC_B97M_V * MGGA_XC_VCML_RVV10 - * + * * There is also one quite special, the wB97X-D3BJ functional uses the * wB97X-V functionals excluding the VV10 part, then use its own DFT-D3(BJ) * parameters. This seems not recorded in simple-dftd3, so it is not supported @@ -41,22 +41,23 @@ * HYB_GGA_XC_WB97X_D3BJ * HYB_GGA_XC_WB97X_V */ -#include -#include +#include "module_hamilt_general/module_vdw/vdwd3_parameters.h" +#include "source_base/formatter.h" +#include "source_base/tool_quit.h" + #include -#include "module_base/formatter.h" #include +#include #include -#include "module_base/tool_quit.h" -#include "module_hamilt_general/module_vdw/vdwd3_parameters.h" +#include const std::map xcname_libxc_xc_ = { {"XC_LDA_XC_TETER93", "teter93"}, {"XC_LDA_XC_ZLP", "zlp"}, - {"XC_MGGA_XC_OTPSS_D", "otpss_d"}, // DFT-D2 - {"XC_GGA_XC_OPBE_D", "opbe_d"}, // DFT-D2 + {"XC_MGGA_XC_OTPSS_D", "otpss_d"}, // DFT-D2 + {"XC_GGA_XC_OPBE_D", "opbe_d"}, // DFT-D2 {"XC_GGA_XC_OPWLYP_D", "opwlyp_d"}, // DFT-D2 - {"XC_GGA_XC_OBLYP_D", "oblyp_d"}, // DFT-D2 + {"XC_GGA_XC_OBLYP_D", "oblyp_d"}, // DFT-D2 {"XC_GGA_XC_HCTH_407P", "hcth_407p"}, {"XC_GGA_XC_HCTH_P76", "hcth_p76"}, {"XC_GGA_XC_HCTH_P14", "hcth_p14"}, @@ -242,140 +243,148 @@ const std::map xcname_libxc_xc_ = { {"XC_HYB_MGGA_XC_EDMGGAH", "edmggah"}, {"XC_HYB_MGGA_XC_LC_TMLYP", "lc_tmlyp"}, }; -const std::map xcname_libxc_xplusc_ = { - {"XC_GGA_X_GAM+XC_GGA_C_GAM", "gam"}, - {"XC_GGA_X_HCTH_A+XC_GGA_C_HCTH_A", "hcth_a"}, - {"XC_HYB_MGGA_X_DLDF+XC_MGGA_C_DLDF", "dldf"}, - {"XC_GGA_X_Q2D+XC_GGA_C_Q2D", "q2d"}, - {"XC_GGA_X_PBE_MOL+XC_GGA_C_PBE_MOL", "pbe_mol"}, - {"XC_GGA_X_PBEINT+XC_GGA_C_PBEINT", "pbeint"}, - {"XC_HYB_GGA_X_N12_SX+XC_GGA_C_N12_SX", "n12_sx"}, - {"XC_GGA_X_N12+XC_GGA_C_N12", "n12"}, - {"XC_GGA_X_PBE+XC_GGA_C_PBE", "pbe"}, - {"XC_GGA_X_B88+XC_MGGA_C_B88", "b88"}, - {"XC_GGA_X_PW91+XC_GGA_C_PW91", "pw91"}, - {"XC_GGA_X_PBE_SOL+XC_GGA_C_PBE_SOL", "pbe_sol"}, - {"XC_GGA_X_AM05+XC_GGA_C_AM05", "am05"}, - {"XC_GGA_X_XPBE+XC_GGA_C_XPBE", "xpbe"}, - {"XC_GGA_X_RGE2+XC_GGA_C_RGE2", "rge2"}, - {"XC_GGA_X_SOGGA11+XC_GGA_C_SOGGA11", "sogga11"}, - {"XC_GGA_X_APBE+XC_GGA_C_APBE", "apbe"}, - {"XC_MGGA_X_TPSS+XC_MGGA_C_TPSS", "tpss"}, - {"XC_MGGA_X_M06_L+XC_MGGA_C_M06_L", "m06_l"}, - {"XC_HYB_MGGA_X_TAU_HCTH+XC_GGA_C_TAU_HCTH", "tau_hcth"}, - {"XC_MGGA_X_REVTPSS+XC_MGGA_C_REVTPSS", "revtpss"}, - {"XC_MGGA_X_PKZB+XC_MGGA_C_PKZB", "pkzb"}, - {"XC_MGGA_X_M11_L+XC_MGGA_C_M11_L", "m11_l"}, - {"XC_MGGA_X_MN12_L+XC_MGGA_C_MN12_L", "mn12_l"}, - {"XC_HYB_MGGA_X_MN12_SX+XC_MGGA_C_MN12_SX", "mn12_sx"}, - {"XC_MGGA_X_MN15_L+XC_MGGA_C_MN15_L", "mn15_l"}, - {"XC_MGGA_X_SCAN+XC_MGGA_C_SCAN", "scan"}, - {"XC_GGA_X_PBEFE+XC_GGA_C_PBEFE", "pbefe"}, - {"XC_HYB_MGGA_X_MN15+XC_MGGA_C_MN15", "mn15"}, - {"XC_HYB_MGGA_X_BMK+XC_GGA_C_BMK", "bmk"}, - {"XC_MGGA_X_REVM06_L+XC_MGGA_C_REVM06_L", "revm06_l"}, - {"XC_HYB_MGGA_X_M08_HX+XC_MGGA_C_M08_HX", "m08_hx"}, - {"XC_HYB_MGGA_X_M08_SO+XC_MGGA_C_M08_SO", "m08_so"}, - {"XC_HYB_MGGA_X_M11+XC_MGGA_C_M11", "m11"}, - {"XC_GGA_X_CHACHIYO+XC_GGA_C_CHACHIYO", "chachiyo"}, - {"XC_HYB_MGGA_X_REVM11+XC_MGGA_C_REVM11", "revm11"}, - {"XC_HYB_MGGA_X_REVM06+XC_MGGA_C_REVM06", "revm06"}, - {"XC_HYB_MGGA_X_M06_SX+XC_MGGA_C_M06_SX", "m06_sx"}, - {"XC_GGA_X_PBE_GAUSSIAN+XC_GGA_C_PBE_GAUSSIAN", "pbe_gaussian"}, - {"XC_HYB_GGA_X_SOGGA11_X+XC_GGA_C_SOGGA11_X", "sogga11_x"}, - {"XC_HYB_MGGA_X_M05+XC_MGGA_C_M05", "m05"}, - {"XC_HYB_MGGA_X_M05_2X+XC_MGGA_C_M05_2X", "m05_2x"}, - {"XC_HYB_MGGA_X_M06_HF+XC_MGGA_C_M06_HF", "m06_hf"}, - {"XC_HYB_MGGA_X_M06+XC_MGGA_C_M06", "m06"}, - {"XC_HYB_MGGA_X_M06_2X+XC_MGGA_C_M06_2X", "m06_2x"}, - {"XC_MGGA_X_RSCAN+XC_MGGA_C_RSCAN", "rscan"}, - {"XC_MGGA_X_R2SCAN+XC_MGGA_C_R2SCAN", "r2scan"}, - {"XC_GGA_X_SG4+XC_GGA_C_SG4", "sg4"}, - {"XC_MGGA_X_TM+XC_MGGA_C_TM", "tm"}, - {"XC_MGGA_X_REVSCAN+XC_MGGA_C_REVSCAN", "revscan"}, - {"XC_MGGA_X_REGTPSS+XC_GGA_C_REGTPSS", "regtpss"}, - {"XC_MGGA_X_R2SCAN01+XC_MGGA_C_R2SCAN01", "r2scan01"}, - {"XC_MGGA_X_RPPSCAN+XC_MGGA_C_RPPSCAN", "rppscan"}, - {"XC_MGGA_X_REVTM+XC_MGGA_C_REVTM", "revtm"}, - {"XC_MGGA_X_SCANL+XC_MGGA_C_SCANL", "scanl"}, - {"XC_MGGA_X_MGGAC+XC_GGA_C_MGGAC", "mggac"}, - {"XC_MGGA_X_R2SCANL+XC_MGGA_C_R2SCANL", "r2scanl"}, - {"XC_GGA_X_B88+XC_GGA_C_LYP", "blyp"}, - {"XC_GGA_X_B88+XC_GGA_C_P86", "bp86"}, - {"XC_GGA_X_PW91+XC_GGA_C_PW91", "pw91"}, - {"XC_GGA_X_PBE+XC_GGA_C_PBE", "pbe"}, - {"XC_GGA_X_PBE_SOL+XC_GGA_C_PBE_SOL", "pbesol"}, - {"XC_MGGA_X_PKZB+XC_MGGA_C_PKZB", "pkzb"}, - {"XC_MGGA_X_TPSS+XC_MGGA_C_TPSS", "tpss"}, - {"XC_MGGA_X_REVTPSS+XC_MGGA_C_REVTPSS", "revtpss"}, - {"XC_MGGA_X_SCAN+XC_MGGA_C_SCAN", "scan"}, - {"XC_GGA_X_SOGGA+XC_GGA_C_PBE", "sogga"}, - {"XC_MGGA_X_BLOC+XC_MGGA_C_TPSSLOC", "bloc"}, - {"XC_GGA_X_OPTX+XC_GGA_C_LYP", "olyp"}, - {"XC_GGA_X_RPBE+XC_GGA_C_PBE", "rpbe"}, - {"XC_GGA_X_B88+XC_GGA_C_PBE", "bpbe"}, - {"XC_GGA_X_MPW91+XC_GGA_C_PW91", "mpw91"}, - {"XC_MGGA_X_MS0+XC_GGA_C_REGTPSS", "ms0"}, - {"XC_MGGA_X_MS1+XC_GGA_C_REGTPSS", "ms1"}, - {"XC_MGGA_X_MS2+XC_GGA_C_REGTPSS", "ms2"}, - {"XC_HYB_MGGA_X_MS2H+XC_GGA_C_REGTPSS", "ms2h"}, - {"XC_MGGA_X_MVS+XC_GGA_C_REGTPSS", "mvs"}, - {"XC_HYB_MGGA_X_MVSH+XC_GGA_C_REGTPSS", "mvsh"}, - {"XC_GGA_X_SOGGA11+XC_GGA_C_SOGGA11", "sogga11"}, - {"XC_HYB_GGA_X_SOGGA11_X+XC_GGA_C_SOGGA11_X", "sogga11-x"}, - {"XC_HYB_MGGA_X_DLDF+XC_MGGA_C_DLDF", "dldf"}, - {"XC_GGA_X_GAM+XC_GGA_C_GAM", "gam"}, - {"XC_MGGA_X_M06_L+XC_MGGA_C_M06_L", "m06-l"}, - {"XC_MGGA_X_M11_L+XC_MGGA_C_M11_L", "m11-l"}, - {"XC_MGGA_X_MN12_L+XC_MGGA_C_MN12_L", "mn12-l"}, - {"XC_MGGA_X_MN15_L+XC_MGGA_C_MN15_L", "mn15-l"}, - {"XC_GGA_X_N12+XC_GGA_C_N12", "n12"}, - {"XC_HYB_GGA_X_N12_SX+XC_GGA_C_N12_SX", "n12-sx"}, - {"XC_HYB_MGGA_X_MN12_SX+XC_MGGA_C_MN12_SX", "mn12-sx"}, - {"XC_HYB_MGGA_X_MN15+XC_MGGA_C_MN15", "mn15"}, - {"XC_MGGA_X_MBEEF+XC_GGA_C_PBE_SOL", "mbeef"}, - {"XC_HYB_MGGA_X_SCAN0+XC_MGGA_C_SCAN", "scan0"}, - {"XC_GGA_X_PBE+XC_GGA_C_OP_PBE", "pbeop"}, - {"XC_GGA_X_B88+XC_GGA_C_OP_B88", "bop"} -}; +const std::map xcname_libxc_xplusc_ + = {{"XC_GGA_X_GAM+XC_GGA_C_GAM", "gam"}, + {"XC_GGA_X_HCTH_A+XC_GGA_C_HCTH_A", "hcth_a"}, + {"XC_HYB_MGGA_X_DLDF+XC_MGGA_C_DLDF", "dldf"}, + {"XC_GGA_X_Q2D+XC_GGA_C_Q2D", "q2d"}, + {"XC_GGA_X_PBE_MOL+XC_GGA_C_PBE_MOL", "pbe_mol"}, + {"XC_GGA_X_PBEINT+XC_GGA_C_PBEINT", "pbeint"}, + {"XC_HYB_GGA_X_N12_SX+XC_GGA_C_N12_SX", "n12_sx"}, + {"XC_GGA_X_N12+XC_GGA_C_N12", "n12"}, + {"XC_GGA_X_PBE+XC_GGA_C_PBE", "pbe"}, + {"XC_GGA_X_B88+XC_MGGA_C_B88", "b88"}, + {"XC_GGA_X_PW91+XC_GGA_C_PW91", "pw91"}, + {"XC_GGA_X_PBE_SOL+XC_GGA_C_PBE_SOL", "pbe_sol"}, + {"XC_GGA_X_AM05+XC_GGA_C_AM05", "am05"}, + {"XC_GGA_X_XPBE+XC_GGA_C_XPBE", "xpbe"}, + {"XC_GGA_X_RGE2+XC_GGA_C_RGE2", "rge2"}, + {"XC_GGA_X_SOGGA11+XC_GGA_C_SOGGA11", "sogga11"}, + {"XC_GGA_X_APBE+XC_GGA_C_APBE", "apbe"}, + {"XC_MGGA_X_TPSS+XC_MGGA_C_TPSS", "tpss"}, + {"XC_MGGA_X_M06_L+XC_MGGA_C_M06_L", "m06_l"}, + {"XC_HYB_MGGA_X_TAU_HCTH+XC_GGA_C_TAU_HCTH", "tau_hcth"}, + {"XC_MGGA_X_REVTPSS+XC_MGGA_C_REVTPSS", "revtpss"}, + {"XC_MGGA_X_PKZB+XC_MGGA_C_PKZB", "pkzb"}, + {"XC_MGGA_X_M11_L+XC_MGGA_C_M11_L", "m11_l"}, + {"XC_MGGA_X_MN12_L+XC_MGGA_C_MN12_L", "mn12_l"}, + {"XC_HYB_MGGA_X_MN12_SX+XC_MGGA_C_MN12_SX", "mn12_sx"}, + {"XC_MGGA_X_MN15_L+XC_MGGA_C_MN15_L", "mn15_l"}, + {"XC_MGGA_X_SCAN+XC_MGGA_C_SCAN", "scan"}, + {"XC_GGA_X_PBEFE+XC_GGA_C_PBEFE", "pbefe"}, + {"XC_HYB_MGGA_X_MN15+XC_MGGA_C_MN15", "mn15"}, + {"XC_HYB_MGGA_X_BMK+XC_GGA_C_BMK", "bmk"}, + {"XC_MGGA_X_REVM06_L+XC_MGGA_C_REVM06_L", "revm06_l"}, + {"XC_HYB_MGGA_X_M08_HX+XC_MGGA_C_M08_HX", "m08_hx"}, + {"XC_HYB_MGGA_X_M08_SO+XC_MGGA_C_M08_SO", "m08_so"}, + {"XC_HYB_MGGA_X_M11+XC_MGGA_C_M11", "m11"}, + {"XC_GGA_X_CHACHIYO+XC_GGA_C_CHACHIYO", "chachiyo"}, + {"XC_HYB_MGGA_X_REVM11+XC_MGGA_C_REVM11", "revm11"}, + {"XC_HYB_MGGA_X_REVM06+XC_MGGA_C_REVM06", "revm06"}, + {"XC_HYB_MGGA_X_M06_SX+XC_MGGA_C_M06_SX", "m06_sx"}, + {"XC_GGA_X_PBE_GAUSSIAN+XC_GGA_C_PBE_GAUSSIAN", "pbe_gaussian"}, + {"XC_HYB_GGA_X_SOGGA11_X+XC_GGA_C_SOGGA11_X", "sogga11_x"}, + {"XC_HYB_MGGA_X_M05+XC_MGGA_C_M05", "m05"}, + {"XC_HYB_MGGA_X_M05_2X+XC_MGGA_C_M05_2X", "m05_2x"}, + {"XC_HYB_MGGA_X_M06_HF+XC_MGGA_C_M06_HF", "m06_hf"}, + {"XC_HYB_MGGA_X_M06+XC_MGGA_C_M06", "m06"}, + {"XC_HYB_MGGA_X_M06_2X+XC_MGGA_C_M06_2X", "m06_2x"}, + {"XC_MGGA_X_RSCAN+XC_MGGA_C_RSCAN", "rscan"}, + {"XC_MGGA_X_R2SCAN+XC_MGGA_C_R2SCAN", "r2scan"}, + {"XC_GGA_X_SG4+XC_GGA_C_SG4", "sg4"}, + {"XC_MGGA_X_TM+XC_MGGA_C_TM", "tm"}, + {"XC_MGGA_X_REVSCAN+XC_MGGA_C_REVSCAN", "revscan"}, + {"XC_MGGA_X_REGTPSS+XC_GGA_C_REGTPSS", "regtpss"}, + {"XC_MGGA_X_R2SCAN01+XC_MGGA_C_R2SCAN01", "r2scan01"}, + {"XC_MGGA_X_RPPSCAN+XC_MGGA_C_RPPSCAN", "rppscan"}, + {"XC_MGGA_X_REVTM+XC_MGGA_C_REVTM", "revtm"}, + {"XC_MGGA_X_SCANL+XC_MGGA_C_SCANL", "scanl"}, + {"XC_MGGA_X_MGGAC+XC_GGA_C_MGGAC", "mggac"}, + {"XC_MGGA_X_R2SCANL+XC_MGGA_C_R2SCANL", "r2scanl"}, + {"XC_GGA_X_B88+XC_GGA_C_LYP", "blyp"}, + {"XC_GGA_X_B88+XC_GGA_C_P86", "bp86"}, + {"XC_GGA_X_PW91+XC_GGA_C_PW91", "pw91"}, + {"XC_GGA_X_PBE+XC_GGA_C_PBE", "pbe"}, + {"XC_GGA_X_PBE_SOL+XC_GGA_C_PBE_SOL", "pbesol"}, + {"XC_MGGA_X_PKZB+XC_MGGA_C_PKZB", "pkzb"}, + {"XC_MGGA_X_TPSS+XC_MGGA_C_TPSS", "tpss"}, + {"XC_MGGA_X_REVTPSS+XC_MGGA_C_REVTPSS", "revtpss"}, + {"XC_MGGA_X_SCAN+XC_MGGA_C_SCAN", "scan"}, + {"XC_GGA_X_SOGGA+XC_GGA_C_PBE", "sogga"}, + {"XC_MGGA_X_BLOC+XC_MGGA_C_TPSSLOC", "bloc"}, + {"XC_GGA_X_OPTX+XC_GGA_C_LYP", "olyp"}, + {"XC_GGA_X_RPBE+XC_GGA_C_PBE", "rpbe"}, + {"XC_GGA_X_B88+XC_GGA_C_PBE", "bpbe"}, + {"XC_GGA_X_MPW91+XC_GGA_C_PW91", "mpw91"}, + {"XC_MGGA_X_MS0+XC_GGA_C_REGTPSS", "ms0"}, + {"XC_MGGA_X_MS1+XC_GGA_C_REGTPSS", "ms1"}, + {"XC_MGGA_X_MS2+XC_GGA_C_REGTPSS", "ms2"}, + {"XC_HYB_MGGA_X_MS2H+XC_GGA_C_REGTPSS", "ms2h"}, + {"XC_MGGA_X_MVS+XC_GGA_C_REGTPSS", "mvs"}, + {"XC_HYB_MGGA_X_MVSH+XC_GGA_C_REGTPSS", "mvsh"}, + {"XC_GGA_X_SOGGA11+XC_GGA_C_SOGGA11", "sogga11"}, + {"XC_HYB_GGA_X_SOGGA11_X+XC_GGA_C_SOGGA11_X", "sogga11-x"}, + {"XC_HYB_MGGA_X_DLDF+XC_MGGA_C_DLDF", "dldf"}, + {"XC_GGA_X_GAM+XC_GGA_C_GAM", "gam"}, + {"XC_MGGA_X_M06_L+XC_MGGA_C_M06_L", "m06-l"}, + {"XC_MGGA_X_M11_L+XC_MGGA_C_M11_L", "m11-l"}, + {"XC_MGGA_X_MN12_L+XC_MGGA_C_MN12_L", "mn12-l"}, + {"XC_MGGA_X_MN15_L+XC_MGGA_C_MN15_L", "mn15-l"}, + {"XC_GGA_X_N12+XC_GGA_C_N12", "n12"}, + {"XC_HYB_GGA_X_N12_SX+XC_GGA_C_N12_SX", "n12-sx"}, + {"XC_HYB_MGGA_X_MN12_SX+XC_MGGA_C_MN12_SX", "mn12-sx"}, + {"XC_HYB_MGGA_X_MN15+XC_MGGA_C_MN15", "mn15"}, + {"XC_MGGA_X_MBEEF+XC_GGA_C_PBE_SOL", "mbeef"}, + {"XC_HYB_MGGA_X_SCAN0+XC_MGGA_C_SCAN", "scan0"}, + {"XC_GGA_X_PBE+XC_GGA_C_OP_PBE", "pbeop"}, + {"XC_GGA_X_B88+XC_GGA_C_OP_B88", "bop"}}; void _xcname_libxc_xplusc(const std::string& xcpattern, std::string& xname) { std::vector xc_words = FmtCore::split(xcpattern, "+"); std::for_each(xc_words.begin(), xc_words.end(), [](std::string& s) { - s = (FmtCore::startswith(s, "XC_")? s: "XC_" + s); }); // add XC_ if not present + s = (FmtCore::startswith(s, "XC_") ? s : "XC_" + s); + }); // add XC_ if not present assert(xc_words.size() == 2); std::vector words = FmtCore::split(xc_words[0], "_"); - const std::string key = (words[2] == "X")? - xc_words[0] + "+" + xc_words[1]: xc_words[1] + "+" + xc_words[0]; + const std::string key = (words[2] == "X") ? xc_words[0] + "+" + xc_words[1] : xc_words[1] + "+" + xc_words[0]; - if (xcname_libxc_xplusc_.find(key) != xcname_libxc_xplusc_.end()) { + if (xcname_libxc_xplusc_.find(key) != xcname_libxc_xplusc_.end()) + { xname = xcname_libxc_xplusc_.at(key); - } else { + } + else + { ModuleBase::WARNING_QUIT("ModuleHamiltGeneral::ModuleVDW::DFTD3::xcname_libxc_xplusc", - "XC's LibXC-notation on `" + xcpattern + "` not recognized"); + "XC's LibXC-notation on `" + xcpattern + "` not recognized"); } } void _xcname_libxc_xc(const std::string& xcpattern, std::string& xname) { // add XC_ if not present - const std::string key = FmtCore::startswith(xcpattern, "XC_")? xcpattern: "XC_" + xcpattern; + const std::string key = FmtCore::startswith(xcpattern, "XC_") ? xcpattern : "XC_" + xcpattern; - if (xcname_libxc_xc_.find(key) != xcname_libxc_xc_.end()) { + if (xcname_libxc_xc_.find(key) != xcname_libxc_xc_.end()) + { xname = xcname_libxc_xc_.at(key); - } else { + } + else + { ModuleBase::WARNING_QUIT("ModuleHamiltGeneral::ModuleVDW::DFTD3::xcname_libxc_xc", - "XC's LibXC-notation on `" + xcpattern + "` not recognized"); + "XC's LibXC-notation on `" + xcpattern + "` not recognized"); } } void _xcname_libxc(const std::string& xcpattern, std::string& xname) { - if (xcpattern.find("+") != std::string::npos) { + if (xcpattern.find("+") != std::string::npos) + { _xcname_libxc_xplusc(xcpattern, xname); - } else { + } + else + { _xcname_libxc_xc(xcpattern, xname); } } @@ -385,7 +394,8 @@ std::string vdw::Vdwd3Parameters::_vdwd3_xcname(const std::string& xcpattern) std::string xcname = xcpattern; const std::regex pattern("(LDA|GGA|MGGA|HYB|HYB_LDA|HYB_GGA|HYB_MGGA)_(X|C|XC|K)_(.*)"); // as long as there is piece in xcpattern that can match, we can search for the corresponding name - if (std::regex_search(xcpattern, pattern)) { + if (std::regex_search(xcpattern, pattern)) + { _xcname_libxc(xcpattern, xcname); } return xcname; @@ -407,12 +417,12 @@ def read_xc_func_h(fn): def sort_xc(xc_data): '''Sort the xc functionals into x, c, xc, k functionals. - + Parameters ---------- xc_data : dict from function read_xc_func_h - + Returns ------- dict, dict, dict, dict @@ -437,16 +447,16 @@ def sort_xc(xc_data): def pair_xc(x, c): ''' Pair the x and c functionals. - + Parameters ---------- x : dict The dictionary of x functionals, whose keys are the conventional xc name, values include approx, annos, id, full. - + c : dict the same as x - + Returns ------- dict, dict @@ -463,7 +473,7 @@ def pair_xc(x, c): def xc_to_stdmap(xc, conventional_lower=True): '''print the xc in the way of c++ std::map. - + Parameters ---------- xc : dict @@ -471,7 +481,7 @@ def xc_to_stdmap(xc, conventional_lower=True): xc name, values include approx, annos, id, full. conventional_lower : bool Whether to convert the conventional name to lower case. - + Returns ------- str @@ -484,10 +494,10 @@ def xc_to_stdmap(xc, conventional_lower=True): out += ' {"%s", "%s"},\n' % (data['full'], name) out += '};\n' return out - + def paired_xc_to_stdmap(pairs, conventional_lower=True): '''print the xc in the way of c++ std::map. - + Parameters ---------- pairs : dict @@ -495,7 +505,7 @@ def paired_xc_to_stdmap(pairs, conventional_lower=True): xc name, values include approx, annos, id, full. conventional_lower : bool Whether to convert the conventional name to lower case. - + Returns ------- str @@ -513,21 +523,21 @@ def paired_xc_to_stdmap(pairs, conventional_lower=True): return out def special_x_and_c(x, c): - '''Special pairings of x and c functionals. The following data sheet is - from Pyscf: + '''Special pairings of x and c functionals. The following data sheet is + from Pyscf: https://github.com/pyscf/pyscf/blob/master/pyscf/dft/xcfun.py Thanks for pointing out the bug by @QuantumMiska and the help from wsr (@hebrewsnabla) - - + + Parameters ---------- x : dict The dictionary of x functionals, whose keys are the conventional xc name, values include approx, annos, id, full. - + c : dict the same as x - + Returns ------- dict diff --git a/source/module_hamilt_general/module_vdw/vdwd3_autoset_xcparam.cpp b/source/module_hamilt_general/module_vdw/vdwd3_autoset_xcparam.cpp index 24fb9d9231..e89c5c2327 100644 --- a/source/module_hamilt_general/module_vdw/vdwd3_autoset_xcparam.cpp +++ b/source/module_hamilt_general/module_vdw/vdwd3_autoset_xcparam.cpp @@ -3,15 +3,15 @@ * ----- * This file stores XC dependent DFT-D3 parameters for Grimme-D3 * dispersion correction. - * + * * Supported forms: - * + * * DFT-D3(0): zero-damping * DFT-D3(BJ): Becke-Johnson damping * DFT-D3M(0): zero-damping with modified damping function * DFT-D3M(BJ): Becke-Johnson damping with modified damping function - * - * A detailed introduction of undamped, and BJ damping, the modified + * + * A detailed introduction of undamped, and BJ damping, the modified * damping can be found in DFT-D3 software manual, see: * https://www.chemie.uni-bonn.de/grimme/de/software/dft-d3/man.pdf * @@ -19,31 +19,31 @@ * of both DFT-D2 and DFT-D3): * DFT-D2: https://www.vasp.at/wiki/index.php/DFT-D2 * DFT-D3: https://www.vasp.at/wiki/index.php/DFT-D3 - * + * * Usage * ----- * call function DFTD3::search(xc, method, param) to get the DFT-D3 parameters * for the given XC functional. The obtained param should be a std::vector, * in which the first 9 elements are the DFT-D3 parameters: * 's6', 'sr6', 'a1', 's8', 'sr8', 'a2', 's9', 'alp', 'bet' - * + * * ParamNotFoundError * ------------------ - * If the requested D3 parameters of XC are not found, then the ABACUS will + * If the requested D3 parameters of XC are not found, then the ABACUS will * WARNING_QUIT with the message "DFT-D3 parameters for XC not found". - * + * * Other dispersion correction * --------------------------- * there are other kinds of dispersion correction, such as the xc VV09, VV10, * and rVV10, and the vdw-DF family nonlocal dispersion correction. They will - * be mixed directly with the correlation and exchange part, which act + * be mixed directly with the correlation and exchange part, which act * differently from the DFT-D2 and D3 methods. - * + * * Special: Omega-B97 family * ------------------------- * (thanks for help and discussion with @hhebrewsnabla and @moolawooda) * wB97 XC family is special, their DFT-D3 supports are quite complicated. - * + * * wB97 long-range exx with B97 * wB97X wB97 with additional short-range exx * wB97X-D wB97X_D from libXC with DFTD2, not in DFTD3 framework @@ -51,22 +51,23 @@ * wB97X-D3(BJ) wB97X_V from libXC with DFTD3(BJ) * wB97X-V with VV10, not in DFTD3 framework * wB97M-V with VV10, not in DFTD3 framework - * + * * Recommended: http://bbs.keinsci.com/thread-19076-1-1.html - * Related information from Pyscf Github repo: + * Related information from Pyscf Github repo: * https://github.com/pyscf/pyscf/issues/2069 - * + * */ +#include "module_hamilt_general/module_vdw/vdwd3_parameters.h" +#include "source_base/formatter.h" +#include "source_base/tool_quit.h" + +#include +#include +#include +#include #include #include #include -#include -#include -#include -#include -#include "module_base/formatter.h" -#include "module_base/tool_quit.h" -#include "module_hamilt_general/module_vdw/vdwd3_parameters.h" // DFT-D3(BJ) const std::pair> bj_data[] = { @@ -140,7 +141,7 @@ const std::pair> bj_data[] = { {"r2scanh", {1.0, 0.4709, 0.4709, 1.1236, 5.9157, 5.9157, 1.0, 14.0, 0.0}}, {"r2scan0", {1.0, 0.4534, 0.4534, 1.1846, 5.8972, 5.8972, 1.0, 14.0, 0.0}}, {"r2scan50", {1.0, 0.4311, 0.4311, 1.3294, 5.924, 5.924, 1.0, 14.0, 0.0}}, - {"wb97x_v", {1.0, 0.0, 0.0, 0.2641, 5.4959, 5.4959, 1.0, 14.0, 0.0}}, + {"wb97x_v", {1.0, 0.0, 0.0, 0.2641, 5.4959, 5.4959, 1.0, 14.0, 0.0}}, // NOTE: the key `wb97x_v` directly corresonding to HYB_GGA_XC_WB97X_V, which can be further // employed to construct either wB97X-V with VV10, or wB97X-D3BJ with D3BJ. Here it is the D3BJ // parameter of wB97X-D3BJ, instead of those of wB97X-V. @@ -276,7 +277,7 @@ const std::pair> zero_data[] = { {"pwpb95", {0.82, 1.557, 1.557, 0.705, 1.0, 1.0, 1.0, 14.0, 0.0}}, {"pw1pw", {1.0, 1.4968, 1.4968, 1.1786, 1.0, 1.0, 1.0, 14.0, 0.0}}, {"scan", {1.0, 1.324, 1.324, 0.0, 1.0, 1.0, 1.0, 14.0, 0.0}}, - {"wb97x_d3", {1.0, 1.281, 1.281, 1.0, 1.094, 1.094, 1.0, 14.0, 0.0}}, + {"wb97x_d3", {1.0, 1.281, 1.281, 1.0, 1.094, 1.094, 1.0, 14.0, 0.0}}, // NOTE: simple-dftd3 assign the D3(0) parameters of functional wB97X-D3 // to a key `wb97x`, but the functional wB97X itself does not own these params. // instead, there is a XC in libxc really names HYB_GGA_WB97X_D3 @@ -370,9 +371,8 @@ const std::pair> op_data[] = { {"ms2h", {1.0, 0.65, 0.65, 1.69464, 4.75, 4.75, 1.0, 14.0, 0.0}}, }; const std::map> op = {std::begin(op_data), std::end(op_data)}; - -std::vector _search_impl(const std::string& xc, - const std::map>& dict) + +std::vector _search_impl(const std::string& xc, const std::map>& dict) { if (dict.find(xc) != dict.end()) { @@ -385,22 +385,20 @@ std::vector _search_impl(const std::string& xc, } // 's6', 'rs6', 'a1', 's8', 'rs8', 'a2', 's9', 'alp', 'bet' /** - * @brief Get the dftd3 params object. + * @brief Get the dftd3 params object. * dftd3 method fall back: xc-bjm -> xc-bj -> pbe-bj * xc-zerom -> xc-zero -> pbe-zero - * + * * @param xc the functional name * @param d3method the d3 method, can be "bj", "zero-damping", "bj-modified", "zero-damping-modified", "op" * @param param the dftd3 parameters, ALL_KEYS = {'s6', 'rs6', 'a1', 's8', 'rs8', 'a2', 's9', 'alp', 'bet'} */ -void _search(const std::string& xc, - const std::string& method, - std::vector& param) +void _search(const std::string& xc, const std::string& method, std::vector& param) { const std::string xc_lowercase = FmtCore::lower(xc); - const std::vector allowed_ = { "bj", "zero", "bjm", "zerom", "op" }; + const std::vector allowed_ = {"bj", "zero", "bjm", "zerom", "op"}; const int i = std::find(allowed_.begin(), allowed_.end(), method) - allowed_.begin(); - std::map> const * pdict = nullptr; + std::map> const* pdict = nullptr; switch (i) { case 0: @@ -409,7 +407,7 @@ void _search(const std::string& xc, case 1: pdict = &zero; break; - case 2: + case 2: pdict = &bjm; break; case 3: @@ -424,8 +422,7 @@ void _search(const std::string& xc, } if (pdict == nullptr) { - ModuleBase::WARNING_QUIT("ModuleHamiltGeneral::ModuleVDW::DFTD3::_search", - "Unknown DFT-D3 method: " + method); + ModuleBase::WARNING_QUIT("ModuleHamiltGeneral::ModuleVDW::DFTD3::_search", "Unknown DFT-D3 method: " + method); } param = _search_impl(xc_lowercase, *pdict); if (param.empty()) @@ -443,8 +440,8 @@ void _search(const std::string& xc, /** * @brief Get DFT-D3 parameters. If if there are parameters defined, * then it will overwrite the search result. If all parameters are - * defined already by user, then search will not performed. - * + * defined already by user, then search will not performed. + * * @param xc XC functional name * @param d3method can be "d3_0" or "d3_bj" * @param s6_in user defined s6, default is "default" @@ -468,9 +465,8 @@ void vdw::Vdwd3Parameters::_vdwd3_autoset_xcparam(const std::string& xc_in, double& a2, std::ofstream* plog) { - const std::map param_map = { - {"d3_bj", "bj"}, {"d3_0", "zero"}, {"d3_bjm", "bjm"}, {"d3_0m", "zerom"}, - {"op", "op"}}; + const std::map param_map + = {{"d3_bj", "bj"}, {"d3_0", "zero"}, {"d3_bjm", "bjm"}, {"d3_0m", "zerom"}, {"op", "op"}}; const std::vector flag = {s6_in, s8_in, a1_in, a2_in}; const bool autoset = std::any_of(flag.begin(), flag.end(), [](const std::string& s) { return s == "default"; }); @@ -493,23 +489,21 @@ void vdw::Vdwd3Parameters::_vdwd3_autoset_xcparam(const std::string& xc_in, if (plog != nullptr) // logging the autoset { param = {s6, s8, a1, a2}; - FmtTable vdwd3tab(/*titles=*/{"Parameters", "Original", "Autoset"}, - /*nrows=*/4, - /*formats=*/{"%10s", "%10s", "%10.4f"}, + FmtTable vdwd3tab(/*titles=*/{"Parameters", "Original", "Autoset"}, + /*nrows=*/4, + /*formats=*/{"%10s", "%10s", "%10.4f"}, /*indent=*/0); const std::vector items = {"s6", "s8", "a1", "a2"}; vdwd3tab << items << flag << param; - (*plog) << "\nDFT-D3 Dispersion correction parameters autoset\n" << vdwd3tab.str() - << "XC functional: " << xc_in << std::endl; + (*plog) << "\nDFT-D3 Dispersion correction parameters autoset\n" + << vdwd3tab.str() << "XC functional: " << xc_in << std::endl; } - } } - /* ''' -dftd3 parameters from +dftd3 parameters from https://github.com/dftd3/simple-dftd3/blob/main/assets/parameters.toml this script is to convert the toml file to c++ map @@ -532,9 +526,9 @@ def xc_indexing(data): def complete(vdw_method, value): ''' for each functional, the zero damping version must be provided - for each vdw method, all parameters including + for each vdw method, all parameters including s6, rs6/a1, s8, rs8/a2, s9, alp, bet must be provided, otherwise - use the default value + use the default value ''' DEFAULT = { 'bj': {'s6': 1.0, 's9': 1.0, 'alp': 14.0}, @@ -548,14 +542,14 @@ def complete(vdw_method, value): out = value.copy() for k in ALL_KEYS: equilk = EQUIVALENT.get(k, k) - val = [out.get(k), out.get(equilk), + val = [out.get(k), out.get(equilk), DEFAULT[vdw_method].get(k), DEFAULT[vdw_method].get(equilk)] val = [v for v in val if v is not None] val = [0.0] if not val else val out[k] = val[0] out[equilk] = out[k] - # equivalent? - # according to + # equivalent? + # according to # abacus-develop/source/module_hamilt_general/module_vdw/vdwd3_parameters.cpp # https://abacus.deepmodeling.com/en/latest/advanced/input_files/input-main.html @@ -569,7 +563,7 @@ def make_stdmap(data): print(', '.join([f'{v}' for v in value.values()]), end='') print('}},') print('};') - + if __name__ == '__main__': fn = 'dftd3.toml' data = load(fn) @@ -577,8 +571,7 @@ if __name__ == '__main__': for vdw_method, param in data.items(): for xc, value in param.items(): raw = complete(vdw_method, value) - data[vdw_method][xc] = {k: raw[k] + data[vdw_method][xc] = {k: raw[k] for k in ['s6', 'rs6', 'a1', 's8', 'rs8', 'a2', 's9', 'alp', 'bet']} make_stdmap(data) */ - diff --git a/source/module_hamilt_general/module_vdw/vdwd3_parameters.cpp b/source/module_hamilt_general/module_vdw/vdwd3_parameters.cpp index fc2736529b..b4d6b2e39c 100644 --- a/source/module_hamilt_general/module_vdw/vdwd3_parameters.cpp +++ b/source/module_hamilt_general/module_vdw/vdwd3_parameters.cpp @@ -5,14 +5,14 @@ //========================================================== #include "vdwd3_parameters.h" -#include "module_base/constants.h" + +#include "source_base/constants.h" + #include namespace vdw { -void Vdwd3Parameters::initial_parameters(const std::string& xc, - const Input_para& input, - std::ofstream* plog) +void Vdwd3Parameters::initial_parameters(const std::string& xc, const Input_para& input, std::ofstream* plog) { // initialize the dftd3 parameters mxc_.resize(max_elem_, 1); @@ -24,10 +24,17 @@ void Vdwd3Parameters::initial_parameters(const std::string& xc, std::vector>>( 5, std::vector>(max_elem_, std::vector(max_elem_, 0.0))))); - - _vdwd3_autoset_xcparam(xc, input.vdw_method, - input.vdw_s6, input.vdw_s8, input.vdw_a1, input.vdw_a2, - s6_, s18_, rs6_, rs18_, /* rs6: a1, rs18: a2 */ + + _vdwd3_autoset_xcparam(xc, + input.vdw_method, + input.vdw_s6, + input.vdw_s8, + input.vdw_a1, + input.vdw_a2, + s6_, + s18_, + rs6_, + rs18_, /* rs6: a1, rs18: a2 */ plog); abc_ = input.vdw_abc; version_ = input.vdw_method; @@ -61,7 +68,7 @@ void Vdwd3Parameters::initial_parameters(const std::string& xc, init_r0ab(); } -int Vdwd3Parameters::limit(int &i) +int Vdwd3Parameters::limit(int& i) { int icn = 1; while (i >= 100) diff --git a/source/module_hamilt_general/module_vdw/vdwd3_parameters_tab.cpp b/source/module_hamilt_general/module_vdw/vdwd3_parameters_tab.cpp index 30de4f5390..2016d12a32 100644 --- a/source/module_hamilt_general/module_vdw/vdwd3_parameters_tab.cpp +++ b/source/module_hamilt_general/module_vdw/vdwd3_parameters_tab.cpp @@ -3,32401 +3,23148 @@ // DATE , 2021-04-19 //========================================================== +#include "source_base/constants.h" #include "vdwd3_parameters.h" -#include "module_base/constants.h" namespace vdw { void Vdwd3Parameters::init_C6() { - std::vector C6_tmp = { - 0.30267000E+1,0.100E+1,0.100E+1,0.91180000E+0,0.91180000E+0 - ,0.20835000E+1,0.200E+1,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.15583000E+1,0.200E+1,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.38944800E+2,0.300E+1,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.22150800E+2,0.300E+1,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.11634454E+4,0.300E+1,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.24441500E+2,0.400E+1,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.14824600E+2,0.400E+1,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.49461900E+3,0.400E+1,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.25748630E+3,0.400E+1,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.17314300E+2,0.500E+1,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.11097500E+2,0.500E+1,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.28373080E+3,0.500E+1,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.16159710E+3,0.500E+1,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.10717770E+3,0.500E+1,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.12140200E+2,0.600E+1,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.81841000E+1,0.600E+1,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.16990300E+3,0.600E+1,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.10295600E+3,0.600E+1,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.71279400E+2,0.600E+1,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.49113000E+2,0.600E+1,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.87171000E+1,0.700E+1,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.61380000E+1,0.700E+1,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.10848540E+3,0.700E+1,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.68645800E+2,0.700E+1,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.49113200E+2,0.700E+1,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.34814600E+2,0.700E+1,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.25268500E+2,0.700E+1,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.67180000E+1,0.800E+1,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.48949000E+1,0.800E+1,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.76961300E+2,0.800E+1,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.50125200E+2,0.800E+1,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.36724700E+2,0.800E+1,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.26592900E+2,0.800E+1,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.19654600E+2,0.800E+1,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.15505900E+2,0.800E+1,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.51616000E+1,0.900E+1,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.38825000E+1,0.900E+1,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.55093300E+2,0.900E+1,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.36745300E+2,0.900E+1,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.27482100E+2,0.900E+1,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.20282700E+2,0.900E+1,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.15241800E+2,0.900E+1,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.12183400E+2,0.900E+1,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.96916000E+1,0.900E+1,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.40112000E+1,0.100E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.31025000E+1,0.100E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.40473100E+2,0.100E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.27486700E+2,0.100E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.20902200E+2,0.100E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.15674000E+2,0.100E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.11947900E+2,0.100E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.96606000E+1,0.100E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.77691000E+1,0.100E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.62896000E+1,0.100E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.46823200E+2,0.110E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.26862800E+2,0.110E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.13673272E+4,0.110E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.58745630E+3,0.110E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.33872120E+3,0.110E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.20376310E+3,0.110E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.13065630E+3,0.110E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.93026300E+2,0.110E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.66842300E+2,0.110E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.49279900E+2,0.110E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.16080286E+4,0.110E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.38353100E+2,0.120E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.23032000E+2,0.120E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.83081560E+3,0.120E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.41821640E+3,0.120E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.25813030E+3,0.120E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.16260820E+3,0.120E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.10761500E+3,0.120E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.78225000E+2,0.120E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.57160500E+2,0.120E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.42677100E+2,0.120E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.98516970E+3,0.120E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.68337580E+3,0.120E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.36290900E+2,0.130E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.22322400E+2,0.130E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.70582540E+3,0.130E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.37263020E+3,0.130E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.23647800E+3,0.130E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.15209340E+3,0.130E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.10220000E+3,0.130E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.75075500E+2,0.130E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.55341200E+2,0.130E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.41596600E+2,0.130E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.83896480E+3,0.130E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.60346890E+3,0.130E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.54054060E+3,0.130E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.29594700E+2,0.140E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.18850000E+2,0.140E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.49534490E+3,0.140E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.27978630E+3,0.140E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.18451110E+3,0.140E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.12213870E+3,0.140E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.83849800E+2,0.140E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.62534900E+2,0.140E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.46693600E+2,0.140E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.35455000E+2,0.140E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.59104580E+3,0.140E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.44764230E+3,0.140E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.40896060E+3,0.140E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.31785740E+3,0.140E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.23760400E+2,0.150E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.15668900E+2,0.150E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.35080300E+3,0.150E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.20873310E+3,0.150E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.14234810E+3,0.150E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.96750300E+2,0.150E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.67787300E+2,0.150E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.51309800E+2,0.150E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.38808400E+2,0.150E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.29776700E+2,0.150E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.42000640E+3,0.150E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.33078010E+3,0.150E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.30729650E+3,0.150E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.24435460E+3,0.150E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.19168870E+3,0.150E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.20094800E+2,0.160E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.13610800E+2,0.160E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.27378670E+3,0.160E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.16795130E+3,0.160E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.11711210E+3,0.160E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.81091900E+2,0.160E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.57673400E+2,0.160E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.44147000E+2,0.160E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.33726400E+2,0.160E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.26094000E+2,0.160E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.32859900E+3,0.160E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.26466650E+3,0.160E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.24850080E+3,0.160E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.20053740E+3,0.160E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.15948980E+3,0.160E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.13400660E+3,0.160E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.16705200E+2,0.170E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.11630200E+2,0.170E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.21066260E+3,0.170E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.13298080E+3,0.170E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.94761200E+2,0.170E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.66840700E+2,0.170E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.48262400E+2,0.170E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.37368800E+2,0.170E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.28844500E+2,0.170E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.22512100E+2,0.170E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.25351360E+3,0.170E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.20849780E+3,0.170E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.19775940E+3,0.170E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.16186860E+3,0.170E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.13047250E+3,0.170E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.11070060E+3,0.170E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.92346000E+2,0.170E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.13870000E+2,0.180E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.99130000E+1,0.180E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.16354970E+3,0.180E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.10572290E+3,0.180E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.76794900E+2,0.180E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.55089800E+2,0.180E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.40343500E+2,0.180E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.31578300E+2,0.180E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.24617800E+2,0.180E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.19377400E+2,0.180E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.19734400E+3,0.180E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.16510060E+3,0.180E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.15795950E+3,0.180E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.13089270E+3,0.180E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.10676980E+3,0.180E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.91401400E+2,0.180E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.76938300E+2,0.180E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.64646200E+2,0.180E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.76237600E+2,0.190E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.44041100E+2,0.190E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.23871574E+4,0.190E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.97231970E+3,0.190E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.55419800E+3,0.190E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.33226940E+3,0.190E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.21320010E+3,0.190E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.15214200E+3,0.190E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.10964390E+3,0.190E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.81086100E+2,0.190E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.27986124E+4,0.190E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.16420587E+4,0.190E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.13879361E+4,0.190E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.96762830E+3,0.190E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.68449680E+3,0.190E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.53523840E+3,0.190E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.41315120E+3,0.190E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.32211550E+3,0.190E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.49835009E+4,0.190E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.65818000E+2,0.200E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.39070100E+2,0.200E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.16144719E+4,0.200E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.75790700E+3,0.200E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.45484390E+3,0.200E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.28170350E+3,0.200E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.18454980E+3,0.200E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.13338470E+3,0.200E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.97082400E+2,0.200E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.72307200E+2,0.200E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.19077081E+4,0.200E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.12525932E+4,0.200E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.10888420E+4,0.200E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.79063470E+3,0.200E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.57546270E+3,0.200E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.45684430E+3,0.200E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.35747370E+3,0.200E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.28168230E+3,0.200E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.32404393E+4,0.200E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.23526862E+4,0.200E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.54966900E+2,0.210E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.32899500E+2,0.210E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.12781183E+4,0.210E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.61733580E+3,0.210E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.37504180E+3,0.210E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.23419500E+3,0.210E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.15429470E+3,0.210E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.11193590E+3,0.210E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.81724200E+2,0.210E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.61015400E+2,0.210E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.15125338E+4,0.210E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.10155454E+4,0.210E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.88860250E+3,0.210E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.65120400E+3,0.210E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.47727970E+3,0.210E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.38041070E+3,0.210E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.29876860E+3,0.210E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.23614170E+3,0.210E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.25499412E+4,0.210E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.18887902E+4,0.210E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.15224676E+4,0.210E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.53687500E+2,0.220E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.32531600E+2,0.220E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.11929128E+4,0.220E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.58748980E+3,0.220E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.36108650E+3,0.220E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.22757230E+3,0.220E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.15101990E+3,0.220E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.11014520E+3,0.220E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.80797500E+2,0.220E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.60559400E+2,0.220E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.14131570E+4,0.220E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.96298310E+3,0.220E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.84746150E+3,0.220E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.62623530E+3,0.220E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.46232470E+3,0.220E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.37026310E+3,0.220E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.29218530E+3,0.220E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.23192080E+3,0.220E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.23746690E+4,0.220E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.17795162E+4,0.220E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.14382841E+4,0.220E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.13619185E+4,0.220E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.49481900E+2,0.230E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.30185100E+2,0.230E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.10690426E+4,0.230E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.53334990E+3,0.230E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.33010230E+3,0.230E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.20914500E+3,0.230E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.13935120E+3,0.230E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.10193250E+3,0.230E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.74967100E+2,0.230E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.56310800E+2,0.230E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.12673139E+4,0.230E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.87225790E+3,0.230E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.77034320E+3,0.230E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.57211290E+3,0.230E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.42414700E+3,0.230E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.34060200E+3,0.230E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.26948630E+3,0.230E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.21440020E+3,0.230E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.21241985E+4,0.230E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.16049178E+4,0.230E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.12995197E+4,0.230E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.12323235E+4,0.230E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.11160984E+4,0.230E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.39122100E+2,0.240E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.24146300E+2,0.240E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.84409360E+3,0.240E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.41816350E+3,0.240E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.25930210E+3,0.240E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.16498820E+3,0.240E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.11048610E+3,0.240E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.81200000E+2,0.240E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.60009900E+2,0.240E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.45282000E+2,0.240E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.10004652E+4,0.240E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.68440150E+3,0.240E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.60440710E+3,0.240E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.44922160E+3,0.240E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.33383800E+3,0.240E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.26880290E+3,0.240E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.21336680E+3,0.240E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.17034650E+3,0.240E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.16836701E+4,0.240E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.12630809E+4,0.240E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.10216871E+4,0.240E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.96885650E+3,0.240E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.87738550E+3,0.240E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.69074250E+3,0.240E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.43002800E+2,0.250E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.26497800E+2,0.250E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.89197560E+3,0.250E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.45336860E+3,0.250E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.28347440E+3,0.250E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.18100350E+3,0.250E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.12132330E+3,0.250E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.89134600E+2,0.250E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.65811200E+2,0.250E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.49595900E+2,0.250E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.10585103E+4,0.250E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.73904110E+3,0.250E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.65607380E+3,0.250E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.49081560E+3,0.250E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.36612040E+3,0.250E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.29517370E+3,0.250E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.23445330E+3,0.250E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.18717280E+3,0.250E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.17680322E+4,0.250E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.13514785E+4,0.250E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.10971539E+4,0.250E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.10426625E+4,0.250E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.94560720E+3,0.250E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.74331790E+3,0.250E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.80274840E+3,0.250E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.33911000E+2,0.260E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.21175000E+2,0.260E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.69845390E+3,0.260E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.35353580E+3,0.260E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.22175470E+3,0.260E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.14234670E+3,0.260E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.95978200E+2,0.260E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.70894200E+2,0.260E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.52631000E+2,0.260E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.39865900E+2,0.260E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.82889360E+3,0.260E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.57651210E+3,0.260E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.51208230E+3,0.260E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.38374450E+3,0.260E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.28716060E+3,0.260E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.23226250E+3,0.260E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.18518230E+3,0.260E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.14843190E+3,0.260E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.13889522E+4,0.260E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.10565193E+4,0.260E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.85717300E+3,0.260E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.81484020E+3,0.260E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.73905420E+3,0.260E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.58181140E+3,0.260E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.62754030E+3,0.260E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.49133490E+3,0.260E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.36323400E+2,0.270E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.22723300E+2,0.270E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.70153240E+3,0.270E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.36919280E+3,0.270E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.23486930E+3,0.270E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.15187030E+3,0.270E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.10275030E+3,0.270E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.75991200E+2,0.270E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.56430700E+2,0.270E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.42727000E+2,0.270E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.83418260E+3,0.270E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.59833020E+3,0.270E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.53597060E+3,0.270E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.40599070E+3,0.270E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.30592560E+3,0.270E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.24821160E+3,0.270E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.19835700E+3,0.270E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.15919570E+3,0.270E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.13829771E+4,0.270E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.10817690E+4,0.270E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.88245030E+3,0.270E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.84183350E+3,0.270E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.76531780E+3,0.270E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.60141780E+3,0.270E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.65196880E+3,0.270E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.50977640E+3,0.270E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.53277940E+3,0.270E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.37159600E+2,0.280E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.23079200E+2,0.280E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.73885800E+3,0.280E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.38391400E+3,0.280E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.24241740E+3,0.280E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.15585070E+3,0.280E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.10498340E+3,0.280E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.77401000E+2,0.280E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.57324800E+2,0.280E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.43312900E+2,0.280E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.87793540E+3,0.280E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.62363050E+3,0.280E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.55653890E+3,0.280E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.41935930E+3,0.280E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.31456980E+3,0.280E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.25446830E+3,0.280E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.20277050E+3,0.280E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.16232640E+3,0.280E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.14584501E+4,0.280E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.11321074E+4,0.280E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.92189900E+3,0.280E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.87809390E+3,0.280E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.79751950E+3,0.280E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.62664720E+3,0.280E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.67845310E+3,0.280E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.53032210E+3,0.280E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.55308340E+3,0.280E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.57474360E+3,0.280E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.28594000E+2,0.290E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.18021600E+2,0.290E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.56945260E+3,0.290E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.29279550E+3,0.290E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.18517410E+3,0.290E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.11963500E+3,0.290E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.81085500E+2,0.290E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.60133500E+2,0.290E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.44809800E+2,0.290E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.34054400E+2,0.290E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.67647730E+3,0.290E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.47624260E+3,0.290E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.42477230E+3,0.290E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.32019130E+3,0.290E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.24079740E+3,0.290E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.19540750E+3,0.290E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.15631610E+3,0.290E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.12567760E+3,0.290E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.11299518E+4,0.290E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.86836740E+3,0.290E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.70607200E+3,0.290E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.67241280E+3,0.290E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.61057000E+3,0.290E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.48069380E+3,0.290E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.51930780E+3,0.290E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.40672680E+3,0.290E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.42308770E+3,0.290E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.43963650E+3,0.290E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.33718080E+3,0.290E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.29868900E+2,0.300E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.18969500E+2,0.300E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.54091600E+3,0.300E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.29331060E+3,0.300E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.18962930E+3,0.300E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.12410320E+3,0.300E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.84731100E+2,0.300E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.63077400E+2,0.300E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.47112200E+2,0.300E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.35842700E+2,0.300E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.64434080E+3,0.300E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.47291430E+3,0.300E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.42716100E+3,0.300E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.32728100E+3,0.300E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.24897430E+3,0.300E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.20324270E+3,0.300E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.16338480E+3,0.300E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.13181190E+3,0.300E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.10625928E+4,0.300E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.84685270E+3,0.300E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.69367870E+3,0.300E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.66410090E+3,0.300E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.60506230E+3,0.300E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.47555940E+3,0.300E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.51709100E+3,0.300E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.40455580E+3,0.300E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.42487900E+3,0.300E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.44009000E+3,0.300E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.33664930E+3,0.300E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.34052130E+3,0.300E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.35169700E+2,0.310E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.22045800E+2,0.310E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.65674410E+3,0.310E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.35111410E+3,0.310E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.22539330E+3,0.310E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.14655440E+3,0.310E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.99440700E+2,0.310E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.73625300E+2,0.310E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.54678200E+2,0.310E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.41368100E+2,0.310E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.78135240E+3,0.310E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.56716380E+3,0.310E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.51058540E+3,0.310E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.38926560E+3,0.310E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.29479250E+3,0.310E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.23981830E+3,0.310E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.19205780E+3,0.310E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.15434230E+3,0.310E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.12928121E+4,0.310E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.10198835E+4,0.310E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.83374240E+3,0.310E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.79686170E+3,0.310E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.72525140E+3,0.310E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.56976450E+3,0.310E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.61883870E+3,0.310E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.48378150E+3,0.310E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.50713160E+3,0.310E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.52581620E+3,0.310E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.40196130E+3,0.310E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.40545650E+3,0.310E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.48375160E+3,0.310E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.31817000E+2,0.320E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.20431800E+2,0.320E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.52792680E+3,0.320E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.29842200E+3,0.320E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.19734480E+3,0.320E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.13109540E+3,0.320E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.90332800E+2,0.320E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.67593200E+2,0.320E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.50641200E+2,0.320E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.38574600E+2,0.320E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.63010410E+3,0.320E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.47737440E+3,0.320E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.43650600E+3,0.320E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.33983280E+3,0.320E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.26182350E+3,0.320E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.21531010E+3,0.320E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.17419690E+3,0.320E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.14120630E+3,0.320E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.10326651E+4,0.320E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.84336440E+3,0.320E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.69470240E+3,0.320E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.66837860E+3,0.320E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.61076390E+3,0.320E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.47996390E+3,0.320E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.52418480E+3,0.320E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.41021060E+3,0.320E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.43385080E+3,0.320E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.44798680E+3,0.320E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.34242610E+3,0.320E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.34998850E+3,0.320E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.41595300E+3,0.320E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.36354740E+3,0.320E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.27788400E+2,0.330E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.18328400E+2,0.330E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.41515320E+3,0.330E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.24548310E+3,0.330E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.16690600E+3,0.330E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.11326160E+3,0.330E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.79308600E+2,0.330E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.60028900E+2,0.330E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.45418000E+2,0.330E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.34868600E+2,0.330E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.49693380E+3,0.330E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.38949270E+3,0.330E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.36119130E+3,0.330E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.28659090E+3,0.330E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.22447740E+3,0.330E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.18663480E+3,0.330E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.15260350E+3,0.330E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.12485610E+3,0.330E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.81065540E+3,0.330E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.67900440E+3,0.330E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.56269470E+3,0.330E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.54467970E+3,0.330E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.49949700E+3,0.330E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.39319220E+3,0.330E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.43091460E+3,0.330E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.33800960E+3,0.330E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.35971500E+3,0.330E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.37003590E+3,0.330E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.28333230E+3,0.330E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.29250300E+3,0.330E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.34635080E+3,0.330E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.30710100E+3,0.330E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.26294980E+3,0.330E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.25309800E+2,0.340E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.17024300E+2,0.340E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.35454290E+3,0.340E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.21502380E+3,0.340E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.14880080E+3,0.340E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.10243460E+3,0.340E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.72540300E+2,0.340E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.55362700E+2,0.340E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.42192300E+2,0.340E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.32584300E+2,0.340E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.42518640E+3,0.340E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.33957420E+3,0.340E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.31761820E+3,0.340E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.25500990E+3,0.340E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.20190190E+3,0.340E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.16913080E+3,0.340E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.13931630E+3,0.340E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.11474490E+3,0.340E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.69291160E+3,0.340E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.58796470E+3,0.340E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.48887150E+3,0.340E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.47503480E+3,0.340E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.43657180E+3,0.340E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.34429560E+3,0.340E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.37782760E+3,0.340E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.29703960E+3,0.340E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.31701740E+3,0.340E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.32534190E+3,0.340E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.24963850E+3,0.340E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.25904590E+3,0.340E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.30595010E+3,0.340E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.27365300E+3,0.340E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.23634730E+3,0.340E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.21367380E+3,0.340E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.22483400E+2,0.350E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.15455300E+2,0.350E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.29478970E+3,0.350E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.18337420E+3,0.350E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.12924950E+3,0.350E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.90342400E+2,0.350E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.64763200E+2,0.350E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.49879500E+2,0.350E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.38322500E+2,0.350E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.29795800E+2,0.350E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.35428690E+3,0.350E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.28827360E+3,0.350E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.27200980E+3,0.350E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.22105370E+3,0.350E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.17699300E+3,0.350E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.14945630E+3,0.350E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.12409090E+3,0.350E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.10294710E+3,0.350E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.57723180E+3,0.350E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.49597540E+3,0.350E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.41374680E+3,0.350E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.40365760E+3,0.350E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.37180710E+3,0.350E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.29391850E+3,0.350E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.32284330E+3,0.350E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.25453060E+3,0.350E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.27230530E+3,0.350E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.27877050E+3,0.350E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.21450590E+3,0.350E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.22363480E+3,0.350E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.26334580E+3,0.350E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.23762950E+3,0.350E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.20707720E+3,0.350E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.18836050E+3,0.350E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.16712970E+3,0.350E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.19818200E+2,0.360E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.13921100E+2,0.360E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.24455540E+3,0.360E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.15556160E+3,0.360E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.11153710E+3,0.360E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.79108000E+2,0.360E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.57389500E+2,0.360E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.44600300E+2,0.360E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.34545200E+2,0.360E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.27043000E+2,0.360E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.29455740E+3,0.360E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.24359650E+3,0.360E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.23169040E+3,0.360E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.19039340E+3,0.360E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.15405750E+3,0.360E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.13109280E+3,0.360E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.10968390E+3,0.360E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.91643000E+2,0.360E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.48024720E+3,0.360E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.41697770E+3,0.360E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.34884740E+3,0.360E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.34162730E+3,0.360E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.31532510E+3,0.360E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.24994130E+3,0.360E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.27464190E+3,0.360E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.21720710E+3,0.360E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.23275940E+3,0.360E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.23774470E+3,0.360E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.18353470E+3,0.360E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.19204840E+3,0.360E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.22545370E+3,0.360E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.20505980E+3,0.360E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.18018180E+3,0.360E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.16484940E+3,0.360E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.14718300E+3,0.360E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.13040170E+3,0.360E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.85949900E+2,0.370E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.50049100E+2,0.370E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.26473331E+4,0.370E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.10827052E+4,0.370E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.62008780E+3,0.370E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.37353840E+3,0.370E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.24069400E+3,0.370E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.17233980E+3,0.370E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.12458790E+3,0.370E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.92382700E+2,0.370E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.31041016E+4,0.370E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.18264648E+4,0.370E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.15469229E+4,0.370E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.10820563E+4,0.370E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.76813350E+3,0.370E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.60222210E+3,0.370E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.46615650E+3,0.370E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.36440670E+3,0.370E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.55302806E+4,0.370E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.35994349E+4,0.370E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.28340920E+4,0.370E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.26412435E+4,0.370E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.23637175E+4,0.370E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.18740326E+4,0.370E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.19687631E+4,0.370E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.15471982E+4,0.370E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.15418997E+4,0.370E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.16251034E+4,0.370E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.12594427E+4,0.370E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.11862631E+4,0.370E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.14423807E+4,0.370E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.11551526E+4,0.370E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.90942570E+3,0.370E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.77892040E+3,0.370E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.65036060E+3,0.370E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.54231600E+3,0.370E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.61387755E+4,0.370E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.78390100E+2,0.380E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.46665800E+2,0.380E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.19442260E+4,0.380E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.90392650E+3,0.380E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.54157290E+3,0.380E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.33545970E+3,0.380E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.21996080E+3,0.380E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.15914600E+3,0.380E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.11596470E+3,0.380E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.86462700E+2,0.380E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.22961906E+4,0.380E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.14958141E+4,0.380E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.12985356E+4,0.380E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.94141210E+3,0.380E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.68496320E+3,0.380E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.54396270E+3,0.380E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.42589970E+3,0.380E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.33586900E+3,0.380E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.39153529E+4,0.380E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.28194935E+4,0.380E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.22604217E+4,0.380E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.21283951E+4,0.380E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.19186941E+4,0.380E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.15113043E+4,0.380E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.16147190E+4,0.380E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.12632327E+4,0.380E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.12908718E+4,0.380E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.13513702E+4,0.380E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.10377284E+4,0.380E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.10096809E+4,0.380E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.12165138E+4,0.380E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.10044824E+4,0.380E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.80833700E+3,0.380E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.70005320E+3,0.380E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.59073260E+3,0.380E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.49691200E+3,0.380E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.43492577E+4,0.380E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.33813672E+4,0.380E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.70057000E+2,0.390E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.42419500E+2,0.390E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.15853950E+4,0.390E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.77148440E+3,0.390E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.47243640E+3,0.390E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.29721710E+3,0.390E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.19706110E+3,0.390E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.14366020E+3,0.390E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.10534470E+3,0.390E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.78931600E+2,0.390E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.18768634E+4,0.390E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.12667602E+4,0.390E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.11122980E+4,0.390E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.81954180E+3,0.390E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.60399160E+3,0.390E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.48337970E+3,0.390E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.38124620E+3,0.390E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.30251430E+3,0.390E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.31660625E+4,0.390E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.23508018E+4,0.390E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.18967809E+4,0.390E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.17943180E+4,0.390E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.16224689E+4,0.390E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.12764352E+4,0.390E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.13714492E+4,0.390E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.10723265E+4,0.390E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.11053016E+4,0.390E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.11535737E+4,0.390E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.88416480E+3,0.390E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.87069350E+3,0.390E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.10455505E+4,0.390E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.87478360E+3,0.390E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.71175060E+3,0.390E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.62033340E+3,0.390E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.52682990E+3,0.390E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.44570130E+3,0.390E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.35209466E+4,0.390E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.28137007E+4,0.390E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.23658925E+4,0.390E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.63780100E+2,0.400E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.39108800E+2,0.400E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.13632842E+4,0.400E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.68152830E+3,0.400E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.42323020E+3,0.400E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.26904900E+3,0.400E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.17977770E+3,0.400E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.13178520E+3,0.400E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.97097700E+2,0.400E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.73031500E+2,0.400E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.16162863E+4,0.400E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.11138339E+4,0.400E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.98504940E+3,0.400E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.73318070E+3,0.400E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.54488820E+3,0.400E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.43838900E+3,0.400E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.34753340E+3,0.400E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.27699080E+3,0.400E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.27111542E+4,0.400E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.20485251E+4,0.400E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.16591156E+4,0.400E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.15741401E+4,0.400E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.14260687E+4,0.400E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.11215489E+4,0.400E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.12087451E+4,0.400E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.94517130E+3,0.400E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.97897670E+3,0.400E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.10197589E+4,0.400E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.78111330E+3,0.400E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.77458710E+3,0.400E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.92819820E+3,0.400E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.78294420E+3,0.400E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.64155640E+3,0.400E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.56154740E+3,0.400E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.47900400E+3,0.400E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.40687270E+3,0.400E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.30176856E+4,0.400E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.24494723E+4,0.400E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.20726170E+4,0.400E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.18227181E+4,0.400E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.58676800E+2,0.410E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.36341800E+2,0.410E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.12090304E+4,0.410E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.61398500E+3,0.410E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.38490720E+3,0.410E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.24652410E+3,0.410E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.16569430E+3,0.410E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.12198680E+3,0.410E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.90223400E+2,0.410E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.68076900E+2,0.410E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.14346641E+4,0.410E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.10005663E+4,0.410E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.88903020E+3,0.410E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.66615070E+3,0.410E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.49797030E+3,0.410E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.40219740E+3,0.410E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.32006760E+3,0.410E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.25597690E+3,0.410E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.24006918E+4,0.410E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.18308523E+4,0.410E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.14860620E+4,0.410E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.14126818E+4,0.410E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.12813349E+4,0.410E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.10078571E+4,0.410E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.10879837E+4,0.410E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.85106340E+3,0.410E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.88388900E+3,0.410E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.91953540E+3,0.410E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.70437890E+3,0.410E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.70135490E+3,0.410E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.83928280E+3,0.410E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.71168230E+3,0.410E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.58600840E+3,0.410E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.51450770E+3,0.410E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.44029990E+3,0.410E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.37513390E+3,0.410E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.26739344E+4,0.410E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.21882864E+4,0.410E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.18586377E+4,0.410E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.16384938E+4,0.410E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.14752500E+4,0.410E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.46040600E+2,0.420E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.29161700E+2,0.420E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.89051260E+3,0.420E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.46330650E+3,0.420E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.29535920E+3,0.420E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.19195280E+3,0.420E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.13060450E+3,0.420E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.97067500E+2,0.420E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.72418600E+2,0.420E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.55048700E+2,0.420E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.10583899E+4,0.420E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.75166280E+3,0.420E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.67311930E+3,0.420E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.51023520E+3,0.420E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.38558950E+3,0.420E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.31386570E+3,0.420E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.25177230E+3,0.420E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.20285720E+3,0.420E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.17658946E+4,0.420E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.13654837E+4,0.420E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.11120098E+4,0.420E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.10606255E+4,0.420E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.96394340E+3,0.420E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.75899550E+3,0.420E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.82093130E+3,0.420E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.64312470E+3,0.420E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.67034900E+3,0.420E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.69583480E+3,0.420E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.53365350E+3,0.420E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.53452070E+3,0.420E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.63792330E+3,0.420E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.54578450E+3,0.420E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.45341860E+3,0.420E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.40049980E+3,0.420E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.34498260E+3,0.420E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.29579940E+3,0.420E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.19694796E+4,0.420E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.16315424E+4,0.420E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.13940976E+4,0.420E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.12339095E+4,0.420E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.11140924E+4,0.420E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.84589720E+3,0.420E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.51052700E+2,0.430E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.32058800E+2,0.430E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.10116099E+4,0.430E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.52142490E+3,0.430E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.33032570E+3,0.430E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.21347990E+3,0.430E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.14456970E+3,0.430E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.10705880E+3,0.430E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.79612100E+2,0.430E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.60352100E+2,0.430E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.12015234E+4,0.430E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.84734970E+3,0.430E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.75661950E+3,0.430E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.57105010E+3,0.430E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.42976770E+3,0.430E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.34877440E+3,0.430E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.27891230E+3,0.430E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.22407940E+3,0.430E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.20076137E+4,0.430E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.15434258E+4,0.430E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.12553446E+4,0.430E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.11958434E+4,0.430E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.10860231E+4,0.430E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.85474740E+3,0.430E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.92387430E+3,0.430E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.72332020E+3,0.430E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.75296780E+3,0.430E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.78224830E+3,0.430E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.59961920E+3,0.430E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.59931410E+3,0.430E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.71598110E+3,0.430E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.61053270E+3,0.430E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.50550910E+3,0.430E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.44547780E+3,0.430E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.38275910E+3,0.430E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.32738270E+3,0.430E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.22379665E+4,0.430E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.18443774E+4,0.430E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.15723759E+4,0.430E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.13895979E+4,0.430E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.12533465E+4,0.430E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.94964900E+3,0.430E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.10670169E+4,0.430E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.39574500E+2,0.440E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.25462200E+2,0.440E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.73055330E+3,0.440E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.38726810E+3,0.440E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.24993820E+3,0.440E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.16412790E+3,0.440E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.11263780E+3,0.440E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.84272500E+2,0.440E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.63259900E+2,0.440E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.48342900E+2,0.440E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.86937740E+3,0.440E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.62621040E+3,0.440E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.56407160E+3,0.440E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.43121320E+3,0.440E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.32840720E+3,0.440E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.26878240E+3,0.440E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.21680700E+3,0.440E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.17558760E+3,0.440E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.14473048E+4,0.440E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.11311769E+4,0.440E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.92358110E+3,0.440E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.88314920E+3,0.440E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.80388070E+3,0.440E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.63343940E+3,0.440E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.68617720E+3,0.440E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.53814350E+3,0.440E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.56248000E+3,0.440E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.58290140E+3,0.440E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.44742590E+3,0.440E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.45015430E+3,0.440E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.53610930E+3,0.440E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.46167950E+3,0.440E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.38598830E+3,0.440E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.34238140E+3,0.440E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.29626680E+3,0.440E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.25515160E+3,0.440E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.16158387E+4,0.440E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.13511988E+4,0.440E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.11599071E+4,0.440E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.10297665E+4,0.440E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.93174450E+3,0.440E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.71028370E+3,0.440E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.79619510E+3,0.440E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.59819880E+3,0.440E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.43166100E+2,0.450E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.27574500E+2,0.450E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.79420060E+3,0.450E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.42441200E+3,0.450E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.27371950E+3,0.450E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.17927080E+3,0.450E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.12264260E+3,0.450E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.91495900E+2,0.450E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.68488800E+2,0.450E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.52207200E+2,0.450E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.94542210E+3,0.450E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.68566280E+3,0.450E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.61792440E+3,0.450E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.47237380E+3,0.450E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.35925470E+3,0.450E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.29352140E+3,0.450E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.23627500E+3,0.450E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.19093520E+3,0.450E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.15674954E+4,0.450E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.12346013E+4,0.450E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.10091933E+4,0.450E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.96523080E+3,0.450E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.87880270E+3,0.450E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.69163140E+3,0.450E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.75032510E+3,0.450E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.58775440E+3,0.450E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.61543640E+3,0.450E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.63776340E+3,0.450E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.48875010E+3,0.450E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.49263190E+3,0.450E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.58677320E+3,0.450E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.50544520E+3,0.450E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.42219710E+3,0.450E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.37406320E+3,0.450E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.32319410E+3,0.450E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.27786800E+3,0.450E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.17497615E+4,0.450E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.14735487E+4,0.450E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.12668436E+4,0.450E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.11253403E+4,0.450E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.10182915E+4,0.450E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.77583530E+3,0.450E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.86989620E+3,0.450E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.65317750E+3,0.450E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.71394270E+3,0.450E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.40237200E+2,0.460E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.25871600E+2,0.460E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.72242940E+3,0.460E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.39043100E+3,0.460E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.25334250E+3,0.460E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.16671110E+3,0.460E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.11447630E+3,0.460E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.85642700E+2,0.460E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.64270700E+2,0.460E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.49099000E+2,0.460E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.86062090E+3,0.460E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.62959120E+3,0.460E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.56914100E+3,0.460E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.43694630E+3,0.460E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.33352190E+3,0.460E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.27315680E+3,0.460E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.22040990E+3,0.460E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.17850210E+3,0.460E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.14240271E+4,0.460E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.11296670E+4,0.460E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.92485560E+3,0.460E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.88576570E+3,0.460E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.80712580E+3,0.460E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.63532570E+3,0.460E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.68996470E+3,0.460E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.54065990E+3,0.460E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.56710440E+3,0.460E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.58718190E+3,0.460E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.45005590E+3,0.460E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.45480310E+3,0.460E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.54115010E+3,0.460E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.46770420E+3,0.460E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.39185280E+3,0.460E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.34783930E+3,0.460E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.30113900E+3,0.460E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.25939640E+3,0.460E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.15904415E+4,0.460E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.13479007E+4,0.460E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.11619289E+4,0.460E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.10338735E+4,0.460E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.93655280E+3,0.460E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.71494950E+3,0.460E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.80104420E+3,0.460E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.60279560E+3,0.460E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.65887530E+3,0.460E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.60850410E+3,0.460E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.33541300E+2,0.470E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.21789600E+2,0.470E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.61414770E+3,0.470E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.32557750E+3,0.470E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.21068110E+3,0.470E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.13887580E+3,0.470E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.95713700E+2,0.470E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.71892600E+2,0.470E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.54190300E+2,0.470E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.41578000E+2,0.470E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.73108320E+3,0.470E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.52647760E+3,0.470E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.47457130E+3,0.470E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.36335850E+3,0.470E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.27735770E+3,0.470E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.22750240E+3,0.470E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.18398760E+3,0.470E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.14942690E+3,0.470E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.12184699E+4,0.470E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.95149350E+3,0.470E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.77689140E+3,0.470E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.74320410E+3,0.470E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.67665530E+3,0.470E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.53368780E+3,0.470E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.57781270E+3,0.470E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.45363270E+3,0.470E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.47392440E+3,0.470E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.49097830E+3,0.470E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.37735310E+3,0.470E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.37956550E+3,0.470E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.45158870E+3,0.470E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.38930750E+3,0.470E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.32603710E+3,0.470E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.28964690E+3,0.470E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.25111890E+3,0.470E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.21673360E+3,0.470E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.13607517E+4,0.470E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.11369099E+4,0.470E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.97620250E+3,0.470E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.86700560E+3,0.470E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.78481880E+3,0.470E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.59905300E+3,0.470E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.67117170E+3,0.470E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.50502690E+3,0.470E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.55108020E+3,0.470E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.50877420E+3,0.470E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.42674500E+3,0.470E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.35687900E+2,0.480E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.23156300E+2,0.480E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.62105360E+3,0.480E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.34041220E+3,0.480E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.22262730E+3,0.480E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.14741380E+3,0.480E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.10173770E+3,0.480E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.76409200E+2,0.480E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.57550000E+2,0.480E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.44106200E+2,0.480E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.74057870E+3,0.480E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.54767210E+3,0.480E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.49703370E+3,0.480E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.38367900E+3,0.480E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.29424650E+3,0.480E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.24176140E+3,0.480E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.19570440E+3,0.480E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.15896500E+3,0.480E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.12225553E+4,0.480E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.97842510E+3,0.480E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.80260200E+3,0.480E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.77003030E+3,0.480E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.70242130E+3,0.480E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.55309190E+3,0.480E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.60140530E+3,0.480E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.47153290E+3,0.480E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.49563130E+3,0.480E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.51262200E+3,0.480E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.39305100E+3,0.480E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.39845720E+3,0.480E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.47342030E+3,0.480E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.41090580E+3,0.480E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.34560850E+3,0.480E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.30755390E+3,0.480E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.26697000E+3,0.480E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.23054930E+3,0.480E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.13663938E+4,0.480E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.11670471E+4,0.480E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.10094418E+4,0.480E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.90011540E+3,0.480E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.81654950E+3,0.480E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.62495060E+3,0.480E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.69953820E+3,0.480E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.52793870E+3,0.480E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.57701070E+3,0.480E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.53341340E+3,0.480E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.44587010E+3,0.480E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.46819000E+3,0.480E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.44041700E+2,0.490E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.27958600E+2,0.490E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.82896730E+3,0.490E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.43833960E+3,0.490E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.28117370E+3,0.490E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.18333680E+3,0.490E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.12497980E+3,0.490E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.92996800E+2,0.490E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.69455800E+2,0.490E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.52851700E+2,0.490E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.98609990E+3,0.490E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.70935650E+3,0.490E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.63758320E+3,0.490E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.48553920E+3,0.490E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.36802750E+3,0.490E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.29998530E+3,0.490E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.24091040E+3,0.490E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.19426460E+3,0.490E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.16388153E+4,0.490E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.12812612E+4,0.490E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.10458401E+4,0.490E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.99909710E+3,0.490E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.90897530E+3,0.490E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.71527990E+3,0.490E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.77527360E+3,0.490E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.60709640E+3,0.490E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.63472630E+3,0.490E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.65825260E+3,0.490E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.50438020E+3,0.490E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.50724520E+3,0.490E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.60471830E+3,0.490E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.51935010E+3,0.490E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.43261670E+3,0.490E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.38259680E+3,0.490E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.32992500E+3,0.490E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.28312690E+3,0.490E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.18285696E+4,0.490E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.15296862E+4,0.490E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.13118922E+4,0.490E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.11635963E+4,0.490E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.10518917E+4,0.490E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.79999940E+3,0.490E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.89764510E+3,0.490E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.67265160E+3,0.490E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.73525250E+3,0.490E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.67809960E+3,0.490E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.56733030E+3,0.490E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.59335740E+3,0.490E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.75773970E+3,0.490E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.41533400E+2,0.500E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.26786200E+2,0.500E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.70845970E+3,0.500E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.39379910E+3,0.500E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.25871460E+3,0.500E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.17143670E+3,0.500E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.11815090E+3,0.500E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.88540800E+2,0.500E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.66499600E+2,0.500E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.50811000E+2,0.500E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.84513480E+3,0.500E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.63194340E+3,0.500E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.57540180E+3,0.500E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.44576230E+3,0.500E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.34241690E+3,0.500E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.28132550E+3,0.500E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.22756350E+3,0.500E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.18458450E+3,0.500E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.13902912E+4,0.500E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.11230616E+4,0.500E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.92301820E+3,0.500E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.88663180E+3,0.500E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.80941340E+3,0.500E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.63665610E+3,0.500E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.69374420E+3,0.500E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.54336290E+3,0.500E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.57281690E+3,0.500E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.59204640E+3,0.500E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.45320890E+3,0.500E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.46119710E+3,0.500E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.54805490E+3,0.500E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.47710340E+3,0.500E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.40194150E+3,0.500E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.35778710E+3,0.500E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.31050930E+3,0.500E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.26795320E+3,0.500E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.15543698E+4,0.500E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.13385665E+4,0.500E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.11613674E+4,0.500E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.10372812E+4,0.500E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.94177920E+3,0.500E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.72129060E+3,0.500E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.80723580E+3,0.500E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.60961520E+3,0.500E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.66689540E+3,0.500E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.61675220E+3,0.500E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.51444770E+3,0.500E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.54154900E+3,0.500E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.68561380E+3,0.500E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.62756770E+3,0.500E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.37768100E+2,0.510E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.24858300E+2,0.510E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.58668880E+3,0.510E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.34030300E+3,0.510E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.22904210E+3,0.510E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.15448510E+3,0.510E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.10784360E+3,0.510E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.81535800E+2,0.510E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.61691200E+2,0.510E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.47407300E+2,0.510E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.70169030E+3,0.510E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.54198260E+3,0.510E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.49972920E+3,0.510E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.39368990E+3,0.510E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.30669120E+3,0.510E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.25424180E+3,0.510E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.20740430E+3,0.510E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.16945330E+3,0.510E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.11476700E+4,0.510E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.95065430E+3,0.510E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.78583230E+3,0.510E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.75894060E+3,0.510E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.69506830E+3,0.510E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.54719810E+3,0.510E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.59851680E+3,0.510E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.46945690E+3,0.510E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.49804720E+3,0.510E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.51305850E+3,0.510E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.39302490E+3,0.510E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.40386210E+3,0.510E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.47839930E+3,0.510E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.42186160E+3,0.510E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.35955640E+3,0.510E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.32236080E+3,0.510E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.28180500E+3,0.510E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.24479020E+3,0.510E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.12861750E+4,0.510E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.11321713E+4,0.510E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.99240010E+3,0.510E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.89208770E+3,0.510E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.81343450E+3,0.510E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.62768490E+3,0.510E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.70051630E+3,0.510E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.53338040E+3,0.510E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.58333460E+3,0.510E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.54091250E+3,0.510E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.45064270E+3,0.510E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.47657830E+3,0.510E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.59828910E+3,0.510E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.55335920E+3,0.510E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.49293790E+3,0.510E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.35484100E+2,0.520E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.23691100E+2,0.520E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.52125110E+3,0.520E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.30954390E+3,0.520E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.21148980E+3,0.520E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.14430320E+3,0.520E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.10161240E+3,0.520E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.77297000E+2,0.520E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.58788100E+2,0.520E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.45361300E+2,0.520E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.62440760E+3,0.520E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.49087600E+3,0.520E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.45604000E+3,0.520E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.36295180E+3,0.520E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.28527790E+3,0.520E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.23790180E+3,0.520E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.19518610E+3,0.520E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.16026740E+3,0.520E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.10193121E+4,0.520E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.85518820E+3,0.520E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.70913030E+3,0.520E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.68712350E+3,0.520E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.63049010E+3,0.520E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.49691430E+3,0.520E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.54441560E+3,0.520E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.42764390E+3,0.520E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.45508360E+3,0.520E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.46784930E+3,0.520E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.35881670E+3,0.520E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.37059360E+3,0.520E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.43811020E+3,0.520E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.38929970E+3,0.520E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.33422340E+3,0.520E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.30105450E+3,0.520E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.26445160E+3,0.520E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.23074260E+3,0.520E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.11441913E+4,0.520E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.10183413E+4,0.520E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.89780430E+3,0.520E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.81010280E+3,0.520E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.74062110E+3,0.520E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.57429320E+3,0.520E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.63974650E+3,0.520E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.48969560E+3,0.520E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.53521890E+3,0.520E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.49709590E+3,0.520E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.41415120E+3,0.520E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.43888610E+3,0.520E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.54812670E+3,0.520E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.50996980E+3,0.520E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.45710570E+3,0.520E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.42553550E+3,0.520E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.32517100E+2,0.530E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.22081300E+2,0.530E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.44985120E+3,0.530E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.27373980E+3,0.530E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.19010940E+3,0.530E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.13140510E+3,0.530E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.93456200E+2,0.530E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.71605900E+2,0.530E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.54799000E+2,0.530E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.42495400E+2,0.530E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.53985360E+3,0.530E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.43217920E+3,0.530E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.40476310E+3,0.530E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.32569120E+3,0.530E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.25851210E+3,0.530E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.21703370E+3,0.530E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.17923060E+3,0.530E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.14802160E+3,0.530E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.88017410E+3,0.530E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.74793060E+3,0.530E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.62218410E+3,0.530E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.60505080E+3,0.530E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.55631660E+3,0.530E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.43916600E+3,0.530E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.48180770E+3,0.530E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.37922120E+3,0.530E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.40469290E+3,0.530E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.41513030E+3,0.530E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.31896420E+3,0.530E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.33106510E+3,0.530E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.39045420E+3,0.530E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.34977600E+3,0.530E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.30267430E+3,0.530E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.27406300E+3,0.530E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.24205560E+3,0.530E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.21228200E+3,0.530E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.98989210E+3,0.530E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.89067230E+3,0.530E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.79002570E+3,0.530E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.71573180E+3,0.530E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.65622760E+3,0.530E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.51167720E+3,0.530E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.56879090E+3,0.530E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.43799920E+3,0.530E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.47824810E+3,0.530E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.44496620E+3,0.530E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.37093440E+3,0.530E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.39376550E+3,0.530E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.48897090E+3,0.530E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.45771560E+3,0.530E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.41298520E+3,0.530E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.38609970E+3,0.530E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.35196670E+3,0.530E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.29605500E+2,0.540E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.20459400E+2,0.540E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.38699690E+3,0.540E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.24076890E+3,0.540E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.16985780E+3,0.540E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.11891780E+3,0.540E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.85429300E+2,0.540E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.65940300E+2,0.540E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.50790000E+2,0.540E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.39595100E+2,0.540E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.46528170E+3,0.540E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.37861340E+3,0.540E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.35729600E+3,0.540E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.29049850E+3,0.540E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.23277860E+3,0.540E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.19673740E+3,0.540E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.16353680E+3,0.540E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.13585920E+3,0.540E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.75832530E+3,0.540E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.65153920E+3,0.540E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.54356310E+3,0.540E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.53043120E+3,0.540E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.48865220E+3,0.540E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.38650670E+3,0.540E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.42441250E+3,0.540E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.33482590E+3,0.540E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.35809540E+3,0.540E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.36655970E+3,0.540E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.28228880E+3,0.540E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.29421380E+3,0.540E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.34613450E+3,0.540E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.31242650E+3,0.540E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.27241100E+3,0.540E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.24792750E+3,0.540E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.22015810E+3,0.540E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.19406990E+3,0.540E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.85452230E+3,0.540E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.77608590E+3,0.540E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.69223860E+3,0.540E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.62952300E+3,0.540E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.57878760E+3,0.540E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.45379980E+3,0.540E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.50338110E+3,0.540E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.38995320E+3,0.540E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.42526840E+3,0.540E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.39634680E+3,0.540E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.33076460E+3,0.540E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.35152850E+3,0.540E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.43409320E+3,0.540E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.40859520E+3,0.540E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.37095720E+3,0.540E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.34822390E+3,0.540E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.31889050E+3,0.540E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.29022230E+3,0.540E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.10500960E+3,0.550E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.61318400E+2,0.550E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.32422404E+4,0.550E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.13162189E+4,0.550E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.75492430E+3,0.550E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.45569600E+3,0.550E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.29414830E+3,0.550E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.21086720E+3,0.550E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.15256720E+3,0.550E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.11317640E+3,0.550E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.37989439E+4,0.550E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.22209652E+4,0.550E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.18817164E+4,0.550E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.13170056E+4,0.550E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.93630690E+3,0.550E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.73500610E+3,0.550E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.56967010E+3,0.550E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.44581710E+3,0.550E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.68083900E+4,0.550E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.43871669E+4,0.550E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.34508369E+4,0.550E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.32158544E+4,0.550E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.28775279E+4,0.550E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.22830674E+4,0.550E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.23963445E+4,0.550E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.18842824E+4,0.550E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.18757209E+4,0.550E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.19768609E+4,0.550E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.15334063E+4,0.550E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.14430004E+4,0.550E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.17555105E+4,0.550E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.14062206E+4,0.550E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.11083145E+4,0.550E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.95019750E+3,0.550E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.79421840E+3,0.550E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.66295560E+3,0.550E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.75604361E+4,0.550E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.53051627E+4,0.550E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.42896097E+4,0.550E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.36748556E+4,0.550E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.32563633E+4,0.550E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.23987520E+4,0.550E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.27260486E+4,0.550E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.19683066E+4,0.550E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.21299275E+4,0.550E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.19358392E+4,0.550E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.16577829E+4,0.550E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.16630447E+4,0.550E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.22264867E+4,0.550E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.18919207E+4,0.550E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.15665042E+4,0.550E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.13945709E+4,0.550E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.12075672E+4,0.550E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.10433955E+4,0.550E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.93307294E+4,0.550E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.99457900E+2,0.560E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.59114100E+2,0.560E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.25515260E+4,0.560E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.11604419E+4,0.560E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.69068520E+3,0.560E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.42636670E+3,0.560E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.27907420E+3,0.560E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.20174110E+3,0.560E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.14691740E+3,0.560E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.10950000E+3,0.560E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.30097233E+4,0.560E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.19263504E+4,0.560E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.16657662E+4,0.560E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.12012021E+4,0.560E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.87116470E+3,0.560E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.69086510E+3,0.560E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.54031600E+3,0.560E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.42579090E+3,0.560E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.51712978E+4,0.560E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.36591655E+4,0.560E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.29244395E+4,0.560E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.27489797E+4,0.560E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.24751427E+4,0.560E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.19521126E+4,0.560E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.20794950E+4,0.560E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.16284040E+4,0.560E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.16569384E+4,0.560E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.17363987E+4,0.560E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.13357319E+4,0.560E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.12926630E+4,0.560E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.15597012E+4,0.560E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.12819152E+4,0.560E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.10285424E+4,0.560E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.88961470E+3,0.560E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.74984750E+3,0.560E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.63024360E+3,0.560E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.57435673E+4,0.560E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.43943607E+4,0.560E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.36394735E+4,0.560E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.31601776E+4,0.560E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.28195147E+4,0.560E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.20984813E+4,0.560E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.23739131E+4,0.560E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.17354827E+4,0.560E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.18901371E+4,0.560E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.17272738E+4,0.560E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.14605858E+4,0.560E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.14937369E+4,0.560E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.19640913E+4,0.560E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.17108832E+4,0.560E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.14425135E+4,0.560E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.12956354E+4,0.560E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.11317221E+4,0.560E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.98512660E+3,0.560E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.70164917E+4,0.560E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.57269887E+4,0.560E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.89101800E+2,0.570E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.53798200E+2,0.570E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.20850661E+4,0.570E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.99403160E+3,0.570E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.60449150E+3,0.570E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.37879280E+3,0.570E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.25055770E+3,0.570E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.18240750E+3,0.570E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.13361230E+3,0.570E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.10002770E+3,0.570E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.24655965E+4,0.570E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.16371586E+4,0.570E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.14317496E+4,0.570E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.10491934E+4,0.570E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.77049240E+3,0.570E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.61555590E+3,0.570E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.48476910E+3,0.570E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.38423060E+3,0.570E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.41858968E+4,0.570E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.30598941E+4,0.570E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.24617619E+4,0.570E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.23247454E+4,0.570E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.20995853E+4,0.570E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.16534435E+4,0.570E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.17717653E+4,0.570E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.13863132E+4,0.570E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.14234023E+4,0.570E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.14871454E+4,0.570E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.11414078E+4,0.570E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.11183973E+4,0.570E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.13447968E+4,0.570E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.11200021E+4,0.570E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.90836700E+3,0.570E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.79048550E+3,0.570E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.67038430E+3,0.570E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.56651010E+3,0.570E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.46537454E+4,0.570E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.36666556E+4,0.570E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.30693037E+4,0.570E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.26820879E+4,0.570E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.24019326E+4,0.570E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.17981970E+4,0.570E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.20296163E+4,0.570E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.14938895E+4,0.570E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.16299126E+4,0.570E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.14934855E+4,0.570E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.12574297E+4,0.570E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.12959364E+4,0.570E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.16894085E+4,0.570E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.14890440E+4,0.570E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.12682622E+4,0.570E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.11455595E+4,0.570E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.10065104E+4,0.570E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.88082020E+3,0.570E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.56757434E+4,0.570E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.47544826E+4,0.570E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.39906172E+4,0.570E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.44510400E+2,0.580E+2,0.100E+1,0.27991000E+1,0.91180000E+0 - ,0.29308100E+2,0.580E+2,0.200E+1,0.27991000E+1,0.00000000E+0 - ,0.70433450E+3,0.580E+2,0.300E+1,0.27991000E+1,0.00000000E+0 - ,0.40374270E+3,0.580E+2,0.400E+1,0.27991000E+1,0.00000000E+0 - ,0.27061870E+3,0.580E+2,0.500E+1,0.27991000E+1,0.00000000E+0 - ,0.18221640E+3,0.580E+2,0.600E+1,0.27991000E+1,0.00000000E+0 - ,0.12713550E+3,0.580E+2,0.700E+1,0.27991000E+1,0.00000000E+0 - ,0.96118900E+2,0.580E+2,0.800E+1,0.27991000E+1,0.00000000E+0 - ,0.72735900E+2,0.580E+2,0.900E+1,0.27991000E+1,0.00000000E+0 - ,0.55904800E+2,0.580E+2,0.100E+2,0.27991000E+1,0.00000000E+0 - ,0.84189860E+3,0.580E+2,0.110E+2,0.27991000E+1,0.00000000E+0 - ,0.64422200E+3,0.580E+2,0.120E+2,0.27991000E+1,0.00000000E+0 - ,0.59240470E+3,0.580E+2,0.130E+2,0.27991000E+1,0.00000000E+0 - ,0.46526310E+3,0.580E+2,0.140E+2,0.27991000E+1,0.00000000E+0 - ,0.36180150E+3,0.580E+2,0.150E+2,0.27991000E+1,0.00000000E+0 - ,0.29974470E+3,0.580E+2,0.160E+2,0.27991000E+1,0.00000000E+0 - ,0.24444680E+3,0.580E+2,0.170E+2,0.27991000E+1,0.00000000E+0 - ,0.19971380E+3,0.580E+2,0.180E+2,0.27991000E+1,0.00000000E+0 - ,0.13810183E+4,0.580E+2,0.190E+2,0.27991000E+1,0.00000000E+0 - ,0.11346748E+4,0.580E+2,0.200E+2,0.27991000E+1,0.00000000E+0 - ,0.93640680E+3,0.580E+2,0.210E+2,0.27991000E+1,0.00000000E+0 - ,0.90333060E+3,0.580E+2,0.220E+2,0.27991000E+1,0.00000000E+0 - ,0.82670470E+3,0.580E+2,0.230E+2,0.27991000E+1,0.00000000E+0 - ,0.65114400E+3,0.580E+2,0.240E+2,0.27991000E+1,0.00000000E+0 - ,0.71114230E+3,0.580E+2,0.250E+2,0.27991000E+1,0.00000000E+0 - ,0.55801770E+3,0.580E+2,0.260E+2,0.27991000E+1,0.00000000E+0 - ,0.59073870E+3,0.580E+2,0.270E+2,0.27991000E+1,0.00000000E+0 - ,0.60892420E+3,0.580E+2,0.280E+2,0.27991000E+1,0.00000000E+0 - ,0.46681100E+3,0.580E+2,0.290E+2,0.27991000E+1,0.00000000E+0 - ,0.47833500E+3,0.580E+2,0.300E+2,0.27991000E+1,0.00000000E+0 - ,0.56687830E+3,0.580E+2,0.310E+2,0.27991000E+1,0.00000000E+0 - ,0.49862840E+3,0.580E+2,0.320E+2,0.27991000E+1,0.00000000E+0 - ,0.42429060E+3,0.580E+2,0.330E+2,0.27991000E+1,0.00000000E+0 - ,0.38016060E+3,0.580E+2,0.340E+2,0.27991000E+1,0.00000000E+0 - ,0.33218840E+3,0.580E+2,0.350E+2,0.27991000E+1,0.00000000E+0 - ,0.28850100E+3,0.580E+2,0.360E+2,0.27991000E+1,0.00000000E+0 - ,0.15470780E+4,0.580E+2,0.370E+2,0.27991000E+1,0.00000000E+0 - ,0.13520803E+4,0.580E+2,0.380E+2,0.27991000E+1,0.00000000E+0 - ,0.11820124E+4,0.580E+2,0.390E+2,0.27991000E+1,0.00000000E+0 - ,0.10609721E+4,0.580E+2,0.400E+2,0.27991000E+1,0.00000000E+0 - ,0.96662010E+3,0.580E+2,0.410E+2,0.27991000E+1,0.00000000E+0 - ,0.74511760E+3,0.580E+2,0.420E+2,0.27991000E+1,0.00000000E+0 - ,0.83183600E+3,0.580E+2,0.430E+2,0.27991000E+1,0.00000000E+0 - ,0.63266390E+3,0.580E+2,0.440E+2,0.27991000E+1,0.00000000E+0 - ,0.69156460E+3,0.580E+2,0.450E+2,0.27991000E+1,0.00000000E+0 - ,0.64096110E+3,0.580E+2,0.460E+2,0.27991000E+1,0.00000000E+0 - ,0.53459930E+3,0.580E+2,0.470E+2,0.27991000E+1,0.00000000E+0 - ,0.56439100E+3,0.580E+2,0.480E+2,0.27991000E+1,0.00000000E+0 - ,0.70950090E+3,0.580E+2,0.490E+2,0.27991000E+1,0.00000000E+0 - ,0.65467230E+3,0.580E+2,0.500E+2,0.27991000E+1,0.00000000E+0 - ,0.58216180E+3,0.580E+2,0.510E+2,0.27991000E+1,0.00000000E+0 - ,0.53941670E+3,0.580E+2,0.520E+2,0.27991000E+1,0.00000000E+0 - ,0.48703330E+3,0.580E+2,0.530E+2,0.27991000E+1,0.00000000E+0 - ,0.43728340E+3,0.580E+2,0.540E+2,0.27991000E+1,0.00000000E+0 - ,0.18844554E+4,0.580E+2,0.550E+2,0.27991000E+1,0.00000000E+0 - ,0.17247415E+4,0.580E+2,0.560E+2,0.27991000E+1,0.00000000E+0 - ,0.15122504E+4,0.580E+2,0.570E+2,0.27991000E+1,0.00000000E+0 - ,0.68803530E+3,0.580E+2,0.580E+2,0.27991000E+1,0.27991000E+1 - ,0.88687700E+2,0.590E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.53152300E+2,0.590E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.22103168E+4,0.590E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.10189540E+4,0.590E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.61076150E+3,0.590E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.37910380E+3,0.590E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.24926330E+3,0.590E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.18083830E+3,0.590E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.13215840E+3,0.590E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.98822000E+2,0.590E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.26090440E+4,0.590E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.16875419E+4,0.590E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.14644446E+4,0.590E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.10615213E+4,0.590E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.77317210E+3,0.590E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.61486520E+3,0.590E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.48225090E+3,0.590E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.38105030E+3,0.590E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.44737784E+4,0.590E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.31902086E+4,0.590E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.25547353E+4,0.590E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.24050561E+4,0.590E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.21676325E+4,0.590E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.17091137E+4,0.590E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.18237858E+4,0.590E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.14281039E+4,0.590E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.14570358E+4,0.590E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.15254141E+4,0.590E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.11729549E+4,0.590E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.11394352E+4,0.590E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.13728649E+4,0.590E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.11331627E+4,0.590E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.91252630E+3,0.590E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.79102140E+3,0.590E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.66833280E+3,0.590E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.56301560E+3,0.590E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.49710778E+4,0.590E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.38289626E+4,0.590E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.31814405E+4,0.590E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.27679894E+4,0.590E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.24726905E+4,0.590E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.18440715E+4,0.590E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.20845975E+4,0.590E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.15276056E+4,0.590E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.16644640E+4,0.590E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.15224806E+4,0.590E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.12860441E+4,0.590E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.13182791E+4,0.590E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.17282162E+4,0.590E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.15110459E+4,0.590E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.12783406E+4,0.590E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.11504200E+4,0.590E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.10070198E+4,0.590E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.87837980E+3,0.590E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.60738935E+4,0.590E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.49833126E+4,0.590E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.41503203E+4,0.590E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.15271461E+4,0.590E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.43422386E+4,0.590E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.85408000E+2,0.600E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.51295200E+2,0.600E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.20915068E+4,0.600E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.97461670E+3,0.600E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.58618960E+3,0.600E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.36465190E+3,0.600E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.24011390E+3,0.600E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.17436780E+3,0.600E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.12753080E+3,0.600E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.95420200E+2,0.600E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.24706020E+4,0.600E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.16117831E+4,0.600E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.14013191E+4,0.600E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.10185098E+4,0.600E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.74324070E+3,0.600E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.59167520E+3,0.600E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.46450620E+3,0.600E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.36731630E+3,0.600E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.42163998E+4,0.600E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.30363662E+4,0.600E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.24350889E+4,0.600E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.22942857E+4,0.600E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.20689809E+4,0.600E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.16306018E+4,0.600E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.17421942E+4,0.600E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.13638456E+4,0.600E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.13940822E+4,0.600E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.14587399E+4,0.600E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.11209931E+4,0.600E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.10915722E+4,0.600E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.13142306E+4,0.600E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.10872533E+4,0.600E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.87700660E+3,0.600E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.76089490E+3,0.600E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.64343050E+3,0.600E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.54243830E+3,0.600E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.46850846E+4,0.600E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.36420492E+4,0.600E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.30329183E+4,0.600E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.26420526E+4,0.600E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.23616974E+4,0.600E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.17631139E+4,0.600E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.19921534E+4,0.600E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.14616458E+4,0.600E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.15933696E+4,0.600E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.14581671E+4,0.600E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.12304969E+4,0.600E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.12633482E+4,0.600E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.16535039E+4,0.600E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.14488711E+4,0.600E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.12277455E+4,0.600E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.11058143E+4,0.600E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.96879470E+3,0.600E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.84567030E+3,0.600E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.57167999E+4,0.600E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.47334185E+4,0.600E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.39519956E+4,0.600E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.14659695E+4,0.600E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.41259023E+4,0.600E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.39244211E+4,0.600E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.83331000E+2,0.610E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.50074800E+2,0.610E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.20312740E+4,0.610E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.94912550E+3,0.610E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.57141130E+3,0.610E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.35567120E+3,0.610E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.23429130E+3,0.610E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.17018170E+3,0.610E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.12449460E+3,0.610E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.93163500E+2,0.610E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.23998207E+4,0.610E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.15689885E+4,0.610E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.13648494E+4,0.610E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.99275070E+3,0.610E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.72481970E+3,0.610E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.57716960E+3,0.610E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.45323130E+3,0.610E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.35847210E+3,0.610E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.40920575E+4,0.610E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.29529794E+4,0.610E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.23691244E+4,0.610E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.22326503E+4,0.610E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.20137194E+4,0.610E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.15868512E+4,0.610E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.16960441E+4,0.610E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.13276064E+4,0.610E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.13577395E+4,0.610E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.14205045E+4,0.610E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.10914214E+4,0.610E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.10634898E+4,0.610E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.12801762E+4,0.610E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.10597536E+4,0.610E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.85521770E+3,0.610E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.74216490E+3,0.610E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.62773420E+3,0.610E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.52930700E+3,0.610E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.45470720E+4,0.610E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.35414930E+4,0.610E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.29509303E+4,0.610E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.25714964E+4,0.610E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.22990481E+4,0.610E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.17168038E+4,0.610E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.19396215E+4,0.610E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.14235531E+4,0.610E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.15520522E+4,0.610E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.14205469E+4,0.610E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.11984194E+4,0.610E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.12309598E+4,0.610E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.16104142E+4,0.610E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.14119588E+4,0.610E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.11970157E+4,0.610E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.10783854E+4,0.610E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.94498140E+3,0.610E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.82504730E+3,0.610E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.55474900E+4,0.610E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.46012171E+4,0.610E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.38440367E+4,0.610E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.14290690E+4,0.610E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.40113635E+4,0.610E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.38161118E+4,0.610E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.37109375E+4,0.610E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.81412300E+2,0.620E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.48940600E+2,0.620E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.19766955E+4,0.620E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.92581580E+3,0.620E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.55783800E+3,0.620E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.34739210E+3,0.620E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.22890650E+3,0.620E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.16630040E+3,0.620E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.12167270E+3,0.620E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.91061400E+2,0.620E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.23356474E+4,0.620E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.15299120E+4,0.620E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.13314786E+4,0.620E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.96910260E+3,0.620E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.70786040E+3,0.620E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.56378900E+3,0.620E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.44280950E+3,0.620E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.35028120E+3,0.620E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.39796309E+4,0.620E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.28770680E+4,0.620E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.23089962E+4,0.620E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.21764184E+4,0.620E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.19632723E+4,0.620E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.15469195E+4,0.620E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.16538773E+4,0.620E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.12944951E+4,0.620E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.13244770E+4,0.620E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.13855313E+4,0.620E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.10643798E+4,0.620E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.10377490E+4,0.620E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.12489915E+4,0.620E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.10345024E+4,0.620E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.83516220E+3,0.620E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.72489870E+3,0.620E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.61324050E+3,0.620E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.51716170E+3,0.620E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.44222696E+4,0.620E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.34499906E+4,0.620E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.28761716E+4,0.620E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.25070805E+4,0.620E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.22418085E+4,0.620E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.16744360E+4,0.620E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.18915883E+4,0.620E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.13886668E+4,0.620E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.15142016E+4,0.620E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.13860622E+4,0.620E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.11690360E+4,0.620E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.12012473E+4,0.620E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.15709643E+4,0.620E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.13780830E+4,0.620E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.11687524E+4,0.620E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.10531255E+4,0.620E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.92301940E+3,0.620E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.80600020E+3,0.620E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.53944846E+4,0.620E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.44810449E+4,0.620E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.37456921E+4,0.620E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.13951471E+4,0.620E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.39071923E+4,0.620E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.37175407E+4,0.620E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.36152067E+4,0.620E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.35220508E+4,0.620E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.79713800E+2,0.630E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.47936500E+2,0.630E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.19280810E+4,0.630E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.90511010E+3,0.630E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.54580150E+3,0.630E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.34005800E+3,0.630E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.22413830E+3,0.630E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.16286380E+3,0.630E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.11917340E+3,0.630E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.89198800E+2,0.630E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.22784898E+4,0.630E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.14951792E+4,0.630E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.13018438E+4,0.630E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.94812880E+3,0.630E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.69283380E+3,0.630E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.55193900E+3,0.630E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.43358310E+3,0.630E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.34303070E+3,0.630E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.38794729E+4,0.630E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.28095233E+4,0.630E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.22555157E+4,0.630E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.21264190E+4,0.630E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.19184254E+4,0.630E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.15114156E+4,0.630E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.16164023E+4,0.630E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.12650643E+4,0.630E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.12949313E+4,0.630E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.13544595E+4,0.630E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.10403490E+4,0.630E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.10148959E+4,0.630E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.12213030E+4,0.630E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.10121053E+4,0.630E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.81738880E+3,0.630E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.70960390E+3,0.630E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.60040640E+3,0.630E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.50640980E+3,0.630E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.43110961E+4,0.630E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.33685646E+4,0.630E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.28096885E+4,0.630E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.24498188E+4,0.630E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.21909387E+4,0.630E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.16367956E+4,0.630E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.18489097E+4,0.630E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.13576810E+4,0.630E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.14805878E+4,0.630E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.13554425E+4,0.630E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.11429352E+4,0.630E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.11748699E+4,0.630E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.15359254E+4,0.630E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.13480216E+4,0.630E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.11436919E+4,0.630E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.10307380E+4,0.630E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.90356300E+3,0.630E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.78913200E+3,0.630E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.52582068E+4,0.630E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.43740826E+4,0.630E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.36582120E+4,0.630E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.13650615E+4,0.630E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.38144921E+4,0.630E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.36298268E+4,0.630E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.35300228E+4,0.630E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.34391601E+4,0.630E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.33583122E+4,0.630E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.64188000E+2,0.640E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.39578600E+2,0.640E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.14077335E+4,0.640E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.68992870E+3,0.640E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.42648970E+3,0.640E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.27091830E+3,0.640E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.18125810E+3,0.640E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.13314380E+3,0.640E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.98357300E+2,0.640E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.74191200E+2,0.640E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.16673895E+4,0.640E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.11308198E+4,0.640E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.99679240E+3,0.640E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.73902000E+3,0.640E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.54836330E+3,0.640E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.44123030E+3,0.640E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.35003690E+3,0.640E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.27935150E+3,0.640E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.28176333E+4,0.640E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.20945326E+4,0.640E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.16917052E+4,0.640E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.16028927E+4,0.640E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.14507174E+4,0.640E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.11427015E+4,0.640E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.12280426E+4,0.640E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.96156000E+3,0.640E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.99206730E+3,0.640E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.10341932E+4,0.640E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.79387630E+3,0.640E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.78351140E+3,0.640E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.93936520E+3,0.640E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.78963690E+3,0.640E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.64598490E+3,0.640E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.56529910E+3,0.640E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.48231720E+3,0.640E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.40998030E+3,0.640E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.31359242E+4,0.640E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.25077589E+4,0.640E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.21132076E+4,0.640E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.18544837E+4,0.640E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.16654372E+4,0.640E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.12530730E+4,0.640E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.14116759E+4,0.640E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.10450617E+4,0.640E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.11404525E+4,0.640E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.10471279E+4,0.640E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.88053130E+3,0.640E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.91107960E+3,0.640E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.11799720E+4,0.640E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.10480976E+4,0.640E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.89951620E+3,0.640E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.81630470E+3,0.640E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.72098470E+3,0.640E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.63421630E+3,0.640E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.38238426E+4,0.640E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.32436561E+4,0.640E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.27405478E+4,0.640E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.10709597E+4,0.640E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.28381357E+4,0.640E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.27056826E+4,0.640E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.26326657E+4,0.640E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.25660607E+4,0.640E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.25068352E+4,0.640E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.18916719E+4,0.640E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.70179400E+2,0.650E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.42367900E+2,0.650E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.18023852E+4,0.650E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.80848660E+3,0.650E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.48279770E+3,0.650E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.29984690E+3,0.650E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.19762340E+3,0.650E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.14377540E+3,0.650E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.10539700E+3,0.650E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.79048400E+2,0.650E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.21240831E+4,0.650E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.13433651E+4,0.650E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.11621560E+4,0.650E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.83917760E+3,0.650E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.61083180E+3,0.650E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.48623190E+3,0.650E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.38195840E+3,0.650E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.30241490E+3,0.650E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.36876305E+4,0.650E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.25641443E+4,0.650E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.20454927E+4,0.650E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.19228302E+4,0.650E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.17309890E+4,0.650E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.13680049E+4,0.650E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.14541614E+4,0.650E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.11408713E+4,0.650E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.11579011E+4,0.650E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.12132014E+4,0.650E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.93575440E+3,0.650E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.90359910E+3,0.650E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.10900939E+4,0.650E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.89646510E+3,0.650E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.72120420E+3,0.650E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.62544800E+3,0.650E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.52893810E+3,0.650E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.44620840E+3,0.650E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.40985678E+4,0.650E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.30839899E+4,0.650E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.25485911E+4,0.650E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.22114907E+4,0.650E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.19735648E+4,0.650E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.14705265E+4,0.650E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.16631347E+4,0.650E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.12173511E+4,0.650E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.13235223E+4,0.650E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.12096847E+4,0.650E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.10256835E+4,0.650E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.10465789E+4,0.650E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.13756067E+4,0.650E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.11975597E+4,0.650E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.10112975E+4,0.650E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.90991270E+3,0.650E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.79669950E+3,0.650E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.69543500E+3,0.650E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.50226967E+4,0.650E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.40300910E+4,0.650E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.33357435E+4,0.650E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.12096287E+4,0.650E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.35071716E+4,0.650E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.33250797E+4,0.650E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.32313241E+4,0.650E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.31461740E+4,0.650E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.30703853E+4,0.650E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.22762532E+4,0.650E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.28516677E+4,0.650E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.67958000E+2,0.660E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.41162200E+2,0.660E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.17207353E+4,0.660E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.77577180E+3,0.660E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.46524390E+3,0.660E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.28984550E+3,0.660E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.19145500E+3,0.660E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.13949370E+3,0.660E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.10238110E+3,0.660E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.76855700E+2,0.660E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.20278568E+4,0.660E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.12872471E+4,0.660E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.11160341E+4,0.660E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.80833220E+3,0.660E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.58989410E+3,0.660E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.47029770E+3,0.660E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.36998330E+3,0.660E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.29329050E+3,0.660E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.35269705E+4,0.660E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.24517734E+4,0.660E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.19574581E+4,0.660E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.18415883E+4,0.660E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.16587019E+4,0.660E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.13107538E+4,0.660E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.13944853E+4,0.660E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.10940016E+4,0.660E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.11118174E+4,0.660E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.11642755E+4,0.660E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.89783730E+3,0.660E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.86875770E+3,0.660E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.10475640E+4,0.660E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.86358600E+3,0.660E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.69627600E+3,0.660E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.60460480E+3,0.660E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.51197160E+3,0.660E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.43238930E+3,0.660E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.39216962E+4,0.660E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.29485688E+4,0.660E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.24401762E+4,0.660E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.21194908E+4,0.660E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.18927858E+4,0.660E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.14117363E+4,0.660E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.15962074E+4,0.660E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.11696785E+4,0.660E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.12718937E+4,0.660E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.11630374E+4,0.660E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.98556970E+3,0.660E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.10068382E+4,0.660E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.13215257E+4,0.660E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.11527975E+4,0.660E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.97544350E+3,0.660E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.87867530E+3,0.660E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.77029080E+3,0.660E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.67313940E+3,0.660E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.48123323E+4,0.660E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.38522949E+4,0.660E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.31924039E+4,0.660E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.11661633E+4,0.660E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.33558765E+4,0.660E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.31799629E+4,0.660E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.30904072E+4,0.660E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.30090778E+4,0.660E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.29367065E+4,0.660E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.21810675E+4,0.660E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.27299739E+4,0.660E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.26173310E+4,0.660E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.72220300E+2,0.670E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.43571100E+2,0.670E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.17049679E+4,0.670E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.81136880E+3,0.670E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.49188750E+3,0.670E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.30751980E+3,0.670E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.20315540E+3,0.670E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.14783550E+3,0.670E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.10830760E+3,0.670E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.81141600E+2,0.670E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.20163392E+4,0.670E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.13374783E+4,0.670E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.11679358E+4,0.670E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.85407400E+3,0.670E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.62593940E+3,0.670E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.49945760E+3,0.670E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.39293850E+3,0.670E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.31124870E+3,0.670E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.34195160E+4,0.670E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.25014164E+4,0.670E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.20120352E+4,0.670E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.18992044E+4,0.670E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.17148635E+4,0.670E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.13502932E+4,0.670E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.14466020E+4,0.670E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.11317710E+4,0.670E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.11614905E+4,0.670E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.12139348E+4,0.670E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.93167930E+3,0.670E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.91200820E+3,0.670E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.10964450E+4,0.670E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.91172230E+3,0.670E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.73821290E+3,0.670E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.64174520E+3,0.670E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.54371620E+3,0.670E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.45912050E+3,0.670E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.38008304E+4,0.670E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.29970212E+4,0.670E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.25073572E+4,0.670E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.21900272E+4,0.670E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.19605194E+4,0.670E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.14668017E+4,0.670E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.16559466E+4,0.670E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.12180651E+4,0.670E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.13291426E+4,0.670E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.12176582E+4,0.670E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.10253902E+4,0.670E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.10563718E+4,0.670E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.13778901E+4,0.670E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.12131043E+4,0.670E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.10318071E+4,0.670E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.93112390E+3,0.670E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.81732200E+3,0.670E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.71464770E+3,0.670E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.46328428E+4,0.670E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.38855093E+4,0.670E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.32599132E+4,0.670E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.12305989E+4,0.670E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.33915411E+4,0.670E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.32298168E+4,0.670E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.31416098E+4,0.670E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.30612537E+4,0.670E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.29897660E+4,0.670E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.22379026E+4,0.670E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.27243602E+4,0.670E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.26065136E+4,0.670E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.26641668E+4,0.670E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.70715400E+2,0.680E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.42665800E+2,0.680E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.16647700E+4,0.680E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.79368770E+3,0.680E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.48143850E+3,0.680E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.30106920E+3,0.680E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.19891850E+3,0.680E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.14475870E+3,0.680E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.10605520E+3,0.680E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.79453900E+2,0.680E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.19689928E+4,0.680E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.13079814E+4,0.680E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.11425656E+4,0.680E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.83589690E+3,0.680E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.61278090E+3,0.680E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.48901070E+3,0.680E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.38474960E+3,0.680E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.30477480E+3,0.680E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.33372227E+4,0.680E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.24446758E+4,0.680E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.19669050E+4,0.680E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.18568743E+4,0.680E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.16768129E+4,0.680E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.13201912E+4,0.680E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.14147048E+4,0.680E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.11067246E+4,0.680E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.11361897E+4,0.680E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.11873873E+4,0.680E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.91117070E+3,0.680E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.89233320E+3,0.680E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.10726768E+4,0.680E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.89230170E+3,0.680E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.72266540E+3,0.680E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.62829340E+3,0.680E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.53236410E+3,0.680E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.44955920E+3,0.680E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.37094297E+4,0.680E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.29287164E+4,0.680E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.24511775E+4,0.680E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.21414202E+4,0.680E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.19172203E+4,0.680E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.14346130E+4,0.680E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.16195186E+4,0.680E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.11914716E+4,0.680E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.13002637E+4,0.680E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.11912962E+4,0.680E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.10029797E+4,0.680E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.10336009E+4,0.680E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.13478497E+4,0.680E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.11871040E+4,0.680E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.10099583E+4,0.680E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.91151370E+3,0.680E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.80019180E+3,0.680E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.69972310E+3,0.680E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.45209645E+4,0.680E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.37960924E+4,0.680E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.31862327E+4,0.680E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.12044185E+4,0.680E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.33138879E+4,0.680E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.31561992E+4,0.680E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.30700842E+4,0.680E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.29916275E+4,0.680E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.29218310E+4,0.680E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.21877803E+4,0.680E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.26611461E+4,0.680E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.25461249E+4,0.680E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.26039653E+4,0.680E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.25451713E+4,0.680E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.69379100E+2,0.690E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.41872700E+2,0.690E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.16270951E+4,0.690E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.77746020E+3,0.690E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.47198600E+3,0.690E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.29530140E+3,0.690E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.19516300E+3,0.690E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.14204780E+3,0.690E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.10408000E+3,0.690E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.77978800E+2,0.690E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.19246593E+4,0.690E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.12807911E+4,0.690E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.11193391E+4,0.690E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.81942800E+3,0.690E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.60097010E+3,0.690E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.47969090E+3,0.690E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.37748730E+3,0.690E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.29906220E+3,0.690E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.32599368E+4,0.690E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.23919954E+4,0.690E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.19251263E+4,0.690E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.18177881E+4,0.690E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.16417354E+4,0.690E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.12924384E+4,0.690E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.13853712E+4,0.690E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.10836957E+4,0.690E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.11130259E+4,0.690E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.11630369E+4,0.690E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.89235160E+3,0.690E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.87439610E+3,0.690E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.10509705E+4,0.690E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.87471320E+3,0.690E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.70869500E+3,0.690E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.61626580E+3,0.690E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.52226550E+3,0.690E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.44109320E+3,0.690E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.36236511E+4,0.690E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.28652613E+4,0.690E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.23992487E+4,0.690E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.20966400E+4,0.690E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.18774174E+4,0.690E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.14051352E+4,0.690E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.15861100E+4,0.690E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.11671878E+4,0.690E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.12739026E+4,0.690E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.11672707E+4,0.690E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.98252100E+3,0.690E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.10128904E+4,0.690E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.13203887E+4,0.690E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.11634988E+4,0.690E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.99025880E+3,0.690E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.89390800E+3,0.690E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.78488410E+3,0.690E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.68644520E+3,0.690E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.44159694E+4,0.690E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.37128812E+4,0.690E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.31180001E+4,0.690E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.11807776E+4,0.690E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.32417266E+4,0.690E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.30878489E+4,0.690E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.30036922E+4,0.690E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.29270118E+4,0.690E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.28587977E+4,0.690E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.21415264E+4,0.690E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.26023122E+4,0.690E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.24899643E+4,0.690E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.25481802E+4,0.690E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.24906989E+4,0.690E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.24374539E+4,0.690E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.68494900E+2,0.700E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.41286600E+2,0.700E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.16127581E+4,0.700E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.76939830E+3,0.700E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.46660990E+3,0.700E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.29168170E+3,0.700E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.19263240E+3,0.700E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.14013000E+3,0.700E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.10262510E+3,0.700E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.76858100E+2,0.700E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.19075332E+4,0.700E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.12678866E+4,0.700E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.11075215E+4,0.700E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.81018450E+3,0.700E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.59379110E+3,0.700E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.47373900E+3,0.700E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.37262670E+3,0.700E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.29508360E+3,0.700E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.32317117E+4,0.700E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.23690958E+4,0.700E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.19062802E+4,0.700E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.17996377E+4,0.700E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.16251430E+4,0.700E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.12793493E+4,0.700E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.13711198E+4,0.700E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.10724959E+4,0.700E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.11012182E+4,0.700E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.11508553E+4,0.700E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.88299190E+3,0.700E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.86485460E+3,0.700E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.10396601E+4,0.700E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.86479960E+3,0.700E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.70027180E+3,0.700E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.60871740E+3,0.700E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.51566490E+3,0.700E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.43535350E+3,0.700E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.35920465E+4,0.700E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.28379423E+4,0.700E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.23754679E+4,0.700E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.20753417E+4,0.700E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.18580353E+4,0.700E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.13902059E+4,0.700E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.15694426E+4,0.700E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.11545209E+4,0.700E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.12600764E+4,0.700E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.11544639E+4,0.700E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.97180930E+3,0.700E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.10016214E+4,0.700E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.13062023E+4,0.700E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.11504571E+4,0.700E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.97868710E+3,0.700E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.88319190E+3,0.700E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.77520910E+3,0.700E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.67775440E+3,0.700E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.43774766E+4,0.700E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.36779606E+4,0.700E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.30875154E+4,0.700E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.11670799E+4,0.700E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.32108489E+4,0.700E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.30582277E+4,0.700E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.29748238E+4,0.700E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.28988349E+4,0.700E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.28312344E+4,0.700E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.21199794E+4,0.700E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.25778005E+4,0.700E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.24663583E+4,0.700E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.25233630E+4,0.700E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.24664143E+4,0.700E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.24136514E+4,0.700E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.23901227E+4,0.700E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.58651900E+2,0.710E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.35951600E+2,0.710E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.12947583E+4,0.710E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.63458810E+3,0.710E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.39146520E+3,0.710E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.24795570E+3,0.710E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.16541840E+3,0.710E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.12121480E+3,0.710E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.89340500E+2,0.710E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.67257500E+2,0.710E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.15332675E+4,0.710E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.10401825E+4,0.710E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.91638240E+3,0.710E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.67855410E+3,0.710E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.50255170E+3,0.710E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.40367180E+3,0.710E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.31962860E+3,0.710E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.25459790E+3,0.710E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.25921299E+4,0.710E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.19255453E+4,0.710E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.15553939E+4,0.710E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.14734091E+4,0.710E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.13334027E+4,0.710E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.10496142E+4,0.710E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.11285309E+4,0.710E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.88302170E+3,0.710E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.91141500E+3,0.710E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.95032780E+3,0.710E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.72889260E+3,0.710E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.71952410E+3,0.710E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.86291390E+3,0.710E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.72475130E+3,0.710E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.59205870E+3,0.710E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.51745760E+3,0.710E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.44084280E+3,0.710E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.37414020E+3,0.710E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.28847585E+4,0.710E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.23048558E+4,0.710E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.19421387E+4,0.710E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.17040440E+4,0.710E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.15299721E+4,0.710E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.11501604E+4,0.710E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.12962701E+4,0.710E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.95869920E+3,0.710E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.10467597E+4,0.710E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.96091280E+3,0.710E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.80744060E+3,0.710E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.83583100E+3,0.710E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.10833008E+4,0.710E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.96184020E+3,0.710E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.82469640E+3,0.710E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.74775790E+3,0.710E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.65970490E+3,0.710E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.57959110E+3,0.710E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.35195236E+4,0.710E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.29806436E+4,0.710E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.25182192E+4,0.710E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.98175310E+3,0.710E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.26089193E+4,0.710E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.24861931E+4,0.710E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.24191164E+4,0.710E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.23579439E+4,0.710E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.23035540E+4,0.710E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.17376565E+4,0.710E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.20919380E+4,0.710E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.20059243E+4,0.710E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.20565310E+4,0.710E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.20105203E+4,0.710E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.19680474E+4,0.710E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.19483102E+4,0.710E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.15974796E+4,0.710E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.58850400E+2,0.720E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.36574900E+2,0.720E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.11772268E+4,0.720E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.60758590E+3,0.720E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.38350840E+3,0.720E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.24668260E+3,0.720E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.16624720E+3,0.720E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.12259130E+3,0.720E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.90778400E+2,0.720E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.68550500E+2,0.720E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.13981254E+4,0.720E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.98752390E+3,0.720E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.88079020E+3,0.720E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.66333140E+3,0.720E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.49770150E+3,0.720E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.40279470E+3,0.720E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.32111450E+3,0.720E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.25716510E+3,0.720E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.23300562E+4,0.720E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.17971024E+4,0.720E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.14619589E+4,0.720E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.13919848E+4,0.720E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.12638660E+4,0.720E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.99362820E+3,0.720E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.10747287E+4,0.720E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.84045370E+3,0.720E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.87543360E+3,0.720E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.90984070E+3,0.720E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.69642830E+3,0.720E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.69621350E+3,0.720E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.83232490E+3,0.720E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.70869710E+3,0.720E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.58542500E+3,0.720E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.51487840E+3,0.720E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.44133770E+3,0.720E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.37652870E+3,0.720E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.25964033E+4,0.720E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.21464040E+4,0.720E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.18297515E+4,0.720E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.16164737E+4,0.720E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.14572492E+4,0.720E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.11025669E+4,0.720E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.12395201E+4,0.720E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.92341980E+3,0.720E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.10097527E+4,0.720E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.92946760E+3,0.720E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.77779950E+3,0.720E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.81120400E+3,0.720E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.10422993E+4,0.720E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.93663610E+3,0.720E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.81148690E+3,0.720E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.74006690E+3,0.720E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.65681710E+3,0.720E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.58013770E+3,0.720E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.31606446E+4,0.720E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.27609094E+4,0.720E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.23609186E+4,0.720E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.96347730E+3,0.720E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.24240491E+4,0.720E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.23170514E+4,0.720E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.22560584E+4,0.720E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.22002906E+4,0.720E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.21507417E+4,0.720E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.16406567E+4,0.720E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.19309949E+4,0.720E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.18529581E+4,0.720E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.19265925E+4,0.720E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.18843048E+4,0.720E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.18455050E+4,0.720E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.18262149E+4,0.720E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.15072441E+4,0.720E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.14412394E+4,0.720E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.54401500E+2,0.730E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.34283400E+2,0.730E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.10273577E+4,0.730E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.54443550E+3,0.730E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.34862850E+3,0.730E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.22671590E+3,0.730E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.15406960E+3,0.730E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.11429670E+3,0.730E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.85081400E+2,0.730E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.64523800E+2,0.730E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.12220335E+4,0.730E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.88084690E+3,0.730E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.79141350E+3,0.730E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.60213470E+3,0.730E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.45569700E+3,0.730E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.37087230E+3,0.730E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.29728390E+3,0.730E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.23922910E+3,0.730E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.20266698E+4,0.730E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.15894883E+4,0.730E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.12977826E+4,0.730E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.12395033E+4,0.730E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.11275812E+4,0.730E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.88658800E+3,0.730E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.96151940E+3,0.730E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.75231040E+3,0.730E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.78703270E+3,0.730E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.81634550E+3,0.730E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.62484080E+3,0.730E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.62867410E+3,0.730E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.74997760E+3,0.730E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.64373010E+3,0.730E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.53560150E+3,0.730E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.47316850E+3,0.730E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.40746910E+3,0.730E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.34913050E+3,0.730E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.22608400E+4,0.730E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.18969799E+4,0.730E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.16272670E+4,0.730E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.14431973E+4,0.730E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.13043213E+4,0.730E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.99116570E+3,0.730E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.11124511E+4,0.730E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.83281910E+3,0.730E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.91084260E+3,0.730E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.83983510E+3,0.730E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.70192840E+3,0.730E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.73456590E+3,0.730E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.93877020E+3,0.730E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.84925790E+3,0.730E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.74051010E+3,0.730E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.67794300E+3,0.730E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.60419180E+3,0.730E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.53577730E+3,0.730E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.27516509E+4,0.730E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.24344207E+4,0.730E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.20948531E+4,0.730E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.87810980E+3,0.730E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.21417667E+4,0.730E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.20496125E+4,0.730E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.19962879E+4,0.730E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.19474669E+4,0.730E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.19041085E+4,0.730E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.14623131E+4,0.730E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.17026705E+4,0.730E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.16355752E+4,0.730E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.17084912E+4,0.730E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.16713110E+4,0.730E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.16373225E+4,0.730E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.16197710E+4,0.730E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.13428697E+4,0.730E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.12925836E+4,0.730E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.11638241E+4,0.730E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.46481300E+2,0.740E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.29820600E+2,0.740E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.84241230E+3,0.740E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.45198610E+3,0.740E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.29290150E+3,0.740E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.19259840E+3,0.740E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.13214100E+3,0.740E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.98766600E+2,0.740E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.74030900E+2,0.740E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.56476700E+2,0.740E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.10029508E+4,0.740E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.72933520E+3,0.740E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.65874710E+3,0.740E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.50518900E+3,0.740E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.38541090E+3,0.740E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.31556320E+3,0.740E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.25452870E+3,0.740E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.20602860E+3,0.740E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.16644321E+4,0.740E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.13117641E+4,0.740E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.10728050E+4,0.740E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.10269214E+4,0.740E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.93538590E+3,0.740E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.73650630E+3,0.740E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.79917580E+3,0.740E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.62633800E+3,0.740E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.65622600E+3,0.740E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.67963140E+3,0.740E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.52108220E+3,0.740E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.52588940E+3,0.740E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.62622030E+3,0.740E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.54069840E+3,0.740E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.45278370E+3,0.740E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.40184290E+3,0.740E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.34779630E+3,0.740E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.29948800E+3,0.740E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.18587683E+4,0.740E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.15659413E+4,0.740E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.13478163E+4,0.740E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.11983202E+4,0.740E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.10850878E+4,0.740E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.82786250E+3,0.740E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.92774070E+3,0.740E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.69763460E+3,0.740E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.76226600E+3,0.740E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.70376190E+3,0.740E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.58870290E+3,0.740E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.61664100E+3,0.740E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.78470960E+3,0.740E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.71294940E+3,0.740E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.62490100E+3,0.740E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.57415840E+3,0.740E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.51383150E+3,0.740E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.45758530E+3,0.740E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.22639013E+4,0.740E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.20087751E+4,0.740E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.17339129E+4,0.740E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.74068630E+3,0.740E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.17694139E+4,0.740E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.16938988E+4,0.740E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.16500004E+4,0.740E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.16097798E+4,0.740E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.15740661E+4,0.740E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.12144448E+4,0.740E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.14078390E+4,0.740E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.13533433E+4,0.740E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.14132821E+4,0.740E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.13825761E+4,0.740E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.13545779E+4,0.740E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.13397711E+4,0.740E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.11143056E+4,0.740E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.10763807E+4,0.740E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.97195240E+3,0.740E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.81436220E+3,0.740E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.47481400E+2,0.750E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.30549200E+2,0.750E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.84030290E+3,0.750E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.45686870E+3,0.750E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.29769360E+3,0.750E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.19640730E+3,0.750E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.13504060E+3,0.750E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.10106690E+3,0.750E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.75833700E+2,0.750E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.57897000E+2,0.750E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.10011833E+4,0.750E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.73565530E+3,0.750E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.66653080E+3,0.750E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.51321450E+3,0.750E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.39266040E+3,0.750E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.32200220E+3,0.750E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.26008050E+3,0.750E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.21074970E+3,0.750E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.16563829E+4,0.750E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.13172961E+4,0.750E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.10793168E+4,0.750E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.10345489E+4,0.750E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.94314230E+3,0.750E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.74238390E+3,0.750E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.80678450E+3,0.750E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.63220880E+3,0.750E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.66388710E+3,0.750E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.68701430E+3,0.750E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.52648590E+3,0.750E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.53299620E+3,0.750E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.63416620E+3,0.750E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.54932810E+3,0.750E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.46115310E+3,0.750E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.40981080E+3,0.750E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.35513780E+3,0.750E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.30613060E+3,0.750E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.18506131E+4,0.750E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.15716863E+4,0.750E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.13568533E+4,0.750E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.12084737E+4,0.750E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.10954282E+4,0.750E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.83707080E+3,0.750E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.93753010E+3,0.750E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.70623580E+3,0.750E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.77195670E+3,0.750E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.71318460E+3,0.750E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.59599800E+3,0.750E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.62541990E+3,0.750E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.79423010E+3,0.750E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.72367260E+3,0.750E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.63581610E+3,0.750E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.58492700E+3,0.750E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.52412750E+3,0.750E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.46726420E+3,0.750E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.22535037E+4,0.750E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.20134740E+4,0.750E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.17433791E+4,0.750E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.75313690E+3,0.750E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.17753357E+4,0.750E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.17005706E+4,0.750E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.16567768E+4,0.750E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.16166266E+4,0.750E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.15809835E+4,0.750E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.12234224E+4,0.750E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.14105904E+4,0.750E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.13567115E+4,0.750E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.14207081E+4,0.750E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.13899934E+4,0.750E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.13620334E+4,0.750E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.13469951E+4,0.750E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.11225706E+4,0.750E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.10876931E+4,0.750E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.98375910E+3,0.750E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.82496150E+3,0.750E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.83633100E+3,0.750E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.43502700E+2,0.760E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.28354600E+2,0.760E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.73192340E+3,0.760E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.40716460E+3,0.760E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.26873040E+3,0.760E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.17905630E+3,0.760E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.12405100E+3,0.760E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.93359700E+2,0.760E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.70395400E+2,0.760E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.53964200E+2,0.760E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.87335890E+3,0.760E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.65307500E+3,0.760E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.59556280E+3,0.760E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.46268400E+3,0.760E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.35670880E+3,0.760E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.29400210E+3,0.760E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.23864150E+3,0.760E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.19423140E+3,0.760E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.14396620E+4,0.760E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.11612618E+4,0.760E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.95445330E+3,0.760E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.91746900E+3,0.760E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.83784550E+3,0.760E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.65982040E+3,0.760E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.71850590E+3,0.760E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.56350590E+3,0.760E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.59375330E+3,0.760E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.61335130E+3,0.760E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.47025530E+3,0.760E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.47853750E+3,0.760E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.56822510E+3,0.760E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.49561460E+3,0.760E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.41868920E+3,0.760E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.37355900E+3,0.760E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.32506940E+3,0.760E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.28130190E+3,0.760E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.16103754E+4,0.760E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.13848254E+4,0.760E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.12021044E+4,0.760E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.10743491E+4,0.760E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.97608420E+3,0.760E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.74894180E+3,0.760E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.83752750E+3,0.760E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.63378860E+3,0.760E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.69267540E+3,0.760E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.64089680E+3,0.760E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.53528690E+3,0.760E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.56312050E+3,0.760E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.71169730E+3,0.760E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.65211350E+3,0.760E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.57610750E+3,0.760E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.53178230E+3,0.760E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.47825570E+3,0.760E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.42787240E+3,0.760E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.19610192E+4,0.760E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.17707984E+4,0.760E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.15416747E+4,0.760E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.68178680E+3,0.760E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.15643082E+4,0.760E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.14998732E+4,0.760E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.14616315E+4,0.760E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.14265281E+4,0.760E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.13953763E+4,0.760E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.10864242E+4,0.760E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.12413205E+4,0.760E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.11950783E+4,0.760E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.12556728E+4,0.760E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.12287111E+4,0.760E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.12042523E+4,0.760E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.11906528E+4,0.760E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.99636440E+3,0.760E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.97080130E+3,0.760E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.88109380E+3,0.760E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.74095590E+3,0.760E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.75215710E+3,0.760E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.67852780E+3,0.760E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.40192800E+2,0.770E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.26493600E+2,0.770E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.64922250E+3,0.770E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.36768190E+3,0.770E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.24523810E+3,0.770E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.16475860E+3,0.770E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.11488740E+3,0.770E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.86879300E+2,0.770E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.65790400E+2,0.770E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.50615900E+2,0.770E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.77563370E+3,0.770E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.58794870E+3,0.770E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.53899920E+3,0.770E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.42178390E+3,0.770E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.32723040E+3,0.770E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.27085510E+3,0.770E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.22077630E+3,0.770E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.18037110E+3,0.770E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.12755198E+4,0.770E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.10398993E+4,0.770E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.85678860E+3,0.770E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.82551250E+3,0.770E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.75491930E+3,0.770E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.59487280E+3,0.770E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.64870850E+3,0.770E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.50921810E+3,0.770E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.53789460E+3,0.770E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.55484790E+3,0.770E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.42567880E+3,0.770E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.43487920E+3,0.770E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.51550510E+3,0.770E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.45212560E+3,0.770E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.38392650E+3,0.770E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.34368330E+3,0.770E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.30011780E+3,0.770E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.26056720E+3,0.770E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.14282493E+4,0.770E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.12397351E+4,0.770E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.10808340E+4,0.770E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.96864880E+3,0.770E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.88171010E+3,0.770E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.67887180E+3,0.770E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.75818340E+3,0.770E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.57594520E+3,0.770E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.62929090E+3,0.770E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.58296220E+3,0.770E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.48681310E+3,0.770E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.51303760E+3,0.770E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.64586290E+3,0.770E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.59440490E+3,0.770E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.52746810E+3,0.770E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.48823190E+3,0.770E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.44042470E+3,0.770E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.39518890E+3,0.770E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.17394992E+4,0.770E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.15831333E+4,0.770E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.13842225E+4,0.770E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.62381140E+3,0.770E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.14006813E+4,0.770E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.13439514E+4,0.770E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.13099454E+4,0.770E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.12786986E+4,0.770E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.12509767E+4,0.770E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.97887040E+3,0.770E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.11106969E+4,0.770E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.10701912E+4,0.770E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.11269388E+4,0.770E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.11028614E+4,0.770E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.10810811E+4,0.770E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.10686460E+4,0.770E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.89729150E+3,0.770E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.87805750E+3,0.770E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.79916860E+3,0.770E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.67370750E+3,0.770E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.68458550E+3,0.770E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.61911480E+3,0.770E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.56606600E+3,0.770E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.33737400E+2,0.780E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.22655000E+2,0.780E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.52329220E+3,0.780E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.30016240E+3,0.780E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.20254080E+3,0.780E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.13757620E+3,0.780E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.96865800E+2,0.780E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.73818300E+2,0.780E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.56305300E+2,0.780E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.43593000E+2,0.780E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.62596250E+3,0.780E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.47885350E+3,0.780E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.44120140E+3,0.780E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.34788170E+3,0.780E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.27198720E+3,0.780E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.22647100E+3,0.780E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.18574640E+3,0.780E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.15265670E+3,0.780E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.10299899E+4,0.780E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.84443870E+3,0.780E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.69692720E+3,0.780E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.67305270E+3,0.780E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.61630660E+3,0.780E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.48652160E+3,0.780E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.53065270E+3,0.780E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.41743140E+3,0.780E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.44140210E+3,0.780E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.45462950E+3,0.780E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.34958030E+3,0.780E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.35801260E+3,0.780E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.42342920E+3,0.780E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.37342980E+3,0.780E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.31904090E+3,0.780E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.28687030E+3,0.780E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.25174820E+3,0.780E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.21965520E+3,0.780E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.11547638E+4,0.780E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.10070623E+4,0.780E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.88099930E+3,0.780E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.79155440E+3,0.780E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.72193400E+3,0.780E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.55823890E+3,0.780E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.62242220E+3,0.780E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.47507150E+3,0.780E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.51845950E+3,0.780E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.48093890E+3,0.780E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.40219150E+3,0.780E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.42403900E+3,0.780E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.53144420E+3,0.780E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.49101090E+3,0.780E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.43782090E+3,0.780E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.40661850E+3,0.780E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.36825920E+3,0.780E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.33179040E+3,0.780E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.14071724E+4,0.780E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.12854322E+4,0.780E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.11275157E+4,0.780E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.51768570E+3,0.780E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.11388994E+4,0.780E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.10932462E+4,0.780E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.10657050E+4,0.780E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.10403742E+4,0.780E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.10179032E+4,0.780E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.80035340E+3,0.780E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.90395940E+3,0.780E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.87158450E+3,0.780E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.91760410E+3,0.780E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.89802720E+3,0.780E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.88036430E+3,0.780E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.87003670E+3,0.780E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.73291850E+3,0.780E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.71957520E+3,0.780E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.65682120E+3,0.780E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.55562970E+3,0.780E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.56502640E+3,0.780E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.51242690E+3,0.780E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.46966640E+3,0.780E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.39114480E+3,0.780E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.31643100E+2,0.790E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.21405700E+2,0.790E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.48271200E+3,0.790E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.27848740E+3,0.790E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.18878590E+3,0.790E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.12878430E+3,0.790E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.91021000E+2,0.790E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.69577200E+2,0.790E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.53225800E+2,0.790E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.41316600E+2,0.790E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.57775500E+3,0.790E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.44384910E+3,0.790E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.40978640E+3,0.790E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.32409250E+3,0.790E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.25414960E+3,0.790E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.21210390E+3,0.790E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.17438080E+3,0.790E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.14364860E+3,0.790E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.95062180E+3,0.790E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.78160440E+3,0.790E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.64557500E+3,0.790E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.62406930E+3,0.790E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.57177460E+3,0.790E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.45167990E+3,0.790E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.49272680E+3,0.790E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.38791960E+3,0.790E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.41040680E+3,0.790E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.42244780E+3,0.790E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.32511980E+3,0.790E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.33331770E+3,0.790E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.39382270E+3,0.790E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.34809220E+3,0.790E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.29810130E+3,0.790E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.26850000E+3,0.790E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.23607650E+3,0.790E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.20637560E+3,0.790E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.10663289E+4,0.790E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.93220550E+3,0.790E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.81674650E+3,0.790E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.73461520E+3,0.790E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.67055170E+3,0.790E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.51941000E+3,0.790E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.57874610E+3,0.790E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.44259210E+3,0.790E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.48280890E+3,0.790E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.44812160E+3,0.790E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.37494860E+3,0.790E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.39541490E+3,0.790E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.49465360E+3,0.790E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.45775290E+3,0.790E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.40894270E+3,0.790E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.38029110E+3,0.790E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.34494080E+3,0.790E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.31127000E+3,0.790E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.12995975E+4,0.790E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.11895405E+4,0.790E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.10448996E+4,0.790E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.48348310E+3,0.790E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.10546339E+4,0.790E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.10125735E+4,0.790E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.98712160E+3,0.790E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.96370210E+3,0.790E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.94292740E+3,0.790E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.74291920E+3,0.790E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.83729210E+3,0.790E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.80754210E+3,0.790E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.85029540E+3,0.790E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.83217180E+3,0.790E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.81583760E+3,0.790E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.80619030E+3,0.790E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.68007310E+3,0.790E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.66862000E+3,0.790E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.61103860E+3,0.790E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.51760830E+3,0.790E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.52653700E+3,0.790E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.47806720E+3,0.790E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.43860830E+3,0.790E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.36582470E+3,0.790E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.34235260E+3,0.790E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.32647500E+2,0.800E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.22083700E+2,0.800E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.48740200E+3,0.800E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.28506170E+3,0.800E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.19416150E+3,0.800E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.13273170E+3,0.800E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.93883600E+2,0.800E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.71776000E+2,0.800E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.54902300E+2,0.800E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.42608500E+2,0.800E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.58379600E+3,0.800E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.45335960E+3,0.800E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.41983840E+3,0.800E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.33321670E+3,0.800E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.26185840E+3,0.800E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.21871850E+3,0.800E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.17991240E+3,0.800E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.14823250E+3,0.800E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.95736170E+3,0.800E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.79465850E+3,0.800E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.65759170E+3,0.800E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.63652100E+3,0.800E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.58366570E+3,0.800E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.46085090E+3,0.800E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.50355400E+3,0.800E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.39629990E+3,0.800E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.42025520E+3,0.800E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.43227410E+3,0.800E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.33243400E+3,0.800E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.34187100E+3,0.800E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.40370590E+3,0.800E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.35784550E+3,0.800E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.30703710E+3,0.800E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.27676970E+3,0.800E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.24349600E+3,0.800E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.21293560E+3,0.800E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.10744128E+4,0.800E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.94720110E+3,0.800E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.83242220E+3,0.800E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.74998240E+3,0.800E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.68523850E+3,0.800E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.53145620E+3,0.800E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.59192160E+3,0.800E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.45328020E+3,0.800E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.49471860E+3,0.800E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.45942820E+3,0.800E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.38395180E+3,0.800E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.40566070E+3,0.800E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.50664510E+3,0.800E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.47008500E+3,0.800E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.42079320E+3,0.800E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.39167400E+3,0.800E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.35554970E+3,0.800E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.32102510E+3,0.800E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.13092921E+4,0.800E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.12070341E+4,0.800E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.10636276E+4,0.800E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.49715300E+3,0.800E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.10712093E+4,0.800E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.10290835E+4,0.800E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.10033846E+4,0.800E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.97972320E+3,0.800E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.95873970E+3,0.800E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.75756310E+3,0.800E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.84922660E+3,0.800E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.81952610E+3,0.800E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.86529630E+3,0.800E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.84694850E+3,0.800E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.83044190E+3,0.800E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.82053560E+3,0.800E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.69354790E+3,0.800E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.68391950E+3,0.800E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.62592010E+3,0.800E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.53051690E+3,0.800E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.54005040E+3,0.800E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.49085310E+3,0.800E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.45068210E+3,0.800E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.37600960E+3,0.800E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.35193500E+3,0.800E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.36207550E+3,0.800E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.45565900E+2,0.810E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.29383200E+2,0.810E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.84156200E+3,0.810E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.44509900E+3,0.810E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.28743460E+3,0.810E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.18891370E+3,0.810E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.12977590E+3,0.810E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.97188700E+2,0.810E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.73035300E+2,0.810E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.55878200E+2,0.810E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.10013499E+4,0.810E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.71984280E+3,0.810E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.64850370E+3,0.810E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.49588920E+3,0.810E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.37786060E+3,0.810E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.30940570E+3,0.810E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.24971520E+3,0.810E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.20236390E+3,0.810E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.16699732E+4,0.810E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.13012325E+4,0.810E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.10621257E+4,0.810E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.10156676E+4,0.810E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.92450540E+3,0.810E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.72875260E+3,0.810E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.78917040E+3,0.810E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.61912140E+3,0.810E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.64688450E+3,0.810E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.67034360E+3,0.810E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.51478030E+3,0.810E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.51777130E+3,0.810E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.61653920E+3,0.810E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.53101480E+3,0.810E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.44413160E+3,0.810E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.39408930E+3,0.810E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.34115420E+3,0.810E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.29394640E+3,0.810E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.18646164E+4,0.810E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.15547036E+4,0.810E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.13341432E+4,0.810E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.11843558E+4,0.810E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.10716858E+4,0.810E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.81713880E+3,0.810E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.91594930E+3,0.810E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.68833610E+3,0.810E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.75141170E+3,0.810E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.69349420E+3,0.810E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.58127400E+3,0.810E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.60745600E+3,0.810E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.77388330E+3,0.810E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.70133540E+3,0.810E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.61379650E+3,0.810E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.56366330E+3,0.810E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.50431850E+3,0.810E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.44915730E+3,0.810E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.22724078E+4,0.810E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.19977665E+4,0.810E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.17187930E+4,0.810E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.72802070E+3,0.810E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.17584731E+4,0.810E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.16821281E+4,0.810E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.16382173E+4,0.810E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.15980083E+4,0.810E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.15622939E+4,0.810E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.12025229E+4,0.810E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.14026627E+4,0.810E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.13479037E+4,0.810E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.14013832E+4,0.810E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.13707449E+4,0.810E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.13427654E+4,0.810E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.13281907E+4,0.810E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.11030932E+4,0.810E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.10619960E+4,0.810E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.95783300E+3,0.810E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.80262850E+3,0.810E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.81249710E+3,0.810E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.72924020E+3,0.810E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.66279090E+3,0.810E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.54691720E+3,0.810E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.50961460E+3,0.810E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.52190910E+3,0.810E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.79223780E+3,0.810E+2,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.45178600E+2,0.820E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.29396300E+2,0.820E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.77049850E+3,0.820E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.42598770E+3,0.820E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.28017140E+3,0.820E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.18622350E+3,0.820E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.12882430E+3,0.820E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.96880100E+2,0.820E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.73028500E+2,0.820E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.55990900E+2,0.820E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.91912570E+3,0.820E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.68410110E+3,0.820E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.62271340E+3,0.820E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.48258810E+3,0.820E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.37129390E+3,0.820E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.30563890E+3,0.820E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.24781410E+3,0.820E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.20153300E+3,0.820E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.15164193E+4,0.820E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.12187009E+4,0.820E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.10008602E+4,0.820E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.96137180E+3,0.820E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.87756550E+3,0.820E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.69108340E+3,0.820E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.75211560E+3,0.820E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.58980850E+3,0.820E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.62087440E+3,0.820E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.64167640E+3,0.820E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.49199760E+3,0.820E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.49993220E+3,0.820E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.59373850E+3,0.820E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.51689320E+3,0.820E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.43592810E+3,0.820E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.38853730E+3,0.820E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.33776830E+3,0.820E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.29204720E+3,0.820E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.16956909E+4,0.820E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.14534745E+4,0.820E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.12598691E+4,0.820E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.11249617E+4,0.820E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.10214733E+4,0.820E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.78299060E+3,0.820E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.87595820E+3,0.820E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.66216750E+3,0.820E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.72370460E+3,0.820E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.66938820E+3,0.820E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.55927100E+3,0.820E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.58793680E+3,0.820E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.74387970E+3,0.820E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.68057520E+3,0.820E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.60037140E+3,0.820E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.55368260E+3,0.820E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.49748720E+3,0.820E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.44470070E+3,0.820E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.20646687E+4,0.820E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.18594085E+4,0.820E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.16164677E+4,0.820E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.71062890E+3,0.820E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.16419885E+4,0.820E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.15739763E+4,0.820E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.15337469E+4,0.820E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.14968291E+4,0.820E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.14640624E+4,0.820E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.11380979E+4,0.820E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.13034316E+4,0.820E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.12545335E+4,0.820E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.13170177E+4,0.820E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.12886907E+4,0.820E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.12629662E+4,0.820E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.12487891E+4,0.820E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.10439034E+4,0.820E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.10154887E+4,0.820E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.92083050E+3,0.820E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.77385260E+3,0.820E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.78529450E+3,0.820E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.70790090E+3,0.820E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.64554700E+3,0.820E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.53402070E+3,0.820E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.49813010E+3,0.820E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.51131450E+3,0.820E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.76196480E+3,0.820E+2,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.73881560E+3,0.820E+2,0.820E+2,0.00000000E+0,0.00000000E+0 - ,0.42241900E+2,0.830E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.27932900E+2,0.830E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.66152780E+3,0.830E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.38103070E+3,0.830E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.25605370E+3,0.830E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.17278310E+3,0.830E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.12079930E+3,0.830E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.91493400E+2,0.830E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.69368900E+2,0.830E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.53420400E+2,0.830E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.79108680E+3,0.830E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.60760080E+3,0.830E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.55943360E+3,0.830E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.44013430E+3,0.830E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.34277880E+3,0.830E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.28429480E+3,0.830E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.23212190E+3,0.830E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.18987560E+3,0.830E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.12966253E+4,0.830E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.10686331E+4,0.830E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.88251530E+3,0.830E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.85188550E+3,0.830E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.77993360E+3,0.830E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.61445090E+3,0.830E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.67130550E+3,0.830E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.52693210E+3,0.830E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.55817400E+3,0.830E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.57514870E+3,0.830E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.44105510E+3,0.830E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.45236780E+3,0.830E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.53570130E+3,0.830E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.47183760E+3,0.830E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.40199200E+3,0.830E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.36047350E+3,0.830E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.31527740E+3,0.830E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.27407550E+3,0.830E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.14529418E+4,0.830E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.12732370E+4,0.830E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.11143977E+4,0.830E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.10010315E+4,0.830E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.91248200E+3,0.830E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.70407130E+3,0.830E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.78575170E+3,0.830E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.59827920E+3,0.830E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.65393370E+3,0.830E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.60631280E+3,0.830E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.50575740E+3,0.830E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.53417140E+3,0.830E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.67073540E+3,0.830E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.61958270E+3,0.830E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.55156050E+3,0.830E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.51139760E+3,0.830E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.46208340E+3,0.830E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.41520110E+3,0.830E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.17696390E+4,0.830E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.16234740E+4,0.830E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.14251223E+4,0.830E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.65171260E+3,0.830E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.14382615E+4,0.830E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.13809451E+4,0.830E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.13462674E+4,0.830E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.13143784E+4,0.830E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.12860963E+4,0.830E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.10103860E+4,0.830E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.11390166E+4,0.830E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.10983110E+4,0.830E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.11597774E+4,0.830E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.11351424E+4,0.830E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.11129109E+4,0.830E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.10999410E+4,0.830E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.92612910E+3,0.830E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.90981540E+3,0.830E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.82982850E+3,0.830E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.70043950E+3,0.830E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.71241700E+3,0.830E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.64537650E+3,0.830E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.59085050E+3,0.830E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.49072340E+3,0.830E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.45847260E+3,0.830E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.47152310E+3,0.830E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.68856550E+3,0.830E+2,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.67269040E+3,0.830E+2,0.820E+2,0.00000000E+0,0.00000000E+0 - ,0.61752960E+3,0.830E+2,0.830E+2,0.00000000E+0,0.00000000E+0 - ,0.40710600E+2,0.840E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.27211800E+2,0.840E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.60731510E+3,0.840E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.35746030E+3,0.840E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.24330570E+3,0.840E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.16573270E+3,0.840E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.11666150E+3,0.840E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.88773600E+2,0.840E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.67567200E+2,0.840E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.52188100E+2,0.840E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.72726310E+3,0.840E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.56780720E+3,0.840E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.52626000E+3,0.840E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.41768440E+3,0.840E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.32771360E+3,0.840E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.27309950E+3,0.840E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.22398500E+3,0.840E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.18392230E+3,0.840E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.11891902E+4,0.840E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.99221250E+3,0.840E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.82178250E+3,0.840E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.79553840E+3,0.840E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.72956570E+3,0.840E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.57517310E+3,0.840E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.62948100E+3,0.840E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.49459140E+3,0.840E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.52549790E+3,0.840E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.54053270E+3,0.840E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.41478690E+3,0.840E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.42746160E+3,0.840E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.50536000E+3,0.840E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.44808220E+3,0.840E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.38408530E+3,0.840E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.34572660E+3,0.840E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.30354480E+3,0.840E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.26479780E+3,0.840E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.13343692E+4,0.840E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.11818604E+4,0.840E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.10398622E+4,0.840E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.93720360E+3,0.840E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.85623980E+3,0.840E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.66336080E+3,0.840E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.73919570E+3,0.840E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.56531410E+3,0.840E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.61769980E+3,0.840E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.57350990E+3,0.840E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.47823360E+3,0.840E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.50616860E+3,0.840E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.63278330E+3,0.840E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.58760970E+3,0.840E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.52587280E+3,0.840E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.48916400E+3,0.840E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.44353000E+3,0.840E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.39983350E+3,0.840E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.16260419E+4,0.840E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.15047607E+4,0.840E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.13277397E+4,0.840E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.62085480E+3,0.840E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.13354309E+4,0.840E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.12832336E+4,0.840E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.12512879E+4,0.840E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.12218775E+4,0.840E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.11958046E+4,0.840E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.94515700E+3,0.840E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.10569864E+4,0.840E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.10202790E+4,0.840E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.10796889E+4,0.840E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.10568831E+4,0.840E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.10363788E+4,0.840E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.10240338E+4,0.840E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.86580300E+3,0.840E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.85504390E+3,0.840E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.78248020E+3,0.840E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.66238200E+3,0.840E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.67449800E+3,0.840E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.61277720E+3,0.840E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.56231000E+3,0.840E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.46825250E+3,0.840E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.43792710E+3,0.840E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.45080740E+3,0.840E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.65074290E+3,0.840E+2,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.63822510E+3,0.840E+2,0.820E+2,0.00000000E+0,0.00000000E+0 - ,0.58861880E+3,0.840E+2,0.830E+2,0.00000000E+0,0.00000000E+0 - ,0.56260110E+3,0.840E+2,0.840E+2,0.00000000E+0,0.00000000E+0 - ,0.38046800E+2,0.850E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.25807100E+2,0.850E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.53565210E+3,0.850E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.32315400E+3,0.850E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.22339710E+3,0.850E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.15398830E+3,0.850E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.10936180E+3,0.850E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.83743700E+2,0.850E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.64079700E+2,0.850E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.49704300E+2,0.850E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.64255990E+3,0.850E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.51104720E+3,0.850E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.47738160E+3,0.850E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.38289140E+3,0.850E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.30317170E+3,0.850E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.25418990E+3,0.850E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.20969510E+3,0.850E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.17306680E+3,0.850E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.10486754E+4,0.850E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.88679380E+3,0.850E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.73687680E+3,0.850E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.71582420E+3,0.850E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.65777000E+3,0.850E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.51922800E+3,0.850E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.56918500E+3,0.850E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.44794120E+3,0.850E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.47740460E+3,0.850E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.49002960E+3,0.850E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.37654500E+3,0.850E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.39005450E+3,0.850E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.46013230E+3,0.850E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.41119140E+3,0.850E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.35508990E+3,0.850E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.32115720E+3,0.850E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.28336260E+3,0.850E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.24831690E+3,0.850E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.11787843E+4,0.850E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.10561781E+4,0.850E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.93492800E+3,0.850E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.84595890E+3,0.850E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.77500770E+3,0.850E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.60351860E+3,0.850E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.67120920E+3,0.850E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.51618070E+3,0.850E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.56361340E+3,0.850E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.52417160E+3,0.850E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.43716280E+3,0.850E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.46363160E+3,0.850E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.57648690E+3,0.850E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.53857130E+3,0.850E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.48503660E+3,0.850E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.45297260E+3,0.850E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.41249290E+3,0.850E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.37339600E+3,0.850E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.14375237E+4,0.850E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.13427557E+4,0.850E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.11918004E+4,0.850E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.57219880E+3,0.850E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.11941552E+4,0.850E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.11484879E+4,0.850E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.11201674E+4,0.850E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.10940580E+4,0.850E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.10709219E+4,0.850E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.85263060E+3,0.850E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.94504500E+3,0.850E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.91333710E+3,0.850E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.96825870E+3,0.850E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.94792020E+3,0.850E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.92971630E+3,0.850E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.91834420E+3,0.850E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.78031510E+3,0.850E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.77523370E+3,0.850E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.71228880E+3,0.850E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.60524130E+3,0.850E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.61710680E+3,0.850E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.56258800E+3,0.850E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.51772850E+3,0.850E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.43264880E+3,0.850E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.40518020E+3,0.850E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.41747370E+3,0.850E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.59434970E+3,0.850E+2,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.58543140E+3,0.850E+2,0.820E+2,0.00000000E+0,0.00000000E+0 - ,0.54287440E+3,0.850E+2,0.830E+2,0.00000000E+0,0.00000000E+0 - ,0.52058720E+3,0.850E+2,0.840E+2,0.00000000E+0,0.00000000E+0 - ,0.48365360E+3,0.850E+2,0.850E+2,0.00000000E+0,0.00000000E+0 - ,0.35275000E+2,0.860E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.24288600E+2,0.860E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.47129940E+3,0.860E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.29040790E+3,0.860E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.20366210E+3,0.860E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.14199460E+3,0.860E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.10173400E+3,0.860E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.78399300E+2,0.860E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.60320800E+2,0.860E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.46997000E+2,0.860E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.56630470E+3,0.860E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.45752070E+3,0.860E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.43040700E+3,0.860E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.34853240E+3,0.860E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.27834410E+3,0.860E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.23475630E+3,0.860E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.19477780E+3,0.860E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.16157780E+3,0.860E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.92348960E+3,0.860E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.78946510E+3,0.860E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.65782090E+3,0.860E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.64106890E+3,0.860E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.59013650E+3,0.860E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.46657860E+3,0.860E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.51200690E+3,0.860E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.40371620E+3,0.860E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.43125430E+3,0.860E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.44180520E+3,0.860E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.34010290E+3,0.860E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.35375690E+3,0.860E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.41640720E+3,0.860E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.37473780E+3,0.860E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.32584680E+3,0.860E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.29605910E+3,0.860E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.26246780E+3,0.860E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.23103920E+3,0.860E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.10398788E+4,0.860E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.94037660E+3,0.860E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.83682440E+3,0.860E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.75986860E+3,0.860E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.69790750E+3,0.860E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.54617620E+3,0.860E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.60628810E+3,0.860E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.46875270E+3,0.860E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.51133700E+3,0.860E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.47629130E+3,0.860E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.39751230E+3,0.860E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.42213930E+3,0.860E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.52225240E+3,0.860E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.49045740E+3,0.860E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.44423510E+3,0.860E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.41640380E+3,0.860E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.38074630E+3,0.860E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.34603400E+3,0.860E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.12691514E+4,0.860E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.11942553E+4,0.860E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.10653886E+4,0.860E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.52379990E+3,0.860E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.10641113E+4,0.860E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.10241601E+4,0.860E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.99910040E+3,0.860E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.97596710E+3,0.860E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.95547530E+3,0.860E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.76577540E+3,0.860E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.84248080E+3,0.860E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.81508100E+3,0.860E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.86486000E+3,0.860E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.84676410E+3,0.860E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.83063370E+3,0.860E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.82022230E+3,0.860E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.70009390E+3,0.860E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.69908500E+3,0.860E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.64467130E+3,0.860E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.54983920E+3,0.860E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.56121370E+3,0.860E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.51327610E+3,0.860E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.47360870E+3,0.860E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.39719060E+3,0.860E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.37248250E+3,0.860E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.38402410E+3,0.860E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.53990550E+3,0.860E+2,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.53369840E+3,0.860E+2,0.820E+2,0.00000000E+0,0.00000000E+0 - ,0.49729720E+3,0.860E+2,0.830E+2,0.00000000E+0,0.00000000E+0 - ,0.47831130E+3,0.860E+2,0.840E+2,0.00000000E+0,0.00000000E+0 - ,0.44604470E+3,0.860E+2,0.850E+2,0.00000000E+0,0.00000000E+0 - ,0.41282750E+3,0.860E+2,0.860E+2,0.00000000E+0,0.00000000E+0 - ,0.10074940E+3,0.870E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.59659400E+2,0.870E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.28945966E+4,0.870E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.12189348E+4,0.870E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.71065850E+3,0.870E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.43419670E+3,0.870E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.28277630E+3,0.870E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.20397230E+3,0.870E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.14835840E+3,0.870E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.11051200E+3,0.870E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.33986461E+4,0.870E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.20446296E+4,0.870E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.17465418E+4,0.870E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.12378269E+4,0.870E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.88882250E+3,0.870E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.70197610E+3,0.870E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.54727120E+3,0.870E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.43044680E+3,0.870E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.60209123E+4,0.870E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.39885535E+4,0.870E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.31533933E+4,0.870E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.29483214E+4,0.870E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.26441348E+4,0.870E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.20951563E+4,0.870E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.22092516E+4,0.870E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.17359767E+4,0.870E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.17406013E+4,0.870E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.18302286E+4,0.870E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.14168737E+4,0.870E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.13464975E+4,0.870E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.16330869E+4,0.870E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.13219669E+4,0.870E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.10509064E+4,0.870E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.90547240E+3,0.870E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.76070860E+3,0.870E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.63792100E+3,0.870E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.66879551E+4,0.870E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.48140613E+4,0.870E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.39238630E+4,0.870E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.33777348E+4,0.870E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.30012009E+4,0.870E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.22208404E+4,0.870E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.25189457E+4,0.870E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.18286037E+4,0.870E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.19819822E+4,0.870E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.18052792E+4,0.870E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.15403020E+4,0.870E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.15550964E+4,0.870E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.20671731E+4,0.870E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.17732620E+4,0.870E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.14801255E+4,0.870E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.13236329E+4,0.870E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.11516386E+4,0.870E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.99949930E+3,0.870E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.82315280E+4,0.870E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.63397235E+4,0.870E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.51715628E+4,0.870E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.17765919E+4,0.870E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.54969601E+4,0.870E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.51886826E+4,0.870E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.50376830E+4,0.870E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.49009739E+4,0.870E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.47792385E+4,0.870E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.35004650E+4,0.870E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.45180145E+4,0.870E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.43256882E+4,0.870E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.42216216E+4,0.870E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.41211013E+4,0.870E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.40270614E+4,0.870E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.39908778E+4,0.870E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.32187704E+4,0.870E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.29218119E+4,0.870E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.25563295E+4,0.870E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.21076991E+4,0.870E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.21032454E+4,0.870E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.18383882E+4,0.870E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.16363884E+4,0.870E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.13271181E+4,0.870E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.12270914E+4,0.870E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.12394986E+4,0.870E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.21094753E+4,0.870E+2,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.19333025E+4,0.870E+2,0.820E+2,0.00000000E+0,0.00000000E+0 - ,0.16699965E+4,0.870E+2,0.830E+2,0.00000000E+0,0.00000000E+0 - ,0.15408317E+4,0.870E+2,0.840E+2,0.00000000E+0,0.00000000E+0 - ,0.13687363E+4,0.870E+2,0.850E+2,0.00000000E+0,0.00000000E+0 - ,0.12134959E+4,0.870E+2,0.860E+2,0.00000000E+0,0.00000000E+0 - ,0.73147398E+4,0.870E+2,0.870E+2,0.00000000E+0,0.00000000E+0 - ,0.99413100E+2,0.880E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.59674000E+2,0.880E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.24340697E+4,0.880E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.11320344E+4,0.880E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.68137890E+3,0.880E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.42416130E+3,0.880E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.27936020E+3,0.880E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.20282600E+3,0.880E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.14825160E+3,0.880E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.11081260E+3,0.880E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.28745717E+4,0.880E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.18719600E+4,0.880E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.16279493E+4,0.880E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.11837103E+4,0.880E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.86434290E+3,0.880E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.68837560E+3,0.880E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.54058680E+3,0.880E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.42751470E+3,0.880E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.49128581E+4,0.880E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.35289590E+4,0.880E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.28292273E+4,0.880E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.26655950E+4,0.880E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.24036878E+4,0.880E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.18947707E+4,0.880E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.20238919E+4,0.880E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.15845838E+4,0.880E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.16192221E+4,0.880E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.16942469E+4,0.880E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.13022136E+4,0.880E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.12677966E+4,0.880E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.15270149E+4,0.880E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.12635730E+4,0.880E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.10197251E+4,0.880E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.88504330E+3,0.880E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.74865020E+3,0.880E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.63127570E+3,0.880E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.54594039E+4,0.880E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.42339736E+4,0.880E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.35246180E+4,0.880E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.30700206E+4,0.880E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.27442675E+4,0.880E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.20488350E+4,0.880E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.23149349E+4,0.880E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.16984672E+4,0.880E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.18511077E+4,0.880E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.16939362E+4,0.880E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.14296950E+4,0.880E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.14674624E+4,0.880E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.19210215E+4,0.880E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.16832537E+4,0.880E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.14267831E+4,0.880E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.12854608E+4,0.880E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.11265319E+4,0.880E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.98363370E+3,0.880E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.66646049E+4,0.880E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.55052582E+4,0.880E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.45943095E+4,0.880E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.17037104E+4,0.880E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.47976061E+4,0.880E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.45623865E+4,0.880E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.44362592E+4,0.880E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.43214914E+4,0.880E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.42193690E+4,0.880E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.31447184E+4,0.880E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.38693475E+4,0.880E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.37006978E+4,0.880E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.37536534E+4,0.880E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.36679746E+4,0.880E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.35884351E+4,0.880E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.35540067E+4,0.880E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.28892983E+4,0.880E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.26921229E+4,0.880E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.23813318E+4,0.880E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.19684730E+4,0.880E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.19760672E+4,0.880E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.17428522E+4,0.880E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.15616887E+4,0.880E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.12704258E+4,0.880E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.11766222E+4,0.880E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.11957573E+4,0.880E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.19547292E+4,0.880E+2,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.18286515E+4,0.880E+2,0.820E+2,0.00000000E+0,0.00000000E+0 - ,0.16046349E+4,0.880E+2,0.830E+2,0.00000000E+0,0.00000000E+0 - ,0.14914089E+4,0.880E+2,0.840E+2,0.00000000E+0,0.00000000E+0 - ,0.13351632E+4,0.880E+2,0.850E+2,0.00000000E+0,0.00000000E+0 - ,0.11909286E+4,0.880E+2,0.860E+2,0.00000000E+0,0.00000000E+0 - ,0.60457168E+4,0.880E+2,0.870E+2,0.00000000E+0,0.00000000E+0 - ,0.53054399E+4,0.880E+2,0.880E+2,0.00000000E+0,0.00000000E+0 - ,0.89406000E+2,0.890E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.54461300E+2,0.890E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.20082591E+4,0.890E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.97721480E+3,0.890E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.60005330E+3,0.890E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.37866720E+3,0.890E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.25180860E+3,0.890E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.18403180E+3,0.890E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.13527920E+3,0.890E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.10158570E+3,0.890E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.23774617E+4,0.890E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.16040300E+4,0.890E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.14098711E+4,0.890E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.10405681E+4,0.890E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.76851320E+3,0.890E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.61613190E+3,0.890E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.48688350E+3,0.890E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.38707200E+3,0.890E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.40174782E+4,0.890E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.29771478E+4,0.890E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.24021540E+4,0.890E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.22732739E+4,0.890E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.20559589E+4,0.890E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.16183634E+4,0.890E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.17384495E+4,0.890E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.13600663E+4,0.890E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.14017622E+4,0.890E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.14625357E+4,0.890E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.11217466E+4,0.890E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.11049523E+4,0.890E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.13263601E+4,0.890E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.11110958E+4,0.890E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.90553420E+3,0.890E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.79026450E+3,0.890E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.67216580E+3,0.890E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.56954790E+3,0.890E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.44690053E+4,0.890E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.35643510E+4,0.890E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.29977722E+4,0.890E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.26270446E+4,0.890E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.23567083E+4,0.890E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.17692538E+4,0.890E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.19948729E+4,0.890E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.14730457E+4,0.890E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.16081722E+4,0.890E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.14753924E+4,0.890E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.12402274E+4,0.890E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.12822835E+4,0.890E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.16650502E+4,0.890E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.14751121E+4,0.890E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.12620917E+4,0.890E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.11429090E+4,0.890E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.10069141E+4,0.890E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.88341400E+3,0.890E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.54478929E+4,0.890E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.46120247E+4,0.890E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.38897052E+4,0.890E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.15031569E+4,0.890E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.40323992E+4,0.890E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.38433536E+4,0.890E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.37393646E+4,0.890E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.36445469E+4,0.890E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.35602278E+4,0.890E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.26796802E+4,0.890E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.32333681E+4,0.890E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.30968078E+4,0.890E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.31769406E+4,0.890E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.31056847E+4,0.890E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.30398461E+4,0.890E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.30095999E+4,0.890E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.24623774E+4,0.890E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.23202277E+4,0.890E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.20645670E+4,0.890E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.17115570E+4,0.890E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.17232231E+4,0.890E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.15276535E+4,0.890E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.13743640E+4,0.890E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.11213924E+4,0.890E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.10400238E+4,0.890E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.10600607E+4,0.890E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.16946605E+4,0.890E+2,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.16008616E+4,0.890E+2,0.820E+2,0.00000000E+0,0.00000000E+0 - ,0.14174346E+4,0.890E+2,0.830E+2,0.00000000E+0,0.00000000E+0 - ,0.13236360E+4,0.890E+2,0.840E+2,0.00000000E+0,0.00000000E+0 - ,0.11913272E+4,0.890E+2,0.850E+2,0.00000000E+0,0.00000000E+0 - ,0.10675065E+4,0.890E+2,0.860E+2,0.00000000E+0,0.00000000E+0 - ,0.49814961E+4,0.890E+2,0.870E+2,0.00000000E+0,0.00000000E+0 - ,0.44669584E+4,0.890E+2,0.880E+2,0.00000000E+0,0.00000000E+0 - ,0.37996565E+4,0.890E+2,0.890E+2,0.00000000E+0,0.00000000E+0 - ,0.82083600E+2,0.900E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.51110300E+2,0.900E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.16724768E+4,0.900E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.85252490E+3,0.900E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.53608580E+3,0.900E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.34435760E+3,0.900E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.23207230E+3,0.900E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.17124180E+3,0.900E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.12693930E+3,0.900E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.95984500E+2,0.900E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.19852103E+4,0.900E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.13883756E+4,0.900E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.12352681E+4,0.900E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.92751070E+3,0.900E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.69479830E+3,0.900E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.56206360E+3,0.900E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.44804860E+3,0.900E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.35892730E+3,0.900E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.33208171E+4,0.900E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.25377308E+4,0.900E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.20608901E+4,0.900E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.19602827E+4,0.900E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.17786546E+4,0.900E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.13994778E+4,0.900E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.15110816E+4,0.900E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.11825093E+4,0.900E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.12287380E+4,0.900E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.12777896E+4,0.900E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.97919840E+3,0.900E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.97588560E+3,0.900E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.11670583E+4,0.900E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.99120150E+3,0.900E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.81755520E+3,0.900E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.71866790E+3,0.900E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.61585050E+3,0.900E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.52542400E+3,0.900E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.36996637E+4,0.900E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.30331273E+4,0.900E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.25787074E+4,0.900E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.22748325E+4,0.900E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.20492299E+4,0.900E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.15491780E+4,0.900E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.17421202E+4,0.900E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.12966551E+4,0.900E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.14168423E+4,0.900E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.13036060E+4,0.900E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.10925939E+4,0.900E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.11371745E+4,0.900E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.14631580E+4,0.900E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.13115880E+4,0.900E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.11344385E+4,0.900E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.10338769E+4,0.900E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.91709200E+3,0.900E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.80980180E+3,0.900E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.45055681E+4,0.900E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.39071262E+4,0.900E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.33315473E+4,0.900E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.13478223E+4,0.900E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.34277894E+4,0.900E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.32744792E+4,0.900E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.31877428E+4,0.900E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.31084769E+4,0.900E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.30380345E+4,0.900E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.23122086E+4,0.900E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.27358113E+4,0.900E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.26241922E+4,0.900E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.27191319E+4,0.900E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.26591268E+4,0.900E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.26040009E+4,0.900E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.25769767E+4,0.900E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.21236819E+4,0.900E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.20248239E+4,0.900E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.18137564E+4,0.900E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.15101361E+4,0.900E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.15249297E+4,0.900E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.13598576E+4,0.900E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.12292164E+4,0.900E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.10074225E+4,0.900E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.93609580E+3,0.900E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.95680470E+3,0.900E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.14915698E+4,0.900E+2,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.14229431E+4,0.900E+2,0.820E+2,0.00000000E+0,0.00000000E+0 - ,0.12726601E+4,0.900E+2,0.830E+2,0.00000000E+0,0.00000000E+0 - ,0.11951492E+4,0.900E+2,0.840E+2,0.00000000E+0,0.00000000E+0 - ,0.10828719E+4,0.900E+2,0.850E+2,0.00000000E+0,0.00000000E+0 - ,0.97614170E+3,0.900E+2,0.860E+2,0.00000000E+0,0.00000000E+0 - ,0.41555932E+4,0.900E+2,0.870E+2,0.00000000E+0,0.00000000E+0 - ,0.38047750E+4,0.900E+2,0.880E+2,0.00000000E+0,0.00000000E+0 - ,0.32704258E+4,0.900E+2,0.890E+2,0.00000000E+0,0.00000000E+0 - ,0.28472704E+4,0.900E+2,0.900E+2,0.00000000E+0,0.00000000E+0 - ,0.80726000E+2,0.910E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.50005200E+2,0.910E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.17306038E+4,0.910E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.85763790E+3,0.910E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.53308180E+3,0.910E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.33998630E+3,0.910E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.22813330E+3,0.910E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.16791870E+3,0.910E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.12426420E+3,0.910E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.93866300E+2,0.910E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.20511151E+4,0.910E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.14030924E+4,0.910E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.12403071E+4,0.910E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.92324960E+3,0.910E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.68729140E+3,0.910E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.55412740E+3,0.910E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.44044180E+3,0.910E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.35207430E+3,0.910E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.34570434E+4,0.910E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.25892888E+4,0.910E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.20945389E+4,0.910E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.19869265E+4,0.910E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.17996577E+4,0.910E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.14173421E+4,0.910E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.15251022E+4,0.910E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.11941778E+4,0.910E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.12344914E+4,0.910E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.12859300E+4,0.910E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.98684670E+3,0.910E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.97668650E+3,0.910E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.11699494E+4,0.910E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.98664000E+3,0.910E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.80937540E+3,0.910E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.70943800E+3,0.910E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.60630260E+3,0.910E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.51614250E+3,0.910E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.38488310E+4,0.910E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.30987868E+4,0.910E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.26179361E+4,0.910E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.23009943E+4,0.910E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.20684111E+4,0.910E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.15587481E+4,0.910E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.17549706E+4,0.910E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.13015598E+4,0.910E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.14207211E+4,0.910E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.13053320E+4,0.910E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.10968175E+4,0.910E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.11367042E+4,0.910E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.14690715E+4,0.910E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.13085146E+4,0.910E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.11258498E+4,0.910E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.10231942E+4,0.910E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.90511410E+3,0.910E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.79733130E+3,0.910E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.46916964E+4,0.910E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.40037089E+4,0.910E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.33915606E+4,0.910E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.13396248E+4,0.910E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.35059336E+4,0.910E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.33442162E+4,0.910E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.32544268E+4,0.910E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.31724783E+4,0.910E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.30996207E+4,0.910E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.23450320E+4,0.910E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.28084101E+4,0.910E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.26917985E+4,0.910E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.27690943E+4,0.910E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.27073188E+4,0.910E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.26503867E+4,0.910E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.26234579E+4,0.910E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.21538516E+4,0.910E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.20393959E+4,0.910E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.18205331E+4,0.910E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.15133881E+4,0.910E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.15256409E+4,0.910E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.13566458E+4,0.910E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.12236676E+4,0.910E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.10014754E+4,0.910E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.92999430E+3,0.910E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.94896980E+3,0.910E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.14976018E+4,0.910E+2,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.14206996E+4,0.910E+2,0.820E+2,0.00000000E+0,0.00000000E+0 - ,0.12642423E+4,0.910E+2,0.830E+2,0.00000000E+0,0.00000000E+0 - ,0.11841627E+4,0.910E+2,0.840E+2,0.00000000E+0,0.00000000E+0 - ,0.10698651E+4,0.910E+2,0.850E+2,0.00000000E+0,0.00000000E+0 - ,0.96217680E+3,0.910E+2,0.860E+2,0.00000000E+0,0.00000000E+0 - ,0.43039645E+4,0.910E+2,0.870E+2,0.00000000E+0,0.00000000E+0 - ,0.38865716E+4,0.910E+2,0.880E+2,0.00000000E+0,0.00000000E+0 - ,0.33200764E+4,0.910E+2,0.890E+2,0.00000000E+0,0.00000000E+0 - ,0.28725136E+4,0.910E+2,0.900E+2,0.00000000E+0,0.00000000E+0 - ,0.29089206E+4,0.910E+2,0.910E+2,0.00000000E+0,0.00000000E+0 - ,0.78203400E+2,0.920E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.48498000E+2,0.920E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.16716156E+4,0.920E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.82971320E+3,0.920E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.51601950E+3,0.920E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.32928020E+3,0.920E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.22106590E+3,0.920E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.16279260E+3,0.920E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.12052900E+3,0.920E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.91086900E+2,0.920E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.19814675E+4,0.920E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.13571628E+4,0.920E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.12000275E+4,0.920E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.89364440E+3,0.920E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.66549650E+3,0.920E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.53670890E+3,0.920E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.42673540E+3,0.920E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.34123400E+3,0.920E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.33376961E+4,0.920E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.25033576E+4,0.920E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.20254740E+4,0.920E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.19216819E+4,0.920E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.17407294E+4,0.920E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.13709264E+4,0.920E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.14753669E+4,0.920E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.11552737E+4,0.920E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.11945389E+4,0.920E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.12442037E+4,0.920E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.95483090E+3,0.920E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.94527750E+3,0.920E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.11321107E+4,0.920E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.95506070E+3,0.920E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.78370690E+3,0.920E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.68708390E+3,0.920E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.58734500E+3,0.920E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.50013680E+3,0.920E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.37160678E+4,0.920E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.29957186E+4,0.920E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.25317373E+4,0.920E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.22256807E+4,0.920E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.20009439E+4,0.920E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.15082494E+4,0.920E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.16979484E+4,0.920E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.12596142E+4,0.920E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.13749665E+4,0.920E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.12634136E+4,0.920E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.10615457E+4,0.920E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.11003399E+4,0.920E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.14216099E+4,0.920E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.12666329E+4,0.920E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.10901053E+4,0.920E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.99086960E+3,0.920E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.87669020E+3,0.920E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.77245190E+3,0.920E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.45291727E+4,0.920E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.38697611E+4,0.920E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.32793360E+4,0.920E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.12970461E+4,0.920E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.33890395E+4,0.920E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.32330975E+4,0.920E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.31463690E+4,0.920E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.30672053E+4,0.920E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.29968237E+4,0.920E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.22680138E+4,0.920E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.27140296E+4,0.920E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.26013226E+4,0.920E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.26775672E+4,0.920E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.26178718E+4,0.920E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.25628645E+4,0.920E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.25367915E+4,0.920E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.20830385E+4,0.920E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.19730821E+4,0.920E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.17616844E+4,0.920E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.14646529E+4,0.920E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.14766337E+4,0.920E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.13133066E+4,0.920E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.11847530E+4,0.920E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.96980220E+3,0.920E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.90065620E+3,0.920E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.91908240E+3,0.920E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.14493061E+4,0.920E+2,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.13752752E+4,0.920E+2,0.820E+2,0.00000000E+0,0.00000000E+0 - ,0.12241322E+4,0.920E+2,0.830E+2,0.00000000E+0,0.00000000E+0 - ,0.11467509E+4,0.920E+2,0.840E+2,0.00000000E+0,0.00000000E+0 - ,0.10362496E+4,0.920E+2,0.850E+2,0.00000000E+0,0.00000000E+0 - ,0.93211210E+3,0.920E+2,0.860E+2,0.00000000E+0,0.00000000E+0 - ,0.41565121E+4,0.920E+2,0.870E+2,0.00000000E+0,0.00000000E+0 - ,0.37572430E+4,0.920E+2,0.880E+2,0.00000000E+0,0.00000000E+0 - ,0.32107560E+4,0.920E+2,0.890E+2,0.00000000E+0,0.00000000E+0 - ,0.27789432E+4,0.920E+2,0.900E+2,0.00000000E+0,0.00000000E+0 - ,0.28136269E+4,0.920E+2,0.910E+2,0.00000000E+0,0.00000000E+0 - ,0.27215209E+4,0.920E+2,0.920E+2,0.00000000E+0,0.00000000E+0 - ,0.79439100E+2,0.930E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.48724100E+2,0.930E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.18005066E+4,0.930E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.86956410E+3,0.930E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.53289880E+3,0.930E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.33646270E+3,0.930E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.22420940E+3,0.930E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.16429590E+3,0.930E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.12116670E+3,0.930E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.91309000E+2,0.930E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.21313007E+4,0.930E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.14294308E+4,0.930E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.12543604E+4,0.930E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.92419700E+3,0.930E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.68227500E+3,0.930E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.54731890E+3,0.930E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.43301050E+3,0.930E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.34483050E+3,0.930E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.36085602E+4,0.930E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.26611178E+4,0.930E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.21449232E+4,0.930E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.20287846E+4,0.930E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.18341800E+4,0.930E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.14450682E+4,0.930E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.15501899E+4,0.930E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.12138708E+4,0.930E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.12487909E+4,0.930E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.13033334E+4,0.930E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.10009549E+4,0.930E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.98372150E+3,0.930E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.11804499E+4,0.930E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.98737510E+3,0.930E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.80425620E+3,0.930E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.70203110E+3,0.930E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.59750350E+3,0.930E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.50682160E+3,0.930E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.40138973E+4,0.930E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.31875734E+4,0.930E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.26766472E+4,0.930E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.23437586E+4,0.930E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.21018417E+4,0.930E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.15778736E+4,0.930E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.17790323E+4,0.930E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.13137158E+4,0.930E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.14331563E+4,0.930E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.13146561E+4,0.930E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.11068617E+4,0.930E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.11425196E+4,0.930E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.14840150E+4,0.930E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.13126653E+4,0.930E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.11221440E+4,0.930E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.10160025E+4,0.930E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.89523210E+3,0.930E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.78580380E+3,0.930E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.48930436E+4,0.930E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.41279330E+4,0.930E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.34757124E+4,0.930E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.13372850E+4,0.930E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.36078825E+4,0.930E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.34378544E+4,0.930E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.33445279E+4,0.930E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.32594431E+4,0.930E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.31837627E+4,0.930E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.23935584E+4,0.930E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.28964080E+4,0.930E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.27730351E+4,0.930E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.28396469E+4,0.930E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.27757424E+4,0.930E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.27166522E+4,0.930E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.26897033E+4,0.930E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.21986632E+4,0.930E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.20680029E+4,0.930E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.18390464E+4,0.930E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.15251115E+4,0.930E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.15347972E+4,0.930E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.13602378E+4,0.930E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.12236448E+4,0.930E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.99920960E+3,0.930E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.92702850E+3,0.930E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.94428620E+3,0.930E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.15116714E+4,0.930E+2,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.14258266E+4,0.930E+2,0.820E+2,0.00000000E+0,0.00000000E+0 - ,0.12612415E+4,0.930E+2,0.830E+2,0.00000000E+0,0.00000000E+0 - ,0.11774038E+4,0.930E+2,0.840E+2,0.00000000E+0,0.00000000E+0 - ,0.10596377E+4,0.930E+2,0.850E+2,0.00000000E+0,0.00000000E+0 - ,0.94975540E+3,0.930E+2,0.860E+2,0.00000000E+0,0.00000000E+0 - ,0.44697774E+4,0.930E+2,0.870E+2,0.00000000E+0,0.00000000E+0 - ,0.39952606E+4,0.930E+2,0.880E+2,0.00000000E+0,0.00000000E+0 - ,0.33932601E+4,0.930E+2,0.890E+2,0.00000000E+0,0.00000000E+0 - ,0.29170992E+4,0.930E+2,0.900E+2,0.00000000E+0,0.00000000E+0 - ,0.29646668E+4,0.930E+2,0.910E+2,0.00000000E+0,0.00000000E+0 - ,0.28671025E+4,0.930E+2,0.920E+2,0.00000000E+0,0.00000000E+0 - ,0.30329760E+4,0.930E+2,0.930E+2,0.00000000E+0,0.00000000E+0 - ,0.77102100E+2,0.940E+2,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.47379800E+2,0.940E+2,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.17278140E+4,0.940E+2,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.83944780E+3,0.940E+2,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.51579770E+3,0.940E+2,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.32625000E+3,0.940E+2,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.21767650E+3,0.940E+2,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.15964350E+3,0.940E+2,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.11781930E+3,0.940E+2,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.88836500E+2,0.940E+2,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.20459284E+4,0.940E+2,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.13785876E+4,0.940E+2,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.12114443E+4,0.940E+2,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.89432550E+3,0.940E+2,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.66120920E+3,0.940E+2,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.53088280E+3,0.940E+2,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.42034980E+3,0.940E+2,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.33497590E+3,0.940E+2,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.34586883E+4,0.940E+2,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.25612750E+4,0.940E+2,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.20661768E+4,0.940E+2,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.19554505E+4,0.940E+2,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.17685649E+4,0.940E+2,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.13931385E+4,0.940E+2,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.14955657E+4,0.940E+2,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.11710013E+4,0.940E+2,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.12060158E+4,0.940E+2,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.12582170E+4,0.940E+2,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.96605990E+3,0.940E+2,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.95086030E+3,0.940E+2,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.11405197E+4,0.940E+2,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.95550390E+3,0.940E+2,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.77929760E+3,0.940E+2,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.68073550E+3,0.940E+2,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.57979560E+3,0.940E+2,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.49211280E+3,0.940E+2,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.38477324E+4,0.940E+2,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.30671463E+4,0.940E+2,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.25790022E+4,0.940E+2,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.22600639E+4,0.940E+2,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.20277440E+4,0.940E+2,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.15233742E+4,0.940E+2,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.17171041E+4,0.940E+2,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.12690647E+4,0.940E+2,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.13847315E+4,0.940E+2,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.12706578E+4,0.940E+2,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.10692791E+4,0.940E+2,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.11047467E+4,0.940E+2,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.14334370E+4,0.940E+2,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.12697368E+4,0.940E+2,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.10867671E+4,0.940E+2,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.98462910E+3,0.940E+2,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.86818680E+3,0.940E+2,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.76254070E+3,0.940E+2,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.46894909E+4,0.940E+2,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.39694488E+4,0.940E+2,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.33469278E+4,0.940E+2,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.12946997E+4,0.940E+2,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.34708103E+4,0.940E+2,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.33082782E+4,0.940E+2,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.32187253E+4,0.940E+2,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.31370576E+4,0.940E+2,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.30644224E+4,0.940E+2,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.23068366E+4,0.940E+2,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.27842586E+4,0.940E+2,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.26660816E+4,0.940E+2,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.27342974E+4,0.940E+2,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.26729042E+4,0.940E+2,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.26161724E+4,0.940E+2,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.25900957E+4,0.940E+2,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.21189811E+4,0.940E+2,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.19960266E+4,0.940E+2,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.17764187E+4,0.940E+2,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.14737544E+4,0.940E+2,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.14836747E+4,0.940E+2,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.13158080E+4,0.940E+2,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.11842955E+4,0.940E+2,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.96746430E+3,0.940E+2,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.89773860E+3,0.940E+2,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.91479120E+3,0.940E+2,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.14602247E+4,0.940E+2,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.13790263E+4,0.940E+2,0.820E+2,0.00000000E+0,0.00000000E+0 - ,0.12212647E+4,0.940E+2,0.830E+2,0.00000000E+0,0.00000000E+0 - ,0.11407827E+4,0.940E+2,0.840E+2,0.00000000E+0,0.00000000E+0 - ,0.10273948E+4,0.940E+2,0.850E+2,0.00000000E+0,0.00000000E+0 - ,0.92140470E+3,0.940E+2,0.860E+2,0.00000000E+0,0.00000000E+0 - ,0.42885858E+4,0.940E+2,0.870E+2,0.00000000E+0,0.00000000E+0 - ,0.38444325E+4,0.940E+2,0.880E+2,0.00000000E+0,0.00000000E+0 - ,0.32695288E+4,0.940E+2,0.890E+2,0.00000000E+0,0.00000000E+0 - ,0.28146033E+4,0.940E+2,0.900E+2,0.00000000E+0,0.00000000E+0 - ,0.28581875E+4,0.940E+2,0.910E+2,0.00000000E+0,0.00000000E+0 - ,0.27642585E+4,0.940E+2,0.920E+2,0.00000000E+0,0.00000000E+0 - ,0.29218223E+4,0.940E+2,0.930E+2,0.00000000E+0,0.00000000E+0 - ,0.28152366E+4,0.940E+2,0.940E+2,0.00000000E+0,0.00000000E+0 - ,0.47379000E+1,0.101E+3,0.100E+1,0.00000000E+0,0.91180000E+0 - ,0.31287000E+1,0.101E+3,0.200E+1,0.00000000E+0,0.00000000E+0 - ,0.68939100E+2,0.101E+3,0.300E+1,0.00000000E+0,0.00000000E+0 - ,0.41307800E+2,0.101E+3,0.400E+1,0.00000000E+0,0.00000000E+0 - ,0.28276700E+2,0.101E+3,0.500E+1,0.00000000E+0,0.00000000E+0 - ,0.19265300E+2,0.101E+3,0.600E+1,0.00000000E+0,0.00000000E+0 - ,0.13516400E+2,0.101E+3,0.700E+1,0.00000000E+0,0.00000000E+0 - ,0.10237100E+2,0.101E+3,0.800E+1,0.00000000E+0,0.00000000E+0 - ,0.77441000E+1,0.101E+3,0.900E+1,0.00000000E+0,0.00000000E+0 - ,0.59403000E+1,0.101E+3,0.100E+2,0.00000000E+0,0.00000000E+0 - ,0.82564100E+2,0.101E+3,0.110E+2,0.00000000E+0,0.00000000E+0 - ,0.65370300E+2,0.101E+3,0.120E+2,0.00000000E+0,0.00000000E+0 - ,0.60855800E+2,0.101E+3,0.130E+2,0.00000000E+0,0.00000000E+0 - ,0.48518200E+2,0.101E+3,0.140E+2,0.00000000E+0,0.00000000E+0 - ,0.38139700E+2,0.101E+3,0.150E+2,0.00000000E+0,0.00000000E+0 - ,0.31771300E+2,0.101E+3,0.160E+2,0.00000000E+0,0.00000000E+0 - ,0.26017000E+2,0.101E+3,0.170E+2,0.00000000E+0,0.00000000E+0 - ,0.21305500E+2,0.101E+3,0.180E+2,0.00000000E+0,0.00000000E+0 - ,0.13444410E+3,0.101E+3,0.190E+2,0.00000000E+0,0.00000000E+0 - ,0.11348570E+3,0.101E+3,0.200E+2,0.00000000E+0,0.00000000E+0 - ,0.94208300E+2,0.101E+3,0.210E+2,0.00000000E+0,0.00000000E+0 - ,0.91333400E+2,0.101E+3,0.220E+2,0.00000000E+0,0.00000000E+0 - ,0.83831300E+2,0.101E+3,0.230E+2,0.00000000E+0,0.00000000E+0 - ,0.65983700E+2,0.101E+3,0.240E+2,0.00000000E+0,0.00000000E+0 - ,0.72411100E+2,0.101E+3,0.250E+2,0.00000000E+0,0.00000000E+0 - ,0.56799300E+2,0.101E+3,0.260E+2,0.00000000E+0,0.00000000E+0 - ,0.60574600E+2,0.101E+3,0.270E+2,0.00000000E+0,0.00000000E+0 - ,0.62253200E+2,0.101E+3,0.280E+2,0.00000000E+0,0.00000000E+0 - ,0.47649900E+2,0.101E+3,0.290E+2,0.00000000E+0,0.00000000E+0 - ,0.49346900E+2,0.101E+3,0.300E+2,0.00000000E+0,0.00000000E+0 - ,0.58420700E+2,0.101E+3,0.310E+2,0.00000000E+0,0.00000000E+0 - ,0.51990500E+2,0.101E+3,0.320E+2,0.00000000E+0,0.00000000E+0 - ,0.44651200E+2,0.101E+3,0.330E+2,0.00000000E+0,0.00000000E+0 - ,0.40201000E+2,0.101E+3,0.340E+2,0.00000000E+0,0.00000000E+0 - ,0.35274000E+2,0.101E+3,0.350E+2,0.00000000E+0,0.00000000E+0 - ,0.30726100E+2,0.101E+3,0.360E+2,0.00000000E+0,0.00000000E+0 - ,0.15093400E+3,0.101E+3,0.370E+2,0.00000000E+0,0.00000000E+0 - ,0.13506640E+3,0.101E+3,0.380E+2,0.00000000E+0,0.00000000E+0 - ,0.11929610E+3,0.101E+3,0.390E+2,0.00000000E+0,0.00000000E+0 - ,0.10773060E+3,0.101E+3,0.400E+2,0.00000000E+0,0.00000000E+0 - ,0.98518300E+2,0.101E+3,0.410E+2,0.00000000E+0,0.00000000E+0 - ,0.76366100E+2,0.101E+3,0.420E+2,0.00000000E+0,0.00000000E+0 - ,0.85080000E+2,0.101E+3,0.430E+2,0.00000000E+0,0.00000000E+0 - ,0.65086300E+2,0.101E+3,0.440E+2,0.00000000E+0,0.00000000E+0 - ,0.71198500E+2,0.101E+3,0.450E+2,0.00000000E+0,0.00000000E+0 - ,0.66121100E+2,0.101E+3,0.460E+2,0.00000000E+0,0.00000000E+0 - ,0.54965800E+2,0.101E+3,0.470E+2,0.00000000E+0,0.00000000E+0 - ,0.58356800E+2,0.101E+3,0.480E+2,0.00000000E+0,0.00000000E+0 - ,0.72907600E+2,0.101E+3,0.490E+2,0.00000000E+0,0.00000000E+0 - ,0.67943000E+2,0.101E+3,0.500E+2,0.00000000E+0,0.00000000E+0 - ,0.60947000E+2,0.101E+3,0.510E+2,0.00000000E+0,0.00000000E+0 - ,0.56742700E+2,0.101E+3,0.520E+2,0.00000000E+0,0.00000000E+0 - ,0.51465600E+2,0.101E+3,0.530E+2,0.00000000E+0,0.00000000E+0 - ,0.46379400E+2,0.101E+3,0.540E+2,0.00000000E+0,0.00000000E+0 - ,0.18402230E+3,0.101E+3,0.550E+2,0.00000000E+0,0.00000000E+0 - ,0.17170330E+3,0.101E+3,0.560E+2,0.00000000E+0,0.00000000E+0 - ,0.15211060E+3,0.101E+3,0.570E+2,0.00000000E+0,0.00000000E+0 - ,0.71883000E+2,0.101E+3,0.580E+2,0.00000000E+0,0.27991000E+1 - ,0.15245020E+3,0.101E+3,0.590E+2,0.00000000E+0,0.00000000E+0 - ,0.14658510E+3,0.101E+3,0.600E+2,0.00000000E+0,0.00000000E+0 - ,0.14296200E+3,0.101E+3,0.610E+2,0.00000000E+0,0.00000000E+0 - ,0.13962540E+3,0.101E+3,0.620E+2,0.00000000E+0,0.00000000E+0 - ,0.13666950E+3,0.101E+3,0.630E+2,0.00000000E+0,0.00000000E+0 - ,0.10836620E+3,0.101E+3,0.640E+2,0.00000000E+0,0.00000000E+0 - ,0.12040560E+3,0.101E+3,0.650E+2,0.00000000E+0,0.00000000E+0 - ,0.11631780E+3,0.101E+3,0.660E+2,0.00000000E+0,0.00000000E+0 - ,0.12352200E+3,0.101E+3,0.670E+2,0.00000000E+0,0.00000000E+0 - ,0.12093020E+3,0.101E+3,0.680E+2,0.00000000E+0,0.00000000E+0 - ,0.11860700E+3,0.101E+3,0.690E+2,0.00000000E+0,0.00000000E+0 - ,0.11718110E+3,0.101E+3,0.700E+2,0.00000000E+0,0.00000000E+0 - ,0.99298400E+2,0.101E+3,0.710E+2,0.00000000E+0,0.00000000E+0 - ,0.98513600E+2,0.101E+3,0.720E+2,0.00000000E+0,0.00000000E+0 - ,0.90285800E+2,0.101E+3,0.730E+2,0.00000000E+0,0.00000000E+0 - ,0.76415000E+2,0.101E+3,0.740E+2,0.00000000E+0,0.00000000E+0 - ,0.77879300E+2,0.101E+3,0.750E+2,0.00000000E+0,0.00000000E+0 - ,0.70802400E+2,0.101E+3,0.760E+2,0.00000000E+0,0.00000000E+0 - ,0.64989000E+2,0.101E+3,0.770E+2,0.00000000E+0,0.00000000E+0 - ,0.54045100E+2,0.101E+3,0.780E+2,0.00000000E+0,0.00000000E+0 - ,0.50508600E+2,0.101E+3,0.790E+2,0.00000000E+0,0.00000000E+0 - ,0.52054700E+2,0.101E+3,0.800E+2,0.00000000E+0,0.00000000E+0 - ,0.74881700E+2,0.101E+3,0.810E+2,0.00000000E+0,0.00000000E+0 - ,0.73669200E+2,0.101E+3,0.820E+2,0.00000000E+0,0.00000000E+0 - ,0.68103100E+2,0.101E+3,0.830E+2,0.00000000E+0,0.00000000E+0 - ,0.65160500E+2,0.101E+3,0.840E+2,0.00000000E+0,0.00000000E+0 - ,0.60333800E+2,0.101E+3,0.850E+2,0.00000000E+0,0.00000000E+0 - ,0.55434500E+2,0.101E+3,0.860E+2,0.00000000E+0,0.00000000E+0 - ,0.17492120E+3,0.101E+3,0.870E+2,0.00000000E+0,0.00000000E+0 - ,0.17050820E+3,0.101E+3,0.880E+2,0.00000000E+0,0.00000000E+0 - ,0.15181390E+3,0.101E+3,0.890E+2,0.00000000E+0,0.00000000E+0 - ,0.13747240E+3,0.101E+3,0.900E+2,0.00000000E+0,0.00000000E+0 - ,0.13587010E+3,0.101E+3,0.910E+2,0.00000000E+0,0.00000000E+0 - ,0.13156440E+3,0.101E+3,0.920E+2,0.00000000E+0,0.00000000E+0 - ,0.13473040E+3,0.101E+3,0.930E+2,0.00000000E+0,0.00000000E+0 - ,0.13059460E+3,0.101E+3,0.940E+2,0.00000000E+0,0.00000000E+0 - ,0.75916000E+1,0.101E+3,0.101E+3,0.00000000E+0,0.00000000E+0 - ,0.14316500E+2,0.103E+3,0.100E+1,0.98650000E+0,0.91180000E+0 - ,0.87773000E+1,0.103E+3,0.200E+1,0.98650000E+0,0.00000000E+0 - ,0.28221060E+3,0.103E+3,0.300E+1,0.98650000E+0,0.00000000E+0 - ,0.14813230E+3,0.103E+3,0.400E+1,0.98650000E+0,0.00000000E+0 - ,0.93672900E+2,0.103E+3,0.500E+1,0.98650000E+0,0.00000000E+0 - ,0.60086000E+2,0.103E+3,0.600E+1,0.98650000E+0,0.00000000E+0 - ,0.40294400E+2,0.103E+3,0.700E+1,0.98650000E+0,0.00000000E+0 - ,0.29557500E+2,0.103E+3,0.800E+1,0.98650000E+0,0.00000000E+0 - ,0.21760500E+2,0.103E+3,0.900E+1,0.98650000E+0,0.00000000E+0 - ,0.16338800E+2,0.103E+3,0.100E+2,0.98650000E+0,0.00000000E+0 - ,0.33534500E+3,0.103E+3,0.110E+2,0.98650000E+0,0.00000000E+0 - ,0.24016270E+3,0.103E+3,0.120E+2,0.98650000E+0,0.00000000E+0 - ,0.21472650E+3,0.103E+3,0.130E+2,0.98650000E+0,0.00000000E+0 - ,0.16205080E+3,0.103E+3,0.140E+2,0.98650000E+0,0.00000000E+0 - ,0.12150670E+3,0.103E+3,0.150E+2,0.98650000E+0,0.00000000E+0 - ,0.98124900E+2,0.103E+3,0.160E+2,0.98650000E+0,0.00000000E+0 - ,0.77986500E+2,0.103E+3,0.170E+2,0.98650000E+0,0.00000000E+0 - ,0.62220500E+2,0.103E+3,0.180E+2,0.98650000E+0,0.00000000E+0 - ,0.55515160E+3,0.103E+3,0.190E+2,0.98650000E+0,0.00000000E+0 - ,0.43415760E+3,0.103E+3,0.200E+2,0.98650000E+0,0.00000000E+0 - ,0.35403170E+3,0.103E+3,0.210E+2,0.98650000E+0,0.00000000E+0 - ,0.33738960E+3,0.103E+3,0.220E+2,0.98650000E+0,0.00000000E+0 - ,0.30654820E+3,0.103E+3,0.230E+2,0.98650000E+0,0.00000000E+0 - ,0.24050330E+3,0.103E+3,0.240E+2,0.98650000E+0,0.00000000E+0 - ,0.26090190E+3,0.103E+3,0.250E+2,0.98650000E+0,0.00000000E+0 - ,0.20361490E+3,0.103E+3,0.260E+2,0.98650000E+0,0.00000000E+0 - ,0.21289780E+3,0.103E+3,0.270E+2,0.98650000E+0,0.00000000E+0 - ,0.22117390E+3,0.103E+3,0.280E+2,0.98650000E+0,0.00000000E+0 - ,0.16880750E+3,0.103E+3,0.290E+2,0.98650000E+0,0.00000000E+0 - ,0.16949490E+3,0.103E+3,0.300E+2,0.98650000E+0,0.00000000E+0 - ,0.20269000E+3,0.103E+3,0.310E+2,0.98650000E+0,0.00000000E+0 - ,0.17294250E+3,0.103E+3,0.320E+2,0.98650000E+0,0.00000000E+0 - ,0.14284710E+3,0.103E+3,0.330E+2,0.98650000E+0,0.00000000E+0 - ,0.12547680E+3,0.103E+3,0.340E+2,0.98650000E+0,0.00000000E+0 - ,0.10733800E+3,0.103E+3,0.350E+2,0.98650000E+0,0.00000000E+0 - ,0.91333300E+2,0.103E+3,0.360E+2,0.98650000E+0,0.00000000E+0 - ,0.61856810E+3,0.103E+3,0.370E+2,0.98650000E+0,0.00000000E+0 - ,0.51783930E+3,0.103E+3,0.380E+2,0.98650000E+0,0.00000000E+0 - ,0.44294480E+3,0.103E+3,0.390E+2,0.98650000E+0,0.00000000E+0 - ,0.39191790E+3,0.103E+3,0.400E+2,0.98650000E+0,0.00000000E+0 - ,0.35350080E+3,0.103E+3,0.410E+2,0.98650000E+0,0.00000000E+0 - ,0.26737610E+3,0.103E+3,0.420E+2,0.98650000E+0,0.00000000E+0 - ,0.30065330E+3,0.103E+3,0.430E+2,0.98650000E+0,0.00000000E+0 - ,0.22388710E+3,0.103E+3,0.440E+2,0.98650000E+0,0.00000000E+0 - ,0.24525610E+3,0.103E+3,0.450E+2,0.98650000E+0,0.00000000E+0 - ,0.22580420E+3,0.103E+3,0.460E+2,0.98650000E+0,0.00000000E+0 - ,0.18833740E+3,0.103E+3,0.470E+2,0.98650000E+0,0.00000000E+0 - ,0.19709400E+3,0.103E+3,0.480E+2,0.98650000E+0,0.00000000E+0 - ,0.25313700E+3,0.103E+3,0.490E+2,0.98650000E+0,0.00000000E+0 - ,0.22808140E+3,0.103E+3,0.500E+2,0.98650000E+0,0.00000000E+0 - ,0.19776980E+3,0.103E+3,0.510E+2,0.98650000E+0,0.00000000E+0 - ,0.18030560E+3,0.103E+3,0.520E+2,0.98650000E+0,0.00000000E+0 - ,0.15986700E+3,0.103E+3,0.530E+2,0.98650000E+0,0.00000000E+0 - ,0.14098180E+3,0.103E+3,0.540E+2,0.98650000E+0,0.00000000E+0 - ,0.75234180E+3,0.103E+3,0.550E+2,0.98650000E+0,0.00000000E+0 - ,0.66457190E+3,0.103E+3,0.560E+2,0.98650000E+0,0.00000000E+0 - ,0.57042660E+3,0.103E+3,0.570E+2,0.98650000E+0,0.00000000E+0 - ,0.23452710E+3,0.103E+3,0.580E+2,0.98650000E+0,0.27991000E+1 - ,0.58397970E+3,0.103E+3,0.590E+2,0.98650000E+0,0.00000000E+0 - ,0.55869720E+3,0.103E+3,0.600E+2,0.98650000E+0,0.00000000E+0 - ,0.54412320E+3,0.103E+3,0.610E+2,0.98650000E+0,0.00000000E+0 - ,0.53079090E+3,0.103E+3,0.620E+2,0.98650000E+0,0.00000000E+0 - ,0.51894980E+3,0.103E+3,0.630E+2,0.98650000E+0,0.00000000E+0 - ,0.39672230E+3,0.103E+3,0.640E+2,0.98650000E+0,0.00000000E+0 - ,0.46354420E+3,0.103E+3,0.650E+2,0.98650000E+0,0.00000000E+0 - ,0.44501010E+3,0.103E+3,0.660E+2,0.98650000E+0,0.00000000E+0 - ,0.46541000E+3,0.103E+3,0.670E+2,0.98650000E+0,0.00000000E+0 - ,0.45528270E+3,0.103E+3,0.680E+2,0.98650000E+0,0.00000000E+0 - ,0.44600300E+3,0.103E+3,0.690E+2,0.98650000E+0,0.00000000E+0 - ,0.44132200E+3,0.103E+3,0.700E+2,0.98650000E+0,0.00000000E+0 - ,0.36474670E+3,0.103E+3,0.710E+2,0.98650000E+0,0.00000000E+0 - ,0.35006170E+3,0.103E+3,0.720E+2,0.98650000E+0,0.00000000E+0 - ,0.31424830E+3,0.103E+3,0.730E+2,0.98650000E+0,0.00000000E+0 - ,0.26138330E+3,0.103E+3,0.740E+2,0.98650000E+0,0.00000000E+0 - ,0.26436970E+3,0.103E+3,0.750E+2,0.98650000E+0,0.00000000E+0 - ,0.23602580E+3,0.103E+3,0.760E+2,0.98650000E+0,0.00000000E+0 - ,0.21346440E+3,0.103E+3,0.770E+2,0.98650000E+0,0.00000000E+0 - ,0.17461320E+3,0.103E+3,0.780E+2,0.98650000E+0,0.00000000E+0 - ,0.16213420E+3,0.103E+3,0.790E+2,0.98650000E+0,0.00000000E+0 - ,0.16604890E+3,0.103E+3,0.800E+2,0.98650000E+0,0.00000000E+0 - ,0.25738230E+3,0.103E+3,0.810E+2,0.98650000E+0,0.00000000E+0 - ,0.24683550E+3,0.103E+3,0.820E+2,0.98650000E+0,0.00000000E+0 - ,0.22143250E+3,0.103E+3,0.830E+2,0.98650000E+0,0.00000000E+0 - ,0.20812690E+3,0.103E+3,0.840E+2,0.98650000E+0,0.00000000E+0 - ,0.18860730E+3,0.103E+3,0.850E+2,0.98650000E+0,0.00000000E+0 - ,0.16989430E+3,0.103E+3,0.860E+2,0.98650000E+0,0.00000000E+0 - ,0.69764490E+3,0.103E+3,0.870E+2,0.98650000E+0,0.00000000E+0 - ,0.64903250E+3,0.103E+3,0.880E+2,0.98650000E+0,0.00000000E+0 - ,0.56135190E+3,0.103E+3,0.890E+2,0.98650000E+0,0.00000000E+0 - ,0.49107770E+3,0.103E+3,0.900E+2,0.98650000E+0,0.00000000E+0 - ,0.49346510E+3,0.103E+3,0.910E+2,0.98650000E+0,0.00000000E+0 - ,0.47742540E+3,0.103E+3,0.920E+2,0.98650000E+0,0.00000000E+0 - ,0.49952020E+3,0.103E+3,0.930E+2,0.98650000E+0,0.00000000E+0 - ,0.48234660E+3,0.103E+3,0.940E+2,0.98650000E+0,0.00000000E+0 - ,0.24057300E+2,0.103E+3,0.101E+3,0.98650000E+0,0.00000000E+0 - ,0.85319700E+2,0.103E+3,0.103E+3,0.98650000E+0,0.98650000E+0 - ,0.18465600E+2,0.104E+3,0.100E+1,0.98080000E+0,0.91180000E+0 - ,0.11465500E+2,0.104E+3,0.200E+1,0.98080000E+0,0.00000000E+0 - ,0.35221600E+3,0.104E+3,0.300E+1,0.98080000E+0,0.00000000E+0 - ,0.18634530E+3,0.104E+3,0.400E+1,0.98080000E+0,0.00000000E+0 - ,0.11908150E+3,0.104E+3,0.500E+1,0.98080000E+0,0.00000000E+0 - ,0.77095100E+2,0.104E+3,0.600E+1,0.98080000E+0,0.00000000E+0 - ,0.52085200E+2,0.104E+3,0.700E+1,0.98080000E+0,0.00000000E+0 - ,0.38413200E+2,0.104E+3,0.800E+1,0.98080000E+0,0.00000000E+0 - ,0.28409800E+2,0.104E+3,0.900E+1,0.98080000E+0,0.00000000E+0 - ,0.21406700E+2,0.104E+3,0.100E+2,0.98080000E+0,0.00000000E+0 - ,0.41864880E+3,0.104E+3,0.110E+2,0.98080000E+0,0.00000000E+0 - ,0.30137770E+3,0.104E+3,0.120E+2,0.98080000E+0,0.00000000E+0 - ,0.27074610E+3,0.104E+3,0.130E+2,0.98080000E+0,0.00000000E+0 - ,0.20575440E+3,0.104E+3,0.140E+2,0.98080000E+0,0.00000000E+0 - ,0.15536440E+3,0.104E+3,0.150E+2,0.98080000E+0,0.00000000E+0 - ,0.12609930E+3,0.104E+3,0.160E+2,0.98080000E+0,0.00000000E+0 - ,0.10072120E+3,0.104E+3,0.170E+2,0.98080000E+0,0.00000000E+0 - ,0.80717400E+2,0.104E+3,0.180E+2,0.98080000E+0,0.00000000E+0 - ,0.69485960E+3,0.104E+3,0.190E+2,0.98080000E+0,0.00000000E+0 - ,0.54358420E+3,0.104E+3,0.200E+2,0.98080000E+0,0.00000000E+0 - ,0.44371900E+3,0.104E+3,0.210E+2,0.98080000E+0,0.00000000E+0 - ,0.42362170E+3,0.104E+3,0.220E+2,0.98080000E+0,0.00000000E+0 - ,0.38527540E+3,0.104E+3,0.230E+2,0.98080000E+0,0.00000000E+0 - ,0.30260610E+3,0.104E+3,0.240E+2,0.98080000E+0,0.00000000E+0 - ,0.32840120E+3,0.104E+3,0.250E+2,0.98080000E+0,0.00000000E+0 - ,0.25660430E+3,0.104E+3,0.260E+2,0.98080000E+0,0.00000000E+0 - ,0.26862840E+3,0.104E+3,0.270E+2,0.98080000E+0,0.00000000E+0 - ,0.27871160E+3,0.104E+3,0.280E+2,0.98080000E+0,0.00000000E+0 - ,0.21297970E+3,0.104E+3,0.290E+2,0.98080000E+0,0.00000000E+0 - ,0.21442560E+3,0.104E+3,0.300E+2,0.98080000E+0,0.00000000E+0 - ,0.25620490E+3,0.104E+3,0.310E+2,0.98080000E+0,0.00000000E+0 - ,0.21973750E+3,0.104E+3,0.320E+2,0.98080000E+0,0.00000000E+0 - ,0.18253380E+3,0.104E+3,0.330E+2,0.98080000E+0,0.00000000E+0 - ,0.16096870E+3,0.104E+3,0.340E+2,0.98080000E+0,0.00000000E+0 - ,0.13827470E+3,0.104E+3,0.350E+2,0.98080000E+0,0.00000000E+0 - ,0.11812400E+3,0.104E+3,0.360E+2,0.98080000E+0,0.00000000E+0 - ,0.77496560E+3,0.104E+3,0.370E+2,0.98080000E+0,0.00000000E+0 - ,0.64864220E+3,0.104E+3,0.380E+2,0.98080000E+0,0.00000000E+0 - ,0.55615030E+3,0.104E+3,0.390E+2,0.98080000E+0,0.00000000E+0 - ,0.49301000E+3,0.104E+3,0.400E+2,0.98080000E+0,0.00000000E+0 - ,0.44537360E+3,0.104E+3,0.410E+2,0.98080000E+0,0.00000000E+0 - ,0.33790350E+3,0.104E+3,0.420E+2,0.98080000E+0,0.00000000E+0 - ,0.37952540E+3,0.104E+3,0.430E+2,0.98080000E+0,0.00000000E+0 - ,0.28356950E+3,0.104E+3,0.440E+2,0.98080000E+0,0.00000000E+0 - ,0.31037810E+3,0.104E+3,0.450E+2,0.98080000E+0,0.00000000E+0 - ,0.28603950E+3,0.104E+3,0.460E+2,0.98080000E+0,0.00000000E+0 - ,0.23869620E+3,0.104E+3,0.470E+2,0.98080000E+0,0.00000000E+0 - ,0.24999150E+3,0.104E+3,0.480E+2,0.98080000E+0,0.00000000E+0 - ,0.32009120E+3,0.104E+3,0.490E+2,0.98080000E+0,0.00000000E+0 - ,0.28947130E+3,0.104E+3,0.500E+2,0.98080000E+0,0.00000000E+0 - ,0.25216490E+3,0.104E+3,0.510E+2,0.98080000E+0,0.00000000E+0 - ,0.23063090E+3,0.104E+3,0.520E+2,0.98080000E+0,0.00000000E+0 - ,0.20522370E+3,0.104E+3,0.530E+2,0.98080000E+0,0.00000000E+0 - ,0.18162600E+3,0.104E+3,0.540E+2,0.98080000E+0,0.00000000E+0 - ,0.94385470E+3,0.104E+3,0.550E+2,0.98080000E+0,0.00000000E+0 - ,0.83262510E+3,0.104E+3,0.560E+2,0.98080000E+0,0.00000000E+0 - ,0.71607580E+3,0.104E+3,0.570E+2,0.98080000E+0,0.00000000E+0 - ,0.29887820E+3,0.104E+3,0.580E+2,0.98080000E+0,0.27991000E+1 - ,0.73216420E+3,0.104E+3,0.590E+2,0.98080000E+0,0.00000000E+0 - ,0.70044420E+3,0.104E+3,0.600E+2,0.98080000E+0,0.00000000E+0 - ,0.68219010E+3,0.104E+3,0.610E+2,0.98080000E+0,0.00000000E+0 - ,0.66548680E+3,0.104E+3,0.620E+2,0.98080000E+0,0.00000000E+0 - ,0.65065570E+3,0.104E+3,0.630E+2,0.98080000E+0,0.00000000E+0 - ,0.49918370E+3,0.104E+3,0.640E+2,0.98080000E+0,0.00000000E+0 - ,0.58212240E+3,0.104E+3,0.650E+2,0.98080000E+0,0.00000000E+0 - ,0.55929170E+3,0.104E+3,0.660E+2,0.98080000E+0,0.00000000E+0 - ,0.58370670E+3,0.104E+3,0.670E+2,0.98080000E+0,0.00000000E+0 - ,0.57100390E+3,0.104E+3,0.680E+2,0.98080000E+0,0.00000000E+0 - ,0.55938980E+3,0.104E+3,0.690E+2,0.98080000E+0,0.00000000E+0 - ,0.55342660E+3,0.104E+3,0.700E+2,0.98080000E+0,0.00000000E+0 - ,0.45865820E+3,0.104E+3,0.710E+2,0.98080000E+0,0.00000000E+0 - ,0.44137890E+3,0.104E+3,0.720E+2,0.98080000E+0,0.00000000E+0 - ,0.39713120E+3,0.104E+3,0.730E+2,0.98080000E+0,0.00000000E+0 - ,0.33121240E+3,0.104E+3,0.740E+2,0.98080000E+0,0.00000000E+0 - ,0.33522610E+3,0.104E+3,0.750E+2,0.98080000E+0,0.00000000E+0 - ,0.29995650E+3,0.104E+3,0.760E+2,0.98080000E+0,0.00000000E+0 - ,0.27181190E+3,0.104E+3,0.770E+2,0.98080000E+0,0.00000000E+0 - ,0.22291570E+3,0.104E+3,0.780E+2,0.98080000E+0,0.00000000E+0 - ,0.20718310E+3,0.104E+3,0.790E+2,0.98080000E+0,0.00000000E+0 - ,0.21231320E+3,0.104E+3,0.800E+2,0.98080000E+0,0.00000000E+0 - ,0.32610680E+3,0.104E+3,0.810E+2,0.98080000E+0,0.00000000E+0 - ,0.31346750E+3,0.104E+3,0.820E+2,0.98080000E+0,0.00000000E+0 - ,0.28229350E+3,0.104E+3,0.830E+2,0.98080000E+0,0.00000000E+0 - ,0.26602000E+3,0.104E+3,0.840E+2,0.98080000E+0,0.00000000E+0 - ,0.24186880E+3,0.104E+3,0.850E+2,0.98080000E+0,0.00000000E+0 - ,0.21856870E+3,0.104E+3,0.860E+2,0.98080000E+0,0.00000000E+0 - ,0.87585630E+3,0.104E+3,0.870E+2,0.98080000E+0,0.00000000E+0 - ,0.81413080E+3,0.104E+3,0.880E+2,0.98080000E+0,0.00000000E+0 - ,0.70540110E+3,0.104E+3,0.890E+2,0.98080000E+0,0.00000000E+0 - ,0.61906050E+3,0.104E+3,0.900E+2,0.98080000E+0,0.00000000E+0 - ,0.62133990E+3,0.104E+3,0.910E+2,0.98080000E+0,0.00000000E+0 - ,0.60114960E+3,0.104E+3,0.920E+2,0.98080000E+0,0.00000000E+0 - ,0.62763850E+3,0.104E+3,0.930E+2,0.98080000E+0,0.00000000E+0 - ,0.60621390E+3,0.104E+3,0.940E+2,0.98080000E+0,0.00000000E+0 - ,0.30786600E+2,0.104E+3,0.101E+3,0.98080000E+0,0.00000000E+0 - ,0.10750830E+3,0.104E+3,0.103E+3,0.98080000E+0,0.98650000E+0 - ,0.13584450E+3,0.104E+3,0.104E+3,0.98080000E+0,0.98080000E+0 - ,0.14723700E+2,0.105E+3,0.100E+1,0.97060000E+0,0.91180000E+0 - ,0.95836000E+1,0.105E+3,0.200E+1,0.97060000E+0,0.00000000E+0 - ,0.23142090E+3,0.105E+3,0.300E+1,0.97060000E+0,0.00000000E+0 - ,0.13372650E+3,0.105E+3,0.400E+1,0.97060000E+0,0.00000000E+0 - ,0.89742900E+2,0.105E+3,0.500E+1,0.97060000E+0,0.00000000E+0 - ,0.60299600E+2,0.105E+3,0.600E+1,0.97060000E+0,0.00000000E+0 - ,0.41901500E+2,0.105E+3,0.700E+1,0.97060000E+0,0.00000000E+0 - ,0.31535400E+2,0.105E+3,0.800E+1,0.97060000E+0,0.00000000E+0 - ,0.23736900E+2,0.105E+3,0.900E+1,0.97060000E+0,0.00000000E+0 - ,0.18142400E+2,0.105E+3,0.100E+2,0.97060000E+0,0.00000000E+0 - ,0.27656710E+3,0.105E+3,0.110E+2,0.97060000E+0,0.00000000E+0 - ,0.21299790E+3,0.105E+3,0.120E+2,0.97060000E+0,0.00000000E+0 - ,0.19620140E+3,0.105E+3,0.130E+2,0.97060000E+0,0.00000000E+0 - ,0.15429010E+3,0.105E+3,0.140E+2,0.97060000E+0,0.00000000E+0 - ,0.11993530E+3,0.105E+3,0.150E+2,0.97060000E+0,0.00000000E+0 - ,0.99215900E+2,0.105E+3,0.160E+2,0.97060000E+0,0.00000000E+0 - ,0.80727200E+2,0.105E+3,0.170E+2,0.97060000E+0,0.00000000E+0 - ,0.65758000E+2,0.105E+3,0.180E+2,0.97060000E+0,0.00000000E+0 - ,0.45251930E+3,0.105E+3,0.190E+2,0.97060000E+0,0.00000000E+0 - ,0.37388150E+3,0.105E+3,0.200E+2,0.97060000E+0,0.00000000E+0 - ,0.30887210E+3,0.105E+3,0.210E+2,0.97060000E+0,0.00000000E+0 - ,0.29808710E+3,0.105E+3,0.220E+2,0.97060000E+0,0.00000000E+0 - ,0.27287470E+3,0.105E+3,0.230E+2,0.97060000E+0,0.00000000E+0 - ,0.21463600E+3,0.105E+3,0.240E+2,0.97060000E+0,0.00000000E+0 - ,0.23480000E+3,0.105E+3,0.250E+2,0.97060000E+0,0.00000000E+0 - ,0.18397370E+3,0.105E+3,0.260E+2,0.97060000E+0,0.00000000E+0 - ,0.19517310E+3,0.105E+3,0.270E+2,0.97060000E+0,0.00000000E+0 - ,0.20113510E+3,0.105E+3,0.280E+2,0.97060000E+0,0.00000000E+0 - ,0.15388240E+3,0.105E+3,0.290E+2,0.97060000E+0,0.00000000E+0 - ,0.15808480E+3,0.105E+3,0.300E+2,0.97060000E+0,0.00000000E+0 - ,0.18757970E+3,0.105E+3,0.310E+2,0.97060000E+0,0.00000000E+0 - ,0.16519300E+3,0.105E+3,0.320E+2,0.97060000E+0,0.00000000E+0 - ,0.14056250E+3,0.105E+3,0.330E+2,0.97060000E+0,0.00000000E+0 - ,0.12584370E+3,0.105E+3,0.340E+2,0.97060000E+0,0.00000000E+0 - ,0.10980600E+3,0.105E+3,0.350E+2,0.97060000E+0,0.00000000E+0 - ,0.95176300E+2,0.105E+3,0.360E+2,0.97060000E+0,0.00000000E+0 - ,0.50694210E+3,0.105E+3,0.370E+2,0.97060000E+0,0.00000000E+0 - ,0.44526080E+3,0.105E+3,0.380E+2,0.97060000E+0,0.00000000E+0 - ,0.38988230E+3,0.105E+3,0.390E+2,0.97060000E+0,0.00000000E+0 - ,0.35019700E+3,0.105E+3,0.400E+2,0.97060000E+0,0.00000000E+0 - ,0.31911510E+3,0.105E+3,0.410E+2,0.97060000E+0,0.00000000E+0 - ,0.24585270E+3,0.105E+3,0.420E+2,0.97060000E+0,0.00000000E+0 - ,0.27453340E+3,0.105E+3,0.430E+2,0.97060000E+0,0.00000000E+0 - ,0.20863620E+3,0.105E+3,0.440E+2,0.97060000E+0,0.00000000E+0 - ,0.22828220E+3,0.105E+3,0.450E+2,0.97060000E+0,0.00000000E+0 - ,0.21155590E+3,0.105E+3,0.460E+2,0.97060000E+0,0.00000000E+0 - ,0.17606030E+3,0.105E+3,0.470E+2,0.97060000E+0,0.00000000E+0 - ,0.18621990E+3,0.105E+3,0.480E+2,0.97060000E+0,0.00000000E+0 - ,0.23421710E+3,0.105E+3,0.490E+2,0.97060000E+0,0.00000000E+0 - ,0.21642760E+3,0.105E+3,0.500E+2,0.97060000E+0,0.00000000E+0 - ,0.19255420E+3,0.105E+3,0.510E+2,0.97060000E+0,0.00000000E+0 - ,0.17839190E+3,0.105E+3,0.520E+2,0.97060000E+0,0.00000000E+0 - ,0.16096790E+3,0.105E+3,0.530E+2,0.97060000E+0,0.00000000E+0 - ,0.14436970E+3,0.105E+3,0.540E+2,0.97060000E+0,0.00000000E+0 - ,0.61760580E+3,0.105E+3,0.550E+2,0.97060000E+0,0.00000000E+0 - ,0.56751360E+3,0.105E+3,0.560E+2,0.97060000E+0,0.00000000E+0 - ,0.49845340E+3,0.105E+3,0.570E+2,0.97060000E+0,0.00000000E+0 - ,0.22741890E+3,0.105E+3,0.580E+2,0.97060000E+0,0.27991000E+1 - ,0.50249670E+3,0.105E+3,0.590E+2,0.97060000E+0,0.00000000E+0 - ,0.48250770E+3,0.105E+3,0.600E+2,0.97060000E+0,0.00000000E+0 - ,0.47040290E+3,0.105E+3,0.610E+2,0.97060000E+0,0.00000000E+0 - ,0.45927530E+3,0.105E+3,0.620E+2,0.97060000E+0,0.00000000E+0 - ,0.44941020E+3,0.105E+3,0.630E+2,0.97060000E+0,0.00000000E+0 - ,0.35290870E+3,0.105E+3,0.640E+2,0.97060000E+0,0.00000000E+0 - ,0.39744990E+3,0.105E+3,0.650E+2,0.97060000E+0,0.00000000E+0 - ,0.38329520E+3,0.105E+3,0.660E+2,0.97060000E+0,0.00000000E+0 - ,0.40532850E+3,0.105E+3,0.670E+2,0.97060000E+0,0.00000000E+0 - ,0.39673770E+3,0.105E+3,0.680E+2,0.97060000E+0,0.00000000E+0 - ,0.38898900E+3,0.105E+3,0.690E+2,0.97060000E+0,0.00000000E+0 - ,0.38447010E+3,0.105E+3,0.700E+2,0.97060000E+0,0.00000000E+0 - ,0.32364500E+3,0.105E+3,0.710E+2,0.97060000E+0,0.00000000E+0 - ,0.31828720E+3,0.105E+3,0.720E+2,0.97060000E+0,0.00000000E+0 - ,0.29018010E+3,0.105E+3,0.730E+2,0.97060000E+0,0.00000000E+0 - ,0.24456750E+3,0.105E+3,0.740E+2,0.97060000E+0,0.00000000E+0 - ,0.24877750E+3,0.105E+3,0.750E+2,0.97060000E+0,0.00000000E+0 - ,0.22518190E+3,0.105E+3,0.760E+2,0.97060000E+0,0.00000000E+0 - ,0.20597020E+3,0.105E+3,0.770E+2,0.97060000E+0,0.00000000E+0 - ,0.17065560E+3,0.105E+3,0.780E+2,0.97060000E+0,0.00000000E+0 - ,0.15926350E+3,0.105E+3,0.790E+2,0.97060000E+0,0.00000000E+0 - ,0.16388200E+3,0.105E+3,0.800E+2,0.97060000E+0,0.00000000E+0 - ,0.24000000E+3,0.105E+3,0.810E+2,0.97060000E+0,0.00000000E+0 - ,0.23460480E+3,0.105E+3,0.820E+2,0.97060000E+0,0.00000000E+0 - ,0.21530270E+3,0.105E+3,0.830E+2,0.97060000E+0,0.00000000E+0 - ,0.20513340E+3,0.105E+3,0.840E+2,0.97060000E+0,0.00000000E+0 - ,0.18899910E+3,0.105E+3,0.850E+2,0.97060000E+0,0.00000000E+0 - ,0.17288540E+3,0.105E+3,0.860E+2,0.97060000E+0,0.00000000E+0 - ,0.58298150E+3,0.105E+3,0.870E+2,0.97060000E+0,0.00000000E+0 - ,0.56100860E+3,0.105E+3,0.880E+2,0.97060000E+0,0.00000000E+0 - ,0.49563890E+3,0.105E+3,0.890E+2,0.97060000E+0,0.00000000E+0 - ,0.44481020E+3,0.105E+3,0.900E+2,0.97060000E+0,0.00000000E+0 - ,0.44155780E+3,0.105E+3,0.910E+2,0.97060000E+0,0.00000000E+0 - ,0.42748070E+3,0.105E+3,0.920E+2,0.97060000E+0,0.00000000E+0 - ,0.44027100E+3,0.105E+3,0.930E+2,0.97060000E+0,0.00000000E+0 - ,0.42632550E+3,0.105E+3,0.940E+2,0.97060000E+0,0.00000000E+0 - ,0.23841200E+2,0.105E+3,0.101E+3,0.97060000E+0,0.00000000E+0 - ,0.77663300E+2,0.105E+3,0.103E+3,0.97060000E+0,0.98650000E+0 - ,0.98993800E+2,0.105E+3,0.104E+3,0.97060000E+0,0.98080000E+0 - ,0.75368600E+2,0.105E+3,0.105E+3,0.97060000E+0,0.97060000E+0 - ,0.11393200E+2,0.106E+3,0.100E+1,0.98680000E+0,0.91180000E+0 - ,0.77065000E+1,0.106E+3,0.200E+1,0.98680000E+0,0.00000000E+0 - ,0.16045900E+3,0.106E+3,0.300E+1,0.98680000E+0,0.00000000E+0 - ,0.96543100E+2,0.106E+3,0.400E+1,0.98680000E+0,0.00000000E+0 - ,0.66798600E+2,0.106E+3,0.500E+1,0.98680000E+0,0.00000000E+0 - ,0.46068100E+2,0.106E+3,0.600E+1,0.98680000E+0,0.00000000E+0 - ,0.32700900E+2,0.106E+3,0.700E+1,0.98680000E+0,0.00000000E+0 - ,0.25009700E+2,0.106E+3,0.800E+1,0.98680000E+0,0.00000000E+0 - ,0.19097400E+2,0.106E+3,0.900E+1,0.98680000E+0,0.00000000E+0 - ,0.14771600E+2,0.106E+3,0.100E+2,0.98680000E+0,0.00000000E+0 - ,0.19237290E+3,0.106E+3,0.110E+2,0.98680000E+0,0.00000000E+0 - ,0.15261300E+3,0.106E+3,0.120E+2,0.98680000E+0,0.00000000E+0 - ,0.14260940E+3,0.106E+3,0.130E+2,0.98680000E+0,0.00000000E+0 - ,0.11444050E+3,0.106E+3,0.140E+2,0.98680000E+0,0.00000000E+0 - ,0.90676700E+2,0.106E+3,0.150E+2,0.98680000E+0,0.00000000E+0 - ,0.76055200E+2,0.106E+3,0.160E+2,0.98680000E+0,0.00000000E+0 - ,0.62746500E+2,0.106E+3,0.170E+2,0.98680000E+0,0.00000000E+0 - ,0.51768400E+2,0.106E+3,0.180E+2,0.98680000E+0,0.00000000E+0 - ,0.31458000E+3,0.106E+3,0.190E+2,0.98680000E+0,0.00000000E+0 - ,0.26512060E+3,0.106E+3,0.200E+2,0.98680000E+0,0.00000000E+0 - ,0.22018540E+3,0.106E+3,0.210E+2,0.98680000E+0,0.00000000E+0 - ,0.21386820E+3,0.106E+3,0.220E+2,0.98680000E+0,0.00000000E+0 - ,0.19648850E+3,0.106E+3,0.230E+2,0.98680000E+0,0.00000000E+0 - ,0.15511710E+3,0.106E+3,0.240E+2,0.98680000E+0,0.00000000E+0 - ,0.16997960E+3,0.106E+3,0.250E+2,0.98680000E+0,0.00000000E+0 - ,0.13377000E+3,0.106E+3,0.260E+2,0.98680000E+0,0.00000000E+0 - ,0.14251400E+3,0.106E+3,0.270E+2,0.98680000E+0,0.00000000E+0 - ,0.14627110E+3,0.106E+3,0.280E+2,0.98680000E+0,0.00000000E+0 - ,0.11239140E+3,0.106E+3,0.290E+2,0.98680000E+0,0.00000000E+0 - ,0.11639870E+3,0.106E+3,0.300E+2,0.98680000E+0,0.00000000E+0 - ,0.13747230E+3,0.106E+3,0.310E+2,0.98680000E+0,0.00000000E+0 - ,0.12288050E+3,0.106E+3,0.320E+2,0.98680000E+0,0.00000000E+0 - ,0.10616860E+3,0.106E+3,0.330E+2,0.98680000E+0,0.00000000E+0 - ,0.96059900E+2,0.106E+3,0.340E+2,0.98680000E+0,0.00000000E+0 - ,0.84772300E+2,0.106E+3,0.350E+2,0.98680000E+0,0.00000000E+0 - ,0.74286500E+2,0.106E+3,0.360E+2,0.98680000E+0,0.00000000E+0 - ,0.35363020E+3,0.106E+3,0.370E+2,0.98680000E+0,0.00000000E+0 - ,0.31589230E+3,0.106E+3,0.380E+2,0.98680000E+0,0.00000000E+0 - ,0.27947270E+3,0.106E+3,0.390E+2,0.98680000E+0,0.00000000E+0 - ,0.25282130E+3,0.106E+3,0.400E+2,0.98680000E+0,0.00000000E+0 - ,0.23159760E+3,0.106E+3,0.410E+2,0.98680000E+0,0.00000000E+0 - ,0.18033900E+3,0.106E+3,0.420E+2,0.98680000E+0,0.00000000E+0 - ,0.20054640E+3,0.106E+3,0.430E+2,0.98680000E+0,0.00000000E+0 - ,0.15419380E+3,0.106E+3,0.440E+2,0.98680000E+0,0.00000000E+0 - ,0.16831150E+3,0.106E+3,0.450E+2,0.98680000E+0,0.00000000E+0 - ,0.15650060E+3,0.106E+3,0.460E+2,0.98680000E+0,0.00000000E+0 - ,0.13051440E+3,0.106E+3,0.470E+2,0.98680000E+0,0.00000000E+0 - ,0.13836720E+3,0.106E+3,0.480E+2,0.98680000E+0,0.00000000E+0 - ,0.17212290E+3,0.106E+3,0.490E+2,0.98680000E+0,0.00000000E+0 - ,0.16079100E+3,0.106E+3,0.500E+2,0.98680000E+0,0.00000000E+0 - ,0.14484620E+3,0.106E+3,0.510E+2,0.98680000E+0,0.00000000E+0 - ,0.13531220E+3,0.106E+3,0.520E+2,0.98680000E+0,0.00000000E+0 - ,0.12325380E+3,0.106E+3,0.530E+2,0.98680000E+0,0.00000000E+0 - ,0.11159230E+3,0.106E+3,0.540E+2,0.98680000E+0,0.00000000E+0 - ,0.43151720E+3,0.106E+3,0.550E+2,0.98680000E+0,0.00000000E+0 - ,0.40187740E+3,0.106E+3,0.560E+2,0.98680000E+0,0.00000000E+0 - ,0.35646100E+3,0.106E+3,0.570E+2,0.98680000E+0,0.00000000E+0 - ,0.17092620E+3,0.106E+3,0.580E+2,0.98680000E+0,0.27991000E+1 - ,0.35713990E+3,0.106E+3,0.590E+2,0.98680000E+0,0.00000000E+0 - ,0.34341530E+3,0.106E+3,0.600E+2,0.98680000E+0,0.00000000E+0 - ,0.33492450E+3,0.106E+3,0.610E+2,0.98680000E+0,0.00000000E+0 - ,0.32709910E+3,0.106E+3,0.620E+2,0.98680000E+0,0.00000000E+0 - ,0.32016570E+3,0.106E+3,0.630E+2,0.98680000E+0,0.00000000E+0 - ,0.25481220E+3,0.106E+3,0.640E+2,0.98680000E+0,0.00000000E+0 - ,0.28285470E+3,0.106E+3,0.650E+2,0.98680000E+0,0.00000000E+0 - ,0.27333750E+3,0.106E+3,0.660E+2,0.98680000E+0,0.00000000E+0 - ,0.28939200E+3,0.106E+3,0.670E+2,0.98680000E+0,0.00000000E+0 - ,0.28330010E+3,0.106E+3,0.680E+2,0.98680000E+0,0.00000000E+0 - ,0.27784930E+3,0.106E+3,0.690E+2,0.98680000E+0,0.00000000E+0 - ,0.27445000E+3,0.106E+3,0.700E+2,0.98680000E+0,0.00000000E+0 - ,0.23313940E+3,0.106E+3,0.710E+2,0.98680000E+0,0.00000000E+0 - ,0.23163340E+3,0.106E+3,0.720E+2,0.98680000E+0,0.00000000E+0 - ,0.21280410E+3,0.106E+3,0.730E+2,0.98680000E+0,0.00000000E+0 - ,0.18084620E+3,0.106E+3,0.740E+2,0.98680000E+0,0.00000000E+0 - ,0.18435860E+3,0.106E+3,0.750E+2,0.98680000E+0,0.00000000E+0 - ,0.16804770E+3,0.106E+3,0.760E+2,0.98680000E+0,0.00000000E+0 - ,0.15462480E+3,0.106E+3,0.770E+2,0.98680000E+0,0.00000000E+0 - ,0.12918350E+3,0.106E+3,0.780E+2,0.98680000E+0,0.00000000E+0 - ,0.12094850E+3,0.106E+3,0.790E+2,0.98680000E+0,0.00000000E+0 - ,0.12459510E+3,0.106E+3,0.800E+2,0.98680000E+0,0.00000000E+0 - ,0.17748530E+3,0.106E+3,0.810E+2,0.98680000E+0,0.00000000E+0 - ,0.17476750E+3,0.106E+3,0.820E+2,0.98680000E+0,0.00000000E+0 - ,0.16207400E+3,0.106E+3,0.830E+2,0.98680000E+0,0.00000000E+0 - ,0.15545060E+3,0.106E+3,0.840E+2,0.98680000E+0,0.00000000E+0 - ,0.14445320E+3,0.106E+3,0.850E+2,0.98680000E+0,0.00000000E+0 - ,0.13324320E+3,0.106E+3,0.860E+2,0.98680000E+0,0.00000000E+0 - ,0.41058600E+3,0.106E+3,0.870E+2,0.98680000E+0,0.00000000E+0 - ,0.39952250E+3,0.106E+3,0.880E+2,0.98680000E+0,0.00000000E+0 - ,0.35611270E+3,0.106E+3,0.890E+2,0.98680000E+0,0.00000000E+0 - ,0.32349590E+3,0.106E+3,0.900E+2,0.98680000E+0,0.00000000E+0 - ,0.31967610E+3,0.106E+3,0.910E+2,0.98680000E+0,0.00000000E+0 - ,0.30960820E+3,0.106E+3,0.920E+2,0.98680000E+0,0.00000000E+0 - ,0.31659670E+3,0.106E+3,0.930E+2,0.98680000E+0,0.00000000E+0 - ,0.30693030E+3,0.106E+3,0.940E+2,0.98680000E+0,0.00000000E+0 - ,0.18057500E+2,0.106E+3,0.101E+3,0.98680000E+0,0.00000000E+0 - ,0.56346800E+2,0.106E+3,0.103E+3,0.98680000E+0,0.98650000E+0 - ,0.72316200E+2,0.106E+3,0.104E+3,0.98680000E+0,0.98080000E+0 - ,0.56529500E+2,0.106E+3,0.105E+3,0.98680000E+0,0.97060000E+0 - ,0.43245200E+2,0.106E+3,0.106E+3,0.98680000E+0,0.98680000E+0 - ,0.81417000E+1,0.107E+3,0.100E+1,0.99440000E+0,0.91180000E+0 - ,0.57601000E+1,0.107E+3,0.200E+1,0.99440000E+0,0.00000000E+0 - ,0.10127010E+3,0.107E+3,0.300E+1,0.99440000E+0,0.00000000E+0 - ,0.63858000E+2,0.107E+3,0.400E+1,0.99440000E+0,0.00000000E+0 - ,0.45731900E+2,0.107E+3,0.500E+1,0.99440000E+0,0.00000000E+0 - ,0.32484800E+2,0.107E+3,0.600E+1,0.99440000E+0,0.00000000E+0 - ,0.23629500E+2,0.107E+3,0.700E+1,0.99440000E+0,0.00000000E+0 - ,0.18412800E+2,0.107E+3,0.800E+1,0.99440000E+0,0.00000000E+0 - ,0.14301500E+2,0.107E+3,0.900E+1,0.99440000E+0,0.00000000E+0 - ,0.11224300E+2,0.107E+3,0.100E+2,0.99440000E+0,0.00000000E+0 - ,0.12196010E+3,0.107E+3,0.110E+2,0.99440000E+0,0.00000000E+0 - ,0.10014430E+3,0.107E+3,0.120E+2,0.99440000E+0,0.00000000E+0 - ,0.95091600E+2,0.107E+3,0.130E+2,0.99440000E+0,0.00000000E+0 - ,0.78046600E+2,0.107E+3,0.140E+2,0.99440000E+0,0.00000000E+0 - ,0.63166900E+2,0.107E+3,0.150E+2,0.99440000E+0,0.00000000E+0 - ,0.53810700E+2,0.107E+3,0.160E+2,0.99440000E+0,0.00000000E+0 - ,0.45095200E+2,0.107E+3,0.170E+2,0.99440000E+0,0.00000000E+0 - ,0.37752200E+2,0.107E+3,0.180E+2,0.99440000E+0,0.00000000E+0 - ,0.19944050E+3,0.107E+3,0.190E+2,0.99440000E+0,0.00000000E+0 - ,0.17204550E+3,0.107E+3,0.200E+2,0.99440000E+0,0.00000000E+0 - ,0.14376580E+3,0.107E+3,0.210E+2,0.99440000E+0,0.00000000E+0 - ,0.14071150E+3,0.107E+3,0.220E+2,0.99440000E+0,0.00000000E+0 - ,0.12982970E+3,0.107E+3,0.230E+2,0.99440000E+0,0.00000000E+0 - ,0.10301890E+3,0.107E+3,0.240E+2,0.99440000E+0,0.00000000E+0 - ,0.11302480E+3,0.107E+3,0.250E+2,0.99440000E+0,0.00000000E+0 - ,0.89486800E+2,0.107E+3,0.260E+2,0.99440000E+0,0.00000000E+0 - ,0.95705100E+2,0.107E+3,0.270E+2,0.99440000E+0,0.00000000E+0 - ,0.97776100E+2,0.107E+3,0.280E+2,0.99440000E+0,0.00000000E+0 - ,0.75598700E+2,0.107E+3,0.290E+2,0.99440000E+0,0.00000000E+0 - ,0.78918300E+2,0.107E+3,0.300E+2,0.99440000E+0,0.00000000E+0 - ,0.92602500E+2,0.107E+3,0.310E+2,0.99440000E+0,0.00000000E+0 - ,0.84127600E+2,0.107E+3,0.320E+2,0.99440000E+0,0.00000000E+0 - ,0.73914200E+2,0.107E+3,0.330E+2,0.99440000E+0,0.00000000E+0 - ,0.67663600E+2,0.107E+3,0.340E+2,0.99440000E+0,0.00000000E+0 - ,0.60472800E+2,0.107E+3,0.350E+2,0.99440000E+0,0.00000000E+0 - ,0.53649600E+2,0.107E+3,0.360E+2,0.99440000E+0,0.00000000E+0 - ,0.22519190E+3,0.107E+3,0.370E+2,0.99440000E+0,0.00000000E+0 - ,0.20515740E+3,0.107E+3,0.380E+2,0.99440000E+0,0.00000000E+0 - ,0.18368510E+3,0.107E+3,0.390E+2,0.99440000E+0,0.00000000E+0 - ,0.16755010E+3,0.107E+3,0.400E+2,0.99440000E+0,0.00000000E+0 - ,0.15443560E+3,0.107E+3,0.410E+2,0.99440000E+0,0.00000000E+0 - ,0.12180660E+3,0.107E+3,0.420E+2,0.99440000E+0,0.00000000E+0 - ,0.13478870E+3,0.107E+3,0.430E+2,0.99440000E+0,0.00000000E+0 - ,0.10509050E+3,0.107E+3,0.440E+2,0.99440000E+0,0.00000000E+0 - ,0.11434960E+3,0.107E+3,0.450E+2,0.99440000E+0,0.00000000E+0 - ,0.10674380E+3,0.107E+3,0.460E+2,0.99440000E+0,0.00000000E+0 - ,0.89341900E+2,0.107E+3,0.470E+2,0.99440000E+0,0.00000000E+0 - ,0.94877000E+2,0.107E+3,0.480E+2,0.99440000E+0,0.00000000E+0 - ,0.11649590E+3,0.107E+3,0.490E+2,0.99440000E+0,0.00000000E+0 - ,0.11009510E+3,0.107E+3,0.500E+2,0.99440000E+0,0.00000000E+0 - ,0.10051820E+3,0.107E+3,0.510E+2,0.99440000E+0,0.00000000E+0 - ,0.94750800E+2,0.107E+3,0.520E+2,0.99440000E+0,0.00000000E+0 - ,0.87202800E+2,0.107E+3,0.530E+2,0.99440000E+0,0.00000000E+0 - ,0.79777300E+2,0.107E+3,0.540E+2,0.99440000E+0,0.00000000E+0 - ,0.27525670E+3,0.107E+3,0.550E+2,0.99440000E+0,0.00000000E+0 - ,0.26044810E+3,0.107E+3,0.560E+2,0.99440000E+0,0.00000000E+0 - ,0.23366190E+3,0.107E+3,0.570E+2,0.99440000E+0,0.00000000E+0 - ,0.11854700E+3,0.107E+3,0.580E+2,0.99440000E+0,0.27991000E+1 - ,0.23257830E+3,0.107E+3,0.590E+2,0.99440000E+0,0.00000000E+0 - ,0.22400400E+3,0.107E+3,0.600E+2,0.99440000E+0,0.00000000E+0 - ,0.21856110E+3,0.107E+3,0.610E+2,0.99440000E+0,0.00000000E+0 - ,0.21352770E+3,0.107E+3,0.620E+2,0.99440000E+0,0.00000000E+0 - ,0.20907000E+3,0.107E+3,0.630E+2,0.99440000E+0,0.00000000E+0 - ,0.16905560E+3,0.107E+3,0.640E+2,0.99440000E+0,0.00000000E+0 - ,0.18459040E+3,0.107E+3,0.650E+2,0.99440000E+0,0.00000000E+0 - ,0.17880740E+3,0.107E+3,0.660E+2,0.99440000E+0,0.00000000E+0 - ,0.18945310E+3,0.107E+3,0.670E+2,0.99440000E+0,0.00000000E+0 - ,0.18549310E+3,0.107E+3,0.680E+2,0.99440000E+0,0.00000000E+0 - ,0.18198230E+3,0.107E+3,0.690E+2,0.99440000E+0,0.00000000E+0 - ,0.17962020E+3,0.107E+3,0.700E+2,0.99440000E+0,0.00000000E+0 - ,0.15422920E+3,0.107E+3,0.710E+2,0.99440000E+0,0.00000000E+0 - ,0.15491020E+3,0.107E+3,0.720E+2,0.99440000E+0,0.00000000E+0 - ,0.14357630E+3,0.107E+3,0.730E+2,0.99440000E+0,0.00000000E+0 - ,0.12323020E+3,0.107E+3,0.740E+2,0.99440000E+0,0.00000000E+0 - ,0.12591210E+3,0.107E+3,0.750E+2,0.99440000E+0,0.00000000E+0 - ,0.11569380E+3,0.107E+3,0.760E+2,0.99440000E+0,0.00000000E+0 - ,0.10717750E+3,0.107E+3,0.770E+2,0.99440000E+0,0.00000000E+0 - ,0.90445600E+2,0.107E+3,0.780E+2,0.99440000E+0,0.00000000E+0 - ,0.85014600E+2,0.107E+3,0.790E+2,0.99440000E+0,0.00000000E+0 - ,0.87649000E+2,0.107E+3,0.800E+2,0.99440000E+0,0.00000000E+0 - ,0.12108000E+3,0.107E+3,0.810E+2,0.99440000E+0,0.00000000E+0 - ,0.12012680E+3,0.107E+3,0.820E+2,0.99440000E+0,0.00000000E+0 - ,0.11264850E+3,0.107E+3,0.830E+2,0.99440000E+0,0.00000000E+0 - ,0.10881340E+3,0.107E+3,0.840E+2,0.99440000E+0,0.00000000E+0 - ,0.10205240E+3,0.107E+3,0.850E+2,0.99440000E+0,0.00000000E+0 - ,0.94992800E+2,0.107E+3,0.860E+2,0.99440000E+0,0.00000000E+0 - ,0.26444300E+3,0.107E+3,0.870E+2,0.99440000E+0,0.00000000E+0 - ,0.26065290E+3,0.107E+3,0.880E+2,0.99440000E+0,0.00000000E+0 - ,0.23476520E+3,0.107E+3,0.890E+2,0.99440000E+0,0.00000000E+0 - ,0.21630740E+3,0.107E+3,0.900E+2,0.99440000E+0,0.00000000E+0 - ,0.21274560E+3,0.107E+3,0.910E+2,0.99440000E+0,0.00000000E+0 - ,0.20616310E+3,0.107E+3,0.920E+2,0.99440000E+0,0.00000000E+0 - ,0.20915240E+3,0.107E+3,0.930E+2,0.99440000E+0,0.00000000E+0 - ,0.20304180E+3,0.107E+3,0.940E+2,0.99440000E+0,0.00000000E+0 - ,0.12598000E+2,0.107E+3,0.101E+3,0.99440000E+0,0.00000000E+0 - ,0.37493900E+2,0.107E+3,0.103E+3,0.99440000E+0,0.98650000E+0 - ,0.48488500E+2,0.107E+3,0.104E+3,0.99440000E+0,0.98080000E+0 - ,0.39043300E+2,0.107E+3,0.105E+3,0.99440000E+0,0.97060000E+0 - ,0.30541000E+2,0.107E+3,0.106E+3,0.99440000E+0,0.98680000E+0 - ,0.22124100E+2,0.107E+3,0.107E+3,0.99440000E+0,0.99440000E+0 - ,0.60575000E+1,0.108E+3,0.100E+1,0.99250000E+0,0.91180000E+0 - ,0.44593000E+1,0.108E+3,0.200E+1,0.99250000E+0,0.00000000E+0 - ,0.67931200E+2,0.108E+3,0.300E+1,0.99250000E+0,0.00000000E+0 - ,0.44496800E+2,0.108E+3,0.400E+1,0.99250000E+0,0.00000000E+0 - ,0.32813600E+2,0.108E+3,0.500E+1,0.99250000E+0,0.00000000E+0 - ,0.23912000E+2,0.108E+3,0.600E+1,0.99250000E+0,0.00000000E+0 - ,0.17769800E+2,0.108E+3,0.700E+1,0.99250000E+0,0.00000000E+0 - ,0.14076400E+2,0.108E+3,0.800E+1,0.99250000E+0,0.00000000E+0 - ,0.11099400E+2,0.108E+3,0.900E+1,0.99250000E+0,0.00000000E+0 - ,0.88252000E+1,0.108E+3,0.100E+2,0.99250000E+0,0.00000000E+0 - ,0.82182000E+2,0.108E+3,0.110E+2,0.99250000E+0,0.00000000E+0 - ,0.69367500E+2,0.108E+3,0.120E+2,0.99250000E+0,0.00000000E+0 - ,0.66745100E+2,0.108E+3,0.130E+2,0.99250000E+0,0.00000000E+0 - ,0.55817500E+2,0.108E+3,0.140E+2,0.99250000E+0,0.00000000E+0 - ,0.45993700E+2,0.108E+3,0.150E+2,0.99250000E+0,0.00000000E+0 - ,0.39709100E+2,0.108E+3,0.160E+2,0.99250000E+0,0.00000000E+0 - ,0.33731300E+2,0.108E+3,0.170E+2,0.99250000E+0,0.00000000E+0 - ,0.28600000E+2,0.108E+3,0.180E+2,0.99250000E+0,0.00000000E+0 - ,0.13465080E+3,0.108E+3,0.190E+2,0.99250000E+0,0.00000000E+0 - ,0.11824110E+3,0.108E+3,0.200E+2,0.99250000E+0,0.00000000E+0 - ,0.99293900E+2,0.108E+3,0.210E+2,0.99250000E+0,0.00000000E+0 - ,0.97834500E+2,0.108E+3,0.220E+2,0.99250000E+0,0.00000000E+0 - ,0.90600700E+2,0.108E+3,0.230E+2,0.99250000E+0,0.00000000E+0 - ,0.72287200E+2,0.108E+3,0.240E+2,0.99250000E+0,0.00000000E+0 - ,0.79304700E+2,0.108E+3,0.250E+2,0.99250000E+0,0.00000000E+0 - ,0.63186500E+2,0.108E+3,0.260E+2,0.99250000E+0,0.00000000E+0 - ,0.67711700E+2,0.108E+3,0.270E+2,0.99250000E+0,0.00000000E+0 - ,0.68908600E+2,0.108E+3,0.280E+2,0.99250000E+0,0.00000000E+0 - ,0.53642000E+2,0.108E+3,0.290E+2,0.99250000E+0,0.00000000E+0 - ,0.56288400E+2,0.108E+3,0.300E+2,0.99250000E+0,0.00000000E+0 - ,0.65621400E+2,0.108E+3,0.310E+2,0.99250000E+0,0.00000000E+0 - ,0.60404100E+2,0.108E+3,0.320E+2,0.99250000E+0,0.00000000E+0 - ,0.53815300E+2,0.108E+3,0.330E+2,0.99250000E+0,0.00000000E+0 - ,0.49755200E+2,0.108E+3,0.340E+2,0.99250000E+0,0.00000000E+0 - ,0.44951000E+2,0.108E+3,0.350E+2,0.99250000E+0,0.00000000E+0 - ,0.40304300E+2,0.108E+3,0.360E+2,0.99250000E+0,0.00000000E+0 - ,0.15267570E+3,0.108E+3,0.370E+2,0.99250000E+0,0.00000000E+0 - ,0.14115920E+3,0.108E+3,0.380E+2,0.99250000E+0,0.00000000E+0 - ,0.12762820E+3,0.108E+3,0.390E+2,0.99250000E+0,0.00000000E+0 - ,0.11723280E+3,0.108E+3,0.400E+2,0.99250000E+0,0.00000000E+0 - ,0.10863780E+3,0.108E+3,0.410E+2,0.99250000E+0,0.00000000E+0 - ,0.86680300E+2,0.108E+3,0.420E+2,0.99250000E+0,0.00000000E+0 - ,0.95496600E+2,0.108E+3,0.430E+2,0.99250000E+0,0.00000000E+0 - ,0.75391000E+2,0.108E+3,0.440E+2,0.99250000E+0,0.00000000E+0 - ,0.81764000E+2,0.108E+3,0.450E+2,0.99250000E+0,0.00000000E+0 - ,0.76587100E+2,0.108E+3,0.460E+2,0.99250000E+0,0.00000000E+0 - ,0.64388000E+2,0.108E+3,0.470E+2,0.99250000E+0,0.00000000E+0 - ,0.68394300E+2,0.108E+3,0.480E+2,0.99250000E+0,0.00000000E+0 - ,0.83027800E+2,0.108E+3,0.490E+2,0.99250000E+0,0.00000000E+0 - ,0.79170400E+2,0.108E+3,0.500E+2,0.99250000E+0,0.00000000E+0 - ,0.73071800E+2,0.108E+3,0.510E+2,0.99250000E+0,0.00000000E+0 - ,0.69390100E+2,0.108E+3,0.520E+2,0.99250000E+0,0.00000000E+0 - ,0.64414100E+2,0.108E+3,0.530E+2,0.99250000E+0,0.00000000E+0 - ,0.59446800E+2,0.108E+3,0.540E+2,0.99250000E+0,0.00000000E+0 - ,0.18687910E+3,0.108E+3,0.550E+2,0.99250000E+0,0.00000000E+0 - ,0.17895490E+3,0.108E+3,0.560E+2,0.99250000E+0,0.00000000E+0 - ,0.16203710E+3,0.108E+3,0.570E+2,0.99250000E+0,0.00000000E+0 - ,0.86166500E+2,0.108E+3,0.580E+2,0.99250000E+0,0.27991000E+1 - ,0.16052330E+3,0.108E+3,0.590E+2,0.99250000E+0,0.00000000E+0 - ,0.15480670E+3,0.108E+3,0.600E+2,0.99250000E+0,0.00000000E+0 - ,0.15109700E+3,0.108E+3,0.610E+2,0.99250000E+0,0.00000000E+0 - ,0.14765520E+3,0.108E+3,0.620E+2,0.99250000E+0,0.00000000E+0 - ,0.14460750E+3,0.108E+3,0.630E+2,0.99250000E+0,0.00000000E+0 - ,0.11853880E+3,0.108E+3,0.640E+2,0.99250000E+0,0.00000000E+0 - ,0.12778280E+3,0.108E+3,0.650E+2,0.99250000E+0,0.00000000E+0 - ,0.12401580E+3,0.108E+3,0.660E+2,0.99250000E+0,0.00000000E+0 - ,0.13130040E+3,0.108E+3,0.670E+2,0.99250000E+0,0.00000000E+0 - ,0.12856660E+3,0.108E+3,0.680E+2,0.99250000E+0,0.00000000E+0 - ,0.12616140E+3,0.108E+3,0.690E+2,0.99250000E+0,0.00000000E+0 - ,0.12444020E+3,0.108E+3,0.700E+2,0.99250000E+0,0.00000000E+0 - ,0.10783510E+3,0.108E+3,0.710E+2,0.99250000E+0,0.00000000E+0 - ,0.10920420E+3,0.108E+3,0.720E+2,0.99250000E+0,0.00000000E+0 - ,0.10197340E+3,0.108E+3,0.730E+2,0.99250000E+0,0.00000000E+0 - ,0.88315600E+2,0.108E+3,0.740E+2,0.99250000E+0,0.00000000E+0 - ,0.90391800E+2,0.108E+3,0.750E+2,0.99250000E+0,0.00000000E+0 - ,0.83622700E+2,0.108E+3,0.760E+2,0.99250000E+0,0.00000000E+0 - ,0.77919400E+2,0.108E+3,0.770E+2,0.99250000E+0,0.00000000E+0 - ,0.66359100E+2,0.108E+3,0.780E+2,0.99250000E+0,0.00000000E+0 - ,0.62600800E+2,0.108E+3,0.790E+2,0.99250000E+0,0.00000000E+0 - ,0.64555200E+2,0.108E+3,0.800E+2,0.99250000E+0,0.00000000E+0 - ,0.86955200E+2,0.108E+3,0.810E+2,0.99250000E+0,0.00000000E+0 - ,0.86739200E+2,0.108E+3,0.820E+2,0.99250000E+0,0.00000000E+0 - ,0.82055900E+2,0.108E+3,0.830E+2,0.99250000E+0,0.00000000E+0 - ,0.79713300E+2,0.108E+3,0.840E+2,0.99250000E+0,0.00000000E+0 - ,0.75326800E+2,0.108E+3,0.850E+2,0.99250000E+0,0.00000000E+0 - ,0.70648000E+2,0.108E+3,0.860E+2,0.99250000E+0,0.00000000E+0 - ,0.18100550E+3,0.108E+3,0.870E+2,0.99250000E+0,0.00000000E+0 - ,0.18009880E+3,0.108E+3,0.880E+2,0.99250000E+0,0.00000000E+0 - ,0.16360420E+3,0.108E+3,0.890E+2,0.99250000E+0,0.00000000E+0 - ,0.15256500E+3,0.108E+3,0.900E+2,0.99250000E+0,0.00000000E+0 - ,0.14955510E+3,0.108E+3,0.910E+2,0.99250000E+0,0.00000000E+0 - ,0.14501130E+3,0.108E+3,0.920E+2,0.99250000E+0,0.00000000E+0 - ,0.14619280E+3,0.108E+3,0.930E+2,0.99250000E+0,0.00000000E+0 - ,0.14207750E+3,0.108E+3,0.940E+2,0.99250000E+0,0.00000000E+0 - ,0.91812000E+1,0.108E+3,0.101E+3,0.99250000E+0,0.00000000E+0 - ,0.26270800E+2,0.108E+3,0.103E+3,0.99250000E+0,0.98650000E+0 - ,0.34198300E+2,0.108E+3,0.104E+3,0.99250000E+0,0.98080000E+0 - ,0.28232700E+2,0.108E+3,0.105E+3,0.99250000E+0,0.97060000E+0 - ,0.22517800E+2,0.108E+3,0.106E+3,0.99250000E+0,0.98680000E+0 - ,0.16677500E+2,0.108E+3,0.107E+3,0.99250000E+0,0.99440000E+0 - ,0.12816100E+2,0.108E+3,0.108E+3,0.99250000E+0,0.99250000E+0 - ,0.42672000E+1,0.109E+3,0.100E+1,0.99820000E+0,0.91180000E+0 - ,0.33077000E+1,0.109E+3,0.200E+1,0.99820000E+0,0.00000000E+0 - ,0.42062700E+2,0.109E+3,0.300E+1,0.99820000E+0,0.00000000E+0 - ,0.28861500E+2,0.109E+3,0.400E+1,0.99820000E+0,0.00000000E+0 - ,0.22093100E+2,0.109E+3,0.500E+1,0.99820000E+0,0.00000000E+0 - ,0.16637300E+2,0.109E+3,0.600E+1,0.99820000E+0,0.00000000E+0 - ,0.12710700E+2,0.109E+3,0.700E+1,0.99820000E+0,0.00000000E+0 - ,0.10286700E+2,0.109E+3,0.800E+1,0.99820000E+0,0.00000000E+0 - ,0.82739000E+1,0.109E+3,0.900E+1,0.99820000E+0,0.00000000E+0 - ,0.66950000E+1,0.109E+3,0.100E+2,0.99820000E+0,0.00000000E+0 - ,0.51249800E+2,0.109E+3,0.110E+2,0.99820000E+0,0.00000000E+0 - ,0.44714100E+2,0.109E+3,0.120E+2,0.99820000E+0,0.00000000E+0 - ,0.43736400E+2,0.109E+3,0.130E+2,0.99820000E+0,0.00000000E+0 - ,0.37442100E+2,0.109E+3,0.140E+2,0.99820000E+0,0.00000000E+0 - ,0.31557700E+2,0.109E+3,0.150E+2,0.99820000E+0,0.00000000E+0 - ,0.27713700E+2,0.109E+3,0.160E+2,0.99820000E+0,0.00000000E+0 - ,0.23950500E+2,0.109E+3,0.170E+2,0.99820000E+0,0.00000000E+0 - ,0.20639400E+2,0.109E+3,0.180E+2,0.99820000E+0,0.00000000E+0 - ,0.84368800E+2,0.109E+3,0.190E+2,0.99820000E+0,0.00000000E+0 - ,0.75585000E+2,0.109E+3,0.200E+2,0.99820000E+0,0.00000000E+0 - ,0.63856400E+2,0.109E+3,0.210E+2,0.99820000E+0,0.00000000E+0 - ,0.63474800E+2,0.109E+3,0.220E+2,0.99820000E+0,0.00000000E+0 - ,0.59066500E+2,0.109E+3,0.230E+2,0.99820000E+0,0.00000000E+0 - ,0.47531800E+2,0.109E+3,0.240E+2,0.99820000E+0,0.00000000E+0 - ,0.52078000E+2,0.109E+3,0.250E+2,0.99820000E+0,0.00000000E+0 - ,0.41894200E+2,0.109E+3,0.260E+2,0.99820000E+0,0.00000000E+0 - ,0.44940700E+2,0.109E+3,0.270E+2,0.99820000E+0,0.00000000E+0 - ,0.45515500E+2,0.109E+3,0.280E+2,0.99820000E+0,0.00000000E+0 - ,0.35810000E+2,0.109E+3,0.290E+2,0.99820000E+0,0.00000000E+0 - ,0.37755900E+2,0.109E+3,0.300E+2,0.99820000E+0,0.00000000E+0 - ,0.43568500E+2,0.109E+3,0.310E+2,0.99820000E+0,0.00000000E+0 - ,0.40750000E+2,0.109E+3,0.320E+2,0.99820000E+0,0.00000000E+0 - ,0.36938900E+2,0.109E+3,0.330E+2,0.99820000E+0,0.00000000E+0 - ,0.34579200E+2,0.109E+3,0.340E+2,0.99820000E+0,0.00000000E+0 - ,0.31669900E+2,0.109E+3,0.350E+2,0.99820000E+0,0.00000000E+0 - ,0.28780000E+2,0.109E+3,0.360E+2,0.99820000E+0,0.00000000E+0 - ,0.96223500E+2,0.109E+3,0.370E+2,0.99820000E+0,0.00000000E+0 - ,0.90408100E+2,0.109E+3,0.380E+2,0.99820000E+0,0.00000000E+0 - ,0.82733700E+2,0.109E+3,0.390E+2,0.99820000E+0,0.00000000E+0 - ,0.76671200E+2,0.109E+3,0.400E+2,0.99820000E+0,0.00000000E+0 - ,0.71549300E+2,0.109E+3,0.410E+2,0.99820000E+0,0.00000000E+0 - ,0.57978400E+2,0.109E+3,0.420E+2,0.99820000E+0,0.00000000E+0 - ,0.63507900E+2,0.109E+3,0.430E+2,0.99820000E+0,0.00000000E+0 - ,0.50977000E+2,0.109E+3,0.440E+2,0.99820000E+0,0.00000000E+0 - ,0.55024000E+2,0.109E+3,0.450E+2,0.99820000E+0,0.00000000E+0 - ,0.51774000E+2,0.109E+3,0.460E+2,0.99820000E+0,0.00000000E+0 - ,0.43848000E+2,0.109E+3,0.470E+2,0.99820000E+0,0.00000000E+0 - ,0.46534000E+2,0.109E+3,0.480E+2,0.99820000E+0,0.00000000E+0 - ,0.55658900E+2,0.109E+3,0.490E+2,0.99820000E+0,0.00000000E+0 - ,0.53624300E+2,0.109E+3,0.500E+2,0.99820000E+0,0.00000000E+0 - ,0.50147300E+2,0.109E+3,0.510E+2,0.99820000E+0,0.00000000E+0 - ,0.48053500E+2,0.109E+3,0.520E+2,0.99820000E+0,0.00000000E+0 - ,0.45084800E+2,0.109E+3,0.530E+2,0.99820000E+0,0.00000000E+0 - ,0.42063400E+2,0.109E+3,0.540E+2,0.99820000E+0,0.00000000E+0 - ,0.11797180E+3,0.109E+3,0.550E+2,0.99820000E+0,0.00000000E+0 - ,0.11446760E+3,0.109E+3,0.560E+2,0.99820000E+0,0.00000000E+0 - ,0.10480950E+3,0.109E+3,0.570E+2,0.99820000E+0,0.00000000E+0 - ,0.59137900E+2,0.109E+3,0.580E+2,0.99820000E+0,0.27991000E+1 - ,0.10336160E+3,0.109E+3,0.590E+2,0.99820000E+0,0.00000000E+0 - ,0.99833100E+2,0.109E+3,0.600E+2,0.99820000E+0,0.00000000E+0 - ,0.97478900E+2,0.109E+3,0.610E+2,0.99820000E+0,0.00000000E+0 - ,0.95284600E+2,0.109E+3,0.620E+2,0.99820000E+0,0.00000000E+0 - ,0.93341000E+2,0.109E+3,0.630E+2,0.99820000E+0,0.00000000E+0 - ,0.77874200E+2,0.109E+3,0.640E+2,0.99820000E+0,0.00000000E+0 - ,0.82715400E+2,0.109E+3,0.650E+2,0.99820000E+0,0.00000000E+0 - ,0.80460700E+2,0.109E+3,0.660E+2,0.99820000E+0,0.00000000E+0 - ,0.84947800E+2,0.109E+3,0.670E+2,0.99820000E+0,0.00000000E+0 - ,0.83182700E+2,0.109E+3,0.680E+2,0.99820000E+0,0.00000000E+0 - ,0.81643700E+2,0.109E+3,0.690E+2,0.99820000E+0,0.00000000E+0 - ,0.80457500E+2,0.109E+3,0.700E+2,0.99820000E+0,0.00000000E+0 - ,0.70552200E+2,0.109E+3,0.710E+2,0.99820000E+0,0.00000000E+0 - ,0.72088700E+2,0.109E+3,0.720E+2,0.99820000E+0,0.00000000E+0 - ,0.67959000E+2,0.109E+3,0.730E+2,0.99820000E+0,0.00000000E+0 - ,0.59575800E+2,0.109E+3,0.740E+2,0.99820000E+0,0.00000000E+0 - ,0.61094900E+2,0.109E+3,0.750E+2,0.99820000E+0,0.00000000E+0 - ,0.57011100E+2,0.109E+3,0.760E+2,0.99820000E+0,0.00000000E+0 - ,0.53521400E+2,0.109E+3,0.770E+2,0.99820000E+0,0.00000000E+0 - ,0.46144200E+2,0.109E+3,0.780E+2,0.99820000E+0,0.00000000E+0 - ,0.43746800E+2,0.109E+3,0.790E+2,0.99820000E+0,0.00000000E+0 - ,0.45120500E+2,0.109E+3,0.800E+2,0.99820000E+0,0.00000000E+0 - ,0.58912900E+2,0.109E+3,0.810E+2,0.99820000E+0,0.00000000E+0 - ,0.59109700E+2,0.109E+3,0.820E+2,0.99820000E+0,0.00000000E+0 - ,0.56500700E+2,0.109E+3,0.830E+2,0.99820000E+0,0.00000000E+0 - ,0.55261400E+2,0.109E+3,0.840E+2,0.99820000E+0,0.00000000E+0 - ,0.52703300E+2,0.109E+3,0.850E+2,0.99820000E+0,0.00000000E+0 - ,0.49892700E+2,0.109E+3,0.860E+2,0.99820000E+0,0.00000000E+0 - ,0.11543210E+3,0.109E+3,0.870E+2,0.99820000E+0,0.00000000E+0 - ,0.11600620E+3,0.109E+3,0.880E+2,0.99820000E+0,0.00000000E+0 - ,0.10653030E+3,0.109E+3,0.890E+2,0.99820000E+0,0.00000000E+0 - ,0.10090290E+3,0.109E+3,0.900E+2,0.99820000E+0,0.00000000E+0 - ,0.98576800E+2,0.109E+3,0.910E+2,0.99820000E+0,0.00000000E+0 - ,0.95662500E+2,0.109E+3,0.920E+2,0.99820000E+0,0.00000000E+0 - ,0.95732200E+2,0.109E+3,0.930E+2,0.99820000E+0,0.00000000E+0 - ,0.93161400E+2,0.109E+3,0.940E+2,0.99820000E+0,0.00000000E+0 - ,0.63000000E+1,0.109E+3,0.101E+3,0.99820000E+0,0.00000000E+0 - ,0.17173300E+2,0.109E+3,0.103E+3,0.99820000E+0,0.98650000E+0 - ,0.22541300E+2,0.109E+3,0.104E+3,0.99820000E+0,0.98080000E+0 - ,0.19202900E+2,0.109E+3,0.105E+3,0.99820000E+0,0.97060000E+0 - ,0.15685700E+2,0.109E+3,0.106E+3,0.99820000E+0,0.98680000E+0 - ,0.11947000E+2,0.109E+3,0.107E+3,0.99820000E+0,0.99440000E+0 - ,0.94048000E+1,0.109E+3,0.108E+3,0.99820000E+0,0.99250000E+0 - ,0.71341000E+1,0.109E+3,0.109E+3,0.99820000E+0,0.99820000E+0 - ,0.20756700E+2,0.111E+3,0.100E+1,0.96840000E+0,0.91180000E+0 - ,0.12728700E+2,0.111E+3,0.200E+1,0.96840000E+0,0.00000000E+0 - ,0.42571610E+3,0.111E+3,0.300E+1,0.96840000E+0,0.00000000E+0 - ,0.21865720E+3,0.111E+3,0.400E+1,0.96840000E+0,0.00000000E+0 - ,0.13695360E+3,0.111E+3,0.500E+1,0.96840000E+0,0.00000000E+0 - ,0.87395600E+2,0.111E+3,0.600E+1,0.96840000E+0,0.00000000E+0 - ,0.58485300E+2,0.111E+3,0.700E+1,0.96840000E+0,0.00000000E+0 - ,0.42891100E+2,0.111E+3,0.800E+1,0.96840000E+0,0.00000000E+0 - ,0.31606000E+2,0.111E+3,0.900E+1,0.96840000E+0,0.00000000E+0 - ,0.23774500E+2,0.111E+3,0.100E+2,0.96840000E+0,0.00000000E+0 - ,0.50543630E+3,0.111E+3,0.110E+2,0.96840000E+0,0.00000000E+0 - ,0.35591800E+3,0.111E+3,0.120E+2,0.96840000E+0,0.00000000E+0 - ,0.31645880E+3,0.111E+3,0.130E+2,0.96840000E+0,0.00000000E+0 - ,0.23713260E+3,0.111E+3,0.140E+2,0.96840000E+0,0.00000000E+0 - ,0.17692050E+3,0.111E+3,0.150E+2,0.96840000E+0,0.00000000E+0 - ,0.14254300E+3,0.111E+3,0.160E+2,0.96840000E+0,0.00000000E+0 - ,0.11310250E+3,0.111E+3,0.170E+2,0.96840000E+0,0.00000000E+0 - ,0.90173500E+2,0.111E+3,0.180E+2,0.96840000E+0,0.00000000E+0 - ,0.84082990E+3,0.111E+3,0.190E+2,0.96840000E+0,0.00000000E+0 - ,0.64831050E+3,0.111E+3,0.200E+2,0.96840000E+0,0.00000000E+0 - ,0.52709170E+3,0.111E+3,0.210E+2,0.96840000E+0,0.00000000E+0 - ,0.50123930E+3,0.111E+3,0.220E+2,0.96840000E+0,0.00000000E+0 - ,0.45480300E+3,0.111E+3,0.230E+2,0.96840000E+0,0.00000000E+0 - ,0.35715080E+3,0.111E+3,0.240E+2,0.96840000E+0,0.00000000E+0 - ,0.38634260E+3,0.111E+3,0.250E+2,0.96840000E+0,0.00000000E+0 - ,0.30174010E+3,0.111E+3,0.260E+2,0.96840000E+0,0.00000000E+0 - ,0.31417180E+3,0.111E+3,0.270E+2,0.96840000E+0,0.00000000E+0 - ,0.32682710E+3,0.111E+3,0.280E+2,0.96840000E+0,0.00000000E+0 - ,0.24981970E+3,0.111E+3,0.290E+2,0.96840000E+0,0.00000000E+0 - ,0.24939250E+3,0.111E+3,0.300E+2,0.96840000E+0,0.00000000E+0 - ,0.29840070E+3,0.111E+3,0.310E+2,0.96840000E+0,0.00000000E+0 - ,0.25314330E+3,0.111E+3,0.320E+2,0.96840000E+0,0.00000000E+0 - ,0.20818020E+3,0.111E+3,0.330E+2,0.96840000E+0,0.00000000E+0 - ,0.18247440E+3,0.111E+3,0.340E+2,0.96840000E+0,0.00000000E+0 - ,0.15582020E+3,0.111E+3,0.350E+2,0.96840000E+0,0.00000000E+0 - ,0.13243480E+3,0.111E+3,0.360E+2,0.96840000E+0,0.00000000E+0 - ,0.93630060E+3,0.111E+3,0.370E+2,0.96840000E+0,0.00000000E+0 - ,0.77398540E+3,0.111E+3,0.380E+2,0.96840000E+0,0.00000000E+0 - ,0.65879630E+3,0.111E+3,0.390E+2,0.96840000E+0,0.00000000E+0 - ,0.58124800E+3,0.111E+3,0.400E+2,0.96840000E+0,0.00000000E+0 - ,0.52340580E+3,0.111E+3,0.410E+2,0.96840000E+0,0.00000000E+0 - ,0.39500580E+3,0.111E+3,0.420E+2,0.96840000E+0,0.00000000E+0 - ,0.44452690E+3,0.111E+3,0.430E+2,0.96840000E+0,0.00000000E+0 - ,0.33022730E+3,0.111E+3,0.440E+2,0.96840000E+0,0.00000000E+0 - ,0.36142870E+3,0.111E+3,0.450E+2,0.96840000E+0,0.00000000E+0 - ,0.33243920E+3,0.111E+3,0.460E+2,0.96840000E+0,0.00000000E+0 - ,0.27794280E+3,0.111E+3,0.470E+2,0.96840000E+0,0.00000000E+0 - ,0.28984740E+3,0.111E+3,0.480E+2,0.96840000E+0,0.00000000E+0 - ,0.37337940E+3,0.111E+3,0.490E+2,0.96840000E+0,0.00000000E+0 - ,0.33470230E+3,0.111E+3,0.500E+2,0.96840000E+0,0.00000000E+0 - ,0.28898880E+3,0.111E+3,0.510E+2,0.96840000E+0,0.00000000E+0 - ,0.26288460E+3,0.111E+3,0.520E+2,0.96840000E+0,0.00000000E+0 - ,0.23260530E+3,0.111E+3,0.530E+2,0.96840000E+0,0.00000000E+0 - ,0.20479860E+3,0.111E+3,0.540E+2,0.96840000E+0,0.00000000E+0 - ,0.11389256E+4,0.111E+3,0.550E+2,0.96840000E+0,0.00000000E+0 - ,0.99536600E+3,0.111E+3,0.560E+2,0.96840000E+0,0.00000000E+0 - ,0.85007680E+3,0.111E+3,0.570E+2,0.96840000E+0,0.00000000E+0 - ,0.34313820E+3,0.111E+3,0.580E+2,0.96840000E+0,0.27991000E+1 - ,0.87351340E+3,0.111E+3,0.590E+2,0.96840000E+0,0.00000000E+0 - ,0.83492630E+3,0.111E+3,0.600E+2,0.96840000E+0,0.00000000E+0 - ,0.81293500E+3,0.111E+3,0.610E+2,0.96840000E+0,0.00000000E+0 - ,0.79283360E+3,0.111E+3,0.620E+2,0.96840000E+0,0.00000000E+0 - ,0.77497190E+3,0.111E+3,0.630E+2,0.96840000E+0,0.00000000E+0 - ,0.58968210E+3,0.111E+3,0.640E+2,0.96840000E+0,0.00000000E+0 - ,0.69502110E+3,0.111E+3,0.650E+2,0.96840000E+0,0.00000000E+0 - ,0.66665150E+3,0.111E+3,0.660E+2,0.96840000E+0,0.00000000E+0 - ,0.69407420E+3,0.111E+3,0.670E+2,0.96840000E+0,0.00000000E+0 - ,0.67884860E+3,0.111E+3,0.680E+2,0.96840000E+0,0.00000000E+0 - ,0.66485800E+3,0.111E+3,0.690E+2,0.96840000E+0,0.00000000E+0 - ,0.65799220E+3,0.111E+3,0.700E+2,0.96840000E+0,0.00000000E+0 - ,0.54208720E+3,0.111E+3,0.710E+2,0.96840000E+0,0.00000000E+0 - ,0.51742950E+3,0.111E+3,0.720E+2,0.96840000E+0,0.00000000E+0 - ,0.46327240E+3,0.111E+3,0.730E+2,0.96840000E+0,0.00000000E+0 - ,0.38490910E+3,0.111E+3,0.740E+2,0.96840000E+0,0.00000000E+0 - ,0.38879710E+3,0.111E+3,0.750E+2,0.96840000E+0,0.00000000E+0 - ,0.34639970E+3,0.111E+3,0.760E+2,0.96840000E+0,0.00000000E+0 - ,0.31281320E+3,0.111E+3,0.770E+2,0.96840000E+0,0.00000000E+0 - ,0.25572890E+3,0.111E+3,0.780E+2,0.96840000E+0,0.00000000E+0 - ,0.23740440E+3,0.111E+3,0.790E+2,0.96840000E+0,0.00000000E+0 - ,0.24279190E+3,0.111E+3,0.800E+2,0.96840000E+0,0.00000000E+0 - ,0.37972090E+3,0.111E+3,0.810E+2,0.96840000E+0,0.00000000E+0 - ,0.36256490E+3,0.111E+3,0.820E+2,0.96840000E+0,0.00000000E+0 - ,0.32393500E+3,0.111E+3,0.830E+2,0.96840000E+0,0.00000000E+0 - ,0.30383030E+3,0.111E+3,0.840E+2,0.96840000E+0,0.00000000E+0 - ,0.27473150E+3,0.111E+3,0.850E+2,0.96840000E+0,0.00000000E+0 - ,0.24706350E+3,0.111E+3,0.860E+2,0.96840000E+0,0.00000000E+0 - ,0.10521318E+4,0.111E+3,0.870E+2,0.96840000E+0,0.00000000E+0 - ,0.96974210E+3,0.111E+3,0.880E+2,0.96840000E+0,0.00000000E+0 - ,0.83486500E+3,0.111E+3,0.890E+2,0.96840000E+0,0.00000000E+0 - ,0.72693870E+3,0.111E+3,0.900E+2,0.96840000E+0,0.00000000E+0 - ,0.73265540E+3,0.111E+3,0.910E+2,0.96840000E+0,0.00000000E+0 - ,0.70879360E+3,0.111E+3,0.920E+2,0.96840000E+0,0.00000000E+0 - ,0.74391900E+3,0.111E+3,0.930E+2,0.96840000E+0,0.00000000E+0 - ,0.71791000E+3,0.111E+3,0.940E+2,0.96840000E+0,0.00000000E+0 - ,0.34995200E+2,0.111E+3,0.101E+3,0.96840000E+0,0.00000000E+0 - ,0.12582450E+3,0.111E+3,0.103E+3,0.96840000E+0,0.98650000E+0 - ,0.15832680E+3,0.111E+3,0.104E+3,0.96840000E+0,0.98080000E+0 - ,0.11340160E+3,0.111E+3,0.105E+3,0.96840000E+0,0.97060000E+0 - ,0.82014400E+2,0.111E+3,0.106E+3,0.96840000E+0,0.98680000E+0 - ,0.54445400E+2,0.111E+3,0.107E+3,0.96840000E+0,0.99440000E+0 - ,0.38122700E+2,0.111E+3,0.108E+3,0.96840000E+0,0.99250000E+0 - ,0.24956000E+2,0.111E+3,0.109E+3,0.96840000E+0,0.99820000E+0 - ,0.18610520E+3,0.111E+3,0.111E+3,0.96840000E+0,0.96840000E+0 - ,0.31991300E+2,0.112E+3,0.100E+1,0.96280000E+0,0.91180000E+0 - ,0.19464800E+2,0.112E+3,0.200E+1,0.96280000E+0,0.00000000E+0 - ,0.67003300E+3,0.112E+3,0.300E+1,0.96280000E+0,0.00000000E+0 - ,0.34026020E+3,0.112E+3,0.400E+1,0.96280000E+0,0.00000000E+0 - ,0.21221800E+3,0.112E+3,0.500E+1,0.96280000E+0,0.00000000E+0 - ,0.13492270E+3,0.112E+3,0.600E+1,0.96280000E+0,0.00000000E+0 - ,0.89964600E+2,0.112E+3,0.700E+1,0.96280000E+0,0.00000000E+0 - ,0.65760900E+2,0.112E+3,0.800E+1,0.96280000E+0,0.00000000E+0 - ,0.48286500E+2,0.112E+3,0.900E+1,0.96280000E+0,0.00000000E+0 - ,0.36191100E+2,0.112E+3,0.100E+2,0.96280000E+0,0.00000000E+0 - ,0.79475970E+3,0.112E+3,0.110E+2,0.96280000E+0,0.00000000E+0 - ,0.55459670E+3,0.112E+3,0.120E+2,0.96280000E+0,0.00000000E+0 - ,0.49208290E+3,0.112E+3,0.130E+2,0.96280000E+0,0.00000000E+0 - ,0.36758110E+3,0.112E+3,0.140E+2,0.96280000E+0,0.00000000E+0 - ,0.27352680E+3,0.112E+3,0.150E+2,0.96280000E+0,0.00000000E+0 - ,0.21994890E+3,0.112E+3,0.160E+2,0.96280000E+0,0.00000000E+0 - ,0.17413990E+3,0.112E+3,0.170E+2,0.96280000E+0,0.00000000E+0 - ,0.13851900E+3,0.112E+3,0.180E+2,0.96280000E+0,0.00000000E+0 - ,0.13273176E+4,0.112E+3,0.190E+2,0.96280000E+0,0.00000000E+0 - ,0.10137695E+4,0.112E+3,0.200E+2,0.96280000E+0,0.00000000E+0 - ,0.82289570E+3,0.112E+3,0.210E+2,0.96280000E+0,0.00000000E+0 - ,0.78169930E+3,0.112E+3,0.220E+2,0.96280000E+0,0.00000000E+0 - ,0.70876840E+3,0.112E+3,0.230E+2,0.96280000E+0,0.00000000E+0 - ,0.55661270E+3,0.112E+3,0.240E+2,0.96280000E+0,0.00000000E+0 - ,0.60144990E+3,0.112E+3,0.250E+2,0.96280000E+0,0.00000000E+0 - ,0.46964370E+3,0.112E+3,0.260E+2,0.96280000E+0,0.00000000E+0 - ,0.48817150E+3,0.112E+3,0.270E+2,0.96280000E+0,0.00000000E+0 - ,0.50815850E+3,0.112E+3,0.280E+2,0.96280000E+0,0.00000000E+0 - ,0.38842090E+3,0.112E+3,0.290E+2,0.96280000E+0,0.00000000E+0 - ,0.38688840E+3,0.112E+3,0.300E+2,0.96280000E+0,0.00000000E+0 - ,0.46356910E+3,0.112E+3,0.310E+2,0.96280000E+0,0.00000000E+0 - ,0.39225330E+3,0.112E+3,0.320E+2,0.96280000E+0,0.00000000E+0 - ,0.32187320E+3,0.112E+3,0.330E+2,0.96280000E+0,0.00000000E+0 - ,0.28171730E+3,0.112E+3,0.340E+2,0.96280000E+0,0.00000000E+0 - ,0.24015650E+3,0.112E+3,0.350E+2,0.96280000E+0,0.00000000E+0 - ,0.20374730E+3,0.112E+3,0.360E+2,0.96280000E+0,0.00000000E+0 - ,0.14776556E+4,0.112E+3,0.370E+2,0.96280000E+0,0.00000000E+0 - ,0.12109593E+4,0.112E+3,0.380E+2,0.96280000E+0,0.00000000E+0 - ,0.10281365E+4,0.112E+3,0.390E+2,0.96280000E+0,0.00000000E+0 - ,0.90577500E+3,0.112E+3,0.400E+2,0.96280000E+0,0.00000000E+0 - ,0.81492890E+3,0.112E+3,0.410E+2,0.96280000E+0,0.00000000E+0 - ,0.61402650E+3,0.112E+3,0.420E+2,0.96280000E+0,0.00000000E+0 - ,0.69144970E+3,0.112E+3,0.430E+2,0.96280000E+0,0.00000000E+0 - ,0.51267590E+3,0.112E+3,0.440E+2,0.96280000E+0,0.00000000E+0 - ,0.56100100E+3,0.112E+3,0.450E+2,0.96280000E+0,0.00000000E+0 - ,0.51564570E+3,0.112E+3,0.460E+2,0.96280000E+0,0.00000000E+0 - ,0.43128070E+3,0.112E+3,0.470E+2,0.96280000E+0,0.00000000E+0 - ,0.44915670E+3,0.112E+3,0.480E+2,0.96280000E+0,0.00000000E+0 - ,0.57992340E+3,0.112E+3,0.490E+2,0.96280000E+0,0.00000000E+0 - ,0.51865180E+3,0.112E+3,0.500E+2,0.96280000E+0,0.00000000E+0 - ,0.44692300E+3,0.112E+3,0.510E+2,0.96280000E+0,0.00000000E+0 - ,0.40607280E+3,0.112E+3,0.520E+2,0.96280000E+0,0.00000000E+0 - ,0.35880520E+3,0.112E+3,0.530E+2,0.96280000E+0,0.00000000E+0 - ,0.31545810E+3,0.112E+3,0.540E+2,0.96280000E+0,0.00000000E+0 - ,0.17990180E+4,0.112E+3,0.550E+2,0.96280000E+0,0.00000000E+0 - ,0.15595050E+4,0.112E+3,0.560E+2,0.96280000E+0,0.00000000E+0 - ,0.13282510E+4,0.112E+3,0.570E+2,0.96280000E+0,0.00000000E+0 - ,0.53086500E+3,0.112E+3,0.580E+2,0.96280000E+0,0.27991000E+1 - ,0.13672714E+4,0.112E+3,0.590E+2,0.96280000E+0,0.00000000E+0 - ,0.13059000E+4,0.112E+3,0.600E+2,0.96280000E+0,0.00000000E+0 - ,0.12712883E+4,0.112E+3,0.610E+2,0.96280000E+0,0.00000000E+0 - ,0.12396749E+4,0.112E+3,0.620E+2,0.96280000E+0,0.00000000E+0 - ,0.12115825E+4,0.112E+3,0.630E+2,0.96280000E+0,0.00000000E+0 - ,0.91963290E+3,0.112E+3,0.640E+2,0.96280000E+0,0.00000000E+0 - ,0.10898214E+4,0.112E+3,0.650E+2,0.96280000E+0,0.00000000E+0 - ,0.10451961E+4,0.112E+3,0.660E+2,0.96280000E+0,0.00000000E+0 - ,0.10842313E+4,0.112E+3,0.670E+2,0.96280000E+0,0.00000000E+0 - ,0.10603386E+4,0.112E+3,0.680E+2,0.96280000E+0,0.00000000E+0 - ,0.10383601E+4,0.112E+3,0.690E+2,0.96280000E+0,0.00000000E+0 - ,0.10277356E+4,0.112E+3,0.700E+2,0.96280000E+0,0.00000000E+0 - ,0.84553860E+3,0.112E+3,0.710E+2,0.96280000E+0,0.00000000E+0 - ,0.80500140E+3,0.112E+3,0.720E+2,0.96280000E+0,0.00000000E+0 - ,0.71971520E+3,0.112E+3,0.730E+2,0.96280000E+0,0.00000000E+0 - ,0.59743440E+3,0.112E+3,0.740E+2,0.96280000E+0,0.00000000E+0 - ,0.60309070E+3,0.112E+3,0.750E+2,0.96280000E+0,0.00000000E+0 - ,0.53662210E+3,0.112E+3,0.760E+2,0.96280000E+0,0.00000000E+0 - ,0.48407160E+3,0.112E+3,0.770E+2,0.96280000E+0,0.00000000E+0 - ,0.39524010E+3,0.112E+3,0.780E+2,0.96280000E+0,0.00000000E+0 - ,0.36670170E+3,0.112E+3,0.790E+2,0.96280000E+0,0.00000000E+0 - ,0.37485520E+3,0.112E+3,0.800E+2,0.96280000E+0,0.00000000E+0 - ,0.58953950E+3,0.112E+3,0.810E+2,0.96280000E+0,0.00000000E+0 - ,0.56172980E+3,0.112E+3,0.820E+2,0.96280000E+0,0.00000000E+0 - ,0.50092230E+3,0.112E+3,0.830E+2,0.96280000E+0,0.00000000E+0 - ,0.46935230E+3,0.112E+3,0.840E+2,0.96280000E+0,0.00000000E+0 - ,0.42385000E+3,0.112E+3,0.850E+2,0.96280000E+0,0.00000000E+0 - ,0.38067930E+3,0.112E+3,0.860E+2,0.96280000E+0,0.00000000E+0 - ,0.16575070E+4,0.112E+3,0.870E+2,0.96280000E+0,0.00000000E+0 - ,0.15173457E+4,0.112E+3,0.880E+2,0.96280000E+0,0.00000000E+0 - ,0.13028376E+4,0.112E+3,0.890E+2,0.96280000E+0,0.00000000E+0 - ,0.11313898E+4,0.112E+3,0.900E+2,0.96280000E+0,0.00000000E+0 - ,0.11418668E+4,0.112E+3,0.910E+2,0.96280000E+0,0.00000000E+0 - ,0.11045083E+4,0.112E+3,0.920E+2,0.96280000E+0,0.00000000E+0 - ,0.11608135E+4,0.112E+3,0.930E+2,0.96280000E+0,0.00000000E+0 - ,0.11198466E+4,0.112E+3,0.940E+2,0.96280000E+0,0.00000000E+0 - ,0.54102100E+2,0.112E+3,0.101E+3,0.96280000E+0,0.00000000E+0 - ,0.19570570E+3,0.112E+3,0.103E+3,0.96280000E+0,0.98650000E+0 - ,0.24622270E+3,0.112E+3,0.104E+3,0.96280000E+0,0.98080000E+0 - ,0.17556460E+3,0.112E+3,0.105E+3,0.96280000E+0,0.97060000E+0 - ,0.12666570E+3,0.112E+3,0.106E+3,0.96280000E+0,0.98680000E+0 - ,0.83770300E+2,0.112E+3,0.107E+3,0.96280000E+0,0.99440000E+0 - ,0.58430300E+2,0.112E+3,0.108E+3,0.96280000E+0,0.99250000E+0 - ,0.37988400E+2,0.112E+3,0.109E+3,0.96280000E+0,0.99820000E+0 - ,0.28960820E+3,0.112E+3,0.111E+3,0.96280000E+0,0.96840000E+0 - ,0.45127080E+3,0.112E+3,0.112E+3,0.96280000E+0,0.96280000E+0 - ,0.33104800E+2,0.113E+3,0.100E+1,0.96480000E+0,0.91180000E+0 - ,0.20515800E+2,0.113E+3,0.200E+1,0.96480000E+0,0.00000000E+0 - ,0.62753090E+3,0.113E+3,0.300E+1,0.96480000E+0,0.00000000E+0 - ,0.33473350E+3,0.113E+3,0.400E+1,0.96480000E+0,0.00000000E+0 - ,0.21388480E+3,0.113E+3,0.500E+1,0.96480000E+0,0.00000000E+0 - ,0.13832540E+3,0.113E+3,0.600E+1,0.96480000E+0,0.00000000E+0 - ,0.93354200E+2,0.113E+3,0.700E+1,0.96480000E+0,0.00000000E+0 - ,0.68798300E+2,0.113E+3,0.800E+1,0.96480000E+0,0.00000000E+0 - ,0.50857700E+2,0.113E+3,0.900E+1,0.96480000E+0,0.00000000E+0 - ,0.38315400E+2,0.113E+3,0.100E+2,0.96480000E+0,0.00000000E+0 - ,0.74634190E+3,0.113E+3,0.110E+2,0.96480000E+0,0.00000000E+0 - ,0.54102850E+3,0.113E+3,0.120E+2,0.96480000E+0,0.00000000E+0 - ,0.48623650E+3,0.113E+3,0.130E+2,0.96480000E+0,0.00000000E+0 - ,0.36962320E+3,0.113E+3,0.140E+2,0.96480000E+0,0.00000000E+0 - ,0.27892720E+3,0.113E+3,0.150E+2,0.96480000E+0,0.00000000E+0 - ,0.22621560E+3,0.113E+3,0.160E+2,0.96480000E+0,0.00000000E+0 - ,0.18054300E+3,0.113E+3,0.170E+2,0.96480000E+0,0.00000000E+0 - ,0.14457980E+3,0.113E+3,0.180E+2,0.96480000E+0,0.00000000E+0 - ,0.12332237E+4,0.113E+3,0.190E+2,0.96480000E+0,0.00000000E+0 - ,0.97304930E+3,0.113E+3,0.200E+2,0.96480000E+0,0.00000000E+0 - ,0.79522060E+3,0.113E+3,0.210E+2,0.96480000E+0,0.00000000E+0 - ,0.75945320E+3,0.113E+3,0.220E+2,0.96480000E+0,0.00000000E+0 - ,0.69091560E+3,0.113E+3,0.230E+2,0.96480000E+0,0.00000000E+0 - ,0.54224590E+3,0.113E+3,0.240E+2,0.96480000E+0,0.00000000E+0 - ,0.58914750E+3,0.113E+3,0.250E+2,0.96480000E+0,0.00000000E+0 - ,0.46004960E+3,0.113E+3,0.260E+2,0.96480000E+0,0.00000000E+0 - ,0.48229900E+3,0.113E+3,0.270E+2,0.96480000E+0,0.00000000E+0 - ,0.50035250E+3,0.113E+3,0.280E+2,0.96480000E+0,0.00000000E+0 - ,0.38199230E+3,0.113E+3,0.290E+2,0.96480000E+0,0.00000000E+0 - ,0.38514490E+3,0.113E+3,0.300E+2,0.96480000E+0,0.00000000E+0 - ,0.45995440E+3,0.113E+3,0.310E+2,0.96480000E+0,0.00000000E+0 - ,0.39466500E+3,0.113E+3,0.320E+2,0.96480000E+0,0.00000000E+0 - ,0.32772290E+3,0.113E+3,0.330E+2,0.96480000E+0,0.00000000E+0 - ,0.28884850E+3,0.113E+3,0.340E+2,0.96480000E+0,0.00000000E+0 - ,0.24796920E+3,0.113E+3,0.350E+2,0.96480000E+0,0.00000000E+0 - ,0.21169490E+3,0.113E+3,0.360E+2,0.96480000E+0,0.00000000E+0 - ,0.13752558E+4,0.113E+3,0.370E+2,0.96480000E+0,0.00000000E+0 - ,0.11602539E+4,0.113E+3,0.380E+2,0.96480000E+0,0.00000000E+0 - ,0.99637570E+3,0.113E+3,0.390E+2,0.96480000E+0,0.00000000E+0 - ,0.88385410E+3,0.113E+3,0.400E+2,0.96480000E+0,0.00000000E+0 - ,0.79860940E+3,0.113E+3,0.410E+2,0.96480000E+0,0.00000000E+0 - ,0.60591350E+3,0.113E+3,0.420E+2,0.96480000E+0,0.00000000E+0 - ,0.68054270E+3,0.113E+3,0.430E+2,0.96480000E+0,0.00000000E+0 - ,0.50852890E+3,0.113E+3,0.440E+2,0.96480000E+0,0.00000000E+0 - ,0.55700430E+3,0.113E+3,0.450E+2,0.96480000E+0,0.00000000E+0 - ,0.51341630E+3,0.113E+3,0.460E+2,0.96480000E+0,0.00000000E+0 - ,0.42799620E+3,0.113E+3,0.470E+2,0.96480000E+0,0.00000000E+0 - ,0.44880710E+3,0.113E+3,0.480E+2,0.96480000E+0,0.00000000E+0 - ,0.57434200E+3,0.113E+3,0.490E+2,0.96480000E+0,0.00000000E+0 - ,0.51984240E+3,0.113E+3,0.500E+2,0.96480000E+0,0.00000000E+0 - ,0.45284940E+3,0.113E+3,0.510E+2,0.96480000E+0,0.00000000E+0 - ,0.41405440E+3,0.113E+3,0.520E+2,0.96480000E+0,0.00000000E+0 - ,0.36827920E+3,0.113E+3,0.530E+2,0.96480000E+0,0.00000000E+0 - ,0.32576250E+3,0.113E+3,0.540E+2,0.96480000E+0,0.00000000E+0 - ,0.16731922E+4,0.113E+3,0.550E+2,0.96480000E+0,0.00000000E+0 - ,0.14872964E+4,0.113E+3,0.560E+2,0.96480000E+0,0.00000000E+0 - ,0.12815229E+4,0.113E+3,0.570E+2,0.96480000E+0,0.00000000E+0 - ,0.53656260E+3,0.113E+3,0.580E+2,0.96480000E+0,0.27991000E+1 - ,0.13086041E+4,0.113E+3,0.590E+2,0.96480000E+0,0.00000000E+0 - ,0.12526928E+4,0.113E+3,0.600E+2,0.96480000E+0,0.00000000E+0 - ,0.12202246E+4,0.113E+3,0.610E+2,0.96480000E+0,0.00000000E+0 - ,0.11905003E+4,0.113E+3,0.620E+2,0.96480000E+0,0.00000000E+0 - ,0.11641089E+4,0.113E+3,0.630E+2,0.96480000E+0,0.00000000E+0 - ,0.89395150E+3,0.113E+3,0.640E+2,0.96480000E+0,0.00000000E+0 - ,0.10381047E+4,0.113E+3,0.650E+2,0.96480000E+0,0.00000000E+0 - ,0.99738370E+3,0.113E+3,0.660E+2,0.96480000E+0,0.00000000E+0 - ,0.10450038E+4,0.113E+3,0.670E+2,0.96480000E+0,0.00000000E+0 - ,0.10223674E+4,0.113E+3,0.680E+2,0.96480000E+0,0.00000000E+0 - ,0.10016784E+4,0.113E+3,0.690E+2,0.96480000E+0,0.00000000E+0 - ,0.99098080E+3,0.113E+3,0.700E+2,0.96480000E+0,0.00000000E+0 - ,0.82160050E+3,0.113E+3,0.710E+2,0.96480000E+0,0.00000000E+0 - ,0.79184560E+3,0.113E+3,0.720E+2,0.96480000E+0,0.00000000E+0 - ,0.71274220E+3,0.113E+3,0.730E+2,0.96480000E+0,0.00000000E+0 - ,0.59416160E+3,0.113E+3,0.740E+2,0.96480000E+0,0.00000000E+0 - ,0.60157800E+3,0.113E+3,0.750E+2,0.96480000E+0,0.00000000E+0 - ,0.53838550E+3,0.113E+3,0.760E+2,0.96480000E+0,0.00000000E+0 - ,0.48789840E+3,0.113E+3,0.770E+2,0.96480000E+0,0.00000000E+0 - ,0.39997680E+3,0.113E+3,0.780E+2,0.96480000E+0,0.00000000E+0 - ,0.37172100E+3,0.113E+3,0.790E+2,0.96480000E+0,0.00000000E+0 - ,0.38105900E+3,0.113E+3,0.800E+2,0.96480000E+0,0.00000000E+0 - ,0.58469720E+3,0.113E+3,0.810E+2,0.96480000E+0,0.00000000E+0 - ,0.56268750E+3,0.113E+3,0.820E+2,0.96480000E+0,0.00000000E+0 - ,0.50686630E+3,0.113E+3,0.830E+2,0.96480000E+0,0.00000000E+0 - ,0.47758620E+3,0.113E+3,0.840E+2,0.96480000E+0,0.00000000E+0 - ,0.43409690E+3,0.113E+3,0.850E+2,0.96480000E+0,0.00000000E+0 - ,0.39211690E+3,0.113E+3,0.860E+2,0.96480000E+0,0.00000000E+0 - ,0.15558848E+4,0.113E+3,0.870E+2,0.96480000E+0,0.00000000E+0 - ,0.14554241E+4,0.113E+3,0.880E+2,0.96480000E+0,0.00000000E+0 - ,0.12633724E+4,0.113E+3,0.890E+2,0.96480000E+0,0.00000000E+0 - ,0.11100628E+4,0.113E+3,0.900E+2,0.96480000E+0,0.00000000E+0 - ,0.11130738E+4,0.113E+3,0.910E+2,0.96480000E+0,0.00000000E+0 - ,0.10770005E+4,0.113E+3,0.920E+2,0.96480000E+0,0.00000000E+0 - ,0.11238008E+4,0.113E+3,0.930E+2,0.96480000E+0,0.00000000E+0 - ,0.10856846E+4,0.113E+3,0.940E+2,0.96480000E+0,0.00000000E+0 - ,0.55263600E+2,0.113E+3,0.101E+3,0.96480000E+0,0.00000000E+0 - ,0.19307070E+3,0.113E+3,0.103E+3,0.96480000E+0,0.98650000E+0 - ,0.24376120E+3,0.113E+3,0.104E+3,0.96480000E+0,0.98080000E+0 - ,0.17772540E+3,0.113E+3,0.105E+3,0.96480000E+0,0.97060000E+0 - ,0.12969220E+3,0.113E+3,0.106E+3,0.96480000E+0,0.98680000E+0 - ,0.86872800E+2,0.113E+3,0.107E+3,0.96480000E+0,0.99440000E+0 - ,0.61217500E+2,0.113E+3,0.108E+3,0.96480000E+0,0.99250000E+0 - ,0.40322000E+2,0.113E+3,0.109E+3,0.96480000E+0,0.99820000E+0 - ,0.28422510E+3,0.113E+3,0.111E+3,0.96480000E+0,0.96840000E+0 - ,0.44173220E+3,0.113E+3,0.112E+3,0.96480000E+0,0.96280000E+0 - ,0.43775750E+3,0.113E+3,0.113E+3,0.96480000E+0,0.96480000E+0 - ,0.27498900E+2,0.114E+3,0.100E+1,0.95070000E+0,0.91180000E+0 - ,0.17635600E+2,0.114E+3,0.200E+1,0.95070000E+0,0.00000000E+0 - ,0.45095830E+3,0.114E+3,0.300E+1,0.95070000E+0,0.00000000E+0 - ,0.25658810E+3,0.114E+3,0.400E+1,0.95070000E+0,0.00000000E+0 - ,0.17018910E+3,0.114E+3,0.500E+1,0.95070000E+0,0.00000000E+0 - ,0.11320460E+3,0.114E+3,0.600E+1,0.95070000E+0,0.00000000E+0 - ,0.78019000E+2,0.114E+3,0.700E+1,0.95070000E+0,0.00000000E+0 - ,0.58355700E+2,0.114E+3,0.800E+1,0.95070000E+0,0.00000000E+0 - ,0.43685500E+2,0.114E+3,0.900E+1,0.95070000E+0,0.00000000E+0 - ,0.33241600E+2,0.114E+3,0.100E+2,0.95070000E+0,0.00000000E+0 - ,0.53834120E+3,0.114E+3,0.110E+2,0.95070000E+0,0.00000000E+0 - ,0.40991740E+3,0.114E+3,0.120E+2,0.95070000E+0,0.00000000E+0 - ,0.37552330E+3,0.114E+3,0.130E+2,0.95070000E+0,0.00000000E+0 - ,0.29299940E+3,0.114E+3,0.140E+2,0.95070000E+0,0.00000000E+0 - ,0.22606570E+3,0.114E+3,0.150E+2,0.95070000E+0,0.00000000E+0 - ,0.18600510E+3,0.114E+3,0.160E+2,0.95070000E+0,0.00000000E+0 - ,0.15052310E+3,0.114E+3,0.170E+2,0.95070000E+0,0.00000000E+0 - ,0.12200120E+3,0.114E+3,0.180E+2,0.95070000E+0,0.00000000E+0 - ,0.88126240E+3,0.114E+3,0.190E+2,0.95070000E+0,0.00000000E+0 - ,0.72251110E+3,0.114E+3,0.200E+2,0.95070000E+0,0.00000000E+0 - ,0.59567250E+3,0.114E+3,0.210E+2,0.95070000E+0,0.00000000E+0 - ,0.57349880E+3,0.114E+3,0.220E+2,0.95070000E+0,0.00000000E+0 - ,0.52428080E+3,0.114E+3,0.230E+2,0.95070000E+0,0.00000000E+0 - ,0.41188790E+3,0.114E+3,0.240E+2,0.95070000E+0,0.00000000E+0 - ,0.45022340E+3,0.114E+3,0.250E+2,0.95070000E+0,0.00000000E+0 - ,0.35224080E+3,0.114E+3,0.260E+2,0.95070000E+0,0.00000000E+0 - ,0.37301250E+3,0.114E+3,0.270E+2,0.95070000E+0,0.00000000E+0 - ,0.38500480E+3,0.114E+3,0.280E+2,0.95070000E+0,0.00000000E+0 - ,0.29414060E+3,0.114E+3,0.290E+2,0.95070000E+0,0.00000000E+0 - ,0.30117090E+3,0.114E+3,0.300E+2,0.95070000E+0,0.00000000E+0 - ,0.35794110E+3,0.114E+3,0.310E+2,0.95070000E+0,0.00000000E+0 - ,0.31339110E+3,0.114E+3,0.320E+2,0.95070000E+0,0.00000000E+0 - ,0.26507110E+3,0.114E+3,0.330E+2,0.95070000E+0,0.00000000E+0 - ,0.23633230E+3,0.114E+3,0.340E+2,0.95070000E+0,0.00000000E+0 - ,0.20529760E+3,0.114E+3,0.350E+2,0.95070000E+0,0.00000000E+0 - ,0.17718110E+3,0.114E+3,0.360E+2,0.95070000E+0,0.00000000E+0 - ,0.98604380E+3,0.114E+3,0.370E+2,0.95070000E+0,0.00000000E+0 - ,0.86034210E+3,0.114E+3,0.380E+2,0.95070000E+0,0.00000000E+0 - ,0.75038170E+3,0.114E+3,0.390E+2,0.95070000E+0,0.00000000E+0 - ,0.67218340E+3,0.114E+3,0.400E+2,0.95070000E+0,0.00000000E+0 - ,0.61131470E+3,0.114E+3,0.410E+2,0.95070000E+0,0.00000000E+0 - ,0.46910920E+3,0.114E+3,0.420E+2,0.95070000E+0,0.00000000E+0 - ,0.52464790E+3,0.114E+3,0.430E+2,0.95070000E+0,0.00000000E+0 - ,0.39698620E+3,0.114E+3,0.440E+2,0.95070000E+0,0.00000000E+0 - ,0.43472510E+3,0.114E+3,0.450E+2,0.95070000E+0,0.00000000E+0 - ,0.40236620E+3,0.114E+3,0.460E+2,0.95070000E+0,0.00000000E+0 - ,0.33466730E+3,0.114E+3,0.470E+2,0.95070000E+0,0.00000000E+0 - ,0.35359760E+3,0.114E+3,0.480E+2,0.95070000E+0,0.00000000E+0 - ,0.44659370E+3,0.114E+3,0.490E+2,0.95070000E+0,0.00000000E+0 - ,0.41089600E+3,0.114E+3,0.500E+2,0.95070000E+0,0.00000000E+0 - ,0.36378460E+3,0.114E+3,0.510E+2,0.95070000E+0,0.00000000E+0 - ,0.33592400E+3,0.114E+3,0.520E+2,0.95070000E+0,0.00000000E+0 - ,0.30198520E+3,0.114E+3,0.530E+2,0.95070000E+0,0.00000000E+0 - ,0.26983720E+3,0.114E+3,0.540E+2,0.95070000E+0,0.00000000E+0 - ,0.12005803E+4,0.114E+3,0.550E+2,0.95070000E+0,0.00000000E+0 - ,0.10973980E+4,0.114E+3,0.560E+2,0.95070000E+0,0.00000000E+0 - ,0.96023320E+3,0.114E+3,0.570E+2,0.95070000E+0,0.00000000E+0 - ,0.42980740E+3,0.114E+3,0.580E+2,0.95070000E+0,0.27991000E+1 - ,0.97039570E+3,0.114E+3,0.590E+2,0.95070000E+0,0.00000000E+0 - ,0.93129170E+3,0.114E+3,0.600E+2,0.95070000E+0,0.00000000E+0 - ,0.90779700E+3,0.114E+3,0.610E+2,0.95070000E+0,0.00000000E+0 - ,0.88621930E+3,0.114E+3,0.620E+2,0.95070000E+0,0.00000000E+0 - ,0.86708440E+3,0.114E+3,0.630E+2,0.95070000E+0,0.00000000E+0 - ,0.67748060E+3,0.114E+3,0.640E+2,0.95070000E+0,0.00000000E+0 - ,0.76730550E+3,0.114E+3,0.650E+2,0.95070000E+0,0.00000000E+0 - ,0.73939750E+3,0.114E+3,0.660E+2,0.95070000E+0,0.00000000E+0 - ,0.78137480E+3,0.114E+3,0.670E+2,0.95070000E+0,0.00000000E+0 - ,0.76476680E+3,0.114E+3,0.680E+2,0.95070000E+0,0.00000000E+0 - ,0.74974130E+3,0.114E+3,0.690E+2,0.95070000E+0,0.00000000E+0 - ,0.74120300E+3,0.114E+3,0.700E+2,0.95070000E+0,0.00000000E+0 - ,0.62181690E+3,0.114E+3,0.710E+2,0.95070000E+0,0.00000000E+0 - ,0.60906080E+3,0.114E+3,0.720E+2,0.95070000E+0,0.00000000E+0 - ,0.55365420E+3,0.114E+3,0.730E+2,0.95070000E+0,0.00000000E+0 - ,0.46519420E+3,0.114E+3,0.740E+2,0.95070000E+0,0.00000000E+0 - ,0.47279230E+3,0.114E+3,0.750E+2,0.95070000E+0,0.00000000E+0 - ,0.42679800E+3,0.114E+3,0.760E+2,0.95070000E+0,0.00000000E+0 - ,0.38949880E+3,0.114E+3,0.770E+2,0.95070000E+0,0.00000000E+0 - ,0.32171830E+3,0.114E+3,0.780E+2,0.95070000E+0,0.00000000E+0 - ,0.29988580E+3,0.114E+3,0.790E+2,0.95070000E+0,0.00000000E+0 - ,0.30842630E+3,0.114E+3,0.800E+2,0.95070000E+0,0.00000000E+0 - ,0.45658720E+3,0.114E+3,0.810E+2,0.95070000E+0,0.00000000E+0 - ,0.44500360E+3,0.114E+3,0.820E+2,0.95070000E+0,0.00000000E+0 - ,0.40670170E+3,0.114E+3,0.830E+2,0.95070000E+0,0.00000000E+0 - ,0.38646750E+3,0.114E+3,0.840E+2,0.95070000E+0,0.00000000E+0 - ,0.35486660E+3,0.114E+3,0.850E+2,0.95070000E+0,0.00000000E+0 - ,0.32354110E+3,0.114E+3,0.860E+2,0.95070000E+0,0.00000000E+0 - ,0.11298915E+4,0.114E+3,0.870E+2,0.95070000E+0,0.00000000E+0 - ,0.10825018E+4,0.114E+3,0.880E+2,0.95070000E+0,0.00000000E+0 - ,0.95314260E+3,0.114E+3,0.890E+2,0.95070000E+0,0.00000000E+0 - ,0.85147580E+3,0.114E+3,0.900E+2,0.95070000E+0,0.00000000E+0 - ,0.84679590E+3,0.114E+3,0.910E+2,0.95070000E+0,0.00000000E+0 - ,0.81968560E+3,0.114E+3,0.920E+2,0.95070000E+0,0.00000000E+0 - ,0.84655430E+3,0.114E+3,0.930E+2,0.95070000E+0,0.00000000E+0 - ,0.81936980E+3,0.114E+3,0.940E+2,0.95070000E+0,0.00000000E+0 - ,0.44903000E+2,0.114E+3,0.101E+3,0.95070000E+0,0.00000000E+0 - ,0.14874780E+3,0.114E+3,0.103E+3,0.95070000E+0,0.98650000E+0 - ,0.18910900E+3,0.114E+3,0.104E+3,0.95070000E+0,0.98080000E+0 - ,0.14251230E+3,0.114E+3,0.105E+3,0.95070000E+0,0.97060000E+0 - ,0.10608060E+3,0.114E+3,0.106E+3,0.95070000E+0,0.98680000E+0 - ,0.72637300E+2,0.114E+3,0.107E+3,0.95070000E+0,0.99440000E+0 - ,0.52131100E+2,0.114E+3,0.108E+3,0.95070000E+0,0.99250000E+0 - ,0.35129000E+2,0.114E+3,0.109E+3,0.95070000E+0,0.99820000E+0 - ,0.21750490E+3,0.114E+3,0.111E+3,0.95070000E+0,0.96840000E+0 - ,0.33702500E+3,0.114E+3,0.112E+3,0.95070000E+0,0.96280000E+0 - ,0.33965160E+3,0.114E+3,0.113E+3,0.95070000E+0,0.96480000E+0 - ,0.27026500E+3,0.114E+3,0.114E+3,0.95070000E+0,0.95070000E+0 - ,0.23090800E+2,0.115E+3,0.100E+1,0.99470000E+0,0.91180000E+0 - ,0.15261900E+2,0.115E+3,0.200E+1,0.99470000E+0,0.00000000E+0 - ,0.33966930E+3,0.115E+3,0.300E+1,0.99470000E+0,0.00000000E+0 - ,0.20222820E+3,0.115E+3,0.400E+1,0.99470000E+0,0.00000000E+0 - ,0.13807740E+3,0.115E+3,0.500E+1,0.99470000E+0,0.00000000E+0 - ,0.93966300E+2,0.115E+3,0.600E+1,0.99470000E+0,0.00000000E+0 - ,0.65912700E+2,0.115E+3,0.700E+1,0.99470000E+0,0.00000000E+0 - ,0.49937400E+2,0.115E+3,0.800E+1,0.99470000E+0,0.00000000E+0 - ,0.37803500E+2,0.115E+3,0.900E+1,0.99470000E+0,0.00000000E+0 - ,0.29028000E+2,0.115E+3,0.100E+2,0.99470000E+0,0.00000000E+0 - ,0.40671500E+3,0.115E+3,0.110E+2,0.99470000E+0,0.00000000E+0 - ,0.32041760E+3,0.115E+3,0.120E+2,0.99470000E+0,0.00000000E+0 - ,0.29780760E+3,0.115E+3,0.130E+2,0.99470000E+0,0.00000000E+0 - ,0.23698640E+3,0.115E+3,0.140E+2,0.99470000E+0,0.00000000E+0 - ,0.18606840E+3,0.115E+3,0.150E+2,0.99470000E+0,0.00000000E+0 - ,0.15492290E+3,0.115E+3,0.160E+2,0.99470000E+0,0.00000000E+0 - ,0.12683120E+3,0.115E+3,0.170E+2,0.99470000E+0,0.00000000E+0 - ,0.10386530E+3,0.115E+3,0.180E+2,0.99470000E+0,0.00000000E+0 - ,0.66311840E+3,0.115E+3,0.190E+2,0.99470000E+0,0.00000000E+0 - ,0.55742550E+3,0.115E+3,0.200E+2,0.99470000E+0,0.00000000E+0 - ,0.46235110E+3,0.115E+3,0.210E+2,0.99470000E+0,0.00000000E+0 - ,0.44795900E+3,0.115E+3,0.220E+2,0.99470000E+0,0.00000000E+0 - ,0.41101210E+3,0.115E+3,0.230E+2,0.99470000E+0,0.00000000E+0 - ,0.32359140E+3,0.115E+3,0.240E+2,0.99470000E+0,0.00000000E+0 - ,0.35484320E+3,0.115E+3,0.250E+2,0.99470000E+0,0.00000000E+0 - ,0.27840200E+3,0.115E+3,0.260E+2,0.99470000E+0,0.00000000E+0 - ,0.29657890E+3,0.115E+3,0.270E+2,0.99470000E+0,0.00000000E+0 - ,0.30491450E+3,0.115E+3,0.280E+2,0.99470000E+0,0.00000000E+0 - ,0.23348980E+3,0.115E+3,0.290E+2,0.99470000E+0,0.00000000E+0 - ,0.24143800E+3,0.115E+3,0.300E+2,0.99470000E+0,0.00000000E+0 - ,0.28580720E+3,0.115E+3,0.310E+2,0.99470000E+0,0.00000000E+0 - ,0.25397440E+3,0.115E+3,0.320E+2,0.99470000E+0,0.00000000E+0 - ,0.21789200E+3,0.115E+3,0.330E+2,0.99470000E+0,0.00000000E+0 - ,0.19608060E+3,0.115E+3,0.340E+2,0.99470000E+0,0.00000000E+0 - ,0.17199100E+3,0.115E+3,0.350E+2,0.99470000E+0,0.00000000E+0 - ,0.14979330E+3,0.115E+3,0.360E+2,0.99470000E+0,0.00000000E+0 - ,0.74424750E+3,0.115E+3,0.370E+2,0.99470000E+0,0.00000000E+0 - ,0.66356560E+3,0.115E+3,0.380E+2,0.99470000E+0,0.00000000E+0 - ,0.58524670E+3,0.115E+3,0.390E+2,0.99470000E+0,0.00000000E+0 - ,0.52808410E+3,0.115E+3,0.400E+2,0.99470000E+0,0.00000000E+0 - ,0.48270360E+3,0.115E+3,0.410E+2,0.99470000E+0,0.00000000E+0 - ,0.37394270E+3,0.115E+3,0.420E+2,0.99470000E+0,0.00000000E+0 - ,0.41670800E+3,0.115E+3,0.430E+2,0.99470000E+0,0.00000000E+0 - ,0.31859120E+3,0.115E+3,0.440E+2,0.99470000E+0,0.00000000E+0 - ,0.34844490E+3,0.115E+3,0.450E+2,0.99470000E+0,0.00000000E+0 - ,0.32352760E+3,0.115E+3,0.460E+2,0.99470000E+0,0.00000000E+0 - ,0.26912200E+3,0.115E+3,0.470E+2,0.99470000E+0,0.00000000E+0 - ,0.28548020E+3,0.115E+3,0.480E+2,0.99470000E+0,0.00000000E+0 - ,0.35690690E+3,0.115E+3,0.490E+2,0.99470000E+0,0.00000000E+0 - ,0.33217220E+3,0.115E+3,0.500E+2,0.99470000E+0,0.00000000E+0 - ,0.29765980E+3,0.115E+3,0.510E+2,0.99470000E+0,0.00000000E+0 - ,0.27698090E+3,0.115E+3,0.520E+2,0.99470000E+0,0.00000000E+0 - ,0.25110810E+3,0.115E+3,0.530E+2,0.99470000E+0,0.00000000E+0 - ,0.22622110E+3,0.115E+3,0.540E+2,0.99470000E+0,0.00000000E+0 - ,0.90729930E+3,0.115E+3,0.550E+2,0.99470000E+0,0.00000000E+0 - ,0.84401200E+3,0.115E+3,0.560E+2,0.99470000E+0,0.00000000E+0 - ,0.74659930E+3,0.115E+3,0.570E+2,0.99470000E+0,0.00000000E+0 - ,0.35115850E+3,0.115E+3,0.580E+2,0.99470000E+0,0.27991000E+1 - ,0.74914380E+3,0.115E+3,0.590E+2,0.99470000E+0,0.00000000E+0 - ,0.72014500E+3,0.115E+3,0.600E+2,0.99470000E+0,0.00000000E+0 - ,0.70229590E+3,0.115E+3,0.610E+2,0.99470000E+0,0.00000000E+0 - ,0.68586200E+3,0.115E+3,0.620E+2,0.99470000E+0,0.00000000E+0 - ,0.67130090E+3,0.115E+3,0.630E+2,0.99470000E+0,0.00000000E+0 - ,0.53154240E+3,0.115E+3,0.640E+2,0.99470000E+0,0.00000000E+0 - ,0.59201350E+3,0.115E+3,0.650E+2,0.99470000E+0,0.00000000E+0 - ,0.57174810E+3,0.115E+3,0.660E+2,0.99470000E+0,0.00000000E+0 - ,0.60649400E+3,0.115E+3,0.670E+2,0.99470000E+0,0.00000000E+0 - ,0.59374030E+3,0.115E+3,0.680E+2,0.99470000E+0,0.00000000E+0 - ,0.58229560E+3,0.115E+3,0.690E+2,0.99470000E+0,0.00000000E+0 - ,0.57532620E+3,0.115E+3,0.700E+2,0.99470000E+0,0.00000000E+0 - ,0.48706190E+3,0.115E+3,0.710E+2,0.99470000E+0,0.00000000E+0 - ,0.48246160E+3,0.115E+3,0.720E+2,0.99470000E+0,0.00000000E+0 - ,0.44186160E+3,0.115E+3,0.730E+2,0.99470000E+0,0.00000000E+0 - ,0.37386540E+3,0.115E+3,0.740E+2,0.99470000E+0,0.00000000E+0 - ,0.38091200E+3,0.115E+3,0.750E+2,0.99470000E+0,0.00000000E+0 - ,0.34613260E+3,0.115E+3,0.760E+2,0.99470000E+0,0.00000000E+0 - ,0.31760850E+3,0.115E+3,0.770E+2,0.99470000E+0,0.00000000E+0 - ,0.26410910E+3,0.115E+3,0.780E+2,0.99470000E+0,0.00000000E+0 - ,0.24683080E+3,0.115E+3,0.790E+2,0.99470000E+0,0.00000000E+0 - ,0.25431280E+3,0.115E+3,0.800E+2,0.99470000E+0,0.00000000E+0 - ,0.36658420E+3,0.115E+3,0.810E+2,0.99470000E+0,0.00000000E+0 - ,0.36026310E+3,0.115E+3,0.820E+2,0.99470000E+0,0.00000000E+0 - ,0.33271860E+3,0.115E+3,0.830E+2,0.99470000E+0,0.00000000E+0 - ,0.31818410E+3,0.115E+3,0.840E+2,0.99470000E+0,0.00000000E+0 - ,0.29447100E+3,0.115E+3,0.850E+2,0.99470000E+0,0.00000000E+0 - ,0.27046770E+3,0.115E+3,0.860E+2,0.99470000E+0,0.00000000E+0 - ,0.86138240E+3,0.115E+3,0.870E+2,0.99470000E+0,0.00000000E+0 - ,0.83751280E+3,0.115E+3,0.880E+2,0.99470000E+0,0.00000000E+0 - ,0.74476320E+3,0.115E+3,0.890E+2,0.99470000E+0,0.00000000E+0 - ,0.67356880E+3,0.115E+3,0.900E+2,0.99470000E+0,0.00000000E+0 - ,0.66625820E+3,0.115E+3,0.910E+2,0.99470000E+0,0.00000000E+0 - ,0.64514050E+3,0.115E+3,0.920E+2,0.99470000E+0,0.00000000E+0 - ,0.66128050E+3,0.115E+3,0.930E+2,0.99470000E+0,0.00000000E+0 - ,0.64087610E+3,0.115E+3,0.940E+2,0.99470000E+0,0.00000000E+0 - ,0.37023600E+2,0.115E+3,0.101E+3,0.99470000E+0,0.00000000E+0 - ,0.11774720E+3,0.115E+3,0.103E+3,0.99470000E+0,0.98650000E+0 - ,0.15060680E+3,0.115E+3,0.104E+3,0.99470000E+0,0.98080000E+0 - ,0.11638180E+3,0.115E+3,0.105E+3,0.99470000E+0,0.97060000E+0 - ,0.88076900E+2,0.115E+3,0.106E+3,0.99470000E+0,0.98680000E+0 - ,0.61428600E+2,0.115E+3,0.107E+3,0.99470000E+0,0.99440000E+0 - ,0.44777000E+2,0.115E+3,0.108E+3,0.99470000E+0,0.99250000E+0 - ,0.30768800E+2,0.115E+3,0.109E+3,0.99470000E+0,0.99820000E+0 - ,0.17144690E+3,0.115E+3,0.111E+3,0.99470000E+0,0.96840000E+0 - ,0.26503780E+3,0.115E+3,0.112E+3,0.99470000E+0,0.96280000E+0 - ,0.27035800E+3,0.115E+3,0.113E+3,0.99470000E+0,0.96480000E+0 - ,0.21928630E+3,0.115E+3,0.114E+3,0.99470000E+0,0.95070000E+0 - ,0.18062380E+3,0.115E+3,0.115E+3,0.99470000E+0,0.99470000E+0 - ,0.19866700E+2,0.116E+3,0.100E+1,0.99480000E+0,0.91180000E+0 - ,0.13459800E+2,0.116E+3,0.200E+1,0.99480000E+0,0.00000000E+0 - ,0.27130110E+3,0.116E+3,0.300E+1,0.99480000E+0,0.00000000E+0 - ,0.16618070E+3,0.116E+3,0.400E+1,0.99480000E+0,0.00000000E+0 - ,0.11581680E+3,0.116E+3,0.500E+1,0.99480000E+0,0.00000000E+0 - ,0.80180400E+2,0.116E+3,0.600E+1,0.99480000E+0,0.00000000E+0 - ,0.57025500E+2,0.116E+3,0.700E+1,0.99480000E+0,0.00000000E+0 - ,0.43654800E+2,0.116E+3,0.800E+1,0.99480000E+0,0.00000000E+0 - ,0.33355000E+2,0.116E+3,0.900E+1,0.99480000E+0,0.00000000E+0 - ,0.25810700E+2,0.116E+3,0.100E+2,0.99480000E+0,0.00000000E+0 - ,0.32559690E+3,0.116E+3,0.110E+2,0.99480000E+0,0.00000000E+0 - ,0.26194370E+3,0.116E+3,0.120E+2,0.99480000E+0,0.00000000E+0 - ,0.24585680E+3,0.116E+3,0.130E+2,0.99480000E+0,0.00000000E+0 - ,0.19832660E+3,0.116E+3,0.140E+2,0.99480000E+0,0.00000000E+0 - ,0.15769710E+3,0.116E+3,0.150E+2,0.99480000E+0,0.00000000E+0 - ,0.13249220E+3,0.116E+3,0.160E+2,0.99480000E+0,0.00000000E+0 - ,0.10944860E+3,0.116E+3,0.170E+2,0.99480000E+0,0.00000000E+0 - ,0.90371600E+2,0.116E+3,0.180E+2,0.99480000E+0,0.00000000E+0 - ,0.53051920E+3,0.116E+3,0.190E+2,0.99480000E+0,0.00000000E+0 - ,0.45237450E+3,0.116E+3,0.200E+2,0.99480000E+0,0.00000000E+0 - ,0.37661420E+3,0.116E+3,0.210E+2,0.99480000E+0,0.00000000E+0 - ,0.36651510E+3,0.116E+3,0.220E+2,0.99480000E+0,0.00000000E+0 - ,0.33712500E+3,0.116E+3,0.230E+2,0.99480000E+0,0.00000000E+0 - ,0.26607620E+3,0.116E+3,0.240E+2,0.99480000E+0,0.00000000E+0 - ,0.29212570E+3,0.116E+3,0.250E+2,0.99480000E+0,0.00000000E+0 - ,0.22987760E+3,0.116E+3,0.260E+2,0.99480000E+0,0.00000000E+0 - ,0.24559880E+3,0.116E+3,0.270E+2,0.99480000E+0,0.00000000E+0 - ,0.25180970E+3,0.116E+3,0.280E+2,0.99480000E+0,0.00000000E+0 - ,0.19338650E+3,0.116E+3,0.290E+2,0.99480000E+0,0.00000000E+0 - ,0.20107040E+3,0.116E+3,0.300E+2,0.99480000E+0,0.00000000E+0 - ,0.23725630E+3,0.116E+3,0.310E+2,0.99480000E+0,0.00000000E+0 - ,0.21294370E+3,0.116E+3,0.320E+2,0.99480000E+0,0.00000000E+0 - ,0.18454670E+3,0.116E+3,0.330E+2,0.99480000E+0,0.00000000E+0 - ,0.16722640E+3,0.116E+3,0.340E+2,0.99480000E+0,0.00000000E+0 - ,0.14776790E+3,0.116E+3,0.350E+2,0.99480000E+0,0.00000000E+0 - ,0.12961230E+3,0.116E+3,0.360E+2,0.99480000E+0,0.00000000E+0 - ,0.59687630E+3,0.116E+3,0.370E+2,0.99480000E+0,0.00000000E+0 - ,0.53867240E+3,0.116E+3,0.380E+2,0.99480000E+0,0.00000000E+0 - ,0.47852040E+3,0.116E+3,0.390E+2,0.99480000E+0,0.00000000E+0 - ,0.43390360E+3,0.116E+3,0.400E+2,0.99480000E+0,0.00000000E+0 - ,0.39804190E+3,0.116E+3,0.410E+2,0.99480000E+0,0.00000000E+0 - ,0.31058610E+3,0.116E+3,0.420E+2,0.99480000E+0,0.00000000E+0 - ,0.34514340E+3,0.116E+3,0.430E+2,0.99480000E+0,0.00000000E+0 - ,0.26595280E+3,0.116E+3,0.440E+2,0.99480000E+0,0.00000000E+0 - ,0.29041460E+3,0.116E+3,0.450E+2,0.99480000E+0,0.00000000E+0 - ,0.27025240E+3,0.116E+3,0.460E+2,0.99480000E+0,0.00000000E+0 - ,0.22511810E+3,0.116E+3,0.470E+2,0.99480000E+0,0.00000000E+0 - ,0.23917840E+3,0.116E+3,0.480E+2,0.99480000E+0,0.00000000E+0 - ,0.29682140E+3,0.116E+3,0.490E+2,0.99480000E+0,0.00000000E+0 - ,0.27827870E+3,0.116E+3,0.500E+2,0.99480000E+0,0.00000000E+0 - ,0.25143440E+3,0.116E+3,0.510E+2,0.99480000E+0,0.00000000E+0 - ,0.23525190E+3,0.116E+3,0.520E+2,0.99480000E+0,0.00000000E+0 - ,0.21460020E+3,0.116E+3,0.530E+2,0.99480000E+0,0.00000000E+0 - ,0.19452370E+3,0.116E+3,0.540E+2,0.99480000E+0,0.00000000E+0 - ,0.72846530E+3,0.116E+3,0.550E+2,0.99480000E+0,0.00000000E+0 - ,0.68423530E+3,0.116E+3,0.560E+2,0.99480000E+0,0.00000000E+0 - ,0.60944200E+3,0.116E+3,0.570E+2,0.99480000E+0,0.00000000E+0 - ,0.29645810E+3,0.116E+3,0.580E+2,0.99480000E+0,0.27991000E+1 - ,0.60891190E+3,0.116E+3,0.590E+2,0.99480000E+0,0.00000000E+0 - ,0.58591340E+3,0.116E+3,0.600E+2,0.99480000E+0,0.00000000E+0 - ,0.57153970E+3,0.116E+3,0.610E+2,0.99480000E+0,0.00000000E+0 - ,0.55828160E+3,0.116E+3,0.620E+2,0.99480000E+0,0.00000000E+0 - ,0.54653950E+3,0.116E+3,0.630E+2,0.99480000E+0,0.00000000E+0 - ,0.43677850E+3,0.116E+3,0.640E+2,0.99480000E+0,0.00000000E+0 - ,0.48158940E+3,0.116E+3,0.650E+2,0.99480000E+0,0.00000000E+0 - ,0.46577580E+3,0.116E+3,0.660E+2,0.99480000E+0,0.00000000E+0 - ,0.49452850E+3,0.116E+3,0.670E+2,0.99480000E+0,0.00000000E+0 - ,0.48417910E+3,0.116E+3,0.680E+2,0.99480000E+0,0.00000000E+0 - ,0.47494430E+3,0.116E+3,0.690E+2,0.99480000E+0,0.00000000E+0 - ,0.46905670E+3,0.116E+3,0.700E+2,0.99480000E+0,0.00000000E+0 - ,0.39959520E+3,0.116E+3,0.710E+2,0.99480000E+0,0.00000000E+0 - ,0.39859150E+3,0.116E+3,0.720E+2,0.99480000E+0,0.00000000E+0 - ,0.36694770E+3,0.116E+3,0.730E+2,0.99480000E+0,0.00000000E+0 - ,0.31220810E+3,0.116E+3,0.740E+2,0.99480000E+0,0.00000000E+0 - ,0.31855560E+3,0.116E+3,0.750E+2,0.99480000E+0,0.00000000E+0 - ,0.29082630E+3,0.116E+3,0.760E+2,0.99480000E+0,0.00000000E+0 - ,0.26791140E+3,0.116E+3,0.770E+2,0.99480000E+0,0.00000000E+0 - ,0.22401000E+3,0.116E+3,0.780E+2,0.99480000E+0,0.00000000E+0 - ,0.20979980E+3,0.116E+3,0.790E+2,0.99480000E+0,0.00000000E+0 - ,0.21632530E+3,0.116E+3,0.800E+2,0.99480000E+0,0.00000000E+0 - ,0.30615090E+3,0.116E+3,0.810E+2,0.99480000E+0,0.00000000E+0 - ,0.30235050E+3,0.116E+3,0.820E+2,0.99480000E+0,0.00000000E+0 - ,0.28117730E+3,0.116E+3,0.830E+2,0.99480000E+0,0.00000000E+0 - ,0.27007790E+3,0.116E+3,0.840E+2,0.99480000E+0,0.00000000E+0 - ,0.25135500E+3,0.116E+3,0.850E+2,0.99480000E+0,0.00000000E+0 - ,0.23212580E+3,0.116E+3,0.860E+2,0.99480000E+0,0.00000000E+0 - ,0.69553530E+3,0.116E+3,0.870E+2,0.99480000E+0,0.00000000E+0 - ,0.68165580E+3,0.116E+3,0.880E+2,0.99480000E+0,0.00000000E+0 - ,0.60993410E+3,0.116E+3,0.890E+2,0.99480000E+0,0.00000000E+0 - ,0.55624920E+3,0.116E+3,0.900E+2,0.99480000E+0,0.00000000E+0 - ,0.54849710E+3,0.116E+3,0.910E+2,0.99480000E+0,0.00000000E+0 - ,0.53125540E+3,0.116E+3,0.920E+2,0.99480000E+0,0.00000000E+0 - ,0.54187030E+3,0.116E+3,0.930E+2,0.99480000E+0,0.00000000E+0 - ,0.52557770E+3,0.116E+3,0.940E+2,0.99480000E+0,0.00000000E+0 - ,0.31412700E+2,0.116E+3,0.101E+3,0.99480000E+0,0.00000000E+0 - ,0.97084900E+2,0.116E+3,0.103E+3,0.99480000E+0,0.98650000E+0 - ,0.12475120E+3,0.116E+3,0.104E+3,0.99480000E+0,0.98080000E+0 - ,0.98113900E+2,0.116E+3,0.105E+3,0.99480000E+0,0.97060000E+0 - ,0.75203900E+2,0.116E+3,0.106E+3,0.99480000E+0,0.98680000E+0 - ,0.53208600E+2,0.116E+3,0.107E+3,0.99480000E+0,0.99440000E+0 - ,0.39268300E+2,0.116E+3,0.108E+3,0.99480000E+0,0.99250000E+0 - ,0.27411700E+2,0.116E+3,0.109E+3,0.99480000E+0,0.99820000E+0 - ,0.14105990E+3,0.116E+3,0.111E+3,0.99480000E+0,0.96840000E+0 - ,0.21766290E+3,0.116E+3,0.112E+3,0.99480000E+0,0.96280000E+0 - ,0.22379420E+3,0.116E+3,0.113E+3,0.99480000E+0,0.96480000E+0 - ,0.18394830E+3,0.116E+3,0.114E+3,0.99480000E+0,0.95070000E+0 - ,0.15318230E+3,0.116E+3,0.115E+3,0.99480000E+0,0.99470000E+0 - ,0.13099650E+3,0.116E+3,0.116E+3,0.99480000E+0,0.99480000E+0 - ,0.16527300E+2,0.117E+3,0.100E+1,0.99720000E+0,0.91180000E+0 - ,0.11509200E+2,0.117E+3,0.200E+1,0.99720000E+0,0.00000000E+0 - ,0.20877430E+3,0.117E+3,0.300E+1,0.99720000E+0,0.00000000E+0 - ,0.13164980E+3,0.117E+3,0.400E+1,0.99720000E+0,0.00000000E+0 - ,0.93774300E+2,0.117E+3,0.500E+1,0.99720000E+0,0.00000000E+0 - ,0.66135400E+2,0.117E+3,0.600E+1,0.99720000E+0,0.00000000E+0 - ,0.47754000E+2,0.117E+3,0.700E+1,0.99720000E+0,0.00000000E+0 - ,0.36978300E+2,0.117E+3,0.800E+1,0.99720000E+0,0.00000000E+0 - ,0.28546800E+2,0.117E+3,0.900E+1,0.99720000E+0,0.00000000E+0 - ,0.22283200E+2,0.117E+3,0.100E+2,0.99720000E+0,0.00000000E+0 - ,0.25123260E+3,0.117E+3,0.110E+2,0.99720000E+0,0.00000000E+0 - ,0.20645210E+3,0.117E+3,0.120E+2,0.99720000E+0,0.00000000E+0 - ,0.19576470E+3,0.117E+3,0.130E+2,0.99720000E+0,0.00000000E+0 - ,0.16018790E+3,0.117E+3,0.140E+2,0.99720000E+0,0.00000000E+0 - ,0.12909560E+3,0.117E+3,0.150E+2,0.99720000E+0,0.00000000E+0 - ,0.10952700E+3,0.117E+3,0.160E+2,0.99720000E+0,0.00000000E+0 - ,0.91366700E+2,0.117E+3,0.170E+2,0.99720000E+0,0.00000000E+0 - ,0.76125600E+2,0.117E+3,0.180E+2,0.99720000E+0,0.00000000E+0 - ,0.40951050E+3,0.117E+3,0.190E+2,0.99720000E+0,0.00000000E+0 - ,0.35409350E+3,0.117E+3,0.200E+2,0.99720000E+0,0.00000000E+0 - ,0.29590280E+3,0.117E+3,0.210E+2,0.99720000E+0,0.00000000E+0 - ,0.28935120E+3,0.117E+3,0.220E+2,0.99720000E+0,0.00000000E+0 - ,0.26685570E+3,0.117E+3,0.230E+2,0.99720000E+0,0.00000000E+0 - ,0.21129280E+3,0.117E+3,0.240E+2,0.99720000E+0,0.00000000E+0 - ,0.23214470E+3,0.117E+3,0.250E+2,0.99720000E+0,0.00000000E+0 - ,0.18336610E+3,0.117E+3,0.260E+2,0.99720000E+0,0.00000000E+0 - ,0.19637550E+3,0.117E+3,0.270E+2,0.99720000E+0,0.00000000E+0 - ,0.20075710E+3,0.117E+3,0.280E+2,0.99720000E+0,0.00000000E+0 - ,0.15477560E+3,0.117E+3,0.290E+2,0.99720000E+0,0.00000000E+0 - ,0.16173370E+3,0.117E+3,0.300E+2,0.99720000E+0,0.00000000E+0 - ,0.19011390E+3,0.117E+3,0.310E+2,0.99720000E+0,0.00000000E+0 - ,0.17239330E+3,0.117E+3,0.320E+2,0.99720000E+0,0.00000000E+0 - ,0.15099990E+3,0.117E+3,0.330E+2,0.99720000E+0,0.00000000E+0 - ,0.13784430E+3,0.117E+3,0.340E+2,0.99720000E+0,0.00000000E+0 - ,0.12277630E+3,0.117E+3,0.350E+2,0.99720000E+0,0.00000000E+0 - ,0.10852260E+3,0.117E+3,0.360E+2,0.99720000E+0,0.00000000E+0 - ,0.46202520E+3,0.117E+3,0.370E+2,0.99720000E+0,0.00000000E+0 - ,0.42188670E+3,0.117E+3,0.380E+2,0.99720000E+0,0.00000000E+0 - ,0.37756420E+3,0.117E+3,0.390E+2,0.99720000E+0,0.00000000E+0 - ,0.34413180E+3,0.117E+3,0.400E+2,0.99720000E+0,0.00000000E+0 - ,0.31691100E+3,0.117E+3,0.410E+2,0.99720000E+0,0.00000000E+0 - ,0.24926710E+3,0.117E+3,0.420E+2,0.99720000E+0,0.00000000E+0 - ,0.27614550E+3,0.117E+3,0.430E+2,0.99720000E+0,0.00000000E+0 - ,0.21463800E+3,0.117E+3,0.440E+2,0.99720000E+0,0.00000000E+0 - ,0.23390310E+3,0.117E+3,0.450E+2,0.99720000E+0,0.00000000E+0 - ,0.21819030E+3,0.117E+3,0.460E+2,0.99720000E+0,0.00000000E+0 - ,0.18215470E+3,0.117E+3,0.470E+2,0.99720000E+0,0.00000000E+0 - ,0.19372730E+3,0.117E+3,0.480E+2,0.99720000E+0,0.00000000E+0 - ,0.23849880E+3,0.117E+3,0.490E+2,0.99720000E+0,0.00000000E+0 - ,0.22523810E+3,0.117E+3,0.500E+2,0.99720000E+0,0.00000000E+0 - ,0.20525120E+3,0.117E+3,0.510E+2,0.99720000E+0,0.00000000E+0 - ,0.19314490E+3,0.117E+3,0.520E+2,0.99720000E+0,0.00000000E+0 - ,0.17734580E+3,0.117E+3,0.530E+2,0.99720000E+0,0.00000000E+0 - ,0.16181190E+3,0.117E+3,0.540E+2,0.99720000E+0,0.00000000E+0 - ,0.56460060E+3,0.117E+3,0.550E+2,0.99720000E+0,0.00000000E+0 - ,0.53526780E+3,0.117E+3,0.560E+2,0.99720000E+0,0.00000000E+0 - ,0.48012440E+3,0.117E+3,0.570E+2,0.99720000E+0,0.00000000E+0 - ,0.24192230E+3,0.117E+3,0.580E+2,0.99720000E+0,0.27991000E+1 - ,0.47771970E+3,0.117E+3,0.590E+2,0.99720000E+0,0.00000000E+0 - ,0.46012500E+3,0.117E+3,0.600E+2,0.99720000E+0,0.00000000E+0 - ,0.44895170E+3,0.117E+3,0.610E+2,0.99720000E+0,0.00000000E+0 - ,0.43862430E+3,0.117E+3,0.620E+2,0.99720000E+0,0.00000000E+0 - ,0.42948100E+3,0.117E+3,0.630E+2,0.99720000E+0,0.00000000E+0 - ,0.34664610E+3,0.117E+3,0.640E+2,0.99720000E+0,0.00000000E+0 - ,0.37839840E+3,0.117E+3,0.650E+2,0.99720000E+0,0.00000000E+0 - ,0.36651660E+3,0.117E+3,0.660E+2,0.99720000E+0,0.00000000E+0 - ,0.38919850E+3,0.117E+3,0.670E+2,0.99720000E+0,0.00000000E+0 - ,0.38108470E+3,0.117E+3,0.680E+2,0.99720000E+0,0.00000000E+0 - ,0.37388780E+3,0.117E+3,0.690E+2,0.99720000E+0,0.00000000E+0 - ,0.36907690E+3,0.117E+3,0.700E+2,0.99720000E+0,0.00000000E+0 - ,0.31653270E+3,0.117E+3,0.710E+2,0.99720000E+0,0.00000000E+0 - ,0.31792390E+3,0.117E+3,0.720E+2,0.99720000E+0,0.00000000E+0 - ,0.29429820E+3,0.117E+3,0.730E+2,0.99720000E+0,0.00000000E+0 - ,0.25196160E+3,0.117E+3,0.740E+2,0.99720000E+0,0.00000000E+0 - ,0.25744470E+3,0.117E+3,0.750E+2,0.99720000E+0,0.00000000E+0 - ,0.23620650E+3,0.117E+3,0.760E+2,0.99720000E+0,0.00000000E+0 - ,0.21851340E+3,0.117E+3,0.770E+2,0.99720000E+0,0.00000000E+0 - ,0.18384350E+3,0.117E+3,0.780E+2,0.99720000E+0,0.00000000E+0 - ,0.17259550E+3,0.117E+3,0.790E+2,0.99720000E+0,0.00000000E+0 - ,0.17806050E+3,0.117E+3,0.800E+2,0.99720000E+0,0.00000000E+0 - ,0.24721900E+3,0.117E+3,0.810E+2,0.99720000E+0,0.00000000E+0 - ,0.24529500E+3,0.117E+3,0.820E+2,0.99720000E+0,0.00000000E+0 - ,0.22972670E+3,0.117E+3,0.830E+2,0.99720000E+0,0.00000000E+0 - ,0.22165670E+3,0.117E+3,0.840E+2,0.99720000E+0,0.00000000E+0 - ,0.20750080E+3,0.117E+3,0.850E+2,0.99720000E+0,0.00000000E+0 - ,0.19273160E+3,0.117E+3,0.860E+2,0.99720000E+0,0.00000000E+0 - ,0.54229530E+3,0.117E+3,0.870E+2,0.99720000E+0,0.00000000E+0 - ,0.53547060E+3,0.117E+3,0.880E+2,0.99720000E+0,0.00000000E+0 - ,0.48217720E+3,0.117E+3,0.890E+2,0.99720000E+0,0.00000000E+0 - ,0.44362620E+3,0.117E+3,0.900E+2,0.99720000E+0,0.00000000E+0 - ,0.43615260E+3,0.117E+3,0.910E+2,0.99720000E+0,0.00000000E+0 - ,0.42258040E+3,0.117E+3,0.920E+2,0.99720000E+0,0.00000000E+0 - ,0.42886190E+3,0.117E+3,0.930E+2,0.99720000E+0,0.00000000E+0 - ,0.41631150E+3,0.117E+3,0.940E+2,0.99720000E+0,0.00000000E+0 - ,0.25741400E+2,0.117E+3,0.101E+3,0.99720000E+0,0.00000000E+0 - ,0.77202300E+2,0.117E+3,0.103E+3,0.99720000E+0,0.98650000E+0 - ,0.99699500E+2,0.117E+3,0.104E+3,0.99720000E+0,0.98080000E+0 - ,0.79883300E+2,0.117E+3,0.105E+3,0.99720000E+0,0.97060000E+0 - ,0.62086400E+2,0.117E+3,0.106E+3,0.99720000E+0,0.98680000E+0 - ,0.44621700E+2,0.117E+3,0.107E+3,0.99720000E+0,0.99440000E+0 - ,0.33380100E+2,0.117E+3,0.108E+3,0.99720000E+0,0.99250000E+0 - ,0.23705900E+2,0.117E+3,0.109E+3,0.99720000E+0,0.99820000E+0 - ,0.11198290E+3,0.117E+3,0.111E+3,0.99720000E+0,0.96840000E+0 - ,0.17241480E+3,0.117E+3,0.112E+3,0.99720000E+0,0.96280000E+0 - ,0.17871270E+3,0.117E+3,0.113E+3,0.99720000E+0,0.96480000E+0 - ,0.14895590E+3,0.117E+3,0.114E+3,0.99720000E+0,0.95070000E+0 - ,0.12549300E+3,0.117E+3,0.115E+3,0.99720000E+0,0.99470000E+0 - ,0.10828930E+3,0.117E+3,0.116E+3,0.99720000E+0,0.99480000E+0 - ,0.90398500E+2,0.117E+3,0.117E+3,0.99720000E+0,0.99720000E+0 - ,0.29300000E+2,0.119E+3,0.100E+1,0.97670000E+0,0.91180000E+0 - ,0.18665500E+2,0.119E+3,0.200E+1,0.97670000E+0,0.00000000E+0 - ,0.56029540E+3,0.119E+3,0.300E+1,0.97670000E+0,0.00000000E+0 - ,0.29222240E+3,0.119E+3,0.400E+1,0.97670000E+0,0.00000000E+0 - ,0.18695660E+3,0.119E+3,0.500E+1,0.97670000E+0,0.00000000E+0 - ,0.12192920E+3,0.119E+3,0.600E+1,0.97670000E+0,0.00000000E+0 - ,0.83215300E+2,0.119E+3,0.700E+1,0.97670000E+0,0.00000000E+0 - ,0.61994800E+2,0.119E+3,0.800E+1,0.97670000E+0,0.00000000E+0 - ,0.46352000E+2,0.119E+3,0.900E+1,0.97670000E+0,0.00000000E+0 - ,0.35296900E+2,0.119E+3,0.100E+2,0.97670000E+0,0.00000000E+0 - ,0.66603570E+3,0.119E+3,0.110E+2,0.97670000E+0,0.00000000E+0 - ,0.47376610E+3,0.119E+3,0.120E+2,0.97670000E+0,0.00000000E+0 - ,0.42489260E+3,0.119E+3,0.130E+2,0.97670000E+0,0.00000000E+0 - ,0.32282330E+3,0.119E+3,0.140E+2,0.97670000E+0,0.00000000E+0 - ,0.24457290E+3,0.119E+3,0.150E+2,0.97670000E+0,0.00000000E+0 - ,0.19946720E+3,0.119E+3,0.160E+2,0.97670000E+0,0.00000000E+0 - ,0.16033040E+3,0.119E+3,0.170E+2,0.97670000E+0,0.00000000E+0 - ,0.12942830E+3,0.119E+3,0.180E+2,0.97670000E+0,0.00000000E+0 - ,0.11122277E+4,0.119E+3,0.190E+2,0.97670000E+0,0.00000000E+0 - ,0.86017710E+3,0.119E+3,0.200E+2,0.97670000E+0,0.00000000E+0 - ,0.70072810E+3,0.119E+3,0.210E+2,0.97670000E+0,0.00000000E+0 - ,0.66875460E+3,0.119E+3,0.220E+2,0.97670000E+0,0.00000000E+0 - ,0.60799510E+3,0.119E+3,0.230E+2,0.97670000E+0,0.00000000E+0 - ,0.47897440E+3,0.119E+3,0.240E+2,0.97670000E+0,0.00000000E+0 - ,0.51805830E+3,0.119E+3,0.250E+2,0.97670000E+0,0.00000000E+0 - ,0.40608760E+3,0.119E+3,0.260E+2,0.97670000E+0,0.00000000E+0 - ,0.42338090E+3,0.119E+3,0.270E+2,0.97670000E+0,0.00000000E+0 - ,0.43928450E+3,0.119E+3,0.280E+2,0.97670000E+0,0.00000000E+0 - ,0.33711170E+3,0.119E+3,0.290E+2,0.97670000E+0,0.00000000E+0 - ,0.33789860E+3,0.119E+3,0.300E+2,0.97670000E+0,0.00000000E+0 - ,0.40307450E+3,0.119E+3,0.310E+2,0.97670000E+0,0.00000000E+0 - ,0.34544340E+3,0.119E+3,0.320E+2,0.97670000E+0,0.00000000E+0 - ,0.28755350E+3,0.119E+3,0.330E+2,0.97670000E+0,0.00000000E+0 - ,0.25436700E+3,0.119E+3,0.340E+2,0.97670000E+0,0.00000000E+0 - ,0.21946470E+3,0.119E+3,0.350E+2,0.97670000E+0,0.00000000E+0 - ,0.18848190E+3,0.119E+3,0.360E+2,0.97670000E+0,0.00000000E+0 - ,0.12408631E+4,0.119E+3,0.370E+2,0.97670000E+0,0.00000000E+0 - ,0.10279671E+4,0.119E+3,0.380E+2,0.97670000E+0,0.00000000E+0 - ,0.87903460E+3,0.119E+3,0.390E+2,0.97670000E+0,0.00000000E+0 - ,0.77852380E+3,0.119E+3,0.400E+2,0.97670000E+0,0.00000000E+0 - ,0.70330600E+3,0.119E+3,0.410E+2,0.97670000E+0,0.00000000E+0 - ,0.53463030E+3,0.119E+3,0.420E+2,0.97670000E+0,0.00000000E+0 - ,0.59993020E+3,0.119E+3,0.430E+2,0.97670000E+0,0.00000000E+0 - ,0.44930300E+3,0.119E+3,0.440E+2,0.97670000E+0,0.00000000E+0 - ,0.49058070E+3,0.119E+3,0.450E+2,0.97670000E+0,0.00000000E+0 - ,0.45224640E+3,0.119E+3,0.460E+2,0.97670000E+0,0.00000000E+0 - ,0.37908360E+3,0.119E+3,0.470E+2,0.97670000E+0,0.00000000E+0 - ,0.39551350E+3,0.119E+3,0.480E+2,0.97670000E+0,0.00000000E+0 - ,0.50568380E+3,0.119E+3,0.490E+2,0.97670000E+0,0.00000000E+0 - ,0.45646130E+3,0.119E+3,0.500E+2,0.97670000E+0,0.00000000E+0 - ,0.39784160E+3,0.119E+3,0.510E+2,0.97670000E+0,0.00000000E+0 - ,0.36440900E+3,0.119E+3,0.520E+2,0.97670000E+0,0.00000000E+0 - ,0.32510680E+3,0.119E+3,0.530E+2,0.97670000E+0,0.00000000E+0 - ,0.28872750E+3,0.119E+3,0.540E+2,0.97670000E+0,0.00000000E+0 - ,0.15118898E+4,0.119E+3,0.550E+2,0.97670000E+0,0.00000000E+0 - ,0.13222619E+4,0.119E+3,0.560E+2,0.97670000E+0,0.00000000E+0 - ,0.11337749E+4,0.119E+3,0.570E+2,0.97670000E+0,0.00000000E+0 - ,0.47224550E+3,0.119E+3,0.580E+2,0.97670000E+0,0.27991000E+1 - ,0.11622835E+4,0.119E+3,0.590E+2,0.97670000E+0,0.00000000E+0 - ,0.11112638E+4,0.119E+3,0.600E+2,0.97670000E+0,0.00000000E+0 - ,0.10820865E+4,0.119E+3,0.610E+2,0.97670000E+0,0.00000000E+0 - ,0.10553891E+4,0.119E+3,0.620E+2,0.97670000E+0,0.00000000E+0 - ,0.10316716E+4,0.119E+3,0.630E+2,0.97670000E+0,0.00000000E+0 - ,0.79078540E+3,0.119E+3,0.640E+2,0.97670000E+0,0.00000000E+0 - ,0.92736720E+3,0.119E+3,0.650E+2,0.97670000E+0,0.00000000E+0 - ,0.89050560E+3,0.119E+3,0.660E+2,0.97670000E+0,0.00000000E+0 - ,0.92461970E+3,0.119E+3,0.670E+2,0.97670000E+0,0.00000000E+0 - ,0.90432570E+3,0.119E+3,0.680E+2,0.97670000E+0,0.00000000E+0 - ,0.88575380E+3,0.119E+3,0.690E+2,0.97670000E+0,0.00000000E+0 - ,0.87628990E+3,0.119E+3,0.700E+2,0.97670000E+0,0.00000000E+0 - ,0.72564410E+3,0.119E+3,0.710E+2,0.97670000E+0,0.00000000E+0 - ,0.69618310E+3,0.119E+3,0.720E+2,0.97670000E+0,0.00000000E+0 - ,0.62634420E+3,0.119E+3,0.730E+2,0.97670000E+0,0.00000000E+0 - ,0.52368920E+3,0.119E+3,0.740E+2,0.97670000E+0,0.00000000E+0 - ,0.52962490E+3,0.119E+3,0.750E+2,0.97670000E+0,0.00000000E+0 - ,0.47425390E+3,0.119E+3,0.760E+2,0.97670000E+0,0.00000000E+0 - ,0.43019640E+3,0.119E+3,0.770E+2,0.97670000E+0,0.00000000E+0 - ,0.35414110E+3,0.119E+3,0.780E+2,0.97670000E+0,0.00000000E+0 - ,0.32964710E+3,0.119E+3,0.790E+2,0.97670000E+0,0.00000000E+0 - ,0.33733350E+3,0.119E+3,0.800E+2,0.97670000E+0,0.00000000E+0 - ,0.51695330E+3,0.119E+3,0.810E+2,0.97670000E+0,0.00000000E+0 - ,0.49569810E+3,0.119E+3,0.820E+2,0.97670000E+0,0.00000000E+0 - ,0.44630330E+3,0.119E+3,0.830E+2,0.97670000E+0,0.00000000E+0 - ,0.42086840E+3,0.119E+3,0.840E+2,0.97670000E+0,0.00000000E+0 - ,0.38335330E+3,0.119E+3,0.850E+2,0.97670000E+0,0.00000000E+0 - ,0.34734370E+3,0.119E+3,0.860E+2,0.97670000E+0,0.00000000E+0 - ,0.14001686E+4,0.119E+3,0.870E+2,0.97670000E+0,0.00000000E+0 - ,0.12915073E+4,0.119E+3,0.880E+2,0.97670000E+0,0.00000000E+0 - ,0.11159288E+4,0.119E+3,0.890E+2,0.97670000E+0,0.00000000E+0 - ,0.97819280E+3,0.119E+3,0.900E+2,0.97670000E+0,0.00000000E+0 - ,0.98391310E+3,0.119E+3,0.910E+2,0.97670000E+0,0.00000000E+0 - ,0.95206270E+3,0.119E+3,0.920E+2,0.97670000E+0,0.00000000E+0 - ,0.99535270E+3,0.119E+3,0.930E+2,0.97670000E+0,0.00000000E+0 - ,0.96105430E+3,0.119E+3,0.940E+2,0.97670000E+0,0.00000000E+0 - ,0.48449900E+2,0.119E+3,0.101E+3,0.97670000E+0,0.00000000E+0 - ,0.16874120E+3,0.119E+3,0.103E+3,0.97670000E+0,0.98650000E+0 - ,0.21344440E+3,0.119E+3,0.104E+3,0.97670000E+0,0.98080000E+0 - ,0.15577810E+3,0.119E+3,0.105E+3,0.97670000E+0,0.97060000E+0 - ,0.11457230E+3,0.119E+3,0.106E+3,0.97670000E+0,0.98680000E+0 - ,0.77631700E+2,0.119E+3,0.107E+3,0.97670000E+0,0.99440000E+0 - ,0.55403200E+2,0.119E+3,0.108E+3,0.97670000E+0,0.99250000E+0 - ,0.37198200E+2,0.119E+3,0.109E+3,0.97670000E+0,0.99820000E+0 - ,0.24922000E+3,0.119E+3,0.111E+3,0.97670000E+0,0.96840000E+0 - ,0.38733490E+3,0.119E+3,0.112E+3,0.97670000E+0,0.96280000E+0 - ,0.38264220E+3,0.119E+3,0.113E+3,0.97670000E+0,0.96480000E+0 - ,0.29694090E+3,0.119E+3,0.114E+3,0.97670000E+0,0.95070000E+0 - ,0.23721910E+3,0.119E+3,0.115E+3,0.97670000E+0,0.99470000E+0 - ,0.19738060E+3,0.119E+3,0.116E+3,0.97670000E+0,0.99480000E+0 - ,0.15873300E+3,0.119E+3,0.117E+3,0.97670000E+0,0.99720000E+0 - ,0.33802070E+3,0.119E+3,0.119E+3,0.97670000E+0,0.97670000E+0 - ,0.52987100E+2,0.120E+3,0.100E+1,0.98310000E+0,0.91180000E+0 - ,0.31879600E+2,0.120E+3,0.200E+1,0.98310000E+0,0.00000000E+0 - ,0.13100314E+4,0.120E+3,0.300E+1,0.98310000E+0,0.00000000E+0 - ,0.60256610E+3,0.120E+3,0.400E+1,0.98310000E+0,0.00000000E+0 - ,0.36268620E+3,0.120E+3,0.500E+1,0.98310000E+0,0.00000000E+0 - ,0.22596290E+3,0.120E+3,0.600E+1,0.98310000E+0,0.00000000E+0 - ,0.14897930E+3,0.120E+3,0.700E+1,0.98310000E+0,0.00000000E+0 - ,0.10827180E+3,0.120E+3,0.800E+1,0.98310000E+0,0.00000000E+0 - ,0.79221800E+2,0.120E+3,0.900E+1,0.98310000E+0,0.00000000E+0 - ,0.59277900E+2,0.120E+3,0.100E+2,0.98310000E+0,0.00000000E+0 - ,0.15457064E+4,0.120E+3,0.110E+2,0.98310000E+0,0.00000000E+0 - ,0.99724860E+3,0.120E+3,0.120E+2,0.98310000E+0,0.00000000E+0 - ,0.86695170E+3,0.120E+3,0.130E+2,0.98310000E+0,0.00000000E+0 - ,0.63004560E+3,0.120E+3,0.140E+2,0.98310000E+0,0.00000000E+0 - ,0.46026350E+3,0.120E+3,0.150E+2,0.98310000E+0,0.00000000E+0 - ,0.36677110E+3,0.120E+3,0.160E+2,0.98310000E+0,0.00000000E+0 - ,0.28821820E+3,0.120E+3,0.170E+2,0.98310000E+0,0.00000000E+0 - ,0.22808920E+3,0.120E+3,0.180E+2,0.98310000E+0,0.00000000E+0 - ,0.26610830E+4,0.120E+3,0.190E+2,0.98310000E+0,0.00000000E+0 - ,0.18864221E+4,0.120E+3,0.200E+2,0.98310000E+0,0.00000000E+0 - ,0.15101427E+4,0.120E+3,0.210E+2,0.98310000E+0,0.00000000E+0 - ,0.14223244E+4,0.120E+3,0.220E+2,0.98310000E+0,0.00000000E+0 - ,0.12821610E+4,0.120E+3,0.230E+2,0.98310000E+0,0.00000000E+0 - ,0.10115955E+4,0.120E+3,0.240E+2,0.98310000E+0,0.00000000E+0 - ,0.10791532E+4,0.120E+3,0.250E+2,0.98310000E+0,0.00000000E+0 - ,0.84546860E+3,0.120E+3,0.260E+2,0.98310000E+0,0.00000000E+0 - ,0.86250360E+3,0.120E+3,0.270E+2,0.98310000E+0,0.00000000E+0 - ,0.90260140E+3,0.120E+3,0.280E+2,0.98310000E+0,0.00000000E+0 - ,0.69450580E+3,0.120E+3,0.290E+2,0.98310000E+0,0.00000000E+0 - ,0.67502990E+3,0.120E+3,0.300E+2,0.98310000E+0,0.00000000E+0 - ,0.81349430E+3,0.120E+3,0.310E+2,0.98310000E+0,0.00000000E+0 - ,0.67269170E+3,0.120E+3,0.320E+2,0.98310000E+0,0.00000000E+0 - ,0.54301230E+3,0.120E+3,0.330E+2,0.98310000E+0,0.00000000E+0 - ,0.47148220E+3,0.120E+3,0.340E+2,0.98310000E+0,0.00000000E+0 - ,0.39902260E+3,0.120E+3,0.350E+2,0.98310000E+0,0.00000000E+0 - ,0.33664830E+3,0.120E+3,0.360E+2,0.98310000E+0,0.00000000E+0 - ,0.29580410E+4,0.120E+3,0.370E+2,0.98310000E+0,0.00000000E+0 - ,0.22654155E+4,0.120E+3,0.380E+2,0.98310000E+0,0.00000000E+0 - ,0.18821338E+4,0.120E+3,0.390E+2,0.98310000E+0,0.00000000E+0 - ,0.16379667E+4,0.120E+3,0.400E+2,0.98310000E+0,0.00000000E+0 - ,0.14638890E+4,0.120E+3,0.410E+2,0.98310000E+0,0.00000000E+0 - ,0.10926733E+4,0.120E+3,0.420E+2,0.98310000E+0,0.00000000E+0 - ,0.12349316E+4,0.120E+3,0.430E+2,0.98310000E+0,0.00000000E+0 - ,0.90575150E+3,0.120E+3,0.440E+2,0.98310000E+0,0.00000000E+0 - ,0.98637270E+3,0.120E+3,0.450E+2,0.98310000E+0,0.00000000E+0 - ,0.90244050E+3,0.120E+3,0.460E+2,0.98310000E+0,0.00000000E+0 - ,0.76261740E+3,0.120E+3,0.470E+2,0.98310000E+0,0.00000000E+0 - ,0.78166000E+3,0.120E+3,0.480E+2,0.98310000E+0,0.00000000E+0 - ,0.10241614E+4,0.120E+3,0.490E+2,0.98310000E+0,0.00000000E+0 - ,0.89641550E+3,0.120E+3,0.500E+2,0.98310000E+0,0.00000000E+0 - ,0.75979880E+3,0.120E+3,0.510E+2,0.98310000E+0,0.00000000E+0 - ,0.68470730E+3,0.120E+3,0.520E+2,0.98310000E+0,0.00000000E+0 - ,0.60026980E+3,0.120E+3,0.530E+2,0.98310000E+0,0.00000000E+0 - ,0.52435470E+3,0.120E+3,0.540E+2,0.98310000E+0,0.00000000E+0 - ,0.36192660E+4,0.120E+3,0.550E+2,0.98310000E+0,0.00000000E+0 - ,0.29513362E+4,0.120E+3,0.560E+2,0.98310000E+0,0.00000000E+0 - ,0.24567601E+4,0.120E+3,0.570E+2,0.98310000E+0,0.00000000E+0 - ,0.90740120E+3,0.120E+3,0.580E+2,0.98310000E+0,0.27991000E+1 - ,0.25715319E+4,0.120E+3,0.590E+2,0.98310000E+0,0.00000000E+0 - ,0.24420495E+4,0.120E+3,0.600E+2,0.98310000E+0,0.00000000E+0 - ,0.23740445E+4,0.120E+3,0.610E+2,0.98310000E+0,0.00000000E+0 - ,0.23122147E+4,0.120E+3,0.620E+2,0.98310000E+0,0.00000000E+0 - ,0.22571993E+4,0.120E+3,0.630E+2,0.98310000E+0,0.00000000E+0 - ,0.16806338E+4,0.120E+3,0.640E+2,0.98310000E+0,0.00000000E+0 - ,0.20816173E+4,0.120E+3,0.650E+2,0.98310000E+0,0.00000000E+0 - ,0.19928728E+4,0.120E+3,0.660E+2,0.98310000E+0,0.00000000E+0 - ,0.20062958E+4,0.120E+3,0.670E+2,0.98310000E+0,0.00000000E+0 - ,0.19602391E+4,0.120E+3,0.680E+2,0.98310000E+0,0.00000000E+0 - ,0.19174640E+4,0.120E+3,0.690E+2,0.98310000E+0,0.00000000E+0 - ,0.18991306E+4,0.120E+3,0.700E+2,0.98310000E+0,0.00000000E+0 - ,0.15446852E+4,0.120E+3,0.710E+2,0.98310000E+0,0.00000000E+0 - ,0.14351503E+4,0.120E+3,0.720E+2,0.98310000E+0,0.00000000E+0 - ,0.12687518E+4,0.120E+3,0.730E+2,0.98310000E+0,0.00000000E+0 - ,0.10493296E+4,0.120E+3,0.740E+2,0.98310000E+0,0.00000000E+0 - ,0.10529922E+4,0.120E+3,0.750E+2,0.98310000E+0,0.00000000E+0 - ,0.92845210E+3,0.120E+3,0.760E+2,0.98310000E+0,0.00000000E+0 - ,0.83187520E+3,0.120E+3,0.770E+2,0.98310000E+0,0.00000000E+0 - ,0.67699020E+3,0.120E+3,0.780E+2,0.98310000E+0,0.00000000E+0 - ,0.62708530E+3,0.120E+3,0.790E+2,0.98310000E+0,0.00000000E+0 - ,0.63711120E+3,0.120E+3,0.800E+2,0.98310000E+0,0.00000000E+0 - ,0.10430556E+4,0.120E+3,0.810E+2,0.98310000E+0,0.00000000E+0 - ,0.97428450E+3,0.120E+3,0.820E+2,0.98310000E+0,0.00000000E+0 - ,0.85466400E+3,0.120E+3,0.830E+2,0.98310000E+0,0.00000000E+0 - ,0.79444910E+3,0.120E+3,0.840E+2,0.98310000E+0,0.00000000E+0 - ,0.71141430E+3,0.120E+3,0.850E+2,0.98310000E+0,0.00000000E+0 - ,0.63479210E+3,0.120E+3,0.860E+2,0.98310000E+0,0.00000000E+0 - ,0.32712563E+4,0.120E+3,0.870E+2,0.98310000E+0,0.00000000E+0 - ,0.28409447E+4,0.120E+3,0.880E+2,0.98310000E+0,0.00000000E+0 - ,0.23867637E+4,0.120E+3,0.890E+2,0.98310000E+0,0.00000000E+0 - ,0.20296245E+4,0.120E+3,0.900E+2,0.98310000E+0,0.00000000E+0 - ,0.20761172E+4,0.120E+3,0.910E+2,0.98310000E+0,0.00000000E+0 - ,0.20066915E+4,0.120E+3,0.920E+2,0.98310000E+0,0.00000000E+0 - ,0.21352269E+4,0.120E+3,0.930E+2,0.98310000E+0,0.00000000E+0 - ,0.20540131E+4,0.120E+3,0.940E+2,0.98310000E+0,0.00000000E+0 - ,0.90792700E+2,0.120E+3,0.101E+3,0.98310000E+0,0.00000000E+0 - ,0.34561200E+3,0.120E+3,0.103E+3,0.98310000E+0,0.98650000E+0 - ,0.43402840E+3,0.120E+3,0.104E+3,0.98310000E+0,0.98080000E+0 - ,0.29872640E+3,0.120E+3,0.105E+3,0.98310000E+0,0.97060000E+0 - ,0.21289570E+3,0.120E+3,0.106E+3,0.98310000E+0,0.98680000E+0 - ,0.13902190E+3,0.120E+3,0.107E+3,0.98310000E+0,0.99440000E+0 - ,0.96158400E+2,0.120E+3,0.108E+3,0.98310000E+0,0.99250000E+0 - ,0.62058000E+2,0.120E+3,0.109E+3,0.98310000E+0,0.99820000E+0 - ,0.51669170E+3,0.120E+3,0.111E+3,0.98310000E+0,0.96840000E+0 - ,0.80921820E+3,0.120E+3,0.112E+3,0.98310000E+0,0.96280000E+0 - ,0.77508320E+3,0.120E+3,0.113E+3,0.98310000E+0,0.96480000E+0 - ,0.57629620E+3,0.120E+3,0.114E+3,0.98310000E+0,0.95070000E+0 - ,0.44601700E+3,0.120E+3,0.115E+3,0.98310000E+0,0.99470000E+0 - ,0.36319510E+3,0.120E+3,0.116E+3,0.98310000E+0,0.99480000E+0 - ,0.28549050E+3,0.120E+3,0.117E+3,0.98310000E+0,0.99720000E+0 - ,0.68899110E+3,0.120E+3,0.119E+3,0.98310000E+0,0.97670000E+0 - ,0.15251891E+4,0.120E+3,0.120E+3,0.98310000E+0,0.98310000E+0 - ,0.29995300E+2,0.121E+3,0.100E+1,0.18627000E+1,0.91180000E+0 - ,0.19384100E+2,0.121E+3,0.200E+1,0.18627000E+1,0.00000000E+0 - ,0.50482680E+3,0.121E+3,0.300E+1,0.18627000E+1,0.00000000E+0 - ,0.28244200E+3,0.121E+3,0.400E+1,0.18627000E+1,0.00000000E+0 - ,0.18614190E+3,0.121E+3,0.500E+1,0.18627000E+1,0.00000000E+0 - ,0.12363790E+3,0.121E+3,0.600E+1,0.18627000E+1,0.00000000E+0 - ,0.85340400E+2,0.121E+3,0.700E+1,0.18627000E+1,0.00000000E+0 - ,0.64007200E+2,0.121E+3,0.800E+1,0.18627000E+1,0.00000000E+0 - ,0.48093600E+2,0.121E+3,0.900E+1,0.18627000E+1,0.00000000E+0 - ,0.36746800E+2,0.121E+3,0.100E+2,0.18627000E+1,0.00000000E+0 - ,0.60249290E+3,0.121E+3,0.110E+2,0.18627000E+1,0.00000000E+0 - ,0.45276000E+3,0.121E+3,0.120E+2,0.18627000E+1,0.00000000E+0 - ,0.41290580E+3,0.121E+3,0.130E+2,0.18627000E+1,0.00000000E+0 - ,0.32058960E+3,0.121E+3,0.140E+2,0.18627000E+1,0.00000000E+0 - ,0.24673580E+3,0.121E+3,0.150E+2,0.18627000E+1,0.00000000E+0 - ,0.20296720E+3,0.121E+3,0.160E+2,0.18627000E+1,0.00000000E+0 - ,0.16436550E+3,0.121E+3,0.170E+2,0.18627000E+1,0.00000000E+0 - ,0.13344040E+3,0.121E+3,0.180E+2,0.18627000E+1,0.00000000E+0 - ,0.98858810E+3,0.121E+3,0.190E+2,0.18627000E+1,0.00000000E+0 - ,0.80323800E+3,0.121E+3,0.200E+2,0.18627000E+1,0.00000000E+0 - ,0.66067800E+3,0.121E+3,0.210E+2,0.18627000E+1,0.00000000E+0 - ,0.63504570E+3,0.121E+3,0.220E+2,0.18627000E+1,0.00000000E+0 - ,0.57995840E+3,0.121E+3,0.230E+2,0.18627000E+1,0.00000000E+0 - ,0.45620230E+3,0.121E+3,0.240E+2,0.18627000E+1,0.00000000E+0 - ,0.49734740E+3,0.121E+3,0.250E+2,0.18627000E+1,0.00000000E+0 - ,0.38959740E+3,0.121E+3,0.260E+2,0.18627000E+1,0.00000000E+0 - ,0.41105720E+3,0.121E+3,0.270E+2,0.18627000E+1,0.00000000E+0 - ,0.42466930E+3,0.121E+3,0.280E+2,0.18627000E+1,0.00000000E+0 - ,0.32508500E+3,0.121E+3,0.290E+2,0.18627000E+1,0.00000000E+0 - ,0.33123100E+3,0.121E+3,0.300E+2,0.18627000E+1,0.00000000E+0 - ,0.39353000E+3,0.121E+3,0.310E+2,0.18627000E+1,0.00000000E+0 - ,0.34316790E+3,0.121E+3,0.320E+2,0.18627000E+1,0.00000000E+0 - ,0.28955820E+3,0.121E+3,0.330E+2,0.18627000E+1,0.00000000E+0 - ,0.25800840E+3,0.121E+3,0.340E+2,0.18627000E+1,0.00000000E+0 - ,0.22413750E+3,0.121E+3,0.350E+2,0.18627000E+1,0.00000000E+0 - ,0.19358680E+3,0.121E+3,0.360E+2,0.18627000E+1,0.00000000E+0 - ,0.11054608E+4,0.121E+3,0.370E+2,0.18627000E+1,0.00000000E+0 - ,0.95722710E+3,0.121E+3,0.380E+2,0.18627000E+1,0.00000000E+0 - ,0.83166790E+3,0.121E+3,0.390E+2,0.18627000E+1,0.00000000E+0 - ,0.74343180E+3,0.121E+3,0.400E+2,0.18627000E+1,0.00000000E+0 - ,0.67533140E+3,0.121E+3,0.410E+2,0.18627000E+1,0.00000000E+0 - ,0.51773400E+3,0.121E+3,0.420E+2,0.18627000E+1,0.00000000E+0 - ,0.57916230E+3,0.121E+3,0.430E+2,0.18627000E+1,0.00000000E+0 - ,0.43784320E+3,0.121E+3,0.440E+2,0.18627000E+1,0.00000000E+0 - ,0.47895980E+3,0.121E+3,0.450E+2,0.18627000E+1,0.00000000E+0 - ,0.44308160E+3,0.121E+3,0.460E+2,0.18627000E+1,0.00000000E+0 - ,0.36949330E+3,0.121E+3,0.470E+2,0.18627000E+1,0.00000000E+0 - ,0.38918590E+3,0.121E+3,0.480E+2,0.18627000E+1,0.00000000E+0 - ,0.49219040E+3,0.121E+3,0.490E+2,0.18627000E+1,0.00000000E+0 - ,0.45113400E+3,0.121E+3,0.500E+2,0.18627000E+1,0.00000000E+0 - ,0.39831520E+3,0.121E+3,0.510E+2,0.18627000E+1,0.00000000E+0 - ,0.36739080E+3,0.121E+3,0.520E+2,0.18627000E+1,0.00000000E+0 - ,0.33004180E+3,0.121E+3,0.530E+2,0.18627000E+1,0.00000000E+0 - ,0.29487060E+3,0.121E+3,0.540E+2,0.18627000E+1,0.00000000E+0 - ,0.13445274E+4,0.121E+3,0.550E+2,0.18627000E+1,0.00000000E+0 - ,0.12227426E+4,0.121E+3,0.560E+2,0.18627000E+1,0.00000000E+0 - ,0.10658140E+4,0.121E+3,0.570E+2,0.18627000E+1,0.00000000E+0 - ,0.47118540E+3,0.121E+3,0.580E+2,0.18627000E+1,0.27991000E+1 - ,0.10799647E+4,0.121E+3,0.590E+2,0.18627000E+1,0.00000000E+0 - ,0.10362055E+4,0.121E+3,0.600E+2,0.18627000E+1,0.00000000E+0 - ,0.10098893E+4,0.121E+3,0.610E+2,0.18627000E+1,0.00000000E+0 - ,0.98572640E+3,0.121E+3,0.620E+2,0.18627000E+1,0.00000000E+0 - ,0.96428550E+3,0.121E+3,0.630E+2,0.18627000E+1,0.00000000E+0 - ,0.75078480E+3,0.121E+3,0.640E+2,0.18627000E+1,0.00000000E+0 - ,0.85514710E+3,0.121E+3,0.650E+2,0.18627000E+1,0.00000000E+0 - ,0.82284200E+3,0.121E+3,0.660E+2,0.18627000E+1,0.00000000E+0 - ,0.86811040E+3,0.121E+3,0.670E+2,0.18627000E+1,0.00000000E+0 - ,0.84953940E+3,0.121E+3,0.680E+2,0.18627000E+1,0.00000000E+0 - ,0.83269610E+3,0.121E+3,0.690E+2,0.18627000E+1,0.00000000E+0 - ,0.82330890E+3,0.121E+3,0.700E+2,0.18627000E+1,0.00000000E+0 - ,0.68862420E+3,0.121E+3,0.710E+2,0.18627000E+1,0.00000000E+0 - ,0.67192580E+3,0.121E+3,0.720E+2,0.18627000E+1,0.00000000E+0 - ,0.60975150E+3,0.121E+3,0.730E+2,0.18627000E+1,0.00000000E+0 - ,0.51221050E+3,0.121E+3,0.740E+2,0.18627000E+1,0.00000000E+0 - ,0.52005780E+3,0.121E+3,0.750E+2,0.18627000E+1,0.00000000E+0 - ,0.46895650E+3,0.121E+3,0.760E+2,0.18627000E+1,0.00000000E+0 - ,0.42768450E+3,0.121E+3,0.770E+2,0.18627000E+1,0.00000000E+0 - ,0.35348450E+3,0.121E+3,0.780E+2,0.18627000E+1,0.00000000E+0 - ,0.32959850E+3,0.121E+3,0.790E+2,0.18627000E+1,0.00000000E+0 - ,0.33854780E+3,0.121E+3,0.800E+2,0.18627000E+1,0.00000000E+0 - ,0.50363930E+3,0.121E+3,0.810E+2,0.18627000E+1,0.00000000E+0 - ,0.48925410E+3,0.121E+3,0.820E+2,0.18627000E+1,0.00000000E+0 - ,0.44592310E+3,0.121E+3,0.830E+2,0.18627000E+1,0.00000000E+0 - ,0.42320630E+3,0.121E+3,0.840E+2,0.18627000E+1,0.00000000E+0 - ,0.38821220E+3,0.121E+3,0.850E+2,0.18627000E+1,0.00000000E+0 - ,0.35380050E+3,0.121E+3,0.860E+2,0.18627000E+1,0.00000000E+0 - ,0.12630191E+4,0.121E+3,0.870E+2,0.18627000E+1,0.00000000E+0 - ,0.12039859E+4,0.121E+3,0.880E+2,0.18627000E+1,0.00000000E+0 - ,0.10563541E+4,0.121E+3,0.890E+2,0.18627000E+1,0.00000000E+0 - ,0.94062410E+3,0.121E+3,0.900E+2,0.18627000E+1,0.00000000E+0 - ,0.93765790E+3,0.121E+3,0.910E+2,0.18627000E+1,0.00000000E+0 - ,0.90769560E+3,0.121E+3,0.920E+2,0.18627000E+1,0.00000000E+0 - ,0.93986910E+3,0.121E+3,0.930E+2,0.18627000E+1,0.00000000E+0 - ,0.90928950E+3,0.121E+3,0.940E+2,0.18627000E+1,0.00000000E+0 - ,0.48975300E+2,0.121E+3,0.101E+3,0.18627000E+1,0.00000000E+0 - ,0.16364460E+3,0.121E+3,0.103E+3,0.18627000E+1,0.98650000E+0 - ,0.20781070E+3,0.121E+3,0.104E+3,0.18627000E+1,0.98080000E+0 - ,0.15582280E+3,0.121E+3,0.105E+3,0.18627000E+1,0.97060000E+0 - ,0.11597260E+3,0.121E+3,0.106E+3,0.18627000E+1,0.98680000E+0 - ,0.79538300E+2,0.121E+3,0.107E+3,0.18627000E+1,0.99440000E+0 - ,0.57261100E+2,0.121E+3,0.108E+3,0.18627000E+1,0.99250000E+0 - ,0.38809700E+2,0.121E+3,0.109E+3,0.18627000E+1,0.99820000E+0 - ,0.23997140E+3,0.121E+3,0.111E+3,0.18627000E+1,0.96840000E+0 - ,0.37177680E+3,0.121E+3,0.112E+3,0.18627000E+1,0.96280000E+0 - ,0.37318450E+3,0.121E+3,0.113E+3,0.18627000E+1,0.96480000E+0 - ,0.29561010E+3,0.121E+3,0.114E+3,0.18627000E+1,0.95070000E+0 - ,0.23937010E+3,0.121E+3,0.115E+3,0.18627000E+1,0.99470000E+0 - ,0.20076220E+3,0.121E+3,0.116E+3,0.18627000E+1,0.99480000E+0 - ,0.16268060E+3,0.121E+3,0.117E+3,0.18627000E+1,0.99720000E+0 - ,0.32770920E+3,0.121E+3,0.119E+3,0.18627000E+1,0.97670000E+0 - ,0.64070760E+3,0.121E+3,0.120E+3,0.18627000E+1,0.98310000E+0 - ,0.32450680E+3,0.121E+3,0.121E+3,0.18627000E+1,0.18627000E+1 - ,0.29000900E+2,0.122E+3,0.100E+1,0.18299000E+1,0.91180000E+0 - ,0.18808400E+2,0.122E+3,0.200E+1,0.18299000E+1,0.00000000E+0 - ,0.48829310E+3,0.122E+3,0.300E+1,0.18299000E+1,0.00000000E+0 - ,0.27202010E+3,0.122E+3,0.400E+1,0.18299000E+1,0.00000000E+0 - ,0.17950770E+3,0.122E+3,0.500E+1,0.18299000E+1,0.00000000E+0 - ,0.11943760E+3,0.122E+3,0.600E+1,0.18299000E+1,0.00000000E+0 - ,0.82583400E+2,0.122E+3,0.700E+1,0.18299000E+1,0.00000000E+0 - ,0.62030900E+2,0.122E+3,0.800E+1,0.18299000E+1,0.00000000E+0 - ,0.46676500E+2,0.122E+3,0.900E+1,0.18299000E+1,0.00000000E+0 - ,0.35711700E+2,0.122E+3,0.100E+2,0.18299000E+1,0.00000000E+0 - ,0.58252700E+3,0.122E+3,0.110E+2,0.18299000E+1,0.00000000E+0 - ,0.43610910E+3,0.122E+3,0.120E+2,0.18299000E+1,0.00000000E+0 - ,0.39786180E+3,0.122E+3,0.130E+2,0.18299000E+1,0.00000000E+0 - ,0.30910810E+3,0.122E+3,0.140E+2,0.18299000E+1,0.00000000E+0 - ,0.23816440E+3,0.122E+3,0.150E+2,0.18299000E+1,0.00000000E+0 - ,0.19611280E+3,0.122E+3,0.160E+2,0.18299000E+1,0.00000000E+0 - ,0.15898920E+3,0.122E+3,0.170E+2,0.18299000E+1,0.00000000E+0 - ,0.12921800E+3,0.122E+3,0.180E+2,0.18299000E+1,0.00000000E+0 - ,0.96033760E+3,0.122E+3,0.190E+2,0.18299000E+1,0.00000000E+0 - ,0.77468630E+3,0.122E+3,0.200E+2,0.18299000E+1,0.00000000E+0 - ,0.63687060E+3,0.122E+3,0.210E+2,0.18299000E+1,0.00000000E+0 - ,0.61222250E+3,0.122E+3,0.220E+2,0.18299000E+1,0.00000000E+0 - ,0.55911570E+3,0.122E+3,0.230E+2,0.18299000E+1,0.00000000E+0 - ,0.44007620E+3,0.122E+3,0.240E+2,0.18299000E+1,0.00000000E+0 - ,0.47949690E+3,0.122E+3,0.250E+2,0.18299000E+1,0.00000000E+0 - ,0.37582420E+3,0.122E+3,0.260E+2,0.18299000E+1,0.00000000E+0 - ,0.39627480E+3,0.122E+3,0.270E+2,0.18299000E+1,0.00000000E+0 - ,0.40935550E+3,0.122E+3,0.280E+2,0.18299000E+1,0.00000000E+0 - ,0.31360260E+3,0.122E+3,0.290E+2,0.18299000E+1,0.00000000E+0 - ,0.31938340E+3,0.122E+3,0.300E+2,0.18299000E+1,0.00000000E+0 - ,0.37941090E+3,0.122E+3,0.310E+2,0.18299000E+1,0.00000000E+0 - ,0.33097100E+3,0.122E+3,0.320E+2,0.18299000E+1,0.00000000E+0 - ,0.27949900E+3,0.122E+3,0.330E+2,0.18299000E+1,0.00000000E+0 - ,0.24922580E+3,0.122E+3,0.340E+2,0.18299000E+1,0.00000000E+0 - ,0.21669210E+3,0.122E+3,0.350E+2,0.18299000E+1,0.00000000E+0 - ,0.18732310E+3,0.122E+3,0.360E+2,0.18299000E+1,0.00000000E+0 - ,0.10741973E+4,0.122E+3,0.370E+2,0.18299000E+1,0.00000000E+0 - ,0.92365570E+3,0.122E+3,0.380E+2,0.18299000E+1,0.00000000E+0 - ,0.80203240E+3,0.122E+3,0.390E+2,0.18299000E+1,0.00000000E+0 - ,0.71686090E+3,0.122E+3,0.400E+2,0.18299000E+1,0.00000000E+0 - ,0.65128470E+3,0.122E+3,0.410E+2,0.18299000E+1,0.00000000E+0 - ,0.49950110E+3,0.122E+3,0.420E+2,0.18299000E+1,0.00000000E+0 - ,0.55872110E+3,0.122E+3,0.430E+2,0.18299000E+1,0.00000000E+0 - ,0.42257080E+3,0.122E+3,0.440E+2,0.18299000E+1,0.00000000E+0 - ,0.46203140E+3,0.122E+3,0.450E+2,0.18299000E+1,0.00000000E+0 - ,0.42745770E+3,0.122E+3,0.460E+2,0.18299000E+1,0.00000000E+0 - ,0.35672450E+3,0.122E+3,0.470E+2,0.18299000E+1,0.00000000E+0 - ,0.37552610E+3,0.122E+3,0.480E+2,0.18299000E+1,0.00000000E+0 - ,0.47481120E+3,0.122E+3,0.490E+2,0.18299000E+1,0.00000000E+0 - ,0.43519480E+3,0.122E+3,0.500E+2,0.18299000E+1,0.00000000E+0 - ,0.38444870E+3,0.122E+3,0.510E+2,0.18299000E+1,0.00000000E+0 - ,0.35477930E+3,0.122E+3,0.520E+2,0.18299000E+1,0.00000000E+0 - ,0.31891710E+3,0.122E+3,0.530E+2,0.18299000E+1,0.00000000E+0 - ,0.28513250E+3,0.122E+3,0.540E+2,0.18299000E+1,0.00000000E+0 - ,0.13086418E+4,0.122E+3,0.550E+2,0.18299000E+1,0.00000000E+0 - ,0.11809424E+4,0.122E+3,0.560E+2,0.18299000E+1,0.00000000E+0 - ,0.10284169E+4,0.122E+3,0.570E+2,0.18299000E+1,0.00000000E+0 - ,0.45482000E+3,0.122E+3,0.580E+2,0.18299000E+1,0.27991000E+1 - ,0.10433187E+4,0.122E+3,0.590E+2,0.18299000E+1,0.00000000E+0 - ,0.10002155E+4,0.122E+3,0.600E+2,0.18299000E+1,0.00000000E+0 - ,0.97472270E+3,0.122E+3,0.610E+2,0.18299000E+1,0.00000000E+0 - ,0.95132570E+3,0.122E+3,0.620E+2,0.18299000E+1,0.00000000E+0 - ,0.93056540E+3,0.122E+3,0.630E+2,0.18299000E+1,0.00000000E+0 - ,0.72458860E+3,0.122E+3,0.640E+2,0.18299000E+1,0.00000000E+0 - ,0.82779700E+3,0.122E+3,0.650E+2,0.18299000E+1,0.00000000E+0 - ,0.79723640E+3,0.122E+3,0.660E+2,0.18299000E+1,0.00000000E+0 - ,0.83746180E+3,0.122E+3,0.670E+2,0.18299000E+1,0.00000000E+0 - ,0.81949730E+3,0.122E+3,0.680E+2,0.18299000E+1,0.00000000E+0 - ,0.80320320E+3,0.122E+3,0.690E+2,0.18299000E+1,0.00000000E+0 - ,0.79414040E+3,0.122E+3,0.700E+2,0.18299000E+1,0.00000000E+0 - ,0.66477270E+3,0.122E+3,0.710E+2,0.18299000E+1,0.00000000E+0 - ,0.64787460E+3,0.122E+3,0.720E+2,0.18299000E+1,0.00000000E+0 - ,0.58798130E+3,0.122E+3,0.730E+2,0.18299000E+1,0.00000000E+0 - ,0.49423570E+3,0.122E+3,0.740E+2,0.18299000E+1,0.00000000E+0 - ,0.50177330E+3,0.122E+3,0.750E+2,0.18299000E+1,0.00000000E+0 - ,0.45257260E+3,0.122E+3,0.760E+2,0.18299000E+1,0.00000000E+0 - ,0.41285580E+3,0.122E+3,0.770E+2,0.18299000E+1,0.00000000E+0 - ,0.34145400E+3,0.122E+3,0.780E+2,0.18299000E+1,0.00000000E+0 - ,0.31846190E+3,0.122E+3,0.790E+2,0.18299000E+1,0.00000000E+0 - ,0.32707700E+3,0.122E+3,0.800E+2,0.18299000E+1,0.00000000E+0 - ,0.48621160E+3,0.122E+3,0.810E+2,0.18299000E+1,0.00000000E+0 - ,0.47215520E+3,0.122E+3,0.820E+2,0.18299000E+1,0.00000000E+0 - ,0.43048050E+3,0.122E+3,0.830E+2,0.18299000E+1,0.00000000E+0 - ,0.40869510E+3,0.122E+3,0.840E+2,0.18299000E+1,0.00000000E+0 - ,0.37510290E+3,0.122E+3,0.850E+2,0.18299000E+1,0.00000000E+0 - ,0.34205750E+3,0.122E+3,0.860E+2,0.18299000E+1,0.00000000E+0 - ,0.12263970E+4,0.122E+3,0.870E+2,0.18299000E+1,0.00000000E+0 - ,0.11623660E+4,0.122E+3,0.880E+2,0.18299000E+1,0.00000000E+0 - ,0.10191422E+4,0.122E+3,0.890E+2,0.18299000E+1,0.00000000E+0 - ,0.90723670E+3,0.122E+3,0.900E+2,0.18299000E+1,0.00000000E+0 - ,0.90483310E+3,0.122E+3,0.910E+2,0.18299000E+1,0.00000000E+0 - ,0.87587480E+3,0.122E+3,0.920E+2,0.18299000E+1,0.00000000E+0 - ,0.90696160E+3,0.122E+3,0.930E+2,0.18299000E+1,0.00000000E+0 - ,0.87736450E+3,0.122E+3,0.940E+2,0.18299000E+1,0.00000000E+0 - ,0.47275500E+2,0.122E+3,0.101E+3,0.18299000E+1,0.00000000E+0 - ,0.15766670E+3,0.122E+3,0.103E+3,0.18299000E+1,0.98650000E+0 - ,0.20036690E+3,0.122E+3,0.104E+3,0.18299000E+1,0.98080000E+0 - ,0.15035200E+3,0.122E+3,0.105E+3,0.18299000E+1,0.97060000E+0 - ,0.11205230E+3,0.122E+3,0.106E+3,0.18299000E+1,0.98680000E+0 - ,0.76983400E+2,0.122E+3,0.107E+3,0.18299000E+1,0.99440000E+0 - ,0.55516000E+2,0.122E+3,0.108E+3,0.18299000E+1,0.99250000E+0 - ,0.37722200E+2,0.122E+3,0.109E+3,0.18299000E+1,0.99820000E+0 - ,0.23126120E+3,0.122E+3,0.111E+3,0.18299000E+1,0.96840000E+0 - ,0.35836020E+3,0.122E+3,0.112E+3,0.18299000E+1,0.96280000E+0 - ,0.35964970E+3,0.122E+3,0.113E+3,0.18299000E+1,0.96480000E+0 - ,0.28509570E+3,0.122E+3,0.114E+3,0.18299000E+1,0.95070000E+0 - ,0.23107730E+3,0.122E+3,0.115E+3,0.18299000E+1,0.99470000E+0 - ,0.19398450E+3,0.122E+3,0.116E+3,0.18299000E+1,0.99480000E+0 - ,0.15736040E+3,0.122E+3,0.117E+3,0.18299000E+1,0.99720000E+0 - ,0.31625180E+3,0.122E+3,0.119E+3,0.18299000E+1,0.97670000E+0 - ,0.61943010E+3,0.122E+3,0.120E+3,0.18299000E+1,0.98310000E+0 - ,0.31292020E+3,0.122E+3,0.121E+3,0.18299000E+1,0.18627000E+1 - ,0.30199880E+3,0.122E+3,0.122E+3,0.18299000E+1,0.18299000E+1 - ,0.28406700E+2,0.123E+3,0.100E+1,0.19138000E+1,0.91180000E+0 - ,0.18435900E+2,0.123E+3,0.200E+1,0.19138000E+1,0.00000000E+0 - ,0.47914020E+3,0.123E+3,0.300E+1,0.19138000E+1,0.00000000E+0 - ,0.26670500E+3,0.123E+3,0.400E+1,0.19138000E+1,0.00000000E+0 - ,0.17589090E+3,0.123E+3,0.500E+1,0.19138000E+1,0.00000000E+0 - ,0.11700980E+3,0.123E+3,0.600E+1,0.19138000E+1,0.00000000E+0 - ,0.80914400E+2,0.123E+3,0.700E+1,0.19138000E+1,0.00000000E+0 - ,0.60793300E+2,0.123E+3,0.800E+1,0.19138000E+1,0.00000000E+0 - ,0.45763000E+2,0.123E+3,0.900E+1,0.19138000E+1,0.00000000E+0 - ,0.35029000E+2,0.123E+3,0.100E+2,0.19138000E+1,0.00000000E+0 - ,0.57164550E+3,0.123E+3,0.110E+2,0.19138000E+1,0.00000000E+0 - ,0.42771560E+3,0.123E+3,0.120E+2,0.19138000E+1,0.00000000E+0 - ,0.39004320E+3,0.123E+3,0.130E+2,0.19138000E+1,0.00000000E+0 - ,0.30289850E+3,0.123E+3,0.140E+2,0.19138000E+1,0.00000000E+0 - ,0.23331760E+3,0.123E+3,0.150E+2,0.19138000E+1,0.00000000E+0 - ,0.19211130E+3,0.123E+3,0.160E+2,0.19138000E+1,0.00000000E+0 - ,0.15575070E+3,0.123E+3,0.170E+2,0.19138000E+1,0.00000000E+0 - ,0.12660270E+3,0.123E+3,0.180E+2,0.19138000E+1,0.00000000E+0 - ,0.94198370E+3,0.123E+3,0.190E+2,0.19138000E+1,0.00000000E+0 - ,0.76007180E+3,0.123E+3,0.200E+2,0.19138000E+1,0.00000000E+0 - ,0.62478010E+3,0.123E+3,0.210E+2,0.19138000E+1,0.00000000E+0 - ,0.60052210E+3,0.123E+3,0.220E+2,0.19138000E+1,0.00000000E+0 - ,0.54839080E+3,0.123E+3,0.230E+2,0.19138000E+1,0.00000000E+0 - ,0.43166830E+3,0.123E+3,0.240E+2,0.19138000E+1,0.00000000E+0 - ,0.47025290E+3,0.123E+3,0.250E+2,0.19138000E+1,0.00000000E+0 - ,0.36861360E+3,0.123E+3,0.260E+2,0.19138000E+1,0.00000000E+0 - ,0.38857290E+3,0.123E+3,0.270E+2,0.19138000E+1,0.00000000E+0 - ,0.40143290E+3,0.123E+3,0.280E+2,0.19138000E+1,0.00000000E+0 - ,0.30757630E+3,0.123E+3,0.290E+2,0.19138000E+1,0.00000000E+0 - ,0.31312860E+3,0.123E+3,0.300E+2,0.19138000E+1,0.00000000E+0 - ,0.37194270E+3,0.123E+3,0.310E+2,0.19138000E+1,0.00000000E+0 - ,0.32434350E+3,0.123E+3,0.320E+2,0.19138000E+1,0.00000000E+0 - ,0.27383520E+3,0.123E+3,0.330E+2,0.19138000E+1,0.00000000E+0 - ,0.24415540E+3,0.123E+3,0.340E+2,0.19138000E+1,0.00000000E+0 - ,0.21227920E+3,0.123E+3,0.350E+2,0.19138000E+1,0.00000000E+0 - ,0.18351710E+3,0.123E+3,0.360E+2,0.19138000E+1,0.00000000E+0 - ,0.10535834E+4,0.123E+3,0.370E+2,0.19138000E+1,0.00000000E+0 - ,0.90623640E+3,0.123E+3,0.380E+2,0.19138000E+1,0.00000000E+0 - ,0.78672550E+3,0.123E+3,0.390E+2,0.19138000E+1,0.00000000E+0 - ,0.70307840E+3,0.123E+3,0.400E+2,0.19138000E+1,0.00000000E+0 - ,0.63870140E+3,0.123E+3,0.410E+2,0.19138000E+1,0.00000000E+0 - ,0.48981600E+3,0.123E+3,0.420E+2,0.19138000E+1,0.00000000E+0 - ,0.54789060E+3,0.123E+3,0.430E+2,0.19138000E+1,0.00000000E+0 - ,0.41435750E+3,0.123E+3,0.440E+2,0.19138000E+1,0.00000000E+0 - ,0.45302620E+3,0.123E+3,0.450E+2,0.19138000E+1,0.00000000E+0 - ,0.41911340E+3,0.123E+3,0.460E+2,0.19138000E+1,0.00000000E+0 - ,0.34982880E+3,0.123E+3,0.470E+2,0.19138000E+1,0.00000000E+0 - ,0.36818710E+3,0.123E+3,0.480E+2,0.19138000E+1,0.00000000E+0 - ,0.46556470E+3,0.123E+3,0.490E+2,0.19138000E+1,0.00000000E+0 - ,0.42659330E+3,0.123E+3,0.500E+2,0.19138000E+1,0.00000000E+0 - ,0.37675440E+3,0.123E+3,0.510E+2,0.19138000E+1,0.00000000E+0 - ,0.34763740E+3,0.123E+3,0.520E+2,0.19138000E+1,0.00000000E+0 - ,0.31247140E+3,0.123E+3,0.530E+2,0.19138000E+1,0.00000000E+0 - ,0.27936120E+3,0.123E+3,0.540E+2,0.19138000E+1,0.00000000E+0 - ,0.12831193E+4,0.123E+3,0.550E+2,0.19138000E+1,0.00000000E+0 - ,0.11586662E+4,0.123E+3,0.560E+2,0.19138000E+1,0.00000000E+0 - ,0.10088336E+4,0.123E+3,0.570E+2,0.19138000E+1,0.00000000E+0 - ,0.44575700E+3,0.123E+3,0.580E+2,0.19138000E+1,0.27991000E+1 - ,0.10235395E+4,0.123E+3,0.590E+2,0.19138000E+1,0.00000000E+0 - ,0.98134570E+3,0.123E+3,0.600E+2,0.19138000E+1,0.00000000E+0 - ,0.95633210E+3,0.123E+3,0.610E+2,0.19138000E+1,0.00000000E+0 - ,0.93337380E+3,0.123E+3,0.620E+2,0.19138000E+1,0.00000000E+0 - ,0.91300140E+3,0.123E+3,0.630E+2,0.19138000E+1,0.00000000E+0 - ,0.71072370E+3,0.123E+3,0.640E+2,0.19138000E+1,0.00000000E+0 - ,0.81199050E+3,0.123E+3,0.650E+2,0.19138000E+1,0.00000000E+0 - ,0.78182720E+3,0.123E+3,0.660E+2,0.19138000E+1,0.00000000E+0 - ,0.82162740E+3,0.123E+3,0.670E+2,0.19138000E+1,0.00000000E+0 - ,0.80399890E+3,0.123E+3,0.680E+2,0.19138000E+1,0.00000000E+0 - ,0.78800640E+3,0.123E+3,0.690E+2,0.19138000E+1,0.00000000E+0 - ,0.77912190E+3,0.123E+3,0.700E+2,0.19138000E+1,0.00000000E+0 - ,0.65197940E+3,0.123E+3,0.710E+2,0.19138000E+1,0.00000000E+0 - ,0.63529960E+3,0.123E+3,0.720E+2,0.19138000E+1,0.00000000E+0 - ,0.57649460E+3,0.123E+3,0.730E+2,0.19138000E+1,0.00000000E+0 - ,0.48455830E+3,0.123E+3,0.740E+2,0.19138000E+1,0.00000000E+0 - ,0.49191200E+3,0.123E+3,0.750E+2,0.19138000E+1,0.00000000E+0 - ,0.44364130E+3,0.123E+3,0.760E+2,0.19138000E+1,0.00000000E+0 - ,0.40468640E+3,0.123E+3,0.770E+2,0.19138000E+1,0.00000000E+0 - ,0.33471530E+3,0.123E+3,0.780E+2,0.19138000E+1,0.00000000E+0 - ,0.31218730E+3,0.123E+3,0.790E+2,0.19138000E+1,0.00000000E+0 - ,0.32060120E+3,0.123E+3,0.800E+2,0.19138000E+1,0.00000000E+0 - ,0.47675960E+3,0.123E+3,0.810E+2,0.19138000E+1,0.00000000E+0 - ,0.46287410E+3,0.123E+3,0.820E+2,0.19138000E+1,0.00000000E+0 - ,0.42191810E+3,0.123E+3,0.830E+2,0.19138000E+1,0.00000000E+0 - ,0.40051720E+3,0.123E+3,0.840E+2,0.19138000E+1,0.00000000E+0 - ,0.36755880E+3,0.123E+3,0.850E+2,0.19138000E+1,0.00000000E+0 - ,0.33516100E+3,0.123E+3,0.860E+2,0.19138000E+1,0.00000000E+0 - ,0.12027024E+4,0.123E+3,0.870E+2,0.19138000E+1,0.00000000E+0 - ,0.11403430E+4,0.123E+3,0.880E+2,0.19138000E+1,0.00000000E+0 - ,0.99965520E+3,0.123E+3,0.890E+2,0.19138000E+1,0.00000000E+0 - ,0.88972590E+3,0.123E+3,0.900E+2,0.19138000E+1,0.00000000E+0 - ,0.88748800E+3,0.123E+3,0.910E+2,0.19138000E+1,0.00000000E+0 - ,0.85909970E+3,0.123E+3,0.920E+2,0.19138000E+1,0.00000000E+0 - ,0.88977190E+3,0.123E+3,0.930E+2,0.19138000E+1,0.00000000E+0 - ,0.86071780E+3,0.123E+3,0.940E+2,0.19138000E+1,0.00000000E+0 - ,0.46308900E+2,0.123E+3,0.101E+3,0.19138000E+1,0.00000000E+0 - ,0.15457620E+3,0.123E+3,0.103E+3,0.19138000E+1,0.98650000E+0 - ,0.19640270E+3,0.123E+3,0.104E+3,0.19138000E+1,0.98080000E+0 - ,0.14731530E+3,0.123E+3,0.105E+3,0.19138000E+1,0.97060000E+0 - ,0.10977970E+3,0.123E+3,0.106E+3,0.19138000E+1,0.98680000E+0 - ,0.75430300E+2,0.123E+3,0.107E+3,0.19138000E+1,0.99440000E+0 - ,0.54410900E+2,0.123E+3,0.108E+3,0.19138000E+1,0.99250000E+0 - ,0.36996200E+2,0.123E+3,0.109E+3,0.19138000E+1,0.99820000E+0 - ,0.22678860E+3,0.123E+3,0.111E+3,0.19138000E+1,0.96840000E+0 - ,0.35139280E+3,0.123E+3,0.112E+3,0.19138000E+1,0.96280000E+0 - ,0.35255750E+3,0.123E+3,0.113E+3,0.19138000E+1,0.96480000E+0 - ,0.27935630E+3,0.123E+3,0.114E+3,0.19138000E+1,0.95070000E+0 - ,0.22637670E+3,0.123E+3,0.115E+3,0.19138000E+1,0.99470000E+0 - ,0.19002990E+3,0.123E+3,0.116E+3,0.19138000E+1,0.99480000E+0 - ,0.15415760E+3,0.123E+3,0.117E+3,0.19138000E+1,0.99720000E+0 - ,0.31011080E+3,0.123E+3,0.119E+3,0.19138000E+1,0.97670000E+0 - ,0.60755710E+3,0.123E+3,0.120E+3,0.19138000E+1,0.98310000E+0 - ,0.30673890E+3,0.123E+3,0.121E+3,0.19138000E+1,0.18627000E+1 - ,0.29600290E+3,0.123E+3,0.122E+3,0.19138000E+1,0.18299000E+1 - ,0.29014360E+3,0.123E+3,0.123E+3,0.19138000E+1,0.19138000E+1 - ,0.28056200E+2,0.124E+3,0.100E+1,0.18269000E+1,0.91180000E+0 - ,0.18175400E+2,0.124E+3,0.200E+1,0.18269000E+1,0.00000000E+0 - ,0.48059440E+3,0.124E+3,0.300E+1,0.18269000E+1,0.00000000E+0 - ,0.26540880E+3,0.124E+3,0.400E+1,0.18269000E+1,0.00000000E+0 - ,0.17437190E+3,0.124E+3,0.500E+1,0.18269000E+1,0.00000000E+0 - ,0.11571820E+3,0.124E+3,0.600E+1,0.18269000E+1,0.00000000E+0 - ,0.79902400E+2,0.124E+3,0.700E+1,0.18269000E+1,0.00000000E+0 - ,0.59982900E+2,0.124E+3,0.800E+1,0.18269000E+1,0.00000000E+0 - ,0.45129000E+2,0.124E+3,0.900E+1,0.18269000E+1,0.00000000E+0 - ,0.34535000E+2,0.124E+3,0.100E+2,0.18269000E+1,0.00000000E+0 - ,0.57314360E+3,0.124E+3,0.110E+2,0.18269000E+1,0.00000000E+0 - ,0.42622760E+3,0.124E+3,0.120E+2,0.18269000E+1,0.00000000E+0 - ,0.38786950E+3,0.124E+3,0.130E+2,0.18269000E+1,0.00000000E+0 - ,0.30039280E+3,0.124E+3,0.140E+2,0.18269000E+1,0.00000000E+0 - ,0.23090900E+3,0.124E+3,0.150E+2,0.18269000E+1,0.00000000E+0 - ,0.18990520E+3,0.124E+3,0.160E+2,0.18269000E+1,0.00000000E+0 - ,0.15380570E+3,0.124E+3,0.170E+2,0.18269000E+1,0.00000000E+0 - ,0.12492650E+3,0.124E+3,0.180E+2,0.18269000E+1,0.00000000E+0 - ,0.94587000E+3,0.124E+3,0.190E+2,0.18269000E+1,0.00000000E+0 - ,0.75936840E+3,0.124E+3,0.200E+2,0.18269000E+1,0.00000000E+0 - ,0.62353320E+3,0.124E+3,0.210E+2,0.18269000E+1,0.00000000E+0 - ,0.59879810E+3,0.124E+3,0.220E+2,0.18269000E+1,0.00000000E+0 - ,0.54652440E+3,0.124E+3,0.230E+2,0.18269000E+1,0.00000000E+0 - ,0.43023530E+3,0.124E+3,0.240E+2,0.18269000E+1,0.00000000E+0 - ,0.46829610E+3,0.124E+3,0.250E+2,0.18269000E+1,0.00000000E+0 - ,0.36707850E+3,0.124E+3,0.260E+2,0.18269000E+1,0.00000000E+0 - ,0.38644860E+3,0.124E+3,0.270E+2,0.18269000E+1,0.00000000E+0 - ,0.39945300E+3,0.124E+3,0.280E+2,0.18269000E+1,0.00000000E+0 - ,0.30611810E+3,0.124E+3,0.290E+2,0.18269000E+1,0.00000000E+0 - ,0.31106030E+3,0.124E+3,0.300E+2,0.18269000E+1,0.00000000E+0 - ,0.36963020E+3,0.124E+3,0.310E+2,0.18269000E+1,0.00000000E+0 - ,0.32164040E+3,0.124E+3,0.320E+2,0.18269000E+1,0.00000000E+0 - ,0.27107700E+3,0.124E+3,0.330E+2,0.18269000E+1,0.00000000E+0 - ,0.24145850E+3,0.124E+3,0.340E+2,0.18269000E+1,0.00000000E+0 - ,0.20973930E+3,0.124E+3,0.350E+2,0.18269000E+1,0.00000000E+0 - ,0.18118190E+3,0.124E+3,0.360E+2,0.18269000E+1,0.00000000E+0 - ,0.10575718E+4,0.124E+3,0.370E+2,0.18269000E+1,0.00000000E+0 - ,0.90561870E+3,0.124E+3,0.380E+2,0.18269000E+1,0.00000000E+0 - ,0.78474890E+3,0.124E+3,0.390E+2,0.18269000E+1,0.00000000E+0 - ,0.70054320E+3,0.124E+3,0.400E+2,0.18269000E+1,0.00000000E+0 - ,0.63596390E+3,0.124E+3,0.410E+2,0.18269000E+1,0.00000000E+0 - ,0.48719110E+3,0.124E+3,0.420E+2,0.18269000E+1,0.00000000E+0 - ,0.54517240E+3,0.124E+3,0.430E+2,0.18269000E+1,0.00000000E+0 - ,0.41181870E+3,0.124E+3,0.440E+2,0.18269000E+1,0.00000000E+0 - ,0.45019430E+3,0.124E+3,0.450E+2,0.18269000E+1,0.00000000E+0 - ,0.41632300E+3,0.124E+3,0.460E+2,0.18269000E+1,0.00000000E+0 - ,0.34767860E+3,0.124E+3,0.470E+2,0.18269000E+1,0.00000000E+0 - ,0.36555310E+3,0.124E+3,0.480E+2,0.18269000E+1,0.00000000E+0 - ,0.46283040E+3,0.124E+3,0.490E+2,0.18269000E+1,0.00000000E+0 - ,0.42332080E+3,0.124E+3,0.500E+2,0.18269000E+1,0.00000000E+0 - ,0.37325910E+3,0.124E+3,0.510E+2,0.18269000E+1,0.00000000E+0 - ,0.34409820E+3,0.124E+3,0.520E+2,0.18269000E+1,0.00000000E+0 - ,0.30900630E+3,0.124E+3,0.530E+2,0.18269000E+1,0.00000000E+0 - ,0.27604060E+3,0.124E+3,0.540E+2,0.18269000E+1,0.00000000E+0 - ,0.12879616E+4,0.124E+3,0.550E+2,0.18269000E+1,0.00000000E+0 - ,0.11586672E+4,0.124E+3,0.560E+2,0.18269000E+1,0.00000000E+0 - ,0.10069636E+4,0.124E+3,0.570E+2,0.18269000E+1,0.00000000E+0 - ,0.44178090E+3,0.124E+3,0.580E+2,0.18269000E+1,0.27991000E+1 - ,0.10229773E+4,0.124E+3,0.590E+2,0.18269000E+1,0.00000000E+0 - ,0.98048290E+3,0.124E+3,0.600E+2,0.18269000E+1,0.00000000E+0 - ,0.95540420E+3,0.124E+3,0.610E+2,0.18269000E+1,0.00000000E+0 - ,0.93239460E+3,0.124E+3,0.620E+2,0.18269000E+1,0.00000000E+0 - ,0.91197350E+3,0.124E+3,0.630E+2,0.18269000E+1,0.00000000E+0 - ,0.70857690E+3,0.124E+3,0.640E+2,0.18269000E+1,0.00000000E+0 - ,0.81204950E+3,0.124E+3,0.650E+2,0.18269000E+1,0.00000000E+0 - ,0.78162600E+3,0.124E+3,0.660E+2,0.18269000E+1,0.00000000E+0 - ,0.82030710E+3,0.124E+3,0.670E+2,0.18269000E+1,0.00000000E+0 - ,0.80266090E+3,0.124E+3,0.680E+2,0.18269000E+1,0.00000000E+0 - ,0.78663360E+3,0.124E+3,0.690E+2,0.18269000E+1,0.00000000E+0 - ,0.77782320E+3,0.124E+3,0.700E+2,0.18269000E+1,0.00000000E+0 - ,0.65005720E+3,0.124E+3,0.710E+2,0.18269000E+1,0.00000000E+0 - ,0.63220990E+3,0.124E+3,0.720E+2,0.18269000E+1,0.00000000E+0 - ,0.57309450E+3,0.124E+3,0.730E+2,0.18269000E+1,0.00000000E+0 - ,0.48138140E+3,0.124E+3,0.740E+2,0.18269000E+1,0.00000000E+0 - ,0.48847190E+3,0.124E+3,0.750E+2,0.18269000E+1,0.00000000E+0 - ,0.44016550E+3,0.124E+3,0.760E+2,0.18269000E+1,0.00000000E+0 - ,0.40125220E+3,0.124E+3,0.770E+2,0.18269000E+1,0.00000000E+0 - ,0.33169650E+3,0.124E+3,0.780E+2,0.18269000E+1,0.00000000E+0 - ,0.30930750E+3,0.124E+3,0.790E+2,0.18269000E+1,0.00000000E+0 - ,0.31751490E+3,0.124E+3,0.800E+2,0.18269000E+1,0.00000000E+0 - ,0.47384960E+3,0.124E+3,0.810E+2,0.18269000E+1,0.00000000E+0 - ,0.45937430E+3,0.124E+3,0.820E+2,0.18269000E+1,0.00000000E+0 - ,0.41810440E+3,0.124E+3,0.830E+2,0.18269000E+1,0.00000000E+0 - ,0.39657360E+3,0.124E+3,0.840E+2,0.18269000E+1,0.00000000E+0 - ,0.36360680E+3,0.124E+3,0.850E+2,0.18269000E+1,0.00000000E+0 - ,0.33130140E+3,0.124E+3,0.860E+2,0.18269000E+1,0.00000000E+0 - ,0.12054436E+4,0.124E+3,0.870E+2,0.18269000E+1,0.00000000E+0 - ,0.11392761E+4,0.124E+3,0.880E+2,0.18269000E+1,0.00000000E+0 - ,0.99702490E+3,0.124E+3,0.890E+2,0.18269000E+1,0.00000000E+0 - ,0.88576610E+3,0.124E+3,0.900E+2,0.18269000E+1,0.00000000E+0 - ,0.88442800E+3,0.124E+3,0.910E+2,0.18269000E+1,0.00000000E+0 - ,0.85610390E+3,0.124E+3,0.920E+2,0.18269000E+1,0.00000000E+0 - ,0.88770660E+3,0.124E+3,0.930E+2,0.18269000E+1,0.00000000E+0 - ,0.85853020E+3,0.124E+3,0.940E+2,0.18269000E+1,0.00000000E+0 - ,0.45817300E+2,0.124E+3,0.101E+3,0.18269000E+1,0.00000000E+0 - ,0.15375390E+3,0.124E+3,0.103E+3,0.18269000E+1,0.98650000E+0 - ,0.19523170E+3,0.124E+3,0.104E+3,0.18269000E+1,0.98080000E+0 - ,0.14594770E+3,0.124E+3,0.105E+3,0.18269000E+1,0.97060000E+0 - ,0.10858200E+3,0.124E+3,0.106E+3,0.18269000E+1,0.98680000E+0 - ,0.74489000E+2,0.124E+3,0.107E+3,0.18269000E+1,0.99440000E+0 - ,0.53673300E+2,0.124E+3,0.108E+3,0.18269000E+1,0.99250000E+0 - ,0.36459400E+2,0.124E+3,0.109E+3,0.18269000E+1,0.99820000E+0 - ,0.22578370E+3,0.124E+3,0.111E+3,0.18269000E+1,0.96840000E+0 - ,0.34993280E+3,0.124E+3,0.112E+3,0.18269000E+1,0.96280000E+0 - ,0.35042960E+3,0.124E+3,0.113E+3,0.18269000E+1,0.96480000E+0 - ,0.27695120E+3,0.124E+3,0.114E+3,0.18269000E+1,0.95070000E+0 - ,0.22403030E+3,0.124E+3,0.115E+3,0.18269000E+1,0.99470000E+0 - ,0.18785700E+3,0.124E+3,0.116E+3,0.18269000E+1,0.99480000E+0 - ,0.15223830E+3,0.124E+3,0.117E+3,0.18269000E+1,0.99720000E+0 - ,0.30839010E+3,0.124E+3,0.119E+3,0.18269000E+1,0.97670000E+0 - ,0.60707000E+3,0.124E+3,0.120E+3,0.18269000E+1,0.98310000E+0 - ,0.30430940E+3,0.124E+3,0.121E+3,0.18269000E+1,0.18627000E+1 - ,0.29365980E+3,0.124E+3,0.122E+3,0.18269000E+1,0.18299000E+1 - ,0.28786570E+3,0.124E+3,0.123E+3,0.18269000E+1,0.19138000E+1 - ,0.28569050E+3,0.124E+3,0.124E+3,0.18269000E+1,0.18269000E+1 - ,0.26181000E+2,0.125E+3,0.100E+1,0.16406000E+1,0.91180000E+0 - ,0.17152600E+2,0.125E+3,0.200E+1,0.16406000E+1,0.00000000E+0 - ,0.41608360E+3,0.125E+3,0.300E+1,0.16406000E+1,0.00000000E+0 - ,0.23896060E+3,0.125E+3,0.400E+1,0.16406000E+1,0.00000000E+0 - ,0.15984920E+3,0.125E+3,0.500E+1,0.16406000E+1,0.00000000E+0 - ,0.10733820E+3,0.125E+3,0.600E+1,0.16406000E+1,0.00000000E+0 - ,0.74699800E+2,0.125E+3,0.700E+1,0.16406000E+1,0.00000000E+0 - ,0.56362200E+2,0.125E+3,0.800E+1,0.16406000E+1,0.00000000E+0 - ,0.42576400E+2,0.125E+3,0.900E+1,0.16406000E+1,0.00000000E+0 - ,0.32680600E+2,0.125E+3,0.100E+2,0.16406000E+1,0.00000000E+0 - ,0.49735820E+3,0.125E+3,0.110E+2,0.16406000E+1,0.00000000E+0 - ,0.38129680E+3,0.125E+3,0.120E+2,0.16406000E+1,0.00000000E+0 - ,0.35045220E+3,0.125E+3,0.130E+2,0.16406000E+1,0.00000000E+0 - ,0.27492570E+3,0.125E+3,0.140E+2,0.16406000E+1,0.00000000E+0 - ,0.21341010E+3,0.125E+3,0.150E+2,0.16406000E+1,0.00000000E+0 - ,0.17651650E+3,0.125E+3,0.160E+2,0.16406000E+1,0.00000000E+0 - ,0.14370010E+3,0.125E+3,0.170E+2,0.16406000E+1,0.00000000E+0 - ,0.11720570E+3,0.125E+3,0.180E+2,0.16406000E+1,0.00000000E+0 - ,0.81424680E+3,0.125E+3,0.190E+2,0.16406000E+1,0.00000000E+0 - ,0.67083370E+3,0.125E+3,0.200E+2,0.16406000E+1,0.00000000E+0 - ,0.55379310E+3,0.125E+3,0.210E+2,0.16406000E+1,0.00000000E+0 - ,0.53412660E+3,0.125E+3,0.220E+2,0.16406000E+1,0.00000000E+0 - ,0.48879470E+3,0.125E+3,0.230E+2,0.16406000E+1,0.00000000E+0 - ,0.38469310E+3,0.125E+3,0.240E+2,0.16406000E+1,0.00000000E+0 - ,0.42042070E+3,0.125E+3,0.250E+2,0.16406000E+1,0.00000000E+0 - ,0.32962730E+3,0.125E+3,0.260E+2,0.16406000E+1,0.00000000E+0 - ,0.34919410E+3,0.125E+3,0.270E+2,0.16406000E+1,0.00000000E+0 - ,0.36001720E+3,0.125E+3,0.280E+2,0.16406000E+1,0.00000000E+0 - ,0.27572060E+3,0.125E+3,0.290E+2,0.16406000E+1,0.00000000E+0 - ,0.28266670E+3,0.125E+3,0.300E+2,0.16406000E+1,0.00000000E+0 - ,0.33506150E+3,0.125E+3,0.310E+2,0.16406000E+1,0.00000000E+0 - ,0.29451840E+3,0.125E+3,0.320E+2,0.16406000E+1,0.00000000E+0 - ,0.25028310E+3,0.125E+3,0.330E+2,0.16406000E+1,0.00000000E+0 - ,0.22398570E+3,0.125E+3,0.340E+2,0.16406000E+1,0.00000000E+0 - ,0.19545360E+3,0.125E+3,0.350E+2,0.16406000E+1,0.00000000E+0 - ,0.16950970E+3,0.125E+3,0.360E+2,0.16406000E+1,0.00000000E+0 - ,0.91194330E+3,0.125E+3,0.370E+2,0.16406000E+1,0.00000000E+0 - ,0.79901250E+3,0.125E+3,0.380E+2,0.16406000E+1,0.00000000E+0 - ,0.69867600E+3,0.125E+3,0.390E+2,0.16406000E+1,0.00000000E+0 - ,0.62707900E+3,0.125E+3,0.400E+2,0.16406000E+1,0.00000000E+0 - ,0.57118620E+3,0.125E+3,0.410E+2,0.16406000E+1,0.00000000E+0 - ,0.43993260E+3,0.125E+3,0.420E+2,0.16406000E+1,0.00000000E+0 - ,0.49132100E+3,0.125E+3,0.430E+2,0.16406000E+1,0.00000000E+0 - ,0.37334420E+3,0.125E+3,0.440E+2,0.16406000E+1,0.00000000E+0 - ,0.40836770E+3,0.125E+3,0.450E+2,0.16406000E+1,0.00000000E+0 - ,0.37842950E+3,0.125E+3,0.460E+2,0.16406000E+1,0.00000000E+0 - ,0.31534820E+3,0.125E+3,0.470E+2,0.16406000E+1,0.00000000E+0 - ,0.33315180E+3,0.125E+3,0.480E+2,0.16406000E+1,0.00000000E+0 - ,0.41907070E+3,0.125E+3,0.490E+2,0.16406000E+1,0.00000000E+0 - ,0.38661840E+3,0.125E+3,0.500E+2,0.16406000E+1,0.00000000E+0 - ,0.34352050E+3,0.125E+3,0.510E+2,0.16406000E+1,0.00000000E+0 - ,0.31804850E+3,0.125E+3,0.520E+2,0.16406000E+1,0.00000000E+0 - ,0.28687200E+3,0.125E+3,0.530E+2,0.16406000E+1,0.00000000E+0 - ,0.25728030E+3,0.125E+3,0.540E+2,0.16406000E+1,0.00000000E+0 - ,0.11103588E+4,0.125E+3,0.550E+2,0.16406000E+1,0.00000000E+0 - ,0.10186688E+4,0.125E+3,0.560E+2,0.16406000E+1,0.00000000E+0 - ,0.89350560E+3,0.125E+3,0.570E+2,0.16406000E+1,0.00000000E+0 - ,0.40587370E+3,0.125E+3,0.580E+2,0.16406000E+1,0.27991000E+1 - ,0.90204820E+3,0.125E+3,0.590E+2,0.16406000E+1,0.00000000E+0 - ,0.86604420E+3,0.125E+3,0.600E+2,0.16406000E+1,0.00000000E+0 - ,0.84428560E+3,0.125E+3,0.610E+2,0.16406000E+1,0.00000000E+0 - ,0.82428300E+3,0.125E+3,0.620E+2,0.16406000E+1,0.00000000E+0 - ,0.80654320E+3,0.125E+3,0.630E+2,0.16406000E+1,0.00000000E+0 - ,0.63257430E+3,0.125E+3,0.640E+2,0.16406000E+1,0.00000000E+0 - ,0.71375520E+3,0.125E+3,0.650E+2,0.16406000E+1,0.00000000E+0 - ,0.68811250E+3,0.125E+3,0.660E+2,0.16406000E+1,0.00000000E+0 - ,0.72723780E+3,0.125E+3,0.670E+2,0.16406000E+1,0.00000000E+0 - ,0.71180010E+3,0.125E+3,0.680E+2,0.16406000E+1,0.00000000E+0 - ,0.69785650E+3,0.125E+3,0.690E+2,0.16406000E+1,0.00000000E+0 - ,0.68978470E+3,0.125E+3,0.700E+2,0.16406000E+1,0.00000000E+0 - ,0.58012870E+3,0.125E+3,0.710E+2,0.16406000E+1,0.00000000E+0 - ,0.56940560E+3,0.125E+3,0.720E+2,0.16406000E+1,0.00000000E+0 - ,0.51879050E+3,0.125E+3,0.730E+2,0.16406000E+1,0.00000000E+0 - ,0.43720880E+3,0.125E+3,0.740E+2,0.16406000E+1,0.00000000E+0 - ,0.44459970E+3,0.125E+3,0.750E+2,0.16406000E+1,0.00000000E+0 - ,0.40230970E+3,0.125E+3,0.760E+2,0.16406000E+1,0.00000000E+0 - ,0.36794540E+3,0.125E+3,0.770E+2,0.16406000E+1,0.00000000E+0 - ,0.30505010E+3,0.125E+3,0.780E+2,0.16406000E+1,0.00000000E+0 - ,0.28480180E+3,0.125E+3,0.790E+2,0.16406000E+1,0.00000000E+0 - ,0.29291770E+3,0.125E+3,0.800E+2,0.16406000E+1,0.00000000E+0 - ,0.42959510E+3,0.125E+3,0.810E+2,0.16406000E+1,0.00000000E+0 - ,0.41941490E+3,0.125E+3,0.820E+2,0.16406000E+1,0.00000000E+0 - ,0.38444960E+3,0.125E+3,0.830E+2,0.16406000E+1,0.00000000E+0 - ,0.36605470E+3,0.125E+3,0.840E+2,0.16406000E+1,0.00000000E+0 - ,0.33709280E+3,0.125E+3,0.850E+2,0.16406000E+1,0.00000000E+0 - ,0.30829470E+3,0.125E+3,0.860E+2,0.16406000E+1,0.00000000E+0 - ,0.10472098E+4,0.125E+3,0.870E+2,0.16406000E+1,0.00000000E+0 - ,0.10062859E+4,0.125E+3,0.880E+2,0.16406000E+1,0.00000000E+0 - ,0.88823000E+3,0.125E+3,0.890E+2,0.16406000E+1,0.00000000E+0 - ,0.79631050E+3,0.125E+3,0.900E+2,0.16406000E+1,0.00000000E+0 - ,0.79125770E+3,0.125E+3,0.910E+2,0.16406000E+1,0.00000000E+0 - ,0.76609840E+3,0.125E+3,0.920E+2,0.16406000E+1,0.00000000E+0 - ,0.78992350E+3,0.125E+3,0.930E+2,0.16406000E+1,0.00000000E+0 - ,0.76480610E+3,0.125E+3,0.940E+2,0.16406000E+1,0.00000000E+0 - ,0.42392700E+2,0.125E+3,0.101E+3,0.16406000E+1,0.00000000E+0 - ,0.13874910E+3,0.125E+3,0.103E+3,0.16406000E+1,0.98650000E+0 - ,0.17668170E+3,0.125E+3,0.104E+3,0.16406000E+1,0.98080000E+0 - ,0.13421360E+3,0.125E+3,0.105E+3,0.16406000E+1,0.97060000E+0 - ,0.10064630E+3,0.125E+3,0.106E+3,0.16406000E+1,0.98680000E+0 - ,0.69621500E+2,0.125E+3,0.107E+3,0.16406000E+1,0.99440000E+0 - ,0.50485800E+2,0.125E+3,0.108E+3,0.16406000E+1,0.99250000E+0 - ,0.34548100E+2,0.125E+3,0.109E+3,0.16406000E+1,0.99820000E+0 - ,0.20296760E+3,0.125E+3,0.111E+3,0.16406000E+1,0.96840000E+0 - ,0.31401190E+3,0.125E+3,0.112E+3,0.16406000E+1,0.96280000E+0 - ,0.31732870E+3,0.125E+3,0.113E+3,0.16406000E+1,0.96480000E+0 - ,0.25388000E+3,0.125E+3,0.114E+3,0.16406000E+1,0.95070000E+0 - ,0.20709950E+3,0.125E+3,0.115E+3,0.16406000E+1,0.99470000E+0 - ,0.17457750E+3,0.125E+3,0.116E+3,0.16406000E+1,0.99480000E+0 - ,0.14221510E+3,0.125E+3,0.117E+3,0.16406000E+1,0.99720000E+0 - ,0.27872590E+3,0.125E+3,0.119E+3,0.16406000E+1,0.97670000E+0 - ,0.53581490E+3,0.125E+3,0.120E+3,0.16406000E+1,0.98310000E+0 - ,0.27819650E+3,0.125E+3,0.121E+3,0.16406000E+1,0.18627000E+1 - ,0.26846570E+3,0.125E+3,0.122E+3,0.16406000E+1,0.18299000E+1 - ,0.26311270E+3,0.125E+3,0.123E+3,0.16406000E+1,0.19138000E+1 - ,0.26077730E+3,0.125E+3,0.124E+3,0.16406000E+1,0.18269000E+1 - ,0.23955540E+3,0.125E+3,0.125E+3,0.16406000E+1,0.16406000E+1 - ,0.24345200E+2,0.126E+3,0.100E+1,0.16483000E+1,0.91180000E+0 - ,0.16056000E+2,0.126E+3,0.200E+1,0.16483000E+1,0.00000000E+0 - ,0.37921170E+3,0.126E+3,0.300E+1,0.16483000E+1,0.00000000E+0 - ,0.21947750E+3,0.126E+3,0.400E+1,0.16483000E+1,0.00000000E+0 - ,0.14762980E+3,0.126E+3,0.500E+1,0.16483000E+1,0.00000000E+0 - ,0.99588000E+2,0.126E+3,0.600E+1,0.16483000E+1,0.00000000E+0 - ,0.69563800E+2,0.126E+3,0.700E+1,0.16483000E+1,0.00000000E+0 - ,0.52635100E+2,0.126E+3,0.800E+1,0.16483000E+1,0.00000000E+0 - ,0.39862800E+2,0.126E+3,0.900E+1,0.16483000E+1,0.00000000E+0 - ,0.30664800E+2,0.126E+3,0.100E+2,0.16483000E+1,0.00000000E+0 - ,0.45354440E+3,0.126E+3,0.110E+2,0.16483000E+1,0.00000000E+0 - ,0.34971160E+3,0.126E+3,0.120E+2,0.16483000E+1,0.00000000E+0 - ,0.32227810E+3,0.126E+3,0.130E+2,0.16483000E+1,0.00000000E+0 - ,0.25376380E+3,0.126E+3,0.140E+2,0.16483000E+1,0.00000000E+0 - ,0.19765690E+3,0.126E+3,0.150E+2,0.16483000E+1,0.00000000E+0 - ,0.16387940E+3,0.126E+3,0.160E+2,0.16483000E+1,0.00000000E+0 - ,0.13373240E+3,0.126E+3,0.170E+2,0.16483000E+1,0.00000000E+0 - ,0.10931550E+3,0.126E+3,0.180E+2,0.16483000E+1,0.00000000E+0 - ,0.74225200E+3,0.126E+3,0.190E+2,0.16483000E+1,0.00000000E+0 - ,0.61392330E+3,0.126E+3,0.200E+2,0.16483000E+1,0.00000000E+0 - ,0.50734010E+3,0.126E+3,0.210E+2,0.16483000E+1,0.00000000E+0 - ,0.48989960E+3,0.126E+3,0.220E+2,0.16483000E+1,0.00000000E+0 - ,0.44862620E+3,0.126E+3,0.230E+2,0.16483000E+1,0.00000000E+0 - ,0.35327090E+3,0.126E+3,0.240E+2,0.16483000E+1,0.00000000E+0 - ,0.38626020E+3,0.126E+3,0.250E+2,0.16483000E+1,0.00000000E+0 - ,0.30304800E+3,0.126E+3,0.260E+2,0.16483000E+1,0.00000000E+0 - ,0.32134480E+3,0.126E+3,0.270E+2,0.16483000E+1,0.00000000E+0 - ,0.33106140E+3,0.126E+3,0.280E+2,0.16483000E+1,0.00000000E+0 - ,0.25370380E+3,0.126E+3,0.290E+2,0.16483000E+1,0.00000000E+0 - ,0.26053410E+3,0.126E+3,0.300E+2,0.16483000E+1,0.00000000E+0 - ,0.30855290E+3,0.126E+3,0.310E+2,0.16483000E+1,0.00000000E+0 - ,0.27197110E+3,0.126E+3,0.320E+2,0.16483000E+1,0.00000000E+0 - ,0.23176180E+3,0.126E+3,0.330E+2,0.16483000E+1,0.00000000E+0 - ,0.20779480E+3,0.126E+3,0.340E+2,0.16483000E+1,0.00000000E+0 - ,0.18168360E+3,0.126E+3,0.350E+2,0.16483000E+1,0.00000000E+0 - ,0.15786610E+3,0.126E+3,0.360E+2,0.16483000E+1,0.00000000E+0 - ,0.83179600E+3,0.126E+3,0.370E+2,0.16483000E+1,0.00000000E+0 - ,0.73123300E+3,0.126E+3,0.380E+2,0.16483000E+1,0.00000000E+0 - ,0.64066410E+3,0.126E+3,0.390E+2,0.16483000E+1,0.00000000E+0 - ,0.57577520E+3,0.126E+3,0.400E+2,0.16483000E+1,0.00000000E+0 - ,0.52495880E+3,0.126E+3,0.410E+2,0.16483000E+1,0.00000000E+0 - ,0.40508170E+3,0.126E+3,0.420E+2,0.16483000E+1,0.00000000E+0 - ,0.45208310E+3,0.126E+3,0.430E+2,0.16483000E+1,0.00000000E+0 - ,0.34423220E+3,0.126E+3,0.440E+2,0.16483000E+1,0.00000000E+0 - ,0.37640450E+3,0.126E+3,0.450E+2,0.16483000E+1,0.00000000E+0 - ,0.34902580E+3,0.126E+3,0.460E+2,0.16483000E+1,0.00000000E+0 - ,0.29090830E+3,0.126E+3,0.470E+2,0.16483000E+1,0.00000000E+0 - ,0.30752090E+3,0.126E+3,0.480E+2,0.16483000E+1,0.00000000E+0 - ,0.38606280E+3,0.126E+3,0.490E+2,0.16483000E+1,0.00000000E+0 - ,0.35691590E+3,0.126E+3,0.500E+2,0.16483000E+1,0.00000000E+0 - ,0.31786240E+3,0.126E+3,0.510E+2,0.16483000E+1,0.00000000E+0 - ,0.29473480E+3,0.126E+3,0.520E+2,0.16483000E+1,0.00000000E+0 - ,0.26629100E+3,0.126E+3,0.530E+2,0.16483000E+1,0.00000000E+0 - ,0.23921900E+3,0.126E+3,0.540E+2,0.16483000E+1,0.00000000E+0 - ,0.10130459E+4,0.126E+3,0.550E+2,0.16483000E+1,0.00000000E+0 - ,0.93186100E+3,0.126E+3,0.560E+2,0.16483000E+1,0.00000000E+0 - ,0.81889940E+3,0.126E+3,0.570E+2,0.16483000E+1,0.00000000E+0 - ,0.37545680E+3,0.126E+3,0.580E+2,0.16483000E+1,0.27991000E+1 - ,0.82577350E+3,0.126E+3,0.590E+2,0.16483000E+1,0.00000000E+0 - ,0.79302390E+3,0.126E+3,0.600E+2,0.16483000E+1,0.00000000E+0 - ,0.77315750E+3,0.126E+3,0.610E+2,0.16483000E+1,0.00000000E+0 - ,0.75488610E+3,0.126E+3,0.620E+2,0.16483000E+1,0.00000000E+0 - ,0.73868360E+3,0.126E+3,0.630E+2,0.16483000E+1,0.00000000E+0 - ,0.58077730E+3,0.126E+3,0.640E+2,0.16483000E+1,0.00000000E+0 - ,0.65347520E+3,0.126E+3,0.650E+2,0.16483000E+1,0.00000000E+0 - ,0.63025330E+3,0.126E+3,0.660E+2,0.16483000E+1,0.00000000E+0 - ,0.66633780E+3,0.126E+3,0.670E+2,0.16483000E+1,0.00000000E+0 - ,0.65221550E+3,0.126E+3,0.680E+2,0.16483000E+1,0.00000000E+0 - ,0.63947820E+3,0.126E+3,0.690E+2,0.16483000E+1,0.00000000E+0 - ,0.63201230E+3,0.126E+3,0.700E+2,0.16483000E+1,0.00000000E+0 - ,0.53244100E+3,0.126E+3,0.710E+2,0.16483000E+1,0.00000000E+0 - ,0.52361220E+3,0.126E+3,0.720E+2,0.16483000E+1,0.00000000E+0 - ,0.47773970E+3,0.126E+3,0.730E+2,0.16483000E+1,0.00000000E+0 - ,0.40318600E+3,0.126E+3,0.740E+2,0.16483000E+1,0.00000000E+0 - ,0.41018490E+3,0.126E+3,0.750E+2,0.16483000E+1,0.00000000E+0 - ,0.37164480E+3,0.126E+3,0.760E+2,0.16483000E+1,0.00000000E+0 - ,0.34026720E+3,0.126E+3,0.770E+2,0.16483000E+1,0.00000000E+0 - ,0.28250560E+3,0.126E+3,0.780E+2,0.16483000E+1,0.00000000E+0 - ,0.26390350E+3,0.126E+3,0.790E+2,0.16483000E+1,0.00000000E+0 - ,0.27150750E+3,0.126E+3,0.800E+2,0.16483000E+1,0.00000000E+0 - ,0.39615750E+3,0.126E+3,0.810E+2,0.16483000E+1,0.00000000E+0 - ,0.38734040E+3,0.126E+3,0.820E+2,0.16483000E+1,0.00000000E+0 - ,0.35575280E+3,0.126E+3,0.830E+2,0.16483000E+1,0.00000000E+0 - ,0.33914780E+3,0.126E+3,0.840E+2,0.16483000E+1,0.00000000E+0 - ,0.31279910E+3,0.126E+3,0.850E+2,0.16483000E+1,0.00000000E+0 - ,0.28650170E+3,0.126E+3,0.860E+2,0.16483000E+1,0.00000000E+0 - ,0.95682050E+3,0.126E+3,0.870E+2,0.16483000E+1,0.00000000E+0 - ,0.92149130E+3,0.126E+3,0.880E+2,0.16483000E+1,0.00000000E+0 - ,0.81480800E+3,0.126E+3,0.890E+2,0.16483000E+1,0.00000000E+0 - ,0.73215470E+3,0.126E+3,0.900E+2,0.16483000E+1,0.00000000E+0 - ,0.72684330E+3,0.126E+3,0.910E+2,0.16483000E+1,0.00000000E+0 - ,0.70377870E+3,0.126E+3,0.920E+2,0.16483000E+1,0.00000000E+0 - ,0.72468840E+3,0.126E+3,0.930E+2,0.16483000E+1,0.00000000E+0 - ,0.70180630E+3,0.126E+3,0.940E+2,0.16483000E+1,0.00000000E+0 - ,0.39274200E+2,0.126E+3,0.101E+3,0.16483000E+1,0.00000000E+0 - ,0.12754920E+3,0.126E+3,0.103E+3,0.16483000E+1,0.98650000E+0 - ,0.16261080E+3,0.126E+3,0.104E+3,0.16483000E+1,0.98080000E+0 - ,0.12411700E+3,0.126E+3,0.105E+3,0.16483000E+1,0.97060000E+0 - ,0.93384800E+2,0.126E+3,0.106E+3,0.16483000E+1,0.98680000E+0 - ,0.64846800E+2,0.126E+3,0.107E+3,0.16483000E+1,0.99440000E+0 - ,0.47181600E+2,0.126E+3,0.108E+3,0.16483000E+1,0.99250000E+0 - ,0.32432100E+2,0.126E+3,0.109E+3,0.16483000E+1,0.99820000E+0 - ,0.18646690E+3,0.126E+3,0.111E+3,0.16483000E+1,0.96840000E+0 - ,0.28833710E+3,0.126E+3,0.112E+3,0.16483000E+1,0.96280000E+0 - ,0.29202470E+3,0.126E+3,0.113E+3,0.16483000E+1,0.96480000E+0 - ,0.23448430E+3,0.126E+3,0.114E+3,0.16483000E+1,0.95070000E+0 - ,0.19184290E+3,0.126E+3,0.115E+3,0.16483000E+1,0.99470000E+0 - ,0.16207500E+3,0.126E+3,0.116E+3,0.16483000E+1,0.99480000E+0 - ,0.13234800E+3,0.126E+3,0.117E+3,0.16483000E+1,0.99720000E+0 - ,0.25675790E+3,0.126E+3,0.119E+3,0.16483000E+1,0.97670000E+0 - ,0.49074810E+3,0.126E+3,0.120E+3,0.16483000E+1,0.98310000E+0 - ,0.25688890E+3,0.126E+3,0.121E+3,0.16483000E+1,0.18627000E+1 - ,0.24796360E+3,0.126E+3,0.122E+3,0.16483000E+1,0.18299000E+1 - ,0.24301480E+3,0.126E+3,0.123E+3,0.16483000E+1,0.19138000E+1 - ,0.24078340E+3,0.126E+3,0.124E+3,0.16483000E+1,0.18269000E+1 - ,0.22153400E+3,0.126E+3,0.125E+3,0.16483000E+1,0.16406000E+1 - ,0.20499250E+3,0.126E+3,0.126E+3,0.16483000E+1,0.16483000E+1 - ,0.23231000E+2,0.127E+3,0.100E+1,0.17149000E+1,0.91180000E+0 - ,0.15354500E+2,0.127E+3,0.200E+1,0.17149000E+1,0.00000000E+0 - ,0.36237460E+3,0.127E+3,0.300E+1,0.17149000E+1,0.00000000E+0 - ,0.20922270E+3,0.127E+3,0.400E+1,0.17149000E+1,0.00000000E+0 - ,0.14074280E+3,0.127E+3,0.500E+1,0.17149000E+1,0.00000000E+0 - ,0.95005100E+2,0.127E+3,0.600E+1,0.17149000E+1,0.00000000E+0 - ,0.66421800E+2,0.127E+3,0.700E+1,0.17149000E+1,0.00000000E+0 - ,0.50301600E+2,0.127E+3,0.800E+1,0.17149000E+1,0.00000000E+0 - ,0.38131300E+2,0.127E+3,0.900E+1,0.17149000E+1,0.00000000E+0 - ,0.29359800E+2,0.127E+3,0.100E+2,0.17149000E+1,0.00000000E+0 - ,0.43337360E+3,0.127E+3,0.110E+2,0.17149000E+1,0.00000000E+0 - ,0.33347670E+3,0.127E+3,0.120E+2,0.17149000E+1,0.00000000E+0 - ,0.30725400E+3,0.127E+3,0.130E+2,0.17149000E+1,0.00000000E+0 - ,0.24191590E+3,0.127E+3,0.140E+2,0.17149000E+1,0.00000000E+0 - ,0.18848520E+3,0.127E+3,0.150E+2,0.17149000E+1,0.00000000E+0 - ,0.15634230E+3,0.127E+3,0.160E+2,0.17149000E+1,0.00000000E+0 - ,0.12765130E+3,0.127E+3,0.170E+2,0.17149000E+1,0.00000000E+0 - ,0.10440910E+3,0.127E+3,0.180E+2,0.17149000E+1,0.00000000E+0 - ,0.71018180E+3,0.127E+3,0.190E+2,0.17149000E+1,0.00000000E+0 - ,0.58595780E+3,0.127E+3,0.200E+2,0.17149000E+1,0.00000000E+0 - ,0.48407230E+3,0.127E+3,0.210E+2,0.17149000E+1,0.00000000E+0 - ,0.46739840E+3,0.127E+3,0.220E+2,0.17149000E+1,0.00000000E+0 - ,0.42799360E+3,0.127E+3,0.230E+2,0.17149000E+1,0.00000000E+0 - ,0.33714360E+3,0.127E+3,0.240E+2,0.17149000E+1,0.00000000E+0 - ,0.36847190E+3,0.127E+3,0.250E+2,0.17149000E+1,0.00000000E+0 - ,0.28919370E+3,0.127E+3,0.260E+2,0.17149000E+1,0.00000000E+0 - ,0.30649680E+3,0.127E+3,0.270E+2,0.17149000E+1,0.00000000E+0 - ,0.31577130E+3,0.127E+3,0.280E+2,0.17149000E+1,0.00000000E+0 - ,0.24210300E+3,0.127E+3,0.290E+2,0.17149000E+1,0.00000000E+0 - ,0.24848550E+3,0.127E+3,0.300E+2,0.17149000E+1,0.00000000E+0 - ,0.29424080E+3,0.127E+3,0.310E+2,0.17149000E+1,0.00000000E+0 - ,0.25932240E+3,0.127E+3,0.320E+2,0.17149000E+1,0.00000000E+0 - ,0.22102330E+3,0.127E+3,0.330E+2,0.17149000E+1,0.00000000E+0 - ,0.19822130E+3,0.127E+3,0.340E+2,0.17149000E+1,0.00000000E+0 - ,0.17337930E+3,0.127E+3,0.350E+2,0.17149000E+1,0.00000000E+0 - ,0.15071900E+3,0.127E+3,0.360E+2,0.17149000E+1,0.00000000E+0 - ,0.79588590E+3,0.127E+3,0.370E+2,0.17149000E+1,0.00000000E+0 - ,0.69807620E+3,0.127E+3,0.380E+2,0.17149000E+1,0.00000000E+0 - ,0.61134030E+3,0.127E+3,0.390E+2,0.17149000E+1,0.00000000E+0 - ,0.54932940E+3,0.127E+3,0.400E+2,0.17149000E+1,0.00000000E+0 - ,0.50083550E+3,0.127E+3,0.410E+2,0.17149000E+1,0.00000000E+0 - ,0.38652450E+3,0.127E+3,0.420E+2,0.17149000E+1,0.00000000E+0 - ,0.43134780E+3,0.127E+3,0.430E+2,0.17149000E+1,0.00000000E+0 - ,0.32850150E+3,0.127E+3,0.440E+2,0.17149000E+1,0.00000000E+0 - ,0.35910570E+3,0.127E+3,0.450E+2,0.17149000E+1,0.00000000E+0 - ,0.33298960E+3,0.127E+3,0.460E+2,0.17149000E+1,0.00000000E+0 - ,0.27768230E+3,0.127E+3,0.470E+2,0.17149000E+1,0.00000000E+0 - ,0.29340740E+3,0.127E+3,0.480E+2,0.17149000E+1,0.00000000E+0 - ,0.36832240E+3,0.127E+3,0.490E+2,0.17149000E+1,0.00000000E+0 - ,0.34042650E+3,0.127E+3,0.500E+2,0.17149000E+1,0.00000000E+0 - ,0.30318560E+3,0.127E+3,0.510E+2,0.17149000E+1,0.00000000E+0 - ,0.28116330E+3,0.127E+3,0.520E+2,0.17149000E+1,0.00000000E+0 - ,0.25408770E+3,0.127E+3,0.530E+2,0.17149000E+1,0.00000000E+0 - ,0.22832560E+3,0.127E+3,0.540E+2,0.17149000E+1,0.00000000E+0 - ,0.96954620E+3,0.127E+3,0.550E+2,0.17149000E+1,0.00000000E+0 - ,0.88993460E+3,0.127E+3,0.560E+2,0.17149000E+1,0.00000000E+0 - ,0.78163500E+3,0.127E+3,0.570E+2,0.17149000E+1,0.00000000E+0 - ,0.35816770E+3,0.127E+3,0.580E+2,0.17149000E+1,0.27991000E+1 - ,0.78858090E+3,0.127E+3,0.590E+2,0.17149000E+1,0.00000000E+0 - ,0.75717110E+3,0.127E+3,0.600E+2,0.17149000E+1,0.00000000E+0 - ,0.73817480E+3,0.127E+3,0.610E+2,0.17149000E+1,0.00000000E+0 - ,0.72070520E+3,0.127E+3,0.620E+2,0.17149000E+1,0.00000000E+0 - ,0.70521290E+3,0.127E+3,0.630E+2,0.17149000E+1,0.00000000E+0 - ,0.55434620E+3,0.127E+3,0.640E+2,0.17149000E+1,0.00000000E+0 - ,0.62444810E+3,0.127E+3,0.650E+2,0.17149000E+1,0.00000000E+0 - ,0.60226720E+3,0.127E+3,0.660E+2,0.17149000E+1,0.00000000E+0 - ,0.63603570E+3,0.127E+3,0.670E+2,0.17149000E+1,0.00000000E+0 - ,0.62253720E+3,0.127E+3,0.680E+2,0.17149000E+1,0.00000000E+0 - ,0.61036000E+3,0.127E+3,0.690E+2,0.17149000E+1,0.00000000E+0 - ,0.60323520E+3,0.127E+3,0.700E+2,0.17149000E+1,0.00000000E+0 - ,0.50816310E+3,0.127E+3,0.710E+2,0.17149000E+1,0.00000000E+0 - ,0.49947010E+3,0.127E+3,0.720E+2,0.17149000E+1,0.00000000E+0 - ,0.45568660E+3,0.127E+3,0.730E+2,0.17149000E+1,0.00000000E+0 - ,0.38467230E+3,0.127E+3,0.740E+2,0.17149000E+1,0.00000000E+0 - ,0.39131100E+3,0.127E+3,0.750E+2,0.17149000E+1,0.00000000E+0 - ,0.35455820E+3,0.127E+3,0.760E+2,0.17149000E+1,0.00000000E+0 - ,0.32464910E+3,0.127E+3,0.770E+2,0.17149000E+1,0.00000000E+0 - ,0.26963380E+3,0.127E+3,0.780E+2,0.17149000E+1,0.00000000E+0 - ,0.25191510E+3,0.127E+3,0.790E+2,0.17149000E+1,0.00000000E+0 - ,0.25913820E+3,0.127E+3,0.800E+2,0.17149000E+1,0.00000000E+0 - ,0.37809130E+3,0.127E+3,0.810E+2,0.17149000E+1,0.00000000E+0 - ,0.36955020E+3,0.127E+3,0.820E+2,0.17149000E+1,0.00000000E+0 - ,0.33939390E+3,0.127E+3,0.830E+2,0.17149000E+1,0.00000000E+0 - ,0.32357100E+3,0.127E+3,0.840E+2,0.17149000E+1,0.00000000E+0 - ,0.29847990E+3,0.127E+3,0.850E+2,0.17149000E+1,0.00000000E+0 - ,0.27345010E+3,0.127E+3,0.860E+2,0.17149000E+1,0.00000000E+0 - ,0.91516100E+3,0.127E+3,0.870E+2,0.17149000E+1,0.00000000E+0 - ,0.87983390E+3,0.127E+3,0.880E+2,0.17149000E+1,0.00000000E+0 - ,0.77761650E+3,0.127E+3,0.890E+2,0.17149000E+1,0.00000000E+0 - ,0.69856190E+3,0.127E+3,0.900E+2,0.17149000E+1,0.00000000E+0 - ,0.69371430E+3,0.127E+3,0.910E+2,0.17149000E+1,0.00000000E+0 - ,0.67170070E+3,0.127E+3,0.920E+2,0.17149000E+1,0.00000000E+0 - ,0.69179850E+3,0.127E+3,0.930E+2,0.17149000E+1,0.00000000E+0 - ,0.66991580E+3,0.127E+3,0.940E+2,0.17149000E+1,0.00000000E+0 - ,0.37449600E+2,0.127E+3,0.101E+3,0.17149000E+1,0.00000000E+0 - ,0.12160370E+3,0.127E+3,0.103E+3,0.17149000E+1,0.98650000E+0 - ,0.15505540E+3,0.127E+3,0.104E+3,0.17149000E+1,0.98080000E+0 - ,0.11835300E+3,0.127E+3,0.105E+3,0.17149000E+1,0.97060000E+0 - ,0.89099200E+2,0.127E+3,0.106E+3,0.17149000E+1,0.98680000E+0 - ,0.61925600E+2,0.127E+3,0.107E+3,0.17149000E+1,0.99440000E+0 - ,0.45100200E+2,0.127E+3,0.108E+3,0.17149000E+1,0.99250000E+0 - ,0.31051600E+2,0.127E+3,0.109E+3,0.17149000E+1,0.99820000E+0 - ,0.17783550E+3,0.127E+3,0.111E+3,0.17149000E+1,0.96840000E+0 - ,0.27498400E+3,0.127E+3,0.112E+3,0.17149000E+1,0.96280000E+0 - ,0.27841730E+3,0.127E+3,0.113E+3,0.17149000E+1,0.96480000E+0 - ,0.22355480E+3,0.127E+3,0.114E+3,0.17149000E+1,0.95070000E+0 - ,0.18295110E+3,0.127E+3,0.115E+3,0.17149000E+1,0.99470000E+0 - ,0.15462430E+3,0.127E+3,0.116E+3,0.17149000E+1,0.99480000E+0 - ,0.12633190E+3,0.127E+3,0.117E+3,0.17149000E+1,0.99720000E+0 - ,0.24501880E+3,0.127E+3,0.119E+3,0.17149000E+1,0.97670000E+0 - ,0.46868990E+3,0.127E+3,0.120E+3,0.17149000E+1,0.98310000E+0 - ,0.24500350E+3,0.127E+3,0.121E+3,0.17149000E+1,0.18627000E+1 - ,0.23653250E+3,0.127E+3,0.122E+3,0.17149000E+1,0.18299000E+1 - ,0.23181800E+3,0.127E+3,0.123E+3,0.17149000E+1,0.19138000E+1 - ,0.22970220E+3,0.127E+3,0.124E+3,0.17149000E+1,0.18269000E+1 - ,0.21130250E+3,0.127E+3,0.125E+3,0.17149000E+1,0.16406000E+1 - ,0.19554300E+3,0.127E+3,0.126E+3,0.17149000E+1,0.16483000E+1 - ,0.18654620E+3,0.127E+3,0.127E+3,0.17149000E+1,0.17149000E+1 - ,0.22682200E+2,0.128E+3,0.100E+1,0.17937000E+1,0.91180000E+0 - ,0.14983300E+2,0.128E+3,0.200E+1,0.17937000E+1,0.00000000E+0 - ,0.35596060E+3,0.128E+3,0.300E+1,0.17937000E+1,0.00000000E+0 - ,0.20490860E+3,0.128E+3,0.400E+1,0.17937000E+1,0.00000000E+0 - ,0.13762540E+3,0.128E+3,0.500E+1,0.17937000E+1,0.00000000E+0 - ,0.92810700E+2,0.128E+3,0.600E+1,0.17937000E+1,0.00000000E+0 - ,0.64851900E+2,0.128E+3,0.700E+1,0.17937000E+1,0.00000000E+0 - ,0.49099600E+2,0.128E+3,0.800E+1,0.17937000E+1,0.00000000E+0 - ,0.37215800E+2,0.128E+3,0.900E+1,0.17937000E+1,0.00000000E+0 - ,0.28655400E+2,0.128E+3,0.100E+2,0.17937000E+1,0.00000000E+0 - ,0.42564550E+3,0.128E+3,0.110E+2,0.17937000E+1,0.00000000E+0 - ,0.32678640E+3,0.128E+3,0.120E+2,0.17937000E+1,0.00000000E+0 - ,0.30082710E+3,0.128E+3,0.130E+2,0.17937000E+1,0.00000000E+0 - ,0.23659520E+3,0.128E+3,0.140E+2,0.17937000E+1,0.00000000E+0 - ,0.18418470E+3,0.128E+3,0.150E+2,0.17937000E+1,0.00000000E+0 - ,0.15270360E+3,0.128E+3,0.160E+2,0.17937000E+1,0.00000000E+0 - ,0.12463170E+3,0.128E+3,0.170E+2,0.17937000E+1,0.00000000E+0 - ,0.10191160E+3,0.128E+3,0.180E+2,0.17937000E+1,0.00000000E+0 - ,0.69776500E+3,0.128E+3,0.190E+2,0.17937000E+1,0.00000000E+0 - ,0.57475220E+3,0.128E+3,0.200E+2,0.17937000E+1,0.00000000E+0 - ,0.47462540E+3,0.128E+3,0.210E+2,0.17937000E+1,0.00000000E+0 - ,0.45811360E+3,0.128E+3,0.220E+2,0.17937000E+1,0.00000000E+0 - ,0.41940370E+3,0.128E+3,0.230E+2,0.17937000E+1,0.00000000E+0 - ,0.33038080E+3,0.128E+3,0.240E+2,0.17937000E+1,0.00000000E+0 - ,0.36096920E+3,0.128E+3,0.250E+2,0.17937000E+1,0.00000000E+0 - ,0.28330110E+3,0.128E+3,0.260E+2,0.17937000E+1,0.00000000E+0 - ,0.30010550E+3,0.128E+3,0.270E+2,0.17937000E+1,0.00000000E+0 - ,0.30925430E+3,0.128E+3,0.280E+2,0.17937000E+1,0.00000000E+0 - ,0.23712000E+3,0.128E+3,0.290E+2,0.17937000E+1,0.00000000E+0 - ,0.24319600E+3,0.128E+3,0.300E+2,0.17937000E+1,0.00000000E+0 - ,0.28800730E+3,0.128E+3,0.310E+2,0.17937000E+1,0.00000000E+0 - ,0.25361340E+3,0.128E+3,0.320E+2,0.17937000E+1,0.00000000E+0 - ,0.21600430E+3,0.128E+3,0.330E+2,0.17937000E+1,0.00000000E+0 - ,0.19364320E+3,0.128E+3,0.340E+2,0.17937000E+1,0.00000000E+0 - ,0.16931330E+3,0.128E+3,0.350E+2,0.17937000E+1,0.00000000E+0 - ,0.14714170E+3,0.128E+3,0.360E+2,0.17937000E+1,0.00000000E+0 - ,0.78184410E+3,0.128E+3,0.370E+2,0.17937000E+1,0.00000000E+0 - ,0.68477150E+3,0.128E+3,0.380E+2,0.17937000E+1,0.00000000E+0 - ,0.59926520E+3,0.128E+3,0.390E+2,0.17937000E+1,0.00000000E+0 - ,0.53824800E+3,0.128E+3,0.400E+2,0.17937000E+1,0.00000000E+0 - ,0.49059730E+3,0.128E+3,0.410E+2,0.17937000E+1,0.00000000E+0 - ,0.37845940E+3,0.128E+3,0.420E+2,0.17937000E+1,0.00000000E+0 - ,0.42241440E+3,0.128E+3,0.430E+2,0.17937000E+1,0.00000000E+0 - ,0.32155060E+3,0.128E+3,0.440E+2,0.17937000E+1,0.00000000E+0 - ,0.35149860E+3,0.128E+3,0.450E+2,0.17937000E+1,0.00000000E+0 - ,0.32588580E+3,0.128E+3,0.460E+2,0.17937000E+1,0.00000000E+0 - ,0.27180880E+3,0.128E+3,0.470E+2,0.17937000E+1,0.00000000E+0 - ,0.28709580E+3,0.128E+3,0.480E+2,0.17937000E+1,0.00000000E+0 - ,0.36057310E+3,0.128E+3,0.490E+2,0.17937000E+1,0.00000000E+0 - ,0.33303010E+3,0.128E+3,0.500E+2,0.17937000E+1,0.00000000E+0 - ,0.29640640E+3,0.128E+3,0.510E+2,0.17937000E+1,0.00000000E+0 - ,0.27477510E+3,0.128E+3,0.520E+2,0.17937000E+1,0.00000000E+0 - ,0.24822370E+3,0.128E+3,0.530E+2,0.17937000E+1,0.00000000E+0 - ,0.22298560E+3,0.128E+3,0.540E+2,0.17937000E+1,0.00000000E+0 - ,0.95234010E+3,0.128E+3,0.550E+2,0.17937000E+1,0.00000000E+0 - ,0.87316220E+3,0.128E+3,0.560E+2,0.17937000E+1,0.00000000E+0 - ,0.76636770E+3,0.128E+3,0.570E+2,0.17937000E+1,0.00000000E+0 - ,0.35020540E+3,0.128E+3,0.580E+2,0.17937000E+1,0.27991000E+1 - ,0.77355490E+3,0.128E+3,0.590E+2,0.17937000E+1,0.00000000E+0 - ,0.74267570E+3,0.128E+3,0.600E+2,0.17937000E+1,0.00000000E+0 - ,0.72402070E+3,0.128E+3,0.610E+2,0.17937000E+1,0.00000000E+0 - ,0.70686710E+3,0.128E+3,0.620E+2,0.17937000E+1,0.00000000E+0 - ,0.69165380E+3,0.128E+3,0.630E+2,0.17937000E+1,0.00000000E+0 - ,0.54327420E+3,0.128E+3,0.640E+2,0.17937000E+1,0.00000000E+0 - ,0.61263290E+3,0.128E+3,0.650E+2,0.17937000E+1,0.00000000E+0 - ,0.59076940E+3,0.128E+3,0.660E+2,0.17937000E+1,0.00000000E+0 - ,0.62369960E+3,0.128E+3,0.670E+2,0.17937000E+1,0.00000000E+0 - ,0.61045110E+3,0.128E+3,0.680E+2,0.17937000E+1,0.00000000E+0 - ,0.59849350E+3,0.128E+3,0.690E+2,0.17937000E+1,0.00000000E+0 - ,0.59152550E+3,0.128E+3,0.700E+2,0.17937000E+1,0.00000000E+0 - ,0.49802530E+3,0.128E+3,0.710E+2,0.17937000E+1,0.00000000E+0 - ,0.48915250E+3,0.128E+3,0.720E+2,0.17937000E+1,0.00000000E+0 - ,0.44609160E+3,0.128E+3,0.730E+2,0.17937000E+1,0.00000000E+0 - ,0.37646650E+3,0.128E+3,0.740E+2,0.17937000E+1,0.00000000E+0 - ,0.38290120E+3,0.128E+3,0.750E+2,0.17937000E+1,0.00000000E+0 - ,0.34682510E+3,0.128E+3,0.760E+2,0.17937000E+1,0.00000000E+0 - ,0.31748840E+3,0.128E+3,0.770E+2,0.17937000E+1,0.00000000E+0 - ,0.26363220E+3,0.128E+3,0.780E+2,0.17937000E+1,0.00000000E+0 - ,0.24629020E+3,0.128E+3,0.790E+2,0.17937000E+1,0.00000000E+0 - ,0.25331490E+3,0.128E+3,0.800E+2,0.17937000E+1,0.00000000E+0 - ,0.37009330E+3,0.128E+3,0.810E+2,0.17937000E+1,0.00000000E+0 - ,0.36153570E+3,0.128E+3,0.820E+2,0.17937000E+1,0.00000000E+0 - ,0.33183930E+3,0.128E+3,0.830E+2,0.17937000E+1,0.00000000E+0 - ,0.31626530E+3,0.128E+3,0.840E+2,0.17937000E+1,0.00000000E+0 - ,0.29163450E+3,0.128E+3,0.850E+2,0.17937000E+1,0.00000000E+0 - ,0.26709740E+3,0.128E+3,0.860E+2,0.17937000E+1,0.00000000E+0 - ,0.89847060E+3,0.128E+3,0.870E+2,0.17937000E+1,0.00000000E+0 - ,0.86294020E+3,0.128E+3,0.880E+2,0.17937000E+1,0.00000000E+0 - ,0.76220730E+3,0.128E+3,0.890E+2,0.17937000E+1,0.00000000E+0 - ,0.68424210E+3,0.128E+3,0.900E+2,0.17937000E+1,0.00000000E+0 - ,0.67974920E+3,0.128E+3,0.910E+2,0.17937000E+1,0.00000000E+0 - ,0.65817270E+3,0.128E+3,0.920E+2,0.17937000E+1,0.00000000E+0 - ,0.67818560E+3,0.128E+3,0.930E+2,0.17937000E+1,0.00000000E+0 - ,0.65668000E+3,0.128E+3,0.940E+2,0.17937000E+1,0.00000000E+0 - ,0.36590100E+2,0.128E+3,0.101E+3,0.17937000E+1,0.00000000E+0 - ,0.11907250E+3,0.128E+3,0.103E+3,0.17937000E+1,0.98650000E+0 - ,0.15177980E+3,0.128E+3,0.104E+3,0.17937000E+1,0.98080000E+0 - ,0.11570000E+3,0.128E+3,0.105E+3,0.17937000E+1,0.97060000E+0 - ,0.87043200E+2,0.128E+3,0.106E+3,0.17937000E+1,0.98680000E+0 - ,0.60460800E+2,0.128E+3,0.107E+3,0.17937000E+1,0.99440000E+0 - ,0.44017300E+2,0.128E+3,0.108E+3,0.17937000E+1,0.99250000E+0 - ,0.30300400E+2,0.128E+3,0.109E+3,0.17937000E+1,0.99820000E+0 - ,0.17420010E+3,0.128E+3,0.111E+3,0.17937000E+1,0.96840000E+0 - ,0.26937790E+3,0.128E+3,0.112E+3,0.17937000E+1,0.96280000E+0 - ,0.27254090E+3,0.128E+3,0.113E+3,0.17937000E+1,0.96480000E+0 - ,0.21860660E+3,0.128E+3,0.114E+3,0.17937000E+1,0.95070000E+0 - ,0.17877350E+3,0.128E+3,0.115E+3,0.17937000E+1,0.99470000E+0 - ,0.15102860E+3,0.128E+3,0.116E+3,0.17937000E+1,0.99480000E+0 - ,0.12334570E+3,0.128E+3,0.117E+3,0.17937000E+1,0.99720000E+0 - ,0.23988490E+3,0.128E+3,0.119E+3,0.17937000E+1,0.97670000E+0 - ,0.45968120E+3,0.128E+3,0.120E+3,0.17937000E+1,0.98310000E+0 - ,0.23965630E+3,0.128E+3,0.121E+3,0.17937000E+1,0.18627000E+1 - ,0.23136310E+3,0.128E+3,0.122E+3,0.17937000E+1,0.18299000E+1 - ,0.22676010E+3,0.128E+3,0.123E+3,0.17937000E+1,0.19138000E+1 - ,0.22471760E+3,0.128E+3,0.124E+3,0.17937000E+1,0.18269000E+1 - ,0.20661260E+3,0.128E+3,0.125E+3,0.17937000E+1,0.16406000E+1 - ,0.19117980E+3,0.128E+3,0.126E+3,0.17937000E+1,0.16483000E+1 - ,0.18238760E+3,0.128E+3,0.127E+3,0.17937000E+1,0.17149000E+1 - ,0.17833110E+3,0.128E+3,0.128E+3,0.17937000E+1,0.17937000E+1 - ,0.22155000E+2,0.129E+3,0.100E+1,0.95760000E+0,0.91180000E+0 - ,0.14514700E+2,0.129E+3,0.200E+1,0.95760000E+0,0.00000000E+0 - ,0.36743080E+3,0.129E+3,0.300E+1,0.95760000E+0,0.00000000E+0 - ,0.20593130E+3,0.129E+3,0.400E+1,0.95760000E+0,0.00000000E+0 - ,0.13637050E+3,0.129E+3,0.500E+1,0.95760000E+0,0.00000000E+0 - ,0.91102500E+2,0.129E+3,0.600E+1,0.95760000E+0,0.00000000E+0 - ,0.63270900E+2,0.129E+3,0.700E+1,0.95760000E+0,0.00000000E+0 - ,0.47723900E+2,0.129E+3,0.800E+1,0.95760000E+0,0.00000000E+0 - ,0.36074900E+2,0.129E+3,0.900E+1,0.95760000E+0,0.00000000E+0 - ,0.27728200E+2,0.129E+3,0.100E+2,0.95760000E+0,0.00000000E+0 - ,0.43871980E+3,0.129E+3,0.110E+2,0.95760000E+0,0.00000000E+0 - ,0.33000180E+3,0.129E+3,0.120E+2,0.95760000E+0,0.00000000E+0 - ,0.30146500E+3,0.129E+3,0.130E+2,0.95760000E+0,0.00000000E+0 - ,0.23475480E+3,0.129E+3,0.140E+2,0.95760000E+0,0.00000000E+0 - ,0.18132670E+3,0.129E+3,0.150E+2,0.95760000E+0,0.00000000E+0 - ,0.14964210E+3,0.129E+3,0.160E+2,0.95760000E+0,0.00000000E+0 - ,0.12163290E+3,0.129E+3,0.170E+2,0.95760000E+0,0.00000000E+0 - ,0.99139800E+2,0.129E+3,0.180E+2,0.95760000E+0,0.00000000E+0 - ,0.72200020E+3,0.129E+3,0.190E+2,0.95760000E+0,0.00000000E+0 - ,0.58537040E+3,0.129E+3,0.200E+2,0.95760000E+0,0.00000000E+0 - ,0.48164720E+3,0.129E+3,0.210E+2,0.95760000E+0,0.00000000E+0 - ,0.46339240E+3,0.129E+3,0.220E+2,0.95760000E+0,0.00000000E+0 - ,0.42341930E+3,0.129E+3,0.230E+2,0.95760000E+0,0.00000000E+0 - ,0.33350140E+3,0.129E+3,0.240E+2,0.95760000E+0,0.00000000E+0 - ,0.36341710E+3,0.129E+3,0.250E+2,0.95760000E+0,0.00000000E+0 - ,0.28510180E+3,0.129E+3,0.260E+2,0.95760000E+0,0.00000000E+0 - ,0.30073560E+3,0.129E+3,0.270E+2,0.95760000E+0,0.00000000E+0 - ,0.31051330E+3,0.129E+3,0.280E+2,0.95760000E+0,0.00000000E+0 - ,0.23812070E+3,0.129E+3,0.290E+2,0.95760000E+0,0.00000000E+0 - ,0.24268930E+3,0.129E+3,0.300E+2,0.95760000E+0,0.00000000E+0 - ,0.28785200E+3,0.129E+3,0.310E+2,0.95760000E+0,0.00000000E+0 - ,0.25153860E+3,0.129E+3,0.320E+2,0.95760000E+0,0.00000000E+0 - ,0.21283460E+3,0.129E+3,0.330E+2,0.95760000E+0,0.00000000E+0 - ,0.19007710E+3,0.129E+3,0.340E+2,0.95760000E+0,0.00000000E+0 - ,0.16558600E+3,0.129E+3,0.350E+2,0.95760000E+0,0.00000000E+0 - ,0.14345250E+3,0.129E+3,0.360E+2,0.95760000E+0,0.00000000E+0 - ,0.80787860E+3,0.129E+3,0.370E+2,0.95760000E+0,0.00000000E+0 - ,0.69786230E+3,0.129E+3,0.380E+2,0.95760000E+0,0.00000000E+0 - ,0.60685850E+3,0.129E+3,0.390E+2,0.95760000E+0,0.00000000E+0 - ,0.54294990E+3,0.129E+3,0.400E+2,0.95760000E+0,0.00000000E+0 - ,0.49363630E+3,0.129E+3,0.410E+2,0.95760000E+0,0.00000000E+0 - ,0.37922990E+3,0.129E+3,0.420E+2,0.95760000E+0,0.00000000E+0 - ,0.42391540E+3,0.129E+3,0.430E+2,0.95760000E+0,0.00000000E+0 - ,0.32125020E+3,0.129E+3,0.440E+2,0.95760000E+0,0.00000000E+0 - ,0.35112220E+3,0.129E+3,0.450E+2,0.95760000E+0,0.00000000E+0 - ,0.32504660E+3,0.129E+3,0.460E+2,0.95760000E+0,0.00000000E+0 - ,0.27146340E+3,0.129E+3,0.470E+2,0.95760000E+0,0.00000000E+0 - ,0.28581800E+3,0.129E+3,0.480E+2,0.95760000E+0,0.00000000E+0 - ,0.36066260E+3,0.129E+3,0.490E+2,0.95760000E+0,0.00000000E+0 - ,0.33100630E+3,0.129E+3,0.500E+2,0.95760000E+0,0.00000000E+0 - ,0.29285890E+3,0.129E+3,0.510E+2,0.95760000E+0,0.00000000E+0 - ,0.27055260E+3,0.129E+3,0.520E+2,0.95760000E+0,0.00000000E+0 - ,0.24354750E+3,0.129E+3,0.530E+2,0.95760000E+0,0.00000000E+0 - ,0.21809290E+3,0.129E+3,0.540E+2,0.95760000E+0,0.00000000E+0 - ,0.98359160E+3,0.129E+3,0.550E+2,0.95760000E+0,0.00000000E+0 - ,0.89168850E+3,0.129E+3,0.560E+2,0.95760000E+0,0.00000000E+0 - ,0.77770700E+3,0.129E+3,0.570E+2,0.95760000E+0,0.00000000E+0 - ,0.34643740E+3,0.129E+3,0.580E+2,0.95760000E+0,0.27991000E+1 - ,0.78837610E+3,0.129E+3,0.590E+2,0.95760000E+0,0.00000000E+0 - ,0.75615770E+3,0.129E+3,0.600E+2,0.95760000E+0,0.00000000E+0 - ,0.73695090E+3,0.129E+3,0.610E+2,0.95760000E+0,0.00000000E+0 - ,0.71931180E+3,0.129E+3,0.620E+2,0.95760000E+0,0.00000000E+0 - ,0.70365920E+3,0.129E+3,0.630E+2,0.95760000E+0,0.00000000E+0 - ,0.54891190E+3,0.129E+3,0.640E+2,0.95760000E+0,0.00000000E+0 - ,0.62523960E+3,0.129E+3,0.650E+2,0.95760000E+0,0.00000000E+0 - ,0.60214160E+3,0.129E+3,0.660E+2,0.95760000E+0,0.00000000E+0 - ,0.63352600E+3,0.129E+3,0.670E+2,0.95760000E+0,0.00000000E+0 - ,0.61995970E+3,0.129E+3,0.680E+2,0.95760000E+0,0.00000000E+0 - ,0.60766330E+3,0.129E+3,0.690E+2,0.95760000E+0,0.00000000E+0 - ,0.60075720E+3,0.129E+3,0.700E+2,0.95760000E+0,0.00000000E+0 - ,0.50338410E+3,0.129E+3,0.710E+2,0.95760000E+0,0.00000000E+0 - ,0.49122120E+3,0.129E+3,0.720E+2,0.95760000E+0,0.00000000E+0 - ,0.44629550E+3,0.129E+3,0.730E+2,0.95760000E+0,0.00000000E+0 - ,0.37560840E+3,0.129E+3,0.740E+2,0.95760000E+0,0.00000000E+0 - ,0.38145840E+3,0.129E+3,0.750E+2,0.95760000E+0,0.00000000E+0 - ,0.34444290E+3,0.129E+3,0.760E+2,0.95760000E+0,0.00000000E+0 - ,0.31453250E+3,0.129E+3,0.770E+2,0.95760000E+0,0.00000000E+0 - ,0.26057850E+3,0.129E+3,0.780E+2,0.95760000E+0,0.00000000E+0 - ,0.24322040E+3,0.129E+3,0.790E+2,0.95760000E+0,0.00000000E+0 - ,0.24982310E+3,0.129E+3,0.800E+2,0.95760000E+0,0.00000000E+0 - ,0.36971340E+3,0.129E+3,0.810E+2,0.95760000E+0,0.00000000E+0 - ,0.35938220E+3,0.129E+3,0.820E+2,0.95760000E+0,0.00000000E+0 - ,0.32809610E+3,0.129E+3,0.830E+2,0.95760000E+0,0.00000000E+0 - ,0.31175430E+3,0.129E+3,0.840E+2,0.95760000E+0,0.00000000E+0 - ,0.28648030E+3,0.129E+3,0.850E+2,0.95760000E+0,0.00000000E+0 - ,0.26159230E+3,0.129E+3,0.860E+2,0.95760000E+0,0.00000000E+0 - ,0.92344480E+3,0.129E+3,0.870E+2,0.95760000E+0,0.00000000E+0 - ,0.87838880E+3,0.129E+3,0.880E+2,0.95760000E+0,0.00000000E+0 - ,0.77137100E+3,0.129E+3,0.890E+2,0.95760000E+0,0.00000000E+0 - ,0.68798510E+3,0.129E+3,0.900E+2,0.95760000E+0,0.00000000E+0 - ,0.68576140E+3,0.129E+3,0.910E+2,0.95760000E+0,0.00000000E+0 - ,0.66390850E+3,0.129E+3,0.920E+2,0.95760000E+0,0.00000000E+0 - ,0.68694090E+3,0.129E+3,0.930E+2,0.95760000E+0,0.00000000E+0 - ,0.66465810E+3,0.129E+3,0.940E+2,0.95760000E+0,0.00000000E+0 - ,0.35987100E+2,0.129E+3,0.101E+3,0.95760000E+0,0.00000000E+0 - ,0.11943970E+3,0.129E+3,0.103E+3,0.95760000E+0,0.98650000E+0 - ,0.15184260E+3,0.129E+3,0.104E+3,0.95760000E+0,0.98080000E+0 - ,0.11434660E+3,0.129E+3,0.105E+3,0.95760000E+0,0.97060000E+0 - ,0.85473100E+2,0.129E+3,0.106E+3,0.95760000E+0,0.98680000E+0 - ,0.58990300E+2,0.129E+3,0.107E+3,0.95760000E+0,0.99440000E+0 - ,0.42745800E+2,0.129E+3,0.108E+3,0.95760000E+0,0.99250000E+0 - ,0.29280800E+2,0.129E+3,0.109E+3,0.95760000E+0,0.99820000E+0 - ,0.17525310E+3,0.129E+3,0.111E+3,0.95760000E+0,0.96840000E+0 - ,0.27127550E+3,0.129E+3,0.112E+3,0.95760000E+0,0.96280000E+0 - ,0.27263840E+3,0.129E+3,0.113E+3,0.95760000E+0,0.96480000E+0 - ,0.21661540E+3,0.129E+3,0.114E+3,0.95760000E+0,0.95070000E+0 - ,0.17596280E+3,0.129E+3,0.115E+3,0.95760000E+0,0.99470000E+0 - ,0.14802440E+3,0.129E+3,0.116E+3,0.95760000E+0,0.99480000E+0 - ,0.12039270E+3,0.129E+3,0.117E+3,0.95760000E+0,0.99720000E+0 - ,0.24017910E+3,0.129E+3,0.119E+3,0.95760000E+0,0.97670000E+0 - ,0.46791560E+3,0.129E+3,0.120E+3,0.95760000E+0,0.98310000E+0 - ,0.23801280E+3,0.129E+3,0.121E+3,0.95760000E+0,0.18627000E+1 - ,0.22972260E+3,0.129E+3,0.122E+3,0.95760000E+0,0.18299000E+1 - ,0.22520200E+3,0.129E+3,0.123E+3,0.95760000E+0,0.19138000E+1 - ,0.22340090E+3,0.129E+3,0.124E+3,0.95760000E+0,0.18269000E+1 - ,0.20444800E+3,0.129E+3,0.125E+3,0.95760000E+0,0.16406000E+1 - ,0.18894450E+3,0.129E+3,0.126E+3,0.95760000E+0,0.16483000E+1 - ,0.18027190E+3,0.129E+3,0.127E+3,0.95760000E+0,0.17149000E+1 - ,0.17633580E+3,0.129E+3,0.128E+3,0.95760000E+0,0.17937000E+1 - ,0.17499690E+3,0.129E+3,0.129E+3,0.95760000E+0,0.95760000E+0 - ,0.21213900E+2,0.130E+3,0.100E+1,0.19419000E+1,0.91180000E+0 - ,0.14118500E+2,0.130E+3,0.200E+1,0.19419000E+1,0.00000000E+0 - ,0.31788260E+3,0.130E+3,0.300E+1,0.19419000E+1,0.00000000E+0 - ,0.18730120E+3,0.130E+3,0.400E+1,0.19419000E+1,0.00000000E+0 - ,0.12724880E+3,0.130E+3,0.500E+1,0.19419000E+1,0.00000000E+0 - ,0.86470900E+2,0.130E+3,0.600E+1,0.19419000E+1,0.00000000E+0 - ,0.60733100E+2,0.130E+3,0.700E+1,0.19419000E+1,0.00000000E+0 - ,0.46135500E+2,0.130E+3,0.800E+1,0.19419000E+1,0.00000000E+0 - ,0.35062900E+2,0.130E+3,0.900E+1,0.19419000E+1,0.00000000E+0 - ,0.27052400E+2,0.130E+3,0.100E+2,0.19419000E+1,0.00000000E+0 - ,0.38065680E+3,0.130E+3,0.110E+2,0.19419000E+1,0.00000000E+0 - ,0.29754400E+3,0.130E+3,0.120E+2,0.19419000E+1,0.00000000E+0 - ,0.27562990E+3,0.130E+3,0.130E+2,0.19419000E+1,0.00000000E+0 - ,0.21852820E+3,0.130E+3,0.140E+2,0.19419000E+1,0.00000000E+0 - ,0.17118890E+3,0.130E+3,0.150E+2,0.19419000E+1,0.00000000E+0 - ,0.14245910E+3,0.130E+3,0.160E+2,0.19419000E+1,0.00000000E+0 - ,0.11666370E+3,0.130E+3,0.170E+2,0.19419000E+1,0.00000000E+0 - ,0.95658600E+2,0.130E+3,0.180E+2,0.19419000E+1,0.00000000E+0 - ,0.62148410E+3,0.130E+3,0.190E+2,0.19419000E+1,0.00000000E+0 - ,0.51951820E+3,0.130E+3,0.200E+2,0.19419000E+1,0.00000000E+0 - ,0.43036750E+3,0.130E+3,0.210E+2,0.19419000E+1,0.00000000E+0 - ,0.41653280E+3,0.130E+3,0.220E+2,0.19419000E+1,0.00000000E+0 - ,0.38196290E+3,0.130E+3,0.230E+2,0.19419000E+1,0.00000000E+0 - ,0.30093230E+3,0.130E+3,0.240E+2,0.19419000E+1,0.00000000E+0 - ,0.32951960E+3,0.130E+3,0.250E+2,0.19419000E+1,0.00000000E+0 - ,0.25872900E+3,0.130E+3,0.260E+2,0.19419000E+1,0.00000000E+0 - ,0.27503810E+3,0.130E+3,0.270E+2,0.19419000E+1,0.00000000E+0 - ,0.28296560E+3,0.130E+3,0.280E+2,0.19419000E+1,0.00000000E+0 - ,0.21695700E+3,0.130E+3,0.290E+2,0.19419000E+1,0.00000000E+0 - ,0.22366220E+3,0.130E+3,0.300E+2,0.19419000E+1,0.00000000E+0 - ,0.26447240E+3,0.130E+3,0.310E+2,0.19419000E+1,0.00000000E+0 - ,0.23434070E+3,0.130E+3,0.320E+2,0.19419000E+1,0.00000000E+0 - ,0.20064080E+3,0.130E+3,0.330E+2,0.19419000E+1,0.00000000E+0 - ,0.18041890E+3,0.130E+3,0.340E+2,0.19419000E+1,0.00000000E+0 - ,0.15822130E+3,0.130E+3,0.350E+2,0.19419000E+1,0.00000000E+0 - ,0.13785900E+3,0.130E+3,0.360E+2,0.19419000E+1,0.00000000E+0 - ,0.69720120E+3,0.130E+3,0.370E+2,0.19419000E+1,0.00000000E+0 - ,0.61859280E+3,0.130E+3,0.380E+2,0.19419000E+1,0.00000000E+0 - ,0.54431400E+3,0.130E+3,0.390E+2,0.19419000E+1,0.00000000E+0 - ,0.49050970E+3,0.130E+3,0.400E+2,0.19419000E+1,0.00000000E+0 - ,0.44803280E+3,0.130E+3,0.410E+2,0.19419000E+1,0.00000000E+0 - ,0.34683870E+3,0.130E+3,0.420E+2,0.19419000E+1,0.00000000E+0 - ,0.38662560E+3,0.130E+3,0.430E+2,0.19419000E+1,0.00000000E+0 - ,0.29543070E+3,0.130E+3,0.440E+2,0.19419000E+1,0.00000000E+0 - ,0.32298310E+3,0.130E+3,0.450E+2,0.19419000E+1,0.00000000E+0 - ,0.29983170E+3,0.130E+3,0.460E+2,0.19419000E+1,0.00000000E+0 - ,0.24983480E+3,0.130E+3,0.470E+2,0.19419000E+1,0.00000000E+0 - ,0.26457160E+3,0.130E+3,0.480E+2,0.19419000E+1,0.00000000E+0 - ,0.33095850E+3,0.130E+3,0.490E+2,0.19419000E+1,0.00000000E+0 - ,0.30726350E+3,0.130E+3,0.500E+2,0.19419000E+1,0.00000000E+0 - ,0.27478160E+3,0.130E+3,0.510E+2,0.19419000E+1,0.00000000E+0 - ,0.25542890E+3,0.130E+3,0.520E+2,0.19419000E+1,0.00000000E+0 - ,0.23140060E+3,0.130E+3,0.530E+2,0.19419000E+1,0.00000000E+0 - ,0.20840550E+3,0.130E+3,0.540E+2,0.19419000E+1,0.00000000E+0 - ,0.84934460E+3,0.130E+3,0.550E+2,0.19419000E+1,0.00000000E+0 - ,0.78727710E+3,0.130E+3,0.560E+2,0.19419000E+1,0.00000000E+0 - ,0.69479590E+3,0.130E+3,0.570E+2,0.19419000E+1,0.00000000E+0 - ,0.32433650E+3,0.130E+3,0.580E+2,0.19419000E+1,0.27991000E+1 - ,0.69872430E+3,0.130E+3,0.590E+2,0.19419000E+1,0.00000000E+0 - ,0.67147320E+3,0.130E+3,0.600E+2,0.19419000E+1,0.00000000E+0 - ,0.65477760E+3,0.130E+3,0.610E+2,0.19419000E+1,0.00000000E+0 - ,0.63940750E+3,0.130E+3,0.620E+2,0.19419000E+1,0.00000000E+0 - ,0.62578200E+3,0.130E+3,0.630E+2,0.19419000E+1,0.00000000E+0 - ,0.49442430E+3,0.130E+3,0.640E+2,0.19419000E+1,0.00000000E+0 - ,0.55258030E+3,0.130E+3,0.650E+2,0.19419000E+1,0.00000000E+0 - ,0.53339380E+3,0.130E+3,0.660E+2,0.19419000E+1,0.00000000E+0 - ,0.56508580E+3,0.130E+3,0.670E+2,0.19419000E+1,0.00000000E+0 - ,0.55316870E+3,0.130E+3,0.680E+2,0.19419000E+1,0.00000000E+0 - ,0.54245160E+3,0.130E+3,0.690E+2,0.19419000E+1,0.00000000E+0 - ,0.53600770E+3,0.130E+3,0.700E+2,0.19419000E+1,0.00000000E+0 - ,0.45307620E+3,0.130E+3,0.710E+2,0.19419000E+1,0.00000000E+0 - ,0.44744320E+3,0.130E+3,0.720E+2,0.19419000E+1,0.00000000E+0 - ,0.40933690E+3,0.130E+3,0.730E+2,0.19419000E+1,0.00000000E+0 - ,0.34623600E+3,0.130E+3,0.740E+2,0.19419000E+1,0.00000000E+0 - ,0.35258880E+3,0.130E+3,0.750E+2,0.19419000E+1,0.00000000E+0 - ,0.32019590E+3,0.130E+3,0.760E+2,0.19419000E+1,0.00000000E+0 - ,0.29371130E+3,0.130E+3,0.770E+2,0.19419000E+1,0.00000000E+0 - ,0.24437210E+3,0.130E+3,0.780E+2,0.19419000E+1,0.00000000E+0 - ,0.22847850E+3,0.130E+3,0.790E+2,0.19419000E+1,0.00000000E+0 - ,0.23524690E+3,0.130E+3,0.800E+2,0.19419000E+1,0.00000000E+0 - ,0.34006610E+3,0.130E+3,0.810E+2,0.19419000E+1,0.00000000E+0 - ,0.33355770E+3,0.130E+3,0.820E+2,0.19419000E+1,0.00000000E+0 - ,0.30748710E+3,0.130E+3,0.830E+2,0.19419000E+1,0.00000000E+0 - ,0.29376220E+3,0.130E+3,0.840E+2,0.19419000E+1,0.00000000E+0 - ,0.27163520E+3,0.130E+3,0.850E+2,0.19419000E+1,0.00000000E+0 - ,0.24938090E+3,0.130E+3,0.860E+2,0.19419000E+1,0.00000000E+0 - ,0.80499020E+3,0.130E+3,0.870E+2,0.19419000E+1,0.00000000E+0 - ,0.78026750E+3,0.130E+3,0.880E+2,0.19419000E+1,0.00000000E+0 - ,0.69268280E+3,0.130E+3,0.890E+2,0.19419000E+1,0.00000000E+0 - ,0.62529330E+3,0.130E+3,0.900E+2,0.19419000E+1,0.00000000E+0 - ,0.61943840E+3,0.130E+3,0.910E+2,0.19419000E+1,0.00000000E+0 - ,0.59985590E+3,0.130E+3,0.920E+2,0.19419000E+1,0.00000000E+0 - ,0.61596070E+3,0.130E+3,0.930E+2,0.19419000E+1,0.00000000E+0 - ,0.59681690E+3,0.130E+3,0.940E+2,0.19419000E+1,0.00000000E+0 - ,0.34031200E+2,0.130E+3,0.101E+3,0.19419000E+1,0.00000000E+0 - ,0.10901270E+3,0.130E+3,0.103E+3,0.19419000E+1,0.98650000E+0 - ,0.13924200E+3,0.130E+3,0.104E+3,0.19419000E+1,0.98080000E+0 - ,0.10720260E+3,0.130E+3,0.105E+3,0.19419000E+1,0.97060000E+0 - ,0.81068600E+2,0.130E+3,0.106E+3,0.19419000E+1,0.98680000E+0 - ,0.56614000E+2,0.130E+3,0.107E+3,0.19419000E+1,0.99440000E+0 - ,0.41386200E+2,0.130E+3,0.108E+3,0.19419000E+1,0.99250000E+0 - ,0.28629100E+2,0.130E+3,0.109E+3,0.19419000E+1,0.99820000E+0 - ,0.15912280E+3,0.130E+3,0.111E+3,0.19419000E+1,0.96840000E+0 - ,0.24580540E+3,0.130E+3,0.112E+3,0.19419000E+1,0.96280000E+0 - ,0.25007300E+3,0.130E+3,0.113E+3,0.19419000E+1,0.96480000E+0 - ,0.20213060E+3,0.130E+3,0.114E+3,0.19419000E+1,0.95070000E+0 - ,0.16618870E+3,0.130E+3,0.115E+3,0.19419000E+1,0.99470000E+0 - ,0.14088040E+3,0.130E+3,0.116E+3,0.19419000E+1,0.99480000E+0 - ,0.11545010E+3,0.130E+3,0.117E+3,0.19419000E+1,0.99720000E+0 - ,0.21998520E+3,0.130E+3,0.119E+3,0.19419000E+1,0.97670000E+0 - ,0.41556380E+3,0.130E+3,0.120E+3,0.19419000E+1,0.98310000E+0 - ,0.22124670E+3,0.130E+3,0.121E+3,0.19419000E+1,0.18627000E+1 - ,0.21361910E+3,0.130E+3,0.122E+3,0.19419000E+1,0.18299000E+1 - ,0.20934280E+3,0.130E+3,0.123E+3,0.19419000E+1,0.19138000E+1 - ,0.20729260E+3,0.130E+3,0.124E+3,0.19419000E+1,0.18269000E+1 - ,0.19131250E+3,0.130E+3,0.125E+3,0.19419000E+1,0.16406000E+1 - ,0.17720340E+3,0.130E+3,0.126E+3,0.19419000E+1,0.16483000E+1 - ,0.16904610E+3,0.130E+3,0.127E+3,0.19419000E+1,0.17149000E+1 - ,0.16523610E+3,0.130E+3,0.128E+3,0.19419000E+1,0.17937000E+1 - ,0.16292360E+3,0.130E+3,0.129E+3,0.19419000E+1,0.95760000E+0 - ,0.15345280E+3,0.130E+3,0.130E+3,0.19419000E+1,0.19419000E+1 - ,0.33251500E+2,0.131E+3,0.100E+1,0.96010000E+0,0.91180000E+0 - ,0.20987400E+2,0.131E+3,0.200E+1,0.96010000E+0,0.00000000E+0 - ,0.60281040E+3,0.131E+3,0.300E+1,0.96010000E+0,0.00000000E+0 - ,0.32666720E+3,0.131E+3,0.400E+1,0.96010000E+0,0.00000000E+0 - ,0.21127560E+3,0.131E+3,0.500E+1,0.96010000E+0,0.00000000E+0 - ,0.13814970E+3,0.131E+3,0.600E+1,0.96010000E+0,0.00000000E+0 - ,0.94132900E+2,0.131E+3,0.700E+1,0.96010000E+0,0.00000000E+0 - ,0.69903900E+2,0.131E+3,0.800E+1,0.96010000E+0,0.00000000E+0 - ,0.52047600E+2,0.131E+3,0.900E+1,0.96010000E+0,0.00000000E+0 - ,0.39458700E+2,0.131E+3,0.100E+2,0.96010000E+0,0.00000000E+0 - ,0.71775310E+3,0.131E+3,0.110E+2,0.96010000E+0,0.00000000E+0 - ,0.52642360E+3,0.131E+3,0.120E+2,0.96010000E+0,0.00000000E+0 - ,0.47573180E+3,0.131E+3,0.130E+2,0.96010000E+0,0.00000000E+0 - ,0.36461100E+3,0.131E+3,0.140E+2,0.96010000E+0,0.00000000E+0 - ,0.27735230E+3,0.131E+3,0.150E+2,0.96010000E+0,0.00000000E+0 - ,0.22627960E+3,0.131E+3,0.160E+2,0.96010000E+0,0.00000000E+0 - ,0.18171780E+3,0.131E+3,0.170E+2,0.96010000E+0,0.00000000E+0 - ,0.14638550E+3,0.131E+3,0.180E+2,0.96010000E+0,0.00000000E+0 - ,0.11848327E+4,0.131E+3,0.190E+2,0.96010000E+0,0.00000000E+0 - ,0.94258280E+3,0.131E+3,0.200E+2,0.96010000E+0,0.00000000E+0 - ,0.77197630E+3,0.131E+3,0.210E+2,0.96010000E+0,0.00000000E+0 - ,0.73902810E+3,0.131E+3,0.220E+2,0.96010000E+0,0.00000000E+0 - ,0.67328230E+3,0.131E+3,0.230E+2,0.96010000E+0,0.00000000E+0 - ,0.52900060E+3,0.131E+3,0.240E+2,0.96010000E+0,0.00000000E+0 - ,0.57532290E+3,0.131E+3,0.250E+2,0.96010000E+0,0.00000000E+0 - ,0.44990400E+3,0.131E+3,0.260E+2,0.96010000E+0,0.00000000E+0 - ,0.47264010E+3,0.131E+3,0.270E+2,0.96010000E+0,0.00000000E+0 - ,0.48954990E+3,0.131E+3,0.280E+2,0.96010000E+0,0.00000000E+0 - ,0.37425370E+3,0.131E+3,0.290E+2,0.96010000E+0,0.00000000E+0 - ,0.37873290E+3,0.131E+3,0.300E+2,0.96010000E+0,0.00000000E+0 - ,0.45140030E+3,0.131E+3,0.310E+2,0.96010000E+0,0.00000000E+0 - ,0.38973700E+3,0.131E+3,0.320E+2,0.96010000E+0,0.00000000E+0 - ,0.32572680E+3,0.131E+3,0.330E+2,0.96010000E+0,0.00000000E+0 - ,0.28839340E+3,0.131E+3,0.340E+2,0.96010000E+0,0.00000000E+0 - ,0.24882110E+3,0.131E+3,0.350E+2,0.96010000E+0,0.00000000E+0 - ,0.21348210E+3,0.131E+3,0.360E+2,0.96010000E+0,0.00000000E+0 - ,0.13227322E+4,0.131E+3,0.370E+2,0.96010000E+0,0.00000000E+0 - ,0.11239167E+4,0.131E+3,0.380E+2,0.96010000E+0,0.00000000E+0 - ,0.96907770E+3,0.131E+3,0.390E+2,0.96010000E+0,0.00000000E+0 - ,0.86203630E+3,0.131E+3,0.400E+2,0.96010000E+0,0.00000000E+0 - ,0.78048050E+3,0.131E+3,0.410E+2,0.96010000E+0,0.00000000E+0 - ,0.59457650E+3,0.131E+3,0.420E+2,0.96010000E+0,0.00000000E+0 - ,0.66676010E+3,0.131E+3,0.430E+2,0.96010000E+0,0.00000000E+0 - ,0.50051620E+3,0.131E+3,0.440E+2,0.96010000E+0,0.00000000E+0 - ,0.54783460E+3,0.131E+3,0.450E+2,0.96010000E+0,0.00000000E+0 - ,0.50566980E+3,0.131E+3,0.460E+2,0.96010000E+0,0.00000000E+0 - ,0.42174200E+3,0.131E+3,0.470E+2,0.96010000E+0,0.00000000E+0 - ,0.44286390E+3,0.131E+3,0.480E+2,0.96010000E+0,0.00000000E+0 - ,0.56415640E+3,0.131E+3,0.490E+2,0.96010000E+0,0.00000000E+0 - ,0.51303150E+3,0.131E+3,0.500E+2,0.96010000E+0,0.00000000E+0 - ,0.44930060E+3,0.131E+3,0.510E+2,0.96010000E+0,0.00000000E+0 - ,0.41227930E+3,0.131E+3,0.520E+2,0.96010000E+0,0.00000000E+0 - ,0.36821830E+3,0.131E+3,0.530E+2,0.96010000E+0,0.00000000E+0 - ,0.32708380E+3,0.131E+3,0.540E+2,0.96010000E+0,0.00000000E+0 - ,0.16098951E+4,0.131E+3,0.550E+2,0.96010000E+0,0.00000000E+0 - ,0.14393610E+4,0.131E+3,0.560E+2,0.96010000E+0,0.00000000E+0 - ,0.12450382E+4,0.131E+3,0.570E+2,0.96010000E+0,0.00000000E+0 - ,0.53206830E+3,0.131E+3,0.580E+2,0.96010000E+0,0.27991000E+1 - ,0.12682581E+4,0.131E+3,0.590E+2,0.96010000E+0,0.00000000E+0 - ,0.12147867E+4,0.131E+3,0.600E+2,0.96010000E+0,0.00000000E+0 - ,0.11834931E+4,0.131E+3,0.610E+2,0.96010000E+0,0.00000000E+0 - ,0.11548172E+4,0.131E+3,0.620E+2,0.96010000E+0,0.00000000E+0 - ,0.11293623E+4,0.131E+3,0.630E+2,0.96010000E+0,0.00000000E+0 - ,0.87169660E+3,0.131E+3,0.640E+2,0.96010000E+0,0.00000000E+0 - ,0.10061273E+4,0.131E+3,0.650E+2,0.96010000E+0,0.00000000E+0 - ,0.96741930E+3,0.131E+3,0.660E+2,0.96010000E+0,0.00000000E+0 - ,0.10147443E+4,0.131E+3,0.670E+2,0.96010000E+0,0.00000000E+0 - ,0.99283980E+3,0.131E+3,0.680E+2,0.96010000E+0,0.00000000E+0 - ,0.97287530E+3,0.131E+3,0.690E+2,0.96010000E+0,0.00000000E+0 - ,0.96226810E+3,0.131E+3,0.700E+2,0.96010000E+0,0.00000000E+0 - ,0.80056070E+3,0.131E+3,0.710E+2,0.96010000E+0,0.00000000E+0 - ,0.77479490E+3,0.131E+3,0.720E+2,0.96010000E+0,0.00000000E+0 - ,0.69954820E+3,0.131E+3,0.730E+2,0.96010000E+0,0.00000000E+0 - ,0.58500690E+3,0.131E+3,0.740E+2,0.96010000E+0,0.00000000E+0 - ,0.59290660E+3,0.131E+3,0.750E+2,0.96010000E+0,0.00000000E+0 - ,0.53219500E+3,0.131E+3,0.760E+2,0.96010000E+0,0.00000000E+0 - ,0.48350900E+3,0.131E+3,0.770E+2,0.96010000E+0,0.00000000E+0 - ,0.39773910E+3,0.131E+3,0.780E+2,0.96010000E+0,0.00000000E+0 - ,0.37015170E+3,0.131E+3,0.790E+2,0.96010000E+0,0.00000000E+0 - ,0.37970920E+3,0.131E+3,0.800E+2,0.96010000E+0,0.00000000E+0 - ,0.57562810E+3,0.131E+3,0.810E+2,0.96010000E+0,0.00000000E+0 - ,0.55583070E+3,0.131E+3,0.820E+2,0.96010000E+0,0.00000000E+0 - ,0.50298850E+3,0.131E+3,0.830E+2,0.96010000E+0,0.00000000E+0 - ,0.47531340E+3,0.131E+3,0.840E+2,0.96010000E+0,0.00000000E+0 - ,0.43366250E+3,0.131E+3,0.850E+2,0.96010000E+0,0.00000000E+0 - ,0.39318500E+3,0.131E+3,0.860E+2,0.96010000E+0,0.00000000E+0 - ,0.15014541E+4,0.131E+3,0.870E+2,0.96010000E+0,0.00000000E+0 - ,0.14115217E+4,0.131E+3,0.880E+2,0.96010000E+0,0.00000000E+0 - ,0.12297307E+4,0.131E+3,0.890E+2,0.96010000E+0,0.00000000E+0 - ,0.10857394E+4,0.131E+3,0.900E+2,0.96010000E+0,0.00000000E+0 - ,0.10865380E+4,0.131E+3,0.910E+2,0.96010000E+0,0.00000000E+0 - ,0.10514942E+4,0.131E+3,0.920E+2,0.96010000E+0,0.00000000E+0 - ,0.10941031E+4,0.131E+3,0.930E+2,0.96010000E+0,0.00000000E+0 - ,0.10575095E+4,0.131E+3,0.940E+2,0.96010000E+0,0.00000000E+0 - ,0.54991900E+2,0.131E+3,0.101E+3,0.96010000E+0,0.00000000E+0 - ,0.18876220E+3,0.131E+3,0.103E+3,0.96010000E+0,0.98650000E+0 - ,0.23890680E+3,0.131E+3,0.104E+3,0.96010000E+0,0.98080000E+0 - ,0.17609760E+3,0.131E+3,0.105E+3,0.96010000E+0,0.97060000E+0 - ,0.12956700E+3,0.131E+3,0.106E+3,0.96010000E+0,0.98680000E+0 - ,0.87664500E+2,0.131E+3,0.107E+3,0.96010000E+0,0.99440000E+0 - ,0.62352200E+2,0.131E+3,0.108E+3,0.96010000E+0,0.99250000E+0 - ,0.41590900E+2,0.131E+3,0.109E+3,0.96010000E+0,0.99820000E+0 - ,0.27751430E+3,0.131E+3,0.111E+3,0.96010000E+0,0.96840000E+0 - ,0.43082970E+3,0.131E+3,0.112E+3,0.96010000E+0,0.96280000E+0 - ,0.42895210E+3,0.131E+3,0.113E+3,0.96010000E+0,0.96480000E+0 - ,0.33552060E+3,0.131E+3,0.114E+3,0.96010000E+0,0.95070000E+0 - ,0.26893700E+3,0.131E+3,0.115E+3,0.96010000E+0,0.99470000E+0 - ,0.22384530E+3,0.131E+3,0.116E+3,0.96010000E+0,0.99480000E+0 - ,0.17986830E+3,0.131E+3,0.117E+3,0.96010000E+0,0.99720000E+0 - ,0.37584950E+3,0.131E+3,0.119E+3,0.96010000E+0,0.97670000E+0 - ,0.75181440E+3,0.131E+3,0.120E+3,0.96010000E+0,0.98310000E+0 - ,0.36854170E+3,0.131E+3,0.121E+3,0.96010000E+0,0.18627000E+1 - ,0.35534980E+3,0.131E+3,0.122E+3,0.96010000E+0,0.18299000E+1 - ,0.34832930E+3,0.131E+3,0.123E+3,0.96010000E+0,0.19138000E+1 - ,0.34597960E+3,0.131E+3,0.124E+3,0.96010000E+0,0.18269000E+1 - ,0.31442440E+3,0.131E+3,0.125E+3,0.96010000E+0,0.16406000E+1 - ,0.28975880E+3,0.131E+3,0.126E+3,0.96010000E+0,0.16483000E+1 - ,0.27631300E+3,0.131E+3,0.127E+3,0.96010000E+0,0.17149000E+1 - ,0.27040230E+3,0.131E+3,0.128E+3,0.96010000E+0,0.17937000E+1 - ,0.26973440E+3,0.131E+3,0.129E+3,0.96010000E+0,0.95760000E+0 - ,0.24870030E+3,0.131E+3,0.130E+3,0.96010000E+0,0.19419000E+1 - ,0.42164970E+3,0.131E+3,0.131E+3,0.96010000E+0,0.96010000E+0 - ,0.29952700E+2,0.132E+3,0.100E+1,0.94340000E+0,0.91180000E+0 - ,0.19376100E+2,0.132E+3,0.200E+1,0.94340000E+0,0.00000000E+0 - ,0.48401650E+3,0.132E+3,0.300E+1,0.94340000E+0,0.00000000E+0 - ,0.27657170E+3,0.132E+3,0.400E+1,0.94340000E+0,0.00000000E+0 - ,0.18420550E+3,0.132E+3,0.500E+1,0.94340000E+0,0.00000000E+0 - ,0.12305740E+3,0.132E+3,0.600E+1,0.94340000E+0,0.00000000E+0 - ,0.85162100E+2,0.132E+3,0.700E+1,0.94340000E+0,0.00000000E+0 - ,0.63924500E+2,0.132E+3,0.800E+1,0.94340000E+0,0.00000000E+0 - ,0.48023300E+2,0.132E+3,0.900E+1,0.94340000E+0,0.00000000E+0 - ,0.36661500E+2,0.132E+3,0.100E+2,0.94340000E+0,0.00000000E+0 - ,0.57808820E+3,0.132E+3,0.110E+2,0.94340000E+0,0.00000000E+0 - ,0.44152390E+3,0.132E+3,0.120E+2,0.94340000E+0,0.00000000E+0 - ,0.40516110E+3,0.132E+3,0.130E+2,0.94340000E+0,0.00000000E+0 - ,0.31697000E+3,0.132E+3,0.140E+2,0.94340000E+0,0.00000000E+0 - ,0.24526830E+3,0.132E+3,0.150E+2,0.94340000E+0,0.00000000E+0 - ,0.20228630E+3,0.132E+3,0.160E+2,0.94340000E+0,0.00000000E+0 - ,0.16412660E+3,0.132E+3,0.170E+2,0.94340000E+0,0.00000000E+0 - ,0.13337940E+3,0.132E+3,0.180E+2,0.94340000E+0,0.00000000E+0 - ,0.94657560E+3,0.132E+3,0.190E+2,0.94340000E+0,0.00000000E+0 - ,0.77753610E+3,0.132E+3,0.200E+2,0.94340000E+0,0.00000000E+0 - ,0.64140640E+3,0.132E+3,0.210E+2,0.94340000E+0,0.00000000E+0 - ,0.61804010E+3,0.132E+3,0.220E+2,0.94340000E+0,0.00000000E+0 - ,0.56526390E+3,0.132E+3,0.230E+2,0.94340000E+0,0.00000000E+0 - ,0.44441960E+3,0.132E+3,0.240E+2,0.94340000E+0,0.00000000E+0 - ,0.48576480E+3,0.132E+3,0.250E+2,0.94340000E+0,0.00000000E+0 - ,0.38038530E+3,0.132E+3,0.260E+2,0.94340000E+0,0.00000000E+0 - ,0.40291460E+3,0.132E+3,0.270E+2,0.94340000E+0,0.00000000E+0 - ,0.41564390E+3,0.132E+3,0.280E+2,0.94340000E+0,0.00000000E+0 - ,0.31786240E+3,0.132E+3,0.290E+2,0.94340000E+0,0.00000000E+0 - ,0.32569280E+3,0.132E+3,0.300E+2,0.94340000E+0,0.00000000E+0 - ,0.38671290E+3,0.132E+3,0.310E+2,0.94340000E+0,0.00000000E+0 - ,0.33924040E+3,0.132E+3,0.320E+2,0.94340000E+0,0.00000000E+0 - ,0.28758470E+3,0.132E+3,0.330E+2,0.94340000E+0,0.00000000E+0 - ,0.25685170E+3,0.132E+3,0.340E+2,0.94340000E+0,0.00000000E+0 - ,0.22357440E+3,0.132E+3,0.350E+2,0.94340000E+0,0.00000000E+0 - ,0.19336340E+3,0.132E+3,0.360E+2,0.94340000E+0,0.00000000E+0 - ,0.10596044E+4,0.132E+3,0.370E+2,0.94340000E+0,0.00000000E+0 - ,0.92600250E+3,0.132E+3,0.380E+2,0.94340000E+0,0.00000000E+0 - ,0.80859910E+3,0.132E+3,0.390E+2,0.94340000E+0,0.00000000E+0 - ,0.72498050E+3,0.132E+3,0.400E+2,0.94340000E+0,0.00000000E+0 - ,0.65980390E+3,0.132E+3,0.410E+2,0.94340000E+0,0.00000000E+0 - ,0.50715030E+3,0.132E+3,0.420E+2,0.94340000E+0,0.00000000E+0 - ,0.56682940E+3,0.132E+3,0.430E+2,0.94340000E+0,0.00000000E+0 - ,0.42969960E+3,0.132E+3,0.440E+2,0.94340000E+0,0.00000000E+0 - ,0.47030780E+3,0.132E+3,0.450E+2,0.94340000E+0,0.00000000E+0 - ,0.43552680E+3,0.132E+3,0.460E+2,0.94340000E+0,0.00000000E+0 - ,0.36250760E+3,0.132E+3,0.470E+2,0.94340000E+0,0.00000000E+0 - ,0.38302040E+3,0.132E+3,0.480E+2,0.94340000E+0,0.00000000E+0 - ,0.48291150E+3,0.132E+3,0.490E+2,0.94340000E+0,0.00000000E+0 - ,0.44490480E+3,0.132E+3,0.500E+2,0.94340000E+0,0.00000000E+0 - ,0.39458220E+3,0.132E+3,0.510E+2,0.94340000E+0,0.00000000E+0 - ,0.36482430E+3,0.132E+3,0.520E+2,0.94340000E+0,0.00000000E+0 - ,0.32847500E+3,0.132E+3,0.530E+2,0.94340000E+0,0.00000000E+0 - ,0.29399660E+3,0.132E+3,0.540E+2,0.94340000E+0,0.00000000E+0 - ,0.12903249E+4,0.132E+3,0.550E+2,0.94340000E+0,0.00000000E+0 - ,0.11809729E+4,0.132E+3,0.560E+2,0.94340000E+0,0.00000000E+0 - ,0.10344900E+4,0.132E+3,0.570E+2,0.94340000E+0,0.00000000E+0 - ,0.46618800E+3,0.132E+3,0.580E+2,0.94340000E+0,0.27991000E+1 - ,0.10448624E+4,0.132E+3,0.590E+2,0.94340000E+0,0.00000000E+0 - ,0.10029138E+4,0.132E+3,0.600E+2,0.94340000E+0,0.00000000E+0 - ,0.97765230E+3,0.132E+3,0.610E+2,0.94340000E+0,0.00000000E+0 - ,0.95444310E+3,0.132E+3,0.620E+2,0.94340000E+0,0.00000000E+0 - ,0.93386150E+3,0.132E+3,0.630E+2,0.94340000E+0,0.00000000E+0 - ,0.73092270E+3,0.132E+3,0.640E+2,0.94340000E+0,0.00000000E+0 - ,0.82651040E+3,0.132E+3,0.650E+2,0.94340000E+0,0.00000000E+0 - ,0.79662990E+3,0.132E+3,0.660E+2,0.94340000E+0,0.00000000E+0 - ,0.84175260E+3,0.132E+3,0.670E+2,0.94340000E+0,0.00000000E+0 - ,0.82386870E+3,0.132E+3,0.680E+2,0.94340000E+0,0.00000000E+0 - ,0.80770310E+3,0.132E+3,0.690E+2,0.94340000E+0,0.00000000E+0 - ,0.79843800E+3,0.132E+3,0.700E+2,0.94340000E+0,0.00000000E+0 - ,0.67060970E+3,0.132E+3,0.710E+2,0.94340000E+0,0.00000000E+0 - ,0.65755650E+3,0.132E+3,0.720E+2,0.94340000E+0,0.00000000E+0 - ,0.59836780E+3,0.132E+3,0.730E+2,0.94340000E+0,0.00000000E+0 - ,0.50344310E+3,0.132E+3,0.740E+2,0.94340000E+0,0.00000000E+0 - ,0.51179750E+3,0.132E+3,0.750E+2,0.94340000E+0,0.00000000E+0 - ,0.46250420E+3,0.132E+3,0.760E+2,0.94340000E+0,0.00000000E+0 - ,0.42248760E+3,0.132E+3,0.770E+2,0.94340000E+0,0.00000000E+0 - ,0.34951600E+3,0.132E+3,0.780E+2,0.94340000E+0,0.00000000E+0 - ,0.32600720E+3,0.132E+3,0.790E+2,0.94340000E+0,0.00000000E+0 - ,0.33530450E+3,0.132E+3,0.800E+2,0.94340000E+0,0.00000000E+0 - ,0.49429340E+3,0.132E+3,0.810E+2,0.94340000E+0,0.00000000E+0 - ,0.48215480E+3,0.132E+3,0.820E+2,0.94340000E+0,0.00000000E+0 - ,0.44128680E+3,0.132E+3,0.830E+2,0.94340000E+0,0.00000000E+0 - ,0.41974070E+3,0.132E+3,0.840E+2,0.94340000E+0,0.00000000E+0 - ,0.38594190E+3,0.132E+3,0.850E+2,0.94340000E+0,0.00000000E+0 - ,0.35237490E+3,0.132E+3,0.860E+2,0.94340000E+0,0.00000000E+0 - ,0.12154454E+4,0.132E+3,0.870E+2,0.94340000E+0,0.00000000E+0 - ,0.11657107E+4,0.132E+3,0.880E+2,0.94340000E+0,0.00000000E+0 - ,0.10274859E+4,0.132E+3,0.890E+2,0.94340000E+0,0.00000000E+0 - ,0.91935170E+3,0.132E+3,0.900E+2,0.94340000E+0,0.00000000E+0 - ,0.91390230E+3,0.132E+3,0.910E+2,0.94340000E+0,0.00000000E+0 - ,0.88471530E+3,0.132E+3,0.920E+2,0.94340000E+0,0.00000000E+0 - ,0.91297050E+3,0.132E+3,0.930E+2,0.94340000E+0,0.00000000E+0 - ,0.88377800E+3,0.132E+3,0.940E+2,0.94340000E+0,0.00000000E+0 - ,0.48724700E+2,0.132E+3,0.101E+3,0.94340000E+0,0.00000000E+0 - ,0.16045020E+3,0.132E+3,0.103E+3,0.94340000E+0,0.98650000E+0 - ,0.20416900E+3,0.132E+3,0.104E+3,0.94340000E+0,0.98080000E+0 - ,0.15444090E+3,0.132E+3,0.105E+3,0.94340000E+0,0.97060000E+0 - ,0.11534880E+3,0.132E+3,0.106E+3,0.94340000E+0,0.98680000E+0 - ,0.79327800E+2,0.132E+3,0.107E+3,0.94340000E+0,0.99440000E+0 - ,0.57175200E+2,0.132E+3,0.108E+3,0.94340000E+0,0.99250000E+0 - ,0.38758300E+2,0.132E+3,0.109E+3,0.94340000E+0,0.99820000E+0 - ,0.23460480E+3,0.132E+3,0.111E+3,0.94340000E+0,0.96840000E+0 - ,0.36333200E+3,0.132E+3,0.112E+3,0.94340000E+0,0.96280000E+0 - ,0.36665610E+3,0.132E+3,0.113E+3,0.94340000E+0,0.96480000E+0 - ,0.29253350E+3,0.132E+3,0.114E+3,0.94340000E+0,0.95070000E+0 - ,0.23795800E+3,0.132E+3,0.115E+3,0.94340000E+0,0.99470000E+0 - ,0.20005260E+3,0.132E+3,0.116E+3,0.94340000E+0,0.99480000E+0 - ,0.16242060E+3,0.132E+3,0.117E+3,0.94340000E+0,0.99720000E+0 - ,0.32115740E+3,0.132E+3,0.119E+3,0.94340000E+0,0.97670000E+0 - ,0.62067350E+3,0.132E+3,0.120E+3,0.94340000E+0,0.98310000E+0 - ,0.32013420E+3,0.132E+3,0.121E+3,0.94340000E+0,0.18627000E+1 - ,0.30883040E+3,0.132E+3,0.122E+3,0.94340000E+0,0.18299000E+1 - ,0.30262720E+3,0.132E+3,0.123E+3,0.94340000E+0,0.19138000E+1 - ,0.29997060E+3,0.132E+3,0.124E+3,0.94340000E+0,0.18269000E+1 - ,0.27526070E+3,0.132E+3,0.125E+3,0.94340000E+0,0.16406000E+1 - ,0.25437350E+3,0.132E+3,0.126E+3,0.94340000E+0,0.16483000E+1 - ,0.24255720E+3,0.132E+3,0.127E+3,0.94340000E+0,0.17149000E+1 - ,0.23717370E+3,0.132E+3,0.128E+3,0.94340000E+0,0.17937000E+1 - ,0.23483270E+3,0.132E+3,0.129E+3,0.94340000E+0,0.95760000E+0 - ,0.21945080E+3,0.132E+3,0.130E+3,0.94340000E+0,0.19419000E+1 - ,0.36268320E+3,0.132E+3,0.131E+3,0.94340000E+0,0.96010000E+0 - ,0.31685210E+3,0.132E+3,0.132E+3,0.94340000E+0,0.94340000E+0 - ,0.27357400E+2,0.133E+3,0.100E+1,0.98890000E+0,0.91180000E+0 - ,0.18081600E+2,0.133E+3,0.200E+1,0.98890000E+0,0.00000000E+0 - ,0.40634270E+3,0.133E+3,0.300E+1,0.98890000E+0,0.00000000E+0 - ,0.24075590E+3,0.133E+3,0.400E+1,0.98890000E+0,0.00000000E+0 - ,0.16396550E+3,0.133E+3,0.500E+1,0.98890000E+0,0.00000000E+0 - ,0.11142570E+3,0.133E+3,0.600E+1,0.98890000E+0,0.00000000E+0 - ,0.78113800E+2,0.133E+3,0.700E+1,0.98890000E+0,0.00000000E+0 - ,0.59176400E+2,0.133E+3,0.800E+1,0.98890000E+0,0.00000000E+0 - ,0.44807900E+2,0.133E+3,0.900E+1,0.98890000E+0,0.00000000E+0 - ,0.34422600E+2,0.133E+3,0.100E+2,0.98890000E+0,0.00000000E+0 - ,0.48646380E+3,0.133E+3,0.110E+2,0.98890000E+0,0.00000000E+0 - ,0.38183960E+3,0.133E+3,0.120E+2,0.98890000E+0,0.00000000E+0 - ,0.35437060E+3,0.133E+3,0.130E+2,0.98890000E+0,0.00000000E+0 - ,0.28148930E+3,0.133E+3,0.140E+2,0.98890000E+0,0.00000000E+0 - ,0.22071460E+3,0.133E+3,0.150E+2,0.98890000E+0,0.00000000E+0 - ,0.18364620E+3,0.133E+3,0.160E+2,0.98890000E+0,0.00000000E+0 - ,0.15027420E+3,0.133E+3,0.170E+2,0.98890000E+0,0.00000000E+0 - ,0.12303580E+3,0.133E+3,0.180E+2,0.98890000E+0,0.00000000E+0 - ,0.79363060E+3,0.133E+3,0.190E+2,0.98890000E+0,0.00000000E+0 - ,0.66532210E+3,0.133E+3,0.200E+2,0.98890000E+0,0.00000000E+0 - ,0.55149990E+3,0.133E+3,0.210E+2,0.98890000E+0,0.00000000E+0 - ,0.53402660E+3,0.133E+3,0.220E+2,0.98890000E+0,0.00000000E+0 - ,0.48982100E+3,0.133E+3,0.230E+2,0.98890000E+0,0.00000000E+0 - ,0.38565770E+3,0.133E+3,0.240E+2,0.98890000E+0,0.00000000E+0 - ,0.42268740E+3,0.133E+3,0.250E+2,0.98890000E+0,0.00000000E+0 - ,0.33163890E+3,0.133E+3,0.260E+2,0.98890000E+0,0.00000000E+0 - ,0.35300740E+3,0.133E+3,0.270E+2,0.98890000E+0,0.00000000E+0 - ,0.36305660E+3,0.133E+3,0.280E+2,0.98890000E+0,0.00000000E+0 - ,0.27805780E+3,0.133E+3,0.290E+2,0.98890000E+0,0.00000000E+0 - ,0.28717780E+3,0.133E+3,0.300E+2,0.98890000E+0,0.00000000E+0 - ,0.33996250E+3,0.133E+3,0.310E+2,0.98890000E+0,0.00000000E+0 - ,0.30168000E+3,0.133E+3,0.320E+2,0.98890000E+0,0.00000000E+0 - ,0.25852630E+3,0.133E+3,0.330E+2,0.98890000E+0,0.00000000E+0 - ,0.23250720E+3,0.133E+3,0.340E+2,0.98890000E+0,0.00000000E+0 - ,0.20384000E+3,0.133E+3,0.350E+2,0.98890000E+0,0.00000000E+0 - ,0.17747160E+3,0.133E+3,0.360E+2,0.98890000E+0,0.00000000E+0 - ,0.89049310E+3,0.133E+3,0.370E+2,0.98890000E+0,0.00000000E+0 - ,0.79208160E+3,0.133E+3,0.380E+2,0.98890000E+0,0.00000000E+0 - ,0.69780370E+3,0.133E+3,0.390E+2,0.98890000E+0,0.00000000E+0 - ,0.62921900E+3,0.133E+3,0.400E+2,0.98890000E+0,0.00000000E+0 - ,0.57490090E+3,0.133E+3,0.410E+2,0.98890000E+0,0.00000000E+0 - ,0.44507990E+3,0.133E+3,0.420E+2,0.98890000E+0,0.00000000E+0 - ,0.49610230E+3,0.133E+3,0.430E+2,0.98890000E+0,0.00000000E+0 - ,0.37904270E+3,0.133E+3,0.440E+2,0.98890000E+0,0.00000000E+0 - ,0.41454110E+3,0.133E+3,0.450E+2,0.98890000E+0,0.00000000E+0 - ,0.38481520E+3,0.133E+3,0.460E+2,0.98890000E+0,0.00000000E+0 - ,0.32022310E+3,0.133E+3,0.470E+2,0.98890000E+0,0.00000000E+0 - ,0.33948140E+3,0.133E+3,0.480E+2,0.98890000E+0,0.00000000E+0 - ,0.42470080E+3,0.133E+3,0.490E+2,0.98890000E+0,0.00000000E+0 - ,0.39481650E+3,0.133E+3,0.500E+2,0.98890000E+0,0.00000000E+0 - ,0.35342450E+3,0.133E+3,0.510E+2,0.98890000E+0,0.00000000E+0 - ,0.32867560E+3,0.133E+3,0.520E+2,0.98890000E+0,0.00000000E+0 - ,0.29780640E+3,0.133E+3,0.530E+2,0.98890000E+0,0.00000000E+0 - ,0.26817000E+3,0.133E+3,0.540E+2,0.98890000E+0,0.00000000E+0 - ,0.10853677E+4,0.133E+3,0.550E+2,0.98890000E+0,0.00000000E+0 - ,0.10077913E+4,0.133E+3,0.560E+2,0.98890000E+0,0.00000000E+0 - ,0.89047640E+3,0.133E+3,0.570E+2,0.98890000E+0,0.00000000E+0 - ,0.41703500E+3,0.133E+3,0.580E+2,0.98890000E+0,0.27991000E+1 - ,0.89428150E+3,0.133E+3,0.590E+2,0.98890000E+0,0.00000000E+0 - ,0.85952480E+3,0.133E+3,0.600E+2,0.98890000E+0,0.00000000E+0 - ,0.83818370E+3,0.133E+3,0.610E+2,0.98890000E+0,0.00000000E+0 - ,0.81853810E+3,0.133E+3,0.620E+2,0.98890000E+0,0.00000000E+0 - ,0.80112860E+3,0.133E+3,0.630E+2,0.98890000E+0,0.00000000E+0 - ,0.63358090E+3,0.133E+3,0.640E+2,0.98890000E+0,0.00000000E+0 - ,0.70687070E+3,0.133E+3,0.650E+2,0.98890000E+0,0.00000000E+0 - ,0.68251260E+3,0.133E+3,0.660E+2,0.98890000E+0,0.00000000E+0 - ,0.72360130E+3,0.133E+3,0.670E+2,0.98890000E+0,0.00000000E+0 - ,0.70836530E+3,0.133E+3,0.680E+2,0.98890000E+0,0.00000000E+0 - ,0.69468070E+3,0.133E+3,0.690E+2,0.98890000E+0,0.00000000E+0 - ,0.68640110E+3,0.133E+3,0.700E+2,0.98890000E+0,0.00000000E+0 - ,0.58061170E+3,0.133E+3,0.710E+2,0.98890000E+0,0.00000000E+0 - ,0.57440900E+3,0.133E+3,0.720E+2,0.98890000E+0,0.00000000E+0 - ,0.52573750E+3,0.133E+3,0.730E+2,0.98890000E+0,0.00000000E+0 - ,0.44464860E+3,0.133E+3,0.740E+2,0.98890000E+0,0.00000000E+0 - ,0.45291770E+3,0.133E+3,0.750E+2,0.98890000E+0,0.00000000E+0 - ,0.41136690E+3,0.133E+3,0.760E+2,0.98890000E+0,0.00000000E+0 - ,0.37733280E+3,0.133E+3,0.770E+2,0.98890000E+0,0.00000000E+0 - ,0.31370400E+3,0.133E+3,0.780E+2,0.98890000E+0,0.00000000E+0 - ,0.29316560E+3,0.133E+3,0.790E+2,0.98890000E+0,0.00000000E+0 - ,0.30197230E+3,0.133E+3,0.800E+2,0.98890000E+0,0.00000000E+0 - ,0.43615840E+3,0.133E+3,0.810E+2,0.98890000E+0,0.00000000E+0 - ,0.42826390E+3,0.133E+3,0.820E+2,0.98890000E+0,0.00000000E+0 - ,0.39514950E+3,0.133E+3,0.830E+2,0.98890000E+0,0.00000000E+0 - ,0.37768730E+3,0.133E+3,0.840E+2,0.98890000E+0,0.00000000E+0 - ,0.34934070E+3,0.133E+3,0.850E+2,0.98890000E+0,0.00000000E+0 - ,0.32071970E+3,0.133E+3,0.860E+2,0.98890000E+0,0.00000000E+0 - ,0.10295399E+4,0.133E+3,0.870E+2,0.98890000E+0,0.00000000E+0 - ,0.99943950E+3,0.133E+3,0.880E+2,0.98890000E+0,0.00000000E+0 - ,0.88791120E+3,0.133E+3,0.890E+2,0.98890000E+0,0.00000000E+0 - ,0.80215530E+3,0.133E+3,0.900E+2,0.98890000E+0,0.00000000E+0 - ,0.79394730E+3,0.133E+3,0.910E+2,0.98890000E+0,0.00000000E+0 - ,0.76878210E+3,0.133E+3,0.920E+2,0.98890000E+0,0.00000000E+0 - ,0.78864020E+3,0.133E+3,0.930E+2,0.98890000E+0,0.00000000E+0 - ,0.76421100E+3,0.133E+3,0.940E+2,0.98890000E+0,0.00000000E+0 - ,0.43906700E+2,0.133E+3,0.101E+3,0.98890000E+0,0.00000000E+0 - ,0.14013530E+3,0.133E+3,0.103E+3,0.98890000E+0,0.98650000E+0 - ,0.17913900E+3,0.133E+3,0.104E+3,0.98890000E+0,0.98080000E+0 - ,0.13814460E+3,0.133E+3,0.105E+3,0.98890000E+0,0.97060000E+0 - ,0.10445320E+3,0.133E+3,0.106E+3,0.98890000E+0,0.98680000E+0 - ,0.72807300E+2,0.133E+3,0.107E+3,0.98890000E+0,0.99440000E+0 - ,0.53064500E+2,0.133E+3,0.108E+3,0.98890000E+0,0.99250000E+0 - ,0.36472800E+2,0.133E+3,0.109E+3,0.98890000E+0,0.99820000E+0 - ,0.20419370E+3,0.133E+3,0.111E+3,0.98890000E+0,0.96840000E+0 - ,0.31566880E+3,0.133E+3,0.112E+3,0.98890000E+0,0.96280000E+0 - ,0.32160430E+3,0.133E+3,0.113E+3,0.98890000E+0,0.96480000E+0 - ,0.26040440E+3,0.133E+3,0.114E+3,0.98890000E+0,0.95070000E+0 - ,0.21425140E+3,0.133E+3,0.115E+3,0.98890000E+0,0.99470000E+0 - ,0.18159050E+3,0.133E+3,0.116E+3,0.98890000E+0,0.99480000E+0 - ,0.14869430E+3,0.133E+3,0.117E+3,0.98890000E+0,0.99720000E+0 - ,0.28230700E+3,0.133E+3,0.119E+3,0.98890000E+0,0.97670000E+0 - ,0.53224610E+3,0.133E+3,0.120E+3,0.98890000E+0,0.98310000E+0 - ,0.28445160E+3,0.133E+3,0.121E+3,0.98890000E+0,0.18627000E+1 - ,0.27459290E+3,0.133E+3,0.122E+3,0.98890000E+0,0.18299000E+1 - ,0.26902700E+3,0.133E+3,0.123E+3,0.98890000E+0,0.19138000E+1 - ,0.26629390E+3,0.133E+3,0.124E+3,0.98890000E+0,0.18269000E+1 - ,0.24597130E+3,0.133E+3,0.125E+3,0.98890000E+0,0.16406000E+1 - ,0.22781130E+3,0.133E+3,0.126E+3,0.98890000E+0,0.16483000E+1 - ,0.21726350E+3,0.133E+3,0.127E+3,0.98890000E+0,0.17149000E+1 - ,0.21232210E+3,0.133E+3,0.128E+3,0.98890000E+0,0.17937000E+1 - ,0.20913220E+3,0.133E+3,0.129E+3,0.98890000E+0,0.95760000E+0 - ,0.19727710E+3,0.133E+3,0.130E+3,0.98890000E+0,0.19419000E+1 - ,0.31978710E+3,0.133E+3,0.131E+3,0.98890000E+0,0.96010000E+0 - ,0.28257170E+3,0.133E+3,0.132E+3,0.98890000E+0,0.94340000E+0 - ,0.25419240E+3,0.133E+3,0.133E+3,0.98890000E+0,0.98890000E+0 - ,0.25314900E+2,0.134E+3,0.100E+1,0.99010000E+0,0.91180000E+0 - ,0.17028000E+2,0.134E+3,0.200E+1,0.99010000E+0,0.00000000E+0 - ,0.35504500E+3,0.134E+3,0.300E+1,0.99010000E+0,0.00000000E+0 - ,0.21516710E+3,0.134E+3,0.400E+1,0.99010000E+0,0.00000000E+0 - ,0.14885900E+3,0.134E+3,0.500E+1,0.99010000E+0,0.00000000E+0 - ,0.10246200E+3,0.134E+3,0.600E+1,0.99010000E+0,0.00000000E+0 - ,0.72556700E+2,0.134E+3,0.700E+1,0.99010000E+0,0.00000000E+0 - ,0.55375200E+2,0.134E+3,0.800E+1,0.99010000E+0,0.00000000E+0 - ,0.42202700E+2,0.134E+3,0.900E+1,0.99010000E+0,0.00000000E+0 - ,0.32593500E+2,0.134E+3,0.100E+2,0.99010000E+0,0.00000000E+0 - ,0.42577330E+3,0.134E+3,0.110E+2,0.99010000E+0,0.00000000E+0 - ,0.33984270E+3,0.134E+3,0.120E+2,0.99010000E+0,0.00000000E+0 - ,0.31781330E+3,0.134E+3,0.130E+2,0.99010000E+0,0.00000000E+0 - ,0.25511530E+3,0.134E+3,0.140E+2,0.99010000E+0,0.00000000E+0 - ,0.20196030E+3,0.134E+3,0.150E+2,0.99010000E+0,0.00000000E+0 - ,0.16917120E+3,0.134E+3,0.160E+2,0.99010000E+0,0.00000000E+0 - ,0.13934530E+3,0.134E+3,0.170E+2,0.99010000E+0,0.00000000E+0 - ,0.11476770E+3,0.134E+3,0.180E+2,0.99010000E+0,0.00000000E+0 - ,0.69398180E+3,0.134E+3,0.190E+2,0.99010000E+0,0.00000000E+0 - ,0.58857630E+3,0.134E+3,0.200E+2,0.99010000E+0,0.00000000E+0 - ,0.48933050E+3,0.134E+3,0.210E+2,0.99010000E+0,0.00000000E+0 - ,0.47544530E+3,0.134E+3,0.220E+2,0.99010000E+0,0.00000000E+0 - ,0.43692930E+3,0.134E+3,0.230E+2,0.99010000E+0,0.00000000E+0 - ,0.34458580E+3,0.134E+3,0.240E+2,0.99010000E+0,0.00000000E+0 - ,0.37811330E+3,0.134E+3,0.250E+2,0.99010000E+0,0.00000000E+0 - ,0.29726970E+3,0.134E+3,0.260E+2,0.99010000E+0,0.00000000E+0 - ,0.31722330E+3,0.134E+3,0.270E+2,0.99010000E+0,0.00000000E+0 - ,0.32556670E+3,0.134E+3,0.280E+2,0.99010000E+0,0.00000000E+0 - ,0.24982100E+3,0.134E+3,0.290E+2,0.99010000E+0,0.00000000E+0 - ,0.25919160E+3,0.134E+3,0.300E+2,0.99010000E+0,0.00000000E+0 - ,0.30612750E+3,0.134E+3,0.310E+2,0.99010000E+0,0.00000000E+0 - ,0.27376800E+3,0.134E+3,0.320E+2,0.99010000E+0,0.00000000E+0 - ,0.23642060E+3,0.134E+3,0.330E+2,0.99010000E+0,0.00000000E+0 - ,0.21372980E+3,0.134E+3,0.340E+2,0.99010000E+0,0.00000000E+0 - ,0.18840310E+3,0.134E+3,0.350E+2,0.99010000E+0,0.00000000E+0 - ,0.16488330E+3,0.134E+3,0.360E+2,0.99010000E+0,0.00000000E+0 - ,0.78009860E+3,0.134E+3,0.370E+2,0.99010000E+0,0.00000000E+0 - ,0.70080150E+3,0.134E+3,0.380E+2,0.99010000E+0,0.00000000E+0 - ,0.62089180E+3,0.134E+3,0.390E+2,0.99010000E+0,0.00000000E+0 - ,0.56200010E+3,0.134E+3,0.400E+2,0.99010000E+0,0.00000000E+0 - ,0.51489450E+3,0.134E+3,0.410E+2,0.99010000E+0,0.00000000E+0 - ,0.40077220E+3,0.134E+3,0.420E+2,0.99010000E+0,0.00000000E+0 - ,0.44579160E+3,0.134E+3,0.430E+2,0.99010000E+0,0.00000000E+0 - ,0.34259700E+3,0.134E+3,0.440E+2,0.99010000E+0,0.00000000E+0 - ,0.37429000E+3,0.134E+3,0.450E+2,0.99010000E+0,0.00000000E+0 - ,0.34804020E+3,0.134E+3,0.460E+2,0.99010000E+0,0.00000000E+0 - ,0.28983280E+3,0.134E+3,0.470E+2,0.99010000E+0,0.00000000E+0 - ,0.30772140E+3,0.134E+3,0.480E+2,0.99010000E+0,0.00000000E+0 - ,0.38283810E+3,0.134E+3,0.490E+2,0.99010000E+0,0.00000000E+0 - ,0.35796090E+3,0.134E+3,0.500E+2,0.99010000E+0,0.00000000E+0 - ,0.32248120E+3,0.134E+3,0.510E+2,0.99010000E+0,0.00000000E+0 - ,0.30115060E+3,0.134E+3,0.520E+2,0.99010000E+0,0.00000000E+0 - ,0.27413770E+3,0.134E+3,0.530E+2,0.99010000E+0,0.00000000E+0 - ,0.24798670E+3,0.134E+3,0.540E+2,0.99010000E+0,0.00000000E+0 - ,0.95163050E+3,0.134E+3,0.550E+2,0.99010000E+0,0.00000000E+0 - ,0.89062640E+3,0.134E+3,0.560E+2,0.99010000E+0,0.00000000E+0 - ,0.79124710E+3,0.134E+3,0.570E+2,0.99010000E+0,0.00000000E+0 - ,0.38031600E+3,0.134E+3,0.580E+2,0.99010000E+0,0.27991000E+1 - ,0.79188170E+3,0.134E+3,0.590E+2,0.99010000E+0,0.00000000E+0 - ,0.76169980E+3,0.134E+3,0.600E+2,0.99010000E+0,0.00000000E+0 - ,0.74294350E+3,0.134E+3,0.610E+2,0.99010000E+0,0.00000000E+0 - ,0.72565360E+3,0.134E+3,0.620E+2,0.99010000E+0,0.00000000E+0 - ,0.71033760E+3,0.134E+3,0.630E+2,0.99010000E+0,0.00000000E+0 - ,0.56579140E+3,0.134E+3,0.640E+2,0.99010000E+0,0.00000000E+0 - ,0.62617050E+3,0.134E+3,0.650E+2,0.99010000E+0,0.00000000E+0 - ,0.60528280E+3,0.134E+3,0.660E+2,0.99010000E+0,0.00000000E+0 - ,0.64237950E+3,0.134E+3,0.670E+2,0.99010000E+0,0.00000000E+0 - ,0.62891080E+3,0.134E+3,0.680E+2,0.99010000E+0,0.00000000E+0 - ,0.61686660E+3,0.134E+3,0.690E+2,0.99010000E+0,0.00000000E+0 - ,0.60931460E+3,0.134E+3,0.700E+2,0.99010000E+0,0.00000000E+0 - ,0.51790690E+3,0.134E+3,0.710E+2,0.99010000E+0,0.00000000E+0 - ,0.51523880E+3,0.134E+3,0.720E+2,0.99010000E+0,0.00000000E+0 - ,0.47346190E+3,0.134E+3,0.730E+2,0.99010000E+0,0.00000000E+0 - ,0.40207780E+3,0.134E+3,0.740E+2,0.99010000E+0,0.00000000E+0 - ,0.41003520E+3,0.134E+3,0.750E+2,0.99010000E+0,0.00000000E+0 - ,0.37374220E+3,0.134E+3,0.760E+2,0.99010000E+0,0.00000000E+0 - ,0.34383760E+3,0.134E+3,0.770E+2,0.99010000E+0,0.00000000E+0 - ,0.28699450E+3,0.134E+3,0.780E+2,0.99010000E+0,0.00000000E+0 - ,0.26861450E+3,0.134E+3,0.790E+2,0.99010000E+0,0.00000000E+0 - ,0.27687780E+3,0.134E+3,0.800E+2,0.99010000E+0,0.00000000E+0 - ,0.39433850E+3,0.134E+3,0.810E+2,0.99010000E+0,0.00000000E+0 - ,0.38873570E+3,0.134E+3,0.820E+2,0.99010000E+0,0.00000000E+0 - ,0.36061850E+3,0.134E+3,0.830E+2,0.99010000E+0,0.00000000E+0 - ,0.34584750E+3,0.134E+3,0.840E+2,0.99010000E+0,0.00000000E+0 - ,0.32125280E+3,0.134E+3,0.850E+2,0.99010000E+0,0.00000000E+0 - ,0.29613640E+3,0.134E+3,0.860E+2,0.99010000E+0,0.00000000E+0 - ,0.90670650E+3,0.134E+3,0.870E+2,0.99010000E+0,0.00000000E+0 - ,0.88597380E+3,0.134E+3,0.880E+2,0.99010000E+0,0.00000000E+0 - ,0.79097170E+3,0.134E+3,0.890E+2,0.99010000E+0,0.00000000E+0 - ,0.71920180E+3,0.134E+3,0.900E+2,0.99010000E+0,0.00000000E+0 - ,0.71002990E+3,0.134E+3,0.910E+2,0.99010000E+0,0.00000000E+0 - ,0.68765590E+3,0.134E+3,0.920E+2,0.99010000E+0,0.00000000E+0 - ,0.70268800E+3,0.134E+3,0.930E+2,0.99010000E+0,0.00000000E+0 - ,0.68135890E+3,0.134E+3,0.940E+2,0.99010000E+0,0.00000000E+0 - ,0.40211700E+2,0.134E+3,0.101E+3,0.99010000E+0,0.00000000E+0 - ,0.12555640E+3,0.134E+3,0.103E+3,0.99010000E+0,0.98650000E+0 - ,0.16106370E+3,0.134E+3,0.104E+3,0.99010000E+0,0.98080000E+0 - ,0.12588880E+3,0.134E+3,0.105E+3,0.99010000E+0,0.97060000E+0 - ,0.96087200E+2,0.134E+3,0.106E+3,0.99010000E+0,0.98680000E+0 - ,0.67679600E+2,0.134E+3,0.107E+3,0.99010000E+0,0.99440000E+0 - ,0.49766500E+2,0.134E+3,0.108E+3,0.99010000E+0,0.99250000E+0 - ,0.34588200E+2,0.134E+3,0.109E+3,0.99010000E+0,0.99820000E+0 - ,0.18260620E+3,0.134E+3,0.111E+3,0.99010000E+0,0.96840000E+0 - ,0.28192490E+3,0.134E+3,0.112E+3,0.99010000E+0,0.96280000E+0 - ,0.28901630E+3,0.134E+3,0.113E+3,0.99010000E+0,0.96480000E+0 - ,0.23642530E+3,0.134E+3,0.114E+3,0.99010000E+0,0.95070000E+0 - ,0.19613740E+3,0.134E+3,0.115E+3,0.99010000E+0,0.99470000E+0 - ,0.16726720E+3,0.134E+3,0.116E+3,0.99010000E+0,0.99480000E+0 - ,0.13787350E+3,0.134E+3,0.117E+3,0.99010000E+0,0.99720000E+0 - ,0.25453760E+3,0.134E+3,0.119E+3,0.99010000E+0,0.97670000E+0 - ,0.47198210E+3,0.134E+3,0.120E+3,0.99010000E+0,0.98310000E+0 - ,0.25812950E+3,0.134E+3,0.121E+3,0.99010000E+0,0.18627000E+1 - ,0.24934370E+3,0.134E+3,0.122E+3,0.99010000E+0,0.18299000E+1 - ,0.24427270E+3,0.134E+3,0.123E+3,0.99010000E+0,0.19138000E+1 - ,0.24158030E+3,0.134E+3,0.124E+3,0.99010000E+0,0.18269000E+1 - ,0.22407570E+3,0.134E+3,0.125E+3,0.99010000E+0,0.16406000E+1 - ,0.20787480E+3,0.134E+3,0.126E+3,0.99010000E+0,0.16483000E+1 - ,0.19829930E+3,0.134E+3,0.127E+3,0.99010000E+0,0.17149000E+1 - ,0.19372130E+3,0.134E+3,0.128E+3,0.99010000E+0,0.17937000E+1 - ,0.19016850E+3,0.134E+3,0.129E+3,0.99010000E+0,0.95760000E+0 - ,0.18048120E+3,0.134E+3,0.130E+3,0.99010000E+0,0.19419000E+1 - ,0.28854930E+3,0.134E+3,0.131E+3,0.99010000E+0,0.96010000E+0 - ,0.25695230E+3,0.134E+3,0.132E+3,0.99010000E+0,0.94340000E+0 - ,0.23257840E+3,0.134E+3,0.133E+3,0.99010000E+0,0.98890000E+0 - ,0.21378620E+3,0.134E+3,0.134E+3,0.99010000E+0,0.99010000E+0 - ,0.22623000E+2,0.135E+3,0.100E+1,0.99740000E+0,0.91180000E+0 - ,0.15538700E+2,0.135E+3,0.200E+1,0.99740000E+0,0.00000000E+0 - ,0.29768350E+3,0.135E+3,0.300E+1,0.99740000E+0,0.00000000E+0 - ,0.18488320E+3,0.135E+3,0.400E+1,0.99740000E+0,0.00000000E+0 - ,0.13018810E+3,0.135E+3,0.500E+1,0.99740000E+0,0.00000000E+0 - ,0.90934300E+2,0.135E+3,0.600E+1,0.99740000E+0,0.00000000E+0 - ,0.65154300E+2,0.135E+3,0.700E+1,0.99740000E+0,0.00000000E+0 - ,0.50163200E+2,0.135E+3,0.800E+1,0.99740000E+0,0.00000000E+0 - ,0.38529400E+2,0.135E+3,0.900E+1,0.99740000E+0,0.00000000E+0 - ,0.29950100E+2,0.135E+3,0.100E+2,0.99740000E+0,0.00000000E+0 - ,0.35772460E+3,0.135E+3,0.110E+2,0.99740000E+0,0.00000000E+0 - ,0.29072760E+3,0.135E+3,0.120E+2,0.99740000E+0,0.00000000E+0 - ,0.27418940E+3,0.135E+3,0.130E+2,0.99740000E+0,0.00000000E+0 - ,0.22268120E+3,0.135E+3,0.140E+2,0.99740000E+0,0.00000000E+0 - ,0.17819840E+3,0.135E+3,0.150E+2,0.99740000E+0,0.00000000E+0 - ,0.15042030E+3,0.135E+3,0.160E+2,0.99740000E+0,0.00000000E+0 - ,0.12484950E+3,0.135E+3,0.170E+2,0.99740000E+0,0.00000000E+0 - ,0.10354670E+3,0.135E+3,0.180E+2,0.99740000E+0,0.00000000E+0 - ,0.58289140E+3,0.135E+3,0.190E+2,0.99740000E+0,0.00000000E+0 - ,0.50041520E+3,0.135E+3,0.200E+2,0.99740000E+0,0.00000000E+0 - ,0.41736480E+3,0.135E+3,0.210E+2,0.99740000E+0,0.00000000E+0 - ,0.40709700E+3,0.135E+3,0.220E+2,0.99740000E+0,0.00000000E+0 - ,0.37492830E+3,0.135E+3,0.230E+2,0.99740000E+0,0.00000000E+0 - ,0.29636070E+3,0.135E+3,0.240E+2,0.99740000E+0,0.00000000E+0 - ,0.32549450E+3,0.135E+3,0.250E+2,0.99740000E+0,0.00000000E+0 - ,0.25659390E+3,0.135E+3,0.260E+2,0.99740000E+0,0.00000000E+0 - ,0.27446200E+3,0.135E+3,0.270E+2,0.99740000E+0,0.00000000E+0 - ,0.28101540E+3,0.135E+3,0.280E+2,0.99740000E+0,0.00000000E+0 - ,0.21621400E+3,0.135E+3,0.290E+2,0.99740000E+0,0.00000000E+0 - ,0.22534570E+3,0.135E+3,0.300E+2,0.99740000E+0,0.00000000E+0 - ,0.26539390E+3,0.135E+3,0.310E+2,0.99740000E+0,0.00000000E+0 - ,0.23936360E+3,0.135E+3,0.320E+2,0.99740000E+0,0.00000000E+0 - ,0.20849570E+3,0.135E+3,0.330E+2,0.99740000E+0,0.00000000E+0 - ,0.18959740E+3,0.135E+3,0.340E+2,0.99740000E+0,0.00000000E+0 - ,0.16817910E+3,0.135E+3,0.350E+2,0.99740000E+0,0.00000000E+0 - ,0.14806890E+3,0.135E+3,0.360E+2,0.99740000E+0,0.00000000E+0 - ,0.65665740E+3,0.135E+3,0.370E+2,0.99740000E+0,0.00000000E+0 - ,0.59602140E+3,0.135E+3,0.380E+2,0.99740000E+0,0.00000000E+0 - ,0.53134260E+3,0.135E+3,0.390E+2,0.99740000E+0,0.00000000E+0 - ,0.48298730E+3,0.135E+3,0.400E+2,0.99740000E+0,0.00000000E+0 - ,0.44388480E+3,0.135E+3,0.410E+2,0.99740000E+0,0.00000000E+0 - ,0.34768000E+3,0.135E+3,0.420E+2,0.99740000E+0,0.00000000E+0 - ,0.38579860E+3,0.135E+3,0.430E+2,0.99740000E+0,0.00000000E+0 - ,0.29851740E+3,0.135E+3,0.440E+2,0.99740000E+0,0.00000000E+0 - ,0.32566500E+3,0.135E+3,0.450E+2,0.99740000E+0,0.00000000E+0 - ,0.30341070E+3,0.135E+3,0.460E+2,0.99740000E+0,0.00000000E+0 - ,0.25300950E+3,0.135E+3,0.470E+2,0.99740000E+0,0.00000000E+0 - ,0.26894910E+3,0.135E+3,0.480E+2,0.99740000E+0,0.00000000E+0 - ,0.33247910E+3,0.135E+3,0.490E+2,0.99740000E+0,0.00000000E+0 - ,0.31279940E+3,0.135E+3,0.500E+2,0.99740000E+0,0.00000000E+0 - ,0.28377610E+3,0.135E+3,0.510E+2,0.99740000E+0,0.00000000E+0 - ,0.26623860E+3,0.135E+3,0.520E+2,0.99740000E+0,0.00000000E+0 - ,0.24362960E+3,0.135E+3,0.530E+2,0.99740000E+0,0.00000000E+0 - ,0.22153670E+3,0.135E+3,0.540E+2,0.99740000E+0,0.00000000E+0 - ,0.80186140E+3,0.135E+3,0.550E+2,0.99740000E+0,0.00000000E+0 - ,0.75662710E+3,0.135E+3,0.560E+2,0.99740000E+0,0.00000000E+0 - ,0.67619300E+3,0.135E+3,0.570E+2,0.99740000E+0,0.00000000E+0 - ,0.33452620E+3,0.135E+3,0.580E+2,0.99740000E+0,0.27991000E+1 - ,0.67428760E+3,0.135E+3,0.590E+2,0.99740000E+0,0.00000000E+0 - ,0.64912820E+3,0.135E+3,0.600E+2,0.99740000E+0,0.00000000E+0 - ,0.63328350E+3,0.135E+3,0.610E+2,0.99740000E+0,0.00000000E+0 - ,0.61865400E+3,0.135E+3,0.620E+2,0.99740000E+0,0.00000000E+0 - ,0.60569940E+3,0.135E+3,0.630E+2,0.99740000E+0,0.00000000E+0 - ,0.48634440E+3,0.135E+3,0.640E+2,0.99740000E+0,0.00000000E+0 - ,0.53364850E+3,0.135E+3,0.650E+2,0.99740000E+0,0.00000000E+0 - ,0.51649050E+3,0.135E+3,0.660E+2,0.99740000E+0,0.00000000E+0 - ,0.54846290E+3,0.135E+3,0.670E+2,0.99740000E+0,0.00000000E+0 - ,0.53700790E+3,0.135E+3,0.680E+2,0.99740000E+0,0.00000000E+0 - ,0.52681470E+3,0.135E+3,0.690E+2,0.99740000E+0,0.00000000E+0 - ,0.52016740E+3,0.135E+3,0.700E+2,0.99740000E+0,0.00000000E+0 - ,0.44455160E+3,0.135E+3,0.710E+2,0.99740000E+0,0.00000000E+0 - ,0.44488510E+3,0.135E+3,0.720E+2,0.99740000E+0,0.00000000E+0 - ,0.41064300E+3,0.135E+3,0.730E+2,0.99740000E+0,0.00000000E+0 - ,0.35042340E+3,0.135E+3,0.740E+2,0.99740000E+0,0.00000000E+0 - ,0.35779320E+3,0.135E+3,0.750E+2,0.99740000E+0,0.00000000E+0 - ,0.32743170E+3,0.135E+3,0.760E+2,0.99740000E+0,0.00000000E+0 - ,0.30224750E+3,0.135E+3,0.770E+2,0.99740000E+0,0.00000000E+0 - ,0.25348160E+3,0.135E+3,0.780E+2,0.99740000E+0,0.00000000E+0 - ,0.23768320E+3,0.135E+3,0.790E+2,0.99740000E+0,0.00000000E+0 - ,0.24514110E+3,0.135E+3,0.800E+2,0.99740000E+0,0.00000000E+0 - ,0.34374040E+3,0.135E+3,0.810E+2,0.99740000E+0,0.00000000E+0 - ,0.34024220E+3,0.135E+3,0.820E+2,0.99740000E+0,0.00000000E+0 - ,0.31748380E+3,0.135E+3,0.830E+2,0.99740000E+0,0.00000000E+0 - ,0.30560970E+3,0.135E+3,0.840E+2,0.99740000E+0,0.00000000E+0 - ,0.28522290E+3,0.135E+3,0.850E+2,0.99740000E+0,0.00000000E+0 - ,0.26413340E+3,0.135E+3,0.860E+2,0.99740000E+0,0.00000000E+0 - ,0.76779060E+3,0.135E+3,0.870E+2,0.99740000E+0,0.00000000E+0 - ,0.75526170E+3,0.135E+3,0.880E+2,0.99740000E+0,0.00000000E+0 - ,0.67787670E+3,0.135E+3,0.890E+2,0.99740000E+0,0.00000000E+0 - ,0.62082600E+3,0.135E+3,0.900E+2,0.99740000E+0,0.00000000E+0 - ,0.61130750E+3,0.135E+3,0.910E+2,0.99740000E+0,0.00000000E+0 - ,0.59218710E+3,0.135E+3,0.920E+2,0.99740000E+0,0.00000000E+0 - ,0.60258350E+3,0.135E+3,0.930E+2,0.99740000E+0,0.00000000E+0 - ,0.58469980E+3,0.135E+3,0.940E+2,0.99740000E+0,0.00000000E+0 - ,0.35512300E+2,0.135E+3,0.101E+3,0.99740000E+0,0.00000000E+0 - ,0.10820480E+3,0.135E+3,0.103E+3,0.99740000E+0,0.98650000E+0 - ,0.13936170E+3,0.135E+3,0.104E+3,0.99740000E+0,0.98080000E+0 - ,0.11058020E+3,0.135E+3,0.105E+3,0.99740000E+0,0.97060000E+0 - ,0.85326500E+2,0.135E+3,0.106E+3,0.99740000E+0,0.98680000E+0 - ,0.60835900E+2,0.135E+3,0.107E+3,0.99740000E+0,0.99440000E+0 - ,0.45201900E+2,0.135E+3,0.108E+3,0.99740000E+0,0.99250000E+0 - ,0.31831300E+2,0.135E+3,0.109E+3,0.99740000E+0,0.99820000E+0 - ,0.15710050E+3,0.135E+3,0.111E+3,0.99740000E+0,0.96840000E+0 - ,0.24214760E+3,0.135E+3,0.112E+3,0.99740000E+0,0.96280000E+0 - ,0.24992480E+3,0.135E+3,0.113E+3,0.99740000E+0,0.96480000E+0 - ,0.20678800E+3,0.135E+3,0.114E+3,0.99740000E+0,0.95070000E+0 - ,0.17315820E+3,0.135E+3,0.115E+3,0.99740000E+0,0.99470000E+0 - ,0.14872190E+3,0.135E+3,0.116E+3,0.99740000E+0,0.99480000E+0 - ,0.12352740E+3,0.135E+3,0.117E+3,0.99740000E+0,0.99720000E+0 - ,0.22116420E+3,0.135E+3,0.119E+3,0.99740000E+0,0.97670000E+0 - ,0.40253800E+3,0.135E+3,0.120E+3,0.99740000E+0,0.98310000E+0 - ,0.22577840E+3,0.135E+3,0.121E+3,0.99740000E+0,0.18627000E+1 - ,0.21827110E+3,0.135E+3,0.122E+3,0.99740000E+0,0.18299000E+1 - ,0.21382760E+3,0.135E+3,0.123E+3,0.99740000E+0,0.19138000E+1 - ,0.21128090E+3,0.135E+3,0.124E+3,0.99740000E+0,0.18269000E+1 - ,0.19683950E+3,0.135E+3,0.125E+3,0.99740000E+0,0.16406000E+1 - ,0.18295500E+3,0.135E+3,0.126E+3,0.99740000E+0,0.16483000E+1 - ,0.17459100E+3,0.135E+3,0.127E+3,0.99740000E+0,0.17149000E+1 - ,0.17050040E+3,0.135E+3,0.128E+3,0.99740000E+0,0.17937000E+1 - ,0.16678160E+3,0.135E+3,0.129E+3,0.99740000E+0,0.95760000E+0 - ,0.15930490E+3,0.135E+3,0.130E+3,0.99740000E+0,0.19419000E+1 - ,0.25072470E+3,0.135E+3,0.131E+3,0.99740000E+0,0.96010000E+0 - ,0.22517920E+3,0.135E+3,0.132E+3,0.99740000E+0,0.94340000E+0 - ,0.20523050E+3,0.135E+3,0.133E+3,0.99740000E+0,0.98890000E+0 - ,0.18964080E+3,0.135E+3,0.134E+3,0.99740000E+0,0.99010000E+0 - ,0.16923750E+3,0.135E+3,0.135E+3,0.99740000E+0,0.99740000E+0 - ,0.35196300E+2,0.137E+3,0.100E+1,0.97380000E+0,0.91180000E+0 - ,0.22623100E+2,0.137E+3,0.200E+1,0.97380000E+0,0.00000000E+0 - ,0.65740760E+3,0.137E+3,0.300E+1,0.97380000E+0,0.00000000E+0 - ,0.34543780E+3,0.137E+3,0.400E+1,0.97380000E+0,0.00000000E+0 - ,0.22250810E+3,0.137E+3,0.500E+1,0.97380000E+0,0.00000000E+0 - ,0.14599740E+3,0.137E+3,0.600E+1,0.97380000E+0,0.00000000E+0 - ,0.10014180E+3,0.137E+3,0.700E+1,0.97380000E+0,0.00000000E+0 - ,0.74886800E+2,0.137E+3,0.800E+1,0.97380000E+0,0.00000000E+0 - ,0.56177900E+2,0.137E+3,0.900E+1,0.97380000E+0,0.00000000E+0 - ,0.42895700E+2,0.137E+3,0.100E+2,0.97380000E+0,0.00000000E+0 - ,0.78185270E+3,0.137E+3,0.110E+2,0.97380000E+0,0.00000000E+0 - ,0.55913370E+3,0.137E+3,0.120E+2,0.97380000E+0,0.00000000E+0 - ,0.50299330E+3,0.137E+3,0.130E+2,0.97380000E+0,0.00000000E+0 - ,0.38390840E+3,0.137E+3,0.140E+2,0.97380000E+0,0.00000000E+0 - ,0.29216040E+3,0.137E+3,0.150E+2,0.97380000E+0,0.00000000E+0 - ,0.23905720E+3,0.137E+3,0.160E+2,0.97380000E+0,0.00000000E+0 - ,0.19278770E+3,0.137E+3,0.170E+2,0.97380000E+0,0.00000000E+0 - ,0.15610100E+3,0.137E+3,0.180E+2,0.97380000E+0,0.00000000E+0 - ,0.13058840E+4,0.137E+3,0.190E+2,0.97380000E+0,0.00000000E+0 - ,0.10130706E+4,0.137E+3,0.200E+2,0.97380000E+0,0.00000000E+0 - ,0.82610410E+3,0.137E+3,0.210E+2,0.97380000E+0,0.00000000E+0 - ,0.78941170E+3,0.137E+3,0.220E+2,0.97380000E+0,0.00000000E+0 - ,0.71821250E+3,0.137E+3,0.230E+2,0.97380000E+0,0.00000000E+0 - ,0.56618560E+3,0.137E+3,0.240E+2,0.97380000E+0,0.00000000E+0 - ,0.61264440E+3,0.137E+3,0.250E+2,0.97380000E+0,0.00000000E+0 - ,0.48062360E+3,0.137E+3,0.260E+2,0.97380000E+0,0.00000000E+0 - ,0.50159400E+3,0.137E+3,0.270E+2,0.97380000E+0,0.00000000E+0 - ,0.51998260E+3,0.137E+3,0.280E+2,0.97380000E+0,0.00000000E+0 - ,0.39935340E+3,0.137E+3,0.290E+2,0.97380000E+0,0.00000000E+0 - ,0.40105480E+3,0.137E+3,0.300E+2,0.97380000E+0,0.00000000E+0 - ,0.47797370E+3,0.137E+3,0.310E+2,0.97380000E+0,0.00000000E+0 - ,0.41103890E+3,0.137E+3,0.320E+2,0.97380000E+0,0.00000000E+0 - ,0.34339780E+3,0.137E+3,0.330E+2,0.97380000E+0,0.00000000E+0 - ,0.30453120E+3,0.137E+3,0.340E+2,0.97380000E+0,0.00000000E+0 - ,0.26345920E+3,0.137E+3,0.350E+2,0.97380000E+0,0.00000000E+0 - ,0.22685900E+3,0.137E+3,0.360E+2,0.97380000E+0,0.00000000E+0 - ,0.14577817E+4,0.137E+3,0.370E+2,0.97380000E+0,0.00000000E+0 - ,0.12108108E+4,0.137E+3,0.380E+2,0.97380000E+0,0.00000000E+0 - ,0.10374434E+4,0.137E+3,0.390E+2,0.97380000E+0,0.00000000E+0 - ,0.92013580E+3,0.137E+3,0.400E+2,0.97380000E+0,0.00000000E+0 - ,0.83213680E+3,0.137E+3,0.410E+2,0.97380000E+0,0.00000000E+0 - ,0.63394710E+3,0.137E+3,0.420E+2,0.97380000E+0,0.00000000E+0 - ,0.71077790E+3,0.137E+3,0.430E+2,0.97380000E+0,0.00000000E+0 - ,0.53361350E+3,0.137E+3,0.440E+2,0.97380000E+0,0.00000000E+0 - ,0.58237420E+3,0.137E+3,0.450E+2,0.97380000E+0,0.00000000E+0 - ,0.53725650E+3,0.137E+3,0.460E+2,0.97380000E+0,0.00000000E+0 - ,0.45047140E+3,0.137E+3,0.470E+2,0.97380000E+0,0.00000000E+0 - ,0.47031190E+3,0.137E+3,0.480E+2,0.97380000E+0,0.00000000E+0 - ,0.59989870E+3,0.137E+3,0.490E+2,0.97380000E+0,0.00000000E+0 - ,0.54287770E+3,0.137E+3,0.500E+2,0.97380000E+0,0.00000000E+0 - ,0.47456410E+3,0.137E+3,0.510E+2,0.97380000E+0,0.00000000E+0 - ,0.43555550E+3,0.137E+3,0.520E+2,0.97380000E+0,0.00000000E+0 - ,0.38946840E+3,0.137E+3,0.530E+2,0.97380000E+0,0.00000000E+0 - ,0.34667910E+3,0.137E+3,0.540E+2,0.97380000E+0,0.00000000E+0 - ,0.17768880E+4,0.137E+3,0.550E+2,0.97380000E+0,0.00000000E+0 - ,0.15569958E+4,0.137E+3,0.560E+2,0.97380000E+0,0.00000000E+0 - ,0.13375010E+4,0.137E+3,0.570E+2,0.97380000E+0,0.00000000E+0 - ,0.56314800E+3,0.137E+3,0.580E+2,0.97380000E+0,0.27991000E+1 - ,0.13695245E+4,0.137E+3,0.590E+2,0.97380000E+0,0.00000000E+0 - ,0.13097014E+4,0.137E+3,0.600E+2,0.97380000E+0,0.00000000E+0 - ,0.12753968E+4,0.137E+3,0.610E+2,0.97380000E+0,0.00000000E+0 - ,0.12439950E+4,0.137E+3,0.620E+2,0.97380000E+0,0.00000000E+0 - ,0.12161018E+4,0.137E+3,0.630E+2,0.97380000E+0,0.00000000E+0 - ,0.93460820E+3,0.137E+3,0.640E+2,0.97380000E+0,0.00000000E+0 - ,0.10930934E+4,0.137E+3,0.650E+2,0.97380000E+0,0.00000000E+0 - ,0.10500925E+4,0.137E+3,0.660E+2,0.97380000E+0,0.00000000E+0 - ,0.10903500E+4,0.137E+3,0.670E+2,0.97380000E+0,0.00000000E+0 - ,0.10664469E+4,0.137E+3,0.680E+2,0.97380000E+0,0.00000000E+0 - ,0.10446045E+4,0.137E+3,0.690E+2,0.97380000E+0,0.00000000E+0 - ,0.10333196E+4,0.137E+3,0.700E+2,0.97380000E+0,0.00000000E+0 - ,0.85724780E+3,0.137E+3,0.710E+2,0.97380000E+0,0.00000000E+0 - ,0.82420500E+3,0.137E+3,0.720E+2,0.97380000E+0,0.00000000E+0 - ,0.74273970E+3,0.137E+3,0.730E+2,0.97380000E+0,0.00000000E+0 - ,0.62209770E+3,0.137E+3,0.740E+2,0.97380000E+0,0.00000000E+0 - ,0.62947280E+3,0.137E+3,0.750E+2,0.97380000E+0,0.00000000E+0 - ,0.56455160E+3,0.137E+3,0.760E+2,0.97380000E+0,0.00000000E+0 - ,0.51279660E+3,0.137E+3,0.770E+2,0.97380000E+0,0.00000000E+0 - ,0.42290190E+3,0.137E+3,0.780E+2,0.97380000E+0,0.00000000E+0 - ,0.39392880E+3,0.137E+3,0.790E+2,0.97380000E+0,0.00000000E+0 - ,0.40326450E+3,0.137E+3,0.800E+2,0.97380000E+0,0.00000000E+0 - ,0.61404690E+3,0.137E+3,0.810E+2,0.97380000E+0,0.00000000E+0 - ,0.58982750E+3,0.137E+3,0.820E+2,0.97380000E+0,0.00000000E+0 - ,0.53239070E+3,0.137E+3,0.830E+2,0.97380000E+0,0.00000000E+0 - ,0.50286730E+3,0.137E+3,0.840E+2,0.97380000E+0,0.00000000E+0 - ,0.45900050E+3,0.137E+3,0.850E+2,0.97380000E+0,0.00000000E+0 - ,0.41673210E+3,0.137E+3,0.860E+2,0.97380000E+0,0.00000000E+0 - ,0.16476456E+4,0.137E+3,0.870E+2,0.97380000E+0,0.00000000E+0 - ,0.15223656E+4,0.137E+3,0.880E+2,0.97380000E+0,0.00000000E+0 - ,0.13176426E+4,0.137E+3,0.890E+2,0.97380000E+0,0.00000000E+0 - ,0.11578649E+4,0.137E+3,0.900E+2,0.97380000E+0,0.00000000E+0 - ,0.11634976E+4,0.137E+3,0.910E+2,0.97380000E+0,0.00000000E+0 - ,0.11259076E+4,0.137E+3,0.920E+2,0.97380000E+0,0.00000000E+0 - ,0.11753584E+4,0.137E+3,0.930E+2,0.97380000E+0,0.00000000E+0 - ,0.11351209E+4,0.137E+3,0.940E+2,0.97380000E+0,0.00000000E+0 - ,0.57903900E+2,0.137E+3,0.101E+3,0.97380000E+0,0.00000000E+0 - ,0.19967710E+3,0.137E+3,0.103E+3,0.97380000E+0,0.98650000E+0 - ,0.25295740E+3,0.137E+3,0.104E+3,0.97380000E+0,0.98080000E+0 - ,0.18572060E+3,0.137E+3,0.105E+3,0.97380000E+0,0.97060000E+0 - ,0.13721250E+3,0.137E+3,0.106E+3,0.97380000E+0,0.98680000E+0 - ,0.93458400E+2,0.137E+3,0.107E+3,0.97380000E+0,0.99440000E+0 - ,0.67004500E+2,0.137E+3,0.108E+3,0.97380000E+0,0.99250000E+0 - ,0.45248900E+2,0.137E+3,0.109E+3,0.97380000E+0,0.99820000E+0 - ,0.29467950E+3,0.137E+3,0.111E+3,0.97380000E+0,0.96840000E+0 - ,0.45778310E+3,0.137E+3,0.112E+3,0.97380000E+0,0.96280000E+0 - ,0.45336360E+3,0.137E+3,0.113E+3,0.97380000E+0,0.96480000E+0 - ,0.35341420E+3,0.137E+3,0.114E+3,0.97380000E+0,0.95070000E+0 - ,0.28343680E+3,0.137E+3,0.115E+3,0.97380000E+0,0.99470000E+0 - ,0.23654670E+3,0.137E+3,0.116E+3,0.97380000E+0,0.99480000E+0 - ,0.19086020E+3,0.137E+3,0.117E+3,0.97380000E+0,0.99720000E+0 - ,0.40103710E+3,0.137E+3,0.119E+3,0.97380000E+0,0.97670000E+0 - ,0.81234890E+3,0.137E+3,0.120E+3,0.97380000E+0,0.98310000E+0 - ,0.38990570E+3,0.137E+3,0.121E+3,0.97380000E+0,0.18627000E+1 - ,0.37639190E+3,0.137E+3,0.122E+3,0.97380000E+0,0.18299000E+1 - ,0.36906490E+3,0.137E+3,0.123E+3,0.97380000E+0,0.19138000E+1 - ,0.36686860E+3,0.137E+3,0.124E+3,0.97380000E+0,0.18269000E+1 - ,0.33222150E+3,0.137E+3,0.125E+3,0.97380000E+0,0.16406000E+1 - ,0.30627200E+3,0.137E+3,0.126E+3,0.97380000E+0,0.16483000E+1 - ,0.29229920E+3,0.137E+3,0.127E+3,0.97380000E+0,0.17149000E+1 - ,0.28612410E+3,0.137E+3,0.128E+3,0.97380000E+0,0.17937000E+1 - ,0.28601310E+3,0.137E+3,0.129E+3,0.97380000E+0,0.95760000E+0 - ,0.26273320E+3,0.137E+3,0.130E+3,0.97380000E+0,0.19419000E+1 - ,0.44607980E+3,0.137E+3,0.131E+3,0.97380000E+0,0.96010000E+0 - ,0.38250120E+3,0.137E+3,0.132E+3,0.97380000E+0,0.94340000E+0 - ,0.33721600E+3,0.137E+3,0.133E+3,0.97380000E+0,0.98890000E+0 - ,0.30472790E+3,0.137E+3,0.134E+3,0.97380000E+0,0.99010000E+0 - ,0.26546470E+3,0.137E+3,0.135E+3,0.97380000E+0,0.99740000E+0 - ,0.47625910E+3,0.137E+3,0.137E+3,0.97380000E+0,0.97380000E+0 - ,0.64406500E+2,0.138E+3,0.100E+1,0.98010000E+0,0.91180000E+0 - ,0.38833300E+2,0.138E+3,0.200E+1,0.98010000E+0,0.00000000E+0 - ,0.16182465E+4,0.138E+3,0.300E+1,0.98010000E+0,0.00000000E+0 - ,0.73479260E+3,0.138E+3,0.400E+1,0.98010000E+0,0.00000000E+0 - ,0.44112610E+3,0.138E+3,0.500E+1,0.98010000E+0,0.00000000E+0 - ,0.27470310E+3,0.138E+3,0.600E+1,0.98010000E+0,0.00000000E+0 - ,0.18119730E+3,0.138E+3,0.700E+1,0.98010000E+0,0.00000000E+0 - ,0.13178460E+3,0.138E+3,0.800E+1,0.98010000E+0,0.00000000E+0 - ,0.96508000E+2,0.138E+3,0.900E+1,0.98010000E+0,0.00000000E+0 - ,0.72270300E+2,0.138E+3,0.100E+2,0.98010000E+0,0.00000000E+0 - ,0.19079592E+4,0.138E+3,0.110E+2,0.98010000E+0,0.00000000E+0 - ,0.12181274E+4,0.138E+3,0.120E+2,0.98010000E+0,0.00000000E+0 - ,0.10570218E+4,0.138E+3,0.130E+2,0.98010000E+0,0.00000000E+0 - ,0.76638470E+3,0.138E+3,0.140E+2,0.98010000E+0,0.00000000E+0 - ,0.55938210E+3,0.138E+3,0.150E+2,0.98010000E+0,0.00000000E+0 - ,0.44578600E+3,0.138E+3,0.160E+2,0.98010000E+0,0.00000000E+0 - ,0.35042730E+3,0.138E+3,0.170E+2,0.98010000E+0,0.00000000E+0 - ,0.27747590E+3,0.138E+3,0.180E+2,0.98010000E+0,0.00000000E+0 - ,0.33022504E+4,0.138E+3,0.190E+2,0.98010000E+0,0.00000000E+0 - ,0.23148420E+4,0.138E+3,0.200E+2,0.98010000E+0,0.00000000E+0 - ,0.18497319E+4,0.138E+3,0.210E+2,0.98010000E+0,0.00000000E+0 - ,0.17407410E+4,0.138E+3,0.220E+2,0.98010000E+0,0.00000000E+0 - ,0.15682263E+4,0.138E+3,0.230E+2,0.98010000E+0,0.00000000E+0 - ,0.12385036E+4,0.138E+3,0.240E+2,0.98010000E+0,0.00000000E+0 - ,0.13188096E+4,0.138E+3,0.250E+2,0.98010000E+0,0.00000000E+0 - ,0.10340602E+4,0.138E+3,0.260E+2,0.98010000E+0,0.00000000E+0 - ,0.10522336E+4,0.138E+3,0.270E+2,0.98010000E+0,0.00000000E+0 - ,0.11016666E+4,0.138E+3,0.280E+2,0.98010000E+0,0.00000000E+0 - ,0.84879520E+3,0.138E+3,0.290E+2,0.98010000E+0,0.00000000E+0 - ,0.82251670E+3,0.138E+3,0.300E+2,0.98010000E+0,0.00000000E+0 - ,0.99191230E+3,0.138E+3,0.310E+2,0.98010000E+0,0.00000000E+0 - ,0.81848870E+3,0.138E+3,0.320E+2,0.98010000E+0,0.00000000E+0 - ,0.66009280E+3,0.138E+3,0.330E+2,0.98010000E+0,0.00000000E+0 - ,0.57308500E+3,0.138E+3,0.340E+2,0.98010000E+0,0.00000000E+0 - ,0.48506500E+3,0.138E+3,0.350E+2,0.98010000E+0,0.00000000E+0 - ,0.40937610E+3,0.138E+3,0.360E+2,0.98010000E+0,0.00000000E+0 - ,0.36709261E+4,0.138E+3,0.370E+2,0.98010000E+0,0.00000000E+0 - ,0.27824577E+4,0.138E+3,0.380E+2,0.98010000E+0,0.00000000E+0 - ,0.23056086E+4,0.138E+3,0.390E+2,0.98010000E+0,0.00000000E+0 - ,0.20037829E+4,0.138E+3,0.400E+2,0.98010000E+0,0.00000000E+0 - ,0.17897638E+4,0.138E+3,0.410E+2,0.98010000E+0,0.00000000E+0 - ,0.13350700E+4,0.138E+3,0.420E+2,0.98010000E+0,0.00000000E+0 - ,0.15092981E+4,0.138E+3,0.430E+2,0.98010000E+0,0.00000000E+0 - ,0.11061259E+4,0.138E+3,0.440E+2,0.98010000E+0,0.00000000E+0 - ,0.12034301E+4,0.138E+3,0.450E+2,0.98010000E+0,0.00000000E+0 - ,0.11005370E+4,0.138E+3,0.460E+2,0.98010000E+0,0.00000000E+0 - ,0.93160220E+3,0.138E+3,0.470E+2,0.98010000E+0,0.00000000E+0 - ,0.95275330E+3,0.138E+3,0.480E+2,0.98010000E+0,0.00000000E+0 - ,0.12501173E+4,0.138E+3,0.490E+2,0.98010000E+0,0.00000000E+0 - ,0.10916636E+4,0.138E+3,0.500E+2,0.98010000E+0,0.00000000E+0 - ,0.92413690E+3,0.138E+3,0.510E+2,0.98010000E+0,0.00000000E+0 - ,0.83250600E+3,0.138E+3,0.520E+2,0.98010000E+0,0.00000000E+0 - ,0.72971760E+3,0.138E+3,0.530E+2,0.98010000E+0,0.00000000E+0 - ,0.63746600E+3,0.138E+3,0.540E+2,0.98010000E+0,0.00000000E+0 - ,0.44969846E+4,0.138E+3,0.550E+2,0.98010000E+0,0.00000000E+0 - ,0.36314540E+4,0.138E+3,0.560E+2,0.98010000E+0,0.00000000E+0 - ,0.30140781E+4,0.138E+3,0.570E+2,0.98010000E+0,0.00000000E+0 - ,0.11044325E+4,0.138E+3,0.580E+2,0.98010000E+0,0.27991000E+1 - ,0.31621198E+4,0.138E+3,0.590E+2,0.98010000E+0,0.00000000E+0 - ,0.29999283E+4,0.138E+3,0.600E+2,0.98010000E+0,0.00000000E+0 - ,0.29157949E+4,0.138E+3,0.610E+2,0.98010000E+0,0.00000000E+0 - ,0.28393501E+4,0.138E+3,0.620E+2,0.98010000E+0,0.00000000E+0 - ,0.27713234E+4,0.138E+3,0.630E+2,0.98010000E+0,0.00000000E+0 - ,0.20594692E+4,0.138E+3,0.640E+2,0.98010000E+0,0.00000000E+0 - ,0.25668729E+4,0.138E+3,0.650E+2,0.98010000E+0,0.00000000E+0 - ,0.24578402E+4,0.138E+3,0.660E+2,0.98010000E+0,0.00000000E+0 - ,0.24609470E+4,0.138E+3,0.670E+2,0.98010000E+0,0.00000000E+0 - ,0.24041111E+4,0.138E+3,0.680E+2,0.98010000E+0,0.00000000E+0 - ,0.23512803E+4,0.138E+3,0.690E+2,0.98010000E+0,0.00000000E+0 - ,0.23289369E+4,0.138E+3,0.700E+2,0.98010000E+0,0.00000000E+0 - ,0.18927447E+4,0.138E+3,0.710E+2,0.98010000E+0,0.00000000E+0 - ,0.17529565E+4,0.138E+3,0.720E+2,0.98010000E+0,0.00000000E+0 - ,0.15479897E+4,0.138E+3,0.730E+2,0.98010000E+0,0.00000000E+0 - ,0.12804929E+4,0.138E+3,0.740E+2,0.98010000E+0,0.00000000E+0 - ,0.12840434E+4,0.138E+3,0.750E+2,0.98010000E+0,0.00000000E+0 - ,0.11312913E+4,0.138E+3,0.760E+2,0.98010000E+0,0.00000000E+0 - ,0.10131095E+4,0.138E+3,0.770E+2,0.98010000E+0,0.00000000E+0 - ,0.82466090E+3,0.138E+3,0.780E+2,0.98010000E+0,0.00000000E+0 - ,0.76388530E+3,0.138E+3,0.790E+2,0.98010000E+0,0.00000000E+0 - ,0.77550460E+3,0.138E+3,0.800E+2,0.98010000E+0,0.00000000E+0 - ,0.12742283E+4,0.138E+3,0.810E+2,0.98010000E+0,0.00000000E+0 - ,0.11873359E+4,0.138E+3,0.820E+2,0.98010000E+0,0.00000000E+0 - ,0.10400523E+4,0.138E+3,0.830E+2,0.98010000E+0,0.00000000E+0 - ,0.96630350E+3,0.138E+3,0.840E+2,0.98010000E+0,0.00000000E+0 - ,0.86500840E+3,0.138E+3,0.850E+2,0.98010000E+0,0.00000000E+0 - ,0.77178770E+3,0.138E+3,0.860E+2,0.98010000E+0,0.00000000E+0 - ,0.40533897E+4,0.138E+3,0.870E+2,0.98010000E+0,0.00000000E+0 - ,0.34910837E+4,0.138E+3,0.880E+2,0.98010000E+0,0.00000000E+0 - ,0.29248174E+4,0.138E+3,0.890E+2,0.98010000E+0,0.00000000E+0 - ,0.24812627E+4,0.138E+3,0.900E+2,0.98010000E+0,0.00000000E+0 - ,0.25425532E+4,0.138E+3,0.910E+2,0.98010000E+0,0.00000000E+0 - ,0.24572393E+4,0.138E+3,0.920E+2,0.98010000E+0,0.00000000E+0 - ,0.26180036E+4,0.138E+3,0.930E+2,0.98010000E+0,0.00000000E+0 - ,0.25175053E+4,0.138E+3,0.940E+2,0.98010000E+0,0.00000000E+0 - ,0.11032750E+3,0.138E+3,0.101E+3,0.98010000E+0,0.00000000E+0 - ,0.42146100E+3,0.138E+3,0.103E+3,0.98010000E+0,0.98650000E+0 - ,0.52954940E+3,0.138E+3,0.104E+3,0.98010000E+0,0.98080000E+0 - ,0.36336070E+3,0.138E+3,0.105E+3,0.98010000E+0,0.97060000E+0 - ,0.25898850E+3,0.138E+3,0.106E+3,0.98010000E+0,0.98680000E+0 - ,0.16917720E+3,0.138E+3,0.107E+3,0.98010000E+0,0.99440000E+0 - ,0.11710180E+3,0.138E+3,0.108E+3,0.98010000E+0,0.99250000E+0 - ,0.75675800E+2,0.138E+3,0.109E+3,0.98010000E+0,0.99820000E+0 - ,0.63083040E+3,0.138E+3,0.111E+3,0.98010000E+0,0.96840000E+0 - ,0.98878570E+3,0.138E+3,0.112E+3,0.98010000E+0,0.96280000E+0 - ,0.94475350E+3,0.138E+3,0.113E+3,0.98010000E+0,0.96480000E+0 - ,0.70100090E+3,0.138E+3,0.114E+3,0.98010000E+0,0.95070000E+0 - ,0.54212620E+3,0.138E+3,0.115E+3,0.98010000E+0,0.99470000E+0 - ,0.44147190E+3,0.138E+3,0.116E+3,0.98010000E+0,0.99480000E+0 - ,0.34712550E+3,0.138E+3,0.117E+3,0.98010000E+0,0.99720000E+0 - ,0.84199830E+3,0.138E+3,0.119E+3,0.98010000E+0,0.97670000E+0 - ,0.18769417E+4,0.138E+3,0.120E+3,0.98010000E+0,0.98310000E+0 - ,0.77994880E+3,0.138E+3,0.121E+3,0.98010000E+0,0.18627000E+1 - ,0.75467530E+3,0.138E+3,0.122E+3,0.98010000E+0,0.18299000E+1 - ,0.74017630E+3,0.138E+3,0.123E+3,0.98010000E+0,0.19138000E+1 - ,0.73983150E+3,0.138E+3,0.124E+3,0.98010000E+0,0.18269000E+1 - ,0.65184050E+3,0.138E+3,0.125E+3,0.98010000E+0,0.16406000E+1 - ,0.59697670E+3,0.138E+3,0.126E+3,0.98010000E+0,0.16483000E+1 - ,0.57030240E+3,0.138E+3,0.127E+3,0.98010000E+0,0.17149000E+1 - ,0.55938830E+3,0.138E+3,0.128E+3,0.98010000E+0,0.17937000E+1 - ,0.56991510E+3,0.138E+3,0.129E+3,0.98010000E+0,0.95760000E+0 - ,0.50526080E+3,0.138E+3,0.130E+3,0.98010000E+0,0.19419000E+1 - ,0.91623120E+3,0.138E+3,0.131E+3,0.98010000E+0,0.96010000E+0 - ,0.75505840E+3,0.138E+3,0.132E+3,0.98010000E+0,0.94340000E+0 - ,0.64702200E+3,0.138E+3,0.133E+3,0.98010000E+0,0.98890000E+0 - ,0.57371350E+3,0.138E+3,0.134E+3,0.98010000E+0,0.99010000E+0 - ,0.48934610E+3,0.138E+3,0.135E+3,0.98010000E+0,0.99740000E+0 - ,0.99279700E+3,0.138E+3,0.137E+3,0.98010000E+0,0.97380000E+0 - ,0.23126602E+4,0.138E+3,0.138E+3,0.98010000E+0,0.98010000E+0 - ,0.51235600E+2,0.139E+3,0.100E+1,0.19153000E+1,0.91180000E+0 - ,0.31988900E+2,0.139E+3,0.200E+1,0.19153000E+1,0.00000000E+0 - ,0.10745875E+4,0.139E+3,0.300E+1,0.19153000E+1,0.00000000E+0 - ,0.53251100E+3,0.139E+3,0.400E+1,0.19153000E+1,0.00000000E+0 - ,0.33413510E+3,0.139E+3,0.500E+1,0.19153000E+1,0.00000000E+0 - ,0.21477600E+3,0.139E+3,0.600E+1,0.19153000E+1,0.00000000E+0 - ,0.14492070E+3,0.139E+3,0.700E+1,0.19153000E+1,0.00000000E+0 - ,0.10704380E+3,0.139E+3,0.800E+1,0.19153000E+1,0.00000000E+0 - ,0.79407600E+2,0.139E+3,0.900E+1,0.19153000E+1,0.00000000E+0 - ,0.60062800E+2,0.139E+3,0.100E+2,0.19153000E+1,0.00000000E+0 - ,0.12727028E+4,0.139E+3,0.110E+2,0.19153000E+1,0.00000000E+0 - ,0.86937390E+3,0.139E+3,0.120E+2,0.19153000E+1,0.00000000E+0 - ,0.77186060E+3,0.139E+3,0.130E+2,0.19153000E+1,0.00000000E+0 - ,0.57805500E+3,0.139E+3,0.140E+2,0.19153000E+1,0.00000000E+0 - ,0.43301710E+3,0.139E+3,0.150E+2,0.19153000E+1,0.00000000E+0 - ,0.35057750E+3,0.139E+3,0.160E+2,0.19153000E+1,0.00000000E+0 - ,0.27973550E+3,0.139E+3,0.170E+2,0.19153000E+1,0.00000000E+0 - ,0.22431260E+3,0.139E+3,0.180E+2,0.19153000E+1,0.00000000E+0 - ,0.21637031E+4,0.139E+3,0.190E+2,0.19153000E+1,0.00000000E+0 - ,0.16036362E+4,0.139E+3,0.200E+2,0.19153000E+1,0.00000000E+0 - ,0.12972964E+4,0.139E+3,0.210E+2,0.19153000E+1,0.00000000E+0 - ,0.12323433E+4,0.139E+3,0.220E+2,0.19153000E+1,0.00000000E+0 - ,0.11169531E+4,0.139E+3,0.230E+2,0.19153000E+1,0.00000000E+0 - ,0.88060690E+3,0.139E+3,0.240E+2,0.19153000E+1,0.00000000E+0 - ,0.94758340E+3,0.139E+3,0.250E+2,0.19153000E+1,0.00000000E+0 - ,0.74266410E+3,0.139E+3,0.260E+2,0.19153000E+1,0.00000000E+0 - ,0.76821070E+3,0.139E+3,0.270E+2,0.19153000E+1,0.00000000E+0 - ,0.79937100E+3,0.139E+3,0.280E+2,0.19153000E+1,0.00000000E+0 - ,0.61409830E+3,0.139E+3,0.290E+2,0.19153000E+1,0.00000000E+0 - ,0.60904990E+3,0.139E+3,0.300E+2,0.19153000E+1,0.00000000E+0 - ,0.72958130E+3,0.139E+3,0.310E+2,0.19153000E+1,0.00000000E+0 - ,0.61799850E+3,0.139E+3,0.320E+2,0.19153000E+1,0.00000000E+0 - ,0.50955030E+3,0.139E+3,0.330E+2,0.19153000E+1,0.00000000E+0 - ,0.44813810E+3,0.139E+3,0.340E+2,0.19153000E+1,0.00000000E+0 - ,0.38429010E+3,0.139E+3,0.350E+2,0.19153000E+1,0.00000000E+0 - ,0.32813160E+3,0.139E+3,0.360E+2,0.19153000E+1,0.00000000E+0 - ,0.24114577E+4,0.139E+3,0.370E+2,0.19153000E+1,0.00000000E+0 - ,0.19209295E+4,0.139E+3,0.380E+2,0.19153000E+1,0.00000000E+0 - ,0.16243636E+4,0.139E+3,0.390E+2,0.19153000E+1,0.00000000E+0 - ,0.14293576E+4,0.139E+3,0.400E+2,0.19153000E+1,0.00000000E+0 - ,0.12864770E+4,0.139E+3,0.410E+2,0.19153000E+1,0.00000000E+0 - ,0.97159590E+3,0.139E+3,0.420E+2,0.19153000E+1,0.00000000E+0 - ,0.10932424E+4,0.139E+3,0.430E+2,0.19153000E+1,0.00000000E+0 - ,0.81262860E+3,0.139E+3,0.440E+2,0.19153000E+1,0.00000000E+0 - ,0.88627500E+3,0.139E+3,0.450E+2,0.19153000E+1,0.00000000E+0 - ,0.81484020E+3,0.139E+3,0.460E+2,0.19153000E+1,0.00000000E+0 - ,0.68497960E+3,0.139E+3,0.470E+2,0.19153000E+1,0.00000000E+0 - ,0.71021720E+3,0.139E+3,0.480E+2,0.19153000E+1,0.00000000E+0 - ,0.91615920E+3,0.139E+3,0.490E+2,0.19153000E+1,0.00000000E+0 - ,0.81841300E+3,0.139E+3,0.500E+2,0.19153000E+1,0.00000000E+0 - ,0.70709330E+3,0.139E+3,0.510E+2,0.19153000E+1,0.00000000E+0 - ,0.64444940E+3,0.139E+3,0.520E+2,0.19153000E+1,0.00000000E+0 - ,0.57184320E+3,0.139E+3,0.530E+2,0.19153000E+1,0.00000000E+0 - ,0.50522620E+3,0.139E+3,0.540E+2,0.19153000E+1,0.00000000E+0 - ,0.29502475E+4,0.139E+3,0.550E+2,0.19153000E+1,0.00000000E+0 - ,0.24856310E+4,0.139E+3,0.560E+2,0.19153000E+1,0.00000000E+0 - ,0.21057491E+4,0.139E+3,0.570E+2,0.19153000E+1,0.00000000E+0 - ,0.84084100E+3,0.139E+3,0.580E+2,0.19153000E+1,0.27991000E+1 - ,0.21783229E+4,0.139E+3,0.590E+2,0.19153000E+1,0.00000000E+0 - ,0.20748807E+4,0.139E+3,0.600E+2,0.19153000E+1,0.00000000E+0 - ,0.20189224E+4,0.139E+3,0.610E+2,0.19153000E+1,0.00000000E+0 - ,0.19678827E+4,0.139E+3,0.620E+2,0.19153000E+1,0.00000000E+0 - ,0.19225226E+4,0.139E+3,0.630E+2,0.19153000E+1,0.00000000E+0 - ,0.14581969E+4,0.139E+3,0.640E+2,0.19153000E+1,0.00000000E+0 - ,0.17521144E+4,0.139E+3,0.650E+2,0.19153000E+1,0.00000000E+0 - ,0.16830549E+4,0.139E+3,0.660E+2,0.19153000E+1,0.00000000E+0 - ,0.17170123E+4,0.139E+3,0.670E+2,0.19153000E+1,0.00000000E+0 - ,0.16785781E+4,0.139E+3,0.680E+2,0.19153000E+1,0.00000000E+0 - ,0.16432139E+4,0.139E+3,0.690E+2,0.19153000E+1,0.00000000E+0 - ,0.16263339E+4,0.139E+3,0.700E+2,0.19153000E+1,0.00000000E+0 - ,0.13398149E+4,0.139E+3,0.710E+2,0.19153000E+1,0.00000000E+0 - ,0.12689492E+4,0.139E+3,0.720E+2,0.19153000E+1,0.00000000E+0 - ,0.11346407E+4,0.139E+3,0.730E+2,0.19153000E+1,0.00000000E+0 - ,0.94540990E+3,0.139E+3,0.740E+2,0.19153000E+1,0.00000000E+0 - ,0.95356340E+3,0.139E+3,0.750E+2,0.19153000E+1,0.00000000E+0 - ,0.84938170E+3,0.139E+3,0.760E+2,0.19153000E+1,0.00000000E+0 - ,0.76730030E+3,0.139E+3,0.770E+2,0.19153000E+1,0.00000000E+0 - ,0.62916050E+3,0.139E+3,0.780E+2,0.19153000E+1,0.00000000E+0 - ,0.58463530E+3,0.139E+3,0.790E+2,0.19153000E+1,0.00000000E+0 - ,0.59694450E+3,0.139E+3,0.800E+2,0.19153000E+1,0.00000000E+0 - ,0.93562990E+3,0.139E+3,0.810E+2,0.19153000E+1,0.00000000E+0 - ,0.88887560E+3,0.139E+3,0.820E+2,0.19153000E+1,0.00000000E+0 - ,0.79367010E+3,0.139E+3,0.830E+2,0.19153000E+1,0.00000000E+0 - ,0.74514710E+3,0.139E+3,0.840E+2,0.19153000E+1,0.00000000E+0 - ,0.67518420E+3,0.139E+3,0.850E+2,0.19153000E+1,0.00000000E+0 - ,0.60886250E+3,0.139E+3,0.860E+2,0.19153000E+1,0.00000000E+0 - ,0.26980970E+4,0.139E+3,0.870E+2,0.19153000E+1,0.00000000E+0 - ,0.24134225E+4,0.139E+3,0.880E+2,0.19153000E+1,0.00000000E+0 - ,0.20622685E+4,0.139E+3,0.890E+2,0.19153000E+1,0.00000000E+0 - ,0.17871863E+4,0.139E+3,0.900E+2,0.19153000E+1,0.00000000E+0 - ,0.18092861E+4,0.139E+3,0.910E+2,0.19153000E+1,0.00000000E+0 - ,0.17497379E+4,0.139E+3,0.920E+2,0.19153000E+1,0.00000000E+0 - ,0.18406901E+4,0.139E+3,0.930E+2,0.19153000E+1,0.00000000E+0 - ,0.17746391E+4,0.139E+3,0.940E+2,0.19153000E+1,0.00000000E+0 - ,0.85681500E+2,0.139E+3,0.101E+3,0.19153000E+1,0.00000000E+0 - ,0.30688620E+3,0.139E+3,0.103E+3,0.19153000E+1,0.98650000E+0 - ,0.38765640E+3,0.139E+3,0.104E+3,0.19153000E+1,0.98080000E+0 - ,0.27740500E+3,0.139E+3,0.105E+3,0.19153000E+1,0.97060000E+0 - ,0.20197440E+3,0.139E+3,0.106E+3,0.19153000E+1,0.98680000E+0 - ,0.13518390E+3,0.139E+3,0.107E+3,0.19153000E+1,0.99440000E+0 - ,0.95445800E+2,0.139E+3,0.108E+3,0.19153000E+1,0.99250000E+0 - ,0.63188900E+2,0.139E+3,0.109E+3,0.19153000E+1,0.99820000E+0 - ,0.45499280E+3,0.139E+3,0.111E+3,0.19153000E+1,0.96840000E+0 - ,0.70969610E+3,0.139E+3,0.112E+3,0.19153000E+1,0.96280000E+0 - ,0.69347320E+3,0.139E+3,0.113E+3,0.19153000E+1,0.96480000E+0 - ,0.53081800E+3,0.139E+3,0.114E+3,0.19153000E+1,0.95070000E+0 - ,0.41987180E+3,0.139E+3,0.115E+3,0.19153000E+1,0.99470000E+0 - ,0.34697100E+3,0.139E+3,0.116E+3,0.19153000E+1,0.99480000E+0 - ,0.27697730E+3,0.139E+3,0.117E+3,0.19153000E+1,0.99720000E+0 - ,0.61384630E+3,0.139E+3,0.119E+3,0.19153000E+1,0.97670000E+0 - ,0.12935159E+4,0.139E+3,0.120E+3,0.19153000E+1,0.98310000E+0 - ,0.58631350E+3,0.139E+3,0.121E+3,0.19153000E+1,0.18627000E+1 - ,0.56686700E+3,0.139E+3,0.122E+3,0.19153000E+1,0.18299000E+1 - ,0.55572150E+3,0.139E+3,0.123E+3,0.19153000E+1,0.19138000E+1 - ,0.55347640E+3,0.139E+3,0.124E+3,0.19153000E+1,0.18269000E+1 - ,0.49633310E+3,0.139E+3,0.125E+3,0.19153000E+1,0.16406000E+1 - ,0.45638780E+3,0.139E+3,0.126E+3,0.19153000E+1,0.16483000E+1 - ,0.43567010E+3,0.139E+3,0.127E+3,0.19153000E+1,0.17149000E+1 - ,0.42674050E+3,0.139E+3,0.128E+3,0.19153000E+1,0.17937000E+1 - ,0.42937430E+3,0.139E+3,0.129E+3,0.19153000E+1,0.95760000E+0 - ,0.38958110E+3,0.139E+3,0.130E+3,0.19153000E+1,0.19419000E+1 - ,0.67825900E+3,0.139E+3,0.131E+3,0.19153000E+1,0.96010000E+0 - ,0.57321390E+3,0.139E+3,0.132E+3,0.19153000E+1,0.94340000E+0 - ,0.50000710E+3,0.139E+3,0.133E+3,0.19153000E+1,0.98890000E+0 - ,0.44848720E+3,0.139E+3,0.134E+3,0.19153000E+1,0.99010000E+0 - ,0.38738760E+3,0.139E+3,0.135E+3,0.19153000E+1,0.99740000E+0 - ,0.72686130E+3,0.139E+3,0.137E+3,0.19153000E+1,0.97380000E+0 - ,0.15865402E+4,0.139E+3,0.138E+3,0.19153000E+1,0.98010000E+0 - ,0.11322983E+4,0.139E+3,0.139E+3,0.19153000E+1,0.19153000E+1 - ,0.39666900E+2,0.140E+3,0.100E+1,0.19355000E+1,0.91180000E+0 - ,0.25703700E+2,0.140E+3,0.200E+1,0.19355000E+1,0.00000000E+0 - ,0.67848100E+3,0.140E+3,0.300E+1,0.19355000E+1,0.00000000E+0 - ,0.37401350E+3,0.140E+3,0.400E+1,0.19355000E+1,0.00000000E+0 - ,0.24601470E+3,0.140E+3,0.500E+1,0.19355000E+1,0.00000000E+0 - ,0.16345480E+3,0.140E+3,0.600E+1,0.19355000E+1,0.00000000E+0 - ,0.11293390E+3,0.140E+3,0.700E+1,0.19355000E+1,0.00000000E+0 - ,0.84787600E+2,0.140E+3,0.800E+1,0.19355000E+1,0.00000000E+0 - ,0.63768000E+2,0.140E+3,0.900E+1,0.19355000E+1,0.00000000E+0 - ,0.48760000E+2,0.140E+3,0.100E+2,0.19355000E+1,0.00000000E+0 - ,0.80899730E+3,0.140E+3,0.110E+2,0.19355000E+1,0.00000000E+0 - ,0.60055110E+3,0.140E+3,0.120E+2,0.19355000E+1,0.00000000E+0 - ,0.54671760E+3,0.140E+3,0.130E+2,0.19355000E+1,0.00000000E+0 - ,0.42369920E+3,0.140E+3,0.140E+2,0.19355000E+1,0.00000000E+0 - ,0.32600870E+3,0.140E+3,0.150E+2,0.19355000E+1,0.00000000E+0 - ,0.26830770E+3,0.140E+3,0.160E+2,0.19355000E+1,0.00000000E+0 - ,0.21743220E+3,0.140E+3,0.170E+2,0.19355000E+1,0.00000000E+0 - ,0.17666900E+3,0.140E+3,0.180E+2,0.19355000E+1,0.00000000E+0 - ,0.13359899E+4,0.140E+3,0.190E+2,0.19355000E+1,0.00000000E+0 - ,0.10709104E+4,0.140E+3,0.200E+2,0.19355000E+1,0.00000000E+0 - ,0.87901650E+3,0.140E+3,0.210E+2,0.19355000E+1,0.00000000E+0 - ,0.84415650E+3,0.140E+3,0.220E+2,0.19355000E+1,0.00000000E+0 - ,0.77041850E+3,0.140E+3,0.230E+2,0.19355000E+1,0.00000000E+0 - ,0.60670400E+3,0.140E+3,0.240E+2,0.19355000E+1,0.00000000E+0 - ,0.66010050E+3,0.140E+3,0.250E+2,0.19355000E+1,0.00000000E+0 - ,0.51758120E+3,0.140E+3,0.260E+2,0.19355000E+1,0.00000000E+0 - ,0.54466430E+3,0.140E+3,0.270E+2,0.19355000E+1,0.00000000E+0 - ,0.56293440E+3,0.140E+3,0.280E+2,0.19355000E+1,0.00000000E+0 - ,0.43155440E+3,0.140E+3,0.290E+2,0.19355000E+1,0.00000000E+0 - ,0.43840800E+3,0.140E+3,0.300E+2,0.19355000E+1,0.00000000E+0 - ,0.52118020E+3,0.140E+3,0.310E+2,0.19355000E+1,0.00000000E+0 - ,0.45369050E+3,0.140E+3,0.320E+2,0.19355000E+1,0.00000000E+0 - ,0.38264580E+3,0.140E+3,0.330E+2,0.19355000E+1,0.00000000E+0 - ,0.34103380E+3,0.140E+3,0.340E+2,0.19355000E+1,0.00000000E+0 - ,0.29639440E+3,0.140E+3,0.350E+2,0.19355000E+1,0.00000000E+0 - ,0.25615010E+3,0.140E+3,0.360E+2,0.19355000E+1,0.00000000E+0 - ,0.14937993E+4,0.140E+3,0.370E+2,0.19355000E+1,0.00000000E+0 - ,0.12775813E+4,0.140E+3,0.380E+2,0.19355000E+1,0.00000000E+0 - ,0.11066630E+4,0.140E+3,0.390E+2,0.19355000E+1,0.00000000E+0 - ,0.98782570E+3,0.140E+3,0.400E+2,0.19355000E+1,0.00000000E+0 - ,0.89679520E+3,0.140E+3,0.410E+2,0.19355000E+1,0.00000000E+0 - ,0.68718480E+3,0.140E+3,0.420E+2,0.19355000E+1,0.00000000E+0 - ,0.76884280E+3,0.140E+3,0.430E+2,0.19355000E+1,0.00000000E+0 - ,0.58090070E+3,0.140E+3,0.440E+2,0.19355000E+1,0.00000000E+0 - ,0.63480240E+3,0.140E+3,0.450E+2,0.19355000E+1,0.00000000E+0 - ,0.58702020E+3,0.140E+3,0.460E+2,0.19355000E+1,0.00000000E+0 - ,0.49038170E+3,0.140E+3,0.470E+2,0.19355000E+1,0.00000000E+0 - ,0.51538610E+3,0.140E+3,0.480E+2,0.19355000E+1,0.00000000E+0 - ,0.65256540E+3,0.140E+3,0.490E+2,0.19355000E+1,0.00000000E+0 - ,0.59689190E+3,0.140E+3,0.500E+2,0.19355000E+1,0.00000000E+0 - ,0.52654260E+3,0.140E+3,0.510E+2,0.19355000E+1,0.00000000E+0 - ,0.48561760E+3,0.140E+3,0.520E+2,0.19355000E+1,0.00000000E+0 - ,0.43630460E+3,0.140E+3,0.530E+2,0.19355000E+1,0.00000000E+0 - ,0.38993850E+3,0.140E+3,0.540E+2,0.19355000E+1,0.00000000E+0 - ,0.18190406E+4,0.140E+3,0.550E+2,0.19355000E+1,0.00000000E+0 - ,0.16353622E+4,0.140E+3,0.560E+2,0.19355000E+1,0.00000000E+0 - ,0.14206192E+4,0.140E+3,0.570E+2,0.19355000E+1,0.00000000E+0 - ,0.62328410E+3,0.140E+3,0.580E+2,0.19355000E+1,0.27991000E+1 - ,0.14429680E+4,0.140E+3,0.590E+2,0.19355000E+1,0.00000000E+0 - ,0.13832190E+4,0.140E+3,0.600E+2,0.19355000E+1,0.00000000E+0 - ,0.13477804E+4,0.140E+3,0.610E+2,0.19355000E+1,0.00000000E+0 - ,0.13152670E+4,0.140E+3,0.620E+2,0.19355000E+1,0.00000000E+0 - ,0.12864106E+4,0.140E+3,0.630E+2,0.19355000E+1,0.00000000E+0 - ,0.99936150E+3,0.140E+3,0.640E+2,0.19355000E+1,0.00000000E+0 - ,0.11461276E+4,0.140E+3,0.650E+2,0.19355000E+1,0.00000000E+0 - ,0.11025614E+4,0.140E+3,0.660E+2,0.19355000E+1,0.00000000E+0 - ,0.11568729E+4,0.140E+3,0.670E+2,0.19355000E+1,0.00000000E+0 - ,0.11319421E+4,0.140E+3,0.680E+2,0.19355000E+1,0.00000000E+0 - ,0.11093035E+4,0.140E+3,0.690E+2,0.19355000E+1,0.00000000E+0 - ,0.10968681E+4,0.140E+3,0.700E+2,0.19355000E+1,0.00000000E+0 - ,0.91629250E+3,0.140E+3,0.710E+2,0.19355000E+1,0.00000000E+0 - ,0.89141000E+3,0.140E+3,0.720E+2,0.19355000E+1,0.00000000E+0 - ,0.80810660E+3,0.140E+3,0.730E+2,0.19355000E+1,0.00000000E+0 - ,0.67904580E+3,0.140E+3,0.740E+2,0.19355000E+1,0.00000000E+0 - ,0.68897190E+3,0.140E+3,0.750E+2,0.19355000E+1,0.00000000E+0 - ,0.62088940E+3,0.140E+3,0.760E+2,0.19355000E+1,0.00000000E+0 - ,0.56604620E+3,0.140E+3,0.770E+2,0.19355000E+1,0.00000000E+0 - ,0.46802460E+3,0.140E+3,0.780E+2,0.19355000E+1,0.00000000E+0 - ,0.43643220E+3,0.140E+3,0.790E+2,0.19355000E+1,0.00000000E+0 - ,0.44796630E+3,0.140E+3,0.800E+2,0.19355000E+1,0.00000000E+0 - ,0.66836720E+3,0.140E+3,0.810E+2,0.19355000E+1,0.00000000E+0 - ,0.64781650E+3,0.140E+3,0.820E+2,0.19355000E+1,0.00000000E+0 - ,0.58976480E+3,0.140E+3,0.830E+2,0.19355000E+1,0.00000000E+0 - ,0.55956430E+3,0.140E+3,0.840E+2,0.19355000E+1,0.00000000E+0 - ,0.51325740E+3,0.140E+3,0.850E+2,0.19355000E+1,0.00000000E+0 - ,0.46784580E+3,0.140E+3,0.860E+2,0.19355000E+1,0.00000000E+0 - ,0.17028592E+4,0.140E+3,0.870E+2,0.19355000E+1,0.00000000E+0 - ,0.16078178E+4,0.140E+3,0.880E+2,0.19355000E+1,0.00000000E+0 - ,0.14061219E+4,0.140E+3,0.890E+2,0.19355000E+1,0.00000000E+0 - ,0.12490250E+4,0.140E+3,0.900E+2,0.19355000E+1,0.00000000E+0 - ,0.12473212E+4,0.140E+3,0.910E+2,0.19355000E+1,0.00000000E+0 - ,0.12073349E+4,0.140E+3,0.920E+2,0.19355000E+1,0.00000000E+0 - ,0.12519154E+4,0.140E+3,0.930E+2,0.19355000E+1,0.00000000E+0 - ,0.12106981E+4,0.140E+3,0.940E+2,0.19355000E+1,0.00000000E+0 - ,0.64706800E+2,0.140E+3,0.101E+3,0.19355000E+1,0.00000000E+0 - ,0.21671700E+3,0.140E+3,0.103E+3,0.19355000E+1,0.98650000E+0 - ,0.27536440E+3,0.140E+3,0.104E+3,0.19355000E+1,0.98080000E+0 - ,0.20600140E+3,0.140E+3,0.105E+3,0.19355000E+1,0.97060000E+0 - ,0.15342290E+3,0.140E+3,0.106E+3,0.19355000E+1,0.98680000E+0 - ,0.10531510E+3,0.140E+3,0.107E+3,0.19355000E+1,0.99440000E+0 - ,0.75899400E+2,0.140E+3,0.108E+3,0.19355000E+1,0.99250000E+0 - ,0.51515800E+2,0.140E+3,0.109E+3,0.19355000E+1,0.99820000E+0 - ,0.31816780E+3,0.140E+3,0.111E+3,0.19355000E+1,0.96840000E+0 - ,0.49330570E+3,0.140E+3,0.112E+3,0.19355000E+1,0.96280000E+0 - ,0.49402450E+3,0.140E+3,0.113E+3,0.19355000E+1,0.96480000E+0 - ,0.39071920E+3,0.140E+3,0.114E+3,0.19355000E+1,0.95070000E+0 - ,0.31631690E+3,0.140E+3,0.115E+3,0.19355000E+1,0.99470000E+0 - ,0.26540890E+3,0.140E+3,0.116E+3,0.19355000E+1,0.99480000E+0 - ,0.21521010E+3,0.140E+3,0.117E+3,0.19355000E+1,0.99720000E+0 - ,0.43506490E+3,0.140E+3,0.119E+3,0.19355000E+1,0.97670000E+0 - ,0.85671310E+3,0.140E+3,0.120E+3,0.19355000E+1,0.98310000E+0 - ,0.42930190E+3,0.140E+3,0.121E+3,0.19355000E+1,0.18627000E+1 - ,0.41420300E+3,0.140E+3,0.122E+3,0.19355000E+1,0.18299000E+1 - ,0.40602230E+3,0.140E+3,0.123E+3,0.19355000E+1,0.19138000E+1 - ,0.40292000E+3,0.140E+3,0.124E+3,0.19355000E+1,0.18269000E+1 - ,0.36779370E+3,0.140E+3,0.125E+3,0.19355000E+1,0.16406000E+1 - ,0.33962780E+3,0.140E+3,0.126E+3,0.19355000E+1,0.16483000E+1 - ,0.32399210E+3,0.140E+3,0.127E+3,0.19355000E+1,0.17149000E+1 - ,0.31694170E+3,0.140E+3,0.128E+3,0.19355000E+1,0.17937000E+1 - ,0.31499080E+3,0.140E+3,0.129E+3,0.19355000E+1,0.95760000E+0 - ,0.29240050E+3,0.140E+3,0.130E+3,0.19355000E+1,0.19419000E+1 - ,0.48787590E+3,0.140E+3,0.131E+3,0.19355000E+1,0.96010000E+0 - ,0.42320760E+3,0.140E+3,0.132E+3,0.19355000E+1,0.94340000E+0 - ,0.37591790E+3,0.140E+3,0.133E+3,0.19355000E+1,0.98890000E+0 - ,0.34120400E+3,0.140E+3,0.134E+3,0.19355000E+1,0.99010000E+0 - ,0.29856340E+3,0.140E+3,0.135E+3,0.19355000E+1,0.99740000E+0 - ,0.51769610E+3,0.140E+3,0.137E+3,0.19355000E+1,0.97380000E+0 - ,0.10443401E+4,0.140E+3,0.138E+3,0.19355000E+1,0.98010000E+0 - ,0.78082120E+3,0.140E+3,0.139E+3,0.19355000E+1,0.19153000E+1 - ,0.56867890E+3,0.140E+3,0.140E+3,0.19355000E+1,0.19355000E+1 - ,0.40030400E+2,0.141E+3,0.100E+1,0.19545000E+1,0.91180000E+0 - ,0.25953400E+2,0.141E+3,0.200E+1,0.19545000E+1,0.00000000E+0 - ,0.68410400E+3,0.141E+3,0.300E+1,0.19545000E+1,0.00000000E+0 - ,0.37796930E+3,0.141E+3,0.400E+1,0.19545000E+1,0.00000000E+0 - ,0.24842660E+3,0.141E+3,0.500E+1,0.19545000E+1,0.00000000E+0 - ,0.16499800E+3,0.141E+3,0.600E+1,0.19545000E+1,0.00000000E+0 - ,0.11399890E+3,0.141E+3,0.700E+1,0.19545000E+1,0.00000000E+0 - ,0.85602400E+2,0.141E+3,0.800E+1,0.19545000E+1,0.00000000E+0 - ,0.64401000E+2,0.141E+3,0.900E+1,0.19545000E+1,0.00000000E+0 - ,0.49263500E+2,0.141E+3,0.100E+2,0.19545000E+1,0.00000000E+0 - ,0.81603170E+3,0.141E+3,0.110E+2,0.19545000E+1,0.00000000E+0 - ,0.60700730E+3,0.141E+3,0.120E+2,0.19545000E+1,0.00000000E+0 - ,0.55235500E+3,0.141E+3,0.130E+2,0.19545000E+1,0.00000000E+0 - ,0.42788370E+3,0.141E+3,0.140E+2,0.19545000E+1,0.00000000E+0 - ,0.32909470E+3,0.141E+3,0.150E+2,0.19545000E+1,0.00000000E+0 - ,0.27080590E+3,0.141E+3,0.160E+2,0.19545000E+1,0.00000000E+0 - ,0.21944620E+3,0.141E+3,0.170E+2,0.19545000E+1,0.00000000E+0 - ,0.17831830E+3,0.141E+3,0.180E+2,0.19545000E+1,0.00000000E+0 - ,0.13433714E+4,0.141E+3,0.190E+2,0.19545000E+1,0.00000000E+0 - ,0.10819930E+4,0.141E+3,0.200E+2,0.19545000E+1,0.00000000E+0 - ,0.88833560E+3,0.141E+3,0.210E+2,0.19545000E+1,0.00000000E+0 - ,0.85304640E+3,0.141E+3,0.220E+2,0.19545000E+1,0.00000000E+0 - ,0.77852660E+3,0.141E+3,0.230E+2,0.19545000E+1,0.00000000E+0 - ,0.61302240E+3,0.141E+3,0.240E+2,0.19545000E+1,0.00000000E+0 - ,0.66703050E+3,0.141E+3,0.250E+2,0.19545000E+1,0.00000000E+0 - ,0.52300200E+3,0.141E+3,0.260E+2,0.19545000E+1,0.00000000E+0 - ,0.55040920E+3,0.141E+3,0.270E+2,0.19545000E+1,0.00000000E+0 - ,0.56890880E+3,0.141E+3,0.280E+2,0.19545000E+1,0.00000000E+0 - ,0.43610420E+3,0.141E+3,0.290E+2,0.19545000E+1,0.00000000E+0 - ,0.44298860E+3,0.141E+3,0.300E+2,0.19545000E+1,0.00000000E+0 - ,0.52649640E+3,0.141E+3,0.310E+2,0.19545000E+1,0.00000000E+0 - ,0.45819200E+3,0.141E+3,0.320E+2,0.19545000E+1,0.00000000E+0 - ,0.38630910E+3,0.141E+3,0.330E+2,0.19545000E+1,0.00000000E+0 - ,0.34424250E+3,0.141E+3,0.340E+2,0.19545000E+1,0.00000000E+0 - ,0.29915350E+3,0.141E+3,0.350E+2,0.19545000E+1,0.00000000E+0 - ,0.25853040E+3,0.141E+3,0.360E+2,0.19545000E+1,0.00000000E+0 - ,0.15017789E+4,0.141E+3,0.370E+2,0.19545000E+1,0.00000000E+0 - ,0.12904826E+4,0.141E+3,0.380E+2,0.19545000E+1,0.00000000E+0 - ,0.11181402E+4,0.141E+3,0.390E+2,0.19545000E+1,0.00000000E+0 - ,0.99812240E+3,0.141E+3,0.400E+2,0.19545000E+1,0.00000000E+0 - ,0.90608010E+3,0.141E+3,0.410E+2,0.19545000E+1,0.00000000E+0 - ,0.69429830E+3,0.141E+3,0.420E+2,0.19545000E+1,0.00000000E+0 - ,0.77673680E+3,0.141E+3,0.430E+2,0.19545000E+1,0.00000000E+0 - ,0.58689450E+3,0.141E+3,0.440E+2,0.19545000E+1,0.00000000E+0 - ,0.64141640E+3,0.141E+3,0.450E+2,0.19545000E+1,0.00000000E+0 - ,0.59314140E+3,0.141E+3,0.460E+2,0.19545000E+1,0.00000000E+0 - ,0.49548000E+3,0.141E+3,0.470E+2,0.19545000E+1,0.00000000E+0 - ,0.52076290E+3,0.141E+3,0.480E+2,0.19545000E+1,0.00000000E+0 - ,0.65928650E+3,0.141E+3,0.490E+2,0.19545000E+1,0.00000000E+0 - ,0.60296920E+3,0.141E+3,0.500E+2,0.19545000E+1,0.00000000E+0 - ,0.53174240E+3,0.141E+3,0.510E+2,0.19545000E+1,0.00000000E+0 - ,0.49032060E+3,0.141E+3,0.520E+2,0.19545000E+1,0.00000000E+0 - ,0.44045990E+3,0.141E+3,0.530E+2,0.19545000E+1,0.00000000E+0 - ,0.39361210E+3,0.141E+3,0.540E+2,0.19545000E+1,0.00000000E+0 - ,0.18264461E+4,0.141E+3,0.550E+2,0.19545000E+1,0.00000000E+0 - ,0.16509334E+4,0.141E+3,0.560E+2,0.19545000E+1,0.00000000E+0 - ,0.14348956E+4,0.141E+3,0.570E+2,0.19545000E+1,0.00000000E+0 - ,0.62949770E+3,0.141E+3,0.580E+2,0.19545000E+1,0.27991000E+1 - ,0.14565113E+4,0.141E+3,0.590E+2,0.19545000E+1,0.00000000E+0 - ,0.13970298E+4,0.141E+3,0.600E+2,0.19545000E+1,0.00000000E+0 - ,0.13613178E+4,0.141E+3,0.610E+2,0.19545000E+1,0.00000000E+0 - ,0.13285415E+4,0.141E+3,0.620E+2,0.19545000E+1,0.00000000E+0 - ,0.12994488E+4,0.141E+3,0.630E+2,0.19545000E+1,0.00000000E+0 - ,0.10094419E+4,0.141E+3,0.640E+2,0.19545000E+1,0.00000000E+0 - ,0.11553947E+4,0.141E+3,0.650E+2,0.19545000E+1,0.00000000E+0 - ,0.11106913E+4,0.141E+3,0.660E+2,0.19545000E+1,0.00000000E+0 - ,0.11688393E+4,0.141E+3,0.670E+2,0.19545000E+1,0.00000000E+0 - ,0.11436857E+4,0.141E+3,0.680E+2,0.19545000E+1,0.00000000E+0 - ,0.11208436E+4,0.141E+3,0.690E+2,0.19545000E+1,0.00000000E+0 - ,0.11082791E+4,0.141E+3,0.700E+2,0.19545000E+1,0.00000000E+0 - ,0.92522660E+3,0.141E+3,0.710E+2,0.19545000E+1,0.00000000E+0 - ,0.90068080E+3,0.141E+3,0.720E+2,0.19545000E+1,0.00000000E+0 - ,0.81649740E+3,0.141E+3,0.730E+2,0.19545000E+1,0.00000000E+0 - ,0.68598560E+3,0.141E+3,0.740E+2,0.19545000E+1,0.00000000E+0 - ,0.69600400E+3,0.141E+3,0.750E+2,0.19545000E+1,0.00000000E+0 - ,0.62720650E+3,0.141E+3,0.760E+2,0.19545000E+1,0.00000000E+0 - ,0.57177930E+3,0.141E+3,0.770E+2,0.19545000E+1,0.00000000E+0 - ,0.47276430E+3,0.141E+3,0.780E+2,0.19545000E+1,0.00000000E+0 - ,0.44085970E+3,0.141E+3,0.790E+2,0.19545000E+1,0.00000000E+0 - ,0.45247610E+3,0.141E+3,0.800E+2,0.19545000E+1,0.00000000E+0 - ,0.67515180E+3,0.141E+3,0.810E+2,0.19545000E+1,0.00000000E+0 - ,0.65444510E+3,0.141E+3,0.820E+2,0.19545000E+1,0.00000000E+0 - ,0.59566400E+3,0.141E+3,0.830E+2,0.19545000E+1,0.00000000E+0 - ,0.56506480E+3,0.141E+3,0.840E+2,0.19545000E+1,0.00000000E+0 - ,0.51821240E+3,0.141E+3,0.850E+2,0.19545000E+1,0.00000000E+0 - ,0.47230580E+3,0.141E+3,0.860E+2,0.19545000E+1,0.00000000E+0 - ,0.17127050E+4,0.141E+3,0.870E+2,0.19545000E+1,0.00000000E+0 - ,0.16235376E+4,0.141E+3,0.880E+2,0.19545000E+1,0.00000000E+0 - ,0.14203983E+4,0.141E+3,0.890E+2,0.19545000E+1,0.00000000E+0 - ,0.12619867E+4,0.141E+3,0.900E+2,0.19545000E+1,0.00000000E+0 - ,0.12600147E+4,0.141E+3,0.910E+2,0.19545000E+1,0.00000000E+0 - ,0.12197064E+4,0.141E+3,0.920E+2,0.19545000E+1,0.00000000E+0 - ,0.12648378E+4,0.141E+3,0.930E+2,0.19545000E+1,0.00000000E+0 - ,0.12232638E+4,0.141E+3,0.940E+2,0.19545000E+1,0.00000000E+0 - ,0.65312900E+2,0.141E+3,0.101E+3,0.19545000E+1,0.00000000E+0 - ,0.21897060E+3,0.141E+3,0.103E+3,0.19545000E+1,0.98650000E+0 - ,0.27808810E+3,0.141E+3,0.104E+3,0.19545000E+1,0.98080000E+0 - ,0.20799430E+3,0.141E+3,0.105E+3,0.19545000E+1,0.97060000E+0 - ,0.15487640E+3,0.141E+3,0.106E+3,0.19545000E+1,0.98680000E+0 - ,0.10631410E+3,0.141E+3,0.107E+3,0.19545000E+1,0.99440000E+0 - ,0.76634700E+2,0.141E+3,0.108E+3,0.19545000E+1,0.99250000E+0 - ,0.52041200E+2,0.141E+3,0.109E+3,0.19545000E+1,0.99820000E+0 - ,0.32153780E+3,0.141E+3,0.111E+3,0.19545000E+1,0.96840000E+0 - ,0.49834860E+3,0.141E+3,0.112E+3,0.19545000E+1,0.96280000E+0 - ,0.49907610E+3,0.141E+3,0.113E+3,0.19545000E+1,0.96480000E+0 - ,0.39454030E+3,0.141E+3,0.114E+3,0.19545000E+1,0.95070000E+0 - ,0.31930990E+3,0.141E+3,0.115E+3,0.19545000E+1,0.99470000E+0 - ,0.26788580E+3,0.141E+3,0.116E+3,0.19545000E+1,0.99480000E+0 - ,0.21720780E+3,0.141E+3,0.117E+3,0.19545000E+1,0.99720000E+0 - ,0.43952280E+3,0.141E+3,0.119E+3,0.19545000E+1,0.97670000E+0 - ,0.86414110E+3,0.141E+3,0.120E+3,0.19545000E+1,0.98310000E+0 - ,0.43378650E+3,0.141E+3,0.121E+3,0.19545000E+1,0.18627000E+1 - ,0.41830680E+3,0.141E+3,0.122E+3,0.19545000E+1,0.18299000E+1 - ,0.41010330E+3,0.141E+3,0.123E+3,0.19545000E+1,0.19138000E+1 - ,0.40698940E+3,0.141E+3,0.124E+3,0.19545000E+1,0.18269000E+1 - ,0.37146910E+3,0.141E+3,0.125E+3,0.19545000E+1,0.16406000E+1 - ,0.34300120E+3,0.141E+3,0.126E+3,0.19545000E+1,0.16483000E+1 - ,0.32719950E+3,0.141E+3,0.127E+3,0.19545000E+1,0.17149000E+1 - ,0.32009600E+3,0.141E+3,0.128E+3,0.19545000E+1,0.17937000E+1 - ,0.31821360E+3,0.141E+3,0.129E+3,0.19545000E+1,0.95760000E+0 - ,0.29527620E+3,0.141E+3,0.130E+3,0.19545000E+1,0.19419000E+1 - ,0.49283160E+3,0.141E+3,0.131E+3,0.19545000E+1,0.96010000E+0 - ,0.42736220E+3,0.141E+3,0.132E+3,0.19545000E+1,0.94340000E+0 - ,0.37950970E+3,0.141E+3,0.133E+3,0.19545000E+1,0.98890000E+0 - ,0.34441690E+3,0.141E+3,0.134E+3,0.19545000E+1,0.99010000E+0 - ,0.30134630E+3,0.141E+3,0.135E+3,0.19545000E+1,0.99740000E+0 - ,0.52294490E+3,0.141E+3,0.137E+3,0.19545000E+1,0.97380000E+0 - ,0.10528629E+4,0.141E+3,0.138E+3,0.19545000E+1,0.98010000E+0 - ,0.78749500E+3,0.141E+3,0.139E+3,0.19545000E+1,0.19153000E+1 - ,0.57445910E+3,0.141E+3,0.140E+3,0.19545000E+1,0.19355000E+1 - ,0.58058240E+3,0.141E+3,0.141E+3,0.19545000E+1,0.19545000E+1 - ,0.37547800E+2,0.142E+3,0.100E+1,0.19420000E+1,0.91180000E+0 - ,0.24553000E+2,0.142E+3,0.200E+1,0.19420000E+1,0.00000000E+0 - ,0.62818170E+3,0.142E+3,0.300E+1,0.19420000E+1,0.00000000E+0 - ,0.34918970E+3,0.142E+3,0.400E+1,0.19420000E+1,0.00000000E+0 - ,0.23104490E+3,0.142E+3,0.500E+1,0.19420000E+1,0.00000000E+0 - ,0.15432880E+3,0.142E+3,0.600E+1,0.19420000E+1,0.00000000E+0 - ,0.10713040E+3,0.142E+3,0.700E+1,0.19420000E+1,0.00000000E+0 - ,0.80736000E+2,0.142E+3,0.800E+1,0.19420000E+1,0.00000000E+0 - ,0.60941400E+2,0.142E+3,0.900E+1,0.19420000E+1,0.00000000E+0 - ,0.46749800E+2,0.142E+3,0.100E+2,0.19420000E+1,0.00000000E+0 - ,0.74949740E+3,0.142E+3,0.110E+2,0.19420000E+1,0.00000000E+0 - ,0.55988560E+3,0.142E+3,0.120E+2,0.19420000E+1,0.00000000E+0 - ,0.51108100E+3,0.142E+3,0.130E+2,0.19420000E+1,0.00000000E+0 - ,0.39766020E+3,0.142E+3,0.140E+2,0.19420000E+1,0.00000000E+0 - ,0.30713840E+3,0.142E+3,0.150E+2,0.19420000E+1,0.00000000E+0 - ,0.25349850E+3,0.142E+3,0.160E+2,0.19420000E+1,0.00000000E+0 - ,0.20604590E+3,0.142E+3,0.170E+2,0.19420000E+1,0.00000000E+0 - ,0.16790140E+3,0.142E+3,0.180E+2,0.19420000E+1,0.00000000E+0 - ,0.12379643E+4,0.142E+3,0.190E+2,0.19420000E+1,0.00000000E+0 - ,0.99601570E+3,0.142E+3,0.200E+2,0.19420000E+1,0.00000000E+0 - ,0.81851610E+3,0.142E+3,0.210E+2,0.19420000E+1,0.00000000E+0 - ,0.78705650E+3,0.142E+3,0.220E+2,0.19420000E+1,0.00000000E+0 - ,0.71884690E+3,0.142E+3,0.230E+2,0.19420000E+1,0.00000000E+0 - ,0.56643000E+3,0.142E+3,0.240E+2,0.19420000E+1,0.00000000E+0 - ,0.61659930E+3,0.142E+3,0.250E+2,0.19420000E+1,0.00000000E+0 - ,0.48385370E+3,0.142E+3,0.260E+2,0.19420000E+1,0.00000000E+0 - ,0.50969990E+3,0.142E+3,0.270E+2,0.19420000E+1,0.00000000E+0 - ,0.52637950E+3,0.142E+3,0.280E+2,0.19420000E+1,0.00000000E+0 - ,0.40384000E+3,0.142E+3,0.290E+2,0.19420000E+1,0.00000000E+0 - ,0.41098660E+3,0.142E+3,0.300E+2,0.19420000E+1,0.00000000E+0 - ,0.48798580E+3,0.142E+3,0.310E+2,0.19420000E+1,0.00000000E+0 - ,0.42607030E+3,0.142E+3,0.320E+2,0.19420000E+1,0.00000000E+0 - ,0.36044960E+3,0.142E+3,0.330E+2,0.19420000E+1,0.00000000E+0 - ,0.32194150E+3,0.142E+3,0.340E+2,0.19420000E+1,0.00000000E+0 - ,0.28047020E+3,0.142E+3,0.350E+2,0.19420000E+1,0.00000000E+0 - ,0.24296840E+3,0.142E+3,0.360E+2,0.19420000E+1,0.00000000E+0 - ,0.13851228E+4,0.142E+3,0.370E+2,0.19420000E+1,0.00000000E+0 - ,0.11881982E+4,0.142E+3,0.380E+2,0.19420000E+1,0.00000000E+0 - ,0.10314745E+4,0.142E+3,0.390E+2,0.19420000E+1,0.00000000E+0 - ,0.92206600E+3,0.142E+3,0.400E+2,0.19420000E+1,0.00000000E+0 - ,0.83798490E+3,0.142E+3,0.410E+2,0.19420000E+1,0.00000000E+0 - ,0.64347210E+3,0.142E+3,0.420E+2,0.19420000E+1,0.00000000E+0 - ,0.71936590E+3,0.142E+3,0.430E+2,0.19420000E+1,0.00000000E+0 - ,0.54480750E+3,0.142E+3,0.440E+2,0.19420000E+1,0.00000000E+0 - ,0.59515030E+3,0.142E+3,0.450E+2,0.19420000E+1,0.00000000E+0 - ,0.55075570E+3,0.142E+3,0.460E+2,0.19420000E+1,0.00000000E+0 - ,0.46023670E+3,0.142E+3,0.470E+2,0.19420000E+1,0.00000000E+0 - ,0.48402860E+3,0.142E+3,0.480E+2,0.19420000E+1,0.00000000E+0 - ,0.61139110E+3,0.142E+3,0.490E+2,0.19420000E+1,0.00000000E+0 - ,0.56051040E+3,0.142E+3,0.500E+2,0.19420000E+1,0.00000000E+0 - ,0.49569480E+3,0.142E+3,0.510E+2,0.19420000E+1,0.00000000E+0 - ,0.45793020E+3,0.142E+3,0.520E+2,0.19420000E+1,0.00000000E+0 - ,0.41222750E+3,0.142E+3,0.530E+2,0.19420000E+1,0.00000000E+0 - ,0.36915310E+3,0.142E+3,0.540E+2,0.19420000E+1,0.00000000E+0 - ,0.16877490E+4,0.142E+3,0.550E+2,0.19420000E+1,0.00000000E+0 - ,0.15201317E+4,0.142E+3,0.560E+2,0.19420000E+1,0.00000000E+0 - ,0.13232583E+4,0.142E+3,0.570E+2,0.19420000E+1,0.00000000E+0 - ,0.58664300E+3,0.142E+3,0.580E+2,0.19420000E+1,0.27991000E+1 - ,0.13428116E+4,0.142E+3,0.590E+2,0.19420000E+1,0.00000000E+0 - ,0.12872763E+4,0.142E+3,0.600E+2,0.19420000E+1,0.00000000E+0 - ,0.12544039E+4,0.142E+3,0.610E+2,0.19420000E+1,0.00000000E+0 - ,0.12242314E+4,0.142E+3,0.620E+2,0.19420000E+1,0.00000000E+0 - ,0.11974564E+4,0.142E+3,0.630E+2,0.19420000E+1,0.00000000E+0 - ,0.93283320E+3,0.142E+3,0.640E+2,0.19420000E+1,0.00000000E+0 - ,0.10667077E+4,0.142E+3,0.650E+2,0.19420000E+1,0.00000000E+0 - ,0.10271026E+4,0.142E+3,0.660E+2,0.19420000E+1,0.00000000E+0 - ,0.10774205E+4,0.142E+3,0.670E+2,0.19420000E+1,0.00000000E+0 - ,0.10542484E+4,0.142E+3,0.680E+2,0.19420000E+1,0.00000000E+0 - ,0.10332364E+4,0.142E+3,0.690E+2,0.19420000E+1,0.00000000E+0 - ,0.10215311E+4,0.142E+3,0.700E+2,0.19420000E+1,0.00000000E+0 - ,0.85524570E+3,0.142E+3,0.710E+2,0.19420000E+1,0.00000000E+0 - ,0.83345230E+3,0.142E+3,0.720E+2,0.19420000E+1,0.00000000E+0 - ,0.75675320E+3,0.142E+3,0.730E+2,0.19420000E+1,0.00000000E+0 - ,0.63690770E+3,0.142E+3,0.740E+2,0.19420000E+1,0.00000000E+0 - ,0.64654950E+3,0.142E+3,0.750E+2,0.19420000E+1,0.00000000E+0 - ,0.58352570E+3,0.142E+3,0.760E+2,0.19420000E+1,0.00000000E+0 - ,0.53265790E+3,0.142E+3,0.770E+2,0.19420000E+1,0.00000000E+0 - ,0.44119610E+3,0.142E+3,0.780E+2,0.19420000E+1,0.00000000E+0 - ,0.41171360E+3,0.142E+3,0.790E+2,0.19420000E+1,0.00000000E+0 - ,0.42271910E+3,0.142E+3,0.800E+2,0.19420000E+1,0.00000000E+0 - ,0.62693260E+3,0.142E+3,0.810E+2,0.19420000E+1,0.00000000E+0 - ,0.60866200E+3,0.142E+3,0.820E+2,0.19420000E+1,0.00000000E+0 - ,0.55532550E+3,0.142E+3,0.830E+2,0.19420000E+1,0.00000000E+0 - ,0.52759970E+3,0.142E+3,0.840E+2,0.19420000E+1,0.00000000E+0 - ,0.48478900E+3,0.142E+3,0.850E+2,0.19420000E+1,0.00000000E+0 - ,0.44266740E+3,0.142E+3,0.860E+2,0.19420000E+1,0.00000000E+0 - ,0.15815449E+4,0.142E+3,0.870E+2,0.19420000E+1,0.00000000E+0 - ,0.14962077E+4,0.142E+3,0.880E+2,0.19420000E+1,0.00000000E+0 - ,0.13112088E+4,0.142E+3,0.890E+2,0.19420000E+1,0.00000000E+0 - ,0.11676309E+4,0.142E+3,0.900E+2,0.19420000E+1,0.00000000E+0 - ,0.11649288E+4,0.142E+3,0.910E+2,0.19420000E+1,0.00000000E+0 - ,0.11276927E+4,0.142E+3,0.920E+2,0.19420000E+1,0.00000000E+0 - ,0.11676383E+4,0.142E+3,0.930E+2,0.19420000E+1,0.00000000E+0 - ,0.11294830E+4,0.142E+3,0.940E+2,0.19420000E+1,0.00000000E+0 - ,0.60977300E+2,0.142E+3,0.101E+3,0.19420000E+1,0.00000000E+0 - ,0.20251730E+3,0.142E+3,0.103E+3,0.19420000E+1,0.98650000E+0 - ,0.25760880E+3,0.142E+3,0.104E+3,0.19420000E+1,0.98080000E+0 - ,0.19375570E+3,0.142E+3,0.105E+3,0.19420000E+1,0.97060000E+0 - ,0.14487380E+3,0.142E+3,0.106E+3,0.19420000E+1,0.98680000E+0 - ,0.99938100E+2,0.142E+3,0.107E+3,0.19420000E+1,0.99440000E+0 - ,0.72352000E+2,0.142E+3,0.108E+3,0.19420000E+1,0.99250000E+0 - ,0.49416600E+2,0.142E+3,0.109E+3,0.19420000E+1,0.99820000E+0 - ,0.29717130E+3,0.142E+3,0.111E+3,0.19420000E+1,0.96840000E+0 - ,0.46042340E+3,0.142E+3,0.112E+3,0.19420000E+1,0.96280000E+0 - ,0.46216780E+3,0.142E+3,0.113E+3,0.19420000E+1,0.96480000E+0 - ,0.36695490E+3,0.142E+3,0.114E+3,0.19420000E+1,0.95070000E+0 - ,0.29806610E+3,0.142E+3,0.115E+3,0.19420000E+1,0.99470000E+0 - ,0.25075730E+3,0.142E+3,0.116E+3,0.19420000E+1,0.99480000E+0 - ,0.20393970E+3,0.142E+3,0.117E+3,0.19420000E+1,0.99720000E+0 - ,0.40759060E+3,0.142E+3,0.119E+3,0.19420000E+1,0.97670000E+0 - ,0.79747730E+3,0.142E+3,0.120E+3,0.19420000E+1,0.98310000E+0 - ,0.40315400E+3,0.142E+3,0.121E+3,0.19420000E+1,0.18627000E+1 - ,0.38917870E+3,0.142E+3,0.122E+3,0.19420000E+1,0.18299000E+1 - ,0.38148040E+3,0.142E+3,0.123E+3,0.19420000E+1,0.19138000E+1 - ,0.37844740E+3,0.142E+3,0.124E+3,0.19420000E+1,0.18269000E+1 - ,0.34604230E+3,0.142E+3,0.125E+3,0.19420000E+1,0.16406000E+1 - ,0.31976370E+3,0.142E+3,0.126E+3,0.19420000E+1,0.16483000E+1 - ,0.30508870E+3,0.142E+3,0.127E+3,0.19420000E+1,0.17149000E+1 - ,0.29841290E+3,0.142E+3,0.128E+3,0.19420000E+1,0.17937000E+1 - ,0.29619890E+3,0.142E+3,0.129E+3,0.19420000E+1,0.95760000E+0 - ,0.27560550E+3,0.142E+3,0.130E+3,0.19420000E+1,0.19419000E+1 - ,0.45716410E+3,0.142E+3,0.131E+3,0.19420000E+1,0.96010000E+0 - ,0.39775920E+3,0.142E+3,0.132E+3,0.19420000E+1,0.94340000E+0 - ,0.35418680E+3,0.142E+3,0.133E+3,0.19420000E+1,0.98890000E+0 - ,0.32209780E+3,0.142E+3,0.134E+3,0.19420000E+1,0.99010000E+0 - ,0.28249330E+3,0.142E+3,0.135E+3,0.19420000E+1,0.99740000E+0 - ,0.48541290E+3,0.142E+3,0.137E+3,0.19420000E+1,0.97380000E+0 - ,0.97212330E+3,0.142E+3,0.138E+3,0.19420000E+1,0.98010000E+0 - ,0.73014460E+3,0.142E+3,0.139E+3,0.19420000E+1,0.19153000E+1 - ,0.53401080E+3,0.142E+3,0.140E+3,0.19420000E+1,0.19355000E+1 - ,0.53935320E+3,0.142E+3,0.141E+3,0.19420000E+1,0.19545000E+1 - ,0.50200730E+3,0.142E+3,0.142E+3,0.19420000E+1,0.19420000E+1 - ,0.41338500E+2,0.143E+3,0.100E+1,0.16682000E+1,0.91180000E+0 - ,0.26621700E+2,0.143E+3,0.200E+1,0.16682000E+1,0.00000000E+0 - ,0.76378140E+3,0.143E+3,0.300E+1,0.16682000E+1,0.00000000E+0 - ,0.40277270E+3,0.143E+3,0.400E+1,0.16682000E+1,0.00000000E+0 - ,0.26037960E+3,0.143E+3,0.500E+1,0.16682000E+1,0.00000000E+0 - ,0.17125810E+3,0.143E+3,0.600E+1,0.16682000E+1,0.00000000E+0 - ,0.11764790E+3,0.143E+3,0.700E+1,0.16682000E+1,0.00000000E+0 - ,0.88060900E+2,0.143E+3,0.800E+1,0.16682000E+1,0.00000000E+0 - ,0.66109300E+2,0.143E+3,0.900E+1,0.16682000E+1,0.00000000E+0 - ,0.50508700E+2,0.143E+3,0.100E+2,0.16682000E+1,0.00000000E+0 - ,0.90840250E+3,0.143E+3,0.110E+2,0.16682000E+1,0.00000000E+0 - ,0.65125640E+3,0.143E+3,0.120E+2,0.16682000E+1,0.00000000E+0 - ,0.58698620E+3,0.143E+3,0.130E+2,0.16682000E+1,0.00000000E+0 - ,0.44911910E+3,0.143E+3,0.140E+2,0.16682000E+1,0.00000000E+0 - ,0.34248830E+3,0.143E+3,0.150E+2,0.16682000E+1,0.00000000E+0 - ,0.28056130E+3,0.143E+3,0.160E+2,0.16682000E+1,0.00000000E+0 - ,0.22648330E+3,0.143E+3,0.170E+2,0.16682000E+1,0.00000000E+0 - ,0.18352050E+3,0.143E+3,0.180E+2,0.16682000E+1,0.00000000E+0 - ,0.15188755E+4,0.143E+3,0.190E+2,0.16682000E+1,0.00000000E+0 - ,0.11783302E+4,0.143E+3,0.200E+2,0.16682000E+1,0.00000000E+0 - ,0.96136570E+3,0.143E+3,0.210E+2,0.16682000E+1,0.00000000E+0 - ,0.91930990E+3,0.143E+3,0.220E+2,0.16682000E+1,0.00000000E+0 - ,0.83673410E+3,0.143E+3,0.230E+2,0.16682000E+1,0.00000000E+0 - ,0.65972010E+3,0.143E+3,0.240E+2,0.16682000E+1,0.00000000E+0 - ,0.71418300E+3,0.143E+3,0.250E+2,0.16682000E+1,0.00000000E+0 - ,0.56036480E+3,0.143E+3,0.260E+2,0.16682000E+1,0.00000000E+0 - ,0.58529350E+3,0.143E+3,0.270E+2,0.16682000E+1,0.00000000E+0 - ,0.60647400E+3,0.143E+3,0.280E+2,0.16682000E+1,0.00000000E+0 - ,0.46581470E+3,0.143E+3,0.290E+2,0.16682000E+1,0.00000000E+0 - ,0.46845290E+3,0.143E+3,0.300E+2,0.16682000E+1,0.00000000E+0 - ,0.55815220E+3,0.143E+3,0.310E+2,0.16682000E+1,0.00000000E+0 - ,0.48089260E+3,0.143E+3,0.320E+2,0.16682000E+1,0.00000000E+0 - ,0.40245400E+3,0.143E+3,0.330E+2,0.16682000E+1,0.00000000E+0 - ,0.35725110E+3,0.143E+3,0.340E+2,0.16682000E+1,0.00000000E+0 - ,0.30935300E+3,0.143E+3,0.350E+2,0.16682000E+1,0.00000000E+0 - ,0.26657770E+3,0.143E+3,0.360E+2,0.16682000E+1,0.00000000E+0 - ,0.16961214E+4,0.143E+3,0.370E+2,0.16682000E+1,0.00000000E+0 - ,0.14083895E+4,0.143E+3,0.380E+2,0.16682000E+1,0.00000000E+0 - ,0.12079868E+4,0.143E+3,0.390E+2,0.16682000E+1,0.00000000E+0 - ,0.10721935E+4,0.143E+3,0.400E+2,0.16682000E+1,0.00000000E+0 - ,0.97020700E+3,0.143E+3,0.410E+2,0.16682000E+1,0.00000000E+0 - ,0.73979150E+3,0.143E+3,0.420E+2,0.16682000E+1,0.00000000E+0 - ,0.82924080E+3,0.143E+3,0.430E+2,0.16682000E+1,0.00000000E+0 - ,0.62313860E+3,0.143E+3,0.440E+2,0.16682000E+1,0.00000000E+0 - ,0.68005240E+3,0.143E+3,0.450E+2,0.16682000E+1,0.00000000E+0 - ,0.62758100E+3,0.143E+3,0.460E+2,0.16682000E+1,0.00000000E+0 - ,0.52609770E+3,0.143E+3,0.470E+2,0.16682000E+1,0.00000000E+0 - ,0.54963380E+3,0.143E+3,0.480E+2,0.16682000E+1,0.00000000E+0 - ,0.70042290E+3,0.143E+3,0.490E+2,0.16682000E+1,0.00000000E+0 - ,0.63478310E+3,0.143E+3,0.500E+2,0.16682000E+1,0.00000000E+0 - ,0.55577940E+3,0.143E+3,0.510E+2,0.16682000E+1,0.00000000E+0 - ,0.51056820E+3,0.143E+3,0.520E+2,0.16682000E+1,0.00000000E+0 - ,0.45697070E+3,0.143E+3,0.530E+2,0.16682000E+1,0.00000000E+0 - ,0.40709700E+3,0.143E+3,0.540E+2,0.16682000E+1,0.00000000E+0 - ,0.20688557E+4,0.143E+3,0.550E+2,0.16682000E+1,0.00000000E+0 - ,0.18110626E+4,0.143E+3,0.560E+2,0.16682000E+1,0.00000000E+0 - ,0.15570674E+4,0.143E+3,0.570E+2,0.16682000E+1,0.00000000E+0 - ,0.65923480E+3,0.143E+3,0.580E+2,0.16682000E+1,0.27991000E+1 - ,0.15936331E+4,0.143E+3,0.590E+2,0.16682000E+1,0.00000000E+0 - ,0.15238714E+4,0.143E+3,0.600E+2,0.16682000E+1,0.00000000E+0 - ,0.14839817E+4,0.143E+3,0.610E+2,0.16682000E+1,0.00000000E+0 - ,0.14474665E+4,0.143E+3,0.620E+2,0.16682000E+1,0.00000000E+0 - ,0.14150358E+4,0.143E+3,0.630E+2,0.16682000E+1,0.00000000E+0 - ,0.10889839E+4,0.143E+3,0.640E+2,0.16682000E+1,0.00000000E+0 - ,0.12727235E+4,0.143E+3,0.650E+2,0.16682000E+1,0.00000000E+0 - ,0.12232739E+4,0.143E+3,0.660E+2,0.16682000E+1,0.00000000E+0 - ,0.12689174E+4,0.143E+3,0.670E+2,0.16682000E+1,0.00000000E+0 - ,0.12411151E+4,0.143E+3,0.680E+2,0.16682000E+1,0.00000000E+0 - ,0.12157298E+4,0.143E+3,0.690E+2,0.16682000E+1,0.00000000E+0 - ,0.12025314E+4,0.143E+3,0.700E+2,0.16682000E+1,0.00000000E+0 - ,0.99886140E+3,0.143E+3,0.710E+2,0.16682000E+1,0.00000000E+0 - ,0.96131920E+3,0.143E+3,0.720E+2,0.16682000E+1,0.00000000E+0 - ,0.86700540E+3,0.143E+3,0.730E+2,0.16682000E+1,0.00000000E+0 - ,0.72670660E+3,0.143E+3,0.740E+2,0.16682000E+1,0.00000000E+0 - ,0.73557240E+3,0.143E+3,0.750E+2,0.16682000E+1,0.00000000E+0 - ,0.66018700E+3,0.143E+3,0.760E+2,0.16682000E+1,0.00000000E+0 - ,0.60002740E+3,0.143E+3,0.770E+2,0.16682000E+1,0.00000000E+0 - ,0.49511760E+3,0.143E+3,0.780E+2,0.16682000E+1,0.00000000E+0 - ,0.46130260E+3,0.143E+3,0.790E+2,0.16682000E+1,0.00000000E+0 - ,0.47242330E+3,0.143E+3,0.800E+2,0.16682000E+1,0.00000000E+0 - ,0.71722290E+3,0.143E+3,0.810E+2,0.16682000E+1,0.00000000E+0 - ,0.68964350E+3,0.143E+3,0.820E+2,0.16682000E+1,0.00000000E+0 - ,0.62335390E+3,0.143E+3,0.830E+2,0.16682000E+1,0.00000000E+0 - ,0.58927250E+3,0.143E+3,0.840E+2,0.16682000E+1,0.00000000E+0 - ,0.53837470E+3,0.143E+3,0.850E+2,0.16682000E+1,0.00000000E+0 - ,0.48918620E+3,0.143E+3,0.860E+2,0.16682000E+1,0.00000000E+0 - ,0.19184029E+4,0.143E+3,0.870E+2,0.16682000E+1,0.00000000E+0 - ,0.17715639E+4,0.143E+3,0.880E+2,0.16682000E+1,0.00000000E+0 - ,0.15346792E+4,0.143E+3,0.890E+2,0.16682000E+1,0.00000000E+0 - ,0.13502400E+4,0.143E+3,0.900E+2,0.16682000E+1,0.00000000E+0 - ,0.13560504E+4,0.143E+3,0.910E+2,0.16682000E+1,0.00000000E+0 - ,0.13122121E+4,0.143E+3,0.920E+2,0.16682000E+1,0.00000000E+0 - ,0.13686610E+4,0.143E+3,0.930E+2,0.16682000E+1,0.00000000E+0 - ,0.13219594E+4,0.143E+3,0.940E+2,0.16682000E+1,0.00000000E+0 - ,0.67892400E+2,0.143E+3,0.101E+3,0.16682000E+1,0.00000000E+0 - ,0.23295390E+3,0.143E+3,0.103E+3,0.16682000E+1,0.98650000E+0 - ,0.29538160E+3,0.143E+3,0.104E+3,0.16682000E+1,0.98080000E+0 - ,0.21747620E+3,0.143E+3,0.105E+3,0.16682000E+1,0.97060000E+0 - ,0.16092230E+3,0.143E+3,0.106E+3,0.16682000E+1,0.98680000E+0 - ,0.10977550E+3,0.143E+3,0.107E+3,0.16682000E+1,0.99440000E+0 - ,0.78792000E+2,0.143E+3,0.108E+3,0.16682000E+1,0.99250000E+0 - ,0.53288000E+2,0.143E+3,0.109E+3,0.16682000E+1,0.99820000E+0 - ,0.34355920E+3,0.143E+3,0.111E+3,0.16682000E+1,0.96840000E+0 - ,0.53370850E+3,0.143E+3,0.112E+3,0.16682000E+1,0.96280000E+0 - ,0.52930430E+3,0.143E+3,0.113E+3,0.16682000E+1,0.96480000E+0 - ,0.41359910E+3,0.143E+3,0.114E+3,0.16682000E+1,0.95070000E+0 - ,0.33227830E+3,0.143E+3,0.115E+3,0.16682000E+1,0.99470000E+0 - ,0.27760020E+3,0.143E+3,0.116E+3,0.16682000E+1,0.99480000E+0 - ,0.22420950E+3,0.143E+3,0.117E+3,0.16682000E+1,0.99720000E+0 - ,0.46809770E+3,0.143E+3,0.119E+3,0.16682000E+1,0.97670000E+0 - ,0.94599430E+3,0.143E+3,0.120E+3,0.16682000E+1,0.98310000E+0 - ,0.45591090E+3,0.143E+3,0.121E+3,0.16682000E+1,0.18627000E+1 - ,0.44025610E+3,0.143E+3,0.122E+3,0.16682000E+1,0.18299000E+1 - ,0.43163910E+3,0.143E+3,0.123E+3,0.16682000E+1,0.19138000E+1 - ,0.42896620E+3,0.143E+3,0.124E+3,0.16682000E+1,0.18269000E+1 - ,0.38890660E+3,0.143E+3,0.125E+3,0.16682000E+1,0.16406000E+1 - ,0.35865620E+3,0.143E+3,0.126E+3,0.16682000E+1,0.16483000E+1 - ,0.34229790E+3,0.143E+3,0.127E+3,0.16682000E+1,0.17149000E+1 - ,0.33502870E+3,0.143E+3,0.128E+3,0.16682000E+1,0.17937000E+1 - ,0.33456150E+3,0.143E+3,0.129E+3,0.16682000E+1,0.95760000E+0 - ,0.30788150E+3,0.143E+3,0.130E+3,0.16682000E+1,0.19419000E+1 - ,0.52114410E+3,0.143E+3,0.131E+3,0.16682000E+1,0.96010000E+0 - ,0.44771310E+3,0.143E+3,0.132E+3,0.16682000E+1,0.94340000E+0 - ,0.39524720E+3,0.143E+3,0.133E+3,0.16682000E+1,0.98890000E+0 - ,0.35747370E+3,0.143E+3,0.134E+3,0.16682000E+1,0.99010000E+0 - ,0.31169010E+3,0.143E+3,0.135E+3,0.16682000E+1,0.99740000E+0 - ,0.55612550E+3,0.143E+3,0.137E+3,0.16682000E+1,0.97380000E+0 - ,0.11562604E+4,0.143E+3,0.138E+3,0.16682000E+1,0.98010000E+0 - ,0.84837270E+3,0.143E+3,0.139E+3,0.16682000E+1,0.19153000E+1 - ,0.60533890E+3,0.143E+3,0.140E+3,0.16682000E+1,0.19355000E+1 - ,0.61127640E+3,0.143E+3,0.141E+3,0.16682000E+1,0.19545000E+1 - ,0.56776700E+3,0.143E+3,0.142E+3,0.16682000E+1,0.19420000E+1 - ,0.64971430E+3,0.143E+3,0.143E+3,0.16682000E+1,0.16682000E+1 - ,0.33187500E+2,0.144E+3,0.100E+1,0.18584000E+1,0.91180000E+0 - ,0.22061600E+2,0.144E+3,0.200E+1,0.18584000E+1,0.00000000E+0 - ,0.51733300E+3,0.144E+3,0.300E+1,0.18584000E+1,0.00000000E+0 - ,0.29751860E+3,0.144E+3,0.400E+1,0.18584000E+1,0.00000000E+0 - ,0.20032990E+3,0.144E+3,0.500E+1,0.18584000E+1,0.00000000E+0 - ,0.13555170E+3,0.144E+3,0.600E+1,0.18584000E+1,0.00000000E+0 - ,0.95019000E+2,0.144E+3,0.700E+1,0.18584000E+1,0.00000000E+0 - ,0.72117300E+2,0.144E+3,0.800E+1,0.18584000E+1,0.00000000E+0 - ,0.54778100E+2,0.144E+3,0.900E+1,0.18584000E+1,0.00000000E+0 - ,0.42243200E+2,0.144E+3,0.100E+2,0.18584000E+1,0.00000000E+0 - ,0.61866690E+3,0.144E+3,0.110E+2,0.18584000E+1,0.00000000E+0 - ,0.47441800E+3,0.144E+3,0.120E+2,0.18584000E+1,0.00000000E+0 - ,0.43702090E+3,0.144E+3,0.130E+2,0.18584000E+1,0.00000000E+0 - ,0.34421130E+3,0.144E+3,0.140E+2,0.18584000E+1,0.00000000E+0 - ,0.26854160E+3,0.144E+3,0.150E+2,0.18584000E+1,0.00000000E+0 - ,0.22308830E+3,0.144E+3,0.160E+2,0.18584000E+1,0.00000000E+0 - ,0.18247210E+3,0.144E+3,0.170E+2,0.18584000E+1,0.00000000E+0 - ,0.14952220E+3,0.144E+3,0.180E+2,0.18584000E+1,0.00000000E+0 - ,0.10157997E+4,0.144E+3,0.190E+2,0.18584000E+1,0.00000000E+0 - ,0.83526920E+3,0.144E+3,0.200E+2,0.18584000E+1,0.00000000E+0 - ,0.68960880E+3,0.144E+3,0.210E+2,0.18584000E+1,0.00000000E+0 - ,0.66581430E+3,0.144E+3,0.220E+2,0.18584000E+1,0.00000000E+0 - ,0.60961590E+3,0.144E+3,0.230E+2,0.18584000E+1,0.00000000E+0 - ,0.48063820E+3,0.144E+3,0.240E+2,0.18584000E+1,0.00000000E+0 - ,0.52477480E+3,0.144E+3,0.250E+2,0.18584000E+1,0.00000000E+0 - ,0.41224680E+3,0.144E+3,0.260E+2,0.18584000E+1,0.00000000E+0 - ,0.43640540E+3,0.144E+3,0.270E+2,0.18584000E+1,0.00000000E+0 - ,0.44958060E+3,0.144E+3,0.280E+2,0.18584000E+1,0.00000000E+0 - ,0.34510430E+3,0.144E+3,0.290E+2,0.18584000E+1,0.00000000E+0 - ,0.35378800E+3,0.144E+3,0.300E+2,0.18584000E+1,0.00000000E+0 - ,0.41885730E+3,0.144E+3,0.310E+2,0.18584000E+1,0.00000000E+0 - ,0.36917340E+3,0.144E+3,0.320E+2,0.18584000E+1,0.00000000E+0 - ,0.31492530E+3,0.144E+3,0.330E+2,0.18584000E+1,0.00000000E+0 - ,0.28273020E+3,0.144E+3,0.340E+2,0.18584000E+1,0.00000000E+0 - ,0.24762030E+3,0.144E+3,0.350E+2,0.18584000E+1,0.00000000E+0 - ,0.21556830E+3,0.144E+3,0.360E+2,0.18584000E+1,0.00000000E+0 - ,0.11385265E+4,0.144E+3,0.370E+2,0.18584000E+1,0.00000000E+0 - ,0.99561160E+3,0.144E+3,0.380E+2,0.18584000E+1,0.00000000E+0 - ,0.87126000E+3,0.144E+3,0.390E+2,0.18584000E+1,0.00000000E+0 - ,0.78271660E+3,0.144E+3,0.400E+2,0.18584000E+1,0.00000000E+0 - ,0.71364770E+3,0.144E+3,0.410E+2,0.18584000E+1,0.00000000E+0 - ,0.55112400E+3,0.144E+3,0.420E+2,0.18584000E+1,0.00000000E+0 - ,0.61481850E+3,0.144E+3,0.430E+2,0.18584000E+1,0.00000000E+0 - ,0.46856950E+3,0.144E+3,0.440E+2,0.18584000E+1,0.00000000E+0 - ,0.51183150E+3,0.144E+3,0.450E+2,0.18584000E+1,0.00000000E+0 - ,0.47463690E+3,0.144E+3,0.460E+2,0.18584000E+1,0.00000000E+0 - ,0.39627420E+3,0.144E+3,0.470E+2,0.18584000E+1,0.00000000E+0 - ,0.41825790E+3,0.144E+3,0.480E+2,0.18584000E+1,0.00000000E+0 - ,0.52482360E+3,0.144E+3,0.490E+2,0.18584000E+1,0.00000000E+0 - ,0.48488550E+3,0.144E+3,0.500E+2,0.18584000E+1,0.00000000E+0 - ,0.43198650E+3,0.144E+3,0.510E+2,0.18584000E+1,0.00000000E+0 - ,0.40083190E+3,0.144E+3,0.520E+2,0.18584000E+1,0.00000000E+0 - ,0.36253740E+3,0.144E+3,0.530E+2,0.18584000E+1,0.00000000E+0 - ,0.32611570E+3,0.144E+3,0.540E+2,0.18584000E+1,0.00000000E+0 - ,0.13871242E+4,0.144E+3,0.550E+2,0.18584000E+1,0.00000000E+0 - ,0.12701002E+4,0.144E+3,0.560E+2,0.18584000E+1,0.00000000E+0 - ,0.11145962E+4,0.144E+3,0.570E+2,0.18584000E+1,0.00000000E+0 - ,0.51058640E+3,0.144E+3,0.580E+2,0.18584000E+1,0.27991000E+1 - ,0.11251127E+4,0.144E+3,0.590E+2,0.18584000E+1,0.00000000E+0 - ,0.10801628E+4,0.144E+3,0.600E+2,0.18584000E+1,0.00000000E+0 - ,0.10529974E+4,0.144E+3,0.610E+2,0.18584000E+1,0.00000000E+0 - ,0.10280158E+4,0.144E+3,0.620E+2,0.18584000E+1,0.00000000E+0 - ,0.10058586E+4,0.144E+3,0.630E+2,0.18584000E+1,0.00000000E+0 - ,0.79051760E+3,0.144E+3,0.640E+2,0.18584000E+1,0.00000000E+0 - ,0.89187640E+3,0.144E+3,0.650E+2,0.18584000E+1,0.00000000E+0 - ,0.85997290E+3,0.144E+3,0.660E+2,0.18584000E+1,0.00000000E+0 - ,0.90692140E+3,0.144E+3,0.670E+2,0.18584000E+1,0.00000000E+0 - ,0.88762020E+3,0.144E+3,0.680E+2,0.18584000E+1,0.00000000E+0 - ,0.87020630E+3,0.144E+3,0.690E+2,0.18584000E+1,0.00000000E+0 - ,0.86003450E+3,0.144E+3,0.700E+2,0.18584000E+1,0.00000000E+0 - ,0.72429040E+3,0.144E+3,0.710E+2,0.18584000E+1,0.00000000E+0 - ,0.71147790E+3,0.144E+3,0.720E+2,0.18584000E+1,0.00000000E+0 - ,0.64914710E+3,0.144E+3,0.730E+2,0.18584000E+1,0.00000000E+0 - ,0.54842120E+3,0.144E+3,0.740E+2,0.18584000E+1,0.00000000E+0 - ,0.55775610E+3,0.144E+3,0.750E+2,0.18584000E+1,0.00000000E+0 - ,0.50549330E+3,0.144E+3,0.760E+2,0.18584000E+1,0.00000000E+0 - ,0.46298700E+3,0.144E+3,0.770E+2,0.18584000E+1,0.00000000E+0 - ,0.38491460E+3,0.144E+3,0.780E+2,0.18584000E+1,0.00000000E+0 - ,0.35974270E+3,0.144E+3,0.790E+2,0.18584000E+1,0.00000000E+0 - ,0.36989520E+3,0.144E+3,0.800E+2,0.18584000E+1,0.00000000E+0 - ,0.53929820E+3,0.144E+3,0.810E+2,0.18584000E+1,0.00000000E+0 - ,0.52677380E+3,0.144E+3,0.820E+2,0.18584000E+1,0.00000000E+0 - ,0.48381430E+3,0.144E+3,0.830E+2,0.18584000E+1,0.00000000E+0 - ,0.46139360E+3,0.144E+3,0.840E+2,0.18584000E+1,0.00000000E+0 - ,0.42587210E+3,0.144E+3,0.850E+2,0.18584000E+1,0.00000000E+0 - ,0.39047110E+3,0.144E+3,0.860E+2,0.18584000E+1,0.00000000E+0 - ,0.13086904E+4,0.144E+3,0.870E+2,0.18584000E+1,0.00000000E+0 - ,0.12553593E+4,0.144E+3,0.880E+2,0.18584000E+1,0.00000000E+0 - ,0.11084934E+4,0.144E+3,0.890E+2,0.18584000E+1,0.00000000E+0 - ,0.99548230E+3,0.144E+3,0.900E+2,0.18584000E+1,0.00000000E+0 - ,0.98913640E+3,0.144E+3,0.910E+2,0.18584000E+1,0.00000000E+0 - ,0.95777810E+3,0.144E+3,0.920E+2,0.18584000E+1,0.00000000E+0 - ,0.98673520E+3,0.144E+3,0.930E+2,0.18584000E+1,0.00000000E+0 - ,0.95542490E+3,0.144E+3,0.940E+2,0.18584000E+1,0.00000000E+0 - ,0.53364800E+2,0.144E+3,0.101E+3,0.18584000E+1,0.00000000E+0 - ,0.17297080E+3,0.144E+3,0.103E+3,0.18584000E+1,0.98650000E+0 - ,0.22067460E+3,0.144E+3,0.104E+3,0.18584000E+1,0.98080000E+0 - ,0.16859440E+3,0.144E+3,0.105E+3,0.18584000E+1,0.97060000E+0 - ,0.12721250E+3,0.144E+3,0.106E+3,0.18584000E+1,0.98680000E+0 - ,0.88661300E+2,0.144E+3,0.107E+3,0.18584000E+1,0.99440000E+0 - ,0.64744800E+2,0.144E+3,0.108E+3,0.18584000E+1,0.99250000E+0 - ,0.44708700E+2,0.144E+3,0.109E+3,0.18584000E+1,0.99820000E+0 - ,0.25309000E+3,0.144E+3,0.111E+3,0.18584000E+1,0.96840000E+0 - ,0.39136060E+3,0.144E+3,0.112E+3,0.18584000E+1,0.96280000E+0 - ,0.39606340E+3,0.144E+3,0.113E+3,0.18584000E+1,0.96480000E+0 - ,0.31817950E+3,0.144E+3,0.114E+3,0.18584000E+1,0.95070000E+0 - ,0.26070120E+3,0.144E+3,0.115E+3,0.18584000E+1,0.99470000E+0 - ,0.22064770E+3,0.144E+3,0.116E+3,0.18584000E+1,0.99480000E+0 - ,0.18059160E+3,0.144E+3,0.117E+3,0.18584000E+1,0.99720000E+0 - ,0.34947530E+3,0.144E+3,0.119E+3,0.18584000E+1,0.97670000E+0 - ,0.66876460E+3,0.144E+3,0.120E+3,0.18584000E+1,0.98310000E+0 - ,0.34907020E+3,0.144E+3,0.121E+3,0.18584000E+1,0.18627000E+1 - ,0.33705530E+3,0.144E+3,0.122E+3,0.18584000E+1,0.18299000E+1 - ,0.33035670E+3,0.144E+3,0.123E+3,0.18584000E+1,0.19138000E+1 - ,0.32735530E+3,0.144E+3,0.124E+3,0.18584000E+1,0.18269000E+1 - ,0.30103970E+3,0.144E+3,0.125E+3,0.18584000E+1,0.16406000E+1 - ,0.27865260E+3,0.144E+3,0.126E+3,0.18584000E+1,0.16483000E+1 - ,0.26587520E+3,0.144E+3,0.127E+3,0.18584000E+1,0.17149000E+1 - ,0.25994720E+3,0.144E+3,0.128E+3,0.18584000E+1,0.17937000E+1 - ,0.25694800E+3,0.144E+3,0.129E+3,0.18584000E+1,0.95760000E+0 - ,0.24091240E+3,0.144E+3,0.130E+3,0.18584000E+1,0.19419000E+1 - ,0.39335710E+3,0.144E+3,0.131E+3,0.18584000E+1,0.96010000E+0 - ,0.34538720E+3,0.144E+3,0.132E+3,0.18584000E+1,0.94340000E+0 - ,0.30960350E+3,0.144E+3,0.133E+3,0.18584000E+1,0.98890000E+0 - ,0.28284600E+3,0.144E+3,0.134E+3,0.18584000E+1,0.99010000E+0 - ,0.24934040E+3,0.144E+3,0.135E+3,0.18584000E+1,0.99740000E+0 - ,0.41708310E+3,0.144E+3,0.137E+3,0.18584000E+1,0.97380000E+0 - ,0.81419750E+3,0.144E+3,0.138E+3,0.18584000E+1,0.98010000E+0 - ,0.62130580E+3,0.144E+3,0.139E+3,0.18584000E+1,0.19153000E+1 - ,0.46191410E+3,0.144E+3,0.140E+3,0.18584000E+1,0.19355000E+1 - ,0.46653580E+3,0.144E+3,0.141E+3,0.18584000E+1,0.19545000E+1 - ,0.43510620E+3,0.144E+3,0.142E+3,0.18584000E+1,0.19420000E+1 - ,0.48832640E+3,0.144E+3,0.143E+3,0.18584000E+1,0.16682000E+1 - ,0.37926550E+3,0.144E+3,0.144E+3,0.18584000E+1,0.18584000E+1 - ,0.31102400E+2,0.145E+3,0.100E+1,0.19003000E+1,0.91180000E+0 - ,0.20777600E+2,0.145E+3,0.200E+1,0.19003000E+1,0.00000000E+0 - ,0.48243420E+3,0.145E+3,0.300E+1,0.19003000E+1,0.00000000E+0 - ,0.27741740E+3,0.145E+3,0.400E+1,0.19003000E+1,0.00000000E+0 - ,0.18713270E+3,0.145E+3,0.500E+1,0.19003000E+1,0.00000000E+0 - ,0.12690850E+3,0.145E+3,0.600E+1,0.19003000E+1,0.00000000E+0 - ,0.89165900E+2,0.145E+3,0.700E+1,0.19003000E+1,0.00000000E+0 - ,0.67811400E+2,0.145E+3,0.800E+1,0.19003000E+1,0.00000000E+0 - ,0.51611700E+2,0.145E+3,0.900E+1,0.19003000E+1,0.00000000E+0 - ,0.39876200E+2,0.145E+3,0.100E+2,0.19003000E+1,0.00000000E+0 - ,0.57701810E+3,0.145E+3,0.110E+2,0.19003000E+1,0.00000000E+0 - ,0.44233810E+3,0.145E+3,0.120E+2,0.19003000E+1,0.00000000E+0 - ,0.40769990E+3,0.145E+3,0.130E+2,0.19003000E+1,0.00000000E+0 - ,0.32145940E+3,0.145E+3,0.140E+2,0.19003000E+1,0.00000000E+0 - ,0.25114770E+3,0.145E+3,0.150E+2,0.19003000E+1,0.00000000E+0 - ,0.20890670E+3,0.145E+3,0.160E+2,0.19003000E+1,0.00000000E+0 - ,0.17111870E+3,0.145E+3,0.170E+2,0.19003000E+1,0.00000000E+0 - ,0.14042730E+3,0.145E+3,0.180E+2,0.19003000E+1,0.00000000E+0 - ,0.94851400E+3,0.145E+3,0.190E+2,0.19003000E+1,0.00000000E+0 - ,0.77905470E+3,0.145E+3,0.200E+2,0.19003000E+1,0.00000000E+0 - ,0.64318930E+3,0.145E+3,0.210E+2,0.19003000E+1,0.00000000E+0 - ,0.62118070E+3,0.145E+3,0.220E+2,0.19003000E+1,0.00000000E+0 - ,0.56883480E+3,0.145E+3,0.230E+2,0.19003000E+1,0.00000000E+0 - ,0.44875270E+3,0.145E+3,0.240E+2,0.19003000E+1,0.00000000E+0 - ,0.48979330E+3,0.145E+3,0.250E+2,0.19003000E+1,0.00000000E+0 - ,0.38501530E+3,0.145E+3,0.260E+2,0.19003000E+1,0.00000000E+0 - ,0.40745740E+3,0.145E+3,0.270E+2,0.19003000E+1,0.00000000E+0 - ,0.41967090E+3,0.145E+3,0.280E+2,0.19003000E+1,0.00000000E+0 - ,0.32239880E+3,0.145E+3,0.290E+2,0.19003000E+1,0.00000000E+0 - ,0.33047130E+3,0.145E+3,0.300E+2,0.19003000E+1,0.00000000E+0 - ,0.39105080E+3,0.145E+3,0.310E+2,0.19003000E+1,0.00000000E+0 - ,0.34491000E+3,0.145E+3,0.320E+2,0.19003000E+1,0.00000000E+0 - ,0.29454210E+3,0.145E+3,0.330E+2,0.19003000E+1,0.00000000E+0 - ,0.26467170E+3,0.145E+3,0.340E+2,0.19003000E+1,0.00000000E+0 - ,0.23205800E+3,0.145E+3,0.350E+2,0.19003000E+1,0.00000000E+0 - ,0.20225670E+3,0.145E+3,0.360E+2,0.19003000E+1,0.00000000E+0 - ,0.10633477E+4,0.145E+3,0.370E+2,0.19003000E+1,0.00000000E+0 - ,0.92882550E+3,0.145E+3,0.380E+2,0.19003000E+1,0.00000000E+0 - ,0.81293380E+3,0.145E+3,0.390E+2,0.19003000E+1,0.00000000E+0 - ,0.73049700E+3,0.145E+3,0.400E+2,0.19003000E+1,0.00000000E+0 - ,0.66622590E+3,0.145E+3,0.410E+2,0.19003000E+1,0.00000000E+0 - ,0.51491280E+3,0.145E+3,0.420E+2,0.19003000E+1,0.00000000E+0 - ,0.57424560E+3,0.145E+3,0.430E+2,0.19003000E+1,0.00000000E+0 - ,0.43804260E+3,0.145E+3,0.440E+2,0.19003000E+1,0.00000000E+0 - ,0.47828480E+3,0.145E+3,0.450E+2,0.19003000E+1,0.00000000E+0 - ,0.44362800E+3,0.145E+3,0.460E+2,0.19003000E+1,0.00000000E+0 - ,0.37063780E+3,0.145E+3,0.470E+2,0.19003000E+1,0.00000000E+0 - ,0.39106750E+3,0.145E+3,0.480E+2,0.19003000E+1,0.00000000E+0 - ,0.49033250E+3,0.145E+3,0.490E+2,0.19003000E+1,0.00000000E+0 - ,0.45317940E+3,0.145E+3,0.500E+2,0.19003000E+1,0.00000000E+0 - ,0.40403840E+3,0.145E+3,0.510E+2,0.19003000E+1,0.00000000E+0 - ,0.37513030E+3,0.145E+3,0.520E+2,0.19003000E+1,0.00000000E+0 - ,0.33956200E+3,0.145E+3,0.530E+2,0.19003000E+1,0.00000000E+0 - ,0.30572010E+3,0.145E+3,0.540E+2,0.19003000E+1,0.00000000E+0 - ,0.12958507E+4,0.145E+3,0.550E+2,0.19003000E+1,0.00000000E+0 - ,0.11851747E+4,0.145E+3,0.560E+2,0.19003000E+1,0.00000000E+0 - ,0.10401066E+4,0.145E+3,0.570E+2,0.19003000E+1,0.00000000E+0 - ,0.47759450E+3,0.145E+3,0.580E+2,0.19003000E+1,0.27991000E+1 - ,0.10500763E+4,0.145E+3,0.590E+2,0.19003000E+1,0.00000000E+0 - ,0.10080521E+4,0.145E+3,0.600E+2,0.19003000E+1,0.00000000E+0 - ,0.98268750E+3,0.145E+3,0.610E+2,0.19003000E+1,0.00000000E+0 - ,0.95935980E+3,0.145E+3,0.620E+2,0.19003000E+1,0.00000000E+0 - ,0.93866880E+3,0.145E+3,0.630E+2,0.19003000E+1,0.00000000E+0 - ,0.73813170E+3,0.145E+3,0.640E+2,0.19003000E+1,0.00000000E+0 - ,0.83296700E+3,0.145E+3,0.650E+2,0.19003000E+1,0.00000000E+0 - ,0.80325110E+3,0.145E+3,0.660E+2,0.19003000E+1,0.00000000E+0 - ,0.84631030E+3,0.145E+3,0.670E+2,0.19003000E+1,0.00000000E+0 - ,0.82828260E+3,0.145E+3,0.680E+2,0.19003000E+1,0.00000000E+0 - ,0.81202140E+3,0.145E+3,0.690E+2,0.19003000E+1,0.00000000E+0 - ,0.80250260E+3,0.145E+3,0.700E+2,0.19003000E+1,0.00000000E+0 - ,0.67613200E+3,0.145E+3,0.710E+2,0.19003000E+1,0.00000000E+0 - ,0.66419530E+3,0.145E+3,0.720E+2,0.19003000E+1,0.00000000E+0 - ,0.60624630E+3,0.145E+3,0.730E+2,0.19003000E+1,0.00000000E+0 - ,0.51256560E+3,0.145E+3,0.740E+2,0.19003000E+1,0.00000000E+0 - ,0.52130610E+3,0.145E+3,0.750E+2,0.19003000E+1,0.00000000E+0 - ,0.47268090E+3,0.145E+3,0.760E+2,0.19003000E+1,0.00000000E+0 - ,0.43312920E+3,0.145E+3,0.770E+2,0.19003000E+1,0.00000000E+0 - ,0.36041730E+3,0.145E+3,0.780E+2,0.19003000E+1,0.00000000E+0 - ,0.33697140E+3,0.145E+3,0.790E+2,0.19003000E+1,0.00000000E+0 - ,0.34645260E+3,0.145E+3,0.800E+2,0.19003000E+1,0.00000000E+0 - ,0.50424040E+3,0.145E+3,0.810E+2,0.19003000E+1,0.00000000E+0 - ,0.49256890E+3,0.145E+3,0.820E+2,0.19003000E+1,0.00000000E+0 - ,0.45264510E+3,0.145E+3,0.830E+2,0.19003000E+1,0.00000000E+0 - ,0.43185880E+3,0.145E+3,0.840E+2,0.19003000E+1,0.00000000E+0 - ,0.39887680E+3,0.145E+3,0.850E+2,0.19003000E+1,0.00000000E+0 - ,0.36599140E+3,0.145E+3,0.860E+2,0.19003000E+1,0.00000000E+0 - ,0.12224485E+4,0.145E+3,0.870E+2,0.19003000E+1,0.00000000E+0 - ,0.11715378E+4,0.145E+3,0.880E+2,0.19003000E+1,0.00000000E+0 - ,0.10345633E+4,0.145E+3,0.890E+2,0.19003000E+1,0.00000000E+0 - ,0.92953190E+3,0.145E+3,0.900E+2,0.19003000E+1,0.00000000E+0 - ,0.92366730E+3,0.145E+3,0.910E+2,0.19003000E+1,0.00000000E+0 - ,0.89441350E+3,0.145E+3,0.920E+2,0.19003000E+1,0.00000000E+0 - ,0.92128530E+3,0.145E+3,0.930E+2,0.19003000E+1,0.00000000E+0 - ,0.89206410E+3,0.145E+3,0.940E+2,0.19003000E+1,0.00000000E+0 - ,0.49909000E+2,0.145E+3,0.101E+3,0.19003000E+1,0.00000000E+0 - ,0.16134990E+3,0.145E+3,0.103E+3,0.19003000E+1,0.98650000E+0 - ,0.20595300E+3,0.145E+3,0.104E+3,0.19003000E+1,0.98080000E+0 - ,0.15759490E+3,0.145E+3,0.105E+3,0.19003000E+1,0.97060000E+0 - ,0.11912650E+3,0.145E+3,0.106E+3,0.19003000E+1,0.98680000E+0 - ,0.83222700E+2,0.145E+3,0.107E+3,0.19003000E+1,0.99440000E+0 - ,0.60915900E+2,0.145E+3,0.108E+3,0.19003000E+1,0.99250000E+0 - ,0.42208400E+2,0.145E+3,0.109E+3,0.19003000E+1,0.99820000E+0 - ,0.23614440E+3,0.145E+3,0.111E+3,0.19003000E+1,0.96840000E+0 - ,0.36507050E+3,0.145E+3,0.112E+3,0.19003000E+1,0.96280000E+0 - ,0.36958140E+3,0.145E+3,0.113E+3,0.19003000E+1,0.96480000E+0 - ,0.29723390E+3,0.145E+3,0.114E+3,0.19003000E+1,0.95070000E+0 - ,0.24384390E+3,0.145E+3,0.115E+3,0.19003000E+1,0.99470000E+0 - ,0.20662580E+3,0.145E+3,0.116E+3,0.19003000E+1,0.99480000E+0 - ,0.16935840E+3,0.145E+3,0.117E+3,0.19003000E+1,0.99720000E+0 - ,0.32659470E+3,0.145E+3,0.119E+3,0.19003000E+1,0.97670000E+0 - ,0.62428500E+3,0.145E+3,0.120E+3,0.19003000E+1,0.98310000E+0 - ,0.32625030E+3,0.145E+3,0.121E+3,0.19003000E+1,0.18627000E+1 - ,0.31509820E+3,0.145E+3,0.122E+3,0.19003000E+1,0.18299000E+1 - ,0.30884820E+3,0.145E+3,0.123E+3,0.19003000E+1,0.19138000E+1 - ,0.30603400E+3,0.145E+3,0.124E+3,0.19003000E+1,0.18269000E+1 - ,0.28151340E+3,0.145E+3,0.125E+3,0.19003000E+1,0.16406000E+1 - ,0.26065670E+3,0.145E+3,0.126E+3,0.19003000E+1,0.16483000E+1 - ,0.24873880E+3,0.145E+3,0.127E+3,0.19003000E+1,0.17149000E+1 - ,0.24319090E+3,0.145E+3,0.128E+3,0.19003000E+1,0.17937000E+1 - ,0.24032600E+3,0.145E+3,0.129E+3,0.19003000E+1,0.95760000E+0 - ,0.22543980E+3,0.145E+3,0.130E+3,0.19003000E+1,0.19419000E+1 - ,0.36731970E+3,0.145E+3,0.131E+3,0.19003000E+1,0.96010000E+0 - ,0.32278160E+3,0.145E+3,0.132E+3,0.19003000E+1,0.94340000E+0 - ,0.28959340E+3,0.145E+3,0.133E+3,0.19003000E+1,0.98890000E+0 - ,0.26478150E+3,0.145E+3,0.134E+3,0.19003000E+1,0.99010000E+0 - ,0.23366080E+3,0.145E+3,0.135E+3,0.19003000E+1,0.99740000E+0 - ,0.38991830E+3,0.145E+3,0.137E+3,0.19003000E+1,0.97380000E+0 - ,0.76024370E+3,0.145E+3,0.138E+3,0.19003000E+1,0.98010000E+0 - ,0.58041450E+3,0.145E+3,0.139E+3,0.19003000E+1,0.19153000E+1 - ,0.43182880E+3,0.145E+3,0.140E+3,0.19003000E+1,0.19355000E+1 - ,0.43614400E+3,0.145E+3,0.141E+3,0.19003000E+1,0.19545000E+1 - ,0.40693380E+3,0.145E+3,0.142E+3,0.19003000E+1,0.19420000E+1 - ,0.45656180E+3,0.145E+3,0.143E+3,0.19003000E+1,0.16682000E+1 - ,0.35492820E+3,0.145E+3,0.144E+3,0.19003000E+1,0.18584000E+1 - ,0.33224250E+3,0.145E+3,0.145E+3,0.19003000E+1,0.19003000E+1 - ,0.28966100E+2,0.146E+3,0.100E+1,0.18630000E+1,0.91180000E+0 - ,0.19468900E+2,0.146E+3,0.200E+1,0.18630000E+1,0.00000000E+0 - ,0.44391060E+3,0.146E+3,0.300E+1,0.18630000E+1,0.00000000E+0 - ,0.25623270E+3,0.146E+3,0.400E+1,0.18630000E+1,0.00000000E+0 - ,0.17343600E+3,0.146E+3,0.500E+1,0.18630000E+1,0.00000000E+0 - ,0.11801370E+3,0.146E+3,0.600E+1,0.18630000E+1,0.00000000E+0 - ,0.83171000E+2,0.146E+3,0.700E+1,0.18630000E+1,0.00000000E+0 - ,0.63412500E+2,0.146E+3,0.800E+1,0.18630000E+1,0.00000000E+0 - ,0.48382400E+2,0.146E+3,0.900E+1,0.18630000E+1,0.00000000E+0 - ,0.37464700E+2,0.146E+3,0.100E+2,0.18630000E+1,0.00000000E+0 - ,0.53116760E+3,0.146E+3,0.110E+2,0.18630000E+1,0.00000000E+0 - ,0.40830220E+3,0.146E+3,0.120E+2,0.18630000E+1,0.00000000E+0 - ,0.37687760E+3,0.146E+3,0.130E+2,0.18630000E+1,0.00000000E+0 - ,0.29781740E+3,0.146E+3,0.140E+2,0.18630000E+1,0.00000000E+0 - ,0.23321060E+3,0.146E+3,0.150E+2,0.18630000E+1,0.00000000E+0 - ,0.19433730E+3,0.146E+3,0.160E+2,0.18630000E+1,0.00000000E+0 - ,0.15949140E+3,0.146E+3,0.170E+2,0.18630000E+1,0.00000000E+0 - ,0.13113380E+3,0.146E+3,0.180E+2,0.18630000E+1,0.00000000E+0 - ,0.87329840E+3,0.146E+3,0.190E+2,0.18630000E+1,0.00000000E+0 - ,0.71849830E+3,0.146E+3,0.200E+2,0.18630000E+1,0.00000000E+0 - ,0.59349940E+3,0.146E+3,0.210E+2,0.18630000E+1,0.00000000E+0 - ,0.57359720E+3,0.146E+3,0.220E+2,0.18630000E+1,0.00000000E+0 - ,0.52547320E+3,0.146E+3,0.230E+2,0.18630000E+1,0.00000000E+0 - ,0.41479180E+3,0.146E+3,0.240E+2,0.18630000E+1,0.00000000E+0 - ,0.45273530E+3,0.146E+3,0.250E+2,0.18630000E+1,0.00000000E+0 - ,0.35613440E+3,0.146E+3,0.260E+2,0.18630000E+1,0.00000000E+0 - ,0.37699280E+3,0.146E+3,0.270E+2,0.18630000E+1,0.00000000E+0 - ,0.38812000E+3,0.146E+3,0.280E+2,0.18630000E+1,0.00000000E+0 - ,0.29838940E+3,0.146E+3,0.290E+2,0.18630000E+1,0.00000000E+0 - ,0.30606330E+3,0.146E+3,0.300E+2,0.18630000E+1,0.00000000E+0 - ,0.36187800E+3,0.146E+3,0.310E+2,0.18630000E+1,0.00000000E+0 - ,0.31969460E+3,0.146E+3,0.320E+2,0.18630000E+1,0.00000000E+0 - ,0.27350100E+3,0.146E+3,0.330E+2,0.18630000E+1,0.00000000E+0 - ,0.24609210E+3,0.146E+3,0.340E+2,0.18630000E+1,0.00000000E+0 - ,0.21609450E+3,0.146E+3,0.350E+2,0.18630000E+1,0.00000000E+0 - ,0.18863390E+3,0.146E+3,0.360E+2,0.18630000E+1,0.00000000E+0 - ,0.97940320E+3,0.146E+3,0.370E+2,0.18630000E+1,0.00000000E+0 - ,0.85671690E+3,0.146E+3,0.380E+2,0.18630000E+1,0.00000000E+0 - ,0.75059330E+3,0.146E+3,0.390E+2,0.18630000E+1,0.00000000E+0 - ,0.67499290E+3,0.146E+3,0.400E+2,0.18630000E+1,0.00000000E+0 - ,0.61597590E+3,0.146E+3,0.410E+2,0.18630000E+1,0.00000000E+0 - ,0.47670900E+3,0.146E+3,0.420E+2,0.18630000E+1,0.00000000E+0 - ,0.53137000E+3,0.146E+3,0.430E+2,0.18630000E+1,0.00000000E+0 - ,0.40593980E+3,0.146E+3,0.440E+2,0.18630000E+1,0.00000000E+0 - ,0.44306590E+3,0.146E+3,0.450E+2,0.18630000E+1,0.00000000E+0 - ,0.41113610E+3,0.146E+3,0.460E+2,0.18630000E+1,0.00000000E+0 - ,0.34367070E+3,0.146E+3,0.470E+2,0.18630000E+1,0.00000000E+0 - ,0.36264320E+3,0.146E+3,0.480E+2,0.18630000E+1,0.00000000E+0 - ,0.45405760E+3,0.146E+3,0.490E+2,0.18630000E+1,0.00000000E+0 - ,0.42012680E+3,0.146E+3,0.500E+2,0.18630000E+1,0.00000000E+0 - ,0.37509950E+3,0.146E+3,0.510E+2,0.18630000E+1,0.00000000E+0 - ,0.34860740E+3,0.146E+3,0.520E+2,0.18630000E+1,0.00000000E+0 - ,0.31592880E+3,0.146E+3,0.530E+2,0.18630000E+1,0.00000000E+0 - ,0.28479640E+3,0.146E+3,0.540E+2,0.18630000E+1,0.00000000E+0 - ,0.11937040E+4,0.146E+3,0.550E+2,0.18630000E+1,0.00000000E+0 - ,0.10930044E+4,0.146E+3,0.560E+2,0.18630000E+1,0.00000000E+0 - ,0.96013460E+3,0.146E+3,0.570E+2,0.18630000E+1,0.00000000E+0 - ,0.44336290E+3,0.146E+3,0.580E+2,0.18630000E+1,0.27991000E+1 - ,0.96887580E+3,0.146E+3,0.590E+2,0.18630000E+1,0.00000000E+0 - ,0.93022500E+3,0.146E+3,0.600E+2,0.18630000E+1,0.00000000E+0 - ,0.90685110E+3,0.146E+3,0.610E+2,0.18630000E+1,0.00000000E+0 - ,0.88534770E+3,0.146E+3,0.620E+2,0.18630000E+1,0.00000000E+0 - ,0.86627480E+3,0.146E+3,0.630E+2,0.18630000E+1,0.00000000E+0 - ,0.68220730E+3,0.146E+3,0.640E+2,0.18630000E+1,0.00000000E+0 - ,0.76879040E+3,0.146E+3,0.650E+2,0.18630000E+1,0.00000000E+0 - ,0.74151490E+3,0.146E+3,0.660E+2,0.18630000E+1,0.00000000E+0 - ,0.78120400E+3,0.146E+3,0.670E+2,0.18630000E+1,0.00000000E+0 - ,0.76457050E+3,0.146E+3,0.680E+2,0.18630000E+1,0.00000000E+0 - ,0.74957790E+3,0.146E+3,0.690E+2,0.18630000E+1,0.00000000E+0 - ,0.74073920E+3,0.146E+3,0.700E+2,0.18630000E+1,0.00000000E+0 - ,0.62471570E+3,0.146E+3,0.710E+2,0.18630000E+1,0.00000000E+0 - ,0.61425310E+3,0.146E+3,0.720E+2,0.18630000E+1,0.00000000E+0 - ,0.56115170E+3,0.146E+3,0.730E+2,0.18630000E+1,0.00000000E+0 - ,0.47494930E+3,0.146E+3,0.740E+2,0.18630000E+1,0.00000000E+0 - ,0.48315690E+3,0.146E+3,0.750E+2,0.18630000E+1,0.00000000E+0 - ,0.43846770E+3,0.146E+3,0.760E+2,0.18630000E+1,0.00000000E+0 - ,0.40208340E+3,0.146E+3,0.770E+2,0.18630000E+1,0.00000000E+0 - ,0.33498540E+3,0.146E+3,0.780E+2,0.18630000E+1,0.00000000E+0 - ,0.31334830E+3,0.146E+3,0.790E+2,0.18630000E+1,0.00000000E+0 - ,0.32218840E+3,0.146E+3,0.800E+2,0.18630000E+1,0.00000000E+0 - ,0.46735710E+3,0.146E+3,0.810E+2,0.18630000E+1,0.00000000E+0 - ,0.45686740E+3,0.146E+3,0.820E+2,0.18630000E+1,0.00000000E+0 - ,0.42032740E+3,0.146E+3,0.830E+2,0.18630000E+1,0.00000000E+0 - ,0.40133490E+3,0.146E+3,0.840E+2,0.18630000E+1,0.00000000E+0 - ,0.37107280E+3,0.146E+3,0.850E+2,0.18630000E+1,0.00000000E+0 - ,0.34084580E+3,0.146E+3,0.860E+2,0.18630000E+1,0.00000000E+0 - ,0.11269549E+4,0.146E+3,0.870E+2,0.18630000E+1,0.00000000E+0 - ,0.10810405E+4,0.146E+3,0.880E+2,0.18630000E+1,0.00000000E+0 - ,0.95553590E+3,0.146E+3,0.890E+2,0.18630000E+1,0.00000000E+0 - ,0.85969500E+3,0.146E+3,0.900E+2,0.18630000E+1,0.00000000E+0 - ,0.85393730E+3,0.146E+3,0.910E+2,0.18630000E+1,0.00000000E+0 - ,0.82694450E+3,0.146E+3,0.920E+2,0.18630000E+1,0.00000000E+0 - ,0.85119160E+3,0.146E+3,0.930E+2,0.18630000E+1,0.00000000E+0 - ,0.82429470E+3,0.146E+3,0.940E+2,0.18630000E+1,0.00000000E+0 - ,0.46348900E+2,0.146E+3,0.101E+3,0.18630000E+1,0.00000000E+0 - ,0.14912090E+3,0.146E+3,0.103E+3,0.18630000E+1,0.98650000E+0 - ,0.19048260E+3,0.146E+3,0.104E+3,0.18630000E+1,0.98080000E+0 - ,0.14620200E+3,0.146E+3,0.105E+3,0.18630000E+1,0.97060000E+0 - ,0.11079460E+3,0.146E+3,0.106E+3,0.18630000E+1,0.98680000E+0 - ,0.77647900E+2,0.146E+3,0.107E+3,0.18630000E+1,0.99440000E+0 - ,0.57004900E+2,0.146E+3,0.108E+3,0.18630000E+1,0.99250000E+0 - ,0.39663600E+2,0.146E+3,0.109E+3,0.18630000E+1,0.99820000E+0 - ,0.21823330E+3,0.146E+3,0.111E+3,0.18630000E+1,0.96840000E+0 - ,0.33722560E+3,0.146E+3,0.112E+3,0.18630000E+1,0.96280000E+0 - ,0.34179460E+3,0.146E+3,0.113E+3,0.18630000E+1,0.96480000E+0 - ,0.27549250E+3,0.146E+3,0.114E+3,0.18630000E+1,0.95070000E+0 - ,0.22646050E+3,0.146E+3,0.115E+3,0.18630000E+1,0.99470000E+0 - ,0.19221720E+3,0.146E+3,0.116E+3,0.18630000E+1,0.99480000E+0 - ,0.15785240E+3,0.146E+3,0.117E+3,0.18630000E+1,0.99720000E+0 - ,0.30246350E+3,0.146E+3,0.119E+3,0.18630000E+1,0.97670000E+0 - ,0.57613740E+3,0.146E+3,0.120E+3,0.18630000E+1,0.98310000E+0 - ,0.30248980E+3,0.146E+3,0.121E+3,0.18630000E+1,0.18627000E+1 - ,0.29221350E+3,0.146E+3,0.122E+3,0.18630000E+1,0.18299000E+1 - ,0.28642780E+3,0.146E+3,0.123E+3,0.18630000E+1,0.19138000E+1 - ,0.28377850E+3,0.146E+3,0.124E+3,0.18630000E+1,0.18269000E+1 - ,0.26126350E+3,0.146E+3,0.125E+3,0.18630000E+1,0.16406000E+1 - ,0.24201470E+3,0.146E+3,0.126E+3,0.18630000E+1,0.16483000E+1 - ,0.23097880E+3,0.146E+3,0.127E+3,0.18630000E+1,0.17149000E+1 - ,0.22581650E+3,0.146E+3,0.128E+3,0.18630000E+1,0.17937000E+1 - ,0.22301540E+3,0.146E+3,0.129E+3,0.18630000E+1,0.95760000E+0 - ,0.20945460E+3,0.146E+3,0.130E+3,0.18630000E+1,0.19419000E+1 - ,0.34006750E+3,0.146E+3,0.131E+3,0.18630000E+1,0.96010000E+0 - ,0.29932800E+3,0.146E+3,0.132E+3,0.18630000E+1,0.94340000E+0 - ,0.26894270E+3,0.146E+3,0.133E+3,0.18630000E+1,0.98890000E+0 - ,0.24619370E+3,0.146E+3,0.134E+3,0.18630000E+1,0.99010000E+0 - ,0.21757380E+3,0.146E+3,0.135E+3,0.18630000E+1,0.99740000E+0 - ,0.36130470E+3,0.146E+3,0.137E+3,0.18630000E+1,0.97380000E+0 - ,0.70165500E+3,0.146E+3,0.138E+3,0.18630000E+1,0.98010000E+0 - ,0.53685660E+3,0.146E+3,0.139E+3,0.18630000E+1,0.19153000E+1 - ,0.40042090E+3,0.146E+3,0.140E+3,0.18630000E+1,0.19355000E+1 - ,0.40443000E+3,0.146E+3,0.141E+3,0.18630000E+1,0.19545000E+1 - ,0.37755350E+3,0.146E+3,0.142E+3,0.18630000E+1,0.19420000E+1 - ,0.42312790E+3,0.146E+3,0.143E+3,0.18630000E+1,0.16682000E+1 - ,0.32968260E+3,0.146E+3,0.144E+3,0.18630000E+1,0.18584000E+1 - ,0.30870590E+3,0.146E+3,0.145E+3,0.18630000E+1,0.19003000E+1 - ,0.28695190E+3,0.146E+3,0.146E+3,0.18630000E+1,0.18630000E+1 - ,0.27951800E+2,0.147E+3,0.100E+1,0.96790000E+0,0.91180000E+0 - ,0.18773100E+2,0.147E+3,0.200E+1,0.96790000E+0,0.00000000E+0 - ,0.43260780E+3,0.147E+3,0.300E+1,0.96790000E+0,0.00000000E+0 - ,0.24865730E+3,0.147E+3,0.400E+1,0.96790000E+0,0.00000000E+0 - ,0.16783500E+3,0.147E+3,0.500E+1,0.96790000E+0,0.00000000E+0 - ,0.11399930E+3,0.147E+3,0.600E+1,0.96790000E+0,0.00000000E+0 - ,0.80266300E+2,0.147E+3,0.700E+1,0.96790000E+0,0.00000000E+0 - ,0.61174800E+2,0.147E+3,0.800E+1,0.96790000E+0,0.00000000E+0 - ,0.46672600E+2,0.147E+3,0.900E+1,0.96790000E+0,0.00000000E+0 - ,0.36148600E+2,0.147E+3,0.100E+2,0.96790000E+0,0.00000000E+0 - ,0.51756800E+3,0.147E+3,0.110E+2,0.96790000E+0,0.00000000E+0 - ,0.39661250E+3,0.147E+3,0.120E+2,0.96790000E+0,0.00000000E+0 - ,0.36552690E+3,0.147E+3,0.130E+2,0.96790000E+0,0.00000000E+0 - ,0.28828630E+3,0.147E+3,0.140E+2,0.96790000E+0,0.00000000E+0 - ,0.22539450E+3,0.147E+3,0.150E+2,0.96790000E+0,0.00000000E+0 - ,0.18765970E+3,0.147E+3,0.160E+2,0.96790000E+0,0.00000000E+0 - ,0.15390320E+3,0.147E+3,0.170E+2,0.96790000E+0,0.00000000E+0 - ,0.12648250E+3,0.147E+3,0.180E+2,0.96790000E+0,0.00000000E+0 - ,0.85100880E+3,0.147E+3,0.190E+2,0.96790000E+0,0.00000000E+0 - ,0.69886180E+3,0.147E+3,0.200E+2,0.96790000E+0,0.00000000E+0 - ,0.57696360E+3,0.147E+3,0.210E+2,0.96790000E+0,0.00000000E+0 - ,0.55728800E+3,0.147E+3,0.220E+2,0.96790000E+0,0.00000000E+0 - ,0.51036440E+3,0.147E+3,0.230E+2,0.96790000E+0,0.00000000E+0 - ,0.40283830E+3,0.147E+3,0.240E+2,0.96790000E+0,0.00000000E+0 - ,0.43950990E+3,0.147E+3,0.250E+2,0.96790000E+0,0.00000000E+0 - ,0.34569950E+3,0.147E+3,0.260E+2,0.96790000E+0,0.00000000E+0 - ,0.36569250E+3,0.147E+3,0.270E+2,0.96790000E+0,0.00000000E+0 - ,0.37662810E+3,0.147E+3,0.280E+2,0.96790000E+0,0.00000000E+0 - ,0.28955800E+3,0.147E+3,0.290E+2,0.96790000E+0,0.00000000E+0 - ,0.29667280E+3,0.147E+3,0.300E+2,0.96790000E+0,0.00000000E+0 - ,0.35080100E+3,0.147E+3,0.310E+2,0.96790000E+0,0.00000000E+0 - ,0.30945430E+3,0.147E+3,0.320E+2,0.96790000E+0,0.00000000E+0 - ,0.26439570E+3,0.147E+3,0.330E+2,0.96790000E+0,0.00000000E+0 - ,0.23772170E+3,0.147E+3,0.340E+2,0.96790000E+0,0.00000000E+0 - ,0.20860440E+3,0.147E+3,0.350E+2,0.96790000E+0,0.00000000E+0 - ,0.18200160E+3,0.147E+3,0.360E+2,0.96790000E+0,0.00000000E+0 - ,0.95413200E+3,0.147E+3,0.370E+2,0.96790000E+0,0.00000000E+0 - ,0.83331680E+3,0.147E+3,0.380E+2,0.96790000E+0,0.00000000E+0 - ,0.72933160E+3,0.147E+3,0.390E+2,0.96790000E+0,0.00000000E+0 - ,0.65543290E+3,0.147E+3,0.400E+2,0.96790000E+0,0.00000000E+0 - ,0.59785280E+3,0.147E+3,0.410E+2,0.96790000E+0,0.00000000E+0 - ,0.46233830E+3,0.147E+3,0.420E+2,0.96790000E+0,0.00000000E+0 - ,0.51549530E+3,0.147E+3,0.430E+2,0.96790000E+0,0.00000000E+0 - ,0.39350880E+3,0.147E+3,0.440E+2,0.96790000E+0,0.00000000E+0 - ,0.42951430E+3,0.147E+3,0.450E+2,0.96790000E+0,0.00000000E+0 - ,0.39846620E+3,0.147E+3,0.460E+2,0.96790000E+0,0.00000000E+0 - ,0.33315830E+3,0.147E+3,0.470E+2,0.96790000E+0,0.00000000E+0 - ,0.35137120E+3,0.147E+3,0.480E+2,0.96790000E+0,0.00000000E+0 - ,0.44027330E+3,0.147E+3,0.490E+2,0.96790000E+0,0.00000000E+0 - ,0.40690290E+3,0.147E+3,0.500E+2,0.96790000E+0,0.00000000E+0 - ,0.36287400E+3,0.147E+3,0.510E+2,0.96790000E+0,0.00000000E+0 - ,0.33701310E+3,0.147E+3,0.520E+2,0.96790000E+0,0.00000000E+0 - ,0.30521220E+3,0.147E+3,0.530E+2,0.96790000E+0,0.00000000E+0 - ,0.27497440E+3,0.147E+3,0.540E+2,0.96790000E+0,0.00000000E+0 - ,0.11625520E+4,0.147E+3,0.550E+2,0.96790000E+0,0.00000000E+0 - ,0.10633544E+4,0.147E+3,0.560E+2,0.96790000E+0,0.00000000E+0 - ,0.93316800E+3,0.147E+3,0.570E+2,0.96790000E+0,0.00000000E+0 - ,0.42899800E+3,0.147E+3,0.580E+2,0.96790000E+0,0.27991000E+1 - ,0.94235470E+3,0.147E+3,0.590E+2,0.96790000E+0,0.00000000E+0 - ,0.90466880E+3,0.147E+3,0.600E+2,0.96790000E+0,0.00000000E+0 - ,0.88190710E+3,0.147E+3,0.610E+2,0.96790000E+0,0.00000000E+0 - ,0.86096980E+3,0.147E+3,0.620E+2,0.96790000E+0,0.00000000E+0 - ,0.84239660E+3,0.147E+3,0.630E+2,0.96790000E+0,0.00000000E+0 - ,0.66260290E+3,0.147E+3,0.640E+2,0.96790000E+0,0.00000000E+0 - ,0.74772470E+3,0.147E+3,0.650E+2,0.96790000E+0,0.00000000E+0 - ,0.72101030E+3,0.147E+3,0.660E+2,0.96790000E+0,0.00000000E+0 - ,0.75950840E+3,0.147E+3,0.670E+2,0.96790000E+0,0.00000000E+0 - ,0.74332210E+3,0.147E+3,0.680E+2,0.96790000E+0,0.00000000E+0 - ,0.72872030E+3,0.147E+3,0.690E+2,0.96790000E+0,0.00000000E+0 - ,0.72016540E+3,0.147E+3,0.700E+2,0.96790000E+0,0.00000000E+0 - ,0.60683130E+3,0.147E+3,0.710E+2,0.96790000E+0,0.00000000E+0 - ,0.59598520E+3,0.147E+3,0.720E+2,0.96790000E+0,0.00000000E+0 - ,0.54409850E+3,0.147E+3,0.730E+2,0.96790000E+0,0.00000000E+0 - ,0.46026700E+3,0.147E+3,0.740E+2,0.96790000E+0,0.00000000E+0 - ,0.46810840E+3,0.147E+3,0.750E+2,0.96790000E+0,0.00000000E+0 - ,0.42458230E+3,0.147E+3,0.760E+2,0.96790000E+0,0.00000000E+0 - ,0.38918700E+3,0.147E+3,0.770E+2,0.96790000E+0,0.00000000E+0 - ,0.32412400E+3,0.147E+3,0.780E+2,0.96790000E+0,0.00000000E+0 - ,0.30315550E+3,0.147E+3,0.790E+2,0.96790000E+0,0.00000000E+0 - ,0.31163540E+3,0.147E+3,0.800E+2,0.96790000E+0,0.00000000E+0 - ,0.45304550E+3,0.147E+3,0.810E+2,0.96790000E+0,0.00000000E+0 - ,0.44250950E+3,0.147E+3,0.820E+2,0.96790000E+0,0.00000000E+0 - ,0.40670840E+3,0.147E+3,0.830E+2,0.96790000E+0,0.00000000E+0 - ,0.38810010E+3,0.147E+3,0.840E+2,0.96790000E+0,0.00000000E+0 - ,0.35859540E+3,0.147E+3,0.850E+2,0.96790000E+0,0.00000000E+0 - ,0.32919900E+3,0.147E+3,0.860E+2,0.96790000E+0,0.00000000E+0 - ,0.10968369E+4,0.147E+3,0.870E+2,0.96790000E+0,0.00000000E+0 - ,0.10511515E+4,0.147E+3,0.880E+2,0.96790000E+0,0.00000000E+0 - ,0.92833020E+3,0.147E+3,0.890E+2,0.96790000E+0,0.00000000E+0 - ,0.83431790E+3,0.147E+3,0.900E+2,0.96790000E+0,0.00000000E+0 - ,0.82919230E+3,0.147E+3,0.910E+2,0.96790000E+0,0.00000000E+0 - ,0.80298090E+3,0.147E+3,0.920E+2,0.96790000E+0,0.00000000E+0 - ,0.82716130E+3,0.147E+3,0.930E+2,0.96790000E+0,0.00000000E+0 - ,0.80093320E+3,0.147E+3,0.940E+2,0.96790000E+0,0.00000000E+0 - ,0.44783500E+2,0.147E+3,0.101E+3,0.96790000E+0,0.00000000E+0 - ,0.14465630E+3,0.147E+3,0.103E+3,0.96790000E+0,0.98650000E+0 - ,0.18465300E+3,0.147E+3,0.104E+3,0.96790000E+0,0.98080000E+0 - ,0.14140600E+3,0.147E+3,0.105E+3,0.96790000E+0,0.97060000E+0 - ,0.10702860E+3,0.147E+3,0.106E+3,0.96790000E+0,0.98680000E+0 - ,0.74935400E+2,0.147E+3,0.107E+3,0.96790000E+0,0.99440000E+0 - ,0.54985600E+2,0.147E+3,0.108E+3,0.96790000E+0,0.99250000E+0 - ,0.38253900E+2,0.147E+3,0.109E+3,0.96790000E+0,0.99820000E+0 - ,0.21184190E+3,0.147E+3,0.111E+3,0.96790000E+0,0.96840000E+0 - ,0.32735090E+3,0.147E+3,0.112E+3,0.96790000E+0,0.96280000E+0 - ,0.33138320E+3,0.147E+3,0.113E+3,0.96790000E+0,0.96480000E+0 - ,0.26660080E+3,0.147E+3,0.114E+3,0.96790000E+0,0.95070000E+0 - ,0.21886170E+3,0.147E+3,0.115E+3,0.96790000E+0,0.99470000E+0 - ,0.18561970E+3,0.147E+3,0.116E+3,0.96790000E+0,0.99480000E+0 - ,0.15232700E+3,0.147E+3,0.117E+3,0.96790000E+0,0.99720000E+0 - ,0.29329110E+3,0.147E+3,0.119E+3,0.96790000E+0,0.97670000E+0 - ,0.56012980E+3,0.147E+3,0.120E+3,0.96790000E+0,0.98310000E+0 - ,0.29290630E+3,0.147E+3,0.121E+3,0.96790000E+0,0.18627000E+1 - ,0.28293320E+3,0.147E+3,0.122E+3,0.96790000E+0,0.18299000E+1 - ,0.27735250E+3,0.147E+3,0.123E+3,0.96790000E+0,0.19138000E+1 - ,0.27484520E+3,0.147E+3,0.124E+3,0.96790000E+0,0.18269000E+1 - ,0.25282980E+3,0.147E+3,0.125E+3,0.96790000E+0,0.16406000E+1 - ,0.23415110E+3,0.147E+3,0.126E+3,0.96790000E+0,0.16483000E+1 - ,0.22348050E+3,0.147E+3,0.127E+3,0.96790000E+0,0.17149000E+1 - ,0.21850750E+3,0.147E+3,0.128E+3,0.96790000E+0,0.17937000E+1 - ,0.21595810E+3,0.147E+3,0.129E+3,0.96790000E+0,0.95760000E+0 - ,0.20256850E+3,0.147E+3,0.130E+3,0.96790000E+0,0.19419000E+1 - ,0.32953870E+3,0.147E+3,0.131E+3,0.96790000E+0,0.96010000E+0 - ,0.28964110E+3,0.147E+3,0.132E+3,0.96790000E+0,0.94340000E+0 - ,0.25997060E+3,0.147E+3,0.133E+3,0.96790000E+0,0.98890000E+0 - ,0.23782380E+3,0.147E+3,0.134E+3,0.96790000E+0,0.99010000E+0 - ,0.21004110E+3,0.147E+3,0.135E+3,0.96790000E+0,0.99740000E+0 - ,0.35022950E+3,0.147E+3,0.137E+3,0.96790000E+0,0.97380000E+0 - ,0.68218170E+3,0.147E+3,0.138E+3,0.96790000E+0,0.98010000E+0 - ,0.52087240E+3,0.147E+3,0.139E+3,0.96790000E+0,0.19153000E+1 - ,0.38773360E+3,0.147E+3,0.140E+3,0.96790000E+0,0.19355000E+1 - ,0.39166370E+3,0.147E+3,0.141E+3,0.96790000E+0,0.19545000E+1 - ,0.36552610E+3,0.147E+3,0.142E+3,0.96790000E+0,0.19420000E+1 - ,0.41006670E+3,0.147E+3,0.143E+3,0.96790000E+0,0.16682000E+1 - ,0.31896650E+3,0.147E+3,0.144E+3,0.96790000E+0,0.18584000E+1 - ,0.29866780E+3,0.147E+3,0.145E+3,0.96790000E+0,0.19003000E+1 - ,0.27760230E+3,0.147E+3,0.146E+3,0.96790000E+0,0.18630000E+1 - ,0.26861300E+3,0.147E+3,0.147E+3,0.96790000E+0,0.96790000E+0 - ,0.27928100E+2,0.148E+3,0.100E+1,0.19539000E+1,0.91180000E+0 - ,0.18860700E+2,0.148E+3,0.200E+1,0.19539000E+1,0.00000000E+0 - ,0.40844290E+3,0.148E+3,0.300E+1,0.19539000E+1,0.00000000E+0 - ,0.24209500E+3,0.148E+3,0.400E+1,0.19539000E+1,0.00000000E+0 - ,0.16565870E+3,0.148E+3,0.500E+1,0.19539000E+1,0.00000000E+0 - ,0.11343690E+3,0.148E+3,0.600E+1,0.19539000E+1,0.00000000E+0 - ,0.80249200E+2,0.148E+3,0.700E+1,0.19539000E+1,0.00000000E+0 - ,0.61323400E+2,0.148E+3,0.800E+1,0.19539000E+1,0.00000000E+0 - ,0.46869200E+2,0.148E+3,0.900E+1,0.19539000E+1,0.00000000E+0 - ,0.36340100E+2,0.148E+3,0.100E+2,0.19539000E+1,0.00000000E+0 - ,0.48951290E+3,0.148E+3,0.110E+2,0.19539000E+1,0.00000000E+0 - ,0.38417280E+3,0.148E+3,0.120E+2,0.19539000E+1,0.00000000E+0 - ,0.35686540E+3,0.148E+3,0.130E+2,0.19539000E+1,0.00000000E+0 - ,0.28421390E+3,0.148E+3,0.140E+2,0.19539000E+1,0.00000000E+0 - ,0.22377830E+3,0.148E+3,0.150E+2,0.19539000E+1,0.00000000E+0 - ,0.18701630E+3,0.148E+3,0.160E+2,0.19539000E+1,0.00000000E+0 - ,0.15385920E+3,0.148E+3,0.170E+2,0.19539000E+1,0.00000000E+0 - ,0.12673560E+3,0.148E+3,0.180E+2,0.19539000E+1,0.00000000E+0 - ,0.80025930E+3,0.148E+3,0.190E+2,0.19539000E+1,0.00000000E+0 - ,0.67026330E+3,0.148E+3,0.200E+2,0.19539000E+1,0.00000000E+0 - ,0.55566790E+3,0.148E+3,0.210E+2,0.19539000E+1,0.00000000E+0 - ,0.53855020E+3,0.148E+3,0.220E+2,0.19539000E+1,0.00000000E+0 - ,0.49422370E+3,0.148E+3,0.230E+2,0.19539000E+1,0.00000000E+0 - ,0.38999530E+3,0.148E+3,0.240E+2,0.19539000E+1,0.00000000E+0 - ,0.42685790E+3,0.148E+3,0.250E+2,0.19539000E+1,0.00000000E+0 - ,0.33576420E+3,0.148E+3,0.260E+2,0.19539000E+1,0.00000000E+0 - ,0.35691720E+3,0.148E+3,0.270E+2,0.19539000E+1,0.00000000E+0 - ,0.36686680E+3,0.148E+3,0.280E+2,0.19539000E+1,0.00000000E+0 - ,0.28186750E+3,0.148E+3,0.290E+2,0.19539000E+1,0.00000000E+0 - ,0.29078950E+3,0.148E+3,0.300E+2,0.19539000E+1,0.00000000E+0 - ,0.34329430E+3,0.148E+3,0.310E+2,0.19539000E+1,0.00000000E+0 - ,0.30514680E+3,0.148E+3,0.320E+2,0.19539000E+1,0.00000000E+0 - ,0.26228400E+3,0.148E+3,0.330E+2,0.19539000E+1,0.00000000E+0 - ,0.23657790E+3,0.148E+3,0.340E+2,0.19539000E+1,0.00000000E+0 - ,0.20821130E+3,0.148E+3,0.350E+2,0.19539000E+1,0.00000000E+0 - ,0.18208670E+3,0.148E+3,0.360E+2,0.19539000E+1,0.00000000E+0 - ,0.89853420E+3,0.148E+3,0.370E+2,0.19539000E+1,0.00000000E+0 - ,0.79845280E+3,0.148E+3,0.380E+2,0.19539000E+1,0.00000000E+0 - ,0.70379920E+3,0.148E+3,0.390E+2,0.19539000E+1,0.00000000E+0 - ,0.63513700E+3,0.148E+3,0.400E+2,0.19539000E+1,0.00000000E+0 - ,0.58084120E+3,0.148E+3,0.410E+2,0.19539000E+1,0.00000000E+0 - ,0.45097760E+3,0.148E+3,0.420E+2,0.19539000E+1,0.00000000E+0 - ,0.50211680E+3,0.148E+3,0.430E+2,0.19539000E+1,0.00000000E+0 - ,0.38494360E+3,0.148E+3,0.440E+2,0.19539000E+1,0.00000000E+0 - ,0.42037460E+3,0.148E+3,0.450E+2,0.19539000E+1,0.00000000E+0 - ,0.39057700E+3,0.148E+3,0.460E+2,0.19539000E+1,0.00000000E+0 - ,0.32596620E+3,0.148E+3,0.470E+2,0.19539000E+1,0.00000000E+0 - ,0.34505990E+3,0.148E+3,0.480E+2,0.19539000E+1,0.00000000E+0 - ,0.43036070E+3,0.148E+3,0.490E+2,0.19539000E+1,0.00000000E+0 - ,0.40034740E+3,0.148E+3,0.500E+2,0.19539000E+1,0.00000000E+0 - ,0.35905550E+3,0.148E+3,0.510E+2,0.19539000E+1,0.00000000E+0 - ,0.33449170E+3,0.148E+3,0.520E+2,0.19539000E+1,0.00000000E+0 - ,0.30384100E+3,0.148E+3,0.530E+2,0.19539000E+1,0.00000000E+0 - ,0.27444070E+3,0.148E+3,0.540E+2,0.19539000E+1,0.00000000E+0 - ,0.10949943E+4,0.148E+3,0.550E+2,0.19539000E+1,0.00000000E+0 - ,0.10161802E+4,0.148E+3,0.560E+2,0.19539000E+1,0.00000000E+0 - ,0.89820920E+3,0.148E+3,0.570E+2,0.19539000E+1,0.00000000E+0 - ,0.42389100E+3,0.148E+3,0.580E+2,0.19539000E+1,0.27991000E+1 - ,0.90262940E+3,0.148E+3,0.590E+2,0.19539000E+1,0.00000000E+0 - ,0.86759380E+3,0.148E+3,0.600E+2,0.19539000E+1,0.00000000E+0 - ,0.84606160E+3,0.148E+3,0.610E+2,0.19539000E+1,0.00000000E+0 - ,0.82622610E+3,0.148E+3,0.620E+2,0.19539000E+1,0.00000000E+0 - ,0.80864130E+3,0.148E+3,0.630E+2,0.19539000E+1,0.00000000E+0 - ,0.64073930E+3,0.148E+3,0.640E+2,0.19539000E+1,0.00000000E+0 - ,0.71462060E+3,0.148E+3,0.650E+2,0.19539000E+1,0.00000000E+0 - ,0.69004230E+3,0.148E+3,0.660E+2,0.19539000E+1,0.00000000E+0 - ,0.73042860E+3,0.148E+3,0.670E+2,0.19539000E+1,0.00000000E+0 - ,0.71501980E+3,0.148E+3,0.680E+2,0.19539000E+1,0.00000000E+0 - ,0.70118290E+3,0.148E+3,0.690E+2,0.19539000E+1,0.00000000E+0 - ,0.69275040E+3,0.148E+3,0.700E+2,0.19539000E+1,0.00000000E+0 - ,0.58668300E+3,0.148E+3,0.710E+2,0.19539000E+1,0.00000000E+0 - ,0.58027960E+3,0.148E+3,0.720E+2,0.19539000E+1,0.00000000E+0 - ,0.53179240E+3,0.148E+3,0.730E+2,0.19539000E+1,0.00000000E+0 - ,0.45093600E+3,0.148E+3,0.740E+2,0.19539000E+1,0.00000000E+0 - ,0.45935930E+3,0.148E+3,0.750E+2,0.19539000E+1,0.00000000E+0 - ,0.41790820E+3,0.148E+3,0.760E+2,0.19539000E+1,0.00000000E+0 - ,0.38396000E+3,0.148E+3,0.770E+2,0.19539000E+1,0.00000000E+0 - ,0.32036400E+3,0.148E+3,0.780E+2,0.19539000E+1,0.00000000E+0 - ,0.29986260E+3,0.148E+3,0.790E+2,0.19539000E+1,0.00000000E+0 - ,0.30870590E+3,0.148E+3,0.800E+2,0.19539000E+1,0.00000000E+0 - ,0.44321180E+3,0.148E+3,0.810E+2,0.19539000E+1,0.00000000E+0 - ,0.43519640E+3,0.148E+3,0.820E+2,0.19539000E+1,0.00000000E+0 - ,0.40209000E+3,0.148E+3,0.830E+2,0.19539000E+1,0.00000000E+0 - ,0.38476220E+3,0.148E+3,0.840E+2,0.19539000E+1,0.00000000E+0 - ,0.35659780E+3,0.148E+3,0.850E+2,0.19539000E+1,0.00000000E+0 - ,0.32818400E+3,0.148E+3,0.860E+2,0.19539000E+1,0.00000000E+0 - ,0.10391920E+4,0.148E+3,0.870E+2,0.19539000E+1,0.00000000E+0 - ,0.10081792E+4,0.148E+3,0.880E+2,0.19539000E+1,0.00000000E+0 - ,0.89630090E+3,0.148E+3,0.890E+2,0.19539000E+1,0.00000000E+0 - ,0.81114820E+3,0.148E+3,0.900E+2,0.19539000E+1,0.00000000E+0 - ,0.80315200E+3,0.148E+3,0.910E+2,0.19539000E+1,0.00000000E+0 - ,0.77787630E+3,0.148E+3,0.920E+2,0.19539000E+1,0.00000000E+0 - ,0.79775990E+3,0.148E+3,0.930E+2,0.19539000E+1,0.00000000E+0 - ,0.77311930E+3,0.148E+3,0.940E+2,0.19539000E+1,0.00000000E+0 - ,0.44500600E+2,0.148E+3,0.101E+3,0.19539000E+1,0.00000000E+0 - ,0.14109010E+3,0.148E+3,0.103E+3,0.19539000E+1,0.98650000E+0 - ,0.18052070E+3,0.148E+3,0.104E+3,0.19539000E+1,0.98080000E+0 - ,0.13987930E+3,0.148E+3,0.105E+3,0.19539000E+1,0.97060000E+0 - ,0.10643320E+3,0.148E+3,0.106E+3,0.19539000E+1,0.98680000E+0 - ,0.74892500E+2,0.148E+3,0.107E+3,0.19539000E+1,0.99440000E+0 - ,0.55139200E+2,0.148E+3,0.108E+3,0.19539000E+1,0.99250000E+0 - ,0.38490600E+2,0.148E+3,0.109E+3,0.19539000E+1,0.99820000E+0 - ,0.20596470E+3,0.148E+3,0.111E+3,0.19539000E+1,0.96840000E+0 - ,0.31790020E+3,0.148E+3,0.112E+3,0.19539000E+1,0.96280000E+0 - ,0.32408300E+3,0.148E+3,0.113E+3,0.19539000E+1,0.96480000E+0 - ,0.26314380E+3,0.148E+3,0.114E+3,0.19539000E+1,0.95070000E+0 - ,0.21731990E+3,0.148E+3,0.115E+3,0.19539000E+1,0.99470000E+0 - ,0.18495220E+3,0.148E+3,0.116E+3,0.19539000E+1,0.99480000E+0 - ,0.15226460E+3,0.148E+3,0.117E+3,0.19539000E+1,0.99720000E+0 - ,0.28627350E+3,0.148E+3,0.119E+3,0.19539000E+1,0.97670000E+0 - ,0.53708890E+3,0.148E+3,0.120E+3,0.19539000E+1,0.98310000E+0 - ,0.28838750E+3,0.148E+3,0.121E+3,0.19539000E+1,0.18627000E+1 - ,0.27858690E+3,0.148E+3,0.122E+3,0.19539000E+1,0.18299000E+1 - ,0.27303310E+3,0.148E+3,0.123E+3,0.19539000E+1,0.19138000E+1 - ,0.27028900E+3,0.148E+3,0.124E+3,0.19539000E+1,0.18269000E+1 - ,0.24982010E+3,0.148E+3,0.125E+3,0.19539000E+1,0.16406000E+1 - ,0.23161700E+3,0.148E+3,0.126E+3,0.19539000E+1,0.16483000E+1 - ,0.22102480E+3,0.148E+3,0.127E+3,0.19539000E+1,0.17149000E+1 - ,0.21602110E+3,0.148E+3,0.128E+3,0.19539000E+1,0.17937000E+1 - ,0.21274680E+3,0.148E+3,0.129E+3,0.19539000E+1,0.95760000E+0 - ,0.20082240E+3,0.148E+3,0.130E+3,0.19539000E+1,0.19419000E+1 - ,0.32310800E+3,0.148E+3,0.131E+3,0.19539000E+1,0.96010000E+0 - ,0.28605510E+3,0.148E+3,0.132E+3,0.19539000E+1,0.94340000E+0 - ,0.25796890E+3,0.148E+3,0.133E+3,0.19539000E+1,0.98890000E+0 - ,0.23666040E+3,0.148E+3,0.134E+3,0.19539000E+1,0.99010000E+0 - ,0.20960830E+3,0.148E+3,0.135E+3,0.19539000E+1,0.99740000E+0 - ,0.34234100E+3,0.148E+3,0.137E+3,0.19539000E+1,0.97380000E+0 - ,0.65327820E+3,0.148E+3,0.138E+3,0.19539000E+1,0.98010000E+0 - ,0.50567470E+3,0.148E+3,0.139E+3,0.19539000E+1,0.19153000E+1 - ,0.38134050E+3,0.148E+3,0.140E+3,0.19539000E+1,0.19355000E+1 - ,0.38512060E+3,0.148E+3,0.141E+3,0.19539000E+1,0.19545000E+1 - ,0.35990590E+3,0.148E+3,0.142E+3,0.19539000E+1,0.19420000E+1 - ,0.40123820E+3,0.148E+3,0.143E+3,0.19539000E+1,0.16682000E+1 - ,0.31533650E+3,0.148E+3,0.144E+3,0.19539000E+1,0.18584000E+1 - ,0.29530360E+3,0.148E+3,0.145E+3,0.19539000E+1,0.19003000E+1 - ,0.27461540E+3,0.148E+3,0.146E+3,0.19539000E+1,0.18630000E+1 - ,0.26554500E+3,0.148E+3,0.147E+3,0.19539000E+1,0.96790000E+0 - ,0.26345080E+3,0.148E+3,0.148E+3,0.19539000E+1,0.19539000E+1 - ,0.42282700E+2,0.149E+3,0.100E+1,0.96330000E+0,0.91180000E+0 - ,0.27023600E+2,0.149E+3,0.200E+1,0.96330000E+0,0.00000000E+0 - ,0.76925140E+3,0.149E+3,0.300E+1,0.96330000E+0,0.00000000E+0 - ,0.41349650E+3,0.149E+3,0.400E+1,0.96330000E+0,0.00000000E+0 - ,0.26747500E+3,0.149E+3,0.500E+1,0.96330000E+0,0.00000000E+0 - ,0.17545850E+3,0.149E+3,0.600E+1,0.96330000E+0,0.00000000E+0 - ,0.12012790E+3,0.149E+3,0.700E+1,0.96330000E+0,0.00000000E+0 - ,0.89652000E+2,0.149E+3,0.800E+1,0.96330000E+0,0.00000000E+0 - ,0.67123200E+2,0.149E+3,0.900E+1,0.96330000E+0,0.00000000E+0 - ,0.51174700E+2,0.149E+3,0.100E+2,0.96330000E+0,0.00000000E+0 - ,0.91594130E+3,0.149E+3,0.110E+2,0.96330000E+0,0.00000000E+0 - ,0.66728440E+3,0.149E+3,0.120E+2,0.96330000E+0,0.00000000E+0 - ,0.60241430E+3,0.149E+3,0.130E+2,0.96330000E+0,0.00000000E+0 - ,0.46150930E+3,0.149E+3,0.140E+2,0.96330000E+0,0.00000000E+0 - ,0.35151570E+3,0.149E+3,0.150E+2,0.96330000E+0,0.00000000E+0 - ,0.28739220E+3,0.149E+3,0.160E+2,0.96330000E+0,0.00000000E+0 - ,0.23145540E+3,0.149E+3,0.170E+2,0.96330000E+0,0.00000000E+0 - ,0.18709160E+3,0.149E+3,0.180E+2,0.96330000E+0,0.00000000E+0 - ,0.15173687E+4,0.149E+3,0.190E+2,0.96330000E+0,0.00000000E+0 - ,0.11989287E+4,0.149E+3,0.200E+2,0.96330000E+0,0.00000000E+0 - ,0.98084640E+3,0.149E+3,0.210E+2,0.96330000E+0,0.00000000E+0 - ,0.93876410E+3,0.149E+3,0.220E+2,0.96330000E+0,0.00000000E+0 - ,0.85507440E+3,0.149E+3,0.230E+2,0.96330000E+0,0.00000000E+0 - ,0.67285260E+3,0.149E+3,0.240E+2,0.96330000E+0,0.00000000E+0 - ,0.73052210E+3,0.149E+3,0.250E+2,0.96330000E+0,0.00000000E+0 - ,0.57217290E+3,0.149E+3,0.260E+2,0.96330000E+0,0.00000000E+0 - ,0.59982550E+3,0.149E+3,0.270E+2,0.96330000E+0,0.00000000E+0 - ,0.62133050E+3,0.149E+3,0.280E+2,0.96330000E+0,0.00000000E+0 - ,0.47601650E+3,0.149E+3,0.290E+2,0.96330000E+0,0.00000000E+0 - ,0.48059720E+3,0.149E+3,0.300E+2,0.96330000E+0,0.00000000E+0 - ,0.57226580E+3,0.149E+3,0.310E+2,0.96330000E+0,0.00000000E+0 - ,0.49379840E+3,0.149E+3,0.320E+2,0.96330000E+0,0.00000000E+0 - ,0.41301260E+3,0.149E+3,0.330E+2,0.96330000E+0,0.00000000E+0 - ,0.36615190E+3,0.149E+3,0.340E+2,0.96330000E+0,0.00000000E+0 - ,0.31652310E+3,0.149E+3,0.350E+2,0.96330000E+0,0.00000000E+0 - ,0.27222880E+3,0.149E+3,0.360E+2,0.96330000E+0,0.00000000E+0 - ,0.16942091E+4,0.149E+3,0.370E+2,0.96330000E+0,0.00000000E+0 - ,0.14306640E+4,0.149E+3,0.380E+2,0.96330000E+0,0.00000000E+0 - ,0.12316979E+4,0.149E+3,0.390E+2,0.96330000E+0,0.00000000E+0 - ,0.10950419E+4,0.149E+3,0.400E+2,0.96330000E+0,0.00000000E+0 - ,0.99140130E+3,0.149E+3,0.410E+2,0.96330000E+0,0.00000000E+0 - ,0.75589180E+3,0.149E+3,0.420E+2,0.96330000E+0,0.00000000E+0 - ,0.84735570E+3,0.149E+3,0.430E+2,0.96330000E+0,0.00000000E+0 - ,0.63674800E+3,0.149E+3,0.440E+2,0.96330000E+0,0.00000000E+0 - ,0.69613210E+3,0.149E+3,0.450E+2,0.96330000E+0,0.00000000E+0 - ,0.64264560E+3,0.149E+3,0.460E+2,0.96330000E+0,0.00000000E+0 - ,0.53720580E+3,0.149E+3,0.470E+2,0.96330000E+0,0.00000000E+0 - ,0.56303120E+3,0.149E+3,0.480E+2,0.96330000E+0,0.00000000E+0 - ,0.71679570E+3,0.149E+3,0.490E+2,0.96330000E+0,0.00000000E+0 - ,0.65114030E+3,0.149E+3,0.500E+2,0.96330000E+0,0.00000000E+0 - ,0.57030150E+3,0.149E+3,0.510E+2,0.96330000E+0,0.00000000E+0 - ,0.52361310E+3,0.149E+3,0.520E+2,0.96330000E+0,0.00000000E+0 - ,0.46816800E+3,0.149E+3,0.530E+2,0.96330000E+0,0.00000000E+0 - ,0.41650530E+3,0.149E+3,0.540E+2,0.96330000E+0,0.00000000E+0 - ,0.20626273E+4,0.149E+3,0.550E+2,0.96330000E+0,0.00000000E+0 - ,0.18342595E+4,0.149E+3,0.560E+2,0.96330000E+0,0.00000000E+0 - ,0.15838792E+4,0.149E+3,0.570E+2,0.96330000E+0,0.00000000E+0 - ,0.67579110E+3,0.149E+3,0.580E+2,0.96330000E+0,0.27991000E+1 - ,0.16159882E+4,0.149E+3,0.590E+2,0.96330000E+0,0.00000000E+0 - ,0.15472492E+4,0.149E+3,0.600E+2,0.96330000E+0,0.00000000E+0 - ,0.15072236E+4,0.149E+3,0.610E+2,0.96330000E+0,0.00000000E+0 - ,0.14705492E+4,0.149E+3,0.620E+2,0.96330000E+0,0.00000000E+0 - ,0.14379844E+4,0.149E+3,0.630E+2,0.96330000E+0,0.00000000E+0 - ,0.11092250E+4,0.149E+3,0.640E+2,0.96330000E+0,0.00000000E+0 - ,0.12845648E+4,0.149E+3,0.650E+2,0.96330000E+0,0.00000000E+0 - ,0.12348582E+4,0.149E+3,0.660E+2,0.96330000E+0,0.00000000E+0 - ,0.12913513E+4,0.149E+3,0.670E+2,0.96330000E+0,0.00000000E+0 - ,0.12633503E+4,0.149E+3,0.680E+2,0.96330000E+0,0.00000000E+0 - ,0.12378116E+4,0.149E+3,0.690E+2,0.96330000E+0,0.00000000E+0 - ,0.12243143E+4,0.149E+3,0.700E+2,0.96330000E+0,0.00000000E+0 - ,0.10181407E+4,0.149E+3,0.710E+2,0.96330000E+0,0.00000000E+0 - ,0.98356470E+3,0.149E+3,0.720E+2,0.96330000E+0,0.00000000E+0 - ,0.88792510E+3,0.149E+3,0.730E+2,0.96330000E+0,0.00000000E+0 - ,0.74340350E+3,0.149E+3,0.740E+2,0.96330000E+0,0.00000000E+0 - ,0.75315120E+3,0.149E+3,0.750E+2,0.96330000E+0,0.00000000E+0 - ,0.67623400E+3,0.149E+3,0.760E+2,0.96330000E+0,0.00000000E+0 - ,0.61465820E+3,0.149E+3,0.770E+2,0.96330000E+0,0.00000000E+0 - ,0.50654420E+3,0.149E+3,0.780E+2,0.96330000E+0,0.00000000E+0 - ,0.47177480E+3,0.149E+3,0.790E+2,0.96330000E+0,0.00000000E+0 - ,0.48363130E+3,0.149E+3,0.800E+2,0.96330000E+0,0.00000000E+0 - ,0.73258080E+3,0.149E+3,0.810E+2,0.96330000E+0,0.00000000E+0 - ,0.70644460E+3,0.149E+3,0.820E+2,0.96330000E+0,0.00000000E+0 - ,0.63913150E+3,0.149E+3,0.830E+2,0.96330000E+0,0.00000000E+0 - ,0.60410820E+3,0.149E+3,0.840E+2,0.96330000E+0,0.00000000E+0 - ,0.55158440E+3,0.149E+3,0.850E+2,0.96330000E+0,0.00000000E+0 - ,0.50067860E+3,0.149E+3,0.860E+2,0.96330000E+0,0.00000000E+0 - ,0.19210063E+4,0.149E+3,0.870E+2,0.96330000E+0,0.00000000E+0 - ,0.17975569E+4,0.149E+3,0.880E+2,0.96330000E+0,0.00000000E+0 - ,0.15637265E+4,0.149E+3,0.890E+2,0.96330000E+0,0.00000000E+0 - ,0.13796361E+4,0.149E+3,0.900E+2,0.96330000E+0,0.00000000E+0 - ,0.13822903E+4,0.149E+3,0.910E+2,0.96330000E+0,0.00000000E+0 - ,0.13377839E+4,0.149E+3,0.920E+2,0.96330000E+0,0.00000000E+0 - ,0.13931101E+4,0.149E+3,0.930E+2,0.96330000E+0,0.00000000E+0 - ,0.13462697E+4,0.149E+3,0.940E+2,0.96330000E+0,0.00000000E+0 - ,0.69675400E+2,0.149E+3,0.101E+3,0.96330000E+0,0.00000000E+0 - ,0.23904190E+3,0.149E+3,0.103E+3,0.96330000E+0,0.98650000E+0 - ,0.30266780E+3,0.149E+3,0.104E+3,0.96330000E+0,0.98080000E+0 - ,0.22316290E+3,0.149E+3,0.105E+3,0.96330000E+0,0.97060000E+0 - ,0.16468120E+3,0.149E+3,0.106E+3,0.96330000E+0,0.98680000E+0 - ,0.11197070E+3,0.149E+3,0.107E+3,0.96330000E+0,0.99440000E+0 - ,0.80098600E+2,0.149E+3,0.108E+3,0.96330000E+0,0.99250000E+0 - ,0.53936400E+2,0.149E+3,0.109E+3,0.96330000E+0,0.99820000E+0 - ,0.35200740E+3,0.149E+3,0.111E+3,0.96330000E+0,0.96840000E+0 - ,0.54627620E+3,0.149E+3,0.112E+3,0.96330000E+0,0.96280000E+0 - ,0.54321880E+3,0.149E+3,0.113E+3,0.96330000E+0,0.96480000E+0 - ,0.42482930E+3,0.149E+3,0.114E+3,0.96330000E+0,0.95070000E+0 - ,0.34093960E+3,0.149E+3,0.115E+3,0.96330000E+0,0.99470000E+0 - ,0.28433500E+3,0.149E+3,0.116E+3,0.96330000E+0,0.99480000E+0 - ,0.22912290E+3,0.149E+3,0.117E+3,0.96330000E+0,0.99720000E+0 - ,0.47801410E+3,0.149E+3,0.119E+3,0.96330000E+0,0.97670000E+0 - ,0.95798970E+3,0.149E+3,0.120E+3,0.96330000E+0,0.98310000E+0 - ,0.46767000E+3,0.149E+3,0.121E+3,0.96330000E+0,0.18627000E+1 - ,0.45116580E+3,0.149E+3,0.122E+3,0.96330000E+0,0.18299000E+1 - ,0.44234200E+3,0.149E+3,0.123E+3,0.96330000E+0,0.19138000E+1 - ,0.43947280E+3,0.149E+3,0.124E+3,0.96330000E+0,0.18269000E+1 - ,0.39910790E+3,0.149E+3,0.125E+3,0.96330000E+0,0.16406000E+1 - ,0.36795920E+3,0.149E+3,0.126E+3,0.96330000E+0,0.16483000E+1 - ,0.35103000E+3,0.149E+3,0.127E+3,0.96330000E+0,0.17149000E+1 - ,0.34356200E+3,0.149E+3,0.128E+3,0.96330000E+0,0.17937000E+1 - ,0.34289310E+3,0.149E+3,0.129E+3,0.96330000E+0,0.95760000E+0 - ,0.31591660E+3,0.149E+3,0.130E+3,0.96330000E+0,0.19419000E+1 - ,0.53451270E+3,0.149E+3,0.131E+3,0.96330000E+0,0.96010000E+0 - ,0.45962850E+3,0.149E+3,0.132E+3,0.96330000E+0,0.94340000E+0 - ,0.40554530E+3,0.149E+3,0.133E+3,0.96330000E+0,0.98890000E+0 - ,0.36636520E+3,0.149E+3,0.134E+3,0.96330000E+0,0.99010000E+0 - ,0.31893050E+3,0.149E+3,0.135E+3,0.96330000E+0,0.99740000E+0 - ,0.56760020E+3,0.149E+3,0.137E+3,0.96330000E+0,0.97380000E+0 - ,0.11685036E+4,0.149E+3,0.138E+3,0.96330000E+0,0.98010000E+0 - ,0.86288330E+3,0.149E+3,0.139E+3,0.96330000E+0,0.19153000E+1 - ,0.61965370E+3,0.149E+3,0.140E+3,0.96330000E+0,0.19355000E+1 - ,0.62602540E+3,0.149E+3,0.141E+3,0.96330000E+0,0.19545000E+1 - ,0.58105490E+3,0.149E+3,0.142E+3,0.96330000E+0,0.19420000E+1 - ,0.66303800E+3,0.149E+3,0.143E+3,0.96330000E+0,0.16682000E+1 - ,0.50016280E+3,0.149E+3,0.144E+3,0.96330000E+0,0.18584000E+1 - ,0.46737710E+3,0.149E+3,0.145E+3,0.96330000E+0,0.19003000E+1 - ,0.43299730E+3,0.149E+3,0.146E+3,0.96330000E+0,0.18630000E+1 - ,0.41968680E+3,0.149E+3,0.147E+3,0.96330000E+0,0.96790000E+0 - ,0.41115760E+3,0.149E+3,0.148E+3,0.96330000E+0,0.19539000E+1 - ,0.67899200E+3,0.149E+3,0.149E+3,0.96330000E+0,0.96330000E+0 - ,0.39050000E+2,0.150E+3,0.100E+1,0.95140000E+0,0.91180000E+0 - ,0.25410500E+2,0.150E+3,0.200E+1,0.95140000E+0,0.00000000E+0 - ,0.64241900E+3,0.150E+3,0.300E+1,0.95140000E+0,0.00000000E+0 - ,0.36274340E+3,0.150E+3,0.400E+1,0.95140000E+0,0.00000000E+0 - ,0.24059340E+3,0.150E+3,0.500E+1,0.95140000E+0,0.00000000E+0 - ,0.16058760E+3,0.150E+3,0.600E+1,0.95140000E+0,0.00000000E+0 - ,0.11127680E+3,0.150E+3,0.700E+1,0.95140000E+0,0.00000000E+0 - ,0.83712000E+2,0.150E+3,0.800E+1,0.95140000E+0,0.00000000E+0 - ,0.63080600E+2,0.150E+3,0.900E+1,0.95140000E+0,0.00000000E+0 - ,0.48325800E+2,0.150E+3,0.100E+2,0.95140000E+0,0.00000000E+0 - ,0.76709550E+3,0.150E+3,0.110E+2,0.95140000E+0,0.00000000E+0 - ,0.58045000E+3,0.150E+3,0.120E+2,0.95140000E+0,0.00000000E+0 - ,0.53107940E+3,0.150E+3,0.130E+2,0.95140000E+0,0.00000000E+0 - ,0.41414030E+3,0.150E+3,0.140E+2,0.95140000E+0,0.00000000E+0 - ,0.31993070E+3,0.150E+3,0.150E+2,0.95140000E+0,0.00000000E+0 - ,0.26382770E+3,0.150E+3,0.160E+2,0.95140000E+0,0.00000000E+0 - ,0.21417230E+3,0.150E+3,0.170E+2,0.95140000E+0,0.00000000E+0 - ,0.17426390E+3,0.150E+3,0.180E+2,0.95140000E+0,0.00000000E+0 - ,0.12595964E+4,0.150E+3,0.190E+2,0.95140000E+0,0.00000000E+0 - ,0.10266097E+4,0.150E+3,0.200E+2,0.95140000E+0,0.00000000E+0 - ,0.84554470E+3,0.150E+3,0.210E+2,0.95140000E+0,0.00000000E+0 - ,0.81389640E+3,0.150E+3,0.220E+2,0.95140000E+0,0.00000000E+0 - ,0.74392530E+3,0.150E+3,0.230E+2,0.95140000E+0,0.00000000E+0 - ,0.58540690E+3,0.150E+3,0.240E+2,0.95140000E+0,0.00000000E+0 - ,0.63875870E+3,0.150E+3,0.250E+2,0.95140000E+0,0.00000000E+0 - ,0.50063040E+3,0.150E+3,0.260E+2,0.95140000E+0,0.00000000E+0 - ,0.52899650E+3,0.150E+3,0.270E+2,0.95140000E+0,0.00000000E+0 - ,0.54604730E+3,0.150E+3,0.280E+2,0.95140000E+0,0.00000000E+0 - ,0.41817300E+3,0.150E+3,0.290E+2,0.95140000E+0,0.00000000E+0 - ,0.42710250E+3,0.150E+3,0.300E+2,0.95140000E+0,0.00000000E+0 - ,0.50688380E+3,0.150E+3,0.310E+2,0.95140000E+0,0.00000000E+0 - ,0.44348920E+3,0.150E+3,0.320E+2,0.95140000E+0,0.00000000E+0 - ,0.37536940E+3,0.150E+3,0.330E+2,0.95140000E+0,0.00000000E+0 - ,0.33511820E+3,0.150E+3,0.340E+2,0.95140000E+0,0.00000000E+0 - ,0.29171790E+3,0.150E+3,0.350E+2,0.95140000E+0,0.00000000E+0 - ,0.25244080E+3,0.150E+3,0.360E+2,0.95140000E+0,0.00000000E+0 - ,0.14095386E+4,0.150E+3,0.370E+2,0.95140000E+0,0.00000000E+0 - ,0.12233073E+4,0.150E+3,0.380E+2,0.95140000E+0,0.00000000E+0 - ,0.10654342E+4,0.150E+3,0.390E+2,0.95140000E+0,0.00000000E+0 - ,0.95393220E+3,0.150E+3,0.400E+2,0.95140000E+0,0.00000000E+0 - ,0.86754750E+3,0.150E+3,0.410E+2,0.95140000E+0,0.00000000E+0 - ,0.66641970E+3,0.150E+3,0.420E+2,0.95140000E+0,0.00000000E+0 - ,0.74499930E+3,0.150E+3,0.430E+2,0.95140000E+0,0.00000000E+0 - ,0.56445890E+3,0.150E+3,0.440E+2,0.95140000E+0,0.00000000E+0 - ,0.61737910E+3,0.150E+3,0.450E+2,0.95140000E+0,0.00000000E+0 - ,0.57156020E+3,0.150E+3,0.460E+2,0.95140000E+0,0.00000000E+0 - ,0.47659660E+3,0.150E+3,0.470E+2,0.95140000E+0,0.00000000E+0 - ,0.50255130E+3,0.150E+3,0.480E+2,0.95140000E+0,0.00000000E+0 - ,0.63411950E+3,0.150E+3,0.490E+2,0.95140000E+0,0.00000000E+0 - ,0.58276930E+3,0.150E+3,0.500E+2,0.95140000E+0,0.00000000E+0 - ,0.51594670E+3,0.150E+3,0.510E+2,0.95140000E+0,0.00000000E+0 - ,0.47668110E+3,0.150E+3,0.520E+2,0.95140000E+0,0.00000000E+0 - ,0.42899630E+3,0.150E+3,0.530E+2,0.95140000E+0,0.00000000E+0 - ,0.38394570E+3,0.150E+3,0.540E+2,0.95140000E+0,0.00000000E+0 - ,0.17161526E+4,0.150E+3,0.550E+2,0.95140000E+0,0.00000000E+0 - ,0.15618289E+4,0.150E+3,0.560E+2,0.95140000E+0,0.00000000E+0 - ,0.13644290E+4,0.150E+3,0.570E+2,0.95140000E+0,0.00000000E+0 - ,0.61000420E+3,0.150E+3,0.580E+2,0.95140000E+0,0.27991000E+1 - ,0.13811677E+4,0.150E+3,0.590E+2,0.95140000E+0,0.00000000E+0 - ,0.13251151E+4,0.150E+3,0.600E+2,0.95140000E+0,0.00000000E+0 - ,0.12915707E+4,0.150E+3,0.610E+2,0.95140000E+0,0.00000000E+0 - ,0.12607608E+4,0.150E+3,0.620E+2,0.95140000E+0,0.00000000E+0 - ,0.12334280E+4,0.150E+3,0.630E+2,0.95140000E+0,0.00000000E+0 - ,0.96322340E+3,0.150E+3,0.640E+2,0.95140000E+0,0.00000000E+0 - ,0.10940703E+4,0.150E+3,0.650E+2,0.95140000E+0,0.00000000E+0 - ,0.10539748E+4,0.150E+3,0.660E+2,0.95140000E+0,0.00000000E+0 - ,0.11110005E+4,0.150E+3,0.670E+2,0.95140000E+0,0.00000000E+0 - ,0.10872901E+4,0.150E+3,0.680E+2,0.95140000E+0,0.00000000E+0 - ,0.10658196E+4,0.150E+3,0.690E+2,0.95140000E+0,0.00000000E+0 - ,0.10536773E+4,0.150E+3,0.700E+2,0.95140000E+0,0.00000000E+0 - ,0.88359210E+3,0.150E+3,0.710E+2,0.95140000E+0,0.00000000E+0 - ,0.86380750E+3,0.150E+3,0.720E+2,0.95140000E+0,0.00000000E+0 - ,0.78517710E+3,0.150E+3,0.730E+2,0.95140000E+0,0.00000000E+0 - ,0.66055390E+3,0.150E+3,0.740E+2,0.95140000E+0,0.00000000E+0 - ,0.67110130E+3,0.150E+3,0.750E+2,0.95140000E+0,0.00000000E+0 - ,0.60606460E+3,0.150E+3,0.760E+2,0.95140000E+0,0.00000000E+0 - ,0.55342010E+3,0.150E+3,0.770E+2,0.95140000E+0,0.00000000E+0 - ,0.45807960E+3,0.150E+3,0.780E+2,0.95140000E+0,0.00000000E+0 - ,0.42739480E+3,0.150E+3,0.790E+2,0.95140000E+0,0.00000000E+0 - ,0.43923750E+3,0.150E+3,0.800E+2,0.95140000E+0,0.00000000E+0 - ,0.64947520E+3,0.150E+3,0.810E+2,0.95140000E+0,0.00000000E+0 - ,0.63216060E+3,0.150E+3,0.820E+2,0.95140000E+0,0.00000000E+0 - ,0.57757500E+3,0.150E+3,0.830E+2,0.95140000E+0,0.00000000E+0 - ,0.54893280E+3,0.150E+3,0.840E+2,0.95140000E+0,0.00000000E+0 - ,0.50441400E+3,0.150E+3,0.850E+2,0.95140000E+0,0.00000000E+0 - ,0.46043530E+3,0.150E+3,0.860E+2,0.95140000E+0,0.00000000E+0 - ,0.16132050E+4,0.150E+3,0.870E+2,0.95140000E+0,0.00000000E+0 - ,0.15396549E+4,0.150E+3,0.880E+2,0.95140000E+0,0.00000000E+0 - ,0.13539743E+4,0.150E+3,0.890E+2,0.95140000E+0,0.00000000E+0 - ,0.12088936E+4,0.150E+3,0.900E+2,0.95140000E+0,0.00000000E+0 - ,0.12037043E+4,0.150E+3,0.910E+2,0.95140000E+0,0.00000000E+0 - ,0.11652987E+4,0.150E+3,0.920E+2,0.95140000E+0,0.00000000E+0 - ,0.12045686E+4,0.150E+3,0.930E+2,0.95140000E+0,0.00000000E+0 - ,0.11657062E+4,0.150E+3,0.940E+2,0.95140000E+0,0.00000000E+0 - ,0.63518900E+2,0.150E+3,0.101E+3,0.95140000E+0,0.00000000E+0 - ,0.21038150E+3,0.150E+3,0.103E+3,0.95140000E+0,0.98650000E+0 - ,0.26750360E+3,0.150E+3,0.104E+3,0.95140000E+0,0.98080000E+0 - ,0.20167580E+3,0.150E+3,0.105E+3,0.95140000E+0,0.97060000E+0 - ,0.15060400E+3,0.150E+3,0.106E+3,0.95140000E+0,0.98680000E+0 - ,0.10370700E+3,0.150E+3,0.107E+3,0.95140000E+0,0.99440000E+0 - ,0.74928900E+2,0.150E+3,0.108E+3,0.95140000E+0,0.99250000E+0 - ,0.51049200E+2,0.150E+3,0.109E+3,0.95140000E+0,0.99820000E+0 - ,0.30824700E+3,0.150E+3,0.111E+3,0.95140000E+0,0.96840000E+0 - ,0.47728480E+3,0.150E+3,0.112E+3,0.95140000E+0,0.96280000E+0 - ,0.48037350E+3,0.150E+3,0.113E+3,0.95140000E+0,0.96480000E+0 - ,0.38212550E+3,0.150E+3,0.114E+3,0.95140000E+0,0.95070000E+0 - ,0.31042380E+3,0.150E+3,0.115E+3,0.95140000E+0,0.99470000E+0 - ,0.26094970E+3,0.150E+3,0.116E+3,0.95140000E+0,0.99480000E+0 - ,0.21197090E+3,0.150E+3,0.117E+3,0.95140000E+0,0.99720000E+0 - ,0.42200550E+3,0.150E+3,0.119E+3,0.95140000E+0,0.97670000E+0 - ,0.81999260E+3,0.150E+3,0.120E+3,0.95140000E+0,0.98310000E+0 - ,0.41914320E+3,0.150E+3,0.121E+3,0.95140000E+0,0.18627000E+1 - ,0.40443780E+3,0.150E+3,0.122E+3,0.95140000E+0,0.18299000E+1 - ,0.39640790E+3,0.150E+3,0.123E+3,0.95140000E+0,0.19138000E+1 - ,0.39312150E+3,0.150E+3,0.124E+3,0.95140000E+0,0.18269000E+1 - ,0.36011140E+3,0.150E+3,0.125E+3,0.95140000E+0,0.16406000E+1 - ,0.33275950E+3,0.150E+3,0.126E+3,0.95140000E+0,0.16483000E+1 - ,0.31739780E+3,0.150E+3,0.127E+3,0.95140000E+0,0.17149000E+1 - ,0.31042370E+3,0.150E+3,0.128E+3,0.95140000E+0,0.17937000E+1 - ,0.30781940E+3,0.150E+3,0.129E+3,0.95140000E+0,0.95760000E+0 - ,0.28694640E+3,0.150E+3,0.130E+3,0.95140000E+0,0.19419000E+1 - ,0.47510140E+3,0.150E+3,0.131E+3,0.95140000E+0,0.96010000E+0 - ,0.41406130E+3,0.150E+3,0.132E+3,0.95140000E+0,0.94340000E+0 - ,0.36881960E+3,0.150E+3,0.133E+3,0.95140000E+0,0.98890000E+0 - ,0.33526670E+3,0.150E+3,0.134E+3,0.95140000E+0,0.99010000E+0 - ,0.29382390E+3,0.150E+3,0.135E+3,0.95140000E+0,0.99740000E+0 - ,0.50249860E+3,0.150E+3,0.137E+3,0.95140000E+0,0.97380000E+0 - ,0.99819190E+3,0.150E+3,0.138E+3,0.95140000E+0,0.98010000E+0 - ,0.75411460E+3,0.150E+3,0.139E+3,0.95140000E+0,0.19153000E+1 - ,0.55441070E+3,0.150E+3,0.140E+3,0.95140000E+0,0.19355000E+1 - ,0.55998500E+3,0.150E+3,0.141E+3,0.95140000E+0,0.19545000E+1 - ,0.52115630E+3,0.150E+3,0.142E+3,0.95140000E+0,0.19420000E+1 - ,0.58793550E+3,0.150E+3,0.143E+3,0.95140000E+0,0.16682000E+1 - ,0.45216820E+3,0.150E+3,0.144E+3,0.95140000E+0,0.18584000E+1 - ,0.42274380E+3,0.150E+3,0.145E+3,0.95140000E+0,0.19003000E+1 - ,0.39214710E+3,0.150E+3,0.146E+3,0.95140000E+0,0.18630000E+1 - ,0.37963350E+3,0.150E+3,0.147E+3,0.95140000E+0,0.96790000E+0 - ,0.37434300E+3,0.150E+3,0.148E+3,0.95140000E+0,0.19539000E+1 - ,0.60309650E+3,0.150E+3,0.149E+3,0.95140000E+0,0.96330000E+0 - ,0.54204390E+3,0.150E+3,0.150E+3,0.95140000E+0,0.95140000E+0 - ,0.37118600E+2,0.151E+3,0.100E+1,0.97490000E+0,0.91180000E+0 - ,0.24506800E+2,0.151E+3,0.200E+1,0.97490000E+0,0.00000000E+0 - ,0.56950200E+3,0.151E+3,0.300E+1,0.97490000E+0,0.00000000E+0 - ,0.33206650E+3,0.151E+3,0.400E+1,0.97490000E+0,0.00000000E+0 - ,0.22424380E+3,0.151E+3,0.500E+1,0.97490000E+0,0.00000000E+0 - ,0.15163340E+3,0.151E+3,0.600E+1,0.97490000E+0,0.00000000E+0 - ,0.10605380E+3,0.151E+3,0.700E+1,0.97490000E+0,0.00000000E+0 - ,0.80289900E+2,0.151E+3,0.800E+1,0.97490000E+0,0.00000000E+0 - ,0.60817400E+2,0.151E+3,0.900E+1,0.97490000E+0,0.00000000E+0 - ,0.46777500E+2,0.151E+3,0.100E+2,0.97490000E+0,0.00000000E+0 - ,0.68136500E+3,0.151E+3,0.110E+2,0.97490000E+0,0.00000000E+0 - ,0.52835450E+3,0.151E+3,0.120E+2,0.97490000E+0,0.00000000E+0 - ,0.48798470E+3,0.151E+3,0.130E+2,0.97490000E+0,0.00000000E+0 - ,0.38531020E+3,0.151E+3,0.140E+2,0.97490000E+0,0.00000000E+0 - ,0.30075580E+3,0.151E+3,0.150E+2,0.97490000E+0,0.00000000E+0 - ,0.24964690E+3,0.151E+3,0.160E+2,0.97490000E+0,0.00000000E+0 - ,0.20391030E+3,0.151E+3,0.170E+2,0.97490000E+0,0.00000000E+0 - ,0.16677960E+3,0.151E+3,0.180E+2,0.97490000E+0,0.00000000E+0 - ,0.11139369E+4,0.151E+3,0.190E+2,0.97490000E+0,0.00000000E+0 - ,0.92532660E+3,0.151E+3,0.200E+2,0.97490000E+0,0.00000000E+0 - ,0.76543030E+3,0.151E+3,0.210E+2,0.97490000E+0,0.00000000E+0 - ,0.73977510E+3,0.151E+3,0.220E+2,0.97490000E+0,0.00000000E+0 - ,0.67780140E+3,0.151E+3,0.230E+2,0.97490000E+0,0.00000000E+0 - ,0.53372530E+3,0.151E+3,0.240E+2,0.97490000E+0,0.00000000E+0 - ,0.58400790E+3,0.151E+3,0.250E+2,0.97490000E+0,0.00000000E+0 - ,0.45821350E+3,0.151E+3,0.260E+2,0.97490000E+0,0.00000000E+0 - ,0.48646450E+3,0.151E+3,0.270E+2,0.97490000E+0,0.00000000E+0 - ,0.50090110E+3,0.151E+3,0.280E+2,0.97490000E+0,0.00000000E+0 - ,0.38380100E+3,0.151E+3,0.290E+2,0.97490000E+0,0.00000000E+0 - ,0.39484340E+3,0.151E+3,0.300E+2,0.97490000E+0,0.00000000E+0 - ,0.46751190E+3,0.151E+3,0.310E+2,0.97490000E+0,0.00000000E+0 - ,0.41296610E+3,0.151E+3,0.320E+2,0.97490000E+0,0.00000000E+0 - ,0.35254270E+3,0.151E+3,0.330E+2,0.97490000E+0,0.00000000E+0 - ,0.31639840E+3,0.151E+3,0.340E+2,0.97490000E+0,0.00000000E+0 - ,0.27688560E+3,0.151E+3,0.350E+2,0.97490000E+0,0.00000000E+0 - ,0.24075150E+3,0.151E+3,0.360E+2,0.97490000E+0,0.00000000E+0 - ,0.12488109E+4,0.151E+3,0.370E+2,0.97490000E+0,0.00000000E+0 - ,0.11019644E+4,0.151E+3,0.380E+2,0.97490000E+0,0.00000000E+0 - ,0.96716720E+3,0.151E+3,0.390E+2,0.97490000E+0,0.00000000E+0 - ,0.87013340E+3,0.151E+3,0.400E+2,0.97490000E+0,0.00000000E+0 - ,0.79387710E+3,0.151E+3,0.410E+2,0.97490000E+0,0.00000000E+0 - ,0.61324700E+3,0.151E+3,0.420E+2,0.97490000E+0,0.00000000E+0 - ,0.68412920E+3,0.151E+3,0.430E+2,0.97490000E+0,0.00000000E+0 - ,0.52150710E+3,0.151E+3,0.440E+2,0.97490000E+0,0.00000000E+0 - ,0.57027900E+3,0.151E+3,0.450E+2,0.97490000E+0,0.00000000E+0 - ,0.52899540E+3,0.151E+3,0.460E+2,0.97490000E+0,0.00000000E+0 - ,0.44070410E+3,0.151E+3,0.470E+2,0.97490000E+0,0.00000000E+0 - ,0.46629410E+3,0.151E+3,0.480E+2,0.97490000E+0,0.00000000E+0 - ,0.58471100E+3,0.151E+3,0.490E+2,0.97490000E+0,0.00000000E+0 - ,0.54152090E+3,0.151E+3,0.500E+2,0.97490000E+0,0.00000000E+0 - ,0.48305960E+3,0.151E+3,0.510E+2,0.97490000E+0,0.00000000E+0 - ,0.44833330E+3,0.151E+3,0.520E+2,0.97490000E+0,0.00000000E+0 - ,0.40544000E+3,0.151E+3,0.530E+2,0.97490000E+0,0.00000000E+0 - ,0.36450640E+3,0.151E+3,0.540E+2,0.97490000E+0,0.00000000E+0 - ,0.15212386E+4,0.151E+3,0.550E+2,0.97490000E+0,0.00000000E+0 - ,0.14035743E+4,0.151E+3,0.560E+2,0.97490000E+0,0.00000000E+0 - ,0.12355723E+4,0.151E+3,0.570E+2,0.97490000E+0,0.00000000E+0 - ,0.57038460E+3,0.151E+3,0.580E+2,0.97490000E+0,0.27991000E+1 - ,0.12443690E+4,0.151E+3,0.590E+2,0.97490000E+0,0.00000000E+0 - ,0.11953394E+4,0.151E+3,0.600E+2,0.97490000E+0,0.00000000E+0 - ,0.11654811E+4,0.151E+3,0.610E+2,0.97490000E+0,0.00000000E+0 - ,0.11380116E+4,0.151E+3,0.620E+2,0.97490000E+0,0.00000000E+0 - ,0.11136574E+4,0.151E+3,0.630E+2,0.97490000E+0,0.00000000E+0 - ,0.87723370E+3,0.151E+3,0.640E+2,0.97490000E+0,0.00000000E+0 - ,0.98436690E+3,0.151E+3,0.650E+2,0.97490000E+0,0.00000000E+0 - ,0.94971600E+3,0.151E+3,0.660E+2,0.97490000E+0,0.00000000E+0 - ,0.10050059E+4,0.151E+3,0.670E+2,0.97490000E+0,0.00000000E+0 - ,0.98375110E+3,0.151E+3,0.680E+2,0.97490000E+0,0.00000000E+0 - ,0.96460520E+3,0.151E+3,0.690E+2,0.97490000E+0,0.00000000E+0 - ,0.95326960E+3,0.151E+3,0.700E+2,0.97490000E+0,0.00000000E+0 - ,0.80412310E+3,0.151E+3,0.710E+2,0.97490000E+0,0.00000000E+0 - ,0.79227200E+3,0.151E+3,0.720E+2,0.97490000E+0,0.00000000E+0 - ,0.72359370E+3,0.151E+3,0.730E+2,0.97490000E+0,0.00000000E+0 - ,0.61110290E+3,0.151E+3,0.740E+2,0.97490000E+0,0.00000000E+0 - ,0.62195650E+3,0.151E+3,0.750E+2,0.97490000E+0,0.00000000E+0 - ,0.56397010E+3,0.151E+3,0.760E+2,0.97490000E+0,0.00000000E+0 - ,0.51667170E+3,0.151E+3,0.770E+2,0.97490000E+0,0.00000000E+0 - ,0.42917250E+3,0.151E+3,0.780E+2,0.97490000E+0,0.00000000E+0 - ,0.40097810E+3,0.151E+3,0.790E+2,0.97490000E+0,0.00000000E+0 - ,0.41268870E+3,0.151E+3,0.800E+2,0.97490000E+0,0.00000000E+0 - ,0.60016760E+3,0.151E+3,0.810E+2,0.97490000E+0,0.00000000E+0 - ,0.58760720E+3,0.151E+3,0.820E+2,0.97490000E+0,0.00000000E+0 - ,0.54048320E+3,0.151E+3,0.830E+2,0.97490000E+0,0.00000000E+0 - ,0.51568470E+3,0.151E+3,0.840E+2,0.97490000E+0,0.00000000E+0 - ,0.47605910E+3,0.151E+3,0.850E+2,0.97490000E+0,0.00000000E+0 - ,0.43636860E+3,0.151E+3,0.860E+2,0.97490000E+0,0.00000000E+0 - ,0.14387730E+4,0.151E+3,0.870E+2,0.97490000E+0,0.00000000E+0 - ,0.13892118E+4,0.151E+3,0.880E+2,0.97490000E+0,0.00000000E+0 - ,0.12302614E+4,0.151E+3,0.890E+2,0.97490000E+0,0.00000000E+0 - ,0.11073931E+4,0.151E+3,0.900E+2,0.97490000E+0,0.00000000E+0 - ,0.10983173E+4,0.151E+3,0.910E+2,0.97490000E+0,0.00000000E+0 - ,0.10634833E+4,0.151E+3,0.920E+2,0.97490000E+0,0.00000000E+0 - ,0.10937836E+4,0.151E+3,0.930E+2,0.97490000E+0,0.00000000E+0 - ,0.10594592E+4,0.151E+3,0.940E+2,0.97490000E+0,0.00000000E+0 - ,0.59779600E+2,0.151E+3,0.101E+3,0.97490000E+0,0.00000000E+0 - ,0.19308010E+3,0.151E+3,0.103E+3,0.97490000E+0,0.98650000E+0 - ,0.24635800E+3,0.151E+3,0.104E+3,0.97490000E+0,0.98080000E+0 - ,0.18865770E+3,0.151E+3,0.105E+3,0.97490000E+0,0.97060000E+0 - ,0.14217370E+3,0.151E+3,0.106E+3,0.97490000E+0,0.98680000E+0 - ,0.98858300E+2,0.151E+3,0.107E+3,0.97490000E+0,0.99440000E+0 - ,0.71981600E+2,0.151E+3,0.108E+3,0.97490000E+0,0.99250000E+0 - ,0.49497000E+2,0.151E+3,0.109E+3,0.97490000E+0,0.99820000E+0 - ,0.28199230E+3,0.151E+3,0.111E+3,0.97490000E+0,0.96840000E+0 - ,0.43599230E+3,0.151E+3,0.112E+3,0.97490000E+0,0.96280000E+0 - ,0.44239460E+3,0.151E+3,0.113E+3,0.97490000E+0,0.96480000E+0 - ,0.35616810E+3,0.151E+3,0.114E+3,0.97490000E+0,0.95070000E+0 - ,0.29192250E+3,0.151E+3,0.115E+3,0.97490000E+0,0.99470000E+0 - ,0.24688440E+3,0.151E+3,0.116E+3,0.97490000E+0,0.99480000E+0 - ,0.20178980E+3,0.151E+3,0.117E+3,0.97490000E+0,0.99720000E+0 - ,0.38878440E+3,0.151E+3,0.119E+3,0.97490000E+0,0.97670000E+0 - ,0.73983800E+3,0.151E+3,0.120E+3,0.97490000E+0,0.98310000E+0 - ,0.38986450E+3,0.151E+3,0.121E+3,0.97490000E+0,0.18627000E+1 - ,0.37633360E+3,0.151E+3,0.122E+3,0.97490000E+0,0.18299000E+1 - ,0.36879080E+3,0.151E+3,0.123E+3,0.97490000E+0,0.19138000E+1 - ,0.36529400E+3,0.151E+3,0.124E+3,0.97490000E+0,0.18269000E+1 - ,0.33651780E+3,0.151E+3,0.125E+3,0.97490000E+0,0.16406000E+1 - ,0.31148590E+3,0.151E+3,0.126E+3,0.97490000E+0,0.16483000E+1 - ,0.29711100E+3,0.151E+3,0.127E+3,0.97490000E+0,0.17149000E+1 - ,0.29044330E+3,0.151E+3,0.128E+3,0.97490000E+0,0.17937000E+1 - ,0.28674360E+3,0.151E+3,0.129E+3,0.97490000E+0,0.95760000E+0 - ,0.26942080E+3,0.151E+3,0.130E+3,0.97490000E+0,0.19419000E+1 - ,0.43926920E+3,0.151E+3,0.131E+3,0.97490000E+0,0.96010000E+0 - ,0.38642600E+3,0.151E+3,0.132E+3,0.97490000E+0,0.94340000E+0 - ,0.34656560E+3,0.151E+3,0.133E+3,0.97490000E+0,0.98890000E+0 - ,0.31651250E+3,0.151E+3,0.134E+3,0.97490000E+0,0.99010000E+0 - ,0.27880760E+3,0.151E+3,0.135E+3,0.97490000E+0,0.99740000E+0 - ,0.46396320E+3,0.151E+3,0.137E+3,0.97490000E+0,0.97380000E+0 - ,0.89977960E+3,0.151E+3,0.138E+3,0.97490000E+0,0.98010000E+0 - ,0.69024350E+3,0.151E+3,0.139E+3,0.97490000E+0,0.19153000E+1 - ,0.51535410E+3,0.151E+3,0.140E+3,0.97490000E+0,0.19355000E+1 - ,0.52041820E+3,0.151E+3,0.141E+3,0.97490000E+0,0.19545000E+1 - ,0.48533740E+3,0.151E+3,0.142E+3,0.97490000E+0,0.19420000E+1 - ,0.54348220E+3,0.151E+3,0.143E+3,0.97490000E+0,0.16682000E+1 - ,0.42337510E+3,0.151E+3,0.144E+3,0.97490000E+0,0.18584000E+1 - ,0.39603590E+3,0.151E+3,0.145E+3,0.97490000E+0,0.19003000E+1 - ,0.36774930E+3,0.151E+3,0.146E+3,0.97490000E+0,0.18630000E+1 - ,0.35570800E+3,0.151E+3,0.147E+3,0.97490000E+0,0.96790000E+0 - ,0.35221320E+3,0.151E+3,0.148E+3,0.97490000E+0,0.19539000E+1 - ,0.55762720E+3,0.151E+3,0.149E+3,0.97490000E+0,0.96330000E+0 - ,0.50519000E+3,0.151E+3,0.150E+3,0.97490000E+0,0.95140000E+0 - ,0.47347030E+3,0.151E+3,0.151E+3,0.97490000E+0,0.97490000E+0 - ,0.35486100E+2,0.152E+3,0.100E+1,0.98110000E+0,0.91180000E+0 - ,0.23710000E+2,0.152E+3,0.200E+1,0.98110000E+0,0.00000000E+0 - ,0.51945180E+3,0.152E+3,0.300E+1,0.98110000E+0,0.00000000E+0 - ,0.30894260E+3,0.152E+3,0.400E+1,0.98110000E+0,0.00000000E+0 - ,0.21127990E+3,0.152E+3,0.500E+1,0.98110000E+0,0.00000000E+0 - ,0.14426000E+3,0.152E+3,0.600E+1,0.98110000E+0,0.00000000E+0 - ,0.10163150E+3,0.152E+3,0.700E+1,0.98110000E+0,0.00000000E+0 - ,0.77336500E+2,0.152E+3,0.800E+1,0.98110000E+0,0.00000000E+0 - ,0.58833200E+2,0.152E+3,0.900E+1,0.98110000E+0,0.00000000E+0 - ,0.45404400E+2,0.152E+3,0.100E+2,0.98110000E+0,0.00000000E+0 - ,0.62230990E+3,0.152E+3,0.110E+2,0.98110000E+0,0.00000000E+0 - ,0.48978200E+3,0.152E+3,0.120E+2,0.98110000E+0,0.00000000E+0 - ,0.45524770E+3,0.152E+3,0.130E+2,0.98110000E+0,0.00000000E+0 - ,0.36255610E+3,0.152E+3,0.140E+2,0.98110000E+0,0.00000000E+0 - ,0.28512390E+3,0.152E+3,0.150E+2,0.98110000E+0,0.00000000E+0 - ,0.23785710E+3,0.152E+3,0.160E+2,0.98110000E+0,0.00000000E+0 - ,0.19521310E+3,0.152E+3,0.170E+2,0.98110000E+0,0.00000000E+0 - ,0.16033310E+3,0.152E+3,0.180E+2,0.98110000E+0,0.00000000E+0 - ,0.10157738E+4,0.152E+3,0.190E+2,0.98110000E+0,0.00000000E+0 - ,0.85290360E+3,0.152E+3,0.200E+2,0.98110000E+0,0.00000000E+0 - ,0.70737690E+3,0.152E+3,0.210E+2,0.98110000E+0,0.00000000E+0 - ,0.68556870E+3,0.152E+3,0.220E+2,0.98110000E+0,0.00000000E+0 - ,0.62913900E+3,0.152E+3,0.230E+2,0.98110000E+0,0.00000000E+0 - ,0.49588010E+3,0.152E+3,0.240E+2,0.98110000E+0,0.00000000E+0 - ,0.54334380E+3,0.152E+3,0.250E+2,0.98110000E+0,0.00000000E+0 - ,0.42683610E+3,0.152E+3,0.260E+2,0.98110000E+0,0.00000000E+0 - ,0.45431700E+3,0.152E+3,0.270E+2,0.98110000E+0,0.00000000E+0 - ,0.46700090E+3,0.152E+3,0.280E+2,0.98110000E+0,0.00000000E+0 - ,0.35818700E+3,0.152E+3,0.290E+2,0.98110000E+0,0.00000000E+0 - ,0.37006740E+3,0.152E+3,0.300E+2,0.98110000E+0,0.00000000E+0 - ,0.43744170E+3,0.152E+3,0.310E+2,0.98110000E+0,0.00000000E+0 - ,0.38889460E+3,0.152E+3,0.320E+2,0.98110000E+0,0.00000000E+0 - ,0.33402630E+3,0.152E+3,0.330E+2,0.98110000E+0,0.00000000E+0 - ,0.30096170E+3,0.152E+3,0.340E+2,0.98110000E+0,0.00000000E+0 - ,0.26444460E+3,0.152E+3,0.350E+2,0.98110000E+0,0.00000000E+0 - ,0.23079470E+3,0.152E+3,0.360E+2,0.98110000E+0,0.00000000E+0 - ,0.11403397E+4,0.152E+3,0.370E+2,0.98110000E+0,0.00000000E+0 - ,0.10156122E+4,0.152E+3,0.380E+2,0.98110000E+0,0.00000000E+0 - ,0.89573040E+3,0.152E+3,0.390E+2,0.98110000E+0,0.00000000E+0 - ,0.80842520E+3,0.152E+3,0.400E+2,0.98110000E+0,0.00000000E+0 - ,0.73920970E+3,0.152E+3,0.410E+2,0.98110000E+0,0.00000000E+0 - ,0.57337000E+3,0.152E+3,0.420E+2,0.98110000E+0,0.00000000E+0 - ,0.63864620E+3,0.152E+3,0.430E+2,0.98110000E+0,0.00000000E+0 - ,0.48901000E+3,0.152E+3,0.440E+2,0.98110000E+0,0.00000000E+0 - ,0.53445110E+3,0.152E+3,0.450E+2,0.98110000E+0,0.00000000E+0 - ,0.49643130E+3,0.152E+3,0.460E+2,0.98110000E+0,0.00000000E+0 - ,0.41359130E+3,0.152E+3,0.470E+2,0.98110000E+0,0.00000000E+0 - ,0.43835340E+3,0.152E+3,0.480E+2,0.98110000E+0,0.00000000E+0 - ,0.54729130E+3,0.152E+3,0.490E+2,0.98110000E+0,0.00000000E+0 - ,0.50938490E+3,0.152E+3,0.500E+2,0.98110000E+0,0.00000000E+0 - ,0.45675890E+3,0.152E+3,0.510E+2,0.98110000E+0,0.00000000E+0 - ,0.42531520E+3,0.152E+3,0.520E+2,0.98110000E+0,0.00000000E+0 - ,0.38599880E+3,0.152E+3,0.530E+2,0.98110000E+0,0.00000000E+0 - ,0.34821640E+3,0.152E+3,0.540E+2,0.98110000E+0,0.00000000E+0 - ,0.13899562E+4,0.152E+3,0.550E+2,0.98110000E+0,0.00000000E+0 - ,0.12920505E+4,0.152E+3,0.560E+2,0.98110000E+0,0.00000000E+0 - ,0.11428009E+4,0.152E+3,0.570E+2,0.98110000E+0,0.00000000E+0 - ,0.53897800E+3,0.152E+3,0.580E+2,0.98110000E+0,0.27991000E+1 - ,0.11473718E+4,0.152E+3,0.590E+2,0.98110000E+0,0.00000000E+0 - ,0.11029411E+4,0.152E+3,0.600E+2,0.98110000E+0,0.00000000E+0 - ,0.10755989E+4,0.152E+3,0.610E+2,0.98110000E+0,0.00000000E+0 - ,0.10504168E+4,0.152E+3,0.620E+2,0.98110000E+0,0.00000000E+0 - ,0.10280990E+4,0.152E+3,0.630E+2,0.98110000E+0,0.00000000E+0 - ,0.81457180E+3,0.152E+3,0.640E+2,0.98110000E+0,0.00000000E+0 - ,0.90749290E+3,0.152E+3,0.650E+2,0.98110000E+0,0.00000000E+0 - ,0.87640540E+3,0.152E+3,0.660E+2,0.98110000E+0,0.00000000E+0 - ,0.92881650E+3,0.152E+3,0.670E+2,0.98110000E+0,0.00000000E+0 - ,0.90926160E+3,0.152E+3,0.680E+2,0.98110000E+0,0.00000000E+0 - ,0.89171060E+3,0.152E+3,0.690E+2,0.98110000E+0,0.00000000E+0 - ,0.88100370E+3,0.152E+3,0.700E+2,0.98110000E+0,0.00000000E+0 - ,0.74613080E+3,0.152E+3,0.710E+2,0.98110000E+0,0.00000000E+0 - ,0.73873540E+3,0.152E+3,0.720E+2,0.98110000E+0,0.00000000E+0 - ,0.67688650E+3,0.152E+3,0.730E+2,0.98110000E+0,0.00000000E+0 - ,0.57338870E+3,0.152E+3,0.740E+2,0.98110000E+0,0.00000000E+0 - ,0.58418960E+3,0.152E+3,0.750E+2,0.98110000E+0,0.00000000E+0 - ,0.53122090E+3,0.152E+3,0.760E+2,0.98110000E+0,0.00000000E+0 - ,0.48779780E+3,0.152E+3,0.770E+2,0.98110000E+0,0.00000000E+0 - ,0.40633480E+3,0.152E+3,0.780E+2,0.98110000E+0,0.00000000E+0 - ,0.38005290E+3,0.152E+3,0.790E+2,0.98110000E+0,0.00000000E+0 - ,0.39145330E+3,0.152E+3,0.800E+2,0.98110000E+0,0.00000000E+0 - ,0.56288150E+3,0.152E+3,0.810E+2,0.98110000E+0,0.00000000E+0 - ,0.55306450E+3,0.152E+3,0.820E+2,0.98110000E+0,0.00000000E+0 - ,0.51099880E+3,0.152E+3,0.830E+2,0.98110000E+0,0.00000000E+0 - ,0.48888150E+3,0.152E+3,0.840E+2,0.98110000E+0,0.00000000E+0 - ,0.45282060E+3,0.152E+3,0.850E+2,0.98110000E+0,0.00000000E+0 - ,0.41635580E+3,0.152E+3,0.860E+2,0.98110000E+0,0.00000000E+0 - ,0.13196282E+4,0.152E+3,0.870E+2,0.98110000E+0,0.00000000E+0 - ,0.12821564E+4,0.152E+3,0.880E+2,0.98110000E+0,0.00000000E+0 - ,0.11403381E+4,0.152E+3,0.890E+2,0.98110000E+0,0.00000000E+0 - ,0.10319646E+4,0.152E+3,0.900E+2,0.98110000E+0,0.00000000E+0 - ,0.10211167E+4,0.152E+3,0.910E+2,0.98110000E+0,0.00000000E+0 - ,0.98886570E+3,0.152E+3,0.920E+2,0.98110000E+0,0.00000000E+0 - ,0.10136901E+4,0.152E+3,0.930E+2,0.98110000E+0,0.00000000E+0 - ,0.98242950E+3,0.152E+3,0.940E+2,0.98110000E+0,0.00000000E+0 - ,0.56715600E+2,0.152E+3,0.101E+3,0.98110000E+0,0.00000000E+0 - ,0.17998120E+3,0.152E+3,0.103E+3,0.98110000E+0,0.98650000E+0 - ,0.23026410E+3,0.152E+3,0.104E+3,0.98110000E+0,0.98080000E+0 - ,0.17825090E+3,0.152E+3,0.105E+3,0.98110000E+0,0.97060000E+0 - ,0.13527200E+3,0.152E+3,0.106E+3,0.98110000E+0,0.98680000E+0 - ,0.94770500E+2,0.152E+3,0.107E+3,0.98110000E+0,0.99440000E+0 - ,0.69431700E+2,0.152E+3,0.108E+3,0.98110000E+0,0.99250000E+0 - ,0.48103700E+2,0.152E+3,0.109E+3,0.98110000E+0,0.99820000E+0 - ,0.26236970E+3,0.152E+3,0.111E+3,0.98110000E+0,0.96840000E+0 - ,0.40525290E+3,0.152E+3,0.112E+3,0.98110000E+0,0.96280000E+0 - ,0.41338560E+3,0.152E+3,0.113E+3,0.98110000E+0,0.96480000E+0 - ,0.33559140E+3,0.152E+3,0.114E+3,0.98110000E+0,0.95070000E+0 - ,0.27683720E+3,0.152E+3,0.115E+3,0.98110000E+0,0.99470000E+0 - ,0.23520590E+3,0.152E+3,0.116E+3,0.98110000E+0,0.99480000E+0 - ,0.19317040E+3,0.152E+3,0.117E+3,0.98110000E+0,0.99720000E+0 - ,0.36384820E+3,0.152E+3,0.119E+3,0.98110000E+0,0.97670000E+0 - ,0.68296210E+3,0.152E+3,0.120E+3,0.98110000E+0,0.98310000E+0 - ,0.36699000E+3,0.152E+3,0.121E+3,0.98110000E+0,0.18627000E+1 - ,0.35440290E+3,0.152E+3,0.122E+3,0.98110000E+0,0.18299000E+1 - ,0.34726480E+3,0.152E+3,0.123E+3,0.98110000E+0,0.19138000E+1 - ,0.34370870E+3,0.152E+3,0.124E+3,0.98110000E+0,0.18269000E+1 - ,0.31777500E+3,0.152E+3,0.125E+3,0.98110000E+0,0.16406000E+1 - ,0.29450790E+3,0.152E+3,0.126E+3,0.98110000E+0,0.16483000E+1 - ,0.28094820E+3,0.152E+3,0.127E+3,0.98110000E+0,0.17149000E+1 - ,0.27455800E+3,0.152E+3,0.128E+3,0.98110000E+0,0.17937000E+1 - ,0.27027830E+3,0.152E+3,0.129E+3,0.98110000E+0,0.95760000E+0 - ,0.25527130E+3,0.152E+3,0.130E+3,0.98110000E+0,0.19419000E+1 - ,0.41170180E+3,0.152E+3,0.131E+3,0.98110000E+0,0.96010000E+0 - ,0.36448820E+3,0.152E+3,0.132E+3,0.98110000E+0,0.94340000E+0 - ,0.32849090E+3,0.152E+3,0.133E+3,0.98110000E+0,0.98890000E+0 - ,0.30105670E+3,0.152E+3,0.134E+3,0.98110000E+0,0.99010000E+0 - ,0.26622780E+3,0.152E+3,0.135E+3,0.98110000E+0,0.99740000E+0 - ,0.43493910E+3,0.152E+3,0.137E+3,0.98110000E+0,0.97380000E+0 - ,0.83036610E+3,0.152E+3,0.138E+3,0.98110000E+0,0.98010000E+0 - ,0.64326970E+3,0.152E+3,0.139E+3,0.98110000E+0,0.19153000E+1 - ,0.48508560E+3,0.152E+3,0.140E+3,0.98110000E+0,0.19355000E+1 - ,0.48977500E+3,0.152E+3,0.141E+3,0.98110000E+0,0.19545000E+1 - ,0.45747170E+3,0.152E+3,0.142E+3,0.98110000E+0,0.19420000E+1 - ,0.50987810E+3,0.152E+3,0.143E+3,0.98110000E+0,0.16682000E+1 - ,0.40053650E+3,0.152E+3,0.144E+3,0.98110000E+0,0.18584000E+1 - ,0.37486560E+3,0.152E+3,0.145E+3,0.98110000E+0,0.19003000E+1 - ,0.34838020E+3,0.152E+3,0.146E+3,0.98110000E+0,0.18630000E+1 - ,0.33677710E+3,0.152E+3,0.147E+3,0.98110000E+0,0.96790000E+0 - ,0.33432410E+3,0.152E+3,0.148E+3,0.98110000E+0,0.19539000E+1 - ,0.52288630E+3,0.152E+3,0.149E+3,0.98110000E+0,0.96330000E+0 - ,0.47620870E+3,0.152E+3,0.150E+3,0.98110000E+0,0.95140000E+0 - ,0.44801730E+3,0.152E+3,0.151E+3,0.98110000E+0,0.97490000E+0 - ,0.42510150E+3,0.152E+3,0.152E+3,0.98110000E+0,0.98110000E+0 - ,0.32815100E+2,0.153E+3,0.100E+1,0.99680000E+0,0.91180000E+0 - ,0.22271700E+2,0.153E+3,0.200E+1,0.99680000E+0,0.00000000E+0 - ,0.45439540E+3,0.153E+3,0.300E+1,0.99680000E+0,0.00000000E+0 - ,0.27643090E+3,0.153E+3,0.400E+1,0.99680000E+0,0.00000000E+0 - ,0.19192730E+3,0.153E+3,0.500E+1,0.99680000E+0,0.00000000E+0 - ,0.13262510E+3,0.153E+3,0.600E+1,0.99680000E+0,0.00000000E+0 - ,0.94299100E+2,0.153E+3,0.700E+1,0.99680000E+0,0.00000000E+0 - ,0.72235800E+2,0.153E+3,0.800E+1,0.99680000E+0,0.00000000E+0 - ,0.55268900E+2,0.153E+3,0.900E+1,0.99680000E+0,0.00000000E+0 - ,0.42851200E+2,0.153E+3,0.100E+2,0.99680000E+0,0.00000000E+0 - ,0.54528550E+3,0.153E+3,0.110E+2,0.99680000E+0,0.00000000E+0 - ,0.43644520E+3,0.153E+3,0.120E+2,0.99680000E+0,0.00000000E+0 - ,0.40871490E+3,0.153E+3,0.130E+2,0.99680000E+0,0.00000000E+0 - ,0.32881570E+3,0.153E+3,0.140E+2,0.99680000E+0,0.00000000E+0 - ,0.26094460E+3,0.153E+3,0.150E+2,0.99680000E+0,0.00000000E+0 - ,0.21904300E+3,0.153E+3,0.160E+2,0.99680000E+0,0.00000000E+0 - ,0.18086040E+3,0.153E+3,0.170E+2,0.99680000E+0,0.00000000E+0 - ,0.14934300E+3,0.153E+3,0.180E+2,0.99680000E+0,0.00000000E+0 - ,0.88900260E+3,0.153E+3,0.190E+2,0.99680000E+0,0.00000000E+0 - ,0.75534780E+3,0.153E+3,0.200E+2,0.99680000E+0,0.00000000E+0 - ,0.62833170E+3,0.153E+3,0.210E+2,0.99680000E+0,0.00000000E+0 - ,0.61099490E+3,0.153E+3,0.220E+2,0.99680000E+0,0.00000000E+0 - ,0.56176430E+3,0.153E+3,0.230E+2,0.99680000E+0,0.00000000E+0 - ,0.44344010E+3,0.153E+3,0.240E+2,0.99680000E+0,0.00000000E+0 - ,0.48650250E+3,0.153E+3,0.250E+2,0.99680000E+0,0.00000000E+0 - ,0.38289000E+3,0.153E+3,0.260E+2,0.99680000E+0,0.00000000E+0 - ,0.40860640E+3,0.153E+3,0.270E+2,0.99680000E+0,0.00000000E+0 - ,0.41915920E+3,0.153E+3,0.280E+2,0.99680000E+0,0.00000000E+0 - ,0.32203460E+3,0.153E+3,0.290E+2,0.99680000E+0,0.00000000E+0 - ,0.33424140E+3,0.153E+3,0.300E+2,0.99680000E+0,0.00000000E+0 - ,0.39422890E+3,0.153E+3,0.310E+2,0.99680000E+0,0.00000000E+0 - ,0.35311560E+3,0.153E+3,0.320E+2,0.99680000E+0,0.00000000E+0 - ,0.30552140E+3,0.153E+3,0.330E+2,0.99680000E+0,0.00000000E+0 - ,0.27661090E+3,0.153E+3,0.340E+2,0.99680000E+0,0.00000000E+0 - ,0.24427520E+3,0.153E+3,0.350E+2,0.99680000E+0,0.00000000E+0 - ,0.21420040E+3,0.153E+3,0.360E+2,0.99680000E+0,0.00000000E+0 - ,0.99978710E+3,0.153E+3,0.370E+2,0.99680000E+0,0.00000000E+0 - ,0.89949300E+3,0.153E+3,0.380E+2,0.99680000E+0,0.00000000E+0 - ,0.79779010E+3,0.153E+3,0.390E+2,0.99680000E+0,0.00000000E+0 - ,0.72272400E+3,0.153E+3,0.400E+2,0.99680000E+0,0.00000000E+0 - ,0.66260680E+3,0.153E+3,0.410E+2,0.99680000E+0,0.00000000E+0 - ,0.51659320E+3,0.153E+3,0.420E+2,0.99680000E+0,0.00000000E+0 - ,0.57428050E+3,0.153E+3,0.430E+2,0.99680000E+0,0.00000000E+0 - ,0.44217100E+3,0.153E+3,0.440E+2,0.99680000E+0,0.00000000E+0 - ,0.48282170E+3,0.153E+3,0.450E+2,0.99680000E+0,0.00000000E+0 - ,0.44920610E+3,0.153E+3,0.460E+2,0.99680000E+0,0.00000000E+0 - ,0.37444670E+3,0.153E+3,0.470E+2,0.99680000E+0,0.00000000E+0 - ,0.39749790E+3,0.153E+3,0.480E+2,0.99680000E+0,0.00000000E+0 - ,0.49366250E+3,0.153E+3,0.490E+2,0.99680000E+0,0.00000000E+0 - ,0.46207160E+3,0.153E+3,0.500E+2,0.99680000E+0,0.00000000E+0 - ,0.41687150E+3,0.153E+3,0.510E+2,0.99680000E+0,0.00000000E+0 - ,0.38970290E+3,0.153E+3,0.520E+2,0.99680000E+0,0.00000000E+0 - ,0.35521750E+3,0.153E+3,0.530E+2,0.99680000E+0,0.00000000E+0 - ,0.32180290E+3,0.153E+3,0.540E+2,0.99680000E+0,0.00000000E+0 - ,0.12196272E+4,0.153E+3,0.550E+2,0.99680000E+0,0.00000000E+0 - ,0.11429378E+4,0.153E+3,0.560E+2,0.99680000E+0,0.00000000E+0 - ,0.10164155E+4,0.153E+3,0.570E+2,0.99680000E+0,0.00000000E+0 - ,0.49161500E+3,0.153E+3,0.580E+2,0.99680000E+0,0.27991000E+1 - ,0.10169588E+4,0.153E+3,0.590E+2,0.99680000E+0,0.00000000E+0 - ,0.97834710E+3,0.153E+3,0.600E+2,0.99680000E+0,0.00000000E+0 - ,0.95429670E+3,0.153E+3,0.610E+2,0.99680000E+0,0.00000000E+0 - ,0.93211660E+3,0.153E+3,0.620E+2,0.99680000E+0,0.00000000E+0 - ,0.91246710E+3,0.153E+3,0.630E+2,0.99680000E+0,0.00000000E+0 - ,0.72800530E+3,0.153E+3,0.640E+2,0.99680000E+0,0.00000000E+0 - ,0.80453430E+3,0.153E+3,0.650E+2,0.99680000E+0,0.00000000E+0 - ,0.77785480E+3,0.153E+3,0.660E+2,0.99680000E+0,0.00000000E+0 - ,0.82536440E+3,0.153E+3,0.670E+2,0.99680000E+0,0.00000000E+0 - ,0.80806540E+3,0.153E+3,0.680E+2,0.99680000E+0,0.00000000E+0 - ,0.79260610E+3,0.153E+3,0.690E+2,0.99680000E+0,0.00000000E+0 - ,0.78284050E+3,0.153E+3,0.700E+2,0.99680000E+0,0.00000000E+0 - ,0.66614790E+3,0.153E+3,0.710E+2,0.99680000E+0,0.00000000E+0 - ,0.66319200E+3,0.153E+3,0.720E+2,0.99680000E+0,0.00000000E+0 - ,0.61001430E+3,0.153E+3,0.730E+2,0.99680000E+0,0.00000000E+0 - ,0.51873530E+3,0.153E+3,0.740E+2,0.99680000E+0,0.00000000E+0 - ,0.52912210E+3,0.153E+3,0.750E+2,0.99680000E+0,0.00000000E+0 - ,0.48278010E+3,0.153E+3,0.760E+2,0.99680000E+0,0.00000000E+0 - ,0.44456400E+3,0.153E+3,0.770E+2,0.99680000E+0,0.00000000E+0 - ,0.37168100E+3,0.153E+3,0.780E+2,0.99680000E+0,0.00000000E+0 - ,0.34813080E+3,0.153E+3,0.790E+2,0.99680000E+0,0.00000000E+0 - ,0.35883830E+3,0.153E+3,0.800E+2,0.99680000E+0,0.00000000E+0 - ,0.50911500E+3,0.153E+3,0.810E+2,0.99680000E+0,0.00000000E+0 - ,0.50219660E+3,0.153E+3,0.820E+2,0.99680000E+0,0.00000000E+0 - ,0.46641830E+3,0.153E+3,0.830E+2,0.99680000E+0,0.00000000E+0 - ,0.44766490E+3,0.153E+3,0.840E+2,0.99680000E+0,0.00000000E+0 - ,0.41630430E+3,0.153E+3,0.850E+2,0.99680000E+0,0.00000000E+0 - ,0.38423110E+3,0.153E+3,0.860E+2,0.99680000E+0,0.00000000E+0 - ,0.11630702E+4,0.153E+3,0.870E+2,0.99680000E+0,0.00000000E+0 - ,0.11376470E+4,0.153E+3,0.880E+2,0.99680000E+0,0.00000000E+0 - ,0.10167803E+4,0.153E+3,0.890E+2,0.99680000E+0,0.00000000E+0 - ,0.92598120E+3,0.153E+3,0.900E+2,0.99680000E+0,0.00000000E+0 - ,0.91390750E+3,0.153E+3,0.910E+2,0.99680000E+0,0.00000000E+0 - ,0.88520210E+3,0.153E+3,0.920E+2,0.99680000E+0,0.00000000E+0 - ,0.90396880E+3,0.153E+3,0.930E+2,0.99680000E+0,0.00000000E+0 - ,0.87665190E+3,0.153E+3,0.940E+2,0.99680000E+0,0.00000000E+0 - ,0.51949600E+2,0.153E+3,0.101E+3,0.99680000E+0,0.00000000E+0 - ,0.16143030E+3,0.153E+3,0.103E+3,0.99680000E+0,0.98650000E+0 - ,0.20721850E+3,0.153E+3,0.104E+3,0.99680000E+0,0.98080000E+0 - ,0.16249390E+3,0.153E+3,0.105E+3,0.99680000E+0,0.97060000E+0 - ,0.12439580E+3,0.153E+3,0.106E+3,0.99680000E+0,0.98680000E+0 - ,0.87986900E+2,0.153E+3,0.107E+3,0.99680000E+0,0.99440000E+0 - ,0.64976400E+2,0.153E+3,0.108E+3,0.99680000E+0,0.99250000E+0 - ,0.45461800E+2,0.153E+3,0.109E+3,0.99680000E+0,0.99820000E+0 - ,0.23487760E+3,0.153E+3,0.111E+3,0.99680000E+0,0.96840000E+0 - ,0.36232580E+3,0.153E+3,0.112E+3,0.99680000E+0,0.96280000E+0 - ,0.37186150E+3,0.153E+3,0.113E+3,0.99680000E+0,0.96480000E+0 - ,0.30487150E+3,0.153E+3,0.114E+3,0.99680000E+0,0.95070000E+0 - ,0.25346770E+3,0.153E+3,0.115E+3,0.99680000E+0,0.99470000E+0 - ,0.21658660E+3,0.153E+3,0.116E+3,0.99680000E+0,0.99480000E+0 - ,0.17895810E+3,0.153E+3,0.117E+3,0.99680000E+0,0.99720000E+0 - ,0.32822070E+3,0.153E+3,0.119E+3,0.99680000E+0,0.97670000E+0 - ,0.60618590E+3,0.153E+3,0.120E+3,0.99680000E+0,0.98310000E+0 - ,0.33318010E+3,0.153E+3,0.121E+3,0.99680000E+0,0.18627000E+1 - ,0.32194330E+3,0.153E+3,0.122E+3,0.99680000E+0,0.18299000E+1 - ,0.31543490E+3,0.153E+3,0.123E+3,0.99680000E+0,0.19138000E+1 - ,0.31193950E+3,0.153E+3,0.124E+3,0.99680000E+0,0.18269000E+1 - ,0.28957840E+3,0.153E+3,0.125E+3,0.99680000E+0,0.16406000E+1 - ,0.26879340E+3,0.153E+3,0.126E+3,0.99680000E+0,0.16483000E+1 - ,0.25647210E+3,0.153E+3,0.127E+3,0.99680000E+0,0.17149000E+1 - ,0.25055360E+3,0.153E+3,0.128E+3,0.99680000E+0,0.17937000E+1 - ,0.24584350E+3,0.153E+3,0.129E+3,0.99680000E+0,0.95760000E+0 - ,0.23356320E+3,0.153E+3,0.130E+3,0.99680000E+0,0.19419000E+1 - ,0.37176550E+3,0.153E+3,0.131E+3,0.99680000E+0,0.96010000E+0 - ,0.33159870E+3,0.153E+3,0.132E+3,0.99680000E+0,0.94340000E+0 - ,0.30060430E+3,0.153E+3,0.133E+3,0.99680000E+0,0.98890000E+0 - ,0.27668620E+3,0.153E+3,0.134E+3,0.99680000E+0,0.99010000E+0 - ,0.24586470E+3,0.153E+3,0.135E+3,0.99680000E+0,0.99740000E+0 - ,0.39318090E+3,0.153E+3,0.137E+3,0.99680000E+0,0.97380000E+0 - ,0.73690210E+3,0.153E+3,0.138E+3,0.99680000E+0,0.98010000E+0 - ,0.57738050E+3,0.153E+3,0.139E+3,0.99680000E+0,0.19153000E+1 - ,0.44044740E+3,0.153E+3,0.140E+3,0.99680000E+0,0.19355000E+1 - ,0.44464020E+3,0.153E+3,0.141E+3,0.99680000E+0,0.19545000E+1 - ,0.41612070E+3,0.153E+3,0.142E+3,0.99680000E+0,0.19420000E+1 - ,0.46132230E+3,0.153E+3,0.143E+3,0.99680000E+0,0.16682000E+1 - ,0.36592820E+3,0.153E+3,0.144E+3,0.99680000E+0,0.18584000E+1 - ,0.34272790E+3,0.153E+3,0.145E+3,0.99680000E+0,0.19003000E+1 - ,0.31886290E+3,0.153E+3,0.146E+3,0.99680000E+0,0.18630000E+1 - ,0.30804750E+3,0.153E+3,0.147E+3,0.99680000E+0,0.96790000E+0 - ,0.30665490E+3,0.153E+3,0.148E+3,0.99680000E+0,0.19539000E+1 - ,0.47264410E+3,0.153E+3,0.149E+3,0.99680000E+0,0.96330000E+0 - ,0.43305890E+3,0.153E+3,0.150E+3,0.99680000E+0,0.95140000E+0 - ,0.40924850E+3,0.153E+3,0.151E+3,0.99680000E+0,0.97490000E+0 - ,0.38959960E+3,0.153E+3,0.152E+3,0.99680000E+0,0.98110000E+0 - ,0.35849950E+3,0.153E+3,0.153E+3,0.99680000E+0,0.99680000E+0 - ,0.42305800E+2,0.155E+3,0.100E+1,0.99090000E+0,0.91180000E+0 - ,0.27469500E+2,0.155E+3,0.200E+1,0.99090000E+0,0.00000000E+0 - ,0.73291200E+3,0.155E+3,0.300E+1,0.99090000E+0,0.00000000E+0 - ,0.39940200E+3,0.155E+3,0.400E+1,0.99090000E+0,0.00000000E+0 - ,0.26223870E+3,0.155E+3,0.500E+1,0.99090000E+0,0.00000000E+0 - ,0.17427180E+3,0.155E+3,0.600E+1,0.99090000E+0,0.00000000E+0 - ,0.12049820E+3,0.155E+3,0.700E+1,0.99090000E+0,0.00000000E+0 - ,0.90530300E+2,0.155E+3,0.800E+1,0.99090000E+0,0.00000000E+0 - ,0.68123900E+2,0.155E+3,0.900E+1,0.99090000E+0,0.00000000E+0 - ,0.52104100E+2,0.155E+3,0.100E+2,0.99090000E+0,0.00000000E+0 - ,0.87326650E+3,0.155E+3,0.110E+2,0.99090000E+0,0.00000000E+0 - ,0.64218460E+3,0.155E+3,0.120E+2,0.99090000E+0,0.00000000E+0 - ,0.58368500E+3,0.155E+3,0.130E+2,0.99090000E+0,0.00000000E+0 - ,0.45161710E+3,0.155E+3,0.140E+2,0.99090000E+0,0.00000000E+0 - ,0.34740300E+3,0.155E+3,0.150E+2,0.99090000E+0,0.00000000E+0 - ,0.28604180E+3,0.155E+3,0.160E+2,0.99090000E+0,0.00000000E+0 - ,0.23194830E+3,0.155E+3,0.170E+2,0.99090000E+0,0.00000000E+0 - ,0.18859500E+3,0.155E+3,0.180E+2,0.99090000E+0,0.00000000E+0 - ,0.14495860E+4,0.155E+3,0.190E+2,0.99090000E+0,0.00000000E+0 - ,0.11498295E+4,0.155E+3,0.200E+2,0.99090000E+0,0.00000000E+0 - ,0.94227450E+3,0.155E+3,0.210E+2,0.99090000E+0,0.00000000E+0 - ,0.90422250E+3,0.155E+3,0.220E+2,0.99090000E+0,0.00000000E+0 - ,0.82477800E+3,0.155E+3,0.230E+2,0.99090000E+0,0.00000000E+0 - ,0.65006270E+3,0.155E+3,0.240E+2,0.99090000E+0,0.00000000E+0 - ,0.70614120E+3,0.155E+3,0.250E+2,0.99090000E+0,0.00000000E+0 - ,0.55409250E+3,0.155E+3,0.260E+2,0.99090000E+0,0.00000000E+0 - ,0.58184580E+3,0.155E+3,0.270E+2,0.99090000E+0,0.00000000E+0 - ,0.60158080E+3,0.155E+3,0.280E+2,0.99090000E+0,0.00000000E+0 - ,0.46170190E+3,0.155E+3,0.290E+2,0.99090000E+0,0.00000000E+0 - ,0.46787310E+3,0.155E+3,0.300E+2,0.99090000E+0,0.00000000E+0 - ,0.55650160E+3,0.155E+3,0.310E+2,0.99090000E+0,0.00000000E+0 - ,0.48371170E+3,0.155E+3,0.320E+2,0.99090000E+0,0.00000000E+0 - ,0.40779580E+3,0.155E+3,0.330E+2,0.99090000E+0,0.00000000E+0 - ,0.36352860E+3,0.155E+3,0.340E+2,0.99090000E+0,0.00000000E+0 - ,0.31607000E+3,0.155E+3,0.350E+2,0.99090000E+0,0.00000000E+0 - ,0.27329990E+3,0.155E+3,0.360E+2,0.99090000E+0,0.00000000E+0 - ,0.16207604E+4,0.155E+3,0.370E+2,0.99090000E+0,0.00000000E+0 - ,0.13728515E+4,0.155E+3,0.380E+2,0.99090000E+0,0.00000000E+0 - ,0.11863885E+4,0.155E+3,0.390E+2,0.99090000E+0,0.00000000E+0 - ,0.10577660E+4,0.155E+3,0.400E+2,0.99090000E+0,0.00000000E+0 - ,0.95979080E+3,0.155E+3,0.410E+2,0.99090000E+0,0.00000000E+0 - ,0.73514980E+3,0.155E+3,0.420E+2,0.99090000E+0,0.00000000E+0 - ,0.82258290E+3,0.155E+3,0.430E+2,0.99090000E+0,0.00000000E+0 - ,0.62119680E+3,0.155E+3,0.440E+2,0.99090000E+0,0.00000000E+0 - ,0.67827670E+3,0.155E+3,0.450E+2,0.99090000E+0,0.00000000E+0 - ,0.62700570E+3,0.155E+3,0.460E+2,0.99090000E+0,0.00000000E+0 - ,0.52450750E+3,0.155E+3,0.470E+2,0.99090000E+0,0.00000000E+0 - ,0.55025650E+3,0.155E+3,0.480E+2,0.99090000E+0,0.00000000E+0 - ,0.69737450E+3,0.155E+3,0.490E+2,0.99090000E+0,0.00000000E+0 - ,0.63676120E+3,0.155E+3,0.500E+2,0.99090000E+0,0.00000000E+0 - ,0.56125330E+3,0.155E+3,0.510E+2,0.99090000E+0,0.00000000E+0 - ,0.51758070E+3,0.155E+3,0.520E+2,0.99090000E+0,0.00000000E+0 - ,0.46507030E+3,0.155E+3,0.530E+2,0.99090000E+0,0.00000000E+0 - ,0.41576900E+3,0.155E+3,0.540E+2,0.99090000E+0,0.00000000E+0 - ,0.19759738E+4,0.155E+3,0.550E+2,0.99090000E+0,0.00000000E+0 - ,0.17600602E+4,0.155E+3,0.560E+2,0.99090000E+0,0.00000000E+0 - ,0.15249399E+4,0.155E+3,0.570E+2,0.99090000E+0,0.00000000E+0 - ,0.66483460E+3,0.155E+3,0.580E+2,0.99090000E+0,0.27991000E+1 - ,0.15520845E+4,0.155E+3,0.590E+2,0.99090000E+0,0.00000000E+0 - ,0.14864897E+4,0.155E+3,0.600E+2,0.99090000E+0,0.00000000E+0 - ,0.14481464E+4,0.155E+3,0.610E+2,0.99090000E+0,0.00000000E+0 - ,0.14129908E+4,0.155E+3,0.620E+2,0.99090000E+0,0.00000000E+0 - ,0.13817863E+4,0.155E+3,0.630E+2,0.99090000E+0,0.00000000E+0 - ,0.10715717E+4,0.155E+3,0.640E+2,0.99090000E+0,0.00000000E+0 - ,0.12355701E+4,0.155E+3,0.650E+2,0.99090000E+0,0.00000000E+0 - ,0.11888012E+4,0.155E+3,0.660E+2,0.99090000E+0,0.00000000E+0 - ,0.12416267E+4,0.155E+3,0.670E+2,0.99090000E+0,0.00000000E+0 - ,0.12147181E+4,0.155E+3,0.680E+2,0.99090000E+0,0.00000000E+0 - ,0.11902611E+4,0.155E+3,0.690E+2,0.99090000E+0,0.00000000E+0 - ,0.11769746E+4,0.155E+3,0.700E+2,0.99090000E+0,0.00000000E+0 - ,0.98243040E+3,0.155E+3,0.710E+2,0.99090000E+0,0.00000000E+0 - ,0.95327210E+3,0.155E+3,0.720E+2,0.99090000E+0,0.00000000E+0 - ,0.86345810E+3,0.155E+3,0.730E+2,0.99090000E+0,0.00000000E+0 - ,0.72569910E+3,0.155E+3,0.740E+2,0.99090000E+0,0.00000000E+0 - ,0.73587000E+3,0.155E+3,0.750E+2,0.99090000E+0,0.00000000E+0 - ,0.66279760E+3,0.155E+3,0.760E+2,0.99090000E+0,0.00000000E+0 - ,0.60405240E+3,0.155E+3,0.770E+2,0.99090000E+0,0.00000000E+0 - ,0.49959380E+3,0.155E+3,0.780E+2,0.99090000E+0,0.00000000E+0 - ,0.46588050E+3,0.155E+3,0.790E+2,0.99090000E+0,0.00000000E+0 - ,0.47788590E+3,0.155E+3,0.800E+2,0.99090000E+0,0.00000000E+0 - ,0.71477590E+3,0.155E+3,0.810E+2,0.99090000E+0,0.00000000E+0 - ,0.69152340E+3,0.155E+3,0.820E+2,0.99090000E+0,0.00000000E+0 - ,0.62890510E+3,0.155E+3,0.830E+2,0.99090000E+0,0.00000000E+0 - ,0.59653870E+3,0.155E+3,0.840E+2,0.99090000E+0,0.00000000E+0 - ,0.54712200E+3,0.155E+3,0.850E+2,0.99090000E+0,0.00000000E+0 - ,0.49878710E+3,0.155E+3,0.860E+2,0.99090000E+0,0.00000000E+0 - ,0.18443405E+4,0.155E+3,0.870E+2,0.99090000E+0,0.00000000E+0 - ,0.17284117E+4,0.155E+3,0.880E+2,0.99090000E+0,0.00000000E+0 - ,0.15078114E+4,0.155E+3,0.890E+2,0.99090000E+0,0.00000000E+0 - ,0.13366572E+4,0.155E+3,0.900E+2,0.99090000E+0,0.00000000E+0 - ,0.13367673E+4,0.155E+3,0.910E+2,0.99090000E+0,0.00000000E+0 - ,0.12938174E+4,0.155E+3,0.920E+2,0.99090000E+0,0.00000000E+0 - ,0.13431115E+4,0.155E+3,0.930E+2,0.99090000E+0,0.00000000E+0 - ,0.12984675E+4,0.155E+3,0.940E+2,0.99090000E+0,0.00000000E+0 - ,0.68953700E+2,0.155E+3,0.101E+3,0.99090000E+0,0.00000000E+0 - ,0.23141650E+3,0.155E+3,0.103E+3,0.99090000E+0,0.98650000E+0 - ,0.29414590E+3,0.155E+3,0.104E+3,0.99090000E+0,0.98080000E+0 - ,0.21963870E+3,0.155E+3,0.105E+3,0.99090000E+0,0.97060000E+0 - ,0.16367150E+3,0.155E+3,0.106E+3,0.99090000E+0,0.98680000E+0 - ,0.11242780E+3,0.155E+3,0.107E+3,0.99090000E+0,0.99440000E+0 - ,0.81084500E+2,0.155E+3,0.108E+3,0.99090000E+0,0.99250000E+0 - ,0.55078600E+2,0.155E+3,0.109E+3,0.99090000E+0,0.99820000E+0 - ,0.34006240E+3,0.155E+3,0.111E+3,0.99090000E+0,0.96840000E+0 - ,0.52756300E+3,0.155E+3,0.112E+3,0.99090000E+0,0.96280000E+0 - ,0.52732820E+3,0.155E+3,0.113E+3,0.99090000E+0,0.96480000E+0 - ,0.41648610E+3,0.155E+3,0.114E+3,0.99090000E+0,0.95070000E+0 - ,0.33711350E+3,0.155E+3,0.115E+3,0.99090000E+0,0.99470000E+0 - ,0.28296690E+3,0.155E+3,0.116E+3,0.99090000E+0,0.99480000E+0 - ,0.22958370E+3,0.155E+3,0.117E+3,0.99090000E+0,0.99720000E+0 - ,0.46551820E+3,0.155E+3,0.119E+3,0.99090000E+0,0.97670000E+0 - ,0.92179340E+3,0.155E+3,0.120E+3,0.99090000E+0,0.98310000E+0 - ,0.45790120E+3,0.155E+3,0.121E+3,0.99090000E+0,0.18627000E+1 - ,0.44205470E+3,0.155E+3,0.122E+3,0.99090000E+0,0.18299000E+1 - ,0.43331390E+3,0.155E+3,0.123E+3,0.99090000E+0,0.19138000E+1 - ,0.43010400E+3,0.155E+3,0.124E+3,0.99090000E+0,0.18269000E+1 - ,0.39208310E+3,0.155E+3,0.125E+3,0.99090000E+0,0.16406000E+1 - ,0.36204550E+3,0.155E+3,0.126E+3,0.99090000E+0,0.16483000E+1 - ,0.34544700E+3,0.155E+3,0.127E+3,0.99090000E+0,0.17149000E+1 - ,0.33794540E+3,0.155E+3,0.128E+3,0.99090000E+0,0.17937000E+1 - ,0.33608210E+3,0.155E+3,0.129E+3,0.99090000E+0,0.95760000E+0 - ,0.31158000E+3,0.155E+3,0.130E+3,0.99090000E+0,0.19419000E+1 - ,0.52074900E+3,0.155E+3,0.131E+3,0.99090000E+0,0.96010000E+0 - ,0.45117170E+3,0.155E+3,0.132E+3,0.99090000E+0,0.94340000E+0 - ,0.40064390E+3,0.155E+3,0.133E+3,0.99090000E+0,0.98890000E+0 - ,0.36372020E+3,0.155E+3,0.134E+3,0.99090000E+0,0.99010000E+0 - ,0.31838270E+3,0.155E+3,0.135E+3,0.99090000E+0,0.99740000E+0 - ,0.55397800E+3,0.155E+3,0.137E+3,0.99090000E+0,0.97380000E+0 - ,0.11249345E+4,0.155E+3,0.138E+3,0.99090000E+0,0.98010000E+0 - ,0.83761350E+3,0.155E+3,0.139E+3,0.99090000E+0,0.19153000E+1 - ,0.60719510E+3,0.155E+3,0.140E+3,0.99090000E+0,0.19355000E+1 - ,0.61320100E+3,0.155E+3,0.141E+3,0.99090000E+0,0.19545000E+1 - ,0.57026210E+3,0.155E+3,0.142E+3,0.99090000E+0,0.19420000E+1 - ,0.64766860E+3,0.155E+3,0.143E+3,0.99090000E+0,0.16682000E+1 - ,0.49283010E+3,0.155E+3,0.144E+3,0.99090000E+0,0.18584000E+1 - ,0.46081940E+3,0.155E+3,0.145E+3,0.99090000E+0,0.19003000E+1 - ,0.42732470E+3,0.155E+3,0.146E+3,0.99090000E+0,0.18630000E+1 - ,0.41377960E+3,0.155E+3,0.147E+3,0.99090000E+0,0.96790000E+0 - ,0.40654590E+3,0.155E+3,0.148E+3,0.99090000E+0,0.19539000E+1 - ,0.66184230E+3,0.155E+3,0.149E+3,0.99090000E+0,0.96330000E+0 - ,0.59127640E+3,0.155E+3,0.150E+3,0.99090000E+0,0.95140000E+0 - ,0.54930440E+3,0.155E+3,0.151E+3,0.99090000E+0,0.97490000E+0 - ,0.51701090E+3,0.155E+3,0.152E+3,0.99090000E+0,0.98110000E+0 - ,0.46948180E+3,0.155E+3,0.153E+3,0.99090000E+0,0.99680000E+0 - ,0.64909240E+3,0.155E+3,0.155E+3,0.99090000E+0,0.99090000E+0 - ,0.83014100E+2,0.156E+3,0.100E+1,0.97970000E+0,0.91180000E+0 - ,0.49923200E+2,0.156E+3,0.200E+1,0.97970000E+0,0.00000000E+0 - ,0.21804015E+4,0.156E+3,0.300E+1,0.97970000E+0,0.00000000E+0 - ,0.96110490E+3,0.156E+3,0.400E+1,0.97970000E+0,0.00000000E+0 - ,0.57230020E+3,0.156E+3,0.500E+1,0.97970000E+0,0.00000000E+0 - ,0.35484660E+3,0.156E+3,0.600E+1,0.97970000E+0,0.00000000E+0 - ,0.23350060E+3,0.156E+3,0.700E+1,0.97970000E+0,0.00000000E+0 - ,0.16960300E+3,0.156E+3,0.800E+1,0.97970000E+0,0.00000000E+0 - ,0.12408020E+3,0.156E+3,0.900E+1,0.97970000E+0,0.00000000E+0 - ,0.92849400E+2,0.156E+3,0.100E+2,0.97970000E+0,0.00000000E+0 - ,0.25659398E+4,0.156E+3,0.110E+2,0.97970000E+0,0.00000000E+0 - ,0.15996001E+4,0.156E+3,0.120E+2,0.97970000E+0,0.00000000E+0 - ,0.13814389E+4,0.156E+3,0.130E+2,0.97970000E+0,0.00000000E+0 - ,0.99489260E+3,0.156E+3,0.140E+2,0.97970000E+0,0.00000000E+0 - ,0.72325040E+3,0.156E+3,0.150E+2,0.97970000E+0,0.00000000E+0 - ,0.57533170E+3,0.156E+3,0.160E+2,0.97970000E+0,0.00000000E+0 - ,0.45158250E+3,0.156E+3,0.170E+2,0.97970000E+0,0.00000000E+0 - ,0.35719350E+3,0.156E+3,0.180E+2,0.97970000E+0,0.00000000E+0 - ,0.44958369E+4,0.156E+3,0.190E+2,0.97970000E+0,0.00000000E+0 - ,0.30704624E+4,0.156E+3,0.200E+2,0.97970000E+0,0.00000000E+0 - ,0.24434277E+4,0.156E+3,0.210E+2,0.97970000E+0,0.00000000E+0 - ,0.22946062E+4,0.156E+3,0.220E+2,0.97970000E+0,0.00000000E+0 - ,0.20640309E+4,0.156E+3,0.230E+2,0.97970000E+0,0.00000000E+0 - ,0.16327022E+4,0.156E+3,0.240E+2,0.97970000E+0,0.00000000E+0 - ,0.17320375E+4,0.156E+3,0.250E+2,0.97970000E+0,0.00000000E+0 - ,0.13596156E+4,0.156E+3,0.260E+2,0.97970000E+0,0.00000000E+0 - ,0.13759674E+4,0.156E+3,0.270E+2,0.97970000E+0,0.00000000E+0 - ,0.14425133E+4,0.156E+3,0.280E+2,0.97970000E+0,0.00000000E+0 - ,0.11138541E+4,0.156E+3,0.290E+2,0.97970000E+0,0.00000000E+0 - ,0.10720643E+4,0.156E+3,0.300E+2,0.97970000E+0,0.00000000E+0 - ,0.12954563E+4,0.156E+3,0.310E+2,0.97970000E+0,0.00000000E+0 - ,0.10627315E+4,0.156E+3,0.320E+2,0.97970000E+0,0.00000000E+0 - ,0.85391570E+3,0.156E+3,0.330E+2,0.97970000E+0,0.00000000E+0 - ,0.74014960E+3,0.156E+3,0.340E+2,0.97970000E+0,0.00000000E+0 - ,0.62555040E+3,0.156E+3,0.350E+2,0.97970000E+0,0.00000000E+0 - ,0.52735210E+3,0.156E+3,0.360E+2,0.97970000E+0,0.00000000E+0 - ,0.49979230E+4,0.156E+3,0.370E+2,0.97970000E+0,0.00000000E+0 - ,0.36976569E+4,0.156E+3,0.380E+2,0.97970000E+0,0.00000000E+0 - ,0.30451620E+4,0.156E+3,0.390E+2,0.97970000E+0,0.00000000E+0 - ,0.26376782E+4,0.156E+3,0.400E+2,0.97970000E+0,0.00000000E+0 - ,0.23521278E+4,0.156E+3,0.410E+2,0.97970000E+0,0.00000000E+0 - ,0.17503829E+4,0.156E+3,0.420E+2,0.97970000E+0,0.00000000E+0 - ,0.19809508E+4,0.156E+3,0.430E+2,0.97970000E+0,0.00000000E+0 - ,0.14476221E+4,0.156E+3,0.440E+2,0.97970000E+0,0.00000000E+0 - ,0.15723023E+4,0.156E+3,0.450E+2,0.97970000E+0,0.00000000E+0 - ,0.14360400E+4,0.156E+3,0.460E+2,0.97970000E+0,0.00000000E+0 - ,0.12194904E+4,0.156E+3,0.470E+2,0.97970000E+0,0.00000000E+0 - ,0.12412980E+4,0.156E+3,0.480E+2,0.97970000E+0,0.00000000E+0 - ,0.16356158E+4,0.156E+3,0.490E+2,0.97970000E+0,0.00000000E+0 - ,0.14200022E+4,0.156E+3,0.500E+2,0.97970000E+0,0.00000000E+0 - ,0.11973790E+4,0.156E+3,0.510E+2,0.97970000E+0,0.00000000E+0 - ,0.10767503E+4,0.156E+3,0.520E+2,0.97970000E+0,0.00000000E+0 - ,0.94225240E+3,0.156E+3,0.530E+2,0.97970000E+0,0.00000000E+0 - ,0.82205680E+3,0.156E+3,0.540E+2,0.97970000E+0,0.00000000E+0 - ,0.61419784E+4,0.156E+3,0.550E+2,0.97970000E+0,0.00000000E+0 - ,0.48451776E+4,0.156E+3,0.560E+2,0.97970000E+0,0.00000000E+0 - ,0.39942273E+4,0.156E+3,0.570E+2,0.97970000E+0,0.00000000E+0 - ,0.14330469E+4,0.156E+3,0.580E+2,0.97970000E+0,0.27991000E+1 - ,0.42139225E+4,0.156E+3,0.590E+2,0.97970000E+0,0.00000000E+0 - ,0.39873600E+4,0.156E+3,0.600E+2,0.97970000E+0,0.00000000E+0 - ,0.38737284E+4,0.156E+3,0.610E+2,0.97970000E+0,0.00000000E+0 - ,0.37706523E+4,0.156E+3,0.620E+2,0.97970000E+0,0.00000000E+0 - ,0.36789146E+4,0.156E+3,0.630E+2,0.97970000E+0,0.00000000E+0 - ,0.27207653E+4,0.156E+3,0.640E+2,0.97970000E+0,0.00000000E+0 - ,0.34419852E+4,0.156E+3,0.650E+2,0.97970000E+0,0.00000000E+0 - ,0.32989422E+4,0.156E+3,0.660E+2,0.97970000E+0,0.00000000E+0 - ,0.32598698E+4,0.156E+3,0.670E+2,0.97970000E+0,0.00000000E+0 - ,0.31836011E+4,0.156E+3,0.680E+2,0.97970000E+0,0.00000000E+0 - ,0.31125536E+4,0.156E+3,0.690E+2,0.97970000E+0,0.00000000E+0 - ,0.30835002E+4,0.156E+3,0.700E+2,0.97970000E+0,0.00000000E+0 - ,0.25019262E+4,0.156E+3,0.710E+2,0.97970000E+0,0.00000000E+0 - ,0.22987008E+4,0.156E+3,0.720E+2,0.97970000E+0,0.00000000E+0 - ,0.20237991E+4,0.156E+3,0.730E+2,0.97970000E+0,0.00000000E+0 - ,0.16732640E+4,0.156E+3,0.740E+2,0.97970000E+0,0.00000000E+0 - ,0.16751136E+4,0.156E+3,0.750E+2,0.97970000E+0,0.00000000E+0 - ,0.14722933E+4,0.156E+3,0.760E+2,0.97970000E+0,0.00000000E+0 - ,0.13162117E+4,0.156E+3,0.770E+2,0.97970000E+0,0.00000000E+0 - ,0.10706911E+4,0.156E+3,0.780E+2,0.97970000E+0,0.00000000E+0 - ,0.99139190E+3,0.156E+3,0.790E+2,0.97970000E+0,0.00000000E+0 - ,0.10048014E+4,0.156E+3,0.800E+2,0.97970000E+0,0.00000000E+0 - ,0.16688986E+4,0.156E+3,0.810E+2,0.97970000E+0,0.00000000E+0 - ,0.15461030E+4,0.156E+3,0.820E+2,0.97970000E+0,0.00000000E+0 - ,0.13487488E+4,0.156E+3,0.830E+2,0.97970000E+0,0.00000000E+0 - ,0.12508513E+4,0.156E+3,0.840E+2,0.97970000E+0,0.00000000E+0 - ,0.11176702E+4,0.156E+3,0.850E+2,0.97970000E+0,0.00000000E+0 - ,0.99586790E+3,0.156E+3,0.860E+2,0.97970000E+0,0.00000000E+0 - ,0.54979393E+4,0.156E+3,0.870E+2,0.97970000E+0,0.00000000E+0 - ,0.46433162E+4,0.156E+3,0.880E+2,0.97970000E+0,0.00000000E+0 - ,0.38656041E+4,0.156E+3,0.890E+2,0.97970000E+0,0.00000000E+0 - ,0.32597257E+4,0.156E+3,0.900E+2,0.97970000E+0,0.00000000E+0 - ,0.33538826E+4,0.156E+3,0.910E+2,0.97970000E+0,0.00000000E+0 - ,0.32402913E+4,0.156E+3,0.920E+2,0.97970000E+0,0.00000000E+0 - ,0.34630576E+4,0.156E+3,0.930E+2,0.97970000E+0,0.00000000E+0 - ,0.33272478E+4,0.156E+3,0.940E+2,0.97970000E+0,0.00000000E+0 - ,0.14256800E+3,0.156E+3,0.101E+3,0.97970000E+0,0.00000000E+0 - ,0.55107920E+3,0.156E+3,0.103E+3,0.97970000E+0,0.98650000E+0 - ,0.69284150E+3,0.156E+3,0.104E+3,0.97970000E+0,0.98080000E+0 - ,0.47105030E+3,0.156E+3,0.105E+3,0.97970000E+0,0.97060000E+0 - ,0.33492070E+3,0.156E+3,0.106E+3,0.97970000E+0,0.98680000E+0 - ,0.21815960E+3,0.156E+3,0.107E+3,0.97970000E+0,0.99440000E+0 - ,0.15070560E+3,0.156E+3,0.108E+3,0.97970000E+0,0.99250000E+0 - ,0.97192600E+2,0.156E+3,0.109E+3,0.97970000E+0,0.99820000E+0 - ,0.82695650E+3,0.156E+3,0.111E+3,0.97970000E+0,0.96840000E+0 - ,0.12989425E+4,0.156E+3,0.112E+3,0.97970000E+0,0.96280000E+0 - ,0.12335817E+4,0.156E+3,0.113E+3,0.97970000E+0,0.96480000E+0 - ,0.90965670E+3,0.156E+3,0.114E+3,0.97970000E+0,0.95070000E+0 - ,0.70099830E+3,0.156E+3,0.115E+3,0.97970000E+0,0.99470000E+0 - ,0.56985090E+3,0.156E+3,0.116E+3,0.97970000E+0,0.99480000E+0 - ,0.44736800E+3,0.156E+3,0.117E+3,0.97970000E+0,0.99720000E+0 - ,0.11041068E+4,0.156E+3,0.119E+3,0.97970000E+0,0.97670000E+0 - ,0.25056537E+4,0.156E+3,0.120E+3,0.97970000E+0,0.98310000E+0 - ,0.10130298E+4,0.156E+3,0.121E+3,0.97970000E+0,0.18627000E+1 - ,0.98236380E+3,0.156E+3,0.122E+3,0.97970000E+0,0.18299000E+1 - ,0.96327250E+3,0.156E+3,0.123E+3,0.97970000E+0,0.19138000E+1 - ,0.96365340E+3,0.156E+3,0.124E+3,0.97970000E+0,0.18269000E+1 - ,0.84521190E+3,0.156E+3,0.125E+3,0.97970000E+0,0.16406000E+1 - ,0.77366980E+3,0.156E+3,0.126E+3,0.97970000E+0,0.16483000E+1 - ,0.73950900E+3,0.156E+3,0.127E+3,0.97970000E+0,0.17149000E+1 - ,0.72552030E+3,0.156E+3,0.128E+3,0.97970000E+0,0.17937000E+1 - ,0.74098720E+3,0.156E+3,0.129E+3,0.97970000E+0,0.95760000E+0 - ,0.65373360E+3,0.156E+3,0.130E+3,0.97970000E+0,0.19419000E+1 - ,0.11948773E+4,0.156E+3,0.131E+3,0.97970000E+0,0.96010000E+0 - ,0.97957420E+3,0.156E+3,0.132E+3,0.97970000E+0,0.94340000E+0 - ,0.83693640E+3,0.156E+3,0.133E+3,0.97970000E+0,0.98890000E+0 - ,0.74102200E+3,0.156E+3,0.134E+3,0.97970000E+0,0.99010000E+0 - ,0.63113970E+3,0.156E+3,0.135E+3,0.97970000E+0,0.99740000E+0 - ,0.13013999E+4,0.156E+3,0.137E+3,0.97970000E+0,0.97380000E+0 - ,0.30957594E+4,0.156E+3,0.138E+3,0.97970000E+0,0.98010000E+0 - ,0.21010372E+4,0.156E+3,0.139E+3,0.97970000E+0,0.19153000E+1 - ,0.13604000E+4,0.156E+3,0.140E+3,0.97970000E+0,0.19355000E+1 - ,0.13693825E+4,0.156E+3,0.141E+3,0.97970000E+0,0.19545000E+1 - ,0.12660803E+4,0.156E+3,0.142E+3,0.97970000E+0,0.19420000E+1 - ,0.15162134E+4,0.156E+3,0.143E+3,0.97970000E+0,0.16682000E+1 - ,0.10564422E+4,0.156E+3,0.144E+3,0.97970000E+0,0.18584000E+1 - ,0.98676430E+3,0.156E+3,0.145E+3,0.97970000E+0,0.19003000E+1 - ,0.91052680E+3,0.156E+3,0.146E+3,0.97970000E+0,0.18630000E+1 - ,0.88540390E+3,0.156E+3,0.147E+3,0.97970000E+0,0.96790000E+0 - ,0.84515800E+3,0.156E+3,0.148E+3,0.97970000E+0,0.19539000E+1 - ,0.15259278E+4,0.156E+3,0.149E+3,0.97970000E+0,0.96330000E+0 - ,0.12966408E+4,0.156E+3,0.150E+3,0.97970000E+0,0.95140000E+0 - ,0.11653603E+4,0.156E+3,0.151E+3,0.97970000E+0,0.97490000E+0 - ,0.10738698E+4,0.156E+3,0.152E+3,0.97970000E+0,0.98110000E+0 - ,0.95154100E+3,0.156E+3,0.153E+3,0.97970000E+0,0.99680000E+0 - ,0.14690705E+4,0.156E+3,0.155E+3,0.97970000E+0,0.99090000E+0 - ,0.41717842E+4,0.156E+3,0.156E+3,0.97970000E+0,0.97970000E+0 - ,0.64690600E+2,0.157E+3,0.100E+1,0.19373000E+1,0.91180000E+0 - ,0.40332900E+2,0.157E+3,0.200E+1,0.19373000E+1,0.00000000E+0 - ,0.13841283E+4,0.157E+3,0.300E+1,0.19373000E+1,0.00000000E+0 - ,0.67673740E+3,0.157E+3,0.400E+1,0.19373000E+1,0.00000000E+0 - ,0.42308150E+3,0.157E+3,0.500E+1,0.19373000E+1,0.00000000E+0 - ,0.27142480E+3,0.157E+3,0.600E+1,0.19373000E+1,0.00000000E+0 - ,0.18293910E+3,0.157E+3,0.700E+1,0.19373000E+1,0.00000000E+0 - ,0.13503220E+3,0.157E+3,0.800E+1,0.19373000E+1,0.00000000E+0 - ,0.10010900E+3,0.157E+3,0.900E+1,0.19373000E+1,0.00000000E+0 - ,0.75679100E+2,0.157E+3,0.100E+2,0.19373000E+1,0.00000000E+0 - ,0.16377878E+4,0.157E+3,0.110E+2,0.19373000E+1,0.00000000E+0 - ,0.11067221E+4,0.157E+3,0.120E+2,0.19373000E+1,0.00000000E+0 - ,0.98043760E+3,0.157E+3,0.130E+2,0.19373000E+1,0.00000000E+0 - ,0.73212110E+3,0.157E+3,0.140E+2,0.19373000E+1,0.00000000E+0 - ,0.54746530E+3,0.157E+3,0.150E+2,0.19373000E+1,0.00000000E+0 - ,0.44287990E+3,0.157E+3,0.160E+2,0.19373000E+1,0.00000000E+0 - ,0.35314670E+3,0.157E+3,0.170E+2,0.19373000E+1,0.00000000E+0 - ,0.28303510E+3,0.157E+3,0.180E+2,0.19373000E+1,0.00000000E+0 - ,0.28009569E+4,0.157E+3,0.190E+2,0.19373000E+1,0.00000000E+0 - ,0.20504253E+4,0.157E+3,0.200E+2,0.19373000E+1,0.00000000E+0 - ,0.16557011E+4,0.157E+3,0.210E+2,0.19373000E+1,0.00000000E+0 - ,0.15712363E+4,0.157E+3,0.220E+2,0.19373000E+1,0.00000000E+0 - ,0.14231173E+4,0.157E+3,0.230E+2,0.19373000E+1,0.00000000E+0 - ,0.11226576E+4,0.157E+3,0.240E+2,0.19373000E+1,0.00000000E+0 - ,0.12061393E+4,0.157E+3,0.250E+2,0.19373000E+1,0.00000000E+0 - ,0.94568080E+3,0.157E+3,0.260E+2,0.19373000E+1,0.00000000E+0 - ,0.97598360E+3,0.157E+3,0.270E+2,0.19373000E+1,0.00000000E+0 - ,0.10161745E+4,0.157E+3,0.280E+2,0.19373000E+1,0.00000000E+0 - ,0.78128810E+3,0.157E+3,0.290E+2,0.19373000E+1,0.00000000E+0 - ,0.77266500E+3,0.157E+3,0.300E+2,0.19373000E+1,0.00000000E+0 - ,0.92637230E+3,0.157E+3,0.310E+2,0.19373000E+1,0.00000000E+0 - ,0.78274010E+3,0.157E+3,0.320E+2,0.19373000E+1,0.00000000E+0 - ,0.64435600E+3,0.157E+3,0.330E+2,0.19373000E+1,0.00000000E+0 - ,0.56629200E+3,0.157E+3,0.340E+2,0.19373000E+1,0.00000000E+0 - ,0.48529550E+3,0.157E+3,0.350E+2,0.19373000E+1,0.00000000E+0 - ,0.41416640E+3,0.157E+3,0.360E+2,0.19373000E+1,0.00000000E+0 - ,0.31215559E+4,0.157E+3,0.370E+2,0.19373000E+1,0.00000000E+0 - ,0.24580845E+4,0.157E+3,0.380E+2,0.19373000E+1,0.00000000E+0 - ,0.20727978E+4,0.157E+3,0.390E+2,0.19373000E+1,0.00000000E+0 - ,0.18212145E+4,0.157E+3,0.400E+2,0.19373000E+1,0.00000000E+0 - ,0.16379243E+4,0.157E+3,0.410E+2,0.19373000E+1,0.00000000E+0 - ,0.12356226E+4,0.157E+3,0.420E+2,0.19373000E+1,0.00000000E+0 - ,0.13909989E+4,0.157E+3,0.430E+2,0.19373000E+1,0.00000000E+0 - ,0.10325864E+4,0.157E+3,0.440E+2,0.19373000E+1,0.00000000E+0 - ,0.11254492E+4,0.157E+3,0.450E+2,0.19373000E+1,0.00000000E+0 - ,0.10341628E+4,0.157E+3,0.460E+2,0.19373000E+1,0.00000000E+0 - ,0.87041020E+3,0.157E+3,0.470E+2,0.19373000E+1,0.00000000E+0 - ,0.90076730E+3,0.157E+3,0.480E+2,0.19373000E+1,0.00000000E+0 - ,0.11640480E+4,0.157E+3,0.490E+2,0.19373000E+1,0.00000000E+0 - ,0.10373050E+4,0.157E+3,0.500E+2,0.19373000E+1,0.00000000E+0 - ,0.89470260E+3,0.157E+3,0.510E+2,0.19373000E+1,0.00000000E+0 - ,0.81481140E+3,0.157E+3,0.520E+2,0.19373000E+1,0.00000000E+0 - ,0.72249320E+3,0.157E+3,0.530E+2,0.19373000E+1,0.00000000E+0 - ,0.63795900E+3,0.157E+3,0.540E+2,0.19373000E+1,0.00000000E+0 - ,0.38250881E+4,0.157E+3,0.550E+2,0.19373000E+1,0.00000000E+0 - ,0.31862921E+4,0.157E+3,0.560E+2,0.19373000E+1,0.00000000E+0 - ,0.26909591E+4,0.157E+3,0.570E+2,0.19373000E+1,0.00000000E+0 - ,0.10645933E+4,0.157E+3,0.580E+2,0.19373000E+1,0.27991000E+1 - ,0.27909891E+4,0.157E+3,0.590E+2,0.19373000E+1,0.00000000E+0 - ,0.26551171E+4,0.157E+3,0.600E+2,0.19373000E+1,0.00000000E+0 - ,0.25829722E+4,0.157E+3,0.610E+2,0.19373000E+1,0.00000000E+0 - ,0.25172239E+4,0.157E+3,0.620E+2,0.19373000E+1,0.00000000E+0 - ,0.24587886E+4,0.157E+3,0.630E+2,0.19373000E+1,0.00000000E+0 - ,0.18607370E+4,0.157E+3,0.640E+2,0.19373000E+1,0.00000000E+0 - ,0.22509654E+4,0.157E+3,0.650E+2,0.19373000E+1,0.00000000E+0 - ,0.21634599E+4,0.157E+3,0.660E+2,0.19373000E+1,0.00000000E+0 - ,0.21938636E+4,0.157E+3,0.670E+2,0.19373000E+1,0.00000000E+0 - ,0.21444704E+4,0.157E+3,0.680E+2,0.19373000E+1,0.00000000E+0 - ,0.20989702E+4,0.157E+3,0.690E+2,0.19373000E+1,0.00000000E+0 - ,0.20775774E+4,0.157E+3,0.700E+2,0.19373000E+1,0.00000000E+0 - ,0.17103545E+4,0.157E+3,0.710E+2,0.19373000E+1,0.00000000E+0 - ,0.16140907E+4,0.157E+3,0.720E+2,0.19373000E+1,0.00000000E+0 - ,0.14413394E+4,0.157E+3,0.730E+2,0.19373000E+1,0.00000000E+0 - ,0.12005662E+4,0.157E+3,0.740E+2,0.19373000E+1,0.00000000E+0 - ,0.12100818E+4,0.157E+3,0.750E+2,0.19373000E+1,0.00000000E+0 - ,0.10767583E+4,0.157E+3,0.760E+2,0.19373000E+1,0.00000000E+0 - ,0.97197370E+3,0.157E+3,0.770E+2,0.19373000E+1,0.00000000E+0 - ,0.79670010E+3,0.157E+3,0.780E+2,0.19373000E+1,0.00000000E+0 - ,0.74016750E+3,0.157E+3,0.790E+2,0.19373000E+1,0.00000000E+0 - ,0.75524870E+3,0.157E+3,0.800E+2,0.19373000E+1,0.00000000E+0 - ,0.11891662E+4,0.157E+3,0.810E+2,0.19373000E+1,0.00000000E+0 - ,0.11270513E+4,0.157E+3,0.820E+2,0.19373000E+1,0.00000000E+0 - ,0.10045839E+4,0.157E+3,0.830E+2,0.19373000E+1,0.00000000E+0 - ,0.94243520E+3,0.157E+3,0.840E+2,0.19373000E+1,0.00000000E+0 - ,0.85327010E+3,0.157E+3,0.850E+2,0.19373000E+1,0.00000000E+0 - ,0.76899820E+3,0.157E+3,0.860E+2,0.19373000E+1,0.00000000E+0 - ,0.34855386E+4,0.157E+3,0.870E+2,0.19373000E+1,0.00000000E+0 - ,0.30892071E+4,0.157E+3,0.880E+2,0.19373000E+1,0.00000000E+0 - ,0.26322561E+4,0.157E+3,0.890E+2,0.19373000E+1,0.00000000E+0 - ,0.22749680E+4,0.157E+3,0.900E+2,0.19373000E+1,0.00000000E+0 - ,0.23071665E+4,0.157E+3,0.910E+2,0.19373000E+1,0.00000000E+0 - ,0.22309267E+4,0.157E+3,0.920E+2,0.19373000E+1,0.00000000E+0 - ,0.23502253E+4,0.157E+3,0.930E+2,0.19373000E+1,0.00000000E+0 - ,0.22650122E+4,0.157E+3,0.940E+2,0.19373000E+1,0.00000000E+0 - ,0.10830590E+3,0.157E+3,0.101E+3,0.19373000E+1,0.00000000E+0 - ,0.38990700E+3,0.157E+3,0.103E+3,0.19373000E+1,0.98650000E+0 - ,0.49258240E+3,0.157E+3,0.104E+3,0.19373000E+1,0.98080000E+0 - ,0.35111660E+3,0.157E+3,0.105E+3,0.19373000E+1,0.97060000E+0 - ,0.25535340E+3,0.157E+3,0.106E+3,0.19373000E+1,0.98680000E+0 - ,0.17069380E+3,0.157E+3,0.107E+3,0.19373000E+1,0.99440000E+0 - ,0.12040040E+3,0.157E+3,0.108E+3,0.19373000E+1,0.99250000E+0 - ,0.79615100E+2,0.157E+3,0.109E+3,0.19373000E+1,0.99820000E+0 - ,0.57870070E+3,0.157E+3,0.111E+3,0.19373000E+1,0.96840000E+0 - ,0.90345630E+3,0.157E+3,0.112E+3,0.19373000E+1,0.96280000E+0 - ,0.88049000E+3,0.157E+3,0.113E+3,0.19373000E+1,0.96480000E+0 - ,0.67215910E+3,0.157E+3,0.114E+3,0.19373000E+1,0.95070000E+0 - ,0.53085730E+3,0.157E+3,0.115E+3,0.19373000E+1,0.99470000E+0 - ,0.43834960E+3,0.157E+3,0.116E+3,0.19373000E+1,0.99480000E+0 - ,0.34967640E+3,0.157E+3,0.117E+3,0.19373000E+1,0.99720000E+0 - ,0.78068060E+3,0.157E+3,0.119E+3,0.19373000E+1,0.97670000E+0 - ,0.16583459E+4,0.157E+3,0.120E+3,0.19373000E+1,0.98310000E+0 - ,0.74263980E+3,0.157E+3,0.121E+3,0.19373000E+1,0.18627000E+1 - ,0.71867820E+3,0.157E+3,0.122E+3,0.19373000E+1,0.18299000E+1 - ,0.70447310E+3,0.157E+3,0.123E+3,0.19373000E+1,0.19138000E+1 - ,0.70187680E+3,0.157E+3,0.124E+3,0.19373000E+1,0.18269000E+1 - ,0.62823400E+3,0.157E+3,0.125E+3,0.19373000E+1,0.16406000E+1 - ,0.57752630E+3,0.157E+3,0.126E+3,0.19373000E+1,0.16483000E+1 - ,0.55142260E+3,0.157E+3,0.127E+3,0.19373000E+1,0.17149000E+1 - ,0.54016790E+3,0.157E+3,0.128E+3,0.19373000E+1,0.17937000E+1 - ,0.54406610E+3,0.157E+3,0.129E+3,0.19373000E+1,0.95760000E+0 - ,0.49263420E+3,0.157E+3,0.130E+3,0.19373000E+1,0.19419000E+1 - ,0.86066320E+3,0.157E+3,0.131E+3,0.19373000E+1,0.96010000E+0 - ,0.72574740E+3,0.157E+3,0.132E+3,0.19373000E+1,0.94340000E+0 - ,0.63226020E+3,0.157E+3,0.133E+3,0.19373000E+1,0.98890000E+0 - ,0.56675130E+3,0.157E+3,0.134E+3,0.19373000E+1,0.99010000E+0 - ,0.48922910E+3,0.157E+3,0.135E+3,0.19373000E+1,0.99740000E+0 - ,0.92422030E+3,0.157E+3,0.137E+3,0.19373000E+1,0.97380000E+0 - ,0.20365362E+4,0.157E+3,0.138E+3,0.19373000E+1,0.98010000E+0 - ,0.14462394E+4,0.157E+3,0.139E+3,0.19373000E+1,0.19153000E+1 - ,0.99010590E+3,0.157E+3,0.140E+3,0.19373000E+1,0.19355000E+1 - ,0.99792220E+3,0.157E+3,0.141E+3,0.19373000E+1,0.19545000E+1 - ,0.92583590E+3,0.157E+3,0.142E+3,0.19373000E+1,0.19420000E+1 - ,0.10787908E+4,0.157E+3,0.143E+3,0.19373000E+1,0.16682000E+1 - ,0.78658860E+3,0.157E+3,0.144E+3,0.19373000E+1,0.18584000E+1 - ,0.73489180E+3,0.157E+3,0.145E+3,0.19373000E+1,0.19003000E+1 - ,0.67965720E+3,0.157E+3,0.146E+3,0.19373000E+1,0.18630000E+1 - ,0.65947100E+3,0.157E+3,0.147E+3,0.19373000E+1,0.96790000E+0 - ,0.63938320E+3,0.157E+3,0.148E+3,0.19373000E+1,0.19539000E+1 - ,0.10954590E+4,0.157E+3,0.149E+3,0.19373000E+1,0.96330000E+0 - ,0.95522580E+3,0.157E+3,0.150E+3,0.19373000E+1,0.95140000E+0 - ,0.87322870E+3,0.157E+3,0.151E+3,0.19373000E+1,0.97490000E+0 - ,0.81328280E+3,0.157E+3,0.152E+3,0.19373000E+1,0.98110000E+0 - ,0.72949490E+3,0.157E+3,0.153E+3,0.19373000E+1,0.99680000E+0 - ,0.10633274E+4,0.157E+3,0.155E+3,0.19373000E+1,0.99090000E+0 - ,0.27055816E+4,0.157E+3,0.156E+3,0.19373000E+1,0.97970000E+0 - ,0.18500003E+4,0.157E+3,0.157E+3,0.19373000E+1,0.19373000E+1 - ,0.43220200E+2,0.159E+3,0.100E+1,0.29425000E+1,0.91180000E+0 - ,0.28506000E+2,0.159E+3,0.200E+1,0.29425000E+1,0.00000000E+0 - ,0.68024790E+3,0.159E+3,0.300E+1,0.29425000E+1,0.00000000E+0 - ,0.39079830E+3,0.159E+3,0.400E+1,0.29425000E+1,0.00000000E+0 - ,0.26231920E+3,0.159E+3,0.500E+1,0.29425000E+1,0.00000000E+0 - ,0.17683390E+3,0.159E+3,0.600E+1,0.29425000E+1,0.00000000E+0 - ,0.12349550E+3,0.159E+3,0.700E+1,0.29425000E+1,0.00000000E+0 - ,0.93432700E+2,0.159E+3,0.800E+1,0.29425000E+1,0.00000000E+0 - ,0.70748100E+2,0.159E+3,0.900E+1,0.29425000E+1,0.00000000E+0 - ,0.54406100E+2,0.159E+3,0.100E+2,0.29425000E+1,0.00000000E+0 - ,0.81323530E+3,0.159E+3,0.110E+2,0.29425000E+1,0.00000000E+0 - ,0.62332230E+3,0.159E+3,0.120E+2,0.29425000E+1,0.00000000E+0 - ,0.57359020E+3,0.159E+3,0.130E+2,0.29425000E+1,0.00000000E+0 - ,0.45092530E+3,0.159E+3,0.140E+2,0.29425000E+1,0.00000000E+0 - ,0.35095780E+3,0.159E+3,0.150E+2,0.29425000E+1,0.00000000E+0 - ,0.29093690E+3,0.159E+3,0.160E+2,0.29425000E+1,0.00000000E+0 - ,0.23740720E+3,0.159E+3,0.170E+2,0.29425000E+1,0.00000000E+0 - ,0.19406980E+3,0.159E+3,0.180E+2,0.29425000E+1,0.00000000E+0 - ,0.13337958E+4,0.159E+3,0.190E+2,0.29425000E+1,0.00000000E+0 - ,0.10971659E+4,0.159E+3,0.200E+2,0.29425000E+1,0.00000000E+0 - ,0.90572410E+3,0.159E+3,0.210E+2,0.29425000E+1,0.00000000E+0 - ,0.87400660E+3,0.159E+3,0.220E+2,0.29425000E+1,0.00000000E+0 - ,0.80001520E+3,0.159E+3,0.230E+2,0.29425000E+1,0.00000000E+0 - ,0.63019610E+3,0.159E+3,0.240E+2,0.29425000E+1,0.00000000E+0 - ,0.68836930E+3,0.159E+3,0.250E+2,0.29425000E+1,0.00000000E+0 - ,0.54023110E+3,0.159E+3,0.260E+2,0.29425000E+1,0.00000000E+0 - ,0.57207380E+3,0.159E+3,0.270E+2,0.29425000E+1,0.00000000E+0 - ,0.58956950E+3,0.159E+3,0.280E+2,0.29425000E+1,0.00000000E+0 - ,0.45203420E+3,0.159E+3,0.290E+2,0.29425000E+1,0.00000000E+0 - ,0.46341480E+3,0.159E+3,0.300E+2,0.29425000E+1,0.00000000E+0 - ,0.54906920E+3,0.159E+3,0.310E+2,0.29425000E+1,0.00000000E+0 - ,0.48331740E+3,0.159E+3,0.320E+2,0.29425000E+1,0.00000000E+0 - ,0.41155330E+3,0.159E+3,0.330E+2,0.29425000E+1,0.00000000E+0 - ,0.36892060E+3,0.159E+3,0.340E+2,0.29425000E+1,0.00000000E+0 - ,0.32252720E+3,0.159E+3,0.350E+2,0.29425000E+1,0.00000000E+0 - ,0.28024380E+3,0.159E+3,0.360E+2,0.29425000E+1,0.00000000E+0 - ,0.14944074E+4,0.159E+3,0.370E+2,0.29425000E+1,0.00000000E+0 - ,0.13073665E+4,0.159E+3,0.380E+2,0.29425000E+1,0.00000000E+0 - ,0.11435524E+4,0.159E+3,0.390E+2,0.29425000E+1,0.00000000E+0 - ,0.10268226E+4,0.159E+3,0.400E+2,0.29425000E+1,0.00000000E+0 - ,0.93574670E+3,0.159E+3,0.410E+2,0.29425000E+1,0.00000000E+0 - ,0.72166730E+3,0.159E+3,0.420E+2,0.29425000E+1,0.00000000E+0 - ,0.80551110E+3,0.159E+3,0.430E+2,0.29425000E+1,0.00000000E+0 - ,0.61296820E+3,0.159E+3,0.440E+2,0.29425000E+1,0.00000000E+0 - ,0.66999170E+3,0.159E+3,0.450E+2,0.29425000E+1,0.00000000E+0 - ,0.62106870E+3,0.159E+3,0.460E+2,0.29425000E+1,0.00000000E+0 - ,0.51802070E+3,0.159E+3,0.470E+2,0.29425000E+1,0.00000000E+0 - ,0.54699380E+3,0.159E+3,0.480E+2,0.29425000E+1,0.00000000E+0 - ,0.68726670E+3,0.159E+3,0.490E+2,0.29425000E+1,0.00000000E+0 - ,0.63451560E+3,0.159E+3,0.500E+2,0.29425000E+1,0.00000000E+0 - ,0.56457530E+3,0.159E+3,0.510E+2,0.29425000E+1,0.00000000E+0 - ,0.52332050E+3,0.159E+3,0.520E+2,0.29425000E+1,0.00000000E+0 - ,0.47270040E+3,0.159E+3,0.530E+2,0.29425000E+1,0.00000000E+0 - ,0.42459150E+3,0.159E+3,0.540E+2,0.29425000E+1,0.00000000E+0 - ,0.18204201E+4,0.159E+3,0.550E+2,0.29425000E+1,0.00000000E+0 - ,0.16674685E+4,0.159E+3,0.560E+2,0.29425000E+1,0.00000000E+0 - ,0.14628142E+4,0.159E+3,0.570E+2,0.29425000E+1,0.00000000E+0 - ,0.66720180E+3,0.159E+3,0.580E+2,0.29425000E+1,0.27991000E+1 - ,0.14767389E+4,0.159E+3,0.590E+2,0.29425000E+1,0.00000000E+0 - ,0.14176855E+4,0.159E+3,0.600E+2,0.29425000E+1,0.00000000E+0 - ,0.13820320E+4,0.159E+3,0.610E+2,0.29425000E+1,0.00000000E+0 - ,0.13492524E+4,0.159E+3,0.620E+2,0.29425000E+1,0.00000000E+0 - ,0.13201809E+4,0.159E+3,0.630E+2,0.29425000E+1,0.00000000E+0 - ,0.10364403E+4,0.159E+3,0.640E+2,0.29425000E+1,0.00000000E+0 - ,0.11696897E+4,0.159E+3,0.650E+2,0.29425000E+1,0.00000000E+0 - ,0.11277999E+4,0.159E+3,0.660E+2,0.29425000E+1,0.00000000E+0 - ,0.11902918E+4,0.159E+3,0.670E+2,0.29425000E+1,0.00000000E+0 - ,0.11649825E+4,0.159E+3,0.680E+2,0.29425000E+1,0.00000000E+0 - ,0.11421370E+4,0.159E+3,0.690E+2,0.29425000E+1,0.00000000E+0 - ,0.11288548E+4,0.159E+3,0.700E+2,0.29425000E+1,0.00000000E+0 - ,0.95004210E+3,0.159E+3,0.710E+2,0.29425000E+1,0.00000000E+0 - ,0.93285060E+3,0.159E+3,0.720E+2,0.29425000E+1,0.00000000E+0 - ,0.85051620E+3,0.159E+3,0.730E+2,0.29425000E+1,0.00000000E+0 - ,0.71766720E+3,0.159E+3,0.740E+2,0.29425000E+1,0.00000000E+0 - ,0.72982300E+3,0.159E+3,0.750E+2,0.29425000E+1,0.00000000E+0 - ,0.66090480E+3,0.159E+3,0.760E+2,0.29425000E+1,0.00000000E+0 - ,0.60487530E+3,0.159E+3,0.770E+2,0.29425000E+1,0.00000000E+0 - ,0.50215100E+3,0.159E+3,0.780E+2,0.29425000E+1,0.00000000E+0 - ,0.46904220E+3,0.159E+3,0.790E+2,0.29425000E+1,0.00000000E+0 - ,0.48234510E+3,0.159E+3,0.800E+2,0.29425000E+1,0.00000000E+0 - ,0.70537820E+3,0.159E+3,0.810E+2,0.29425000E+1,0.00000000E+0 - ,0.68881010E+3,0.159E+3,0.820E+2,0.29425000E+1,0.00000000E+0 - ,0.63203130E+3,0.159E+3,0.830E+2,0.29425000E+1,0.00000000E+0 - ,0.60229480E+3,0.159E+3,0.840E+2,0.29425000E+1,0.00000000E+0 - ,0.55531140E+3,0.159E+3,0.850E+2,0.29425000E+1,0.00000000E+0 - ,0.50853060E+3,0.159E+3,0.860E+2,0.29425000E+1,0.00000000E+0 - ,0.17169108E+4,0.159E+3,0.870E+2,0.29425000E+1,0.00000000E+0 - ,0.16476121E+4,0.159E+3,0.880E+2,0.29425000E+1,0.00000000E+0 - ,0.14543881E+4,0.159E+3,0.890E+2,0.29425000E+1,0.00000000E+0 - ,0.13048970E+4,0.159E+3,0.900E+2,0.29425000E+1,0.00000000E+0 - ,0.12966238E+4,0.159E+3,0.910E+2,0.29425000E+1,0.00000000E+0 - ,0.12554359E+4,0.159E+3,0.920E+2,0.29425000E+1,0.00000000E+0 - ,0.12939094E+4,0.159E+3,0.930E+2,0.29425000E+1,0.00000000E+0 - ,0.12527870E+4,0.159E+3,0.940E+2,0.29425000E+1,0.00000000E+0 - ,0.69734100E+2,0.159E+3,0.101E+3,0.29425000E+1,0.00000000E+0 - ,0.22705790E+3,0.159E+3,0.103E+3,0.29425000E+1,0.98650000E+0 - ,0.28944340E+3,0.159E+3,0.104E+3,0.29425000E+1,0.98080000E+0 - ,0.22051700E+3,0.159E+3,0.105E+3,0.29425000E+1,0.97060000E+0 - ,0.16588050E+3,0.159E+3,0.106E+3,0.29425000E+1,0.98680000E+0 - ,0.11516050E+3,0.159E+3,0.107E+3,0.29425000E+1,0.99440000E+0 - ,0.83776500E+2,0.159E+3,0.108E+3,0.29425000E+1,0.99250000E+0 - ,0.57559900E+2,0.159E+3,0.109E+3,0.29425000E+1,0.99820000E+0 - ,0.33214950E+3,0.159E+3,0.111E+3,0.29425000E+1,0.96840000E+0 - ,0.51379560E+3,0.159E+3,0.112E+3,0.29425000E+1,0.96280000E+0 - ,0.51961650E+3,0.159E+3,0.113E+3,0.29425000E+1,0.96480000E+0 - ,0.41662720E+3,0.159E+3,0.114E+3,0.29425000E+1,0.95070000E+0 - ,0.34064700E+3,0.159E+3,0.115E+3,0.29425000E+1,0.99470000E+0 - ,0.28774490E+3,0.159E+3,0.116E+3,0.29425000E+1,0.99480000E+0 - ,0.23495440E+3,0.159E+3,0.117E+3,0.29425000E+1,0.99720000E+0 - ,0.45743380E+3,0.159E+3,0.119E+3,0.29425000E+1,0.97670000E+0 - ,0.87755280E+3,0.159E+3,0.120E+3,0.29425000E+1,0.98310000E+0 - ,0.45670870E+3,0.159E+3,0.121E+3,0.29425000E+1,0.18627000E+1 - ,0.44087260E+3,0.159E+3,0.122E+3,0.29425000E+1,0.18299000E+1 - ,0.43208390E+3,0.159E+3,0.123E+3,0.29425000E+1,0.19138000E+1 - ,0.42819360E+3,0.159E+3,0.124E+3,0.29425000E+1,0.18269000E+1 - ,0.39355560E+3,0.159E+3,0.125E+3,0.29425000E+1,0.16406000E+1 - ,0.36411700E+3,0.159E+3,0.126E+3,0.29425000E+1,0.16483000E+1 - ,0.34735660E+3,0.159E+3,0.127E+3,0.29425000E+1,0.17149000E+1 - ,0.33962320E+3,0.159E+3,0.128E+3,0.29425000E+1,0.17937000E+1 - ,0.33586060E+3,0.159E+3,0.129E+3,0.29425000E+1,0.95760000E+0 - ,0.31461930E+3,0.159E+3,0.130E+3,0.29425000E+1,0.19419000E+1 - ,0.51545120E+3,0.159E+3,0.131E+3,0.29425000E+1,0.96010000E+0 - ,0.45195710E+3,0.159E+3,0.132E+3,0.29425000E+1,0.94340000E+0 - ,0.40453400E+3,0.159E+3,0.133E+3,0.29425000E+1,0.98890000E+0 - ,0.36906970E+3,0.159E+3,0.134E+3,0.29425000E+1,0.99010000E+0 - ,0.32478940E+3,0.159E+3,0.135E+3,0.29425000E+1,0.99740000E+0 - ,0.54559170E+3,0.159E+3,0.137E+3,0.29425000E+1,0.97380000E+0 - ,0.10680684E+4,0.159E+3,0.138E+3,0.29425000E+1,0.98010000E+0 - ,0.81406370E+3,0.159E+3,0.139E+3,0.29425000E+1,0.19153000E+1 - ,0.60412500E+3,0.159E+3,0.140E+3,0.29425000E+1,0.19355000E+1 - ,0.61013660E+3,0.159E+3,0.141E+3,0.29425000E+1,0.19545000E+1 - ,0.56871480E+3,0.159E+3,0.142E+3,0.29425000E+1,0.19420000E+1 - ,0.63873760E+3,0.159E+3,0.143E+3,0.29425000E+1,0.16682000E+1 - ,0.49520560E+3,0.159E+3,0.144E+3,0.29425000E+1,0.18584000E+1 - ,0.46324120E+3,0.159E+3,0.145E+3,0.29425000E+1,0.19003000E+1 - ,0.43008630E+3,0.159E+3,0.146E+3,0.29425000E+1,0.18630000E+1 - ,0.41612810E+3,0.159E+3,0.147E+3,0.29425000E+1,0.96790000E+0 - ,0.41129410E+3,0.159E+3,0.148E+3,0.29425000E+1,0.19539000E+1 - ,0.65474970E+3,0.159E+3,0.149E+3,0.29425000E+1,0.96330000E+0 - ,0.59136710E+3,0.159E+3,0.150E+3,0.29425000E+1,0.95140000E+0 - ,0.55320050E+3,0.159E+3,0.151E+3,0.29425000E+1,0.97490000E+0 - ,0.52290670E+3,0.159E+3,0.152E+3,0.29425000E+1,0.98110000E+0 - ,0.47714300E+3,0.159E+3,0.153E+3,0.29425000E+1,0.99680000E+0 - ,0.64438580E+3,0.159E+3,0.155E+3,0.29425000E+1,0.99090000E+0 - ,0.13856402E+4,0.159E+3,0.156E+3,0.29425000E+1,0.97970000E+0 - ,0.10306163E+4,0.159E+3,0.157E+3,0.29425000E+1,0.19373000E+1 - ,0.64702500E+3,0.159E+3,0.159E+3,0.29425000E+1,0.29425000E+1 - ,0.42334300E+2,0.160E+3,0.100E+1,0.29455000E+1,0.91180000E+0 - ,0.27932400E+2,0.160E+3,0.200E+1,0.29455000E+1,0.00000000E+0 - ,0.66553290E+3,0.160E+3,0.300E+1,0.29455000E+1,0.00000000E+0 - ,0.38257600E+3,0.160E+3,0.400E+1,0.29455000E+1,0.00000000E+0 - ,0.25686460E+3,0.160E+3,0.500E+1,0.29455000E+1,0.00000000E+0 - ,0.17319330E+3,0.160E+3,0.600E+1,0.29455000E+1,0.00000000E+0 - ,0.12097590E+3,0.160E+3,0.700E+1,0.29455000E+1,0.00000000E+0 - ,0.91540700E+2,0.160E+3,0.800E+1,0.29455000E+1,0.00000000E+0 - ,0.69326100E+2,0.160E+3,0.900E+1,0.29455000E+1,0.00000000E+0 - ,0.53320100E+2,0.160E+3,0.100E+2,0.29455000E+1,0.00000000E+0 - ,0.79568730E+3,0.160E+3,0.110E+2,0.29455000E+1,0.00000000E+0 - ,0.61016250E+3,0.160E+3,0.120E+2,0.29455000E+1,0.00000000E+0 - ,0.56154980E+3,0.160E+3,0.130E+2,0.29455000E+1,0.00000000E+0 - ,0.44153690E+3,0.160E+3,0.140E+2,0.29455000E+1,0.00000000E+0 - ,0.34370190E+3,0.160E+3,0.150E+2,0.29455000E+1,0.00000000E+0 - ,0.28495290E+3,0.160E+3,0.160E+2,0.29455000E+1,0.00000000E+0 - ,0.23255130E+3,0.160E+3,0.170E+2,0.29455000E+1,0.00000000E+0 - ,0.19012240E+3,0.160E+3,0.180E+2,0.29455000E+1,0.00000000E+0 - ,0.13047563E+4,0.160E+3,0.190E+2,0.29455000E+1,0.00000000E+0 - ,0.10738235E+4,0.160E+3,0.200E+2,0.29455000E+1,0.00000000E+0 - ,0.88652660E+3,0.160E+3,0.210E+2,0.29455000E+1,0.00000000E+0 - ,0.85553540E+3,0.160E+3,0.220E+2,0.29455000E+1,0.00000000E+0 - ,0.78313860E+3,0.160E+3,0.230E+2,0.29455000E+1,0.00000000E+0 - ,0.61691000E+3,0.160E+3,0.240E+2,0.29455000E+1,0.00000000E+0 - ,0.67388620E+3,0.160E+3,0.250E+2,0.29455000E+1,0.00000000E+0 - ,0.52887800E+3,0.160E+3,0.260E+2,0.29455000E+1,0.00000000E+0 - ,0.56009170E+3,0.160E+3,0.270E+2,0.29455000E+1,0.00000000E+0 - ,0.57719940E+3,0.160E+3,0.280E+2,0.29455000E+1,0.00000000E+0 - ,0.44255790E+3,0.160E+3,0.290E+2,0.29455000E+1,0.00000000E+0 - ,0.45374620E+3,0.160E+3,0.300E+2,0.29455000E+1,0.00000000E+0 - ,0.53757900E+3,0.160E+3,0.310E+2,0.29455000E+1,0.00000000E+0 - ,0.47326730E+3,0.160E+3,0.320E+2,0.29455000E+1,0.00000000E+0 - ,0.40304410E+3,0.160E+3,0.330E+2,0.29455000E+1,0.00000000E+0 - ,0.36132220E+3,0.160E+3,0.340E+2,0.29455000E+1,0.00000000E+0 - ,0.31591320E+3,0.160E+3,0.350E+2,0.29455000E+1,0.00000000E+0 - ,0.27452240E+3,0.160E+3,0.360E+2,0.29455000E+1,0.00000000E+0 - ,0.14619055E+4,0.160E+3,0.370E+2,0.29455000E+1,0.00000000E+0 - ,0.12795273E+4,0.160E+3,0.380E+2,0.29455000E+1,0.00000000E+0 - ,0.11193527E+4,0.160E+3,0.390E+2,0.29455000E+1,0.00000000E+0 - ,0.10051742E+4,0.160E+3,0.400E+2,0.29455000E+1,0.00000000E+0 - ,0.91606480E+3,0.160E+3,0.410E+2,0.29455000E+1,0.00000000E+0 - ,0.70655730E+3,0.160E+3,0.420E+2,0.29455000E+1,0.00000000E+0 - ,0.78861510E+3,0.160E+3,0.430E+2,0.29455000E+1,0.00000000E+0 - ,0.60017770E+3,0.160E+3,0.440E+2,0.29455000E+1,0.00000000E+0 - ,0.65600920E+3,0.160E+3,0.450E+2,0.29455000E+1,0.00000000E+0 - ,0.60812890E+3,0.160E+3,0.460E+2,0.29455000E+1,0.00000000E+0 - ,0.50722690E+3,0.160E+3,0.470E+2,0.29455000E+1,0.00000000E+0 - ,0.53562280E+3,0.160E+3,0.480E+2,0.29455000E+1,0.00000000E+0 - ,0.67289960E+3,0.160E+3,0.490E+2,0.29455000E+1,0.00000000E+0 - ,0.62132160E+3,0.160E+3,0.500E+2,0.29455000E+1,0.00000000E+0 - ,0.55289340E+3,0.160E+3,0.510E+2,0.29455000E+1,0.00000000E+0 - ,0.51252450E+3,0.160E+3,0.520E+2,0.29455000E+1,0.00000000E+0 - ,0.46298250E+3,0.160E+3,0.530E+2,0.29455000E+1,0.00000000E+0 - ,0.41589380E+3,0.160E+3,0.540E+2,0.29455000E+1,0.00000000E+0 - ,0.17807379E+4,0.160E+3,0.550E+2,0.29455000E+1,0.00000000E+0 - ,0.16318559E+4,0.160E+3,0.560E+2,0.29455000E+1,0.00000000E+0 - ,0.14317796E+4,0.160E+3,0.570E+2,0.29455000E+1,0.00000000E+0 - ,0.65338750E+3,0.160E+3,0.580E+2,0.29455000E+1,0.27991000E+1 - ,0.14452611E+4,0.160E+3,0.590E+2,0.29455000E+1,0.00000000E+0 - ,0.13875284E+4,0.160E+3,0.600E+2,0.29455000E+1,0.00000000E+0 - ,0.13526449E+4,0.160E+3,0.610E+2,0.29455000E+1,0.00000000E+0 - ,0.13205717E+4,0.160E+3,0.620E+2,0.29455000E+1,0.00000000E+0 - ,0.12921268E+4,0.160E+3,0.630E+2,0.29455000E+1,0.00000000E+0 - ,0.10145593E+4,0.160E+3,0.640E+2,0.29455000E+1,0.00000000E+0 - ,0.11446770E+4,0.160E+3,0.650E+2,0.29455000E+1,0.00000000E+0 - ,0.11036788E+4,0.160E+3,0.660E+2,0.29455000E+1,0.00000000E+0 - ,0.11650450E+4,0.160E+3,0.670E+2,0.29455000E+1,0.00000000E+0 - ,0.11402779E+4,0.160E+3,0.680E+2,0.29455000E+1,0.00000000E+0 - ,0.11179234E+4,0.160E+3,0.690E+2,0.29455000E+1,0.00000000E+0 - ,0.11049164E+4,0.160E+3,0.700E+2,0.29455000E+1,0.00000000E+0 - ,0.92996320E+3,0.160E+3,0.710E+2,0.29455000E+1,0.00000000E+0 - ,0.91326380E+3,0.160E+3,0.720E+2,0.29455000E+1,0.00000000E+0 - ,0.83272290E+3,0.160E+3,0.730E+2,0.29455000E+1,0.00000000E+0 - ,0.70269660E+3,0.160E+3,0.740E+2,0.29455000E+1,0.00000000E+0 - ,0.71461940E+3,0.160E+3,0.750E+2,0.29455000E+1,0.00000000E+0 - ,0.64718140E+3,0.160E+3,0.760E+2,0.29455000E+1,0.00000000E+0 - ,0.59234880E+3,0.160E+3,0.770E+2,0.29455000E+1,0.00000000E+0 - ,0.49178730E+3,0.160E+3,0.780E+2,0.29455000E+1,0.00000000E+0 - ,0.45937630E+3,0.160E+3,0.790E+2,0.29455000E+1,0.00000000E+0 - ,0.47241230E+3,0.160E+3,0.800E+2,0.29455000E+1,0.00000000E+0 - ,0.69065930E+3,0.160E+3,0.810E+2,0.29455000E+1,0.00000000E+0 - ,0.67450000E+3,0.160E+3,0.820E+2,0.29455000E+1,0.00000000E+0 - ,0.61895970E+3,0.160E+3,0.830E+2,0.29455000E+1,0.00000000E+0 - ,0.58986940E+3,0.160E+3,0.840E+2,0.29455000E+1,0.00000000E+0 - ,0.54389180E+3,0.160E+3,0.850E+2,0.29455000E+1,0.00000000E+0 - ,0.49810570E+3,0.160E+3,0.860E+2,0.29455000E+1,0.00000000E+0 - ,0.16797710E+4,0.160E+3,0.870E+2,0.29455000E+1,0.00000000E+0 - ,0.16125437E+4,0.160E+3,0.880E+2,0.29455000E+1,0.00000000E+0 - ,0.14236214E+4,0.160E+3,0.890E+2,0.29455000E+1,0.00000000E+0 - ,0.12774745E+4,0.160E+3,0.900E+2,0.29455000E+1,0.00000000E+0 - ,0.12692909E+4,0.160E+3,0.910E+2,0.29455000E+1,0.00000000E+0 - ,0.12289809E+4,0.160E+3,0.920E+2,0.29455000E+1,0.00000000E+0 - ,0.12665506E+4,0.160E+3,0.930E+2,0.29455000E+1,0.00000000E+0 - ,0.12263194E+4,0.160E+3,0.940E+2,0.29455000E+1,0.00000000E+0 - ,0.68293100E+2,0.160E+3,0.101E+3,0.29455000E+1,0.00000000E+0 - ,0.22228830E+3,0.160E+3,0.103E+3,0.29455000E+1,0.98650000E+0 - ,0.28337150E+3,0.160E+3,0.104E+3,0.29455000E+1,0.98080000E+0 - ,0.21594380E+3,0.160E+3,0.105E+3,0.29455000E+1,0.97060000E+0 - ,0.16246650E+3,0.160E+3,0.106E+3,0.29455000E+1,0.98680000E+0 - ,0.11281340E+3,0.160E+3,0.107E+3,0.29455000E+1,0.99440000E+0 - ,0.82084900E+2,0.160E+3,0.108E+3,0.29455000E+1,0.99250000E+0 - ,0.56411700E+2,0.160E+3,0.109E+3,0.29455000E+1,0.99820000E+0 - ,0.32516360E+3,0.160E+3,0.111E+3,0.29455000E+1,0.96840000E+0 - ,0.50296550E+3,0.160E+3,0.112E+3,0.29455000E+1,0.96280000E+0 - ,0.50872500E+3,0.160E+3,0.113E+3,0.29455000E+1,0.96480000E+0 - ,0.40796290E+3,0.160E+3,0.114E+3,0.29455000E+1,0.95070000E+0 - ,0.33360650E+3,0.160E+3,0.115E+3,0.29455000E+1,0.99470000E+0 - ,0.28182650E+3,0.160E+3,0.116E+3,0.29455000E+1,0.99480000E+0 - ,0.23014880E+3,0.160E+3,0.117E+3,0.29455000E+1,0.99720000E+0 - ,0.44786360E+3,0.160E+3,0.119E+3,0.29455000E+1,0.97670000E+0 - ,0.85883830E+3,0.160E+3,0.120E+3,0.29455000E+1,0.98310000E+0 - ,0.44722200E+3,0.160E+3,0.121E+3,0.29455000E+1,0.18627000E+1 - ,0.43170970E+3,0.160E+3,0.122E+3,0.29455000E+1,0.18299000E+1 - ,0.42310550E+3,0.160E+3,0.123E+3,0.29455000E+1,0.19138000E+1 - ,0.41928980E+3,0.160E+3,0.124E+3,0.29455000E+1,0.18269000E+1 - ,0.38540430E+3,0.160E+3,0.125E+3,0.29455000E+1,0.16406000E+1 - ,0.35658500E+3,0.160E+3,0.126E+3,0.29455000E+1,0.16483000E+1 - ,0.34017190E+3,0.160E+3,0.127E+3,0.29455000E+1,0.17149000E+1 - ,0.33259710E+3,0.160E+3,0.128E+3,0.29455000E+1,0.17937000E+1 - ,0.32889540E+3,0.160E+3,0.129E+3,0.29455000E+1,0.95760000E+0 - ,0.30812510E+3,0.160E+3,0.130E+3,0.29455000E+1,0.19419000E+1 - ,0.50468300E+3,0.160E+3,0.131E+3,0.29455000E+1,0.96010000E+0 - ,0.44257280E+3,0.160E+3,0.132E+3,0.29455000E+1,0.94340000E+0 - ,0.39617290E+3,0.160E+3,0.133E+3,0.29455000E+1,0.98890000E+0 - ,0.36146790E+3,0.160E+3,0.134E+3,0.29455000E+1,0.99010000E+0 - ,0.31812780E+3,0.160E+3,0.135E+3,0.29455000E+1,0.99740000E+0 - ,0.53419470E+3,0.160E+3,0.137E+3,0.29455000E+1,0.97380000E+0 - ,0.10452541E+4,0.160E+3,0.138E+3,0.29455000E+1,0.98010000E+0 - ,0.79688440E+3,0.160E+3,0.139E+3,0.29455000E+1,0.19153000E+1 - ,0.59156300E+3,0.160E+3,0.140E+3,0.29455000E+1,0.19355000E+1 - ,0.59746030E+3,0.160E+3,0.141E+3,0.29455000E+1,0.19545000E+1 - ,0.55690660E+3,0.160E+3,0.142E+3,0.29455000E+1,0.19420000E+1 - ,0.62539660E+3,0.160E+3,0.143E+3,0.29455000E+1,0.16682000E+1 - ,0.48497040E+3,0.160E+3,0.144E+3,0.29455000E+1,0.18584000E+1 - ,0.45367340E+3,0.160E+3,0.145E+3,0.29455000E+1,0.19003000E+1 - ,0.42121350E+3,0.160E+3,0.146E+3,0.29455000E+1,0.18630000E+1 - ,0.40754200E+3,0.160E+3,0.147E+3,0.29455000E+1,0.96790000E+0 - ,0.40282810E+3,0.160E+3,0.148E+3,0.29455000E+1,0.19539000E+1 - ,0.64108970E+3,0.160E+3,0.149E+3,0.29455000E+1,0.96330000E+0 - ,0.57909510E+3,0.160E+3,0.150E+3,0.29455000E+1,0.95140000E+0 - ,0.54176140E+3,0.160E+3,0.151E+3,0.29455000E+1,0.97490000E+0 - ,0.51212090E+3,0.160E+3,0.152E+3,0.29455000E+1,0.98110000E+0 - ,0.46733270E+3,0.160E+3,0.153E+3,0.29455000E+1,0.99680000E+0 - ,0.63096990E+3,0.160E+3,0.155E+3,0.29455000E+1,0.99090000E+0 - ,0.13558874E+4,0.160E+3,0.156E+3,0.29455000E+1,0.97970000E+0 - ,0.10088176E+4,0.160E+3,0.157E+3,0.29455000E+1,0.19373000E+1 - ,0.63363330E+3,0.160E+3,0.159E+3,0.29455000E+1,0.29425000E+1 - ,0.62052060E+3,0.160E+3,0.160E+3,0.29455000E+1,0.29455000E+1 - ,0.41035600E+2,0.161E+3,0.100E+1,0.29413000E+1,0.91180000E+0 - ,0.27115000E+2,0.161E+3,0.200E+1,0.29413000E+1,0.00000000E+0 - ,0.64218080E+3,0.161E+3,0.300E+1,0.29413000E+1,0.00000000E+0 - ,0.36981420E+3,0.161E+3,0.400E+1,0.29413000E+1,0.00000000E+0 - ,0.24860710E+3,0.161E+3,0.500E+1,0.29413000E+1,0.00000000E+0 - ,0.16779680E+3,0.161E+3,0.600E+1,0.29413000E+1,0.00000000E+0 - ,0.11730260E+3,0.161E+3,0.700E+1,0.29413000E+1,0.00000000E+0 - ,0.88815900E+2,0.161E+3,0.800E+1,0.29413000E+1,0.00000000E+0 - ,0.67299900E+2,0.161E+3,0.900E+1,0.29413000E+1,0.00000000E+0 - ,0.51786000E+2,0.161E+3,0.100E+2,0.29413000E+1,0.00000000E+0 - ,0.76786760E+3,0.161E+3,0.110E+2,0.29413000E+1,0.00000000E+0 - ,0.58961410E+3,0.161E+3,0.120E+2,0.29413000E+1,0.00000000E+0 - ,0.54296830E+3,0.161E+3,0.130E+2,0.29413000E+1,0.00000000E+0 - ,0.42728580E+3,0.161E+3,0.140E+2,0.29413000E+1,0.00000000E+0 - ,0.33286240E+3,0.161E+3,0.150E+2,0.29413000E+1,0.00000000E+0 - ,0.27611290E+3,0.161E+3,0.160E+2,0.29413000E+1,0.00000000E+0 - ,0.22545620E+3,0.161E+3,0.170E+2,0.29413000E+1,0.00000000E+0 - ,0.18441100E+3,0.161E+3,0.180E+2,0.29413000E+1,0.00000000E+0 - ,0.12590280E+4,0.161E+3,0.190E+2,0.29413000E+1,0.00000000E+0 - ,0.10371340E+4,0.161E+3,0.200E+2,0.29413000E+1,0.00000000E+0 - ,0.85644340E+3,0.161E+3,0.210E+2,0.29413000E+1,0.00000000E+0 - ,0.82672570E+3,0.161E+3,0.220E+2,0.29413000E+1,0.00000000E+0 - ,0.75688430E+3,0.161E+3,0.230E+2,0.29413000E+1,0.00000000E+0 - ,0.59629710E+3,0.161E+3,0.240E+2,0.29413000E+1,0.00000000E+0 - ,0.65144380E+3,0.161E+3,0.250E+2,0.29413000E+1,0.00000000E+0 - ,0.51133840E+3,0.161E+3,0.260E+2,0.29413000E+1,0.00000000E+0 - ,0.54164010E+3,0.161E+3,0.270E+2,0.29413000E+1,0.00000000E+0 - ,0.55809040E+3,0.161E+3,0.280E+2,0.29413000E+1,0.00000000E+0 - ,0.42796300E+3,0.161E+3,0.290E+2,0.29413000E+1,0.00000000E+0 - ,0.43895460E+3,0.161E+3,0.300E+2,0.29413000E+1,0.00000000E+0 - ,0.51995360E+3,0.161E+3,0.310E+2,0.29413000E+1,0.00000000E+0 - ,0.45803850E+3,0.161E+3,0.320E+2,0.29413000E+1,0.00000000E+0 - ,0.39031610E+3,0.161E+3,0.330E+2,0.29413000E+1,0.00000000E+0 - ,0.35005540E+3,0.161E+3,0.340E+2,0.29413000E+1,0.00000000E+0 - ,0.30619590E+3,0.161E+3,0.350E+2,0.29413000E+1,0.00000000E+0 - ,0.26618930E+3,0.161E+3,0.360E+2,0.29413000E+1,0.00000000E+0 - ,0.14108565E+4,0.161E+3,0.370E+2,0.29413000E+1,0.00000000E+0 - ,0.12358086E+4,0.161E+3,0.380E+2,0.29413000E+1,0.00000000E+0 - ,0.10815963E+4,0.161E+3,0.390E+2,0.29413000E+1,0.00000000E+0 - ,0.97156440E+3,0.161E+3,0.400E+2,0.29413000E+1,0.00000000E+0 - ,0.88562820E+3,0.161E+3,0.410E+2,0.29413000E+1,0.00000000E+0 - ,0.68336810E+3,0.161E+3,0.420E+2,0.29413000E+1,0.00000000E+0 - ,0.76261340E+3,0.161E+3,0.430E+2,0.29413000E+1,0.00000000E+0 - ,0.58065630E+3,0.161E+3,0.440E+2,0.29413000E+1,0.00000000E+0 - ,0.63462930E+3,0.161E+3,0.450E+2,0.29413000E+1,0.00000000E+0 - ,0.58839190E+3,0.161E+3,0.460E+2,0.29413000E+1,0.00000000E+0 - ,0.49078330E+3,0.161E+3,0.470E+2,0.29413000E+1,0.00000000E+0 - ,0.51833560E+3,0.161E+3,0.480E+2,0.29413000E+1,0.00000000E+0 - ,0.65088900E+3,0.161E+3,0.490E+2,0.29413000E+1,0.00000000E+0 - ,0.60128620E+3,0.161E+3,0.500E+2,0.29413000E+1,0.00000000E+0 - ,0.53534260E+3,0.161E+3,0.510E+2,0.29413000E+1,0.00000000E+0 - ,0.49642060E+3,0.161E+3,0.520E+2,0.29413000E+1,0.00000000E+0 - ,0.44860200E+3,0.161E+3,0.530E+2,0.29413000E+1,0.00000000E+0 - ,0.40312330E+3,0.161E+3,0.540E+2,0.29413000E+1,0.00000000E+0 - ,0.17186565E+4,0.161E+3,0.550E+2,0.29413000E+1,0.00000000E+0 - ,0.15759396E+4,0.161E+3,0.560E+2,0.29413000E+1,0.00000000E+0 - ,0.13833184E+4,0.161E+3,0.570E+2,0.29413000E+1,0.00000000E+0 - ,0.63260690E+3,0.161E+3,0.580E+2,0.29413000E+1,0.27991000E+1 - ,0.13959648E+4,0.161E+3,0.590E+2,0.29413000E+1,0.00000000E+0 - ,0.13402848E+4,0.161E+3,0.600E+2,0.29413000E+1,0.00000000E+0 - ,0.13066123E+4,0.161E+3,0.610E+2,0.29413000E+1,0.00000000E+0 - ,0.12756493E+4,0.161E+3,0.620E+2,0.29413000E+1,0.00000000E+0 - ,0.12481896E+4,0.161E+3,0.630E+2,0.29413000E+1,0.00000000E+0 - ,0.98061140E+3,0.161E+3,0.640E+2,0.29413000E+1,0.00000000E+0 - ,0.11056577E+4,0.161E+3,0.650E+2,0.29413000E+1,0.00000000E+0 - ,0.10661553E+4,0.161E+3,0.660E+2,0.29413000E+1,0.00000000E+0 - ,0.11255430E+4,0.161E+3,0.670E+2,0.29413000E+1,0.00000000E+0 - ,0.11016251E+4,0.161E+3,0.680E+2,0.29413000E+1,0.00000000E+0 - ,0.10800441E+4,0.161E+3,0.690E+2,0.29413000E+1,0.00000000E+0 - ,0.10674513E+4,0.161E+3,0.700E+2,0.29413000E+1,0.00000000E+0 - ,0.89877880E+3,0.161E+3,0.710E+2,0.29413000E+1,0.00000000E+0 - ,0.88303380E+3,0.161E+3,0.720E+2,0.29413000E+1,0.00000000E+0 - ,0.80541670E+3,0.161E+3,0.730E+2,0.29413000E+1,0.00000000E+0 - ,0.67986960E+3,0.161E+3,0.740E+2,0.29413000E+1,0.00000000E+0 - ,0.69147700E+3,0.161E+3,0.750E+2,0.29413000E+1,0.00000000E+0 - ,0.62640460E+3,0.161E+3,0.760E+2,0.29413000E+1,0.00000000E+0 - ,0.57347180E+3,0.161E+3,0.770E+2,0.29413000E+1,0.00000000E+0 - ,0.47626530E+3,0.161E+3,0.780E+2,0.29413000E+1,0.00000000E+0 - ,0.44493320E+3,0.161E+3,0.790E+2,0.29413000E+1,0.00000000E+0 - ,0.45759140E+3,0.161E+3,0.800E+2,0.29413000E+1,0.00000000E+0 - ,0.66821650E+3,0.161E+3,0.810E+2,0.29413000E+1,0.00000000E+0 - ,0.65280350E+3,0.161E+3,0.820E+2,0.29413000E+1,0.00000000E+0 - ,0.59931800E+3,0.161E+3,0.830E+2,0.29413000E+1,0.00000000E+0 - ,0.57130760E+3,0.161E+3,0.840E+2,0.29413000E+1,0.00000000E+0 - ,0.52695800E+3,0.161E+3,0.850E+2,0.29413000E+1,0.00000000E+0 - ,0.48275550E+3,0.161E+3,0.860E+2,0.29413000E+1,0.00000000E+0 - ,0.16217509E+4,0.161E+3,0.870E+2,0.29413000E+1,0.00000000E+0 - ,0.15576603E+4,0.161E+3,0.880E+2,0.29413000E+1,0.00000000E+0 - ,0.13757224E+4,0.161E+3,0.890E+2,0.29413000E+1,0.00000000E+0 - ,0.12351334E+4,0.161E+3,0.900E+2,0.29413000E+1,0.00000000E+0 - ,0.12269612E+4,0.161E+3,0.910E+2,0.29413000E+1,0.00000000E+0 - ,0.11880136E+4,0.161E+3,0.920E+2,0.29413000E+1,0.00000000E+0 - ,0.12239539E+4,0.161E+3,0.930E+2,0.29413000E+1,0.00000000E+0 - ,0.11851389E+4,0.161E+3,0.940E+2,0.29413000E+1,0.00000000E+0 - ,0.66143900E+2,0.161E+3,0.101E+3,0.29413000E+1,0.00000000E+0 - ,0.21491570E+3,0.161E+3,0.103E+3,0.29413000E+1,0.98650000E+0 - ,0.27404530E+3,0.161E+3,0.104E+3,0.29413000E+1,0.98080000E+0 - ,0.20906270E+3,0.161E+3,0.105E+3,0.29413000E+1,0.97060000E+0 - ,0.15740780E+3,0.161E+3,0.106E+3,0.29413000E+1,0.98680000E+0 - ,0.10939440E+3,0.161E+3,0.107E+3,0.29413000E+1,0.99440000E+0 - ,0.79656600E+2,0.161E+3,0.108E+3,0.29413000E+1,0.99250000E+0 - ,0.54794700E+2,0.161E+3,0.109E+3,0.29413000E+1,0.99820000E+0 - ,0.31433160E+3,0.161E+3,0.111E+3,0.29413000E+1,0.96840000E+0 - ,0.48615820E+3,0.161E+3,0.112E+3,0.29413000E+1,0.96280000E+0 - ,0.49197000E+3,0.161E+3,0.113E+3,0.29413000E+1,0.96480000E+0 - ,0.39485010E+3,0.161E+3,0.114E+3,0.29413000E+1,0.95070000E+0 - ,0.32309660E+3,0.161E+3,0.115E+3,0.29413000E+1,0.99470000E+0 - ,0.27308190E+3,0.161E+3,0.116E+3,0.29413000E+1,0.99480000E+0 - ,0.22312610E+3,0.161E+3,0.117E+3,0.29413000E+1,0.99720000E+0 - ,0.43320740E+3,0.161E+3,0.119E+3,0.29413000E+1,0.97670000E+0 - ,0.82964080E+3,0.161E+3,0.120E+3,0.29413000E+1,0.98310000E+0 - ,0.43282760E+3,0.161E+3,0.121E+3,0.29413000E+1,0.18627000E+1 - ,0.41783600E+3,0.161E+3,0.122E+3,0.29413000E+1,0.18299000E+1 - ,0.40950580E+3,0.161E+3,0.123E+3,0.29413000E+1,0.19138000E+1 - ,0.40578350E+3,0.161E+3,0.124E+3,0.29413000E+1,0.18269000E+1 - ,0.37312230E+3,0.161E+3,0.125E+3,0.29413000E+1,0.16406000E+1 - ,0.34526760E+3,0.161E+3,0.126E+3,0.29413000E+1,0.16483000E+1 - ,0.32938120E+3,0.161E+3,0.127E+3,0.29413000E+1,0.17149000E+1 - ,0.32203750E+3,0.161E+3,0.128E+3,0.29413000E+1,0.17937000E+1 - ,0.31836420E+3,0.161E+3,0.129E+3,0.29413000E+1,0.95760000E+0 - ,0.29841060E+3,0.161E+3,0.130E+3,0.29413000E+1,0.19419000E+1 - ,0.48821620E+3,0.161E+3,0.131E+3,0.29413000E+1,0.96010000E+0 - ,0.42840160E+3,0.161E+3,0.132E+3,0.29413000E+1,0.94340000E+0 - ,0.38367750E+3,0.161E+3,0.133E+3,0.29413000E+1,0.98890000E+0 - ,0.35019520E+3,0.161E+3,0.134E+3,0.29413000E+1,0.99010000E+0 - ,0.30833610E+3,0.161E+3,0.135E+3,0.29413000E+1,0.99740000E+0 - ,0.51680260E+3,0.161E+3,0.137E+3,0.29413000E+1,0.97380000E+0 - ,0.10097020E+4,0.161E+3,0.138E+3,0.29413000E+1,0.98010000E+0 - ,0.77048950E+3,0.161E+3,0.139E+3,0.29413000E+1,0.19153000E+1 - ,0.57252260E+3,0.161E+3,0.140E+3,0.29413000E+1,0.19355000E+1 - ,0.57822130E+3,0.161E+3,0.141E+3,0.29413000E+1,0.19545000E+1 - ,0.53906400E+3,0.161E+3,0.142E+3,0.29413000E+1,0.19420000E+1 - ,0.60508290E+3,0.161E+3,0.143E+3,0.29413000E+1,0.16682000E+1 - ,0.46961340E+3,0.161E+3,0.144E+3,0.29413000E+1,0.18584000E+1 - ,0.43933610E+3,0.161E+3,0.145E+3,0.29413000E+1,0.19003000E+1 - ,0.40794200E+3,0.161E+3,0.146E+3,0.29413000E+1,0.18630000E+1 - ,0.39468140E+3,0.161E+3,0.147E+3,0.29413000E+1,0.96790000E+0 - ,0.39021360E+3,0.161E+3,0.148E+3,0.29413000E+1,0.19539000E+1 - ,0.62022960E+3,0.161E+3,0.149E+3,0.29413000E+1,0.96330000E+0 - ,0.56054060E+3,0.161E+3,0.150E+3,0.29413000E+1,0.95140000E+0 - ,0.52460280E+3,0.161E+3,0.151E+3,0.29413000E+1,0.97490000E+0 - ,0.49603960E+3,0.161E+3,0.152E+3,0.29413000E+1,0.98110000E+0 - ,0.45281350E+3,0.161E+3,0.153E+3,0.29413000E+1,0.99680000E+0 - ,0.61065170E+3,0.161E+3,0.155E+3,0.29413000E+1,0.99090000E+0 - ,0.13096071E+4,0.161E+3,0.156E+3,0.29413000E+1,0.97970000E+0 - ,0.97534290E+3,0.161E+3,0.157E+3,0.29413000E+1,0.19373000E+1 - ,0.61350220E+3,0.161E+3,0.159E+3,0.29413000E+1,0.29425000E+1 - ,0.60081010E+3,0.161E+3,0.160E+3,0.29413000E+1,0.29455000E+1 - ,0.58174350E+3,0.161E+3,0.161E+3,0.29413000E+1,0.29413000E+1 - ,0.41118600E+2,0.162E+3,0.100E+1,0.29300000E+1,0.91180000E+0 - ,0.27091000E+2,0.162E+3,0.200E+1,0.29300000E+1,0.00000000E+0 - ,0.65371250E+3,0.162E+3,0.300E+1,0.29300000E+1,0.00000000E+0 - ,0.37335380E+3,0.162E+3,0.400E+1,0.29300000E+1,0.00000000E+0 - ,0.25006900E+3,0.162E+3,0.500E+1,0.29300000E+1,0.00000000E+0 - ,0.16835070E+3,0.162E+3,0.600E+1,0.29300000E+1,0.00000000E+0 - ,0.11747400E+3,0.162E+3,0.700E+1,0.29300000E+1,0.00000000E+0 - ,0.88833200E+2,0.162E+3,0.800E+1,0.29300000E+1,0.00000000E+0 - ,0.67241500E+2,0.162E+3,0.900E+1,0.29300000E+1,0.00000000E+0 - ,0.51697700E+2,0.162E+3,0.100E+2,0.29300000E+1,0.00000000E+0 - ,0.78120500E+3,0.162E+3,0.110E+2,0.29300000E+1,0.00000000E+0 - ,0.59600220E+3,0.162E+3,0.120E+2,0.29300000E+1,0.00000000E+0 - ,0.54777420E+3,0.162E+3,0.130E+2,0.29300000E+1,0.00000000E+0 - ,0.42994940E+3,0.162E+3,0.140E+2,0.29300000E+1,0.00000000E+0 - ,0.33425170E+3,0.162E+3,0.150E+2,0.29300000E+1,0.00000000E+0 - ,0.27691160E+3,0.162E+3,0.160E+2,0.29300000E+1,0.00000000E+0 - ,0.22583700E+3,0.162E+3,0.170E+2,0.29300000E+1,0.00000000E+0 - ,0.18453320E+3,0.162E+3,0.180E+2,0.29300000E+1,0.00000000E+0 - ,0.12836315E+4,0.162E+3,0.190E+2,0.29300000E+1,0.00000000E+0 - ,0.10509848E+4,0.162E+3,0.200E+2,0.29300000E+1,0.00000000E+0 - ,0.86692280E+3,0.162E+3,0.210E+2,0.29300000E+1,0.00000000E+0 - ,0.83609940E+3,0.162E+3,0.220E+2,0.29300000E+1,0.00000000E+0 - ,0.76505120E+3,0.162E+3,0.230E+2,0.29300000E+1,0.00000000E+0 - ,0.60271130E+3,0.162E+3,0.240E+2,0.29300000E+1,0.00000000E+0 - ,0.65796350E+3,0.162E+3,0.250E+2,0.29300000E+1,0.00000000E+0 - ,0.51637700E+3,0.162E+3,0.260E+2,0.29300000E+1,0.00000000E+0 - ,0.54633630E+3,0.162E+3,0.270E+2,0.29300000E+1,0.00000000E+0 - ,0.56322550E+3,0.162E+3,0.280E+2,0.29300000E+1,0.00000000E+0 - ,0.43190330E+3,0.162E+3,0.290E+2,0.29300000E+1,0.00000000E+0 - ,0.44225450E+3,0.162E+3,0.300E+2,0.29300000E+1,0.00000000E+0 - ,0.52416760E+3,0.162E+3,0.310E+2,0.29300000E+1,0.00000000E+0 - ,0.46081790E+3,0.162E+3,0.320E+2,0.29300000E+1,0.00000000E+0 - ,0.39201390E+3,0.162E+3,0.330E+2,0.29300000E+1,0.00000000E+0 - ,0.35121820E+3,0.162E+3,0.340E+2,0.29300000E+1,0.00000000E+0 - ,0.30689590E+3,0.162E+3,0.350E+2,0.29300000E+1,0.00000000E+0 - ,0.26654940E+3,0.162E+3,0.360E+2,0.29300000E+1,0.00000000E+0 - ,0.14379300E+4,0.162E+3,0.370E+2,0.29300000E+1,0.00000000E+0 - ,0.12526342E+4,0.162E+3,0.380E+2,0.29300000E+1,0.00000000E+0 - ,0.10942695E+4,0.162E+3,0.390E+2,0.29300000E+1,0.00000000E+0 - ,0.98185530E+3,0.162E+3,0.400E+2,0.29300000E+1,0.00000000E+0 - ,0.89439170E+3,0.162E+3,0.410E+2,0.29300000E+1,0.00000000E+0 - ,0.68930910E+3,0.162E+3,0.420E+2,0.29300000E+1,0.00000000E+0 - ,0.76959900E+3,0.162E+3,0.430E+2,0.29300000E+1,0.00000000E+0 - ,0.58520650E+3,0.162E+3,0.440E+2,0.29300000E+1,0.00000000E+0 - ,0.63957050E+3,0.162E+3,0.450E+2,0.29300000E+1,0.00000000E+0 - ,0.59271510E+3,0.162E+3,0.460E+2,0.29300000E+1,0.00000000E+0 - ,0.49454430E+3,0.162E+3,0.470E+2,0.29300000E+1,0.00000000E+0 - ,0.52185710E+3,0.162E+3,0.480E+2,0.29300000E+1,0.00000000E+0 - ,0.65623190E+3,0.162E+3,0.490E+2,0.29300000E+1,0.00000000E+0 - ,0.60519030E+3,0.162E+3,0.500E+2,0.29300000E+1,0.00000000E+0 - ,0.53798990E+3,0.162E+3,0.510E+2,0.29300000E+1,0.00000000E+0 - ,0.49842910E+3,0.162E+3,0.520E+2,0.29300000E+1,0.00000000E+0 - ,0.44999200E+3,0.162E+3,0.530E+2,0.29300000E+1,0.00000000E+0 - ,0.40401740E+3,0.162E+3,0.540E+2,0.29300000E+1,0.00000000E+0 - ,0.17521410E+4,0.162E+3,0.550E+2,0.29300000E+1,0.00000000E+0 - ,0.15986396E+4,0.162E+3,0.560E+2,0.29300000E+1,0.00000000E+0 - ,0.14005068E+4,0.162E+3,0.570E+2,0.29300000E+1,0.00000000E+0 - ,0.63591570E+3,0.162E+3,0.580E+2,0.29300000E+1,0.27991000E+1 - ,0.14152709E+4,0.162E+3,0.590E+2,0.29300000E+1,0.00000000E+0 - ,0.13581904E+4,0.162E+3,0.600E+2,0.29300000E+1,0.00000000E+0 - ,0.13239329E+4,0.162E+3,0.610E+2,0.29300000E+1,0.00000000E+0 - ,0.12924475E+4,0.162E+3,0.620E+2,0.29300000E+1,0.00000000E+0 - ,0.12645213E+4,0.162E+3,0.630E+2,0.29300000E+1,0.00000000E+0 - ,0.99151760E+3,0.162E+3,0.640E+2,0.29300000E+1,0.00000000E+0 - ,0.11218549E+4,0.162E+3,0.650E+2,0.29300000E+1,0.00000000E+0 - ,0.10816001E+4,0.162E+3,0.660E+2,0.29300000E+1,0.00000000E+0 - ,0.11396825E+4,0.162E+3,0.670E+2,0.29300000E+1,0.00000000E+0 - ,0.11153978E+4,0.162E+3,0.680E+2,0.29300000E+1,0.00000000E+0 - ,0.10934602E+4,0.162E+3,0.690E+2,0.29300000E+1,0.00000000E+0 - ,0.10807974E+4,0.162E+3,0.700E+2,0.29300000E+1,0.00000000E+0 - ,0.90896190E+3,0.162E+3,0.710E+2,0.29300000E+1,0.00000000E+0 - ,0.89127890E+3,0.162E+3,0.720E+2,0.29300000E+1,0.00000000E+0 - ,0.81208250E+3,0.162E+3,0.730E+2,0.29300000E+1,0.00000000E+0 - ,0.68499030E+3,0.162E+3,0.740E+2,0.29300000E+1,0.00000000E+0 - ,0.69640000E+3,0.162E+3,0.750E+2,0.29300000E+1,0.00000000E+0 - ,0.63031370E+3,0.162E+3,0.760E+2,0.29300000E+1,0.00000000E+0 - ,0.57665350E+3,0.162E+3,0.770E+2,0.29300000E+1,0.00000000E+0 - ,0.47857310E+3,0.162E+3,0.780E+2,0.29300000E+1,0.00000000E+0 - ,0.44696260E+3,0.162E+3,0.790E+2,0.29300000E+1,0.00000000E+0 - ,0.45952800E+3,0.162E+3,0.800E+2,0.29300000E+1,0.00000000E+0 - ,0.67346620E+3,0.162E+3,0.810E+2,0.29300000E+1,0.00000000E+0 - ,0.65702270E+3,0.162E+3,0.820E+2,0.29300000E+1,0.00000000E+0 - ,0.60234550E+3,0.162E+3,0.830E+2,0.29300000E+1,0.00000000E+0 - ,0.57374780E+3,0.162E+3,0.840E+2,0.29300000E+1,0.00000000E+0 - ,0.52872700E+3,0.162E+3,0.850E+2,0.29300000E+1,0.00000000E+0 - ,0.48398270E+3,0.162E+3,0.860E+2,0.29300000E+1,0.00000000E+0 - ,0.16501361E+4,0.162E+3,0.870E+2,0.29300000E+1,0.00000000E+0 - ,0.15785123E+4,0.162E+3,0.880E+2,0.29300000E+1,0.00000000E+0 - ,0.13916728E+4,0.162E+3,0.890E+2,0.29300000E+1,0.00000000E+0 - ,0.12470771E+4,0.162E+3,0.900E+2,0.29300000E+1,0.00000000E+0 - ,0.12400445E+4,0.162E+3,0.910E+2,0.29300000E+1,0.00000000E+0 - ,0.12006028E+4,0.162E+3,0.920E+2,0.29300000E+1,0.00000000E+0 - ,0.12383187E+4,0.162E+3,0.930E+2,0.29300000E+1,0.00000000E+0 - ,0.11987720E+4,0.162E+3,0.940E+2,0.29300000E+1,0.00000000E+0 - ,0.66405700E+2,0.162E+3,0.101E+3,0.29300000E+1,0.00000000E+0 - ,0.21686950E+3,0.162E+3,0.103E+3,0.29300000E+1,0.98650000E+0 - ,0.27638280E+3,0.162E+3,0.104E+3,0.29300000E+1,0.98080000E+0 - ,0.21014480E+3,0.162E+3,0.105E+3,0.29300000E+1,0.97060000E+0 - ,0.15794060E+3,0.162E+3,0.106E+3,0.29300000E+1,0.98680000E+0 - ,0.10955230E+3,0.162E+3,0.107E+3,0.29300000E+1,0.99440000E+0 - ,0.79647700E+2,0.162E+3,0.108E+3,0.29300000E+1,0.99250000E+0 - ,0.54685200E+2,0.162E+3,0.109E+3,0.29300000E+1,0.99820000E+0 - ,0.31740960E+3,0.162E+3,0.111E+3,0.29300000E+1,0.96840000E+0 - ,0.49113850E+3,0.162E+3,0.112E+3,0.29300000E+1,0.96280000E+0 - ,0.49609590E+3,0.162E+3,0.113E+3,0.29300000E+1,0.96480000E+0 - ,0.39717520E+3,0.162E+3,0.114E+3,0.29300000E+1,0.95070000E+0 - ,0.32442460E+3,0.162E+3,0.115E+3,0.29300000E+1,0.99470000E+0 - ,0.27388040E+3,0.162E+3,0.116E+3,0.29300000E+1,0.99480000E+0 - ,0.22350790E+3,0.162E+3,0.117E+3,0.29300000E+1,0.99720000E+0 - ,0.43688540E+3,0.162E+3,0.119E+3,0.29300000E+1,0.97670000E+0 - ,0.84105190E+3,0.162E+3,0.120E+3,0.29300000E+1,0.98310000E+0 - ,0.43551720E+3,0.162E+3,0.121E+3,0.29300000E+1,0.18627000E+1 - ,0.42046710E+3,0.162E+3,0.122E+3,0.29300000E+1,0.18299000E+1 - ,0.41208740E+3,0.162E+3,0.123E+3,0.29300000E+1,0.19138000E+1 - ,0.40844600E+3,0.162E+3,0.124E+3,0.29300000E+1,0.18269000E+1 - ,0.37510510E+3,0.162E+3,0.125E+3,0.29300000E+1,0.16406000E+1 - ,0.34698680E+3,0.162E+3,0.126E+3,0.29300000E+1,0.16483000E+1 - ,0.33102820E+3,0.162E+3,0.127E+3,0.29300000E+1,0.17149000E+1 - ,0.32367720E+3,0.162E+3,0.128E+3,0.29300000E+1,0.17937000E+1 - ,0.32026840E+3,0.162E+3,0.129E+3,0.29300000E+1,0.95760000E+0 - ,0.29970920E+3,0.162E+3,0.130E+3,0.29300000E+1,0.19419000E+1 - ,0.49191570E+3,0.162E+3,0.131E+3,0.29300000E+1,0.96010000E+0 - ,0.43081190E+3,0.162E+3,0.132E+3,0.29300000E+1,0.94340000E+0 - ,0.38530990E+3,0.162E+3,0.133E+3,0.29300000E+1,0.98890000E+0 - ,0.35136440E+3,0.162E+3,0.134E+3,0.29300000E+1,0.99010000E+0 - ,0.30905750E+3,0.162E+3,0.135E+3,0.29300000E+1,0.99740000E+0 - ,0.52097030E+3,0.162E+3,0.137E+3,0.29300000E+1,0.97380000E+0 - ,0.10240101E+4,0.162E+3,0.138E+3,0.29300000E+1,0.98010000E+0 - ,0.77856140E+3,0.162E+3,0.139E+3,0.29300000E+1,0.19153000E+1 - ,0.57624530E+3,0.162E+3,0.140E+3,0.29300000E+1,0.19355000E+1 - ,0.58193050E+3,0.162E+3,0.141E+3,0.29300000E+1,0.19545000E+1 - ,0.54238030E+3,0.162E+3,0.142E+3,0.29300000E+1,0.19420000E+1 - ,0.60986550E+3,0.162E+3,0.143E+3,0.29300000E+1,0.16682000E+1 - ,0.47194410E+3,0.162E+3,0.144E+3,0.29300000E+1,0.18584000E+1 - ,0.44147690E+3,0.162E+3,0.145E+3,0.29300000E+1,0.19003000E+1 - ,0.40984440E+3,0.162E+3,0.146E+3,0.29300000E+1,0.18630000E+1 - ,0.39658040E+3,0.162E+3,0.147E+3,0.29300000E+1,0.96790000E+0 - ,0.39174910E+3,0.162E+3,0.148E+3,0.29300000E+1,0.19539000E+1 - ,0.62494310E+3,0.162E+3,0.149E+3,0.29300000E+1,0.96330000E+0 - ,0.56383860E+3,0.162E+3,0.150E+3,0.29300000E+1,0.95140000E+0 - ,0.52709190E+3,0.162E+3,0.151E+3,0.29300000E+1,0.97490000E+0 - ,0.49801930E+3,0.162E+3,0.152E+3,0.29300000E+1,0.98110000E+0 - ,0.45422360E+3,0.162E+3,0.153E+3,0.29300000E+1,0.99680000E+0 - ,0.61477890E+3,0.162E+3,0.155E+3,0.29300000E+1,0.99090000E+0 - ,0.13297509E+4,0.162E+3,0.156E+3,0.29300000E+1,0.97970000E+0 - ,0.98604390E+3,0.162E+3,0.157E+3,0.29300000E+1,0.19373000E+1 - ,0.61665720E+3,0.162E+3,0.159E+3,0.29300000E+1,0.29425000E+1 - ,0.60388680E+3,0.162E+3,0.160E+3,0.29300000E+1,0.29455000E+1 - ,0.58467880E+3,0.162E+3,0.161E+3,0.29300000E+1,0.29413000E+1 - ,0.58778910E+3,0.162E+3,0.162E+3,0.29300000E+1,0.29300000E+1 - ,0.39256400E+2,0.163E+3,0.100E+1,0.18286000E+1,0.91180000E+0 - ,0.25691300E+2,0.163E+3,0.200E+1,0.18286000E+1,0.00000000E+0 - ,0.65368460E+3,0.163E+3,0.300E+1,0.18286000E+1,0.00000000E+0 - ,0.36511120E+3,0.163E+3,0.400E+1,0.18286000E+1,0.00000000E+0 - ,0.24163430E+3,0.163E+3,0.500E+1,0.18286000E+1,0.00000000E+0 - ,0.16139330E+3,0.163E+3,0.600E+1,0.18286000E+1,0.00000000E+0 - ,0.11205120E+3,0.163E+3,0.700E+1,0.18286000E+1,0.00000000E+0 - ,0.84473100E+2,0.163E+3,0.800E+1,0.18286000E+1,0.00000000E+0 - ,0.63799600E+2,0.163E+3,0.900E+1,0.18286000E+1,0.00000000E+0 - ,0.48980900E+2,0.163E+3,0.100E+2,0.18286000E+1,0.00000000E+0 - ,0.78026740E+3,0.163E+3,0.110E+2,0.18286000E+1,0.00000000E+0 - ,0.58523670E+3,0.163E+3,0.120E+2,0.18286000E+1,0.00000000E+0 - ,0.53437570E+3,0.163E+3,0.130E+2,0.18286000E+1,0.00000000E+0 - ,0.41591500E+3,0.163E+3,0.140E+2,0.18286000E+1,0.00000000E+0 - ,0.32121200E+3,0.163E+3,0.150E+2,0.18286000E+1,0.00000000E+0 - ,0.26508690E+3,0.163E+3,0.160E+2,0.18286000E+1,0.00000000E+0 - ,0.21546030E+3,0.163E+3,0.170E+2,0.18286000E+1,0.00000000E+0 - ,0.17559080E+3,0.163E+3,0.180E+2,0.18286000E+1,0.00000000E+0 - ,0.12856965E+4,0.163E+3,0.190E+2,0.18286000E+1,0.00000000E+0 - ,0.10394662E+4,0.163E+3,0.200E+2,0.18286000E+1,0.00000000E+0 - ,0.85482160E+3,0.163E+3,0.210E+2,0.18286000E+1,0.00000000E+0 - ,0.82218100E+3,0.163E+3,0.220E+2,0.18286000E+1,0.00000000E+0 - ,0.75108930E+3,0.163E+3,0.230E+2,0.18286000E+1,0.00000000E+0 - ,0.59166600E+3,0.163E+3,0.240E+2,0.18286000E+1,0.00000000E+0 - ,0.64444210E+3,0.163E+3,0.250E+2,0.18286000E+1,0.00000000E+0 - ,0.50560640E+3,0.163E+3,0.260E+2,0.18286000E+1,0.00000000E+0 - ,0.53300400E+3,0.163E+3,0.270E+2,0.18286000E+1,0.00000000E+0 - ,0.55039520E+3,0.163E+3,0.280E+2,0.18286000E+1,0.00000000E+0 - ,0.42213760E+3,0.163E+3,0.290E+2,0.18286000E+1,0.00000000E+0 - ,0.42993040E+3,0.163E+3,0.300E+2,0.18286000E+1,0.00000000E+0 - ,0.51021570E+3,0.163E+3,0.310E+2,0.18286000E+1,0.00000000E+0 - ,0.44563750E+3,0.163E+3,0.320E+2,0.18286000E+1,0.00000000E+0 - ,0.37699910E+3,0.163E+3,0.330E+2,0.18286000E+1,0.00000000E+0 - ,0.33669100E+3,0.163E+3,0.340E+2,0.18286000E+1,0.00000000E+0 - ,0.29330360E+3,0.163E+3,0.350E+2,0.18286000E+1,0.00000000E+0 - ,0.25408590E+3,0.163E+3,0.360E+2,0.18286000E+1,0.00000000E+0 - ,0.14385445E+4,0.163E+3,0.370E+2,0.18286000E+1,0.00000000E+0 - ,0.12395504E+4,0.163E+3,0.380E+2,0.18286000E+1,0.00000000E+0 - ,0.10770858E+4,0.163E+3,0.390E+2,0.18286000E+1,0.00000000E+0 - ,0.96327150E+3,0.163E+3,0.400E+2,0.18286000E+1,0.00000000E+0 - ,0.87559310E+3,0.163E+3,0.410E+2,0.18286000E+1,0.00000000E+0 - ,0.67249140E+3,0.163E+3,0.420E+2,0.18286000E+1,0.00000000E+0 - ,0.75175670E+3,0.163E+3,0.430E+2,0.18286000E+1,0.00000000E+0 - ,0.56950600E+3,0.163E+3,0.440E+2,0.18286000E+1,0.00000000E+0 - ,0.62232140E+3,0.163E+3,0.450E+2,0.18286000E+1,0.00000000E+0 - ,0.57599650E+3,0.163E+3,0.460E+2,0.18286000E+1,0.00000000E+0 - ,0.48115240E+3,0.163E+3,0.470E+2,0.18286000E+1,0.00000000E+0 - ,0.50633030E+3,0.163E+3,0.480E+2,0.18286000E+1,0.00000000E+0 - ,0.63922390E+3,0.163E+3,0.490E+2,0.18286000E+1,0.00000000E+0 - ,0.58633170E+3,0.163E+3,0.500E+2,0.18286000E+1,0.00000000E+0 - ,0.51859750E+3,0.163E+3,0.510E+2,0.18286000E+1,0.00000000E+0 - ,0.47906490E+3,0.163E+3,0.520E+2,0.18286000E+1,0.00000000E+0 - ,0.43122670E+3,0.163E+3,0.530E+2,0.18286000E+1,0.00000000E+0 - ,0.38614600E+3,0.163E+3,0.540E+2,0.18286000E+1,0.00000000E+0 - ,0.17518319E+4,0.163E+3,0.550E+2,0.18286000E+1,0.00000000E+0 - ,0.15845929E+4,0.163E+3,0.560E+2,0.18286000E+1,0.00000000E+0 - ,0.13809239E+4,0.163E+3,0.570E+2,0.18286000E+1,0.00000000E+0 - ,0.61365370E+3,0.163E+3,0.580E+2,0.18286000E+1,0.27991000E+1 - ,0.14003880E+4,0.163E+3,0.590E+2,0.18286000E+1,0.00000000E+0 - ,0.13429247E+4,0.163E+3,0.600E+2,0.18286000E+1,0.00000000E+0 - ,0.13087424E+4,0.163E+3,0.610E+2,0.18286000E+1,0.00000000E+0 - ,0.12773568E+4,0.163E+3,0.620E+2,0.18286000E+1,0.00000000E+0 - ,0.12495054E+4,0.163E+3,0.630E+2,0.18286000E+1,0.00000000E+0 - ,0.97406900E+3,0.163E+3,0.640E+2,0.18286000E+1,0.00000000E+0 - ,0.11111877E+4,0.163E+3,0.650E+2,0.18286000E+1,0.00000000E+0 - ,0.10699921E+4,0.163E+3,0.660E+2,0.18286000E+1,0.00000000E+0 - ,0.11246771E+4,0.163E+3,0.670E+2,0.18286000E+1,0.00000000E+0 - ,0.11005512E+4,0.163E+3,0.680E+2,0.18286000E+1,0.00000000E+0 - ,0.10786794E+4,0.163E+3,0.690E+2,0.18286000E+1,0.00000000E+0 - ,0.10664387E+4,0.163E+3,0.700E+2,0.18286000E+1,0.00000000E+0 - ,0.89316870E+3,0.163E+3,0.710E+2,0.18286000E+1,0.00000000E+0 - ,0.87110070E+3,0.163E+3,0.720E+2,0.18286000E+1,0.00000000E+0 - ,0.79118140E+3,0.163E+3,0.730E+2,0.18286000E+1,0.00000000E+0 - ,0.66583170E+3,0.163E+3,0.740E+2,0.18286000E+1,0.00000000E+0 - ,0.67605760E+3,0.163E+3,0.750E+2,0.18286000E+1,0.00000000E+0 - ,0.61029470E+3,0.163E+3,0.760E+2,0.18286000E+1,0.00000000E+0 - ,0.55718050E+3,0.163E+3,0.770E+2,0.18286000E+1,0.00000000E+0 - ,0.46153520E+3,0.163E+3,0.780E+2,0.18286000E+1,0.00000000E+0 - ,0.43073110E+3,0.163E+3,0.790E+2,0.18286000E+1,0.00000000E+0 - ,0.44232070E+3,0.163E+3,0.800E+2,0.18286000E+1,0.00000000E+0 - ,0.65532760E+3,0.163E+3,0.810E+2,0.18286000E+1,0.00000000E+0 - ,0.63664300E+3,0.163E+3,0.820E+2,0.18286000E+1,0.00000000E+0 - ,0.58099830E+3,0.163E+3,0.830E+2,0.18286000E+1,0.00000000E+0 - ,0.55199550E+3,0.163E+3,0.840E+2,0.18286000E+1,0.00000000E+0 - ,0.50719420E+3,0.163E+3,0.850E+2,0.18286000E+1,0.00000000E+0 - ,0.46310600E+3,0.163E+3,0.860E+2,0.18286000E+1,0.00000000E+0 - ,0.16436058E+4,0.163E+3,0.870E+2,0.18286000E+1,0.00000000E+0 - ,0.15604236E+4,0.163E+3,0.880E+2,0.18286000E+1,0.00000000E+0 - ,0.13690464E+4,0.163E+3,0.890E+2,0.18286000E+1,0.00000000E+0 - ,0.12201277E+4,0.163E+3,0.900E+2,0.18286000E+1,0.00000000E+0 - ,0.12166738E+4,0.163E+3,0.910E+2,0.18286000E+1,0.00000000E+0 - ,0.11778612E+4,0.163E+3,0.920E+2,0.18286000E+1,0.00000000E+0 - ,0.12191450E+4,0.163E+3,0.930E+2,0.18286000E+1,0.00000000E+0 - ,0.11794690E+4,0.163E+3,0.940E+2,0.18286000E+1,0.00000000E+0 - ,0.63762900E+2,0.163E+3,0.101E+3,0.18286000E+1,0.00000000E+0 - ,0.21174000E+3,0.163E+3,0.103E+3,0.18286000E+1,0.98650000E+0 - ,0.26923050E+3,0.163E+3,0.104E+3,0.18286000E+1,0.98080000E+0 - ,0.20261480E+3,0.163E+3,0.105E+3,0.18286000E+1,0.97060000E+0 - ,0.15147130E+3,0.163E+3,0.106E+3,0.18286000E+1,0.98680000E+0 - ,0.10450970E+3,0.163E+3,0.107E+3,0.18286000E+1,0.99440000E+0 - ,0.75690800E+2,0.163E+3,0.108E+3,0.18286000E+1,0.99250000E+0 - ,0.51755700E+2,0.163E+3,0.109E+3,0.18286000E+1,0.99820000E+0 - ,0.31068640E+3,0.163E+3,0.111E+3,0.18286000E+1,0.96840000E+0 - ,0.48112160E+3,0.163E+3,0.112E+3,0.18286000E+1,0.96280000E+0 - ,0.48324150E+3,0.163E+3,0.113E+3,0.18286000E+1,0.96480000E+0 - ,0.38377640E+3,0.163E+3,0.114E+3,0.18286000E+1,0.95070000E+0 - ,0.31171580E+3,0.163E+3,0.115E+3,0.18286000E+1,0.99470000E+0 - ,0.26222190E+3,0.163E+3,0.116E+3,0.18286000E+1,0.99480000E+0 - ,0.21326140E+3,0.163E+3,0.117E+3,0.18286000E+1,0.99720000E+0 - ,0.42593700E+3,0.163E+3,0.119E+3,0.18286000E+1,0.97670000E+0 - ,0.83127500E+3,0.163E+3,0.120E+3,0.18286000E+1,0.98310000E+0 - ,0.42169690E+3,0.163E+3,0.121E+3,0.18286000E+1,0.18627000E+1 - ,0.40700940E+3,0.163E+3,0.122E+3,0.18286000E+1,0.18299000E+1 - ,0.39898160E+3,0.163E+3,0.123E+3,0.18286000E+1,0.19138000E+1 - ,0.39579870E+3,0.163E+3,0.124E+3,0.18286000E+1,0.18269000E+1 - ,0.36204930E+3,0.163E+3,0.125E+3,0.18286000E+1,0.16406000E+1 - ,0.33456150E+3,0.163E+3,0.126E+3,0.18286000E+1,0.16483000E+1 - ,0.31919930E+3,0.163E+3,0.127E+3,0.18286000E+1,0.17149000E+1 - ,0.31222210E+3,0.163E+3,0.128E+3,0.18286000E+1,0.17937000E+1 - ,0.30989590E+3,0.163E+3,0.129E+3,0.18286000E+1,0.95760000E+0 - ,0.28840040E+3,0.163E+3,0.130E+3,0.18286000E+1,0.19419000E+1 - ,0.47803960E+3,0.163E+3,0.131E+3,0.18286000E+1,0.96010000E+0 - ,0.41601900E+3,0.163E+3,0.132E+3,0.18286000E+1,0.94340000E+0 - ,0.37044180E+3,0.163E+3,0.133E+3,0.18286000E+1,0.98890000E+0 - ,0.33685390E+3,0.163E+3,0.134E+3,0.18286000E+1,0.99010000E+0 - ,0.29542100E+3,0.163E+3,0.135E+3,0.18286000E+1,0.99740000E+0 - ,0.50722850E+3,0.163E+3,0.137E+3,0.18286000E+1,0.97380000E+0 - ,0.10128078E+4,0.163E+3,0.138E+3,0.18286000E+1,0.98010000E+0 - ,0.76200330E+3,0.163E+3,0.139E+3,0.18286000E+1,0.19153000E+1 - ,0.55829510E+3,0.163E+3,0.140E+3,0.18286000E+1,0.19355000E+1 - ,0.56398160E+3,0.163E+3,0.141E+3,0.18286000E+1,0.19545000E+1 - ,0.52490850E+3,0.163E+3,0.142E+3,0.18286000E+1,0.19420000E+1 - ,0.59323860E+3,0.163E+3,0.143E+3,0.18286000E+1,0.16682000E+1 - ,0.45513890E+3,0.163E+3,0.144E+3,0.18286000E+1,0.18584000E+1 - ,0.42567220E+3,0.163E+3,0.145E+3,0.18286000E+1,0.19003000E+1 - ,0.39496580E+3,0.163E+3,0.146E+3,0.18286000E+1,0.18630000E+1 - ,0.38242790E+3,0.163E+3,0.147E+3,0.18286000E+1,0.96790000E+0 - ,0.37661900E+3,0.163E+3,0.148E+3,0.18286000E+1,0.19539000E+1 - ,0.60761490E+3,0.163E+3,0.149E+3,0.18286000E+1,0.96330000E+0 - ,0.54518900E+3,0.163E+3,0.150E+3,0.18286000E+1,0.95140000E+0 - ,0.50775680E+3,0.163E+3,0.151E+3,0.18286000E+1,0.97490000E+0 - ,0.47858010E+3,0.163E+3,0.152E+3,0.18286000E+1,0.98110000E+0 - ,0.43529630E+3,0.163E+3,0.153E+3,0.18286000E+1,0.99680000E+0 - ,0.59594990E+3,0.163E+3,0.155E+3,0.18286000E+1,0.99090000E+0 - ,0.13176067E+4,0.163E+3,0.156E+3,0.18286000E+1,0.97970000E+0 - ,0.96582370E+3,0.163E+3,0.157E+3,0.18286000E+1,0.19373000E+1 - ,0.59490700E+3,0.163E+3,0.159E+3,0.18286000E+1,0.29425000E+1 - ,0.58256410E+3,0.163E+3,0.160E+3,0.18286000E+1,0.29455000E+1 - ,0.56390150E+3,0.163E+3,0.161E+3,0.18286000E+1,0.29413000E+1 - ,0.56731710E+3,0.163E+3,0.162E+3,0.18286000E+1,0.29300000E+1 - ,0.54902810E+3,0.163E+3,0.163E+3,0.18286000E+1,0.18286000E+1 - ,0.41327500E+2,0.164E+3,0.100E+1,0.28732000E+1,0.91180000E+0 - ,0.27159500E+2,0.164E+3,0.200E+1,0.28732000E+1,0.00000000E+0 - ,0.65909240E+3,0.164E+3,0.300E+1,0.28732000E+1,0.00000000E+0 - ,0.37646100E+3,0.164E+3,0.400E+1,0.28732000E+1,0.00000000E+0 - ,0.25184240E+3,0.164E+3,0.500E+1,0.28732000E+1,0.00000000E+0 - ,0.16931590E+3,0.164E+3,0.600E+1,0.28732000E+1,0.00000000E+0 - ,0.11799770E+3,0.164E+3,0.700E+1,0.28732000E+1,0.00000000E+0 - ,0.89135900E+2,0.164E+3,0.800E+1,0.28732000E+1,0.00000000E+0 - ,0.67403000E+2,0.164E+3,0.900E+1,0.28732000E+1,0.00000000E+0 - ,0.51775600E+2,0.164E+3,0.100E+2,0.28732000E+1,0.00000000E+0 - ,0.78761870E+3,0.164E+3,0.110E+2,0.28732000E+1,0.00000000E+0 - ,0.60103840E+3,0.164E+3,0.120E+2,0.28732000E+1,0.00000000E+0 - ,0.55215450E+3,0.164E+3,0.130E+2,0.28732000E+1,0.00000000E+0 - ,0.43306620E+3,0.164E+3,0.140E+2,0.28732000E+1,0.00000000E+0 - ,0.33637000E+3,0.164E+3,0.150E+2,0.28732000E+1,0.00000000E+0 - ,0.27845510E+3,0.164E+3,0.160E+2,0.28732000E+1,0.00000000E+0 - ,0.22691090E+3,0.164E+3,0.170E+2,0.28732000E+1,0.00000000E+0 - ,0.18526210E+3,0.164E+3,0.180E+2,0.28732000E+1,0.00000000E+0 - ,0.12927733E+4,0.164E+3,0.190E+2,0.28732000E+1,0.00000000E+0 - ,0.10597192E+4,0.164E+3,0.200E+2,0.28732000E+1,0.00000000E+0 - ,0.87413140E+3,0.164E+3,0.210E+2,0.28732000E+1,0.00000000E+0 - ,0.84288400E+3,0.164E+3,0.220E+2,0.28732000E+1,0.00000000E+0 - ,0.77118400E+3,0.164E+3,0.230E+2,0.28732000E+1,0.00000000E+0 - ,0.60734870E+3,0.164E+3,0.240E+2,0.28732000E+1,0.00000000E+0 - ,0.66313130E+3,0.164E+3,0.250E+2,0.28732000E+1,0.00000000E+0 - ,0.52025690E+3,0.164E+3,0.260E+2,0.28732000E+1,0.00000000E+0 - ,0.55050450E+3,0.164E+3,0.270E+2,0.28732000E+1,0.00000000E+0 - ,0.56760260E+3,0.164E+3,0.280E+2,0.28732000E+1,0.00000000E+0 - ,0.43508290E+3,0.164E+3,0.290E+2,0.28732000E+1,0.00000000E+0 - ,0.44549820E+3,0.164E+3,0.300E+2,0.28732000E+1,0.00000000E+0 - ,0.52813050E+3,0.164E+3,0.310E+2,0.28732000E+1,0.00000000E+0 - ,0.46406710E+3,0.164E+3,0.320E+2,0.28732000E+1,0.00000000E+0 - ,0.39450330E+3,0.164E+3,0.330E+2,0.28732000E+1,0.00000000E+0 - ,0.35325210E+3,0.164E+3,0.340E+2,0.28732000E+1,0.00000000E+0 - ,0.30847630E+3,0.164E+3,0.350E+2,0.28732000E+1,0.00000000E+0 - ,0.26774640E+3,0.164E+3,0.360E+2,0.28732000E+1,0.00000000E+0 - ,0.14479360E+4,0.164E+3,0.370E+2,0.28732000E+1,0.00000000E+0 - ,0.12628491E+4,0.164E+3,0.380E+2,0.28732000E+1,0.00000000E+0 - ,0.11030742E+4,0.164E+3,0.390E+2,0.28732000E+1,0.00000000E+0 - ,0.98959400E+3,0.164E+3,0.400E+2,0.28732000E+1,0.00000000E+0 - ,0.90127470E+3,0.164E+3,0.410E+2,0.28732000E+1,0.00000000E+0 - ,0.69429580E+3,0.164E+3,0.420E+2,0.28732000E+1,0.00000000E+0 - ,0.77529730E+3,0.164E+3,0.430E+2,0.28732000E+1,0.00000000E+0 - ,0.58924130E+3,0.164E+3,0.440E+2,0.28732000E+1,0.00000000E+0 - ,0.64413130E+3,0.164E+3,0.450E+2,0.28732000E+1,0.00000000E+0 - ,0.59686540E+3,0.164E+3,0.460E+2,0.28732000E+1,0.00000000E+0 - ,0.49784100E+3,0.164E+3,0.470E+2,0.28732000E+1,0.00000000E+0 - ,0.52541210E+3,0.164E+3,0.480E+2,0.28732000E+1,0.00000000E+0 - ,0.66098150E+3,0.164E+3,0.490E+2,0.28732000E+1,0.00000000E+0 - ,0.60940140E+3,0.164E+3,0.500E+2,0.28732000E+1,0.00000000E+0 - ,0.54146000E+3,0.164E+3,0.510E+2,0.28732000E+1,0.00000000E+0 - ,0.50144410E+3,0.164E+3,0.520E+2,0.28732000E+1,0.00000000E+0 - ,0.45249160E+3,0.164E+3,0.530E+2,0.28732000E+1,0.00000000E+0 - ,0.40604790E+3,0.164E+3,0.540E+2,0.28732000E+1,0.00000000E+0 - ,0.17636917E+4,0.164E+3,0.550E+2,0.28732000E+1,0.00000000E+0 - ,0.16113765E+4,0.164E+3,0.560E+2,0.28732000E+1,0.00000000E+0 - ,0.14116458E+4,0.164E+3,0.570E+2,0.28732000E+1,0.00000000E+0 - ,0.63999700E+3,0.164E+3,0.580E+2,0.28732000E+1,0.27991000E+1 - ,0.14263405E+4,0.164E+3,0.590E+2,0.28732000E+1,0.00000000E+0 - ,0.13689945E+4,0.164E+3,0.600E+2,0.28732000E+1,0.00000000E+0 - ,0.13344823E+4,0.164E+3,0.610E+2,0.28732000E+1,0.00000000E+0 - ,0.13027626E+4,0.164E+3,0.620E+2,0.28732000E+1,0.00000000E+0 - ,0.12746283E+4,0.164E+3,0.630E+2,0.28732000E+1,0.00000000E+0 - ,0.99906170E+3,0.164E+3,0.640E+2,0.28732000E+1,0.00000000E+0 - ,0.11300310E+4,0.164E+3,0.650E+2,0.28732000E+1,0.00000000E+0 - ,0.10892614E+4,0.164E+3,0.660E+2,0.28732000E+1,0.00000000E+0 - ,0.11488304E+4,0.164E+3,0.670E+2,0.28732000E+1,0.00000000E+0 - ,0.11243657E+4,0.164E+3,0.680E+2,0.28732000E+1,0.00000000E+0 - ,0.11022614E+4,0.164E+3,0.690E+2,0.28732000E+1,0.00000000E+0 - ,0.10895200E+4,0.164E+3,0.700E+2,0.28732000E+1,0.00000000E+0 - ,0.91593800E+3,0.164E+3,0.710E+2,0.28732000E+1,0.00000000E+0 - ,0.89812800E+3,0.164E+3,0.720E+2,0.28732000E+1,0.00000000E+0 - ,0.81811890E+3,0.164E+3,0.730E+2,0.28732000E+1,0.00000000E+0 - ,0.68977370E+3,0.164E+3,0.740E+2,0.28732000E+1,0.00000000E+0 - ,0.70124130E+3,0.164E+3,0.750E+2,0.28732000E+1,0.00000000E+0 - ,0.63451700E+3,0.164E+3,0.760E+2,0.28732000E+1,0.00000000E+0 - ,0.58034520E+3,0.164E+3,0.770E+2,0.28732000E+1,0.00000000E+0 - ,0.48140120E+3,0.164E+3,0.780E+2,0.28732000E+1,0.00000000E+0 - ,0.44951810E+3,0.164E+3,0.790E+2,0.28732000E+1,0.00000000E+0 - ,0.46216400E+3,0.164E+3,0.800E+2,0.28732000E+1,0.00000000E+0 - ,0.67804940E+3,0.164E+3,0.810E+2,0.28732000E+1,0.00000000E+0 - ,0.66143650E+3,0.164E+3,0.820E+2,0.28732000E+1,0.00000000E+0 - ,0.60616090E+3,0.164E+3,0.830E+2,0.28732000E+1,0.00000000E+0 - ,0.57721150E+3,0.164E+3,0.840E+2,0.28732000E+1,0.00000000E+0 - ,0.53169500E+3,0.164E+3,0.850E+2,0.28732000E+1,0.00000000E+0 - ,0.48648120E+3,0.164E+3,0.860E+2,0.28732000E+1,0.00000000E+0 - ,0.16615027E+4,0.164E+3,0.870E+2,0.28732000E+1,0.00000000E+0 - ,0.15910020E+4,0.164E+3,0.880E+2,0.28732000E+1,0.00000000E+0 - ,0.14026190E+4,0.164E+3,0.890E+2,0.28732000E+1,0.00000000E+0 - ,0.12565351E+4,0.164E+3,0.900E+2,0.28732000E+1,0.00000000E+0 - ,0.12494197E+4,0.164E+3,0.910E+2,0.28732000E+1,0.00000000E+0 - ,0.12096721E+4,0.164E+3,0.920E+2,0.28732000E+1,0.00000000E+0 - ,0.12478750E+4,0.164E+3,0.930E+2,0.28732000E+1,0.00000000E+0 - ,0.12080168E+4,0.164E+3,0.940E+2,0.28732000E+1,0.00000000E+0 - ,0.66823500E+2,0.164E+3,0.101E+3,0.28732000E+1,0.00000000E+0 - ,0.21861950E+3,0.164E+3,0.103E+3,0.28732000E+1,0.98650000E+0 - ,0.27850800E+3,0.164E+3,0.104E+3,0.28732000E+1,0.98080000E+0 - ,0.21154850E+3,0.164E+3,0.105E+3,0.28732000E+1,0.97060000E+0 - ,0.15883010E+3,0.164E+3,0.106E+3,0.28732000E+1,0.98680000E+0 - ,0.11002650E+3,0.164E+3,0.107E+3,0.28732000E+1,0.99440000E+0 - ,0.79894900E+2,0.164E+3,0.108E+3,0.28732000E+1,0.99250000E+0 - ,0.54760000E+2,0.164E+3,0.109E+3,0.28732000E+1,0.99820000E+0 - ,0.31995720E+3,0.164E+3,0.111E+3,0.28732000E+1,0.96840000E+0 - ,0.49511470E+3,0.164E+3,0.112E+3,0.28732000E+1,0.96280000E+0 - ,0.49998200E+3,0.164E+3,0.113E+3,0.28732000E+1,0.96480000E+0 - ,0.39998160E+3,0.164E+3,0.114E+3,0.28732000E+1,0.95070000E+0 - ,0.32645920E+3,0.164E+3,0.115E+3,0.28732000E+1,0.99470000E+0 - ,0.27540540E+3,0.164E+3,0.116E+3,0.28732000E+1,0.99480000E+0 - ,0.22456980E+3,0.164E+3,0.117E+3,0.28732000E+1,0.99720000E+0 - ,0.43997650E+3,0.164E+3,0.119E+3,0.28732000E+1,0.97670000E+0 - ,0.84744860E+3,0.164E+3,0.120E+3,0.28732000E+1,0.98310000E+0 - ,0.43855500E+3,0.164E+3,0.121E+3,0.28732000E+1,0.18627000E+1 - ,0.42330690E+3,0.164E+3,0.122E+3,0.28732000E+1,0.18299000E+1 - ,0.41487410E+3,0.164E+3,0.123E+3,0.28732000E+1,0.19138000E+1 - ,0.41122300E+3,0.164E+3,0.124E+3,0.28732000E+1,0.18269000E+1 - ,0.37757470E+3,0.164E+3,0.125E+3,0.28732000E+1,0.16406000E+1 - ,0.34920950E+3,0.164E+3,0.126E+3,0.28732000E+1,0.16483000E+1 - ,0.33312400E+3,0.164E+3,0.127E+3,0.28732000E+1,0.17149000E+1 - ,0.32573280E+3,0.164E+3,0.128E+3,0.28732000E+1,0.17937000E+1 - ,0.32237280E+3,0.164E+3,0.129E+3,0.28732000E+1,0.95760000E+0 - ,0.30155830E+3,0.164E+3,0.130E+3,0.28732000E+1,0.19419000E+1 - ,0.49556680E+3,0.164E+3,0.131E+3,0.28732000E+1,0.96010000E+0 - ,0.43376750E+3,0.164E+3,0.132E+3,0.28732000E+1,0.94340000E+0 - ,0.38773360E+3,0.164E+3,0.133E+3,0.28732000E+1,0.98890000E+0 - ,0.35339890E+3,0.164E+3,0.134E+3,0.28732000E+1,0.99010000E+0 - ,0.31065690E+3,0.164E+3,0.135E+3,0.28732000E+1,0.99740000E+0 - ,0.52453740E+3,0.164E+3,0.137E+3,0.28732000E+1,0.97380000E+0 - ,0.10315808E+4,0.164E+3,0.138E+3,0.28732000E+1,0.98010000E+0 - ,0.78404790E+3,0.164E+3,0.139E+3,0.28732000E+1,0.19153000E+1 - ,0.58016290E+3,0.164E+3,0.140E+3,0.28732000E+1,0.19355000E+1 - ,0.58594010E+3,0.164E+3,0.141E+3,0.28732000E+1,0.19545000E+1 - ,0.54592550E+3,0.164E+3,0.142E+3,0.28732000E+1,0.19420000E+1 - ,0.61398170E+3,0.164E+3,0.143E+3,0.28732000E+1,0.16682000E+1 - ,0.47485900E+3,0.164E+3,0.144E+3,0.28732000E+1,0.18584000E+1 - ,0.44414170E+3,0.164E+3,0.145E+3,0.28732000E+1,0.19003000E+1 - ,0.41225320E+3,0.164E+3,0.146E+3,0.28732000E+1,0.18630000E+1 - ,0.39892850E+3,0.164E+3,0.147E+3,0.28732000E+1,0.96790000E+0 - ,0.39401610E+3,0.164E+3,0.148E+3,0.28732000E+1,0.19539000E+1 - ,0.62938940E+3,0.164E+3,0.149E+3,0.28732000E+1,0.96330000E+0 - ,0.56763680E+3,0.164E+3,0.150E+3,0.28732000E+1,0.95140000E+0 - ,0.53044640E+3,0.164E+3,0.151E+3,0.28732000E+1,0.97490000E+0 - ,0.50102050E+3,0.164E+3,0.152E+3,0.28732000E+1,0.98110000E+0 - ,0.45675320E+3,0.164E+3,0.153E+3,0.28732000E+1,0.99680000E+0 - ,0.61885080E+3,0.164E+3,0.155E+3,0.28732000E+1,0.99090000E+0 - ,0.13390290E+4,0.164E+3,0.156E+3,0.28732000E+1,0.97970000E+0 - ,0.99282930E+3,0.164E+3,0.157E+3,0.28732000E+1,0.19373000E+1 - ,0.62058810E+3,0.164E+3,0.159E+3,0.28732000E+1,0.29425000E+1 - ,0.60773400E+3,0.164E+3,0.160E+3,0.28732000E+1,0.29455000E+1 - ,0.58838130E+3,0.164E+3,0.161E+3,0.28732000E+1,0.29413000E+1 - ,0.59153680E+3,0.164E+3,0.162E+3,0.28732000E+1,0.29300000E+1 - ,0.57104500E+3,0.164E+3,0.163E+3,0.28732000E+1,0.18286000E+1 - ,0.59536280E+3,0.164E+3,0.164E+3,0.28732000E+1,0.28732000E+1 - ,0.38915000E+2,0.165E+3,0.100E+1,0.29086000E+1,0.91180000E+0 - ,0.25669500E+2,0.165E+3,0.200E+1,0.29086000E+1,0.00000000E+0 - ,0.61281660E+3,0.165E+3,0.300E+1,0.29086000E+1,0.00000000E+0 - ,0.35207530E+3,0.165E+3,0.400E+1,0.29086000E+1,0.00000000E+0 - ,0.23626590E+3,0.165E+3,0.500E+1,0.29086000E+1,0.00000000E+0 - ,0.15924220E+3,0.165E+3,0.600E+1,0.29086000E+1,0.00000000E+0 - ,0.11120430E+3,0.165E+3,0.700E+1,0.29086000E+1,0.00000000E+0 - ,0.84136300E+2,0.165E+3,0.800E+1,0.29086000E+1,0.00000000E+0 - ,0.63715200E+2,0.165E+3,0.900E+1,0.29086000E+1,0.00000000E+0 - ,0.49005000E+2,0.165E+3,0.100E+2,0.29086000E+1,0.00000000E+0 - ,0.73264570E+3,0.165E+3,0.110E+2,0.29086000E+1,0.00000000E+0 - ,0.56159910E+3,0.165E+3,0.120E+2,0.29086000E+1,0.00000000E+0 - ,0.51672630E+3,0.165E+3,0.130E+2,0.29086000E+1,0.00000000E+0 - ,0.40615220E+3,0.165E+3,0.140E+2,0.29086000E+1,0.00000000E+0 - ,0.31605550E+3,0.165E+3,0.150E+2,0.29086000E+1,0.00000000E+0 - ,0.26197720E+3,0.165E+3,0.160E+2,0.29086000E+1,0.00000000E+0 - ,0.21376170E+3,0.165E+3,0.170E+2,0.29086000E+1,0.00000000E+0 - ,0.17473800E+3,0.165E+3,0.180E+2,0.29086000E+1,0.00000000E+0 - ,0.12013307E+4,0.165E+3,0.190E+2,0.29086000E+1,0.00000000E+0 - ,0.98850950E+3,0.165E+3,0.200E+2,0.29086000E+1,0.00000000E+0 - ,0.81603910E+3,0.165E+3,0.210E+2,0.29086000E+1,0.00000000E+0 - ,0.78743780E+3,0.165E+3,0.220E+2,0.29086000E+1,0.00000000E+0 - ,0.72076790E+3,0.165E+3,0.230E+2,0.29086000E+1,0.00000000E+0 - ,0.56775360E+3,0.165E+3,0.240E+2,0.29086000E+1,0.00000000E+0 - ,0.62017110E+3,0.165E+3,0.250E+2,0.29086000E+1,0.00000000E+0 - ,0.48669710E+3,0.165E+3,0.260E+2,0.29086000E+1,0.00000000E+0 - ,0.51538390E+3,0.165E+3,0.270E+2,0.29086000E+1,0.00000000E+0 - ,0.53115950E+3,0.165E+3,0.280E+2,0.29086000E+1,0.00000000E+0 - ,0.40724140E+3,0.165E+3,0.290E+2,0.29086000E+1,0.00000000E+0 - ,0.41747630E+3,0.165E+3,0.300E+2,0.29086000E+1,0.00000000E+0 - ,0.49461700E+3,0.165E+3,0.310E+2,0.29086000E+1,0.00000000E+0 - ,0.43533390E+3,0.165E+3,0.320E+2,0.29086000E+1,0.00000000E+0 - ,0.37064210E+3,0.165E+3,0.330E+2,0.29086000E+1,0.00000000E+0 - ,0.33221730E+3,0.165E+3,0.340E+2,0.29086000E+1,0.00000000E+0 - ,0.29041790E+3,0.165E+3,0.350E+2,0.29086000E+1,0.00000000E+0 - ,0.25233250E+3,0.165E+3,0.360E+2,0.29086000E+1,0.00000000E+0 - ,0.13459552E+4,0.165E+3,0.370E+2,0.29086000E+1,0.00000000E+0 - ,0.11778523E+4,0.165E+3,0.380E+2,0.29086000E+1,0.00000000E+0 - ,0.10302577E+4,0.165E+3,0.390E+2,0.29086000E+1,0.00000000E+0 - ,0.92507300E+3,0.165E+3,0.400E+2,0.29086000E+1,0.00000000E+0 - ,0.84300140E+3,0.165E+3,0.410E+2,0.29086000E+1,0.00000000E+0 - ,0.65010950E+3,0.165E+3,0.420E+2,0.29086000E+1,0.00000000E+0 - ,0.72565600E+3,0.165E+3,0.430E+2,0.29086000E+1,0.00000000E+0 - ,0.55217930E+3,0.165E+3,0.440E+2,0.29086000E+1,0.00000000E+0 - ,0.60356690E+3,0.165E+3,0.450E+2,0.29086000E+1,0.00000000E+0 - ,0.55949210E+3,0.165E+3,0.460E+2,0.29086000E+1,0.00000000E+0 - ,0.46665970E+3,0.165E+3,0.470E+2,0.29086000E+1,0.00000000E+0 - ,0.49276250E+3,0.165E+3,0.480E+2,0.29086000E+1,0.00000000E+0 - ,0.61913660E+3,0.165E+3,0.490E+2,0.29086000E+1,0.00000000E+0 - ,0.57157510E+3,0.165E+3,0.500E+2,0.29086000E+1,0.00000000E+0 - ,0.50851710E+3,0.165E+3,0.510E+2,0.29086000E+1,0.00000000E+0 - ,0.47131940E+3,0.165E+3,0.520E+2,0.29086000E+1,0.00000000E+0 - ,0.42569420E+3,0.165E+3,0.530E+2,0.29086000E+1,0.00000000E+0 - ,0.38234290E+3,0.165E+3,0.540E+2,0.29086000E+1,0.00000000E+0 - ,0.16393995E+4,0.165E+3,0.550E+2,0.29086000E+1,0.00000000E+0 - ,0.15021922E+4,0.165E+3,0.560E+2,0.29086000E+1,0.00000000E+0 - ,0.13178387E+4,0.165E+3,0.570E+2,0.29086000E+1,0.00000000E+0 - ,0.60095180E+3,0.165E+3,0.580E+2,0.29086000E+1,0.27991000E+1 - ,0.13303810E+4,0.165E+3,0.590E+2,0.29086000E+1,0.00000000E+0 - ,0.12772241E+4,0.165E+3,0.600E+2,0.29086000E+1,0.00000000E+0 - ,0.12451109E+4,0.165E+3,0.610E+2,0.29086000E+1,0.00000000E+0 - ,0.12155853E+4,0.165E+3,0.620E+2,0.29086000E+1,0.00000000E+0 - ,0.11893991E+4,0.165E+3,0.630E+2,0.29086000E+1,0.00000000E+0 - ,0.93372280E+3,0.165E+3,0.640E+2,0.29086000E+1,0.00000000E+0 - ,0.10536587E+4,0.165E+3,0.650E+2,0.29086000E+1,0.00000000E+0 - ,0.10158840E+4,0.165E+3,0.660E+2,0.29086000E+1,0.00000000E+0 - ,0.10723978E+4,0.165E+3,0.670E+2,0.29086000E+1,0.00000000E+0 - ,0.10495999E+4,0.165E+3,0.680E+2,0.29086000E+1,0.00000000E+0 - ,0.10290199E+4,0.165E+3,0.690E+2,0.29086000E+1,0.00000000E+0 - ,0.10170572E+4,0.165E+3,0.700E+2,0.29086000E+1,0.00000000E+0 - ,0.85590310E+3,0.165E+3,0.710E+2,0.29086000E+1,0.00000000E+0 - ,0.84038840E+3,0.165E+3,0.720E+2,0.29086000E+1,0.00000000E+0 - ,0.76618830E+3,0.165E+3,0.730E+2,0.29086000E+1,0.00000000E+0 - ,0.64647490E+3,0.165E+3,0.740E+2,0.29086000E+1,0.00000000E+0 - ,0.65742490E+3,0.165E+3,0.750E+2,0.29086000E+1,0.00000000E+0 - ,0.59532710E+3,0.165E+3,0.760E+2,0.29086000E+1,0.00000000E+0 - ,0.54484580E+3,0.165E+3,0.770E+2,0.29086000E+1,0.00000000E+0 - ,0.45230750E+3,0.165E+3,0.780E+2,0.29086000E+1,0.00000000E+0 - ,0.42248760E+3,0.165E+3,0.790E+2,0.29086000E+1,0.00000000E+0 - ,0.43446390E+3,0.165E+3,0.800E+2,0.29086000E+1,0.00000000E+0 - ,0.63542770E+3,0.165E+3,0.810E+2,0.29086000E+1,0.00000000E+0 - ,0.62048770E+3,0.165E+3,0.820E+2,0.29086000E+1,0.00000000E+0 - ,0.56929560E+3,0.165E+3,0.830E+2,0.29086000E+1,0.00000000E+0 - ,0.54247560E+3,0.165E+3,0.840E+2,0.29086000E+1,0.00000000E+0 - ,0.50012070E+3,0.165E+3,0.850E+2,0.29086000E+1,0.00000000E+0 - ,0.45795880E+3,0.165E+3,0.860E+2,0.29086000E+1,0.00000000E+0 - ,0.15463042E+4,0.165E+3,0.870E+2,0.29086000E+1,0.00000000E+0 - ,0.14842932E+4,0.165E+3,0.880E+2,0.29086000E+1,0.00000000E+0 - ,0.13102595E+4,0.165E+3,0.890E+2,0.29086000E+1,0.00000000E+0 - ,0.11755520E+4,0.165E+3,0.900E+2,0.29086000E+1,0.00000000E+0 - ,0.11681093E+4,0.165E+3,0.910E+2,0.29086000E+1,0.00000000E+0 - ,0.11310127E+4,0.165E+3,0.920E+2,0.29086000E+1,0.00000000E+0 - ,0.11657289E+4,0.165E+3,0.930E+2,0.29086000E+1,0.00000000E+0 - ,0.11286850E+4,0.165E+3,0.940E+2,0.29086000E+1,0.00000000E+0 - ,0.62797100E+2,0.165E+3,0.101E+3,0.29086000E+1,0.00000000E+0 - ,0.20455140E+3,0.165E+3,0.103E+3,0.29086000E+1,0.98650000E+0 - ,0.26072450E+3,0.165E+3,0.104E+3,0.29086000E+1,0.98080000E+0 - ,0.19860250E+3,0.165E+3,0.105E+3,0.29086000E+1,0.97060000E+0 - ,0.14938110E+3,0.165E+3,0.106E+3,0.29086000E+1,0.98680000E+0 - ,0.10370340E+3,0.165E+3,0.107E+3,0.29086000E+1,0.99440000E+0 - ,0.75446500E+2,0.165E+3,0.108E+3,0.29086000E+1,0.99250000E+0 - ,0.51841400E+2,0.165E+3,0.109E+3,0.29086000E+1,0.99820000E+0 - ,0.29924680E+3,0.165E+3,0.111E+3,0.29086000E+1,0.96840000E+0 - ,0.46288270E+3,0.165E+3,0.112E+3,0.29086000E+1,0.96280000E+0 - ,0.46808680E+3,0.165E+3,0.113E+3,0.29086000E+1,0.96480000E+0 - ,0.37524590E+3,0.165E+3,0.114E+3,0.29086000E+1,0.95070000E+0 - ,0.30676780E+3,0.165E+3,0.115E+3,0.29086000E+1,0.99470000E+0 - ,0.25910430E+3,0.165E+3,0.116E+3,0.29086000E+1,0.99480000E+0 - ,0.21155470E+3,0.165E+3,0.117E+3,0.29086000E+1,0.99720000E+0 - ,0.41206550E+3,0.165E+3,0.119E+3,0.29086000E+1,0.97670000E+0 - ,0.79052270E+3,0.165E+3,0.120E+3,0.29086000E+1,0.98310000E+0 - ,0.41139690E+3,0.165E+3,0.121E+3,0.29086000E+1,0.18627000E+1 - ,0.39711900E+3,0.165E+3,0.122E+3,0.29086000E+1,0.18299000E+1 - ,0.38920800E+3,0.165E+3,0.123E+3,0.29086000E+1,0.19138000E+1 - ,0.38571070E+3,0.165E+3,0.124E+3,0.29086000E+1,0.18269000E+1 - ,0.35449400E+3,0.165E+3,0.125E+3,0.29086000E+1,0.16406000E+1 - ,0.32797050E+3,0.165E+3,0.126E+3,0.29086000E+1,0.16483000E+1 - ,0.31287350E+3,0.165E+3,0.127E+3,0.29086000E+1,0.17149000E+1 - ,0.30591120E+3,0.165E+3,0.128E+3,0.29086000E+1,0.17937000E+1 - ,0.30254470E+3,0.165E+3,0.129E+3,0.29086000E+1,0.95760000E+0 - ,0.28337650E+3,0.165E+3,0.130E+3,0.29086000E+1,0.19419000E+1 - ,0.46432020E+3,0.165E+3,0.131E+3,0.29086000E+1,0.96010000E+0 - ,0.40707180E+3,0.165E+3,0.132E+3,0.29086000E+1,0.94340000E+0 - ,0.36431690E+3,0.165E+3,0.133E+3,0.29086000E+1,0.98890000E+0 - ,0.33235190E+3,0.165E+3,0.134E+3,0.29086000E+1,0.99010000E+0 - ,0.29245640E+3,0.165E+3,0.135E+3,0.29086000E+1,0.99740000E+0 - ,0.49146210E+3,0.165E+3,0.137E+3,0.29086000E+1,0.97380000E+0 - ,0.96209720E+3,0.165E+3,0.138E+3,0.29086000E+1,0.98010000E+0 - ,0.73326220E+3,0.165E+3,0.139E+3,0.29086000E+1,0.19153000E+1 - ,0.54416190E+3,0.165E+3,0.140E+3,0.29086000E+1,0.19355000E+1 - ,0.54959500E+3,0.165E+3,0.141E+3,0.29086000E+1,0.19545000E+1 - ,0.51226070E+3,0.165E+3,0.142E+3,0.29086000E+1,0.19420000E+1 - ,0.57535150E+3,0.165E+3,0.143E+3,0.29086000E+1,0.16682000E+1 - ,0.44604100E+3,0.165E+3,0.144E+3,0.29086000E+1,0.18584000E+1 - ,0.41725200E+3,0.165E+3,0.145E+3,0.29086000E+1,0.19003000E+1 - ,0.38739090E+3,0.165E+3,0.146E+3,0.29086000E+1,0.18630000E+1 - ,0.37483220E+3,0.165E+3,0.147E+3,0.29086000E+1,0.96790000E+0 - ,0.37045920E+3,0.165E+3,0.148E+3,0.29086000E+1,0.19539000E+1 - ,0.58983000E+3,0.165E+3,0.149E+3,0.29086000E+1,0.96330000E+0 - ,0.53268550E+3,0.165E+3,0.150E+3,0.29086000E+1,0.95140000E+0 - ,0.49826300E+3,0.165E+3,0.151E+3,0.29086000E+1,0.97490000E+0 - ,0.47094350E+3,0.165E+3,0.152E+3,0.29086000E+1,0.98110000E+0 - ,0.42969450E+3,0.165E+3,0.153E+3,0.29086000E+1,0.99680000E+0 - ,0.58038410E+3,0.165E+3,0.155E+3,0.29086000E+1,0.99090000E+0 - ,0.12480182E+4,0.165E+3,0.156E+3,0.29086000E+1,0.97970000E+0 - ,0.92827050E+3,0.165E+3,0.157E+3,0.29086000E+1,0.19373000E+1 - ,0.58277730E+3,0.165E+3,0.159E+3,0.29086000E+1,0.29425000E+1 - ,0.57071750E+3,0.165E+3,0.160E+3,0.29086000E+1,0.29455000E+1 - ,0.55258430E+3,0.165E+3,0.161E+3,0.29086000E+1,0.29413000E+1 - ,0.55542950E+3,0.165E+3,0.162E+3,0.29086000E+1,0.29300000E+1 - ,0.53587600E+3,0.165E+3,0.163E+3,0.29086000E+1,0.18286000E+1 - ,0.55897620E+3,0.165E+3,0.164E+3,0.29086000E+1,0.28732000E+1 - ,0.52491950E+3,0.165E+3,0.165E+3,0.29086000E+1,0.29086000E+1 - ,0.39396700E+2,0.166E+3,0.100E+1,0.28965000E+1,0.91180000E+0 - ,0.25865800E+2,0.166E+3,0.200E+1,0.28965000E+1,0.00000000E+0 - ,0.63848500E+3,0.166E+3,0.300E+1,0.28965000E+1,0.00000000E+0 - ,0.36118220E+3,0.166E+3,0.400E+1,0.28965000E+1,0.00000000E+0 - ,0.24078360E+3,0.166E+3,0.500E+1,0.28965000E+1,0.00000000E+0 - ,0.16156910E+3,0.166E+3,0.600E+1,0.28965000E+1,0.00000000E+0 - ,0.11248360E+3,0.166E+3,0.700E+1,0.28965000E+1,0.00000000E+0 - ,0.84928800E+2,0.166E+3,0.800E+1,0.28965000E+1,0.00000000E+0 - ,0.64205600E+2,0.166E+3,0.900E+1,0.28965000E+1,0.00000000E+0 - ,0.49316600E+2,0.166E+3,0.100E+2,0.28965000E+1,0.00000000E+0 - ,0.76254390E+3,0.166E+3,0.110E+2,0.28965000E+1,0.00000000E+0 - ,0.57748050E+3,0.166E+3,0.120E+2,0.28965000E+1,0.00000000E+0 - ,0.52942090E+3,0.166E+3,0.130E+2,0.28965000E+1,0.00000000E+0 - ,0.41417170E+3,0.166E+3,0.140E+2,0.28965000E+1,0.00000000E+0 - ,0.32113630E+3,0.166E+3,0.150E+2,0.28965000E+1,0.00000000E+0 - ,0.26561240E+3,0.166E+3,0.160E+2,0.28965000E+1,0.00000000E+0 - ,0.21629400E+3,0.166E+3,0.170E+2,0.28965000E+1,0.00000000E+0 - ,0.17651170E+3,0.166E+3,0.180E+2,0.28965000E+1,0.00000000E+0 - ,0.12553434E+4,0.166E+3,0.190E+2,0.28965000E+1,0.00000000E+0 - ,0.10213342E+4,0.166E+3,0.200E+2,0.28965000E+1,0.00000000E+0 - ,0.84137840E+3,0.166E+3,0.210E+2,0.28965000E+1,0.00000000E+0 - ,0.81057120E+3,0.166E+3,0.220E+2,0.28965000E+1,0.00000000E+0 - ,0.74119950E+3,0.166E+3,0.230E+2,0.28965000E+1,0.00000000E+0 - ,0.58388160E+3,0.166E+3,0.240E+2,0.28965000E+1,0.00000000E+0 - ,0.63684280E+3,0.166E+3,0.250E+2,0.28965000E+1,0.00000000E+0 - ,0.49970290E+3,0.166E+3,0.260E+2,0.28965000E+1,0.00000000E+0 - ,0.52794350E+3,0.166E+3,0.270E+2,0.28965000E+1,0.00000000E+0 - ,0.54462440E+3,0.166E+3,0.280E+2,0.28965000E+1,0.00000000E+0 - ,0.41763490E+3,0.166E+3,0.290E+2,0.28965000E+1,0.00000000E+0 - ,0.42675460E+3,0.166E+3,0.300E+2,0.28965000E+1,0.00000000E+0 - ,0.50613150E+3,0.166E+3,0.310E+2,0.28965000E+1,0.00000000E+0 - ,0.44382260E+3,0.166E+3,0.320E+2,0.28965000E+1,0.00000000E+0 - ,0.37672490E+3,0.166E+3,0.330E+2,0.28965000E+1,0.00000000E+0 - ,0.33707580E+3,0.166E+3,0.340E+2,0.28965000E+1,0.00000000E+0 - ,0.29415100E+3,0.166E+3,0.350E+2,0.28965000E+1,0.00000000E+0 - ,0.25518090E+3,0.166E+3,0.360E+2,0.28965000E+1,0.00000000E+0 - ,0.14056043E+4,0.166E+3,0.370E+2,0.28965000E+1,0.00000000E+0 - ,0.12176072E+4,0.166E+3,0.380E+2,0.28965000E+1,0.00000000E+0 - ,0.10613052E+4,0.166E+3,0.390E+2,0.28965000E+1,0.00000000E+0 - ,0.95099220E+3,0.166E+3,0.400E+2,0.28965000E+1,0.00000000E+0 - ,0.86553240E+3,0.166E+3,0.410E+2,0.28965000E+1,0.00000000E+0 - ,0.66608950E+3,0.166E+3,0.420E+2,0.28965000E+1,0.00000000E+0 - ,0.74408720E+3,0.166E+3,0.430E+2,0.28965000E+1,0.00000000E+0 - ,0.56489840E+3,0.166E+3,0.440E+2,0.28965000E+1,0.00000000E+0 - ,0.61735350E+3,0.166E+3,0.450E+2,0.28965000E+1,0.00000000E+0 - ,0.57182020E+3,0.166E+3,0.460E+2,0.28965000E+1,0.00000000E+0 - ,0.47729120E+3,0.166E+3,0.470E+2,0.28965000E+1,0.00000000E+0 - ,0.50312050E+3,0.166E+3,0.480E+2,0.28965000E+1,0.00000000E+0 - ,0.63374930E+3,0.166E+3,0.490E+2,0.28965000E+1,0.00000000E+0 - ,0.58321300E+3,0.166E+3,0.500E+2,0.28965000E+1,0.00000000E+0 - ,0.51742880E+3,0.166E+3,0.510E+2,0.28965000E+1,0.00000000E+0 - ,0.47882440E+3,0.166E+3,0.520E+2,0.28965000E+1,0.00000000E+0 - ,0.43176670E+3,0.166E+3,0.530E+2,0.28965000E+1,0.00000000E+0 - ,0.38721870E+3,0.166E+3,0.540E+2,0.28965000E+1,0.00000000E+0 - ,0.17128830E+4,0.166E+3,0.550E+2,0.28965000E+1,0.00000000E+0 - ,0.15552120E+4,0.166E+3,0.560E+2,0.28965000E+1,0.00000000E+0 - ,0.13593802E+4,0.166E+3,0.570E+2,0.28965000E+1,0.00000000E+0 - ,0.61183610E+3,0.166E+3,0.580E+2,0.28965000E+1,0.27991000E+1 - ,0.13758472E+4,0.166E+3,0.590E+2,0.28965000E+1,0.00000000E+0 - ,0.13197747E+4,0.166E+3,0.600E+2,0.28965000E+1,0.00000000E+0 - ,0.12863433E+4,0.166E+3,0.610E+2,0.28965000E+1,0.00000000E+0 - ,0.12556329E+4,0.166E+3,0.620E+2,0.28965000E+1,0.00000000E+0 - ,0.12283897E+4,0.166E+3,0.630E+2,0.28965000E+1,0.00000000E+0 - ,0.96089950E+3,0.166E+3,0.640E+2,0.28965000E+1,0.00000000E+0 - ,0.10913776E+4,0.166E+3,0.650E+2,0.28965000E+1,0.00000000E+0 - ,0.10518609E+4,0.166E+3,0.660E+2,0.28965000E+1,0.00000000E+0 - ,0.11064740E+4,0.166E+3,0.670E+2,0.28965000E+1,0.00000000E+0 - ,0.10828259E+4,0.166E+3,0.680E+2,0.28965000E+1,0.00000000E+0 - ,0.10614329E+4,0.166E+3,0.690E+2,0.28965000E+1,0.00000000E+0 - ,0.10492440E+4,0.166E+3,0.700E+2,0.28965000E+1,0.00000000E+0 - ,0.88106130E+3,0.166E+3,0.710E+2,0.28965000E+1,0.00000000E+0 - ,0.86194390E+3,0.166E+3,0.720E+2,0.28965000E+1,0.00000000E+0 - ,0.78433470E+3,0.166E+3,0.730E+2,0.28965000E+1,0.00000000E+0 - ,0.66095780E+3,0.166E+3,0.740E+2,0.28965000E+1,0.00000000E+0 - ,0.67162740E+3,0.166E+3,0.750E+2,0.28965000E+1,0.00000000E+0 - ,0.60723190E+3,0.166E+3,0.760E+2,0.28965000E+1,0.00000000E+0 - ,0.55505840E+3,0.166E+3,0.770E+2,0.28965000E+1,0.00000000E+0 - ,0.46025170E+3,0.166E+3,0.780E+2,0.28965000E+1,0.00000000E+0 - ,0.42970270E+3,0.166E+3,0.790E+2,0.28965000E+1,0.00000000E+0 - ,0.44159570E+3,0.166E+3,0.800E+2,0.28965000E+1,0.00000000E+0 - ,0.65009130E+3,0.166E+3,0.810E+2,0.28965000E+1,0.00000000E+0 - ,0.63314710E+3,0.166E+3,0.820E+2,0.28965000E+1,0.00000000E+0 - ,0.57941850E+3,0.166E+3,0.830E+2,0.28965000E+1,0.00000000E+0 - ,0.55135470E+3,0.166E+3,0.840E+2,0.28965000E+1,0.00000000E+0 - ,0.50749380E+3,0.166E+3,0.850E+2,0.28965000E+1,0.00000000E+0 - ,0.46406150E+3,0.166E+3,0.860E+2,0.28965000E+1,0.00000000E+0 - ,0.16099709E+4,0.166E+3,0.870E+2,0.28965000E+1,0.00000000E+0 - ,0.15338391E+4,0.166E+3,0.880E+2,0.28965000E+1,0.00000000E+0 - ,0.13494846E+4,0.166E+3,0.890E+2,0.28965000E+1,0.00000000E+0 - ,0.12065102E+4,0.166E+3,0.900E+2,0.28965000E+1,0.00000000E+0 - ,0.12011049E+4,0.166E+3,0.910E+2,0.28965000E+1,0.00000000E+0 - ,0.11628261E+4,0.166E+3,0.920E+2,0.28965000E+1,0.00000000E+0 - ,0.12010327E+4,0.166E+3,0.930E+2,0.28965000E+1,0.00000000E+0 - ,0.11623643E+4,0.166E+3,0.940E+2,0.28965000E+1,0.00000000E+0 - ,0.63781600E+2,0.166E+3,0.101E+3,0.28965000E+1,0.00000000E+0 - ,0.20966850E+3,0.166E+3,0.103E+3,0.28965000E+1,0.98650000E+0 - ,0.26699220E+3,0.166E+3,0.104E+3,0.28965000E+1,0.98080000E+0 - ,0.20215950E+3,0.166E+3,0.105E+3,0.28965000E+1,0.97060000E+0 - ,0.15159630E+3,0.166E+3,0.106E+3,0.28965000E+1,0.98680000E+0 - ,0.10489910E+3,0.166E+3,0.107E+3,0.28965000E+1,0.99440000E+0 - ,0.76120900E+2,0.166E+3,0.108E+3,0.28965000E+1,0.99250000E+0 - ,0.52145400E+2,0.166E+3,0.109E+3,0.28965000E+1,0.99820000E+0 - ,0.30714640E+3,0.166E+3,0.111E+3,0.28965000E+1,0.96840000E+0 - ,0.47548270E+3,0.166E+3,0.112E+3,0.28965000E+1,0.96280000E+0 - ,0.47919230E+3,0.166E+3,0.113E+3,0.28965000E+1,0.96480000E+0 - ,0.38242860E+3,0.166E+3,0.114E+3,0.28965000E+1,0.95070000E+0 - ,0.31166960E+3,0.166E+3,0.115E+3,0.28965000E+1,0.99470000E+0 - ,0.26271630E+3,0.166E+3,0.116E+3,0.28965000E+1,0.99480000E+0 - ,0.21407020E+3,0.166E+3,0.117E+3,0.28965000E+1,0.99720000E+0 - ,0.42205350E+3,0.166E+3,0.119E+3,0.28965000E+1,0.97670000E+0 - ,0.81742610E+3,0.166E+3,0.120E+3,0.28965000E+1,0.98310000E+0 - ,0.41957740E+3,0.166E+3,0.121E+3,0.28965000E+1,0.18627000E+1 - ,0.40507580E+3,0.166E+3,0.122E+3,0.28965000E+1,0.18299000E+1 - ,0.39701800E+3,0.166E+3,0.123E+3,0.28965000E+1,0.19138000E+1 - ,0.39363860E+3,0.166E+3,0.124E+3,0.28965000E+1,0.18269000E+1 - ,0.36094370E+3,0.166E+3,0.125E+3,0.28965000E+1,0.16406000E+1 - ,0.33374440E+3,0.166E+3,0.126E+3,0.28965000E+1,0.16483000E+1 - ,0.31840100E+3,0.166E+3,0.127E+3,0.28965000E+1,0.17149000E+1 - ,0.31136890E+3,0.166E+3,0.128E+3,0.28965000E+1,0.17937000E+1 - ,0.30844670E+3,0.166E+3,0.129E+3,0.28965000E+1,0.95760000E+0 - ,0.28804090E+3,0.166E+3,0.130E+3,0.28965000E+1,0.19419000E+1 - ,0.47467810E+3,0.166E+3,0.131E+3,0.28965000E+1,0.96010000E+0 - ,0.41468730E+3,0.166E+3,0.132E+3,0.28965000E+1,0.94340000E+0 - ,0.37023680E+3,0.166E+3,0.133E+3,0.28965000E+1,0.98890000E+0 - ,0.33722390E+3,0.166E+3,0.134E+3,0.28965000E+1,0.99010000E+0 - ,0.29624340E+3,0.166E+3,0.135E+3,0.28965000E+1,0.99740000E+0 - ,0.50300950E+3,0.166E+3,0.137E+3,0.28965000E+1,0.97380000E+0 - ,0.99563320E+3,0.166E+3,0.138E+3,0.28965000E+1,0.98010000E+0 - ,0.75368720E+3,0.166E+3,0.139E+3,0.28965000E+1,0.19153000E+1 - ,0.55531660E+3,0.166E+3,0.140E+3,0.28965000E+1,0.19355000E+1 - ,0.56079120E+3,0.166E+3,0.141E+3,0.28965000E+1,0.19545000E+1 - ,0.52244060E+3,0.166E+3,0.142E+3,0.28965000E+1,0.19420000E+1 - ,0.58868540E+3,0.166E+3,0.143E+3,0.28965000E+1,0.16682000E+1 - ,0.45392960E+3,0.166E+3,0.144E+3,0.28965000E+1,0.18584000E+1 - ,0.42457780E+3,0.166E+3,0.145E+3,0.28965000E+1,0.19003000E+1 - ,0.39405630E+3,0.166E+3,0.146E+3,0.28965000E+1,0.18630000E+1 - ,0.38138420E+3,0.166E+3,0.147E+3,0.28965000E+1,0.96790000E+0 - ,0.37631210E+3,0.166E+3,0.148E+3,0.28965000E+1,0.19539000E+1 - ,0.60308050E+3,0.166E+3,0.149E+3,0.28965000E+1,0.96330000E+0 - ,0.54294040E+3,0.166E+3,0.150E+3,0.28965000E+1,0.95140000E+0 - ,0.50681590E+3,0.166E+3,0.151E+3,0.28965000E+1,0.97490000E+0 - ,0.47839610E+3,0.166E+3,0.152E+3,0.28965000E+1,0.98110000E+0 - ,0.43583490E+3,0.166E+3,0.153E+3,0.28965000E+1,0.99680000E+0 - ,0.59259730E+3,0.166E+3,0.155E+3,0.28965000E+1,0.99090000E+0 - ,0.12943501E+4,0.166E+3,0.156E+3,0.28965000E+1,0.97970000E+0 - ,0.95498290E+3,0.166E+3,0.157E+3,0.28965000E+1,0.19373000E+1 - ,0.59324060E+3,0.166E+3,0.159E+3,0.28965000E+1,0.29425000E+1 - ,0.58094220E+3,0.166E+3,0.160E+3,0.28965000E+1,0.29455000E+1 - ,0.56241030E+3,0.166E+3,0.161E+3,0.28965000E+1,0.29413000E+1 - ,0.56558410E+3,0.166E+3,0.162E+3,0.28965000E+1,0.29300000E+1 - ,0.54641960E+3,0.166E+3,0.163E+3,0.28965000E+1,0.18286000E+1 - ,0.56923180E+3,0.166E+3,0.164E+3,0.28965000E+1,0.28732000E+1 - ,0.53434800E+3,0.166E+3,0.165E+3,0.28965000E+1,0.29086000E+1 - ,0.54443560E+3,0.166E+3,0.166E+3,0.28965000E+1,0.28965000E+1 - ,0.37029500E+2,0.167E+3,0.100E+1,0.29242000E+1,0.91180000E+0 - ,0.24480600E+2,0.167E+3,0.200E+1,0.29242000E+1,0.00000000E+0 - ,0.57574990E+3,0.167E+3,0.300E+1,0.29242000E+1,0.00000000E+0 - ,0.33286460E+3,0.167E+3,0.400E+1,0.29242000E+1,0.00000000E+0 - ,0.22408560E+3,0.167E+3,0.500E+1,0.29242000E+1,0.00000000E+0 - ,0.15136070E+3,0.167E+3,0.600E+1,0.29242000E+1,0.00000000E+0 - ,0.10585820E+3,0.167E+3,0.700E+1,0.29242000E+1,0.00000000E+0 - ,0.80170400E+2,0.167E+3,0.800E+1,0.29242000E+1,0.00000000E+0 - ,0.60759800E+2,0.167E+3,0.900E+1,0.29242000E+1,0.00000000E+0 - ,0.46759500E+2,0.167E+3,0.100E+2,0.29242000E+1,0.00000000E+0 - ,0.68859100E+3,0.167E+3,0.110E+2,0.29242000E+1,0.00000000E+0 - ,0.53038700E+3,0.167E+3,0.120E+2,0.29242000E+1,0.00000000E+0 - ,0.48884720E+3,0.167E+3,0.130E+2,0.29242000E+1,0.00000000E+0 - ,0.38509520E+3,0.167E+3,0.140E+2,0.29242000E+1,0.00000000E+0 - ,0.30019740E+3,0.167E+3,0.150E+2,0.29242000E+1,0.00000000E+0 - ,0.24909840E+3,0.167E+3,0.160E+2,0.29242000E+1,0.00000000E+0 - ,0.20345290E+3,0.167E+3,0.170E+2,0.29242000E+1,0.00000000E+0 - ,0.16644660E+3,0.167E+3,0.180E+2,0.29242000E+1,0.00000000E+0 - ,0.11279480E+4,0.167E+3,0.190E+2,0.29242000E+1,0.00000000E+0 - ,0.93174430E+3,0.167E+3,0.200E+2,0.29242000E+1,0.00000000E+0 - ,0.76983360E+3,0.167E+3,0.210E+2,0.29242000E+1,0.00000000E+0 - ,0.74340690E+3,0.167E+3,0.220E+2,0.29242000E+1,0.00000000E+0 - ,0.68076970E+3,0.167E+3,0.230E+2,0.29242000E+1,0.00000000E+0 - ,0.53627310E+3,0.167E+3,0.240E+2,0.29242000E+1,0.00000000E+0 - ,0.58613150E+3,0.167E+3,0.250E+2,0.29242000E+1,0.00000000E+0 - ,0.46004150E+3,0.167E+3,0.260E+2,0.29242000E+1,0.00000000E+0 - ,0.48762020E+3,0.167E+3,0.270E+2,0.29242000E+1,0.00000000E+0 - ,0.50232060E+3,0.167E+3,0.280E+2,0.29242000E+1,0.00000000E+0 - ,0.38513270E+3,0.167E+3,0.290E+2,0.29242000E+1,0.00000000E+0 - ,0.39536540E+3,0.167E+3,0.300E+2,0.29242000E+1,0.00000000E+0 - ,0.46822770E+3,0.167E+3,0.310E+2,0.29242000E+1,0.00000000E+0 - ,0.41281620E+3,0.167E+3,0.320E+2,0.29242000E+1,0.00000000E+0 - ,0.35198750E+3,0.167E+3,0.330E+2,0.29242000E+1,0.00000000E+0 - ,0.31577010E+3,0.167E+3,0.340E+2,0.29242000E+1,0.00000000E+0 - ,0.27627680E+3,0.167E+3,0.350E+2,0.29242000E+1,0.00000000E+0 - ,0.24022750E+3,0.167E+3,0.360E+2,0.29242000E+1,0.00000000E+0 - ,0.12641518E+4,0.167E+3,0.370E+2,0.29242000E+1,0.00000000E+0 - ,0.11100442E+4,0.167E+3,0.380E+2,0.29242000E+1,0.00000000E+0 - ,0.97238640E+3,0.167E+3,0.390E+2,0.29242000E+1,0.00000000E+0 - ,0.87389940E+3,0.167E+3,0.400E+2,0.29242000E+1,0.00000000E+0 - ,0.79683270E+3,0.167E+3,0.410E+2,0.29242000E+1,0.00000000E+0 - ,0.61510520E+3,0.167E+3,0.420E+2,0.29242000E+1,0.00000000E+0 - ,0.68633810E+3,0.167E+3,0.430E+2,0.29242000E+1,0.00000000E+0 - ,0.52281640E+3,0.167E+3,0.440E+2,0.29242000E+1,0.00000000E+0 - ,0.57148280E+3,0.167E+3,0.450E+2,0.29242000E+1,0.00000000E+0 - ,0.52993880E+3,0.167E+3,0.460E+2,0.29242000E+1,0.00000000E+0 - ,0.44189760E+3,0.167E+3,0.470E+2,0.29242000E+1,0.00000000E+0 - ,0.46694330E+3,0.167E+3,0.480E+2,0.29242000E+1,0.00000000E+0 - ,0.58603950E+3,0.167E+3,0.490E+2,0.29242000E+1,0.00000000E+0 - ,0.54179100E+3,0.167E+3,0.500E+2,0.29242000E+1,0.00000000E+0 - ,0.48265820E+3,0.167E+3,0.510E+2,0.29242000E+1,0.00000000E+0 - ,0.44769600E+3,0.167E+3,0.520E+2,0.29242000E+1,0.00000000E+0 - ,0.40468130E+3,0.167E+3,0.530E+2,0.29242000E+1,0.00000000E+0 - ,0.36373600E+3,0.167E+3,0.540E+2,0.29242000E+1,0.00000000E+0 - ,0.15398453E+4,0.167E+3,0.550E+2,0.29242000E+1,0.00000000E+0 - ,0.14149943E+4,0.167E+3,0.560E+2,0.29242000E+1,0.00000000E+0 - ,0.12431883E+4,0.167E+3,0.570E+2,0.29242000E+1,0.00000000E+0 - ,0.57024510E+3,0.167E+3,0.580E+2,0.29242000E+1,0.27991000E+1 - ,0.12537691E+4,0.167E+3,0.590E+2,0.29242000E+1,0.00000000E+0 - ,0.12039727E+4,0.167E+3,0.600E+2,0.29242000E+1,0.00000000E+0 - ,0.11737842E+4,0.167E+3,0.610E+2,0.29242000E+1,0.00000000E+0 - ,0.11460194E+4,0.167E+3,0.620E+2,0.29242000E+1,0.00000000E+0 - ,0.11213978E+4,0.167E+3,0.630E+2,0.29242000E+1,0.00000000E+0 - ,0.88175490E+3,0.167E+3,0.640E+2,0.29242000E+1,0.00000000E+0 - ,0.99262670E+3,0.167E+3,0.650E+2,0.29242000E+1,0.00000000E+0 - ,0.95731530E+3,0.167E+3,0.660E+2,0.29242000E+1,0.00000000E+0 - ,0.10114677E+4,0.167E+3,0.670E+2,0.29242000E+1,0.00000000E+0 - ,0.99000700E+3,0.167E+3,0.680E+2,0.29242000E+1,0.00000000E+0 - ,0.97065280E+3,0.167E+3,0.690E+2,0.29242000E+1,0.00000000E+0 - ,0.95930580E+3,0.167E+3,0.700E+2,0.29242000E+1,0.00000000E+0 - ,0.80819030E+3,0.167E+3,0.710E+2,0.29242000E+1,0.00000000E+0 - ,0.79471630E+3,0.167E+3,0.720E+2,0.29242000E+1,0.00000000E+0 - ,0.72517730E+3,0.167E+3,0.730E+2,0.29242000E+1,0.00000000E+0 - ,0.61226400E+3,0.167E+3,0.740E+2,0.29242000E+1,0.00000000E+0 - ,0.62284620E+3,0.167E+3,0.750E+2,0.29242000E+1,0.00000000E+0 - ,0.56442200E+3,0.167E+3,0.760E+2,0.29242000E+1,0.00000000E+0 - ,0.51685750E+3,0.167E+3,0.770E+2,0.29242000E+1,0.00000000E+0 - ,0.42931700E+3,0.167E+3,0.780E+2,0.29242000E+1,0.00000000E+0 - ,0.40110390E+3,0.167E+3,0.790E+2,0.29242000E+1,0.00000000E+0 - ,0.41259070E+3,0.167E+3,0.800E+2,0.29242000E+1,0.00000000E+0 - ,0.60165160E+3,0.167E+3,0.810E+2,0.29242000E+1,0.00000000E+0 - ,0.58816150E+3,0.167E+3,0.820E+2,0.29242000E+1,0.00000000E+0 - ,0.54028410E+3,0.167E+3,0.830E+2,0.29242000E+1,0.00000000E+0 - ,0.51517620E+3,0.167E+3,0.840E+2,0.29242000E+1,0.00000000E+0 - ,0.47532260E+3,0.167E+3,0.850E+2,0.29242000E+1,0.00000000E+0 - ,0.43554890E+3,0.167E+3,0.860E+2,0.29242000E+1,0.00000000E+0 - ,0.14541544E+4,0.167E+3,0.870E+2,0.29242000E+1,0.00000000E+0 - ,0.13992062E+4,0.167E+3,0.880E+2,0.29242000E+1,0.00000000E+0 - ,0.12368406E+4,0.167E+3,0.890E+2,0.29242000E+1,0.00000000E+0 - ,0.11113608E+4,0.167E+3,0.900E+2,0.29242000E+1,0.00000000E+0 - ,0.11034821E+4,0.167E+3,0.910E+2,0.29242000E+1,0.00000000E+0 - ,0.10684783E+4,0.167E+3,0.920E+2,0.29242000E+1,0.00000000E+0 - ,0.11002364E+4,0.167E+3,0.930E+2,0.29242000E+1,0.00000000E+0 - ,0.10654625E+4,0.167E+3,0.940E+2,0.29242000E+1,0.00000000E+0 - ,0.59658600E+2,0.167E+3,0.101E+3,0.29242000E+1,0.00000000E+0 - ,0.19347380E+3,0.167E+3,0.103E+3,0.29242000E+1,0.98650000E+0 - ,0.24674640E+3,0.167E+3,0.104E+3,0.29242000E+1,0.98080000E+0 - ,0.18847650E+3,0.167E+3,0.105E+3,0.29242000E+1,0.97060000E+0 - ,0.14197970E+3,0.167E+3,0.106E+3,0.29242000E+1,0.98680000E+0 - ,0.98721200E+2,0.167E+3,0.107E+3,0.29242000E+1,0.99440000E+0 - ,0.71910400E+2,0.167E+3,0.108E+3,0.29242000E+1,0.99250000E+0 - ,0.49479300E+2,0.167E+3,0.109E+3,0.29242000E+1,0.99820000E+0 - ,0.28286510E+3,0.167E+3,0.111E+3,0.29242000E+1,0.96840000E+0 - ,0.43742550E+3,0.167E+3,0.112E+3,0.29242000E+1,0.96280000E+0 - ,0.44300780E+3,0.167E+3,0.113E+3,0.29242000E+1,0.96480000E+0 - ,0.35589820E+3,0.167E+3,0.114E+3,0.29242000E+1,0.95070000E+0 - ,0.29139070E+3,0.167E+3,0.115E+3,0.29242000E+1,0.99470000E+0 - ,0.24635930E+3,0.167E+3,0.116E+3,0.29242000E+1,0.99480000E+0 - ,0.20134780E+3,0.167E+3,0.117E+3,0.29242000E+1,0.99720000E+0 - ,0.38995180E+3,0.167E+3,0.119E+3,0.29242000E+1,0.97670000E+0 - ,0.74517810E+3,0.167E+3,0.120E+3,0.29242000E+1,0.98310000E+0 - ,0.39002770E+3,0.167E+3,0.121E+3,0.29242000E+1,0.18627000E+1 - ,0.37650890E+3,0.167E+3,0.122E+3,0.29242000E+1,0.18299000E+1 - ,0.36899410E+3,0.167E+3,0.123E+3,0.29242000E+1,0.19138000E+1 - ,0.36559720E+3,0.167E+3,0.124E+3,0.29242000E+1,0.18269000E+1 - ,0.33635820E+3,0.167E+3,0.125E+3,0.29242000E+1,0.16406000E+1 - ,0.31127980E+3,0.167E+3,0.126E+3,0.29242000E+1,0.16483000E+1 - ,0.29694730E+3,0.167E+3,0.127E+3,0.29242000E+1,0.17149000E+1 - ,0.29031390E+3,0.167E+3,0.128E+3,0.29242000E+1,0.17937000E+1 - ,0.28689270E+3,0.167E+3,0.129E+3,0.29242000E+1,0.95760000E+0 - ,0.26909650E+3,0.167E+3,0.130E+3,0.29242000E+1,0.19419000E+1 - ,0.43973990E+3,0.167E+3,0.131E+3,0.29242000E+1,0.96010000E+0 - ,0.38616340E+3,0.167E+3,0.132E+3,0.29242000E+1,0.94340000E+0 - ,0.34600850E+3,0.167E+3,0.133E+3,0.29242000E+1,0.98890000E+0 - ,0.31589290E+3,0.167E+3,0.134E+3,0.29242000E+1,0.99010000E+0 - ,0.27820320E+3,0.167E+3,0.135E+3,0.29242000E+1,0.99740000E+0 - ,0.46526060E+3,0.167E+3,0.137E+3,0.29242000E+1,0.97380000E+0 - ,0.90671060E+3,0.167E+3,0.138E+3,0.29242000E+1,0.98010000E+0 - ,0.69306070E+3,0.167E+3,0.139E+3,0.29242000E+1,0.19153000E+1 - ,0.51580860E+3,0.167E+3,0.140E+3,0.29242000E+1,0.19355000E+1 - ,0.52093800E+3,0.167E+3,0.141E+3,0.29242000E+1,0.19545000E+1 - ,0.48572140E+3,0.167E+3,0.142E+3,0.29242000E+1,0.19420000E+1 - ,0.54479060E+3,0.167E+3,0.143E+3,0.29242000E+1,0.16682000E+1 - ,0.42334180E+3,0.167E+3,0.144E+3,0.29242000E+1,0.18584000E+1 - ,0.39604750E+3,0.167E+3,0.145E+3,0.29242000E+1,0.19003000E+1 - ,0.36776460E+3,0.167E+3,0.146E+3,0.29242000E+1,0.18630000E+1 - ,0.35578930E+3,0.167E+3,0.147E+3,0.29242000E+1,0.96790000E+0 - ,0.35190760E+3,0.167E+3,0.148E+3,0.29242000E+1,0.19539000E+1 - ,0.55857850E+3,0.167E+3,0.149E+3,0.29242000E+1,0.96330000E+0 - ,0.50519270E+3,0.167E+3,0.150E+3,0.29242000E+1,0.95140000E+0 - ,0.47300760E+3,0.167E+3,0.151E+3,0.29242000E+1,0.97490000E+0 - ,0.44736060E+3,0.167E+3,0.152E+3,0.29242000E+1,0.98110000E+0 - ,0.40847930E+3,0.167E+3,0.153E+3,0.29242000E+1,0.99680000E+0 - ,0.55005480E+3,0.167E+3,0.155E+3,0.29242000E+1,0.99090000E+0 - ,0.11754332E+4,0.167E+3,0.156E+3,0.29242000E+1,0.97970000E+0 - ,0.87714780E+3,0.167E+3,0.157E+3,0.29242000E+1,0.19373000E+1 - ,0.55304140E+3,0.167E+3,0.159E+3,0.29242000E+1,0.29425000E+1 - ,0.54160480E+3,0.167E+3,0.160E+3,0.29242000E+1,0.29455000E+1 - ,0.52443100E+3,0.167E+3,0.161E+3,0.29242000E+1,0.29413000E+1 - ,0.52702430E+3,0.167E+3,0.162E+3,0.29242000E+1,0.29300000E+1 - ,0.50812970E+3,0.167E+3,0.163E+3,0.29242000E+1,0.18286000E+1 - ,0.53036160E+3,0.167E+3,0.164E+3,0.29242000E+1,0.28732000E+1 - ,0.49813190E+3,0.167E+3,0.165E+3,0.29242000E+1,0.29086000E+1 - ,0.50688950E+3,0.167E+3,0.166E+3,0.29242000E+1,0.28965000E+1 - ,0.47279500E+3,0.167E+3,0.167E+3,0.29242000E+1,0.29242000E+1 - ,0.36008400E+2,0.168E+3,0.100E+1,0.29282000E+1,0.91180000E+0 - ,0.23828900E+2,0.168E+3,0.200E+1,0.29282000E+1,0.00000000E+0 - ,0.55724540E+3,0.168E+3,0.300E+1,0.29282000E+1,0.00000000E+0 - ,0.32288400E+3,0.168E+3,0.400E+1,0.29282000E+1,0.00000000E+0 - ,0.21762790E+3,0.168E+3,0.500E+1,0.29282000E+1,0.00000000E+0 - ,0.14712440E+3,0.168E+3,0.600E+1,0.29282000E+1,0.00000000E+0 - ,0.10295880E+3,0.168E+3,0.700E+1,0.29282000E+1,0.00000000E+0 - ,0.78007900E+2,0.168E+3,0.800E+1,0.29282000E+1,0.00000000E+0 - ,0.59142300E+2,0.168E+3,0.900E+1,0.29282000E+1,0.00000000E+0 - ,0.45527900E+2,0.168E+3,0.100E+2,0.29282000E+1,0.00000000E+0 - ,0.66655340E+3,0.168E+3,0.110E+2,0.29282000E+1,0.00000000E+0 - ,0.51428720E+3,0.168E+3,0.120E+2,0.29282000E+1,0.00000000E+0 - ,0.47430950E+3,0.168E+3,0.130E+2,0.29282000E+1,0.00000000E+0 - ,0.37395400E+3,0.168E+3,0.140E+2,0.29282000E+1,0.00000000E+0 - ,0.29171000E+3,0.168E+3,0.150E+2,0.29282000E+1,0.00000000E+0 - ,0.24215880E+3,0.168E+3,0.160E+2,0.29282000E+1,0.00000000E+0 - ,0.19786420E+3,0.168E+3,0.170E+2,0.29282000E+1,0.00000000E+0 - ,0.16193000E+3,0.168E+3,0.180E+2,0.29282000E+1,0.00000000E+0 - ,0.10915091E+4,0.168E+3,0.190E+2,0.29282000E+1,0.00000000E+0 - ,0.90284450E+3,0.168E+3,0.200E+2,0.29282000E+1,0.00000000E+0 - ,0.74618100E+3,0.168E+3,0.210E+2,0.29282000E+1,0.00000000E+0 - ,0.72076670E+3,0.168E+3,0.220E+2,0.29282000E+1,0.00000000E+0 - ,0.66014630E+3,0.168E+3,0.230E+2,0.29282000E+1,0.00000000E+0 - ,0.52004920E+3,0.168E+3,0.240E+2,0.29282000E+1,0.00000000E+0 - ,0.56851110E+3,0.168E+3,0.250E+2,0.29282000E+1,0.00000000E+0 - ,0.44624320E+3,0.168E+3,0.260E+2,0.29282000E+1,0.00000000E+0 - ,0.47314860E+3,0.168E+3,0.270E+2,0.29282000E+1,0.00000000E+0 - ,0.48733120E+3,0.168E+3,0.280E+2,0.29282000E+1,0.00000000E+0 - ,0.37365280E+3,0.168E+3,0.290E+2,0.29282000E+1,0.00000000E+0 - ,0.38376960E+3,0.168E+3,0.300E+2,0.29282000E+1,0.00000000E+0 - ,0.45441890E+3,0.168E+3,0.310E+2,0.29282000E+1,0.00000000E+0 - ,0.40089710E+3,0.168E+3,0.320E+2,0.29282000E+1,0.00000000E+0 - ,0.34201700E+3,0.168E+3,0.330E+2,0.29282000E+1,0.00000000E+0 - ,0.30693000E+3,0.168E+3,0.340E+2,0.29282000E+1,0.00000000E+0 - ,0.26863470E+3,0.168E+3,0.350E+2,0.29282000E+1,0.00000000E+0 - ,0.23365510E+3,0.168E+3,0.360E+2,0.29282000E+1,0.00000000E+0 - ,0.12234668E+4,0.168E+3,0.370E+2,0.29282000E+1,0.00000000E+0 - ,0.10755659E+4,0.168E+3,0.380E+2,0.29282000E+1,0.00000000E+0 - ,0.94268540E+3,0.168E+3,0.390E+2,0.29282000E+1,0.00000000E+0 - ,0.84748690E+3,0.168E+3,0.400E+2,0.29282000E+1,0.00000000E+0 - ,0.77291870E+3,0.168E+3,0.410E+2,0.29282000E+1,0.00000000E+0 - ,0.59687070E+3,0.168E+3,0.420E+2,0.29282000E+1,0.00000000E+0 - ,0.66589970E+3,0.168E+3,0.430E+2,0.29282000E+1,0.00000000E+0 - ,0.50745680E+3,0.168E+3,0.440E+2,0.29282000E+1,0.00000000E+0 - ,0.55468820E+3,0.168E+3,0.450E+2,0.29282000E+1,0.00000000E+0 - ,0.51443460E+3,0.168E+3,0.460E+2,0.29282000E+1,0.00000000E+0 - ,0.42894240E+3,0.168E+3,0.470E+2,0.29282000E+1,0.00000000E+0 - ,0.45336080E+3,0.168E+3,0.480E+2,0.29282000E+1,0.00000000E+0 - ,0.56875080E+3,0.168E+3,0.490E+2,0.29282000E+1,0.00000000E+0 - ,0.52608060E+3,0.168E+3,0.500E+2,0.29282000E+1,0.00000000E+0 - ,0.46889680E+3,0.168E+3,0.510E+2,0.29282000E+1,0.00000000E+0 - ,0.43506030E+3,0.168E+3,0.520E+2,0.29282000E+1,0.00000000E+0 - ,0.39338290E+3,0.168E+3,0.530E+2,0.29282000E+1,0.00000000E+0 - ,0.35368410E+3,0.168E+3,0.540E+2,0.29282000E+1,0.00000000E+0 - ,0.14903329E+4,0.168E+3,0.550E+2,0.29282000E+1,0.00000000E+0 - ,0.13708120E+4,0.168E+3,0.560E+2,0.29282000E+1,0.00000000E+0 - ,0.12050073E+4,0.168E+3,0.570E+2,0.29282000E+1,0.00000000E+0 - ,0.55393560E+3,0.168E+3,0.580E+2,0.29282000E+1,0.27991000E+1 - ,0.12148410E+4,0.168E+3,0.590E+2,0.29282000E+1,0.00000000E+0 - ,0.11666903E+4,0.168E+3,0.600E+2,0.29282000E+1,0.00000000E+0 - ,0.11374645E+4,0.168E+3,0.610E+2,0.29282000E+1,0.00000000E+0 - ,0.11105819E+4,0.168E+3,0.620E+2,0.29282000E+1,0.00000000E+0 - ,0.10867437E+4,0.168E+3,0.630E+2,0.29282000E+1,0.00000000E+0 - ,0.85501380E+3,0.168E+3,0.640E+2,0.29282000E+1,0.00000000E+0 - ,0.96171480E+3,0.168E+3,0.650E+2,0.29282000E+1,0.00000000E+0 - ,0.92760080E+3,0.168E+3,0.660E+2,0.29282000E+1,0.00000000E+0 - ,0.98034030E+3,0.168E+3,0.670E+2,0.29282000E+1,0.00000000E+0 - ,0.95955360E+3,0.168E+3,0.680E+2,0.29282000E+1,0.00000000E+0 - ,0.94081400E+3,0.168E+3,0.690E+2,0.29282000E+1,0.00000000E+0 - ,0.92979290E+3,0.168E+3,0.700E+2,0.29282000E+1,0.00000000E+0 - ,0.78364610E+3,0.168E+3,0.710E+2,0.29282000E+1,0.00000000E+0 - ,0.77098740E+3,0.168E+3,0.720E+2,0.29282000E+1,0.00000000E+0 - ,0.70375210E+3,0.168E+3,0.730E+2,0.29282000E+1,0.00000000E+0 - ,0.59432800E+3,0.168E+3,0.740E+2,0.29282000E+1,0.00000000E+0 - ,0.60467390E+3,0.168E+3,0.750E+2,0.29282000E+1,0.00000000E+0 - ,0.54810470E+3,0.168E+3,0.760E+2,0.29282000E+1,0.00000000E+0 - ,0.50202620E+3,0.168E+3,0.770E+2,0.29282000E+1,0.00000000E+0 - ,0.41709650E+3,0.168E+3,0.780E+2,0.29282000E+1,0.00000000E+0 - ,0.38972370E+3,0.168E+3,0.790E+2,0.29282000E+1,0.00000000E+0 - ,0.40092380E+3,0.168E+3,0.800E+2,0.29282000E+1,0.00000000E+0 - ,0.58398610E+3,0.168E+3,0.810E+2,0.29282000E+1,0.00000000E+0 - ,0.57111950E+3,0.168E+3,0.820E+2,0.29282000E+1,0.00000000E+0 - ,0.52486410E+3,0.168E+3,0.830E+2,0.29282000E+1,0.00000000E+0 - ,0.50060050E+3,0.168E+3,0.840E+2,0.29282000E+1,0.00000000E+0 - ,0.46201380E+3,0.168E+3,0.850E+2,0.29282000E+1,0.00000000E+0 - ,0.42346810E+3,0.168E+3,0.860E+2,0.29282000E+1,0.00000000E+0 - ,0.14079944E+4,0.168E+3,0.870E+2,0.29282000E+1,0.00000000E+0 - ,0.13558908E+4,0.168E+3,0.880E+2,0.29282000E+1,0.00000000E+0 - ,0.11991383E+4,0.168E+3,0.890E+2,0.29282000E+1,0.00000000E+0 - ,0.10780836E+4,0.168E+3,0.900E+2,0.29282000E+1,0.00000000E+0 - ,0.10701540E+4,0.168E+3,0.910E+2,0.29282000E+1,0.00000000E+0 - ,0.10362222E+4,0.168E+3,0.920E+2,0.29282000E+1,0.00000000E+0 - ,0.10666560E+4,0.168E+3,0.930E+2,0.29282000E+1,0.00000000E+0 - ,0.10330090E+4,0.168E+3,0.940E+2,0.29282000E+1,0.00000000E+0 - ,0.57976000E+2,0.168E+3,0.101E+3,0.29282000E+1,0.00000000E+0 - ,0.18770500E+3,0.168E+3,0.103E+3,0.29282000E+1,0.98650000E+0 - ,0.23944310E+3,0.168E+3,0.104E+3,0.29282000E+1,0.98080000E+0 - ,0.18308850E+3,0.168E+3,0.105E+3,0.29282000E+1,0.97060000E+0 - ,0.13800410E+3,0.168E+3,0.106E+3,0.29282000E+1,0.98680000E+0 - ,0.96019300E+2,0.168E+3,0.107E+3,0.29282000E+1,0.99440000E+0 - ,0.69979100E+2,0.168E+3,0.108E+3,0.29282000E+1,0.99250000E+0 - ,0.48180500E+2,0.168E+3,0.109E+3,0.29282000E+1,0.99820000E+0 - ,0.27437320E+3,0.168E+3,0.111E+3,0.29282000E+1,0.96840000E+0 - ,0.42424930E+3,0.168E+3,0.112E+3,0.29282000E+1,0.96280000E+0 - ,0.42989820E+3,0.168E+3,0.113E+3,0.29282000E+1,0.96480000E+0 - ,0.34564250E+3,0.168E+3,0.114E+3,0.29282000E+1,0.95070000E+0 - ,0.28315870E+3,0.168E+3,0.115E+3,0.29282000E+1,0.99470000E+0 - ,0.23949360E+3,0.168E+3,0.116E+3,0.29282000E+1,0.99480000E+0 - ,0.19581550E+3,0.168E+3,0.117E+3,0.29282000E+1,0.99720000E+0 - ,0.37842050E+3,0.168E+3,0.119E+3,0.29282000E+1,0.97670000E+0 - ,0.72211110E+3,0.168E+3,0.120E+3,0.29282000E+1,0.98310000E+0 - ,0.37874080E+3,0.168E+3,0.121E+3,0.29282000E+1,0.18627000E+1 - ,0.36562310E+3,0.168E+3,0.122E+3,0.29282000E+1,0.18299000E+1 - ,0.35832130E+3,0.168E+3,0.123E+3,0.29282000E+1,0.19138000E+1 - ,0.35499450E+3,0.168E+3,0.124E+3,0.29282000E+1,0.18269000E+1 - ,0.32672790E+3,0.168E+3,0.125E+3,0.29282000E+1,0.16406000E+1 - ,0.30240170E+3,0.168E+3,0.126E+3,0.29282000E+1,0.16483000E+1 - ,0.28847830E+3,0.168E+3,0.127E+3,0.29282000E+1,0.17149000E+1 - ,0.28202540E+3,0.168E+3,0.128E+3,0.29282000E+1,0.17937000E+1 - ,0.27862110E+3,0.168E+3,0.129E+3,0.29282000E+1,0.95760000E+0 - ,0.26147450E+3,0.168E+3,0.130E+3,0.29282000E+1,0.19419000E+1 - ,0.42684110E+3,0.168E+3,0.131E+3,0.29282000E+1,0.96010000E+0 - ,0.37506910E+3,0.168E+3,0.132E+3,0.29282000E+1,0.94340000E+0 - ,0.33621830E+3,0.168E+3,0.133E+3,0.29282000E+1,0.98890000E+0 - ,0.30704780E+3,0.168E+3,0.134E+3,0.29282000E+1,0.99010000E+0 - ,0.27050300E+3,0.168E+3,0.135E+3,0.29282000E+1,0.99740000E+0 - ,0.45156840E+3,0.168E+3,0.137E+3,0.29282000E+1,0.97380000E+0 - ,0.87858370E+3,0.168E+3,0.138E+3,0.29282000E+1,0.98010000E+0 - ,0.67226710E+3,0.168E+3,0.139E+3,0.29282000E+1,0.19153000E+1 - ,0.50085680E+3,0.168E+3,0.140E+3,0.29282000E+1,0.19355000E+1 - ,0.50582970E+3,0.168E+3,0.141E+3,0.29282000E+1,0.19545000E+1 - ,0.47170110E+3,0.168E+3,0.142E+3,0.29282000E+1,0.19420000E+1 - ,0.52880060E+3,0.168E+3,0.143E+3,0.29282000E+1,0.16682000E+1 - ,0.41127310E+3,0.168E+3,0.144E+3,0.29282000E+1,0.18584000E+1 - ,0.38477140E+3,0.168E+3,0.145E+3,0.29282000E+1,0.19003000E+1 - ,0.35731920E+3,0.168E+3,0.146E+3,0.29282000E+1,0.18630000E+1 - ,0.34566580E+3,0.168E+3,0.147E+3,0.29282000E+1,0.96790000E+0 - ,0.34198940E+3,0.168E+3,0.148E+3,0.29282000E+1,0.19539000E+1 - ,0.54219990E+3,0.168E+3,0.149E+3,0.29282000E+1,0.96330000E+0 - ,0.49064160E+3,0.168E+3,0.150E+3,0.29282000E+1,0.95140000E+0 - ,0.45955210E+3,0.168E+3,0.151E+3,0.29282000E+1,0.97490000E+0 - ,0.43474240E+3,0.168E+3,0.152E+3,0.29282000E+1,0.98110000E+0 - ,0.39707280E+3,0.168E+3,0.153E+3,0.29282000E+1,0.99680000E+0 - ,0.53408180E+3,0.168E+3,0.155E+3,0.29282000E+1,0.99090000E+0 - ,0.11387329E+4,0.168E+3,0.156E+3,0.29282000E+1,0.97970000E+0 - ,0.85075470E+3,0.168E+3,0.157E+3,0.29282000E+1,0.19373000E+1 - ,0.53723990E+3,0.168E+3,0.159E+3,0.29282000E+1,0.29425000E+1 - ,0.52613310E+3,0.168E+3,0.160E+3,0.29282000E+1,0.29455000E+1 - ,0.50946310E+3,0.168E+3,0.161E+3,0.29282000E+1,0.29413000E+1 - ,0.51194390E+3,0.168E+3,0.162E+3,0.29282000E+1,0.29300000E+1 - ,0.49346840E+3,0.168E+3,0.163E+3,0.29282000E+1,0.18286000E+1 - ,0.51517330E+3,0.168E+3,0.164E+3,0.29282000E+1,0.28732000E+1 - ,0.48389820E+3,0.168E+3,0.165E+3,0.29282000E+1,0.29086000E+1 - ,0.49233800E+3,0.168E+3,0.166E+3,0.29282000E+1,0.28965000E+1 - ,0.45931550E+3,0.168E+3,0.167E+3,0.29282000E+1,0.29242000E+1 - ,0.44623140E+3,0.168E+3,0.168E+3,0.29282000E+1,0.29282000E+1 - ,0.35748000E+2,0.169E+3,0.100E+1,0.29246000E+1,0.91180000E+0 - ,0.23629700E+2,0.169E+3,0.200E+1,0.29246000E+1,0.00000000E+0 - ,0.55525980E+3,0.169E+3,0.300E+1,0.29246000E+1,0.00000000E+0 - ,0.32123930E+3,0.169E+3,0.400E+1,0.29246000E+1,0.00000000E+0 - ,0.21630990E+3,0.169E+3,0.500E+1,0.29246000E+1,0.00000000E+0 - ,0.14611730E+3,0.169E+3,0.600E+1,0.29246000E+1,0.00000000E+0 - ,0.10218880E+3,0.169E+3,0.700E+1,0.29246000E+1,0.00000000E+0 - ,0.77387400E+2,0.169E+3,0.800E+1,0.29246000E+1,0.00000000E+0 - ,0.58646500E+2,0.169E+3,0.900E+1,0.29246000E+1,0.00000000E+0 - ,0.45129800E+2,0.169E+3,0.100E+2,0.29246000E+1,0.00000000E+0 - ,0.66409940E+3,0.169E+3,0.110E+2,0.29246000E+1,0.00000000E+0 - ,0.51180090E+3,0.169E+3,0.120E+2,0.29246000E+1,0.00000000E+0 - ,0.47179450E+3,0.169E+3,0.130E+2,0.29246000E+1,0.00000000E+0 - ,0.37172710E+3,0.169E+3,0.140E+2,0.29246000E+1,0.00000000E+0 - ,0.28980090E+3,0.169E+3,0.150E+2,0.29246000E+1,0.00000000E+0 - ,0.24047400E+3,0.169E+3,0.160E+2,0.29246000E+1,0.00000000E+0 - ,0.19640620E+3,0.169E+3,0.170E+2,0.29246000E+1,0.00000000E+0 - ,0.16067610E+3,0.169E+3,0.180E+2,0.29246000E+1,0.00000000E+0 - ,0.10876970E+4,0.169E+3,0.190E+2,0.29246000E+1,0.00000000E+0 - ,0.89886340E+3,0.169E+3,0.200E+2,0.29246000E+1,0.00000000E+0 - ,0.74273900E+3,0.169E+3,0.210E+2,0.29246000E+1,0.00000000E+0 - ,0.71728970E+3,0.169E+3,0.220E+2,0.29246000E+1,0.00000000E+0 - ,0.65688060E+3,0.169E+3,0.230E+2,0.29246000E+1,0.00000000E+0 - ,0.51743220E+3,0.169E+3,0.240E+2,0.29246000E+1,0.00000000E+0 - ,0.56559590E+3,0.169E+3,0.250E+2,0.29246000E+1,0.00000000E+0 - ,0.44390510E+3,0.169E+3,0.260E+2,0.29246000E+1,0.00000000E+0 - ,0.47058200E+3,0.169E+3,0.270E+2,0.29246000E+1,0.00000000E+0 - ,0.48475110E+3,0.169E+3,0.280E+2,0.29246000E+1,0.00000000E+0 - ,0.37163760E+3,0.169E+3,0.290E+2,0.29246000E+1,0.00000000E+0 - ,0.38158090E+3,0.169E+3,0.300E+2,0.29246000E+1,0.00000000E+0 - ,0.45190020E+3,0.169E+3,0.310E+2,0.29246000E+1,0.00000000E+0 - ,0.39847870E+3,0.169E+3,0.320E+2,0.29246000E+1,0.00000000E+0 - ,0.33979060E+3,0.169E+3,0.330E+2,0.29246000E+1,0.00000000E+0 - ,0.30483420E+3,0.169E+3,0.340E+2,0.29246000E+1,0.00000000E+0 - ,0.26670930E+3,0.169E+3,0.350E+2,0.29246000E+1,0.00000000E+0 - ,0.23190470E+3,0.169E+3,0.360E+2,0.29246000E+1,0.00000000E+0 - ,0.12190706E+4,0.169E+3,0.370E+2,0.29246000E+1,0.00000000E+0 - ,0.10708351E+4,0.169E+3,0.380E+2,0.29246000E+1,0.00000000E+0 - ,0.93818730E+3,0.169E+3,0.390E+2,0.29246000E+1,0.00000000E+0 - ,0.84323610E+3,0.169E+3,0.400E+2,0.29246000E+1,0.00000000E+0 - ,0.76891010E+3,0.169E+3,0.410E+2,0.29246000E+1,0.00000000E+0 - ,0.59357780E+3,0.169E+3,0.420E+2,0.29246000E+1,0.00000000E+0 - ,0.66231090E+3,0.169E+3,0.430E+2,0.29246000E+1,0.00000000E+0 - ,0.50453730E+3,0.169E+3,0.440E+2,0.29246000E+1,0.00000000E+0 - ,0.55152390E+3,0.169E+3,0.450E+2,0.29246000E+1,0.00000000E+0 - ,0.51144340E+3,0.169E+3,0.460E+2,0.29246000E+1,0.00000000E+0 - ,0.42643750E+3,0.169E+3,0.470E+2,0.29246000E+1,0.00000000E+0 - ,0.45065890E+3,0.169E+3,0.480E+2,0.29246000E+1,0.00000000E+0 - ,0.56556470E+3,0.169E+3,0.490E+2,0.29246000E+1,0.00000000E+0 - ,0.52293560E+3,0.169E+3,0.500E+2,0.29246000E+1,0.00000000E+0 - ,0.46590590E+3,0.169E+3,0.510E+2,0.29246000E+1,0.00000000E+0 - ,0.43217320E+3,0.169E+3,0.520E+2,0.29246000E+1,0.00000000E+0 - ,0.39065890E+3,0.169E+3,0.530E+2,0.29246000E+1,0.00000000E+0 - ,0.35113440E+3,0.169E+3,0.540E+2,0.29246000E+1,0.00000000E+0 - ,0.14849661E+4,0.169E+3,0.550E+2,0.29246000E+1,0.00000000E+0 - ,0.13649240E+4,0.169E+3,0.560E+2,0.29246000E+1,0.00000000E+0 - ,0.11993874E+4,0.169E+3,0.570E+2,0.29246000E+1,0.00000000E+0 - ,0.55042640E+3,0.169E+3,0.580E+2,0.29246000E+1,0.27991000E+1 - ,0.12094663E+4,0.169E+3,0.590E+2,0.29246000E+1,0.00000000E+0 - ,0.11614494E+4,0.169E+3,0.600E+2,0.29246000E+1,0.00000000E+0 - ,0.11323365E+4,0.169E+3,0.610E+2,0.29246000E+1,0.00000000E+0 - ,0.11055604E+4,0.169E+3,0.620E+2,0.29246000E+1,0.00000000E+0 - ,0.10818160E+4,0.169E+3,0.630E+2,0.29246000E+1,0.00000000E+0 - ,0.85075460E+3,0.169E+3,0.640E+2,0.29246000E+1,0.00000000E+0 - ,0.95749480E+3,0.169E+3,0.650E+2,0.29246000E+1,0.00000000E+0 - ,0.92347850E+3,0.169E+3,0.660E+2,0.29246000E+1,0.00000000E+0 - ,0.97580850E+3,0.169E+3,0.670E+2,0.29246000E+1,0.00000000E+0 - ,0.95511040E+3,0.169E+3,0.680E+2,0.29246000E+1,0.00000000E+0 - ,0.93644570E+3,0.169E+3,0.690E+2,0.29246000E+1,0.00000000E+0 - ,0.92549440E+3,0.169E+3,0.700E+2,0.29246000E+1,0.00000000E+0 - ,0.77979590E+3,0.169E+3,0.710E+2,0.29246000E+1,0.00000000E+0 - ,0.76690850E+3,0.169E+3,0.720E+2,0.29246000E+1,0.00000000E+0 - ,0.69985110E+3,0.169E+3,0.730E+2,0.29246000E+1,0.00000000E+0 - ,0.59088900E+3,0.169E+3,0.740E+2,0.29246000E+1,0.00000000E+0 - ,0.60112600E+3,0.169E+3,0.750E+2,0.29246000E+1,0.00000000E+0 - ,0.54476460E+3,0.169E+3,0.760E+2,0.29246000E+1,0.00000000E+0 - ,0.49887240E+3,0.169E+3,0.770E+2,0.29246000E+1,0.00000000E+0 - ,0.41437420E+3,0.169E+3,0.780E+2,0.29246000E+1,0.00000000E+0 - ,0.38714220E+3,0.169E+3,0.790E+2,0.29246000E+1,0.00000000E+0 - ,0.39824650E+3,0.169E+3,0.800E+2,0.29246000E+1,0.00000000E+0 - ,0.58061670E+3,0.169E+3,0.810E+2,0.29246000E+1,0.00000000E+0 - ,0.56766880E+3,0.169E+3,0.820E+2,0.29246000E+1,0.00000000E+0 - ,0.52151170E+3,0.169E+3,0.830E+2,0.29246000E+1,0.00000000E+0 - ,0.49729730E+3,0.169E+3,0.840E+2,0.29246000E+1,0.00000000E+0 - ,0.45884250E+3,0.169E+3,0.850E+2,0.29246000E+1,0.00000000E+0 - ,0.42045390E+3,0.169E+3,0.860E+2,0.29246000E+1,0.00000000E+0 - ,0.14024613E+4,0.169E+3,0.870E+2,0.29246000E+1,0.00000000E+0 - ,0.13497931E+4,0.169E+3,0.880E+2,0.29246000E+1,0.00000000E+0 - ,0.11933412E+4,0.169E+3,0.890E+2,0.29246000E+1,0.00000000E+0 - ,0.10724182E+4,0.169E+3,0.900E+2,0.29246000E+1,0.00000000E+0 - ,0.10647199E+4,0.169E+3,0.910E+2,0.29246000E+1,0.00000000E+0 - ,0.10309456E+4,0.169E+3,0.920E+2,0.29246000E+1,0.00000000E+0 - ,0.10614860E+4,0.169E+3,0.930E+2,0.29246000E+1,0.00000000E+0 - ,0.10279565E+4,0.169E+3,0.940E+2,0.29246000E+1,0.00000000E+0 - ,0.57593700E+2,0.169E+3,0.101E+3,0.29246000E+1,0.00000000E+0 - ,0.18672100E+3,0.169E+3,0.103E+3,0.29246000E+1,0.98650000E+0 - ,0.23814200E+3,0.169E+3,0.104E+3,0.29246000E+1,0.98080000E+0 - ,0.18193830E+3,0.169E+3,0.105E+3,0.29246000E+1,0.97060000E+0 - ,0.13705810E+3,0.169E+3,0.106E+3,0.29246000E+1,0.98680000E+0 - ,0.95297900E+2,0.169E+3,0.107E+3,0.29246000E+1,0.99440000E+0 - ,0.69413700E+2,0.169E+3,0.108E+3,0.29246000E+1,0.99250000E+0 - ,0.47755100E+2,0.169E+3,0.109E+3,0.29246000E+1,0.99820000E+0 - ,0.27296680E+3,0.169E+3,0.111E+3,0.29246000E+1,0.96840000E+0 - ,0.42211770E+3,0.169E+3,0.112E+3,0.29246000E+1,0.96280000E+0 - ,0.42756550E+3,0.169E+3,0.113E+3,0.29246000E+1,0.96480000E+0 - ,0.34354750E+3,0.169E+3,0.114E+3,0.29246000E+1,0.95070000E+0 - ,0.28129780E+3,0.169E+3,0.115E+3,0.29246000E+1,0.99470000E+0 - ,0.23782830E+3,0.169E+3,0.116E+3,0.29246000E+1,0.99480000E+0 - ,0.19437320E+3,0.169E+3,0.117E+3,0.29246000E+1,0.99720000E+0 - ,0.37630470E+3,0.169E+3,0.119E+3,0.29246000E+1,0.97670000E+0 - ,0.71887190E+3,0.169E+3,0.120E+3,0.29246000E+1,0.98310000E+0 - ,0.37645520E+3,0.169E+3,0.121E+3,0.29246000E+1,0.18627000E+1 - ,0.36340760E+3,0.169E+3,0.122E+3,0.29246000E+1,0.18299000E+1 - ,0.35615030E+3,0.169E+3,0.123E+3,0.29246000E+1,0.19138000E+1 - ,0.35286320E+3,0.169E+3,0.124E+3,0.29246000E+1,0.18269000E+1 - ,0.32467610E+3,0.169E+3,0.125E+3,0.29246000E+1,0.16406000E+1 - ,0.30047150E+3,0.169E+3,0.126E+3,0.29246000E+1,0.16483000E+1 - ,0.28663320E+3,0.169E+3,0.127E+3,0.29246000E+1,0.17149000E+1 - ,0.28022740E+3,0.169E+3,0.128E+3,0.29246000E+1,0.17937000E+1 - ,0.27690380E+3,0.169E+3,0.129E+3,0.29246000E+1,0.95760000E+0 - ,0.25976130E+3,0.169E+3,0.130E+3,0.29246000E+1,0.19419000E+1 - ,0.42442030E+3,0.169E+3,0.131E+3,0.29246000E+1,0.96010000E+0 - ,0.37275950E+3,0.169E+3,0.132E+3,0.29246000E+1,0.94340000E+0 - ,0.33401900E+3,0.169E+3,0.133E+3,0.29246000E+1,0.98890000E+0 - ,0.30495200E+3,0.169E+3,0.134E+3,0.29246000E+1,0.99010000E+0 - ,0.26856840E+3,0.169E+3,0.135E+3,0.29246000E+1,0.99740000E+0 - ,0.44898400E+3,0.169E+3,0.137E+3,0.29246000E+1,0.97380000E+0 - ,0.87467070E+3,0.169E+3,0.138E+3,0.29246000E+1,0.98010000E+0 - ,0.66876560E+3,0.169E+3,0.139E+3,0.29246000E+1,0.19153000E+1 - ,0.49783950E+3,0.169E+3,0.140E+3,0.29246000E+1,0.19355000E+1 - ,0.50278080E+3,0.169E+3,0.141E+3,0.29246000E+1,0.19545000E+1 - ,0.46880410E+3,0.169E+3,0.142E+3,0.29246000E+1,0.19420000E+1 - ,0.52574810E+3,0.169E+3,0.143E+3,0.29246000E+1,0.16682000E+1 - ,0.40862370E+3,0.169E+3,0.144E+3,0.29246000E+1,0.18584000E+1 - ,0.38227390E+3,0.169E+3,0.145E+3,0.29246000E+1,0.19003000E+1 - ,0.35497280E+3,0.169E+3,0.146E+3,0.29246000E+1,0.18630000E+1 - ,0.34340860E+3,0.169E+3,0.147E+3,0.29246000E+1,0.96790000E+0 - ,0.33969190E+3,0.169E+3,0.148E+3,0.29246000E+1,0.19539000E+1 - ,0.53908680E+3,0.169E+3,0.149E+3,0.29246000E+1,0.96330000E+0 - ,0.48762850E+3,0.169E+3,0.150E+3,0.29246000E+1,0.95140000E+0 - ,0.45659480E+3,0.169E+3,0.151E+3,0.29246000E+1,0.97490000E+0 - ,0.43185070E+3,0.169E+3,0.152E+3,0.29246000E+1,0.98110000E+0 - ,0.39432570E+3,0.169E+3,0.153E+3,0.29246000E+1,0.99680000E+0 - ,0.53087060E+3,0.169E+3,0.155E+3,0.29246000E+1,0.99090000E+0 - ,0.11338329E+4,0.169E+3,0.156E+3,0.29246000E+1,0.97970000E+0 - ,0.84637940E+3,0.169E+3,0.157E+3,0.29246000E+1,0.19373000E+1 - ,0.53382250E+3,0.169E+3,0.159E+3,0.29246000E+1,0.29425000E+1 - ,0.52278360E+3,0.169E+3,0.160E+3,0.29246000E+1,0.29455000E+1 - ,0.50620810E+3,0.169E+3,0.161E+3,0.29246000E+1,0.29413000E+1 - ,0.50870480E+3,0.169E+3,0.162E+3,0.29246000E+1,0.29300000E+1 - ,0.49043340E+3,0.169E+3,0.163E+3,0.29246000E+1,0.18286000E+1 - ,0.51192810E+3,0.169E+3,0.164E+3,0.29246000E+1,0.28732000E+1 - ,0.48082180E+3,0.169E+3,0.165E+3,0.29246000E+1,0.29086000E+1 - ,0.48926080E+3,0.169E+3,0.166E+3,0.29246000E+1,0.28965000E+1 - ,0.45637280E+3,0.169E+3,0.167E+3,0.29246000E+1,0.29242000E+1 - ,0.44336390E+3,0.169E+3,0.168E+3,0.29246000E+1,0.29282000E+1 - ,0.44052280E+3,0.169E+3,0.169E+3,0.29246000E+1,0.29246000E+1 - ,0.37398600E+2,0.170E+3,0.100E+1,0.28482000E+1,0.91180000E+0 - ,0.24543500E+2,0.170E+3,0.200E+1,0.28482000E+1,0.00000000E+0 - ,0.59236510E+3,0.170E+3,0.300E+1,0.28482000E+1,0.00000000E+0 - ,0.34023850E+3,0.170E+3,0.400E+1,0.28482000E+1,0.00000000E+0 - ,0.22788020E+3,0.170E+3,0.500E+1,0.28482000E+1,0.00000000E+0 - ,0.15321460E+3,0.170E+3,0.600E+1,0.28482000E+1,0.00000000E+0 - ,0.10673400E+3,0.170E+3,0.700E+1,0.28482000E+1,0.00000000E+0 - ,0.80586300E+2,0.170E+3,0.800E+1,0.28482000E+1,0.00000000E+0 - ,0.60903100E+2,0.170E+3,0.900E+1,0.28482000E+1,0.00000000E+0 - ,0.46756900E+2,0.170E+3,0.100E+2,0.28482000E+1,0.00000000E+0 - ,0.70806290E+3,0.170E+3,0.110E+2,0.28482000E+1,0.00000000E+0 - ,0.54277630E+3,0.170E+3,0.120E+2,0.28482000E+1,0.00000000E+0 - ,0.49910710E+3,0.170E+3,0.130E+2,0.28482000E+1,0.00000000E+0 - ,0.39184510E+3,0.170E+3,0.140E+2,0.28482000E+1,0.00000000E+0 - ,0.30444600E+3,0.170E+3,0.150E+2,0.28482000E+1,0.00000000E+0 - ,0.25199750E+3,0.170E+3,0.160E+2,0.28482000E+1,0.00000000E+0 - ,0.20529690E+3,0.170E+3,0.170E+2,0.28482000E+1,0.00000000E+0 - ,0.16755260E+3,0.170E+3,0.180E+2,0.28482000E+1,0.00000000E+0 - ,0.11600767E+4,0.170E+3,0.190E+2,0.28482000E+1,0.00000000E+0 - ,0.95507870E+3,0.170E+3,0.200E+2,0.28482000E+1,0.00000000E+0 - ,0.78843250E+3,0.170E+3,0.210E+2,0.28482000E+1,0.00000000E+0 - ,0.76056390E+3,0.170E+3,0.220E+2,0.28482000E+1,0.00000000E+0 - ,0.69606330E+3,0.170E+3,0.230E+2,0.28482000E+1,0.00000000E+0 - ,0.54795880E+3,0.170E+3,0.240E+2,0.28482000E+1,0.00000000E+0 - ,0.59876220E+3,0.170E+3,0.250E+2,0.28482000E+1,0.00000000E+0 - ,0.46957880E+3,0.170E+3,0.260E+2,0.28482000E+1,0.00000000E+0 - ,0.49740630E+3,0.170E+3,0.270E+2,0.28482000E+1,0.00000000E+0 - ,0.51274730E+3,0.170E+3,0.280E+2,0.28482000E+1,0.00000000E+0 - ,0.39280830E+3,0.170E+3,0.290E+2,0.28482000E+1,0.00000000E+0 - ,0.40272690E+3,0.170E+3,0.300E+2,0.28482000E+1,0.00000000E+0 - ,0.47737550E+3,0.170E+3,0.310E+2,0.28482000E+1,0.00000000E+0 - ,0.41982970E+3,0.170E+3,0.320E+2,0.28482000E+1,0.00000000E+0 - ,0.35702170E+3,0.170E+3,0.330E+2,0.28482000E+1,0.00000000E+0 - ,0.31968520E+3,0.170E+3,0.340E+2,0.28482000E+1,0.00000000E+0 - ,0.27912740E+3,0.170E+3,0.350E+2,0.28482000E+1,0.00000000E+0 - ,0.24221470E+3,0.170E+3,0.360E+2,0.28482000E+1,0.00000000E+0 - ,0.12994482E+4,0.170E+3,0.370E+2,0.28482000E+1,0.00000000E+0 - ,0.11377525E+4,0.170E+3,0.380E+2,0.28482000E+1,0.00000000E+0 - ,0.99498690E+3,0.170E+3,0.390E+2,0.28482000E+1,0.00000000E+0 - ,0.89315950E+3,0.170E+3,0.400E+2,0.28482000E+1,0.00000000E+0 - ,0.81367980E+3,0.170E+3,0.410E+2,0.28482000E+1,0.00000000E+0 - ,0.62696020E+3,0.170E+3,0.420E+2,0.28482000E+1,0.00000000E+0 - ,0.70006760E+3,0.170E+3,0.430E+2,0.28482000E+1,0.00000000E+0 - ,0.53219550E+3,0.170E+3,0.440E+2,0.28482000E+1,0.00000000E+0 - ,0.58198660E+3,0.170E+3,0.450E+2,0.28482000E+1,0.00000000E+0 - ,0.53936520E+3,0.170E+3,0.460E+2,0.28482000E+1,0.00000000E+0 - ,0.44956060E+3,0.170E+3,0.470E+2,0.28482000E+1,0.00000000E+0 - ,0.47487730E+3,0.170E+3,0.480E+2,0.28482000E+1,0.00000000E+0 - ,0.59714660E+3,0.170E+3,0.490E+2,0.28482000E+1,0.00000000E+0 - ,0.55105660E+3,0.170E+3,0.500E+2,0.28482000E+1,0.00000000E+0 - ,0.48986860E+3,0.170E+3,0.510E+2,0.28482000E+1,0.00000000E+0 - ,0.45372430E+3,0.170E+3,0.520E+2,0.28482000E+1,0.00000000E+0 - ,0.40944070E+3,0.170E+3,0.530E+2,0.28482000E+1,0.00000000E+0 - ,0.36738410E+3,0.170E+3,0.540E+2,0.28482000E+1,0.00000000E+0 - ,0.15825500E+4,0.170E+3,0.550E+2,0.28482000E+1,0.00000000E+0 - ,0.14507794E+4,0.170E+3,0.560E+2,0.28482000E+1,0.00000000E+0 - ,0.12725822E+4,0.170E+3,0.570E+2,0.28482000E+1,0.00000000E+0 - ,0.57883400E+3,0.170E+3,0.580E+2,0.28482000E+1,0.27991000E+1 - ,0.12846682E+4,0.170E+3,0.590E+2,0.28482000E+1,0.00000000E+0 - ,0.12333365E+4,0.170E+3,0.600E+2,0.28482000E+1,0.00000000E+0 - ,0.12023371E+4,0.170E+3,0.610E+2,0.28482000E+1,0.00000000E+0 - ,0.11738392E+4,0.170E+3,0.620E+2,0.28482000E+1,0.00000000E+0 - ,0.11485655E+4,0.170E+3,0.630E+2,0.28482000E+1,0.00000000E+0 - ,0.90112100E+3,0.170E+3,0.640E+2,0.28482000E+1,0.00000000E+0 - ,0.10169049E+4,0.170E+3,0.650E+2,0.28482000E+1,0.00000000E+0 - ,0.98043260E+3,0.170E+3,0.660E+2,0.28482000E+1,0.00000000E+0 - ,0.10356000E+4,0.170E+3,0.670E+2,0.28482000E+1,0.00000000E+0 - ,0.10136038E+4,0.170E+3,0.680E+2,0.28482000E+1,0.00000000E+0 - ,0.99374150E+3,0.170E+3,0.690E+2,0.28482000E+1,0.00000000E+0 - ,0.98222660E+3,0.170E+3,0.700E+2,0.28482000E+1,0.00000000E+0 - ,0.82628510E+3,0.170E+3,0.710E+2,0.28482000E+1,0.00000000E+0 - ,0.81115710E+3,0.170E+3,0.720E+2,0.28482000E+1,0.00000000E+0 - ,0.73922210E+3,0.170E+3,0.730E+2,0.28482000E+1,0.00000000E+0 - ,0.62322500E+3,0.170E+3,0.740E+2,0.28482000E+1,0.00000000E+0 - ,0.63376790E+3,0.170E+3,0.750E+2,0.28482000E+1,0.00000000E+0 - ,0.57362030E+3,0.170E+3,0.760E+2,0.28482000E+1,0.00000000E+0 - ,0.52473400E+3,0.170E+3,0.770E+2,0.28482000E+1,0.00000000E+0 - ,0.43520090E+3,0.170E+3,0.780E+2,0.28482000E+1,0.00000000E+0 - ,0.40635950E+3,0.170E+3,0.790E+2,0.28482000E+1,0.00000000E+0 - ,0.41792020E+3,0.170E+3,0.800E+2,0.28482000E+1,0.00000000E+0 - ,0.61237220E+3,0.170E+3,0.810E+2,0.28482000E+1,0.00000000E+0 - ,0.59791090E+3,0.170E+3,0.820E+2,0.28482000E+1,0.00000000E+0 - ,0.54826140E+3,0.170E+3,0.830E+2,0.28482000E+1,0.00000000E+0 - ,0.52217940E+3,0.170E+3,0.840E+2,0.28482000E+1,0.00000000E+0 - ,0.48105700E+3,0.170E+3,0.850E+2,0.28482000E+1,0.00000000E+0 - ,0.44014200E+3,0.170E+3,0.860E+2,0.28482000E+1,0.00000000E+0 - ,0.14924670E+4,0.170E+3,0.870E+2,0.28482000E+1,0.00000000E+0 - ,0.14332640E+4,0.170E+3,0.880E+2,0.28482000E+1,0.00000000E+0 - ,0.12650809E+4,0.170E+3,0.890E+2,0.28482000E+1,0.00000000E+0 - ,0.11344175E+4,0.170E+3,0.900E+2,0.28482000E+1,0.00000000E+0 - ,0.11272049E+4,0.170E+3,0.910E+2,0.28482000E+1,0.00000000E+0 - ,0.10913656E+4,0.170E+3,0.920E+2,0.28482000E+1,0.00000000E+0 - ,0.11251094E+4,0.170E+3,0.930E+2,0.28482000E+1,0.00000000E+0 - ,0.10893370E+4,0.170E+3,0.940E+2,0.28482000E+1,0.00000000E+0 - ,0.60487100E+2,0.170E+3,0.101E+3,0.28482000E+1,0.00000000E+0 - ,0.19759460E+3,0.170E+3,0.103E+3,0.28482000E+1,0.98650000E+0 - ,0.25172230E+3,0.170E+3,0.104E+3,0.28482000E+1,0.98080000E+0 - ,0.19141090E+3,0.170E+3,0.105E+3,0.28482000E+1,0.97060000E+0 - ,0.14369300E+3,0.170E+3,0.106E+3,0.28482000E+1,0.98680000E+0 - ,0.99505900E+2,0.170E+3,0.107E+3,0.28482000E+1,0.99440000E+0 - ,0.72218200E+2,0.170E+3,0.108E+3,0.28482000E+1,0.99250000E+0 - ,0.49450200E+2,0.170E+3,0.109E+3,0.28482000E+1,0.99820000E+0 - ,0.28901230E+3,0.170E+3,0.111E+3,0.28482000E+1,0.96840000E+0 - ,0.44716520E+3,0.170E+3,0.112E+3,0.28482000E+1,0.96280000E+0 - ,0.45200550E+3,0.170E+3,0.113E+3,0.28482000E+1,0.96480000E+0 - ,0.36191400E+3,0.170E+3,0.114E+3,0.28482000E+1,0.95070000E+0 - ,0.29546110E+3,0.170E+3,0.115E+3,0.28482000E+1,0.99470000E+0 - ,0.24922870E+3,0.170E+3,0.116E+3,0.28482000E+1,0.99480000E+0 - ,0.20317400E+3,0.170E+3,0.117E+3,0.28482000E+1,0.99720000E+0 - ,0.39728560E+3,0.170E+3,0.119E+3,0.28482000E+1,0.97670000E+0 - ,0.76326450E+3,0.170E+3,0.120E+3,0.28482000E+1,0.98310000E+0 - ,0.39658450E+3,0.170E+3,0.121E+3,0.28482000E+1,0.18627000E+1 - ,0.38275050E+3,0.170E+3,0.122E+3,0.28482000E+1,0.18299000E+1 - ,0.37510830E+3,0.170E+3,0.123E+3,0.28482000E+1,0.19138000E+1 - ,0.37175280E+3,0.170E+3,0.124E+3,0.28482000E+1,0.18269000E+1 - ,0.34156320E+3,0.170E+3,0.125E+3,0.28482000E+1,0.16406000E+1 - ,0.31590920E+3,0.170E+3,0.126E+3,0.28482000E+1,0.16483000E+1 - ,0.30132730E+3,0.170E+3,0.127E+3,0.28482000E+1,0.17149000E+1 - ,0.29462620E+3,0.170E+3,0.128E+3,0.28482000E+1,0.17937000E+1 - ,0.29146390E+3,0.170E+3,0.129E+3,0.28482000E+1,0.95760000E+0 - ,0.27284960E+3,0.170E+3,0.130E+3,0.28482000E+1,0.19419000E+1 - ,0.44803280E+3,0.170E+3,0.131E+3,0.28482000E+1,0.96010000E+0 - ,0.39245010E+3,0.170E+3,0.132E+3,0.28482000E+1,0.94340000E+0 - ,0.35089060E+3,0.170E+3,0.133E+3,0.28482000E+1,0.98890000E+0 - ,0.31981290E+3,0.170E+3,0.134E+3,0.28482000E+1,0.99010000E+0 - ,0.28109900E+3,0.170E+3,0.135E+3,0.28482000E+1,0.99740000E+0 - ,0.47364740E+3,0.170E+3,0.137E+3,0.28482000E+1,0.97380000E+0 - ,0.92871230E+3,0.170E+3,0.138E+3,0.28482000E+1,0.98010000E+0 - ,0.70739100E+3,0.170E+3,0.139E+3,0.28482000E+1,0.19153000E+1 - ,0.52442450E+3,0.170E+3,0.140E+3,0.28482000E+1,0.19355000E+1 - ,0.52963760E+3,0.170E+3,0.141E+3,0.28482000E+1,0.19545000E+1 - ,0.49348140E+3,0.170E+3,0.142E+3,0.28482000E+1,0.19420000E+1 - ,0.55447820E+3,0.170E+3,0.143E+3,0.28482000E+1,0.16682000E+1 - ,0.42941670E+3,0.170E+3,0.144E+3,0.28482000E+1,0.18584000E+1 - ,0.40159420E+3,0.170E+3,0.145E+3,0.28482000E+1,0.19003000E+1 - ,0.37273910E+3,0.170E+3,0.146E+3,0.28482000E+1,0.18630000E+1 - ,0.36066920E+3,0.170E+3,0.147E+3,0.28482000E+1,0.96790000E+0 - ,0.35642060E+3,0.170E+3,0.148E+3,0.28482000E+1,0.19539000E+1 - ,0.56876740E+3,0.170E+3,0.149E+3,0.28482000E+1,0.96330000E+0 - ,0.51338040E+3,0.170E+3,0.150E+3,0.28482000E+1,0.95140000E+0 - ,0.47992240E+3,0.170E+3,0.151E+3,0.28482000E+1,0.97490000E+0 - ,0.45334590E+3,0.170E+3,0.152E+3,0.28482000E+1,0.98110000E+0 - ,0.41330020E+3,0.170E+3,0.153E+3,0.28482000E+1,0.99680000E+0 - ,0.55918680E+3,0.170E+3,0.155E+3,0.28482000E+1,0.99090000E+0 - ,0.12045119E+4,0.170E+3,0.156E+3,0.28482000E+1,0.97970000E+0 - ,0.89547410E+3,0.170E+3,0.157E+3,0.28482000E+1,0.19373000E+1 - ,0.56128730E+3,0.170E+3,0.159E+3,0.28482000E+1,0.29425000E+1 - ,0.54966430E+3,0.170E+3,0.160E+3,0.28482000E+1,0.29455000E+1 - ,0.53216530E+3,0.170E+3,0.161E+3,0.28482000E+1,0.29413000E+1 - ,0.53496580E+3,0.170E+3,0.162E+3,0.28482000E+1,0.29300000E+1 - ,0.51624120E+3,0.170E+3,0.163E+3,0.28482000E+1,0.18286000E+1 - ,0.53845600E+3,0.170E+3,0.164E+3,0.28482000E+1,0.28732000E+1 - ,0.50556900E+3,0.170E+3,0.165E+3,0.28482000E+1,0.29086000E+1 - ,0.51473030E+3,0.170E+3,0.166E+3,0.28482000E+1,0.28965000E+1 - ,0.47973200E+3,0.170E+3,0.167E+3,0.28482000E+1,0.29242000E+1 - ,0.46600690E+3,0.170E+3,0.168E+3,0.28482000E+1,0.29282000E+1 - ,0.46306960E+3,0.170E+3,0.169E+3,0.28482000E+1,0.29246000E+1 - ,0.48707530E+3,0.170E+3,0.170E+3,0.28482000E+1,0.28482000E+1 - ,0.34601200E+2,0.171E+3,0.100E+1,0.29219000E+1,0.91180000E+0 - ,0.22892600E+2,0.171E+3,0.200E+1,0.29219000E+1,0.00000000E+0 - ,0.53345810E+3,0.171E+3,0.300E+1,0.29219000E+1,0.00000000E+0 - ,0.30982450E+3,0.171E+3,0.400E+1,0.29219000E+1,0.00000000E+0 - ,0.20900590E+3,0.171E+3,0.500E+1,0.29219000E+1,0.00000000E+0 - ,0.14134580E+3,0.171E+3,0.600E+1,0.29219000E+1,0.00000000E+0 - ,0.98922300E+2,0.171E+3,0.700E+1,0.29219000E+1,0.00000000E+0 - ,0.74945100E+2,0.171E+3,0.800E+1,0.29219000E+1,0.00000000E+0 - ,0.56812400E+2,0.171E+3,0.900E+1,0.29219000E+1,0.00000000E+0 - ,0.43726300E+2,0.171E+3,0.100E+2,0.29219000E+1,0.00000000E+0 - ,0.63816340E+3,0.171E+3,0.110E+2,0.29219000E+1,0.00000000E+0 - ,0.49328830E+3,0.171E+3,0.120E+2,0.29219000E+1,0.00000000E+0 - ,0.45519600E+3,0.171E+3,0.130E+2,0.29219000E+1,0.00000000E+0 - ,0.35911410E+3,0.171E+3,0.140E+2,0.29219000E+1,0.00000000E+0 - ,0.28024060E+3,0.171E+3,0.150E+2,0.29219000E+1,0.00000000E+0 - ,0.23266870E+3,0.171E+3,0.160E+2,0.29219000E+1,0.00000000E+0 - ,0.19012190E+3,0.171E+3,0.170E+2,0.29219000E+1,0.00000000E+0 - ,0.15559160E+3,0.171E+3,0.180E+2,0.29219000E+1,0.00000000E+0 - ,0.10444701E+4,0.171E+3,0.190E+2,0.29219000E+1,0.00000000E+0 - ,0.86528290E+3,0.171E+3,0.200E+2,0.29219000E+1,0.00000000E+0 - ,0.71536520E+3,0.171E+3,0.210E+2,0.29219000E+1,0.00000000E+0 - ,0.69115730E+3,0.171E+3,0.220E+2,0.29219000E+1,0.00000000E+0 - ,0.63311630E+3,0.171E+3,0.230E+2,0.29219000E+1,0.00000000E+0 - ,0.49870530E+3,0.171E+3,0.240E+2,0.29219000E+1,0.00000000E+0 - ,0.54533910E+3,0.171E+3,0.250E+2,0.29219000E+1,0.00000000E+0 - ,0.42801770E+3,0.171E+3,0.260E+2,0.29219000E+1,0.00000000E+0 - ,0.45401590E+3,0.171E+3,0.270E+2,0.29219000E+1,0.00000000E+0 - ,0.46756420E+3,0.171E+3,0.280E+2,0.29219000E+1,0.00000000E+0 - ,0.35843930E+3,0.171E+3,0.290E+2,0.29219000E+1,0.00000000E+0 - ,0.36835200E+3,0.171E+3,0.300E+2,0.29219000E+1,0.00000000E+0 - ,0.43614550E+3,0.171E+3,0.310E+2,0.29219000E+1,0.00000000E+0 - ,0.38497400E+3,0.171E+3,0.320E+2,0.29219000E+1,0.00000000E+0 - ,0.32854540E+3,0.171E+3,0.330E+2,0.29219000E+1,0.00000000E+0 - ,0.29488120E+3,0.171E+3,0.340E+2,0.29219000E+1,0.00000000E+0 - ,0.25811290E+3,0.171E+3,0.350E+2,0.29219000E+1,0.00000000E+0 - ,0.22451100E+3,0.171E+3,0.360E+2,0.29219000E+1,0.00000000E+0 - ,0.11708400E+4,0.171E+3,0.370E+2,0.29219000E+1,0.00000000E+0 - ,0.10307165E+4,0.171E+3,0.380E+2,0.29219000E+1,0.00000000E+0 - ,0.90385210E+3,0.171E+3,0.390E+2,0.29219000E+1,0.00000000E+0 - ,0.81281250E+3,0.171E+3,0.400E+2,0.29219000E+1,0.00000000E+0 - ,0.74141830E+3,0.171E+3,0.410E+2,0.29219000E+1,0.00000000E+0 - ,0.57266250E+3,0.171E+3,0.420E+2,0.29219000E+1,0.00000000E+0 - ,0.63884880E+3,0.171E+3,0.430E+2,0.29219000E+1,0.00000000E+0 - ,0.48694650E+3,0.171E+3,0.440E+2,0.29219000E+1,0.00000000E+0 - ,0.53231850E+3,0.171E+3,0.450E+2,0.29219000E+1,0.00000000E+0 - ,0.49373180E+3,0.171E+3,0.460E+2,0.29219000E+1,0.00000000E+0 - ,0.41158220E+3,0.171E+3,0.470E+2,0.29219000E+1,0.00000000E+0 - ,0.43515940E+3,0.171E+3,0.480E+2,0.29219000E+1,0.00000000E+0 - ,0.54577490E+3,0.171E+3,0.490E+2,0.29219000E+1,0.00000000E+0 - ,0.50506710E+3,0.171E+3,0.500E+2,0.29219000E+1,0.00000000E+0 - ,0.45032940E+3,0.171E+3,0.510E+2,0.29219000E+1,0.00000000E+0 - ,0.41790250E+3,0.171E+3,0.520E+2,0.29219000E+1,0.00000000E+0 - ,0.37792070E+3,0.171E+3,0.530E+2,0.29219000E+1,0.00000000E+0 - ,0.33981250E+3,0.171E+3,0.540E+2,0.29219000E+1,0.00000000E+0 - ,0.14262370E+4,0.171E+3,0.550E+2,0.29219000E+1,0.00000000E+0 - ,0.13133618E+4,0.171E+3,0.560E+2,0.29219000E+1,0.00000000E+0 - ,0.11551299E+4,0.171E+3,0.570E+2,0.29219000E+1,0.00000000E+0 - ,0.53193250E+3,0.171E+3,0.580E+2,0.29219000E+1,0.27991000E+1 - ,0.11640997E+4,0.171E+3,0.590E+2,0.29219000E+1,0.00000000E+0 - ,0.11180647E+4,0.171E+3,0.600E+2,0.29219000E+1,0.00000000E+0 - ,0.10900872E+4,0.171E+3,0.610E+2,0.29219000E+1,0.00000000E+0 - ,0.10643505E+4,0.171E+3,0.620E+2,0.29219000E+1,0.00000000E+0 - ,0.10415296E+4,0.171E+3,0.630E+2,0.29219000E+1,0.00000000E+0 - ,0.81984680E+3,0.171E+3,0.640E+2,0.29219000E+1,0.00000000E+0 - ,0.92133410E+3,0.171E+3,0.650E+2,0.29219000E+1,0.00000000E+0 - ,0.88874530E+3,0.171E+3,0.660E+2,0.29219000E+1,0.00000000E+0 - ,0.93968880E+3,0.171E+3,0.670E+2,0.29219000E+1,0.00000000E+0 - ,0.91978180E+3,0.171E+3,0.680E+2,0.29219000E+1,0.00000000E+0 - ,0.90184110E+3,0.171E+3,0.690E+2,0.29219000E+1,0.00000000E+0 - ,0.89126080E+3,0.171E+3,0.700E+2,0.29219000E+1,0.00000000E+0 - ,0.75143080E+3,0.171E+3,0.710E+2,0.29219000E+1,0.00000000E+0 - ,0.73969160E+3,0.171E+3,0.720E+2,0.29219000E+1,0.00000000E+0 - ,0.67535320E+3,0.171E+3,0.730E+2,0.29219000E+1,0.00000000E+0 - ,0.57039690E+3,0.171E+3,0.740E+2,0.29219000E+1,0.00000000E+0 - ,0.58039830E+3,0.171E+3,0.750E+2,0.29219000E+1,0.00000000E+0 - ,0.52619340E+3,0.171E+3,0.760E+2,0.29219000E+1,0.00000000E+0 - ,0.48201740E+3,0.171E+3,0.770E+2,0.29219000E+1,0.00000000E+0 - ,0.40048290E+3,0.171E+3,0.780E+2,0.29219000E+1,0.00000000E+0 - ,0.37420390E+3,0.171E+3,0.790E+2,0.29219000E+1,0.00000000E+0 - ,0.38500720E+3,0.171E+3,0.800E+2,0.29219000E+1,0.00000000E+0 - ,0.56037600E+3,0.171E+3,0.810E+2,0.29219000E+1,0.00000000E+0 - ,0.54825190E+3,0.171E+3,0.820E+2,0.29219000E+1,0.00000000E+0 - ,0.50402540E+3,0.171E+3,0.830E+2,0.29219000E+1,0.00000000E+0 - ,0.48080590E+3,0.171E+3,0.840E+2,0.29219000E+1,0.00000000E+0 - ,0.44381570E+3,0.171E+3,0.850E+2,0.29219000E+1,0.00000000E+0 - ,0.40683040E+3,0.171E+3,0.860E+2,0.29219000E+1,0.00000000E+0 - ,0.13480198E+4,0.171E+3,0.870E+2,0.29219000E+1,0.00000000E+0 - ,0.12994057E+4,0.171E+3,0.880E+2,0.29219000E+1,0.00000000E+0 - ,0.11497484E+4,0.171E+3,0.890E+2,0.29219000E+1,0.00000000E+0 - ,0.10341669E+4,0.171E+3,0.900E+2,0.29219000E+1,0.00000000E+0 - ,0.10262543E+4,0.171E+3,0.910E+2,0.29219000E+1,0.00000000E+0 - ,0.99371920E+3,0.171E+3,0.920E+2,0.29219000E+1,0.00000000E+0 - ,0.10225738E+4,0.171E+3,0.930E+2,0.29219000E+1,0.00000000E+0 - ,0.99038000E+3,0.171E+3,0.940E+2,0.29219000E+1,0.00000000E+0 - ,0.55700800E+2,0.171E+3,0.101E+3,0.29219000E+1,0.00000000E+0 - ,0.18012920E+3,0.171E+3,0.103E+3,0.29219000E+1,0.98650000E+0 - ,0.22980950E+3,0.171E+3,0.104E+3,0.29219000E+1,0.98080000E+0 - ,0.17585020E+3,0.171E+3,0.105E+3,0.29219000E+1,0.97060000E+0 - ,0.13257550E+3,0.171E+3,0.106E+3,0.29219000E+1,0.98680000E+0 - ,0.92251200E+2,0.171E+3,0.107E+3,0.29219000E+1,0.99440000E+0 - ,0.67230800E+2,0.171E+3,0.108E+3,0.29219000E+1,0.99250000E+0 - ,0.46277200E+2,0.171E+3,0.109E+3,0.29219000E+1,0.99820000E+0 - ,0.26322190E+3,0.171E+3,0.111E+3,0.29219000E+1,0.96840000E+0 - ,0.40699260E+3,0.171E+3,0.112E+3,0.29219000E+1,0.96280000E+0 - ,0.41261700E+3,0.171E+3,0.113E+3,0.29219000E+1,0.96480000E+0 - ,0.33194510E+3,0.171E+3,0.114E+3,0.29219000E+1,0.95070000E+0 - ,0.27202390E+3,0.171E+3,0.115E+3,0.29219000E+1,0.99470000E+0 - ,0.23010400E+3,0.171E+3,0.116E+3,0.29219000E+1,0.99480000E+0 - ,0.18815090E+3,0.171E+3,0.117E+3,0.29219000E+1,0.99720000E+0 - ,0.36307990E+3,0.171E+3,0.119E+3,0.29219000E+1,0.97670000E+0 - ,0.69200830E+3,0.171E+3,0.120E+3,0.29219000E+1,0.98310000E+0 - ,0.36363190E+3,0.171E+3,0.121E+3,0.29219000E+1,0.18627000E+1 - ,0.35103090E+3,0.171E+3,0.122E+3,0.29219000E+1,0.18299000E+1 - ,0.34401120E+3,0.171E+3,0.123E+3,0.29219000E+1,0.19138000E+1 - ,0.34078980E+3,0.171E+3,0.124E+3,0.29219000E+1,0.18269000E+1 - ,0.31376160E+3,0.171E+3,0.125E+3,0.29219000E+1,0.16406000E+1 - ,0.29041450E+3,0.171E+3,0.126E+3,0.29219000E+1,0.16483000E+1 - ,0.27703380E+3,0.171E+3,0.127E+3,0.29219000E+1,0.17149000E+1 - ,0.27082780E+3,0.171E+3,0.128E+3,0.29219000E+1,0.17937000E+1 - ,0.26748920E+3,0.171E+3,0.129E+3,0.29219000E+1,0.95760000E+0 - ,0.25114070E+3,0.171E+3,0.130E+3,0.29219000E+1,0.19419000E+1 - ,0.40972790E+3,0.171E+3,0.131E+3,0.29219000E+1,0.96010000E+0 - ,0.36020340E+3,0.171E+3,0.132E+3,0.29219000E+1,0.94340000E+0 - ,0.32297840E+3,0.171E+3,0.133E+3,0.29219000E+1,0.98890000E+0 - ,0.29499200E+3,0.171E+3,0.134E+3,0.29219000E+1,0.99010000E+0 - ,0.25990550E+3,0.171E+3,0.135E+3,0.29219000E+1,0.99740000E+0 - ,0.43329230E+3,0.171E+3,0.137E+3,0.29219000E+1,0.97380000E+0 - ,0.84185430E+3,0.171E+3,0.138E+3,0.29219000E+1,0.98010000E+0 - ,0.64480130E+3,0.171E+3,0.139E+3,0.29219000E+1,0.19153000E+1 - ,0.48082360E+3,0.171E+3,0.140E+3,0.29219000E+1,0.19355000E+1 - ,0.48558420E+3,0.171E+3,0.141E+3,0.29219000E+1,0.19545000E+1 - ,0.45284900E+3,0.171E+3,0.142E+3,0.29219000E+1,0.19420000E+1 - ,0.50743830E+3,0.171E+3,0.143E+3,0.29219000E+1,0.16682000E+1 - ,0.39493050E+3,0.171E+3,0.144E+3,0.29219000E+1,0.18584000E+1 - ,0.36947180E+3,0.171E+3,0.145E+3,0.29219000E+1,0.19003000E+1 - ,0.34311040E+3,0.171E+3,0.146E+3,0.29219000E+1,0.18630000E+1 - ,0.33190160E+3,0.171E+3,0.147E+3,0.29219000E+1,0.96790000E+0 - ,0.32846280E+3,0.171E+3,0.148E+3,0.29219000E+1,0.19539000E+1 - ,0.52037630E+3,0.171E+3,0.149E+3,0.29219000E+1,0.96330000E+0 - ,0.47110690E+3,0.171E+3,0.150E+3,0.29219000E+1,0.95140000E+0 - ,0.44137250E+3,0.171E+3,0.151E+3,0.29219000E+1,0.97490000E+0 - ,0.41760220E+3,0.171E+3,0.152E+3,0.29219000E+1,0.98110000E+0 - ,0.38146630E+3,0.171E+3,0.153E+3,0.29219000E+1,0.99680000E+0 - ,0.51266580E+3,0.171E+3,0.155E+3,0.29219000E+1,0.99090000E+0 - ,0.10908422E+4,0.171E+3,0.156E+3,0.29219000E+1,0.97970000E+0 - ,0.81591040E+3,0.171E+3,0.157E+3,0.29219000E+1,0.19373000E+1 - ,0.51590750E+3,0.171E+3,0.159E+3,0.29219000E+1,0.29425000E+1 - ,0.50524280E+3,0.171E+3,0.160E+3,0.29219000E+1,0.29455000E+1 - ,0.48924070E+3,0.171E+3,0.161E+3,0.29219000E+1,0.29413000E+1 - ,0.49159590E+3,0.171E+3,0.162E+3,0.29219000E+1,0.29300000E+1 - ,0.47374820E+3,0.171E+3,0.163E+3,0.29219000E+1,0.18286000E+1 - ,0.49470080E+3,0.171E+3,0.164E+3,0.29219000E+1,0.28732000E+1 - ,0.46468280E+3,0.171E+3,0.165E+3,0.29219000E+1,0.29086000E+1 - ,0.47273450E+3,0.171E+3,0.166E+3,0.29219000E+1,0.28965000E+1 - ,0.44109990E+3,0.171E+3,0.167E+3,0.29219000E+1,0.29242000E+1 - ,0.42854250E+3,0.171E+3,0.168E+3,0.29219000E+1,0.29282000E+1 - ,0.42578520E+3,0.171E+3,0.169E+3,0.29219000E+1,0.29246000E+1 - ,0.44751580E+3,0.171E+3,0.170E+3,0.29219000E+1,0.28482000E+1 - ,0.41156650E+3,0.171E+3,0.171E+3,0.29219000E+1,0.29219000E+1 - ,0.45346600E+2,0.172E+3,0.100E+1,0.19254000E+1,0.91180000E+0 - ,0.28998600E+2,0.172E+3,0.200E+1,0.19254000E+1,0.00000000E+0 - ,0.83344750E+3,0.172E+3,0.300E+1,0.19254000E+1,0.00000000E+0 - ,0.44256360E+3,0.172E+3,0.400E+1,0.19254000E+1,0.00000000E+0 - ,0.28628310E+3,0.172E+3,0.500E+1,0.19254000E+1,0.00000000E+0 - ,0.18798820E+3,0.172E+3,0.600E+1,0.19254000E+1,0.00000000E+0 - ,0.12879820E+3,0.172E+3,0.700E+1,0.19254000E+1,0.00000000E+0 - ,0.96142400E+2,0.172E+3,0.800E+1,0.19254000E+1,0.00000000E+0 - ,0.71959700E+2,0.172E+3,0.900E+1,0.19254000E+1,0.00000000E+0 - ,0.54816700E+2,0.172E+3,0.100E+2,0.19254000E+1,0.00000000E+0 - ,0.99134020E+3,0.172E+3,0.110E+2,0.19254000E+1,0.00000000E+0 - ,0.71475720E+3,0.172E+3,0.120E+2,0.19254000E+1,0.00000000E+0 - ,0.64492820E+3,0.172E+3,0.130E+2,0.19254000E+1,0.00000000E+0 - ,0.49384800E+3,0.172E+3,0.140E+2,0.19254000E+1,0.00000000E+0 - ,0.37640650E+3,0.172E+3,0.150E+2,0.19254000E+1,0.00000000E+0 - ,0.30798130E+3,0.172E+3,0.160E+2,0.19254000E+1,0.00000000E+0 - ,0.24821220E+3,0.172E+3,0.170E+2,0.19254000E+1,0.00000000E+0 - ,0.20073430E+3,0.172E+3,0.180E+2,0.19254000E+1,0.00000000E+0 - ,0.16539476E+4,0.172E+3,0.190E+2,0.19254000E+1,0.00000000E+0 - ,0.12894650E+4,0.172E+3,0.200E+2,0.19254000E+1,0.00000000E+0 - ,0.10530789E+4,0.172E+3,0.210E+2,0.19254000E+1,0.00000000E+0 - ,0.10073778E+4,0.172E+3,0.220E+2,0.19254000E+1,0.00000000E+0 - ,0.91714520E+3,0.172E+3,0.230E+2,0.19254000E+1,0.00000000E+0 - ,0.72238490E+3,0.172E+3,0.240E+2,0.19254000E+1,0.00000000E+0 - ,0.78308020E+3,0.172E+3,0.250E+2,0.19254000E+1,0.00000000E+0 - ,0.61378620E+3,0.172E+3,0.260E+2,0.19254000E+1,0.00000000E+0 - ,0.64219290E+3,0.172E+3,0.270E+2,0.19254000E+1,0.00000000E+0 - ,0.66532650E+3,0.172E+3,0.280E+2,0.19254000E+1,0.00000000E+0 - ,0.51028620E+3,0.172E+3,0.290E+2,0.19254000E+1,0.00000000E+0 - ,0.51419020E+3,0.172E+3,0.300E+2,0.19254000E+1,0.00000000E+0 - ,0.61287020E+3,0.172E+3,0.310E+2,0.19254000E+1,0.00000000E+0 - ,0.52847210E+3,0.172E+3,0.320E+2,0.19254000E+1,0.00000000E+0 - ,0.44218700E+3,0.172E+3,0.330E+2,0.19254000E+1,0.00000000E+0 - ,0.39224560E+3,0.172E+3,0.340E+2,0.19254000E+1,0.00000000E+0 - ,0.33928530E+3,0.172E+3,0.350E+2,0.19254000E+1,0.00000000E+0 - ,0.29196450E+3,0.172E+3,0.360E+2,0.19254000E+1,0.00000000E+0 - ,0.18469699E+4,0.172E+3,0.370E+2,0.19254000E+1,0.00000000E+0 - ,0.15403424E+4,0.172E+3,0.380E+2,0.19254000E+1,0.00000000E+0 - ,0.13230311E+4,0.172E+3,0.390E+2,0.19254000E+1,0.00000000E+0 - ,0.11750345E+4,0.172E+3,0.400E+2,0.19254000E+1,0.00000000E+0 - ,0.10634756E+4,0.172E+3,0.410E+2,0.19254000E+1,0.00000000E+0 - ,0.81065520E+3,0.172E+3,0.420E+2,0.19254000E+1,0.00000000E+0 - ,0.90884210E+3,0.172E+3,0.430E+2,0.19254000E+1,0.00000000E+0 - ,0.68268070E+3,0.172E+3,0.440E+2,0.19254000E+1,0.00000000E+0 - ,0.74565500E+3,0.172E+3,0.450E+2,0.19254000E+1,0.00000000E+0 - ,0.68814480E+3,0.172E+3,0.460E+2,0.19254000E+1,0.00000000E+0 - ,0.57595500E+3,0.172E+3,0.470E+2,0.19254000E+1,0.00000000E+0 - ,0.60264510E+3,0.172E+3,0.480E+2,0.19254000E+1,0.00000000E+0 - ,0.76801030E+3,0.172E+3,0.490E+2,0.19254000E+1,0.00000000E+0 - ,0.69681050E+3,0.172E+3,0.500E+2,0.19254000E+1,0.00000000E+0 - ,0.61025270E+3,0.172E+3,0.510E+2,0.19254000E+1,0.00000000E+0 - ,0.56048120E+3,0.172E+3,0.520E+2,0.19254000E+1,0.00000000E+0 - ,0.50136210E+3,0.172E+3,0.530E+2,0.19254000E+1,0.00000000E+0 - ,0.44626410E+3,0.172E+3,0.540E+2,0.19254000E+1,0.00000000E+0 - ,0.22528586E+4,0.172E+3,0.550E+2,0.19254000E+1,0.00000000E+0 - ,0.19789909E+4,0.172E+3,0.560E+2,0.19254000E+1,0.00000000E+0 - ,0.17040270E+4,0.172E+3,0.570E+2,0.19254000E+1,0.00000000E+0 - ,0.72344560E+3,0.172E+3,0.580E+2,0.19254000E+1,0.27991000E+1 - ,0.17420729E+4,0.172E+3,0.590E+2,0.19254000E+1,0.00000000E+0 - ,0.16661615E+4,0.172E+3,0.600E+2,0.19254000E+1,0.00000000E+0 - ,0.16226978E+4,0.172E+3,0.610E+2,0.19254000E+1,0.00000000E+0 - ,0.15829071E+4,0.172E+3,0.620E+2,0.19254000E+1,0.00000000E+0 - ,0.15475750E+4,0.172E+3,0.630E+2,0.19254000E+1,0.00000000E+0 - ,0.11920226E+4,0.172E+3,0.640E+2,0.19254000E+1,0.00000000E+0 - ,0.13894684E+4,0.172E+3,0.650E+2,0.19254000E+1,0.00000000E+0 - ,0.13360613E+4,0.172E+3,0.660E+2,0.19254000E+1,0.00000000E+0 - ,0.13884173E+4,0.172E+3,0.670E+2,0.19254000E+1,0.00000000E+0 - ,0.13581065E+4,0.172E+3,0.680E+2,0.19254000E+1,0.00000000E+0 - ,0.13304473E+4,0.172E+3,0.690E+2,0.19254000E+1,0.00000000E+0 - ,0.13159859E+4,0.172E+3,0.700E+2,0.19254000E+1,0.00000000E+0 - ,0.10939351E+4,0.172E+3,0.710E+2,0.19254000E+1,0.00000000E+0 - ,0.10543108E+4,0.172E+3,0.720E+2,0.19254000E+1,0.00000000E+0 - ,0.95118510E+3,0.172E+3,0.730E+2,0.19254000E+1,0.00000000E+0 - ,0.79676620E+3,0.172E+3,0.740E+2,0.19254000E+1,0.00000000E+0 - ,0.80679990E+3,0.172E+3,0.750E+2,0.19254000E+1,0.00000000E+0 - ,0.72412960E+3,0.172E+3,0.760E+2,0.19254000E+1,0.00000000E+0 - ,0.65806160E+3,0.172E+3,0.770E+2,0.19254000E+1,0.00000000E+0 - ,0.54245470E+3,0.172E+3,0.780E+2,0.19254000E+1,0.00000000E+0 - ,0.50520370E+3,0.172E+3,0.790E+2,0.19254000E+1,0.00000000E+0 - ,0.51767100E+3,0.172E+3,0.800E+2,0.19254000E+1,0.00000000E+0 - ,0.78562040E+3,0.172E+3,0.810E+2,0.19254000E+1,0.00000000E+0 - ,0.75633770E+3,0.172E+3,0.820E+2,0.19254000E+1,0.00000000E+0 - ,0.68397230E+3,0.172E+3,0.830E+2,0.19254000E+1,0.00000000E+0 - ,0.64657460E+3,0.172E+3,0.840E+2,0.19254000E+1,0.00000000E+0 - ,0.59053860E+3,0.172E+3,0.850E+2,0.19254000E+1,0.00000000E+0 - ,0.53625670E+3,0.172E+3,0.860E+2,0.19254000E+1,0.00000000E+0 - ,0.20908542E+4,0.172E+3,0.870E+2,0.19254000E+1,0.00000000E+0 - ,0.19370166E+4,0.172E+3,0.880E+2,0.19254000E+1,0.00000000E+0 - ,0.16804201E+4,0.172E+3,0.890E+2,0.19254000E+1,0.00000000E+0 - ,0.14797956E+4,0.172E+3,0.900E+2,0.19254000E+1,0.00000000E+0 - ,0.14847146E+4,0.172E+3,0.910E+2,0.19254000E+1,0.00000000E+0 - ,0.14366817E+4,0.172E+3,0.920E+2,0.19254000E+1,0.00000000E+0 - ,0.14973302E+4,0.172E+3,0.930E+2,0.19254000E+1,0.00000000E+0 - ,0.14464901E+4,0.172E+3,0.940E+2,0.19254000E+1,0.00000000E+0 - ,0.74629200E+2,0.172E+3,0.101E+3,0.19254000E+1,0.00000000E+0 - ,0.25592080E+3,0.172E+3,0.103E+3,0.19254000E+1,0.98650000E+0 - ,0.32443230E+3,0.172E+3,0.104E+3,0.19254000E+1,0.98080000E+0 - ,0.23897670E+3,0.172E+3,0.105E+3,0.19254000E+1,0.97060000E+0 - ,0.17654080E+3,0.172E+3,0.106E+3,0.19254000E+1,0.98680000E+0 - ,0.12010680E+3,0.172E+3,0.107E+3,0.19254000E+1,0.99440000E+0 - ,0.85937000E+2,0.172E+3,0.108E+3,0.19254000E+1,0.99250000E+0 - ,0.57827200E+2,0.172E+3,0.109E+3,0.19254000E+1,0.99820000E+0 - ,0.37699540E+3,0.172E+3,0.111E+3,0.19254000E+1,0.96840000E+0 - ,0.58570530E+3,0.172E+3,0.112E+3,0.19254000E+1,0.96280000E+0 - ,0.58157180E+3,0.172E+3,0.113E+3,0.19254000E+1,0.96480000E+0 - ,0.45471270E+3,0.172E+3,0.114E+3,0.19254000E+1,0.95070000E+0 - ,0.36512350E+3,0.172E+3,0.115E+3,0.19254000E+1,0.99470000E+0 - ,0.30470560E+3,0.172E+3,0.116E+3,0.19254000E+1,0.99480000E+0 - ,0.24570480E+3,0.172E+3,0.117E+3,0.19254000E+1,0.99720000E+0 - ,0.51281530E+3,0.172E+3,0.119E+3,0.19254000E+1,0.97670000E+0 - ,0.10341456E+4,0.172E+3,0.120E+3,0.19254000E+1,0.98310000E+0 - ,0.50045280E+3,0.172E+3,0.121E+3,0.19254000E+1,0.18627000E+1 - ,0.48316910E+3,0.172E+3,0.122E+3,0.19254000E+1,0.18299000E+1 - ,0.47364140E+3,0.172E+3,0.123E+3,0.19254000E+1,0.19138000E+1 - ,0.47060760E+3,0.172E+3,0.124E+3,0.19254000E+1,0.18269000E+1 - ,0.42699780E+3,0.172E+3,0.125E+3,0.19254000E+1,0.16406000E+1 - ,0.39370530E+3,0.172E+3,0.126E+3,0.19254000E+1,0.16483000E+1 - ,0.37565220E+3,0.172E+3,0.127E+3,0.19254000E+1,0.17149000E+1 - ,0.36764140E+3,0.172E+3,0.128E+3,0.19254000E+1,0.17937000E+1 - ,0.36693480E+3,0.172E+3,0.129E+3,0.19254000E+1,0.95760000E+0 - ,0.33796290E+3,0.172E+3,0.130E+3,0.19254000E+1,0.19419000E+1 - ,0.57232270E+3,0.172E+3,0.131E+3,0.19254000E+1,0.96010000E+0 - ,0.49197380E+3,0.172E+3,0.132E+3,0.19254000E+1,0.94340000E+0 - ,0.43422870E+3,0.172E+3,0.133E+3,0.19254000E+1,0.98890000E+0 - ,0.39247750E+3,0.172E+3,0.134E+3,0.19254000E+1,0.99010000E+0 - ,0.34185570E+3,0.172E+3,0.135E+3,0.19254000E+1,0.99740000E+0 - ,0.60910480E+3,0.172E+3,0.137E+3,0.19254000E+1,0.97380000E+0 - ,0.12632459E+4,0.172E+3,0.138E+3,0.19254000E+1,0.98010000E+0 - ,0.92911650E+3,0.172E+3,0.139E+3,0.19254000E+1,0.19153000E+1 - ,0.66400370E+3,0.172E+3,0.140E+3,0.19254000E+1,0.19355000E+1 - ,0.67040190E+3,0.172E+3,0.141E+3,0.19254000E+1,0.19545000E+1 - ,0.62262030E+3,0.172E+3,0.142E+3,0.19254000E+1,0.19420000E+1 - ,0.71174240E+3,0.172E+3,0.143E+3,0.19254000E+1,0.16682000E+1 - ,0.53554020E+3,0.172E+3,0.144E+3,0.19254000E+1,0.18584000E+1 - ,0.50050420E+3,0.172E+3,0.145E+3,0.19254000E+1,0.19003000E+1 - ,0.46368240E+3,0.172E+3,0.146E+3,0.19254000E+1,0.18630000E+1 - ,0.44930820E+3,0.172E+3,0.147E+3,0.19254000E+1,0.96790000E+0 - ,0.43997740E+3,0.172E+3,0.148E+3,0.19254000E+1,0.19539000E+1 - ,0.72721640E+3,0.172E+3,0.149E+3,0.19254000E+1,0.96330000E+0 - ,0.64540420E+3,0.172E+3,0.150E+3,0.19254000E+1,0.95140000E+0 - ,0.59673110E+3,0.172E+3,0.151E+3,0.19254000E+1,0.97490000E+0 - ,0.55972270E+3,0.172E+3,0.152E+3,0.19254000E+1,0.98110000E+0 - ,0.50615680E+3,0.172E+3,0.153E+3,0.19254000E+1,0.99680000E+0 - ,0.71003790E+3,0.172E+3,0.155E+3,0.19254000E+1,0.99090000E+0 - ,0.16551217E+4,0.172E+3,0.156E+3,0.19254000E+1,0.97970000E+0 - ,0.11811130E+4,0.172E+3,0.157E+3,0.19254000E+1,0.19373000E+1 - ,0.70092550E+3,0.172E+3,0.159E+3,0.19254000E+1,0.29425000E+1 - ,0.68627630E+3,0.172E+3,0.160E+3,0.19254000E+1,0.29455000E+1 - ,0.66395860E+3,0.172E+3,0.161E+3,0.19254000E+1,0.29413000E+1 - ,0.66917280E+3,0.172E+3,0.162E+3,0.19254000E+1,0.29300000E+1 - ,0.65059990E+3,0.172E+3,0.163E+3,0.19254000E+1,0.18286000E+1 - ,0.67380220E+3,0.172E+3,0.164E+3,0.19254000E+1,0.28732000E+1 - ,0.63135970E+3,0.172E+3,0.165E+3,0.19254000E+1,0.29086000E+1 - ,0.64587040E+3,0.172E+3,0.166E+3,0.19254000E+1,0.28965000E+1 - ,0.59787350E+3,0.172E+3,0.167E+3,0.19254000E+1,0.29242000E+1 - ,0.58033350E+3,0.172E+3,0.168E+3,0.19254000E+1,0.29282000E+1 - ,0.57700390E+3,0.172E+3,0.169E+3,0.19254000E+1,0.29246000E+1 - ,0.60871420E+3,0.172E+3,0.170E+3,0.19254000E+1,0.28482000E+1 - ,0.55695720E+3,0.172E+3,0.171E+3,0.19254000E+1,0.29219000E+1 - ,0.78038720E+3,0.172E+3,0.172E+3,0.19254000E+1,0.19254000E+1 - ,0.42599100E+2,0.173E+3,0.100E+1,0.19459000E+1,0.91180000E+0 - ,0.27620800E+2,0.173E+3,0.200E+1,0.19459000E+1,0.00000000E+0 - ,0.73880890E+3,0.173E+3,0.300E+1,0.19459000E+1,0.00000000E+0 - ,0.40322390E+3,0.173E+3,0.400E+1,0.19459000E+1,0.00000000E+0 - ,0.26458080E+3,0.173E+3,0.500E+1,0.19459000E+1,0.00000000E+0 - ,0.17562680E+3,0.173E+3,0.600E+1,0.19459000E+1,0.00000000E+0 - ,0.12132320E+3,0.173E+3,0.700E+1,0.19459000E+1,0.00000000E+0 - ,0.91102500E+2,0.173E+3,0.800E+1,0.19459000E+1,0.00000000E+0 - ,0.68542500E+2,0.173E+3,0.900E+1,0.19459000E+1,0.00000000E+0 - ,0.52435800E+2,0.173E+3,0.100E+2,0.19459000E+1,0.00000000E+0 - ,0.88035320E+3,0.173E+3,0.110E+2,0.19459000E+1,0.00000000E+0 - ,0.64829810E+3,0.173E+3,0.120E+2,0.19459000E+1,0.00000000E+0 - ,0.58923010E+3,0.173E+3,0.130E+2,0.19459000E+1,0.00000000E+0 - ,0.45575650E+3,0.173E+3,0.140E+2,0.19459000E+1,0.00000000E+0 - ,0.35031540E+3,0.173E+3,0.150E+2,0.19459000E+1,0.00000000E+0 - ,0.28821970E+3,0.173E+3,0.160E+2,0.19459000E+1,0.00000000E+0 - ,0.23353600E+3,0.173E+3,0.170E+2,0.19459000E+1,0.00000000E+0 - ,0.18976410E+3,0.173E+3,0.180E+2,0.19459000E+1,0.00000000E+0 - ,0.14604707E+4,0.173E+3,0.190E+2,0.19459000E+1,0.00000000E+0 - ,0.11597504E+4,0.173E+3,0.200E+2,0.19459000E+1,0.00000000E+0 - ,0.95068620E+3,0.173E+3,0.210E+2,0.19459000E+1,0.00000000E+0 - ,0.91232910E+3,0.173E+3,0.220E+2,0.19459000E+1,0.00000000E+0 - ,0.83223310E+3,0.173E+3,0.230E+2,0.19459000E+1,0.00000000E+0 - ,0.65570910E+3,0.173E+3,0.240E+2,0.19459000E+1,0.00000000E+0 - ,0.71259280E+3,0.173E+3,0.250E+2,0.19459000E+1,0.00000000E+0 - ,0.55895410E+3,0.173E+3,0.260E+2,0.19459000E+1,0.00000000E+0 - ,0.58724740E+3,0.173E+3,0.270E+2,0.19459000E+1,0.00000000E+0 - ,0.60719280E+3,0.173E+3,0.280E+2,0.19459000E+1,0.00000000E+0 - ,0.46580690E+3,0.173E+3,0.290E+2,0.19459000E+1,0.00000000E+0 - ,0.47225470E+3,0.173E+3,0.300E+2,0.19459000E+1,0.00000000E+0 - ,0.56160790E+3,0.173E+3,0.310E+2,0.19459000E+1,0.00000000E+0 - ,0.48807900E+3,0.173E+3,0.320E+2,0.19459000E+1,0.00000000E+0 - ,0.41125650E+3,0.173E+3,0.330E+2,0.19459000E+1,0.00000000E+0 - ,0.36640670E+3,0.173E+3,0.340E+2,0.19459000E+1,0.00000000E+0 - ,0.31837520E+3,0.173E+3,0.350E+2,0.19459000E+1,0.00000000E+0 - ,0.27512740E+3,0.173E+3,0.360E+2,0.19459000E+1,0.00000000E+0 - ,0.16328526E+4,0.173E+3,0.370E+2,0.19459000E+1,0.00000000E+0 - ,0.13843496E+4,0.173E+3,0.380E+2,0.19459000E+1,0.00000000E+0 - ,0.11967064E+4,0.173E+3,0.390E+2,0.19459000E+1,0.00000000E+0 - ,0.10670698E+4,0.173E+3,0.400E+2,0.19459000E+1,0.00000000E+0 - ,0.96823440E+3,0.173E+3,0.410E+2,0.19459000E+1,0.00000000E+0 - ,0.74142020E+3,0.173E+3,0.420E+2,0.19459000E+1,0.00000000E+0 - ,0.82976170E+3,0.173E+3,0.430E+2,0.19459000E+1,0.00000000E+0 - ,0.62645270E+3,0.173E+3,0.440E+2,0.19459000E+1,0.00000000E+0 - ,0.68426530E+3,0.173E+3,0.450E+2,0.19459000E+1,0.00000000E+0 - ,0.63255740E+3,0.173E+3,0.460E+2,0.19459000E+1,0.00000000E+0 - ,0.52892880E+3,0.173E+3,0.470E+2,0.19459000E+1,0.00000000E+0 - ,0.55516740E+3,0.173E+3,0.480E+2,0.19459000E+1,0.00000000E+0 - ,0.70365600E+3,0.173E+3,0.490E+2,0.19459000E+1,0.00000000E+0 - ,0.64257250E+3,0.173E+3,0.500E+2,0.19459000E+1,0.00000000E+0 - ,0.56623950E+3,0.173E+3,0.510E+2,0.19459000E+1,0.00000000E+0 - ,0.52199830E+3,0.173E+3,0.520E+2,0.19459000E+1,0.00000000E+0 - ,0.46882570E+3,0.173E+3,0.530E+2,0.19459000E+1,0.00000000E+0 - ,0.41891390E+3,0.173E+3,0.540E+2,0.19459000E+1,0.00000000E+0 - ,0.19906514E+4,0.173E+3,0.550E+2,0.19459000E+1,0.00000000E+0 - ,0.17742433E+4,0.173E+3,0.560E+2,0.19459000E+1,0.00000000E+0 - ,0.15377374E+4,0.173E+3,0.570E+2,0.19459000E+1,0.00000000E+0 - ,0.67054450E+3,0.173E+3,0.580E+2,0.19459000E+1,0.27991000E+1 - ,0.15650227E+4,0.173E+3,0.590E+2,0.19459000E+1,0.00000000E+0 - ,0.14988909E+4,0.173E+3,0.600E+2,0.19459000E+1,0.00000000E+0 - ,0.14602740E+4,0.173E+3,0.610E+2,0.19459000E+1,0.00000000E+0 - ,0.14248668E+4,0.173E+3,0.620E+2,0.19459000E+1,0.00000000E+0 - ,0.13934393E+4,0.173E+3,0.630E+2,0.19459000E+1,0.00000000E+0 - ,0.10807361E+4,0.173E+3,0.640E+2,0.19459000E+1,0.00000000E+0 - ,0.12454654E+4,0.173E+3,0.650E+2,0.19459000E+1,0.00000000E+0 - ,0.11985562E+4,0.173E+3,0.660E+2,0.19459000E+1,0.00000000E+0 - ,0.12522798E+4,0.173E+3,0.670E+2,0.19459000E+1,0.00000000E+0 - ,0.12251780E+4,0.173E+3,0.680E+2,0.19459000E+1,0.00000000E+0 - ,0.12005428E+4,0.173E+3,0.690E+2,0.19459000E+1,0.00000000E+0 - ,0.11871547E+4,0.173E+3,0.700E+2,0.19459000E+1,0.00000000E+0 - ,0.99115750E+3,0.173E+3,0.710E+2,0.19459000E+1,0.00000000E+0 - ,0.96178800E+3,0.173E+3,0.720E+2,0.19459000E+1,0.00000000E+0 - ,0.87115170E+3,0.173E+3,0.730E+2,0.19459000E+1,0.00000000E+0 - ,0.73191440E+3,0.173E+3,0.740E+2,0.19459000E+1,0.00000000E+0 - ,0.74227510E+3,0.173E+3,0.750E+2,0.19459000E+1,0.00000000E+0 - ,0.66851880E+3,0.173E+3,0.760E+2,0.19459000E+1,0.00000000E+0 - ,0.60921920E+3,0.173E+3,0.770E+2,0.19459000E+1,0.00000000E+0 - ,0.50370150E+3,0.173E+3,0.780E+2,0.19459000E+1,0.00000000E+0 - ,0.46968660E+3,0.173E+3,0.790E+2,0.19459000E+1,0.00000000E+0 - ,0.48188500E+3,0.173E+3,0.800E+2,0.19459000E+1,0.00000000E+0 - ,0.72091450E+3,0.173E+3,0.810E+2,0.19459000E+1,0.00000000E+0 - ,0.69765140E+3,0.173E+3,0.820E+2,0.19459000E+1,0.00000000E+0 - ,0.63443450E+3,0.173E+3,0.830E+2,0.19459000E+1,0.00000000E+0 - ,0.60166450E+3,0.173E+3,0.840E+2,0.19459000E+1,0.00000000E+0 - ,0.55163790E+3,0.173E+3,0.850E+2,0.19459000E+1,0.00000000E+0 - ,0.50269970E+3,0.173E+3,0.860E+2,0.19459000E+1,0.00000000E+0 - ,0.18580508E+4,0.173E+3,0.870E+2,0.19459000E+1,0.00000000E+0 - ,0.17424506E+4,0.173E+3,0.880E+2,0.19459000E+1,0.00000000E+0 - ,0.15208103E+4,0.173E+3,0.890E+2,0.19459000E+1,0.00000000E+0 - ,0.13484147E+4,0.173E+3,0.900E+2,0.19459000E+1,0.00000000E+0 - ,0.13482588E+4,0.173E+3,0.910E+2,0.19459000E+1,0.00000000E+0 - ,0.13049404E+4,0.173E+3,0.920E+2,0.19459000E+1,0.00000000E+0 - ,0.13545615E+4,0.173E+3,0.930E+2,0.19459000E+1,0.00000000E+0 - ,0.13096099E+4,0.173E+3,0.940E+2,0.19459000E+1,0.00000000E+0 - ,0.69517200E+2,0.173E+3,0.101E+3,0.19459000E+1,0.00000000E+0 - ,0.23360750E+3,0.173E+3,0.103E+3,0.19459000E+1,0.98650000E+0 - ,0.29681730E+3,0.173E+3,0.104E+3,0.19459000E+1,0.98080000E+0 - ,0.22150850E+3,0.173E+3,0.105E+3,0.19459000E+1,0.97060000E+0 - ,0.16489220E+3,0.173E+3,0.106E+3,0.19459000E+1,0.98680000E+0 - ,0.11316000E+3,0.173E+3,0.107E+3,0.19459000E+1,0.99440000E+0 - ,0.81561000E+2,0.173E+3,0.108E+3,0.19459000E+1,0.99250000E+0 - ,0.55390500E+2,0.173E+3,0.109E+3,0.19459000E+1,0.99820000E+0 - ,0.34328010E+3,0.173E+3,0.111E+3,0.19459000E+1,0.96840000E+0 - ,0.53247660E+3,0.173E+3,0.112E+3,0.19459000E+1,0.96280000E+0 - ,0.53228640E+3,0.173E+3,0.113E+3,0.19459000E+1,0.96480000E+0 - ,0.42023260E+3,0.173E+3,0.114E+3,0.19459000E+1,0.95070000E+0 - ,0.33991220E+3,0.173E+3,0.115E+3,0.19459000E+1,0.99470000E+0 - ,0.28511970E+3,0.173E+3,0.116E+3,0.19459000E+1,0.99480000E+0 - ,0.23115710E+3,0.173E+3,0.117E+3,0.19459000E+1,0.99720000E+0 - ,0.46941050E+3,0.173E+3,0.119E+3,0.19459000E+1,0.97670000E+0 - ,0.92943790E+3,0.173E+3,0.120E+3,0.19459000E+1,0.98310000E+0 - ,0.46193760E+3,0.173E+3,0.121E+3,0.19459000E+1,0.18627000E+1 - ,0.44595790E+3,0.173E+3,0.122E+3,0.19459000E+1,0.18299000E+1 - ,0.43713970E+3,0.173E+3,0.123E+3,0.19459000E+1,0.19138000E+1 - ,0.43391220E+3,0.173E+3,0.124E+3,0.19459000E+1,0.18269000E+1 - ,0.39561160E+3,0.173E+3,0.125E+3,0.19459000E+1,0.16406000E+1 - ,0.36527420E+3,0.173E+3,0.126E+3,0.19459000E+1,0.16483000E+1 - ,0.34851570E+3,0.173E+3,0.127E+3,0.19459000E+1,0.17149000E+1 - ,0.34095800E+3,0.173E+3,0.128E+3,0.19459000E+1,0.17937000E+1 - ,0.33910500E+3,0.173E+3,0.129E+3,0.19459000E+1,0.95760000E+0 - ,0.31436170E+3,0.173E+3,0.130E+3,0.19459000E+1,0.19419000E+1 - ,0.52550400E+3,0.173E+3,0.131E+3,0.19459000E+1,0.96010000E+0 - ,0.45518330E+3,0.173E+3,0.132E+3,0.19459000E+1,0.94340000E+0 - ,0.40401890E+3,0.173E+3,0.133E+3,0.19459000E+1,0.98890000E+0 - ,0.36659830E+3,0.173E+3,0.134E+3,0.19459000E+1,0.99010000E+0 - ,0.32071300E+3,0.173E+3,0.135E+3,0.19459000E+1,0.99740000E+0 - ,0.55849190E+3,0.173E+3,0.137E+3,0.19459000E+1,0.97380000E+0 - ,0.11339963E+4,0.173E+3,0.138E+3,0.19459000E+1,0.98010000E+0 - ,0.84472340E+3,0.173E+3,0.139E+3,0.19459000E+1,0.19153000E+1 - ,0.61231920E+3,0.173E+3,0.140E+3,0.19459000E+1,0.19355000E+1 - ,0.61833280E+3,0.173E+3,0.141E+3,0.19459000E+1,0.19545000E+1 - ,0.57504470E+3,0.173E+3,0.142E+3,0.19459000E+1,0.19420000E+1 - ,0.65304060E+3,0.173E+3,0.143E+3,0.19459000E+1,0.16682000E+1 - ,0.49697040E+3,0.173E+3,0.144E+3,0.19459000E+1,0.18584000E+1 - ,0.46466380E+3,0.173E+3,0.145E+3,0.19459000E+1,0.19003000E+1 - ,0.43087120E+3,0.173E+3,0.146E+3,0.19459000E+1,0.18630000E+1 - ,0.41726470E+3,0.173E+3,0.147E+3,0.19459000E+1,0.96790000E+0 - ,0.41002790E+3,0.173E+3,0.148E+3,0.19459000E+1,0.19539000E+1 - ,0.66780870E+3,0.173E+3,0.149E+3,0.19459000E+1,0.96330000E+0 - ,0.59661500E+3,0.173E+3,0.150E+3,0.19459000E+1,0.95140000E+0 - ,0.55414990E+3,0.173E+3,0.151E+3,0.19459000E+1,0.97490000E+0 - ,0.52141070E+3,0.173E+3,0.152E+3,0.19459000E+1,0.98110000E+0 - ,0.47327510E+3,0.173E+3,0.153E+3,0.19459000E+1,0.99680000E+0 - ,0.65424880E+3,0.173E+3,0.155E+3,0.19459000E+1,0.99090000E+0 - ,0.14806088E+4,0.173E+3,0.156E+3,0.19459000E+1,0.97970000E+0 - ,0.10722142E+4,0.173E+3,0.157E+3,0.19459000E+1,0.19373000E+1 - ,0.64990970E+3,0.173E+3,0.159E+3,0.19459000E+1,0.29425000E+1 - ,0.63638010E+3,0.173E+3,0.160E+3,0.19459000E+1,0.29455000E+1 - ,0.61587840E+3,0.173E+3,0.161E+3,0.19459000E+1,0.29413000E+1 - ,0.62006220E+3,0.173E+3,0.162E+3,0.19459000E+1,0.29300000E+1 - ,0.60108450E+3,0.173E+3,0.163E+3,0.19459000E+1,0.18286000E+1 - ,0.62420110E+3,0.173E+3,0.164E+3,0.19459000E+1,0.28732000E+1 - ,0.58539210E+3,0.173E+3,0.165E+3,0.19459000E+1,0.29086000E+1 - ,0.59771440E+3,0.173E+3,0.166E+3,0.19459000E+1,0.28965000E+1 - ,0.55479820E+3,0.173E+3,0.167E+3,0.19459000E+1,0.29242000E+1 - ,0.53868740E+3,0.173E+3,0.168E+3,0.19459000E+1,0.29282000E+1 - ,0.53545990E+3,0.173E+3,0.169E+3,0.19459000E+1,0.29246000E+1 - ,0.56410720E+3,0.173E+3,0.170E+3,0.19459000E+1,0.28482000E+1 - ,0.51709820E+3,0.173E+3,0.171E+3,0.19459000E+1,0.29219000E+1 - ,0.71609920E+3,0.173E+3,0.172E+3,0.19459000E+1,0.19254000E+1 - ,0.65975010E+3,0.173E+3,0.173E+3,0.19459000E+1,0.19459000E+1 - ,0.39353000E+2,0.174E+3,0.100E+1,0.19292000E+1,0.91180000E+0 - ,0.25891600E+2,0.174E+3,0.200E+1,0.19292000E+1,0.00000000E+0 - ,0.64222390E+3,0.174E+3,0.300E+1,0.19292000E+1,0.00000000E+0 - ,0.36075580E+3,0.174E+3,0.400E+1,0.19292000E+1,0.00000000E+0 - ,0.24029820E+3,0.174E+3,0.500E+1,0.19292000E+1,0.00000000E+0 - ,0.16132870E+3,0.174E+3,0.600E+1,0.19292000E+1,0.00000000E+0 - ,0.11241380E+3,0.174E+3,0.700E+1,0.19292000E+1,0.00000000E+0 - ,0.84942800E+2,0.174E+3,0.800E+1,0.19292000E+1,0.00000000E+0 - ,0.64260400E+2,0.174E+3,0.900E+1,0.19292000E+1,0.00000000E+0 - ,0.49383000E+2,0.174E+3,0.100E+2,0.19292000E+1,0.00000000E+0 - ,0.76674770E+3,0.174E+3,0.110E+2,0.19292000E+1,0.00000000E+0 - ,0.57730020E+3,0.174E+3,0.120E+2,0.19292000E+1,0.00000000E+0 - ,0.52875590E+3,0.174E+3,0.130E+2,0.19292000E+1,0.00000000E+0 - ,0.41330440E+3,0.174E+3,0.140E+2,0.19292000E+1,0.00000000E+0 - ,0.32049320E+3,0.174E+3,0.150E+2,0.19292000E+1,0.00000000E+0 - ,0.26521130E+3,0.174E+3,0.160E+2,0.19292000E+1,0.00000000E+0 - ,0.21610340E+3,0.174E+3,0.170E+2,0.19292000E+1,0.00000000E+0 - ,0.17647630E+3,0.174E+3,0.180E+2,0.19292000E+1,0.00000000E+0 - ,0.12652105E+4,0.174E+3,0.190E+2,0.19292000E+1,0.00000000E+0 - ,0.10237513E+4,0.174E+3,0.200E+2,0.19292000E+1,0.00000000E+0 - ,0.84249870E+3,0.174E+3,0.210E+2,0.19292000E+1,0.00000000E+0 - ,0.81128040E+3,0.174E+3,0.220E+2,0.19292000E+1,0.00000000E+0 - ,0.74159550E+3,0.174E+3,0.230E+2,0.19292000E+1,0.00000000E+0 - ,0.58457670E+3,0.174E+3,0.240E+2,0.19292000E+1,0.00000000E+0 - ,0.63689720E+3,0.174E+3,0.250E+2,0.19292000E+1,0.00000000E+0 - ,0.50004450E+3,0.174E+3,0.260E+2,0.19292000E+1,0.00000000E+0 - ,0.52755830E+3,0.174E+3,0.270E+2,0.19292000E+1,0.00000000E+0 - ,0.54433150E+3,0.174E+3,0.280E+2,0.19292000E+1,0.00000000E+0 - ,0.41776790E+3,0.174E+3,0.290E+2,0.19292000E+1,0.00000000E+0 - ,0.42620470E+3,0.174E+3,0.300E+2,0.19292000E+1,0.00000000E+0 - ,0.50560850E+3,0.174E+3,0.310E+2,0.19292000E+1,0.00000000E+0 - ,0.44299990E+3,0.174E+3,0.320E+2,0.19292000E+1,0.00000000E+0 - ,0.37599840E+3,0.174E+3,0.330E+2,0.19292000E+1,0.00000000E+0 - ,0.33652400E+3,0.174E+3,0.340E+2,0.19292000E+1,0.00000000E+0 - ,0.29379580E+3,0.174E+3,0.350E+2,0.19292000E+1,0.00000000E+0 - ,0.25500680E+3,0.174E+3,0.360E+2,0.19292000E+1,0.00000000E+0 - ,0.14165256E+4,0.174E+3,0.370E+2,0.19292000E+1,0.00000000E+0 - ,0.12211434E+4,0.174E+3,0.380E+2,0.19292000E+1,0.00000000E+0 - ,0.10628100E+4,0.174E+3,0.390E+2,0.19292000E+1,0.00000000E+0 - ,0.95167080E+3,0.174E+3,0.400E+2,0.19292000E+1,0.00000000E+0 - ,0.86588950E+3,0.174E+3,0.410E+2,0.19292000E+1,0.00000000E+0 - ,0.66629380E+3,0.174E+3,0.420E+2,0.19292000E+1,0.00000000E+0 - ,0.74429510E+3,0.174E+3,0.430E+2,0.19292000E+1,0.00000000E+0 - ,0.56498080E+3,0.174E+3,0.440E+2,0.19292000E+1,0.00000000E+0 - ,0.61707470E+3,0.174E+3,0.450E+2,0.19292000E+1,0.00000000E+0 - ,0.57145890E+3,0.174E+3,0.460E+2,0.19292000E+1,0.00000000E+0 - ,0.47746470E+3,0.174E+3,0.470E+2,0.19292000E+1,0.00000000E+0 - ,0.50269480E+3,0.174E+3,0.480E+2,0.19292000E+1,0.00000000E+0 - ,0.63350610E+3,0.174E+3,0.490E+2,0.19292000E+1,0.00000000E+0 - ,0.58238420E+3,0.174E+3,0.500E+2,0.19292000E+1,0.00000000E+0 - ,0.51649490E+3,0.174E+3,0.510E+2,0.19292000E+1,0.00000000E+0 - ,0.47798250E+3,0.174E+3,0.520E+2,0.19292000E+1,0.00000000E+0 - ,0.43109430E+3,0.174E+3,0.530E+2,0.19292000E+1,0.00000000E+0 - ,0.38674400E+3,0.174E+3,0.540E+2,0.19292000E+1,0.00000000E+0 - ,0.17264733E+4,0.174E+3,0.550E+2,0.19292000E+1,0.00000000E+0 - ,0.15612112E+4,0.174E+3,0.560E+2,0.19292000E+1,0.00000000E+0 - ,0.13624276E+4,0.174E+3,0.570E+2,0.19292000E+1,0.00000000E+0 - ,0.61099070E+3,0.174E+3,0.580E+2,0.19292000E+1,0.27991000E+1 - ,0.13802768E+4,0.174E+3,0.590E+2,0.19292000E+1,0.00000000E+0 - ,0.13236943E+4,0.174E+3,0.600E+2,0.19292000E+1,0.00000000E+0 - ,0.12900298E+4,0.174E+3,0.610E+2,0.19292000E+1,0.00000000E+0 - ,0.12591135E+4,0.174E+3,0.620E+2,0.19292000E+1,0.00000000E+0 - ,0.12316839E+4,0.174E+3,0.630E+2,0.19292000E+1,0.00000000E+0 - ,0.96239750E+3,0.174E+3,0.640E+2,0.19292000E+1,0.00000000E+0 - ,0.10962341E+4,0.174E+3,0.650E+2,0.19292000E+1,0.00000000E+0 - ,0.10560748E+4,0.174E+3,0.660E+2,0.19292000E+1,0.00000000E+0 - ,0.11088832E+4,0.174E+3,0.670E+2,0.19292000E+1,0.00000000E+0 - ,0.10850974E+4,0.174E+3,0.680E+2,0.19292000E+1,0.00000000E+0 - ,0.10635675E+4,0.174E+3,0.690E+2,0.19292000E+1,0.00000000E+0 - ,0.10513822E+4,0.174E+3,0.700E+2,0.19292000E+1,0.00000000E+0 - ,0.88206880E+3,0.174E+3,0.710E+2,0.19292000E+1,0.00000000E+0 - ,0.86187340E+3,0.174E+3,0.720E+2,0.19292000E+1,0.00000000E+0 - ,0.78390750E+3,0.174E+3,0.730E+2,0.19292000E+1,0.00000000E+0 - ,0.66076360E+3,0.174E+3,0.740E+2,0.19292000E+1,0.00000000E+0 - ,0.67117640E+3,0.174E+3,0.750E+2,0.19292000E+1,0.00000000E+0 - ,0.60666990E+3,0.174E+3,0.760E+2,0.19292000E+1,0.00000000E+0 - ,0.55447220E+3,0.174E+3,0.770E+2,0.19292000E+1,0.00000000E+0 - ,0.45992100E+3,0.174E+3,0.780E+2,0.19292000E+1,0.00000000E+0 - ,0.42942760E+3,0.174E+3,0.790E+2,0.19292000E+1,0.00000000E+0 - ,0.44112500E+3,0.174E+3,0.800E+2,0.19292000E+1,0.00000000E+0 - ,0.65021480E+3,0.174E+3,0.810E+2,0.19292000E+1,0.00000000E+0 - ,0.63255270E+3,0.174E+3,0.820E+2,0.19292000E+1,0.00000000E+0 - ,0.57855330E+3,0.174E+3,0.830E+2,0.19292000E+1,0.00000000E+0 - ,0.55048090E+3,0.174E+3,0.840E+2,0.19292000E+1,0.00000000E+0 - ,0.50671990E+3,0.174E+3,0.850E+2,0.19292000E+1,0.00000000E+0 - ,0.46345510E+3,0.174E+3,0.860E+2,0.19292000E+1,0.00000000E+0 - ,0.16209287E+4,0.174E+3,0.870E+2,0.19292000E+1,0.00000000E+0 - ,0.15387012E+4,0.174E+3,0.880E+2,0.19292000E+1,0.00000000E+0 - ,0.13515716E+4,0.174E+3,0.890E+2,0.19292000E+1,0.00000000E+0 - ,0.12069993E+4,0.174E+3,0.900E+2,0.19292000E+1,0.00000000E+0 - ,0.12026346E+4,0.174E+3,0.910E+2,0.19292000E+1,0.00000000E+0 - ,0.11642737E+4,0.174E+3,0.920E+2,0.19292000E+1,0.00000000E+0 - ,0.12034096E+4,0.174E+3,0.930E+2,0.19292000E+1,0.00000000E+0 - ,0.11644393E+4,0.174E+3,0.940E+2,0.19292000E+1,0.00000000E+0 - ,0.63655000E+2,0.174E+3,0.101E+3,0.19292000E+1,0.00000000E+0 - ,0.20943010E+3,0.174E+3,0.103E+3,0.19292000E+1,0.98650000E+0 - ,0.26676230E+3,0.174E+3,0.104E+3,0.19292000E+1,0.98080000E+0 - ,0.20180580E+3,0.174E+3,0.105E+3,0.19292000E+1,0.97060000E+0 - ,0.15143990E+3,0.174E+3,0.106E+3,0.19292000E+1,0.98680000E+0 - ,0.10487960E+3,0.174E+3,0.107E+3,0.19292000E+1,0.99440000E+0 - ,0.76174700E+2,0.174E+3,0.108E+3,0.19292000E+1,0.99250000E+0 - ,0.52233500E+2,0.174E+3,0.109E+3,0.19292000E+1,0.99820000E+0 - ,0.30698940E+3,0.174E+3,0.111E+3,0.19292000E+1,0.96840000E+0 - ,0.47538840E+3,0.174E+3,0.112E+3,0.19292000E+1,0.96280000E+0 - ,0.47855460E+3,0.174E+3,0.113E+3,0.19292000E+1,0.96480000E+0 - ,0.38166000E+3,0.174E+3,0.114E+3,0.19292000E+1,0.95070000E+0 - ,0.31107370E+3,0.174E+3,0.115E+3,0.19292000E+1,0.99470000E+0 - ,0.26232930E+3,0.174E+3,0.116E+3,0.19292000E+1,0.99480000E+0 - ,0.21388550E+3,0.174E+3,0.117E+3,0.19292000E+1,0.99720000E+0 - ,0.42224100E+3,0.174E+3,0.119E+3,0.19292000E+1,0.97670000E+0 - ,0.82019820E+3,0.174E+3,0.120E+3,0.19292000E+1,0.98310000E+0 - ,0.41903830E+3,0.174E+3,0.121E+3,0.19292000E+1,0.18627000E+1 - ,0.40459180E+3,0.174E+3,0.122E+3,0.19292000E+1,0.18299000E+1 - ,0.39656360E+3,0.174E+3,0.123E+3,0.19292000E+1,0.19138000E+1 - ,0.39324210E+3,0.174E+3,0.124E+3,0.19292000E+1,0.18269000E+1 - ,0.36030430E+3,0.174E+3,0.125E+3,0.19292000E+1,0.16406000E+1 - ,0.33316370E+3,0.174E+3,0.126E+3,0.19292000E+1,0.16483000E+1 - ,0.31788470E+3,0.174E+3,0.127E+3,0.19292000E+1,0.17149000E+1 - ,0.31087480E+3,0.174E+3,0.128E+3,0.19292000E+1,0.17937000E+1 - ,0.30807170E+3,0.174E+3,0.129E+3,0.19292000E+1,0.95760000E+0 - ,0.28748760E+3,0.174E+3,0.130E+3,0.19292000E+1,0.19419000E+1 - ,0.47409680E+3,0.174E+3,0.131E+3,0.19292000E+1,0.96010000E+0 - ,0.41391720E+3,0.174E+3,0.132E+3,0.19292000E+1,0.94340000E+0 - ,0.36953950E+3,0.174E+3,0.133E+3,0.19292000E+1,0.98890000E+0 - ,0.33667770E+3,0.174E+3,0.134E+3,0.19292000E+1,0.99010000E+0 - ,0.29588320E+3,0.174E+3,0.135E+3,0.19292000E+1,0.99740000E+0 - ,0.50328860E+3,0.174E+3,0.137E+3,0.19292000E+1,0.97380000E+0 - ,0.99960180E+3,0.174E+3,0.138E+3,0.19292000E+1,0.98010000E+0 - ,0.75469660E+3,0.174E+3,0.139E+3,0.19292000E+1,0.19153000E+1 - ,0.55497370E+3,0.174E+3,0.140E+3,0.19292000E+1,0.19355000E+1 - ,0.56047340E+3,0.174E+3,0.141E+3,0.19292000E+1,0.19545000E+1 - ,0.52208970E+3,0.174E+3,0.142E+3,0.19292000E+1,0.19420000E+1 - ,0.58893300E+3,0.174E+3,0.143E+3,0.19292000E+1,0.16682000E+1 - ,0.45342630E+3,0.174E+3,0.144E+3,0.19292000E+1,0.18584000E+1 - ,0.42417090E+3,0.174E+3,0.145E+3,0.19292000E+1,0.19003000E+1 - ,0.39371240E+3,0.174E+3,0.146E+3,0.19292000E+1,0.18630000E+1 - ,0.38104950E+3,0.174E+3,0.147E+3,0.19292000E+1,0.96790000E+0 - ,0.37575480E+3,0.174E+3,0.148E+3,0.19292000E+1,0.19539000E+1 - ,0.60266490E+3,0.174E+3,0.149E+3,0.19292000E+1,0.96330000E+0 - ,0.54210550E+3,0.174E+3,0.150E+3,0.19292000E+1,0.95140000E+0 - ,0.50590030E+3,0.174E+3,0.151E+3,0.19292000E+1,0.97490000E+0 - ,0.47755630E+3,0.174E+3,0.152E+3,0.19292000E+1,0.98110000E+0 - ,0.43515150E+3,0.174E+3,0.153E+3,0.19292000E+1,0.99680000E+0 - ,0.59256180E+3,0.174E+3,0.155E+3,0.19292000E+1,0.99090000E+0 - ,0.13007753E+4,0.174E+3,0.156E+3,0.19292000E+1,0.97970000E+0 - ,0.95659970E+3,0.174E+3,0.157E+3,0.19292000E+1,0.19373000E+1 - ,0.59241900E+3,0.174E+3,0.159E+3,0.19292000E+1,0.29425000E+1 - ,0.58013530E+3,0.174E+3,0.160E+3,0.19292000E+1,0.29455000E+1 - ,0.56163190E+3,0.174E+3,0.161E+3,0.19292000E+1,0.29413000E+1 - ,0.56485240E+3,0.174E+3,0.162E+3,0.19292000E+1,0.29300000E+1 - ,0.54591020E+3,0.174E+3,0.163E+3,0.19292000E+1,0.18286000E+1 - ,0.56845330E+3,0.174E+3,0.164E+3,0.19292000E+1,0.28732000E+1 - ,0.53359460E+3,0.174E+3,0.165E+3,0.19292000E+1,0.29086000E+1 - ,0.54379510E+3,0.174E+3,0.166E+3,0.19292000E+1,0.28965000E+1 - ,0.50613240E+3,0.174E+3,0.167E+3,0.19292000E+1,0.29242000E+1 - ,0.49159050E+3,0.174E+3,0.168E+3,0.19292000E+1,0.29282000E+1 - ,0.48851540E+3,0.174E+3,0.169E+3,0.19292000E+1,0.29246000E+1 - ,0.51389840E+3,0.174E+3,0.170E+3,0.19292000E+1,0.28482000E+1 - ,0.47198590E+3,0.174E+3,0.171E+3,0.19292000E+1,0.29219000E+1 - ,0.64582280E+3,0.174E+3,0.172E+3,0.19292000E+1,0.19254000E+1 - ,0.59747460E+3,0.174E+3,0.173E+3,0.19292000E+1,0.19459000E+1 - ,0.54340360E+3,0.174E+3,0.174E+3,0.19292000E+1,0.19292000E+1 - ,0.39390200E+2,0.175E+3,0.100E+1,0.18104000E+1,0.91180000E+0 - ,0.25661400E+2,0.175E+3,0.200E+1,0.18104000E+1,0.00000000E+0 - ,0.67790210E+3,0.175E+3,0.300E+1,0.18104000E+1,0.00000000E+0 - ,0.37113480E+3,0.175E+3,0.400E+1,0.18104000E+1,0.00000000E+0 - ,0.24394890E+3,0.175E+3,0.500E+1,0.18104000E+1,0.00000000E+0 - ,0.16225790E+3,0.175E+3,0.600E+1,0.18104000E+1,0.00000000E+0 - ,0.11232650E+3,0.175E+3,0.700E+1,0.18104000E+1,0.00000000E+0 - ,0.84509400E+2,0.175E+3,0.800E+1,0.18104000E+1,0.00000000E+0 - ,0.63709900E+2,0.175E+3,0.900E+1,0.18104000E+1,0.00000000E+0 - ,0.48832900E+2,0.175E+3,0.100E+2,0.18104000E+1,0.00000000E+0 - ,0.80810000E+3,0.175E+3,0.110E+2,0.18104000E+1,0.00000000E+0 - ,0.59653470E+3,0.175E+3,0.120E+2,0.18104000E+1,0.00000000E+0 - ,0.54254110E+3,0.175E+3,0.130E+2,0.18104000E+1,0.00000000E+0 - ,0.42013030E+3,0.175E+3,0.140E+2,0.18104000E+1,0.00000000E+0 - ,0.32333970E+3,0.175E+3,0.150E+2,0.18104000E+1,0.00000000E+0 - ,0.26632530E+3,0.175E+3,0.160E+2,0.18104000E+1,0.00000000E+0 - ,0.21607690E+3,0.175E+3,0.170E+2,0.18104000E+1,0.00000000E+0 - ,0.17582140E+3,0.175E+3,0.180E+2,0.18104000E+1,0.00000000E+0 - ,0.13393807E+4,0.175E+3,0.190E+2,0.18104000E+1,0.00000000E+0 - ,0.10664078E+4,0.175E+3,0.200E+2,0.18104000E+1,0.00000000E+0 - ,0.87454390E+3,0.175E+3,0.210E+2,0.18104000E+1,0.00000000E+0 - ,0.83959150E+3,0.175E+3,0.220E+2,0.18104000E+1,0.00000000E+0 - ,0.76607010E+3,0.175E+3,0.230E+2,0.18104000E+1,0.00000000E+0 - ,0.60376280E+3,0.175E+3,0.240E+2,0.18104000E+1,0.00000000E+0 - ,0.65618380E+3,0.175E+3,0.250E+2,0.18104000E+1,0.00000000E+0 - ,0.51491990E+3,0.175E+3,0.260E+2,0.18104000E+1,0.00000000E+0 - ,0.54109810E+3,0.175E+3,0.270E+2,0.18104000E+1,0.00000000E+0 - ,0.55933980E+3,0.175E+3,0.280E+2,0.18104000E+1,0.00000000E+0 - ,0.42928690E+3,0.175E+3,0.290E+2,0.18104000E+1,0.00000000E+0 - ,0.43539440E+3,0.175E+3,0.300E+2,0.18104000E+1,0.00000000E+0 - ,0.51743050E+3,0.175E+3,0.310E+2,0.18104000E+1,0.00000000E+0 - ,0.45007850E+3,0.175E+3,0.320E+2,0.18104000E+1,0.00000000E+0 - ,0.37961010E+3,0.175E+3,0.330E+2,0.18104000E+1,0.00000000E+0 - ,0.33848080E+3,0.175E+3,0.340E+2,0.18104000E+1,0.00000000E+0 - ,0.29439730E+3,0.175E+3,0.350E+2,0.18104000E+1,0.00000000E+0 - ,0.25467830E+3,0.175E+3,0.360E+2,0.18104000E+1,0.00000000E+0 - ,0.14977174E+4,0.175E+3,0.370E+2,0.18104000E+1,0.00000000E+0 - ,0.12728662E+4,0.175E+3,0.380E+2,0.18104000E+1,0.00000000E+0 - ,0.11011436E+4,0.175E+3,0.390E+2,0.18104000E+1,0.00000000E+0 - ,0.98233900E+3,0.175E+3,0.400E+2,0.18104000E+1,0.00000000E+0 - ,0.89165750E+3,0.175E+3,0.410E+2,0.18104000E+1,0.00000000E+0 - ,0.68333990E+3,0.175E+3,0.420E+2,0.18104000E+1,0.00000000E+0 - ,0.76450150E+3,0.175E+3,0.430E+2,0.18104000E+1,0.00000000E+0 - ,0.57773560E+3,0.175E+3,0.440E+2,0.18104000E+1,0.00000000E+0 - ,0.63093880E+3,0.175E+3,0.450E+2,0.18104000E+1,0.00000000E+0 - ,0.58342570E+3,0.175E+3,0.460E+2,0.18104000E+1,0.00000000E+0 - ,0.48800010E+3,0.175E+3,0.470E+2,0.18104000E+1,0.00000000E+0 - ,0.51225330E+3,0.175E+3,0.480E+2,0.18104000E+1,0.00000000E+0 - ,0.64862950E+3,0.175E+3,0.490E+2,0.18104000E+1,0.00000000E+0 - ,0.59271140E+3,0.175E+3,0.500E+2,0.18104000E+1,0.00000000E+0 - ,0.52269700E+3,0.175E+3,0.510E+2,0.18104000E+1,0.00000000E+0 - ,0.48212230E+3,0.175E+3,0.520E+2,0.18104000E+1,0.00000000E+0 - ,0.43331830E+3,0.175E+3,0.530E+2,0.18104000E+1,0.00000000E+0 - ,0.38749410E+3,0.175E+3,0.540E+2,0.18104000E+1,0.00000000E+0 - ,0.18253618E+4,0.175E+3,0.550E+2,0.18104000E+1,0.00000000E+0 - ,0.16308213E+4,0.175E+3,0.560E+2,0.18104000E+1,0.00000000E+0 - ,0.14145400E+4,0.175E+3,0.570E+2,0.18104000E+1,0.00000000E+0 - ,0.61899030E+3,0.175E+3,0.580E+2,0.18104000E+1,0.27991000E+1 - ,0.14389986E+4,0.175E+3,0.590E+2,0.18104000E+1,0.00000000E+0 - ,0.13785166E+4,0.175E+3,0.600E+2,0.18104000E+1,0.00000000E+0 - ,0.13430628E+4,0.175E+3,0.610E+2,0.18104000E+1,0.00000000E+0 - ,0.13105457E+4,0.175E+3,0.620E+2,0.18104000E+1,0.00000000E+0 - ,0.12816825E+4,0.175E+3,0.630E+2,0.18104000E+1,0.00000000E+0 - ,0.99495010E+3,0.175E+3,0.640E+2,0.18104000E+1,0.00000000E+0 - ,0.11448282E+4,0.175E+3,0.650E+2,0.18104000E+1,0.00000000E+0 - ,0.11017061E+4,0.175E+3,0.660E+2,0.18104000E+1,0.00000000E+0 - ,0.11520955E+4,0.175E+3,0.670E+2,0.18104000E+1,0.00000000E+0 - ,0.11271846E+4,0.175E+3,0.680E+2,0.18104000E+1,0.00000000E+0 - ,0.11045493E+4,0.175E+3,0.690E+2,0.18104000E+1,0.00000000E+0 - ,0.10921865E+4,0.175E+3,0.700E+2,0.18104000E+1,0.00000000E+0 - ,0.91229470E+3,0.175E+3,0.710E+2,0.18104000E+1,0.00000000E+0 - ,0.88587570E+3,0.175E+3,0.720E+2,0.18104000E+1,0.00000000E+0 - ,0.80282330E+3,0.175E+3,0.730E+2,0.18104000E+1,0.00000000E+0 - ,0.67490990E+3,0.175E+3,0.740E+2,0.18104000E+1,0.00000000E+0 - ,0.68456550E+3,0.175E+3,0.750E+2,0.18104000E+1,0.00000000E+0 - ,0.61687960E+3,0.175E+3,0.760E+2,0.18104000E+1,0.00000000E+0 - ,0.56243030E+3,0.175E+3,0.770E+2,0.18104000E+1,0.00000000E+0 - ,0.46538980E+3,0.175E+3,0.780E+2,0.18104000E+1,0.00000000E+0 - ,0.43411300E+3,0.175E+3,0.790E+2,0.18104000E+1,0.00000000E+0 - ,0.44539470E+3,0.175E+3,0.800E+2,0.18104000E+1,0.00000000E+0 - ,0.66487270E+3,0.175E+3,0.810E+2,0.18104000E+1,0.00000000E+0 - ,0.64374060E+3,0.175E+3,0.820E+2,0.18104000E+1,0.00000000E+0 - ,0.58578780E+3,0.175E+3,0.830E+2,0.18104000E+1,0.00000000E+0 - ,0.55576230E+3,0.175E+3,0.840E+2,0.18104000E+1,0.00000000E+0 - ,0.50986150E+3,0.175E+3,0.850E+2,0.18104000E+1,0.00000000E+0 - ,0.46493840E+3,0.175E+3,0.860E+2,0.18104000E+1,0.00000000E+0 - ,0.17053318E+4,0.175E+3,0.870E+2,0.18104000E+1,0.00000000E+0 - ,0.16022866E+4,0.175E+3,0.880E+2,0.18104000E+1,0.00000000E+0 - ,0.13995346E+4,0.175E+3,0.890E+2,0.18104000E+1,0.00000000E+0 - ,0.12420205E+4,0.175E+3,0.900E+2,0.18104000E+1,0.00000000E+0 - ,0.12414957E+4,0.175E+3,0.910E+2,0.18104000E+1,0.00000000E+0 - ,0.12016927E+4,0.175E+3,0.920E+2,0.18104000E+1,0.00000000E+0 - ,0.12468949E+4,0.175E+3,0.930E+2,0.18104000E+1,0.00000000E+0 - ,0.12056353E+4,0.175E+3,0.940E+2,0.18104000E+1,0.00000000E+0 - ,0.64164300E+2,0.175E+3,0.101E+3,0.18104000E+1,0.00000000E+0 - ,0.21507820E+3,0.175E+3,0.103E+3,0.18104000E+1,0.98650000E+0 - ,0.27332730E+3,0.175E+3,0.104E+3,0.18104000E+1,0.98080000E+0 - ,0.20434870E+3,0.175E+3,0.105E+3,0.18104000E+1,0.97060000E+0 - ,0.15235770E+3,0.175E+3,0.106E+3,0.18104000E+1,0.98680000E+0 - ,0.10479180E+3,0.175E+3,0.107E+3,0.18104000E+1,0.99440000E+0 - ,0.75702000E+2,0.175E+3,0.108E+3,0.18104000E+1,0.99250000E+0 - ,0.51588100E+2,0.175E+3,0.109E+3,0.18104000E+1,0.99820000E+0 - ,0.31607860E+3,0.175E+3,0.111E+3,0.18104000E+1,0.96840000E+0 - ,0.49005630E+3,0.175E+3,0.112E+3,0.18104000E+1,0.96280000E+0 - ,0.49022120E+3,0.175E+3,0.113E+3,0.18104000E+1,0.96480000E+0 - ,0.38746930E+3,0.175E+3,0.114E+3,0.18104000E+1,0.95070000E+0 - ,0.31376610E+3,0.175E+3,0.115E+3,0.18104000E+1,0.99470000E+0 - ,0.26346580E+3,0.175E+3,0.116E+3,0.18104000E+1,0.99480000E+0 - ,0.21388020E+3,0.175E+3,0.117E+3,0.18104000E+1,0.99720000E+0 - ,0.43270980E+3,0.175E+3,0.119E+3,0.18104000E+1,0.97670000E+0 - ,0.85443090E+3,0.175E+3,0.120E+3,0.18104000E+1,0.98310000E+0 - ,0.42613390E+3,0.175E+3,0.121E+3,0.18104000E+1,0.18627000E+1 - ,0.41139560E+3,0.175E+3,0.122E+3,0.18104000E+1,0.18299000E+1 - ,0.40328980E+3,0.175E+3,0.123E+3,0.18104000E+1,0.19138000E+1 - ,0.40028790E+3,0.175E+3,0.124E+3,0.18104000E+1,0.18269000E+1 - ,0.36513690E+3,0.175E+3,0.125E+3,0.18104000E+1,0.16406000E+1 - ,0.33722470E+3,0.175E+3,0.126E+3,0.18104000E+1,0.16483000E+1 - ,0.32177920E+3,0.175E+3,0.127E+3,0.18104000E+1,0.17149000E+1 - ,0.31479940E+3,0.175E+3,0.128E+3,0.18104000E+1,0.17937000E+1 - ,0.31300420E+3,0.175E+3,0.129E+3,0.18104000E+1,0.95760000E+0 - ,0.29033450E+3,0.175E+3,0.130E+3,0.18104000E+1,0.19419000E+1 - ,0.48428840E+3,0.175E+3,0.131E+3,0.18104000E+1,0.96010000E+0 - ,0.41985020E+3,0.175E+3,0.132E+3,0.18104000E+1,0.94340000E+0 - ,0.37295910E+3,0.175E+3,0.133E+3,0.18104000E+1,0.98890000E+0 - ,0.33865860E+3,0.175E+3,0.134E+3,0.18104000E+1,0.99010000E+0 - ,0.29654870E+3,0.175E+3,0.135E+3,0.18104000E+1,0.99740000E+0 - ,0.51497470E+3,0.175E+3,0.137E+3,0.18104000E+1,0.97380000E+0 - ,0.10423341E+4,0.175E+3,0.138E+3,0.18104000E+1,0.98010000E+0 - ,0.77762370E+3,0.175E+3,0.139E+3,0.18104000E+1,0.19153000E+1 - ,0.56481820E+3,0.175E+3,0.140E+3,0.18104000E+1,0.19355000E+1 - ,0.57045940E+3,0.175E+3,0.141E+3,0.18104000E+1,0.19545000E+1 - ,0.53064150E+3,0.175E+3,0.142E+3,0.18104000E+1,0.19420000E+1 - ,0.60213570E+3,0.175E+3,0.143E+3,0.18104000E+1,0.16682000E+1 - ,0.45894910E+3,0.175E+3,0.144E+3,0.18104000E+1,0.18584000E+1 - ,0.42920470E+3,0.175E+3,0.145E+3,0.18104000E+1,0.19003000E+1 - ,0.39810440E+3,0.175E+3,0.146E+3,0.18104000E+1,0.18630000E+1 - ,0.38554200E+3,0.175E+3,0.147E+3,0.18104000E+1,0.96790000E+0 - ,0.37894250E+3,0.175E+3,0.148E+3,0.18104000E+1,0.19539000E+1 - ,0.61575540E+3,0.175E+3,0.149E+3,0.18104000E+1,0.96330000E+0 - ,0.55049820E+3,0.175E+3,0.150E+3,0.18104000E+1,0.95140000E+0 - ,0.51159560E+3,0.175E+3,0.151E+3,0.18104000E+1,0.97490000E+0 - ,0.48159190E+3,0.175E+3,0.152E+3,0.18104000E+1,0.98110000E+0 - ,0.43741870E+3,0.175E+3,0.153E+3,0.18104000E+1,0.99680000E+0 - ,0.60346930E+3,0.175E+3,0.155E+3,0.18104000E+1,0.99090000E+0 - ,0.13601123E+4,0.175E+3,0.156E+3,0.18104000E+1,0.97970000E+0 - ,0.98679870E+3,0.175E+3,0.157E+3,0.18104000E+1,0.19373000E+1 - ,0.59998280E+3,0.175E+3,0.159E+3,0.18104000E+1,0.29425000E+1 - ,0.58750600E+3,0.175E+3,0.160E+3,0.18104000E+1,0.29455000E+1 - ,0.56861140E+3,0.175E+3,0.161E+3,0.18104000E+1,0.29413000E+1 - ,0.57238360E+3,0.175E+3,0.162E+3,0.18104000E+1,0.29300000E+1 - ,0.55475530E+3,0.175E+3,0.163E+3,0.18104000E+1,0.18286000E+1 - ,0.57615700E+3,0.175E+3,0.164E+3,0.18104000E+1,0.28732000E+1 - ,0.54043300E+3,0.175E+3,0.165E+3,0.18104000E+1,0.29086000E+1 - ,0.55166610E+3,0.175E+3,0.166E+3,0.18104000E+1,0.28965000E+1 - ,0.51223480E+3,0.175E+3,0.167E+3,0.18104000E+1,0.29242000E+1 - ,0.49737970E+3,0.175E+3,0.168E+3,0.18104000E+1,0.29282000E+1 - ,0.49437500E+3,0.175E+3,0.169E+3,0.18104000E+1,0.29246000E+1 - ,0.52066780E+3,0.175E+3,0.170E+3,0.18104000E+1,0.28482000E+1 - ,0.47743820E+3,0.175E+3,0.171E+3,0.18104000E+1,0.29219000E+1 - ,0.66008460E+3,0.175E+3,0.172E+3,0.18104000E+1,0.19254000E+1 - ,0.60852880E+3,0.175E+3,0.173E+3,0.18104000E+1,0.19459000E+1 - ,0.55146290E+3,0.175E+3,0.174E+3,0.18104000E+1,0.19292000E+1 - ,0.56143380E+3,0.175E+3,0.175E+3,0.18104000E+1,0.18104000E+1 - ,0.35464600E+2,0.176E+3,0.100E+1,0.18858000E+1,0.91180000E+0 - ,0.23812500E+2,0.176E+3,0.200E+1,0.18858000E+1,0.00000000E+0 - ,0.53066030E+3,0.176E+3,0.300E+1,0.18858000E+1,0.00000000E+0 - ,0.31052240E+3,0.176E+3,0.400E+1,0.18858000E+1,0.00000000E+0 - ,0.21141050E+3,0.176E+3,0.500E+1,0.18858000E+1,0.00000000E+0 - ,0.14424940E+3,0.176E+3,0.600E+1,0.18858000E+1,0.00000000E+0 - ,0.10174200E+3,0.176E+3,0.700E+1,0.18858000E+1,0.00000000E+0 - ,0.77553600E+2,0.176E+3,0.800E+1,0.18858000E+1,0.00000000E+0 - ,0.59120400E+2,0.176E+3,0.900E+1,0.18858000E+1,0.00000000E+0 - ,0.45720500E+2,0.176E+3,0.100E+2,0.18858000E+1,0.00000000E+0 - ,0.63530720E+3,0.176E+3,0.110E+2,0.18858000E+1,0.00000000E+0 - ,0.49355920E+3,0.176E+3,0.120E+2,0.18858000E+1,0.00000000E+0 - ,0.45721240E+3,0.176E+3,0.130E+2,0.18858000E+1,0.00000000E+0 - ,0.36283630E+3,0.176E+3,0.140E+2,0.18858000E+1,0.00000000E+0 - ,0.28491700E+3,0.176E+3,0.150E+2,0.18858000E+1,0.00000000E+0 - ,0.23770450E+3,0.176E+3,0.160E+2,0.18858000E+1,0.00000000E+0 - ,0.19521900E+3,0.176E+3,0.170E+2,0.18858000E+1,0.00000000E+0 - ,0.16053010E+3,0.176E+3,0.180E+2,0.18858000E+1,0.00000000E+0 - ,0.10420654E+4,0.176E+3,0.190E+2,0.18858000E+1,0.00000000E+0 - ,0.86452710E+3,0.176E+3,0.200E+2,0.18858000E+1,0.00000000E+0 - ,0.71543320E+3,0.176E+3,0.210E+2,0.18858000E+1,0.00000000E+0 - ,0.69243390E+3,0.176E+3,0.220E+2,0.18858000E+1,0.00000000E+0 - ,0.63488380E+3,0.176E+3,0.230E+2,0.18858000E+1,0.00000000E+0 - ,0.50093670E+3,0.176E+3,0.240E+2,0.18858000E+1,0.00000000E+0 - ,0.54765220E+3,0.176E+3,0.250E+2,0.18858000E+1,0.00000000E+0 - ,0.43064570E+3,0.176E+3,0.260E+2,0.18858000E+1,0.00000000E+0 - ,0.45696500E+3,0.176E+3,0.270E+2,0.18858000E+1,0.00000000E+0 - ,0.47005570E+3,0.176E+3,0.280E+2,0.18858000E+1,0.00000000E+0 - ,0.36110090E+3,0.176E+3,0.290E+2,0.18858000E+1,0.00000000E+0 - ,0.37162530E+3,0.176E+3,0.300E+2,0.18858000E+1,0.00000000E+0 - ,0.43932630E+3,0.176E+3,0.310E+2,0.18858000E+1,0.00000000E+0 - ,0.38941390E+3,0.176E+3,0.320E+2,0.18858000E+1,0.00000000E+0 - ,0.33396020E+3,0.176E+3,0.330E+2,0.18858000E+1,0.00000000E+0 - ,0.30083180E+3,0.176E+3,0.340E+2,0.18858000E+1,0.00000000E+0 - ,0.26438450E+3,0.176E+3,0.350E+2,0.18858000E+1,0.00000000E+0 - ,0.23089140E+3,0.176E+3,0.360E+2,0.18858000E+1,0.00000000E+0 - ,0.11693798E+4,0.176E+3,0.370E+2,0.18858000E+1,0.00000000E+0 - ,0.10303644E+4,0.176E+3,0.380E+2,0.18858000E+1,0.00000000E+0 - ,0.90555540E+3,0.176E+3,0.390E+2,0.18858000E+1,0.00000000E+0 - ,0.81580510E+3,0.176E+3,0.400E+2,0.18858000E+1,0.00000000E+0 - ,0.74526460E+3,0.176E+3,0.410E+2,0.18858000E+1,0.00000000E+0 - ,0.57758390E+3,0.176E+3,0.420E+2,0.18858000E+1,0.00000000E+0 - ,0.64348640E+3,0.176E+3,0.430E+2,0.18858000E+1,0.00000000E+0 - ,0.49230820E+3,0.176E+3,0.440E+2,0.18858000E+1,0.00000000E+0 - ,0.53754740E+3,0.176E+3,0.450E+2,0.18858000E+1,0.00000000E+0 - ,0.49907810E+3,0.176E+3,0.460E+2,0.18858000E+1,0.00000000E+0 - ,0.41664440E+3,0.176E+3,0.470E+2,0.18858000E+1,0.00000000E+0 - ,0.44047370E+3,0.176E+3,0.480E+2,0.18858000E+1,0.00000000E+0 - ,0.55060050E+3,0.176E+3,0.490E+2,0.18858000E+1,0.00000000E+0 - ,0.51094940E+3,0.176E+3,0.500E+2,0.18858000E+1,0.00000000E+0 - ,0.45728590E+3,0.176E+3,0.510E+2,0.18858000E+1,0.00000000E+0 - ,0.42551160E+3,0.176E+3,0.520E+2,0.18858000E+1,0.00000000E+0 - ,0.38604100E+3,0.176E+3,0.530E+2,0.18858000E+1,0.00000000E+0 - ,0.34827200E+3,0.176E+3,0.540E+2,0.18858000E+1,0.00000000E+0 - ,0.14257528E+4,0.176E+3,0.550E+2,0.18858000E+1,0.00000000E+0 - ,0.13130562E+4,0.176E+3,0.560E+2,0.18858000E+1,0.00000000E+0 - ,0.11570873E+4,0.176E+3,0.570E+2,0.18858000E+1,0.00000000E+0 - ,0.54014830E+3,0.176E+3,0.580E+2,0.18858000E+1,0.27991000E+1 - ,0.11649532E+4,0.176E+3,0.590E+2,0.18858000E+1,0.00000000E+0 - ,0.11189840E+4,0.176E+3,0.600E+2,0.18858000E+1,0.00000000E+0 - ,0.10910275E+4,0.176E+3,0.610E+2,0.18858000E+1,0.00000000E+0 - ,0.10652955E+4,0.176E+3,0.620E+2,0.18858000E+1,0.00000000E+0 - ,0.10424806E+4,0.176E+3,0.630E+2,0.18858000E+1,0.00000000E+0 - ,0.82351360E+3,0.176E+3,0.640E+2,0.18858000E+1,0.00000000E+0 - ,0.92339310E+3,0.176E+3,0.650E+2,0.18858000E+1,0.00000000E+0 - ,0.89129600E+3,0.176E+3,0.660E+2,0.18858000E+1,0.00000000E+0 - ,0.94085810E+3,0.176E+3,0.670E+2,0.18858000E+1,0.00000000E+0 - ,0.92091700E+3,0.176E+3,0.680E+2,0.18858000E+1,0.00000000E+0 - ,0.90298170E+3,0.176E+3,0.690E+2,0.18858000E+1,0.00000000E+0 - ,0.89222740E+3,0.176E+3,0.700E+2,0.18858000E+1,0.00000000E+0 - ,0.75415480E+3,0.176E+3,0.710E+2,0.18858000E+1,0.00000000E+0 - ,0.74392130E+3,0.176E+3,0.720E+2,0.18858000E+1,0.00000000E+0 - ,0.68068180E+3,0.176E+3,0.730E+2,0.18858000E+1,0.00000000E+0 - ,0.57655350E+3,0.176E+3,0.740E+2,0.18858000E+1,0.00000000E+0 - ,0.58693470E+3,0.176E+3,0.750E+2,0.18858000E+1,0.00000000E+0 - ,0.53325550E+3,0.176E+3,0.760E+2,0.18858000E+1,0.00000000E+0 - ,0.48940580E+3,0.176E+3,0.770E+2,0.18858000E+1,0.00000000E+0 - ,0.40785710E+3,0.176E+3,0.780E+2,0.18858000E+1,0.00000000E+0 - ,0.38154050E+3,0.176E+3,0.790E+2,0.18858000E+1,0.00000000E+0 - ,0.39259340E+3,0.176E+3,0.800E+2,0.18858000E+1,0.00000000E+0 - ,0.56672940E+3,0.176E+3,0.810E+2,0.18858000E+1,0.00000000E+0 - ,0.55534130E+3,0.176E+3,0.820E+2,0.18858000E+1,0.00000000E+0 - ,0.51207880E+3,0.176E+3,0.830E+2,0.18858000E+1,0.00000000E+0 - ,0.48950850E+3,0.176E+3,0.840E+2,0.18858000E+1,0.00000000E+0 - ,0.45312570E+3,0.176E+3,0.850E+2,0.18858000E+1,0.00000000E+0 - ,0.41656370E+3,0.176E+3,0.860E+2,0.18858000E+1,0.00000000E+0 - ,0.13491716E+4,0.176E+3,0.870E+2,0.18858000E+1,0.00000000E+0 - ,0.13007391E+4,0.176E+3,0.880E+2,0.18858000E+1,0.00000000E+0 - ,0.11529664E+4,0.176E+3,0.890E+2,0.18858000E+1,0.00000000E+0 - ,0.10402935E+4,0.176E+3,0.900E+2,0.18858000E+1,0.00000000E+0 - ,0.10315219E+4,0.176E+3,0.910E+2,0.18858000E+1,0.00000000E+0 - ,0.99893380E+3,0.176E+3,0.920E+2,0.18858000E+1,0.00000000E+0 - ,0.10261425E+4,0.176E+3,0.930E+2,0.18858000E+1,0.00000000E+0 - ,0.99407460E+3,0.176E+3,0.940E+2,0.18858000E+1,0.00000000E+0 - ,0.56656700E+2,0.176E+3,0.101E+3,0.18858000E+1,0.00000000E+0 - ,0.18083220E+3,0.176E+3,0.103E+3,0.18858000E+1,0.98650000E+0 - ,0.23124090E+3,0.176E+3,0.104E+3,0.18858000E+1,0.98080000E+0 - ,0.17834690E+3,0.176E+3,0.105E+3,0.18858000E+1,0.97060000E+0 - ,0.13537830E+3,0.176E+3,0.106E+3,0.18858000E+1,0.98680000E+0 - ,0.94961200E+2,0.176E+3,0.107E+3,0.18858000E+1,0.99440000E+0 - ,0.69708000E+2,0.176E+3,0.108E+3,0.18858000E+1,0.99250000E+0 - ,0.48438300E+2,0.176E+3,0.109E+3,0.18858000E+1,0.99820000E+0 - ,0.26414790E+3,0.176E+3,0.111E+3,0.18858000E+1,0.96840000E+0 - ,0.40811310E+3,0.176E+3,0.112E+3,0.18858000E+1,0.96280000E+0 - ,0.41494650E+3,0.176E+3,0.113E+3,0.18858000E+1,0.96480000E+0 - ,0.33578860E+3,0.176E+3,0.114E+3,0.18858000E+1,0.95070000E+0 - ,0.27667050E+3,0.176E+3,0.115E+3,0.18858000E+1,0.99470000E+0 - ,0.23508600E+3,0.176E+3,0.116E+3,0.18858000E+1,0.99480000E+0 - ,0.19319560E+3,0.176E+3,0.117E+3,0.18858000E+1,0.99720000E+0 - ,0.36655110E+3,0.176E+3,0.119E+3,0.18858000E+1,0.97670000E+0 - ,0.69317420E+3,0.176E+3,0.120E+3,0.18858000E+1,0.98310000E+0 - ,0.36802850E+3,0.176E+3,0.121E+3,0.18858000E+1,0.18627000E+1 - ,0.35552300E+3,0.176E+3,0.122E+3,0.18858000E+1,0.18299000E+1 - ,0.34841720E+3,0.176E+3,0.123E+3,0.18858000E+1,0.19138000E+1 - ,0.34501650E+3,0.176E+3,0.124E+3,0.18858000E+1,0.18269000E+1 - ,0.31830430E+3,0.176E+3,0.125E+3,0.18858000E+1,0.16406000E+1 - ,0.29495420E+3,0.176E+3,0.126E+3,0.18858000E+1,0.16483000E+1 - ,0.28145410E+3,0.176E+3,0.127E+3,0.18858000E+1,0.17149000E+1 - ,0.27510220E+3,0.176E+3,0.128E+3,0.18858000E+1,0.17937000E+1 - ,0.27123140E+3,0.176E+3,0.129E+3,0.18858000E+1,0.95760000E+0 - ,0.25547700E+3,0.176E+3,0.130E+3,0.18858000E+1,0.19419000E+1 - ,0.41318390E+3,0.176E+3,0.131E+3,0.18858000E+1,0.96010000E+0 - ,0.36483360E+3,0.176E+3,0.132E+3,0.18858000E+1,0.94340000E+0 - ,0.32842530E+3,0.176E+3,0.133E+3,0.18858000E+1,0.98890000E+0 - ,0.30094220E+3,0.176E+3,0.134E+3,0.18858000E+1,0.99010000E+0 - ,0.26617570E+3,0.176E+3,0.135E+3,0.18858000E+1,0.99740000E+0 - ,0.43809620E+3,0.176E+3,0.137E+3,0.18858000E+1,0.97380000E+0 - ,0.84371770E+3,0.176E+3,0.138E+3,0.18858000E+1,0.98010000E+0 - ,0.64942160E+3,0.176E+3,0.139E+3,0.18858000E+1,0.19153000E+1 - ,0.48694320E+3,0.176E+3,0.140E+3,0.18858000E+1,0.19355000E+1 - ,0.49170440E+3,0.176E+3,0.141E+3,0.18858000E+1,0.19545000E+1 - ,0.45926500E+3,0.176E+3,0.142E+3,0.18858000E+1,0.19420000E+1 - ,0.51329930E+3,0.176E+3,0.143E+3,0.18858000E+1,0.16682000E+1 - ,0.40162410E+3,0.176E+3,0.144E+3,0.18858000E+1,0.18584000E+1 - ,0.37601550E+3,0.176E+3,0.145E+3,0.18858000E+1,0.19003000E+1 - ,0.34951790E+3,0.176E+3,0.146E+3,0.18858000E+1,0.18630000E+1 - ,0.33798580E+3,0.176E+3,0.147E+3,0.18858000E+1,0.96790000E+0 - ,0.33491410E+3,0.176E+3,0.148E+3,0.18858000E+1,0.19539000E+1 - ,0.52556660E+3,0.176E+3,0.149E+3,0.18858000E+1,0.96330000E+0 - ,0.47735010E+3,0.176E+3,0.150E+3,0.18858000E+1,0.95140000E+0 - ,0.44845320E+3,0.176E+3,0.151E+3,0.18858000E+1,0.97490000E+0 - ,0.42527250E+3,0.176E+3,0.152E+3,0.18858000E+1,0.98110000E+0 - ,0.38963030E+3,0.176E+3,0.153E+3,0.18858000E+1,0.99680000E+0 - ,0.51948750E+3,0.176E+3,0.155E+3,0.18858000E+1,0.99090000E+0 - ,0.10935492E+4,0.176E+3,0.156E+3,0.18858000E+1,0.97970000E+0 - ,0.82179670E+3,0.176E+3,0.157E+3,0.18858000E+1,0.19373000E+1 - ,0.52402380E+3,0.176E+3,0.159E+3,0.18858000E+1,0.29425000E+1 - ,0.51321590E+3,0.176E+3,0.160E+3,0.18858000E+1,0.29455000E+1 - ,0.49708550E+3,0.176E+3,0.161E+3,0.18858000E+1,0.29413000E+1 - ,0.49923160E+3,0.176E+3,0.162E+3,0.18858000E+1,0.29300000E+1 - ,0.48040280E+3,0.176E+3,0.163E+3,0.18858000E+1,0.18286000E+1 - ,0.50216590E+3,0.176E+3,0.164E+3,0.18858000E+1,0.28732000E+1 - ,0.47197170E+3,0.176E+3,0.165E+3,0.18858000E+1,0.29086000E+1 - ,0.47976830E+3,0.176E+3,0.166E+3,0.18858000E+1,0.28965000E+1 - ,0.44820990E+3,0.176E+3,0.167E+3,0.18858000E+1,0.29242000E+1 - ,0.43552800E+3,0.176E+3,0.168E+3,0.18858000E+1,0.29282000E+1 - ,0.43264200E+3,0.176E+3,0.169E+3,0.18858000E+1,0.29246000E+1 - ,0.45417000E+3,0.176E+3,0.170E+3,0.18858000E+1,0.28482000E+1 - ,0.41827710E+3,0.176E+3,0.171E+3,0.18858000E+1,0.29219000E+1 - ,0.56287830E+3,0.176E+3,0.172E+3,0.18858000E+1,0.19254000E+1 - ,0.52375380E+3,0.176E+3,0.173E+3,0.18858000E+1,0.19459000E+1 - ,0.47921590E+3,0.176E+3,0.174E+3,0.18858000E+1,0.19292000E+1 - ,0.48386730E+3,0.176E+3,0.175E+3,0.18858000E+1,0.18104000E+1 - ,0.42619030E+3,0.176E+3,0.176E+3,0.18858000E+1,0.18858000E+1 - ,0.33511700E+2,0.177E+3,0.100E+1,0.18648000E+1,0.91180000E+0 - ,0.22677900E+2,0.177E+3,0.200E+1,0.18648000E+1,0.00000000E+0 - ,0.49147210E+3,0.177E+3,0.300E+1,0.18648000E+1,0.00000000E+0 - ,0.28982980E+3,0.177E+3,0.400E+1,0.18648000E+1,0.00000000E+0 - ,0.19838070E+3,0.177E+3,0.500E+1,0.18648000E+1,0.00000000E+0 - ,0.13600690E+3,0.177E+3,0.600E+1,0.18648000E+1,0.00000000E+0 - ,0.96324300E+2,0.177E+3,0.700E+1,0.18648000E+1,0.00000000E+0 - ,0.73663400E+2,0.177E+3,0.800E+1,0.18648000E+1,0.00000000E+0 - ,0.56326800E+2,0.177E+3,0.900E+1,0.18648000E+1,0.00000000E+0 - ,0.43677300E+2,0.177E+3,0.100E+2,0.18648000E+1,0.00000000E+0 - ,0.58883180E+3,0.177E+3,0.110E+2,0.18648000E+1,0.00000000E+0 - ,0.46010610E+3,0.177E+3,0.120E+2,0.18648000E+1,0.00000000E+0 - ,0.42726470E+3,0.177E+3,0.130E+2,0.18648000E+1,0.00000000E+0 - ,0.34027370E+3,0.177E+3,0.140E+2,0.18648000E+1,0.00000000E+0 - ,0.26810830E+3,0.177E+3,0.150E+2,0.18648000E+1,0.00000000E+0 - ,0.22424930E+3,0.177E+3,0.160E+2,0.18648000E+1,0.00000000E+0 - ,0.18465170E+3,0.177E+3,0.170E+2,0.18648000E+1,0.00000000E+0 - ,0.15222030E+3,0.177E+3,0.180E+2,0.18648000E+1,0.00000000E+0 - ,0.96506260E+3,0.177E+3,0.190E+2,0.18648000E+1,0.00000000E+0 - ,0.80438060E+3,0.177E+3,0.200E+2,0.18648000E+1,0.00000000E+0 - ,0.66634240E+3,0.177E+3,0.210E+2,0.18648000E+1,0.00000000E+0 - ,0.64567380E+3,0.177E+3,0.220E+2,0.18648000E+1,0.00000000E+0 - ,0.59240830E+3,0.177E+3,0.230E+2,0.18648000E+1,0.00000000E+0 - ,0.46775860E+3,0.177E+3,0.240E+2,0.18648000E+1,0.00000000E+0 - ,0.51152360E+3,0.177E+3,0.250E+2,0.18648000E+1,0.00000000E+0 - ,0.40259270E+3,0.177E+3,0.260E+2,0.18648000E+1,0.00000000E+0 - ,0.42750640E+3,0.177E+3,0.270E+2,0.18648000E+1,0.00000000E+0 - ,0.43943760E+3,0.177E+3,0.280E+2,0.18648000E+1,0.00000000E+0 - ,0.33788310E+3,0.177E+3,0.290E+2,0.18648000E+1,0.00000000E+0 - ,0.34820520E+3,0.177E+3,0.300E+2,0.18648000E+1,0.00000000E+0 - ,0.41118360E+3,0.177E+3,0.310E+2,0.18648000E+1,0.00000000E+0 - ,0.36542010E+3,0.177E+3,0.320E+2,0.18648000E+1,0.00000000E+0 - ,0.31422920E+3,0.177E+3,0.330E+2,0.18648000E+1,0.00000000E+0 - ,0.28359750E+3,0.177E+3,0.340E+2,0.18648000E+1,0.00000000E+0 - ,0.24976170E+3,0.177E+3,0.350E+2,0.18648000E+1,0.00000000E+0 - ,0.21857530E+3,0.177E+3,0.360E+2,0.18648000E+1,0.00000000E+0 - ,0.10836129E+4,0.177E+3,0.370E+2,0.18648000E+1,0.00000000E+0 - ,0.95871100E+3,0.177E+3,0.380E+2,0.18648000E+1,0.00000000E+0 - ,0.84420740E+3,0.177E+3,0.390E+2,0.18648000E+1,0.00000000E+0 - ,0.76153710E+3,0.177E+3,0.400E+2,0.18648000E+1,0.00000000E+0 - ,0.69635620E+3,0.177E+3,0.410E+2,0.18648000E+1,0.00000000E+0 - ,0.54076150E+3,0.177E+3,0.420E+2,0.18648000E+1,0.00000000E+0 - ,0.60199360E+3,0.177E+3,0.430E+2,0.18648000E+1,0.00000000E+0 - ,0.46158650E+3,0.177E+3,0.440E+2,0.18648000E+1,0.00000000E+0 - ,0.50378310E+3,0.177E+3,0.450E+2,0.18648000E+1,0.00000000E+0 - ,0.46803160E+3,0.177E+3,0.460E+2,0.18648000E+1,0.00000000E+0 - ,0.39092010E+3,0.177E+3,0.470E+2,0.18648000E+1,0.00000000E+0 - ,0.41343530E+3,0.177E+3,0.480E+2,0.18648000E+1,0.00000000E+0 - ,0.51570310E+3,0.177E+3,0.490E+2,0.18648000E+1,0.00000000E+0 - ,0.47948370E+3,0.177E+3,0.500E+2,0.18648000E+1,0.00000000E+0 - ,0.43006080E+3,0.177E+3,0.510E+2,0.18648000E+1,0.00000000E+0 - ,0.40076390E+3,0.177E+3,0.520E+2,0.18648000E+1,0.00000000E+0 - ,0.36420700E+3,0.177E+3,0.530E+2,0.18648000E+1,0.00000000E+0 - ,0.32914390E+3,0.177E+3,0.540E+2,0.18648000E+1,0.00000000E+0 - ,0.13211273E+4,0.177E+3,0.550E+2,0.18648000E+1,0.00000000E+0 - ,0.12211564E+4,0.177E+3,0.560E+2,0.18648000E+1,0.00000000E+0 - ,0.10781412E+4,0.177E+3,0.570E+2,0.18648000E+1,0.00000000E+0 - ,0.50792020E+3,0.177E+3,0.580E+2,0.18648000E+1,0.27991000E+1 - ,0.10842087E+4,0.177E+3,0.590E+2,0.18648000E+1,0.00000000E+0 - ,0.10418248E+4,0.177E+3,0.600E+2,0.18648000E+1,0.00000000E+0 - ,0.10158802E+4,0.177E+3,0.610E+2,0.18648000E+1,0.00000000E+0 - ,0.99198570E+3,0.177E+3,0.620E+2,0.18648000E+1,0.00000000E+0 - ,0.97080130E+3,0.177E+3,0.630E+2,0.18648000E+1,0.00000000E+0 - ,0.76877680E+3,0.177E+3,0.640E+2,0.18648000E+1,0.00000000E+0 - ,0.85938870E+3,0.177E+3,0.650E+2,0.18648000E+1,0.00000000E+0 - ,0.82970230E+3,0.177E+3,0.660E+2,0.18648000E+1,0.00000000E+0 - ,0.87655810E+3,0.177E+3,0.670E+2,0.18648000E+1,0.00000000E+0 - ,0.85800850E+3,0.177E+3,0.680E+2,0.18648000E+1,0.00000000E+0 - ,0.84134750E+3,0.177E+3,0.690E+2,0.18648000E+1,0.00000000E+0 - ,0.83123230E+3,0.177E+3,0.700E+2,0.18648000E+1,0.00000000E+0 - ,0.70368220E+3,0.177E+3,0.710E+2,0.18648000E+1,0.00000000E+0 - ,0.69544610E+3,0.177E+3,0.720E+2,0.18648000E+1,0.00000000E+0 - ,0.63722330E+3,0.177E+3,0.730E+2,0.18648000E+1,0.00000000E+0 - ,0.54056670E+3,0.177E+3,0.740E+2,0.18648000E+1,0.00000000E+0 - ,0.55051890E+3,0.177E+3,0.750E+2,0.18648000E+1,0.00000000E+0 - ,0.50082420E+3,0.177E+3,0.760E+2,0.18648000E+1,0.00000000E+0 - ,0.46015330E+3,0.177E+3,0.770E+2,0.18648000E+1,0.00000000E+0 - ,0.38410330E+3,0.177E+3,0.780E+2,0.18648000E+1,0.00000000E+0 - ,0.35955540E+3,0.177E+3,0.790E+2,0.18648000E+1,0.00000000E+0 - ,0.37003820E+3,0.177E+3,0.800E+2,0.18648000E+1,0.00000000E+0 - ,0.53143810E+3,0.177E+3,0.810E+2,0.18648000E+1,0.00000000E+0 - ,0.52144650E+3,0.177E+3,0.820E+2,0.18648000E+1,0.00000000E+0 - ,0.48170840E+3,0.177E+3,0.830E+2,0.18648000E+1,0.00000000E+0 - ,0.46101200E+3,0.177E+3,0.840E+2,0.18648000E+1,0.00000000E+0 - ,0.42739750E+3,0.177E+3,0.850E+2,0.18648000E+1,0.00000000E+0 - ,0.39350690E+3,0.177E+3,0.860E+2,0.18648000E+1,0.00000000E+0 - ,0.12524472E+4,0.177E+3,0.870E+2,0.18648000E+1,0.00000000E+0 - ,0.12109999E+4,0.177E+3,0.880E+2,0.18648000E+1,0.00000000E+0 - ,0.10753003E+4,0.177E+3,0.890E+2,0.18648000E+1,0.00000000E+0 - ,0.97245520E+3,0.177E+3,0.900E+2,0.18648000E+1,0.00000000E+0 - ,0.96345570E+3,0.177E+3,0.910E+2,0.18648000E+1,0.00000000E+0 - ,0.93311220E+3,0.177E+3,0.920E+2,0.18648000E+1,0.00000000E+0 - ,0.95733480E+3,0.177E+3,0.930E+2,0.18648000E+1,0.00000000E+0 - ,0.92763110E+3,0.177E+3,0.940E+2,0.18648000E+1,0.00000000E+0 - ,0.53325500E+2,0.177E+3,0.101E+3,0.18648000E+1,0.00000000E+0 - ,0.16893310E+3,0.177E+3,0.103E+3,0.18648000E+1,0.98650000E+0 - ,0.21625690E+3,0.177E+3,0.104E+3,0.18648000E+1,0.98080000E+0 - ,0.16758690E+3,0.177E+3,0.105E+3,0.18648000E+1,0.97060000E+0 - ,0.12766650E+3,0.177E+3,0.106E+3,0.18648000E+1,0.98680000E+0 - ,0.89935700E+2,0.177E+3,0.107E+3,0.18648000E+1,0.99440000E+0 - ,0.66274300E+2,0.177E+3,0.108E+3,0.18648000E+1,0.99250000E+0 - ,0.46290900E+2,0.177E+3,0.109E+3,0.18648000E+1,0.99820000E+0 - ,0.24667920E+3,0.177E+3,0.111E+3,0.18648000E+1,0.96840000E+0 - ,0.38086140E+3,0.177E+3,0.112E+3,0.18648000E+1,0.96280000E+0 - ,0.38803830E+3,0.177E+3,0.113E+3,0.18648000E+1,0.96480000E+0 - ,0.31510570E+3,0.177E+3,0.114E+3,0.18648000E+1,0.95070000E+0 - ,0.26039720E+3,0.177E+3,0.115E+3,0.18648000E+1,0.99470000E+0 - ,0.22177880E+3,0.177E+3,0.116E+3,0.18648000E+1,0.99480000E+0 - ,0.18273850E+3,0.177E+3,0.117E+3,0.18648000E+1,0.99720000E+0 - ,0.34334310E+3,0.177E+3,0.119E+3,0.18648000E+1,0.97670000E+0 - ,0.64530690E+3,0.177E+3,0.120E+3,0.18648000E+1,0.98310000E+0 - ,0.34546620E+3,0.177E+3,0.121E+3,0.18648000E+1,0.18627000E+1 - ,0.33378450E+3,0.177E+3,0.122E+3,0.18648000E+1,0.18299000E+1 - ,0.32712730E+3,0.177E+3,0.123E+3,0.18648000E+1,0.19138000E+1 - ,0.32385110E+3,0.177E+3,0.124E+3,0.18648000E+1,0.18269000E+1 - ,0.29919940E+3,0.177E+3,0.125E+3,0.18648000E+1,0.16406000E+1 - ,0.27742410E+3,0.177E+3,0.126E+3,0.18648000E+1,0.16483000E+1 - ,0.26476150E+3,0.177E+3,0.127E+3,0.18648000E+1,0.17149000E+1 - ,0.25876330E+3,0.177E+3,0.128E+3,0.18648000E+1,0.17937000E+1 - ,0.25485680E+3,0.177E+3,0.129E+3,0.18648000E+1,0.95760000E+0 - ,0.24052350E+3,0.177E+3,0.130E+3,0.18648000E+1,0.19419000E+1 - ,0.38698910E+3,0.177E+3,0.131E+3,0.18648000E+1,0.96010000E+0 - ,0.34259940E+3,0.177E+3,0.132E+3,0.18648000E+1,0.94340000E+0 - ,0.30908100E+3,0.177E+3,0.133E+3,0.18648000E+1,0.98890000E+0 - ,0.28369920E+3,0.177E+3,0.134E+3,0.18648000E+1,0.99010000E+0 - ,0.25143160E+3,0.177E+3,0.135E+3,0.18648000E+1,0.99740000E+0 - ,0.41068500E+3,0.177E+3,0.137E+3,0.18648000E+1,0.97380000E+0 - ,0.78537910E+3,0.177E+3,0.138E+3,0.18648000E+1,0.98010000E+0 - ,0.60690870E+3,0.177E+3,0.139E+3,0.18648000E+1,0.19153000E+1 - ,0.45710620E+3,0.177E+3,0.140E+3,0.18648000E+1,0.19355000E+1 - ,0.46161660E+3,0.177E+3,0.141E+3,0.18648000E+1,0.19545000E+1 - ,0.43145100E+3,0.177E+3,0.142E+3,0.18648000E+1,0.19420000E+1 - ,0.48128810E+3,0.177E+3,0.143E+3,0.18648000E+1,0.16682000E+1 - ,0.37795500E+3,0.177E+3,0.144E+3,0.18648000E+1,0.18584000E+1 - ,0.35398970E+3,0.177E+3,0.145E+3,0.18648000E+1,0.19003000E+1 - ,0.32921750E+3,0.177E+3,0.146E+3,0.18648000E+1,0.18630000E+1 - ,0.31831050E+3,0.177E+3,0.147E+3,0.18648000E+1,0.96790000E+0 - ,0.31569280E+3,0.177E+3,0.148E+3,0.18648000E+1,0.19539000E+1 - ,0.49262420E+3,0.177E+3,0.149E+3,0.18648000E+1,0.96330000E+0 - ,0.44836200E+3,0.177E+3,0.150E+3,0.18648000E+1,0.95140000E+0 - ,0.42188850E+3,0.177E+3,0.151E+3,0.18648000E+1,0.97490000E+0 - ,0.40057160E+3,0.177E+3,0.152E+3,0.18648000E+1,0.98110000E+0 - ,0.36757650E+3,0.177E+3,0.153E+3,0.18648000E+1,0.99680000E+0 - ,0.48764860E+3,0.177E+3,0.155E+3,0.18648000E+1,0.99090000E+0 - ,0.10171183E+4,0.177E+3,0.156E+3,0.18648000E+1,0.97970000E+0 - ,0.76771820E+3,0.177E+3,0.157E+3,0.18648000E+1,0.19373000E+1 - ,0.49283570E+3,0.177E+3,0.159E+3,0.18648000E+1,0.29425000E+1 - ,0.48268880E+3,0.177E+3,0.160E+3,0.18648000E+1,0.29455000E+1 - ,0.46758270E+3,0.177E+3,0.161E+3,0.18648000E+1,0.29413000E+1 - ,0.46943970E+3,0.177E+3,0.162E+3,0.18648000E+1,0.29300000E+1 - ,0.45134990E+3,0.177E+3,0.163E+3,0.18648000E+1,0.18286000E+1 - ,0.47210950E+3,0.177E+3,0.164E+3,0.18648000E+1,0.28732000E+1 - ,0.44388260E+3,0.177E+3,0.165E+3,0.18648000E+1,0.29086000E+1 - ,0.45095330E+3,0.177E+3,0.166E+3,0.18648000E+1,0.28965000E+1 - ,0.42164500E+3,0.177E+3,0.167E+3,0.18648000E+1,0.29242000E+1 - ,0.40975870E+3,0.177E+3,0.168E+3,0.18648000E+1,0.29282000E+1 - ,0.40699850E+3,0.177E+3,0.169E+3,0.18648000E+1,0.29246000E+1 - ,0.42696980E+3,0.177E+3,0.170E+3,0.18648000E+1,0.28482000E+1 - ,0.39353520E+3,0.177E+3,0.171E+3,0.18648000E+1,0.29219000E+1 - ,0.52755310E+3,0.177E+3,0.172E+3,0.18648000E+1,0.19254000E+1 - ,0.49159800E+3,0.177E+3,0.173E+3,0.18648000E+1,0.19459000E+1 - ,0.45048000E+3,0.177E+3,0.174E+3,0.18648000E+1,0.19292000E+1 - ,0.45433550E+3,0.177E+3,0.175E+3,0.18648000E+1,0.18104000E+1 - ,0.40148890E+3,0.177E+3,0.176E+3,0.18648000E+1,0.18858000E+1 - ,0.37849390E+3,0.177E+3,0.177E+3,0.18648000E+1,0.18648000E+1 - ,0.32091700E+2,0.178E+3,0.100E+1,0.19188000E+1,0.91180000E+0 - ,0.21833800E+2,0.178E+3,0.200E+1,0.19188000E+1,0.00000000E+0 - ,0.46520110E+3,0.178E+3,0.300E+1,0.19188000E+1,0.00000000E+0 - ,0.27545630E+3,0.178E+3,0.400E+1,0.19188000E+1,0.00000000E+0 - ,0.18914850E+3,0.178E+3,0.500E+1,0.19188000E+1,0.00000000E+0 - ,0.13007010E+3,0.178E+3,0.600E+1,0.19188000E+1,0.00000000E+0 - ,0.92371000E+2,0.178E+3,0.700E+1,0.19188000E+1,0.00000000E+0 - ,0.70797500E+2,0.178E+3,0.800E+1,0.19188000E+1,0.00000000E+0 - ,0.54251600E+2,0.178E+3,0.900E+1,0.19188000E+1,0.00000000E+0 - ,0.42149900E+2,0.178E+3,0.100E+2,0.19188000E+1,0.00000000E+0 - ,0.55760480E+3,0.178E+3,0.110E+2,0.19188000E+1,0.00000000E+0 - ,0.43700990E+3,0.178E+3,0.120E+2,0.19188000E+1,0.00000000E+0 - ,0.40638720E+3,0.178E+3,0.130E+2,0.19188000E+1,0.00000000E+0 - ,0.32432370E+3,0.178E+3,0.140E+2,0.19188000E+1,0.00000000E+0 - ,0.25607430E+3,0.178E+3,0.150E+2,0.19188000E+1,0.00000000E+0 - ,0.21453080E+3,0.178E+3,0.160E+2,0.19188000E+1,0.00000000E+0 - ,0.17695160E+3,0.178E+3,0.170E+2,0.19188000E+1,0.00000000E+0 - ,0.14611660E+3,0.178E+3,0.180E+2,0.19188000E+1,0.00000000E+0 - ,0.91385330E+3,0.178E+3,0.190E+2,0.19188000E+1,0.00000000E+0 - ,0.76327990E+3,0.178E+3,0.200E+2,0.19188000E+1,0.00000000E+0 - ,0.63264330E+3,0.178E+3,0.210E+2,0.19188000E+1,0.00000000E+0 - ,0.61344560E+3,0.178E+3,0.220E+2,0.19188000E+1,0.00000000E+0 - ,0.56306260E+3,0.178E+3,0.230E+2,0.19188000E+1,0.00000000E+0 - ,0.44482350E+3,0.178E+3,0.240E+2,0.19188000E+1,0.00000000E+0 - ,0.48647550E+3,0.178E+3,0.250E+2,0.19188000E+1,0.00000000E+0 - ,0.38312130E+3,0.178E+3,0.260E+2,0.19188000E+1,0.00000000E+0 - ,0.40695490E+3,0.178E+3,0.270E+2,0.19188000E+1,0.00000000E+0 - ,0.41813480E+3,0.178E+3,0.280E+2,0.19188000E+1,0.00000000E+0 - ,0.32172230E+3,0.178E+3,0.290E+2,0.19188000E+1,0.00000000E+0 - ,0.33177490E+3,0.178E+3,0.300E+2,0.19188000E+1,0.00000000E+0 - ,0.39148440E+3,0.178E+3,0.310E+2,0.19188000E+1,0.00000000E+0 - ,0.34844170E+3,0.178E+3,0.320E+2,0.19188000E+1,0.00000000E+0 - ,0.30012110E+3,0.178E+3,0.330E+2,0.19188000E+1,0.00000000E+0 - ,0.27118850E+3,0.178E+3,0.340E+2,0.19188000E+1,0.00000000E+0 - ,0.23915510E+3,0.178E+3,0.350E+2,0.19188000E+1,0.00000000E+0 - ,0.20957880E+3,0.178E+3,0.360E+2,0.19188000E+1,0.00000000E+0 - ,0.10265038E+4,0.178E+3,0.370E+2,0.19188000E+1,0.00000000E+0 - ,0.90978800E+3,0.178E+3,0.380E+2,0.19188000E+1,0.00000000E+0 - ,0.80197930E+3,0.178E+3,0.390E+2,0.19188000E+1,0.00000000E+0 - ,0.72399270E+3,0.178E+3,0.400E+2,0.19188000E+1,0.00000000E+0 - ,0.66240900E+3,0.178E+3,0.410E+2,0.19188000E+1,0.00000000E+0 - ,0.51504420E+3,0.178E+3,0.420E+2,0.19188000E+1,0.00000000E+0 - ,0.57309040E+3,0.178E+3,0.430E+2,0.19188000E+1,0.00000000E+0 - ,0.44003780E+3,0.178E+3,0.440E+2,0.19188000E+1,0.00000000E+0 - ,0.48010810E+3,0.178E+3,0.450E+2,0.19188000E+1,0.00000000E+0 - ,0.44621570E+3,0.178E+3,0.460E+2,0.19188000E+1,0.00000000E+0 - ,0.37286390E+3,0.178E+3,0.470E+2,0.19188000E+1,0.00000000E+0 - ,0.39438550E+3,0.178E+3,0.480E+2,0.19188000E+1,0.00000000E+0 - ,0.49129160E+3,0.178E+3,0.490E+2,0.19188000E+1,0.00000000E+0 - ,0.45727960E+3,0.178E+3,0.500E+2,0.19188000E+1,0.00000000E+0 - ,0.41067770E+3,0.178E+3,0.510E+2,0.19188000E+1,0.00000000E+0 - ,0.38304320E+3,0.178E+3,0.520E+2,0.19188000E+1,0.00000000E+0 - ,0.34847210E+3,0.178E+3,0.530E+2,0.19188000E+1,0.00000000E+0 - ,0.31527170E+3,0.178E+3,0.540E+2,0.19188000E+1,0.00000000E+0 - ,0.12516079E+4,0.178E+3,0.550E+2,0.19188000E+1,0.00000000E+0 - ,0.11586040E+4,0.178E+3,0.560E+2,0.19188000E+1,0.00000000E+0 - ,0.10239496E+4,0.178E+3,0.570E+2,0.19188000E+1,0.00000000E+0 - ,0.48500190E+3,0.178E+3,0.580E+2,0.19188000E+1,0.27991000E+1 - ,0.10291720E+4,0.178E+3,0.590E+2,0.19188000E+1,0.00000000E+0 - ,0.98909200E+3,0.178E+3,0.600E+2,0.19188000E+1,0.00000000E+0 - ,0.96450040E+3,0.178E+3,0.610E+2,0.19188000E+1,0.00000000E+0 - ,0.94184450E+3,0.178E+3,0.620E+2,0.19188000E+1,0.00000000E+0 - ,0.92175840E+3,0.178E+3,0.630E+2,0.19188000E+1,0.00000000E+0 - ,0.73100210E+3,0.178E+3,0.640E+2,0.19188000E+1,0.00000000E+0 - ,0.81592560E+3,0.178E+3,0.650E+2,0.19188000E+1,0.00000000E+0 - ,0.78790030E+3,0.178E+3,0.660E+2,0.19188000E+1,0.00000000E+0 - ,0.83246930E+3,0.178E+3,0.670E+2,0.19188000E+1,0.00000000E+0 - ,0.81486390E+3,0.178E+3,0.680E+2,0.19188000E+1,0.00000000E+0 - ,0.79906290E+3,0.178E+3,0.690E+2,0.19188000E+1,0.00000000E+0 - ,0.78940200E+3,0.178E+3,0.700E+2,0.19188000E+1,0.00000000E+0 - ,0.66892220E+3,0.178E+3,0.710E+2,0.19188000E+1,0.00000000E+0 - ,0.66171440E+3,0.178E+3,0.720E+2,0.19188000E+1,0.00000000E+0 - ,0.60682340E+3,0.178E+3,0.730E+2,0.19188000E+1,0.00000000E+0 - ,0.51528520E+3,0.178E+3,0.740E+2,0.19188000E+1,0.00000000E+0 - ,0.52488810E+3,0.178E+3,0.750E+2,0.19188000E+1,0.00000000E+0 - ,0.47789070E+3,0.178E+3,0.760E+2,0.19188000E+1,0.00000000E+0 - ,0.43938870E+3,0.178E+3,0.770E+2,0.19188000E+1,0.00000000E+0 - ,0.36716870E+3,0.178E+3,0.780E+2,0.19188000E+1,0.00000000E+0 - ,0.34385620E+3,0.178E+3,0.790E+2,0.19188000E+1,0.00000000E+0 - ,0.35390700E+3,0.178E+3,0.800E+2,0.19188000E+1,0.00000000E+0 - ,0.50669330E+3,0.178E+3,0.810E+2,0.19188000E+1,0.00000000E+0 - ,0.49751750E+3,0.178E+3,0.820E+2,0.19188000E+1,0.00000000E+0 - ,0.46009860E+3,0.178E+3,0.830E+2,0.19188000E+1,0.00000000E+0 - ,0.44063800E+3,0.178E+3,0.840E+2,0.19188000E+1,0.00000000E+0 - ,0.40889250E+3,0.178E+3,0.850E+2,0.19188000E+1,0.00000000E+0 - ,0.37682880E+3,0.178E+3,0.860E+2,0.19188000E+1,0.00000000E+0 - ,0.11875608E+4,0.178E+3,0.870E+2,0.19188000E+1,0.00000000E+0 - ,0.11496435E+4,0.178E+3,0.880E+2,0.19188000E+1,0.00000000E+0 - ,0.10218132E+4,0.178E+3,0.890E+2,0.19188000E+1,0.00000000E+0 - ,0.92532050E+3,0.178E+3,0.900E+2,0.19188000E+1,0.00000000E+0 - ,0.91638160E+3,0.178E+3,0.910E+2,0.19188000E+1,0.00000000E+0 - ,0.88757730E+3,0.178E+3,0.920E+2,0.19188000E+1,0.00000000E+0 - ,0.90998500E+3,0.178E+3,0.930E+2,0.19188000E+1,0.00000000E+0 - ,0.88186200E+3,0.178E+3,0.940E+2,0.19188000E+1,0.00000000E+0 - ,0.50936600E+2,0.178E+3,0.101E+3,0.19188000E+1,0.00000000E+0 - ,0.16064720E+3,0.178E+3,0.103E+3,0.19188000E+1,0.98650000E+0 - ,0.20578590E+3,0.178E+3,0.104E+3,0.19188000E+1,0.98080000E+0 - ,0.15992840E+3,0.178E+3,0.105E+3,0.19188000E+1,0.97060000E+0 - ,0.12211080E+3,0.178E+3,0.106E+3,0.19188000E+1,0.98680000E+0 - ,0.86265500E+2,0.178E+3,0.107E+3,0.19188000E+1,0.99440000E+0 - ,0.63736400E+2,0.178E+3,0.108E+3,0.19188000E+1,0.99250000E+0 - ,0.44679200E+2,0.178E+3,0.109E+3,0.19188000E+1,0.99820000E+0 - ,0.23456040E+3,0.178E+3,0.111E+3,0.19188000E+1,0.96840000E+0 - ,0.36198670E+3,0.178E+3,0.112E+3,0.19188000E+1,0.96280000E+0 - ,0.36923330E+3,0.178E+3,0.113E+3,0.19188000E+1,0.96480000E+0 - ,0.30045310E+3,0.178E+3,0.114E+3,0.19188000E+1,0.95070000E+0 - ,0.24874070E+3,0.178E+3,0.115E+3,0.19188000E+1,0.99470000E+0 - ,0.21216920E+3,0.178E+3,0.116E+3,0.19188000E+1,0.99480000E+0 - ,0.17511990E+3,0.178E+3,0.117E+3,0.19188000E+1,0.99720000E+0 - ,0.32711390E+3,0.178E+3,0.119E+3,0.19188000E+1,0.97670000E+0 - ,0.61266150E+3,0.178E+3,0.120E+3,0.19188000E+1,0.98310000E+0 - ,0.32950500E+3,0.178E+3,0.121E+3,0.19188000E+1,0.18627000E+1 - ,0.31842170E+3,0.178E+3,0.122E+3,0.19188000E+1,0.18299000E+1 - ,0.31208150E+3,0.178E+3,0.123E+3,0.19188000E+1,0.19138000E+1 - ,0.30891510E+3,0.178E+3,0.124E+3,0.19188000E+1,0.18269000E+1 - ,0.28562920E+3,0.178E+3,0.125E+3,0.19188000E+1,0.16406000E+1 - ,0.26494780E+3,0.178E+3,0.126E+3,0.19188000E+1,0.16483000E+1 - ,0.25288280E+3,0.178E+3,0.127E+3,0.19188000E+1,0.17149000E+1 - ,0.24714320E+3,0.178E+3,0.128E+3,0.19188000E+1,0.17937000E+1 - ,0.24327100E+3,0.178E+3,0.129E+3,0.19188000E+1,0.95760000E+0 - ,0.22984390E+3,0.178E+3,0.130E+3,0.19188000E+1,0.19419000E+1 - ,0.36860280E+3,0.178E+3,0.131E+3,0.19188000E+1,0.96010000E+0 - ,0.32682470E+3,0.178E+3,0.132E+3,0.19188000E+1,0.94340000E+0 - ,0.29524020E+3,0.178E+3,0.133E+3,0.19188000E+1,0.98890000E+0 - ,0.27128510E+3,0.178E+3,0.134E+3,0.19188000E+1,0.99010000E+0 - ,0.24074110E+3,0.178E+3,0.135E+3,0.19188000E+1,0.99740000E+0 - ,0.39146850E+3,0.178E+3,0.137E+3,0.19188000E+1,0.97380000E+0 - ,0.74566370E+3,0.178E+3,0.138E+3,0.19188000E+1,0.98010000E+0 - ,0.57749450E+3,0.178E+3,0.139E+3,0.19188000E+1,0.19153000E+1 - ,0.43601580E+3,0.178E+3,0.140E+3,0.19188000E+1,0.19355000E+1 - ,0.44033040E+3,0.178E+3,0.141E+3,0.19188000E+1,0.19545000E+1 - ,0.41176280E+3,0.178E+3,0.142E+3,0.19188000E+1,0.19420000E+1 - ,0.45883330E+3,0.178E+3,0.143E+3,0.19188000E+1,0.16682000E+1 - ,0.36109350E+3,0.178E+3,0.144E+3,0.19188000E+1,0.18584000E+1 - ,0.33829080E+3,0.178E+3,0.145E+3,0.19188000E+1,0.19003000E+1 - ,0.31473130E+3,0.178E+3,0.146E+3,0.19188000E+1,0.18630000E+1 - ,0.30428650E+3,0.178E+3,0.147E+3,0.19188000E+1,0.96790000E+0 - ,0.30192540E+3,0.178E+3,0.148E+3,0.19188000E+1,0.19539000E+1 - ,0.46950870E+3,0.178E+3,0.149E+3,0.19188000E+1,0.96330000E+0 - ,0.42783570E+3,0.178E+3,0.150E+3,0.19188000E+1,0.95140000E+0 - ,0.40295210E+3,0.178E+3,0.151E+3,0.19188000E+1,0.97490000E+0 - ,0.38287770E+3,0.178E+3,0.152E+3,0.19188000E+1,0.98110000E+0 - ,0.35168470E+3,0.178E+3,0.153E+3,0.19188000E+1,0.99680000E+0 - ,0.46516200E+3,0.178E+3,0.155E+3,0.19188000E+1,0.99090000E+0 - ,0.96540540E+3,0.178E+3,0.156E+3,0.19188000E+1,0.97970000E+0 - ,0.73040540E+3,0.178E+3,0.157E+3,0.19188000E+1,0.19373000E+1 - ,0.47064590E+3,0.178E+3,0.159E+3,0.19188000E+1,0.29425000E+1 - ,0.46096660E+3,0.178E+3,0.160E+3,0.19188000E+1,0.29455000E+1 - ,0.44658000E+3,0.178E+3,0.161E+3,0.19188000E+1,0.29413000E+1 - ,0.44826620E+3,0.178E+3,0.162E+3,0.19188000E+1,0.29300000E+1 - ,0.43078610E+3,0.178E+3,0.163E+3,0.19188000E+1,0.18286000E+1 - ,0.45075260E+3,0.178E+3,0.164E+3,0.19188000E+1,0.28732000E+1 - ,0.42390040E+3,0.178E+3,0.165E+3,0.19188000E+1,0.29086000E+1 - ,0.43051250E+3,0.178E+3,0.166E+3,0.19188000E+1,0.28965000E+1 - ,0.40272530E+3,0.178E+3,0.167E+3,0.19188000E+1,0.29242000E+1 - ,0.39139780E+3,0.178E+3,0.168E+3,0.19188000E+1,0.29282000E+1 - ,0.38873440E+3,0.178E+3,0.169E+3,0.19188000E+1,0.29246000E+1 - ,0.40763660E+3,0.178E+3,0.170E+3,0.19188000E+1,0.28482000E+1 - ,0.37590100E+3,0.178E+3,0.171E+3,0.19188000E+1,0.29219000E+1 - ,0.50277570E+3,0.178E+3,0.172E+3,0.19188000E+1,0.19254000E+1 - ,0.46891240E+3,0.178E+3,0.173E+3,0.19188000E+1,0.19459000E+1 - ,0.43008890E+3,0.178E+3,0.174E+3,0.19188000E+1,0.19292000E+1 - ,0.43348520E+3,0.178E+3,0.175E+3,0.19188000E+1,0.18104000E+1 - ,0.38382310E+3,0.178E+3,0.176E+3,0.19188000E+1,0.18858000E+1 - ,0.36201210E+3,0.178E+3,0.177E+3,0.19188000E+1,0.18648000E+1 - ,0.34636100E+3,0.178E+3,0.178E+3,0.19188000E+1,0.19188000E+1 - ,0.30675700E+2,0.179E+3,0.100E+1,0.98460000E+0,0.91180000E+0 - ,0.20941000E+2,0.179E+3,0.200E+1,0.98460000E+0,0.00000000E+0 - ,0.44619080E+3,0.179E+3,0.300E+1,0.98460000E+0,0.00000000E+0 - ,0.26322300E+3,0.179E+3,0.400E+1,0.98460000E+0,0.00000000E+0 - ,0.18065820E+3,0.179E+3,0.500E+1,0.98460000E+0,0.00000000E+0 - ,0.12431330E+3,0.179E+3,0.600E+1,0.98460000E+0,0.00000000E+0 - ,0.88391500E+2,0.179E+3,0.700E+1,0.98460000E+0,0.00000000E+0 - ,0.67837200E+2,0.179E+3,0.800E+1,0.98460000E+0,0.00000000E+0 - ,0.52061000E+2,0.179E+3,0.900E+1,0.98460000E+0,0.00000000E+0 - ,0.40509200E+2,0.179E+3,0.100E+2,0.98460000E+0,0.00000000E+0 - ,0.53480760E+3,0.179E+3,0.110E+2,0.98460000E+0,0.00000000E+0 - ,0.41788500E+3,0.179E+3,0.120E+2,0.98460000E+0,0.00000000E+0 - ,0.38834460E+3,0.179E+3,0.130E+2,0.98460000E+0,0.00000000E+0 - ,0.30976480E+3,0.179E+3,0.140E+2,0.98460000E+0,0.00000000E+0 - ,0.24460550E+3,0.179E+3,0.150E+2,0.98460000E+0,0.00000000E+0 - ,0.20502050E+3,0.179E+3,0.160E+2,0.98460000E+0,0.00000000E+0 - ,0.16922710E+3,0.179E+3,0.170E+2,0.98460000E+0,0.00000000E+0 - ,0.13986320E+3,0.179E+3,0.180E+2,0.98460000E+0,0.00000000E+0 - ,0.87757830E+3,0.179E+3,0.190E+2,0.98460000E+0,0.00000000E+0 - ,0.73094660E+3,0.179E+3,0.200E+2,0.98460000E+0,0.00000000E+0 - ,0.60554530E+3,0.179E+3,0.210E+2,0.98460000E+0,0.00000000E+0 - ,0.58704740E+3,0.179E+3,0.220E+2,0.98460000E+0,0.00000000E+0 - ,0.53875790E+3,0.179E+3,0.230E+2,0.98460000E+0,0.00000000E+0 - ,0.42583430E+3,0.179E+3,0.240E+2,0.98460000E+0,0.00000000E+0 - ,0.46540030E+3,0.179E+3,0.250E+2,0.98460000E+0,0.00000000E+0 - ,0.36671160E+3,0.179E+3,0.260E+2,0.98460000E+0,0.00000000E+0 - ,0.38919570E+3,0.179E+3,0.270E+2,0.98460000E+0,0.00000000E+0 - ,0.39992890E+3,0.179E+3,0.280E+2,0.98460000E+0,0.00000000E+0 - ,0.30793520E+3,0.179E+3,0.290E+2,0.98460000E+0,0.00000000E+0 - ,0.31723870E+3,0.179E+3,0.300E+2,0.98460000E+0,0.00000000E+0 - ,0.37421180E+3,0.179E+3,0.310E+2,0.98460000E+0,0.00000000E+0 - ,0.33290660E+3,0.179E+3,0.320E+2,0.98460000E+0,0.00000000E+0 - ,0.28673520E+3,0.179E+3,0.330E+2,0.98460000E+0,0.00000000E+0 - ,0.25915840E+3,0.179E+3,0.340E+2,0.98460000E+0,0.00000000E+0 - ,0.22864850E+3,0.179E+3,0.350E+2,0.98460000E+0,0.00000000E+0 - ,0.20049290E+3,0.179E+3,0.360E+2,0.98460000E+0,0.00000000E+0 - ,0.98572350E+3,0.179E+3,0.370E+2,0.98460000E+0,0.00000000E+0 - ,0.87147550E+3,0.179E+3,0.380E+2,0.98460000E+0,0.00000000E+0 - ,0.76763160E+3,0.179E+3,0.390E+2,0.98460000E+0,0.00000000E+0 - ,0.69275660E+3,0.179E+3,0.400E+2,0.98460000E+0,0.00000000E+0 - ,0.63375930E+3,0.179E+3,0.410E+2,0.98460000E+0,0.00000000E+0 - ,0.49282900E+3,0.179E+3,0.420E+2,0.98460000E+0,0.00000000E+0 - ,0.54833760E+3,0.179E+3,0.430E+2,0.98460000E+0,0.00000000E+0 - ,0.42110840E+3,0.179E+3,0.440E+2,0.98460000E+0,0.00000000E+0 - ,0.45928620E+3,0.179E+3,0.450E+2,0.98460000E+0,0.00000000E+0 - ,0.42686340E+3,0.179E+3,0.460E+2,0.98460000E+0,0.00000000E+0 - ,0.35697430E+3,0.179E+3,0.470E+2,0.98460000E+0,0.00000000E+0 - ,0.37730490E+3,0.179E+3,0.480E+2,0.98460000E+0,0.00000000E+0 - ,0.46998930E+3,0.179E+3,0.490E+2,0.98460000E+0,0.00000000E+0 - ,0.43719460E+3,0.179E+3,0.500E+2,0.98460000E+0,0.00000000E+0 - ,0.39255510E+3,0.179E+3,0.510E+2,0.98460000E+0,0.00000000E+0 - ,0.36615260E+3,0.179E+3,0.520E+2,0.98460000E+0,0.00000000E+0 - ,0.33316950E+3,0.179E+3,0.530E+2,0.98460000E+0,0.00000000E+0 - ,0.30152720E+3,0.179E+3,0.540E+2,0.98460000E+0,0.00000000E+0 - ,0.12018793E+4,0.179E+3,0.550E+2,0.98460000E+0,0.00000000E+0 - ,0.11102792E+4,0.179E+3,0.560E+2,0.98460000E+0,0.00000000E+0 - ,0.98044160E+3,0.179E+3,0.570E+2,0.98460000E+0,0.00000000E+0 - ,0.46371250E+3,0.179E+3,0.580E+2,0.98460000E+0,0.27991000E+1 - ,0.98614070E+3,0.179E+3,0.590E+2,0.98460000E+0,0.00000000E+0 - ,0.94759800E+3,0.179E+3,0.600E+2,0.98460000E+0,0.00000000E+0 - ,0.92399680E+3,0.179E+3,0.610E+2,0.98460000E+0,0.00000000E+0 - ,0.90225470E+3,0.179E+3,0.620E+2,0.98460000E+0,0.00000000E+0 - ,0.88297590E+3,0.179E+3,0.630E+2,0.98460000E+0,0.00000000E+0 - ,0.69990580E+3,0.179E+3,0.640E+2,0.98460000E+0,0.00000000E+0 - ,0.78232470E+3,0.179E+3,0.650E+2,0.98460000E+0,0.00000000E+0 - ,0.75533300E+3,0.179E+3,0.660E+2,0.98460000E+0,0.00000000E+0 - ,0.79726220E+3,0.179E+3,0.670E+2,0.98460000E+0,0.00000000E+0 - ,0.78037200E+3,0.179E+3,0.680E+2,0.98460000E+0,0.00000000E+0 - ,0.76520560E+3,0.179E+3,0.690E+2,0.98460000E+0,0.00000000E+0 - ,0.75596270E+3,0.179E+3,0.700E+2,0.98460000E+0,0.00000000E+0 - ,0.64035930E+3,0.179E+3,0.710E+2,0.98460000E+0,0.00000000E+0 - ,0.63292020E+3,0.179E+3,0.720E+2,0.98460000E+0,0.00000000E+0 - ,0.58031360E+3,0.179E+3,0.730E+2,0.98460000E+0,0.00000000E+0 - ,0.49290480E+3,0.179E+3,0.740E+2,0.98460000E+0,0.00000000E+0 - ,0.50200340E+3,0.179E+3,0.750E+2,0.98460000E+0,0.00000000E+0 - ,0.45704880E+3,0.179E+3,0.760E+2,0.98460000E+0,0.00000000E+0 - ,0.42025190E+3,0.179E+3,0.770E+2,0.98460000E+0,0.00000000E+0 - ,0.35135070E+3,0.179E+3,0.780E+2,0.98460000E+0,0.00000000E+0 - ,0.32911380E+3,0.179E+3,0.790E+2,0.98460000E+0,0.00000000E+0 - ,0.33864570E+3,0.179E+3,0.800E+2,0.98460000E+0,0.00000000E+0 - ,0.48495430E+3,0.179E+3,0.810E+2,0.98460000E+0,0.00000000E+0 - ,0.47588520E+3,0.179E+3,0.820E+2,0.98460000E+0,0.00000000E+0 - ,0.43996460E+3,0.179E+3,0.830E+2,0.98460000E+0,0.00000000E+0 - ,0.42133170E+3,0.179E+3,0.840E+2,0.98460000E+0,0.00000000E+0 - ,0.39100970E+3,0.179E+3,0.850E+2,0.98460000E+0,0.00000000E+0 - ,0.36042890E+3,0.179E+3,0.860E+2,0.98460000E+0,0.00000000E+0 - ,0.11396407E+4,0.179E+3,0.870E+2,0.98460000E+0,0.00000000E+0 - ,0.11012980E+4,0.179E+3,0.880E+2,0.98460000E+0,0.00000000E+0 - ,0.97817100E+3,0.179E+3,0.890E+2,0.98460000E+0,0.00000000E+0 - ,0.88538660E+3,0.179E+3,0.900E+2,0.98460000E+0,0.00000000E+0 - ,0.87728480E+3,0.179E+3,0.910E+2,0.98460000E+0,0.00000000E+0 - ,0.84972830E+3,0.179E+3,0.920E+2,0.98460000E+0,0.00000000E+0 - ,0.87157240E+3,0.179E+3,0.930E+2,0.98460000E+0,0.00000000E+0 - ,0.84456390E+3,0.179E+3,0.940E+2,0.98460000E+0,0.00000000E+0 - ,0.48647800E+2,0.179E+3,0.101E+3,0.98460000E+0,0.00000000E+0 - ,0.15352370E+3,0.179E+3,0.103E+3,0.98460000E+0,0.98650000E+0 - ,0.19665700E+3,0.179E+3,0.104E+3,0.98460000E+0,0.98080000E+0 - ,0.15278290E+3,0.179E+3,0.105E+3,0.98460000E+0,0.97060000E+0 - ,0.11673350E+3,0.179E+3,0.106E+3,0.98460000E+0,0.98680000E+0 - ,0.82569800E+2,0.179E+3,0.107E+3,0.98460000E+0,0.99440000E+0 - ,0.61097100E+2,0.179E+3,0.108E+3,0.98460000E+0,0.99250000E+0 - ,0.42933900E+2,0.179E+3,0.109E+3,0.98460000E+0,0.99820000E+0 - ,0.22431640E+3,0.179E+3,0.111E+3,0.98460000E+0,0.96840000E+0 - ,0.34612620E+3,0.179E+3,0.112E+3,0.98460000E+0,0.96280000E+0 - ,0.35282440E+3,0.179E+3,0.113E+3,0.98460000E+0,0.96480000E+0 - ,0.28698060E+3,0.179E+3,0.114E+3,0.98460000E+0,0.95070000E+0 - ,0.23761790E+3,0.179E+3,0.115E+3,0.98460000E+0,0.99470000E+0 - ,0.20277280E+3,0.179E+3,0.116E+3,0.98460000E+0,0.99480000E+0 - ,0.16748190E+3,0.179E+3,0.117E+3,0.98460000E+0,0.99720000E+0 - ,0.31303240E+3,0.179E+3,0.119E+3,0.98460000E+0,0.97670000E+0 - ,0.58698040E+3,0.179E+3,0.120E+3,0.98460000E+0,0.98310000E+0 - ,0.31500110E+3,0.179E+3,0.121E+3,0.98460000E+0,0.18627000E+1 - ,0.30444790E+3,0.179E+3,0.122E+3,0.98460000E+0,0.18299000E+1 - ,0.29841150E+3,0.179E+3,0.123E+3,0.98460000E+0,0.19138000E+1 - ,0.29542220E+3,0.179E+3,0.124E+3,0.98460000E+0,0.18269000E+1 - ,0.27304550E+3,0.179E+3,0.125E+3,0.98460000E+0,0.16406000E+1 - ,0.25329860E+3,0.179E+3,0.126E+3,0.98460000E+0,0.16483000E+1 - ,0.24179700E+3,0.179E+3,0.127E+3,0.98460000E+0,0.17149000E+1 - ,0.23632330E+3,0.179E+3,0.128E+3,0.98460000E+0,0.17937000E+1 - ,0.23269810E+3,0.179E+3,0.129E+3,0.98460000E+0,0.95760000E+0 - ,0.21974110E+3,0.179E+3,0.130E+3,0.98460000E+0,0.19419000E+1 - ,0.35230670E+3,0.179E+3,0.131E+3,0.98460000E+0,0.96010000E+0 - ,0.31225540E+3,0.179E+3,0.132E+3,0.98460000E+0,0.94340000E+0 - ,0.28208180E+3,0.179E+3,0.133E+3,0.98460000E+0,0.98890000E+0 - ,0.25925510E+3,0.179E+3,0.134E+3,0.98460000E+0,0.99010000E+0 - ,0.23016390E+3,0.179E+3,0.135E+3,0.98460000E+0,0.99740000E+0 - ,0.37464460E+3,0.179E+3,0.137E+3,0.98460000E+0,0.97380000E+0 - ,0.71461700E+3,0.179E+3,0.138E+3,0.98460000E+0,0.98010000E+0 - ,0.55272720E+3,0.179E+3,0.139E+3,0.98460000E+0,0.19153000E+1 - ,0.41693630E+3,0.179E+3,0.140E+3,0.98460000E+0,0.19355000E+1 - ,0.42109580E+3,0.179E+3,0.141E+3,0.98460000E+0,0.19545000E+1 - ,0.39381950E+3,0.179E+3,0.142E+3,0.98460000E+0,0.19420000E+1 - ,0.43907200E+3,0.179E+3,0.143E+3,0.98460000E+0,0.16682000E+1 - ,0.34535640E+3,0.179E+3,0.144E+3,0.98460000E+0,0.18584000E+1 - ,0.32361650E+3,0.179E+3,0.145E+3,0.98460000E+0,0.19003000E+1 - ,0.30113910E+3,0.179E+3,0.146E+3,0.98460000E+0,0.18630000E+1 - ,0.29118100E+3,0.179E+3,0.147E+3,0.98460000E+0,0.96790000E+0 - ,0.28880380E+3,0.179E+3,0.148E+3,0.98460000E+0,0.19539000E+1 - ,0.44908360E+3,0.179E+3,0.149E+3,0.98460000E+0,0.96330000E+0 - ,0.40902650E+3,0.179E+3,0.150E+3,0.98460000E+0,0.95140000E+0 - ,0.38517040E+3,0.179E+3,0.151E+3,0.98460000E+0,0.97490000E+0 - ,0.36599200E+3,0.179E+3,0.152E+3,0.98460000E+0,0.98110000E+0 - ,0.33623370E+3,0.179E+3,0.153E+3,0.98460000E+0,0.99680000E+0 - ,0.44489470E+3,0.179E+3,0.155E+3,0.98460000E+0,0.99090000E+0 - ,0.92564640E+3,0.179E+3,0.156E+3,0.98460000E+0,0.97970000E+0 - ,0.69919040E+3,0.179E+3,0.157E+3,0.98460000E+0,0.19373000E+1 - ,0.44999540E+3,0.179E+3,0.159E+3,0.98460000E+0,0.29425000E+1 - ,0.44074490E+3,0.179E+3,0.160E+3,0.98460000E+0,0.29455000E+1 - ,0.42699740E+3,0.179E+3,0.161E+3,0.98460000E+0,0.29413000E+1 - ,0.42862430E+3,0.179E+3,0.162E+3,0.98460000E+0,0.29300000E+1 - ,0.41203450E+3,0.179E+3,0.163E+3,0.98460000E+0,0.18286000E+1 - ,0.43096490E+3,0.179E+3,0.164E+3,0.98460000E+0,0.28732000E+1 - ,0.40531130E+3,0.179E+3,0.165E+3,0.98460000E+0,0.29086000E+1 - ,0.41167450E+3,0.179E+3,0.166E+3,0.98460000E+0,0.28965000E+1 - ,0.38504690E+3,0.179E+3,0.167E+3,0.98460000E+0,0.29242000E+1 - ,0.37421380E+3,0.179E+3,0.168E+3,0.98460000E+0,0.29282000E+1 - ,0.37166190E+3,0.179E+3,0.169E+3,0.98460000E+0,0.29246000E+1 - ,0.38968240E+3,0.179E+3,0.170E+3,0.98460000E+0,0.28482000E+1 - ,0.35937430E+3,0.179E+3,0.171E+3,0.98460000E+0,0.29219000E+1 - ,0.48090340E+3,0.179E+3,0.172E+3,0.98460000E+0,0.19254000E+1 - ,0.44847840E+3,0.179E+3,0.173E+3,0.98460000E+0,0.19459000E+1 - ,0.41133730E+3,0.179E+3,0.174E+3,0.98460000E+0,0.19292000E+1 - ,0.41467050E+3,0.179E+3,0.175E+3,0.98460000E+0,0.18104000E+1 - ,0.36709540E+3,0.179E+3,0.176E+3,0.98460000E+0,0.18858000E+1 - ,0.34630750E+3,0.179E+3,0.177E+3,0.98460000E+0,0.18648000E+1 - ,0.33139460E+3,0.179E+3,0.178E+3,0.98460000E+0,0.19188000E+1 - ,0.31715610E+3,0.179E+3,0.179E+3,0.98460000E+0,0.98460000E+0 - ,0.29920300E+2,0.180E+3,0.100E+1,0.19896000E+1,0.91180000E+0 - ,0.20585200E+2,0.180E+3,0.200E+1,0.19896000E+1,0.00000000E+0 - ,0.41310610E+3,0.180E+3,0.300E+1,0.19896000E+1,0.00000000E+0 - ,0.25030210E+3,0.180E+3,0.400E+1,0.19896000E+1,0.00000000E+0 - ,0.17402940E+3,0.180E+3,0.500E+1,0.19896000E+1,0.00000000E+0 - ,0.12076050E+3,0.180E+3,0.600E+1,0.19896000E+1,0.00000000E+0 - ,0.86338200E+2,0.180E+3,0.700E+1,0.19896000E+1,0.00000000E+0 - ,0.66493700E+2,0.180E+3,0.800E+1,0.19896000E+1,0.00000000E+0 - ,0.51170200E+2,0.180E+3,0.900E+1,0.19896000E+1,0.00000000E+0 - ,0.39897400E+2,0.180E+3,0.100E+2,0.19896000E+1,0.00000000E+0 - ,0.49600030E+3,0.180E+3,0.110E+2,0.19896000E+1,0.00000000E+0 - ,0.39561740E+3,0.180E+3,0.120E+2,0.19896000E+1,0.00000000E+0 - ,0.37029810E+3,0.180E+3,0.130E+2,0.19896000E+1,0.00000000E+0 - ,0.29804830E+3,0.180E+3,0.140E+2,0.19896000E+1,0.00000000E+0 - ,0.23698310E+3,0.180E+3,0.150E+2,0.19896000E+1,0.00000000E+0 - ,0.19943500E+3,0.180E+3,0.160E+2,0.19896000E+1,0.00000000E+0 - ,0.16520990E+3,0.180E+3,0.170E+2,0.19896000E+1,0.00000000E+0 - ,0.13693730E+3,0.180E+3,0.180E+2,0.19896000E+1,0.00000000E+0 - ,0.81050400E+3,0.180E+3,0.190E+2,0.19896000E+1,0.00000000E+0 - ,0.68633430E+3,0.180E+3,0.200E+2,0.19896000E+1,0.00000000E+0 - ,0.57063520E+3,0.180E+3,0.210E+2,0.19896000E+1,0.00000000E+0 - ,0.55496780E+3,0.180E+3,0.220E+2,0.19896000E+1,0.00000000E+0 - ,0.51028000E+3,0.180E+3,0.230E+2,0.19896000E+1,0.00000000E+0 - ,0.40344500E+3,0.180E+3,0.240E+2,0.19896000E+1,0.00000000E+0 - ,0.44199080E+3,0.180E+3,0.250E+2,0.19896000E+1,0.00000000E+0 - ,0.34847560E+3,0.180E+3,0.260E+2,0.19896000E+1,0.00000000E+0 - ,0.37126550E+3,0.180E+3,0.270E+2,0.19896000E+1,0.00000000E+0 - ,0.38080390E+3,0.180E+3,0.280E+2,0.19896000E+1,0.00000000E+0 - ,0.29324220E+3,0.180E+3,0.290E+2,0.19896000E+1,0.00000000E+0 - ,0.30381440E+3,0.180E+3,0.300E+2,0.19896000E+1,0.00000000E+0 - ,0.35775570E+3,0.180E+3,0.310E+2,0.19896000E+1,0.00000000E+0 - ,0.32047320E+3,0.180E+3,0.320E+2,0.19896000E+1,0.00000000E+0 - ,0.27762260E+3,0.180E+3,0.330E+2,0.19896000E+1,0.00000000E+0 - ,0.25175200E+3,0.180E+3,0.340E+2,0.19896000E+1,0.00000000E+0 - ,0.22282360E+3,0.180E+3,0.350E+2,0.19896000E+1,0.00000000E+0 - ,0.19592110E+3,0.180E+3,0.360E+2,0.19896000E+1,0.00000000E+0 - ,0.91174980E+3,0.180E+3,0.370E+2,0.19896000E+1,0.00000000E+0 - ,0.81778560E+3,0.180E+3,0.380E+2,0.19896000E+1,0.00000000E+0 - ,0.72486420E+3,0.180E+3,0.390E+2,0.19896000E+1,0.00000000E+0 - ,0.65664200E+3,0.180E+3,0.400E+2,0.19896000E+1,0.00000000E+0 - ,0.60218630E+3,0.180E+3,0.410E+2,0.19896000E+1,0.00000000E+0 - ,0.47017490E+3,0.180E+3,0.420E+2,0.19896000E+1,0.00000000E+0 - ,0.52236590E+3,0.180E+3,0.430E+2,0.19896000E+1,0.00000000E+0 - ,0.40291110E+3,0.180E+3,0.440E+2,0.19896000E+1,0.00000000E+0 - ,0.43946430E+3,0.180E+3,0.450E+2,0.19896000E+1,0.00000000E+0 - ,0.40902800E+3,0.180E+3,0.460E+2,0.19896000E+1,0.00000000E+0 - ,0.34173120E+3,0.180E+3,0.470E+2,0.19896000E+1,0.00000000E+0 - ,0.36219820E+3,0.180E+3,0.480E+2,0.19896000E+1,0.00000000E+0 - ,0.44915100E+3,0.180E+3,0.490E+2,0.19896000E+1,0.00000000E+0 - ,0.42020430E+3,0.180E+3,0.500E+2,0.19896000E+1,0.00000000E+0 - ,0.37928220E+3,0.180E+3,0.510E+2,0.19896000E+1,0.00000000E+0 - ,0.35482940E+3,0.180E+3,0.520E+2,0.19896000E+1,0.00000000E+0 - ,0.32385100E+3,0.180E+3,0.530E+2,0.19896000E+1,0.00000000E+0 - ,0.29389350E+3,0.180E+3,0.540E+2,0.19896000E+1,0.00000000E+0 - ,0.11120309E+4,0.180E+3,0.550E+2,0.19896000E+1,0.00000000E+0 - ,0.10396919E+4,0.180E+3,0.560E+2,0.19896000E+1,0.00000000E+0 - ,0.92389520E+3,0.180E+3,0.570E+2,0.19896000E+1,0.00000000E+0 - ,0.44756220E+3,0.180E+3,0.580E+2,0.19896000E+1,0.27991000E+1 - ,0.92541710E+3,0.180E+3,0.590E+2,0.19896000E+1,0.00000000E+0 - ,0.89016940E+3,0.180E+3,0.600E+2,0.19896000E+1,0.00000000E+0 - ,0.86825330E+3,0.180E+3,0.610E+2,0.19896000E+1,0.00000000E+0 - ,0.84803530E+3,0.180E+3,0.620E+2,0.19896000E+1,0.00000000E+0 - ,0.83011710E+3,0.180E+3,0.630E+2,0.19896000E+1,0.00000000E+0 - ,0.66249390E+3,0.180E+3,0.640E+2,0.19896000E+1,0.00000000E+0 - ,0.73314800E+3,0.180E+3,0.650E+2,0.19896000E+1,0.00000000E+0 - ,0.70872400E+3,0.180E+3,0.660E+2,0.19896000E+1,0.00000000E+0 - ,0.75071540E+3,0.180E+3,0.670E+2,0.19896000E+1,0.00000000E+0 - ,0.73493810E+3,0.180E+3,0.680E+2,0.19896000E+1,0.00000000E+0 - ,0.72083100E+3,0.180E+3,0.690E+2,0.19896000E+1,0.00000000E+0 - ,0.71192400E+3,0.180E+3,0.700E+2,0.19896000E+1,0.00000000E+0 - ,0.60586800E+3,0.180E+3,0.710E+2,0.19896000E+1,0.00000000E+0 - ,0.60248380E+3,0.180E+3,0.720E+2,0.19896000E+1,0.00000000E+0 - ,0.55437230E+3,0.180E+3,0.730E+2,0.19896000E+1,0.00000000E+0 - ,0.47211020E+3,0.180E+3,0.740E+2,0.19896000E+1,0.00000000E+0 - ,0.48147760E+3,0.180E+3,0.750E+2,0.19896000E+1,0.00000000E+0 - ,0.43962380E+3,0.180E+3,0.760E+2,0.19896000E+1,0.00000000E+0 - ,0.40514540E+3,0.180E+3,0.770E+2,0.19896000E+1,0.00000000E+0 - ,0.33947380E+3,0.180E+3,0.780E+2,0.19896000E+1,0.00000000E+0 - ,0.31826990E+3,0.180E+3,0.790E+2,0.19896000E+1,0.00000000E+0 - ,0.32785490E+3,0.180E+3,0.800E+2,0.19896000E+1,0.00000000E+0 - ,0.46406660E+3,0.180E+3,0.810E+2,0.19896000E+1,0.00000000E+0 - ,0.45741320E+3,0.180E+3,0.820E+2,0.19896000E+1,0.00000000E+0 - ,0.42489250E+3,0.180E+3,0.830E+2,0.19896000E+1,0.00000000E+0 - ,0.40796160E+3,0.180E+3,0.840E+2,0.19896000E+1,0.00000000E+0 - ,0.37973280E+3,0.180E+3,0.850E+2,0.19896000E+1,0.00000000E+0 - ,0.35093490E+3,0.180E+3,0.860E+2,0.19896000E+1,0.00000000E+0 - ,0.10599693E+4,0.180E+3,0.870E+2,0.19896000E+1,0.00000000E+0 - ,0.10346573E+4,0.180E+3,0.880E+2,0.19896000E+1,0.00000000E+0 - ,0.92429380E+3,0.180E+3,0.890E+2,0.19896000E+1,0.00000000E+0 - ,0.84192530E+3,0.180E+3,0.900E+2,0.19896000E+1,0.00000000E+0 - ,0.83161820E+3,0.180E+3,0.910E+2,0.19896000E+1,0.00000000E+0 - ,0.80561970E+3,0.180E+3,0.920E+2,0.19896000E+1,0.00000000E+0 - ,0.82308290E+3,0.180E+3,0.930E+2,0.19896000E+1,0.00000000E+0 - ,0.79816520E+3,0.180E+3,0.940E+2,0.19896000E+1,0.00000000E+0 - ,0.47166200E+2,0.180E+3,0.101E+3,0.19896000E+1,0.00000000E+0 - ,0.14625750E+3,0.180E+3,0.103E+3,0.19896000E+1,0.98650000E+0 - ,0.18779790E+3,0.180E+3,0.104E+3,0.19896000E+1,0.98080000E+0 - ,0.14752400E+3,0.180E+3,0.105E+3,0.19896000E+1,0.97060000E+0 - ,0.11336050E+3,0.180E+3,0.106E+3,0.19896000E+1,0.98680000E+0 - ,0.80647100E+2,0.180E+3,0.107E+3,0.19896000E+1,0.99440000E+0 - ,0.59931300E+2,0.180E+3,0.108E+3,0.19896000E+1,0.99250000E+0 - ,0.42319500E+2,0.180E+3,0.109E+3,0.19896000E+1,0.99820000E+0 - ,0.21316680E+3,0.180E+3,0.111E+3,0.19896000E+1,0.96840000E+0 - ,0.32853430E+3,0.180E+3,0.112E+3,0.19896000E+1,0.96280000E+0 - ,0.33698220E+3,0.180E+3,0.113E+3,0.19896000E+1,0.96480000E+0 - ,0.27645860E+3,0.180E+3,0.114E+3,0.19896000E+1,0.95070000E+0 - ,0.23025850E+3,0.180E+3,0.115E+3,0.19896000E+1,0.99470000E+0 - ,0.19722520E+3,0.180E+3,0.116E+3,0.19896000E+1,0.99480000E+0 - ,0.16349210E+3,0.180E+3,0.117E+3,0.19896000E+1,0.99720000E+0 - ,0.29887190E+3,0.180E+3,0.119E+3,0.19896000E+1,0.97670000E+0 - ,0.55142200E+3,0.180E+3,0.120E+3,0.19896000E+1,0.98310000E+0 - ,0.30295130E+3,0.180E+3,0.121E+3,0.19896000E+1,0.18627000E+1 - ,0.29286460E+3,0.180E+3,0.122E+3,0.19896000E+1,0.18299000E+1 - ,0.28701690E+3,0.180E+3,0.123E+3,0.19896000E+1,0.19138000E+1 - ,0.28389530E+3,0.180E+3,0.124E+3,0.19896000E+1,0.18269000E+1 - ,0.26347450E+3,0.180E+3,0.125E+3,0.19896000E+1,0.16406000E+1 - ,0.24469520E+3,0.180E+3,0.126E+3,0.19896000E+1,0.16483000E+1 - ,0.23357610E+3,0.180E+3,0.127E+3,0.19896000E+1,0.17149000E+1 - ,0.22821280E+3,0.180E+3,0.128E+3,0.19896000E+1,0.17937000E+1 - ,0.22401780E+3,0.180E+3,0.129E+3,0.19896000E+1,0.95760000E+0 - ,0.21272240E+3,0.180E+3,0.130E+3,0.19896000E+1,0.19419000E+1 - ,0.33741410E+3,0.180E+3,0.131E+3,0.19896000E+1,0.96010000E+0 - ,0.30105020E+3,0.180E+3,0.132E+3,0.19896000E+1,0.94340000E+0 - ,0.27320270E+3,0.180E+3,0.133E+3,0.19896000E+1,0.98890000E+0 - ,0.25183060E+3,0.180E+3,0.134E+3,0.19896000E+1,0.99010000E+0 - ,0.22426200E+3,0.180E+3,0.135E+3,0.19896000E+1,0.99740000E+0 - ,0.35823720E+3,0.180E+3,0.137E+3,0.19896000E+1,0.97380000E+0 - ,0.67072660E+3,0.180E+3,0.138E+3,0.19896000E+1,0.98010000E+0 - ,0.52511790E+3,0.180E+3,0.139E+3,0.19896000E+1,0.19153000E+1 - ,0.40071700E+3,0.180E+3,0.140E+3,0.19896000E+1,0.19355000E+1 - ,0.40464840E+3,0.180E+3,0.141E+3,0.19896000E+1,0.19545000E+1 - ,0.37897070E+3,0.180E+3,0.142E+3,0.19896000E+1,0.19420000E+1 - ,0.42021610E+3,0.180E+3,0.143E+3,0.19896000E+1,0.16682000E+1 - ,0.33359820E+3,0.180E+3,0.144E+3,0.19896000E+1,0.18584000E+1 - ,0.31269220E+3,0.180E+3,0.145E+3,0.19896000E+1,0.19003000E+1 - ,0.29116220E+3,0.180E+3,0.146E+3,0.19896000E+1,0.18630000E+1 - ,0.28137530E+3,0.180E+3,0.147E+3,0.19896000E+1,0.96790000E+0 - ,0.27990990E+3,0.180E+3,0.148E+3,0.19896000E+1,0.19539000E+1 - ,0.43003950E+3,0.180E+3,0.149E+3,0.19896000E+1,0.96330000E+0 - ,0.39395270E+3,0.180E+3,0.150E+3,0.19896000E+1,0.95140000E+0 - ,0.37239970E+3,0.180E+3,0.151E+3,0.19896000E+1,0.97490000E+0 - ,0.35473990E+3,0.180E+3,0.152E+3,0.19896000E+1,0.98110000E+0 - ,0.32681510E+3,0.180E+3,0.153E+3,0.19896000E+1,0.99680000E+0 - ,0.42730670E+3,0.180E+3,0.155E+3,0.19896000E+1,0.99090000E+0 - ,0.86655170E+3,0.180E+3,0.156E+3,0.19896000E+1,0.97970000E+0 - ,0.66355950E+3,0.180E+3,0.157E+3,0.19896000E+1,0.19373000E+1 - ,0.43445080E+3,0.180E+3,0.159E+3,0.19896000E+1,0.29425000E+1 - ,0.42554240E+3,0.180E+3,0.160E+3,0.19896000E+1,0.29455000E+1 - ,0.41237370E+3,0.180E+3,0.161E+3,0.19896000E+1,0.29413000E+1 - ,0.41361800E+3,0.180E+3,0.162E+3,0.19896000E+1,0.29300000E+1 - ,0.39655650E+3,0.180E+3,0.163E+3,0.19896000E+1,0.18286000E+1 - ,0.41578790E+3,0.180E+3,0.164E+3,0.19896000E+1,0.28732000E+1 - ,0.39129420E+3,0.180E+3,0.165E+3,0.19896000E+1,0.29086000E+1 - ,0.39685720E+3,0.180E+3,0.166E+3,0.19896000E+1,0.28965000E+1 - ,0.37198460E+3,0.180E+3,0.167E+3,0.19896000E+1,0.29242000E+1 - ,0.36161110E+3,0.180E+3,0.168E+3,0.19896000E+1,0.29282000E+1 - ,0.35907550E+3,0.180E+3,0.169E+3,0.19896000E+1,0.29246000E+1 - ,0.37609030E+3,0.180E+3,0.170E+3,0.19896000E+1,0.28482000E+1 - ,0.34734250E+3,0.180E+3,0.171E+3,0.19896000E+1,0.29219000E+1 - ,0.46039360E+3,0.180E+3,0.172E+3,0.19896000E+1,0.19254000E+1 - ,0.43075880E+3,0.180E+3,0.173E+3,0.19896000E+1,0.19459000E+1 - ,0.39639370E+3,0.180E+3,0.174E+3,0.19896000E+1,0.19292000E+1 - ,0.39843040E+3,0.180E+3,0.175E+3,0.19896000E+1,0.18104000E+1 - ,0.35538470E+3,0.180E+3,0.176E+3,0.19896000E+1,0.18858000E+1 - ,0.33559480E+3,0.180E+3,0.177E+3,0.19896000E+1,0.18648000E+1 - ,0.32133060E+3,0.180E+3,0.178E+3,0.19896000E+1,0.19188000E+1 - ,0.30747100E+3,0.180E+3,0.179E+3,0.19896000E+1,0.98460000E+0 - ,0.29886160E+3,0.180E+3,0.180E+3,0.19896000E+1,0.19896000E+1 - ,0.45657800E+2,0.181E+3,0.100E+1,0.92670000E+0,0.91180000E+0 - ,0.29528900E+2,0.181E+3,0.200E+1,0.92670000E+0,0.00000000E+0 - ,0.81893710E+3,0.181E+3,0.300E+1,0.92670000E+0,0.00000000E+0 - ,0.44031470E+3,0.181E+3,0.400E+1,0.92670000E+0,0.00000000E+0 - ,0.28625250E+3,0.181E+3,0.500E+1,0.92670000E+0,0.00000000E+0 - ,0.18889680E+3,0.181E+3,0.600E+1,0.92670000E+0,0.00000000E+0 - ,0.13007910E+3,0.181E+3,0.700E+1,0.92670000E+0,0.00000000E+0 - ,0.97551000E+2,0.181E+3,0.800E+1,0.92670000E+0,0.00000000E+0 - ,0.73378400E+2,0.181E+3,0.900E+1,0.92670000E+0,0.00000000E+0 - ,0.56174600E+2,0.181E+3,0.100E+2,0.92670000E+0,0.00000000E+0 - ,0.97532750E+3,0.181E+3,0.110E+2,0.92670000E+0,0.00000000E+0 - ,0.71024040E+3,0.181E+3,0.120E+2,0.92670000E+0,0.00000000E+0 - ,0.64228990E+3,0.181E+3,0.130E+2,0.92670000E+0,0.00000000E+0 - ,0.49356290E+3,0.181E+3,0.140E+2,0.92670000E+0,0.00000000E+0 - ,0.37740890E+3,0.181E+3,0.150E+2,0.92670000E+0,0.00000000E+0 - ,0.30961610E+3,0.181E+3,0.160E+2,0.92670000E+0,0.00000000E+0 - ,0.25028720E+3,0.181E+3,0.170E+2,0.92670000E+0,0.00000000E+0 - ,0.20307020E+3,0.181E+3,0.180E+2,0.92670000E+0,0.00000000E+0 - ,0.16199398E+4,0.181E+3,0.190E+2,0.92670000E+0,0.00000000E+0 - ,0.12768842E+4,0.181E+3,0.200E+2,0.92670000E+0,0.00000000E+0 - ,0.10446215E+4,0.181E+3,0.210E+2,0.92670000E+0,0.00000000E+0 - ,0.10005590E+4,0.181E+3,0.220E+2,0.92670000E+0,0.00000000E+0 - ,0.91170000E+3,0.181E+3,0.230E+2,0.92670000E+0,0.00000000E+0 - ,0.71835580E+3,0.181E+3,0.240E+2,0.92670000E+0,0.00000000E+0 - ,0.77938520E+3,0.181E+3,0.250E+2,0.92670000E+0,0.00000000E+0 - ,0.61131150E+3,0.181E+3,0.260E+2,0.92670000E+0,0.00000000E+0 - ,0.64053000E+3,0.181E+3,0.270E+2,0.92670000E+0,0.00000000E+0 - ,0.66311020E+3,0.181E+3,0.280E+2,0.92670000E+0,0.00000000E+0 - ,0.50888790E+3,0.181E+3,0.290E+2,0.92670000E+0,0.00000000E+0 - ,0.51381200E+3,0.181E+3,0.300E+2,0.92670000E+0,0.00000000E+0 - ,0.61125030E+3,0.181E+3,0.310E+2,0.92670000E+0,0.00000000E+0 - ,0.52855090E+3,0.181E+3,0.320E+2,0.92670000E+0,0.00000000E+0 - ,0.44341250E+3,0.181E+3,0.330E+2,0.92670000E+0,0.00000000E+0 - ,0.39408000E+3,0.181E+3,0.340E+2,0.92670000E+0,0.00000000E+0 - ,0.34165520E+3,0.181E+3,0.350E+2,0.92670000E+0,0.00000000E+0 - ,0.29473510E+3,0.181E+3,0.360E+2,0.92670000E+0,0.00000000E+0 - ,0.18096860E+4,0.181E+3,0.370E+2,0.92670000E+0,0.00000000E+0 - ,0.15245549E+4,0.181E+3,0.380E+2,0.92670000E+0,0.00000000E+0 - ,0.13131378E+4,0.181E+3,0.390E+2,0.92670000E+0,0.00000000E+0 - ,0.11682143E+4,0.181E+3,0.400E+2,0.92670000E+0,0.00000000E+0 - ,0.10584151E+4,0.181E+3,0.410E+2,0.92670000E+0,0.00000000E+0 - ,0.80855780E+3,0.181E+3,0.420E+2,0.92670000E+0,0.00000000E+0 - ,0.90569280E+3,0.181E+3,0.430E+2,0.92670000E+0,0.00000000E+0 - ,0.68207110E+3,0.181E+3,0.440E+2,0.92670000E+0,0.00000000E+0 - ,0.74493760E+3,0.181E+3,0.450E+2,0.92670000E+0,0.00000000E+0 - ,0.68807030E+3,0.181E+3,0.460E+2,0.92670000E+0,0.00000000E+0 - ,0.57599280E+3,0.181E+3,0.470E+2,0.92670000E+0,0.00000000E+0 - ,0.60330050E+3,0.181E+3,0.480E+2,0.92670000E+0,0.00000000E+0 - ,0.76665730E+3,0.181E+3,0.490E+2,0.92670000E+0,0.00000000E+0 - ,0.69724530E+3,0.181E+3,0.500E+2,0.92670000E+0,0.00000000E+0 - ,0.61199840E+3,0.181E+3,0.510E+2,0.92670000E+0,0.00000000E+0 - ,0.56288000E+3,0.181E+3,0.520E+2,0.92670000E+0,0.00000000E+0 - ,0.50438410E+3,0.181E+3,0.530E+2,0.92670000E+0,0.00000000E+0 - ,0.44980100E+3,0.181E+3,0.540E+2,0.92670000E+0,0.00000000E+0 - ,0.22046359E+4,0.181E+3,0.550E+2,0.92670000E+0,0.00000000E+0 - ,0.19557490E+4,0.181E+3,0.560E+2,0.92670000E+0,0.00000000E+0 - ,0.16891285E+4,0.181E+3,0.570E+2,0.92670000E+0,0.00000000E+0 - ,0.72531910E+3,0.181E+3,0.580E+2,0.92670000E+0,0.27991000E+1 - ,0.17235094E+4,0.181E+3,0.590E+2,0.92670000E+0,0.00000000E+0 - ,0.16499797E+4,0.181E+3,0.600E+2,0.92670000E+0,0.00000000E+0 - ,0.16072448E+4,0.181E+3,0.610E+2,0.92670000E+0,0.00000000E+0 - ,0.15680817E+4,0.181E+3,0.620E+2,0.92670000E+0,0.00000000E+0 - ,0.15333057E+4,0.181E+3,0.630E+2,0.92670000E+0,0.00000000E+0 - ,0.11844744E+4,0.181E+3,0.640E+2,0.92670000E+0,0.00000000E+0 - ,0.13721977E+4,0.181E+3,0.650E+2,0.92670000E+0,0.00000000E+0 - ,0.13193709E+4,0.181E+3,0.660E+2,0.92670000E+0,0.00000000E+0 - ,0.13768441E+4,0.181E+3,0.670E+2,0.92670000E+0,0.00000000E+0 - ,0.13469267E+4,0.181E+3,0.680E+2,0.92670000E+0,0.00000000E+0 - ,0.13196608E+4,0.181E+3,0.690E+2,0.92670000E+0,0.00000000E+0 - ,0.13051597E+4,0.181E+3,0.700E+2,0.92670000E+0,0.00000000E+0 - ,0.10865229E+4,0.181E+3,0.710E+2,0.92670000E+0,0.00000000E+0 - ,0.10501050E+4,0.181E+3,0.720E+2,0.92670000E+0,0.00000000E+0 - ,0.94898330E+3,0.181E+3,0.730E+2,0.92670000E+0,0.00000000E+0 - ,0.79601210E+3,0.181E+3,0.740E+2,0.92670000E+0,0.00000000E+0 - ,0.80654170E+3,0.181E+3,0.750E+2,0.92670000E+0,0.00000000E+0 - ,0.72504930E+3,0.181E+3,0.760E+2,0.92670000E+0,0.00000000E+0 - ,0.65978220E+3,0.181E+3,0.770E+2,0.92670000E+0,0.00000000E+0 - ,0.54489940E+3,0.181E+3,0.780E+2,0.92670000E+0,0.00000000E+0 - ,0.50792100E+3,0.181E+3,0.790E+2,0.92670000E+0,0.00000000E+0 - ,0.52062730E+3,0.181E+3,0.800E+2,0.92670000E+0,0.00000000E+0 - ,0.78494960E+3,0.181E+3,0.810E+2,0.92670000E+0,0.00000000E+0 - ,0.75725660E+3,0.181E+3,0.820E+2,0.92670000E+0,0.00000000E+0 - ,0.68621680E+3,0.181E+3,0.830E+2,0.92670000E+0,0.00000000E+0 - ,0.64945010E+3,0.181E+3,0.840E+2,0.92670000E+0,0.00000000E+0 - ,0.59409560E+3,0.181E+3,0.850E+2,0.92670000E+0,0.00000000E+0 - ,0.54036210E+3,0.181E+3,0.860E+2,0.92670000E+0,0.00000000E+0 - ,0.20530994E+4,0.181E+3,0.870E+2,0.92670000E+0,0.00000000E+0 - ,0.19172106E+4,0.181E+3,0.880E+2,0.92670000E+0,0.00000000E+0 - ,0.16681370E+4,0.181E+3,0.890E+2,0.92670000E+0,0.00000000E+0 - ,0.14735523E+4,0.181E+3,0.900E+2,0.92670000E+0,0.00000000E+0 - ,0.14764021E+4,0.181E+3,0.910E+2,0.92670000E+0,0.00000000E+0 - ,0.14289400E+4,0.181E+3,0.920E+2,0.92670000E+0,0.00000000E+0 - ,0.14871204E+4,0.181E+3,0.930E+2,0.92670000E+0,0.00000000E+0 - ,0.14371768E+4,0.181E+3,0.940E+2,0.92670000E+0,0.00000000E+0 - ,0.74826500E+2,0.181E+3,0.101E+3,0.92670000E+0,0.00000000E+0 - ,0.25479910E+3,0.181E+3,0.103E+3,0.92670000E+0,0.98650000E+0 - ,0.32309330E+3,0.181E+3,0.104E+3,0.92670000E+0,0.98080000E+0 - ,0.23925450E+3,0.181E+3,0.105E+3,0.92670000E+0,0.97060000E+0 - ,0.17739330E+3,0.181E+3,0.106E+3,0.92670000E+0,0.98680000E+0 - ,0.12133560E+3,0.181E+3,0.107E+3,0.92670000E+0,0.99440000E+0 - ,0.87298300E+2,0.181E+3,0.108E+3,0.92670000E+0,0.99250000E+0 - ,0.59255000E+2,0.181E+3,0.109E+3,0.92670000E+0,0.99820000E+0 - ,0.37528460E+3,0.181E+3,0.111E+3,0.92670000E+0,0.96840000E+0 - ,0.58220680E+3,0.181E+3,0.112E+3,0.92670000E+0,0.96280000E+0 - ,0.57956000E+3,0.181E+3,0.113E+3,0.92670000E+0,0.96480000E+0 - ,0.45468720E+3,0.181E+3,0.114E+3,0.92670000E+0,0.95070000E+0 - ,0.36616070E+3,0.181E+3,0.115E+3,0.92670000E+0,0.99470000E+0 - ,0.30633030E+3,0.181E+3,0.116E+3,0.92670000E+0,0.99480000E+0 - ,0.24776880E+3,0.181E+3,0.117E+3,0.92670000E+0,0.99720000E+0 - ,0.51164600E+3,0.181E+3,0.119E+3,0.92670000E+0,0.97670000E+0 - ,0.10224025E+4,0.181E+3,0.120E+3,0.92670000E+0,0.98310000E+0 - ,0.50090730E+3,0.181E+3,0.121E+3,0.92670000E+0,0.18627000E+1 - ,0.48349150E+3,0.181E+3,0.122E+3,0.92670000E+0,0.18299000E+1 - ,0.47405210E+3,0.181E+3,0.123E+3,0.92670000E+0,0.19138000E+1 - ,0.47089950E+3,0.181E+3,0.124E+3,0.92670000E+0,0.18269000E+1 - ,0.42804350E+3,0.181E+3,0.125E+3,0.92670000E+0,0.16406000E+1 - ,0.39493390E+3,0.181E+3,0.126E+3,0.92670000E+0,0.16483000E+1 - ,0.37686900E+3,0.181E+3,0.127E+3,0.92670000E+0,0.17149000E+1 - ,0.36882120E+3,0.181E+3,0.128E+3,0.92670000E+0,0.17937000E+1 - ,0.36776620E+3,0.181E+3,0.129E+3,0.92670000E+0,0.95760000E+0 - ,0.33940980E+3,0.181E+3,0.130E+3,0.92670000E+0,0.19419000E+1 - ,0.57125400E+3,0.181E+3,0.131E+3,0.92670000E+0,0.96010000E+0 - ,0.49237270E+3,0.181E+3,0.132E+3,0.92670000E+0,0.94340000E+0 - ,0.43551000E+3,0.181E+3,0.133E+3,0.92670000E+0,0.98890000E+0 - ,0.39431080E+3,0.181E+3,0.134E+3,0.92670000E+0,0.99010000E+0 - ,0.34421330E+3,0.181E+3,0.135E+3,0.92670000E+0,0.99740000E+0 - ,0.60811700E+3,0.181E+3,0.137E+3,0.92670000E+0,0.97380000E+0 - ,0.12478398E+4,0.181E+3,0.138E+3,0.92670000E+0,0.98010000E+0 - ,0.92281660E+3,0.181E+3,0.139E+3,0.92670000E+0,0.19153000E+1 - ,0.66415540E+3,0.181E+3,0.140E+3,0.92670000E+0,0.19355000E+1 - ,0.67092560E+3,0.181E+3,0.141E+3,0.92670000E+0,0.19545000E+1 - ,0.62334490E+3,0.181E+3,0.142E+3,0.92670000E+0,0.19420000E+1 - ,0.71055610E+3,0.181E+3,0.143E+3,0.92670000E+0,0.16682000E+1 - ,0.53741150E+3,0.181E+3,0.144E+3,0.92670000E+0,0.18584000E+1 - ,0.50247720E+3,0.181E+3,0.145E+3,0.92670000E+0,0.19003000E+1 - ,0.46583490E+3,0.181E+3,0.146E+3,0.92670000E+0,0.18630000E+1 - ,0.45142980E+3,0.181E+3,0.147E+3,0.92670000E+0,0.96790000E+0 - ,0.44250690E+3,0.181E+3,0.148E+3,0.92670000E+0,0.19539000E+1 - ,0.72660300E+3,0.181E+3,0.149E+3,0.92670000E+0,0.96330000E+0 - ,0.64640140E+3,0.181E+3,0.150E+3,0.92670000E+0,0.95140000E+0 - ,0.59861930E+3,0.181E+3,0.151E+3,0.92670000E+0,0.97490000E+0 - ,0.56215510E+3,0.181E+3,0.152E+3,0.92670000E+0,0.98110000E+0 - ,0.50917420E+3,0.181E+3,0.153E+3,0.92670000E+0,0.99680000E+0 - ,0.70976410E+3,0.181E+3,0.155E+3,0.92670000E+0,0.99090000E+0 - ,0.16307553E+4,0.181E+3,0.156E+3,0.92670000E+0,0.97970000E+0 - ,0.11718156E+4,0.181E+3,0.157E+3,0.92670000E+0,0.19373000E+1 - ,0.70286450E+3,0.181E+3,0.159E+3,0.92670000E+0,0.29425000E+1 - ,0.68822190E+3,0.181E+3,0.160E+3,0.92670000E+0,0.29455000E+1 - ,0.66593910E+3,0.181E+3,0.161E+3,0.92670000E+0,0.29413000E+1 - ,0.67082470E+3,0.181E+3,0.162E+3,0.92670000E+0,0.29300000E+1 - ,0.65173940E+3,0.181E+3,0.163E+3,0.92670000E+0,0.18286000E+1 - ,0.67537850E+3,0.181E+3,0.164E+3,0.92670000E+0,0.28732000E+1 - ,0.63315820E+3,0.181E+3,0.165E+3,0.92670000E+0,0.29086000E+1 - ,0.64713510E+3,0.181E+3,0.166E+3,0.92670000E+0,0.28965000E+1 - ,0.59975110E+3,0.181E+3,0.167E+3,0.92670000E+0,0.29242000E+1 - ,0.58222680E+3,0.181E+3,0.168E+3,0.92670000E+0,0.29282000E+1 - ,0.57881040E+3,0.181E+3,0.169E+3,0.92670000E+0,0.29246000E+1 - ,0.61017640E+3,0.181E+3,0.170E+3,0.92670000E+0,0.28482000E+1 - ,0.55877490E+3,0.181E+3,0.171E+3,0.92670000E+0,0.29219000E+1 - ,0.77870390E+3,0.181E+3,0.172E+3,0.92670000E+0,0.19254000E+1 - ,0.71593350E+3,0.181E+3,0.173E+3,0.92670000E+0,0.19459000E+1 - ,0.64697310E+3,0.181E+3,0.174E+3,0.92670000E+0,0.19292000E+1 - ,0.66039260E+3,0.181E+3,0.175E+3,0.92670000E+0,0.18104000E+1 - ,0.56540350E+3,0.181E+3,0.176E+3,0.92670000E+0,0.18858000E+1 - ,0.53044050E+3,0.181E+3,0.177E+3,0.92670000E+0,0.18648000E+1 - ,0.50586340E+3,0.181E+3,0.178E+3,0.92670000E+0,0.19188000E+1 - ,0.48403950E+3,0.181E+3,0.179E+3,0.92670000E+0,0.98460000E+0 - ,0.46395530E+3,0.181E+3,0.180E+3,0.92670000E+0,0.19896000E+1 - ,0.77861880E+3,0.181E+3,0.181E+3,0.92670000E+0,0.92670000E+0 - ,0.42434000E+2,0.182E+3,0.100E+1,0.93830000E+0,0.91180000E+0 - ,0.27907300E+2,0.182E+3,0.200E+1,0.93830000E+0,0.00000000E+0 - ,0.68807560E+3,0.182E+3,0.300E+1,0.93830000E+0,0.00000000E+0 - ,0.38943570E+3,0.182E+3,0.400E+1,0.93830000E+0,0.00000000E+0 - ,0.25945980E+3,0.182E+3,0.500E+1,0.93830000E+0,0.00000000E+0 - ,0.17407890E+3,0.182E+3,0.600E+1,0.93830000E+0,0.00000000E+0 - ,0.12124080E+3,0.182E+3,0.700E+1,0.93830000E+0,0.00000000E+0 - ,0.91603500E+2,0.182E+3,0.800E+1,0.93830000E+0,0.00000000E+0 - ,0.69320700E+2,0.182E+3,0.900E+1,0.93830000E+0,0.00000000E+0 - ,0.53310500E+2,0.182E+3,0.100E+2,0.93830000E+0,0.00000000E+0 - ,0.82197960E+3,0.182E+3,0.110E+2,0.93830000E+0,0.00000000E+0 - ,0.62284710E+3,0.182E+3,0.120E+2,0.93830000E+0,0.00000000E+0 - ,0.57078670E+3,0.182E+3,0.130E+2,0.93830000E+0,0.00000000E+0 - ,0.44634760E+3,0.182E+3,0.140E+2,0.93830000E+0,0.00000000E+0 - ,0.34597620E+3,0.182E+3,0.150E+2,0.93830000E+0,0.00000000E+0 - ,0.28614180E+3,0.182E+3,0.160E+2,0.93830000E+0,0.00000000E+0 - ,0.23303850E+3,0.182E+3,0.170E+2,0.93830000E+0,0.00000000E+0 - ,0.19023650E+3,0.182E+3,0.180E+2,0.93830000E+0,0.00000000E+0 - ,0.13514635E+4,0.182E+3,0.190E+2,0.93830000E+0,0.00000000E+0 - ,0.11015257E+4,0.182E+3,0.200E+2,0.93830000E+0,0.00000000E+0 - ,0.90751920E+3,0.182E+3,0.210E+2,0.93830000E+0,0.00000000E+0 - ,0.87424690E+3,0.182E+3,0.220E+2,0.93830000E+0,0.00000000E+0 - ,0.79942710E+3,0.182E+3,0.230E+2,0.93830000E+0,0.00000000E+0 - ,0.62978200E+3,0.182E+3,0.240E+2,0.93830000E+0,0.00000000E+0 - ,0.68687860E+3,0.182E+3,0.250E+2,0.93830000E+0,0.00000000E+0 - ,0.53901900E+3,0.182E+3,0.260E+2,0.93830000E+0,0.00000000E+0 - ,0.56943390E+3,0.182E+3,0.270E+2,0.93830000E+0,0.00000000E+0 - ,0.58746310E+3,0.182E+3,0.280E+2,0.93830000E+0,0.00000000E+0 - ,0.45054860E+3,0.182E+3,0.290E+2,0.93830000E+0,0.00000000E+0 - ,0.46028610E+3,0.182E+3,0.300E+2,0.93830000E+0,0.00000000E+0 - ,0.54568040E+3,0.182E+3,0.310E+2,0.93830000E+0,0.00000000E+0 - ,0.47836640E+3,0.182E+3,0.320E+2,0.93830000E+0,0.00000000E+0 - ,0.40593740E+3,0.182E+3,0.330E+2,0.93830000E+0,0.00000000E+0 - ,0.36317430E+3,0.182E+3,0.340E+2,0.93830000E+0,0.00000000E+0 - ,0.31692710E+3,0.182E+3,0.350E+2,0.93830000E+0,0.00000000E+0 - ,0.27497470E+3,0.182E+3,0.360E+2,0.93830000E+0,0.00000000E+0 - ,0.15131000E+4,0.182E+3,0.370E+2,0.93830000E+0,0.00000000E+0 - ,0.13130553E+4,0.182E+3,0.380E+2,0.93830000E+0,0.00000000E+0 - ,0.11445456E+4,0.182E+3,0.390E+2,0.93830000E+0,0.00000000E+0 - ,0.10255674E+4,0.182E+3,0.400E+2,0.93830000E+0,0.00000000E+0 - ,0.93337410E+3,0.182E+3,0.410E+2,0.93830000E+0,0.00000000E+0 - ,0.71832310E+3,0.182E+3,0.420E+2,0.93830000E+0,0.00000000E+0 - ,0.80242420E+3,0.182E+3,0.430E+2,0.93830000E+0,0.00000000E+0 - ,0.60924720E+3,0.182E+3,0.440E+2,0.93830000E+0,0.00000000E+0 - ,0.66583460E+3,0.182E+3,0.450E+2,0.93830000E+0,0.00000000E+0 - ,0.61675520E+3,0.182E+3,0.460E+2,0.93830000E+0,0.00000000E+0 - ,0.51489300E+3,0.182E+3,0.470E+2,0.93830000E+0,0.00000000E+0 - ,0.54271640E+3,0.182E+3,0.480E+2,0.93830000E+0,0.00000000E+0 - ,0.68352170E+3,0.182E+3,0.490E+2,0.93830000E+0,0.00000000E+0 - ,0.62890890E+3,0.182E+3,0.500E+2,0.93830000E+0,0.00000000E+0 - ,0.55784160E+3,0.182E+3,0.510E+2,0.93830000E+0,0.00000000E+0 - ,0.51614750E+3,0.182E+3,0.520E+2,0.93830000E+0,0.00000000E+0 - ,0.46537870E+3,0.182E+3,0.530E+2,0.93830000E+0,0.00000000E+0 - ,0.41735550E+3,0.182E+3,0.540E+2,0.93830000E+0,0.00000000E+0 - ,0.18427711E+4,0.182E+3,0.550E+2,0.93830000E+0,0.00000000E+0 - ,0.16767003E+4,0.182E+3,0.560E+2,0.93830000E+0,0.00000000E+0 - ,0.14657704E+4,0.182E+3,0.570E+2,0.93830000E+0,0.00000000E+0 - ,0.65962730E+3,0.182E+3,0.580E+2,0.93830000E+0,0.27991000E+1 - ,0.14834234E+4,0.182E+3,0.590E+2,0.93830000E+0,0.00000000E+0 - ,0.14232913E+4,0.182E+3,0.600E+2,0.93830000E+0,0.00000000E+0 - ,0.13872742E+4,0.182E+3,0.610E+2,0.93830000E+0,0.00000000E+0 - ,0.13541823E+4,0.182E+3,0.620E+2,0.93830000E+0,0.00000000E+0 - ,0.13248237E+4,0.182E+3,0.630E+2,0.93830000E+0,0.00000000E+0 - ,0.10362745E+4,0.182E+3,0.640E+2,0.93830000E+0,0.00000000E+0 - ,0.11761635E+4,0.182E+3,0.650E+2,0.93830000E+0,0.00000000E+0 - ,0.11332571E+4,0.182E+3,0.660E+2,0.93830000E+0,0.00000000E+0 - ,0.11934379E+4,0.182E+3,0.670E+2,0.93830000E+0,0.00000000E+0 - ,0.11679468E+4,0.182E+3,0.680E+2,0.93830000E+0,0.00000000E+0 - ,0.11448817E+4,0.182E+3,0.690E+2,0.93830000E+0,0.00000000E+0 - ,0.11317397E+4,0.182E+3,0.700E+2,0.93830000E+0,0.00000000E+0 - ,0.95008080E+3,0.182E+3,0.710E+2,0.93830000E+0,0.00000000E+0 - ,0.92948800E+3,0.182E+3,0.720E+2,0.93830000E+0,0.00000000E+0 - ,0.84577140E+3,0.182E+3,0.730E+2,0.93830000E+0,0.00000000E+0 - ,0.71270800E+3,0.182E+3,0.740E+2,0.93830000E+0,0.00000000E+0 - ,0.72421000E+3,0.182E+3,0.750E+2,0.93830000E+0,0.00000000E+0 - ,0.65478150E+3,0.182E+3,0.760E+2,0.93830000E+0,0.00000000E+0 - ,0.59854060E+3,0.182E+3,0.770E+2,0.93830000E+0,0.00000000E+0 - ,0.49639040E+3,0.182E+3,0.780E+2,0.93830000E+0,0.00000000E+0 - ,0.46349930E+3,0.182E+3,0.790E+2,0.93830000E+0,0.00000000E+0 - ,0.47629930E+3,0.182E+3,0.800E+2,0.93830000E+0,0.00000000E+0 - ,0.70116210E+3,0.182E+3,0.810E+2,0.93830000E+0,0.00000000E+0 - ,0.68285450E+3,0.182E+3,0.820E+2,0.93830000E+0,0.00000000E+0 - ,0.62480060E+3,0.182E+3,0.830E+2,0.93830000E+0,0.00000000E+0 - ,0.59446280E+3,0.182E+3,0.840E+2,0.93830000E+0,0.00000000E+0 - ,0.54711560E+3,0.182E+3,0.850E+2,0.93830000E+0,0.00000000E+0 - ,0.50027110E+3,0.182E+3,0.860E+2,0.93830000E+0,0.00000000E+0 - ,0.17331333E+4,0.182E+3,0.870E+2,0.93830000E+0,0.00000000E+0 - ,0.16537357E+4,0.182E+3,0.880E+2,0.93830000E+0,0.00000000E+0 - ,0.14552479E+4,0.182E+3,0.890E+2,0.93830000E+0,0.00000000E+0 - ,0.13011870E+4,0.182E+3,0.900E+2,0.93830000E+0,0.00000000E+0 - ,0.12953664E+4,0.182E+3,0.910E+2,0.93830000E+0,0.00000000E+0 - ,0.12541422E+4,0.182E+3,0.920E+2,0.93830000E+0,0.00000000E+0 - ,0.12955258E+4,0.182E+3,0.930E+2,0.93830000E+0,0.00000000E+0 - ,0.12538462E+4,0.182E+3,0.940E+2,0.93830000E+0,0.00000000E+0 - ,0.68700900E+2,0.182E+3,0.101E+3,0.93830000E+0,0.00000000E+0 - ,0.22605860E+3,0.182E+3,0.103E+3,0.93830000E+0,0.98650000E+0 - ,0.28775870E+3,0.182E+3,0.104E+3,0.93830000E+0,0.98080000E+0 - ,0.21782360E+3,0.182E+3,0.105E+3,0.93830000E+0,0.97060000E+0 - ,0.16333240E+3,0.182E+3,0.106E+3,0.93830000E+0,0.98680000E+0 - ,0.11306740E+3,0.182E+3,0.107E+3,0.93830000E+0,0.99440000E+0 - ,0.82111500E+2,0.182E+3,0.108E+3,0.93830000E+0,0.99250000E+0 - ,0.56344500E+2,0.182E+3,0.109E+3,0.93830000E+0,0.99820000E+0 - ,0.33128460E+3,0.182E+3,0.111E+3,0.93830000E+0,0.96840000E+0 - ,0.51267930E+3,0.182E+3,0.112E+3,0.93830000E+0,0.96280000E+0 - ,0.51659790E+3,0.182E+3,0.113E+3,0.93830000E+0,0.96480000E+0 - ,0.41211230E+3,0.182E+3,0.114E+3,0.93830000E+0,0.95070000E+0 - ,0.33577950E+3,0.182E+3,0.115E+3,0.93830000E+0,0.99470000E+0 - ,0.28302980E+3,0.182E+3,0.116E+3,0.93830000E+0,0.99480000E+0 - ,0.23064950E+3,0.182E+3,0.117E+3,0.93830000E+0,0.99720000E+0 - ,0.45512070E+3,0.182E+3,0.119E+3,0.93830000E+0,0.97670000E+0 - ,0.88099550E+3,0.182E+3,0.120E+3,0.93830000E+0,0.98310000E+0 - ,0.45242230E+3,0.182E+3,0.121E+3,0.93830000E+0,0.18627000E+1 - ,0.43671780E+3,0.182E+3,0.122E+3,0.93830000E+0,0.18299000E+1 - ,0.42807670E+3,0.182E+3,0.123E+3,0.93830000E+0,0.19138000E+1 - ,0.42446770E+3,0.182E+3,0.124E+3,0.93830000E+0,0.18269000E+1 - ,0.38917610E+3,0.182E+3,0.125E+3,0.93830000E+0,0.16406000E+1 - ,0.35985440E+3,0.182E+3,0.126E+3,0.93830000E+0,0.16483000E+1 - ,0.34332520E+3,0.182E+3,0.127E+3,0.93830000E+0,0.17149000E+1 - ,0.33576340E+3,0.182E+3,0.128E+3,0.93830000E+0,0.17937000E+1 - ,0.33269860E+3,0.182E+3,0.129E+3,0.93830000E+0,0.95760000E+0 - ,0.31058260E+3,0.182E+3,0.130E+3,0.93830000E+0,0.19419000E+1 - ,0.51174530E+3,0.182E+3,0.131E+3,0.93830000E+0,0.96010000E+0 - ,0.44693270E+3,0.182E+3,0.132E+3,0.93830000E+0,0.94340000E+0 - ,0.39894250E+3,0.182E+3,0.133E+3,0.93830000E+0,0.98890000E+0 - ,0.36333700E+3,0.182E+3,0.134E+3,0.93830000E+0,0.99010000E+0 - ,0.31918450E+3,0.182E+3,0.135E+3,0.93830000E+0,0.99740000E+0 - ,0.54238170E+3,0.182E+3,0.137E+3,0.93830000E+0,0.97380000E+0 - ,0.10728240E+4,0.182E+3,0.138E+3,0.93830000E+0,0.98010000E+0 - ,0.81213110E+3,0.182E+3,0.139E+3,0.93830000E+0,0.19153000E+1 - ,0.59868520E+3,0.182E+3,0.140E+3,0.93830000E+0,0.19355000E+1 - ,0.60472750E+3,0.182E+3,0.141E+3,0.93830000E+0,0.19545000E+1 - ,0.56326320E+3,0.182E+3,0.142E+3,0.93830000E+0,0.19420000E+1 - ,0.63469440E+3,0.182E+3,0.143E+3,0.93830000E+0,0.16682000E+1 - ,0.48944530E+3,0.182E+3,0.144E+3,0.93830000E+0,0.18584000E+1 - ,0.45783760E+3,0.182E+3,0.145E+3,0.93830000E+0,0.19003000E+1 - ,0.42497290E+3,0.182E+3,0.146E+3,0.93830000E+0,0.18630000E+1 - ,0.41137260E+3,0.182E+3,0.147E+3,0.93830000E+0,0.96790000E+0 - ,0.40583020E+3,0.182E+3,0.148E+3,0.93830000E+0,0.19539000E+1 - ,0.65042200E+3,0.182E+3,0.149E+3,0.93830000E+0,0.96330000E+0 - ,0.58543790E+3,0.182E+3,0.150E+3,0.93830000E+0,0.95140000E+0 - ,0.54638190E+3,0.182E+3,0.151E+3,0.93830000E+0,0.97490000E+0 - ,0.51567690E+3,0.182E+3,0.152E+3,0.93830000E+0,0.98110000E+0 - ,0.46975780E+3,0.182E+3,0.153E+3,0.93830000E+0,0.99680000E+0 - ,0.63871850E+3,0.182E+3,0.155E+3,0.93830000E+0,0.99090000E+0 - ,0.13938082E+4,0.182E+3,0.156E+3,0.93830000E+0,0.97970000E+0 - ,0.10287291E+4,0.182E+3,0.157E+3,0.93830000E+0,0.19373000E+1 - ,0.63957980E+3,0.182E+3,0.159E+3,0.93830000E+0,0.29425000E+1 - ,0.62632970E+3,0.182E+3,0.160E+3,0.93830000E+0,0.29455000E+1 - ,0.60635080E+3,0.182E+3,0.161E+3,0.93830000E+0,0.29413000E+1 - ,0.60975710E+3,0.182E+3,0.162E+3,0.93830000E+0,0.29300000E+1 - ,0.58924030E+3,0.182E+3,0.163E+3,0.93830000E+0,0.18286000E+1 - ,0.61369780E+3,0.182E+3,0.164E+3,0.93830000E+0,0.28732000E+1 - ,0.57611550E+3,0.182E+3,0.165E+3,0.93830000E+0,0.29086000E+1 - ,0.58697030E+3,0.182E+3,0.166E+3,0.93830000E+0,0.28965000E+1 - ,0.54649440E+3,0.182E+3,0.167E+3,0.93830000E+0,0.29242000E+1 - ,0.53080340E+3,0.182E+3,0.168E+3,0.93830000E+0,0.29282000E+1 - ,0.52748330E+3,0.182E+3,0.169E+3,0.93830000E+0,0.29246000E+1 - ,0.55493190E+3,0.182E+3,0.170E+3,0.93830000E+0,0.28482000E+1 - ,0.50965210E+3,0.182E+3,0.171E+3,0.93830000E+0,0.29219000E+1 - ,0.69621110E+3,0.182E+3,0.172E+3,0.93830000E+0,0.19254000E+1 - ,0.64434370E+3,0.182E+3,0.173E+3,0.93830000E+0,0.19459000E+1 - ,0.58625070E+3,0.182E+3,0.174E+3,0.93830000E+0,0.19292000E+1 - ,0.59480320E+3,0.182E+3,0.175E+3,0.93830000E+0,0.18104000E+1 - ,0.51723940E+3,0.182E+3,0.176E+3,0.93830000E+0,0.18858000E+1 - ,0.48623500E+3,0.182E+3,0.177E+3,0.93830000E+0,0.18648000E+1 - ,0.46424430E+3,0.182E+3,0.178E+3,0.93830000E+0,0.19188000E+1 - ,0.44400340E+3,0.182E+3,0.179E+3,0.93830000E+0,0.98460000E+0 - ,0.42798590E+3,0.182E+3,0.180E+3,0.93830000E+0,0.19896000E+1 - ,0.69795700E+3,0.182E+3,0.181E+3,0.93830000E+0,0.92670000E+0 - ,0.63299910E+3,0.182E+3,0.182E+3,0.93830000E+0,0.93830000E+0 - ,0.41596400E+2,0.183E+3,0.100E+1,0.98200000E+0,0.91180000E+0 - ,0.27609300E+2,0.183E+3,0.200E+1,0.98200000E+0,0.00000000E+0 - ,0.63913910E+3,0.183E+3,0.300E+1,0.98200000E+0,0.00000000E+0 - ,0.37140510E+3,0.183E+3,0.400E+1,0.98200000E+0,0.00000000E+0 - ,0.25081810E+3,0.183E+3,0.500E+1,0.98200000E+0,0.00000000E+0 - ,0.16984210E+3,0.183E+3,0.600E+1,0.98200000E+0,0.00000000E+0 - ,0.11903470E+3,0.183E+3,0.700E+1,0.98200000E+0,0.00000000E+0 - ,0.90305200E+2,0.183E+3,0.800E+1,0.98200000E+0,0.00000000E+0 - ,0.68559300E+2,0.183E+3,0.900E+1,0.98200000E+0,0.00000000E+0 - ,0.52850100E+2,0.183E+3,0.100E+2,0.98200000E+0,0.00000000E+0 - ,0.76472640E+3,0.183E+3,0.110E+2,0.98200000E+0,0.00000000E+0 - ,0.59132420E+3,0.183E+3,0.120E+2,0.98200000E+0,0.00000000E+0 - ,0.54586550E+3,0.183E+3,0.130E+2,0.98200000E+0,0.00000000E+0 - ,0.43092720E+3,0.183E+3,0.140E+2,0.98200000E+0,0.00000000E+0 - ,0.33654820E+3,0.183E+3,0.150E+2,0.98200000E+0,0.00000000E+0 - ,0.27961500E+3,0.183E+3,0.160E+2,0.98200000E+0,0.00000000E+0 - ,0.22867090E+3,0.183E+3,0.170E+2,0.98200000E+0,0.00000000E+0 - ,0.18730610E+3,0.183E+3,0.180E+2,0.98200000E+0,0.00000000E+0 - ,0.12519864E+4,0.183E+3,0.190E+2,0.98200000E+0,0.00000000E+0 - ,0.10371898E+4,0.183E+3,0.200E+2,0.98200000E+0,0.00000000E+0 - ,0.85756950E+3,0.183E+3,0.210E+2,0.98200000E+0,0.00000000E+0 - ,0.82873520E+3,0.183E+3,0.220E+2,0.98200000E+0,0.00000000E+0 - ,0.75924150E+3,0.183E+3,0.230E+2,0.98200000E+0,0.00000000E+0 - ,0.59825830E+3,0.183E+3,0.240E+2,0.98200000E+0,0.00000000E+0 - ,0.65412160E+3,0.183E+3,0.250E+2,0.98200000E+0,0.00000000E+0 - ,0.51359410E+3,0.183E+3,0.260E+2,0.98200000E+0,0.00000000E+0 - ,0.54475080E+3,0.183E+3,0.270E+2,0.98200000E+0,0.00000000E+0 - ,0.56093530E+3,0.183E+3,0.280E+2,0.98200000E+0,0.00000000E+0 - ,0.43021600E+3,0.183E+3,0.290E+2,0.98200000E+0,0.00000000E+0 - ,0.44212850E+3,0.183E+3,0.300E+2,0.98200000E+0,0.00000000E+0 - ,0.52324780E+3,0.183E+3,0.310E+2,0.98200000E+0,0.00000000E+0 - ,0.46207160E+3,0.183E+3,0.320E+2,0.98200000E+0,0.00000000E+0 - ,0.39458520E+3,0.183E+3,0.330E+2,0.98200000E+0,0.00000000E+0 - ,0.35432910E+3,0.183E+3,0.340E+2,0.98200000E+0,0.00000000E+0 - ,0.31033860E+3,0.183E+3,0.350E+2,0.98200000E+0,0.00000000E+0 - ,0.27012000E+3,0.183E+3,0.360E+2,0.98200000E+0,0.00000000E+0 - ,0.14036411E+4,0.183E+3,0.370E+2,0.98200000E+0,0.00000000E+0 - ,0.12355778E+4,0.183E+3,0.380E+2,0.98200000E+0,0.00000000E+0 - ,0.10837333E+4,0.183E+3,0.390E+2,0.98200000E+0,0.00000000E+0 - ,0.97477890E+3,0.183E+3,0.400E+2,0.98200000E+0,0.00000000E+0 - ,0.88933630E+3,0.183E+3,0.410E+2,0.98200000E+0,0.00000000E+0 - ,0.68726090E+3,0.183E+3,0.420E+2,0.98200000E+0,0.00000000E+0 - ,0.76655860E+3,0.183E+3,0.430E+2,0.98200000E+0,0.00000000E+0 - ,0.58463360E+3,0.183E+3,0.440E+2,0.98200000E+0,0.00000000E+0 - ,0.63898360E+3,0.183E+3,0.450E+2,0.98200000E+0,0.00000000E+0 - ,0.59276900E+3,0.183E+3,0.460E+2,0.98200000E+0,0.00000000E+0 - ,0.49433450E+3,0.183E+3,0.470E+2,0.98200000E+0,0.00000000E+0 - ,0.52259600E+3,0.183E+3,0.480E+2,0.98200000E+0,0.00000000E+0 - ,0.65509190E+3,0.183E+3,0.490E+2,0.98200000E+0,0.00000000E+0 - ,0.60640770E+3,0.183E+3,0.500E+2,0.98200000E+0,0.00000000E+0 - ,0.54093950E+3,0.183E+3,0.510E+2,0.98200000E+0,0.00000000E+0 - ,0.50216500E+3,0.183E+3,0.520E+2,0.98200000E+0,0.00000000E+0 - ,0.45432770E+3,0.183E+3,0.530E+2,0.98200000E+0,0.00000000E+0 - ,0.40872120E+3,0.183E+3,0.540E+2,0.98200000E+0,0.00000000E+0 - ,0.17098764E+4,0.183E+3,0.550E+2,0.98200000E+0,0.00000000E+0 - ,0.15744445E+4,0.183E+3,0.560E+2,0.98200000E+0,0.00000000E+0 - ,0.13849862E+4,0.183E+3,0.570E+2,0.98200000E+0,0.00000000E+0 - ,0.63893210E+3,0.183E+3,0.580E+2,0.98200000E+0,0.27991000E+1 - ,0.13958040E+4,0.183E+3,0.590E+2,0.98200000E+0,0.00000000E+0 - ,0.13406235E+4,0.183E+3,0.600E+2,0.98200000E+0,0.00000000E+0 - ,0.13070810E+4,0.183E+3,0.610E+2,0.98200000E+0,0.00000000E+0 - ,0.12762220E+4,0.183E+3,0.620E+2,0.98200000E+0,0.00000000E+0 - ,0.12488582E+4,0.183E+3,0.630E+2,0.98200000E+0,0.00000000E+0 - ,0.98347160E+3,0.183E+3,0.640E+2,0.98200000E+0,0.00000000E+0 - ,0.11050192E+4,0.183E+3,0.650E+2,0.98200000E+0,0.00000000E+0 - ,0.10659790E+4,0.183E+3,0.660E+2,0.98200000E+0,0.00000000E+0 - ,0.11267767E+4,0.183E+3,0.670E+2,0.98200000E+0,0.00000000E+0 - ,0.11029019E+4,0.183E+3,0.680E+2,0.98200000E+0,0.00000000E+0 - ,0.10813880E+4,0.183E+3,0.690E+2,0.98200000E+0,0.00000000E+0 - ,0.10686785E+4,0.183E+3,0.700E+2,0.98200000E+0,0.00000000E+0 - ,0.90128220E+3,0.183E+3,0.710E+2,0.98200000E+0,0.00000000E+0 - ,0.88729660E+3,0.183E+3,0.720E+2,0.98200000E+0,0.00000000E+0 - ,0.81034560E+3,0.183E+3,0.730E+2,0.98200000E+0,0.00000000E+0 - ,0.68471570E+3,0.183E+3,0.740E+2,0.98200000E+0,0.00000000E+0 - ,0.69676070E+3,0.183E+3,0.750E+2,0.98200000E+0,0.00000000E+0 - ,0.63189030E+3,0.183E+3,0.760E+2,0.98200000E+0,0.00000000E+0 - ,0.57901680E+3,0.183E+3,0.770E+2,0.98200000E+0,0.00000000E+0 - ,0.48134860E+3,0.183E+3,0.780E+2,0.98200000E+0,0.00000000E+0 - ,0.44988030E+3,0.183E+3,0.790E+2,0.98200000E+0,0.00000000E+0 - ,0.46287080E+3,0.183E+3,0.800E+2,0.98200000E+0,0.00000000E+0 - ,0.67290150E+3,0.183E+3,0.810E+2,0.98200000E+0,0.00000000E+0 - ,0.65843910E+3,0.183E+3,0.820E+2,0.98200000E+0,0.00000000E+0 - ,0.60554990E+3,0.183E+3,0.830E+2,0.98200000E+0,0.00000000E+0 - ,0.57780740E+3,0.183E+3,0.840E+2,0.98200000E+0,0.00000000E+0 - ,0.53356470E+3,0.183E+3,0.850E+2,0.98200000E+0,0.00000000E+0 - ,0.48931160E+3,0.183E+3,0.860E+2,0.98200000E+0,0.00000000E+0 - ,0.16162977E+4,0.183E+3,0.870E+2,0.98200000E+0,0.00000000E+0 - ,0.15578929E+4,0.183E+3,0.880E+2,0.98200000E+0,0.00000000E+0 - ,0.13787984E+4,0.183E+3,0.890E+2,0.98200000E+0,0.00000000E+0 - ,0.12407328E+4,0.183E+3,0.900E+2,0.98200000E+0,0.00000000E+0 - ,0.12312018E+4,0.183E+3,0.910E+2,0.98200000E+0,0.00000000E+0 - ,0.11922019E+4,0.183E+3,0.920E+2,0.98200000E+0,0.00000000E+0 - ,0.12266358E+4,0.183E+3,0.930E+2,0.98200000E+0,0.00000000E+0 - ,0.11880528E+4,0.183E+3,0.940E+2,0.98200000E+0,0.00000000E+0 - ,0.66885700E+2,0.183E+3,0.101E+3,0.98200000E+0,0.00000000E+0 - ,0.21599080E+3,0.183E+3,0.103E+3,0.98200000E+0,0.98650000E+0 - ,0.27562110E+3,0.183E+3,0.104E+3,0.98200000E+0,0.98080000E+0 - ,0.21110780E+3,0.183E+3,0.105E+3,0.98200000E+0,0.97060000E+0 - ,0.15930450E+3,0.183E+3,0.106E+3,0.98200000E+0,0.98680000E+0 - ,0.11100780E+3,0.183E+3,0.107E+3,0.98200000E+0,0.99440000E+0 - ,0.81023800E+2,0.183E+3,0.108E+3,0.98200000E+0,0.99250000E+0 - ,0.55921600E+2,0.183E+3,0.109E+3,0.98200000E+0,0.99820000E+0 - ,0.31569470E+3,0.183E+3,0.111E+3,0.98200000E+0,0.96840000E+0 - ,0.48798840E+3,0.183E+3,0.112E+3,0.98200000E+0,0.96280000E+0 - ,0.49488070E+3,0.183E+3,0.113E+3,0.98200000E+0,0.96480000E+0 - ,0.39838950E+3,0.183E+3,0.114E+3,0.98200000E+0,0.95070000E+0 - ,0.32670150E+3,0.183E+3,0.115E+3,0.98200000E+0,0.99470000E+0 - ,0.27653670E+3,0.183E+3,0.116E+3,0.98200000E+0,0.99480000E+0 - ,0.22630380E+3,0.183E+3,0.117E+3,0.98200000E+0,0.99720000E+0 - ,0.43578520E+3,0.183E+3,0.119E+3,0.98200000E+0,0.97670000E+0 - ,0.82978660E+3,0.183E+3,0.120E+3,0.98200000E+0,0.98310000E+0 - ,0.43655630E+3,0.183E+3,0.121E+3,0.98200000E+0,0.18627000E+1 - ,0.42148580E+3,0.183E+3,0.122E+3,0.98200000E+0,0.18299000E+1 - ,0.41307940E+3,0.183E+3,0.123E+3,0.98200000E+0,0.19138000E+1 - ,0.40921130E+3,0.183E+3,0.124E+3,0.98200000E+0,0.18269000E+1 - ,0.37685240E+3,0.183E+3,0.125E+3,0.98200000E+0,0.16406000E+1 - ,0.34888250E+3,0.183E+3,0.126E+3,0.98200000E+0,0.16483000E+1 - ,0.33284050E+3,0.183E+3,0.127E+3,0.98200000E+0,0.17149000E+1 - ,0.32538910E+3,0.183E+3,0.128E+3,0.98200000E+0,0.17937000E+1 - ,0.32133350E+3,0.183E+3,0.129E+3,0.98200000E+0,0.95760000E+0 - ,0.30179750E+3,0.183E+3,0.130E+3,0.98200000E+0,0.19419000E+1 - ,0.49162320E+3,0.183E+3,0.131E+3,0.98200000E+0,0.96010000E+0 - ,0.43241530E+3,0.183E+3,0.132E+3,0.98200000E+0,0.94340000E+0 - ,0.38792100E+3,0.183E+3,0.133E+3,0.98200000E+0,0.98890000E+0 - ,0.35446370E+3,0.183E+3,0.134E+3,0.98200000E+0,0.99010000E+0 - ,0.31248750E+3,0.183E+3,0.135E+3,0.98200000E+0,0.99740000E+0 - ,0.52015670E+3,0.183E+3,0.137E+3,0.98200000E+0,0.97380000E+0 - ,0.10095291E+4,0.183E+3,0.138E+3,0.98200000E+0,0.98010000E+0 - ,0.77362030E+3,0.183E+3,0.139E+3,0.98200000E+0,0.19153000E+1 - ,0.57727760E+3,0.183E+3,0.140E+3,0.98200000E+0,0.19355000E+1 - ,0.58300940E+3,0.183E+3,0.141E+3,0.98200000E+0,0.19545000E+1 - ,0.54383670E+3,0.183E+3,0.142E+3,0.98200000E+0,0.19420000E+1 - ,0.60923200E+3,0.183E+3,0.143E+3,0.98200000E+0,0.16682000E+1 - ,0.47449870E+3,0.183E+3,0.144E+3,0.98200000E+0,0.18584000E+1 - ,0.44399260E+3,0.183E+3,0.145E+3,0.98200000E+0,0.19003000E+1 - ,0.41240560E+3,0.183E+3,0.146E+3,0.98200000E+0,0.18630000E+1 - ,0.39894980E+3,0.183E+3,0.147E+3,0.98200000E+0,0.96790000E+0 - ,0.39486670E+3,0.183E+3,0.148E+3,0.98200000E+0,0.19539000E+1 - ,0.62469100E+3,0.183E+3,0.149E+3,0.98200000E+0,0.96330000E+0 - ,0.56575460E+3,0.183E+3,0.150E+3,0.98200000E+0,0.95140000E+0 - ,0.53022150E+3,0.183E+3,0.151E+3,0.98200000E+0,0.97490000E+0 - ,0.50181220E+3,0.183E+3,0.152E+3,0.98200000E+0,0.98110000E+0 - ,0.45858080E+3,0.183E+3,0.153E+3,0.98200000E+0,0.99680000E+0 - ,0.61548530E+3,0.183E+3,0.155E+3,0.98200000E+0,0.99090000E+0 - ,0.13081372E+4,0.183E+3,0.156E+3,0.98200000E+0,0.97970000E+0 - ,0.97887630E+3,0.183E+3,0.157E+3,0.98200000E+0,0.19373000E+1 - ,0.61971040E+3,0.183E+3,0.159E+3,0.98200000E+0,0.29425000E+1 - ,0.60690590E+3,0.183E+3,0.160E+3,0.98200000E+0,0.29455000E+1 - ,0.58770740E+3,0.183E+3,0.161E+3,0.98200000E+0,0.29413000E+1 - ,0.59049670E+3,0.183E+3,0.162E+3,0.98200000E+0,0.29300000E+1 - ,0.56898830E+3,0.183E+3,0.163E+3,0.98200000E+0,0.18286000E+1 - ,0.59417810E+3,0.183E+3,0.164E+3,0.98200000E+0,0.28732000E+1 - ,0.55818530E+3,0.183E+3,0.165E+3,0.98200000E+0,0.29086000E+1 - ,0.56779730E+3,0.183E+3,0.166E+3,0.98200000E+0,0.28965000E+1 - ,0.52988060E+3,0.183E+3,0.167E+3,0.98200000E+0,0.29242000E+1 - ,0.51480880E+3,0.183E+3,0.168E+3,0.98200000E+0,0.29282000E+1 - ,0.51148010E+3,0.183E+3,0.169E+3,0.98200000E+0,0.29246000E+1 - ,0.53747970E+3,0.183E+3,0.170E+3,0.98200000E+0,0.28482000E+1 - ,0.49440600E+3,0.183E+3,0.171E+3,0.98200000E+0,0.29219000E+1 - ,0.66852110E+3,0.183E+3,0.172E+3,0.98200000E+0,0.19254000E+1 - ,0.62087010E+3,0.183E+3,0.173E+3,0.98200000E+0,0.19459000E+1 - ,0.56690460E+3,0.183E+3,0.174E+3,0.98200000E+0,0.19292000E+1 - ,0.57334500E+3,0.183E+3,0.175E+3,0.98200000E+0,0.18104000E+1 - ,0.50267320E+3,0.183E+3,0.176E+3,0.98200000E+0,0.18858000E+1 - ,0.47305980E+3,0.183E+3,0.177E+3,0.98200000E+0,0.18648000E+1 - ,0.45195060E+3,0.183E+3,0.178E+3,0.98200000E+0,0.19188000E+1 - ,0.43215130E+3,0.183E+3,0.179E+3,0.98200000E+0,0.98460000E+0 - ,0.41777890E+3,0.183E+3,0.180E+3,0.98200000E+0,0.19896000E+1 - ,0.67100110E+3,0.183E+3,0.181E+3,0.98200000E+0,0.92670000E+0 - ,0.61223660E+3,0.183E+3,0.182E+3,0.98200000E+0,0.93830000E+0 - ,0.59404570E+3,0.183E+3,0.183E+3,0.98200000E+0,0.98200000E+0 - ,0.40784000E+2,0.184E+3,0.100E+1,0.98150000E+0,0.91180000E+0 - ,0.27292700E+2,0.184E+3,0.200E+1,0.98150000E+0,0.00000000E+0 - ,0.60378280E+3,0.184E+3,0.300E+1,0.98150000E+0,0.00000000E+0 - ,0.35667730E+3,0.184E+3,0.400E+1,0.98150000E+0,0.00000000E+0 - ,0.24325530E+3,0.184E+3,0.500E+1,0.98150000E+0,0.00000000E+0 - ,0.16591800E+3,0.184E+3,0.600E+1,0.98150000E+0,0.00000000E+0 - ,0.11689210E+3,0.184E+3,0.700E+1,0.98150000E+0,0.00000000E+0 - ,0.88996000E+2,0.184E+3,0.800E+1,0.98150000E+0,0.00000000E+0 - ,0.67762500E+2,0.184E+3,0.900E+1,0.98150000E+0,0.00000000E+0 - ,0.52352000E+2,0.184E+3,0.100E+2,0.98150000E+0,0.00000000E+0 - ,0.72318320E+3,0.184E+3,0.110E+2,0.98150000E+0,0.00000000E+0 - ,0.56618910E+3,0.184E+3,0.120E+2,0.98150000E+0,0.00000000E+0 - ,0.52532650E+3,0.184E+3,0.130E+2,0.98150000E+0,0.00000000E+0 - ,0.41751820E+3,0.184E+3,0.140E+2,0.98150000E+0,0.00000000E+0 - ,0.32794200E+3,0.184E+3,0.150E+2,0.98150000E+0,0.00000000E+0 - ,0.27346760E+3,0.184E+3,0.160E+2,0.98150000E+0,0.00000000E+0 - ,0.22441640E+3,0.184E+3,0.170E+2,0.98150000E+0,0.00000000E+0 - ,0.18436010E+3,0.184E+3,0.180E+2,0.98150000E+0,0.00000000E+0 - ,0.11819863E+4,0.184E+3,0.190E+2,0.98150000E+0,0.00000000E+0 - ,0.98827090E+3,0.184E+3,0.200E+2,0.98150000E+0,0.00000000E+0 - ,0.81891600E+3,0.184E+3,0.210E+2,0.98150000E+0,0.00000000E+0 - ,0.79312700E+3,0.184E+3,0.220E+2,0.98150000E+0,0.00000000E+0 - ,0.72754910E+3,0.184E+3,0.230E+2,0.98150000E+0,0.00000000E+0 - ,0.57361570E+3,0.184E+3,0.240E+2,0.98150000E+0,0.00000000E+0 - ,0.62798280E+3,0.184E+3,0.250E+2,0.98150000E+0,0.00000000E+0 - ,0.49346120E+3,0.184E+3,0.260E+2,0.98150000E+0,0.00000000E+0 - ,0.52458090E+3,0.184E+3,0.270E+2,0.98150000E+0,0.00000000E+0 - ,0.53944100E+3,0.184E+3,0.280E+2,0.98150000E+0,0.00000000E+0 - ,0.41395970E+3,0.184E+3,0.290E+2,0.98150000E+0,0.00000000E+0 - ,0.42696110E+3,0.184E+3,0.300E+2,0.98150000E+0,0.00000000E+0 - ,0.50466270E+3,0.184E+3,0.310E+2,0.98150000E+0,0.00000000E+0 - ,0.44793420E+3,0.184E+3,0.320E+2,0.98150000E+0,0.00000000E+0 - ,0.38430870E+3,0.184E+3,0.330E+2,0.98150000E+0,0.00000000E+0 - ,0.34611240E+3,0.184E+3,0.340E+2,0.98150000E+0,0.00000000E+0 - ,0.30404010E+3,0.184E+3,0.350E+2,0.98150000E+0,0.00000000E+0 - ,0.26534650E+3,0.184E+3,0.360E+2,0.98150000E+0,0.00000000E+0 - ,0.13265708E+4,0.184E+3,0.370E+2,0.98150000E+0,0.00000000E+0 - ,0.11770902E+4,0.184E+3,0.380E+2,0.98150000E+0,0.00000000E+0 - ,0.10365660E+4,0.184E+3,0.390E+2,0.98150000E+0,0.00000000E+0 - ,0.93473590E+3,0.184E+3,0.400E+2,0.98150000E+0,0.00000000E+0 - ,0.85428840E+3,0.184E+3,0.410E+2,0.98150000E+0,0.00000000E+0 - ,0.66224370E+3,0.184E+3,0.420E+2,0.98150000E+0,0.00000000E+0 - ,0.73778930E+3,0.184E+3,0.430E+2,0.98150000E+0,0.00000000E+0 - ,0.56459860E+3,0.184E+3,0.440E+2,0.98150000E+0,0.00000000E+0 - ,0.61691080E+3,0.184E+3,0.450E+2,0.98150000E+0,0.00000000E+0 - ,0.57289550E+3,0.184E+3,0.460E+2,0.98150000E+0,0.00000000E+0 - ,0.47765720E+3,0.184E+3,0.470E+2,0.98150000E+0,0.00000000E+0 - ,0.50575670E+3,0.184E+3,0.480E+2,0.98150000E+0,0.00000000E+0 - ,0.63186020E+3,0.184E+3,0.490E+2,0.98150000E+0,0.00000000E+0 - ,0.58725260E+3,0.184E+3,0.500E+2,0.98150000E+0,0.00000000E+0 - ,0.52598230E+3,0.184E+3,0.510E+2,0.98150000E+0,0.00000000E+0 - ,0.48950040E+3,0.184E+3,0.520E+2,0.98150000E+0,0.00000000E+0 - ,0.44405350E+3,0.184E+3,0.530E+2,0.98150000E+0,0.00000000E+0 - ,0.40048270E+3,0.184E+3,0.540E+2,0.98150000E+0,0.00000000E+0 - ,0.16166889E+4,0.184E+3,0.550E+2,0.98150000E+0,0.00000000E+0 - ,0.14983060E+4,0.184E+3,0.560E+2,0.98150000E+0,0.00000000E+0 - ,0.13231799E+4,0.184E+3,0.570E+2,0.98150000E+0,0.00000000E+0 - ,0.62088910E+3,0.184E+3,0.580E+2,0.98150000E+0,0.27991000E+1 - ,0.13300657E+4,0.184E+3,0.590E+2,0.98150000E+0,0.00000000E+0 - ,0.12782459E+4,0.184E+3,0.600E+2,0.98150000E+0,0.00000000E+0 - ,0.12464709E+4,0.184E+3,0.610E+2,0.98150000E+0,0.00000000E+0 - ,0.12172125E+4,0.184E+3,0.620E+2,0.98150000E+0,0.00000000E+0 - ,0.11912765E+4,0.184E+3,0.630E+2,0.98150000E+0,0.00000000E+0 - ,0.94248920E+3,0.184E+3,0.640E+2,0.98150000E+0,0.00000000E+0 - ,0.10526025E+4,0.184E+3,0.650E+2,0.98150000E+0,0.00000000E+0 - ,0.10162272E+4,0.184E+3,0.660E+2,0.98150000E+0,0.00000000E+0 - ,0.10758235E+4,0.184E+3,0.670E+2,0.98150000E+0,0.00000000E+0 - ,0.10531221E+4,0.184E+3,0.680E+2,0.98150000E+0,0.00000000E+0 - ,0.10327245E+4,0.184E+3,0.690E+2,0.98150000E+0,0.00000000E+0 - ,0.10203815E+4,0.184E+3,0.700E+2,0.98150000E+0,0.00000000E+0 - ,0.86329250E+3,0.184E+3,0.710E+2,0.98150000E+0,0.00000000E+0 - ,0.85331590E+3,0.184E+3,0.720E+2,0.98150000E+0,0.00000000E+0 - ,0.78130510E+3,0.184E+3,0.730E+2,0.98150000E+0,0.00000000E+0 - ,0.66165650E+3,0.184E+3,0.740E+2,0.98150000E+0,0.00000000E+0 - ,0.67388930E+3,0.184E+3,0.750E+2,0.98150000E+0,0.00000000E+0 - ,0.61248620E+3,0.184E+3,0.760E+2,0.98150000E+0,0.00000000E+0 - ,0.56223340E+3,0.184E+3,0.770E+2,0.98150000E+0,0.00000000E+0 - ,0.46834590E+3,0.184E+3,0.780E+2,0.98150000E+0,0.00000000E+0 - ,0.43807020E+3,0.184E+3,0.790E+2,0.98150000E+0,0.00000000E+0 - ,0.45102990E+3,0.184E+3,0.800E+2,0.98150000E+0,0.00000000E+0 - ,0.64993220E+3,0.184E+3,0.810E+2,0.98150000E+0,0.00000000E+0 - ,0.63784100E+3,0.184E+3,0.820E+2,0.98150000E+0,0.00000000E+0 - ,0.58869220E+3,0.184E+3,0.830E+2,0.98150000E+0,0.00000000E+0 - ,0.56290490E+3,0.184E+3,0.840E+2,0.98150000E+0,0.00000000E+0 - ,0.52111770E+3,0.184E+3,0.850E+2,0.98150000E+0,0.00000000E+0 - ,0.47899830E+3,0.184E+3,0.860E+2,0.98150000E+0,0.00000000E+0 - ,0.15330137E+4,0.184E+3,0.870E+2,0.98150000E+0,0.00000000E+0 - ,0.14856837E+4,0.184E+3,0.880E+2,0.98150000E+0,0.00000000E+0 - ,0.13195792E+4,0.184E+3,0.890E+2,0.98150000E+0,0.00000000E+0 - ,0.11925537E+4,0.184E+3,0.900E+2,0.98150000E+0,0.00000000E+0 - ,0.11810674E+4,0.184E+3,0.910E+2,0.98150000E+0,0.00000000E+0 - ,0.11437723E+4,0.184E+3,0.920E+2,0.98150000E+0,0.00000000E+0 - ,0.11736700E+4,0.184E+3,0.930E+2,0.98150000E+0,0.00000000E+0 - ,0.11372796E+4,0.184E+3,0.940E+2,0.98150000E+0,0.00000000E+0 - ,0.65214600E+2,0.184E+3,0.101E+3,0.98150000E+0,0.00000000E+0 - ,0.20772960E+3,0.184E+3,0.103E+3,0.98150000E+0,0.98650000E+0 - ,0.26561960E+3,0.184E+3,0.104E+3,0.98150000E+0,0.98080000E+0 - ,0.20516820E+3,0.184E+3,0.105E+3,0.98150000E+0,0.97060000E+0 - ,0.15561880E+3,0.184E+3,0.106E+3,0.98150000E+0,0.98680000E+0 - ,0.10902870E+3,0.184E+3,0.107E+3,0.98150000E+0,0.99440000E+0 - ,0.79923000E+2,0.184E+3,0.108E+3,0.98150000E+0,0.99250000E+0 - ,0.55445000E+2,0.184E+3,0.109E+3,0.98150000E+0,0.99820000E+0 - ,0.30313050E+3,0.184E+3,0.111E+3,0.98150000E+0,0.96840000E+0 - ,0.46821060E+3,0.184E+3,0.112E+3,0.98150000E+0,0.96280000E+0 - ,0.47685900E+3,0.184E+3,0.113E+3,0.98150000E+0,0.96480000E+0 - ,0.38638850E+3,0.184E+3,0.114E+3,0.98150000E+0,0.95070000E+0 - ,0.31841620E+3,0.184E+3,0.115E+3,0.98150000E+0,0.99470000E+0 - ,0.27043650E+3,0.184E+3,0.116E+3,0.98150000E+0,0.99480000E+0 - ,0.22208000E+3,0.184E+3,0.117E+3,0.98150000E+0,0.99720000E+0 - ,0.42021160E+3,0.184E+3,0.119E+3,0.98150000E+0,0.97670000E+0 - ,0.79141640E+3,0.184E+3,0.120E+3,0.98150000E+0,0.98310000E+0 - ,0.42299690E+3,0.184E+3,0.121E+3,0.98150000E+0,0.18627000E+1 - ,0.40851000E+3,0.184E+3,0.122E+3,0.98150000E+0,0.18299000E+1 - ,0.40032420E+3,0.184E+3,0.123E+3,0.98150000E+0,0.19138000E+1 - ,0.39632850E+3,0.184E+3,0.124E+3,0.98150000E+0,0.18269000E+1 - ,0.36605400E+3,0.184E+3,0.125E+3,0.98150000E+0,0.16406000E+1 - ,0.33920620E+3,0.184E+3,0.126E+3,0.98150000E+0,0.16483000E+1 - ,0.32362470E+3,0.184E+3,0.127E+3,0.98150000E+0,0.17149000E+1 - ,0.31630020E+3,0.184E+3,0.128E+3,0.98150000E+0,0.17937000E+1 - ,0.31163550E+3,0.184E+3,0.129E+3,0.98150000E+0,0.95760000E+0 - ,0.29390630E+3,0.184E+3,0.130E+3,0.98150000E+0,0.19419000E+1 - ,0.47478450E+3,0.184E+3,0.131E+3,0.98150000E+0,0.96010000E+0 - ,0.41970260E+3,0.184E+3,0.132E+3,0.98150000E+0,0.94340000E+0 - ,0.37792620E+3,0.184E+3,0.133E+3,0.98150000E+0,0.98890000E+0 - ,0.34623010E+3,0.184E+3,0.134E+3,0.98150000E+0,0.99010000E+0 - ,0.30609970E+3,0.184E+3,0.135E+3,0.98150000E+0,0.99740000E+0 - ,0.50220180E+3,0.184E+3,0.137E+3,0.98150000E+0,0.97380000E+0 - ,0.96252050E+3,0.184E+3,0.138E+3,0.98150000E+0,0.98010000E+0 - ,0.74349910E+3,0.184E+3,0.139E+3,0.98150000E+0,0.19153000E+1 - ,0.55925120E+3,0.184E+3,0.140E+3,0.98150000E+0,0.19355000E+1 - ,0.56472600E+3,0.184E+3,0.141E+3,0.98150000E+0,0.19545000E+1 - ,0.52739750E+3,0.184E+3,0.142E+3,0.98150000E+0,0.19420000E+1 - ,0.58857680E+3,0.184E+3,0.143E+3,0.98150000E+0,0.16682000E+1 - ,0.46147450E+3,0.184E+3,0.144E+3,0.98150000E+0,0.18584000E+1 - ,0.43195260E+3,0.184E+3,0.145E+3,0.98150000E+0,0.19003000E+1 - ,0.40145890E+3,0.184E+3,0.146E+3,0.98150000E+0,0.18630000E+1 - ,0.38817970E+3,0.184E+3,0.147E+3,0.98150000E+0,0.96790000E+0 - ,0.38501900E+3,0.184E+3,0.148E+3,0.98150000E+0,0.19539000E+1 - ,0.60340750E+3,0.184E+3,0.149E+3,0.98150000E+0,0.96330000E+0 - ,0.54877650E+3,0.184E+3,0.150E+3,0.98150000E+0,0.95140000E+0 - ,0.51584790E+3,0.184E+3,0.151E+3,0.98150000E+0,0.97490000E+0 - ,0.48923280E+3,0.184E+3,0.152E+3,0.98150000E+0,0.98110000E+0 - ,0.44819060E+3,0.184E+3,0.153E+3,0.98150000E+0,0.99680000E+0 - ,0.59616690E+3,0.184E+3,0.155E+3,0.98150000E+0,0.99090000E+0 - ,0.12455740E+4,0.184E+3,0.156E+3,0.98150000E+0,0.97970000E+0 - ,0.94022950E+3,0.184E+3,0.157E+3,0.98150000E+0,0.19373000E+1 - ,0.60235500E+3,0.184E+3,0.159E+3,0.98150000E+0,0.29425000E+1 - ,0.58993220E+3,0.184E+3,0.160E+3,0.98150000E+0,0.29455000E+1 - ,0.57139080E+3,0.184E+3,0.161E+3,0.98150000E+0,0.29413000E+1 - ,0.57376380E+3,0.184E+3,0.162E+3,0.98150000E+0,0.29300000E+1 - ,0.55177910E+3,0.184E+3,0.163E+3,0.98150000E+0,0.18286000E+1 - ,0.57720750E+3,0.184E+3,0.164E+3,0.98150000E+0,0.28732000E+1 - ,0.54252310E+3,0.184E+3,0.165E+3,0.98150000E+0,0.29086000E+1 - ,0.55128420E+3,0.184E+3,0.166E+3,0.98150000E+0,0.28965000E+1 - ,0.51527560E+3,0.184E+3,0.167E+3,0.98150000E+0,0.29242000E+1 - ,0.50071660E+3,0.184E+3,0.168E+3,0.98150000E+0,0.29282000E+1 - ,0.49739780E+3,0.184E+3,0.169E+3,0.98150000E+0,0.29246000E+1 - ,0.52220000E+3,0.184E+3,0.170E+3,0.98150000E+0,0.28482000E+1 - ,0.48093310E+3,0.184E+3,0.171E+3,0.98150000E+0,0.29219000E+1 - ,0.64584430E+3,0.184E+3,0.172E+3,0.98150000E+0,0.19254000E+1 - ,0.60127470E+3,0.184E+3,0.173E+3,0.98150000E+0,0.19459000E+1 - ,0.55039340E+3,0.184E+3,0.174E+3,0.98150000E+0,0.19292000E+1 - ,0.55542350E+3,0.184E+3,0.175E+3,0.98150000E+0,0.18104000E+1 - ,0.48976750E+3,0.184E+3,0.176E+3,0.98150000E+0,0.18858000E+1 - ,0.46132380E+3,0.184E+3,0.177E+3,0.98150000E+0,0.18648000E+1 - ,0.44097230E+3,0.184E+3,0.178E+3,0.98150000E+0,0.19188000E+1 - ,0.42163540E+3,0.184E+3,0.179E+3,0.98150000E+0,0.98460000E+0 - ,0.40842210E+3,0.184E+3,0.180E+3,0.98150000E+0,0.19896000E+1 - ,0.64879600E+3,0.184E+3,0.181E+3,0.98150000E+0,0.92670000E+0 - ,0.59436400E+3,0.184E+3,0.182E+3,0.98150000E+0,0.93830000E+0 - ,0.57797360E+3,0.184E+3,0.183E+3,0.98150000E+0,0.98200000E+0 - ,0.56324630E+3,0.184E+3,0.184E+3,0.98150000E+0,0.98150000E+0 - ,0.38512100E+2,0.185E+3,0.100E+1,0.99540000E+0,0.91180000E+0 - ,0.26111100E+2,0.185E+3,0.200E+1,0.99540000E+0,0.00000000E+0 - ,0.54178230E+3,0.185E+3,0.300E+1,0.99540000E+0,0.00000000E+0 - ,0.32704600E+3,0.185E+3,0.400E+1,0.99540000E+0,0.00000000E+0 - ,0.22612850E+3,0.185E+3,0.500E+1,0.99540000E+0,0.00000000E+0 - ,0.15586820E+3,0.185E+3,0.600E+1,0.99540000E+0,0.00000000E+0 - ,0.11068200E+3,0.185E+3,0.700E+1,0.99540000E+0,0.00000000E+0 - ,0.84740100E+2,0.185E+3,0.800E+1,0.99540000E+0,0.00000000E+0 - ,0.64828700E+2,0.185E+3,0.900E+1,0.99540000E+0,0.00000000E+0 - ,0.50274100E+2,0.185E+3,0.100E+2,0.99540000E+0,0.00000000E+0 - ,0.64991410E+3,0.185E+3,0.110E+2,0.99540000E+0,0.00000000E+0 - ,0.51713720E+3,0.185E+3,0.120E+2,0.99540000E+0,0.00000000E+0 - ,0.48314350E+3,0.185E+3,0.130E+2,0.99540000E+0,0.00000000E+0 - ,0.38756890E+3,0.185E+3,0.140E+2,0.99540000E+0,0.00000000E+0 - ,0.30689040E+3,0.185E+3,0.150E+2,0.99540000E+0,0.00000000E+0 - ,0.25730000E+3,0.185E+3,0.160E+2,0.99540000E+0,0.00000000E+0 - ,0.21224570E+3,0.185E+3,0.170E+2,0.99540000E+0,0.00000000E+0 - ,0.17515290E+3,0.185E+3,0.180E+2,0.99540000E+0,0.00000000E+0 - ,0.10605365E+4,0.185E+3,0.190E+2,0.99540000E+0,0.00000000E+0 - ,0.89715640E+3,0.185E+3,0.200E+2,0.99540000E+0,0.00000000E+0 - ,0.74554500E+3,0.185E+3,0.210E+2,0.99540000E+0,0.00000000E+0 - ,0.72428050E+3,0.185E+3,0.220E+2,0.99540000E+0,0.00000000E+0 - ,0.66556000E+3,0.185E+3,0.230E+2,0.99540000E+0,0.00000000E+0 - ,0.52534660E+3,0.185E+3,0.240E+2,0.99540000E+0,0.00000000E+0 - ,0.57594770E+3,0.185E+3,0.250E+2,0.99540000E+0,0.00000000E+0 - ,0.45323530E+3,0.185E+3,0.260E+2,0.99540000E+0,0.00000000E+0 - ,0.48311010E+3,0.185E+3,0.270E+2,0.99540000E+0,0.00000000E+0 - ,0.49587210E+3,0.185E+3,0.280E+2,0.99540000E+0,0.00000000E+0 - ,0.38099950E+3,0.185E+3,0.290E+2,0.99540000E+0,0.00000000E+0 - ,0.39473600E+3,0.185E+3,0.300E+2,0.99540000E+0,0.00000000E+0 - ,0.46567730E+3,0.185E+3,0.310E+2,0.99540000E+0,0.00000000E+0 - ,0.41619670E+3,0.185E+3,0.320E+2,0.99540000E+0,0.00000000E+0 - ,0.35943220E+3,0.185E+3,0.330E+2,0.99540000E+0,0.00000000E+0 - ,0.32508320E+3,0.185E+3,0.340E+2,0.99540000E+0,0.00000000E+0 - ,0.28681650E+3,0.185E+3,0.350E+2,0.99540000E+0,0.00000000E+0 - ,0.25132750E+3,0.185E+3,0.360E+2,0.99540000E+0,0.00000000E+0 - ,0.11921368E+4,0.185E+3,0.370E+2,0.99540000E+0,0.00000000E+0 - ,0.10684888E+4,0.185E+3,0.380E+2,0.99540000E+0,0.00000000E+0 - ,0.94594700E+3,0.185E+3,0.390E+2,0.99540000E+0,0.00000000E+0 - ,0.85598480E+3,0.185E+3,0.400E+2,0.99540000E+0,0.00000000E+0 - ,0.78421710E+3,0.185E+3,0.410E+2,0.99540000E+0,0.00000000E+0 - ,0.61069650E+3,0.185E+3,0.420E+2,0.99540000E+0,0.00000000E+0 - ,0.67919130E+3,0.185E+3,0.430E+2,0.99540000E+0,0.00000000E+0 - ,0.52232000E+3,0.185E+3,0.440E+2,0.99540000E+0,0.00000000E+0 - ,0.57034140E+3,0.185E+3,0.450E+2,0.99540000E+0,0.00000000E+0 - ,0.53043260E+3,0.185E+3,0.460E+2,0.99540000E+0,0.00000000E+0 - ,0.44233610E+3,0.185E+3,0.470E+2,0.99540000E+0,0.00000000E+0 - ,0.46916940E+3,0.185E+3,0.480E+2,0.99540000E+0,0.00000000E+0 - ,0.58336540E+3,0.185E+3,0.490E+2,0.99540000E+0,0.00000000E+0 - ,0.54506230E+3,0.185E+3,0.500E+2,0.99540000E+0,0.00000000E+0 - ,0.49091940E+3,0.185E+3,0.510E+2,0.99540000E+0,0.00000000E+0 - ,0.45847770E+3,0.185E+3,0.520E+2,0.99540000E+0,0.00000000E+0 - ,0.41750700E+3,0.185E+3,0.530E+2,0.99540000E+0,0.00000000E+0 - ,0.37792660E+3,0.185E+3,0.540E+2,0.99540000E+0,0.00000000E+0 - ,0.14538408E+4,0.185E+3,0.550E+2,0.99540000E+0,0.00000000E+0 - ,0.13583391E+4,0.185E+3,0.560E+2,0.99540000E+0,0.00000000E+0 - ,0.12057906E+4,0.185E+3,0.570E+2,0.99540000E+0,0.00000000E+0 - ,0.57911420E+3,0.185E+3,0.580E+2,0.99540000E+0,0.27991000E+1 - ,0.12080329E+4,0.185E+3,0.590E+2,0.99540000E+0,0.00000000E+0 - ,0.11618576E+4,0.185E+3,0.600E+2,0.99540000E+0,0.00000000E+0 - ,0.11332140E+4,0.185E+3,0.610E+2,0.99540000E+0,0.00000000E+0 - ,0.11068065E+4,0.185E+3,0.620E+2,0.99540000E+0,0.00000000E+0 - ,0.10834069E+4,0.185E+3,0.630E+2,0.99540000E+0,0.00000000E+0 - ,0.86266010E+3,0.185E+3,0.640E+2,0.99540000E+0,0.00000000E+0 - ,0.95596420E+3,0.185E+3,0.650E+2,0.99540000E+0,0.00000000E+0 - ,0.92391610E+3,0.185E+3,0.660E+2,0.99540000E+0,0.00000000E+0 - ,0.97957880E+3,0.185E+3,0.670E+2,0.99540000E+0,0.00000000E+0 - ,0.95900710E+3,0.185E+3,0.680E+2,0.99540000E+0,0.00000000E+0 - ,0.94059640E+3,0.185E+3,0.690E+2,0.99540000E+0,0.00000000E+0 - ,0.92908800E+3,0.185E+3,0.700E+2,0.99540000E+0,0.00000000E+0 - ,0.78950440E+3,0.185E+3,0.710E+2,0.99540000E+0,0.00000000E+0 - ,0.78448200E+3,0.185E+3,0.720E+2,0.99540000E+0,0.00000000E+0 - ,0.72081970E+3,0.185E+3,0.730E+2,0.99540000E+0,0.00000000E+0 - ,0.61248290E+3,0.185E+3,0.740E+2,0.99540000E+0,0.00000000E+0 - ,0.62450880E+3,0.185E+3,0.750E+2,0.99540000E+0,0.00000000E+0 - ,0.56934740E+3,0.185E+3,0.760E+2,0.99540000E+0,0.00000000E+0 - ,0.52395200E+3,0.185E+3,0.770E+2,0.99540000E+0,0.00000000E+0 - ,0.43782610E+3,0.185E+3,0.780E+2,0.99540000E+0,0.00000000E+0 - ,0.41001810E+3,0.185E+3,0.790E+2,0.99540000E+0,0.00000000E+0 - ,0.42247690E+3,0.185E+3,0.800E+2,0.99540000E+0,0.00000000E+0 - ,0.60141130E+3,0.185E+3,0.810E+2,0.99540000E+0,0.00000000E+0 - ,0.59244910E+3,0.185E+3,0.820E+2,0.99540000E+0,0.00000000E+0 - ,0.54942480E+3,0.185E+3,0.830E+2,0.99540000E+0,0.00000000E+0 - ,0.52688570E+3,0.185E+3,0.840E+2,0.99540000E+0,0.00000000E+0 - ,0.48951330E+3,0.185E+3,0.850E+2,0.99540000E+0,0.00000000E+0 - ,0.45144550E+3,0.185E+3,0.860E+2,0.99540000E+0,0.00000000E+0 - ,0.13844068E+4,0.185E+3,0.870E+2,0.99540000E+0,0.00000000E+0 - ,0.13507426E+4,0.185E+3,0.880E+2,0.99540000E+0,0.00000000E+0 - ,0.12053587E+4,0.185E+3,0.890E+2,0.99540000E+0,0.00000000E+0 - ,0.10957307E+4,0.185E+3,0.900E+2,0.99540000E+0,0.00000000E+0 - ,0.10824781E+4,0.185E+3,0.910E+2,0.99540000E+0,0.00000000E+0 - ,0.10484614E+4,0.185E+3,0.920E+2,0.99540000E+0,0.00000000E+0 - ,0.10720311E+4,0.185E+3,0.930E+2,0.99540000E+0,0.00000000E+0 - ,0.10394256E+4,0.185E+3,0.940E+2,0.99540000E+0,0.00000000E+0 - ,0.61075700E+2,0.185E+3,0.101E+3,0.99540000E+0,0.00000000E+0 - ,0.19088070E+3,0.185E+3,0.103E+3,0.99540000E+0,0.98650000E+0 - ,0.24479400E+3,0.185E+3,0.104E+3,0.99540000E+0,0.98080000E+0 - ,0.19130870E+3,0.185E+3,0.105E+3,0.99540000E+0,0.97060000E+0 - ,0.14621180E+3,0.185E+3,0.106E+3,0.99540000E+0,0.98680000E+0 - ,0.10328040E+3,0.185E+3,0.107E+3,0.99540000E+0,0.99440000E+0 - ,0.76218600E+2,0.185E+3,0.108E+3,0.99540000E+0,0.99250000E+0 - ,0.53309200E+2,0.185E+3,0.109E+3,0.99540000E+0,0.99820000E+0 - ,0.27800940E+3,0.185E+3,0.111E+3,0.99540000E+0,0.96840000E+0 - ,0.42891920E+3,0.185E+3,0.112E+3,0.99540000E+0,0.96280000E+0 - ,0.43934570E+3,0.185E+3,0.113E+3,0.99540000E+0,0.96480000E+0 - ,0.35920390E+3,0.185E+3,0.114E+3,0.99540000E+0,0.95070000E+0 - ,0.29808060E+3,0.185E+3,0.115E+3,0.99540000E+0,0.99470000E+0 - ,0.25442840E+3,0.185E+3,0.116E+3,0.99540000E+0,0.99480000E+0 - ,0.21002330E+3,0.185E+3,0.117E+3,0.99540000E+0,0.99720000E+0 - ,0.38791110E+3,0.185E+3,0.119E+3,0.99540000E+0,0.97670000E+0 - ,0.71971410E+3,0.185E+3,0.120E+3,0.99540000E+0,0.98310000E+0 - ,0.39289950E+3,0.185E+3,0.121E+3,0.99540000E+0,0.18627000E+1 - ,0.37962690E+3,0.185E+3,0.122E+3,0.99540000E+0,0.18299000E+1 - ,0.37198630E+3,0.185E+3,0.123E+3,0.99540000E+0,0.19138000E+1 - ,0.36797730E+3,0.185E+3,0.124E+3,0.99540000E+0,0.18269000E+1 - ,0.34117250E+3,0.185E+3,0.125E+3,0.99540000E+0,0.16406000E+1 - ,0.31658390E+3,0.185E+3,0.126E+3,0.99540000E+0,0.16483000E+1 - ,0.30208580E+3,0.185E+3,0.127E+3,0.99540000E+0,0.17149000E+1 - ,0.29515410E+3,0.185E+3,0.128E+3,0.99540000E+0,0.17937000E+1 - ,0.28991570E+3,0.185E+3,0.129E+3,0.99540000E+0,0.95760000E+0 - ,0.27492600E+3,0.185E+3,0.130E+3,0.99540000E+0,0.19419000E+1 - ,0.43890000E+3,0.185E+3,0.131E+3,0.99540000E+0,0.96010000E+0 - ,0.39064520E+3,0.185E+3,0.132E+3,0.99540000E+0,0.94340000E+0 - ,0.35361220E+3,0.185E+3,0.133E+3,0.99540000E+0,0.98890000E+0 - ,0.32517910E+3,0.185E+3,0.134E+3,0.99540000E+0,0.99010000E+0 - ,0.28869910E+3,0.185E+3,0.135E+3,0.99540000E+0,0.99740000E+0 - ,0.46445980E+3,0.185E+3,0.137E+3,0.99540000E+0,0.97380000E+0 - ,0.87507120E+3,0.185E+3,0.138E+3,0.99540000E+0,0.98010000E+0 - ,0.68319770E+3,0.185E+3,0.139E+3,0.99540000E+0,0.19153000E+1 - ,0.51943980E+3,0.185E+3,0.140E+3,0.99540000E+0,0.19355000E+1 - ,0.52444490E+3,0.185E+3,0.141E+3,0.99540000E+0,0.19545000E+1 - ,0.49061730E+3,0.185E+3,0.142E+3,0.99540000E+0,0.19420000E+1 - ,0.54479300E+3,0.185E+3,0.143E+3,0.99540000E+0,0.16682000E+1 - ,0.43100110E+3,0.185E+3,0.144E+3,0.99540000E+0,0.18584000E+1 - ,0.40366930E+3,0.185E+3,0.145E+3,0.99540000E+0,0.19003000E+1 - ,0.37552180E+3,0.185E+3,0.146E+3,0.99540000E+0,0.18630000E+1 - ,0.36288510E+3,0.185E+3,0.147E+3,0.99540000E+0,0.96790000E+0 - ,0.36089310E+3,0.185E+3,0.148E+3,0.99540000E+0,0.19539000E+1 - ,0.55818460E+3,0.185E+3,0.149E+3,0.99540000E+0,0.96330000E+0 - ,0.51050570E+3,0.185E+3,0.150E+3,0.99540000E+0,0.95140000E+0 - ,0.48183620E+3,0.185E+3,0.151E+3,0.99540000E+0,0.97490000E+0 - ,0.45832530E+3,0.185E+3,0.152E+3,0.99540000E+0,0.98110000E+0 - ,0.42136600E+3,0.185E+3,0.153E+3,0.99540000E+0,0.99680000E+0 - ,0.55369970E+3,0.185E+3,0.155E+3,0.99540000E+0,0.99090000E+0 - ,0.11306124E+4,0.185E+3,0.156E+3,0.99540000E+0,0.97970000E+0 - ,0.86338050E+3,0.185E+3,0.157E+3,0.99540000E+0,0.19373000E+1 - ,0.56202230E+3,0.185E+3,0.159E+3,0.99540000E+0,0.29425000E+1 - ,0.55046390E+3,0.185E+3,0.160E+3,0.99540000E+0,0.29455000E+1 - ,0.53332520E+3,0.185E+3,0.161E+3,0.99540000E+0,0.29413000E+1 - ,0.53511070E+3,0.185E+3,0.162E+3,0.99540000E+0,0.29300000E+1 - ,0.51328320E+3,0.185E+3,0.163E+3,0.99540000E+0,0.18286000E+1 - ,0.53811960E+3,0.185E+3,0.164E+3,0.99540000E+0,0.28732000E+1 - ,0.50616170E+3,0.185E+3,0.165E+3,0.99540000E+0,0.29086000E+1 - ,0.51361300E+3,0.185E+3,0.166E+3,0.99540000E+0,0.28965000E+1 - ,0.48106970E+3,0.185E+3,0.167E+3,0.99540000E+0,0.29242000E+1 - ,0.46760130E+3,0.185E+3,0.168E+3,0.99540000E+0,0.29282000E+1 - ,0.46439200E+3,0.185E+3,0.169E+3,0.99540000E+0,0.29246000E+1 - ,0.48688020E+3,0.185E+3,0.170E+3,0.99540000E+0,0.28482000E+1 - ,0.44918810E+3,0.185E+3,0.171E+3,0.99540000E+0,0.29219000E+1 - ,0.59761830E+3,0.185E+3,0.172E+3,0.99540000E+0,0.19254000E+1 - ,0.55826740E+3,0.185E+3,0.173E+3,0.99540000E+0,0.19459000E+1 - ,0.51282040E+3,0.185E+3,0.174E+3,0.99540000E+0,0.19292000E+1 - ,0.51597410E+3,0.185E+3,0.175E+3,0.99540000E+0,0.18104000E+1 - ,0.45859230E+3,0.185E+3,0.176E+3,0.99540000E+0,0.18858000E+1 - ,0.43254320E+3,0.185E+3,0.177E+3,0.99540000E+0,0.18648000E+1 - ,0.41380590E+3,0.185E+3,0.178E+3,0.99540000E+0,0.19188000E+1 - ,0.39569230E+3,0.185E+3,0.179E+3,0.99540000E+0,0.98460000E+0 - ,0.38429790E+3,0.185E+3,0.180E+3,0.99540000E+0,0.19896000E+1 - ,0.60117960E+3,0.185E+3,0.181E+3,0.99540000E+0,0.92670000E+0 - ,0.55369590E+3,0.185E+3,0.182E+3,0.99540000E+0,0.93830000E+0 - ,0.54001160E+3,0.185E+3,0.183E+3,0.99540000E+0,0.98200000E+0 - ,0.52742780E+3,0.185E+3,0.184E+3,0.99540000E+0,0.98150000E+0 - ,0.49544740E+3,0.185E+3,0.185E+3,0.99540000E+0,0.99540000E+0 - ,0.47701600E+2,0.187E+3,0.100E+1,0.97050000E+0,0.91180000E+0 - ,0.30982700E+2,0.187E+3,0.200E+1,0.97050000E+0,0.00000000E+0 - ,0.82128980E+3,0.187E+3,0.300E+1,0.97050000E+0,0.00000000E+0 - ,0.44907760E+3,0.187E+3,0.400E+1,0.97050000E+0,0.00000000E+0 - ,0.29529920E+3,0.187E+3,0.500E+1,0.97050000E+0,0.00000000E+0 - ,0.19640820E+3,0.187E+3,0.600E+1,0.97050000E+0,0.00000000E+0 - ,0.13586190E+3,0.187E+3,0.700E+1,0.97050000E+0,0.00000000E+0 - ,0.10209130E+3,0.187E+3,0.800E+1,0.97050000E+0,0.00000000E+0 - ,0.76828100E+2,0.187E+3,0.900E+1,0.97050000E+0,0.00000000E+0 - ,0.58759900E+2,0.187E+3,0.100E+2,0.97050000E+0,0.00000000E+0 - ,0.97872720E+3,0.187E+3,0.110E+2,0.97050000E+0,0.00000000E+0 - ,0.72162860E+3,0.187E+3,0.120E+2,0.97050000E+0,0.00000000E+0 - ,0.65646580E+3,0.187E+3,0.130E+2,0.97050000E+0,0.00000000E+0 - ,0.50848770E+3,0.187E+3,0.140E+2,0.97050000E+0,0.00000000E+0 - ,0.39145280E+3,0.187E+3,0.150E+2,0.97050000E+0,0.00000000E+0 - ,0.32243460E+3,0.187E+3,0.160E+2,0.97050000E+0,0.00000000E+0 - ,0.26153630E+3,0.187E+3,0.170E+2,0.97050000E+0,0.00000000E+0 - ,0.21269100E+3,0.187E+3,0.180E+2,0.97050000E+0,0.00000000E+0 - ,0.16235241E+4,0.187E+3,0.190E+2,0.97050000E+0,0.00000000E+0 - ,0.12906007E+4,0.187E+3,0.200E+2,0.97050000E+0,0.00000000E+0 - ,0.10581233E+4,0.187E+3,0.210E+2,0.97050000E+0,0.00000000E+0 - ,0.10157559E+4,0.187E+3,0.220E+2,0.97050000E+0,0.00000000E+0 - ,0.92671700E+3,0.187E+3,0.230E+2,0.97050000E+0,0.00000000E+0 - ,0.73034690E+3,0.187E+3,0.240E+2,0.97050000E+0,0.00000000E+0 - ,0.79366630E+3,0.187E+3,0.250E+2,0.97050000E+0,0.00000000E+0 - ,0.62273900E+3,0.187E+3,0.260E+2,0.97050000E+0,0.00000000E+0 - ,0.65432150E+3,0.187E+3,0.270E+2,0.97050000E+0,0.00000000E+0 - ,0.67636930E+3,0.187E+3,0.280E+2,0.97050000E+0,0.00000000E+0 - ,0.51902340E+3,0.187E+3,0.290E+2,0.97050000E+0,0.00000000E+0 - ,0.52639910E+3,0.187E+3,0.300E+2,0.97050000E+0,0.00000000E+0 - ,0.62602660E+3,0.187E+3,0.310E+2,0.97050000E+0,0.00000000E+0 - ,0.54461780E+3,0.187E+3,0.320E+2,0.97050000E+0,0.00000000E+0 - ,0.45945110E+3,0.187E+3,0.330E+2,0.97050000E+0,0.00000000E+0 - ,0.40971550E+3,0.187E+3,0.340E+2,0.97050000E+0,0.00000000E+0 - ,0.35633240E+3,0.187E+3,0.350E+2,0.97050000E+0,0.00000000E+0 - ,0.30818050E+3,0.187E+3,0.360E+2,0.97050000E+0,0.00000000E+0 - ,0.18154672E+4,0.187E+3,0.370E+2,0.97050000E+0,0.00000000E+0 - ,0.15407355E+4,0.187E+3,0.380E+2,0.97050000E+0,0.00000000E+0 - ,0.13325023E+4,0.187E+3,0.390E+2,0.97050000E+0,0.00000000E+0 - ,0.11885781E+4,0.187E+3,0.400E+2,0.97050000E+0,0.00000000E+0 - ,0.10787813E+4,0.187E+3,0.410E+2,0.97050000E+0,0.00000000E+0 - ,0.82661910E+3,0.187E+3,0.420E+2,0.97050000E+0,0.00000000E+0 - ,0.92479920E+3,0.187E+3,0.430E+2,0.97050000E+0,0.00000000E+0 - ,0.69868860E+3,0.187E+3,0.440E+2,0.97050000E+0,0.00000000E+0 - ,0.76296140E+3,0.187E+3,0.450E+2,0.97050000E+0,0.00000000E+0 - ,0.70540290E+3,0.187E+3,0.460E+2,0.97050000E+0,0.00000000E+0 - ,0.58992230E+3,0.187E+3,0.470E+2,0.97050000E+0,0.00000000E+0 - ,0.61917780E+3,0.187E+3,0.480E+2,0.97050000E+0,0.00000000E+0 - ,0.78433640E+3,0.187E+3,0.490E+2,0.97050000E+0,0.00000000E+0 - ,0.71671230E+3,0.187E+3,0.500E+2,0.97050000E+0,0.00000000E+0 - ,0.63213270E+3,0.187E+3,0.510E+2,0.97050000E+0,0.00000000E+0 - ,0.58314470E+3,0.187E+3,0.520E+2,0.97050000E+0,0.00000000E+0 - ,0.52415300E+3,0.187E+3,0.530E+2,0.97050000E+0,0.00000000E+0 - ,0.46871230E+3,0.187E+3,0.540E+2,0.97050000E+0,0.00000000E+0 - ,0.22133513E+4,0.187E+3,0.550E+2,0.97050000E+0,0.00000000E+0 - ,0.19746939E+4,0.187E+3,0.560E+2,0.97050000E+0,0.00000000E+0 - ,0.17122469E+4,0.187E+3,0.570E+2,0.97050000E+0,0.00000000E+0 - ,0.74865870E+3,0.187E+3,0.580E+2,0.97050000E+0,0.27991000E+1 - ,0.17417523E+4,0.187E+3,0.590E+2,0.97050000E+0,0.00000000E+0 - ,0.16683774E+4,0.187E+3,0.600E+2,0.97050000E+0,0.00000000E+0 - ,0.16254063E+4,0.187E+3,0.610E+2,0.97050000E+0,0.00000000E+0 - ,0.15860020E+4,0.187E+3,0.620E+2,0.97050000E+0,0.00000000E+0 - ,0.15510288E+4,0.187E+3,0.630E+2,0.97050000E+0,0.00000000E+0 - ,0.12037458E+4,0.187E+3,0.640E+2,0.97050000E+0,0.00000000E+0 - ,0.13861364E+4,0.187E+3,0.650E+2,0.97050000E+0,0.00000000E+0 - ,0.13338527E+4,0.187E+3,0.660E+2,0.97050000E+0,0.00000000E+0 - ,0.13939911E+4,0.187E+3,0.670E+2,0.97050000E+0,0.00000000E+0 - ,0.13638159E+4,0.187E+3,0.680E+2,0.97050000E+0,0.00000000E+0 - ,0.13364029E+4,0.187E+3,0.690E+2,0.97050000E+0,0.00000000E+0 - ,0.13214462E+4,0.187E+3,0.700E+2,0.97050000E+0,0.00000000E+0 - ,0.11036008E+4,0.187E+3,0.710E+2,0.97050000E+0,0.00000000E+0 - ,0.10717256E+4,0.187E+3,0.720E+2,0.97050000E+0,0.00000000E+0 - ,0.97115790E+3,0.187E+3,0.730E+2,0.97050000E+0,0.00000000E+0 - ,0.81639790E+3,0.187E+3,0.740E+2,0.97050000E+0,0.00000000E+0 - ,0.82799830E+3,0.187E+3,0.750E+2,0.97050000E+0,0.00000000E+0 - ,0.74602310E+3,0.187E+3,0.760E+2,0.97050000E+0,0.00000000E+0 - ,0.68007030E+3,0.187E+3,0.770E+2,0.97050000E+0,0.00000000E+0 - ,0.56255190E+3,0.187E+3,0.780E+2,0.97050000E+0,0.00000000E+0 - ,0.52462170E+3,0.187E+3,0.790E+2,0.97050000E+0,0.00000000E+0 - ,0.53824540E+3,0.187E+3,0.800E+2,0.97050000E+0,0.00000000E+0 - ,0.80393350E+3,0.187E+3,0.810E+2,0.97050000E+0,0.00000000E+0 - ,0.77827560E+3,0.187E+3,0.820E+2,0.97050000E+0,0.00000000E+0 - ,0.70823270E+3,0.187E+3,0.830E+2,0.97050000E+0,0.00000000E+0 - ,0.67199770E+3,0.187E+3,0.840E+2,0.97050000E+0,0.00000000E+0 - ,0.61653950E+3,0.187E+3,0.850E+2,0.97050000E+0,0.00000000E+0 - ,0.56222180E+3,0.187E+3,0.860E+2,0.97050000E+0,0.00000000E+0 - ,0.20671766E+4,0.187E+3,0.870E+2,0.97050000E+0,0.00000000E+0 - ,0.19399392E+4,0.187E+3,0.880E+2,0.97050000E+0,0.00000000E+0 - ,0.16935702E+4,0.187E+3,0.890E+2,0.97050000E+0,0.00000000E+0 - ,0.15024640E+4,0.187E+3,0.900E+2,0.97050000E+0,0.00000000E+0 - ,0.15019252E+4,0.187E+3,0.910E+2,0.97050000E+0,0.00000000E+0 - ,0.14536878E+4,0.187E+3,0.920E+2,0.97050000E+0,0.00000000E+0 - ,0.15083332E+4,0.187E+3,0.930E+2,0.97050000E+0,0.00000000E+0 - ,0.14583342E+4,0.187E+3,0.940E+2,0.97050000E+0,0.00000000E+0 - ,0.77705500E+2,0.187E+3,0.101E+3,0.97050000E+0,0.00000000E+0 - ,0.26024430E+3,0.187E+3,0.103E+3,0.97050000E+0,0.98650000E+0 - ,0.33086670E+3,0.187E+3,0.104E+3,0.97050000E+0,0.98080000E+0 - ,0.24738310E+3,0.187E+3,0.105E+3,0.97050000E+0,0.97060000E+0 - ,0.18444310E+3,0.187E+3,0.106E+3,0.97050000E+0,0.98680000E+0 - ,0.12675340E+3,0.187E+3,0.107E+3,0.97050000E+0,0.99440000E+0 - ,0.91438800E+2,0.187E+3,0.108E+3,0.97050000E+0,0.99250000E+0 - ,0.62121900E+2,0.187E+3,0.109E+3,0.97050000E+0,0.99820000E+0 - ,0.38227080E+3,0.187E+3,0.111E+3,0.97050000E+0,0.96840000E+0 - ,0.59297950E+3,0.187E+3,0.112E+3,0.97050000E+0,0.96280000E+0 - ,0.59319050E+3,0.187E+3,0.113E+3,0.97050000E+0,0.96480000E+0 - ,0.46899060E+3,0.187E+3,0.114E+3,0.97050000E+0,0.95070000E+0 - ,0.37986120E+3,0.187E+3,0.115E+3,0.97050000E+0,0.99470000E+0 - ,0.31896080E+3,0.187E+3,0.116E+3,0.97050000E+0,0.99480000E+0 - ,0.25886520E+3,0.187E+3,0.117E+3,0.97050000E+0,0.99720000E+0 - ,0.52346900E+3,0.187E+3,0.119E+3,0.97050000E+0,0.97670000E+0 - ,0.10345424E+4,0.187E+3,0.120E+3,0.97050000E+0,0.98310000E+0 - ,0.51544090E+3,0.187E+3,0.121E+3,0.97050000E+0,0.18627000E+1 - ,0.49759520E+3,0.187E+3,0.122E+3,0.97050000E+0,0.18299000E+1 - ,0.48774150E+3,0.187E+3,0.123E+3,0.97050000E+0,0.19138000E+1 - ,0.48406800E+3,0.187E+3,0.124E+3,0.97050000E+0,0.18269000E+1 - ,0.44152590E+3,0.187E+3,0.125E+3,0.97050000E+0,0.16406000E+1 - ,0.40774620E+3,0.187E+3,0.126E+3,0.97050000E+0,0.16483000E+1 - ,0.38903940E+3,0.187E+3,0.127E+3,0.97050000E+0,0.17149000E+1 - ,0.38057220E+3,0.187E+3,0.128E+3,0.97050000E+0,0.17937000E+1 - ,0.37831310E+3,0.187E+3,0.129E+3,0.97050000E+0,0.95760000E+0 - ,0.35099820E+3,0.187E+3,0.130E+3,0.97050000E+0,0.19419000E+1 - ,0.58593320E+3,0.187E+3,0.131E+3,0.97050000E+0,0.96010000E+0 - ,0.50806740E+3,0.187E+3,0.132E+3,0.97050000E+0,0.94340000E+0 - ,0.45140640E+3,0.187E+3,0.133E+3,0.97050000E+0,0.98890000E+0 - ,0.40992700E+3,0.187E+3,0.134E+3,0.97050000E+0,0.99010000E+0 - ,0.35893240E+3,0.187E+3,0.135E+3,0.97050000E+0,0.99740000E+0 - ,0.62302850E+3,0.187E+3,0.137E+3,0.97050000E+0,0.97380000E+0 - ,0.12623248E+4,0.187E+3,0.138E+3,0.97050000E+0,0.98010000E+0 - ,0.94131820E+3,0.187E+3,0.139E+3,0.97050000E+0,0.19153000E+1 - ,0.68339070E+3,0.187E+3,0.140E+3,0.97050000E+0,0.19355000E+1 - ,0.69013390E+3,0.187E+3,0.141E+3,0.97050000E+0,0.19545000E+1 - ,0.64188840E+3,0.187E+3,0.142E+3,0.97050000E+0,0.19420000E+1 - ,0.72847950E+3,0.187E+3,0.143E+3,0.97050000E+0,0.16682000E+1 - ,0.55498020E+3,0.187E+3,0.144E+3,0.97050000E+0,0.18584000E+1 - ,0.51892730E+3,0.187E+3,0.145E+3,0.97050000E+0,0.19003000E+1 - ,0.48122640E+3,0.187E+3,0.146E+3,0.97050000E+0,0.18630000E+1 - ,0.46593230E+3,0.187E+3,0.147E+3,0.97050000E+0,0.96790000E+0 - ,0.45799090E+3,0.187E+3,0.148E+3,0.97050000E+0,0.19539000E+1 - ,0.74456260E+3,0.187E+3,0.149E+3,0.97050000E+0,0.96330000E+0 - ,0.66567970E+3,0.187E+3,0.150E+3,0.97050000E+0,0.95140000E+0 - ,0.61872370E+3,0.187E+3,0.151E+3,0.97050000E+0,0.97490000E+0 - ,0.58251630E+3,0.187E+3,0.152E+3,0.97050000E+0,0.98110000E+0 - ,0.52912450E+3,0.187E+3,0.153E+3,0.97050000E+0,0.99680000E+0 - ,0.73044860E+3,0.187E+3,0.155E+3,0.97050000E+0,0.99090000E+0 - ,0.16478674E+4,0.187E+3,0.156E+3,0.97050000E+0,0.97970000E+0 - ,0.11947861E+4,0.187E+3,0.157E+3,0.97050000E+0,0.19373000E+1 - ,0.72565350E+3,0.187E+3,0.159E+3,0.97050000E+0,0.29425000E+1 - ,0.71054890E+3,0.187E+3,0.160E+3,0.97050000E+0,0.29455000E+1 - ,0.68768570E+3,0.187E+3,0.161E+3,0.97050000E+0,0.29413000E+1 - ,0.69226220E+3,0.187E+3,0.162E+3,0.97050000E+0,0.29300000E+1 - ,0.67081490E+3,0.187E+3,0.163E+3,0.97050000E+0,0.18286000E+1 - ,0.69684430E+3,0.187E+3,0.164E+3,0.97050000E+0,0.28732000E+1 - ,0.65357440E+3,0.187E+3,0.165E+3,0.97050000E+0,0.29086000E+1 - ,0.66719620E+3,0.187E+3,0.166E+3,0.97050000E+0,0.28965000E+1 - ,0.61947600E+3,0.187E+3,0.167E+3,0.97050000E+0,0.29242000E+1 - ,0.60150620E+3,0.187E+3,0.168E+3,0.97050000E+0,0.29282000E+1 - ,0.59787770E+3,0.187E+3,0.169E+3,0.97050000E+0,0.29246000E+1 - ,0.62970880E+3,0.187E+3,0.170E+3,0.97050000E+0,0.28482000E+1 - ,0.57740830E+3,0.187E+3,0.171E+3,0.97050000E+0,0.29219000E+1 - ,0.79873450E+3,0.187E+3,0.172E+3,0.97050000E+0,0.19254000E+1 - ,0.73626140E+3,0.187E+3,0.173E+3,0.97050000E+0,0.19459000E+1 - ,0.66710040E+3,0.187E+3,0.174E+3,0.97050000E+0,0.19292000E+1 - ,0.67912190E+3,0.187E+3,0.175E+3,0.97050000E+0,0.18104000E+1 - ,0.58515020E+3,0.187E+3,0.176E+3,0.97050000E+0,0.18858000E+1 - ,0.54932980E+3,0.187E+3,0.177E+3,0.97050000E+0,0.18648000E+1 - ,0.52401710E+3,0.187E+3,0.178E+3,0.97050000E+0,0.19188000E+1 - ,0.50114870E+3,0.187E+3,0.179E+3,0.97050000E+0,0.98460000E+0 - ,0.48150990E+3,0.187E+3,0.180E+3,0.97050000E+0,0.19896000E+1 - ,0.79848790E+3,0.187E+3,0.181E+3,0.97050000E+0,0.92670000E+0 - ,0.71909940E+3,0.187E+3,0.182E+3,0.97050000E+0,0.93830000E+0 - ,0.69321150E+3,0.187E+3,0.183E+3,0.97050000E+0,0.98200000E+0 - ,0.67161670E+3,0.187E+3,0.184E+3,0.97050000E+0,0.98150000E+0 - ,0.62396020E+3,0.187E+3,0.185E+3,0.97050000E+0,0.99540000E+0 - ,0.82204820E+3,0.187E+3,0.187E+3,0.97050000E+0,0.97050000E+0 - ,0.83609000E+2,0.188E+3,0.100E+1,0.96620000E+0,0.91180000E+0 - ,0.50796500E+2,0.188E+3,0.200E+1,0.96620000E+0,0.00000000E+0 - ,0.20637836E+4,0.188E+3,0.300E+1,0.96620000E+0,0.00000000E+0 - ,0.94042740E+3,0.188E+3,0.400E+1,0.96620000E+0,0.00000000E+0 - ,0.56781070E+3,0.188E+3,0.500E+1,0.96620000E+0,0.00000000E+0 - ,0.35548600E+3,0.188E+3,0.600E+1,0.96620000E+0,0.00000000E+0 - ,0.23551600E+3,0.188E+3,0.700E+1,0.96620000E+0,0.00000000E+0 - ,0.17184720E+3,0.188E+3,0.800E+1,0.96620000E+0,0.00000000E+0 - ,0.12619530E+3,0.188E+3,0.900E+1,0.96620000E+0,0.00000000E+0 - ,0.94703500E+2,0.188E+3,0.100E+2,0.96620000E+0,0.00000000E+0 - ,0.24334034E+4,0.188E+3,0.110E+2,0.96620000E+0,0.00000000E+0 - ,0.15570501E+4,0.188E+3,0.120E+2,0.96620000E+0,0.00000000E+0 - ,0.13544541E+4,0.188E+3,0.130E+2,0.96620000E+0,0.00000000E+0 - ,0.98580450E+3,0.188E+3,0.140E+2,0.96620000E+0,0.00000000E+0 - ,0.72244190E+3,0.188E+3,0.150E+2,0.96620000E+0,0.00000000E+0 - ,0.57742680E+3,0.188E+3,0.160E+2,0.96620000E+0,0.00000000E+0 - ,0.45525930E+3,0.188E+3,0.170E+2,0.96620000E+0,0.00000000E+0 - ,0.36144930E+3,0.188E+3,0.180E+2,0.96620000E+0,0.00000000E+0 - ,0.42189528E+4,0.188E+3,0.190E+2,0.96620000E+0,0.00000000E+0 - ,0.29555781E+4,0.188E+3,0.200E+2,0.96620000E+0,0.00000000E+0 - ,0.23628855E+4,0.188E+3,0.210E+2,0.96620000E+0,0.00000000E+0 - ,0.22256317E+4,0.188E+3,0.220E+2,0.96620000E+0,0.00000000E+0 - ,0.20060593E+4,0.188E+3,0.230E+2,0.96620000E+0,0.00000000E+0 - ,0.15850984E+4,0.188E+3,0.240E+2,0.96620000E+0,0.00000000E+0 - ,0.16883164E+4,0.188E+3,0.250E+2,0.96620000E+0,0.00000000E+0 - ,0.13245409E+4,0.188E+3,0.260E+2,0.96620000E+0,0.00000000E+0 - ,0.13487863E+4,0.188E+3,0.270E+2,0.96620000E+0,0.00000000E+0 - ,0.14111951E+4,0.188E+3,0.280E+2,0.96620000E+0,0.00000000E+0 - ,0.10878878E+4,0.188E+3,0.290E+2,0.96620000E+0,0.00000000E+0 - ,0.10558450E+4,0.188E+3,0.300E+2,0.96620000E+0,0.00000000E+0 - ,0.12726682E+4,0.188E+3,0.310E+2,0.96620000E+0,0.00000000E+0 - ,0.10532146E+4,0.188E+3,0.320E+2,0.96620000E+0,0.00000000E+0 - ,0.85217950E+3,0.188E+3,0.330E+2,0.96620000E+0,0.00000000E+0 - ,0.74155110E+3,0.188E+3,0.340E+2,0.96620000E+0,0.00000000E+0 - ,0.62920990E+3,0.188E+3,0.350E+2,0.96620000E+0,0.00000000E+0 - ,0.53228900E+3,0.188E+3,0.360E+2,0.96620000E+0,0.00000000E+0 - ,0.46920594E+4,0.188E+3,0.370E+2,0.96620000E+0,0.00000000E+0 - ,0.35533992E+4,0.188E+3,0.380E+2,0.96620000E+0,0.00000000E+0 - ,0.29477908E+4,0.188E+3,0.390E+2,0.96620000E+0,0.00000000E+0 - ,0.25643290E+4,0.188E+3,0.400E+2,0.96620000E+0,0.00000000E+0 - ,0.22922709E+4,0.188E+3,0.410E+2,0.96620000E+0,0.00000000E+0 - ,0.17126002E+4,0.188E+3,0.420E+2,0.96620000E+0,0.00000000E+0 - ,0.19349917E+4,0.188E+3,0.430E+2,0.96620000E+0,0.00000000E+0 - ,0.14205909E+4,0.188E+3,0.440E+2,0.96620000E+0,0.00000000E+0 - ,0.15449801E+4,0.188E+3,0.450E+2,0.96620000E+0,0.00000000E+0 - ,0.14136504E+4,0.188E+3,0.460E+2,0.96620000E+0,0.00000000E+0 - ,0.11968365E+4,0.188E+3,0.470E+2,0.96620000E+0,0.00000000E+0 - ,0.12247085E+4,0.188E+3,0.480E+2,0.96620000E+0,0.00000000E+0 - ,0.16042050E+4,0.188E+3,0.490E+2,0.96620000E+0,0.00000000E+0 - ,0.14037977E+4,0.188E+3,0.500E+2,0.96620000E+0,0.00000000E+0 - ,0.11915335E+4,0.188E+3,0.510E+2,0.96620000E+0,0.00000000E+0 - ,0.10753755E+4,0.188E+3,0.520E+2,0.96620000E+0,0.00000000E+0 - ,0.94459510E+3,0.188E+3,0.530E+2,0.96620000E+0,0.00000000E+0 - ,0.82692720E+3,0.188E+3,0.540E+2,0.96620000E+0,0.00000000E+0 - ,0.57528877E+4,0.188E+3,0.550E+2,0.96620000E+0,0.00000000E+0 - ,0.46383134E+4,0.188E+3,0.560E+2,0.96620000E+0,0.00000000E+0 - ,0.38532093E+4,0.188E+3,0.570E+2,0.96620000E+0,0.00000000E+0 - ,0.14235132E+4,0.188E+3,0.580E+2,0.96620000E+0,0.27991000E+1 - ,0.40407923E+4,0.188E+3,0.590E+2,0.96620000E+0,0.00000000E+0 - ,0.38327972E+4,0.188E+3,0.600E+2,0.96620000E+0,0.00000000E+0 - ,0.37253298E+4,0.188E+3,0.610E+2,0.96620000E+0,0.00000000E+0 - ,0.36276787E+4,0.188E+3,0.620E+2,0.96620000E+0,0.00000000E+0 - ,0.35407934E+4,0.188E+3,0.630E+2,0.96620000E+0,0.00000000E+0 - ,0.26359841E+4,0.188E+3,0.640E+2,0.96620000E+0,0.00000000E+0 - ,0.32830964E+4,0.188E+3,0.650E+2,0.96620000E+0,0.00000000E+0 - ,0.31457261E+4,0.188E+3,0.660E+2,0.96620000E+0,0.00000000E+0 - ,0.31446702E+4,0.188E+3,0.670E+2,0.96620000E+0,0.00000000E+0 - ,0.30720386E+4,0.188E+3,0.680E+2,0.96620000E+0,0.00000000E+0 - ,0.30045907E+4,0.188E+3,0.690E+2,0.96620000E+0,0.00000000E+0 - ,0.29758018E+4,0.188E+3,0.700E+2,0.96620000E+0,0.00000000E+0 - ,0.24223257E+4,0.188E+3,0.710E+2,0.96620000E+0,0.00000000E+0 - ,0.22460574E+4,0.188E+3,0.720E+2,0.96620000E+0,0.00000000E+0 - ,0.19858562E+4,0.188E+3,0.730E+2,0.96620000E+0,0.00000000E+0 - ,0.16449966E+4,0.188E+3,0.740E+2,0.96620000E+0,0.00000000E+0 - ,0.16502454E+4,0.188E+3,0.750E+2,0.96620000E+0,0.00000000E+0 - ,0.14557663E+4,0.188E+3,0.760E+2,0.96620000E+0,0.00000000E+0 - ,0.13051372E+4,0.188E+3,0.770E+2,0.96620000E+0,0.00000000E+0 - ,0.10638806E+4,0.188E+3,0.780E+2,0.96620000E+0,0.00000000E+0 - ,0.98600810E+3,0.188E+3,0.790E+2,0.96620000E+0,0.00000000E+0 - ,0.10014312E+4,0.188E+3,0.800E+2,0.96620000E+0,0.00000000E+0 - ,0.16367789E+4,0.188E+3,0.810E+2,0.96620000E+0,0.00000000E+0 - ,0.15272655E+4,0.188E+3,0.820E+2,0.96620000E+0,0.00000000E+0 - ,0.13408219E+4,0.188E+3,0.830E+2,0.96620000E+0,0.00000000E+0 - ,0.12476338E+4,0.188E+3,0.840E+2,0.96620000E+0,0.00000000E+0 - ,0.11190260E+4,0.188E+3,0.850E+2,0.96620000E+0,0.00000000E+0 - ,0.10003262E+4,0.188E+3,0.860E+2,0.96620000E+0,0.00000000E+0 - ,0.51851636E+4,0.188E+3,0.870E+2,0.96620000E+0,0.00000000E+0 - ,0.44613947E+4,0.188E+3,0.880E+2,0.96620000E+0,0.00000000E+0 - ,0.37411085E+4,0.188E+3,0.890E+2,0.96620000E+0,0.00000000E+0 - ,0.31788167E+4,0.188E+3,0.900E+2,0.96620000E+0,0.00000000E+0 - ,0.32553913E+4,0.188E+3,0.910E+2,0.96620000E+0,0.00000000E+0 - ,0.31461615E+4,0.188E+3,0.920E+2,0.96620000E+0,0.00000000E+0 - ,0.33483818E+4,0.188E+3,0.930E+2,0.96620000E+0,0.00000000E+0 - ,0.32202388E+4,0.188E+3,0.940E+2,0.96620000E+0,0.00000000E+0 - ,0.14255890E+3,0.188E+3,0.101E+3,0.96620000E+0,0.00000000E+0 - ,0.53986610E+3,0.188E+3,0.103E+3,0.96620000E+0,0.98650000E+0 - ,0.67929310E+3,0.188E+3,0.104E+3,0.96620000E+0,0.98080000E+0 - ,0.46840690E+3,0.188E+3,0.105E+3,0.96620000E+0,0.97060000E+0 - ,0.33516710E+3,0.188E+3,0.106E+3,0.96620000E+0,0.98680000E+0 - ,0.21993730E+3,0.188E+3,0.107E+3,0.96620000E+0,0.99440000E+0 - ,0.15284480E+3,0.188E+3,0.108E+3,0.96620000E+0,0.99250000E+0 - ,0.99280200E+2,0.188E+3,0.109E+3,0.96620000E+0,0.99820000E+0 - ,0.80746090E+3,0.188E+3,0.111E+3,0.96620000E+0,0.96840000E+0 - ,0.12655466E+4,0.188E+3,0.112E+3,0.96620000E+0,0.96280000E+0 - ,0.12114303E+4,0.188E+3,0.113E+3,0.96620000E+0,0.96480000E+0 - ,0.90234430E+3,0.188E+3,0.114E+3,0.96620000E+0,0.95070000E+0 - ,0.70028070E+3,0.188E+3,0.115E+3,0.96620000E+0,0.99470000E+0 - ,0.57180250E+3,0.188E+3,0.116E+3,0.96620000E+0,0.99480000E+0 - ,0.45094310E+3,0.188E+3,0.117E+3,0.96620000E+0,0.99720000E+0 - ,0.10806042E+4,0.188E+3,0.119E+3,0.96620000E+0,0.97670000E+0 - ,0.24004019E+4,0.188E+3,0.120E+3,0.96620000E+0,0.98310000E+0 - ,0.10031278E+4,0.188E+3,0.121E+3,0.96620000E+0,0.18627000E+1 - ,0.97117090E+3,0.188E+3,0.122E+3,0.96620000E+0,0.18299000E+1 - ,0.95238070E+3,0.188E+3,0.123E+3,0.96620000E+0,0.19138000E+1 - ,0.95158400E+3,0.188E+3,0.124E+3,0.96620000E+0,0.18269000E+1 - ,0.83982780E+3,0.188E+3,0.125E+3,0.96620000E+0,0.16406000E+1 - ,0.76965310E+3,0.188E+3,0.126E+3,0.96620000E+0,0.16483000E+1 - ,0.73532570E+3,0.188E+3,0.127E+3,0.96620000E+0,0.17149000E+1 - ,0.72111550E+3,0.188E+3,0.128E+3,0.96620000E+0,0.17937000E+1 - ,0.73354280E+3,0.188E+3,0.129E+3,0.96620000E+0,0.95760000E+0 - ,0.65214040E+3,0.188E+3,0.130E+3,0.96620000E+0,0.19419000E+1 - ,0.11763896E+4,0.188E+3,0.131E+3,0.96620000E+0,0.96010000E+0 - ,0.97240690E+3,0.188E+3,0.132E+3,0.96620000E+0,0.94340000E+0 - ,0.83549110E+3,0.188E+3,0.133E+3,0.96620000E+0,0.98890000E+0 - ,0.74234170E+3,0.188E+3,0.134E+3,0.96620000E+0,0.99010000E+0 - ,0.63468070E+3,0.188E+3,0.135E+3,0.96620000E+0,0.99740000E+0 - ,0.12751297E+4,0.188E+3,0.137E+3,0.96620000E+0,0.97380000E+0 - ,0.29585401E+4,0.188E+3,0.138E+3,0.96620000E+0,0.98010000E+0 - ,0.20352098E+4,0.188E+3,0.139E+3,0.96620000E+0,0.19153000E+1 - ,0.13434836E+4,0.188E+3,0.140E+3,0.96620000E+0,0.19355000E+1 - ,0.13539176E+4,0.188E+3,0.141E+3,0.96620000E+0,0.19545000E+1 - ,0.12515281E+4,0.188E+3,0.142E+3,0.96620000E+0,0.19420000E+1 - ,0.14858293E+4,0.188E+3,0.143E+3,0.96620000E+0,0.16682000E+1 - ,0.10500362E+4,0.188E+3,0.144E+3,0.96620000E+0,0.18584000E+1 - ,0.98072260E+3,0.188E+3,0.145E+3,0.96620000E+0,0.19003000E+1 - ,0.90551290E+3,0.188E+3,0.146E+3,0.96620000E+0,0.18630000E+1 - ,0.88003940E+3,0.188E+3,0.147E+3,0.96620000E+0,0.96790000E+0 - ,0.84398030E+3,0.188E+3,0.148E+3,0.96620000E+0,0.19539000E+1 - ,0.15005632E+4,0.188E+3,0.149E+3,0.96620000E+0,0.96330000E+0 - ,0.12849412E+4,0.188E+3,0.150E+3,0.96620000E+0,0.95140000E+0 - ,0.11605961E+4,0.188E+3,0.151E+3,0.96620000E+0,0.97490000E+0 - ,0.10727423E+4,0.188E+3,0.152E+3,0.96620000E+0,0.98110000E+0 - ,0.95386310E+3,0.188E+3,0.153E+3,0.96620000E+0,0.99680000E+0 - ,0.14475205E+4,0.188E+3,0.155E+3,0.96620000E+0,0.99090000E+0 - ,0.39627043E+4,0.188E+3,0.156E+3,0.96620000E+0,0.97970000E+0 - ,0.26130493E+4,0.188E+3,0.157E+3,0.96620000E+0,0.19373000E+1 - ,0.13768762E+4,0.188E+3,0.159E+3,0.96620000E+0,0.29425000E+1 - ,0.13474829E+4,0.188E+3,0.160E+3,0.96620000E+0,0.29455000E+1 - ,0.13018447E+4,0.188E+3,0.161E+3,0.96620000E+0,0.29413000E+1 - ,0.13198844E+4,0.188E+3,0.162E+3,0.96620000E+0,0.29300000E+1 - ,0.13036758E+4,0.188E+3,0.163E+3,0.96620000E+0,0.18286000E+1 - ,0.13293323E+4,0.188E+3,0.164E+3,0.96620000E+0,0.28732000E+1 - ,0.12401840E+4,0.188E+3,0.165E+3,0.96620000E+0,0.29086000E+1 - ,0.12827144E+4,0.188E+3,0.166E+3,0.96620000E+0,0.28965000E+1 - ,0.11691884E+4,0.188E+3,0.167E+3,0.96620000E+0,0.29242000E+1 - ,0.11330697E+4,0.188E+3,0.168E+3,0.96620000E+0,0.29282000E+1 - ,0.11279011E+4,0.188E+3,0.169E+3,0.96620000E+0,0.29246000E+1 - ,0.11968168E+4,0.188E+3,0.170E+3,0.96620000E+0,0.28482000E+1 - ,0.10857933E+4,0.188E+3,0.171E+3,0.96620000E+0,0.29219000E+1 - ,0.16232598E+4,0.188E+3,0.172E+3,0.96620000E+0,0.19254000E+1 - ,0.14589496E+4,0.188E+3,0.173E+3,0.96620000E+0,0.19459000E+1 - ,0.12878783E+4,0.188E+3,0.174E+3,0.96620000E+0,0.19292000E+1 - ,0.13411577E+4,0.188E+3,0.175E+3,0.96620000E+0,0.18104000E+1 - ,0.10896139E+4,0.188E+3,0.176E+3,0.96620000E+0,0.18858000E+1 - ,0.10148760E+4,0.188E+3,0.177E+3,0.96620000E+0,0.18648000E+1 - ,0.96392390E+3,0.188E+3,0.178E+3,0.96620000E+0,0.19188000E+1 - ,0.92374840E+3,0.188E+3,0.179E+3,0.96620000E+0,0.98460000E+0 - ,0.86831320E+3,0.188E+3,0.180E+3,0.96620000E+0,0.19896000E+1 - ,0.16036402E+4,0.188E+3,0.181E+3,0.96620000E+0,0.92670000E+0 - ,0.13818325E+4,0.188E+3,0.182E+3,0.96620000E+0,0.93830000E+0 - ,0.13022054E+4,0.188E+3,0.183E+3,0.96620000E+0,0.98200000E+0 - ,0.12430479E+4,0.188E+3,0.184E+3,0.96620000E+0,0.98150000E+0 - ,0.11320728E+4,0.188E+3,0.185E+3,0.96620000E+0,0.99540000E+0 - ,0.16245332E+4,0.188E+3,0.187E+3,0.96620000E+0,0.97050000E+0 - ,0.37875943E+4,0.188E+3,0.188E+3,0.96620000E+0,0.96620000E+0 - ,0.51107300E+2,0.189E+3,0.100E+1,0.29070000E+1,0.91180000E+0 - ,0.33639800E+2,0.189E+3,0.200E+1,0.29070000E+1,0.00000000E+0 - ,0.80602430E+3,0.189E+3,0.300E+1,0.29070000E+1,0.00000000E+0 - ,0.46302300E+3,0.189E+3,0.400E+1,0.29070000E+1,0.00000000E+0 - ,0.31058590E+3,0.189E+3,0.500E+1,0.29070000E+1,0.00000000E+0 - ,0.20918580E+3,0.189E+3,0.600E+1,0.29070000E+1,0.00000000E+0 - ,0.14595370E+3,0.189E+3,0.700E+1,0.29070000E+1,0.00000000E+0 - ,0.11033330E+3,0.189E+3,0.800E+1,0.29070000E+1,0.00000000E+0 - ,0.83476100E+2,0.189E+3,0.900E+1,0.29070000E+1,0.00000000E+0 - ,0.64144300E+2,0.189E+3,0.100E+2,0.29070000E+1,0.00000000E+0 - ,0.96353500E+3,0.189E+3,0.110E+2,0.29070000E+1,0.00000000E+0 - ,0.73854190E+3,0.189E+3,0.120E+2,0.29070000E+1,0.00000000E+0 - ,0.67947260E+3,0.189E+3,0.130E+2,0.29070000E+1,0.00000000E+0 - ,0.53394560E+3,0.189E+3,0.140E+2,0.29070000E+1,0.00000000E+0 - ,0.41534530E+3,0.189E+3,0.150E+2,0.29070000E+1,0.00000000E+0 - ,0.34413770E+3,0.189E+3,0.160E+2,0.29070000E+1,0.00000000E+0 - ,0.28065670E+3,0.189E+3,0.170E+2,0.29070000E+1,0.00000000E+0 - ,0.22928490E+3,0.189E+3,0.180E+2,0.29070000E+1,0.00000000E+0 - ,0.15796611E+4,0.189E+3,0.190E+2,0.29070000E+1,0.00000000E+0 - ,0.12998428E+4,0.189E+3,0.200E+2,0.29070000E+1,0.00000000E+0 - ,0.10730233E+4,0.189E+3,0.210E+2,0.29070000E+1,0.00000000E+0 - ,0.10353252E+4,0.189E+3,0.220E+2,0.29070000E+1,0.00000000E+0 - ,0.94761900E+3,0.189E+3,0.230E+2,0.29070000E+1,0.00000000E+0 - ,0.74630200E+3,0.189E+3,0.240E+2,0.29070000E+1,0.00000000E+0 - ,0.81529190E+3,0.189E+3,0.250E+2,0.29070000E+1,0.00000000E+0 - ,0.63968180E+3,0.189E+3,0.260E+2,0.29070000E+1,0.00000000E+0 - ,0.67745550E+3,0.189E+3,0.270E+2,0.29070000E+1,0.00000000E+0 - ,0.69823130E+3,0.189E+3,0.280E+2,0.29070000E+1,0.00000000E+0 - ,0.53518630E+3,0.189E+3,0.290E+2,0.29070000E+1,0.00000000E+0 - ,0.54868120E+3,0.189E+3,0.300E+2,0.29070000E+1,0.00000000E+0 - ,0.65023470E+3,0.189E+3,0.310E+2,0.29070000E+1,0.00000000E+0 - ,0.57221090E+3,0.189E+3,0.320E+2,0.29070000E+1,0.00000000E+0 - ,0.48704720E+3,0.189E+3,0.330E+2,0.29070000E+1,0.00000000E+0 - ,0.43643770E+3,0.189E+3,0.340E+2,0.29070000E+1,0.00000000E+0 - ,0.38138700E+3,0.189E+3,0.350E+2,0.29070000E+1,0.00000000E+0 - ,0.33123010E+3,0.189E+3,0.360E+2,0.29070000E+1,0.00000000E+0 - ,0.17697228E+4,0.189E+3,0.370E+2,0.29070000E+1,0.00000000E+0 - ,0.15487458E+4,0.189E+3,0.380E+2,0.29070000E+1,0.00000000E+0 - ,0.13545806E+4,0.189E+3,0.390E+2,0.29070000E+1,0.00000000E+0 - ,0.12161834E+4,0.189E+3,0.400E+2,0.29070000E+1,0.00000000E+0 - ,0.11081864E+4,0.189E+3,0.410E+2,0.29070000E+1,0.00000000E+0 - ,0.85438760E+3,0.189E+3,0.420E+2,0.29070000E+1,0.00000000E+0 - ,0.95376820E+3,0.189E+3,0.430E+2,0.29070000E+1,0.00000000E+0 - ,0.72552720E+3,0.189E+3,0.440E+2,0.29070000E+1,0.00000000E+0 - ,0.79314780E+3,0.189E+3,0.450E+2,0.29070000E+1,0.00000000E+0 - ,0.73516550E+3,0.189E+3,0.460E+2,0.29070000E+1,0.00000000E+0 - ,0.61302710E+3,0.189E+3,0.470E+2,0.29070000E+1,0.00000000E+0 - ,0.64739340E+3,0.189E+3,0.480E+2,0.29070000E+1,0.00000000E+0 - ,0.81366740E+3,0.189E+3,0.490E+2,0.29070000E+1,0.00000000E+0 - ,0.75110850E+3,0.189E+3,0.500E+2,0.29070000E+1,0.00000000E+0 - ,0.66812780E+3,0.189E+3,0.510E+2,0.29070000E+1,0.00000000E+0 - ,0.61915920E+3,0.189E+3,0.520E+2,0.29070000E+1,0.00000000E+0 - ,0.55909410E+3,0.189E+3,0.530E+2,0.29070000E+1,0.00000000E+0 - ,0.50201500E+3,0.189E+3,0.540E+2,0.29070000E+1,0.00000000E+0 - ,0.21555972E+4,0.189E+3,0.550E+2,0.29070000E+1,0.00000000E+0 - ,0.19751996E+4,0.189E+3,0.560E+2,0.29070000E+1,0.00000000E+0 - ,0.17327032E+4,0.189E+3,0.570E+2,0.29070000E+1,0.00000000E+0 - ,0.78954030E+3,0.189E+3,0.580E+2,0.29070000E+1,0.27991000E+1 - ,0.17491123E+4,0.189E+3,0.590E+2,0.29070000E+1,0.00000000E+0 - ,0.16792118E+4,0.189E+3,0.600E+2,0.29070000E+1,0.00000000E+0 - ,0.16369858E+4,0.189E+3,0.610E+2,0.29070000E+1,0.00000000E+0 - ,0.15981651E+4,0.189E+3,0.620E+2,0.29070000E+1,0.00000000E+0 - ,0.15637364E+4,0.189E+3,0.630E+2,0.29070000E+1,0.00000000E+0 - ,0.12273570E+4,0.189E+3,0.640E+2,0.29070000E+1,0.00000000E+0 - ,0.13851029E+4,0.189E+3,0.650E+2,0.29070000E+1,0.00000000E+0 - ,0.13354249E+4,0.189E+3,0.660E+2,0.29070000E+1,0.00000000E+0 - ,0.14098902E+4,0.189E+3,0.670E+2,0.29070000E+1,0.00000000E+0 - ,0.13799203E+4,0.189E+3,0.680E+2,0.29070000E+1,0.00000000E+0 - ,0.13528654E+4,0.189E+3,0.690E+2,0.29070000E+1,0.00000000E+0 - ,0.13371510E+4,0.189E+3,0.700E+2,0.29070000E+1,0.00000000E+0 - ,0.11251350E+4,0.189E+3,0.710E+2,0.29070000E+1,0.00000000E+0 - ,0.11047547E+4,0.189E+3,0.720E+2,0.29070000E+1,0.00000000E+0 - ,0.10070882E+4,0.189E+3,0.730E+2,0.29070000E+1,0.00000000E+0 - ,0.84953530E+3,0.189E+3,0.740E+2,0.29070000E+1,0.00000000E+0 - ,0.86391120E+3,0.189E+3,0.750E+2,0.29070000E+1,0.00000000E+0 - ,0.78218420E+3,0.189E+3,0.760E+2,0.29070000E+1,0.00000000E+0 - ,0.71574490E+3,0.189E+3,0.770E+2,0.29070000E+1,0.00000000E+0 - ,0.59397880E+3,0.189E+3,0.780E+2,0.29070000E+1,0.00000000E+0 - ,0.55473410E+3,0.189E+3,0.790E+2,0.29070000E+1,0.00000000E+0 - ,0.57048480E+3,0.189E+3,0.800E+2,0.29070000E+1,0.00000000E+0 - ,0.83486440E+3,0.189E+3,0.810E+2,0.29070000E+1,0.00000000E+0 - ,0.81522210E+3,0.189E+3,0.820E+2,0.29070000E+1,0.00000000E+0 - ,0.74786620E+3,0.189E+3,0.830E+2,0.29070000E+1,0.00000000E+0 - ,0.71256000E+3,0.189E+3,0.840E+2,0.29070000E+1,0.00000000E+0 - ,0.65680530E+3,0.189E+3,0.850E+2,0.29070000E+1,0.00000000E+0 - ,0.60129860E+3,0.189E+3,0.860E+2,0.29070000E+1,0.00000000E+0 - ,0.20330823E+4,0.189E+3,0.870E+2,0.29070000E+1,0.00000000E+0 - ,0.19515778E+4,0.189E+3,0.880E+2,0.29070000E+1,0.00000000E+0 - ,0.17226039E+4,0.189E+3,0.890E+2,0.29070000E+1,0.00000000E+0 - ,0.15452383E+4,0.189E+3,0.900E+2,0.29070000E+1,0.00000000E+0 - ,0.15354151E+4,0.189E+3,0.910E+2,0.29070000E+1,0.00000000E+0 - ,0.14866193E+4,0.189E+3,0.920E+2,0.29070000E+1,0.00000000E+0 - ,0.15322963E+4,0.189E+3,0.930E+2,0.29070000E+1,0.00000000E+0 - ,0.14835856E+4,0.189E+3,0.940E+2,0.29070000E+1,0.00000000E+0 - ,0.82527300E+2,0.189E+3,0.101E+3,0.29070000E+1,0.00000000E+0 - ,0.26898140E+3,0.189E+3,0.103E+3,0.29070000E+1,0.98650000E+0 - ,0.34282380E+3,0.189E+3,0.104E+3,0.29070000E+1,0.98080000E+0 - ,0.26102340E+3,0.189E+3,0.105E+3,0.29070000E+1,0.97060000E+0 - ,0.19621380E+3,0.189E+3,0.106E+3,0.29070000E+1,0.98680000E+0 - ,0.13608950E+3,0.189E+3,0.107E+3,0.29070000E+1,0.99440000E+0 - ,0.98908000E+2,0.189E+3,0.108E+3,0.29070000E+1,0.99250000E+0 - ,0.67858600E+2,0.189E+3,0.109E+3,0.29070000E+1,0.99820000E+0 - ,0.39343830E+3,0.189E+3,0.111E+3,0.29070000E+1,0.96840000E+0 - ,0.60867090E+3,0.189E+3,0.112E+3,0.29070000E+1,0.96280000E+0 - ,0.61547850E+3,0.189E+3,0.113E+3,0.29070000E+1,0.96480000E+0 - ,0.49327920E+3,0.189E+3,0.114E+3,0.29070000E+1,0.95070000E+0 - ,0.40312400E+3,0.189E+3,0.115E+3,0.29070000E+1,0.99470000E+0 - ,0.34035860E+3,0.189E+3,0.116E+3,0.29070000E+1,0.99480000E+0 - ,0.27775450E+3,0.189E+3,0.117E+3,0.29070000E+1,0.99720000E+0 - ,0.54150520E+3,0.189E+3,0.119E+3,0.29070000E+1,0.97670000E+0 - ,0.10393542E+4,0.189E+3,0.120E+3,0.29070000E+1,0.98310000E+0 - ,0.54062540E+3,0.189E+3,0.121E+3,0.29070000E+1,0.18627000E+1 - ,0.52182910E+3,0.189E+3,0.122E+3,0.29070000E+1,0.18299000E+1 - ,0.51141880E+3,0.189E+3,0.123E+3,0.29070000E+1,0.19138000E+1 - ,0.50681950E+3,0.189E+3,0.124E+3,0.29070000E+1,0.18269000E+1 - ,0.46576900E+3,0.189E+3,0.125E+3,0.29070000E+1,0.16406000E+1 - ,0.43087900E+3,0.189E+3,0.126E+3,0.29070000E+1,0.16483000E+1 - ,0.41102320E+3,0.189E+3,0.127E+3,0.29070000E+1,0.17149000E+1 - ,0.40187340E+3,0.189E+3,0.128E+3,0.29070000E+1,0.17937000E+1 - ,0.39745630E+3,0.189E+3,0.129E+3,0.29070000E+1,0.95760000E+0 - ,0.37225130E+3,0.189E+3,0.130E+3,0.29070000E+1,0.19419000E+1 - ,0.61037340E+3,0.189E+3,0.131E+3,0.29070000E+1,0.96010000E+0 - ,0.53502330E+3,0.189E+3,0.132E+3,0.29070000E+1,0.94340000E+0 - ,0.47872210E+3,0.189E+3,0.133E+3,0.29070000E+1,0.98890000E+0 - ,0.43661290E+3,0.189E+3,0.134E+3,0.29070000E+1,0.99010000E+0 - ,0.38406800E+3,0.189E+3,0.135E+3,0.29070000E+1,0.99740000E+0 - ,0.64577530E+3,0.189E+3,0.137E+3,0.29070000E+1,0.97380000E+0 - ,0.12648795E+4,0.189E+3,0.138E+3,0.29070000E+1,0.98010000E+0 - ,0.96384860E+3,0.189E+3,0.139E+3,0.29070000E+1,0.19153000E+1 - ,0.71506360E+3,0.189E+3,0.140E+3,0.29070000E+1,0.19355000E+1 - ,0.72218160E+3,0.189E+3,0.141E+3,0.29070000E+1,0.19545000E+1 - ,0.67303520E+3,0.189E+3,0.142E+3,0.29070000E+1,0.19420000E+1 - ,0.75600910E+3,0.189E+3,0.143E+3,0.29070000E+1,0.16682000E+1 - ,0.58589660E+3,0.189E+3,0.144E+3,0.29070000E+1,0.18584000E+1 - ,0.54801980E+3,0.189E+3,0.145E+3,0.29070000E+1,0.19003000E+1 - ,0.50873460E+3,0.189E+3,0.146E+3,0.29070000E+1,0.18630000E+1 - ,0.49222520E+3,0.189E+3,0.147E+3,0.29070000E+1,0.96790000E+0 - ,0.48648840E+3,0.189E+3,0.148E+3,0.29070000E+1,0.19539000E+1 - ,0.77511410E+3,0.189E+3,0.149E+3,0.29070000E+1,0.96330000E+0 - ,0.69994150E+3,0.189E+3,0.150E+3,0.29070000E+1,0.95140000E+0 - ,0.65463420E+3,0.189E+3,0.151E+3,0.29070000E+1,0.97490000E+0 - ,0.61866240E+3,0.189E+3,0.152E+3,0.29070000E+1,0.98110000E+0 - ,0.56435520E+3,0.189E+3,0.153E+3,0.29070000E+1,0.99680000E+0 - ,0.76265600E+3,0.189E+3,0.155E+3,0.29070000E+1,0.99090000E+0 - ,0.16407829E+4,0.189E+3,0.156E+3,0.29070000E+1,0.97970000E+0 - ,0.12201975E+4,0.189E+3,0.157E+3,0.29070000E+1,0.19373000E+1 - ,0.76564160E+3,0.189E+3,0.159E+3,0.29070000E+1,0.29425000E+1 - ,0.74979030E+3,0.189E+3,0.160E+3,0.29070000E+1,0.29455000E+1 - ,0.72595040E+3,0.189E+3,0.161E+3,0.29070000E+1,0.29413000E+1 - ,0.72971000E+3,0.189E+3,0.162E+3,0.29070000E+1,0.29300000E+1 - ,0.70402290E+3,0.189E+3,0.163E+3,0.29070000E+1,0.18286000E+1 - ,0.73440270E+3,0.189E+3,0.164E+3,0.29070000E+1,0.28732000E+1 - ,0.68961450E+3,0.189E+3,0.165E+3,0.29070000E+1,0.29086000E+1 - ,0.70203220E+3,0.189E+3,0.166E+3,0.29070000E+1,0.28965000E+1 - ,0.65440840E+3,0.189E+3,0.167E+3,0.29070000E+1,0.29242000E+1 - ,0.63570180E+3,0.189E+3,0.168E+3,0.29070000E+1,0.29282000E+1 - ,0.63167050E+3,0.189E+3,0.169E+3,0.29070000E+1,0.29246000E+1 - ,0.66425610E+3,0.189E+3,0.170E+3,0.29070000E+1,0.28482000E+1 - ,0.61046730E+3,0.189E+3,0.171E+3,0.29070000E+1,0.29219000E+1 - ,0.82974450E+3,0.189E+3,0.172E+3,0.29070000E+1,0.19254000E+1 - ,0.76921560E+3,0.189E+3,0.173E+3,0.29070000E+1,0.19459000E+1 - ,0.70102290E+3,0.189E+3,0.174E+3,0.29070000E+1,0.19292000E+1 - ,0.71006080E+3,0.189E+3,0.175E+3,0.29070000E+1,0.18104000E+1 - ,0.61988720E+3,0.189E+3,0.176E+3,0.29070000E+1,0.18858000E+1 - ,0.58290540E+3,0.189E+3,0.177E+3,0.29070000E+1,0.18648000E+1 - ,0.55659850E+3,0.189E+3,0.178E+3,0.29070000E+1,0.19188000E+1 - ,0.53213080E+3,0.189E+3,0.179E+3,0.29070000E+1,0.98460000E+0 - ,0.51369080E+3,0.189E+3,0.180E+3,0.29070000E+1,0.19896000E+1 - ,0.83188530E+3,0.189E+3,0.181E+3,0.29070000E+1,0.92670000E+0 - ,0.75684580E+3,0.189E+3,0.182E+3,0.29070000E+1,0.93830000E+0 - ,0.73324790E+3,0.189E+3,0.183E+3,0.29070000E+1,0.98200000E+0 - ,0.71262070E+3,0.189E+3,0.184E+3,0.29070000E+1,0.98150000E+0 - ,0.66475080E+3,0.189E+3,0.185E+3,0.29070000E+1,0.99540000E+0 - ,0.85884400E+3,0.189E+3,0.187E+3,0.29070000E+1,0.97050000E+0 - ,0.16304211E+4,0.189E+3,0.188E+3,0.29070000E+1,0.96620000E+0 - ,0.90604480E+3,0.189E+3,0.189E+3,0.29070000E+1,0.29070000E+1 - ,0.58042000E+2,0.190E+3,0.100E+1,0.28844000E+1,0.91180000E+0 - ,0.37717100E+2,0.190E+3,0.200E+1,0.28844000E+1,0.00000000E+0 - ,0.10088719E+4,0.190E+3,0.300E+1,0.28844000E+1,0.00000000E+0 - ,0.54842030E+3,0.190E+3,0.400E+1,0.28844000E+1,0.00000000E+0 - ,0.36005530E+3,0.190E+3,0.500E+1,0.28844000E+1,0.00000000E+0 - ,0.23921200E+3,0.190E+3,0.600E+1,0.28844000E+1,0.00000000E+0 - ,0.16541170E+3,0.190E+3,0.700E+1,0.28844000E+1,0.00000000E+0 - ,0.12432800E+3,0.190E+3,0.800E+1,0.28844000E+1,0.00000000E+0 - ,0.93640800E+2,0.190E+3,0.900E+1,0.28844000E+1,0.00000000E+0 - ,0.71718500E+2,0.190E+3,0.100E+2,0.28844000E+1,0.00000000E+0 - ,0.12017562E+4,0.190E+3,0.110E+2,0.28844000E+1,0.00000000E+0 - ,0.88196280E+3,0.190E+3,0.120E+2,0.28844000E+1,0.00000000E+0 - ,0.80168460E+3,0.190E+3,0.130E+2,0.28844000E+1,0.00000000E+0 - ,0.62020400E+3,0.190E+3,0.140E+2,0.28844000E+1,0.00000000E+0 - ,0.47697090E+3,0.190E+3,0.150E+2,0.28844000E+1,0.00000000E+0 - ,0.39262180E+3,0.190E+3,0.160E+2,0.28844000E+1,0.00000000E+0 - ,0.31831370E+3,0.190E+3,0.170E+2,0.28844000E+1,0.00000000E+0 - ,0.25881200E+3,0.190E+3,0.180E+2,0.28844000E+1,0.00000000E+0 - ,0.20007417E+4,0.190E+3,0.190E+2,0.28844000E+1,0.00000000E+0 - ,0.15795049E+4,0.190E+3,0.200E+2,0.28844000E+1,0.00000000E+0 - ,0.12941588E+4,0.190E+3,0.210E+2,0.28844000E+1,0.00000000E+0 - ,0.12419423E+4,0.190E+3,0.220E+2,0.28844000E+1,0.00000000E+0 - ,0.11328667E+4,0.190E+3,0.230E+2,0.28844000E+1,0.00000000E+0 - ,0.89296930E+3,0.190E+3,0.240E+2,0.28844000E+1,0.00000000E+0 - ,0.96999930E+3,0.190E+3,0.250E+2,0.28844000E+1,0.00000000E+0 - ,0.76115260E+3,0.190E+3,0.260E+2,0.28844000E+1,0.00000000E+0 - ,0.79925150E+3,0.190E+3,0.270E+2,0.28844000E+1,0.00000000E+0 - ,0.82638550E+3,0.190E+3,0.280E+2,0.28844000E+1,0.00000000E+0 - ,0.63431240E+3,0.190E+3,0.290E+2,0.28844000E+1,0.00000000E+0 - ,0.64280130E+3,0.190E+3,0.300E+2,0.28844000E+1,0.00000000E+0 - ,0.76433880E+3,0.190E+3,0.310E+2,0.28844000E+1,0.00000000E+0 - ,0.66430070E+3,0.190E+3,0.320E+2,0.28844000E+1,0.00000000E+0 - ,0.55996260E+3,0.190E+3,0.330E+2,0.28844000E+1,0.00000000E+0 - ,0.49907290E+3,0.190E+3,0.340E+2,0.28844000E+1,0.00000000E+0 - ,0.43384090E+3,0.190E+3,0.350E+2,0.28844000E+1,0.00000000E+0 - ,0.37508740E+3,0.190E+3,0.360E+2,0.28844000E+1,0.00000000E+0 - ,0.22372776E+4,0.190E+3,0.370E+2,0.28844000E+1,0.00000000E+0 - ,0.18860887E+4,0.190E+3,0.380E+2,0.28844000E+1,0.00000000E+0 - ,0.16294376E+4,0.190E+3,0.390E+2,0.28844000E+1,0.00000000E+0 - ,0.14526448E+4,0.190E+3,0.400E+2,0.28844000E+1,0.00000000E+0 - ,0.13181488E+4,0.190E+3,0.410E+2,0.28844000E+1,0.00000000E+0 - ,0.10095160E+4,0.190E+3,0.420E+2,0.28844000E+1,0.00000000E+0 - ,0.11298359E+4,0.190E+3,0.430E+2,0.28844000E+1,0.00000000E+0 - ,0.85313360E+3,0.190E+3,0.440E+2,0.28844000E+1,0.00000000E+0 - ,0.93156900E+3,0.190E+3,0.450E+2,0.28844000E+1,0.00000000E+0 - ,0.86120120E+3,0.190E+3,0.460E+2,0.28844000E+1,0.00000000E+0 - ,0.72051370E+3,0.190E+3,0.470E+2,0.28844000E+1,0.00000000E+0 - ,0.75592110E+3,0.190E+3,0.480E+2,0.28844000E+1,0.00000000E+0 - ,0.95811210E+3,0.190E+3,0.490E+2,0.28844000E+1,0.00000000E+0 - ,0.87479670E+3,0.190E+3,0.500E+2,0.28844000E+1,0.00000000E+0 - ,0.77106630E+3,0.190E+3,0.510E+2,0.28844000E+1,0.00000000E+0 - ,0.71100220E+3,0.190E+3,0.520E+2,0.28844000E+1,0.00000000E+0 - ,0.63878920E+3,0.190E+3,0.530E+2,0.28844000E+1,0.00000000E+0 - ,0.57099520E+3,0.190E+3,0.540E+2,0.28844000E+1,0.00000000E+0 - ,0.27306836E+4,0.190E+3,0.550E+2,0.28844000E+1,0.00000000E+0 - ,0.24191244E+4,0.190E+3,0.560E+2,0.28844000E+1,0.00000000E+0 - ,0.20947841E+4,0.190E+3,0.570E+2,0.28844000E+1,0.00000000E+0 - ,0.91310340E+3,0.190E+3,0.580E+2,0.28844000E+1,0.27991000E+1 - ,0.21341663E+4,0.190E+3,0.590E+2,0.28844000E+1,0.00000000E+0 - ,0.20426932E+4,0.190E+3,0.600E+2,0.28844000E+1,0.00000000E+0 - ,0.19899080E+4,0.190E+3,0.610E+2,0.28844000E+1,0.00000000E+0 - ,0.19415270E+4,0.190E+3,0.620E+2,0.28844000E+1,0.00000000E+0 - ,0.18985844E+4,0.190E+3,0.630E+2,0.28844000E+1,0.00000000E+0 - ,0.14723209E+4,0.190E+3,0.640E+2,0.28844000E+1,0.00000000E+0 - ,0.17011137E+4,0.190E+3,0.650E+2,0.28844000E+1,0.00000000E+0 - ,0.16379975E+4,0.190E+3,0.660E+2,0.28844000E+1,0.00000000E+0 - ,0.17057192E+4,0.190E+3,0.670E+2,0.28844000E+1,0.00000000E+0 - ,0.16687205E+4,0.190E+3,0.680E+2,0.28844000E+1,0.00000000E+0 - ,0.16350831E+4,0.190E+3,0.690E+2,0.28844000E+1,0.00000000E+0 - ,0.16168530E+4,0.190E+3,0.700E+2,0.28844000E+1,0.00000000E+0 - ,0.13505554E+4,0.190E+3,0.710E+2,0.28844000E+1,0.00000000E+0 - ,0.13091260E+4,0.190E+3,0.720E+2,0.28844000E+1,0.00000000E+0 - ,0.11857100E+4,0.190E+3,0.730E+2,0.28844000E+1,0.00000000E+0 - ,0.99656680E+3,0.190E+3,0.740E+2,0.28844000E+1,0.00000000E+0 - ,0.10106039E+4,0.190E+3,0.750E+2,0.28844000E+1,0.00000000E+0 - ,0.91025670E+3,0.190E+3,0.760E+2,0.28844000E+1,0.00000000E+0 - ,0.82962710E+3,0.190E+3,0.770E+2,0.28844000E+1,0.00000000E+0 - ,0.68620440E+3,0.190E+3,0.780E+2,0.28844000E+1,0.00000000E+0 - ,0.63997490E+3,0.190E+3,0.790E+2,0.28844000E+1,0.00000000E+0 - ,0.65657070E+3,0.190E+3,0.800E+2,0.28844000E+1,0.00000000E+0 - ,0.98206910E+3,0.190E+3,0.810E+2,0.28844000E+1,0.00000000E+0 - ,0.95002070E+3,0.190E+3,0.820E+2,0.28844000E+1,0.00000000E+0 - ,0.86404130E+3,0.190E+3,0.830E+2,0.28844000E+1,0.00000000E+0 - ,0.81955770E+3,0.190E+3,0.840E+2,0.28844000E+1,0.00000000E+0 - ,0.75162660E+3,0.190E+3,0.850E+2,0.28844000E+1,0.00000000E+0 - ,0.68516600E+3,0.190E+3,0.860E+2,0.28844000E+1,0.00000000E+0 - ,0.25440695E+4,0.190E+3,0.870E+2,0.28844000E+1,0.00000000E+0 - ,0.23748028E+4,0.190E+3,0.880E+2,0.28844000E+1,0.00000000E+0 - ,0.20713967E+4,0.190E+3,0.890E+2,0.28844000E+1,0.00000000E+0 - ,0.18359296E+4,0.190E+3,0.900E+2,0.28844000E+1,0.00000000E+0 - ,0.18365610E+4,0.190E+3,0.910E+2,0.28844000E+1,0.00000000E+0 - ,0.17774636E+4,0.190E+3,0.920E+2,0.28844000E+1,0.00000000E+0 - ,0.18453202E+4,0.190E+3,0.930E+2,0.28844000E+1,0.00000000E+0 - ,0.17839174E+4,0.190E+3,0.940E+2,0.28844000E+1,0.00000000E+0 - ,0.94641800E+2,0.190E+3,0.101E+3,0.28844000E+1,0.00000000E+0 - ,0.31781250E+3,0.190E+3,0.103E+3,0.28844000E+1,0.98650000E+0 - ,0.40399690E+3,0.190E+3,0.104E+3,0.28844000E+1,0.98080000E+0 - ,0.30152640E+3,0.190E+3,0.105E+3,0.28844000E+1,0.97060000E+0 - ,0.22458760E+3,0.190E+3,0.106E+3,0.28844000E+1,0.98680000E+0 - ,0.15426790E+3,0.190E+3,0.107E+3,0.28844000E+1,0.99440000E+0 - ,0.11130120E+3,0.190E+3,0.108E+3,0.28844000E+1,0.99250000E+0 - ,0.75746100E+2,0.190E+3,0.109E+3,0.28844000E+1,0.99820000E+0 - ,0.46715670E+3,0.190E+3,0.111E+3,0.28844000E+1,0.96840000E+0 - ,0.72473020E+3,0.190E+3,0.112E+3,0.28844000E+1,0.96280000E+0 - ,0.72426630E+3,0.190E+3,0.113E+3,0.28844000E+1,0.96480000E+0 - ,0.57194340E+3,0.190E+3,0.114E+3,0.28844000E+1,0.95070000E+0 - ,0.46283220E+3,0.190E+3,0.115E+3,0.28844000E+1,0.99470000E+0 - ,0.38840280E+3,0.190E+3,0.116E+3,0.28844000E+1,0.99480000E+0 - ,0.31507380E+3,0.190E+3,0.117E+3,0.28844000E+1,0.99720000E+0 - ,0.63924470E+3,0.190E+3,0.119E+3,0.28844000E+1,0.97670000E+0 - ,0.12682110E+4,0.190E+3,0.120E+3,0.28844000E+1,0.98310000E+0 - ,0.62863700E+3,0.190E+3,0.121E+3,0.28844000E+1,0.18627000E+1 - ,0.60726950E+3,0.190E+3,0.122E+3,0.28844000E+1,0.18299000E+1 - ,0.59522520E+3,0.190E+3,0.123E+3,0.28844000E+1,0.19138000E+1 - ,0.59085660E+3,0.190E+3,0.124E+3,0.28844000E+1,0.18269000E+1 - ,0.53866860E+3,0.190E+3,0.125E+3,0.28844000E+1,0.16406000E+1 - ,0.49744160E+3,0.190E+3,0.126E+3,0.28844000E+1,0.16483000E+1 - ,0.47468740E+3,0.190E+3,0.127E+3,0.28844000E+1,0.17149000E+1 - ,0.46439490E+3,0.190E+3,0.128E+3,0.28844000E+1,0.17937000E+1 - ,0.46183290E+3,0.190E+3,0.129E+3,0.28844000E+1,0.95760000E+0 - ,0.42819990E+3,0.190E+3,0.130E+3,0.28844000E+1,0.19419000E+1 - ,0.71520850E+3,0.190E+3,0.131E+3,0.28844000E+1,0.96010000E+0 - ,0.61960740E+3,0.190E+3,0.132E+3,0.28844000E+1,0.94340000E+0 - ,0.55013410E+3,0.190E+3,0.133E+3,0.28844000E+1,0.98890000E+0 - ,0.49933630E+3,0.190E+3,0.134E+3,0.28844000E+1,0.99010000E+0 - ,0.43701980E+3,0.190E+3,0.135E+3,0.28844000E+1,0.99740000E+0 - ,0.76067450E+3,0.190E+3,0.137E+3,0.28844000E+1,0.97380000E+0 - ,0.15482877E+4,0.190E+3,0.138E+3,0.28844000E+1,0.98010000E+0 - ,0.11522222E+4,0.190E+3,0.139E+3,0.28844000E+1,0.19153000E+1 - ,0.83361520E+3,0.190E+3,0.140E+3,0.28844000E+1,0.19355000E+1 - ,0.84145560E+3,0.190E+3,0.141E+3,0.28844000E+1,0.19545000E+1 - ,0.78311230E+3,0.190E+3,0.142E+3,0.28844000E+1,0.19420000E+1 - ,0.88973240E+3,0.190E+3,0.143E+3,0.28844000E+1,0.16682000E+1 - ,0.67685180E+3,0.190E+3,0.144E+3,0.28844000E+1,0.18584000E+1 - ,0.63296580E+3,0.190E+3,0.145E+3,0.28844000E+1,0.19003000E+1 - ,0.58702360E+3,0.190E+3,0.146E+3,0.28844000E+1,0.18630000E+1 - ,0.56847740E+3,0.190E+3,0.147E+3,0.28844000E+1,0.96790000E+0 - ,0.55862930E+3,0.190E+3,0.148E+3,0.28844000E+1,0.19539000E+1 - ,0.90926210E+3,0.190E+3,0.149E+3,0.28844000E+1,0.96330000E+0 - ,0.81233800E+3,0.190E+3,0.150E+3,0.28844000E+1,0.95140000E+0 - ,0.75464760E+3,0.190E+3,0.151E+3,0.28844000E+1,0.97490000E+0 - ,0.71021200E+3,0.190E+3,0.152E+3,0.28844000E+1,0.98110000E+0 - ,0.64484300E+3,0.190E+3,0.153E+3,0.28844000E+1,0.99680000E+0 - ,0.89097610E+3,0.190E+3,0.155E+3,0.28844000E+1,0.99090000E+0 - ,0.20249316E+4,0.190E+3,0.156E+3,0.28844000E+1,0.97970000E+0 - ,0.14635069E+4,0.190E+3,0.157E+3,0.28844000E+1,0.19373000E+1 - ,0.88503310E+3,0.190E+3,0.159E+3,0.28844000E+1,0.29425000E+1 - ,0.86659780E+3,0.190E+3,0.160E+3,0.28844000E+1,0.29455000E+1 - ,0.83870440E+3,0.190E+3,0.161E+3,0.28844000E+1,0.29413000E+1 - ,0.84447740E+3,0.190E+3,0.162E+3,0.28844000E+1,0.29300000E+1 - ,0.81850700E+3,0.190E+3,0.163E+3,0.28844000E+1,0.18286000E+1 - ,0.84998270E+3,0.190E+3,0.164E+3,0.28844000E+1,0.28732000E+1 - ,0.79715610E+3,0.190E+3,0.165E+3,0.28844000E+1,0.29086000E+1 - ,0.81406210E+3,0.190E+3,0.166E+3,0.28844000E+1,0.28965000E+1 - ,0.75550250E+3,0.190E+3,0.167E+3,0.28844000E+1,0.29242000E+1 - ,0.73357320E+3,0.190E+3,0.168E+3,0.28844000E+1,0.29282000E+1 - ,0.72916890E+3,0.190E+3,0.169E+3,0.28844000E+1,0.29246000E+1 - ,0.76808740E+3,0.190E+3,0.170E+3,0.28844000E+1,0.28482000E+1 - ,0.70415860E+3,0.190E+3,0.171E+3,0.28844000E+1,0.29219000E+1 - ,0.97550990E+3,0.190E+3,0.172E+3,0.28844000E+1,0.19254000E+1 - ,0.89859560E+3,0.190E+3,0.173E+3,0.28844000E+1,0.19459000E+1 - ,0.81374230E+3,0.190E+3,0.174E+3,0.28844000E+1,0.19292000E+1 - ,0.82881920E+3,0.190E+3,0.175E+3,0.28844000E+1,0.18104000E+1 - ,0.71350780E+3,0.190E+3,0.176E+3,0.28844000E+1,0.18858000E+1 - ,0.66976280E+3,0.190E+3,0.177E+3,0.28844000E+1,0.18648000E+1 - ,0.63893520E+3,0.190E+3,0.178E+3,0.28844000E+1,0.19188000E+1 - ,0.61116560E+3,0.190E+3,0.179E+3,0.28844000E+1,0.98460000E+0 - ,0.58708670E+3,0.190E+3,0.180E+3,0.28844000E+1,0.19896000E+1 - ,0.97511530E+3,0.190E+3,0.181E+3,0.28844000E+1,0.92670000E+0 - ,0.87752310E+3,0.190E+3,0.182E+3,0.28844000E+1,0.93830000E+0 - ,0.84561490E+3,0.190E+3,0.183E+3,0.28844000E+1,0.98200000E+0 - ,0.81904220E+3,0.190E+3,0.184E+3,0.28844000E+1,0.98150000E+0 - ,0.76065040E+3,0.190E+3,0.185E+3,0.28844000E+1,0.99540000E+0 - ,0.10026461E+4,0.190E+3,0.187E+3,0.28844000E+1,0.97050000E+0 - ,0.19926647E+4,0.190E+3,0.188E+3,0.28844000E+1,0.96620000E+0 - ,0.10474302E+4,0.190E+3,0.189E+3,0.28844000E+1,0.29070000E+1 - ,0.12245933E+4,0.190E+3,0.190E+3,0.28844000E+1,0.28844000E+1 - ,0.52264500E+2,0.191E+3,0.100E+1,0.28738000E+1,0.91180000E+0 - ,0.34332900E+2,0.191E+3,0.200E+1,0.28738000E+1,0.00000000E+0 - ,0.89070150E+3,0.191E+3,0.300E+1,0.28738000E+1,0.00000000E+0 - ,0.48502270E+3,0.191E+3,0.400E+1,0.28738000E+1,0.00000000E+0 - ,0.32084970E+3,0.191E+3,0.500E+1,0.28738000E+1,0.00000000E+0 - ,0.21465050E+3,0.191E+3,0.600E+1,0.28738000E+1,0.00000000E+0 - ,0.14930470E+3,0.191E+3,0.700E+1,0.28738000E+1,0.00000000E+0 - ,0.11273380E+3,0.191E+3,0.800E+1,0.28738000E+1,0.00000000E+0 - ,0.85262100E+2,0.191E+3,0.900E+1,0.28738000E+1,0.00000000E+0 - ,0.65533100E+2,0.191E+3,0.100E+2,0.28738000E+1,0.00000000E+0 - ,0.10608040E+4,0.191E+3,0.110E+2,0.28738000E+1,0.00000000E+0 - ,0.77888060E+3,0.191E+3,0.120E+2,0.28738000E+1,0.00000000E+0 - ,0.71034880E+3,0.191E+3,0.130E+2,0.28738000E+1,0.00000000E+0 - ,0.55219130E+3,0.191E+3,0.140E+2,0.28738000E+1,0.00000000E+0 - ,0.42680750E+3,0.191E+3,0.150E+2,0.28738000E+1,0.00000000E+0 - ,0.35264770E+3,0.191E+3,0.160E+2,0.28738000E+1,0.00000000E+0 - ,0.28699980E+3,0.191E+3,0.170E+2,0.28738000E+1,0.00000000E+0 - ,0.23418470E+3,0.191E+3,0.180E+2,0.28738000E+1,0.00000000E+0 - ,0.17789468E+4,0.191E+3,0.190E+2,0.28738000E+1,0.00000000E+0 - ,0.13939683E+4,0.191E+3,0.200E+2,0.28738000E+1,0.00000000E+0 - ,0.11425935E+4,0.191E+3,0.210E+2,0.28738000E+1,0.00000000E+0 - ,0.10979705E+4,0.191E+3,0.220E+2,0.28738000E+1,0.00000000E+0 - ,0.10022471E+4,0.191E+3,0.230E+2,0.28738000E+1,0.00000000E+0 - ,0.79096650E+3,0.191E+3,0.240E+2,0.28738000E+1,0.00000000E+0 - ,0.85910440E+3,0.191E+3,0.250E+2,0.28738000E+1,0.00000000E+0 - ,0.67498040E+3,0.191E+3,0.260E+2,0.28738000E+1,0.00000000E+0 - ,0.70900470E+3,0.191E+3,0.270E+2,0.28738000E+1,0.00000000E+0 - ,0.73240820E+3,0.191E+3,0.280E+2,0.28738000E+1,0.00000000E+0 - ,0.56299640E+3,0.191E+3,0.290E+2,0.28738000E+1,0.00000000E+0 - ,0.57131500E+3,0.191E+3,0.300E+2,0.28738000E+1,0.00000000E+0 - ,0.67870160E+3,0.191E+3,0.310E+2,0.28738000E+1,0.00000000E+0 - ,0.59190790E+3,0.191E+3,0.320E+2,0.28738000E+1,0.00000000E+0 - ,0.50094070E+3,0.191E+3,0.330E+2,0.28738000E+1,0.00000000E+0 - ,0.44774380E+3,0.191E+3,0.340E+2,0.28738000E+1,0.00000000E+0 - ,0.39043140E+3,0.191E+3,0.350E+2,0.28738000E+1,0.00000000E+0 - ,0.33858330E+3,0.191E+3,0.360E+2,0.28738000E+1,0.00000000E+0 - ,0.19913447E+4,0.191E+3,0.370E+2,0.28738000E+1,0.00000000E+0 - ,0.16656547E+4,0.191E+3,0.380E+2,0.28738000E+1,0.00000000E+0 - ,0.14407783E+4,0.191E+3,0.390E+2,0.28738000E+1,0.00000000E+0 - ,0.12860297E+4,0.191E+3,0.400E+2,0.28738000E+1,0.00000000E+0 - ,0.11683462E+4,0.191E+3,0.410E+2,0.28738000E+1,0.00000000E+0 - ,0.89688390E+3,0.191E+3,0.420E+2,0.28738000E+1,0.00000000E+0 - ,0.10030323E+4,0.191E+3,0.430E+2,0.28738000E+1,0.00000000E+0 - ,0.75931940E+3,0.191E+3,0.440E+2,0.28738000E+1,0.00000000E+0 - ,0.82841280E+3,0.191E+3,0.450E+2,0.28738000E+1,0.00000000E+0 - ,0.76640860E+3,0.191E+3,0.460E+2,0.28738000E+1,0.00000000E+0 - ,0.64182000E+3,0.191E+3,0.470E+2,0.28738000E+1,0.00000000E+0 - ,0.67342870E+3,0.191E+3,0.480E+2,0.28738000E+1,0.00000000E+0 - ,0.85158740E+3,0.191E+3,0.490E+2,0.28738000E+1,0.00000000E+0 - ,0.77929980E+3,0.191E+3,0.500E+2,0.28738000E+1,0.00000000E+0 - ,0.68907930E+3,0.191E+3,0.510E+2,0.28738000E+1,0.00000000E+0 - ,0.63681840E+3,0.191E+3,0.520E+2,0.28738000E+1,0.00000000E+0 - ,0.57361210E+3,0.191E+3,0.530E+2,0.28738000E+1,0.00000000E+0 - ,0.51407080E+3,0.191E+3,0.540E+2,0.28738000E+1,0.00000000E+0 - ,0.24381558E+4,0.191E+3,0.550E+2,0.28738000E+1,0.00000000E+0 - ,0.21382977E+4,0.191E+3,0.560E+2,0.28738000E+1,0.00000000E+0 - ,0.18526946E+4,0.191E+3,0.570E+2,0.28738000E+1,0.00000000E+0 - ,0.81584440E+3,0.191E+3,0.580E+2,0.28738000E+1,0.27991000E+1 - ,0.18889925E+4,0.191E+3,0.590E+2,0.28738000E+1,0.00000000E+0 - ,0.18057716E+4,0.191E+3,0.600E+2,0.28738000E+1,0.00000000E+0 - ,0.17590005E+4,0.191E+3,0.610E+2,0.28738000E+1,0.00000000E+0 - ,0.17161451E+4,0.191E+3,0.620E+2,0.28738000E+1,0.00000000E+0 - ,0.16781174E+4,0.191E+3,0.630E+2,0.28738000E+1,0.00000000E+0 - ,0.13048651E+4,0.191E+3,0.640E+2,0.28738000E+1,0.00000000E+0 - ,0.15104078E+4,0.191E+3,0.650E+2,0.28738000E+1,0.00000000E+0 - ,0.14576760E+4,0.191E+3,0.660E+2,0.28738000E+1,0.00000000E+0 - ,0.15075770E+4,0.191E+3,0.670E+2,0.28738000E+1,0.00000000E+0 - ,0.14748115E+4,0.191E+3,0.680E+2,0.28738000E+1,0.00000000E+0 - ,0.14450628E+4,0.191E+3,0.690E+2,0.28738000E+1,0.00000000E+0 - ,0.14287766E+4,0.191E+3,0.700E+2,0.28738000E+1,0.00000000E+0 - ,0.11975147E+4,0.191E+3,0.710E+2,0.28738000E+1,0.00000000E+0 - ,0.11607498E+4,0.191E+3,0.720E+2,0.28738000E+1,0.00000000E+0 - ,0.10529859E+4,0.191E+3,0.730E+2,0.28738000E+1,0.00000000E+0 - ,0.88698680E+3,0.191E+3,0.740E+2,0.28738000E+1,0.00000000E+0 - ,0.89986720E+3,0.191E+3,0.750E+2,0.28738000E+1,0.00000000E+0 - ,0.81184020E+3,0.191E+3,0.760E+2,0.28738000E+1,0.00000000E+0 - ,0.74102110E+3,0.191E+3,0.770E+2,0.28738000E+1,0.00000000E+0 - ,0.61428030E+3,0.191E+3,0.780E+2,0.28738000E+1,0.00000000E+0 - ,0.57339400E+3,0.191E+3,0.790E+2,0.28738000E+1,0.00000000E+0 - ,0.58842050E+3,0.191E+3,0.800E+2,0.28738000E+1,0.00000000E+0 - ,0.87453780E+3,0.191E+3,0.810E+2,0.28738000E+1,0.00000000E+0 - ,0.84698840E+3,0.191E+3,0.820E+2,0.28738000E+1,0.00000000E+0 - ,0.77232730E+3,0.191E+3,0.830E+2,0.28738000E+1,0.00000000E+0 - ,0.73386420E+3,0.191E+3,0.840E+2,0.28738000E+1,0.00000000E+0 - ,0.67459880E+3,0.191E+3,0.850E+2,0.28738000E+1,0.00000000E+0 - ,0.61636260E+3,0.191E+3,0.860E+2,0.28738000E+1,0.00000000E+0 - ,0.22655221E+4,0.191E+3,0.870E+2,0.28738000E+1,0.00000000E+0 - ,0.21000716E+4,0.191E+3,0.880E+2,0.28738000E+1,0.00000000E+0 - ,0.18334406E+4,0.191E+3,0.890E+2,0.28738000E+1,0.00000000E+0 - ,0.16280585E+4,0.191E+3,0.900E+2,0.28738000E+1,0.00000000E+0 - ,0.16281996E+4,0.191E+3,0.910E+2,0.28738000E+1,0.00000000E+0 - ,0.15757649E+4,0.191E+3,0.920E+2,0.28738000E+1,0.00000000E+0 - ,0.16336303E+4,0.191E+3,0.930E+2,0.28738000E+1,0.00000000E+0 - ,0.15794150E+4,0.191E+3,0.940E+2,0.28738000E+1,0.00000000E+0 - ,0.84723800E+2,0.191E+3,0.101E+3,0.28738000E+1,0.00000000E+0 - ,0.28145990E+3,0.191E+3,0.103E+3,0.28738000E+1,0.98650000E+0 - ,0.35859140E+3,0.191E+3,0.104E+3,0.28738000E+1,0.98080000E+0 - ,0.26924380E+3,0.191E+3,0.105E+3,0.28738000E+1,0.97060000E+0 - ,0.20157990E+3,0.191E+3,0.106E+3,0.28738000E+1,0.98680000E+0 - ,0.13931210E+3,0.191E+3,0.107E+3,0.28738000E+1,0.99440000E+0 - ,0.10105790E+3,0.191E+3,0.108E+3,0.28738000E+1,0.99250000E+0 - ,0.69270700E+2,0.191E+3,0.109E+3,0.28738000E+1,0.99820000E+0 - ,0.41351280E+3,0.191E+3,0.111E+3,0.28738000E+1,0.96840000E+0 - ,0.64146750E+3,0.191E+3,0.112E+3,0.28738000E+1,0.96280000E+0 - ,0.64236160E+3,0.191E+3,0.113E+3,0.28738000E+1,0.96480000E+0 - ,0.50971630E+3,0.191E+3,0.114E+3,0.28738000E+1,0.95070000E+0 - ,0.41427030E+3,0.191E+3,0.115E+3,0.28738000E+1,0.99470000E+0 - ,0.34884970E+3,0.191E+3,0.116E+3,0.28738000E+1,0.99480000E+0 - ,0.28407250E+3,0.191E+3,0.117E+3,0.28738000E+1,0.99720000E+0 - ,0.56838310E+3,0.191E+3,0.119E+3,0.28738000E+1,0.97670000E+0 - ,0.11243632E+4,0.191E+3,0.120E+3,0.28738000E+1,0.98310000E+0 - ,0.55973470E+3,0.191E+3,0.121E+3,0.28738000E+1,0.18627000E+1 - ,0.54164230E+3,0.191E+3,0.122E+3,0.28738000E+1,0.18299000E+1 - ,0.53075760E+3,0.191E+3,0.123E+3,0.28738000E+1,0.19138000E+1 - ,0.52667650E+3,0.191E+3,0.124E+3,0.28738000E+1,0.18269000E+1 - ,0.48098950E+3,0.191E+3,0.125E+3,0.28738000E+1,0.16406000E+1 - ,0.44458610E+3,0.191E+3,0.126E+3,0.28738000E+1,0.16483000E+1 - ,0.42438350E+3,0.191E+3,0.127E+3,0.28738000E+1,0.17149000E+1 - ,0.41509660E+3,0.191E+3,0.128E+3,0.28738000E+1,0.17937000E+1 - ,0.41210000E+3,0.191E+3,0.129E+3,0.28738000E+1,0.95760000E+0 - ,0.38322820E+3,0.191E+3,0.130E+3,0.28738000E+1,0.19419000E+1 - ,0.63562870E+3,0.191E+3,0.131E+3,0.28738000E+1,0.96010000E+0 - ,0.55267960E+3,0.191E+3,0.132E+3,0.28738000E+1,0.94340000E+0 - ,0.49229290E+3,0.191E+3,0.133E+3,0.28738000E+1,0.98890000E+0 - ,0.44797180E+3,0.191E+3,0.134E+3,0.28738000E+1,0.99010000E+0 - ,0.39323670E+3,0.191E+3,0.135E+3,0.28738000E+1,0.99740000E+0 - ,0.67715660E+3,0.191E+3,0.137E+3,0.28738000E+1,0.97380000E+0 - ,0.13743437E+4,0.191E+3,0.138E+3,0.28738000E+1,0.98010000E+0 - ,0.10260397E+4,0.191E+3,0.139E+3,0.28738000E+1,0.19153000E+1 - ,0.74279230E+3,0.191E+3,0.140E+3,0.28738000E+1,0.19355000E+1 - ,0.74895660E+3,0.191E+3,0.141E+3,0.28738000E+1,0.19545000E+1 - ,0.69892350E+3,0.191E+3,0.142E+3,0.28738000E+1,0.19420000E+1 - ,0.79275350E+3,0.191E+3,0.143E+3,0.28738000E+1,0.16682000E+1 - ,0.60535870E+3,0.191E+3,0.144E+3,0.28738000E+1,0.18584000E+1 - ,0.56644570E+3,0.191E+3,0.145E+3,0.28738000E+1,0.19003000E+1 - ,0.52569600E+3,0.191E+3,0.146E+3,0.28738000E+1,0.18630000E+1 - ,0.50889220E+3,0.191E+3,0.147E+3,0.28738000E+1,0.96790000E+0 - ,0.50075690E+3,0.191E+3,0.148E+3,0.28738000E+1,0.19539000E+1 - ,0.80885400E+3,0.191E+3,0.149E+3,0.28738000E+1,0.96330000E+0 - ,0.72462440E+3,0.191E+3,0.150E+3,0.28738000E+1,0.95140000E+0 - ,0.67473780E+3,0.191E+3,0.151E+3,0.28738000E+1,0.97490000E+0 - ,0.63619670E+3,0.191E+3,0.152E+3,0.28738000E+1,0.98110000E+0 - ,0.57901430E+3,0.191E+3,0.153E+3,0.28738000E+1,0.99680000E+0 - ,0.79465520E+3,0.191E+3,0.155E+3,0.28738000E+1,0.99090000E+0 - ,0.18031914E+4,0.191E+3,0.156E+3,0.28738000E+1,0.97970000E+0 - ,0.13050880E+4,0.191E+3,0.157E+3,0.28738000E+1,0.19373000E+1 - ,0.79095680E+3,0.191E+3,0.159E+3,0.28738000E+1,0.29425000E+1 - ,0.77448190E+3,0.191E+3,0.160E+3,0.28738000E+1,0.29455000E+1 - ,0.74970660E+3,0.191E+3,0.161E+3,0.28738000E+1,0.29413000E+1 - ,0.75473340E+3,0.191E+3,0.162E+3,0.28738000E+1,0.29300000E+1 - ,0.73034120E+3,0.191E+3,0.163E+3,0.28738000E+1,0.18286000E+1 - ,0.75925810E+3,0.191E+3,0.164E+3,0.28738000E+1,0.28732000E+1 - ,0.71236590E+3,0.191E+3,0.165E+3,0.28738000E+1,0.29086000E+1 - ,0.72723060E+3,0.191E+3,0.166E+3,0.28738000E+1,0.28965000E+1 - ,0.67539950E+3,0.191E+3,0.167E+3,0.28738000E+1,0.29242000E+1 - ,0.65589880E+3,0.191E+3,0.168E+3,0.28738000E+1,0.29282000E+1 - ,0.65187600E+3,0.191E+3,0.169E+3,0.28738000E+1,0.29246000E+1 - ,0.68605020E+3,0.191E+3,0.170E+3,0.28738000E+1,0.28482000E+1 - ,0.62962830E+3,0.191E+3,0.171E+3,0.28738000E+1,0.29219000E+1 - ,0.86895920E+3,0.191E+3,0.172E+3,0.28738000E+1,0.19254000E+1 - ,0.80143340E+3,0.191E+3,0.173E+3,0.28738000E+1,0.19459000E+1 - ,0.72695200E+3,0.191E+3,0.174E+3,0.28738000E+1,0.19292000E+1 - ,0.73934260E+3,0.191E+3,0.175E+3,0.28738000E+1,0.18104000E+1 - ,0.63931090E+3,0.191E+3,0.176E+3,0.28738000E+1,0.18858000E+1 - ,0.60057540E+3,0.191E+3,0.177E+3,0.28738000E+1,0.18648000E+1 - ,0.57328530E+3,0.191E+3,0.178E+3,0.28738000E+1,0.19188000E+1 - ,0.54847560E+3,0.191E+3,0.179E+3,0.28738000E+1,0.98460000E+0 - ,0.52767310E+3,0.191E+3,0.180E+3,0.28738000E+1,0.19896000E+1 - ,0.86865890E+3,0.191E+3,0.181E+3,0.28738000E+1,0.92670000E+0 - ,0.78363670E+3,0.191E+3,0.182E+3,0.28738000E+1,0.93830000E+0 - ,0.75634500E+3,0.191E+3,0.183E+3,0.28738000E+1,0.98200000E+0 - ,0.73358480E+3,0.191E+3,0.184E+3,0.28738000E+1,0.98150000E+0 - ,0.68269100E+3,0.191E+3,0.185E+3,0.28738000E+1,0.99540000E+0 - ,0.89435100E+3,0.191E+3,0.187E+3,0.28738000E+1,0.97050000E+0 - ,0.17716049E+4,0.191E+3,0.188E+3,0.28738000E+1,0.96620000E+0 - ,0.93586320E+3,0.191E+3,0.189E+3,0.28738000E+1,0.29070000E+1 - ,0.10934914E+4,0.191E+3,0.190E+3,0.28738000E+1,0.28844000E+1 - ,0.98037580E+3,0.191E+3,0.191E+3,0.28738000E+1,0.28738000E+1 - ,0.46755900E+2,0.192E+3,0.100E+1,0.28878000E+1,0.91180000E+0 - ,0.31074600E+2,0.192E+3,0.200E+1,0.28878000E+1,0.00000000E+0 - ,0.73198050E+3,0.192E+3,0.300E+1,0.28878000E+1,0.00000000E+0 - ,0.41975640E+3,0.192E+3,0.400E+1,0.28878000E+1,0.00000000E+0 - ,0.28243120E+3,0.192E+3,0.500E+1,0.28878000E+1,0.00000000E+0 - ,0.19102230E+3,0.192E+3,0.600E+1,0.28878000E+1,0.00000000E+0 - ,0.13387230E+3,0.192E+3,0.700E+1,0.28878000E+1,0.00000000E+0 - ,0.10159960E+3,0.192E+3,0.800E+1,0.28878000E+1,0.00000000E+0 - ,0.77176400E+2,0.192E+3,0.900E+1,0.28878000E+1,0.00000000E+0 - ,0.59527100E+2,0.192E+3,0.100E+2,0.28878000E+1,0.00000000E+0 - ,0.87518610E+3,0.192E+3,0.110E+2,0.28878000E+1,0.00000000E+0 - ,0.66958510E+3,0.192E+3,0.120E+2,0.28878000E+1,0.00000000E+0 - ,0.61654260E+3,0.192E+3,0.130E+2,0.28878000E+1,0.00000000E+0 - ,0.48533720E+3,0.192E+3,0.140E+2,0.28878000E+1,0.00000000E+0 - ,0.37850250E+3,0.192E+3,0.150E+2,0.28878000E+1,0.00000000E+0 - ,0.31437000E+3,0.192E+3,0.160E+2,0.28878000E+1,0.00000000E+0 - ,0.25708750E+3,0.192E+3,0.170E+2,0.28878000E+1,0.00000000E+0 - ,0.21063660E+3,0.192E+3,0.180E+2,0.28878000E+1,0.00000000E+0 - ,0.14387994E+4,0.192E+3,0.190E+2,0.28878000E+1,0.00000000E+0 - ,0.11798248E+4,0.192E+3,0.200E+2,0.28878000E+1,0.00000000E+0 - ,0.97372410E+3,0.192E+3,0.210E+2,0.28878000E+1,0.00000000E+0 - ,0.93993750E+3,0.192E+3,0.220E+2,0.28878000E+1,0.00000000E+0 - ,0.86049210E+3,0.192E+3,0.230E+2,0.28878000E+1,0.00000000E+0 - ,0.67850520E+3,0.192E+3,0.240E+2,0.28878000E+1,0.00000000E+0 - ,0.74061370E+3,0.192E+3,0.250E+2,0.28878000E+1,0.00000000E+0 - ,0.58183780E+3,0.192E+3,0.260E+2,0.28878000E+1,0.00000000E+0 - ,0.61569900E+3,0.192E+3,0.270E+2,0.28878000E+1,0.00000000E+0 - ,0.63436640E+3,0.192E+3,0.280E+2,0.28878000E+1,0.00000000E+0 - ,0.48701500E+3,0.192E+3,0.290E+2,0.28878000E+1,0.00000000E+0 - ,0.49903190E+3,0.192E+3,0.300E+2,0.28878000E+1,0.00000000E+0 - ,0.59084610E+3,0.192E+3,0.310E+2,0.28878000E+1,0.00000000E+0 - ,0.52052680E+3,0.192E+3,0.320E+2,0.28878000E+1,0.00000000E+0 - ,0.44390020E+3,0.192E+3,0.330E+2,0.28878000E+1,0.00000000E+0 - ,0.39844930E+3,0.192E+3,0.340E+2,0.28878000E+1,0.00000000E+0 - ,0.34891220E+3,0.192E+3,0.350E+2,0.28878000E+1,0.00000000E+0 - ,0.30370810E+3,0.192E+3,0.360E+2,0.28878000E+1,0.00000000E+0 - ,0.16125430E+4,0.192E+3,0.370E+2,0.28878000E+1,0.00000000E+0 - ,0.14064978E+4,0.192E+3,0.380E+2,0.28878000E+1,0.00000000E+0 - ,0.12301136E+4,0.192E+3,0.390E+2,0.28878000E+1,0.00000000E+0 - ,0.11047666E+4,0.192E+3,0.400E+2,0.28878000E+1,0.00000000E+0 - ,0.10071282E+4,0.192E+3,0.410E+2,0.28878000E+1,0.00000000E+0 - ,0.77757670E+3,0.192E+3,0.420E+2,0.28878000E+1,0.00000000E+0 - ,0.86755080E+3,0.192E+3,0.430E+2,0.28878000E+1,0.00000000E+0 - ,0.66100390E+3,0.192E+3,0.440E+2,0.28878000E+1,0.00000000E+0 - ,0.72198170E+3,0.192E+3,0.450E+2,0.28878000E+1,0.00000000E+0 - ,0.66945830E+3,0.192E+3,0.460E+2,0.28878000E+1,0.00000000E+0 - ,0.55904400E+3,0.192E+3,0.470E+2,0.28878000E+1,0.00000000E+0 - ,0.58989000E+3,0.192E+3,0.480E+2,0.28878000E+1,0.00000000E+0 - ,0.74043240E+3,0.192E+3,0.490E+2,0.28878000E+1,0.00000000E+0 - ,0.68380180E+3,0.192E+3,0.500E+2,0.28878000E+1,0.00000000E+0 - ,0.60902530E+3,0.192E+3,0.510E+2,0.28878000E+1,0.00000000E+0 - ,0.56501830E+3,0.192E+3,0.520E+2,0.28878000E+1,0.00000000E+0 - ,0.51096120E+3,0.192E+3,0.530E+2,0.28878000E+1,0.00000000E+0 - ,0.45956760E+3,0.192E+3,0.540E+2,0.28878000E+1,0.00000000E+0 - ,0.19652428E+4,0.192E+3,0.550E+2,0.28878000E+1,0.00000000E+0 - ,0.17949059E+4,0.192E+3,0.560E+2,0.28878000E+1,0.00000000E+0 - ,0.15740959E+4,0.192E+3,0.570E+2,0.28878000E+1,0.00000000E+0 - ,0.71985720E+3,0.192E+3,0.580E+2,0.28878000E+1,0.27991000E+1 - ,0.15898595E+4,0.192E+3,0.590E+2,0.28878000E+1,0.00000000E+0 - ,0.15259822E+4,0.192E+3,0.600E+2,0.28878000E+1,0.00000000E+0 - ,0.14875408E+4,0.192E+3,0.610E+2,0.28878000E+1,0.00000000E+0 - ,0.14521965E+4,0.192E+3,0.620E+2,0.28878000E+1,0.00000000E+0 - ,0.14208475E+4,0.192E+3,0.630E+2,0.28878000E+1,0.00000000E+0 - ,0.11161138E+4,0.192E+3,0.640E+2,0.28878000E+1,0.00000000E+0 - ,0.12609766E+4,0.192E+3,0.650E+2,0.28878000E+1,0.00000000E+0 - ,0.12159398E+4,0.192E+3,0.660E+2,0.28878000E+1,0.00000000E+0 - ,0.12808410E+4,0.192E+3,0.670E+2,0.28878000E+1,0.00000000E+0 - ,0.12535493E+4,0.192E+3,0.680E+2,0.28878000E+1,0.00000000E+0 - ,0.12289183E+4,0.192E+3,0.690E+2,0.28878000E+1,0.00000000E+0 - ,0.12145773E+4,0.192E+3,0.700E+2,0.28878000E+1,0.00000000E+0 - ,0.10226803E+4,0.192E+3,0.710E+2,0.28878000E+1,0.00000000E+0 - ,0.10038975E+4,0.192E+3,0.720E+2,0.28878000E+1,0.00000000E+0 - ,0.91571760E+3,0.192E+3,0.730E+2,0.28878000E+1,0.00000000E+0 - ,0.77355940E+3,0.192E+3,0.740E+2,0.28878000E+1,0.00000000E+0 - ,0.78664370E+3,0.192E+3,0.750E+2,0.28878000E+1,0.00000000E+0 - ,0.71280370E+3,0.192E+3,0.760E+2,0.28878000E+1,0.00000000E+0 - ,0.65278320E+3,0.192E+3,0.770E+2,0.28878000E+1,0.00000000E+0 - ,0.54266550E+3,0.192E+3,0.780E+2,0.28878000E+1,0.00000000E+0 - ,0.50716770E+3,0.192E+3,0.790E+2,0.28878000E+1,0.00000000E+0 - ,0.52145390E+3,0.192E+3,0.800E+2,0.28878000E+1,0.00000000E+0 - ,0.76086200E+3,0.192E+3,0.810E+2,0.28878000E+1,0.00000000E+0 - ,0.74290150E+3,0.192E+3,0.820E+2,0.28878000E+1,0.00000000E+0 - ,0.68212270E+3,0.192E+3,0.830E+2,0.28878000E+1,0.00000000E+0 - ,0.65042490E+3,0.192E+3,0.840E+2,0.28878000E+1,0.00000000E+0 - ,0.60026280E+3,0.192E+3,0.850E+2,0.28878000E+1,0.00000000E+0 - ,0.55029950E+3,0.192E+3,0.860E+2,0.28878000E+1,0.00000000E+0 - ,0.18525059E+4,0.192E+3,0.870E+2,0.28878000E+1,0.00000000E+0 - ,0.17734791E+4,0.192E+3,0.880E+2,0.28878000E+1,0.00000000E+0 - ,0.15651457E+4,0.192E+3,0.890E+2,0.28878000E+1,0.00000000E+0 - ,0.14048813E+4,0.192E+3,0.900E+2,0.28878000E+1,0.00000000E+0 - ,0.13963790E+4,0.192E+3,0.910E+2,0.28878000E+1,0.00000000E+0 - ,0.13520713E+4,0.192E+3,0.920E+2,0.28878000E+1,0.00000000E+0 - ,0.13933621E+4,0.192E+3,0.930E+2,0.28878000E+1,0.00000000E+0 - ,0.13490495E+4,0.192E+3,0.940E+2,0.28878000E+1,0.00000000E+0 - ,0.75206600E+2,0.192E+3,0.101E+3,0.28878000E+1,0.00000000E+0 - ,0.24403010E+3,0.192E+3,0.103E+3,0.28878000E+1,0.98650000E+0 - ,0.31132040E+3,0.192E+3,0.104E+3,0.28878000E+1,0.98080000E+0 - ,0.23766340E+3,0.192E+3,0.105E+3,0.28878000E+1,0.97060000E+0 - ,0.17925610E+3,0.192E+3,0.106E+3,0.28878000E+1,0.98680000E+0 - ,0.12489310E+3,0.192E+3,0.107E+3,0.28878000E+1,0.99440000E+0 - ,0.91186300E+2,0.192E+3,0.108E+3,0.28878000E+1,0.99250000E+0 - ,0.62986700E+2,0.192E+3,0.109E+3,0.28878000E+1,0.99820000E+0 - ,0.35715820E+3,0.192E+3,0.111E+3,0.28878000E+1,0.96840000E+0 - ,0.55232750E+3,0.192E+3,0.112E+3,0.28878000E+1,0.96280000E+0 - ,0.55871280E+3,0.192E+3,0.113E+3,0.28878000E+1,0.96480000E+0 - ,0.44861130E+3,0.192E+3,0.114E+3,0.28878000E+1,0.95070000E+0 - ,0.36744990E+3,0.192E+3,0.115E+3,0.28878000E+1,0.99470000E+0 - ,0.31093340E+3,0.192E+3,0.116E+3,0.28878000E+1,0.99480000E+0 - ,0.25443970E+3,0.192E+3,0.117E+3,0.28878000E+1,0.99720000E+0 - ,0.49305900E+3,0.192E+3,0.119E+3,0.28878000E+1,0.97670000E+0 - ,0.94512240E+3,0.192E+3,0.120E+3,0.28878000E+1,0.98310000E+0 - ,0.49217970E+3,0.192E+3,0.121E+3,0.28878000E+1,0.18627000E+1 - ,0.47531010E+3,0.192E+3,0.122E+3,0.28878000E+1,0.18299000E+1 - ,0.46586480E+3,0.192E+3,0.123E+3,0.28878000E+1,0.19138000E+1 - ,0.46166860E+3,0.192E+3,0.124E+3,0.28878000E+1,0.18269000E+1 - ,0.42443750E+3,0.192E+3,0.125E+3,0.28878000E+1,0.16406000E+1 - ,0.39286320E+3,0.192E+3,0.126E+3,0.28878000E+1,0.16483000E+1 - ,0.37486590E+3,0.192E+3,0.127E+3,0.28878000E+1,0.17149000E+1 - ,0.36651980E+3,0.192E+3,0.128E+3,0.28878000E+1,0.17937000E+1 - ,0.36235940E+3,0.192E+3,0.129E+3,0.28878000E+1,0.95760000E+0 - ,0.33963850E+3,0.192E+3,0.130E+3,0.28878000E+1,0.19419000E+1 - ,0.55481070E+3,0.192E+3,0.131E+3,0.28878000E+1,0.96010000E+0 - ,0.48695430E+3,0.192E+3,0.132E+3,0.28878000E+1,0.94340000E+0 - ,0.43639410E+3,0.192E+3,0.133E+3,0.28878000E+1,0.98890000E+0 - ,0.39861480E+3,0.192E+3,0.134E+3,0.28878000E+1,0.99010000E+0 - ,0.35133960E+3,0.192E+3,0.135E+3,0.28878000E+1,0.99740000E+0 - ,0.58839800E+3,0.192E+3,0.137E+3,0.28878000E+1,0.97380000E+0 - ,0.11509048E+4,0.192E+3,0.138E+3,0.28878000E+1,0.98010000E+0 - ,0.87728230E+3,0.192E+3,0.139E+3,0.28878000E+1,0.19153000E+1 - ,0.65137000E+3,0.192E+3,0.140E+3,0.28878000E+1,0.19355000E+1 - ,0.65782330E+3,0.192E+3,0.141E+3,0.28878000E+1,0.19545000E+1 - ,0.61355160E+3,0.192E+3,0.142E+3,0.28878000E+1,0.19420000E+1 - ,0.68895110E+3,0.192E+3,0.143E+3,0.28878000E+1,0.16682000E+1 - ,0.53468200E+3,0.192E+3,0.144E+3,0.28878000E+1,0.18584000E+1 - ,0.50038440E+3,0.192E+3,0.145E+3,0.28878000E+1,0.19003000E+1 - ,0.46479060E+3,0.192E+3,0.146E+3,0.28878000E+1,0.18630000E+1 - ,0.44970340E+3,0.192E+3,0.147E+3,0.28878000E+1,0.96790000E+0 - ,0.44450890E+3,0.192E+3,0.148E+3,0.28878000E+1,0.19539000E+1 - ,0.70553710E+3,0.192E+3,0.149E+3,0.28878000E+1,0.96330000E+0 - ,0.63759540E+3,0.192E+3,0.150E+3,0.28878000E+1,0.95140000E+0 - ,0.59686560E+3,0.192E+3,0.151E+3,0.28878000E+1,0.97490000E+0 - ,0.56459640E+3,0.192E+3,0.152E+3,0.28878000E+1,0.98110000E+0 - ,0.51574020E+3,0.192E+3,0.153E+3,0.28878000E+1,0.99680000E+0 - ,0.69501880E+3,0.192E+3,0.155E+3,0.28878000E+1,0.99090000E+0 - ,0.14942771E+4,0.192E+3,0.156E+3,0.28878000E+1,0.97970000E+0 - ,0.11109199E+4,0.192E+3,0.157E+3,0.28878000E+1,0.19373000E+1 - ,0.69816140E+3,0.192E+3,0.159E+3,0.28878000E+1,0.29425000E+1 - ,0.68372500E+3,0.192E+3,0.160E+3,0.28878000E+1,0.29455000E+1 - ,0.66206630E+3,0.192E+3,0.161E+3,0.28878000E+1,0.29413000E+1 - ,0.66540380E+3,0.192E+3,0.162E+3,0.28878000E+1,0.29300000E+1 - ,0.64179300E+3,0.192E+3,0.163E+3,0.28878000E+1,0.18286000E+1 - ,0.66949760E+3,0.192E+3,0.164E+3,0.28878000E+1,0.28732000E+1 - ,0.62884090E+3,0.192E+3,0.165E+3,0.28878000E+1,0.29086000E+1 - ,0.64005220E+3,0.192E+3,0.166E+3,0.28878000E+1,0.28965000E+1 - ,0.59680940E+3,0.192E+3,0.167E+3,0.28878000E+1,0.29242000E+1 - ,0.57978670E+3,0.192E+3,0.168E+3,0.28878000E+1,0.29282000E+1 - ,0.57605760E+3,0.192E+3,0.169E+3,0.28878000E+1,0.29246000E+1 - ,0.60540230E+3,0.192E+3,0.170E+3,0.28878000E+1,0.28482000E+1 - ,0.55673610E+3,0.192E+3,0.171E+3,0.28878000E+1,0.29219000E+1 - ,0.75552630E+3,0.192E+3,0.172E+3,0.28878000E+1,0.19254000E+1 - ,0.70091760E+3,0.192E+3,0.173E+3,0.28878000E+1,0.19459000E+1 - ,0.63934100E+3,0.192E+3,0.174E+3,0.28878000E+1,0.19292000E+1 - ,0.64727080E+3,0.192E+3,0.175E+3,0.28878000E+1,0.18104000E+1 - ,0.56614580E+3,0.192E+3,0.176E+3,0.28878000E+1,0.18858000E+1 - ,0.53275200E+3,0.192E+3,0.177E+3,0.28878000E+1,0.18648000E+1 - ,0.50897860E+3,0.192E+3,0.178E+3,0.28878000E+1,0.19188000E+1 - ,0.48681770E+3,0.192E+3,0.179E+3,0.28878000E+1,0.98460000E+0 - ,0.47017820E+3,0.192E+3,0.180E+3,0.28878000E+1,0.19896000E+1 - ,0.75808150E+3,0.192E+3,0.181E+3,0.28878000E+1,0.92670000E+0 - ,0.69014330E+3,0.192E+3,0.182E+3,0.28878000E+1,0.93830000E+0 - ,0.66895140E+3,0.192E+3,0.183E+3,0.28878000E+1,0.98200000E+0 - ,0.65052430E+3,0.192E+3,0.184E+3,0.28878000E+1,0.98150000E+0 - ,0.60748900E+3,0.192E+3,0.185E+3,0.28878000E+1,0.99540000E+0 - ,0.78264720E+3,0.192E+3,0.187E+3,0.28878000E+1,0.97050000E+0 - ,0.14842630E+4,0.192E+3,0.188E+3,0.28878000E+1,0.96620000E+0 - ,0.82601520E+3,0.192E+3,0.189E+3,0.28878000E+1,0.29070000E+1 - ,0.95479790E+3,0.192E+3,0.190E+3,0.28878000E+1,0.28844000E+1 - ,0.85410020E+3,0.192E+3,0.191E+3,0.28878000E+1,0.28738000E+1 - ,0.75386170E+3,0.192E+3,0.192E+3,0.28878000E+1,0.28878000E+1 - ,0.45123600E+2,0.193E+3,0.100E+1,0.29095000E+1,0.91180000E+0 - ,0.30097800E+2,0.193E+3,0.200E+1,0.29095000E+1,0.00000000E+0 - ,0.69501280E+3,0.193E+3,0.300E+1,0.29095000E+1,0.00000000E+0 - ,0.40190350E+3,0.193E+3,0.400E+1,0.29095000E+1,0.00000000E+0 - ,0.27145390E+3,0.193E+3,0.500E+1,0.29095000E+1,0.00000000E+0 - ,0.18410950E+3,0.193E+3,0.600E+1,0.29095000E+1,0.00000000E+0 - ,0.12930040E+3,0.193E+3,0.700E+1,0.29095000E+1,0.00000000E+0 - ,0.98281200E+2,0.193E+3,0.800E+1,0.29095000E+1,0.00000000E+0 - ,0.74758400E+2,0.193E+3,0.900E+1,0.29095000E+1,0.00000000E+0 - ,0.57729000E+2,0.193E+3,0.100E+2,0.29095000E+1,0.00000000E+0 - ,0.83149520E+3,0.193E+3,0.110E+2,0.29095000E+1,0.00000000E+0 - ,0.64031040E+3,0.193E+3,0.120E+2,0.29095000E+1,0.00000000E+0 - ,0.59077440E+3,0.193E+3,0.130E+2,0.29095000E+1,0.00000000E+0 - ,0.46630230E+3,0.193E+3,0.140E+2,0.29095000E+1,0.00000000E+0 - ,0.36444330E+3,0.193E+3,0.150E+2,0.29095000E+1,0.00000000E+0 - ,0.30311500E+3,0.193E+3,0.160E+2,0.29095000E+1,0.00000000E+0 - ,0.24821860E+3,0.193E+3,0.170E+2,0.29095000E+1,0.00000000E+0 - ,0.20361560E+3,0.193E+3,0.180E+2,0.29095000E+1,0.00000000E+0 - ,0.13643503E+4,0.193E+3,0.190E+2,0.29095000E+1,0.00000000E+0 - ,0.11254292E+4,0.193E+3,0.200E+2,0.29095000E+1,0.00000000E+0 - ,0.92988130E+3,0.193E+3,0.210E+2,0.29095000E+1,0.00000000E+0 - ,0.89845340E+3,0.193E+3,0.220E+2,0.29095000E+1,0.00000000E+0 - ,0.82298300E+3,0.193E+3,0.230E+2,0.29095000E+1,0.00000000E+0 - ,0.64899350E+3,0.193E+3,0.240E+2,0.29095000E+1,0.00000000E+0 - ,0.70890860E+3,0.193E+3,0.250E+2,0.29095000E+1,0.00000000E+0 - ,0.55705720E+3,0.193E+3,0.260E+2,0.29095000E+1,0.00000000E+0 - ,0.59015540E+3,0.193E+3,0.270E+2,0.29095000E+1,0.00000000E+0 - ,0.60771500E+3,0.193E+3,0.280E+2,0.29095000E+1,0.00000000E+0 - ,0.46659660E+3,0.193E+3,0.290E+2,0.29095000E+1,0.00000000E+0 - ,0.47890520E+3,0.193E+3,0.300E+2,0.29095000E+1,0.00000000E+0 - ,0.56662400E+3,0.193E+3,0.310E+2,0.29095000E+1,0.00000000E+0 - ,0.50022560E+3,0.193E+3,0.320E+2,0.29095000E+1,0.00000000E+0 - ,0.42735080E+3,0.193E+3,0.330E+2,0.29095000E+1,0.00000000E+0 - ,0.38401570E+3,0.193E+3,0.340E+2,0.29095000E+1,0.00000000E+0 - ,0.33665520E+3,0.193E+3,0.350E+2,0.29095000E+1,0.00000000E+0 - ,0.29334880E+3,0.193E+3,0.360E+2,0.29095000E+1,0.00000000E+0 - ,0.15296978E+4,0.193E+3,0.370E+2,0.29095000E+1,0.00000000E+0 - ,0.13413275E+4,0.193E+3,0.380E+2,0.29095000E+1,0.00000000E+0 - ,0.11753725E+4,0.193E+3,0.390E+2,0.29095000E+1,0.00000000E+0 - ,0.10568235E+4,0.193E+3,0.400E+2,0.29095000E+1,0.00000000E+0 - ,0.96412660E+3,0.193E+3,0.410E+2,0.29095000E+1,0.00000000E+0 - ,0.74533540E+3,0.193E+3,0.420E+2,0.29095000E+1,0.00000000E+0 - ,0.83117090E+3,0.193E+3,0.430E+2,0.29095000E+1,0.00000000E+0 - ,0.63418960E+3,0.193E+3,0.440E+2,0.29095000E+1,0.00000000E+0 - ,0.69270260E+3,0.193E+3,0.450E+2,0.29095000E+1,0.00000000E+0 - ,0.64261150E+3,0.193E+3,0.460E+2,0.29095000E+1,0.00000000E+0 - ,0.53650370E+3,0.193E+3,0.470E+2,0.29095000E+1,0.00000000E+0 - ,0.56657800E+3,0.193E+3,0.480E+2,0.29095000E+1,0.00000000E+0 - ,0.71009360E+3,0.193E+3,0.490E+2,0.29095000E+1,0.00000000E+0 - ,0.65692100E+3,0.193E+3,0.500E+2,0.29095000E+1,0.00000000E+0 - ,0.58601680E+3,0.193E+3,0.510E+2,0.29095000E+1,0.00000000E+0 - ,0.54418120E+3,0.193E+3,0.520E+2,0.29095000E+1,0.00000000E+0 - ,0.49261320E+3,0.193E+3,0.530E+2,0.29095000E+1,0.00000000E+0 - ,0.44348890E+3,0.193E+3,0.540E+2,0.29095000E+1,0.00000000E+0 - ,0.18638860E+4,0.193E+3,0.550E+2,0.29095000E+1,0.00000000E+0 - ,0.17104153E+4,0.193E+3,0.560E+2,0.29095000E+1,0.00000000E+0 - ,0.15029787E+4,0.193E+3,0.570E+2,0.29095000E+1,0.00000000E+0 - ,0.69246950E+3,0.193E+3,0.580E+2,0.29095000E+1,0.27991000E+1 - ,0.15160160E+4,0.193E+3,0.590E+2,0.29095000E+1,0.00000000E+0 - ,0.14557245E+4,0.193E+3,0.600E+2,0.29095000E+1,0.00000000E+0 - ,0.14191992E+4,0.193E+3,0.610E+2,0.29095000E+1,0.00000000E+0 - ,0.13855997E+4,0.193E+3,0.620E+2,0.29095000E+1,0.00000000E+0 - ,0.13558015E+4,0.193E+3,0.630E+2,0.29095000E+1,0.00000000E+0 - ,0.10671944E+4,0.193E+3,0.640E+2,0.29095000E+1,0.00000000E+0 - ,0.12015530E+4,0.193E+3,0.650E+2,0.29095000E+1,0.00000000E+0 - ,0.11589243E+4,0.193E+3,0.660E+2,0.29095000E+1,0.00000000E+0 - ,0.12228454E+4,0.193E+3,0.670E+2,0.29095000E+1,0.00000000E+0 - ,0.11968607E+4,0.193E+3,0.680E+2,0.29095000E+1,0.00000000E+0 - ,0.11734369E+4,0.193E+3,0.690E+2,0.29095000E+1,0.00000000E+0 - ,0.11596457E+4,0.193E+3,0.700E+2,0.29095000E+1,0.00000000E+0 - ,0.97768160E+3,0.193E+3,0.710E+2,0.29095000E+1,0.00000000E+0 - ,0.96156840E+3,0.193E+3,0.720E+2,0.29095000E+1,0.00000000E+0 - ,0.87807320E+3,0.193E+3,0.730E+2,0.29095000E+1,0.00000000E+0 - ,0.74236820E+3,0.193E+3,0.740E+2,0.29095000E+1,0.00000000E+0 - ,0.75524290E+3,0.193E+3,0.750E+2,0.29095000E+1,0.00000000E+0 - ,0.68498790E+3,0.193E+3,0.760E+2,0.29095000E+1,0.00000000E+0 - ,0.62777710E+3,0.193E+3,0.770E+2,0.29095000E+1,0.00000000E+0 - ,0.52230280E+3,0.193E+3,0.780E+2,0.29095000E+1,0.00000000E+0 - ,0.48830230E+3,0.193E+3,0.790E+2,0.29095000E+1,0.00000000E+0 - ,0.50221500E+3,0.193E+3,0.800E+2,0.29095000E+1,0.00000000E+0 - ,0.73000580E+3,0.193E+3,0.810E+2,0.29095000E+1,0.00000000E+0 - ,0.71376740E+3,0.193E+3,0.820E+2,0.29095000E+1,0.00000000E+0 - ,0.65632120E+3,0.193E+3,0.830E+2,0.29095000E+1,0.00000000E+0 - ,0.62632590E+3,0.193E+3,0.840E+2,0.29095000E+1,0.00000000E+0 - ,0.57857790E+3,0.193E+3,0.850E+2,0.29095000E+1,0.00000000E+0 - ,0.53088320E+3,0.193E+3,0.860E+2,0.29095000E+1,0.00000000E+0 - ,0.17602462E+4,0.193E+3,0.870E+2,0.29095000E+1,0.00000000E+0 - ,0.16917254E+4,0.193E+3,0.880E+2,0.29095000E+1,0.00000000E+0 - ,0.14957351E+4,0.193E+3,0.890E+2,0.29095000E+1,0.00000000E+0 - ,0.13452345E+4,0.193E+3,0.900E+2,0.29095000E+1,0.00000000E+0 - ,0.13357938E+4,0.193E+3,0.910E+2,0.29095000E+1,0.00000000E+0 - ,0.12935031E+4,0.193E+3,0.920E+2,0.29095000E+1,0.00000000E+0 - ,0.13314737E+4,0.193E+3,0.930E+2,0.29095000E+1,0.00000000E+0 - ,0.12894340E+4,0.193E+3,0.940E+2,0.29095000E+1,0.00000000E+0 - ,0.72427200E+2,0.193E+3,0.101E+3,0.29095000E+1,0.00000000E+0 - ,0.23377270E+3,0.193E+3,0.103E+3,0.29095000E+1,0.98650000E+0 - ,0.29840760E+3,0.193E+3,0.104E+3,0.29095000E+1,0.98080000E+0 - ,0.22859970E+3,0.193E+3,0.105E+3,0.29095000E+1,0.97060000E+0 - ,0.17275920E+3,0.193E+3,0.106E+3,0.29095000E+1,0.98680000E+0 - ,0.12063570E+3,0.193E+3,0.107E+3,0.29095000E+1,0.99440000E+0 - ,0.88243900E+2,0.193E+3,0.108E+3,0.29095000E+1,0.99250000E+0 - ,0.61099300E+2,0.193E+3,0.109E+3,0.29095000E+1,0.99820000E+0 - ,0.34193020E+3,0.193E+3,0.111E+3,0.29095000E+1,0.96840000E+0 - ,0.52851140E+3,0.193E+3,0.112E+3,0.29095000E+1,0.96280000E+0 - ,0.53561950E+3,0.193E+3,0.113E+3,0.29095000E+1,0.96480000E+0 - ,0.43117410E+3,0.193E+3,0.114E+3,0.29095000E+1,0.95070000E+0 - ,0.35382780E+3,0.193E+3,0.115E+3,0.29095000E+1,0.99470000E+0 - ,0.29979380E+3,0.193E+3,0.116E+3,0.29095000E+1,0.99480000E+0 - ,0.24565840E+3,0.193E+3,0.117E+3,0.29095000E+1,0.99720000E+0 - ,0.47272210E+3,0.193E+3,0.119E+3,0.29095000E+1,0.97670000E+0 - ,0.90129920E+3,0.193E+3,0.120E+3,0.29095000E+1,0.98310000E+0 - ,0.47293970E+3,0.193E+3,0.121E+3,0.29095000E+1,0.18627000E+1 - ,0.45672220E+3,0.193E+3,0.122E+3,0.29095000E+1,0.18299000E+1 - ,0.44764490E+3,0.193E+3,0.123E+3,0.29095000E+1,0.19138000E+1 - ,0.44350180E+3,0.193E+3,0.124E+3,0.29095000E+1,0.18269000E+1 - ,0.40825230E+3,0.193E+3,0.125E+3,0.29095000E+1,0.16406000E+1 - ,0.37802020E+3,0.193E+3,0.126E+3,0.29095000E+1,0.16483000E+1 - ,0.36070350E+3,0.193E+3,0.127E+3,0.29095000E+1,0.17149000E+1 - ,0.35264190E+3,0.193E+3,0.128E+3,0.29095000E+1,0.17937000E+1 - ,0.34833050E+3,0.193E+3,0.129E+3,0.29095000E+1,0.95760000E+0 - ,0.32702340E+3,0.193E+3,0.130E+3,0.29095000E+1,0.19419000E+1 - ,0.53235460E+3,0.193E+3,0.131E+3,0.29095000E+1,0.96010000E+0 - ,0.46817890E+3,0.193E+3,0.132E+3,0.29095000E+1,0.94340000E+0 - ,0.42016770E+3,0.193E+3,0.133E+3,0.29095000E+1,0.98890000E+0 - ,0.38416910E+3,0.193E+3,0.134E+3,0.29095000E+1,0.99010000E+0 - ,0.33897840E+3,0.193E+3,0.135E+3,0.29095000E+1,0.99740000E+0 - ,0.56438650E+3,0.193E+3,0.137E+3,0.29095000E+1,0.97380000E+0 - ,0.10971255E+4,0.193E+3,0.138E+3,0.29095000E+1,0.98010000E+0 - ,0.83943700E+3,0.193E+3,0.139E+3,0.29095000E+1,0.19153000E+1 - ,0.62573340E+3,0.193E+3,0.140E+3,0.29095000E+1,0.19355000E+1 - ,0.63197490E+3,0.193E+3,0.141E+3,0.29095000E+1,0.19545000E+1 - ,0.58965940E+3,0.193E+3,0.142E+3,0.29095000E+1,0.19420000E+1 - ,0.66095050E+3,0.193E+3,0.143E+3,0.29095000E+1,0.16682000E+1 - ,0.51451210E+3,0.193E+3,0.144E+3,0.29095000E+1,0.18584000E+1 - ,0.48157200E+3,0.193E+3,0.145E+3,0.29095000E+1,0.19003000E+1 - ,0.44743080E+3,0.193E+3,0.146E+3,0.29095000E+1,0.18630000E+1 - ,0.43285140E+3,0.193E+3,0.147E+3,0.29095000E+1,0.96790000E+0 - ,0.42822300E+3,0.193E+3,0.148E+3,0.29095000E+1,0.19539000E+1 - ,0.67704980E+3,0.193E+3,0.149E+3,0.29095000E+1,0.96330000E+0 - ,0.61292050E+3,0.193E+3,0.150E+3,0.29095000E+1,0.95140000E+0 - ,0.57443630E+3,0.193E+3,0.151E+3,0.29095000E+1,0.97490000E+0 - ,0.54380490E+3,0.193E+3,0.152E+3,0.29095000E+1,0.98110000E+0 - ,0.49721050E+3,0.193E+3,0.153E+3,0.29095000E+1,0.99680000E+0 - ,0.66750050E+3,0.193E+3,0.155E+3,0.29095000E+1,0.99090000E+0 - ,0.14228735E+4,0.193E+3,0.156E+3,0.29095000E+1,0.97970000E+0 - ,0.10625153E+4,0.193E+3,0.157E+3,0.29095000E+1,0.19373000E+1 - ,0.67166460E+3,0.193E+3,0.159E+3,0.29095000E+1,0.29425000E+1 - ,0.65779210E+3,0.193E+3,0.160E+3,0.29095000E+1,0.29455000E+1 - ,0.63700760E+3,0.193E+3,0.161E+3,0.29095000E+1,0.29413000E+1 - ,0.64004320E+3,0.193E+3,0.162E+3,0.29095000E+1,0.29300000E+1 - ,0.61687680E+3,0.193E+3,0.163E+3,0.29095000E+1,0.18286000E+1 - ,0.64393890E+3,0.193E+3,0.164E+3,0.29095000E+1,0.28732000E+1 - ,0.60497690E+3,0.193E+3,0.165E+3,0.29095000E+1,0.29086000E+1 - ,0.61545730E+3,0.193E+3,0.166E+3,0.29095000E+1,0.28965000E+1 - ,0.57428150E+3,0.193E+3,0.167E+3,0.29095000E+1,0.29242000E+1 - ,0.55794580E+3,0.193E+3,0.168E+3,0.29095000E+1,0.29282000E+1 - ,0.55432010E+3,0.193E+3,0.169E+3,0.29095000E+1,0.29246000E+1 - ,0.58234520E+3,0.193E+3,0.170E+3,0.29095000E+1,0.28482000E+1 - ,0.53579050E+3,0.193E+3,0.171E+3,0.29095000E+1,0.29219000E+1 - ,0.72482070E+3,0.193E+3,0.172E+3,0.29095000E+1,0.19254000E+1 - ,0.67316650E+3,0.193E+3,0.173E+3,0.29095000E+1,0.19459000E+1 - ,0.61471110E+3,0.193E+3,0.174E+3,0.29095000E+1,0.19292000E+1 - ,0.62176580E+3,0.193E+3,0.175E+3,0.29095000E+1,0.18104000E+1 - ,0.54516120E+3,0.193E+3,0.176E+3,0.29095000E+1,0.18858000E+1 - ,0.51320580E+3,0.193E+3,0.177E+3,0.29095000E+1,0.18648000E+1 - ,0.49042130E+3,0.193E+3,0.178E+3,0.29095000E+1,0.19188000E+1 - ,0.46907220E+3,0.193E+3,0.179E+3,0.29095000E+1,0.98460000E+0 - ,0.45340690E+3,0.193E+3,0.180E+3,0.29095000E+1,0.19896000E+1 - ,0.72771340E+3,0.193E+3,0.181E+3,0.29095000E+1,0.92670000E+0 - ,0.66365960E+3,0.193E+3,0.182E+3,0.29095000E+1,0.93830000E+0 - ,0.64384950E+3,0.193E+3,0.183E+3,0.29095000E+1,0.98200000E+0 - ,0.62649490E+3,0.193E+3,0.184E+3,0.29095000E+1,0.98150000E+0 - ,0.58554410E+3,0.193E+3,0.185E+3,0.29095000E+1,0.99540000E+0 - ,0.75173280E+3,0.193E+3,0.187E+3,0.29095000E+1,0.97050000E+0 - ,0.14153925E+4,0.193E+3,0.188E+3,0.29095000E+1,0.96620000E+0 - ,0.79462310E+3,0.193E+3,0.189E+3,0.29095000E+1,0.29070000E+1 - ,0.91695930E+3,0.193E+3,0.190E+3,0.29095000E+1,0.28844000E+1 - ,0.82052080E+3,0.193E+3,0.191E+3,0.29095000E+1,0.28738000E+1 - ,0.72537300E+3,0.193E+3,0.192E+3,0.29095000E+1,0.28878000E+1 - ,0.69816440E+3,0.193E+3,0.193E+3,0.29095000E+1,0.29095000E+1 - ,0.52391900E+2,0.194E+3,0.100E+1,0.19209000E+1,0.91180000E+0 - ,0.33861500E+2,0.194E+3,0.200E+1,0.19209000E+1,0.00000000E+0 - ,0.97720270E+3,0.194E+3,0.300E+1,0.19209000E+1,0.00000000E+0 - ,0.51120280E+3,0.194E+3,0.400E+1,0.19209000E+1,0.00000000E+0 - ,0.33002550E+3,0.194E+3,0.500E+1,0.19209000E+1,0.00000000E+0 - ,0.21709250E+3,0.194E+3,0.600E+1,0.19209000E+1,0.00000000E+0 - ,0.14929170E+3,0.194E+3,0.700E+1,0.19209000E+1,0.00000000E+0 - ,0.11190540E+3,0.194E+3,0.800E+1,0.19209000E+1,0.00000000E+0 - ,0.84162800E+2,0.194E+3,0.900E+1,0.19209000E+1,0.00000000E+0 - ,0.64433300E+2,0.194E+3,0.100E+2,0.19209000E+1,0.00000000E+0 - ,0.11617208E+4,0.194E+3,0.110E+2,0.19209000E+1,0.00000000E+0 - ,0.82748750E+3,0.194E+3,0.120E+2,0.19209000E+1,0.00000000E+0 - ,0.74501090E+3,0.194E+3,0.130E+2,0.19209000E+1,0.00000000E+0 - ,0.56932030E+3,0.194E+3,0.140E+2,0.19209000E+1,0.00000000E+0 - ,0.43398740E+3,0.194E+3,0.150E+2,0.19209000E+1,0.00000000E+0 - ,0.35559410E+3,0.194E+3,0.160E+2,0.19209000E+1,0.00000000E+0 - ,0.28720610E+3,0.194E+3,0.170E+2,0.19209000E+1,0.00000000E+0 - ,0.23291960E+3,0.194E+3,0.180E+2,0.19209000E+1,0.00000000E+0 - ,0.19509820E+4,0.194E+3,0.190E+2,0.19209000E+1,0.00000000E+0 - ,0.15010394E+4,0.194E+3,0.200E+2,0.19209000E+1,0.00000000E+0 - ,0.12234261E+4,0.194E+3,0.210E+2,0.19209000E+1,0.00000000E+0 - ,0.11694190E+4,0.194E+3,0.220E+2,0.19209000E+1,0.00000000E+0 - ,0.10640685E+4,0.194E+3,0.230E+2,0.19209000E+1,0.00000000E+0 - ,0.83949690E+3,0.194E+3,0.240E+2,0.19209000E+1,0.00000000E+0 - ,0.90788740E+3,0.194E+3,0.250E+2,0.19209000E+1,0.00000000E+0 - ,0.71275770E+3,0.194E+3,0.260E+2,0.19209000E+1,0.00000000E+0 - ,0.74344550E+3,0.194E+3,0.270E+2,0.19209000E+1,0.00000000E+0 - ,0.77054070E+3,0.194E+3,0.280E+2,0.19209000E+1,0.00000000E+0 - ,0.59237050E+3,0.194E+3,0.290E+2,0.19209000E+1,0.00000000E+0 - ,0.59475930E+3,0.194E+3,0.300E+2,0.19209000E+1,0.00000000E+0 - ,0.70853630E+3,0.194E+3,0.310E+2,0.19209000E+1,0.00000000E+0 - ,0.60979120E+3,0.194E+3,0.320E+2,0.19209000E+1,0.00000000E+0 - ,0.51011170E+3,0.194E+3,0.330E+2,0.19209000E+1,0.00000000E+0 - ,0.45283130E+3,0.194E+3,0.340E+2,0.19209000E+1,0.00000000E+0 - ,0.39222240E+3,0.194E+3,0.350E+2,0.19209000E+1,0.00000000E+0 - ,0.33815470E+3,0.194E+3,0.360E+2,0.19209000E+1,0.00000000E+0 - ,0.21787996E+4,0.194E+3,0.370E+2,0.19209000E+1,0.00000000E+0 - ,0.17950359E+4,0.194E+3,0.380E+2,0.19209000E+1,0.00000000E+0 - ,0.15372794E+4,0.194E+3,0.390E+2,0.19209000E+1,0.00000000E+0 - ,0.13634850E+4,0.194E+3,0.400E+2,0.19209000E+1,0.00000000E+0 - ,0.12334617E+4,0.194E+3,0.410E+2,0.19209000E+1,0.00000000E+0 - ,0.94031770E+3,0.194E+3,0.420E+2,0.19209000E+1,0.00000000E+0 - ,0.10541841E+4,0.194E+3,0.430E+2,0.19209000E+1,0.00000000E+0 - ,0.79200470E+3,0.194E+3,0.440E+2,0.19209000E+1,0.00000000E+0 - ,0.86390680E+3,0.194E+3,0.450E+2,0.19209000E+1,0.00000000E+0 - ,0.79715370E+3,0.194E+3,0.460E+2,0.19209000E+1,0.00000000E+0 - ,0.66898050E+3,0.194E+3,0.470E+2,0.19209000E+1,0.00000000E+0 - ,0.69811240E+3,0.194E+3,0.480E+2,0.19209000E+1,0.00000000E+0 - ,0.89002560E+3,0.194E+3,0.490E+2,0.19209000E+1,0.00000000E+0 - ,0.80567160E+3,0.194E+3,0.500E+2,0.19209000E+1,0.00000000E+0 - ,0.70498790E+3,0.194E+3,0.510E+2,0.19209000E+1,0.00000000E+0 - ,0.64753750E+3,0.194E+3,0.520E+2,0.19209000E+1,0.00000000E+0 - ,0.57956520E+3,0.194E+3,0.530E+2,0.19209000E+1,0.00000000E+0 - ,0.51640770E+3,0.194E+3,0.540E+2,0.19209000E+1,0.00000000E+0 - ,0.26607475E+4,0.194E+3,0.550E+2,0.19209000E+1,0.00000000E+0 - ,0.23107445E+4,0.194E+3,0.560E+2,0.19209000E+1,0.00000000E+0 - ,0.19831026E+4,0.194E+3,0.570E+2,0.19209000E+1,0.00000000E+0 - ,0.83646730E+3,0.194E+3,0.580E+2,0.19209000E+1,0.27991000E+1 - ,0.20333939E+4,0.194E+3,0.590E+2,0.19209000E+1,0.00000000E+0 - ,0.19427158E+4,0.194E+3,0.600E+2,0.19209000E+1,0.00000000E+0 - ,0.18916327E+4,0.194E+3,0.610E+2,0.19209000E+1,0.00000000E+0 - ,0.18448932E+4,0.194E+3,0.620E+2,0.19209000E+1,0.00000000E+0 - ,0.18033780E+4,0.194E+3,0.630E+2,0.19209000E+1,0.00000000E+0 - ,0.13864919E+4,0.194E+3,0.640E+2,0.19209000E+1,0.00000000E+0 - ,0.16271471E+4,0.194E+3,0.650E+2,0.19209000E+1,0.00000000E+0 - ,0.15648029E+4,0.194E+3,0.660E+2,0.19209000E+1,0.00000000E+0 - ,0.16162873E+4,0.194E+3,0.670E+2,0.19209000E+1,0.00000000E+0 - ,0.15807484E+4,0.194E+3,0.680E+2,0.19209000E+1,0.00000000E+0 - ,0.15482741E+4,0.194E+3,0.690E+2,0.19209000E+1,0.00000000E+0 - ,0.15315185E+4,0.194E+3,0.700E+2,0.19209000E+1,0.00000000E+0 - ,0.12721137E+4,0.194E+3,0.710E+2,0.19209000E+1,0.00000000E+0 - ,0.12215252E+4,0.194E+3,0.720E+2,0.19209000E+1,0.00000000E+0 - ,0.11011039E+4,0.194E+3,0.730E+2,0.19209000E+1,0.00000000E+0 - ,0.92310550E+3,0.194E+3,0.740E+2,0.19209000E+1,0.00000000E+0 - ,0.93407850E+3,0.194E+3,0.750E+2,0.19209000E+1,0.00000000E+0 - ,0.83812920E+3,0.194E+3,0.760E+2,0.19209000E+1,0.00000000E+0 - ,0.76168140E+3,0.194E+3,0.770E+2,0.19209000E+1,0.00000000E+0 - ,0.62877650E+3,0.194E+3,0.780E+2,0.19209000E+1,0.00000000E+0 - ,0.58595420E+3,0.194E+3,0.790E+2,0.19209000E+1,0.00000000E+0 - ,0.59987110E+3,0.194E+3,0.800E+2,0.19209000E+1,0.00000000E+0 - ,0.91189380E+3,0.194E+3,0.810E+2,0.19209000E+1,0.00000000E+0 - ,0.87576580E+3,0.194E+3,0.820E+2,0.19209000E+1,0.00000000E+0 - ,0.79106510E+3,0.194E+3,0.830E+2,0.19209000E+1,0.00000000E+0 - ,0.74764610E+3,0.194E+3,0.840E+2,0.19209000E+1,0.00000000E+0 - ,0.68300400E+3,0.194E+3,0.850E+2,0.19209000E+1,0.00000000E+0 - ,0.62065460E+3,0.194E+3,0.860E+2,0.19209000E+1,0.00000000E+0 - ,0.24608767E+4,0.194E+3,0.870E+2,0.19209000E+1,0.00000000E+0 - ,0.22584201E+4,0.194E+3,0.880E+2,0.19209000E+1,0.00000000E+0 - ,0.19536369E+4,0.194E+3,0.890E+2,0.19209000E+1,0.00000000E+0 - ,0.17167267E+4,0.194E+3,0.900E+2,0.19209000E+1,0.00000000E+0 - ,0.17259338E+4,0.194E+3,0.910E+2,0.19209000E+1,0.00000000E+0 - ,0.16700620E+4,0.194E+3,0.920E+2,0.19209000E+1,0.00000000E+0 - ,0.17432351E+4,0.194E+3,0.930E+2,0.19209000E+1,0.00000000E+0 - ,0.16834151E+4,0.194E+3,0.940E+2,0.19209000E+1,0.00000000E+0 - ,0.86005200E+2,0.194E+3,0.101E+3,0.19209000E+1,0.00000000E+0 - ,0.29568750E+3,0.194E+3,0.103E+3,0.19209000E+1,0.98650000E+0 - ,0.37496860E+3,0.194E+3,0.104E+3,0.19209000E+1,0.98080000E+0 - ,0.27566970E+3,0.194E+3,0.105E+3,0.19209000E+1,0.97060000E+0 - ,0.20403100E+3,0.194E+3,0.106E+3,0.19209000E+1,0.98680000E+0 - ,0.13932300E+3,0.194E+3,0.107E+3,0.19209000E+1,0.99440000E+0 - ,0.10015200E+3,0.194E+3,0.108E+3,0.19209000E+1,0.99250000E+0 - ,0.67951400E+2,0.194E+3,0.109E+3,0.19209000E+1,0.99820000E+0 - ,0.43651000E+3,0.194E+3,0.111E+3,0.19209000E+1,0.96840000E+0 - ,0.67820670E+3,0.194E+3,0.112E+3,0.19209000E+1,0.96280000E+0 - ,0.67169720E+3,0.194E+3,0.113E+3,0.19209000E+1,0.96480000E+0 - ,0.52429270E+3,0.194E+3,0.114E+3,0.19209000E+1,0.95070000E+0 - ,0.42107980E+3,0.194E+3,0.115E+3,0.19209000E+1,0.99470000E+0 - ,0.35186230E+3,0.194E+3,0.116E+3,0.19209000E+1,0.99480000E+0 - ,0.28433720E+3,0.194E+3,0.117E+3,0.19209000E+1,0.99720000E+0 - ,0.59504560E+3,0.194E+3,0.119E+3,0.19209000E+1,0.97670000E+0 - ,0.12074896E+4,0.194E+3,0.120E+3,0.19209000E+1,0.98310000E+0 - ,0.57829290E+3,0.194E+3,0.121E+3,0.19209000E+1,0.18627000E+1 - ,0.55886520E+3,0.194E+3,0.122E+3,0.19209000E+1,0.18299000E+1 - ,0.54792340E+3,0.194E+3,0.123E+3,0.19209000E+1,0.19138000E+1 - ,0.54465600E+3,0.194E+3,0.124E+3,0.19209000E+1,0.18269000E+1 - ,0.49339110E+3,0.194E+3,0.125E+3,0.19209000E+1,0.16406000E+1 - ,0.45504230E+3,0.194E+3,0.126E+3,0.19209000E+1,0.16483000E+1 - ,0.43439050E+3,0.194E+3,0.127E+3,0.19209000E+1,0.17149000E+1 - ,0.42520030E+3,0.194E+3,0.128E+3,0.19209000E+1,0.17937000E+1 - ,0.42483420E+3,0.194E+3,0.129E+3,0.19209000E+1,0.95760000E+0 - ,0.39059480E+3,0.194E+3,0.130E+3,0.19209000E+1,0.19419000E+1 - ,0.66138520E+3,0.194E+3,0.131E+3,0.19209000E+1,0.96010000E+0 - ,0.56767290E+3,0.194E+3,0.132E+3,0.19209000E+1,0.94340000E+0 - ,0.50098750E+3,0.194E+3,0.133E+3,0.19209000E+1,0.98890000E+0 - ,0.45312420E+3,0.194E+3,0.134E+3,0.19209000E+1,0.99010000E+0 - ,0.39518880E+3,0.194E+3,0.135E+3,0.19209000E+1,0.99740000E+0 - ,0.70695870E+3,0.194E+3,0.137E+3,0.19209000E+1,0.97380000E+0 - ,0.14771099E+4,0.194E+3,0.138E+3,0.19209000E+1,0.98010000E+0 - ,0.10809253E+4,0.194E+3,0.139E+3,0.19209000E+1,0.19153000E+1 - ,0.76828830E+3,0.194E+3,0.140E+3,0.19209000E+1,0.19355000E+1 - ,0.77551800E+3,0.194E+3,0.141E+3,0.19209000E+1,0.19545000E+1 - ,0.72086910E+3,0.194E+3,0.142E+3,0.19209000E+1,0.19420000E+1 - ,0.82604480E+3,0.194E+3,0.143E+3,0.19209000E+1,0.16682000E+1 - ,0.61978620E+3,0.194E+3,0.144E+3,0.19209000E+1,0.18584000E+1 - ,0.57963490E+3,0.194E+3,0.145E+3,0.19209000E+1,0.19003000E+1 - ,0.53729800E+3,0.194E+3,0.146E+3,0.19209000E+1,0.18630000E+1 - ,0.52079250E+3,0.194E+3,0.147E+3,0.19209000E+1,0.96790000E+0 - ,0.50925590E+3,0.194E+3,0.148E+3,0.19209000E+1,0.19539000E+1 - ,0.84221840E+3,0.194E+3,0.149E+3,0.19209000E+1,0.96330000E+0 - ,0.74608910E+3,0.194E+3,0.150E+3,0.19209000E+1,0.95140000E+0 - ,0.68936250E+3,0.194E+3,0.151E+3,0.19209000E+1,0.97490000E+0 - ,0.64664990E+3,0.194E+3,0.152E+3,0.19209000E+1,0.98110000E+0 - ,0.58507090E+3,0.194E+3,0.153E+3,0.19209000E+1,0.99680000E+0 - ,0.82245460E+3,0.194E+3,0.155E+3,0.19209000E+1,0.99090000E+0 - ,0.19411744E+4,0.194E+3,0.156E+3,0.19209000E+1,0.97970000E+0 - ,0.13757929E+4,0.194E+3,0.157E+3,0.19209000E+1,0.19373000E+1 - ,0.81046870E+3,0.194E+3,0.159E+3,0.19209000E+1,0.29425000E+1 - ,0.79353070E+3,0.194E+3,0.160E+3,0.19209000E+1,0.29455000E+1 - ,0.76776280E+3,0.194E+3,0.161E+3,0.19209000E+1,0.29413000E+1 - ,0.77400610E+3,0.194E+3,0.162E+3,0.19209000E+1,0.29300000E+1 - ,0.75318700E+3,0.194E+3,0.163E+3,0.19209000E+1,0.18286000E+1 - ,0.77907900E+3,0.194E+3,0.164E+3,0.19209000E+1,0.28732000E+1 - ,0.73004770E+3,0.194E+3,0.165E+3,0.19209000E+1,0.29086000E+1 - ,0.74727740E+3,0.194E+3,0.166E+3,0.19209000E+1,0.28965000E+1 - ,0.69119800E+3,0.194E+3,0.167E+3,0.19209000E+1,0.29242000E+1 - ,0.67089470E+3,0.194E+3,0.168E+3,0.19209000E+1,0.29282000E+1 - ,0.66702610E+3,0.194E+3,0.169E+3,0.19209000E+1,0.29246000E+1 - ,0.70343090E+3,0.194E+3,0.170E+3,0.19209000E+1,0.28482000E+1 - ,0.64373580E+3,0.194E+3,0.171E+3,0.19209000E+1,0.29219000E+1 - ,0.90452750E+3,0.194E+3,0.172E+3,0.19209000E+1,0.19254000E+1 - ,0.82941860E+3,0.194E+3,0.173E+3,0.19209000E+1,0.19459000E+1 - ,0.74766610E+3,0.194E+3,0.174E+3,0.19209000E+1,0.19292000E+1 - ,0.76481820E+3,0.194E+3,0.175E+3,0.19209000E+1,0.18104000E+1 - ,0.65146000E+3,0.194E+3,0.176E+3,0.19209000E+1,0.18858000E+1 - ,0.61088630E+3,0.194E+3,0.177E+3,0.19209000E+1,0.18648000E+1 - ,0.58248590E+3,0.194E+3,0.178E+3,0.19209000E+1,0.19188000E+1 - ,0.55757750E+3,0.194E+3,0.179E+3,0.19209000E+1,0.98460000E+0 - ,0.53344460E+3,0.194E+3,0.180E+3,0.19209000E+1,0.19896000E+1 - ,0.90297300E+3,0.194E+3,0.181E+3,0.19209000E+1,0.92670000E+0 - ,0.80572640E+3,0.194E+3,0.182E+3,0.19209000E+1,0.93830000E+0 - ,0.77305280E+3,0.194E+3,0.183E+3,0.19209000E+1,0.98200000E+0 - ,0.74671410E+3,0.194E+3,0.184E+3,0.19209000E+1,0.98150000E+0 - ,0.69111280E+3,0.194E+3,0.185E+3,0.19209000E+1,0.99540000E+0 - ,0.92497250E+3,0.194E+3,0.187E+3,0.19209000E+1,0.97050000E+0 - ,0.18985076E+4,0.194E+3,0.188E+3,0.19209000E+1,0.96620000E+0 - ,0.95915900E+3,0.194E+3,0.189E+3,0.19209000E+1,0.29070000E+1 - ,0.11307742E+4,0.194E+3,0.190E+3,0.19209000E+1,0.28844000E+1 - ,0.10088729E+4,0.194E+3,0.191E+3,0.19209000E+1,0.28738000E+1 - ,0.87461490E+3,0.194E+3,0.192E+3,0.19209000E+1,0.28878000E+1 - ,0.83895690E+3,0.194E+3,0.193E+3,0.19209000E+1,0.29095000E+1 - ,0.10512468E+4,0.194E+3,0.194E+3,0.19209000E+1,0.19209000E+1 - ,0.12593100E+2,0.204E+3,0.100E+1,0.19697000E+1,0.91180000E+0 - ,0.81628000E+1,0.204E+3,0.200E+1,0.19697000E+1,0.00000000E+0 - ,0.19470360E+3,0.204E+3,0.300E+1,0.19697000E+1,0.00000000E+0 - ,0.11396770E+3,0.204E+3,0.400E+1,0.19697000E+1,0.00000000E+0 - ,0.76723000E+2,0.204E+3,0.500E+1,0.19697000E+1,0.00000000E+0 - ,0.51562800E+2,0.204E+3,0.600E+1,0.19697000E+1,0.00000000E+0 - ,0.35790200E+2,0.204E+3,0.700E+1,0.19697000E+1,0.00000000E+0 - ,0.26895400E+2,0.204E+3,0.800E+1,0.19697000E+1,0.00000000E+0 - ,0.20208300E+2,0.204E+3,0.900E+1,0.19697000E+1,0.00000000E+0 - ,0.15417600E+2,0.204E+3,0.100E+2,0.19697000E+1,0.00000000E+0 - ,0.23280600E+3,0.204E+3,0.110E+2,0.19697000E+1,0.00000000E+0 - ,0.18116530E+3,0.204E+3,0.120E+2,0.19697000E+1,0.00000000E+0 - ,0.16729290E+3,0.204E+3,0.130E+2,0.19697000E+1,0.00000000E+0 - ,0.13189200E+3,0.204E+3,0.140E+2,0.19697000E+1,0.00000000E+0 - ,0.10261760E+3,0.204E+3,0.150E+2,0.19697000E+1,0.00000000E+0 - ,0.84869100E+2,0.204E+3,0.160E+2,0.19697000E+1,0.00000000E+0 - ,0.69006900E+2,0.204E+3,0.170E+2,0.19697000E+1,0.00000000E+0 - ,0.56151700E+2,0.204E+3,0.180E+2,0.19697000E+1,0.00000000E+0 - ,0.37942250E+3,0.204E+3,0.190E+2,0.19697000E+1,0.00000000E+0 - ,0.31651020E+3,0.204E+3,0.200E+2,0.19697000E+1,0.00000000E+0 - ,0.26194430E+3,0.204E+3,0.210E+2,0.19697000E+1,0.00000000E+0 - ,0.25305430E+3,0.204E+3,0.220E+2,0.19697000E+1,0.00000000E+0 - ,0.23180650E+3,0.204E+3,0.230E+2,0.19697000E+1,0.00000000E+0 - ,0.18215580E+3,0.204E+3,0.240E+2,0.19697000E+1,0.00000000E+0 - ,0.19964260E+3,0.204E+3,0.250E+2,0.19697000E+1,0.00000000E+0 - ,0.15628450E+3,0.204E+3,0.260E+2,0.19697000E+1,0.00000000E+0 - ,0.16621660E+3,0.204E+3,0.270E+2,0.19697000E+1,0.00000000E+0 - ,0.17120430E+3,0.204E+3,0.280E+2,0.19697000E+1,0.00000000E+0 - ,0.13080120E+3,0.204E+3,0.290E+2,0.19697000E+1,0.00000000E+0 - ,0.13479330E+3,0.204E+3,0.300E+2,0.19697000E+1,0.00000000E+0 - ,0.15992730E+3,0.204E+3,0.310E+2,0.19697000E+1,0.00000000E+0 - ,0.14114890E+3,0.204E+3,0.320E+2,0.19697000E+1,0.00000000E+0 - ,0.12022240E+3,0.204E+3,0.330E+2,0.19697000E+1,0.00000000E+0 - ,0.10763710E+3,0.204E+3,0.340E+2,0.19697000E+1,0.00000000E+0 - ,0.93891100E+2,0.204E+3,0.350E+2,0.19697000E+1,0.00000000E+0 - ,0.81330600E+2,0.204E+3,0.360E+2,0.19697000E+1,0.00000000E+0 - ,0.42517040E+3,0.204E+3,0.370E+2,0.19697000E+1,0.00000000E+0 - ,0.37664680E+3,0.204E+3,0.380E+2,0.19697000E+1,0.00000000E+0 - ,0.33071900E+3,0.204E+3,0.390E+2,0.19697000E+1,0.00000000E+0 - ,0.29747500E+3,0.204E+3,0.400E+2,0.19697000E+1,0.00000000E+0 - ,0.27126060E+3,0.204E+3,0.410E+2,0.19697000E+1,0.00000000E+0 - ,0.20909590E+3,0.204E+3,0.420E+2,0.19697000E+1,0.00000000E+0 - ,0.23346060E+3,0.204E+3,0.430E+2,0.19697000E+1,0.00000000E+0 - ,0.17751740E+3,0.204E+3,0.440E+2,0.19697000E+1,0.00000000E+0 - ,0.19439840E+3,0.204E+3,0.450E+2,0.19697000E+1,0.00000000E+0 - ,0.18021780E+3,0.204E+3,0.460E+2,0.19697000E+1,0.00000000E+0 - ,0.14971980E+3,0.204E+3,0.470E+2,0.19697000E+1,0.00000000E+0 - ,0.15869370E+3,0.204E+3,0.480E+2,0.19697000E+1,0.00000000E+0 - ,0.19941110E+3,0.204E+3,0.490E+2,0.19697000E+1,0.00000000E+0 - ,0.18468490E+3,0.204E+3,0.500E+2,0.19697000E+1,0.00000000E+0 - ,0.16453480E+3,0.204E+3,0.510E+2,0.19697000E+1,0.00000000E+0 - ,0.15249560E+3,0.204E+3,0.520E+2,0.19697000E+1,0.00000000E+0 - ,0.13761920E+3,0.204E+3,0.530E+2,0.19697000E+1,0.00000000E+0 - ,0.12340700E+3,0.204E+3,0.540E+2,0.19697000E+1,0.00000000E+0 - ,0.51787260E+3,0.204E+3,0.550E+2,0.19697000E+1,0.00000000E+0 - ,0.47936610E+3,0.204E+3,0.560E+2,0.19697000E+1,0.00000000E+0 - ,0.42227540E+3,0.204E+3,0.570E+2,0.19697000E+1,0.00000000E+0 - ,0.19417280E+3,0.204E+3,0.580E+2,0.19697000E+1,0.27991000E+1 - ,0.42478830E+3,0.204E+3,0.590E+2,0.19697000E+1,0.00000000E+0 - ,0.40812030E+3,0.204E+3,0.600E+2,0.19697000E+1,0.00000000E+0 - ,0.39794790E+3,0.204E+3,0.610E+2,0.19697000E+1,0.00000000E+0 - ,0.38859250E+3,0.204E+3,0.620E+2,0.19697000E+1,0.00000000E+0 - ,0.38030110E+3,0.204E+3,0.630E+2,0.19697000E+1,0.00000000E+0 - ,0.29932330E+3,0.204E+3,0.640E+2,0.19697000E+1,0.00000000E+0 - ,0.33536650E+3,0.204E+3,0.650E+2,0.19697000E+1,0.00000000E+0 - ,0.32359410E+3,0.204E+3,0.660E+2,0.19697000E+1,0.00000000E+0 - ,0.34328500E+3,0.204E+3,0.670E+2,0.19697000E+1,0.00000000E+0 - ,0.33605070E+3,0.204E+3,0.680E+2,0.19697000E+1,0.00000000E+0 - ,0.32953550E+3,0.204E+3,0.690E+2,0.19697000E+1,0.00000000E+0 - ,0.32568440E+3,0.204E+3,0.700E+2,0.19697000E+1,0.00000000E+0 - ,0.27459690E+3,0.204E+3,0.710E+2,0.19697000E+1,0.00000000E+0 - ,0.27080850E+3,0.204E+3,0.720E+2,0.19697000E+1,0.00000000E+0 - ,0.24715510E+3,0.204E+3,0.730E+2,0.19697000E+1,0.00000000E+0 - ,0.20829050E+3,0.204E+3,0.740E+2,0.19697000E+1,0.00000000E+0 - ,0.21201830E+3,0.204E+3,0.750E+2,0.19697000E+1,0.00000000E+0 - ,0.19203170E+3,0.204E+3,0.760E+2,0.19697000E+1,0.00000000E+0 - ,0.17571480E+3,0.204E+3,0.770E+2,0.19697000E+1,0.00000000E+0 - ,0.14552190E+3,0.204E+3,0.780E+2,0.19697000E+1,0.00000000E+0 - ,0.13578630E+3,0.204E+3,0.790E+2,0.19697000E+1,0.00000000E+0 - ,0.13983510E+3,0.204E+3,0.800E+2,0.19697000E+1,0.00000000E+0 - ,0.20418140E+3,0.204E+3,0.810E+2,0.19697000E+1,0.00000000E+0 - ,0.20002350E+3,0.204E+3,0.820E+2,0.19697000E+1,0.00000000E+0 - ,0.18383790E+3,0.204E+3,0.830E+2,0.19697000E+1,0.00000000E+0 - ,0.17525160E+3,0.204E+3,0.840E+2,0.19697000E+1,0.00000000E+0 - ,0.16152400E+3,0.204E+3,0.850E+2,0.19697000E+1,0.00000000E+0 - ,0.14775410E+3,0.204E+3,0.860E+2,0.19697000E+1,0.00000000E+0 - ,0.49003150E+3,0.204E+3,0.870E+2,0.19697000E+1,0.00000000E+0 - ,0.47451000E+3,0.204E+3,0.880E+2,0.19697000E+1,0.00000000E+0 - ,0.42036790E+3,0.204E+3,0.890E+2,0.19697000E+1,0.00000000E+0 - ,0.37811690E+3,0.204E+3,0.900E+2,0.19697000E+1,0.00000000E+0 - ,0.37472790E+3,0.204E+3,0.910E+2,0.19697000E+1,0.00000000E+0 - ,0.36278690E+3,0.204E+3,0.920E+2,0.19697000E+1,0.00000000E+0 - ,0.37304730E+3,0.204E+3,0.930E+2,0.19697000E+1,0.00000000E+0 - ,0.36135530E+3,0.204E+3,0.940E+2,0.19697000E+1,0.00000000E+0 - ,0.20403900E+2,0.204E+3,0.101E+3,0.19697000E+1,0.00000000E+0 - ,0.66200900E+2,0.204E+3,0.103E+3,0.19697000E+1,0.98650000E+0 - ,0.84400000E+2,0.204E+3,0.104E+3,0.19697000E+1,0.98080000E+0 - ,0.64430100E+2,0.204E+3,0.105E+3,0.19697000E+1,0.97060000E+0 - ,0.48307200E+2,0.204E+3,0.106E+3,0.19697000E+1,0.98680000E+0 - ,0.33327400E+2,0.204E+3,0.107E+3,0.19697000E+1,0.99440000E+0 - ,0.24059200E+2,0.204E+3,0.108E+3,0.19697000E+1,0.99250000E+0 - ,0.16318500E+2,0.204E+3,0.109E+3,0.19697000E+1,0.99820000E+0 - ,0.96512500E+2,0.204E+3,0.111E+3,0.19697000E+1,0.96840000E+0 - ,0.14938320E+3,0.204E+3,0.112E+3,0.19697000E+1,0.96280000E+0 - ,0.15159310E+3,0.204E+3,0.113E+3,0.19697000E+1,0.96480000E+0 - ,0.12183330E+3,0.204E+3,0.114E+3,0.19697000E+1,0.95070000E+0 - ,0.99565600E+2,0.204E+3,0.115E+3,0.19697000E+1,0.99470000E+0 - ,0.83918100E+2,0.204E+3,0.116E+3,0.19697000E+1,0.99480000E+0 - ,0.68280600E+2,0.204E+3,0.117E+3,0.19697000E+1,0.99720000E+0 - ,0.13247510E+3,0.204E+3,0.119E+3,0.19697000E+1,0.97670000E+0 - ,0.25257780E+3,0.204E+3,0.120E+3,0.19697000E+1,0.98310000E+0 - ,0.13298680E+3,0.204E+3,0.121E+3,0.19697000E+1,0.18627000E+1 - ,0.12828620E+3,0.204E+3,0.122E+3,0.19697000E+1,0.18299000E+1 - ,0.12567780E+3,0.204E+3,0.123E+3,0.19697000E+1,0.19138000E+1 - ,0.12446450E+3,0.204E+3,0.124E+3,0.19697000E+1,0.18269000E+1 - ,0.11464650E+3,0.204E+3,0.125E+3,0.19697000E+1,0.16406000E+1 - ,0.10602860E+3,0.204E+3,0.126E+3,0.19697000E+1,0.16483000E+1 - ,0.10108010E+3,0.204E+3,0.127E+3,0.19697000E+1,0.17149000E+1 - ,0.98800400E+2,0.204E+3,0.128E+3,0.19697000E+1,0.17937000E+1 - ,0.97534000E+2,0.204E+3,0.129E+3,0.19697000E+1,0.95760000E+0 - ,0.91622700E+2,0.204E+3,0.130E+3,0.19697000E+1,0.19419000E+1 - ,0.15021480E+3,0.204E+3,0.131E+3,0.19697000E+1,0.96010000E+0 - ,0.13199340E+3,0.204E+3,0.132E+3,0.19697000E+1,0.94340000E+0 - ,0.11815200E+3,0.204E+3,0.133E+3,0.19697000E+1,0.98890000E+0 - ,0.10767130E+3,0.204E+3,0.134E+3,0.19697000E+1,0.99010000E+0 - ,0.94551500E+2,0.204E+3,0.135E+3,0.19697000E+1,0.99740000E+0 - ,0.15794790E+3,0.204E+3,0.137E+3,0.19697000E+1,0.97380000E+0 - ,0.30694330E+3,0.204E+3,0.138E+3,0.19697000E+1,0.98010000E+0 - ,0.23552320E+3,0.204E+3,0.139E+3,0.19697000E+1,0.19153000E+1 - ,0.17565640E+3,0.204E+3,0.140E+3,0.19697000E+1,0.19355000E+1 - ,0.17733570E+3,0.204E+3,0.141E+3,0.19697000E+1,0.19545000E+1 - ,0.16520660E+3,0.204E+3,0.142E+3,0.19697000E+1,0.19420000E+1 - ,0.18502440E+3,0.204E+3,0.143E+3,0.19697000E+1,0.16682000E+1 - ,0.14388510E+3,0.204E+3,0.144E+3,0.19697000E+1,0.18584000E+1 - ,0.13445760E+3,0.204E+3,0.145E+3,0.19697000E+1,0.19003000E+1 - ,0.12471510E+3,0.204E+3,0.146E+3,0.19697000E+1,0.18630000E+1 - ,0.12059750E+3,0.204E+3,0.147E+3,0.19697000E+1,0.96790000E+0 - ,0.11946230E+3,0.204E+3,0.148E+3,0.19697000E+1,0.19539000E+1 - ,0.19013130E+3,0.204E+3,0.149E+3,0.19697000E+1,0.96330000E+0 - ,0.17217670E+3,0.204E+3,0.150E+3,0.19697000E+1,0.95140000E+0 - ,0.16122340E+3,0.204E+3,0.151E+3,0.19697000E+1,0.97490000E+0 - ,0.15238060E+3,0.204E+3,0.152E+3,0.19697000E+1,0.98110000E+0 - ,0.13892730E+3,0.204E+3,0.153E+3,0.19697000E+1,0.99680000E+0 - ,0.18713180E+3,0.204E+3,0.155E+3,0.19697000E+1,0.99090000E+0 - ,0.39721940E+3,0.204E+3,0.156E+3,0.19697000E+1,0.97970000E+0 - ,0.29790180E+3,0.204E+3,0.157E+3,0.19697000E+1,0.19373000E+1 - ,0.18828490E+3,0.204E+3,0.159E+3,0.19697000E+1,0.29425000E+1 - ,0.18438050E+3,0.204E+3,0.160E+3,0.19697000E+1,0.29455000E+1 - ,0.17850850E+3,0.204E+3,0.161E+3,0.19697000E+1,0.29413000E+1 - ,0.17939000E+3,0.204E+3,0.162E+3,0.19697000E+1,0.29300000E+1 - ,0.17278660E+3,0.204E+3,0.163E+3,0.19697000E+1,0.18286000E+1 - ,0.18061150E+3,0.204E+3,0.164E+3,0.19697000E+1,0.28732000E+1 - ,0.16957170E+3,0.204E+3,0.165E+3,0.19697000E+1,0.29086000E+1 - ,0.17251880E+3,0.204E+3,0.166E+3,0.19697000E+1,0.28965000E+1 - ,0.16096160E+3,0.204E+3,0.167E+3,0.19697000E+1,0.29242000E+1 - ,0.15637090E+3,0.204E+3,0.168E+3,0.19697000E+1,0.29282000E+1 - ,0.15538670E+3,0.204E+3,0.169E+3,0.19697000E+1,0.29246000E+1 - ,0.16348550E+3,0.204E+3,0.170E+3,0.19697000E+1,0.28482000E+1 - ,0.15021190E+3,0.204E+3,0.171E+3,0.19697000E+1,0.29219000E+1 - ,0.20349990E+3,0.204E+3,0.172E+3,0.19697000E+1,0.19254000E+1 - ,0.18878180E+3,0.204E+3,0.173E+3,0.19697000E+1,0.19459000E+1 - ,0.17212060E+3,0.204E+3,0.174E+3,0.19697000E+1,0.19292000E+1 - ,0.17412660E+3,0.204E+3,0.175E+3,0.19697000E+1,0.18104000E+1 - ,0.15226480E+3,0.204E+3,0.176E+3,0.19697000E+1,0.18858000E+1 - ,0.14305840E+3,0.204E+3,0.177E+3,0.19697000E+1,0.18648000E+1 - ,0.13650000E+3,0.204E+3,0.178E+3,0.19697000E+1,0.19188000E+1 - ,0.13034490E+3,0.204E+3,0.179E+3,0.19697000E+1,0.98460000E+0 - ,0.12597100E+3,0.204E+3,0.180E+3,0.19697000E+1,0.19896000E+1 - ,0.20371920E+3,0.204E+3,0.181E+3,0.19697000E+1,0.92670000E+0 - ,0.18586380E+3,0.204E+3,0.182E+3,0.19697000E+1,0.93830000E+0 - ,0.18030690E+3,0.204E+3,0.183E+3,0.19697000E+1,0.98200000E+0 - ,0.17530470E+3,0.204E+3,0.184E+3,0.19697000E+1,0.98150000E+0 - ,0.16350870E+3,0.204E+3,0.185E+3,0.19697000E+1,0.99540000E+0 - ,0.21081250E+3,0.204E+3,0.187E+3,0.19697000E+1,0.97050000E+0 - ,0.39575600E+3,0.204E+3,0.188E+3,0.19697000E+1,0.96620000E+0 - ,0.22289780E+3,0.204E+3,0.189E+3,0.19697000E+1,0.29070000E+1 - ,0.25694260E+3,0.204E+3,0.190E+3,0.19697000E+1,0.28844000E+1 - ,0.22939980E+3,0.204E+3,0.191E+3,0.19697000E+1,0.28738000E+1 - ,0.20281970E+3,0.204E+3,0.192E+3,0.19697000E+1,0.28878000E+1 - ,0.19512320E+3,0.204E+3,0.193E+3,0.19697000E+1,0.29095000E+1 - ,0.23441020E+3,0.204E+3,0.194E+3,0.19697000E+1,0.19209000E+1 - ,0.55136400E+2,0.204E+3,0.204E+3,0.19697000E+1,0.19697000E+1 - ,0.12495200E+2,0.205E+3,0.100E+1,0.19441000E+1,0.91180000E+0 - ,0.82586000E+1,0.205E+3,0.200E+1,0.19441000E+1,0.00000000E+0 - ,0.18876110E+3,0.205E+3,0.300E+1,0.19441000E+1,0.00000000E+0 - ,0.11041850E+3,0.205E+3,0.400E+1,0.19441000E+1,0.00000000E+0 - ,0.74986500E+2,0.205E+3,0.500E+1,0.19441000E+1,0.00000000E+0 - ,0.50909000E+2,0.205E+3,0.600E+1,0.19441000E+1,0.00000000E+0 - ,0.35677800E+2,0.205E+3,0.700E+1,0.19441000E+1,0.00000000E+0 - ,0.27024700E+2,0.205E+3,0.800E+1,0.19441000E+1,0.00000000E+0 - ,0.20459200E+2,0.205E+3,0.900E+1,0.19441000E+1,0.00000000E+0 - ,0.15712700E+2,0.205E+3,0.100E+2,0.19441000E+1,0.00000000E+0 - ,0.22578430E+3,0.205E+3,0.110E+2,0.19441000E+1,0.00000000E+0 - ,0.17539140E+3,0.205E+3,0.120E+2,0.19441000E+1,0.00000000E+0 - ,0.16244730E+3,0.205E+3,0.130E+2,0.19441000E+1,0.00000000E+0 - ,0.12874590E+3,0.205E+3,0.140E+2,0.19441000E+1,0.00000000E+0 - ,0.10084320E+3,0.205E+3,0.150E+2,0.19441000E+1,0.00000000E+0 - ,0.83884700E+2,0.205E+3,0.160E+2,0.19441000E+1,0.00000000E+0 - ,0.68633100E+2,0.205E+3,0.170E+2,0.19441000E+1,0.00000000E+0 - ,0.56192600E+2,0.205E+3,0.180E+2,0.19441000E+1,0.00000000E+0 - ,0.37015350E+3,0.205E+3,0.190E+2,0.19441000E+1,0.00000000E+0 - ,0.30690780E+3,0.205E+3,0.200E+2,0.19441000E+1,0.00000000E+0 - ,0.25395340E+3,0.205E+3,0.210E+2,0.19441000E+1,0.00000000E+0 - ,0.24566470E+3,0.205E+3,0.220E+2,0.19441000E+1,0.00000000E+0 - ,0.22517830E+3,0.205E+3,0.230E+2,0.19441000E+1,0.00000000E+0 - ,0.17740000E+3,0.205E+3,0.240E+2,0.19441000E+1,0.00000000E+0 - ,0.19413780E+3,0.205E+3,0.250E+2,0.19441000E+1,0.00000000E+0 - ,0.15238870E+3,0.205E+3,0.260E+2,0.19441000E+1,0.00000000E+0 - ,0.16187200E+3,0.205E+3,0.270E+2,0.19441000E+1,0.00000000E+0 - ,0.16656140E+3,0.205E+3,0.280E+2,0.19441000E+1,0.00000000E+0 - ,0.12766860E+3,0.205E+3,0.290E+2,0.19441000E+1,0.00000000E+0 - ,0.13152520E+3,0.205E+3,0.300E+2,0.19441000E+1,0.00000000E+0 - ,0.15580800E+3,0.205E+3,0.310E+2,0.19441000E+1,0.00000000E+0 - ,0.13799560E+3,0.205E+3,0.320E+2,0.19441000E+1,0.00000000E+0 - ,0.11813540E+3,0.205E+3,0.330E+2,0.19441000E+1,0.00000000E+0 - ,0.10621400E+3,0.205E+3,0.340E+2,0.19441000E+1,0.00000000E+0 - ,0.93100300E+2,0.205E+3,0.350E+2,0.19441000E+1,0.00000000E+0 - ,0.81051800E+2,0.205E+3,0.360E+2,0.19441000E+1,0.00000000E+0 - ,0.41522010E+3,0.205E+3,0.370E+2,0.19441000E+1,0.00000000E+0 - ,0.36565710E+3,0.205E+3,0.380E+2,0.19441000E+1,0.00000000E+0 - ,0.32126520E+3,0.205E+3,0.390E+2,0.19441000E+1,0.00000000E+0 - ,0.28928690E+3,0.205E+3,0.400E+2,0.19441000E+1,0.00000000E+0 - ,0.26412850E+3,0.205E+3,0.410E+2,0.19441000E+1,0.00000000E+0 - ,0.20430920E+3,0.205E+3,0.420E+2,0.19441000E+1,0.00000000E+0 - ,0.22779590E+3,0.205E+3,0.430E+2,0.19441000E+1,0.00000000E+0 - ,0.17387670E+3,0.205E+3,0.440E+2,0.19441000E+1,0.00000000E+0 - ,0.19004450E+3,0.205E+3,0.450E+2,0.19441000E+1,0.00000000E+0 - ,0.17633810E+3,0.205E+3,0.460E+2,0.19441000E+1,0.00000000E+0 - ,0.14690170E+3,0.205E+3,0.470E+2,0.19441000E+1,0.00000000E+0 - ,0.15547780E+3,0.205E+3,0.480E+2,0.19441000E+1,0.00000000E+0 - ,0.19476490E+3,0.205E+3,0.490E+2,0.19441000E+1,0.00000000E+0 - ,0.18069960E+3,0.205E+3,0.500E+2,0.19441000E+1,0.00000000E+0 - ,0.16155700E+3,0.205E+3,0.510E+2,0.19441000E+1,0.00000000E+0 - ,0.15017540E+3,0.205E+3,0.520E+2,0.19441000E+1,0.00000000E+0 - ,0.13602390E+3,0.205E+3,0.530E+2,0.19441000E+1,0.00000000E+0 - ,0.12246340E+3,0.205E+3,0.540E+2,0.19441000E+1,0.00000000E+0 - ,0.50650540E+3,0.205E+3,0.550E+2,0.19441000E+1,0.00000000E+0 - ,0.46597660E+3,0.205E+3,0.560E+2,0.19441000E+1,0.00000000E+0 - ,0.41051230E+3,0.205E+3,0.570E+2,0.19441000E+1,0.00000000E+0 - ,0.19074630E+3,0.205E+3,0.580E+2,0.19441000E+1,0.27991000E+1 - ,0.41312090E+3,0.205E+3,0.590E+2,0.19441000E+1,0.00000000E+0 - ,0.39675810E+3,0.205E+3,0.600E+2,0.19441000E+1,0.00000000E+0 - ,0.38683630E+3,0.205E+3,0.610E+2,0.19441000E+1,0.00000000E+0 - ,0.37770920E+3,0.205E+3,0.620E+2,0.19441000E+1,0.00000000E+0 - ,0.36961950E+3,0.205E+3,0.630E+2,0.19441000E+1,0.00000000E+0 - ,0.29164910E+3,0.205E+3,0.640E+2,0.19441000E+1,0.00000000E+0 - ,0.32723330E+3,0.205E+3,0.650E+2,0.19441000E+1,0.00000000E+0 - ,0.31588750E+3,0.205E+3,0.660E+2,0.19441000E+1,0.00000000E+0 - ,0.33355970E+3,0.205E+3,0.670E+2,0.19441000E+1,0.00000000E+0 - ,0.32649630E+3,0.205E+3,0.680E+2,0.19441000E+1,0.00000000E+0 - ,0.32014370E+3,0.205E+3,0.690E+2,0.19441000E+1,0.00000000E+0 - ,0.31635220E+3,0.205E+3,0.700E+2,0.19441000E+1,0.00000000E+0 - ,0.26724090E+3,0.205E+3,0.710E+2,0.19441000E+1,0.00000000E+0 - ,0.26368480E+3,0.205E+3,0.720E+2,0.19441000E+1,0.00000000E+0 - ,0.24107990E+3,0.205E+3,0.730E+2,0.19441000E+1,0.00000000E+0 - ,0.20385670E+3,0.205E+3,0.740E+2,0.19441000E+1,0.00000000E+0 - ,0.20752370E+3,0.205E+3,0.750E+2,0.19441000E+1,0.00000000E+0 - ,0.18834080E+3,0.205E+3,0.760E+2,0.19441000E+1,0.00000000E+0 - ,0.17266610E+3,0.205E+3,0.770E+2,0.19441000E+1,0.00000000E+0 - ,0.14353170E+3,0.205E+3,0.780E+2,0.19441000E+1,0.00000000E+0 - ,0.13411890E+3,0.205E+3,0.790E+2,0.19441000E+1,0.00000000E+0 - ,0.13806770E+3,0.205E+3,0.800E+2,0.19441000E+1,0.00000000E+0 - ,0.20008980E+3,0.205E+3,0.810E+2,0.19441000E+1,0.00000000E+0 - ,0.19608950E+3,0.205E+3,0.820E+2,0.19441000E+1,0.00000000E+0 - ,0.18068820E+3,0.205E+3,0.830E+2,0.19441000E+1,0.00000000E+0 - ,0.17261360E+3,0.205E+3,0.840E+2,0.19441000E+1,0.00000000E+0 - ,0.15958520E+3,0.205E+3,0.850E+2,0.19441000E+1,0.00000000E+0 - ,0.14647210E+3,0.205E+3,0.860E+2,0.19441000E+1,0.00000000E+0 - ,0.47896760E+3,0.205E+3,0.870E+2,0.19441000E+1,0.00000000E+0 - ,0.46147150E+3,0.205E+3,0.880E+2,0.19441000E+1,0.00000000E+0 - ,0.40883210E+3,0.205E+3,0.890E+2,0.19441000E+1,0.00000000E+0 - ,0.36846880E+3,0.205E+3,0.900E+2,0.19441000E+1,0.00000000E+0 - ,0.36524790E+3,0.205E+3,0.910E+2,0.19441000E+1,0.00000000E+0 - ,0.35364010E+3,0.205E+3,0.920E+2,0.19441000E+1,0.00000000E+0 - ,0.36328030E+3,0.205E+3,0.930E+2,0.19441000E+1,0.00000000E+0 - ,0.35190410E+3,0.205E+3,0.940E+2,0.19441000E+1,0.00000000E+0 - ,0.20059700E+2,0.205E+3,0.101E+3,0.19441000E+1,0.00000000E+0 - ,0.64255300E+2,0.205E+3,0.103E+3,0.19441000E+1,0.98650000E+0 - ,0.82143000E+2,0.205E+3,0.104E+3,0.19441000E+1,0.98080000E+0 - ,0.63168500E+2,0.205E+3,0.105E+3,0.19441000E+1,0.97060000E+0 - ,0.47746200E+2,0.205E+3,0.106E+3,0.19441000E+1,0.98680000E+0 - ,0.33267700E+2,0.205E+3,0.107E+3,0.19441000E+1,0.99440000E+0 - ,0.24241600E+2,0.205E+3,0.108E+3,0.19441000E+1,0.99250000E+0 - ,0.16653100E+2,0.205E+3,0.109E+3,0.19441000E+1,0.99820000E+0 - ,0.93715900E+2,0.205E+3,0.111E+3,0.19441000E+1,0.96840000E+0 - ,0.14497830E+3,0.205E+3,0.112E+3,0.19441000E+1,0.96280000E+0 - ,0.14737660E+3,0.205E+3,0.113E+3,0.19441000E+1,0.96480000E+0 - ,0.11908890E+3,0.205E+3,0.114E+3,0.19441000E+1,0.95070000E+0 - ,0.97894700E+2,0.205E+3,0.115E+3,0.19441000E+1,0.99470000E+0 - ,0.82949700E+2,0.205E+3,0.116E+3,0.19441000E+1,0.99480000E+0 - ,0.67913200E+2,0.205E+3,0.117E+3,0.19441000E+1,0.99720000E+0 - ,0.12959630E+3,0.205E+3,0.119E+3,0.19441000E+1,0.97670000E+0 - ,0.24594980E+3,0.205E+3,0.120E+3,0.19441000E+1,0.98310000E+0 - ,0.13017250E+3,0.205E+3,0.121E+3,0.19441000E+1,0.18627000E+1 - ,0.12570170E+3,0.205E+3,0.122E+3,0.19441000E+1,0.18299000E+1 - ,0.12315290E+3,0.205E+3,0.123E+3,0.19441000E+1,0.19138000E+1 - ,0.12193400E+3,0.205E+3,0.124E+3,0.19441000E+1,0.18269000E+1 - ,0.11246480E+3,0.205E+3,0.125E+3,0.19441000E+1,0.16406000E+1 - ,0.10414370E+3,0.205E+3,0.126E+3,0.19441000E+1,0.16483000E+1 - ,0.99334300E+2,0.205E+3,0.127E+3,0.19441000E+1,0.17149000E+1 - ,0.97081600E+2,0.205E+3,0.128E+3,0.19441000E+1,0.17937000E+1 - ,0.95700700E+2,0.205E+3,0.129E+3,0.19441000E+1,0.95760000E+0 - ,0.90135100E+2,0.205E+3,0.130E+3,0.19441000E+1,0.19419000E+1 - ,0.14648900E+3,0.205E+3,0.131E+3,0.19441000E+1,0.96010000E+0 - ,0.12922270E+3,0.205E+3,0.132E+3,0.19441000E+1,0.94340000E+0 - ,0.11615350E+3,0.205E+3,0.133E+3,0.19441000E+1,0.98890000E+0 - ,0.10624910E+3,0.205E+3,0.134E+3,0.19441000E+1,0.99010000E+0 - ,0.93737400E+2,0.205E+3,0.135E+3,0.19441000E+1,0.99740000E+0 - ,0.15478270E+3,0.205E+3,0.137E+3,0.19441000E+1,0.97380000E+0 - ,0.29929140E+3,0.205E+3,0.138E+3,0.19441000E+1,0.98010000E+0 - ,0.23013840E+3,0.205E+3,0.139E+3,0.19441000E+1,0.19153000E+1 - ,0.17218100E+3,0.205E+3,0.140E+3,0.19441000E+1,0.19355000E+1 - ,0.17379460E+3,0.205E+3,0.141E+3,0.19441000E+1,0.19545000E+1 - ,0.16219830E+3,0.205E+3,0.142E+3,0.19441000E+1,0.19420000E+1 - ,0.18138850E+3,0.205E+3,0.143E+3,0.19441000E+1,0.16682000E+1 - ,0.14162010E+3,0.205E+3,0.144E+3,0.19441000E+1,0.18584000E+1 - ,0.13247760E+3,0.205E+3,0.145E+3,0.19441000E+1,0.19003000E+1 - ,0.12302270E+3,0.205E+3,0.146E+3,0.19441000E+1,0.18630000E+1 - ,0.11892360E+3,0.205E+3,0.147E+3,0.19441000E+1,0.96790000E+0 - ,0.11788430E+3,0.205E+3,0.148E+3,0.19441000E+1,0.19539000E+1 - ,0.18585760E+3,0.205E+3,0.149E+3,0.19441000E+1,0.96330000E+0 - ,0.16872480E+3,0.205E+3,0.150E+3,0.19441000E+1,0.95140000E+0 - ,0.15840370E+3,0.205E+3,0.151E+3,0.19441000E+1,0.97490000E+0 - ,0.15008700E+3,0.205E+3,0.152E+3,0.19441000E+1,0.98110000E+0 - ,0.13730200E+3,0.205E+3,0.153E+3,0.19441000E+1,0.99680000E+0 - ,0.18365680E+3,0.205E+3,0.155E+3,0.19441000E+1,0.99090000E+0 - ,0.38802680E+3,0.205E+3,0.156E+3,0.19441000E+1,0.97970000E+0 - ,0.29127440E+3,0.205E+3,0.157E+3,0.19441000E+1,0.19373000E+1 - ,0.18501940E+3,0.205E+3,0.159E+3,0.19441000E+1,0.29425000E+1 - ,0.18119130E+3,0.205E+3,0.160E+3,0.19441000E+1,0.29455000E+1 - ,0.17546970E+3,0.205E+3,0.161E+3,0.19441000E+1,0.29413000E+1 - ,0.17626590E+3,0.205E+3,0.162E+3,0.19441000E+1,0.29300000E+1 - ,0.16958240E+3,0.205E+3,0.163E+3,0.19441000E+1,0.18286000E+1 - ,0.17736130E+3,0.205E+3,0.164E+3,0.19441000E+1,0.28732000E+1 - ,0.16662020E+3,0.205E+3,0.165E+3,0.19441000E+1,0.29086000E+1 - ,0.16942280E+3,0.205E+3,0.166E+3,0.19441000E+1,0.28965000E+1 - ,0.15821700E+3,0.205E+3,0.167E+3,0.19441000E+1,0.29242000E+1 - ,0.15373020E+3,0.205E+3,0.168E+3,0.19441000E+1,0.29282000E+1 - ,0.15273000E+3,0.205E+3,0.169E+3,0.19441000E+1,0.29246000E+1 - ,0.16046200E+3,0.205E+3,0.170E+3,0.19441000E+1,0.28482000E+1 - ,0.14766360E+3,0.205E+3,0.171E+3,0.19441000E+1,0.29219000E+1 - ,0.19919290E+3,0.205E+3,0.172E+3,0.19441000E+1,0.19254000E+1 - ,0.18514520E+3,0.205E+3,0.173E+3,0.19441000E+1,0.19459000E+1 - ,0.16918110E+3,0.205E+3,0.174E+3,0.19441000E+1,0.19292000E+1 - ,0.17089180E+3,0.205E+3,0.175E+3,0.19441000E+1,0.18104000E+1 - ,0.15017550E+3,0.205E+3,0.176E+3,0.19441000E+1,0.18858000E+1 - ,0.14130850E+3,0.205E+3,0.177E+3,0.19441000E+1,0.18648000E+1 - ,0.13497080E+3,0.205E+3,0.178E+3,0.19441000E+1,0.19188000E+1 - ,0.12897340E+3,0.205E+3,0.179E+3,0.19441000E+1,0.98460000E+0 - ,0.12481680E+3,0.205E+3,0.180E+3,0.19441000E+1,0.19896000E+1 - ,0.19964430E+3,0.205E+3,0.181E+3,0.19441000E+1,0.92670000E+0 - ,0.18252700E+3,0.205E+3,0.182E+3,0.19441000E+1,0.93830000E+0 - ,0.17734000E+3,0.205E+3,0.183E+3,0.19441000E+1,0.98200000E+0 - ,0.17270710E+3,0.205E+3,0.184E+3,0.19441000E+1,0.98150000E+0 - ,0.16153370E+3,0.205E+3,0.185E+3,0.19441000E+1,0.99540000E+0 - ,0.20689790E+3,0.205E+3,0.187E+3,0.19441000E+1,0.97050000E+0 - ,0.38645800E+3,0.205E+3,0.188E+3,0.19441000E+1,0.96620000E+0 - ,0.21894300E+3,0.205E+3,0.189E+3,0.19441000E+1,0.29070000E+1 - ,0.25214850E+3,0.205E+3,0.190E+3,0.19441000E+1,0.28844000E+1 - ,0.22571000E+3,0.205E+3,0.191E+3,0.19441000E+1,0.28738000E+1 - ,0.19962770E+3,0.205E+3,0.192E+3,0.19441000E+1,0.28878000E+1 - ,0.19215040E+3,0.205E+3,0.193E+3,0.19441000E+1,0.29095000E+1 - ,0.23000030E+3,0.205E+3,0.194E+3,0.19441000E+1,0.19209000E+1 - ,0.53991900E+2,0.205E+3,0.204E+3,0.19441000E+1,0.19697000E+1 - ,0.53112800E+2,0.205E+3,0.205E+3,0.19441000E+1,0.19441000E+1 - ,0.94203000E+1,0.206E+3,0.100E+1,0.19985000E+1,0.91180000E+0 - ,0.65027000E+1,0.206E+3,0.200E+1,0.19985000E+1,0.00000000E+0 - ,0.12377070E+3,0.206E+3,0.300E+1,0.19985000E+1,0.00000000E+0 - ,0.76755200E+2,0.206E+3,0.400E+1,0.19985000E+1,0.00000000E+0 - ,0.54085400E+2,0.206E+3,0.500E+1,0.19985000E+1,0.00000000E+0 - ,0.37841900E+2,0.206E+3,0.600E+1,0.19985000E+1,0.00000000E+0 - ,0.27170400E+2,0.206E+3,0.700E+1,0.19985000E+1,0.00000000E+0 - ,0.20959700E+2,0.206E+3,0.800E+1,0.19985000E+1,0.00000000E+0 - ,0.16131200E+2,0.206E+3,0.900E+1,0.19985000E+1,0.00000000E+0 - ,0.12562900E+2,0.206E+3,0.100E+2,0.19985000E+1,0.00000000E+0 - ,0.14876180E+3,0.206E+3,0.110E+2,0.19985000E+1,0.00000000E+0 - ,0.12073860E+3,0.206E+3,0.120E+2,0.19985000E+1,0.00000000E+0 - ,0.11385600E+3,0.206E+3,0.130E+2,0.19985000E+1,0.00000000E+0 - ,0.92493100E+2,0.206E+3,0.140E+2,0.19985000E+1,0.00000000E+0 - ,0.74078400E+2,0.206E+3,0.150E+2,0.19985000E+1,0.00000000E+0 - ,0.62595300E+2,0.206E+3,0.160E+2,0.19985000E+1,0.00000000E+0 - ,0.52020800E+2,0.206E+3,0.170E+2,0.19985000E+1,0.00000000E+0 - ,0.43206400E+2,0.206E+3,0.180E+2,0.19985000E+1,0.00000000E+0 - ,0.24263660E+3,0.206E+3,0.190E+2,0.19985000E+1,0.00000000E+0 - ,0.20802230E+3,0.206E+3,0.200E+2,0.19985000E+1,0.00000000E+0 - ,0.17346300E+3,0.206E+3,0.210E+2,0.19985000E+1,0.00000000E+0 - ,0.16920640E+3,0.206E+3,0.220E+2,0.19985000E+1,0.00000000E+0 - ,0.15583870E+3,0.206E+3,0.230E+2,0.19985000E+1,0.00000000E+0 - ,0.12325910E+3,0.206E+3,0.240E+2,0.19985000E+1,0.00000000E+0 - ,0.13529940E+3,0.206E+3,0.250E+2,0.19985000E+1,0.00000000E+0 - ,0.10673260E+3,0.206E+3,0.260E+2,0.19985000E+1,0.00000000E+0 - ,0.11409130E+3,0.206E+3,0.270E+2,0.19985000E+1,0.00000000E+0 - ,0.11680720E+3,0.206E+3,0.280E+2,0.19985000E+1,0.00000000E+0 - ,0.89951500E+2,0.206E+3,0.290E+2,0.19985000E+1,0.00000000E+0 - ,0.93687000E+2,0.206E+3,0.300E+2,0.19985000E+1,0.00000000E+0 - ,0.11027700E+3,0.206E+3,0.310E+2,0.19985000E+1,0.00000000E+0 - ,0.99469800E+2,0.206E+3,0.320E+2,0.19985000E+1,0.00000000E+0 - ,0.86689500E+2,0.206E+3,0.330E+2,0.19985000E+1,0.00000000E+0 - ,0.78883800E+2,0.206E+3,0.340E+2,0.19985000E+1,0.00000000E+0 - ,0.70035200E+2,0.206E+3,0.350E+2,0.19985000E+1,0.00000000E+0 - ,0.61725400E+2,0.206E+3,0.360E+2,0.19985000E+1,0.00000000E+0 - ,0.27337570E+3,0.206E+3,0.370E+2,0.19985000E+1,0.00000000E+0 - ,0.24782850E+3,0.206E+3,0.380E+2,0.19985000E+1,0.00000000E+0 - ,0.22088300E+3,0.206E+3,0.390E+2,0.19985000E+1,0.00000000E+0 - ,0.20078170E+3,0.206E+3,0.400E+2,0.19985000E+1,0.00000000E+0 - ,0.18454770E+3,0.206E+3,0.410E+2,0.19985000E+1,0.00000000E+0 - ,0.14463550E+3,0.206E+3,0.420E+2,0.19985000E+1,0.00000000E+0 - ,0.16045200E+3,0.206E+3,0.430E+2,0.19985000E+1,0.00000000E+0 - ,0.12423890E+3,0.206E+3,0.440E+2,0.19985000E+1,0.00000000E+0 - ,0.13547600E+3,0.206E+3,0.450E+2,0.19985000E+1,0.00000000E+0 - ,0.12623620E+3,0.206E+3,0.460E+2,0.19985000E+1,0.00000000E+0 - ,0.10535720E+3,0.206E+3,0.470E+2,0.19985000E+1,0.00000000E+0 - ,0.11192520E+3,0.206E+3,0.480E+2,0.19985000E+1,0.00000000E+0 - ,0.13828310E+3,0.206E+3,0.490E+2,0.19985000E+1,0.00000000E+0 - ,0.13007660E+3,0.206E+3,0.500E+2,0.19985000E+1,0.00000000E+0 - ,0.11803370E+3,0.206E+3,0.510E+2,0.19985000E+1,0.00000000E+0 - ,0.11077470E+3,0.206E+3,0.520E+2,0.19985000E+1,0.00000000E+0 - ,0.10142160E+3,0.206E+3,0.530E+2,0.19985000E+1,0.00000000E+0 - ,0.92287600E+2,0.206E+3,0.540E+2,0.19985000E+1,0.00000000E+0 - ,0.33381300E+3,0.206E+3,0.550E+2,0.19985000E+1,0.00000000E+0 - ,0.31468370E+3,0.206E+3,0.560E+2,0.19985000E+1,0.00000000E+0 - ,0.28115040E+3,0.206E+3,0.570E+2,0.19985000E+1,0.00000000E+0 - ,0.13918110E+3,0.206E+3,0.580E+2,0.19985000E+1,0.27991000E+1 - ,0.28046490E+3,0.206E+3,0.590E+2,0.19985000E+1,0.00000000E+0 - ,0.26998650E+3,0.206E+3,0.600E+2,0.19985000E+1,0.00000000E+0 - ,0.26339220E+3,0.206E+3,0.610E+2,0.19985000E+1,0.00000000E+0 - ,0.25730290E+3,0.206E+3,0.620E+2,0.19985000E+1,0.00000000E+0 - ,0.25190990E+3,0.206E+3,0.630E+2,0.19985000E+1,0.00000000E+0 - ,0.20229780E+3,0.206E+3,0.640E+2,0.19985000E+1,0.00000000E+0 - ,0.22209340E+3,0.206E+3,0.650E+2,0.19985000E+1,0.00000000E+0 - ,0.21493990E+3,0.206E+3,0.660E+2,0.19985000E+1,0.00000000E+0 - ,0.22808570E+3,0.206E+3,0.670E+2,0.19985000E+1,0.00000000E+0 - ,0.22331660E+3,0.206E+3,0.680E+2,0.19985000E+1,0.00000000E+0 - ,0.21907220E+3,0.206E+3,0.690E+2,0.19985000E+1,0.00000000E+0 - ,0.21630440E+3,0.206E+3,0.700E+2,0.19985000E+1,0.00000000E+0 - ,0.18487050E+3,0.206E+3,0.710E+2,0.19985000E+1,0.00000000E+0 - ,0.18493620E+3,0.206E+3,0.720E+2,0.19985000E+1,0.00000000E+0 - ,0.17072850E+3,0.206E+3,0.730E+2,0.19985000E+1,0.00000000E+0 - ,0.14577740E+3,0.206E+3,0.740E+2,0.19985000E+1,0.00000000E+0 - ,0.14883210E+3,0.206E+3,0.750E+2,0.19985000E+1,0.00000000E+0 - ,0.13624100E+3,0.206E+3,0.760E+2,0.19985000E+1,0.00000000E+0 - ,0.12580040E+3,0.206E+3,0.770E+2,0.19985000E+1,0.00000000E+0 - ,0.10559200E+3,0.206E+3,0.780E+2,0.19985000E+1,0.00000000E+0 - ,0.99045400E+2,0.206E+3,0.790E+2,0.19985000E+1,0.00000000E+0 - ,0.10212660E+3,0.206E+3,0.800E+2,0.19985000E+1,0.00000000E+0 - ,0.14307200E+3,0.206E+3,0.810E+2,0.19985000E+1,0.00000000E+0 - ,0.14157460E+3,0.206E+3,0.820E+2,0.19985000E+1,0.00000000E+0 - ,0.13211550E+3,0.206E+3,0.830E+2,0.19985000E+1,0.00000000E+0 - ,0.12719520E+3,0.206E+3,0.840E+2,0.19985000E+1,0.00000000E+0 - ,0.11875500E+3,0.206E+3,0.850E+2,0.19985000E+1,0.00000000E+0 - ,0.11003140E+3,0.206E+3,0.860E+2,0.19985000E+1,0.00000000E+0 - ,0.31957380E+3,0.206E+3,0.870E+2,0.19985000E+1,0.00000000E+0 - ,0.31409480E+3,0.206E+3,0.880E+2,0.19985000E+1,0.00000000E+0 - ,0.28185090E+3,0.206E+3,0.890E+2,0.19985000E+1,0.00000000E+0 - ,0.25814870E+3,0.206E+3,0.900E+2,0.19985000E+1,0.00000000E+0 - ,0.25426850E+3,0.206E+3,0.910E+2,0.19985000E+1,0.00000000E+0 - ,0.24632970E+3,0.206E+3,0.920E+2,0.19985000E+1,0.00000000E+0 - ,0.25069380E+3,0.206E+3,0.930E+2,0.19985000E+1,0.00000000E+0 - ,0.24324780E+3,0.206E+3,0.940E+2,0.19985000E+1,0.00000000E+0 - ,0.14762300E+2,0.206E+3,0.101E+3,0.19985000E+1,0.00000000E+0 - ,0.44932000E+2,0.206E+3,0.103E+3,0.19985000E+1,0.98650000E+0 - ,0.57880500E+2,0.206E+3,0.104E+3,0.19985000E+1,0.98080000E+0 - ,0.45963200E+2,0.206E+3,0.105E+3,0.19985000E+1,0.97060000E+0 - ,0.35521900E+2,0.206E+3,0.106E+3,0.19985000E+1,0.98680000E+0 - ,0.25382700E+2,0.206E+3,0.107E+3,0.19985000E+1,0.99440000E+0 - ,0.18903400E+2,0.206E+3,0.108E+3,0.19985000E+1,0.99250000E+0 - ,0.13352900E+2,0.206E+3,0.109E+3,0.19985000E+1,0.99820000E+0 - ,0.65273900E+2,0.206E+3,0.111E+3,0.19985000E+1,0.96840000E+0 - ,0.10058170E+3,0.206E+3,0.112E+3,0.19985000E+1,0.96280000E+0 - ,0.10379070E+3,0.206E+3,0.113E+3,0.19985000E+1,0.96480000E+0 - ,0.85906800E+2,0.206E+3,0.114E+3,0.19985000E+1,0.95070000E+0 - ,0.71991400E+2,0.206E+3,0.115E+3,0.19985000E+1,0.99470000E+0 - ,0.61891600E+2,0.206E+3,0.116E+3,0.19985000E+1,0.99480000E+0 - ,0.51472100E+2,0.206E+3,0.117E+3,0.19985000E+1,0.99720000E+0 - ,0.92024000E+2,0.206E+3,0.119E+3,0.19985000E+1,0.97670000E+0 - ,0.16741450E+3,0.206E+3,0.120E+3,0.19985000E+1,0.98310000E+0 - ,0.93891100E+2,0.206E+3,0.121E+3,0.19985000E+1,0.18627000E+1 - ,0.90783800E+2,0.206E+3,0.122E+3,0.19985000E+1,0.18299000E+1 - ,0.88942900E+2,0.206E+3,0.123E+3,0.19985000E+1,0.19138000E+1 - ,0.87888900E+2,0.206E+3,0.124E+3,0.19985000E+1,0.18269000E+1 - ,0.81873100E+2,0.206E+3,0.125E+3,0.19985000E+1,0.16406000E+1 - ,0.76113200E+2,0.206E+3,0.126E+3,0.19985000E+1,0.16483000E+1 - ,0.72644300E+2,0.206E+3,0.127E+3,0.19985000E+1,0.17149000E+1 - ,0.70944400E+2,0.206E+3,0.128E+3,0.19985000E+1,0.17937000E+1 - ,0.69405800E+2,0.206E+3,0.129E+3,0.19985000E+1,0.95760000E+0 - ,0.66283800E+2,0.206E+3,0.130E+3,0.19985000E+1,0.19419000E+1 - ,0.10418810E+3,0.206E+3,0.131E+3,0.19985000E+1,0.96010000E+0 - ,0.93589300E+2,0.206E+3,0.132E+3,0.19985000E+1,0.94340000E+0 - ,0.85337900E+2,0.206E+3,0.133E+3,0.19985000E+1,0.98890000E+0 - ,0.78902900E+2,0.206E+3,0.134E+3,0.19985000E+1,0.99010000E+0 - ,0.70474400E+2,0.206E+3,0.135E+3,0.19985000E+1,0.99740000E+0 - ,0.11048560E+3,0.206E+3,0.137E+3,0.19985000E+1,0.97380000E+0 - ,0.20357060E+3,0.206E+3,0.138E+3,0.19985000E+1,0.98010000E+0 - ,0.16111150E+3,0.206E+3,0.139E+3,0.19985000E+1,0.19153000E+1 - ,0.12419200E+3,0.206E+3,0.140E+3,0.19985000E+1,0.19355000E+1 - ,0.12536250E+3,0.206E+3,0.141E+3,0.19985000E+1,0.19545000E+1 - ,0.11755240E+3,0.206E+3,0.142E+3,0.19985000E+1,0.19420000E+1 - ,0.12970790E+3,0.206E+3,0.143E+3,0.19985000E+1,0.16682000E+1 - ,0.10379560E+3,0.206E+3,0.144E+3,0.19985000E+1,0.18584000E+1 - ,0.97296100E+2,0.206E+3,0.145E+3,0.19985000E+1,0.19003000E+1 - ,0.90624900E+2,0.206E+3,0.146E+3,0.19985000E+1,0.18630000E+1 - ,0.87495100E+2,0.206E+3,0.147E+3,0.19985000E+1,0.96790000E+0 - ,0.87291500E+2,0.206E+3,0.148E+3,0.19985000E+1,0.19539000E+1 - ,0.13265050E+3,0.206E+3,0.149E+3,0.19985000E+1,0.96330000E+0 - ,0.12220300E+3,0.206E+3,0.150E+3,0.19985000E+1,0.95140000E+0 - ,0.11597420E+3,0.206E+3,0.151E+3,0.19985000E+1,0.97490000E+0 - ,0.11077110E+3,0.206E+3,0.152E+3,0.19985000E+1,0.98110000E+0 - ,0.10234890E+3,0.206E+3,0.153E+3,0.19985000E+1,0.99680000E+0 - ,0.13246620E+3,0.206E+3,0.155E+3,0.19985000E+1,0.99090000E+0 - ,0.26261810E+3,0.206E+3,0.156E+3,0.19985000E+1,0.97970000E+0 - ,0.20348290E+3,0.206E+3,0.157E+3,0.19985000E+1,0.19373000E+1 - ,0.13513800E+3,0.206E+3,0.159E+3,0.19985000E+1,0.29425000E+1 - ,0.13236910E+3,0.206E+3,0.160E+3,0.19985000E+1,0.29455000E+1 - ,0.12830130E+3,0.206E+3,0.161E+3,0.19985000E+1,0.29413000E+1 - ,0.12859630E+3,0.206E+3,0.162E+3,0.19985000E+1,0.29300000E+1 - ,0.12294040E+3,0.206E+3,0.163E+3,0.19985000E+1,0.18286000E+1 - ,0.12924610E+3,0.206E+3,0.164E+3,0.19985000E+1,0.28732000E+1 - ,0.12168990E+3,0.206E+3,0.165E+3,0.19985000E+1,0.29086000E+1 - ,0.12326190E+3,0.206E+3,0.166E+3,0.19985000E+1,0.28965000E+1 - ,0.11576120E+3,0.206E+3,0.167E+3,0.19985000E+1,0.29242000E+1 - ,0.11255880E+3,0.206E+3,0.168E+3,0.19985000E+1,0.29282000E+1 - ,0.11174980E+3,0.206E+3,0.169E+3,0.19985000E+1,0.29246000E+1 - ,0.11693130E+3,0.206E+3,0.170E+3,0.19985000E+1,0.28482000E+1 - ,0.10814300E+3,0.206E+3,0.171E+3,0.19985000E+1,0.29219000E+1 - ,0.14218370E+3,0.206E+3,0.172E+3,0.19985000E+1,0.19254000E+1 - ,0.13342480E+3,0.206E+3,0.173E+3,0.19985000E+1,0.19459000E+1 - ,0.12313620E+3,0.206E+3,0.174E+3,0.19985000E+1,0.19292000E+1 - ,0.12340630E+3,0.206E+3,0.175E+3,0.19985000E+1,0.18104000E+1 - ,0.11082750E+3,0.206E+3,0.176E+3,0.19985000E+1,0.18858000E+1 - ,0.10472640E+3,0.206E+3,0.177E+3,0.19985000E+1,0.18648000E+1 - ,0.10030120E+3,0.206E+3,0.178E+3,0.19985000E+1,0.19188000E+1 - ,0.95922700E+2,0.206E+3,0.179E+3,0.19985000E+1,0.98460000E+0 - ,0.93462800E+2,0.206E+3,0.180E+3,0.19985000E+1,0.19896000E+1 - ,0.14324960E+3,0.206E+3,0.181E+3,0.19985000E+1,0.92670000E+0 - ,0.13282830E+3,0.206E+3,0.182E+3,0.19985000E+1,0.93830000E+0 - ,0.13004040E+3,0.206E+3,0.183E+3,0.19985000E+1,0.98200000E+0 - ,0.12739760E+3,0.206E+3,0.184E+3,0.19985000E+1,0.98150000E+0 - ,0.12019670E+3,0.206E+3,0.185E+3,0.19985000E+1,0.99540000E+0 - ,0.14932790E+3,0.206E+3,0.187E+3,0.19985000E+1,0.97050000E+0 - ,0.26405250E+3,0.206E+3,0.188E+3,0.19985000E+1,0.96620000E+0 - ,0.15978300E+3,0.206E+3,0.189E+3,0.19985000E+1,0.29070000E+1 - ,0.18182240E+3,0.206E+3,0.190E+3,0.19985000E+1,0.28844000E+1 - ,0.16366940E+3,0.206E+3,0.191E+3,0.19985000E+1,0.28738000E+1 - ,0.14625060E+3,0.206E+3,0.192E+3,0.19985000E+1,0.28878000E+1 - ,0.14111910E+3,0.206E+3,0.193E+3,0.19985000E+1,0.29095000E+1 - ,0.16450530E+3,0.206E+3,0.194E+3,0.19985000E+1,0.19209000E+1 - ,0.39281400E+2,0.206E+3,0.204E+3,0.19985000E+1,0.19697000E+1 - ,0.38983400E+2,0.206E+3,0.205E+3,0.19985000E+1,0.19441000E+1 - ,0.29360200E+2,0.206E+3,0.206E+3,0.19985000E+1,0.19985000E+1 - ,0.76610000E+1,0.207E+3,0.100E+1,0.20143000E+1,0.91180000E+0 - ,0.54559000E+1,0.207E+3,0.200E+1,0.20143000E+1,0.00000000E+0 - ,0.94006000E+2,0.207E+3,0.300E+1,0.20143000E+1,0.00000000E+0 - ,0.59598300E+2,0.207E+3,0.400E+1,0.20143000E+1,0.00000000E+0 - ,0.42834800E+2,0.207E+3,0.500E+1,0.20143000E+1,0.00000000E+0 - ,0.30530500E+2,0.207E+3,0.600E+1,0.20143000E+1,0.00000000E+0 - ,0.22279400E+2,0.207E+3,0.700E+1,0.20143000E+1,0.00000000E+0 - ,0.17409300E+2,0.207E+3,0.800E+1,0.20143000E+1,0.00000000E+0 - ,0.13561300E+2,0.207E+3,0.900E+1,0.20143000E+1,0.00000000E+0 - ,0.10674000E+2,0.207E+3,0.100E+2,0.20143000E+1,0.00000000E+0 - ,0.11330310E+3,0.207E+3,0.110E+2,0.20143000E+1,0.00000000E+0 - ,0.93413000E+2,0.207E+3,0.120E+2,0.20143000E+1,0.00000000E+0 - ,0.88840700E+2,0.207E+3,0.130E+2,0.20143000E+1,0.00000000E+0 - ,0.73085800E+2,0.207E+3,0.140E+2,0.20143000E+1,0.00000000E+0 - ,0.59285900E+2,0.207E+3,0.150E+2,0.20143000E+1,0.00000000E+0 - ,0.50594600E+2,0.207E+3,0.160E+2,0.20143000E+1,0.00000000E+0 - ,0.42481600E+2,0.207E+3,0.170E+2,0.20143000E+1,0.00000000E+0 - ,0.35633400E+2,0.207E+3,0.180E+2,0.20143000E+1,0.00000000E+0 - ,0.18521810E+3,0.207E+3,0.190E+2,0.20143000E+1,0.00000000E+0 - ,0.16027500E+3,0.207E+3,0.200E+2,0.20143000E+1,0.00000000E+0 - ,0.13403140E+3,0.207E+3,0.210E+2,0.20143000E+1,0.00000000E+0 - ,0.13130150E+3,0.207E+3,0.220E+2,0.20143000E+1,0.00000000E+0 - ,0.12121190E+3,0.207E+3,0.230E+2,0.20143000E+1,0.00000000E+0 - ,0.96254700E+2,0.207E+3,0.240E+2,0.20143000E+1,0.00000000E+0 - ,0.10560800E+3,0.207E+3,0.250E+2,0.20143000E+1,0.00000000E+0 - ,0.83691600E+2,0.207E+3,0.260E+2,0.20143000E+1,0.00000000E+0 - ,0.89534500E+2,0.207E+3,0.270E+2,0.20143000E+1,0.00000000E+0 - ,0.91429500E+2,0.207E+3,0.280E+2,0.20143000E+1,0.00000000E+0 - ,0.70763900E+2,0.207E+3,0.290E+2,0.20143000E+1,0.00000000E+0 - ,0.73921000E+2,0.207E+3,0.300E+2,0.20143000E+1,0.00000000E+0 - ,0.86619400E+2,0.207E+3,0.310E+2,0.20143000E+1,0.00000000E+0 - ,0.78823500E+2,0.207E+3,0.320E+2,0.20143000E+1,0.00000000E+0 - ,0.69377000E+2,0.207E+3,0.330E+2,0.20143000E+1,0.00000000E+0 - ,0.63591900E+2,0.207E+3,0.340E+2,0.20143000E+1,0.00000000E+0 - ,0.56918700E+2,0.207E+3,0.350E+2,0.20143000E+1,0.00000000E+0 - ,0.50574600E+2,0.207E+3,0.360E+2,0.20143000E+1,0.00000000E+0 - ,0.20923780E+3,0.207E+3,0.370E+2,0.20143000E+1,0.00000000E+0 - ,0.19112680E+3,0.207E+3,0.380E+2,0.20143000E+1,0.00000000E+0 - ,0.17135740E+3,0.207E+3,0.390E+2,0.20143000E+1,0.00000000E+0 - ,0.15645400E+3,0.207E+3,0.400E+2,0.20143000E+1,0.00000000E+0 - ,0.14431220E+3,0.207E+3,0.410E+2,0.20143000E+1,0.00000000E+0 - ,0.11400040E+3,0.207E+3,0.420E+2,0.20143000E+1,0.00000000E+0 - ,0.12608010E+3,0.207E+3,0.430E+2,0.20143000E+1,0.00000000E+0 - ,0.98472800E+2,0.207E+3,0.440E+2,0.20143000E+1,0.00000000E+0 - ,0.10710840E+3,0.207E+3,0.450E+2,0.20143000E+1,0.00000000E+0 - ,0.10003700E+3,0.207E+3,0.460E+2,0.20143000E+1,0.00000000E+0 - ,0.83787500E+2,0.207E+3,0.470E+2,0.20143000E+1,0.00000000E+0 - ,0.88985800E+2,0.207E+3,0.480E+2,0.20143000E+1,0.00000000E+0 - ,0.10908250E+3,0.207E+3,0.490E+2,0.20143000E+1,0.00000000E+0 - ,0.10321130E+3,0.207E+3,0.500E+2,0.20143000E+1,0.00000000E+0 - ,0.94365400E+2,0.207E+3,0.510E+2,0.20143000E+1,0.00000000E+0 - ,0.89035900E+2,0.207E+3,0.520E+2,0.20143000E+1,0.00000000E+0 - ,0.82037400E+2,0.207E+3,0.530E+2,0.20143000E+1,0.00000000E+0 - ,0.75142700E+2,0.207E+3,0.540E+2,0.20143000E+1,0.00000000E+0 - ,0.25574990E+3,0.207E+3,0.550E+2,0.20143000E+1,0.00000000E+0 - ,0.24255280E+3,0.207E+3,0.560E+2,0.20143000E+1,0.00000000E+0 - ,0.21789480E+3,0.207E+3,0.570E+2,0.20143000E+1,0.00000000E+0 - ,0.11128270E+3,0.207E+3,0.580E+2,0.20143000E+1,0.27991000E+1 - ,0.21678200E+3,0.207E+3,0.590E+2,0.20143000E+1,0.00000000E+0 - ,0.20883570E+3,0.207E+3,0.600E+2,0.20143000E+1,0.00000000E+0 - ,0.20377290E+3,0.207E+3,0.610E+2,0.20143000E+1,0.00000000E+0 - ,0.19908850E+3,0.207E+3,0.620E+2,0.20143000E+1,0.00000000E+0 - ,0.19493970E+3,0.207E+3,0.630E+2,0.20143000E+1,0.00000000E+0 - ,0.15792210E+3,0.207E+3,0.640E+2,0.20143000E+1,0.00000000E+0 - ,0.17208570E+3,0.207E+3,0.650E+2,0.20143000E+1,0.00000000E+0 - ,0.16673560E+3,0.207E+3,0.660E+2,0.20143000E+1,0.00000000E+0 - ,0.17670260E+3,0.207E+3,0.670E+2,0.20143000E+1,0.00000000E+0 - ,0.17301200E+3,0.207E+3,0.680E+2,0.20143000E+1,0.00000000E+0 - ,0.16974290E+3,0.207E+3,0.690E+2,0.20143000E+1,0.00000000E+0 - ,0.16752470E+3,0.207E+3,0.700E+2,0.20143000E+1,0.00000000E+0 - ,0.14402080E+3,0.207E+3,0.710E+2,0.20143000E+1,0.00000000E+0 - ,0.14479850E+3,0.207E+3,0.720E+2,0.20143000E+1,0.00000000E+0 - ,0.13433990E+3,0.207E+3,0.730E+2,0.20143000E+1,0.00000000E+0 - ,0.11544060E+3,0.207E+3,0.740E+2,0.20143000E+1,0.00000000E+0 - ,0.11798450E+3,0.207E+3,0.750E+2,0.20143000E+1,0.00000000E+0 - ,0.10851360E+3,0.207E+3,0.760E+2,0.20143000E+1,0.00000000E+0 - ,0.10061040E+3,0.207E+3,0.770E+2,0.20143000E+1,0.00000000E+0 - ,0.85019700E+2,0.207E+3,0.780E+2,0.20143000E+1,0.00000000E+0 - ,0.79962500E+2,0.207E+3,0.790E+2,0.20143000E+1,0.00000000E+0 - ,0.82454000E+2,0.207E+3,0.800E+2,0.20143000E+1,0.00000000E+0 - ,0.11348820E+3,0.207E+3,0.810E+2,0.20143000E+1,0.00000000E+0 - ,0.11268290E+3,0.207E+3,0.820E+2,0.20143000E+1,0.00000000E+0 - ,0.10579110E+3,0.207E+3,0.830E+2,0.20143000E+1,0.00000000E+0 - ,0.10226460E+3,0.207E+3,0.840E+2,0.20143000E+1,0.00000000E+0 - ,0.96007100E+2,0.207E+3,0.850E+2,0.20143000E+1,0.00000000E+0 - ,0.89458900E+2,0.207E+3,0.860E+2,0.20143000E+1,0.00000000E+0 - ,0.24600480E+3,0.207E+3,0.870E+2,0.20143000E+1,0.00000000E+0 - ,0.24292720E+3,0.207E+3,0.880E+2,0.20143000E+1,0.00000000E+0 - ,0.21910640E+3,0.207E+3,0.890E+2,0.20143000E+1,0.00000000E+0 - ,0.20223940E+3,0.207E+3,0.900E+2,0.20143000E+1,0.00000000E+0 - ,0.19881690E+3,0.207E+3,0.910E+2,0.20143000E+1,0.00000000E+0 - ,0.19268400E+3,0.207E+3,0.920E+2,0.20143000E+1,0.00000000E+0 - ,0.19532220E+3,0.207E+3,0.930E+2,0.20143000E+1,0.00000000E+0 - ,0.18964690E+3,0.207E+3,0.940E+2,0.20143000E+1,0.00000000E+0 - ,0.11821400E+2,0.207E+3,0.101E+3,0.20143000E+1,0.00000000E+0 - ,0.35019400E+2,0.207E+3,0.103E+3,0.20143000E+1,0.98650000E+0 - ,0.45316400E+2,0.207E+3,0.104E+3,0.20143000E+1,0.98080000E+0 - ,0.36606300E+2,0.207E+3,0.105E+3,0.20143000E+1,0.97060000E+0 - ,0.28693800E+2,0.207E+3,0.106E+3,0.20143000E+1,0.98680000E+0 - ,0.20850100E+2,0.207E+3,0.107E+3,0.20143000E+1,0.99440000E+0 - ,0.15763100E+2,0.207E+3,0.108E+3,0.20143000E+1,0.99250000E+0 - ,0.11357100E+2,0.207E+3,0.109E+3,0.20143000E+1,0.99820000E+0 - ,0.50867200E+2,0.207E+3,0.111E+3,0.20143000E+1,0.96840000E+0 - ,0.78176000E+2,0.207E+3,0.112E+3,0.20143000E+1,0.96280000E+0 - ,0.81202600E+2,0.207E+3,0.113E+3,0.20143000E+1,0.96480000E+0 - ,0.68050400E+2,0.207E+3,0.114E+3,0.20143000E+1,0.95070000E+0 - ,0.57663200E+2,0.207E+3,0.115E+3,0.20143000E+1,0.99470000E+0 - ,0.50029800E+2,0.207E+3,0.116E+3,0.20143000E+1,0.99480000E+0 - ,0.42036700E+2,0.207E+3,0.117E+3,0.20143000E+1,0.99720000E+0 - ,0.72681800E+2,0.207E+3,0.119E+3,0.20143000E+1,0.97670000E+0 - ,0.12958410E+3,0.207E+3,0.120E+3,0.20143000E+1,0.98310000E+0 - ,0.74558700E+2,0.207E+3,0.121E+3,0.20143000E+1,0.18627000E+1 - ,0.72182800E+2,0.207E+3,0.122E+3,0.20143000E+1,0.18299000E+1 - ,0.70734700E+2,0.207E+3,0.123E+3,0.20143000E+1,0.19138000E+1 - ,0.69847100E+2,0.207E+3,0.124E+3,0.20143000E+1,0.18269000E+1 - ,0.65341500E+2,0.207E+3,0.125E+3,0.20143000E+1,0.16406000E+1 - ,0.60892000E+2,0.207E+3,0.126E+3,0.20143000E+1,0.16483000E+1 - ,0.58161100E+2,0.207E+3,0.127E+3,0.20143000E+1,0.17149000E+1 - ,0.56786800E+2,0.207E+3,0.128E+3,0.20143000E+1,0.17937000E+1 - ,0.55378900E+2,0.207E+3,0.129E+3,0.20143000E+1,0.95760000E+0 - ,0.53207000E+2,0.207E+3,0.130E+3,0.20143000E+1,0.19419000E+1 - ,0.82040200E+2,0.207E+3,0.131E+3,0.20143000E+1,0.96010000E+0 - ,0.74362700E+2,0.207E+3,0.132E+3,0.20143000E+1,0.94340000E+0 - ,0.68347700E+2,0.207E+3,0.133E+3,0.20143000E+1,0.98890000E+0 - ,0.63607400E+2,0.207E+3,0.134E+3,0.20143000E+1,0.99010000E+0 - ,0.57257800E+2,0.207E+3,0.135E+3,0.20143000E+1,0.99740000E+0 - ,0.87544700E+2,0.207E+3,0.137E+3,0.20143000E+1,0.97380000E+0 - ,0.15768360E+3,0.207E+3,0.138E+3,0.20143000E+1,0.98010000E+0 - ,0.12634700E+3,0.207E+3,0.139E+3,0.20143000E+1,0.19153000E+1 - ,0.98716500E+2,0.207E+3,0.140E+3,0.20143000E+1,0.19355000E+1 - ,0.99662500E+2,0.207E+3,0.141E+3,0.20143000E+1,0.19545000E+1 - ,0.93743400E+2,0.207E+3,0.142E+3,0.20143000E+1,0.19420000E+1 - ,0.10285060E+3,0.207E+3,0.143E+3,0.20143000E+1,0.16682000E+1 - ,0.83274400E+2,0.207E+3,0.144E+3,0.20143000E+1,0.18584000E+1 - ,0.78197600E+2,0.207E+3,0.145E+3,0.20143000E+1,0.19003000E+1 - ,0.72996500E+2,0.207E+3,0.146E+3,0.20143000E+1,0.18630000E+1 - ,0.70450900E+2,0.207E+3,0.147E+3,0.20143000E+1,0.96790000E+0 - ,0.70442000E+2,0.207E+3,0.148E+3,0.20143000E+1,0.19539000E+1 - ,0.10489720E+3,0.207E+3,0.149E+3,0.20143000E+1,0.96330000E+0 - ,0.97282600E+2,0.207E+3,0.150E+3,0.20143000E+1,0.95140000E+0 - ,0.92826200E+2,0.207E+3,0.151E+3,0.20143000E+1,0.97490000E+0 - ,0.89058200E+2,0.207E+3,0.152E+3,0.20143000E+1,0.98110000E+0 - ,0.82771300E+2,0.207E+3,0.153E+3,0.20143000E+1,0.99680000E+0 - ,0.10537260E+3,0.207E+3,0.155E+3,0.20143000E+1,0.99090000E+0 - ,0.20323960E+3,0.207E+3,0.156E+3,0.20143000E+1,0.97970000E+0 - ,0.15949680E+3,0.207E+3,0.157E+3,0.20143000E+1,0.19373000E+1 - ,0.10811590E+3,0.207E+3,0.159E+3,0.20143000E+1,0.29425000E+1 - ,0.10591500E+3,0.207E+3,0.160E+3,0.20143000E+1,0.29455000E+1 - ,0.10271500E+3,0.207E+3,0.161E+3,0.20143000E+1,0.29413000E+1 - ,0.10283980E+3,0.207E+3,0.162E+3,0.20143000E+1,0.29300000E+1 - ,0.98062800E+2,0.207E+3,0.163E+3,0.20143000E+1,0.18286000E+1 - ,0.10326480E+3,0.207E+3,0.164E+3,0.20143000E+1,0.28732000E+1 - ,0.97359100E+2,0.207E+3,0.165E+3,0.20143000E+1,0.29086000E+1 - ,0.98444500E+2,0.207E+3,0.166E+3,0.20143000E+1,0.28965000E+1 - ,0.92693900E+2,0.207E+3,0.167E+3,0.20143000E+1,0.29242000E+1 - ,0.90162700E+2,0.207E+3,0.168E+3,0.20143000E+1,0.29282000E+1 - ,0.89477400E+2,0.207E+3,0.169E+3,0.20143000E+1,0.29246000E+1 - ,0.93380800E+2,0.207E+3,0.170E+3,0.20143000E+1,0.28482000E+1 - ,0.86620200E+2,0.207E+3,0.171E+3,0.20143000E+1,0.29219000E+1 - ,0.11247170E+3,0.207E+3,0.172E+3,0.20143000E+1,0.19254000E+1 - ,0.10607460E+3,0.207E+3,0.173E+3,0.20143000E+1,0.19459000E+1 - ,0.98419900E+2,0.207E+3,0.174E+3,0.20143000E+1,0.19292000E+1 - ,0.98272000E+2,0.207E+3,0.175E+3,0.20143000E+1,0.18104000E+1 - ,0.89250800E+2,0.207E+3,0.176E+3,0.20143000E+1,0.18858000E+1 - ,0.84579000E+2,0.207E+3,0.177E+3,0.20143000E+1,0.18648000E+1 - ,0.81163500E+2,0.207E+3,0.178E+3,0.20143000E+1,0.19188000E+1 - ,0.77711500E+2,0.207E+3,0.179E+3,0.20143000E+1,0.98460000E+0 - ,0.75948200E+2,0.207E+3,0.180E+3,0.20143000E+1,0.19896000E+1 - ,0.11375630E+3,0.207E+3,0.181E+3,0.20143000E+1,0.92670000E+0 - ,0.10614180E+3,0.207E+3,0.182E+3,0.20143000E+1,0.93830000E+0 - ,0.10427680E+3,0.207E+3,0.183E+3,0.20143000E+1,0.98200000E+0 - ,0.10247400E+3,0.207E+3,0.184E+3,0.20143000E+1,0.98150000E+0 - ,0.97157900E+2,0.207E+3,0.185E+3,0.20143000E+1,0.99540000E+0 - ,0.11880190E+3,0.207E+3,0.187E+3,0.20143000E+1,0.97050000E+0 - ,0.20507880E+3,0.207E+3,0.188E+3,0.20143000E+1,0.96620000E+0 - ,0.12774120E+3,0.207E+3,0.189E+3,0.20143000E+1,0.29070000E+1 - ,0.14466290E+3,0.207E+3,0.190E+3,0.20143000E+1,0.28844000E+1 - ,0.13073320E+3,0.207E+3,0.191E+3,0.20143000E+1,0.28738000E+1 - ,0.11732470E+3,0.207E+3,0.192E+3,0.20143000E+1,0.28878000E+1 - ,0.11335810E+3,0.207E+3,0.193E+3,0.20143000E+1,0.29095000E+1 - ,0.13059750E+3,0.207E+3,0.194E+3,0.20143000E+1,0.19209000E+1 - ,0.31240700E+2,0.207E+3,0.204E+3,0.20143000E+1,0.19697000E+1 - ,0.31222100E+2,0.207E+3,0.205E+3,0.20143000E+1,0.19441000E+1 - ,0.23896500E+2,0.207E+3,0.206E+3,0.20143000E+1,0.19985000E+1 - ,0.19676800E+2,0.207E+3,0.207E+3,0.20143000E+1,0.20143000E+1 - ,0.53717000E+1,0.208E+3,0.100E+1,0.19887000E+1,0.91180000E+0 - ,0.40179000E+1,0.208E+3,0.200E+1,0.19887000E+1,0.00000000E+0 - ,0.58670300E+2,0.208E+3,0.300E+1,0.19887000E+1,0.00000000E+0 - ,0.38702700E+2,0.208E+3,0.400E+1,0.19887000E+1,0.00000000E+0 - ,0.28771300E+2,0.208E+3,0.500E+1,0.19887000E+1,0.00000000E+0 - ,0.21142800E+2,0.208E+3,0.600E+1,0.19887000E+1,0.00000000E+0 - ,0.15836400E+2,0.208E+3,0.700E+1,0.19887000E+1,0.00000000E+0 - ,0.12627700E+2,0.208E+3,0.800E+1,0.19887000E+1,0.00000000E+0 - ,0.10022200E+2,0.208E+3,0.900E+1,0.19887000E+1,0.00000000E+0 - ,0.80175000E+1,0.208E+3,0.100E+2,0.19887000E+1,0.00000000E+0 - ,0.71099900E+2,0.208E+3,0.110E+2,0.19887000E+1,0.00000000E+0 - ,0.60298300E+2,0.208E+3,0.120E+2,0.19887000E+1,0.00000000E+0 - ,0.58195100E+2,0.208E+3,0.130E+2,0.19887000E+1,0.00000000E+0 - ,0.48906600E+2,0.208E+3,0.140E+2,0.19887000E+1,0.00000000E+0 - ,0.40516700E+2,0.208E+3,0.150E+2,0.19887000E+1,0.00000000E+0 - ,0.35137700E+2,0.208E+3,0.160E+2,0.19887000E+1,0.00000000E+0 - ,0.29991800E+2,0.208E+3,0.170E+2,0.19887000E+1,0.00000000E+0 - ,0.25551400E+2,0.208E+3,0.180E+2,0.19887000E+1,0.00000000E+0 - ,0.11670690E+3,0.208E+3,0.190E+2,0.19887000E+1,0.00000000E+0 - ,0.10271260E+3,0.208E+3,0.200E+2,0.19887000E+1,0.00000000E+0 - ,0.86336500E+2,0.208E+3,0.210E+2,0.19887000E+1,0.00000000E+0 - ,0.85221900E+2,0.208E+3,0.220E+2,0.19887000E+1,0.00000000E+0 - ,0.79000300E+2,0.208E+3,0.230E+2,0.19887000E+1,0.00000000E+0 - ,0.63186700E+2,0.208E+3,0.240E+2,0.19887000E+1,0.00000000E+0 - ,0.69259800E+2,0.208E+3,0.250E+2,0.19887000E+1,0.00000000E+0 - ,0.55335600E+2,0.208E+3,0.260E+2,0.19887000E+1,0.00000000E+0 - ,0.59268800E+2,0.208E+3,0.270E+2,0.19887000E+1,0.00000000E+0 - ,0.60257500E+2,0.208E+3,0.280E+2,0.19887000E+1,0.00000000E+0 - ,0.47058500E+2,0.208E+3,0.290E+2,0.19887000E+1,0.00000000E+0 - ,0.49389700E+2,0.208E+3,0.300E+2,0.19887000E+1,0.00000000E+0 - ,0.57401600E+2,0.208E+3,0.310E+2,0.19887000E+1,0.00000000E+0 - ,0.53011000E+2,0.208E+3,0.320E+2,0.19887000E+1,0.00000000E+0 - ,0.47420200E+2,0.208E+3,0.330E+2,0.19887000E+1,0.00000000E+0 - ,0.43981900E+2,0.208E+3,0.340E+2,0.19887000E+1,0.00000000E+0 - ,0.39882100E+2,0.208E+3,0.350E+2,0.19887000E+1,0.00000000E+0 - ,0.35896100E+2,0.208E+3,0.360E+2,0.19887000E+1,0.00000000E+0 - ,0.13248790E+3,0.208E+3,0.370E+2,0.19887000E+1,0.00000000E+0 - ,0.12269280E+3,0.208E+3,0.380E+2,0.19887000E+1,0.00000000E+0 - ,0.11116060E+3,0.208E+3,0.390E+2,0.19887000E+1,0.00000000E+0 - ,0.10228360E+3,0.208E+3,0.400E+2,0.19887000E+1,0.00000000E+0 - ,0.94928100E+2,0.208E+3,0.410E+2,0.19887000E+1,0.00000000E+0 - ,0.76023900E+2,0.208E+3,0.420E+2,0.19887000E+1,0.00000000E+0 - ,0.83640900E+2,0.208E+3,0.430E+2,0.19887000E+1,0.00000000E+0 - ,0.66302500E+2,0.208E+3,0.440E+2,0.19887000E+1,0.00000000E+0 - ,0.71807100E+2,0.208E+3,0.450E+2,0.19887000E+1,0.00000000E+0 - ,0.67335400E+2,0.208E+3,0.460E+2,0.19887000E+1,0.00000000E+0 - ,0.56751100E+2,0.208E+3,0.470E+2,0.19887000E+1,0.00000000E+0 - ,0.60233400E+2,0.208E+3,0.480E+2,0.19887000E+1,0.00000000E+0 - ,0.72857100E+2,0.208E+3,0.490E+2,0.19887000E+1,0.00000000E+0 - ,0.69604600E+2,0.208E+3,0.500E+2,0.19887000E+1,0.00000000E+0 - ,0.64429100E+2,0.208E+3,0.510E+2,0.19887000E+1,0.00000000E+0 - ,0.61315900E+2,0.208E+3,0.520E+2,0.19887000E+1,0.00000000E+0 - ,0.57073800E+2,0.208E+3,0.530E+2,0.19887000E+1,0.00000000E+0 - ,0.52826900E+2,0.208E+3,0.540E+2,0.19887000E+1,0.00000000E+0 - ,0.16220010E+3,0.208E+3,0.550E+2,0.19887000E+1,0.00000000E+0 - ,0.15554370E+3,0.208E+3,0.560E+2,0.19887000E+1,0.00000000E+0 - ,0.14109330E+3,0.208E+3,0.570E+2,0.19887000E+1,0.00000000E+0 - ,0.75991000E+2,0.208E+3,0.580E+2,0.19887000E+1,0.27991000E+1 - ,0.13974720E+3,0.208E+3,0.590E+2,0.19887000E+1,0.00000000E+0 - ,0.13480190E+3,0.208E+3,0.600E+2,0.19887000E+1,0.00000000E+0 - ,0.13157850E+3,0.208E+3,0.610E+2,0.19887000E+1,0.00000000E+0 - ,0.12858460E+3,0.208E+3,0.620E+2,0.19887000E+1,0.00000000E+0 - ,0.12593290E+3,0.208E+3,0.630E+2,0.19887000E+1,0.00000000E+0 - ,0.10360070E+3,0.208E+3,0.640E+2,0.19887000E+1,0.00000000E+0 - ,0.11142770E+3,0.208E+3,0.650E+2,0.19887000E+1,0.00000000E+0 - ,0.10818200E+3,0.208E+3,0.660E+2,0.19887000E+1,0.00000000E+0 - ,0.11438200E+3,0.208E+3,0.670E+2,0.19887000E+1,0.00000000E+0 - ,0.11199780E+3,0.208E+3,0.680E+2,0.19887000E+1,0.00000000E+0 - ,0.10990310E+3,0.208E+3,0.690E+2,0.19887000E+1,0.00000000E+0 - ,0.10838260E+3,0.208E+3,0.700E+2,0.19887000E+1,0.00000000E+0 - ,0.94143100E+2,0.208E+3,0.710E+2,0.19887000E+1,0.00000000E+0 - ,0.95450600E+2,0.208E+3,0.720E+2,0.19887000E+1,0.00000000E+0 - ,0.89314200E+2,0.208E+3,0.730E+2,0.19887000E+1,0.00000000E+0 - ,0.77589500E+2,0.208E+3,0.740E+2,0.19887000E+1,0.00000000E+0 - ,0.79439800E+2,0.208E+3,0.750E+2,0.19887000E+1,0.00000000E+0 - ,0.73642700E+2,0.208E+3,0.760E+2,0.19887000E+1,0.00000000E+0 - ,0.68748100E+2,0.208E+3,0.770E+2,0.19887000E+1,0.00000000E+0 - ,0.58749700E+2,0.208E+3,0.780E+2,0.19887000E+1,0.00000000E+0 - ,0.55502000E+2,0.208E+3,0.790E+2,0.19887000E+1,0.00000000E+0 - ,0.57232800E+2,0.208E+3,0.800E+2,0.19887000E+1,0.00000000E+0 - ,0.76523500E+2,0.208E+3,0.810E+2,0.19887000E+1,0.00000000E+0 - ,0.76401300E+2,0.208E+3,0.820E+2,0.19887000E+1,0.00000000E+0 - ,0.72435200E+2,0.208E+3,0.830E+2,0.19887000E+1,0.00000000E+0 - ,0.70476900E+2,0.208E+3,0.840E+2,0.19887000E+1,0.00000000E+0 - ,0.66750400E+2,0.208E+3,0.850E+2,0.19887000E+1,0.00000000E+0 - ,0.62757800E+2,0.208E+3,0.860E+2,0.19887000E+1,0.00000000E+0 - ,0.15736950E+3,0.208E+3,0.870E+2,0.19887000E+1,0.00000000E+0 - ,0.15673170E+3,0.208E+3,0.880E+2,0.19887000E+1,0.00000000E+0 - ,0.14266360E+3,0.208E+3,0.890E+2,0.19887000E+1,0.00000000E+0 - ,0.13347620E+3,0.208E+3,0.900E+2,0.19887000E+1,0.00000000E+0 - ,0.13079990E+3,0.208E+3,0.910E+2,0.19887000E+1,0.00000000E+0 - ,0.12685500E+3,0.208E+3,0.920E+2,0.19887000E+1,0.00000000E+0 - ,0.12772950E+3,0.208E+3,0.930E+2,0.19887000E+1,0.00000000E+0 - ,0.12416310E+3,0.208E+3,0.940E+2,0.19887000E+1,0.00000000E+0 - ,0.80848000E+1,0.208E+3,0.101E+3,0.19887000E+1,0.00000000E+0 - ,0.22893000E+2,0.208E+3,0.103E+3,0.19887000E+1,0.98650000E+0 - ,0.29852300E+2,0.208E+3,0.104E+3,0.19887000E+1,0.98080000E+0 - ,0.24818500E+2,0.208E+3,0.105E+3,0.19887000E+1,0.97060000E+0 - ,0.19909000E+2,0.208E+3,0.106E+3,0.19887000E+1,0.98680000E+0 - ,0.14860000E+2,0.208E+3,0.107E+3,0.19887000E+1,0.99440000E+0 - ,0.11500900E+2,0.208E+3,0.108E+3,0.19887000E+1,0.99250000E+0 - ,0.85397000E+1,0.208E+3,0.109E+3,0.19887000E+1,0.99820000E+0 - ,0.33263600E+2,0.208E+3,0.111E+3,0.19887000E+1,0.96840000E+0 - ,0.50866900E+2,0.208E+3,0.112E+3,0.19887000E+1,0.96280000E+0 - ,0.53436500E+2,0.208E+3,0.113E+3,0.19887000E+1,0.96480000E+0 - ,0.45727300E+2,0.208E+3,0.114E+3,0.19887000E+1,0.95070000E+0 - ,0.39461700E+2,0.208E+3,0.115E+3,0.19887000E+1,0.99470000E+0 - ,0.34751000E+2,0.208E+3,0.116E+3,0.19887000E+1,0.99480000E+0 - ,0.29682200E+2,0.208E+3,0.117E+3,0.19887000E+1,0.99720000E+0 - ,0.48638000E+2,0.208E+3,0.119E+3,0.19887000E+1,0.97670000E+0 - ,0.83727900E+2,0.208E+3,0.120E+3,0.19887000E+1,0.98310000E+0 - ,0.50337300E+2,0.208E+3,0.121E+3,0.19887000E+1,0.18627000E+1 - ,0.48839600E+2,0.208E+3,0.122E+3,0.19887000E+1,0.18299000E+1 - ,0.47881500E+2,0.208E+3,0.123E+3,0.19887000E+1,0.19138000E+1 - ,0.47229700E+2,0.208E+3,0.124E+3,0.19887000E+1,0.18269000E+1 - ,0.44488800E+2,0.208E+3,0.125E+3,0.19887000E+1,0.16406000E+1 - ,0.41627000E+2,0.208E+3,0.126E+3,0.19887000E+1,0.16483000E+1 - ,0.39813100E+2,0.208E+3,0.127E+3,0.19887000E+1,0.17149000E+1 - ,0.38859700E+2,0.208E+3,0.128E+3,0.19887000E+1,0.17937000E+1 - ,0.37708300E+2,0.208E+3,0.129E+3,0.19887000E+1,0.95760000E+0 - ,0.36576400E+2,0.208E+3,0.130E+3,0.19887000E+1,0.19419000E+1 - ,0.54596400E+2,0.208E+3,0.131E+3,0.19887000E+1,0.96010000E+0 - ,0.50234300E+2,0.208E+3,0.132E+3,0.19887000E+1,0.94340000E+0 - ,0.46775300E+2,0.208E+3,0.133E+3,0.19887000E+1,0.98890000E+0 - ,0.43993100E+2,0.208E+3,0.134E+3,0.19887000E+1,0.99010000E+0 - ,0.40100200E+2,0.208E+3,0.135E+3,0.19887000E+1,0.99740000E+0 - ,0.58901500E+2,0.208E+3,0.137E+3,0.19887000E+1,0.97380000E+0 - ,0.10201160E+3,0.208E+3,0.138E+3,0.19887000E+1,0.98010000E+0 - ,0.83510800E+2,0.208E+3,0.139E+3,0.19887000E+1,0.19153000E+1 - ,0.66749800E+2,0.208E+3,0.140E+3,0.19887000E+1,0.19355000E+1 - ,0.67412800E+2,0.208E+3,0.141E+3,0.19887000E+1,0.19545000E+1 - ,0.63740200E+2,0.208E+3,0.142E+3,0.19887000E+1,0.19420000E+1 - ,0.69283800E+2,0.208E+3,0.143E+3,0.19887000E+1,0.16682000E+1 - ,0.57192800E+2,0.208E+3,0.144E+3,0.19887000E+1,0.18584000E+1 - ,0.53867000E+2,0.208E+3,0.145E+3,0.19887000E+1,0.19003000E+1 - ,0.50470900E+2,0.208E+3,0.146E+3,0.19887000E+1,0.18630000E+1 - ,0.48691200E+2,0.208E+3,0.147E+3,0.19887000E+1,0.96790000E+0 - ,0.48849700E+2,0.208E+3,0.148E+3,0.19887000E+1,0.19539000E+1 - ,0.70351100E+2,0.208E+3,0.149E+3,0.19887000E+1,0.96330000E+0 - ,0.65963500E+2,0.208E+3,0.150E+3,0.19887000E+1,0.95140000E+0 - ,0.63497200E+2,0.208E+3,0.151E+3,0.19887000E+1,0.97490000E+0 - ,0.61358500E+2,0.208E+3,0.152E+3,0.19887000E+1,0.98110000E+0 - ,0.57565500E+2,0.208E+3,0.153E+3,0.19887000E+1,0.99680000E+0 - ,0.71326900E+2,0.208E+3,0.155E+3,0.19887000E+1,0.99090000E+0 - ,0.13126330E+3,0.208E+3,0.156E+3,0.19887000E+1,0.97970000E+0 - ,0.10532360E+3,0.208E+3,0.157E+3,0.19887000E+1,0.19373000E+1 - ,0.73903200E+2,0.208E+3,0.159E+3,0.19887000E+1,0.29425000E+1 - ,0.72415600E+2,0.208E+3,0.160E+3,0.19887000E+1,0.29455000E+1 - ,0.70289800E+2,0.208E+3,0.161E+3,0.19887000E+1,0.29413000E+1 - ,0.70251100E+2,0.208E+3,0.162E+3,0.19887000E+1,0.29300000E+1 - ,0.66716600E+2,0.208E+3,0.163E+3,0.19887000E+1,0.18286000E+1 - ,0.70433100E+2,0.208E+3,0.164E+3,0.19887000E+1,0.28732000E+1 - ,0.66555900E+2,0.208E+3,0.165E+3,0.19887000E+1,0.29086000E+1 - ,0.67106000E+2,0.208E+3,0.166E+3,0.19887000E+1,0.28965000E+1 - ,0.63452700E+2,0.208E+3,0.167E+3,0.19887000E+1,0.29242000E+1 - ,0.61756800E+2,0.208E+3,0.168E+3,0.19887000E+1,0.29282000E+1 - ,0.61245400E+2,0.208E+3,0.169E+3,0.19887000E+1,0.29246000E+1 - ,0.63639600E+2,0.208E+3,0.170E+3,0.19887000E+1,0.28482000E+1 - ,0.59322400E+2,0.208E+3,0.171E+3,0.19887000E+1,0.29219000E+1 - ,0.75441200E+2,0.208E+3,0.172E+3,0.19887000E+1,0.19254000E+1 - ,0.71752400E+2,0.208E+3,0.173E+3,0.19887000E+1,0.19459000E+1 - ,0.67168700E+2,0.208E+3,0.174E+3,0.19887000E+1,0.19292000E+1 - ,0.66668200E+2,0.208E+3,0.175E+3,0.19887000E+1,0.18104000E+1 - ,0.61667600E+2,0.208E+3,0.176E+3,0.19887000E+1,0.18858000E+1 - ,0.58716200E+2,0.208E+3,0.177E+3,0.19887000E+1,0.18648000E+1 - ,0.56528500E+2,0.208E+3,0.178E+3,0.19887000E+1,0.19188000E+1 - ,0.54235200E+2,0.208E+3,0.179E+3,0.19887000E+1,0.98460000E+0 - ,0.53255600E+2,0.208E+3,0.180E+3,0.19887000E+1,0.19896000E+1 - ,0.76842400E+2,0.208E+3,0.181E+3,0.19887000E+1,0.92670000E+0 - ,0.72435300E+2,0.208E+3,0.182E+3,0.19887000E+1,0.93830000E+0 - ,0.71560300E+2,0.208E+3,0.183E+3,0.19887000E+1,0.98200000E+0 - ,0.70670800E+2,0.208E+3,0.184E+3,0.19887000E+1,0.98150000E+0 - ,0.67531900E+2,0.208E+3,0.185E+3,0.19887000E+1,0.99540000E+0 - ,0.80432600E+2,0.208E+3,0.187E+3,0.19887000E+1,0.97050000E+0 - ,0.13328520E+3,0.208E+3,0.188E+3,0.19887000E+1,0.96620000E+0 - ,0.87210800E+2,0.208E+3,0.189E+3,0.19887000E+1,0.29070000E+1 - ,0.97994500E+2,0.208E+3,0.190E+3,0.19887000E+1,0.28844000E+1 - ,0.89142100E+2,0.208E+3,0.191E+3,0.19887000E+1,0.28738000E+1 - ,0.80572400E+2,0.208E+3,0.192E+3,0.19887000E+1,0.28878000E+1 - ,0.78019000E+2,0.208E+3,0.193E+3,0.19887000E+1,0.29095000E+1 - ,0.88176800E+2,0.208E+3,0.194E+3,0.19887000E+1,0.19209000E+1 - ,0.21128200E+2,0.208E+3,0.204E+3,0.19887000E+1,0.19697000E+1 - ,0.21364800E+2,0.208E+3,0.205E+3,0.19887000E+1,0.19441000E+1 - ,0.16785500E+2,0.208E+3,0.206E+3,0.19887000E+1,0.19985000E+1 - ,0.14080700E+2,0.208E+3,0.207E+3,0.19887000E+1,0.20143000E+1 - ,0.10370800E+2,0.208E+3,0.208E+3,0.19887000E+1,0.19887000E+1 - ,0.21837000E+2,0.212E+3,0.100E+1,0.19496000E+1,0.91180000E+0 - ,0.13849600E+2,0.212E+3,0.200E+1,0.19496000E+1,0.00000000E+0 - ,0.37081900E+3,0.212E+3,0.300E+1,0.19496000E+1,0.00000000E+0 - ,0.20867690E+3,0.212E+3,0.400E+1,0.19496000E+1,0.00000000E+0 - ,0.13699320E+3,0.212E+3,0.500E+1,0.19496000E+1,0.00000000E+0 - ,0.90330500E+2,0.212E+3,0.600E+1,0.19496000E+1,0.00000000E+0 - ,0.61837200E+2,0.212E+3,0.700E+1,0.19496000E+1,0.00000000E+0 - ,0.46034700E+2,0.212E+3,0.800E+1,0.19496000E+1,0.00000000E+0 - ,0.34331400E+2,0.212E+3,0.900E+1,0.19496000E+1,0.00000000E+0 - ,0.26053300E+2,0.212E+3,0.100E+2,0.19496000E+1,0.00000000E+0 - ,0.44240190E+3,0.212E+3,0.110E+2,0.19496000E+1,0.00000000E+0 - ,0.33424930E+3,0.212E+3,0.120E+2,0.19496000E+1,0.00000000E+0 - ,0.30473370E+3,0.212E+3,0.130E+2,0.19496000E+1,0.00000000E+0 - ,0.23613880E+3,0.212E+3,0.140E+2,0.19496000E+1,0.00000000E+0 - ,0.18098430E+3,0.212E+3,0.150E+2,0.19496000E+1,0.00000000E+0 - ,0.14821300E+3,0.212E+3,0.160E+2,0.19496000E+1,0.00000000E+0 - ,0.11939110E+3,0.212E+3,0.170E+2,0.19496000E+1,0.00000000E+0 - ,0.96381300E+2,0.212E+3,0.180E+2,0.19496000E+1,0.00000000E+0 - ,0.72363460E+3,0.212E+3,0.190E+2,0.19496000E+1,0.00000000E+0 - ,0.59087370E+3,0.212E+3,0.200E+2,0.19496000E+1,0.00000000E+0 - ,0.48646530E+3,0.212E+3,0.210E+2,0.19496000E+1,0.00000000E+0 - ,0.46745060E+3,0.212E+3,0.220E+2,0.19496000E+1,0.00000000E+0 - ,0.42688150E+3,0.212E+3,0.230E+2,0.19496000E+1,0.00000000E+0 - ,0.33501180E+3,0.212E+3,0.240E+2,0.19496000E+1,0.00000000E+0 - ,0.36600240E+3,0.212E+3,0.250E+2,0.19496000E+1,0.00000000E+0 - ,0.28599690E+3,0.212E+3,0.260E+2,0.19496000E+1,0.00000000E+0 - ,0.30245180E+3,0.212E+3,0.270E+2,0.19496000E+1,0.00000000E+0 - ,0.31258620E+3,0.212E+3,0.280E+2,0.19496000E+1,0.00000000E+0 - ,0.23853700E+3,0.212E+3,0.290E+2,0.19496000E+1,0.00000000E+0 - ,0.24356630E+3,0.212E+3,0.300E+2,0.19496000E+1,0.00000000E+0 - ,0.28974250E+3,0.212E+3,0.310E+2,0.19496000E+1,0.00000000E+0 - ,0.25239640E+3,0.212E+3,0.320E+2,0.19496000E+1,0.00000000E+0 - ,0.21233920E+3,0.212E+3,0.330E+2,0.19496000E+1,0.00000000E+0 - ,0.18862140E+3,0.212E+3,0.340E+2,0.19496000E+1,0.00000000E+0 - ,0.16322210E+3,0.212E+3,0.350E+2,0.19496000E+1,0.00000000E+0 - ,0.14036050E+3,0.212E+3,0.360E+2,0.19496000E+1,0.00000000E+0 - ,0.80885370E+3,0.212E+3,0.370E+2,0.19496000E+1,0.00000000E+0 - ,0.70339060E+3,0.212E+3,0.380E+2,0.19496000E+1,0.00000000E+0 - ,0.61169610E+3,0.212E+3,0.390E+2,0.19496000E+1,0.00000000E+0 - ,0.54679350E+3,0.212E+3,0.400E+2,0.19496000E+1,0.00000000E+0 - ,0.49648070E+3,0.212E+3,0.410E+2,0.19496000E+1,0.00000000E+0 - ,0.37976260E+3,0.212E+3,0.420E+2,0.19496000E+1,0.00000000E+0 - ,0.42526560E+3,0.212E+3,0.430E+2,0.19496000E+1,0.00000000E+0 - ,0.32066780E+3,0.212E+3,0.440E+2,0.19496000E+1,0.00000000E+0 - ,0.35143020E+3,0.212E+3,0.450E+2,0.19496000E+1,0.00000000E+0 - ,0.32495510E+3,0.212E+3,0.460E+2,0.19496000E+1,0.00000000E+0 - ,0.27016330E+3,0.212E+3,0.470E+2,0.19496000E+1,0.00000000E+0 - ,0.28521610E+3,0.212E+3,0.480E+2,0.19496000E+1,0.00000000E+0 - ,0.36138350E+3,0.212E+3,0.490E+2,0.19496000E+1,0.00000000E+0 - ,0.33128280E+3,0.212E+3,0.500E+2,0.19496000E+1,0.00000000E+0 - ,0.29202460E+3,0.212E+3,0.510E+2,0.19496000E+1,0.00000000E+0 - ,0.26885950E+3,0.212E+3,0.520E+2,0.19496000E+1,0.00000000E+0 - ,0.24089430E+3,0.212E+3,0.530E+2,0.19496000E+1,0.00000000E+0 - ,0.21454790E+3,0.212E+3,0.540E+2,0.19496000E+1,0.00000000E+0 - ,0.98395840E+3,0.212E+3,0.550E+2,0.19496000E+1,0.00000000E+0 - ,0.89740290E+3,0.212E+3,0.560E+2,0.19496000E+1,0.00000000E+0 - ,0.78313020E+3,0.212E+3,0.570E+2,0.19496000E+1,0.00000000E+0 - ,0.34513820E+3,0.212E+3,0.580E+2,0.19496000E+1,0.27991000E+1 - ,0.79290630E+3,0.212E+3,0.590E+2,0.19496000E+1,0.00000000E+0 - ,0.76073520E+3,0.212E+3,0.600E+2,0.19496000E+1,0.00000000E+0 - ,0.74148810E+3,0.212E+3,0.610E+2,0.19496000E+1,0.00000000E+0 - ,0.72382090E+3,0.212E+3,0.620E+2,0.19496000E+1,0.00000000E+0 - ,0.70814950E+3,0.212E+3,0.630E+2,0.19496000E+1,0.00000000E+0 - ,0.55111930E+3,0.212E+3,0.640E+2,0.19496000E+1,0.00000000E+0 - ,0.62646370E+3,0.212E+3,0.650E+2,0.19496000E+1,0.00000000E+0 - ,0.60329280E+3,0.212E+3,0.660E+2,0.19496000E+1,0.00000000E+0 - ,0.63781980E+3,0.212E+3,0.670E+2,0.19496000E+1,0.00000000E+0 - ,0.62424880E+3,0.212E+3,0.680E+2,0.19496000E+1,0.00000000E+0 - ,0.61193920E+3,0.212E+3,0.690E+2,0.19496000E+1,0.00000000E+0 - ,0.60508430E+3,0.212E+3,0.700E+2,0.19496000E+1,0.00000000E+0 - ,0.50623650E+3,0.212E+3,0.710E+2,0.19496000E+1,0.00000000E+0 - ,0.49422900E+3,0.212E+3,0.720E+2,0.19496000E+1,0.00000000E+0 - ,0.44819920E+3,0.212E+3,0.730E+2,0.19496000E+1,0.00000000E+0 - ,0.37559750E+3,0.212E+3,0.740E+2,0.19496000E+1,0.00000000E+0 - ,0.38147930E+3,0.212E+3,0.750E+2,0.19496000E+1,0.00000000E+0 - ,0.34361070E+3,0.212E+3,0.760E+2,0.19496000E+1,0.00000000E+0 - ,0.31299940E+3,0.212E+3,0.770E+2,0.19496000E+1,0.00000000E+0 - ,0.25789210E+3,0.212E+3,0.780E+2,0.19496000E+1,0.00000000E+0 - ,0.24017810E+3,0.212E+3,0.790E+2,0.19496000E+1,0.00000000E+0 - ,0.24690090E+3,0.212E+3,0.800E+2,0.19496000E+1,0.00000000E+0 - ,0.36875940E+3,0.212E+3,0.810E+2,0.19496000E+1,0.00000000E+0 - ,0.35855060E+3,0.212E+3,0.820E+2,0.19496000E+1,0.00000000E+0 - ,0.32650440E+3,0.212E+3,0.830E+2,0.19496000E+1,0.00000000E+0 - ,0.30951770E+3,0.212E+3,0.840E+2,0.19496000E+1,0.00000000E+0 - ,0.28334810E+3,0.212E+3,0.850E+2,0.19496000E+1,0.00000000E+0 - ,0.25758240E+3,0.212E+3,0.860E+2,0.19496000E+1,0.00000000E+0 - ,0.92425730E+3,0.212E+3,0.870E+2,0.19496000E+1,0.00000000E+0 - ,0.88381110E+3,0.212E+3,0.880E+2,0.19496000E+1,0.00000000E+0 - ,0.77640740E+3,0.212E+3,0.890E+2,0.19496000E+1,0.00000000E+0 - ,0.69112710E+3,0.212E+3,0.900E+2,0.19496000E+1,0.00000000E+0 - ,0.68830150E+3,0.212E+3,0.910E+2,0.19496000E+1,0.00000000E+0 - ,0.66622690E+3,0.212E+3,0.920E+2,0.19496000E+1,0.00000000E+0 - ,0.68965180E+3,0.212E+3,0.930E+2,0.19496000E+1,0.00000000E+0 - ,0.66729490E+3,0.212E+3,0.940E+2,0.19496000E+1,0.00000000E+0 - ,0.35919000E+2,0.212E+3,0.101E+3,0.19496000E+1,0.00000000E+0 - ,0.12078080E+3,0.212E+3,0.103E+3,0.19496000E+1,0.98650000E+0 - ,0.15315750E+3,0.212E+3,0.104E+3,0.19496000E+1,0.98080000E+0 - ,0.11441900E+3,0.212E+3,0.105E+3,0.19496000E+1,0.97060000E+0 - ,0.84617800E+2,0.212E+3,0.106E+3,0.19496000E+1,0.98680000E+0 - ,0.57539800E+2,0.212E+3,0.107E+3,0.19496000E+1,0.99440000E+0 - ,0.41060500E+2,0.212E+3,0.108E+3,0.19496000E+1,0.99250000E+0 - ,0.27484100E+2,0.212E+3,0.109E+3,0.19496000E+1,0.99820000E+0 - ,0.17686830E+3,0.212E+3,0.111E+3,0.19496000E+1,0.96840000E+0 - ,0.27415900E+3,0.212E+3,0.112E+3,0.19496000E+1,0.96280000E+0 - ,0.27526090E+3,0.212E+3,0.113E+3,0.19496000E+1,0.96480000E+0 - ,0.21754710E+3,0.212E+3,0.114E+3,0.19496000E+1,0.95070000E+0 - ,0.17550060E+3,0.212E+3,0.115E+3,0.19496000E+1,0.99470000E+0 - ,0.14658490E+3,0.212E+3,0.116E+3,0.19496000E+1,0.99480000E+0 - ,0.11815670E+3,0.212E+3,0.117E+3,0.19496000E+1,0.99720000E+0 - ,0.24017250E+3,0.212E+3,0.119E+3,0.19496000E+1,0.97670000E+0 - ,0.47030590E+3,0.212E+3,0.120E+3,0.19496000E+1,0.98310000E+0 - ,0.23815400E+3,0.212E+3,0.121E+3,0.19496000E+1,0.18627000E+1 - ,0.22957540E+3,0.212E+3,0.122E+3,0.19496000E+1,0.18299000E+1 - ,0.22498220E+3,0.212E+3,0.123E+3,0.19496000E+1,0.19138000E+1 - ,0.22318550E+3,0.212E+3,0.124E+3,0.19496000E+1,0.18269000E+1 - ,0.20404460E+3,0.212E+3,0.125E+3,0.19496000E+1,0.16406000E+1 - ,0.18825250E+3,0.212E+3,0.126E+3,0.19496000E+1,0.16483000E+1 - ,0.17945530E+3,0.212E+3,0.127E+3,0.19496000E+1,0.17149000E+1 - ,0.17553430E+3,0.212E+3,0.128E+3,0.19496000E+1,0.17937000E+1 - ,0.17436190E+3,0.212E+3,0.129E+3,0.19496000E+1,0.95760000E+0 - ,0.16200320E+3,0.212E+3,0.130E+3,0.19496000E+1,0.19419000E+1 - ,0.27124200E+3,0.212E+3,0.131E+3,0.19496000E+1,0.96010000E+0 - ,0.23526700E+3,0.212E+3,0.132E+3,0.19496000E+1,0.94340000E+0 - ,0.20852360E+3,0.212E+3,0.133E+3,0.19496000E+1,0.98890000E+0 - ,0.18870250E+3,0.212E+3,0.134E+3,0.19496000E+1,0.99010000E+0 - ,0.16443830E+3,0.212E+3,0.135E+3,0.19496000E+1,0.99740000E+0 - ,0.28542190E+3,0.212E+3,0.137E+3,0.19496000E+1,0.97380000E+0 - ,0.57194480E+3,0.212E+3,0.138E+3,0.19496000E+1,0.98010000E+0 - ,0.43039400E+3,0.212E+3,0.139E+3,0.19496000E+1,0.19153000E+1 - ,0.31464020E+3,0.212E+3,0.140E+3,0.19496000E+1,0.19355000E+1 - ,0.31779230E+3,0.212E+3,0.141E+3,0.19496000E+1,0.19545000E+1 - ,0.29518160E+3,0.212E+3,0.142E+3,0.19496000E+1,0.19420000E+1 - ,0.33381660E+3,0.212E+3,0.143E+3,0.19496000E+1,0.16682000E+1 - ,0.25522890E+3,0.212E+3,0.144E+3,0.19496000E+1,0.18584000E+1 - ,0.23831870E+3,0.212E+3,0.145E+3,0.19496000E+1,0.19003000E+1 - ,0.22073750E+3,0.212E+3,0.146E+3,0.19496000E+1,0.18630000E+1 - ,0.21374770E+3,0.212E+3,0.147E+3,0.19496000E+1,0.96790000E+0 - ,0.21054980E+3,0.212E+3,0.148E+3,0.19496000E+1,0.19539000E+1 - ,0.34330980E+3,0.212E+3,0.149E+3,0.19496000E+1,0.96330000E+0 - ,0.30754750E+3,0.212E+3,0.150E+3,0.19496000E+1,0.95140000E+0 - ,0.28572510E+3,0.212E+3,0.151E+3,0.19496000E+1,0.97490000E+0 - ,0.26854180E+3,0.212E+3,0.152E+3,0.19496000E+1,0.98110000E+0 - ,0.24320970E+3,0.212E+3,0.153E+3,0.19496000E+1,0.99680000E+0 - ,0.33524300E+3,0.212E+3,0.155E+3,0.19496000E+1,0.99090000E+0 - ,0.74236730E+3,0.212E+3,0.156E+3,0.19496000E+1,0.97970000E+0 - ,0.54507520E+3,0.212E+3,0.157E+3,0.19496000E+1,0.19373000E+1 - ,0.33446520E+3,0.212E+3,0.159E+3,0.19496000E+1,0.29425000E+1 - ,0.32749910E+3,0.212E+3,0.160E+3,0.19496000E+1,0.29455000E+1 - ,0.31689690E+3,0.212E+3,0.161E+3,0.19496000E+1,0.29413000E+1 - ,0.31894850E+3,0.212E+3,0.162E+3,0.19496000E+1,0.29300000E+1 - ,0.30882190E+3,0.212E+3,0.163E+3,0.19496000E+1,0.18286000E+1 - ,0.32130770E+3,0.212E+3,0.164E+3,0.19496000E+1,0.28732000E+1 - ,0.30127990E+3,0.212E+3,0.165E+3,0.19496000E+1,0.29086000E+1 - ,0.30734770E+3,0.212E+3,0.166E+3,0.19496000E+1,0.28965000E+1 - ,0.28559620E+3,0.212E+3,0.167E+3,0.19496000E+1,0.29242000E+1 - ,0.27731030E+3,0.212E+3,0.168E+3,0.19496000E+1,0.29282000E+1 - ,0.27568110E+3,0.212E+3,0.169E+3,0.19496000E+1,0.29246000E+1 - ,0.29074100E+3,0.212E+3,0.170E+3,0.19496000E+1,0.28482000E+1 - ,0.26629260E+3,0.212E+3,0.171E+3,0.19496000E+1,0.29219000E+1 - ,0.36710790E+3,0.212E+3,0.172E+3,0.19496000E+1,0.19254000E+1 - ,0.33846150E+3,0.212E+3,0.173E+3,0.19496000E+1,0.19459000E+1 - ,0.30662140E+3,0.212E+3,0.174E+3,0.19496000E+1,0.19292000E+1 - ,0.31198680E+3,0.212E+3,0.175E+3,0.19496000E+1,0.18104000E+1 - ,0.26878310E+3,0.212E+3,0.176E+3,0.19496000E+1,0.18858000E+1 - ,0.25196650E+3,0.212E+3,0.177E+3,0.19496000E+1,0.18648000E+1 - ,0.24010400E+3,0.212E+3,0.178E+3,0.19496000E+1,0.19188000E+1 - ,0.22934010E+3,0.212E+3,0.179E+3,0.19496000E+1,0.98460000E+0 - ,0.22047400E+3,0.212E+3,0.180E+3,0.19496000E+1,0.19896000E+1 - ,0.36691360E+3,0.212E+3,0.181E+3,0.19496000E+1,0.92670000E+0 - ,0.33131350E+3,0.212E+3,0.182E+3,0.19496000E+1,0.93830000E+0 - ,0.31955040E+3,0.212E+3,0.183E+3,0.19496000E+1,0.98200000E+0 - ,0.30934230E+3,0.212E+3,0.184E+3,0.19496000E+1,0.98150000E+0 - ,0.28680210E+3,0.212E+3,0.185E+3,0.19496000E+1,0.99540000E+0 - ,0.37742160E+3,0.212E+3,0.187E+3,0.19496000E+1,0.97050000E+0 - ,0.73519780E+3,0.212E+3,0.188E+3,0.19496000E+1,0.96620000E+0 - ,0.39606860E+3,0.212E+3,0.189E+3,0.19496000E+1,0.29070000E+1 - ,0.46056730E+3,0.212E+3,0.190E+3,0.19496000E+1,0.28844000E+1 - ,0.40974230E+3,0.212E+3,0.191E+3,0.19496000E+1,0.28738000E+1 - ,0.35990110E+3,0.212E+3,0.192E+3,0.19496000E+1,0.28878000E+1 - ,0.34571200E+3,0.212E+3,0.193E+3,0.19496000E+1,0.29095000E+1 - ,0.42322520E+3,0.212E+3,0.194E+3,0.19496000E+1,0.19209000E+1 - ,0.97810100E+2,0.212E+3,0.204E+3,0.19496000E+1,0.19697000E+1 - ,0.95357500E+2,0.212E+3,0.205E+3,0.19496000E+1,0.19441000E+1 - ,0.68298400E+2,0.212E+3,0.206E+3,0.19496000E+1,0.19985000E+1 - ,0.53880300E+2,0.212E+3,0.207E+3,0.19496000E+1,0.20143000E+1 - ,0.35966500E+2,0.212E+3,0.208E+3,0.19496000E+1,0.19887000E+1 - ,0.17556160E+3,0.212E+3,0.212E+3,0.19496000E+1,0.19496000E+1 - ,0.26352400E+2,0.213E+3,0.100E+1,0.19311000E+1,0.91180000E+0 - ,0.16703100E+2,0.213E+3,0.200E+1,0.19311000E+1,0.00000000E+0 - ,0.45636130E+3,0.213E+3,0.300E+1,0.19311000E+1,0.00000000E+0 - ,0.25306490E+3,0.213E+3,0.400E+1,0.19311000E+1,0.00000000E+0 - ,0.16559380E+3,0.213E+3,0.500E+1,0.19311000E+1,0.00000000E+0 - ,0.10905410E+3,0.213E+3,0.600E+1,0.19311000E+1,0.00000000E+0 - ,0.74611700E+2,0.213E+3,0.700E+1,0.19311000E+1,0.00000000E+0 - ,0.55525000E+2,0.213E+3,0.800E+1,0.19311000E+1,0.00000000E+0 - ,0.41391400E+2,0.213E+3,0.900E+1,0.19311000E+1,0.00000000E+0 - ,0.31394400E+2,0.213E+3,0.100E+2,0.19311000E+1,0.00000000E+0 - ,0.54393780E+3,0.213E+3,0.110E+2,0.19311000E+1,0.00000000E+0 - ,0.40606870E+3,0.213E+3,0.120E+2,0.19311000E+1,0.00000000E+0 - ,0.36938290E+3,0.213E+3,0.130E+2,0.19311000E+1,0.00000000E+0 - ,0.28548250E+3,0.213E+3,0.140E+2,0.19311000E+1,0.00000000E+0 - ,0.21853020E+3,0.213E+3,0.150E+2,0.19311000E+1,0.00000000E+0 - ,0.17889260E+3,0.213E+3,0.160E+2,0.19311000E+1,0.00000000E+0 - ,0.14406690E+3,0.213E+3,0.170E+2,0.19311000E+1,0.00000000E+0 - ,0.11628170E+3,0.213E+3,0.180E+2,0.19311000E+1,0.00000000E+0 - ,0.89462280E+3,0.213E+3,0.190E+2,0.19311000E+1,0.00000000E+0 - ,0.72140890E+3,0.213E+3,0.200E+2,0.19311000E+1,0.00000000E+0 - ,0.59270500E+3,0.213E+3,0.210E+2,0.19311000E+1,0.00000000E+0 - ,0.56890770E+3,0.213E+3,0.220E+2,0.19311000E+1,0.00000000E+0 - ,0.51913280E+3,0.213E+3,0.230E+2,0.19311000E+1,0.00000000E+0 - ,0.40772880E+3,0.213E+3,0.240E+2,0.19311000E+1,0.00000000E+0 - ,0.44462830E+3,0.213E+3,0.250E+2,0.19311000E+1,0.00000000E+0 - ,0.34763940E+3,0.213E+3,0.260E+2,0.19311000E+1,0.00000000E+0 - ,0.36672360E+3,0.213E+3,0.270E+2,0.19311000E+1,0.00000000E+0 - ,0.37922800E+3,0.213E+3,0.280E+2,0.19311000E+1,0.00000000E+0 - ,0.28968240E+3,0.213E+3,0.290E+2,0.19311000E+1,0.00000000E+0 - ,0.29490170E+3,0.213E+3,0.300E+2,0.19311000E+1,0.00000000E+0 - ,0.35111920E+3,0.213E+3,0.310E+2,0.19311000E+1,0.00000000E+0 - ,0.30516430E+3,0.213E+3,0.320E+2,0.19311000E+1,0.00000000E+0 - ,0.25642310E+3,0.213E+3,0.330E+2,0.19311000E+1,0.00000000E+0 - ,0.22769360E+3,0.213E+3,0.340E+2,0.19311000E+1,0.00000000E+0 - ,0.19697430E+3,0.213E+3,0.350E+2,0.19311000E+1,0.00000000E+0 - ,0.16935470E+3,0.213E+3,0.360E+2,0.19311000E+1,0.00000000E+0 - ,0.99974000E+3,0.213E+3,0.370E+2,0.19311000E+1,0.00000000E+0 - ,0.85956780E+3,0.213E+3,0.380E+2,0.19311000E+1,0.00000000E+0 - ,0.74518010E+3,0.213E+3,0.390E+2,0.19311000E+1,0.00000000E+0 - ,0.66503860E+3,0.213E+3,0.400E+2,0.19311000E+1,0.00000000E+0 - ,0.60335750E+3,0.213E+3,0.410E+2,0.19311000E+1,0.00000000E+0 - ,0.46105860E+3,0.213E+3,0.420E+2,0.19311000E+1,0.00000000E+0 - ,0.51647660E+3,0.213E+3,0.430E+2,0.19311000E+1,0.00000000E+0 - ,0.38899560E+3,0.213E+3,0.440E+2,0.19311000E+1,0.00000000E+0 - ,0.42598370E+3,0.213E+3,0.450E+2,0.19311000E+1,0.00000000E+0 - ,0.39367760E+3,0.213E+3,0.460E+2,0.19311000E+1,0.00000000E+0 - ,0.32774720E+3,0.213E+3,0.470E+2,0.19311000E+1,0.00000000E+0 - ,0.34529970E+3,0.213E+3,0.480E+2,0.19311000E+1,0.00000000E+0 - ,0.43824740E+3,0.213E+3,0.490E+2,0.19311000E+1,0.00000000E+0 - ,0.40078940E+3,0.213E+3,0.500E+2,0.19311000E+1,0.00000000E+0 - ,0.35278490E+3,0.213E+3,0.510E+2,0.19311000E+1,0.00000000E+0 - ,0.32462780E+3,0.213E+3,0.520E+2,0.19311000E+1,0.00000000E+0 - ,0.29073780E+3,0.213E+3,0.530E+2,0.19311000E+1,0.00000000E+0 - ,0.25886870E+3,0.213E+3,0.540E+2,0.19311000E+1,0.00000000E+0 - ,0.12173141E+4,0.213E+3,0.550E+2,0.19311000E+1,0.00000000E+0 - ,0.10987485E+4,0.213E+3,0.560E+2,0.19311000E+1,0.00000000E+0 - ,0.95554880E+3,0.213E+3,0.570E+2,0.19311000E+1,0.00000000E+0 - ,0.41722080E+3,0.213E+3,0.580E+2,0.19311000E+1,0.27991000E+1 - ,0.96973660E+3,0.213E+3,0.590E+2,0.19311000E+1,0.00000000E+0 - ,0.92960420E+3,0.213E+3,0.600E+2,0.19311000E+1,0.00000000E+0 - ,0.90588600E+3,0.213E+3,0.610E+2,0.19311000E+1,0.00000000E+0 - ,0.88413220E+3,0.213E+3,0.620E+2,0.19311000E+1,0.00000000E+0 - ,0.86483220E+3,0.213E+3,0.630E+2,0.19311000E+1,0.00000000E+0 - ,0.67129000E+3,0.213E+3,0.640E+2,0.19311000E+1,0.00000000E+0 - ,0.76813130E+3,0.213E+3,0.650E+2,0.19311000E+1,0.00000000E+0 - ,0.73945380E+3,0.213E+3,0.660E+2,0.19311000E+1,0.00000000E+0 - ,0.77813230E+3,0.213E+3,0.670E+2,0.19311000E+1,0.00000000E+0 - ,0.76146230E+3,0.213E+3,0.680E+2,0.19311000E+1,0.00000000E+0 - ,0.74632100E+3,0.213E+3,0.690E+2,0.19311000E+1,0.00000000E+0 - ,0.73802330E+3,0.213E+3,0.700E+2,0.19311000E+1,0.00000000E+0 - ,0.61647150E+3,0.213E+3,0.710E+2,0.19311000E+1,0.00000000E+0 - ,0.60003080E+3,0.213E+3,0.720E+2,0.19311000E+1,0.00000000E+0 - ,0.54344620E+3,0.213E+3,0.730E+2,0.19311000E+1,0.00000000E+0 - ,0.45533130E+3,0.213E+3,0.740E+2,0.19311000E+1,0.00000000E+0 - ,0.46211940E+3,0.213E+3,0.750E+2,0.19311000E+1,0.00000000E+0 - ,0.41585260E+3,0.213E+3,0.760E+2,0.19311000E+1,0.00000000E+0 - ,0.37855240E+3,0.213E+3,0.770E+2,0.19311000E+1,0.00000000E+0 - ,0.31184500E+3,0.213E+3,0.780E+2,0.19311000E+1,0.00000000E+0 - ,0.29037770E+3,0.213E+3,0.790E+2,0.19311000E+1,0.00000000E+0 - ,0.29830060E+3,0.213E+3,0.800E+2,0.19311000E+1,0.00000000E+0 - ,0.44739490E+3,0.213E+3,0.810E+2,0.19311000E+1,0.00000000E+0 - ,0.43398370E+3,0.213E+3,0.820E+2,0.19311000E+1,0.00000000E+0 - ,0.39457020E+3,0.213E+3,0.830E+2,0.19311000E+1,0.00000000E+0 - ,0.37381510E+3,0.213E+3,0.840E+2,0.19311000E+1,0.00000000E+0 - ,0.34202110E+3,0.213E+3,0.850E+2,0.19311000E+1,0.00000000E+0 - ,0.31081620E+3,0.213E+3,0.860E+2,0.19311000E+1,0.00000000E+0 - ,0.11397020E+4,0.213E+3,0.870E+2,0.19311000E+1,0.00000000E+0 - ,0.10803973E+4,0.213E+3,0.880E+2,0.19311000E+1,0.00000000E+0 - ,0.94598830E+3,0.213E+3,0.890E+2,0.19311000E+1,0.00000000E+0 - ,0.83976740E+3,0.213E+3,0.900E+2,0.19311000E+1,0.00000000E+0 - ,0.83781840E+3,0.213E+3,0.910E+2,0.19311000E+1,0.00000000E+0 - ,0.81085380E+3,0.213E+3,0.920E+2,0.19311000E+1,0.00000000E+0 - ,0.84069890E+3,0.213E+3,0.930E+2,0.19311000E+1,0.00000000E+0 - ,0.81310950E+3,0.213E+3,0.940E+2,0.19311000E+1,0.00000000E+0 - ,0.43366100E+2,0.213E+3,0.101E+3,0.19311000E+1,0.00000000E+0 - ,0.14644260E+3,0.213E+3,0.103E+3,0.19311000E+1,0.98650000E+0 - ,0.18573100E+3,0.213E+3,0.104E+3,0.19311000E+1,0.98080000E+0 - ,0.13828380E+3,0.213E+3,0.105E+3,0.19311000E+1,0.97060000E+0 - ,0.10220950E+3,0.213E+3,0.106E+3,0.19311000E+1,0.98680000E+0 - ,0.69450100E+2,0.213E+3,0.107E+3,0.19311000E+1,0.99440000E+0 - ,0.49531900E+2,0.213E+3,0.108E+3,0.19311000E+1,0.99250000E+0 - ,0.33126500E+2,0.213E+3,0.109E+3,0.19311000E+1,0.99820000E+0 - ,0.21467960E+3,0.213E+3,0.111E+3,0.19311000E+1,0.96840000E+0 - ,0.33305050E+3,0.213E+3,0.112E+3,0.19311000E+1,0.96280000E+0 - ,0.33353410E+3,0.213E+3,0.113E+3,0.19311000E+1,0.96480000E+0 - ,0.26297700E+3,0.213E+3,0.114E+3,0.19311000E+1,0.95070000E+0 - ,0.21192050E+3,0.213E+3,0.115E+3,0.19311000E+1,0.99470000E+0 - ,0.17693650E+3,0.213E+3,0.116E+3,0.19311000E+1,0.99480000E+0 - ,0.14258060E+3,0.213E+3,0.117E+3,0.19311000E+1,0.99720000E+0 - ,0.29160280E+3,0.213E+3,0.119E+3,0.19311000E+1,0.97670000E+0 - ,0.57547210E+3,0.213E+3,0.120E+3,0.19311000E+1,0.98310000E+0 - ,0.28808340E+3,0.213E+3,0.121E+3,0.19311000E+1,0.18627000E+1 - ,0.27780740E+3,0.213E+3,0.122E+3,0.19311000E+1,0.18299000E+1 - ,0.27224960E+3,0.213E+3,0.123E+3,0.19311000E+1,0.19138000E+1 - ,0.27016230E+3,0.213E+3,0.124E+3,0.19311000E+1,0.18269000E+1 - ,0.24655880E+3,0.213E+3,0.125E+3,0.19311000E+1,0.16406000E+1 - ,0.22743270E+3,0.213E+3,0.126E+3,0.19311000E+1,0.16483000E+1 - ,0.21683930E+3,0.213E+3,0.127E+3,0.19311000E+1,0.17149000E+1 - ,0.21211940E+3,0.213E+3,0.128E+3,0.19311000E+1,0.17937000E+1 - ,0.21090190E+3,0.213E+3,0.129E+3,0.19311000E+1,0.95760000E+0 - ,0.19559730E+3,0.213E+3,0.130E+3,0.19311000E+1,0.19419000E+1 - ,0.32851000E+3,0.213E+3,0.131E+3,0.19311000E+1,0.96010000E+0 - ,0.28437390E+3,0.213E+3,0.132E+3,0.19311000E+1,0.94340000E+0 - ,0.25181270E+3,0.213E+3,0.133E+3,0.19311000E+1,0.98890000E+0 - ,0.22779820E+3,0.213E+3,0.134E+3,0.19311000E+1,0.99010000E+0 - ,0.19844730E+3,0.213E+3,0.135E+3,0.19311000E+1,0.99740000E+0 - ,0.34649590E+3,0.213E+3,0.137E+3,0.19311000E+1,0.97380000E+0 - ,0.70067460E+3,0.213E+3,0.138E+3,0.19311000E+1,0.98010000E+0 - ,0.52422670E+3,0.213E+3,0.139E+3,0.19311000E+1,0.19153000E+1 - ,0.38103090E+3,0.213E+3,0.140E+3,0.19311000E+1,0.19355000E+1 - ,0.38476780E+3,0.213E+3,0.141E+3,0.19311000E+1,0.19545000E+1 - ,0.35735760E+3,0.213E+3,0.142E+3,0.19311000E+1,0.19420000E+1 - ,0.40520110E+3,0.213E+3,0.143E+3,0.19311000E+1,0.16682000E+1 - ,0.30854590E+3,0.213E+3,0.144E+3,0.19311000E+1,0.18584000E+1 - ,0.28812910E+3,0.213E+3,0.145E+3,0.19311000E+1,0.19003000E+1 - ,0.26684840E+3,0.213E+3,0.146E+3,0.19311000E+1,0.18630000E+1 - ,0.25840650E+3,0.213E+3,0.147E+3,0.19311000E+1,0.96790000E+0 - ,0.25422360E+3,0.213E+3,0.148E+3,0.19311000E+1,0.19539000E+1 - ,0.41600330E+3,0.213E+3,0.149E+3,0.19311000E+1,0.96330000E+0 - ,0.37187790E+3,0.213E+3,0.150E+3,0.19311000E+1,0.95140000E+0 - ,0.34513030E+3,0.213E+3,0.151E+3,0.19311000E+1,0.97490000E+0 - ,0.32423490E+3,0.213E+3,0.152E+3,0.19311000E+1,0.98110000E+0 - ,0.29353370E+3,0.213E+3,0.153E+3,0.19311000E+1,0.99680000E+0 - ,0.40637240E+3,0.213E+3,0.155E+3,0.19311000E+1,0.99090000E+0 - ,0.91183210E+3,0.213E+3,0.156E+3,0.19311000E+1,0.97970000E+0 - ,0.66459040E+3,0.213E+3,0.157E+3,0.19311000E+1,0.19373000E+1 - ,0.40429100E+3,0.213E+3,0.159E+3,0.19311000E+1,0.29425000E+1 - ,0.39585770E+3,0.213E+3,0.160E+3,0.19311000E+1,0.29455000E+1 - ,0.38302380E+3,0.213E+3,0.161E+3,0.19311000E+1,0.29413000E+1 - ,0.38563610E+3,0.213E+3,0.162E+3,0.19311000E+1,0.29300000E+1 - ,0.37369250E+3,0.213E+3,0.163E+3,0.19311000E+1,0.18286000E+1 - ,0.38845580E+3,0.213E+3,0.164E+3,0.19311000E+1,0.28732000E+1 - ,0.36415710E+3,0.213E+3,0.165E+3,0.19311000E+1,0.29086000E+1 - ,0.37174820E+3,0.213E+3,0.166E+3,0.19311000E+1,0.28965000E+1 - ,0.34511820E+3,0.213E+3,0.167E+3,0.19311000E+1,0.29242000E+1 - ,0.33507830E+3,0.213E+3,0.168E+3,0.19311000E+1,0.29282000E+1 - ,0.33312390E+3,0.213E+3,0.169E+3,0.19311000E+1,0.29246000E+1 - ,0.35137350E+3,0.213E+3,0.170E+3,0.19311000E+1,0.28482000E+1 - ,0.32173170E+3,0.213E+3,0.171E+3,0.19311000E+1,0.29219000E+1 - ,0.44538150E+3,0.213E+3,0.172E+3,0.19311000E+1,0.19254000E+1 - ,0.41012060E+3,0.213E+3,0.173E+3,0.19311000E+1,0.19459000E+1 - ,0.37108910E+3,0.213E+3,0.174E+3,0.19311000E+1,0.19292000E+1 - ,0.37797370E+3,0.213E+3,0.175E+3,0.19311000E+1,0.18104000E+1 - ,0.32478730E+3,0.213E+3,0.176E+3,0.19311000E+1,0.18858000E+1 - ,0.30440310E+3,0.213E+3,0.177E+3,0.19311000E+1,0.18648000E+1 - ,0.29003910E+3,0.213E+3,0.178E+3,0.19311000E+1,0.19188000E+1 - ,0.27707890E+3,0.213E+3,0.179E+3,0.19311000E+1,0.98460000E+0 - ,0.26611650E+3,0.213E+3,0.180E+3,0.19311000E+1,0.19896000E+1 - ,0.44475260E+3,0.213E+3,0.181E+3,0.19311000E+1,0.92670000E+0 - ,0.40065540E+3,0.213E+3,0.182E+3,0.19311000E+1,0.93830000E+0 - ,0.38605640E+3,0.213E+3,0.183E+3,0.19311000E+1,0.98200000E+0 - ,0.37356510E+3,0.213E+3,0.184E+3,0.19311000E+1,0.98150000E+0 - ,0.34618570E+3,0.213E+3,0.185E+3,0.19311000E+1,0.99540000E+0 - ,0.45742940E+3,0.213E+3,0.187E+3,0.19311000E+1,0.97050000E+0 - ,0.90069660E+3,0.213E+3,0.188E+3,0.19311000E+1,0.96620000E+0 - ,0.47874300E+3,0.213E+3,0.189E+3,0.19311000E+1,0.29070000E+1 - ,0.55821910E+3,0.213E+3,0.190E+3,0.19311000E+1,0.28844000E+1 - ,0.49675560E+3,0.213E+3,0.191E+3,0.19311000E+1,0.28738000E+1 - ,0.43513510E+3,0.213E+3,0.192E+3,0.19311000E+1,0.28878000E+1 - ,0.41782680E+3,0.213E+3,0.193E+3,0.19311000E+1,0.29095000E+1 - ,0.51393660E+3,0.213E+3,0.194E+3,0.19311000E+1,0.19209000E+1 - ,0.11812330E+3,0.213E+3,0.204E+3,0.19311000E+1,0.19697000E+1 - ,0.11524800E+3,0.213E+3,0.205E+3,0.19311000E+1,0.19441000E+1 - ,0.82430300E+2,0.213E+3,0.206E+3,0.19311000E+1,0.19985000E+1 - ,0.65016400E+2,0.213E+3,0.207E+3,0.19311000E+1,0.20143000E+1 - ,0.43378800E+2,0.213E+3,0.208E+3,0.19311000E+1,0.19887000E+1 - ,0.21219710E+3,0.213E+3,0.212E+3,0.19311000E+1,0.19496000E+1 - ,0.25674970E+3,0.213E+3,0.213E+3,0.19311000E+1,0.19311000E+1 - ,0.25702100E+2,0.214E+3,0.100E+1,0.19435000E+1,0.91180000E+0 - ,0.16580600E+2,0.214E+3,0.200E+1,0.19435000E+1,0.00000000E+0 - ,0.41243230E+3,0.214E+3,0.300E+1,0.19435000E+1,0.00000000E+0 - ,0.23689910E+3,0.214E+3,0.400E+1,0.19435000E+1,0.00000000E+0 - ,0.15801650E+3,0.214E+3,0.500E+1,0.19435000E+1,0.00000000E+0 - ,0.10557130E+3,0.214E+3,0.600E+1,0.19435000E+1,0.00000000E+0 - ,0.73007300E+2,0.214E+3,0.700E+1,0.19435000E+1,0.00000000E+0 - ,0.54744300E+2,0.214E+3,0.800E+1,0.19435000E+1,0.00000000E+0 - ,0.41072800E+2,0.214E+3,0.900E+1,0.19435000E+1,0.00000000E+0 - ,0.31310700E+2,0.214E+3,0.100E+2,0.19435000E+1,0.00000000E+0 - ,0.49265620E+3,0.214E+3,0.110E+2,0.19435000E+1,0.00000000E+0 - ,0.37783600E+3,0.214E+3,0.120E+2,0.19435000E+1,0.00000000E+0 - ,0.34711540E+3,0.214E+3,0.130E+2,0.19435000E+1,0.00000000E+0 - ,0.27188440E+3,0.214E+3,0.140E+2,0.19435000E+1,0.00000000E+0 - ,0.21048400E+3,0.214E+3,0.150E+2,0.19435000E+1,0.00000000E+0 - ,0.17357980E+3,0.214E+3,0.160E+2,0.19435000E+1,0.00000000E+0 - ,0.14078240E+3,0.214E+3,0.170E+2,0.19435000E+1,0.00000000E+0 - ,0.11433480E+3,0.214E+3,0.180E+2,0.19435000E+1,0.00000000E+0 - ,0.80549240E+3,0.214E+3,0.190E+2,0.19435000E+1,0.00000000E+0 - ,0.66409770E+3,0.214E+3,0.200E+2,0.19435000E+1,0.00000000E+0 - ,0.54821150E+3,0.214E+3,0.210E+2,0.19435000E+1,0.00000000E+0 - ,0.52845930E+3,0.214E+3,0.220E+2,0.19435000E+1,0.00000000E+0 - ,0.48345990E+3,0.214E+3,0.230E+2,0.19435000E+1,0.00000000E+0 - ,0.37993850E+3,0.214E+3,0.240E+2,0.19435000E+1,0.00000000E+0 - ,0.41561120E+3,0.214E+3,0.250E+2,0.19435000E+1,0.00000000E+0 - ,0.32531170E+3,0.214E+3,0.260E+2,0.19435000E+1,0.00000000E+0 - ,0.34494790E+3,0.214E+3,0.270E+2,0.19435000E+1,0.00000000E+0 - ,0.35576410E+3,0.214E+3,0.280E+2,0.19435000E+1,0.00000000E+0 - ,0.27189110E+3,0.214E+3,0.290E+2,0.19435000E+1,0.00000000E+0 - ,0.27896960E+3,0.214E+3,0.300E+2,0.19435000E+1,0.00000000E+0 - ,0.33128490E+3,0.214E+3,0.310E+2,0.19435000E+1,0.00000000E+0 - ,0.29090920E+3,0.214E+3,0.320E+2,0.19435000E+1,0.00000000E+0 - ,0.24673790E+3,0.214E+3,0.330E+2,0.19435000E+1,0.00000000E+0 - ,0.22038060E+3,0.214E+3,0.340E+2,0.19435000E+1,0.00000000E+0 - ,0.19179920E+3,0.214E+3,0.350E+2,0.19435000E+1,0.00000000E+0 - ,0.16582300E+3,0.214E+3,0.360E+2,0.19435000E+1,0.00000000E+0 - ,0.90177390E+3,0.214E+3,0.370E+2,0.19435000E+1,0.00000000E+0 - ,0.79067650E+3,0.214E+3,0.380E+2,0.19435000E+1,0.00000000E+0 - ,0.69120290E+3,0.214E+3,0.390E+2,0.19435000E+1,0.00000000E+0 - ,0.62007920E+3,0.214E+3,0.400E+2,0.19435000E+1,0.00000000E+0 - ,0.56449010E+3,0.214E+3,0.410E+2,0.19435000E+1,0.00000000E+0 - ,0.43396780E+3,0.214E+3,0.420E+2,0.19435000E+1,0.00000000E+0 - ,0.48500980E+3,0.214E+3,0.430E+2,0.19435000E+1,0.00000000E+0 - ,0.36773060E+3,0.214E+3,0.440E+2,0.19435000E+1,0.00000000E+0 - ,0.40262390E+3,0.214E+3,0.450E+2,0.19435000E+1,0.00000000E+0 - ,0.37288980E+3,0.214E+3,0.460E+2,0.19435000E+1,0.00000000E+0 - ,0.31011860E+3,0.214E+3,0.470E+2,0.19435000E+1,0.00000000E+0 - ,0.32796220E+3,0.214E+3,0.480E+2,0.19435000E+1,0.00000000E+0 - ,0.41337540E+3,0.214E+3,0.490E+2,0.19435000E+1,0.00000000E+0 - ,0.38122300E+3,0.214E+3,0.500E+2,0.19435000E+1,0.00000000E+0 - ,0.33831890E+3,0.214E+3,0.510E+2,0.19435000E+1,0.00000000E+0 - ,0.31287500E+3,0.214E+3,0.520E+2,0.19435000E+1,0.00000000E+0 - ,0.28172560E+3,0.214E+3,0.530E+2,0.19435000E+1,0.00000000E+0 - ,0.25213370E+3,0.214E+3,0.540E+2,0.19435000E+1,0.00000000E+0 - ,0.10981239E+4,0.214E+3,0.550E+2,0.19435000E+1,0.00000000E+0 - ,0.10078503E+4,0.214E+3,0.560E+2,0.19435000E+1,0.00000000E+0 - ,0.88388150E+3,0.214E+3,0.570E+2,0.19435000E+1,0.00000000E+0 - ,0.39958530E+3,0.214E+3,0.580E+2,0.19435000E+1,0.27991000E+1 - ,0.89190420E+3,0.214E+3,0.590E+2,0.19435000E+1,0.00000000E+0 - ,0.85628170E+3,0.214E+3,0.600E+2,0.19435000E+1,0.00000000E+0 - ,0.83476410E+3,0.214E+3,0.610E+2,0.19435000E+1,0.00000000E+0 - ,0.81499180E+3,0.214E+3,0.620E+2,0.19435000E+1,0.00000000E+0 - ,0.79746090E+3,0.214E+3,0.630E+2,0.19435000E+1,0.00000000E+0 - ,0.62473210E+3,0.214E+3,0.640E+2,0.19435000E+1,0.00000000E+0 - ,0.70500060E+3,0.214E+3,0.650E+2,0.19435000E+1,0.00000000E+0 - ,0.67965440E+3,0.214E+3,0.660E+2,0.19435000E+1,0.00000000E+0 - ,0.71903230E+3,0.214E+3,0.670E+2,0.19435000E+1,0.00000000E+0 - ,0.70378810E+3,0.214E+3,0.680E+2,0.19435000E+1,0.00000000E+0 - ,0.69001840E+3,0.214E+3,0.690E+2,0.19435000E+1,0.00000000E+0 - ,0.68208270E+3,0.214E+3,0.700E+2,0.19435000E+1,0.00000000E+0 - ,0.57324330E+3,0.214E+3,0.710E+2,0.19435000E+1,0.00000000E+0 - ,0.56278660E+3,0.214E+3,0.720E+2,0.19435000E+1,0.00000000E+0 - ,0.51235040E+3,0.214E+3,0.730E+2,0.19435000E+1,0.00000000E+0 - ,0.43105180E+3,0.214E+3,0.740E+2,0.19435000E+1,0.00000000E+0 - ,0.43832130E+3,0.214E+3,0.750E+2,0.19435000E+1,0.00000000E+0 - ,0.39619890E+3,0.214E+3,0.760E+2,0.19435000E+1,0.00000000E+0 - ,0.36196280E+3,0.214E+3,0.770E+2,0.19435000E+1,0.00000000E+0 - ,0.29935640E+3,0.214E+3,0.780E+2,0.19435000E+1,0.00000000E+0 - ,0.27918270E+3,0.214E+3,0.790E+2,0.19435000E+1,0.00000000E+0 - ,0.28724760E+3,0.214E+3,0.800E+2,0.19435000E+1,0.00000000E+0 - ,0.42296870E+3,0.214E+3,0.810E+2,0.19435000E+1,0.00000000E+0 - ,0.41296020E+3,0.214E+3,0.820E+2,0.19435000E+1,0.00000000E+0 - ,0.37820780E+3,0.214E+3,0.830E+2,0.19435000E+1,0.00000000E+0 - ,0.35984120E+3,0.214E+3,0.840E+2,0.19435000E+1,0.00000000E+0 - ,0.33092490E+3,0.214E+3,0.850E+2,0.19435000E+1,0.00000000E+0 - ,0.30214620E+3,0.214E+3,0.860E+2,0.19435000E+1,0.00000000E+0 - ,0.10353860E+4,0.214E+3,0.870E+2,0.19435000E+1,0.00000000E+0 - ,0.99537320E+3,0.214E+3,0.880E+2,0.19435000E+1,0.00000000E+0 - ,0.87825500E+3,0.214E+3,0.890E+2,0.19435000E+1,0.00000000E+0 - ,0.78653170E+3,0.214E+3,0.900E+2,0.19435000E+1,0.00000000E+0 - ,0.78131330E+3,0.214E+3,0.910E+2,0.19435000E+1,0.00000000E+0 - ,0.75635270E+3,0.214E+3,0.920E+2,0.19435000E+1,0.00000000E+0 - ,0.77996360E+3,0.214E+3,0.930E+2,0.19435000E+1,0.00000000E+0 - ,0.75512290E+3,0.214E+3,0.940E+2,0.19435000E+1,0.00000000E+0 - ,0.41822200E+2,0.214E+3,0.101E+3,0.19435000E+1,0.00000000E+0 - ,0.13744580E+3,0.214E+3,0.103E+3,0.19435000E+1,0.98650000E+0 - ,0.17493150E+3,0.214E+3,0.104E+3,0.19435000E+1,0.98080000E+0 - ,0.13248310E+3,0.214E+3,0.105E+3,0.19435000E+1,0.97060000E+0 - ,0.98927800E+2,0.214E+3,0.106E+3,0.19435000E+1,0.98680000E+0 - ,0.67982000E+2,0.214E+3,0.107E+3,0.19435000E+1,0.99440000E+0 - ,0.48939100E+2,0.214E+3,0.108E+3,0.19435000E+1,0.99250000E+0 - ,0.33107500E+2,0.214E+3,0.109E+3,0.19435000E+1,0.99820000E+0 - ,0.20080380E+3,0.214E+3,0.111E+3,0.19435000E+1,0.96840000E+0 - ,0.31098970E+3,0.214E+3,0.112E+3,0.19435000E+1,0.96280000E+0 - ,0.31418090E+3,0.214E+3,0.113E+3,0.19435000E+1,0.96480000E+0 - ,0.25093760E+3,0.214E+3,0.114E+3,0.19435000E+1,0.95070000E+0 - ,0.20419980E+3,0.214E+3,0.115E+3,0.19435000E+1,0.99470000E+0 - ,0.17165370E+3,0.214E+3,0.116E+3,0.19435000E+1,0.99480000E+0 - ,0.13931250E+3,0.214E+3,0.117E+3,0.19435000E+1,0.99720000E+0 - ,0.27480560E+3,0.214E+3,0.119E+3,0.19435000E+1,0.97670000E+0 - ,0.52989460E+3,0.214E+3,0.120E+3,0.19435000E+1,0.98310000E+0 - ,0.27434930E+3,0.214E+3,0.121E+3,0.19435000E+1,0.18627000E+1 - ,0.26463020E+3,0.214E+3,0.122E+3,0.19435000E+1,0.18299000E+1 - ,0.25929250E+3,0.214E+3,0.123E+3,0.19435000E+1,0.19138000E+1 - ,0.25696820E+3,0.214E+3,0.124E+3,0.19435000E+1,0.18269000E+1 - ,0.23596760E+3,0.214E+3,0.125E+3,0.19435000E+1,0.16406000E+1 - ,0.21806460E+3,0.214E+3,0.126E+3,0.19435000E+1,0.16483000E+1 - ,0.20790840E+3,0.214E+3,0.127E+3,0.19435000E+1,0.17149000E+1 - ,0.20327770E+3,0.214E+3,0.128E+3,0.19435000E+1,0.17937000E+1 - ,0.20115730E+3,0.214E+3,0.129E+3,0.19435000E+1,0.95760000E+0 - ,0.18816130E+3,0.214E+3,0.130E+3,0.19435000E+1,0.19419000E+1 - ,0.31077040E+3,0.214E+3,0.131E+3,0.19435000E+1,0.96010000E+0 - ,0.27174380E+3,0.214E+3,0.132E+3,0.19435000E+1,0.94340000E+0 - ,0.24243590E+3,0.214E+3,0.133E+3,0.19435000E+1,0.98890000E+0 - ,0.22046240E+3,0.214E+3,0.134E+3,0.19435000E+1,0.99010000E+0 - ,0.19317380E+3,0.214E+3,0.135E+3,0.19435000E+1,0.99740000E+0 - ,0.32730800E+3,0.214E+3,0.137E+3,0.19435000E+1,0.97380000E+0 - ,0.64440170E+3,0.214E+3,0.138E+3,0.19435000E+1,0.98010000E+0 - ,0.49021540E+3,0.214E+3,0.139E+3,0.19435000E+1,0.19153000E+1 - ,0.36256720E+3,0.214E+3,0.140E+3,0.19435000E+1,0.19355000E+1 - ,0.36609840E+3,0.214E+3,0.141E+3,0.19435000E+1,0.19545000E+1 - ,0.34073580E+3,0.214E+3,0.142E+3,0.19435000E+1,0.19420000E+1 - ,0.38317340E+3,0.214E+3,0.143E+3,0.19435000E+1,0.16682000E+1 - ,0.29596310E+3,0.214E+3,0.144E+3,0.19435000E+1,0.18584000E+1 - ,0.27654270E+3,0.214E+3,0.145E+3,0.19435000E+1,0.19003000E+1 - ,0.25641330E+3,0.214E+3,0.146E+3,0.19435000E+1,0.18630000E+1 - ,0.24807500E+3,0.214E+3,0.147E+3,0.19435000E+1,0.96790000E+0 - ,0.24516140E+3,0.214E+3,0.148E+3,0.19435000E+1,0.19539000E+1 - ,0.39356170E+3,0.214E+3,0.149E+3,0.19435000E+1,0.96330000E+0 - ,0.35486870E+3,0.214E+3,0.150E+3,0.19435000E+1,0.95140000E+0 - ,0.33134490E+3,0.214E+3,0.151E+3,0.19435000E+1,0.97490000E+0 - ,0.31259390E+3,0.214E+3,0.152E+3,0.19435000E+1,0.98110000E+0 - ,0.28440960E+3,0.214E+3,0.153E+3,0.19435000E+1,0.99680000E+0 - ,0.38643270E+3,0.214E+3,0.155E+3,0.19435000E+1,0.99090000E+0 - ,0.83548010E+3,0.214E+3,0.156E+3,0.19435000E+1,0.97970000E+0 - ,0.62051600E+3,0.214E+3,0.157E+3,0.19435000E+1,0.19373000E+1 - ,0.38738880E+3,0.214E+3,0.159E+3,0.19435000E+1,0.29425000E+1 - ,0.37934290E+3,0.214E+3,0.160E+3,0.19435000E+1,0.29455000E+1 - ,0.36719680E+3,0.214E+3,0.161E+3,0.19435000E+1,0.29413000E+1 - ,0.36922530E+3,0.214E+3,0.162E+3,0.19435000E+1,0.29300000E+1 - ,0.35636770E+3,0.214E+3,0.163E+3,0.19435000E+1,0.18286000E+1 - ,0.37178190E+3,0.214E+3,0.164E+3,0.19435000E+1,0.28732000E+1 - ,0.34890330E+3,0.214E+3,0.165E+3,0.19435000E+1,0.29086000E+1 - ,0.35535340E+3,0.214E+3,0.166E+3,0.19435000E+1,0.28965000E+1 - ,0.33101430E+3,0.214E+3,0.167E+3,0.19435000E+1,0.29242000E+1 - ,0.32151310E+3,0.214E+3,0.168E+3,0.19435000E+1,0.29282000E+1 - ,0.31953220E+3,0.214E+3,0.169E+3,0.19435000E+1,0.29246000E+1 - ,0.33642390E+3,0.214E+3,0.170E+3,0.19435000E+1,0.28482000E+1 - ,0.30879300E+3,0.214E+3,0.171E+3,0.19435000E+1,0.29219000E+1 - ,0.42124260E+3,0.214E+3,0.172E+3,0.19435000E+1,0.19254000E+1 - ,0.38987130E+3,0.214E+3,0.173E+3,0.19435000E+1,0.19459000E+1 - ,0.35462710E+3,0.214E+3,0.174E+3,0.19435000E+1,0.19292000E+1 - ,0.35955640E+3,0.214E+3,0.175E+3,0.19435000E+1,0.18104000E+1 - ,0.31268360E+3,0.214E+3,0.176E+3,0.19435000E+1,0.18858000E+1 - ,0.29359280E+3,0.214E+3,0.177E+3,0.19435000E+1,0.18648000E+1 - ,0.28003950E+3,0.214E+3,0.178E+3,0.19435000E+1,0.19188000E+1 - ,0.26748530E+3,0.214E+3,0.179E+3,0.19435000E+1,0.98460000E+0 - ,0.25798760E+3,0.214E+3,0.180E+3,0.19435000E+1,0.19896000E+1 - ,0.42147770E+3,0.214E+3,0.181E+3,0.19435000E+1,0.92670000E+0 - ,0.38292490E+3,0.214E+3,0.182E+3,0.19435000E+1,0.93830000E+0 - ,0.37065420E+3,0.214E+3,0.183E+3,0.19435000E+1,0.98200000E+0 - ,0.35983420E+3,0.214E+3,0.184E+3,0.19435000E+1,0.98150000E+0 - ,0.33497230E+3,0.214E+3,0.185E+3,0.19435000E+1,0.99540000E+0 - ,0.43520780E+3,0.214E+3,0.187E+3,0.19435000E+1,0.97050000E+0 - ,0.83000970E+3,0.214E+3,0.188E+3,0.19435000E+1,0.96620000E+0 - ,0.45862090E+3,0.214E+3,0.189E+3,0.19435000E+1,0.29070000E+1 - ,0.53065480E+3,0.214E+3,0.190E+3,0.19435000E+1,0.28844000E+1 - ,0.47329240E+3,0.214E+3,0.191E+3,0.19435000E+1,0.28738000E+1 - ,0.41725880E+3,0.214E+3,0.192E+3,0.19435000E+1,0.28878000E+1 - ,0.40119370E+3,0.214E+3,0.193E+3,0.19435000E+1,0.29095000E+1 - ,0.48568000E+3,0.214E+3,0.194E+3,0.19435000E+1,0.19209000E+1 - ,0.11328200E+3,0.214E+3,0.204E+3,0.19435000E+1,0.19697000E+1 - ,0.11084470E+3,0.214E+3,0.205E+3,0.19435000E+1,0.19441000E+1 - ,0.80261900E+2,0.214E+3,0.206E+3,0.19435000E+1,0.19985000E+1 - ,0.63715100E+2,0.214E+3,0.207E+3,0.19435000E+1,0.20143000E+1 - ,0.42967900E+2,0.214E+3,0.208E+3,0.19435000E+1,0.19887000E+1 - ,0.20177580E+3,0.214E+3,0.212E+3,0.19435000E+1,0.19496000E+1 - ,0.24384070E+3,0.214E+3,0.213E+3,0.19435000E+1,0.19311000E+1 - ,0.23312540E+3,0.214E+3,0.214E+3,0.19435000E+1,0.19435000E+1 - ,0.22742900E+2,0.215E+3,0.100E+1,0.20102000E+1,0.91180000E+0 - ,0.15024500E+2,0.215E+3,0.200E+1,0.20102000E+1,0.00000000E+0 - ,0.33746620E+3,0.215E+3,0.300E+1,0.20102000E+1,0.00000000E+0 - ,0.19995760E+3,0.215E+3,0.400E+1,0.20102000E+1,0.00000000E+0 - ,0.13624020E+3,0.215E+3,0.500E+1,0.20102000E+1,0.00000000E+0 - ,0.92608000E+2,0.215E+3,0.600E+1,0.20102000E+1,0.00000000E+0 - ,0.64920900E+2,0.215E+3,0.700E+1,0.20102000E+1,0.00000000E+0 - ,0.49172900E+2,0.215E+3,0.800E+1,0.20102000E+1,0.00000000E+0 - ,0.37220500E+2,0.215E+3,0.900E+1,0.20102000E+1,0.00000000E+0 - ,0.28580500E+2,0.215E+3,0.100E+2,0.20102000E+1,0.00000000E+0 - ,0.40398020E+3,0.215E+3,0.110E+2,0.20102000E+1,0.00000000E+0 - ,0.31708240E+3,0.215E+3,0.120E+2,0.20102000E+1,0.00000000E+0 - ,0.29434030E+3,0.215E+3,0.130E+2,0.20102000E+1,0.00000000E+0 - ,0.23387520E+3,0.215E+3,0.140E+2,0.20102000E+1,0.00000000E+0 - ,0.18343220E+3,0.215E+3,0.150E+2,0.20102000E+1,0.00000000E+0 - ,0.15264700E+3,0.215E+3,0.160E+2,0.20102000E+1,0.00000000E+0 - ,0.12491620E+3,0.215E+3,0.170E+2,0.20102000E+1,0.00000000E+0 - ,0.10227010E+3,0.215E+3,0.180E+2,0.20102000E+1,0.00000000E+0 - ,0.65923940E+3,0.215E+3,0.190E+2,0.20102000E+1,0.00000000E+0 - ,0.55248890E+3,0.215E+3,0.200E+2,0.20102000E+1,0.00000000E+0 - ,0.45796080E+3,0.215E+3,0.210E+2,0.20102000E+1,0.00000000E+0 - ,0.44347230E+3,0.215E+3,0.220E+2,0.20102000E+1,0.00000000E+0 - ,0.40676720E+3,0.215E+3,0.230E+2,0.20102000E+1,0.00000000E+0 - ,0.32027340E+3,0.215E+3,0.240E+2,0.20102000E+1,0.00000000E+0 - ,0.35102240E+3,0.215E+3,0.250E+2,0.20102000E+1,0.00000000E+0 - ,0.27541380E+3,0.215E+3,0.260E+2,0.20102000E+1,0.00000000E+0 - ,0.29316610E+3,0.215E+3,0.270E+2,0.20102000E+1,0.00000000E+0 - ,0.30149740E+3,0.215E+3,0.280E+2,0.20102000E+1,0.00000000E+0 - ,0.23090910E+3,0.215E+3,0.290E+2,0.20102000E+1,0.00000000E+0 - ,0.23850630E+3,0.215E+3,0.300E+2,0.20102000E+1,0.00000000E+0 - ,0.28238710E+3,0.215E+3,0.310E+2,0.20102000E+1,0.00000000E+0 - ,0.25064010E+3,0.215E+3,0.320E+2,0.20102000E+1,0.00000000E+0 - ,0.21483630E+3,0.215E+3,0.330E+2,0.20102000E+1,0.00000000E+0 - ,0.19324100E+3,0.215E+3,0.340E+2,0.20102000E+1,0.00000000E+0 - ,0.16943130E+3,0.215E+3,0.350E+2,0.20102000E+1,0.00000000E+0 - ,0.14751930E+3,0.215E+3,0.360E+2,0.20102000E+1,0.00000000E+0 - ,0.73972690E+3,0.215E+3,0.370E+2,0.20102000E+1,0.00000000E+0 - ,0.65778770E+3,0.215E+3,0.380E+2,0.20102000E+1,0.00000000E+0 - ,0.57951050E+3,0.215E+3,0.390E+2,0.20102000E+1,0.00000000E+0 - ,0.52257210E+3,0.215E+3,0.400E+2,0.20102000E+1,0.00000000E+0 - ,0.47747720E+3,0.215E+3,0.410E+2,0.20102000E+1,0.00000000E+0 - ,0.36967940E+3,0.215E+3,0.420E+2,0.20102000E+1,0.00000000E+0 - ,0.41204130E+3,0.215E+3,0.430E+2,0.20102000E+1,0.00000000E+0 - ,0.31482970E+3,0.215E+3,0.440E+2,0.20102000E+1,0.00000000E+0 - ,0.34429870E+3,0.215E+3,0.450E+2,0.20102000E+1,0.00000000E+0 - ,0.31960770E+3,0.215E+3,0.460E+2,0.20102000E+1,0.00000000E+0 - ,0.26595030E+3,0.215E+3,0.470E+2,0.20102000E+1,0.00000000E+0 - ,0.28194690E+3,0.215E+3,0.480E+2,0.20102000E+1,0.00000000E+0 - ,0.35272470E+3,0.215E+3,0.490E+2,0.20102000E+1,0.00000000E+0 - ,0.32794600E+3,0.215E+3,0.500E+2,0.20102000E+1,0.00000000E+0 - ,0.29361680E+3,0.215E+3,0.510E+2,0.20102000E+1,0.00000000E+0 - ,0.27309200E+3,0.215E+3,0.520E+2,0.20102000E+1,0.00000000E+0 - ,0.24747320E+3,0.215E+3,0.530E+2,0.20102000E+1,0.00000000E+0 - ,0.22286600E+3,0.215E+3,0.540E+2,0.20102000E+1,0.00000000E+0 - ,0.90172930E+3,0.215E+3,0.550E+2,0.20102000E+1,0.00000000E+0 - ,0.83699700E+3,0.215E+3,0.560E+2,0.20102000E+1,0.00000000E+0 - ,0.73956740E+3,0.215E+3,0.570E+2,0.20102000E+1,0.00000000E+0 - ,0.34646750E+3,0.215E+3,0.580E+2,0.20102000E+1,0.27991000E+1 - ,0.74267020E+3,0.215E+3,0.590E+2,0.20102000E+1,0.00000000E+0 - ,0.71379130E+3,0.215E+3,0.600E+2,0.20102000E+1,0.00000000E+0 - ,0.69606280E+3,0.215E+3,0.610E+2,0.20102000E+1,0.00000000E+0 - ,0.67974330E+3,0.215E+3,0.620E+2,0.20102000E+1,0.00000000E+0 - ,0.66528190E+3,0.215E+3,0.630E+2,0.20102000E+1,0.00000000E+0 - ,0.52618270E+3,0.215E+3,0.640E+2,0.20102000E+1,0.00000000E+0 - ,0.58709720E+3,0.215E+3,0.650E+2,0.20102000E+1,0.00000000E+0 - ,0.56687340E+3,0.215E+3,0.660E+2,0.20102000E+1,0.00000000E+0 - ,0.60088550E+3,0.215E+3,0.670E+2,0.20102000E+1,0.00000000E+0 - ,0.58822970E+3,0.215E+3,0.680E+2,0.20102000E+1,0.00000000E+0 - ,0.57686430E+3,0.215E+3,0.690E+2,0.20102000E+1,0.00000000E+0 - ,0.56998510E+3,0.215E+3,0.700E+2,0.20102000E+1,0.00000000E+0 - ,0.48216270E+3,0.215E+3,0.710E+2,0.20102000E+1,0.00000000E+0 - ,0.47707590E+3,0.215E+3,0.720E+2,0.20102000E+1,0.00000000E+0 - ,0.43667570E+3,0.215E+3,0.730E+2,0.20102000E+1,0.00000000E+0 - ,0.36935120E+3,0.215E+3,0.740E+2,0.20102000E+1,0.00000000E+0 - ,0.37621900E+3,0.215E+3,0.750E+2,0.20102000E+1,0.00000000E+0 - ,0.34171560E+3,0.215E+3,0.760E+2,0.20102000E+1,0.00000000E+0 - ,0.31344980E+3,0.215E+3,0.770E+2,0.20102000E+1,0.00000000E+0 - ,0.26059070E+3,0.215E+3,0.780E+2,0.20102000E+1,0.00000000E+0 - ,0.24352110E+3,0.215E+3,0.790E+2,0.20102000E+1,0.00000000E+0 - ,0.25084270E+3,0.215E+3,0.800E+2,0.20102000E+1,0.00000000E+0 - ,0.36225560E+3,0.215E+3,0.810E+2,0.20102000E+1,0.00000000E+0 - ,0.35571630E+3,0.215E+3,0.820E+2,0.20102000E+1,0.00000000E+0 - ,0.32825370E+3,0.215E+3,0.830E+2,0.20102000E+1,0.00000000E+0 - ,0.31378020E+3,0.215E+3,0.840E+2,0.20102000E+1,0.00000000E+0 - ,0.29026290E+3,0.215E+3,0.850E+2,0.20102000E+1,0.00000000E+0 - ,0.26650630E+3,0.215E+3,0.860E+2,0.20102000E+1,0.00000000E+0 - ,0.85532140E+3,0.215E+3,0.870E+2,0.20102000E+1,0.00000000E+0 - ,0.83008340E+3,0.215E+3,0.880E+2,0.20102000E+1,0.00000000E+0 - ,0.73740950E+3,0.215E+3,0.890E+2,0.20102000E+1,0.00000000E+0 - ,0.66621410E+3,0.215E+3,0.900E+2,0.20102000E+1,0.00000000E+0 - ,0.65937380E+3,0.215E+3,0.910E+2,0.20102000E+1,0.00000000E+0 - ,0.63846460E+3,0.215E+3,0.920E+2,0.20102000E+1,0.00000000E+0 - ,0.65489730E+3,0.215E+3,0.930E+2,0.20102000E+1,0.00000000E+0 - ,0.63460740E+3,0.215E+3,0.940E+2,0.20102000E+1,0.00000000E+0 - ,0.36493600E+2,0.215E+3,0.101E+3,0.20102000E+1,0.00000000E+0 - ,0.11639410E+3,0.215E+3,0.103E+3,0.20102000E+1,0.98650000E+0 - ,0.14881940E+3,0.215E+3,0.104E+3,0.20102000E+1,0.98080000E+0 - ,0.11479680E+3,0.215E+3,0.105E+3,0.20102000E+1,0.97060000E+0 - ,0.86812800E+2,0.215E+3,0.106E+3,0.20102000E+1,0.98680000E+0 - ,0.60508500E+2,0.215E+3,0.107E+3,0.20102000E+1,0.99440000E+0 - ,0.44090400E+2,0.215E+3,0.108E+3,0.20102000E+1,0.99250000E+0 - ,0.30289400E+2,0.215E+3,0.109E+3,0.20102000E+1,0.99820000E+0 - ,0.16956980E+3,0.215E+3,0.111E+3,0.20102000E+1,0.96840000E+0 - ,0.26216960E+3,0.215E+3,0.112E+3,0.20102000E+1,0.96280000E+0 - ,0.26714040E+3,0.215E+3,0.113E+3,0.20102000E+1,0.96480000E+0 - ,0.21636930E+3,0.215E+3,0.114E+3,0.20102000E+1,0.95070000E+0 - ,0.17806220E+3,0.215E+3,0.115E+3,0.20102000E+1,0.99470000E+0 - ,0.15093640E+3,0.215E+3,0.116E+3,0.20102000E+1,0.99480000E+0 - ,0.12360110E+3,0.215E+3,0.117E+3,0.20102000E+1,0.99720000E+0 - ,0.23449210E+3,0.215E+3,0.119E+3,0.20102000E+1,0.97670000E+0 - ,0.44207020E+3,0.215E+3,0.120E+3,0.20102000E+1,0.98310000E+0 - ,0.23629650E+3,0.215E+3,0.121E+3,0.20102000E+1,0.18627000E+1 - ,0.22810870E+3,0.215E+3,0.122E+3,0.20102000E+1,0.18299000E+1 - ,0.22347840E+3,0.215E+3,0.123E+3,0.20102000E+1,0.19138000E+1 - ,0.22119860E+3,0.215E+3,0.124E+3,0.20102000E+1,0.18269000E+1 - ,0.20433190E+3,0.215E+3,0.125E+3,0.20102000E+1,0.16406000E+1 - ,0.18924970E+3,0.215E+3,0.126E+3,0.20102000E+1,0.16483000E+1 - ,0.18048460E+3,0.215E+3,0.127E+3,0.20102000E+1,0.17149000E+1 - ,0.17637500E+3,0.215E+3,0.128E+3,0.20102000E+1,0.17937000E+1 - ,0.17370060E+3,0.215E+3,0.129E+3,0.20102000E+1,0.95760000E+0 - ,0.16388840E+3,0.215E+3,0.130E+3,0.20102000E+1,0.19419000E+1 - ,0.26564070E+3,0.215E+3,0.131E+3,0.20102000E+1,0.96010000E+0 - ,0.23477850E+3,0.215E+3,0.132E+3,0.20102000E+1,0.94340000E+0 - ,0.21123800E+3,0.215E+3,0.133E+3,0.20102000E+1,0.98890000E+0 - ,0.19329960E+3,0.215E+3,0.134E+3,0.20102000E+1,0.99010000E+0 - ,0.17058580E+3,0.215E+3,0.135E+3,0.20102000E+1,0.99740000E+0 - ,0.28011830E+3,0.215E+3,0.137E+3,0.20102000E+1,0.97380000E+0 - ,0.53743520E+3,0.215E+3,0.138E+3,0.20102000E+1,0.98010000E+0 - ,0.41535780E+3,0.215E+3,0.139E+3,0.20102000E+1,0.19153000E+1 - ,0.31230500E+3,0.215E+3,0.140E+3,0.20102000E+1,0.19355000E+1 - ,0.31527630E+3,0.215E+3,0.141E+3,0.20102000E+1,0.19545000E+1 - ,0.29424360E+3,0.215E+3,0.142E+3,0.20102000E+1,0.19420000E+1 - ,0.32833170E+3,0.215E+3,0.143E+3,0.20102000E+1,0.16682000E+1 - ,0.25720590E+3,0.215E+3,0.144E+3,0.20102000E+1,0.18584000E+1 - ,0.24057510E+3,0.215E+3,0.145E+3,0.20102000E+1,0.19003000E+1 - ,0.22341250E+3,0.215E+3,0.146E+3,0.20102000E+1,0.18630000E+1 - ,0.21594190E+3,0.215E+3,0.147E+3,0.20102000E+1,0.96790000E+0 - ,0.21429840E+3,0.215E+3,0.148E+3,0.20102000E+1,0.19539000E+1 - ,0.33682850E+3,0.215E+3,0.149E+3,0.20102000E+1,0.96330000E+0 - ,0.30637120E+3,0.215E+3,0.150E+3,0.20102000E+1,0.95140000E+0 - ,0.28792660E+3,0.215E+3,0.151E+3,0.20102000E+1,0.97490000E+0 - ,0.27294170E+3,0.215E+3,0.152E+3,0.20102000E+1,0.98110000E+0 - ,0.24979920E+3,0.215E+3,0.153E+3,0.20102000E+1,0.99680000E+0 - ,0.33288760E+3,0.215E+3,0.155E+3,0.20102000E+1,0.99090000E+0 - ,0.69526390E+3,0.215E+3,0.156E+3,0.20102000E+1,0.97970000E+0 - ,0.52525150E+3,0.215E+3,0.157E+3,0.20102000E+1,0.19373000E+1 - ,0.33608240E+3,0.215E+3,0.159E+3,0.20102000E+1,0.29425000E+1 - ,0.32913430E+3,0.215E+3,0.160E+3,0.20102000E+1,0.29455000E+1 - ,0.31875390E+3,0.215E+3,0.161E+3,0.20102000E+1,0.29413000E+1 - ,0.32010570E+3,0.215E+3,0.162E+3,0.20102000E+1,0.29300000E+1 - ,0.30771680E+3,0.215E+3,0.163E+3,0.20102000E+1,0.18286000E+1 - ,0.32211770E+3,0.215E+3,0.164E+3,0.20102000E+1,0.28732000E+1 - ,0.30266100E+3,0.215E+3,0.165E+3,0.20102000E+1,0.29086000E+1 - ,0.30757360E+3,0.215E+3,0.166E+3,0.20102000E+1,0.28965000E+1 - ,0.28745570E+3,0.215E+3,0.167E+3,0.20102000E+1,0.29242000E+1 - ,0.27932320E+3,0.215E+3,0.168E+3,0.20102000E+1,0.29282000E+1 - ,0.27749490E+3,0.215E+3,0.169E+3,0.20102000E+1,0.29246000E+1 - ,0.29150550E+3,0.215E+3,0.170E+3,0.20102000E+1,0.28482000E+1 - ,0.26832640E+3,0.215E+3,0.171E+3,0.20102000E+1,0.29219000E+1 - ,0.36072920E+3,0.215E+3,0.172E+3,0.20102000E+1,0.19254000E+1 - ,0.33564790E+3,0.215E+3,0.173E+3,0.20102000E+1,0.19459000E+1 - ,0.30701360E+3,0.215E+3,0.174E+3,0.20102000E+1,0.19292000E+1 - ,0.30982750E+3,0.215E+3,0.175E+3,0.20102000E+1,0.18104000E+1 - ,0.27286500E+3,0.215E+3,0.176E+3,0.20102000E+1,0.18858000E+1 - ,0.25678780E+3,0.215E+3,0.177E+3,0.20102000E+1,0.18648000E+1 - ,0.24528060E+3,0.215E+3,0.178E+3,0.20102000E+1,0.19188000E+1 - ,0.23433320E+3,0.215E+3,0.179E+3,0.20102000E+1,0.98460000E+0 - ,0.22697090E+3,0.215E+3,0.180E+3,0.20102000E+1,0.19896000E+1 - ,0.36172460E+3,0.215E+3,0.181E+3,0.20102000E+1,0.92670000E+0 - ,0.33138450E+3,0.215E+3,0.182E+3,0.20102000E+1,0.93830000E+0 - ,0.32226070E+3,0.215E+3,0.183E+3,0.20102000E+1,0.98200000E+0 - ,0.31398590E+3,0.215E+3,0.184E+3,0.20102000E+1,0.98150000E+0 - ,0.29381590E+3,0.215E+3,0.185E+3,0.20102000E+1,0.99540000E+0 - ,0.37507170E+3,0.215E+3,0.187E+3,0.20102000E+1,0.97050000E+0 - ,0.69405520E+3,0.215E+3,0.188E+3,0.20102000E+1,0.96620000E+0 - ,0.39772110E+3,0.215E+3,0.189E+3,0.20102000E+1,0.29070000E+1 - ,0.45702730E+3,0.215E+3,0.190E+3,0.20102000E+1,0.28844000E+1 - ,0.40899300E+3,0.215E+3,0.191E+3,0.20102000E+1,0.28738000E+1 - ,0.36253380E+3,0.215E+3,0.192E+3,0.20102000E+1,0.28878000E+1 - ,0.34905070E+3,0.215E+3,0.193E+3,0.20102000E+1,0.29095000E+1 - ,0.41613190E+3,0.215E+3,0.194E+3,0.20102000E+1,0.19209000E+1 - ,0.98185900E+2,0.215E+3,0.204E+3,0.20102000E+1,0.19697000E+1 - ,0.96532400E+2,0.215E+3,0.205E+3,0.20102000E+1,0.19441000E+1 - ,0.70926900E+2,0.215E+3,0.206E+3,0.20102000E+1,0.19985000E+1 - ,0.56798100E+2,0.215E+3,0.207E+3,0.20102000E+1,0.20143000E+1 - ,0.38857800E+2,0.215E+3,0.208E+3,0.20102000E+1,0.19887000E+1 - ,0.17322270E+3,0.215E+3,0.212E+3,0.20102000E+1,0.19496000E+1 - ,0.20920610E+3,0.215E+3,0.213E+3,0.20102000E+1,0.19311000E+1 - ,0.20144650E+3,0.215E+3,0.214E+3,0.20102000E+1,0.19435000E+1 - ,0.17555340E+3,0.215E+3,0.215E+3,0.20102000E+1,0.20102000E+1 - ,0.19472900E+2,0.216E+3,0.100E+1,0.19903000E+1,0.91180000E+0 - ,0.13209000E+2,0.216E+3,0.200E+1,0.19903000E+1,0.00000000E+0 - ,0.26554640E+3,0.216E+3,0.300E+1,0.19903000E+1,0.00000000E+0 - ,0.16268750E+3,0.216E+3,0.400E+1,0.19903000E+1,0.00000000E+0 - ,0.11343240E+3,0.216E+3,0.500E+1,0.19903000E+1,0.00000000E+0 - ,0.78572900E+2,0.216E+3,0.600E+1,0.19903000E+1,0.00000000E+0 - ,0.55913600E+2,0.216E+3,0.700E+1,0.19903000E+1,0.00000000E+0 - ,0.42824500E+2,0.216E+3,0.800E+1,0.19903000E+1,0.00000000E+0 - ,0.32736500E+2,0.216E+3,0.900E+1,0.19903000E+1,0.00000000E+0 - ,0.25343500E+2,0.216E+3,0.100E+2,0.19903000E+1,0.00000000E+0 - ,0.31871200E+3,0.216E+3,0.110E+2,0.19903000E+1,0.00000000E+0 - ,0.25643150E+3,0.216E+3,0.120E+2,0.19903000E+1,0.00000000E+0 - ,0.24071650E+3,0.216E+3,0.130E+2,0.19903000E+1,0.00000000E+0 - ,0.19423140E+3,0.216E+3,0.140E+2,0.19903000E+1,0.00000000E+0 - ,0.15449350E+3,0.216E+3,0.150E+2,0.19903000E+1,0.00000000E+0 - ,0.12984130E+3,0.216E+3,0.160E+2,0.19903000E+1,0.00000000E+0 - ,0.10729640E+3,0.216E+3,0.170E+2,0.19903000E+1,0.00000000E+0 - ,0.88626800E+2,0.216E+3,0.180E+2,0.19903000E+1,0.00000000E+0 - ,0.51938020E+3,0.216E+3,0.190E+2,0.19903000E+1,0.00000000E+0 - ,0.44287350E+3,0.216E+3,0.200E+2,0.19903000E+1,0.00000000E+0 - ,0.36871310E+3,0.216E+3,0.210E+2,0.19903000E+1,0.00000000E+0 - ,0.35885540E+3,0.216E+3,0.220E+2,0.19903000E+1,0.00000000E+0 - ,0.33009380E+3,0.216E+3,0.230E+2,0.19903000E+1,0.00000000E+0 - ,0.26056470E+3,0.216E+3,0.240E+2,0.19903000E+1,0.00000000E+0 - ,0.28605270E+3,0.216E+3,0.250E+2,0.19903000E+1,0.00000000E+0 - ,0.22513570E+3,0.216E+3,0.260E+2,0.19903000E+1,0.00000000E+0 - ,0.24051750E+3,0.216E+3,0.270E+2,0.19903000E+1,0.00000000E+0 - ,0.24658640E+3,0.216E+3,0.280E+2,0.19903000E+1,0.00000000E+0 - ,0.18941220E+3,0.216E+3,0.290E+2,0.19903000E+1,0.00000000E+0 - ,0.19693310E+3,0.216E+3,0.300E+2,0.19903000E+1,0.00000000E+0 - ,0.23234090E+3,0.216E+3,0.310E+2,0.19903000E+1,0.00000000E+0 - ,0.20856850E+3,0.216E+3,0.320E+2,0.19903000E+1,0.00000000E+0 - ,0.18080070E+3,0.216E+3,0.330E+2,0.19903000E+1,0.00000000E+0 - ,0.16386810E+3,0.216E+3,0.340E+2,0.19903000E+1,0.00000000E+0 - ,0.14483870E+3,0.216E+3,0.350E+2,0.19903000E+1,0.00000000E+0 - ,0.12707910E+3,0.216E+3,0.360E+2,0.19903000E+1,0.00000000E+0 - ,0.58437840E+3,0.216E+3,0.370E+2,0.19903000E+1,0.00000000E+0 - ,0.52738380E+3,0.216E+3,0.380E+2,0.19903000E+1,0.00000000E+0 - ,0.46852690E+3,0.216E+3,0.390E+2,0.19903000E+1,0.00000000E+0 - ,0.42487480E+3,0.216E+3,0.400E+2,0.19903000E+1,0.00000000E+0 - ,0.38978890E+3,0.216E+3,0.410E+2,0.19903000E+1,0.00000000E+0 - ,0.30421090E+3,0.216E+3,0.420E+2,0.19903000E+1,0.00000000E+0 - ,0.33802960E+3,0.216E+3,0.430E+2,0.19903000E+1,0.00000000E+0 - ,0.26053350E+3,0.216E+3,0.440E+2,0.19903000E+1,0.00000000E+0 - ,0.28446820E+3,0.216E+3,0.450E+2,0.19903000E+1,0.00000000E+0 - ,0.26473450E+3,0.216E+3,0.460E+2,0.19903000E+1,0.00000000E+0 - ,0.22055850E+3,0.216E+3,0.470E+2,0.19903000E+1,0.00000000E+0 - ,0.23431540E+3,0.216E+3,0.480E+2,0.19903000E+1,0.00000000E+0 - ,0.29072550E+3,0.216E+3,0.490E+2,0.19903000E+1,0.00000000E+0 - ,0.27258810E+3,0.216E+3,0.500E+2,0.19903000E+1,0.00000000E+0 - ,0.24633500E+3,0.216E+3,0.510E+2,0.19903000E+1,0.00000000E+0 - ,0.23051370E+3,0.216E+3,0.520E+2,0.19903000E+1,0.00000000E+0 - ,0.21031760E+3,0.216E+3,0.530E+2,0.19903000E+1,0.00000000E+0 - ,0.19068220E+3,0.216E+3,0.540E+2,0.19903000E+1,0.00000000E+0 - ,0.71322290E+3,0.216E+3,0.550E+2,0.19903000E+1,0.00000000E+0 - ,0.66991060E+3,0.216E+3,0.560E+2,0.19903000E+1,0.00000000E+0 - ,0.59671860E+3,0.216E+3,0.570E+2,0.19903000E+1,0.00000000E+0 - ,0.29045550E+3,0.216E+3,0.580E+2,0.19903000E+1,0.27991000E+1 - ,0.59619860E+3,0.216E+3,0.590E+2,0.19903000E+1,0.00000000E+0 - ,0.57368400E+3,0.216E+3,0.600E+2,0.19903000E+1,0.00000000E+0 - ,0.55961080E+3,0.216E+3,0.610E+2,0.19903000E+1,0.00000000E+0 - ,0.54662920E+3,0.216E+3,0.620E+2,0.19903000E+1,0.00000000E+0 - ,0.53513180E+3,0.216E+3,0.630E+2,0.19903000E+1,0.00000000E+0 - ,0.42773380E+3,0.216E+3,0.640E+2,0.19903000E+1,0.00000000E+0 - ,0.47158580E+3,0.216E+3,0.650E+2,0.19903000E+1,0.00000000E+0 - ,0.45610620E+3,0.216E+3,0.660E+2,0.19903000E+1,0.00000000E+0 - ,0.48421010E+3,0.216E+3,0.670E+2,0.19903000E+1,0.00000000E+0 - ,0.47407530E+3,0.216E+3,0.680E+2,0.19903000E+1,0.00000000E+0 - ,0.46503260E+3,0.216E+3,0.690E+2,0.19903000E+1,0.00000000E+0 - ,0.45926340E+3,0.216E+3,0.700E+2,0.19903000E+1,0.00000000E+0 - ,0.39129390E+3,0.216E+3,0.710E+2,0.19903000E+1,0.00000000E+0 - ,0.39032880E+3,0.216E+3,0.720E+2,0.19903000E+1,0.00000000E+0 - ,0.35937970E+3,0.216E+3,0.730E+2,0.19903000E+1,0.00000000E+0 - ,0.30582610E+3,0.216E+3,0.740E+2,0.19903000E+1,0.00000000E+0 - ,0.31204680E+3,0.216E+3,0.750E+2,0.19903000E+1,0.00000000E+0 - ,0.28491830E+3,0.216E+3,0.760E+2,0.19903000E+1,0.00000000E+0 - ,0.26249830E+3,0.216E+3,0.770E+2,0.19903000E+1,0.00000000E+0 - ,0.21953350E+3,0.216E+3,0.780E+2,0.19903000E+1,0.00000000E+0 - ,0.20562600E+3,0.216E+3,0.790E+2,0.19903000E+1,0.00000000E+0 - ,0.21201590E+3,0.216E+3,0.800E+2,0.19903000E+1,0.00000000E+0 - ,0.29991980E+3,0.216E+3,0.810E+2,0.19903000E+1,0.00000000E+0 - ,0.29620520E+3,0.216E+3,0.820E+2,0.19903000E+1,0.00000000E+0 - ,0.27549690E+3,0.216E+3,0.830E+2,0.19903000E+1,0.00000000E+0 - ,0.26464810E+3,0.216E+3,0.840E+2,0.19903000E+1,0.00000000E+0 - ,0.24633950E+3,0.216E+3,0.850E+2,0.19903000E+1,0.00000000E+0 - ,0.22753380E+3,0.216E+3,0.860E+2,0.19903000E+1,0.00000000E+0 - ,0.68102410E+3,0.216E+3,0.870E+2,0.19903000E+1,0.00000000E+0 - ,0.66741950E+3,0.216E+3,0.880E+2,0.19903000E+1,0.00000000E+0 - ,0.59723200E+3,0.216E+3,0.890E+2,0.19903000E+1,0.00000000E+0 - ,0.54474490E+3,0.216E+3,0.900E+2,0.19903000E+1,0.00000000E+0 - ,0.53715360E+3,0.216E+3,0.910E+2,0.19903000E+1,0.00000000E+0 - ,0.52027520E+3,0.216E+3,0.920E+2,0.19903000E+1,0.00000000E+0 - ,0.53064210E+3,0.216E+3,0.930E+2,0.19903000E+1,0.00000000E+0 - ,0.51469140E+3,0.216E+3,0.940E+2,0.19903000E+1,0.00000000E+0 - ,0.30774700E+2,0.216E+3,0.101E+3,0.19903000E+1,0.00000000E+0 - ,0.95053100E+2,0.216E+3,0.103E+3,0.19903000E+1,0.98650000E+0 - ,0.12215340E+3,0.216E+3,0.104E+3,0.19903000E+1,0.98080000E+0 - ,0.96110000E+2,0.216E+3,0.105E+3,0.19903000E+1,0.97060000E+0 - ,0.73700600E+2,0.216E+3,0.106E+3,0.19903000E+1,0.98680000E+0 - ,0.52175300E+2,0.216E+3,0.107E+3,0.19903000E+1,0.99440000E+0 - ,0.38527600E+2,0.216E+3,0.108E+3,0.19903000E+1,0.99250000E+0 - ,0.26916300E+2,0.216E+3,0.109E+3,0.19903000E+1,0.99820000E+0 - ,0.13811660E+3,0.216E+3,0.111E+3,0.19903000E+1,0.96840000E+0 - ,0.21310360E+3,0.216E+3,0.112E+3,0.19903000E+1,0.96280000E+0 - ,0.21912850E+3,0.216E+3,0.113E+3,0.19903000E+1,0.96480000E+0 - ,0.18016220E+3,0.216E+3,0.114E+3,0.19903000E+1,0.95070000E+0 - ,0.15007480E+3,0.216E+3,0.115E+3,0.19903000E+1,0.99470000E+0 - ,0.12837640E+3,0.216E+3,0.116E+3,0.19903000E+1,0.99480000E+0 - ,0.10616060E+3,0.216E+3,0.117E+3,0.19903000E+1,0.99720000E+0 - ,0.19334120E+3,0.216E+3,0.119E+3,0.19903000E+1,0.97670000E+0 - ,0.35561610E+3,0.216E+3,0.120E+3,0.19903000E+1,0.98310000E+0 - ,0.19666010E+3,0.216E+3,0.121E+3,0.19903000E+1,0.18627000E+1 - ,0.19002900E+3,0.216E+3,0.122E+3,0.19903000E+1,0.18299000E+1 - ,0.18615760E+3,0.216E+3,0.123E+3,0.19903000E+1,0.19138000E+1 - ,0.18402800E+3,0.216E+3,0.124E+3,0.19903000E+1,0.18269000E+1 - ,0.17103060E+3,0.216E+3,0.125E+3,0.19903000E+1,0.16406000E+1 - ,0.15879330E+3,0.216E+3,0.126E+3,0.19903000E+1,0.16483000E+1 - ,0.15149830E+3,0.216E+3,0.127E+3,0.19903000E+1,0.17149000E+1 - ,0.14797530E+3,0.216E+3,0.128E+3,0.19903000E+1,0.17937000E+1 - ,0.14502500E+3,0.216E+3,0.129E+3,0.19903000E+1,0.95760000E+0 - ,0.13803960E+3,0.216E+3,0.130E+3,0.19903000E+1,0.19419000E+1 - ,0.21921940E+3,0.216E+3,0.131E+3,0.19903000E+1,0.96010000E+0 - ,0.19595580E+3,0.216E+3,0.132E+3,0.19903000E+1,0.94340000E+0 - ,0.17790880E+3,0.216E+3,0.133E+3,0.19903000E+1,0.98890000E+0 - ,0.16390830E+3,0.216E+3,0.134E+3,0.19903000E+1,0.99010000E+0 - ,0.14577240E+3,0.216E+3,0.135E+3,0.19903000E+1,0.99740000E+0 - ,0.23172650E+3,0.216E+3,0.137E+3,0.19903000E+1,0.97380000E+0 - ,0.43227830E+3,0.216E+3,0.138E+3,0.19903000E+1,0.98010000E+0 - ,0.33980820E+3,0.216E+3,0.139E+3,0.19903000E+1,0.19153000E+1 - ,0.25999910E+3,0.216E+3,0.140E+3,0.19903000E+1,0.19355000E+1 - ,0.26242950E+3,0.216E+3,0.141E+3,0.19903000E+1,0.19545000E+1 - ,0.24567190E+3,0.216E+3,0.142E+3,0.19903000E+1,0.19420000E+1 - ,0.27194340E+3,0.216E+3,0.143E+3,0.19903000E+1,0.16682000E+1 - ,0.21620660E+3,0.216E+3,0.144E+3,0.19903000E+1,0.18584000E+1 - ,0.20248030E+3,0.216E+3,0.145E+3,0.19903000E+1,0.19003000E+1 - ,0.18837520E+3,0.216E+3,0.146E+3,0.19903000E+1,0.18630000E+1 - ,0.18191000E+3,0.216E+3,0.147E+3,0.19903000E+1,0.96790000E+0 - ,0.18125820E+3,0.216E+3,0.148E+3,0.19903000E+1,0.19539000E+1 - ,0.27850870E+3,0.216E+3,0.149E+3,0.19903000E+1,0.96330000E+0 - ,0.25563360E+3,0.216E+3,0.150E+3,0.19903000E+1,0.95140000E+0 - ,0.24188440E+3,0.216E+3,0.151E+3,0.19903000E+1,0.97490000E+0 - ,0.23047020E+3,0.216E+3,0.152E+3,0.19903000E+1,0.98110000E+0 - ,0.21226280E+3,0.216E+3,0.153E+3,0.19903000E+1,0.99680000E+0 - ,0.27721210E+3,0.216E+3,0.155E+3,0.19903000E+1,0.99090000E+0 - ,0.55799180E+3,0.216E+3,0.156E+3,0.19903000E+1,0.97970000E+0 - ,0.42930150E+3,0.216E+3,0.157E+3,0.19903000E+1,0.19373000E+1 - ,0.28192380E+3,0.216E+3,0.159E+3,0.19903000E+1,0.29425000E+1 - ,0.27612630E+3,0.216E+3,0.160E+3,0.19903000E+1,0.29455000E+1 - ,0.26756270E+3,0.216E+3,0.161E+3,0.19903000E+1,0.29413000E+1 - ,0.26833820E+3,0.216E+3,0.162E+3,0.19903000E+1,0.29300000E+1 - ,0.25690680E+3,0.216E+3,0.163E+3,0.19903000E+1,0.18286000E+1 - ,0.26982370E+3,0.216E+3,0.164E+3,0.19903000E+1,0.28732000E+1 - ,0.25386320E+3,0.216E+3,0.165E+3,0.19903000E+1,0.29086000E+1 - ,0.25739270E+3,0.216E+3,0.166E+3,0.19903000E+1,0.28965000E+1 - ,0.24138000E+3,0.216E+3,0.167E+3,0.19903000E+1,0.29242000E+1 - ,0.23465510E+3,0.216E+3,0.168E+3,0.19903000E+1,0.29282000E+1 - ,0.23302060E+3,0.216E+3,0.169E+3,0.19903000E+1,0.29246000E+1 - ,0.24417040E+3,0.216E+3,0.170E+3,0.19903000E+1,0.28482000E+1 - ,0.22545330E+3,0.216E+3,0.171E+3,0.19903000E+1,0.29219000E+1 - ,0.29846420E+3,0.216E+3,0.172E+3,0.19903000E+1,0.19254000E+1 - ,0.27931410E+3,0.216E+3,0.173E+3,0.19903000E+1,0.19459000E+1 - ,0.25702350E+3,0.216E+3,0.174E+3,0.19903000E+1,0.19292000E+1 - ,0.25811720E+3,0.216E+3,0.175E+3,0.19903000E+1,0.18104000E+1 - ,0.23037700E+3,0.216E+3,0.176E+3,0.19903000E+1,0.18858000E+1 - ,0.21735740E+3,0.216E+3,0.177E+3,0.19903000E+1,0.18648000E+1 - ,0.20795360E+3,0.216E+3,0.178E+3,0.19903000E+1,0.19188000E+1 - ,0.19875510E+3,0.216E+3,0.179E+3,0.19903000E+1,0.98460000E+0 - ,0.19332900E+3,0.216E+3,0.180E+3,0.19903000E+1,0.19896000E+1 - ,0.30009690E+3,0.216E+3,0.181E+3,0.19903000E+1,0.92670000E+0 - ,0.27730190E+3,0.216E+3,0.182E+3,0.19903000E+1,0.93830000E+0 - ,0.27095850E+3,0.216E+3,0.183E+3,0.19903000E+1,0.98200000E+0 - ,0.26500160E+3,0.216E+3,0.184E+3,0.19903000E+1,0.98150000E+0 - ,0.24934960E+3,0.216E+3,0.185E+3,0.19903000E+1,0.99540000E+0 - ,0.31247270E+3,0.216E+3,0.187E+3,0.19903000E+1,0.97050000E+0 - ,0.55992810E+3,0.216E+3,0.188E+3,0.19903000E+1,0.96620000E+0 - ,0.33346380E+3,0.216E+3,0.189E+3,0.19903000E+1,0.29070000E+1 - ,0.38050360E+3,0.216E+3,0.190E+3,0.19903000E+1,0.28844000E+1 - ,0.34179510E+3,0.216E+3,0.191E+3,0.19903000E+1,0.28738000E+1 - ,0.30467440E+3,0.216E+3,0.192E+3,0.19903000E+1,0.28878000E+1 - ,0.29376970E+3,0.216E+3,0.193E+3,0.19903000E+1,0.29095000E+1 - ,0.34471170E+3,0.216E+3,0.194E+3,0.19903000E+1,0.19209000E+1 - ,0.82197300E+2,0.216E+3,0.204E+3,0.19903000E+1,0.19697000E+1 - ,0.81269300E+2,0.216E+3,0.205E+3,0.19903000E+1,0.19441000E+1 - ,0.60669000E+2,0.216E+3,0.206E+3,0.19903000E+1,0.19985000E+1 - ,0.49062900E+2,0.216E+3,0.207E+3,0.19903000E+1,0.20143000E+1 - ,0.34104200E+2,0.216E+3,0.208E+3,0.19903000E+1,0.19887000E+1 - ,0.14355230E+3,0.216E+3,0.212E+3,0.19903000E+1,0.19496000E+1 - ,0.17327790E+3,0.216E+3,0.213E+3,0.19903000E+1,0.19311000E+1 - ,0.16813020E+3,0.216E+3,0.214E+3,0.19903000E+1,0.19435000E+1 - ,0.14787500E+3,0.216E+3,0.215E+3,0.19903000E+1,0.20102000E+1 - ,0.12581090E+3,0.216E+3,0.216E+3,0.19903000E+1,0.19903000E+1 - ,0.30678300E+2,0.220E+3,0.100E+1,0.19349000E+1,0.91180000E+0 - ,0.19724700E+2,0.220E+3,0.200E+1,0.19349000E+1,0.00000000E+0 - ,0.52531960E+3,0.220E+3,0.300E+1,0.19349000E+1,0.00000000E+0 - ,0.29170210E+3,0.220E+3,0.400E+1,0.19349000E+1,0.00000000E+0 - ,0.19141350E+3,0.220E+3,0.500E+1,0.19349000E+1,0.00000000E+0 - ,0.12668360E+3,0.220E+3,0.600E+1,0.19349000E+1,0.00000000E+0 - ,0.87190600E+2,0.220E+3,0.700E+1,0.19349000E+1,0.00000000E+0 - ,0.65252500E+2,0.220E+3,0.800E+1,0.19349000E+1,0.00000000E+0 - ,0.48933100E+2,0.220E+3,0.900E+1,0.19349000E+1,0.00000000E+0 - ,0.37325800E+2,0.220E+3,0.100E+2,0.19349000E+1,0.00000000E+0 - ,0.62655260E+3,0.220E+3,0.110E+2,0.19349000E+1,0.00000000E+0 - ,0.46815270E+3,0.220E+3,0.120E+2,0.19349000E+1,0.00000000E+0 - ,0.42605680E+3,0.220E+3,0.130E+2,0.19349000E+1,0.00000000E+0 - ,0.32981710E+3,0.220E+3,0.140E+2,0.19349000E+1,0.00000000E+0 - ,0.25315190E+3,0.220E+3,0.150E+2,0.19349000E+1,0.00000000E+0 - ,0.20785310E+3,0.220E+3,0.160E+2,0.19349000E+1,0.00000000E+0 - ,0.16800650E+3,0.220E+3,0.170E+2,0.19349000E+1,0.00000000E+0 - ,0.13616380E+3,0.220E+3,0.180E+2,0.19349000E+1,0.00000000E+0 - ,0.10305394E+4,0.220E+3,0.190E+2,0.19349000E+1,0.00000000E+0 - ,0.83223790E+3,0.220E+3,0.200E+2,0.19349000E+1,0.00000000E+0 - ,0.68387860E+3,0.220E+3,0.210E+2,0.19349000E+1,0.00000000E+0 - ,0.65674740E+3,0.220E+3,0.220E+2,0.19349000E+1,0.00000000E+0 - ,0.59945210E+3,0.220E+3,0.230E+2,0.19349000E+1,0.00000000E+0 - ,0.47138320E+3,0.220E+3,0.240E+2,0.19349000E+1,0.00000000E+0 - ,0.51365160E+3,0.220E+3,0.250E+2,0.19349000E+1,0.00000000E+0 - ,0.40218720E+3,0.220E+3,0.260E+2,0.19349000E+1,0.00000000E+0 - ,0.42395230E+3,0.220E+3,0.270E+2,0.19349000E+1,0.00000000E+0 - ,0.43824820E+3,0.220E+3,0.280E+2,0.19349000E+1,0.00000000E+0 - ,0.33535920E+3,0.220E+3,0.290E+2,0.19349000E+1,0.00000000E+0 - ,0.34119230E+3,0.220E+3,0.300E+2,0.19349000E+1,0.00000000E+0 - ,0.40564880E+3,0.220E+3,0.310E+2,0.19349000E+1,0.00000000E+0 - ,0.35293360E+3,0.220E+3,0.320E+2,0.19349000E+1,0.00000000E+0 - ,0.29714260E+3,0.220E+3,0.330E+2,0.19349000E+1,0.00000000E+0 - ,0.26437900E+3,0.220E+3,0.340E+2,0.19349000E+1,0.00000000E+0 - ,0.22931470E+3,0.220E+3,0.350E+2,0.19349000E+1,0.00000000E+0 - ,0.19776450E+3,0.220E+3,0.360E+2,0.19349000E+1,0.00000000E+0 - ,0.11520197E+4,0.220E+3,0.370E+2,0.19349000E+1,0.00000000E+0 - ,0.99191430E+3,0.220E+3,0.380E+2,0.19349000E+1,0.00000000E+0 - ,0.86032290E+3,0.220E+3,0.390E+2,0.19349000E+1,0.00000000E+0 - ,0.76820000E+3,0.220E+3,0.400E+2,0.19349000E+1,0.00000000E+0 - ,0.69731480E+3,0.220E+3,0.410E+2,0.19349000E+1,0.00000000E+0 - ,0.53379780E+3,0.220E+3,0.420E+2,0.19349000E+1,0.00000000E+0 - ,0.59749150E+3,0.220E+3,0.430E+2,0.19349000E+1,0.00000000E+0 - ,0.45095970E+3,0.220E+3,0.440E+2,0.19349000E+1,0.00000000E+0 - ,0.49339260E+3,0.220E+3,0.450E+2,0.19349000E+1,0.00000000E+0 - ,0.45620630E+3,0.220E+3,0.460E+2,0.19349000E+1,0.00000000E+0 - ,0.38042830E+3,0.220E+3,0.470E+2,0.19349000E+1,0.00000000E+0 - ,0.40045350E+3,0.220E+3,0.480E+2,0.19349000E+1,0.00000000E+0 - ,0.50726050E+3,0.220E+3,0.490E+2,0.19349000E+1,0.00000000E+0 - ,0.46411930E+3,0.220E+3,0.500E+2,0.19349000E+1,0.00000000E+0 - ,0.40901730E+3,0.220E+3,0.510E+2,0.19349000E+1,0.00000000E+0 - ,0.37680930E+3,0.220E+3,0.520E+2,0.19349000E+1,0.00000000E+0 - ,0.33804940E+3,0.220E+3,0.530E+2,0.19349000E+1,0.00000000E+0 - ,0.30162730E+3,0.220E+3,0.540E+2,0.19349000E+1,0.00000000E+0 - ,0.14021290E+4,0.220E+3,0.550E+2,0.19349000E+1,0.00000000E+0 - ,0.12678490E+4,0.220E+3,0.560E+2,0.19349000E+1,0.00000000E+0 - ,0.11031556E+4,0.220E+3,0.570E+2,0.19349000E+1,0.00000000E+0 - ,0.48397150E+3,0.220E+3,0.580E+2,0.19349000E+1,0.27991000E+1 - ,0.11194842E+4,0.220E+3,0.590E+2,0.19349000E+1,0.00000000E+0 - ,0.10733952E+4,0.220E+3,0.600E+2,0.19349000E+1,0.00000000E+0 - ,0.10460388E+4,0.220E+3,0.610E+2,0.19349000E+1,0.00000000E+0 - ,0.10209351E+4,0.220E+3,0.620E+2,0.19349000E+1,0.00000000E+0 - ,0.99865850E+3,0.220E+3,0.630E+2,0.19349000E+1,0.00000000E+0 - ,0.77606950E+3,0.220E+3,0.640E+2,0.19349000E+1,0.00000000E+0 - ,0.88704210E+3,0.220E+3,0.650E+2,0.19349000E+1,0.00000000E+0 - ,0.85381990E+3,0.220E+3,0.660E+2,0.19349000E+1,0.00000000E+0 - ,0.89865150E+3,0.220E+3,0.670E+2,0.19349000E+1,0.00000000E+0 - ,0.87938870E+3,0.220E+3,0.680E+2,0.19349000E+1,0.00000000E+0 - ,0.86189750E+3,0.220E+3,0.690E+2,0.19349000E+1,0.00000000E+0 - ,0.85225470E+3,0.220E+3,0.700E+2,0.19349000E+1,0.00000000E+0 - ,0.71226080E+3,0.220E+3,0.710E+2,0.19349000E+1,0.00000000E+0 - ,0.69344710E+3,0.220E+3,0.720E+2,0.19349000E+1,0.00000000E+0 - ,0.62855660E+3,0.220E+3,0.730E+2,0.19349000E+1,0.00000000E+0 - ,0.52745270E+3,0.220E+3,0.740E+2,0.19349000E+1,0.00000000E+0 - ,0.53533140E+3,0.220E+3,0.750E+2,0.19349000E+1,0.00000000E+0 - ,0.48222940E+3,0.220E+3,0.760E+2,0.19349000E+1,0.00000000E+0 - ,0.43941270E+3,0.220E+3,0.770E+2,0.19349000E+1,0.00000000E+0 - ,0.36278720E+3,0.220E+3,0.780E+2,0.19349000E+1,0.00000000E+0 - ,0.33812750E+3,0.220E+3,0.790E+2,0.19349000E+1,0.00000000E+0 - ,0.34721000E+3,0.220E+3,0.800E+2,0.19349000E+1,0.00000000E+0 - ,0.51871070E+3,0.220E+3,0.810E+2,0.19349000E+1,0.00000000E+0 - ,0.50321870E+3,0.220E+3,0.820E+2,0.19349000E+1,0.00000000E+0 - ,0.45790780E+3,0.220E+3,0.830E+2,0.19349000E+1,0.00000000E+0 - ,0.43414870E+3,0.220E+3,0.840E+2,0.19349000E+1,0.00000000E+0 - ,0.39775460E+3,0.220E+3,0.850E+2,0.19349000E+1,0.00000000E+0 - ,0.36206750E+3,0.220E+3,0.860E+2,0.19349000E+1,0.00000000E+0 - ,0.13139837E+4,0.220E+3,0.870E+2,0.19349000E+1,0.00000000E+0 - ,0.12471871E+4,0.220E+3,0.880E+2,0.19349000E+1,0.00000000E+0 - ,0.10925678E+4,0.220E+3,0.890E+2,0.19349000E+1,0.00000000E+0 - ,0.97093620E+3,0.220E+3,0.900E+2,0.19349000E+1,0.00000000E+0 - ,0.96877080E+3,0.220E+3,0.910E+2,0.19349000E+1,0.00000000E+0 - ,0.93774220E+3,0.220E+3,0.920E+2,0.19349000E+1,0.00000000E+0 - ,0.97203520E+3,0.220E+3,0.930E+2,0.19349000E+1,0.00000000E+0 - ,0.94020330E+3,0.220E+3,0.940E+2,0.19349000E+1,0.00000000E+0 - ,0.50236800E+2,0.220E+3,0.101E+3,0.19349000E+1,0.00000000E+0 - ,0.16890090E+3,0.220E+3,0.103E+3,0.19349000E+1,0.98650000E+0 - ,0.21431710E+3,0.220E+3,0.104E+3,0.19349000E+1,0.98080000E+0 - ,0.16007340E+3,0.220E+3,0.105E+3,0.19349000E+1,0.97060000E+0 - ,0.11882550E+3,0.220E+3,0.106E+3,0.19349000E+1,0.98680000E+0 - ,0.81252500E+2,0.220E+3,0.107E+3,0.19349000E+1,0.99440000E+0 - ,0.58342300E+2,0.220E+3,0.108E+3,0.19349000E+1,0.99250000E+0 - ,0.39404800E+2,0.220E+3,0.109E+3,0.19349000E+1,0.99820000E+0 - ,0.24782230E+3,0.220E+3,0.111E+3,0.19349000E+1,0.96840000E+0 - ,0.38413080E+3,0.220E+3,0.112E+3,0.19349000E+1,0.96280000E+0 - ,0.38485550E+3,0.220E+3,0.113E+3,0.19349000E+1,0.96480000E+0 - ,0.30397250E+3,0.220E+3,0.114E+3,0.19349000E+1,0.95070000E+0 - ,0.24556540E+3,0.220E+3,0.115E+3,0.19349000E+1,0.99470000E+0 - ,0.20560060E+3,0.220E+3,0.116E+3,0.19349000E+1,0.99480000E+0 - ,0.16628780E+3,0.220E+3,0.117E+3,0.19349000E+1,0.99720000E+0 - ,0.33777950E+3,0.220E+3,0.119E+3,0.19349000E+1,0.97670000E+0 - ,0.66406200E+3,0.220E+3,0.120E+3,0.19349000E+1,0.98310000E+0 - ,0.33367800E+3,0.220E+3,0.121E+3,0.19349000E+1,0.18627000E+1 - ,0.32184410E+3,0.220E+3,0.122E+3,0.19349000E+1,0.18299000E+1 - ,0.31546860E+3,0.220E+3,0.123E+3,0.19349000E+1,0.19138000E+1 - ,0.31305380E+3,0.220E+3,0.124E+3,0.19349000E+1,0.18269000E+1 - ,0.28580680E+3,0.220E+3,0.125E+3,0.19349000E+1,0.16406000E+1 - ,0.26379300E+3,0.220E+3,0.126E+3,0.19349000E+1,0.16483000E+1 - ,0.25158410E+3,0.220E+3,0.127E+3,0.19349000E+1,0.17149000E+1 - ,0.24611560E+3,0.220E+3,0.128E+3,0.19349000E+1,0.17937000E+1 - ,0.24467160E+3,0.220E+3,0.129E+3,0.19349000E+1,0.95760000E+0 - ,0.22701180E+3,0.220E+3,0.130E+3,0.19349000E+1,0.19419000E+1 - ,0.37966500E+3,0.220E+3,0.131E+3,0.19349000E+1,0.96010000E+0 - ,0.32905540E+3,0.220E+3,0.132E+3,0.19349000E+1,0.94340000E+0 - ,0.29186010E+3,0.220E+3,0.133E+3,0.19349000E+1,0.98890000E+0 - ,0.26450720E+3,0.220E+3,0.134E+3,0.19349000E+1,0.99010000E+0 - ,0.23101070E+3,0.220E+3,0.135E+3,0.19349000E+1,0.99740000E+0 - ,0.40165720E+3,0.220E+3,0.137E+3,0.19349000E+1,0.97380000E+0 - ,0.80869090E+3,0.220E+3,0.138E+3,0.19349000E+1,0.98010000E+0 - ,0.60584530E+3,0.220E+3,0.139E+3,0.19349000E+1,0.19153000E+1 - ,0.44149510E+3,0.220E+3,0.140E+3,0.19349000E+1,0.19355000E+1 - ,0.44598950E+3,0.220E+3,0.141E+3,0.19349000E+1,0.19545000E+1 - ,0.41448110E+3,0.220E+3,0.142E+3,0.19349000E+1,0.19420000E+1 - ,0.46957520E+3,0.220E+3,0.143E+3,0.19349000E+1,0.16682000E+1 - ,0.35837320E+3,0.220E+3,0.144E+3,0.19349000E+1,0.18584000E+1 - ,0.33488270E+3,0.220E+3,0.145E+3,0.19349000E+1,0.19003000E+1 - ,0.31039090E+3,0.220E+3,0.146E+3,0.19349000E+1,0.18630000E+1 - ,0.30060940E+3,0.220E+3,0.147E+3,0.19349000E+1,0.96790000E+0 - ,0.29569410E+3,0.220E+3,0.148E+3,0.19349000E+1,0.19539000E+1 - ,0.48167290E+3,0.220E+3,0.149E+3,0.19349000E+1,0.96330000E+0 - ,0.43088530E+3,0.220E+3,0.150E+3,0.19349000E+1,0.95140000E+0 - ,0.40023370E+3,0.220E+3,0.151E+3,0.19349000E+1,0.97490000E+0 - ,0.37637060E+3,0.220E+3,0.152E+3,0.19349000E+1,0.98110000E+0 - ,0.34127320E+3,0.220E+3,0.153E+3,0.19349000E+1,0.99680000E+0 - ,0.47105090E+3,0.220E+3,0.155E+3,0.19349000E+1,0.99090000E+0 - ,0.10519461E+4,0.220E+3,0.156E+3,0.19349000E+1,0.97970000E+0 - ,0.76794120E+3,0.220E+3,0.157E+3,0.19349000E+1,0.19373000E+1 - ,0.46904980E+3,0.220E+3,0.159E+3,0.19349000E+1,0.29425000E+1 - ,0.45929190E+3,0.220E+3,0.160E+3,0.19349000E+1,0.29455000E+1 - ,0.44446290E+3,0.220E+3,0.161E+3,0.19349000E+1,0.29413000E+1 - ,0.44738260E+3,0.220E+3,0.162E+3,0.19349000E+1,0.29300000E+1 - ,0.43352520E+3,0.220E+3,0.163E+3,0.19349000E+1,0.18286000E+1 - ,0.45052800E+3,0.220E+3,0.164E+3,0.19349000E+1,0.28732000E+1 - ,0.42251560E+3,0.220E+3,0.165E+3,0.19349000E+1,0.29086000E+1 - ,0.43117490E+3,0.220E+3,0.166E+3,0.19349000E+1,0.28965000E+1 - ,0.40047540E+3,0.220E+3,0.167E+3,0.19349000E+1,0.29242000E+1 - ,0.38885070E+3,0.220E+3,0.168E+3,0.19349000E+1,0.29282000E+1 - ,0.38653820E+3,0.220E+3,0.169E+3,0.19349000E+1,0.29246000E+1 - ,0.40739760E+3,0.220E+3,0.170E+3,0.19349000E+1,0.28482000E+1 - ,0.37332130E+3,0.220E+3,0.171E+3,0.19349000E+1,0.29219000E+1 - ,0.51554770E+3,0.220E+3,0.172E+3,0.19349000E+1,0.19254000E+1 - ,0.47526240E+3,0.220E+3,0.173E+3,0.19349000E+1,0.19459000E+1 - ,0.43058420E+3,0.220E+3,0.174E+3,0.19349000E+1,0.19292000E+1 - ,0.43832070E+3,0.220E+3,0.175E+3,0.19349000E+1,0.18104000E+1 - ,0.37753700E+3,0.220E+3,0.176E+3,0.19349000E+1,0.18858000E+1 - ,0.35420050E+3,0.220E+3,0.177E+3,0.19349000E+1,0.18648000E+1 - ,0.33773330E+3,0.220E+3,0.178E+3,0.19349000E+1,0.19188000E+1 - ,0.32285240E+3,0.220E+3,0.179E+3,0.19349000E+1,0.98460000E+0 - ,0.31020900E+3,0.220E+3,0.180E+3,0.19349000E+1,0.19896000E+1 - ,0.51564400E+3,0.220E+3,0.181E+3,0.19349000E+1,0.92670000E+0 - ,0.46487620E+3,0.220E+3,0.182E+3,0.19349000E+1,0.93830000E+0 - ,0.44812230E+3,0.220E+3,0.183E+3,0.19349000E+1,0.98200000E+0 - ,0.43387110E+3,0.220E+3,0.184E+3,0.19349000E+1,0.98150000E+0 - ,0.40255590E+3,0.220E+3,0.185E+3,0.19349000E+1,0.99540000E+0 - ,0.53018890E+3,0.220E+3,0.187E+3,0.19349000E+1,0.97050000E+0 - ,0.10398007E+4,0.220E+3,0.188E+3,0.19349000E+1,0.96620000E+0 - ,0.55526920E+3,0.220E+3,0.189E+3,0.19349000E+1,0.29070000E+1 - ,0.64689110E+3,0.220E+3,0.190E+3,0.19349000E+1,0.28844000E+1 - ,0.57609270E+3,0.220E+3,0.191E+3,0.19349000E+1,0.28738000E+1 - ,0.50534480E+3,0.220E+3,0.192E+3,0.19349000E+1,0.28878000E+1 - ,0.48542450E+3,0.220E+3,0.193E+3,0.19349000E+1,0.29095000E+1 - ,0.59584710E+3,0.220E+3,0.194E+3,0.19349000E+1,0.19209000E+1 - ,0.13659980E+3,0.220E+3,0.204E+3,0.19349000E+1,0.19697000E+1 - ,0.13359950E+3,0.220E+3,0.205E+3,0.19349000E+1,0.19441000E+1 - ,0.96055300E+2,0.220E+3,0.206E+3,0.19349000E+1,0.19985000E+1 - ,0.76136500E+2,0.220E+3,0.207E+3,0.19349000E+1,0.20143000E+1 - ,0.51242500E+2,0.220E+3,0.208E+3,0.19349000E+1,0.19887000E+1 - ,0.24509830E+3,0.220E+3,0.212E+3,0.19349000E+1,0.19496000E+1 - ,0.29655720E+3,0.220E+3,0.213E+3,0.19349000E+1,0.19311000E+1 - ,0.28198140E+3,0.220E+3,0.214E+3,0.19349000E+1,0.19435000E+1 - ,0.24244540E+3,0.220E+3,0.215E+3,0.19349000E+1,0.20102000E+1 - ,0.20138950E+3,0.220E+3,0.216E+3,0.19349000E+1,0.19903000E+1 - ,0.34333430E+3,0.220E+3,0.220E+3,0.19349000E+1,0.19349000E+1 - ,0.29861500E+2,0.221E+3,0.100E+1,0.28999000E+1,0.91180000E+0 - ,0.19430400E+2,0.221E+3,0.200E+1,0.28999000E+1,0.00000000E+0 - ,0.48195860E+3,0.221E+3,0.300E+1,0.28999000E+1,0.00000000E+0 - ,0.27500610E+3,0.221E+3,0.400E+1,0.28999000E+1,0.00000000E+0 - ,0.18324130E+3,0.221E+3,0.500E+1,0.28999000E+1,0.00000000E+0 - ,0.12261150E+3,0.221E+3,0.600E+1,0.28999000E+1,0.00000000E+0 - ,0.85046400E+2,0.221E+3,0.700E+1,0.28999000E+1,0.00000000E+0 - ,0.63983900E+2,0.221E+3,0.800E+1,0.28999000E+1,0.00000000E+0 - ,0.48189200E+2,0.221E+3,0.900E+1,0.28999000E+1,0.00000000E+0 - ,0.36880000E+2,0.221E+3,0.100E+2,0.28999000E+1,0.00000000E+0 - ,0.57574000E+3,0.221E+3,0.110E+2,0.28999000E+1,0.00000000E+0 - ,0.43920300E+3,0.221E+3,0.120E+2,0.28999000E+1,0.00000000E+0 - ,0.40293570E+3,0.221E+3,0.130E+2,0.28999000E+1,0.00000000E+0 - ,0.31526550E+3,0.221E+3,0.140E+2,0.28999000E+1,0.00000000E+0 - ,0.24412340E+3,0.221E+3,0.150E+2,0.28999000E+1,0.00000000E+0 - ,0.20154660E+3,0.221E+3,0.160E+2,0.28999000E+1,0.00000000E+0 - ,0.16374820E+3,0.221E+3,0.170E+2,0.28999000E+1,0.00000000E+0 - ,0.13328650E+3,0.221E+3,0.180E+2,0.28999000E+1,0.00000000E+0 - ,0.94339620E+3,0.221E+3,0.190E+2,0.28999000E+1,0.00000000E+0 - ,0.77413680E+3,0.221E+3,0.200E+2,0.28999000E+1,0.00000000E+0 - ,0.63848690E+3,0.221E+3,0.210E+2,0.28999000E+1,0.00000000E+0 - ,0.61524940E+3,0.221E+3,0.220E+2,0.28999000E+1,0.00000000E+0 - ,0.56271800E+3,0.221E+3,0.230E+2,0.28999000E+1,0.00000000E+0 - ,0.44267360E+3,0.221E+3,0.240E+2,0.28999000E+1,0.00000000E+0 - ,0.48359930E+3,0.221E+3,0.250E+2,0.28999000E+1,0.00000000E+0 - ,0.37893660E+3,0.221E+3,0.260E+2,0.28999000E+1,0.00000000E+0 - ,0.40112950E+3,0.221E+3,0.270E+2,0.28999000E+1,0.00000000E+0 - ,0.41378410E+3,0.221E+3,0.280E+2,0.28999000E+1,0.00000000E+0 - ,0.31671020E+3,0.221E+3,0.290E+2,0.28999000E+1,0.00000000E+0 - ,0.32428910E+3,0.221E+3,0.300E+2,0.28999000E+1,0.00000000E+0 - ,0.38481720E+3,0.221E+3,0.310E+2,0.28999000E+1,0.00000000E+0 - ,0.33757610E+3,0.221E+3,0.320E+2,0.28999000E+1,0.00000000E+0 - ,0.28630450E+3,0.221E+3,0.330E+2,0.28999000E+1,0.00000000E+0 - ,0.25587020E+3,0.221E+3,0.340E+2,0.28999000E+1,0.00000000E+0 - ,0.22292560E+3,0.221E+3,0.350E+2,0.28999000E+1,0.00000000E+0 - ,0.19302240E+3,0.221E+3,0.360E+2,0.28999000E+1,0.00000000E+0 - ,0.10561444E+4,0.221E+3,0.370E+2,0.28999000E+1,0.00000000E+0 - ,0.92214300E+3,0.221E+3,0.380E+2,0.28999000E+1,0.00000000E+0 - ,0.80504650E+3,0.221E+3,0.390E+2,0.28999000E+1,0.00000000E+0 - ,0.72178370E+3,0.221E+3,0.400E+2,0.28999000E+1,0.00000000E+0 - ,0.65695460E+3,0.221E+3,0.410E+2,0.28999000E+1,0.00000000E+0 - ,0.50523460E+3,0.221E+3,0.420E+2,0.28999000E+1,0.00000000E+0 - ,0.56455600E+3,0.221E+3,0.430E+2,0.28999000E+1,0.00000000E+0 - ,0.42826290E+3,0.221E+3,0.440E+2,0.28999000E+1,0.00000000E+0 - ,0.46853580E+3,0.221E+3,0.450E+2,0.28999000E+1,0.00000000E+0 - ,0.43394840E+3,0.221E+3,0.460E+2,0.28999000E+1,0.00000000E+0 - ,0.36150570E+3,0.221E+3,0.470E+2,0.28999000E+1,0.00000000E+0 - ,0.38172980E+3,0.221E+3,0.480E+2,0.28999000E+1,0.00000000E+0 - ,0.48100660E+3,0.221E+3,0.490E+2,0.28999000E+1,0.00000000E+0 - ,0.44306050E+3,0.221E+3,0.500E+2,0.28999000E+1,0.00000000E+0 - ,0.39301150E+3,0.221E+3,0.510E+2,0.28999000E+1,0.00000000E+0 - ,0.36347770E+3,0.221E+3,0.520E+2,0.28999000E+1,0.00000000E+0 - ,0.32743400E+3,0.221E+3,0.530E+2,0.28999000E+1,0.00000000E+0 - ,0.29327410E+3,0.221E+3,0.540E+2,0.28999000E+1,0.00000000E+0 - ,0.12859957E+4,0.221E+3,0.550E+2,0.28999000E+1,0.00000000E+0 - ,0.11762602E+4,0.221E+3,0.560E+2,0.28999000E+1,0.00000000E+0 - ,0.10300975E+4,0.221E+3,0.570E+2,0.28999000E+1,0.00000000E+0 - ,0.46446000E+3,0.221E+3,0.580E+2,0.28999000E+1,0.27991000E+1 - ,0.10408154E+4,0.221E+3,0.590E+2,0.28999000E+1,0.00000000E+0 - ,0.99899710E+3,0.221E+3,0.600E+2,0.28999000E+1,0.00000000E+0 - ,0.97382280E+3,0.221E+3,0.610E+2,0.28999000E+1,0.00000000E+0 - ,0.95069090E+3,0.221E+3,0.620E+2,0.28999000E+1,0.00000000E+0 - ,0.93017500E+3,0.221E+3,0.630E+2,0.28999000E+1,0.00000000E+0 - ,0.72811220E+3,0.221E+3,0.640E+2,0.28999000E+1,0.00000000E+0 - ,0.82368220E+3,0.221E+3,0.650E+2,0.28999000E+1,0.00000000E+0 - ,0.79385410E+3,0.221E+3,0.660E+2,0.28999000E+1,0.00000000E+0 - ,0.83837100E+3,0.221E+3,0.670E+2,0.28999000E+1,0.00000000E+0 - ,0.82054230E+3,0.221E+3,0.680E+2,0.28999000E+1,0.00000000E+0 - ,0.80442380E+3,0.221E+3,0.690E+2,0.28999000E+1,0.00000000E+0 - ,0.79518560E+3,0.221E+3,0.700E+2,0.28999000E+1,0.00000000E+0 - ,0.66789240E+3,0.221E+3,0.710E+2,0.28999000E+1,0.00000000E+0 - ,0.65462000E+3,0.221E+3,0.720E+2,0.28999000E+1,0.00000000E+0 - ,0.59577000E+3,0.221E+3,0.730E+2,0.28999000E+1,0.00000000E+0 - ,0.50153070E+3,0.221E+3,0.740E+2,0.28999000E+1,0.00000000E+0 - ,0.50981600E+3,0.221E+3,0.750E+2,0.28999000E+1,0.00000000E+0 - ,0.46083870E+3,0.221E+3,0.760E+2,0.28999000E+1,0.00000000E+0 - ,0.42109420E+3,0.221E+3,0.770E+2,0.28999000E+1,0.00000000E+0 - ,0.34866710E+3,0.221E+3,0.780E+2,0.28999000E+1,0.00000000E+0 - ,0.32533860E+3,0.221E+3,0.790E+2,0.28999000E+1,0.00000000E+0 - ,0.33453100E+3,0.221E+3,0.800E+2,0.28999000E+1,0.00000000E+0 - ,0.49268870E+3,0.221E+3,0.810E+2,0.28999000E+1,0.00000000E+0 - ,0.48044970E+3,0.221E+3,0.820E+2,0.28999000E+1,0.00000000E+0 - ,0.43974760E+3,0.221E+3,0.830E+2,0.28999000E+1,0.00000000E+0 - ,0.41833640E+3,0.221E+3,0.840E+2,0.28999000E+1,0.00000000E+0 - ,0.38479250E+3,0.221E+3,0.850E+2,0.28999000E+1,0.00000000E+0 - ,0.35151420E+3,0.221E+3,0.860E+2,0.28999000E+1,0.00000000E+0 - ,0.12112384E+4,0.221E+3,0.870E+2,0.28999000E+1,0.00000000E+0 - ,0.11609837E+4,0.221E+3,0.880E+2,0.28999000E+1,0.00000000E+0 - ,0.10231422E+4,0.221E+3,0.890E+2,0.28999000E+1,0.00000000E+0 - ,0.91552140E+3,0.221E+3,0.900E+2,0.28999000E+1,0.00000000E+0 - ,0.91036450E+3,0.221E+3,0.910E+2,0.28999000E+1,0.00000000E+0 - ,0.88134280E+3,0.221E+3,0.920E+2,0.28999000E+1,0.00000000E+0 - ,0.90964690E+3,0.221E+3,0.930E+2,0.28999000E+1,0.00000000E+0 - ,0.88054330E+3,0.221E+3,0.940E+2,0.28999000E+1,0.00000000E+0 - ,0.48492900E+2,0.221E+3,0.101E+3,0.28999000E+1,0.00000000E+0 - ,0.15957150E+3,0.221E+3,0.103E+3,0.28999000E+1,0.98650000E+0 - ,0.20306780E+3,0.221E+3,0.104E+3,0.28999000E+1,0.98080000E+0 - ,0.15370500E+3,0.221E+3,0.105E+3,0.28999000E+1,0.97060000E+0 - ,0.11497100E+3,0.221E+3,0.106E+3,0.28999000E+1,0.98680000E+0 - ,0.79258600E+2,0.221E+3,0.107E+3,0.28999000E+1,0.99440000E+0 - ,0.57280500E+2,0.221E+3,0.108E+3,0.28999000E+1,0.99250000E+0 - ,0.38989900E+2,0.221E+3,0.109E+3,0.28999000E+1,0.99820000E+0 - ,0.23346740E+3,0.221E+3,0.111E+3,0.28999000E+1,0.96840000E+0 - ,0.36145020E+3,0.221E+3,0.112E+3,0.28999000E+1,0.96280000E+0 - ,0.36466680E+3,0.221E+3,0.113E+3,0.28999000E+1,0.96480000E+0 - ,0.29100370E+3,0.221E+3,0.114E+3,0.28999000E+1,0.95070000E+0 - ,0.23687400E+3,0.221E+3,0.115E+3,0.28999000E+1,0.99470000E+0 - ,0.19933220E+3,0.221E+3,0.116E+3,0.28999000E+1,0.99480000E+0 - ,0.16205420E+3,0.221E+3,0.117E+3,0.28999000E+1,0.99720000E+0 - ,0.32000430E+3,0.221E+3,0.119E+3,0.28999000E+1,0.97670000E+0 - ,0.61816760E+3,0.221E+3,0.120E+3,0.28999000E+1,0.98310000E+0 - ,0.31880040E+3,0.221E+3,0.121E+3,0.28999000E+1,0.18627000E+1 - ,0.30759130E+3,0.221E+3,0.122E+3,0.28999000E+1,0.18299000E+1 - ,0.30144200E+3,0.221E+3,0.123E+3,0.28999000E+1,0.19138000E+1 - ,0.29881900E+3,0.221E+3,0.124E+3,0.28999000E+1,0.18269000E+1 - ,0.27417030E+3,0.221E+3,0.125E+3,0.28999000E+1,0.16406000E+1 - ,0.25341680E+3,0.221E+3,0.126E+3,0.28999000E+1,0.16483000E+1 - ,0.24168330E+3,0.221E+3,0.127E+3,0.28999000E+1,0.17149000E+1 - ,0.23632960E+3,0.221E+3,0.128E+3,0.28999000E+1,0.17937000E+1 - ,0.23403740E+3,0.221E+3,0.129E+3,0.28999000E+1,0.95760000E+0 - ,0.21866030E+3,0.221E+3,0.130E+3,0.28999000E+1,0.19419000E+1 - ,0.36091960E+3,0.221E+3,0.131E+3,0.28999000E+1,0.96010000E+0 - ,0.31533670E+3,0.221E+3,0.132E+3,0.28999000E+1,0.94340000E+0 - ,0.28133310E+3,0.221E+3,0.133E+3,0.28999000E+1,0.98890000E+0 - ,0.25597460E+3,0.221E+3,0.134E+3,0.28999000E+1,0.99010000E+0 - ,0.22452090E+3,0.221E+3,0.135E+3,0.28999000E+1,0.99740000E+0 - ,0.38121510E+3,0.221E+3,0.137E+3,0.28999000E+1,0.97380000E+0 - ,0.75216410E+3,0.221E+3,0.138E+3,0.28999000E+1,0.98010000E+0 - ,0.57086180E+3,0.221E+3,0.139E+3,0.28999000E+1,0.19153000E+1 - ,0.42153880E+3,0.221E+3,0.140E+3,0.28999000E+1,0.19355000E+1 - ,0.42572990E+3,0.221E+3,0.141E+3,0.28999000E+1,0.19545000E+1 - ,0.39634700E+3,0.221E+3,0.142E+3,0.28999000E+1,0.19420000E+1 - ,0.44614920E+3,0.221E+3,0.143E+3,0.28999000E+1,0.16682000E+1 - ,0.34429480E+3,0.221E+3,0.144E+3,0.28999000E+1,0.18584000E+1 - ,0.32185830E+3,0.221E+3,0.145E+3,0.28999000E+1,0.19003000E+1 - ,0.29856920E+3,0.221E+3,0.146E+3,0.28999000E+1,0.18630000E+1 - ,0.28894080E+3,0.221E+3,0.147E+3,0.28999000E+1,0.96790000E+0 - ,0.28528140E+3,0.221E+3,0.148E+3,0.28999000E+1,0.19539000E+1 - ,0.45781840E+3,0.221E+3,0.149E+3,0.28999000E+1,0.96330000E+0 - ,0.41239390E+3,0.221E+3,0.150E+3,0.28999000E+1,0.95140000E+0 - ,0.38490810E+3,0.221E+3,0.151E+3,0.28999000E+1,0.97490000E+0 - ,0.36314460E+3,0.221E+3,0.152E+3,0.28999000E+1,0.98110000E+0 - ,0.33053650E+3,0.221E+3,0.153E+3,0.28999000E+1,0.99680000E+0 - ,0.44947740E+3,0.221E+3,0.155E+3,0.28999000E+1,0.99090000E+0 - ,0.97596650E+3,0.221E+3,0.156E+3,0.28999000E+1,0.97970000E+0 - ,0.72280680E+3,0.221E+3,0.157E+3,0.28999000E+1,0.19373000E+1 - ,0.45030760E+3,0.221E+3,0.159E+3,0.28999000E+1,0.29425000E+1 - ,0.44096740E+3,0.221E+3,0.160E+3,0.28999000E+1,0.29455000E+1 - ,0.42686830E+3,0.221E+3,0.161E+3,0.28999000E+1,0.29413000E+1 - ,0.42925270E+3,0.221E+3,0.162E+3,0.28999000E+1,0.29300000E+1 - ,0.41458930E+3,0.221E+3,0.163E+3,0.28999000E+1,0.18286000E+1 - ,0.43214410E+3,0.221E+3,0.164E+3,0.28999000E+1,0.28732000E+1 - ,0.40560400E+3,0.221E+3,0.165E+3,0.28999000E+1,0.29086000E+1 - ,0.41317950E+3,0.221E+3,0.166E+3,0.28999000E+1,0.28965000E+1 - ,0.38477440E+3,0.221E+3,0.167E+3,0.28999000E+1,0.29242000E+1 - ,0.37372510E+3,0.221E+3,0.168E+3,0.28999000E+1,0.29282000E+1 - ,0.37141000E+3,0.221E+3,0.169E+3,0.28999000E+1,0.29246000E+1 - ,0.39092160E+3,0.221E+3,0.170E+3,0.28999000E+1,0.28482000E+1 - ,0.35888950E+3,0.221E+3,0.171E+3,0.28999000E+1,0.29219000E+1 - ,0.48998500E+3,0.221E+3,0.172E+3,0.28999000E+1,0.19254000E+1 - ,0.45345540E+3,0.221E+3,0.173E+3,0.28999000E+1,0.19459000E+1 - ,0.41248260E+3,0.221E+3,0.174E+3,0.28999000E+1,0.19292000E+1 - ,0.41838190E+3,0.221E+3,0.175E+3,0.28999000E+1,0.18104000E+1 - ,0.36375220E+3,0.221E+3,0.176E+3,0.28999000E+1,0.18858000E+1 - ,0.34171650E+3,0.221E+3,0.177E+3,0.28999000E+1,0.18648000E+1 - ,0.32608130E+3,0.221E+3,0.178E+3,0.28999000E+1,0.19188000E+1 - ,0.31164840E+3,0.221E+3,0.179E+3,0.28999000E+1,0.98460000E+0 - ,0.30046490E+3,0.221E+3,0.180E+3,0.28999000E+1,0.19896000E+1 - ,0.49070860E+3,0.221E+3,0.181E+3,0.28999000E+1,0.92670000E+0 - ,0.44539670E+3,0.221E+3,0.182E+3,0.28999000E+1,0.93830000E+0 - ,0.43091620E+3,0.221E+3,0.183E+3,0.28999000E+1,0.98200000E+0 - ,0.41829040E+3,0.221E+3,0.184E+3,0.28999000E+1,0.98150000E+0 - ,0.38946080E+3,0.221E+3,0.185E+3,0.28999000E+1,0.99540000E+0 - ,0.50612520E+3,0.221E+3,0.187E+3,0.28999000E+1,0.97050000E+0 - ,0.96871930E+3,0.221E+3,0.188E+3,0.28999000E+1,0.96620000E+0 - ,0.53300150E+3,0.221E+3,0.189E+3,0.28999000E+1,0.29070000E+1 - ,0.61730540E+3,0.221E+3,0.190E+3,0.28999000E+1,0.28844000E+1 - ,0.55082530E+3,0.221E+3,0.191E+3,0.28999000E+1,0.28738000E+1 - ,0.48540710E+3,0.221E+3,0.192E+3,0.28999000E+1,0.28878000E+1 - ,0.46674110E+3,0.221E+3,0.193E+3,0.28999000E+1,0.29095000E+1 - ,0.56587940E+3,0.221E+3,0.194E+3,0.28999000E+1,0.19209000E+1 - ,0.13129800E+3,0.221E+3,0.204E+3,0.28999000E+1,0.19697000E+1 - ,0.12867160E+3,0.221E+3,0.205E+3,0.28999000E+1,0.19441000E+1 - ,0.93360300E+2,0.221E+3,0.206E+3,0.28999000E+1,0.19985000E+1 - ,0.74329700E+2,0.221E+3,0.207E+3,0.28999000E+1,0.20143000E+1 - ,0.50392000E+2,0.221E+3,0.208E+3,0.28999000E+1,0.19887000E+1 - ,0.23400680E+3,0.221E+3,0.212E+3,0.28999000E+1,0.19496000E+1 - ,0.28286280E+3,0.221E+3,0.213E+3,0.28999000E+1,0.19311000E+1 - ,0.27035480E+3,0.221E+3,0.214E+3,0.28999000E+1,0.19435000E+1 - ,0.23372820E+3,0.221E+3,0.215E+3,0.28999000E+1,0.20102000E+1 - ,0.19526710E+3,0.221E+3,0.216E+3,0.28999000E+1,0.19903000E+1 - ,0.32764580E+3,0.221E+3,0.220E+3,0.28999000E+1,0.19349000E+1 - ,0.31398460E+3,0.221E+3,0.221E+3,0.28999000E+1,0.28999000E+1 - ,0.30259300E+2,0.222E+3,0.100E+1,0.38675000E+1,0.91180000E+0 - ,0.19720500E+2,0.222E+3,0.200E+1,0.38675000E+1,0.00000000E+0 - ,0.48620980E+3,0.222E+3,0.300E+1,0.38675000E+1,0.00000000E+0 - ,0.27793710E+3,0.222E+3,0.400E+1,0.38675000E+1,0.00000000E+0 - ,0.18540740E+3,0.222E+3,0.500E+1,0.38675000E+1,0.00000000E+0 - ,0.12418490E+3,0.222E+3,0.600E+1,0.38675000E+1,0.00000000E+0 - ,0.86210900E+2,0.222E+3,0.700E+1,0.38675000E+1,0.00000000E+0 - ,0.64903700E+2,0.222E+3,0.800E+1,0.38675000E+1,0.00000000E+0 - ,0.48913100E+2,0.222E+3,0.900E+1,0.38675000E+1,0.00000000E+0 - ,0.37455400E+2,0.222E+3,0.100E+2,0.38675000E+1,0.00000000E+0 - ,0.58090670E+3,0.222E+3,0.110E+2,0.38675000E+1,0.00000000E+0 - ,0.44375570E+3,0.222E+3,0.120E+2,0.38675000E+1,0.00000000E+0 - ,0.40733310E+3,0.222E+3,0.130E+2,0.38675000E+1,0.00000000E+0 - ,0.31895500E+3,0.222E+3,0.140E+2,0.38675000E+1,0.00000000E+0 - ,0.24716030E+3,0.222E+3,0.150E+2,0.38675000E+1,0.00000000E+0 - ,0.20416200E+3,0.222E+3,0.160E+2,0.38675000E+1,0.00000000E+0 - ,0.16596320E+3,0.222E+3,0.170E+2,0.38675000E+1,0.00000000E+0 - ,0.13515860E+3,0.222E+3,0.180E+2,0.38675000E+1,0.00000000E+0 - ,0.95162680E+3,0.222E+3,0.190E+2,0.38675000E+1,0.00000000E+0 - ,0.78176790E+3,0.222E+3,0.200E+2,0.38675000E+1,0.00000000E+0 - ,0.64493880E+3,0.222E+3,0.210E+2,0.38675000E+1,0.00000000E+0 - ,0.62162280E+3,0.222E+3,0.220E+2,0.38675000E+1,0.00000000E+0 - ,0.56863160E+3,0.222E+3,0.230E+2,0.38675000E+1,0.00000000E+0 - ,0.44737630E+3,0.222E+3,0.240E+2,0.38675000E+1,0.00000000E+0 - ,0.48878880E+3,0.222E+3,0.250E+2,0.38675000E+1,0.00000000E+0 - ,0.38306060E+3,0.222E+3,0.260E+2,0.38675000E+1,0.00000000E+0 - ,0.40558090E+3,0.222E+3,0.270E+2,0.38675000E+1,0.00000000E+0 - ,0.41831130E+3,0.222E+3,0.280E+2,0.38675000E+1,0.00000000E+0 - ,0.32021980E+3,0.222E+3,0.290E+2,0.38675000E+1,0.00000000E+0 - ,0.32800010E+3,0.222E+3,0.300E+2,0.38675000E+1,0.00000000E+0 - ,0.38913250E+3,0.222E+3,0.310E+2,0.38675000E+1,0.00000000E+0 - ,0.34156270E+3,0.222E+3,0.320E+2,0.38675000E+1,0.00000000E+0 - ,0.28985600E+3,0.222E+3,0.330E+2,0.38675000E+1,0.00000000E+0 - ,0.25914890E+3,0.222E+3,0.340E+2,0.38675000E+1,0.00000000E+0 - ,0.22588180E+3,0.222E+3,0.350E+2,0.38675000E+1,0.00000000E+0 - ,0.19566660E+3,0.222E+3,0.360E+2,0.38675000E+1,0.00000000E+0 - ,0.10654841E+4,0.222E+3,0.370E+2,0.38675000E+1,0.00000000E+0 - ,0.93121720E+3,0.222E+3,0.380E+2,0.38675000E+1,0.00000000E+0 - ,0.81333020E+3,0.222E+3,0.390E+2,0.38675000E+1,0.00000000E+0 - ,0.72942430E+3,0.222E+3,0.400E+2,0.38675000E+1,0.00000000E+0 - ,0.66404520E+3,0.222E+3,0.410E+2,0.38675000E+1,0.00000000E+0 - ,0.51089670E+3,0.222E+3,0.420E+2,0.38675000E+1,0.00000000E+0 - ,0.57079220E+3,0.222E+3,0.430E+2,0.38675000E+1,0.00000000E+0 - ,0.43319140E+3,0.222E+3,0.440E+2,0.38675000E+1,0.00000000E+0 - ,0.47389730E+3,0.222E+3,0.450E+2,0.38675000E+1,0.00000000E+0 - ,0.43897520E+3,0.222E+3,0.460E+2,0.38675000E+1,0.00000000E+0 - ,0.36571240E+3,0.222E+3,0.470E+2,0.38675000E+1,0.00000000E+0 - ,0.38622410E+3,0.222E+3,0.480E+2,0.38675000E+1,0.00000000E+0 - ,0.48644970E+3,0.222E+3,0.490E+2,0.38675000E+1,0.00000000E+0 - ,0.44827700E+3,0.222E+3,0.500E+2,0.38675000E+1,0.00000000E+0 - ,0.39783330E+3,0.222E+3,0.510E+2,0.38675000E+1,0.00000000E+0 - ,0.36805570E+3,0.222E+3,0.520E+2,0.38675000E+1,0.00000000E+0 - ,0.33168000E+3,0.222E+3,0.530E+2,0.38675000E+1,0.00000000E+0 - ,0.29718710E+3,0.222E+3,0.540E+2,0.38675000E+1,0.00000000E+0 - ,0.12973700E+4,0.222E+3,0.550E+2,0.38675000E+1,0.00000000E+0 - ,0.11876789E+4,0.222E+3,0.560E+2,0.38675000E+1,0.00000000E+0 - ,0.10405570E+4,0.222E+3,0.570E+2,0.38675000E+1,0.00000000E+0 - ,0.47013410E+3,0.222E+3,0.580E+2,0.38675000E+1,0.27991000E+1 - ,0.10511001E+4,0.222E+3,0.590E+2,0.38675000E+1,0.00000000E+0 - ,0.10089483E+4,0.222E+3,0.600E+2,0.38675000E+1,0.00000000E+0 - ,0.98354270E+3,0.222E+3,0.610E+2,0.38675000E+1,0.00000000E+0 - ,0.96019540E+3,0.222E+3,0.620E+2,0.38675000E+1,0.00000000E+0 - ,0.93948900E+3,0.222E+3,0.630E+2,0.38675000E+1,0.00000000E+0 - ,0.73579720E+3,0.222E+3,0.640E+2,0.38675000E+1,0.00000000E+0 - ,0.83177260E+3,0.222E+3,0.650E+2,0.38675000E+1,0.00000000E+0 - ,0.80171120E+3,0.222E+3,0.660E+2,0.38675000E+1,0.00000000E+0 - ,0.84685680E+3,0.222E+3,0.670E+2,0.38675000E+1,0.00000000E+0 - ,0.82885550E+3,0.222E+3,0.680E+2,0.38675000E+1,0.00000000E+0 - ,0.81258600E+3,0.222E+3,0.690E+2,0.38675000E+1,0.00000000E+0 - ,0.80323470E+3,0.222E+3,0.700E+2,0.38675000E+1,0.00000000E+0 - ,0.67488900E+3,0.222E+3,0.710E+2,0.38675000E+1,0.00000000E+0 - ,0.66176650E+3,0.222E+3,0.720E+2,0.38675000E+1,0.00000000E+0 - ,0.60245920E+3,0.222E+3,0.730E+2,0.38675000E+1,0.00000000E+0 - ,0.50731550E+3,0.222E+3,0.740E+2,0.38675000E+1,0.00000000E+0 - ,0.51574640E+3,0.222E+3,0.750E+2,0.38675000E+1,0.00000000E+0 - ,0.46633110E+3,0.222E+3,0.760E+2,0.38675000E+1,0.00000000E+0 - ,0.42621440E+3,0.222E+3,0.770E+2,0.38675000E+1,0.00000000E+0 - ,0.35302080E+3,0.222E+3,0.780E+2,0.38675000E+1,0.00000000E+0 - ,0.32944450E+3,0.222E+3,0.790E+2,0.38675000E+1,0.00000000E+0 - ,0.33877410E+3,0.222E+3,0.800E+2,0.38675000E+1,0.00000000E+0 - ,0.49837090E+3,0.222E+3,0.810E+2,0.38675000E+1,0.00000000E+0 - ,0.48615110E+3,0.222E+3,0.820E+2,0.38675000E+1,0.00000000E+0 - ,0.44515370E+3,0.222E+3,0.830E+2,0.38675000E+1,0.00000000E+0 - ,0.42359010E+3,0.222E+3,0.840E+2,0.38675000E+1,0.00000000E+0 - ,0.38975590E+3,0.222E+3,0.850E+2,0.38675000E+1,0.00000000E+0 - ,0.35616530E+3,0.222E+3,0.860E+2,0.38675000E+1,0.00000000E+0 - ,0.12224279E+4,0.222E+3,0.870E+2,0.38675000E+1,0.00000000E+0 - ,0.11725376E+4,0.222E+3,0.880E+2,0.38675000E+1,0.00000000E+0 - ,0.10337520E+4,0.222E+3,0.890E+2,0.38675000E+1,0.00000000E+0 - ,0.92548980E+3,0.222E+3,0.900E+2,0.38675000E+1,0.00000000E+0 - ,0.92008400E+3,0.222E+3,0.910E+2,0.38675000E+1,0.00000000E+0 - ,0.89076990E+3,0.222E+3,0.920E+2,0.38675000E+1,0.00000000E+0 - ,0.91911090E+3,0.222E+3,0.930E+2,0.38675000E+1,0.00000000E+0 - ,0.88975190E+3,0.222E+3,0.940E+2,0.38675000E+1,0.00000000E+0 - ,0.49098300E+2,0.222E+3,0.101E+3,0.38675000E+1,0.00000000E+0 - ,0.16130130E+3,0.222E+3,0.103E+3,0.38675000E+1,0.98650000E+0 - ,0.20531340E+3,0.222E+3,0.104E+3,0.38675000E+1,0.98080000E+0 - ,0.15556610E+3,0.222E+3,0.105E+3,0.38675000E+1,0.97060000E+0 - ,0.11644710E+3,0.222E+3,0.106E+3,0.38675000E+1,0.98680000E+0 - ,0.80346400E+2,0.222E+3,0.107E+3,0.38675000E+1,0.99440000E+0 - ,0.58112700E+2,0.222E+3,0.108E+3,0.38675000E+1,0.99250000E+0 - ,0.39601500E+2,0.222E+3,0.109E+3,0.38675000E+1,0.99820000E+0 - ,0.23597180E+3,0.222E+3,0.111E+3,0.38675000E+1,0.96840000E+0 - ,0.36527360E+3,0.222E+3,0.112E+3,0.38675000E+1,0.96280000E+0 - ,0.36870140E+3,0.222E+3,0.113E+3,0.38675000E+1,0.96480000E+0 - ,0.29444790E+3,0.222E+3,0.114E+3,0.38675000E+1,0.95070000E+0 - ,0.23982940E+3,0.222E+3,0.115E+3,0.38675000E+1,0.99470000E+0 - ,0.20191810E+3,0.222E+3,0.116E+3,0.38675000E+1,0.99480000E+0 - ,0.16424590E+3,0.222E+3,0.117E+3,0.38675000E+1,0.99720000E+0 - ,0.32361900E+3,0.222E+3,0.119E+3,0.38675000E+1,0.97670000E+0 - ,0.62430360E+3,0.222E+3,0.120E+3,0.38675000E+1,0.98310000E+0 - ,0.32257050E+3,0.222E+3,0.121E+3,0.38675000E+1,0.18627000E+1 - ,0.31124080E+3,0.222E+3,0.122E+3,0.38675000E+1,0.18299000E+1 - ,0.30502010E+3,0.222E+3,0.123E+3,0.38675000E+1,0.19138000E+1 - ,0.30234740E+3,0.222E+3,0.124E+3,0.38675000E+1,0.18269000E+1 - ,0.27750050E+3,0.222E+3,0.125E+3,0.38675000E+1,0.16406000E+1 - ,0.25652910E+3,0.222E+3,0.126E+3,0.38675000E+1,0.16483000E+1 - ,0.24465710E+3,0.222E+3,0.127E+3,0.38675000E+1,0.17149000E+1 - ,0.23923230E+3,0.222E+3,0.128E+3,0.38675000E+1,0.17937000E+1 - ,0.23685320E+3,0.222E+3,0.129E+3,0.38675000E+1,0.95760000E+0 - ,0.22139430E+3,0.222E+3,0.130E+3,0.38675000E+1,0.19419000E+1 - ,0.36502390E+3,0.222E+3,0.131E+3,0.38675000E+1,0.96010000E+0 - ,0.31910990E+3,0.222E+3,0.132E+3,0.38675000E+1,0.94340000E+0 - ,0.28483450E+3,0.222E+3,0.133E+3,0.38675000E+1,0.98890000E+0 - ,0.25925390E+3,0.222E+3,0.134E+3,0.38675000E+1,0.99010000E+0 - ,0.22749370E+3,0.222E+3,0.135E+3,0.38675000E+1,0.99740000E+0 - ,0.38558300E+3,0.222E+3,0.137E+3,0.38675000E+1,0.97380000E+0 - ,0.75959780E+3,0.222E+3,0.138E+3,0.38675000E+1,0.98010000E+0 - ,0.57702860E+3,0.222E+3,0.139E+3,0.38675000E+1,0.19153000E+1 - ,0.42651570E+3,0.222E+3,0.140E+3,0.38675000E+1,0.19355000E+1 - ,0.43076130E+3,0.222E+3,0.141E+3,0.38675000E+1,0.19545000E+1 - ,0.40109190E+3,0.222E+3,0.142E+3,0.38675000E+1,0.19420000E+1 - ,0.45128660E+3,0.222E+3,0.143E+3,0.38675000E+1,0.16682000E+1 - ,0.34854900E+3,0.222E+3,0.144E+3,0.38675000E+1,0.18584000E+1 - ,0.32585820E+3,0.222E+3,0.145E+3,0.38675000E+1,0.19003000E+1 - ,0.30231120E+3,0.222E+3,0.146E+3,0.38675000E+1,0.18630000E+1 - ,0.29255140E+3,0.222E+3,0.147E+3,0.38675000E+1,0.96790000E+0 - ,0.28891110E+3,0.222E+3,0.148E+3,0.38675000E+1,0.19539000E+1 - ,0.46307770E+3,0.222E+3,0.149E+3,0.38675000E+1,0.96330000E+0 - ,0.41733250E+3,0.222E+3,0.150E+3,0.38675000E+1,0.95140000E+0 - ,0.38965780E+3,0.222E+3,0.151E+3,0.38675000E+1,0.97490000E+0 - ,0.36772520E+3,0.222E+3,0.152E+3,0.38675000E+1,0.98110000E+0 - ,0.33481970E+3,0.222E+3,0.153E+3,0.38675000E+1,0.99680000E+0 - ,0.45477990E+3,0.222E+3,0.155E+3,0.38675000E+1,0.99090000E+0 - ,0.98542930E+3,0.222E+3,0.156E+3,0.38675000E+1,0.97970000E+0 - ,0.73055840E+3,0.222E+3,0.157E+3,0.38675000E+1,0.19373000E+1 - ,0.45582340E+3,0.222E+3,0.159E+3,0.38675000E+1,0.29425000E+1 - ,0.44637170E+3,0.222E+3,0.160E+3,0.38675000E+1,0.29455000E+1 - ,0.43211200E+3,0.222E+3,0.161E+3,0.38675000E+1,0.29413000E+1 - ,0.43449190E+3,0.222E+3,0.162E+3,0.38675000E+1,0.29300000E+1 - ,0.41956220E+3,0.222E+3,0.163E+3,0.38675000E+1,0.18286000E+1 - ,0.43740200E+3,0.222E+3,0.164E+3,0.38675000E+1,0.28732000E+1 - ,0.41057030E+3,0.222E+3,0.165E+3,0.38675000E+1,0.29086000E+1 - ,0.41818290E+3,0.222E+3,0.166E+3,0.38675000E+1,0.28965000E+1 - ,0.38950840E+3,0.222E+3,0.167E+3,0.38675000E+1,0.29242000E+1 - ,0.37833210E+3,0.222E+3,0.168E+3,0.38675000E+1,0.29282000E+1 - ,0.37597960E+3,0.222E+3,0.169E+3,0.38675000E+1,0.29246000E+1 - ,0.39567790E+3,0.222E+3,0.170E+3,0.38675000E+1,0.28482000E+1 - ,0.36331600E+3,0.222E+3,0.171E+3,0.38675000E+1,0.29219000E+1 - ,0.49559850E+3,0.222E+3,0.172E+3,0.38675000E+1,0.19254000E+1 - ,0.45879570E+3,0.222E+3,0.173E+3,0.38675000E+1,0.19459000E+1 - ,0.41747930E+3,0.222E+3,0.174E+3,0.38675000E+1,0.19292000E+1 - ,0.42334010E+3,0.222E+3,0.175E+3,0.38675000E+1,0.18104000E+1 - ,0.36833170E+3,0.222E+3,0.176E+3,0.38675000E+1,0.18858000E+1 - ,0.34606910E+3,0.222E+3,0.177E+3,0.38675000E+1,0.18648000E+1 - ,0.33026610E+3,0.222E+3,0.178E+3,0.38675000E+1,0.19188000E+1 - ,0.31565750E+3,0.222E+3,0.179E+3,0.38675000E+1,0.98460000E+0 - ,0.30440290E+3,0.222E+3,0.180E+3,0.38675000E+1,0.19896000E+1 - ,0.49642620E+3,0.222E+3,0.181E+3,0.38675000E+1,0.92670000E+0 - ,0.45079950E+3,0.222E+3,0.182E+3,0.38675000E+1,0.93830000E+0 - ,0.43625560E+3,0.222E+3,0.183E+3,0.38675000E+1,0.98200000E+0 - ,0.42355850E+3,0.222E+3,0.184E+3,0.38675000E+1,0.98150000E+0 - ,0.39448330E+3,0.222E+3,0.185E+3,0.38675000E+1,0.99540000E+0 - ,0.51210760E+3,0.222E+3,0.187E+3,0.38675000E+1,0.97050000E+0 - ,0.97841480E+3,0.222E+3,0.188E+3,0.38675000E+1,0.96620000E+0 - ,0.53951560E+3,0.222E+3,0.189E+3,0.38675000E+1,0.29070000E+1 - ,0.62459130E+3,0.222E+3,0.190E+3,0.38675000E+1,0.28844000E+1 - ,0.55742270E+3,0.222E+3,0.191E+3,0.38675000E+1,0.28738000E+1 - ,0.49140260E+3,0.222E+3,0.192E+3,0.38675000E+1,0.28878000E+1 - ,0.47254630E+3,0.222E+3,0.193E+3,0.38675000E+1,0.29095000E+1 - ,0.57240170E+3,0.222E+3,0.194E+3,0.38675000E+1,0.19209000E+1 - ,0.13288810E+3,0.222E+3,0.204E+3,0.38675000E+1,0.19697000E+1 - ,0.13026620E+3,0.222E+3,0.205E+3,0.38675000E+1,0.19441000E+1 - ,0.94601300E+2,0.222E+3,0.206E+3,0.38675000E+1,0.19985000E+1 - ,0.75360900E+2,0.222E+3,0.207E+3,0.38675000E+1,0.20143000E+1 - ,0.51141000E+2,0.222E+3,0.208E+3,0.38675000E+1,0.19887000E+1 - ,0.23672460E+3,0.222E+3,0.212E+3,0.38675000E+1,0.19496000E+1 - ,0.28613170E+3,0.222E+3,0.213E+3,0.38675000E+1,0.19311000E+1 - ,0.27358870E+3,0.222E+3,0.214E+3,0.38675000E+1,0.19435000E+1 - ,0.23663740E+3,0.222E+3,0.215E+3,0.38675000E+1,0.20102000E+1 - ,0.19780370E+3,0.222E+3,0.216E+3,0.38675000E+1,0.19903000E+1 - ,0.33148510E+3,0.222E+3,0.220E+3,0.38675000E+1,0.19349000E+1 - ,0.31775890E+3,0.222E+3,0.221E+3,0.38675000E+1,0.28999000E+1 - ,0.32158900E+3,0.222E+3,0.222E+3,0.38675000E+1,0.38675000E+1 - ,0.27688000E+2,0.223E+3,0.100E+1,0.29110000E+1,0.91180000E+0 - ,0.18112700E+2,0.223E+3,0.200E+1,0.29110000E+1,0.00000000E+0 - ,0.44829230E+3,0.223E+3,0.300E+1,0.29110000E+1,0.00000000E+0 - ,0.25437670E+3,0.223E+3,0.400E+1,0.29110000E+1,0.00000000E+0 - ,0.16952210E+3,0.223E+3,0.500E+1,0.29110000E+1,0.00000000E+0 - ,0.11361290E+3,0.223E+3,0.600E+1,0.29110000E+1,0.00000000E+0 - ,0.78976100E+2,0.223E+3,0.700E+1,0.29110000E+1,0.00000000E+0 - ,0.59544500E+2,0.223E+3,0.800E+1,0.29110000E+1,0.00000000E+0 - ,0.44949300E+2,0.223E+3,0.900E+1,0.29110000E+1,0.00000000E+0 - ,0.34478900E+2,0.223E+3,0.100E+2,0.29110000E+1,0.00000000E+0 - ,0.53544830E+3,0.223E+3,0.110E+2,0.29110000E+1,0.00000000E+0 - ,0.40656420E+3,0.223E+3,0.120E+2,0.29110000E+1,0.00000000E+0 - ,0.37280190E+3,0.223E+3,0.130E+2,0.29110000E+1,0.00000000E+0 - ,0.29163180E+3,0.223E+3,0.140E+2,0.29110000E+1,0.00000000E+0 - ,0.22598490E+3,0.223E+3,0.150E+2,0.29110000E+1,0.00000000E+0 - ,0.18676650E+3,0.223E+3,0.160E+2,0.29110000E+1,0.00000000E+0 - ,0.15194160E+3,0.223E+3,0.170E+2,0.29110000E+1,0.00000000E+0 - ,0.12386350E+3,0.223E+3,0.180E+2,0.29110000E+1,0.00000000E+0 - ,0.87974450E+3,0.223E+3,0.190E+2,0.29110000E+1,0.00000000E+0 - ,0.71816300E+3,0.223E+3,0.200E+2,0.29110000E+1,0.00000000E+0 - ,0.59186950E+3,0.223E+3,0.210E+2,0.29110000E+1,0.00000000E+0 - ,0.57022820E+3,0.223E+3,0.220E+2,0.29110000E+1,0.00000000E+0 - ,0.52146020E+3,0.223E+3,0.230E+2,0.29110000E+1,0.00000000E+0 - ,0.41056610E+3,0.223E+3,0.240E+2,0.29110000E+1,0.00000000E+0 - ,0.44806980E+3,0.223E+3,0.250E+2,0.29110000E+1,0.00000000E+0 - ,0.35139390E+3,0.223E+3,0.260E+2,0.29110000E+1,0.00000000E+0 - ,0.37151490E+3,0.223E+3,0.270E+2,0.29110000E+1,0.00000000E+0 - ,0.38325570E+3,0.223E+3,0.280E+2,0.29110000E+1,0.00000000E+0 - ,0.29368160E+3,0.223E+3,0.290E+2,0.29110000E+1,0.00000000E+0 - ,0.30031300E+3,0.223E+3,0.300E+2,0.29110000E+1,0.00000000E+0 - ,0.35624690E+3,0.223E+3,0.310E+2,0.29110000E+1,0.00000000E+0 - ,0.31241300E+3,0.223E+3,0.320E+2,0.29110000E+1,0.00000000E+0 - ,0.26507780E+3,0.223E+3,0.330E+2,0.29110000E+1,0.00000000E+0 - ,0.23705770E+3,0.223E+3,0.340E+2,0.29110000E+1,0.00000000E+0 - ,0.20672770E+3,0.223E+3,0.350E+2,0.29110000E+1,0.00000000E+0 - ,0.17919650E+3,0.223E+3,0.360E+2,0.29110000E+1,0.00000000E+0 - ,0.98495040E+3,0.223E+3,0.370E+2,0.29110000E+1,0.00000000E+0 - ,0.85590050E+3,0.223E+3,0.380E+2,0.29110000E+1,0.00000000E+0 - ,0.74643350E+3,0.223E+3,0.390E+2,0.29110000E+1,0.00000000E+0 - ,0.66896670E+3,0.223E+3,0.400E+2,0.29110000E+1,0.00000000E+0 - ,0.60884420E+3,0.223E+3,0.410E+2,0.29110000E+1,0.00000000E+0 - ,0.46840590E+3,0.223E+3,0.420E+2,0.29110000E+1,0.00000000E+0 - ,0.52332230E+3,0.223E+3,0.430E+2,0.29110000E+1,0.00000000E+0 - ,0.39715580E+3,0.223E+3,0.440E+2,0.29110000E+1,0.00000000E+0 - ,0.43421760E+3,0.223E+3,0.450E+2,0.29110000E+1,0.00000000E+0 - ,0.40217500E+3,0.223E+3,0.460E+2,0.29110000E+1,0.00000000E+0 - ,0.33544360E+3,0.223E+3,0.470E+2,0.29110000E+1,0.00000000E+0 - ,0.35382270E+3,0.223E+3,0.480E+2,0.29110000E+1,0.00000000E+0 - ,0.44577660E+3,0.223E+3,0.490E+2,0.29110000E+1,0.00000000E+0 - ,0.41035180E+3,0.223E+3,0.500E+2,0.29110000E+1,0.00000000E+0 - ,0.36401890E+3,0.223E+3,0.510E+2,0.29110000E+1,0.00000000E+0 - ,0.33677190E+3,0.223E+3,0.520E+2,0.29110000E+1,0.00000000E+0 - ,0.30354590E+3,0.223E+3,0.530E+2,0.29110000E+1,0.00000000E+0 - ,0.27207950E+3,0.223E+3,0.540E+2,0.29110000E+1,0.00000000E+0 - ,0.11997581E+4,0.223E+3,0.550E+2,0.29110000E+1,0.00000000E+0 - ,0.10926689E+4,0.223E+3,0.560E+2,0.29110000E+1,0.00000000E+0 - ,0.95571690E+3,0.223E+3,0.570E+2,0.29110000E+1,0.00000000E+0 - ,0.43033410E+3,0.223E+3,0.580E+2,0.29110000E+1,0.27991000E+1 - ,0.96666190E+3,0.223E+3,0.590E+2,0.29110000E+1,0.00000000E+0 - ,0.92752540E+3,0.223E+3,0.600E+2,0.29110000E+1,0.00000000E+0 - ,0.90407530E+3,0.223E+3,0.610E+2,0.29110000E+1,0.00000000E+0 - ,0.88253130E+3,0.223E+3,0.620E+2,0.29110000E+1,0.00000000E+0 - ,0.86342100E+3,0.223E+3,0.630E+2,0.29110000E+1,0.00000000E+0 - ,0.67551500E+3,0.223E+3,0.640E+2,0.29110000E+1,0.00000000E+0 - ,0.76607760E+3,0.223E+3,0.650E+2,0.29110000E+1,0.00000000E+0 - ,0.73824890E+3,0.223E+3,0.660E+2,0.29110000E+1,0.00000000E+0 - ,0.77789910E+3,0.223E+3,0.670E+2,0.29110000E+1,0.00000000E+0 - ,0.76130400E+3,0.223E+3,0.680E+2,0.29110000E+1,0.00000000E+0 - ,0.74629430E+3,0.223E+3,0.690E+2,0.29110000E+1,0.00000000E+0 - ,0.73772690E+3,0.223E+3,0.700E+2,0.29110000E+1,0.00000000E+0 - ,0.61945150E+3,0.223E+3,0.710E+2,0.29110000E+1,0.00000000E+0 - ,0.60644790E+3,0.223E+3,0.720E+2,0.29110000E+1,0.00000000E+0 - ,0.55185300E+3,0.223E+3,0.730E+2,0.29110000E+1,0.00000000E+0 - ,0.46484330E+3,0.223E+3,0.740E+2,0.29110000E+1,0.00000000E+0 - ,0.47240710E+3,0.223E+3,0.750E+2,0.29110000E+1,0.00000000E+0 - ,0.42706310E+3,0.223E+3,0.760E+2,0.29110000E+1,0.00000000E+0 - ,0.39030550E+3,0.223E+3,0.770E+2,0.29110000E+1,0.00000000E+0 - ,0.32344940E+3,0.223E+3,0.780E+2,0.29110000E+1,0.00000000E+0 - ,0.30191160E+3,0.223E+3,0.790E+2,0.29110000E+1,0.00000000E+0 - ,0.31033530E+3,0.223E+3,0.800E+2,0.29110000E+1,0.00000000E+0 - ,0.45700230E+3,0.223E+3,0.810E+2,0.29110000E+1,0.00000000E+0 - ,0.44528620E+3,0.223E+3,0.820E+2,0.29110000E+1,0.00000000E+0 - ,0.40750360E+3,0.223E+3,0.830E+2,0.29110000E+1,0.00000000E+0 - ,0.38771530E+3,0.223E+3,0.840E+2,0.29110000E+1,0.00000000E+0 - ,0.35676420E+3,0.223E+3,0.850E+2,0.29110000E+1,0.00000000E+0 - ,0.32609510E+3,0.223E+3,0.860E+2,0.29110000E+1,0.00000000E+0 - ,0.11286750E+4,0.223E+3,0.870E+2,0.29110000E+1,0.00000000E+0 - ,0.10779350E+4,0.223E+3,0.880E+2,0.29110000E+1,0.00000000E+0 - ,0.94892310E+3,0.223E+3,0.890E+2,0.29110000E+1,0.00000000E+0 - ,0.84862350E+3,0.223E+3,0.900E+2,0.29110000E+1,0.00000000E+0 - ,0.84446350E+3,0.223E+3,0.910E+2,0.29110000E+1,0.00000000E+0 - ,0.81754620E+3,0.223E+3,0.920E+2,0.29110000E+1,0.00000000E+0 - ,0.84421690E+3,0.223E+3,0.930E+2,0.29110000E+1,0.00000000E+0 - ,0.81709710E+3,0.223E+3,0.940E+2,0.29110000E+1,0.00000000E+0 - ,0.44884200E+2,0.223E+3,0.101E+3,0.29110000E+1,0.00000000E+0 - ,0.14764100E+3,0.223E+3,0.103E+3,0.29110000E+1,0.98650000E+0 - ,0.18795310E+3,0.223E+3,0.104E+3,0.29110000E+1,0.98080000E+0 - ,0.14227280E+3,0.223E+3,0.105E+3,0.29110000E+1,0.97060000E+0 - ,0.10657110E+3,0.223E+3,0.106E+3,0.29110000E+1,0.98680000E+0 - ,0.73627500E+2,0.223E+3,0.107E+3,0.29110000E+1,0.99440000E+0 - ,0.53340000E+2,0.223E+3,0.108E+3,0.29110000E+1,0.99250000E+0 - ,0.36451300E+2,0.223E+3,0.109E+3,0.29110000E+1,0.99820000E+0 - ,0.21618670E+3,0.223E+3,0.111E+3,0.29110000E+1,0.96840000E+0 - ,0.33467830E+3,0.223E+3,0.112E+3,0.29110000E+1,0.96280000E+0 - ,0.33741280E+3,0.223E+3,0.113E+3,0.29110000E+1,0.96480000E+0 - ,0.26924130E+3,0.223E+3,0.114E+3,0.29110000E+1,0.95070000E+0 - ,0.21930330E+3,0.223E+3,0.115E+3,0.29110000E+1,0.99470000E+0 - ,0.18472410E+3,0.223E+3,0.116E+3,0.29110000E+1,0.99480000E+0 - ,0.15037570E+3,0.223E+3,0.117E+3,0.29110000E+1,0.99720000E+0 - ,0.29674310E+3,0.223E+3,0.119E+3,0.29110000E+1,0.97670000E+0 - ,0.57423510E+3,0.223E+3,0.120E+3,0.29110000E+1,0.98310000E+0 - ,0.29523740E+3,0.223E+3,0.121E+3,0.29110000E+1,0.18627000E+1 - ,0.28494970E+3,0.223E+3,0.122E+3,0.29110000E+1,0.18299000E+1 - ,0.27927550E+3,0.223E+3,0.123E+3,0.29110000E+1,0.19138000E+1 - ,0.27688190E+3,0.223E+3,0.124E+3,0.29110000E+1,0.18269000E+1 - ,0.25393700E+3,0.223E+3,0.125E+3,0.29110000E+1,0.16406000E+1 - ,0.23476650E+3,0.223E+3,0.126E+3,0.29110000E+1,0.16483000E+1 - ,0.22394370E+3,0.223E+3,0.127E+3,0.29110000E+1,0.17149000E+1 - ,0.21899430E+3,0.223E+3,0.128E+3,0.29110000E+1,0.17937000E+1 - ,0.21692030E+3,0.223E+3,0.129E+3,0.29110000E+1,0.95760000E+0 - ,0.20259800E+3,0.223E+3,0.130E+3,0.29110000E+1,0.19419000E+1 - ,0.33410780E+3,0.223E+3,0.131E+3,0.29110000E+1,0.96010000E+0 - ,0.29187130E+3,0.223E+3,0.132E+3,0.29110000E+1,0.94340000E+0 - ,0.26049700E+3,0.223E+3,0.133E+3,0.29110000E+1,0.98890000E+0 - ,0.23715920E+3,0.223E+3,0.134E+3,0.29110000E+1,0.99010000E+0 - ,0.20820220E+3,0.223E+3,0.135E+3,0.29110000E+1,0.99740000E+0 - ,0.35359290E+3,0.223E+3,0.137E+3,0.29110000E+1,0.97380000E+0 - ,0.69913020E+3,0.223E+3,0.138E+3,0.29110000E+1,0.98010000E+0 - ,0.52968240E+3,0.223E+3,0.139E+3,0.29110000E+1,0.19153000E+1 - ,0.39060560E+3,0.223E+3,0.140E+3,0.29110000E+1,0.19355000E+1 - ,0.39448540E+3,0.223E+3,0.141E+3,0.29110000E+1,0.19545000E+1 - ,0.36737500E+3,0.223E+3,0.142E+3,0.29110000E+1,0.19420000E+1 - ,0.41382300E+3,0.223E+3,0.143E+3,0.29110000E+1,0.16682000E+1 - ,0.31915840E+3,0.223E+3,0.144E+3,0.29110000E+1,0.18584000E+1 - ,0.29845770E+3,0.223E+3,0.145E+3,0.29110000E+1,0.19003000E+1 - ,0.27694720E+3,0.223E+3,0.146E+3,0.29110000E+1,0.18630000E+1 - ,0.26803530E+3,0.223E+3,0.147E+3,0.29110000E+1,0.96790000E+0 - ,0.26453140E+3,0.223E+3,0.148E+3,0.29110000E+1,0.19539000E+1 - ,0.42422720E+3,0.223E+3,0.149E+3,0.29110000E+1,0.96330000E+0 - ,0.38198180E+3,0.223E+3,0.150E+3,0.29110000E+1,0.95140000E+0 - ,0.35653490E+3,0.223E+3,0.151E+3,0.29110000E+1,0.97490000E+0 - ,0.33646710E+3,0.223E+3,0.152E+3,0.29110000E+1,0.98110000E+0 - ,0.30641230E+3,0.223E+3,0.153E+3,0.29110000E+1,0.99680000E+0 - ,0.41667550E+3,0.223E+3,0.155E+3,0.29110000E+1,0.99090000E+0 - ,0.90813400E+3,0.223E+3,0.156E+3,0.29110000E+1,0.97970000E+0 - ,0.67092080E+3,0.223E+3,0.157E+3,0.29110000E+1,0.19373000E+1 - ,0.41723950E+3,0.223E+3,0.159E+3,0.29110000E+1,0.29425000E+1 - ,0.40858800E+3,0.223E+3,0.160E+3,0.29110000E+1,0.29455000E+1 - ,0.39554120E+3,0.223E+3,0.161E+3,0.29110000E+1,0.29413000E+1 - ,0.39776470E+3,0.223E+3,0.162E+3,0.29110000E+1,0.29300000E+1 - ,0.38425760E+3,0.223E+3,0.163E+3,0.29110000E+1,0.18286000E+1 - ,0.40037930E+3,0.223E+3,0.164E+3,0.29110000E+1,0.28732000E+1 - ,0.37581950E+3,0.223E+3,0.165E+3,0.29110000E+1,0.29086000E+1 - ,0.38288660E+3,0.223E+3,0.166E+3,0.29110000E+1,0.28965000E+1 - ,0.35650840E+3,0.223E+3,0.167E+3,0.29110000E+1,0.29242000E+1 - ,0.34627180E+3,0.223E+3,0.168E+3,0.29110000E+1,0.29282000E+1 - ,0.34411550E+3,0.223E+3,0.169E+3,0.29110000E+1,0.29246000E+1 - ,0.36209870E+3,0.223E+3,0.170E+3,0.29110000E+1,0.28482000E+1 - ,0.33249970E+3,0.223E+3,0.171E+3,0.29110000E+1,0.29219000E+1 - ,0.45419310E+3,0.223E+3,0.172E+3,0.29110000E+1,0.19254000E+1 - ,0.42031920E+3,0.223E+3,0.173E+3,0.29110000E+1,0.19459000E+1 - ,0.38236280E+3,0.223E+3,0.174E+3,0.29110000E+1,0.19292000E+1 - ,0.38788720E+3,0.223E+3,0.175E+3,0.29110000E+1,0.18104000E+1 - ,0.33726140E+3,0.223E+3,0.176E+3,0.29110000E+1,0.18858000E+1 - ,0.31693610E+3,0.223E+3,0.177E+3,0.29110000E+1,0.18648000E+1 - ,0.30251590E+3,0.223E+3,0.178E+3,0.29110000E+1,0.19188000E+1 - ,0.28922160E+3,0.223E+3,0.179E+3,0.29110000E+1,0.98460000E+0 - ,0.27881840E+3,0.223E+3,0.180E+3,0.29110000E+1,0.19896000E+1 - ,0.45500920E+3,0.223E+3,0.181E+3,0.29110000E+1,0.92670000E+0 - ,0.41279290E+3,0.223E+3,0.182E+3,0.29110000E+1,0.93830000E+0 - ,0.39932210E+3,0.223E+3,0.183E+3,0.29110000E+1,0.98200000E+0 - ,0.38766700E+3,0.223E+3,0.184E+3,0.29110000E+1,0.98150000E+0 - ,0.36107620E+3,0.223E+3,0.185E+3,0.29110000E+1,0.99540000E+0 - ,0.46915130E+3,0.223E+3,0.187E+3,0.29110000E+1,0.97050000E+0 - ,0.90055920E+3,0.223E+3,0.188E+3,0.29110000E+1,0.96620000E+0 - ,0.49379900E+3,0.223E+3,0.189E+3,0.29110000E+1,0.29070000E+1 - ,0.57234950E+3,0.223E+3,0.190E+3,0.29110000E+1,0.28844000E+1 - ,0.51099770E+3,0.223E+3,0.191E+3,0.29110000E+1,0.28738000E+1 - ,0.45000790E+3,0.223E+3,0.192E+3,0.29110000E+1,0.28878000E+1 - ,0.43270840E+3,0.223E+3,0.193E+3,0.29110000E+1,0.29095000E+1 - ,0.52512640E+3,0.223E+3,0.194E+3,0.29110000E+1,0.19209000E+1 - ,0.12146010E+3,0.223E+3,0.204E+3,0.29110000E+1,0.19697000E+1 - ,0.11917710E+3,0.223E+3,0.205E+3,0.29110000E+1,0.19441000E+1 - ,0.86606000E+2,0.223E+3,0.206E+3,0.29110000E+1,0.19985000E+1 - ,0.69080900E+2,0.223E+3,0.207E+3,0.29110000E+1,0.20143000E+1 - ,0.46987500E+2,0.223E+3,0.208E+3,0.29110000E+1,0.19887000E+1 - ,0.21643950E+3,0.223E+3,0.212E+3,0.29110000E+1,0.19496000E+1 - ,0.26172830E+3,0.223E+3,0.213E+3,0.29110000E+1,0.19311000E+1 - ,0.25015910E+3,0.223E+3,0.214E+3,0.29110000E+1,0.19435000E+1 - ,0.21641010E+3,0.223E+3,0.215E+3,0.29110000E+1,0.20102000E+1 - ,0.18097100E+3,0.223E+3,0.216E+3,0.29110000E+1,0.19903000E+1 - ,0.30339700E+3,0.223E+3,0.220E+3,0.29110000E+1,0.19349000E+1 - ,0.29073090E+3,0.223E+3,0.221E+3,0.29110000E+1,0.28999000E+1 - ,0.29424170E+3,0.223E+3,0.222E+3,0.29110000E+1,0.38675000E+1 - ,0.26933490E+3,0.223E+3,0.223E+3,0.29110000E+1,0.29110000E+1 - ,0.21313400E+2,0.224E+3,0.100E+1,0.10619100E+2,0.91180000E+0 - ,0.14405100E+2,0.224E+3,0.200E+1,0.10619100E+2,0.00000000E+0 - ,0.31428070E+3,0.224E+3,0.300E+1,0.10619100E+2,0.00000000E+0 - ,0.18490790E+3,0.224E+3,0.400E+1,0.10619100E+2,0.00000000E+0 - ,0.12637360E+3,0.224E+3,0.500E+1,0.10619100E+2,0.00000000E+0 - ,0.86546400E+2,0.224E+3,0.600E+1,0.10619100E+2,0.00000000E+0 - ,0.61247100E+2,0.224E+3,0.700E+1,0.10619100E+2,0.00000000E+0 - ,0.46813800E+2,0.224E+3,0.800E+1,0.10619100E+2,0.00000000E+0 - ,0.35781100E+2,0.224E+3,0.900E+1,0.10619100E+2,0.00000000E+0 - ,0.27737200E+2,0.224E+3,0.100E+2,0.10619100E+2,0.00000000E+0 - ,0.37649060E+3,0.224E+3,0.110E+2,0.10619100E+2,0.00000000E+0 - ,0.29367770E+3,0.224E+3,0.120E+2,0.10619100E+2,0.00000000E+0 - ,0.27250150E+3,0.224E+3,0.130E+2,0.10619100E+2,0.00000000E+0 - ,0.21680010E+3,0.224E+3,0.140E+2,0.10619100E+2,0.00000000E+0 - ,0.17067670E+3,0.224E+3,0.150E+2,0.10619100E+2,0.00000000E+0 - ,0.14267950E+3,0.224E+3,0.160E+2,0.10619100E+2,0.00000000E+0 - ,0.11742580E+3,0.224E+3,0.170E+2,0.10619100E+2,0.00000000E+0 - ,0.96759300E+2,0.224E+3,0.180E+2,0.10619100E+2,0.00000000E+0 - ,0.61705660E+3,0.224E+3,0.190E+2,0.10619100E+2,0.00000000E+0 - ,0.51377680E+3,0.224E+3,0.200E+2,0.10619100E+2,0.00000000E+0 - ,0.42547450E+3,0.224E+3,0.210E+2,0.10619100E+2,0.00000000E+0 - ,0.41213870E+3,0.224E+3,0.220E+2,0.10619100E+2,0.00000000E+0 - ,0.37806600E+3,0.224E+3,0.230E+2,0.10619100E+2,0.00000000E+0 - ,0.29848940E+3,0.224E+3,0.240E+2,0.10619100E+2,0.00000000E+0 - ,0.32635580E+3,0.224E+3,0.250E+2,0.10619100E+2,0.00000000E+0 - ,0.25682780E+3,0.224E+3,0.260E+2,0.10619100E+2,0.00000000E+0 - ,0.27263010E+3,0.224E+3,0.270E+2,0.10619100E+2,0.00000000E+0 - ,0.28029770E+3,0.224E+3,0.280E+2,0.10619100E+2,0.00000000E+0 - ,0.21550230E+3,0.224E+3,0.290E+2,0.10619100E+2,0.00000000E+0 - ,0.22196560E+3,0.224E+3,0.300E+2,0.10619100E+2,0.00000000E+0 - ,0.26215300E+3,0.224E+3,0.310E+2,0.10619100E+2,0.00000000E+0 - ,0.23279920E+3,0.224E+3,0.320E+2,0.10619100E+2,0.00000000E+0 - ,0.20004860E+3,0.224E+3,0.330E+2,0.10619100E+2,0.00000000E+0 - ,0.18047050E+3,0.224E+3,0.340E+2,0.10619100E+2,0.00000000E+0 - ,0.15887040E+3,0.224E+3,0.350E+2,0.10619100E+2,0.00000000E+0 - ,0.13897880E+3,0.224E+3,0.360E+2,0.10619100E+2,0.00000000E+0 - ,0.69273590E+3,0.224E+3,0.370E+2,0.10619100E+2,0.00000000E+0 - ,0.61235490E+3,0.224E+3,0.380E+2,0.10619100E+2,0.00000000E+0 - ,0.53890290E+3,0.224E+3,0.390E+2,0.10619100E+2,0.00000000E+0 - ,0.48594470E+3,0.224E+3,0.400E+2,0.10619100E+2,0.00000000E+0 - ,0.44423280E+3,0.224E+3,0.410E+2,0.10619100E+2,0.00000000E+0 - ,0.34481050E+3,0.224E+3,0.420E+2,0.10619100E+2,0.00000000E+0 - ,0.38391860E+3,0.224E+3,0.430E+2,0.10619100E+2,0.00000000E+0 - ,0.29422580E+3,0.224E+3,0.440E+2,0.10619100E+2,0.00000000E+0 - ,0.32113840E+3,0.224E+3,0.450E+2,0.10619100E+2,0.00000000E+0 - ,0.29830140E+3,0.224E+3,0.460E+2,0.10619100E+2,0.00000000E+0 - ,0.24916130E+3,0.224E+3,0.470E+2,0.10619100E+2,0.00000000E+0 - ,0.26345110E+3,0.224E+3,0.480E+2,0.10619100E+2,0.00000000E+0 - ,0.32878360E+3,0.224E+3,0.490E+2,0.10619100E+2,0.00000000E+0 - ,0.30551080E+3,0.224E+3,0.500E+2,0.10619100E+2,0.00000000E+0 - ,0.27385520E+3,0.224E+3,0.510E+2,0.10619100E+2,0.00000000E+0 - ,0.25510770E+3,0.224E+3,0.520E+2,0.10619100E+2,0.00000000E+0 - ,0.23174840E+3,0.224E+3,0.530E+2,0.10619100E+2,0.00000000E+0 - ,0.20936220E+3,0.224E+3,0.540E+2,0.10619100E+2,0.00000000E+0 - ,0.84446350E+3,0.224E+3,0.550E+2,0.10619100E+2,0.00000000E+0 - ,0.78008380E+3,0.224E+3,0.560E+2,0.10619100E+2,0.00000000E+0 - ,0.68834330E+3,0.224E+3,0.570E+2,0.10619100E+2,0.00000000E+0 - ,0.32346600E+3,0.224E+3,0.580E+2,0.10619100E+2,0.27991000E+1 - ,0.69246670E+3,0.224E+3,0.590E+2,0.10619100E+2,0.00000000E+0 - ,0.66535710E+3,0.224E+3,0.600E+2,0.10619100E+2,0.00000000E+0 - ,0.64877270E+3,0.224E+3,0.610E+2,0.10619100E+2,0.00000000E+0 - ,0.63350050E+3,0.224E+3,0.620E+2,0.10619100E+2,0.00000000E+0 - ,0.61995990E+3,0.224E+3,0.630E+2,0.10619100E+2,0.00000000E+0 - ,0.49059980E+3,0.224E+3,0.640E+2,0.10619100E+2,0.00000000E+0 - ,0.54884660E+3,0.224E+3,0.650E+2,0.10619100E+2,0.00000000E+0 - ,0.52980690E+3,0.224E+3,0.660E+2,0.10619100E+2,0.00000000E+0 - ,0.55970160E+3,0.224E+3,0.670E+2,0.10619100E+2,0.00000000E+0 - ,0.54785030E+3,0.224E+3,0.680E+2,0.10619100E+2,0.00000000E+0 - ,0.53720110E+3,0.224E+3,0.690E+2,0.10619100E+2,0.00000000E+0 - ,0.53075810E+3,0.224E+3,0.700E+2,0.10619100E+2,0.00000000E+0 - ,0.44908170E+3,0.224E+3,0.710E+2,0.10619100E+2,0.00000000E+0 - ,0.44357620E+3,0.224E+3,0.720E+2,0.10619100E+2,0.00000000E+0 - ,0.40628410E+3,0.224E+3,0.730E+2,0.10619100E+2,0.00000000E+0 - ,0.34453870E+3,0.224E+3,0.740E+2,0.10619100E+2,0.00000000E+0 - ,0.35083400E+3,0.224E+3,0.750E+2,0.10619100E+2,0.00000000E+0 - ,0.31905950E+3,0.224E+3,0.760E+2,0.10619100E+2,0.00000000E+0 - ,0.29307050E+3,0.224E+3,0.770E+2,0.10619100E+2,0.00000000E+0 - ,0.24455970E+3,0.224E+3,0.780E+2,0.10619100E+2,0.00000000E+0 - ,0.22890260E+3,0.224E+3,0.790E+2,0.10619100E+2,0.00000000E+0 - ,0.23555590E+3,0.224E+3,0.800E+2,0.10619100E+2,0.00000000E+0 - ,0.33874020E+3,0.224E+3,0.810E+2,0.10619100E+2,0.00000000E+0 - ,0.33222990E+3,0.224E+3,0.820E+2,0.10619100E+2,0.00000000E+0 - ,0.30674920E+3,0.224E+3,0.830E+2,0.10619100E+2,0.00000000E+0 - ,0.29347990E+3,0.224E+3,0.840E+2,0.10619100E+2,0.00000000E+0 - ,0.27198150E+3,0.224E+3,0.850E+2,0.10619100E+2,0.00000000E+0 - ,0.25033250E+3,0.224E+3,0.860E+2,0.10619100E+2,0.00000000E+0 - ,0.80027390E+3,0.224E+3,0.870E+2,0.10619100E+2,0.00000000E+0 - ,0.77336630E+3,0.224E+3,0.880E+2,0.10619100E+2,0.00000000E+0 - ,0.68635790E+3,0.224E+3,0.890E+2,0.10619100E+2,0.00000000E+0 - ,0.62032700E+3,0.224E+3,0.900E+2,0.10619100E+2,0.00000000E+0 - ,0.61475560E+3,0.224E+3,0.910E+2,0.10619100E+2,0.00000000E+0 - ,0.59538630E+3,0.224E+3,0.920E+2,0.10619100E+2,0.00000000E+0 - ,0.61108390E+3,0.224E+3,0.930E+2,0.10619100E+2,0.00000000E+0 - ,0.59208300E+3,0.224E+3,0.940E+2,0.10619100E+2,0.00000000E+0 - ,0.33942700E+2,0.224E+3,0.101E+3,0.10619100E+2,0.00000000E+0 - ,0.10775270E+3,0.224E+3,0.103E+3,0.10619100E+2,0.98650000E+0 - ,0.13789190E+3,0.224E+3,0.104E+3,0.10619100E+2,0.98080000E+0 - ,0.10672440E+3,0.224E+3,0.105E+3,0.10619100E+2,0.97060000E+0 - ,0.81233500E+2,0.224E+3,0.106E+3,0.10619100E+2,0.98680000E+0 - ,0.57176600E+2,0.224E+3,0.107E+3,0.10619100E+2,0.99440000E+0 - ,0.42104600E+2,0.224E+3,0.108E+3,0.10619100E+2,0.99250000E+0 - ,0.29392300E+2,0.224E+3,0.109E+3,0.10619100E+2,0.99820000E+0 - ,0.15738300E+3,0.224E+3,0.111E+3,0.10619100E+2,0.96840000E+0 - ,0.24300490E+3,0.224E+3,0.112E+3,0.10619100E+2,0.96280000E+0 - ,0.24743720E+3,0.224E+3,0.113E+3,0.10619100E+2,0.96480000E+0 - ,0.20073440E+3,0.224E+3,0.114E+3,0.10619100E+2,0.95070000E+0 - ,0.16576280E+3,0.224E+3,0.115E+3,0.10619100E+2,0.99470000E+0 - ,0.14110920E+3,0.224E+3,0.116E+3,0.10619100E+2,0.99480000E+0 - ,0.11621000E+3,0.224E+3,0.117E+3,0.10619100E+2,0.99720000E+0 - ,0.21890440E+3,0.224E+3,0.119E+3,0.10619100E+2,0.97670000E+0 - ,0.41206100E+3,0.224E+3,0.120E+3,0.10619100E+2,0.98310000E+0 - ,0.22010130E+3,0.224E+3,0.121E+3,0.10619100E+2,0.18627000E+1 - ,0.21264500E+3,0.224E+3,0.122E+3,0.10619100E+2,0.18299000E+1 - ,0.20840940E+3,0.224E+3,0.123E+3,0.10619100E+2,0.19138000E+1 - ,0.20634260E+3,0.224E+3,0.124E+3,0.10619100E+2,0.18269000E+1 - ,0.19055280E+3,0.224E+3,0.125E+3,0.10619100E+2,0.16406000E+1 - ,0.17666070E+3,0.224E+3,0.126E+3,0.10619100E+2,0.16483000E+1 - ,0.16859690E+3,0.224E+3,0.127E+3,0.10619100E+2,0.17149000E+1 - ,0.16478470E+3,0.224E+3,0.128E+3,0.10619100E+2,0.17937000E+1 - ,0.16235450E+3,0.224E+3,0.129E+3,0.10619100E+2,0.95760000E+0 - ,0.15312950E+3,0.224E+3,0.130E+3,0.10619100E+2,0.19419000E+1 - ,0.24667960E+3,0.224E+3,0.131E+3,0.10619100E+2,0.96010000E+0 - ,0.21822070E+3,0.224E+3,0.132E+3,0.10619100E+2,0.94340000E+0 - ,0.19676310E+3,0.224E+3,0.133E+3,0.10619100E+2,0.98890000E+0 - ,0.18053650E+3,0.224E+3,0.134E+3,0.10619100E+2,0.99010000E+0 - ,0.15993620E+3,0.224E+3,0.135E+3,0.10619100E+2,0.99740000E+0 - ,0.26178690E+3,0.224E+3,0.137E+3,0.10619100E+2,0.97380000E+0 - ,0.50151140E+3,0.224E+3,0.138E+3,0.10619100E+2,0.98010000E+0 - ,0.38709820E+3,0.224E+3,0.139E+3,0.10619100E+2,0.19153000E+1 - ,0.29122970E+3,0.224E+3,0.140E+3,0.10619100E+2,0.19355000E+1 - ,0.29411860E+3,0.224E+3,0.141E+3,0.10619100E+2,0.19545000E+1 - ,0.27484220E+3,0.224E+3,0.142E+3,0.10619100E+2,0.19420000E+1 - ,0.30675850E+3,0.224E+3,0.143E+3,0.10619100E+2,0.16682000E+1 - ,0.24066050E+3,0.224E+3,0.144E+3,0.10619100E+2,0.18584000E+1 - ,0.22538880E+3,0.224E+3,0.145E+3,0.10619100E+2,0.19003000E+1 - ,0.20959760E+3,0.224E+3,0.146E+3,0.10619100E+2,0.18630000E+1 - ,0.20266840E+3,0.224E+3,0.147E+3,0.10619100E+2,0.96790000E+0 - ,0.20093810E+3,0.224E+3,0.148E+3,0.10619100E+2,0.19539000E+1 - ,0.31400260E+3,0.224E+3,0.149E+3,0.10619100E+2,0.96330000E+0 - ,0.28561070E+3,0.224E+3,0.150E+3,0.10619100E+2,0.95140000E+0 - ,0.26862910E+3,0.224E+3,0.151E+3,0.10619100E+2,0.97490000E+0 - ,0.25497950E+3,0.224E+3,0.152E+3,0.10619100E+2,0.98110000E+0 - ,0.23389400E+3,0.224E+3,0.153E+3,0.10619100E+2,0.99680000E+0 - ,0.31070160E+3,0.224E+3,0.155E+3,0.10619100E+2,0.99090000E+0 - ,0.64956240E+3,0.224E+3,0.156E+3,0.10619100E+2,0.97970000E+0 - ,0.48969530E+3,0.224E+3,0.157E+3,0.10619100E+2,0.19373000E+1 - ,0.31384690E+3,0.224E+3,0.159E+3,0.10619100E+2,0.29425000E+1 - ,0.30738260E+3,0.224E+3,0.160E+3,0.10619100E+2,0.29455000E+1 - ,0.29775220E+3,0.224E+3,0.161E+3,0.10619100E+2,0.29413000E+1 - ,0.29895830E+3,0.224E+3,0.162E+3,0.10619100E+2,0.29300000E+1 - ,0.28752360E+3,0.224E+3,0.163E+3,0.10619100E+2,0.18286000E+1 - ,0.30066880E+3,0.224E+3,0.164E+3,0.10619100E+2,0.28732000E+1 - ,0.28267060E+3,0.224E+3,0.165E+3,0.10619100E+2,0.29086000E+1 - ,0.28721540E+3,0.224E+3,0.166E+3,0.10619100E+2,0.28965000E+1 - ,0.26848670E+3,0.224E+3,0.167E+3,0.10619100E+2,0.29242000E+1 - ,0.26090960E+3,0.224E+3,0.168E+3,0.10619100E+2,0.29282000E+1 - ,0.25915780E+3,0.224E+3,0.169E+3,0.10619100E+2,0.29246000E+1 - ,0.27191140E+3,0.224E+3,0.170E+3,0.10619100E+2,0.28482000E+1 - ,0.25057300E+3,0.224E+3,0.171E+3,0.10619100E+2,0.29219000E+1 - ,0.33624450E+3,0.224E+3,0.172E+3,0.10619100E+2,0.19254000E+1 - ,0.31321870E+3,0.224E+3,0.173E+3,0.10619100E+2,0.19459000E+1 - ,0.28691560E+3,0.224E+3,0.174E+3,0.10619100E+2,0.19292000E+1 - ,0.28946620E+3,0.224E+3,0.175E+3,0.10619100E+2,0.18104000E+1 - ,0.25557530E+3,0.224E+3,0.176E+3,0.10619100E+2,0.18858000E+1 - ,0.24090600E+3,0.224E+3,0.177E+3,0.10619100E+2,0.18648000E+1 - ,0.23039700E+3,0.224E+3,0.178E+3,0.10619100E+2,0.19188000E+1 - ,0.22040320E+3,0.224E+3,0.179E+3,0.10619100E+2,0.98460000E+0 - ,0.21352200E+3,0.224E+3,0.180E+3,0.10619100E+2,0.19896000E+1 - ,0.33805130E+3,0.224E+3,0.181E+3,0.10619100E+2,0.92670000E+0 - ,0.30969410E+3,0.224E+3,0.182E+3,0.10619100E+2,0.93830000E+0 - ,0.30120530E+3,0.224E+3,0.183E+3,0.10619100E+2,0.98200000E+0 - ,0.29366450E+3,0.224E+3,0.184E+3,0.10619100E+2,0.98150000E+0 - ,0.27525520E+3,0.224E+3,0.185E+3,0.10619100E+2,0.99540000E+0 - ,0.34998930E+3,0.224E+3,0.187E+3,0.10619100E+2,0.97050000E+0 - ,0.64793370E+3,0.224E+3,0.188E+3,0.10619100E+2,0.96620000E+0 - ,0.37121200E+3,0.224E+3,0.189E+3,0.10619100E+2,0.29070000E+1 - ,0.42672840E+3,0.224E+3,0.190E+3,0.10619100E+2,0.28844000E+1 - ,0.38254780E+3,0.224E+3,0.191E+3,0.10619100E+2,0.28738000E+1 - ,0.33923950E+3,0.224E+3,0.192E+3,0.10619100E+2,0.28878000E+1 - ,0.32676380E+3,0.224E+3,0.193E+3,0.10619100E+2,0.29095000E+1 - ,0.38936500E+3,0.224E+3,0.194E+3,0.10619100E+2,0.19209000E+1 - ,0.91098500E+2,0.224E+3,0.204E+3,0.10619100E+2,0.19697000E+1 - ,0.89961000E+2,0.224E+3,0.205E+3,0.10619100E+2,0.19441000E+1 - ,0.66613100E+2,0.224E+3,0.206E+3,0.10619100E+2,0.19985000E+1 - ,0.53772600E+2,0.224E+3,0.207E+3,0.10619100E+2,0.20143000E+1 - ,0.37302400E+2,0.224E+3,0.208E+3,0.10619100E+2,0.19887000E+1 - ,0.16055540E+3,0.224E+3,0.212E+3,0.10619100E+2,0.19496000E+1 - ,0.19398150E+3,0.224E+3,0.213E+3,0.10619100E+2,0.19311000E+1 - ,0.18700360E+3,0.224E+3,0.214E+3,0.10619100E+2,0.19435000E+1 - ,0.16347330E+3,0.224E+3,0.215E+3,0.10619100E+2,0.20102000E+1 - ,0.13829440E+3,0.224E+3,0.216E+3,0.10619100E+2,0.19903000E+1 - ,0.22568810E+3,0.224E+3,0.220E+3,0.10619100E+2,0.19349000E+1 - ,0.21764940E+3,0.224E+3,0.221E+3,0.10619100E+2,0.28999000E+1 - ,0.22041700E+3,0.224E+3,0.222E+3,0.10619100E+2,0.38675000E+1 - ,0.20186410E+3,0.224E+3,0.223E+3,0.10619100E+2,0.29110000E+1 - ,0.15334350E+3,0.224E+3,0.224E+3,0.10619100E+2,0.10619100E+2 - ,0.18469400E+2,0.225E+3,0.100E+1,0.98849000E+1,0.91180000E+0 - ,0.12698500E+2,0.225E+3,0.200E+1,0.98849000E+1,0.00000000E+0 - ,0.25656890E+3,0.225E+3,0.300E+1,0.98849000E+1,0.00000000E+0 - ,0.15476870E+3,0.225E+3,0.400E+1,0.98849000E+1,0.00000000E+0 - ,0.10748660E+3,0.225E+3,0.500E+1,0.98849000E+1,0.00000000E+0 - ,0.74551100E+2,0.225E+3,0.600E+1,0.98849000E+1,0.00000000E+0 - ,0.53282800E+2,0.225E+3,0.700E+1,0.98849000E+1,0.00000000E+0 - ,0.41023700E+2,0.225E+3,0.800E+1,0.98849000E+1,0.00000000E+0 - ,0.31558200E+2,0.225E+3,0.900E+1,0.98849000E+1,0.00000000E+0 - ,0.24595700E+2,0.225E+3,0.100E+2,0.98849000E+1,0.00000000E+0 - ,0.30795570E+3,0.225E+3,0.110E+2,0.98849000E+1,0.00000000E+0 - ,0.24475170E+3,0.225E+3,0.120E+2,0.98849000E+1,0.00000000E+0 - ,0.22891250E+3,0.225E+3,0.130E+2,0.98849000E+1,0.00000000E+0 - ,0.18409450E+3,0.225E+3,0.140E+2,0.98849000E+1,0.00000000E+0 - ,0.14631750E+3,0.225E+3,0.150E+2,0.98849000E+1,0.00000000E+0 - ,0.12311700E+3,0.225E+3,0.160E+2,0.98849000E+1,0.00000000E+0 - ,0.10197460E+3,0.225E+3,0.170E+2,0.98849000E+1,0.00000000E+0 - ,0.84510700E+2,0.225E+3,0.180E+2,0.98849000E+1,0.00000000E+0 - ,0.50386210E+3,0.225E+3,0.190E+2,0.98849000E+1,0.00000000E+0 - ,0.42523820E+3,0.225E+3,0.200E+2,0.98849000E+1,0.00000000E+0 - ,0.35332830E+3,0.225E+3,0.210E+2,0.98849000E+1,0.00000000E+0 - ,0.34349160E+3,0.225E+3,0.220E+2,0.98849000E+1,0.00000000E+0 - ,0.31574920E+3,0.225E+3,0.230E+2,0.98849000E+1,0.00000000E+0 - ,0.24968190E+3,0.225E+3,0.240E+2,0.98849000E+1,0.00000000E+0 - ,0.27339370E+3,0.225E+3,0.250E+2,0.98849000E+1,0.00000000E+0 - ,0.21557380E+3,0.225E+3,0.260E+2,0.98849000E+1,0.00000000E+0 - ,0.22950770E+3,0.225E+3,0.270E+2,0.98849000E+1,0.00000000E+0 - ,0.23544990E+3,0.225E+3,0.280E+2,0.98849000E+1,0.00000000E+0 - ,0.18134820E+3,0.225E+3,0.290E+2,0.98849000E+1,0.00000000E+0 - ,0.18772140E+3,0.225E+3,0.300E+2,0.98849000E+1,0.00000000E+0 - ,0.22112170E+3,0.225E+3,0.310E+2,0.98849000E+1,0.00000000E+0 - ,0.19793940E+3,0.225E+3,0.320E+2,0.98849000E+1,0.00000000E+0 - ,0.17140770E+3,0.225E+3,0.330E+2,0.98849000E+1,0.00000000E+0 - ,0.15541540E+3,0.225E+3,0.340E+2,0.98849000E+1,0.00000000E+0 - ,0.13754060E+3,0.225E+3,0.350E+2,0.98849000E+1,0.00000000E+0 - ,0.12092190E+3,0.225E+3,0.360E+2,0.98849000E+1,0.00000000E+0 - ,0.56671690E+3,0.225E+3,0.370E+2,0.98849000E+1,0.00000000E+0 - ,0.50680360E+3,0.225E+3,0.380E+2,0.98849000E+1,0.00000000E+0 - ,0.44877680E+3,0.225E+3,0.390E+2,0.98849000E+1,0.00000000E+0 - ,0.40632670E+3,0.225E+3,0.400E+2,0.98849000E+1,0.00000000E+0 - ,0.37252150E+3,0.225E+3,0.410E+2,0.98849000E+1,0.00000000E+0 - ,0.29074940E+3,0.225E+3,0.420E+2,0.98849000E+1,0.00000000E+0 - ,0.32305520E+3,0.225E+3,0.430E+2,0.98849000E+1,0.00000000E+0 - ,0.24907370E+3,0.225E+3,0.440E+2,0.98849000E+1,0.00000000E+0 - ,0.27161880E+3,0.225E+3,0.450E+2,0.98849000E+1,0.00000000E+0 - ,0.25275950E+3,0.225E+3,0.460E+2,0.98849000E+1,0.00000000E+0 - ,0.21123900E+3,0.225E+3,0.470E+2,0.98849000E+1,0.00000000E+0 - ,0.22376440E+3,0.225E+3,0.480E+2,0.98849000E+1,0.00000000E+0 - ,0.27763500E+3,0.225E+3,0.490E+2,0.98849000E+1,0.00000000E+0 - ,0.25955840E+3,0.225E+3,0.500E+2,0.98849000E+1,0.00000000E+0 - ,0.23417500E+3,0.225E+3,0.510E+2,0.98849000E+1,0.00000000E+0 - ,0.21904270E+3,0.225E+3,0.520E+2,0.98849000E+1,0.00000000E+0 - ,0.19989240E+3,0.225E+3,0.530E+2,0.98849000E+1,0.00000000E+0 - ,0.18138370E+3,0.225E+3,0.540E+2,0.98849000E+1,0.00000000E+0 - ,0.69130860E+3,0.225E+3,0.550E+2,0.98849000E+1,0.00000000E+0 - ,0.64466000E+3,0.225E+3,0.560E+2,0.98849000E+1,0.00000000E+0 - ,0.57226670E+3,0.225E+3,0.570E+2,0.98849000E+1,0.00000000E+0 - ,0.27639550E+3,0.225E+3,0.580E+2,0.98849000E+1,0.27991000E+1 - ,0.57357140E+3,0.225E+3,0.590E+2,0.98849000E+1,0.00000000E+0 - ,0.55161300E+3,0.225E+3,0.600E+2,0.98849000E+1,0.00000000E+0 - ,0.53799770E+3,0.225E+3,0.610E+2,0.98849000E+1,0.00000000E+0 - ,0.52544060E+3,0.225E+3,0.620E+2,0.98849000E+1,0.00000000E+0 - ,0.51431120E+3,0.225E+3,0.630E+2,0.98849000E+1,0.00000000E+0 - ,0.41008630E+3,0.225E+3,0.640E+2,0.98849000E+1,0.00000000E+0 - ,0.45463510E+3,0.225E+3,0.650E+2,0.98849000E+1,0.00000000E+0 - ,0.43940520E+3,0.225E+3,0.660E+2,0.98849000E+1,0.00000000E+0 - ,0.46497300E+3,0.225E+3,0.670E+2,0.98849000E+1,0.00000000E+0 - ,0.45518120E+3,0.225E+3,0.680E+2,0.98849000E+1,0.00000000E+0 - ,0.44642190E+3,0.225E+3,0.690E+2,0.98849000E+1,0.00000000E+0 - ,0.44091820E+3,0.225E+3,0.700E+2,0.98849000E+1,0.00000000E+0 - ,0.37499750E+3,0.225E+3,0.710E+2,0.98849000E+1,0.00000000E+0 - ,0.37259650E+3,0.225E+3,0.720E+2,0.98849000E+1,0.00000000E+0 - ,0.34269950E+3,0.225E+3,0.730E+2,0.98849000E+1,0.00000000E+0 - ,0.29180770E+3,0.225E+3,0.740E+2,0.98849000E+1,0.00000000E+0 - ,0.29752890E+3,0.225E+3,0.750E+2,0.98849000E+1,0.00000000E+0 - ,0.27157970E+3,0.225E+3,0.760E+2,0.98849000E+1,0.00000000E+0 - ,0.25022110E+3,0.225E+3,0.770E+2,0.98849000E+1,0.00000000E+0 - ,0.20963300E+3,0.225E+3,0.780E+2,0.98849000E+1,0.00000000E+0 - ,0.19652040E+3,0.225E+3,0.790E+2,0.98849000E+1,0.00000000E+0 - ,0.20240200E+3,0.225E+3,0.800E+2,0.98849000E+1,0.00000000E+0 - ,0.28686700E+3,0.225E+3,0.810E+2,0.98849000E+1,0.00000000E+0 - ,0.28256650E+3,0.225E+3,0.820E+2,0.98849000E+1,0.00000000E+0 - ,0.26234870E+3,0.225E+3,0.830E+2,0.98849000E+1,0.00000000E+0 - ,0.25184810E+3,0.225E+3,0.840E+2,0.98849000E+1,0.00000000E+0 - ,0.23438100E+3,0.225E+3,0.850E+2,0.98849000E+1,0.00000000E+0 - ,0.21658230E+3,0.225E+3,0.860E+2,0.98849000E+1,0.00000000E+0 - ,0.65835450E+3,0.225E+3,0.870E+2,0.98849000E+1,0.00000000E+0 - ,0.64123120E+3,0.225E+3,0.880E+2,0.98849000E+1,0.00000000E+0 - ,0.57224570E+3,0.225E+3,0.890E+2,0.98849000E+1,0.00000000E+0 - ,0.52079400E+3,0.225E+3,0.900E+2,0.98849000E+1,0.00000000E+0 - ,0.51467310E+3,0.225E+3,0.910E+2,0.98849000E+1,0.00000000E+0 - ,0.49856630E+3,0.225E+3,0.920E+2,0.98849000E+1,0.00000000E+0 - ,0.50962770E+3,0.225E+3,0.930E+2,0.98849000E+1,0.00000000E+0 - ,0.49413580E+3,0.225E+3,0.940E+2,0.98849000E+1,0.00000000E+0 - ,0.29120800E+2,0.225E+3,0.101E+3,0.98849000E+1,0.00000000E+0 - ,0.90423100E+2,0.225E+3,0.103E+3,0.98849000E+1,0.98650000E+0 - ,0.11610320E+3,0.225E+3,0.104E+3,0.98849000E+1,0.98080000E+0 - ,0.91109100E+2,0.225E+3,0.105E+3,0.98849000E+1,0.97060000E+0 - ,0.69988300E+2,0.225E+3,0.106E+3,0.98849000E+1,0.98680000E+0 - ,0.49769800E+2,0.225E+3,0.107E+3,0.98849000E+1,0.99440000E+0 - ,0.36969200E+2,0.225E+3,0.108E+3,0.98849000E+1,0.99250000E+0 - ,0.26092600E+2,0.225E+3,0.109E+3,0.98849000E+1,0.99820000E+0 - ,0.13182570E+3,0.225E+3,0.111E+3,0.98849000E+1,0.96840000E+0 - ,0.20321730E+3,0.225E+3,0.112E+3,0.98849000E+1,0.96280000E+0 - ,0.20829020E+3,0.225E+3,0.113E+3,0.98849000E+1,0.96480000E+0 - ,0.17075150E+3,0.225E+3,0.114E+3,0.98849000E+1,0.95070000E+0 - ,0.14216740E+3,0.225E+3,0.115E+3,0.98849000E+1,0.99470000E+0 - ,0.12175410E+3,0.225E+3,0.116E+3,0.98849000E+1,0.99480000E+0 - ,0.10091430E+3,0.225E+3,0.117E+3,0.98849000E+1,0.99720000E+0 - ,0.18481700E+3,0.225E+3,0.119E+3,0.98849000E+1,0.97670000E+0 - ,0.34176740E+3,0.225E+3,0.120E+3,0.98849000E+1,0.98310000E+0 - ,0.18713640E+3,0.225E+3,0.121E+3,0.98849000E+1,0.18627000E+1 - ,0.18091050E+3,0.225E+3,0.122E+3,0.98849000E+1,0.18299000E+1 - ,0.17729930E+3,0.225E+3,0.123E+3,0.98849000E+1,0.19138000E+1 - ,0.17538670E+3,0.225E+3,0.124E+3,0.98849000E+1,0.18269000E+1 - ,0.16268440E+3,0.225E+3,0.125E+3,0.98849000E+1,0.16406000E+1 - ,0.15107680E+3,0.225E+3,0.126E+3,0.98849000E+1,0.16483000E+1 - ,0.14421590E+3,0.225E+3,0.127E+3,0.98849000E+1,0.17149000E+1 - ,0.14090800E+3,0.225E+3,0.128E+3,0.98849000E+1,0.17937000E+1 - ,0.13835720E+3,0.225E+3,0.129E+3,0.98849000E+1,0.95760000E+0 - ,0.13131000E+3,0.225E+3,0.130E+3,0.98849000E+1,0.19419000E+1 - ,0.20851100E+3,0.225E+3,0.131E+3,0.98849000E+1,0.96010000E+0 - ,0.18592460E+3,0.225E+3,0.132E+3,0.98849000E+1,0.94340000E+0 - ,0.16867800E+3,0.225E+3,0.133E+3,0.98849000E+1,0.98890000E+0 - ,0.15546520E+3,0.225E+3,0.134E+3,0.98849000E+1,0.99010000E+0 - ,0.13842960E+3,0.225E+3,0.135E+3,0.98849000E+1,0.99740000E+0 - ,0.22151020E+3,0.225E+3,0.137E+3,0.98849000E+1,0.97380000E+0 - ,0.41583400E+3,0.225E+3,0.138E+3,0.98849000E+1,0.98010000E+0 - ,0.32497510E+3,0.225E+3,0.139E+3,0.98849000E+1,0.19153000E+1 - ,0.24759810E+3,0.225E+3,0.140E+3,0.98849000E+1,0.19355000E+1 - ,0.25002660E+3,0.225E+3,0.141E+3,0.98849000E+1,0.19545000E+1 - ,0.23413150E+3,0.225E+3,0.142E+3,0.98849000E+1,0.19420000E+1 - ,0.25980510E+3,0.225E+3,0.143E+3,0.98849000E+1,0.16682000E+1 - ,0.20600200E+3,0.225E+3,0.144E+3,0.98849000E+1,0.18584000E+1 - ,0.19308940E+3,0.225E+3,0.145E+3,0.98849000E+1,0.19003000E+1 - ,0.17978240E+3,0.225E+3,0.146E+3,0.98849000E+1,0.18630000E+1 - ,0.17373810E+3,0.225E+3,0.147E+3,0.98849000E+1,0.96790000E+0 - ,0.17276980E+3,0.225E+3,0.148E+3,0.98849000E+1,0.19539000E+1 - ,0.26575750E+3,0.225E+3,0.149E+3,0.98849000E+1,0.96330000E+0 - ,0.24329840E+3,0.225E+3,0.150E+3,0.98849000E+1,0.95140000E+0 - ,0.22991580E+3,0.225E+3,0.151E+3,0.98849000E+1,0.97490000E+0 - ,0.21898580E+3,0.225E+3,0.152E+3,0.98849000E+1,0.98110000E+0 - ,0.20172290E+3,0.225E+3,0.153E+3,0.98849000E+1,0.99680000E+0 - ,0.26411800E+3,0.225E+3,0.155E+3,0.98849000E+1,0.99090000E+0 - ,0.53758040E+3,0.225E+3,0.156E+3,0.98849000E+1,0.97970000E+0 - ,0.41076200E+3,0.225E+3,0.157E+3,0.98849000E+1,0.19373000E+1 - ,0.26829020E+3,0.225E+3,0.159E+3,0.98849000E+1,0.29425000E+1 - ,0.26278540E+3,0.225E+3,0.160E+3,0.98849000E+1,0.29455000E+1 - ,0.25464690E+3,0.225E+3,0.161E+3,0.98849000E+1,0.29413000E+1 - ,0.25543700E+3,0.225E+3,0.162E+3,0.98849000E+1,0.29300000E+1 - ,0.24496120E+3,0.225E+3,0.163E+3,0.98849000E+1,0.18286000E+1 - ,0.25677460E+3,0.225E+3,0.164E+3,0.98849000E+1,0.28732000E+1 - ,0.24162910E+3,0.225E+3,0.165E+3,0.98849000E+1,0.29086000E+1 - ,0.24510920E+3,0.225E+3,0.166E+3,0.98849000E+1,0.28965000E+1 - ,0.22968660E+3,0.225E+3,0.167E+3,0.98849000E+1,0.29242000E+1 - ,0.22327460E+3,0.225E+3,0.168E+3,0.98849000E+1,0.29282000E+1 - ,0.22171170E+3,0.225E+3,0.169E+3,0.98849000E+1,0.29246000E+1 - ,0.23223100E+3,0.225E+3,0.170E+3,0.98849000E+1,0.28482000E+1 - ,0.21445700E+3,0.225E+3,0.171E+3,0.98849000E+1,0.29219000E+1 - ,0.28461080E+3,0.225E+3,0.172E+3,0.98849000E+1,0.19254000E+1 - ,0.26619500E+3,0.225E+3,0.173E+3,0.98849000E+1,0.19459000E+1 - ,0.24486880E+3,0.225E+3,0.174E+3,0.98849000E+1,0.19292000E+1 - ,0.24620160E+3,0.225E+3,0.175E+3,0.98849000E+1,0.18104000E+1 - ,0.21942180E+3,0.225E+3,0.176E+3,0.98849000E+1,0.18858000E+1 - ,0.20718460E+3,0.225E+3,0.177E+3,0.98849000E+1,0.18648000E+1 - ,0.19836510E+3,0.225E+3,0.178E+3,0.98849000E+1,0.19188000E+1 - ,0.18980990E+3,0.225E+3,0.179E+3,0.98849000E+1,0.98460000E+0 - ,0.18444130E+3,0.225E+3,0.180E+3,0.98849000E+1,0.19896000E+1 - ,0.28672590E+3,0.225E+3,0.181E+3,0.98849000E+1,0.92670000E+0 - ,0.26430990E+3,0.225E+3,0.182E+3,0.98849000E+1,0.93830000E+0 - ,0.25793290E+3,0.225E+3,0.183E+3,0.98849000E+1,0.98200000E+0 - ,0.25212510E+3,0.225E+3,0.184E+3,0.98849000E+1,0.98150000E+0 - ,0.23719910E+3,0.225E+3,0.185E+3,0.98849000E+1,0.99540000E+0 - ,0.29760870E+3,0.225E+3,0.187E+3,0.98849000E+1,0.97050000E+0 - ,0.53830700E+3,0.225E+3,0.188E+3,0.98849000E+1,0.96620000E+0 - ,0.31722510E+3,0.225E+3,0.189E+3,0.98849000E+1,0.29070000E+1 - ,0.36280170E+3,0.225E+3,0.190E+3,0.98849000E+1,0.28844000E+1 - ,0.32606070E+3,0.225E+3,0.191E+3,0.98849000E+1,0.28738000E+1 - ,0.29035010E+3,0.225E+3,0.192E+3,0.98849000E+1,0.28878000E+1 - ,0.27996200E+3,0.225E+3,0.193E+3,0.98849000E+1,0.29095000E+1 - ,0.32981320E+3,0.225E+3,0.194E+3,0.98849000E+1,0.19209000E+1 - ,0.77782300E+2,0.225E+3,0.204E+3,0.98849000E+1,0.19697000E+1 - ,0.77081200E+2,0.225E+3,0.205E+3,0.98849000E+1,0.19441000E+1 - ,0.57689300E+2,0.225E+3,0.206E+3,0.98849000E+1,0.19985000E+1 - ,0.46868100E+2,0.225E+3,0.207E+3,0.98849000E+1,0.20143000E+1 - ,0.32849500E+2,0.225E+3,0.208E+3,0.98849000E+1,0.19887000E+1 - ,0.13616190E+3,0.225E+3,0.212E+3,0.98849000E+1,0.19496000E+1 - ,0.16440450E+3,0.225E+3,0.213E+3,0.98849000E+1,0.19311000E+1 - ,0.15932860E+3,0.225E+3,0.214E+3,0.98849000E+1,0.19435000E+1 - ,0.14014430E+3,0.225E+3,0.215E+3,0.98849000E+1,0.20102000E+1 - ,0.11934860E+3,0.225E+3,0.216E+3,0.98849000E+1,0.19903000E+1 - ,0.19163220E+3,0.225E+3,0.220E+3,0.98849000E+1,0.19349000E+1 - ,0.18555440E+3,0.225E+3,0.221E+3,0.98849000E+1,0.28999000E+1 - ,0.18798380E+3,0.225E+3,0.222E+3,0.98849000E+1,0.38675000E+1 - ,0.17219800E+3,0.225E+3,0.223E+3,0.98849000E+1,0.29110000E+1 - ,0.13182880E+3,0.225E+3,0.224E+3,0.98849000E+1,0.10619100E+2 - ,0.11384630E+3,0.225E+3,0.225E+3,0.98849000E+1,0.98849000E+1 - ,0.18097700E+2,0.226E+3,0.100E+1,0.91376000E+1,0.91180000E+0 - ,0.12427700E+2,0.226E+3,0.200E+1,0.91376000E+1,0.00000000E+0 - ,0.25324320E+3,0.226E+3,0.300E+1,0.91376000E+1,0.00000000E+0 - ,0.15229860E+3,0.226E+3,0.400E+1,0.91376000E+1,0.00000000E+0 - ,0.10555810E+3,0.226E+3,0.500E+1,0.91376000E+1,0.00000000E+0 - ,0.73107900E+2,0.226E+3,0.600E+1,0.91376000E+1,0.00000000E+0 - ,0.52202800E+2,0.226E+3,0.700E+1,0.91376000E+1,0.00000000E+0 - ,0.40170900E+2,0.226E+3,0.800E+1,0.91376000E+1,0.00000000E+0 - ,0.30892500E+2,0.226E+3,0.900E+1,0.91376000E+1,0.00000000E+0 - ,0.24074100E+2,0.226E+3,0.100E+2,0.91376000E+1,0.00000000E+0 - ,0.30391240E+3,0.226E+3,0.110E+2,0.91376000E+1,0.00000000E+0 - ,0.24099620E+3,0.226E+3,0.120E+2,0.91376000E+1,0.00000000E+0 - ,0.22516630E+3,0.226E+3,0.130E+2,0.91376000E+1,0.00000000E+0 - ,0.18083460E+3,0.226E+3,0.140E+2,0.91376000E+1,0.00000000E+0 - ,0.14355850E+3,0.226E+3,0.150E+2,0.91376000E+1,0.00000000E+0 - ,0.12070600E+3,0.226E+3,0.160E+2,0.91376000E+1,0.00000000E+0 - ,0.99911900E+2,0.226E+3,0.170E+2,0.91376000E+1,0.00000000E+0 - ,0.82759100E+2,0.226E+3,0.180E+2,0.91376000E+1,0.00000000E+0 - ,0.49731050E+3,0.226E+3,0.190E+2,0.91376000E+1,0.00000000E+0 - ,0.41906350E+3,0.226E+3,0.200E+2,0.91376000E+1,0.00000000E+0 - ,0.34806420E+3,0.226E+3,0.210E+2,0.91376000E+1,0.00000000E+0 - ,0.33822830E+3,0.226E+3,0.220E+2,0.91376000E+1,0.00000000E+0 - ,0.31083750E+3,0.226E+3,0.230E+2,0.91376000E+1,0.00000000E+0 - ,0.24576290E+3,0.226E+3,0.240E+2,0.91376000E+1,0.00000000E+0 - ,0.26904940E+3,0.226E+3,0.250E+2,0.91376000E+1,0.00000000E+0 - ,0.21211090E+3,0.226E+3,0.260E+2,0.91376000E+1,0.00000000E+0 - ,0.22573460E+3,0.226E+3,0.270E+2,0.91376000E+1,0.00000000E+0 - ,0.23164220E+3,0.226E+3,0.280E+2,0.91376000E+1,0.00000000E+0 - ,0.17839240E+3,0.226E+3,0.290E+2,0.91376000E+1,0.00000000E+0 - ,0.18454030E+3,0.226E+3,0.300E+2,0.91376000E+1,0.00000000E+0 - ,0.21740400E+3,0.226E+3,0.310E+2,0.91376000E+1,0.00000000E+0 - ,0.19441570E+3,0.226E+3,0.320E+2,0.91376000E+1,0.00000000E+0 - ,0.16819670E+3,0.226E+3,0.330E+2,0.91376000E+1,0.00000000E+0 - ,0.15241280E+3,0.226E+3,0.340E+2,0.91376000E+1,0.00000000E+0 - ,0.13480510E+3,0.226E+3,0.350E+2,0.91376000E+1,0.00000000E+0 - ,0.11845780E+3,0.226E+3,0.360E+2,0.91376000E+1,0.00000000E+0 - ,0.55921770E+3,0.226E+3,0.370E+2,0.91376000E+1,0.00000000E+0 - ,0.49943750E+3,0.226E+3,0.380E+2,0.91376000E+1,0.00000000E+0 - ,0.44192580E+3,0.226E+3,0.390E+2,0.91376000E+1,0.00000000E+0 - ,0.39992950E+3,0.226E+3,0.400E+2,0.91376000E+1,0.00000000E+0 - ,0.36653290E+3,0.226E+3,0.410E+2,0.91376000E+1,0.00000000E+0 - ,0.28589770E+3,0.226E+3,0.420E+2,0.91376000E+1,0.00000000E+0 - ,0.31774320E+3,0.226E+3,0.430E+2,0.91376000E+1,0.00000000E+0 - ,0.24481840E+3,0.226E+3,0.440E+2,0.91376000E+1,0.00000000E+0 - ,0.26700480E+3,0.226E+3,0.450E+2,0.91376000E+1,0.00000000E+0 - ,0.24842030E+3,0.226E+3,0.460E+2,0.91376000E+1,0.00000000E+0 - ,0.20761810E+3,0.226E+3,0.470E+2,0.91376000E+1,0.00000000E+0 - ,0.21987500E+3,0.226E+3,0.480E+2,0.91376000E+1,0.00000000E+0 - ,0.27297690E+3,0.226E+3,0.490E+2,0.91376000E+1,0.00000000E+0 - ,0.25501000E+3,0.226E+3,0.500E+2,0.91376000E+1,0.00000000E+0 - ,0.22988770E+3,0.226E+3,0.510E+2,0.91376000E+1,0.00000000E+0 - ,0.21492360E+3,0.226E+3,0.520E+2,0.91376000E+1,0.00000000E+0 - ,0.19602880E+3,0.226E+3,0.530E+2,0.91376000E+1,0.00000000E+0 - ,0.17779050E+3,0.226E+3,0.540E+2,0.91376000E+1,0.00000000E+0 - ,0.68205790E+3,0.226E+3,0.550E+2,0.91376000E+1,0.00000000E+0 - ,0.63538110E+3,0.226E+3,0.560E+2,0.91376000E+1,0.00000000E+0 - ,0.56362450E+3,0.226E+3,0.570E+2,0.91376000E+1,0.00000000E+0 - ,0.27135450E+3,0.226E+3,0.580E+2,0.91376000E+1,0.27991000E+1 - ,0.56520430E+3,0.226E+3,0.590E+2,0.91376000E+1,0.00000000E+0 - ,0.54351170E+3,0.226E+3,0.600E+2,0.91376000E+1,0.00000000E+0 - ,0.53008260E+3,0.226E+3,0.610E+2,0.91376000E+1,0.00000000E+0 - ,0.51769890E+3,0.226E+3,0.620E+2,0.91376000E+1,0.00000000E+0 - ,0.50672260E+3,0.226E+3,0.630E+2,0.91376000E+1,0.00000000E+0 - ,0.40367390E+3,0.226E+3,0.640E+2,0.91376000E+1,0.00000000E+0 - ,0.44799700E+3,0.226E+3,0.650E+2,0.91376000E+1,0.00000000E+0 - ,0.43292450E+3,0.226E+3,0.660E+2,0.91376000E+1,0.00000000E+0 - ,0.45804090E+3,0.226E+3,0.670E+2,0.91376000E+1,0.00000000E+0 - ,0.44838960E+3,0.226E+3,0.680E+2,0.91376000E+1,0.00000000E+0 - ,0.43975060E+3,0.226E+3,0.690E+2,0.91376000E+1,0.00000000E+0 - ,0.43434720E+3,0.226E+3,0.700E+2,0.91376000E+1,0.00000000E+0 - ,0.36918400E+3,0.226E+3,0.710E+2,0.91376000E+1,0.00000000E+0 - ,0.36653030E+3,0.226E+3,0.720E+2,0.91376000E+1,0.00000000E+0 - ,0.33695440E+3,0.226E+3,0.730E+2,0.91376000E+1,0.00000000E+0 - ,0.28678360E+3,0.226E+3,0.740E+2,0.91376000E+1,0.00000000E+0 - ,0.29236350E+3,0.226E+3,0.750E+2,0.91376000E+1,0.00000000E+0 - ,0.26675590E+3,0.226E+3,0.760E+2,0.91376000E+1,0.00000000E+0 - ,0.24569670E+3,0.226E+3,0.770E+2,0.91376000E+1,0.00000000E+0 - ,0.20576580E+3,0.226E+3,0.780E+2,0.91376000E+1,0.00000000E+0 - ,0.19287140E+3,0.226E+3,0.790E+2,0.91376000E+1,0.00000000E+0 - ,0.19862370E+3,0.226E+3,0.800E+2,0.91376000E+1,0.00000000E+0 - ,0.28196900E+3,0.226E+3,0.810E+2,0.91376000E+1,0.00000000E+0 - ,0.27759650E+3,0.226E+3,0.820E+2,0.91376000E+1,0.00000000E+0 - ,0.25755980E+3,0.226E+3,0.830E+2,0.91376000E+1,0.00000000E+0 - ,0.24714790E+3,0.226E+3,0.840E+2,0.91376000E+1,0.00000000E+0 - ,0.22989230E+3,0.226E+3,0.850E+2,0.91376000E+1,0.00000000E+0 - ,0.21233880E+3,0.226E+3,0.860E+2,0.91376000E+1,0.00000000E+0 - ,0.64916640E+3,0.226E+3,0.870E+2,0.91376000E+1,0.00000000E+0 - ,0.63174380E+3,0.226E+3,0.880E+2,0.91376000E+1,0.00000000E+0 - ,0.56344000E+3,0.226E+3,0.890E+2,0.91376000E+1,0.00000000E+0 - ,0.51237500E+3,0.226E+3,0.900E+2,0.91376000E+1,0.00000000E+0 - ,0.50653490E+3,0.226E+3,0.910E+2,0.91376000E+1,0.00000000E+0 - ,0.49067580E+3,0.226E+3,0.920E+2,0.91376000E+1,0.00000000E+0 - ,0.50182620E+3,0.226E+3,0.930E+2,0.91376000E+1,0.00000000E+0 - ,0.48653240E+3,0.226E+3,0.940E+2,0.91376000E+1,0.00000000E+0 - ,0.28566500E+2,0.226E+3,0.101E+3,0.91376000E+1,0.00000000E+0 - ,0.88953800E+2,0.226E+3,0.103E+3,0.91376000E+1,0.98650000E+0 - ,0.11416130E+3,0.226E+3,0.104E+3,0.91376000E+1,0.98080000E+0 - ,0.89435400E+2,0.226E+3,0.105E+3,0.91376000E+1,0.97060000E+0 - ,0.68629300E+2,0.226E+3,0.106E+3,0.91376000E+1,0.98680000E+0 - ,0.48755800E+2,0.226E+3,0.107E+3,0.91376000E+1,0.99440000E+0 - ,0.36191900E+2,0.226E+3,0.108E+3,0.91376000E+1,0.99250000E+0 - ,0.25531400E+2,0.226E+3,0.109E+3,0.91376000E+1,0.99820000E+0 - ,0.12973320E+3,0.226E+3,0.111E+3,0.91376000E+1,0.96840000E+0 - ,0.20000410E+3,0.226E+3,0.112E+3,0.91376000E+1,0.96280000E+0 - ,0.20482820E+3,0.226E+3,0.113E+3,0.91376000E+1,0.96480000E+0 - ,0.16769170E+3,0.226E+3,0.114E+3,0.91376000E+1,0.95070000E+0 - ,0.13948020E+3,0.226E+3,0.115E+3,0.91376000E+1,0.99470000E+0 - ,0.11937190E+3,0.226E+3,0.116E+3,0.91376000E+1,0.99480000E+0 - ,0.98874700E+2,0.226E+3,0.117E+3,0.91376000E+1,0.99720000E+0 - ,0.18170400E+3,0.226E+3,0.119E+3,0.91376000E+1,0.97670000E+0 - ,0.33670380E+3,0.226E+3,0.120E+3,0.91376000E+1,0.98310000E+0 - ,0.18382570E+3,0.226E+3,0.121E+3,0.91376000E+1,0.18627000E+1 - ,0.17770070E+3,0.226E+3,0.122E+3,0.91376000E+1,0.18299000E+1 - ,0.17415940E+3,0.226E+3,0.123E+3,0.91376000E+1,0.19138000E+1 - ,0.17230360E+3,0.226E+3,0.124E+3,0.91376000E+1,0.18269000E+1 - ,0.15974020E+3,0.226E+3,0.125E+3,0.91376000E+1,0.16406000E+1 - ,0.14831710E+3,0.226E+3,0.126E+3,0.91376000E+1,0.16483000E+1 - ,0.14158150E+3,0.226E+3,0.127E+3,0.91376000E+1,0.17149000E+1 - ,0.13834240E+3,0.226E+3,0.128E+3,0.91376000E+1,0.17937000E+1 - ,0.13590190E+3,0.226E+3,0.129E+3,0.91376000E+1,0.95760000E+0 - ,0.12887600E+3,0.226E+3,0.130E+3,0.91376000E+1,0.19419000E+1 - ,0.20495230E+3,0.226E+3,0.131E+3,0.91376000E+1,0.96010000E+0 - ,0.18256910E+3,0.226E+3,0.132E+3,0.91376000E+1,0.94340000E+0 - ,0.16550840E+3,0.226E+3,0.133E+3,0.91376000E+1,0.98890000E+0 - ,0.15246290E+3,0.226E+3,0.134E+3,0.91376000E+1,0.99010000E+0 - ,0.13568060E+3,0.226E+3,0.135E+3,0.91376000E+1,0.99740000E+0 - ,0.21771950E+3,0.226E+3,0.137E+3,0.91376000E+1,0.97380000E+0 - ,0.40967730E+3,0.226E+3,0.138E+3,0.91376000E+1,0.98010000E+0 - ,0.31968600E+3,0.226E+3,0.139E+3,0.91376000E+1,0.19153000E+1 - ,0.24320860E+3,0.226E+3,0.140E+3,0.91376000E+1,0.19355000E+1 - ,0.24560370E+3,0.226E+3,0.141E+3,0.91376000E+1,0.19545000E+1 - ,0.22993990E+3,0.226E+3,0.142E+3,0.91376000E+1,0.19420000E+1 - ,0.25533300E+3,0.226E+3,0.143E+3,0.91376000E+1,0.16682000E+1 - ,0.20221300E+3,0.226E+3,0.144E+3,0.91376000E+1,0.18584000E+1 - ,0.18952850E+3,0.226E+3,0.145E+3,0.91376000E+1,0.19003000E+1 - ,0.17645130E+3,0.226E+3,0.146E+3,0.91376000E+1,0.18630000E+1 - ,0.17054030E+3,0.226E+3,0.147E+3,0.91376000E+1,0.96790000E+0 - ,0.16952460E+3,0.226E+3,0.148E+3,0.91376000E+1,0.19539000E+1 - ,0.26122680E+3,0.226E+3,0.149E+3,0.91376000E+1,0.96330000E+0 - ,0.23895870E+3,0.226E+3,0.150E+3,0.91376000E+1,0.95140000E+0 - ,0.22568120E+3,0.226E+3,0.151E+3,0.91376000E+1,0.97490000E+0 - ,0.21486070E+3,0.226E+3,0.152E+3,0.91376000E+1,0.98110000E+0 - ,0.19782510E+3,0.226E+3,0.153E+3,0.91376000E+1,0.99680000E+0 - ,0.25941930E+3,0.226E+3,0.155E+3,0.91376000E+1,0.99090000E+0 - ,0.52971550E+3,0.226E+3,0.156E+3,0.91376000E+1,0.97970000E+0 - ,0.40410260E+3,0.226E+3,0.157E+3,0.91376000E+1,0.19373000E+1 - ,0.26338510E+3,0.226E+3,0.159E+3,0.91376000E+1,0.29425000E+1 - ,0.25797950E+3,0.226E+3,0.160E+3,0.91376000E+1,0.29455000E+1 - ,0.24997990E+3,0.226E+3,0.161E+3,0.91376000E+1,0.29413000E+1 - ,0.25078300E+3,0.226E+3,0.162E+3,0.91376000E+1,0.29300000E+1 - ,0.24059220E+3,0.226E+3,0.163E+3,0.91376000E+1,0.18286000E+1 - ,0.25210750E+3,0.226E+3,0.164E+3,0.91376000E+1,0.28732000E+1 - ,0.23721640E+3,0.226E+3,0.165E+3,0.91376000E+1,0.29086000E+1 - ,0.24067880E+3,0.226E+3,0.166E+3,0.91376000E+1,0.28965000E+1 - ,0.22546970E+3,0.226E+3,0.167E+3,0.91376000E+1,0.29242000E+1 - ,0.21916750E+3,0.226E+3,0.168E+3,0.91376000E+1,0.29282000E+1 - ,0.21764010E+3,0.226E+3,0.169E+3,0.91376000E+1,0.29246000E+1 - ,0.22800720E+3,0.226E+3,0.170E+3,0.91376000E+1,0.28482000E+1 - ,0.21050650E+3,0.226E+3,0.171E+3,0.91376000E+1,0.29219000E+1 - ,0.27971240E+3,0.226E+3,0.172E+3,0.91376000E+1,0.19254000E+1 - ,0.26149250E+3,0.226E+3,0.173E+3,0.91376000E+1,0.19459000E+1 - ,0.24043090E+3,0.226E+3,0.174E+3,0.91376000E+1,0.19292000E+1 - ,0.24184390E+3,0.226E+3,0.175E+3,0.91376000E+1,0.18104000E+1 - ,0.21530790E+3,0.226E+3,0.176E+3,0.91376000E+1,0.18858000E+1 - ,0.20326950E+3,0.226E+3,0.177E+3,0.91376000E+1,0.18648000E+1 - ,0.19460130E+3,0.226E+3,0.178E+3,0.91376000E+1,0.19188000E+1 - ,0.18621520E+3,0.226E+3,0.179E+3,0.91376000E+1,0.98460000E+0 - ,0.18088400E+3,0.226E+3,0.180E+3,0.91376000E+1,0.19896000E+1 - ,0.28177560E+3,0.226E+3,0.181E+3,0.91376000E+1,0.92670000E+0 - ,0.25955420E+3,0.226E+3,0.182E+3,0.91376000E+1,0.93830000E+0 - ,0.25318480E+3,0.226E+3,0.183E+3,0.91376000E+1,0.98200000E+0 - ,0.24740350E+3,0.226E+3,0.184E+3,0.91376000E+1,0.98150000E+0 - ,0.23265410E+3,0.226E+3,0.185E+3,0.91376000E+1,0.99540000E+0 - ,0.29230010E+3,0.226E+3,0.187E+3,0.91376000E+1,0.97050000E+0 - ,0.53018710E+3,0.226E+3,0.188E+3,0.91376000E+1,0.96620000E+0 - ,0.31143140E+3,0.226E+3,0.189E+3,0.91376000E+1,0.29070000E+1 - ,0.35639700E+3,0.226E+3,0.190E+3,0.91376000E+1,0.28844000E+1 - ,0.32021770E+3,0.226E+3,0.191E+3,0.91376000E+1,0.28738000E+1 - ,0.28502300E+3,0.226E+3,0.192E+3,0.91376000E+1,0.28878000E+1 - ,0.27479730E+3,0.226E+3,0.193E+3,0.91376000E+1,0.29095000E+1 - ,0.32416540E+3,0.226E+3,0.194E+3,0.91376000E+1,0.19209000E+1 - ,0.76349400E+2,0.226E+3,0.204E+3,0.91376000E+1,0.19697000E+1 - ,0.75632700E+2,0.226E+3,0.205E+3,0.91376000E+1,0.19441000E+1 - ,0.56542900E+2,0.226E+3,0.206E+3,0.91376000E+1,0.19985000E+1 - ,0.45914000E+2,0.226E+3,0.207E+3,0.91376000E+1,0.20143000E+1 - ,0.32158400E+2,0.226E+3,0.208E+3,0.91376000E+1,0.19887000E+1 - ,0.13378530E+3,0.226E+3,0.212E+3,0.91376000E+1,0.19496000E+1 - ,0.16153570E+3,0.226E+3,0.213E+3,0.91376000E+1,0.19311000E+1 - ,0.15644370E+3,0.226E+3,0.214E+3,0.91376000E+1,0.19435000E+1 - ,0.13750430E+3,0.226E+3,0.215E+3,0.91376000E+1,0.20102000E+1 - ,0.11701210E+3,0.226E+3,0.216E+3,0.91376000E+1,0.19903000E+1 - ,0.18826960E+3,0.226E+3,0.220E+3,0.91376000E+1,0.19349000E+1 - ,0.18220620E+3,0.226E+3,0.221E+3,0.91376000E+1,0.28999000E+1 - ,0.18458560E+3,0.226E+3,0.222E+3,0.91376000E+1,0.38675000E+1 - ,0.16909000E+3,0.226E+3,0.223E+3,0.91376000E+1,0.29110000E+1 - ,0.12934440E+3,0.226E+3,0.224E+3,0.91376000E+1,0.10619100E+2 - ,0.11164910E+3,0.226E+3,0.225E+3,0.91376000E+1,0.98849000E+1 - ,0.10950410E+3,0.226E+3,0.226E+3,0.91376000E+1,0.91376000E+1 - ,0.20774100E+2,0.227E+3,0.100E+1,0.29263000E+1,0.91180000E+0 - ,0.13880400E+2,0.227E+3,0.200E+1,0.29263000E+1,0.00000000E+0 - ,0.31984480E+3,0.227E+3,0.300E+1,0.29263000E+1,0.00000000E+0 - ,0.18489380E+3,0.227E+3,0.400E+1,0.29263000E+1,0.00000000E+0 - ,0.12490870E+3,0.227E+3,0.500E+1,0.29263000E+1,0.00000000E+0 - ,0.84755200E+2,0.227E+3,0.600E+1,0.29263000E+1,0.00000000E+0 - ,0.59562800E+2,0.227E+3,0.700E+1,0.29263000E+1,0.00000000E+0 - ,0.45306600E+2,0.227E+3,0.800E+1,0.29263000E+1,0.00000000E+0 - ,0.34493500E+2,0.227E+3,0.900E+1,0.29263000E+1,0.00000000E+0 - ,0.26662700E+2,0.227E+3,0.100E+2,0.29263000E+1,0.00000000E+0 - ,0.38268210E+3,0.227E+3,0.110E+2,0.29263000E+1,0.00000000E+0 - ,0.29460910E+3,0.227E+3,0.120E+2,0.29263000E+1,0.00000000E+0 - ,0.27182260E+3,0.227E+3,0.130E+2,0.29263000E+1,0.00000000E+0 - ,0.21457260E+3,0.227E+3,0.140E+2,0.29263000E+1,0.00000000E+0 - ,0.16773560E+3,0.227E+3,0.150E+2,0.29263000E+1,0.00000000E+0 - ,0.13954300E+3,0.227E+3,0.160E+2,0.29263000E+1,0.00000000E+0 - ,0.11430910E+3,0.227E+3,0.170E+2,0.29263000E+1,0.00000000E+0 - ,0.93808400E+2,0.227E+3,0.180E+2,0.29263000E+1,0.00000000E+0 - ,0.62812380E+3,0.227E+3,0.190E+2,0.29263000E+1,0.00000000E+0 - ,0.51787690E+3,0.227E+3,0.200E+2,0.29263000E+1,0.00000000E+0 - ,0.42788660E+3,0.227E+3,0.210E+2,0.29263000E+1,0.00000000E+0 - ,0.41344790E+3,0.227E+3,0.220E+2,0.29263000E+1,0.00000000E+0 - ,0.37873270E+3,0.227E+3,0.230E+2,0.29263000E+1,0.00000000E+0 - ,0.29871690E+3,0.227E+3,0.240E+2,0.29263000E+1,0.00000000E+0 - ,0.32626030E+3,0.227E+3,0.250E+2,0.29263000E+1,0.00000000E+0 - ,0.25642380E+3,0.227E+3,0.260E+2,0.29263000E+1,0.00000000E+0 - ,0.27162880E+3,0.227E+3,0.270E+2,0.29263000E+1,0.00000000E+0 - ,0.27970520E+3,0.227E+3,0.280E+2,0.29263000E+1,0.00000000E+0 - ,0.21480930E+3,0.227E+3,0.290E+2,0.29263000E+1,0.00000000E+0 - ,0.22045250E+3,0.227E+3,0.300E+2,0.29263000E+1,0.00000000E+0 - ,0.26075480E+3,0.227E+3,0.310E+2,0.29263000E+1,0.00000000E+0 - ,0.23021330E+3,0.227E+3,0.320E+2,0.29263000E+1,0.00000000E+0 - ,0.19670460E+3,0.227E+3,0.330E+2,0.29263000E+1,0.00000000E+0 - ,0.17678440E+3,0.227E+3,0.340E+2,0.29263000E+1,0.00000000E+0 - ,0.15501690E+3,0.227E+3,0.350E+2,0.29263000E+1,0.00000000E+0 - ,0.13511470E+3,0.227E+3,0.360E+2,0.29263000E+1,0.00000000E+0 - ,0.70427300E+3,0.227E+3,0.370E+2,0.29263000E+1,0.00000000E+0 - ,0.61724930E+3,0.227E+3,0.380E+2,0.29263000E+1,0.00000000E+0 - ,0.54087060E+3,0.227E+3,0.390E+2,0.29263000E+1,0.00000000E+0 - ,0.48633250E+3,0.227E+3,0.400E+2,0.29263000E+1,0.00000000E+0 - ,0.44370070E+3,0.227E+3,0.410E+2,0.29263000E+1,0.00000000E+0 - ,0.34307100E+3,0.227E+3,0.420E+2,0.29263000E+1,0.00000000E+0 - ,0.38256460E+3,0.227E+3,0.430E+2,0.29263000E+1,0.00000000E+0 - ,0.29196350E+3,0.227E+3,0.440E+2,0.29263000E+1,0.00000000E+0 - ,0.31887320E+3,0.227E+3,0.450E+2,0.29263000E+1,0.00000000E+0 - ,0.29583660E+3,0.227E+3,0.460E+2,0.29263000E+1,0.00000000E+0 - ,0.24704870E+3,0.227E+3,0.470E+2,0.29263000E+1,0.00000000E+0 - ,0.26087010E+3,0.227E+3,0.480E+2,0.29263000E+1,0.00000000E+0 - ,0.32688520E+3,0.227E+3,0.490E+2,0.29263000E+1,0.00000000E+0 - ,0.30241310E+3,0.227E+3,0.500E+2,0.29263000E+1,0.00000000E+0 - ,0.26980100E+3,0.227E+3,0.510E+2,0.29263000E+1,0.00000000E+0 - ,0.25056260E+3,0.227E+3,0.520E+2,0.29263000E+1,0.00000000E+0 - ,0.22685100E+3,0.227E+3,0.530E+2,0.29263000E+1,0.00000000E+0 - ,0.20426630E+3,0.227E+3,0.540E+2,0.29263000E+1,0.00000000E+0 - ,0.85816140E+3,0.227E+3,0.550E+2,0.29263000E+1,0.00000000E+0 - ,0.78713930E+3,0.227E+3,0.560E+2,0.29263000E+1,0.00000000E+0 - ,0.69163680E+3,0.227E+3,0.570E+2,0.29263000E+1,0.00000000E+0 - ,0.31880260E+3,0.227E+3,0.580E+2,0.29263000E+1,0.27991000E+1 - ,0.69775630E+3,0.227E+3,0.590E+2,0.29263000E+1,0.00000000E+0 - ,0.66998350E+3,0.227E+3,0.600E+2,0.29263000E+1,0.00000000E+0 - ,0.65317050E+3,0.227E+3,0.610E+2,0.29263000E+1,0.00000000E+0 - ,0.63770390E+3,0.227E+3,0.620E+2,0.29263000E+1,0.00000000E+0 - ,0.62398650E+3,0.227E+3,0.630E+2,0.29263000E+1,0.00000000E+0 - ,0.49120470E+3,0.227E+3,0.640E+2,0.29263000E+1,0.00000000E+0 - ,0.55314370E+3,0.227E+3,0.650E+2,0.29263000E+1,0.00000000E+0 - ,0.53353430E+3,0.227E+3,0.660E+2,0.29263000E+1,0.00000000E+0 - ,0.56278640E+3,0.227E+3,0.670E+2,0.29263000E+1,0.00000000E+0 - ,0.55082490E+3,0.227E+3,0.680E+2,0.29263000E+1,0.00000000E+0 - ,0.54004150E+3,0.227E+3,0.690E+2,0.29263000E+1,0.00000000E+0 - ,0.53369230E+3,0.227E+3,0.700E+2,0.29263000E+1,0.00000000E+0 - ,0.44999220E+3,0.227E+3,0.710E+2,0.29263000E+1,0.00000000E+0 - ,0.44251450E+3,0.227E+3,0.720E+2,0.29263000E+1,0.00000000E+0 - ,0.40411740E+3,0.227E+3,0.730E+2,0.29263000E+1,0.00000000E+0 - ,0.34172070E+3,0.227E+3,0.740E+2,0.29263000E+1,0.00000000E+0 - ,0.34765120E+3,0.227E+3,0.750E+2,0.29263000E+1,0.00000000E+0 - ,0.31534640E+3,0.227E+3,0.760E+2,0.29263000E+1,0.00000000E+0 - ,0.28904310E+3,0.227E+3,0.770E+2,0.29263000E+1,0.00000000E+0 - ,0.24054490E+3,0.227E+3,0.780E+2,0.29263000E+1,0.00000000E+0 - ,0.22491750E+3,0.227E+3,0.790E+2,0.29263000E+1,0.00000000E+0 - ,0.23132500E+3,0.227E+3,0.800E+2,0.29263000E+1,0.00000000E+0 - ,0.33611600E+3,0.227E+3,0.810E+2,0.29263000E+1,0.00000000E+0 - ,0.32863270E+3,0.227E+3,0.820E+2,0.29263000E+1,0.00000000E+0 - ,0.30220800E+3,0.227E+3,0.830E+2,0.29263000E+1,0.00000000E+0 - ,0.28841500E+3,0.227E+3,0.840E+2,0.29263000E+1,0.00000000E+0 - ,0.26645950E+3,0.227E+3,0.850E+2,0.29263000E+1,0.00000000E+0 - ,0.24453080E+3,0.227E+3,0.860E+2,0.29263000E+1,0.00000000E+0 - ,0.81034850E+3,0.227E+3,0.870E+2,0.29263000E+1,0.00000000E+0 - ,0.77851930E+3,0.227E+3,0.880E+2,0.29263000E+1,0.00000000E+0 - ,0.68835160E+3,0.227E+3,0.890E+2,0.29263000E+1,0.00000000E+0 - ,0.61915580E+3,0.227E+3,0.900E+2,0.29263000E+1,0.00000000E+0 - ,0.61484900E+3,0.227E+3,0.910E+2,0.29263000E+1,0.00000000E+0 - ,0.59539070E+3,0.227E+3,0.920E+2,0.29263000E+1,0.00000000E+0 - ,0.61287940E+3,0.227E+3,0.930E+2,0.29263000E+1,0.00000000E+0 - ,0.59353010E+3,0.227E+3,0.940E+2,0.29263000E+1,0.00000000E+0 - ,0.33330700E+2,0.227E+3,0.101E+3,0.29263000E+1,0.00000000E+0 - ,0.10755820E+3,0.227E+3,0.103E+3,0.29263000E+1,0.98650000E+0 - ,0.13729980E+3,0.227E+3,0.104E+3,0.29263000E+1,0.98080000E+0 - ,0.10520190E+3,0.227E+3,0.105E+3,0.29263000E+1,0.97060000E+0 - ,0.79527300E+2,0.227E+3,0.106E+3,0.29263000E+1,0.98680000E+0 - ,0.55568500E+2,0.227E+3,0.107E+3,0.29263000E+1,0.99440000E+0 - ,0.40679900E+2,0.227E+3,0.108E+3,0.29263000E+1,0.99250000E+0 - ,0.28212200E+2,0.227E+3,0.109E+3,0.29263000E+1,0.99820000E+0 - ,0.15735780E+3,0.227E+3,0.111E+3,0.29263000E+1,0.96840000E+0 - ,0.24318090E+3,0.227E+3,0.112E+3,0.29263000E+1,0.96280000E+0 - ,0.24645390E+3,0.227E+3,0.113E+3,0.29263000E+1,0.96480000E+0 - ,0.19841740E+3,0.227E+3,0.114E+3,0.29263000E+1,0.95070000E+0 - ,0.16285410E+3,0.227E+3,0.115E+3,0.29263000E+1,0.99470000E+0 - ,0.13801590E+3,0.227E+3,0.116E+3,0.29263000E+1,0.99480000E+0 - ,0.11313180E+3,0.227E+3,0.117E+3,0.29263000E+1,0.99720000E+0 - ,0.21759670E+3,0.227E+3,0.119E+3,0.29263000E+1,0.97670000E+0 - ,0.41483380E+3,0.227E+3,0.120E+3,0.29263000E+1,0.98310000E+0 - ,0.21769090E+3,0.227E+3,0.121E+3,0.29263000E+1,0.18627000E+1 - ,0.21024640E+3,0.227E+3,0.122E+3,0.29263000E+1,0.18299000E+1 - ,0.20607570E+3,0.227E+3,0.123E+3,0.29263000E+1,0.19138000E+1 - ,0.20417500E+3,0.227E+3,0.124E+3,0.29263000E+1,0.18269000E+1 - ,0.18795640E+3,0.227E+3,0.125E+3,0.29263000E+1,0.16406000E+1 - ,0.17405360E+3,0.227E+3,0.126E+3,0.29263000E+1,0.16483000E+1 - ,0.16609110E+3,0.227E+3,0.127E+3,0.29263000E+1,0.17149000E+1 - ,0.16238310E+3,0.227E+3,0.128E+3,0.29263000E+1,0.17937000E+1 - ,0.16040150E+3,0.227E+3,0.129E+3,0.29263000E+1,0.95760000E+0 - ,0.15059460E+3,0.227E+3,0.130E+3,0.29263000E+1,0.19419000E+1 - ,0.24499140E+3,0.227E+3,0.131E+3,0.29263000E+1,0.96010000E+0 - ,0.21547520E+3,0.227E+3,0.132E+3,0.29263000E+1,0.94340000E+0 - ,0.19340210E+3,0.227E+3,0.133E+3,0.29263000E+1,0.98890000E+0 - ,0.17685580E+3,0.227E+3,0.134E+3,0.29263000E+1,0.99010000E+0 - ,0.15608590E+3,0.227E+3,0.135E+3,0.29263000E+1,0.99740000E+0 - ,0.25980390E+3,0.227E+3,0.137E+3,0.29263000E+1,0.97380000E+0 - ,0.50499050E+3,0.227E+3,0.138E+3,0.29263000E+1,0.98010000E+0 - ,0.38637760E+3,0.227E+3,0.139E+3,0.29263000E+1,0.19153000E+1 - ,0.28802430E+3,0.227E+3,0.140E+3,0.29263000E+1,0.19355000E+1 - ,0.29089880E+3,0.227E+3,0.141E+3,0.29263000E+1,0.19545000E+1 - ,0.27145590E+3,0.227E+3,0.142E+3,0.29263000E+1,0.19420000E+1 - ,0.30427490E+3,0.227E+3,0.143E+3,0.29263000E+1,0.16682000E+1 - ,0.23690460E+3,0.227E+3,0.144E+3,0.29263000E+1,0.18584000E+1 - ,0.22176150E+3,0.227E+3,0.145E+3,0.29263000E+1,0.19003000E+1 - ,0.20606490E+3,0.227E+3,0.146E+3,0.29263000E+1,0.18630000E+1 - ,0.19936290E+3,0.227E+3,0.147E+3,0.29263000E+1,0.96790000E+0 - ,0.19723130E+3,0.227E+3,0.148E+3,0.29263000E+1,0.19539000E+1 - ,0.31168130E+3,0.227E+3,0.149E+3,0.29263000E+1,0.96330000E+0 - ,0.28217500E+3,0.227E+3,0.150E+3,0.29263000E+1,0.95140000E+0 - ,0.26447480E+3,0.227E+3,0.151E+3,0.29263000E+1,0.97490000E+0 - ,0.25038960E+3,0.227E+3,0.152E+3,0.29263000E+1,0.98110000E+0 - ,0.22896540E+3,0.227E+3,0.153E+3,0.29263000E+1,0.99680000E+0 - ,0.30722970E+3,0.227E+3,0.155E+3,0.29263000E+1,0.99090000E+0 - ,0.65499420E+3,0.227E+3,0.156E+3,0.29263000E+1,0.97970000E+0 - ,0.48905800E+3,0.227E+3,0.157E+3,0.29263000E+1,0.19373000E+1 - ,0.30922990E+3,0.227E+3,0.159E+3,0.29263000E+1,0.29425000E+1 - ,0.30284470E+3,0.227E+3,0.160E+3,0.29263000E+1,0.29455000E+1 - ,0.29328050E+3,0.227E+3,0.161E+3,0.29263000E+1,0.29413000E+1 - ,0.29467450E+3,0.227E+3,0.162E+3,0.29263000E+1,0.29300000E+1 - ,0.28401110E+3,0.227E+3,0.163E+3,0.29263000E+1,0.18286000E+1 - ,0.29645530E+3,0.227E+3,0.164E+3,0.29263000E+1,0.28732000E+1 - ,0.27853190E+3,0.227E+3,0.165E+3,0.29263000E+1,0.29086000E+1 - ,0.28335200E+3,0.227E+3,0.166E+3,0.29263000E+1,0.28965000E+1 - ,0.26440130E+3,0.227E+3,0.167E+3,0.29263000E+1,0.29242000E+1 - ,0.25688240E+3,0.227E+3,0.168E+3,0.29263000E+1,0.29282000E+1 - ,0.25521000E+3,0.227E+3,0.169E+3,0.29263000E+1,0.29246000E+1 - ,0.26809220E+3,0.227E+3,0.170E+3,0.29263000E+1,0.28482000E+1 - ,0.24667760E+3,0.227E+3,0.171E+3,0.29263000E+1,0.29219000E+1 - ,0.33363020E+3,0.227E+3,0.172E+3,0.29263000E+1,0.19254000E+1 - ,0.30987820E+3,0.227E+3,0.173E+3,0.29263000E+1,0.19459000E+1 - ,0.28300050E+3,0.227E+3,0.174E+3,0.29263000E+1,0.19292000E+1 - ,0.28624380E+3,0.227E+3,0.175E+3,0.29263000E+1,0.18104000E+1 - ,0.25103410E+3,0.227E+3,0.176E+3,0.29263000E+1,0.18858000E+1 - ,0.23634850E+3,0.227E+3,0.177E+3,0.29263000E+1,0.18648000E+1 - ,0.22587990E+3,0.227E+3,0.178E+3,0.29263000E+1,0.19188000E+1 - ,0.21607200E+3,0.227E+3,0.179E+3,0.29263000E+1,0.98460000E+0 - ,0.20886990E+3,0.227E+3,0.180E+3,0.29263000E+1,0.19896000E+1 - ,0.33505330E+3,0.227E+3,0.181E+3,0.29263000E+1,0.92670000E+0 - ,0.30558290E+3,0.227E+3,0.182E+3,0.29263000E+1,0.93830000E+0 - ,0.29647100E+3,0.227E+3,0.183E+3,0.29263000E+1,0.98200000E+0 - ,0.28849230E+3,0.227E+3,0.184E+3,0.29263000E+1,0.98150000E+0 - ,0.26966300E+3,0.227E+3,0.185E+3,0.29263000E+1,0.99540000E+0 - ,0.34599510E+3,0.227E+3,0.187E+3,0.29263000E+1,0.97050000E+0 - ,0.65149430E+3,0.227E+3,0.188E+3,0.29263000E+1,0.96620000E+0 - ,0.36582470E+3,0.227E+3,0.189E+3,0.29263000E+1,0.29070000E+1 - ,0.42216210E+3,0.227E+3,0.190E+3,0.29263000E+1,0.28844000E+1 - ,0.37782790E+3,0.227E+3,0.191E+3,0.29263000E+1,0.28738000E+1 - ,0.33401640E+3,0.227E+3,0.192E+3,0.29263000E+1,0.28878000E+1 - ,0.32150040E+3,0.227E+3,0.193E+3,0.29263000E+1,0.29095000E+1 - ,0.38630110E+3,0.227E+3,0.194E+3,0.29263000E+1,0.19209000E+1 - ,0.89789100E+2,0.227E+3,0.204E+3,0.29263000E+1,0.19697000E+1 - ,0.88440500E+2,0.227E+3,0.205E+3,0.29263000E+1,0.19441000E+1 - ,0.64985600E+2,0.227E+3,0.206E+3,0.29263000E+1,0.19985000E+1 - ,0.52232200E+2,0.227E+3,0.207E+3,0.29263000E+1,0.20143000E+1 - ,0.35989200E+2,0.227E+3,0.208E+3,0.29263000E+1,0.19887000E+1 - ,0.15909800E+3,0.227E+3,0.212E+3,0.29263000E+1,0.19496000E+1 - ,0.19227550E+3,0.227E+3,0.213E+3,0.29263000E+1,0.19311000E+1 - ,0.18462850E+3,0.227E+3,0.214E+3,0.29263000E+1,0.19435000E+1 - ,0.16065780E+3,0.227E+3,0.215E+3,0.29263000E+1,0.20102000E+1 - ,0.13524560E+3,0.227E+3,0.216E+3,0.29263000E+1,0.19903000E+1 - ,0.22342730E+3,0.227E+3,0.220E+3,0.29263000E+1,0.19349000E+1 - ,0.21483990E+3,0.227E+3,0.221E+3,0.29263000E+1,0.28999000E+1 - ,0.21751780E+3,0.227E+3,0.222E+3,0.29263000E+1,0.38675000E+1 - ,0.19920380E+3,0.227E+3,0.223E+3,0.29263000E+1,0.29110000E+1 - ,0.15048630E+3,0.227E+3,0.224E+3,0.29263000E+1,0.10619100E+2 - ,0.12896280E+3,0.227E+3,0.225E+3,0.29263000E+1,0.98849000E+1 - ,0.12658850E+3,0.227E+3,0.226E+3,0.29263000E+1,0.91376000E+1 - ,0.14806570E+3,0.227E+3,0.227E+3,0.29263000E+1,0.29263000E+1 - ,0.19464800E+2,0.228E+3,0.100E+1,0.65458000E+1,0.91180000E+0 - ,0.13097900E+2,0.228E+3,0.200E+1,0.65458000E+1,0.00000000E+0 - ,0.29104880E+3,0.228E+3,0.300E+1,0.65458000E+1,0.00000000E+0 - ,0.17059360E+3,0.228E+3,0.400E+1,0.65458000E+1,0.00000000E+0 - ,0.11609230E+3,0.228E+3,0.500E+1,0.65458000E+1,0.00000000E+0 - ,0.79205600E+2,0.228E+3,0.600E+1,0.65458000E+1,0.00000000E+0 - ,0.55895400E+2,0.228E+3,0.700E+1,0.65458000E+1,0.00000000E+0 - ,0.42646200E+2,0.228E+3,0.800E+1,0.65458000E+1,0.00000000E+0 - ,0.32555300E+2,0.228E+3,0.900E+1,0.65458000E+1,0.00000000E+0 - ,0.25221000E+2,0.228E+3,0.100E+2,0.65458000E+1,0.00000000E+0 - ,0.34857980E+3,0.228E+3,0.110E+2,0.65458000E+1,0.00000000E+0 - ,0.27122230E+3,0.228E+3,0.120E+2,0.65458000E+1,0.00000000E+0 - ,0.25118770E+3,0.228E+3,0.130E+2,0.65458000E+1,0.00000000E+0 - ,0.19928550E+3,0.228E+3,0.140E+2,0.65458000E+1,0.00000000E+0 - ,0.15644320E+3,0.228E+3,0.150E+2,0.65458000E+1,0.00000000E+0 - ,0.13051020E+3,0.228E+3,0.160E+2,0.65458000E+1,0.00000000E+0 - ,0.10719760E+3,0.228E+3,0.170E+2,0.65458000E+1,0.00000000E+0 - ,0.88182900E+2,0.228E+3,0.180E+2,0.65458000E+1,0.00000000E+0 - ,0.57086590E+3,0.228E+3,0.190E+2,0.65458000E+1,0.00000000E+0 - ,0.47482250E+3,0.228E+3,0.200E+2,0.65458000E+1,0.00000000E+0 - ,0.39304870E+3,0.228E+3,0.210E+2,0.65458000E+1,0.00000000E+0 - ,0.38043770E+3,0.228E+3,0.220E+2,0.65458000E+1,0.00000000E+0 - ,0.34885100E+3,0.228E+3,0.230E+2,0.65458000E+1,0.00000000E+0 - ,0.27525510E+3,0.228E+3,0.240E+2,0.65458000E+1,0.00000000E+0 - ,0.30096400E+3,0.228E+3,0.250E+2,0.65458000E+1,0.00000000E+0 - ,0.23668420E+3,0.228E+3,0.260E+2,0.65458000E+1,0.00000000E+0 - ,0.25118370E+3,0.228E+3,0.270E+2,0.65458000E+1,0.00000000E+0 - ,0.25838880E+3,0.228E+3,0.280E+2,0.65458000E+1,0.00000000E+0 - ,0.19852020E+3,0.228E+3,0.290E+2,0.65458000E+1,0.00000000E+0 - ,0.20431190E+3,0.228E+3,0.300E+2,0.65458000E+1,0.00000000E+0 - ,0.24136360E+3,0.228E+3,0.310E+2,0.65458000E+1,0.00000000E+0 - ,0.21391340E+3,0.228E+3,0.320E+2,0.65458000E+1,0.00000000E+0 - ,0.18341100E+3,0.228E+3,0.330E+2,0.65458000E+1,0.00000000E+0 - ,0.16519610E+3,0.228E+3,0.340E+2,0.65458000E+1,0.00000000E+0 - ,0.14518280E+3,0.228E+3,0.350E+2,0.65458000E+1,0.00000000E+0 - ,0.12680940E+3,0.228E+3,0.360E+2,0.65458000E+1,0.00000000E+0 - ,0.64057820E+3,0.228E+3,0.370E+2,0.65458000E+1,0.00000000E+0 - ,0.56577900E+3,0.228E+3,0.380E+2,0.65458000E+1,0.00000000E+0 - ,0.49739960E+3,0.228E+3,0.390E+2,0.65458000E+1,0.00000000E+0 - ,0.44816000E+3,0.228E+3,0.400E+2,0.65458000E+1,0.00000000E+0 - ,0.40942870E+3,0.228E+3,0.410E+2,0.65458000E+1,0.00000000E+0 - ,0.31734720E+3,0.228E+3,0.420E+2,0.65458000E+1,0.00000000E+0 - ,0.35355460E+3,0.228E+3,0.430E+2,0.65458000E+1,0.00000000E+0 - ,0.27055020E+3,0.228E+3,0.440E+2,0.65458000E+1,0.00000000E+0 - ,0.29544510E+3,0.228E+3,0.450E+2,0.65458000E+1,0.00000000E+0 - ,0.27433660E+3,0.228E+3,0.460E+2,0.65458000E+1,0.00000000E+0 - ,0.22905370E+3,0.228E+3,0.470E+2,0.65458000E+1,0.00000000E+0 - ,0.24218240E+3,0.228E+3,0.480E+2,0.65458000E+1,0.00000000E+0 - ,0.30263410E+3,0.228E+3,0.490E+2,0.65458000E+1,0.00000000E+0 - ,0.28084550E+3,0.228E+3,0.500E+2,0.65458000E+1,0.00000000E+0 - ,0.25131640E+3,0.228E+3,0.510E+2,0.65458000E+1,0.00000000E+0 - ,0.23382360E+3,0.228E+3,0.520E+2,0.65458000E+1,0.00000000E+0 - ,0.21211680E+3,0.228E+3,0.530E+2,0.65458000E+1,0.00000000E+0 - ,0.19136210E+3,0.228E+3,0.540E+2,0.65458000E+1,0.00000000E+0 - ,0.78055200E+3,0.228E+3,0.550E+2,0.65458000E+1,0.00000000E+0 - ,0.72070440E+3,0.228E+3,0.560E+2,0.65458000E+1,0.00000000E+0 - ,0.63535610E+3,0.228E+3,0.570E+2,0.65458000E+1,0.00000000E+0 - ,0.29682360E+3,0.228E+3,0.580E+2,0.65458000E+1,0.27991000E+1 - ,0.63962140E+3,0.228E+3,0.590E+2,0.65458000E+1,0.00000000E+0 - ,0.61452410E+3,0.228E+3,0.600E+2,0.65458000E+1,0.00000000E+0 - ,0.59919690E+3,0.228E+3,0.610E+2,0.65458000E+1,0.00000000E+0 - ,0.58508560E+3,0.228E+3,0.620E+2,0.65458000E+1,0.00000000E+0 - ,0.57257280E+3,0.228E+3,0.630E+2,0.65458000E+1,0.00000000E+0 - ,0.45239680E+3,0.228E+3,0.640E+2,0.65458000E+1,0.00000000E+0 - ,0.50669850E+3,0.228E+3,0.650E+2,0.65458000E+1,0.00000000E+0 - ,0.48901870E+3,0.228E+3,0.660E+2,0.65458000E+1,0.00000000E+0 - ,0.51684540E+3,0.228E+3,0.670E+2,0.65458000E+1,0.00000000E+0 - ,0.50590420E+3,0.228E+3,0.680E+2,0.65458000E+1,0.00000000E+0 - ,0.49606180E+3,0.228E+3,0.690E+2,0.65458000E+1,0.00000000E+0 - ,0.49015300E+3,0.228E+3,0.700E+2,0.65458000E+1,0.00000000E+0 - ,0.41429680E+3,0.228E+3,0.710E+2,0.65458000E+1,0.00000000E+0 - ,0.40871690E+3,0.228E+3,0.720E+2,0.65458000E+1,0.00000000E+0 - ,0.37400200E+3,0.228E+3,0.730E+2,0.65458000E+1,0.00000000E+0 - ,0.31678470E+3,0.228E+3,0.740E+2,0.65458000E+1,0.00000000E+0 - ,0.32251470E+3,0.228E+3,0.750E+2,0.65458000E+1,0.00000000E+0 - ,0.29305060E+3,0.228E+3,0.760E+2,0.65458000E+1,0.00000000E+0 - ,0.26898340E+3,0.228E+3,0.770E+2,0.65458000E+1,0.00000000E+0 - ,0.22421600E+3,0.228E+3,0.780E+2,0.65458000E+1,0.00000000E+0 - ,0.20978810E+3,0.228E+3,0.790E+2,0.65458000E+1,0.00000000E+0 - ,0.21587920E+3,0.228E+3,0.800E+2,0.65458000E+1,0.00000000E+0 - ,0.31149490E+3,0.228E+3,0.810E+2,0.65458000E+1,0.00000000E+0 - ,0.30528260E+3,0.228E+3,0.820E+2,0.65458000E+1,0.00000000E+0 - ,0.28148900E+3,0.228E+3,0.830E+2,0.65458000E+1,0.00000000E+0 - ,0.26905740E+3,0.228E+3,0.840E+2,0.65458000E+1,0.00000000E+0 - ,0.24904140E+3,0.228E+3,0.850E+2,0.65458000E+1,0.00000000E+0 - ,0.22894100E+3,0.228E+3,0.860E+2,0.65458000E+1,0.00000000E+0 - ,0.73916470E+3,0.228E+3,0.870E+2,0.65458000E+1,0.00000000E+0 - ,0.71405300E+3,0.228E+3,0.880E+2,0.65458000E+1,0.00000000E+0 - ,0.63328860E+3,0.228E+3,0.890E+2,0.65458000E+1,0.00000000E+0 - ,0.57161590E+3,0.228E+3,0.900E+2,0.65458000E+1,0.00000000E+0 - ,0.56672940E+3,0.228E+3,0.910E+2,0.65458000E+1,0.00000000E+0 - ,0.54885680E+3,0.228E+3,0.920E+2,0.65458000E+1,0.00000000E+0 - ,0.56381700E+3,0.228E+3,0.930E+2,0.65458000E+1,0.00000000E+0 - ,0.54623160E+3,0.228E+3,0.940E+2,0.65458000E+1,0.00000000E+0 - ,0.31098100E+2,0.228E+3,0.101E+3,0.65458000E+1,0.00000000E+0 - ,0.99345400E+2,0.228E+3,0.103E+3,0.65458000E+1,0.98650000E+0 - ,0.12698120E+3,0.228E+3,0.104E+3,0.65458000E+1,0.98080000E+0 - ,0.97926800E+2,0.228E+3,0.105E+3,0.65458000E+1,0.97060000E+0 - ,0.74314900E+2,0.228E+3,0.106E+3,0.65458000E+1,0.98680000E+0 - ,0.52153200E+2,0.228E+3,0.107E+3,0.65458000E+1,0.99440000E+0 - ,0.38319400E+2,0.228E+3,0.108E+3,0.65458000E+1,0.99250000E+0 - ,0.26700000E+2,0.228E+3,0.109E+3,0.65458000E+1,0.99820000E+0 - ,0.14518540E+3,0.228E+3,0.111E+3,0.65458000E+1,0.96840000E+0 - ,0.22418120E+3,0.228E+3,0.112E+3,0.65458000E+1,0.96280000E+0 - ,0.22795650E+3,0.228E+3,0.113E+3,0.65458000E+1,0.96480000E+0 - ,0.18441750E+3,0.228E+3,0.114E+3,0.65458000E+1,0.95070000E+0 - ,0.15191520E+3,0.228E+3,0.115E+3,0.65458000E+1,0.99470000E+0 - ,0.12907630E+3,0.228E+3,0.116E+3,0.65458000E+1,0.99480000E+0 - ,0.10609050E+3,0.228E+3,0.117E+3,0.65458000E+1,0.99720000E+0 - ,0.20137990E+3,0.228E+3,0.119E+3,0.65458000E+1,0.97670000E+0 - ,0.38042010E+3,0.228E+3,0.120E+3,0.65458000E+1,0.98310000E+0 - ,0.20223920E+3,0.228E+3,0.121E+3,0.65458000E+1,0.18627000E+1 - ,0.19535160E+3,0.228E+3,0.122E+3,0.65458000E+1,0.18299000E+1 - ,0.19147150E+3,0.228E+3,0.123E+3,0.65458000E+1,0.19138000E+1 - ,0.18962030E+3,0.228E+3,0.124E+3,0.65458000E+1,0.18269000E+1 - ,0.17495290E+3,0.228E+3,0.125E+3,0.65458000E+1,0.16406000E+1 - ,0.16212930E+3,0.228E+3,0.126E+3,0.65458000E+1,0.16483000E+1 - ,0.15471980E+3,0.228E+3,0.127E+3,0.65458000E+1,0.17149000E+1 - ,0.15124090E+3,0.228E+3,0.128E+3,0.65458000E+1,0.17937000E+1 - ,0.14914790E+3,0.228E+3,0.129E+3,0.65458000E+1,0.95760000E+0 - ,0.14045520E+3,0.228E+3,0.130E+3,0.65458000E+1,0.19419000E+1 - ,0.22700010E+3,0.228E+3,0.131E+3,0.65458000E+1,0.96010000E+0 - ,0.20040030E+3,0.228E+3,0.132E+3,0.65458000E+1,0.94340000E+0 - ,0.18036950E+3,0.228E+3,0.133E+3,0.65458000E+1,0.98890000E+0 - ,0.16525840E+3,0.228E+3,0.134E+3,0.65458000E+1,0.99010000E+0 - ,0.14616810E+3,0.228E+3,0.135E+3,0.65458000E+1,0.99740000E+0 - ,0.24066290E+3,0.228E+3,0.137E+3,0.65458000E+1,0.97380000E+0 - ,0.46289020E+3,0.228E+3,0.138E+3,0.65458000E+1,0.98010000E+0 - ,0.35647370E+3,0.228E+3,0.139E+3,0.65458000E+1,0.19153000E+1 - ,0.26749730E+3,0.228E+3,0.140E+3,0.65458000E+1,0.19355000E+1 - ,0.27016880E+3,0.228E+3,0.141E+3,0.65458000E+1,0.19545000E+1 - ,0.25232810E+3,0.228E+3,0.142E+3,0.65458000E+1,0.19420000E+1 - ,0.28197070E+3,0.228E+3,0.143E+3,0.65458000E+1,0.16682000E+1 - ,0.22072030E+3,0.228E+3,0.144E+3,0.65458000E+1,0.18584000E+1 - ,0.20667290E+3,0.228E+3,0.145E+3,0.65458000E+1,0.19003000E+1 - ,0.19214160E+3,0.228E+3,0.146E+3,0.65458000E+1,0.18630000E+1 - ,0.18584300E+3,0.228E+3,0.147E+3,0.65458000E+1,0.96790000E+0 - ,0.18414330E+3,0.228E+3,0.148E+3,0.65458000E+1,0.19539000E+1 - ,0.28888240E+3,0.228E+3,0.149E+3,0.65458000E+1,0.96330000E+0 - ,0.26236960E+3,0.228E+3,0.150E+3,0.65458000E+1,0.95140000E+0 - ,0.24645550E+3,0.228E+3,0.151E+3,0.65458000E+1,0.97490000E+0 - ,0.23368760E+3,0.228E+3,0.152E+3,0.65458000E+1,0.98110000E+0 - ,0.21408530E+3,0.228E+3,0.153E+3,0.65458000E+1,0.99680000E+0 - ,0.28525530E+3,0.228E+3,0.155E+3,0.65458000E+1,0.99090000E+0 - ,0.59951160E+3,0.228E+3,0.156E+3,0.65458000E+1,0.97970000E+0 - ,0.45093480E+3,0.228E+3,0.157E+3,0.65458000E+1,0.19373000E+1 - ,0.28796490E+3,0.228E+3,0.159E+3,0.65458000E+1,0.29425000E+1 - ,0.28202970E+3,0.228E+3,0.160E+3,0.65458000E+1,0.29455000E+1 - ,0.27316700E+3,0.228E+3,0.161E+3,0.65458000E+1,0.29413000E+1 - ,0.27433460E+3,0.228E+3,0.162E+3,0.65458000E+1,0.29300000E+1 - ,0.26403730E+3,0.228E+3,0.163E+3,0.65458000E+1,0.18286000E+1 - ,0.27594550E+3,0.228E+3,0.164E+3,0.65458000E+1,0.28732000E+1 - ,0.25937430E+3,0.228E+3,0.165E+3,0.65458000E+1,0.29086000E+1 - ,0.26363770E+3,0.228E+3,0.166E+3,0.65458000E+1,0.28965000E+1 - ,0.24631030E+3,0.228E+3,0.167E+3,0.65458000E+1,0.29242000E+1 - ,0.23934130E+3,0.228E+3,0.168E+3,0.65458000E+1,0.29282000E+1 - ,0.23775270E+3,0.228E+3,0.169E+3,0.65458000E+1,0.29246000E+1 - ,0.24957470E+3,0.228E+3,0.170E+3,0.65458000E+1,0.28482000E+1 - ,0.22985230E+3,0.228E+3,0.171E+3,0.65458000E+1,0.29219000E+1 - ,0.30915100E+3,0.228E+3,0.172E+3,0.65458000E+1,0.19254000E+1 - ,0.28770370E+3,0.228E+3,0.173E+3,0.65458000E+1,0.19459000E+1 - ,0.26327960E+3,0.228E+3,0.174E+3,0.65458000E+1,0.19292000E+1 - ,0.26585220E+3,0.228E+3,0.175E+3,0.65458000E+1,0.18104000E+1 - ,0.23419810E+3,0.228E+3,0.176E+3,0.65458000E+1,0.18858000E+1 - ,0.22066120E+3,0.228E+3,0.177E+3,0.65458000E+1,0.18648000E+1 - ,0.21098510E+3,0.228E+3,0.178E+3,0.65458000E+1,0.19188000E+1 - ,0.20183220E+3,0.228E+3,0.179E+3,0.65458000E+1,0.98460000E+0 - ,0.19539650E+3,0.228E+3,0.180E+3,0.65458000E+1,0.19896000E+1 - ,0.31077960E+3,0.228E+3,0.181E+3,0.65458000E+1,0.92670000E+0 - ,0.28433510E+3,0.228E+3,0.182E+3,0.65458000E+1,0.93830000E+0 - ,0.27630910E+3,0.228E+3,0.183E+3,0.65458000E+1,0.98200000E+0 - ,0.26918960E+3,0.228E+3,0.184E+3,0.65458000E+1,0.98150000E+0 - ,0.25203630E+3,0.228E+3,0.185E+3,0.65458000E+1,0.99540000E+0 - ,0.32130350E+3,0.228E+3,0.187E+3,0.65458000E+1,0.97050000E+0 - ,0.59764750E+3,0.228E+3,0.188E+3,0.65458000E+1,0.96620000E+0 - ,0.34062710E+3,0.228E+3,0.189E+3,0.65458000E+1,0.29070000E+1 - ,0.39198180E+3,0.228E+3,0.190E+3,0.65458000E+1,0.28844000E+1 - ,0.35114350E+3,0.228E+3,0.191E+3,0.65458000E+1,0.28738000E+1 - ,0.31117290E+3,0.228E+3,0.192E+3,0.65458000E+1,0.28878000E+1 - ,0.29966590E+3,0.228E+3,0.193E+3,0.65458000E+1,0.29095000E+1 - ,0.35795210E+3,0.228E+3,0.194E+3,0.65458000E+1,0.19209000E+1 - ,0.83603000E+2,0.228E+3,0.204E+3,0.65458000E+1,0.19697000E+1 - ,0.82447400E+2,0.228E+3,0.205E+3,0.65458000E+1,0.19441000E+1 - ,0.60867800E+2,0.228E+3,0.206E+3,0.65458000E+1,0.19985000E+1 - ,0.49051100E+2,0.228E+3,0.207E+3,0.65458000E+1,0.20143000E+1 - ,0.33942700E+2,0.228E+3,0.208E+3,0.65458000E+1,0.19887000E+1 - ,0.14769120E+3,0.228E+3,0.212E+3,0.65458000E+1,0.19496000E+1 - ,0.17839840E+3,0.228E+3,0.213E+3,0.65458000E+1,0.19311000E+1 - ,0.17172690E+3,0.228E+3,0.214E+3,0.65458000E+1,0.19435000E+1 - ,0.14983280E+3,0.228E+3,0.215E+3,0.65458000E+1,0.20102000E+1 - ,0.12649470E+3,0.228E+3,0.216E+3,0.65458000E+1,0.19903000E+1 - ,0.20744400E+3,0.228E+3,0.220E+3,0.65458000E+1,0.19349000E+1 - ,0.19985020E+3,0.228E+3,0.221E+3,0.65458000E+1,0.28999000E+1 - ,0.20237460E+3,0.228E+3,0.222E+3,0.65458000E+1,0.38675000E+1 - ,0.18532650E+3,0.228E+3,0.223E+3,0.65458000E+1,0.29110000E+1 - ,0.14047480E+3,0.228E+3,0.224E+3,0.65458000E+1,0.10619100E+2 - ,0.12062490E+3,0.228E+3,0.225E+3,0.65458000E+1,0.98849000E+1 - ,0.11838000E+3,0.228E+3,0.226E+3,0.65458000E+1,0.91376000E+1 - ,0.13802230E+3,0.228E+3,0.227E+3,0.65458000E+1,0.29263000E+1 - ,0.12878200E+3,0.228E+3,0.228E+3,0.65458000E+1,0.65458000E+1 - ,0.26956200E+2,0.231E+3,0.100E+1,0.19315000E+1,0.91180000E+0 - ,0.17439200E+2,0.231E+3,0.200E+1,0.19315000E+1,0.00000000E+0 - ,0.44148880E+3,0.231E+3,0.300E+1,0.19315000E+1,0.00000000E+0 - ,0.25018890E+3,0.231E+3,0.400E+1,0.19315000E+1,0.00000000E+0 - ,0.16615250E+3,0.231E+3,0.500E+1,0.19315000E+1,0.00000000E+0 - ,0.11083840E+3,0.231E+3,0.600E+1,0.19315000E+1,0.00000000E+0 - ,0.76664100E+2,0.231E+3,0.700E+1,0.19315000E+1,0.00000000E+0 - ,0.57542500E+2,0.231E+3,0.800E+1,0.19315000E+1,0.00000000E+0 - ,0.43238500E+2,0.231E+3,0.900E+1,0.19315000E+1,0.00000000E+0 - ,0.33022800E+2,0.231E+3,0.100E+2,0.19315000E+1,0.00000000E+0 - ,0.52706710E+3,0.231E+3,0.110E+2,0.19315000E+1,0.00000000E+0 - ,0.39992630E+3,0.231E+3,0.120E+2,0.19315000E+1,0.00000000E+0 - ,0.36633710E+3,0.231E+3,0.130E+2,0.19315000E+1,0.00000000E+0 - ,0.28597610E+3,0.231E+3,0.140E+2,0.19315000E+1,0.00000000E+0 - ,0.22097630E+3,0.231E+3,0.150E+2,0.19315000E+1,0.00000000E+0 - ,0.18213800E+3,0.231E+3,0.160E+2,0.19315000E+1,0.00000000E+0 - ,0.14771690E+3,0.231E+3,0.170E+2,0.19315000E+1,0.00000000E+0 - ,0.12002340E+3,0.231E+3,0.180E+2,0.19315000E+1,0.00000000E+0 - ,0.86510660E+3,0.231E+3,0.190E+2,0.19315000E+1,0.00000000E+0 - ,0.70620410E+3,0.231E+3,0.200E+2,0.19315000E+1,0.00000000E+0 - ,0.58191500E+3,0.231E+3,0.210E+2,0.19315000E+1,0.00000000E+0 - ,0.56029450E+3,0.231E+3,0.220E+2,0.19315000E+1,0.00000000E+0 - ,0.51220750E+3,0.231E+3,0.230E+2,0.19315000E+1,0.00000000E+0 - ,0.40283090E+3,0.231E+3,0.240E+2,0.19315000E+1,0.00000000E+0 - ,0.43988290E+3,0.231E+3,0.250E+2,0.19315000E+1,0.00000000E+0 - ,0.34453520E+3,0.231E+3,0.260E+2,0.19315000E+1,0.00000000E+0 - ,0.36443400E+3,0.231E+3,0.270E+2,0.19315000E+1,0.00000000E+0 - ,0.37611120E+3,0.231E+3,0.280E+2,0.19315000E+1,0.00000000E+0 - ,0.28776680E+3,0.231E+3,0.290E+2,0.19315000E+1,0.00000000E+0 - ,0.29431290E+3,0.231E+3,0.300E+2,0.19315000E+1,0.00000000E+0 - ,0.34953890E+3,0.231E+3,0.310E+2,0.19315000E+1,0.00000000E+0 - ,0.30609340E+3,0.231E+3,0.320E+2,0.19315000E+1,0.00000000E+0 - ,0.25916500E+3,0.231E+3,0.330E+2,0.19315000E+1,0.00000000E+0 - ,0.23133530E+3,0.231E+3,0.340E+2,0.19315000E+1,0.00000000E+0 - ,0.20127060E+3,0.231E+3,0.350E+2,0.19315000E+1,0.00000000E+0 - ,0.17402300E+3,0.231E+3,0.360E+2,0.19315000E+1,0.00000000E+0 - ,0.96816820E+3,0.231E+3,0.370E+2,0.19315000E+1,0.00000000E+0 - ,0.84136100E+3,0.231E+3,0.380E+2,0.19315000E+1,0.00000000E+0 - ,0.73335550E+3,0.231E+3,0.390E+2,0.19315000E+1,0.00000000E+0 - ,0.65685920E+3,0.231E+3,0.400E+2,0.19315000E+1,0.00000000E+0 - ,0.59747450E+3,0.231E+3,0.410E+2,0.19315000E+1,0.00000000E+0 - ,0.45889060E+3,0.231E+3,0.420E+2,0.19315000E+1,0.00000000E+0 - ,0.51304100E+3,0.231E+3,0.430E+2,0.19315000E+1,0.00000000E+0 - ,0.38860430E+3,0.231E+3,0.440E+2,0.19315000E+1,0.00000000E+0 - ,0.42520690E+3,0.231E+3,0.450E+2,0.19315000E+1,0.00000000E+0 - ,0.39363700E+3,0.231E+3,0.460E+2,0.19315000E+1,0.00000000E+0 - ,0.32788520E+3,0.231E+3,0.470E+2,0.19315000E+1,0.00000000E+0 - ,0.34605680E+3,0.231E+3,0.480E+2,0.19315000E+1,0.00000000E+0 - ,0.43674070E+3,0.231E+3,0.490E+2,0.19315000E+1,0.00000000E+0 - ,0.40172510E+3,0.231E+3,0.500E+2,0.19315000E+1,0.00000000E+0 - ,0.35584740E+3,0.231E+3,0.510E+2,0.19315000E+1,0.00000000E+0 - ,0.32880760E+3,0.231E+3,0.520E+2,0.19315000E+1,0.00000000E+0 - ,0.29588170E+3,0.231E+3,0.530E+2,0.19315000E+1,0.00000000E+0 - ,0.26471260E+3,0.231E+3,0.540E+2,0.19315000E+1,0.00000000E+0 - ,0.11792492E+4,0.231E+3,0.550E+2,0.19315000E+1,0.00000000E+0 - ,0.10739458E+4,0.231E+3,0.560E+2,0.19315000E+1,0.00000000E+0 - ,0.93892860E+3,0.231E+3,0.570E+2,0.19315000E+1,0.00000000E+0 - ,0.42057330E+3,0.231E+3,0.580E+2,0.19315000E+1,0.27991000E+1 - ,0.94969780E+3,0.231E+3,0.590E+2,0.19315000E+1,0.00000000E+0 - ,0.91118510E+3,0.231E+3,0.600E+2,0.19315000E+1,0.00000000E+0 - ,0.88814170E+3,0.231E+3,0.610E+2,0.19315000E+1,0.00000000E+0 - ,0.86697870E+3,0.231E+3,0.620E+2,0.19315000E+1,0.00000000E+0 - ,0.84820840E+3,0.231E+3,0.630E+2,0.19315000E+1,0.00000000E+0 - ,0.66277010E+3,0.231E+3,0.640E+2,0.19315000E+1,0.00000000E+0 - ,0.75204060E+3,0.231E+3,0.650E+2,0.19315000E+1,0.00000000E+0 - ,0.72468160E+3,0.231E+3,0.660E+2,0.19315000E+1,0.00000000E+0 - ,0.76414750E+3,0.231E+3,0.670E+2,0.19315000E+1,0.00000000E+0 - ,0.74786110E+3,0.231E+3,0.680E+2,0.19315000E+1,0.00000000E+0 - ,0.73312340E+3,0.231E+3,0.690E+2,0.19315000E+1,0.00000000E+0 - ,0.72475960E+3,0.231E+3,0.700E+2,0.19315000E+1,0.00000000E+0 - ,0.60808820E+3,0.231E+3,0.710E+2,0.19315000E+1,0.00000000E+0 - ,0.59509760E+3,0.231E+3,0.720E+2,0.19315000E+1,0.00000000E+0 - ,0.54106220E+3,0.231E+3,0.730E+2,0.19315000E+1,0.00000000E+0 - ,0.45507210E+3,0.231E+3,0.740E+2,0.19315000E+1,0.00000000E+0 - ,0.46243470E+3,0.231E+3,0.750E+2,0.19315000E+1,0.00000000E+0 - ,0.41762900E+3,0.231E+3,0.760E+2,0.19315000E+1,0.00000000E+0 - ,0.38132090E+3,0.231E+3,0.770E+2,0.19315000E+1,0.00000000E+0 - ,0.31540110E+3,0.231E+3,0.780E+2,0.19315000E+1,0.00000000E+0 - ,0.29416770E+3,0.231E+3,0.790E+2,0.19315000E+1,0.00000000E+0 - ,0.30243400E+3,0.231E+3,0.800E+2,0.19315000E+1,0.00000000E+0 - ,0.44706730E+3,0.231E+3,0.810E+2,0.19315000E+1,0.00000000E+0 - ,0.43547920E+3,0.231E+3,0.820E+2,0.19315000E+1,0.00000000E+0 - ,0.39809290E+3,0.231E+3,0.830E+2,0.19315000E+1,0.00000000E+0 - ,0.37843240E+3,0.231E+3,0.840E+2,0.19315000E+1,0.00000000E+0 - ,0.34775130E+3,0.231E+3,0.850E+2,0.19315000E+1,0.00000000E+0 - ,0.31736560E+3,0.231E+3,0.860E+2,0.19315000E+1,0.00000000E+0 - ,0.11088359E+4,0.231E+3,0.870E+2,0.19315000E+1,0.00000000E+0 - ,0.10590662E+4,0.231E+3,0.880E+2,0.19315000E+1,0.00000000E+0 - ,0.93187680E+3,0.231E+3,0.890E+2,0.19315000E+1,0.00000000E+0 - ,0.83242240E+3,0.231E+3,0.900E+2,0.19315000E+1,0.00000000E+0 - ,0.82834850E+3,0.231E+3,0.910E+2,0.19315000E+1,0.00000000E+0 - ,0.80186390E+3,0.231E+3,0.920E+2,0.19315000E+1,0.00000000E+0 - ,0.82836820E+3,0.231E+3,0.930E+2,0.19315000E+1,0.00000000E+0 - ,0.80170370E+3,0.231E+3,0.940E+2,0.19315000E+1,0.00000000E+0 - ,0.43888100E+2,0.231E+3,0.101E+3,0.19315000E+1,0.00000000E+0 - ,0.14510430E+3,0.231E+3,0.103E+3,0.19315000E+1,0.98650000E+0 - ,0.18457440E+3,0.231E+3,0.104E+3,0.19315000E+1,0.98080000E+0 - ,0.13925460E+3,0.231E+3,0.105E+3,0.19315000E+1,0.97060000E+0 - ,0.10391800E+3,0.231E+3,0.106E+3,0.19315000E+1,0.98680000E+0 - ,0.71423400E+2,0.231E+3,0.107E+3,0.19315000E+1,0.99440000E+0 - ,0.51470500E+2,0.231E+3,0.108E+3,0.19315000E+1,0.99250000E+0 - ,0.34900800E+2,0.231E+3,0.109E+3,0.19315000E+1,0.99820000E+0 - ,0.21236180E+3,0.231E+3,0.111E+3,0.19315000E+1,0.96840000E+0 - ,0.32896970E+3,0.231E+3,0.112E+3,0.19315000E+1,0.96280000E+0 - ,0.33140550E+3,0.231E+3,0.113E+3,0.19315000E+1,0.96480000E+0 - ,0.26387400E+3,0.231E+3,0.114E+3,0.19315000E+1,0.95070000E+0 - ,0.21439030E+3,0.231E+3,0.115E+3,0.19315000E+1,0.99470000E+0 - ,0.18013610E+3,0.231E+3,0.116E+3,0.19315000E+1,0.99480000E+0 - ,0.14618730E+3,0.231E+3,0.117E+3,0.19315000E+1,0.99720000E+0 - ,0.29057390E+3,0.231E+3,0.119E+3,0.19315000E+1,0.97670000E+0 - ,0.56411470E+3,0.231E+3,0.120E+3,0.19315000E+1,0.98310000E+0 - ,0.28899240E+3,0.231E+3,0.121E+3,0.19315000E+1,0.18627000E+1 - ,0.27882930E+3,0.231E+3,0.122E+3,0.19315000E+1,0.18299000E+1 - ,0.27324400E+3,0.231E+3,0.123E+3,0.19315000E+1,0.19138000E+1 - ,0.27091680E+3,0.231E+3,0.124E+3,0.19315000E+1,0.18269000E+1 - ,0.24831530E+3,0.231E+3,0.125E+3,0.19315000E+1,0.16406000E+1 - ,0.22943180E+3,0.231E+3,0.126E+3,0.19315000E+1,0.16483000E+1 - ,0.21879640E+3,0.231E+3,0.127E+3,0.19315000E+1,0.17149000E+1 - ,0.21396210E+3,0.231E+3,0.128E+3,0.19315000E+1,0.17937000E+1 - ,0.21202750E+3,0.231E+3,0.129E+3,0.19315000E+1,0.95760000E+0 - ,0.19784590E+3,0.231E+3,0.130E+3,0.19315000E+1,0.19419000E+1 - ,0.32767720E+3,0.231E+3,0.131E+3,0.19315000E+1,0.96010000E+0 - ,0.28580490E+3,0.231E+3,0.132E+3,0.19315000E+1,0.94340000E+0 - ,0.25463590E+3,0.231E+3,0.133E+3,0.19315000E+1,0.98890000E+0 - ,0.23143120E+3,0.231E+3,0.134E+3,0.19315000E+1,0.99010000E+0 - ,0.20272250E+3,0.231E+3,0.135E+3,0.19315000E+1,0.99740000E+0 - ,0.34599210E+3,0.231E+3,0.137E+3,0.19315000E+1,0.97380000E+0 - ,0.68659850E+3,0.231E+3,0.138E+3,0.19315000E+1,0.98010000E+0 - ,0.51944370E+3,0.231E+3,0.139E+3,0.19315000E+1,0.19153000E+1 - ,0.38219520E+3,0.231E+3,0.140E+3,0.19315000E+1,0.19355000E+1 - ,0.38593850E+3,0.231E+3,0.141E+3,0.19315000E+1,0.19545000E+1 - ,0.35915800E+3,0.231E+3,0.142E+3,0.19315000E+1,0.19420000E+1 - ,0.40491750E+3,0.231E+3,0.143E+3,0.19315000E+1,0.16682000E+1 - ,0.31159910E+3,0.231E+3,0.144E+3,0.19315000E+1,0.18584000E+1 - ,0.29122610E+3,0.231E+3,0.145E+3,0.19315000E+1,0.19003000E+1 - ,0.27005910E+3,0.231E+3,0.146E+3,0.19315000E+1,0.18630000E+1 - ,0.26136540E+3,0.231E+3,0.147E+3,0.19315000E+1,0.96790000E+0 - ,0.25790070E+3,0.231E+3,0.148E+3,0.19315000E+1,0.19539000E+1 - ,0.41546410E+3,0.231E+3,0.149E+3,0.19315000E+1,0.96330000E+0 - ,0.37370470E+3,0.231E+3,0.150E+3,0.19315000E+1,0.95140000E+0 - ,0.34844250E+3,0.231E+3,0.151E+3,0.19315000E+1,0.97490000E+0 - ,0.32849050E+3,0.231E+3,0.152E+3,0.19315000E+1,0.98110000E+0 - ,0.29869480E+3,0.231E+3,0.153E+3,0.19315000E+1,0.99680000E+0 - ,0.40757240E+3,0.231E+3,0.155E+3,0.19315000E+1,0.99090000E+0 - ,0.89181060E+3,0.231E+3,0.156E+3,0.19315000E+1,0.97970000E+0 - ,0.65796510E+3,0.231E+3,0.157E+3,0.19315000E+1,0.19373000E+1 - ,0.40771430E+3,0.231E+3,0.159E+3,0.19315000E+1,0.29425000E+1 - ,0.39924480E+3,0.231E+3,0.160E+3,0.19315000E+1,0.29455000E+1 - ,0.38644530E+3,0.231E+3,0.161E+3,0.19315000E+1,0.29413000E+1 - ,0.38870550E+3,0.231E+3,0.162E+3,0.19315000E+1,0.29300000E+1 - ,0.37562490E+3,0.231E+3,0.163E+3,0.19315000E+1,0.18286000E+1 - ,0.39136320E+3,0.231E+3,0.164E+3,0.19315000E+1,0.28732000E+1 - ,0.36723070E+3,0.231E+3,0.165E+3,0.19315000E+1,0.29086000E+1 - ,0.37425920E+3,0.231E+3,0.166E+3,0.19315000E+1,0.28965000E+1 - ,0.34830790E+3,0.231E+3,0.167E+3,0.19315000E+1,0.29242000E+1 - ,0.33828140E+3,0.231E+3,0.168E+3,0.19315000E+1,0.29282000E+1 - ,0.33621030E+3,0.231E+3,0.169E+3,0.19315000E+1,0.29246000E+1 - ,0.35402460E+3,0.231E+3,0.170E+3,0.19315000E+1,0.28482000E+1 - ,0.32484810E+3,0.231E+3,0.171E+3,0.19315000E+1,0.29219000E+1 - ,0.44480230E+3,0.231E+3,0.172E+3,0.19315000E+1,0.19254000E+1 - ,0.41120500E+3,0.231E+3,0.173E+3,0.19315000E+1,0.19459000E+1 - ,0.37363290E+3,0.231E+3,0.174E+3,0.19315000E+1,0.19292000E+1 - ,0.37928200E+3,0.231E+3,0.175E+3,0.19315000E+1,0.18104000E+1 - ,0.32899190E+3,0.231E+3,0.176E+3,0.19315000E+1,0.18858000E+1 - ,0.30890630E+3,0.231E+3,0.177E+3,0.19315000E+1,0.18648000E+1 - ,0.29467460E+3,0.231E+3,0.178E+3,0.19315000E+1,0.19188000E+1 - ,0.28159150E+3,0.231E+3,0.179E+3,0.19315000E+1,0.98460000E+0 - ,0.27130180E+3,0.231E+3,0.180E+3,0.19315000E+1,0.19896000E+1 - ,0.44509120E+3,0.231E+3,0.181E+3,0.19315000E+1,0.92670000E+0 - ,0.40339300E+3,0.231E+3,0.182E+3,0.19315000E+1,0.93830000E+0 - ,0.38999300E+3,0.231E+3,0.183E+3,0.19315000E+1,0.98200000E+0 - ,0.37835750E+3,0.231E+3,0.184E+3,0.19315000E+1,0.98150000E+0 - ,0.35197820E+3,0.231E+3,0.185E+3,0.19315000E+1,0.99540000E+0 - ,0.45891490E+3,0.231E+3,0.187E+3,0.19315000E+1,0.97050000E+0 - ,0.88404110E+3,0.231E+3,0.188E+3,0.19315000E+1,0.96620000E+0 - ,0.48263570E+3,0.231E+3,0.189E+3,0.19315000E+1,0.29070000E+1 - ,0.55982510E+3,0.231E+3,0.190E+3,0.19315000E+1,0.28844000E+1 - ,0.49934950E+3,0.231E+3,0.191E+3,0.19315000E+1,0.28738000E+1 - ,0.43935480E+3,0.231E+3,0.192E+3,0.19315000E+1,0.28878000E+1 - ,0.42233120E+3,0.231E+3,0.193E+3,0.19315000E+1,0.29095000E+1 - ,0.51359610E+3,0.231E+3,0.194E+3,0.19315000E+1,0.19209000E+1 - ,0.11896190E+3,0.231E+3,0.204E+3,0.19315000E+1,0.19697000E+1 - ,0.11648300E+3,0.231E+3,0.205E+3,0.19315000E+1,0.19441000E+1 - ,0.84269100E+2,0.231E+3,0.206E+3,0.19315000E+1,0.19985000E+1 - ,0.66955000E+2,0.231E+3,0.207E+3,0.19315000E+1,0.20143000E+1 - ,0.45233600E+2,0.231E+3,0.208E+3,0.19315000E+1,0.19887000E+1 - ,0.21230440E+3,0.231E+3,0.212E+3,0.19315000E+1,0.19496000E+1 - ,0.25671210E+3,0.231E+3,0.213E+3,0.19315000E+1,0.19311000E+1 - ,0.24505850E+3,0.231E+3,0.214E+3,0.19315000E+1,0.19435000E+1 - ,0.21155710E+3,0.231E+3,0.215E+3,0.19315000E+1,0.20102000E+1 - ,0.17644990E+3,0.231E+3,0.216E+3,0.19315000E+1,0.19903000E+1 - ,0.29710840E+3,0.231E+3,0.220E+3,0.19315000E+1,0.19349000E+1 - ,0.28448700E+3,0.231E+3,0.221E+3,0.19315000E+1,0.28999000E+1 - ,0.28787970E+3,0.231E+3,0.222E+3,0.19315000E+1,0.38675000E+1 - ,0.26338000E+3,0.231E+3,0.223E+3,0.19315000E+1,0.29110000E+1 - ,0.19677040E+3,0.231E+3,0.224E+3,0.19315000E+1,0.10619100E+2 - ,0.16756290E+3,0.231E+3,0.225E+3,0.19315000E+1,0.98849000E+1 - ,0.16455530E+3,0.231E+3,0.226E+3,0.19315000E+1,0.91376000E+1 - ,0.19438680E+3,0.231E+3,0.227E+3,0.19315000E+1,0.29263000E+1 - ,0.18072890E+3,0.231E+3,0.228E+3,0.19315000E+1,0.65458000E+1 - ,0.25787270E+3,0.231E+3,0.231E+3,0.19315000E+1,0.19315000E+1 - ,0.28635900E+2,0.232E+3,0.100E+1,0.19447000E+1,0.91180000E+0 - ,0.18618600E+2,0.232E+3,0.200E+1,0.19447000E+1,0.00000000E+0 - ,0.45411250E+3,0.232E+3,0.300E+1,0.19447000E+1,0.00000000E+0 - ,0.26160340E+3,0.232E+3,0.400E+1,0.19447000E+1,0.00000000E+0 - ,0.17509380E+3,0.232E+3,0.500E+1,0.19447000E+1,0.00000000E+0 - ,0.11741980E+3,0.232E+3,0.600E+1,0.19447000E+1,0.00000000E+0 - ,0.81501900E+2,0.232E+3,0.700E+1,0.19447000E+1,0.00000000E+0 - ,0.61309900E+2,0.232E+3,0.800E+1,0.19447000E+1,0.00000000E+0 - ,0.46146800E+2,0.232E+3,0.900E+1,0.19447000E+1,0.00000000E+0 - ,0.35284200E+2,0.232E+3,0.100E+2,0.19447000E+1,0.00000000E+0 - ,0.54266570E+3,0.232E+3,0.110E+2,0.19447000E+1,0.00000000E+0 - ,0.41703070E+3,0.232E+3,0.120E+2,0.19447000E+1,0.00000000E+0 - ,0.38363050E+3,0.232E+3,0.130E+2,0.19447000E+1,0.00000000E+0 - ,0.30113800E+3,0.232E+3,0.140E+2,0.19447000E+1,0.00000000E+0 - ,0.23370440E+3,0.232E+3,0.150E+2,0.19447000E+1,0.00000000E+0 - ,0.19313150E+3,0.232E+3,0.160E+2,0.19447000E+1,0.00000000E+0 - ,0.15700310E+3,0.232E+3,0.170E+2,0.19447000E+1,0.00000000E+0 - ,0.12781130E+3,0.232E+3,0.180E+2,0.19447000E+1,0.00000000E+0 - ,0.88770750E+3,0.232E+3,0.190E+2,0.19447000E+1,0.00000000E+0 - ,0.73264330E+3,0.232E+3,0.200E+2,0.19447000E+1,0.00000000E+0 - ,0.60503430E+3,0.232E+3,0.210E+2,0.19447000E+1,0.00000000E+0 - ,0.58362370E+3,0.232E+3,0.220E+2,0.19447000E+1,0.00000000E+0 - ,0.53412560E+3,0.232E+3,0.230E+2,0.19447000E+1,0.00000000E+0 - ,0.42006420E+3,0.232E+3,0.240E+2,0.19447000E+1,0.00000000E+0 - ,0.45943140E+3,0.232E+3,0.250E+2,0.19447000E+1,0.00000000E+0 - ,0.35991720E+3,0.232E+3,0.260E+2,0.19447000E+1,0.00000000E+0 - ,0.38165880E+3,0.232E+3,0.270E+2,0.19447000E+1,0.00000000E+0 - ,0.39345300E+3,0.232E+3,0.280E+2,0.19447000E+1,0.00000000E+0 - ,0.30098740E+3,0.232E+3,0.290E+2,0.19447000E+1,0.00000000E+0 - ,0.30895170E+3,0.232E+3,0.300E+2,0.19447000E+1,0.00000000E+0 - ,0.36657420E+3,0.232E+3,0.310E+2,0.19447000E+1,0.00000000E+0 - ,0.32239740E+3,0.232E+3,0.320E+2,0.19447000E+1,0.00000000E+0 - ,0.27396550E+3,0.232E+3,0.330E+2,0.19447000E+1,0.00000000E+0 - ,0.24506900E+3,0.232E+3,0.340E+2,0.19447000E+1,0.00000000E+0 - ,0.21366510E+3,0.232E+3,0.350E+2,0.19447000E+1,0.00000000E+0 - ,0.18507510E+3,0.232E+3,0.360E+2,0.19447000E+1,0.00000000E+0 - ,0.99420460E+3,0.232E+3,0.370E+2,0.19447000E+1,0.00000000E+0 - ,0.87244650E+3,0.232E+3,0.380E+2,0.19447000E+1,0.00000000E+0 - ,0.76334100E+3,0.232E+3,0.390E+2,0.19447000E+1,0.00000000E+0 - ,0.68527160E+3,0.232E+3,0.400E+2,0.19447000E+1,0.00000000E+0 - ,0.62420610E+3,0.232E+3,0.410E+2,0.19447000E+1,0.00000000E+0 - ,0.48055520E+3,0.232E+3,0.420E+2,0.19447000E+1,0.00000000E+0 - ,0.53677950E+3,0.232E+3,0.430E+2,0.19447000E+1,0.00000000E+0 - ,0.40763390E+3,0.232E+3,0.440E+2,0.19447000E+1,0.00000000E+0 - ,0.44608760E+3,0.232E+3,0.450E+2,0.19447000E+1,0.00000000E+0 - ,0.41332440E+3,0.232E+3,0.460E+2,0.19447000E+1,0.00000000E+0 - ,0.34400650E+3,0.232E+3,0.470E+2,0.19447000E+1,0.00000000E+0 - ,0.36375360E+3,0.232E+3,0.480E+2,0.19447000E+1,0.00000000E+0 - ,0.45781190E+3,0.232E+3,0.490E+2,0.19447000E+1,0.00000000E+0 - ,0.42263220E+3,0.232E+3,0.500E+2,0.19447000E+1,0.00000000E+0 - ,0.37560470E+3,0.232E+3,0.510E+2,0.19447000E+1,0.00000000E+0 - ,0.34772860E+3,0.232E+3,0.520E+2,0.19447000E+1,0.00000000E+0 - ,0.31352800E+3,0.232E+3,0.530E+2,0.19447000E+1,0.00000000E+0 - ,0.28100460E+3,0.232E+3,0.540E+2,0.19447000E+1,0.00000000E+0 - ,0.12108497E+4,0.232E+3,0.550E+2,0.19447000E+1,0.00000000E+0 - ,0.11120376E+4,0.232E+3,0.560E+2,0.19447000E+1,0.00000000E+0 - ,0.97600660E+3,0.232E+3,0.570E+2,0.19447000E+1,0.00000000E+0 - ,0.44363880E+3,0.232E+3,0.580E+2,0.19447000E+1,0.27991000E+1 - ,0.98453560E+3,0.232E+3,0.590E+2,0.19447000E+1,0.00000000E+0 - ,0.94530650E+3,0.232E+3,0.600E+2,0.19447000E+1,0.00000000E+0 - ,0.92157530E+3,0.232E+3,0.610E+2,0.19447000E+1,0.00000000E+0 - ,0.89976220E+3,0.232E+3,0.620E+2,0.19447000E+1,0.00000000E+0 - ,0.88042150E+3,0.232E+3,0.630E+2,0.19447000E+1,0.00000000E+0 - ,0.69068230E+3,0.232E+3,0.640E+2,0.19447000E+1,0.00000000E+0 - ,0.77859640E+3,0.232E+3,0.650E+2,0.19447000E+1,0.00000000E+0 - ,0.75073230E+3,0.232E+3,0.660E+2,0.19447000E+1,0.00000000E+0 - ,0.79395920E+3,0.232E+3,0.670E+2,0.19447000E+1,0.00000000E+0 - ,0.77712650E+3,0.232E+3,0.680E+2,0.19447000E+1,0.00000000E+0 - ,0.76193210E+3,0.232E+3,0.690E+2,0.19447000E+1,0.00000000E+0 - ,0.75311720E+3,0.232E+3,0.700E+2,0.19447000E+1,0.00000000E+0 - ,0.63353080E+3,0.232E+3,0.710E+2,0.19447000E+1,0.00000000E+0 - ,0.62243820E+3,0.232E+3,0.720E+2,0.19447000E+1,0.00000000E+0 - ,0.56714200E+3,0.232E+3,0.730E+2,0.19447000E+1,0.00000000E+0 - ,0.47771970E+3,0.232E+3,0.740E+2,0.19447000E+1,0.00000000E+0 - ,0.48586480E+3,0.232E+3,0.750E+2,0.19447000E+1,0.00000000E+0 - ,0.43956860E+3,0.232E+3,0.760E+2,0.19447000E+1,0.00000000E+0 - ,0.40191180E+3,0.232E+3,0.770E+2,0.19447000E+1,0.00000000E+0 - ,0.33286630E+3,0.232E+3,0.780E+2,0.19447000E+1,0.00000000E+0 - ,0.31061480E+3,0.232E+3,0.790E+2,0.19447000E+1,0.00000000E+0 - ,0.31958080E+3,0.232E+3,0.800E+2,0.19447000E+1,0.00000000E+0 - ,0.46894260E+3,0.232E+3,0.810E+2,0.19447000E+1,0.00000000E+0 - ,0.45811250E+3,0.232E+3,0.820E+2,0.19447000E+1,0.00000000E+0 - ,0.42004290E+3,0.232E+3,0.830E+2,0.19447000E+1,0.00000000E+0 - ,0.39996790E+3,0.232E+3,0.840E+2,0.19447000E+1,0.00000000E+0 - ,0.36825120E+3,0.232E+3,0.850E+2,0.19447000E+1,0.00000000E+0 - ,0.33664170E+3,0.232E+3,0.860E+2,0.19447000E+1,0.00000000E+0 - ,0.11423947E+4,0.232E+3,0.870E+2,0.19447000E+1,0.00000000E+0 - ,0.10988136E+4,0.232E+3,0.880E+2,0.19447000E+1,0.00000000E+0 - ,0.97025760E+3,0.232E+3,0.890E+2,0.19447000E+1,0.00000000E+0 - ,0.87002090E+3,0.232E+3,0.900E+2,0.19447000E+1,0.00000000E+0 - ,0.86401750E+3,0.232E+3,0.910E+2,0.19447000E+1,0.00000000E+0 - ,0.83647440E+3,0.232E+3,0.920E+2,0.19447000E+1,0.00000000E+0 - ,0.86205870E+3,0.232E+3,0.930E+2,0.19447000E+1,0.00000000E+0 - ,0.83468930E+3,0.232E+3,0.940E+2,0.19447000E+1,0.00000000E+0 - ,0.46440900E+2,0.232E+3,0.101E+3,0.19447000E+1,0.00000000E+0 - ,0.15187590E+3,0.232E+3,0.103E+3,0.19447000E+1,0.98650000E+0 - ,0.19344570E+3,0.232E+3,0.104E+3,0.19447000E+1,0.98080000E+0 - ,0.14696060E+3,0.232E+3,0.105E+3,0.19447000E+1,0.97060000E+0 - ,0.11006510E+3,0.232E+3,0.106E+3,0.19447000E+1,0.98680000E+0 - ,0.75928700E+2,0.232E+3,0.107E+3,0.19447000E+1,0.99440000E+0 - ,0.54869300E+2,0.232E+3,0.108E+3,0.19447000E+1,0.99250000E+0 - ,0.37320200E+2,0.232E+3,0.109E+3,0.19447000E+1,0.99820000E+0 - ,0.22190310E+3,0.232E+3,0.111E+3,0.19447000E+1,0.96840000E+0 - ,0.34351060E+3,0.232E+3,0.112E+3,0.19447000E+1,0.96280000E+0 - ,0.34738790E+3,0.232E+3,0.113E+3,0.19447000E+1,0.96480000E+0 - ,0.27806710E+3,0.232E+3,0.114E+3,0.19447000E+1,0.95070000E+0 - ,0.22676600E+3,0.232E+3,0.115E+3,0.19447000E+1,0.99470000E+0 - ,0.19099270E+3,0.232E+3,0.116E+3,0.19447000E+1,0.99480000E+0 - ,0.15536720E+3,0.232E+3,0.117E+3,0.19447000E+1,0.99720000E+0 - ,0.30442220E+3,0.232E+3,0.119E+3,0.19447000E+1,0.97670000E+0 - ,0.58505150E+3,0.232E+3,0.120E+3,0.19447000E+1,0.98310000E+0 - ,0.30419020E+3,0.232E+3,0.121E+3,0.19447000E+1,0.18627000E+1 - ,0.29348990E+3,0.232E+3,0.122E+3,0.19447000E+1,0.18299000E+1 - ,0.28758510E+3,0.232E+3,0.123E+3,0.19447000E+1,0.19138000E+1 - ,0.28497290E+3,0.232E+3,0.124E+3,0.19447000E+1,0.18269000E+1 - ,0.26188660E+3,0.232E+3,0.125E+3,0.19447000E+1,0.16406000E+1 - ,0.24213490E+3,0.232E+3,0.126E+3,0.19447000E+1,0.16483000E+1 - ,0.23089560E+3,0.232E+3,0.127E+3,0.19447000E+1,0.17149000E+1 - ,0.22574350E+3,0.232E+3,0.128E+3,0.19447000E+1,0.17937000E+1 - ,0.22325740E+3,0.232E+3,0.129E+3,0.19447000E+1,0.95760000E+0 - ,0.20907070E+3,0.232E+3,0.130E+3,0.19447000E+1,0.19419000E+1 - ,0.34402320E+3,0.232E+3,0.131E+3,0.19447000E+1,0.96010000E+0 - ,0.30131020E+3,0.232E+3,0.132E+3,0.19447000E+1,0.94340000E+0 - ,0.26923080E+3,0.232E+3,0.133E+3,0.19447000E+1,0.98890000E+0 - ,0.24516040E+3,0.232E+3,0.134E+3,0.19447000E+1,0.99010000E+0 - ,0.21518160E+3,0.232E+3,0.135E+3,0.19447000E+1,0.99740000E+0 - ,0.36280200E+3,0.232E+3,0.137E+3,0.19447000E+1,0.97380000E+0 - ,0.71158620E+3,0.232E+3,0.138E+3,0.19447000E+1,0.98010000E+0 - ,0.54236550E+3,0.232E+3,0.139E+3,0.19447000E+1,0.19153000E+1 - ,0.40208770E+3,0.232E+3,0.140E+3,0.19447000E+1,0.19355000E+1 - ,0.40601940E+3,0.232E+3,0.141E+3,0.19447000E+1,0.19545000E+1 - ,0.37812310E+3,0.232E+3,0.142E+3,0.19447000E+1,0.19420000E+1 - ,0.42477910E+3,0.232E+3,0.143E+3,0.19447000E+1,0.16682000E+1 - ,0.32883410E+3,0.232E+3,0.144E+3,0.19447000E+1,0.18584000E+1 - ,0.30737400E+3,0.232E+3,0.145E+3,0.19447000E+1,0.19003000E+1 - ,0.28513600E+3,0.232E+3,0.146E+3,0.19447000E+1,0.18630000E+1 - ,0.27584840E+3,0.232E+3,0.147E+3,0.19447000E+1,0.96790000E+0 - ,0.27272280E+3,0.232E+3,0.148E+3,0.19447000E+1,0.19539000E+1 - ,0.43605730E+3,0.232E+3,0.149E+3,0.19447000E+1,0.96330000E+0 - ,0.39365950E+3,0.232E+3,0.150E+3,0.19447000E+1,0.95140000E+0 - ,0.36794630E+3,0.232E+3,0.151E+3,0.19447000E+1,0.97490000E+0 - ,0.34743580E+3,0.232E+3,0.152E+3,0.19447000E+1,0.98110000E+0 - ,0.31650110E+3,0.232E+3,0.153E+3,0.19447000E+1,0.99680000E+0 - ,0.42861700E+3,0.232E+3,0.155E+3,0.19447000E+1,0.99090000E+0 - ,0.92250460E+3,0.232E+3,0.156E+3,0.19447000E+1,0.97970000E+0 - ,0.68647720E+3,0.232E+3,0.157E+3,0.19447000E+1,0.19373000E+1 - ,0.43015130E+3,0.232E+3,0.159E+3,0.19447000E+1,0.29425000E+1 - ,0.42122950E+3,0.232E+3,0.160E+3,0.19447000E+1,0.29455000E+1 - ,0.40778710E+3,0.232E+3,0.161E+3,0.19447000E+1,0.29413000E+1 - ,0.40995360E+3,0.232E+3,0.162E+3,0.19447000E+1,0.29300000E+1 - ,0.39549150E+3,0.232E+3,0.163E+3,0.19447000E+1,0.18286000E+1 - ,0.41271440E+3,0.232E+3,0.164E+3,0.19447000E+1,0.28732000E+1 - ,0.38742350E+3,0.232E+3,0.165E+3,0.19447000E+1,0.29086000E+1 - ,0.39445350E+3,0.232E+3,0.166E+3,0.19447000E+1,0.28965000E+1 - ,0.36762060E+3,0.232E+3,0.167E+3,0.19447000E+1,0.29242000E+1 - ,0.35709490E+3,0.232E+3,0.168E+3,0.19447000E+1,0.29282000E+1 - ,0.35486500E+3,0.232E+3,0.169E+3,0.19447000E+1,0.29246000E+1 - ,0.37342540E+3,0.232E+3,0.170E+3,0.19447000E+1,0.28482000E+1 - ,0.34296160E+3,0.232E+3,0.171E+3,0.19447000E+1,0.29219000E+1 - ,0.46674760E+3,0.232E+3,0.172E+3,0.19447000E+1,0.19254000E+1 - ,0.43239170E+3,0.232E+3,0.173E+3,0.19447000E+1,0.19459000E+1 - ,0.39371210E+3,0.232E+3,0.174E+3,0.19447000E+1,0.19292000E+1 - ,0.39890670E+3,0.232E+3,0.175E+3,0.19447000E+1,0.18104000E+1 - ,0.34767760E+3,0.232E+3,0.176E+3,0.19447000E+1,0.18858000E+1 - ,0.32665250E+3,0.232E+3,0.177E+3,0.19447000E+1,0.18648000E+1 - ,0.31170830E+3,0.232E+3,0.178E+3,0.19447000E+1,0.19188000E+1 - ,0.29781700E+3,0.232E+3,0.179E+3,0.19447000E+1,0.98460000E+0 - ,0.28742670E+3,0.232E+3,0.180E+3,0.19447000E+1,0.19896000E+1 - ,0.46737550E+3,0.232E+3,0.181E+3,0.19447000E+1,0.92670000E+0 - ,0.42511580E+3,0.232E+3,0.182E+3,0.19447000E+1,0.93830000E+0 - ,0.41176820E+3,0.232E+3,0.183E+3,0.19447000E+1,0.98200000E+0 - ,0.39999560E+3,0.232E+3,0.184E+3,0.19447000E+1,0.98150000E+0 - ,0.37274130E+3,0.232E+3,0.185E+3,0.19447000E+1,0.99540000E+0 - ,0.48272480E+3,0.232E+3,0.187E+3,0.19447000E+1,0.97050000E+0 - ,0.91693150E+3,0.232E+3,0.188E+3,0.19447000E+1,0.96620000E+0 - ,0.50916980E+3,0.232E+3,0.189E+3,0.19447000E+1,0.29070000E+1 - ,0.58862060E+3,0.232E+3,0.190E+3,0.19447000E+1,0.28844000E+1 - ,0.52540620E+3,0.232E+3,0.191E+3,0.19447000E+1,0.28738000E+1 - ,0.46359030E+3,0.232E+3,0.192E+3,0.19447000E+1,0.28878000E+1 - ,0.44586270E+3,0.232E+3,0.193E+3,0.19447000E+1,0.29095000E+1 - ,0.53855800E+3,0.232E+3,0.194E+3,0.19447000E+1,0.19209000E+1 - ,0.12562090E+3,0.232E+3,0.204E+3,0.19447000E+1,0.19697000E+1 - ,0.12309690E+3,0.232E+3,0.205E+3,0.19447000E+1,0.19441000E+1 - ,0.89444800E+2,0.232E+3,0.206E+3,0.19447000E+1,0.19985000E+1 - ,0.71201700E+2,0.232E+3,0.207E+3,0.19447000E+1,0.20143000E+1 - ,0.48247600E+2,0.232E+3,0.208E+3,0.19447000E+1,0.19887000E+1 - ,0.22342490E+3,0.232E+3,0.212E+3,0.19447000E+1,0.19496000E+1 - ,0.26999430E+3,0.232E+3,0.213E+3,0.19447000E+1,0.19311000E+1 - ,0.25843380E+3,0.232E+3,0.214E+3,0.19447000E+1,0.19435000E+1 - ,0.22370080E+3,0.232E+3,0.215E+3,0.19447000E+1,0.20102000E+1 - ,0.18709060E+3,0.232E+3,0.216E+3,0.19447000E+1,0.19903000E+1 - ,0.31254240E+3,0.232E+3,0.220E+3,0.19447000E+1,0.19349000E+1 - ,0.29990140E+3,0.232E+3,0.221E+3,0.19447000E+1,0.28999000E+1 - ,0.30352280E+3,0.232E+3,0.222E+3,0.19447000E+1,0.38675000E+1 - ,0.27760900E+3,0.232E+3,0.223E+3,0.19447000E+1,0.29110000E+1 - ,0.20803810E+3,0.232E+3,0.224E+3,0.19447000E+1,0.10619100E+2 - ,0.17749730E+3,0.232E+3,0.225E+3,0.19447000E+1,0.98849000E+1 - ,0.17426540E+3,0.232E+3,0.226E+3,0.19447000E+1,0.91376000E+1 - ,0.20521220E+3,0.232E+3,0.227E+3,0.19447000E+1,0.29263000E+1 - ,0.19097590E+3,0.232E+3,0.228E+3,0.19447000E+1,0.65458000E+1 - ,0.27172720E+3,0.232E+3,0.231E+3,0.19447000E+1,0.19315000E+1 - ,0.28665450E+3,0.232E+3,0.232E+3,0.19447000E+1,0.19447000E+1 - ,0.26704200E+2,0.233E+3,0.100E+1,0.19793000E+1,0.91180000E+0 - ,0.17705100E+2,0.233E+3,0.200E+1,0.19793000E+1,0.00000000E+0 - ,0.39243650E+3,0.233E+3,0.300E+1,0.19793000E+1,0.00000000E+0 - ,0.23351510E+3,0.233E+3,0.400E+1,0.19793000E+1,0.00000000E+0 - ,0.15949690E+3,0.233E+3,0.500E+1,0.19793000E+1,0.00000000E+0 - ,0.10864070E+3,0.233E+3,0.600E+1,0.19793000E+1,0.00000000E+0 - ,0.76299200E+2,0.233E+3,0.700E+1,0.19793000E+1,0.00000000E+0 - ,0.57878400E+2,0.233E+3,0.800E+1,0.19793000E+1,0.00000000E+0 - ,0.43876200E+2,0.233E+3,0.900E+1,0.19793000E+1,0.00000000E+0 - ,0.33739100E+2,0.233E+3,0.100E+2,0.19793000E+1,0.00000000E+0 - ,0.46995960E+3,0.233E+3,0.110E+2,0.19793000E+1,0.00000000E+0 - ,0.37006380E+3,0.233E+3,0.120E+2,0.19793000E+1,0.00000000E+0 - ,0.34393430E+3,0.233E+3,0.130E+2,0.19793000E+1,0.00000000E+0 - ,0.27373340E+3,0.233E+3,0.140E+2,0.19793000E+1,0.00000000E+0 - ,0.21501030E+3,0.233E+3,0.150E+2,0.19793000E+1,0.00000000E+0 - ,0.17911600E+3,0.233E+3,0.160E+2,0.19793000E+1,0.00000000E+0 - ,0.14674050E+3,0.233E+3,0.170E+2,0.19793000E+1,0.00000000E+0 - ,0.12026980E+3,0.233E+3,0.180E+2,0.19793000E+1,0.00000000E+0 - ,0.76653110E+3,0.233E+3,0.190E+2,0.19793000E+1,0.00000000E+0 - ,0.64403510E+3,0.233E+3,0.200E+2,0.19793000E+1,0.00000000E+0 - ,0.53415750E+3,0.233E+3,0.210E+2,0.19793000E+1,0.00000000E+0 - ,0.51756110E+3,0.233E+3,0.220E+2,0.19793000E+1,0.00000000E+0 - ,0.47488980E+3,0.233E+3,0.230E+2,0.19793000E+1,0.00000000E+0 - ,0.37400380E+3,0.233E+3,0.240E+2,0.19793000E+1,0.00000000E+0 - ,0.41001990E+3,0.233E+3,0.250E+2,0.19793000E+1,0.00000000E+0 - ,0.32180920E+3,0.233E+3,0.260E+2,0.19793000E+1,0.00000000E+0 - ,0.34272150E+3,0.233E+3,0.270E+2,0.19793000E+1,0.00000000E+0 - ,0.35234030E+3,0.233E+3,0.280E+2,0.19793000E+1,0.00000000E+0 - ,0.26993300E+3,0.233E+3,0.290E+2,0.19793000E+1,0.00000000E+0 - ,0.27903750E+3,0.233E+3,0.300E+2,0.19793000E+1,0.00000000E+0 - ,0.33018810E+3,0.233E+3,0.310E+2,0.19793000E+1,0.00000000E+0 - ,0.29343220E+3,0.233E+3,0.320E+2,0.19793000E+1,0.00000000E+0 - ,0.25181550E+3,0.233E+3,0.330E+2,0.19793000E+1,0.00000000E+0 - ,0.22668450E+3,0.233E+3,0.340E+2,0.19793000E+1,0.00000000E+0 - ,0.19893080E+3,0.233E+3,0.350E+2,0.19793000E+1,0.00000000E+0 - ,0.17335820E+3,0.233E+3,0.360E+2,0.19793000E+1,0.00000000E+0 - ,0.86036720E+3,0.233E+3,0.370E+2,0.19793000E+1,0.00000000E+0 - ,0.76674210E+3,0.233E+3,0.380E+2,0.19793000E+1,0.00000000E+0 - ,0.67620360E+3,0.233E+3,0.390E+2,0.19793000E+1,0.00000000E+0 - ,0.61017610E+3,0.233E+3,0.400E+2,0.19793000E+1,0.00000000E+0 - ,0.55778500E+3,0.233E+3,0.410E+2,0.19793000E+1,0.00000000E+0 - ,0.43224960E+3,0.233E+3,0.420E+2,0.19793000E+1,0.00000000E+0 - ,0.48162290E+3,0.233E+3,0.430E+2,0.19793000E+1,0.00000000E+0 - ,0.36836950E+3,0.233E+3,0.440E+2,0.19793000E+1,0.00000000E+0 - ,0.40280170E+3,0.233E+3,0.450E+2,0.19793000E+1,0.00000000E+0 - ,0.37403530E+3,0.233E+3,0.460E+2,0.19793000E+1,0.00000000E+0 - ,0.31127990E+3,0.233E+3,0.470E+2,0.19793000E+1,0.00000000E+0 - ,0.33010750E+3,0.233E+3,0.480E+2,0.19793000E+1,0.00000000E+0 - ,0.41255410E+3,0.233E+3,0.490E+2,0.19793000E+1,0.00000000E+0 - ,0.38394660E+3,0.233E+3,0.500E+2,0.19793000E+1,0.00000000E+0 - ,0.34410360E+3,0.233E+3,0.510E+2,0.19793000E+1,0.00000000E+0 - ,0.32025290E+3,0.233E+3,0.520E+2,0.19793000E+1,0.00000000E+0 - ,0.29042110E+3,0.233E+3,0.530E+2,0.19793000E+1,0.00000000E+0 - ,0.26173610E+3,0.233E+3,0.540E+2,0.19793000E+1,0.00000000E+0 - ,0.10488144E+4,0.233E+3,0.550E+2,0.19793000E+1,0.00000000E+0 - ,0.97532420E+3,0.233E+3,0.560E+2,0.19793000E+1,0.00000000E+0 - ,0.86267800E+3,0.233E+3,0.570E+2,0.19793000E+1,0.00000000E+0 - ,0.40598460E+3,0.233E+3,0.580E+2,0.19793000E+1,0.27991000E+1 - ,0.86579390E+3,0.233E+3,0.590E+2,0.19793000E+1,0.00000000E+0 - ,0.83226700E+3,0.233E+3,0.600E+2,0.19793000E+1,0.00000000E+0 - ,0.81163560E+3,0.233E+3,0.610E+2,0.19793000E+1,0.00000000E+0 - ,0.79263850E+3,0.233E+3,0.620E+2,0.19793000E+1,0.00000000E+0 - ,0.77580510E+3,0.233E+3,0.630E+2,0.19793000E+1,0.00000000E+0 - ,0.61436540E+3,0.233E+3,0.640E+2,0.19793000E+1,0.00000000E+0 - ,0.68438050E+3,0.233E+3,0.650E+2,0.19793000E+1,0.00000000E+0 - ,0.66094210E+3,0.233E+3,0.660E+2,0.19793000E+1,0.00000000E+0 - ,0.70089270E+3,0.233E+3,0.670E+2,0.19793000E+1,0.00000000E+0 - ,0.68614780E+3,0.233E+3,0.680E+2,0.19793000E+1,0.00000000E+0 - ,0.67291500E+3,0.233E+3,0.690E+2,0.19793000E+1,0.00000000E+0 - ,0.66485520E+3,0.233E+3,0.700E+2,0.19793000E+1,0.00000000E+0 - ,0.56289600E+3,0.233E+3,0.710E+2,0.19793000E+1,0.00000000E+0 - ,0.55747290E+3,0.233E+3,0.720E+2,0.19793000E+1,0.00000000E+0 - ,0.51061380E+3,0.233E+3,0.730E+2,0.19793000E+1,0.00000000E+0 - ,0.43217460E+3,0.233E+3,0.740E+2,0.19793000E+1,0.00000000E+0 - ,0.44031270E+3,0.233E+3,0.750E+2,0.19793000E+1,0.00000000E+0 - ,0.40018070E+3,0.233E+3,0.760E+2,0.19793000E+1,0.00000000E+0 - ,0.36727240E+3,0.233E+3,0.770E+2,0.19793000E+1,0.00000000E+0 - ,0.30555600E+3,0.233E+3,0.780E+2,0.19793000E+1,0.00000000E+0 - ,0.28562940E+3,0.233E+3,0.790E+2,0.19793000E+1,0.00000000E+0 - ,0.29425470E+3,0.233E+3,0.800E+2,0.19793000E+1,0.00000000E+0 - ,0.42390230E+3,0.233E+3,0.810E+2,0.19793000E+1,0.00000000E+0 - ,0.41654960E+3,0.233E+3,0.820E+2,0.19793000E+1,0.00000000E+0 - ,0.38473230E+3,0.233E+3,0.830E+2,0.19793000E+1,0.00000000E+0 - ,0.36796170E+3,0.233E+3,0.840E+2,0.19793000E+1,0.00000000E+0 - ,0.34061170E+3,0.233E+3,0.850E+2,0.19793000E+1,0.00000000E+0 - ,0.31293820E+3,0.233E+3,0.860E+2,0.19793000E+1,0.00000000E+0 - ,0.99568830E+3,0.233E+3,0.870E+2,0.19793000E+1,0.00000000E+0 - ,0.96779800E+3,0.233E+3,0.880E+2,0.19793000E+1,0.00000000E+0 - ,0.86060590E+3,0.233E+3,0.890E+2,0.19793000E+1,0.00000000E+0 - ,0.77842680E+3,0.233E+3,0.900E+2,0.19793000E+1,0.00000000E+0 - ,0.77007950E+3,0.233E+3,0.910E+2,0.19793000E+1,0.00000000E+0 - ,0.74569540E+3,0.233E+3,0.920E+2,0.19793000E+1,0.00000000E+0 - ,0.76439730E+3,0.233E+3,0.930E+2,0.19793000E+1,0.00000000E+0 - ,0.74080980E+3,0.233E+3,0.940E+2,0.19793000E+1,0.00000000E+0 - ,0.42778900E+2,0.233E+3,0.101E+3,0.19793000E+1,0.00000000E+0 - ,0.13598320E+3,0.233E+3,0.103E+3,0.19793000E+1,0.98650000E+0 - ,0.17394150E+3,0.233E+3,0.104E+3,0.19793000E+1,0.98080000E+0 - ,0.13447040E+3,0.233E+3,0.105E+3,0.19793000E+1,0.97060000E+0 - ,0.10184690E+3,0.233E+3,0.106E+3,0.19793000E+1,0.98680000E+0 - ,0.71123800E+2,0.233E+3,0.107E+3,0.19793000E+1,0.99440000E+0 - ,0.51919900E+2,0.233E+3,0.108E+3,0.19793000E+1,0.99250000E+0 - ,0.35758200E+2,0.233E+3,0.109E+3,0.19793000E+1,0.99820000E+0 - ,0.19806920E+3,0.233E+3,0.111E+3,0.19793000E+1,0.96840000E+0 - ,0.30612750E+3,0.233E+3,0.112E+3,0.19793000E+1,0.96280000E+0 - ,0.31225010E+3,0.233E+3,0.113E+3,0.19793000E+1,0.96480000E+0 - ,0.25331120E+3,0.233E+3,0.114E+3,0.19793000E+1,0.95070000E+0 - ,0.20873090E+3,0.233E+3,0.115E+3,0.19793000E+1,0.99470000E+0 - ,0.17710850E+3,0.233E+3,0.116E+3,0.19793000E+1,0.99480000E+0 - ,0.14519610E+3,0.233E+3,0.117E+3,0.19793000E+1,0.99720000E+0 - ,0.27423250E+3,0.233E+3,0.119E+3,0.19793000E+1,0.97670000E+0 - ,0.51543230E+3,0.233E+3,0.120E+3,0.19793000E+1,0.98310000E+0 - ,0.27666340E+3,0.233E+3,0.121E+3,0.19793000E+1,0.18627000E+1 - ,0.26710550E+3,0.233E+3,0.122E+3,0.19793000E+1,0.18299000E+1 - ,0.26168720E+3,0.233E+3,0.123E+3,0.19793000E+1,0.19138000E+1 - ,0.25898560E+3,0.233E+3,0.124E+3,0.19793000E+1,0.18269000E+1 - ,0.23941200E+3,0.233E+3,0.125E+3,0.19793000E+1,0.16406000E+1 - ,0.22180340E+3,0.233E+3,0.126E+3,0.19793000E+1,0.16483000E+1 - ,0.21154220E+3,0.233E+3,0.127E+3,0.19793000E+1,0.17149000E+1 - ,0.20671720E+3,0.233E+3,0.128E+3,0.19793000E+1,0.17937000E+1 - ,0.20348070E+3,0.233E+3,0.129E+3,0.19793000E+1,0.95760000E+0 - ,0.19216860E+3,0.233E+3,0.130E+3,0.19793000E+1,0.19419000E+1 - ,0.31071100E+3,0.233E+3,0.131E+3,0.19793000E+1,0.96010000E+0 - ,0.27494970E+3,0.233E+3,0.132E+3,0.19793000E+1,0.94340000E+0 - ,0.24761740E+3,0.233E+3,0.133E+3,0.19793000E+1,0.98890000E+0 - ,0.22675190E+3,0.233E+3,0.134E+3,0.19793000E+1,0.99010000E+0 - ,0.20027860E+3,0.233E+3,0.135E+3,0.19793000E+1,0.99740000E+0 - ,0.32770320E+3,0.233E+3,0.137E+3,0.19793000E+1,0.97380000E+0 - ,0.62656050E+3,0.233E+3,0.138E+3,0.19793000E+1,0.98010000E+0 - ,0.48524610E+3,0.233E+3,0.139E+3,0.19793000E+1,0.19153000E+1 - ,0.36563120E+3,0.233E+3,0.140E+3,0.19793000E+1,0.19355000E+1 - ,0.36911250E+3,0.233E+3,0.141E+3,0.19793000E+1,0.19545000E+1 - ,0.34461330E+3,0.233E+3,0.142E+3,0.19793000E+1,0.19420000E+1 - ,0.38416440E+3,0.233E+3,0.143E+3,0.19793000E+1,0.16682000E+1 - ,0.30149240E+3,0.233E+3,0.144E+3,0.19793000E+1,0.18584000E+1 - ,0.28204640E+3,0.233E+3,0.145E+3,0.19793000E+1,0.19003000E+1 - ,0.26198970E+3,0.233E+3,0.146E+3,0.19793000E+1,0.18630000E+1 - ,0.25321800E+3,0.233E+3,0.147E+3,0.19793000E+1,0.96790000E+0 - ,0.25140820E+3,0.233E+3,0.148E+3,0.19793000E+1,0.19539000E+1 - ,0.39410730E+3,0.233E+3,0.149E+3,0.19793000E+1,0.96330000E+0 - ,0.35883980E+3,0.233E+3,0.150E+3,0.19793000E+1,0.95140000E+0 - ,0.33748280E+3,0.233E+3,0.151E+3,0.19793000E+1,0.97490000E+0 - ,0.32008780E+3,0.233E+3,0.152E+3,0.19793000E+1,0.98110000E+0 - ,0.29314450E+3,0.233E+3,0.153E+3,0.19793000E+1,0.99680000E+0 - ,0.38968370E+3,0.233E+3,0.155E+3,0.19793000E+1,0.99090000E+0 - ,0.81023570E+3,0.233E+3,0.156E+3,0.19793000E+1,0.97970000E+0 - ,0.61351580E+3,0.233E+3,0.157E+3,0.19793000E+1,0.19373000E+1 - ,0.39384480E+3,0.233E+3,0.159E+3,0.19793000E+1,0.29425000E+1 - ,0.38570960E+3,0.233E+3,0.160E+3,0.19793000E+1,0.29455000E+1 - ,0.37356920E+3,0.233E+3,0.161E+3,0.19793000E+1,0.29413000E+1 - ,0.37509470E+3,0.233E+3,0.162E+3,0.19793000E+1,0.29300000E+1 - ,0.36042550E+3,0.233E+3,0.163E+3,0.19793000E+1,0.18286000E+1 - ,0.37742120E+3,0.233E+3,0.164E+3,0.19793000E+1,0.28732000E+1 - ,0.35468510E+3,0.233E+3,0.165E+3,0.19793000E+1,0.29086000E+1 - ,0.36034200E+3,0.233E+3,0.166E+3,0.19793000E+1,0.28965000E+1 - ,0.33690980E+3,0.233E+3,0.167E+3,0.19793000E+1,0.29242000E+1 - ,0.32739560E+3,0.233E+3,0.168E+3,0.19793000E+1,0.29282000E+1 - ,0.32523710E+3,0.233E+3,0.169E+3,0.19793000E+1,0.29246000E+1 - ,0.34156110E+3,0.233E+3,0.170E+3,0.19793000E+1,0.28482000E+1 - ,0.31451130E+3,0.233E+3,0.171E+3,0.19793000E+1,0.29219000E+1 - ,0.42201500E+3,0.233E+3,0.172E+3,0.19793000E+1,0.19254000E+1 - ,0.39293770E+3,0.233E+3,0.173E+3,0.19793000E+1,0.19459000E+1 - ,0.35967380E+3,0.233E+3,0.174E+3,0.19793000E+1,0.19292000E+1 - ,0.36277430E+3,0.233E+3,0.175E+3,0.19793000E+1,0.18104000E+1 - ,0.31999870E+3,0.233E+3,0.176E+3,0.19793000E+1,0.18858000E+1 - ,0.30124260E+3,0.233E+3,0.177E+3,0.19793000E+1,0.18648000E+1 - ,0.28780780E+3,0.233E+3,0.178E+3,0.19793000E+1,0.19188000E+1 - ,0.27498950E+3,0.233E+3,0.179E+3,0.19793000E+1,0.98460000E+0 - ,0.26648330E+3,0.233E+3,0.180E+3,0.19793000E+1,0.19896000E+1 - ,0.42338910E+3,0.233E+3,0.181E+3,0.19793000E+1,0.92670000E+0 - ,0.38827410E+3,0.233E+3,0.182E+3,0.19793000E+1,0.93830000E+0 - ,0.37778300E+3,0.233E+3,0.183E+3,0.19793000E+1,0.98200000E+0 - ,0.36822760E+3,0.233E+3,0.184E+3,0.19793000E+1,0.98150000E+0 - ,0.34477670E+3,0.233E+3,0.185E+3,0.19793000E+1,0.99540000E+0 - ,0.43908390E+3,0.233E+3,0.187E+3,0.19793000E+1,0.97050000E+0 - ,0.80936840E+3,0.233E+3,0.188E+3,0.19793000E+1,0.96620000E+0 - ,0.46604700E+3,0.233E+3,0.189E+3,0.19793000E+1,0.29070000E+1 - ,0.53507930E+3,0.233E+3,0.190E+3,0.19793000E+1,0.28844000E+1 - ,0.47904230E+3,0.233E+3,0.191E+3,0.19793000E+1,0.28738000E+1 - ,0.42495090E+3,0.233E+3,0.192E+3,0.19793000E+1,0.28878000E+1 - ,0.40922440E+3,0.233E+3,0.193E+3,0.19793000E+1,0.29095000E+1 - ,0.48694030E+3,0.233E+3,0.194E+3,0.19793000E+1,0.19209000E+1 - ,0.11501370E+3,0.233E+3,0.204E+3,0.19793000E+1,0.19697000E+1 - ,0.11314120E+3,0.233E+3,0.205E+3,0.19793000E+1,0.19441000E+1 - ,0.83286500E+2,0.233E+3,0.206E+3,0.19793000E+1,0.19985000E+1 - ,0.66781800E+2,0.233E+3,0.207E+3,0.19793000E+1,0.20143000E+1 - ,0.45789900E+2,0.233E+3,0.208E+3,0.19793000E+1,0.19887000E+1 - ,0.20272440E+3,0.233E+3,0.212E+3,0.19793000E+1,0.19496000E+1 - ,0.24478960E+3,0.233E+3,0.213E+3,0.19793000E+1,0.19311000E+1 - ,0.23590120E+3,0.233E+3,0.214E+3,0.19793000E+1,0.19435000E+1 - ,0.20577840E+3,0.233E+3,0.215E+3,0.19793000E+1,0.20102000E+1 - ,0.17352340E+3,0.233E+3,0.216E+3,0.19793000E+1,0.19903000E+1 - ,0.28380130E+3,0.233E+3,0.220E+3,0.19793000E+1,0.19349000E+1 - ,0.27376840E+3,0.233E+3,0.221E+3,0.19793000E+1,0.28999000E+1 - ,0.27719390E+3,0.233E+3,0.222E+3,0.19793000E+1,0.38675000E+1 - ,0.25351690E+3,0.233E+3,0.223E+3,0.19793000E+1,0.29110000E+1 - ,0.19175980E+3,0.233E+3,0.224E+3,0.19793000E+1,0.10619100E+2 - ,0.16452480E+3,0.233E+3,0.225E+3,0.19793000E+1,0.98849000E+1 - ,0.16141780E+3,0.233E+3,0.226E+3,0.19793000E+1,0.91376000E+1 - ,0.18837020E+3,0.233E+3,0.227E+3,0.19793000E+1,0.29263000E+1 - ,0.17573990E+3,0.233E+3,0.228E+3,0.19793000E+1,0.65458000E+1 - ,0.24774210E+3,0.233E+3,0.231E+3,0.19793000E+1,0.19315000E+1 - ,0.26203540E+3,0.233E+3,0.232E+3,0.19793000E+1,0.19447000E+1 - ,0.24124940E+3,0.233E+3,0.233E+3,0.19793000E+1,0.19793000E+1 - ,0.25126800E+2,0.234E+3,0.100E+1,0.19812000E+1,0.91180000E+0 - ,0.16915700E+2,0.234E+3,0.200E+1,0.19812000E+1,0.00000000E+0 - ,0.35181040E+3,0.234E+3,0.300E+1,0.19812000E+1,0.00000000E+0 - ,0.21331490E+3,0.234E+3,0.400E+1,0.19812000E+1,0.00000000E+0 - ,0.14765020E+3,0.234E+3,0.500E+1,0.19812000E+1,0.00000000E+0 - ,0.10167860E+3,0.234E+3,0.600E+1,0.19812000E+1,0.00000000E+0 - ,0.72032800E+2,0.234E+3,0.700E+1,0.19812000E+1,0.00000000E+0 - ,0.54994300E+2,0.234E+3,0.800E+1,0.19812000E+1,0.00000000E+0 - ,0.41926000E+2,0.234E+3,0.900E+1,0.19812000E+1,0.00000000E+0 - ,0.32389200E+2,0.234E+3,0.100E+2,0.19812000E+1,0.00000000E+0 - ,0.42191950E+3,0.234E+3,0.110E+2,0.19812000E+1,0.00000000E+0 - ,0.33688690E+3,0.234E+3,0.120E+2,0.19812000E+1,0.00000000E+0 - ,0.31511470E+3,0.234E+3,0.130E+2,0.19812000E+1,0.00000000E+0 - ,0.25302890E+3,0.234E+3,0.140E+2,0.19812000E+1,0.00000000E+0 - ,0.20037470E+3,0.234E+3,0.150E+2,0.19812000E+1,0.00000000E+0 - ,0.16788680E+3,0.234E+3,0.160E+2,0.19812000E+1,0.00000000E+0 - ,0.13832530E+3,0.234E+3,0.170E+2,0.19812000E+1,0.00000000E+0 - ,0.11395770E+3,0.234E+3,0.180E+2,0.19812000E+1,0.00000000E+0 - ,0.68773700E+3,0.234E+3,0.190E+2,0.19812000E+1,0.00000000E+0 - ,0.58340090E+3,0.234E+3,0.200E+2,0.19812000E+1,0.00000000E+0 - ,0.48505940E+3,0.234E+3,0.210E+2,0.19812000E+1,0.00000000E+0 - ,0.47134280E+3,0.234E+3,0.220E+2,0.19812000E+1,0.00000000E+0 - ,0.43318300E+3,0.234E+3,0.230E+2,0.19812000E+1,0.00000000E+0 - ,0.34166370E+3,0.234E+3,0.240E+2,0.19812000E+1,0.00000000E+0 - ,0.37490260E+3,0.234E+3,0.250E+2,0.19812000E+1,0.00000000E+0 - ,0.29477780E+3,0.234E+3,0.260E+2,0.19812000E+1,0.00000000E+0 - ,0.31457060E+3,0.234E+3,0.270E+2,0.19812000E+1,0.00000000E+0 - ,0.32282380E+3,0.234E+3,0.280E+2,0.19812000E+1,0.00000000E+0 - ,0.24774600E+3,0.234E+3,0.290E+2,0.19812000E+1,0.00000000E+0 - ,0.25705830E+3,0.234E+3,0.300E+2,0.19812000E+1,0.00000000E+0 - ,0.30357640E+3,0.234E+3,0.310E+2,0.19812000E+1,0.00000000E+0 - ,0.27154740E+3,0.234E+3,0.320E+2,0.19812000E+1,0.00000000E+0 - ,0.23456310E+3,0.234E+3,0.330E+2,0.19812000E+1,0.00000000E+0 - ,0.21209150E+3,0.234E+3,0.340E+2,0.19812000E+1,0.00000000E+0 - ,0.18699940E+3,0.234E+3,0.350E+2,0.19812000E+1,0.00000000E+0 - ,0.16369060E+3,0.234E+3,0.360E+2,0.19812000E+1,0.00000000E+0 - ,0.77312550E+3,0.234E+3,0.370E+2,0.19812000E+1,0.00000000E+0 - ,0.69465560E+3,0.234E+3,0.380E+2,0.19812000E+1,0.00000000E+0 - ,0.61553170E+3,0.234E+3,0.390E+2,0.19812000E+1,0.00000000E+0 - ,0.55720710E+3,0.234E+3,0.400E+2,0.19812000E+1,0.00000000E+0 - ,0.51054640E+3,0.234E+3,0.410E+2,0.19812000E+1,0.00000000E+0 - ,0.39746440E+3,0.234E+3,0.420E+2,0.19812000E+1,0.00000000E+0 - ,0.44207860E+3,0.234E+3,0.430E+2,0.19812000E+1,0.00000000E+0 - ,0.33981570E+3,0.234E+3,0.440E+2,0.19812000E+1,0.00000000E+0 - ,0.37122770E+3,0.234E+3,0.450E+2,0.19812000E+1,0.00000000E+0 - ,0.34521240E+3,0.234E+3,0.460E+2,0.19812000E+1,0.00000000E+0 - ,0.28750250E+3,0.234E+3,0.470E+2,0.19812000E+1,0.00000000E+0 - ,0.30524540E+3,0.234E+3,0.480E+2,0.19812000E+1,0.00000000E+0 - ,0.37968440E+3,0.234E+3,0.490E+2,0.19812000E+1,0.00000000E+0 - ,0.35506520E+3,0.234E+3,0.500E+2,0.19812000E+1,0.00000000E+0 - ,0.31993540E+3,0.234E+3,0.510E+2,0.19812000E+1,0.00000000E+0 - ,0.29881560E+3,0.234E+3,0.520E+2,0.19812000E+1,0.00000000E+0 - ,0.27205830E+3,0.234E+3,0.530E+2,0.19812000E+1,0.00000000E+0 - ,0.24614950E+3,0.234E+3,0.540E+2,0.19812000E+1,0.00000000E+0 - ,0.94314870E+3,0.234E+3,0.550E+2,0.19812000E+1,0.00000000E+0 - ,0.88280690E+3,0.234E+3,0.560E+2,0.19812000E+1,0.00000000E+0 - ,0.78440000E+3,0.234E+3,0.570E+2,0.19812000E+1,0.00000000E+0 - ,0.37731490E+3,0.234E+3,0.580E+2,0.19812000E+1,0.27991000E+1 - ,0.78497740E+3,0.234E+3,0.590E+2,0.19812000E+1,0.00000000E+0 - ,0.75507130E+3,0.234E+3,0.600E+2,0.19812000E+1,0.00000000E+0 - ,0.73648110E+3,0.234E+3,0.610E+2,0.19812000E+1,0.00000000E+0 - ,0.71934360E+3,0.234E+3,0.620E+2,0.19812000E+1,0.00000000E+0 - ,0.70416270E+3,0.234E+3,0.630E+2,0.19812000E+1,0.00000000E+0 - ,0.56098910E+3,0.234E+3,0.640E+2,0.19812000E+1,0.00000000E+0 - ,0.62074640E+3,0.234E+3,0.650E+2,0.19812000E+1,0.00000000E+0 - ,0.60005550E+3,0.234E+3,0.660E+2,0.19812000E+1,0.00000000E+0 - ,0.63681140E+3,0.234E+3,0.670E+2,0.19812000E+1,0.00000000E+0 - ,0.62345960E+3,0.234E+3,0.680E+2,0.19812000E+1,0.00000000E+0 - ,0.61152130E+3,0.234E+3,0.690E+2,0.19812000E+1,0.00000000E+0 - ,0.60402840E+3,0.234E+3,0.700E+2,0.19812000E+1,0.00000000E+0 - ,0.51348430E+3,0.234E+3,0.710E+2,0.19812000E+1,0.00000000E+0 - ,0.51090340E+3,0.234E+3,0.720E+2,0.19812000E+1,0.00000000E+0 - ,0.46953520E+3,0.234E+3,0.730E+2,0.19812000E+1,0.00000000E+0 - ,0.39880630E+3,0.234E+3,0.740E+2,0.19812000E+1,0.00000000E+0 - ,0.40670940E+3,0.234E+3,0.750E+2,0.19812000E+1,0.00000000E+0 - ,0.37075460E+3,0.234E+3,0.760E+2,0.19812000E+1,0.00000000E+0 - ,0.34112450E+3,0.234E+3,0.770E+2,0.19812000E+1,0.00000000E+0 - ,0.28477860E+3,0.234E+3,0.780E+2,0.19812000E+1,0.00000000E+0 - ,0.26655850E+3,0.234E+3,0.790E+2,0.19812000E+1,0.00000000E+0 - ,0.27475930E+3,0.234E+3,0.800E+2,0.19812000E+1,0.00000000E+0 - ,0.39114380E+3,0.234E+3,0.810E+2,0.19812000E+1,0.00000000E+0 - ,0.38562000E+3,0.234E+3,0.820E+2,0.19812000E+1,0.00000000E+0 - ,0.35778450E+3,0.234E+3,0.830E+2,0.19812000E+1,0.00000000E+0 - ,0.34316660E+3,0.234E+3,0.840E+2,0.19812000E+1,0.00000000E+0 - ,0.31880970E+3,0.234E+3,0.850E+2,0.19812000E+1,0.00000000E+0 - ,0.29392920E+3,0.234E+3,0.860E+2,0.19812000E+1,0.00000000E+0 - ,0.89872340E+3,0.234E+3,0.870E+2,0.19812000E+1,0.00000000E+0 - ,0.87826560E+3,0.234E+3,0.880E+2,0.19812000E+1,0.00000000E+0 - ,0.78418190E+3,0.234E+3,0.890E+2,0.19812000E+1,0.00000000E+0 - ,0.71316020E+3,0.234E+3,0.900E+2,0.19812000E+1,0.00000000E+0 - ,0.70403150E+3,0.234E+3,0.910E+2,0.19812000E+1,0.00000000E+0 - ,0.68185240E+3,0.234E+3,0.920E+2,0.19812000E+1,0.00000000E+0 - ,0.69668950E+3,0.234E+3,0.930E+2,0.19812000E+1,0.00000000E+0 - ,0.67555290E+3,0.234E+3,0.940E+2,0.19812000E+1,0.00000000E+0 - ,0.39896700E+2,0.234E+3,0.101E+3,0.19812000E+1,0.00000000E+0 - ,0.12448680E+3,0.234E+3,0.103E+3,0.19812000E+1,0.98650000E+0 - ,0.15970990E+3,0.234E+3,0.104E+3,0.19812000E+1,0.98080000E+0 - ,0.12488450E+3,0.234E+3,0.105E+3,0.19812000E+1,0.97060000E+0 - ,0.95355300E+2,0.234E+3,0.106E+3,0.19812000E+1,0.98680000E+0 - ,0.67193600E+2,0.234E+3,0.107E+3,0.19812000E+1,0.99440000E+0 - ,0.49429100E+2,0.234E+3,0.108E+3,0.19812000E+1,0.99250000E+0 - ,0.34372900E+2,0.234E+3,0.109E+3,0.19812000E+1,0.99820000E+0 - ,0.18104870E+3,0.234E+3,0.111E+3,0.19812000E+1,0.96840000E+0 - ,0.27950350E+3,0.234E+3,0.112E+3,0.19812000E+1,0.96280000E+0 - ,0.28658090E+3,0.234E+3,0.113E+3,0.19812000E+1,0.96480000E+0 - ,0.23450660E+3,0.234E+3,0.114E+3,0.19812000E+1,0.95070000E+0 - ,0.19460170E+3,0.234E+3,0.115E+3,0.19812000E+1,0.99470000E+0 - ,0.16599750E+3,0.234E+3,0.116E+3,0.19812000E+1,0.99480000E+0 - ,0.13686440E+3,0.234E+3,0.117E+3,0.19812000E+1,0.99720000E+0 - ,0.25244980E+3,0.234E+3,0.119E+3,0.19812000E+1,0.97670000E+0 - ,0.46788320E+3,0.234E+3,0.120E+3,0.19812000E+1,0.98310000E+0 - ,0.25604740E+3,0.234E+3,0.121E+3,0.19812000E+1,0.18627000E+1 - ,0.24734020E+3,0.234E+3,0.122E+3,0.19812000E+1,0.18299000E+1 - ,0.24231110E+3,0.234E+3,0.123E+3,0.19812000E+1,0.19138000E+1 - ,0.23963570E+3,0.234E+3,0.124E+3,0.19812000E+1,0.18269000E+1 - ,0.22229610E+3,0.234E+3,0.125E+3,0.19812000E+1,0.16406000E+1 - ,0.20623670E+3,0.234E+3,0.126E+3,0.19812000E+1,0.16483000E+1 - ,0.19674030E+3,0.234E+3,0.127E+3,0.19812000E+1,0.17149000E+1 - ,0.19219700E+3,0.234E+3,0.128E+3,0.19812000E+1,0.17937000E+1 - ,0.18865600E+3,0.234E+3,0.129E+3,0.19812000E+1,0.95760000E+0 - ,0.17907470E+3,0.234E+3,0.130E+3,0.19812000E+1,0.19419000E+1 - ,0.28616240E+3,0.234E+3,0.131E+3,0.19812000E+1,0.96010000E+0 - ,0.25488570E+3,0.234E+3,0.132E+3,0.19812000E+1,0.94340000E+0 - ,0.23075580E+3,0.234E+3,0.133E+3,0.19812000E+1,0.98890000E+0 - ,0.21214750E+3,0.234E+3,0.134E+3,0.19812000E+1,0.99010000E+0 - ,0.18822630E+3,0.234E+3,0.135E+3,0.19812000E+1,0.99740000E+0 - ,0.30225300E+3,0.234E+3,0.137E+3,0.19812000E+1,0.97380000E+0 - ,0.56874160E+3,0.234E+3,0.138E+3,0.19812000E+1,0.98010000E+0 - ,0.44473220E+3,0.234E+3,0.139E+3,0.19812000E+1,0.19153000E+1 - ,0.33846100E+3,0.234E+3,0.140E+3,0.19812000E+1,0.19355000E+1 - ,0.34164920E+3,0.234E+3,0.141E+3,0.19812000E+1,0.19545000E+1 - ,0.31953400E+3,0.234E+3,0.142E+3,0.19812000E+1,0.19420000E+1 - ,0.35457680E+3,0.234E+3,0.143E+3,0.19812000E+1,0.16682000E+1 - ,0.28063740E+3,0.234E+3,0.144E+3,0.19812000E+1,0.18584000E+1 - ,0.26272550E+3,0.234E+3,0.145E+3,0.19812000E+1,0.19003000E+1 - ,0.24429540E+3,0.234E+3,0.146E+3,0.19812000E+1,0.18630000E+1 - ,0.23598710E+3,0.234E+3,0.147E+3,0.19812000E+1,0.96790000E+0 - ,0.23484700E+3,0.234E+3,0.148E+3,0.19812000E+1,0.19539000E+1 - ,0.36336970E+3,0.234E+3,0.149E+3,0.19812000E+1,0.96330000E+0 - ,0.33258250E+3,0.234E+3,0.150E+3,0.19812000E+1,0.95140000E+0 - ,0.31402340E+3,0.234E+3,0.151E+3,0.19812000E+1,0.97490000E+0 - ,0.29872470E+3,0.234E+3,0.152E+3,0.19812000E+1,0.98110000E+0 - ,0.27458620E+3,0.234E+3,0.153E+3,0.19812000E+1,0.99680000E+0 - ,0.36080530E+3,0.234E+3,0.155E+3,0.19812000E+1,0.99090000E+0 - ,0.73458650E+3,0.234E+3,0.156E+3,0.19812000E+1,0.97970000E+0 - ,0.56200060E+3,0.234E+3,0.157E+3,0.19812000E+1,0.19373000E+1 - ,0.36616290E+3,0.234E+3,0.159E+3,0.19812000E+1,0.29425000E+1 - ,0.35862210E+3,0.234E+3,0.160E+3,0.19812000E+1,0.29455000E+1 - ,0.34744280E+3,0.234E+3,0.161E+3,0.19812000E+1,0.29413000E+1 - ,0.34859290E+3,0.234E+3,0.162E+3,0.19812000E+1,0.29300000E+1 - ,0.33417340E+3,0.234E+3,0.163E+3,0.19812000E+1,0.18286000E+1 - ,0.35060320E+3,0.234E+3,0.164E+3,0.19812000E+1,0.28732000E+1 - ,0.32973370E+3,0.234E+3,0.165E+3,0.19812000E+1,0.29086000E+1 - ,0.33455220E+3,0.234E+3,0.166E+3,0.19812000E+1,0.28965000E+1 - ,0.31341130E+3,0.234E+3,0.167E+3,0.19812000E+1,0.29242000E+1 - ,0.30463840E+3,0.234E+3,0.168E+3,0.19812000E+1,0.29282000E+1 - ,0.30255580E+3,0.234E+3,0.169E+3,0.19812000E+1,0.29246000E+1 - ,0.31727860E+3,0.234E+3,0.170E+3,0.19812000E+1,0.28482000E+1 - ,0.29267680E+3,0.234E+3,0.171E+3,0.19812000E+1,0.29219000E+1 - ,0.38927450E+3,0.234E+3,0.172E+3,0.19812000E+1,0.19254000E+1 - ,0.36365250E+3,0.234E+3,0.173E+3,0.19812000E+1,0.19459000E+1 - ,0.33401770E+3,0.234E+3,0.174E+3,0.19812000E+1,0.19292000E+1 - ,0.33595050E+3,0.234E+3,0.175E+3,0.19812000E+1,0.18104000E+1 - ,0.29862210E+3,0.234E+3,0.176E+3,0.19812000E+1,0.18858000E+1 - ,0.28153260E+3,0.234E+3,0.177E+3,0.19812000E+1,0.18648000E+1 - ,0.26922650E+3,0.234E+3,0.178E+3,0.19812000E+1,0.19188000E+1 - ,0.25729480E+3,0.234E+3,0.179E+3,0.19812000E+1,0.98460000E+0 - ,0.24994700E+3,0.234E+3,0.180E+3,0.19812000E+1,0.19896000E+1 - ,0.39112750E+3,0.234E+3,0.181E+3,0.19812000E+1,0.92670000E+0 - ,0.36046170E+3,0.234E+3,0.182E+3,0.19812000E+1,0.93830000E+0 - ,0.35169120E+3,0.234E+3,0.183E+3,0.19812000E+1,0.98200000E+0 - ,0.34355060E+3,0.234E+3,0.184E+3,0.19812000E+1,0.98150000E+0 - ,0.32270510E+3,0.234E+3,0.185E+3,0.19812000E+1,0.99540000E+0 - ,0.40664340E+3,0.234E+3,0.187E+3,0.19812000E+1,0.97050000E+0 - ,0.73595700E+3,0.234E+3,0.188E+3,0.19812000E+1,0.96620000E+0 - ,0.43316650E+3,0.234E+3,0.189E+3,0.19812000E+1,0.29070000E+1 - ,0.49533320E+3,0.234E+3,0.190E+3,0.19812000E+1,0.28844000E+1 - ,0.44442440E+3,0.234E+3,0.191E+3,0.19812000E+1,0.28738000E+1 - ,0.39550150E+3,0.234E+3,0.192E+3,0.19812000E+1,0.28878000E+1 - ,0.38118140E+3,0.234E+3,0.193E+3,0.19812000E+1,0.29095000E+1 - ,0.44946340E+3,0.234E+3,0.194E+3,0.19812000E+1,0.19209000E+1 - ,0.10680860E+3,0.234E+3,0.204E+3,0.19812000E+1,0.19697000E+1 - ,0.10541670E+3,0.234E+3,0.205E+3,0.19812000E+1,0.19441000E+1 - ,0.78317700E+2,0.234E+3,0.206E+3,0.19812000E+1,0.19985000E+1 - ,0.63154900E+2,0.234E+3,0.207E+3,0.19812000E+1,0.20143000E+1 - ,0.43702200E+2,0.234E+3,0.208E+3,0.19812000E+1,0.19887000E+1 - ,0.18715040E+3,0.234E+3,0.212E+3,0.19812000E+1,0.19496000E+1 - ,0.22592450E+3,0.234E+3,0.213E+3,0.19812000E+1,0.19311000E+1 - ,0.21868530E+3,0.234E+3,0.214E+3,0.19812000E+1,0.19435000E+1 - ,0.19178480E+3,0.234E+3,0.215E+3,0.19812000E+1,0.20102000E+1 - ,0.16266590E+3,0.234E+3,0.216E+3,0.19812000E+1,0.19903000E+1 - ,0.26236130E+3,0.234E+3,0.220E+3,0.19812000E+1,0.19349000E+1 - ,0.25392720E+3,0.234E+3,0.221E+3,0.19812000E+1,0.28999000E+1 - ,0.25718410E+3,0.234E+3,0.222E+3,0.19812000E+1,0.38675000E+1 - ,0.23527290E+3,0.234E+3,0.223E+3,0.19812000E+1,0.29110000E+1 - ,0.17915590E+3,0.234E+3,0.224E+3,0.19812000E+1,0.10619100E+2 - ,0.15430230E+3,0.234E+3,0.225E+3,0.19812000E+1,0.98849000E+1 - ,0.15132020E+3,0.234E+3,0.226E+3,0.19812000E+1,0.91376000E+1 - ,0.17548260E+3,0.234E+3,0.227E+3,0.19812000E+1,0.29263000E+1 - ,0.16398640E+3,0.234E+3,0.228E+3,0.19812000E+1,0.65458000E+1 - ,0.22956900E+3,0.234E+3,0.231E+3,0.19812000E+1,0.19315000E+1 - ,0.24320020E+3,0.234E+3,0.232E+3,0.19812000E+1,0.19447000E+1 - ,0.22498180E+3,0.234E+3,0.233E+3,0.19812000E+1,0.19793000E+1 - ,0.21052310E+3,0.234E+3,0.234E+3,0.19812000E+1,0.19812000E+1 - ,0.36860600E+2,0.238E+3,0.100E+1,0.19143000E+1,0.91180000E+0 - ,0.23840100E+2,0.238E+3,0.200E+1,0.19143000E+1,0.00000000E+0 - ,0.62823990E+3,0.238E+3,0.300E+1,0.19143000E+1,0.00000000E+0 - ,0.34816900E+3,0.238E+3,0.400E+1,0.19143000E+1,0.00000000E+0 - ,0.22895120E+3,0.238E+3,0.500E+1,0.19143000E+1,0.00000000E+0 - ,0.15197450E+3,0.238E+3,0.600E+1,0.19143000E+1,0.00000000E+0 - ,0.10490040E+3,0.238E+3,0.700E+1,0.19143000E+1,0.00000000E+0 - ,0.78693300E+2,0.238E+3,0.800E+1,0.19143000E+1,0.00000000E+0 - ,0.59141500E+2,0.238E+3,0.900E+1,0.19143000E+1,0.00000000E+0 - ,0.45194100E+2,0.238E+3,0.100E+2,0.19143000E+1,0.00000000E+0 - ,0.74930050E+3,0.238E+3,0.110E+2,0.19143000E+1,0.00000000E+0 - ,0.55878190E+3,0.238E+3,0.120E+2,0.19143000E+1,0.00000000E+0 - ,0.50880610E+3,0.238E+3,0.130E+2,0.19143000E+1,0.00000000E+0 - ,0.39434550E+3,0.238E+3,0.140E+2,0.19143000E+1,0.00000000E+0 - ,0.30325210E+3,0.238E+3,0.150E+2,0.19143000E+1,0.00000000E+0 - ,0.24942670E+3,0.238E+3,0.160E+2,0.19143000E+1,0.00000000E+0 - ,0.20199970E+3,0.238E+3,0.170E+2,0.19143000E+1,0.00000000E+0 - ,0.16402750E+3,0.238E+3,0.180E+2,0.19143000E+1,0.00000000E+0 - ,0.12349320E+4,0.238E+3,0.190E+2,0.19143000E+1,0.00000000E+0 - ,0.99446760E+3,0.238E+3,0.200E+2,0.19143000E+1,0.00000000E+0 - ,0.81692750E+3,0.238E+3,0.210E+2,0.19143000E+1,0.00000000E+0 - ,0.78468860E+3,0.238E+3,0.220E+2,0.19143000E+1,0.00000000E+0 - ,0.71627780E+3,0.238E+3,0.230E+2,0.19143000E+1,0.00000000E+0 - ,0.56371140E+3,0.238E+3,0.240E+2,0.19143000E+1,0.00000000E+0 - ,0.61384180E+3,0.238E+3,0.250E+2,0.19143000E+1,0.00000000E+0 - ,0.48104470E+3,0.238E+3,0.260E+2,0.19143000E+1,0.00000000E+0 - ,0.50672720E+3,0.238E+3,0.270E+2,0.19143000E+1,0.00000000E+0 - ,0.52370020E+3,0.238E+3,0.280E+2,0.19143000E+1,0.00000000E+0 - ,0.40117140E+3,0.238E+3,0.290E+2,0.19143000E+1,0.00000000E+0 - ,0.40794990E+3,0.238E+3,0.300E+2,0.19143000E+1,0.00000000E+0 - ,0.48488130E+3,0.238E+3,0.310E+2,0.19143000E+1,0.00000000E+0 - ,0.42218130E+3,0.238E+3,0.320E+2,0.19143000E+1,0.00000000E+0 - ,0.35593940E+3,0.238E+3,0.330E+2,0.19143000E+1,0.00000000E+0 - ,0.31709380E+3,0.238E+3,0.340E+2,0.19143000E+1,0.00000000E+0 - ,0.27544760E+3,0.238E+3,0.350E+2,0.19143000E+1,0.00000000E+0 - ,0.23792190E+3,0.238E+3,0.360E+2,0.19143000E+1,0.00000000E+0 - ,0.13808411E+4,0.238E+3,0.370E+2,0.19143000E+1,0.00000000E+0 - ,0.11858018E+4,0.238E+3,0.380E+2,0.19143000E+1,0.00000000E+0 - ,0.10282536E+4,0.238E+3,0.390E+2,0.19143000E+1,0.00000000E+0 - ,0.91823780E+3,0.238E+3,0.400E+2,0.19143000E+1,0.00000000E+0 - ,0.83371350E+3,0.238E+3,0.410E+2,0.19143000E+1,0.00000000E+0 - ,0.63877680E+3,0.238E+3,0.420E+2,0.19143000E+1,0.00000000E+0 - ,0.71471880E+3,0.238E+3,0.430E+2,0.19143000E+1,0.00000000E+0 - ,0.53996390E+3,0.238E+3,0.440E+2,0.19143000E+1,0.00000000E+0 - ,0.59037440E+3,0.238E+3,0.450E+2,0.19143000E+1,0.00000000E+0 - ,0.54597680E+3,0.238E+3,0.460E+2,0.19143000E+1,0.00000000E+0 - ,0.45572670E+3,0.238E+3,0.470E+2,0.19143000E+1,0.00000000E+0 - ,0.47937970E+3,0.238E+3,0.480E+2,0.19143000E+1,0.00000000E+0 - ,0.60681450E+3,0.238E+3,0.490E+2,0.19143000E+1,0.00000000E+0 - ,0.55532330E+3,0.238E+3,0.500E+2,0.19143000E+1,0.00000000E+0 - ,0.48982280E+3,0.238E+3,0.510E+2,0.19143000E+1,0.00000000E+0 - ,0.45162950E+3,0.238E+3,0.520E+2,0.19143000E+1,0.00000000E+0 - ,0.40561580E+3,0.238E+3,0.530E+2,0.19143000E+1,0.00000000E+0 - ,0.36235560E+3,0.238E+3,0.540E+2,0.19143000E+1,0.00000000E+0 - ,0.16813249E+4,0.238E+3,0.550E+2,0.19143000E+1,0.00000000E+0 - ,0.15165369E+4,0.238E+3,0.560E+2,0.19143000E+1,0.00000000E+0 - ,0.13190312E+4,0.238E+3,0.570E+2,0.19143000E+1,0.00000000E+0 - ,0.57973570E+3,0.238E+3,0.580E+2,0.19143000E+1,0.27991000E+1 - ,0.13389789E+4,0.238E+3,0.590E+2,0.19143000E+1,0.00000000E+0 - ,0.12836521E+4,0.238E+3,0.600E+2,0.19143000E+1,0.00000000E+0 - ,0.12508766E+4,0.238E+3,0.610E+2,0.19143000E+1,0.00000000E+0 - ,0.12208006E+4,0.238E+3,0.620E+2,0.19143000E+1,0.00000000E+0 - ,0.11941104E+4,0.238E+3,0.630E+2,0.19143000E+1,0.00000000E+0 - ,0.92828660E+3,0.238E+3,0.640E+2,0.19143000E+1,0.00000000E+0 - ,0.10621534E+4,0.238E+3,0.650E+2,0.19143000E+1,0.00000000E+0 - ,0.10223708E+4,0.238E+3,0.660E+2,0.19143000E+1,0.00000000E+0 - ,0.10743220E+4,0.238E+3,0.670E+2,0.19143000E+1,0.00000000E+0 - ,0.10512437E+4,0.238E+3,0.680E+2,0.19143000E+1,0.00000000E+0 - ,0.10302928E+4,0.238E+3,0.690E+2,0.19143000E+1,0.00000000E+0 - ,0.10187310E+4,0.238E+3,0.700E+2,0.19143000E+1,0.00000000E+0 - ,0.85160220E+3,0.238E+3,0.710E+2,0.19143000E+1,0.00000000E+0 - ,0.82898030E+3,0.238E+3,0.720E+2,0.19143000E+1,0.00000000E+0 - ,0.75166620E+3,0.238E+3,0.730E+2,0.19143000E+1,0.00000000E+0 - ,0.63136390E+3,0.238E+3,0.740E+2,0.19143000E+1,0.00000000E+0 - ,0.64074450E+3,0.238E+3,0.750E+2,0.19143000E+1,0.00000000E+0 - ,0.57745940E+3,0.238E+3,0.760E+2,0.19143000E+1,0.00000000E+0 - ,0.52643720E+3,0.238E+3,0.770E+2,0.19143000E+1,0.00000000E+0 - ,0.43510780E+3,0.238E+3,0.780E+2,0.19143000E+1,0.00000000E+0 - ,0.40568950E+3,0.238E+3,0.790E+2,0.19143000E+1,0.00000000E+0 - ,0.41649740E+3,0.238E+3,0.800E+2,0.19143000E+1,0.00000000E+0 - ,0.62114960E+3,0.238E+3,0.810E+2,0.19143000E+1,0.00000000E+0 - ,0.60248990E+3,0.238E+3,0.820E+2,0.19143000E+1,0.00000000E+0 - ,0.54855160E+3,0.238E+3,0.830E+2,0.19143000E+1,0.00000000E+0 - ,0.52038560E+3,0.238E+3,0.840E+2,0.19143000E+1,0.00000000E+0 - ,0.47718560E+3,0.238E+3,0.850E+2,0.19143000E+1,0.00000000E+0 - ,0.43481090E+3,0.238E+3,0.860E+2,0.19143000E+1,0.00000000E+0 - ,0.15749942E+4,0.238E+3,0.870E+2,0.19143000E+1,0.00000000E+0 - ,0.14917535E+4,0.238E+3,0.880E+2,0.19143000E+1,0.00000000E+0 - ,0.13062558E+4,0.238E+3,0.890E+2,0.19143000E+1,0.00000000E+0 - ,0.11610723E+4,0.238E+3,0.900E+2,0.19143000E+1,0.00000000E+0 - ,0.11587996E+4,0.238E+3,0.910E+2,0.19143000E+1,0.00000000E+0 - ,0.11217009E+4,0.238E+3,0.920E+2,0.19143000E+1,0.00000000E+0 - ,0.11626290E+4,0.238E+3,0.930E+2,0.19143000E+1,0.00000000E+0 - ,0.11245057E+4,0.238E+3,0.940E+2,0.19143000E+1,0.00000000E+0 - ,0.60189200E+2,0.238E+3,0.101E+3,0.19143000E+1,0.00000000E+0 - ,0.20169000E+3,0.238E+3,0.103E+3,0.19143000E+1,0.98650000E+0 - ,0.25612950E+3,0.238E+3,0.104E+3,0.19143000E+1,0.98080000E+0 - ,0.19164290E+3,0.238E+3,0.105E+3,0.19143000E+1,0.97060000E+0 - ,0.14261130E+3,0.238E+3,0.106E+3,0.19143000E+1,0.98680000E+0 - ,0.97808500E+2,0.238E+3,0.107E+3,0.19143000E+1,0.99440000E+0 - ,0.70428500E+2,0.238E+3,0.108E+3,0.19143000E+1,0.99250000E+0 - ,0.47741100E+2,0.238E+3,0.109E+3,0.19143000E+1,0.99820000E+0 - ,0.29600050E+3,0.238E+3,0.111E+3,0.19143000E+1,0.96840000E+0 - ,0.45880010E+3,0.238E+3,0.112E+3,0.19143000E+1,0.96280000E+0 - ,0.45973700E+3,0.238E+3,0.113E+3,0.19143000E+1,0.96480000E+0 - ,0.36358720E+3,0.238E+3,0.114E+3,0.19143000E+1,0.95070000E+0 - ,0.29421340E+3,0.238E+3,0.115E+3,0.19143000E+1,0.99470000E+0 - ,0.24672930E+3,0.238E+3,0.116E+3,0.19143000E+1,0.99480000E+0 - ,0.19993530E+3,0.238E+3,0.117E+3,0.19143000E+1,0.99720000E+0 - ,0.40435370E+3,0.238E+3,0.119E+3,0.19143000E+1,0.97670000E+0 - ,0.79454790E+3,0.238E+3,0.120E+3,0.19143000E+1,0.98310000E+0 - ,0.39932770E+3,0.238E+3,0.121E+3,0.19143000E+1,0.18627000E+1 - ,0.38527560E+3,0.238E+3,0.122E+3,0.19143000E+1,0.18299000E+1 - ,0.37765080E+3,0.238E+3,0.123E+3,0.19143000E+1,0.19138000E+1 - ,0.37474370E+3,0.238E+3,0.124E+3,0.19143000E+1,0.18269000E+1 - ,0.34218210E+3,0.238E+3,0.125E+3,0.19143000E+1,0.16406000E+1 - ,0.31593550E+3,0.238E+3,0.126E+3,0.19143000E+1,0.16483000E+1 - ,0.30136140E+3,0.238E+3,0.127E+3,0.19143000E+1,0.17149000E+1 - ,0.29480040E+3,0.238E+3,0.128E+3,0.19143000E+1,0.17937000E+1 - ,0.29297830E+3,0.238E+3,0.129E+3,0.19143000E+1,0.95760000E+0 - ,0.27198180E+3,0.238E+3,0.130E+3,0.19143000E+1,0.19419000E+1 - ,0.45391820E+3,0.238E+3,0.131E+3,0.19143000E+1,0.96010000E+0 - ,0.39376600E+3,0.238E+3,0.132E+3,0.19143000E+1,0.94340000E+0 - ,0.34965980E+3,0.238E+3,0.133E+3,0.19143000E+1,0.98890000E+0 - ,0.31724980E+3,0.238E+3,0.134E+3,0.19143000E+1,0.99010000E+0 - ,0.27746890E+3,0.238E+3,0.135E+3,0.19143000E+1,0.99740000E+0 - ,0.48106050E+3,0.238E+3,0.137E+3,0.19143000E+1,0.97380000E+0 - ,0.96807870E+3,0.238E+3,0.138E+3,0.19143000E+1,0.98010000E+0 - ,0.72518090E+3,0.238E+3,0.139E+3,0.19143000E+1,0.19153000E+1 - ,0.52865740E+3,0.238E+3,0.140E+3,0.19143000E+1,0.19355000E+1 - ,0.53402030E+3,0.238E+3,0.141E+3,0.19143000E+1,0.19545000E+1 - ,0.49651280E+3,0.238E+3,0.142E+3,0.19143000E+1,0.19420000E+1 - ,0.56243130E+3,0.238E+3,0.143E+3,0.19143000E+1,0.16682000E+1 - ,0.42953830E+3,0.238E+3,0.144E+3,0.19143000E+1,0.18584000E+1 - ,0.40150480E+3,0.238E+3,0.145E+3,0.19143000E+1,0.19003000E+1 - ,0.37226120E+3,0.238E+3,0.146E+3,0.19143000E+1,0.18630000E+1 - ,0.36048910E+3,0.238E+3,0.147E+3,0.19143000E+1,0.96790000E+0 - ,0.35460960E+3,0.238E+3,0.148E+3,0.19143000E+1,0.19539000E+1 - ,0.57628960E+3,0.238E+3,0.149E+3,0.19143000E+1,0.96330000E+0 - ,0.51576060E+3,0.238E+3,0.150E+3,0.19143000E+1,0.95140000E+0 - ,0.47938630E+3,0.238E+3,0.151E+3,0.19143000E+1,0.97490000E+0 - ,0.45112580E+3,0.238E+3,0.152E+3,0.19143000E+1,0.98110000E+0 - ,0.40947120E+3,0.238E+3,0.153E+3,0.19143000E+1,0.99680000E+0 - ,0.56434540E+3,0.238E+3,0.155E+3,0.19143000E+1,0.99090000E+0 - ,0.12601619E+4,0.238E+3,0.156E+3,0.19143000E+1,0.97970000E+0 - ,0.91944900E+3,0.238E+3,0.157E+3,0.19143000E+1,0.19373000E+1 - ,0.56190760E+3,0.238E+3,0.159E+3,0.19143000E+1,0.29425000E+1 - ,0.55022410E+3,0.238E+3,0.160E+3,0.19143000E+1,0.29455000E+1 - ,0.53249960E+3,0.238E+3,0.161E+3,0.19143000E+1,0.29413000E+1 - ,0.53594970E+3,0.238E+3,0.162E+3,0.19143000E+1,0.29300000E+1 - ,0.51922710E+3,0.238E+3,0.163E+3,0.19143000E+1,0.18286000E+1 - ,0.53962270E+3,0.238E+3,0.164E+3,0.19143000E+1,0.28732000E+1 - ,0.50614540E+3,0.238E+3,0.165E+3,0.19143000E+1,0.29086000E+1 - ,0.51646990E+3,0.238E+3,0.166E+3,0.19143000E+1,0.28965000E+1 - ,0.47978110E+3,0.238E+3,0.167E+3,0.19143000E+1,0.29242000E+1 - ,0.46587230E+3,0.238E+3,0.168E+3,0.19143000E+1,0.29282000E+1 - ,0.46307400E+3,0.238E+3,0.169E+3,0.19143000E+1,0.29246000E+1 - ,0.48786280E+3,0.238E+3,0.170E+3,0.19143000E+1,0.28482000E+1 - ,0.44725110E+3,0.238E+3,0.171E+3,0.19143000E+1,0.29219000E+1 - ,0.61717070E+3,0.238E+3,0.172E+3,0.19143000E+1,0.19254000E+1 - ,0.56919750E+3,0.238E+3,0.173E+3,0.19143000E+1,0.19459000E+1 - ,0.51595990E+3,0.238E+3,0.174E+3,0.19143000E+1,0.19292000E+1 - ,0.52505030E+3,0.238E+3,0.175E+3,0.19143000E+1,0.18104000E+1 - ,0.45276340E+3,0.238E+3,0.176E+3,0.19143000E+1,0.18858000E+1 - ,0.42495970E+3,0.238E+3,0.177E+3,0.19143000E+1,0.18648000E+1 - ,0.40531970E+3,0.238E+3,0.178E+3,0.19143000E+1,0.19188000E+1 - ,0.38754040E+3,0.238E+3,0.179E+3,0.19143000E+1,0.98460000E+0 - ,0.37247490E+3,0.238E+3,0.180E+3,0.19143000E+1,0.19896000E+1 - ,0.61741750E+3,0.238E+3,0.181E+3,0.19143000E+1,0.92670000E+0 - ,0.55680680E+3,0.238E+3,0.182E+3,0.19143000E+1,0.93830000E+0 - ,0.53692140E+3,0.238E+3,0.183E+3,0.19143000E+1,0.98200000E+0 - ,0.52008520E+3,0.238E+3,0.184E+3,0.19143000E+1,0.98150000E+0 - ,0.48293520E+3,0.238E+3,0.185E+3,0.19143000E+1,0.99540000E+0 - ,0.63518450E+3,0.238E+3,0.187E+3,0.19143000E+1,0.97050000E+0 - ,0.12452372E+4,0.238E+3,0.188E+3,0.19143000E+1,0.96620000E+0 - ,0.66511670E+3,0.238E+3,0.189E+3,0.19143000E+1,0.29070000E+1 - ,0.77484830E+3,0.238E+3,0.190E+3,0.19143000E+1,0.28844000E+1 - ,0.69052460E+3,0.238E+3,0.191E+3,0.19143000E+1,0.28738000E+1 - ,0.60568150E+3,0.238E+3,0.192E+3,0.19143000E+1,0.28878000E+1 - ,0.58187050E+3,0.238E+3,0.193E+3,0.19143000E+1,0.29095000E+1 - ,0.71381570E+3,0.238E+3,0.194E+3,0.19143000E+1,0.19209000E+1 - ,0.16346210E+3,0.238E+3,0.204E+3,0.19143000E+1,0.19697000E+1 - ,0.16010980E+3,0.238E+3,0.205E+3,0.19143000E+1,0.19441000E+1 - ,0.11541070E+3,0.238E+3,0.206E+3,0.19143000E+1,0.19985000E+1 - ,0.91672500E+2,0.238E+3,0.207E+3,0.19143000E+1,0.20143000E+1 - ,0.61915900E+2,0.238E+3,0.208E+3,0.19143000E+1,0.19887000E+1 - ,0.29291740E+3,0.238E+3,0.212E+3,0.19143000E+1,0.19496000E+1 - ,0.35455260E+3,0.238E+3,0.213E+3,0.19143000E+1,0.19311000E+1 - ,0.33737570E+3,0.238E+3,0.214E+3,0.19143000E+1,0.19435000E+1 - ,0.29047610E+3,0.238E+3,0.215E+3,0.19143000E+1,0.20102000E+1 - ,0.24169490E+3,0.238E+3,0.216E+3,0.19143000E+1,0.19903000E+1 - ,0.41078570E+3,0.238E+3,0.220E+3,0.19143000E+1,0.19349000E+1 - ,0.39219670E+3,0.238E+3,0.221E+3,0.19143000E+1,0.28999000E+1 - ,0.39682160E+3,0.238E+3,0.222E+3,0.19143000E+1,0.38675000E+1 - ,0.36331250E+3,0.238E+3,0.223E+3,0.19143000E+1,0.29110000E+1 - ,0.27075430E+3,0.238E+3,0.224E+3,0.19143000E+1,0.10619100E+2 - ,0.23012310E+3,0.238E+3,0.225E+3,0.19143000E+1,0.98849000E+1 - ,0.22605370E+3,0.238E+3,0.226E+3,0.19143000E+1,0.91376000E+1 - ,0.26782340E+3,0.238E+3,0.227E+3,0.19143000E+1,0.29263000E+1 - ,0.24873790E+3,0.238E+3,0.228E+3,0.19143000E+1,0.65458000E+1 - ,0.35556210E+3,0.238E+3,0.231E+3,0.19143000E+1,0.19315000E+1 - ,0.37409750E+3,0.238E+3,0.232E+3,0.19143000E+1,0.19447000E+1 - ,0.34006880E+3,0.238E+3,0.233E+3,0.19143000E+1,0.19793000E+1 - ,0.31469330E+3,0.238E+3,0.234E+3,0.19143000E+1,0.19812000E+1 - ,0.49174480E+3,0.238E+3,0.238E+3,0.19143000E+1,0.19143000E+1 - ,0.36054300E+2,0.239E+3,0.100E+1,0.28903000E+1,0.91180000E+0 - ,0.23646200E+2,0.239E+3,0.200E+1,0.28903000E+1,0.00000000E+0 - ,0.56732020E+3,0.239E+3,0.300E+1,0.28903000E+1,0.00000000E+0 - ,0.32691860E+3,0.239E+3,0.400E+1,0.28903000E+1,0.00000000E+0 - ,0.21933470E+3,0.239E+3,0.500E+1,0.28903000E+1,0.00000000E+0 - ,0.14760490E+3,0.239E+3,0.600E+1,0.28903000E+1,0.00000000E+0 - ,0.10284790E+3,0.239E+3,0.700E+1,0.28903000E+1,0.00000000E+0 - ,0.77633500E+2,0.239E+3,0.800E+1,0.28903000E+1,0.00000000E+0 - ,0.58635900E+2,0.239E+3,0.900E+1,0.28903000E+1,0.00000000E+0 - ,0.44975300E+2,0.239E+3,0.100E+2,0.28903000E+1,0.00000000E+0 - ,0.67817260E+3,0.239E+3,0.110E+2,0.28903000E+1,0.00000000E+0 - ,0.52114300E+3,0.239E+3,0.120E+2,0.28903000E+1,0.00000000E+0 - ,0.47968840E+3,0.239E+3,0.130E+2,0.28903000E+1,0.00000000E+0 - ,0.37706390E+3,0.239E+3,0.140E+2,0.28903000E+1,0.00000000E+0 - ,0.29323240E+3,0.239E+3,0.150E+2,0.28903000E+1,0.00000000E+0 - ,0.24282560E+3,0.239E+3,0.160E+2,0.28903000E+1,0.00000000E+0 - ,0.19787960E+3,0.239E+3,0.170E+2,0.28903000E+1,0.00000000E+0 - ,0.16150560E+3,0.239E+3,0.180E+2,0.28903000E+1,0.00000000E+0 - ,0.11105426E+4,0.239E+3,0.190E+2,0.28903000E+1,0.00000000E+0 - ,0.91608550E+3,0.239E+3,0.200E+2,0.28903000E+1,0.00000000E+0 - ,0.75654430E+3,0.239E+3,0.210E+2,0.28903000E+1,0.00000000E+0 - ,0.73005840E+3,0.239E+3,0.220E+2,0.28903000E+1,0.00000000E+0 - ,0.66827290E+3,0.239E+3,0.230E+2,0.28903000E+1,0.00000000E+0 - ,0.52603240E+3,0.239E+3,0.240E+2,0.28903000E+1,0.00000000E+0 - ,0.57500600E+3,0.239E+3,0.250E+2,0.28903000E+1,0.00000000E+0 - ,0.45091200E+3,0.239E+3,0.260E+2,0.28903000E+1,0.00000000E+0 - ,0.47789770E+3,0.239E+3,0.270E+2,0.28903000E+1,0.00000000E+0 - ,0.49251980E+3,0.239E+3,0.280E+2,0.28903000E+1,0.00000000E+0 - ,0.37723750E+3,0.239E+3,0.290E+2,0.28903000E+1,0.00000000E+0 - ,0.38708210E+3,0.239E+3,0.300E+2,0.28903000E+1,0.00000000E+0 - ,0.45890330E+3,0.239E+3,0.310E+2,0.28903000E+1,0.00000000E+0 - ,0.40396460E+3,0.239E+3,0.320E+2,0.28903000E+1,0.00000000E+0 - ,0.34379750E+3,0.239E+3,0.330E+2,0.28903000E+1,0.00000000E+0 - ,0.30797330E+3,0.239E+3,0.340E+2,0.28903000E+1,0.00000000E+0 - ,0.26898800E+3,0.239E+3,0.350E+2,0.28903000E+1,0.00000000E+0 - ,0.23345810E+3,0.239E+3,0.360E+2,0.28903000E+1,0.00000000E+0 - ,0.12441578E+4,0.239E+3,0.370E+2,0.28903000E+1,0.00000000E+0 - ,0.10912408E+4,0.239E+3,0.380E+2,0.28903000E+1,0.00000000E+0 - ,0.95501530E+3,0.239E+3,0.390E+2,0.28903000E+1,0.00000000E+0 - ,0.85765270E+3,0.239E+3,0.400E+2,0.28903000E+1,0.00000000E+0 - ,0.78153770E+3,0.239E+3,0.410E+2,0.28903000E+1,0.00000000E+0 - ,0.60242530E+3,0.239E+3,0.420E+2,0.28903000E+1,0.00000000E+0 - ,0.67255530E+3,0.239E+3,0.430E+2,0.28903000E+1,0.00000000E+0 - ,0.51147220E+3,0.239E+3,0.440E+2,0.28903000E+1,0.00000000E+0 - ,0.55934530E+3,0.239E+3,0.450E+2,0.28903000E+1,0.00000000E+0 - ,0.51843740E+3,0.239E+3,0.460E+2,0.28903000E+1,0.00000000E+0 - ,0.43197050E+3,0.239E+3,0.470E+2,0.28903000E+1,0.00000000E+0 - ,0.45648750E+3,0.239E+3,0.480E+2,0.28903000E+1,0.00000000E+0 - ,0.57380210E+3,0.239E+3,0.490E+2,0.28903000E+1,0.00000000E+0 - ,0.52991860E+3,0.239E+3,0.500E+2,0.28903000E+1,0.00000000E+0 - ,0.47140640E+3,0.239E+3,0.510E+2,0.28903000E+1,0.00000000E+0 - ,0.43680220E+3,0.239E+3,0.520E+2,0.28903000E+1,0.00000000E+0 - ,0.39431850E+3,0.239E+3,0.530E+2,0.28903000E+1,0.00000000E+0 - ,0.35391780E+3,0.239E+3,0.540E+2,0.28903000E+1,0.00000000E+0 - ,0.15153755E+4,0.239E+3,0.550E+2,0.28903000E+1,0.00000000E+0 - ,0.13911764E+4,0.239E+3,0.560E+2,0.28903000E+1,0.00000000E+0 - ,0.12212152E+4,0.239E+3,0.570E+2,0.28903000E+1,0.00000000E+0 - ,0.55696970E+3,0.239E+3,0.580E+2,0.28903000E+1,0.27991000E+1 - ,0.12319890E+4,0.239E+3,0.590E+2,0.28903000E+1,0.00000000E+0 - ,0.11829141E+4,0.239E+3,0.600E+2,0.28903000E+1,0.00000000E+0 - ,0.11532166E+4,0.239E+3,0.610E+2,0.28903000E+1,0.00000000E+0 - ,0.11259127E+4,0.239E+3,0.620E+2,0.28903000E+1,0.00000000E+0 - ,0.11017008E+4,0.239E+3,0.630E+2,0.28903000E+1,0.00000000E+0 - ,0.86500110E+3,0.239E+3,0.640E+2,0.28903000E+1,0.00000000E+0 - ,0.97497080E+3,0.239E+3,0.650E+2,0.28903000E+1,0.00000000E+0 - ,0.94011780E+3,0.239E+3,0.660E+2,0.28903000E+1,0.00000000E+0 - ,0.99351430E+3,0.239E+3,0.670E+2,0.28903000E+1,0.00000000E+0 - ,0.97243020E+3,0.239E+3,0.680E+2,0.28903000E+1,0.00000000E+0 - ,0.95340360E+3,0.239E+3,0.690E+2,0.28903000E+1,0.00000000E+0 - ,0.94232490E+3,0.239E+3,0.700E+2,0.28903000E+1,0.00000000E+0 - ,0.79310590E+3,0.239E+3,0.710E+2,0.28903000E+1,0.00000000E+0 - ,0.77930040E+3,0.239E+3,0.720E+2,0.28903000E+1,0.00000000E+0 - ,0.71047900E+3,0.239E+3,0.730E+2,0.28903000E+1,0.00000000E+0 - ,0.59913420E+3,0.239E+3,0.740E+2,0.28903000E+1,0.00000000E+0 - ,0.60936150E+3,0.239E+3,0.750E+2,0.28903000E+1,0.00000000E+0 - ,0.55168900E+3,0.239E+3,0.760E+2,0.28903000E+1,0.00000000E+0 - ,0.50477160E+3,0.239E+3,0.770E+2,0.28903000E+1,0.00000000E+0 - ,0.41866960E+3,0.239E+3,0.780E+2,0.28903000E+1,0.00000000E+0 - ,0.39091310E+3,0.239E+3,0.790E+2,0.28903000E+1,0.00000000E+0 - ,0.40209420E+3,0.239E+3,0.800E+2,0.28903000E+1,0.00000000E+0 - ,0.58845790E+3,0.239E+3,0.810E+2,0.28903000E+1,0.00000000E+0 - ,0.57489740E+3,0.239E+3,0.820E+2,0.28903000E+1,0.00000000E+0 - ,0.52748310E+3,0.239E+3,0.830E+2,0.28903000E+1,0.00000000E+0 - ,0.50256880E+3,0.239E+3,0.840E+2,0.28903000E+1,0.00000000E+0 - ,0.46316440E+3,0.239E+3,0.850E+2,0.28903000E+1,0.00000000E+0 - ,0.42389390E+3,0.239E+3,0.860E+2,0.28903000E+1,0.00000000E+0 - ,0.14300247E+4,0.239E+3,0.870E+2,0.28903000E+1,0.00000000E+0 - ,0.13749340E+4,0.239E+3,0.880E+2,0.28903000E+1,0.00000000E+0 - ,0.12142860E+4,0.239E+3,0.890E+2,0.28903000E+1,0.00000000E+0 - ,0.10895911E+4,0.239E+3,0.900E+2,0.28903000E+1,0.00000000E+0 - ,0.10821909E+4,0.239E+3,0.910E+2,0.28903000E+1,0.00000000E+0 - ,0.10477793E+4,0.239E+3,0.920E+2,0.28903000E+1,0.00000000E+0 - ,0.10795998E+4,0.239E+3,0.930E+2,0.28903000E+1,0.00000000E+0 - ,0.10453553E+4,0.239E+3,0.940E+2,0.28903000E+1,0.00000000E+0 - ,0.58275500E+2,0.239E+3,0.101E+3,0.28903000E+1,0.00000000E+0 - ,0.18988940E+3,0.239E+3,0.103E+3,0.28903000E+1,0.98650000E+0 - ,0.24200800E+3,0.239E+3,0.104E+3,0.28903000E+1,0.98080000E+0 - ,0.18428470E+3,0.239E+3,0.105E+3,0.28903000E+1,0.97060000E+0 - ,0.13843530E+3,0.239E+3,0.106E+3,0.28903000E+1,0.98680000E+0 - ,0.95889700E+2,0.239E+3,0.107E+3,0.28903000E+1,0.99440000E+0 - ,0.69580600E+2,0.239E+3,0.108E+3,0.28903000E+1,0.99250000E+0 - ,0.47591400E+2,0.239E+3,0.109E+3,0.28903000E+1,0.99820000E+0 - ,0.27757010E+3,0.239E+3,0.111E+3,0.28903000E+1,0.96840000E+0 - ,0.42950590E+3,0.239E+3,0.112E+3,0.28903000E+1,0.96280000E+0 - ,0.43451020E+3,0.239E+3,0.113E+3,0.28903000E+1,0.96480000E+0 - ,0.34831620E+3,0.239E+3,0.114E+3,0.28903000E+1,0.95070000E+0 - ,0.28458190E+3,0.239E+3,0.115E+3,0.28903000E+1,0.99470000E+0 - ,0.24014930E+3,0.239E+3,0.116E+3,0.28903000E+1,0.99480000E+0 - ,0.19582670E+3,0.239E+3,0.117E+3,0.28903000E+1,0.99720000E+0 - ,0.38177780E+3,0.239E+3,0.119E+3,0.28903000E+1,0.97670000E+0 - ,0.73212430E+3,0.239E+3,0.120E+3,0.28903000E+1,0.98310000E+0 - ,0.38147190E+3,0.239E+3,0.121E+3,0.28903000E+1,0.18627000E+1 - ,0.36814810E+3,0.239E+3,0.122E+3,0.28903000E+1,0.18299000E+1 - ,0.36077080E+3,0.239E+3,0.123E+3,0.28903000E+1,0.19138000E+1 - ,0.35748370E+3,0.239E+3,0.124E+3,0.28903000E+1,0.18269000E+1 - ,0.32862230E+3,0.239E+3,0.125E+3,0.28903000E+1,0.16406000E+1 - ,0.30396440E+3,0.239E+3,0.126E+3,0.28903000E+1,0.16483000E+1 - ,0.28991370E+3,0.239E+3,0.127E+3,0.28903000E+1,0.17149000E+1 - ,0.28344240E+3,0.239E+3,0.128E+3,0.28903000E+1,0.17937000E+1 - ,0.28025690E+3,0.239E+3,0.129E+3,0.28903000E+1,0.95760000E+0 - ,0.26257350E+3,0.239E+3,0.130E+3,0.28903000E+1,0.19419000E+1 - ,0.43079250E+3,0.239E+3,0.131E+3,0.28903000E+1,0.96010000E+0 - ,0.37769300E+3,0.239E+3,0.132E+3,0.28903000E+1,0.94340000E+0 - ,0.33790570E+3,0.239E+3,0.133E+3,0.28903000E+1,0.98890000E+0 - ,0.30809200E+3,0.239E+3,0.134E+3,0.28903000E+1,0.99010000E+0 - ,0.27088100E+3,0.239E+3,0.135E+3,0.28903000E+1,0.99740000E+0 - ,0.45524600E+3,0.239E+3,0.137E+3,0.28903000E+1,0.97380000E+0 - ,0.89074400E+3,0.239E+3,0.138E+3,0.28903000E+1,0.98010000E+0 - ,0.67945910E+3,0.239E+3,0.139E+3,0.28903000E+1,0.19153000E+1 - ,0.50443250E+3,0.239E+3,0.140E+3,0.28903000E+1,0.19355000E+1 - ,0.50941810E+3,0.239E+3,0.141E+3,0.28903000E+1,0.19545000E+1 - ,0.47468070E+3,0.239E+3,0.142E+3,0.28903000E+1,0.19420000E+1 - ,0.53297190E+3,0.239E+3,0.143E+3,0.28903000E+1,0.16682000E+1 - ,0.41319030E+3,0.239E+3,0.144E+3,0.28903000E+1,0.18584000E+1 - ,0.38639150E+3,0.239E+3,0.145E+3,0.28903000E+1,0.19003000E+1 - ,0.35861330E+3,0.239E+3,0.146E+3,0.28903000E+1,0.18630000E+1 - ,0.34693600E+3,0.239E+3,0.147E+3,0.28903000E+1,0.96790000E+0 - ,0.34299870E+3,0.239E+3,0.148E+3,0.28903000E+1,0.19539000E+1 - ,0.54666900E+3,0.239E+3,0.149E+3,0.28903000E+1,0.96330000E+0 - ,0.49381290E+3,0.239E+3,0.150E+3,0.28903000E+1,0.95140000E+0 - ,0.46187660E+3,0.239E+3,0.151E+3,0.28903000E+1,0.97490000E+0 - ,0.43645200E+3,0.239E+3,0.152E+3,0.28903000E+1,0.98110000E+0 - ,0.39803820E+3,0.239E+3,0.153E+3,0.28903000E+1,0.99680000E+0 - ,0.53790930E+3,0.239E+3,0.155E+3,0.28903000E+1,0.99090000E+0 - ,0.11549423E+4,0.239E+3,0.156E+3,0.28903000E+1,0.97970000E+0 - ,0.86004650E+3,0.239E+3,0.157E+3,0.28903000E+1,0.19373000E+1 - ,0.54009920E+3,0.239E+3,0.159E+3,0.28903000E+1,0.29425000E+1 - ,0.52891450E+3,0.239E+3,0.160E+3,0.28903000E+1,0.29455000E+1 - ,0.51208670E+3,0.239E+3,0.161E+3,0.28903000E+1,0.29413000E+1 - ,0.51473080E+3,0.239E+3,0.162E+3,0.28903000E+1,0.29300000E+1 - ,0.49650390E+3,0.239E+3,0.163E+3,0.28903000E+1,0.18286000E+1 - ,0.51809120E+3,0.239E+3,0.164E+3,0.28903000E+1,0.28732000E+1 - ,0.48646500E+3,0.239E+3,0.165E+3,0.28903000E+1,0.29086000E+1 - ,0.49519130E+3,0.239E+3,0.166E+3,0.28903000E+1,0.28965000E+1 - ,0.46164810E+3,0.239E+3,0.167E+3,0.28903000E+1,0.29242000E+1 - ,0.44845310E+3,0.239E+3,0.168E+3,0.28903000E+1,0.29282000E+1 - ,0.44561860E+3,0.239E+3,0.169E+3,0.28903000E+1,0.29246000E+1 - ,0.46867840E+3,0.239E+3,0.170E+3,0.28903000E+1,0.28482000E+1 - ,0.43067940E+3,0.239E+3,0.171E+3,0.28903000E+1,0.29219000E+1 - ,0.58521160E+3,0.239E+3,0.172E+3,0.28903000E+1,0.19254000E+1 - ,0.54252680E+3,0.239E+3,0.173E+3,0.28903000E+1,0.19459000E+1 - ,0.49440990E+3,0.239E+3,0.174E+3,0.28903000E+1,0.19292000E+1 - ,0.50071270E+3,0.239E+3,0.175E+3,0.28903000E+1,0.18104000E+1 - ,0.43713590E+3,0.239E+3,0.176E+3,0.28903000E+1,0.18858000E+1 - ,0.41096170E+3,0.239E+3,0.177E+3,0.28903000E+1,0.18648000E+1 - ,0.39233860E+3,0.239E+3,0.178E+3,0.28903000E+1,0.19188000E+1 - ,0.37499560E+3,0.239E+3,0.179E+3,0.28903000E+1,0.98460000E+0 - ,0.36203330E+3,0.239E+3,0.180E+3,0.28903000E+1,0.19896000E+1 - ,0.58648270E+3,0.239E+3,0.181E+3,0.28903000E+1,0.92670000E+0 - ,0.53375820E+3,0.239E+3,0.182E+3,0.28903000E+1,0.93830000E+0 - ,0.51718370E+3,0.239E+3,0.183E+3,0.28903000E+1,0.98200000E+0 - ,0.50262410E+3,0.239E+3,0.184E+3,0.28903000E+1,0.98150000E+0 - ,0.46878500E+3,0.239E+3,0.185E+3,0.28903000E+1,0.99540000E+0 - ,0.60578760E+3,0.239E+3,0.187E+3,0.28903000E+1,0.97050000E+0 - ,0.11481563E+4,0.239E+3,0.188E+3,0.28903000E+1,0.96620000E+0 - ,0.63919770E+3,0.239E+3,0.189E+3,0.28903000E+1,0.29070000E+1 - ,0.73861040E+3,0.239E+3,0.190E+3,0.28903000E+1,0.28844000E+1 - ,0.65977710E+3,0.239E+3,0.191E+3,0.28903000E+1,0.28738000E+1 - ,0.58247220E+3,0.239E+3,0.192E+3,0.28903000E+1,0.28878000E+1 - ,0.56032370E+3,0.239E+3,0.193E+3,0.28903000E+1,0.29095000E+1 - ,0.67595320E+3,0.239E+3,0.194E+3,0.28903000E+1,0.19209000E+1 - ,0.15742770E+3,0.239E+3,0.204E+3,0.28903000E+1,0.19697000E+1 - ,0.15452800E+3,0.239E+3,0.205E+3,0.28903000E+1,0.19441000E+1 - ,0.11266800E+3,0.239E+3,0.206E+3,0.28903000E+1,0.19985000E+1 - ,0.89962600E+2,0.239E+3,0.207E+3,0.28903000E+1,0.20143000E+1 - ,0.61279600E+2,0.239E+3,0.208E+3,0.28903000E+1,0.19887000E+1 - ,0.27968340E+3,0.239E+3,0.212E+3,0.28903000E+1,0.19496000E+1 - ,0.33801530E+3,0.239E+3,0.213E+3,0.28903000E+1,0.19311000E+1 - ,0.32383050E+3,0.239E+3,0.214E+3,0.28903000E+1,0.19435000E+1 - ,0.28074710E+3,0.239E+3,0.215E+3,0.28903000E+1,0.20102000E+1 - ,0.23527170E+3,0.239E+3,0.216E+3,0.28903000E+1,0.19903000E+1 - ,0.39183600E+3,0.239E+3,0.220E+3,0.28903000E+1,0.19349000E+1 - ,0.37616230E+3,0.239E+3,0.221E+3,0.28903000E+1,0.28999000E+1 - ,0.38074190E+3,0.239E+3,0.222E+3,0.28903000E+1,0.38675000E+1 - ,0.34837280E+3,0.239E+3,0.223E+3,0.28903000E+1,0.29110000E+1 - ,0.26170420E+3,0.239E+3,0.224E+3,0.28903000E+1,0.10619100E+2 - ,0.22356370E+3,0.239E+3,0.225E+3,0.28903000E+1,0.98849000E+1 - ,0.21947140E+3,0.239E+3,0.226E+3,0.28903000E+1,0.91376000E+1 - ,0.25791900E+3,0.239E+3,0.227E+3,0.28903000E+1,0.29263000E+1 - ,0.24013260E+3,0.239E+3,0.228E+3,0.28903000E+1,0.65458000E+1 - ,0.34065350E+3,0.239E+3,0.231E+3,0.28903000E+1,0.19315000E+1 - ,0.35942740E+3,0.239E+3,0.232E+3,0.28903000E+1,0.19447000E+1 - ,0.32894310E+3,0.239E+3,0.233E+3,0.28903000E+1,0.19793000E+1 - ,0.30565080E+3,0.239E+3,0.234E+3,0.28903000E+1,0.19812000E+1 - ,0.46926390E+3,0.239E+3,0.238E+3,0.28903000E+1,0.19143000E+1 - ,0.45108450E+3,0.239E+3,0.239E+3,0.28903000E+1,0.28903000E+1 - ,0.36540500E+2,0.240E+3,0.100E+1,0.39106000E+1,0.91180000E+0 - ,0.24088300E+2,0.240E+3,0.200E+1,0.39106000E+1,0.00000000E+0 - ,0.56215830E+3,0.240E+3,0.300E+1,0.39106000E+1,0.00000000E+0 - ,0.32721920E+3,0.240E+3,0.400E+1,0.39106000E+1,0.00000000E+0 - ,0.22083610E+3,0.240E+3,0.500E+1,0.39106000E+1,0.00000000E+0 - ,0.14926580E+3,0.240E+3,0.600E+1,0.39106000E+1,0.00000000E+0 - ,0.10433800E+3,0.240E+3,0.700E+1,0.39106000E+1,0.00000000E+0 - ,0.78933900E+2,0.240E+3,0.800E+1,0.39106000E+1,0.00000000E+0 - ,0.59729900E+2,0.240E+3,0.900E+1,0.39106000E+1,0.00000000E+0 - ,0.45882400E+2,0.240E+3,0.100E+2,0.39106000E+1,0.00000000E+0 - ,0.67243030E+3,0.240E+3,0.110E+2,0.39106000E+1,0.00000000E+0 - ,0.52068680E+3,0.240E+3,0.120E+2,0.39106000E+1,0.00000000E+0 - ,0.48073130E+3,0.240E+3,0.130E+2,0.39106000E+1,0.00000000E+0 - ,0.37942120E+3,0.240E+3,0.140E+2,0.39106000E+1,0.00000000E+0 - ,0.29608060E+3,0.240E+3,0.150E+2,0.39106000E+1,0.00000000E+0 - ,0.24572860E+3,0.240E+3,0.160E+2,0.39106000E+1,0.00000000E+0 - ,0.20066650E+3,0.240E+3,0.170E+2,0.39106000E+1,0.00000000E+0 - ,0.16407610E+3,0.240E+3,0.180E+2,0.39106000E+1,0.00000000E+0 - ,0.10998393E+4,0.240E+3,0.190E+2,0.39106000E+1,0.00000000E+0 - ,0.91252050E+3,0.240E+3,0.200E+2,0.39106000E+1,0.00000000E+0 - ,0.75461820E+3,0.240E+3,0.210E+2,0.39106000E+1,0.00000000E+0 - ,0.72916220E+3,0.240E+3,0.220E+2,0.39106000E+1,0.00000000E+0 - ,0.66796950E+3,0.240E+3,0.230E+2,0.39106000E+1,0.00000000E+0 - ,0.52595350E+3,0.240E+3,0.240E+2,0.39106000E+1,0.00000000E+0 - ,0.57539200E+3,0.240E+3,0.250E+2,0.39106000E+1,0.00000000E+0 - ,0.45141300E+3,0.240E+3,0.260E+2,0.39106000E+1,0.00000000E+0 - ,0.47910890E+3,0.240E+3,0.270E+2,0.39106000E+1,0.00000000E+0 - ,0.49336920E+3,0.240E+3,0.280E+2,0.39106000E+1,0.00000000E+0 - ,0.37799640E+3,0.240E+3,0.290E+2,0.39106000E+1,0.00000000E+0 - ,0.38872950E+3,0.240E+3,0.300E+2,0.39106000E+1,0.00000000E+0 - ,0.46049590E+3,0.240E+3,0.310E+2,0.39106000E+1,0.00000000E+0 - ,0.40661960E+3,0.240E+3,0.320E+2,0.39106000E+1,0.00000000E+0 - ,0.34703710E+3,0.240E+3,0.330E+2,0.39106000E+1,0.00000000E+0 - ,0.31142450E+3,0.240E+3,0.340E+2,0.39106000E+1,0.00000000E+0 - ,0.27249100E+3,0.240E+3,0.350E+2,0.39106000E+1,0.00000000E+0 - ,0.23688550E+3,0.240E+3,0.360E+2,0.39106000E+1,0.00000000E+0 - ,0.12329252E+4,0.240E+3,0.370E+2,0.39106000E+1,0.00000000E+0 - ,0.10868394E+4,0.240E+3,0.380E+2,0.39106000E+1,0.00000000E+0 - ,0.95348210E+3,0.240E+3,0.390E+2,0.39106000E+1,0.00000000E+0 - ,0.85760110E+3,0.240E+3,0.400E+2,0.39106000E+1,0.00000000E+0 - ,0.78230880E+3,0.240E+3,0.410E+2,0.39106000E+1,0.00000000E+0 - ,0.60414750E+3,0.240E+3,0.420E+2,0.39106000E+1,0.00000000E+0 - ,0.67400680E+3,0.240E+3,0.430E+2,0.39106000E+1,0.00000000E+0 - ,0.51361970E+3,0.240E+3,0.440E+2,0.39106000E+1,0.00000000E+0 - ,0.56161690E+3,0.240E+3,0.450E+2,0.39106000E+1,0.00000000E+0 - ,0.52087810E+3,0.240E+3,0.460E+2,0.39106000E+1,0.00000000E+0 - ,0.43392780E+3,0.240E+3,0.470E+2,0.39106000E+1,0.00000000E+0 - ,0.45901640E+3,0.240E+3,0.480E+2,0.39106000E+1,0.00000000E+0 - ,0.57580200E+3,0.240E+3,0.490E+2,0.39106000E+1,0.00000000E+0 - ,0.53307320E+3,0.240E+3,0.500E+2,0.39106000E+1,0.00000000E+0 - ,0.47538210E+3,0.240E+3,0.510E+2,0.39106000E+1,0.00000000E+0 - ,0.44115130E+3,0.240E+3,0.520E+2,0.39106000E+1,0.00000000E+0 - ,0.39888950E+3,0.240E+3,0.530E+2,0.39106000E+1,0.00000000E+0 - ,0.35856750E+3,0.240E+3,0.540E+2,0.39106000E+1,0.00000000E+0 - ,0.15020119E+4,0.240E+3,0.550E+2,0.39106000E+1,0.00000000E+0 - ,0.13846011E+4,0.240E+3,0.560E+2,0.39106000E+1,0.00000000E+0 - ,0.12183604E+4,0.240E+3,0.570E+2,0.39106000E+1,0.00000000E+0 - ,0.56144680E+3,0.240E+3,0.580E+2,0.39106000E+1,0.27991000E+1 - ,0.12271618E+4,0.240E+3,0.590E+2,0.39106000E+1,0.00000000E+0 - ,0.11787222E+4,0.240E+3,0.600E+2,0.39106000E+1,0.00000000E+0 - ,0.11492501E+4,0.240E+3,0.610E+2,0.39106000E+1,0.00000000E+0 - ,0.11221393E+4,0.240E+3,0.620E+2,0.39106000E+1,0.00000000E+0 - ,0.10981031E+4,0.240E+3,0.630E+2,0.39106000E+1,0.00000000E+0 - ,0.86458960E+3,0.240E+3,0.640E+2,0.39106000E+1,0.00000000E+0 - ,0.97085510E+3,0.240E+3,0.650E+2,0.39106000E+1,0.00000000E+0 - ,0.93659920E+3,0.240E+3,0.660E+2,0.39106000E+1,0.00000000E+0 - ,0.99084400E+3,0.240E+3,0.670E+2,0.39106000E+1,0.00000000E+0 - ,0.96987250E+3,0.240E+3,0.680E+2,0.39106000E+1,0.00000000E+0 - ,0.95097990E+3,0.240E+3,0.690E+2,0.39106000E+1,0.00000000E+0 - ,0.93981690E+3,0.240E+3,0.700E+2,0.39106000E+1,0.00000000E+0 - ,0.79250890E+3,0.240E+3,0.710E+2,0.39106000E+1,0.00000000E+0 - ,0.78062700E+3,0.240E+3,0.720E+2,0.39106000E+1,0.00000000E+0 - ,0.71279020E+3,0.240E+3,0.730E+2,0.39106000E+1,0.00000000E+0 - ,0.60188010E+3,0.240E+3,0.740E+2,0.39106000E+1,0.00000000E+0 - ,0.61249070E+3,0.240E+3,0.750E+2,0.39106000E+1,0.00000000E+0 - ,0.55526090E+3,0.240E+3,0.760E+2,0.39106000E+1,0.00000000E+0 - ,0.50858990E+3,0.240E+3,0.770E+2,0.39106000E+1,0.00000000E+0 - ,0.42235350E+3,0.240E+3,0.780E+2,0.39106000E+1,0.00000000E+0 - ,0.39454210E+3,0.240E+3,0.790E+2,0.39106000E+1,0.00000000E+0 - ,0.40600450E+3,0.240E+3,0.800E+2,0.39106000E+1,0.00000000E+0 - ,0.59097830E+3,0.240E+3,0.810E+2,0.39106000E+1,0.00000000E+0 - ,0.57841880E+3,0.240E+3,0.820E+2,0.39106000E+1,0.00000000E+0 - ,0.53186650E+3,0.240E+3,0.830E+2,0.39106000E+1,0.00000000E+0 - ,0.50739330E+3,0.240E+3,0.840E+2,0.39106000E+1,0.00000000E+0 - ,0.46832900E+3,0.240E+3,0.850E+2,0.39106000E+1,0.00000000E+0 - ,0.42922150E+3,0.240E+3,0.860E+2,0.39106000E+1,0.00000000E+0 - ,0.14201434E+4,0.240E+3,0.870E+2,0.39106000E+1,0.00000000E+0 - ,0.13701849E+4,0.240E+3,0.880E+2,0.39106000E+1,0.00000000E+0 - ,0.12127510E+4,0.240E+3,0.890E+2,0.39106000E+1,0.00000000E+0 - ,0.10910589E+4,0.240E+3,0.900E+2,0.39106000E+1,0.00000000E+0 - ,0.10823309E+4,0.240E+3,0.910E+2,0.39106000E+1,0.00000000E+0 - ,0.10479820E+4,0.240E+3,0.920E+2,0.39106000E+1,0.00000000E+0 - ,0.10780658E+4,0.240E+3,0.930E+2,0.39106000E+1,0.00000000E+0 - ,0.10441684E+4,0.240E+3,0.940E+2,0.39106000E+1,0.00000000E+0 - ,0.58862500E+2,0.240E+3,0.101E+3,0.39106000E+1,0.00000000E+0 - ,0.19022830E+3,0.240E+3,0.103E+3,0.39106000E+1,0.98650000E+0 - ,0.24272640E+3,0.240E+3,0.104E+3,0.39106000E+1,0.98080000E+0 - ,0.18577620E+3,0.240E+3,0.105E+3,0.39106000E+1,0.97060000E+0 - ,0.13998770E+3,0.240E+3,0.106E+3,0.39106000E+1,0.98680000E+0 - ,0.97288100E+2,0.240E+3,0.107E+3,0.39106000E+1,0.99440000E+0 - ,0.70786500E+2,0.240E+3,0.108E+3,0.39106000E+1,0.99250000E+0 - ,0.48576900E+2,0.240E+3,0.109E+3,0.39106000E+1,0.99820000E+0 - ,0.27779360E+3,0.240E+3,0.111E+3,0.39106000E+1,0.96840000E+0 - ,0.42964620E+3,0.240E+3,0.112E+3,0.39106000E+1,0.96280000E+0 - ,0.43578140E+3,0.240E+3,0.113E+3,0.39106000E+1,0.96480000E+0 - ,0.35070760E+3,0.240E+3,0.114E+3,0.39106000E+1,0.95070000E+0 - ,0.28738300E+3,0.240E+3,0.115E+3,0.39106000E+1,0.99470000E+0 - ,0.24300890E+3,0.240E+3,0.116E+3,0.39106000E+1,0.99480000E+0 - ,0.19857750E+3,0.240E+3,0.117E+3,0.39106000E+1,0.99720000E+0 - ,0.38302240E+3,0.240E+3,0.119E+3,0.39106000E+1,0.97670000E+0 - ,0.72962110E+3,0.240E+3,0.120E+3,0.39106000E+1,0.98310000E+0 - ,0.38386450E+3,0.240E+3,0.121E+3,0.39106000E+1,0.18627000E+1 - ,0.37051580E+3,0.240E+3,0.122E+3,0.39106000E+1,0.18299000E+1 - ,0.36307110E+3,0.240E+3,0.123E+3,0.39106000E+1,0.19138000E+1 - ,0.35962670E+3,0.240E+3,0.124E+3,0.39106000E+1,0.18269000E+1 - ,0.33118730E+3,0.240E+3,0.125E+3,0.39106000E+1,0.16406000E+1 - ,0.30651240E+3,0.240E+3,0.126E+3,0.39106000E+1,0.16483000E+1 - ,0.29235140E+3,0.240E+3,0.127E+3,0.39106000E+1,0.17149000E+1 - ,0.28578230E+3,0.240E+3,0.128E+3,0.39106000E+1,0.17937000E+1 - ,0.28217240E+3,0.240E+3,0.129E+3,0.39106000E+1,0.95760000E+0 - ,0.26504020E+3,0.240E+3,0.130E+3,0.39106000E+1,0.19419000E+1 - ,0.43263090E+3,0.240E+3,0.131E+3,0.39106000E+1,0.96010000E+0 - ,0.38045750E+3,0.240E+3,0.132E+3,0.39106000E+1,0.94340000E+0 - ,0.34114820E+3,0.240E+3,0.133E+3,0.39106000E+1,0.98890000E+0 - ,0.31153680E+3,0.240E+3,0.134E+3,0.39106000E+1,0.99010000E+0 - ,0.27438370E+3,0.240E+3,0.135E+3,0.39106000E+1,0.99740000E+0 - ,0.45707170E+3,0.240E+3,0.137E+3,0.39106000E+1,0.97380000E+0 - ,0.88748100E+3,0.240E+3,0.138E+3,0.39106000E+1,0.98010000E+0 - ,0.68026830E+3,0.240E+3,0.139E+3,0.39106000E+1,0.19153000E+1 - ,0.50752160E+3,0.240E+3,0.140E+3,0.39106000E+1,0.19355000E+1 - ,0.51249950E+3,0.240E+3,0.141E+3,0.39106000E+1,0.19545000E+1 - ,0.47788700E+3,0.240E+3,0.142E+3,0.39106000E+1,0.19420000E+1 - ,0.53531530E+3,0.240E+3,0.143E+3,0.39106000E+1,0.16682000E+1 - ,0.41671520E+3,0.240E+3,0.144E+3,0.39106000E+1,0.18584000E+1 - ,0.38976730E+3,0.240E+3,0.145E+3,0.39106000E+1,0.19003000E+1 - ,0.36187710E+3,0.240E+3,0.146E+3,0.39106000E+1,0.18630000E+1 - ,0.34999750E+3,0.240E+3,0.147E+3,0.39106000E+1,0.96790000E+0 - ,0.34647920E+3,0.240E+3,0.148E+3,0.39106000E+1,0.19539000E+1 - ,0.54905720E+3,0.240E+3,0.149E+3,0.39106000E+1,0.96330000E+0 - ,0.49724240E+3,0.240E+3,0.150E+3,0.39106000E+1,0.95140000E+0 - ,0.46592890E+3,0.240E+3,0.151E+3,0.39106000E+1,0.97490000E+0 - ,0.44083920E+3,0.240E+3,0.152E+3,0.39106000E+1,0.98110000E+0 - ,0.40264130E+3,0.240E+3,0.153E+3,0.39106000E+1,0.99680000E+0 - ,0.54112590E+3,0.240E+3,0.155E+3,0.39106000E+1,0.99090000E+0 - ,0.11497163E+4,0.240E+3,0.156E+3,0.39106000E+1,0.97970000E+0 - ,0.86075030E+3,0.240E+3,0.157E+3,0.39106000E+1,0.19373000E+1 - ,0.54452030E+3,0.240E+3,0.159E+3,0.39106000E+1,0.29425000E+1 - ,0.53325740E+3,0.240E+3,0.160E+3,0.39106000E+1,0.29455000E+1 - ,0.51635730E+3,0.240E+3,0.161E+3,0.39106000E+1,0.29413000E+1 - ,0.51883450E+3,0.240E+3,0.162E+3,0.39106000E+1,0.29300000E+1 - ,0.49986370E+3,0.240E+3,0.163E+3,0.39106000E+1,0.18286000E+1 - ,0.52215120E+3,0.240E+3,0.164E+3,0.39106000E+1,0.28732000E+1 - ,0.49043320E+3,0.240E+3,0.165E+3,0.39106000E+1,0.29086000E+1 - ,0.49890510E+3,0.240E+3,0.166E+3,0.39106000E+1,0.28965000E+1 - ,0.46555960E+3,0.240E+3,0.167E+3,0.39106000E+1,0.29242000E+1 - ,0.45230680E+3,0.240E+3,0.168E+3,0.39106000E+1,0.29282000E+1 - ,0.44940350E+3,0.240E+3,0.169E+3,0.39106000E+1,0.29246000E+1 - ,0.47239670E+3,0.240E+3,0.170E+3,0.39106000E+1,0.28482000E+1 - ,0.43441480E+3,0.240E+3,0.171E+3,0.39106000E+1,0.29219000E+1 - ,0.58778890E+3,0.240E+3,0.172E+3,0.39106000E+1,0.19254000E+1 - ,0.54572750E+3,0.240E+3,0.173E+3,0.39106000E+1,0.19459000E+1 - ,0.49809170E+3,0.240E+3,0.174E+3,0.39106000E+1,0.19292000E+1 - ,0.50376490E+3,0.240E+3,0.175E+3,0.39106000E+1,0.18104000E+1 - ,0.44135260E+3,0.240E+3,0.176E+3,0.39106000E+1,0.18858000E+1 - ,0.41515170E+3,0.240E+3,0.177E+3,0.39106000E+1,0.18648000E+1 - ,0.39646860E+3,0.240E+3,0.178E+3,0.39106000E+1,0.19188000E+1 - ,0.37893340E+3,0.240E+3,0.179E+3,0.39106000E+1,0.98460000E+0 - ,0.36628550E+3,0.240E+3,0.180E+3,0.39106000E+1,0.19896000E+1 - ,0.58938990E+3,0.240E+3,0.181E+3,0.39106000E+1,0.92670000E+0 - ,0.53773400E+3,0.240E+3,0.182E+3,0.39106000E+1,0.93830000E+0 - ,0.52173760E+3,0.240E+3,0.183E+3,0.39106000E+1,0.98200000E+0 - ,0.50754760E+3,0.240E+3,0.184E+3,0.39106000E+1,0.98150000E+0 - ,0.47401940E+3,0.240E+3,0.185E+3,0.39106000E+1,0.99540000E+0 - ,0.60950110E+3,0.240E+3,0.187E+3,0.39106000E+1,0.97050000E+0 - ,0.11447357E+4,0.240E+3,0.188E+3,0.39106000E+1,0.96620000E+0 - ,0.64438060E+3,0.240E+3,0.189E+3,0.39106000E+1,0.29070000E+1 - ,0.74302780E+3,0.240E+3,0.190E+3,0.39106000E+1,0.28844000E+1 - ,0.66426180E+3,0.240E+3,0.191E+3,0.39106000E+1,0.28738000E+1 - ,0.58740530E+3,0.240E+3,0.192E+3,0.39106000E+1,0.28878000E+1 - ,0.56528300E+3,0.240E+3,0.193E+3,0.39106000E+1,0.29095000E+1 - ,0.67885160E+3,0.240E+3,0.194E+3,0.39106000E+1,0.19209000E+1 - ,0.15874420E+3,0.240E+3,0.204E+3,0.39106000E+1,0.19697000E+1 - ,0.15597060E+3,0.240E+3,0.205E+3,0.39106000E+1,0.19441000E+1 - ,0.11413350E+3,0.240E+3,0.206E+3,0.39106000E+1,0.19985000E+1 - ,0.91307200E+2,0.240E+3,0.207E+3,0.39106000E+1,0.20143000E+1 - ,0.62389300E+2,0.240E+3,0.208E+3,0.39106000E+1,0.19887000E+1 - ,0.28129500E+3,0.240E+3,0.212E+3,0.39106000E+1,0.19496000E+1 - ,0.33986220E+3,0.240E+3,0.213E+3,0.39106000E+1,0.19311000E+1 - ,0.32624310E+3,0.240E+3,0.214E+3,0.39106000E+1,0.19435000E+1 - ,0.28345370E+3,0.240E+3,0.215E+3,0.39106000E+1,0.20102000E+1 - ,0.23808430E+3,0.240E+3,0.216E+3,0.39106000E+1,0.19903000E+1 - ,0.39411100E+3,0.240E+3,0.220E+3,0.39106000E+1,0.19349000E+1 - ,0.37893950E+3,0.240E+3,0.221E+3,0.39106000E+1,0.28999000E+1 - ,0.38359990E+3,0.240E+3,0.222E+3,0.39106000E+1,0.38675000E+1 - ,0.35096590E+3,0.240E+3,0.223E+3,0.39106000E+1,0.29110000E+1 - ,0.26433470E+3,0.240E+3,0.224E+3,0.39106000E+1,0.10619100E+2 - ,0.22616840E+3,0.240E+3,0.225E+3,0.39106000E+1,0.98849000E+1 - ,0.22198580E+3,0.240E+3,0.226E+3,0.39106000E+1,0.91376000E+1 - ,0.26021080E+3,0.240E+3,0.227E+3,0.39106000E+1,0.29263000E+1 - ,0.24244220E+3,0.240E+3,0.228E+3,0.39106000E+1,0.65458000E+1 - ,0.34305200E+3,0.240E+3,0.231E+3,0.39106000E+1,0.19315000E+1 - ,0.36224070E+3,0.240E+3,0.232E+3,0.39106000E+1,0.19447000E+1 - ,0.33219680E+3,0.240E+3,0.233E+3,0.39106000E+1,0.19793000E+1 - ,0.30908380E+3,0.240E+3,0.234E+3,0.39106000E+1,0.19812000E+1 - ,0.47210810E+3,0.240E+3,0.238E+3,0.39106000E+1,0.19143000E+1 - ,0.45473560E+3,0.240E+3,0.239E+3,0.39106000E+1,0.28903000E+1 - ,0.45868960E+3,0.240E+3,0.240E+3,0.39106000E+1,0.39106000E+1 - ,0.35315200E+2,0.241E+3,0.100E+1,0.29225000E+1,0.91180000E+0 - ,0.23359200E+2,0.241E+3,0.200E+1,0.29225000E+1,0.00000000E+0 - ,0.54961140E+3,0.241E+3,0.300E+1,0.29225000E+1,0.00000000E+0 - ,0.31671620E+3,0.241E+3,0.400E+1,0.29225000E+1,0.00000000E+0 - ,0.21337350E+3,0.241E+3,0.500E+1,0.29225000E+1,0.00000000E+0 - ,0.14425580E+3,0.241E+3,0.600E+1,0.29225000E+1,0.00000000E+0 - ,0.10094600E+3,0.241E+3,0.700E+1,0.29225000E+1,0.00000000E+0 - ,0.76465800E+2,0.241E+3,0.800E+1,0.29225000E+1,0.00000000E+0 - ,0.57946700E+2,0.241E+3,0.900E+1,0.29225000E+1,0.00000000E+0 - ,0.44577600E+2,0.241E+3,0.100E+2,0.29225000E+1,0.00000000E+0 - ,0.65711510E+3,0.241E+3,0.110E+2,0.29225000E+1,0.00000000E+0 - ,0.50467530E+3,0.241E+3,0.120E+2,0.29225000E+1,0.00000000E+0 - ,0.46522590E+3,0.241E+3,0.130E+2,0.29225000E+1,0.00000000E+0 - ,0.36661690E+3,0.241E+3,0.140E+2,0.29225000E+1,0.00000000E+0 - ,0.28599260E+3,0.241E+3,0.150E+2,0.29225000E+1,0.00000000E+0 - ,0.23744480E+3,0.241E+3,0.160E+2,0.29225000E+1,0.00000000E+0 - ,0.19403010E+3,0.241E+3,0.170E+2,0.29225000E+1,0.00000000E+0 - ,0.15879150E+3,0.241E+3,0.180E+2,0.29225000E+1,0.00000000E+0 - ,0.10788336E+4,0.241E+3,0.190E+2,0.29225000E+1,0.00000000E+0 - ,0.88761670E+3,0.241E+3,0.200E+2,0.29225000E+1,0.00000000E+0 - ,0.73301140E+3,0.241E+3,0.210E+2,0.29225000E+1,0.00000000E+0 - ,0.70781110E+3,0.241E+3,0.220E+2,0.29225000E+1,0.00000000E+0 - ,0.64811200E+3,0.241E+3,0.230E+2,0.29225000E+1,0.00000000E+0 - ,0.51073850E+3,0.241E+3,0.240E+2,0.29225000E+1,0.00000000E+0 - ,0.55795140E+3,0.241E+3,0.250E+2,0.29225000E+1,0.00000000E+0 - ,0.43806030E+3,0.241E+3,0.260E+2,0.29225000E+1,0.00000000E+0 - ,0.46406680E+3,0.241E+3,0.270E+2,0.29225000E+1,0.00000000E+0 - ,0.47803720E+3,0.241E+3,0.280E+2,0.29225000E+1,0.00000000E+0 - ,0.36666480E+3,0.241E+3,0.290E+2,0.29225000E+1,0.00000000E+0 - ,0.37623990E+3,0.241E+3,0.300E+2,0.29225000E+1,0.00000000E+0 - ,0.44572790E+3,0.241E+3,0.310E+2,0.29225000E+1,0.00000000E+0 - ,0.39303660E+3,0.241E+3,0.320E+2,0.29225000E+1,0.00000000E+0 - ,0.33529210E+3,0.241E+3,0.330E+2,0.29225000E+1,0.00000000E+0 - ,0.30092580E+3,0.241E+3,0.340E+2,0.29225000E+1,0.00000000E+0 - ,0.26340340E+3,0.241E+3,0.350E+2,0.29225000E+1,0.00000000E+0 - ,0.22911910E+3,0.241E+3,0.360E+2,0.29225000E+1,0.00000000E+0 - ,0.12092081E+4,0.241E+3,0.370E+2,0.29225000E+1,0.00000000E+0 - ,0.10578748E+4,0.241E+3,0.380E+2,0.29225000E+1,0.00000000E+0 - ,0.92614390E+3,0.241E+3,0.390E+2,0.29225000E+1,0.00000000E+0 - ,0.83217430E+3,0.241E+3,0.400E+2,0.29225000E+1,0.00000000E+0 - ,0.75877890E+3,0.241E+3,0.410E+2,0.29225000E+1,0.00000000E+0 - ,0.58581260E+3,0.241E+3,0.420E+2,0.29225000E+1,0.00000000E+0 - ,0.65360280E+3,0.241E+3,0.430E+2,0.29225000E+1,0.00000000E+0 - ,0.49792860E+3,0.241E+3,0.440E+2,0.29225000E+1,0.00000000E+0 - ,0.54408210E+3,0.241E+3,0.450E+2,0.29225000E+1,0.00000000E+0 - ,0.50450370E+3,0.241E+3,0.460E+2,0.29225000E+1,0.00000000E+0 - ,0.42085520E+3,0.241E+3,0.470E+2,0.29225000E+1,0.00000000E+0 - ,0.44449320E+3,0.241E+3,0.480E+2,0.29225000E+1,0.00000000E+0 - ,0.55793400E+3,0.241E+3,0.490E+2,0.29225000E+1,0.00000000E+0 - ,0.51573740E+3,0.241E+3,0.500E+2,0.29225000E+1,0.00000000E+0 - ,0.45957500E+3,0.241E+3,0.510E+2,0.29225000E+1,0.00000000E+0 - ,0.42642020E+3,0.241E+3,0.520E+2,0.29225000E+1,0.00000000E+0 - ,0.38559230E+3,0.241E+3,0.530E+2,0.29225000E+1,0.00000000E+0 - ,0.34670630E+3,0.241E+3,0.540E+2,0.29225000E+1,0.00000000E+0 - ,0.14737970E+4,0.241E+3,0.550E+2,0.29225000E+1,0.00000000E+0 - ,0.13493970E+4,0.241E+3,0.560E+2,0.29225000E+1,0.00000000E+0 - ,0.11846610E+4,0.241E+3,0.570E+2,0.29225000E+1,0.00000000E+0 - ,0.54305060E+3,0.241E+3,0.580E+2,0.29225000E+1,0.27991000E+1 - ,0.11952654E+4,0.241E+3,0.590E+2,0.29225000E+1,0.00000000E+0 - ,0.11474757E+4,0.241E+3,0.600E+2,0.29225000E+1,0.00000000E+0 - ,0.11186278E+4,0.241E+3,0.610E+2,0.29225000E+1,0.00000000E+0 - ,0.10921025E+4,0.241E+3,0.620E+2,0.29225000E+1,0.00000000E+0 - ,0.10685805E+4,0.241E+3,0.630E+2,0.29225000E+1,0.00000000E+0 - ,0.84000980E+3,0.241E+3,0.640E+2,0.29225000E+1,0.00000000E+0 - ,0.94732140E+3,0.241E+3,0.650E+2,0.29225000E+1,0.00000000E+0 - ,0.91363480E+3,0.241E+3,0.660E+2,0.29225000E+1,0.00000000E+0 - ,0.96355250E+3,0.241E+3,0.670E+2,0.29225000E+1,0.00000000E+0 - ,0.94306260E+3,0.241E+3,0.680E+2,0.29225000E+1,0.00000000E+0 - ,0.92458410E+3,0.241E+3,0.690E+2,0.29225000E+1,0.00000000E+0 - ,0.91377400E+3,0.241E+3,0.700E+2,0.29225000E+1,0.00000000E+0 - ,0.76978010E+3,0.241E+3,0.710E+2,0.29225000E+1,0.00000000E+0 - ,0.75663130E+3,0.241E+3,0.720E+2,0.29225000E+1,0.00000000E+0 - ,0.69039390E+3,0.241E+3,0.730E+2,0.29225000E+1,0.00000000E+0 - ,0.58308880E+3,0.241E+3,0.740E+2,0.29225000E+1,0.00000000E+0 - ,0.59308720E+3,0.241E+3,0.750E+2,0.29225000E+1,0.00000000E+0 - ,0.53746300E+3,0.241E+3,0.760E+2,0.29225000E+1,0.00000000E+0 - ,0.49219170E+3,0.241E+3,0.770E+2,0.29225000E+1,0.00000000E+0 - ,0.40891560E+3,0.241E+3,0.780E+2,0.29225000E+1,0.00000000E+0 - ,0.38205000E+3,0.241E+3,0.790E+2,0.29225000E+1,0.00000000E+0 - ,0.39294050E+3,0.241E+3,0.800E+2,0.29225000E+1,0.00000000E+0 - ,0.57302740E+3,0.241E+3,0.810E+2,0.29225000E+1,0.00000000E+0 - ,0.55997550E+3,0.241E+3,0.820E+2,0.29225000E+1,0.00000000E+0 - ,0.51444520E+3,0.241E+3,0.830E+2,0.29225000E+1,0.00000000E+0 - ,0.49063940E+3,0.241E+3,0.840E+2,0.29225000E+1,0.00000000E+0 - ,0.45281960E+3,0.241E+3,0.850E+2,0.29225000E+1,0.00000000E+0 - ,0.41506050E+3,0.241E+3,0.860E+2,0.29225000E+1,0.00000000E+0 - ,0.13904637E+4,0.241E+3,0.870E+2,0.29225000E+1,0.00000000E+0 - ,0.13339556E+4,0.241E+3,0.880E+2,0.29225000E+1,0.00000000E+0 - ,0.11782143E+4,0.241E+3,0.890E+2,0.29225000E+1,0.00000000E+0 - ,0.10582704E+4,0.241E+3,0.900E+2,0.29225000E+1,0.00000000E+0 - ,0.10511231E+4,0.241E+3,0.910E+2,0.29225000E+1,0.00000000E+0 - ,0.10177328E+4,0.241E+3,0.920E+2,0.29225000E+1,0.00000000E+0 - ,0.10481038E+4,0.241E+3,0.930E+2,0.29225000E+1,0.00000000E+0 - ,0.10148828E+4,0.241E+3,0.940E+2,0.29225000E+1,0.00000000E+0 - ,0.56846600E+2,0.241E+3,0.101E+3,0.29225000E+1,0.00000000E+0 - ,0.18412220E+3,0.241E+3,0.103E+3,0.29225000E+1,0.98650000E+0 - ,0.23495680E+3,0.241E+3,0.104E+3,0.29225000E+1,0.98080000E+0 - ,0.17952910E+3,0.241E+3,0.105E+3,0.29225000E+1,0.97060000E+0 - ,0.13534930E+3,0.241E+3,0.106E+3,0.29225000E+1,0.98680000E+0 - ,0.94163100E+2,0.241E+3,0.107E+3,0.29225000E+1,0.99440000E+0 - ,0.68608700E+2,0.241E+3,0.108E+3,0.29225000E+1,0.99250000E+0 - ,0.47194100E+2,0.241E+3,0.109E+3,0.29225000E+1,0.99820000E+0 - ,0.26917780E+3,0.241E+3,0.111E+3,0.29225000E+1,0.96840000E+0 - ,0.41641830E+3,0.241E+3,0.112E+3,0.29225000E+1,0.96280000E+0 - ,0.42164610E+3,0.241E+3,0.113E+3,0.29225000E+1,0.96480000E+0 - ,0.33887850E+3,0.241E+3,0.114E+3,0.29225000E+1,0.95070000E+0 - ,0.27761880E+3,0.241E+3,0.115E+3,0.29225000E+1,0.99470000E+0 - ,0.23483210E+3,0.241E+3,0.116E+3,0.29225000E+1,0.99480000E+0 - ,0.19201920E+3,0.241E+3,0.117E+3,0.29225000E+1,0.99720000E+0 - ,0.37144330E+3,0.241E+3,0.119E+3,0.29225000E+1,0.97670000E+0 - ,0.71075730E+3,0.241E+3,0.120E+3,0.29225000E+1,0.98310000E+0 - ,0.37132440E+3,0.241E+3,0.121E+3,0.29225000E+1,0.18627000E+1 - ,0.35852320E+3,0.241E+3,0.122E+3,0.29225000E+1,0.18299000E+1 - ,0.35134710E+3,0.241E+3,0.123E+3,0.29225000E+1,0.19138000E+1 - ,0.34810210E+3,0.241E+3,0.124E+3,0.29225000E+1,0.18269000E+1 - ,0.32022560E+3,0.241E+3,0.125E+3,0.29225000E+1,0.16406000E+1 - ,0.29637490E+3,0.241E+3,0.126E+3,0.29225000E+1,0.16483000E+1 - ,0.28273960E+3,0.241E+3,0.127E+3,0.29225000E+1,0.17149000E+1 - ,0.27641130E+3,0.241E+3,0.128E+3,0.29225000E+1,0.17937000E+1 - ,0.27310650E+3,0.241E+3,0.129E+3,0.29225000E+1,0.95760000E+0 - ,0.25621710E+3,0.241E+3,0.130E+3,0.29225000E+1,0.19419000E+1 - ,0.41862090E+3,0.241E+3,0.131E+3,0.29225000E+1,0.96010000E+0 - ,0.36771370E+3,0.241E+3,0.132E+3,0.29225000E+1,0.94340000E+0 - ,0.32961390E+3,0.241E+3,0.133E+3,0.29225000E+1,0.98890000E+0 - ,0.30104260E+3,0.241E+3,0.134E+3,0.29225000E+1,0.99010000E+0 - ,0.26523400E+3,0.241E+3,0.135E+3,0.29225000E+1,0.99740000E+0 - ,0.44326820E+3,0.241E+3,0.137E+3,0.29225000E+1,0.97380000E+0 - ,0.86524620E+3,0.241E+3,0.138E+3,0.29225000E+1,0.98010000E+0 - ,0.66073770E+3,0.241E+3,0.139E+3,0.29225000E+1,0.19153000E+1 - ,0.49130810E+3,0.241E+3,0.140E+3,0.29225000E+1,0.19355000E+1 - ,0.49611270E+3,0.241E+3,0.141E+3,0.29225000E+1,0.19545000E+1 - ,0.46265460E+3,0.241E+3,0.142E+3,0.29225000E+1,0.19420000E+1 - ,0.51908450E+3,0.241E+3,0.143E+3,0.29225000E+1,0.16682000E+1 - ,0.40320320E+3,0.241E+3,0.144E+3,0.29225000E+1,0.18584000E+1 - ,0.37722490E+3,0.241E+3,0.145E+3,0.29225000E+1,0.19003000E+1 - ,0.35029100E+3,0.241E+3,0.146E+3,0.29225000E+1,0.18630000E+1 - ,0.33883350E+3,0.241E+3,0.147E+3,0.29225000E+1,0.96790000E+0 - ,0.33513120E+3,0.241E+3,0.148E+3,0.29225000E+1,0.19539000E+1 - ,0.53177200E+3,0.241E+3,0.149E+3,0.29225000E+1,0.96330000E+0 - ,0.48095640E+3,0.241E+3,0.150E+3,0.29225000E+1,0.95140000E+0 - ,0.45041590E+3,0.241E+3,0.151E+3,0.29225000E+1,0.97490000E+0 - ,0.42611180E+3,0.241E+3,0.152E+3,0.29225000E+1,0.98110000E+0 - ,0.38921120E+3,0.241E+3,0.153E+3,0.29225000E+1,0.99680000E+0 - ,0.52415620E+3,0.241E+3,0.155E+3,0.29225000E+1,0.99090000E+0 - ,0.11227672E+4,0.241E+3,0.156E+3,0.29225000E+1,0.97970000E+0 - ,0.83655040E+3,0.241E+3,0.157E+3,0.29225000E+1,0.19373000E+1 - ,0.52667590E+3,0.241E+3,0.159E+3,0.29225000E+1,0.29425000E+1 - ,0.51577970E+3,0.241E+3,0.160E+3,0.29225000E+1,0.29455000E+1 - ,0.49943430E+3,0.241E+3,0.161E+3,0.29225000E+1,0.29413000E+1 - ,0.50191700E+3,0.241E+3,0.162E+3,0.29225000E+1,0.29300000E+1 - ,0.48385420E+3,0.241E+3,0.163E+3,0.29225000E+1,0.18286000E+1 - ,0.50506200E+3,0.241E+3,0.164E+3,0.29225000E+1,0.28732000E+1 - ,0.47436130E+3,0.241E+3,0.165E+3,0.29225000E+1,0.29086000E+1 - ,0.48273800E+3,0.241E+3,0.166E+3,0.29225000E+1,0.28965000E+1 - ,0.45024130E+3,0.241E+3,0.167E+3,0.29225000E+1,0.29242000E+1 - ,0.43740790E+3,0.241E+3,0.168E+3,0.29225000E+1,0.29282000E+1 - ,0.43460070E+3,0.241E+3,0.169E+3,0.29225000E+1,0.29246000E+1 - ,0.45679920E+3,0.241E+3,0.170E+3,0.29225000E+1,0.28482000E+1 - ,0.42006140E+3,0.241E+3,0.171E+3,0.29225000E+1,0.29219000E+1 - ,0.56959350E+3,0.241E+3,0.172E+3,0.29225000E+1,0.19254000E+1 - ,0.52852650E+3,0.241E+3,0.173E+3,0.29225000E+1,0.19459000E+1 - ,0.48214800E+3,0.241E+3,0.174E+3,0.29225000E+1,0.19292000E+1 - ,0.48793610E+3,0.241E+3,0.175E+3,0.29225000E+1,0.18104000E+1 - ,0.42697730E+3,0.241E+3,0.176E+3,0.29225000E+1,0.18858000E+1 - ,0.40168310E+3,0.241E+3,0.177E+3,0.29225000E+1,0.18648000E+1 - ,0.38365960E+3,0.241E+3,0.178E+3,0.29225000E+1,0.19188000E+1 - ,0.36680700E+3,0.241E+3,0.179E+3,0.29225000E+1,0.98460000E+0 - ,0.35437800E+3,0.241E+3,0.180E+3,0.29225000E+1,0.19896000E+1 - ,0.57113440E+3,0.241E+3,0.181E+3,0.29225000E+1,0.92670000E+0 - ,0.52034420E+3,0.241E+3,0.182E+3,0.29225000E+1,0.93830000E+0 - ,0.50456970E+3,0.241E+3,0.183E+3,0.29225000E+1,0.98200000E+0 - ,0.49075210E+3,0.241E+3,0.184E+3,0.29225000E+1,0.98150000E+0 - ,0.45830100E+3,0.241E+3,0.185E+3,0.29225000E+1,0.99540000E+0 - ,0.59030800E+3,0.241E+3,0.187E+3,0.29225000E+1,0.97050000E+0 - ,0.11160377E+4,0.241E+3,0.188E+3,0.29225000E+1,0.96620000E+0 - ,0.62320270E+3,0.241E+3,0.189E+3,0.29225000E+1,0.29070000E+1 - ,0.71978040E+3,0.241E+3,0.190E+3,0.29225000E+1,0.28844000E+1 - ,0.64370980E+3,0.241E+3,0.191E+3,0.29225000E+1,0.28738000E+1 - ,0.56841140E+3,0.241E+3,0.192E+3,0.29225000E+1,0.28878000E+1 - ,0.54692870E+3,0.241E+3,0.193E+3,0.29225000E+1,0.29095000E+1 - ,0.65859550E+3,0.241E+3,0.194E+3,0.29225000E+1,0.19209000E+1 - ,0.15329480E+3,0.241E+3,0.204E+3,0.29225000E+1,0.19697000E+1 - ,0.15076980E+3,0.241E+3,0.205E+3,0.29225000E+1,0.19441000E+1 - ,0.11036390E+3,0.241E+3,0.206E+3,0.29225000E+1,0.19985000E+1 - ,0.88394400E+2,0.241E+3,0.207E+3,0.29225000E+1,0.20143000E+1 - ,0.60521700E+2,0.241E+3,0.208E+3,0.29225000E+1,0.19887000E+1 - ,0.27178760E+3,0.241E+3,0.212E+3,0.29225000E+1,0.19496000E+1 - ,0.32857270E+3,0.241E+3,0.213E+3,0.29225000E+1,0.19311000E+1 - ,0.31520730E+3,0.241E+3,0.214E+3,0.29225000E+1,0.19435000E+1 - ,0.27386490E+3,0.241E+3,0.215E+3,0.29225000E+1,0.20102000E+1 - ,0.23008710E+3,0.241E+3,0.216E+3,0.29225000E+1,0.19903000E+1 - ,0.38125920E+3,0.241E+3,0.220E+3,0.29225000E+1,0.19349000E+1 - ,0.36637160E+3,0.241E+3,0.221E+3,0.29225000E+1,0.28999000E+1 - ,0.37088000E+3,0.241E+3,0.222E+3,0.29225000E+1,0.38675000E+1 - ,0.33949100E+3,0.241E+3,0.223E+3,0.29225000E+1,0.29110000E+1 - ,0.25576580E+3,0.241E+3,0.224E+3,0.29225000E+1,0.10619100E+2 - ,0.21884580E+3,0.241E+3,0.225E+3,0.29225000E+1,0.98849000E+1 - ,0.21480530E+3,0.241E+3,0.226E+3,0.29225000E+1,0.91376000E+1 - ,0.25178560E+3,0.241E+3,0.227E+3,0.29225000E+1,0.29263000E+1 - ,0.23455580E+3,0.241E+3,0.228E+3,0.29225000E+1,0.65458000E+1 - ,0.33167180E+3,0.241E+3,0.231E+3,0.29225000E+1,0.19315000E+1 - ,0.35008010E+3,0.241E+3,0.232E+3,0.29225000E+1,0.19447000E+1 - ,0.32096670E+3,0.241E+3,0.233E+3,0.29225000E+1,0.19793000E+1 - ,0.29868080E+3,0.241E+3,0.234E+3,0.29225000E+1,0.19812000E+1 - ,0.45688220E+3,0.241E+3,0.238E+3,0.29225000E+1,0.19143000E+1 - ,0.43965480E+3,0.241E+3,0.239E+3,0.29225000E+1,0.28903000E+1 - ,0.44341820E+3,0.241E+3,0.240E+3,0.29225000E+1,0.39106000E+1 - ,0.42889620E+3,0.241E+3,0.241E+3,0.29225000E+1,0.29225000E+1 - ,0.31668100E+2,0.242E+3,0.100E+1,0.11055600E+2,0.91180000E+0 - ,0.21351600E+2,0.242E+3,0.200E+1,0.11055600E+2,0.00000000E+0 - ,0.46157510E+3,0.242E+3,0.300E+1,0.11055600E+2,0.00000000E+0 - ,0.27354460E+3,0.242E+3,0.400E+1,0.11055600E+2,0.00000000E+0 - ,0.18746660E+3,0.242E+3,0.500E+1,0.11055600E+2,0.00000000E+0 - ,0.12849780E+3,0.242E+3,0.600E+1,0.11055600E+2,0.00000000E+0 - ,0.90904300E+2,0.242E+3,0.700E+1,0.11055600E+2,0.00000000E+0 - ,0.69418100E+2,0.242E+3,0.800E+1,0.11055600E+2,0.00000000E+0 - ,0.52984500E+2,0.242E+3,0.900E+1,0.11055600E+2,0.00000000E+0 - ,0.41003500E+2,0.242E+3,0.100E+2,0.11055600E+2,0.00000000E+0 - ,0.55303570E+3,0.242E+3,0.110E+2,0.11055600E+2,0.00000000E+0 - ,0.43382780E+3,0.242E+3,0.120E+2,0.11055600E+2,0.00000000E+0 - ,0.40329140E+3,0.242E+3,0.130E+2,0.11055600E+2,0.00000000E+0 - ,0.32151630E+3,0.242E+3,0.140E+2,0.11055600E+2,0.00000000E+0 - ,0.25341230E+3,0.242E+3,0.150E+2,0.11055600E+2,0.00000000E+0 - ,0.21190690E+3,0.242E+3,0.160E+2,0.11055600E+2,0.00000000E+0 - ,0.17439200E+3,0.242E+3,0.170E+2,0.11055600E+2,0.00000000E+0 - ,0.14363890E+3,0.242E+3,0.180E+2,0.11055600E+2,0.00000000E+0 - ,0.90508480E+3,0.242E+3,0.190E+2,0.11055600E+2,0.00000000E+0 - ,0.75708580E+3,0.242E+3,0.200E+2,0.11055600E+2,0.00000000E+0 - ,0.62755600E+3,0.242E+3,0.210E+2,0.11055600E+2,0.00000000E+0 - ,0.60830000E+3,0.242E+3,0.220E+2,0.11055600E+2,0.00000000E+0 - ,0.55823240E+3,0.242E+3,0.230E+2,0.11055600E+2,0.00000000E+0 - ,0.44055160E+3,0.242E+3,0.240E+2,0.11055600E+2,0.00000000E+0 - ,0.48213620E+3,0.242E+3,0.250E+2,0.11055600E+2,0.00000000E+0 - ,0.37926880E+3,0.242E+3,0.260E+2,0.11055600E+2,0.00000000E+0 - ,0.40314840E+3,0.242E+3,0.270E+2,0.11055600E+2,0.00000000E+0 - ,0.41431560E+3,0.242E+3,0.280E+2,0.11055600E+2,0.00000000E+0 - ,0.31832390E+3,0.242E+3,0.290E+2,0.11055600E+2,0.00000000E+0 - ,0.32847070E+3,0.242E+3,0.300E+2,0.11055600E+2,0.00000000E+0 - ,0.38804460E+3,0.242E+3,0.310E+2,0.11055600E+2,0.00000000E+0 - ,0.34515780E+3,0.242E+3,0.320E+2,0.11055600E+2,0.00000000E+0 - ,0.29691650E+3,0.242E+3,0.330E+2,0.11055600E+2,0.00000000E+0 - ,0.26796230E+3,0.242E+3,0.340E+2,0.11055600E+2,0.00000000E+0 - ,0.23592640E+3,0.242E+3,0.350E+2,0.11055600E+2,0.00000000E+0 - ,0.20636370E+3,0.242E+3,0.360E+2,0.11055600E+2,0.00000000E+0 - ,0.10163718E+4,0.242E+3,0.370E+2,0.11055600E+2,0.00000000E+0 - ,0.90210970E+3,0.242E+3,0.380E+2,0.11055600E+2,0.00000000E+0 - ,0.79517640E+3,0.242E+3,0.390E+2,0.11055600E+2,0.00000000E+0 - ,0.71766320E+3,0.242E+3,0.400E+2,0.11055600E+2,0.00000000E+0 - ,0.65637740E+3,0.242E+3,0.410E+2,0.11055600E+2,0.00000000E+0 - ,0.50974240E+3,0.242E+3,0.420E+2,0.11055600E+2,0.00000000E+0 - ,0.56744410E+3,0.242E+3,0.430E+2,0.11055600E+2,0.00000000E+0 - ,0.43508880E+3,0.242E+3,0.440E+2,0.11055600E+2,0.00000000E+0 - ,0.47502730E+3,0.242E+3,0.450E+2,0.11055600E+2,0.00000000E+0 - ,0.44133190E+3,0.242E+3,0.460E+2,0.11055600E+2,0.00000000E+0 - ,0.36828980E+3,0.242E+3,0.470E+2,0.11055600E+2,0.00000000E+0 - ,0.38983000E+3,0.242E+3,0.480E+2,0.11055600E+2,0.00000000E+0 - ,0.48621160E+3,0.242E+3,0.490E+2,0.11055600E+2,0.00000000E+0 - ,0.45246160E+3,0.242E+3,0.500E+2,0.11055600E+2,0.00000000E+0 - ,0.40603120E+3,0.242E+3,0.510E+2,0.11055600E+2,0.00000000E+0 - ,0.37843120E+3,0.242E+3,0.520E+2,0.11055600E+2,0.00000000E+0 - ,0.34390960E+3,0.242E+3,0.530E+2,0.11055600E+2,0.00000000E+0 - ,0.31074420E+3,0.242E+3,0.540E+2,0.11055600E+2,0.00000000E+0 - ,0.12391934E+4,0.242E+3,0.550E+2,0.11055600E+2,0.00000000E+0 - ,0.11485106E+4,0.242E+3,0.560E+2,0.11055600E+2,0.00000000E+0 - ,0.10151154E+4,0.242E+3,0.570E+2,0.11055600E+2,0.00000000E+0 - ,0.47942470E+3,0.242E+3,0.580E+2,0.11055600E+2,0.27991000E+1 - ,0.10198084E+4,0.242E+3,0.590E+2,0.11055600E+2,0.00000000E+0 - ,0.98014620E+3,0.242E+3,0.600E+2,0.11055600E+2,0.00000000E+0 - ,0.95578910E+3,0.242E+3,0.610E+2,0.11055600E+2,0.00000000E+0 - ,0.93335430E+3,0.242E+3,0.620E+2,0.11055600E+2,0.00000000E+0 - ,0.91346790E+3,0.242E+3,0.630E+2,0.11055600E+2,0.00000000E+0 - ,0.72393420E+3,0.242E+3,0.640E+2,0.11055600E+2,0.00000000E+0 - ,0.80773280E+3,0.242E+3,0.650E+2,0.11055600E+2,0.00000000E+0 - ,0.77996820E+3,0.242E+3,0.660E+2,0.11055600E+2,0.00000000E+0 - ,0.82502430E+3,0.242E+3,0.670E+2,0.11055600E+2,0.00000000E+0 - ,0.80759920E+3,0.242E+3,0.680E+2,0.11055600E+2,0.00000000E+0 - ,0.79196020E+3,0.242E+3,0.690E+2,0.11055600E+2,0.00000000E+0 - ,0.78241790E+3,0.242E+3,0.700E+2,0.11055600E+2,0.00000000E+0 - ,0.66269770E+3,0.242E+3,0.710E+2,0.11055600E+2,0.00000000E+0 - ,0.65575410E+3,0.242E+3,0.720E+2,0.11055600E+2,0.00000000E+0 - ,0.60105960E+3,0.242E+3,0.730E+2,0.11055600E+2,0.00000000E+0 - ,0.50981570E+3,0.242E+3,0.740E+2,0.11055600E+2,0.00000000E+0 - ,0.51931350E+3,0.242E+3,0.750E+2,0.11055600E+2,0.00000000E+0 - ,0.47249570E+3,0.242E+3,0.760E+2,0.11055600E+2,0.00000000E+0 - ,0.43413160E+3,0.242E+3,0.770E+2,0.11055600E+2,0.00000000E+0 - ,0.36221680E+3,0.242E+3,0.780E+2,0.11055600E+2,0.00000000E+0 - ,0.33898810E+3,0.242E+3,0.790E+2,0.11055600E+2,0.00000000E+0 - ,0.34897520E+3,0.242E+3,0.800E+2,0.11055600E+2,0.00000000E+0 - ,0.50083330E+3,0.242E+3,0.810E+2,0.11055600E+2,0.00000000E+0 - ,0.49181440E+3,0.242E+3,0.820E+2,0.11055600E+2,0.00000000E+0 - ,0.45457810E+3,0.242E+3,0.830E+2,0.11055600E+2,0.00000000E+0 - ,0.43514050E+3,0.242E+3,0.840E+2,0.11055600E+2,0.00000000E+0 - ,0.40344890E+3,0.242E+3,0.850E+2,0.11055600E+2,0.00000000E+0 - ,0.37142770E+3,0.242E+3,0.860E+2,0.11055600E+2,0.00000000E+0 - ,0.11758873E+4,0.242E+3,0.870E+2,0.11055600E+2,0.00000000E+0 - ,0.11395556E+4,0.242E+3,0.880E+2,0.11055600E+2,0.00000000E+0 - ,0.10127341E+4,0.242E+3,0.890E+2,0.11055600E+2,0.00000000E+0 - ,0.91652630E+3,0.242E+3,0.900E+2,0.11055600E+2,0.00000000E+0 - ,0.90743040E+3,0.242E+3,0.910E+2,0.11055600E+2,0.00000000E+0 - ,0.87883040E+3,0.242E+3,0.920E+2,0.11055600E+2,0.00000000E+0 - ,0.90104700E+3,0.242E+3,0.930E+2,0.11055600E+2,0.00000000E+0 - ,0.87318690E+3,0.242E+3,0.940E+2,0.11055600E+2,0.00000000E+0 - ,0.50417300E+2,0.242E+3,0.101E+3,0.11055600E+2,0.00000000E+0 - ,0.15944040E+3,0.242E+3,0.103E+3,0.11055600E+2,0.98650000E+0 - ,0.20415190E+3,0.242E+3,0.104E+3,0.11055600E+2,0.98080000E+0 - ,0.15835630E+3,0.242E+3,0.105E+3,0.11055600E+2,0.97060000E+0 - ,0.12059460E+3,0.242E+3,0.106E+3,0.11055600E+2,0.98680000E+0 - ,0.84858200E+2,0.242E+3,0.107E+3,0.11055600E+2,0.99440000E+0 - ,0.62432400E+2,0.242E+3,0.108E+3,0.11055600E+2,0.99250000E+0 - ,0.43476000E+2,0.242E+3,0.109E+3,0.11055600E+2,0.99820000E+0 - ,0.23259320E+3,0.242E+3,0.111E+3,0.11055600E+2,0.96840000E+0 - ,0.35918880E+3,0.242E+3,0.112E+3,0.11055600E+2,0.96280000E+0 - ,0.36631710E+3,0.242E+3,0.113E+3,0.11055600E+2,0.96480000E+0 - ,0.29774360E+3,0.242E+3,0.114E+3,0.11055600E+2,0.95070000E+0 - ,0.24610860E+3,0.242E+3,0.115E+3,0.11055600E+2,0.99470000E+0 - ,0.20955990E+3,0.242E+3,0.116E+3,0.11055600E+2,0.99480000E+0 - ,0.17257580E+3,0.242E+3,0.117E+3,0.11055600E+2,0.99720000E+0 - ,0.32363810E+3,0.242E+3,0.119E+3,0.11055600E+2,0.97670000E+0 - ,0.60709190E+3,0.242E+3,0.120E+3,0.11055600E+2,0.98310000E+0 - ,0.32607870E+3,0.242E+3,0.121E+3,0.11055600E+2,0.18627000E+1 - ,0.31499830E+3,0.242E+3,0.122E+3,0.11055600E+2,0.18299000E+1 - ,0.30868010E+3,0.242E+3,0.123E+3,0.11055600E+2,0.19138000E+1 - ,0.30552730E+3,0.242E+3,0.124E+3,0.11055600E+2,0.18269000E+1 - ,0.28243340E+3,0.242E+3,0.125E+3,0.11055600E+2,0.16406000E+1 - ,0.26186300E+3,0.242E+3,0.126E+3,0.11055600E+2,0.16483000E+1 - ,0.24986950E+3,0.242E+3,0.127E+3,0.11055600E+2,0.17149000E+1 - ,0.24418470E+3,0.242E+3,0.128E+3,0.11055600E+2,0.17937000E+1 - ,0.24036730E+3,0.242E+3,0.129E+3,0.11055600E+2,0.95760000E+0 - ,0.22704050E+3,0.242E+3,0.130E+3,0.11055600E+2,0.19419000E+1 - ,0.36528020E+3,0.242E+3,0.131E+3,0.11055600E+2,0.96010000E+0 - ,0.32362930E+3,0.242E+3,0.132E+3,0.11055600E+2,0.94340000E+0 - ,0.29204750E+3,0.242E+3,0.133E+3,0.11055600E+2,0.98890000E+0 - ,0.26805260E+3,0.242E+3,0.134E+3,0.11055600E+2,0.99010000E+0 - ,0.23750190E+3,0.242E+3,0.135E+3,0.11055600E+2,0.99740000E+0 - ,0.38712360E+3,0.242E+3,0.137E+3,0.11055600E+2,0.97380000E+0 - ,0.73864010E+3,0.242E+3,0.138E+3,0.11055600E+2,0.98010000E+0 - ,0.57185300E+3,0.242E+3,0.139E+3,0.11055600E+2,0.19153000E+1 - ,0.43135120E+3,0.242E+3,0.140E+3,0.11055600E+2,0.19355000E+1 - ,0.43556920E+3,0.242E+3,0.141E+3,0.11055600E+2,0.19545000E+1 - ,0.40706590E+3,0.242E+3,0.142E+3,0.11055600E+2,0.19420000E+1 - ,0.45371970E+3,0.242E+3,0.143E+3,0.11055600E+2,0.16682000E+1 - ,0.35663380E+3,0.242E+3,0.144E+3,0.11055600E+2,0.18584000E+1 - ,0.33393870E+3,0.242E+3,0.145E+3,0.11055600E+2,0.19003000E+1 - ,0.31050050E+3,0.242E+3,0.146E+3,0.11055600E+2,0.18630000E+1 - ,0.30014930E+3,0.242E+3,0.147E+3,0.11055600E+2,0.96790000E+0 - ,0.29784780E+3,0.242E+3,0.148E+3,0.11055600E+2,0.19539000E+1 - ,0.46456790E+3,0.242E+3,0.149E+3,0.11055600E+2,0.96330000E+0 - ,0.42315700E+3,0.242E+3,0.150E+3,0.11055600E+2,0.95140000E+0 - ,0.39833180E+3,0.242E+3,0.151E+3,0.11055600E+2,0.97490000E+0 - ,0.37825790E+3,0.242E+3,0.152E+3,0.11055600E+2,0.98110000E+0 - ,0.34710000E+3,0.242E+3,0.153E+3,0.11055600E+2,0.99680000E+0 - ,0.46012630E+3,0.242E+3,0.155E+3,0.11055600E+2,0.99090000E+0 - ,0.95602290E+3,0.242E+3,0.156E+3,0.11055600E+2,0.97970000E+0 - ,0.72324370E+3,0.242E+3,0.157E+3,0.11055600E+2,0.19373000E+1 - ,0.46518180E+3,0.242E+3,0.159E+3,0.11055600E+2,0.29425000E+1 - ,0.45559950E+3,0.242E+3,0.160E+3,0.11055600E+2,0.29455000E+1 - ,0.44133640E+3,0.242E+3,0.161E+3,0.11055600E+2,0.29413000E+1 - ,0.44305470E+3,0.242E+3,0.162E+3,0.11055600E+2,0.29300000E+1 - ,0.42578150E+3,0.242E+3,0.163E+3,0.11055600E+2,0.18286000E+1 - ,0.44561250E+3,0.242E+3,0.164E+3,0.11055600E+2,0.28732000E+1 - ,0.41895420E+3,0.242E+3,0.165E+3,0.11055600E+2,0.29086000E+1 - ,0.42555500E+3,0.242E+3,0.166E+3,0.11055600E+2,0.28965000E+1 - ,0.39799830E+3,0.242E+3,0.167E+3,0.11055600E+2,0.29242000E+1 - ,0.38678540E+3,0.242E+3,0.168E+3,0.11055600E+2,0.29282000E+1 - ,0.38418230E+3,0.242E+3,0.169E+3,0.11055600E+2,0.29246000E+1 - ,0.40306860E+3,0.242E+3,0.170E+3,0.11055600E+2,0.28482000E+1 - ,0.37150160E+3,0.242E+3,0.171E+3,0.11055600E+2,0.29219000E+1 - ,0.49758720E+3,0.242E+3,0.172E+3,0.11055600E+2,0.19254000E+1 - ,0.46378430E+3,0.242E+3,0.173E+3,0.11055600E+2,0.19459000E+1 - ,0.42506300E+3,0.242E+3,0.174E+3,0.11055600E+2,0.19292000E+1 - ,0.42853830E+3,0.242E+3,0.175E+3,0.11055600E+2,0.18104000E+1 - ,0.37888850E+3,0.242E+3,0.176E+3,0.11055600E+2,0.18858000E+1 - ,0.35711560E+3,0.242E+3,0.177E+3,0.11055600E+2,0.18648000E+1 - ,0.34149670E+3,0.242E+3,0.178E+3,0.11055600E+2,0.19188000E+1 - ,0.32657380E+3,0.242E+3,0.179E+3,0.11055600E+2,0.98460000E+0 - ,0.31656330E+3,0.242E+3,0.180E+3,0.11055600E+2,0.19896000E+1 - ,0.50005880E+3,0.242E+3,0.181E+3,0.11055600E+2,0.92670000E+0 - ,0.45872390E+3,0.242E+3,0.182E+3,0.11055600E+2,0.93830000E+0 - ,0.44646550E+3,0.242E+3,0.183E+3,0.11055600E+2,0.98200000E+0 - ,0.43546460E+3,0.242E+3,0.184E+3,0.11055600E+2,0.98150000E+0 - ,0.40832830E+3,0.242E+3,0.185E+3,0.11055600E+2,0.99540000E+0 - ,0.51837750E+3,0.242E+3,0.187E+3,0.11055600E+2,0.97050000E+0 - ,0.95463010E+3,0.242E+3,0.188E+3,0.11055600E+2,0.96620000E+0 - ,0.55025080E+3,0.242E+3,0.189E+3,0.11055600E+2,0.29070000E+1 - ,0.63174190E+3,0.242E+3,0.190E+3,0.11055600E+2,0.28844000E+1 - ,0.56637730E+3,0.242E+3,0.191E+3,0.11055600E+2,0.28738000E+1 - ,0.50265170E+3,0.242E+3,0.192E+3,0.11055600E+2,0.28878000E+1 - ,0.48421620E+3,0.242E+3,0.193E+3,0.11055600E+2,0.29095000E+1 - ,0.57561980E+3,0.242E+3,0.194E+3,0.11055600E+2,0.19209000E+1 - ,0.13524280E+3,0.242E+3,0.204E+3,0.11055600E+2,0.19697000E+1 - ,0.13350900E+3,0.242E+3,0.205E+3,0.11055600E+2,0.19441000E+1 - ,0.98890300E+2,0.242E+3,0.206E+3,0.11055600E+2,0.19985000E+1 - ,0.79767200E+2,0.242E+3,0.207E+3,0.11055600E+2,0.20143000E+1 - ,0.55248400E+2,0.242E+3,0.208E+3,0.11055600E+2,0.19887000E+1 - ,0.23801690E+3,0.242E+3,0.212E+3,0.11055600E+2,0.19496000E+1 - ,0.28752250E+3,0.242E+3,0.213E+3,0.11055600E+2,0.19311000E+1 - ,0.27743120E+3,0.242E+3,0.214E+3,0.11055600E+2,0.19435000E+1 - ,0.24266760E+3,0.242E+3,0.215E+3,0.11055600E+2,0.20102000E+1 - ,0.20536950E+3,0.242E+3,0.216E+3,0.11055600E+2,0.19903000E+1 - ,0.33432060E+3,0.242E+3,0.220E+3,0.11055600E+2,0.19349000E+1 - ,0.32266550E+3,0.242E+3,0.221E+3,0.11055600E+2,0.28999000E+1 - ,0.32676700E+3,0.242E+3,0.222E+3,0.11055600E+2,0.38675000E+1 - ,0.29914950E+3,0.242E+3,0.223E+3,0.11055600E+2,0.29110000E+1 - ,0.22729470E+3,0.242E+3,0.224E+3,0.11055600E+2,0.10619100E+2 - ,0.19544560E+3,0.242E+3,0.225E+3,0.11055600E+2,0.98849000E+1 - ,0.19173330E+3,0.242E+3,0.226E+3,0.11055600E+2,0.91376000E+1 - ,0.22295460E+3,0.242E+3,0.227E+3,0.11055600E+2,0.29263000E+1 - ,0.20815700E+3,0.242E+3,0.228E+3,0.11055600E+2,0.65458000E+1 - ,0.29172410E+3,0.242E+3,0.231E+3,0.11055600E+2,0.19315000E+1 - ,0.30857810E+3,0.242E+3,0.232E+3,0.11055600E+2,0.19447000E+1 - ,0.28464110E+3,0.242E+3,0.233E+3,0.11055600E+2,0.19793000E+1 - ,0.26599860E+3,0.242E+3,0.234E+3,0.11055600E+2,0.19812000E+1 - ,0.40105410E+3,0.242E+3,0.238E+3,0.11055600E+2,0.19143000E+1 - ,0.38807180E+3,0.242E+3,0.239E+3,0.11055600E+2,0.28903000E+1 - ,0.39206550E+3,0.242E+3,0.240E+3,0.11055600E+2,0.39106000E+1 - ,0.37920750E+3,0.242E+3,0.241E+3,0.11055600E+2,0.29225000E+1 - ,0.33710750E+3,0.242E+3,0.242E+3,0.11055600E+2,0.11055600E+2 - ,0.28262700E+2,0.243E+3,0.100E+1,0.95402000E+1,0.91180000E+0 - ,0.19355600E+2,0.243E+3,0.200E+1,0.95402000E+1,0.00000000E+0 - ,0.39142550E+3,0.243E+3,0.300E+1,0.95402000E+1,0.00000000E+0 - ,0.23684570E+3,0.243E+3,0.400E+1,0.95402000E+1,0.00000000E+0 - ,0.16457770E+3,0.243E+3,0.500E+1,0.95402000E+1,0.00000000E+0 - ,0.11407740E+3,0.243E+3,0.600E+1,0.95402000E+1,0.00000000E+0 - ,0.81421700E+2,0.243E+3,0.700E+1,0.95402000E+1,0.00000000E+0 - ,0.62588600E+2,0.243E+3,0.800E+1,0.95402000E+1,0.00000000E+0 - ,0.48054000E+2,0.243E+3,0.900E+1,0.95402000E+1,0.00000000E+0 - ,0.37372300E+2,0.243E+3,0.100E+2,0.95402000E+1,0.00000000E+0 - ,0.46976960E+3,0.243E+3,0.110E+2,0.95402000E+1,0.00000000E+0 - ,0.37426910E+3,0.243E+3,0.120E+2,0.95402000E+1,0.00000000E+0 - ,0.35028040E+3,0.243E+3,0.130E+2,0.95402000E+1,0.00000000E+0 - ,0.28184800E+3,0.243E+3,0.140E+2,0.95402000E+1,0.00000000E+0 - ,0.22400340E+3,0.243E+3,0.150E+2,0.95402000E+1,0.00000000E+0 - ,0.18840440E+3,0.243E+3,0.160E+2,0.95402000E+1,0.00000000E+0 - ,0.15594050E+3,0.243E+3,0.170E+2,0.95402000E+1,0.00000000E+0 - ,0.12911050E+3,0.243E+3,0.180E+2,0.95402000E+1,0.00000000E+0 - ,0.76793390E+3,0.243E+3,0.190E+2,0.95402000E+1,0.00000000E+0 - ,0.64950000E+3,0.243E+3,0.200E+2,0.95402000E+1,0.00000000E+0 - ,0.53986620E+3,0.243E+3,0.210E+2,0.95402000E+1,0.00000000E+0 - ,0.52491730E+3,0.243E+3,0.220E+2,0.95402000E+1,0.00000000E+0 - ,0.48256220E+3,0.243E+3,0.230E+2,0.95402000E+1,0.00000000E+0 - ,0.38140060E+3,0.243E+3,0.240E+2,0.95402000E+1,0.00000000E+0 - ,0.41786140E+3,0.243E+3,0.250E+2,0.95402000E+1,0.00000000E+0 - ,0.32931160E+3,0.243E+3,0.260E+2,0.95402000E+1,0.00000000E+0 - ,0.35085640E+3,0.243E+3,0.270E+2,0.95402000E+1,0.00000000E+0 - ,0.35990170E+3,0.243E+3,0.280E+2,0.95402000E+1,0.00000000E+0 - ,0.27699700E+3,0.243E+3,0.290E+2,0.95402000E+1,0.00000000E+0 - ,0.28699270E+3,0.243E+3,0.300E+2,0.95402000E+1,0.00000000E+0 - ,0.33826270E+3,0.243E+3,0.310E+2,0.95402000E+1,0.00000000E+0 - ,0.30293890E+3,0.243E+3,0.320E+2,0.95402000E+1,0.00000000E+0 - ,0.26234800E+3,0.243E+3,0.330E+2,0.95402000E+1,0.00000000E+0 - ,0.23782350E+3,0.243E+3,0.340E+2,0.95402000E+1,0.00000000E+0 - ,0.21038120E+3,0.243E+3,0.350E+2,0.95402000E+1,0.00000000E+0 - ,0.18484770E+3,0.243E+3,0.360E+2,0.95402000E+1,0.00000000E+0 - ,0.86376550E+3,0.243E+3,0.370E+2,0.95402000E+1,0.00000000E+0 - ,0.77394630E+3,0.243E+3,0.380E+2,0.95402000E+1,0.00000000E+0 - ,0.68574890E+3,0.243E+3,0.390E+2,0.95402000E+1,0.00000000E+0 - ,0.62104380E+3,0.243E+3,0.400E+2,0.95402000E+1,0.00000000E+0 - ,0.56941590E+3,0.243E+3,0.410E+2,0.95402000E+1,0.00000000E+0 - ,0.44434710E+3,0.243E+3,0.420E+2,0.95402000E+1,0.00000000E+0 - ,0.49374300E+3,0.243E+3,0.430E+2,0.95402000E+1,0.00000000E+0 - ,0.38057300E+3,0.243E+3,0.440E+2,0.95402000E+1,0.00000000E+0 - ,0.41514630E+3,0.243E+3,0.450E+2,0.95402000E+1,0.00000000E+0 - ,0.38629860E+3,0.243E+3,0.460E+2,0.95402000E+1,0.00000000E+0 - ,0.32258210E+3,0.243E+3,0.470E+2,0.95402000E+1,0.00000000E+0 - ,0.34192370E+3,0.243E+3,0.480E+2,0.95402000E+1,0.00000000E+0 - ,0.42431450E+3,0.243E+3,0.490E+2,0.95402000E+1,0.00000000E+0 - ,0.39689200E+3,0.243E+3,0.500E+2,0.95402000E+1,0.00000000E+0 - ,0.35815190E+3,0.243E+3,0.510E+2,0.95402000E+1,0.00000000E+0 - ,0.33500590E+3,0.243E+3,0.520E+2,0.95402000E+1,0.00000000E+0 - ,0.30566670E+3,0.243E+3,0.530E+2,0.95402000E+1,0.00000000E+0 - ,0.27727710E+3,0.243E+3,0.540E+2,0.95402000E+1,0.00000000E+0 - ,0.10537818E+4,0.243E+3,0.550E+2,0.95402000E+1,0.00000000E+0 - ,0.98418610E+3,0.243E+3,0.560E+2,0.95402000E+1,0.00000000E+0 - ,0.87424490E+3,0.243E+3,0.570E+2,0.95402000E+1,0.00000000E+0 - ,0.42266280E+3,0.243E+3,0.580E+2,0.95402000E+1,0.27991000E+1 - ,0.87559270E+3,0.243E+3,0.590E+2,0.95402000E+1,0.00000000E+0 - ,0.84216510E+3,0.243E+3,0.600E+2,0.95402000E+1,0.00000000E+0 - ,0.82140430E+3,0.243E+3,0.610E+2,0.95402000E+1,0.00000000E+0 - ,0.80225710E+3,0.243E+3,0.620E+2,0.95402000E+1,0.00000000E+0 - ,0.78528980E+3,0.243E+3,0.630E+2,0.95402000E+1,0.00000000E+0 - ,0.62638240E+3,0.243E+3,0.640E+2,0.95402000E+1,0.00000000E+0 - ,0.69366130E+3,0.243E+3,0.650E+2,0.95402000E+1,0.00000000E+0 - ,0.67051140E+3,0.243E+3,0.660E+2,0.95402000E+1,0.00000000E+0 - ,0.71007710E+3,0.243E+3,0.670E+2,0.95402000E+1,0.00000000E+0 - ,0.69514360E+3,0.243E+3,0.680E+2,0.95402000E+1,0.00000000E+0 - ,0.68179200E+3,0.243E+3,0.690E+2,0.95402000E+1,0.00000000E+0 - ,0.67337970E+3,0.243E+3,0.700E+2,0.95402000E+1,0.00000000E+0 - ,0.57285580E+3,0.243E+3,0.710E+2,0.95402000E+1,0.00000000E+0 - ,0.56966440E+3,0.243E+3,0.720E+2,0.95402000E+1,0.00000000E+0 - ,0.52402130E+3,0.243E+3,0.730E+2,0.95402000E+1,0.00000000E+0 - ,0.44608380E+3,0.243E+3,0.740E+2,0.95402000E+1,0.00000000E+0 - ,0.45488600E+3,0.243E+3,0.750E+2,0.95402000E+1,0.00000000E+0 - ,0.41519500E+3,0.243E+3,0.760E+2,0.95402000E+1,0.00000000E+0 - ,0.38249740E+3,0.243E+3,0.770E+2,0.95402000E+1,0.00000000E+0 - ,0.32027240E+3,0.243E+3,0.780E+2,0.95402000E+1,0.00000000E+0 - ,0.30015390E+3,0.243E+3,0.790E+2,0.95402000E+1,0.00000000E+0 - ,0.30919500E+3,0.243E+3,0.800E+2,0.95402000E+1,0.00000000E+0 - ,0.43822480E+3,0.243E+3,0.810E+2,0.95402000E+1,0.00000000E+0 - ,0.43187000E+3,0.243E+3,0.820E+2,0.95402000E+1,0.00000000E+0 - ,0.40107000E+3,0.243E+3,0.830E+2,0.95402000E+1,0.00000000E+0 - ,0.38504170E+3,0.243E+3,0.840E+2,0.95402000E+1,0.00000000E+0 - ,0.35831060E+3,0.243E+3,0.850E+2,0.95402000E+1,0.00000000E+0 - ,0.33103010E+3,0.243E+3,0.860E+2,0.95402000E+1,0.00000000E+0 - ,0.10040757E+4,0.243E+3,0.870E+2,0.95402000E+1,0.00000000E+0 - ,0.97925300E+3,0.243E+3,0.880E+2,0.95402000E+1,0.00000000E+0 - ,0.87428430E+3,0.243E+3,0.890E+2,0.95402000E+1,0.00000000E+0 - ,0.79590040E+3,0.243E+3,0.900E+2,0.95402000E+1,0.00000000E+0 - ,0.78618960E+3,0.243E+3,0.910E+2,0.95402000E+1,0.00000000E+0 - ,0.76155790E+3,0.243E+3,0.920E+2,0.95402000E+1,0.00000000E+0 - ,0.77812490E+3,0.243E+3,0.930E+2,0.95402000E+1,0.00000000E+0 - ,0.75451690E+3,0.243E+3,0.940E+2,0.95402000E+1,0.00000000E+0 - ,0.44596300E+2,0.243E+3,0.101E+3,0.95402000E+1,0.00000000E+0 - ,0.13836130E+3,0.243E+3,0.103E+3,0.95402000E+1,0.98650000E+0 - ,0.17768370E+3,0.243E+3,0.104E+3,0.95402000E+1,0.98080000E+0 - ,0.13947630E+3,0.243E+3,0.105E+3,0.95402000E+1,0.97060000E+0 - ,0.10709060E+3,0.243E+3,0.106E+3,0.95402000E+1,0.98680000E+0 - ,0.76053200E+2,0.243E+3,0.107E+3,0.95402000E+1,0.99440000E+0 - ,0.56396200E+2,0.243E+3,0.108E+3,0.95402000E+1,0.99250000E+0 - ,0.39666800E+2,0.243E+3,0.109E+3,0.95402000E+1,0.99820000E+0 - ,0.20154030E+3,0.243E+3,0.111E+3,0.95402000E+1,0.96840000E+0 - ,0.31080830E+3,0.243E+3,0.112E+3,0.95402000E+1,0.96280000E+0 - ,0.31873880E+3,0.243E+3,0.113E+3,0.95402000E+1,0.96480000E+0 - ,0.26141050E+3,0.243E+3,0.114E+3,0.95402000E+1,0.95070000E+0 - ,0.21763470E+3,0.243E+3,0.115E+3,0.95402000E+1,0.99470000E+0 - ,0.18630930E+3,0.243E+3,0.116E+3,0.95402000E+1,0.99480000E+0 - ,0.15431180E+3,0.243E+3,0.117E+3,0.95402000E+1,0.99720000E+0 - ,0.28243840E+3,0.243E+3,0.119E+3,0.95402000E+1,0.97670000E+0 - ,0.52184580E+3,0.243E+3,0.120E+3,0.95402000E+1,0.98310000E+0 - ,0.28622410E+3,0.243E+3,0.121E+3,0.95402000E+1,0.18627000E+1 - ,0.27665670E+3,0.243E+3,0.122E+3,0.95402000E+1,0.18299000E+1 - ,0.27110010E+3,0.243E+3,0.123E+3,0.95402000E+1,0.19138000E+1 - ,0.26813250E+3,0.243E+3,0.124E+3,0.95402000E+1,0.18269000E+1 - ,0.24878950E+3,0.243E+3,0.125E+3,0.95402000E+1,0.16406000E+1 - ,0.23100810E+3,0.243E+3,0.126E+3,0.95402000E+1,0.16483000E+1 - ,0.22048020E+3,0.243E+3,0.127E+3,0.95402000E+1,0.17149000E+1 - ,0.21540300E+3,0.243E+3,0.128E+3,0.95402000E+1,0.17937000E+1 - ,0.21142380E+3,0.243E+3,0.129E+3,0.95402000E+1,0.95760000E+0 - ,0.20075620E+3,0.243E+3,0.130E+3,0.95402000E+1,0.19419000E+1 - ,0.31899680E+3,0.243E+3,0.131E+3,0.95402000E+1,0.96010000E+0 - ,0.28455050E+3,0.243E+3,0.132E+3,0.95402000E+1,0.94340000E+0 - ,0.25816170E+3,0.243E+3,0.133E+3,0.95402000E+1,0.98890000E+0 - ,0.23789530E+3,0.243E+3,0.134E+3,0.95402000E+1,0.99010000E+0 - ,0.21174100E+3,0.243E+3,0.135E+3,0.95402000E+1,0.99740000E+0 - ,0.33850140E+3,0.243E+3,0.137E+3,0.95402000E+1,0.97380000E+0 - ,0.63481680E+3,0.243E+3,0.138E+3,0.95402000E+1,0.98010000E+0 - ,0.49663990E+3,0.243E+3,0.139E+3,0.95402000E+1,0.19153000E+1 - ,0.37865110E+3,0.243E+3,0.140E+3,0.95402000E+1,0.19355000E+1 - ,0.38232250E+3,0.243E+3,0.141E+3,0.95402000E+1,0.19545000E+1 - ,0.35796340E+3,0.243E+3,0.142E+3,0.95402000E+1,0.19420000E+1 - ,0.39703670E+3,0.243E+3,0.143E+3,0.95402000E+1,0.16682000E+1 - ,0.31491710E+3,0.243E+3,0.144E+3,0.95402000E+1,0.18584000E+1 - ,0.29510120E+3,0.243E+3,0.145E+3,0.95402000E+1,0.19003000E+1 - ,0.27469180E+3,0.243E+3,0.146E+3,0.95402000E+1,0.18630000E+1 - ,0.26540330E+3,0.243E+3,0.147E+3,0.95402000E+1,0.96790000E+0 - ,0.26402010E+3,0.243E+3,0.148E+3,0.95402000E+1,0.19539000E+1 - ,0.40621170E+3,0.243E+3,0.149E+3,0.95402000E+1,0.96330000E+0 - ,0.37204100E+3,0.243E+3,0.150E+3,0.95402000E+1,0.95140000E+0 - ,0.35163900E+3,0.243E+3,0.151E+3,0.95402000E+1,0.97490000E+0 - ,0.33492300E+3,0.243E+3,0.152E+3,0.95402000E+1,0.98110000E+0 - ,0.30847430E+3,0.243E+3,0.153E+3,0.95402000E+1,0.99680000E+0 - ,0.40390770E+3,0.243E+3,0.155E+3,0.95402000E+1,0.99090000E+0 - ,0.82041740E+3,0.243E+3,0.156E+3,0.95402000E+1,0.97970000E+0 - ,0.62770030E+3,0.243E+3,0.157E+3,0.95402000E+1,0.19373000E+1 - ,0.41025930E+3,0.243E+3,0.159E+3,0.95402000E+1,0.29425000E+1 - ,0.40183710E+3,0.243E+3,0.160E+3,0.95402000E+1,0.29455000E+1 - ,0.38938420E+3,0.243E+3,0.161E+3,0.95402000E+1,0.29413000E+1 - ,0.39058410E+3,0.243E+3,0.162E+3,0.95402000E+1,0.29300000E+1 - ,0.37444730E+3,0.243E+3,0.163E+3,0.95402000E+1,0.18286000E+1 - ,0.39266670E+3,0.243E+3,0.164E+3,0.95402000E+1,0.28732000E+1 - ,0.36947670E+3,0.243E+3,0.165E+3,0.95402000E+1,0.29086000E+1 - ,0.37477260E+3,0.243E+3,0.166E+3,0.95402000E+1,0.28965000E+1 - ,0.35123330E+3,0.243E+3,0.167E+3,0.95402000E+1,0.29242000E+1 - ,0.34142990E+3,0.243E+3,0.168E+3,0.95402000E+1,0.29282000E+1 - ,0.33904640E+3,0.243E+3,0.169E+3,0.95402000E+1,0.29246000E+1 - ,0.35518230E+3,0.243E+3,0.170E+3,0.95402000E+1,0.28482000E+1 - ,0.32797090E+3,0.243E+3,0.171E+3,0.95402000E+1,0.29219000E+1 - ,0.43515580E+3,0.243E+3,0.172E+3,0.95402000E+1,0.19254000E+1 - ,0.40701010E+3,0.243E+3,0.173E+3,0.95402000E+1,0.19459000E+1 - ,0.37438790E+3,0.243E+3,0.174E+3,0.95402000E+1,0.19292000E+1 - ,0.37634630E+3,0.243E+3,0.175E+3,0.95402000E+1,0.18104000E+1 - ,0.33543720E+3,0.243E+3,0.176E+3,0.95402000E+1,0.18858000E+1 - ,0.31664800E+3,0.243E+3,0.177E+3,0.95402000E+1,0.18648000E+1 - ,0.30309840E+3,0.243E+3,0.178E+3,0.95402000E+1,0.19188000E+1 - ,0.28993290E+3,0.243E+3,0.179E+3,0.95402000E+1,0.98460000E+0 - ,0.28176770E+3,0.243E+3,0.180E+3,0.95402000E+1,0.19896000E+1 - ,0.43810480E+3,0.243E+3,0.181E+3,0.95402000E+1,0.92670000E+0 - ,0.40400650E+3,0.243E+3,0.182E+3,0.95402000E+1,0.93830000E+0 - ,0.39433950E+3,0.243E+3,0.183E+3,0.95402000E+1,0.98200000E+0 - ,0.38548280E+3,0.243E+3,0.184E+3,0.95402000E+1,0.98150000E+0 - ,0.36263740E+3,0.243E+3,0.185E+3,0.95402000E+1,0.99540000E+0 - ,0.45515750E+3,0.243E+3,0.187E+3,0.95402000E+1,0.97050000E+0 - ,0.82187390E+3,0.243E+3,0.188E+3,0.95402000E+1,0.96620000E+0 - ,0.48513840E+3,0.243E+3,0.189E+3,0.95402000E+1,0.29070000E+1 - ,0.55458830E+3,0.243E+3,0.190E+3,0.95402000E+1,0.28844000E+1 - ,0.49832020E+3,0.243E+3,0.191E+3,0.95402000E+1,0.28738000E+1 - ,0.44380410E+3,0.243E+3,0.192E+3,0.95402000E+1,0.28878000E+1 - ,0.42790900E+3,0.243E+3,0.193E+3,0.95402000E+1,0.29095000E+1 - ,0.50378650E+3,0.243E+3,0.194E+3,0.95402000E+1,0.19209000E+1 - ,0.11912060E+3,0.243E+3,0.204E+3,0.95402000E+1,0.19697000E+1 - ,0.11797580E+3,0.243E+3,0.205E+3,0.95402000E+1,0.19441000E+1 - ,0.88215800E+2,0.243E+3,0.206E+3,0.95402000E+1,0.19985000E+1 - ,0.71572300E+2,0.243E+3,0.207E+3,0.95402000E+1,0.20143000E+1 - ,0.50040600E+2,0.243E+3,0.208E+3,0.95402000E+1,0.19887000E+1 - ,0.20841310E+3,0.243E+3,0.212E+3,0.95402000E+1,0.19496000E+1 - ,0.25164210E+3,0.243E+3,0.213E+3,0.95402000E+1,0.19311000E+1 - ,0.24391880E+3,0.243E+3,0.214E+3,0.95402000E+1,0.19435000E+1 - ,0.21451760E+3,0.243E+3,0.215E+3,0.95402000E+1,0.20102000E+1 - ,0.18261700E+3,0.243E+3,0.216E+3,0.95402000E+1,0.19903000E+1 - ,0.29311980E+3,0.243E+3,0.220E+3,0.95402000E+1,0.19349000E+1 - ,0.28387840E+3,0.243E+3,0.221E+3,0.95402000E+1,0.28999000E+1 - ,0.28758070E+3,0.243E+3,0.222E+3,0.95402000E+1,0.38675000E+1 - ,0.26334090E+3,0.243E+3,0.223E+3,0.95402000E+1,0.29110000E+1 - ,0.20147070E+3,0.243E+3,0.224E+3,0.95402000E+1,0.10619100E+2 - ,0.17392920E+3,0.243E+3,0.225E+3,0.95402000E+1,0.98849000E+1 - ,0.17055570E+3,0.243E+3,0.226E+3,0.95402000E+1,0.91376000E+1 - ,0.19706800E+3,0.243E+3,0.227E+3,0.95402000E+1,0.29263000E+1 - ,0.18430860E+3,0.243E+3,0.228E+3,0.95402000E+1,0.65458000E+1 - ,0.25639330E+3,0.243E+3,0.231E+3,0.95402000E+1,0.19315000E+1 - ,0.27164740E+3,0.243E+3,0.232E+3,0.95402000E+1,0.19447000E+1 - ,0.25179730E+3,0.243E+3,0.233E+3,0.95402000E+1,0.19793000E+1 - ,0.23610840E+3,0.243E+3,0.234E+3,0.95402000E+1,0.19812000E+1 - ,0.35195640E+3,0.243E+3,0.238E+3,0.95402000E+1,0.19143000E+1 - ,0.34203460E+3,0.243E+3,0.239E+3,0.95402000E+1,0.28903000E+1 - ,0.34602660E+3,0.243E+3,0.240E+3,0.95402000E+1,0.39106000E+1 - ,0.33471740E+3,0.243E+3,0.241E+3,0.95402000E+1,0.29225000E+1 - ,0.29885080E+3,0.243E+3,0.242E+3,0.95402000E+1,0.11055600E+2 - ,0.26586540E+3,0.243E+3,0.243E+3,0.95402000E+1,0.95402000E+1 - ,0.26814200E+2,0.244E+3,0.100E+1,0.88895000E+1,0.91180000E+0 - ,0.18486400E+2,0.244E+3,0.200E+1,0.88895000E+1,0.00000000E+0 - ,0.36441020E+3,0.244E+3,0.300E+1,0.88895000E+1,0.00000000E+0 - ,0.22214890E+3,0.244E+3,0.400E+1,0.88895000E+1,0.00000000E+0 - ,0.15516280E+3,0.244E+3,0.500E+1,0.88895000E+1,0.00000000E+0 - ,0.10802000E+3,0.244E+3,0.600E+1,0.88895000E+1,0.00000000E+0 - ,0.77377200E+2,0.244E+3,0.700E+1,0.88895000E+1,0.00000000E+0 - ,0.59646000E+2,0.244E+3,0.800E+1,0.88895000E+1,0.00000000E+0 - ,0.45913300E+2,0.244E+3,0.900E+1,0.88895000E+1,0.00000000E+0 - ,0.35788400E+2,0.244E+3,0.100E+2,0.88895000E+1,0.00000000E+0 - ,0.43764910E+3,0.244E+3,0.110E+2,0.88895000E+1,0.00000000E+0 - ,0.35061410E+3,0.244E+3,0.120E+2,0.88895000E+1,0.00000000E+0 - ,0.32894340E+3,0.244E+3,0.130E+2,0.88895000E+1,0.00000000E+0 - ,0.26558080E+3,0.244E+3,0.140E+2,0.88895000E+1,0.00000000E+0 - ,0.21173900E+3,0.244E+3,0.150E+2,0.88895000E+1,0.00000000E+0 - ,0.17849350E+3,0.244E+3,0.160E+2,0.88895000E+1,0.00000000E+0 - ,0.14807630E+3,0.244E+3,0.170E+2,0.88895000E+1,0.00000000E+0 - ,0.12286250E+3,0.244E+3,0.180E+2,0.88895000E+1,0.00000000E+0 - ,0.71523760E+3,0.244E+3,0.190E+2,0.88895000E+1,0.00000000E+0 - ,0.60729210E+3,0.244E+3,0.200E+2,0.88895000E+1,0.00000000E+0 - ,0.50528540E+3,0.244E+3,0.210E+2,0.88895000E+1,0.00000000E+0 - ,0.49186430E+3,0.244E+3,0.220E+2,0.88895000E+1,0.00000000E+0 - ,0.45247550E+3,0.244E+3,0.230E+2,0.88895000E+1,0.00000000E+0 - ,0.35786670E+3,0.244E+3,0.240E+2,0.88895000E+1,0.00000000E+0 - ,0.39219220E+3,0.244E+3,0.250E+2,0.88895000E+1,0.00000000E+0 - ,0.30933800E+3,0.244E+3,0.260E+2,0.88895000E+1,0.00000000E+0 - ,0.32981210E+3,0.244E+3,0.270E+2,0.88895000E+1,0.00000000E+0 - ,0.33808050E+3,0.244E+3,0.280E+2,0.88895000E+1,0.00000000E+0 - ,0.26041990E+3,0.244E+3,0.290E+2,0.88895000E+1,0.00000000E+0 - ,0.27017940E+3,0.244E+3,0.300E+2,0.88895000E+1,0.00000000E+0 - ,0.31812240E+3,0.244E+3,0.310E+2,0.88895000E+1,0.00000000E+0 - ,0.28561020E+3,0.244E+3,0.320E+2,0.88895000E+1,0.00000000E+0 - ,0.24796070E+3,0.244E+3,0.330E+2,0.88895000E+1,0.00000000E+0 - ,0.22516700E+3,0.244E+3,0.340E+2,0.88895000E+1,0.00000000E+0 - ,0.19955490E+3,0.244E+3,0.350E+2,0.88895000E+1,0.00000000E+0 - ,0.17565240E+3,0.244E+3,0.360E+2,0.88895000E+1,0.00000000E+0 - ,0.80500650E+3,0.244E+3,0.370E+2,0.88895000E+1,0.00000000E+0 - ,0.72369110E+3,0.244E+3,0.380E+2,0.88895000E+1,0.00000000E+0 - ,0.64242790E+3,0.244E+3,0.390E+2,0.88895000E+1,0.00000000E+0 - ,0.58255440E+3,0.244E+3,0.400E+2,0.88895000E+1,0.00000000E+0 - ,0.53462660E+3,0.244E+3,0.410E+2,0.88895000E+1,0.00000000E+0 - ,0.41798890E+3,0.244E+3,0.420E+2,0.88895000E+1,0.00000000E+0 - ,0.46412390E+3,0.244E+3,0.430E+2,0.88895000E+1,0.00000000E+0 - ,0.35848400E+3,0.244E+3,0.440E+2,0.88895000E+1,0.00000000E+0 - ,0.39089370E+3,0.244E+3,0.450E+2,0.88895000E+1,0.00000000E+0 - ,0.36395130E+3,0.244E+3,0.460E+2,0.88895000E+1,0.00000000E+0 - ,0.30405500E+3,0.244E+3,0.470E+2,0.88895000E+1,0.00000000E+0 - ,0.32240840E+3,0.244E+3,0.480E+2,0.88895000E+1,0.00000000E+0 - ,0.39931090E+3,0.244E+3,0.490E+2,0.88895000E+1,0.00000000E+0 - ,0.37418700E+3,0.244E+3,0.500E+2,0.88895000E+1,0.00000000E+0 - ,0.33835410E+3,0.244E+3,0.510E+2,0.88895000E+1,0.00000000E+0 - ,0.31691230E+3,0.244E+3,0.520E+2,0.88895000E+1,0.00000000E+0 - ,0.28960010E+3,0.244E+3,0.530E+2,0.88895000E+1,0.00000000E+0 - ,0.26310510E+3,0.244E+3,0.540E+2,0.88895000E+1,0.00000000E+0 - ,0.98230160E+3,0.244E+3,0.550E+2,0.88895000E+1,0.00000000E+0 - ,0.91991100E+3,0.244E+3,0.560E+2,0.88895000E+1,0.00000000E+0 - ,0.81862810E+3,0.244E+3,0.570E+2,0.88895000E+1,0.00000000E+0 - ,0.39923510E+3,0.244E+3,0.580E+2,0.88895000E+1,0.27991000E+1 - ,0.81904250E+3,0.244E+3,0.590E+2,0.88895000E+1,0.00000000E+0 - ,0.78798460E+3,0.244E+3,0.600E+2,0.88895000E+1,0.00000000E+0 - ,0.76861590E+3,0.244E+3,0.610E+2,0.88895000E+1,0.00000000E+0 - ,0.75074320E+3,0.244E+3,0.620E+2,0.88895000E+1,0.00000000E+0 - ,0.73490660E+3,0.244E+3,0.630E+2,0.88895000E+1,0.00000000E+0 - ,0.58761560E+3,0.244E+3,0.640E+2,0.88895000E+1,0.00000000E+0 - ,0.64899040E+3,0.244E+3,0.650E+2,0.88895000E+1,0.00000000E+0 - ,0.62756590E+3,0.244E+3,0.660E+2,0.88895000E+1,0.00000000E+0 - ,0.66479550E+3,0.244E+3,0.670E+2,0.88895000E+1,0.00000000E+0 - ,0.65083380E+3,0.244E+3,0.680E+2,0.88895000E+1,0.00000000E+0 - ,0.63836820E+3,0.244E+3,0.690E+2,0.88895000E+1,0.00000000E+0 - ,0.63042130E+3,0.244E+3,0.700E+2,0.88895000E+1,0.00000000E+0 - ,0.53719250E+3,0.244E+3,0.710E+2,0.88895000E+1,0.00000000E+0 - ,0.53511600E+3,0.244E+3,0.720E+2,0.88895000E+1,0.00000000E+0 - ,0.49290160E+3,0.244E+3,0.730E+2,0.88895000E+1,0.00000000E+0 - ,0.42019700E+3,0.244E+3,0.740E+2,0.88895000E+1,0.00000000E+0 - ,0.42865240E+3,0.244E+3,0.750E+2,0.88895000E+1,0.00000000E+0 - ,0.39172610E+3,0.244E+3,0.760E+2,0.88895000E+1,0.00000000E+0 - ,0.36124810E+3,0.244E+3,0.770E+2,0.88895000E+1,0.00000000E+0 - ,0.30292430E+3,0.244E+3,0.780E+2,0.88895000E+1,0.00000000E+0 - ,0.28406330E+3,0.244E+3,0.790E+2,0.88895000E+1,0.00000000E+0 - ,0.29267440E+3,0.244E+3,0.800E+2,0.88895000E+1,0.00000000E+0 - ,0.41285870E+3,0.244E+3,0.810E+2,0.88895000E+1,0.00000000E+0 - ,0.40737440E+3,0.244E+3,0.820E+2,0.88895000E+1,0.00000000E+0 - ,0.37897400E+3,0.244E+3,0.830E+2,0.88895000E+1,0.00000000E+0 - ,0.36421970E+3,0.244E+3,0.840E+2,0.88895000E+1,0.00000000E+0 - ,0.33940270E+3,0.244E+3,0.850E+2,0.88895000E+1,0.00000000E+0 - ,0.31398490E+3,0.244E+3,0.860E+2,0.88895000E+1,0.00000000E+0 - ,0.93738470E+3,0.244E+3,0.870E+2,0.88895000E+1,0.00000000E+0 - ,0.91624010E+3,0.244E+3,0.880E+2,0.88895000E+1,0.00000000E+0 - ,0.81940930E+3,0.244E+3,0.890E+2,0.88895000E+1,0.00000000E+0 - ,0.74758980E+3,0.244E+3,0.900E+2,0.88895000E+1,0.00000000E+0 - ,0.73789240E+3,0.244E+3,0.910E+2,0.88895000E+1,0.00000000E+0 - ,0.71483440E+3,0.244E+3,0.920E+2,0.88895000E+1,0.00000000E+0 - ,0.72948730E+3,0.244E+3,0.930E+2,0.88895000E+1,0.00000000E+0 - ,0.70750950E+3,0.244E+3,0.940E+2,0.88895000E+1,0.00000000E+0 - ,0.42162700E+2,0.244E+3,0.101E+3,0.88895000E+1,0.00000000E+0 - ,0.12989070E+3,0.244E+3,0.103E+3,0.88895000E+1,0.98650000E+0 - ,0.16698720E+3,0.244E+3,0.104E+3,0.88895000E+1,0.98080000E+0 - ,0.13166500E+3,0.244E+3,0.105E+3,0.88895000E+1,0.97060000E+0 - ,0.10141840E+3,0.244E+3,0.106E+3,0.88895000E+1,0.98680000E+0 - ,0.72295000E+2,0.244E+3,0.107E+3,0.88895000E+1,0.99440000E+0 - ,0.53786300E+2,0.244E+3,0.108E+3,0.88895000E+1,0.99250000E+0 - ,0.37996100E+2,0.244E+3,0.109E+3,0.88895000E+1,0.99820000E+0 - ,0.18913000E+3,0.244E+3,0.111E+3,0.88895000E+1,0.96840000E+0 - ,0.29149160E+3,0.244E+3,0.112E+3,0.88895000E+1,0.96280000E+0 - ,0.29952560E+3,0.244E+3,0.113E+3,0.88895000E+1,0.96480000E+0 - ,0.24646800E+3,0.244E+3,0.114E+3,0.88895000E+1,0.95070000E+0 - ,0.20575330E+3,0.244E+3,0.115E+3,0.88895000E+1,0.99470000E+0 - ,0.17650780E+3,0.244E+3,0.116E+3,0.88895000E+1,0.99480000E+0 - ,0.14652980E+3,0.244E+3,0.117E+3,0.88895000E+1,0.99720000E+0 - ,0.26580330E+3,0.244E+3,0.119E+3,0.88895000E+1,0.97670000E+0 - ,0.48833520E+3,0.244E+3,0.120E+3,0.88895000E+1,0.98310000E+0 - ,0.26990590E+3,0.244E+3,0.121E+3,0.88895000E+1,0.18627000E+1 - ,0.26094910E+3,0.244E+3,0.122E+3,0.88895000E+1,0.18299000E+1 - ,0.25571250E+3,0.244E+3,0.123E+3,0.88895000E+1,0.19138000E+1 - ,0.25285150E+3,0.244E+3,0.124E+3,0.88895000E+1,0.18269000E+1 - ,0.23492290E+3,0.244E+3,0.125E+3,0.88895000E+1,0.16406000E+1 - ,0.21825880E+3,0.244E+3,0.126E+3,0.88895000E+1,0.16483000E+1 - ,0.20833810E+3,0.244E+3,0.127E+3,0.88895000E+1,0.17149000E+1 - ,0.20352280E+3,0.244E+3,0.128E+3,0.88895000E+1,0.17937000E+1 - ,0.19956410E+3,0.244E+3,0.129E+3,0.88895000E+1,0.95760000E+0 - ,0.18984580E+3,0.244E+3,0.130E+3,0.88895000E+1,0.19419000E+1 - ,0.30020530E+3,0.244E+3,0.131E+3,0.88895000E+1,0.96010000E+0 - ,0.26845380E+3,0.244E+3,0.132E+3,0.88895000E+1,0.94340000E+0 - ,0.24404670E+3,0.244E+3,0.133E+3,0.88895000E+1,0.98890000E+0 - ,0.22523300E+3,0.244E+3,0.134E+3,0.88895000E+1,0.99010000E+0 - ,0.20082890E+3,0.244E+3,0.135E+3,0.88895000E+1,0.99740000E+0 - ,0.31880410E+3,0.244E+3,0.137E+3,0.88895000E+1,0.97380000E+0 - ,0.59403870E+3,0.244E+3,0.138E+3,0.88895000E+1,0.98010000E+0 - ,0.46651060E+3,0.244E+3,0.139E+3,0.88895000E+1,0.19153000E+1 - ,0.35708190E+3,0.244E+3,0.140E+3,0.88895000E+1,0.19355000E+1 - ,0.36054300E+3,0.244E+3,0.141E+3,0.88895000E+1,0.19545000E+1 - ,0.33781860E+3,0.244E+3,0.142E+3,0.88895000E+1,0.19420000E+1 - ,0.37403450E+3,0.244E+3,0.143E+3,0.88895000E+1,0.16682000E+1 - ,0.29766760E+3,0.244E+3,0.144E+3,0.88895000E+1,0.18584000E+1 - ,0.27903330E+3,0.244E+3,0.145E+3,0.88895000E+1,0.19003000E+1 - ,0.25985840E+3,0.244E+3,0.146E+3,0.88895000E+1,0.18630000E+1 - ,0.25103670E+3,0.244E+3,0.147E+3,0.88895000E+1,0.96790000E+0 - ,0.24993600E+3,0.244E+3,0.148E+3,0.88895000E+1,0.19539000E+1 - ,0.38254570E+3,0.244E+3,0.149E+3,0.88895000E+1,0.96330000E+0 - ,0.35105910E+3,0.244E+3,0.150E+3,0.88895000E+1,0.95140000E+0 - ,0.33229950E+3,0.244E+3,0.151E+3,0.88895000E+1,0.97490000E+0 - ,0.31685780E+3,0.244E+3,0.152E+3,0.88895000E+1,0.98110000E+0 - ,0.29224830E+3,0.244E+3,0.153E+3,0.88895000E+1,0.99680000E+0 - ,0.38090100E+3,0.244E+3,0.155E+3,0.88895000E+1,0.99090000E+0 - ,0.76731680E+3,0.244E+3,0.156E+3,0.88895000E+1,0.97970000E+0 - ,0.58947680E+3,0.244E+3,0.157E+3,0.88895000E+1,0.19373000E+1 - ,0.38757590E+3,0.244E+3,0.159E+3,0.88895000E+1,0.29425000E+1 - ,0.37963090E+3,0.244E+3,0.160E+3,0.88895000E+1,0.29455000E+1 - ,0.36791330E+3,0.244E+3,0.161E+3,0.88895000E+1,0.29413000E+1 - ,0.36893680E+3,0.244E+3,0.162E+3,0.88895000E+1,0.29300000E+1 - ,0.35339960E+3,0.244E+3,0.163E+3,0.88895000E+1,0.18286000E+1 - ,0.37083500E+3,0.244E+3,0.164E+3,0.88895000E+1,0.28732000E+1 - ,0.34904790E+3,0.244E+3,0.165E+3,0.88895000E+1,0.29086000E+1 - ,0.35387000E+3,0.244E+3,0.166E+3,0.88895000E+1,0.28965000E+1 - ,0.33189420E+3,0.244E+3,0.167E+3,0.88895000E+1,0.29242000E+1 - ,0.32266300E+3,0.244E+3,0.168E+3,0.88895000E+1,0.29282000E+1 - ,0.32037880E+3,0.244E+3,0.169E+3,0.88895000E+1,0.29246000E+1 - ,0.33542660E+3,0.244E+3,0.170E+3,0.88895000E+1,0.28482000E+1 - ,0.30995020E+3,0.244E+3,0.171E+3,0.88895000E+1,0.29219000E+1 - ,0.40980230E+3,0.244E+3,0.172E+3,0.88895000E+1,0.19254000E+1 - ,0.38380190E+3,0.244E+3,0.173E+3,0.88895000E+1,0.19459000E+1 - ,0.35352930E+3,0.244E+3,0.174E+3,0.88895000E+1,0.19292000E+1 - ,0.35500360E+3,0.244E+3,0.175E+3,0.88895000E+1,0.18104000E+1 - ,0.31737010E+3,0.244E+3,0.176E+3,0.88895000E+1,0.18858000E+1 - ,0.29978350E+3,0.244E+3,0.177E+3,0.88895000E+1,0.18648000E+1 - ,0.28707700E+3,0.244E+3,0.178E+3,0.88895000E+1,0.19188000E+1 - ,0.27465620E+3,0.244E+3,0.179E+3,0.88895000E+1,0.98460000E+0 - ,0.26716680E+3,0.244E+3,0.180E+3,0.88895000E+1,0.19896000E+1 - ,0.41292460E+3,0.244E+3,0.181E+3,0.88895000E+1,0.92670000E+0 - ,0.38150770E+3,0.244E+3,0.182E+3,0.88895000E+1,0.93830000E+0 - ,0.37276100E+3,0.244E+3,0.183E+3,0.88895000E+1,0.98200000E+0 - ,0.36468730E+3,0.244E+3,0.184E+3,0.88895000E+1,0.98150000E+0 - ,0.34349450E+3,0.244E+3,0.185E+3,0.88895000E+1,0.99540000E+0 - ,0.42926480E+3,0.244E+3,0.187E+3,0.88895000E+1,0.97050000E+0 - ,0.76957810E+3,0.244E+3,0.188E+3,0.88895000E+1,0.96620000E+0 - ,0.45825190E+3,0.244E+3,0.189E+3,0.88895000E+1,0.29070000E+1 - ,0.52305080E+3,0.244E+3,0.190E+3,0.88895000E+1,0.28844000E+1 - ,0.47040220E+3,0.244E+3,0.191E+3,0.88895000E+1,0.28738000E+1 - ,0.41948400E+3,0.244E+3,0.192E+3,0.88895000E+1,0.28878000E+1 - ,0.40459980E+3,0.244E+3,0.193E+3,0.88895000E+1,0.29095000E+1 - ,0.47467630E+3,0.244E+3,0.194E+3,0.88895000E+1,0.19209000E+1 - ,0.11243910E+3,0.244E+3,0.204E+3,0.88895000E+1,0.19697000E+1 - ,0.11151080E+3,0.244E+3,0.205E+3,0.88895000E+1,0.19441000E+1 - ,0.83694600E+2,0.244E+3,0.206E+3,0.88895000E+1,0.19985000E+1 - ,0.68072000E+2,0.244E+3,0.207E+3,0.88895000E+1,0.20143000E+1 - ,0.47784700E+2,0.244E+3,0.208E+3,0.88895000E+1,0.19887000E+1 - ,0.19631020E+3,0.244E+3,0.212E+3,0.88895000E+1,0.19496000E+1 - ,0.23698540E+3,0.244E+3,0.213E+3,0.88895000E+1,0.19311000E+1 - ,0.23009880E+3,0.244E+3,0.214E+3,0.88895000E+1,0.19435000E+1 - ,0.20278480E+3,0.244E+3,0.215E+3,0.88895000E+1,0.20102000E+1 - ,0.17302410E+3,0.244E+3,0.216E+3,0.88895000E+1,0.19903000E+1 - ,0.27628420E+3,0.244E+3,0.220E+3,0.88895000E+1,0.19349000E+1 - ,0.26790880E+3,0.244E+3,0.221E+3,0.88895000E+1,0.28999000E+1 - ,0.27143870E+3,0.244E+3,0.222E+3,0.88895000E+1,0.38675000E+1 - ,0.24860210E+3,0.244E+3,0.223E+3,0.88895000E+1,0.29110000E+1 - ,0.19071700E+3,0.244E+3,0.224E+3,0.88895000E+1,0.10619100E+2 - ,0.16490150E+3,0.244E+3,0.225E+3,0.88895000E+1,0.98849000E+1 - ,0.16168180E+3,0.244E+3,0.226E+3,0.88895000E+1,0.91376000E+1 - ,0.18635590E+3,0.244E+3,0.227E+3,0.88895000E+1,0.29263000E+1 - ,0.17440700E+3,0.244E+3,0.228E+3,0.88895000E+1,0.65458000E+1 - ,0.24186460E+3,0.244E+3,0.231E+3,0.88895000E+1,0.19315000E+1 - ,0.25639940E+3,0.244E+3,0.232E+3,0.88895000E+1,0.19447000E+1 - ,0.23809660E+3,0.244E+3,0.233E+3,0.88895000E+1,0.19793000E+1 - ,0.22355550E+3,0.244E+3,0.234E+3,0.88895000E+1,0.19812000E+1 - ,0.33186870E+3,0.244E+3,0.238E+3,0.88895000E+1,0.19143000E+1 - ,0.32301240E+3,0.244E+3,0.239E+3,0.88895000E+1,0.28903000E+1 - ,0.32694770E+3,0.244E+3,0.240E+3,0.88895000E+1,0.39106000E+1 - ,0.31629900E+3,0.244E+3,0.241E+3,0.88895000E+1,0.29225000E+1 - ,0.28288320E+3,0.244E+3,0.242E+3,0.88895000E+1,0.11055600E+2 - ,0.25200750E+3,0.244E+3,0.243E+3,0.88895000E+1,0.95402000E+1 - ,0.23900710E+3,0.244E+3,0.244E+3,0.88895000E+1,0.88895000E+1 - ,0.26980300E+2,0.245E+3,0.100E+1,0.29696000E+1,0.91180000E+0 - ,0.18402600E+2,0.245E+3,0.200E+1,0.29696000E+1,0.00000000E+0 - ,0.39027660E+3,0.245E+3,0.300E+1,0.29696000E+1,0.00000000E+0 - ,0.23089960E+3,0.245E+3,0.400E+1,0.29696000E+1,0.00000000E+0 - ,0.15871240E+3,0.245E+3,0.500E+1,0.29696000E+1,0.00000000E+0 - ,0.10928410E+3,0.245E+3,0.600E+1,0.29696000E+1,0.00000000E+0 - ,0.77707400E+2,0.245E+3,0.700E+1,0.29696000E+1,0.00000000E+0 - ,0.59619400E+2,0.245E+3,0.800E+1,0.29696000E+1,0.00000000E+0 - ,0.45728900E+2,0.245E+3,0.900E+1,0.29696000E+1,0.00000000E+0 - ,0.35556300E+2,0.245E+3,0.100E+2,0.29696000E+1,0.00000000E+0 - ,0.46780860E+3,0.245E+3,0.110E+2,0.29696000E+1,0.00000000E+0 - ,0.36632450E+3,0.245E+3,0.120E+2,0.29696000E+1,0.00000000E+0 - ,0.34074550E+3,0.245E+3,0.130E+2,0.29696000E+1,0.00000000E+0 - ,0.27209130E+3,0.245E+3,0.140E+2,0.29696000E+1,0.00000000E+0 - ,0.21501450E+3,0.245E+3,0.150E+2,0.29696000E+1,0.00000000E+0 - ,0.18027000E+3,0.245E+3,0.160E+2,0.29696000E+1,0.00000000E+0 - ,0.14881480E+3,0.245E+3,0.170E+2,0.29696000E+1,0.00000000E+0 - ,0.12298220E+3,0.245E+3,0.180E+2,0.29696000E+1,0.00000000E+0 - ,0.76742050E+3,0.245E+3,0.190E+2,0.29696000E+1,0.00000000E+0 - ,0.64014310E+3,0.245E+3,0.200E+2,0.29696000E+1,0.00000000E+0 - ,0.53051110E+3,0.245E+3,0.210E+2,0.29696000E+1,0.00000000E+0 - ,0.51447440E+3,0.245E+3,0.220E+2,0.29696000E+1,0.00000000E+0 - ,0.47224010E+3,0.245E+3,0.230E+2,0.29696000E+1,0.00000000E+0 - ,0.37322320E+3,0.245E+3,0.240E+2,0.29696000E+1,0.00000000E+0 - ,0.40804110E+3,0.245E+3,0.250E+2,0.29696000E+1,0.00000000E+0 - ,0.32148500E+3,0.245E+3,0.260E+2,0.29696000E+1,0.00000000E+0 - ,0.34137600E+3,0.245E+3,0.270E+2,0.29696000E+1,0.00000000E+0 - ,0.35071710E+3,0.245E+3,0.280E+2,0.29696000E+1,0.00000000E+0 - ,0.26998860E+3,0.245E+3,0.290E+2,0.29696000E+1,0.00000000E+0 - ,0.27836200E+3,0.245E+3,0.300E+2,0.29696000E+1,0.00000000E+0 - ,0.32839780E+3,0.245E+3,0.310E+2,0.29696000E+1,0.00000000E+0 - ,0.29239200E+3,0.245E+3,0.320E+2,0.29696000E+1,0.00000000E+0 - ,0.25200000E+3,0.245E+3,0.330E+2,0.29696000E+1,0.00000000E+0 - ,0.22783110E+3,0.245E+3,0.340E+2,0.29696000E+1,0.00000000E+0 - ,0.20104720E+3,0.245E+3,0.350E+2,0.29696000E+1,0.00000000E+0 - ,0.17630020E+3,0.245E+3,0.360E+2,0.29696000E+1,0.00000000E+0 - ,0.86212220E+3,0.245E+3,0.370E+2,0.29696000E+1,0.00000000E+0 - ,0.76317560E+3,0.245E+3,0.380E+2,0.29696000E+1,0.00000000E+0 - ,0.67268360E+3,0.245E+3,0.390E+2,0.29696000E+1,0.00000000E+0 - ,0.60730800E+3,0.245E+3,0.400E+2,0.29696000E+1,0.00000000E+0 - ,0.55572040E+3,0.245E+3,0.410E+2,0.29696000E+1,0.00000000E+0 - ,0.43227820E+3,0.245E+3,0.420E+2,0.29696000E+1,0.00000000E+0 - ,0.48090810E+3,0.245E+3,0.430E+2,0.29696000E+1,0.00000000E+0 - ,0.36943280E+3,0.245E+3,0.440E+2,0.29696000E+1,0.00000000E+0 - ,0.40294980E+3,0.245E+3,0.450E+2,0.29696000E+1,0.00000000E+0 - ,0.37453940E+3,0.245E+3,0.460E+2,0.29696000E+1,0.00000000E+0 - ,0.31311430E+3,0.245E+3,0.470E+2,0.29696000E+1,0.00000000E+0 - ,0.33108150E+3,0.245E+3,0.480E+2,0.29696000E+1,0.00000000E+0 - ,0.41228890E+3,0.245E+3,0.490E+2,0.29696000E+1,0.00000000E+0 - ,0.38378510E+3,0.245E+3,0.500E+2,0.29696000E+1,0.00000000E+0 - ,0.34480820E+3,0.245E+3,0.510E+2,0.29696000E+1,0.00000000E+0 - ,0.32172250E+3,0.245E+3,0.520E+2,0.29696000E+1,0.00000000E+0 - ,0.29282270E+3,0.245E+3,0.530E+2,0.29696000E+1,0.00000000E+0 - ,0.26506110E+3,0.245E+3,0.540E+2,0.29696000E+1,0.00000000E+0 - ,0.10513610E+4,0.245E+3,0.550E+2,0.29696000E+1,0.00000000E+0 - ,0.97214520E+3,0.245E+3,0.560E+2,0.29696000E+1,0.00000000E+0 - ,0.85902210E+3,0.245E+3,0.570E+2,0.29696000E+1,0.00000000E+0 - ,0.40725580E+3,0.245E+3,0.580E+2,0.29696000E+1,0.27991000E+1 - ,0.86353440E+3,0.245E+3,0.590E+2,0.29696000E+1,0.00000000E+0 - ,0.82985260E+3,0.245E+3,0.600E+2,0.29696000E+1,0.00000000E+0 - ,0.80920320E+3,0.245E+3,0.610E+2,0.29696000E+1,0.00000000E+0 - ,0.79017910E+3,0.245E+3,0.620E+2,0.29696000E+1,0.00000000E+0 - ,0.77331220E+3,0.245E+3,0.630E+2,0.29696000E+1,0.00000000E+0 - ,0.61339590E+3,0.245E+3,0.640E+2,0.29696000E+1,0.00000000E+0 - ,0.68497150E+3,0.245E+3,0.650E+2,0.29696000E+1,0.00000000E+0 - ,0.66143730E+3,0.245E+3,0.660E+2,0.29696000E+1,0.00000000E+0 - ,0.69834480E+3,0.245E+3,0.670E+2,0.29696000E+1,0.00000000E+0 - ,0.68356120E+3,0.245E+3,0.680E+2,0.29696000E+1,0.00000000E+0 - ,0.67029400E+3,0.245E+3,0.690E+2,0.29696000E+1,0.00000000E+0 - ,0.66217850E+3,0.245E+3,0.700E+2,0.29696000E+1,0.00000000E+0 - ,0.56118900E+3,0.245E+3,0.710E+2,0.29696000E+1,0.00000000E+0 - ,0.55510630E+3,0.245E+3,0.720E+2,0.29696000E+1,0.00000000E+0 - ,0.50914750E+3,0.245E+3,0.730E+2,0.29696000E+1,0.00000000E+0 - ,0.43253910E+3,0.245E+3,0.740E+2,0.29696000E+1,0.00000000E+0 - ,0.44058660E+3,0.245E+3,0.750E+2,0.29696000E+1,0.00000000E+0 - ,0.40122800E+3,0.245E+3,0.760E+2,0.29696000E+1,0.00000000E+0 - ,0.36898490E+3,0.245E+3,0.770E+2,0.29696000E+1,0.00000000E+0 - ,0.30849150E+3,0.245E+3,0.780E+2,0.29696000E+1,0.00000000E+0 - ,0.28895780E+3,0.245E+3,0.790E+2,0.29696000E+1,0.00000000E+0 - ,0.29737620E+3,0.245E+3,0.800E+2,0.29696000E+1,0.00000000E+0 - ,0.42541930E+3,0.245E+3,0.810E+2,0.29696000E+1,0.00000000E+0 - ,0.41768300E+3,0.245E+3,0.820E+2,0.29696000E+1,0.00000000E+0 - ,0.38636610E+3,0.245E+3,0.830E+2,0.29696000E+1,0.00000000E+0 - ,0.37011470E+3,0.245E+3,0.840E+2,0.29696000E+1,0.00000000E+0 - ,0.34358050E+3,0.245E+3,0.850E+2,0.29696000E+1,0.00000000E+0 - ,0.31677380E+3,0.245E+3,0.860E+2,0.29696000E+1,0.00000000E+0 - ,0.99738560E+3,0.245E+3,0.870E+2,0.29696000E+1,0.00000000E+0 - ,0.96461400E+3,0.245E+3,0.880E+2,0.29696000E+1,0.00000000E+0 - ,0.85721330E+3,0.245E+3,0.890E+2,0.29696000E+1,0.00000000E+0 - ,0.77636620E+3,0.245E+3,0.900E+2,0.29696000E+1,0.00000000E+0 - ,0.76896120E+3,0.245E+3,0.910E+2,0.29696000E+1,0.00000000E+0 - ,0.74479890E+3,0.245E+3,0.920E+2,0.29696000E+1,0.00000000E+0 - ,0.76357260E+3,0.245E+3,0.930E+2,0.29696000E+1,0.00000000E+0 - ,0.73996210E+3,0.245E+3,0.940E+2,0.29696000E+1,0.00000000E+0 - ,0.42771400E+2,0.245E+3,0.101E+3,0.29696000E+1,0.00000000E+0 - ,0.13469310E+3,0.245E+3,0.103E+3,0.29696000E+1,0.98650000E+0 - ,0.17260210E+3,0.245E+3,0.104E+3,0.29696000E+1,0.98080000E+0 - ,0.13425050E+3,0.245E+3,0.105E+3,0.29696000E+1,0.97060000E+0 - ,0.10261550E+3,0.245E+3,0.106E+3,0.29696000E+1,0.98680000E+0 - ,0.72586300E+2,0.245E+3,0.107E+3,0.29696000E+1,0.99440000E+0 - ,0.53693400E+2,0.245E+3,0.108E+3,0.29696000E+1,0.99250000E+0 - ,0.37696700E+2,0.245E+3,0.109E+3,0.29696000E+1,0.99820000E+0 - ,0.19669260E+3,0.245E+3,0.111E+3,0.29696000E+1,0.96840000E+0 - ,0.30353120E+3,0.245E+3,0.112E+3,0.29696000E+1,0.96280000E+0 - ,0.30963670E+3,0.245E+3,0.113E+3,0.29696000E+1,0.96480000E+0 - ,0.25211010E+3,0.245E+3,0.114E+3,0.29696000E+1,0.95070000E+0 - ,0.20887230E+3,0.245E+3,0.115E+3,0.29696000E+1,0.99470000E+0 - ,0.17828770E+3,0.245E+3,0.116E+3,0.29696000E+1,0.99480000E+0 - ,0.14727550E+3,0.245E+3,0.117E+3,0.29696000E+1,0.99720000E+0 - ,0.27459280E+3,0.245E+3,0.119E+3,0.29696000E+1,0.97670000E+0 - ,0.51413850E+3,0.245E+3,0.120E+3,0.29696000E+1,0.98310000E+0 - ,0.27656690E+3,0.245E+3,0.121E+3,0.29696000E+1,0.18627000E+1 - ,0.26729850E+3,0.245E+3,0.122E+3,0.29696000E+1,0.18299000E+1 - ,0.26198070E+3,0.245E+3,0.123E+3,0.29696000E+1,0.19138000E+1 - ,0.25931910E+3,0.245E+3,0.124E+3,0.29696000E+1,0.18269000E+1 - ,0.23979050E+3,0.245E+3,0.125E+3,0.29696000E+1,0.16406000E+1 - ,0.22246400E+3,0.245E+3,0.126E+3,0.29696000E+1,0.16483000E+1 - ,0.21235000E+3,0.245E+3,0.127E+3,0.29696000E+1,0.17149000E+1 - ,0.20752820E+3,0.245E+3,0.128E+3,0.29696000E+1,0.17937000E+1 - ,0.20425110E+3,0.245E+3,0.129E+3,0.29696000E+1,0.95760000E+0 - ,0.19302210E+3,0.245E+3,0.130E+3,0.29696000E+1,0.19419000E+1 - ,0.30923520E+3,0.245E+3,0.131E+3,0.29696000E+1,0.96010000E+0 - ,0.27429900E+3,0.245E+3,0.132E+3,0.29696000E+1,0.94340000E+0 - ,0.24791670E+3,0.245E+3,0.133E+3,0.29696000E+1,0.98890000E+0 - ,0.22791320E+3,0.245E+3,0.134E+3,0.29696000E+1,0.99010000E+0 - ,0.20237580E+3,0.245E+3,0.135E+3,0.29696000E+1,0.99740000E+0 - ,0.32868890E+3,0.245E+3,0.137E+3,0.29696000E+1,0.97380000E+0 - ,0.62589490E+3,0.245E+3,0.138E+3,0.29696000E+1,0.98010000E+0 - ,0.48472570E+3,0.245E+3,0.139E+3,0.29696000E+1,0.19153000E+1 - ,0.36605390E+3,0.245E+3,0.140E+3,0.29696000E+1,0.19355000E+1 - ,0.36967440E+3,0.245E+3,0.141E+3,0.29696000E+1,0.19545000E+1 - ,0.34576000E+3,0.245E+3,0.142E+3,0.29696000E+1,0.19420000E+1 - ,0.38525950E+3,0.245E+3,0.143E+3,0.29696000E+1,0.16682000E+1 - ,0.30329340E+3,0.245E+3,0.144E+3,0.29696000E+1,0.18584000E+1 - ,0.28418210E+3,0.245E+3,0.145E+3,0.29696000E+1,0.19003000E+1 - ,0.26443210E+3,0.245E+3,0.146E+3,0.29696000E+1,0.18630000E+1 - ,0.25564790E+3,0.245E+3,0.147E+3,0.29696000E+1,0.96790000E+0 - ,0.25366630E+3,0.245E+3,0.148E+3,0.29696000E+1,0.19539000E+1 - ,0.39403700E+3,0.245E+3,0.149E+3,0.29696000E+1,0.96330000E+0 - ,0.35913800E+3,0.245E+3,0.150E+3,0.29696000E+1,0.95140000E+0 - ,0.33834720E+3,0.245E+3,0.151E+3,0.29696000E+1,0.97490000E+0 - ,0.32158990E+3,0.245E+3,0.152E+3,0.29696000E+1,0.98110000E+0 - ,0.29551790E+3,0.245E+3,0.153E+3,0.29696000E+1,0.99680000E+0 - ,0.39060480E+3,0.245E+3,0.155E+3,0.29696000E+1,0.99090000E+0 - ,0.81058950E+3,0.245E+3,0.156E+3,0.29696000E+1,0.97970000E+0 - ,0.61313650E+3,0.245E+3,0.157E+3,0.29696000E+1,0.19373000E+1 - ,0.39521610E+3,0.245E+3,0.159E+3,0.29696000E+1,0.29425000E+1 - ,0.38709050E+3,0.245E+3,0.160E+3,0.29696000E+1,0.29455000E+1 - ,0.37502280E+3,0.245E+3,0.161E+3,0.29696000E+1,0.29413000E+1 - ,0.37642310E+3,0.245E+3,0.162E+3,0.29696000E+1,0.29300000E+1 - ,0.36171140E+3,0.245E+3,0.163E+3,0.29696000E+1,0.18286000E+1 - ,0.37848060E+3,0.245E+3,0.164E+3,0.29696000E+1,0.28732000E+1 - ,0.35595940E+3,0.245E+3,0.165E+3,0.29696000E+1,0.29086000E+1 - ,0.36149530E+3,0.245E+3,0.166E+3,0.29696000E+1,0.28965000E+1 - ,0.33818990E+3,0.245E+3,0.167E+3,0.29696000E+1,0.29242000E+1 - ,0.32868340E+3,0.245E+3,0.168E+3,0.29696000E+1,0.29282000E+1 - ,0.32643780E+3,0.245E+3,0.169E+3,0.29696000E+1,0.29246000E+1 - ,0.34224650E+3,0.245E+3,0.170E+3,0.29696000E+1,0.28482000E+1 - ,0.31566390E+3,0.245E+3,0.171E+3,0.29696000E+1,0.29219000E+1 - ,0.42204710E+3,0.245E+3,0.172E+3,0.29696000E+1,0.19254000E+1 - ,0.39370480E+3,0.245E+3,0.173E+3,0.29696000E+1,0.19459000E+1 - ,0.36119710E+3,0.245E+3,0.174E+3,0.29696000E+1,0.19292000E+1 - ,0.36399550E+3,0.245E+3,0.175E+3,0.29696000E+1,0.18104000E+1 - ,0.32246250E+3,0.245E+3,0.176E+3,0.29696000E+1,0.18858000E+1 - ,0.30419920E+3,0.245E+3,0.177E+3,0.29696000E+1,0.18648000E+1 - ,0.29108740E+3,0.245E+3,0.178E+3,0.29696000E+1,0.19188000E+1 - ,0.27853890E+3,0.245E+3,0.179E+3,0.29696000E+1,0.98460000E+0 - ,0.27011300E+3,0.245E+3,0.180E+3,0.29696000E+1,0.19896000E+1 - ,0.42470380E+3,0.245E+3,0.181E+3,0.29696000E+1,0.92670000E+0 - ,0.38982000E+3,0.245E+3,0.182E+3,0.29696000E+1,0.93830000E+0 - ,0.37955200E+3,0.245E+3,0.183E+3,0.29696000E+1,0.98200000E+0 - ,0.37040460E+3,0.245E+3,0.184E+3,0.29696000E+1,0.98150000E+0 - ,0.34770470E+3,0.245E+3,0.185E+3,0.29696000E+1,0.99540000E+0 - ,0.44002170E+3,0.245E+3,0.187E+3,0.29696000E+1,0.97050000E+0 - ,0.80924300E+3,0.245E+3,0.188E+3,0.29696000E+1,0.96620000E+0 - ,0.46736610E+3,0.245E+3,0.189E+3,0.29696000E+1,0.29070000E+1 - ,0.53649470E+3,0.245E+3,0.190E+3,0.29696000E+1,0.28844000E+1 - ,0.48151730E+3,0.245E+3,0.191E+3,0.29696000E+1,0.28738000E+1 - ,0.42750540E+3,0.245E+3,0.192E+3,0.29696000E+1,0.28878000E+1 - ,0.41194110E+3,0.245E+3,0.193E+3,0.29696000E+1,0.29095000E+1 - ,0.48914000E+3,0.245E+3,0.194E+3,0.29696000E+1,0.19209000E+1 - ,0.11455870E+3,0.245E+3,0.204E+3,0.29696000E+1,0.19697000E+1 - ,0.11335080E+3,0.245E+3,0.205E+3,0.29696000E+1,0.19441000E+1 - ,0.84329800E+2,0.245E+3,0.206E+3,0.29696000E+1,0.19985000E+1 - ,0.68302900E+2,0.245E+3,0.207E+3,0.29696000E+1,0.20143000E+1 - ,0.47642200E+2,0.245E+3,0.208E+3,0.29696000E+1,0.19887000E+1 - ,0.20139880E+3,0.245E+3,0.212E+3,0.29696000E+1,0.19496000E+1 - ,0.24332100E+3,0.245E+3,0.213E+3,0.29696000E+1,0.19311000E+1 - ,0.23501080E+3,0.245E+3,0.214E+3,0.29696000E+1,0.19435000E+1 - ,0.20596780E+3,0.245E+3,0.215E+3,0.29696000E+1,0.20102000E+1 - ,0.17475170E+3,0.245E+3,0.216E+3,0.29696000E+1,0.19903000E+1 - ,0.28343990E+3,0.245E+3,0.220E+3,0.29696000E+1,0.19349000E+1 - ,0.27371790E+3,0.245E+3,0.221E+3,0.29696000E+1,0.28999000E+1 - ,0.27724060E+3,0.245E+3,0.222E+3,0.29696000E+1,0.38675000E+1 - ,0.25398530E+3,0.245E+3,0.223E+3,0.29696000E+1,0.29110000E+1 - ,0.19359700E+3,0.245E+3,0.224E+3,0.29696000E+1,0.10619100E+2 - ,0.16675330E+3,0.245E+3,0.225E+3,0.29696000E+1,0.98849000E+1 - ,0.16358130E+3,0.245E+3,0.226E+3,0.29696000E+1,0.91376000E+1 - ,0.18973800E+3,0.245E+3,0.227E+3,0.29696000E+1,0.29263000E+1 - ,0.17725080E+3,0.245E+3,0.228E+3,0.29696000E+1,0.65458000E+1 - ,0.24732620E+3,0.245E+3,0.231E+3,0.29696000E+1,0.19315000E+1 - ,0.26164130E+3,0.245E+3,0.232E+3,0.29696000E+1,0.19447000E+1 - ,0.24169560E+3,0.245E+3,0.233E+3,0.29696000E+1,0.19793000E+1 - ,0.22618930E+3,0.245E+3,0.234E+3,0.29696000E+1,0.19812000E+1 - ,0.34023920E+3,0.245E+3,0.238E+3,0.29696000E+1,0.19143000E+1 - ,0.32940570E+3,0.245E+3,0.239E+3,0.29696000E+1,0.28903000E+1 - ,0.33291030E+3,0.245E+3,0.240E+3,0.29696000E+1,0.39106000E+1 - ,0.32221010E+3,0.245E+3,0.241E+3,0.29696000E+1,0.29225000E+1 - ,0.28693400E+3,0.245E+3,0.242E+3,0.29696000E+1,0.11055600E+2 - ,0.25477490E+3,0.245E+3,0.243E+3,0.29696000E+1,0.95402000E+1 - ,0.24134970E+3,0.245E+3,0.244E+3,0.29696000E+1,0.88895000E+1 - ,0.24465860E+3,0.245E+3,0.245E+3,0.29696000E+1,0.29696000E+1 - ,0.28063100E+2,0.246E+3,0.100E+1,0.57095000E+1,0.91180000E+0 - ,0.19020800E+2,0.246E+3,0.200E+1,0.57095000E+1,0.00000000E+0 - ,0.41221710E+3,0.246E+3,0.300E+1,0.57095000E+1,0.00000000E+0 - ,0.24288250E+3,0.246E+3,0.400E+1,0.57095000E+1,0.00000000E+0 - ,0.16615330E+3,0.246E+3,0.500E+1,0.57095000E+1,0.00000000E+0 - ,0.11391260E+3,0.246E+3,0.600E+1,0.57095000E+1,0.00000000E+0 - ,0.80711800E+2,0.246E+3,0.700E+1,0.57095000E+1,0.00000000E+0 - ,0.61761900E+2,0.246E+3,0.800E+1,0.57095000E+1,0.00000000E+0 - ,0.47264500E+2,0.246E+3,0.900E+1,0.57095000E+1,0.00000000E+0 - ,0.36683700E+2,0.246E+3,0.100E+2,0.57095000E+1,0.00000000E+0 - ,0.49392410E+3,0.246E+3,0.110E+2,0.57095000E+1,0.00000000E+0 - ,0.38571180E+3,0.246E+3,0.120E+2,0.57095000E+1,0.00000000E+0 - ,0.35802870E+3,0.246E+3,0.130E+2,0.57095000E+1,0.00000000E+0 - ,0.28501380E+3,0.246E+3,0.140E+2,0.57095000E+1,0.00000000E+0 - ,0.22452110E+3,0.246E+3,0.150E+2,0.57095000E+1,0.00000000E+0 - ,0.18780070E+3,0.246E+3,0.160E+2,0.57095000E+1,0.00000000E+0 - ,0.15466930E+3,0.246E+3,0.170E+2,0.57095000E+1,0.00000000E+0 - ,0.12754830E+3,0.246E+3,0.180E+2,0.57095000E+1,0.00000000E+0 - ,0.80942550E+3,0.246E+3,0.190E+2,0.57095000E+1,0.00000000E+0 - ,0.67457400E+3,0.246E+3,0.200E+2,0.57095000E+1,0.00000000E+0 - ,0.55875930E+3,0.246E+3,0.210E+2,0.57095000E+1,0.00000000E+0 - ,0.54137410E+3,0.246E+3,0.220E+2,0.57095000E+1,0.00000000E+0 - ,0.49669050E+3,0.246E+3,0.230E+2,0.57095000E+1,0.00000000E+0 - ,0.39222970E+3,0.246E+3,0.240E+2,0.57095000E+1,0.00000000E+0 - ,0.42885090E+3,0.246E+3,0.250E+2,0.57095000E+1,0.00000000E+0 - ,0.33757700E+3,0.246E+3,0.260E+2,0.57095000E+1,0.00000000E+0 - ,0.35837430E+3,0.246E+3,0.270E+2,0.57095000E+1,0.00000000E+0 - ,0.36840320E+3,0.246E+3,0.280E+2,0.57095000E+1,0.00000000E+0 - ,0.28332920E+3,0.246E+3,0.290E+2,0.57095000E+1,0.00000000E+0 - ,0.29187250E+3,0.246E+3,0.300E+2,0.57095000E+1,0.00000000E+0 - ,0.34456860E+3,0.246E+3,0.310E+2,0.57095000E+1,0.00000000E+0 - ,0.30611920E+3,0.246E+3,0.320E+2,0.57095000E+1,0.00000000E+0 - ,0.26318210E+3,0.246E+3,0.330E+2,0.57095000E+1,0.00000000E+0 - ,0.23751920E+3,0.246E+3,0.340E+2,0.57095000E+1,0.00000000E+0 - ,0.20919710E+3,0.246E+3,0.350E+2,0.57095000E+1,0.00000000E+0 - ,0.18310950E+3,0.246E+3,0.360E+2,0.57095000E+1,0.00000000E+0 - ,0.90881520E+3,0.246E+3,0.370E+2,0.57095000E+1,0.00000000E+0 - ,0.80400360E+3,0.246E+3,0.380E+2,0.57095000E+1,0.00000000E+0 - ,0.70783430E+3,0.246E+3,0.390E+2,0.57095000E+1,0.00000000E+0 - ,0.63844630E+3,0.246E+3,0.400E+2,0.57095000E+1,0.00000000E+0 - ,0.58376530E+3,0.246E+3,0.410E+2,0.57095000E+1,0.00000000E+0 - ,0.45332840E+3,0.246E+3,0.420E+2,0.57095000E+1,0.00000000E+0 - ,0.50466070E+3,0.246E+3,0.430E+2,0.57095000E+1,0.00000000E+0 - ,0.38697280E+3,0.246E+3,0.440E+2,0.57095000E+1,0.00000000E+0 - ,0.42232030E+3,0.246E+3,0.450E+2,0.57095000E+1,0.00000000E+0 - ,0.39235480E+3,0.246E+3,0.460E+2,0.57095000E+1,0.00000000E+0 - ,0.32780150E+3,0.246E+3,0.470E+2,0.57095000E+1,0.00000000E+0 - ,0.34660550E+3,0.246E+3,0.480E+2,0.57095000E+1,0.00000000E+0 - ,0.43231830E+3,0.246E+3,0.490E+2,0.57095000E+1,0.00000000E+0 - ,0.40184330E+3,0.246E+3,0.500E+2,0.57095000E+1,0.00000000E+0 - ,0.36034200E+3,0.246E+3,0.510E+2,0.57095000E+1,0.00000000E+0 - ,0.33576050E+3,0.246E+3,0.520E+2,0.57095000E+1,0.00000000E+0 - ,0.30512160E+3,0.246E+3,0.530E+2,0.57095000E+1,0.00000000E+0 - ,0.27575770E+3,0.246E+3,0.540E+2,0.57095000E+1,0.00000000E+0 - ,0.11077988E+4,0.246E+3,0.550E+2,0.57095000E+1,0.00000000E+0 - ,0.10240901E+4,0.246E+3,0.560E+2,0.57095000E+1,0.00000000E+0 - ,0.90399280E+3,0.246E+3,0.570E+2,0.57095000E+1,0.00000000E+0 - ,0.42561430E+3,0.246E+3,0.580E+2,0.57095000E+1,0.27991000E+1 - ,0.90929190E+3,0.246E+3,0.590E+2,0.57095000E+1,0.00000000E+0 - ,0.87375470E+3,0.246E+3,0.600E+2,0.57095000E+1,0.00000000E+0 - ,0.85199520E+3,0.246E+3,0.610E+2,0.57095000E+1,0.00000000E+0 - ,0.83195410E+3,0.246E+3,0.620E+2,0.57095000E+1,0.00000000E+0 - ,0.81418450E+3,0.246E+3,0.630E+2,0.57095000E+1,0.00000000E+0 - ,0.64463620E+3,0.246E+3,0.640E+2,0.57095000E+1,0.00000000E+0 - ,0.72073150E+3,0.246E+3,0.650E+2,0.57095000E+1,0.00000000E+0 - ,0.69578030E+3,0.246E+3,0.660E+2,0.57095000E+1,0.00000000E+0 - ,0.73512820E+3,0.246E+3,0.670E+2,0.57095000E+1,0.00000000E+0 - ,0.71956930E+3,0.246E+3,0.680E+2,0.57095000E+1,0.00000000E+0 - ,0.70559090E+3,0.246E+3,0.690E+2,0.57095000E+1,0.00000000E+0 - ,0.69711310E+3,0.246E+3,0.700E+2,0.57095000E+1,0.00000000E+0 - ,0.59004660E+3,0.246E+3,0.710E+2,0.57095000E+1,0.00000000E+0 - ,0.58295090E+3,0.246E+3,0.720E+2,0.57095000E+1,0.00000000E+0 - ,0.53409830E+3,0.246E+3,0.730E+2,0.57095000E+1,0.00000000E+0 - ,0.45309060E+3,0.246E+3,0.740E+2,0.57095000E+1,0.00000000E+0 - ,0.46141030E+3,0.246E+3,0.750E+2,0.57095000E+1,0.00000000E+0 - ,0.41975000E+3,0.246E+3,0.760E+2,0.57095000E+1,0.00000000E+0 - ,0.38566670E+3,0.246E+3,0.770E+2,0.57095000E+1,0.00000000E+0 - ,0.32198390E+3,0.246E+3,0.780E+2,0.57095000E+1,0.00000000E+0 - ,0.30143730E+3,0.246E+3,0.790E+2,0.57095000E+1,0.00000000E+0 - ,0.31019540E+3,0.246E+3,0.800E+2,0.57095000E+1,0.00000000E+0 - ,0.44555610E+3,0.246E+3,0.810E+2,0.57095000E+1,0.00000000E+0 - ,0.43708990E+3,0.246E+3,0.820E+2,0.57095000E+1,0.00000000E+0 - ,0.40369830E+3,0.246E+3,0.830E+2,0.57095000E+1,0.00000000E+0 - ,0.38631140E+3,0.246E+3,0.840E+2,0.57095000E+1,0.00000000E+0 - ,0.35811890E+3,0.246E+3,0.850E+2,0.57095000E+1,0.00000000E+0 - ,0.32972180E+3,0.246E+3,0.860E+2,0.57095000E+1,0.00000000E+0 - ,0.10501750E+4,0.246E+3,0.870E+2,0.57095000E+1,0.00000000E+0 - ,0.10154760E+4,0.246E+3,0.880E+2,0.57095000E+1,0.00000000E+0 - ,0.90160180E+3,0.246E+3,0.890E+2,0.57095000E+1,0.00000000E+0 - ,0.81526350E+3,0.246E+3,0.900E+2,0.57095000E+1,0.00000000E+0 - ,0.80784930E+3,0.246E+3,0.910E+2,0.57095000E+1,0.00000000E+0 - ,0.78242750E+3,0.246E+3,0.920E+2,0.57095000E+1,0.00000000E+0 - ,0.80290250E+3,0.246E+3,0.930E+2,0.57095000E+1,0.00000000E+0 - ,0.77797910E+3,0.246E+3,0.940E+2,0.57095000E+1,0.00000000E+0 - ,0.44649800E+2,0.246E+3,0.101E+3,0.57095000E+1,0.00000000E+0 - ,0.14156390E+3,0.246E+3,0.103E+3,0.57095000E+1,0.98650000E+0 - ,0.18118110E+3,0.246E+3,0.104E+3,0.57095000E+1,0.98080000E+0 - ,0.14035990E+3,0.246E+3,0.105E+3,0.57095000E+1,0.97060000E+0 - ,0.10693200E+3,0.246E+3,0.106E+3,0.57095000E+1,0.98680000E+0 - ,0.75363600E+2,0.246E+3,0.107E+3,0.57095000E+1,0.99440000E+0 - ,0.55574400E+2,0.246E+3,0.108E+3,0.57095000E+1,0.99250000E+0 - ,0.38869700E+2,0.246E+3,0.109E+3,0.57095000E+1,0.99820000E+0 - ,0.20679400E+3,0.246E+3,0.111E+3,0.57095000E+1,0.96840000E+0 - ,0.31921760E+3,0.246E+3,0.112E+3,0.57095000E+1,0.96280000E+0 - ,0.32513700E+3,0.246E+3,0.113E+3,0.57095000E+1,0.96480000E+0 - ,0.26392340E+3,0.246E+3,0.114E+3,0.57095000E+1,0.95070000E+0 - ,0.21806750E+3,0.246E+3,0.115E+3,0.57095000E+1,0.99470000E+0 - ,0.18573680E+3,0.246E+3,0.116E+3,0.57095000E+1,0.99480000E+0 - ,0.15307080E+3,0.246E+3,0.117E+3,0.57095000E+1,0.99720000E+0 - ,0.28782600E+3,0.246E+3,0.119E+3,0.57095000E+1,0.97670000E+0 - ,0.54107730E+3,0.246E+3,0.120E+3,0.57095000E+1,0.98310000E+0 - ,0.28949650E+3,0.246E+3,0.121E+3,0.57095000E+1,0.18627000E+1 - ,0.27971050E+3,0.246E+3,0.122E+3,0.57095000E+1,0.18299000E+1 - ,0.27414900E+3,0.246E+3,0.123E+3,0.57095000E+1,0.19138000E+1 - ,0.27142500E+3,0.246E+3,0.124E+3,0.57095000E+1,0.18269000E+1 - ,0.25071870E+3,0.246E+3,0.125E+3,0.57095000E+1,0.16406000E+1 - ,0.23247500E+3,0.246E+3,0.126E+3,0.57095000E+1,0.16483000E+1 - ,0.22187670E+3,0.246E+3,0.127E+3,0.57095000E+1,0.17149000E+1 - ,0.21686020E+3,0.246E+3,0.128E+3,0.57095000E+1,0.17937000E+1 - ,0.21363790E+3,0.246E+3,0.129E+3,0.57095000E+1,0.95760000E+0 - ,0.20155080E+3,0.246E+3,0.130E+3,0.57095000E+1,0.19419000E+1 - ,0.32427260E+3,0.246E+3,0.131E+3,0.57095000E+1,0.96010000E+0 - ,0.28698700E+3,0.246E+3,0.132E+3,0.57095000E+1,0.94340000E+0 - ,0.25886990E+3,0.246E+3,0.133E+3,0.57095000E+1,0.98890000E+0 - ,0.23760650E+3,0.246E+3,0.134E+3,0.57095000E+1,0.99010000E+0 - ,0.21059700E+3,0.246E+3,0.135E+3,0.57095000E+1,0.99740000E+0 - ,0.34426700E+3,0.246E+3,0.137E+3,0.57095000E+1,0.97380000E+0 - ,0.65851960E+3,0.246E+3,0.138E+3,0.57095000E+1,0.98010000E+0 - ,0.50868390E+3,0.246E+3,0.139E+3,0.57095000E+1,0.19153000E+1 - ,0.38304250E+3,0.246E+3,0.140E+3,0.57095000E+1,0.19355000E+1 - ,0.38685740E+3,0.246E+3,0.141E+3,0.57095000E+1,0.19545000E+1 - ,0.36157810E+3,0.246E+3,0.142E+3,0.57095000E+1,0.19420000E+1 - ,0.40341880E+3,0.246E+3,0.143E+3,0.57095000E+1,0.16682000E+1 - ,0.31674990E+3,0.246E+3,0.144E+3,0.57095000E+1,0.18584000E+1 - ,0.29669340E+3,0.246E+3,0.145E+3,0.57095000E+1,0.19003000E+1 - ,0.27595750E+3,0.246E+3,0.146E+3,0.57095000E+1,0.18630000E+1 - ,0.26684590E+3,0.246E+3,0.147E+3,0.57095000E+1,0.96790000E+0 - ,0.26459410E+3,0.246E+3,0.148E+3,0.57095000E+1,0.19539000E+1 - ,0.41294080E+3,0.246E+3,0.149E+3,0.57095000E+1,0.96330000E+0 - ,0.37573450E+3,0.246E+3,0.150E+3,0.57095000E+1,0.95140000E+0 - ,0.35348570E+3,0.246E+3,0.151E+3,0.57095000E+1,0.97490000E+0 - ,0.33559490E+3,0.246E+3,0.152E+3,0.57095000E+1,0.98110000E+0 - ,0.30794100E+3,0.246E+3,0.153E+3,0.57095000E+1,0.99680000E+0 - ,0.40861880E+3,0.246E+3,0.155E+3,0.57095000E+1,0.99090000E+0 - ,0.85276800E+3,0.246E+3,0.156E+3,0.57095000E+1,0.97970000E+0 - ,0.64344430E+3,0.246E+3,0.157E+3,0.57095000E+1,0.19373000E+1 - ,0.41297590E+3,0.246E+3,0.159E+3,0.57095000E+1,0.29425000E+1 - ,0.40447640E+3,0.246E+3,0.160E+3,0.57095000E+1,0.29455000E+1 - ,0.39181900E+3,0.246E+3,0.161E+3,0.57095000E+1,0.29413000E+1 - ,0.39338030E+3,0.246E+3,0.162E+3,0.57095000E+1,0.29300000E+1 - ,0.37830190E+3,0.246E+3,0.163E+3,0.57095000E+1,0.18286000E+1 - ,0.39560900E+3,0.246E+3,0.164E+3,0.57095000E+1,0.28732000E+1 - ,0.37196670E+3,0.246E+3,0.165E+3,0.57095000E+1,0.29086000E+1 - ,0.37790420E+3,0.246E+3,0.166E+3,0.57095000E+1,0.28965000E+1 - ,0.35332080E+3,0.246E+3,0.167E+3,0.57095000E+1,0.29242000E+1 - ,0.34335820E+3,0.246E+3,0.168E+3,0.57095000E+1,0.29282000E+1 - ,0.34104430E+3,0.246E+3,0.169E+3,0.57095000E+1,0.29246000E+1 - ,0.35776850E+3,0.246E+3,0.170E+3,0.57095000E+1,0.28482000E+1 - ,0.32975260E+3,0.246E+3,0.171E+3,0.57095000E+1,0.29219000E+1 - ,0.44211340E+3,0.246E+3,0.172E+3,0.57095000E+1,0.19254000E+1 - ,0.41196690E+3,0.246E+3,0.173E+3,0.57095000E+1,0.19459000E+1 - ,0.37750500E+3,0.246E+3,0.174E+3,0.57095000E+1,0.19292000E+1 - ,0.38078680E+3,0.246E+3,0.175E+3,0.57095000E+1,0.18104000E+1 - ,0.33644710E+3,0.246E+3,0.176E+3,0.57095000E+1,0.18858000E+1 - ,0.31720710E+3,0.246E+3,0.177E+3,0.57095000E+1,0.18648000E+1 - ,0.30342150E+3,0.246E+3,0.178E+3,0.57095000E+1,0.19188000E+1 - ,0.29030040E+3,0.246E+3,0.179E+3,0.57095000E+1,0.98460000E+0 - ,0.28128840E+3,0.246E+3,0.180E+3,0.57095000E+1,0.19896000E+1 - ,0.44468180E+3,0.246E+3,0.181E+3,0.57095000E+1,0.92670000E+0 - ,0.40753420E+3,0.246E+3,0.182E+3,0.57095000E+1,0.93830000E+0 - ,0.39643040E+3,0.246E+3,0.183E+3,0.57095000E+1,0.98200000E+0 - ,0.38655960E+3,0.246E+3,0.184E+3,0.57095000E+1,0.98150000E+0 - ,0.36242110E+3,0.246E+3,0.185E+3,0.57095000E+1,0.99540000E+0 - ,0.46028590E+3,0.246E+3,0.187E+3,0.57095000E+1,0.97050000E+0 - ,0.85084330E+3,0.246E+3,0.188E+3,0.57095000E+1,0.96620000E+0 - ,0.48843100E+3,0.246E+3,0.189E+3,0.57095000E+1,0.29070000E+1 - ,0.56129360E+3,0.246E+3,0.190E+3,0.57095000E+1,0.28844000E+1 - ,0.50330170E+3,0.246E+3,0.191E+3,0.57095000E+1,0.28738000E+1 - ,0.44649080E+3,0.246E+3,0.192E+3,0.57095000E+1,0.28878000E+1 - ,0.43011690E+3,0.246E+3,0.193E+3,0.57095000E+1,0.29095000E+1 - ,0.51213360E+3,0.246E+3,0.194E+3,0.57095000E+1,0.19209000E+1 - ,0.11979600E+3,0.246E+3,0.204E+3,0.57095000E+1,0.19697000E+1 - ,0.11834870E+3,0.246E+3,0.205E+3,0.57095000E+1,0.19441000E+1 - ,0.87732000E+2,0.246E+3,0.206E+3,0.57095000E+1,0.19985000E+1 - ,0.70890900E+2,0.246E+3,0.207E+3,0.57095000E+1,0.20143000E+1 - ,0.49262900E+2,0.246E+3,0.208E+3,0.57095000E+1,0.19887000E+1 - ,0.21108310E+3,0.246E+3,0.212E+3,0.57095000E+1,0.19496000E+1 - ,0.25499480E+3,0.246E+3,0.213E+3,0.57095000E+1,0.19311000E+1 - ,0.24589890E+3,0.246E+3,0.214E+3,0.57095000E+1,0.19435000E+1 - ,0.21505640E+3,0.246E+3,0.215E+3,0.57095000E+1,0.20102000E+1 - ,0.18203880E+3,0.246E+3,0.216E+3,0.57095000E+1,0.19903000E+1 - ,0.29681460E+3,0.246E+3,0.220E+3,0.57095000E+1,0.19349000E+1 - ,0.28630250E+3,0.246E+3,0.221E+3,0.57095000E+1,0.28999000E+1 - ,0.28995300E+3,0.246E+3,0.222E+3,0.57095000E+1,0.38675000E+1 - ,0.26557670E+3,0.246E+3,0.223E+3,0.57095000E+1,0.29110000E+1 - ,0.20190070E+3,0.246E+3,0.224E+3,0.57095000E+1,0.10619100E+2 - ,0.17364950E+3,0.246E+3,0.225E+3,0.57095000E+1,0.98849000E+1 - ,0.17037740E+3,0.246E+3,0.226E+3,0.57095000E+1,0.91376000E+1 - ,0.19810080E+3,0.246E+3,0.227E+3,0.57095000E+1,0.29263000E+1 - ,0.18495540E+3,0.246E+3,0.228E+3,0.57095000E+1,0.65458000E+1 - ,0.25878790E+3,0.246E+3,0.231E+3,0.57095000E+1,0.19315000E+1 - ,0.27362340E+3,0.246E+3,0.232E+3,0.57095000E+1,0.19447000E+1 - ,0.25230300E+3,0.246E+3,0.233E+3,0.57095000E+1,0.19793000E+1 - ,0.23579430E+3,0.246E+3,0.234E+3,0.57095000E+1,0.19812000E+1 - ,0.35611480E+3,0.246E+3,0.238E+3,0.57095000E+1,0.19143000E+1 - ,0.34430530E+3,0.246E+3,0.239E+3,0.57095000E+1,0.28903000E+1 - ,0.34779920E+3,0.246E+3,0.240E+3,0.57095000E+1,0.39106000E+1 - ,0.33655350E+3,0.246E+3,0.241E+3,0.57095000E+1,0.29225000E+1 - ,0.29922510E+3,0.246E+3,0.242E+3,0.57095000E+1,0.11055600E+2 - ,0.26533520E+3,0.246E+3,0.243E+3,0.57095000E+1,0.95402000E+1 - ,0.25122310E+3,0.246E+3,0.244E+3,0.57095000E+1,0.88895000E+1 - ,0.25497130E+3,0.246E+3,0.245E+3,0.57095000E+1,0.29696000E+1 - ,0.26587460E+3,0.246E+3,0.246E+3,0.57095000E+1,0.57095000E+1 - ,0.34893100E+2,0.249E+3,0.100E+1,0.19378000E+1,0.91180000E+0 - ,0.22907600E+2,0.249E+3,0.200E+1,0.19378000E+1,0.00000000E+0 - ,0.56526540E+3,0.249E+3,0.300E+1,0.19378000E+1,0.00000000E+0 - ,0.32028070E+3,0.249E+3,0.400E+1,0.19378000E+1,0.00000000E+0 - ,0.21344840E+3,0.249E+3,0.500E+1,0.19378000E+1,0.00000000E+0 - ,0.14316020E+3,0.249E+3,0.600E+1,0.19378000E+1,0.00000000E+0 - ,0.99643500E+2,0.249E+3,0.700E+1,0.19378000E+1,0.00000000E+0 - ,0.75235100E+2,0.249E+3,0.800E+1,0.19378000E+1,0.00000000E+0 - ,0.56892200E+2,0.249E+3,0.900E+1,0.19378000E+1,0.00000000E+0 - ,0.43721500E+2,0.249E+3,0.100E+2,0.19378000E+1,0.00000000E+0 - ,0.67522680E+3,0.249E+3,0.110E+2,0.19378000E+1,0.00000000E+0 - ,0.51209020E+3,0.249E+3,0.120E+2,0.19378000E+1,0.00000000E+0 - ,0.46945400E+3,0.249E+3,0.130E+2,0.19378000E+1,0.00000000E+0 - ,0.36720280E+3,0.249E+3,0.140E+2,0.19378000E+1,0.00000000E+0 - ,0.28461460E+3,0.249E+3,0.150E+2,0.19378000E+1,0.00000000E+0 - ,0.23533010E+3,0.249E+3,0.160E+2,0.19378000E+1,0.00000000E+0 - ,0.19158160E+3,0.249E+3,0.170E+2,0.19378000E+1,0.00000000E+0 - ,0.15631790E+3,0.249E+3,0.180E+2,0.19378000E+1,0.00000000E+0 - ,0.11101907E+4,0.249E+3,0.190E+2,0.19378000E+1,0.00000000E+0 - ,0.90511860E+3,0.249E+3,0.200E+2,0.19378000E+1,0.00000000E+0 - ,0.74582820E+3,0.249E+3,0.210E+2,0.19378000E+1,0.00000000E+0 - ,0.71855370E+3,0.249E+3,0.220E+2,0.19378000E+1,0.00000000E+0 - ,0.65710020E+3,0.249E+3,0.230E+2,0.19378000E+1,0.00000000E+0 - ,0.51754970E+3,0.249E+3,0.240E+2,0.19378000E+1,0.00000000E+0 - ,0.56463620E+3,0.249E+3,0.250E+2,0.19378000E+1,0.00000000E+0 - ,0.44298550E+3,0.249E+3,0.260E+2,0.19378000E+1,0.00000000E+0 - ,0.46815800E+3,0.249E+3,0.270E+2,0.19378000E+1,0.00000000E+0 - ,0.48295770E+3,0.249E+3,0.280E+2,0.19378000E+1,0.00000000E+0 - ,0.37028130E+3,0.249E+3,0.290E+2,0.19378000E+1,0.00000000E+0 - ,0.37846340E+3,0.249E+3,0.300E+2,0.19378000E+1,0.00000000E+0 - ,0.44874480E+3,0.249E+3,0.310E+2,0.19378000E+1,0.00000000E+0 - ,0.39348230E+3,0.249E+3,0.320E+2,0.19378000E+1,0.00000000E+0 - ,0.33391140E+3,0.249E+3,0.330E+2,0.19378000E+1,0.00000000E+0 - ,0.29869330E+3,0.249E+3,0.340E+2,0.19378000E+1,0.00000000E+0 - ,0.26059250E+3,0.249E+3,0.350E+2,0.19378000E+1,0.00000000E+0 - ,0.22602150E+3,0.249E+3,0.360E+2,0.19378000E+1,0.00000000E+0 - ,0.12430036E+4,0.249E+3,0.370E+2,0.19378000E+1,0.00000000E+0 - ,0.10788447E+4,0.249E+3,0.380E+2,0.19378000E+1,0.00000000E+0 - ,0.94063630E+3,0.249E+3,0.390E+2,0.19378000E+1,0.00000000E+0 - ,0.84295940E+3,0.249E+3,0.400E+2,0.19378000E+1,0.00000000E+0 - ,0.76722430E+3,0.249E+3,0.410E+2,0.19378000E+1,0.00000000E+0 - ,0.59040500E+3,0.249E+3,0.420E+2,0.19378000E+1,0.00000000E+0 - ,0.65957470E+3,0.249E+3,0.430E+2,0.19378000E+1,0.00000000E+0 - ,0.50072770E+3,0.249E+3,0.440E+2,0.19378000E+1,0.00000000E+0 - ,0.54733000E+3,0.249E+3,0.450E+2,0.19378000E+1,0.00000000E+0 - ,0.50698660E+3,0.249E+3,0.460E+2,0.19378000E+1,0.00000000E+0 - ,0.42310210E+3,0.249E+3,0.470E+2,0.19378000E+1,0.00000000E+0 - ,0.44611840E+3,0.249E+3,0.480E+2,0.19378000E+1,0.00000000E+0 - ,0.56190060E+3,0.249E+3,0.490E+2,0.19378000E+1,0.00000000E+0 - ,0.51714790E+3,0.249E+3,0.500E+2,0.19378000E+1,0.00000000E+0 - ,0.45876760E+3,0.249E+3,0.510E+2,0.19378000E+1,0.00000000E+0 - ,0.42447180E+3,0.249E+3,0.520E+2,0.19378000E+1,0.00000000E+0 - ,0.38268090E+3,0.249E+3,0.530E+2,0.19378000E+1,0.00000000E+0 - ,0.34312810E+3,0.249E+3,0.540E+2,0.19378000E+1,0.00000000E+0 - ,0.15141166E+4,0.249E+3,0.550E+2,0.19378000E+1,0.00000000E+0 - ,0.13775185E+4,0.249E+3,0.560E+2,0.19378000E+1,0.00000000E+0 - ,0.12045072E+4,0.249E+3,0.570E+2,0.19378000E+1,0.00000000E+0 - ,0.54238350E+3,0.249E+3,0.580E+2,0.19378000E+1,0.27991000E+1 - ,0.12188063E+4,0.249E+3,0.590E+2,0.19378000E+1,0.00000000E+0 - ,0.11693656E+4,0.249E+3,0.600E+2,0.19378000E+1,0.00000000E+0 - ,0.11397842E+4,0.249E+3,0.610E+2,0.19378000E+1,0.00000000E+0 - ,0.11126065E+4,0.249E+3,0.620E+2,0.19378000E+1,0.00000000E+0 - ,0.10884965E+4,0.249E+3,0.630E+2,0.19378000E+1,0.00000000E+0 - ,0.85158160E+3,0.249E+3,0.640E+2,0.19378000E+1,0.00000000E+0 - ,0.96631820E+3,0.249E+3,0.650E+2,0.19378000E+1,0.00000000E+0 - ,0.93121350E+3,0.249E+3,0.660E+2,0.19378000E+1,0.00000000E+0 - ,0.98060600E+3,0.249E+3,0.670E+2,0.19378000E+1,0.00000000E+0 - ,0.95967190E+3,0.249E+3,0.680E+2,0.19378000E+1,0.00000000E+0 - ,0.94073330E+3,0.249E+3,0.690E+2,0.19378000E+1,0.00000000E+0 - ,0.92993260E+3,0.249E+3,0.700E+2,0.19378000E+1,0.00000000E+0 - ,0.78085310E+3,0.249E+3,0.710E+2,0.19378000E+1,0.00000000E+0 - ,0.76411810E+3,0.249E+3,0.720E+2,0.19378000E+1,0.00000000E+0 - ,0.69534460E+3,0.249E+3,0.730E+2,0.19378000E+1,0.00000000E+0 - ,0.58588080E+3,0.249E+3,0.740E+2,0.19378000E+1,0.00000000E+0 - ,0.59538900E+3,0.249E+3,0.750E+2,0.19378000E+1,0.00000000E+0 - ,0.53831140E+3,0.249E+3,0.760E+2,0.19378000E+1,0.00000000E+0 - ,0.49206190E+3,0.249E+3,0.770E+2,0.19378000E+1,0.00000000E+0 - ,0.40798400E+3,0.249E+3,0.780E+2,0.19378000E+1,0.00000000E+0 - ,0.38091340E+3,0.249E+3,0.790E+2,0.19378000E+1,0.00000000E+0 - ,0.39149310E+3,0.249E+3,0.800E+2,0.19378000E+1,0.00000000E+0 - ,0.57627840E+3,0.249E+3,0.810E+2,0.19378000E+1,0.00000000E+0 - ,0.56137620E+3,0.249E+3,0.820E+2,0.19378000E+1,0.00000000E+0 - ,0.51373240E+3,0.249E+3,0.830E+2,0.19378000E+1,0.00000000E+0 - ,0.48880570E+3,0.249E+3,0.840E+2,0.19378000E+1,0.00000000E+0 - ,0.44985640E+3,0.249E+3,0.850E+2,0.19378000E+1,0.00000000E+0 - ,0.41128990E+3,0.249E+3,0.860E+2,0.19378000E+1,0.00000000E+0 - ,0.14239693E+4,0.249E+3,0.870E+2,0.19378000E+1,0.00000000E+0 - ,0.13587684E+4,0.249E+3,0.880E+2,0.19378000E+1,0.00000000E+0 - ,0.11959642E+4,0.249E+3,0.890E+2,0.19378000E+1,0.00000000E+0 - ,0.10695257E+4,0.249E+3,0.900E+2,0.19378000E+1,0.00000000E+0 - ,0.10645406E+4,0.249E+3,0.910E+2,0.19378000E+1,0.00000000E+0 - ,0.10306377E+4,0.249E+3,0.920E+2,0.19378000E+1,0.00000000E+0 - ,0.10644434E+4,0.249E+3,0.930E+2,0.19378000E+1,0.00000000E+0 - ,0.10302277E+4,0.249E+3,0.940E+2,0.19378000E+1,0.00000000E+0 - ,0.56518900E+2,0.249E+3,0.101E+3,0.19378000E+1,0.00000000E+0 - ,0.18591700E+3,0.249E+3,0.103E+3,0.19378000E+1,0.98650000E+0 - ,0.23667710E+3,0.249E+3,0.104E+3,0.19378000E+1,0.98080000E+0 - ,0.17917550E+3,0.249E+3,0.105E+3,0.19378000E+1,0.97060000E+0 - ,0.13430140E+3,0.249E+3,0.106E+3,0.19378000E+1,0.98680000E+0 - ,0.92908600E+2,0.249E+3,0.107E+3,0.19378000E+1,0.99440000E+0 - ,0.67419300E+2,0.249E+3,0.108E+3,0.19378000E+1,0.99250000E+0 - ,0.46208200E+2,0.249E+3,0.109E+3,0.19378000E+1,0.99820000E+0 - ,0.27237350E+3,0.249E+3,0.111E+3,0.19378000E+1,0.96840000E+0 - ,0.42155730E+3,0.249E+3,0.112E+3,0.19378000E+1,0.96280000E+0 - ,0.42489670E+3,0.249E+3,0.113E+3,0.19378000E+1,0.96480000E+0 - ,0.33903150E+3,0.249E+3,0.114E+3,0.19378000E+1,0.95070000E+0 - ,0.27621540E+3,0.249E+3,0.115E+3,0.19378000E+1,0.99470000E+0 - ,0.23276490E+3,0.249E+3,0.116E+3,0.19378000E+1,0.99480000E+0 - ,0.18961390E+3,0.249E+3,0.117E+3,0.19378000E+1,0.99720000E+0 - ,0.37405850E+3,0.249E+3,0.119E+3,0.19378000E+1,0.97670000E+0 - ,0.72398140E+3,0.249E+3,0.120E+3,0.19378000E+1,0.98310000E+0 - ,0.37201170E+3,0.249E+3,0.121E+3,0.19378000E+1,0.18627000E+1 - ,0.35910570E+3,0.249E+3,0.122E+3,0.19378000E+1,0.18299000E+1 - ,0.35198070E+3,0.249E+3,0.123E+3,0.19378000E+1,0.19138000E+1 - ,0.34899300E+3,0.249E+3,0.124E+3,0.19378000E+1,0.18269000E+1 - ,0.32004310E+3,0.249E+3,0.125E+3,0.19378000E+1,0.16406000E+1 - ,0.29592090E+3,0.249E+3,0.126E+3,0.19378000E+1,0.16483000E+1 - ,0.28231300E+3,0.249E+3,0.127E+3,0.19378000E+1,0.17149000E+1 - ,0.27608710E+3,0.249E+3,0.128E+3,0.19378000E+1,0.17937000E+1 - ,0.27351670E+3,0.249E+3,0.129E+3,0.19378000E+1,0.95760000E+0 - ,0.25541010E+3,0.249E+3,0.130E+3,0.19378000E+1,0.19419000E+1 - ,0.42085570E+3,0.249E+3,0.131E+3,0.19378000E+1,0.96010000E+0 - ,0.36762820E+3,0.249E+3,0.132E+3,0.19378000E+1,0.94340000E+0 - ,0.32815180E+3,0.249E+3,0.133E+3,0.19378000E+1,0.98890000E+0 - ,0.29882440E+3,0.249E+3,0.134E+3,0.19378000E+1,0.99010000E+0 - ,0.26244940E+3,0.249E+3,0.135E+3,0.19378000E+1,0.99740000E+0 - ,0.44576050E+3,0.249E+3,0.137E+3,0.19378000E+1,0.97380000E+0 - ,0.88157390E+3,0.249E+3,0.138E+3,0.19378000E+1,0.98010000E+0 - ,0.66764710E+3,0.249E+3,0.139E+3,0.19378000E+1,0.19153000E+1 - ,0.49222910E+3,0.249E+3,0.140E+3,0.19378000E+1,0.19355000E+1 - ,0.49713820E+3,0.249E+3,0.141E+3,0.19378000E+1,0.19545000E+1 - ,0.46306700E+3,0.249E+3,0.142E+3,0.19378000E+1,0.19420000E+1 - ,0.52169780E+3,0.249E+3,0.143E+3,0.19378000E+1,0.16682000E+1 - ,0.40238250E+3,0.249E+3,0.144E+3,0.19378000E+1,0.18584000E+1 - ,0.37636250E+3,0.249E+3,0.145E+3,0.19378000E+1,0.19003000E+1 - ,0.34931490E+3,0.249E+3,0.146E+3,0.19378000E+1,0.18630000E+1 - ,0.33811650E+3,0.249E+3,0.147E+3,0.19378000E+1,0.96790000E+0 - ,0.33364080E+3,0.249E+3,0.148E+3,0.19378000E+1,0.19539000E+1 - ,0.53472480E+3,0.249E+3,0.149E+3,0.19378000E+1,0.96330000E+0 - ,0.48141850E+3,0.249E+3,0.150E+3,0.19378000E+1,0.95140000E+0 - ,0.44934480E+3,0.249E+3,0.151E+3,0.19378000E+1,0.97490000E+0 - ,0.42408620E+3,0.249E+3,0.152E+3,0.19378000E+1,0.98110000E+0 - ,0.38628580E+3,0.249E+3,0.153E+3,0.19378000E+1,0.99680000E+0 - ,0.52507760E+3,0.249E+3,0.155E+3,0.19378000E+1,0.99090000E+0 - ,0.11453931E+4,0.249E+3,0.156E+3,0.19378000E+1,0.97970000E+0 - ,0.84571730E+3,0.249E+3,0.157E+3,0.19378000E+1,0.19373000E+1 - ,0.52589560E+3,0.249E+3,0.159E+3,0.19378000E+1,0.29425000E+1 - ,0.51499740E+3,0.249E+3,0.160E+3,0.19378000E+1,0.29455000E+1 - ,0.49856690E+3,0.249E+3,0.161E+3,0.19378000E+1,0.29413000E+1 - ,0.50136870E+3,0.249E+3,0.162E+3,0.19378000E+1,0.29300000E+1 - ,0.48441020E+3,0.249E+3,0.163E+3,0.19378000E+1,0.18286000E+1 - ,0.50462370E+3,0.249E+3,0.164E+3,0.19378000E+1,0.28732000E+1 - ,0.47370770E+3,0.249E+3,0.165E+3,0.19378000E+1,0.29086000E+1 - ,0.48262190E+3,0.249E+3,0.166E+3,0.19378000E+1,0.28965000E+1 - ,0.44936380E+3,0.249E+3,0.167E+3,0.19378000E+1,0.29242000E+1 - ,0.43646450E+3,0.249E+3,0.168E+3,0.19378000E+1,0.29282000E+1 - ,0.43373820E+3,0.249E+3,0.169E+3,0.19378000E+1,0.29246000E+1 - ,0.45634090E+3,0.249E+3,0.170E+3,0.19378000E+1,0.28482000E+1 - ,0.41908700E+3,0.249E+3,0.171E+3,0.19378000E+1,0.29219000E+1 - ,0.57239970E+3,0.249E+3,0.172E+3,0.19378000E+1,0.19254000E+1 - ,0.52974800E+3,0.249E+3,0.173E+3,0.19378000E+1,0.19459000E+1 - ,0.48197450E+3,0.249E+3,0.174E+3,0.19378000E+1,0.19292000E+1 - ,0.48896420E+3,0.249E+3,0.175E+3,0.19378000E+1,0.18104000E+1 - ,0.42523900E+3,0.249E+3,0.176E+3,0.19378000E+1,0.18858000E+1 - ,0.39970400E+3,0.249E+3,0.177E+3,0.19378000E+1,0.18648000E+1 - ,0.38159490E+3,0.249E+3,0.178E+3,0.19378000E+1,0.19188000E+1 - ,0.36491310E+3,0.249E+3,0.179E+3,0.19378000E+1,0.98460000E+0 - ,0.35178910E+3,0.249E+3,0.180E+3,0.19378000E+1,0.19896000E+1 - ,0.57370310E+3,0.249E+3,0.181E+3,0.19378000E+1,0.92670000E+0 - ,0.52042840E+3,0.249E+3,0.182E+3,0.19378000E+1,0.93830000E+0 - ,0.50341800E+3,0.249E+3,0.183E+3,0.19378000E+1,0.98200000E+0 - ,0.48873500E+3,0.249E+3,0.184E+3,0.19378000E+1,0.98150000E+0 - ,0.45527610E+3,0.249E+3,0.185E+3,0.19378000E+1,0.99540000E+0 - ,0.59117920E+3,0.249E+3,0.187E+3,0.19378000E+1,0.97050000E+0 - ,0.11355611E+4,0.249E+3,0.188E+3,0.19378000E+1,0.96620000E+0 - ,0.62234260E+3,0.249E+3,0.189E+3,0.19378000E+1,0.29070000E+1 - ,0.72148760E+3,0.249E+3,0.190E+3,0.19378000E+1,0.28844000E+1 - ,0.64433230E+3,0.249E+3,0.191E+3,0.19378000E+1,0.28738000E+1 - ,0.56739040E+3,0.249E+3,0.192E+3,0.19378000E+1,0.28878000E+1 - ,0.54560930E+3,0.249E+3,0.193E+3,0.19378000E+1,0.29095000E+1 - ,0.66224690E+3,0.249E+3,0.194E+3,0.19378000E+1,0.19209000E+1 - ,0.15292390E+3,0.249E+3,0.204E+3,0.19378000E+1,0.19697000E+1 - ,0.15012670E+3,0.249E+3,0.205E+3,0.19378000E+1,0.19441000E+1 - ,0.10920000E+3,0.249E+3,0.206E+3,0.19378000E+1,0.19985000E+1 - ,0.87207600E+2,0.249E+3,0.207E+3,0.19378000E+1,0.20143000E+1 - ,0.59451100E+2,0.249E+3,0.208E+3,0.19378000E+1,0.19887000E+1 - ,0.27256770E+3,0.249E+3,0.212E+3,0.19378000E+1,0.19496000E+1 - ,0.32959200E+3,0.249E+3,0.213E+3,0.19378000E+1,0.19311000E+1 - ,0.31501770E+3,0.249E+3,0.214E+3,0.19378000E+1,0.19435000E+1 - ,0.27258640E+3,0.249E+3,0.215E+3,0.19378000E+1,0.20102000E+1 - ,0.22804730E+3,0.249E+3,0.216E+3,0.19378000E+1,0.19903000E+1 - ,0.38227200E+3,0.249E+3,0.220E+3,0.19378000E+1,0.19349000E+1 - ,0.36630170E+3,0.249E+3,0.221E+3,0.19378000E+1,0.28999000E+1 - ,0.37073900E+3,0.249E+3,0.222E+3,0.19378000E+1,0.38675000E+1 - ,0.33943990E+3,0.249E+3,0.223E+3,0.19378000E+1,0.29110000E+1 - ,0.25457810E+3,0.249E+3,0.224E+3,0.19378000E+1,0.10619100E+2 - ,0.21724670E+3,0.249E+3,0.225E+3,0.19378000E+1,0.98849000E+1 - ,0.21333730E+3,0.249E+3,0.226E+3,0.19378000E+1,0.91376000E+1 - ,0.25122060E+3,0.249E+3,0.227E+3,0.19378000E+1,0.29263000E+1 - ,0.23374770E+3,0.249E+3,0.228E+3,0.19378000E+1,0.65458000E+1 - ,0.33179130E+3,0.249E+3,0.231E+3,0.19378000E+1,0.19315000E+1 - ,0.34968000E+3,0.249E+3,0.232E+3,0.19378000E+1,0.19447000E+1 - ,0.31937190E+3,0.249E+3,0.233E+3,0.19378000E+1,0.19793000E+1 - ,0.29645520E+3,0.249E+3,0.234E+3,0.19378000E+1,0.19812000E+1 - ,0.45781020E+3,0.249E+3,0.238E+3,0.19378000E+1,0.19143000E+1 - ,0.43894830E+3,0.249E+3,0.239E+3,0.19378000E+1,0.28903000E+1 - ,0.44222600E+3,0.249E+3,0.240E+3,0.19378000E+1,0.39106000E+1 - ,0.42786320E+3,0.249E+3,0.241E+3,0.19378000E+1,0.29225000E+1 - ,0.37713750E+3,0.249E+3,0.242E+3,0.19378000E+1,0.11055600E+2 - ,0.33210880E+3,0.249E+3,0.243E+3,0.19378000E+1,0.95402000E+1 - ,0.31358880E+3,0.249E+3,0.244E+3,0.19378000E+1,0.88895000E+1 - ,0.32040110E+3,0.249E+3,0.245E+3,0.19378000E+1,0.29696000E+1 - ,0.33498740E+3,0.249E+3,0.246E+3,0.19378000E+1,0.57095000E+1 - ,0.42791400E+3,0.249E+3,0.249E+3,0.19378000E+1,0.19378000E+1 - ,0.37912200E+2,0.250E+3,0.100E+1,0.19505000E+1,0.91180000E+0 - ,0.24783300E+2,0.250E+3,0.200E+1,0.19505000E+1,0.00000000E+0 - ,0.61156120E+3,0.250E+3,0.300E+1,0.19505000E+1,0.00000000E+0 - ,0.34839490E+3,0.250E+3,0.400E+1,0.19505000E+1,0.00000000E+0 - ,0.23225130E+3,0.250E+3,0.500E+1,0.19505000E+1,0.00000000E+0 - ,0.15560830E+3,0.250E+3,0.600E+1,0.19505000E+1,0.00000000E+0 - ,0.10812990E+3,0.250E+3,0.700E+1,0.19505000E+1,0.00000000E+0 - ,0.81505800E+2,0.250E+3,0.800E+1,0.19505000E+1,0.00000000E+0 - ,0.61521400E+2,0.250E+3,0.900E+1,0.19505000E+1,0.00000000E+0 - ,0.47194200E+2,0.250E+3,0.100E+2,0.19505000E+1,0.00000000E+0 - ,0.73065870E+3,0.250E+3,0.110E+2,0.19505000E+1,0.00000000E+0 - ,0.55662410E+3,0.250E+3,0.120E+2,0.19505000E+1,0.00000000E+0 - ,0.51060870E+3,0.250E+3,0.130E+2,0.19505000E+1,0.00000000E+0 - ,0.39957740E+3,0.250E+3,0.140E+2,0.19505000E+1,0.00000000E+0 - ,0.30959920E+3,0.250E+3,0.150E+2,0.19505000E+1,0.00000000E+0 - ,0.25580130E+3,0.250E+3,0.160E+2,0.19505000E+1,0.00000000E+0 - ,0.20804020E+3,0.250E+3,0.170E+2,0.19505000E+1,0.00000000E+0 - ,0.16954570E+3,0.250E+3,0.180E+2,0.19505000E+1,0.00000000E+0 - ,0.11982993E+4,0.250E+3,0.190E+2,0.19505000E+1,0.00000000E+0 - ,0.98182060E+3,0.250E+3,0.200E+2,0.19505000E+1,0.00000000E+0 - ,0.80962470E+3,0.250E+3,0.210E+2,0.19505000E+1,0.00000000E+0 - ,0.78020170E+3,0.250E+3,0.220E+2,0.19505000E+1,0.00000000E+0 - ,0.71360600E+3,0.250E+3,0.230E+2,0.19505000E+1,0.00000000E+0 - ,0.56166940E+3,0.250E+3,0.240E+2,0.19505000E+1,0.00000000E+0 - ,0.61332300E+3,0.250E+3,0.250E+2,0.19505000E+1,0.00000000E+0 - ,0.48085880E+3,0.250E+3,0.260E+2,0.19505000E+1,0.00000000E+0 - ,0.50875980E+3,0.250E+3,0.270E+2,0.19505000E+1,0.00000000E+0 - ,0.52479280E+3,0.250E+3,0.280E+2,0.19505000E+1,0.00000000E+0 - ,0.40197520E+3,0.250E+3,0.290E+2,0.19505000E+1,0.00000000E+0 - ,0.41137780E+3,0.250E+3,0.300E+2,0.19505000E+1,0.00000000E+0 - ,0.48787860E+3,0.250E+3,0.310E+2,0.19505000E+1,0.00000000E+0 - ,0.42801030E+3,0.250E+3,0.320E+2,0.19505000E+1,0.00000000E+0 - ,0.36315760E+3,0.250E+3,0.330E+2,0.19505000E+1,0.00000000E+0 - ,0.32471350E+3,0.250E+3,0.340E+2,0.19505000E+1,0.00000000E+0 - ,0.28310510E+3,0.250E+3,0.350E+2,0.19505000E+1,0.00000000E+0 - ,0.24534090E+3,0.250E+3,0.360E+2,0.19505000E+1,0.00000000E+0 - ,0.13416152E+4,0.250E+3,0.370E+2,0.19505000E+1,0.00000000E+0 - ,0.11697495E+4,0.250E+3,0.380E+2,0.19505000E+1,0.00000000E+0 - ,0.10209627E+4,0.250E+3,0.390E+2,0.19505000E+1,0.00000000E+0 - ,0.91534550E+3,0.250E+3,0.400E+2,0.19505000E+1,0.00000000E+0 - ,0.83320500E+3,0.250E+3,0.410E+2,0.19505000E+1,0.00000000E+0 - ,0.64106430E+3,0.250E+3,0.420E+2,0.19505000E+1,0.00000000E+0 - ,0.71622390E+3,0.250E+3,0.430E+2,0.19505000E+1,0.00000000E+0 - ,0.54361040E+3,0.250E+3,0.440E+2,0.19505000E+1,0.00000000E+0 - ,0.59452770E+3,0.250E+3,0.450E+2,0.19505000E+1,0.00000000E+0 - ,0.55071590E+3,0.250E+3,0.460E+2,0.19505000E+1,0.00000000E+0 - ,0.45912190E+3,0.250E+3,0.470E+2,0.19505000E+1,0.00000000E+0 - ,0.48457590E+3,0.250E+3,0.480E+2,0.19505000E+1,0.00000000E+0 - ,0.61033820E+3,0.250E+3,0.490E+2,0.19505000E+1,0.00000000E+0 - ,0.56212760E+3,0.250E+3,0.500E+2,0.19505000E+1,0.00000000E+0 - ,0.49873950E+3,0.250E+3,0.510E+2,0.19505000E+1,0.00000000E+0 - ,0.46138680E+3,0.250E+3,0.520E+2,0.19505000E+1,0.00000000E+0 - ,0.41581730E+3,0.250E+3,0.530E+2,0.19505000E+1,0.00000000E+0 - ,0.37264800E+3,0.250E+3,0.540E+2,0.19505000E+1,0.00000000E+0 - ,0.16336348E+4,0.250E+3,0.550E+2,0.19505000E+1,0.00000000E+0 - ,0.14924625E+4,0.250E+3,0.560E+2,0.19505000E+1,0.00000000E+0 - ,0.13065898E+4,0.250E+3,0.570E+2,0.19505000E+1,0.00000000E+0 - ,0.58945280E+3,0.250E+3,0.580E+2,0.19505000E+1,0.27991000E+1 - ,0.13207683E+4,0.250E+3,0.590E+2,0.19505000E+1,0.00000000E+0 - ,0.12676087E+4,0.250E+3,0.600E+2,0.19505000E+1,0.00000000E+0 - ,0.12356389E+4,0.250E+3,0.610E+2,0.19505000E+1,0.00000000E+0 - ,0.12062616E+4,0.250E+3,0.620E+2,0.19505000E+1,0.00000000E+0 - ,0.11802039E+4,0.250E+3,0.630E+2,0.19505000E+1,0.00000000E+0 - ,0.92388260E+3,0.250E+3,0.640E+2,0.19505000E+1,0.00000000E+0 - ,0.10458286E+4,0.250E+3,0.650E+2,0.19505000E+1,0.00000000E+0 - ,0.10079093E+4,0.250E+3,0.660E+2,0.19505000E+1,0.00000000E+0 - ,0.10636161E+4,0.250E+3,0.670E+2,0.19505000E+1,0.00000000E+0 - ,0.10409736E+4,0.250E+3,0.680E+2,0.19505000E+1,0.00000000E+0 - ,0.10204995E+4,0.250E+3,0.690E+2,0.19505000E+1,0.00000000E+0 - ,0.10087709E+4,0.250E+3,0.700E+2,0.19505000E+1,0.00000000E+0 - ,0.84732020E+3,0.250E+3,0.710E+2,0.19505000E+1,0.00000000E+0 - ,0.83014100E+3,0.250E+3,0.720E+2,0.19505000E+1,0.00000000E+0 - ,0.75559170E+3,0.250E+3,0.730E+2,0.19505000E+1,0.00000000E+0 - ,0.63637500E+3,0.250E+3,0.740E+2,0.19505000E+1,0.00000000E+0 - ,0.64685600E+3,0.250E+3,0.750E+2,0.19505000E+1,0.00000000E+0 - ,0.58485060E+3,0.250E+3,0.760E+2,0.19505000E+1,0.00000000E+0 - ,0.53455500E+3,0.250E+3,0.770E+2,0.19505000E+1,0.00000000E+0 - ,0.44293230E+3,0.250E+3,0.780E+2,0.19505000E+1,0.00000000E+0 - ,0.41343530E+3,0.250E+3,0.790E+2,0.19505000E+1,0.00000000E+0 - ,0.42506050E+3,0.250E+3,0.800E+2,0.19505000E+1,0.00000000E+0 - ,0.62552300E+3,0.250E+3,0.810E+2,0.19505000E+1,0.00000000E+0 - ,0.60984910E+3,0.250E+3,0.820E+2,0.19505000E+1,0.00000000E+0 - ,0.55825050E+3,0.250E+3,0.830E+2,0.19505000E+1,0.00000000E+0 - ,0.53115730E+3,0.250E+3,0.840E+2,0.19505000E+1,0.00000000E+0 - ,0.48873370E+3,0.250E+3,0.850E+2,0.19505000E+1,0.00000000E+0 - ,0.44666830E+3,0.250E+3,0.860E+2,0.19505000E+1,0.00000000E+0 - ,0.15382573E+4,0.250E+3,0.870E+2,0.19505000E+1,0.00000000E+0 - ,0.14729117E+4,0.250E+3,0.880E+2,0.19505000E+1,0.00000000E+0 - ,0.12978097E+4,0.250E+3,0.890E+2,0.19505000E+1,0.00000000E+0 - ,0.11613917E+4,0.250E+3,0.900E+2,0.19505000E+1,0.00000000E+0 - ,0.11551516E+4,0.250E+3,0.910E+2,0.19505000E+1,0.00000000E+0 - ,0.11183627E+4,0.250E+3,0.920E+2,0.19505000E+1,0.00000000E+0 - ,0.11544374E+4,0.250E+3,0.930E+2,0.19505000E+1,0.00000000E+0 - ,0.11174761E+4,0.250E+3,0.940E+2,0.19505000E+1,0.00000000E+0 - ,0.61486800E+2,0.250E+3,0.101E+3,0.19505000E+1,0.00000000E+0 - ,0.20220530E+3,0.250E+3,0.103E+3,0.19505000E+1,0.98650000E+0 - ,0.25735510E+3,0.250E+3,0.104E+3,0.19505000E+1,0.98080000E+0 - ,0.19488950E+3,0.250E+3,0.105E+3,0.19505000E+1,0.97060000E+0 - ,0.14592740E+3,0.250E+3,0.106E+3,0.19505000E+1,0.98680000E+0 - ,0.10078260E+3,0.250E+3,0.107E+3,0.19505000E+1,0.99440000E+0 - ,0.72992300E+2,0.250E+3,0.108E+3,0.19505000E+1,0.99250000E+0 - ,0.49877800E+2,0.250E+3,0.109E+3,0.19505000E+1,0.99820000E+0 - ,0.29601550E+3,0.250E+3,0.111E+3,0.19505000E+1,0.96840000E+0 - ,0.45814250E+3,0.250E+3,0.112E+3,0.19505000E+1,0.96280000E+0 - ,0.46215210E+3,0.250E+3,0.113E+3,0.19505000E+1,0.96480000E+0 - ,0.36887960E+3,0.250E+3,0.114E+3,0.19505000E+1,0.95070000E+0 - ,0.30043180E+3,0.250E+3,0.115E+3,0.19505000E+1,0.99470000E+0 - ,0.25300030E+3,0.250E+3,0.116E+3,0.19505000E+1,0.99480000E+0 - ,0.20589540E+3,0.250E+3,0.117E+3,0.19505000E+1,0.99720000E+0 - ,0.40608450E+3,0.250E+3,0.119E+3,0.19505000E+1,0.97670000E+0 - ,0.78442190E+3,0.250E+3,0.120E+3,0.19505000E+1,0.98310000E+0 - ,0.40440960E+3,0.250E+3,0.121E+3,0.19505000E+1,0.18627000E+1 - ,0.39026550E+3,0.250E+3,0.122E+3,0.19505000E+1,0.18299000E+1 - ,0.38249970E+3,0.250E+3,0.123E+3,0.19505000E+1,0.19138000E+1 - ,0.37920210E+3,0.250E+3,0.124E+3,0.19505000E+1,0.18269000E+1 - ,0.34791510E+3,0.250E+3,0.125E+3,0.19505000E+1,0.16406000E+1 - ,0.32164840E+3,0.250E+3,0.126E+3,0.19505000E+1,0.16483000E+1 - ,0.30680410E+3,0.250E+3,0.127E+3,0.19505000E+1,0.17149000E+1 - ,0.30002320E+3,0.250E+3,0.128E+3,0.19505000E+1,0.17937000E+1 - ,0.29714060E+3,0.250E+3,0.129E+3,0.19505000E+1,0.95760000E+0 - ,0.27760830E+3,0.250E+3,0.130E+3,0.19505000E+1,0.19419000E+1 - ,0.45760310E+3,0.250E+3,0.131E+3,0.19505000E+1,0.96010000E+0 - ,0.39986460E+3,0.250E+3,0.132E+3,0.19505000E+1,0.94340000E+0 - ,0.35687340E+3,0.250E+3,0.133E+3,0.19505000E+1,0.98890000E+0 - ,0.32485020E+3,0.250E+3,0.134E+3,0.19505000E+1,0.99010000E+0 - ,0.28512610E+3,0.250E+3,0.135E+3,0.19505000E+1,0.99740000E+0 - ,0.48384610E+3,0.250E+3,0.137E+3,0.19505000E+1,0.97380000E+0 - ,0.95464460E+3,0.250E+3,0.138E+3,0.19505000E+1,0.98010000E+0 - ,0.72429340E+3,0.250E+3,0.139E+3,0.19505000E+1,0.19153000E+1 - ,0.53482740E+3,0.250E+3,0.140E+3,0.19505000E+1,0.19355000E+1 - ,0.54017920E+3,0.250E+3,0.141E+3,0.19505000E+1,0.19545000E+1 - ,0.50302360E+3,0.250E+3,0.142E+3,0.19505000E+1,0.19420000E+1 - ,0.56629020E+3,0.250E+3,0.143E+3,0.19505000E+1,0.16682000E+1 - ,0.43711840E+3,0.250E+3,0.144E+3,0.19505000E+1,0.18584000E+1 - ,0.40874340E+3,0.250E+3,0.145E+3,0.19505000E+1,0.19003000E+1 - ,0.37927910E+3,0.250E+3,0.146E+3,0.19505000E+1,0.18630000E+1 - ,0.36709070E+3,0.250E+3,0.147E+3,0.19505000E+1,0.96790000E+0 - ,0.36239660E+3,0.250E+3,0.148E+3,0.19505000E+1,0.19539000E+1 - ,0.58092600E+3,0.250E+3,0.149E+3,0.19505000E+1,0.96330000E+0 - ,0.52329100E+3,0.250E+3,0.150E+3,0.19505000E+1,0.95140000E+0 - ,0.48848390E+3,0.250E+3,0.151E+3,0.19505000E+1,0.97490000E+0 - ,0.46096710E+3,0.250E+3,0.152E+3,0.19505000E+1,0.98110000E+0 - ,0.41974500E+3,0.250E+3,0.153E+3,0.19505000E+1,0.99680000E+0 - ,0.57029930E+3,0.250E+3,0.155E+3,0.19505000E+1,0.99090000E+0 - ,0.12390351E+4,0.250E+3,0.156E+3,0.19505000E+1,0.97970000E+0 - ,0.91712310E+3,0.250E+3,0.157E+3,0.19505000E+1,0.19373000E+1 - ,0.57151660E+3,0.250E+3,0.159E+3,0.19505000E+1,0.29425000E+1 - ,0.55966960E+3,0.250E+3,0.160E+3,0.19505000E+1,0.29455000E+1 - ,0.54179760E+3,0.250E+3,0.161E+3,0.19505000E+1,0.29413000E+1 - ,0.54480780E+3,0.250E+3,0.162E+3,0.19505000E+1,0.29300000E+1 - ,0.52623920E+3,0.250E+3,0.163E+3,0.19505000E+1,0.18286000E+1 - ,0.54841680E+3,0.250E+3,0.164E+3,0.19505000E+1,0.28732000E+1 - ,0.51479430E+3,0.250E+3,0.165E+3,0.19505000E+1,0.29086000E+1 - ,0.52439740E+3,0.250E+3,0.166E+3,0.19505000E+1,0.28965000E+1 - ,0.48836000E+3,0.250E+3,0.167E+3,0.19505000E+1,0.29242000E+1 - ,0.47434360E+3,0.250E+3,0.168E+3,0.19505000E+1,0.29282000E+1 - ,0.47138980E+3,0.250E+3,0.169E+3,0.19505000E+1,0.29246000E+1 - ,0.49604540E+3,0.250E+3,0.170E+3,0.19505000E+1,0.28482000E+1 - ,0.45549010E+3,0.250E+3,0.171E+3,0.19505000E+1,0.29219000E+1 - ,0.62165690E+3,0.250E+3,0.172E+3,0.19505000E+1,0.19254000E+1 - ,0.57541630E+3,0.250E+3,0.173E+3,0.19505000E+1,0.19459000E+1 - ,0.52355470E+3,0.250E+3,0.174E+3,0.19505000E+1,0.19292000E+1 - ,0.53103290E+3,0.250E+3,0.175E+3,0.19505000E+1,0.18104000E+1 - ,0.46190580E+3,0.250E+3,0.176E+3,0.19505000E+1,0.18858000E+1 - ,0.43406330E+3,0.250E+3,0.177E+3,0.19505000E+1,0.18648000E+1 - ,0.41431110E+3,0.250E+3,0.178E+3,0.19505000E+1,0.19188000E+1 - ,0.39608640E+3,0.250E+3,0.179E+3,0.19505000E+1,0.98460000E+0 - ,0.38190670E+3,0.250E+3,0.180E+3,0.19505000E+1,0.19896000E+1 - ,0.62293810E+3,0.250E+3,0.181E+3,0.19505000E+1,0.92670000E+0 - ,0.56542470E+3,0.250E+3,0.182E+3,0.19505000E+1,0.93830000E+0 - ,0.54706010E+3,0.250E+3,0.183E+3,0.19505000E+1,0.98200000E+0 - ,0.53109590E+3,0.250E+3,0.184E+3,0.19505000E+1,0.98150000E+0 - ,0.49464220E+3,0.250E+3,0.185E+3,0.19505000E+1,0.99540000E+0 - ,0.64214730E+3,0.250E+3,0.187E+3,0.19505000E+1,0.97050000E+0 - ,0.12295628E+4,0.250E+3,0.188E+3,0.19505000E+1,0.96620000E+0 - ,0.67640190E+3,0.250E+3,0.189E+3,0.19505000E+1,0.29070000E+1 - ,0.78351290E+3,0.250E+3,0.190E+3,0.19505000E+1,0.28844000E+1 - ,0.69937990E+3,0.250E+3,0.191E+3,0.19505000E+1,0.28738000E+1 - ,0.61633520E+3,0.250E+3,0.192E+3,0.19505000E+1,0.28878000E+1 - ,0.59268480E+3,0.250E+3,0.193E+3,0.19505000E+1,0.29095000E+1 - ,0.71854240E+3,0.250E+3,0.194E+3,0.19505000E+1,0.19209000E+1 - ,0.16642480E+3,0.250E+3,0.204E+3,0.19505000E+1,0.19697000E+1 - ,0.16321840E+3,0.250E+3,0.205E+3,0.19505000E+1,0.19441000E+1 - ,0.11859420E+3,0.250E+3,0.206E+3,0.19505000E+1,0.19985000E+1 - ,0.94569600E+2,0.250E+3,0.207E+3,0.19505000E+1,0.20143000E+1 - ,0.64302200E+2,0.250E+3,0.208E+3,0.19505000E+1,0.19887000E+1 - ,0.29661470E+3,0.250E+3,0.212E+3,0.19505000E+1,0.19496000E+1 - ,0.35855000E+3,0.250E+3,0.213E+3,0.19505000E+1,0.19311000E+1 - ,0.34274070E+3,0.250E+3,0.214E+3,0.19505000E+1,0.19435000E+1 - ,0.29645720E+3,0.250E+3,0.215E+3,0.19505000E+1,0.20102000E+1 - ,0.24785630E+3,0.250E+3,0.216E+3,0.19505000E+1,0.19903000E+1 - ,0.41557270E+3,0.250E+3,0.220E+3,0.19505000E+1,0.19349000E+1 - ,0.39827950E+3,0.250E+3,0.221E+3,0.19505000E+1,0.28999000E+1 - ,0.40309190E+3,0.250E+3,0.222E+3,0.19505000E+1,0.38675000E+1 - ,0.36892090E+3,0.250E+3,0.223E+3,0.19505000E+1,0.29110000E+1 - ,0.27646740E+3,0.250E+3,0.224E+3,0.19505000E+1,0.10619100E+2 - ,0.23583660E+3,0.250E+3,0.225E+3,0.19505000E+1,0.98849000E+1 - ,0.23159140E+3,0.250E+3,0.226E+3,0.19505000E+1,0.91376000E+1 - ,0.27286680E+3,0.250E+3,0.227E+3,0.19505000E+1,0.29263000E+1 - ,0.25387790E+3,0.250E+3,0.228E+3,0.19505000E+1,0.65458000E+1 - ,0.36080170E+3,0.250E+3,0.231E+3,0.19505000E+1,0.19315000E+1 - ,0.38032910E+3,0.250E+3,0.232E+3,0.19505000E+1,0.19447000E+1 - ,0.34730490E+3,0.250E+3,0.233E+3,0.19505000E+1,0.19793000E+1 - ,0.32226350E+3,0.250E+3,0.234E+3,0.19505000E+1,0.19812000E+1 - ,0.49753160E+3,0.250E+3,0.238E+3,0.19505000E+1,0.19143000E+1 - ,0.47720360E+3,0.250E+3,0.239E+3,0.19505000E+1,0.28903000E+1 - ,0.48076680E+3,0.250E+3,0.240E+3,0.19505000E+1,0.39106000E+1 - ,0.46495560E+3,0.250E+3,0.241E+3,0.19505000E+1,0.29225000E+1 - ,0.40969630E+3,0.250E+3,0.242E+3,0.19505000E+1,0.11055600E+2 - ,0.36063780E+3,0.250E+3,0.243E+3,0.19505000E+1,0.95402000E+1 - ,0.34045080E+3,0.250E+3,0.244E+3,0.19505000E+1,0.88895000E+1 - ,0.34781660E+3,0.250E+3,0.245E+3,0.19505000E+1,0.29696000E+1 - ,0.36373910E+3,0.250E+3,0.246E+3,0.19505000E+1,0.57095000E+1 - ,0.46496770E+3,0.250E+3,0.249E+3,0.19505000E+1,0.19378000E+1 - ,0.50541480E+3,0.250E+3,0.250E+3,0.19505000E+1,0.19505000E+1 - ,0.36227700E+2,0.251E+3,0.100E+1,0.19523000E+1,0.91180000E+0 - ,0.24014100E+2,0.251E+3,0.200E+1,0.19523000E+1,0.00000000E+0 - ,0.54685470E+3,0.251E+3,0.300E+1,0.19523000E+1,0.00000000E+0 - ,0.32111700E+3,0.251E+3,0.400E+1,0.19523000E+1,0.00000000E+0 - ,0.21779050E+3,0.251E+3,0.500E+1,0.19523000E+1,0.00000000E+0 - ,0.14775190E+3,0.251E+3,0.600E+1,0.19523000E+1,0.00000000E+0 - ,0.10359080E+3,0.251E+3,0.700E+1,0.19523000E+1,0.00000000E+0 - ,0.78560000E+2,0.251E+3,0.800E+1,0.19523000E+1,0.00000000E+0 - ,0.59593700E+2,0.251E+3,0.900E+1,0.19523000E+1,0.00000000E+0 - ,0.45889400E+2,0.251E+3,0.100E+2,0.19523000E+1,0.00000000E+0 - ,0.65457160E+3,0.251E+3,0.110E+2,0.19523000E+1,0.00000000E+0 - ,0.51028240E+3,0.251E+3,0.120E+2,0.19523000E+1,0.00000000E+0 - ,0.47233520E+3,0.251E+3,0.130E+2,0.19523000E+1,0.00000000E+0 - ,0.37405660E+3,0.251E+3,0.140E+2,0.19523000E+1,0.00000000E+0 - ,0.29271450E+3,0.251E+3,0.150E+2,0.19523000E+1,0.00000000E+0 - ,0.24337850E+3,0.251E+3,0.160E+2,0.19523000E+1,0.00000000E+0 - ,0.19910820E+3,0.251E+3,0.170E+2,0.19523000E+1,0.00000000E+0 - ,0.16307830E+3,0.251E+3,0.180E+2,0.19523000E+1,0.00000000E+0 - ,0.10694211E+4,0.251E+3,0.190E+2,0.19523000E+1,0.00000000E+0 - ,0.89182320E+3,0.251E+3,0.200E+2,0.19523000E+1,0.00000000E+0 - ,0.73841210E+3,0.251E+3,0.210E+2,0.19523000E+1,0.00000000E+0 - ,0.71434970E+3,0.251E+3,0.220E+2,0.19523000E+1,0.00000000E+0 - ,0.65487180E+3,0.251E+3,0.230E+2,0.19523000E+1,0.00000000E+0 - ,0.51581520E+3,0.251E+3,0.240E+2,0.19523000E+1,0.00000000E+0 - ,0.56471100E+3,0.251E+3,0.250E+2,0.19523000E+1,0.00000000E+0 - ,0.44324120E+3,0.251E+3,0.260E+2,0.19523000E+1,0.00000000E+0 - ,0.47101860E+3,0.251E+3,0.270E+2,0.19523000E+1,0.00000000E+0 - ,0.48471110E+3,0.251E+3,0.280E+2,0.19523000E+1,0.00000000E+0 - ,0.37150280E+3,0.251E+3,0.290E+2,0.19523000E+1,0.00000000E+0 - ,0.38278190E+3,0.251E+3,0.300E+2,0.19523000E+1,0.00000000E+0 - ,0.45296620E+3,0.251E+3,0.310E+2,0.19523000E+1,0.00000000E+0 - ,0.40100980E+3,0.251E+3,0.320E+2,0.19523000E+1,0.00000000E+0 - ,0.34304870E+3,0.251E+3,0.330E+2,0.19523000E+1,0.00000000E+0 - ,0.30828460E+3,0.251E+3,0.340E+2,0.19523000E+1,0.00000000E+0 - ,0.27015060E+3,0.251E+3,0.350E+2,0.19523000E+1,0.00000000E+0 - ,0.23518820E+3,0.251E+3,0.360E+2,0.19523000E+1,0.00000000E+0 - ,0.11994646E+4,0.251E+3,0.370E+2,0.19523000E+1,0.00000000E+0 - ,0.10619947E+4,0.251E+3,0.380E+2,0.19523000E+1,0.00000000E+0 - ,0.93369560E+3,0.251E+3,0.390E+2,0.19523000E+1,0.00000000E+0 - ,0.84095330E+3,0.251E+3,0.400E+2,0.19523000E+1,0.00000000E+0 - ,0.76784150E+3,0.251E+3,0.410E+2,0.19523000E+1,0.00000000E+0 - ,0.59396240E+3,0.251E+3,0.420E+2,0.19523000E+1,0.00000000E+0 - ,0.66226990E+3,0.251E+3,0.430E+2,0.19523000E+1,0.00000000E+0 - ,0.50560890E+3,0.251E+3,0.440E+2,0.19523000E+1,0.00000000E+0 - ,0.55281280E+3,0.251E+3,0.450E+2,0.19523000E+1,0.00000000E+0 - ,0.51303450E+3,0.251E+3,0.460E+2,0.19523000E+1,0.00000000E+0 - ,0.42738710E+3,0.251E+3,0.470E+2,0.19523000E+1,0.00000000E+0 - ,0.45249980E+3,0.251E+3,0.480E+2,0.19523000E+1,0.00000000E+0 - ,0.56656420E+3,0.251E+3,0.490E+2,0.19523000E+1,0.00000000E+0 - ,0.52563100E+3,0.251E+3,0.500E+2,0.19523000E+1,0.00000000E+0 - ,0.46972550E+3,0.251E+3,0.510E+2,0.19523000E+1,0.00000000E+0 - ,0.43644300E+3,0.251E+3,0.520E+2,0.19523000E+1,0.00000000E+0 - ,0.39516260E+3,0.251E+3,0.530E+2,0.19523000E+1,0.00000000E+0 - ,0.35567420E+3,0.251E+3,0.540E+2,0.19523000E+1,0.00000000E+0 - ,0.14614083E+4,0.251E+3,0.550E+2,0.19523000E+1,0.00000000E+0 - ,0.13520527E+4,0.251E+3,0.560E+2,0.19523000E+1,0.00000000E+0 - ,0.11922239E+4,0.251E+3,0.570E+2,0.19523000E+1,0.00000000E+0 - ,0.55449760E+3,0.251E+3,0.580E+2,0.19523000E+1,0.27991000E+1 - ,0.11993914E+4,0.251E+3,0.590E+2,0.19523000E+1,0.00000000E+0 - ,0.11524260E+4,0.251E+3,0.600E+2,0.19523000E+1,0.00000000E+0 - ,0.11237195E+4,0.251E+3,0.610E+2,0.19523000E+1,0.00000000E+0 - ,0.10972997E+4,0.251E+3,0.620E+2,0.19523000E+1,0.00000000E+0 - ,0.10738792E+4,0.251E+3,0.630E+2,0.19523000E+1,0.00000000E+0 - ,0.84761650E+3,0.251E+3,0.640E+2,0.19523000E+1,0.00000000E+0 - ,0.94867820E+3,0.251E+3,0.650E+2,0.19523000E+1,0.00000000E+0 - ,0.91560320E+3,0.251E+3,0.660E+2,0.19523000E+1,0.00000000E+0 - ,0.96949560E+3,0.251E+3,0.670E+2,0.19523000E+1,0.00000000E+0 - ,0.94902750E+3,0.251E+3,0.680E+2,0.19523000E+1,0.00000000E+0 - ,0.93061310E+3,0.251E+3,0.690E+2,0.19523000E+1,0.00000000E+0 - ,0.91959590E+3,0.251E+3,0.700E+2,0.19523000E+1,0.00000000E+0 - ,0.77679900E+3,0.251E+3,0.710E+2,0.19523000E+1,0.00000000E+0 - ,0.76667010E+3,0.251E+3,0.720E+2,0.19523000E+1,0.00000000E+0 - ,0.70099760E+3,0.251E+3,0.730E+2,0.19523000E+1,0.00000000E+0 - ,0.59261750E+3,0.251E+3,0.740E+2,0.19523000E+1,0.00000000E+0 - ,0.60337400E+3,0.251E+3,0.750E+2,0.19523000E+1,0.00000000E+0 - ,0.54765300E+3,0.251E+3,0.760E+2,0.19523000E+1,0.00000000E+0 - ,0.50212300E+3,0.251E+3,0.770E+2,0.19523000E+1,0.00000000E+0 - ,0.41748050E+3,0.251E+3,0.780E+2,0.19523000E+1,0.00000000E+0 - ,0.39019750E+3,0.251E+3,0.790E+2,0.19523000E+1,0.00000000E+0 - ,0.40170990E+3,0.251E+3,0.800E+2,0.19523000E+1,0.00000000E+0 - ,0.58191410E+3,0.251E+3,0.810E+2,0.19523000E+1,0.00000000E+0 - ,0.57046250E+3,0.251E+3,0.820E+2,0.19523000E+1,0.00000000E+0 - ,0.52553390E+3,0.251E+3,0.830E+2,0.19523000E+1,0.00000000E+0 - ,0.50188930E+3,0.251E+3,0.840E+2,0.19523000E+1,0.00000000E+0 - ,0.46384860E+3,0.251E+3,0.850E+2,0.19523000E+1,0.00000000E+0 - ,0.42562050E+3,0.251E+3,0.860E+2,0.19523000E+1,0.00000000E+0 - ,0.13840410E+4,0.251E+3,0.870E+2,0.19523000E+1,0.00000000E+0 - ,0.13394353E+4,0.251E+3,0.880E+2,0.19523000E+1,0.00000000E+0 - ,0.11880075E+4,0.251E+3,0.890E+2,0.19523000E+1,0.00000000E+0 - ,0.10713664E+4,0.251E+3,0.900E+2,0.19523000E+1,0.00000000E+0 - ,0.10616930E+4,0.251E+3,0.910E+2,0.19523000E+1,0.00000000E+0 - ,0.10280688E+4,0.251E+3,0.920E+2,0.19523000E+1,0.00000000E+0 - ,0.10561396E+4,0.251E+3,0.930E+2,0.19523000E+1,0.00000000E+0 - ,0.10232018E+4,0.251E+3,0.940E+2,0.19523000E+1,0.00000000E+0 - ,0.58196200E+2,0.251E+3,0.101E+3,0.19523000E+1,0.00000000E+0 - ,0.18683530E+3,0.251E+3,0.103E+3,0.19523000E+1,0.98650000E+0 - ,0.23860370E+3,0.251E+3,0.104E+3,0.19523000E+1,0.98080000E+0 - ,0.18340000E+3,0.251E+3,0.105E+3,0.19523000E+1,0.97060000E+0 - ,0.13853490E+3,0.251E+3,0.106E+3,0.19523000E+1,0.98680000E+0 - ,0.96572400E+2,0.251E+3,0.107E+3,0.19523000E+1,0.99440000E+0 - ,0.70463400E+2,0.251E+3,0.108E+3,0.19523000E+1,0.99250000E+0 - ,0.48576600E+2,0.251E+3,0.109E+3,0.19523000E+1,0.99820000E+0 - ,0.27268930E+3,0.251E+3,0.111E+3,0.19523000E+1,0.96840000E+0 - ,0.42146260E+3,0.251E+3,0.112E+3,0.19523000E+1,0.96280000E+0 - ,0.42844370E+3,0.251E+3,0.113E+3,0.19523000E+1,0.96480000E+0 - ,0.34592360E+3,0.251E+3,0.114E+3,0.19523000E+1,0.95070000E+0 - ,0.28414620E+3,0.251E+3,0.115E+3,0.19523000E+1,0.99470000E+0 - ,0.24067810E+3,0.251E+3,0.116E+3,0.19523000E+1,0.99480000E+0 - ,0.19703300E+3,0.251E+3,0.117E+3,0.19523000E+1,0.99720000E+0 - ,0.37667550E+3,0.251E+3,0.119E+3,0.19523000E+1,0.97670000E+0 - ,0.71337770E+3,0.251E+3,0.120E+3,0.19523000E+1,0.98310000E+0 - ,0.37851240E+3,0.251E+3,0.121E+3,0.19523000E+1,0.18627000E+1 - ,0.36542570E+3,0.251E+3,0.122E+3,0.19523000E+1,0.18299000E+1 - ,0.35808830E+3,0.251E+3,0.123E+3,0.19523000E+1,0.19138000E+1 - ,0.35459770E+3,0.251E+3,0.124E+3,0.19523000E+1,0.18269000E+1 - ,0.32708070E+3,0.251E+3,0.125E+3,0.19523000E+1,0.16406000E+1 - ,0.30288030E+3,0.251E+3,0.126E+3,0.19523000E+1,0.16483000E+1 - ,0.28891150E+3,0.251E+3,0.127E+3,0.19523000E+1,0.17149000E+1 - ,0.28239730E+3,0.251E+3,0.128E+3,0.19523000E+1,0.17937000E+1 - ,0.27851920E+3,0.251E+3,0.129E+3,0.19523000E+1,0.95760000E+0 - ,0.26216840E+3,0.251E+3,0.130E+3,0.19523000E+1,0.19419000E+1 - ,0.42584750E+3,0.251E+3,0.131E+3,0.19523000E+1,0.96010000E+0 - ,0.37544380E+3,0.251E+3,0.132E+3,0.19523000E+1,0.94340000E+0 - ,0.33727630E+3,0.251E+3,0.133E+3,0.19523000E+1,0.98890000E+0 - ,0.30839060E+3,0.251E+3,0.134E+3,0.19523000E+1,0.99010000E+0 - ,0.27200760E+3,0.251E+3,0.135E+3,0.19523000E+1,0.99740000E+0 - ,0.44976690E+3,0.251E+3,0.137E+3,0.19523000E+1,0.97380000E+0 - ,0.86748280E+3,0.251E+3,0.138E+3,0.19523000E+1,0.98010000E+0 - ,0.66777030E+3,0.251E+3,0.139E+3,0.19523000E+1,0.19153000E+1 - ,0.50031680E+3,0.251E+3,0.140E+3,0.19523000E+1,0.19355000E+1 - ,0.50520350E+3,0.251E+3,0.141E+3,0.19523000E+1,0.19545000E+1 - ,0.47139900E+3,0.251E+3,0.142E+3,0.19523000E+1,0.19420000E+1 - ,0.52700000E+3,0.251E+3,0.143E+3,0.19523000E+1,0.16682000E+1 - ,0.41174300E+3,0.251E+3,0.144E+3,0.19523000E+1,0.18584000E+1 - ,0.38521960E+3,0.251E+3,0.145E+3,0.19523000E+1,0.19003000E+1 - ,0.35780550E+3,0.251E+3,0.146E+3,0.19523000E+1,0.18630000E+1 - ,0.34602160E+3,0.251E+3,0.147E+3,0.19523000E+1,0.96790000E+0 - ,0.34293620E+3,0.251E+3,0.148E+3,0.19523000E+1,0.19539000E+1 - ,0.54066240E+3,0.251E+3,0.149E+3,0.19523000E+1,0.96330000E+0 - ,0.49072030E+3,0.251E+3,0.150E+3,0.19523000E+1,0.95140000E+0 - ,0.46051500E+3,0.251E+3,0.151E+3,0.19523000E+1,0.97490000E+0 - ,0.43616550E+3,0.251E+3,0.152E+3,0.19523000E+1,0.98110000E+0 - ,0.39886600E+3,0.251E+3,0.153E+3,0.19523000E+1,0.99680000E+0 - ,0.53323930E+3,0.251E+3,0.155E+3,0.19523000E+1,0.99090000E+0 - ,0.11229068E+4,0.251E+3,0.156E+3,0.19523000E+1,0.97970000E+0 - ,0.84459250E+3,0.251E+3,0.157E+3,0.19523000E+1,0.19373000E+1 - ,0.53785080E+3,0.251E+3,0.159E+3,0.19523000E+1,0.29425000E+1 - ,0.52673890E+3,0.251E+3,0.160E+3,0.19523000E+1,0.29455000E+1 - ,0.51010490E+3,0.251E+3,0.161E+3,0.19523000E+1,0.29413000E+1 - ,0.51239170E+3,0.251E+3,0.162E+3,0.19523000E+1,0.29300000E+1 - ,0.49317410E+3,0.251E+3,0.163E+3,0.19523000E+1,0.18286000E+1 - ,0.51559660E+3,0.251E+3,0.164E+3,0.19523000E+1,0.28732000E+1 - ,0.48442780E+3,0.251E+3,0.165E+3,0.19523000E+1,0.29086000E+1 - ,0.49251520E+3,0.251E+3,0.166E+3,0.19523000E+1,0.28965000E+1 - ,0.45997740E+3,0.251E+3,0.167E+3,0.19523000E+1,0.29242000E+1 - ,0.44693120E+3,0.251E+3,0.168E+3,0.19523000E+1,0.29282000E+1 - ,0.44402250E+3,0.251E+3,0.169E+3,0.19523000E+1,0.29246000E+1 - ,0.46651200E+3,0.251E+3,0.170E+3,0.19523000E+1,0.28482000E+1 - ,0.42927350E+3,0.251E+3,0.171E+3,0.19523000E+1,0.29219000E+1 - ,0.57861310E+3,0.251E+3,0.172E+3,0.19523000E+1,0.19254000E+1 - ,0.53790480E+3,0.251E+3,0.173E+3,0.19523000E+1,0.19459000E+1 - ,0.49161910E+3,0.251E+3,0.174E+3,0.19523000E+1,0.19292000E+1 - ,0.49667380E+3,0.251E+3,0.175E+3,0.19523000E+1,0.18104000E+1 - ,0.43648690E+3,0.251E+3,0.176E+3,0.19523000E+1,0.18858000E+1 - ,0.41080070E+3,0.251E+3,0.177E+3,0.19523000E+1,0.18648000E+1 - ,0.39246080E+3,0.251E+3,0.178E+3,0.19523000E+1,0.19188000E+1 - ,0.37514240E+3,0.251E+3,0.179E+3,0.19523000E+1,0.98460000E+0 - ,0.36302260E+3,0.251E+3,0.180E+3,0.19523000E+1,0.19896000E+1 - ,0.58068260E+3,0.251E+3,0.181E+3,0.19523000E+1,0.92670000E+0 - ,0.53094590E+3,0.251E+3,0.182E+3,0.19523000E+1,0.93830000E+0 - ,0.51573940E+3,0.251E+3,0.183E+3,0.19523000E+1,0.98200000E+0 - ,0.50211810E+3,0.251E+3,0.184E+3,0.19523000E+1,0.98150000E+0 - ,0.46948140E+3,0.251E+3,0.185E+3,0.19523000E+1,0.99540000E+0 - ,0.60069020E+3,0.251E+3,0.187E+3,0.19523000E+1,0.97050000E+0 - ,0.11195215E+4,0.251E+3,0.188E+3,0.19523000E+1,0.96620000E+0 - ,0.63642920E+3,0.251E+3,0.189E+3,0.19523000E+1,0.29070000E+1 - ,0.73257850E+3,0.251E+3,0.190E+3,0.19523000E+1,0.28844000E+1 - ,0.65541880E+3,0.251E+3,0.191E+3,0.19523000E+1,0.28738000E+1 - ,0.58044230E+3,0.251E+3,0.192E+3,0.19523000E+1,0.28878000E+1 - ,0.55878270E+3,0.251E+3,0.193E+3,0.19523000E+1,0.29095000E+1 - ,0.66842250E+3,0.251E+3,0.194E+3,0.19523000E+1,0.19209000E+1 - ,0.15675410E+3,0.251E+3,0.204E+3,0.19523000E+1,0.19697000E+1 - ,0.15413350E+3,0.251E+3,0.205E+3,0.19523000E+1,0.19441000E+1 - ,0.11315480E+3,0.251E+3,0.206E+3,0.19523000E+1,0.19985000E+1 - ,0.90704300E+2,0.251E+3,0.207E+3,0.19523000E+1,0.20143000E+1 - ,0.62195400E+2,0.251E+3,0.208E+3,0.19523000E+1,0.19887000E+1 - ,0.27727810E+3,0.251E+3,0.212E+3,0.19523000E+1,0.19496000E+1 - ,0.33486500E+3,0.251E+3,0.213E+3,0.19523000E+1,0.19311000E+1 - ,0.32195190E+3,0.251E+3,0.214E+3,0.19523000E+1,0.19435000E+1 - ,0.28021780E+3,0.251E+3,0.215E+3,0.19523000E+1,0.20102000E+1 - ,0.23581280E+3,0.251E+3,0.216E+3,0.19523000E+1,0.19903000E+1 - ,0.38844680E+3,0.251E+3,0.220E+3,0.19523000E+1,0.19349000E+1 - ,0.37399630E+3,0.251E+3,0.221E+3,0.19523000E+1,0.28999000E+1 - ,0.37864590E+3,0.251E+3,0.222E+3,0.19523000E+1,0.38675000E+1 - ,0.34645320E+3,0.251E+3,0.223E+3,0.19523000E+1,0.29110000E+1 - ,0.26154130E+3,0.251E+3,0.224E+3,0.19523000E+1,0.10619100E+2 - ,0.22411260E+3,0.251E+3,0.225E+3,0.19523000E+1,0.98849000E+1 - ,0.21995380E+3,0.251E+3,0.226E+3,0.19523000E+1,0.91376000E+1 - ,0.25727540E+3,0.251E+3,0.227E+3,0.19523000E+1,0.29263000E+1 - ,0.23987350E+3,0.251E+3,0.228E+3,0.19523000E+1,0.65458000E+1 - ,0.33847720E+3,0.251E+3,0.231E+3,0.19523000E+1,0.19315000E+1 - ,0.35762210E+3,0.251E+3,0.232E+3,0.19523000E+1,0.19447000E+1 - ,0.32850830E+3,0.251E+3,0.233E+3,0.19523000E+1,0.19793000E+1 - ,0.30597730E+3,0.251E+3,0.234E+3,0.19523000E+1,0.19812000E+1 - ,0.46536830E+3,0.251E+3,0.238E+3,0.19523000E+1,0.19143000E+1 - ,0.44902050E+3,0.251E+3,0.239E+3,0.19523000E+1,0.28903000E+1 - ,0.45315700E+3,0.251E+3,0.240E+3,0.19523000E+1,0.39106000E+1 - ,0.43804100E+3,0.251E+3,0.241E+3,0.19523000E+1,0.29225000E+1 - ,0.38788180E+3,0.251E+3,0.242E+3,0.19523000E+1,0.11055600E+2 - ,0.34276350E+3,0.251E+3,0.243E+3,0.19523000E+1,0.95402000E+1 - ,0.32403570E+3,0.251E+3,0.244E+3,0.19523000E+1,0.88895000E+1 - ,0.32956900E+3,0.251E+3,0.245E+3,0.19523000E+1,0.29696000E+1 - ,0.34418570E+3,0.251E+3,0.246E+3,0.19523000E+1,0.57095000E+1 - ,0.43665200E+3,0.251E+3,0.249E+3,0.19523000E+1,0.19378000E+1 - ,0.47467200E+3,0.251E+3,0.250E+3,0.19523000E+1,0.19505000E+1 - ,0.44805730E+3,0.251E+3,0.251E+3,0.19523000E+1,0.19523000E+1 - ,0.35246100E+2,0.252E+3,0.100E+1,0.19639000E+1,0.91180000E+0 - ,0.23585100E+2,0.252E+3,0.200E+1,0.19639000E+1,0.00000000E+0 - ,0.51271640E+3,0.252E+3,0.300E+1,0.19639000E+1,0.00000000E+0 - ,0.30576290E+3,0.252E+3,0.400E+1,0.19639000E+1,0.00000000E+0 - ,0.20945590E+3,0.252E+3,0.500E+1,0.19639000E+1,0.00000000E+0 - ,0.14319470E+3,0.252E+3,0.600E+1,0.19639000E+1,0.00000000E+0 - ,0.10097450E+3,0.252E+3,0.700E+1,0.19639000E+1,0.00000000E+0 - ,0.76886300E+2,0.252E+3,0.800E+1,0.19639000E+1,0.00000000E+0 - ,0.58522300E+2,0.252E+3,0.900E+1,0.19639000E+1,0.00000000E+0 - ,0.45183600E+2,0.252E+3,0.100E+2,0.19639000E+1,0.00000000E+0 - ,0.61435230E+3,0.252E+3,0.110E+2,0.19639000E+1,0.00000000E+0 - ,0.48450380E+3,0.252E+3,0.120E+2,0.19639000E+1,0.00000000E+0 - ,0.45072670E+3,0.252E+3,0.130E+2,0.19639000E+1,0.00000000E+0 - ,0.35936400E+3,0.252E+3,0.140E+2,0.19639000E+1,0.00000000E+0 - ,0.28289020E+3,0.252E+3,0.150E+2,0.19639000E+1,0.00000000E+0 - ,0.23614560E+3,0.252E+3,0.160E+2,0.19639000E+1,0.00000000E+0 - ,0.19392690E+3,0.252E+3,0.170E+2,0.19639000E+1,0.00000000E+0 - ,0.15936080E+3,0.252E+3,0.180E+2,0.19639000E+1,0.00000000E+0 - ,0.10025559E+4,0.252E+3,0.190E+2,0.19639000E+1,0.00000000E+0 - ,0.84305400E+3,0.252E+3,0.200E+2,0.19639000E+1,0.00000000E+0 - ,0.69945860E+3,0.252E+3,0.210E+2,0.19639000E+1,0.00000000E+0 - ,0.67814850E+3,0.252E+3,0.220E+2,0.19639000E+1,0.00000000E+0 - ,0.62246350E+3,0.252E+3,0.230E+2,0.19639000E+1,0.00000000E+0 - ,0.49067860E+3,0.252E+3,0.240E+2,0.19639000E+1,0.00000000E+0 - ,0.53774700E+3,0.252E+3,0.250E+2,0.19639000E+1,0.00000000E+0 - ,0.42250680E+3,0.252E+3,0.260E+2,0.19639000E+1,0.00000000E+0 - ,0.44986640E+3,0.252E+3,0.270E+2,0.19639000E+1,0.00000000E+0 - ,0.46232080E+3,0.252E+3,0.280E+2,0.19639000E+1,0.00000000E+0 - ,0.35464230E+3,0.252E+3,0.290E+2,0.19639000E+1,0.00000000E+0 - ,0.36661620E+3,0.252E+3,0.300E+2,0.19639000E+1,0.00000000E+0 - ,0.43326650E+3,0.252E+3,0.310E+2,0.19639000E+1,0.00000000E+0 - ,0.38551090E+3,0.252E+3,0.320E+2,0.19639000E+1,0.00000000E+0 - ,0.33138440E+3,0.252E+3,0.330E+2,0.19639000E+1,0.00000000E+0 - ,0.29873310E+3,0.252E+3,0.340E+2,0.19639000E+1,0.00000000E+0 - ,0.26262260E+3,0.252E+3,0.350E+2,0.19639000E+1,0.00000000E+0 - ,0.22931350E+3,0.252E+3,0.360E+2,0.19639000E+1,0.00000000E+0 - ,0.11257134E+4,0.252E+3,0.370E+2,0.19639000E+1,0.00000000E+0 - ,0.10038665E+4,0.252E+3,0.380E+2,0.19639000E+1,0.00000000E+0 - ,0.88595760E+3,0.252E+3,0.390E+2,0.19639000E+1,0.00000000E+0 - ,0.79994710E+3,0.252E+3,0.400E+2,0.19639000E+1,0.00000000E+0 - ,0.73167410E+3,0.252E+3,0.410E+2,0.19639000E+1,0.00000000E+0 - ,0.56783410E+3,0.252E+3,0.420E+2,0.19639000E+1,0.00000000E+0 - ,0.63235020E+3,0.252E+3,0.430E+2,0.19639000E+1,0.00000000E+0 - ,0.48447400E+3,0.252E+3,0.440E+2,0.19639000E+1,0.00000000E+0 - ,0.52945790E+3,0.252E+3,0.450E+2,0.19639000E+1,0.00000000E+0 - ,0.49188120E+3,0.252E+3,0.460E+2,0.19639000E+1,0.00000000E+0 - ,0.40979950E+3,0.252E+3,0.470E+2,0.19639000E+1,0.00000000E+0 - ,0.43443580E+3,0.252E+3,0.480E+2,0.19639000E+1,0.00000000E+0 - ,0.54208910E+3,0.252E+3,0.490E+2,0.19639000E+1,0.00000000E+0 - ,0.50487630E+3,0.252E+3,0.500E+2,0.19639000E+1,0.00000000E+0 - ,0.45302540E+3,0.252E+3,0.510E+2,0.19639000E+1,0.00000000E+0 - ,0.42201870E+3,0.252E+3,0.520E+2,0.19639000E+1,0.00000000E+0 - ,0.38318370E+3,0.252E+3,0.530E+2,0.19639000E+1,0.00000000E+0 - ,0.34582830E+3,0.252E+3,0.540E+2,0.19639000E+1,0.00000000E+0 - ,0.13722422E+4,0.252E+3,0.550E+2,0.19639000E+1,0.00000000E+0 - ,0.12768973E+4,0.252E+3,0.560E+2,0.19639000E+1,0.00000000E+0 - ,0.11301276E+4,0.252E+3,0.570E+2,0.19639000E+1,0.00000000E+0 - ,0.53452440E+3,0.252E+3,0.580E+2,0.19639000E+1,0.27991000E+1 - ,0.11341681E+4,0.252E+3,0.590E+2,0.19639000E+1,0.00000000E+0 - ,0.10903536E+4,0.252E+3,0.600E+2,0.19639000E+1,0.00000000E+0 - ,0.10633516E+4,0.252E+3,0.610E+2,0.19639000E+1,0.00000000E+0 - ,0.10384792E+4,0.252E+3,0.620E+2,0.19639000E+1,0.00000000E+0 - ,0.10164371E+4,0.252E+3,0.630E+2,0.19639000E+1,0.00000000E+0 - ,0.80596520E+3,0.252E+3,0.640E+2,0.19639000E+1,0.00000000E+0 - ,0.89702580E+3,0.252E+3,0.650E+2,0.19639000E+1,0.00000000E+0 - ,0.86641260E+3,0.252E+3,0.660E+2,0.19639000E+1,0.00000000E+0 - ,0.91841900E+3,0.252E+3,0.670E+2,0.19639000E+1,0.00000000E+0 - ,0.89909510E+3,0.252E+3,0.680E+2,0.19639000E+1,0.00000000E+0 - ,0.88176000E+3,0.252E+3,0.690E+2,0.19639000E+1,0.00000000E+0 - ,0.87114240E+3,0.252E+3,0.700E+2,0.19639000E+1,0.00000000E+0 - ,0.73817630E+3,0.252E+3,0.710E+2,0.19639000E+1,0.00000000E+0 - ,0.73134130E+3,0.252E+3,0.720E+2,0.19639000E+1,0.00000000E+0 - ,0.67040070E+3,0.252E+3,0.730E+2,0.19639000E+1,0.00000000E+0 - ,0.56812010E+3,0.252E+3,0.740E+2,0.19639000E+1,0.00000000E+0 - ,0.57890380E+3,0.252E+3,0.750E+2,0.19639000E+1,0.00000000E+0 - ,0.52661010E+3,0.252E+3,0.760E+2,0.19639000E+1,0.00000000E+0 - ,0.48371080E+3,0.252E+3,0.770E+2,0.19639000E+1,0.00000000E+0 - ,0.40307740E+3,0.252E+3,0.780E+2,0.19639000E+1,0.00000000E+0 - ,0.37705920E+3,0.252E+3,0.790E+2,0.19639000E+1,0.00000000E+0 - ,0.38840990E+3,0.252E+3,0.800E+2,0.19639000E+1,0.00000000E+0 - ,0.55767540E+3,0.252E+3,0.810E+2,0.19639000E+1,0.00000000E+0 - ,0.54820960E+3,0.252E+3,0.820E+2,0.19639000E+1,0.00000000E+0 - ,0.50681290E+3,0.252E+3,0.830E+2,0.19639000E+1,0.00000000E+0 - ,0.48504920E+3,0.252E+3,0.840E+2,0.19639000E+1,0.00000000E+0 - ,0.44946500E+3,0.252E+3,0.850E+2,0.19639000E+1,0.00000000E+0 - ,0.41343530E+3,0.252E+3,0.860E+2,0.19639000E+1,0.00000000E+0 - ,0.13034917E+4,0.252E+3,0.870E+2,0.19639000E+1,0.00000000E+0 - ,0.12675667E+4,0.252E+3,0.880E+2,0.19639000E+1,0.00000000E+0 - ,0.11280206E+4,0.252E+3,0.890E+2,0.19639000E+1,0.00000000E+0 - ,0.10215531E+4,0.252E+3,0.900E+2,0.19639000E+1,0.00000000E+0 - ,0.10104948E+4,0.252E+3,0.910E+2,0.19639000E+1,0.00000000E+0 - ,0.97859690E+3,0.252E+3,0.920E+2,0.19639000E+1,0.00000000E+0 - ,0.10027172E+4,0.252E+3,0.930E+2,0.19639000E+1,0.00000000E+0 - ,0.97186890E+3,0.252E+3,0.940E+2,0.19639000E+1,0.00000000E+0 - ,0.56276900E+2,0.252E+3,0.101E+3,0.19639000E+1,0.00000000E+0 - ,0.17817450E+3,0.252E+3,0.103E+3,0.19639000E+1,0.98650000E+0 - ,0.22803400E+3,0.252E+3,0.104E+3,0.19639000E+1,0.98080000E+0 - ,0.17677650E+3,0.252E+3,0.105E+3,0.19639000E+1,0.97060000E+0 - ,0.13427420E+3,0.252E+3,0.106E+3,0.19639000E+1,0.98680000E+0 - ,0.94162200E+2,0.252E+3,0.107E+3,0.19639000E+1,0.99440000E+0 - ,0.69039900E+2,0.252E+3,0.108E+3,0.19639000E+1,0.99250000E+0 - ,0.47877100E+2,0.252E+3,0.109E+3,0.19639000E+1,0.99820000E+0 - ,0.25966980E+3,0.252E+3,0.111E+3,0.19639000E+1,0.96840000E+0 - ,0.40103040E+3,0.252E+3,0.112E+3,0.19639000E+1,0.96280000E+0 - ,0.40936850E+3,0.252E+3,0.113E+3,0.19639000E+1,0.96480000E+0 - ,0.33269600E+3,0.252E+3,0.114E+3,0.19639000E+1,0.95070000E+0 - ,0.27467950E+3,0.252E+3,0.115E+3,0.19639000E+1,0.99470000E+0 - ,0.23351090E+3,0.252E+3,0.116E+3,0.19639000E+1,0.99480000E+0 - ,0.19189600E+3,0.252E+3,0.117E+3,0.19639000E+1,0.99720000E+0 - ,0.36037990E+3,0.252E+3,0.119E+3,0.19639000E+1,0.97670000E+0 - ,0.67520960E+3,0.252E+3,0.120E+3,0.19639000E+1,0.98310000E+0 - ,0.36377550E+3,0.252E+3,0.121E+3,0.19639000E+1,0.18627000E+1 - ,0.35131790E+3,0.252E+3,0.122E+3,0.19639000E+1,0.18299000E+1 - ,0.34423720E+3,0.252E+3,0.123E+3,0.19639000E+1,0.19138000E+1 - ,0.34067740E+3,0.252E+3,0.124E+3,0.19639000E+1,0.18269000E+1 - ,0.31512290E+3,0.252E+3,0.125E+3,0.19639000E+1,0.16406000E+1 - ,0.29209790E+3,0.252E+3,0.126E+3,0.19639000E+1,0.16483000E+1 - ,0.27865290E+3,0.252E+3,0.127E+3,0.19639000E+1,0.17149000E+1 - ,0.27230380E+3,0.252E+3,0.128E+3,0.19639000E+1,0.17937000E+1 - ,0.26795690E+3,0.252E+3,0.129E+3,0.19639000E+1,0.95760000E+0 - ,0.25325200E+3,0.252E+3,0.130E+3,0.19639000E+1,0.19419000E+1 - ,0.40786260E+3,0.252E+3,0.131E+3,0.19639000E+1,0.96010000E+0 - ,0.36139310E+3,0.252E+3,0.132E+3,0.19639000E+1,0.94340000E+0 - ,0.32590920E+3,0.252E+3,0.133E+3,0.19639000E+1,0.98890000E+0 - ,0.29882550E+3,0.252E+3,0.134E+3,0.19639000E+1,0.99010000E+0 - ,0.26438680E+3,0.252E+3,0.135E+3,0.19639000E+1,0.99740000E+0 - ,0.43088900E+3,0.252E+3,0.137E+3,0.19639000E+1,0.97380000E+0 - ,0.82090550E+3,0.252E+3,0.138E+3,0.19639000E+1,0.98010000E+0 - ,0.63678340E+3,0.252E+3,0.139E+3,0.19639000E+1,0.19153000E+1 - ,0.48083080E+3,0.252E+3,0.140E+3,0.19639000E+1,0.19355000E+1 - ,0.48546850E+3,0.252E+3,0.141E+3,0.19639000E+1,0.19545000E+1 - ,0.45354170E+3,0.252E+3,0.142E+3,0.19639000E+1,0.19420000E+1 - ,0.50518300E+3,0.252E+3,0.143E+3,0.19639000E+1,0.16682000E+1 - ,0.39728740E+3,0.252E+3,0.144E+3,0.19639000E+1,0.18584000E+1 - ,0.37184930E+3,0.252E+3,0.145E+3,0.19639000E+1,0.19003000E+1 - ,0.34561400E+3,0.252E+3,0.146E+3,0.19639000E+1,0.18630000E+1 - ,0.33407750E+3,0.252E+3,0.147E+3,0.19639000E+1,0.96790000E+0 - ,0.33175670E+3,0.252E+3,0.148E+3,0.19639000E+1,0.19539000E+1 - ,0.51804080E+3,0.252E+3,0.149E+3,0.19639000E+1,0.96330000E+0 - ,0.47212430E+3,0.252E+3,0.150E+3,0.19639000E+1,0.95140000E+0 - ,0.44439750E+3,0.252E+3,0.151E+3,0.19639000E+1,0.97490000E+0 - ,0.42181780E+3,0.252E+3,0.152E+3,0.19639000E+1,0.98110000E+0 - ,0.38675500E+3,0.252E+3,0.153E+3,0.19639000E+1,0.99680000E+0 - ,0.51246920E+3,0.252E+3,0.155E+3,0.19639000E+1,0.99090000E+0 - ,0.10614185E+4,0.252E+3,0.156E+3,0.19639000E+1,0.97970000E+0 - ,0.80501180E+3,0.252E+3,0.157E+3,0.19639000E+1,0.19373000E+1 - ,0.51860750E+3,0.252E+3,0.159E+3,0.19639000E+1,0.29425000E+1 - ,0.50791390E+3,0.252E+3,0.160E+3,0.19639000E+1,0.29455000E+1 - ,0.49198270E+3,0.252E+3,0.161E+3,0.19639000E+1,0.29413000E+1 - ,0.49389760E+3,0.252E+3,0.162E+3,0.19639000E+1,0.29300000E+1 - ,0.47446600E+3,0.252E+3,0.163E+3,0.19639000E+1,0.18286000E+1 - ,0.49685260E+3,0.252E+3,0.164E+3,0.19639000E+1,0.28732000E+1 - ,0.46706730E+3,0.252E+3,0.165E+3,0.19639000E+1,0.29086000E+1 - ,0.47437630E+3,0.252E+3,0.166E+3,0.19639000E+1,0.28965000E+1 - ,0.44371620E+3,0.252E+3,0.167E+3,0.19639000E+1,0.29242000E+1 - ,0.43121480E+3,0.252E+3,0.168E+3,0.19639000E+1,0.29282000E+1 - ,0.42833450E+3,0.252E+3,0.169E+3,0.19639000E+1,0.29246000E+1 - ,0.44958170E+3,0.252E+3,0.170E+3,0.19639000E+1,0.28482000E+1 - ,0.41422170E+3,0.252E+3,0.171E+3,0.19639000E+1,0.29219000E+1 - ,0.55455640E+3,0.252E+3,0.172E+3,0.19639000E+1,0.19254000E+1 - ,0.51681140E+3,0.252E+3,0.173E+3,0.19639000E+1,0.19459000E+1 - ,0.47354520E+3,0.252E+3,0.174E+3,0.19639000E+1,0.19292000E+1 - ,0.47737190E+3,0.252E+3,0.175E+3,0.19639000E+1,0.18104000E+1 - ,0.42195370E+3,0.252E+3,0.176E+3,0.19639000E+1,0.18858000E+1 - ,0.39750830E+3,0.252E+3,0.177E+3,0.19639000E+1,0.18648000E+1 - ,0.37998620E+3,0.252E+3,0.178E+3,0.19639000E+1,0.19188000E+1 - ,0.36322860E+3,0.252E+3,0.179E+3,0.19639000E+1,0.98460000E+0 - ,0.35217630E+3,0.252E+3,0.180E+3,0.19639000E+1,0.19896000E+1 - ,0.55705210E+3,0.252E+3,0.181E+3,0.19639000E+1,0.92670000E+0 - ,0.51133530E+3,0.252E+3,0.182E+3,0.19639000E+1,0.93830000E+0 - ,0.49776870E+3,0.252E+3,0.183E+3,0.19639000E+1,0.98200000E+0 - ,0.48542330E+3,0.252E+3,0.184E+3,0.19639000E+1,0.98150000E+0 - ,0.45493030E+3,0.252E+3,0.185E+3,0.19639000E+1,0.99540000E+0 - ,0.57742140E+3,0.252E+3,0.187E+3,0.19639000E+1,0.97050000E+0 - ,0.10607432E+4,0.252E+3,0.188E+3,0.19639000E+1,0.96620000E+0 - ,0.61356050E+3,0.252E+3,0.189E+3,0.19639000E+1,0.29070000E+1 - ,0.70396650E+3,0.252E+3,0.190E+3,0.19639000E+1,0.28844000E+1 - ,0.63075620E+3,0.252E+3,0.191E+3,0.19639000E+1,0.28738000E+1 - ,0.56000710E+3,0.252E+3,0.192E+3,0.19639000E+1,0.28878000E+1 - ,0.53943990E+3,0.252E+3,0.193E+3,0.19639000E+1,0.29095000E+1 - ,0.64068280E+3,0.252E+3,0.194E+3,0.19639000E+1,0.19209000E+1 - ,0.15112750E+3,0.252E+3,0.204E+3,0.19639000E+1,0.19697000E+1 - ,0.14889980E+3,0.252E+3,0.205E+3,0.19639000E+1,0.19441000E+1 - ,0.11000870E+3,0.252E+3,0.206E+3,0.19639000E+1,0.19985000E+1 - ,0.88495300E+2,0.252E+3,0.207E+3,0.19639000E+1,0.20143000E+1 - ,0.61025800E+2,0.252E+3,0.208E+3,0.19639000E+1,0.19887000E+1 - ,0.26613770E+3,0.252E+3,0.212E+3,0.19639000E+1,0.19496000E+1 - ,0.32131290E+3,0.252E+3,0.213E+3,0.19639000E+1,0.19311000E+1 - ,0.30994780E+3,0.252E+3,0.214E+3,0.19639000E+1,0.19435000E+1 - ,0.27080050E+3,0.252E+3,0.215E+3,0.19639000E+1,0.20102000E+1 - ,0.22881280E+3,0.252E+3,0.216E+3,0.19639000E+1,0.19903000E+1 - ,0.37302450E+3,0.252E+3,0.220E+3,0.19639000E+1,0.19349000E+1 - ,0.36007160E+3,0.252E+3,0.221E+3,0.19639000E+1,0.28999000E+1 - ,0.36462620E+3,0.252E+3,0.222E+3,0.19639000E+1,0.38675000E+1 - ,0.33363080E+3,0.252E+3,0.223E+3,0.19639000E+1,0.29110000E+1 - ,0.25301950E+3,0.252E+3,0.224E+3,0.19639000E+1,0.10619100E+2 - ,0.21739930E+3,0.252E+3,0.225E+3,0.19639000E+1,0.98849000E+1 - ,0.21329230E+3,0.252E+3,0.226E+3,0.19639000E+1,0.91376000E+1 - ,0.24838210E+3,0.252E+3,0.227E+3,0.19639000E+1,0.29263000E+1 - ,0.23186030E+3,0.252E+3,0.228E+3,0.19639000E+1,0.65458000E+1 - ,0.32567860E+3,0.252E+3,0.231E+3,0.19639000E+1,0.19315000E+1 - ,0.34453460E+3,0.252E+3,0.232E+3,0.19639000E+1,0.19447000E+1 - ,0.31759860E+3,0.252E+3,0.233E+3,0.19639000E+1,0.19793000E+1 - ,0.29651530E+3,0.252E+3,0.234E+3,0.19639000E+1,0.19812000E+1 - ,0.44715550E+3,0.252E+3,0.238E+3,0.19639000E+1,0.19143000E+1 - ,0.43284780E+3,0.252E+3,0.239E+3,0.19639000E+1,0.28903000E+1 - ,0.43727120E+3,0.252E+3,0.240E+3,0.19639000E+1,0.39106000E+1 - ,0.42265520E+3,0.252E+3,0.241E+3,0.19639000E+1,0.29225000E+1 - ,0.37537250E+3,0.252E+3,0.242E+3,0.19639000E+1,0.11055600E+2 - ,0.33249710E+3,0.252E+3,0.243E+3,0.19639000E+1,0.95402000E+1 - ,0.31460820E+3,0.252E+3,0.244E+3,0.19639000E+1,0.88895000E+1 - ,0.31917350E+3,0.252E+3,0.245E+3,0.19639000E+1,0.29696000E+1 - ,0.33302450E+3,0.252E+3,0.246E+3,0.19639000E+1,0.57095000E+1 - ,0.42051550E+3,0.252E+3,0.249E+3,0.19639000E+1,0.19378000E+1 - ,0.45707930E+3,0.252E+3,0.250E+3,0.19639000E+1,0.19505000E+1 - ,0.43269410E+3,0.252E+3,0.251E+3,0.19639000E+1,0.19523000E+1 - ,0.41857890E+3,0.252E+3,0.252E+3,0.19639000E+1,0.19639000E+1 - ,0.44832100E+2,0.256E+3,0.100E+1,0.18467000E+1,0.91180000E+0 - ,0.29186400E+2,0.256E+3,0.200E+1,0.18467000E+1,0.00000000E+0 - ,0.75032270E+3,0.256E+3,0.300E+1,0.18467000E+1,0.00000000E+0 - ,0.41786520E+3,0.256E+3,0.400E+1,0.18467000E+1,0.00000000E+0 - ,0.27634300E+3,0.256E+3,0.500E+1,0.18467000E+1,0.00000000E+0 - ,0.18434620E+3,0.256E+3,0.600E+1,0.18467000E+1,0.00000000E+0 - ,0.12774190E+3,0.256E+3,0.700E+1,0.18467000E+1,0.00000000E+0 - ,0.96095000E+2,0.256E+3,0.800E+1,0.18467000E+1,0.00000000E+0 - ,0.72385200E+2,0.256E+3,0.900E+1,0.18467000E+1,0.00000000E+0 - ,0.55409200E+2,0.256E+3,0.100E+2,0.18467000E+1,0.00000000E+0 - ,0.89516260E+3,0.256E+3,0.110E+2,0.18467000E+1,0.00000000E+0 - ,0.66976420E+3,0.256E+3,0.120E+2,0.18467000E+1,0.00000000E+0 - ,0.61142610E+3,0.256E+3,0.130E+2,0.18467000E+1,0.00000000E+0 - ,0.47565060E+3,0.256E+3,0.140E+2,0.18467000E+1,0.00000000E+0 - ,0.36714490E+3,0.256E+3,0.150E+2,0.18467000E+1,0.00000000E+0 - ,0.30279080E+3,0.256E+3,0.160E+2,0.18467000E+1,0.00000000E+0 - ,0.24586350E+3,0.256E+3,0.170E+2,0.18467000E+1,0.00000000E+0 - ,0.20010940E+3,0.256E+3,0.180E+2,0.18467000E+1,0.00000000E+0 - ,0.14768694E+4,0.256E+3,0.190E+2,0.18467000E+1,0.00000000E+0 - ,0.11905306E+4,0.256E+3,0.200E+2,0.18467000E+1,0.00000000E+0 - ,0.97858840E+3,0.256E+3,0.210E+2,0.18467000E+1,0.00000000E+0 - ,0.94093240E+3,0.256E+3,0.220E+2,0.18467000E+1,0.00000000E+0 - ,0.85937300E+3,0.256E+3,0.230E+2,0.18467000E+1,0.00000000E+0 - ,0.67681130E+3,0.256E+3,0.240E+2,0.18467000E+1,0.00000000E+0 - ,0.73708980E+3,0.256E+3,0.250E+2,0.18467000E+1,0.00000000E+0 - ,0.57808990E+3,0.256E+3,0.260E+2,0.18467000E+1,0.00000000E+0 - ,0.60928650E+3,0.256E+3,0.270E+2,0.18467000E+1,0.00000000E+0 - ,0.62924930E+3,0.256E+3,0.280E+2,0.18467000E+1,0.00000000E+0 - ,0.48241490E+3,0.256E+3,0.290E+2,0.18467000E+1,0.00000000E+0 - ,0.49120730E+3,0.256E+3,0.300E+2,0.18467000E+1,0.00000000E+0 - ,0.58352030E+3,0.256E+3,0.310E+2,0.18467000E+1,0.00000000E+0 - ,0.50945200E+3,0.256E+3,0.320E+2,0.18467000E+1,0.00000000E+0 - ,0.43080210E+3,0.256E+3,0.330E+2,0.18467000E+1,0.00000000E+0 - ,0.38458730E+3,0.256E+3,0.340E+2,0.18467000E+1,0.00000000E+0 - ,0.33481150E+3,0.256E+3,0.350E+2,0.18467000E+1,0.00000000E+0 - ,0.28979810E+3,0.256E+3,0.360E+2,0.18467000E+1,0.00000000E+0 - ,0.16522832E+4,0.256E+3,0.370E+2,0.18467000E+1,0.00000000E+0 - ,0.14199417E+4,0.256E+3,0.380E+2,0.18467000E+1,0.00000000E+0 - ,0.12330006E+4,0.256E+3,0.390E+2,0.18467000E+1,0.00000000E+0 - ,0.11022638E+4,0.256E+3,0.400E+2,0.18467000E+1,0.00000000E+0 - ,0.10016660E+4,0.256E+3,0.410E+2,0.18467000E+1,0.00000000E+0 - ,0.76883820E+3,0.256E+3,0.420E+2,0.18467000E+1,0.00000000E+0 - ,0.85963920E+3,0.256E+3,0.430E+2,0.18467000E+1,0.00000000E+0 - ,0.65071280E+3,0.256E+3,0.440E+2,0.18467000E+1,0.00000000E+0 - ,0.71108920E+3,0.256E+3,0.450E+2,0.18467000E+1,0.00000000E+0 - ,0.65796470E+3,0.256E+3,0.460E+2,0.18467000E+1,0.00000000E+0 - ,0.54942990E+3,0.256E+3,0.470E+2,0.18467000E+1,0.00000000E+0 - ,0.57810960E+3,0.256E+3,0.480E+2,0.18467000E+1,0.00000000E+0 - ,0.73051140E+3,0.256E+3,0.490E+2,0.18467000E+1,0.00000000E+0 - ,0.66979600E+3,0.256E+3,0.500E+2,0.18467000E+1,0.00000000E+0 - ,0.59220770E+3,0.256E+3,0.510E+2,0.18467000E+1,0.00000000E+0 - ,0.54693930E+3,0.256E+3,0.520E+2,0.18467000E+1,0.00000000E+0 - ,0.49213770E+3,0.256E+3,0.530E+2,0.18467000E+1,0.00000000E+0 - ,0.44046680E+3,0.256E+3,0.540E+2,0.18467000E+1,0.00000000E+0 - ,0.20130282E+4,0.256E+3,0.550E+2,0.18467000E+1,0.00000000E+0 - ,0.18160675E+4,0.256E+3,0.560E+2,0.18467000E+1,0.00000000E+0 - ,0.15814671E+4,0.256E+3,0.570E+2,0.18467000E+1,0.00000000E+0 - ,0.70080410E+3,0.256E+3,0.580E+2,0.18467000E+1,0.27991000E+1 - ,0.16040906E+4,0.256E+3,0.590E+2,0.18467000E+1,0.00000000E+0 - ,0.15379273E+4,0.256E+3,0.600E+2,0.18467000E+1,0.00000000E+0 - ,0.14986941E+4,0.256E+3,0.610E+2,0.18467000E+1,0.00000000E+0 - ,0.14626834E+4,0.256E+3,0.620E+2,0.18467000E+1,0.00000000E+0 - ,0.14307306E+4,0.256E+3,0.630E+2,0.18467000E+1,0.00000000E+0 - ,0.11145114E+4,0.256E+3,0.640E+2,0.18467000E+1,0.00000000E+0 - ,0.12733916E+4,0.256E+3,0.650E+2,0.18467000E+1,0.00000000E+0 - ,0.12261232E+4,0.256E+3,0.660E+2,0.18467000E+1,0.00000000E+0 - ,0.12874672E+4,0.256E+3,0.670E+2,0.18467000E+1,0.00000000E+0 - ,0.12598096E+4,0.256E+3,0.680E+2,0.18467000E+1,0.00000000E+0 - ,0.12347344E+4,0.256E+3,0.690E+2,0.18467000E+1,0.00000000E+0 - ,0.12207557E+4,0.256E+3,0.700E+2,0.18467000E+1,0.00000000E+0 - ,0.10219725E+4,0.256E+3,0.710E+2,0.18467000E+1,0.00000000E+0 - ,0.99637850E+3,0.256E+3,0.720E+2,0.18467000E+1,0.00000000E+0 - ,0.90460210E+3,0.256E+3,0.730E+2,0.18467000E+1,0.00000000E+0 - ,0.76098160E+3,0.256E+3,0.740E+2,0.18467000E+1,0.00000000E+0 - ,0.77254200E+3,0.256E+3,0.750E+2,0.18467000E+1,0.00000000E+0 - ,0.69708220E+3,0.256E+3,0.760E+2,0.18467000E+1,0.00000000E+0 - ,0.63615080E+3,0.256E+3,0.770E+2,0.18467000E+1,0.00000000E+0 - ,0.52655380E+3,0.256E+3,0.780E+2,0.18467000E+1,0.00000000E+0 - ,0.49121220E+3,0.256E+3,0.790E+2,0.18467000E+1,0.00000000E+0 - ,0.50441110E+3,0.256E+3,0.800E+2,0.18467000E+1,0.00000000E+0 - ,0.74864790E+3,0.256E+3,0.810E+2,0.18467000E+1,0.00000000E+0 - ,0.72700690E+3,0.256E+3,0.820E+2,0.18467000E+1,0.00000000E+0 - ,0.66322010E+3,0.256E+3,0.830E+2,0.18467000E+1,0.00000000E+0 - ,0.63000140E+3,0.256E+3,0.840E+2,0.18467000E+1,0.00000000E+0 - ,0.57868480E+3,0.256E+3,0.850E+2,0.18467000E+1,0.00000000E+0 - ,0.52816950E+3,0.256E+3,0.860E+2,0.18467000E+1,0.00000000E+0 - ,0.18871061E+4,0.256E+3,0.870E+2,0.18467000E+1,0.00000000E+0 - ,0.17877406E+4,0.256E+3,0.880E+2,0.18467000E+1,0.00000000E+0 - ,0.15670784E+4,0.256E+3,0.890E+2,0.18467000E+1,0.00000000E+0 - ,0.13954519E+4,0.256E+3,0.900E+2,0.18467000E+1,0.00000000E+0 - ,0.13918292E+4,0.256E+3,0.910E+2,0.18467000E+1,0.00000000E+0 - ,0.13473076E+4,0.256E+3,0.920E+2,0.18467000E+1,0.00000000E+0 - ,0.13948404E+4,0.256E+3,0.930E+2,0.18467000E+1,0.00000000E+0 - ,0.13493008E+4,0.256E+3,0.940E+2,0.18467000E+1,0.00000000E+0 - ,0.72901300E+2,0.256E+3,0.101E+3,0.18467000E+1,0.00000000E+0 - ,0.24228720E+3,0.256E+3,0.103E+3,0.18467000E+1,0.98650000E+0 - ,0.30814100E+3,0.256E+3,0.104E+3,0.18467000E+1,0.98080000E+0 - ,0.23165430E+3,0.256E+3,0.105E+3,0.18467000E+1,0.97060000E+0 - ,0.17302490E+3,0.256E+3,0.106E+3,0.18467000E+1,0.98680000E+0 - ,0.11914340E+3,0.256E+3,0.107E+3,0.18467000E+1,0.99440000E+0 - ,0.86077300E+2,0.256E+3,0.108E+3,0.18467000E+1,0.99250000E+0 - ,0.58583600E+2,0.256E+3,0.109E+3,0.18467000E+1,0.99820000E+0 - ,0.35534390E+3,0.256E+3,0.111E+3,0.18467000E+1,0.96840000E+0 - ,0.55067610E+3,0.256E+3,0.112E+3,0.18467000E+1,0.96280000E+0 - ,0.55286340E+3,0.256E+3,0.113E+3,0.18467000E+1,0.96480000E+0 - ,0.43885970E+3,0.256E+3,0.114E+3,0.18467000E+1,0.95070000E+0 - ,0.35626970E+3,0.256E+3,0.115E+3,0.18467000E+1,0.99470000E+0 - ,0.29950590E+3,0.256E+3,0.116E+3,0.18467000E+1,0.99480000E+0 - ,0.24334210E+3,0.256E+3,0.117E+3,0.18467000E+1,0.99720000E+0 - ,0.48693460E+3,0.256E+3,0.119E+3,0.18467000E+1,0.97670000E+0 - ,0.95257710E+3,0.256E+3,0.120E+3,0.18467000E+1,0.98310000E+0 - ,0.48182380E+3,0.256E+3,0.121E+3,0.18467000E+1,0.18627000E+1 - ,0.46502110E+3,0.256E+3,0.122E+3,0.18467000E+1,0.18299000E+1 - ,0.45578960E+3,0.256E+3,0.123E+3,0.18467000E+1,0.19138000E+1 - ,0.45213520E+3,0.256E+3,0.124E+3,0.18467000E+1,0.18269000E+1 - ,0.41343280E+3,0.256E+3,0.125E+3,0.18467000E+1,0.16406000E+1 - ,0.38195910E+3,0.256E+3,0.126E+3,0.18467000E+1,0.16483000E+1 - ,0.36437600E+3,0.256E+3,0.127E+3,0.18467000E+1,0.17149000E+1 - ,0.35638920E+3,0.256E+3,0.128E+3,0.18467000E+1,0.17937000E+1 - ,0.35372270E+3,0.256E+3,0.129E+3,0.18467000E+1,0.95760000E+0 - ,0.32913430E+3,0.256E+3,0.130E+3,0.18467000E+1,0.19419000E+1 - ,0.54664020E+3,0.256E+3,0.131E+3,0.18467000E+1,0.96010000E+0 - ,0.47553820E+3,0.256E+3,0.132E+3,0.18467000E+1,0.94340000E+0 - ,0.42329180E+3,0.256E+3,0.133E+3,0.18467000E+1,0.98890000E+0 - ,0.38476970E+3,0.256E+3,0.134E+3,0.18467000E+1,0.99010000E+0 - ,0.33723270E+3,0.256E+3,0.135E+3,0.18467000E+1,0.99740000E+0 - ,0.57979800E+3,0.256E+3,0.137E+3,0.18467000E+1,0.97380000E+0 - ,0.11609040E+4,0.256E+3,0.138E+3,0.18467000E+1,0.98010000E+0 - ,0.87228820E+3,0.256E+3,0.139E+3,0.18467000E+1,0.19153000E+1 - ,0.63807920E+3,0.256E+3,0.140E+3,0.18467000E+1,0.19355000E+1 - ,0.64445150E+3,0.256E+3,0.141E+3,0.18467000E+1,0.19545000E+1 - ,0.59966140E+3,0.256E+3,0.142E+3,0.18467000E+1,0.19420000E+1 - ,0.67812320E+3,0.256E+3,0.143E+3,0.18467000E+1,0.16682000E+1 - ,0.51957380E+3,0.256E+3,0.144E+3,0.18467000E+1,0.18584000E+1 - ,0.48580720E+3,0.256E+3,0.145E+3,0.18467000E+1,0.19003000E+1 - ,0.45060820E+3,0.256E+3,0.146E+3,0.18467000E+1,0.18630000E+1 - ,0.43621390E+3,0.256E+3,0.147E+3,0.18467000E+1,0.96790000E+0 - ,0.42955510E+3,0.256E+3,0.148E+3,0.18467000E+1,0.19539000E+1 - ,0.69425600E+3,0.256E+3,0.149E+3,0.18467000E+1,0.96330000E+0 - ,0.62268260E+3,0.256E+3,0.150E+3,0.18467000E+1,0.95140000E+0 - ,0.57980000E+3,0.256E+3,0.151E+3,0.18467000E+1,0.97490000E+0 - ,0.54638720E+3,0.256E+3,0.152E+3,0.18467000E+1,0.98110000E+0 - ,0.49679900E+3,0.256E+3,0.153E+3,0.18467000E+1,0.99680000E+0 - ,0.68134670E+3,0.256E+3,0.155E+3,0.18467000E+1,0.99090000E+0 - ,0.15113430E+4,0.256E+3,0.156E+3,0.18467000E+1,0.97970000E+0 - ,0.11059643E+4,0.256E+3,0.157E+3,0.18467000E+1,0.19373000E+1 - ,0.67935610E+3,0.256E+3,0.159E+3,0.18467000E+1,0.29425000E+1 - ,0.66524220E+3,0.256E+3,0.160E+3,0.18467000E+1,0.29455000E+1 - ,0.64390080E+3,0.256E+3,0.161E+3,0.18467000E+1,0.29413000E+1 - ,0.64787420E+3,0.256E+3,0.162E+3,0.18467000E+1,0.29300000E+1 - ,0.62696840E+3,0.256E+3,0.163E+3,0.18467000E+1,0.18286000E+1 - ,0.65218100E+3,0.256E+3,0.164E+3,0.18467000E+1,0.28732000E+1 - ,0.61190030E+3,0.256E+3,0.165E+3,0.18467000E+1,0.29086000E+1 - ,0.62406450E+3,0.256E+3,0.166E+3,0.18467000E+1,0.28965000E+1 - ,0.58019150E+3,0.256E+3,0.167E+3,0.18467000E+1,0.29242000E+1 - ,0.56343460E+3,0.256E+3,0.168E+3,0.18467000E+1,0.29282000E+1 - ,0.55999100E+3,0.256E+3,0.169E+3,0.18467000E+1,0.29246000E+1 - ,0.58959320E+3,0.256E+3,0.170E+3,0.18467000E+1,0.28482000E+1 - ,0.54094020E+3,0.256E+3,0.171E+3,0.18467000E+1,0.29219000E+1 - ,0.74394190E+3,0.256E+3,0.172E+3,0.18467000E+1,0.19254000E+1 - ,0.68699120E+3,0.256E+3,0.173E+3,0.18467000E+1,0.19459000E+1 - ,0.62358700E+3,0.256E+3,0.174E+3,0.18467000E+1,0.19292000E+1 - ,0.63381630E+3,0.256E+3,0.175E+3,0.18467000E+1,0.18104000E+1 - ,0.54831610E+3,0.256E+3,0.176E+3,0.18467000E+1,0.18858000E+1 - ,0.51495440E+3,0.256E+3,0.177E+3,0.18467000E+1,0.18648000E+1 - ,0.49133470E+3,0.256E+3,0.178E+3,0.18467000E+1,0.19188000E+1 - ,0.46979990E+3,0.256E+3,0.179E+3,0.18467000E+1,0.98460000E+0 - ,0.45204520E+3,0.256E+3,0.180E+3,0.18467000E+1,0.19896000E+1 - ,0.74445260E+3,0.256E+3,0.181E+3,0.18467000E+1,0.92670000E+0 - ,0.67269630E+3,0.256E+3,0.182E+3,0.18467000E+1,0.93830000E+0 - ,0.64947180E+3,0.256E+3,0.183E+3,0.18467000E+1,0.98200000E+0 - ,0.62976130E+3,0.256E+3,0.184E+3,0.18467000E+1,0.98150000E+0 - ,0.58566430E+3,0.256E+3,0.185E+3,0.18467000E+1,0.99540000E+0 - ,0.76695690E+3,0.256E+3,0.187E+3,0.18467000E+1,0.97050000E+0 - ,0.14944404E+4,0.256E+3,0.188E+3,0.18467000E+1,0.96620000E+0 - ,0.80404920E+3,0.256E+3,0.189E+3,0.18467000E+1,0.29070000E+1 - ,0.93536030E+3,0.256E+3,0.190E+3,0.18467000E+1,0.28844000E+1 - ,0.83446090E+3,0.256E+3,0.191E+3,0.18467000E+1,0.28738000E+1 - ,0.73260640E+3,0.256E+3,0.192E+3,0.18467000E+1,0.28878000E+1 - ,0.70402570E+3,0.256E+3,0.193E+3,0.18467000E+1,0.29095000E+1 - ,0.86065850E+3,0.256E+3,0.194E+3,0.18467000E+1,0.19209000E+1 - ,0.19758390E+3,0.256E+3,0.204E+3,0.18467000E+1,0.19697000E+1 - ,0.19383810E+3,0.256E+3,0.205E+3,0.18467000E+1,0.19441000E+1 - ,0.14029040E+3,0.256E+3,0.206E+3,0.18467000E+1,0.19985000E+1 - ,0.11170570E+3,0.256E+3,0.207E+3,0.18467000E+1,0.20143000E+1 - ,0.75741700E+2,0.256E+3,0.208E+3,0.18467000E+1,0.19887000E+1 - ,0.35305310E+3,0.256E+3,0.212E+3,0.18467000E+1,0.19496000E+1 - ,0.42739490E+3,0.256E+3,0.213E+3,0.18467000E+1,0.19311000E+1 - ,0.40746200E+3,0.256E+3,0.214E+3,0.18467000E+1,0.19435000E+1 - ,0.35168440E+3,0.256E+3,0.215E+3,0.18467000E+1,0.20102000E+1 - ,0.29341430E+3,0.256E+3,0.216E+3,0.18467000E+1,0.19903000E+1 - ,0.49541720E+3,0.256E+3,0.220E+3,0.18467000E+1,0.19349000E+1 - ,0.47369840E+3,0.256E+3,0.221E+3,0.18467000E+1,0.28999000E+1 - ,0.47934490E+3,0.256E+3,0.222E+3,0.18467000E+1,0.38675000E+1 - ,0.43891900E+3,0.256E+3,0.223E+3,0.18467000E+1,0.29110000E+1 - ,0.32804360E+3,0.256E+3,0.224E+3,0.18467000E+1,0.10619100E+2 - ,0.27929530E+3,0.256E+3,0.225E+3,0.18467000E+1,0.98849000E+1 - ,0.27428730E+3,0.256E+3,0.226E+3,0.18467000E+1,0.91376000E+1 - ,0.32404980E+3,0.256E+3,0.227E+3,0.18467000E+1,0.29263000E+1 - ,0.30116290E+3,0.256E+3,0.228E+3,0.18467000E+1,0.65458000E+1 - ,0.42932210E+3,0.256E+3,0.231E+3,0.18467000E+1,0.19315000E+1 - ,0.45201960E+3,0.256E+3,0.232E+3,0.18467000E+1,0.19447000E+1 - ,0.41181840E+3,0.256E+3,0.233E+3,0.18467000E+1,0.19793000E+1 - ,0.38169420E+3,0.256E+3,0.234E+3,0.18467000E+1,0.19812000E+1 - ,0.59335720E+3,0.256E+3,0.238E+3,0.18467000E+1,0.19143000E+1 - ,0.56724450E+3,0.256E+3,0.239E+3,0.18467000E+1,0.28903000E+1 - ,0.57102950E+3,0.256E+3,0.240E+3,0.18467000E+1,0.39106000E+1 - ,0.55267180E+3,0.256E+3,0.241E+3,0.18467000E+1,0.29225000E+1 - ,0.48602980E+3,0.256E+3,0.242E+3,0.18467000E+1,0.11055600E+2 - ,0.42718180E+3,0.256E+3,0.243E+3,0.18467000E+1,0.95402000E+1 - ,0.40302800E+3,0.256E+3,0.244E+3,0.18467000E+1,0.88895000E+1 - ,0.41253210E+3,0.256E+3,0.245E+3,0.18467000E+1,0.29696000E+1 - ,0.43149070E+3,0.256E+3,0.246E+3,0.18467000E+1,0.57095000E+1 - ,0.55308270E+3,0.256E+3,0.249E+3,0.18467000E+1,0.19378000E+1 - ,0.60097790E+3,0.256E+3,0.250E+3,0.18467000E+1,0.19505000E+1 - ,0.56310510E+3,0.256E+3,0.251E+3,0.18467000E+1,0.19523000E+1 - ,0.54167760E+3,0.256E+3,0.252E+3,0.18467000E+1,0.19639000E+1 - ,0.71654750E+3,0.256E+3,0.256E+3,0.18467000E+1,0.18467000E+1 - ,0.46820200E+2,0.257E+3,0.100E+1,0.29175000E+1,0.91180000E+0 - ,0.30588600E+2,0.257E+3,0.200E+1,0.29175000E+1,0.00000000E+0 - ,0.74890520E+3,0.257E+3,0.300E+1,0.29175000E+1,0.00000000E+0 - ,0.42804980E+3,0.257E+3,0.400E+1,0.29175000E+1,0.00000000E+0 - ,0.28602900E+3,0.257E+3,0.500E+1,0.29175000E+1,0.00000000E+0 - ,0.19193550E+3,0.257E+3,0.600E+1,0.29175000E+1,0.00000000E+0 - ,0.13344100E+3,0.257E+3,0.700E+1,0.29175000E+1,0.00000000E+0 - ,0.10055750E+3,0.257E+3,0.800E+1,0.29175000E+1,0.00000000E+0 - ,0.75829800E+2,0.257E+3,0.900E+1,0.29175000E+1,0.00000000E+0 - ,0.58079500E+2,0.257E+3,0.100E+2,0.29175000E+1,0.00000000E+0 - ,0.89474480E+3,0.257E+3,0.110E+2,0.29175000E+1,0.00000000E+0 - ,0.68323710E+3,0.257E+3,0.120E+2,0.29175000E+1,0.00000000E+0 - ,0.62753480E+3,0.257E+3,0.130E+2,0.29175000E+1,0.00000000E+0 - ,0.49189290E+3,0.257E+3,0.140E+2,0.29175000E+1,0.00000000E+0 - ,0.38167570E+3,0.257E+3,0.150E+2,0.29175000E+1,0.00000000E+0 - ,0.31561930E+3,0.257E+3,0.160E+2,0.29175000E+1,0.00000000E+0 - ,0.25684550E+3,0.257E+3,0.170E+2,0.29175000E+1,0.00000000E+0 - ,0.20937070E+3,0.257E+3,0.180E+2,0.29175000E+1,0.00000000E+0 - ,0.14672405E+4,0.257E+3,0.190E+2,0.29175000E+1,0.00000000E+0 - ,0.12041091E+4,0.257E+3,0.200E+2,0.29175000E+1,0.00000000E+0 - ,0.99328050E+3,0.257E+3,0.210E+2,0.29175000E+1,0.00000000E+0 - ,0.95757000E+3,0.257E+3,0.220E+2,0.29175000E+1,0.00000000E+0 - ,0.87600500E+3,0.257E+3,0.230E+2,0.29175000E+1,0.00000000E+0 - ,0.68947940E+3,0.257E+3,0.240E+2,0.29175000E+1,0.00000000E+0 - ,0.75309320E+3,0.257E+3,0.250E+2,0.29175000E+1,0.00000000E+0 - ,0.59043900E+3,0.257E+3,0.260E+2,0.29175000E+1,0.00000000E+0 - ,0.62501030E+3,0.257E+3,0.270E+2,0.29175000E+1,0.00000000E+0 - ,0.64450280E+3,0.257E+3,0.280E+2,0.29175000E+1,0.00000000E+0 - ,0.49360530E+3,0.257E+3,0.290E+2,0.29175000E+1,0.00000000E+0 - ,0.50558370E+3,0.257E+3,0.300E+2,0.29175000E+1,0.00000000E+0 - ,0.59983010E+3,0.257E+3,0.310E+2,0.29175000E+1,0.00000000E+0 - ,0.52686600E+3,0.257E+3,0.320E+2,0.29175000E+1,0.00000000E+0 - ,0.44755460E+3,0.257E+3,0.330E+2,0.29175000E+1,0.00000000E+0 - ,0.40047040E+3,0.257E+3,0.340E+2,0.29175000E+1,0.00000000E+0 - ,0.34937100E+3,0.257E+3,0.350E+2,0.29175000E+1,0.00000000E+0 - ,0.30289600E+3,0.257E+3,0.360E+2,0.29175000E+1,0.00000000E+0 - ,0.16430879E+4,0.257E+3,0.370E+2,0.29175000E+1,0.00000000E+0 - ,0.14346583E+4,0.257E+3,0.380E+2,0.29175000E+1,0.00000000E+0 - ,0.12531317E+4,0.257E+3,0.390E+2,0.29175000E+1,0.00000000E+0 - ,0.11240457E+4,0.257E+3,0.400E+2,0.29175000E+1,0.00000000E+0 - ,0.10235000E+4,0.257E+3,0.410E+2,0.29175000E+1,0.00000000E+0 - ,0.78790450E+3,0.257E+3,0.420E+2,0.29175000E+1,0.00000000E+0 - ,0.88003140E+3,0.257E+3,0.430E+2,0.29175000E+1,0.00000000E+0 - ,0.66828590E+3,0.257E+3,0.440E+2,0.29175000E+1,0.00000000E+0 - ,0.73081350E+3,0.257E+3,0.450E+2,0.29175000E+1,0.00000000E+0 - ,0.67702710E+3,0.257E+3,0.460E+2,0.29175000E+1,0.00000000E+0 - ,0.56424900E+3,0.257E+3,0.470E+2,0.29175000E+1,0.00000000E+0 - ,0.59573220E+3,0.257E+3,0.480E+2,0.29175000E+1,0.00000000E+0 - ,0.74999110E+3,0.257E+3,0.490E+2,0.29175000E+1,0.00000000E+0 - ,0.69136370E+3,0.257E+3,0.500E+2,0.29175000E+1,0.00000000E+0 - ,0.61397930E+3,0.257E+3,0.510E+2,0.29175000E+1,0.00000000E+0 - ,0.56835230E+3,0.257E+3,0.520E+2,0.29175000E+1,0.00000000E+0 - ,0.51253890E+3,0.257E+3,0.530E+2,0.29175000E+1,0.00000000E+0 - ,0.45957350E+3,0.257E+3,0.540E+2,0.29175000E+1,0.00000000E+0 - ,0.20012557E+4,0.257E+3,0.550E+2,0.29175000E+1,0.00000000E+0 - ,0.18302684E+4,0.257E+3,0.560E+2,0.29175000E+1,0.00000000E+0 - ,0.16035452E+4,0.257E+3,0.570E+2,0.29175000E+1,0.00000000E+0 - ,0.72568940E+3,0.257E+3,0.580E+2,0.29175000E+1,0.27991000E+1 - ,0.16196684E+4,0.257E+3,0.590E+2,0.29175000E+1,0.00000000E+0 - ,0.15546376E+4,0.257E+3,0.600E+2,0.29175000E+1,0.00000000E+0 - ,0.15154611E+4,0.257E+3,0.610E+2,0.29175000E+1,0.00000000E+0 - ,0.14794584E+4,0.257E+3,0.620E+2,0.29175000E+1,0.00000000E+0 - ,0.14475288E+4,0.257E+3,0.630E+2,0.29175000E+1,0.00000000E+0 - ,0.11341326E+4,0.257E+3,0.640E+2,0.29175000E+1,0.00000000E+0 - ,0.12823779E+4,0.257E+3,0.650E+2,0.29175000E+1,0.00000000E+0 - ,0.12360668E+4,0.257E+3,0.660E+2,0.29175000E+1,0.00000000E+0 - ,0.13047191E+4,0.257E+3,0.670E+2,0.29175000E+1,0.00000000E+0 - ,0.12769567E+4,0.257E+3,0.680E+2,0.29175000E+1,0.00000000E+0 - ,0.12518739E+4,0.257E+3,0.690E+2,0.29175000E+1,0.00000000E+0 - ,0.12374305E+4,0.257E+3,0.700E+2,0.29175000E+1,0.00000000E+0 - ,0.10399691E+4,0.257E+3,0.710E+2,0.29175000E+1,0.00000000E+0 - ,0.10199809E+4,0.257E+3,0.720E+2,0.29175000E+1,0.00000000E+0 - ,0.92884540E+3,0.257E+3,0.730E+2,0.29175000E+1,0.00000000E+0 - ,0.78260680E+3,0.257E+3,0.740E+2,0.29175000E+1,0.00000000E+0 - ,0.79560020E+3,0.257E+3,0.750E+2,0.29175000E+1,0.00000000E+0 - ,0.71959790E+3,0.257E+3,0.760E+2,0.29175000E+1,0.00000000E+0 - ,0.65787990E+3,0.257E+3,0.770E+2,0.29175000E+1,0.00000000E+0 - ,0.54519970E+3,0.257E+3,0.780E+2,0.29175000E+1,0.00000000E+0 - ,0.50886690E+3,0.257E+3,0.790E+2,0.29175000E+1,0.00000000E+0 - ,0.52322550E+3,0.257E+3,0.800E+2,0.29175000E+1,0.00000000E+0 - ,0.76879970E+3,0.257E+3,0.810E+2,0.29175000E+1,0.00000000E+0 - ,0.74998940E+3,0.257E+3,0.820E+2,0.29175000E+1,0.00000000E+0 - ,0.68706370E+3,0.257E+3,0.830E+2,0.29175000E+1,0.00000000E+0 - ,0.65405030E+3,0.257E+3,0.840E+2,0.29175000E+1,0.00000000E+0 - ,0.60215770E+3,0.257E+3,0.850E+2,0.29175000E+1,0.00000000E+0 - ,0.55060100E+3,0.257E+3,0.860E+2,0.29175000E+1,0.00000000E+0 - ,0.18855867E+4,0.257E+3,0.870E+2,0.29175000E+1,0.00000000E+0 - ,0.18071153E+4,0.257E+3,0.880E+2,0.29175000E+1,0.00000000E+0 - ,0.15930087E+4,0.257E+3,0.890E+2,0.29175000E+1,0.00000000E+0 - ,0.14265400E+4,0.257E+3,0.900E+2,0.29175000E+1,0.00000000E+0 - ,0.14182359E+4,0.257E+3,0.910E+2,0.29175000E+1,0.00000000E+0 - ,0.13730549E+4,0.257E+3,0.920E+2,0.29175000E+1,0.00000000E+0 - ,0.14164457E+4,0.257E+3,0.930E+2,0.29175000E+1,0.00000000E+0 - ,0.13711890E+4,0.257E+3,0.940E+2,0.29175000E+1,0.00000000E+0 - ,0.75839400E+2,0.257E+3,0.101E+3,0.29175000E+1,0.00000000E+0 - ,0.24848670E+3,0.257E+3,0.103E+3,0.29175000E+1,0.98650000E+0 - ,0.31648150E+3,0.257E+3,0.104E+3,0.29175000E+1,0.98080000E+0 - ,0.24013610E+3,0.257E+3,0.105E+3,0.29175000E+1,0.97060000E+0 - ,0.18003260E+3,0.257E+3,0.106E+3,0.29175000E+1,0.98680000E+0 - ,0.12441240E+3,0.257E+3,0.107E+3,0.29175000E+1,0.99440000E+0 - ,0.90093200E+2,0.257E+3,0.108E+3,0.29175000E+1,0.99250000E+0 - ,0.61449900E+2,0.257E+3,0.109E+3,0.29175000E+1,0.99820000E+0 - ,0.36346120E+3,0.257E+3,0.111E+3,0.29175000E+1,0.96840000E+0 - ,0.56268080E+3,0.257E+3,0.112E+3,0.29175000E+1,0.96280000E+0 - ,0.56814570E+3,0.257E+3,0.113E+3,0.29175000E+1,0.96480000E+0 - ,0.45421760E+3,0.257E+3,0.114E+3,0.29175000E+1,0.95070000E+0 - ,0.37038990E+3,0.257E+3,0.115E+3,0.29175000E+1,0.99470000E+0 - ,0.31215000E+3,0.257E+3,0.116E+3,0.29175000E+1,0.99480000E+0 - ,0.25418510E+3,0.257E+3,0.117E+3,0.29175000E+1,0.99720000E+0 - ,0.49920670E+3,0.257E+3,0.119E+3,0.29175000E+1,0.97670000E+0 - ,0.96226620E+3,0.257E+3,0.120E+3,0.29175000E+1,0.98310000E+0 - ,0.49762570E+3,0.257E+3,0.121E+3,0.29175000E+1,0.18627000E+1 - ,0.48020280E+3,0.257E+3,0.122E+3,0.29175000E+1,0.18299000E+1 - ,0.47059030E+3,0.257E+3,0.123E+3,0.29175000E+1,0.19138000E+1 - ,0.46642410E+3,0.257E+3,0.124E+3,0.29175000E+1,0.18269000E+1 - ,0.42818050E+3,0.257E+3,0.125E+3,0.29175000E+1,0.16406000E+1 - ,0.39589450E+3,0.257E+3,0.126E+3,0.29175000E+1,0.16483000E+1 - ,0.37758950E+3,0.257E+3,0.127E+3,0.29175000E+1,0.17149000E+1 - ,0.36919520E+3,0.257E+3,0.128E+3,0.29175000E+1,0.17937000E+1 - ,0.36539900E+3,0.257E+3,0.129E+3,0.29175000E+1,0.95760000E+0 - ,0.34173160E+3,0.257E+3,0.130E+3,0.29175000E+1,0.19419000E+1 - ,0.56276860E+3,0.257E+3,0.131E+3,0.29175000E+1,0.96010000E+0 - ,0.49236040E+3,0.257E+3,0.132E+3,0.29175000E+1,0.94340000E+0 - ,0.43983840E+3,0.257E+3,0.133E+3,0.29175000E+1,0.98890000E+0 - ,0.40063200E+3,0.257E+3,0.134E+3,0.29175000E+1,0.99010000E+0 - ,0.35185020E+3,0.257E+3,0.135E+3,0.29175000E+1,0.99740000E+0 - ,0.59499260E+3,0.257E+3,0.137E+3,0.29175000E+1,0.97380000E+0 - ,0.11711205E+4,0.257E+3,0.138E+3,0.29175000E+1,0.98010000E+0 - ,0.88995010E+3,0.257E+3,0.139E+3,0.29175000E+1,0.19153000E+1 - ,0.65820980E+3,0.257E+3,0.140E+3,0.29175000E+1,0.19355000E+1 - ,0.66473460E+3,0.257E+3,0.141E+3,0.29175000E+1,0.19545000E+1 - ,0.61909740E+3,0.257E+3,0.142E+3,0.29175000E+1,0.19420000E+1 - ,0.69637520E+3,0.257E+3,0.143E+3,0.29175000E+1,0.16682000E+1 - ,0.53817200E+3,0.257E+3,0.144E+3,0.29175000E+1,0.18584000E+1 - ,0.50319100E+3,0.257E+3,0.145E+3,0.29175000E+1,0.19003000E+1 - ,0.46688550E+3,0.257E+3,0.146E+3,0.29175000E+1,0.18630000E+1 - ,0.45174170E+3,0.257E+3,0.147E+3,0.29175000E+1,0.96790000E+0 - ,0.44617650E+3,0.257E+3,0.148E+3,0.29175000E+1,0.19539000E+1 - ,0.71406170E+3,0.257E+3,0.149E+3,0.29175000E+1,0.96330000E+0 - ,0.64381770E+3,0.257E+3,0.150E+3,0.29175000E+1,0.95140000E+0 - ,0.60143340E+3,0.257E+3,0.151E+3,0.29175000E+1,0.97490000E+0 - ,0.56786370E+3,0.257E+3,0.152E+3,0.29175000E+1,0.98110000E+0 - ,0.51738510E+3,0.257E+3,0.153E+3,0.29175000E+1,0.99680000E+0 - ,0.70211480E+3,0.257E+3,0.155E+3,0.29175000E+1,0.99090000E+0 - ,0.15197933E+4,0.257E+3,0.156E+3,0.29175000E+1,0.97970000E+0 - ,0.11269136E+4,0.257E+3,0.157E+3,0.29175000E+1,0.19373000E+1 - ,0.70363390E+3,0.257E+3,0.159E+3,0.29175000E+1,0.29425000E+1 - ,0.68904640E+3,0.257E+3,0.160E+3,0.29175000E+1,0.29455000E+1 - ,0.66706290E+3,0.257E+3,0.161E+3,0.29175000E+1,0.29413000E+1 - ,0.67068630E+3,0.257E+3,0.162E+3,0.29175000E+1,0.29300000E+1 - ,0.64747300E+3,0.257E+3,0.163E+3,0.29175000E+1,0.18286000E+1 - ,0.67511960E+3,0.257E+3,0.164E+3,0.29175000E+1,0.28732000E+1 - ,0.63375280E+3,0.257E+3,0.165E+3,0.29175000E+1,0.29086000E+1 - ,0.64544130E+3,0.257E+3,0.166E+3,0.29175000E+1,0.28965000E+1 - ,0.60128460E+3,0.257E+3,0.167E+3,0.29175000E+1,0.29242000E+1 - ,0.58404680E+3,0.257E+3,0.168E+3,0.29175000E+1,0.29282000E+1 - ,0.58039470E+3,0.257E+3,0.169E+3,0.29175000E+1,0.29246000E+1 - ,0.61065540E+3,0.257E+3,0.170E+3,0.29175000E+1,0.28482000E+1 - ,0.56086530E+3,0.257E+3,0.171E+3,0.29175000E+1,0.29219000E+1 - ,0.76459540E+3,0.257E+3,0.172E+3,0.29175000E+1,0.19254000E+1 - ,0.70805680E+3,0.257E+3,0.173E+3,0.29175000E+1,0.19459000E+1 - ,0.64452930E+3,0.257E+3,0.174E+3,0.29175000E+1,0.19292000E+1 - ,0.65336840E+3,0.257E+3,0.175E+3,0.29175000E+1,0.18104000E+1 - ,0.56893970E+3,0.257E+3,0.176E+3,0.29175000E+1,0.18858000E+1 - ,0.53465980E+3,0.257E+3,0.177E+3,0.29175000E+1,0.18648000E+1 - ,0.51029930E+3,0.257E+3,0.178E+3,0.29175000E+1,0.19188000E+1 - ,0.48773540E+3,0.257E+3,0.179E+3,0.29175000E+1,0.98460000E+0 - ,0.47044860E+3,0.257E+3,0.180E+3,0.29175000E+1,0.19896000E+1 - ,0.76580950E+3,0.257E+3,0.181E+3,0.29175000E+1,0.92670000E+0 - ,0.69566310E+3,0.257E+3,0.182E+3,0.29175000E+1,0.93830000E+0 - ,0.67341930E+3,0.257E+3,0.183E+3,0.29175000E+1,0.98200000E+0 - ,0.65403890E+3,0.257E+3,0.184E+3,0.29175000E+1,0.98150000E+0 - ,0.60946360E+3,0.257E+3,0.185E+3,0.29175000E+1,0.99540000E+0 - ,0.79062920E+3,0.257E+3,0.187E+3,0.29175000E+1,0.97050000E+0 - ,0.15089609E+4,0.257E+3,0.188E+3,0.29175000E+1,0.96620000E+0 - ,0.83278590E+3,0.257E+3,0.189E+3,0.29175000E+1,0.29070000E+1 - ,0.96389140E+3,0.257E+3,0.190E+3,0.29175000E+1,0.28844000E+1 - ,0.86055570E+3,0.257E+3,0.191E+3,0.29175000E+1,0.28738000E+1 - ,0.75868030E+3,0.257E+3,0.192E+3,0.29175000E+1,0.28878000E+1 - ,0.72961370E+3,0.257E+3,0.193E+3,0.29175000E+1,0.29095000E+1 - ,0.88320780E+3,0.257E+3,0.194E+3,0.29175000E+1,0.19209000E+1 - ,0.20508500E+3,0.257E+3,0.204E+3,0.29175000E+1,0.19697000E+1 - ,0.20120830E+3,0.257E+3,0.205E+3,0.29175000E+1,0.19441000E+1 - ,0.14633300E+3,0.257E+3,0.206E+3,0.29175000E+1,0.19985000E+1 - ,0.11668030E+3,0.257E+3,0.207E+3,0.29175000E+1,0.20143000E+1 - ,0.79287700E+2,0.257E+3,0.208E+3,0.29175000E+1,0.19887000E+1 - ,0.36491620E+3,0.257E+3,0.212E+3,0.29175000E+1,0.19496000E+1 - ,0.44120040E+3,0.257E+3,0.213E+3,0.29175000E+1,0.19311000E+1 - ,0.42212020E+3,0.257E+3,0.214E+3,0.29175000E+1,0.19435000E+1 - ,0.36544980E+3,0.257E+3,0.215E+3,0.29175000E+1,0.20102000E+1 - ,0.30579960E+3,0.257E+3,0.216E+3,0.29175000E+1,0.19903000E+1 - ,0.51130630E+3,0.257E+3,0.220E+3,0.29175000E+1,0.19349000E+1 - ,0.49031810E+3,0.257E+3,0.221E+3,0.29175000E+1,0.28999000E+1 - ,0.49624460E+3,0.257E+3,0.222E+3,0.29175000E+1,0.38675000E+1 - ,0.45408320E+3,0.257E+3,0.223E+3,0.29175000E+1,0.29110000E+1 - ,0.34051320E+3,0.257E+3,0.224E+3,0.29175000E+1,0.10619100E+2 - ,0.29056100E+3,0.257E+3,0.225E+3,0.29175000E+1,0.98849000E+1 - ,0.28526770E+3,0.257E+3,0.226E+3,0.29175000E+1,0.91376000E+1 - ,0.33581530E+3,0.257E+3,0.227E+3,0.29175000E+1,0.29263000E+1 - ,0.31248780E+3,0.257E+3,0.228E+3,0.29175000E+1,0.65458000E+1 - ,0.44415730E+3,0.257E+3,0.231E+3,0.29175000E+1,0.19315000E+1 - ,0.46838860E+3,0.257E+3,0.232E+3,0.29175000E+1,0.19447000E+1 - ,0.42809060E+3,0.257E+3,0.233E+3,0.29175000E+1,0.19793000E+1 - ,0.39744450E+3,0.257E+3,0.234E+3,0.29175000E+1,0.19812000E+1 - ,0.61229940E+3,0.257E+3,0.238E+3,0.29175000E+1,0.19143000E+1 - ,0.58772220E+3,0.257E+3,0.239E+3,0.29175000E+1,0.28903000E+1 - ,0.59223960E+3,0.257E+3,0.240E+3,0.29175000E+1,0.39106000E+1 - ,0.57268150E+3,0.257E+3,0.241E+3,0.29175000E+1,0.29225000E+1 - ,0.50489560E+3,0.257E+3,0.242E+3,0.29175000E+1,0.11055600E+2 - ,0.44457570E+3,0.257E+3,0.243E+3,0.29175000E+1,0.95402000E+1 - ,0.41969160E+3,0.257E+3,0.244E+3,0.29175000E+1,0.88895000E+1 - ,0.42842590E+3,0.257E+3,0.245E+3,0.29175000E+1,0.29696000E+1 - ,0.44792670E+3,0.257E+3,0.246E+3,0.29175000E+1,0.57095000E+1 - ,0.57208230E+3,0.257E+3,0.249E+3,0.29175000E+1,0.19378000E+1 - ,0.62193900E+3,0.257E+3,0.250E+3,0.29175000E+1,0.19505000E+1 - ,0.58452180E+3,0.257E+3,0.251E+3,0.29175000E+1,0.19523000E+1 - ,0.56311340E+3,0.257E+3,0.252E+3,0.29175000E+1,0.19639000E+1 - ,0.73991600E+3,0.257E+3,0.256E+3,0.29175000E+1,0.18467000E+1 - ,0.76602020E+3,0.257E+3,0.257E+3,0.29175000E+1,0.29175000E+1 - ,0.35219500E+2,0.272E+3,0.100E+1,0.38840000E+1,0.91180000E+0 - ,0.23410600E+2,0.272E+3,0.200E+1,0.38840000E+1,0.00000000E+0 - ,0.52531240E+3,0.272E+3,0.300E+1,0.38840000E+1,0.00000000E+0 - ,0.30984670E+3,0.272E+3,0.400E+1,0.38840000E+1,0.00000000E+0 - ,0.21084170E+3,0.272E+3,0.500E+1,0.38840000E+1,0.00000000E+0 - ,0.14342000E+3,0.272E+3,0.600E+1,0.38840000E+1,0.00000000E+0 - ,0.10074190E+3,0.272E+3,0.700E+1,0.38840000E+1,0.00000000E+0 - ,0.76484200E+2,0.272E+3,0.800E+1,0.38840000E+1,0.00000000E+0 - ,0.58056700E+2,0.272E+3,0.900E+1,0.38840000E+1,0.00000000E+0 - ,0.44712000E+2,0.272E+3,0.100E+2,0.38840000E+1,0.00000000E+0 - ,0.62893080E+3,0.272E+3,0.110E+2,0.38840000E+1,0.00000000E+0 - ,0.49188460E+3,0.272E+3,0.120E+2,0.38840000E+1,0.00000000E+0 - ,0.45602900E+3,0.272E+3,0.130E+2,0.38840000E+1,0.00000000E+0 - ,0.36194550E+3,0.272E+3,0.140E+2,0.38840000E+1,0.00000000E+0 - ,0.28382390E+3,0.272E+3,0.150E+2,0.38840000E+1,0.00000000E+0 - ,0.23632710E+3,0.272E+3,0.160E+2,0.38840000E+1,0.00000000E+0 - ,0.19360200E+3,0.272E+3,0.170E+2,0.38840000E+1,0.00000000E+0 - ,0.15874630E+3,0.272E+3,0.180E+2,0.38840000E+1,0.00000000E+0 - ,0.10274537E+4,0.272E+3,0.190E+2,0.38840000E+1,0.00000000E+0 - ,0.85873510E+3,0.272E+3,0.200E+2,0.38840000E+1,0.00000000E+0 - ,0.71140130E+3,0.272E+3,0.210E+2,0.38840000E+1,0.00000000E+0 - ,0.68866520E+3,0.272E+3,0.220E+2,0.38840000E+1,0.00000000E+0 - ,0.63154370E+3,0.272E+3,0.230E+2,0.38840000E+1,0.00000000E+0 - ,0.49757540E+3,0.272E+3,0.240E+2,0.38840000E+1,0.00000000E+0 - ,0.54486260E+3,0.272E+3,0.250E+2,0.38840000E+1,0.00000000E+0 - ,0.42780560E+3,0.272E+3,0.260E+2,0.38840000E+1,0.00000000E+0 - ,0.45484270E+3,0.272E+3,0.270E+2,0.38840000E+1,0.00000000E+0 - ,0.46785600E+3,0.272E+3,0.280E+2,0.38840000E+1,0.00000000E+0 - ,0.35868500E+3,0.272E+3,0.290E+2,0.38840000E+1,0.00000000E+0 - ,0.36992010E+3,0.272E+3,0.300E+2,0.38840000E+1,0.00000000E+0 - ,0.43768410E+3,0.272E+3,0.310E+2,0.38840000E+1,0.00000000E+0 - ,0.38810850E+3,0.272E+3,0.320E+2,0.38840000E+1,0.00000000E+0 - ,0.33255870E+3,0.272E+3,0.330E+2,0.38840000E+1,0.00000000E+0 - ,0.29919670E+3,0.272E+3,0.340E+2,0.38840000E+1,0.00000000E+0 - ,0.26248890E+3,0.272E+3,0.350E+2,0.38840000E+1,0.00000000E+0 - ,0.22875780E+3,0.272E+3,0.360E+2,0.38840000E+1,0.00000000E+0 - ,0.11528150E+4,0.272E+3,0.370E+2,0.38840000E+1,0.00000000E+0 - ,0.10226698E+4,0.272E+3,0.380E+2,0.38840000E+1,0.00000000E+0 - ,0.90010840E+3,0.272E+3,0.390E+2,0.38840000E+1,0.00000000E+0 - ,0.81130330E+3,0.272E+3,0.400E+2,0.38840000E+1,0.00000000E+0 - ,0.74116010E+3,0.272E+3,0.410E+2,0.38840000E+1,0.00000000E+0 - ,0.57392370E+3,0.272E+3,0.420E+2,0.38840000E+1,0.00000000E+0 - ,0.63963880E+3,0.272E+3,0.430E+2,0.38840000E+1,0.00000000E+0 - ,0.48887360E+3,0.272E+3,0.440E+2,0.38840000E+1,0.00000000E+0 - ,0.53438470E+3,0.272E+3,0.450E+2,0.38840000E+1,0.00000000E+0 - ,0.49607390E+3,0.272E+3,0.460E+2,0.38840000E+1,0.00000000E+0 - ,0.41327390E+3,0.272E+3,0.470E+2,0.38840000E+1,0.00000000E+0 - ,0.43768030E+3,0.272E+3,0.480E+2,0.38840000E+1,0.00000000E+0 - ,0.54743800E+3,0.272E+3,0.490E+2,0.38840000E+1,0.00000000E+0 - ,0.50847990E+3,0.272E+3,0.500E+2,0.38840000E+1,0.00000000E+0 - ,0.45499670E+3,0.272E+3,0.510E+2,0.38840000E+1,0.00000000E+0 - ,0.42313470E+3,0.272E+3,0.520E+2,0.38840000E+1,0.00000000E+0 - ,0.38349110E+3,0.272E+3,0.530E+2,0.38840000E+1,0.00000000E+0 - ,0.34549990E+3,0.272E+3,0.540E+2,0.38840000E+1,0.00000000E+0 - ,0.14048971E+4,0.272E+3,0.550E+2,0.38840000E+1,0.00000000E+0 - ,0.13017488E+4,0.272E+3,0.560E+2,0.38840000E+1,0.00000000E+0 - ,0.11490950E+4,0.272E+3,0.570E+2,0.38840000E+1,0.00000000E+0 - ,0.53712000E+3,0.272E+3,0.580E+2,0.38840000E+1,0.27991000E+1 - ,0.11550423E+4,0.272E+3,0.590E+2,0.38840000E+1,0.00000000E+0 - ,0.11099829E+4,0.272E+3,0.600E+2,0.38840000E+1,0.00000000E+0 - ,0.10823751E+4,0.272E+3,0.610E+2,0.38840000E+1,0.00000000E+0 - ,0.10569604E+4,0.272E+3,0.620E+2,0.38840000E+1,0.00000000E+0 - ,0.10344333E+4,0.272E+3,0.630E+2,0.38840000E+1,0.00000000E+0 - ,0.81761230E+3,0.272E+3,0.640E+2,0.38840000E+1,0.00000000E+0 - ,0.91364540E+3,0.272E+3,0.650E+2,0.38840000E+1,0.00000000E+0 - ,0.88198390E+3,0.272E+3,0.660E+2,0.38840000E+1,0.00000000E+0 - ,0.93409640E+3,0.272E+3,0.670E+2,0.38840000E+1,0.00000000E+0 - ,0.91438960E+3,0.272E+3,0.680E+2,0.38840000E+1,0.00000000E+0 - ,0.89667750E+3,0.272E+3,0.690E+2,0.38840000E+1,0.00000000E+0 - ,0.88600250E+3,0.272E+3,0.700E+2,0.38840000E+1,0.00000000E+0 - ,0.74911050E+3,0.272E+3,0.710E+2,0.38840000E+1,0.00000000E+0 - ,0.74025210E+3,0.272E+3,0.720E+2,0.38840000E+1,0.00000000E+0 - ,0.67737500E+3,0.272E+3,0.730E+2,0.38840000E+1,0.00000000E+0 - ,0.57310850E+3,0.272E+3,0.740E+2,0.38840000E+1,0.00000000E+0 - ,0.58363200E+3,0.272E+3,0.750E+2,0.38840000E+1,0.00000000E+0 - ,0.53009450E+3,0.272E+3,0.760E+2,0.38840000E+1,0.00000000E+0 - ,0.48629160E+3,0.272E+3,0.770E+2,0.38840000E+1,0.00000000E+0 - ,0.40460200E+3,0.272E+3,0.780E+2,0.38840000E+1,0.00000000E+0 - ,0.37824260E+3,0.272E+3,0.790E+2,0.38840000E+1,0.00000000E+0 - ,0.38943520E+3,0.272E+3,0.800E+2,0.38840000E+1,0.00000000E+0 - ,0.56259750E+3,0.272E+3,0.810E+2,0.38840000E+1,0.00000000E+0 - ,0.55195500E+3,0.272E+3,0.820E+2,0.38840000E+1,0.00000000E+0 - ,0.50903810E+3,0.272E+3,0.830E+2,0.38840000E+1,0.00000000E+0 - ,0.48647930E+3,0.272E+3,0.840E+2,0.38840000E+1,0.00000000E+0 - ,0.45000480E+3,0.272E+3,0.850E+2,0.38840000E+1,0.00000000E+0 - ,0.41326650E+3,0.272E+3,0.860E+2,0.38840000E+1,0.00000000E+0 - ,0.13317058E+4,0.272E+3,0.870E+2,0.38840000E+1,0.00000000E+0 - ,0.12904127E+4,0.272E+3,0.880E+2,0.38840000E+1,0.00000000E+0 - ,0.11454809E+4,0.272E+3,0.890E+2,0.38840000E+1,0.00000000E+0 - ,0.10342317E+4,0.272E+3,0.900E+2,0.38840000E+1,0.00000000E+0 - ,0.10243603E+4,0.272E+3,0.910E+2,0.38840000E+1,0.00000000E+0 - ,0.99194790E+3,0.272E+3,0.920E+2,0.38840000E+1,0.00000000E+0 - ,0.10182141E+4,0.272E+3,0.930E+2,0.38840000E+1,0.00000000E+0 - ,0.98657360E+3,0.272E+3,0.940E+2,0.38840000E+1,0.00000000E+0 - ,0.56451300E+2,0.272E+3,0.101E+3,0.38840000E+1,0.00000000E+0 - ,0.18035670E+3,0.272E+3,0.103E+3,0.38840000E+1,0.98650000E+0 - ,0.23052060E+3,0.272E+3,0.104E+3,0.38840000E+1,0.98080000E+0 - ,0.17769180E+3,0.272E+3,0.105E+3,0.38840000E+1,0.97060000E+0 - ,0.13451000E+3,0.272E+3,0.106E+3,0.38840000E+1,0.98680000E+0 - ,0.93956900E+2,0.272E+3,0.107E+3,0.38840000E+1,0.99440000E+0 - ,0.68655500E+2,0.272E+3,0.108E+3,0.38840000E+1,0.99250000E+0 - ,0.47370200E+2,0.272E+3,0.109E+3,0.38840000E+1,0.99820000E+0 - ,0.26307010E+3,0.272E+3,0.111E+3,0.38840000E+1,0.96840000E+0 - ,0.40658200E+3,0.272E+3,0.112E+3,0.38840000E+1,0.96280000E+0 - ,0.41382490E+3,0.272E+3,0.113E+3,0.38840000E+1,0.96480000E+0 - ,0.33484900E+3,0.272E+3,0.114E+3,0.38840000E+1,0.95070000E+0 - ,0.27554270E+3,0.272E+3,0.115E+3,0.38840000E+1,0.99470000E+0 - ,0.23369990E+3,0.272E+3,0.116E+3,0.38840000E+1,0.99480000E+0 - ,0.19157960E+3,0.272E+3,0.117E+3,0.38840000E+1,0.99720000E+0 - ,0.36408150E+3,0.272E+3,0.119E+3,0.38840000E+1,0.97670000E+0 - ,0.68723560E+3,0.272E+3,0.120E+3,0.38840000E+1,0.98310000E+0 - ,0.36630740E+3,0.272E+3,0.121E+3,0.38840000E+1,0.18627000E+1 - ,0.35366860E+3,0.272E+3,0.122E+3,0.38840000E+1,0.18299000E+1 - ,0.34654410E+3,0.272E+3,0.123E+3,0.38840000E+1,0.19138000E+1 - ,0.34308700E+3,0.272E+3,0.124E+3,0.38840000E+1,0.18269000E+1 - ,0.31671570E+3,0.272E+3,0.125E+3,0.38840000E+1,0.16406000E+1 - ,0.29336460E+3,0.272E+3,0.126E+3,0.38840000E+1,0.16483000E+1 - ,0.27983390E+3,0.272E+3,0.127E+3,0.38840000E+1,0.17149000E+1 - ,0.27349300E+3,0.272E+3,0.128E+3,0.38840000E+1,0.17937000E+1 - ,0.26953150E+3,0.272E+3,0.129E+3,0.38840000E+1,0.95760000E+0 - ,0.25402930E+3,0.272E+3,0.130E+3,0.38840000E+1,0.19419000E+1 - ,0.41165060E+3,0.272E+3,0.131E+3,0.38840000E+1,0.96010000E+0 - ,0.36351880E+3,0.272E+3,0.132E+3,0.38840000E+1,0.94340000E+0 - ,0.32699810E+3,0.272E+3,0.133E+3,0.38840000E+1,0.98890000E+0 - ,0.29929580E+3,0.272E+3,0.134E+3,0.38840000E+1,0.99010000E+0 - ,0.26427820E+3,0.272E+3,0.135E+3,0.38840000E+1,0.99740000E+0 - ,0.43494430E+3,0.272E+3,0.137E+3,0.38840000E+1,0.97380000E+0 - ,0.83572700E+3,0.272E+3,0.138E+3,0.38840000E+1,0.98010000E+0 - ,0.64479280E+3,0.272E+3,0.139E+3,0.38840000E+1,0.19153000E+1 - ,0.48425820E+3,0.272E+3,0.140E+3,0.38840000E+1,0.19355000E+1 - ,0.48896320E+3,0.272E+3,0.141E+3,0.38840000E+1,0.19545000E+1 - ,0.45641490E+3,0.272E+3,0.142E+3,0.38840000E+1,0.19420000E+1 - ,0.50966540E+3,0.272E+3,0.143E+3,0.38840000E+1,0.16682000E+1 - ,0.39898040E+3,0.272E+3,0.144E+3,0.38840000E+1,0.18584000E+1 - ,0.37331410E+3,0.272E+3,0.145E+3,0.38840000E+1,0.19003000E+1 - ,0.34680080E+3,0.272E+3,0.146E+3,0.38840000E+1,0.18630000E+1 - ,0.33529990E+3,0.272E+3,0.147E+3,0.38840000E+1,0.96790000E+0 - ,0.33249420E+3,0.272E+3,0.148E+3,0.38840000E+1,0.19539000E+1 - ,0.52263660E+3,0.272E+3,0.149E+3,0.38840000E+1,0.96330000E+0 - ,0.47495740E+3,0.272E+3,0.150E+3,0.38840000E+1,0.95140000E+0 - ,0.44616040E+3,0.272E+3,0.151E+3,0.38840000E+1,0.97490000E+0 - ,0.42289020E+3,0.272E+3,0.152E+3,0.38840000E+1,0.98110000E+0 - ,0.38708050E+3,0.272E+3,0.153E+3,0.38840000E+1,0.99680000E+0 - ,0.51625270E+3,0.272E+3,0.155E+3,0.38840000E+1,0.99090000E+0 - ,0.10815338E+4,0.272E+3,0.156E+3,0.38840000E+1,0.97970000E+0 - ,0.81548330E+3,0.272E+3,0.157E+3,0.38840000E+1,0.19373000E+1 - ,0.52103820E+3,0.272E+3,0.159E+3,0.38840000E+1,0.29425000E+1 - ,0.51028040E+3,0.272E+3,0.160E+3,0.38840000E+1,0.29455000E+1 - ,0.49420110E+3,0.272E+3,0.161E+3,0.38840000E+1,0.29413000E+1 - ,0.49632490E+3,0.272E+3,0.162E+3,0.38840000E+1,0.29300000E+1 - ,0.47741750E+3,0.272E+3,0.163E+3,0.38840000E+1,0.18286000E+1 - ,0.49938720E+3,0.272E+3,0.164E+3,0.38840000E+1,0.28732000E+1 - ,0.46926950E+3,0.272E+3,0.165E+3,0.38840000E+1,0.29086000E+1 - ,0.47695560E+3,0.272E+3,0.166E+3,0.38840000E+1,0.28965000E+1 - ,0.44565950E+3,0.272E+3,0.167E+3,0.38840000E+1,0.29242000E+1 - ,0.43304490E+3,0.272E+3,0.168E+3,0.38840000E+1,0.29282000E+1 - ,0.43020330E+3,0.272E+3,0.169E+3,0.38840000E+1,0.29246000E+1 - ,0.45184050E+3,0.272E+3,0.170E+3,0.38840000E+1,0.28482000E+1 - ,0.41595250E+3,0.272E+3,0.171E+3,0.38840000E+1,0.29219000E+1 - ,0.55954550E+3,0.272E+3,0.172E+3,0.38840000E+1,0.19254000E+1 - ,0.52058420E+3,0.272E+3,0.173E+3,0.38840000E+1,0.19459000E+1 - ,0.47617010E+3,0.272E+3,0.174E+3,0.38840000E+1,0.19292000E+1 - ,0.48071520E+3,0.272E+3,0.175E+3,0.38840000E+1,0.18104000E+1 - ,0.42322750E+3,0.272E+3,0.176E+3,0.38840000E+1,0.18858000E+1 - ,0.39843450E+3,0.272E+3,0.177E+3,0.38840000E+1,0.18648000E+1 - ,0.38070180E+3,0.272E+3,0.178E+3,0.38840000E+1,0.19188000E+1 - ,0.36388290E+3,0.272E+3,0.179E+3,0.38840000E+1,0.98460000E+0 - ,0.35232230E+3,0.272E+3,0.180E+3,0.38840000E+1,0.19896000E+1 - ,0.56157040E+3,0.272E+3,0.181E+3,0.38840000E+1,0.92670000E+0 - ,0.51406470E+3,0.272E+3,0.182E+3,0.38840000E+1,0.93830000E+0 - ,0.49968080E+3,0.272E+3,0.183E+3,0.38840000E+1,0.98200000E+0 - ,0.48675350E+3,0.272E+3,0.184E+3,0.38840000E+1,0.98150000E+0 - ,0.45547580E+3,0.272E+3,0.185E+3,0.38840000E+1,0.99540000E+0 - ,0.58159320E+3,0.272E+3,0.187E+3,0.38840000E+1,0.97050000E+0 - ,0.10790444E+4,0.272E+3,0.188E+3,0.38840000E+1,0.96620000E+0 - ,0.61650660E+3,0.272E+3,0.189E+3,0.38840000E+1,0.29070000E+1 - ,0.70890840E+3,0.272E+3,0.190E+3,0.38840000E+1,0.28844000E+1 - ,0.63454270E+3,0.272E+3,0.191E+3,0.38840000E+1,0.28738000E+1 - ,0.56236500E+3,0.272E+3,0.192E+3,0.38840000E+1,0.28878000E+1 - ,0.54147420E+3,0.272E+3,0.193E+3,0.38840000E+1,0.29095000E+1 - ,0.64630030E+3,0.272E+3,0.194E+3,0.38840000E+1,0.19209000E+1 - ,0.15187100E+3,0.272E+3,0.204E+3,0.38840000E+1,0.19697000E+1 - ,0.14945570E+3,0.272E+3,0.205E+3,0.38840000E+1,0.19441000E+1 - ,0.10995340E+3,0.272E+3,0.206E+3,0.38840000E+1,0.19985000E+1 - ,0.88233300E+2,0.272E+3,0.207E+3,0.38840000E+1,0.20143000E+1 - ,0.60592700E+2,0.272E+3,0.208E+3,0.38840000E+1,0.19887000E+1 - ,0.26815940E+3,0.272E+3,0.212E+3,0.38840000E+1,0.19496000E+1 - ,0.32387400E+3,0.272E+3,0.213E+3,0.38840000E+1,0.19311000E+1 - ,0.31174680E+3,0.272E+3,0.214E+3,0.38840000E+1,0.19435000E+1 - ,0.27170710E+3,0.272E+3,0.215E+3,0.38840000E+1,0.20102000E+1 - ,0.22898300E+3,0.272E+3,0.216E+3,0.38840000E+1,0.19903000E+1 - ,0.37583520E+3,0.272E+3,0.220E+3,0.38840000E+1,0.19349000E+1 - ,0.36214280E+3,0.272E+3,0.221E+3,0.38840000E+1,0.28999000E+1 - ,0.36666280E+3,0.272E+3,0.222E+3,0.38840000E+1,0.38675000E+1 - ,0.33547490E+3,0.272E+3,0.223E+3,0.38840000E+1,0.29110000E+1 - ,0.25363880E+3,0.272E+3,0.224E+3,0.38840000E+1,0.10619100E+2 - ,0.21751740E+3,0.272E+3,0.225E+3,0.38840000E+1,0.98849000E+1 - ,0.21343980E+3,0.272E+3,0.226E+3,0.38840000E+1,0.91376000E+1 - ,0.24927270E+3,0.272E+3,0.227E+3,0.38840000E+1,0.29263000E+1 - ,0.23249050E+3,0.272E+3,0.228E+3,0.38840000E+1,0.65458000E+1 - ,0.32767280E+3,0.272E+3,0.231E+3,0.38840000E+1,0.19315000E+1 - ,0.34636060E+3,0.272E+3,0.232E+3,0.38840000E+1,0.19447000E+1 - ,0.31855200E+3,0.272E+3,0.233E+3,0.38840000E+1,0.19793000E+1 - ,0.29696280E+3,0.272E+3,0.234E+3,0.38840000E+1,0.19812000E+1 - ,0.45040960E+3,0.272E+3,0.238E+3,0.38840000E+1,0.19143000E+1 - ,0.43502220E+3,0.272E+3,0.239E+3,0.38840000E+1,0.28903000E+1 - ,0.43916880E+3,0.272E+3,0.240E+3,0.38840000E+1,0.39106000E+1 - ,0.42451400E+3,0.272E+3,0.241E+3,0.38840000E+1,0.29225000E+1 - ,0.37628530E+3,0.272E+3,0.242E+3,0.38840000E+1,0.11055600E+2 - ,0.33276620E+3,0.272E+3,0.243E+3,0.38840000E+1,0.95402000E+1 - ,0.31465980E+3,0.272E+3,0.244E+3,0.38840000E+1,0.88895000E+1 - ,0.31973310E+3,0.272E+3,0.245E+3,0.38840000E+1,0.29696000E+1 - ,0.33378790E+3,0.272E+3,0.246E+3,0.38840000E+1,0.57095000E+1 - ,0.42275520E+3,0.272E+3,0.249E+3,0.38840000E+1,0.19378000E+1 - ,0.45955200E+3,0.272E+3,0.250E+3,0.38840000E+1,0.19505000E+1 - ,0.43419590E+3,0.272E+3,0.251E+3,0.38840000E+1,0.19523000E+1 - ,0.41956530E+3,0.272E+3,0.252E+3,0.38840000E+1,0.19639000E+1 - ,0.54526090E+3,0.272E+3,0.256E+3,0.38840000E+1,0.18467000E+1 - ,0.56623920E+3,0.272E+3,0.257E+3,0.38840000E+1,0.29175000E+1 - ,0.42097660E+3,0.272E+3,0.272E+3,0.38840000E+1,0.38840000E+1 - ,0.36595100E+2,0.273E+3,0.100E+1,0.28988000E+1,0.91180000E+0 - ,0.24281400E+2,0.273E+3,0.200E+1,0.28988000E+1,0.00000000E+0 - ,0.56610590E+3,0.273E+3,0.300E+1,0.28988000E+1,0.00000000E+0 - ,0.32644690E+3,0.273E+3,0.400E+1,0.28988000E+1,0.00000000E+0 - ,0.22041970E+3,0.273E+3,0.500E+1,0.28988000E+1,0.00000000E+0 - ,0.14932900E+3,0.273E+3,0.600E+1,0.28988000E+1,0.00000000E+0 - ,0.10467690E+3,0.273E+3,0.700E+1,0.28988000E+1,0.00000000E+0 - ,0.79396800E+2,0.273E+3,0.800E+1,0.28988000E+1,0.00000000E+0 - ,0.60239300E+2,0.273E+3,0.900E+1,0.28988000E+1,0.00000000E+0 - ,0.46387800E+2,0.273E+3,0.100E+2,0.28988000E+1,0.00000000E+0 - ,0.67687130E+3,0.273E+3,0.110E+2,0.28988000E+1,0.00000000E+0 - ,0.51998460E+3,0.273E+3,0.120E+2,0.28988000E+1,0.00000000E+0 - ,0.47979410E+3,0.273E+3,0.130E+2,0.28988000E+1,0.00000000E+0 - ,0.37862690E+3,0.273E+3,0.140E+2,0.28988000E+1,0.00000000E+0 - ,0.29580530E+3,0.273E+3,0.150E+2,0.28988000E+1,0.00000000E+0 - ,0.24586750E+3,0.273E+3,0.160E+2,0.28988000E+1,0.00000000E+0 - ,0.20113960E+3,0.273E+3,0.170E+2,0.28988000E+1,0.00000000E+0 - ,0.16478050E+3,0.273E+3,0.180E+2,0.28988000E+1,0.00000000E+0 - ,0.11126264E+4,0.273E+3,0.190E+2,0.28988000E+1,0.00000000E+0 - ,0.91447030E+3,0.273E+3,0.200E+2,0.28988000E+1,0.00000000E+0 - ,0.75525190E+3,0.273E+3,0.210E+2,0.28988000E+1,0.00000000E+0 - ,0.72956490E+3,0.273E+3,0.220E+2,0.28988000E+1,0.00000000E+0 - ,0.66815990E+3,0.273E+3,0.230E+2,0.28988000E+1,0.00000000E+0 - ,0.52676740E+3,0.273E+3,0.240E+2,0.28988000E+1,0.00000000E+0 - ,0.57538750E+3,0.273E+3,0.250E+2,0.28988000E+1,0.00000000E+0 - ,0.45195440E+3,0.273E+3,0.260E+2,0.28988000E+1,0.00000000E+0 - ,0.47878370E+3,0.273E+3,0.270E+2,0.28988000E+1,0.00000000E+0 - ,0.49306650E+3,0.273E+3,0.280E+2,0.28988000E+1,0.00000000E+0 - ,0.37838780E+3,0.273E+3,0.290E+2,0.28988000E+1,0.00000000E+0 - ,0.38837940E+3,0.273E+3,0.300E+2,0.28988000E+1,0.00000000E+0 - ,0.45998760E+3,0.273E+3,0.310E+2,0.28988000E+1,0.00000000E+0 - ,0.40600970E+3,0.273E+3,0.320E+2,0.28988000E+1,0.00000000E+0 - ,0.34676900E+3,0.273E+3,0.330E+2,0.28988000E+1,0.00000000E+0 - ,0.31149230E+3,0.273E+3,0.340E+2,0.28988000E+1,0.00000000E+0 - ,0.27290380E+3,0.273E+3,0.350E+2,0.28988000E+1,0.00000000E+0 - ,0.23759510E+3,0.273E+3,0.360E+2,0.28988000E+1,0.00000000E+0 - ,0.12473944E+4,0.273E+3,0.370E+2,0.28988000E+1,0.00000000E+0 - ,0.10901054E+4,0.273E+3,0.380E+2,0.28988000E+1,0.00000000E+0 - ,0.95467960E+3,0.273E+3,0.390E+2,0.28988000E+1,0.00000000E+0 - ,0.85810820E+3,0.273E+3,0.400E+2,0.28988000E+1,0.00000000E+0 - ,0.78268490E+3,0.273E+3,0.410E+2,0.28988000E+1,0.00000000E+0 - ,0.60471660E+3,0.273E+3,0.420E+2,0.28988000E+1,0.00000000E+0 - ,0.67451160E+3,0.273E+3,0.430E+2,0.28988000E+1,0.00000000E+0 - ,0.51426690E+3,0.273E+3,0.440E+2,0.28988000E+1,0.00000000E+0 - ,0.56175990E+3,0.273E+3,0.450E+2,0.28988000E+1,0.00000000E+0 - ,0.52100450E+3,0.273E+3,0.460E+2,0.28988000E+1,0.00000000E+0 - ,0.43478170E+3,0.273E+3,0.470E+2,0.28988000E+1,0.00000000E+0 - ,0.45916630E+3,0.273E+3,0.480E+2,0.28988000E+1,0.00000000E+0 - ,0.57597200E+3,0.273E+3,0.490E+2,0.28988000E+1,0.00000000E+0 - ,0.53273890E+3,0.273E+3,0.500E+2,0.28988000E+1,0.00000000E+0 - ,0.47516010E+3,0.273E+3,0.510E+2,0.28988000E+1,0.00000000E+0 - ,0.44117360E+3,0.273E+3,0.520E+2,0.28988000E+1,0.00000000E+0 - ,0.39923870E+3,0.273E+3,0.530E+2,0.28988000E+1,0.00000000E+0 - ,0.35925420E+3,0.273E+3,0.540E+2,0.28988000E+1,0.00000000E+0 - ,0.15209786E+4,0.273E+3,0.550E+2,0.28988000E+1,0.00000000E+0 - ,0.13908237E+4,0.273E+3,0.560E+2,0.28988000E+1,0.00000000E+0 - ,0.12212713E+4,0.273E+3,0.570E+2,0.28988000E+1,0.00000000E+0 - ,0.56144200E+3,0.273E+3,0.580E+2,0.28988000E+1,0.27991000E+1 - ,0.12321348E+4,0.273E+3,0.590E+2,0.28988000E+1,0.00000000E+0 - ,0.11827756E+4,0.273E+3,0.600E+2,0.28988000E+1,0.00000000E+0 - ,0.11530265E+4,0.273E+3,0.610E+2,0.28988000E+1,0.00000000E+0 - ,0.11256719E+4,0.273E+3,0.620E+2,0.28988000E+1,0.00000000E+0 - ,0.11014151E+4,0.273E+3,0.630E+2,0.28988000E+1,0.00000000E+0 - ,0.86643530E+3,0.273E+3,0.640E+2,0.28988000E+1,0.00000000E+0 - ,0.97722080E+3,0.273E+3,0.650E+2,0.28988000E+1,0.00000000E+0 - ,0.94263090E+3,0.273E+3,0.660E+2,0.28988000E+1,0.00000000E+0 - ,0.99314900E+3,0.273E+3,0.670E+2,0.28988000E+1,0.00000000E+0 - ,0.97201510E+3,0.273E+3,0.680E+2,0.28988000E+1,0.00000000E+0 - ,0.95296410E+3,0.273E+3,0.690E+2,0.28988000E+1,0.00000000E+0 - ,0.94178690E+3,0.273E+3,0.700E+2,0.28988000E+1,0.00000000E+0 - ,0.79383690E+3,0.273E+3,0.710E+2,0.28988000E+1,0.00000000E+0 - ,0.78053540E+3,0.273E+3,0.720E+2,0.28988000E+1,0.00000000E+0 - ,0.71253240E+3,0.273E+3,0.730E+2,0.28988000E+1,0.00000000E+0 - ,0.60220240E+3,0.273E+3,0.740E+2,0.28988000E+1,0.00000000E+0 - ,0.61258210E+3,0.273E+3,0.750E+2,0.28988000E+1,0.00000000E+0 - ,0.55538920E+3,0.273E+3,0.760E+2,0.28988000E+1,0.00000000E+0 - ,0.50882230E+3,0.273E+3,0.770E+2,0.28988000E+1,0.00000000E+0 - ,0.42301850E+3,0.273E+3,0.780E+2,0.28988000E+1,0.00000000E+0 - ,0.39532750E+3,0.273E+3,0.790E+2,0.28988000E+1,0.00000000E+0 - ,0.40661330E+3,0.273E+3,0.800E+2,0.28988000E+1,0.00000000E+0 - ,0.59190940E+3,0.273E+3,0.810E+2,0.28988000E+1,0.00000000E+0 - ,0.57859300E+3,0.273E+3,0.820E+2,0.28988000E+1,0.00000000E+0 - ,0.53193140E+3,0.273E+3,0.830E+2,0.28988000E+1,0.00000000E+0 - ,0.50757870E+3,0.273E+3,0.840E+2,0.28988000E+1,0.00000000E+0 - ,0.46877360E+3,0.273E+3,0.850E+2,0.28988000E+1,0.00000000E+0 - ,0.42997720E+3,0.273E+3,0.860E+2,0.28988000E+1,0.00000000E+0 - ,0.14348337E+4,0.273E+3,0.870E+2,0.28988000E+1,0.00000000E+0 - ,0.13751465E+4,0.273E+3,0.880E+2,0.28988000E+1,0.00000000E+0 - ,0.12148259E+4,0.273E+3,0.890E+2,0.28988000E+1,0.00000000E+0 - ,0.10917991E+4,0.273E+3,0.900E+2,0.28988000E+1,0.00000000E+0 - ,0.10843209E+4,0.273E+3,0.910E+2,0.28988000E+1,0.00000000E+0 - ,0.10498792E+4,0.273E+3,0.920E+2,0.28988000E+1,0.00000000E+0 - ,0.10808128E+4,0.273E+3,0.930E+2,0.28988000E+1,0.00000000E+0 - ,0.10465858E+4,0.273E+3,0.940E+2,0.28988000E+1,0.00000000E+0 - ,0.58803800E+2,0.273E+3,0.101E+3,0.28988000E+1,0.00000000E+0 - ,0.18986110E+3,0.273E+3,0.103E+3,0.28988000E+1,0.98650000E+0 - ,0.24244290E+3,0.273E+3,0.104E+3,0.28988000E+1,0.98080000E+0 - ,0.18557490E+3,0.273E+3,0.105E+3,0.28988000E+1,0.97060000E+0 - ,0.14012490E+3,0.273E+3,0.106E+3,0.28988000E+1,0.98680000E+0 - ,0.97656800E+2,0.273E+3,0.107E+3,0.28988000E+1,0.99440000E+0 - ,0.71264400E+2,0.273E+3,0.108E+3,0.28988000E+1,0.99250000E+0 - ,0.49121900E+2,0.273E+3,0.109E+3,0.28988000E+1,0.99820000E+0 - ,0.27753610E+3,0.273E+3,0.111E+3,0.28988000E+1,0.96840000E+0 - ,0.42932400E+3,0.273E+3,0.112E+3,0.28988000E+1,0.96280000E+0 - ,0.43497780E+3,0.273E+3,0.113E+3,0.28988000E+1,0.96480000E+0 - ,0.35008490E+3,0.273E+3,0.114E+3,0.28988000E+1,0.95070000E+0 - ,0.28716960E+3,0.273E+3,0.115E+3,0.28988000E+1,0.99470000E+0 - ,0.24316080E+3,0.273E+3,0.116E+3,0.28988000E+1,0.99480000E+0 - ,0.19905370E+3,0.273E+3,0.117E+3,0.28988000E+1,0.99720000E+0 - ,0.38351900E+3,0.273E+3,0.119E+3,0.28988000E+1,0.97670000E+0 - ,0.73299270E+3,0.273E+3,0.120E+3,0.28988000E+1,0.98310000E+0 - ,0.38359320E+3,0.273E+3,0.121E+3,0.28988000E+1,0.18627000E+1 - ,0.37045440E+3,0.273E+3,0.122E+3,0.28988000E+1,0.18299000E+1 - ,0.36303280E+3,0.273E+3,0.123E+3,0.28988000E+1,0.19138000E+1 - ,0.35964520E+3,0.273E+3,0.124E+3,0.28988000E+1,0.18269000E+1 - ,0.33100010E+3,0.273E+3,0.125E+3,0.28988000E+1,0.16406000E+1 - ,0.30643150E+3,0.273E+3,0.126E+3,0.28988000E+1,0.16483000E+1 - ,0.29235680E+3,0.273E+3,0.127E+3,0.28988000E+1,0.17149000E+1 - ,0.28579970E+3,0.273E+3,0.128E+3,0.28988000E+1,0.17937000E+1 - ,0.28225140E+3,0.273E+3,0.129E+3,0.28988000E+1,0.95760000E+0 - ,0.26501660E+3,0.273E+3,0.130E+3,0.28988000E+1,0.19419000E+1 - ,0.43212490E+3,0.273E+3,0.131E+3,0.28988000E+1,0.96010000E+0 - ,0.37997370E+3,0.273E+3,0.132E+3,0.28988000E+1,0.94340000E+0 - ,0.34092760E+3,0.273E+3,0.133E+3,0.28988000E+1,0.98890000E+0 - ,0.31161210E+3,0.273E+3,0.134E+3,0.28988000E+1,0.99010000E+0 - ,0.27478910E+3,0.273E+3,0.135E+3,0.28988000E+1,0.99740000E+0 - ,0.45784580E+3,0.273E+3,0.137E+3,0.28988000E+1,0.97380000E+0 - ,0.89253360E+3,0.273E+3,0.138E+3,0.28988000E+1,0.98010000E+0 - ,0.68212820E+3,0.273E+3,0.139E+3,0.28988000E+1,0.19153000E+1 - ,0.50766120E+3,0.273E+3,0.140E+3,0.28988000E+1,0.19355000E+1 - ,0.51256950E+3,0.273E+3,0.141E+3,0.28988000E+1,0.19545000E+1 - ,0.47819280E+3,0.273E+3,0.142E+3,0.28988000E+1,0.19420000E+1 - ,0.53626360E+3,0.273E+3,0.143E+3,0.28988000E+1,0.16682000E+1 - ,0.41699040E+3,0.273E+3,0.144E+3,0.28988000E+1,0.18584000E+1 - ,0.39019030E+3,0.273E+3,0.145E+3,0.28988000E+1,0.19003000E+1 - ,0.36240560E+3,0.273E+3,0.146E+3,0.28988000E+1,0.18630000E+1 - ,0.35051370E+3,0.273E+3,0.147E+3,0.28988000E+1,0.96790000E+0 - ,0.34680430E+3,0.273E+3,0.148E+3,0.28988000E+1,0.19539000E+1 - ,0.54909790E+3,0.273E+3,0.149E+3,0.28988000E+1,0.96330000E+0 - ,0.49700410E+3,0.273E+3,0.150E+3,0.28988000E+1,0.95140000E+0 - ,0.46575860E+3,0.273E+3,0.151E+3,0.28988000E+1,0.97490000E+0 - ,0.44087250E+3,0.273E+3,0.152E+3,0.28988000E+1,0.98110000E+0 - ,0.40297870E+3,0.273E+3,0.153E+3,0.28988000E+1,0.99680000E+0 - ,0.54168560E+3,0.273E+3,0.155E+3,0.28988000E+1,0.99090000E+0 - ,0.11586256E+4,0.273E+3,0.156E+3,0.28988000E+1,0.97970000E+0 - ,0.86372770E+3,0.273E+3,0.157E+3,0.28988000E+1,0.19373000E+1 - ,0.54454800E+3,0.273E+3,0.159E+3,0.28988000E+1,0.29425000E+1 - ,0.53328550E+3,0.273E+3,0.160E+3,0.28988000E+1,0.29455000E+1 - ,0.51641630E+3,0.273E+3,0.161E+3,0.28988000E+1,0.29413000E+1 - ,0.51893410E+3,0.273E+3,0.162E+3,0.28988000E+1,0.29300000E+1 - ,0.50005910E+3,0.273E+3,0.163E+3,0.28988000E+1,0.18286000E+1 - ,0.52212860E+3,0.273E+3,0.164E+3,0.28988000E+1,0.28732000E+1 - ,0.49044870E+3,0.273E+3,0.165E+3,0.28988000E+1,0.29086000E+1 - ,0.49903390E+3,0.273E+3,0.166E+3,0.28988000E+1,0.28965000E+1 - ,0.46555820E+3,0.273E+3,0.167E+3,0.28988000E+1,0.29242000E+1 - ,0.45230800E+3,0.273E+3,0.168E+3,0.28988000E+1,0.29282000E+1 - ,0.44938570E+3,0.273E+3,0.169E+3,0.28988000E+1,0.29246000E+1 - ,0.47221050E+3,0.273E+3,0.170E+3,0.28988000E+1,0.28482000E+1 - ,0.43437410E+3,0.273E+3,0.171E+3,0.28988000E+1,0.29219000E+1 - ,0.58833640E+3,0.273E+3,0.172E+3,0.28988000E+1,0.19254000E+1 - ,0.54616030E+3,0.273E+3,0.173E+3,0.28988000E+1,0.19459000E+1 - ,0.49848100E+3,0.273E+3,0.174E+3,0.28988000E+1,0.19292000E+1 - ,0.50425710E+3,0.273E+3,0.175E+3,0.28988000E+1,0.18104000E+1 - ,0.44178790E+3,0.273E+3,0.176E+3,0.28988000E+1,0.18858000E+1 - ,0.41572770E+3,0.273E+3,0.177E+3,0.28988000E+1,0.18648000E+1 - ,0.39714540E+3,0.273E+3,0.178E+3,0.28988000E+1,0.19188000E+1 - ,0.37972750E+3,0.273E+3,0.179E+3,0.28988000E+1,0.98460000E+0 - ,0.36701200E+3,0.273E+3,0.180E+3,0.28988000E+1,0.19896000E+1 - ,0.59000540E+3,0.273E+3,0.181E+3,0.28988000E+1,0.92670000E+0 - ,0.53789130E+3,0.273E+3,0.182E+3,0.28988000E+1,0.93830000E+0 - ,0.52181620E+3,0.273E+3,0.183E+3,0.28988000E+1,0.98200000E+0 - ,0.50773170E+3,0.273E+3,0.184E+3,0.28988000E+1,0.98150000E+0 - ,0.47444690E+3,0.273E+3,0.185E+3,0.28988000E+1,0.99540000E+0 - ,0.61006800E+3,0.273E+3,0.187E+3,0.28988000E+1,0.97050000E+0 - ,0.11516502E+4,0.273E+3,0.188E+3,0.28988000E+1,0.96620000E+0 - ,0.64431070E+3,0.273E+3,0.189E+3,0.28988000E+1,0.29070000E+1 - ,0.74392250E+3,0.273E+3,0.190E+3,0.28988000E+1,0.28844000E+1 - ,0.66568850E+3,0.273E+3,0.191E+3,0.28988000E+1,0.28738000E+1 - ,0.58786120E+3,0.273E+3,0.192E+3,0.28988000E+1,0.28878000E+1 - ,0.56570590E+3,0.273E+3,0.193E+3,0.28988000E+1,0.29095000E+1 - ,0.68049130E+3,0.273E+3,0.194E+3,0.28988000E+1,0.19209000E+1 - ,0.15844380E+3,0.273E+3,0.204E+3,0.28988000E+1,0.19697000E+1 - ,0.15595490E+3,0.273E+3,0.205E+3,0.28988000E+1,0.19441000E+1 - ,0.11435140E+3,0.273E+3,0.206E+3,0.28988000E+1,0.19985000E+1 - ,0.91693500E+2,0.273E+3,0.207E+3,0.28988000E+1,0.20143000E+1 - ,0.62899100E+2,0.273E+3,0.208E+3,0.28988000E+1,0.19887000E+1 - ,0.28061570E+3,0.273E+3,0.212E+3,0.28988000E+1,0.19496000E+1 - ,0.33928390E+3,0.273E+3,0.213E+3,0.28988000E+1,0.19311000E+1 - ,0.32570670E+3,0.273E+3,0.214E+3,0.28988000E+1,0.19435000E+1 - ,0.28327190E+3,0.273E+3,0.215E+3,0.28988000E+1,0.20102000E+1 - ,0.23825580E+3,0.273E+3,0.216E+3,0.28988000E+1,0.19903000E+1 - ,0.39378620E+3,0.273E+3,0.220E+3,0.28988000E+1,0.19349000E+1 - ,0.37862350E+3,0.273E+3,0.221E+3,0.28988000E+1,0.28999000E+1 - ,0.38330360E+3,0.273E+3,0.222E+3,0.28988000E+1,0.38675000E+1 - ,0.35090960E+3,0.273E+3,0.223E+3,0.28988000E+1,0.29110000E+1 - ,0.26469190E+3,0.273E+3,0.224E+3,0.28988000E+1,0.10619100E+2 - ,0.22664920E+3,0.273E+3,0.225E+3,0.28988000E+1,0.98849000E+1 - ,0.22244630E+3,0.273E+3,0.226E+3,0.28988000E+1,0.91376000E+1 - ,0.26044220E+3,0.273E+3,0.227E+3,0.28988000E+1,0.29263000E+1 - ,0.24268500E+3,0.273E+3,0.228E+3,0.28988000E+1,0.65458000E+1 - ,0.34272530E+3,0.273E+3,0.231E+3,0.28988000E+1,0.19315000E+1 - ,0.36182680E+3,0.273E+3,0.232E+3,0.28988000E+1,0.19447000E+1 - ,0.33202940E+3,0.273E+3,0.233E+3,0.28988000E+1,0.19793000E+1 - ,0.30917670E+3,0.273E+3,0.234E+3,0.28988000E+1,0.19812000E+1 - ,0.47200610E+3,0.273E+3,0.238E+3,0.28988000E+1,0.19143000E+1 - ,0.45450240E+3,0.273E+3,0.239E+3,0.28988000E+1,0.28903000E+1 - ,0.45850240E+3,0.273E+3,0.240E+3,0.28988000E+1,0.39106000E+1 - ,0.44354250E+3,0.273E+3,0.241E+3,0.28988000E+1,0.29225000E+1 - ,0.39244480E+3,0.273E+3,0.242E+3,0.28988000E+1,0.11055600E+2 - ,0.34662740E+3,0.273E+3,0.243E+3,0.28988000E+1,0.95402000E+1 - ,0.32763810E+3,0.273E+3,0.244E+3,0.28988000E+1,0.88895000E+1 - ,0.33357090E+3,0.273E+3,0.245E+3,0.28988000E+1,0.29696000E+1 - ,0.34831840E+3,0.273E+3,0.246E+3,0.28988000E+1,0.57095000E+1 - ,0.44228570E+3,0.273E+3,0.249E+3,0.28988000E+1,0.19378000E+1 - ,0.48056320E+3,0.273E+3,0.250E+3,0.28988000E+1,0.19505000E+1 - ,0.45304590E+3,0.273E+3,0.251E+3,0.28988000E+1,0.19523000E+1 - ,0.43732780E+3,0.273E+3,0.252E+3,0.28988000E+1,0.19639000E+1 - ,0.57116140E+3,0.273E+3,0.256E+3,0.28988000E+1,0.18467000E+1 - ,0.59193970E+3,0.273E+3,0.257E+3,0.28988000E+1,0.29175000E+1 - ,0.43911410E+3,0.273E+3,0.272E+3,0.28988000E+1,0.38840000E+1 - ,0.45876770E+3,0.273E+3,0.273E+3,0.28988000E+1,0.28988000E+1 - ,0.34435200E+2,0.274E+3,0.100E+1,0.10915300E+2,0.91180000E+0 - ,0.23230100E+2,0.274E+3,0.200E+1,0.10915300E+2,0.00000000E+0 - ,0.49948070E+3,0.274E+3,0.300E+1,0.10915300E+2,0.00000000E+0 - ,0.29673610E+3,0.274E+3,0.400E+1,0.10915300E+2,0.00000000E+0 - ,0.20361200E+3,0.274E+3,0.500E+1,0.10915300E+2,0.00000000E+0 - ,0.13967130E+3,0.274E+3,0.600E+1,0.10915300E+2,0.00000000E+0 - ,0.98854100E+2,0.274E+3,0.700E+1,0.10915300E+2,0.00000000E+0 - ,0.75508800E+2,0.274E+3,0.800E+1,0.10915300E+2,0.00000000E+0 - ,0.57643800E+2,0.274E+3,0.900E+1,0.10915300E+2,0.00000000E+0 - ,0.44614500E+2,0.274E+3,0.100E+2,0.10915300E+2,0.00000000E+0 - ,0.59853480E+3,0.274E+3,0.110E+2,0.10915300E+2,0.00000000E+0 - ,0.47040460E+3,0.274E+3,0.120E+2,0.10915300E+2,0.00000000E+0 - ,0.43759830E+3,0.274E+3,0.130E+2,0.10915300E+2,0.00000000E+0 - ,0.34916910E+3,0.274E+3,0.140E+2,0.10915300E+2,0.00000000E+0 - ,0.27538760E+3,0.274E+3,0.150E+2,0.10915300E+2,0.00000000E+0 - ,0.23036660E+3,0.274E+3,0.160E+2,0.10915300E+2,0.00000000E+0 - ,0.18964180E+3,0.274E+3,0.170E+2,0.10915300E+2,0.00000000E+0 - ,0.15623470E+3,0.274E+3,0.180E+2,0.10915300E+2,0.00000000E+0 - ,0.97919910E+3,0.274E+3,0.190E+2,0.10915300E+2,0.00000000E+0 - ,0.82027660E+3,0.274E+3,0.200E+2,0.10915300E+2,0.00000000E+0 - ,0.68015970E+3,0.274E+3,0.210E+2,0.10915300E+2,0.00000000E+0 - ,0.65948500E+3,0.274E+3,0.220E+2,0.10915300E+2,0.00000000E+0 - ,0.60531050E+3,0.274E+3,0.230E+2,0.10915300E+2,0.00000000E+0 - ,0.47771160E+3,0.274E+3,0.240E+2,0.10915300E+2,0.00000000E+0 - ,0.52292780E+3,0.274E+3,0.250E+2,0.10915300E+2,0.00000000E+0 - ,0.41137250E+3,0.274E+3,0.260E+2,0.10915300E+2,0.00000000E+0 - ,0.43743830E+3,0.274E+3,0.270E+2,0.10915300E+2,0.00000000E+0 - ,0.44947760E+3,0.274E+3,0.280E+2,0.10915300E+2,0.00000000E+0 - ,0.34533400E+3,0.274E+3,0.290E+2,0.10915300E+2,0.00000000E+0 - ,0.35654050E+3,0.274E+3,0.300E+2,0.10915300E+2,0.00000000E+0 - ,0.42115000E+3,0.274E+3,0.310E+2,0.10915300E+2,0.00000000E+0 - ,0.37485400E+3,0.274E+3,0.320E+2,0.10915300E+2,0.00000000E+0 - ,0.32264010E+3,0.274E+3,0.330E+2,0.10915300E+2,0.00000000E+0 - ,0.29126630E+3,0.274E+3,0.340E+2,0.10915300E+2,0.00000000E+0 - ,0.25651700E+3,0.274E+3,0.350E+2,0.10915300E+2,0.00000000E+0 - ,0.22442600E+3,0.274E+3,0.360E+2,0.10915300E+2,0.00000000E+0 - ,0.10997481E+4,0.274E+3,0.370E+2,0.10915300E+2,0.00000000E+0 - ,0.97735030E+3,0.274E+3,0.380E+2,0.10915300E+2,0.00000000E+0 - ,0.86199720E+3,0.274E+3,0.390E+2,0.10915300E+2,0.00000000E+0 - ,0.77824330E+3,0.274E+3,0.400E+2,0.10915300E+2,0.00000000E+0 - ,0.71194490E+3,0.274E+3,0.410E+2,0.10915300E+2,0.00000000E+0 - ,0.55309640E+3,0.274E+3,0.420E+2,0.10915300E+2,0.00000000E+0 - ,0.61562580E+3,0.274E+3,0.430E+2,0.10915300E+2,0.00000000E+0 - ,0.47221430E+3,0.274E+3,0.440E+2,0.10915300E+2,0.00000000E+0 - ,0.51556800E+3,0.274E+3,0.450E+2,0.10915300E+2,0.00000000E+0 - ,0.47905900E+3,0.274E+3,0.460E+2,0.10915300E+2,0.00000000E+0 - ,0.39972620E+3,0.274E+3,0.470E+2,0.10915300E+2,0.00000000E+0 - ,0.42322300E+3,0.274E+3,0.480E+2,0.10915300E+2,0.00000000E+0 - ,0.52765140E+3,0.274E+3,0.490E+2,0.10915300E+2,0.00000000E+0 - ,0.49129650E+3,0.274E+3,0.500E+2,0.10915300E+2,0.00000000E+0 - ,0.44110510E+3,0.274E+3,0.510E+2,0.10915300E+2,0.00000000E+0 - ,0.41123900E+3,0.274E+3,0.520E+2,0.10915300E+2,0.00000000E+0 - ,0.37383140E+3,0.274E+3,0.530E+2,0.10915300E+2,0.00000000E+0 - ,0.33786400E+3,0.274E+3,0.540E+2,0.10915300E+2,0.00000000E+0 - ,0.13409193E+4,0.274E+3,0.550E+2,0.10915300E+2,0.00000000E+0 - ,0.12440756E+4,0.274E+3,0.560E+2,0.10915300E+2,0.00000000E+0 - ,0.11002138E+4,0.274E+3,0.570E+2,0.10915300E+2,0.00000000E+0 - ,0.52077890E+3,0.274E+3,0.580E+2,0.10915300E+2,0.27991000E+1 - ,0.11048675E+4,0.274E+3,0.590E+2,0.10915300E+2,0.00000000E+0 - ,0.10619928E+4,0.274E+3,0.600E+2,0.10915300E+2,0.00000000E+0 - ,0.10356282E+4,0.274E+3,0.610E+2,0.10915300E+2,0.00000000E+0 - ,0.10113417E+4,0.274E+3,0.620E+2,0.10915300E+2,0.00000000E+0 - ,0.98981510E+3,0.274E+3,0.630E+2,0.10915300E+2,0.00000000E+0 - ,0.78493070E+3,0.274E+3,0.640E+2,0.10915300E+2,0.00000000E+0 - ,0.87500190E+3,0.274E+3,0.650E+2,0.10915300E+2,0.00000000E+0 - ,0.84502380E+3,0.274E+3,0.660E+2,0.10915300E+2,0.00000000E+0 - ,0.89410530E+3,0.274E+3,0.670E+2,0.10915300E+2,0.00000000E+0 - ,0.87523480E+3,0.274E+3,0.680E+2,0.10915300E+2,0.00000000E+0 - ,0.85830520E+3,0.274E+3,0.690E+2,0.10915300E+2,0.00000000E+0 - ,0.84794180E+3,0.274E+3,0.700E+2,0.10915300E+2,0.00000000E+0 - ,0.71850660E+3,0.274E+3,0.710E+2,0.10915300E+2,0.00000000E+0 - ,0.71139240E+3,0.274E+3,0.720E+2,0.10915300E+2,0.00000000E+0 - ,0.65227240E+3,0.274E+3,0.730E+2,0.10915300E+2,0.00000000E+0 - ,0.55338510E+3,0.274E+3,0.740E+2,0.10915300E+2,0.00000000E+0 - ,0.56376710E+3,0.274E+3,0.750E+2,0.10915300E+2,0.00000000E+0 - ,0.51307710E+3,0.274E+3,0.760E+2,0.10915300E+2,0.00000000E+0 - ,0.47151500E+3,0.274E+3,0.770E+2,0.10915300E+2,0.00000000E+0 - ,0.39347970E+3,0.274E+3,0.780E+2,0.10915300E+2,0.00000000E+0 - ,0.36827210E+3,0.274E+3,0.790E+2,0.10915300E+2,0.00000000E+0 - ,0.37916720E+3,0.274E+3,0.800E+2,0.10915300E+2,0.00000000E+0 - ,0.54357710E+3,0.274E+3,0.810E+2,0.10915300E+2,0.00000000E+0 - ,0.53401680E+3,0.274E+3,0.820E+2,0.10915300E+2,0.00000000E+0 - ,0.49381190E+3,0.274E+3,0.830E+2,0.10915300E+2,0.00000000E+0 - ,0.47281700E+3,0.274E+3,0.840E+2,0.10915300E+2,0.00000000E+0 - ,0.43850630E+3,0.274E+3,0.850E+2,0.10915300E+2,0.00000000E+0 - ,0.40379910E+3,0.274E+3,0.860E+2,0.10915300E+2,0.00000000E+0 - ,0.12730029E+4,0.274E+3,0.870E+2,0.10915300E+2,0.00000000E+0 - ,0.12347444E+4,0.274E+3,0.880E+2,0.10915300E+2,0.00000000E+0 - ,0.10979052E+4,0.274E+3,0.890E+2,0.10915300E+2,0.00000000E+0 - ,0.99418690E+3,0.274E+3,0.900E+2,0.10915300E+2,0.00000000E+0 - ,0.98402510E+3,0.274E+3,0.910E+2,0.10915300E+2,0.00000000E+0 - ,0.95302030E+3,0.274E+3,0.920E+2,0.10915300E+2,0.00000000E+0 - ,0.97674380E+3,0.274E+3,0.930E+2,0.10915300E+2,0.00000000E+0 - ,0.94660700E+3,0.274E+3,0.940E+2,0.10915300E+2,0.00000000E+0 - ,0.54793400E+2,0.274E+3,0.101E+3,0.10915300E+2,0.00000000E+0 - ,0.17298830E+3,0.274E+3,0.103E+3,0.10915300E+2,0.98650000E+0 - ,0.22155260E+3,0.274E+3,0.104E+3,0.10915300E+2,0.98080000E+0 - ,0.17203160E+3,0.274E+3,0.105E+3,0.10915300E+2,0.97060000E+0 - ,0.13107440E+3,0.274E+3,0.106E+3,0.10915300E+2,0.98680000E+0 - ,0.92276100E+2,0.274E+3,0.107E+3,0.10915300E+2,0.99440000E+0 - ,0.67911900E+2,0.274E+3,0.108E+3,0.10915300E+2,0.99250000E+0 - ,0.47308600E+2,0.274E+3,0.109E+3,0.10915300E+2,0.99820000E+0 - ,0.25228990E+3,0.274E+3,0.111E+3,0.10915300E+2,0.96840000E+0 - ,0.38957210E+3,0.274E+3,0.112E+3,0.10915300E+2,0.96280000E+0 - ,0.39754110E+3,0.274E+3,0.113E+3,0.10915300E+2,0.96480000E+0 - ,0.32338900E+3,0.274E+3,0.114E+3,0.10915300E+2,0.95070000E+0 - ,0.26745480E+3,0.274E+3,0.115E+3,0.10915300E+2,0.99470000E+0 - ,0.22781180E+3,0.274E+3,0.116E+3,0.10915300E+2,0.99480000E+0 - ,0.18766470E+3,0.274E+3,0.117E+3,0.10915300E+2,0.99720000E+0 - ,0.35118760E+3,0.274E+3,0.119E+3,0.10915300E+2,0.97670000E+0 - ,0.65780950E+3,0.274E+3,0.120E+3,0.10915300E+2,0.98310000E+0 - ,0.35408760E+3,0.274E+3,0.121E+3,0.10915300E+2,0.18627000E+1 - ,0.34206260E+3,0.274E+3,0.122E+3,0.10915300E+2,0.18299000E+1 - ,0.33519530E+3,0.274E+3,0.123E+3,0.10915300E+2,0.19138000E+1 - ,0.33174290E+3,0.274E+3,0.124E+3,0.10915300E+2,0.18269000E+1 - ,0.30679020E+3,0.274E+3,0.125E+3,0.10915300E+2,0.16406000E+1 - ,0.28447550E+3,0.274E+3,0.126E+3,0.10915300E+2,0.16483000E+1 - ,0.27144430E+3,0.274E+3,0.127E+3,0.10915300E+2,0.17149000E+1 - ,0.26525960E+3,0.274E+3,0.128E+3,0.10915300E+2,0.17937000E+1 - ,0.26103120E+3,0.274E+3,0.129E+3,0.10915300E+2,0.95760000E+0 - ,0.24669600E+3,0.274E+3,0.130E+3,0.10915300E+2,0.19419000E+1 - ,0.39651060E+3,0.274E+3,0.131E+3,0.10915300E+2,0.96010000E+0 - ,0.35152430E+3,0.274E+3,0.132E+3,0.10915300E+2,0.94340000E+0 - ,0.31735850E+3,0.274E+3,0.133E+3,0.10915300E+2,0.98890000E+0 - ,0.29136250E+3,0.274E+3,0.134E+3,0.10915300E+2,0.99010000E+0 - ,0.25822570E+3,0.274E+3,0.135E+3,0.10915300E+2,0.99740000E+0 - ,0.42013560E+3,0.274E+3,0.137E+3,0.10915300E+2,0.97380000E+0 - ,0.80028360E+3,0.274E+3,0.138E+3,0.10915300E+2,0.98010000E+0 - ,0.62027440E+3,0.274E+3,0.139E+3,0.10915300E+2,0.19153000E+1 - ,0.46837410E+3,0.274E+3,0.140E+3,0.10915300E+2,0.19355000E+1 - ,0.47294180E+3,0.274E+3,0.141E+3,0.10915300E+2,0.19545000E+1 - ,0.44204910E+3,0.274E+3,0.142E+3,0.10915300E+2,0.19420000E+1 - ,0.49245940E+3,0.274E+3,0.143E+3,0.10915300E+2,0.16682000E+1 - ,0.38741710E+3,0.274E+3,0.144E+3,0.10915300E+2,0.18584000E+1 - ,0.36276960E+3,0.274E+3,0.145E+3,0.10915300E+2,0.19003000E+1 - ,0.33732470E+3,0.274E+3,0.146E+3,0.10915300E+2,0.18630000E+1 - ,0.32605860E+3,0.274E+3,0.147E+3,0.10915300E+2,0.96790000E+0 - ,0.32365690E+3,0.274E+3,0.148E+3,0.10915300E+2,0.19539000E+1 - ,0.50425970E+3,0.274E+3,0.149E+3,0.10915300E+2,0.96330000E+0 - ,0.45956860E+3,0.274E+3,0.150E+3,0.10915300E+2,0.95140000E+0 - ,0.43276910E+3,0.274E+3,0.151E+3,0.10915300E+2,0.97490000E+0 - ,0.41105850E+3,0.274E+3,0.152E+3,0.10915300E+2,0.98110000E+0 - ,0.37729830E+3,0.274E+3,0.153E+3,0.10915300E+2,0.99680000E+0 - ,0.49958850E+3,0.274E+3,0.155E+3,0.10915300E+2,0.99090000E+0 - ,0.10355821E+4,0.274E+3,0.156E+3,0.10915300E+2,0.97970000E+0 - ,0.78441150E+3,0.274E+3,0.157E+3,0.10915300E+2,0.19373000E+1 - ,0.50532050E+3,0.274E+3,0.159E+3,0.10915300E+2,0.29425000E+1 - ,0.49491310E+3,0.274E+3,0.160E+3,0.10915300E+2,0.29455000E+1 - ,0.47943010E+3,0.274E+3,0.161E+3,0.10915300E+2,0.29413000E+1 - ,0.48126120E+3,0.274E+3,0.162E+3,0.10915300E+2,0.29300000E+1 - ,0.46237370E+3,0.274E+3,0.163E+3,0.10915300E+2,0.18286000E+1 - ,0.48403110E+3,0.274E+3,0.164E+3,0.10915300E+2,0.28732000E+1 - ,0.45510020E+3,0.274E+3,0.165E+3,0.10915300E+2,0.29086000E+1 - ,0.46220710E+3,0.274E+3,0.166E+3,0.10915300E+2,0.28965000E+1 - ,0.43236450E+3,0.274E+3,0.167E+3,0.10915300E+2,0.29242000E+1 - ,0.42019360E+3,0.274E+3,0.168E+3,0.10915300E+2,0.29282000E+1 - ,0.41735840E+3,0.274E+3,0.169E+3,0.10915300E+2,0.29246000E+1 - ,0.43783510E+3,0.274E+3,0.170E+3,0.10915300E+2,0.28482000E+1 - ,0.40359860E+3,0.274E+3,0.171E+3,0.10915300E+2,0.29219000E+1 - ,0.54010000E+3,0.274E+3,0.172E+3,0.10915300E+2,0.19254000E+1 - ,0.50356000E+3,0.274E+3,0.173E+3,0.10915300E+2,0.19459000E+1 - ,0.46165670E+3,0.274E+3,0.174E+3,0.10915300E+2,0.19292000E+1 - ,0.46529970E+3,0.274E+3,0.175E+3,0.10915300E+2,0.18104000E+1 - ,0.41168040E+3,0.274E+3,0.176E+3,0.10915300E+2,0.18858000E+1 - ,0.38805470E+3,0.274E+3,0.177E+3,0.10915300E+2,0.18648000E+1 - ,0.37109900E+3,0.274E+3,0.178E+3,0.10915300E+2,0.19188000E+1 - ,0.35487160E+3,0.274E+3,0.179E+3,0.10915300E+2,0.98460000E+0 - ,0.34408260E+3,0.274E+3,0.180E+3,0.10915300E+2,0.19896000E+1 - ,0.54282280E+3,0.274E+3,0.181E+3,0.10915300E+2,0.92670000E+0 - ,0.49822260E+3,0.274E+3,0.182E+3,0.10915300E+2,0.93830000E+0 - ,0.48504830E+3,0.274E+3,0.183E+3,0.10915300E+2,0.98200000E+0 - ,0.47318900E+3,0.274E+3,0.184E+3,0.10915300E+2,0.98150000E+0 - ,0.44381290E+3,0.274E+3,0.185E+3,0.10915300E+2,0.99540000E+0 - ,0.56285700E+3,0.274E+3,0.187E+3,0.10915300E+2,0.97050000E+0 - ,0.10344519E+4,0.274E+3,0.188E+3,0.10915300E+2,0.96620000E+0 - ,0.59772660E+3,0.274E+3,0.189E+3,0.10915300E+2,0.29070000E+1 - ,0.68593330E+3,0.274E+3,0.190E+3,0.10915300E+2,0.28844000E+1 - ,0.61504850E+3,0.274E+3,0.191E+3,0.10915300E+2,0.28738000E+1 - ,0.54603460E+3,0.274E+3,0.192E+3,0.10915300E+2,0.28878000E+1 - ,0.52604590E+3,0.274E+3,0.193E+3,0.10915300E+2,0.29095000E+1 - ,0.62473940E+3,0.274E+3,0.194E+3,0.10915300E+2,0.19209000E+1 - ,0.14693770E+3,0.274E+3,0.204E+3,0.10915300E+2,0.19697000E+1 - ,0.14506890E+3,0.274E+3,0.205E+3,0.10915300E+2,0.19441000E+1 - ,0.10751640E+3,0.274E+3,0.206E+3,0.10915300E+2,0.19985000E+1 - ,0.86744300E+2,0.274E+3,0.207E+3,0.10915300E+2,0.20143000E+1 - ,0.60101300E+2,0.274E+3,0.208E+3,0.10915300E+2,0.19887000E+1 - ,0.25846390E+3,0.274E+3,0.212E+3,0.10915300E+2,0.19496000E+1 - ,0.31219790E+3,0.274E+3,0.213E+3,0.10915300E+2,0.19311000E+1 - ,0.30136080E+3,0.274E+3,0.214E+3,0.10915300E+2,0.19435000E+1 - ,0.26370240E+3,0.274E+3,0.215E+3,0.10915300E+2,0.20102000E+1 - ,0.22325700E+3,0.274E+3,0.216E+3,0.10915300E+2,0.19903000E+1 - ,0.36300510E+3,0.274E+3,0.220E+3,0.10915300E+2,0.19349000E+1 - ,0.35046740E+3,0.274E+3,0.221E+3,0.10915300E+2,0.28999000E+1 - ,0.35493010E+3,0.274E+3,0.222E+3,0.10915300E+2,0.38675000E+1 - ,0.32491900E+3,0.274E+3,0.223E+3,0.10915300E+2,0.29110000E+1 - ,0.24698040E+3,0.274E+3,0.224E+3,0.10915300E+2,0.10619100E+2 - ,0.21243170E+3,0.274E+3,0.225E+3,0.10915300E+2,0.98849000E+1 - ,0.20838910E+3,0.274E+3,0.226E+3,0.10915300E+2,0.91376000E+1 - ,0.24221550E+3,0.274E+3,0.227E+3,0.10915300E+2,0.29263000E+1 - ,0.22617060E+3,0.274E+3,0.228E+3,0.10915300E+2,0.65458000E+1 - ,0.31684610E+3,0.274E+3,0.231E+3,0.10915300E+2,0.19315000E+1 - ,0.33520830E+3,0.274E+3,0.232E+3,0.10915300E+2,0.19447000E+1 - ,0.30932650E+3,0.274E+3,0.233E+3,0.10915300E+2,0.19793000E+1 - ,0.28913180E+3,0.274E+3,0.234E+3,0.10915300E+2,0.19812000E+1 - ,0.43547330E+3,0.274E+3,0.238E+3,0.10915300E+2,0.19143000E+1 - ,0.42156130E+3,0.274E+3,0.239E+3,0.10915300E+2,0.28903000E+1 - ,0.42595070E+3,0.274E+3,0.240E+3,0.10915300E+2,0.39106000E+1 - ,0.41195670E+3,0.274E+3,0.241E+3,0.10915300E+2,0.29225000E+1 - ,0.36633030E+3,0.274E+3,0.242E+3,0.10915300E+2,0.11055600E+2 - ,0.32483190E+3,0.274E+3,0.243E+3,0.10915300E+2,0.95402000E+1 - ,0.30750010E+3,0.274E+3,0.244E+3,0.10915300E+2,0.88895000E+1 - ,0.31180890E+3,0.274E+3,0.245E+3,0.10915300E+2,0.29696000E+1 - ,0.32514160E+3,0.274E+3,0.246E+3,0.10915300E+2,0.57095000E+1 - ,0.40961940E+3,0.274E+3,0.249E+3,0.10915300E+2,0.19378000E+1 - ,0.44499610E+3,0.274E+3,0.250E+3,0.10915300E+2,0.19505000E+1 - ,0.42145120E+3,0.274E+3,0.251E+3,0.10915300E+2,0.19523000E+1 - ,0.40793570E+3,0.274E+3,0.252E+3,0.10915300E+2,0.19639000E+1 - ,0.52780130E+3,0.274E+3,0.256E+3,0.10915300E+2,0.18467000E+1 - ,0.54842160E+3,0.274E+3,0.257E+3,0.10915300E+2,0.29175000E+1 - ,0.40887060E+3,0.274E+3,0.272E+3,0.10915300E+2,0.38840000E+1 - ,0.42635470E+3,0.274E+3,0.273E+3,0.10915300E+2,0.28988000E+1 - ,0.39809730E+3,0.274E+3,0.274E+3,0.10915300E+2,0.10915300E+2 - ,0.31592800E+2,0.275E+3,0.100E+1,0.98054000E+1,0.91180000E+0 - ,0.21621000E+2,0.275E+3,0.200E+1,0.98054000E+1,0.00000000E+0 - ,0.43757960E+3,0.275E+3,0.300E+1,0.98054000E+1,0.00000000E+0 - ,0.26483780E+3,0.275E+3,0.400E+1,0.98054000E+1,0.00000000E+0 - ,0.18401940E+3,0.275E+3,0.500E+1,0.98054000E+1,0.00000000E+0 - ,0.12752710E+3,0.275E+3,0.600E+1,0.98054000E+1,0.00000000E+0 - ,0.90995800E+2,0.275E+3,0.700E+1,0.98054000E+1,0.00000000E+0 - ,0.69928900E+2,0.275E+3,0.800E+1,0.98054000E+1,0.00000000E+0 - ,0.53673800E+2,0.275E+3,0.900E+1,0.98054000E+1,0.00000000E+0 - ,0.41731000E+2,0.275E+3,0.100E+2,0.98054000E+1,0.00000000E+0 - ,0.52514830E+3,0.275E+3,0.110E+2,0.98054000E+1,0.00000000E+0 - ,0.41847680E+3,0.275E+3,0.120E+2,0.98054000E+1,0.00000000E+0 - ,0.39167000E+3,0.275E+3,0.130E+2,0.98054000E+1,0.00000000E+0 - ,0.31514880E+3,0.275E+3,0.140E+2,0.98054000E+1,0.00000000E+0 - ,0.25044750E+3,0.275E+3,0.150E+2,0.98054000E+1,0.00000000E+0 - ,0.21061910E+3,0.275E+3,0.160E+2,0.98054000E+1,0.00000000E+0 - ,0.17429820E+3,0.275E+3,0.170E+2,0.98054000E+1,0.00000000E+0 - ,0.14428140E+3,0.275E+3,0.180E+2,0.98054000E+1,0.00000000E+0 - ,0.85835650E+3,0.275E+3,0.190E+2,0.98054000E+1,0.00000000E+0 - ,0.72611640E+3,0.275E+3,0.200E+2,0.98054000E+1,0.00000000E+0 - ,0.60356880E+3,0.275E+3,0.210E+2,0.98054000E+1,0.00000000E+0 - ,0.58685490E+3,0.275E+3,0.220E+2,0.98054000E+1,0.00000000E+0 - ,0.53950230E+3,0.275E+3,0.230E+2,0.98054000E+1,0.00000000E+0 - ,0.42636910E+3,0.275E+3,0.240E+2,0.98054000E+1,0.00000000E+0 - ,0.46716530E+3,0.275E+3,0.250E+2,0.98054000E+1,0.00000000E+0 - ,0.36813400E+3,0.275E+3,0.260E+2,0.98054000E+1,0.00000000E+0 - ,0.39225490E+3,0.275E+3,0.270E+2,0.98054000E+1,0.00000000E+0 - ,0.40236920E+3,0.275E+3,0.280E+2,0.98054000E+1,0.00000000E+0 - ,0.30964490E+3,0.275E+3,0.290E+2,0.98054000E+1,0.00000000E+0 - ,0.32085180E+3,0.275E+3,0.300E+2,0.98054000E+1,0.00000000E+0 - ,0.37820130E+3,0.275E+3,0.310E+2,0.98054000E+1,0.00000000E+0 - ,0.33870950E+3,0.275E+3,0.320E+2,0.98054000E+1,0.00000000E+0 - ,0.29330960E+3,0.275E+3,0.330E+2,0.98054000E+1,0.00000000E+0 - ,0.26587000E+3,0.275E+3,0.340E+2,0.98054000E+1,0.00000000E+0 - ,0.23516470E+3,0.275E+3,0.350E+2,0.98054000E+1,0.00000000E+0 - ,0.20659450E+3,0.275E+3,0.360E+2,0.98054000E+1,0.00000000E+0 - ,0.96546080E+3,0.275E+3,0.370E+2,0.98054000E+1,0.00000000E+0 - ,0.86521550E+3,0.275E+3,0.380E+2,0.98054000E+1,0.00000000E+0 - ,0.76664930E+3,0.275E+3,0.390E+2,0.98054000E+1,0.00000000E+0 - ,0.69431570E+3,0.275E+3,0.400E+2,0.98054000E+1,0.00000000E+0 - ,0.63659010E+3,0.275E+3,0.410E+2,0.98054000E+1,0.00000000E+0 - ,0.49673190E+3,0.275E+3,0.420E+2,0.98054000E+1,0.00000000E+0 - ,0.55196750E+3,0.275E+3,0.430E+2,0.98054000E+1,0.00000000E+0 - ,0.42541540E+3,0.275E+3,0.440E+2,0.98054000E+1,0.00000000E+0 - ,0.46408940E+3,0.275E+3,0.450E+2,0.98054000E+1,0.00000000E+0 - ,0.43183300E+3,0.275E+3,0.460E+2,0.98054000E+1,0.00000000E+0 - ,0.36056290E+3,0.275E+3,0.470E+2,0.98054000E+1,0.00000000E+0 - ,0.38221490E+3,0.275E+3,0.480E+2,0.98054000E+1,0.00000000E+0 - ,0.47434870E+3,0.275E+3,0.490E+2,0.98054000E+1,0.00000000E+0 - ,0.44370850E+3,0.275E+3,0.500E+2,0.98054000E+1,0.00000000E+0 - ,0.40039260E+3,0.275E+3,0.510E+2,0.98054000E+1,0.00000000E+0 - ,0.37450420E+3,0.275E+3,0.520E+2,0.98054000E+1,0.00000000E+0 - ,0.34168440E+3,0.275E+3,0.530E+2,0.98054000E+1,0.00000000E+0 - ,0.30992280E+3,0.275E+3,0.540E+2,0.98054000E+1,0.00000000E+0 - ,0.11778622E+4,0.275E+3,0.550E+2,0.98054000E+1,0.00000000E+0 - ,0.11002149E+4,0.275E+3,0.560E+2,0.98054000E+1,0.00000000E+0 - ,0.97735910E+3,0.275E+3,0.570E+2,0.98054000E+1,0.00000000E+0 - ,0.47249460E+3,0.275E+3,0.580E+2,0.98054000E+1,0.27991000E+1 - ,0.97880490E+3,0.275E+3,0.590E+2,0.98054000E+1,0.00000000E+0 - ,0.94144390E+3,0.275E+3,0.600E+2,0.98054000E+1,0.00000000E+0 - ,0.91823780E+3,0.275E+3,0.610E+2,0.98054000E+1,0.00000000E+0 - ,0.89683560E+3,0.275E+3,0.620E+2,0.98054000E+1,0.00000000E+0 - ,0.87787040E+3,0.275E+3,0.630E+2,0.98054000E+1,0.00000000E+0 - ,0.70022530E+3,0.275E+3,0.640E+2,0.98054000E+1,0.00000000E+0 - ,0.77537110E+3,0.275E+3,0.650E+2,0.98054000E+1,0.00000000E+0 - ,0.74950170E+3,0.275E+3,0.660E+2,0.98054000E+1,0.00000000E+0 - ,0.79380070E+3,0.275E+3,0.670E+2,0.98054000E+1,0.00000000E+0 - ,0.77710890E+3,0.275E+3,0.680E+2,0.98054000E+1,0.00000000E+0 - ,0.76218580E+3,0.275E+3,0.690E+2,0.98054000E+1,0.00000000E+0 - ,0.75278270E+3,0.275E+3,0.700E+2,0.98054000E+1,0.00000000E+0 - ,0.64040610E+3,0.275E+3,0.710E+2,0.98054000E+1,0.00000000E+0 - ,0.63688250E+3,0.275E+3,0.720E+2,0.98054000E+1,0.00000000E+0 - ,0.58584610E+3,0.275E+3,0.730E+2,0.98054000E+1,0.00000000E+0 - ,0.49867750E+3,0.275E+3,0.740E+2,0.98054000E+1,0.00000000E+0 - ,0.50852330E+3,0.275E+3,0.750E+2,0.98054000E+1,0.00000000E+0 - ,0.46413690E+3,0.275E+3,0.760E+2,0.98054000E+1,0.00000000E+0 - ,0.42756890E+3,0.275E+3,0.770E+2,0.98054000E+1,0.00000000E+0 - ,0.35797140E+3,0.275E+3,0.780E+2,0.98054000E+1,0.00000000E+0 - ,0.33546850E+3,0.275E+3,0.790E+2,0.98054000E+1,0.00000000E+0 - ,0.34558560E+3,0.275E+3,0.800E+2,0.98054000E+1,0.00000000E+0 - ,0.48985300E+3,0.275E+3,0.810E+2,0.98054000E+1,0.00000000E+0 - ,0.48277210E+3,0.275E+3,0.820E+2,0.98054000E+1,0.00000000E+0 - ,0.44834220E+3,0.275E+3,0.830E+2,0.98054000E+1,0.00000000E+0 - ,0.43041860E+3,0.275E+3,0.840E+2,0.98054000E+1,0.00000000E+0 - ,0.40052020E+3,0.275E+3,0.850E+2,0.98054000E+1,0.00000000E+0 - ,0.37000240E+3,0.275E+3,0.860E+2,0.98054000E+1,0.00000000E+0 - ,0.11223371E+4,0.275E+3,0.870E+2,0.98054000E+1,0.00000000E+0 - ,0.10947171E+4,0.275E+3,0.880E+2,0.98054000E+1,0.00000000E+0 - ,0.97740400E+3,0.275E+3,0.890E+2,0.98054000E+1,0.00000000E+0 - ,0.88977500E+3,0.275E+3,0.900E+2,0.98054000E+1,0.00000000E+0 - ,0.87887760E+3,0.275E+3,0.910E+2,0.98054000E+1,0.00000000E+0 - ,0.85133500E+3,0.275E+3,0.920E+2,0.98054000E+1,0.00000000E+0 - ,0.86982820E+3,0.275E+3,0.930E+2,0.98054000E+1,0.00000000E+0 - ,0.84344130E+3,0.275E+3,0.940E+2,0.98054000E+1,0.00000000E+0 - ,0.49861600E+2,0.275E+3,0.101E+3,0.98054000E+1,0.00000000E+0 - ,0.15470980E+3,0.275E+3,0.103E+3,0.98054000E+1,0.98650000E+0 - ,0.19867640E+3,0.275E+3,0.104E+3,0.98054000E+1,0.98080000E+0 - ,0.15594320E+3,0.275E+3,0.105E+3,0.98054000E+1,0.97060000E+0 - ,0.11971100E+3,0.275E+3,0.106E+3,0.98054000E+1,0.98680000E+0 - ,0.84990600E+2,0.275E+3,0.107E+3,0.98054000E+1,0.99440000E+0 - ,0.63003200E+2,0.275E+3,0.108E+3,0.98054000E+1,0.99250000E+0 - ,0.44293300E+2,0.275E+3,0.109E+3,0.98054000E+1,0.99820000E+0 - ,0.22533300E+3,0.275E+3,0.111E+3,0.98054000E+1,0.96840000E+0 - ,0.34751630E+3,0.275E+3,0.112E+3,0.98054000E+1,0.96280000E+0 - ,0.35639850E+3,0.275E+3,0.113E+3,0.98054000E+1,0.96480000E+0 - ,0.29229100E+3,0.275E+3,0.114E+3,0.98054000E+1,0.95070000E+0 - ,0.24332340E+3,0.275E+3,0.115E+3,0.98054000E+1,0.99470000E+0 - ,0.20827540E+3,0.275E+3,0.116E+3,0.98054000E+1,0.99480000E+0 - ,0.17247660E+3,0.275E+3,0.117E+3,0.98054000E+1,0.99720000E+0 - ,0.31572770E+3,0.275E+3,0.119E+3,0.98054000E+1,0.97670000E+0 - ,0.58337200E+3,0.275E+3,0.120E+3,0.98054000E+1,0.98310000E+0 - ,0.31998810E+3,0.275E+3,0.121E+3,0.98054000E+1,0.18627000E+1 - ,0.30928520E+3,0.275E+3,0.122E+3,0.98054000E+1,0.18299000E+1 - ,0.30306940E+3,0.275E+3,0.123E+3,0.98054000E+1,0.19138000E+1 - ,0.29974820E+3,0.275E+3,0.124E+3,0.98054000E+1,0.18269000E+1 - ,0.27813060E+3,0.275E+3,0.125E+3,0.98054000E+1,0.16406000E+1 - ,0.25824560E+3,0.275E+3,0.126E+3,0.98054000E+1,0.16483000E+1 - ,0.24647110E+3,0.275E+3,0.127E+3,0.98054000E+1,0.17149000E+1 - ,0.24079380E+3,0.275E+3,0.128E+3,0.98054000E+1,0.17937000E+1 - ,0.23633890E+3,0.275E+3,0.129E+3,0.98054000E+1,0.95760000E+0 - ,0.22442270E+3,0.275E+3,0.130E+3,0.98054000E+1,0.19419000E+1 - ,0.35665940E+3,0.275E+3,0.131E+3,0.98054000E+1,0.96010000E+0 - ,0.31814490E+3,0.275E+3,0.132E+3,0.98054000E+1,0.94340000E+0 - ,0.28862680E+3,0.275E+3,0.133E+3,0.98054000E+1,0.98890000E+0 - ,0.26594970E+3,0.275E+3,0.134E+3,0.98054000E+1,0.99010000E+0 - ,0.23668530E+3,0.275E+3,0.135E+3,0.98054000E+1,0.99740000E+0 - ,0.37838750E+3,0.275E+3,0.137E+3,0.98054000E+1,0.97380000E+0 - ,0.70963970E+3,0.275E+3,0.138E+3,0.98054000E+1,0.98010000E+0 - ,0.55520870E+3,0.275E+3,0.139E+3,0.98054000E+1,0.19153000E+1 - ,0.42330460E+3,0.275E+3,0.140E+3,0.98054000E+1,0.19355000E+1 - ,0.42740240E+3,0.275E+3,0.141E+3,0.98054000E+1,0.19545000E+1 - ,0.40015670E+3,0.275E+3,0.142E+3,0.98054000E+1,0.19420000E+1 - ,0.44382790E+3,0.275E+3,0.143E+3,0.98054000E+1,0.16682000E+1 - ,0.35202000E+3,0.275E+3,0.144E+3,0.98054000E+1,0.18584000E+1 - ,0.32985620E+3,0.275E+3,0.145E+3,0.98054000E+1,0.19003000E+1 - ,0.30703010E+3,0.275E+3,0.146E+3,0.98054000E+1,0.18630000E+1 - ,0.29664300E+3,0.275E+3,0.147E+3,0.98054000E+1,0.96790000E+0 - ,0.29510960E+3,0.275E+3,0.148E+3,0.98054000E+1,0.19539000E+1 - ,0.45411220E+3,0.275E+3,0.149E+3,0.98054000E+1,0.96330000E+0 - ,0.41592040E+3,0.275E+3,0.150E+3,0.98054000E+1,0.95140000E+0 - ,0.39310920E+3,0.275E+3,0.151E+3,0.98054000E+1,0.97490000E+0 - ,0.37441140E+3,0.275E+3,0.152E+3,0.98054000E+1,0.98110000E+0 - ,0.34482440E+3,0.275E+3,0.153E+3,0.98054000E+1,0.99680000E+0 - ,0.45152920E+3,0.275E+3,0.155E+3,0.98054000E+1,0.99090000E+0 - ,0.91708910E+3,0.275E+3,0.156E+3,0.98054000E+1,0.97970000E+0 - ,0.70171880E+3,0.275E+3,0.157E+3,0.98054000E+1,0.19373000E+1 - ,0.45862530E+3,0.275E+3,0.159E+3,0.98054000E+1,0.29425000E+1 - ,0.44920880E+3,0.275E+3,0.160E+3,0.98054000E+1,0.29455000E+1 - ,0.43528510E+3,0.275E+3,0.161E+3,0.98054000E+1,0.29413000E+1 - ,0.43662810E+3,0.275E+3,0.162E+3,0.98054000E+1,0.29300000E+1 - ,0.41857700E+3,0.275E+3,0.163E+3,0.98054000E+1,0.18286000E+1 - ,0.43896330E+3,0.275E+3,0.164E+3,0.98054000E+1,0.28732000E+1 - ,0.41303190E+3,0.275E+3,0.165E+3,0.98054000E+1,0.29086000E+1 - ,0.41895270E+3,0.275E+3,0.166E+3,0.98054000E+1,0.28965000E+1 - ,0.39263770E+3,0.275E+3,0.167E+3,0.98054000E+1,0.29242000E+1 - ,0.38167800E+3,0.275E+3,0.168E+3,0.98054000E+1,0.29282000E+1 - ,0.37901540E+3,0.275E+3,0.169E+3,0.98054000E+1,0.29246000E+1 - ,0.39706740E+3,0.275E+3,0.170E+3,0.98054000E+1,0.28482000E+1 - ,0.36663560E+3,0.275E+3,0.171E+3,0.98054000E+1,0.29219000E+1 - ,0.48647620E+3,0.275E+3,0.172E+3,0.98054000E+1,0.19254000E+1 - ,0.45499830E+3,0.275E+3,0.173E+3,0.98054000E+1,0.19459000E+1 - ,0.41851340E+3,0.275E+3,0.174E+3,0.98054000E+1,0.19292000E+1 - ,0.42070230E+3,0.275E+3,0.175E+3,0.98054000E+1,0.18104000E+1 - ,0.37494930E+3,0.275E+3,0.176E+3,0.98054000E+1,0.18858000E+1 - ,0.35392940E+3,0.275E+3,0.177E+3,0.98054000E+1,0.18648000E+1 - ,0.33877130E+3,0.275E+3,0.178E+3,0.98054000E+1,0.19188000E+1 - ,0.32404200E+3,0.275E+3,0.179E+3,0.98054000E+1,0.98460000E+0 - ,0.31491790E+3,0.275E+3,0.180E+3,0.98054000E+1,0.19896000E+1 - ,0.48972910E+3,0.275E+3,0.181E+3,0.98054000E+1,0.92670000E+0 - ,0.45162020E+3,0.275E+3,0.182E+3,0.98054000E+1,0.93830000E+0 - ,0.44081790E+3,0.275E+3,0.183E+3,0.98054000E+1,0.98200000E+0 - ,0.43091310E+3,0.275E+3,0.184E+3,0.98054000E+1,0.98150000E+0 - ,0.40535970E+3,0.275E+3,0.185E+3,0.98054000E+1,0.99540000E+0 - ,0.50882630E+3,0.275E+3,0.187E+3,0.98054000E+1,0.97050000E+0 - ,0.91874100E+3,0.275E+3,0.188E+3,0.98054000E+1,0.96620000E+0 - ,0.54234140E+3,0.275E+3,0.189E+3,0.98054000E+1,0.29070000E+1 - ,0.61996910E+3,0.275E+3,0.190E+3,0.98054000E+1,0.28844000E+1 - ,0.55704040E+3,0.275E+3,0.191E+3,0.98054000E+1,0.28738000E+1 - ,0.49609310E+3,0.275E+3,0.192E+3,0.98054000E+1,0.28878000E+1 - ,0.47831910E+3,0.275E+3,0.193E+3,0.98054000E+1,0.29095000E+1 - ,0.56313100E+3,0.275E+3,0.194E+3,0.98054000E+1,0.19209000E+1 - ,0.13319340E+3,0.275E+3,0.204E+3,0.98054000E+1,0.19697000E+1 - ,0.13189570E+3,0.275E+3,0.205E+3,0.98054000E+1,0.19441000E+1 - ,0.98601900E+2,0.275E+3,0.206E+3,0.98054000E+1,0.19985000E+1 - ,0.79979000E+2,0.275E+3,0.207E+3,0.98054000E+1,0.20143000E+1 - ,0.55894600E+2,0.275E+3,0.208E+3,0.98054000E+1,0.19887000E+1 - ,0.23303610E+3,0.275E+3,0.212E+3,0.98054000E+1,0.19496000E+1 - ,0.28137080E+3,0.275E+3,0.213E+3,0.98054000E+1,0.19311000E+1 - ,0.27272890E+3,0.275E+3,0.214E+3,0.98054000E+1,0.19435000E+1 - ,0.23983560E+3,0.275E+3,0.215E+3,0.98054000E+1,0.20102000E+1 - ,0.20414550E+3,0.275E+3,0.216E+3,0.98054000E+1,0.19903000E+1 - ,0.32770190E+3,0.275E+3,0.220E+3,0.98054000E+1,0.19349000E+1 - ,0.31737170E+3,0.275E+3,0.221E+3,0.98054000E+1,0.28999000E+1 - ,0.32150860E+3,0.275E+3,0.222E+3,0.98054000E+1,0.38675000E+1 - ,0.29439580E+3,0.275E+3,0.223E+3,0.98054000E+1,0.29110000E+1 - ,0.22519270E+3,0.275E+3,0.224E+3,0.98054000E+1,0.10619100E+2 - ,0.19439360E+3,0.275E+3,0.225E+3,0.98054000E+1,0.98849000E+1 - ,0.19062290E+3,0.275E+3,0.226E+3,0.98054000E+1,0.91376000E+1 - ,0.22028000E+3,0.275E+3,0.227E+3,0.98054000E+1,0.29263000E+1 - ,0.20601270E+3,0.275E+3,0.228E+3,0.98054000E+1,0.65458000E+1 - ,0.28665620E+3,0.275E+3,0.231E+3,0.98054000E+1,0.19315000E+1 - ,0.30371450E+3,0.275E+3,0.232E+3,0.98054000E+1,0.19447000E+1 - ,0.28150840E+3,0.275E+3,0.233E+3,0.98054000E+1,0.19793000E+1 - ,0.26395060E+3,0.275E+3,0.234E+3,0.98054000E+1,0.19812000E+1 - ,0.39346440E+3,0.275E+3,0.238E+3,0.98054000E+1,0.19143000E+1 - ,0.38237800E+3,0.275E+3,0.239E+3,0.98054000E+1,0.28903000E+1 - ,0.38683830E+3,0.275E+3,0.240E+3,0.98054000E+1,0.39106000E+1 - ,0.37417790E+3,0.275E+3,0.241E+3,0.98054000E+1,0.29225000E+1 - ,0.33405520E+3,0.275E+3,0.242E+3,0.98054000E+1,0.11055600E+2 - ,0.29716160E+3,0.275E+3,0.243E+3,0.98054000E+1,0.95402000E+1 - ,0.28166080E+3,0.275E+3,0.244E+3,0.98054000E+1,0.88895000E+1 - ,0.28475480E+3,0.275E+3,0.245E+3,0.98054000E+1,0.29696000E+1 - ,0.29656750E+3,0.275E+3,0.246E+3,0.98054000E+1,0.57095000E+1 - ,0.37125760E+3,0.275E+3,0.249E+3,0.98054000E+1,0.19378000E+1 - ,0.40316950E+3,0.275E+3,0.250E+3,0.98054000E+1,0.19505000E+1 - ,0.38318380E+3,0.275E+3,0.251E+3,0.98054000E+1,0.19523000E+1 - ,0.37169830E+3,0.275E+3,0.252E+3,0.98054000E+1,0.19639000E+1 - ,0.47755530E+3,0.275E+3,0.256E+3,0.98054000E+1,0.18467000E+1 - ,0.49702050E+3,0.275E+3,0.257E+3,0.98054000E+1,0.29175000E+1 - ,0.37200450E+3,0.275E+3,0.272E+3,0.98054000E+1,0.38840000E+1 - ,0.38748710E+3,0.275E+3,0.273E+3,0.98054000E+1,0.28988000E+1 - ,0.36309850E+3,0.275E+3,0.274E+3,0.98054000E+1,0.10915300E+2 - ,0.33214480E+3,0.275E+3,0.275E+3,0.98054000E+1,0.98054000E+1 - ,0.29959700E+2,0.276E+3,0.100E+1,0.91527000E+1,0.91180000E+0 - ,0.20732100E+2,0.276E+3,0.200E+1,0.91527000E+1,0.00000000E+0 - ,0.39946230E+3,0.276E+3,0.300E+1,0.91527000E+1,0.00000000E+0 - ,0.24560490E+3,0.276E+3,0.400E+1,0.91527000E+1,0.00000000E+0 - ,0.17242600E+3,0.276E+3,0.500E+1,0.91527000E+1,0.00000000E+0 - ,0.12047520E+3,0.276E+3,0.600E+1,0.91527000E+1,0.00000000E+0 - ,0.86515000E+2,0.276E+3,0.700E+1,0.91527000E+1,0.00000000E+0 - ,0.66798300E+2,0.276E+3,0.800E+1,0.91527000E+1,0.00000000E+0 - ,0.51483900E+2,0.276E+3,0.900E+1,0.91527000E+1,0.00000000E+0 - ,0.40166600E+2,0.276E+3,0.100E+2,0.91527000E+1,0.00000000E+0 - ,0.48002060E+3,0.276E+3,0.110E+2,0.91527000E+1,0.00000000E+0 - ,0.38703270E+3,0.276E+3,0.120E+2,0.91527000E+1,0.00000000E+0 - ,0.36408530E+3,0.276E+3,0.130E+2,0.91527000E+1,0.00000000E+0 - ,0.29497480E+3,0.276E+3,0.140E+2,0.91527000E+1,0.00000000E+0 - ,0.23585440E+3,0.276E+3,0.150E+2,0.91527000E+1,0.00000000E+0 - ,0.19918590E+3,0.276E+3,0.160E+2,0.91527000E+1,0.00000000E+0 - ,0.16551840E+3,0.276E+3,0.170E+2,0.91527000E+1,0.00000000E+0 - ,0.13752330E+3,0.276E+3,0.180E+2,0.91527000E+1,0.00000000E+0 - ,0.78398180E+3,0.276E+3,0.190E+2,0.91527000E+1,0.00000000E+0 - ,0.66874580E+3,0.276E+3,0.200E+2,0.91527000E+1,0.00000000E+0 - ,0.55703780E+3,0.276E+3,0.210E+2,0.91527000E+1,0.00000000E+0 - ,0.54287970E+3,0.276E+3,0.220E+2,0.91527000E+1,0.00000000E+0 - ,0.49973800E+3,0.276E+3,0.230E+2,0.91527000E+1,0.00000000E+0 - ,0.39539650E+3,0.276E+3,0.240E+2,0.91527000E+1,0.00000000E+0 - ,0.43357460E+3,0.276E+3,0.250E+2,0.91527000E+1,0.00000000E+0 - ,0.34214260E+3,0.276E+3,0.260E+2,0.91527000E+1,0.00000000E+0 - ,0.36517850E+3,0.276E+3,0.270E+2,0.91527000E+1,0.00000000E+0 - ,0.37407150E+3,0.276E+3,0.280E+2,0.91527000E+1,0.00000000E+0 - ,0.28825030E+3,0.276E+3,0.290E+2,0.91527000E+1,0.00000000E+0 - ,0.29957880E+3,0.276E+3,0.300E+2,0.91527000E+1,0.00000000E+0 - ,0.35252400E+3,0.276E+3,0.310E+2,0.91527000E+1,0.00000000E+0 - ,0.31731180E+3,0.276E+3,0.320E+2,0.91527000E+1,0.00000000E+0 - ,0.27613370E+3,0.276E+3,0.330E+2,0.91527000E+1,0.00000000E+0 - ,0.25111640E+3,0.276E+3,0.340E+2,0.91527000E+1,0.00000000E+0 - ,0.22287460E+3,0.276E+3,0.350E+2,0.91527000E+1,0.00000000E+0 - ,0.19643010E+3,0.276E+3,0.360E+2,0.91527000E+1,0.00000000E+0 - ,0.88292900E+3,0.276E+3,0.370E+2,0.91527000E+1,0.00000000E+0 - ,0.79689500E+3,0.276E+3,0.380E+2,0.91527000E+1,0.00000000E+0 - ,0.70887790E+3,0.276E+3,0.390E+2,0.91527000E+1,0.00000000E+0 - ,0.64366450E+3,0.276E+3,0.400E+2,0.91527000E+1,0.00000000E+0 - ,0.59124780E+3,0.276E+3,0.410E+2,0.91527000E+1,0.00000000E+0 - ,0.46302150E+3,0.276E+3,0.420E+2,0.91527000E+1,0.00000000E+0 - ,0.51380610E+3,0.276E+3,0.430E+2,0.91527000E+1,0.00000000E+0 - ,0.39755570E+3,0.276E+3,0.440E+2,0.91527000E+1,0.00000000E+0 - ,0.43340920E+3,0.276E+3,0.450E+2,0.91527000E+1,0.00000000E+0 - ,0.40374870E+3,0.276E+3,0.460E+2,0.91527000E+1,0.00000000E+0 - ,0.33729140E+3,0.276E+3,0.470E+2,0.91527000E+1,0.00000000E+0 - ,0.35790130E+3,0.276E+3,0.480E+2,0.91527000E+1,0.00000000E+0 - ,0.44252210E+3,0.276E+3,0.490E+2,0.91527000E+1,0.00000000E+0 - ,0.41550540E+3,0.276E+3,0.500E+2,0.91527000E+1,0.00000000E+0 - ,0.37647850E+3,0.276E+3,0.510E+2,0.91527000E+1,0.00000000E+0 - ,0.35306060E+3,0.276E+3,0.520E+2,0.91527000E+1,0.00000000E+0 - ,0.32305850E+3,0.276E+3,0.530E+2,0.91527000E+1,0.00000000E+0 - ,0.29386160E+3,0.276E+3,0.540E+2,0.91527000E+1,0.00000000E+0 - ,0.10777158E+4,0.276E+3,0.550E+2,0.91527000E+1,0.00000000E+0 - ,0.10124643E+4,0.276E+3,0.560E+2,0.91527000E+1,0.00000000E+0 - ,0.90281190E+3,0.276E+3,0.570E+2,0.91527000E+1,0.00000000E+0 - ,0.44410240E+3,0.276E+3,0.580E+2,0.91527000E+1,0.27991000E+1 - ,0.90205950E+3,0.276E+3,0.590E+2,0.91527000E+1,0.00000000E+0 - ,0.86810970E+3,0.276E+3,0.600E+2,0.91527000E+1,0.00000000E+0 - ,0.84683980E+3,0.276E+3,0.610E+2,0.91527000E+1,0.00000000E+0 - ,0.82720360E+3,0.276E+3,0.620E+2,0.91527000E+1,0.00000000E+0 - ,0.80980750E+3,0.276E+3,0.630E+2,0.91527000E+1,0.00000000E+0 - ,0.64909210E+3,0.276E+3,0.640E+2,0.91527000E+1,0.00000000E+0 - ,0.71473580E+3,0.276E+3,0.650E+2,0.91527000E+1,0.00000000E+0 - ,0.69143160E+3,0.276E+3,0.660E+2,0.91527000E+1,0.00000000E+0 - ,0.73288920E+3,0.276E+3,0.670E+2,0.91527000E+1,0.00000000E+0 - ,0.71752640E+3,0.276E+3,0.680E+2,0.91527000E+1,0.00000000E+0 - ,0.70383170E+3,0.276E+3,0.690E+2,0.91527000E+1,0.00000000E+0 - ,0.69499350E+3,0.276E+3,0.700E+2,0.91527000E+1,0.00000000E+0 - ,0.59320990E+3,0.276E+3,0.710E+2,0.91527000E+1,0.00000000E+0 - ,0.59212750E+3,0.276E+3,0.720E+2,0.91527000E+1,0.00000000E+0 - ,0.54613100E+3,0.276E+3,0.730E+2,0.91527000E+1,0.00000000E+0 - ,0.46612960E+3,0.276E+3,0.740E+2,0.91527000E+1,0.00000000E+0 - ,0.47570880E+3,0.276E+3,0.750E+2,0.91527000E+1,0.00000000E+0 - ,0.43520440E+3,0.276E+3,0.760E+2,0.91527000E+1,0.00000000E+0 - ,0.40169710E+3,0.276E+3,0.770E+2,0.91527000E+1,0.00000000E+0 - ,0.33718850E+3,0.276E+3,0.780E+2,0.91527000E+1,0.00000000E+0 - ,0.31631490E+3,0.276E+3,0.790E+2,0.91527000E+1,0.00000000E+0 - ,0.32600310E+3,0.276E+3,0.800E+2,0.91527000E+1,0.00000000E+0 - ,0.45788770E+3,0.276E+3,0.810E+2,0.91527000E+1,0.00000000E+0 - ,0.45244550E+3,0.276E+3,0.820E+2,0.91527000E+1,0.00000000E+0 - ,0.42163980E+3,0.276E+3,0.830E+2,0.91527000E+1,0.00000000E+0 - ,0.40564640E+3,0.276E+3,0.840E+2,0.91527000E+1,0.00000000E+0 - ,0.37847640E+3,0.276E+3,0.850E+2,0.91527000E+1,0.00000000E+0 - ,0.35052560E+3,0.276E+3,0.860E+2,0.91527000E+1,0.00000000E+0 - ,0.10301431E+4,0.276E+3,0.870E+2,0.91527000E+1,0.00000000E+0 - ,0.10095485E+4,0.276E+3,0.880E+2,0.91527000E+1,0.00000000E+0 - ,0.90447790E+3,0.276E+3,0.890E+2,0.91527000E+1,0.00000000E+0 - ,0.82702680E+3,0.276E+3,0.900E+2,0.91527000E+1,0.00000000E+0 - ,0.81550490E+3,0.276E+3,0.910E+2,0.91527000E+1,0.00000000E+0 - ,0.79006160E+3,0.276E+3,0.920E+2,0.91527000E+1,0.00000000E+0 - ,0.80513870E+3,0.276E+3,0.930E+2,0.91527000E+1,0.00000000E+0 - ,0.78106340E+3,0.276E+3,0.940E+2,0.91527000E+1,0.00000000E+0 - ,0.46979300E+2,0.276E+3,0.101E+3,0.91527000E+1,0.00000000E+0 - ,0.14371930E+3,0.276E+3,0.103E+3,0.91527000E+1,0.98650000E+0 - ,0.18497380E+3,0.276E+3,0.104E+3,0.91527000E+1,0.98080000E+0 - ,0.14647120E+3,0.276E+3,0.105E+3,0.91527000E+1,0.97060000E+0 - ,0.11311480E+3,0.276E+3,0.106E+3,0.91527000E+1,0.98680000E+0 - ,0.80841400E+2,0.276E+3,0.107E+3,0.91527000E+1,0.99440000E+0 - ,0.60262600E+2,0.276E+3,0.108E+3,0.91527000E+1,0.99250000E+0 - ,0.42663600E+2,0.276E+3,0.109E+3,0.91527000E+1,0.99820000E+0 - ,0.20909190E+3,0.276E+3,0.111E+3,0.91527000E+1,0.96840000E+0 - ,0.32213980E+3,0.276E+3,0.112E+3,0.91527000E+1,0.96280000E+0 - ,0.33174520E+3,0.276E+3,0.113E+3,0.91527000E+1,0.96480000E+0 - ,0.27389260E+3,0.276E+3,0.114E+3,0.91527000E+1,0.95070000E+0 - ,0.22921310E+3,0.276E+3,0.115E+3,0.91527000E+1,0.99470000E+0 - ,0.19696310E+3,0.276E+3,0.116E+3,0.91527000E+1,0.99480000E+0 - ,0.16378500E+3,0.276E+3,0.117E+3,0.91527000E+1,0.99720000E+0 - ,0.29455150E+3,0.276E+3,0.119E+3,0.91527000E+1,0.97670000E+0 - ,0.53811810E+3,0.276E+3,0.120E+3,0.91527000E+1,0.98310000E+0 - ,0.29979870E+3,0.276E+3,0.121E+3,0.91527000E+1,0.18627000E+1 - ,0.28989590E+3,0.276E+3,0.122E+3,0.91527000E+1,0.18299000E+1 - ,0.28406410E+3,0.276E+3,0.123E+3,0.91527000E+1,0.19138000E+1 - ,0.28079860E+3,0.276E+3,0.124E+3,0.91527000E+1,0.18269000E+1 - ,0.26125710E+3,0.276E+3,0.125E+3,0.91527000E+1,0.16406000E+1 - ,0.24283990E+3,0.276E+3,0.126E+3,0.91527000E+1,0.16483000E+1 - ,0.23180890E+3,0.276E+3,0.127E+3,0.91527000E+1,0.17149000E+1 - ,0.22642260E+3,0.276E+3,0.128E+3,0.91527000E+1,0.17937000E+1 - ,0.22176420E+3,0.276E+3,0.129E+3,0.91527000E+1,0.95760000E+0 - ,0.21139390E+3,0.276E+3,0.130E+3,0.91527000E+1,0.19419000E+1 - ,0.33289310E+3,0.276E+3,0.131E+3,0.91527000E+1,0.96010000E+0 - ,0.29843870E+3,0.276E+3,0.132E+3,0.91527000E+1,0.94340000E+0 - ,0.27181450E+3,0.276E+3,0.133E+3,0.91527000E+1,0.98890000E+0 - ,0.25118530E+3,0.276E+3,0.134E+3,0.91527000E+1,0.99010000E+0 - ,0.22428140E+3,0.276E+3,0.135E+3,0.91527000E+1,0.99740000E+0 - ,0.35352250E+3,0.276E+3,0.137E+3,0.91527000E+1,0.97380000E+0 - ,0.65452330E+3,0.276E+3,0.138E+3,0.91527000E+1,0.98010000E+0 - ,0.51611830E+3,0.276E+3,0.139E+3,0.91527000E+1,0.19153000E+1 - ,0.39662190E+3,0.276E+3,0.140E+3,0.91527000E+1,0.19355000E+1 - ,0.40043580E+3,0.276E+3,0.141E+3,0.91527000E+1,0.19545000E+1 - ,0.37541960E+3,0.276E+3,0.142E+3,0.91527000E+1,0.19420000E+1 - ,0.41489900E+3,0.276E+3,0.143E+3,0.91527000E+1,0.16682000E+1 - ,0.33125900E+3,0.276E+3,0.144E+3,0.91527000E+1,0.18584000E+1 - ,0.31057580E+3,0.276E+3,0.145E+3,0.91527000E+1,0.19003000E+1 - ,0.28931700E+3,0.276E+3,0.146E+3,0.91527000E+1,0.18630000E+1 - ,0.27942790E+3,0.276E+3,0.147E+3,0.91527000E+1,0.96790000E+0 - ,0.27848020E+3,0.276E+3,0.148E+3,0.91527000E+1,0.19539000E+1 - ,0.42425050E+3,0.276E+3,0.149E+3,0.91527000E+1,0.96330000E+0 - ,0.39014410E+3,0.276E+3,0.150E+3,0.91527000E+1,0.95140000E+0 - ,0.36984470E+3,0.276E+3,0.151E+3,0.91527000E+1,0.97490000E+0 - ,0.35302740E+3,0.276E+3,0.152E+3,0.91527000E+1,0.98110000E+0 - ,0.32600590E+3,0.276E+3,0.153E+3,0.91527000E+1,0.99680000E+0 - ,0.42307320E+3,0.276E+3,0.155E+3,0.91527000E+1,0.99090000E+0 - ,0.84493410E+3,0.276E+3,0.156E+3,0.91527000E+1,0.97970000E+0 - ,0.65199750E+3,0.276E+3,0.157E+3,0.91527000E+1,0.19373000E+1 - ,0.43118430E+3,0.276E+3,0.159E+3,0.91527000E+1,0.29425000E+1 - ,0.42235310E+3,0.276E+3,0.160E+3,0.91527000E+1,0.29455000E+1 - ,0.40935960E+3,0.276E+3,0.161E+3,0.91527000E+1,0.29413000E+1 - ,0.41038090E+3,0.276E+3,0.162E+3,0.91527000E+1,0.29300000E+1 - ,0.39271700E+3,0.276E+3,0.163E+3,0.91527000E+1,0.18286000E+1 - ,0.41244200E+3,0.276E+3,0.164E+3,0.91527000E+1,0.28732000E+1 - ,0.38830810E+3,0.276E+3,0.165E+3,0.91527000E+1,0.29086000E+1 - ,0.39347340E+3,0.276E+3,0.166E+3,0.91527000E+1,0.28965000E+1 - ,0.36931690E+3,0.276E+3,0.167E+3,0.91527000E+1,0.29242000E+1 - ,0.35907870E+3,0.276E+3,0.168E+3,0.91527000E+1,0.29282000E+1 - ,0.35650780E+3,0.276E+3,0.169E+3,0.91527000E+1,0.29246000E+1 - ,0.37307840E+3,0.276E+3,0.170E+3,0.91527000E+1,0.28482000E+1 - ,0.34495150E+3,0.276E+3,0.171E+3,0.91527000E+1,0.29219000E+1 - ,0.45455470E+3,0.276E+3,0.172E+3,0.91527000E+1,0.19254000E+1 - ,0.42623560E+3,0.276E+3,0.173E+3,0.91527000E+1,0.19459000E+1 - ,0.39310340E+3,0.276E+3,0.174E+3,0.91527000E+1,0.19292000E+1 - ,0.39431360E+3,0.276E+3,0.175E+3,0.91527000E+1,0.18104000E+1 - ,0.35350380E+3,0.276E+3,0.176E+3,0.91527000E+1,0.18858000E+1 - ,0.33405950E+3,0.276E+3,0.177E+3,0.91527000E+1,0.18648000E+1 - ,0.31998180E+3,0.276E+3,0.178E+3,0.91527000E+1,0.19188000E+1 - ,0.30613090E+3,0.276E+3,0.179E+3,0.91527000E+1,0.98460000E+0 - ,0.29806110E+3,0.276E+3,0.180E+3,0.91527000E+1,0.19896000E+1 - ,0.45819840E+3,0.276E+3,0.181E+3,0.91527000E+1,0.92670000E+0 - ,0.42417020E+3,0.276E+3,0.182E+3,0.91527000E+1,0.93830000E+0 - ,0.41489180E+3,0.276E+3,0.183E+3,0.91527000E+1,0.98200000E+0 - ,0.40623070E+3,0.276E+3,0.184E+3,0.91527000E+1,0.98150000E+0 - ,0.38304430E+3,0.276E+3,0.185E+3,0.91527000E+1,0.99540000E+0 - ,0.47684810E+3,0.276E+3,0.187E+3,0.91527000E+1,0.97050000E+0 - ,0.84851510E+3,0.276E+3,0.188E+3,0.91527000E+1,0.96620000E+0 - ,0.50977850E+3,0.276E+3,0.189E+3,0.91527000E+1,0.29070000E+1 - ,0.58092120E+3,0.276E+3,0.190E+3,0.91527000E+1,0.28844000E+1 - ,0.52282120E+3,0.276E+3,0.191E+3,0.91527000E+1,0.28738000E+1 - ,0.46679740E+3,0.276E+3,0.192E+3,0.91527000E+1,0.28878000E+1 - ,0.45036480E+3,0.276E+3,0.193E+3,0.91527000E+1,0.29095000E+1 - ,0.52648950E+3,0.276E+3,0.194E+3,0.91527000E+1,0.19209000E+1 - ,0.12510340E+3,0.276E+3,0.204E+3,0.91527000E+1,0.19697000E+1 - ,0.12418210E+3,0.276E+3,0.205E+3,0.91527000E+1,0.19441000E+1 - ,0.93473800E+2,0.276E+3,0.206E+3,0.91527000E+1,0.19985000E+1 - ,0.76136500E+2,0.276E+3,0.207E+3,0.91527000E+1,0.20143000E+1 - ,0.53564100E+2,0.276E+3,0.208E+3,0.91527000E+1,0.19887000E+1 - ,0.21793200E+3,0.276E+3,0.212E+3,0.91527000E+1,0.19496000E+1 - ,0.26304720E+3,0.276E+3,0.213E+3,0.91527000E+1,0.19311000E+1 - ,0.25582610E+3,0.276E+3,0.214E+3,0.91527000E+1,0.19435000E+1 - ,0.22587090E+3,0.276E+3,0.215E+3,0.91527000E+1,0.20102000E+1 - ,0.19308290E+3,0.276E+3,0.216E+3,0.91527000E+1,0.19903000E+1 - ,0.30676340E+3,0.276E+3,0.220E+3,0.91527000E+1,0.19349000E+1 - ,0.29784850E+3,0.276E+3,0.221E+3,0.91527000E+1,0.28999000E+1 - ,0.30180320E+3,0.276E+3,0.222E+3,0.91527000E+1,0.38675000E+1 - ,0.27640530E+3,0.276E+3,0.223E+3,0.91527000E+1,0.29110000E+1 - ,0.21249880E+3,0.276E+3,0.224E+3,0.91527000E+1,0.10619100E+2 - ,0.18396380E+3,0.276E+3,0.225E+3,0.91527000E+1,0.98849000E+1 - ,0.18034190E+3,0.276E+3,0.226E+3,0.91527000E+1,0.91376000E+1 - ,0.20743670E+3,0.276E+3,0.227E+3,0.91527000E+1,0.29263000E+1 - ,0.19424620E+3,0.276E+3,0.228E+3,0.91527000E+1,0.65458000E+1 - ,0.26882090E+3,0.276E+3,0.231E+3,0.91527000E+1,0.19315000E+1 - ,0.28515730E+3,0.276E+3,0.232E+3,0.91527000E+1,0.19447000E+1 - ,0.26525130E+3,0.276E+3,0.233E+3,0.91527000E+1,0.19793000E+1 - ,0.24932490E+3,0.276E+3,0.234E+3,0.91527000E+1,0.19812000E+1 - ,0.36858100E+3,0.276E+3,0.238E+3,0.91527000E+1,0.19143000E+1 - ,0.35932890E+3,0.276E+3,0.239E+3,0.91527000E+1,0.28903000E+1 - ,0.36388390E+3,0.276E+3,0.240E+3,0.91527000E+1,0.39106000E+1 - ,0.35200850E+3,0.276E+3,0.241E+3,0.91527000E+1,0.29225000E+1 - ,0.31525780E+3,0.276E+3,0.242E+3,0.91527000E+1,0.11055600E+2 - ,0.28115270E+3,0.276E+3,0.243E+3,0.91527000E+1,0.95402000E+1 - ,0.26675220E+3,0.276E+3,0.244E+3,0.91527000E+1,0.88895000E+1 - ,0.26904190E+3,0.276E+3,0.245E+3,0.91527000E+1,0.29696000E+1 - ,0.27993090E+3,0.276E+3,0.246E+3,0.91527000E+1,0.57095000E+1 - ,0.34865850E+3,0.276E+3,0.249E+3,0.91527000E+1,0.19378000E+1 - ,0.37851600E+3,0.276E+3,0.250E+3,0.91527000E+1,0.19505000E+1 - ,0.36077560E+3,0.276E+3,0.251E+3,0.91527000E+1,0.19523000E+1 - ,0.35056820E+3,0.276E+3,0.252E+3,0.91527000E+1,0.19639000E+1 - ,0.44786270E+3,0.276E+3,0.256E+3,0.91527000E+1,0.18467000E+1 - ,0.46673680E+3,0.276E+3,0.257E+3,0.91527000E+1,0.29175000E+1 - ,0.35044320E+3,0.276E+3,0.272E+3,0.91527000E+1,0.38840000E+1 - ,0.36470460E+3,0.276E+3,0.273E+3,0.91527000E+1,0.28988000E+1 - ,0.34272390E+3,0.276E+3,0.274E+3,0.91527000E+1,0.10915300E+2 - ,0.31423420E+3,0.276E+3,0.275E+3,0.91527000E+1,0.98054000E+1 - ,0.29783380E+3,0.276E+3,0.276E+3,0.91527000E+1,0.91527000E+1 - ,0.30229400E+2,0.277E+3,0.100E+1,0.29424000E+1,0.91180000E+0 - ,0.20760800E+2,0.277E+3,0.200E+1,0.29424000E+1,0.00000000E+0 - ,0.42636380E+3,0.277E+3,0.300E+1,0.29424000E+1,0.00000000E+0 - ,0.25474750E+3,0.277E+3,0.400E+1,0.29424000E+1,0.00000000E+0 - ,0.17635010E+3,0.277E+3,0.500E+1,0.29424000E+1,0.00000000E+0 - ,0.12210880E+3,0.277E+3,0.600E+1,0.29424000E+1,0.00000000E+0 - ,0.87190700E+2,0.277E+3,0.700E+1,0.29424000E+1,0.00000000E+0 - ,0.67091300E+2,0.277E+3,0.800E+1,0.29424000E+1,0.00000000E+0 - ,0.51585000E+2,0.277E+3,0.900E+1,0.29424000E+1,0.00000000E+0 - ,0.40184600E+2,0.277E+3,0.100E+2,0.29424000E+1,0.00000000E+0 - ,0.51143160E+3,0.277E+3,0.110E+2,0.29424000E+1,0.00000000E+0 - ,0.40339630E+3,0.277E+3,0.120E+2,0.29424000E+1,0.00000000E+0 - ,0.37653390E+3,0.277E+3,0.130E+2,0.29424000E+1,0.00000000E+0 - ,0.30209560E+3,0.277E+3,0.140E+2,0.29424000E+1,0.00000000E+0 - ,0.23974340E+3,0.277E+3,0.150E+2,0.29424000E+1,0.00000000E+0 - ,0.20158550E+3,0.277E+3,0.160E+2,0.29424000E+1,0.00000000E+0 - ,0.16687220E+3,0.277E+3,0.170E+2,0.29424000E+1,0.00000000E+0 - ,0.13823710E+3,0.277E+3,0.180E+2,0.29424000E+1,0.00000000E+0 - ,0.83884470E+3,0.277E+3,0.190E+2,0.29424000E+1,0.00000000E+0 - ,0.70306100E+3,0.277E+3,0.200E+2,0.29424000E+1,0.00000000E+0 - ,0.58340320E+3,0.277E+3,0.210E+2,0.29424000E+1,0.00000000E+0 - ,0.56663000E+3,0.277E+3,0.220E+2,0.29424000E+1,0.00000000E+0 - ,0.52055850E+3,0.277E+3,0.230E+2,0.29424000E+1,0.00000000E+0 - ,0.41171570E+3,0.277E+3,0.240E+2,0.29424000E+1,0.00000000E+0 - ,0.45035590E+3,0.277E+3,0.250E+2,0.29424000E+1,0.00000000E+0 - ,0.35513960E+3,0.277E+3,0.260E+2,0.29424000E+1,0.00000000E+0 - ,0.37753770E+3,0.277E+3,0.270E+2,0.29424000E+1,0.00000000E+0 - ,0.38750230E+3,0.277E+3,0.280E+2,0.29424000E+1,0.00000000E+0 - ,0.29855250E+3,0.277E+3,0.290E+2,0.29424000E+1,0.00000000E+0 - ,0.30844330E+3,0.277E+3,0.300E+2,0.29424000E+1,0.00000000E+0 - ,0.36354100E+3,0.277E+3,0.310E+2,0.29424000E+1,0.00000000E+0 - ,0.32481010E+3,0.277E+3,0.320E+2,0.29424000E+1,0.00000000E+0 - ,0.28090060E+3,0.277E+3,0.330E+2,0.29424000E+1,0.00000000E+0 - ,0.25453380E+3,0.277E+3,0.340E+2,0.29424000E+1,0.00000000E+0 - ,0.22513410E+3,0.277E+3,0.350E+2,0.29424000E+1,0.00000000E+0 - ,0.19784740E+3,0.277E+3,0.360E+2,0.29424000E+1,0.00000000E+0 - ,0.94312750E+3,0.277E+3,0.370E+2,0.29424000E+1,0.00000000E+0 - ,0.83825760E+3,0.277E+3,0.380E+2,0.29424000E+1,0.00000000E+0 - ,0.74070150E+3,0.277E+3,0.390E+2,0.29424000E+1,0.00000000E+0 - ,0.66984280E+3,0.277E+3,0.400E+2,0.29424000E+1,0.00000000E+0 - ,0.61369150E+3,0.277E+3,0.410E+2,0.29424000E+1,0.00000000E+0 - ,0.47850440E+3,0.277E+3,0.420E+2,0.29424000E+1,0.00000000E+0 - ,0.53185130E+3,0.277E+3,0.430E+2,0.29424000E+1,0.00000000E+0 - ,0.40961050E+3,0.277E+3,0.440E+2,0.29424000E+1,0.00000000E+0 - ,0.44656770E+3,0.277E+3,0.450E+2,0.29424000E+1,0.00000000E+0 - ,0.41538870E+3,0.277E+3,0.460E+2,0.29424000E+1,0.00000000E+0 - ,0.34736190E+3,0.277E+3,0.470E+2,0.29424000E+1,0.00000000E+0 - ,0.36754320E+3,0.277E+3,0.480E+2,0.29424000E+1,0.00000000E+0 - ,0.45659440E+3,0.277E+3,0.490E+2,0.29424000E+1,0.00000000E+0 - ,0.42612630E+3,0.277E+3,0.500E+2,0.29424000E+1,0.00000000E+0 - ,0.38393930E+3,0.277E+3,0.510E+2,0.29424000E+1,0.00000000E+0 - ,0.35889370E+3,0.277E+3,0.520E+2,0.29424000E+1,0.00000000E+0 - ,0.32731610E+3,0.277E+3,0.530E+2,0.29424000E+1,0.00000000E+0 - ,0.29686250E+3,0.277E+3,0.540E+2,0.29424000E+1,0.00000000E+0 - ,0.11506653E+4,0.277E+3,0.550E+2,0.29424000E+1,0.00000000E+0 - ,0.10673048E+4,0.277E+3,0.560E+2,0.29424000E+1,0.00000000E+0 - ,0.94534330E+3,0.277E+3,0.570E+2,0.29424000E+1,0.00000000E+0 - ,0.45335410E+3,0.277E+3,0.580E+2,0.29424000E+1,0.27991000E+1 - ,0.94886600E+3,0.277E+3,0.590E+2,0.29424000E+1,0.00000000E+0 - ,0.91214940E+3,0.277E+3,0.600E+2,0.29424000E+1,0.00000000E+0 - ,0.88952970E+3,0.277E+3,0.610E+2,0.29424000E+1,0.00000000E+0 - ,0.86867840E+3,0.277E+3,0.620E+2,0.29424000E+1,0.00000000E+0 - ,0.85019490E+3,0.277E+3,0.630E+2,0.29424000E+1,0.00000000E+0 - ,0.67650560E+3,0.277E+3,0.640E+2,0.29424000E+1,0.00000000E+0 - ,0.75286050E+3,0.277E+3,0.650E+2,0.29424000E+1,0.00000000E+0 - ,0.72736460E+3,0.277E+3,0.660E+2,0.29424000E+1,0.00000000E+0 - ,0.76817290E+3,0.277E+3,0.670E+2,0.29424000E+1,0.00000000E+0 - ,0.75193870E+3,0.277E+3,0.680E+2,0.29424000E+1,0.00000000E+0 - ,0.73739820E+3,0.277E+3,0.690E+2,0.29424000E+1,0.00000000E+0 - ,0.72836400E+3,0.277E+3,0.700E+2,0.29424000E+1,0.00000000E+0 - ,0.61861380E+3,0.277E+3,0.710E+2,0.29424000E+1,0.00000000E+0 - ,0.61342840E+3,0.277E+3,0.720E+2,0.29424000E+1,0.00000000E+0 - ,0.56363530E+3,0.277E+3,0.730E+2,0.29424000E+1,0.00000000E+0 - ,0.47969460E+3,0.277E+3,0.740E+2,0.29424000E+1,0.00000000E+0 - ,0.48887240E+3,0.277E+3,0.750E+2,0.29424000E+1,0.00000000E+0 - ,0.44589270E+3,0.277E+3,0.760E+2,0.29424000E+1,0.00000000E+0 - ,0.41058900E+3,0.277E+3,0.770E+2,0.29424000E+1,0.00000000E+0 - ,0.34385250E+3,0.277E+3,0.780E+2,0.29424000E+1,0.00000000E+0 - ,0.32228400E+3,0.277E+3,0.790E+2,0.29424000E+1,0.00000000E+0 - ,0.33178240E+3,0.277E+3,0.800E+2,0.29424000E+1,0.00000000E+0 - ,0.47174830E+3,0.277E+3,0.810E+2,0.29424000E+1,0.00000000E+0 - ,0.46398210E+3,0.277E+3,0.820E+2,0.29424000E+1,0.00000000E+0 - ,0.43022560E+3,0.277E+3,0.830E+2,0.29424000E+1,0.00000000E+0 - ,0.41274680E+3,0.277E+3,0.840E+2,0.29424000E+1,0.00000000E+0 - ,0.38386920E+3,0.277E+3,0.850E+2,0.29424000E+1,0.00000000E+0 - ,0.35453980E+3,0.277E+3,0.860E+2,0.29424000E+1,0.00000000E+0 - ,0.10936353E+4,0.277E+3,0.870E+2,0.29424000E+1,0.00000000E+0 - ,0.10604655E+4,0.277E+3,0.880E+2,0.29424000E+1,0.00000000E+0 - ,0.94439170E+3,0.277E+3,0.890E+2,0.29424000E+1,0.00000000E+0 - ,0.85775700E+3,0.277E+3,0.900E+2,0.29424000E+1,0.00000000E+0 - ,0.84861880E+3,0.277E+3,0.910E+2,0.29424000E+1,0.00000000E+0 - ,0.82201600E+3,0.277E+3,0.920E+2,0.29424000E+1,0.00000000E+0 - ,0.84127950E+3,0.277E+3,0.930E+2,0.29424000E+1,0.00000000E+0 - ,0.81549360E+3,0.277E+3,0.940E+2,0.29424000E+1,0.00000000E+0 - ,0.47710700E+2,0.277E+3,0.101E+3,0.29424000E+1,0.00000000E+0 - ,0.14877410E+3,0.277E+3,0.103E+3,0.29424000E+1,0.98650000E+0 - ,0.19095480E+3,0.277E+3,0.104E+3,0.29424000E+1,0.98080000E+0 - ,0.14941700E+3,0.277E+3,0.105E+3,0.29424000E+1,0.97060000E+0 - ,0.11467490E+3,0.277E+3,0.106E+3,0.29424000E+1,0.98680000E+0 - ,0.81468600E+2,0.277E+3,0.107E+3,0.29424000E+1,0.99440000E+0 - ,0.60474900E+2,0.277E+3,0.108E+3,0.29424000E+1,0.99250000E+0 - ,0.42633000E+2,0.277E+3,0.109E+3,0.29424000E+1,0.99820000E+0 - ,0.21706070E+3,0.277E+3,0.111E+3,0.29424000E+1,0.96840000E+0 - ,0.33478560E+3,0.277E+3,0.112E+3,0.29424000E+1,0.96280000E+0 - ,0.34247320E+3,0.277E+3,0.113E+3,0.29424000E+1,0.96480000E+0 - ,0.28013350E+3,0.277E+3,0.114E+3,0.29424000E+1,0.95070000E+0 - ,0.23294100E+3,0.277E+3,0.115E+3,0.29424000E+1,0.99470000E+0 - ,0.19936180E+3,0.277E+3,0.116E+3,0.29424000E+1,0.99480000E+0 - ,0.16514130E+3,0.277E+3,0.117E+3,0.29424000E+1,0.99720000E+0 - ,0.30413400E+3,0.277E+3,0.119E+3,0.29424000E+1,0.97670000E+0 - ,0.56534700E+3,0.277E+3,0.120E+3,0.29424000E+1,0.98310000E+0 - ,0.30720500E+3,0.277E+3,0.121E+3,0.29424000E+1,0.18627000E+1 - ,0.29699590E+3,0.277E+3,0.122E+3,0.29424000E+1,0.18299000E+1 - ,0.29107410E+3,0.277E+3,0.123E+3,0.29424000E+1,0.19138000E+1 - ,0.28800240E+3,0.277E+3,0.124E+3,0.29424000E+1,0.18269000E+1 - ,0.26680930E+3,0.277E+3,0.125E+3,0.29424000E+1,0.16406000E+1 - ,0.24770870E+3,0.277E+3,0.126E+3,0.29424000E+1,0.16483000E+1 - ,0.23646980E+3,0.277E+3,0.127E+3,0.29424000E+1,0.17149000E+1 - ,0.23106240E+3,0.277E+3,0.128E+3,0.29424000E+1,0.17937000E+1 - ,0.22706590E+3,0.277E+3,0.129E+3,0.29424000E+1,0.95760000E+0 - ,0.21517070E+3,0.277E+3,0.130E+3,0.29424000E+1,0.19419000E+1 - ,0.34264070E+3,0.277E+3,0.131E+3,0.29424000E+1,0.96010000E+0 - ,0.30498940E+3,0.277E+3,0.132E+3,0.29424000E+1,0.94340000E+0 - ,0.27641200E+3,0.277E+3,0.133E+3,0.29424000E+1,0.98890000E+0 - ,0.25462020E+3,0.277E+3,0.134E+3,0.29424000E+1,0.99010000E+0 - ,0.22659700E+3,0.277E+3,0.135E+3,0.29424000E+1,0.99740000E+0 - ,0.36441220E+3,0.277E+3,0.137E+3,0.29424000E+1,0.97380000E+0 - ,0.68823470E+3,0.277E+3,0.138E+3,0.29424000E+1,0.98010000E+0 - ,0.53570340E+3,0.277E+3,0.139E+3,0.29424000E+1,0.19153000E+1 - ,0.40665130E+3,0.277E+3,0.140E+3,0.29424000E+1,0.19355000E+1 - ,0.41063670E+3,0.277E+3,0.141E+3,0.29424000E+1,0.19545000E+1 - ,0.38441940E+3,0.277E+3,0.142E+3,0.29424000E+1,0.19420000E+1 - ,0.42730450E+3,0.277E+3,0.143E+3,0.29424000E+1,0.16682000E+1 - ,0.33787470E+3,0.277E+3,0.144E+3,0.29424000E+1,0.18584000E+1 - ,0.31668990E+3,0.277E+3,0.145E+3,0.29424000E+1,0.19003000E+1 - ,0.29482600E+3,0.277E+3,0.146E+3,0.29424000E+1,0.18630000E+1 - ,0.28494240E+3,0.277E+3,0.147E+3,0.29424000E+1,0.96790000E+0 - ,0.28309650E+3,0.277E+3,0.148E+3,0.29424000E+1,0.19539000E+1 - ,0.43680210E+3,0.277E+3,0.149E+3,0.29424000E+1,0.96330000E+0 - ,0.39922460E+3,0.277E+3,0.150E+3,0.29424000E+1,0.95140000E+0 - ,0.37689830E+3,0.277E+3,0.151E+3,0.29424000E+1,0.97490000E+0 - ,0.35878610E+3,0.277E+3,0.152E+3,0.29424000E+1,0.98110000E+0 - ,0.33031590E+3,0.277E+3,0.153E+3,0.29424000E+1,0.99680000E+0 - ,0.43396820E+3,0.277E+3,0.155E+3,0.29424000E+1,0.99090000E+0 - ,0.89082740E+3,0.277E+3,0.156E+3,0.29424000E+1,0.97970000E+0 - ,0.67744550E+3,0.277E+3,0.157E+3,0.29424000E+1,0.19373000E+1 - ,0.44003130E+3,0.277E+3,0.159E+3,0.29424000E+1,0.29425000E+1 - ,0.43099700E+3,0.277E+3,0.160E+3,0.29424000E+1,0.29455000E+1 - ,0.41762690E+3,0.277E+3,0.161E+3,0.29424000E+1,0.29413000E+1 - ,0.41901960E+3,0.277E+3,0.162E+3,0.29424000E+1,0.29300000E+1 - ,0.40212590E+3,0.277E+3,0.163E+3,0.29424000E+1,0.18286000E+1 - ,0.42122030E+3,0.277E+3,0.164E+3,0.29424000E+1,0.28732000E+1 - ,0.39630640E+3,0.277E+3,0.165E+3,0.29424000E+1,0.29086000E+1 - ,0.40219400E+3,0.277E+3,0.166E+3,0.29424000E+1,0.28965000E+1 - ,0.37665190E+3,0.277E+3,0.167E+3,0.29424000E+1,0.29242000E+1 - ,0.36611320E+3,0.277E+3,0.168E+3,0.29424000E+1,0.29282000E+1 - ,0.36356690E+3,0.277E+3,0.169E+3,0.29424000E+1,0.29246000E+1 - ,0.38089510E+3,0.277E+3,0.170E+3,0.29424000E+1,0.28482000E+1 - ,0.35163250E+3,0.277E+3,0.171E+3,0.29424000E+1,0.29219000E+1 - ,0.46799190E+3,0.277E+3,0.172E+3,0.29424000E+1,0.19254000E+1 - ,0.43730900E+3,0.277E+3,0.173E+3,0.29424000E+1,0.19459000E+1 - ,0.40191040E+3,0.277E+3,0.174E+3,0.29424000E+1,0.19292000E+1 - ,0.40442320E+3,0.277E+3,0.175E+3,0.29424000E+1,0.18104000E+1 - ,0.35970450E+3,0.277E+3,0.176E+3,0.29424000E+1,0.18858000E+1 - ,0.33957300E+3,0.277E+3,0.177E+3,0.29424000E+1,0.18648000E+1 - ,0.32507870E+3,0.277E+3,0.178E+3,0.29424000E+1,0.19188000E+1 - ,0.31108440E+3,0.277E+3,0.179E+3,0.29424000E+1,0.98460000E+0 - ,0.30206450E+3,0.277E+3,0.180E+3,0.29424000E+1,0.19896000E+1 - ,0.47125110E+3,0.277E+3,0.181E+3,0.29424000E+1,0.92670000E+0 - ,0.43367490E+3,0.277E+3,0.182E+3,0.29424000E+1,0.93830000E+0 - ,0.42287330E+3,0.277E+3,0.183E+3,0.29424000E+1,0.98200000E+0 - ,0.41315870E+3,0.277E+3,0.184E+3,0.29424000E+1,0.98150000E+0 - ,0.38847900E+3,0.277E+3,0.185E+3,0.29424000E+1,0.99540000E+0 - ,0.48893950E+3,0.277E+3,0.187E+3,0.29424000E+1,0.97050000E+0 - ,0.89067630E+3,0.277E+3,0.188E+3,0.29424000E+1,0.96620000E+0 - ,0.52029480E+3,0.277E+3,0.189E+3,0.29424000E+1,0.29070000E+1 - ,0.59599730E+3,0.277E+3,0.190E+3,0.29424000E+1,0.28844000E+1 - ,0.53552370E+3,0.277E+3,0.191E+3,0.29424000E+1,0.28738000E+1 - ,0.47621600E+3,0.277E+3,0.192E+3,0.29424000E+1,0.28878000E+1 - ,0.45907020E+3,0.277E+3,0.193E+3,0.29424000E+1,0.29095000E+1 - ,0.54251670E+3,0.277E+3,0.194E+3,0.29424000E+1,0.19209000E+1 - ,0.12750670E+3,0.277E+3,0.204E+3,0.29424000E+1,0.19697000E+1 - ,0.12636580E+3,0.277E+3,0.205E+3,0.29424000E+1,0.19441000E+1 - ,0.94442200E+2,0.277E+3,0.206E+3,0.29424000E+1,0.19985000E+1 - ,0.76693600E+2,0.277E+3,0.207E+3,0.29424000E+1,0.20143000E+1 - ,0.53713500E+2,0.277E+3,0.208E+3,0.29424000E+1,0.19887000E+1 - ,0.22345060E+3,0.277E+3,0.212E+3,0.29424000E+1,0.19496000E+1 - ,0.26992960E+3,0.277E+3,0.213E+3,0.29424000E+1,0.19311000E+1 - ,0.26131790E+3,0.277E+3,0.214E+3,0.29424000E+1,0.19435000E+1 - ,0.22965740E+3,0.277E+3,0.215E+3,0.29424000E+1,0.20102000E+1 - ,0.19542290E+3,0.277E+3,0.216E+3,0.29424000E+1,0.19903000E+1 - ,0.31465860E+3,0.277E+3,0.220E+3,0.29424000E+1,0.19349000E+1 - ,0.30440560E+3,0.277E+3,0.221E+3,0.29424000E+1,0.28999000E+1 - ,0.30837100E+3,0.277E+3,0.222E+3,0.29424000E+1,0.38675000E+1 - ,0.28252780E+3,0.277E+3,0.223E+3,0.29424000E+1,0.29110000E+1 - ,0.21607310E+3,0.277E+3,0.224E+3,0.29424000E+1,0.10619100E+2 - ,0.18647130E+3,0.277E+3,0.225E+3,0.29424000E+1,0.98849000E+1 - ,0.18288010E+3,0.277E+3,0.226E+3,0.29424000E+1,0.91376000E+1 - ,0.21145410E+3,0.277E+3,0.227E+3,0.29424000E+1,0.29263000E+1 - ,0.19770250E+3,0.277E+3,0.228E+3,0.29424000E+1,0.65458000E+1 - ,0.27493230E+3,0.277E+3,0.231E+3,0.29424000E+1,0.19315000E+1 - ,0.29109370E+3,0.277E+3,0.232E+3,0.29424000E+1,0.19447000E+1 - ,0.26957470E+3,0.277E+3,0.233E+3,0.29424000E+1,0.19793000E+1 - ,0.25271240E+3,0.277E+3,0.234E+3,0.29424000E+1,0.19812000E+1 - ,0.37790170E+3,0.277E+3,0.238E+3,0.29424000E+1,0.19143000E+1 - ,0.36667450E+3,0.277E+3,0.239E+3,0.29424000E+1,0.28903000E+1 - ,0.37083430E+3,0.277E+3,0.240E+3,0.29424000E+1,0.39106000E+1 - ,0.35892720E+3,0.277E+3,0.241E+3,0.29424000E+1,0.29225000E+1 - ,0.32031090E+3,0.277E+3,0.242E+3,0.29424000E+1,0.11055600E+2 - ,0.28489430E+3,0.277E+3,0.243E+3,0.29424000E+1,0.95402000E+1 - ,0.27005380E+3,0.277E+3,0.244E+3,0.29424000E+1,0.88895000E+1 - ,0.27328420E+3,0.277E+3,0.245E+3,0.29424000E+1,0.29696000E+1 - ,0.28460940E+3,0.277E+3,0.246E+3,0.29424000E+1,0.57095000E+1 - ,0.35643230E+3,0.277E+3,0.249E+3,0.29424000E+1,0.19378000E+1 - ,0.38687350E+3,0.277E+3,0.250E+3,0.29424000E+1,0.19505000E+1 - ,0.36731080E+3,0.277E+3,0.251E+3,0.29424000E+1,0.19523000E+1 - ,0.35616120E+3,0.277E+3,0.252E+3,0.29424000E+1,0.19639000E+1 - ,0.45858100E+3,0.277E+3,0.256E+3,0.29424000E+1,0.18467000E+1 - ,0.47669270E+3,0.277E+3,0.257E+3,0.29424000E+1,0.29175000E+1 - ,0.35651190E+3,0.277E+3,0.272E+3,0.29424000E+1,0.38840000E+1 - ,0.37170810E+3,0.277E+3,0.273E+3,0.29424000E+1,0.28988000E+1 - ,0.34812240E+3,0.277E+3,0.274E+3,0.29424000E+1,0.10915300E+2 - ,0.31841110E+3,0.277E+3,0.275E+3,0.29424000E+1,0.98054000E+1 - ,0.30121160E+3,0.277E+3,0.276E+3,0.29424000E+1,0.91527000E+1 - ,0.30552580E+3,0.277E+3,0.277E+3,0.29424000E+1,0.29424000E+1 - ,0.31736800E+2,0.278E+3,0.100E+1,0.66669000E+1,0.91180000E+0 - ,0.21706400E+2,0.278E+3,0.200E+1,0.66669000E+1,0.00000000E+0 - ,0.44817370E+3,0.278E+3,0.300E+1,0.66669000E+1,0.00000000E+0 - ,0.26864910E+3,0.278E+3,0.400E+1,0.66669000E+1,0.00000000E+0 - ,0.18571950E+3,0.278E+3,0.500E+1,0.66669000E+1,0.00000000E+0 - ,0.12832810E+3,0.278E+3,0.600E+1,0.66669000E+1,0.00000000E+0 - ,0.91444100E+2,0.278E+3,0.700E+1,0.66669000E+1,0.00000000E+0 - ,0.70247200E+2,0.278E+3,0.800E+1,0.66669000E+1,0.00000000E+0 - ,0.53929300E+2,0.278E+3,0.900E+1,0.66669000E+1,0.00000000E+0 - ,0.41957400E+2,0.278E+3,0.100E+2,0.66669000E+1,0.00000000E+0 - ,0.53764280E+3,0.278E+3,0.110E+2,0.66669000E+1,0.00000000E+0 - ,0.42531660E+3,0.278E+3,0.120E+2,0.66669000E+1,0.00000000E+0 - ,0.39691230E+3,0.278E+3,0.130E+2,0.66669000E+1,0.00000000E+0 - ,0.31822850E+3,0.278E+3,0.140E+2,0.66669000E+1,0.00000000E+0 - ,0.25221940E+3,0.278E+3,0.150E+2,0.66669000E+1,0.00000000E+0 - ,0.21181210E+3,0.278E+3,0.160E+2,0.66669000E+1,0.00000000E+0 - ,0.17510170E+3,0.278E+3,0.170E+2,0.66669000E+1,0.00000000E+0 - ,0.14486250E+3,0.278E+3,0.180E+2,0.66669000E+1,0.00000000E+0 - ,0.87976340E+3,0.278E+3,0.190E+2,0.66669000E+1,0.00000000E+0 - ,0.74019810E+3,0.278E+3,0.200E+2,0.66669000E+1,0.00000000E+0 - ,0.61451280E+3,0.278E+3,0.210E+2,0.66669000E+1,0.00000000E+0 - ,0.59680090E+3,0.278E+3,0.220E+2,0.66669000E+1,0.00000000E+0 - ,0.54828530E+3,0.278E+3,0.230E+2,0.66669000E+1,0.00000000E+0 - ,0.43331070E+3,0.278E+3,0.240E+2,0.66669000E+1,0.00000000E+0 - ,0.47433180E+3,0.278E+3,0.250E+2,0.66669000E+1,0.00000000E+0 - ,0.37375740E+3,0.278E+3,0.260E+2,0.66669000E+1,0.00000000E+0 - ,0.39765430E+3,0.278E+3,0.270E+2,0.66669000E+1,0.00000000E+0 - ,0.40819710E+3,0.278E+3,0.280E+2,0.66669000E+1,0.00000000E+0 - ,0.31418780E+3,0.278E+3,0.290E+2,0.66669000E+1,0.00000000E+0 - ,0.32482660E+3,0.278E+3,0.300E+2,0.66669000E+1,0.00000000E+0 - ,0.38293500E+3,0.278E+3,0.310E+2,0.66669000E+1,0.00000000E+0 - ,0.34202100E+3,0.278E+3,0.320E+2,0.66669000E+1,0.00000000E+0 - ,0.29551180E+3,0.278E+3,0.330E+2,0.66669000E+1,0.00000000E+0 - ,0.26753780E+3,0.278E+3,0.340E+2,0.66669000E+1,0.00000000E+0 - ,0.23639130E+3,0.278E+3,0.350E+2,0.66669000E+1,0.00000000E+0 - ,0.20751570E+3,0.278E+3,0.360E+2,0.66669000E+1,0.00000000E+0 - ,0.98897460E+3,0.278E+3,0.370E+2,0.66669000E+1,0.00000000E+0 - ,0.88212520E+3,0.278E+3,0.380E+2,0.66669000E+1,0.00000000E+0 - ,0.77987150E+3,0.278E+3,0.390E+2,0.66669000E+1,0.00000000E+0 - ,0.70532520E+3,0.278E+3,0.400E+2,0.66669000E+1,0.00000000E+0 - ,0.64612000E+3,0.278E+3,0.410E+2,0.66669000E+1,0.00000000E+0 - ,0.50347710E+3,0.278E+3,0.420E+2,0.66669000E+1,0.00000000E+0 - ,0.55975880E+3,0.278E+3,0.430E+2,0.66669000E+1,0.00000000E+0 - ,0.43081480E+3,0.278E+3,0.440E+2,0.66669000E+1,0.00000000E+0 - ,0.46996810E+3,0.278E+3,0.450E+2,0.66669000E+1,0.00000000E+0 - ,0.43711170E+3,0.278E+3,0.460E+2,0.66669000E+1,0.00000000E+0 - ,0.36518920E+3,0.278E+3,0.470E+2,0.66669000E+1,0.00000000E+0 - ,0.38669930E+3,0.278E+3,0.480E+2,0.66669000E+1,0.00000000E+0 - ,0.48058480E+3,0.278E+3,0.490E+2,0.66669000E+1,0.00000000E+0 - ,0.44855300E+3,0.278E+3,0.500E+2,0.66669000E+1,0.00000000E+0 - ,0.40393700E+3,0.278E+3,0.510E+2,0.66669000E+1,0.00000000E+0 - ,0.37737610E+3,0.278E+3,0.520E+2,0.66669000E+1,0.00000000E+0 - ,0.34391650E+3,0.278E+3,0.530E+2,0.66669000E+1,0.00000000E+0 - ,0.31165760E+3,0.278E+3,0.540E+2,0.66669000E+1,0.00000000E+0 - ,0.12060907E+4,0.278E+3,0.550E+2,0.66669000E+1,0.00000000E+0 - ,0.11224006E+4,0.278E+3,0.560E+2,0.66669000E+1,0.00000000E+0 - ,0.99484110E+3,0.278E+3,0.570E+2,0.66669000E+1,0.00000000E+0 - ,0.47685250E+3,0.278E+3,0.580E+2,0.66669000E+1,0.27991000E+1 - ,0.99799760E+3,0.278E+3,0.590E+2,0.66669000E+1,0.00000000E+0 - ,0.95958830E+3,0.278E+3,0.600E+2,0.66669000E+1,0.00000000E+0 - ,0.93585100E+3,0.278E+3,0.610E+2,0.66669000E+1,0.00000000E+0 - ,0.91396730E+3,0.278E+3,0.620E+2,0.66669000E+1,0.00000000E+0 - ,0.89457000E+3,0.278E+3,0.630E+2,0.66669000E+1,0.00000000E+0 - ,0.71180730E+3,0.278E+3,0.640E+2,0.66669000E+1,0.00000000E+0 - ,0.79087860E+3,0.278E+3,0.650E+2,0.66669000E+1,0.00000000E+0 - ,0.76413790E+3,0.278E+3,0.660E+2,0.66669000E+1,0.00000000E+0 - ,0.80848440E+3,0.278E+3,0.670E+2,0.66669000E+1,0.00000000E+0 - ,0.79144150E+3,0.278E+3,0.680E+2,0.66669000E+1,0.00000000E+0 - ,0.77617700E+3,0.278E+3,0.690E+2,0.66669000E+1,0.00000000E+0 - ,0.76668210E+3,0.278E+3,0.700E+2,0.66669000E+1,0.00000000E+0 - ,0.65113390E+3,0.278E+3,0.710E+2,0.66669000E+1,0.00000000E+0 - ,0.64597680E+3,0.278E+3,0.720E+2,0.66669000E+1,0.00000000E+0 - ,0.59345200E+3,0.278E+3,0.730E+2,0.66669000E+1,0.00000000E+0 - ,0.50469500E+3,0.278E+3,0.740E+2,0.66669000E+1,0.00000000E+0 - ,0.51441860E+3,0.278E+3,0.750E+2,0.66669000E+1,0.00000000E+0 - ,0.46906170E+3,0.278E+3,0.760E+2,0.66669000E+1,0.00000000E+0 - ,0.43179110E+3,0.278E+3,0.770E+2,0.66669000E+1,0.00000000E+0 - ,0.36131080E+3,0.278E+3,0.780E+2,0.66669000E+1,0.00000000E+0 - ,0.33854780E+3,0.278E+3,0.790E+2,0.66669000E+1,0.00000000E+0 - ,0.34860350E+3,0.278E+3,0.800E+2,0.66669000E+1,0.00000000E+0 - ,0.49610630E+3,0.278E+3,0.810E+2,0.66669000E+1,0.00000000E+0 - ,0.48812730E+3,0.278E+3,0.820E+2,0.66669000E+1,0.00000000E+0 - ,0.45249450E+3,0.278E+3,0.830E+2,0.66669000E+1,0.00000000E+0 - ,0.43395750E+3,0.278E+3,0.840E+2,0.66669000E+1,0.00000000E+0 - ,0.40335980E+3,0.278E+3,0.850E+2,0.66669000E+1,0.00000000E+0 - ,0.37228610E+3,0.278E+3,0.860E+2,0.66669000E+1,0.00000000E+0 - ,0.11471809E+4,0.278E+3,0.870E+2,0.66669000E+1,0.00000000E+0 - ,0.11154572E+4,0.278E+3,0.880E+2,0.66669000E+1,0.00000000E+0 - ,0.99404090E+3,0.278E+3,0.890E+2,0.66669000E+1,0.00000000E+0 - ,0.90293930E+3,0.278E+3,0.900E+2,0.66669000E+1,0.00000000E+0 - ,0.89295040E+3,0.278E+3,0.910E+2,0.66669000E+1,0.00000000E+0 - ,0.86495490E+3,0.278E+3,0.920E+2,0.66669000E+1,0.00000000E+0 - ,0.88511780E+3,0.278E+3,0.930E+2,0.66669000E+1,0.00000000E+0 - ,0.85805490E+3,0.278E+3,0.940E+2,0.66669000E+1,0.00000000E+0 - ,0.50189900E+2,0.278E+3,0.101E+3,0.66669000E+1,0.00000000E+0 - ,0.15683270E+3,0.278E+3,0.103E+3,0.66669000E+1,0.98650000E+0 - ,0.20116870E+3,0.278E+3,0.104E+3,0.66669000E+1,0.98080000E+0 - ,0.15724660E+3,0.278E+3,0.105E+3,0.66669000E+1,0.97060000E+0 - ,0.12047330E+3,0.278E+3,0.106E+3,0.66669000E+1,0.98680000E+0 - ,0.85411300E+2,0.278E+3,0.107E+3,0.66669000E+1,0.99440000E+0 - ,0.63280300E+2,0.278E+3,0.108E+3,0.66669000E+1,0.99250000E+0 - ,0.44500400E+2,0.278E+3,0.109E+3,0.66669000E+1,0.99820000E+0 - ,0.22873580E+3,0.278E+3,0.111E+3,0.66669000E+1,0.96840000E+0 - ,0.35278900E+3,0.278E+3,0.112E+3,0.66669000E+1,0.96280000E+0 - ,0.36093540E+3,0.278E+3,0.113E+3,0.66669000E+1,0.96480000E+0 - ,0.29500710E+3,0.278E+3,0.114E+3,0.66669000E+1,0.95070000E+0 - ,0.24503090E+3,0.278E+3,0.115E+3,0.66669000E+1,0.99470000E+0 - ,0.20947030E+3,0.278E+3,0.116E+3,0.66669000E+1,0.99480000E+0 - ,0.17328290E+3,0.278E+3,0.117E+3,0.66669000E+1,0.99720000E+0 - ,0.31991700E+3,0.278E+3,0.119E+3,0.66669000E+1,0.97670000E+0 - ,0.59442400E+3,0.278E+3,0.120E+3,0.66669000E+1,0.98310000E+0 - ,0.32334130E+3,0.278E+3,0.121E+3,0.66669000E+1,0.18627000E+1 - ,0.31251320E+3,0.278E+3,0.122E+3,0.66669000E+1,0.18299000E+1 - ,0.30627330E+3,0.278E+3,0.123E+3,0.66669000E+1,0.19138000E+1 - ,0.30303740E+3,0.278E+3,0.124E+3,0.66669000E+1,0.18269000E+1 - ,0.28075180E+3,0.278E+3,0.125E+3,0.66669000E+1,0.16406000E+1 - ,0.26058650E+3,0.278E+3,0.126E+3,0.66669000E+1,0.16483000E+1 - ,0.24872640E+3,0.278E+3,0.127E+3,0.66669000E+1,0.17149000E+1 - ,0.24304070E+3,0.278E+3,0.128E+3,0.66669000E+1,0.17937000E+1 - ,0.23886500E+3,0.278E+3,0.129E+3,0.66669000E+1,0.95760000E+0 - ,0.22630430E+3,0.278E+3,0.130E+3,0.66669000E+1,0.19419000E+1 - ,0.36087970E+3,0.278E+3,0.131E+3,0.66669000E+1,0.96010000E+0 - ,0.32106640E+3,0.278E+3,0.132E+3,0.66669000E+1,0.94340000E+0 - ,0.29076020E+3,0.278E+3,0.133E+3,0.66669000E+1,0.98890000E+0 - ,0.26762610E+3,0.278E+3,0.134E+3,0.66669000E+1,0.99010000E+0 - ,0.23793600E+3,0.278E+3,0.135E+3,0.66669000E+1,0.99740000E+0 - ,0.38318340E+3,0.278E+3,0.137E+3,0.66669000E+1,0.97380000E+0 - ,0.72324770E+3,0.278E+3,0.138E+3,0.66669000E+1,0.98010000E+0 - ,0.56337460E+3,0.278E+3,0.139E+3,0.66669000E+1,0.19153000E+1 - ,0.42778570E+3,0.278E+3,0.140E+3,0.66669000E+1,0.19355000E+1 - ,0.43199420E+3,0.278E+3,0.141E+3,0.66669000E+1,0.19545000E+1 - ,0.40427790E+3,0.278E+3,0.142E+3,0.66669000E+1,0.19420000E+1 - ,0.44929790E+3,0.278E+3,0.143E+3,0.66669000E+1,0.16682000E+1 - ,0.35522280E+3,0.278E+3,0.144E+3,0.66669000E+1,0.18584000E+1 - ,0.33286530E+3,0.278E+3,0.145E+3,0.66669000E+1,0.19003000E+1 - ,0.30980620E+3,0.278E+3,0.146E+3,0.66669000E+1,0.18630000E+1 - ,0.29943630E+3,0.278E+3,0.147E+3,0.66669000E+1,0.96790000E+0 - ,0.29752810E+3,0.278E+3,0.148E+3,0.66669000E+1,0.19539000E+1 - ,0.45973620E+3,0.278E+3,0.149E+3,0.66669000E+1,0.96330000E+0 - ,0.42013030E+3,0.278E+3,0.150E+3,0.66669000E+1,0.95140000E+0 - ,0.39648380E+3,0.278E+3,0.151E+3,0.66669000E+1,0.97490000E+0 - ,0.37725130E+3,0.278E+3,0.152E+3,0.66669000E+1,0.98110000E+0 - ,0.34707680E+3,0.278E+3,0.153E+3,0.66669000E+1,0.99680000E+0 - ,0.45631660E+3,0.278E+3,0.155E+3,0.66669000E+1,0.99090000E+0 - ,0.93534640E+3,0.278E+3,0.156E+3,0.66669000E+1,0.97970000E+0 - ,0.71222580E+3,0.278E+3,0.157E+3,0.66669000E+1,0.19373000E+1 - ,0.46281270E+3,0.278E+3,0.159E+3,0.66669000E+1,0.29425000E+1 - ,0.45330770E+3,0.278E+3,0.160E+3,0.66669000E+1,0.29455000E+1 - ,0.43922170E+3,0.278E+3,0.161E+3,0.66669000E+1,0.29413000E+1 - ,0.44070090E+3,0.278E+3,0.162E+3,0.66669000E+1,0.29300000E+1 - ,0.42296520E+3,0.278E+3,0.163E+3,0.66669000E+1,0.18286000E+1 - ,0.44307970E+3,0.278E+3,0.164E+3,0.66669000E+1,0.28732000E+1 - ,0.41683270E+3,0.278E+3,0.165E+3,0.66669000E+1,0.29086000E+1 - ,0.42302650E+3,0.278E+3,0.166E+3,0.66669000E+1,0.28965000E+1 - ,0.39614680E+3,0.278E+3,0.167E+3,0.66669000E+1,0.29242000E+1 - ,0.38505430E+3,0.278E+3,0.168E+3,0.66669000E+1,0.29282000E+1 - ,0.38239220E+3,0.278E+3,0.169E+3,0.66669000E+1,0.29246000E+1 - ,0.40073810E+3,0.278E+3,0.170E+3,0.66669000E+1,0.28482000E+1 - ,0.36983970E+3,0.278E+3,0.171E+3,0.66669000E+1,0.29219000E+1 - ,0.49231890E+3,0.278E+3,0.172E+3,0.66669000E+1,0.19254000E+1 - ,0.45993990E+3,0.278E+3,0.173E+3,0.66669000E+1,0.19459000E+1 - ,0.42259020E+3,0.278E+3,0.174E+3,0.66669000E+1,0.19292000E+1 - ,0.42529100E+3,0.278E+3,0.175E+3,0.66669000E+1,0.18104000E+1 - ,0.37803640E+3,0.278E+3,0.176E+3,0.66669000E+1,0.18858000E+1 - ,0.35676720E+3,0.278E+3,0.177E+3,0.66669000E+1,0.18648000E+1 - ,0.34146440E+3,0.278E+3,0.178E+3,0.66669000E+1,0.19188000E+1 - ,0.32670140E+3,0.278E+3,0.179E+3,0.66669000E+1,0.98460000E+0 - ,0.31719220E+3,0.278E+3,0.180E+3,0.66669000E+1,0.19896000E+1 - ,0.49566950E+3,0.278E+3,0.181E+3,0.66669000E+1,0.92670000E+0 - ,0.45614500E+3,0.278E+3,0.182E+3,0.66669000E+1,0.93830000E+0 - ,0.44471840E+3,0.278E+3,0.183E+3,0.66669000E+1,0.98200000E+0 - ,0.43437700E+3,0.278E+3,0.184E+3,0.66669000E+1,0.98150000E+0 - ,0.40821270E+3,0.278E+3,0.185E+3,0.66669000E+1,0.99540000E+0 - ,0.51413610E+3,0.278E+3,0.187E+3,0.66669000E+1,0.97050000E+0 - ,0.93570360E+3,0.278E+3,0.188E+3,0.66669000E+1,0.96620000E+0 - ,0.54728610E+3,0.278E+3,0.189E+3,0.66669000E+1,0.29070000E+1 - ,0.62674370E+3,0.278E+3,0.190E+3,0.66669000E+1,0.28844000E+1 - ,0.56283810E+3,0.278E+3,0.191E+3,0.66669000E+1,0.28738000E+1 - ,0.50066010E+3,0.278E+3,0.192E+3,0.66669000E+1,0.28878000E+1 - ,0.48260870E+3,0.278E+3,0.193E+3,0.66669000E+1,0.29095000E+1 - ,0.57030020E+3,0.278E+3,0.194E+3,0.66669000E+1,0.19209000E+1 - ,0.13424720E+3,0.278E+3,0.204E+3,0.66669000E+1,0.19697000E+1 - ,0.13288680E+3,0.278E+3,0.205E+3,0.66669000E+1,0.19441000E+1 - ,0.99142600E+2,0.278E+3,0.206E+3,0.66669000E+1,0.19985000E+1 - ,0.80387800E+2,0.278E+3,0.207E+3,0.66669000E+1,0.20143000E+1 - ,0.56164700E+2,0.278E+3,0.208E+3,0.66669000E+1,0.19887000E+1 - ,0.23546090E+3,0.278E+3,0.212E+3,0.66669000E+1,0.19496000E+1 - ,0.28433280E+3,0.278E+3,0.213E+3,0.66669000E+1,0.19311000E+1 - ,0.27514210E+3,0.278E+3,0.214E+3,0.66669000E+1,0.19435000E+1 - ,0.24157090E+3,0.278E+3,0.215E+3,0.66669000E+1,0.20102000E+1 - ,0.20531920E+3,0.278E+3,0.216E+3,0.66669000E+1,0.19903000E+1 - ,0.33124320E+3,0.278E+3,0.220E+3,0.66669000E+1,0.19349000E+1 - ,0.32036790E+3,0.278E+3,0.221E+3,0.66669000E+1,0.28999000E+1 - ,0.32452330E+3,0.278E+3,0.222E+3,0.66669000E+1,0.38675000E+1 - ,0.29723410E+3,0.278E+3,0.223E+3,0.66669000E+1,0.29110000E+1 - ,0.22702370E+3,0.278E+3,0.224E+3,0.66669000E+1,0.10619100E+2 - ,0.19579190E+3,0.278E+3,0.225E+3,0.66669000E+1,0.98849000E+1 - ,0.19203650E+3,0.278E+3,0.226E+3,0.66669000E+1,0.91376000E+1 - ,0.22228680E+3,0.278E+3,0.227E+3,0.66669000E+1,0.29263000E+1 - ,0.20779350E+3,0.278E+3,0.228E+3,0.66669000E+1,0.65458000E+1 - ,0.28939310E+3,0.278E+3,0.231E+3,0.66669000E+1,0.19315000E+1 - ,0.30638780E+3,0.278E+3,0.232E+3,0.66669000E+1,0.19447000E+1 - ,0.28353080E+3,0.278E+3,0.233E+3,0.66669000E+1,0.19793000E+1 - ,0.26560990E+3,0.278E+3,0.234E+3,0.66669000E+1,0.19812000E+1 - ,0.39765110E+3,0.278E+3,0.238E+3,0.66669000E+1,0.19143000E+1 - ,0.38577200E+3,0.278E+3,0.239E+3,0.66669000E+1,0.28903000E+1 - ,0.39008630E+3,0.278E+3,0.240E+3,0.66669000E+1,0.39106000E+1 - ,0.37742800E+3,0.278E+3,0.241E+3,0.66669000E+1,0.29225000E+1 - ,0.33658580E+3,0.278E+3,0.242E+3,0.66669000E+1,0.11055600E+2 - ,0.29917850E+3,0.278E+3,0.243E+3,0.66669000E+1,0.95402000E+1 - ,0.28351650E+3,0.278E+3,0.244E+3,0.66669000E+1,0.88895000E+1 - ,0.28700770E+3,0.278E+3,0.245E+3,0.66669000E+1,0.29696000E+1 - ,0.29901090E+3,0.278E+3,0.246E+3,0.66669000E+1,0.57095000E+1 - ,0.37493950E+3,0.278E+3,0.249E+3,0.66669000E+1,0.19378000E+1 - ,0.40708260E+3,0.278E+3,0.250E+3,0.66669000E+1,0.19505000E+1 - ,0.38634370E+3,0.278E+3,0.251E+3,0.66669000E+1,0.19523000E+1 - ,0.37446930E+3,0.278E+3,0.252E+3,0.66669000E+1,0.19639000E+1 - ,0.48236480E+3,0.278E+3,0.256E+3,0.66669000E+1,0.18467000E+1 - ,0.50153880E+3,0.278E+3,0.257E+3,0.66669000E+1,0.29175000E+1 - ,0.37491100E+3,0.278E+3,0.272E+3,0.66669000E+1,0.38840000E+1 - ,0.39079260E+3,0.278E+3,0.273E+3,0.66669000E+1,0.28988000E+1 - ,0.36580820E+3,0.278E+3,0.274E+3,0.66669000E+1,0.10915300E+2 - ,0.33438680E+3,0.278E+3,0.275E+3,0.66669000E+1,0.98054000E+1 - ,0.31617560E+3,0.278E+3,0.276E+3,0.66669000E+1,0.91527000E+1 - ,0.32076260E+3,0.278E+3,0.277E+3,0.66669000E+1,0.29424000E+1 - ,0.33687270E+3,0.278E+3,0.278E+3,0.66669000E+1,0.66669000E+1 - ,0.37640700E+2,0.281E+3,0.100E+1,0.19302000E+1,0.91180000E+0 - ,0.25087500E+2,0.281E+3,0.200E+1,0.19302000E+1,0.00000000E+0 - ,0.58487960E+3,0.281E+3,0.300E+1,0.19302000E+1,0.00000000E+0 - ,0.33672920E+3,0.281E+3,0.400E+1,0.19302000E+1,0.00000000E+0 - ,0.22693930E+3,0.281E+3,0.500E+1,0.19302000E+1,0.00000000E+0 - ,0.15370200E+3,0.281E+3,0.600E+1,0.19302000E+1,0.00000000E+0 - ,0.10786020E+3,0.281E+3,0.700E+1,0.19302000E+1,0.00000000E+0 - ,0.81954700E+2,0.281E+3,0.800E+1,0.19302000E+1,0.00000000E+0 - ,0.62331700E+2,0.281E+3,0.900E+1,0.19302000E+1,0.00000000E+0 - ,0.48136800E+2,0.281E+3,0.100E+2,0.19302000E+1,0.00000000E+0 - ,0.69957010E+3,0.281E+3,0.110E+2,0.19302000E+1,0.00000000E+0 - ,0.53690060E+3,0.281E+3,0.120E+2,0.19302000E+1,0.00000000E+0 - ,0.49477230E+3,0.281E+3,0.130E+2,0.19302000E+1,0.00000000E+0 - ,0.38992290E+3,0.281E+3,0.140E+2,0.19302000E+1,0.00000000E+0 - ,0.30437830E+3,0.281E+3,0.150E+2,0.19302000E+1,0.00000000E+0 - ,0.25298030E+3,0.281E+3,0.160E+2,0.19302000E+1,0.00000000E+0 - ,0.20704280E+3,0.281E+3,0.170E+2,0.19302000E+1,0.00000000E+0 - ,0.16977090E+3,0.281E+3,0.180E+2,0.19302000E+1,0.00000000E+0 - ,0.11488307E+4,0.281E+3,0.190E+2,0.19302000E+1,0.00000000E+0 - ,0.94494750E+3,0.281E+3,0.200E+2,0.19302000E+1,0.00000000E+0 - ,0.78031190E+3,0.281E+3,0.210E+2,0.19302000E+1,0.00000000E+0 - ,0.75356620E+3,0.281E+3,0.220E+2,0.19302000E+1,0.00000000E+0 - ,0.69006660E+3,0.281E+3,0.230E+2,0.19302000E+1,0.00000000E+0 - ,0.54417950E+3,0.281E+3,0.240E+2,0.19302000E+1,0.00000000E+0 - ,0.59417250E+3,0.281E+3,0.250E+2,0.19302000E+1,0.00000000E+0 - ,0.46687620E+3,0.281E+3,0.260E+2,0.19302000E+1,0.00000000E+0 - ,0.49428940E+3,0.281E+3,0.270E+2,0.19302000E+1,0.00000000E+0 - ,0.50915080E+3,0.281E+3,0.280E+2,0.19302000E+1,0.00000000E+0 - ,0.39094350E+3,0.281E+3,0.290E+2,0.19302000E+1,0.00000000E+0 - ,0.40086460E+3,0.281E+3,0.300E+2,0.19302000E+1,0.00000000E+0 - ,0.47436550E+3,0.281E+3,0.310E+2,0.19302000E+1,0.00000000E+0 - ,0.41828000E+3,0.281E+3,0.320E+2,0.19302000E+1,0.00000000E+0 - ,0.35698080E+3,0.281E+3,0.330E+2,0.19302000E+1,0.00000000E+0 - ,0.32059210E+3,0.281E+3,0.340E+2,0.19302000E+1,0.00000000E+0 - ,0.28090020E+3,0.281E+3,0.350E+2,0.19302000E+1,0.00000000E+0 - ,0.24465900E+3,0.281E+3,0.360E+2,0.19302000E+1,0.00000000E+0 - ,0.12877826E+4,0.281E+3,0.370E+2,0.19302000E+1,0.00000000E+0 - ,0.11263391E+4,0.281E+3,0.380E+2,0.19302000E+1,0.00000000E+0 - ,0.98598710E+3,0.281E+3,0.390E+2,0.19302000E+1,0.00000000E+0 - ,0.88600180E+3,0.281E+3,0.400E+2,0.19302000E+1,0.00000000E+0 - ,0.80798210E+3,0.281E+3,0.410E+2,0.19302000E+1,0.00000000E+0 - ,0.62423380E+3,0.281E+3,0.420E+2,0.19302000E+1,0.00000000E+0 - ,0.69629870E+3,0.281E+3,0.430E+2,0.19302000E+1,0.00000000E+0 - ,0.53092790E+3,0.281E+3,0.440E+2,0.19302000E+1,0.00000000E+0 - ,0.57990290E+3,0.281E+3,0.450E+2,0.19302000E+1,0.00000000E+0 - ,0.53785540E+3,0.281E+3,0.460E+2,0.19302000E+1,0.00000000E+0 - ,0.44915460E+3,0.281E+3,0.470E+2,0.19302000E+1,0.00000000E+0 - ,0.47410150E+3,0.281E+3,0.480E+2,0.19302000E+1,0.00000000E+0 - ,0.59460280E+3,0.281E+3,0.490E+2,0.19302000E+1,0.00000000E+0 - ,0.54954150E+3,0.281E+3,0.500E+2,0.19302000E+1,0.00000000E+0 - ,0.48978390E+3,0.281E+3,0.510E+2,0.19302000E+1,0.00000000E+0 - ,0.45457430E+3,0.281E+3,0.520E+2,0.19302000E+1,0.00000000E+0 - ,0.41127480E+3,0.281E+3,0.530E+2,0.19302000E+1,0.00000000E+0 - ,0.37008590E+3,0.281E+3,0.540E+2,0.19302000E+1,0.00000000E+0 - ,0.15690757E+4,0.281E+3,0.550E+2,0.19302000E+1,0.00000000E+0 - ,0.14367682E+4,0.281E+3,0.560E+2,0.19302000E+1,0.00000000E+0 - ,0.12612174E+4,0.281E+3,0.570E+2,0.19302000E+1,0.00000000E+0 - ,0.57883370E+3,0.281E+3,0.580E+2,0.19302000E+1,0.27991000E+1 - ,0.12731210E+4,0.281E+3,0.590E+2,0.19302000E+1,0.00000000E+0 - ,0.12222593E+4,0.281E+3,0.600E+2,0.19302000E+1,0.00000000E+0 - ,0.11915365E+4,0.281E+3,0.610E+2,0.19302000E+1,0.00000000E+0 - ,0.11632807E+4,0.281E+3,0.620E+2,0.19302000E+1,0.00000000E+0 - ,0.11382189E+4,0.281E+3,0.630E+2,0.19302000E+1,0.00000000E+0 - ,0.89497400E+3,0.281E+3,0.640E+2,0.19302000E+1,0.00000000E+0 - ,0.10093816E+4,0.281E+3,0.650E+2,0.19302000E+1,0.00000000E+0 - ,0.97340780E+3,0.281E+3,0.660E+2,0.19302000E+1,0.00000000E+0 - ,0.10263420E+4,0.281E+3,0.670E+2,0.19302000E+1,0.00000000E+0 - ,0.10045056E+4,0.281E+3,0.680E+2,0.19302000E+1,0.00000000E+0 - ,0.98480680E+3,0.281E+3,0.690E+2,0.19302000E+1,0.00000000E+0 - ,0.97327760E+3,0.281E+3,0.700E+2,0.19302000E+1,0.00000000E+0 - ,0.81998780E+3,0.281E+3,0.710E+2,0.19302000E+1,0.00000000E+0 - ,0.80559300E+3,0.281E+3,0.720E+2,0.19302000E+1,0.00000000E+0 - ,0.73521850E+3,0.281E+3,0.730E+2,0.19302000E+1,0.00000000E+0 - ,0.62134250E+3,0.281E+3,0.740E+2,0.19302000E+1,0.00000000E+0 - ,0.63198300E+3,0.281E+3,0.750E+2,0.19302000E+1,0.00000000E+0 - ,0.57293310E+3,0.281E+3,0.760E+2,0.19302000E+1,0.00000000E+0 - ,0.52489900E+3,0.281E+3,0.770E+2,0.19302000E+1,0.00000000E+0 - ,0.43657950E+3,0.281E+3,0.780E+2,0.19302000E+1,0.00000000E+0 - ,0.40812070E+3,0.281E+3,0.790E+2,0.19302000E+1,0.00000000E+0 - ,0.41966530E+3,0.281E+3,0.800E+2,0.19302000E+1,0.00000000E+0 - ,0.61117330E+3,0.281E+3,0.810E+2,0.19302000E+1,0.00000000E+0 - ,0.59712280E+3,0.281E+3,0.820E+2,0.19302000E+1,0.00000000E+0 - ,0.54862180E+3,0.281E+3,0.830E+2,0.19302000E+1,0.00000000E+0 - ,0.52330660E+3,0.281E+3,0.840E+2,0.19302000E+1,0.00000000E+0 - ,0.48315870E+3,0.281E+3,0.850E+2,0.19302000E+1,0.00000000E+0 - ,0.44313040E+3,0.281E+3,0.860E+2,0.19302000E+1,0.00000000E+0 - ,0.14804889E+4,0.281E+3,0.870E+2,0.19302000E+1,0.00000000E+0 - ,0.14202956E+4,0.281E+3,0.880E+2,0.19302000E+1,0.00000000E+0 - ,0.12546279E+4,0.281E+3,0.890E+2,0.19302000E+1,0.00000000E+0 - ,0.11272570E+4,0.281E+3,0.900E+2,0.19302000E+1,0.00000000E+0 - ,0.11199568E+4,0.281E+3,0.910E+2,0.19302000E+1,0.00000000E+0 - ,0.10844785E+4,0.281E+3,0.920E+2,0.19302000E+1,0.00000000E+0 - ,0.11170554E+4,0.281E+3,0.930E+2,0.19302000E+1,0.00000000E+0 - ,0.10816612E+4,0.281E+3,0.940E+2,0.19302000E+1,0.00000000E+0 - ,0.60479200E+2,0.281E+3,0.101E+3,0.19302000E+1,0.00000000E+0 - ,0.19581130E+3,0.281E+3,0.103E+3,0.19302000E+1,0.98650000E+0 - ,0.24984400E+3,0.281E+3,0.104E+3,0.19302000E+1,0.98080000E+0 - ,0.19103520E+3,0.281E+3,0.105E+3,0.19302000E+1,0.97060000E+0 - ,0.14423770E+3,0.281E+3,0.106E+3,0.19302000E+1,0.98680000E+0 - ,0.10063880E+3,0.281E+3,0.107E+3,0.19302000E+1,0.99440000E+0 - ,0.73584100E+2,0.281E+3,0.108E+3,0.19302000E+1,0.99250000E+0 - ,0.50930700E+2,0.281E+3,0.109E+3,0.19302000E+1,0.99820000E+0 - ,0.28655560E+3,0.281E+3,0.111E+3,0.19302000E+1,0.96840000E+0 - ,0.44298480E+3,0.281E+3,0.112E+3,0.19302000E+1,0.96280000E+0 - ,0.44845700E+3,0.281E+3,0.113E+3,0.19302000E+1,0.96480000E+0 - ,0.36047340E+3,0.281E+3,0.114E+3,0.19302000E+1,0.95070000E+0 - ,0.29550270E+3,0.281E+3,0.115E+3,0.19302000E+1,0.99470000E+0 - ,0.25021530E+3,0.281E+3,0.116E+3,0.19302000E+1,0.99480000E+0 - ,0.20491230E+3,0.281E+3,0.117E+3,0.19302000E+1,0.99720000E+0 - ,0.39586240E+3,0.281E+3,0.119E+3,0.19302000E+1,0.97670000E+0 - ,0.75678810E+3,0.281E+3,0.120E+3,0.19302000E+1,0.98310000E+0 - ,0.39555800E+3,0.281E+3,0.121E+3,0.19302000E+1,0.18627000E+1 - ,0.38199770E+3,0.281E+3,0.122E+3,0.19302000E+1,0.18299000E+1 - ,0.37441990E+3,0.281E+3,0.123E+3,0.19302000E+1,0.19138000E+1 - ,0.37101600E+3,0.281E+3,0.124E+3,0.19302000E+1,0.18269000E+1 - ,0.34129280E+3,0.281E+3,0.125E+3,0.19302000E+1,0.16406000E+1 - ,0.31596540E+3,0.281E+3,0.126E+3,0.19302000E+1,0.16483000E+1 - ,0.30149960E+3,0.281E+3,0.127E+3,0.19302000E+1,0.17149000E+1 - ,0.29478150E+3,0.281E+3,0.128E+3,0.19302000E+1,0.17937000E+1 - ,0.29134120E+3,0.281E+3,0.129E+3,0.19302000E+1,0.95760000E+0 - ,0.27325060E+3,0.281E+3,0.130E+3,0.19302000E+1,0.19419000E+1 - ,0.44554260E+3,0.281E+3,0.131E+3,0.19302000E+1,0.96010000E+0 - ,0.39138140E+3,0.281E+3,0.132E+3,0.19302000E+1,0.94340000E+0 - ,0.35096110E+3,0.281E+3,0.133E+3,0.19302000E+1,0.98890000E+0 - ,0.32072380E+3,0.281E+3,0.134E+3,0.19302000E+1,0.99010000E+0 - ,0.28284750E+3,0.281E+3,0.135E+3,0.19302000E+1,0.99740000E+0 - ,0.47250610E+3,0.281E+3,0.137E+3,0.19302000E+1,0.97380000E+0 - ,0.92136230E+3,0.281E+3,0.138E+3,0.19302000E+1,0.98010000E+0 - ,0.70355580E+3,0.281E+3,0.139E+3,0.19302000E+1,0.19153000E+1 - ,0.52340250E+3,0.281E+3,0.140E+3,0.19302000E+1,0.19355000E+1 - ,0.52863200E+3,0.281E+3,0.141E+3,0.19302000E+1,0.19545000E+1 - ,0.49314640E+3,0.281E+3,0.142E+3,0.19302000E+1,0.19420000E+1 - ,0.55329240E+3,0.281E+3,0.143E+3,0.19302000E+1,0.16682000E+1 - ,0.43004960E+3,0.281E+3,0.144E+3,0.19302000E+1,0.18584000E+1 - ,0.40251430E+3,0.281E+3,0.145E+3,0.19302000E+1,0.19003000E+1 - ,0.37395490E+3,0.281E+3,0.146E+3,0.19302000E+1,0.18630000E+1 - ,0.36182100E+3,0.281E+3,0.147E+3,0.19302000E+1,0.96790000E+0 - ,0.35776620E+3,0.281E+3,0.148E+3,0.19302000E+1,0.19539000E+1 - ,0.56674250E+3,0.281E+3,0.149E+3,0.19302000E+1,0.96330000E+0 - ,0.51255600E+3,0.281E+3,0.150E+3,0.19302000E+1,0.95140000E+0 - ,0.48004840E+3,0.281E+3,0.151E+3,0.19302000E+1,0.97490000E+0 - ,0.45424350E+3,0.281E+3,0.152E+3,0.19302000E+1,0.98110000E+0 - ,0.41511430E+3,0.281E+3,0.153E+3,0.19302000E+1,0.99680000E+0 - ,0.55834700E+3,0.281E+3,0.155E+3,0.19302000E+1,0.99090000E+0 - ,0.11954806E+4,0.281E+3,0.156E+3,0.19302000E+1,0.97970000E+0 - ,0.89067110E+3,0.281E+3,0.157E+3,0.19302000E+1,0.19373000E+1 - ,0.56141900E+3,0.281E+3,0.159E+3,0.19302000E+1,0.29425000E+1 - ,0.54982120E+3,0.281E+3,0.160E+3,0.19302000E+1,0.29455000E+1 - ,0.53242950E+3,0.281E+3,0.161E+3,0.19302000E+1,0.29413000E+1 - ,0.53504270E+3,0.281E+3,0.162E+3,0.19302000E+1,0.29300000E+1 - ,0.51592290E+3,0.281E+3,0.163E+3,0.19302000E+1,0.18286000E+1 - ,0.53831350E+3,0.281E+3,0.164E+3,0.19302000E+1,0.28732000E+1 - ,0.50569480E+3,0.281E+3,0.165E+3,0.19302000E+1,0.29086000E+1 - ,0.51458640E+3,0.281E+3,0.166E+3,0.19302000E+1,0.28965000E+1 - ,0.47998260E+3,0.281E+3,0.167E+3,0.19302000E+1,0.29242000E+1 - ,0.46631110E+3,0.281E+3,0.168E+3,0.19302000E+1,0.29282000E+1 - ,0.46329610E+3,0.281E+3,0.169E+3,0.19302000E+1,0.29246000E+1 - ,0.48680100E+3,0.281E+3,0.170E+3,0.19302000E+1,0.28482000E+1 - ,0.44777810E+3,0.281E+3,0.171E+3,0.19302000E+1,0.29219000E+1 - ,0.60670050E+3,0.281E+3,0.172E+3,0.19302000E+1,0.19254000E+1 - ,0.56315480E+3,0.281E+3,0.173E+3,0.19302000E+1,0.19459000E+1 - ,0.51397290E+3,0.281E+3,0.174E+3,0.19302000E+1,0.19292000E+1 - ,0.52014190E+3,0.281E+3,0.175E+3,0.19302000E+1,0.18104000E+1 - ,0.45549230E+3,0.281E+3,0.176E+3,0.19302000E+1,0.18858000E+1 - ,0.42873640E+3,0.281E+3,0.177E+3,0.19302000E+1,0.18648000E+1 - ,0.40967910E+3,0.281E+3,0.178E+3,0.19302000E+1,0.19188000E+1 - ,0.39187930E+3,0.281E+3,0.179E+3,0.19302000E+1,0.98460000E+0 - ,0.37862560E+3,0.281E+3,0.180E+3,0.19302000E+1,0.19896000E+1 - ,0.60907890E+3,0.281E+3,0.181E+3,0.19302000E+1,0.92670000E+0 - ,0.55494180E+3,0.281E+3,0.182E+3,0.19302000E+1,0.93830000E+0 - ,0.53810030E+3,0.281E+3,0.183E+3,0.19302000E+1,0.98200000E+0 - ,0.52340750E+3,0.281E+3,0.184E+3,0.19302000E+1,0.98150000E+0 - ,0.48896760E+3,0.281E+3,0.185E+3,0.19302000E+1,0.99540000E+0 - ,0.62876220E+3,0.281E+3,0.187E+3,0.19302000E+1,0.97050000E+0 - ,0.11883406E+4,0.281E+3,0.188E+3,0.19302000E+1,0.96620000E+0 - ,0.66419980E+3,0.281E+3,0.189E+3,0.19302000E+1,0.29070000E+1 - ,0.76713680E+3,0.281E+3,0.190E+3,0.19302000E+1,0.28844000E+1 - ,0.68633050E+3,0.281E+3,0.191E+3,0.19302000E+1,0.28738000E+1 - ,0.60632050E+3,0.281E+3,0.192E+3,0.19302000E+1,0.28878000E+1 - ,0.58350520E+3,0.281E+3,0.193E+3,0.19302000E+1,0.29095000E+1 - ,0.70242340E+3,0.281E+3,0.194E+3,0.19302000E+1,0.19209000E+1 - ,0.16303250E+3,0.281E+3,0.204E+3,0.19302000E+1,0.19697000E+1 - ,0.16051470E+3,0.281E+3,0.205E+3,0.19302000E+1,0.19441000E+1 - ,0.11775890E+3,0.281E+3,0.206E+3,0.19302000E+1,0.19985000E+1 - ,0.94561900E+2,0.281E+3,0.207E+3,0.19302000E+1,0.20143000E+1 - ,0.65054900E+2,0.281E+3,0.208E+3,0.19302000E+1,0.19887000E+1 - ,0.28915800E+3,0.281E+3,0.212E+3,0.19302000E+1,0.19496000E+1 - ,0.34950920E+3,0.281E+3,0.213E+3,0.19302000E+1,0.19311000E+1 - ,0.33534010E+3,0.281E+3,0.214E+3,0.19302000E+1,0.19435000E+1 - ,0.29153890E+3,0.281E+3,0.215E+3,0.19302000E+1,0.20102000E+1 - ,0.24518670E+3,0.281E+3,0.216E+3,0.19302000E+1,0.19903000E+1 - ,0.40606400E+3,0.281E+3,0.220E+3,0.19302000E+1,0.19349000E+1 - ,0.39020820E+3,0.281E+3,0.221E+3,0.19302000E+1,0.28999000E+1 - ,0.39504660E+3,0.281E+3,0.222E+3,0.19302000E+1,0.38675000E+1 - ,0.36178060E+3,0.281E+3,0.223E+3,0.19302000E+1,0.29110000E+1 - ,0.27298940E+3,0.281E+3,0.224E+3,0.19302000E+1,0.10619100E+2 - ,0.23378110E+3,0.281E+3,0.225E+3,0.19302000E+1,0.98849000E+1 - ,0.22948940E+3,0.281E+3,0.226E+3,0.19302000E+1,0.91376000E+1 - ,0.26871310E+3,0.281E+3,0.227E+3,0.19302000E+1,0.29263000E+1 - ,0.25040430E+3,0.281E+3,0.228E+3,0.19302000E+1,0.65458000E+1 - ,0.35311120E+3,0.281E+3,0.231E+3,0.19302000E+1,0.19315000E+1 - ,0.37266030E+3,0.281E+3,0.232E+3,0.19302000E+1,0.19447000E+1 - ,0.34178700E+3,0.281E+3,0.233E+3,0.19302000E+1,0.19793000E+1 - ,0.31822560E+3,0.281E+3,0.234E+3,0.19302000E+1,0.19812000E+1 - ,0.48670590E+3,0.281E+3,0.238E+3,0.19302000E+1,0.19143000E+1 - ,0.46832670E+3,0.281E+3,0.239E+3,0.19302000E+1,0.28903000E+1 - ,0.47237120E+3,0.281E+3,0.240E+3,0.19302000E+1,0.39106000E+1 - ,0.45708930E+3,0.281E+3,0.241E+3,0.19302000E+1,0.29225000E+1 - ,0.40445180E+3,0.281E+3,0.242E+3,0.19302000E+1,0.11055600E+2 - ,0.35727900E+3,0.281E+3,0.243E+3,0.19302000E+1,0.95402000E+1 - ,0.33777820E+3,0.281E+3,0.244E+3,0.19302000E+1,0.88895000E+1 - ,0.34411230E+3,0.281E+3,0.245E+3,0.19302000E+1,0.29696000E+1 - ,0.35934930E+3,0.281E+3,0.246E+3,0.19302000E+1,0.57095000E+1 - ,0.45622010E+3,0.281E+3,0.249E+3,0.19302000E+1,0.19378000E+1 - ,0.49554180E+3,0.281E+3,0.250E+3,0.19302000E+1,0.19505000E+1 - ,0.46689650E+3,0.281E+3,0.251E+3,0.19302000E+1,0.19523000E+1 - ,0.45057090E+3,0.281E+3,0.252E+3,0.19302000E+1,0.19639000E+1 - ,0.58874480E+3,0.281E+3,0.256E+3,0.19302000E+1,0.18467000E+1 - ,0.60988230E+3,0.281E+3,0.257E+3,0.19302000E+1,0.29175000E+1 - ,0.45235490E+3,0.281E+3,0.272E+3,0.19302000E+1,0.38840000E+1 - ,0.47275440E+3,0.281E+3,0.273E+3,0.19302000E+1,0.28988000E+1 - ,0.43936980E+3,0.281E+3,0.274E+3,0.19302000E+1,0.10915300E+2 - ,0.39936360E+3,0.281E+3,0.275E+3,0.19302000E+1,0.98054000E+1 - ,0.37591510E+3,0.281E+3,0.276E+3,0.19302000E+1,0.91527000E+1 - ,0.38338850E+3,0.281E+3,0.277E+3,0.19302000E+1,0.29424000E+1 - ,0.40305640E+3,0.281E+3,0.278E+3,0.19302000E+1,0.66669000E+1 - ,0.48774180E+3,0.281E+3,0.281E+3,0.19302000E+1,0.19302000E+1 - ,0.39792200E+2,0.282E+3,0.100E+1,0.19356000E+1,0.91180000E+0 - ,0.26446700E+2,0.282E+3,0.200E+1,0.19356000E+1,0.00000000E+0 - ,0.61488410E+3,0.282E+3,0.300E+1,0.19356000E+1,0.00000000E+0 - ,0.35582050E+3,0.282E+3,0.400E+1,0.19356000E+1,0.00000000E+0 - ,0.24002620E+3,0.282E+3,0.500E+1,0.19356000E+1,0.00000000E+0 - ,0.16250360E+3,0.282E+3,0.600E+1,0.19356000E+1,0.00000000E+0 - ,0.11392620E+3,0.282E+3,0.700E+1,0.19356000E+1,0.00000000E+0 - ,0.86471200E+2,0.282E+3,0.800E+1,0.19356000E+1,0.00000000E+0 - ,0.65688800E+2,0.282E+3,0.900E+1,0.19356000E+1,0.00000000E+0 - ,0.50670700E+2,0.282E+3,0.100E+2,0.19356000E+1,0.00000000E+0 - ,0.73557820E+3,0.282E+3,0.110E+2,0.19356000E+1,0.00000000E+0 - ,0.56688720E+3,0.282E+3,0.120E+2,0.19356000E+1,0.00000000E+0 - ,0.52287510E+3,0.282E+3,0.130E+2,0.19356000E+1,0.00000000E+0 - ,0.41241080E+3,0.282E+3,0.140E+2,0.19356000E+1,0.00000000E+0 - ,0.32196130E+3,0.282E+3,0.150E+2,0.19356000E+1,0.00000000E+0 - ,0.26749610E+3,0.282E+3,0.160E+2,0.19356000E+1,0.00000000E+0 - ,0.21879400E+3,0.282E+3,0.170E+2,0.19356000E+1,0.00000000E+0 - ,0.17927010E+3,0.282E+3,0.180E+2,0.19356000E+1,0.00000000E+0 - ,0.12058672E+4,0.282E+3,0.190E+2,0.19356000E+1,0.00000000E+0 - ,0.99578930E+3,0.282E+3,0.200E+2,0.19356000E+1,0.00000000E+0 - ,0.82287620E+3,0.282E+3,0.210E+2,0.19356000E+1,0.00000000E+0 - ,0.79494560E+3,0.282E+3,0.220E+2,0.19356000E+1,0.00000000E+0 - ,0.72813060E+3,0.282E+3,0.230E+2,0.19356000E+1,0.00000000E+0 - ,0.57390570E+3,0.282E+3,0.240E+2,0.19356000E+1,0.00000000E+0 - ,0.62713920E+3,0.282E+3,0.250E+2,0.19356000E+1,0.00000000E+0 - ,0.49253590E+3,0.282E+3,0.260E+2,0.19356000E+1,0.00000000E+0 - ,0.52201020E+3,0.282E+3,0.270E+2,0.19356000E+1,0.00000000E+0 - ,0.53761470E+3,0.282E+3,0.280E+2,0.19356000E+1,0.00000000E+0 - ,0.41250160E+3,0.282E+3,0.290E+2,0.19356000E+1,0.00000000E+0 - ,0.42350910E+3,0.282E+3,0.300E+2,0.19356000E+1,0.00000000E+0 - ,0.50121030E+3,0.282E+3,0.310E+2,0.19356000E+1,0.00000000E+0 - ,0.44228050E+3,0.282E+3,0.320E+2,0.19356000E+1,0.00000000E+0 - ,0.37753680E+3,0.282E+3,0.330E+2,0.19356000E+1,0.00000000E+0 - ,0.33899500E+3,0.282E+3,0.340E+2,0.19356000E+1,0.00000000E+0 - ,0.29691970E+3,0.282E+3,0.350E+2,0.19356000E+1,0.00000000E+0 - ,0.25848000E+3,0.282E+3,0.360E+2,0.19356000E+1,0.00000000E+0 - ,0.13518089E+4,0.282E+3,0.370E+2,0.19356000E+1,0.00000000E+0 - ,0.11865298E+4,0.282E+3,0.380E+2,0.19356000E+1,0.00000000E+0 - ,0.10397874E+4,0.282E+3,0.390E+2,0.19356000E+1,0.00000000E+0 - ,0.93482320E+3,0.282E+3,0.400E+2,0.19356000E+1,0.00000000E+0 - ,0.85268980E+3,0.282E+3,0.410E+2,0.19356000E+1,0.00000000E+0 - ,0.65880460E+3,0.282E+3,0.420E+2,0.19356000E+1,0.00000000E+0 - ,0.73487030E+3,0.282E+3,0.430E+2,0.19356000E+1,0.00000000E+0 - ,0.56035040E+3,0.282E+3,0.440E+2,0.19356000E+1,0.00000000E+0 - ,0.61229710E+3,0.282E+3,0.450E+2,0.19356000E+1,0.00000000E+0 - ,0.56795070E+3,0.282E+3,0.460E+2,0.19356000E+1,0.00000000E+0 - ,0.47388930E+3,0.282E+3,0.470E+2,0.19356000E+1,0.00000000E+0 - ,0.50066290E+3,0.282E+3,0.480E+2,0.19356000E+1,0.00000000E+0 - ,0.62779210E+3,0.282E+3,0.490E+2,0.19356000E+1,0.00000000E+0 - ,0.58070530E+3,0.282E+3,0.500E+2,0.19356000E+1,0.00000000E+0 - ,0.51776630E+3,0.282E+3,0.510E+2,0.19356000E+1,0.00000000E+0 - ,0.48056780E+3,0.282E+3,0.520E+2,0.19356000E+1,0.00000000E+0 - ,0.43474640E+3,0.282E+3,0.530E+2,0.19356000E+1,0.00000000E+0 - ,0.39110730E+3,0.282E+3,0.540E+2,0.19356000E+1,0.00000000E+0 - ,0.16469053E+4,0.282E+3,0.550E+2,0.19356000E+1,0.00000000E+0 - ,0.15126316E+4,0.282E+3,0.560E+2,0.19356000E+1,0.00000000E+0 - ,0.13293437E+4,0.282E+3,0.570E+2,0.19356000E+1,0.00000000E+0 - ,0.61169810E+3,0.282E+3,0.580E+2,0.19356000E+1,0.27991000E+1 - ,0.13407087E+4,0.282E+3,0.590E+2,0.19356000E+1,0.00000000E+0 - ,0.12874426E+4,0.282E+3,0.600E+2,0.19356000E+1,0.00000000E+0 - ,0.12551651E+4,0.282E+3,0.610E+2,0.19356000E+1,0.00000000E+0 - ,0.12254747E+4,0.282E+3,0.620E+2,0.19356000E+1,0.00000000E+0 - ,0.11991443E+4,0.282E+3,0.630E+2,0.19356000E+1,0.00000000E+0 - ,0.94362380E+3,0.282E+3,0.640E+2,0.19356000E+1,0.00000000E+0 - ,0.10620589E+4,0.282E+3,0.650E+2,0.19356000E+1,0.00000000E+0 - ,0.10244069E+4,0.282E+3,0.660E+2,0.19356000E+1,0.00000000E+0 - ,0.10816382E+4,0.282E+3,0.670E+2,0.19356000E+1,0.00000000E+0 - ,0.10586802E+4,0.282E+3,0.680E+2,0.19356000E+1,0.00000000E+0 - ,0.10379814E+4,0.282E+3,0.690E+2,0.19356000E+1,0.00000000E+0 - ,0.10258078E+4,0.282E+3,0.700E+2,0.19356000E+1,0.00000000E+0 - ,0.86471680E+3,0.282E+3,0.710E+2,0.19356000E+1,0.00000000E+0 - ,0.85048450E+3,0.282E+3,0.720E+2,0.19356000E+1,0.00000000E+0 - ,0.77645220E+3,0.282E+3,0.730E+2,0.19356000E+1,0.00000000E+0 - ,0.65606950E+3,0.282E+3,0.740E+2,0.19356000E+1,0.00000000E+0 - ,0.66747630E+3,0.282E+3,0.750E+2,0.19356000E+1,0.00000000E+0 - ,0.60520260E+3,0.282E+3,0.760E+2,0.19356000E+1,0.00000000E+0 - ,0.55449180E+3,0.282E+3,0.770E+2,0.19356000E+1,0.00000000E+0 - ,0.46101730E+3,0.282E+3,0.780E+2,0.19356000E+1,0.00000000E+0 - ,0.43090160E+3,0.282E+3,0.790E+2,0.19356000E+1,0.00000000E+0 - ,0.44323910E+3,0.282E+3,0.800E+2,0.19356000E+1,0.00000000E+0 - ,0.64499260E+3,0.282E+3,0.810E+2,0.19356000E+1,0.00000000E+0 - ,0.63069680E+3,0.282E+3,0.820E+2,0.19356000E+1,0.00000000E+0 - ,0.57974990E+3,0.282E+3,0.830E+2,0.19356000E+1,0.00000000E+0 - ,0.55307510E+3,0.282E+3,0.840E+2,0.19356000E+1,0.00000000E+0 - ,0.51064800E+3,0.282E+3,0.850E+2,0.19356000E+1,0.00000000E+0 - ,0.46827350E+3,0.282E+3,0.860E+2,0.19356000E+1,0.00000000E+0 - ,0.15554213E+4,0.282E+3,0.870E+2,0.19356000E+1,0.00000000E+0 - ,0.14960560E+4,0.282E+3,0.880E+2,0.19356000E+1,0.00000000E+0 - ,0.13229452E+4,0.282E+3,0.890E+2,0.19356000E+1,0.00000000E+0 - ,0.11895930E+4,0.282E+3,0.900E+2,0.19356000E+1,0.00000000E+0 - ,0.11810895E+4,0.282E+3,0.910E+2,0.19356000E+1,0.00000000E+0 - ,0.11436704E+4,0.282E+3,0.920E+2,0.19356000E+1,0.00000000E+0 - ,0.11773166E+4,0.282E+3,0.930E+2,0.19356000E+1,0.00000000E+0 - ,0.11401626E+4,0.282E+3,0.940E+2,0.19356000E+1,0.00000000E+0 - ,0.63979600E+2,0.282E+3,0.101E+3,0.19356000E+1,0.00000000E+0 - ,0.20691270E+3,0.282E+3,0.103E+3,0.19356000E+1,0.98650000E+0 - ,0.26400830E+3,0.282E+3,0.104E+3,0.19356000E+1,0.98080000E+0 - ,0.20201910E+3,0.282E+3,0.105E+3,0.19356000E+1,0.97060000E+0 - ,0.15244950E+3,0.282E+3,0.106E+3,0.19356000E+1,0.98680000E+0 - ,0.10626350E+3,0.282E+3,0.107E+3,0.19356000E+1,0.99440000E+0 - ,0.77602400E+2,0.282E+3,0.108E+3,0.19356000E+1,0.99250000E+0 - ,0.53610900E+2,0.282E+3,0.109E+3,0.19356000E+1,0.99820000E+0 - ,0.30258820E+3,0.282E+3,0.111E+3,0.19356000E+1,0.96840000E+0 - ,0.46775760E+3,0.282E+3,0.112E+3,0.19356000E+1,0.96280000E+0 - ,0.47397540E+3,0.282E+3,0.113E+3,0.19356000E+1,0.96480000E+0 - ,0.38125380E+3,0.282E+3,0.114E+3,0.19356000E+1,0.95070000E+0 - ,0.31255060E+3,0.282E+3,0.115E+3,0.19356000E+1,0.99470000E+0 - ,0.26456000E+3,0.282E+3,0.116E+3,0.19356000E+1,0.99480000E+0 - ,0.21653480E+3,0.282E+3,0.117E+3,0.19356000E+1,0.99720000E+0 - ,0.41774830E+3,0.282E+3,0.119E+3,0.19356000E+1,0.97670000E+0 - ,0.79700090E+3,0.282E+3,0.120E+3,0.19356000E+1,0.98310000E+0 - ,0.41801280E+3,0.282E+3,0.121E+3,0.19356000E+1,0.18627000E+1 - ,0.40362390E+3,0.282E+3,0.122E+3,0.19356000E+1,0.18299000E+1 - ,0.39559060E+3,0.282E+3,0.123E+3,0.19356000E+1,0.19138000E+1 - ,0.39193640E+3,0.282E+3,0.124E+3,0.19356000E+1,0.18269000E+1 - ,0.36075390E+3,0.282E+3,0.125E+3,0.19356000E+1,0.16406000E+1 - ,0.33396980E+3,0.282E+3,0.126E+3,0.19356000E+1,0.16483000E+1 - ,0.31863900E+3,0.282E+3,0.127E+3,0.19356000E+1,0.17149000E+1 - ,0.31152110E+3,0.282E+3,0.128E+3,0.19356000E+1,0.17937000E+1 - ,0.30775700E+3,0.282E+3,0.129E+3,0.19356000E+1,0.95760000E+0 - ,0.28885340E+3,0.282E+3,0.130E+3,0.19356000E+1,0.19419000E+1 - ,0.47083440E+3,0.282E+3,0.131E+3,0.19356000E+1,0.96010000E+0 - ,0.41385520E+3,0.282E+3,0.132E+3,0.19356000E+1,0.94340000E+0 - ,0.37116030E+3,0.282E+3,0.133E+3,0.19356000E+1,0.98890000E+0 - ,0.33912820E+3,0.282E+3,0.134E+3,0.19356000E+1,0.99010000E+0 - ,0.29897830E+3,0.282E+3,0.135E+3,0.19356000E+1,0.99740000E+0 - ,0.49860580E+3,0.282E+3,0.137E+3,0.19356000E+1,0.97380000E+0 - ,0.96992320E+3,0.282E+3,0.138E+3,0.19356000E+1,0.98010000E+0 - ,0.74205020E+3,0.282E+3,0.139E+3,0.19356000E+1,0.19153000E+1 - ,0.55289600E+3,0.282E+3,0.140E+3,0.19356000E+1,0.19355000E+1 - ,0.55839300E+3,0.282E+3,0.141E+3,0.19356000E+1,0.19545000E+1 - ,0.52087780E+3,0.282E+3,0.142E+3,0.19356000E+1,0.19420000E+1 - ,0.58393470E+3,0.282E+3,0.143E+3,0.19356000E+1,0.16682000E+1 - ,0.45433520E+3,0.282E+3,0.144E+3,0.19356000E+1,0.18584000E+1 - ,0.42516750E+3,0.282E+3,0.145E+3,0.19356000E+1,0.19003000E+1 - ,0.39494400E+3,0.282E+3,0.146E+3,0.19356000E+1,0.18630000E+1 - ,0.38209250E+3,0.282E+3,0.147E+3,0.19356000E+1,0.96790000E+0 - ,0.37801500E+3,0.282E+3,0.148E+3,0.19356000E+1,0.19539000E+1 - ,0.59852070E+3,0.282E+3,0.149E+3,0.19356000E+1,0.96330000E+0 - ,0.54168720E+3,0.282E+3,0.150E+3,0.19356000E+1,0.95140000E+0 - ,0.50748490E+3,0.282E+3,0.151E+3,0.19356000E+1,0.97490000E+0 - ,0.48022270E+3,0.282E+3,0.152E+3,0.19356000E+1,0.98110000E+0 - ,0.43881240E+3,0.282E+3,0.153E+3,0.19356000E+1,0.99680000E+0 - ,0.58960800E+3,0.282E+3,0.155E+3,0.19356000E+1,0.99090000E+0 - ,0.12575693E+4,0.282E+3,0.156E+3,0.19356000E+1,0.97970000E+0 - ,0.93914200E+3,0.282E+3,0.157E+3,0.19356000E+1,0.19373000E+1 - ,0.59329090E+3,0.282E+3,0.159E+3,0.19356000E+1,0.29425000E+1 - ,0.58103250E+3,0.282E+3,0.160E+3,0.19356000E+1,0.29455000E+1 - ,0.56264920E+3,0.282E+3,0.161E+3,0.19356000E+1,0.29413000E+1 - ,0.56536800E+3,0.282E+3,0.162E+3,0.19356000E+1,0.29300000E+1 - ,0.54495840E+3,0.282E+3,0.163E+3,0.19356000E+1,0.18286000E+1 - ,0.56886990E+3,0.282E+3,0.164E+3,0.19356000E+1,0.28732000E+1 - ,0.53439680E+3,0.282E+3,0.165E+3,0.19356000E+1,0.29086000E+1 - ,0.54369520E+3,0.282E+3,0.166E+3,0.19356000E+1,0.28965000E+1 - ,0.50726200E+3,0.282E+3,0.167E+3,0.19356000E+1,0.29242000E+1 - ,0.49282300E+3,0.282E+3,0.168E+3,0.19356000E+1,0.29282000E+1 - ,0.48963950E+3,0.282E+3,0.169E+3,0.19356000E+1,0.29246000E+1 - ,0.51452780E+3,0.282E+3,0.170E+3,0.19356000E+1,0.28482000E+1 - ,0.47326870E+3,0.282E+3,0.171E+3,0.19356000E+1,0.29219000E+1 - ,0.64058910E+3,0.282E+3,0.172E+3,0.19356000E+1,0.19254000E+1 - ,0.59475240E+3,0.282E+3,0.173E+3,0.19356000E+1,0.19459000E+1 - ,0.54291370E+3,0.282E+3,0.174E+3,0.19356000E+1,0.19292000E+1 - ,0.54925780E+3,0.282E+3,0.175E+3,0.19356000E+1,0.18104000E+1 - ,0.48124530E+3,0.282E+3,0.176E+3,0.19356000E+1,0.18858000E+1 - ,0.45291160E+3,0.282E+3,0.177E+3,0.19356000E+1,0.18648000E+1 - ,0.43272460E+3,0.282E+3,0.178E+3,0.19356000E+1,0.19188000E+1 - ,0.41382910E+3,0.282E+3,0.179E+3,0.19356000E+1,0.98460000E+0 - ,0.39995160E+3,0.282E+3,0.180E+3,0.19356000E+1,0.19896000E+1 - ,0.64299800E+3,0.282E+3,0.181E+3,0.19356000E+1,0.92670000E+0 - ,0.58628560E+3,0.282E+3,0.182E+3,0.19356000E+1,0.93830000E+0 - ,0.56868040E+3,0.282E+3,0.183E+3,0.19356000E+1,0.98200000E+0 - ,0.55320800E+3,0.282E+3,0.184E+3,0.19356000E+1,0.98150000E+0 - ,0.51680550E+3,0.282E+3,0.185E+3,0.19356000E+1,0.99540000E+0 - ,0.66402220E+3,0.282E+3,0.187E+3,0.19356000E+1,0.97050000E+0 - ,0.12510172E+4,0.282E+3,0.188E+3,0.19356000E+1,0.96620000E+0 - ,0.70195930E+3,0.282E+3,0.189E+3,0.19356000E+1,0.29070000E+1 - ,0.81010680E+3,0.282E+3,0.190E+3,0.19356000E+1,0.28844000E+1 - ,0.72464740E+3,0.282E+3,0.191E+3,0.19356000E+1,0.28738000E+1 - ,0.64054440E+3,0.282E+3,0.192E+3,0.19356000E+1,0.28878000E+1 - ,0.61646960E+3,0.282E+3,0.193E+3,0.19356000E+1,0.29095000E+1 - ,0.74111760E+3,0.282E+3,0.194E+3,0.19356000E+1,0.19209000E+1 - ,0.17249040E+3,0.282E+3,0.204E+3,0.19356000E+1,0.19697000E+1 - ,0.16970770E+3,0.282E+3,0.205E+3,0.19356000E+1,0.19441000E+1 - ,0.12443980E+3,0.282E+3,0.206E+3,0.19356000E+1,0.19985000E+1 - ,0.99829400E+2,0.282E+3,0.207E+3,0.19356000E+1,0.20143000E+1 - ,0.68563200E+2,0.282E+3,0.208E+3,0.19356000E+1,0.19887000E+1 - ,0.30583900E+3,0.282E+3,0.212E+3,0.19356000E+1,0.19496000E+1 - ,0.36956280E+3,0.282E+3,0.213E+3,0.19356000E+1,0.19311000E+1 - ,0.35468400E+3,0.282E+3,0.214E+3,0.19356000E+1,0.19435000E+1 - ,0.30832680E+3,0.282E+3,0.215E+3,0.19356000E+1,0.20102000E+1 - ,0.25923020E+3,0.282E+3,0.216E+3,0.19356000E+1,0.19903000E+1 - ,0.42911330E+3,0.282E+3,0.220E+3,0.19356000E+1,0.19349000E+1 - ,0.41249460E+3,0.282E+3,0.221E+3,0.19356000E+1,0.28999000E+1 - ,0.41760390E+3,0.282E+3,0.222E+3,0.19356000E+1,0.38675000E+1 - ,0.38232410E+3,0.282E+3,0.223E+3,0.19356000E+1,0.29110000E+1 - ,0.28838020E+3,0.282E+3,0.224E+3,0.19356000E+1,0.10619100E+2 - ,0.24693330E+3,0.282E+3,0.225E+3,0.19356000E+1,0.98849000E+1 - ,0.24239630E+3,0.282E+3,0.226E+3,0.19356000E+1,0.91376000E+1 - ,0.28387680E+3,0.282E+3,0.227E+3,0.19356000E+1,0.29263000E+1 - ,0.26454680E+3,0.282E+3,0.228E+3,0.19356000E+1,0.65458000E+1 - ,0.37331260E+3,0.282E+3,0.231E+3,0.19356000E+1,0.19315000E+1 - ,0.39406900E+3,0.282E+3,0.232E+3,0.19356000E+1,0.19447000E+1 - ,0.36145320E+3,0.282E+3,0.233E+3,0.19356000E+1,0.19793000E+1 - ,0.33647870E+3,0.282E+3,0.234E+3,0.19356000E+1,0.19812000E+1 - ,0.51420470E+3,0.282E+3,0.238E+3,0.19356000E+1,0.19143000E+1 - ,0.49505130E+3,0.282E+3,0.239E+3,0.19356000E+1,0.28903000E+1 - ,0.49936110E+3,0.282E+3,0.240E+3,0.19356000E+1,0.39106000E+1 - ,0.48303860E+3,0.282E+3,0.241E+3,0.19356000E+1,0.29225000E+1 - ,0.42736900E+3,0.282E+3,0.242E+3,0.19356000E+1,0.11055600E+2 - ,0.37746330E+3,0.282E+3,0.243E+3,0.19356000E+1,0.95402000E+1 - ,0.35681920E+3,0.282E+3,0.244E+3,0.19356000E+1,0.88895000E+1 - ,0.36342680E+3,0.282E+3,0.245E+3,0.19356000E+1,0.29696000E+1 - ,0.37957410E+3,0.282E+3,0.246E+3,0.19356000E+1,0.57095000E+1 - ,0.48204630E+3,0.282E+3,0.249E+3,0.19356000E+1,0.19378000E+1 - ,0.52374110E+3,0.282E+3,0.250E+3,0.19356000E+1,0.19505000E+1 - ,0.49359530E+3,0.282E+3,0.251E+3,0.19356000E+1,0.19523000E+1 - ,0.47634340E+3,0.282E+3,0.252E+3,0.19356000E+1,0.19639000E+1 - ,0.62197270E+3,0.282E+3,0.256E+3,0.19356000E+1,0.18467000E+1 - ,0.64464210E+3,0.282E+3,0.257E+3,0.19356000E+1,0.29175000E+1 - ,0.47820960E+3,0.282E+3,0.272E+3,0.19356000E+1,0.38840000E+1 - ,0.49956010E+3,0.282E+3,0.273E+3,0.19356000E+1,0.28988000E+1 - ,0.46428480E+3,0.282E+3,0.274E+3,0.19356000E+1,0.10915300E+2 - ,0.42194200E+3,0.282E+3,0.275E+3,0.19356000E+1,0.98054000E+1 - ,0.39711980E+3,0.282E+3,0.276E+3,0.19356000E+1,0.91527000E+1 - ,0.40488970E+3,0.282E+3,0.277E+3,0.19356000E+1,0.29424000E+1 - ,0.42575640E+3,0.282E+3,0.278E+3,0.19356000E+1,0.66669000E+1 - ,0.51525750E+3,0.282E+3,0.281E+3,0.19356000E+1,0.19302000E+1 - ,0.54445630E+3,0.282E+3,0.282E+3,0.19356000E+1,0.19356000E+1 - ,0.40764900E+2,0.283E+3,0.100E+1,0.19655000E+1,0.91180000E+0 - ,0.27174600E+2,0.283E+3,0.200E+1,0.19655000E+1,0.00000000E+0 - ,0.61318280E+3,0.283E+3,0.300E+1,0.19655000E+1,0.00000000E+0 - ,0.35984820E+3,0.283E+3,0.400E+1,0.19655000E+1,0.00000000E+0 - ,0.24435680E+3,0.283E+3,0.500E+1,0.19655000E+1,0.00000000E+0 - ,0.16611890E+3,0.283E+3,0.600E+1,0.19655000E+1,0.00000000E+0 - ,0.11675030E+3,0.283E+3,0.700E+1,0.19655000E+1,0.00000000E+0 - ,0.88739700E+2,0.283E+3,0.800E+1,0.19655000E+1,0.00000000E+0 - ,0.67475000E+2,0.283E+3,0.900E+1,0.19655000E+1,0.00000000E+0 - ,0.52075900E+2,0.283E+3,0.100E+2,0.19655000E+1,0.00000000E+0 - ,0.73412320E+3,0.283E+3,0.110E+2,0.19655000E+1,0.00000000E+0 - ,0.57193110E+3,0.283E+3,0.120E+2,0.19655000E+1,0.00000000E+0 - ,0.52949770E+3,0.283E+3,0.130E+2,0.19655000E+1,0.00000000E+0 - ,0.41959890E+3,0.283E+3,0.140E+2,0.19655000E+1,0.00000000E+0 - ,0.32872910E+3,0.283E+3,0.150E+2,0.19655000E+1,0.00000000E+0 - ,0.27365740E+3,0.283E+3,0.160E+2,0.19655000E+1,0.00000000E+0 - ,0.22421020E+3,0.283E+3,0.170E+2,0.19655000E+1,0.00000000E+0 - ,0.18393680E+3,0.283E+3,0.180E+2,0.19655000E+1,0.00000000E+0 - ,0.12004050E+4,0.283E+3,0.190E+2,0.19655000E+1,0.00000000E+0 - ,0.10001815E+4,0.283E+3,0.200E+2,0.19655000E+1,0.00000000E+0 - ,0.82806580E+3,0.283E+3,0.210E+2,0.19655000E+1,0.00000000E+0 - ,0.80123380E+3,0.283E+3,0.220E+2,0.19655000E+1,0.00000000E+0 - ,0.73459090E+3,0.283E+3,0.230E+2,0.19655000E+1,0.00000000E+0 - ,0.57897210E+3,0.283E+3,0.240E+2,0.19655000E+1,0.00000000E+0 - ,0.63356300E+3,0.283E+3,0.250E+2,0.19655000E+1,0.00000000E+0 - ,0.49763260E+3,0.283E+3,0.260E+2,0.19655000E+1,0.00000000E+0 - ,0.52856480E+3,0.283E+3,0.270E+2,0.19655000E+1,0.00000000E+0 - ,0.54385410E+3,0.283E+3,0.280E+2,0.19655000E+1,0.00000000E+0 - ,0.41719990E+3,0.283E+3,0.290E+2,0.19655000E+1,0.00000000E+0 - ,0.42968510E+3,0.283E+3,0.300E+2,0.19655000E+1,0.00000000E+0 - ,0.50815670E+3,0.283E+3,0.310E+2,0.19655000E+1,0.00000000E+0 - ,0.45004640E+3,0.283E+3,0.320E+2,0.19655000E+1,0.00000000E+0 - ,0.38531250E+3,0.283E+3,0.330E+2,0.19655000E+1,0.00000000E+0 - ,0.34654960E+3,0.283E+3,0.340E+2,0.19655000E+1,0.00000000E+0 - ,0.30400640E+3,0.283E+3,0.350E+2,0.19655000E+1,0.00000000E+0 - ,0.26498470E+3,0.283E+3,0.360E+2,0.19655000E+1,0.00000000E+0 - ,0.13466051E+4,0.283E+3,0.370E+2,0.19655000E+1,0.00000000E+0 - ,0.11912973E+4,0.283E+3,0.380E+2,0.19655000E+1,0.00000000E+0 - ,0.10473694E+4,0.283E+3,0.390E+2,0.19655000E+1,0.00000000E+0 - ,0.94346900E+3,0.283E+3,0.400E+2,0.19655000E+1,0.00000000E+0 - ,0.86162430E+3,0.283E+3,0.410E+2,0.19655000E+1,0.00000000E+0 - ,0.66699900E+3,0.283E+3,0.420E+2,0.19655000E+1,0.00000000E+0 - ,0.74348240E+3,0.283E+3,0.430E+2,0.19655000E+1,0.00000000E+0 - ,0.56809890E+3,0.283E+3,0.440E+2,0.19655000E+1,0.00000000E+0 - ,0.62085810E+3,0.283E+3,0.450E+2,0.19655000E+1,0.00000000E+0 - ,0.57630050E+3,0.283E+3,0.460E+2,0.19655000E+1,0.00000000E+0 - ,0.48048740E+3,0.283E+3,0.470E+2,0.19655000E+1,0.00000000E+0 - ,0.50846720E+3,0.283E+3,0.480E+2,0.19655000E+1,0.00000000E+0 - ,0.63617130E+3,0.283E+3,0.490E+2,0.19655000E+1,0.00000000E+0 - ,0.59026500E+3,0.283E+3,0.500E+2,0.19655000E+1,0.00000000E+0 - ,0.52774110E+3,0.283E+3,0.510E+2,0.19655000E+1,0.00000000E+0 - ,0.49058420E+3,0.283E+3,0.520E+2,0.19655000E+1,0.00000000E+0 - ,0.44449370E+3,0.283E+3,0.530E+2,0.19655000E+1,0.00000000E+0 - ,0.40041400E+3,0.283E+3,0.540E+2,0.19655000E+1,0.00000000E+0 - ,0.16407171E+4,0.283E+3,0.550E+2,0.19655000E+1,0.00000000E+0 - ,0.15169526E+4,0.283E+3,0.560E+2,0.19655000E+1,0.00000000E+0 - ,0.13375362E+4,0.283E+3,0.570E+2,0.19655000E+1,0.00000000E+0 - ,0.62310240E+3,0.283E+3,0.580E+2,0.19655000E+1,0.27991000E+1 - ,0.13458984E+4,0.283E+3,0.590E+2,0.19655000E+1,0.00000000E+0 - ,0.12931656E+4,0.283E+3,0.600E+2,0.19655000E+1,0.00000000E+0 - ,0.12609414E+4,0.283E+3,0.610E+2,0.19655000E+1,0.00000000E+0 - ,0.12312801E+4,0.283E+3,0.620E+2,0.19655000E+1,0.00000000E+0 - ,0.12049833E+4,0.283E+3,0.630E+2,0.19655000E+1,0.00000000E+0 - ,0.95146290E+3,0.283E+3,0.640E+2,0.19655000E+1,0.00000000E+0 - ,0.10651460E+4,0.283E+3,0.650E+2,0.19655000E+1,0.00000000E+0 - ,0.10280001E+4,0.283E+3,0.660E+2,0.19655000E+1,0.00000000E+0 - ,0.10878112E+4,0.283E+3,0.670E+2,0.19655000E+1,0.00000000E+0 - ,0.10648244E+4,0.283E+3,0.680E+2,0.19655000E+1,0.00000000E+0 - ,0.10441447E+4,0.283E+3,0.690E+2,0.19655000E+1,0.00000000E+0 - ,0.10317560E+4,0.283E+3,0.700E+2,0.19655000E+1,0.00000000E+0 - ,0.87174390E+3,0.283E+3,0.710E+2,0.19655000E+1,0.00000000E+0 - ,0.86024520E+3,0.283E+3,0.720E+2,0.19655000E+1,0.00000000E+0 - ,0.78678670E+3,0.283E+3,0.730E+2,0.19655000E+1,0.00000000E+0 - ,0.66560880E+3,0.283E+3,0.740E+2,0.19655000E+1,0.00000000E+0 - ,0.67767670E+3,0.283E+3,0.750E+2,0.19655000E+1,0.00000000E+0 - ,0.61534220E+3,0.283E+3,0.760E+2,0.19655000E+1,0.00000000E+0 - ,0.56441430E+3,0.283E+3,0.770E+2,0.19655000E+1,0.00000000E+0 - ,0.46971680E+3,0.283E+3,0.780E+2,0.19655000E+1,0.00000000E+0 - ,0.43919500E+3,0.283E+3,0.790E+2,0.19655000E+1,0.00000000E+0 - ,0.45207010E+3,0.283E+3,0.800E+2,0.19655000E+1,0.00000000E+0 - ,0.65391820E+3,0.283E+3,0.810E+2,0.19655000E+1,0.00000000E+0 - ,0.64098700E+3,0.283E+3,0.820E+2,0.19655000E+1,0.00000000E+0 - ,0.59069190E+3,0.283E+3,0.830E+2,0.19655000E+1,0.00000000E+0 - ,0.56428990E+3,0.283E+3,0.840E+2,0.19655000E+1,0.00000000E+0 - ,0.52180500E+3,0.283E+3,0.850E+2,0.19655000E+1,0.00000000E+0 - ,0.47912360E+3,0.283E+3,0.860E+2,0.19655000E+1,0.00000000E+0 - ,0.15538386E+4,0.283E+3,0.870E+2,0.19655000E+1,0.00000000E+0 - ,0.15028627E+4,0.283E+3,0.880E+2,0.19655000E+1,0.00000000E+0 - ,0.13329466E+4,0.283E+3,0.890E+2,0.19655000E+1,0.00000000E+0 - ,0.12024650E+4,0.283E+3,0.900E+2,0.19655000E+1,0.00000000E+0 - ,0.11918172E+4,0.283E+3,0.910E+2,0.19655000E+1,0.00000000E+0 - ,0.11541338E+4,0.283E+3,0.920E+2,0.19655000E+1,0.00000000E+0 - ,0.11856295E+4,0.283E+3,0.930E+2,0.19655000E+1,0.00000000E+0 - ,0.11486554E+4,0.283E+3,0.940E+2,0.19655000E+1,0.00000000E+0 - ,0.65353600E+2,0.283E+3,0.101E+3,0.19655000E+1,0.00000000E+0 - ,0.20943720E+3,0.283E+3,0.103E+3,0.19655000E+1,0.98650000E+0 - ,0.26754910E+3,0.283E+3,0.104E+3,0.19655000E+1,0.98080000E+0 - ,0.20589850E+3,0.283E+3,0.105E+3,0.19655000E+1,0.97060000E+0 - ,0.15580320E+3,0.283E+3,0.106E+3,0.19655000E+1,0.98680000E+0 - ,0.10888470E+3,0.283E+3,0.107E+3,0.19655000E+1,0.99440000E+0 - ,0.79657600E+2,0.283E+3,0.108E+3,0.19655000E+1,0.99250000E+0 - ,0.55128300E+2,0.283E+3,0.109E+3,0.19655000E+1,0.99820000E+0 - ,0.30582180E+3,0.283E+3,0.111E+3,0.19655000E+1,0.96840000E+0 - ,0.47251580E+3,0.283E+3,0.112E+3,0.19655000E+1,0.96280000E+0 - ,0.48037720E+3,0.283E+3,0.113E+3,0.19655000E+1,0.96480000E+0 - ,0.38813130E+3,0.283E+3,0.114E+3,0.19655000E+1,0.95070000E+0 - ,0.31914590E+3,0.283E+3,0.115E+3,0.19655000E+1,0.99470000E+0 - ,0.27063230E+3,0.283E+3,0.116E+3,0.19655000E+1,0.99480000E+0 - ,0.22188150E+3,0.283E+3,0.117E+3,0.19655000E+1,0.99720000E+0 - ,0.42309090E+3,0.283E+3,0.119E+3,0.19655000E+1,0.97670000E+0 - ,0.80050250E+3,0.283E+3,0.120E+3,0.19655000E+1,0.98310000E+0 - ,0.42505990E+3,0.283E+3,0.121E+3,0.19655000E+1,0.18627000E+1 - ,0.41044180E+3,0.283E+3,0.122E+3,0.19655000E+1,0.18299000E+1 - ,0.40223240E+3,0.283E+3,0.123E+3,0.19655000E+1,0.19138000E+1 - ,0.39832240E+3,0.283E+3,0.124E+3,0.19655000E+1,0.18269000E+1 - ,0.36744750E+3,0.283E+3,0.125E+3,0.19655000E+1,0.16406000E+1 - ,0.34035150E+3,0.283E+3,0.126E+3,0.19655000E+1,0.16483000E+1 - ,0.32470530E+3,0.283E+3,0.127E+3,0.19655000E+1,0.17149000E+1 - ,0.31739060E+3,0.283E+3,0.128E+3,0.19655000E+1,0.17937000E+1 - ,0.31302130E+3,0.283E+3,0.129E+3,0.19655000E+1,0.95760000E+0 - ,0.29468800E+3,0.283E+3,0.130E+3,0.19655000E+1,0.19419000E+1 - ,0.47779970E+3,0.283E+3,0.131E+3,0.19655000E+1,0.96010000E+0 - ,0.42144820E+3,0.283E+3,0.132E+3,0.19655000E+1,0.94340000E+0 - ,0.37886260E+3,0.283E+3,0.133E+3,0.19655000E+1,0.98890000E+0 - ,0.34667280E+3,0.283E+3,0.134E+3,0.19655000E+1,0.99010000E+0 - ,0.30608650E+3,0.283E+3,0.135E+3,0.19655000E+1,0.99740000E+0 - ,0.50534960E+3,0.283E+3,0.137E+3,0.19655000E+1,0.97380000E+0 - ,0.97364740E+3,0.283E+3,0.138E+3,0.19655000E+1,0.98010000E+0 - ,0.74962580E+3,0.283E+3,0.139E+3,0.19655000E+1,0.19153000E+1 - ,0.56197920E+3,0.283E+3,0.140E+3,0.19655000E+1,0.19355000E+1 - ,0.56751500E+3,0.283E+3,0.141E+3,0.19655000E+1,0.19545000E+1 - ,0.52972340E+3,0.283E+3,0.142E+3,0.19655000E+1,0.19420000E+1 - ,0.59210620E+3,0.283E+3,0.143E+3,0.19655000E+1,0.16682000E+1 - ,0.46293930E+3,0.283E+3,0.144E+3,0.19655000E+1,0.18584000E+1 - ,0.43325010E+3,0.283E+3,0.145E+3,0.19655000E+1,0.19003000E+1 - ,0.40255460E+3,0.283E+3,0.146E+3,0.19655000E+1,0.18630000E+1 - ,0.38932060E+3,0.283E+3,0.147E+3,0.19655000E+1,0.96790000E+0 - ,0.38581270E+3,0.283E+3,0.148E+3,0.19655000E+1,0.19539000E+1 - ,0.60715180E+3,0.283E+3,0.149E+3,0.19655000E+1,0.96330000E+0 - ,0.55119600E+3,0.283E+3,0.150E+3,0.19655000E+1,0.95140000E+0 - ,0.51744360E+3,0.283E+3,0.151E+3,0.19655000E+1,0.97490000E+0 - ,0.49028150E+3,0.283E+3,0.152E+3,0.19655000E+1,0.98110000E+0 - ,0.44864430E+3,0.283E+3,0.153E+3,0.19655000E+1,0.99680000E+0 - ,0.59907190E+3,0.283E+3,0.155E+3,0.19655000E+1,0.99090000E+0 - ,0.12605537E+4,0.283E+3,0.156E+3,0.19655000E+1,0.97970000E+0 - ,0.94816680E+3,0.283E+3,0.157E+3,0.19655000E+1,0.19373000E+1 - ,0.60443760E+3,0.283E+3,0.159E+3,0.19655000E+1,0.29425000E+1 - ,0.59196230E+3,0.283E+3,0.160E+3,0.19655000E+1,0.29455000E+1 - ,0.57330320E+3,0.283E+3,0.161E+3,0.19655000E+1,0.29413000E+1 - ,0.57583010E+3,0.283E+3,0.162E+3,0.19655000E+1,0.29300000E+1 - ,0.55423280E+3,0.283E+3,0.163E+3,0.19655000E+1,0.18286000E+1 - ,0.57935270E+3,0.283E+3,0.164E+3,0.19655000E+1,0.28732000E+1 - ,0.54441580E+3,0.283E+3,0.165E+3,0.19655000E+1,0.29086000E+1 - ,0.55345320E+3,0.283E+3,0.166E+3,0.19655000E+1,0.28965000E+1 - ,0.51696070E+3,0.283E+3,0.167E+3,0.19655000E+1,0.29242000E+1 - ,0.50231200E+3,0.283E+3,0.168E+3,0.19655000E+1,0.29282000E+1 - ,0.49901960E+3,0.283E+3,0.169E+3,0.19655000E+1,0.29246000E+1 - ,0.52412520E+3,0.283E+3,0.170E+3,0.19655000E+1,0.28482000E+1 - ,0.48244240E+3,0.283E+3,0.171E+3,0.19655000E+1,0.29219000E+1 - ,0.64975910E+3,0.283E+3,0.172E+3,0.19655000E+1,0.19254000E+1 - ,0.60428050E+3,0.283E+3,0.173E+3,0.19655000E+1,0.19459000E+1 - ,0.55254180E+3,0.283E+3,0.174E+3,0.19655000E+1,0.19292000E+1 - ,0.55811920E+3,0.283E+3,0.175E+3,0.19655000E+1,0.18104000E+1 - ,0.49092230E+3,0.283E+3,0.176E+3,0.19655000E+1,0.18858000E+1 - ,0.46222330E+3,0.283E+3,0.177E+3,0.19655000E+1,0.18648000E+1 - ,0.44172420E+3,0.283E+3,0.178E+3,0.19655000E+1,0.19188000E+1 - ,0.42235490E+3,0.283E+3,0.179E+3,0.19655000E+1,0.98460000E+0 - ,0.40877310E+3,0.283E+3,0.180E+3,0.19655000E+1,0.19896000E+1 - ,0.65249230E+3,0.283E+3,0.181E+3,0.19655000E+1,0.92670000E+0 - ,0.59673810E+3,0.283E+3,0.182E+3,0.19655000E+1,0.93830000E+0 - ,0.57973290E+3,0.283E+3,0.183E+3,0.19655000E+1,0.98200000E+0 - ,0.56455350E+3,0.283E+3,0.184E+3,0.19655000E+1,0.98150000E+0 - ,0.52811830E+3,0.283E+3,0.185E+3,0.19655000E+1,0.99540000E+0 - ,0.67482210E+3,0.283E+3,0.187E+3,0.19655000E+1,0.97050000E+0 - ,0.12567278E+4,0.283E+3,0.188E+3,0.19655000E+1,0.96620000E+0 - ,0.71513070E+3,0.283E+3,0.189E+3,0.19655000E+1,0.29070000E+1 - ,0.82307590E+3,0.283E+3,0.190E+3,0.19655000E+1,0.28844000E+1 - ,0.73672690E+3,0.283E+3,0.191E+3,0.19655000E+1,0.28738000E+1 - ,0.65261520E+3,0.283E+3,0.192E+3,0.19655000E+1,0.28878000E+1 - ,0.62834540E+3,0.283E+3,0.193E+3,0.19655000E+1,0.29095000E+1 - ,0.75123490E+3,0.283E+3,0.194E+3,0.19655000E+1,0.19209000E+1 - ,0.17590820E+3,0.283E+3,0.204E+3,0.19655000E+1,0.19697000E+1 - ,0.17315440E+3,0.283E+3,0.205E+3,0.19655000E+1,0.19441000E+1 - ,0.12738320E+3,0.283E+3,0.206E+3,0.19655000E+1,0.19985000E+1 - ,0.10231260E+3,0.283E+3,0.207E+3,0.19655000E+1,0.20143000E+1 - ,0.70396100E+2,0.283E+3,0.208E+3,0.19655000E+1,0.19887000E+1 - ,0.31101430E+3,0.283E+3,0.212E+3,0.19655000E+1,0.19496000E+1 - ,0.37562900E+3,0.283E+3,0.213E+3,0.19655000E+1,0.19311000E+1 - ,0.36130250E+3,0.283E+3,0.214E+3,0.19655000E+1,0.19435000E+1 - ,0.31474790E+3,0.283E+3,0.215E+3,0.19655000E+1,0.20102000E+1 - ,0.26518320E+3,0.283E+3,0.216E+3,0.19655000E+1,0.19903000E+1 - ,0.43613820E+3,0.283E+3,0.220E+3,0.19655000E+1,0.19349000E+1 - ,0.42000450E+3,0.283E+3,0.221E+3,0.19655000E+1,0.28999000E+1 - ,0.42525490E+3,0.283E+3,0.222E+3,0.19655000E+1,0.38675000E+1 - ,0.38922030E+3,0.283E+3,0.223E+3,0.19655000E+1,0.29110000E+1 - ,0.29426590E+3,0.283E+3,0.224E+3,0.19655000E+1,0.10619100E+2 - ,0.25234820E+3,0.283E+3,0.225E+3,0.19655000E+1,0.98849000E+1 - ,0.24765980E+3,0.283E+3,0.226E+3,0.19655000E+1,0.91376000E+1 - ,0.28933940E+3,0.283E+3,0.227E+3,0.19655000E+1,0.29263000E+1 - ,0.26984110E+3,0.283E+3,0.228E+3,0.19655000E+1,0.65458000E+1 - ,0.38000030E+3,0.283E+3,0.231E+3,0.19655000E+1,0.19315000E+1 - ,0.40150980E+3,0.283E+3,0.232E+3,0.19655000E+1,0.19447000E+1 - ,0.36905850E+3,0.283E+3,0.233E+3,0.19655000E+1,0.19793000E+1 - ,0.34397610E+3,0.283E+3,0.234E+3,0.19655000E+1,0.19812000E+1 - ,0.52267140E+3,0.283E+3,0.238E+3,0.19655000E+1,0.19143000E+1 - ,0.50441040E+3,0.283E+3,0.239E+3,0.19655000E+1,0.28903000E+1 - ,0.50913000E+3,0.283E+3,0.240E+3,0.19655000E+1,0.39106000E+1 - ,0.49230130E+3,0.283E+3,0.241E+3,0.19655000E+1,0.29225000E+1 - ,0.43628420E+3,0.283E+3,0.242E+3,0.19655000E+1,0.11055600E+2 - ,0.38581740E+3,0.283E+3,0.243E+3,0.19655000E+1,0.95402000E+1 - ,0.36486800E+3,0.283E+3,0.244E+3,0.19655000E+1,0.88895000E+1 - ,0.37099700E+3,0.283E+3,0.245E+3,0.19655000E+1,0.29696000E+1 - ,0.38733000E+3,0.283E+3,0.246E+3,0.19655000E+1,0.57095000E+1 - ,0.49068810E+3,0.283E+3,0.249E+3,0.19655000E+1,0.19378000E+1 - ,0.53323730E+3,0.283E+3,0.250E+3,0.19655000E+1,0.19505000E+1 - ,0.50351030E+3,0.283E+3,0.251E+3,0.19655000E+1,0.19523000E+1 - ,0.48640400E+3,0.283E+3,0.252E+3,0.19655000E+1,0.19639000E+1 - ,0.63257940E+3,0.283E+3,0.256E+3,0.19655000E+1,0.18467000E+1 - ,0.65653900E+3,0.283E+3,0.257E+3,0.19655000E+1,0.29175000E+1 - ,0.48797410E+3,0.283E+3,0.272E+3,0.19655000E+1,0.38840000E+1 - ,0.50923540E+3,0.283E+3,0.273E+3,0.19655000E+1,0.28988000E+1 - ,0.47403980E+3,0.283E+3,0.274E+3,0.19655000E+1,0.10915300E+2 - ,0.43128970E+3,0.283E+3,0.275E+3,0.19655000E+1,0.98054000E+1 - ,0.40628510E+3,0.283E+3,0.276E+3,0.19655000E+1,0.91527000E+1 - ,0.41359970E+3,0.283E+3,0.277E+3,0.19655000E+1,0.29424000E+1 - ,0.43491300E+3,0.283E+3,0.278E+3,0.19655000E+1,0.66669000E+1 - ,0.52503950E+3,0.283E+3,0.281E+3,0.19655000E+1,0.19302000E+1 - ,0.55492310E+3,0.283E+3,0.282E+3,0.19655000E+1,0.19356000E+1 - ,0.56604970E+3,0.283E+3,0.283E+3,0.19655000E+1,0.19655000E+1 - ,0.40683500E+2,0.284E+3,0.100E+1,0.19639000E+1,0.91180000E+0 - ,0.27269000E+2,0.284E+3,0.200E+1,0.19639000E+1,0.00000000E+0 - ,0.59704830E+3,0.284E+3,0.300E+1,0.19639000E+1,0.00000000E+0 - ,0.35412790E+3,0.284E+3,0.400E+1,0.19639000E+1,0.00000000E+0 - ,0.24207220E+3,0.284E+3,0.500E+1,0.19639000E+1,0.00000000E+0 - ,0.16537510E+3,0.284E+3,0.600E+1,0.19639000E+1,0.00000000E+0 - ,0.11663660E+3,0.284E+3,0.700E+1,0.19639000E+1,0.00000000E+0 - ,0.88864100E+2,0.284E+3,0.800E+1,0.19639000E+1,0.00000000E+0 - ,0.67699200E+2,0.284E+3,0.900E+1,0.19639000E+1,0.00000000E+0 - ,0.52323700E+2,0.284E+3,0.100E+2,0.19639000E+1,0.00000000E+0 - ,0.71529180E+3,0.284E+3,0.110E+2,0.19639000E+1,0.00000000E+0 - ,0.56173090E+3,0.284E+3,0.120E+2,0.19639000E+1,0.00000000E+0 - ,0.52182740E+3,0.284E+3,0.130E+2,0.19639000E+1,0.00000000E+0 - ,0.41539360E+3,0.284E+3,0.140E+2,0.19639000E+1,0.00000000E+0 - ,0.32669480E+3,0.284E+3,0.150E+2,0.19639000E+1,0.00000000E+0 - ,0.27264470E+3,0.284E+3,0.160E+2,0.19639000E+1,0.00000000E+0 - ,0.22390350E+3,0.284E+3,0.170E+2,0.19639000E+1,0.00000000E+0 - ,0.18404790E+3,0.284E+3,0.180E+2,0.19639000E+1,0.00000000E+0 - ,0.11685636E+4,0.284E+3,0.190E+2,0.19639000E+1,0.00000000E+0 - ,0.97928960E+3,0.284E+3,0.200E+2,0.19639000E+1,0.00000000E+0 - ,0.81191130E+3,0.284E+3,0.210E+2,0.19639000E+1,0.00000000E+0 - ,0.78675610E+3,0.284E+3,0.220E+2,0.19639000E+1,0.00000000E+0 - ,0.72192550E+3,0.284E+3,0.230E+2,0.19639000E+1,0.00000000E+0 - ,0.56923970E+3,0.284E+3,0.240E+2,0.19639000E+1,0.00000000E+0 - ,0.62340350E+3,0.284E+3,0.250E+2,0.19639000E+1,0.00000000E+0 - ,0.48993540E+3,0.284E+3,0.260E+2,0.19639000E+1,0.00000000E+0 - ,0.52113280E+3,0.284E+3,0.270E+2,0.19639000E+1,0.00000000E+0 - ,0.53572570E+3,0.284E+3,0.280E+2,0.19639000E+1,0.00000000E+0 - ,0.41114170E+3,0.284E+3,0.290E+2,0.19639000E+1,0.00000000E+0 - ,0.42443520E+3,0.284E+3,0.300E+2,0.19639000E+1,0.00000000E+0 - ,0.50154410E+3,0.284E+3,0.310E+2,0.19639000E+1,0.00000000E+0 - ,0.44570000E+3,0.284E+3,0.320E+2,0.19639000E+1,0.00000000E+0 - ,0.38280030E+3,0.284E+3,0.330E+2,0.19639000E+1,0.00000000E+0 - ,0.34497610E+3,0.284E+3,0.340E+2,0.19639000E+1,0.00000000E+0 - ,0.30323440E+3,0.284E+3,0.350E+2,0.19639000E+1,0.00000000E+0 - ,0.26479090E+3,0.284E+3,0.360E+2,0.19639000E+1,0.00000000E+0 - ,0.13118379E+4,0.284E+3,0.370E+2,0.19639000E+1,0.00000000E+0 - ,0.11663270E+4,0.284E+3,0.380E+2,0.19639000E+1,0.00000000E+0 - ,0.10280879E+4,0.284E+3,0.390E+2,0.19639000E+1,0.00000000E+0 - ,0.92765740E+3,0.284E+3,0.400E+2,0.19639000E+1,0.00000000E+0 - ,0.84816650E+3,0.284E+3,0.410E+2,0.19639000E+1,0.00000000E+0 - ,0.65796520E+3,0.284E+3,0.420E+2,0.19639000E+1,0.00000000E+0 - ,0.73282990E+3,0.284E+3,0.430E+2,0.19639000E+1,0.00000000E+0 - ,0.56123130E+3,0.284E+3,0.440E+2,0.19639000E+1,0.00000000E+0 - ,0.61320640E+3,0.284E+3,0.450E+2,0.19639000E+1,0.00000000E+0 - ,0.56959290E+3,0.284E+3,0.460E+2,0.19639000E+1,0.00000000E+0 - ,0.47485530E+3,0.284E+3,0.470E+2,0.19639000E+1,0.00000000E+0 - ,0.50299460E+3,0.284E+3,0.480E+2,0.19639000E+1,0.00000000E+0 - ,0.62793100E+3,0.284E+3,0.490E+2,0.19639000E+1,0.00000000E+0 - ,0.58416010E+3,0.284E+3,0.500E+2,0.19639000E+1,0.00000000E+0 - ,0.52370500E+3,0.284E+3,0.510E+2,0.19639000E+1,0.00000000E+0 - ,0.48765620E+3,0.284E+3,0.520E+2,0.19639000E+1,0.00000000E+0 - ,0.44264170E+3,0.284E+3,0.530E+2,0.19639000E+1,0.00000000E+0 - ,0.39942590E+3,0.284E+3,0.540E+2,0.19639000E+1,0.00000000E+0 - ,0.15989091E+4,0.284E+3,0.550E+2,0.19639000E+1,0.00000000E+0 - ,0.14842030E+4,0.284E+3,0.560E+2,0.19639000E+1,0.00000000E+0 - ,0.13119805E+4,0.284E+3,0.570E+2,0.19639000E+1,0.00000000E+0 - ,0.61810270E+3,0.284E+3,0.580E+2,0.19639000E+1,0.27991000E+1 - ,0.13179599E+4,0.284E+3,0.590E+2,0.19639000E+1,0.00000000E+0 - ,0.12667956E+4,0.284E+3,0.600E+2,0.19639000E+1,0.00000000E+0 - ,0.12353557E+4,0.284E+3,0.610E+2,0.19639000E+1,0.00000000E+0 - ,0.12064001E+4,0.284E+3,0.620E+2,0.19639000E+1,0.00000000E+0 - ,0.11807346E+4,0.284E+3,0.630E+2,0.19639000E+1,0.00000000E+0 - ,0.93518300E+3,0.284E+3,0.640E+2,0.19639000E+1,0.00000000E+0 - ,0.10429069E+4,0.284E+3,0.650E+2,0.19639000E+1,0.00000000E+0 - ,0.10070657E+4,0.284E+3,0.660E+2,0.19639000E+1,0.00000000E+0 - ,0.10665471E+4,0.284E+3,0.670E+2,0.19639000E+1,0.00000000E+0 - ,0.10440654E+4,0.284E+3,0.680E+2,0.19639000E+1,0.00000000E+0 - ,0.10238793E+4,0.284E+3,0.690E+2,0.19639000E+1,0.00000000E+0 - ,0.10115941E+4,0.284E+3,0.700E+2,0.19639000E+1,0.00000000E+0 - ,0.85651120E+3,0.284E+3,0.710E+2,0.19639000E+1,0.00000000E+0 - ,0.84744200E+3,0.284E+3,0.720E+2,0.19639000E+1,0.00000000E+0 - ,0.77639170E+3,0.284E+3,0.730E+2,0.19639000E+1,0.00000000E+0 - ,0.65782210E+3,0.284E+3,0.740E+2,0.19639000E+1,0.00000000E+0 - ,0.67012730E+3,0.284E+3,0.750E+2,0.19639000E+1,0.00000000E+0 - ,0.60937170E+3,0.284E+3,0.760E+2,0.19639000E+1,0.00000000E+0 - ,0.55959870E+3,0.284E+3,0.770E+2,0.19639000E+1,0.00000000E+0 - ,0.46635070E+3,0.284E+3,0.780E+2,0.19639000E+1,0.00000000E+0 - ,0.43627520E+3,0.284E+3,0.790E+2,0.19639000E+1,0.00000000E+0 - ,0.44926040E+3,0.284E+3,0.800E+2,0.19639000E+1,0.00000000E+0 - ,0.64607450E+3,0.284E+3,0.810E+2,0.19639000E+1,0.00000000E+0 - ,0.63450740E+3,0.284E+3,0.820E+2,0.19639000E+1,0.00000000E+0 - ,0.58610180E+3,0.284E+3,0.830E+2,0.19639000E+1,0.00000000E+0 - ,0.56069830E+3,0.284E+3,0.840E+2,0.19639000E+1,0.00000000E+0 - ,0.51936900E+3,0.284E+3,0.850E+2,0.19639000E+1,0.00000000E+0 - ,0.47763150E+3,0.284E+3,0.860E+2,0.19639000E+1,0.00000000E+0 - ,0.15173140E+4,0.284E+3,0.870E+2,0.19639000E+1,0.00000000E+0 - ,0.14724510E+4,0.284E+3,0.880E+2,0.19639000E+1,0.00000000E+0 - ,0.13089597E+4,0.284E+3,0.890E+2,0.19639000E+1,0.00000000E+0 - ,0.11841644E+4,0.284E+3,0.900E+2,0.19639000E+1,0.00000000E+0 - ,0.11721895E+4,0.284E+3,0.910E+2,0.19639000E+1,0.00000000E+0 - ,0.11351989E+4,0.284E+3,0.920E+2,0.19639000E+1,0.00000000E+0 - ,0.11641193E+4,0.284E+3,0.930E+2,0.19639000E+1,0.00000000E+0 - ,0.11281520E+4,0.284E+3,0.940E+2,0.19639000E+1,0.00000000E+0 - ,0.64976000E+2,0.284E+3,0.101E+3,0.19639000E+1,0.00000000E+0 - ,0.20631430E+3,0.284E+3,0.103E+3,0.19639000E+1,0.98650000E+0 - ,0.26393510E+3,0.284E+3,0.104E+3,0.19639000E+1,0.98080000E+0 - ,0.20426390E+3,0.284E+3,0.105E+3,0.19639000E+1,0.97060000E+0 - ,0.15510600E+3,0.284E+3,0.106E+3,0.19639000E+1,0.98680000E+0 - ,0.10879270E+3,0.284E+3,0.107E+3,0.19639000E+1,0.99440000E+0 - ,0.79818800E+2,0.284E+3,0.108E+3,0.19639000E+1,0.99250000E+0 - ,0.55426400E+2,0.284E+3,0.109E+3,0.19639000E+1,0.99820000E+0 - ,0.30093900E+3,0.284E+3,0.111E+3,0.19639000E+1,0.96840000E+0 - ,0.46475070E+3,0.284E+3,0.112E+3,0.19639000E+1,0.96280000E+0 - ,0.47382140E+3,0.284E+3,0.113E+3,0.19639000E+1,0.96480000E+0 - ,0.38451100E+3,0.284E+3,0.114E+3,0.19639000E+1,0.95070000E+0 - ,0.31721920E+3,0.284E+3,0.115E+3,0.19639000E+1,0.99470000E+0 - ,0.26961720E+3,0.284E+3,0.116E+3,0.19639000E+1,0.99480000E+0 - ,0.22156890E+3,0.284E+3,0.117E+3,0.19639000E+1,0.99720000E+0 - ,0.41756030E+3,0.284E+3,0.119E+3,0.19639000E+1,0.97670000E+0 - ,0.78439170E+3,0.284E+3,0.120E+3,0.19639000E+1,0.98310000E+0 - ,0.42082330E+3,0.284E+3,0.121E+3,0.19639000E+1,0.18627000E+1 - ,0.40643450E+3,0.284E+3,0.122E+3,0.19639000E+1,0.18299000E+1 - ,0.39827910E+3,0.284E+3,0.123E+3,0.19639000E+1,0.19138000E+1 - ,0.39424420E+3,0.284E+3,0.124E+3,0.19639000E+1,0.18269000E+1 - ,0.36438140E+3,0.284E+3,0.125E+3,0.19639000E+1,0.16406000E+1 - ,0.33772700E+3,0.284E+3,0.126E+3,0.19639000E+1,0.16483000E+1 - ,0.32221420E+3,0.284E+3,0.127E+3,0.19639000E+1,0.17149000E+1 - ,0.31490220E+3,0.284E+3,0.128E+3,0.19639000E+1,0.17937000E+1 - ,0.31008700E+3,0.284E+3,0.129E+3,0.19639000E+1,0.95760000E+0 - ,0.29273330E+3,0.284E+3,0.130E+3,0.19639000E+1,0.19419000E+1 - ,0.47199570E+3,0.284E+3,0.131E+3,0.19639000E+1,0.96010000E+0 - ,0.41772680E+3,0.284E+3,0.132E+3,0.19639000E+1,0.94340000E+0 - ,0.37646650E+3,0.284E+3,0.133E+3,0.19639000E+1,0.98890000E+0 - ,0.34508980E+3,0.284E+3,0.134E+3,0.19639000E+1,0.99010000E+0 - ,0.30527830E+3,0.284E+3,0.135E+3,0.19639000E+1,0.99740000E+0 - ,0.49917560E+3,0.284E+3,0.137E+3,0.19639000E+1,0.97380000E+0 - ,0.95388690E+3,0.284E+3,0.138E+3,0.19639000E+1,0.98010000E+0 - ,0.73824840E+3,0.284E+3,0.139E+3,0.19639000E+1,0.19153000E+1 - ,0.55634680E+3,0.284E+3,0.140E+3,0.19639000E+1,0.19355000E+1 - ,0.56177040E+3,0.284E+3,0.141E+3,0.19639000E+1,0.19545000E+1 - ,0.52477420E+3,0.284E+3,0.142E+3,0.19639000E+1,0.19420000E+1 - ,0.58512270E+3,0.284E+3,0.143E+3,0.19639000E+1,0.16682000E+1 - ,0.45947870E+3,0.284E+3,0.144E+3,0.19639000E+1,0.18584000E+1 - ,0.43011170E+3,0.284E+3,0.145E+3,0.19639000E+1,0.19003000E+1 - ,0.39979630E+3,0.284E+3,0.146E+3,0.19639000E+1,0.18630000E+1 - ,0.38652800E+3,0.284E+3,0.147E+3,0.19639000E+1,0.96790000E+0 - ,0.38357630E+3,0.284E+3,0.148E+3,0.19639000E+1,0.19539000E+1 - ,0.59985960E+3,0.284E+3,0.149E+3,0.19639000E+1,0.96330000E+0 - ,0.54609180E+3,0.284E+3,0.150E+3,0.19639000E+1,0.95140000E+0 - ,0.51367970E+3,0.284E+3,0.151E+3,0.19639000E+1,0.97490000E+0 - ,0.48740710E+3,0.284E+3,0.152E+3,0.19639000E+1,0.98110000E+0 - ,0.44676180E+3,0.284E+3,0.153E+3,0.19639000E+1,0.99680000E+0 - ,0.59303760E+3,0.284E+3,0.155E+3,0.19639000E+1,0.99090000E+0 - ,0.12339967E+4,0.284E+3,0.156E+3,0.19639000E+1,0.97970000E+0 - ,0.93345900E+3,0.284E+3,0.157E+3,0.19639000E+1,0.19373000E+1 - ,0.59968400E+3,0.284E+3,0.159E+3,0.19639000E+1,0.29425000E+1 - ,0.58732120E+3,0.284E+3,0.160E+3,0.19639000E+1,0.29455000E+1 - ,0.56888850E+3,0.284E+3,0.161E+3,0.19639000E+1,0.29413000E+1 - ,0.57117360E+3,0.284E+3,0.162E+3,0.19639000E+1,0.29300000E+1 - ,0.54902970E+3,0.284E+3,0.163E+3,0.19639000E+1,0.18286000E+1 - ,0.57457480E+3,0.284E+3,0.164E+3,0.19639000E+1,0.28732000E+1 - ,0.54011010E+3,0.284E+3,0.165E+3,0.19639000E+1,0.29086000E+1 - ,0.54869770E+3,0.284E+3,0.166E+3,0.19639000E+1,0.28965000E+1 - ,0.51304540E+3,0.284E+3,0.167E+3,0.19639000E+1,0.29242000E+1 - ,0.49857190E+3,0.284E+3,0.168E+3,0.19639000E+1,0.29282000E+1 - ,0.49524940E+3,0.284E+3,0.169E+3,0.19639000E+1,0.29246000E+1 - ,0.51984050E+3,0.284E+3,0.170E+3,0.19639000E+1,0.28482000E+1 - ,0.47888930E+3,0.284E+3,0.171E+3,0.19639000E+1,0.29219000E+1 - ,0.64207210E+3,0.284E+3,0.172E+3,0.19639000E+1,0.19254000E+1 - ,0.59809800E+3,0.284E+3,0.173E+3,0.19639000E+1,0.19459000E+1 - ,0.54779890E+3,0.284E+3,0.174E+3,0.19639000E+1,0.19292000E+1 - ,0.55252070E+3,0.284E+3,0.175E+3,0.19639000E+1,0.18104000E+1 - ,0.48785140E+3,0.284E+3,0.176E+3,0.19639000E+1,0.18858000E+1 - ,0.45960480E+3,0.284E+3,0.177E+3,0.19639000E+1,0.18648000E+1 - ,0.43937670E+3,0.284E+3,0.178E+3,0.19639000E+1,0.19188000E+1 - ,0.42009830E+3,0.284E+3,0.179E+3,0.19639000E+1,0.98460000E+0 - ,0.40712160E+3,0.284E+3,0.180E+3,0.19639000E+1,0.19896000E+1 - ,0.64511470E+3,0.284E+3,0.181E+3,0.19639000E+1,0.92670000E+0 - ,0.59155410E+3,0.284E+3,0.182E+3,0.19639000E+1,0.93830000E+0 - ,0.57553810E+3,0.284E+3,0.183E+3,0.19639000E+1,0.98200000E+0 - ,0.56108050E+3,0.284E+3,0.184E+3,0.19639000E+1,0.98150000E+0 - ,0.52566240E+3,0.284E+3,0.185E+3,0.19639000E+1,0.99540000E+0 - ,0.66813180E+3,0.284E+3,0.187E+3,0.19639000E+1,0.97050000E+0 - ,0.12322448E+4,0.284E+3,0.188E+3,0.19639000E+1,0.96620000E+0 - ,0.70944400E+3,0.284E+3,0.189E+3,0.19639000E+1,0.29070000E+1 - ,0.81473780E+3,0.284E+3,0.190E+3,0.19639000E+1,0.28844000E+1 - ,0.72995170E+3,0.284E+3,0.191E+3,0.19639000E+1,0.28738000E+1 - ,0.64769500E+3,0.284E+3,0.192E+3,0.19639000E+1,0.28878000E+1 - ,0.62385580E+3,0.284E+3,0.193E+3,0.19639000E+1,0.29095000E+1 - ,0.74228920E+3,0.284E+3,0.194E+3,0.19639000E+1,0.19209000E+1 - ,0.17455350E+3,0.284E+3,0.204E+3,0.19639000E+1,0.19697000E+1 - ,0.17202380E+3,0.284E+3,0.205E+3,0.19639000E+1,0.19441000E+1 - ,0.12705660E+3,0.284E+3,0.206E+3,0.19639000E+1,0.19985000E+1 - ,0.10226240E+3,0.284E+3,0.207E+3,0.19639000E+1,0.20143000E+1 - ,0.70592600E+2,0.284E+3,0.208E+3,0.19639000E+1,0.19887000E+1 - ,0.30770750E+3,0.284E+3,0.212E+3,0.19639000E+1,0.19496000E+1 - ,0.37155110E+3,0.284E+3,0.213E+3,0.19639000E+1,0.19311000E+1 - ,0.35816390E+3,0.284E+3,0.214E+3,0.19639000E+1,0.19435000E+1 - ,0.31278040E+3,0.284E+3,0.215E+3,0.19639000E+1,0.20102000E+1 - ,0.26420220E+3,0.284E+3,0.216E+3,0.19639000E+1,0.19903000E+1 - ,0.43156730E+3,0.284E+3,0.220E+3,0.19639000E+1,0.19349000E+1 - ,0.41632140E+3,0.284E+3,0.221E+3,0.19639000E+1,0.28999000E+1 - ,0.42158300E+3,0.284E+3,0.222E+3,0.19639000E+1,0.38675000E+1 - ,0.38584400E+3,0.284E+3,0.223E+3,0.19639000E+1,0.29110000E+1 - ,0.29255420E+3,0.284E+3,0.224E+3,0.19639000E+1,0.10619100E+2 - ,0.25131440E+3,0.284E+3,0.225E+3,0.19639000E+1,0.98849000E+1 - ,0.24658940E+3,0.284E+3,0.226E+3,0.19639000E+1,0.91376000E+1 - ,0.28727800E+3,0.284E+3,0.227E+3,0.19639000E+1,0.29263000E+1 - ,0.26812740E+3,0.284E+3,0.228E+3,0.19639000E+1,0.65458000E+1 - ,0.37653350E+3,0.284E+3,0.231E+3,0.19639000E+1,0.19315000E+1 - ,0.39818770E+3,0.284E+3,0.232E+3,0.19639000E+1,0.19447000E+1 - ,0.36684470E+3,0.284E+3,0.233E+3,0.19639000E+1,0.19793000E+1 - ,0.34242490E+3,0.284E+3,0.234E+3,0.19639000E+1,0.19812000E+1 - ,0.51736980E+3,0.284E+3,0.238E+3,0.19639000E+1,0.19143000E+1 - ,0.50039000E+3,0.284E+3,0.239E+3,0.19639000E+1,0.28903000E+1 - ,0.50540540E+3,0.284E+3,0.240E+3,0.19639000E+1,0.39106000E+1 - ,0.48864930E+3,0.284E+3,0.241E+3,0.19639000E+1,0.29225000E+1 - ,0.43386770E+3,0.284E+3,0.242E+3,0.19639000E+1,0.11055600E+2 - ,0.38425630E+3,0.284E+3,0.243E+3,0.19639000E+1,0.95402000E+1 - ,0.36358980E+3,0.284E+3,0.244E+3,0.19639000E+1,0.88895000E+1 - ,0.36907770E+3,0.284E+3,0.245E+3,0.19639000E+1,0.29696000E+1 - ,0.38510740E+3,0.284E+3,0.246E+3,0.19639000E+1,0.57095000E+1 - ,0.48643230E+3,0.284E+3,0.249E+3,0.19639000E+1,0.19378000E+1 - ,0.52860140E+3,0.284E+3,0.250E+3,0.19639000E+1,0.19505000E+1 - ,0.50008910E+3,0.284E+3,0.251E+3,0.19639000E+1,0.19523000E+1 - ,0.48364170E+3,0.284E+3,0.252E+3,0.19639000E+1,0.19639000E+1 - ,0.62662040E+3,0.284E+3,0.256E+3,0.19639000E+1,0.18467000E+1 - ,0.65103510E+3,0.284E+3,0.257E+3,0.19639000E+1,0.29175000E+1 - ,0.48484790E+3,0.284E+3,0.272E+3,0.19639000E+1,0.38840000E+1 - ,0.50560090E+3,0.284E+3,0.273E+3,0.19639000E+1,0.28988000E+1 - ,0.47147570E+3,0.284E+3,0.274E+3,0.19639000E+1,0.10915300E+2 - ,0.42954230E+3,0.284E+3,0.275E+3,0.19639000E+1,0.98054000E+1 - ,0.40508190E+3,0.284E+3,0.276E+3,0.19639000E+1,0.91527000E+1 - ,0.41178430E+3,0.284E+3,0.277E+3,0.19639000E+1,0.29424000E+1 - ,0.43290980E+3,0.284E+3,0.278E+3,0.19639000E+1,0.66669000E+1 - ,0.52115810E+3,0.284E+3,0.281E+3,0.19639000E+1,0.19302000E+1 - ,0.55085190E+3,0.284E+3,0.282E+3,0.19639000E+1,0.19356000E+1 - ,0.56229090E+3,0.284E+3,0.283E+3,0.19639000E+1,0.19655000E+1 - ,0.55897120E+3,0.284E+3,0.284E+3,0.19639000E+1,0.19639000E+1 - ,0.49435900E+2,0.288E+3,0.100E+1,0.18075000E+1,0.91180000E+0 - ,0.32220500E+2,0.288E+3,0.200E+1,0.18075000E+1,0.00000000E+0 - ,0.82215000E+3,0.288E+3,0.300E+1,0.18075000E+1,0.00000000E+0 - ,0.45899560E+3,0.288E+3,0.400E+1,0.18075000E+1,0.00000000E+0 - ,0.30409170E+3,0.288E+3,0.500E+1,0.18075000E+1,0.00000000E+0 - ,0.20312550E+3,0.288E+3,0.600E+1,0.18075000E+1,0.00000000E+0 - ,0.14087730E+3,0.288E+3,0.700E+1,0.18075000E+1,0.00000000E+0 - ,0.10603060E+3,0.288E+3,0.800E+1,0.18075000E+1,0.00000000E+0 - ,0.79895700E+2,0.288E+3,0.900E+1,0.18075000E+1,0.00000000E+0 - ,0.61167600E+2,0.288E+3,0.100E+2,0.18075000E+1,0.00000000E+0 - ,0.98096360E+3,0.288E+3,0.110E+2,0.18075000E+1,0.00000000E+0 - ,0.73528720E+3,0.288E+3,0.120E+2,0.18075000E+1,0.00000000E+0 - ,0.67185720E+3,0.288E+3,0.130E+2,0.18075000E+1,0.00000000E+0 - ,0.52330930E+3,0.288E+3,0.140E+2,0.18075000E+1,0.00000000E+0 - ,0.40436880E+3,0.288E+3,0.150E+2,0.18075000E+1,0.00000000E+0 - ,0.33371710E+3,0.288E+3,0.160E+2,0.18075000E+1,0.00000000E+0 - ,0.27114080E+3,0.288E+3,0.170E+2,0.18075000E+1,0.00000000E+0 - ,0.22078740E+3,0.288E+3,0.180E+2,0.18075000E+1,0.00000000E+0 - ,0.16183210E+4,0.288E+3,0.190E+2,0.18075000E+1,0.00000000E+0 - ,0.13060236E+4,0.288E+3,0.200E+2,0.18075000E+1,0.00000000E+0 - ,0.10738645E+4,0.288E+3,0.210E+2,0.18075000E+1,0.00000000E+0 - ,0.10329143E+4,0.288E+3,0.220E+2,0.18075000E+1,0.00000000E+0 - ,0.94357380E+3,0.288E+3,0.230E+2,0.18075000E+1,0.00000000E+0 - ,0.74319420E+3,0.288E+3,0.240E+2,0.18075000E+1,0.00000000E+0 - ,0.80955010E+3,0.288E+3,0.250E+2,0.18075000E+1,0.00000000E+0 - ,0.63499500E+3,0.288E+3,0.260E+2,0.18075000E+1,0.00000000E+0 - ,0.66951560E+3,0.288E+3,0.270E+2,0.18075000E+1,0.00000000E+0 - ,0.69128830E+3,0.288E+3,0.280E+2,0.18075000E+1,0.00000000E+0 - ,0.53001490E+3,0.288E+3,0.290E+2,0.18075000E+1,0.00000000E+0 - ,0.54001980E+3,0.288E+3,0.300E+2,0.18075000E+1,0.00000000E+0 - ,0.64142920E+3,0.288E+3,0.310E+2,0.18075000E+1,0.00000000E+0 - ,0.56053310E+3,0.288E+3,0.320E+2,0.18075000E+1,0.00000000E+0 - ,0.47441890E+3,0.288E+3,0.330E+2,0.18075000E+1,0.00000000E+0 - ,0.42376020E+3,0.288E+3,0.340E+2,0.18075000E+1,0.00000000E+0 - ,0.36911450E+3,0.288E+3,0.350E+2,0.18075000E+1,0.00000000E+0 - ,0.31963860E+3,0.288E+3,0.360E+2,0.18075000E+1,0.00000000E+0 - ,0.18108441E+4,0.288E+3,0.370E+2,0.18075000E+1,0.00000000E+0 - ,0.15576903E+4,0.288E+3,0.380E+2,0.18075000E+1,0.00000000E+0 - ,0.13534487E+4,0.288E+3,0.390E+2,0.18075000E+1,0.00000000E+0 - ,0.12104384E+4,0.288E+3,0.400E+2,0.18075000E+1,0.00000000E+0 - ,0.11002859E+4,0.288E+3,0.410E+2,0.18075000E+1,0.00000000E+0 - ,0.84497140E+3,0.288E+3,0.420E+2,0.18075000E+1,0.00000000E+0 - ,0.94457550E+3,0.288E+3,0.430E+2,0.18075000E+1,0.00000000E+0 - ,0.71540020E+3,0.288E+3,0.440E+2,0.18075000E+1,0.00000000E+0 - ,0.78173110E+3,0.288E+3,0.450E+2,0.18075000E+1,0.00000000E+0 - ,0.72344940E+3,0.288E+3,0.460E+2,0.18075000E+1,0.00000000E+0 - ,0.60407200E+3,0.288E+3,0.470E+2,0.18075000E+1,0.00000000E+0 - ,0.63577580E+3,0.288E+3,0.480E+2,0.18075000E+1,0.00000000E+0 - ,0.80295170E+3,0.288E+3,0.490E+2,0.18075000E+1,0.00000000E+0 - ,0.73674350E+3,0.288E+3,0.500E+2,0.18075000E+1,0.00000000E+0 - ,0.65189600E+3,0.288E+3,0.510E+2,0.18075000E+1,0.00000000E+0 - ,0.60235480E+3,0.288E+3,0.520E+2,0.18075000E+1,0.00000000E+0 - ,0.54227570E+3,0.288E+3,0.530E+2,0.18075000E+1,0.00000000E+0 - ,0.48556750E+3,0.288E+3,0.540E+2,0.18075000E+1,0.00000000E+0 - ,0.22065294E+4,0.288E+3,0.550E+2,0.18075000E+1,0.00000000E+0 - ,0.19920198E+4,0.288E+3,0.560E+2,0.18075000E+1,0.00000000E+0 - ,0.17357045E+4,0.288E+3,0.570E+2,0.18075000E+1,0.00000000E+0 - ,0.77135460E+3,0.288E+3,0.580E+2,0.18075000E+1,0.27991000E+1 - ,0.17597955E+4,0.288E+3,0.590E+2,0.18075000E+1,0.00000000E+0 - ,0.16873282E+4,0.288E+3,0.600E+2,0.18075000E+1,0.00000000E+0 - ,0.16443172E+4,0.288E+3,0.610E+2,0.18075000E+1,0.00000000E+0 - ,0.16048351E+4,0.288E+3,0.620E+2,0.18075000E+1,0.00000000E+0 - ,0.15698044E+4,0.288E+3,0.630E+2,0.18075000E+1,0.00000000E+0 - ,0.12237547E+4,0.288E+3,0.640E+2,0.18075000E+1,0.00000000E+0 - ,0.13970237E+4,0.288E+3,0.650E+2,0.18075000E+1,0.00000000E+0 - ,0.13453523E+4,0.288E+3,0.660E+2,0.18075000E+1,0.00000000E+0 - ,0.14127942E+4,0.288E+3,0.670E+2,0.18075000E+1,0.00000000E+0 - ,0.13824590E+4,0.288E+3,0.680E+2,0.18075000E+1,0.00000000E+0 - ,0.13549696E+4,0.288E+3,0.690E+2,0.18075000E+1,0.00000000E+0 - ,0.13395852E+4,0.288E+3,0.700E+2,0.18075000E+1,0.00000000E+0 - ,0.11220389E+4,0.288E+3,0.710E+2,0.18075000E+1,0.00000000E+0 - ,0.10946876E+4,0.288E+3,0.720E+2,0.18075000E+1,0.00000000E+0 - ,0.99428480E+3,0.288E+3,0.730E+2,0.18075000E+1,0.00000000E+0 - ,0.83675230E+3,0.288E+3,0.740E+2,0.18075000E+1,0.00000000E+0 - ,0.84958700E+3,0.288E+3,0.750E+2,0.18075000E+1,0.00000000E+0 - ,0.76688670E+3,0.288E+3,0.760E+2,0.18075000E+1,0.00000000E+0 - ,0.70006410E+3,0.288E+3,0.770E+2,0.18075000E+1,0.00000000E+0 - ,0.57964280E+3,0.288E+3,0.780E+2,0.18075000E+1,0.00000000E+0 - ,0.54079780E+3,0.288E+3,0.790E+2,0.18075000E+1,0.00000000E+0 - ,0.55540190E+3,0.288E+3,0.800E+2,0.18075000E+1,0.00000000E+0 - ,0.82307860E+3,0.288E+3,0.810E+2,0.18075000E+1,0.00000000E+0 - ,0.79969300E+3,0.288E+3,0.820E+2,0.18075000E+1,0.00000000E+0 - ,0.73000700E+3,0.288E+3,0.830E+2,0.18075000E+1,0.00000000E+0 - ,0.69372340E+3,0.288E+3,0.840E+2,0.18075000E+1,0.00000000E+0 - ,0.63752300E+3,0.288E+3,0.850E+2,0.18075000E+1,0.00000000E+0 - ,0.58212360E+3,0.288E+3,0.860E+2,0.18075000E+1,0.00000000E+0 - ,0.20693475E+4,0.288E+3,0.870E+2,0.18075000E+1,0.00000000E+0 - ,0.19615822E+4,0.288E+3,0.880E+2,0.18075000E+1,0.00000000E+0 - ,0.17203415E+4,0.288E+3,0.890E+2,0.18075000E+1,0.00000000E+0 - ,0.15329737E+4,0.288E+3,0.900E+2,0.18075000E+1,0.00000000E+0 - ,0.15284967E+4,0.288E+3,0.910E+2,0.18075000E+1,0.00000000E+0 - ,0.14796138E+4,0.288E+3,0.920E+2,0.18075000E+1,0.00000000E+0 - ,0.15311137E+4,0.288E+3,0.930E+2,0.18075000E+1,0.00000000E+0 - ,0.14812261E+4,0.288E+3,0.940E+2,0.18075000E+1,0.00000000E+0 - ,0.80304800E+2,0.288E+3,0.101E+3,0.18075000E+1,0.00000000E+0 - ,0.26620380E+3,0.288E+3,0.103E+3,0.18075000E+1,0.98650000E+0 - ,0.33870130E+3,0.288E+3,0.104E+3,0.18075000E+1,0.98080000E+0 - ,0.25501410E+3,0.288E+3,0.105E+3,0.18075000E+1,0.97060000E+0 - ,0.19065070E+3,0.288E+3,0.106E+3,0.18075000E+1,0.98680000E+0 - ,0.13139800E+3,0.288E+3,0.107E+3,0.18075000E+1,0.99440000E+0 - ,0.94990900E+2,0.288E+3,0.108E+3,0.18075000E+1,0.99250000E+0 - ,0.64689400E+2,0.288E+3,0.109E+3,0.18075000E+1,0.99820000E+0 - ,0.39028390E+3,0.288E+3,0.111E+3,0.18075000E+1,0.96840000E+0 - ,0.60479080E+3,0.288E+3,0.112E+3,0.18075000E+1,0.96280000E+0 - ,0.60764500E+3,0.288E+3,0.113E+3,0.18075000E+1,0.96480000E+0 - ,0.48292640E+3,0.288E+3,0.114E+3,0.18075000E+1,0.95070000E+0 - ,0.39240610E+3,0.288E+3,0.115E+3,0.18075000E+1,0.99470000E+0 - ,0.33009010E+3,0.288E+3,0.116E+3,0.18075000E+1,0.99480000E+0 - ,0.26835530E+3,0.288E+3,0.117E+3,0.18075000E+1,0.99720000E+0 - ,0.53522110E+3,0.288E+3,0.119E+3,0.18075000E+1,0.97670000E+0 - ,0.10452655E+4,0.288E+3,0.120E+3,0.18075000E+1,0.98310000E+0 - ,0.53005110E+3,0.288E+3,0.121E+3,0.18075000E+1,0.18627000E+1 - ,0.51159590E+3,0.288E+3,0.122E+3,0.18075000E+1,0.18299000E+1 - ,0.50142290E+3,0.288E+3,0.123E+3,0.18075000E+1,0.19138000E+1 - ,0.49734050E+3,0.288E+3,0.124E+3,0.18075000E+1,0.18269000E+1 - ,0.45500680E+3,0.288E+3,0.125E+3,0.18075000E+1,0.16406000E+1 - ,0.42043750E+3,0.288E+3,0.126E+3,0.18075000E+1,0.16483000E+1 - ,0.40108240E+3,0.288E+3,0.127E+3,0.18075000E+1,0.17149000E+1 - ,0.39226860E+3,0.288E+3,0.128E+3,0.18075000E+1,0.17937000E+1 - ,0.38915420E+3,0.288E+3,0.129E+3,0.18075000E+1,0.95760000E+0 - ,0.36239480E+3,0.288E+3,0.130E+3,0.18075000E+1,0.19419000E+1 - ,0.60102950E+3,0.288E+3,0.131E+3,0.18075000E+1,0.96010000E+0 - ,0.52334040E+3,0.288E+3,0.132E+3,0.18075000E+1,0.94340000E+0 - ,0.46617350E+3,0.288E+3,0.133E+3,0.18075000E+1,0.98890000E+0 - ,0.42395730E+3,0.288E+3,0.134E+3,0.18075000E+1,0.99010000E+0 - ,0.37177260E+3,0.288E+3,0.135E+3,0.18075000E+1,0.99740000E+0 - ,0.63744040E+3,0.288E+3,0.137E+3,0.18075000E+1,0.97380000E+0 - ,0.12738440E+4,0.288E+3,0.138E+3,0.18075000E+1,0.98010000E+0 - ,0.95836130E+3,0.288E+3,0.139E+3,0.18075000E+1,0.19153000E+1 - ,0.70195430E+3,0.288E+3,0.140E+3,0.18075000E+1,0.19355000E+1 - ,0.70892730E+3,0.288E+3,0.141E+3,0.18075000E+1,0.19545000E+1 - ,0.65979250E+3,0.288E+3,0.142E+3,0.18075000E+1,0.19420000E+1 - ,0.74563430E+3,0.288E+3,0.143E+3,0.18075000E+1,0.16682000E+1 - ,0.57194600E+3,0.288E+3,0.144E+3,0.18075000E+1,0.18584000E+1 - ,0.53479690E+3,0.288E+3,0.145E+3,0.18075000E+1,0.19003000E+1 - ,0.49608770E+3,0.288E+3,0.146E+3,0.18075000E+1,0.18630000E+1 - ,0.48018350E+3,0.288E+3,0.147E+3,0.18075000E+1,0.96790000E+0 - ,0.47304820E+3,0.288E+3,0.148E+3,0.18075000E+1,0.19539000E+1 - ,0.76329290E+3,0.288E+3,0.149E+3,0.18075000E+1,0.96330000E+0 - ,0.68512580E+3,0.288E+3,0.150E+3,0.18075000E+1,0.95140000E+0 - ,0.63830590E+3,0.288E+3,0.151E+3,0.18075000E+1,0.97490000E+0 - ,0.60176620E+3,0.288E+3,0.152E+3,0.18075000E+1,0.98110000E+0 - ,0.54740910E+3,0.288E+3,0.153E+3,0.18075000E+1,0.99680000E+0 - ,0.74957040E+3,0.288E+3,0.155E+3,0.18075000E+1,0.99090000E+0 - ,0.16581771E+4,0.288E+3,0.156E+3,0.18075000E+1,0.97970000E+0 - ,0.12150291E+4,0.288E+3,0.157E+3,0.18075000E+1,0.19373000E+1 - ,0.74777800E+3,0.288E+3,0.159E+3,0.18075000E+1,0.29425000E+1 - ,0.73224530E+3,0.288E+3,0.160E+3,0.18075000E+1,0.29455000E+1 - ,0.70878020E+3,0.288E+3,0.161E+3,0.18075000E+1,0.29413000E+1 - ,0.71308040E+3,0.288E+3,0.162E+3,0.18075000E+1,0.29300000E+1 - ,0.68979990E+3,0.288E+3,0.163E+3,0.18075000E+1,0.18286000E+1 - ,0.71779230E+3,0.288E+3,0.164E+3,0.18075000E+1,0.28732000E+1 - ,0.67351320E+3,0.288E+3,0.165E+3,0.18075000E+1,0.29086000E+1 - ,0.68677710E+3,0.288E+3,0.166E+3,0.18075000E+1,0.28965000E+1 - ,0.63867240E+3,0.288E+3,0.167E+3,0.18075000E+1,0.29242000E+1 - ,0.62024820E+3,0.288E+3,0.168E+3,0.18075000E+1,0.29282000E+1 - ,0.61643990E+3,0.288E+3,0.169E+3,0.18075000E+1,0.29246000E+1 - ,0.64892260E+3,0.288E+3,0.170E+3,0.18075000E+1,0.28482000E+1 - ,0.59550270E+3,0.288E+3,0.171E+3,0.18075000E+1,0.29219000E+1 - ,0.81802970E+3,0.288E+3,0.172E+3,0.18075000E+1,0.19254000E+1 - ,0.75571890E+3,0.288E+3,0.173E+3,0.18075000E+1,0.19459000E+1 - ,0.68626340E+3,0.288E+3,0.174E+3,0.18075000E+1,0.19292000E+1 - ,0.69723760E+3,0.288E+3,0.175E+3,0.18075000E+1,0.18104000E+1 - ,0.60379550E+3,0.288E+3,0.176E+3,0.18075000E+1,0.18858000E+1 - ,0.56713440E+3,0.288E+3,0.177E+3,0.18075000E+1,0.18648000E+1 - ,0.54115970E+3,0.288E+3,0.178E+3,0.18075000E+1,0.19188000E+1 - ,0.51741800E+3,0.288E+3,0.179E+3,0.18075000E+1,0.98460000E+0 - ,0.49805080E+3,0.288E+3,0.180E+3,0.18075000E+1,0.19896000E+1 - ,0.81861890E+3,0.288E+3,0.181E+3,0.18075000E+1,0.92670000E+0 - ,0.74024200E+3,0.288E+3,0.182E+3,0.18075000E+1,0.93830000E+0 - ,0.71498450E+3,0.288E+3,0.183E+3,0.18075000E+1,0.98200000E+0 - ,0.69350480E+3,0.288E+3,0.184E+3,0.18075000E+1,0.98150000E+0 - ,0.64521980E+3,0.288E+3,0.185E+3,0.18075000E+1,0.99540000E+0 - ,0.84379470E+3,0.288E+3,0.187E+3,0.18075000E+1,0.97050000E+0 - ,0.16402094E+4,0.288E+3,0.188E+3,0.18075000E+1,0.96620000E+0 - ,0.88501740E+3,0.288E+3,0.189E+3,0.18075000E+1,0.29070000E+1 - ,0.10289540E+4,0.288E+3,0.190E+3,0.18075000E+1,0.28844000E+1 - ,0.91819730E+3,0.288E+3,0.191E+3,0.18075000E+1,0.28738000E+1 - ,0.80643310E+3,0.288E+3,0.192E+3,0.18075000E+1,0.28878000E+1 - ,0.77504710E+3,0.288E+3,0.193E+3,0.18075000E+1,0.29095000E+1 - ,0.94627710E+3,0.288E+3,0.194E+3,0.18075000E+1,0.19209000E+1 - ,0.21752840E+3,0.288E+3,0.204E+3,0.18075000E+1,0.19697000E+1 - ,0.21346830E+3,0.288E+3,0.205E+3,0.18075000E+1,0.19441000E+1 - ,0.15465610E+3,0.288E+3,0.206E+3,0.18075000E+1,0.19985000E+1 - ,0.12319970E+3,0.288E+3,0.207E+3,0.18075000E+1,0.20143000E+1 - ,0.83591200E+2,0.288E+3,0.208E+3,0.18075000E+1,0.19887000E+1 - ,0.38834390E+3,0.288E+3,0.212E+3,0.18075000E+1,0.19496000E+1 - ,0.47010710E+3,0.288E+3,0.213E+3,0.18075000E+1,0.19311000E+1 - ,0.44845450E+3,0.288E+3,0.214E+3,0.18075000E+1,0.19435000E+1 - ,0.38732870E+3,0.288E+3,0.215E+3,0.18075000E+1,0.20102000E+1 - ,0.32337880E+3,0.288E+3,0.216E+3,0.18075000E+1,0.19903000E+1 - ,0.54493370E+3,0.288E+3,0.220E+3,0.18075000E+1,0.19349000E+1 - ,0.52129830E+3,0.288E+3,0.221E+3,0.18075000E+1,0.28999000E+1 - ,0.52752920E+3,0.288E+3,0.222E+3,0.18075000E+1,0.38675000E+1 - ,0.48302220E+3,0.288E+3,0.223E+3,0.18075000E+1,0.29110000E+1 - ,0.36126840E+3,0.288E+3,0.224E+3,0.18075000E+1,0.10619100E+2 - ,0.30772170E+3,0.288E+3,0.225E+3,0.18075000E+1,0.98849000E+1 - ,0.30218010E+3,0.288E+3,0.226E+3,0.18075000E+1,0.91376000E+1 - ,0.35673210E+3,0.288E+3,0.227E+3,0.18075000E+1,0.29263000E+1 - ,0.33160290E+3,0.288E+3,0.228E+3,0.18075000E+1,0.65458000E+1 - ,0.47243170E+3,0.288E+3,0.231E+3,0.18075000E+1,0.19315000E+1 - ,0.49753330E+3,0.288E+3,0.232E+3,0.18075000E+1,0.19447000E+1 - ,0.45357900E+3,0.288E+3,0.233E+3,0.18075000E+1,0.19793000E+1 - ,0.42057420E+3,0.288E+3,0.234E+3,0.18075000E+1,0.19812000E+1 - ,0.65272580E+3,0.288E+3,0.238E+3,0.18075000E+1,0.19143000E+1 - ,0.62438560E+3,0.288E+3,0.239E+3,0.18075000E+1,0.28903000E+1 - ,0.62866890E+3,0.288E+3,0.240E+3,0.18075000E+1,0.39106000E+1 - ,0.60842970E+3,0.288E+3,0.241E+3,0.18075000E+1,0.29225000E+1 - ,0.53532960E+3,0.288E+3,0.242E+3,0.18075000E+1,0.11055600E+2 - ,0.47069610E+3,0.288E+3,0.243E+3,0.18075000E+1,0.95402000E+1 - ,0.44413890E+3,0.288E+3,0.244E+3,0.18075000E+1,0.88895000E+1 - ,0.45438240E+3,0.288E+3,0.245E+3,0.18075000E+1,0.29696000E+1 - ,0.47518820E+3,0.288E+3,0.246E+3,0.18075000E+1,0.57095000E+1 - ,0.60862900E+3,0.288E+3,0.249E+3,0.18075000E+1,0.19378000E+1 - ,0.66134830E+3,0.288E+3,0.250E+3,0.18075000E+1,0.19505000E+1 - ,0.62001070E+3,0.288E+3,0.251E+3,0.18075000E+1,0.19523000E+1 - ,0.59661110E+3,0.288E+3,0.252E+3,0.18075000E+1,0.19639000E+1 - ,0.78841700E+3,0.288E+3,0.256E+3,0.18075000E+1,0.18467000E+1 - ,0.81437400E+3,0.288E+3,0.257E+3,0.18075000E+1,0.29175000E+1 - ,0.60044820E+3,0.288E+3,0.272E+3,0.18075000E+1,0.38840000E+1 - ,0.62883490E+3,0.288E+3,0.273E+3,0.18075000E+1,0.28988000E+1 - ,0.58136160E+3,0.288E+3,0.274E+3,0.18075000E+1,0.10915300E+2 - ,0.52620370E+3,0.288E+3,0.275E+3,0.18075000E+1,0.98054000E+1 - ,0.49362900E+3,0.288E+3,0.276E+3,0.18075000E+1,0.91527000E+1 - ,0.50521810E+3,0.288E+3,0.277E+3,0.18075000E+1,0.29424000E+1 - ,0.53138910E+3,0.288E+3,0.278E+3,0.18075000E+1,0.66669000E+1 - ,0.64808000E+3,0.288E+3,0.281E+3,0.18075000E+1,0.19302000E+1 - ,0.68468130E+3,0.288E+3,0.282E+3,0.18075000E+1,0.19356000E+1 - ,0.69650710E+3,0.288E+3,0.283E+3,0.18075000E+1,0.19655000E+1 - ,0.69009760E+3,0.288E+3,0.284E+3,0.18075000E+1,0.19639000E+1 - ,0.86755840E+3,0.288E+3,0.288E+3,0.18075000E+1,0.18075000E+1 - ,0.97472000E+1,0.305E+3,0.100E+1,0.29128000E+1,0.91180000E+0 - ,0.66434000E+1,0.305E+3,0.200E+1,0.29128000E+1,0.00000000E+0 - ,0.12998750E+3,0.305E+3,0.300E+1,0.29128000E+1,0.00000000E+0 - ,0.80427600E+2,0.305E+3,0.400E+1,0.29128000E+1,0.00000000E+0 - ,0.56411600E+2,0.305E+3,0.500E+1,0.29128000E+1,0.00000000E+0 - ,0.39244900E+2,0.305E+3,0.600E+1,0.29128000E+1,0.00000000E+0 - ,0.28012900E+2,0.305E+3,0.700E+1,0.29128000E+1,0.00000000E+0 - ,0.21498900E+2,0.305E+3,0.800E+1,0.29128000E+1,0.00000000E+0 - ,0.16460700E+2,0.305E+3,0.900E+1,0.29128000E+1,0.00000000E+0 - ,0.12757700E+2,0.305E+3,0.100E+2,0.29128000E+1,0.00000000E+0 - ,0.15611380E+3,0.305E+3,0.110E+2,0.29128000E+1,0.00000000E+0 - ,0.12654250E+3,0.305E+3,0.120E+2,0.29128000E+1,0.00000000E+0 - ,0.11915450E+3,0.305E+3,0.130E+2,0.29128000E+1,0.00000000E+0 - ,0.96531300E+2,0.305E+3,0.140E+2,0.29128000E+1,0.00000000E+0 - ,0.77042900E+2,0.305E+3,0.150E+2,0.29128000E+1,0.00000000E+0 - ,0.64891800E+2,0.305E+3,0.160E+2,0.29128000E+1,0.00000000E+0 - ,0.53734300E+2,0.305E+3,0.170E+2,0.29128000E+1,0.00000000E+0 - ,0.44461300E+2,0.305E+3,0.180E+2,0.29128000E+1,0.00000000E+0 - ,0.25422370E+3,0.305E+3,0.190E+2,0.29128000E+1,0.00000000E+0 - ,0.21794570E+3,0.305E+3,0.200E+2,0.29128000E+1,0.00000000E+0 - ,0.18168340E+3,0.305E+3,0.210E+2,0.29128000E+1,0.00000000E+0 - ,0.17706600E+3,0.305E+3,0.220E+2,0.29128000E+1,0.00000000E+0 - ,0.16299900E+3,0.305E+3,0.230E+2,0.29128000E+1,0.00000000E+0 - ,0.12872330E+3,0.305E+3,0.240E+2,0.29128000E+1,0.00000000E+0 - ,0.14140710E+3,0.305E+3,0.250E+2,0.29128000E+1,0.00000000E+0 - ,0.11135690E+3,0.305E+3,0.260E+2,0.29128000E+1,0.00000000E+0 - ,0.11910910E+3,0.305E+3,0.270E+2,0.29128000E+1,0.00000000E+0 - ,0.12201440E+3,0.305E+3,0.280E+2,0.29128000E+1,0.00000000E+0 - ,0.93766000E+2,0.305E+3,0.290E+2,0.29128000E+1,0.00000000E+0 - ,0.97684500E+2,0.305E+3,0.300E+2,0.29128000E+1,0.00000000E+0 - ,0.11517060E+3,0.305E+3,0.310E+2,0.29128000E+1,0.00000000E+0 - ,0.10369470E+3,0.305E+3,0.320E+2,0.29128000E+1,0.00000000E+0 - ,0.90137300E+2,0.305E+3,0.330E+2,0.29128000E+1,0.00000000E+0 - ,0.81838100E+2,0.305E+3,0.340E+2,0.29128000E+1,0.00000000E+0 - ,0.72461300E+2,0.305E+3,0.350E+2,0.29128000E+1,0.00000000E+0 - ,0.63676800E+2,0.305E+3,0.360E+2,0.29128000E+1,0.00000000E+0 - ,0.28624860E+3,0.305E+3,0.370E+2,0.29128000E+1,0.00000000E+0 - ,0.25952790E+3,0.305E+3,0.380E+2,0.29128000E+1,0.00000000E+0 - ,0.23111730E+3,0.305E+3,0.390E+2,0.29128000E+1,0.00000000E+0 - ,0.20990660E+3,0.305E+3,0.400E+2,0.29128000E+1,0.00000000E+0 - ,0.19277650E+3,0.305E+3,0.410E+2,0.29128000E+1,0.00000000E+0 - ,0.15074470E+3,0.305E+3,0.420E+2,0.29128000E+1,0.00000000E+0 - ,0.16737830E+3,0.305E+3,0.430E+2,0.29128000E+1,0.00000000E+0 - ,0.12927260E+3,0.305E+3,0.440E+2,0.29128000E+1,0.00000000E+0 - ,0.14111090E+3,0.305E+3,0.450E+2,0.29128000E+1,0.00000000E+0 - ,0.13140190E+3,0.305E+3,0.460E+2,0.29128000E+1,0.00000000E+0 - ,0.10947410E+3,0.305E+3,0.470E+2,0.29128000E+1,0.00000000E+0 - ,0.11639220E+3,0.305E+3,0.480E+2,0.29128000E+1,0.00000000E+0 - ,0.14412590E+3,0.305E+3,0.490E+2,0.29128000E+1,0.00000000E+0 - ,0.13544390E+3,0.305E+3,0.500E+2,0.29128000E+1,0.00000000E+0 - ,0.12268730E+3,0.305E+3,0.510E+2,0.29128000E+1,0.00000000E+0 - ,0.11497520E+3,0.305E+3,0.520E+2,0.29128000E+1,0.00000000E+0 - ,0.10506600E+3,0.305E+3,0.530E+2,0.29128000E+1,0.00000000E+0 - ,0.95397300E+2,0.305E+3,0.540E+2,0.29128000E+1,0.00000000E+0 - ,0.34948600E+3,0.305E+3,0.550E+2,0.29128000E+1,0.00000000E+0 - ,0.32947840E+3,0.305E+3,0.560E+2,0.29128000E+1,0.00000000E+0 - ,0.29416920E+3,0.305E+3,0.570E+2,0.29128000E+1,0.00000000E+0 - ,0.14462380E+3,0.305E+3,0.580E+2,0.29128000E+1,0.27991000E+1 - ,0.29344860E+3,0.305E+3,0.590E+2,0.29128000E+1,0.00000000E+0 - ,0.28246410E+3,0.305E+3,0.600E+2,0.29128000E+1,0.00000000E+0 - ,0.27556100E+3,0.305E+3,0.610E+2,0.29128000E+1,0.00000000E+0 - ,0.26918990E+3,0.305E+3,0.620E+2,0.29128000E+1,0.00000000E+0 - ,0.26354840E+3,0.305E+3,0.630E+2,0.29128000E+1,0.00000000E+0 - ,0.21125650E+3,0.305E+3,0.640E+2,0.29128000E+1,0.00000000E+0 - ,0.23210280E+3,0.305E+3,0.650E+2,0.29128000E+1,0.00000000E+0 - ,0.22459400E+3,0.305E+3,0.660E+2,0.29128000E+1,0.00000000E+0 - ,0.23859840E+3,0.305E+3,0.670E+2,0.29128000E+1,0.00000000E+0 - ,0.23361550E+3,0.305E+3,0.680E+2,0.29128000E+1,0.00000000E+0 - ,0.22917770E+3,0.305E+3,0.690E+2,0.29128000E+1,0.00000000E+0 - ,0.22630560E+3,0.305E+3,0.700E+2,0.29128000E+1,0.00000000E+0 - ,0.19318890E+3,0.305E+3,0.710E+2,0.29128000E+1,0.00000000E+0 - ,0.19317020E+3,0.305E+3,0.720E+2,0.29128000E+1,0.00000000E+0 - ,0.17812490E+3,0.305E+3,0.730E+2,0.29128000E+1,0.00000000E+0 - ,0.15179460E+3,0.305E+3,0.740E+2,0.29128000E+1,0.00000000E+0 - ,0.15495640E+3,0.305E+3,0.750E+2,0.29128000E+1,0.00000000E+0 - ,0.14166610E+3,0.305E+3,0.760E+2,0.29128000E+1,0.00000000E+0 - ,0.13065360E+3,0.305E+3,0.770E+2,0.29128000E+1,0.00000000E+0 - ,0.10940400E+3,0.305E+3,0.780E+2,0.29128000E+1,0.00000000E+0 - ,0.10252010E+3,0.305E+3,0.790E+2,0.29128000E+1,0.00000000E+0 - ,0.10573840E+3,0.305E+3,0.800E+2,0.29128000E+1,0.00000000E+0 - ,0.14882270E+3,0.305E+3,0.810E+2,0.29128000E+1,0.00000000E+0 - ,0.14721780E+3,0.305E+3,0.820E+2,0.29128000E+1,0.00000000E+0 - ,0.13720280E+3,0.305E+3,0.830E+2,0.29128000E+1,0.00000000E+0 - ,0.13195960E+3,0.305E+3,0.840E+2,0.29128000E+1,0.00000000E+0 - ,0.12301010E+3,0.305E+3,0.850E+2,0.29128000E+1,0.00000000E+0 - ,0.11377160E+3,0.305E+3,0.860E+2,0.29128000E+1,0.00000000E+0 - ,0.33435640E+3,0.305E+3,0.870E+2,0.29128000E+1,0.00000000E+0 - ,0.32867970E+3,0.305E+3,0.880E+2,0.29128000E+1,0.00000000E+0 - ,0.29472000E+3,0.305E+3,0.890E+2,0.29128000E+1,0.00000000E+0 - ,0.26950210E+3,0.305E+3,0.900E+2,0.29128000E+1,0.00000000E+0 - ,0.26545030E+3,0.305E+3,0.910E+2,0.29128000E+1,0.00000000E+0 - ,0.25712540E+3,0.305E+3,0.920E+2,0.29128000E+1,0.00000000E+0 - ,0.26182830E+3,0.305E+3,0.930E+2,0.29128000E+1,0.00000000E+0 - ,0.25402630E+3,0.305E+3,0.940E+2,0.29128000E+1,0.00000000E+0 - ,0.15353100E+2,0.305E+3,0.101E+3,0.29128000E+1,0.00000000E+0 - ,0.47033800E+2,0.305E+3,0.103E+3,0.29128000E+1,0.98650000E+0 - ,0.60523400E+2,0.305E+3,0.104E+3,0.29128000E+1,0.98080000E+0 - ,0.47858000E+2,0.305E+3,0.105E+3,0.29128000E+1,0.97060000E+0 - ,0.36816600E+2,0.305E+3,0.106E+3,0.29128000E+1,0.98680000E+0 - ,0.26148100E+2,0.305E+3,0.107E+3,0.29128000E+1,0.99440000E+0 - ,0.19357100E+2,0.305E+3,0.108E+3,0.29128000E+1,0.99250000E+0 - ,0.13558100E+2,0.305E+3,0.109E+3,0.29128000E+1,0.99820000E+0 - ,0.68275500E+2,0.305E+3,0.111E+3,0.29128000E+1,0.96840000E+0 - ,0.10530540E+3,0.305E+3,0.112E+3,0.29128000E+1,0.96280000E+0 - ,0.10855170E+3,0.305E+3,0.113E+3,0.29128000E+1,0.96480000E+0 - ,0.89594800E+2,0.305E+3,0.114E+3,0.29128000E+1,0.95070000E+0 - ,0.74849700E+2,0.305E+3,0.115E+3,0.29128000E+1,0.99470000E+0 - ,0.64157300E+2,0.305E+3,0.116E+3,0.29128000E+1,0.99480000E+0 - ,0.53163800E+2,0.305E+3,0.117E+3,0.29128000E+1,0.99720000E+0 - ,0.95849700E+2,0.305E+3,0.119E+3,0.29128000E+1,0.97670000E+0 - ,0.17514340E+3,0.305E+3,0.120E+3,0.29128000E+1,0.98310000E+0 - ,0.97755000E+2,0.305E+3,0.121E+3,0.29128000E+1,0.18627000E+1 - ,0.94475800E+2,0.305E+3,0.122E+3,0.29128000E+1,0.18299000E+1 - ,0.92545100E+2,0.305E+3,0.123E+3,0.29128000E+1,0.19138000E+1 - ,0.91452800E+2,0.305E+3,0.124E+3,0.29128000E+1,0.18269000E+1 - ,0.85131200E+2,0.305E+3,0.125E+3,0.29128000E+1,0.16406000E+1 - ,0.79083200E+2,0.305E+3,0.126E+3,0.29128000E+1,0.16483000E+1 - ,0.75452500E+2,0.305E+3,0.127E+3,0.29128000E+1,0.17149000E+1 - ,0.73686500E+2,0.305E+3,0.128E+3,0.29128000E+1,0.17937000E+1 - ,0.72121600E+2,0.305E+3,0.129E+3,0.29128000E+1,0.95760000E+0 - ,0.68807700E+2,0.305E+3,0.130E+3,0.29128000E+1,0.19419000E+1 - ,0.10875080E+3,0.305E+3,0.131E+3,0.29128000E+1,0.96010000E+0 - ,0.97495300E+2,0.305E+3,0.132E+3,0.29128000E+1,0.94340000E+0 - ,0.88710800E+2,0.305E+3,0.133E+3,0.29128000E+1,0.98890000E+0 - ,0.81856400E+2,0.305E+3,0.134E+3,0.29128000E+1,0.99010000E+0 - ,0.72922100E+2,0.305E+3,0.135E+3,0.29128000E+1,0.99740000E+0 - ,0.11497210E+3,0.305E+3,0.137E+3,0.29128000E+1,0.97380000E+0 - ,0.21287590E+3,0.305E+3,0.138E+3,0.29128000E+1,0.98010000E+0 - ,0.16813540E+3,0.305E+3,0.139E+3,0.29128000E+1,0.19153000E+1 - ,0.12924090E+3,0.305E+3,0.140E+3,0.29128000E+1,0.19355000E+1 - ,0.13043790E+3,0.305E+3,0.141E+3,0.29128000E+1,0.19545000E+1 - ,0.12219410E+3,0.305E+3,0.142E+3,0.29128000E+1,0.19420000E+1 - ,0.13497050E+3,0.305E+3,0.143E+3,0.29128000E+1,0.16682000E+1 - ,0.10771280E+3,0.305E+3,0.144E+3,0.29128000E+1,0.18584000E+1 - ,0.10089580E+3,0.305E+3,0.145E+3,0.29128000E+1,0.19003000E+1 - ,0.93899700E+2,0.305E+3,0.146E+3,0.29128000E+1,0.18630000E+1 - ,0.90650800E+2,0.305E+3,0.147E+3,0.29128000E+1,0.96790000E+0 - ,0.90427700E+2,0.305E+3,0.148E+3,0.29128000E+1,0.19539000E+1 - ,0.13818550E+3,0.305E+3,0.149E+3,0.29128000E+1,0.96330000E+0 - ,0.12714090E+3,0.305E+3,0.150E+3,0.29128000E+1,0.95140000E+0 - ,0.12050990E+3,0.305E+3,0.151E+3,0.29128000E+1,0.97490000E+0 - ,0.11496400E+3,0.305E+3,0.152E+3,0.29128000E+1,0.98110000E+0 - ,0.10603500E+3,0.305E+3,0.153E+3,0.29128000E+1,0.99680000E+0 - ,0.13780050E+3,0.305E+3,0.155E+3,0.29128000E+1,0.99090000E+0 - ,0.27459140E+3,0.305E+3,0.156E+3,0.29128000E+1,0.97970000E+0 - ,0.21235690E+3,0.305E+3,0.157E+3,0.29128000E+1,0.19373000E+1 - ,0.14039590E+3,0.305E+3,0.159E+3,0.29128000E+1,0.29425000E+1 - ,0.13751220E+3,0.305E+3,0.160E+3,0.29128000E+1,0.29455000E+1 - ,0.13326430E+3,0.305E+3,0.161E+3,0.29128000E+1,0.29413000E+1 - ,0.13360610E+3,0.305E+3,0.162E+3,0.29128000E+1,0.29300000E+1 - ,0.12777250E+3,0.305E+3,0.163E+3,0.29128000E+1,0.18286000E+1 - ,0.13432640E+3,0.305E+3,0.164E+3,0.29128000E+1,0.28732000E+1 - ,0.12641840E+3,0.305E+3,0.165E+3,0.29128000E+1,0.29086000E+1 - ,0.12810090E+3,0.305E+3,0.166E+3,0.29128000E+1,0.28965000E+1 - ,0.12023750E+3,0.305E+3,0.167E+3,0.29128000E+1,0.29242000E+1 - ,0.11690070E+3,0.305E+3,0.168E+3,0.29128000E+1,0.29282000E+1 - ,0.11607540E+3,0.305E+3,0.169E+3,0.29128000E+1,0.29246000E+1 - ,0.12156170E+3,0.305E+3,0.170E+3,0.29128000E+1,0.28482000E+1 - ,0.11232440E+3,0.305E+3,0.171E+3,0.29128000E+1,0.29219000E+1 - ,0.14812250E+3,0.305E+3,0.172E+3,0.29128000E+1,0.19254000E+1 - ,0.13881710E+3,0.305E+3,0.173E+3,0.29128000E+1,0.19459000E+1 - ,0.12792520E+3,0.305E+3,0.174E+3,0.29128000E+1,0.19292000E+1 - ,0.12830620E+3,0.305E+3,0.175E+3,0.29128000E+1,0.18104000E+1 - ,0.11489450E+3,0.305E+3,0.176E+3,0.29128000E+1,0.18858000E+1 - ,0.10845800E+3,0.305E+3,0.177E+3,0.29128000E+1,0.18648000E+1 - ,0.10379770E+3,0.305E+3,0.178E+3,0.29128000E+1,0.19188000E+1 - ,0.99205000E+2,0.305E+3,0.179E+3,0.29128000E+1,0.98460000E+0 - ,0.96600200E+2,0.305E+3,0.180E+3,0.29128000E+1,0.19896000E+1 - ,0.14899930E+3,0.305E+3,0.181E+3,0.29128000E+1,0.92670000E+0 - ,0.13799420E+3,0.305E+3,0.182E+3,0.29128000E+1,0.93830000E+0 - ,0.13500470E+3,0.305E+3,0.183E+3,0.29128000E+1,0.98200000E+0 - ,0.13215970E+3,0.305E+3,0.184E+3,0.29128000E+1,0.98150000E+0 - ,0.12451480E+3,0.305E+3,0.185E+3,0.29128000E+1,0.99540000E+0 - ,0.15534870E+3,0.305E+3,0.187E+3,0.29128000E+1,0.97050000E+0 - ,0.27595780E+3,0.305E+3,0.188E+3,0.29128000E+1,0.96620000E+0 - ,0.16604890E+3,0.305E+3,0.189E+3,0.29128000E+1,0.29070000E+1 - ,0.18911370E+3,0.305E+3,0.190E+3,0.29128000E+1,0.28844000E+1 - ,0.17001950E+3,0.305E+3,0.191E+3,0.29128000E+1,0.28738000E+1 - ,0.15177090E+3,0.305E+3,0.192E+3,0.29128000E+1,0.28878000E+1 - ,0.14638890E+3,0.305E+3,0.193E+3,0.29128000E+1,0.29095000E+1 - ,0.17106450E+3,0.305E+3,0.194E+3,0.29128000E+1,0.19209000E+1 - ,0.40935800E+2,0.305E+3,0.204E+3,0.29128000E+1,0.19697000E+1 - ,0.40519200E+2,0.305E+3,0.205E+3,0.29128000E+1,0.19441000E+1 - ,0.30353600E+2,0.305E+3,0.206E+3,0.29128000E+1,0.19985000E+1 - ,0.24591900E+2,0.305E+3,0.207E+3,0.29128000E+1,0.20143000E+1 - ,0.17142400E+2,0.305E+3,0.208E+3,0.29128000E+1,0.19887000E+1 - ,0.71302300E+2,0.305E+3,0.212E+3,0.29128000E+1,0.19496000E+1 - ,0.86053200E+2,0.305E+3,0.213E+3,0.29128000E+1,0.19311000E+1 - ,0.83658600E+2,0.305E+3,0.214E+3,0.29128000E+1,0.19435000E+1 - ,0.73739700E+2,0.305E+3,0.215E+3,0.29128000E+1,0.20102000E+1 - ,0.62878300E+2,0.305E+3,0.216E+3,0.29128000E+1,0.19903000E+1 - ,0.10006100E+3,0.305E+3,0.220E+3,0.29128000E+1,0.19349000E+1 - ,0.97163200E+2,0.305E+3,0.221E+3,0.29128000E+1,0.28999000E+1 - ,0.98436300E+2,0.305E+3,0.222E+3,0.29128000E+1,0.38675000E+1 - ,0.90057400E+2,0.305E+3,0.223E+3,0.29128000E+1,0.29110000E+1 - ,0.68995800E+2,0.305E+3,0.224E+3,0.29128000E+1,0.10619100E+2 - ,0.59631300E+2,0.305E+3,0.225E+3,0.29128000E+1,0.98849000E+1 - ,0.58451500E+2,0.305E+3,0.226E+3,0.29128000E+1,0.91376000E+1 - ,0.67393200E+2,0.305E+3,0.227E+3,0.29128000E+1,0.29263000E+1 - ,0.63074000E+2,0.305E+3,0.228E+3,0.29128000E+1,0.65458000E+1 - ,0.87768800E+2,0.305E+3,0.231E+3,0.29128000E+1,0.19315000E+1 - ,0.93130100E+2,0.305E+3,0.232E+3,0.29128000E+1,0.19447000E+1 - ,0.86548600E+2,0.305E+3,0.233E+3,0.29128000E+1,0.19793000E+1 - ,0.81240000E+2,0.305E+3,0.234E+3,0.29128000E+1,0.19812000E+1 - ,0.12013000E+3,0.305E+3,0.238E+3,0.29128000E+1,0.19143000E+1 - ,0.11715700E+3,0.305E+3,0.239E+3,0.29128000E+1,0.28903000E+1 - ,0.11862430E+3,0.305E+3,0.240E+3,0.29128000E+1,0.39106000E+1 - ,0.11463280E+3,0.305E+3,0.241E+3,0.29128000E+1,0.29225000E+1 - ,0.10248830E+3,0.305E+3,0.242E+3,0.29128000E+1,0.11055600E+2 - ,0.91251800E+2,0.305E+3,0.243E+3,0.29128000E+1,0.95402000E+1 - ,0.86498600E+2,0.305E+3,0.244E+3,0.29128000E+1,0.88895000E+1 - ,0.87237600E+2,0.305E+3,0.245E+3,0.29128000E+1,0.29696000E+1 - ,0.90828400E+2,0.305E+3,0.246E+3,0.29128000E+1,0.57095000E+1 - ,0.11348260E+3,0.305E+3,0.249E+3,0.29128000E+1,0.19378000E+1 - ,0.12333400E+3,0.305E+3,0.250E+3,0.29128000E+1,0.19505000E+1 - ,0.11753380E+3,0.305E+3,0.251E+3,0.29128000E+1,0.19523000E+1 - ,0.11415530E+3,0.305E+3,0.252E+3,0.29128000E+1,0.19639000E+1 - ,0.14593300E+3,0.305E+3,0.256E+3,0.29128000E+1,0.18467000E+1 - ,0.15222500E+3,0.305E+3,0.257E+3,0.29128000E+1,0.29175000E+1 - ,0.11417940E+3,0.305E+3,0.272E+3,0.29128000E+1,0.38840000E+1 - ,0.11873150E+3,0.305E+3,0.273E+3,0.29128000E+1,0.28988000E+1 - ,0.11142620E+3,0.305E+3,0.274E+3,0.29128000E+1,0.10915300E+2 - ,0.10200810E+3,0.305E+3,0.275E+3,0.29128000E+1,0.98054000E+1 - ,0.96570600E+2,0.305E+3,0.276E+3,0.29128000E+1,0.91527000E+1 - ,0.97623800E+2,0.305E+3,0.277E+3,0.29128000E+1,0.29424000E+1 - ,0.10254510E+3,0.305E+3,0.278E+3,0.29128000E+1,0.66669000E+1 - ,0.12215410E+3,0.305E+3,0.281E+3,0.29128000E+1,0.19302000E+1 - ,0.12915240E+3,0.305E+3,0.282E+3,0.29128000E+1,0.19356000E+1 - ,0.13219470E+3,0.305E+3,0.283E+3,0.29128000E+1,0.19655000E+1 - ,0.13178890E+3,0.305E+3,0.284E+3,0.29128000E+1,0.19639000E+1 - ,0.16086740E+3,0.305E+3,0.288E+3,0.29128000E+1,0.18075000E+1 - ,0.31443600E+2,0.305E+3,0.305E+3,0.29128000E+1,0.29128000E+1 - ,0.88210000E+1,0.306E+3,0.100E+1,0.29987000E+1,0.91180000E+0 - ,0.61196000E+1,0.306E+3,0.200E+1,0.29987000E+1,0.00000000E+0 - ,0.11594980E+3,0.306E+3,0.300E+1,0.29987000E+1,0.00000000E+0 - ,0.71681800E+2,0.306E+3,0.400E+1,0.29987000E+1,0.00000000E+0 - ,0.50530300E+2,0.306E+3,0.500E+1,0.29987000E+1,0.00000000E+0 - ,0.35412900E+2,0.306E+3,0.600E+1,0.29987000E+1,0.00000000E+0 - ,0.25479900E+2,0.306E+3,0.700E+1,0.29987000E+1,0.00000000E+0 - ,0.19694300E+2,0.306E+3,0.800E+1,0.29987000E+1,0.00000000E+0 - ,0.15188300E+2,0.306E+3,0.900E+1,0.29987000E+1,0.00000000E+0 - ,0.11851300E+2,0.306E+3,0.100E+2,0.29987000E+1,0.00000000E+0 - ,0.13937530E+3,0.306E+3,0.110E+2,0.29987000E+1,0.00000000E+0 - ,0.11282100E+3,0.306E+3,0.120E+2,0.29987000E+1,0.00000000E+0 - ,0.10635080E+3,0.306E+3,0.130E+2,0.29987000E+1,0.00000000E+0 - ,0.86399900E+2,0.306E+3,0.140E+2,0.29987000E+1,0.00000000E+0 - ,0.69251500E+2,0.306E+3,0.150E+2,0.29987000E+1,0.00000000E+0 - ,0.58577600E+2,0.306E+3,0.160E+2,0.29987000E+1,0.00000000E+0 - ,0.48744800E+2,0.306E+3,0.170E+2,0.29987000E+1,0.00000000E+0 - ,0.40544100E+2,0.306E+3,0.180E+2,0.29987000E+1,0.00000000E+0 - ,0.22766000E+3,0.306E+3,0.190E+2,0.29987000E+1,0.00000000E+0 - ,0.19467190E+3,0.306E+3,0.200E+2,0.29987000E+1,0.00000000E+0 - ,0.16226090E+3,0.306E+3,0.210E+2,0.29987000E+1,0.00000000E+0 - ,0.15827050E+3,0.306E+3,0.220E+2,0.29987000E+1,0.00000000E+0 - ,0.14575800E+3,0.306E+3,0.230E+2,0.29987000E+1,0.00000000E+0 - ,0.11536970E+3,0.306E+3,0.240E+2,0.29987000E+1,0.00000000E+0 - ,0.12654160E+3,0.306E+3,0.250E+2,0.29987000E+1,0.00000000E+0 - ,0.99901700E+2,0.306E+3,0.260E+2,0.29987000E+1,0.00000000E+0 - ,0.10669170E+3,0.306E+3,0.270E+2,0.29987000E+1,0.00000000E+0 - ,0.10923050E+3,0.306E+3,0.280E+2,0.29987000E+1,0.00000000E+0 - ,0.84202800E+2,0.306E+3,0.290E+2,0.29987000E+1,0.00000000E+0 - ,0.87612400E+2,0.306E+3,0.300E+2,0.29987000E+1,0.00000000E+0 - ,0.10307380E+3,0.306E+3,0.310E+2,0.29987000E+1,0.00000000E+0 - ,0.92962100E+2,0.306E+3,0.320E+2,0.29987000E+1,0.00000000E+0 - ,0.81056300E+2,0.306E+3,0.330E+2,0.29987000E+1,0.00000000E+0 - ,0.73806400E+2,0.306E+3,0.340E+2,0.29987000E+1,0.00000000E+0 - ,0.65586800E+2,0.306E+3,0.350E+2,0.29987000E+1,0.00000000E+0 - ,0.57866500E+2,0.306E+3,0.360E+2,0.29987000E+1,0.00000000E+0 - ,0.25651980E+3,0.306E+3,0.370E+2,0.29987000E+1,0.00000000E+0 - ,0.23200320E+3,0.306E+3,0.380E+2,0.29987000E+1,0.00000000E+0 - ,0.20665890E+3,0.306E+3,0.390E+2,0.29987000E+1,0.00000000E+0 - ,0.18782030E+3,0.306E+3,0.400E+2,0.29987000E+1,0.00000000E+0 - ,0.17263950E+3,0.306E+3,0.410E+2,0.29987000E+1,0.00000000E+0 - ,0.13537160E+3,0.306E+3,0.420E+2,0.29987000E+1,0.00000000E+0 - ,0.15013980E+3,0.306E+3,0.430E+2,0.29987000E+1,0.00000000E+0 - ,0.11632470E+3,0.306E+3,0.440E+2,0.29987000E+1,0.00000000E+0 - ,0.12677780E+3,0.306E+3,0.450E+2,0.29987000E+1,0.00000000E+0 - ,0.11814270E+3,0.306E+3,0.460E+2,0.29987000E+1,0.00000000E+0 - ,0.98703200E+2,0.306E+3,0.470E+2,0.29987000E+1,0.00000000E+0 - ,0.10476920E+3,0.306E+3,0.480E+2,0.29987000E+1,0.00000000E+0 - ,0.12938530E+3,0.306E+3,0.490E+2,0.29987000E+1,0.00000000E+0 - ,0.12165980E+3,0.306E+3,0.500E+2,0.29987000E+1,0.00000000E+0 - ,0.11040890E+3,0.306E+3,0.510E+2,0.29987000E+1,0.00000000E+0 - ,0.10365030E+3,0.306E+3,0.520E+2,0.29987000E+1,0.00000000E+0 - ,0.94948900E+2,0.306E+3,0.530E+2,0.29987000E+1,0.00000000E+0 - ,0.86458100E+2,0.306E+3,0.540E+2,0.29987000E+1,0.00000000E+0 - ,0.31323470E+3,0.306E+3,0.550E+2,0.29987000E+1,0.00000000E+0 - ,0.29471680E+3,0.306E+3,0.560E+2,0.29987000E+1,0.00000000E+0 - ,0.26313810E+3,0.306E+3,0.570E+2,0.29987000E+1,0.00000000E+0 - ,0.13023410E+3,0.306E+3,0.580E+2,0.29987000E+1,0.27991000E+1 - ,0.26266440E+3,0.306E+3,0.590E+2,0.29987000E+1,0.00000000E+0 - ,0.25281970E+3,0.306E+3,0.600E+2,0.29987000E+1,0.00000000E+0 - ,0.24663480E+3,0.306E+3,0.610E+2,0.29987000E+1,0.00000000E+0 - ,0.24092330E+3,0.306E+3,0.620E+2,0.29987000E+1,0.00000000E+0 - ,0.23586410E+3,0.306E+3,0.630E+2,0.29987000E+1,0.00000000E+0 - ,0.18938240E+3,0.306E+3,0.640E+2,0.29987000E+1,0.00000000E+0 - ,0.20816040E+3,0.306E+3,0.650E+2,0.29987000E+1,0.00000000E+0 - ,0.20142940E+3,0.306E+3,0.660E+2,0.29987000E+1,0.00000000E+0 - ,0.21351460E+3,0.306E+3,0.670E+2,0.29987000E+1,0.00000000E+0 - ,0.20904160E+3,0.306E+3,0.680E+2,0.29987000E+1,0.00000000E+0 - ,0.20505940E+3,0.306E+3,0.690E+2,0.29987000E+1,0.00000000E+0 - ,0.20246690E+3,0.306E+3,0.700E+2,0.29987000E+1,0.00000000E+0 - ,0.17301760E+3,0.306E+3,0.710E+2,0.29987000E+1,0.00000000E+0 - ,0.17295930E+3,0.306E+3,0.720E+2,0.29987000E+1,0.00000000E+0 - ,0.15967690E+3,0.306E+3,0.730E+2,0.29987000E+1,0.00000000E+0 - ,0.13642100E+3,0.306E+3,0.740E+2,0.29987000E+1,0.00000000E+0 - ,0.13925850E+3,0.306E+3,0.750E+2,0.29987000E+1,0.00000000E+0 - ,0.12750310E+3,0.306E+3,0.760E+2,0.29987000E+1,0.00000000E+0 - ,0.11776180E+3,0.306E+3,0.770E+2,0.29987000E+1,0.00000000E+0 - ,0.98928700E+2,0.306E+3,0.780E+2,0.29987000E+1,0.00000000E+0 - ,0.92827200E+2,0.306E+3,0.790E+2,0.29987000E+1,0.00000000E+0 - ,0.95685300E+2,0.306E+3,0.800E+2,0.29987000E+1,0.00000000E+0 - ,0.13397180E+3,0.306E+3,0.810E+2,0.29987000E+1,0.00000000E+0 - ,0.13250170E+3,0.306E+3,0.820E+2,0.29987000E+1,0.00000000E+0 - ,0.12364240E+3,0.306E+3,0.830E+2,0.29987000E+1,0.00000000E+0 - ,0.11905310E+3,0.306E+3,0.840E+2,0.29987000E+1,0.00000000E+0 - ,0.11119300E+3,0.306E+3,0.850E+2,0.29987000E+1,0.00000000E+0 - ,0.10307880E+3,0.306E+3,0.860E+2,0.29987000E+1,0.00000000E+0 - ,0.29972370E+3,0.306E+3,0.870E+2,0.29987000E+1,0.00000000E+0 - ,0.29409590E+3,0.306E+3,0.880E+2,0.29987000E+1,0.00000000E+0 - ,0.26375700E+3,0.306E+3,0.890E+2,0.29987000E+1,0.00000000E+0 - ,0.24153050E+3,0.306E+3,0.900E+2,0.29987000E+1,0.00000000E+0 - ,0.23801510E+3,0.306E+3,0.910E+2,0.29987000E+1,0.00000000E+0 - ,0.23059460E+3,0.306E+3,0.920E+2,0.29987000E+1,0.00000000E+0 - ,0.23475660E+3,0.306E+3,0.930E+2,0.29987000E+1,0.00000000E+0 - ,0.22776830E+3,0.306E+3,0.940E+2,0.29987000E+1,0.00000000E+0 - ,0.13799200E+2,0.306E+3,0.101E+3,0.29987000E+1,0.00000000E+0 - ,0.41971300E+2,0.306E+3,0.103E+3,0.29987000E+1,0.98650000E+0 - ,0.54077000E+2,0.306E+3,0.104E+3,0.29987000E+1,0.98080000E+0 - ,0.42964600E+2,0.306E+3,0.105E+3,0.29987000E+1,0.97060000E+0 - ,0.33254000E+2,0.306E+3,0.106E+3,0.29987000E+1,0.98680000E+0 - ,0.23813600E+2,0.306E+3,0.107E+3,0.29987000E+1,0.99440000E+0 - ,0.17775000E+2,0.306E+3,0.108E+3,0.29987000E+1,0.99250000E+0 - ,0.12597000E+2,0.306E+3,0.109E+3,0.29987000E+1,0.99820000E+0 - ,0.61017400E+2,0.306E+3,0.111E+3,0.29987000E+1,0.96840000E+0 - ,0.93997800E+2,0.306E+3,0.112E+3,0.29987000E+1,0.96280000E+0 - ,0.96956000E+2,0.306E+3,0.113E+3,0.29987000E+1,0.96480000E+0 - ,0.80261800E+2,0.306E+3,0.114E+3,0.29987000E+1,0.95070000E+0 - ,0.67308800E+2,0.306E+3,0.115E+3,0.29987000E+1,0.99470000E+0 - ,0.57922100E+2,0.306E+3,0.116E+3,0.29987000E+1,0.99480000E+0 - ,0.48232800E+2,0.306E+3,0.117E+3,0.29987000E+1,0.99720000E+0 - ,0.86148100E+2,0.306E+3,0.119E+3,0.29987000E+1,0.97670000E+0 - ,0.15677020E+3,0.306E+3,0.120E+3,0.29987000E+1,0.98310000E+0 - ,0.87815300E+2,0.306E+3,0.121E+3,0.29987000E+1,0.18627000E+1 - ,0.84925300E+2,0.306E+3,0.122E+3,0.29987000E+1,0.18299000E+1 - ,0.83211100E+2,0.306E+3,0.123E+3,0.29987000E+1,0.19138000E+1 - ,0.82233100E+2,0.306E+3,0.124E+3,0.29987000E+1,0.18269000E+1 - ,0.76584600E+2,0.306E+3,0.125E+3,0.29987000E+1,0.16406000E+1 - ,0.71211000E+2,0.306E+3,0.126E+3,0.29987000E+1,0.16483000E+1 - ,0.67977400E+2,0.306E+3,0.127E+3,0.29987000E+1,0.17149000E+1 - ,0.66389700E+2,0.306E+3,0.128E+3,0.29987000E+1,0.17937000E+1 - ,0.64964100E+2,0.306E+3,0.129E+3,0.29987000E+1,0.95760000E+0 - ,0.62022800E+2,0.306E+3,0.130E+3,0.29987000E+1,0.19419000E+1 - ,0.97383800E+2,0.306E+3,0.131E+3,0.29987000E+1,0.96010000E+0 - ,0.87478100E+2,0.306E+3,0.132E+3,0.29987000E+1,0.94340000E+0 - ,0.79798600E+2,0.306E+3,0.133E+3,0.29987000E+1,0.98890000E+0 - ,0.73825700E+2,0.306E+3,0.134E+3,0.29987000E+1,0.99010000E+0 - ,0.65996700E+2,0.306E+3,0.135E+3,0.29987000E+1,0.99740000E+0 - ,0.10345590E+3,0.306E+3,0.137E+3,0.29987000E+1,0.97380000E+0 - ,0.19069760E+3,0.306E+3,0.138E+3,0.29987000E+1,0.98010000E+0 - ,0.15078940E+3,0.306E+3,0.139E+3,0.29987000E+1,0.19153000E+1 - ,0.11619730E+3,0.306E+3,0.140E+3,0.29987000E+1,0.19355000E+1 - ,0.11730510E+3,0.306E+3,0.141E+3,0.29987000E+1,0.19545000E+1 - ,0.11002550E+3,0.306E+3,0.142E+3,0.29987000E+1,0.19420000E+1 - ,0.12143810E+3,0.306E+3,0.143E+3,0.29987000E+1,0.16682000E+1 - ,0.97174400E+2,0.306E+3,0.144E+3,0.29987000E+1,0.18584000E+1 - ,0.91117100E+2,0.306E+3,0.145E+3,0.29987000E+1,0.19003000E+1 - ,0.84895400E+2,0.306E+3,0.146E+3,0.29987000E+1,0.18630000E+1 - ,0.81971500E+2,0.306E+3,0.147E+3,0.29987000E+1,0.96790000E+0 - ,0.81750000E+2,0.306E+3,0.148E+3,0.29987000E+1,0.19539000E+1 - ,0.12410850E+3,0.306E+3,0.149E+3,0.29987000E+1,0.96330000E+0 - ,0.11430720E+3,0.306E+3,0.150E+3,0.29987000E+1,0.95140000E+0 - ,0.10848830E+3,0.306E+3,0.151E+3,0.29987000E+1,0.97490000E+0 - ,0.10364770E+3,0.306E+3,0.152E+3,0.29987000E+1,0.98110000E+0 - ,0.95813900E+2,0.306E+3,0.153E+3,0.29987000E+1,0.99680000E+0 - ,0.12398030E+3,0.306E+3,0.155E+3,0.29987000E+1,0.99090000E+0 - ,0.24612560E+3,0.306E+3,0.156E+3,0.29987000E+1,0.97970000E+0 - ,0.19047850E+3,0.306E+3,0.157E+3,0.29987000E+1,0.19373000E+1 - ,0.12645720E+3,0.306E+3,0.159E+3,0.29987000E+1,0.29425000E+1 - ,0.12386820E+3,0.306E+3,0.160E+3,0.29987000E+1,0.29455000E+1 - ,0.12006680E+3,0.306E+3,0.161E+3,0.29987000E+1,0.29413000E+1 - ,0.12034080E+3,0.306E+3,0.162E+3,0.29987000E+1,0.29300000E+1 - ,0.11507330E+3,0.306E+3,0.163E+3,0.29987000E+1,0.18286000E+1 - ,0.12093240E+3,0.306E+3,0.164E+3,0.29987000E+1,0.28732000E+1 - ,0.11387540E+3,0.306E+3,0.165E+3,0.29987000E+1,0.29086000E+1 - ,0.11534910E+3,0.306E+3,0.166E+3,0.29987000E+1,0.28965000E+1 - ,0.10832620E+3,0.306E+3,0.167E+3,0.29987000E+1,0.29242000E+1 - ,0.10533020E+3,0.306E+3,0.168E+3,0.29987000E+1,0.29282000E+1 - ,0.10456940E+3,0.306E+3,0.169E+3,0.29987000E+1,0.29246000E+1 - ,0.10938790E+3,0.306E+3,0.170E+3,0.29987000E+1,0.28482000E+1 - ,0.10119050E+3,0.306E+3,0.171E+3,0.29987000E+1,0.29219000E+1 - ,0.13303630E+3,0.306E+3,0.172E+3,0.29987000E+1,0.19254000E+1 - ,0.12486130E+3,0.306E+3,0.173E+3,0.29987000E+1,0.19459000E+1 - ,0.11526060E+3,0.306E+3,0.174E+3,0.29987000E+1,0.19292000E+1 - ,0.11551780E+3,0.306E+3,0.175E+3,0.29987000E+1,0.18104000E+1 - ,0.10377670E+3,0.306E+3,0.176E+3,0.29987000E+1,0.18858000E+1 - ,0.98098700E+2,0.306E+3,0.177E+3,0.29987000E+1,0.18648000E+1 - ,0.93979300E+2,0.306E+3,0.178E+3,0.29987000E+1,0.19188000E+1 - ,0.89905200E+2,0.306E+3,0.179E+3,0.29987000E+1,0.98460000E+0 - ,0.87593000E+2,0.306E+3,0.180E+3,0.29987000E+1,0.19896000E+1 - ,0.13410840E+3,0.306E+3,0.181E+3,0.29987000E+1,0.92670000E+0 - ,0.12432080E+3,0.306E+3,0.182E+3,0.29987000E+1,0.93830000E+0 - ,0.12170140E+3,0.306E+3,0.183E+3,0.29987000E+1,0.98200000E+0 - ,0.11924010E+3,0.306E+3,0.184E+3,0.29987000E+1,0.98150000E+0 - ,0.11253730E+3,0.306E+3,0.185E+3,0.29987000E+1,0.99540000E+0 - ,0.13975100E+3,0.306E+3,0.187E+3,0.29987000E+1,0.97050000E+0 - ,0.24737300E+3,0.306E+3,0.188E+3,0.29987000E+1,0.96620000E+0 - ,0.14949980E+3,0.306E+3,0.189E+3,0.29987000E+1,0.29070000E+1 - ,0.17017100E+3,0.306E+3,0.190E+3,0.29987000E+1,0.28844000E+1 - ,0.15324030E+3,0.306E+3,0.191E+3,0.29987000E+1,0.28738000E+1 - ,0.13692210E+3,0.306E+3,0.192E+3,0.29987000E+1,0.28878000E+1 - ,0.13212700E+3,0.306E+3,0.193E+3,0.29987000E+1,0.29095000E+1 - ,0.15407130E+3,0.306E+3,0.194E+3,0.29987000E+1,0.19209000E+1 - ,0.36697700E+2,0.306E+3,0.204E+3,0.29987000E+1,0.19697000E+1 - ,0.36460400E+2,0.306E+3,0.205E+3,0.29987000E+1,0.19441000E+1 - ,0.27506300E+2,0.306E+3,0.206E+3,0.29987000E+1,0.19985000E+1 - ,0.22427900E+2,0.306E+3,0.207E+3,0.29987000E+1,0.20143000E+1 - ,0.15800900E+2,0.306E+3,0.208E+3,0.29987000E+1,0.19887000E+1 - ,0.63794400E+2,0.306E+3,0.212E+3,0.29987000E+1,0.19496000E+1 - ,0.77008700E+2,0.306E+3,0.213E+3,0.29987000E+1,0.19311000E+1 - ,0.74996700E+2,0.306E+3,0.214E+3,0.29987000E+1,0.19435000E+1 - ,0.66319400E+2,0.306E+3,0.215E+3,0.29987000E+1,0.20102000E+1 - ,0.56782600E+2,0.306E+3,0.216E+3,0.29987000E+1,0.19903000E+1 - ,0.89828500E+2,0.306E+3,0.220E+3,0.29987000E+1,0.19349000E+1 - ,0.87304800E+2,0.306E+3,0.221E+3,0.29987000E+1,0.28999000E+1 - ,0.88470300E+2,0.306E+3,0.222E+3,0.29987000E+1,0.38675000E+1 - ,0.81022900E+2,0.306E+3,0.223E+3,0.29987000E+1,0.29110000E+1 - ,0.62396300E+2,0.306E+3,0.224E+3,0.29987000E+1,0.10619100E+2 - ,0.54067600E+2,0.306E+3,0.225E+3,0.29987000E+1,0.98849000E+1 - ,0.52992800E+2,0.306E+3,0.226E+3,0.29987000E+1,0.91376000E+1 - ,0.60851300E+2,0.306E+3,0.227E+3,0.29987000E+1,0.29263000E+1 - ,0.57004600E+2,0.306E+3,0.228E+3,0.29987000E+1,0.65458000E+1 - ,0.78781200E+2,0.306E+3,0.231E+3,0.29987000E+1,0.19315000E+1 - ,0.83613100E+2,0.306E+3,0.232E+3,0.29987000E+1,0.19447000E+1 - ,0.77887400E+2,0.306E+3,0.233E+3,0.29987000E+1,0.19793000E+1 - ,0.73281400E+2,0.306E+3,0.234E+3,0.29987000E+1,0.19812000E+1 - ,0.10796880E+3,0.306E+3,0.238E+3,0.29987000E+1,0.19143000E+1 - ,0.10538580E+3,0.306E+3,0.239E+3,0.29987000E+1,0.28903000E+1 - ,0.10676290E+3,0.306E+3,0.240E+3,0.29987000E+1,0.39106000E+1 - ,0.10327750E+3,0.306E+3,0.241E+3,0.29987000E+1,0.29225000E+1 - ,0.92598300E+2,0.306E+3,0.242E+3,0.29987000E+1,0.11055600E+2 - ,0.82649600E+2,0.306E+3,0.243E+3,0.29987000E+1,0.95402000E+1 - ,0.78436800E+2,0.306E+3,0.244E+3,0.29987000E+1,0.88895000E+1 - ,0.79027900E+2,0.306E+3,0.245E+3,0.29987000E+1,0.29696000E+1 - ,0.82193000E+2,0.306E+3,0.246E+3,0.29987000E+1,0.57095000E+1 - ,0.10218770E+3,0.306E+3,0.249E+3,0.29987000E+1,0.19378000E+1 - ,0.11093720E+3,0.306E+3,0.250E+3,0.29987000E+1,0.19505000E+1 - ,0.10585840E+3,0.306E+3,0.251E+3,0.29987000E+1,0.19523000E+1 - ,0.10293730E+3,0.306E+3,0.252E+3,0.29987000E+1,0.19639000E+1 - ,0.13126760E+3,0.306E+3,0.256E+3,0.29987000E+1,0.18467000E+1 - ,0.13686860E+3,0.306E+3,0.257E+3,0.29987000E+1,0.29175000E+1 - ,0.10287240E+3,0.306E+3,0.272E+3,0.29987000E+1,0.38840000E+1 - ,0.10702160E+3,0.306E+3,0.273E+3,0.29987000E+1,0.28988000E+1 - ,0.10067270E+3,0.306E+3,0.274E+3,0.29987000E+1,0.10915300E+2 - ,0.92374800E+2,0.306E+3,0.275E+3,0.29987000E+1,0.98054000E+1 - ,0.87606400E+2,0.306E+3,0.276E+3,0.29987000E+1,0.91527000E+1 - ,0.88522700E+2,0.306E+3,0.277E+3,0.29987000E+1,0.29424000E+1 - ,0.92901000E+2,0.306E+3,0.278E+3,0.29987000E+1,0.66669000E+1 - ,0.11026110E+3,0.306E+3,0.281E+3,0.29987000E+1,0.19302000E+1 - ,0.11648110E+3,0.306E+3,0.282E+3,0.29987000E+1,0.19356000E+1 - ,0.11921790E+3,0.306E+3,0.283E+3,0.29987000E+1,0.19655000E+1 - ,0.11892080E+3,0.306E+3,0.284E+3,0.29987000E+1,0.19639000E+1 - ,0.14470670E+3,0.306E+3,0.288E+3,0.29987000E+1,0.18075000E+1 - ,0.28412100E+2,0.306E+3,0.305E+3,0.29987000E+1,0.29128000E+1 - ,0.25780900E+2,0.306E+3,0.306E+3,0.29987000E+1,0.29987000E+1 - ,0.67746000E+1,0.307E+3,0.100E+1,0.29903000E+1,0.91180000E+0 - ,0.48836000E+1,0.307E+3,0.200E+1,0.29903000E+1,0.00000000E+0 - ,0.81977000E+2,0.307E+3,0.300E+1,0.29903000E+1,0.00000000E+0 - ,0.52023700E+2,0.307E+3,0.400E+1,0.29903000E+1,0.00000000E+0 - ,0.37568500E+2,0.307E+3,0.500E+1,0.29903000E+1,0.00000000E+0 - ,0.26935100E+2,0.307E+3,0.600E+1,0.29903000E+1,0.00000000E+0 - ,0.19770700E+2,0.307E+3,0.700E+1,0.29903000E+1,0.00000000E+0 - ,0.15524900E+2,0.307E+3,0.800E+1,0.29903000E+1,0.00000000E+0 - ,0.12151100E+2,0.307E+3,0.900E+1,0.29903000E+1,0.00000000E+0 - ,0.96050000E+1,0.307E+3,0.100E+2,0.29903000E+1,0.00000000E+0 - ,0.98880600E+2,0.307E+3,0.110E+2,0.29903000E+1,0.00000000E+0 - ,0.81535200E+2,0.307E+3,0.120E+2,0.29903000E+1,0.00000000E+0 - ,0.77652000E+2,0.307E+3,0.130E+2,0.29903000E+1,0.00000000E+0 - ,0.64057600E+2,0.307E+3,0.140E+2,0.29903000E+1,0.00000000E+0 - ,0.52150900E+2,0.307E+3,0.150E+2,0.29903000E+1,0.00000000E+0 - ,0.44652900E+2,0.307E+3,0.160E+2,0.29903000E+1,0.00000000E+0 - ,0.37629500E+2,0.307E+3,0.170E+2,0.29903000E+1,0.00000000E+0 - ,0.31680400E+2,0.307E+3,0.180E+2,0.29903000E+1,0.00000000E+0 - ,0.16201600E+3,0.307E+3,0.190E+2,0.29903000E+1,0.00000000E+0 - ,0.14002730E+3,0.307E+3,0.200E+2,0.29903000E+1,0.00000000E+0 - ,0.11711120E+3,0.307E+3,0.210E+2,0.29903000E+1,0.00000000E+0 - ,0.11482560E+3,0.307E+3,0.220E+2,0.29903000E+1,0.00000000E+0 - ,0.10604890E+3,0.307E+3,0.230E+2,0.29903000E+1,0.00000000E+0 - ,0.84363100E+2,0.307E+3,0.240E+2,0.29903000E+1,0.00000000E+0 - ,0.92463600E+2,0.307E+3,0.250E+2,0.29903000E+1,0.00000000E+0 - ,0.73418500E+2,0.307E+3,0.260E+2,0.29903000E+1,0.00000000E+0 - ,0.78469600E+2,0.307E+3,0.270E+2,0.29903000E+1,0.00000000E+0 - ,0.80085300E+2,0.307E+3,0.280E+2,0.29903000E+1,0.00000000E+0 - ,0.62129900E+2,0.307E+3,0.290E+2,0.29903000E+1,0.00000000E+0 - ,0.64863300E+2,0.307E+3,0.300E+2,0.29903000E+1,0.00000000E+0 - ,0.75880000E+2,0.307E+3,0.310E+2,0.29903000E+1,0.00000000E+0 - ,0.69171000E+2,0.307E+3,0.320E+2,0.29903000E+1,0.00000000E+0 - ,0.61042500E+2,0.307E+3,0.330E+2,0.29903000E+1,0.00000000E+0 - ,0.56081200E+2,0.307E+3,0.340E+2,0.29903000E+1,0.00000000E+0 - ,0.50334400E+2,0.307E+3,0.350E+2,0.29903000E+1,0.00000000E+0 - ,0.44854600E+2,0.307E+3,0.360E+2,0.29903000E+1,0.00000000E+0 - ,0.18314860E+3,0.307E+3,0.370E+2,0.29903000E+1,0.00000000E+0 - ,0.16708650E+3,0.307E+3,0.380E+2,0.29903000E+1,0.00000000E+0 - ,0.14989060E+3,0.307E+3,0.390E+2,0.29903000E+1,0.00000000E+0 - ,0.13695780E+3,0.307E+3,0.400E+2,0.29903000E+1,0.00000000E+0 - ,0.12643070E+3,0.307E+3,0.410E+2,0.29903000E+1,0.00000000E+0 - ,0.10010800E+3,0.307E+3,0.420E+2,0.29903000E+1,0.00000000E+0 - ,0.11061190E+3,0.307E+3,0.430E+2,0.29903000E+1,0.00000000E+0 - ,0.86616300E+2,0.307E+3,0.440E+2,0.29903000E+1,0.00000000E+0 - ,0.94100700E+2,0.307E+3,0.450E+2,0.29903000E+1,0.00000000E+0 - ,0.87943000E+2,0.307E+3,0.460E+2,0.29903000E+1,0.00000000E+0 - ,0.73805700E+2,0.307E+3,0.470E+2,0.29903000E+1,0.00000000E+0 - ,0.78301600E+2,0.307E+3,0.480E+2,0.29903000E+1,0.00000000E+0 - ,0.95772700E+2,0.307E+3,0.490E+2,0.29903000E+1,0.00000000E+0 - ,0.90687600E+2,0.307E+3,0.500E+2,0.29903000E+1,0.00000000E+0 - ,0.83057700E+2,0.307E+3,0.510E+2,0.29903000E+1,0.00000000E+0 - ,0.78481900E+2,0.307E+3,0.520E+2,0.29903000E+1,0.00000000E+0 - ,0.72453100E+2,0.307E+3,0.530E+2,0.29903000E+1,0.00000000E+0 - ,0.66508100E+2,0.307E+3,0.540E+2,0.29903000E+1,0.00000000E+0 - ,0.22390760E+3,0.307E+3,0.550E+2,0.29903000E+1,0.00000000E+0 - ,0.21212970E+3,0.307E+3,0.560E+2,0.29903000E+1,0.00000000E+0 - ,0.19063700E+3,0.307E+3,0.570E+2,0.29903000E+1,0.00000000E+0 - ,0.97988200E+2,0.307E+3,0.580E+2,0.29903000E+1,0.27991000E+1 - ,0.18970840E+3,0.307E+3,0.590E+2,0.29903000E+1,0.00000000E+0 - ,0.18275600E+3,0.307E+3,0.600E+2,0.29903000E+1,0.00000000E+0 - ,0.17832410E+3,0.307E+3,0.610E+2,0.29903000E+1,0.00000000E+0 - ,0.17422140E+3,0.307E+3,0.620E+2,0.29903000E+1,0.00000000E+0 - ,0.17058700E+3,0.307E+3,0.630E+2,0.29903000E+1,0.00000000E+0 - ,0.13842980E+3,0.307E+3,0.640E+2,0.29903000E+1,0.00000000E+0 - ,0.15082040E+3,0.307E+3,0.650E+2,0.29903000E+1,0.00000000E+0 - ,0.14614450E+3,0.307E+3,0.660E+2,0.29903000E+1,0.00000000E+0 - ,0.15462870E+3,0.307E+3,0.670E+2,0.29903000E+1,0.00000000E+0 - ,0.15139240E+3,0.307E+3,0.680E+2,0.29903000E+1,0.00000000E+0 - ,0.14852730E+3,0.307E+3,0.690E+2,0.29903000E+1,0.00000000E+0 - ,0.14657090E+3,0.307E+3,0.700E+2,0.29903000E+1,0.00000000E+0 - ,0.12614450E+3,0.307E+3,0.710E+2,0.29903000E+1,0.00000000E+0 - ,0.12685210E+3,0.307E+3,0.720E+2,0.29903000E+1,0.00000000E+0 - ,0.11782080E+3,0.307E+3,0.730E+2,0.29903000E+1,0.00000000E+0 - ,0.10145610E+3,0.307E+3,0.740E+2,0.29903000E+1,0.00000000E+0 - ,0.10369670E+3,0.307E+3,0.750E+2,0.29903000E+1,0.00000000E+0 - ,0.95491900E+2,0.307E+3,0.760E+2,0.29903000E+1,0.00000000E+0 - ,0.88641300E+2,0.307E+3,0.770E+2,0.29903000E+1,0.00000000E+0 - ,0.75088300E+2,0.307E+3,0.780E+2,0.29903000E+1,0.00000000E+0 - ,0.70691000E+2,0.307E+3,0.790E+2,0.29903000E+1,0.00000000E+0 - ,0.72867700E+2,0.307E+3,0.800E+2,0.29903000E+1,0.00000000E+0 - ,0.99854500E+2,0.307E+3,0.810E+2,0.29903000E+1,0.00000000E+0 - ,0.99155700E+2,0.307E+3,0.820E+2,0.29903000E+1,0.00000000E+0 - ,0.93202900E+2,0.307E+3,0.830E+2,0.29903000E+1,0.00000000E+0 - ,0.90185300E+2,0.307E+3,0.840E+2,0.29903000E+1,0.00000000E+0 - ,0.84799100E+2,0.307E+3,0.850E+2,0.29903000E+1,0.00000000E+0 - ,0.79155500E+2,0.307E+3,0.860E+2,0.29903000E+1,0.00000000E+0 - ,0.21546340E+3,0.307E+3,0.870E+2,0.29903000E+1,0.00000000E+0 - ,0.21255240E+3,0.307E+3,0.880E+2,0.29903000E+1,0.00000000E+0 - ,0.19179540E+3,0.307E+3,0.890E+2,0.29903000E+1,0.00000000E+0 - ,0.17728870E+3,0.307E+3,0.900E+2,0.29903000E+1,0.00000000E+0 - ,0.17432070E+3,0.307E+3,0.910E+2,0.29903000E+1,0.00000000E+0 - ,0.16896800E+3,0.307E+3,0.920E+2,0.29903000E+1,0.00000000E+0 - ,0.17120630E+3,0.307E+3,0.930E+2,0.29903000E+1,0.00000000E+0 - ,0.16624200E+3,0.307E+3,0.940E+2,0.29903000E+1,0.00000000E+0 - ,0.10398700E+2,0.307E+3,0.101E+3,0.29903000E+1,0.00000000E+0 - ,0.30602200E+2,0.307E+3,0.103E+3,0.29903000E+1,0.98650000E+0 - ,0.39647800E+2,0.307E+3,0.104E+3,0.29903000E+1,0.98080000E+0 - ,0.32164400E+2,0.307E+3,0.105E+3,0.29903000E+1,0.97060000E+0 - ,0.25331800E+2,0.307E+3,0.106E+3,0.29903000E+1,0.98680000E+0 - ,0.18518000E+2,0.307E+3,0.107E+3,0.29903000E+1,0.99440000E+0 - ,0.14079300E+2,0.307E+3,0.108E+3,0.29903000E+1,0.99250000E+0 - ,0.10221400E+2,0.307E+3,0.109E+3,0.29903000E+1,0.99820000E+0 - ,0.44492400E+2,0.307E+3,0.111E+3,0.29903000E+1,0.96840000E+0 - ,0.68314100E+2,0.307E+3,0.112E+3,0.29903000E+1,0.96280000E+0 - ,0.71023100E+2,0.307E+3,0.113E+3,0.29903000E+1,0.96480000E+0 - ,0.59688700E+2,0.307E+3,0.114E+3,0.29903000E+1,0.95070000E+0 - ,0.50739800E+2,0.307E+3,0.115E+3,0.29903000E+1,0.99470000E+0 - ,0.44158100E+2,0.307E+3,0.116E+3,0.29903000E+1,0.99480000E+0 - ,0.37238100E+2,0.307E+3,0.117E+3,0.29903000E+1,0.99720000E+0 - ,0.63868600E+2,0.307E+3,0.119E+3,0.29903000E+1,0.97670000E+0 - ,0.11341610E+3,0.307E+3,0.120E+3,0.29903000E+1,0.98310000E+0 - ,0.65520300E+2,0.307E+3,0.121E+3,0.29903000E+1,0.18627000E+1 - ,0.63464500E+2,0.307E+3,0.122E+3,0.29903000E+1,0.18299000E+1 - ,0.62202000E+2,0.307E+3,0.123E+3,0.29903000E+1,0.19138000E+1 - ,0.61420200E+2,0.307E+3,0.124E+3,0.29903000E+1,0.18269000E+1 - ,0.57491500E+2,0.307E+3,0.125E+3,0.29903000E+1,0.16406000E+1 - ,0.53617100E+2,0.307E+3,0.126E+3,0.29903000E+1,0.16483000E+1 - ,0.51231800E+2,0.307E+3,0.127E+3,0.29903000E+1,0.17149000E+1 - ,0.50021800E+2,0.307E+3,0.128E+3,0.29903000E+1,0.17937000E+1 - ,0.48763000E+2,0.307E+3,0.129E+3,0.29903000E+1,0.95760000E+0 - ,0.46891100E+2,0.307E+3,0.130E+3,0.29903000E+1,0.19419000E+1 - ,0.71907900E+2,0.307E+3,0.131E+3,0.29903000E+1,0.96010000E+0 - ,0.65304100E+2,0.307E+3,0.132E+3,0.29903000E+1,0.94340000E+0 - ,0.60151900E+2,0.307E+3,0.133E+3,0.29903000E+1,0.98890000E+0 - ,0.56096200E+2,0.307E+3,0.134E+3,0.29903000E+1,0.99010000E+0 - ,0.50629800E+2,0.307E+3,0.135E+3,0.29903000E+1,0.99740000E+0 - ,0.77004000E+2,0.307E+3,0.137E+3,0.29903000E+1,0.97380000E+0 - ,0.13809270E+3,0.307E+3,0.138E+3,0.29903000E+1,0.98010000E+0 - ,0.11082380E+3,0.307E+3,0.139E+3,0.29903000E+1,0.19153000E+1 - ,0.86803500E+2,0.307E+3,0.140E+3,0.29903000E+1,0.19355000E+1 - ,0.87650400E+2,0.307E+3,0.141E+3,0.29903000E+1,0.19545000E+1 - ,0.82525100E+2,0.307E+3,0.142E+3,0.29903000E+1,0.19420000E+1 - ,0.90466000E+2,0.307E+3,0.143E+3,0.29903000E+1,0.16682000E+1 - ,0.73425900E+2,0.307E+3,0.144E+3,0.29903000E+1,0.18584000E+1 - ,0.69000500E+2,0.307E+3,0.145E+3,0.29903000E+1,0.19003000E+1 - ,0.64465100E+2,0.307E+3,0.146E+3,0.29903000E+1,0.18630000E+1 - ,0.62220900E+2,0.307E+3,0.147E+3,0.29903000E+1,0.96790000E+0 - ,0.62213100E+2,0.307E+3,0.148E+3,0.29903000E+1,0.19539000E+1 - ,0.92140300E+2,0.307E+3,0.149E+3,0.29903000E+1,0.96330000E+0 - ,0.85547900E+2,0.307E+3,0.150E+3,0.29903000E+1,0.95140000E+0 - ,0.81727900E+2,0.307E+3,0.151E+3,0.29903000E+1,0.97490000E+0 - ,0.78506700E+2,0.307E+3,0.152E+3,0.29903000E+1,0.98110000E+0 - ,0.73095400E+2,0.307E+3,0.153E+3,0.29903000E+1,0.99680000E+0 - ,0.92705000E+2,0.307E+3,0.155E+3,0.29903000E+1,0.99090000E+0 - ,0.17805360E+3,0.307E+3,0.156E+3,0.29903000E+1,0.97970000E+0 - ,0.13991280E+3,0.307E+3,0.157E+3,0.29903000E+1,0.19373000E+1 - ,0.95217800E+2,0.307E+3,0.159E+3,0.29903000E+1,0.29425000E+1 - ,0.93284100E+2,0.307E+3,0.160E+3,0.29903000E+1,0.29455000E+1 - ,0.90480700E+2,0.307E+3,0.161E+3,0.29903000E+1,0.29413000E+1 - ,0.90568200E+2,0.307E+3,0.162E+3,0.29903000E+1,0.29300000E+1 - ,0.86338600E+2,0.307E+3,0.163E+3,0.29903000E+1,0.18286000E+1 - ,0.90910000E+2,0.307E+3,0.164E+3,0.29903000E+1,0.28732000E+1 - ,0.85747500E+2,0.307E+3,0.165E+3,0.29903000E+1,0.29086000E+1 - ,0.86674000E+2,0.307E+3,0.166E+3,0.29903000E+1,0.28965000E+1 - ,0.81652000E+2,0.307E+3,0.167E+3,0.29903000E+1,0.29242000E+1 - ,0.79429100E+2,0.307E+3,0.168E+3,0.29903000E+1,0.29282000E+1 - ,0.78815000E+2,0.307E+3,0.169E+3,0.29903000E+1,0.29246000E+1 - ,0.82180600E+2,0.307E+3,0.170E+3,0.29903000E+1,0.28482000E+1 - ,0.76300400E+2,0.307E+3,0.171E+3,0.29903000E+1,0.29219000E+1 - ,0.98802500E+2,0.307E+3,0.172E+3,0.29903000E+1,0.19254000E+1 - ,0.93300800E+2,0.307E+3,0.173E+3,0.29903000E+1,0.19459000E+1 - ,0.86690900E+2,0.307E+3,0.174E+3,0.29903000E+1,0.19292000E+1 - ,0.86498300E+2,0.307E+3,0.175E+3,0.29903000E+1,0.18104000E+1 - ,0.78773500E+2,0.307E+3,0.176E+3,0.29903000E+1,0.18858000E+1 - ,0.74726900E+2,0.307E+3,0.177E+3,0.29903000E+1,0.18648000E+1 - ,0.71762400E+2,0.307E+3,0.178E+3,0.29903000E+1,0.19188000E+1 - ,0.68753800E+2,0.307E+3,0.179E+3,0.29903000E+1,0.98460000E+0 - ,0.67229300E+2,0.307E+3,0.180E+3,0.29903000E+1,0.19896000E+1 - ,0.10008700E+3,0.307E+3,0.181E+3,0.29903000E+1,0.92670000E+0 - ,0.93482100E+2,0.307E+3,0.182E+3,0.29903000E+1,0.93830000E+0 - ,0.91896500E+2,0.307E+3,0.183E+3,0.29903000E+1,0.98200000E+0 - ,0.90376000E+2,0.307E+3,0.184E+3,0.29903000E+1,0.98150000E+0 - ,0.85807500E+2,0.307E+3,0.185E+3,0.29903000E+1,0.99540000E+0 - ,0.10451280E+3,0.307E+3,0.187E+3,0.29903000E+1,0.97050000E+0 - ,0.17971610E+3,0.307E+3,0.188E+3,0.29903000E+1,0.96620000E+0 - ,0.11246690E+3,0.307E+3,0.189E+3,0.29903000E+1,0.29070000E+1 - ,0.12728190E+3,0.307E+3,0.190E+3,0.29903000E+1,0.28844000E+1 - ,0.11517510E+3,0.307E+3,0.191E+3,0.29903000E+1,0.28738000E+1 - ,0.10344890E+3,0.307E+3,0.192E+3,0.29903000E+1,0.28878000E+1 - ,0.99987800E+2,0.307E+3,0.193E+3,0.29903000E+1,0.29095000E+1 - ,0.11495380E+3,0.307E+3,0.194E+3,0.29903000E+1,0.19209000E+1 - ,0.27422500E+2,0.307E+3,0.204E+3,0.29903000E+1,0.19697000E+1 - ,0.27484200E+2,0.307E+3,0.205E+3,0.29903000E+1,0.19441000E+1 - ,0.21148800E+2,0.307E+3,0.206E+3,0.29903000E+1,0.19985000E+1 - ,0.17492800E+2,0.307E+3,0.207E+3,0.29903000E+1,0.20143000E+1 - ,0.12607700E+2,0.307E+3,0.208E+3,0.29903000E+1,0.19887000E+1 - ,0.47205900E+2,0.307E+3,0.212E+3,0.29903000E+1,0.19496000E+1 - ,0.56971300E+2,0.307E+3,0.213E+3,0.29903000E+1,0.19311000E+1 - ,0.55919700E+2,0.307E+3,0.214E+3,0.29903000E+1,0.19435000E+1 - ,0.49981800E+2,0.307E+3,0.215E+3,0.29903000E+1,0.20102000E+1 - ,0.43313000E+2,0.307E+3,0.216E+3,0.29903000E+1,0.19903000E+1 - ,0.66870600E+2,0.307E+3,0.220E+3,0.29903000E+1,0.19349000E+1 - ,0.65341500E+2,0.307E+3,0.221E+3,0.29903000E+1,0.28999000E+1 - ,0.66260700E+2,0.307E+3,0.222E+3,0.29903000E+1,0.38675000E+1 - ,0.60783400E+2,0.307E+3,0.223E+3,0.29903000E+1,0.29110000E+1 - ,0.47503300E+2,0.307E+3,0.224E+3,0.29903000E+1,0.10619100E+2 - ,0.41486200E+2,0.307E+3,0.225E+3,0.29903000E+1,0.98849000E+1 - ,0.40637600E+2,0.307E+3,0.226E+3,0.29903000E+1,0.91376000E+1 - ,0.46084100E+2,0.307E+3,0.227E+3,0.29903000E+1,0.29263000E+1 - ,0.43309600E+2,0.307E+3,0.228E+3,0.29903000E+1,0.65458000E+1 - ,0.58812600E+2,0.307E+3,0.231E+3,0.29903000E+1,0.19315000E+1 - ,0.62560900E+2,0.307E+3,0.232E+3,0.29903000E+1,0.19447000E+1 - ,0.58794500E+2,0.307E+3,0.233E+3,0.29903000E+1,0.19793000E+1 - ,0.55703700E+2,0.307E+3,0.234E+3,0.29903000E+1,0.19812000E+1 - ,0.80586800E+2,0.307E+3,0.238E+3,0.29903000E+1,0.19143000E+1 - ,0.79155000E+2,0.307E+3,0.239E+3,0.29903000E+1,0.28903000E+1 - ,0.80375800E+2,0.307E+3,0.240E+3,0.29903000E+1,0.39106000E+1 - ,0.77868100E+2,0.307E+3,0.241E+3,0.29903000E+1,0.29225000E+1 - ,0.70424400E+2,0.307E+3,0.242E+3,0.29903000E+1,0.11055600E+2 - ,0.63308100E+2,0.307E+3,0.243E+3,0.29903000E+1,0.95402000E+1 - ,0.60264100E+2,0.307E+3,0.244E+3,0.29903000E+1,0.88895000E+1 - ,0.60414900E+2,0.307E+3,0.245E+3,0.29903000E+1,0.29696000E+1 - ,0.62653200E+2,0.307E+3,0.246E+3,0.29903000E+1,0.57095000E+1 - ,0.76779800E+2,0.307E+3,0.249E+3,0.29903000E+1,0.19378000E+1 - ,0.83196800E+2,0.307E+3,0.250E+3,0.29903000E+1,0.19505000E+1 - ,0.79891200E+2,0.307E+3,0.251E+3,0.29903000E+1,0.19523000E+1 - ,0.78022400E+2,0.307E+3,0.252E+3,0.29903000E+1,0.19639000E+1 - ,0.98267000E+2,0.307E+3,0.256E+3,0.29903000E+1,0.18467000E+1 - ,0.10262510E+3,0.307E+3,0.257E+3,0.29903000E+1,0.29175000E+1 - ,0.77737900E+2,0.307E+3,0.272E+3,0.29903000E+1,0.38840000E+1 - ,0.80805200E+2,0.307E+3,0.273E+3,0.29903000E+1,0.28988000E+1 - ,0.76585200E+2,0.307E+3,0.274E+3,0.29903000E+1,0.10915300E+2 - ,0.70735300E+2,0.307E+3,0.275E+3,0.29903000E+1,0.98054000E+1 - ,0.67427200E+2,0.307E+3,0.276E+3,0.29903000E+1,0.91527000E+1 - ,0.67888500E+2,0.307E+3,0.277E+3,0.29903000E+1,0.29424000E+1 - ,0.71112000E+2,0.307E+3,0.278E+3,0.29903000E+1,0.66669000E+1 - ,0.83409500E+2,0.307E+3,0.281E+3,0.29903000E+1,0.19302000E+1 - ,0.88005200E+2,0.307E+3,0.282E+3,0.29903000E+1,0.19356000E+1 - ,0.90199000E+2,0.307E+3,0.283E+3,0.29903000E+1,0.19655000E+1 - ,0.90200500E+2,0.307E+3,0.284E+3,0.29903000E+1,0.19639000E+1 - ,0.10838490E+3,0.307E+3,0.288E+3,0.29903000E+1,0.18075000E+1 - ,0.21720500E+2,0.307E+3,0.305E+3,0.29903000E+1,0.29128000E+1 - ,0.19866900E+2,0.307E+3,0.306E+3,0.29903000E+1,0.29987000E+1 - ,0.15581700E+2,0.307E+3,0.307E+3,0.29903000E+1,0.29903000E+1 - ,0.21058400E+2,0.313E+3,0.100E+1,0.29146000E+1,0.91180000E+0 - ,0.13698200E+2,0.313E+3,0.200E+1,0.29146000E+1,0.00000000E+0 - ,0.32279250E+3,0.313E+3,0.300E+1,0.29146000E+1,0.00000000E+0 - ,0.18966050E+3,0.313E+3,0.400E+1,0.29146000E+1,0.00000000E+0 - ,0.12796450E+3,0.313E+3,0.500E+1,0.29146000E+1,0.00000000E+0 - ,0.86160500E+2,0.313E+3,0.600E+1,0.29146000E+1,0.00000000E+0 - ,0.59907400E+2,0.313E+3,0.700E+1,0.29146000E+1,0.00000000E+0 - ,0.45087600E+2,0.313E+3,0.800E+1,0.29146000E+1,0.00000000E+0 - ,0.33933400E+2,0.313E+3,0.900E+1,0.29146000E+1,0.00000000E+0 - ,0.25933500E+2,0.313E+3,0.100E+2,0.29146000E+1,0.00000000E+0 - ,0.38609800E+3,0.313E+3,0.110E+2,0.29146000E+1,0.00000000E+0 - ,0.30133070E+3,0.313E+3,0.120E+2,0.29146000E+1,0.00000000E+0 - ,0.27856390E+3,0.313E+3,0.130E+2,0.29146000E+1,0.00000000E+0 - ,0.21994790E+3,0.313E+3,0.140E+2,0.29146000E+1,0.00000000E+0 - ,0.17135570E+3,0.313E+3,0.150E+2,0.29146000E+1,0.00000000E+0 - ,0.14185170E+3,0.313E+3,0.160E+2,0.29146000E+1,0.00000000E+0 - ,0.11545520E+3,0.313E+3,0.170E+2,0.29146000E+1,0.00000000E+0 - ,0.94042800E+2,0.313E+3,0.180E+2,0.29146000E+1,0.00000000E+0 - ,0.62895370E+3,0.313E+3,0.190E+2,0.29146000E+1,0.00000000E+0 - ,0.52583670E+3,0.313E+3,0.200E+2,0.29146000E+1,0.00000000E+0 - ,0.43542050E+3,0.313E+3,0.210E+2,0.29146000E+1,0.00000000E+0 - ,0.42087110E+3,0.313E+3,0.220E+2,0.29146000E+1,0.00000000E+0 - ,0.38566110E+3,0.313E+3,0.230E+2,0.29146000E+1,0.00000000E+0 - ,0.30312660E+3,0.313E+3,0.240E+2,0.29146000E+1,0.00000000E+0 - ,0.33231560E+3,0.313E+3,0.250E+2,0.29146000E+1,0.00000000E+0 - ,0.26022290E+3,0.313E+3,0.260E+2,0.29146000E+1,0.00000000E+0 - ,0.27689480E+3,0.313E+3,0.270E+2,0.29146000E+1,0.00000000E+0 - ,0.28511740E+3,0.313E+3,0.280E+2,0.29146000E+1,0.00000000E+0 - ,0.21789580E+3,0.313E+3,0.290E+2,0.29146000E+1,0.00000000E+0 - ,0.22471970E+3,0.313E+3,0.300E+2,0.29146000E+1,0.00000000E+0 - ,0.26645340E+3,0.313E+3,0.310E+2,0.29146000E+1,0.00000000E+0 - ,0.23543820E+3,0.313E+3,0.320E+2,0.29146000E+1,0.00000000E+0 - ,0.20075140E+3,0.313E+3,0.330E+2,0.29146000E+1,0.00000000E+0 - ,0.17986350E+3,0.313E+3,0.340E+2,0.29146000E+1,0.00000000E+0 - ,0.15701910E+3,0.313E+3,0.350E+2,0.29146000E+1,0.00000000E+0 - ,0.13612380E+3,0.313E+3,0.360E+2,0.29146000E+1,0.00000000E+0 - ,0.70496090E+3,0.313E+3,0.370E+2,0.29146000E+1,0.00000000E+0 - ,0.62569960E+3,0.313E+3,0.380E+2,0.29146000E+1,0.00000000E+0 - ,0.54992420E+3,0.313E+3,0.390E+2,0.29146000E+1,0.00000000E+0 - ,0.49495070E+3,0.313E+3,0.400E+2,0.29146000E+1,0.00000000E+0 - ,0.45153080E+3,0.313E+3,0.410E+2,0.29146000E+1,0.00000000E+0 - ,0.34833970E+3,0.313E+3,0.420E+2,0.29146000E+1,0.00000000E+0 - ,0.38882260E+3,0.313E+3,0.430E+2,0.29146000E+1,0.00000000E+0 - ,0.29592560E+3,0.313E+3,0.440E+2,0.29146000E+1,0.00000000E+0 - ,0.32404080E+3,0.313E+3,0.450E+2,0.29146000E+1,0.00000000E+0 - ,0.30049770E+3,0.313E+3,0.460E+2,0.29146000E+1,0.00000000E+0 - ,0.24967590E+3,0.313E+3,0.470E+2,0.29146000E+1,0.00000000E+0 - ,0.26472910E+3,0.313E+3,0.480E+2,0.29146000E+1,0.00000000E+0 - ,0.33234100E+3,0.313E+3,0.490E+2,0.29146000E+1,0.00000000E+0 - ,0.30808400E+3,0.313E+3,0.500E+2,0.29146000E+1,0.00000000E+0 - ,0.27473330E+3,0.313E+3,0.510E+2,0.29146000E+1,0.00000000E+0 - ,0.25478050E+3,0.313E+3,0.520E+2,0.29146000E+1,0.00000000E+0 - ,0.23007980E+3,0.313E+3,0.530E+2,0.29146000E+1,0.00000000E+0 - ,0.20645810E+3,0.313E+3,0.540E+2,0.29146000E+1,0.00000000E+0 - ,0.85867990E+3,0.313E+3,0.550E+2,0.29146000E+1,0.00000000E+0 - ,0.79610660E+3,0.313E+3,0.560E+2,0.29146000E+1,0.00000000E+0 - ,0.70193980E+3,0.313E+3,0.570E+2,0.29146000E+1,0.00000000E+0 - ,0.32415330E+3,0.313E+3,0.580E+2,0.29146000E+1,0.27991000E+1 - ,0.70578730E+3,0.313E+3,0.590E+2,0.29146000E+1,0.00000000E+0 - ,0.67819310E+3,0.313E+3,0.600E+2,0.29146000E+1,0.00000000E+0 - ,0.66131780E+3,0.313E+3,0.610E+2,0.29146000E+1,0.00000000E+0 - ,0.64579390E+3,0.313E+3,0.620E+2,0.29146000E+1,0.00000000E+0 - ,0.63203590E+3,0.313E+3,0.630E+2,0.29146000E+1,0.00000000E+0 - ,0.49802070E+3,0.313E+3,0.640E+2,0.29146000E+1,0.00000000E+0 - ,0.55718410E+3,0.313E+3,0.650E+2,0.29146000E+1,0.00000000E+0 - ,0.53772660E+3,0.313E+3,0.660E+2,0.29146000E+1,0.00000000E+0 - ,0.57065080E+3,0.313E+3,0.670E+2,0.29146000E+1,0.00000000E+0 - ,0.55863790E+3,0.313E+3,0.680E+2,0.29146000E+1,0.00000000E+0 - ,0.54782520E+3,0.313E+3,0.690E+2,0.29146000E+1,0.00000000E+0 - ,0.54139780E+3,0.313E+3,0.700E+2,0.29146000E+1,0.00000000E+0 - ,0.45683250E+3,0.313E+3,0.710E+2,0.29146000E+1,0.00000000E+0 - ,0.45089790E+3,0.313E+3,0.720E+2,0.29146000E+1,0.00000000E+0 - ,0.41177370E+3,0.313E+3,0.730E+2,0.29146000E+1,0.00000000E+0 - ,0.34723090E+3,0.313E+3,0.740E+2,0.29146000E+1,0.00000000E+0 - ,0.35352640E+3,0.313E+3,0.750E+2,0.29146000E+1,0.00000000E+0 - ,0.32038750E+3,0.313E+3,0.760E+2,0.29146000E+1,0.00000000E+0 - ,0.29331160E+3,0.313E+3,0.770E+2,0.29146000E+1,0.00000000E+0 - ,0.24307640E+3,0.313E+3,0.780E+2,0.29146000E+1,0.00000000E+0 - ,0.22688500E+3,0.313E+3,0.790E+2,0.29146000E+1,0.00000000E+0 - ,0.23369270E+3,0.313E+3,0.800E+2,0.29146000E+1,0.00000000E+0 - ,0.34043160E+3,0.313E+3,0.810E+2,0.29146000E+1,0.00000000E+0 - ,0.33373140E+3,0.313E+3,0.820E+2,0.29146000E+1,0.00000000E+0 - ,0.30698840E+3,0.313E+3,0.830E+2,0.29146000E+1,0.00000000E+0 - ,0.29279590E+3,0.313E+3,0.840E+2,0.29146000E+1,0.00000000E+0 - ,0.27003130E+3,0.313E+3,0.850E+2,0.29146000E+1,0.00000000E+0 - ,0.24716150E+3,0.313E+3,0.860E+2,0.29146000E+1,0.00000000E+0 - ,0.81311660E+3,0.313E+3,0.870E+2,0.29146000E+1,0.00000000E+0 - ,0.78841980E+3,0.313E+3,0.880E+2,0.29146000E+1,0.00000000E+0 - ,0.69912600E+3,0.313E+3,0.890E+2,0.29146000E+1,0.00000000E+0 - ,0.62955760E+3,0.313E+3,0.900E+2,0.29146000E+1,0.00000000E+0 - ,0.62364620E+3,0.313E+3,0.910E+2,0.29146000E+1,0.00000000E+0 - ,0.60379750E+3,0.313E+3,0.920E+2,0.29146000E+1,0.00000000E+0 - ,0.62051110E+3,0.313E+3,0.930E+2,0.29146000E+1,0.00000000E+0 - ,0.60113500E+3,0.313E+3,0.940E+2,0.29146000E+1,0.00000000E+0 - ,0.34070000E+2,0.313E+3,0.101E+3,0.29146000E+1,0.00000000E+0 - ,0.11021360E+3,0.313E+3,0.103E+3,0.29146000E+1,0.98650000E+0 - ,0.14056320E+3,0.313E+3,0.104E+3,0.29146000E+1,0.98080000E+0 - ,0.10751580E+3,0.313E+3,0.105E+3,0.29146000E+1,0.97060000E+0 - ,0.80711100E+2,0.313E+3,0.106E+3,0.29146000E+1,0.98680000E+0 - ,0.55779300E+2,0.313E+3,0.107E+3,0.29146000E+1,0.99440000E+0 - ,0.40337400E+2,0.313E+3,0.108E+3,0.29146000E+1,0.99250000E+0 - ,0.27443600E+2,0.313E+3,0.109E+3,0.29146000E+1,0.99820000E+0 - ,0.16065940E+3,0.313E+3,0.111E+3,0.29146000E+1,0.96840000E+0 - ,0.24856920E+3,0.313E+3,0.112E+3,0.29146000E+1,0.96280000E+0 - ,0.25249530E+3,0.313E+3,0.113E+3,0.29146000E+1,0.96480000E+0 - ,0.20322260E+3,0.313E+3,0.114E+3,0.29146000E+1,0.95070000E+0 - ,0.16626980E+3,0.313E+3,0.115E+3,0.29146000E+1,0.99470000E+0 - ,0.14026180E+3,0.313E+3,0.116E+3,0.29146000E+1,0.99480000E+0 - ,0.11424050E+3,0.313E+3,0.117E+3,0.29146000E+1,0.99720000E+0 - ,0.22072640E+3,0.313E+3,0.119E+3,0.29146000E+1,0.97670000E+0 - ,0.41971290E+3,0.313E+3,0.120E+3,0.29146000E+1,0.98310000E+0 - ,0.22183390E+3,0.313E+3,0.121E+3,0.29146000E+1,0.18627000E+1 - ,0.21401930E+3,0.313E+3,0.122E+3,0.29146000E+1,0.18299000E+1 - ,0.20967420E+3,0.313E+3,0.123E+3,0.29146000E+1,0.19138000E+1 - ,0.20762990E+3,0.313E+3,0.124E+3,0.29146000E+1,0.18269000E+1 - ,0.19138970E+3,0.313E+3,0.125E+3,0.29146000E+1,0.16406000E+1 - ,0.17705420E+3,0.313E+3,0.126E+3,0.29146000E+1,0.16483000E+1 - ,0.16880270E+3,0.313E+3,0.127E+3,0.29146000E+1,0.17149000E+1 - ,0.16499240E+3,0.313E+3,0.128E+3,0.29146000E+1,0.17937000E+1 - ,0.16280210E+3,0.313E+3,0.129E+3,0.29146000E+1,0.95760000E+0 - ,0.15307760E+3,0.313E+3,0.130E+3,0.29146000E+1,0.19419000E+1 - ,0.25034940E+3,0.313E+3,0.131E+3,0.29146000E+1,0.96010000E+0 - ,0.22023170E+3,0.313E+3,0.132E+3,0.29146000E+1,0.94340000E+0 - ,0.19730880E+3,0.313E+3,0.133E+3,0.29146000E+1,0.98890000E+0 - ,0.17991980E+3,0.313E+3,0.134E+3,0.29146000E+1,0.99010000E+0 - ,0.15811820E+3,0.313E+3,0.135E+3,0.29146000E+1,0.99740000E+0 - ,0.26324390E+3,0.313E+3,0.137E+3,0.29146000E+1,0.97380000E+0 - ,0.50999270E+3,0.313E+3,0.138E+3,0.29146000E+1,0.98010000E+0 - ,0.39206600E+3,0.313E+3,0.139E+3,0.29146000E+1,0.19153000E+1 - ,0.29297650E+3,0.313E+3,0.140E+3,0.29146000E+1,0.19355000E+1 - ,0.29577860E+3,0.313E+3,0.141E+3,0.29146000E+1,0.19545000E+1 - ,0.27564350E+3,0.313E+3,0.142E+3,0.29146000E+1,0.19420000E+1 - ,0.30843590E+3,0.313E+3,0.143E+3,0.29146000E+1,0.16682000E+1 - ,0.24026870E+3,0.313E+3,0.144E+3,0.29146000E+1,0.18584000E+1 - ,0.22456570E+3,0.313E+3,0.145E+3,0.29146000E+1,0.19003000E+1 - ,0.20834700E+3,0.313E+3,0.146E+3,0.29146000E+1,0.18630000E+1 - ,0.20146610E+3,0.313E+3,0.147E+3,0.29146000E+1,0.96790000E+0 - ,0.19966700E+3,0.313E+3,0.148E+3,0.29146000E+1,0.19539000E+1 - ,0.31698520E+3,0.313E+3,0.149E+3,0.29146000E+1,0.96330000E+0 - ,0.28733370E+3,0.313E+3,0.150E+3,0.29146000E+1,0.95140000E+0 - ,0.26924000E+3,0.313E+3,0.151E+3,0.29146000E+1,0.97490000E+0 - ,0.25459630E+3,0.313E+3,0.152E+3,0.29146000E+1,0.98110000E+0 - ,0.23226170E+3,0.313E+3,0.153E+3,0.29146000E+1,0.99680000E+0 - ,0.31205400E+3,0.313E+3,0.155E+3,0.29146000E+1,0.99090000E+0 - ,0.65974760E+3,0.313E+3,0.156E+3,0.29146000E+1,0.97970000E+0 - ,0.49580770E+3,0.313E+3,0.157E+3,0.29146000E+1,0.19373000E+1 - ,0.31434490E+3,0.313E+3,0.159E+3,0.29146000E+1,0.29425000E+1 - ,0.30783100E+3,0.313E+3,0.160E+3,0.29146000E+1,0.29455000E+1 - ,0.29804520E+3,0.313E+3,0.161E+3,0.29146000E+1,0.29413000E+1 - ,0.29947280E+3,0.313E+3,0.162E+3,0.29146000E+1,0.29300000E+1 - ,0.28833130E+3,0.313E+3,0.163E+3,0.29146000E+1,0.18286000E+1 - ,0.30148740E+3,0.313E+3,0.164E+3,0.29146000E+1,0.28732000E+1 - ,0.28310610E+3,0.313E+3,0.165E+3,0.29146000E+1,0.29086000E+1 - ,0.28795020E+3,0.313E+3,0.166E+3,0.29146000E+1,0.28965000E+1 - ,0.26876200E+3,0.313E+3,0.167E+3,0.29146000E+1,0.29242000E+1 - ,0.26111000E+3,0.313E+3,0.168E+3,0.29146000E+1,0.29282000E+1 - ,0.25945460E+3,0.313E+3,0.169E+3,0.29146000E+1,0.29246000E+1 - ,0.27290680E+3,0.313E+3,0.170E+3,0.29146000E+1,0.28482000E+1 - ,0.25082830E+3,0.313E+3,0.171E+3,0.29146000E+1,0.29219000E+1 - ,0.33919420E+3,0.313E+3,0.172E+3,0.29146000E+1,0.19254000E+1 - ,0.31485670E+3,0.313E+3,0.173E+3,0.29146000E+1,0.19459000E+1 - ,0.28725880E+3,0.313E+3,0.174E+3,0.29146000E+1,0.19292000E+1 - ,0.29046490E+3,0.313E+3,0.175E+3,0.29146000E+1,0.18104000E+1 - ,0.25437210E+3,0.313E+3,0.176E+3,0.29146000E+1,0.18858000E+1 - ,0.23906730E+3,0.313E+3,0.177E+3,0.29146000E+1,0.18648000E+1 - ,0.22815940E+3,0.313E+3,0.178E+3,0.29146000E+1,0.19188000E+1 - ,0.21789610E+3,0.313E+3,0.179E+3,0.29146000E+1,0.98460000E+0 - ,0.21069250E+3,0.313E+3,0.180E+3,0.29146000E+1,0.19896000E+1 - ,0.33974310E+3,0.313E+3,0.181E+3,0.29146000E+1,0.92670000E+0 - ,0.31027180E+3,0.313E+3,0.182E+3,0.29146000E+1,0.93830000E+0 - ,0.30114890E+3,0.313E+3,0.183E+3,0.29146000E+1,0.98200000E+0 - ,0.29290320E+3,0.313E+3,0.184E+3,0.29146000E+1,0.98150000E+0 - ,0.27334560E+3,0.313E+3,0.185E+3,0.29146000E+1,0.99540000E+0 - ,0.35155860E+3,0.313E+3,0.187E+3,0.29146000E+1,0.97050000E+0 - ,0.65770110E+3,0.313E+3,0.188E+3,0.29146000E+1,0.96620000E+0 - ,0.37210800E+3,0.313E+3,0.189E+3,0.29146000E+1,0.29070000E+1 - ,0.42861200E+3,0.313E+3,0.190E+3,0.29146000E+1,0.28844000E+1 - ,0.38281860E+3,0.313E+3,0.191E+3,0.29146000E+1,0.28738000E+1 - ,0.33870230E+3,0.313E+3,0.192E+3,0.29146000E+1,0.28878000E+1 - ,0.32590880E+3,0.313E+3,0.193E+3,0.29146000E+1,0.29095000E+1 - ,0.39082830E+3,0.313E+3,0.194E+3,0.29146000E+1,0.19209000E+1 - ,0.92012600E+2,0.313E+3,0.204E+3,0.29146000E+1,0.19697000E+1 - ,0.90144000E+2,0.313E+3,0.205E+3,0.29146000E+1,0.19441000E+1 - ,0.65696800E+2,0.313E+3,0.206E+3,0.29146000E+1,0.19985000E+1 - ,0.52313600E+2,0.313E+3,0.207E+3,0.29146000E+1,0.20143000E+1 - ,0.35460200E+2,0.313E+3,0.208E+3,0.29146000E+1,0.19887000E+1 - ,0.16311000E+3,0.313E+3,0.212E+3,0.29146000E+1,0.19496000E+1 - ,0.19694110E+3,0.313E+3,0.213E+3,0.29146000E+1,0.19311000E+1 - ,0.18900340E+3,0.313E+3,0.214E+3,0.29146000E+1,0.19435000E+1 - ,0.16395650E+3,0.313E+3,0.215E+3,0.29146000E+1,0.20102000E+1 - ,0.13739070E+3,0.313E+3,0.216E+3,0.29146000E+1,0.19903000E+1 - ,0.22781080E+3,0.313E+3,0.220E+3,0.29146000E+1,0.19349000E+1 - ,0.21910140E+3,0.313E+3,0.221E+3,0.29146000E+1,0.28999000E+1 - ,0.22177080E+3,0.313E+3,0.222E+3,0.29146000E+1,0.38675000E+1 - ,0.20271680E+3,0.313E+3,0.223E+3,0.29146000E+1,0.29110000E+1 - ,0.15223080E+3,0.313E+3,0.224E+3,0.29146000E+1,0.10619100E+2 - ,0.13008090E+3,0.313E+3,0.225E+3,0.29146000E+1,0.98849000E+1 - ,0.12768330E+3,0.313E+3,0.226E+3,0.29146000E+1,0.91376000E+1 - ,0.14999510E+3,0.313E+3,0.227E+3,0.29146000E+1,0.29263000E+1 - ,0.13971080E+3,0.313E+3,0.228E+3,0.29146000E+1,0.65458000E+1 - ,0.19848130E+3,0.313E+3,0.231E+3,0.29146000E+1,0.19315000E+1 - ,0.20964300E+3,0.313E+3,0.232E+3,0.29146000E+1,0.19447000E+1 - ,0.19209160E+3,0.313E+3,0.233E+3,0.29146000E+1,0.19793000E+1 - ,0.17848350E+3,0.313E+3,0.234E+3,0.29146000E+1,0.19812000E+1 - ,0.27262520E+3,0.313E+3,0.238E+3,0.29146000E+1,0.19143000E+1 - ,0.26276340E+3,0.313E+3,0.239E+3,0.29146000E+1,0.28903000E+1 - ,0.26502430E+3,0.313E+3,0.240E+3,0.29146000E+1,0.39106000E+1 - ,0.25593200E+3,0.313E+3,0.241E+3,0.29146000E+1,0.29225000E+1 - ,0.22596360E+3,0.313E+3,0.242E+3,0.29146000E+1,0.11055600E+2 - ,0.19915880E+3,0.313E+3,0.243E+3,0.29146000E+1,0.95402000E+1 - ,0.18804460E+3,0.313E+3,0.244E+3,0.29146000E+1,0.88895000E+1 - ,0.19149380E+3,0.313E+3,0.245E+3,0.29146000E+1,0.29696000E+1 - ,0.20021140E+3,0.313E+3,0.246E+3,0.29146000E+1,0.57095000E+1 - ,0.25528030E+3,0.313E+3,0.249E+3,0.29146000E+1,0.19378000E+1 - ,0.27779270E+3,0.313E+3,0.250E+3,0.29146000E+1,0.19505000E+1 - ,0.26182240E+3,0.313E+3,0.251E+3,0.29146000E+1,0.19523000E+1 - ,0.25251890E+3,0.313E+3,0.252E+3,0.29146000E+1,0.19639000E+1 - ,0.32959150E+3,0.313E+3,0.256E+3,0.29146000E+1,0.18467000E+1 - ,0.34222420E+3,0.313E+3,0.257E+3,0.29146000E+1,0.29175000E+1 - ,0.25364330E+3,0.313E+3,0.272E+3,0.29146000E+1,0.38840000E+1 - ,0.26456000E+3,0.313E+3,0.273E+3,0.29146000E+1,0.28988000E+1 - ,0.24551490E+3,0.313E+3,0.274E+3,0.29146000E+1,0.10915300E+2 - ,0.22268310E+3,0.313E+3,0.275E+3,0.29146000E+1,0.98054000E+1 - ,0.20925910E+3,0.313E+3,0.276E+3,0.29146000E+1,0.91527000E+1 - ,0.21319310E+3,0.313E+3,0.277E+3,0.29146000E+1,0.29424000E+1 - ,0.22444800E+3,0.313E+3,0.278E+3,0.29146000E+1,0.66669000E+1 - ,0.27230380E+3,0.313E+3,0.281E+3,0.29146000E+1,0.19302000E+1 - ,0.28809540E+3,0.313E+3,0.282E+3,0.29146000E+1,0.19356000E+1 - ,0.29386510E+3,0.313E+3,0.283E+3,0.29146000E+1,0.19655000E+1 - ,0.29167140E+3,0.313E+3,0.284E+3,0.29146000E+1,0.19639000E+1 - ,0.36287330E+3,0.313E+3,0.288E+3,0.29146000E+1,0.18075000E+1 - ,0.68433000E+2,0.313E+3,0.305E+3,0.29146000E+1,0.29128000E+1 - ,0.61382900E+2,0.313E+3,0.306E+3,0.29146000E+1,0.29987000E+1 - ,0.45939900E+2,0.313E+3,0.307E+3,0.29146000E+1,0.29903000E+1 - ,0.15359450E+3,0.313E+3,0.313E+3,0.29146000E+1,0.29146000E+1 - ,0.24983300E+2,0.314E+3,0.100E+1,0.29407000E+1,0.91180000E+0 - ,0.16110400E+2,0.314E+3,0.200E+1,0.29407000E+1,0.00000000E+0 - ,0.40808020E+3,0.314E+3,0.300E+1,0.29407000E+1,0.00000000E+0 - ,0.23182510E+3,0.314E+3,0.400E+1,0.29407000E+1,0.00000000E+0 - ,0.15403880E+3,0.314E+3,0.500E+1,0.29407000E+1,0.00000000E+0 - ,0.10272020E+3,0.314E+3,0.600E+1,0.29407000E+1,0.00000000E+0 - ,0.70976100E+2,0.314E+3,0.700E+1,0.29407000E+1,0.00000000E+0 - ,0.53206100E+2,0.314E+3,0.800E+1,0.29407000E+1,0.00000000E+0 - ,0.39917200E+2,0.314E+3,0.900E+1,0.29407000E+1,0.00000000E+0 - ,0.30433800E+2,0.314E+3,0.100E+2,0.29407000E+1,0.00000000E+0 - ,0.48717610E+3,0.314E+3,0.110E+2,0.29407000E+1,0.00000000E+0 - ,0.37037780E+3,0.314E+3,0.120E+2,0.29407000E+1,0.00000000E+0 - ,0.33945020E+3,0.314E+3,0.130E+2,0.29407000E+1,0.00000000E+0 - ,0.26511890E+3,0.314E+3,0.140E+2,0.29407000E+1,0.00000000E+0 - ,0.20487700E+3,0.314E+3,0.150E+2,0.29407000E+1,0.00000000E+0 - ,0.16882250E+3,0.314E+3,0.160E+2,0.29407000E+1,0.00000000E+0 - ,0.13684600E+3,0.314E+3,0.170E+2,0.29407000E+1,0.00000000E+0 - ,0.11110440E+3,0.314E+3,0.180E+2,0.29407000E+1,0.00000000E+0 - ,0.79883900E+3,0.314E+3,0.190E+2,0.29407000E+1,0.00000000E+0 - ,0.65341740E+3,0.314E+3,0.200E+2,0.29407000E+1,0.00000000E+0 - ,0.53857540E+3,0.314E+3,0.210E+2,0.29407000E+1,0.00000000E+0 - ,0.51863330E+3,0.314E+3,0.220E+2,0.29407000E+1,0.00000000E+0 - ,0.47415850E+3,0.314E+3,0.230E+2,0.29407000E+1,0.00000000E+0 - ,0.37278380E+3,0.314E+3,0.240E+2,0.29407000E+1,0.00000000E+0 - ,0.40724250E+3,0.314E+3,0.250E+2,0.29407000E+1,0.00000000E+0 - ,0.31885890E+3,0.314E+3,0.260E+2,0.29407000E+1,0.00000000E+0 - ,0.33746240E+3,0.314E+3,0.270E+2,0.29407000E+1,0.00000000E+0 - ,0.34824770E+3,0.314E+3,0.280E+2,0.29407000E+1,0.00000000E+0 - ,0.26631200E+3,0.314E+3,0.290E+2,0.29407000E+1,0.00000000E+0 - ,0.27256060E+3,0.314E+3,0.300E+2,0.29407000E+1,0.00000000E+0 - ,0.32381790E+3,0.314E+3,0.310E+2,0.29407000E+1,0.00000000E+0 - ,0.28369090E+3,0.314E+3,0.320E+2,0.29407000E+1,0.00000000E+0 - ,0.24023030E+3,0.314E+3,0.330E+2,0.29407000E+1,0.00000000E+0 - ,0.21441210E+3,0.314E+3,0.340E+2,0.29407000E+1,0.00000000E+0 - ,0.18649270E+3,0.314E+3,0.350E+2,0.29407000E+1,0.00000000E+0 - ,0.16117030E+3,0.314E+3,0.360E+2,0.29407000E+1,0.00000000E+0 - ,0.89400720E+3,0.314E+3,0.370E+2,0.29407000E+1,0.00000000E+0 - ,0.77835390E+3,0.314E+3,0.380E+2,0.29407000E+1,0.00000000E+0 - ,0.67875770E+3,0.314E+3,0.390E+2,0.29407000E+1,0.00000000E+0 - ,0.60808480E+3,0.314E+3,0.400E+2,0.29407000E+1,0.00000000E+0 - ,0.55314470E+3,0.314E+3,0.410E+2,0.29407000E+1,0.00000000E+0 - ,0.42480720E+3,0.314E+3,0.420E+2,0.29407000E+1,0.00000000E+0 - ,0.47494180E+3,0.314E+3,0.430E+2,0.29407000E+1,0.00000000E+0 - ,0.35969290E+3,0.314E+3,0.440E+2,0.29407000E+1,0.00000000E+0 - ,0.39366130E+3,0.314E+3,0.450E+2,0.29407000E+1,0.00000000E+0 - ,0.36442410E+3,0.314E+3,0.460E+2,0.29407000E+1,0.00000000E+0 - ,0.30337520E+3,0.314E+3,0.470E+2,0.29407000E+1,0.00000000E+0 - ,0.32034290E+3,0.314E+3,0.480E+2,0.29407000E+1,0.00000000E+0 - ,0.40432940E+3,0.314E+3,0.490E+2,0.29407000E+1,0.00000000E+0 - ,0.37207850E+3,0.314E+3,0.500E+2,0.29407000E+1,0.00000000E+0 - ,0.32966250E+3,0.314E+3,0.510E+2,0.29407000E+1,0.00000000E+0 - ,0.30462850E+3,0.314E+3,0.520E+2,0.29407000E+1,0.00000000E+0 - ,0.27410450E+3,0.314E+3,0.530E+2,0.29407000E+1,0.00000000E+0 - ,0.24517980E+3,0.314E+3,0.540E+2,0.29407000E+1,0.00000000E+0 - ,0.10888566E+4,0.314E+3,0.550E+2,0.29407000E+1,0.00000000E+0 - ,0.99327630E+3,0.314E+3,0.560E+2,0.29407000E+1,0.00000000E+0 - ,0.86886070E+3,0.314E+3,0.570E+2,0.29407000E+1,0.00000000E+0 - ,0.38956690E+3,0.314E+3,0.580E+2,0.29407000E+1,0.27991000E+1 - ,0.87832220E+3,0.314E+3,0.590E+2,0.29407000E+1,0.00000000E+0 - ,0.84282680E+3,0.314E+3,0.600E+2,0.29407000E+1,0.00000000E+0 - ,0.82153240E+3,0.314E+3,0.610E+2,0.29407000E+1,0.00000000E+0 - ,0.80197510E+3,0.314E+3,0.620E+2,0.29407000E+1,0.00000000E+0 - ,0.78463100E+3,0.314E+3,0.630E+2,0.29407000E+1,0.00000000E+0 - ,0.61326270E+3,0.314E+3,0.640E+2,0.29407000E+1,0.00000000E+0 - ,0.69516170E+3,0.314E+3,0.650E+2,0.29407000E+1,0.00000000E+0 - ,0.66987120E+3,0.314E+3,0.660E+2,0.29407000E+1,0.00000000E+0 - ,0.70696300E+3,0.314E+3,0.670E+2,0.29407000E+1,0.00000000E+0 - ,0.69190950E+3,0.314E+3,0.680E+2,0.29407000E+1,0.00000000E+0 - ,0.67829270E+3,0.314E+3,0.690E+2,0.29407000E+1,0.00000000E+0 - ,0.67054790E+3,0.314E+3,0.700E+2,0.29407000E+1,0.00000000E+0 - ,0.56267060E+3,0.314E+3,0.710E+2,0.29407000E+1,0.00000000E+0 - ,0.55104570E+3,0.314E+3,0.720E+2,0.29407000E+1,0.00000000E+0 - ,0.50107280E+3,0.314E+3,0.730E+2,0.29407000E+1,0.00000000E+0 - ,0.42136670E+3,0.314E+3,0.740E+2,0.29407000E+1,0.00000000E+0 - ,0.42822450E+3,0.314E+3,0.750E+2,0.29407000E+1,0.00000000E+0 - ,0.38673130E+3,0.314E+3,0.760E+2,0.29407000E+1,0.00000000E+0 - ,0.35308580E+3,0.314E+3,0.770E+2,0.29407000E+1,0.00000000E+0 - ,0.29192880E+3,0.314E+3,0.780E+2,0.29407000E+1,0.00000000E+0 - ,0.27221920E+3,0.314E+3,0.790E+2,0.29407000E+1,0.00000000E+0 - ,0.27992390E+3,0.314E+3,0.800E+2,0.29407000E+1,0.00000000E+0 - ,0.41374950E+3,0.314E+3,0.810E+2,0.29407000E+1,0.00000000E+0 - ,0.40319540E+3,0.314E+3,0.820E+2,0.29407000E+1,0.00000000E+0 - ,0.36867120E+3,0.314E+3,0.830E+2,0.29407000E+1,0.00000000E+0 - ,0.35049670E+3,0.314E+3,0.840E+2,0.29407000E+1,0.00000000E+0 - ,0.32207940E+3,0.314E+3,0.850E+2,0.29407000E+1,0.00000000E+0 - ,0.29390180E+3,0.314E+3,0.860E+2,0.29407000E+1,0.00000000E+0 - ,0.10244219E+4,0.314E+3,0.870E+2,0.29407000E+1,0.00000000E+0 - ,0.97976180E+3,0.314E+3,0.880E+2,0.29407000E+1,0.00000000E+0 - ,0.86241890E+3,0.314E+3,0.890E+2,0.29407000E+1,0.00000000E+0 - ,0.77060950E+3,0.314E+3,0.900E+2,0.29407000E+1,0.00000000E+0 - ,0.76655200E+3,0.314E+3,0.910E+2,0.29407000E+1,0.00000000E+0 - ,0.74202530E+3,0.314E+3,0.920E+2,0.29407000E+1,0.00000000E+0 - ,0.76630100E+3,0.314E+3,0.930E+2,0.29407000E+1,0.00000000E+0 - ,0.74167020E+3,0.314E+3,0.940E+2,0.29407000E+1,0.00000000E+0 - ,0.40697200E+2,0.314E+3,0.101E+3,0.29407000E+1,0.00000000E+0 - ,0.13444900E+3,0.314E+3,0.103E+3,0.29407000E+1,0.98650000E+0 - ,0.17103980E+3,0.314E+3,0.104E+3,0.29407000E+1,0.98080000E+0 - ,0.12908980E+3,0.314E+3,0.105E+3,0.29407000E+1,0.97060000E+0 - ,0.96287200E+2,0.314E+3,0.106E+3,0.29407000E+1,0.98680000E+0 - ,0.66105200E+2,0.314E+3,0.107E+3,0.29407000E+1,0.99440000E+0 - ,0.47566400E+2,0.314E+3,0.108E+3,0.29407000E+1,0.99250000E+0 - ,0.32173000E+2,0.314E+3,0.109E+3,0.29407000E+1,0.99820000E+0 - ,0.19665260E+3,0.314E+3,0.111E+3,0.29407000E+1,0.96840000E+0 - ,0.30467970E+3,0.314E+3,0.112E+3,0.29407000E+1,0.96280000E+0 - ,0.30710150E+3,0.314E+3,0.113E+3,0.29407000E+1,0.96480000E+0 - ,0.24462880E+3,0.314E+3,0.114E+3,0.29407000E+1,0.95070000E+0 - ,0.19876160E+3,0.314E+3,0.115E+3,0.29407000E+1,0.99470000E+0 - ,0.16695970E+3,0.314E+3,0.116E+3,0.29407000E+1,0.99480000E+0 - ,0.13542340E+3,0.314E+3,0.117E+3,0.29407000E+1,0.99720000E+0 - ,0.26897780E+3,0.314E+3,0.119E+3,0.29407000E+1,0.97670000E+0 - ,0.52175350E+3,0.314E+3,0.120E+3,0.29407000E+1,0.98310000E+0 - ,0.26771200E+3,0.314E+3,0.121E+3,0.29407000E+1,0.18627000E+1 - ,0.25825540E+3,0.314E+3,0.122E+3,0.29407000E+1,0.18299000E+1 - ,0.25306610E+3,0.314E+3,0.123E+3,0.29407000E+1,0.19138000E+1 - ,0.25088270E+3,0.314E+3,0.124E+3,0.29407000E+1,0.18269000E+1 - ,0.23001820E+3,0.314E+3,0.125E+3,0.29407000E+1,0.16406000E+1 - ,0.21251260E+3,0.314E+3,0.126E+3,0.29407000E+1,0.16483000E+1 - ,0.20263880E+3,0.314E+3,0.127E+3,0.29407000E+1,0.17149000E+1 - ,0.19815060E+3,0.314E+3,0.128E+3,0.29407000E+1,0.17937000E+1 - ,0.19629960E+3,0.314E+3,0.129E+3,0.29407000E+1,0.95760000E+0 - ,0.18325560E+3,0.314E+3,0.130E+3,0.29407000E+1,0.19419000E+1 - ,0.30359070E+3,0.314E+3,0.131E+3,0.29407000E+1,0.96010000E+0 - ,0.26489450E+3,0.314E+3,0.132E+3,0.29407000E+1,0.94340000E+0 - ,0.23602870E+3,0.314E+3,0.133E+3,0.29407000E+1,0.98890000E+0 - ,0.21449810E+3,0.314E+3,0.134E+3,0.29407000E+1,0.99010000E+0 - ,0.18783780E+3,0.314E+3,0.135E+3,0.29407000E+1,0.99740000E+0 - ,0.32026650E+3,0.314E+3,0.137E+3,0.29407000E+1,0.97380000E+0 - ,0.63491250E+3,0.314E+3,0.138E+3,0.29407000E+1,0.98010000E+0 - ,0.48074960E+3,0.314E+3,0.139E+3,0.29407000E+1,0.19153000E+1 - ,0.35400180E+3,0.314E+3,0.140E+3,0.29407000E+1,0.19355000E+1 - ,0.35746120E+3,0.314E+3,0.141E+3,0.29407000E+1,0.19545000E+1 - ,0.33259800E+3,0.314E+3,0.142E+3,0.29407000E+1,0.19420000E+1 - ,0.37482840E+3,0.314E+3,0.143E+3,0.29407000E+1,0.16682000E+1 - ,0.28854060E+3,0.314E+3,0.144E+3,0.29407000E+1,0.18584000E+1 - ,0.26962410E+3,0.314E+3,0.145E+3,0.29407000E+1,0.19003000E+1 - ,0.24998080E+3,0.314E+3,0.146E+3,0.29407000E+1,0.18630000E+1 - ,0.24189890E+3,0.314E+3,0.147E+3,0.29407000E+1,0.96790000E+0 - ,0.23876910E+3,0.314E+3,0.148E+3,0.29407000E+1,0.19539000E+1 - ,0.38467520E+3,0.314E+3,0.149E+3,0.29407000E+1,0.96330000E+0 - ,0.34614310E+3,0.314E+3,0.150E+3,0.29407000E+1,0.95140000E+0 - ,0.32280720E+3,0.314E+3,0.151E+3,0.29407000E+1,0.97490000E+0 - ,0.30433880E+3,0.314E+3,0.152E+3,0.29407000E+1,0.98110000E+0 - ,0.27671610E+3,0.314E+3,0.153E+3,0.29407000E+1,0.99680000E+0 - ,0.37749200E+3,0.314E+3,0.155E+3,0.29407000E+1,0.99090000E+0 - ,0.82435520E+3,0.314E+3,0.156E+3,0.29407000E+1,0.97970000E+0 - ,0.60887560E+3,0.314E+3,0.157E+3,0.29407000E+1,0.19373000E+1 - ,0.37764800E+3,0.314E+3,0.159E+3,0.29407000E+1,0.29425000E+1 - ,0.36979850E+3,0.314E+3,0.160E+3,0.29407000E+1,0.29455000E+1 - ,0.35793640E+3,0.314E+3,0.161E+3,0.29407000E+1,0.29413000E+1 - ,0.36001510E+3,0.314E+3,0.162E+3,0.29407000E+1,0.29300000E+1 - ,0.34780870E+3,0.314E+3,0.163E+3,0.29407000E+1,0.18286000E+1 - ,0.36250210E+3,0.314E+3,0.164E+3,0.29407000E+1,0.28732000E+1 - ,0.34013210E+3,0.314E+3,0.165E+3,0.29407000E+1,0.29086000E+1 - ,0.34661200E+3,0.314E+3,0.166E+3,0.29407000E+1,0.28965000E+1 - ,0.32261560E+3,0.314E+3,0.167E+3,0.29407000E+1,0.29242000E+1 - ,0.31332960E+3,0.314E+3,0.168E+3,0.29407000E+1,0.29282000E+1 - ,0.31141380E+3,0.314E+3,0.169E+3,0.29407000E+1,0.29246000E+1 - ,0.32794410E+3,0.314E+3,0.170E+3,0.29407000E+1,0.28482000E+1 - ,0.30090150E+3,0.314E+3,0.171E+3,0.29407000E+1,0.29219000E+1 - ,0.41188700E+3,0.314E+3,0.172E+3,0.29407000E+1,0.19254000E+1 - ,0.38080640E+3,0.314E+3,0.173E+3,0.29407000E+1,0.19459000E+1 - ,0.34601610E+3,0.314E+3,0.174E+3,0.29407000E+1,0.19292000E+1 - ,0.35118480E+3,0.314E+3,0.175E+3,0.29407000E+1,0.18104000E+1 - ,0.30465320E+3,0.314E+3,0.176E+3,0.29407000E+1,0.18858000E+1 - ,0.28600240E+3,0.314E+3,0.177E+3,0.29407000E+1,0.18648000E+1 - ,0.27277910E+3,0.314E+3,0.178E+3,0.29407000E+1,0.19188000E+1 - ,0.26060470E+3,0.314E+3,0.179E+3,0.29407000E+1,0.98460000E+0 - ,0.25111540E+3,0.314E+3,0.180E+3,0.29407000E+1,0.19896000E+1 - ,0.41199350E+3,0.314E+3,0.181E+3,0.29407000E+1,0.92670000E+0 - ,0.37352430E+3,0.314E+3,0.182E+3,0.29407000E+1,0.93830000E+0 - ,0.36118830E+3,0.314E+3,0.183E+3,0.29407000E+1,0.98200000E+0 - ,0.35044170E+3,0.314E+3,0.184E+3,0.29407000E+1,0.98150000E+0 - ,0.32600770E+3,0.314E+3,0.185E+3,0.29407000E+1,0.99540000E+0 - ,0.42507230E+3,0.314E+3,0.187E+3,0.29407000E+1,0.97050000E+0 - ,0.81753510E+3,0.314E+3,0.188E+3,0.29407000E+1,0.96620000E+0 - ,0.44707850E+3,0.314E+3,0.189E+3,0.29407000E+1,0.29070000E+1 - ,0.51836450E+3,0.314E+3,0.190E+3,0.29407000E+1,0.28844000E+1 - ,0.46224170E+3,0.314E+3,0.191E+3,0.29407000E+1,0.28738000E+1 - ,0.40682820E+3,0.314E+3,0.192E+3,0.29407000E+1,0.28878000E+1 - ,0.39105750E+3,0.314E+3,0.193E+3,0.29407000E+1,0.29095000E+1 - ,0.47525970E+3,0.314E+3,0.194E+3,0.29407000E+1,0.19209000E+1 - ,0.11031340E+3,0.314E+3,0.204E+3,0.29407000E+1,0.19697000E+1 - ,0.10796470E+3,0.314E+3,0.205E+3,0.29407000E+1,0.19441000E+1 - ,0.78057400E+2,0.314E+3,0.206E+3,0.29407000E+1,0.19985000E+1 - ,0.61953000E+2,0.314E+3,0.207E+3,0.29407000E+1,0.20143000E+1 - ,0.41768700E+2,0.314E+3,0.208E+3,0.29407000E+1,0.19887000E+1 - ,0.19678410E+3,0.314E+3,0.212E+3,0.29407000E+1,0.19496000E+1 - ,0.23794340E+3,0.314E+3,0.213E+3,0.29407000E+1,0.19311000E+1 - ,0.22718820E+3,0.314E+3,0.214E+3,0.29407000E+1,0.19435000E+1 - ,0.19611960E+3,0.314E+3,0.215E+3,0.29407000E+1,0.20102000E+1 - ,0.16353520E+3,0.314E+3,0.216E+3,0.29407000E+1,0.19903000E+1 - ,0.27522420E+3,0.314E+3,0.220E+3,0.29407000E+1,0.19349000E+1 - ,0.26358530E+3,0.314E+3,0.221E+3,0.29407000E+1,0.28999000E+1 - ,0.26672430E+3,0.314E+3,0.222E+3,0.29407000E+1,0.38675000E+1 - ,0.24396540E+3,0.314E+3,0.223E+3,0.29407000E+1,0.29110000E+1 - ,0.18218540E+3,0.314E+3,0.224E+3,0.29407000E+1,0.10619100E+2 - ,0.15510950E+3,0.314E+3,0.225E+3,0.29407000E+1,0.98849000E+1 - ,0.15231640E+3,0.314E+3,0.226E+3,0.29407000E+1,0.91376000E+1 - ,0.17996900E+3,0.314E+3,0.227E+3,0.29407000E+1,0.29263000E+1 - ,0.16731730E+3,0.314E+3,0.228E+3,0.29407000E+1,0.65458000E+1 - ,0.23896240E+3,0.314E+3,0.231E+3,0.29407000E+1,0.19315000E+1 - ,0.25184820E+3,0.314E+3,0.232E+3,0.29407000E+1,0.19447000E+1 - ,0.22963620E+3,0.314E+3,0.233E+3,0.29407000E+1,0.19793000E+1 - ,0.21276790E+3,0.314E+3,0.234E+3,0.29407000E+1,0.19812000E+1 - ,0.32933860E+3,0.314E+3,0.238E+3,0.29407000E+1,0.19143000E+1 - ,0.31562100E+3,0.314E+3,0.239E+3,0.29407000E+1,0.28903000E+1 - ,0.31785670E+3,0.314E+3,0.240E+3,0.29407000E+1,0.39106000E+1 - ,0.30723810E+3,0.314E+3,0.241E+3,0.29407000E+1,0.29225000E+1 - ,0.27018990E+3,0.314E+3,0.242E+3,0.29407000E+1,0.11055600E+2 - ,0.23741460E+3,0.314E+3,0.243E+3,0.29407000E+1,0.95402000E+1 - ,0.22392390E+3,0.314E+3,0.244E+3,0.29407000E+1,0.88895000E+1 - ,0.22893290E+3,0.314E+3,0.245E+3,0.29407000E+1,0.29696000E+1 - ,0.23956050E+3,0.314E+3,0.246E+3,0.29407000E+1,0.57095000E+1 - ,0.30725150E+3,0.314E+3,0.249E+3,0.29407000E+1,0.19378000E+1 - ,0.33420220E+3,0.314E+3,0.250E+3,0.29407000E+1,0.19505000E+1 - ,0.31357940E+3,0.314E+3,0.251E+3,0.29407000E+1,0.19523000E+1 - ,0.30173570E+3,0.314E+3,0.252E+3,0.29407000E+1,0.19639000E+1 - ,0.39768030E+3,0.314E+3,0.256E+3,0.29407000E+1,0.18467000E+1 - ,0.41154360E+3,0.314E+3,0.257E+3,0.29407000E+1,0.29175000E+1 - ,0.30359840E+3,0.314E+3,0.272E+3,0.29407000E+1,0.38840000E+1 - ,0.31746390E+3,0.314E+3,0.273E+3,0.29407000E+1,0.28988000E+1 - ,0.29346710E+3,0.314E+3,0.274E+3,0.29407000E+1,0.10915300E+2 - ,0.26545010E+3,0.314E+3,0.275E+3,0.29407000E+1,0.98054000E+1 - ,0.24889430E+3,0.314E+3,0.276E+3,0.29407000E+1,0.91527000E+1 - ,0.25448410E+3,0.314E+3,0.277E+3,0.29407000E+1,0.29424000E+1 - ,0.26790110E+3,0.314E+3,0.278E+3,0.29407000E+1,0.66669000E+1 - ,0.32692180E+3,0.314E+3,0.281E+3,0.29407000E+1,0.19302000E+1 - ,0.34569090E+3,0.314E+3,0.282E+3,0.29407000E+1,0.19356000E+1 - ,0.35194960E+3,0.314E+3,0.283E+3,0.29407000E+1,0.19655000E+1 - ,0.34876390E+3,0.314E+3,0.284E+3,0.29407000E+1,0.19639000E+1 - ,0.43764130E+3,0.314E+3,0.288E+3,0.29407000E+1,0.18075000E+1 - ,0.81347800E+2,0.314E+3,0.305E+3,0.29407000E+1,0.29128000E+1 - ,0.72953000E+2,0.314E+3,0.306E+3,0.29407000E+1,0.29987000E+1 - ,0.54385700E+2,0.314E+3,0.307E+3,0.29407000E+1,0.29903000E+1 - ,0.18402910E+3,0.314E+3,0.313E+3,0.29407000E+1,0.29146000E+1 - ,0.22150460E+3,0.314E+3,0.314E+3,0.29407000E+1,0.29407000E+1 - ,0.21250700E+2,0.315E+3,0.100E+1,0.29859000E+1,0.91180000E+0 - ,0.14157700E+2,0.315E+3,0.200E+1,0.29859000E+1,0.00000000E+0 - ,0.30477070E+3,0.315E+3,0.300E+1,0.29859000E+1,0.00000000E+0 - ,0.18330560E+3,0.315E+3,0.400E+1,0.29859000E+1,0.00000000E+0 - ,0.12601940E+3,0.315E+3,0.500E+1,0.29859000E+1,0.00000000E+0 - ,0.86242700E+2,0.315E+3,0.600E+1,0.29859000E+1,0.00000000E+0 - ,0.60766300E+2,0.315E+3,0.700E+1,0.29859000E+1,0.00000000E+0 - ,0.46192700E+2,0.315E+3,0.800E+1,0.29859000E+1,0.00000000E+0 - ,0.35073300E+2,0.315E+3,0.900E+1,0.29859000E+1,0.00000000E+0 - ,0.26999000E+2,0.315E+3,0.100E+2,0.29859000E+1,0.00000000E+0 - ,0.36521100E+3,0.315E+3,0.110E+2,0.29859000E+1,0.00000000E+0 - ,0.28990900E+3,0.315E+3,0.120E+2,0.29859000E+1,0.00000000E+0 - ,0.27035350E+3,0.315E+3,0.130E+2,0.29859000E+1,0.00000000E+0 - ,0.21613030E+3,0.315E+3,0.140E+2,0.29859000E+1,0.00000000E+0 - ,0.17040450E+3,0.315E+3,0.150E+2,0.29859000E+1,0.00000000E+0 - ,0.14229820E+3,0.315E+3,0.160E+2,0.29859000E+1,0.00000000E+0 - ,0.11683550E+3,0.315E+3,0.170E+2,0.29859000E+1,0.00000000E+0 - ,0.95933600E+2,0.315E+3,0.180E+2,0.29859000E+1,0.00000000E+0 - ,0.59510330E+3,0.315E+3,0.190E+2,0.29859000E+1,0.00000000E+0 - ,0.50296540E+3,0.315E+3,0.200E+2,0.29859000E+1,0.00000000E+0 - ,0.41774000E+3,0.315E+3,0.210E+2,0.29859000E+1,0.00000000E+0 - ,0.40534620E+3,0.315E+3,0.220E+2,0.29859000E+1,0.00000000E+0 - ,0.37223260E+3,0.315E+3,0.230E+2,0.29859000E+1,0.00000000E+0 - ,0.29326800E+3,0.315E+3,0.240E+2,0.29859000E+1,0.00000000E+0 - ,0.32176790E+3,0.315E+3,0.250E+2,0.29859000E+1,0.00000000E+0 - ,0.25267400E+3,0.315E+3,0.260E+2,0.29859000E+1,0.00000000E+0 - ,0.26948070E+3,0.315E+3,0.270E+2,0.29859000E+1,0.00000000E+0 - ,0.27679850E+3,0.315E+3,0.280E+2,0.29859000E+1,0.00000000E+0 - ,0.21213400E+3,0.315E+3,0.290E+2,0.29859000E+1,0.00000000E+0 - ,0.21980160E+3,0.315E+3,0.300E+2,0.29859000E+1,0.00000000E+0 - ,0.25991840E+3,0.315E+3,0.310E+2,0.29859000E+1,0.00000000E+0 - ,0.23175640E+3,0.315E+3,0.320E+2,0.29859000E+1,0.00000000E+0 - ,0.19950090E+3,0.315E+3,0.330E+2,0.29859000E+1,0.00000000E+0 - ,0.17993740E+3,0.315E+3,0.340E+2,0.29859000E+1,0.00000000E+0 - ,0.15821040E+3,0.315E+3,0.350E+2,0.29859000E+1,0.00000000E+0 - ,0.13810760E+3,0.315E+3,0.360E+2,0.29859000E+1,0.00000000E+0 - ,0.66844010E+3,0.315E+3,0.370E+2,0.29859000E+1,0.00000000E+0 - ,0.59874980E+3,0.315E+3,0.380E+2,0.29859000E+1,0.00000000E+0 - ,0.52942130E+3,0.315E+3,0.390E+2,0.29859000E+1,0.00000000E+0 - ,0.47851960E+3,0.315E+3,0.400E+2,0.29859000E+1,0.00000000E+0 - ,0.43792800E+3,0.315E+3,0.410E+2,0.29859000E+1,0.00000000E+0 - ,0.34005920E+3,0.315E+3,0.420E+2,0.29859000E+1,0.00000000E+0 - ,0.37860580E+3,0.315E+3,0.430E+2,0.29859000E+1,0.00000000E+0 - ,0.29020770E+3,0.315E+3,0.440E+2,0.29859000E+1,0.00000000E+0 - ,0.31726290E+3,0.315E+3,0.450E+2,0.29859000E+1,0.00000000E+0 - ,0.29479860E+3,0.315E+3,0.460E+2,0.29859000E+1,0.00000000E+0 - ,0.24529960E+3,0.315E+3,0.470E+2,0.29859000E+1,0.00000000E+0 - ,0.26038920E+3,0.315E+3,0.480E+2,0.29859000E+1,0.00000000E+0 - ,0.32473460E+3,0.315E+3,0.490E+2,0.29859000E+1,0.00000000E+0 - ,0.30300330E+3,0.315E+3,0.500E+2,0.29859000E+1,0.00000000E+0 - ,0.27228130E+3,0.315E+3,0.510E+2,0.29859000E+1,0.00000000E+0 - ,0.25382690E+3,0.315E+3,0.520E+2,0.29859000E+1,0.00000000E+0 - ,0.23058600E+3,0.315E+3,0.530E+2,0.29859000E+1,0.00000000E+0 - ,0.20815070E+3,0.315E+3,0.540E+2,0.29859000E+1,0.00000000E+0 - ,0.81515180E+3,0.315E+3,0.550E+2,0.29859000E+1,0.00000000E+0 - ,0.76114330E+3,0.315E+3,0.560E+2,0.29859000E+1,0.00000000E+0 - ,0.67494890E+3,0.315E+3,0.570E+2,0.29859000E+1,0.00000000E+0 - ,0.32113780E+3,0.315E+3,0.580E+2,0.29859000E+1,0.27991000E+1 - ,0.67620310E+3,0.315E+3,0.590E+2,0.29859000E+1,0.00000000E+0 - ,0.65026390E+3,0.315E+3,0.600E+2,0.29859000E+1,0.00000000E+0 - ,0.63420890E+3,0.315E+3,0.610E+2,0.29859000E+1,0.00000000E+0 - ,0.61941760E+3,0.315E+3,0.620E+2,0.29859000E+1,0.00000000E+0 - ,0.60631410E+3,0.315E+3,0.630E+2,0.29859000E+1,0.00000000E+0 - ,0.48160310E+3,0.315E+3,0.640E+2,0.29859000E+1,0.00000000E+0 - ,0.53441950E+3,0.315E+3,0.650E+2,0.29859000E+1,0.00000000E+0 - ,0.51638640E+3,0.315E+3,0.660E+2,0.29859000E+1,0.00000000E+0 - ,0.54808770E+3,0.315E+3,0.670E+2,0.29859000E+1,0.00000000E+0 - ,0.53658580E+3,0.315E+3,0.680E+2,0.29859000E+1,0.00000000E+0 - ,0.52628420E+3,0.315E+3,0.690E+2,0.29859000E+1,0.00000000E+0 - ,0.51991030E+3,0.315E+3,0.700E+2,0.29859000E+1,0.00000000E+0 - ,0.44109130E+3,0.315E+3,0.710E+2,0.29859000E+1,0.00000000E+0 - ,0.43800800E+3,0.315E+3,0.720E+2,0.29859000E+1,0.00000000E+0 - ,0.40185550E+3,0.315E+3,0.730E+2,0.29859000E+1,0.00000000E+0 - ,0.34062380E+3,0.315E+3,0.740E+2,0.29859000E+1,0.00000000E+0 - ,0.34722720E+3,0.315E+3,0.750E+2,0.29859000E+1,0.00000000E+0 - ,0.31601980E+3,0.315E+3,0.760E+2,0.29859000E+1,0.00000000E+0 - ,0.29035810E+3,0.315E+3,0.770E+2,0.29859000E+1,0.00000000E+0 - ,0.24187400E+3,0.315E+3,0.780E+2,0.29859000E+1,0.00000000E+0 - ,0.22620530E+3,0.315E+3,0.790E+2,0.29859000E+1,0.00000000E+0 - ,0.23313640E+3,0.315E+3,0.800E+2,0.29859000E+1,0.00000000E+0 - ,0.33397090E+3,0.315E+3,0.810E+2,0.29859000E+1,0.00000000E+0 - ,0.32879450E+3,0.315E+3,0.820E+2,0.29859000E+1,0.00000000E+0 - ,0.30437900E+3,0.315E+3,0.830E+2,0.29859000E+1,0.00000000E+0 - ,0.29151300E+3,0.315E+3,0.840E+2,0.29859000E+1,0.00000000E+0 - ,0.27029090E+3,0.315E+3,0.850E+2,0.29859000E+1,0.00000000E+0 - ,0.24870320E+3,0.315E+3,0.860E+2,0.29859000E+1,0.00000000E+0 - ,0.77546700E+3,0.315E+3,0.870E+2,0.29859000E+1,0.00000000E+0 - ,0.75632330E+3,0.315E+3,0.880E+2,0.29859000E+1,0.00000000E+0 - ,0.67406280E+3,0.315E+3,0.890E+2,0.29859000E+1,0.00000000E+0 - ,0.61138240E+3,0.315E+3,0.900E+2,0.29859000E+1,0.00000000E+0 - ,0.60405420E+3,0.315E+3,0.910E+2,0.29859000E+1,0.00000000E+0 - ,0.58496010E+3,0.315E+3,0.920E+2,0.29859000E+1,0.00000000E+0 - ,0.59856780E+3,0.315E+3,0.930E+2,0.29859000E+1,0.00000000E+0 - ,0.58026720E+3,0.315E+3,0.940E+2,0.29859000E+1,0.00000000E+0 - ,0.33919300E+2,0.315E+3,0.101E+3,0.29859000E+1,0.00000000E+0 - ,0.10684660E+3,0.315E+3,0.103E+3,0.29859000E+1,0.98650000E+0 - ,0.13686740E+3,0.315E+3,0.104E+3,0.29859000E+1,0.98080000E+0 - ,0.10639230E+3,0.315E+3,0.105E+3,0.29859000E+1,0.97060000E+0 - ,0.80849600E+2,0.315E+3,0.106E+3,0.29859000E+1,0.98680000E+0 - ,0.56650800E+2,0.315E+3,0.107E+3,0.29859000E+1,0.99440000E+0 - ,0.41460000E+2,0.315E+3,0.108E+3,0.29859000E+1,0.99250000E+0 - ,0.28636200E+2,0.315E+3,0.109E+3,0.29859000E+1,0.99820000E+0 - ,0.15544950E+3,0.315E+3,0.111E+3,0.29859000E+1,0.96840000E+0 - ,0.24015820E+3,0.315E+3,0.112E+3,0.29859000E+1,0.96280000E+0 - ,0.24565290E+3,0.315E+3,0.113E+3,0.29859000E+1,0.96480000E+0 - ,0.20014220E+3,0.315E+3,0.114E+3,0.29859000E+1,0.95070000E+0 - ,0.16545180E+3,0.315E+3,0.115E+3,0.29859000E+1,0.99470000E+0 - ,0.14069580E+3,0.315E+3,0.116E+3,0.29859000E+1,0.99480000E+0 - ,0.11560060E+3,0.315E+3,0.117E+3,0.29859000E+1,0.99720000E+0 - ,0.21584670E+3,0.315E+3,0.119E+3,0.29859000E+1,0.97670000E+0 - ,0.40282860E+3,0.315E+3,0.120E+3,0.29859000E+1,0.98310000E+0 - ,0.21843190E+3,0.315E+3,0.121E+3,0.29859000E+1,0.18627000E+1 - ,0.21092280E+3,0.315E+3,0.122E+3,0.29859000E+1,0.18299000E+1 - ,0.20662740E+3,0.315E+3,0.123E+3,0.29859000E+1,0.19138000E+1 - ,0.20440810E+3,0.315E+3,0.124E+3,0.29859000E+1,0.18269000E+1 - ,0.18931020E+3,0.315E+3,0.125E+3,0.29859000E+1,0.16406000E+1 - ,0.17549190E+3,0.315E+3,0.126E+3,0.29859000E+1,0.16483000E+1 - ,0.16737650E+3,0.315E+3,0.127E+3,0.29859000E+1,0.17149000E+1 - ,0.16353010E+3,0.315E+3,0.128E+3,0.29859000E+1,0.17937000E+1 - ,0.16072250E+3,0.315E+3,0.129E+3,0.29859000E+1,0.95760000E+0 - ,0.15220000E+3,0.315E+3,0.130E+3,0.29859000E+1,0.19419000E+1 - ,0.24479640E+3,0.315E+3,0.131E+3,0.29859000E+1,0.96010000E+0 - ,0.21733500E+3,0.315E+3,0.132E+3,0.29859000E+1,0.94340000E+0 - ,0.19621220E+3,0.315E+3,0.133E+3,0.29859000E+1,0.98890000E+0 - ,0.17998620E+3,0.315E+3,0.134E+3,0.29859000E+1,0.99010000E+0 - ,0.15926660E+3,0.315E+3,0.135E+3,0.29859000E+1,0.99740000E+0 - ,0.25815200E+3,0.315E+3,0.137E+3,0.29859000E+1,0.97380000E+0 - ,0.48959430E+3,0.315E+3,0.138E+3,0.29859000E+1,0.98010000E+0 - ,0.38114140E+3,0.315E+3,0.139E+3,0.29859000E+1,0.19153000E+1 - ,0.28866370E+3,0.315E+3,0.140E+3,0.29859000E+1,0.19355000E+1 - ,0.29138130E+3,0.315E+3,0.141E+3,0.29859000E+1,0.19545000E+1 - ,0.27224210E+3,0.315E+3,0.142E+3,0.29859000E+1,0.19420000E+1 - ,0.30274930E+3,0.315E+3,0.143E+3,0.29859000E+1,0.16682000E+1 - ,0.23860140E+3,0.315E+3,0.144E+3,0.29859000E+1,0.18584000E+1 - ,0.22325490E+3,0.315E+3,0.145E+3,0.29859000E+1,0.19003000E+1 - ,0.20745050E+3,0.315E+3,0.146E+3,0.29859000E+1,0.18630000E+1 - ,0.20043480E+3,0.315E+3,0.147E+3,0.29859000E+1,0.96790000E+0 - ,0.19927140E+3,0.315E+3,0.148E+3,0.29859000E+1,0.19539000E+1 - ,0.31050480E+3,0.315E+3,0.149E+3,0.29859000E+1,0.96330000E+0 - ,0.28348980E+3,0.315E+3,0.150E+3,0.29859000E+1,0.95140000E+0 - ,0.26714010E+3,0.315E+3,0.151E+3,0.29859000E+1,0.97490000E+0 - ,0.25372280E+3,0.315E+3,0.152E+3,0.29859000E+1,0.98110000E+0 - ,0.23274260E+3,0.315E+3,0.153E+3,0.29859000E+1,0.99680000E+0 - ,0.30765740E+3,0.315E+3,0.155E+3,0.29859000E+1,0.99090000E+0 - ,0.63261590E+3,0.315E+3,0.156E+3,0.29859000E+1,0.97970000E+0 - ,0.48173950E+3,0.315E+3,0.157E+3,0.29859000E+1,0.19373000E+1 - ,0.31158240E+3,0.315E+3,0.159E+3,0.29859000E+1,0.29425000E+1 - ,0.30515280E+3,0.315E+3,0.160E+3,0.29859000E+1,0.29455000E+1 - ,0.29558710E+3,0.315E+3,0.161E+3,0.29859000E+1,0.29413000E+1 - ,0.29668160E+3,0.315E+3,0.162E+3,0.29859000E+1,0.29300000E+1 - ,0.28470850E+3,0.315E+3,0.163E+3,0.29859000E+1,0.18286000E+1 - ,0.29847730E+3,0.315E+3,0.164E+3,0.29859000E+1,0.28732000E+1 - ,0.28058560E+3,0.315E+3,0.165E+3,0.29859000E+1,0.29086000E+1 - ,0.28487000E+3,0.315E+3,0.166E+3,0.29859000E+1,0.28965000E+1 - ,0.26661130E+3,0.315E+3,0.167E+3,0.29859000E+1,0.29242000E+1 - ,0.25911400E+3,0.315E+3,0.168E+3,0.29859000E+1,0.29282000E+1 - ,0.25737860E+3,0.315E+3,0.169E+3,0.29859000E+1,0.29246000E+1 - ,0.27013590E+3,0.315E+3,0.170E+3,0.29859000E+1,0.28482000E+1 - ,0.24893750E+3,0.315E+3,0.171E+3,0.29859000E+1,0.29219000E+1 - ,0.33258120E+3,0.315E+3,0.172E+3,0.29859000E+1,0.19254000E+1 - ,0.31015250E+3,0.315E+3,0.173E+3,0.29859000E+1,0.19459000E+1 - ,0.28435150E+3,0.315E+3,0.174E+3,0.29859000E+1,0.19292000E+1 - ,0.28639060E+3,0.315E+3,0.175E+3,0.29859000E+1,0.18104000E+1 - ,0.25354990E+3,0.315E+3,0.176E+3,0.29859000E+1,0.18858000E+1 - ,0.23881810E+3,0.315E+3,0.177E+3,0.29859000E+1,0.18648000E+1 - ,0.22823770E+3,0.315E+3,0.178E+3,0.29859000E+1,0.19188000E+1 - ,0.21805720E+3,0.315E+3,0.179E+3,0.29859000E+1,0.98460000E+0 - ,0.21157770E+3,0.315E+3,0.180E+3,0.29859000E+1,0.19896000E+1 - ,0.33379720E+3,0.315E+3,0.181E+3,0.29859000E+1,0.92670000E+0 - ,0.30690290E+3,0.315E+3,0.182E+3,0.29859000E+1,0.93830000E+0 - ,0.29903800E+3,0.315E+3,0.183E+3,0.29859000E+1,0.98200000E+0 - ,0.29178570E+3,0.315E+3,0.184E+3,0.29859000E+1,0.98150000E+0 - ,0.27360270E+3,0.315E+3,0.185E+3,0.29859000E+1,0.99540000E+0 - ,0.34671520E+3,0.315E+3,0.187E+3,0.29859000E+1,0.97050000E+0 - ,0.63297580E+3,0.315E+3,0.188E+3,0.29859000E+1,0.96620000E+0 - ,0.36867540E+3,0.315E+3,0.189E+3,0.29859000E+1,0.29070000E+1 - ,0.42237050E+3,0.315E+3,0.190E+3,0.29859000E+1,0.28844000E+1 - ,0.37847190E+3,0.315E+3,0.191E+3,0.29859000E+1,0.28738000E+1 - ,0.33627890E+3,0.315E+3,0.192E+3,0.29859000E+1,0.28878000E+1 - ,0.32395480E+3,0.315E+3,0.193E+3,0.29859000E+1,0.29095000E+1 - ,0.38367070E+3,0.315E+3,0.194E+3,0.29859000E+1,0.19209000E+1 - ,0.91020600E+2,0.315E+3,0.204E+3,0.29859000E+1,0.19697000E+1 - ,0.89639100E+2,0.315E+3,0.205E+3,0.29859000E+1,0.19441000E+1 - ,0.66234300E+2,0.315E+3,0.206E+3,0.29859000E+1,0.19985000E+1 - ,0.53207600E+2,0.315E+3,0.207E+3,0.29859000E+1,0.20143000E+1 - ,0.36587500E+2,0.315E+3,0.208E+3,0.29859000E+1,0.19887000E+1 - ,0.15995620E+3,0.315E+3,0.212E+3,0.29859000E+1,0.19496000E+1 - ,0.19311320E+3,0.315E+3,0.213E+3,0.29859000E+1,0.19311000E+1 - ,0.18650310E+3,0.315E+3,0.214E+3,0.29859000E+1,0.19435000E+1 - ,0.16307640E+3,0.315E+3,0.215E+3,0.29859000E+1,0.20102000E+1 - ,0.13785400E+3,0.315E+3,0.216E+3,0.29859000E+1,0.19903000E+1 - ,0.22395660E+3,0.315E+3,0.220E+3,0.29859000E+1,0.19349000E+1 - ,0.21640380E+3,0.315E+3,0.221E+3,0.29859000E+1,0.28999000E+1 - ,0.21913910E+3,0.315E+3,0.222E+3,0.29859000E+1,0.38675000E+1 - ,0.20040530E+3,0.315E+3,0.223E+3,0.29859000E+1,0.29110000E+1 - ,0.15200100E+3,0.315E+3,0.224E+3,0.29859000E+1,0.10619100E+2 - ,0.13062480E+3,0.315E+3,0.225E+3,0.29859000E+1,0.98849000E+1 - ,0.12812710E+3,0.315E+3,0.226E+3,0.29859000E+1,0.91376000E+1 - ,0.14911580E+3,0.315E+3,0.227E+3,0.29859000E+1,0.29263000E+1 - ,0.13922010E+3,0.315E+3,0.228E+3,0.29859000E+1,0.65458000E+1 - ,0.19576670E+3,0.315E+3,0.231E+3,0.29859000E+1,0.19315000E+1 - ,0.20723900E+3,0.315E+3,0.232E+3,0.29859000E+1,0.19447000E+1 - ,0.19122650E+3,0.315E+3,0.233E+3,0.29859000E+1,0.19793000E+1 - ,0.17859070E+3,0.315E+3,0.234E+3,0.29859000E+1,0.19812000E+1 - ,0.26845260E+3,0.315E+3,0.238E+3,0.29859000E+1,0.19143000E+1 - ,0.26022540E+3,0.315E+3,0.239E+3,0.29859000E+1,0.28903000E+1 - ,0.26296750E+3,0.315E+3,0.240E+3,0.29859000E+1,0.39106000E+1 - ,0.25404600E+3,0.315E+3,0.241E+3,0.29859000E+1,0.29225000E+1 - ,0.22570300E+3,0.315E+3,0.242E+3,0.29859000E+1,0.11055600E+2 - ,0.19994180E+3,0.315E+3,0.243E+3,0.29859000E+1,0.95402000E+1 - ,0.18915600E+3,0.315E+3,0.244E+3,0.29859000E+1,0.88895000E+1 - ,0.19169620E+3,0.315E+3,0.245E+3,0.29859000E+1,0.29696000E+1 - ,0.19999790E+3,0.315E+3,0.246E+3,0.29859000E+1,0.57095000E+1 - ,0.25244560E+3,0.315E+3,0.249E+3,0.29859000E+1,0.19378000E+1 - ,0.27452930E+3,0.315E+3,0.250E+3,0.29859000E+1,0.19505000E+1 - ,0.26015780E+3,0.315E+3,0.251E+3,0.29859000E+1,0.19523000E+1 - ,0.25179490E+3,0.315E+3,0.252E+3,0.29859000E+1,0.19639000E+1 - ,0.32533280E+3,0.315E+3,0.256E+3,0.29859000E+1,0.18467000E+1 - ,0.33853620E+3,0.315E+3,0.257E+3,0.29859000E+1,0.29175000E+1 - ,0.25238610E+3,0.315E+3,0.272E+3,0.29859000E+1,0.38840000E+1 - ,0.26287220E+3,0.315E+3,0.273E+3,0.29859000E+1,0.28988000E+1 - ,0.24530820E+3,0.315E+3,0.274E+3,0.29859000E+1,0.10915300E+2 - ,0.22353440E+3,0.315E+3,0.275E+3,0.29859000E+1,0.98054000E+1 - ,0.21084220E+3,0.315E+3,0.276E+3,0.29859000E+1,0.91527000E+1 - ,0.21397300E+3,0.315E+3,0.277E+3,0.29859000E+1,0.29424000E+1 - ,0.22500270E+3,0.315E+3,0.278E+3,0.29859000E+1,0.66669000E+1 - ,0.27049420E+3,0.315E+3,0.281E+3,0.29859000E+1,0.19302000E+1 - ,0.28607870E+3,0.315E+3,0.282E+3,0.29859000E+1,0.19356000E+1 - ,0.29230220E+3,0.315E+3,0.283E+3,0.29859000E+1,0.19655000E+1 - ,0.29076120E+3,0.315E+3,0.284E+3,0.29859000E+1,0.19639000E+1 - ,0.35840590E+3,0.315E+3,0.288E+3,0.29859000E+1,0.18075000E+1 - ,0.68800700E+2,0.315E+3,0.305E+3,0.29859000E+1,0.29128000E+1 - ,0.61943300E+2,0.315E+3,0.306E+3,0.29859000E+1,0.29987000E+1 - ,0.46863500E+2,0.315E+3,0.307E+3,0.29859000E+1,0.29903000E+1 - ,0.15204520E+3,0.315E+3,0.313E+3,0.29859000E+1,0.29146000E+1 - ,0.18148400E+3,0.315E+3,0.314E+3,0.29859000E+1,0.29407000E+1 - ,0.15168860E+3,0.315E+3,0.315E+3,0.29859000E+1,0.29859000E+1 - ,0.18750000E+2,0.327E+3,0.100E+1,0.77785000E+1,0.91180000E+0 - ,0.12752300E+2,0.327E+3,0.200E+1,0.77785000E+1,0.00000000E+0 - ,0.27075980E+3,0.327E+3,0.300E+1,0.77785000E+1,0.00000000E+0 - ,0.16088700E+3,0.327E+3,0.400E+1,0.77785000E+1,0.00000000E+0 - ,0.11053650E+3,0.327E+3,0.500E+1,0.77785000E+1,0.00000000E+0 - ,0.76007200E+2,0.327E+3,0.600E+1,0.77785000E+1,0.00000000E+0 - ,0.53969500E+2,0.327E+3,0.700E+1,0.77785000E+1,0.00000000E+0 - ,0.41362300E+2,0.327E+3,0.800E+1,0.77785000E+1,0.00000000E+0 - ,0.31698500E+2,0.327E+3,0.900E+1,0.77785000E+1,0.00000000E+0 - ,0.24634300E+2,0.327E+3,0.100E+2,0.77785000E+1,0.00000000E+0 - ,0.32462410E+3,0.327E+3,0.110E+2,0.77785000E+1,0.00000000E+0 - ,0.25515610E+3,0.327E+3,0.120E+2,0.77785000E+1,0.00000000E+0 - ,0.23739610E+3,0.327E+3,0.130E+2,0.77785000E+1,0.00000000E+0 - ,0.18954880E+3,0.327E+3,0.140E+2,0.77785000E+1,0.00000000E+0 - ,0.14967090E+3,0.327E+3,0.150E+2,0.77785000E+1,0.00000000E+0 - ,0.12537250E+3,0.327E+3,0.160E+2,0.77785000E+1,0.00000000E+0 - ,0.10339310E+3,0.327E+3,0.170E+2,0.77785000E+1,0.00000000E+0 - ,0.85361600E+2,0.327E+3,0.180E+2,0.77785000E+1,0.00000000E+0 - ,0.53130440E+3,0.327E+3,0.190E+2,0.77785000E+1,0.00000000E+0 - ,0.44506810E+3,0.327E+3,0.200E+2,0.77785000E+1,0.00000000E+0 - ,0.36908350E+3,0.327E+3,0.210E+2,0.77785000E+1,0.00000000E+0 - ,0.35797830E+3,0.327E+3,0.220E+2,0.77785000E+1,0.00000000E+0 - ,0.32864070E+3,0.327E+3,0.230E+2,0.77785000E+1,0.00000000E+0 - ,0.25957220E+3,0.327E+3,0.240E+2,0.77785000E+1,0.00000000E+0 - ,0.28401670E+3,0.327E+3,0.250E+2,0.77785000E+1,0.00000000E+0 - ,0.22363540E+3,0.327E+3,0.260E+2,0.77785000E+1,0.00000000E+0 - ,0.23769940E+3,0.327E+3,0.270E+2,0.77785000E+1,0.00000000E+0 - ,0.24420530E+3,0.327E+3,0.280E+2,0.77785000E+1,0.00000000E+0 - ,0.18784400E+3,0.327E+3,0.290E+2,0.77785000E+1,0.00000000E+0 - ,0.19385700E+3,0.327E+3,0.300E+2,0.77785000E+1,0.00000000E+0 - ,0.22867850E+3,0.327E+3,0.310E+2,0.77785000E+1,0.00000000E+0 - ,0.20362780E+3,0.327E+3,0.320E+2,0.77785000E+1,0.00000000E+0 - ,0.17541210E+3,0.327E+3,0.330E+2,0.77785000E+1,0.00000000E+0 - ,0.15849070E+3,0.327E+3,0.340E+2,0.77785000E+1,0.00000000E+0 - ,0.13975410E+3,0.327E+3,0.350E+2,0.77785000E+1,0.00000000E+0 - ,0.12245360E+3,0.327E+3,0.360E+2,0.77785000E+1,0.00000000E+0 - ,0.59683060E+3,0.327E+3,0.370E+2,0.77785000E+1,0.00000000E+0 - ,0.53035890E+3,0.327E+3,0.380E+2,0.77785000E+1,0.00000000E+0 - ,0.46786120E+3,0.327E+3,0.390E+2,0.77785000E+1,0.00000000E+0 - ,0.42252080E+3,0.327E+3,0.400E+2,0.77785000E+1,0.00000000E+0 - ,0.38664910E+3,0.327E+3,0.410E+2,0.77785000E+1,0.00000000E+0 - ,0.30067530E+3,0.327E+3,0.420E+2,0.77785000E+1,0.00000000E+0 - ,0.33455830E+3,0.327E+3,0.430E+2,0.77785000E+1,0.00000000E+0 - ,0.25692950E+3,0.327E+3,0.440E+2,0.77785000E+1,0.00000000E+0 - ,0.28039530E+3,0.327E+3,0.450E+2,0.77785000E+1,0.00000000E+0 - ,0.26063370E+3,0.327E+3,0.460E+2,0.77785000E+1,0.00000000E+0 - ,0.21771120E+3,0.327E+3,0.470E+2,0.77785000E+1,0.00000000E+0 - ,0.23040100E+3,0.327E+3,0.480E+2,0.77785000E+1,0.00000000E+0 - ,0.28692990E+3,0.327E+3,0.490E+2,0.77785000E+1,0.00000000E+0 - ,0.26720820E+3,0.327E+3,0.500E+2,0.77785000E+1,0.00000000E+0 - ,0.24003960E+3,0.327E+3,0.510E+2,0.77785000E+1,0.00000000E+0 - ,0.22389640E+3,0.327E+3,0.520E+2,0.77785000E+1,0.00000000E+0 - ,0.20368550E+3,0.327E+3,0.530E+2,0.77785000E+1,0.00000000E+0 - ,0.18426650E+3,0.327E+3,0.540E+2,0.77785000E+1,0.00000000E+0 - ,0.72757110E+3,0.327E+3,0.550E+2,0.77785000E+1,0.00000000E+0 - ,0.67509330E+3,0.327E+3,0.560E+2,0.77785000E+1,0.00000000E+0 - ,0.59711540E+3,0.327E+3,0.570E+2,0.77785000E+1,0.00000000E+0 - ,0.28341080E+3,0.327E+3,0.580E+2,0.77785000E+1,0.27991000E+1 - ,0.59987830E+3,0.327E+3,0.590E+2,0.77785000E+1,0.00000000E+0 - ,0.57662050E+3,0.327E+3,0.600E+2,0.77785000E+1,0.00000000E+0 - ,0.56231220E+3,0.327E+3,0.610E+2,0.77785000E+1,0.00000000E+0 - ,0.54912780E+3,0.327E+3,0.620E+2,0.77785000E+1,0.00000000E+0 - ,0.53743950E+3,0.327E+3,0.630E+2,0.77785000E+1,0.00000000E+0 - ,0.42647230E+3,0.327E+3,0.640E+2,0.77785000E+1,0.00000000E+0 - ,0.47530650E+3,0.327E+3,0.650E+2,0.77785000E+1,0.00000000E+0 - ,0.45903360E+3,0.327E+3,0.660E+2,0.77785000E+1,0.00000000E+0 - ,0.48549610E+3,0.327E+3,0.670E+2,0.77785000E+1,0.00000000E+0 - ,0.47524580E+3,0.327E+3,0.680E+2,0.77785000E+1,0.00000000E+0 - ,0.46604870E+3,0.327E+3,0.690E+2,0.77785000E+1,0.00000000E+0 - ,0.46040630E+3,0.327E+3,0.700E+2,0.77785000E+1,0.00000000E+0 - ,0.39029370E+3,0.327E+3,0.710E+2,0.77785000E+1,0.00000000E+0 - ,0.38633500E+3,0.327E+3,0.720E+2,0.77785000E+1,0.00000000E+0 - ,0.35438040E+3,0.327E+3,0.730E+2,0.77785000E+1,0.00000000E+0 - ,0.30091280E+3,0.327E+3,0.740E+2,0.77785000E+1,0.00000000E+0 - ,0.30657700E+3,0.327E+3,0.750E+2,0.77785000E+1,0.00000000E+0 - ,0.27917480E+3,0.327E+3,0.760E+2,0.77785000E+1,0.00000000E+0 - ,0.25671260E+3,0.327E+3,0.770E+2,0.77785000E+1,0.00000000E+0 - ,0.21450850E+3,0.327E+3,0.780E+2,0.77785000E+1,0.00000000E+0 - ,0.20089400E+3,0.327E+3,0.790E+2,0.77785000E+1,0.00000000E+0 - ,0.20681470E+3,0.327E+3,0.800E+2,0.77785000E+1,0.00000000E+0 - ,0.29586670E+3,0.327E+3,0.810E+2,0.77785000E+1,0.00000000E+0 - ,0.29066840E+3,0.327E+3,0.820E+2,0.77785000E+1,0.00000000E+0 - ,0.26889430E+3,0.327E+3,0.830E+2,0.77785000E+1,0.00000000E+0 - ,0.25754500E+3,0.327E+3,0.840E+2,0.77785000E+1,0.00000000E+0 - ,0.23900100E+3,0.327E+3,0.850E+2,0.77785000E+1,0.00000000E+0 - ,0.22025450E+3,0.327E+3,0.860E+2,0.77785000E+1,0.00000000E+0 - ,0.69085290E+3,0.327E+3,0.870E+2,0.77785000E+1,0.00000000E+0 - ,0.67010980E+3,0.327E+3,0.880E+2,0.77785000E+1,0.00000000E+0 - ,0.59610010E+3,0.327E+3,0.890E+2,0.77785000E+1,0.00000000E+0 - ,0.54016650E+3,0.327E+3,0.900E+2,0.77785000E+1,0.00000000E+0 - ,0.53472260E+3,0.327E+3,0.910E+2,0.77785000E+1,0.00000000E+0 - ,0.51792390E+3,0.327E+3,0.920E+2,0.77785000E+1,0.00000000E+0 - ,0.53080430E+3,0.327E+3,0.930E+2,0.77785000E+1,0.00000000E+0 - ,0.51445080E+3,0.327E+3,0.940E+2,0.77785000E+1,0.00000000E+0 - ,0.29768000E+2,0.327E+3,0.101E+3,0.77785000E+1,0.00000000E+0 - ,0.93835600E+2,0.327E+3,0.103E+3,0.77785000E+1,0.98650000E+0 - ,0.12018800E+3,0.327E+3,0.104E+3,0.77785000E+1,0.98080000E+0 - ,0.93454100E+2,0.327E+3,0.105E+3,0.77785000E+1,0.97060000E+0 - ,0.71331800E+2,0.327E+3,0.106E+3,0.77785000E+1,0.98680000E+0 - ,0.50381400E+2,0.327E+3,0.107E+3,0.77785000E+1,0.99440000E+0 - ,0.37217800E+2,0.327E+3,0.108E+3,0.77785000E+1,0.99250000E+0 - ,0.26103100E+2,0.327E+3,0.109E+3,0.77785000E+1,0.99820000E+0 - ,0.13698410E+3,0.327E+3,0.111E+3,0.77785000E+1,0.96840000E+0 - ,0.21133880E+3,0.327E+3,0.112E+3,0.77785000E+1,0.96280000E+0 - ,0.21570660E+3,0.327E+3,0.113E+3,0.77785000E+1,0.96480000E+0 - ,0.17559630E+3,0.327E+3,0.114E+3,0.77785000E+1,0.95070000E+0 - ,0.14538010E+3,0.327E+3,0.115E+3,0.77785000E+1,0.99470000E+0 - ,0.12399050E+3,0.327E+3,0.116E+3,0.77785000E+1,0.99480000E+0 - ,0.10232230E+3,0.327E+3,0.117E+3,0.77785000E+1,0.99720000E+0 - ,0.19095210E+3,0.327E+3,0.119E+3,0.77785000E+1,0.97670000E+0 - ,0.35707210E+3,0.327E+3,0.120E+3,0.77785000E+1,0.98310000E+0 - ,0.19252210E+3,0.327E+3,0.121E+3,0.77785000E+1,0.18627000E+1 - ,0.18603690E+3,0.327E+3,0.122E+3,0.77785000E+1,0.18299000E+1 - ,0.18233530E+3,0.327E+3,0.123E+3,0.77785000E+1,0.19138000E+1 - ,0.18047740E+3,0.327E+3,0.124E+3,0.77785000E+1,0.18269000E+1 - ,0.16694170E+3,0.327E+3,0.125E+3,0.77785000E+1,0.16406000E+1 - ,0.15486080E+3,0.327E+3,0.126E+3,0.77785000E+1,0.16483000E+1 - ,0.14780570E+3,0.327E+3,0.127E+3,0.77785000E+1,0.17149000E+1 - ,0.14445180E+3,0.327E+3,0.128E+3,0.77785000E+1,0.17937000E+1 - ,0.14216340E+3,0.327E+3,0.129E+3,0.77785000E+1,0.95760000E+0 - ,0.13437060E+3,0.327E+3,0.130E+3,0.77785000E+1,0.19419000E+1 - ,0.21533740E+3,0.327E+3,0.131E+3,0.77785000E+1,0.96010000E+0 - ,0.19100140E+3,0.327E+3,0.132E+3,0.77785000E+1,0.94340000E+0 - ,0.17255780E+3,0.327E+3,0.133E+3,0.77785000E+1,0.98890000E+0 - ,0.15854630E+3,0.327E+3,0.134E+3,0.77785000E+1,0.99010000E+0 - ,0.14068120E+3,0.327E+3,0.135E+3,0.77785000E+1,0.99740000E+0 - ,0.22851060E+3,0.327E+3,0.137E+3,0.77785000E+1,0.97380000E+0 - ,0.43445030E+3,0.327E+3,0.138E+3,0.77785000E+1,0.98010000E+0 - ,0.33691730E+3,0.327E+3,0.139E+3,0.77785000E+1,0.19153000E+1 - ,0.25466980E+3,0.327E+3,0.140E+3,0.77785000E+1,0.19355000E+1 - ,0.25719610E+3,0.327E+3,0.141E+3,0.77785000E+1,0.19545000E+1 - ,0.24051390E+3,0.327E+3,0.142E+3,0.77785000E+1,0.19420000E+1 - ,0.26786660E+3,0.327E+3,0.143E+3,0.77785000E+1,0.16682000E+1 - ,0.21097970E+3,0.327E+3,0.144E+3,0.77785000E+1,0.18584000E+1 - ,0.19765180E+3,0.327E+3,0.145E+3,0.77785000E+1,0.19003000E+1 - ,0.18389000E+3,0.327E+3,0.146E+3,0.77785000E+1,0.18630000E+1 - ,0.17779340E+3,0.327E+3,0.147E+3,0.77785000E+1,0.96790000E+0 - ,0.17646970E+3,0.327E+3,0.148E+3,0.77785000E+1,0.19539000E+1 - ,0.27425370E+3,0.327E+3,0.149E+3,0.77785000E+1,0.96330000E+0 - ,0.25002640E+3,0.327E+3,0.150E+3,0.77785000E+1,0.95140000E+0 - ,0.23552760E+3,0.327E+3,0.151E+3,0.77785000E+1,0.97490000E+0 - ,0.22379990E+3,0.327E+3,0.152E+3,0.77785000E+1,0.98110000E+0 - ,0.20556330E+3,0.327E+3,0.153E+3,0.77785000E+1,0.99680000E+0 - ,0.27160040E+3,0.327E+3,0.155E+3,0.77785000E+1,0.99090000E+0 - ,0.56214810E+3,0.327E+3,0.156E+3,0.77785000E+1,0.97970000E+0 - ,0.42601980E+3,0.327E+3,0.157E+3,0.77785000E+1,0.19373000E+1 - ,0.27502300E+3,0.327E+3,0.159E+3,0.77785000E+1,0.29425000E+1 - ,0.26936720E+3,0.327E+3,0.160E+3,0.77785000E+1,0.29455000E+1 - ,0.26096100E+3,0.327E+3,0.161E+3,0.77785000E+1,0.29413000E+1 - ,0.26192990E+3,0.327E+3,0.162E+3,0.77785000E+1,0.29300000E+1 - ,0.25167010E+3,0.327E+3,0.163E+3,0.77785000E+1,0.18286000E+1 - ,0.26338860E+3,0.327E+3,0.164E+3,0.77785000E+1,0.28732000E+1 - ,0.24770800E+3,0.327E+3,0.165E+3,0.77785000E+1,0.29086000E+1 - ,0.25153730E+3,0.327E+3,0.166E+3,0.77785000E+1,0.28965000E+1 - ,0.23534260E+3,0.327E+3,0.167E+3,0.77785000E+1,0.29242000E+1 - ,0.22872630E+3,0.327E+3,0.168E+3,0.77785000E+1,0.29282000E+1 - ,0.22716850E+3,0.327E+3,0.169E+3,0.77785000E+1,0.29246000E+1 - ,0.23821710E+3,0.327E+3,0.170E+3,0.77785000E+1,0.28482000E+1 - ,0.21967420E+3,0.327E+3,0.171E+3,0.77785000E+1,0.29219000E+1 - ,0.29356720E+3,0.327E+3,0.172E+3,0.77785000E+1,0.19254000E+1 - ,0.27385420E+3,0.327E+3,0.173E+3,0.77785000E+1,0.19459000E+1 - ,0.25123200E+3,0.327E+3,0.174E+3,0.77785000E+1,0.19292000E+1 - ,0.25317100E+3,0.327E+3,0.175E+3,0.77785000E+1,0.18104000E+1 - ,0.22427020E+3,0.327E+3,0.176E+3,0.77785000E+1,0.18858000E+1 - ,0.21152860E+3,0.327E+3,0.177E+3,0.77785000E+1,0.18648000E+1 - ,0.20238660E+3,0.327E+3,0.178E+3,0.77785000E+1,0.19188000E+1 - ,0.19363610E+3,0.327E+3,0.179E+3,0.77785000E+1,0.98460000E+0 - ,0.18779620E+3,0.327E+3,0.180E+3,0.77785000E+1,0.19896000E+1 - ,0.29544290E+3,0.327E+3,0.181E+3,0.77785000E+1,0.92670000E+0 - ,0.27127660E+3,0.327E+3,0.182E+3,0.77785000E+1,0.93830000E+0 - ,0.26414600E+3,0.327E+3,0.183E+3,0.77785000E+1,0.98200000E+0 - ,0.25774500E+3,0.327E+3,0.184E+3,0.77785000E+1,0.98150000E+0 - ,0.24187370E+3,0.327E+3,0.185E+3,0.77785000E+1,0.99540000E+0 - ,0.30597750E+3,0.327E+3,0.187E+3,0.77785000E+1,0.97050000E+0 - ,0.56160150E+3,0.327E+3,0.188E+3,0.77785000E+1,0.96620000E+0 - ,0.32525320E+3,0.327E+3,0.189E+3,0.77785000E+1,0.29070000E+1 - ,0.37317930E+3,0.327E+3,0.190E+3,0.77785000E+1,0.28844000E+1 - ,0.33481340E+3,0.327E+3,0.191E+3,0.77785000E+1,0.28738000E+1 - ,0.29740820E+3,0.327E+3,0.192E+3,0.77785000E+1,0.28878000E+1 - ,0.28658400E+3,0.327E+3,0.193E+3,0.77785000E+1,0.29095000E+1 - ,0.34006000E+3,0.327E+3,0.194E+3,0.77785000E+1,0.19209000E+1 - ,0.79784500E+2,0.327E+3,0.204E+3,0.77785000E+1,0.19697000E+1 - ,0.78862400E+2,0.327E+3,0.205E+3,0.77785000E+1,0.19441000E+1 - ,0.58605700E+2,0.327E+3,0.206E+3,0.77785000E+1,0.19985000E+1 - ,0.47416800E+2,0.327E+3,0.207E+3,0.77785000E+1,0.20143000E+1 - ,0.33021500E+2,0.327E+3,0.208E+3,0.77785000E+1,0.19887000E+1 - ,0.14035180E+3,0.327E+3,0.212E+3,0.77785000E+1,0.19496000E+1 - ,0.16949030E+3,0.327E+3,0.213E+3,0.77785000E+1,0.19311000E+1 - ,0.16367210E+3,0.327E+3,0.214E+3,0.77785000E+1,0.19435000E+1 - ,0.14335180E+3,0.327E+3,0.215E+3,0.77785000E+1,0.20102000E+1 - ,0.12152560E+3,0.327E+3,0.216E+3,0.77785000E+1,0.19903000E+1 - ,0.19732010E+3,0.327E+3,0.220E+3,0.77785000E+1,0.19349000E+1 - ,0.19055180E+3,0.327E+3,0.221E+3,0.77785000E+1,0.28999000E+1 - ,0.19300120E+3,0.327E+3,0.222E+3,0.77785000E+1,0.38675000E+1 - ,0.17676920E+3,0.327E+3,0.223E+3,0.77785000E+1,0.29110000E+1 - ,0.13462870E+3,0.327E+3,0.224E+3,0.77785000E+1,0.10619100E+2 - ,0.11592230E+3,0.327E+3,0.225E+3,0.77785000E+1,0.98849000E+1 - ,0.11372870E+3,0.327E+3,0.226E+3,0.77785000E+1,0.91376000E+1 - ,0.13200850E+3,0.327E+3,0.227E+3,0.77785000E+1,0.29263000E+1 - ,0.12331710E+3,0.327E+3,0.228E+3,0.77785000E+1,0.65458000E+1 - ,0.17220040E+3,0.327E+3,0.231E+3,0.77785000E+1,0.19315000E+1 - ,0.18217310E+3,0.327E+3,0.232E+3,0.77785000E+1,0.19447000E+1 - ,0.16821430E+3,0.327E+3,0.233E+3,0.77785000E+1,0.19793000E+1 - ,0.15734260E+3,0.327E+3,0.234E+3,0.77785000E+1,0.19812000E+1 - ,0.23676080E+3,0.327E+3,0.238E+3,0.77785000E+1,0.19143000E+1 - ,0.22925270E+3,0.327E+3,0.239E+3,0.77785000E+1,0.28903000E+1 - ,0.23167830E+3,0.327E+3,0.240E+3,0.77785000E+1,0.39106000E+1 - ,0.22415900E+3,0.327E+3,0.241E+3,0.77785000E+1,0.29225000E+1 - ,0.19953250E+3,0.327E+3,0.242E+3,0.77785000E+1,0.11055600E+2 - ,0.17710190E+3,0.327E+3,0.243E+3,0.77785000E+1,0.95402000E+1 - ,0.16774480E+3,0.327E+3,0.244E+3,0.77785000E+1,0.88895000E+1 - ,0.17007730E+3,0.327E+3,0.245E+3,0.77785000E+1,0.29696000E+1 - ,0.17730100E+3,0.327E+3,0.246E+3,0.77785000E+1,0.57095000E+1 - ,0.22299250E+3,0.327E+3,0.249E+3,0.77785000E+1,0.19378000E+1 - ,0.24213510E+3,0.327E+3,0.250E+3,0.77785000E+1,0.19505000E+1 - ,0.22940100E+3,0.327E+3,0.251E+3,0.77785000E+1,0.19523000E+1 - ,0.22211080E+3,0.327E+3,0.252E+3,0.77785000E+1,0.19639000E+1 - ,0.28697840E+3,0.327E+3,0.256E+3,0.77785000E+1,0.18467000E+1 - ,0.29814430E+3,0.327E+3,0.257E+3,0.77785000E+1,0.29175000E+1 - ,0.22247740E+3,0.327E+3,0.272E+3,0.77785000E+1,0.38840000E+1 - ,0.23203320E+3,0.327E+3,0.273E+3,0.77785000E+1,0.28988000E+1 - ,0.21683460E+3,0.327E+3,0.274E+3,0.77785000E+1,0.10915300E+2 - ,0.19794790E+3,0.327E+3,0.275E+3,0.77785000E+1,0.98054000E+1 - ,0.18697210E+3,0.327E+3,0.276E+3,0.77785000E+1,0.91527000E+1 - ,0.18993130E+3,0.327E+3,0.277E+3,0.77785000E+1,0.29424000E+1 - ,0.19953230E+3,0.327E+3,0.278E+3,0.77785000E+1,0.66669000E+1 - ,0.23939990E+3,0.327E+3,0.281E+3,0.77785000E+1,0.19302000E+1 - ,0.25289420E+3,0.327E+3,0.282E+3,0.77785000E+1,0.19356000E+1 - ,0.25818280E+3,0.327E+3,0.283E+3,0.77785000E+1,0.19655000E+1 - ,0.25681660E+3,0.327E+3,0.284E+3,0.77785000E+1,0.19639000E+1 - ,0.31607620E+3,0.327E+3,0.288E+3,0.77785000E+1,0.18075000E+1 - ,0.60653700E+2,0.327E+3,0.305E+3,0.77785000E+1,0.29128000E+1 - ,0.54906600E+2,0.327E+3,0.306E+3,0.77785000E+1,0.29987000E+1 - ,0.41919300E+2,0.327E+3,0.307E+3,0.77785000E+1,0.29903000E+1 - ,0.13338200E+3,0.327E+3,0.313E+3,0.77785000E+1,0.29146000E+1 - ,0.15940630E+3,0.327E+3,0.314E+3,0.77785000E+1,0.29407000E+1 - ,0.13339560E+3,0.327E+3,0.315E+3,0.77785000E+1,0.29859000E+1 - ,0.11828630E+3,0.327E+3,0.327E+3,0.77785000E+1,0.77785000E+1 - ,0.20185300E+2,0.328E+3,0.100E+1,0.62918000E+1,0.91180000E+0 - ,0.13430500E+2,0.328E+3,0.200E+1,0.62918000E+1,0.00000000E+0 - ,0.32065850E+3,0.328E+3,0.300E+1,0.62918000E+1,0.00000000E+0 - ,0.18269550E+3,0.328E+3,0.400E+1,0.62918000E+1,0.00000000E+0 - ,0.12239150E+3,0.328E+3,0.500E+1,0.62918000E+1,0.00000000E+0 - ,0.82593000E+2,0.328E+3,0.600E+1,0.62918000E+1,0.00000000E+0 - ,0.57846900E+2,0.328E+3,0.700E+1,0.62918000E+1,0.00000000E+0 - ,0.43916100E+2,0.328E+3,0.800E+1,0.62918000E+1,0.00000000E+0 - ,0.33392400E+2,0.328E+3,0.900E+1,0.62918000E+1,0.00000000E+0 - ,0.25794000E+2,0.328E+3,0.100E+2,0.62918000E+1,0.00000000E+0 - ,0.38337730E+3,0.328E+3,0.110E+2,0.62918000E+1,0.00000000E+0 - ,0.29192630E+3,0.328E+3,0.120E+2,0.62918000E+1,0.00000000E+0 - ,0.26812070E+3,0.328E+3,0.130E+2,0.62918000E+1,0.00000000E+0 - ,0.21041880E+3,0.328E+3,0.140E+2,0.62918000E+1,0.00000000E+0 - ,0.16372990E+3,0.328E+3,0.150E+2,0.62918000E+1,0.00000000E+0 - ,0.13584700E+3,0.328E+3,0.160E+2,0.62918000E+1,0.00000000E+0 - ,0.11102480E+3,0.328E+3,0.170E+2,0.62918000E+1,0.00000000E+0 - ,0.90955300E+2,0.328E+3,0.180E+2,0.62918000E+1,0.00000000E+0 - ,0.63014120E+3,0.328E+3,0.190E+2,0.62918000E+1,0.00000000E+0 - ,0.51554150E+3,0.328E+3,0.200E+2,0.62918000E+1,0.00000000E+0 - ,0.42512770E+3,0.328E+3,0.210E+2,0.62918000E+1,0.00000000E+0 - ,0.41001290E+3,0.328E+3,0.220E+2,0.62918000E+1,0.00000000E+0 - ,0.37517450E+3,0.328E+3,0.230E+2,0.62918000E+1,0.00000000E+0 - ,0.29585990E+3,0.328E+3,0.240E+2,0.62918000E+1,0.00000000E+0 - ,0.32268450E+3,0.328E+3,0.250E+2,0.62918000E+1,0.00000000E+0 - ,0.25353650E+3,0.328E+3,0.260E+2,0.62918000E+1,0.00000000E+0 - ,0.26794820E+3,0.328E+3,0.270E+2,0.62918000E+1,0.00000000E+0 - ,0.27623270E+3,0.328E+3,0.280E+2,0.62918000E+1,0.00000000E+0 - ,0.21214340E+3,0.328E+3,0.290E+2,0.62918000E+1,0.00000000E+0 - ,0.21694470E+3,0.328E+3,0.300E+2,0.62918000E+1,0.00000000E+0 - ,0.25679600E+3,0.328E+3,0.310E+2,0.62918000E+1,0.00000000E+0 - ,0.22570800E+3,0.328E+3,0.320E+2,0.62918000E+1,0.00000000E+0 - ,0.19211030E+3,0.328E+3,0.330E+2,0.62918000E+1,0.00000000E+0 - ,0.17227180E+3,0.328E+3,0.340E+2,0.62918000E+1,0.00000000E+0 - ,0.15074260E+3,0.328E+3,0.350E+2,0.62918000E+1,0.00000000E+0 - ,0.13116000E+3,0.328E+3,0.360E+2,0.62918000E+1,0.00000000E+0 - ,0.70593280E+3,0.328E+3,0.370E+2,0.62918000E+1,0.00000000E+0 - ,0.61461390E+3,0.328E+3,0.380E+2,0.62918000E+1,0.00000000E+0 - ,0.53667450E+3,0.328E+3,0.390E+2,0.62918000E+1,0.00000000E+0 - ,0.48150000E+3,0.328E+3,0.400E+2,0.62918000E+1,0.00000000E+0 - ,0.43865020E+3,0.328E+3,0.410E+2,0.62918000E+1,0.00000000E+0 - ,0.33835350E+3,0.328E+3,0.420E+2,0.62918000E+1,0.00000000E+0 - ,0.37763020E+3,0.328E+3,0.430E+2,0.62918000E+1,0.00000000E+0 - ,0.28746140E+3,0.328E+3,0.440E+2,0.62918000E+1,0.00000000E+0 - ,0.31395770E+3,0.328E+3,0.450E+2,0.62918000E+1,0.00000000E+0 - ,0.29103090E+3,0.328E+3,0.460E+2,0.62918000E+1,0.00000000E+0 - ,0.24320090E+3,0.328E+3,0.470E+2,0.62918000E+1,0.00000000E+0 - ,0.25636430E+3,0.328E+3,0.480E+2,0.62918000E+1,0.00000000E+0 - ,0.32207710E+3,0.328E+3,0.490E+2,0.62918000E+1,0.00000000E+0 - ,0.29688720E+3,0.328E+3,0.500E+2,0.62918000E+1,0.00000000E+0 - ,0.26394960E+3,0.328E+3,0.510E+2,0.62918000E+1,0.00000000E+0 - ,0.24463100E+3,0.328E+3,0.520E+2,0.62918000E+1,0.00000000E+0 - ,0.22102500E+3,0.328E+3,0.530E+2,0.62918000E+1,0.00000000E+0 - ,0.19865840E+3,0.328E+3,0.540E+2,0.62918000E+1,0.00000000E+0 - ,0.85972520E+3,0.328E+3,0.550E+2,0.62918000E+1,0.00000000E+0 - ,0.78452520E+3,0.328E+3,0.560E+2,0.62918000E+1,0.00000000E+0 - ,0.68699020E+3,0.328E+3,0.570E+2,0.62918000E+1,0.00000000E+0 - ,0.31211020E+3,0.328E+3,0.580E+2,0.62918000E+1,0.27991000E+1 - ,0.69469690E+3,0.328E+3,0.590E+2,0.62918000E+1,0.00000000E+0 - ,0.66673430E+3,0.328E+3,0.600E+2,0.62918000E+1,0.00000000E+0 - ,0.64990940E+3,0.328E+3,0.610E+2,0.62918000E+1,0.00000000E+0 - ,0.63444150E+3,0.328E+3,0.620E+2,0.62918000E+1,0.00000000E+0 - ,0.62071840E+3,0.328E+3,0.630E+2,0.62918000E+1,0.00000000E+0 - ,0.48671800E+3,0.328E+3,0.640E+2,0.62918000E+1,0.00000000E+0 - ,0.55092420E+3,0.328E+3,0.650E+2,0.62918000E+1,0.00000000E+0 - ,0.53097990E+3,0.328E+3,0.660E+2,0.62918000E+1,0.00000000E+0 - ,0.55938190E+3,0.328E+3,0.670E+2,0.62918000E+1,0.00000000E+0 - ,0.54744560E+3,0.328E+3,0.680E+2,0.62918000E+1,0.00000000E+0 - ,0.53665810E+3,0.328E+3,0.690E+2,0.62918000E+1,0.00000000E+0 - ,0.53043510E+3,0.328E+3,0.700E+2,0.62918000E+1,0.00000000E+0 - ,0.44599990E+3,0.328E+3,0.710E+2,0.62918000E+1,0.00000000E+0 - ,0.43700330E+3,0.328E+3,0.720E+2,0.62918000E+1,0.00000000E+0 - ,0.39822740E+3,0.328E+3,0.730E+2,0.62918000E+1,0.00000000E+0 - ,0.33618450E+3,0.328E+3,0.740E+2,0.62918000E+1,0.00000000E+0 - ,0.34173640E+3,0.328E+3,0.750E+2,0.62918000E+1,0.00000000E+0 - ,0.30943260E+3,0.328E+3,0.760E+2,0.62918000E+1,0.00000000E+0 - ,0.28322570E+3,0.328E+3,0.770E+2,0.62918000E+1,0.00000000E+0 - ,0.23539680E+3,0.328E+3,0.780E+2,0.62918000E+1,0.00000000E+0 - ,0.21999670E+3,0.328E+3,0.790E+2,0.62918000E+1,0.00000000E+0 - ,0.22609290E+3,0.328E+3,0.800E+2,0.62918000E+1,0.00000000E+0 - ,0.33090130E+3,0.328E+3,0.810E+2,0.62918000E+1,0.00000000E+0 - ,0.32264990E+3,0.328E+3,0.820E+2,0.62918000E+1,0.00000000E+0 - ,0.29578510E+3,0.328E+3,0.830E+2,0.62918000E+1,0.00000000E+0 - ,0.28178430E+3,0.328E+3,0.840E+2,0.62918000E+1,0.00000000E+0 - ,0.25980700E+3,0.328E+3,0.850E+2,0.62918000E+1,0.00000000E+0 - ,0.23801290E+3,0.328E+3,0.860E+2,0.62918000E+1,0.00000000E+0 - ,0.80981600E+3,0.328E+3,0.870E+2,0.62918000E+1,0.00000000E+0 - ,0.77454730E+3,0.328E+3,0.880E+2,0.62918000E+1,0.00000000E+0 - ,0.68271560E+3,0.328E+3,0.890E+2,0.62918000E+1,0.00000000E+0 - ,0.61185740E+3,0.328E+3,0.900E+2,0.62918000E+1,0.00000000E+0 - ,0.60871940E+3,0.328E+3,0.910E+2,0.62918000E+1,0.00000000E+0 - ,0.58942580E+3,0.328E+3,0.920E+2,0.62918000E+1,0.00000000E+0 - ,0.60818860E+3,0.328E+3,0.930E+2,0.62918000E+1,0.00000000E+0 - ,0.58874820E+3,0.328E+3,0.940E+2,0.62918000E+1,0.00000000E+0 - ,0.32514900E+2,0.328E+3,0.101E+3,0.62918000E+1,0.00000000E+0 - ,0.10615450E+3,0.328E+3,0.103E+3,0.62918000E+1,0.98650000E+0 - ,0.13527020E+3,0.328E+3,0.104E+3,0.62918000E+1,0.98080000E+0 - ,0.10292200E+3,0.328E+3,0.105E+3,0.62918000E+1,0.97060000E+0 - ,0.77512400E+2,0.328E+3,0.106E+3,0.62918000E+1,0.98680000E+0 - ,0.53969000E+2,0.328E+3,0.107E+3,0.62918000E+1,0.99440000E+0 - ,0.39412500E+2,0.328E+3,0.108E+3,0.62918000E+1,0.99250000E+0 - ,0.27270500E+2,0.328E+3,0.109E+3,0.62918000E+1,0.99820000E+0 - ,0.15557860E+3,0.328E+3,0.111E+3,0.62918000E+1,0.96840000E+0 - ,0.24053020E+3,0.328E+3,0.112E+3,0.62918000E+1,0.96280000E+0 - ,0.24284190E+3,0.328E+3,0.113E+3,0.62918000E+1,0.96480000E+0 - ,0.19441840E+3,0.328E+3,0.114E+3,0.62918000E+1,0.95070000E+0 - ,0.15894530E+3,0.328E+3,0.115E+3,0.62918000E+1,0.99470000E+0 - ,0.13437370E+3,0.328E+3,0.116E+3,0.62918000E+1,0.99480000E+0 - ,0.10989000E+3,0.328E+3,0.117E+3,0.62918000E+1,0.99720000E+0 - ,0.21449610E+3,0.328E+3,0.119E+3,0.62918000E+1,0.97670000E+0 - ,0.41261420E+3,0.328E+3,0.120E+3,0.62918000E+1,0.98310000E+0 - ,0.21361290E+3,0.328E+3,0.121E+3,0.62918000E+1,0.18627000E+1 - ,0.20626510E+3,0.328E+3,0.122E+3,0.62918000E+1,0.18299000E+1 - ,0.20220500E+3,0.328E+3,0.123E+3,0.62918000E+1,0.19138000E+1 - ,0.20045980E+3,0.328E+3,0.124E+3,0.62918000E+1,0.18269000E+1 - ,0.18404780E+3,0.328E+3,0.125E+3,0.62918000E+1,0.16406000E+1 - ,0.17031170E+3,0.328E+3,0.126E+3,0.62918000E+1,0.16483000E+1 - ,0.16252860E+3,0.328E+3,0.127E+3,0.62918000E+1,0.17149000E+1 - ,0.15894050E+3,0.328E+3,0.128E+3,0.62918000E+1,0.17937000E+1 - ,0.15733960E+3,0.328E+3,0.129E+3,0.62918000E+1,0.95760000E+0 - ,0.14715970E+3,0.328E+3,0.130E+3,0.62918000E+1,0.19419000E+1 - ,0.24100160E+3,0.328E+3,0.131E+3,0.62918000E+1,0.96010000E+0 - ,0.21104400E+3,0.328E+3,0.132E+3,0.62918000E+1,0.94340000E+0 - ,0.18884500E+3,0.328E+3,0.133E+3,0.62918000E+1,0.98890000E+0 - ,0.17234930E+3,0.328E+3,0.134E+3,0.62918000E+1,0.99010000E+0 - ,0.15180060E+3,0.328E+3,0.135E+3,0.62918000E+1,0.99740000E+0 - ,0.25585120E+3,0.328E+3,0.137E+3,0.62918000E+1,0.97380000E+0 - ,0.50246340E+3,0.328E+3,0.138E+3,0.62918000E+1,0.98010000E+0 - ,0.38179030E+3,0.328E+3,0.139E+3,0.62918000E+1,0.19153000E+1 - ,0.28270210E+3,0.328E+3,0.140E+3,0.62918000E+1,0.19355000E+1 - ,0.28559450E+3,0.328E+3,0.141E+3,0.62918000E+1,0.19545000E+1 - ,0.26625680E+3,0.328E+3,0.142E+3,0.62918000E+1,0.19420000E+1 - ,0.29944610E+3,0.328E+3,0.143E+3,0.62918000E+1,0.16682000E+1 - ,0.23182850E+3,0.328E+3,0.144E+3,0.62918000E+1,0.18584000E+1 - ,0.21698060E+3,0.328E+3,0.145E+3,0.62918000E+1,0.19003000E+1 - ,0.20155360E+3,0.328E+3,0.146E+3,0.62918000E+1,0.18630000E+1 - ,0.19509170E+3,0.328E+3,0.147E+3,0.62918000E+1,0.96790000E+0 - ,0.19260990E+3,0.328E+3,0.148E+3,0.62918000E+1,0.19539000E+1 - ,0.30671200E+3,0.328E+3,0.149E+3,0.62918000E+1,0.96330000E+0 - ,0.27663930E+3,0.328E+3,0.150E+3,0.62918000E+1,0.95140000E+0 - ,0.25861940E+3,0.328E+3,0.151E+3,0.62918000E+1,0.97490000E+0 - ,0.24442920E+3,0.328E+3,0.152E+3,0.62918000E+1,0.98110000E+0 - ,0.22308960E+3,0.328E+3,0.153E+3,0.62918000E+1,0.99680000E+0 - ,0.30164000E+3,0.328E+3,0.155E+3,0.62918000E+1,0.99090000E+0 - ,0.65239960E+3,0.328E+3,0.156E+3,0.62918000E+1,0.97970000E+0 - ,0.48348120E+3,0.328E+3,0.157E+3,0.62918000E+1,0.19373000E+1 - ,0.30268200E+3,0.328E+3,0.159E+3,0.62918000E+1,0.29425000E+1 - ,0.29642470E+3,0.328E+3,0.160E+3,0.62918000E+1,0.29455000E+1 - ,0.28701630E+3,0.328E+3,0.161E+3,0.62918000E+1,0.29413000E+1 - ,0.28852060E+3,0.328E+3,0.162E+3,0.62918000E+1,0.29300000E+1 - ,0.27859570E+3,0.328E+3,0.163E+3,0.62918000E+1,0.18286000E+1 - ,0.29030390E+3,0.328E+3,0.164E+3,0.62918000E+1,0.28732000E+1 - ,0.27264920E+3,0.328E+3,0.165E+3,0.62918000E+1,0.29086000E+1 - ,0.27761700E+3,0.328E+3,0.166E+3,0.62918000E+1,0.28965000E+1 - ,0.25869870E+3,0.328E+3,0.167E+3,0.62918000E+1,0.29242000E+1 - ,0.25129970E+3,0.328E+3,0.168E+3,0.62918000E+1,0.29282000E+1 - ,0.24969380E+3,0.328E+3,0.169E+3,0.62918000E+1,0.29246000E+1 - ,0.26246920E+3,0.328E+3,0.170E+3,0.62918000E+1,0.28482000E+1 - ,0.24127880E+3,0.328E+3,0.171E+3,0.62918000E+1,0.29219000E+1 - ,0.32823180E+3,0.328E+3,0.172E+3,0.62918000E+1,0.19254000E+1 - ,0.30426470E+3,0.328E+3,0.173E+3,0.62918000E+1,0.19459000E+1 - ,0.27731590E+3,0.328E+3,0.174E+3,0.62918000E+1,0.19292000E+1 - ,0.28103260E+3,0.328E+3,0.175E+3,0.62918000E+1,0.18104000E+1 - ,0.24528440E+3,0.328E+3,0.176E+3,0.62918000E+1,0.18858000E+1 - ,0.23080460E+3,0.328E+3,0.177E+3,0.62918000E+1,0.18648000E+1 - ,0.22051410E+3,0.328E+3,0.178E+3,0.62918000E+1,0.19188000E+1 - ,0.21098620E+3,0.328E+3,0.179E+3,0.62918000E+1,0.98460000E+0 - ,0.20359070E+3,0.328E+3,0.180E+3,0.62918000E+1,0.19896000E+1 - ,0.32952070E+3,0.328E+3,0.181E+3,0.62918000E+1,0.92670000E+0 - ,0.29946420E+3,0.328E+3,0.182E+3,0.62918000E+1,0.93830000E+0 - ,0.28996580E+3,0.328E+3,0.183E+3,0.62918000E+1,0.98200000E+0 - ,0.28177690E+3,0.328E+3,0.184E+3,0.62918000E+1,0.98150000E+0 - ,0.26291680E+3,0.328E+3,0.185E+3,0.62918000E+1,0.99540000E+0 - ,0.33961520E+3,0.328E+3,0.187E+3,0.62918000E+1,0.97050000E+0 - ,0.64757740E+3,0.328E+3,0.188E+3,0.62918000E+1,0.96620000E+0 - ,0.35809400E+3,0.328E+3,0.189E+3,0.62918000E+1,0.29070000E+1 - ,0.41447150E+3,0.328E+3,0.190E+3,0.62918000E+1,0.28844000E+1 - ,0.37053510E+3,0.328E+3,0.191E+3,0.62918000E+1,0.28738000E+1 - ,0.32689030E+3,0.328E+3,0.192E+3,0.62918000E+1,0.28878000E+1 - ,0.31449130E+3,0.328E+3,0.193E+3,0.62918000E+1,0.29095000E+1 - ,0.38028110E+3,0.328E+3,0.194E+3,0.62918000E+1,0.19209000E+1 - ,0.87785200E+2,0.328E+3,0.204E+3,0.62918000E+1,0.19697000E+1 - ,0.86389500E+2,0.328E+3,0.205E+3,0.62918000E+1,0.19441000E+1 - ,0.63209200E+2,0.328E+3,0.206E+3,0.62918000E+1,0.19985000E+1 - ,0.50719800E+2,0.328E+3,0.207E+3,0.62918000E+1,0.20143000E+1 - ,0.34859600E+2,0.328E+3,0.208E+3,0.62918000E+1,0.19887000E+1 - ,0.15613270E+3,0.328E+3,0.212E+3,0.62918000E+1,0.19496000E+1 - ,0.18876990E+3,0.328E+3,0.213E+3,0.62918000E+1,0.19311000E+1 - ,0.18076730E+3,0.328E+3,0.214E+3,0.62918000E+1,0.19435000E+1 - ,0.15685490E+3,0.328E+3,0.215E+3,0.62918000E+1,0.20102000E+1 - ,0.13167410E+3,0.328E+3,0.216E+3,0.62918000E+1,0.19903000E+1 - ,0.21936790E+3,0.328E+3,0.220E+3,0.62918000E+1,0.19349000E+1 - ,0.21045590E+3,0.328E+3,0.221E+3,0.62918000E+1,0.28999000E+1 - ,0.21305010E+3,0.328E+3,0.222E+3,0.62918000E+1,0.38675000E+1 - ,0.19516290E+3,0.328E+3,0.223E+3,0.62918000E+1,0.29110000E+1 - ,0.14698850E+3,0.328E+3,0.224E+3,0.62918000E+1,0.10619100E+2 - ,0.12572050E+3,0.328E+3,0.225E+3,0.62918000E+1,0.98849000E+1 - ,0.12344170E+3,0.328E+3,0.226E+3,0.62918000E+1,0.91376000E+1 - ,0.14484240E+3,0.328E+3,0.227E+3,0.62918000E+1,0.29263000E+1 - ,0.13489330E+3,0.328E+3,0.228E+3,0.62918000E+1,0.65458000E+1 - ,0.19047990E+3,0.328E+3,0.231E+3,0.62918000E+1,0.19315000E+1 - ,0.20085740E+3,0.328E+3,0.232E+3,0.62918000E+1,0.19447000E+1 - ,0.18386230E+3,0.328E+3,0.233E+3,0.62918000E+1,0.19793000E+1 - ,0.17100310E+3,0.328E+3,0.234E+3,0.62918000E+1,0.19812000E+1 - ,0.26289820E+3,0.328E+3,0.238E+3,0.62918000E+1,0.19143000E+1 - ,0.25242450E+3,0.328E+3,0.239E+3,0.62918000E+1,0.28903000E+1 - ,0.25445670E+3,0.328E+3,0.240E+3,0.62918000E+1,0.39106000E+1 - ,0.24630770E+3,0.328E+3,0.241E+3,0.62918000E+1,0.29225000E+1 - ,0.21764570E+3,0.328E+3,0.242E+3,0.62918000E+1,0.11055600E+2 - ,0.19205910E+3,0.328E+3,0.243E+3,0.62918000E+1,0.95402000E+1 - ,0.18151960E+3,0.328E+3,0.244E+3,0.62918000E+1,0.88895000E+1 - ,0.18521540E+3,0.328E+3,0.245E+3,0.62918000E+1,0.29696000E+1 - ,0.19349000E+3,0.328E+3,0.246E+3,0.62918000E+1,0.57095000E+1 - ,0.24615700E+3,0.328E+3,0.249E+3,0.62918000E+1,0.19378000E+1 - ,0.26732250E+3,0.328E+3,0.250E+3,0.62918000E+1,0.19505000E+1 - ,0.25143010E+3,0.328E+3,0.251E+3,0.62918000E+1,0.19523000E+1 - ,0.24241490E+3,0.328E+3,0.252E+3,0.62918000E+1,0.19639000E+1 - ,0.31782550E+3,0.328E+3,0.256E+3,0.62918000E+1,0.18467000E+1 - ,0.32883880E+3,0.328E+3,0.257E+3,0.62918000E+1,0.29175000E+1 - ,0.24349370E+3,0.328E+3,0.272E+3,0.62918000E+1,0.38840000E+1 - ,0.25469760E+3,0.328E+3,0.273E+3,0.62918000E+1,0.28988000E+1 - ,0.23640400E+3,0.328E+3,0.274E+3,0.62918000E+1,0.10915300E+2 - ,0.21467590E+3,0.328E+3,0.275E+3,0.62918000E+1,0.98054000E+1 - ,0.20191630E+3,0.328E+3,0.276E+3,0.62918000E+1,0.91527000E+1 - ,0.20622720E+3,0.328E+3,0.277E+3,0.62918000E+1,0.29424000E+1 - ,0.21681400E+3,0.328E+3,0.278E+3,0.62918000E+1,0.66669000E+1 - ,0.26294210E+3,0.328E+3,0.281E+3,0.62918000E+1,0.19302000E+1 - ,0.27771100E+3,0.328E+3,0.282E+3,0.62918000E+1,0.19356000E+1 - ,0.28277180E+3,0.328E+3,0.283E+3,0.62918000E+1,0.19655000E+1 - ,0.28049880E+3,0.328E+3,0.284E+3,0.62918000E+1,0.19639000E+1 - ,0.34977880E+3,0.328E+3,0.288E+3,0.62918000E+1,0.18075000E+1 - ,0.65561800E+2,0.328E+3,0.305E+3,0.62918000E+1,0.29128000E+1 - ,0.59198000E+2,0.328E+3,0.306E+3,0.62918000E+1,0.29987000E+1 - ,0.44744200E+2,0.328E+3,0.307E+3,0.62918000E+1,0.29903000E+1 - ,0.14661210E+3,0.328E+3,0.313E+3,0.62918000E+1,0.29146000E+1 - ,0.17631430E+3,0.328E+3,0.314E+3,0.62918000E+1,0.29407000E+1 - ,0.14541330E+3,0.328E+3,0.315E+3,0.62918000E+1,0.29859000E+1 - ,0.12886410E+3,0.328E+3,0.327E+3,0.62918000E+1,0.77785000E+1 - ,0.14187630E+3,0.328E+3,0.328E+3,0.62918000E+1,0.62918000E+1 - ,0.22539000E+2,0.331E+3,0.100E+1,0.29233000E+1,0.91180000E+0 - ,0.14929600E+2,0.331E+3,0.200E+1,0.29233000E+1,0.00000000E+0 - ,0.33234640E+3,0.331E+3,0.300E+1,0.29233000E+1,0.00000000E+0 - ,0.19774540E+3,0.331E+3,0.400E+1,0.29233000E+1,0.00000000E+0 - ,0.13488560E+3,0.331E+3,0.500E+1,0.29233000E+1,0.00000000E+0 - ,0.91766100E+2,0.331E+3,0.600E+1,0.29233000E+1,0.00000000E+0 - ,0.64397700E+2,0.331E+3,0.700E+1,0.29233000E+1,0.00000000E+0 - ,0.48831000E+2,0.331E+3,0.800E+1,0.29233000E+1,0.00000000E+0 - ,0.37012900E+2,0.331E+3,0.900E+1,0.29233000E+1,0.00000000E+0 - ,0.28465400E+2,0.331E+3,0.100E+2,0.29233000E+1,0.00000000E+0 - ,0.39801800E+3,0.331E+3,0.110E+2,0.29233000E+1,0.00000000E+0 - ,0.31346580E+3,0.331E+3,0.120E+2,0.29233000E+1,0.00000000E+0 - ,0.29117040E+3,0.331E+3,0.130E+2,0.29233000E+1,0.00000000E+0 - ,0.23154320E+3,0.331E+3,0.140E+2,0.29233000E+1,0.00000000E+0 - ,0.18169810E+3,0.331E+3,0.150E+2,0.29233000E+1,0.00000000E+0 - ,0.15126110E+3,0.331E+3,0.160E+2,0.29233000E+1,0.00000000E+0 - ,0.12384420E+3,0.331E+3,0.170E+2,0.29233000E+1,0.00000000E+0 - ,0.10145720E+3,0.331E+3,0.180E+2,0.29233000E+1,0.00000000E+0 - ,0.64868790E+3,0.331E+3,0.190E+2,0.29233000E+1,0.00000000E+0 - ,0.54545480E+3,0.331E+3,0.200E+2,0.29233000E+1,0.00000000E+0 - ,0.45241480E+3,0.331E+3,0.210E+2,0.29233000E+1,0.00000000E+0 - ,0.43828120E+3,0.331E+3,0.220E+2,0.29233000E+1,0.00000000E+0 - ,0.40212020E+3,0.331E+3,0.230E+2,0.29233000E+1,0.00000000E+0 - ,0.31661340E+3,0.331E+3,0.240E+2,0.29233000E+1,0.00000000E+0 - ,0.34715450E+3,0.331E+3,0.250E+2,0.29233000E+1,0.00000000E+0 - ,0.27239980E+3,0.331E+3,0.260E+2,0.29233000E+1,0.00000000E+0 - ,0.29012680E+3,0.331E+3,0.270E+2,0.29233000E+1,0.00000000E+0 - ,0.29831410E+3,0.331E+3,0.280E+2,0.29233000E+1,0.00000000E+0 - ,0.22848110E+3,0.331E+3,0.290E+2,0.29233000E+1,0.00000000E+0 - ,0.23616610E+3,0.331E+3,0.300E+2,0.29233000E+1,0.00000000E+0 - ,0.27943460E+3,0.331E+3,0.310E+2,0.29233000E+1,0.00000000E+0 - ,0.24818660E+3,0.331E+3,0.320E+2,0.29233000E+1,0.00000000E+0 - ,0.21282990E+3,0.331E+3,0.330E+2,0.29233000E+1,0.00000000E+0 - ,0.19148490E+3,0.331E+3,0.340E+2,0.29233000E+1,0.00000000E+0 - ,0.16795000E+3,0.331E+3,0.350E+2,0.29233000E+1,0.00000000E+0 - ,0.14629100E+3,0.331E+3,0.360E+2,0.29233000E+1,0.00000000E+0 - ,0.72799780E+3,0.331E+3,0.370E+2,0.29233000E+1,0.00000000E+0 - ,0.64926400E+3,0.331E+3,0.380E+2,0.29233000E+1,0.00000000E+0 - ,0.57254520E+3,0.331E+3,0.390E+2,0.29233000E+1,0.00000000E+0 - ,0.51656560E+3,0.331E+3,0.400E+2,0.29233000E+1,0.00000000E+0 - ,0.47214060E+3,0.331E+3,0.410E+2,0.29233000E+1,0.00000000E+0 - ,0.36573900E+3,0.331E+3,0.420E+2,0.29233000E+1,0.00000000E+0 - ,0.40759020E+3,0.331E+3,0.430E+2,0.29233000E+1,0.00000000E+0 - ,0.31162540E+3,0.331E+3,0.440E+2,0.29233000E+1,0.00000000E+0 - ,0.34083280E+3,0.331E+3,0.450E+2,0.29233000E+1,0.00000000E+0 - ,0.31647210E+3,0.331E+3,0.460E+2,0.29233000E+1,0.00000000E+0 - ,0.26332580E+3,0.331E+3,0.470E+2,0.29233000E+1,0.00000000E+0 - ,0.27928860E+3,0.331E+3,0.480E+2,0.29233000E+1,0.00000000E+0 - ,0.34913300E+3,0.331E+3,0.490E+2,0.29233000E+1,0.00000000E+0 - ,0.32482290E+3,0.331E+3,0.500E+2,0.29233000E+1,0.00000000E+0 - ,0.29096000E+3,0.331E+3,0.510E+2,0.29233000E+1,0.00000000E+0 - ,0.27067740E+3,0.331E+3,0.520E+2,0.29233000E+1,0.00000000E+0 - ,0.24534690E+3,0.331E+3,0.530E+2,0.29233000E+1,0.00000000E+0 - ,0.22101200E+3,0.331E+3,0.540E+2,0.29233000E+1,0.00000000E+0 - ,0.88720920E+3,0.331E+3,0.550E+2,0.29233000E+1,0.00000000E+0 - ,0.82570960E+3,0.331E+3,0.560E+2,0.29233000E+1,0.00000000E+0 - ,0.73032590E+3,0.331E+3,0.570E+2,0.29233000E+1,0.00000000E+0 - ,0.34326010E+3,0.331E+3,0.580E+2,0.29233000E+1,0.27991000E+1 - ,0.73303460E+3,0.331E+3,0.590E+2,0.29233000E+1,0.00000000E+0 - ,0.70467870E+3,0.331E+3,0.600E+2,0.29233000E+1,0.00000000E+0 - ,0.68722230E+3,0.331E+3,0.610E+2,0.29233000E+1,0.00000000E+0 - ,0.67114820E+3,0.331E+3,0.620E+2,0.29233000E+1,0.00000000E+0 - ,0.65690430E+3,0.331E+3,0.630E+2,0.29233000E+1,0.00000000E+0 - ,0.52004840E+3,0.331E+3,0.640E+2,0.29233000E+1,0.00000000E+0 - ,0.57921270E+3,0.331E+3,0.650E+2,0.29233000E+1,0.00000000E+0 - ,0.55935900E+3,0.331E+3,0.660E+2,0.29233000E+1,0.00000000E+0 - ,0.59350440E+3,0.331E+3,0.670E+2,0.29233000E+1,0.00000000E+0 - ,0.58102860E+3,0.331E+3,0.680E+2,0.29233000E+1,0.00000000E+0 - ,0.56982860E+3,0.331E+3,0.690E+2,0.29233000E+1,0.00000000E+0 - ,0.56301640E+3,0.331E+3,0.700E+2,0.29233000E+1,0.00000000E+0 - ,0.47657670E+3,0.331E+3,0.710E+2,0.29233000E+1,0.00000000E+0 - ,0.47186840E+3,0.331E+3,0.720E+2,0.29233000E+1,0.00000000E+0 - ,0.43210850E+3,0.331E+3,0.730E+2,0.29233000E+1,0.00000000E+0 - ,0.36558740E+3,0.331E+3,0.740E+2,0.29233000E+1,0.00000000E+0 - ,0.37247260E+3,0.331E+3,0.750E+2,0.29233000E+1,0.00000000E+0 - ,0.33845240E+3,0.331E+3,0.760E+2,0.29233000E+1,0.00000000E+0 - ,0.31056410E+3,0.331E+3,0.770E+2,0.29233000E+1,0.00000000E+0 - ,0.25829950E+3,0.331E+3,0.780E+2,0.29233000E+1,0.00000000E+0 - ,0.24143850E+3,0.331E+3,0.790E+2,0.29233000E+1,0.00000000E+0 - ,0.24873340E+3,0.331E+3,0.800E+2,0.29233000E+1,0.00000000E+0 - ,0.35861390E+3,0.331E+3,0.810E+2,0.29233000E+1,0.00000000E+0 - ,0.35236140E+3,0.331E+3,0.820E+2,0.29233000E+1,0.00000000E+0 - ,0.32532280E+3,0.331E+3,0.830E+2,0.29233000E+1,0.00000000E+0 - ,0.31104340E+3,0.331E+3,0.840E+2,0.29233000E+1,0.00000000E+0 - ,0.28780550E+3,0.331E+3,0.850E+2,0.29233000E+1,0.00000000E+0 - ,0.26431470E+3,0.331E+3,0.860E+2,0.29233000E+1,0.00000000E+0 - ,0.84229970E+3,0.331E+3,0.870E+2,0.29233000E+1,0.00000000E+0 - ,0.81926690E+3,0.331E+3,0.880E+2,0.29233000E+1,0.00000000E+0 - ,0.72858620E+3,0.331E+3,0.890E+2,0.29233000E+1,0.00000000E+0 - ,0.65887100E+3,0.331E+3,0.900E+2,0.29233000E+1,0.00000000E+0 - ,0.65182590E+3,0.331E+3,0.910E+2,0.29233000E+1,0.00000000E+0 - ,0.63119280E+3,0.331E+3,0.920E+2,0.29233000E+1,0.00000000E+0 - ,0.64715530E+3,0.331E+3,0.930E+2,0.29233000E+1,0.00000000E+0 - ,0.62718910E+3,0.331E+3,0.940E+2,0.29233000E+1,0.00000000E+0 - ,0.36144700E+2,0.331E+3,0.101E+3,0.29233000E+1,0.00000000E+0 - ,0.11512840E+3,0.331E+3,0.103E+3,0.29233000E+1,0.98650000E+0 - ,0.14719230E+3,0.331E+3,0.104E+3,0.29233000E+1,0.98080000E+0 - ,0.11367480E+3,0.331E+3,0.105E+3,0.29233000E+1,0.97060000E+0 - ,0.86017200E+2,0.331E+3,0.106E+3,0.29233000E+1,0.98680000E+0 - ,0.60022900E+2,0.331E+3,0.107E+3,0.29233000E+1,0.99440000E+0 - ,0.43796200E+2,0.331E+3,0.108E+3,0.29233000E+1,0.99250000E+0 - ,0.30155700E+2,0.331E+3,0.109E+3,0.29233000E+1,0.99820000E+0 - ,0.16772780E+3,0.331E+3,0.111E+3,0.29233000E+1,0.96840000E+0 - ,0.25920610E+3,0.331E+3,0.112E+3,0.29233000E+1,0.96280000E+0 - ,0.26429930E+3,0.331E+3,0.113E+3,0.29233000E+1,0.96480000E+0 - ,0.21422700E+3,0.331E+3,0.114E+3,0.29233000E+1,0.95070000E+0 - ,0.17638160E+3,0.331E+3,0.115E+3,0.29233000E+1,0.99470000E+0 - ,0.14956740E+3,0.331E+3,0.116E+3,0.29233000E+1,0.99480000E+0 - ,0.12254290E+3,0.331E+3,0.117E+3,0.29233000E+1,0.99720000E+0 - ,0.23199890E+3,0.331E+3,0.119E+3,0.29233000E+1,0.97670000E+0 - ,0.43628440E+3,0.331E+3,0.120E+3,0.29233000E+1,0.98310000E+0 - ,0.23401650E+3,0.331E+3,0.121E+3,0.29233000E+1,0.18627000E+1 - ,0.22591360E+3,0.331E+3,0.122E+3,0.29233000E+1,0.18299000E+1 - ,0.22133820E+3,0.331E+3,0.123E+3,0.29233000E+1,0.19138000E+1 - ,0.21907040E+3,0.331E+3,0.124E+3,0.29233000E+1,0.18269000E+1 - ,0.20247400E+3,0.331E+3,0.125E+3,0.29233000E+1,0.16406000E+1 - ,0.18755800E+3,0.331E+3,0.126E+3,0.29233000E+1,0.16483000E+1 - ,0.17887740E+3,0.331E+3,0.127E+3,0.29233000E+1,0.17149000E+1 - ,0.17480580E+3,0.331E+3,0.128E+3,0.29233000E+1,0.17937000E+1 - ,0.17212150E+3,0.331E+3,0.129E+3,0.29233000E+1,0.95760000E+0 - ,0.16247350E+3,0.331E+3,0.130E+3,0.29233000E+1,0.19419000E+1 - ,0.26291340E+3,0.331E+3,0.131E+3,0.29233000E+1,0.96010000E+0 - ,0.23250850E+3,0.331E+3,0.132E+3,0.29233000E+1,0.94340000E+0 - ,0.20926950E+3,0.331E+3,0.133E+3,0.29233000E+1,0.98890000E+0 - ,0.19154240E+3,0.331E+3,0.134E+3,0.29233000E+1,0.99010000E+0 - ,0.16909250E+3,0.331E+3,0.135E+3,0.29233000E+1,0.99740000E+0 - ,0.27717010E+3,0.331E+3,0.137E+3,0.29233000E+1,0.97380000E+0 - ,0.53024480E+3,0.331E+3,0.138E+3,0.29233000E+1,0.98010000E+0 - ,0.41052730E+3,0.331E+3,0.139E+3,0.29233000E+1,0.19153000E+1 - ,0.30919640E+3,0.331E+3,0.140E+3,0.29233000E+1,0.19355000E+1 - ,0.31215680E+3,0.331E+3,0.141E+3,0.29233000E+1,0.19545000E+1 - ,0.29139440E+3,0.331E+3,0.142E+3,0.29233000E+1,0.19420000E+1 - ,0.32490950E+3,0.331E+3,0.143E+3,0.29233000E+1,0.16682000E+1 - ,0.25488120E+3,0.331E+3,0.144E+3,0.29233000E+1,0.18584000E+1 - ,0.23843110E+3,0.331E+3,0.145E+3,0.29233000E+1,0.19003000E+1 - ,0.22146490E+3,0.331E+3,0.146E+3,0.29233000E+1,0.18630000E+1 - ,0.21407940E+3,0.331E+3,0.147E+3,0.29233000E+1,0.96790000E+0 - ,0.21251480E+3,0.331E+3,0.148E+3,0.29233000E+1,0.19539000E+1 - ,0.33348150E+3,0.331E+3,0.149E+3,0.29233000E+1,0.96330000E+0 - ,0.30351790E+3,0.331E+3,0.150E+3,0.29233000E+1,0.95140000E+0 - ,0.28533630E+3,0.331E+3,0.151E+3,0.29233000E+1,0.97490000E+0 - ,0.27052970E+3,0.331E+3,0.152E+3,0.29233000E+1,0.98110000E+0 - ,0.24764850E+3,0.331E+3,0.153E+3,0.29233000E+1,0.99680000E+0 - ,0.32944100E+3,0.331E+3,0.155E+3,0.29233000E+1,0.99090000E+0 - ,0.68550020E+3,0.331E+3,0.156E+3,0.29233000E+1,0.97970000E+0 - ,0.51898320E+3,0.331E+3,0.157E+3,0.29233000E+1,0.19373000E+1 - ,0.33298690E+3,0.331E+3,0.159E+3,0.29233000E+1,0.29425000E+1 - ,0.32610980E+3,0.331E+3,0.160E+3,0.29233000E+1,0.29455000E+1 - ,0.31583740E+3,0.331E+3,0.161E+3,0.29233000E+1,0.29413000E+1 - ,0.31714450E+3,0.331E+3,0.162E+3,0.29233000E+1,0.29300000E+1 - ,0.30481740E+3,0.331E+3,0.163E+3,0.29233000E+1,0.18286000E+1 - ,0.31912880E+3,0.331E+3,0.164E+3,0.29233000E+1,0.28732000E+1 - ,0.29989300E+3,0.331E+3,0.165E+3,0.29233000E+1,0.29086000E+1 - ,0.30469800E+3,0.331E+3,0.166E+3,0.29233000E+1,0.28965000E+1 - ,0.28484920E+3,0.331E+3,0.167E+3,0.29233000E+1,0.29242000E+1 - ,0.27680030E+3,0.331E+3,0.168E+3,0.29233000E+1,0.29282000E+1 - ,0.27498180E+3,0.331E+3,0.169E+3,0.29233000E+1,0.29246000E+1 - ,0.28882640E+3,0.331E+3,0.170E+3,0.29233000E+1,0.28482000E+1 - ,0.26590550E+3,0.331E+3,0.171E+3,0.29233000E+1,0.29219000E+1 - ,0.35695090E+3,0.331E+3,0.172E+3,0.29233000E+1,0.19254000E+1 - ,0.33227960E+3,0.331E+3,0.173E+3,0.29233000E+1,0.19459000E+1 - ,0.30407910E+3,0.331E+3,0.174E+3,0.29233000E+1,0.19292000E+1 - ,0.30677590E+3,0.331E+3,0.175E+3,0.29233000E+1,0.18104000E+1 - ,0.27045010E+3,0.331E+3,0.176E+3,0.29233000E+1,0.18858000E+1 - ,0.25457310E+3,0.331E+3,0.177E+3,0.29233000E+1,0.18648000E+1 - ,0.24321020E+3,0.331E+3,0.178E+3,0.29233000E+1,0.19188000E+1 - ,0.23238620E+3,0.331E+3,0.179E+3,0.29233000E+1,0.98460000E+0 - ,0.22515610E+3,0.331E+3,0.180E+3,0.29233000E+1,0.19896000E+1 - ,0.35816930E+3,0.331E+3,0.181E+3,0.29233000E+1,0.92670000E+0 - ,0.32836650E+3,0.331E+3,0.182E+3,0.29233000E+1,0.93830000E+0 - ,0.31941280E+3,0.331E+3,0.183E+3,0.29233000E+1,0.98200000E+0 - ,0.31125260E+3,0.331E+3,0.184E+3,0.29233000E+1,0.98150000E+0 - ,0.29132130E+3,0.331E+3,0.185E+3,0.29233000E+1,0.99540000E+0 - ,0.37119590E+3,0.331E+3,0.187E+3,0.29233000E+1,0.97050000E+0 - ,0.68477170E+3,0.331E+3,0.188E+3,0.29233000E+1,0.96620000E+0 - ,0.39403910E+3,0.331E+3,0.189E+3,0.29233000E+1,0.29070000E+1 - ,0.45247860E+3,0.331E+3,0.190E+3,0.29233000E+1,0.28844000E+1 - ,0.40499240E+3,0.331E+3,0.191E+3,0.29233000E+1,0.28738000E+1 - ,0.35926250E+3,0.331E+3,0.192E+3,0.29233000E+1,0.28878000E+1 - ,0.34595630E+3,0.331E+3,0.193E+3,0.29233000E+1,0.29095000E+1 - ,0.41186560E+3,0.331E+3,0.194E+3,0.29233000E+1,0.19209000E+1 - ,0.97234600E+2,0.331E+3,0.204E+3,0.29233000E+1,0.19697000E+1 - ,0.95603900E+2,0.331E+3,0.205E+3,0.29233000E+1,0.19441000E+1 - ,0.70318400E+2,0.331E+3,0.206E+3,0.29233000E+1,0.19985000E+1 - ,0.56361200E+2,0.331E+3,0.207E+3,0.29233000E+1,0.20143000E+1 - ,0.38626300E+2,0.331E+3,0.208E+3,0.29233000E+1,0.19887000E+1 - ,0.17153850E+3,0.331E+3,0.212E+3,0.29233000E+1,0.19496000E+1 - ,0.20708710E+3,0.331E+3,0.213E+3,0.29233000E+1,0.19311000E+1 - ,0.19947600E+3,0.331E+3,0.214E+3,0.29233000E+1,0.19435000E+1 - ,0.17389310E+3,0.331E+3,0.215E+3,0.29233000E+1,0.20102000E+1 - ,0.14653820E+3,0.331E+3,0.216E+3,0.29233000E+1,0.19903000E+1 - ,0.24008000E+3,0.331E+3,0.220E+3,0.29233000E+1,0.19349000E+1 - ,0.23151840E+3,0.331E+3,0.221E+3,0.29233000E+1,0.28999000E+1 - ,0.23440930E+3,0.331E+3,0.222E+3,0.29233000E+1,0.38675000E+1 - ,0.21438080E+3,0.331E+3,0.223E+3,0.29233000E+1,0.29110000E+1 - ,0.16205470E+3,0.331E+3,0.224E+3,0.29233000E+1,0.10619100E+2 - ,0.13899280E+3,0.331E+3,0.225E+3,0.29233000E+1,0.98849000E+1 - ,0.13638180E+3,0.331E+3,0.226E+3,0.29233000E+1,0.91376000E+1 - ,0.15925840E+3,0.331E+3,0.227E+3,0.29233000E+1,0.29263000E+1 - ,0.14856420E+3,0.331E+3,0.228E+3,0.29233000E+1,0.65458000E+1 - ,0.20951300E+3,0.331E+3,0.231E+3,0.29233000E+1,0.19315000E+1 - ,0.22156120E+3,0.331E+3,0.232E+3,0.29233000E+1,0.19447000E+1 - ,0.20387080E+3,0.331E+3,0.233E+3,0.29233000E+1,0.19793000E+1 - ,0.19004420E+3,0.331E+3,0.234E+3,0.29233000E+1,0.19812000E+1 - ,0.28761670E+3,0.331E+3,0.238E+3,0.29233000E+1,0.19143000E+1 - ,0.27811250E+3,0.331E+3,0.239E+3,0.29233000E+1,0.28903000E+1 - ,0.28082410E+3,0.331E+3,0.240E+3,0.29233000E+1,0.39106000E+1 - ,0.27131370E+3,0.331E+3,0.241E+3,0.29233000E+1,0.29225000E+1 - ,0.24051090E+3,0.331E+3,0.242E+3,0.29233000E+1,0.11055600E+2 - ,0.21269370E+3,0.331E+3,0.243E+3,0.29233000E+1,0.95402000E+1 - ,0.20110400E+3,0.331E+3,0.244E+3,0.29233000E+1,0.88895000E+1 - ,0.20422770E+3,0.331E+3,0.245E+3,0.29233000E+1,0.29696000E+1 - ,0.21323450E+3,0.331E+3,0.246E+3,0.29233000E+1,0.57095000E+1 - ,0.27009880E+3,0.331E+3,0.249E+3,0.29233000E+1,0.19378000E+1 - ,0.29372900E+3,0.331E+3,0.250E+3,0.29233000E+1,0.19505000E+1 - ,0.27771860E+3,0.331E+3,0.251E+3,0.29233000E+1,0.19523000E+1 - ,0.26841360E+3,0.331E+3,0.252E+3,0.29233000E+1,0.19639000E+1 - ,0.34819780E+3,0.331E+3,0.256E+3,0.29233000E+1,0.18467000E+1 - ,0.36193370E+3,0.331E+3,0.257E+3,0.29233000E+1,0.29175000E+1 - ,0.26924010E+3,0.331E+3,0.272E+3,0.29233000E+1,0.38840000E+1 - ,0.28063840E+3,0.331E+3,0.273E+3,0.29233000E+1,0.28988000E+1 - ,0.26136250E+3,0.331E+3,0.274E+3,0.29233000E+1,0.10915300E+2 - ,0.23778890E+3,0.331E+3,0.275E+3,0.29233000E+1,0.98054000E+1 - ,0.22400480E+3,0.331E+3,0.276E+3,0.29233000E+1,0.91527000E+1 - ,0.22773200E+3,0.331E+3,0.277E+3,0.29233000E+1,0.29424000E+1 - ,0.23955770E+3,0.331E+3,0.278E+3,0.29233000E+1,0.66669000E+1 - ,0.28897680E+3,0.331E+3,0.281E+3,0.29233000E+1,0.19302000E+1 - ,0.30561160E+3,0.331E+3,0.282E+3,0.29233000E+1,0.19356000E+1 - ,0.31199930E+3,0.331E+3,0.283E+3,0.29233000E+1,0.19655000E+1 - ,0.31006550E+3,0.331E+3,0.284E+3,0.29233000E+1,0.19639000E+1 - ,0.38347400E+3,0.331E+3,0.288E+3,0.29233000E+1,0.18075000E+1 - ,0.73075400E+2,0.331E+3,0.305E+3,0.29233000E+1,0.29128000E+1 - ,0.65758400E+2,0.331E+3,0.306E+3,0.29233000E+1,0.29987000E+1 - ,0.49615900E+2,0.331E+3,0.307E+3,0.29233000E+1,0.29903000E+1 - ,0.16240650E+3,0.331E+3,0.313E+3,0.29233000E+1,0.29146000E+1 - ,0.19417780E+3,0.331E+3,0.314E+3,0.29233000E+1,0.29407000E+1 - ,0.16155910E+3,0.331E+3,0.315E+3,0.29233000E+1,0.29859000E+1 - ,0.14216340E+3,0.331E+3,0.327E+3,0.29233000E+1,0.77785000E+1 - ,0.15548130E+3,0.331E+3,0.328E+3,0.29233000E+1,0.62918000E+1 - ,0.17231530E+3,0.331E+3,0.331E+3,0.29233000E+1,0.29233000E+1 - ,0.25925500E+2,0.332E+3,0.100E+1,0.29186000E+1,0.91180000E+0 - ,0.17061400E+2,0.332E+3,0.200E+1,0.29186000E+1,0.00000000E+0 - ,0.39241090E+3,0.332E+3,0.300E+1,0.29186000E+1,0.00000000E+0 - ,0.23062870E+3,0.332E+3,0.400E+1,0.29186000E+1,0.00000000E+0 - ,0.15627830E+3,0.332E+3,0.500E+1,0.29186000E+1,0.00000000E+0 - ,0.10580040E+3,0.332E+3,0.600E+1,0.29186000E+1,0.00000000E+0 - ,0.73967500E+2,0.332E+3,0.700E+1,0.29186000E+1,0.00000000E+0 - ,0.55931400E+2,0.332E+3,0.800E+1,0.29186000E+1,0.00000000E+0 - ,0.42287900E+2,0.332E+3,0.900E+1,0.29186000E+1,0.00000000E+0 - ,0.32451500E+2,0.332E+3,0.100E+2,0.29186000E+1,0.00000000E+0 - ,0.46954960E+3,0.332E+3,0.110E+2,0.29186000E+1,0.00000000E+0 - ,0.36633190E+3,0.332E+3,0.120E+2,0.29186000E+1,0.00000000E+0 - ,0.33910340E+3,0.332E+3,0.130E+2,0.29186000E+1,0.00000000E+0 - ,0.26843700E+3,0.332E+3,0.140E+2,0.29186000E+1,0.00000000E+0 - ,0.20985610E+3,0.332E+3,0.150E+2,0.29186000E+1,0.00000000E+0 - ,0.17427160E+3,0.332E+3,0.160E+2,0.29186000E+1,0.00000000E+0 - ,0.14234130E+3,0.332E+3,0.170E+2,0.29186000E+1,0.00000000E+0 - ,0.11635890E+3,0.332E+3,0.180E+2,0.29186000E+1,0.00000000E+0 - ,0.76657140E+3,0.332E+3,0.190E+2,0.29186000E+1,0.00000000E+0 - ,0.63980000E+3,0.332E+3,0.200E+2,0.29186000E+1,0.00000000E+0 - ,0.52977990E+3,0.332E+3,0.210E+2,0.29186000E+1,0.00000000E+0 - ,0.51242740E+3,0.332E+3,0.220E+2,0.29186000E+1,0.00000000E+0 - ,0.46971220E+3,0.332E+3,0.230E+2,0.29186000E+1,0.00000000E+0 - ,0.36970490E+3,0.332E+3,0.240E+2,0.29186000E+1,0.00000000E+0 - ,0.40496220E+3,0.332E+3,0.250E+2,0.29186000E+1,0.00000000E+0 - ,0.31759430E+3,0.332E+3,0.260E+2,0.29186000E+1,0.00000000E+0 - ,0.33769310E+3,0.332E+3,0.270E+2,0.29186000E+1,0.00000000E+0 - ,0.34754450E+3,0.332E+3,0.280E+2,0.29186000E+1,0.00000000E+0 - ,0.26609200E+3,0.332E+3,0.290E+2,0.29186000E+1,0.00000000E+0 - ,0.27433390E+3,0.332E+3,0.300E+2,0.29186000E+1,0.00000000E+0 - ,0.32494560E+3,0.332E+3,0.310E+2,0.29186000E+1,0.00000000E+0 - ,0.28761030E+3,0.332E+3,0.320E+2,0.29186000E+1,0.00000000E+0 - ,0.24587190E+3,0.332E+3,0.330E+2,0.29186000E+1,0.00000000E+0 - ,0.22078460E+3,0.332E+3,0.340E+2,0.29186000E+1,0.00000000E+0 - ,0.19325910E+3,0.332E+3,0.350E+2,0.29186000E+1,0.00000000E+0 - ,0.16801940E+3,0.332E+3,0.360E+2,0.29186000E+1,0.00000000E+0 - ,0.85965830E+3,0.332E+3,0.370E+2,0.29186000E+1,0.00000000E+0 - ,0.76173640E+3,0.332E+3,0.380E+2,0.29186000E+1,0.00000000E+0 - ,0.66974730E+3,0.332E+3,0.390E+2,0.29186000E+1,0.00000000E+0 - ,0.60315190E+3,0.332E+3,0.400E+2,0.29186000E+1,0.00000000E+0 - ,0.55060110E+3,0.332E+3,0.410E+2,0.29186000E+1,0.00000000E+0 - ,0.42558490E+3,0.332E+3,0.420E+2,0.29186000E+1,0.00000000E+0 - ,0.47466380E+3,0.332E+3,0.430E+2,0.29186000E+1,0.00000000E+0 - ,0.36203660E+3,0.332E+3,0.440E+2,0.29186000E+1,0.00000000E+0 - ,0.39601830E+3,0.332E+3,0.450E+2,0.29186000E+1,0.00000000E+0 - ,0.36742870E+3,0.332E+3,0.460E+2,0.29186000E+1,0.00000000E+0 - ,0.30577550E+3,0.332E+3,0.470E+2,0.29186000E+1,0.00000000E+0 - ,0.32392920E+3,0.332E+3,0.480E+2,0.29186000E+1,0.00000000E+0 - ,0.40593030E+3,0.332E+3,0.490E+2,0.29186000E+1,0.00000000E+0 - ,0.37661080E+3,0.332E+3,0.500E+2,0.29186000E+1,0.00000000E+0 - ,0.33642890E+3,0.332E+3,0.510E+2,0.29186000E+1,0.00000000E+0 - ,0.31246310E+3,0.332E+3,0.520E+2,0.29186000E+1,0.00000000E+0 - ,0.28271950E+3,0.332E+3,0.530E+2,0.29186000E+1,0.00000000E+0 - ,0.25424580E+3,0.332E+3,0.540E+2,0.29186000E+1,0.00000000E+0 - ,0.10475077E+4,0.332E+3,0.550E+2,0.29186000E+1,0.00000000E+0 - ,0.96965590E+3,0.332E+3,0.560E+2,0.29186000E+1,0.00000000E+0 - ,0.85512980E+3,0.332E+3,0.570E+2,0.29186000E+1,0.00000000E+0 - ,0.39708240E+3,0.332E+3,0.580E+2,0.29186000E+1,0.27991000E+1 - ,0.85990430E+3,0.332E+3,0.590E+2,0.29186000E+1,0.00000000E+0 - ,0.82624710E+3,0.332E+3,0.600E+2,0.29186000E+1,0.00000000E+0 - ,0.80566910E+3,0.332E+3,0.610E+2,0.29186000E+1,0.00000000E+0 - ,0.78673400E+3,0.332E+3,0.620E+2,0.29186000E+1,0.00000000E+0 - ,0.76995120E+3,0.332E+3,0.630E+2,0.29186000E+1,0.00000000E+0 - ,0.60750730E+3,0.332E+3,0.640E+2,0.29186000E+1,0.00000000E+0 - ,0.67977520E+3,0.332E+3,0.650E+2,0.29186000E+1,0.00000000E+0 - ,0.65608890E+3,0.332E+3,0.660E+2,0.29186000E+1,0.00000000E+0 - ,0.69513050E+3,0.332E+3,0.670E+2,0.29186000E+1,0.00000000E+0 - ,0.68046640E+3,0.332E+3,0.680E+2,0.29186000E+1,0.00000000E+0 - ,0.66727580E+3,0.332E+3,0.690E+2,0.29186000E+1,0.00000000E+0 - ,0.65939100E+3,0.332E+3,0.700E+2,0.29186000E+1,0.00000000E+0 - ,0.55687690E+3,0.332E+3,0.710E+2,0.29186000E+1,0.00000000E+0 - ,0.54981880E+3,0.332E+3,0.720E+2,0.29186000E+1,0.00000000E+0 - ,0.50258340E+3,0.332E+3,0.730E+2,0.29186000E+1,0.00000000E+0 - ,0.42456930E+3,0.332E+3,0.740E+2,0.29186000E+1,0.00000000E+0 - ,0.43228120E+3,0.332E+3,0.750E+2,0.29186000E+1,0.00000000E+0 - ,0.39218940E+3,0.332E+3,0.760E+2,0.29186000E+1,0.00000000E+0 - ,0.35941840E+3,0.332E+3,0.770E+2,0.29186000E+1,0.00000000E+0 - ,0.29849470E+3,0.332E+3,0.780E+2,0.29186000E+1,0.00000000E+0 - ,0.27884190E+3,0.332E+3,0.790E+2,0.29186000E+1,0.00000000E+0 - ,0.28712700E+3,0.332E+3,0.800E+2,0.29186000E+1,0.00000000E+0 - ,0.41657100E+3,0.332E+3,0.810E+2,0.29186000E+1,0.00000000E+0 - ,0.40843950E+3,0.332E+3,0.820E+2,0.29186000E+1,0.00000000E+0 - ,0.37618150E+3,0.332E+3,0.830E+2,0.29186000E+1,0.00000000E+0 - ,0.35916750E+3,0.332E+3,0.840E+2,0.29186000E+1,0.00000000E+0 - ,0.33177440E+3,0.332E+3,0.850E+2,0.29186000E+1,0.00000000E+0 - ,0.30422370E+3,0.332E+3,0.860E+2,0.29186000E+1,0.00000000E+0 - ,0.99208740E+3,0.332E+3,0.870E+2,0.29186000E+1,0.00000000E+0 - ,0.96060620E+3,0.332E+3,0.880E+2,0.29186000E+1,0.00000000E+0 - ,0.85194620E+3,0.332E+3,0.890E+2,0.29186000E+1,0.00000000E+0 - ,0.76802670E+3,0.332E+3,0.900E+2,0.29186000E+1,0.00000000E+0 - ,0.76090240E+3,0.332E+3,0.910E+2,0.29186000E+1,0.00000000E+0 - ,0.73674860E+3,0.332E+3,0.920E+2,0.29186000E+1,0.00000000E+0 - ,0.75679710E+3,0.332E+3,0.930E+2,0.29186000E+1,0.00000000E+0 - ,0.73318910E+3,0.332E+3,0.940E+2,0.29186000E+1,0.00000000E+0 - ,0.41732300E+2,0.332E+3,0.101E+3,0.29186000E+1,0.00000000E+0 - ,0.13414080E+3,0.332E+3,0.103E+3,0.29186000E+1,0.98650000E+0 - ,0.17128910E+3,0.332E+3,0.104E+3,0.29186000E+1,0.98080000E+0 - ,0.13152340E+3,0.332E+3,0.105E+3,0.29186000E+1,0.97060000E+0 - ,0.99176300E+2,0.332E+3,0.106E+3,0.29186000E+1,0.98680000E+0 - ,0.68932300E+2,0.332E+3,0.107E+3,0.29186000E+1,0.99440000E+0 - ,0.50126900E+2,0.332E+3,0.108E+3,0.29186000E+1,0.99250000E+0 - ,0.34364200E+2,0.332E+3,0.109E+3,0.29186000E+1,0.99820000E+0 - ,0.19562310E+3,0.332E+3,0.111E+3,0.29186000E+1,0.96840000E+0 - ,0.30252130E+3,0.332E+3,0.112E+3,0.29186000E+1,0.96280000E+0 - ,0.30755040E+3,0.332E+3,0.113E+3,0.29186000E+1,0.96480000E+0 - ,0.24819650E+3,0.332E+3,0.114E+3,0.29186000E+1,0.95070000E+0 - ,0.20368650E+3,0.332E+3,0.115E+3,0.29186000E+1,0.99470000E+0 - ,0.17232720E+3,0.332E+3,0.116E+3,0.29186000E+1,0.99480000E+0 - ,0.14084920E+3,0.332E+3,0.117E+3,0.29186000E+1,0.99720000E+0 - ,0.26984030E+3,0.332E+3,0.119E+3,0.29186000E+1,0.97670000E+0 - ,0.51153740E+3,0.332E+3,0.120E+3,0.29186000E+1,0.98310000E+0 - ,0.27124750E+3,0.332E+3,0.121E+3,0.29186000E+1,0.18627000E+1 - ,0.26180740E+3,0.332E+3,0.122E+3,0.29186000E+1,0.18299000E+1 - ,0.25651490E+3,0.332E+3,0.123E+3,0.29186000E+1,0.19138000E+1 - ,0.25399050E+3,0.332E+3,0.124E+3,0.29186000E+1,0.18269000E+1 - ,0.23426800E+3,0.332E+3,0.125E+3,0.29186000E+1,0.16406000E+1 - ,0.21686750E+3,0.332E+3,0.126E+3,0.29186000E+1,0.16483000E+1 - ,0.20682100E+3,0.332E+3,0.127E+3,0.29186000E+1,0.17149000E+1 - ,0.20214420E+3,0.332E+3,0.128E+3,0.29186000E+1,0.17937000E+1 - ,0.19934300E+3,0.332E+3,0.129E+3,0.29186000E+1,0.95760000E+0 - ,0.18764810E+3,0.332E+3,0.130E+3,0.29186000E+1,0.19419000E+1 - ,0.30545790E+3,0.332E+3,0.131E+3,0.29186000E+1,0.96010000E+0 - ,0.26922150E+3,0.332E+3,0.132E+3,0.29186000E+1,0.94340000E+0 - ,0.24171350E+3,0.332E+3,0.133E+3,0.29186000E+1,0.98890000E+0 - ,0.22085650E+3,0.332E+3,0.134E+3,0.29186000E+1,0.99010000E+0 - ,0.19459280E+3,0.332E+3,0.135E+3,0.29186000E+1,0.99740000E+0 - ,0.32210960E+3,0.332E+3,0.137E+3,0.29186000E+1,0.97380000E+0 - ,0.62192630E+3,0.332E+3,0.138E+3,0.29186000E+1,0.98010000E+0 - ,0.47871320E+3,0.332E+3,0.139E+3,0.29186000E+1,0.19153000E+1 - ,0.35847720E+3,0.332E+3,0.140E+3,0.29186000E+1,0.19355000E+1 - ,0.36192950E+3,0.332E+3,0.141E+3,0.29186000E+1,0.19545000E+1 - ,0.33757750E+3,0.332E+3,0.142E+3,0.29186000E+1,0.19420000E+1 - ,0.37742760E+3,0.332E+3,0.143E+3,0.29186000E+1,0.16682000E+1 - ,0.29466340E+3,0.332E+3,0.144E+3,0.29186000E+1,0.18584000E+1 - ,0.27557070E+3,0.332E+3,0.145E+3,0.29186000E+1,0.19003000E+1 - ,0.25584410E+3,0.332E+3,0.146E+3,0.29186000E+1,0.18630000E+1 - ,0.24737280E+3,0.332E+3,0.147E+3,0.29186000E+1,0.96790000E+0 - ,0.24521190E+3,0.332E+3,0.148E+3,0.29186000E+1,0.19539000E+1 - ,0.38734040E+3,0.332E+3,0.149E+3,0.29186000E+1,0.96330000E+0 - ,0.35152010E+3,0.332E+3,0.150E+3,0.29186000E+1,0.95140000E+0 - ,0.32980470E+3,0.332E+3,0.151E+3,0.29186000E+1,0.97490000E+0 - ,0.31226190E+3,0.332E+3,0.152E+3,0.29186000E+1,0.98110000E+0 - ,0.28538200E+3,0.332E+3,0.153E+3,0.29186000E+1,0.99680000E+0 - ,0.38205620E+3,0.332E+3,0.155E+3,0.29186000E+1,0.99090000E+0 - ,0.80495990E+3,0.332E+3,0.156E+3,0.29186000E+1,0.97970000E+0 - ,0.60548420E+3,0.332E+3,0.157E+3,0.29186000E+1,0.19373000E+1 - ,0.38513200E+3,0.332E+3,0.159E+3,0.29186000E+1,0.29425000E+1 - ,0.37716470E+3,0.332E+3,0.160E+3,0.29186000E+1,0.29455000E+1 - ,0.36522950E+3,0.332E+3,0.161E+3,0.29186000E+1,0.29413000E+1 - ,0.36689290E+3,0.332E+3,0.162E+3,0.29186000E+1,0.29300000E+1 - ,0.35308810E+3,0.332E+3,0.163E+3,0.29186000E+1,0.18286000E+1 - ,0.36924660E+3,0.332E+3,0.164E+3,0.29186000E+1,0.28732000E+1 - ,0.34685640E+3,0.332E+3,0.165E+3,0.29186000E+1,0.29086000E+1 - ,0.35267810E+3,0.332E+3,0.166E+3,0.29186000E+1,0.28965000E+1 - ,0.32934030E+3,0.332E+3,0.167E+3,0.29186000E+1,0.29242000E+1 - ,0.31999040E+3,0.332E+3,0.168E+3,0.29186000E+1,0.29282000E+1 - ,0.31792410E+3,0.332E+3,0.169E+3,0.29186000E+1,0.29246000E+1 - ,0.33414390E+3,0.332E+3,0.170E+3,0.29186000E+1,0.28482000E+1 - ,0.30737050E+3,0.332E+3,0.171E+3,0.29186000E+1,0.29219000E+1 - ,0.41466360E+3,0.332E+3,0.172E+3,0.29186000E+1,0.19254000E+1 - ,0.38533830E+3,0.332E+3,0.173E+3,0.29186000E+1,0.19459000E+1 - ,0.35200450E+3,0.332E+3,0.174E+3,0.29186000E+1,0.19292000E+1 - ,0.35566060E+3,0.332E+3,0.175E+3,0.29186000E+1,0.18104000E+1 - ,0.31228140E+3,0.332E+3,0.176E+3,0.29186000E+1,0.18858000E+1 - ,0.29375400E+3,0.332E+3,0.177E+3,0.29186000E+1,0.18648000E+1 - ,0.28052440E+3,0.332E+3,0.178E+3,0.29186000E+1,0.19188000E+1 - ,0.26802920E+3,0.332E+3,0.179E+3,0.29186000E+1,0.98460000E+0 - ,0.25933470E+3,0.332E+3,0.180E+3,0.29186000E+1,0.19896000E+1 - ,0.41573130E+3,0.332E+3,0.181E+3,0.29186000E+1,0.92670000E+0 - ,0.38005970E+3,0.332E+3,0.182E+3,0.29186000E+1,0.93830000E+0 - ,0.36914810E+3,0.332E+3,0.183E+3,0.29186000E+1,0.98200000E+0 - ,0.35933580E+3,0.332E+3,0.184E+3,0.29186000E+1,0.98150000E+0 - ,0.33582630E+3,0.332E+3,0.185E+3,0.29186000E+1,0.99540000E+0 - ,0.43041160E+3,0.332E+3,0.187E+3,0.29186000E+1,0.97050000E+0 - ,0.80257380E+3,0.332E+3,0.188E+3,0.29186000E+1,0.96620000E+0 - ,0.45579310E+3,0.332E+3,0.189E+3,0.29186000E+1,0.29070000E+1 - ,0.52467090E+3,0.332E+3,0.190E+3,0.29186000E+1,0.28844000E+1 - ,0.46916950E+3,0.332E+3,0.191E+3,0.29186000E+1,0.28738000E+1 - ,0.41536370E+3,0.332E+3,0.192E+3,0.29186000E+1,0.28878000E+1 - ,0.39979830E+3,0.332E+3,0.193E+3,0.29186000E+1,0.29095000E+1 - ,0.47845560E+3,0.332E+3,0.194E+3,0.29186000E+1,0.19209000E+1 - ,0.11247080E+3,0.332E+3,0.204E+3,0.29186000E+1,0.19697000E+1 - ,0.11046530E+3,0.332E+3,0.205E+3,0.29186000E+1,0.19441000E+1 - ,0.80908400E+2,0.332E+3,0.206E+3,0.29186000E+1,0.19985000E+1 - ,0.64694600E+2,0.332E+3,0.207E+3,0.29186000E+1,0.20143000E+1 - ,0.44161100E+2,0.332E+3,0.208E+3,0.29186000E+1,0.19887000E+1 - ,0.19895420E+3,0.332E+3,0.212E+3,0.29186000E+1,0.19496000E+1 - ,0.24029350E+3,0.332E+3,0.213E+3,0.29186000E+1,0.19311000E+1 - ,0.23095630E+3,0.332E+3,0.214E+3,0.29186000E+1,0.19435000E+1 - ,0.20085430E+3,0.332E+3,0.215E+3,0.29186000E+1,0.20102000E+1 - ,0.16882630E+3,0.332E+3,0.216E+3,0.29186000E+1,0.19903000E+1 - ,0.27842050E+3,0.332E+3,0.220E+3,0.29186000E+1,0.19349000E+1 - ,0.26802690E+3,0.332E+3,0.221E+3,0.29186000E+1,0.28999000E+1 - ,0.27133540E+3,0.332E+3,0.222E+3,0.29186000E+1,0.38675000E+1 - ,0.24816060E+3,0.332E+3,0.223E+3,0.29186000E+1,0.29110000E+1 - ,0.18702850E+3,0.332E+3,0.224E+3,0.29186000E+1,0.10619100E+2 - ,0.16012070E+3,0.332E+3,0.225E+3,0.29186000E+1,0.98849000E+1 - ,0.15714100E+3,0.332E+3,0.226E+3,0.29186000E+1,0.91376000E+1 - ,0.18402720E+3,0.332E+3,0.227E+3,0.29186000E+1,0.29263000E+1 - ,0.17152460E+3,0.332E+3,0.228E+3,0.29186000E+1,0.65458000E+1 - ,0.24266150E+3,0.332E+3,0.231E+3,0.29186000E+1,0.19315000E+1 - ,0.25640090E+3,0.332E+3,0.232E+3,0.29186000E+1,0.19447000E+1 - ,0.23540190E+3,0.332E+3,0.233E+3,0.29186000E+1,0.19793000E+1 - ,0.21911610E+3,0.332E+3,0.234E+3,0.29186000E+1,0.19812000E+1 - ,0.33346480E+3,0.332E+3,0.238E+3,0.29186000E+1,0.19143000E+1 - ,0.32171900E+3,0.332E+3,0.239E+3,0.29186000E+1,0.28903000E+1 - ,0.32464310E+3,0.332E+3,0.240E+3,0.29186000E+1,0.39106000E+1 - ,0.31369090E+3,0.332E+3,0.241E+3,0.29186000E+1,0.29225000E+1 - ,0.27753210E+3,0.332E+3,0.242E+3,0.29186000E+1,0.11055600E+2 - ,0.24504710E+3,0.332E+3,0.243E+3,0.29186000E+1,0.95402000E+1 - ,0.23155270E+3,0.332E+3,0.244E+3,0.29186000E+1,0.88895000E+1 - ,0.23553230E+3,0.332E+3,0.245E+3,0.29186000E+1,0.29696000E+1 - ,0.24604900E+3,0.332E+3,0.246E+3,0.29186000E+1,0.57095000E+1 - ,0.31261830E+3,0.332E+3,0.249E+3,0.29186000E+1,0.19378000E+1 - ,0.33998590E+3,0.332E+3,0.250E+3,0.29186000E+1,0.19505000E+1 - ,0.32084600E+3,0.332E+3,0.251E+3,0.29186000E+1,0.19523000E+1 - ,0.30976360E+3,0.332E+3,0.252E+3,0.29186000E+1,0.19639000E+1 - ,0.40345600E+3,0.332E+3,0.256E+3,0.29186000E+1,0.18467000E+1 - ,0.41889570E+3,0.332E+3,0.257E+3,0.29186000E+1,0.29175000E+1 - ,0.31096060E+3,0.332E+3,0.272E+3,0.29186000E+1,0.38840000E+1 - ,0.32438890E+3,0.332E+3,0.273E+3,0.29186000E+1,0.28988000E+1 - ,0.30155580E+3,0.332E+3,0.274E+3,0.29186000E+1,0.10915300E+2 - ,0.27396610E+3,0.332E+3,0.275E+3,0.29186000E+1,0.98054000E+1 - ,0.25778980E+3,0.332E+3,0.276E+3,0.29186000E+1,0.91527000E+1 - ,0.26244250E+3,0.332E+3,0.277E+3,0.29186000E+1,0.29424000E+1 - ,0.27611510E+3,0.332E+3,0.278E+3,0.29186000E+1,0.66669000E+1 - ,0.33401410E+3,0.332E+3,0.281E+3,0.29186000E+1,0.19302000E+1 - ,0.35322530E+3,0.332E+3,0.282E+3,0.29186000E+1,0.19356000E+1 - ,0.36036290E+3,0.332E+3,0.283E+3,0.29186000E+1,0.19655000E+1 - ,0.35787940E+3,0.332E+3,0.284E+3,0.29186000E+1,0.19639000E+1 - ,0.44425160E+3,0.332E+3,0.288E+3,0.29186000E+1,0.18075000E+1 - ,0.84139800E+2,0.332E+3,0.305E+3,0.29186000E+1,0.29128000E+1 - ,0.75651400E+2,0.332E+3,0.306E+3,0.29186000E+1,0.29987000E+1 - ,0.56913400E+2,0.332E+3,0.307E+3,0.29186000E+1,0.29903000E+1 - ,0.18779330E+3,0.332E+3,0.313E+3,0.29186000E+1,0.29146000E+1 - ,0.22491460E+3,0.332E+3,0.314E+3,0.29186000E+1,0.29407000E+1 - ,0.18642580E+3,0.332E+3,0.315E+3,0.29186000E+1,0.29859000E+1 - ,0.16395940E+3,0.332E+3,0.327E+3,0.29186000E+1,0.77785000E+1 - ,0.17981780E+3,0.332E+3,0.328E+3,0.29186000E+1,0.62918000E+1 - ,0.19898010E+3,0.332E+3,0.331E+3,0.29186000E+1,0.29233000E+1 - ,0.22994980E+3,0.332E+3,0.332E+3,0.29186000E+1,0.29186000E+1 - ,0.25814400E+2,0.333E+3,0.100E+1,0.29709000E+1,0.91180000E+0 - ,0.17190000E+2,0.333E+3,0.200E+1,0.29709000E+1,0.00000000E+0 - ,0.37309010E+3,0.333E+3,0.300E+1,0.29709000E+1,0.00000000E+0 - ,0.22360990E+3,0.333E+3,0.400E+1,0.29709000E+1,0.00000000E+0 - ,0.15340550E+3,0.333E+3,0.500E+1,0.29709000E+1,0.00000000E+0 - ,0.10484620E+3,0.333E+3,0.600E+1,0.29709000E+1,0.00000000E+0 - ,0.73824600E+2,0.333E+3,0.700E+1,0.29709000E+1,0.00000000E+0 - ,0.56105700E+2,0.333E+3,0.800E+1,0.29709000E+1,0.00000000E+0 - ,0.42601300E+2,0.333E+3,0.900E+1,0.29709000E+1,0.00000000E+0 - ,0.32802100E+2,0.333E+3,0.100E+2,0.29709000E+1,0.00000000E+0 - ,0.44701790E+3,0.333E+3,0.110E+2,0.29709000E+1,0.00000000E+0 - ,0.35391780E+3,0.333E+3,0.120E+2,0.29709000E+1,0.00000000E+0 - ,0.32966240E+3,0.333E+3,0.130E+2,0.29709000E+1,0.00000000E+0 - ,0.26315950E+3,0.333E+3,0.140E+2,0.29709000E+1,0.00000000E+0 - ,0.20724190E+3,0.333E+3,0.150E+2,0.29709000E+1,0.00000000E+0 - ,0.17294560E+3,0.333E+3,0.160E+2,0.29709000E+1,0.00000000E+0 - ,0.14192450E+3,0.333E+3,0.170E+2,0.29709000E+1,0.00000000E+0 - ,0.11649640E+3,0.333E+3,0.180E+2,0.29709000E+1,0.00000000E+0 - ,0.72861950E+3,0.333E+3,0.190E+2,0.29709000E+1,0.00000000E+0 - ,0.61467050E+3,0.333E+3,0.200E+2,0.29709000E+1,0.00000000E+0 - ,0.51029120E+3,0.333E+3,0.210E+2,0.29709000E+1,0.00000000E+0 - ,0.49492760E+3,0.333E+3,0.220E+2,0.29709000E+1,0.00000000E+0 - ,0.45438220E+3,0.333E+3,0.230E+2,0.29709000E+1,0.00000000E+0 - ,0.35797570E+3,0.333E+3,0.240E+2,0.29709000E+1,0.00000000E+0 - ,0.39264080E+3,0.333E+3,0.250E+2,0.29709000E+1,0.00000000E+0 - ,0.30830750E+3,0.333E+3,0.260E+2,0.29709000E+1,0.00000000E+0 - ,0.32864030E+3,0.333E+3,0.270E+2,0.29709000E+1,0.00000000E+0 - ,0.33766070E+3,0.333E+3,0.280E+2,0.29709000E+1,0.00000000E+0 - ,0.25878300E+3,0.333E+3,0.290E+2,0.29709000E+1,0.00000000E+0 - ,0.26791080E+3,0.333E+3,0.300E+2,0.29709000E+1,0.00000000E+0 - ,0.31682010E+3,0.333E+3,0.310E+2,0.29709000E+1,0.00000000E+0 - ,0.28218280E+3,0.333E+3,0.320E+2,0.29709000E+1,0.00000000E+0 - ,0.24267360E+3,0.333E+3,0.330E+2,0.29709000E+1,0.00000000E+0 - ,0.21875310E+3,0.333E+3,0.340E+2,0.29709000E+1,0.00000000E+0 - ,0.19224210E+3,0.333E+3,0.350E+2,0.29709000E+1,0.00000000E+0 - ,0.16775050E+3,0.333E+3,0.360E+2,0.29709000E+1,0.00000000E+0 - ,0.81822470E+3,0.333E+3,0.370E+2,0.29709000E+1,0.00000000E+0 - ,0.73174620E+3,0.333E+3,0.380E+2,0.29709000E+1,0.00000000E+0 - ,0.64647740E+3,0.333E+3,0.390E+2,0.29709000E+1,0.00000000E+0 - ,0.58401600E+3,0.333E+3,0.400E+2,0.29709000E+1,0.00000000E+0 - ,0.53429150E+3,0.333E+3,0.410E+2,0.29709000E+1,0.00000000E+0 - ,0.41465090E+3,0.333E+3,0.420E+2,0.29709000E+1,0.00000000E+0 - ,0.46175770E+3,0.333E+3,0.430E+2,0.29709000E+1,0.00000000E+0 - ,0.35373830E+3,0.333E+3,0.440E+2,0.29709000E+1,0.00000000E+0 - ,0.38672900E+3,0.333E+3,0.450E+2,0.29709000E+1,0.00000000E+0 - ,0.35928420E+3,0.333E+3,0.460E+2,0.29709000E+1,0.00000000E+0 - ,0.29901370E+3,0.333E+3,0.470E+2,0.29709000E+1,0.00000000E+0 - ,0.31728800E+3,0.333E+3,0.480E+2,0.29709000E+1,0.00000000E+0 - ,0.39591570E+3,0.333E+3,0.490E+2,0.29709000E+1,0.00000000E+0 - ,0.36910130E+3,0.333E+3,0.500E+2,0.29709000E+1,0.00000000E+0 - ,0.33139460E+3,0.333E+3,0.510E+2,0.29709000E+1,0.00000000E+0 - ,0.30877390E+3,0.333E+3,0.520E+2,0.29709000E+1,0.00000000E+0 - ,0.28035770E+3,0.333E+3,0.530E+2,0.29709000E+1,0.00000000E+0 - ,0.25296780E+3,0.333E+3,0.540E+2,0.29709000E+1,0.00000000E+0 - ,0.99762710E+3,0.333E+3,0.550E+2,0.29709000E+1,0.00000000E+0 - ,0.93038380E+3,0.333E+3,0.560E+2,0.29709000E+1,0.00000000E+0 - ,0.82434880E+3,0.333E+3,0.570E+2,0.29709000E+1,0.00000000E+0 - ,0.39090330E+3,0.333E+3,0.580E+2,0.29709000E+1,0.27991000E+1 - ,0.82640440E+3,0.333E+3,0.590E+2,0.29709000E+1,0.00000000E+0 - ,0.79461360E+3,0.333E+3,0.600E+2,0.29709000E+1,0.00000000E+0 - ,0.77497180E+3,0.333E+3,0.610E+2,0.29709000E+1,0.00000000E+0 - ,0.75687850E+3,0.333E+3,0.620E+2,0.29709000E+1,0.00000000E+0 - ,0.74084790E+3,0.333E+3,0.630E+2,0.29709000E+1,0.00000000E+0 - ,0.58791190E+3,0.333E+3,0.640E+2,0.29709000E+1,0.00000000E+0 - ,0.65318150E+3,0.333E+3,0.650E+2,0.29709000E+1,0.00000000E+0 - ,0.63103160E+3,0.333E+3,0.660E+2,0.29709000E+1,0.00000000E+0 - ,0.66958290E+3,0.333E+3,0.670E+2,0.29709000E+1,0.00000000E+0 - ,0.65552070E+3,0.333E+3,0.680E+2,0.29709000E+1,0.00000000E+0 - ,0.64291690E+3,0.333E+3,0.690E+2,0.29709000E+1,0.00000000E+0 - ,0.63515750E+3,0.333E+3,0.700E+2,0.29709000E+1,0.00000000E+0 - ,0.53851890E+3,0.333E+3,0.710E+2,0.29709000E+1,0.00000000E+0 - ,0.53425460E+3,0.333E+3,0.720E+2,0.29709000E+1,0.00000000E+0 - ,0.48990920E+3,0.333E+3,0.730E+2,0.29709000E+1,0.00000000E+0 - ,0.41509390E+3,0.333E+3,0.740E+2,0.29709000E+1,0.00000000E+0 - ,0.42306850E+3,0.333E+3,0.750E+2,0.29709000E+1,0.00000000E+0 - ,0.38489200E+3,0.333E+3,0.760E+2,0.29709000E+1,0.00000000E+0 - ,0.35353050E+3,0.333E+3,0.770E+2,0.29709000E+1,0.00000000E+0 - ,0.29442160E+3,0.333E+3,0.780E+2,0.29709000E+1,0.00000000E+0 - ,0.27532990E+3,0.333E+3,0.790E+2,0.29709000E+1,0.00000000E+0 - ,0.28371810E+3,0.333E+3,0.800E+2,0.29709000E+1,0.00000000E+0 - ,0.40709580E+3,0.333E+3,0.810E+2,0.29709000E+1,0.00000000E+0 - ,0.40053490E+3,0.333E+3,0.820E+2,0.29709000E+1,0.00000000E+0 - ,0.37051780E+3,0.333E+3,0.830E+2,0.29709000E+1,0.00000000E+0 - ,0.35469940E+3,0.333E+3,0.840E+2,0.29709000E+1,0.00000000E+0 - ,0.32871350E+3,0.333E+3,0.850E+2,0.29709000E+1,0.00000000E+0 - ,0.30233200E+3,0.333E+3,0.860E+2,0.29709000E+1,0.00000000E+0 - ,0.94844440E+3,0.333E+3,0.870E+2,0.29709000E+1,0.00000000E+0 - ,0.92407530E+3,0.333E+3,0.880E+2,0.29709000E+1,0.00000000E+0 - ,0.82301470E+3,0.333E+3,0.890E+2,0.29709000E+1,0.00000000E+0 - ,0.74585710E+3,0.333E+3,0.900E+2,0.29709000E+1,0.00000000E+0 - ,0.73724570E+3,0.333E+3,0.910E+2,0.29709000E+1,0.00000000E+0 - ,0.71393940E+3,0.333E+3,0.920E+2,0.29709000E+1,0.00000000E+0 - ,0.73098970E+3,0.333E+3,0.930E+2,0.29709000E+1,0.00000000E+0 - ,0.70857740E+3,0.333E+3,0.940E+2,0.29709000E+1,0.00000000E+0 - ,0.41243400E+2,0.333E+3,0.101E+3,0.29709000E+1,0.00000000E+0 - ,0.13030340E+3,0.333E+3,0.103E+3,0.29709000E+1,0.98650000E+0 - ,0.16682950E+3,0.333E+3,0.104E+3,0.29709000E+1,0.98080000E+0 - ,0.12946150E+3,0.333E+3,0.105E+3,0.29709000E+1,0.97060000E+0 - ,0.98293000E+2,0.333E+3,0.106E+3,0.29709000E+1,0.98680000E+0 - ,0.68826400E+2,0.333E+3,0.107E+3,0.29709000E+1,0.99440000E+0 - ,0.50355500E+2,0.333E+3,0.108E+3,0.29709000E+1,0.99250000E+0 - ,0.34778500E+2,0.333E+3,0.109E+3,0.29709000E+1,0.99820000E+0 - ,0.18967700E+3,0.333E+3,0.111E+3,0.29709000E+1,0.96840000E+0 - ,0.29304400E+3,0.333E+3,0.112E+3,0.29709000E+1,0.96280000E+0 - ,0.29946280E+3,0.333E+3,0.113E+3,0.29709000E+1,0.96480000E+0 - ,0.24364100E+3,0.333E+3,0.114E+3,0.29709000E+1,0.95070000E+0 - ,0.20121190E+3,0.333E+3,0.115E+3,0.29709000E+1,0.99470000E+0 - ,0.17100300E+3,0.333E+3,0.116E+3,0.29709000E+1,0.99480000E+0 - ,0.14042820E+3,0.333E+3,0.117E+3,0.29709000E+1,0.99720000E+0 - ,0.26315470E+3,0.333E+3,0.119E+3,0.29709000E+1,0.97670000E+0 - ,0.49217040E+3,0.333E+3,0.120E+3,0.29709000E+1,0.98310000E+0 - ,0.26602940E+3,0.333E+3,0.121E+3,0.29709000E+1,0.18627000E+1 - ,0.25687630E+3,0.333E+3,0.122E+3,0.29709000E+1,0.18299000E+1 - ,0.25165870E+3,0.333E+3,0.123E+3,0.29709000E+1,0.19138000E+1 - ,0.24899550E+3,0.333E+3,0.124E+3,0.29709000E+1,0.18269000E+1 - ,0.23046590E+3,0.333E+3,0.125E+3,0.29709000E+1,0.16406000E+1 - ,0.21360980E+3,0.333E+3,0.126E+3,0.29709000E+1,0.16483000E+1 - ,0.20373690E+3,0.333E+3,0.127E+3,0.29709000E+1,0.17149000E+1 - ,0.19906950E+3,0.333E+3,0.128E+3,0.29709000E+1,0.17937000E+1 - ,0.19575950E+3,0.333E+3,0.129E+3,0.29709000E+1,0.95760000E+0 - ,0.18520600E+3,0.333E+3,0.130E+3,0.29709000E+1,0.19419000E+1 - ,0.29830600E+3,0.333E+3,0.131E+3,0.29709000E+1,0.96010000E+0 - ,0.26455660E+3,0.333E+3,0.132E+3,0.29709000E+1,0.94340000E+0 - ,0.23866010E+3,0.333E+3,0.133E+3,0.29709000E+1,0.98890000E+0 - ,0.21881490E+3,0.333E+3,0.134E+3,0.29709000E+1,0.99010000E+0 - ,0.19353150E+3,0.333E+3,0.135E+3,0.29709000E+1,0.99740000E+0 - ,0.31465180E+3,0.333E+3,0.137E+3,0.29709000E+1,0.97380000E+0 - ,0.59821020E+3,0.333E+3,0.138E+3,0.29709000E+1,0.98010000E+0 - ,0.46492540E+3,0.333E+3,0.139E+3,0.29709000E+1,0.19153000E+1 - ,0.35156410E+3,0.333E+3,0.140E+3,0.29709000E+1,0.19355000E+1 - ,0.35489700E+3,0.333E+3,0.141E+3,0.29709000E+1,0.19545000E+1 - ,0.33152300E+3,0.333E+3,0.142E+3,0.29709000E+1,0.19420000E+1 - ,0.36896070E+3,0.333E+3,0.143E+3,0.29709000E+1,0.16682000E+1 - ,0.29041810E+3,0.333E+3,0.144E+3,0.29709000E+1,0.18584000E+1 - ,0.27173870E+3,0.333E+3,0.145E+3,0.29709000E+1,0.19003000E+1 - ,0.25249180E+3,0.333E+3,0.146E+3,0.29709000E+1,0.18630000E+1 - ,0.24399260E+3,0.333E+3,0.147E+3,0.29709000E+1,0.96790000E+0 - ,0.24246050E+3,0.333E+3,0.148E+3,0.29709000E+1,0.19539000E+1 - ,0.37845390E+3,0.333E+3,0.149E+3,0.29709000E+1,0.96330000E+0 - ,0.34521760E+3,0.333E+3,0.150E+3,0.29709000E+1,0.95140000E+0 - ,0.32509990E+3,0.333E+3,0.151E+3,0.29709000E+1,0.97490000E+0 - ,0.30863590E+3,0.333E+3,0.152E+3,0.29709000E+1,0.98110000E+0 - ,0.28298000E+3,0.333E+3,0.153E+3,0.29709000E+1,0.99680000E+0 - ,0.37467690E+3,0.333E+3,0.155E+3,0.29709000E+1,0.99090000E+0 - ,0.77312930E+3,0.333E+3,0.156E+3,0.29709000E+1,0.97970000E+0 - ,0.58768050E+3,0.333E+3,0.157E+3,0.29709000E+1,0.19373000E+1 - ,0.37925720E+3,0.333E+3,0.159E+3,0.29709000E+1,0.29425000E+1 - ,0.37143070E+3,0.333E+3,0.160E+3,0.29709000E+1,0.29455000E+1 - ,0.35977520E+3,0.333E+3,0.161E+3,0.29709000E+1,0.29413000E+1 - ,0.36114910E+3,0.333E+3,0.162E+3,0.29709000E+1,0.29300000E+1 - ,0.34673650E+3,0.333E+3,0.163E+3,0.29709000E+1,0.18286000E+1 - ,0.36334580E+3,0.333E+3,0.164E+3,0.29709000E+1,0.28732000E+1 - ,0.34154120E+3,0.333E+3,0.165E+3,0.29709000E+1,0.29086000E+1 - ,0.34682760E+3,0.333E+3,0.166E+3,0.29709000E+1,0.28965000E+1 - ,0.32449690E+3,0.333E+3,0.167E+3,0.29709000E+1,0.29242000E+1 - ,0.31536050E+3,0.333E+3,0.168E+3,0.29709000E+1,0.29282000E+1 - ,0.31325730E+3,0.333E+3,0.169E+3,0.29709000E+1,0.29246000E+1 - ,0.32883440E+3,0.333E+3,0.170E+3,0.29709000E+1,0.28482000E+1 - ,0.30296350E+3,0.333E+3,0.171E+3,0.29709000E+1,0.29219000E+1 - ,0.40527710E+3,0.333E+3,0.172E+3,0.29709000E+1,0.19254000E+1 - ,0.37777130E+3,0.333E+3,0.173E+3,0.29709000E+1,0.19459000E+1 - ,0.34618800E+3,0.333E+3,0.174E+3,0.29709000E+1,0.19292000E+1 - ,0.34883500E+3,0.333E+3,0.175E+3,0.29709000E+1,0.18104000E+1 - ,0.30849820E+3,0.333E+3,0.176E+3,0.29709000E+1,0.18858000E+1 - ,0.29054470E+3,0.333E+3,0.177E+3,0.29709000E+1,0.18648000E+1 - ,0.27766310E+3,0.333E+3,0.178E+3,0.29709000E+1,0.19188000E+1 - ,0.26530450E+3,0.333E+3,0.179E+3,0.29709000E+1,0.98460000E+0 - ,0.25731840E+3,0.333E+3,0.180E+3,0.29709000E+1,0.19896000E+1 - ,0.40678760E+3,0.333E+3,0.181E+3,0.29709000E+1,0.92670000E+0 - ,0.37370420E+3,0.333E+3,0.182E+3,0.29709000E+1,0.93830000E+0 - ,0.36395410E+3,0.333E+3,0.183E+3,0.29709000E+1,0.98200000E+0 - ,0.35500400E+3,0.333E+3,0.184E+3,0.29709000E+1,0.98150000E+0 - ,0.33273420E+3,0.333E+3,0.185E+3,0.29709000E+1,0.99540000E+0 - ,0.42221560E+3,0.333E+3,0.187E+3,0.29709000E+1,0.97050000E+0 - ,0.77316810E+3,0.333E+3,0.188E+3,0.29709000E+1,0.96620000E+0 - ,0.44875130E+3,0.333E+3,0.189E+3,0.29709000E+1,0.29070000E+1 - ,0.51446500E+3,0.333E+3,0.190E+3,0.29709000E+1,0.28844000E+1 - ,0.46088700E+3,0.333E+3,0.191E+3,0.29709000E+1,0.28738000E+1 - ,0.40932390E+3,0.333E+3,0.192E+3,0.29709000E+1,0.28878000E+1 - ,0.39428590E+3,0.333E+3,0.193E+3,0.29709000E+1,0.29095000E+1 - ,0.46765480E+3,0.333E+3,0.194E+3,0.29709000E+1,0.19209000E+1 - ,0.11074050E+3,0.333E+3,0.204E+3,0.29709000E+1,0.19697000E+1 - ,0.10903310E+3,0.333E+3,0.205E+3,0.29709000E+1,0.19441000E+1 - ,0.80490200E+2,0.333E+3,0.206E+3,0.29709000E+1,0.19985000E+1 - ,0.64644600E+2,0.333E+3,0.207E+3,0.29709000E+1,0.20143000E+1 - ,0.44441700E+2,0.333E+3,0.208E+3,0.29709000E+1,0.19887000E+1 - ,0.19481980E+3,0.333E+3,0.212E+3,0.29709000E+1,0.19496000E+1 - ,0.23520410E+3,0.333E+3,0.213E+3,0.29709000E+1,0.19311000E+1 - ,0.22699490E+3,0.333E+3,0.214E+3,0.29709000E+1,0.19435000E+1 - ,0.19834020E+3,0.333E+3,0.215E+3,0.29709000E+1,0.20102000E+1 - ,0.16754910E+3,0.333E+3,0.216E+3,0.29709000E+1,0.19903000E+1 - ,0.27279590E+3,0.333E+3,0.220E+3,0.29709000E+1,0.19349000E+1 - ,0.26344960E+3,0.333E+3,0.221E+3,0.29709000E+1,0.28999000E+1 - ,0.26677170E+3,0.333E+3,0.222E+3,0.29709000E+1,0.38675000E+1 - ,0.24398790E+3,0.333E+3,0.223E+3,0.29709000E+1,0.29110000E+1 - ,0.18493070E+3,0.333E+3,0.224E+3,0.29709000E+1,0.10619100E+2 - ,0.15885780E+3,0.333E+3,0.225E+3,0.29709000E+1,0.98849000E+1 - ,0.15583590E+3,0.333E+3,0.226E+3,0.29709000E+1,0.91376000E+1 - ,0.18150050E+3,0.333E+3,0.227E+3,0.29709000E+1,0.29263000E+1 - ,0.16942270E+3,0.333E+3,0.228E+3,0.29709000E+1,0.65458000E+1 - ,0.23833640E+3,0.333E+3,0.231E+3,0.29709000E+1,0.19315000E+1 - ,0.25222610E+3,0.333E+3,0.232E+3,0.29709000E+1,0.19447000E+1 - ,0.23257440E+3,0.333E+3,0.233E+3,0.29709000E+1,0.19793000E+1 - ,0.21711610E+3,0.333E+3,0.234E+3,0.29709000E+1,0.19812000E+1 - ,0.32696240E+3,0.333E+3,0.238E+3,0.29709000E+1,0.19143000E+1 - ,0.31671890E+3,0.333E+3,0.239E+3,0.29709000E+1,0.28903000E+1 - ,0.31999160E+3,0.333E+3,0.240E+3,0.29709000E+1,0.39106000E+1 - ,0.30916430E+3,0.333E+3,0.241E+3,0.29709000E+1,0.29225000E+1 - ,0.27453760E+3,0.333E+3,0.242E+3,0.29709000E+1,0.11055600E+2 - ,0.24311650E+3,0.333E+3,0.243E+3,0.29709000E+1,0.95402000E+1 - ,0.22998060E+3,0.333E+3,0.244E+3,0.29709000E+1,0.88895000E+1 - ,0.23320160E+3,0.333E+3,0.245E+3,0.29709000E+1,0.29696000E+1 - ,0.24333990E+3,0.333E+3,0.246E+3,0.29709000E+1,0.57095000E+1 - ,0.30738320E+3,0.333E+3,0.249E+3,0.29709000E+1,0.19378000E+1 - ,0.33424830E+3,0.333E+3,0.250E+3,0.29709000E+1,0.19505000E+1 - ,0.31655690E+3,0.333E+3,0.251E+3,0.29709000E+1,0.19523000E+1 - ,0.30627350E+3,0.333E+3,0.252E+3,0.29709000E+1,0.19639000E+1 - ,0.39613570E+3,0.333E+3,0.256E+3,0.29709000E+1,0.18467000E+1 - ,0.41206100E+3,0.333E+3,0.257E+3,0.29709000E+1,0.29175000E+1 - ,0.30703930E+3,0.333E+3,0.272E+3,0.29709000E+1,0.38840000E+1 - ,0.31988160E+3,0.333E+3,0.273E+3,0.29709000E+1,0.28988000E+1 - ,0.29837090E+3,0.333E+3,0.274E+3,0.29709000E+1,0.10915300E+2 - ,0.27179960E+3,0.333E+3,0.275E+3,0.29709000E+1,0.98054000E+1 - ,0.25630050E+3,0.333E+3,0.276E+3,0.29709000E+1,0.91527000E+1 - ,0.26023930E+3,0.333E+3,0.277E+3,0.29709000E+1,0.29424000E+1 - ,0.27366690E+3,0.333E+3,0.278E+3,0.29709000E+1,0.66669000E+1 - ,0.32926130E+3,0.333E+3,0.281E+3,0.29709000E+1,0.19302000E+1 - ,0.34820710E+3,0.333E+3,0.282E+3,0.29709000E+1,0.19356000E+1 - ,0.35568970E+3,0.333E+3,0.283E+3,0.29709000E+1,0.19655000E+1 - ,0.35372780E+3,0.333E+3,0.284E+3,0.29709000E+1,0.19639000E+1 - ,0.43636490E+3,0.333E+3,0.288E+3,0.29709000E+1,0.18075000E+1 - ,0.83603600E+2,0.333E+3,0.305E+3,0.29709000E+1,0.29128000E+1 - ,0.75280800E+2,0.333E+3,0.306E+3,0.29709000E+1,0.29987000E+1 - ,0.56939800E+2,0.333E+3,0.307E+3,0.29709000E+1,0.29903000E+1 - ,0.18498860E+3,0.333E+3,0.313E+3,0.29709000E+1,0.29146000E+1 - ,0.22091650E+3,0.333E+3,0.314E+3,0.29709000E+1,0.29407000E+1 - ,0.18443640E+3,0.333E+3,0.315E+3,0.29709000E+1,0.29859000E+1 - ,0.16228780E+3,0.333E+3,0.327E+3,0.29709000E+1,0.77785000E+1 - ,0.17705570E+3,0.333E+3,0.328E+3,0.29709000E+1,0.62918000E+1 - ,0.19651790E+3,0.333E+3,0.331E+3,0.29709000E+1,0.29233000E+1 - ,0.22680190E+3,0.333E+3,0.332E+3,0.29709000E+1,0.29186000E+1 - ,0.22428510E+3,0.333E+3,0.333E+3,0.29709000E+1,0.29709000E+1 - ,0.30319300E+2,0.349E+3,0.100E+1,0.29353000E+1,0.91180000E+0 - ,0.20340200E+2,0.349E+3,0.200E+1,0.29353000E+1,0.00000000E+0 - ,0.44469780E+3,0.349E+3,0.300E+1,0.29353000E+1,0.00000000E+0 - ,0.26404390E+3,0.349E+3,0.400E+1,0.29353000E+1,0.00000000E+0 - ,0.18045680E+3,0.349E+3,0.500E+1,0.29353000E+1,0.00000000E+0 - ,0.12327050E+3,0.349E+3,0.600E+1,0.29353000E+1,0.00000000E+0 - ,0.86956900E+2,0.349E+3,0.700E+1,0.29353000E+1,0.00000000E+0 - ,0.66274100E+2,0.349E+3,0.800E+1,0.29353000E+1,0.00000000E+0 - ,0.50515600E+2,0.349E+3,0.900E+1,0.29353000E+1,0.00000000E+0 - ,0.39067400E+2,0.349E+3,0.100E+2,0.29353000E+1,0.00000000E+0 - ,0.53285380E+3,0.349E+3,0.110E+2,0.29353000E+1,0.00000000E+0 - ,0.41885670E+3,0.349E+3,0.120E+2,0.29353000E+1,0.00000000E+0 - ,0.38906980E+3,0.349E+3,0.130E+2,0.29353000E+1,0.00000000E+0 - ,0.30967790E+3,0.349E+3,0.140E+2,0.29353000E+1,0.00000000E+0 - ,0.24351060E+3,0.349E+3,0.150E+2,0.29353000E+1,0.00000000E+0 - ,0.20320970E+3,0.349E+3,0.160E+2,0.29353000E+1,0.00000000E+0 - ,0.16688670E+3,0.349E+3,0.170E+2,0.29353000E+1,0.00000000E+0 - ,0.13720100E+3,0.349E+3,0.180E+2,0.29353000E+1,0.00000000E+0 - ,0.86995980E+3,0.349E+3,0.190E+2,0.29353000E+1,0.00000000E+0 - ,0.72995940E+3,0.349E+3,0.200E+2,0.29353000E+1,0.00000000E+0 - ,0.60530470E+3,0.349E+3,0.210E+2,0.29353000E+1,0.00000000E+0 - ,0.58657520E+3,0.349E+3,0.220E+2,0.29353000E+1,0.00000000E+0 - ,0.53826720E+3,0.349E+3,0.230E+2,0.29353000E+1,0.00000000E+0 - ,0.42440160E+3,0.349E+3,0.240E+2,0.29353000E+1,0.00000000E+0 - ,0.46484110E+3,0.349E+3,0.250E+2,0.29353000E+1,0.00000000E+0 - ,0.36531290E+3,0.349E+3,0.260E+2,0.29353000E+1,0.00000000E+0 - ,0.38862700E+3,0.349E+3,0.270E+2,0.29353000E+1,0.00000000E+0 - ,0.39951060E+3,0.349E+3,0.280E+2,0.29353000E+1,0.00000000E+0 - ,0.30659770E+3,0.349E+3,0.290E+2,0.29353000E+1,0.00000000E+0 - ,0.31653820E+3,0.349E+3,0.300E+2,0.29353000E+1,0.00000000E+0 - ,0.37394790E+3,0.349E+3,0.310E+2,0.29353000E+1,0.00000000E+0 - ,0.33229320E+3,0.349E+3,0.320E+2,0.29353000E+1,0.00000000E+0 - ,0.28535990E+3,0.349E+3,0.330E+2,0.29353000E+1,0.00000000E+0 - ,0.25714220E+3,0.349E+3,0.340E+2,0.29353000E+1,0.00000000E+0 - ,0.22602240E+3,0.349E+3,0.350E+2,0.29353000E+1,0.00000000E+0 - ,0.19737620E+3,0.349E+3,0.360E+2,0.29353000E+1,0.00000000E+0 - ,0.97661940E+3,0.349E+3,0.370E+2,0.29353000E+1,0.00000000E+0 - ,0.86927450E+3,0.349E+3,0.380E+2,0.29353000E+1,0.00000000E+0 - ,0.76640590E+3,0.349E+3,0.390E+2,0.29353000E+1,0.00000000E+0 - ,0.69159970E+3,0.349E+3,0.400E+2,0.29353000E+1,0.00000000E+0 - ,0.63235800E+3,0.349E+3,0.410E+2,0.29353000E+1,0.00000000E+0 - ,0.49057200E+3,0.349E+3,0.420E+2,0.29353000E+1,0.00000000E+0 - ,0.54639300E+3,0.349E+3,0.430E+2,0.29353000E+1,0.00000000E+0 - ,0.41848510E+3,0.349E+3,0.440E+2,0.29353000E+1,0.00000000E+0 - ,0.45727800E+3,0.349E+3,0.450E+2,0.29353000E+1,0.00000000E+0 - ,0.42477830E+3,0.349E+3,0.460E+2,0.29353000E+1,0.00000000E+0 - ,0.35412210E+3,0.349E+3,0.470E+2,0.29353000E+1,0.00000000E+0 - ,0.37514860E+3,0.349E+3,0.480E+2,0.29353000E+1,0.00000000E+0 - ,0.46825210E+3,0.349E+3,0.490E+2,0.29353000E+1,0.00000000E+0 - ,0.43562520E+3,0.349E+3,0.500E+2,0.29353000E+1,0.00000000E+0 - ,0.39051070E+3,0.349E+3,0.510E+2,0.29353000E+1,0.00000000E+0 - ,0.36359740E+3,0.349E+3,0.520E+2,0.29353000E+1,0.00000000E+0 - ,0.33001060E+3,0.349E+3,0.530E+2,0.29353000E+1,0.00000000E+0 - ,0.29777960E+3,0.349E+3,0.540E+2,0.29353000E+1,0.00000000E+0 - ,0.11900927E+4,0.349E+3,0.550E+2,0.29353000E+1,0.00000000E+0 - ,0.11059339E+4,0.349E+3,0.560E+2,0.29353000E+1,0.00000000E+0 - ,0.97785820E+3,0.349E+3,0.570E+2,0.29353000E+1,0.00000000E+0 - ,0.46088570E+3,0.349E+3,0.580E+2,0.29353000E+1,0.27991000E+1 - ,0.98223880E+3,0.349E+3,0.590E+2,0.29353000E+1,0.00000000E+0 - ,0.94418200E+3,0.349E+3,0.600E+2,0.29353000E+1,0.00000000E+0 - ,0.92077280E+3,0.349E+3,0.610E+2,0.29353000E+1,0.00000000E+0 - ,0.89921070E+3,0.349E+3,0.620E+2,0.29353000E+1,0.00000000E+0 - ,0.88009790E+3,0.349E+3,0.630E+2,0.29353000E+1,0.00000000E+0 - ,0.69717420E+3,0.349E+3,0.640E+2,0.29353000E+1,0.00000000E+0 - ,0.77703650E+3,0.349E+3,0.650E+2,0.29353000E+1,0.00000000E+0 - ,0.75035490E+3,0.349E+3,0.660E+2,0.29353000E+1,0.00000000E+0 - ,0.79506940E+3,0.349E+3,0.670E+2,0.29353000E+1,0.00000000E+0 - ,0.77832350E+3,0.349E+3,0.680E+2,0.29353000E+1,0.00000000E+0 - ,0.76328690E+3,0.349E+3,0.690E+2,0.29353000E+1,0.00000000E+0 - ,0.75412760E+3,0.349E+3,0.700E+2,0.29353000E+1,0.00000000E+0 - ,0.63857600E+3,0.349E+3,0.710E+2,0.29353000E+1,0.00000000E+0 - ,0.63185040E+3,0.349E+3,0.720E+2,0.29353000E+1,0.00000000E+0 - ,0.57890360E+3,0.349E+3,0.730E+2,0.29353000E+1,0.00000000E+0 - ,0.49047740E+3,0.349E+3,0.740E+2,0.29353000E+1,0.00000000E+0 - ,0.49968040E+3,0.349E+3,0.750E+2,0.29353000E+1,0.00000000E+0 - ,0.45440140E+3,0.349E+3,0.760E+2,0.29353000E+1,0.00000000E+0 - ,0.41730580E+3,0.349E+3,0.770E+2,0.29353000E+1,0.00000000E+0 - ,0.34779410E+3,0.349E+3,0.780E+2,0.29353000E+1,0.00000000E+0 - ,0.32538710E+3,0.349E+3,0.790E+2,0.29353000E+1,0.00000000E+0 - ,0.33507650E+3,0.349E+3,0.800E+2,0.29353000E+1,0.00000000E+0 - ,0.48176440E+3,0.349E+3,0.810E+2,0.29353000E+1,0.00000000E+0 - ,0.47318850E+3,0.349E+3,0.820E+2,0.29353000E+1,0.00000000E+0 - ,0.43707980E+3,0.349E+3,0.830E+2,0.29353000E+1,0.00000000E+0 - ,0.41810900E+3,0.349E+3,0.840E+2,0.29353000E+1,0.00000000E+0 - ,0.38726470E+3,0.349E+3,0.850E+2,0.29353000E+1,0.00000000E+0 - ,0.35612660E+3,0.349E+3,0.860E+2,0.29353000E+1,0.00000000E+0 - ,0.11296762E+4,0.349E+3,0.870E+2,0.29353000E+1,0.00000000E+0 - ,0.10972829E+4,0.349E+3,0.880E+2,0.29353000E+1,0.00000000E+0 - ,0.97575910E+3,0.349E+3,0.890E+2,0.29353000E+1,0.00000000E+0 - ,0.88288780E+3,0.349E+3,0.900E+2,0.29353000E+1,0.00000000E+0 - ,0.87388960E+3,0.349E+3,0.910E+2,0.29353000E+1,0.00000000E+0 - ,0.84633640E+3,0.349E+3,0.920E+2,0.29353000E+1,0.00000000E+0 - ,0.86787930E+3,0.349E+3,0.930E+2,0.29353000E+1,0.00000000E+0 - ,0.84109640E+3,0.349E+3,0.940E+2,0.29353000E+1,0.00000000E+0 - ,0.48427000E+2,0.349E+3,0.101E+3,0.29353000E+1,0.00000000E+0 - ,0.15382640E+3,0.349E+3,0.103E+3,0.29353000E+1,0.98650000E+0 - ,0.19674540E+3,0.349E+3,0.104E+3,0.29353000E+1,0.98080000E+0 - ,0.15226150E+3,0.349E+3,0.105E+3,0.29353000E+1,0.97060000E+0 - ,0.11561300E+3,0.349E+3,0.106E+3,0.29353000E+1,0.98680000E+0 - ,0.81111000E+2,0.349E+3,0.107E+3,0.29353000E+1,0.99440000E+0 - ,0.59534400E+2,0.349E+3,0.108E+3,0.29353000E+1,0.99250000E+0 - ,0.41374600E+2,0.349E+3,0.109E+3,0.29353000E+1,0.99820000E+0 - ,0.22440970E+3,0.349E+3,0.111E+3,0.29353000E+1,0.96840000E+0 - ,0.34649400E+3,0.349E+3,0.112E+3,0.29353000E+1,0.96280000E+0 - ,0.35326540E+3,0.349E+3,0.113E+3,0.29353000E+1,0.96480000E+0 - ,0.28664120E+3,0.349E+3,0.114E+3,0.29353000E+1,0.95070000E+0 - ,0.23644610E+3,0.349E+3,0.115E+3,0.29353000E+1,0.99470000E+0 - ,0.20095580E+3,0.349E+3,0.116E+3,0.29353000E+1,0.99480000E+0 - ,0.16514950E+3,0.349E+3,0.117E+3,0.29353000E+1,0.99720000E+0 - ,0.31131870E+3,0.349E+3,0.119E+3,0.29353000E+1,0.97670000E+0 - ,0.58448340E+3,0.349E+3,0.120E+3,0.29353000E+1,0.98310000E+0 - ,0.31379200E+3,0.349E+3,0.121E+3,0.29353000E+1,0.18627000E+1 - ,0.30305660E+3,0.349E+3,0.122E+3,0.29353000E+1,0.18299000E+1 - ,0.29698540E+3,0.349E+3,0.123E+3,0.29353000E+1,0.19138000E+1 - ,0.29398400E+3,0.349E+3,0.124E+3,0.29353000E+1,0.18269000E+1 - ,0.27172730E+3,0.349E+3,0.125E+3,0.29353000E+1,0.16406000E+1 - ,0.25185120E+3,0.349E+3,0.126E+3,0.29353000E+1,0.16483000E+1 - ,0.24028600E+3,0.349E+3,0.127E+3,0.29353000E+1,0.17149000E+1 - ,0.23483900E+3,0.349E+3,0.128E+3,0.29353000E+1,0.17937000E+1 - ,0.23127000E+3,0.349E+3,0.129E+3,0.29353000E+1,0.95760000E+0 - ,0.21830270E+3,0.349E+3,0.130E+3,0.29353000E+1,0.19419000E+1 - ,0.35191540E+3,0.349E+3,0.131E+3,0.29353000E+1,0.96010000E+0 - ,0.31142600E+3,0.349E+3,0.132E+3,0.29353000E+1,0.94340000E+0 - ,0.28063500E+3,0.349E+3,0.133E+3,0.29353000E+1,0.98890000E+0 - ,0.25722750E+3,0.349E+3,0.134E+3,0.29353000E+1,0.99010000E+0 - ,0.22754720E+3,0.349E+3,0.135E+3,0.29353000E+1,0.99740000E+0 - ,0.37215270E+3,0.349E+3,0.137E+3,0.29353000E+1,0.97380000E+0 - ,0.71067900E+3,0.349E+3,0.138E+3,0.29353000E+1,0.98010000E+0 - ,0.55021640E+3,0.349E+3,0.139E+3,0.29353000E+1,0.19153000E+1 - ,0.41478140E+3,0.349E+3,0.140E+3,0.29353000E+1,0.19355000E+1 - ,0.41884820E+3,0.349E+3,0.141E+3,0.29353000E+1,0.19545000E+1 - ,0.39127220E+3,0.349E+3,0.142E+3,0.29353000E+1,0.19420000E+1 - ,0.43621610E+3,0.349E+3,0.143E+3,0.29353000E+1,0.16682000E+1 - ,0.34263080E+3,0.349E+3,0.144E+3,0.29353000E+1,0.18584000E+1 - ,0.32074540E+3,0.349E+3,0.145E+3,0.29353000E+1,0.19003000E+1 - ,0.29815620E+3,0.349E+3,0.146E+3,0.29353000E+1,0.18630000E+1 - ,0.28828650E+3,0.349E+3,0.147E+3,0.29353000E+1,0.96790000E+0 - ,0.28607710E+3,0.349E+3,0.148E+3,0.29353000E+1,0.19539000E+1 - ,0.44732690E+3,0.349E+3,0.149E+3,0.29353000E+1,0.96330000E+0 - ,0.40722750E+3,0.349E+3,0.150E+3,0.29353000E+1,0.95140000E+0 - ,0.38302800E+3,0.349E+3,0.151E+3,0.29353000E+1,0.97490000E+0 - ,0.36340770E+3,0.349E+3,0.152E+3,0.29353000E+1,0.98110000E+0 - ,0.33308010E+3,0.349E+3,0.153E+3,0.29353000E+1,0.99680000E+0 - ,0.44205370E+3,0.349E+3,0.155E+3,0.29353000E+1,0.99090000E+0 - ,0.91909280E+3,0.349E+3,0.156E+3,0.29353000E+1,0.97970000E+0 - ,0.69561840E+3,0.349E+3,0.157E+3,0.29353000E+1,0.19373000E+1 - ,0.44715510E+3,0.349E+3,0.159E+3,0.29353000E+1,0.29425000E+1 - ,0.43794100E+3,0.349E+3,0.160E+3,0.29353000E+1,0.29455000E+1 - ,0.42419840E+3,0.349E+3,0.161E+3,0.29353000E+1,0.29413000E+1 - ,0.42589770E+3,0.349E+3,0.162E+3,0.29353000E+1,0.29300000E+1 - ,0.40941900E+3,0.349E+3,0.163E+3,0.29353000E+1,0.18286000E+1 - ,0.42843500E+3,0.349E+3,0.164E+3,0.29353000E+1,0.28732000E+1 - ,0.40274990E+3,0.349E+3,0.165E+3,0.29353000E+1,0.29086000E+1 - ,0.40914080E+3,0.349E+3,0.166E+3,0.29353000E+1,0.28965000E+1 - ,0.38256860E+3,0.349E+3,0.167E+3,0.29353000E+1,0.29242000E+1 - ,0.37177680E+3,0.349E+3,0.168E+3,0.29353000E+1,0.29282000E+1 - ,0.36929910E+3,0.349E+3,0.169E+3,0.29353000E+1,0.29246000E+1 - ,0.38763420E+3,0.349E+3,0.170E+3,0.29353000E+1,0.28482000E+1 - ,0.35709720E+3,0.349E+3,0.171E+3,0.29353000E+1,0.29219000E+1 - ,0.47865480E+3,0.349E+3,0.172E+3,0.29353000E+1,0.19254000E+1 - ,0.44589750E+3,0.349E+3,0.173E+3,0.29353000E+1,0.19459000E+1 - ,0.40842780E+3,0.349E+3,0.174E+3,0.29353000E+1,0.19292000E+1 - ,0.41195430E+3,0.349E+3,0.175E+3,0.29353000E+1,0.18104000E+1 - ,0.36377170E+3,0.349E+3,0.176E+3,0.29353000E+1,0.18858000E+1 - ,0.34272900E+3,0.349E+3,0.177E+3,0.29353000E+1,0.18648000E+1 - ,0.32766460E+3,0.349E+3,0.178E+3,0.29353000E+1,0.19188000E+1 - ,0.31331210E+3,0.349E+3,0.179E+3,0.29353000E+1,0.98460000E+0 - ,0.30363280E+3,0.349E+3,0.180E+3,0.29353000E+1,0.19896000E+1 - ,0.48106690E+3,0.349E+3,0.181E+3,0.29353000E+1,0.92670000E+0 - ,0.44115490E+3,0.349E+3,0.182E+3,0.29353000E+1,0.93830000E+0 - ,0.42919400E+3,0.349E+3,0.183E+3,0.29353000E+1,0.98200000E+0 - ,0.41838610E+3,0.349E+3,0.184E+3,0.29353000E+1,0.98150000E+0 - ,0.39195070E+3,0.349E+3,0.185E+3,0.29353000E+1,0.99540000E+0 - ,0.49802340E+3,0.349E+3,0.187E+3,0.29353000E+1,0.97050000E+0 - ,0.91797160E+3,0.349E+3,0.188E+3,0.29353000E+1,0.96620000E+0 - ,0.52898700E+3,0.349E+3,0.189E+3,0.29353000E+1,0.29070000E+1 - ,0.60741450E+3,0.349E+3,0.190E+3,0.29353000E+1,0.28844000E+1 - ,0.54418980E+3,0.349E+3,0.191E+3,0.29353000E+1,0.28738000E+1 - ,0.48298360E+3,0.349E+3,0.192E+3,0.29353000E+1,0.28878000E+1 - ,0.46522570E+3,0.349E+3,0.193E+3,0.29353000E+1,0.29095000E+1 - ,0.55343860E+3,0.349E+3,0.194E+3,0.29353000E+1,0.19209000E+1 - ,0.13011390E+3,0.349E+3,0.204E+3,0.29353000E+1,0.19697000E+1 - ,0.12821910E+3,0.349E+3,0.205E+3,0.29353000E+1,0.19441000E+1 - ,0.94715300E+2,0.349E+3,0.206E+3,0.29353000E+1,0.19985000E+1 - ,0.76253000E+2,0.349E+3,0.207E+3,0.29353000E+1,0.20143000E+1 - ,0.52669000E+2,0.349E+3,0.208E+3,0.29353000E+1,0.19887000E+1 - ,0.22944250E+3,0.349E+3,0.212E+3,0.29353000E+1,0.19496000E+1 - ,0.27699400E+3,0.349E+3,0.213E+3,0.29353000E+1,0.19311000E+1 - ,0.26699740E+3,0.349E+3,0.214E+3,0.29353000E+1,0.19435000E+1 - ,0.23314220E+3,0.349E+3,0.215E+3,0.29353000E+1,0.20102000E+1 - ,0.19692250E+3,0.349E+3,0.216E+3,0.29353000E+1,0.19903000E+1 - ,0.32180650E+3,0.349E+3,0.220E+3,0.29353000E+1,0.19349000E+1 - ,0.31041930E+3,0.349E+3,0.221E+3,0.29353000E+1,0.28999000E+1 - ,0.31434380E+3,0.349E+3,0.222E+3,0.29353000E+1,0.38675000E+1 - ,0.28770260E+3,0.349E+3,0.223E+3,0.29353000E+1,0.29110000E+1 - ,0.21815660E+3,0.349E+3,0.224E+3,0.29353000E+1,0.10619100E+2 - ,0.18741200E+3,0.349E+3,0.225E+3,0.29353000E+1,0.98849000E+1 - ,0.18389760E+3,0.349E+3,0.226E+3,0.29353000E+1,0.91376000E+1 - ,0.21424530E+3,0.349E+3,0.227E+3,0.29353000E+1,0.29263000E+1 - ,0.19997120E+3,0.349E+3,0.228E+3,0.29353000E+1,0.65458000E+1 - ,0.28072610E+3,0.349E+3,0.231E+3,0.29353000E+1,0.19315000E+1 - ,0.29685620E+3,0.349E+3,0.232E+3,0.29353000E+1,0.19447000E+1 - ,0.27345920E+3,0.349E+3,0.233E+3,0.29353000E+1,0.19793000E+1 - ,0.25524180E+3,0.349E+3,0.234E+3,0.29353000E+1,0.19812000E+1 - ,0.38575940E+3,0.349E+3,0.238E+3,0.29353000E+1,0.19143000E+1 - ,0.37308750E+3,0.349E+3,0.239E+3,0.29353000E+1,0.28903000E+1 - ,0.37681730E+3,0.349E+3,0.240E+3,0.29353000E+1,0.39106000E+1 - ,0.36432260E+3,0.349E+3,0.241E+3,0.29353000E+1,0.29225000E+1 - ,0.32348820E+3,0.349E+3,0.242E+3,0.29353000E+1,0.11055600E+2 - ,0.28650850E+3,0.349E+3,0.243E+3,0.29353000E+1,0.95402000E+1 - ,0.27111330E+3,0.349E+3,0.244E+3,0.29353000E+1,0.88895000E+1 - ,0.27523510E+3,0.349E+3,0.245E+3,0.29353000E+1,0.29696000E+1 - ,0.28720260E+3,0.349E+3,0.246E+3,0.29353000E+1,0.57095000E+1 - ,0.36275140E+3,0.349E+3,0.249E+3,0.29353000E+1,0.19378000E+1 - ,0.39418070E+3,0.349E+3,0.250E+3,0.29353000E+1,0.19505000E+1 - ,0.37288760E+3,0.349E+3,0.251E+3,0.29353000E+1,0.19523000E+1 - ,0.36059670E+3,0.349E+3,0.252E+3,0.29353000E+1,0.19639000E+1 - ,0.46716080E+3,0.349E+3,0.256E+3,0.29353000E+1,0.18467000E+1 - ,0.48537390E+3,0.349E+3,0.257E+3,0.29353000E+1,0.29175000E+1 - ,0.36148780E+3,0.349E+3,0.272E+3,0.29353000E+1,0.38840000E+1 - ,0.37694960E+3,0.349E+3,0.273E+3,0.29353000E+1,0.28988000E+1 - ,0.35152420E+3,0.349E+3,0.274E+3,0.29353000E+1,0.10915300E+2 - ,0.32026850E+3,0.349E+3,0.275E+3,0.29353000E+1,0.98054000E+1 - ,0.30203680E+3,0.349E+3,0.276E+3,0.29353000E+1,0.91527000E+1 - ,0.30706620E+3,0.349E+3,0.277E+3,0.29353000E+1,0.29424000E+1 - ,0.32283420E+3,0.349E+3,0.278E+3,0.29353000E+1,0.66669000E+1 - ,0.38866590E+3,0.349E+3,0.281E+3,0.29353000E+1,0.19302000E+1 - ,0.41079890E+3,0.349E+3,0.282E+3,0.29353000E+1,0.19356000E+1 - ,0.41930730E+3,0.349E+3,0.283E+3,0.29353000E+1,0.19655000E+1 - ,0.41680560E+3,0.349E+3,0.284E+3,0.29353000E+1,0.19639000E+1 - ,0.51446020E+3,0.349E+3,0.288E+3,0.29353000E+1,0.18075000E+1 - ,0.98223500E+2,0.349E+3,0.305E+3,0.29353000E+1,0.29128000E+1 - ,0.88657200E+2,0.349E+3,0.306E+3,0.29353000E+1,0.29987000E+1 - ,0.67270400E+2,0.349E+3,0.307E+3,0.29353000E+1,0.29903000E+1 - ,0.21743180E+3,0.349E+3,0.313E+3,0.29353000E+1,0.29146000E+1 - ,0.25998580E+3,0.349E+3,0.314E+3,0.29353000E+1,0.29407000E+1 - ,0.21672230E+3,0.349E+3,0.315E+3,0.29353000E+1,0.29859000E+1 - ,0.19153170E+3,0.349E+3,0.327E+3,0.29353000E+1,0.77785000E+1 - ,0.20921040E+3,0.349E+3,0.328E+3,0.29353000E+1,0.62918000E+1 - ,0.23116180E+3,0.349E+3,0.331E+3,0.29353000E+1,0.29233000E+1 - ,0.26679440E+3,0.349E+3,0.332E+3,0.29353000E+1,0.29186000E+1 - ,0.26367810E+3,0.349E+3,0.333E+3,0.29353000E+1,0.29709000E+1 - ,0.31083150E+3,0.349E+3,0.349E+3,0.29353000E+1,0.29353000E+1 - ,0.34550300E+2,0.350E+3,0.100E+1,0.29259000E+1,0.91180000E+0 - ,0.22887500E+2,0.350E+3,0.200E+1,0.29259000E+1,0.00000000E+0 - ,0.52718510E+3,0.350E+3,0.300E+1,0.29259000E+1,0.00000000E+0 - ,0.30788140E+3,0.350E+3,0.400E+1,0.29259000E+1,0.00000000E+0 - ,0.20823790E+3,0.350E+3,0.500E+1,0.29259000E+1,0.00000000E+0 - ,0.14104070E+3,0.350E+3,0.600E+1,0.29259000E+1,0.00000000E+0 - ,0.98802500E+2,0.350E+3,0.700E+1,0.29259000E+1,0.00000000E+0 - ,0.74902900E+2,0.350E+3,0.800E+1,0.29259000E+1,0.00000000E+0 - ,0.56815100E+2,0.350E+3,0.900E+1,0.29259000E+1,0.00000000E+0 - ,0.43755600E+2,0.350E+3,0.100E+2,0.29259000E+1,0.00000000E+0 - ,0.63086870E+3,0.350E+3,0.110E+2,0.29259000E+1,0.00000000E+0 - ,0.48975320E+3,0.350E+3,0.120E+2,0.29259000E+1,0.00000000E+0 - ,0.45261920E+3,0.350E+3,0.130E+2,0.29259000E+1,0.00000000E+0 - ,0.35774280E+3,0.350E+3,0.140E+2,0.29259000E+1,0.00000000E+0 - ,0.27953920E+3,0.350E+3,0.150E+2,0.29259000E+1,0.00000000E+0 - ,0.23224340E+3,0.350E+3,0.160E+2,0.29259000E+1,0.00000000E+0 - ,0.18988240E+3,0.350E+3,0.170E+2,0.29259000E+1,0.00000000E+0 - ,0.15546270E+3,0.350E+3,0.180E+2,0.29259000E+1,0.00000000E+0 - ,0.10315350E+4,0.350E+3,0.190E+2,0.29259000E+1,0.00000000E+0 - ,0.85745370E+3,0.350E+3,0.200E+2,0.29259000E+1,0.00000000E+0 - ,0.70944180E+3,0.350E+3,0.210E+2,0.29259000E+1,0.00000000E+0 - ,0.68588510E+3,0.350E+3,0.220E+2,0.29259000E+1,0.00000000E+0 - ,0.62854190E+3,0.350E+3,0.230E+2,0.29259000E+1,0.00000000E+0 - ,0.49509360E+3,0.350E+3,0.240E+2,0.29259000E+1,0.00000000E+0 - ,0.54171840E+3,0.350E+3,0.250E+2,0.29259000E+1,0.00000000E+0 - ,0.42519040E+3,0.350E+3,0.260E+2,0.29259000E+1,0.00000000E+0 - ,0.45143600E+3,0.350E+3,0.270E+2,0.29259000E+1,0.00000000E+0 - ,0.46473810E+3,0.350E+3,0.280E+2,0.29259000E+1,0.00000000E+0 - ,0.35624130E+3,0.350E+3,0.290E+2,0.29259000E+1,0.00000000E+0 - ,0.36657850E+3,0.350E+3,0.300E+2,0.29259000E+1,0.00000000E+0 - ,0.43386350E+3,0.350E+3,0.310E+2,0.29259000E+1,0.00000000E+0 - ,0.38351890E+3,0.350E+3,0.320E+2,0.29259000E+1,0.00000000E+0 - ,0.32767900E+3,0.350E+3,0.330E+2,0.29259000E+1,0.00000000E+0 - ,0.29427420E+3,0.350E+3,0.340E+2,0.29259000E+1,0.00000000E+0 - ,0.25771960E+3,0.350E+3,0.350E+2,0.29259000E+1,0.00000000E+0 - ,0.22426550E+3,0.350E+3,0.360E+2,0.29259000E+1,0.00000000E+0 - ,0.11566447E+4,0.350E+3,0.370E+2,0.29259000E+1,0.00000000E+0 - ,0.10211992E+4,0.350E+3,0.380E+2,0.29259000E+1,0.00000000E+0 - ,0.89668220E+3,0.350E+3,0.390E+2,0.29259000E+1,0.00000000E+0 - ,0.80699680E+3,0.350E+3,0.400E+2,0.29259000E+1,0.00000000E+0 - ,0.73648020E+3,0.350E+3,0.410E+2,0.29259000E+1,0.00000000E+0 - ,0.56927660E+3,0.350E+3,0.420E+2,0.29259000E+1,0.00000000E+0 - ,0.63492090E+3,0.350E+3,0.430E+2,0.29259000E+1,0.00000000E+0 - ,0.48434860E+3,0.350E+3,0.440E+2,0.29259000E+1,0.00000000E+0 - ,0.52953710E+3,0.350E+3,0.450E+2,0.29259000E+1,0.00000000E+0 - ,0.49130410E+3,0.350E+3,0.460E+2,0.29259000E+1,0.00000000E+0 - ,0.40943180E+3,0.350E+3,0.470E+2,0.29259000E+1,0.00000000E+0 - ,0.43319920E+3,0.350E+3,0.480E+2,0.29259000E+1,0.00000000E+0 - ,0.54284130E+3,0.350E+3,0.490E+2,0.29259000E+1,0.00000000E+0 - ,0.50298910E+3,0.350E+3,0.500E+2,0.29259000E+1,0.00000000E+0 - ,0.44897690E+3,0.350E+3,0.510E+2,0.29259000E+1,0.00000000E+0 - ,0.41689450E+3,0.350E+3,0.520E+2,0.29259000E+1,0.00000000E+0 - ,0.37722550E+3,0.350E+3,0.530E+2,0.29259000E+1,0.00000000E+0 - ,0.33935050E+3,0.350E+3,0.540E+2,0.29259000E+1,0.00000000E+0 - ,0.14090375E+4,0.350E+3,0.550E+2,0.29259000E+1,0.00000000E+0 - ,0.13006349E+4,0.350E+3,0.560E+2,0.29259000E+1,0.00000000E+0 - ,0.11454236E+4,0.350E+3,0.570E+2,0.29259000E+1,0.00000000E+0 - ,0.53013690E+3,0.350E+3,0.580E+2,0.29259000E+1,0.27991000E+1 - ,0.11533721E+4,0.350E+3,0.590E+2,0.29259000E+1,0.00000000E+0 - ,0.11079903E+4,0.350E+3,0.600E+2,0.29259000E+1,0.00000000E+0 - ,0.10803308E+4,0.350E+3,0.610E+2,0.29259000E+1,0.00000000E+0 - ,0.10548803E+4,0.350E+3,0.620E+2,0.29259000E+1,0.00000000E+0 - ,0.10323159E+4,0.350E+3,0.630E+2,0.29259000E+1,0.00000000E+0 - ,0.81371020E+3,0.350E+3,0.640E+2,0.29259000E+1,0.00000000E+0 - ,0.91255420E+3,0.350E+3,0.650E+2,0.29259000E+1,0.00000000E+0 - ,0.88050980E+3,0.350E+3,0.660E+2,0.29259000E+1,0.00000000E+0 - ,0.93168500E+3,0.350E+3,0.670E+2,0.29259000E+1,0.00000000E+0 - ,0.91198360E+3,0.350E+3,0.680E+2,0.29259000E+1,0.00000000E+0 - ,0.89424260E+3,0.350E+3,0.690E+2,0.29259000E+1,0.00000000E+0 - ,0.88370520E+3,0.350E+3,0.700E+2,0.29259000E+1,0.00000000E+0 - ,0.74578300E+3,0.350E+3,0.710E+2,0.29259000E+1,0.00000000E+0 - ,0.73506570E+3,0.350E+3,0.720E+2,0.29259000E+1,0.00000000E+0 - ,0.67161750E+3,0.350E+3,0.730E+2,0.29259000E+1,0.00000000E+0 - ,0.56750780E+3,0.350E+3,0.740E+2,0.29259000E+1,0.00000000E+0 - ,0.57764320E+3,0.350E+3,0.750E+2,0.29259000E+1,0.00000000E+0 - ,0.52400420E+3,0.350E+3,0.760E+2,0.29259000E+1,0.00000000E+0 - ,0.48023510E+3,0.350E+3,0.770E+2,0.29259000E+1,0.00000000E+0 - ,0.39915430E+3,0.350E+3,0.780E+2,0.29259000E+1,0.00000000E+0 - ,0.37302900E+3,0.350E+3,0.790E+2,0.29259000E+1,0.00000000E+0 - ,0.38392690E+3,0.350E+3,0.800E+2,0.29259000E+1,0.00000000E+0 - ,0.55745160E+3,0.350E+3,0.810E+2,0.29259000E+1,0.00000000E+0 - ,0.54594690E+3,0.350E+3,0.820E+2,0.29259000E+1,0.00000000E+0 - ,0.50242860E+3,0.350E+3,0.830E+2,0.29259000E+1,0.00000000E+0 - ,0.47954670E+3,0.350E+3,0.840E+2,0.29259000E+1,0.00000000E+0 - ,0.44291920E+3,0.350E+3,0.850E+2,0.29259000E+1,0.00000000E+0 - ,0.40620580E+3,0.350E+3,0.860E+2,0.29259000E+1,0.00000000E+0 - ,0.13331000E+4,0.350E+3,0.870E+2,0.29259000E+1,0.00000000E+0 - ,0.12876457E+4,0.350E+3,0.880E+2,0.29259000E+1,0.00000000E+0 - ,0.11407848E+4,0.350E+3,0.890E+2,0.29259000E+1,0.00000000E+0 - ,0.10274883E+4,0.350E+3,0.900E+2,0.29259000E+1,0.00000000E+0 - ,0.10189158E+4,0.350E+3,0.910E+2,0.29259000E+1,0.00000000E+0 - ,0.98663370E+3,0.350E+3,0.920E+2,0.29259000E+1,0.00000000E+0 - ,0.10144405E+4,0.350E+3,0.930E+2,0.29259000E+1,0.00000000E+0 - ,0.98265960E+3,0.350E+3,0.940E+2,0.29259000E+1,0.00000000E+0 - ,0.55564300E+2,0.350E+3,0.101E+3,0.29259000E+1,0.00000000E+0 - ,0.17907060E+3,0.350E+3,0.103E+3,0.29259000E+1,0.98650000E+0 - ,0.22855840E+3,0.350E+3,0.104E+3,0.29259000E+1,0.98080000E+0 - ,0.17527450E+3,0.350E+3,0.105E+3,0.29259000E+1,0.97060000E+0 - ,0.13225620E+3,0.350E+3,0.106E+3,0.29259000E+1,0.98680000E+0 - ,0.92115400E+2,0.350E+3,0.107E+3,0.29259000E+1,0.99440000E+0 - ,0.67181100E+2,0.350E+3,0.108E+3,0.29259000E+1,0.99250000E+0 - ,0.46303000E+2,0.350E+3,0.109E+3,0.29259000E+1,0.99820000E+0 - ,0.26154000E+3,0.350E+3,0.111E+3,0.29259000E+1,0.96840000E+0 - ,0.40427630E+3,0.350E+3,0.112E+3,0.29259000E+1,0.96280000E+0 - ,0.41041760E+3,0.350E+3,0.113E+3,0.29259000E+1,0.96480000E+0 - ,0.33075310E+3,0.350E+3,0.114E+3,0.29259000E+1,0.95070000E+0 - ,0.27134880E+3,0.350E+3,0.115E+3,0.29259000E+1,0.99470000E+0 - ,0.22967560E+3,0.350E+3,0.116E+3,0.29259000E+1,0.99480000E+0 - ,0.18790960E+3,0.350E+3,0.117E+3,0.29259000E+1,0.99720000E+0 - ,0.36096750E+3,0.350E+3,0.119E+3,0.29259000E+1,0.97670000E+0 - ,0.68580030E+3,0.350E+3,0.120E+3,0.29259000E+1,0.98310000E+0 - ,0.36213940E+3,0.350E+3,0.121E+3,0.29259000E+1,0.18627000E+1 - ,0.34961060E+3,0.350E+3,0.122E+3,0.29259000E+1,0.18299000E+1 - ,0.34261200E+3,0.350E+3,0.123E+3,0.29259000E+1,0.19138000E+1 - ,0.33934490E+3,0.350E+3,0.124E+3,0.29259000E+1,0.18269000E+1 - ,0.31272950E+3,0.350E+3,0.125E+3,0.29259000E+1,0.16406000E+1 - ,0.28953010E+3,0.350E+3,0.126E+3,0.29259000E+1,0.16483000E+1 - ,0.27618840E+3,0.350E+3,0.127E+3,0.29259000E+1,0.17149000E+1 - ,0.26998570E+3,0.350E+3,0.128E+3,0.29259000E+1,0.17937000E+1 - ,0.26647580E+3,0.350E+3,0.129E+3,0.29259000E+1,0.95760000E+0 - ,0.25050770E+3,0.350E+3,0.130E+3,0.29259000E+1,0.19419000E+1 - ,0.40773530E+3,0.350E+3,0.131E+3,0.29259000E+1,0.96010000E+0 - ,0.35895200E+3,0.350E+3,0.132E+3,0.29259000E+1,0.94340000E+0 - ,0.32214500E+3,0.350E+3,0.133E+3,0.29259000E+1,0.98890000E+0 - ,0.29438040E+3,0.350E+3,0.134E+3,0.29259000E+1,0.99010000E+0 - ,0.25950110E+3,0.350E+3,0.135E+3,0.29259000E+1,0.99740000E+0 - ,0.43088110E+3,0.350E+3,0.137E+3,0.29259000E+1,0.97380000E+0 - ,0.83409790E+3,0.350E+3,0.138E+3,0.29259000E+1,0.98010000E+0 - ,0.64047400E+3,0.350E+3,0.139E+3,0.29259000E+1,0.19153000E+1 - ,0.47873550E+3,0.350E+3,0.140E+3,0.29259000E+1,0.19355000E+1 - ,0.48344780E+3,0.350E+3,0.141E+3,0.29259000E+1,0.19545000E+1 - ,0.45098400E+3,0.350E+3,0.142E+3,0.29259000E+1,0.19420000E+1 - ,0.50476500E+3,0.350E+3,0.143E+3,0.29259000E+1,0.16682000E+1 - ,0.39362700E+3,0.350E+3,0.144E+3,0.29259000E+1,0.18584000E+1 - ,0.36827100E+3,0.350E+3,0.145E+3,0.29259000E+1,0.19003000E+1 - ,0.34204040E+3,0.350E+3,0.146E+3,0.29259000E+1,0.18630000E+1 - ,0.33083540E+3,0.350E+3,0.147E+3,0.29259000E+1,0.96790000E+0 - ,0.32765190E+3,0.350E+3,0.148E+3,0.29259000E+1,0.19539000E+1 - ,0.51780290E+3,0.350E+3,0.149E+3,0.29259000E+1,0.96330000E+0 - ,0.46937510E+3,0.350E+3,0.150E+3,0.29259000E+1,0.95140000E+0 - ,0.44010850E+3,0.350E+3,0.151E+3,0.29259000E+1,0.97490000E+0 - ,0.41661070E+3,0.350E+3,0.152E+3,0.29259000E+1,0.98110000E+0 - ,0.38076150E+3,0.350E+3,0.153E+3,0.29259000E+1,0.99680000E+0 - ,0.51028570E+3,0.350E+3,0.155E+3,0.29259000E+1,0.99090000E+0 - ,0.10802049E+4,0.350E+3,0.156E+3,0.29259000E+1,0.97970000E+0 - ,0.81022120E+3,0.350E+3,0.157E+3,0.29259000E+1,0.19373000E+1 - ,0.51419410E+3,0.350E+3,0.159E+3,0.29259000E+1,0.29425000E+1 - ,0.50356860E+3,0.350E+3,0.160E+3,0.29259000E+1,0.29455000E+1 - ,0.48764360E+3,0.350E+3,0.161E+3,0.29259000E+1,0.29413000E+1 - ,0.48991040E+3,0.350E+3,0.162E+3,0.29259000E+1,0.29300000E+1 - ,0.47183730E+3,0.350E+3,0.163E+3,0.29259000E+1,0.18286000E+1 - ,0.49298820E+3,0.350E+3,0.164E+3,0.29259000E+1,0.28732000E+1 - ,0.46313550E+3,0.350E+3,0.165E+3,0.29259000E+1,0.29086000E+1 - ,0.47101170E+3,0.350E+3,0.166E+3,0.29259000E+1,0.28965000E+1 - ,0.43969410E+3,0.350E+3,0.167E+3,0.29259000E+1,0.29242000E+1 - ,0.42720060E+3,0.350E+3,0.168E+3,0.29259000E+1,0.29282000E+1 - ,0.42443580E+3,0.350E+3,0.169E+3,0.29259000E+1,0.29246000E+1 - ,0.44601630E+3,0.350E+3,0.170E+3,0.29259000E+1,0.28482000E+1 - ,0.41029850E+3,0.350E+3,0.171E+3,0.29259000E+1,0.29219000E+1 - ,0.55410220E+3,0.350E+3,0.172E+3,0.29259000E+1,0.19254000E+1 - ,0.51478350E+3,0.350E+3,0.173E+3,0.29259000E+1,0.19459000E+1 - ,0.47018380E+3,0.350E+3,0.174E+3,0.29259000E+1,0.19292000E+1 - ,0.47532640E+3,0.350E+3,0.175E+3,0.29259000E+1,0.18104000E+1 - ,0.41708260E+3,0.350E+3,0.176E+3,0.29259000E+1,0.18858000E+1 - ,0.39248360E+3,0.350E+3,0.177E+3,0.29259000E+1,0.18648000E+1 - ,0.37493960E+3,0.350E+3,0.178E+3,0.29259000E+1,0.19188000E+1 - ,0.35843860E+3,0.350E+3,0.179E+3,0.29259000E+1,0.98460000E+0 - ,0.34665580E+3,0.350E+3,0.180E+3,0.29259000E+1,0.19896000E+1 - ,0.55606680E+3,0.350E+3,0.181E+3,0.29259000E+1,0.92670000E+0 - ,0.50782080E+3,0.350E+3,0.182E+3,0.29259000E+1,0.93830000E+0 - ,0.49295080E+3,0.350E+3,0.183E+3,0.29259000E+1,0.98200000E+0 - ,0.47971720E+3,0.350E+3,0.184E+3,0.29259000E+1,0.98150000E+0 - ,0.44828660E+3,0.350E+3,0.185E+3,0.29259000E+1,0.99540000E+0 - ,0.57477940E+3,0.350E+3,0.187E+3,0.29259000E+1,0.97050000E+0 - ,0.10760744E+4,0.350E+3,0.188E+3,0.29259000E+1,0.96620000E+0 - ,0.60843480E+3,0.350E+3,0.189E+3,0.29259000E+1,0.29070000E+1 - ,0.70109350E+3,0.350E+3,0.190E+3,0.29259000E+1,0.28844000E+1 - ,0.62707340E+3,0.350E+3,0.191E+3,0.29259000E+1,0.28738000E+1 - ,0.55492490E+3,0.350E+3,0.192E+3,0.29259000E+1,0.28878000E+1 - ,0.53413870E+3,0.350E+3,0.193E+3,0.29259000E+1,0.29095000E+1 - ,0.64033600E+3,0.350E+3,0.194E+3,0.29259000E+1,0.19209000E+1 - ,0.14976800E+3,0.350E+3,0.204E+3,0.29259000E+1,0.19697000E+1 - ,0.14723850E+3,0.350E+3,0.205E+3,0.29259000E+1,0.19441000E+1 - ,0.10796360E+3,0.350E+3,0.206E+3,0.29259000E+1,0.19985000E+1 - ,0.86517400E+2,0.350E+3,0.207E+3,0.29259000E+1,0.20143000E+1 - ,0.59302900E+2,0.350E+3,0.208E+3,0.29259000E+1,0.19887000E+1 - ,0.26525750E+3,0.350E+3,0.212E+3,0.29259000E+1,0.19496000E+1 - ,0.32039240E+3,0.350E+3,0.213E+3,0.29259000E+1,0.19311000E+1 - ,0.30775700E+3,0.350E+3,0.214E+3,0.29259000E+1,0.19435000E+1 - ,0.26762990E+3,0.350E+3,0.215E+3,0.29259000E+1,0.20102000E+1 - ,0.22503380E+3,0.350E+3,0.216E+3,0.29259000E+1,0.19903000E+1 - ,0.37171230E+3,0.350E+3,0.220E+3,0.29259000E+1,0.19349000E+1 - ,0.35761290E+3,0.350E+3,0.221E+3,0.29259000E+1,0.28999000E+1 - ,0.36204400E+3,0.350E+3,0.222E+3,0.29259000E+1,0.38675000E+1 - ,0.33130930E+3,0.350E+3,0.223E+3,0.29259000E+1,0.29110000E+1 - ,0.24989390E+3,0.350E+3,0.224E+3,0.29259000E+1,0.10619100E+2 - ,0.21401180E+3,0.350E+3,0.225E+3,0.29259000E+1,0.98849000E+1 - ,0.21006230E+3,0.350E+3,0.226E+3,0.29259000E+1,0.91376000E+1 - ,0.24593880E+3,0.350E+3,0.227E+3,0.29259000E+1,0.29263000E+1 - ,0.22923870E+3,0.350E+3,0.228E+3,0.29259000E+1,0.65458000E+1 - ,0.32367220E+3,0.350E+3,0.231E+3,0.29259000E+1,0.19315000E+1 - ,0.34184070E+3,0.350E+3,0.232E+3,0.29259000E+1,0.19447000E+1 - ,0.31373420E+3,0.350E+3,0.233E+3,0.29259000E+1,0.19793000E+1 - ,0.29207370E+3,0.350E+3,0.234E+3,0.29259000E+1,0.19812000E+1 - ,0.44529880E+3,0.350E+3,0.238E+3,0.29259000E+1,0.19143000E+1 - ,0.42922790E+3,0.350E+3,0.239E+3,0.29259000E+1,0.28903000E+1 - ,0.43306580E+3,0.350E+3,0.240E+3,0.29259000E+1,0.39106000E+1 - ,0.41869180E+3,0.350E+3,0.241E+3,0.29259000E+1,0.29225000E+1 - ,0.37051430E+3,0.350E+3,0.242E+3,0.29259000E+1,0.11055600E+2 - ,0.32726370E+3,0.350E+3,0.243E+3,0.29259000E+1,0.95402000E+1 - ,0.30934100E+3,0.350E+3,0.244E+3,0.29259000E+1,0.88895000E+1 - ,0.31485220E+3,0.350E+3,0.245E+3,0.29259000E+1,0.29696000E+1 - ,0.32886980E+3,0.350E+3,0.246E+3,0.29259000E+1,0.57095000E+1 - ,0.41760930E+3,0.350E+3,0.249E+3,0.29259000E+1,0.19378000E+1 - ,0.45391950E+3,0.350E+3,0.250E+3,0.29259000E+1,0.19505000E+1 - ,0.42812220E+3,0.350E+3,0.251E+3,0.29259000E+1,0.19523000E+1 - ,0.41326530E+3,0.350E+3,0.252E+3,0.29259000E+1,0.19639000E+1 - ,0.53867350E+3,0.350E+3,0.256E+3,0.29259000E+1,0.18467000E+1 - ,0.55884130E+3,0.350E+3,0.257E+3,0.29259000E+1,0.29175000E+1 - ,0.41480660E+3,0.350E+3,0.272E+3,0.29259000E+1,0.38840000E+1 - ,0.43299810E+3,0.350E+3,0.273E+3,0.29259000E+1,0.28988000E+1 - ,0.40255440E+3,0.350E+3,0.274E+3,0.29259000E+1,0.10915300E+2 - ,0.36584940E+3,0.350E+3,0.275E+3,0.29259000E+1,0.98054000E+1 - ,0.34433760E+3,0.350E+3,0.276E+3,0.29259000E+1,0.91527000E+1 - ,0.35080960E+3,0.350E+3,0.277E+3,0.29259000E+1,0.29424000E+1 - ,0.36898910E+3,0.350E+3,0.278E+3,0.29259000E+1,0.66669000E+1 - ,0.44636650E+3,0.350E+3,0.281E+3,0.29259000E+1,0.19302000E+1 - ,0.47183450E+3,0.350E+3,0.282E+3,0.29259000E+1,0.19356000E+1 - ,0.48114100E+3,0.350E+3,0.283E+3,0.29259000E+1,0.19655000E+1 - ,0.47772640E+3,0.350E+3,0.284E+3,0.29259000E+1,0.19639000E+1 - ,0.59304720E+3,0.350E+3,0.288E+3,0.29259000E+1,0.18075000E+1 - ,0.11213310E+3,0.350E+3,0.305E+3,0.29259000E+1,0.29128000E+1 - ,0.10101310E+3,0.350E+3,0.306E+3,0.29259000E+1,0.29987000E+1 - ,0.76210000E+2,0.350E+3,0.307E+3,0.29259000E+1,0.29903000E+1 - ,0.25014210E+3,0.350E+3,0.313E+3,0.29259000E+1,0.29146000E+1 - ,0.29982180E+3,0.350E+3,0.314E+3,0.29259000E+1,0.29407000E+1 - ,0.24837820E+3,0.350E+3,0.315E+3,0.29259000E+1,0.29859000E+1 - ,0.21915410E+3,0.350E+3,0.327E+3,0.29259000E+1,0.77785000E+1 - ,0.24046050E+3,0.350E+3,0.328E+3,0.29259000E+1,0.62918000E+1 - ,0.26525500E+3,0.350E+3,0.331E+3,0.29259000E+1,0.29233000E+1 - ,0.30652410E+3,0.350E+3,0.332E+3,0.29259000E+1,0.29186000E+1 - ,0.30226660E+3,0.350E+3,0.333E+3,0.29259000E+1,0.29709000E+1 - ,0.35623590E+3,0.350E+3,0.349E+3,0.29259000E+1,0.29353000E+1 - ,0.40914530E+3,0.350E+3,0.350E+3,0.29259000E+1,0.29259000E+1 - ,0.35093900E+2,0.351E+3,0.100E+1,0.29315000E+1,0.91180000E+0 - ,0.23379200E+2,0.351E+3,0.200E+1,0.29315000E+1,0.00000000E+0 - ,0.51864270E+3,0.351E+3,0.300E+1,0.29315000E+1,0.00000000E+0 - ,0.30744210E+3,0.351E+3,0.400E+1,0.29315000E+1,0.00000000E+0 - ,0.20967450E+3,0.351E+3,0.500E+1,0.29315000E+1,0.00000000E+0 - ,0.14283480E+3,0.351E+3,0.600E+1,0.29315000E+1,0.00000000E+0 - ,0.10045000E+3,0.351E+3,0.700E+1,0.29315000E+1,0.00000000E+0 - ,0.76342400E+2,0.351E+3,0.800E+1,0.29315000E+1,0.00000000E+0 - ,0.58017600E+2,0.351E+3,0.900E+1,0.29315000E+1,0.00000000E+0 - ,0.44740800E+2,0.351E+3,0.100E+2,0.29315000E+1,0.00000000E+0 - ,0.62119430E+3,0.351E+3,0.110E+2,0.29315000E+1,0.00000000E+0 - ,0.48774180E+3,0.351E+3,0.120E+2,0.29315000E+1,0.00000000E+0 - ,0.45276050E+3,0.351E+3,0.130E+2,0.29315000E+1,0.00000000E+0 - ,0.35991590E+3,0.351E+3,0.140E+2,0.29315000E+1,0.00000000E+0 - ,0.28255640E+3,0.351E+3,0.150E+2,0.29315000E+1,0.00000000E+0 - ,0.23542680E+3,0.351E+3,0.160E+2,0.29315000E+1,0.00000000E+0 - ,0.19298930E+3,0.351E+3,0.170E+2,0.29315000E+1,0.00000000E+0 - ,0.15834200E+3,0.351E+3,0.180E+2,0.29315000E+1,0.00000000E+0 - ,0.10138323E+4,0.351E+3,0.190E+2,0.29315000E+1,0.00000000E+0 - ,0.85006180E+3,0.351E+3,0.200E+2,0.29315000E+1,0.00000000E+0 - ,0.70472450E+3,0.351E+3,0.210E+2,0.29315000E+1,0.00000000E+0 - ,0.68261700E+3,0.351E+3,0.220E+2,0.29315000E+1,0.00000000E+0 - ,0.62623920E+3,0.351E+3,0.230E+2,0.29315000E+1,0.00000000E+0 - ,0.49343100E+3,0.351E+3,0.240E+2,0.29315000E+1,0.00000000E+0 - ,0.54059460E+3,0.351E+3,0.250E+2,0.29315000E+1,0.00000000E+0 - ,0.42451240E+3,0.351E+3,0.260E+2,0.29315000E+1,0.00000000E+0 - ,0.45168930E+3,0.351E+3,0.270E+2,0.29315000E+1,0.00000000E+0 - ,0.46446650E+3,0.351E+3,0.280E+2,0.29315000E+1,0.00000000E+0 - ,0.35610950E+3,0.351E+3,0.290E+2,0.29315000E+1,0.00000000E+0 - ,0.36766370E+3,0.351E+3,0.300E+2,0.29315000E+1,0.00000000E+0 - ,0.43474170E+3,0.351E+3,0.310E+2,0.29315000E+1,0.00000000E+0 - ,0.38597850E+3,0.351E+3,0.320E+2,0.29315000E+1,0.00000000E+0 - ,0.33106180E+3,0.351E+3,0.330E+2,0.29315000E+1,0.00000000E+0 - ,0.29800720E+3,0.351E+3,0.340E+2,0.29315000E+1,0.00000000E+0 - ,0.26158890E+3,0.351E+3,0.350E+2,0.29315000E+1,0.00000000E+0 - ,0.22809040E+3,0.351E+3,0.360E+2,0.29315000E+1,0.00000000E+0 - ,0.11378099E+4,0.351E+3,0.370E+2,0.29315000E+1,0.00000000E+0 - ,0.10121518E+4,0.351E+3,0.380E+2,0.29315000E+1,0.00000000E+0 - ,0.89191400E+3,0.351E+3,0.390E+2,0.29315000E+1,0.00000000E+0 - ,0.80449370E+3,0.351E+3,0.400E+2,0.29315000E+1,0.00000000E+0 - ,0.73528120E+3,0.351E+3,0.410E+2,0.29315000E+1,0.00000000E+0 - ,0.56979780E+3,0.351E+3,0.420E+2,0.29315000E+1,0.00000000E+0 - ,0.63489910E+3,0.351E+3,0.430E+2,0.29315000E+1,0.00000000E+0 - ,0.48565920E+3,0.351E+3,0.440E+2,0.29315000E+1,0.00000000E+0 - ,0.53091130E+3,0.351E+3,0.450E+2,0.29315000E+1,0.00000000E+0 - ,0.49300840E+3,0.351E+3,0.460E+2,0.29315000E+1,0.00000000E+0 - ,0.41066850E+3,0.351E+3,0.470E+2,0.29315000E+1,0.00000000E+0 - ,0.43517770E+3,0.351E+3,0.480E+2,0.29315000E+1,0.00000000E+0 - ,0.54381980E+3,0.351E+3,0.490E+2,0.29315000E+1,0.00000000E+0 - ,0.50566970E+3,0.351E+3,0.500E+2,0.29315000E+1,0.00000000E+0 - ,0.45291870E+3,0.351E+3,0.510E+2,0.29315000E+1,0.00000000E+0 - ,0.42141870E+3,0.351E+3,0.520E+2,0.29315000E+1,0.00000000E+0 - ,0.38213760E+3,0.351E+3,0.530E+2,0.29315000E+1,0.00000000E+0 - ,0.34444580E+3,0.351E+3,0.540E+2,0.29315000E+1,0.00000000E+0 - ,0.13865806E+4,0.351E+3,0.550E+2,0.29315000E+1,0.00000000E+0 - ,0.12877738E+4,0.351E+3,0.560E+2,0.29315000E+1,0.00000000E+0 - ,0.11381053E+4,0.351E+3,0.570E+2,0.29315000E+1,0.00000000E+0 - ,0.53448010E+3,0.351E+3,0.580E+2,0.29315000E+1,0.27991000E+1 - ,0.11432636E+4,0.351E+3,0.590E+2,0.29315000E+1,0.00000000E+0 - ,0.10988818E+4,0.351E+3,0.600E+2,0.29315000E+1,0.00000000E+0 - ,0.10716137E+4,0.351E+3,0.610E+2,0.29315000E+1,0.00000000E+0 - ,0.10465046E+4,0.351E+3,0.620E+2,0.29315000E+1,0.00000000E+0 - ,0.10242500E+4,0.351E+3,0.630E+2,0.29315000E+1,0.00000000E+0 - ,0.81059520E+3,0.351E+3,0.640E+2,0.29315000E+1,0.00000000E+0 - ,0.90407560E+3,0.351E+3,0.650E+2,0.29315000E+1,0.00000000E+0 - ,0.87295200E+3,0.351E+3,0.660E+2,0.29315000E+1,0.00000000E+0 - ,0.92519070E+3,0.351E+3,0.670E+2,0.29315000E+1,0.00000000E+0 - ,0.90570520E+3,0.351E+3,0.680E+2,0.29315000E+1,0.00000000E+0 - ,0.88820360E+3,0.351E+3,0.690E+2,0.29315000E+1,0.00000000E+0 - ,0.87758750E+3,0.351E+3,0.700E+2,0.29315000E+1,0.00000000E+0 - ,0.74266050E+3,0.351E+3,0.710E+2,0.29315000E+1,0.00000000E+0 - ,0.73464070E+3,0.351E+3,0.720E+2,0.29315000E+1,0.00000000E+0 - ,0.67268970E+3,0.351E+3,0.730E+2,0.29315000E+1,0.00000000E+0 - ,0.56941570E+3,0.351E+3,0.740E+2,0.29315000E+1,0.00000000E+0 - ,0.58004130E+3,0.351E+3,0.750E+2,0.29315000E+1,0.00000000E+0 - ,0.52713410E+3,0.351E+3,0.760E+2,0.29315000E+1,0.00000000E+0 - ,0.48380280E+3,0.351E+3,0.770E+2,0.29315000E+1,0.00000000E+0 - ,0.40272830E+3,0.351E+3,0.780E+2,0.29315000E+1,0.00000000E+0 - ,0.37658500E+3,0.351E+3,0.790E+2,0.29315000E+1,0.00000000E+0 - ,0.38784150E+3,0.351E+3,0.800E+2,0.29315000E+1,0.00000000E+0 - ,0.55900180E+3,0.351E+3,0.810E+2,0.29315000E+1,0.00000000E+0 - ,0.54891370E+3,0.351E+3,0.820E+2,0.29315000E+1,0.00000000E+0 - ,0.50669310E+3,0.351E+3,0.830E+2,0.29315000E+1,0.00000000E+0 - ,0.48446800E+3,0.351E+3,0.840E+2,0.29315000E+1,0.00000000E+0 - ,0.44838730E+3,0.351E+3,0.850E+2,0.29315000E+1,0.00000000E+0 - ,0.41197350E+3,0.351E+3,0.860E+2,0.29315000E+1,0.00000000E+0 - ,0.13155898E+4,0.351E+3,0.870E+2,0.29315000E+1,0.00000000E+0 - ,0.12773025E+4,0.351E+3,0.880E+2,0.29315000E+1,0.00000000E+0 - ,0.11352332E+4,0.351E+3,0.890E+2,0.29315000E+1,0.00000000E+0 - ,0.10262943E+4,0.351E+3,0.900E+2,0.29315000E+1,0.00000000E+0 - ,0.10158964E+4,0.351E+3,0.910E+2,0.29315000E+1,0.00000000E+0 - ,0.98378580E+3,0.351E+3,0.920E+2,0.29315000E+1,0.00000000E+0 - ,0.10091230E+4,0.351E+3,0.930E+2,0.29315000E+1,0.00000000E+0 - ,0.97791270E+3,0.351E+3,0.940E+2,0.29315000E+1,0.00000000E+0 - ,0.56194600E+2,0.351E+3,0.101E+3,0.29315000E+1,0.00000000E+0 - ,0.17902740E+3,0.351E+3,0.103E+3,0.29315000E+1,0.98650000E+0 - ,0.22888940E+3,0.351E+3,0.104E+3,0.29315000E+1,0.98080000E+0 - ,0.17677430E+3,0.351E+3,0.105E+3,0.29315000E+1,0.97060000E+0 - ,0.13392400E+3,0.351E+3,0.106E+3,0.29315000E+1,0.98680000E+0 - ,0.93656200E+2,0.351E+3,0.107E+3,0.29315000E+1,0.99440000E+0 - ,0.68514100E+2,0.351E+3,0.108E+3,0.29315000E+1,0.99250000E+0 - ,0.47383500E+2,0.351E+3,0.109E+3,0.29315000E+1,0.99820000E+0 - ,0.26106680E+3,0.351E+3,0.111E+3,0.29315000E+1,0.96840000E+0 - ,0.40330920E+3,0.351E+3,0.112E+3,0.29315000E+1,0.96280000E+0 - ,0.41097880E+3,0.351E+3,0.113E+3,0.29315000E+1,0.96480000E+0 - ,0.33303840E+3,0.351E+3,0.114E+3,0.29315000E+1,0.95070000E+0 - ,0.27432020E+3,0.351E+3,0.115E+3,0.29315000E+1,0.99470000E+0 - ,0.23280570E+3,0.351E+3,0.116E+3,0.29315000E+1,0.99480000E+0 - ,0.19097240E+3,0.351E+3,0.117E+3,0.29315000E+1,0.99720000E+0 - ,0.36149280E+3,0.351E+3,0.119E+3,0.29315000E+1,0.97670000E+0 - ,0.68031840E+3,0.351E+3,0.120E+3,0.29315000E+1,0.98310000E+0 - ,0.36424560E+3,0.351E+3,0.121E+3,0.29315000E+1,0.18627000E+1 - ,0.35170890E+3,0.351E+3,0.122E+3,0.29315000E+1,0.18299000E+1 - ,0.34463160E+3,0.351E+3,0.123E+3,0.29315000E+1,0.19138000E+1 - ,0.34115480E+3,0.351E+3,0.124E+3,0.29315000E+1,0.18269000E+1 - ,0.31519770E+3,0.351E+3,0.125E+3,0.29315000E+1,0.16406000E+1 - ,0.29203450E+3,0.351E+3,0.126E+3,0.29315000E+1,0.16483000E+1 - ,0.27857600E+3,0.351E+3,0.127E+3,0.29315000E+1,0.17149000E+1 - ,0.27225780E+3,0.351E+3,0.128E+3,0.29315000E+1,0.17937000E+1 - ,0.26817480E+3,0.351E+3,0.129E+3,0.29315000E+1,0.95760000E+0 - ,0.25301490E+3,0.351E+3,0.130E+3,0.29315000E+1,0.19419000E+1 - ,0.40901750E+3,0.351E+3,0.131E+3,0.29315000E+1,0.96010000E+0 - ,0.36162180E+3,0.351E+3,0.132E+3,0.29315000E+1,0.94340000E+0 - ,0.32554390E+3,0.351E+3,0.133E+3,0.29315000E+1,0.98890000E+0 - ,0.29810330E+3,0.351E+3,0.134E+3,0.29315000E+1,0.99010000E+0 - ,0.26336490E+3,0.351E+3,0.135E+3,0.29315000E+1,0.99740000E+0 - ,0.43194800E+3,0.351E+3,0.137E+3,0.29315000E+1,0.97380000E+0 - ,0.82711060E+3,0.351E+3,0.138E+3,0.29315000E+1,0.98010000E+0 - ,0.63960320E+3,0.351E+3,0.139E+3,0.29315000E+1,0.19153000E+1 - ,0.48140710E+3,0.351E+3,0.140E+3,0.29315000E+1,0.19355000E+1 - ,0.48607860E+3,0.351E+3,0.141E+3,0.29315000E+1,0.19545000E+1 - ,0.45385780E+3,0.351E+3,0.142E+3,0.29315000E+1,0.19420000E+1 - ,0.50629760E+3,0.351E+3,0.143E+3,0.29315000E+1,0.16682000E+1 - ,0.39707420E+3,0.351E+3,0.144E+3,0.29315000E+1,0.18584000E+1 - ,0.37157400E+3,0.351E+3,0.145E+3,0.29315000E+1,0.19003000E+1 - ,0.34525330E+3,0.351E+3,0.146E+3,0.29315000E+1,0.18630000E+1 - ,0.33380120E+3,0.351E+3,0.147E+3,0.29315000E+1,0.96790000E+0 - ,0.33121190E+3,0.351E+3,0.148E+3,0.29315000E+1,0.19539000E+1 - ,0.51938200E+3,0.351E+3,0.149E+3,0.29315000E+1,0.96330000E+0 - ,0.47251890E+3,0.351E+3,0.150E+3,0.29315000E+1,0.95140000E+0 - ,0.44417700E+3,0.351E+3,0.151E+3,0.29315000E+1,0.97490000E+0 - ,0.42118710E+3,0.351E+3,0.152E+3,0.29315000E+1,0.98110000E+0 - ,0.38570840E+3,0.351E+3,0.153E+3,0.29315000E+1,0.99680000E+0 - ,0.51302910E+3,0.351E+3,0.155E+3,0.29315000E+1,0.99090000E+0 - ,0.10697955E+4,0.351E+3,0.156E+3,0.29315000E+1,0.97970000E+0 - ,0.80869310E+3,0.351E+3,0.157E+3,0.29315000E+1,0.19373000E+1 - ,0.51850620E+3,0.351E+3,0.159E+3,0.29315000E+1,0.29425000E+1 - ,0.50780630E+3,0.351E+3,0.160E+3,0.29315000E+1,0.29455000E+1 - ,0.49182970E+3,0.351E+3,0.161E+3,0.29315000E+1,0.29413000E+1 - ,0.49386870E+3,0.351E+3,0.162E+3,0.29315000E+1,0.29300000E+1 - ,0.47482940E+3,0.351E+3,0.163E+3,0.29315000E+1,0.18286000E+1 - ,0.49689070E+3,0.351E+3,0.164E+3,0.29315000E+1,0.28732000E+1 - ,0.46699360E+3,0.351E+3,0.165E+3,0.29315000E+1,0.29086000E+1 - ,0.47450580E+3,0.351E+3,0.166E+3,0.29315000E+1,0.28965000E+1 - ,0.44355070E+3,0.351E+3,0.167E+3,0.29315000E+1,0.29242000E+1 - ,0.43101790E+3,0.351E+3,0.168E+3,0.29315000E+1,0.29282000E+1 - ,0.42817260E+3,0.351E+3,0.169E+3,0.29315000E+1,0.29246000E+1 - ,0.44962020E+3,0.351E+3,0.170E+3,0.29315000E+1,0.28482000E+1 - ,0.41401670E+3,0.351E+3,0.171E+3,0.29315000E+1,0.29219000E+1 - ,0.55586120E+3,0.351E+3,0.172E+3,0.29315000E+1,0.19254000E+1 - ,0.51747490E+3,0.351E+3,0.173E+3,0.29315000E+1,0.19459000E+1 - ,0.47362850E+3,0.351E+3,0.174E+3,0.29315000E+1,0.19292000E+1 - ,0.47790620E+3,0.351E+3,0.175E+3,0.29315000E+1,0.18104000E+1 - ,0.42136930E+3,0.351E+3,0.176E+3,0.29315000E+1,0.18858000E+1 - ,0.39678090E+3,0.351E+3,0.177E+3,0.29315000E+1,0.18648000E+1 - ,0.37918850E+3,0.351E+3,0.178E+3,0.29315000E+1,0.19188000E+1 - ,0.36245620E+3,0.351E+3,0.179E+3,0.29315000E+1,0.98460000E+0 - ,0.35113700E+3,0.351E+3,0.180E+3,0.29315000E+1,0.19896000E+1 - ,0.55815810E+3,0.351E+3,0.181E+3,0.29315000E+1,0.92670000E+0 - ,0.51151250E+3,0.351E+3,0.182E+3,0.29315000E+1,0.93830000E+0 - ,0.49747420E+3,0.351E+3,0.183E+3,0.29315000E+1,0.98200000E+0 - ,0.48477400E+3,0.351E+3,0.184E+3,0.29315000E+1,0.98150000E+0 - ,0.45383680E+3,0.351E+3,0.185E+3,0.29315000E+1,0.99540000E+0 - ,0.57800010E+3,0.351E+3,0.187E+3,0.29315000E+1,0.97050000E+0 - ,0.10681281E+4,0.351E+3,0.188E+3,0.29315000E+1,0.96620000E+0 - ,0.61348930E+3,0.351E+3,0.189E+3,0.29315000E+1,0.29070000E+1 - ,0.70481290E+3,0.351E+3,0.190E+3,0.29315000E+1,0.28844000E+1 - ,0.63107130E+3,0.351E+3,0.191E+3,0.29315000E+1,0.28738000E+1 - ,0.55973100E+3,0.351E+3,0.192E+3,0.29315000E+1,0.28878000E+1 - ,0.53903440E+3,0.351E+3,0.193E+3,0.29315000E+1,0.29095000E+1 - ,0.64211740E+3,0.351E+3,0.194E+3,0.29315000E+1,0.19209000E+1 - ,0.15112150E+3,0.351E+3,0.204E+3,0.29315000E+1,0.19697000E+1 - ,0.14873950E+3,0.351E+3,0.205E+3,0.29315000E+1,0.19441000E+1 - ,0.10957100E+3,0.351E+3,0.206E+3,0.29315000E+1,0.19985000E+1 - ,0.87995800E+2,0.351E+3,0.207E+3,0.29315000E+1,0.20143000E+1 - ,0.60520900E+2,0.351E+3,0.208E+3,0.29315000E+1,0.19887000E+1 - ,0.26667450E+3,0.351E+3,0.212E+3,0.29315000E+1,0.19496000E+1 - ,0.32197480E+3,0.351E+3,0.213E+3,0.29315000E+1,0.19311000E+1 - ,0.31012840E+3,0.351E+3,0.214E+3,0.29315000E+1,0.19435000E+1 - ,0.27048000E+3,0.351E+3,0.215E+3,0.29315000E+1,0.20102000E+1 - ,0.22811080E+3,0.351E+3,0.216E+3,0.29315000E+1,0.19903000E+1 - ,0.37364230E+3,0.351E+3,0.220E+3,0.29315000E+1,0.19349000E+1 - ,0.36026270E+3,0.351E+3,0.221E+3,0.29315000E+1,0.28999000E+1 - ,0.36478380E+3,0.351E+3,0.222E+3,0.29315000E+1,0.38675000E+1 - ,0.33375970E+3,0.351E+3,0.223E+3,0.29315000E+1,0.29110000E+1 - ,0.25258170E+3,0.351E+3,0.224E+3,0.29315000E+1,0.10619100E+2 - ,0.21675670E+3,0.351E+3,0.225E+3,0.29315000E+1,0.98849000E+1 - ,0.21269690E+3,0.351E+3,0.226E+3,0.29315000E+1,0.91376000E+1 - ,0.24819240E+3,0.351E+3,0.227E+3,0.29315000E+1,0.29263000E+1 - ,0.23156140E+3,0.351E+3,0.228E+3,0.29315000E+1,0.65458000E+1 - ,0.32593780E+3,0.351E+3,0.231E+3,0.29315000E+1,0.19315000E+1 - ,0.34461890E+3,0.351E+3,0.232E+3,0.29315000E+1,0.19447000E+1 - ,0.31716790E+3,0.351E+3,0.233E+3,0.29315000E+1,0.19793000E+1 - ,0.29578510E+3,0.351E+3,0.234E+3,0.29315000E+1,0.19812000E+1 - ,0.44775000E+3,0.351E+3,0.238E+3,0.29315000E+1,0.19143000E+1 - ,0.43282190E+3,0.351E+3,0.239E+3,0.29315000E+1,0.28903000E+1 - ,0.43705000E+3,0.351E+3,0.240E+3,0.29315000E+1,0.39106000E+1 - ,0.42243200E+3,0.351E+3,0.241E+3,0.29315000E+1,0.29225000E+1 - ,0.37466630E+3,0.351E+3,0.242E+3,0.29315000E+1,0.11055600E+2 - ,0.33151190E+3,0.351E+3,0.243E+3,0.29315000E+1,0.95402000E+1 - ,0.31355000E+3,0.351E+3,0.244E+3,0.29315000E+1,0.88895000E+1 - ,0.31846020E+3,0.351E+3,0.245E+3,0.29315000E+1,0.29696000E+1 - ,0.33242910E+3,0.351E+3,0.246E+3,0.29315000E+1,0.57095000E+1 - ,0.42067140E+3,0.351E+3,0.249E+3,0.29315000E+1,0.19378000E+1 - ,0.45728600E+3,0.351E+3,0.250E+3,0.29315000E+1,0.19505000E+1 - ,0.43233570E+3,0.351E+3,0.251E+3,0.29315000E+1,0.19523000E+1 - ,0.41789910E+3,0.351E+3,0.252E+3,0.29315000E+1,0.19639000E+1 - ,0.54209840E+3,0.351E+3,0.256E+3,0.29315000E+1,0.18467000E+1 - ,0.56322280E+3,0.351E+3,0.257E+3,0.29315000E+1,0.29175000E+1 - ,0.41908730E+3,0.351E+3,0.272E+3,0.29315000E+1,0.38840000E+1 - ,0.43700180E+3,0.351E+3,0.273E+3,0.29315000E+1,0.28988000E+1 - ,0.40713540E+3,0.351E+3,0.274E+3,0.29315000E+1,0.10915300E+2 - ,0.37060120E+3,0.351E+3,0.275E+3,0.29315000E+1,0.98054000E+1 - ,0.34925650E+3,0.351E+3,0.276E+3,0.29315000E+1,0.91527000E+1 - ,0.35516130E+3,0.351E+3,0.277E+3,0.29315000E+1,0.29424000E+1 - ,0.37350160E+3,0.351E+3,0.278E+3,0.29315000E+1,0.66669000E+1 - ,0.45030970E+3,0.351E+3,0.281E+3,0.29315000E+1,0.19302000E+1 - ,0.47607850E+3,0.351E+3,0.282E+3,0.29315000E+1,0.19356000E+1 - ,0.48592250E+3,0.351E+3,0.283E+3,0.29315000E+1,0.19655000E+1 - ,0.48291440E+3,0.351E+3,0.284E+3,0.29315000E+1,0.19639000E+1 - ,0.59698270E+3,0.351E+3,0.288E+3,0.29315000E+1,0.18075000E+1 - ,0.11375420E+3,0.351E+3,0.305E+3,0.29315000E+1,0.29128000E+1 - ,0.10251480E+3,0.351E+3,0.306E+3,0.29315000E+1,0.29987000E+1 - ,0.77544000E+2,0.351E+3,0.307E+3,0.29315000E+1,0.29903000E+1 - ,0.25247130E+3,0.351E+3,0.313E+3,0.29315000E+1,0.29146000E+1 - ,0.30196690E+3,0.351E+3,0.314E+3,0.29315000E+1,0.29407000E+1 - ,0.25132430E+3,0.351E+3,0.315E+3,0.29315000E+1,0.29859000E+1 - ,0.22165120E+3,0.351E+3,0.327E+3,0.29315000E+1,0.77785000E+1 - ,0.24237210E+3,0.351E+3,0.328E+3,0.29315000E+1,0.62918000E+1 - ,0.26809680E+3,0.351E+3,0.331E+3,0.29315000E+1,0.29233000E+1 - ,0.30954100E+3,0.351E+3,0.332E+3,0.29315000E+1,0.29186000E+1 - ,0.30575380E+3,0.351E+3,0.333E+3,0.29315000E+1,0.29709000E+1 - ,0.36007570E+3,0.351E+3,0.349E+3,0.29315000E+1,0.29353000E+1 - ,0.41300240E+3,0.351E+3,0.350E+3,0.29315000E+1,0.29259000E+1 - ,0.41737900E+3,0.351E+3,0.351E+3,0.29315000E+1,0.29315000E+1 - ,0.34044000E+2,0.381E+3,0.100E+1,0.29420000E+1,0.91180000E+0 - ,0.23069600E+2,0.381E+3,0.200E+1,0.29420000E+1,0.00000000E+0 - ,0.48987970E+3,0.381E+3,0.300E+1,0.29420000E+1,0.00000000E+0 - ,0.29240300E+3,0.381E+3,0.400E+1,0.29420000E+1,0.00000000E+0 - ,0.20096210E+3,0.381E+3,0.500E+1,0.29420000E+1,0.00000000E+0 - ,0.13805320E+3,0.381E+3,0.600E+1,0.29420000E+1,0.00000000E+0 - ,0.97883500E+2,0.381E+3,0.700E+1,0.29420000E+1,0.00000000E+0 - ,0.74909600E+2,0.381E+3,0.800E+1,0.29420000E+1,0.00000000E+0 - ,0.57318900E+2,0.381E+3,0.900E+1,0.29420000E+1,0.00000000E+0 - ,0.44478100E+2,0.381E+3,0.100E+2,0.29420000E+1,0.00000000E+0 - ,0.58737390E+3,0.381E+3,0.110E+2,0.29420000E+1,0.00000000E+0 - ,0.46339590E+3,0.381E+3,0.120E+2,0.29420000E+1,0.00000000E+0 - ,0.43142990E+3,0.381E+3,0.130E+2,0.29420000E+1,0.00000000E+0 - ,0.34462380E+3,0.381E+3,0.140E+2,0.29420000E+1,0.00000000E+0 - ,0.27203200E+3,0.381E+3,0.150E+2,0.29420000E+1,0.00000000E+0 - ,0.22771370E+3,0.381E+3,0.160E+2,0.29420000E+1,0.00000000E+0 - ,0.18762390E+3,0.381E+3,0.170E+2,0.29420000E+1,0.00000000E+0 - ,0.15474190E+3,0.381E+3,0.180E+2,0.29420000E+1,0.00000000E+0 - ,0.95974420E+3,0.381E+3,0.190E+2,0.29420000E+1,0.00000000E+0 - ,0.80685000E+3,0.381E+3,0.200E+2,0.29420000E+1,0.00000000E+0 - ,0.66951760E+3,0.381E+3,0.210E+2,0.29420000E+1,0.00000000E+0 - ,0.64952300E+3,0.381E+3,0.220E+2,0.29420000E+1,0.00000000E+0 - ,0.59639240E+3,0.381E+3,0.230E+2,0.29420000E+1,0.00000000E+0 - ,0.47075810E+3,0.381E+3,0.240E+2,0.29420000E+1,0.00000000E+0 - ,0.51551420E+3,0.381E+3,0.250E+2,0.29420000E+1,0.00000000E+0 - ,0.40565730E+3,0.381E+3,0.260E+2,0.29420000E+1,0.00000000E+0 - ,0.43161180E+3,0.381E+3,0.270E+2,0.29420000E+1,0.00000000E+0 - ,0.44337980E+3,0.381E+3,0.280E+2,0.29420000E+1,0.00000000E+0 - ,0.34075230E+3,0.381E+3,0.290E+2,0.29420000E+1,0.00000000E+0 - ,0.35207290E+3,0.381E+3,0.300E+2,0.29420000E+1,0.00000000E+0 - ,0.41543610E+3,0.381E+3,0.310E+2,0.29420000E+1,0.00000000E+0 - ,0.37009550E+3,0.381E+3,0.320E+2,0.29420000E+1,0.00000000E+0 - ,0.31876960E+3,0.381E+3,0.330E+2,0.29420000E+1,0.00000000E+0 - ,0.28790150E+3,0.381E+3,0.340E+2,0.29420000E+1,0.00000000E+0 - ,0.25371080E+3,0.381E+3,0.350E+2,0.29420000E+1,0.00000000E+0 - ,0.22213540E+3,0.381E+3,0.360E+2,0.29420000E+1,0.00000000E+0 - ,0.10781354E+4,0.381E+3,0.370E+2,0.29420000E+1,0.00000000E+0 - ,0.96112990E+3,0.381E+3,0.380E+2,0.29420000E+1,0.00000000E+0 - ,0.84864220E+3,0.381E+3,0.390E+2,0.29420000E+1,0.00000000E+0 - ,0.76669670E+3,0.381E+3,0.400E+2,0.29420000E+1,0.00000000E+0 - ,0.70169050E+3,0.381E+3,0.410E+2,0.29420000E+1,0.00000000E+0 - ,0.54556530E+3,0.381E+3,0.420E+2,0.29420000E+1,0.00000000E+0 - ,0.60711050E+3,0.381E+3,0.430E+2,0.29420000E+1,0.00000000E+0 - ,0.46612980E+3,0.381E+3,0.440E+2,0.29420000E+1,0.00000000E+0 - ,0.50894760E+3,0.381E+3,0.450E+2,0.29420000E+1,0.00000000E+0 - ,0.47308430E+3,0.381E+3,0.460E+2,0.29420000E+1,0.00000000E+0 - ,0.39480510E+3,0.381E+3,0.470E+2,0.29420000E+1,0.00000000E+0 - ,0.41818980E+3,0.381E+3,0.480E+2,0.29420000E+1,0.00000000E+0 - ,0.52081600E+3,0.381E+3,0.490E+2,0.29420000E+1,0.00000000E+0 - ,0.48532990E+3,0.381E+3,0.500E+2,0.29420000E+1,0.00000000E+0 - ,0.43604710E+3,0.381E+3,0.510E+2,0.29420000E+1,0.00000000E+0 - ,0.40666470E+3,0.381E+3,0.520E+2,0.29420000E+1,0.00000000E+0 - ,0.36983570E+3,0.381E+3,0.530E+2,0.29420000E+1,0.00000000E+0 - ,0.33441780E+3,0.381E+3,0.540E+2,0.29420000E+1,0.00000000E+0 - ,0.13141925E+4,0.381E+3,0.550E+2,0.29420000E+1,0.00000000E+0 - ,0.12227209E+4,0.381E+3,0.560E+2,0.29420000E+1,0.00000000E+0 - ,0.10825707E+4,0.381E+3,0.570E+2,0.29420000E+1,0.00000000E+0 - ,0.51466410E+3,0.381E+3,0.580E+2,0.29420000E+1,0.27991000E+1 - ,0.10866848E+4,0.381E+3,0.590E+2,0.29420000E+1,0.00000000E+0 - ,0.10447574E+4,0.381E+3,0.600E+2,0.29420000E+1,0.00000000E+0 - ,0.10188963E+4,0.381E+3,0.610E+2,0.29420000E+1,0.00000000E+0 - ,0.99506410E+3,0.381E+3,0.620E+2,0.29420000E+1,0.00000000E+0 - ,0.97393920E+3,0.381E+3,0.630E+2,0.29420000E+1,0.00000000E+0 - ,0.77328240E+3,0.381E+3,0.640E+2,0.29420000E+1,0.00000000E+0 - ,0.86029910E+3,0.381E+3,0.650E+2,0.29420000E+1,0.00000000E+0 - ,0.83099980E+3,0.381E+3,0.660E+2,0.29420000E+1,0.00000000E+0 - ,0.88007510E+3,0.381E+3,0.670E+2,0.29420000E+1,0.00000000E+0 - ,0.86153880E+3,0.381E+3,0.680E+2,0.29420000E+1,0.00000000E+0 - ,0.84491510E+3,0.381E+3,0.690E+2,0.29420000E+1,0.00000000E+0 - ,0.83467880E+3,0.381E+3,0.700E+2,0.29420000E+1,0.00000000E+0 - ,0.70786620E+3,0.381E+3,0.710E+2,0.29420000E+1,0.00000000E+0 - ,0.70135370E+3,0.381E+3,0.720E+2,0.29420000E+1,0.00000000E+0 - ,0.64346570E+3,0.381E+3,0.730E+2,0.29420000E+1,0.00000000E+0 - ,0.54618300E+3,0.381E+3,0.740E+2,0.29420000E+1,0.00000000E+0 - ,0.55658840E+3,0.381E+3,0.750E+2,0.29420000E+1,0.00000000E+0 - ,0.50684330E+3,0.381E+3,0.760E+2,0.29420000E+1,0.00000000E+0 - ,0.46602790E+3,0.381E+3,0.770E+2,0.29420000E+1,0.00000000E+0 - ,0.38918560E+3,0.381E+3,0.780E+2,0.29420000E+1,0.00000000E+0 - ,0.36440110E+3,0.381E+3,0.790E+2,0.29420000E+1,0.00000000E+0 - ,0.37525010E+3,0.381E+3,0.800E+2,0.29420000E+1,0.00000000E+0 - ,0.53671560E+3,0.381E+3,0.810E+2,0.29420000E+1,0.00000000E+0 - ,0.52765960E+3,0.381E+3,0.820E+2,0.29420000E+1,0.00000000E+0 - ,0.48826870E+3,0.381E+3,0.830E+2,0.29420000E+1,0.00000000E+0 - ,0.46765830E+3,0.381E+3,0.840E+2,0.29420000E+1,0.00000000E+0 - ,0.43390630E+3,0.381E+3,0.850E+2,0.29420000E+1,0.00000000E+0 - ,0.39973560E+3,0.381E+3,0.860E+2,0.29420000E+1,0.00000000E+0 - ,0.12488786E+4,0.381E+3,0.870E+2,0.29420000E+1,0.00000000E+0 - ,0.12142011E+4,0.381E+3,0.880E+2,0.29420000E+1,0.00000000E+0 - ,0.10810636E+4,0.381E+3,0.890E+2,0.29420000E+1,0.00000000E+0 - ,0.98016620E+3,0.381E+3,0.900E+2,0.29420000E+1,0.00000000E+0 - ,0.96970180E+3,0.381E+3,0.910E+2,0.29420000E+1,0.00000000E+0 - ,0.93922300E+3,0.381E+3,0.920E+2,0.29420000E+1,0.00000000E+0 - ,0.96210980E+3,0.381E+3,0.930E+2,0.29420000E+1,0.00000000E+0 - ,0.93257400E+3,0.381E+3,0.940E+2,0.29420000E+1,0.00000000E+0 - ,0.54112100E+2,0.381E+3,0.101E+3,0.29420000E+1,0.00000000E+0 - ,0.17052180E+3,0.381E+3,0.103E+3,0.29420000E+1,0.98650000E+0 - ,0.21838760E+3,0.381E+3,0.104E+3,0.29420000E+1,0.98080000E+0 - ,0.16984800E+3,0.381E+3,0.105E+3,0.29420000E+1,0.97060000E+0 - ,0.12953340E+3,0.381E+3,0.106E+3,0.29420000E+1,0.98680000E+0 - ,0.91360600E+2,0.381E+3,0.107E+3,0.29420000E+1,0.99440000E+0 - ,0.67384900E+2,0.381E+3,0.108E+3,0.29420000E+1,0.99250000E+0 - ,0.47131600E+2,0.381E+3,0.109E+3,0.29420000E+1,0.99820000E+0 - ,0.24874970E+3,0.381E+3,0.111E+3,0.29420000E+1,0.96840000E+0 - ,0.38382790E+3,0.381E+3,0.112E+3,0.29420000E+1,0.96280000E+0 - ,0.39201850E+3,0.381E+3,0.113E+3,0.29420000E+1,0.96480000E+0 - ,0.31922290E+3,0.381E+3,0.114E+3,0.29420000E+1,0.95070000E+0 - ,0.26420730E+3,0.381E+3,0.115E+3,0.29420000E+1,0.99470000E+0 - ,0.22519300E+3,0.381E+3,0.116E+3,0.29420000E+1,0.99480000E+0 - ,0.18567430E+3,0.381E+3,0.117E+3,0.29420000E+1,0.99720000E+0 - ,0.34642790E+3,0.381E+3,0.119E+3,0.29420000E+1,0.97670000E+0 - ,0.64689750E+3,0.381E+3,0.120E+3,0.29420000E+1,0.98310000E+0 - ,0.34969760E+3,0.381E+3,0.121E+3,0.29420000E+1,0.18627000E+1 - ,0.33785900E+3,0.381E+3,0.122E+3,0.29420000E+1,0.18299000E+1 - ,0.33110740E+3,0.381E+3,0.123E+3,0.29420000E+1,0.19138000E+1 - ,0.32768960E+3,0.381E+3,0.124E+3,0.29420000E+1,0.18269000E+1 - ,0.30324930E+3,0.381E+3,0.125E+3,0.29420000E+1,0.16406000E+1 - ,0.28126900E+3,0.381E+3,0.126E+3,0.29420000E+1,0.16483000E+1 - ,0.26841200E+3,0.381E+3,0.127E+3,0.29420000E+1,0.17149000E+1 - ,0.26230550E+3,0.381E+3,0.128E+3,0.29420000E+1,0.17937000E+1 - ,0.25806750E+3,0.381E+3,0.129E+3,0.29420000E+1,0.95760000E+0 - ,0.24404160E+3,0.381E+3,0.130E+3,0.29420000E+1,0.19419000E+1 - ,0.39123290E+3,0.381E+3,0.131E+3,0.29420000E+1,0.96010000E+0 - ,0.34713060E+3,0.381E+3,0.132E+3,0.29420000E+1,0.94340000E+0 - ,0.31356550E+3,0.381E+3,0.133E+3,0.29420000E+1,0.98890000E+0 - ,0.28799690E+3,0.381E+3,0.134E+3,0.29420000E+1,0.99010000E+0 - ,0.25539640E+3,0.381E+3,0.135E+3,0.29420000E+1,0.99740000E+0 - ,0.41451570E+3,0.381E+3,0.137E+3,0.29420000E+1,0.97380000E+0 - ,0.78676620E+3,0.381E+3,0.138E+3,0.29420000E+1,0.98010000E+0 - ,0.61108840E+3,0.381E+3,0.139E+3,0.29420000E+1,0.19153000E+1 - ,0.46240460E+3,0.381E+3,0.140E+3,0.29420000E+1,0.19355000E+1 - ,0.46695430E+3,0.381E+3,0.141E+3,0.29420000E+1,0.19545000E+1 - ,0.43660630E+3,0.381E+3,0.142E+3,0.29420000E+1,0.19420000E+1 - ,0.48596370E+3,0.381E+3,0.143E+3,0.29420000E+1,0.16682000E+1 - ,0.38300380E+3,0.381E+3,0.144E+3,0.29420000E+1,0.18584000E+1 - ,0.35872510E+3,0.381E+3,0.145E+3,0.29420000E+1,0.19003000E+1 - ,0.33367710E+3,0.381E+3,0.146E+3,0.29420000E+1,0.18630000E+1 - ,0.32258500E+3,0.381E+3,0.147E+3,0.29420000E+1,0.96790000E+0 - ,0.32032730E+3,0.381E+3,0.148E+3,0.29420000E+1,0.19539000E+1 - ,0.49788730E+3,0.381E+3,0.149E+3,0.29420000E+1,0.96330000E+0 - ,0.45413030E+3,0.381E+3,0.150E+3,0.29420000E+1,0.95140000E+0 - ,0.42784290E+3,0.381E+3,0.151E+3,0.29420000E+1,0.97490000E+0 - ,0.40648930E+3,0.381E+3,0.152E+3,0.29420000E+1,0.98110000E+0 - ,0.37325390E+3,0.381E+3,0.153E+3,0.29420000E+1,0.99680000E+0 - ,0.49296130E+3,0.381E+3,0.155E+3,0.29420000E+1,0.99090000E+0 - ,0.10173501E+4,0.381E+3,0.156E+3,0.29420000E+1,0.97970000E+0 - ,0.77250690E+3,0.381E+3,0.157E+3,0.29420000E+1,0.19373000E+1 - ,0.49942220E+3,0.381E+3,0.159E+3,0.29420000E+1,0.29425000E+1 - ,0.48915000E+3,0.381E+3,0.160E+3,0.29420000E+1,0.29455000E+1 - ,0.47387610E+3,0.381E+3,0.161E+3,0.29420000E+1,0.29413000E+1 - ,0.47562120E+3,0.381E+3,0.162E+3,0.29420000E+1,0.29300000E+1 - ,0.45685930E+3,0.381E+3,0.163E+3,0.29420000E+1,0.18286000E+1 - ,0.47832350E+3,0.381E+3,0.164E+3,0.29420000E+1,0.28732000E+1 - ,0.44982470E+3,0.381E+3,0.165E+3,0.29420000E+1,0.29086000E+1 - ,0.45672830E+3,0.381E+3,0.166E+3,0.29420000E+1,0.28965000E+1 - ,0.42739350E+3,0.381E+3,0.167E+3,0.29420000E+1,0.29242000E+1 - ,0.41538260E+3,0.381E+3,0.168E+3,0.29420000E+1,0.29282000E+1 - ,0.41256270E+3,0.381E+3,0.169E+3,0.29420000E+1,0.29246000E+1 - ,0.43270380E+3,0.381E+3,0.170E+3,0.29420000E+1,0.28482000E+1 - ,0.39897500E+3,0.381E+3,0.171E+3,0.29420000E+1,0.29219000E+1 - ,0.53287050E+3,0.381E+3,0.172E+3,0.29420000E+1,0.19254000E+1 - ,0.49712170E+3,0.381E+3,0.173E+3,0.29420000E+1,0.19459000E+1 - ,0.45606110E+3,0.381E+3,0.174E+3,0.29420000E+1,0.19292000E+1 - ,0.45949090E+3,0.381E+3,0.175E+3,0.29420000E+1,0.18104000E+1 - ,0.40710880E+3,0.381E+3,0.176E+3,0.29420000E+1,0.18858000E+1 - ,0.38388990E+3,0.381E+3,0.177E+3,0.29420000E+1,0.18648000E+1 - ,0.36723030E+3,0.381E+3,0.178E+3,0.29420000E+1,0.19188000E+1 - ,0.35126140E+3,0.381E+3,0.179E+3,0.29420000E+1,0.98460000E+0 - ,0.34073060E+3,0.381E+3,0.180E+3,0.29420000E+1,0.19896000E+1 - ,0.53610400E+3,0.381E+3,0.181E+3,0.29420000E+1,0.92670000E+0 - ,0.49251500E+3,0.381E+3,0.182E+3,0.29420000E+1,0.93830000E+0 - ,0.47966590E+3,0.381E+3,0.183E+3,0.29420000E+1,0.98200000E+0 - ,0.46803600E+3,0.381E+3,0.184E+3,0.29420000E+1,0.98150000E+0 - ,0.43913860E+3,0.381E+3,0.185E+3,0.29420000E+1,0.99540000E+0 - ,0.55539950E+3,0.381E+3,0.187E+3,0.29420000E+1,0.97050000E+0 - ,0.10170070E+4,0.381E+3,0.188E+3,0.29420000E+1,0.96620000E+0 - ,0.59069510E+3,0.381E+3,0.189E+3,0.29420000E+1,0.29070000E+1 - ,0.67732330E+3,0.381E+3,0.190E+3,0.29420000E+1,0.28844000E+1 - ,0.60753220E+3,0.381E+3,0.191E+3,0.29420000E+1,0.28738000E+1 - ,0.53986600E+3,0.381E+3,0.192E+3,0.29420000E+1,0.28878000E+1 - ,0.52021880E+3,0.381E+3,0.193E+3,0.29420000E+1,0.29095000E+1 - ,0.61673560E+3,0.381E+3,0.194E+3,0.29420000E+1,0.19209000E+1 - ,0.14507840E+3,0.381E+3,0.204E+3,0.29420000E+1,0.19697000E+1 - ,0.14327430E+3,0.381E+3,0.205E+3,0.29420000E+1,0.19441000E+1 - ,0.10636560E+3,0.381E+3,0.206E+3,0.29420000E+1,0.19985000E+1 - ,0.85946800E+2,0.381E+3,0.207E+3,0.29420000E+1,0.20143000E+1 - ,0.59722700E+2,0.381E+3,0.208E+3,0.29420000E+1,0.19887000E+1 - ,0.25519400E+3,0.381E+3,0.212E+3,0.29420000E+1,0.19496000E+1 - ,0.30808810E+3,0.381E+3,0.213E+3,0.29420000E+1,0.19311000E+1 - ,0.29753400E+3,0.381E+3,0.214E+3,0.29420000E+1,0.19435000E+1 - ,0.26049720E+3,0.381E+3,0.215E+3,0.29420000E+1,0.20102000E+1 - ,0.22070250E+3,0.381E+3,0.216E+3,0.29420000E+1,0.19903000E+1 - ,0.35843680E+3,0.381E+3,0.220E+3,0.29420000E+1,0.19349000E+1 - ,0.34620560E+3,0.381E+3,0.221E+3,0.29420000E+1,0.28999000E+1 - ,0.35064040E+3,0.381E+3,0.222E+3,0.29420000E+1,0.38675000E+1 - ,0.32104220E+3,0.381E+3,0.223E+3,0.29420000E+1,0.29110000E+1 - ,0.24431950E+3,0.381E+3,0.224E+3,0.29420000E+1,0.10619100E+2 - ,0.21030300E+3,0.381E+3,0.225E+3,0.29420000E+1,0.98849000E+1 - ,0.20632120E+3,0.381E+3,0.226E+3,0.29420000E+1,0.91376000E+1 - ,0.23960260E+3,0.381E+3,0.227E+3,0.29420000E+1,0.29263000E+1 - ,0.22381460E+3,0.381E+3,0.228E+3,0.29420000E+1,0.65458000E+1 - ,0.31290410E+3,0.381E+3,0.231E+3,0.29420000E+1,0.19315000E+1 - ,0.33107290E+3,0.381E+3,0.232E+3,0.29420000E+1,0.19447000E+1 - ,0.30565610E+3,0.381E+3,0.233E+3,0.29420000E+1,0.19793000E+1 - ,0.28580050E+3,0.381E+3,0.234E+3,0.29420000E+1,0.19812000E+1 - ,0.42995510E+3,0.381E+3,0.238E+3,0.29420000E+1,0.19143000E+1 - ,0.41647270E+3,0.381E+3,0.239E+3,0.29420000E+1,0.28903000E+1 - ,0.42087950E+3,0.381E+3,0.240E+3,0.29420000E+1,0.39106000E+1 - ,0.40706770E+3,0.381E+3,0.241E+3,0.29420000E+1,0.29225000E+1 - ,0.36222600E+3,0.381E+3,0.242E+3,0.29420000E+1,0.11055600E+2 - ,0.32139710E+3,0.381E+3,0.243E+3,0.29420000E+1,0.95402000E+1 - ,0.30435760E+3,0.381E+3,0.244E+3,0.29420000E+1,0.88895000E+1 - ,0.30856230E+3,0.381E+3,0.245E+3,0.29420000E+1,0.29696000E+1 - ,0.32173420E+3,0.381E+3,0.246E+3,0.29420000E+1,0.57095000E+1 - ,0.40490970E+3,0.381E+3,0.249E+3,0.29420000E+1,0.19378000E+1 - ,0.43980180E+3,0.381E+3,0.250E+3,0.29420000E+1,0.19505000E+1 - ,0.41670500E+3,0.381E+3,0.251E+3,0.29420000E+1,0.19523000E+1 - ,0.40341630E+3,0.381E+3,0.252E+3,0.29420000E+1,0.19639000E+1 - ,0.52107880E+3,0.381E+3,0.256E+3,0.29420000E+1,0.18467000E+1 - ,0.54160900E+3,0.381E+3,0.257E+3,0.29420000E+1,0.29175000E+1 - ,0.40413150E+3,0.381E+3,0.272E+3,0.29420000E+1,0.38840000E+1 - ,0.42132440E+3,0.381E+3,0.273E+3,0.29420000E+1,0.28988000E+1 - ,0.39364640E+3,0.381E+3,0.274E+3,0.29420000E+1,0.10915300E+2 - ,0.35924180E+3,0.381E+3,0.275E+3,0.29420000E+1,0.98054000E+1 - ,0.33923690E+3,0.381E+3,0.276E+3,0.29420000E+1,0.91527000E+1 - ,0.34453850E+3,0.381E+3,0.277E+3,0.29420000E+1,0.29424000E+1 - ,0.36204930E+3,0.381E+3,0.278E+3,0.29420000E+1,0.66669000E+1 - ,0.43455430E+3,0.381E+3,0.281E+3,0.29420000E+1,0.19302000E+1 - ,0.45916510E+3,0.381E+3,0.282E+3,0.29420000E+1,0.19356000E+1 - ,0.46885050E+3,0.381E+3,0.283E+3,0.29420000E+1,0.19655000E+1 - ,0.46635820E+3,0.381E+3,0.284E+3,0.29420000E+1,0.19639000E+1 - ,0.57392320E+3,0.381E+3,0.288E+3,0.29420000E+1,0.18075000E+1 - ,0.11015230E+3,0.381E+3,0.305E+3,0.29420000E+1,0.29128000E+1 - ,0.99617500E+2,0.381E+3,0.306E+3,0.29420000E+1,0.29987000E+1 - ,0.75930400E+2,0.381E+3,0.307E+3,0.29420000E+1,0.29903000E+1 - ,0.24251390E+3,0.381E+3,0.313E+3,0.29420000E+1,0.29146000E+1 - ,0.28970710E+3,0.381E+3,0.314E+3,0.29420000E+1,0.29407000E+1 - ,0.24238610E+3,0.381E+3,0.315E+3,0.29420000E+1,0.29859000E+1 - ,0.21463710E+3,0.381E+3,0.327E+3,0.29420000E+1,0.77785000E+1 - ,0.23384620E+3,0.381E+3,0.328E+3,0.29420000E+1,0.62918000E+1 - ,0.25833420E+3,0.381E+3,0.331E+3,0.29420000E+1,0.29233000E+1 - ,0.29794670E+3,0.381E+3,0.332E+3,0.29420000E+1,0.29186000E+1 - ,0.29487070E+3,0.381E+3,0.333E+3,0.29420000E+1,0.29709000E+1 - ,0.34780090E+3,0.381E+3,0.349E+3,0.29420000E+1,0.29353000E+1 - ,0.39805300E+3,0.381E+3,0.350E+3,0.29420000E+1,0.29259000E+1 - ,0.40261790E+3,0.381E+3,0.351E+3,0.29420000E+1,0.29315000E+1 - ,0.38960690E+3,0.381E+3,0.381E+3,0.29420000E+1,0.29420000E+1 - ,0.39201800E+2,0.382E+3,0.100E+1,0.29081000E+1,0.91180000E+0 - ,0.26154200E+2,0.382E+3,0.200E+1,0.29081000E+1,0.00000000E+0 - ,0.59230750E+3,0.382E+3,0.300E+1,0.29081000E+1,0.00000000E+0 - ,0.34659360E+3,0.382E+3,0.400E+1,0.29081000E+1,0.00000000E+0 - ,0.23511450E+3,0.382E+3,0.500E+1,0.29081000E+1,0.00000000E+0 - ,0.15978570E+3,0.382E+3,0.600E+1,0.29081000E+1,0.00000000E+0 - ,0.11231150E+3,0.382E+3,0.700E+1,0.29081000E+1,0.00000000E+0 - ,0.85390200E+2,0.382E+3,0.800E+1,0.29081000E+1,0.00000000E+0 - ,0.64954800E+2,0.382E+3,0.900E+1,0.29081000E+1,0.00000000E+0 - ,0.50154300E+2,0.382E+3,0.100E+2,0.29081000E+1,0.00000000E+0 - ,0.70906070E+3,0.382E+3,0.110E+2,0.29081000E+1,0.00000000E+0 - ,0.55115190E+3,0.382E+3,0.120E+2,0.29081000E+1,0.00000000E+0 - ,0.50990250E+3,0.382E+3,0.130E+2,0.29081000E+1,0.00000000E+0 - ,0.40375640E+3,0.382E+3,0.140E+2,0.29081000E+1,0.00000000E+0 - ,0.31618250E+3,0.382E+3,0.150E+2,0.29081000E+1,0.00000000E+0 - ,0.26318820E+3,0.382E+3,0.160E+2,0.29081000E+1,0.00000000E+0 - ,0.21563940E+3,0.382E+3,0.170E+2,0.29081000E+1,0.00000000E+0 - ,0.17693360E+3,0.382E+3,0.180E+2,0.29081000E+1,0.00000000E+0 - ,0.11602124E+4,0.382E+3,0.190E+2,0.29081000E+1,0.00000000E+0 - ,0.96482980E+3,0.382E+3,0.200E+2,0.29081000E+1,0.00000000E+0 - ,0.79848900E+3,0.382E+3,0.210E+2,0.29081000E+1,0.00000000E+0 - ,0.77240680E+3,0.382E+3,0.220E+2,0.29081000E+1,0.00000000E+0 - ,0.70804470E+3,0.382E+3,0.230E+2,0.29081000E+1,0.00000000E+0 - ,0.55813800E+3,0.382E+3,0.240E+2,0.29081000E+1,0.00000000E+0 - ,0.61052950E+3,0.382E+3,0.250E+2,0.29081000E+1,0.00000000E+0 - ,0.47961190E+3,0.382E+3,0.260E+2,0.29081000E+1,0.00000000E+0 - ,0.50914700E+3,0.382E+3,0.270E+2,0.29081000E+1,0.00000000E+0 - ,0.52395450E+3,0.382E+3,0.280E+2,0.29081000E+1,0.00000000E+0 - ,0.40203690E+3,0.382E+3,0.290E+2,0.29081000E+1,0.00000000E+0 - ,0.41376860E+3,0.382E+3,0.300E+2,0.29081000E+1,0.00000000E+0 - ,0.48932470E+3,0.382E+3,0.310E+2,0.29081000E+1,0.00000000E+0 - ,0.43309510E+3,0.382E+3,0.320E+2,0.29081000E+1,0.00000000E+0 - ,0.37065200E+3,0.382E+3,0.330E+2,0.29081000E+1,0.00000000E+0 - ,0.33332050E+3,0.382E+3,0.340E+2,0.29081000E+1,0.00000000E+0 - ,0.29238780E+3,0.382E+3,0.350E+2,0.29081000E+1,0.00000000E+0 - ,0.25487000E+3,0.382E+3,0.360E+2,0.29081000E+1,0.00000000E+0 - ,0.13013911E+4,0.382E+3,0.370E+2,0.29081000E+1,0.00000000E+0 - ,0.11493369E+4,0.382E+3,0.380E+2,0.29081000E+1,0.00000000E+0 - ,0.10098313E+4,0.382E+3,0.390E+2,0.29081000E+1,0.00000000E+0 - ,0.90933820E+3,0.382E+3,0.400E+2,0.29081000E+1,0.00000000E+0 - ,0.83029650E+3,0.382E+3,0.410E+2,0.29081000E+1,0.00000000E+0 - ,0.64261650E+3,0.382E+3,0.420E+2,0.29081000E+1,0.00000000E+0 - ,0.71635260E+3,0.382E+3,0.430E+2,0.29081000E+1,0.00000000E+0 - ,0.54725930E+3,0.382E+3,0.440E+2,0.29081000E+1,0.00000000E+0 - ,0.59800230E+3,0.382E+3,0.450E+2,0.29081000E+1,0.00000000E+0 - ,0.55503560E+3,0.382E+3,0.460E+2,0.29081000E+1,0.00000000E+0 - ,0.46292020E+3,0.382E+3,0.470E+2,0.29081000E+1,0.00000000E+0 - ,0.48966130E+3,0.382E+3,0.480E+2,0.29081000E+1,0.00000000E+0 - ,0.61279550E+3,0.382E+3,0.490E+2,0.29081000E+1,0.00000000E+0 - ,0.56824370E+3,0.382E+3,0.500E+2,0.29081000E+1,0.00000000E+0 - ,0.50783300E+3,0.382E+3,0.510E+2,0.29081000E+1,0.00000000E+0 - ,0.47198620E+3,0.382E+3,0.520E+2,0.29081000E+1,0.00000000E+0 - ,0.42758360E+3,0.382E+3,0.530E+2,0.29081000E+1,0.00000000E+0 - ,0.38515720E+3,0.382E+3,0.540E+2,0.29081000E+1,0.00000000E+0 - ,0.15855821E+4,0.382E+3,0.550E+2,0.29081000E+1,0.00000000E+0 - ,0.14639079E+4,0.382E+3,0.560E+2,0.29081000E+1,0.00000000E+0 - ,0.12899128E+4,0.382E+3,0.570E+2,0.29081000E+1,0.00000000E+0 - ,0.59969740E+3,0.382E+3,0.580E+2,0.29081000E+1,0.27991000E+1 - ,0.12986324E+4,0.382E+3,0.590E+2,0.29081000E+1,0.00000000E+0 - ,0.12476103E+4,0.382E+3,0.600E+2,0.29081000E+1,0.00000000E+0 - ,0.12164825E+4,0.382E+3,0.610E+2,0.29081000E+1,0.00000000E+0 - ,0.11878330E+4,0.382E+3,0.620E+2,0.29081000E+1,0.00000000E+0 - ,0.11624311E+4,0.382E+3,0.630E+2,0.29081000E+1,0.00000000E+0 - ,0.91733060E+3,0.382E+3,0.640E+2,0.29081000E+1,0.00000000E+0 - ,0.10280579E+4,0.382E+3,0.650E+2,0.29081000E+1,0.00000000E+0 - ,0.99208130E+3,0.382E+3,0.660E+2,0.29081000E+1,0.00000000E+0 - ,0.10492180E+4,0.382E+3,0.670E+2,0.29081000E+1,0.00000000E+0 - ,0.10270231E+4,0.382E+3,0.680E+2,0.29081000E+1,0.00000000E+0 - ,0.10070473E+4,0.382E+3,0.690E+2,0.29081000E+1,0.00000000E+0 - ,0.99511980E+3,0.382E+3,0.700E+2,0.29081000E+1,0.00000000E+0 - ,0.84045040E+3,0.382E+3,0.710E+2,0.29081000E+1,0.00000000E+0 - ,0.82879200E+3,0.382E+3,0.720E+2,0.29081000E+1,0.00000000E+0 - ,0.75780230E+3,0.382E+3,0.730E+2,0.29081000E+1,0.00000000E+0 - ,0.64104200E+3,0.382E+3,0.740E+2,0.29081000E+1,0.00000000E+0 - ,0.65256880E+3,0.382E+3,0.750E+2,0.29081000E+1,0.00000000E+0 - ,0.59243330E+3,0.382E+3,0.760E+2,0.29081000E+1,0.00000000E+0 - ,0.54333580E+3,0.382E+3,0.770E+2,0.29081000E+1,0.00000000E+0 - ,0.45219510E+3,0.382E+3,0.780E+2,0.29081000E+1,0.00000000E+0 - ,0.42282310E+3,0.382E+3,0.790E+2,0.29081000E+1,0.00000000E+0 - ,0.43514150E+3,0.382E+3,0.800E+2,0.29081000E+1,0.00000000E+0 - ,0.62994840E+3,0.382E+3,0.810E+2,0.29081000E+1,0.00000000E+0 - ,0.61718100E+3,0.382E+3,0.820E+2,0.29081000E+1,0.00000000E+0 - ,0.56851380E+3,0.382E+3,0.830E+2,0.29081000E+1,0.00000000E+0 - ,0.54299390E+3,0.382E+3,0.840E+2,0.29081000E+1,0.00000000E+0 - ,0.50202460E+3,0.382E+3,0.850E+2,0.29081000E+1,0.00000000E+0 - ,0.46091780E+3,0.382E+3,0.860E+2,0.29081000E+1,0.00000000E+0 - ,0.15008218E+4,0.382E+3,0.870E+2,0.29081000E+1,0.00000000E+0 - ,0.14498449E+4,0.382E+3,0.880E+2,0.29081000E+1,0.00000000E+0 - ,0.12851719E+4,0.382E+3,0.890E+2,0.29081000E+1,0.00000000E+0 - ,0.11587220E+4,0.382E+3,0.900E+2,0.29081000E+1,0.00000000E+0 - ,0.11488988E+4,0.382E+3,0.910E+2,0.29081000E+1,0.00000000E+0 - ,0.11125743E+4,0.382E+3,0.920E+2,0.29081000E+1,0.00000000E+0 - ,0.11434030E+4,0.382E+3,0.930E+2,0.29081000E+1,0.00000000E+0 - ,0.11076634E+4,0.382E+3,0.940E+2,0.29081000E+1,0.00000000E+0 - ,0.62853000E+2,0.382E+3,0.101E+3,0.29081000E+1,0.00000000E+0 - ,0.20170300E+3,0.382E+3,0.103E+3,0.29081000E+1,0.98650000E+0 - ,0.25762390E+3,0.382E+3,0.104E+3,0.29081000E+1,0.98080000E+0 - ,0.19809520E+3,0.382E+3,0.105E+3,0.29081000E+1,0.97060000E+0 - ,0.14988210E+3,0.382E+3,0.106E+3,0.29081000E+1,0.98680000E+0 - ,0.10475870E+3,0.382E+3,0.107E+3,0.29081000E+1,0.99440000E+0 - ,0.76663400E+2,0.382E+3,0.108E+3,0.29081000E+1,0.99250000E+0 - ,0.53088800E+2,0.382E+3,0.109E+3,0.29081000E+1,0.99820000E+0 - ,0.29465140E+3,0.382E+3,0.111E+3,0.29081000E+1,0.96840000E+0 - ,0.45526290E+3,0.382E+3,0.112E+3,0.29081000E+1,0.96280000E+0 - ,0.46254200E+3,0.382E+3,0.113E+3,0.29081000E+1,0.96480000E+0 - ,0.37345290E+3,0.382E+3,0.114E+3,0.29081000E+1,0.95070000E+0 - ,0.30696940E+3,0.382E+3,0.115E+3,0.29081000E+1,0.99470000E+0 - ,0.26028570E+3,0.382E+3,0.116E+3,0.29081000E+1,0.99480000E+0 - ,0.21340440E+3,0.382E+3,0.117E+3,0.29081000E+1,0.99720000E+0 - ,0.40761910E+3,0.382E+3,0.119E+3,0.29081000E+1,0.97670000E+0 - ,0.77230000E+3,0.382E+3,0.120E+3,0.29081000E+1,0.98310000E+0 - ,0.40917160E+3,0.382E+3,0.121E+3,0.29081000E+1,0.18627000E+1 - ,0.39511390E+3,0.382E+3,0.122E+3,0.29081000E+1,0.18299000E+1 - ,0.38722670E+3,0.382E+3,0.123E+3,0.29081000E+1,0.19138000E+1 - ,0.38350230E+3,0.382E+3,0.124E+3,0.29081000E+1,0.18269000E+1 - ,0.35362940E+3,0.382E+3,0.125E+3,0.29081000E+1,0.16406000E+1 - ,0.32753820E+3,0.382E+3,0.126E+3,0.29081000E+1,0.16483000E+1 - ,0.31249710E+3,0.382E+3,0.127E+3,0.29081000E+1,0.17149000E+1 - ,0.30547070E+3,0.382E+3,0.128E+3,0.29081000E+1,0.17937000E+1 - ,0.30136610E+3,0.382E+3,0.129E+3,0.29081000E+1,0.95760000E+0 - ,0.28355320E+3,0.382E+3,0.130E+3,0.29081000E+1,0.19419000E+1 - ,0.46002380E+3,0.382E+3,0.131E+3,0.29081000E+1,0.96010000E+0 - ,0.40553300E+3,0.382E+3,0.132E+3,0.29081000E+1,0.94340000E+0 - ,0.36444410E+3,0.382E+3,0.133E+3,0.29081000E+1,0.98890000E+0 - ,0.33344240E+3,0.382E+3,0.134E+3,0.29081000E+1,0.99010000E+0 - ,0.29439140E+3,0.382E+3,0.135E+3,0.29081000E+1,0.99740000E+0 - ,0.48683630E+3,0.382E+3,0.137E+3,0.29081000E+1,0.97380000E+0 - ,0.93949220E+3,0.382E+3,0.138E+3,0.29081000E+1,0.98010000E+0 - ,0.72246140E+3,0.382E+3,0.139E+3,0.29081000E+1,0.19153000E+1 - ,0.54104620E+3,0.382E+3,0.140E+3,0.29081000E+1,0.19355000E+1 - ,0.54639880E+3,0.382E+3,0.141E+3,0.29081000E+1,0.19545000E+1 - ,0.50999070E+3,0.382E+3,0.142E+3,0.29081000E+1,0.19420000E+1 - ,0.57035510E+3,0.382E+3,0.143E+3,0.29081000E+1,0.16682000E+1 - ,0.44558690E+3,0.382E+3,0.144E+3,0.29081000E+1,0.18584000E+1 - ,0.41703620E+3,0.382E+3,0.145E+3,0.29081000E+1,0.19003000E+1 - ,0.38750290E+3,0.382E+3,0.146E+3,0.29081000E+1,0.18630000E+1 - ,0.37479630E+3,0.382E+3,0.147E+3,0.29081000E+1,0.96790000E+0 - ,0.37128680E+3,0.382E+3,0.148E+3,0.29081000E+1,0.19539000E+1 - ,0.58473500E+3,0.382E+3,0.149E+3,0.29081000E+1,0.96330000E+0 - ,0.53055010E+3,0.382E+3,0.150E+3,0.29081000E+1,0.95140000E+0 - ,0.49790060E+3,0.382E+3,0.151E+3,0.29081000E+1,0.97490000E+0 - ,0.47168750E+3,0.382E+3,0.152E+3,0.29081000E+1,0.98110000E+0 - ,0.43157390E+3,0.382E+3,0.153E+3,0.29081000E+1,0.99680000E+0 - ,0.57682000E+3,0.382E+3,0.155E+3,0.29081000E+1,0.99090000E+0 - ,0.12167162E+4,0.382E+3,0.156E+3,0.29081000E+1,0.97970000E+0 - ,0.91391750E+3,0.382E+3,0.157E+3,0.29081000E+1,0.19373000E+1 - ,0.58172760E+3,0.382E+3,0.159E+3,0.29081000E+1,0.29425000E+1 - ,0.56972170E+3,0.382E+3,0.160E+3,0.29081000E+1,0.29455000E+1 - ,0.55175870E+3,0.382E+3,0.161E+3,0.29081000E+1,0.29413000E+1 - ,0.55422640E+3,0.382E+3,0.162E+3,0.29081000E+1,0.29300000E+1 - ,0.53359620E+3,0.382E+3,0.163E+3,0.29081000E+1,0.18286000E+1 - ,0.55760720E+3,0.382E+3,0.164E+3,0.29081000E+1,0.28732000E+1 - ,0.52397000E+3,0.382E+3,0.165E+3,0.29081000E+1,0.29086000E+1 - ,0.53273770E+3,0.382E+3,0.166E+3,0.29081000E+1,0.28965000E+1 - ,0.49751580E+3,0.382E+3,0.167E+3,0.29081000E+1,0.29242000E+1 - ,0.48340880E+3,0.382E+3,0.168E+3,0.29081000E+1,0.29282000E+1 - ,0.48024390E+3,0.382E+3,0.169E+3,0.29081000E+1,0.29246000E+1 - ,0.50441450E+3,0.382E+3,0.170E+3,0.29081000E+1,0.28482000E+1 - ,0.46426970E+3,0.382E+3,0.171E+3,0.29081000E+1,0.29219000E+1 - ,0.62577080E+3,0.382E+3,0.172E+3,0.29081000E+1,0.19254000E+1 - ,0.58183450E+3,0.382E+3,0.173E+3,0.29081000E+1,0.19459000E+1 - ,0.53190280E+3,0.382E+3,0.174E+3,0.29081000E+1,0.19292000E+1 - ,0.53741510E+3,0.382E+3,0.175E+3,0.29081000E+1,0.18104000E+1 - ,0.47245060E+3,0.382E+3,0.176E+3,0.29081000E+1,0.18858000E+1 - ,0.44483850E+3,0.382E+3,0.177E+3,0.29081000E+1,0.18648000E+1 - ,0.42512390E+3,0.382E+3,0.178E+3,0.29081000E+1,0.19188000E+1 - ,0.40652810E+3,0.382E+3,0.179E+3,0.29081000E+1,0.98460000E+0 - ,0.39335910E+3,0.382E+3,0.180E+3,0.29081000E+1,0.19896000E+1 - ,0.62845220E+3,0.382E+3,0.181E+3,0.29081000E+1,0.92670000E+0 - ,0.57444200E+3,0.382E+3,0.182E+3,0.29081000E+1,0.93830000E+0 - ,0.55791660E+3,0.382E+3,0.183E+3,0.29081000E+1,0.98200000E+0 - ,0.54322420E+3,0.382E+3,0.184E+3,0.29081000E+1,0.98150000E+0 - ,0.50808860E+3,0.382E+3,0.185E+3,0.29081000E+1,0.99540000E+0 - ,0.64972250E+3,0.382E+3,0.187E+3,0.29081000E+1,0.97050000E+0 - ,0.12125054E+4,0.382E+3,0.188E+3,0.29081000E+1,0.96620000E+0 - ,0.68824310E+3,0.382E+3,0.189E+3,0.29081000E+1,0.29070000E+1 - ,0.79252420E+3,0.382E+3,0.190E+3,0.29081000E+1,0.28844000E+1 - ,0.70936470E+3,0.382E+3,0.191E+3,0.29081000E+1,0.28738000E+1 - ,0.62816270E+3,0.382E+3,0.192E+3,0.29081000E+1,0.28878000E+1 - ,0.60477390E+3,0.382E+3,0.193E+3,0.29081000E+1,0.29095000E+1 - ,0.72374190E+3,0.382E+3,0.194E+3,0.29081000E+1,0.19209000E+1 - ,0.16920360E+3,0.382E+3,0.204E+3,0.29081000E+1,0.19697000E+1 - ,0.16658210E+3,0.382E+3,0.205E+3,0.29081000E+1,0.19441000E+1 - ,0.12253210E+3,0.382E+3,0.206E+3,0.29081000E+1,0.19985000E+1 - ,0.98442100E+2,0.382E+3,0.207E+3,0.29081000E+1,0.20143000E+1 - ,0.67767000E+2,0.382E+3,0.208E+3,0.29081000E+1,0.19887000E+1 - ,0.29929840E+3,0.382E+3,0.212E+3,0.29081000E+1,0.19496000E+1 - ,0.36151620E+3,0.382E+3,0.213E+3,0.29081000E+1,0.19311000E+1 - ,0.34761240E+3,0.382E+3,0.214E+3,0.29081000E+1,0.19435000E+1 - ,0.30275900E+3,0.382E+3,0.215E+3,0.29081000E+1,0.20102000E+1 - ,0.25504960E+3,0.382E+3,0.216E+3,0.29081000E+1,0.19903000E+1 - ,0.41985730E+3,0.382E+3,0.220E+3,0.29081000E+1,0.19349000E+1 - ,0.40420110E+3,0.382E+3,0.221E+3,0.29081000E+1,0.28999000E+1 - ,0.40925130E+3,0.382E+3,0.222E+3,0.29081000E+1,0.38675000E+1 - ,0.37462180E+3,0.382E+3,0.223E+3,0.29081000E+1,0.29110000E+1 - ,0.28320230E+3,0.382E+3,0.224E+3,0.29081000E+1,0.10619100E+2 - ,0.24283500E+3,0.382E+3,0.225E+3,0.29081000E+1,0.98849000E+1 - ,0.23833220E+3,0.382E+3,0.226E+3,0.29081000E+1,0.91376000E+1 - ,0.27849510E+3,0.382E+3,0.227E+3,0.29081000E+1,0.29263000E+1 - ,0.25970610E+3,0.382E+3,0.228E+3,0.29081000E+1,0.65458000E+1 - ,0.36569310E+3,0.382E+3,0.231E+3,0.29081000E+1,0.19315000E+1 - ,0.38632290E+3,0.382E+3,0.232E+3,0.29081000E+1,0.19447000E+1 - ,0.35500350E+3,0.382E+3,0.233E+3,0.29081000E+1,0.19793000E+1 - ,0.33085020E+3,0.382E+3,0.234E+3,0.29081000E+1,0.19812000E+1 - ,0.50318910E+3,0.382E+3,0.238E+3,0.29081000E+1,0.19143000E+1 - ,0.48540080E+3,0.382E+3,0.239E+3,0.29081000E+1,0.28903000E+1 - ,0.48989620E+3,0.382E+3,0.240E+3,0.29081000E+1,0.39106000E+1 - ,0.47377460E+3,0.382E+3,0.241E+3,0.29081000E+1,0.29225000E+1 - ,0.41981260E+3,0.382E+3,0.242E+3,0.29081000E+1,0.11055600E+2 - ,0.37122640E+3,0.382E+3,0.243E+3,0.29081000E+1,0.95402000E+1 - ,0.35107190E+3,0.382E+3,0.244E+3,0.29081000E+1,0.88895000E+1 - ,0.35706620E+3,0.382E+3,0.245E+3,0.29081000E+1,0.29696000E+1 - ,0.37278680E+3,0.382E+3,0.246E+3,0.29081000E+1,0.57095000E+1 - ,0.47232770E+3,0.382E+3,0.249E+3,0.29081000E+1,0.19378000E+1 - ,0.51322190E+3,0.382E+3,0.250E+3,0.29081000E+1,0.19505000E+1 - ,0.48446450E+3,0.382E+3,0.251E+3,0.29081000E+1,0.19523000E+1 - ,0.46794670E+3,0.382E+3,0.252E+3,0.29081000E+1,0.19639000E+1 - ,0.60895860E+3,0.382E+3,0.256E+3,0.29081000E+1,0.18467000E+1 - ,0.63182890E+3,0.382E+3,0.257E+3,0.29081000E+1,0.29175000E+1 - ,0.46949580E+3,0.382E+3,0.272E+3,0.29081000E+1,0.38840000E+1 - ,0.49006850E+3,0.382E+3,0.273E+3,0.29081000E+1,0.28988000E+1 - ,0.45612840E+3,0.382E+3,0.274E+3,0.29081000E+1,0.10915300E+2 - ,0.41497090E+3,0.382E+3,0.275E+3,0.29081000E+1,0.98054000E+1 - ,0.39089370E+3,0.382E+3,0.276E+3,0.29081000E+1,0.91527000E+1 - ,0.39804290E+3,0.382E+3,0.277E+3,0.29081000E+1,0.29424000E+1 - ,0.41852820E+3,0.382E+3,0.278E+3,0.29081000E+1,0.66669000E+1 - ,0.50537700E+3,0.382E+3,0.281E+3,0.29081000E+1,0.19302000E+1 - ,0.53408270E+3,0.382E+3,0.282E+3,0.29081000E+1,0.19356000E+1 - ,0.54469760E+3,0.382E+3,0.283E+3,0.29081000E+1,0.19655000E+1 - ,0.54102390E+3,0.382E+3,0.284E+3,0.29081000E+1,0.19639000E+1 - ,0.67046940E+3,0.382E+3,0.288E+3,0.29081000E+1,0.18075000E+1 - ,0.12713380E+3,0.382E+3,0.305E+3,0.29081000E+1,0.29128000E+1 - ,0.11469320E+3,0.382E+3,0.306E+3,0.29081000E+1,0.29987000E+1 - ,0.86806100E+2,0.382E+3,0.307E+3,0.29081000E+1,0.29903000E+1 - ,0.28266470E+3,0.382E+3,0.313E+3,0.29081000E+1,0.29146000E+1 - ,0.33866010E+3,0.382E+3,0.314E+3,0.29081000E+1,0.29407000E+1 - ,0.28113750E+3,0.382E+3,0.315E+3,0.29081000E+1,0.29859000E+1 - ,0.24847100E+3,0.382E+3,0.327E+3,0.29081000E+1,0.77785000E+1 - ,0.27223020E+3,0.382E+3,0.328E+3,0.29081000E+1,0.62918000E+1 - ,0.30012720E+3,0.382E+3,0.331E+3,0.29081000E+1,0.29233000E+1 - ,0.34667580E+3,0.382E+3,0.332E+3,0.29081000E+1,0.29186000E+1 - ,0.34212760E+3,0.382E+3,0.333E+3,0.29081000E+1,0.29709000E+1 - ,0.40346440E+3,0.382E+3,0.349E+3,0.29081000E+1,0.29353000E+1 - ,0.46298340E+3,0.382E+3,0.350E+3,0.29081000E+1,0.29259000E+1 - ,0.46750670E+3,0.382E+3,0.351E+3,0.29081000E+1,0.29315000E+1 - ,0.45116740E+3,0.382E+3,0.381E+3,0.29081000E+1,0.29420000E+1 - ,0.52418400E+3,0.382E+3,0.382E+3,0.29081000E+1,0.29081000E+1 - ,0.39743800E+2,0.383E+3,0.100E+1,0.29500000E+1,0.91180000E+0 - ,0.26627800E+2,0.383E+3,0.200E+1,0.29500000E+1,0.00000000E+0 - ,0.58321980E+3,0.383E+3,0.300E+1,0.29500000E+1,0.00000000E+0 - ,0.34623830E+3,0.383E+3,0.400E+1,0.29500000E+1,0.00000000E+0 - ,0.23662000E+3,0.383E+3,0.500E+1,0.29500000E+1,0.00000000E+0 - ,0.16159220E+3,0.383E+3,0.600E+1,0.29500000E+1,0.00000000E+0 - ,0.11393640E+3,0.383E+3,0.700E+1,0.29500000E+1,0.00000000E+0 - ,0.86791400E+2,0.383E+3,0.800E+1,0.29500000E+1,0.00000000E+0 - ,0.66113100E+2,0.383E+3,0.900E+1,0.29500000E+1,0.00000000E+0 - ,0.51096100E+2,0.383E+3,0.100E+2,0.29500000E+1,0.00000000E+0 - ,0.69876860E+3,0.383E+3,0.110E+2,0.29500000E+1,0.00000000E+0 - ,0.54919660E+3,0.383E+3,0.120E+2,0.29500000E+1,0.00000000E+0 - ,0.51016460E+3,0.383E+3,0.130E+2,0.29500000E+1,0.00000000E+0 - ,0.40605930E+3,0.383E+3,0.140E+2,0.29500000E+1,0.00000000E+0 - ,0.31927240E+3,0.383E+3,0.150E+2,0.29500000E+1,0.00000000E+0 - ,0.26639090E+3,0.383E+3,0.160E+2,0.29500000E+1,0.00000000E+0 - ,0.21872080E+3,0.383E+3,0.170E+2,0.29500000E+1,0.00000000E+0 - ,0.17975600E+3,0.383E+3,0.180E+2,0.29500000E+1,0.00000000E+0 - ,0.11409307E+4,0.383E+3,0.190E+2,0.29500000E+1,0.00000000E+0 - ,0.95709360E+3,0.383E+3,0.200E+2,0.29500000E+1,0.00000000E+0 - ,0.79362090E+3,0.383E+3,0.210E+2,0.29500000E+1,0.00000000E+0 - ,0.76903960E+3,0.383E+3,0.220E+2,0.29500000E+1,0.00000000E+0 - ,0.70568530E+3,0.383E+3,0.230E+2,0.29500000E+1,0.00000000E+0 - ,0.55635380E+3,0.383E+3,0.240E+2,0.29500000E+1,0.00000000E+0 - ,0.60939430E+3,0.383E+3,0.250E+2,0.29500000E+1,0.00000000E+0 - ,0.47886060E+3,0.383E+3,0.260E+2,0.29500000E+1,0.00000000E+0 - ,0.50944850E+3,0.383E+3,0.270E+2,0.29500000E+1,0.00000000E+0 - ,0.52372160E+3,0.383E+3,0.280E+2,0.29500000E+1,0.00000000E+0 - ,0.40186070E+3,0.383E+3,0.290E+2,0.29500000E+1,0.00000000E+0 - ,0.41492100E+3,0.383E+3,0.300E+2,0.29500000E+1,0.00000000E+0 - ,0.49028010E+3,0.383E+3,0.310E+2,0.29500000E+1,0.00000000E+0 - ,0.43566600E+3,0.383E+3,0.320E+2,0.29500000E+1,0.00000000E+0 - ,0.37411390E+3,0.383E+3,0.330E+2,0.29500000E+1,0.00000000E+0 - ,0.33709110E+3,0.383E+3,0.340E+2,0.29500000E+1,0.00000000E+0 - ,0.29625040E+3,0.383E+3,0.350E+2,0.29500000E+1,0.00000000E+0 - ,0.25864890E+3,0.383E+3,0.360E+2,0.29500000E+1,0.00000000E+0 - ,0.12807871E+4,0.383E+3,0.370E+2,0.29500000E+1,0.00000000E+0 - ,0.11397642E+4,0.383E+3,0.380E+2,0.29500000E+1,0.00000000E+0 - ,0.10048393E+4,0.383E+3,0.390E+2,0.29500000E+1,0.00000000E+0 - ,0.90672570E+3,0.383E+3,0.400E+2,0.29500000E+1,0.00000000E+0 - ,0.82902620E+3,0.383E+3,0.410E+2,0.29500000E+1,0.00000000E+0 - ,0.64306490E+3,0.383E+3,0.420E+2,0.29500000E+1,0.00000000E+0 - ,0.71626640E+3,0.383E+3,0.430E+2,0.29500000E+1,0.00000000E+0 - ,0.54850410E+3,0.383E+3,0.440E+2,0.29500000E+1,0.00000000E+0 - ,0.59937630E+3,0.383E+3,0.450E+2,0.29500000E+1,0.00000000E+0 - ,0.55674870E+3,0.383E+3,0.460E+2,0.29500000E+1,0.00000000E+0 - ,0.46407170E+3,0.383E+3,0.470E+2,0.29500000E+1,0.00000000E+0 - ,0.49165550E+3,0.383E+3,0.480E+2,0.29500000E+1,0.00000000E+0 - ,0.61377870E+3,0.383E+3,0.490E+2,0.29500000E+1,0.00000000E+0 - ,0.57101580E+3,0.383E+3,0.500E+2,0.29500000E+1,0.00000000E+0 - ,0.51187060E+3,0.383E+3,0.510E+2,0.29500000E+1,0.00000000E+0 - ,0.47658080E+3,0.383E+3,0.520E+2,0.29500000E+1,0.00000000E+0 - ,0.43252650E+3,0.383E+3,0.530E+2,0.29500000E+1,0.00000000E+0 - ,0.39023930E+3,0.383E+3,0.540E+2,0.29500000E+1,0.00000000E+0 - ,0.15608728E+4,0.383E+3,0.550E+2,0.29500000E+1,0.00000000E+0 - ,0.14501356E+4,0.383E+3,0.560E+2,0.29500000E+1,0.00000000E+0 - ,0.12821300E+4,0.383E+3,0.570E+2,0.29500000E+1,0.00000000E+0 - ,0.60410230E+3,0.383E+3,0.580E+2,0.29500000E+1,0.27991000E+1 - ,0.12878172E+4,0.383E+3,0.590E+2,0.29500000E+1,0.00000000E+0 - ,0.12378955E+4,0.383E+3,0.600E+2,0.29500000E+1,0.00000000E+0 - ,0.12071956E+4,0.383E+3,0.610E+2,0.29500000E+1,0.00000000E+0 - ,0.11789199E+4,0.383E+3,0.620E+2,0.29500000E+1,0.00000000E+0 - ,0.11538573E+4,0.383E+3,0.630E+2,0.29500000E+1,0.00000000E+0 - ,0.91395230E+3,0.383E+3,0.640E+2,0.29500000E+1,0.00000000E+0 - ,0.10187768E+4,0.383E+3,0.650E+2,0.29500000E+1,0.00000000E+0 - ,0.98379020E+3,0.383E+3,0.660E+2,0.29500000E+1,0.00000000E+0 - ,0.10423525E+4,0.383E+3,0.670E+2,0.29500000E+1,0.00000000E+0 - ,0.10203958E+4,0.383E+3,0.680E+2,0.29500000E+1,0.00000000E+0 - ,0.10006811E+4,0.383E+3,0.690E+2,0.29500000E+1,0.00000000E+0 - ,0.98867650E+3,0.383E+3,0.700E+2,0.29500000E+1,0.00000000E+0 - ,0.83714090E+3,0.383E+3,0.710E+2,0.29500000E+1,0.00000000E+0 - ,0.82836360E+3,0.383E+3,0.720E+2,0.29500000E+1,0.00000000E+0 - ,0.75891210E+3,0.383E+3,0.730E+2,0.29500000E+1,0.00000000E+0 - ,0.64292980E+3,0.383E+3,0.740E+2,0.29500000E+1,0.00000000E+0 - ,0.65498530E+3,0.383E+3,0.750E+2,0.29500000E+1,0.00000000E+0 - ,0.59558850E+3,0.383E+3,0.760E+2,0.29500000E+1,0.00000000E+0 - ,0.54692440E+3,0.383E+3,0.770E+2,0.29500000E+1,0.00000000E+0 - ,0.45573730E+3,0.383E+3,0.780E+2,0.29500000E+1,0.00000000E+0 - ,0.42633520E+3,0.383E+3,0.790E+2,0.29500000E+1,0.00000000E+0 - ,0.43904410E+3,0.383E+3,0.800E+2,0.29500000E+1,0.00000000E+0 - ,0.63141780E+3,0.383E+3,0.810E+2,0.29500000E+1,0.00000000E+0 - ,0.62017920E+3,0.383E+3,0.820E+2,0.29500000E+1,0.00000000E+0 - ,0.57284430E+3,0.383E+3,0.830E+2,0.29500000E+1,0.00000000E+0 - ,0.54797510E+3,0.383E+3,0.840E+2,0.29500000E+1,0.00000000E+0 - ,0.50752580E+3,0.383E+3,0.850E+2,0.29500000E+1,0.00000000E+0 - ,0.46668040E+3,0.383E+3,0.860E+2,0.29500000E+1,0.00000000E+0 - ,0.14815226E+4,0.383E+3,0.870E+2,0.29500000E+1,0.00000000E+0 - ,0.14387553E+4,0.383E+3,0.880E+2,0.29500000E+1,0.00000000E+0 - ,0.12792885E+4,0.383E+3,0.890E+2,0.29500000E+1,0.00000000E+0 - ,0.11574185E+4,0.383E+3,0.900E+2,0.29500000E+1,0.00000000E+0 - ,0.11456007E+4,0.383E+3,0.910E+2,0.29500000E+1,0.00000000E+0 - ,0.11094582E+4,0.383E+3,0.920E+2,0.29500000E+1,0.00000000E+0 - ,0.11376821E+4,0.383E+3,0.930E+2,0.29500000E+1,0.00000000E+0 - ,0.11025605E+4,0.383E+3,0.940E+2,0.29500000E+1,0.00000000E+0 - ,0.63497600E+2,0.383E+3,0.101E+3,0.29500000E+1,0.00000000E+0 - ,0.20170420E+3,0.383E+3,0.103E+3,0.29500000E+1,0.98650000E+0 - ,0.25799550E+3,0.383E+3,0.104E+3,0.29500000E+1,0.98080000E+0 - ,0.19963690E+3,0.383E+3,0.105E+3,0.29500000E+1,0.97060000E+0 - ,0.15154880E+3,0.383E+3,0.106E+3,0.29500000E+1,0.98680000E+0 - ,0.10626960E+3,0.383E+3,0.107E+3,0.29500000E+1,0.99440000E+0 - ,0.77952800E+2,0.383E+3,0.108E+3,0.29500000E+1,0.99250000E+0 - ,0.54119700E+2,0.383E+3,0.109E+3,0.29500000E+1,0.99820000E+0 - ,0.29420730E+3,0.383E+3,0.111E+3,0.29500000E+1,0.96840000E+0 - ,0.45432800E+3,0.383E+3,0.112E+3,0.29500000E+1,0.96280000E+0 - ,0.46321330E+3,0.383E+3,0.113E+3,0.29500000E+1,0.96480000E+0 - ,0.37584780E+3,0.383E+3,0.114E+3,0.29500000E+1,0.95070000E+0 - ,0.31000460E+3,0.383E+3,0.115E+3,0.29500000E+1,0.99470000E+0 - ,0.26343270E+3,0.383E+3,0.116E+3,0.29500000E+1,0.99480000E+0 - ,0.21644080E+3,0.383E+3,0.117E+3,0.29500000E+1,0.99720000E+0 - ,0.40808240E+3,0.383E+3,0.119E+3,0.29500000E+1,0.97670000E+0 - ,0.76638090E+3,0.383E+3,0.120E+3,0.29500000E+1,0.98310000E+0 - ,0.41133690E+3,0.383E+3,0.121E+3,0.29500000E+1,0.18627000E+1 - ,0.39725380E+3,0.383E+3,0.122E+3,0.29500000E+1,0.18299000E+1 - ,0.38928370E+3,0.383E+3,0.123E+3,0.29500000E+1,0.19138000E+1 - ,0.38534090E+3,0.383E+3,0.124E+3,0.29500000E+1,0.18269000E+1 - ,0.35616420E+3,0.383E+3,0.125E+3,0.29500000E+1,0.16406000E+1 - ,0.33009770E+3,0.383E+3,0.126E+3,0.29500000E+1,0.16483000E+1 - ,0.31492830E+3,0.383E+3,0.127E+3,0.29500000E+1,0.17149000E+1 - ,0.30778390E+3,0.383E+3,0.128E+3,0.29500000E+1,0.17937000E+1 - ,0.30308940E+3,0.383E+3,0.129E+3,0.29500000E+1,0.95760000E+0 - ,0.28611150E+3,0.383E+3,0.130E+3,0.29500000E+1,0.19419000E+1 - ,0.46138820E+3,0.383E+3,0.131E+3,0.29500000E+1,0.96010000E+0 - ,0.40830150E+3,0.383E+3,0.132E+3,0.29500000E+1,0.94340000E+0 - ,0.36791630E+3,0.383E+3,0.133E+3,0.29500000E+1,0.98890000E+0 - ,0.33720180E+3,0.383E+3,0.134E+3,0.29500000E+1,0.99010000E+0 - ,0.29824950E+3,0.383E+3,0.135E+3,0.29500000E+1,0.99740000E+0 - ,0.48781130E+3,0.383E+3,0.137E+3,0.29500000E+1,0.97380000E+0 - ,0.93186330E+3,0.383E+3,0.138E+3,0.29500000E+1,0.98010000E+0 - ,0.72138820E+3,0.383E+3,0.139E+3,0.29500000E+1,0.19153000E+1 - ,0.54373140E+3,0.383E+3,0.140E+3,0.29500000E+1,0.19355000E+1 - ,0.54904170E+3,0.383E+3,0.141E+3,0.29500000E+1,0.19545000E+1 - ,0.51286200E+3,0.383E+3,0.142E+3,0.29500000E+1,0.19420000E+1 - ,0.57179580E+3,0.383E+3,0.143E+3,0.29500000E+1,0.16682000E+1 - ,0.44904810E+3,0.383E+3,0.144E+3,0.29500000E+1,0.18584000E+1 - ,0.42033540E+3,0.383E+3,0.145E+3,0.29500000E+1,0.19003000E+1 - ,0.39069990E+3,0.383E+3,0.146E+3,0.29500000E+1,0.18630000E+1 - ,0.37774640E+3,0.383E+3,0.147E+3,0.29500000E+1,0.96790000E+0 - ,0.37486870E+3,0.383E+3,0.148E+3,0.29500000E+1,0.19539000E+1 - ,0.58634250E+3,0.383E+3,0.149E+3,0.29500000E+1,0.96330000E+0 - ,0.53378120E+3,0.383E+3,0.150E+3,0.29500000E+1,0.95140000E+0 - ,0.50206010E+3,0.383E+3,0.151E+3,0.29500000E+1,0.97490000E+0 - ,0.47633350E+3,0.383E+3,0.152E+3,0.29500000E+1,0.98110000E+0 - ,0.43655340E+3,0.383E+3,0.153E+3,0.29500000E+1,0.99680000E+0 - ,0.57950930E+3,0.383E+3,0.155E+3,0.29500000E+1,0.99090000E+0 - ,0.12052309E+4,0.383E+3,0.156E+3,0.29500000E+1,0.97970000E+0 - ,0.91205970E+3,0.383E+3,0.157E+3,0.29500000E+1,0.19373000E+1 - ,0.58609720E+3,0.383E+3,0.159E+3,0.29500000E+1,0.29425000E+1 - ,0.57401590E+3,0.383E+3,0.160E+3,0.29500000E+1,0.29455000E+1 - ,0.55599730E+3,0.383E+3,0.161E+3,0.29500000E+1,0.29413000E+1 - ,0.55823140E+3,0.383E+3,0.162E+3,0.29500000E+1,0.29300000E+1 - ,0.53660520E+3,0.383E+3,0.163E+3,0.29500000E+1,0.18286000E+1 - ,0.56156960E+3,0.383E+3,0.164E+3,0.29500000E+1,0.28732000E+1 - ,0.52788270E+3,0.383E+3,0.165E+3,0.29500000E+1,0.29086000E+1 - ,0.53626980E+3,0.383E+3,0.166E+3,0.29500000E+1,0.28965000E+1 - ,0.50142950E+3,0.383E+3,0.167E+3,0.29500000E+1,0.29242000E+1 - ,0.48728280E+3,0.383E+3,0.168E+3,0.29500000E+1,0.29282000E+1 - ,0.48403880E+3,0.383E+3,0.169E+3,0.29500000E+1,0.29246000E+1 - ,0.50809720E+3,0.383E+3,0.170E+3,0.29500000E+1,0.28482000E+1 - ,0.46804880E+3,0.383E+3,0.171E+3,0.29500000E+1,0.29219000E+1 - ,0.62749410E+3,0.383E+3,0.172E+3,0.29500000E+1,0.19254000E+1 - ,0.58451000E+3,0.383E+3,0.173E+3,0.29500000E+1,0.19459000E+1 - ,0.53534350E+3,0.383E+3,0.174E+3,0.29500000E+1,0.19292000E+1 - ,0.53996900E+3,0.383E+3,0.175E+3,0.29500000E+1,0.18104000E+1 - ,0.47674360E+3,0.383E+3,0.176E+3,0.29500000E+1,0.18858000E+1 - ,0.44912500E+3,0.383E+3,0.177E+3,0.29500000E+1,0.18648000E+1 - ,0.42935080E+3,0.383E+3,0.178E+3,0.29500000E+1,0.19188000E+1 - ,0.41050840E+3,0.383E+3,0.179E+3,0.29500000E+1,0.98460000E+0 - ,0.39782250E+3,0.383E+3,0.180E+3,0.29500000E+1,0.19896000E+1 - ,0.63050780E+3,0.383E+3,0.181E+3,0.29500000E+1,0.92670000E+0 - ,0.57817950E+3,0.383E+3,0.182E+3,0.29500000E+1,0.93830000E+0 - ,0.56250870E+3,0.383E+3,0.183E+3,0.29500000E+1,0.98200000E+0 - ,0.54834310E+3,0.383E+3,0.184E+3,0.29500000E+1,0.98150000E+0 - ,0.51367500E+3,0.383E+3,0.185E+3,0.29500000E+1,0.99540000E+0 - ,0.65289240E+3,0.383E+3,0.187E+3,0.29500000E+1,0.97050000E+0 - ,0.12037016E+4,0.383E+3,0.188E+3,0.29500000E+1,0.96620000E+0 - ,0.69337750E+3,0.383E+3,0.189E+3,0.29500000E+1,0.29070000E+1 - ,0.79621000E+3,0.383E+3,0.190E+3,0.29500000E+1,0.28844000E+1 - ,0.71328770E+3,0.383E+3,0.191E+3,0.29500000E+1,0.28738000E+1 - ,0.63298840E+3,0.383E+3,0.192E+3,0.29500000E+1,0.28878000E+1 - ,0.60969380E+3,0.383E+3,0.193E+3,0.29500000E+1,0.29095000E+1 - ,0.72537520E+3,0.383E+3,0.194E+3,0.29500000E+1,0.19209000E+1 - ,0.17061220E+3,0.383E+3,0.204E+3,0.29500000E+1,0.19697000E+1 - ,0.16810260E+3,0.383E+3,0.205E+3,0.29500000E+1,0.19441000E+1 - ,0.12413050E+3,0.383E+3,0.206E+3,0.29500000E+1,0.19985000E+1 - ,0.99890200E+2,0.383E+3,0.207E+3,0.29500000E+1,0.20143000E+1 - ,0.68938900E+2,0.383E+3,0.208E+3,0.29500000E+1,0.19887000E+1 - ,0.30082770E+3,0.383E+3,0.212E+3,0.29500000E+1,0.19496000E+1 - ,0.36319850E+3,0.383E+3,0.213E+3,0.29500000E+1,0.19311000E+1 - ,0.35008330E+3,0.383E+3,0.214E+3,0.29500000E+1,0.19435000E+1 - ,0.30566690E+3,0.383E+3,0.215E+3,0.29500000E+1,0.20102000E+1 - ,0.25814020E+3,0.383E+3,0.216E+3,0.29500000E+1,0.19903000E+1 - ,0.42185200E+3,0.383E+3,0.220E+3,0.29500000E+1,0.19349000E+1 - ,0.40692810E+3,0.383E+3,0.221E+3,0.29500000E+1,0.28999000E+1 - ,0.41206730E+3,0.383E+3,0.222E+3,0.29500000E+1,0.38675000E+1 - ,0.37711770E+3,0.383E+3,0.223E+3,0.29500000E+1,0.29110000E+1 - ,0.28588310E+3,0.383E+3,0.224E+3,0.29500000E+1,0.10619100E+2 - ,0.24556070E+3,0.383E+3,0.225E+3,0.29500000E+1,0.98849000E+1 - ,0.24095060E+3,0.383E+3,0.226E+3,0.29500000E+1,0.91376000E+1 - ,0.28076020E+3,0.383E+3,0.227E+3,0.29500000E+1,0.29263000E+1 - ,0.26203990E+3,0.383E+3,0.228E+3,0.29500000E+1,0.65458000E+1 - ,0.36803530E+3,0.383E+3,0.231E+3,0.29500000E+1,0.19315000E+1 - ,0.38919220E+3,0.383E+3,0.232E+3,0.29500000E+1,0.19447000E+1 - ,0.35850420E+3,0.383E+3,0.233E+3,0.29500000E+1,0.19793000E+1 - ,0.33459570E+3,0.383E+3,0.234E+3,0.29500000E+1,0.19812000E+1 - ,0.50567630E+3,0.383E+3,0.238E+3,0.29500000E+1,0.19143000E+1 - ,0.48906840E+3,0.383E+3,0.239E+3,0.29500000E+1,0.28903000E+1 - ,0.49395440E+3,0.383E+3,0.240E+3,0.29500000E+1,0.39106000E+1 - ,0.47754800E+3,0.383E+3,0.241E+3,0.29500000E+1,0.29225000E+1 - ,0.42396710E+3,0.383E+3,0.242E+3,0.29500000E+1,0.11055600E+2 - ,0.37545330E+3,0.383E+3,0.243E+3,0.29500000E+1,0.95402000E+1 - ,0.35525030E+3,0.383E+3,0.244E+3,0.29500000E+1,0.88895000E+1 - ,0.36064340E+3,0.383E+3,0.245E+3,0.29500000E+1,0.29696000E+1 - ,0.37633490E+3,0.383E+3,0.246E+3,0.29500000E+1,0.57095000E+1 - ,0.47544030E+3,0.383E+3,0.249E+3,0.29500000E+1,0.19378000E+1 - ,0.51667410E+3,0.383E+3,0.250E+3,0.29500000E+1,0.19505000E+1 - ,0.48876370E+3,0.383E+3,0.251E+3,0.29500000E+1,0.19523000E+1 - ,0.47264780E+3,0.383E+3,0.252E+3,0.29500000E+1,0.19639000E+1 - ,0.61239630E+3,0.383E+3,0.256E+3,0.29500000E+1,0.18467000E+1 - ,0.63629250E+3,0.383E+3,0.257E+3,0.29500000E+1,0.29175000E+1 - ,0.47384040E+3,0.383E+3,0.272E+3,0.29500000E+1,0.38840000E+1 - ,0.49409450E+3,0.383E+3,0.273E+3,0.29500000E+1,0.28988000E+1 - ,0.46071470E+3,0.383E+3,0.274E+3,0.29500000E+1,0.10915300E+2 - ,0.41970150E+3,0.383E+3,0.275E+3,0.29500000E+1,0.98054000E+1 - ,0.39577380E+3,0.383E+3,0.276E+3,0.29500000E+1,0.91527000E+1 - ,0.40234540E+3,0.383E+3,0.277E+3,0.29500000E+1,0.29424000E+1 - ,0.42301710E+3,0.383E+3,0.278E+3,0.29500000E+1,0.66669000E+1 - ,0.50934070E+3,0.383E+3,0.281E+3,0.29500000E+1,0.19302000E+1 - ,0.53837690E+3,0.383E+3,0.282E+3,0.29500000E+1,0.19356000E+1 - ,0.54954870E+3,0.383E+3,0.283E+3,0.29500000E+1,0.19655000E+1 - ,0.54627450E+3,0.383E+3,0.284E+3,0.29500000E+1,0.19639000E+1 - ,0.67441620E+3,0.383E+3,0.288E+3,0.29500000E+1,0.18075000E+1 - ,0.12875890E+3,0.383E+3,0.305E+3,0.29500000E+1,0.29128000E+1 - ,0.11617900E+3,0.383E+3,0.306E+3,0.29500000E+1,0.29987000E+1 - ,0.88102700E+2,0.383E+3,0.307E+3,0.29500000E+1,0.29903000E+1 - ,0.28508900E+3,0.383E+3,0.313E+3,0.29500000E+1,0.29146000E+1 - ,0.34088270E+3,0.383E+3,0.314E+3,0.29500000E+1,0.29407000E+1 - ,0.28413180E+3,0.383E+3,0.315E+3,0.29500000E+1,0.29859000E+1 - ,0.25096550E+3,0.383E+3,0.327E+3,0.29500000E+1,0.77785000E+1 - ,0.27414590E+3,0.383E+3,0.328E+3,0.29500000E+1,0.62918000E+1 - ,0.30303570E+3,0.383E+3,0.331E+3,0.29500000E+1,0.29233000E+1 - ,0.34976730E+3,0.383E+3,0.332E+3,0.29500000E+1,0.29186000E+1 - ,0.34567500E+3,0.383E+3,0.333E+3,0.29500000E+1,0.29709000E+1 - ,0.40735630E+3,0.383E+3,0.349E+3,0.29500000E+1,0.29353000E+1 - ,0.46691700E+3,0.383E+3,0.350E+3,0.29500000E+1,0.29259000E+1 - ,0.47196350E+3,0.383E+3,0.351E+3,0.29500000E+1,0.29315000E+1 - ,0.45575440E+3,0.383E+3,0.381E+3,0.29500000E+1,0.29420000E+1 - ,0.52876490E+3,0.383E+3,0.382E+3,0.29500000E+1,0.29081000E+1 - ,0.53388100E+3,0.383E+3,0.383E+3,0.29500000E+1,0.29500000E+1 - ,0.92092000E+1,0.405E+3,0.100E+1,0.45856000E+1,0.91180000E+0 - ,0.63181000E+1,0.405E+3,0.200E+1,0.45856000E+1,0.00000000E+0 - ,0.12066280E+3,0.405E+3,0.300E+1,0.45856000E+1,0.00000000E+0 - ,0.75131100E+2,0.405E+3,0.400E+1,0.45856000E+1,0.00000000E+0 - ,0.52960600E+2,0.405E+3,0.500E+1,0.45856000E+1,0.00000000E+0 - ,0.37004200E+2,0.405E+3,0.600E+1,0.45856000E+1,0.00000000E+0 - ,0.26508300E+2,0.405E+3,0.700E+1,0.45856000E+1,0.00000000E+0 - ,0.20399800E+2,0.405E+3,0.800E+1,0.45856000E+1,0.00000000E+0 - ,0.15657800E+2,0.405E+3,0.900E+1,0.45856000E+1,0.00000000E+0 - ,0.12160800E+2,0.405E+3,0.100E+2,0.45856000E+1,0.00000000E+0 - ,0.14500200E+3,0.405E+3,0.110E+2,0.45856000E+1,0.00000000E+0 - ,0.11807480E+3,0.405E+3,0.120E+2,0.45856000E+1,0.00000000E+0 - ,0.11143770E+3,0.405E+3,0.130E+2,0.45856000E+1,0.00000000E+0 - ,0.90574000E+2,0.405E+3,0.140E+2,0.45856000E+1,0.00000000E+0 - ,0.72514500E+2,0.405E+3,0.150E+2,0.45856000E+1,0.00000000E+0 - ,0.61218400E+2,0.405E+3,0.160E+2,0.45856000E+1,0.00000000E+0 - ,0.50810200E+2,0.405E+3,0.170E+2,0.45856000E+1,0.00000000E+0 - ,0.42132400E+2,0.405E+3,0.180E+2,0.45856000E+1,0.00000000E+0 - ,0.23618020E+3,0.405E+3,0.190E+2,0.45856000E+1,0.00000000E+0 - ,0.20306790E+3,0.405E+3,0.200E+2,0.45856000E+1,0.00000000E+0 - ,0.16941860E+3,0.405E+3,0.210E+2,0.45856000E+1,0.00000000E+0 - ,0.16529120E+3,0.405E+3,0.220E+2,0.45856000E+1,0.00000000E+0 - ,0.15225000E+3,0.405E+3,0.230E+2,0.45856000E+1,0.00000000E+0 - ,0.12032780E+3,0.405E+3,0.240E+2,0.45856000E+1,0.00000000E+0 - ,0.13219840E+3,0.405E+3,0.250E+2,0.45856000E+1,0.00000000E+0 - ,0.10419900E+3,0.405E+3,0.260E+2,0.45856000E+1,0.00000000E+0 - ,0.11150630E+3,0.405E+3,0.270E+2,0.45856000E+1,0.00000000E+0 - ,0.11415060E+3,0.405E+3,0.280E+2,0.45856000E+1,0.00000000E+0 - ,0.87805200E+2,0.405E+3,0.290E+2,0.45856000E+1,0.00000000E+0 - ,0.91572800E+2,0.405E+3,0.300E+2,0.45856000E+1,0.00000000E+0 - ,0.10787050E+3,0.405E+3,0.310E+2,0.45856000E+1,0.00000000E+0 - ,0.97349000E+2,0.405E+3,0.320E+2,0.45856000E+1,0.00000000E+0 - ,0.84829800E+2,0.405E+3,0.330E+2,0.45856000E+1,0.00000000E+0 - ,0.77153300E+2,0.405E+3,0.340E+2,0.45856000E+1,0.00000000E+0 - ,0.68441600E+2,0.405E+3,0.350E+2,0.45856000E+1,0.00000000E+0 - ,0.60254400E+2,0.405E+3,0.360E+2,0.45856000E+1,0.00000000E+0 - ,0.26610180E+3,0.405E+3,0.370E+2,0.45856000E+1,0.00000000E+0 - ,0.24185040E+3,0.405E+3,0.380E+2,0.45856000E+1,0.00000000E+0 - ,0.21572630E+3,0.405E+3,0.390E+2,0.45856000E+1,0.00000000E+0 - ,0.19615430E+3,0.405E+3,0.400E+2,0.45856000E+1,0.00000000E+0 - ,0.18030420E+3,0.405E+3,0.410E+2,0.45856000E+1,0.00000000E+0 - ,0.14125220E+3,0.405E+3,0.420E+2,0.45856000E+1,0.00000000E+0 - ,0.15672560E+3,0.405E+3,0.430E+2,0.45856000E+1,0.00000000E+0 - ,0.12128760E+3,0.405E+3,0.440E+2,0.45856000E+1,0.00000000E+0 - ,0.13232810E+3,0.405E+3,0.450E+2,0.45856000E+1,0.00000000E+0 - ,0.12329130E+3,0.405E+3,0.460E+2,0.45856000E+1,0.00000000E+0 - ,0.10277530E+3,0.405E+3,0.470E+2,0.45856000E+1,0.00000000E+0 - ,0.10928870E+3,0.405E+3,0.480E+2,0.45856000E+1,0.00000000E+0 - ,0.13508140E+3,0.405E+3,0.490E+2,0.45856000E+1,0.00000000E+0 - ,0.12715210E+3,0.405E+3,0.500E+2,0.45856000E+1,0.00000000E+0 - ,0.11540180E+3,0.405E+3,0.510E+2,0.45856000E+1,0.00000000E+0 - ,0.10829220E+3,0.405E+3,0.520E+2,0.45856000E+1,0.00000000E+0 - ,0.99110900E+2,0.405E+3,0.530E+2,0.45856000E+1,0.00000000E+0 - ,0.90129600E+2,0.405E+3,0.540E+2,0.45856000E+1,0.00000000E+0 - ,0.32498720E+3,0.405E+3,0.550E+2,0.45856000E+1,0.00000000E+0 - ,0.30696860E+3,0.405E+3,0.560E+2,0.45856000E+1,0.00000000E+0 - ,0.27449320E+3,0.405E+3,0.570E+2,0.45856000E+1,0.00000000E+0 - ,0.13602870E+3,0.405E+3,0.580E+2,0.45856000E+1,0.27991000E+1 - ,0.27357430E+3,0.405E+3,0.590E+2,0.45856000E+1,0.00000000E+0 - ,0.26338860E+3,0.405E+3,0.600E+2,0.45856000E+1,0.00000000E+0 - ,0.25696540E+3,0.405E+3,0.610E+2,0.45856000E+1,0.00000000E+0 - ,0.25103460E+3,0.405E+3,0.620E+2,0.45856000E+1,0.00000000E+0 - ,0.24578320E+3,0.405E+3,0.630E+2,0.45856000E+1,0.00000000E+0 - ,0.19745530E+3,0.405E+3,0.640E+2,0.45856000E+1,0.00000000E+0 - ,0.21647080E+3,0.405E+3,0.650E+2,0.45856000E+1,0.00000000E+0 - ,0.20953600E+3,0.405E+3,0.660E+2,0.45856000E+1,0.00000000E+0 - ,0.22258700E+3,0.405E+3,0.670E+2,0.45856000E+1,0.00000000E+0 - ,0.21794160E+3,0.405E+3,0.680E+2,0.45856000E+1,0.00000000E+0 - ,0.21381010E+3,0.405E+3,0.690E+2,0.45856000E+1,0.00000000E+0 - ,0.21110760E+3,0.405E+3,0.700E+2,0.45856000E+1,0.00000000E+0 - ,0.18048560E+3,0.405E+3,0.710E+2,0.45856000E+1,0.00000000E+0 - ,0.18074340E+3,0.405E+3,0.720E+2,0.45856000E+1,0.00000000E+0 - ,0.16687410E+3,0.405E+3,0.730E+2,0.45856000E+1,0.00000000E+0 - ,0.14241400E+3,0.405E+3,0.740E+2,0.45856000E+1,0.00000000E+0 - ,0.14542480E+3,0.405E+3,0.750E+2,0.45856000E+1,0.00000000E+0 - ,0.13310380E+3,0.405E+3,0.760E+2,0.45856000E+1,0.00000000E+0 - ,0.12287620E+3,0.405E+3,0.770E+2,0.45856000E+1,0.00000000E+0 - ,0.10304210E+3,0.405E+3,0.780E+2,0.45856000E+1,0.00000000E+0 - ,0.96613000E+2,0.405E+3,0.790E+2,0.45856000E+1,0.00000000E+0 - ,0.99656100E+2,0.405E+3,0.800E+2,0.45856000E+1,0.00000000E+0 - ,0.13964810E+3,0.405E+3,0.810E+2,0.45856000E+1,0.00000000E+0 - ,0.13828410E+3,0.405E+3,0.820E+2,0.45856000E+1,0.00000000E+0 - ,0.12908340E+3,0.405E+3,0.830E+2,0.45856000E+1,0.00000000E+0 - ,0.12428020E+3,0.405E+3,0.840E+2,0.45856000E+1,0.00000000E+0 - ,0.11600970E+3,0.405E+3,0.850E+2,0.45856000E+1,0.00000000E+0 - ,0.10744210E+3,0.405E+3,0.860E+2,0.45856000E+1,0.00000000E+0 - ,0.31132220E+3,0.405E+3,0.870E+2,0.45856000E+1,0.00000000E+0 - ,0.30650670E+3,0.405E+3,0.880E+2,0.45856000E+1,0.00000000E+0 - ,0.27521710E+3,0.405E+3,0.890E+2,0.45856000E+1,0.00000000E+0 - ,0.25216490E+3,0.405E+3,0.900E+2,0.45856000E+1,0.00000000E+0 - ,0.24821560E+3,0.405E+3,0.910E+2,0.45856000E+1,0.00000000E+0 - ,0.24044920E+3,0.405E+3,0.920E+2,0.45856000E+1,0.00000000E+0 - ,0.24457260E+3,0.405E+3,0.930E+2,0.45856000E+1,0.00000000E+0 - ,0.23732770E+3,0.405E+3,0.940E+2,0.45856000E+1,0.00000000E+0 - ,0.14454100E+2,0.405E+3,0.101E+3,0.45856000E+1,0.00000000E+0 - ,0.43974600E+2,0.405E+3,0.103E+3,0.45856000E+1,0.98650000E+0 - ,0.56652700E+2,0.405E+3,0.104E+3,0.45856000E+1,0.98080000E+0 - ,0.44988800E+2,0.405E+3,0.105E+3,0.45856000E+1,0.97060000E+0 - ,0.34722600E+2,0.405E+3,0.106E+3,0.45856000E+1,0.98680000E+0 - ,0.24752500E+2,0.405E+3,0.107E+3,0.45856000E+1,0.99440000E+0 - ,0.18383100E+2,0.405E+3,0.108E+3,0.45856000E+1,0.99250000E+0 - ,0.12929100E+2,0.405E+3,0.109E+3,0.45856000E+1,0.99820000E+0 - ,0.63812300E+2,0.405E+3,0.111E+3,0.45856000E+1,0.96840000E+0 - ,0.98372400E+2,0.405E+3,0.112E+3,0.45856000E+1,0.96280000E+0 - ,0.10158890E+3,0.405E+3,0.113E+3,0.45856000E+1,0.96480000E+0 - ,0.84115800E+2,0.405E+3,0.114E+3,0.45856000E+1,0.95070000E+0 - ,0.70462900E+2,0.405E+3,0.115E+3,0.45856000E+1,0.99470000E+0 - ,0.60525500E+2,0.405E+3,0.116E+3,0.45856000E+1,0.99480000E+0 - ,0.50270800E+2,0.405E+3,0.117E+3,0.45856000E+1,0.99720000E+0 - ,0.89856900E+2,0.405E+3,0.119E+3,0.45856000E+1,0.97670000E+0 - ,0.16335340E+3,0.405E+3,0.120E+3,0.45856000E+1,0.98310000E+0 - ,0.91795100E+2,0.405E+3,0.121E+3,0.45856000E+1,0.18627000E+1 - ,0.88738900E+2,0.405E+3,0.122E+3,0.45856000E+1,0.18299000E+1 - ,0.86926400E+2,0.405E+3,0.123E+3,0.45856000E+1,0.19138000E+1 - ,0.85880600E+2,0.405E+3,0.124E+3,0.45856000E+1,0.18269000E+1 - ,0.80037500E+2,0.405E+3,0.125E+3,0.45856000E+1,0.16406000E+1 - ,0.74393000E+2,0.405E+3,0.126E+3,0.45856000E+1,0.16483000E+1 - ,0.70987100E+2,0.405E+3,0.127E+3,0.45856000E+1,0.17149000E+1 - ,0.69319400E+2,0.405E+3,0.128E+3,0.45856000E+1,0.17937000E+1 - ,0.67783500E+2,0.405E+3,0.129E+3,0.45856000E+1,0.95760000E+0 - ,0.64779800E+2,0.405E+3,0.130E+3,0.45856000E+1,0.19419000E+1 - ,0.10192230E+3,0.405E+3,0.131E+3,0.45856000E+1,0.96010000E+0 - ,0.91589500E+2,0.405E+3,0.132E+3,0.45856000E+1,0.94340000E+0 - ,0.83502300E+2,0.405E+3,0.133E+3,0.45856000E+1,0.98890000E+0 - ,0.77170000E+2,0.405E+3,0.134E+3,0.45856000E+1,0.99010000E+0 - ,0.68871400E+2,0.405E+3,0.135E+3,0.45856000E+1,0.99740000E+0 - ,0.10786680E+3,0.405E+3,0.137E+3,0.45856000E+1,0.97380000E+0 - ,0.19856600E+3,0.405E+3,0.138E+3,0.45856000E+1,0.98010000E+0 - ,0.15735980E+3,0.405E+3,0.139E+3,0.45856000E+1,0.19153000E+1 - ,0.12138420E+3,0.405E+3,0.140E+3,0.45856000E+1,0.19355000E+1 - ,0.12250750E+3,0.405E+3,0.141E+3,0.45856000E+1,0.19545000E+1 - ,0.11484620E+3,0.405E+3,0.142E+3,0.45856000E+1,0.19420000E+1 - ,0.12665710E+3,0.405E+3,0.143E+3,0.45856000E+1,0.16682000E+1 - ,0.10138250E+3,0.405E+3,0.144E+3,0.45856000E+1,0.18584000E+1 - ,0.94998700E+2,0.405E+3,0.145E+3,0.45856000E+1,0.19003000E+1 - ,0.88451500E+2,0.405E+3,0.146E+3,0.45856000E+1,0.18630000E+1 - ,0.85377300E+2,0.405E+3,0.147E+3,0.45856000E+1,0.96790000E+0 - ,0.85227400E+2,0.405E+3,0.148E+3,0.45856000E+1,0.19539000E+1 - ,0.12959790E+3,0.405E+3,0.149E+3,0.45856000E+1,0.96330000E+0 - ,0.11945590E+3,0.405E+3,0.150E+3,0.45856000E+1,0.95140000E+0 - ,0.11338670E+3,0.405E+3,0.151E+3,0.45856000E+1,0.97490000E+0 - ,0.10828980E+3,0.405E+3,0.152E+3,0.45856000E+1,0.98110000E+0 - ,0.10002100E+3,0.405E+3,0.153E+3,0.45856000E+1,0.99680000E+0 - ,0.12944610E+3,0.405E+3,0.155E+3,0.45856000E+1,0.99090000E+0 - ,0.25605470E+3,0.405E+3,0.156E+3,0.45856000E+1,0.97970000E+0 - ,0.19871970E+3,0.405E+3,0.157E+3,0.45856000E+1,0.19373000E+1 - ,0.13207060E+3,0.405E+3,0.159E+3,0.45856000E+1,0.29425000E+1 - ,0.12936140E+3,0.405E+3,0.160E+3,0.45856000E+1,0.29455000E+1 - ,0.12538070E+3,0.405E+3,0.161E+3,0.45856000E+1,0.29413000E+1 - ,0.12566750E+3,0.405E+3,0.162E+3,0.45856000E+1,0.29300000E+1 - ,0.12008750E+3,0.405E+3,0.163E+3,0.45856000E+1,0.18286000E+1 - ,0.12632050E+3,0.405E+3,0.164E+3,0.45856000E+1,0.28732000E+1 - ,0.11891980E+3,0.405E+3,0.165E+3,0.45856000E+1,0.29086000E+1 - ,0.12044740E+3,0.405E+3,0.166E+3,0.45856000E+1,0.28965000E+1 - ,0.11313110E+3,0.405E+3,0.167E+3,0.45856000E+1,0.29242000E+1 - ,0.11000160E+3,0.405E+3,0.168E+3,0.45856000E+1,0.29282000E+1 - ,0.10921440E+3,0.405E+3,0.169E+3,0.45856000E+1,0.29246000E+1 - ,0.11430830E+3,0.405E+3,0.170E+3,0.45856000E+1,0.28482000E+1 - ,0.10569650E+3,0.405E+3,0.171E+3,0.45856000E+1,0.29219000E+1 - ,0.13894310E+3,0.405E+3,0.172E+3,0.45856000E+1,0.19254000E+1 - ,0.13037550E+3,0.405E+3,0.173E+3,0.45856000E+1,0.19459000E+1 - ,0.12030200E+3,0.405E+3,0.174E+3,0.45856000E+1,0.19292000E+1 - ,0.12054080E+3,0.405E+3,0.175E+3,0.45856000E+1,0.18104000E+1 - ,0.10824460E+3,0.405E+3,0.176E+3,0.45856000E+1,0.18858000E+1 - ,0.10224360E+3,0.405E+3,0.177E+3,0.45856000E+1,0.18648000E+1 - ,0.97889800E+2,0.405E+3,0.178E+3,0.45856000E+1,0.19188000E+1 - ,0.93574800E+2,0.405E+3,0.179E+3,0.45856000E+1,0.98460000E+0 - ,0.91193000E+2,0.405E+3,0.180E+3,0.45856000E+1,0.19896000E+1 - ,0.13986370E+3,0.405E+3,0.181E+3,0.45856000E+1,0.92670000E+0 - ,0.12975270E+3,0.405E+3,0.182E+3,0.45856000E+1,0.93830000E+0 - ,0.12706290E+3,0.405E+3,0.183E+3,0.45856000E+1,0.98200000E+0 - ,0.12448510E+3,0.405E+3,0.184E+3,0.45856000E+1,0.98150000E+0 - ,0.11742660E+3,0.405E+3,0.185E+3,0.45856000E+1,0.99540000E+0 - ,0.14593990E+3,0.405E+3,0.187E+3,0.45856000E+1,0.97050000E+0 - ,0.25758460E+3,0.405E+3,0.188E+3,0.45856000E+1,0.96620000E+0 - ,0.15618080E+3,0.405E+3,0.189E+3,0.45856000E+1,0.29070000E+1 - ,0.17763750E+3,0.405E+3,0.190E+3,0.45856000E+1,0.28844000E+1 - ,0.15984520E+3,0.405E+3,0.191E+3,0.45856000E+1,0.28738000E+1 - ,0.14284510E+3,0.405E+3,0.192E+3,0.45856000E+1,0.28878000E+1 - ,0.13782260E+3,0.405E+3,0.193E+3,0.45856000E+1,0.29095000E+1 - ,0.16054880E+3,0.405E+3,0.194E+3,0.45856000E+1,0.19209000E+1 - ,0.38474500E+2,0.405E+3,0.204E+3,0.45856000E+1,0.19697000E+1 - ,0.38139800E+2,0.405E+3,0.205E+3,0.45856000E+1,0.19441000E+1 - ,0.28676300E+2,0.405E+3,0.206E+3,0.45856000E+1,0.19985000E+1 - ,0.23290000E+2,0.405E+3,0.207E+3,0.45856000E+1,0.20143000E+1 - ,0.16298700E+2,0.405E+3,0.208E+3,0.45856000E+1,0.19887000E+1 - ,0.66869600E+2,0.405E+3,0.212E+3,0.45856000E+1,0.19496000E+1 - ,0.80700500E+2,0.405E+3,0.213E+3,0.45856000E+1,0.19311000E+1 - ,0.78583500E+2,0.405E+3,0.214E+3,0.45856000E+1,0.19435000E+1 - ,0.69411500E+2,0.405E+3,0.215E+3,0.45856000E+1,0.20102000E+1 - ,0.59323900E+2,0.405E+3,0.216E+3,0.45856000E+1,0.19903000E+1 - ,0.93919400E+2,0.405E+3,0.220E+3,0.45856000E+1,0.19349000E+1 - ,0.91307200E+2,0.405E+3,0.221E+3,0.45856000E+1,0.28999000E+1 - ,0.92515400E+2,0.405E+3,0.222E+3,0.45856000E+1,0.38675000E+1 - ,0.84657000E+2,0.405E+3,0.223E+3,0.45856000E+1,0.29110000E+1 - ,0.65034900E+2,0.405E+3,0.224E+3,0.45856000E+1,0.10619100E+2 - ,0.56292100E+2,0.405E+3,0.225E+3,0.45856000E+1,0.98849000E+1 - ,0.55169800E+2,0.405E+3,0.226E+3,0.45856000E+1,0.91376000E+1 - ,0.63454300E+2,0.405E+3,0.227E+3,0.45856000E+1,0.29263000E+1 - ,0.59424700E+2,0.405E+3,0.228E+3,0.45856000E+1,0.65458000E+1 - ,0.82444700E+2,0.405E+3,0.231E+3,0.45856000E+1,0.19315000E+1 - ,0.87528200E+2,0.405E+3,0.232E+3,0.45856000E+1,0.19447000E+1 - ,0.81489600E+2,0.405E+3,0.233E+3,0.45856000E+1,0.19793000E+1 - ,0.76593900E+2,0.405E+3,0.234E+3,0.45856000E+1,0.19812000E+1 - ,0.11280930E+3,0.405E+3,0.238E+3,0.45856000E+1,0.19143000E+1 - ,0.11017370E+3,0.405E+3,0.239E+3,0.45856000E+1,0.28903000E+1 - ,0.11160800E+3,0.405E+3,0.240E+3,0.45856000E+1,0.39106000E+1 - ,0.10787110E+3,0.405E+3,0.241E+3,0.45856000E+1,0.29225000E+1 - ,0.96603000E+2,0.405E+3,0.242E+3,0.45856000E+1,0.11055600E+2 - ,0.86127600E+2,0.405E+3,0.243E+3,0.45856000E+1,0.95402000E+1 - ,0.81685300E+2,0.405E+3,0.244E+3,0.45856000E+1,0.88895000E+1 - ,0.82288700E+2,0.405E+3,0.245E+3,0.45856000E+1,0.29696000E+1 - ,0.85628100E+2,0.405E+3,0.246E+3,0.45856000E+1,0.57095000E+1 - ,0.10669460E+3,0.405E+3,0.249E+3,0.45856000E+1,0.19378000E+1 - ,0.11592860E+3,0.405E+3,0.250E+3,0.45856000E+1,0.19505000E+1 - ,0.11062760E+3,0.405E+3,0.251E+3,0.45856000E+1,0.19523000E+1 - ,0.10754340E+3,0.405E+3,0.252E+3,0.45856000E+1,0.19639000E+1 - ,0.13712500E+3,0.405E+3,0.256E+3,0.45856000E+1,0.18467000E+1 - ,0.14310680E+3,0.405E+3,0.257E+3,0.45856000E+1,0.29175000E+1 - ,0.10750530E+3,0.405E+3,0.272E+3,0.45856000E+1,0.38840000E+1 - ,0.11175770E+3,0.405E+3,0.273E+3,0.45856000E+1,0.28988000E+1 - ,0.10503500E+3,0.405E+3,0.274E+3,0.45856000E+1,0.10915300E+2 - ,0.96275900E+2,0.405E+3,0.275E+3,0.45856000E+1,0.98054000E+1 - ,0.91232500E+2,0.405E+3,0.276E+3,0.45856000E+1,0.91527000E+1 - ,0.92145800E+2,0.405E+3,0.277E+3,0.45856000E+1,0.29424000E+1 - ,0.96759100E+2,0.405E+3,0.278E+3,0.45856000E+1,0.66669000E+1 - ,0.11499010E+3,0.405E+3,0.281E+3,0.45856000E+1,0.19302000E+1 - ,0.12156000E+3,0.405E+3,0.282E+3,0.45856000E+1,0.19356000E+1 - ,0.12447110E+3,0.405E+3,0.283E+3,0.45856000E+1,0.19655000E+1 - ,0.12415670E+3,0.405E+3,0.284E+3,0.45856000E+1,0.19639000E+1 - ,0.15117960E+3,0.405E+3,0.288E+3,0.45856000E+1,0.18075000E+1 - ,0.29680400E+2,0.405E+3,0.305E+3,0.45856000E+1,0.29128000E+1 - ,0.26850600E+2,0.405E+3,0.306E+3,0.45856000E+1,0.29987000E+1 - ,0.20588600E+2,0.405E+3,0.307E+3,0.45856000E+1,0.29903000E+1 - ,0.64333200E+2,0.405E+3,0.313E+3,0.45856000E+1,0.29146000E+1 - ,0.76403800E+2,0.405E+3,0.314E+3,0.45856000E+1,0.29407000E+1 - ,0.64812700E+2,0.405E+3,0.315E+3,0.45856000E+1,0.29859000E+1 - ,0.57198700E+2,0.405E+3,0.327E+3,0.45856000E+1,0.77785000E+1 - ,0.61697400E+2,0.405E+3,0.328E+3,0.45856000E+1,0.62918000E+1 - ,0.68793500E+2,0.405E+3,0.331E+3,0.45856000E+1,0.29233000E+1 - ,0.79165600E+2,0.405E+3,0.332E+3,0.45856000E+1,0.29186000E+1 - ,0.78747800E+2,0.405E+3,0.333E+3,0.45856000E+1,0.29709000E+1 - ,0.92535500E+2,0.405E+3,0.349E+3,0.45856000E+1,0.29353000E+1 - ,0.10552950E+3,0.405E+3,0.350E+3,0.45856000E+1,0.29259000E+1 - ,0.10712000E+3,0.405E+3,0.351E+3,0.45856000E+1,0.29315000E+1 - ,0.10385430E+3,0.405E+3,0.381E+3,0.45856000E+1,0.29420000E+1 - ,0.11970710E+3,0.405E+3,0.382E+3,0.45856000E+1,0.29081000E+1 - ,0.12129570E+3,0.405E+3,0.383E+3,0.45856000E+1,0.29500000E+1 - ,0.28031500E+2,0.405E+3,0.405E+3,0.45856000E+1,0.45856000E+1 - ,0.73662000E+1,0.406E+3,0.100E+1,0.39844000E+1,0.91180000E+0 - ,0.52567000E+1,0.406E+3,0.200E+1,0.39844000E+1,0.00000000E+0 - ,0.87818300E+2,0.406E+3,0.300E+1,0.39844000E+1,0.00000000E+0 - ,0.56466200E+2,0.406E+3,0.400E+1,0.39844000E+1,0.00000000E+0 - ,0.40896200E+2,0.406E+3,0.500E+1,0.39844000E+1,0.00000000E+0 - ,0.29283000E+2,0.406E+3,0.600E+1,0.39844000E+1,0.00000000E+0 - ,0.21419900E+2,0.406E+3,0.700E+1,0.39844000E+1,0.00000000E+0 - ,0.16754400E+2,0.406E+3,0.800E+1,0.39844000E+1,0.00000000E+0 - ,0.13054600E+2,0.406E+3,0.900E+1,0.39844000E+1,0.00000000E+0 - ,0.10271600E+2,0.406E+3,0.100E+2,0.39844000E+1,0.00000000E+0 - ,0.10592480E+3,0.406E+3,0.110E+2,0.39844000E+1,0.00000000E+0 - ,0.88262000E+2,0.406E+3,0.120E+2,0.39844000E+1,0.00000000E+0 - ,0.84307300E+2,0.406E+3,0.130E+2,0.39844000E+1,0.00000000E+0 - ,0.69722400E+2,0.406E+3,0.140E+2,0.39844000E+1,0.00000000E+0 - ,0.56785200E+2,0.406E+3,0.150E+2,0.39844000E+1,0.00000000E+0 - ,0.48568100E+2,0.406E+3,0.160E+2,0.39844000E+1,0.00000000E+0 - ,0.40851600E+2,0.406E+3,0.170E+2,0.39844000E+1,0.00000000E+0 - ,0.34305000E+2,0.406E+3,0.180E+2,0.39844000E+1,0.00000000E+0 - ,0.17296850E+3,0.406E+3,0.190E+2,0.39844000E+1,0.00000000E+0 - ,0.15082030E+3,0.406E+3,0.200E+2,0.39844000E+1,0.00000000E+0 - ,0.12634910E+3,0.406E+3,0.210E+2,0.39844000E+1,0.00000000E+0 - ,0.12400130E+3,0.406E+3,0.220E+2,0.39844000E+1,0.00000000E+0 - ,0.11458700E+3,0.406E+3,0.230E+2,0.39844000E+1,0.00000000E+0 - ,0.91023300E+2,0.406E+3,0.240E+2,0.39844000E+1,0.00000000E+0 - ,0.99976800E+2,0.406E+3,0.250E+2,0.39844000E+1,0.00000000E+0 - ,0.79263000E+2,0.406E+3,0.260E+2,0.39844000E+1,0.00000000E+0 - ,0.84954700E+2,0.406E+3,0.270E+2,0.39844000E+1,0.00000000E+0 - ,0.86660100E+2,0.406E+3,0.280E+2,0.39844000E+1,0.00000000E+0 - ,0.67082300E+2,0.406E+3,0.290E+2,0.39844000E+1,0.00000000E+0 - ,0.70282000E+2,0.406E+3,0.300E+2,0.39844000E+1,0.00000000E+0 - ,0.82324800E+2,0.406E+3,0.310E+2,0.39844000E+1,0.00000000E+0 - ,0.75207600E+2,0.406E+3,0.320E+2,0.39844000E+1,0.00000000E+0 - ,0.66414700E+2,0.406E+3,0.330E+2,0.39844000E+1,0.00000000E+0 - ,0.60991300E+2,0.406E+3,0.340E+2,0.39844000E+1,0.00000000E+0 - ,0.54682400E+2,0.406E+3,0.350E+2,0.39844000E+1,0.00000000E+0 - ,0.48650000E+2,0.406E+3,0.360E+2,0.39844000E+1,0.00000000E+0 - ,0.19559960E+3,0.406E+3,0.370E+2,0.39844000E+1,0.00000000E+0 - ,0.17983950E+3,0.406E+3,0.380E+2,0.39844000E+1,0.00000000E+0 - ,0.16177380E+3,0.406E+3,0.390E+2,0.39844000E+1,0.00000000E+0 - ,0.14800690E+3,0.406E+3,0.400E+2,0.39844000E+1,0.00000000E+0 - ,0.13670500E+3,0.406E+3,0.410E+2,0.39844000E+1,0.00000000E+0 - ,0.10823560E+3,0.406E+3,0.420E+2,0.39844000E+1,0.00000000E+0 - ,0.11959950E+3,0.406E+3,0.430E+2,0.39844000E+1,0.00000000E+0 - ,0.93626900E+2,0.406E+3,0.440E+2,0.39844000E+1,0.00000000E+0 - ,0.10181940E+3,0.406E+3,0.450E+2,0.39844000E+1,0.00000000E+0 - ,0.95161200E+2,0.406E+3,0.460E+2,0.39844000E+1,0.00000000E+0 - ,0.79665700E+2,0.406E+3,0.470E+2,0.39844000E+1,0.00000000E+0 - ,0.84713900E+2,0.406E+3,0.480E+2,0.39844000E+1,0.00000000E+0 - ,0.10361980E+3,0.406E+3,0.490E+2,0.39844000E+1,0.00000000E+0 - ,0.98343100E+2,0.406E+3,0.500E+2,0.39844000E+1,0.00000000E+0 - ,0.90179700E+2,0.406E+3,0.510E+2,0.39844000E+1,0.00000000E+0 - ,0.85234300E+2,0.406E+3,0.520E+2,0.39844000E+1,0.00000000E+0 - ,0.78668600E+2,0.406E+3,0.530E+2,0.39844000E+1,0.00000000E+0 - ,0.72161700E+2,0.406E+3,0.540E+2,0.39844000E+1,0.00000000E+0 - ,0.23924420E+3,0.406E+3,0.550E+2,0.39844000E+1,0.00000000E+0 - ,0.22805560E+3,0.406E+3,0.560E+2,0.39844000E+1,0.00000000E+0 - ,0.20554070E+3,0.406E+3,0.570E+2,0.39844000E+1,0.00000000E+0 - ,0.10630350E+3,0.406E+3,0.580E+2,0.39844000E+1,0.27991000E+1 - ,0.20400390E+3,0.406E+3,0.590E+2,0.39844000E+1,0.00000000E+0 - ,0.19661650E+3,0.406E+3,0.600E+2,0.39844000E+1,0.00000000E+0 - ,0.19187330E+3,0.406E+3,0.610E+2,0.39844000E+1,0.00000000E+0 - ,0.18748180E+3,0.406E+3,0.620E+2,0.39844000E+1,0.00000000E+0 - ,0.18359400E+3,0.406E+3,0.630E+2,0.39844000E+1,0.00000000E+0 - ,0.14929180E+3,0.406E+3,0.640E+2,0.39844000E+1,0.00000000E+0 - ,0.16190910E+3,0.406E+3,0.650E+2,0.39844000E+1,0.00000000E+0 - ,0.15698310E+3,0.406E+3,0.660E+2,0.39844000E+1,0.00000000E+0 - ,0.16653800E+3,0.406E+3,0.670E+2,0.39844000E+1,0.00000000E+0 - ,0.16307020E+3,0.406E+3,0.680E+2,0.39844000E+1,0.00000000E+0 - ,0.16000710E+3,0.406E+3,0.690E+2,0.39844000E+1,0.00000000E+0 - ,0.15788900E+3,0.406E+3,0.700E+2,0.39844000E+1,0.00000000E+0 - ,0.13608820E+3,0.406E+3,0.710E+2,0.39844000E+1,0.00000000E+0 - ,0.13729240E+3,0.406E+3,0.720E+2,0.39844000E+1,0.00000000E+0 - ,0.12762070E+3,0.406E+3,0.730E+2,0.39844000E+1,0.00000000E+0 - ,0.10983770E+3,0.406E+3,0.740E+2,0.39844000E+1,0.00000000E+0 - ,0.11232740E+3,0.406E+3,0.750E+2,0.39844000E+1,0.00000000E+0 - ,0.10346160E+3,0.406E+3,0.760E+2,0.39844000E+1,0.00000000E+0 - ,0.96033300E+2,0.406E+3,0.770E+2,0.39844000E+1,0.00000000E+0 - ,0.81236300E+2,0.406E+3,0.780E+2,0.39844000E+1,0.00000000E+0 - ,0.76428200E+2,0.406E+3,0.790E+2,0.39844000E+1,0.00000000E+0 - ,0.78850000E+2,0.406E+3,0.800E+2,0.39844000E+1,0.00000000E+0 - ,0.10789760E+3,0.406E+3,0.810E+2,0.39844000E+1,0.00000000E+0 - ,0.10736650E+3,0.406E+3,0.820E+2,0.39844000E+1,0.00000000E+0 - ,0.10105710E+3,0.406E+3,0.830E+2,0.39844000E+1,0.00000000E+0 - ,0.97833200E+2,0.406E+3,0.840E+2,0.39844000E+1,0.00000000E+0 - ,0.91999000E+2,0.406E+3,0.850E+2,0.39844000E+1,0.00000000E+0 - ,0.85843200E+2,0.406E+3,0.860E+2,0.39844000E+1,0.00000000E+0 - ,0.23075540E+3,0.406E+3,0.870E+2,0.39844000E+1,0.00000000E+0 - ,0.22882200E+3,0.406E+3,0.880E+2,0.39844000E+1,0.00000000E+0 - ,0.20694660E+3,0.406E+3,0.890E+2,0.39844000E+1,0.00000000E+0 - ,0.19164430E+3,0.406E+3,0.900E+2,0.39844000E+1,0.00000000E+0 - ,0.18809650E+3,0.406E+3,0.910E+2,0.39844000E+1,0.00000000E+0 - ,0.18230090E+3,0.406E+3,0.920E+2,0.39844000E+1,0.00000000E+0 - ,0.18437780E+3,0.406E+3,0.930E+2,0.39844000E+1,0.00000000E+0 - ,0.17908370E+3,0.406E+3,0.940E+2,0.39844000E+1,0.00000000E+0 - ,0.11329900E+2,0.406E+3,0.101E+3,0.39844000E+1,0.00000000E+0 - ,0.33215800E+2,0.406E+3,0.103E+3,0.39844000E+1,0.98650000E+0 - ,0.43062000E+2,0.406E+3,0.104E+3,0.39844000E+1,0.98080000E+0 - ,0.34999000E+2,0.406E+3,0.105E+3,0.39844000E+1,0.97060000E+0 - ,0.27520600E+2,0.406E+3,0.106E+3,0.39844000E+1,0.98680000E+0 - ,0.20046800E+2,0.406E+3,0.107E+3,0.39844000E+1,0.99440000E+0 - ,0.15175100E+2,0.406E+3,0.108E+3,0.39844000E+1,0.99250000E+0 - ,0.10939100E+2,0.406E+3,0.109E+3,0.39844000E+1,0.99820000E+0 - ,0.48162200E+2,0.406E+3,0.111E+3,0.39844000E+1,0.96840000E+0 - ,0.74002800E+2,0.406E+3,0.112E+3,0.39844000E+1,0.96280000E+0 - ,0.77136200E+2,0.406E+3,0.113E+3,0.39844000E+1,0.96480000E+0 - ,0.64967200E+2,0.406E+3,0.114E+3,0.39844000E+1,0.95070000E+0 - ,0.55237500E+2,0.406E+3,0.115E+3,0.39844000E+1,0.99470000E+0 - ,0.48022100E+2,0.406E+3,0.116E+3,0.39844000E+1,0.99480000E+0 - ,0.40420900E+2,0.406E+3,0.117E+3,0.39844000E+1,0.99720000E+0 - ,0.69043400E+2,0.406E+3,0.119E+3,0.39844000E+1,0.97670000E+0 - ,0.12207070E+3,0.406E+3,0.120E+3,0.39844000E+1,0.98310000E+0 - ,0.71085400E+2,0.406E+3,0.121E+3,0.39844000E+1,0.18627000E+1 - ,0.68829700E+2,0.406E+3,0.122E+3,0.39844000E+1,0.18299000E+1 - ,0.67438300E+2,0.406E+3,0.123E+3,0.39844000E+1,0.19138000E+1 - ,0.66556800E+2,0.406E+3,0.124E+3,0.39844000E+1,0.18269000E+1 - ,0.62393100E+2,0.406E+3,0.125E+3,0.39844000E+1,0.16406000E+1 - ,0.58177600E+2,0.406E+3,0.126E+3,0.39844000E+1,0.16483000E+1 - ,0.55565400E+2,0.406E+3,0.127E+3,0.39844000E+1,0.17149000E+1 - ,0.54239700E+2,0.406E+3,0.128E+3,0.39844000E+1,0.17937000E+1 - ,0.52798400E+2,0.406E+3,0.129E+3,0.39844000E+1,0.95760000E+0 - ,0.50885600E+2,0.406E+3,0.130E+3,0.39844000E+1,0.19419000E+1 - ,0.78050500E+2,0.406E+3,0.131E+3,0.39844000E+1,0.96010000E+0 - ,0.71014300E+2,0.406E+3,0.132E+3,0.39844000E+1,0.94340000E+0 - ,0.65441400E+2,0.406E+3,0.133E+3,0.39844000E+1,0.98890000E+0 - ,0.61004100E+2,0.406E+3,0.134E+3,0.39844000E+1,0.99010000E+0 - ,0.55002900E+2,0.406E+3,0.135E+3,0.39844000E+1,0.99740000E+0 - ,0.83241800E+2,0.406E+3,0.137E+3,0.39844000E+1,0.97380000E+0 - ,0.14851410E+3,0.406E+3,0.138E+3,0.39844000E+1,0.98010000E+0 - ,0.11976540E+3,0.406E+3,0.139E+3,0.39844000E+1,0.19153000E+1 - ,0.94117300E+2,0.406E+3,0.140E+3,0.39844000E+1,0.19355000E+1 - ,0.95000900E+2,0.406E+3,0.141E+3,0.39844000E+1,0.19545000E+1 - ,0.89422900E+2,0.406E+3,0.142E+3,0.39844000E+1,0.19420000E+1 - ,0.97841700E+2,0.406E+3,0.143E+3,0.39844000E+1,0.16682000E+1 - ,0.79575000E+2,0.406E+3,0.144E+3,0.39844000E+1,0.18584000E+1 - ,0.74728700E+2,0.406E+3,0.145E+3,0.39844000E+1,0.19003000E+1 - ,0.69773000E+2,0.406E+3,0.146E+3,0.39844000E+1,0.18630000E+1 - ,0.67307000E+2,0.406E+3,0.147E+3,0.39844000E+1,0.96790000E+0 - ,0.67402800E+2,0.406E+3,0.148E+3,0.39844000E+1,0.19539000E+1 - ,0.99752200E+2,0.406E+3,0.149E+3,0.39844000E+1,0.96330000E+0 - ,0.92802100E+2,0.406E+3,0.150E+3,0.39844000E+1,0.95140000E+0 - ,0.88743400E+2,0.406E+3,0.151E+3,0.39844000E+1,0.97490000E+0 - ,0.85265700E+2,0.406E+3,0.152E+3,0.39844000E+1,0.98110000E+0 - ,0.79371600E+2,0.406E+3,0.153E+3,0.39844000E+1,0.99680000E+0 - ,0.10047420E+3,0.406E+3,0.155E+3,0.39844000E+1,0.99090000E+0 - ,0.19124940E+3,0.406E+3,0.156E+3,0.39844000E+1,0.97970000E+0 - ,0.15114110E+3,0.406E+3,0.157E+3,0.39844000E+1,0.19373000E+1 - ,0.10329330E+3,0.406E+3,0.159E+3,0.39844000E+1,0.29425000E+1 - ,0.10119170E+3,0.406E+3,0.160E+3,0.39844000E+1,0.29455000E+1 - ,0.98146700E+2,0.406E+3,0.161E+3,0.39844000E+1,0.29413000E+1 - ,0.98227000E+2,0.406E+3,0.162E+3,0.39844000E+1,0.29300000E+1 - ,0.93519300E+2,0.406E+3,0.163E+3,0.39844000E+1,0.18286000E+1 - ,0.98621300E+2,0.406E+3,0.164E+3,0.39844000E+1,0.28732000E+1 - ,0.93007000E+2,0.406E+3,0.165E+3,0.39844000E+1,0.29086000E+1 - ,0.93977100E+2,0.406E+3,0.166E+3,0.39844000E+1,0.28965000E+1 - ,0.88582200E+2,0.406E+3,0.167E+3,0.39844000E+1,0.29242000E+1 - ,0.86174300E+2,0.406E+3,0.168E+3,0.39844000E+1,0.29282000E+1 - ,0.85510700E+2,0.406E+3,0.169E+3,0.39844000E+1,0.29246000E+1 - ,0.89191500E+2,0.406E+3,0.170E+3,0.39844000E+1,0.28482000E+1 - ,0.82798600E+2,0.406E+3,0.171E+3,0.39844000E+1,0.29219000E+1 - ,0.10701830E+3,0.406E+3,0.172E+3,0.39844000E+1,0.19254000E+1 - ,0.10110190E+3,0.406E+3,0.173E+3,0.39844000E+1,0.19459000E+1 - ,0.93960100E+2,0.406E+3,0.174E+3,0.39844000E+1,0.19292000E+1 - ,0.93667200E+2,0.406E+3,0.175E+3,0.39844000E+1,0.18104000E+1 - ,0.85392500E+2,0.406E+3,0.176E+3,0.39844000E+1,0.18858000E+1 - ,0.80955200E+2,0.406E+3,0.177E+3,0.39844000E+1,0.18648000E+1 - ,0.77699700E+2,0.406E+3,0.178E+3,0.39844000E+1,0.19188000E+1 - ,0.74376300E+2,0.406E+3,0.179E+3,0.39844000E+1,0.98460000E+0 - ,0.72783200E+2,0.406E+3,0.180E+3,0.39844000E+1,0.19896000E+1 - ,0.10824170E+3,0.406E+3,0.181E+3,0.39844000E+1,0.92670000E+0 - ,0.10128820E+3,0.406E+3,0.182E+3,0.39844000E+1,0.93830000E+0 - ,0.99667900E+2,0.406E+3,0.183E+3,0.39844000E+1,0.98200000E+0 - ,0.98057500E+2,0.406E+3,0.184E+3,0.39844000E+1,0.98150000E+0 - ,0.93106900E+2,0.406E+3,0.185E+3,0.39844000E+1,0.99540000E+0 - ,0.11330310E+3,0.406E+3,0.187E+3,0.39844000E+1,0.97050000E+0 - ,0.19337770E+3,0.406E+3,0.188E+3,0.39844000E+1,0.96620000E+0 - ,0.12204020E+3,0.406E+3,0.189E+3,0.39844000E+1,0.29070000E+1 - ,0.13787680E+3,0.406E+3,0.190E+3,0.39844000E+1,0.28844000E+1 - ,0.12470980E+3,0.406E+3,0.191E+3,0.39844000E+1,0.28738000E+1 - ,0.11209800E+3,0.406E+3,0.192E+3,0.39844000E+1,0.28878000E+1 - ,0.10834540E+3,0.406E+3,0.193E+3,0.39844000E+1,0.29095000E+1 - ,0.12418240E+3,0.406E+3,0.194E+3,0.39844000E+1,0.19209000E+1 - ,0.29881900E+2,0.406E+3,0.204E+3,0.39844000E+1,0.19697000E+1 - ,0.29891600E+2,0.406E+3,0.205E+3,0.39844000E+1,0.19441000E+1 - ,0.22951700E+2,0.406E+3,0.206E+3,0.39844000E+1,0.19985000E+1 - ,0.18917200E+2,0.406E+3,0.207E+3,0.39844000E+1,0.20143000E+1 - ,0.13552500E+2,0.406E+3,0.208E+3,0.39844000E+1,0.19887000E+1 - ,0.51352500E+2,0.406E+3,0.212E+3,0.39844000E+1,0.19496000E+1 - ,0.61961000E+2,0.406E+3,0.213E+3,0.39844000E+1,0.19311000E+1 - ,0.60868700E+2,0.406E+3,0.214E+3,0.39844000E+1,0.19435000E+1 - ,0.54394100E+2,0.406E+3,0.215E+3,0.39844000E+1,0.20102000E+1 - ,0.47094300E+2,0.406E+3,0.216E+3,0.39844000E+1,0.19903000E+1 - ,0.72552400E+2,0.406E+3,0.220E+3,0.39844000E+1,0.19349000E+1 - ,0.70967000E+2,0.406E+3,0.221E+3,0.39844000E+1,0.28999000E+1 - ,0.71959500E+2,0.406E+3,0.222E+3,0.39844000E+1,0.38675000E+1 - ,0.65947300E+2,0.406E+3,0.223E+3,0.39844000E+1,0.29110000E+1 - ,0.51461000E+2,0.406E+3,0.224E+3,0.39844000E+1,0.10619100E+2 - ,0.44917900E+2,0.406E+3,0.225E+3,0.39844000E+1,0.98849000E+1 - ,0.43990200E+2,0.406E+3,0.226E+3,0.39844000E+1,0.91376000E+1 - ,0.49914800E+2,0.406E+3,0.227E+3,0.39844000E+1,0.29263000E+1 - ,0.46907100E+2,0.406E+3,0.228E+3,0.39844000E+1,0.65458000E+1 - ,0.63911700E+2,0.406E+3,0.231E+3,0.39844000E+1,0.19315000E+1 - ,0.68034300E+2,0.406E+3,0.232E+3,0.39844000E+1,0.19447000E+1 - ,0.63962100E+2,0.406E+3,0.233E+3,0.39844000E+1,0.19793000E+1 - ,0.60572300E+2,0.406E+3,0.234E+3,0.39844000E+1,0.19812000E+1 - ,0.87389100E+2,0.406E+3,0.238E+3,0.39844000E+1,0.19143000E+1 - ,0.85966800E+2,0.406E+3,0.239E+3,0.39844000E+1,0.28903000E+1 - ,0.87311600E+2,0.406E+3,0.240E+3,0.39844000E+1,0.39106000E+1 - ,0.84504100E+2,0.406E+3,0.241E+3,0.39844000E+1,0.29225000E+1 - ,0.76386900E+2,0.406E+3,0.242E+3,0.39844000E+1,0.11055600E+2 - ,0.68623700E+2,0.406E+3,0.243E+3,0.39844000E+1,0.95402000E+1 - ,0.65290500E+2,0.406E+3,0.244E+3,0.39844000E+1,0.88895000E+1 - ,0.65394900E+2,0.406E+3,0.245E+3,0.39844000E+1,0.29696000E+1 - ,0.67836300E+2,0.406E+3,0.246E+3,0.39844000E+1,0.57095000E+1 - ,0.83227000E+2,0.406E+3,0.249E+3,0.39844000E+1,0.19378000E+1 - ,0.90268300E+2,0.406E+3,0.250E+3,0.39844000E+1,0.19505000E+1 - ,0.86757400E+2,0.406E+3,0.251E+3,0.39844000E+1,0.19523000E+1 - ,0.84742500E+2,0.406E+3,0.252E+3,0.39844000E+1,0.19639000E+1 - ,0.10658000E+3,0.406E+3,0.256E+3,0.39844000E+1,0.18467000E+1 - ,0.11146330E+3,0.406E+3,0.257E+3,0.39844000E+1,0.29175000E+1 - ,0.84445100E+2,0.406E+3,0.272E+3,0.39844000E+1,0.38840000E+1 - ,0.87680900E+2,0.406E+3,0.273E+3,0.39844000E+1,0.28988000E+1 - ,0.83080500E+2,0.406E+3,0.274E+3,0.39844000E+1,0.10915300E+2 - ,0.76686700E+2,0.406E+3,0.275E+3,0.39844000E+1,0.98054000E+1 - ,0.73066600E+2,0.406E+3,0.276E+3,0.39844000E+1,0.91527000E+1 - ,0.73485300E+2,0.406E+3,0.277E+3,0.39844000E+1,0.29424000E+1 - ,0.77012400E+2,0.406E+3,0.278E+3,0.39844000E+1,0.66669000E+1 - ,0.90346700E+2,0.406E+3,0.281E+3,0.39844000E+1,0.19302000E+1 - ,0.95397300E+2,0.406E+3,0.282E+3,0.39844000E+1,0.19356000E+1 - ,0.97851700E+2,0.406E+3,0.283E+3,0.39844000E+1,0.19655000E+1 - ,0.97881700E+2,0.406E+3,0.284E+3,0.39844000E+1,0.19639000E+1 - ,0.11758210E+3,0.406E+3,0.288E+3,0.39844000E+1,0.18075000E+1 - ,0.23621000E+2,0.406E+3,0.305E+3,0.39844000E+1,0.29128000E+1 - ,0.21537700E+2,0.406E+3,0.306E+3,0.39844000E+1,0.29987000E+1 - ,0.16816900E+2,0.406E+3,0.307E+3,0.39844000E+1,0.29903000E+1 - ,0.50039700E+2,0.406E+3,0.313E+3,0.39844000E+1,0.29146000E+1 - ,0.59158300E+2,0.406E+3,0.314E+3,0.39844000E+1,0.29407000E+1 - ,0.51004800E+2,0.406E+3,0.315E+3,0.39844000E+1,0.29859000E+1 - ,0.45389100E+2,0.406E+3,0.327E+3,0.39844000E+1,0.77785000E+1 - ,0.48414900E+2,0.406E+3,0.328E+3,0.39844000E+1,0.62918000E+1 - ,0.53961700E+2,0.406E+3,0.331E+3,0.39844000E+1,0.29233000E+1 - ,0.61903800E+2,0.406E+3,0.332E+3,0.39844000E+1,0.29186000E+1 - ,0.61943800E+2,0.406E+3,0.333E+3,0.39844000E+1,0.29709000E+1 - ,0.72970300E+2,0.406E+3,0.349E+3,0.39844000E+1,0.29353000E+1 - ,0.82717000E+2,0.406E+3,0.350E+3,0.39844000E+1,0.29259000E+1 - ,0.84217700E+2,0.406E+3,0.351E+3,0.39844000E+1,0.29315000E+1 - ,0.82282500E+2,0.406E+3,0.381E+3,0.39844000E+1,0.29420000E+1 - ,0.94131500E+2,0.406E+3,0.382E+3,0.39844000E+1,0.29081000E+1 - ,0.95601800E+2,0.406E+3,0.383E+3,0.39844000E+1,0.29500000E+1 - ,0.22379700E+2,0.406E+3,0.405E+3,0.39844000E+1,0.45856000E+1 - ,0.18206700E+2,0.406E+3,0.406E+3,0.39844000E+1,0.39844000E+1 - ,0.21006400E+2,0.414E+3,0.100E+1,0.38677000E+1,0.91180000E+0 - ,0.13854700E+2,0.414E+3,0.200E+1,0.38677000E+1,0.00000000E+0 - ,0.30879530E+3,0.414E+3,0.300E+1,0.38677000E+1,0.00000000E+0 - ,0.18425660E+3,0.414E+3,0.400E+1,0.38677000E+1,0.00000000E+0 - ,0.12577640E+3,0.414E+3,0.500E+1,0.38677000E+1,0.00000000E+0 - ,0.85522300E+2,0.414E+3,0.600E+1,0.38677000E+1,0.00000000E+0 - ,0.59931900E+2,0.414E+3,0.700E+1,0.38677000E+1,0.00000000E+0 - ,0.45368800E+2,0.414E+3,0.800E+1,0.38677000E+1,0.00000000E+0 - ,0.34318700E+2,0.414E+3,0.900E+1,0.38677000E+1,0.00000000E+0 - ,0.26335800E+2,0.414E+3,0.100E+2,0.38677000E+1,0.00000000E+0 - ,0.36977170E+3,0.414E+3,0.110E+2,0.38677000E+1,0.00000000E+0 - ,0.29187160E+3,0.414E+3,0.120E+2,0.38677000E+1,0.00000000E+0 - ,0.27132020E+3,0.414E+3,0.130E+2,0.38677000E+1,0.00000000E+0 - ,0.21589980E+3,0.414E+3,0.140E+2,0.38677000E+1,0.00000000E+0 - ,0.16943560E+3,0.414E+3,0.150E+2,0.38677000E+1,0.00000000E+0 - ,0.14099550E+3,0.414E+3,0.160E+2,0.38677000E+1,0.00000000E+0 - ,0.11535420E+3,0.414E+3,0.170E+2,0.38677000E+1,0.00000000E+0 - ,0.94402700E+2,0.414E+3,0.180E+2,0.38677000E+1,0.00000000E+0 - ,0.60221160E+3,0.414E+3,0.190E+2,0.38677000E+1,0.00000000E+0 - ,0.50727030E+3,0.414E+3,0.200E+2,0.38677000E+1,0.00000000E+0 - ,0.42088950E+3,0.414E+3,0.210E+2,0.38677000E+1,0.00000000E+0 - ,0.40781600E+3,0.414E+3,0.220E+2,0.38677000E+1,0.00000000E+0 - ,0.37420690E+3,0.414E+3,0.230E+2,0.38677000E+1,0.00000000E+0 - ,0.29450370E+3,0.414E+3,0.240E+2,0.38677000E+1,0.00000000E+0 - ,0.32309480E+3,0.414E+3,0.250E+2,0.38677000E+1,0.00000000E+0 - ,0.25339650E+3,0.414E+3,0.260E+2,0.38677000E+1,0.00000000E+0 - ,0.27008810E+3,0.414E+3,0.270E+2,0.38677000E+1,0.00000000E+0 - ,0.27767940E+3,0.414E+3,0.280E+2,0.38677000E+1,0.00000000E+0 - ,0.21252810E+3,0.414E+3,0.290E+2,0.38677000E+1,0.00000000E+0 - ,0.21988700E+3,0.414E+3,0.300E+2,0.38677000E+1,0.00000000E+0 - ,0.26030910E+3,0.414E+3,0.310E+2,0.38677000E+1,0.00000000E+0 - ,0.23133020E+3,0.414E+3,0.320E+2,0.38677000E+1,0.00000000E+0 - ,0.19840790E+3,0.414E+3,0.330E+2,0.38677000E+1,0.00000000E+0 - ,0.17847990E+3,0.414E+3,0.340E+2,0.38677000E+1,0.00000000E+0 - ,0.15647810E+3,0.414E+3,0.350E+2,0.38677000E+1,0.00000000E+0 - ,0.13621020E+3,0.414E+3,0.360E+2,0.38677000E+1,0.00000000E+0 - ,0.67586350E+3,0.414E+3,0.370E+2,0.38677000E+1,0.00000000E+0 - ,0.60371340E+3,0.414E+3,0.380E+2,0.38677000E+1,0.00000000E+0 - ,0.53268760E+3,0.414E+3,0.390E+2,0.38677000E+1,0.00000000E+0 - ,0.48073180E+3,0.414E+3,0.400E+2,0.38677000E+1,0.00000000E+0 - ,0.43942810E+3,0.414E+3,0.410E+2,0.38677000E+1,0.00000000E+0 - ,0.34034780E+3,0.414E+3,0.420E+2,0.38677000E+1,0.00000000E+0 - ,0.37931480E+3,0.414E+3,0.430E+2,0.38677000E+1,0.00000000E+0 - ,0.28993610E+3,0.414E+3,0.440E+2,0.38677000E+1,0.00000000E+0 - ,0.31720640E+3,0.414E+3,0.450E+2,0.38677000E+1,0.00000000E+0 - ,0.29452200E+3,0.414E+3,0.460E+2,0.38677000E+1,0.00000000E+0 - ,0.24486850E+3,0.414E+3,0.470E+2,0.38677000E+1,0.00000000E+0 - ,0.25988150E+3,0.414E+3,0.480E+2,0.38677000E+1,0.00000000E+0 - ,0.32493450E+3,0.414E+3,0.490E+2,0.38677000E+1,0.00000000E+0 - ,0.30248790E+3,0.414E+3,0.500E+2,0.38677000E+1,0.00000000E+0 - ,0.27103870E+3,0.414E+3,0.510E+2,0.38677000E+1,0.00000000E+0 - ,0.25216040E+3,0.414E+3,0.520E+2,0.38677000E+1,0.00000000E+0 - ,0.22853700E+3,0.414E+3,0.530E+2,0.38677000E+1,0.00000000E+0 - ,0.20580950E+3,0.414E+3,0.540E+2,0.38677000E+1,0.00000000E+0 - ,0.82382010E+3,0.414E+3,0.550E+2,0.38677000E+1,0.00000000E+0 - ,0.76760950E+3,0.414E+3,0.560E+2,0.38677000E+1,0.00000000E+0 - ,0.67935020E+3,0.414E+3,0.570E+2,0.38677000E+1,0.00000000E+0 - ,0.31968540E+3,0.414E+3,0.580E+2,0.38677000E+1,0.27991000E+1 - ,0.68142510E+3,0.414E+3,0.590E+2,0.38677000E+1,0.00000000E+0 - ,0.65512090E+3,0.414E+3,0.600E+2,0.38677000E+1,0.00000000E+0 - ,0.63890630E+3,0.414E+3,0.610E+2,0.38677000E+1,0.00000000E+0 - ,0.62397630E+3,0.414E+3,0.620E+2,0.38677000E+1,0.00000000E+0 - ,0.61074860E+3,0.414E+3,0.630E+2,0.38677000E+1,0.00000000E+0 - ,0.48368880E+3,0.414E+3,0.640E+2,0.38677000E+1,0.00000000E+0 - ,0.53820120E+3,0.414E+3,0.650E+2,0.38677000E+1,0.00000000E+0 - ,0.51982010E+3,0.414E+3,0.660E+2,0.38677000E+1,0.00000000E+0 - ,0.55187870E+3,0.414E+3,0.670E+2,0.38677000E+1,0.00000000E+0 - ,0.54029010E+3,0.414E+3,0.680E+2,0.38677000E+1,0.00000000E+0 - ,0.52989220E+3,0.414E+3,0.690E+2,0.38677000E+1,0.00000000E+0 - ,0.52355130E+3,0.414E+3,0.700E+2,0.38677000E+1,0.00000000E+0 - ,0.44329500E+3,0.414E+3,0.710E+2,0.38677000E+1,0.00000000E+0 - ,0.43927910E+3,0.414E+3,0.720E+2,0.38677000E+1,0.00000000E+0 - ,0.40232530E+3,0.414E+3,0.730E+2,0.38677000E+1,0.00000000E+0 - ,0.34031200E+3,0.414E+3,0.740E+2,0.38677000E+1,0.00000000E+0 - ,0.34676670E+3,0.414E+3,0.750E+2,0.38677000E+1,0.00000000E+0 - ,0.31508760E+3,0.414E+3,0.760E+2,0.38677000E+1,0.00000000E+0 - ,0.28909700E+3,0.414E+3,0.770E+2,0.38677000E+1,0.00000000E+0 - ,0.24031030E+3,0.414E+3,0.780E+2,0.38677000E+1,0.00000000E+0 - ,0.22456090E+3,0.414E+3,0.790E+2,0.38677000E+1,0.00000000E+0 - ,0.23141000E+3,0.414E+3,0.800E+2,0.38677000E+1,0.00000000E+0 - ,0.33360810E+3,0.414E+3,0.810E+2,0.38677000E+1,0.00000000E+0 - ,0.32796730E+3,0.414E+3,0.820E+2,0.38677000E+1,0.00000000E+0 - ,0.30290300E+3,0.414E+3,0.830E+2,0.38677000E+1,0.00000000E+0 - ,0.28964470E+3,0.414E+3,0.840E+2,0.38677000E+1,0.00000000E+0 - ,0.26800240E+3,0.414E+3,0.850E+2,0.38677000E+1,0.00000000E+0 - ,0.24608550E+3,0.414E+3,0.860E+2,0.38677000E+1,0.00000000E+0 - ,0.78245740E+3,0.414E+3,0.870E+2,0.38677000E+1,0.00000000E+0 - ,0.76183620E+3,0.414E+3,0.880E+2,0.38677000E+1,0.00000000E+0 - ,0.67780430E+3,0.414E+3,0.890E+2,0.38677000E+1,0.00000000E+0 - ,0.61315740E+3,0.414E+3,0.900E+2,0.38677000E+1,0.00000000E+0 - ,0.60632200E+3,0.414E+3,0.910E+2,0.38677000E+1,0.00000000E+0 - ,0.58710090E+3,0.414E+3,0.920E+2,0.38677000E+1,0.00000000E+0 - ,0.60167790E+3,0.414E+3,0.930E+2,0.38677000E+1,0.00000000E+0 - ,0.58314710E+3,0.414E+3,0.940E+2,0.38677000E+1,0.00000000E+0 - ,0.33712600E+2,0.414E+3,0.101E+3,0.38677000E+1,0.00000000E+0 - ,0.10727210E+3,0.414E+3,0.103E+3,0.38677000E+1,0.98650000E+0 - ,0.13717830E+3,0.414E+3,0.104E+3,0.38677000E+1,0.98080000E+0 - ,0.10598260E+3,0.414E+3,0.105E+3,0.38677000E+1,0.97060000E+0 - ,0.80142700E+2,0.414E+3,0.106E+3,0.38677000E+1,0.98680000E+0 - ,0.55839400E+2,0.414E+3,0.107E+3,0.38677000E+1,0.99440000E+0 - ,0.40663500E+2,0.414E+3,0.108E+3,0.38677000E+1,0.99250000E+0 - ,0.27908600E+2,0.414E+3,0.109E+3,0.38677000E+1,0.99820000E+0 - ,0.15615450E+3,0.414E+3,0.111E+3,0.38677000E+1,0.96840000E+0 - ,0.24139030E+3,0.414E+3,0.112E+3,0.38677000E+1,0.96280000E+0 - ,0.24630130E+3,0.414E+3,0.113E+3,0.38677000E+1,0.96480000E+0 - ,0.19975300E+3,0.414E+3,0.114E+3,0.38677000E+1,0.95070000E+0 - ,0.16446690E+3,0.414E+3,0.115E+3,0.38677000E+1,0.99470000E+0 - ,0.13940860E+3,0.414E+3,0.116E+3,0.38677000E+1,0.99480000E+0 - ,0.11413580E+3,0.414E+3,0.117E+3,0.38677000E+1,0.99720000E+0 - ,0.21587970E+3,0.414E+3,0.119E+3,0.38677000E+1,0.97670000E+0 - ,0.40567650E+3,0.414E+3,0.120E+3,0.38677000E+1,0.98310000E+0 - ,0.21796280E+3,0.414E+3,0.121E+3,0.38677000E+1,0.18627000E+1 - ,0.21039040E+3,0.414E+3,0.122E+3,0.38677000E+1,0.18299000E+1 - ,0.20610620E+3,0.414E+3,0.123E+3,0.38677000E+1,0.19138000E+1 - ,0.20396330E+3,0.414E+3,0.124E+3,0.38677000E+1,0.18269000E+1 - ,0.18858340E+3,0.414E+3,0.125E+3,0.38677000E+1,0.16406000E+1 - ,0.17467580E+3,0.414E+3,0.126E+3,0.38677000E+1,0.16483000E+1 - ,0.16656740E+3,0.414E+3,0.127E+3,0.38677000E+1,0.17149000E+1 - ,0.16276320E+3,0.414E+3,0.128E+3,0.38677000E+1,0.17937000E+1 - ,0.16019460E+3,0.414E+3,0.129E+3,0.38677000E+1,0.95760000E+0 - ,0.15131410E+3,0.414E+3,0.130E+3,0.38677000E+1,0.19419000E+1 - ,0.24494460E+3,0.414E+3,0.131E+3,0.38677000E+1,0.96010000E+0 - ,0.21672460E+3,0.414E+3,0.132E+3,0.38677000E+1,0.94340000E+0 - ,0.19508440E+3,0.414E+3,0.133E+3,0.38677000E+1,0.98890000E+0 - ,0.17853020E+3,0.414E+3,0.134E+3,0.38677000E+1,0.99010000E+0 - ,0.15754230E+3,0.414E+3,0.135E+3,0.38677000E+1,0.99740000E+0 - ,0.25790200E+3,0.414E+3,0.137E+3,0.38677000E+1,0.97380000E+0 - ,0.49295740E+3,0.414E+3,0.138E+3,0.38677000E+1,0.98010000E+0 - ,0.38205370E+3,0.414E+3,0.139E+3,0.38677000E+1,0.19153000E+1 - ,0.28794440E+3,0.414E+3,0.140E+3,0.38677000E+1,0.19355000E+1 - ,0.29066410E+3,0.414E+3,0.141E+3,0.38677000E+1,0.19545000E+1 - ,0.27129600E+3,0.414E+3,0.142E+3,0.38677000E+1,0.19420000E+1 - ,0.30236440E+3,0.414E+3,0.143E+3,0.38677000E+1,0.16682000E+1 - ,0.23727980E+3,0.414E+3,0.144E+3,0.38677000E+1,0.18584000E+1 - ,0.22191000E+3,0.414E+3,0.145E+3,0.38677000E+1,0.19003000E+1 - ,0.20606750E+3,0.414E+3,0.146E+3,0.38677000E+1,0.18630000E+1 - ,0.19915530E+3,0.414E+3,0.147E+3,0.38677000E+1,0.96790000E+0 - ,0.19779040E+3,0.414E+3,0.148E+3,0.38677000E+1,0.19539000E+1 - ,0.31041220E+3,0.414E+3,0.149E+3,0.38677000E+1,0.96330000E+0 - ,0.28266840E+3,0.414E+3,0.150E+3,0.38677000E+1,0.95140000E+0 - ,0.26580530E+3,0.414E+3,0.151E+3,0.38677000E+1,0.97490000E+0 - ,0.25202720E+3,0.414E+3,0.152E+3,0.38677000E+1,0.98110000E+0 - ,0.23068720E+3,0.414E+3,0.153E+3,0.38677000E+1,0.99680000E+0 - ,0.30678390E+3,0.414E+3,0.155E+3,0.38677000E+1,0.99090000E+0 - ,0.63715160E+3,0.414E+3,0.156E+3,0.38677000E+1,0.97970000E+0 - ,0.48296010E+3,0.414E+3,0.157E+3,0.38677000E+1,0.19373000E+1 - ,0.31010960E+3,0.414E+3,0.159E+3,0.38677000E+1,0.29425000E+1 - ,0.30369930E+3,0.414E+3,0.160E+3,0.38677000E+1,0.29455000E+1 - ,0.29412610E+3,0.414E+3,0.161E+3,0.38677000E+1,0.29413000E+1 - ,0.29533450E+3,0.414E+3,0.162E+3,0.38677000E+1,0.29300000E+1 - ,0.28374430E+3,0.414E+3,0.163E+3,0.38677000E+1,0.18286000E+1 - ,0.29720650E+3,0.414E+3,0.164E+3,0.38677000E+1,0.28732000E+1 - ,0.27927050E+3,0.414E+3,0.165E+3,0.38677000E+1,0.29086000E+1 - ,0.28372210E+3,0.414E+3,0.166E+3,0.38677000E+1,0.28965000E+1 - ,0.26527330E+3,0.414E+3,0.167E+3,0.38677000E+1,0.29242000E+1 - ,0.25777900E+3,0.414E+3,0.168E+3,0.38677000E+1,0.29282000E+1 - ,0.25608900E+3,0.414E+3,0.169E+3,0.38677000E+1,0.29246000E+1 - ,0.26901820E+3,0.414E+3,0.170E+3,0.38677000E+1,0.28482000E+1 - ,0.24764990E+3,0.414E+3,0.171E+3,0.38677000E+1,0.29219000E+1 - ,0.33234580E+3,0.414E+3,0.172E+3,0.38677000E+1,0.19254000E+1 - ,0.30938790E+3,0.414E+3,0.173E+3,0.38677000E+1,0.19459000E+1 - ,0.28312170E+3,0.414E+3,0.174E+3,0.38677000E+1,0.19292000E+1 - ,0.28556720E+3,0.414E+3,0.175E+3,0.38677000E+1,0.18104000E+1 - ,0.25178560E+3,0.414E+3,0.176E+3,0.38677000E+1,0.18858000E+1 - ,0.23694270E+3,0.414E+3,0.177E+3,0.38677000E+1,0.18648000E+1 - ,0.22631410E+3,0.414E+3,0.178E+3,0.38677000E+1,0.19188000E+1 - ,0.21617050E+3,0.414E+3,0.179E+3,0.38677000E+1,0.98460000E+0 - ,0.20948600E+3,0.414E+3,0.180E+3,0.38677000E+1,0.19896000E+1 - ,0.33326920E+3,0.414E+3,0.181E+3,0.38677000E+1,0.92670000E+0 - ,0.30567610E+3,0.414E+3,0.182E+3,0.38677000E+1,0.93830000E+0 - ,0.29742190E+3,0.414E+3,0.183E+3,0.38677000E+1,0.98200000E+0 - ,0.28985610E+3,0.414E+3,0.184E+3,0.38677000E+1,0.98150000E+0 - ,0.27129160E+3,0.414E+3,0.185E+3,0.38677000E+1,0.99540000E+0 - ,0.34569720E+3,0.414E+3,0.187E+3,0.38677000E+1,0.97050000E+0 - ,0.63670530E+3,0.414E+3,0.188E+3,0.38677000E+1,0.96620000E+0 - ,0.36700470E+3,0.414E+3,0.189E+3,0.38677000E+1,0.29070000E+1 - ,0.42126010E+3,0.414E+3,0.190E+3,0.38677000E+1,0.28844000E+1 - ,0.37698280E+3,0.414E+3,0.191E+3,0.38677000E+1,0.28738000E+1 - ,0.33444420E+3,0.414E+3,0.192E+3,0.38677000E+1,0.28878000E+1 - ,0.32204370E+3,0.414E+3,0.193E+3,0.38677000E+1,0.29095000E+1 - ,0.38313380E+3,0.414E+3,0.194E+3,0.38677000E+1,0.19209000E+1 - ,0.90695600E+2,0.414E+3,0.204E+3,0.38677000E+1,0.19697000E+1 - ,0.89119000E+2,0.414E+3,0.205E+3,0.38677000E+1,0.19441000E+1 - ,0.65487900E+2,0.414E+3,0.206E+3,0.38677000E+1,0.19985000E+1 - ,0.52413600E+2,0.414E+3,0.207E+3,0.38677000E+1,0.20143000E+1 - ,0.35824700E+2,0.414E+3,0.208E+3,0.38677000E+1,0.19887000E+1 - ,0.15991150E+3,0.414E+3,0.212E+3,0.38677000E+1,0.19496000E+1 - ,0.19305340E+3,0.414E+3,0.213E+3,0.38677000E+1,0.19311000E+1 - ,0.18599960E+3,0.414E+3,0.214E+3,0.38677000E+1,0.19435000E+1 - ,0.16212890E+3,0.414E+3,0.215E+3,0.38677000E+1,0.20102000E+1 - ,0.13657580E+3,0.414E+3,0.216E+3,0.38677000E+1,0.19903000E+1 - ,0.22361620E+3,0.414E+3,0.220E+3,0.38677000E+1,0.19349000E+1 - ,0.21570270E+3,0.414E+3,0.221E+3,0.38677000E+1,0.28999000E+1 - ,0.21838960E+3,0.414E+3,0.222E+3,0.38677000E+1,0.38675000E+1 - ,0.19966610E+3,0.414E+3,0.223E+3,0.38677000E+1,0.29110000E+1 - ,0.15083440E+3,0.414E+3,0.224E+3,0.38677000E+1,0.10619100E+2 - ,0.12933240E+3,0.414E+3,0.225E+3,0.38677000E+1,0.98849000E+1 - ,0.12689320E+3,0.414E+3,0.226E+3,0.38677000E+1,0.91376000E+1 - ,0.14822590E+3,0.414E+3,0.227E+3,0.38677000E+1,0.29263000E+1 - ,0.13826350E+3,0.414E+3,0.228E+3,0.38677000E+1,0.65458000E+1 - ,0.19524610E+3,0.414E+3,0.231E+3,0.38677000E+1,0.19315000E+1 - ,0.20652060E+3,0.414E+3,0.232E+3,0.38677000E+1,0.19447000E+1 - ,0.19004830E+3,0.414E+3,0.233E+3,0.38677000E+1,0.19793000E+1 - ,0.17712870E+3,0.414E+3,0.234E+3,0.38677000E+1,0.19812000E+1 - ,0.26785250E+3,0.414E+3,0.238E+3,0.38677000E+1,0.19143000E+1 - ,0.25910620E+3,0.414E+3,0.239E+3,0.38677000E+1,0.28903000E+1 - ,0.26164690E+3,0.414E+3,0.240E+3,0.38677000E+1,0.39106000E+1 - ,0.25270610E+3,0.414E+3,0.241E+3,0.38677000E+1,0.29225000E+1 - ,0.22395860E+3,0.414E+3,0.242E+3,0.38677000E+1,0.11055600E+2 - ,0.19799630E+3,0.414E+3,0.243E+3,0.38677000E+1,0.95402000E+1 - ,0.18716590E+3,0.414E+3,0.244E+3,0.38677000E+1,0.88895000E+1 - ,0.19002130E+3,0.414E+3,0.245E+3,0.38677000E+1,0.29696000E+1 - ,0.19842220E+3,0.414E+3,0.246E+3,0.38677000E+1,0.57095000E+1 - ,0.25147160E+3,0.414E+3,0.249E+3,0.38677000E+1,0.19378000E+1 - ,0.27356280E+3,0.414E+3,0.250E+3,0.38677000E+1,0.19505000E+1 - ,0.25871400E+3,0.414E+3,0.251E+3,0.38677000E+1,0.19523000E+1 - ,0.25005790E+3,0.414E+3,0.252E+3,0.38677000E+1,0.19639000E+1 - ,0.32429550E+3,0.414E+3,0.256E+3,0.38677000E+1,0.18467000E+1 - ,0.33722250E+3,0.414E+3,0.257E+3,0.38677000E+1,0.29175000E+1 - ,0.25084450E+3,0.414E+3,0.272E+3,0.38677000E+1,0.38840000E+1 - ,0.26138080E+3,0.414E+3,0.273E+3,0.38677000E+1,0.28988000E+1 - ,0.24338630E+3,0.414E+3,0.274E+3,0.38677000E+1,0.10915300E+2 - ,0.22137160E+3,0.414E+3,0.275E+3,0.38677000E+1,0.98054000E+1 - ,0.20849420E+3,0.414E+3,0.276E+3,0.38677000E+1,0.91527000E+1 - ,0.21188810E+3,0.414E+3,0.277E+3,0.38677000E+1,0.29424000E+1 - ,0.22292680E+3,0.414E+3,0.278E+3,0.38677000E+1,0.66669000E+1 - ,0.26896090E+3,0.414E+3,0.281E+3,0.38677000E+1,0.19302000E+1 - ,0.28451810E+3,0.414E+3,0.282E+3,0.38677000E+1,0.19356000E+1 - ,0.29053760E+3,0.414E+3,0.283E+3,0.38677000E+1,0.19655000E+1 - ,0.28876380E+3,0.414E+3,0.284E+3,0.38677000E+1,0.19639000E+1 - ,0.35718170E+3,0.414E+3,0.288E+3,0.38677000E+1,0.18075000E+1 - ,0.68110600E+2,0.414E+3,0.305E+3,0.38677000E+1,0.29128000E+1 - ,0.61216900E+2,0.414E+3,0.306E+3,0.38677000E+1,0.29987000E+1 - ,0.46103100E+2,0.414E+3,0.307E+3,0.38677000E+1,0.29903000E+1 - ,0.15146030E+3,0.414E+3,0.313E+3,0.38677000E+1,0.29146000E+1 - ,0.18102370E+3,0.414E+3,0.314E+3,0.38677000E+1,0.29407000E+1 - ,0.15063080E+3,0.414E+3,0.315E+3,0.38677000E+1,0.29859000E+1 - ,0.13228840E+3,0.414E+3,0.327E+3,0.38677000E+1,0.77785000E+1 - ,0.14466440E+3,0.414E+3,0.328E+3,0.38677000E+1,0.62918000E+1 - ,0.16060910E+3,0.414E+3,0.331E+3,0.38677000E+1,0.29233000E+1 - ,0.18547740E+3,0.414E+3,0.332E+3,0.38677000E+1,0.29186000E+1 - ,0.18319150E+3,0.414E+3,0.333E+3,0.38677000E+1,0.29709000E+1 - ,0.21524240E+3,0.414E+3,0.349E+3,0.38677000E+1,0.29353000E+1 - ,0.24705720E+3,0.414E+3,0.350E+3,0.38677000E+1,0.29259000E+1 - ,0.24975520E+3,0.414E+3,0.351E+3,0.38677000E+1,0.29315000E+1 - ,0.24045180E+3,0.414E+3,0.381E+3,0.38677000E+1,0.29420000E+1 - ,0.27943950E+3,0.414E+3,0.382E+3,0.38677000E+1,0.29081000E+1 - ,0.28220780E+3,0.414E+3,0.383E+3,0.38677000E+1,0.29500000E+1 - ,0.64108300E+2,0.414E+3,0.405E+3,0.38677000E+1,0.45856000E+1 - ,0.50205300E+2,0.414E+3,0.406E+3,0.38677000E+1,0.39844000E+1 - ,0.14977340E+3,0.414E+3,0.414E+3,0.38677000E+1,0.38677000E+1 - ,0.23178400E+2,0.432E+3,0.100E+1,0.38972000E+1,0.91180000E+0 - ,0.15480100E+2,0.432E+3,0.200E+1,0.38972000E+1,0.00000000E+0 - ,0.33056660E+3,0.432E+3,0.300E+1,0.38972000E+1,0.00000000E+0 - ,0.19940340E+3,0.432E+3,0.400E+1,0.38972000E+1,0.00000000E+0 - ,0.13726170E+3,0.432E+3,0.500E+1,0.38972000E+1,0.00000000E+0 - ,0.94035700E+2,0.432E+3,0.600E+1,0.38972000E+1,0.00000000E+0 - ,0.66329300E+2,0.432E+3,0.700E+1,0.38972000E+1,0.00000000E+0 - ,0.50474100E+2,0.432E+3,0.800E+1,0.38972000E+1,0.00000000E+0 - ,0.38369700E+2,0.432E+3,0.900E+1,0.38972000E+1,0.00000000E+0 - ,0.29574000E+2,0.432E+3,0.100E+2,0.38972000E+1,0.00000000E+0 - ,0.39624310E+3,0.432E+3,0.110E+2,0.38972000E+1,0.00000000E+0 - ,0.31527200E+3,0.432E+3,0.120E+2,0.38972000E+1,0.00000000E+0 - ,0.29419700E+3,0.432E+3,0.130E+2,0.38972000E+1,0.00000000E+0 - ,0.23539440E+3,0.432E+3,0.140E+2,0.38972000E+1,0.00000000E+0 - ,0.18572260E+3,0.432E+3,0.150E+2,0.38972000E+1,0.00000000E+0 - ,0.15516910E+3,0.432E+3,0.160E+2,0.38972000E+1,0.00000000E+0 - ,0.12747850E+3,0.432E+3,0.170E+2,0.38972000E+1,0.00000000E+0 - ,0.10474120E+3,0.432E+3,0.180E+2,0.38972000E+1,0.00000000E+0 - ,0.64529730E+3,0.432E+3,0.190E+2,0.38972000E+1,0.00000000E+0 - ,0.54647840E+3,0.432E+3,0.200E+2,0.38972000E+1,0.00000000E+0 - ,0.45407710E+3,0.432E+3,0.210E+2,0.38972000E+1,0.00000000E+0 - ,0.44076620E+3,0.432E+3,0.220E+2,0.38972000E+1,0.00000000E+0 - ,0.40485430E+3,0.432E+3,0.230E+2,0.38972000E+1,0.00000000E+0 - ,0.31900750E+3,0.432E+3,0.240E+2,0.38972000E+1,0.00000000E+0 - ,0.35008820E+3,0.432E+3,0.250E+2,0.38972000E+1,0.00000000E+0 - ,0.27496140E+3,0.432E+3,0.260E+2,0.38972000E+1,0.00000000E+0 - ,0.29335770E+3,0.432E+3,0.270E+2,0.38972000E+1,0.00000000E+0 - ,0.30126690E+3,0.432E+3,0.280E+2,0.38972000E+1,0.00000000E+0 - ,0.23092580E+3,0.432E+3,0.290E+2,0.38972000E+1,0.00000000E+0 - ,0.23939590E+3,0.432E+3,0.300E+2,0.38972000E+1,0.00000000E+0 - ,0.28294690E+3,0.432E+3,0.310E+2,0.38972000E+1,0.00000000E+0 - ,0.25245910E+3,0.432E+3,0.320E+2,0.38972000E+1,0.00000000E+0 - ,0.21744760E+3,0.432E+3,0.330E+2,0.38972000E+1,0.00000000E+0 - ,0.19619620E+3,0.432E+3,0.340E+2,0.38972000E+1,0.00000000E+0 - ,0.17258230E+3,0.432E+3,0.350E+2,0.38972000E+1,0.00000000E+0 - ,0.15072600E+3,0.432E+3,0.360E+2,0.38972000E+1,0.00000000E+0 - ,0.72493940E+3,0.432E+3,0.370E+2,0.38972000E+1,0.00000000E+0 - ,0.65048490E+3,0.432E+3,0.380E+2,0.38972000E+1,0.00000000E+0 - ,0.57557310E+3,0.432E+3,0.390E+2,0.38972000E+1,0.00000000E+0 - ,0.52045920E+3,0.432E+3,0.400E+2,0.38972000E+1,0.00000000E+0 - ,0.47644890E+3,0.432E+3,0.410E+2,0.38972000E+1,0.00000000E+0 - ,0.37016770E+3,0.432E+3,0.420E+2,0.38972000E+1,0.00000000E+0 - ,0.41205940E+3,0.432E+3,0.430E+2,0.38972000E+1,0.00000000E+0 - ,0.31604420E+3,0.432E+3,0.440E+2,0.38972000E+1,0.00000000E+0 - ,0.34550510E+3,0.432E+3,0.450E+2,0.38972000E+1,0.00000000E+0 - ,0.32111170E+3,0.432E+3,0.460E+2,0.38972000E+1,0.00000000E+0 - ,0.26721350E+3,0.432E+3,0.470E+2,0.38972000E+1,0.00000000E+0 - ,0.28372370E+3,0.432E+3,0.480E+2,0.38972000E+1,0.00000000E+0 - ,0.35360350E+3,0.432E+3,0.490E+2,0.38972000E+1,0.00000000E+0 - ,0.33013010E+3,0.432E+3,0.500E+2,0.38972000E+1,0.00000000E+0 - ,0.29681450E+3,0.432E+3,0.510E+2,0.38972000E+1,0.00000000E+0 - ,0.27677860E+3,0.432E+3,0.520E+2,0.38972000E+1,0.00000000E+0 - ,0.25152290E+3,0.432E+3,0.530E+2,0.38972000E+1,0.00000000E+0 - ,0.22713240E+3,0.432E+3,0.540E+2,0.38972000E+1,0.00000000E+0 - ,0.88397990E+3,0.432E+3,0.550E+2,0.38972000E+1,0.00000000E+0 - ,0.82666440E+3,0.432E+3,0.560E+2,0.38972000E+1,0.00000000E+0 - ,0.73357140E+3,0.432E+3,0.570E+2,0.38972000E+1,0.00000000E+0 - ,0.35001970E+3,0.432E+3,0.580E+2,0.38972000E+1,0.27991000E+1 - ,0.73468830E+3,0.432E+3,0.590E+2,0.38972000E+1,0.00000000E+0 - ,0.70659670E+3,0.432E+3,0.600E+2,0.38972000E+1,0.00000000E+0 - ,0.68917900E+3,0.432E+3,0.610E+2,0.38972000E+1,0.00000000E+0 - ,0.67312870E+3,0.432E+3,0.620E+2,0.38972000E+1,0.00000000E+0 - ,0.65890990E+3,0.432E+3,0.630E+2,0.38972000E+1,0.00000000E+0 - ,0.52379680E+3,0.432E+3,0.640E+2,0.38972000E+1,0.00000000E+0 - ,0.58056100E+3,0.432E+3,0.650E+2,0.38972000E+1,0.00000000E+0 - ,0.56104910E+3,0.432E+3,0.660E+2,0.38972000E+1,0.00000000E+0 - ,0.59575320E+3,0.432E+3,0.670E+2,0.38972000E+1,0.00000000E+0 - ,0.58326490E+3,0.432E+3,0.680E+2,0.38972000E+1,0.00000000E+0 - ,0.57208340E+3,0.432E+3,0.690E+2,0.38972000E+1,0.00000000E+0 - ,0.56513830E+3,0.432E+3,0.700E+2,0.38972000E+1,0.00000000E+0 - ,0.47972770E+3,0.432E+3,0.710E+2,0.38972000E+1,0.00000000E+0 - ,0.47662680E+3,0.432E+3,0.720E+2,0.38972000E+1,0.00000000E+0 - ,0.43746730E+3,0.432E+3,0.730E+2,0.38972000E+1,0.00000000E+0 - ,0.37093970E+3,0.432E+3,0.740E+2,0.38972000E+1,0.00000000E+0 - ,0.37819490E+3,0.432E+3,0.750E+2,0.38972000E+1,0.00000000E+0 - ,0.34433520E+3,0.432E+3,0.760E+2,0.38972000E+1,0.00000000E+0 - ,0.31647760E+3,0.432E+3,0.770E+2,0.38972000E+1,0.00000000E+0 - ,0.26374820E+3,0.432E+3,0.780E+2,0.38972000E+1,0.00000000E+0 - ,0.24671740E+3,0.432E+3,0.790E+2,0.38972000E+1,0.00000000E+0 - ,0.25430200E+3,0.432E+3,0.800E+2,0.38972000E+1,0.00000000E+0 - ,0.36374800E+3,0.432E+3,0.810E+2,0.38972000E+1,0.00000000E+0 - ,0.35827790E+3,0.432E+3,0.820E+2,0.38972000E+1,0.00000000E+0 - ,0.33183780E+3,0.432E+3,0.830E+2,0.38972000E+1,0.00000000E+0 - ,0.31789300E+3,0.432E+3,0.840E+2,0.38972000E+1,0.00000000E+0 - ,0.29484760E+3,0.432E+3,0.850E+2,0.38972000E+1,0.00000000E+0 - ,0.27138550E+3,0.432E+3,0.860E+2,0.38972000E+1,0.00000000E+0 - ,0.84145020E+3,0.432E+3,0.870E+2,0.38972000E+1,0.00000000E+0 - ,0.82171730E+3,0.432E+3,0.880E+2,0.38972000E+1,0.00000000E+0 - ,0.73289850E+3,0.432E+3,0.890E+2,0.38972000E+1,0.00000000E+0 - ,0.66526380E+3,0.432E+3,0.900E+2,0.38972000E+1,0.00000000E+0 - ,0.65709130E+3,0.432E+3,0.910E+2,0.38972000E+1,0.00000000E+0 - ,0.63634590E+3,0.432E+3,0.920E+2,0.38972000E+1,0.00000000E+0 - ,0.65090570E+3,0.432E+3,0.930E+2,0.38972000E+1,0.00000000E+0 - ,0.63106470E+3,0.432E+3,0.940E+2,0.38972000E+1,0.00000000E+0 - ,0.36966400E+2,0.432E+3,0.101E+3,0.38972000E+1,0.00000000E+0 - ,0.11625770E+3,0.432E+3,0.103E+3,0.38972000E+1,0.98650000E+0 - ,0.14894110E+3,0.432E+3,0.104E+3,0.38972000E+1,0.98080000E+0 - ,0.11591450E+3,0.432E+3,0.105E+3,0.38972000E+1,0.97060000E+0 - ,0.88153200E+2,0.432E+3,0.106E+3,0.38972000E+1,0.98680000E+0 - ,0.61839900E+2,0.432E+3,0.107E+3,0.38972000E+1,0.99440000E+0 - ,0.45314100E+2,0.432E+3,0.108E+3,0.38972000E+1,0.99250000E+0 - ,0.31360300E+2,0.432E+3,0.109E+3,0.38972000E+1,0.99820000E+0 - ,0.16914050E+3,0.432E+3,0.111E+3,0.38972000E+1,0.96840000E+0 - ,0.26122720E+3,0.432E+3,0.112E+3,0.38972000E+1,0.96280000E+0 - ,0.26736160E+3,0.432E+3,0.113E+3,0.38972000E+1,0.96480000E+0 - ,0.21800740E+3,0.432E+3,0.114E+3,0.38972000E+1,0.95070000E+0 - ,0.18033050E+3,0.432E+3,0.115E+3,0.38972000E+1,0.99470000E+0 - ,0.15342250E+3,0.432E+3,0.116E+3,0.38972000E+1,0.99480000E+0 - ,0.12613260E+3,0.432E+3,0.117E+3,0.38972000E+1,0.99720000E+0 - ,0.23497420E+3,0.432E+3,0.119E+3,0.38972000E+1,0.97670000E+0 - ,0.43767790E+3,0.432E+3,0.120E+3,0.38972000E+1,0.98310000E+0 - ,0.23797060E+3,0.432E+3,0.121E+3,0.38972000E+1,0.18627000E+1 - ,0.22980530E+3,0.432E+3,0.122E+3,0.38972000E+1,0.18299000E+1 - ,0.22513260E+3,0.432E+3,0.123E+3,0.38972000E+1,0.19138000E+1 - ,0.22270380E+3,0.432E+3,0.124E+3,0.38972000E+1,0.18269000E+1 - ,0.20634830E+3,0.432E+3,0.125E+3,0.38972000E+1,0.16406000E+1 - ,0.19131890E+3,0.432E+3,0.126E+3,0.38972000E+1,0.16483000E+1 - ,0.18247980E+3,0.432E+3,0.127E+3,0.38972000E+1,0.17149000E+1 - ,0.17828580E+3,0.432E+3,0.128E+3,0.38972000E+1,0.17937000E+1 - ,0.17518440E+3,0.432E+3,0.129E+3,0.38972000E+1,0.95760000E+0 - ,0.16597640E+3,0.432E+3,0.130E+3,0.38972000E+1,0.19419000E+1 - ,0.26653500E+3,0.432E+3,0.131E+3,0.38972000E+1,0.96010000E+0 - ,0.23678670E+3,0.432E+3,0.132E+3,0.38972000E+1,0.94340000E+0 - ,0.21387070E+3,0.432E+3,0.133E+3,0.38972000E+1,0.98890000E+0 - ,0.19624890E+3,0.432E+3,0.134E+3,0.38972000E+1,0.99010000E+0 - ,0.17373160E+3,0.432E+3,0.135E+3,0.38972000E+1,0.99740000E+0 - ,0.28107340E+3,0.432E+3,0.137E+3,0.38972000E+1,0.97380000E+0 - ,0.53187620E+3,0.432E+3,0.138E+3,0.38972000E+1,0.98010000E+0 - ,0.41462030E+3,0.432E+3,0.139E+3,0.38972000E+1,0.19153000E+1 - ,0.31443980E+3,0.432E+3,0.140E+3,0.38972000E+1,0.19355000E+1 - ,0.31740770E+3,0.432E+3,0.141E+3,0.38972000E+1,0.19545000E+1 - ,0.29662500E+3,0.432E+3,0.142E+3,0.38972000E+1,0.19420000E+1 - ,0.32966960E+3,0.432E+3,0.143E+3,0.38972000E+1,0.16682000E+1 - ,0.26011760E+3,0.432E+3,0.144E+3,0.38972000E+1,0.18584000E+1 - ,0.24341820E+3,0.432E+3,0.145E+3,0.38972000E+1,0.19003000E+1 - ,0.22622740E+3,0.432E+3,0.146E+3,0.38972000E+1,0.18630000E+1 - ,0.21858540E+3,0.432E+3,0.147E+3,0.38972000E+1,0.96790000E+0 - ,0.21737600E+3,0.432E+3,0.148E+3,0.38972000E+1,0.19539000E+1 - ,0.33818310E+3,0.432E+3,0.149E+3,0.38972000E+1,0.96330000E+0 - ,0.30894110E+3,0.432E+3,0.150E+3,0.38972000E+1,0.95140000E+0 - ,0.29123020E+3,0.432E+3,0.151E+3,0.38972000E+1,0.97490000E+0 - ,0.27666850E+3,0.432E+3,0.152E+3,0.38972000E+1,0.98110000E+0 - ,0.25387120E+3,0.432E+3,0.153E+3,0.38972000E+1,0.99680000E+0 - ,0.33505240E+3,0.432E+3,0.155E+3,0.38972000E+1,0.99090000E+0 - ,0.68699570E+3,0.432E+3,0.156E+3,0.38972000E+1,0.97970000E+0 - ,0.52395750E+3,0.432E+3,0.157E+3,0.38972000E+1,0.19373000E+1 - ,0.33962030E+3,0.432E+3,0.159E+3,0.38972000E+1,0.29425000E+1 - ,0.33261730E+3,0.432E+3,0.160E+3,0.38972000E+1,0.29455000E+1 - ,0.32220350E+3,0.432E+3,0.161E+3,0.38972000E+1,0.29413000E+1 - ,0.32336760E+3,0.432E+3,0.162E+3,0.38972000E+1,0.29300000E+1 - ,0.31025500E+3,0.432E+3,0.163E+3,0.38972000E+1,0.18286000E+1 - ,0.32531030E+3,0.432E+3,0.164E+3,0.38972000E+1,0.28732000E+1 - ,0.30584570E+3,0.432E+3,0.165E+3,0.38972000E+1,0.29086000E+1 - ,0.31046310E+3,0.432E+3,0.166E+3,0.38972000E+1,0.28965000E+1 - ,0.29063460E+3,0.432E+3,0.167E+3,0.38972000E+1,0.29242000E+1 - ,0.28247120E+3,0.432E+3,0.168E+3,0.38972000E+1,0.29282000E+1 - ,0.28057190E+3,0.432E+3,0.169E+3,0.38972000E+1,0.29246000E+1 - ,0.29443330E+3,0.432E+3,0.170E+3,0.38972000E+1,0.28482000E+1 - ,0.27137930E+3,0.432E+3,0.171E+3,0.38972000E+1,0.29219000E+1 - ,0.36212170E+3,0.432E+3,0.172E+3,0.38972000E+1,0.19254000E+1 - ,0.33783560E+3,0.432E+3,0.173E+3,0.38972000E+1,0.19459000E+1 - ,0.30986550E+3,0.432E+3,0.174E+3,0.38972000E+1,0.19292000E+1 - ,0.31199870E+3,0.432E+3,0.175E+3,0.38972000E+1,0.18104000E+1 - ,0.27647840E+3,0.432E+3,0.176E+3,0.38972000E+1,0.18858000E+1 - ,0.26047040E+3,0.432E+3,0.177E+3,0.38972000E+1,0.18648000E+1 - ,0.24897200E+3,0.432E+3,0.178E+3,0.38972000E+1,0.19188000E+1 - ,0.23789260E+3,0.432E+3,0.179E+3,0.38972000E+1,0.98460000E+0 - ,0.23089260E+3,0.432E+3,0.180E+3,0.38972000E+1,0.19896000E+1 - ,0.36361850E+3,0.432E+3,0.181E+3,0.38972000E+1,0.92670000E+0 - ,0.33453020E+3,0.432E+3,0.182E+3,0.38972000E+1,0.93830000E+0 - ,0.32604840E+3,0.432E+3,0.183E+3,0.38972000E+1,0.98200000E+0 - ,0.31819910E+3,0.432E+3,0.184E+3,0.38972000E+1,0.98150000E+0 - ,0.29845520E+3,0.432E+3,0.185E+3,0.38972000E+1,0.99540000E+0 - ,0.37759560E+3,0.432E+3,0.187E+3,0.38972000E+1,0.97050000E+0 - ,0.68770170E+3,0.432E+3,0.188E+3,0.38972000E+1,0.96620000E+0 - ,0.40183270E+3,0.432E+3,0.189E+3,0.38972000E+1,0.29070000E+1 - ,0.46011490E+3,0.432E+3,0.190E+3,0.38972000E+1,0.28844000E+1 - ,0.41238990E+3,0.432E+3,0.191E+3,0.38972000E+1,0.28738000E+1 - ,0.36661110E+3,0.432E+3,0.192E+3,0.38972000E+1,0.28878000E+1 - ,0.35322130E+3,0.432E+3,0.193E+3,0.38972000E+1,0.29095000E+1 - ,0.41784880E+3,0.432E+3,0.194E+3,0.38972000E+1,0.19209000E+1 - ,0.99170000E+2,0.432E+3,0.204E+3,0.38972000E+1,0.19697000E+1 - ,0.97688000E+2,0.432E+3,0.205E+3,0.38972000E+1,0.19441000E+1 - ,0.72259500E+2,0.432E+3,0.206E+3,0.38972000E+1,0.19985000E+1 - ,0.58097400E+2,0.432E+3,0.207E+3,0.38972000E+1,0.20143000E+1 - ,0.40013200E+2,0.432E+3,0.208E+3,0.38972000E+1,0.19887000E+1 - ,0.17423120E+3,0.432E+3,0.212E+3,0.38972000E+1,0.19496000E+1 - ,0.21029720E+3,0.432E+3,0.213E+3,0.38972000E+1,0.19311000E+1 - ,0.20317830E+3,0.432E+3,0.214E+3,0.38972000E+1,0.19435000E+1 - ,0.17773730E+3,0.432E+3,0.215E+3,0.38972000E+1,0.20102000E+1 - ,0.15032780E+3,0.432E+3,0.216E+3,0.38972000E+1,0.19903000E+1 - ,0.24395900E+3,0.432E+3,0.220E+3,0.38972000E+1,0.19349000E+1 - ,0.23581030E+3,0.432E+3,0.221E+3,0.38972000E+1,0.28999000E+1 - ,0.23880070E+3,0.432E+3,0.222E+3,0.38972000E+1,0.38675000E+1 - ,0.21840030E+3,0.432E+3,0.223E+3,0.38972000E+1,0.29110000E+1 - ,0.16577460E+3,0.432E+3,0.224E+3,0.38972000E+1,0.10619100E+2 - ,0.14252950E+3,0.432E+3,0.225E+3,0.38972000E+1,0.98849000E+1 - ,0.13980680E+3,0.432E+3,0.226E+3,0.38972000E+1,0.91376000E+1 - ,0.16260680E+3,0.432E+3,0.227E+3,0.38972000E+1,0.29263000E+1 - ,0.15184970E+3,0.432E+3,0.228E+3,0.38972000E+1,0.65458000E+1 - ,0.21328870E+3,0.432E+3,0.231E+3,0.38972000E+1,0.19315000E+1 - ,0.22581390E+3,0.432E+3,0.232E+3,0.38972000E+1,0.19447000E+1 - ,0.20845000E+3,0.432E+3,0.233E+3,0.38972000E+1,0.19793000E+1 - ,0.19473060E+3,0.432E+3,0.234E+3,0.38972000E+1,0.19812000E+1 - ,0.29242890E+3,0.432E+3,0.238E+3,0.38972000E+1,0.19143000E+1 - ,0.28359490E+3,0.432E+3,0.239E+3,0.38972000E+1,0.28903000E+1 - ,0.28662000E+3,0.432E+3,0.240E+3,0.38972000E+1,0.39106000E+1 - ,0.27689930E+3,0.432E+3,0.241E+3,0.38972000E+1,0.29225000E+1 - ,0.24611820E+3,0.432E+3,0.242E+3,0.38972000E+1,0.11055600E+2 - ,0.21811560E+3,0.432E+3,0.243E+3,0.38972000E+1,0.95402000E+1 - ,0.20639140E+3,0.432E+3,0.244E+3,0.38972000E+1,0.88895000E+1 - ,0.20911520E+3,0.432E+3,0.245E+3,0.38972000E+1,0.29696000E+1 - ,0.21815300E+3,0.432E+3,0.246E+3,0.38972000E+1,0.57095000E+1 - ,0.27516580E+3,0.432E+3,0.249E+3,0.38972000E+1,0.19378000E+1 - ,0.29921170E+3,0.432E+3,0.250E+3,0.38972000E+1,0.19505000E+1 - ,0.28364510E+3,0.432E+3,0.251E+3,0.38972000E+1,0.19523000E+1 - ,0.27457510E+3,0.432E+3,0.252E+3,0.38972000E+1,0.19639000E+1 - ,0.35440230E+3,0.432E+3,0.256E+3,0.38972000E+1,0.18467000E+1 - ,0.36886820E+3,0.432E+3,0.257E+3,0.38972000E+1,0.29175000E+1 - ,0.27514660E+3,0.432E+3,0.272E+3,0.38972000E+1,0.38840000E+1 - ,0.28653550E+3,0.432E+3,0.273E+3,0.38972000E+1,0.28988000E+1 - ,0.26750210E+3,0.432E+3,0.274E+3,0.38972000E+1,0.10915300E+2 - ,0.24384710E+3,0.432E+3,0.275E+3,0.38972000E+1,0.98054000E+1 - ,0.23006870E+3,0.432E+3,0.276E+3,0.38972000E+1,0.91527000E+1 - ,0.23344450E+3,0.432E+3,0.277E+3,0.38972000E+1,0.29424000E+1 - ,0.24547400E+3,0.432E+3,0.278E+3,0.38972000E+1,0.66669000E+1 - ,0.29494270E+3,0.432E+3,0.281E+3,0.38972000E+1,0.19302000E+1 - ,0.31192660E+3,0.432E+3,0.282E+3,0.38972000E+1,0.19356000E+1 - ,0.31874160E+3,0.432E+3,0.283E+3,0.38972000E+1,0.19655000E+1 - ,0.31709360E+3,0.432E+3,0.284E+3,0.38972000E+1,0.19639000E+1 - ,0.39042810E+3,0.432E+3,0.288E+3,0.38972000E+1,0.18075000E+1 - ,0.75031600E+2,0.432E+3,0.305E+3,0.38972000E+1,0.29128000E+1 - ,0.67585400E+2,0.432E+3,0.306E+3,0.38972000E+1,0.29987000E+1 - ,0.51187400E+2,0.432E+3,0.307E+3,0.38972000E+1,0.29903000E+1 - ,0.16569080E+3,0.432E+3,0.313E+3,0.38972000E+1,0.29146000E+1 - ,0.19769460E+3,0.432E+3,0.314E+3,0.38972000E+1,0.29407000E+1 - ,0.16535710E+3,0.432E+3,0.315E+3,0.38972000E+1,0.29859000E+1 - ,0.14552910E+3,0.432E+3,0.327E+3,0.38972000E+1,0.77785000E+1 - ,0.15855360E+3,0.432E+3,0.328E+3,0.38972000E+1,0.62918000E+1 - ,0.17612940E+3,0.432E+3,0.331E+3,0.38972000E+1,0.29233000E+1 - ,0.20319220E+3,0.432E+3,0.332E+3,0.38972000E+1,0.29186000E+1 - ,0.20106830E+3,0.432E+3,0.333E+3,0.38972000E+1,0.29709000E+1 - ,0.23637610E+3,0.432E+3,0.349E+3,0.38972000E+1,0.29353000E+1 - ,0.27080520E+3,0.432E+3,0.350E+3,0.38972000E+1,0.29259000E+1 - ,0.27404840E+3,0.432E+3,0.351E+3,0.38972000E+1,0.29315000E+1 - ,0.26442240E+3,0.432E+3,0.381E+3,0.38972000E+1,0.29420000E+1 - ,0.30657470E+3,0.432E+3,0.382E+3,0.38972000E+1,0.29081000E+1 - ,0.30987480E+3,0.432E+3,0.383E+3,0.38972000E+1,0.29500000E+1 - ,0.70691700E+2,0.432E+3,0.405E+3,0.38972000E+1,0.45856000E+1 - ,0.55685700E+2,0.432E+3,0.406E+3,0.38972000E+1,0.39844000E+1 - ,0.16418110E+3,0.432E+3,0.414E+3,0.38972000E+1,0.38677000E+1 - ,0.18029120E+3,0.432E+3,0.432E+3,0.38972000E+1,0.38972000E+1 - ,0.31602000E+2,0.450E+3,0.100E+1,0.39123000E+1,0.91180000E+0 - ,0.21215400E+2,0.450E+3,0.200E+1,0.39123000E+1,0.00000000E+0 - ,0.45591990E+3,0.450E+3,0.300E+1,0.39123000E+1,0.00000000E+0 - ,0.27300460E+3,0.450E+3,0.400E+1,0.39123000E+1,0.00000000E+0 - ,0.18738080E+3,0.450E+3,0.500E+1,0.39123000E+1,0.00000000E+0 - ,0.12831130E+3,0.450E+3,0.600E+1,0.39123000E+1,0.00000000E+0 - ,0.90618400E+2,0.450E+3,0.700E+1,0.39123000E+1,0.00000000E+0 - ,0.69093900E+2,0.450E+3,0.800E+1,0.39123000E+1,0.00000000E+0 - ,0.52666100E+2,0.450E+3,0.900E+1,0.39123000E+1,0.00000000E+0 - ,0.40719500E+2,0.450E+3,0.100E+2,0.39123000E+1,0.00000000E+0 - ,0.54650960E+3,0.450E+3,0.110E+2,0.39123000E+1,0.00000000E+0 - ,0.43237650E+3,0.450E+3,0.120E+2,0.39123000E+1,0.00000000E+0 - ,0.40262520E+3,0.450E+3,0.130E+2,0.39123000E+1,0.00000000E+0 - ,0.32143630E+3,0.450E+3,0.140E+2,0.39123000E+1,0.00000000E+0 - ,0.25331660E+3,0.450E+3,0.150E+2,0.39123000E+1,0.00000000E+0 - ,0.21163180E+3,0.450E+3,0.160E+2,0.39123000E+1,0.00000000E+0 - ,0.17395170E+3,0.450E+3,0.170E+2,0.39123000E+1,0.00000000E+0 - ,0.14307940E+3,0.450E+3,0.180E+2,0.39123000E+1,0.00000000E+0 - ,0.89120910E+3,0.450E+3,0.190E+2,0.39123000E+1,0.00000000E+0 - ,0.75145760E+3,0.450E+3,0.200E+2,0.39123000E+1,0.00000000E+0 - ,0.62382770E+3,0.450E+3,0.210E+2,0.39123000E+1,0.00000000E+0 - ,0.60513210E+3,0.450E+3,0.220E+2,0.39123000E+1,0.00000000E+0 - ,0.55562000E+3,0.450E+3,0.230E+2,0.39123000E+1,0.00000000E+0 - ,0.43806280E+3,0.450E+3,0.240E+2,0.39123000E+1,0.00000000E+0 - ,0.48022450E+3,0.450E+3,0.250E+2,0.39123000E+1,0.00000000E+0 - ,0.37740640E+3,0.450E+3,0.260E+2,0.39123000E+1,0.00000000E+0 - ,0.40204340E+3,0.450E+3,0.270E+2,0.39123000E+1,0.00000000E+0 - ,0.41305650E+3,0.450E+3,0.280E+2,0.39123000E+1,0.00000000E+0 - ,0.31692740E+3,0.450E+3,0.290E+2,0.39123000E+1,0.00000000E+0 - ,0.32786560E+3,0.450E+3,0.300E+2,0.39123000E+1,0.00000000E+0 - ,0.38724130E+3,0.450E+3,0.310E+2,0.39123000E+1,0.00000000E+0 - ,0.34490650E+3,0.450E+3,0.320E+2,0.39123000E+1,0.00000000E+0 - ,0.29675050E+3,0.450E+3,0.330E+2,0.39123000E+1,0.00000000E+0 - ,0.26767240E+3,0.450E+3,0.340E+2,0.39123000E+1,0.00000000E+0 - ,0.23547970E+3,0.450E+3,0.350E+2,0.39123000E+1,0.00000000E+0 - ,0.20576180E+3,0.450E+3,0.360E+2,0.39123000E+1,0.00000000E+0 - ,0.10009319E+4,0.450E+3,0.370E+2,0.39123000E+1,0.00000000E+0 - ,0.89470560E+3,0.450E+3,0.380E+2,0.39123000E+1,0.00000000E+0 - ,0.79039380E+3,0.450E+3,0.390E+2,0.39123000E+1,0.00000000E+0 - ,0.71409530E+3,0.450E+3,0.400E+2,0.39123000E+1,0.00000000E+0 - ,0.65341870E+3,0.450E+3,0.410E+2,0.39123000E+1,0.00000000E+0 - ,0.50749190E+3,0.450E+3,0.420E+2,0.39123000E+1,0.00000000E+0 - ,0.56500310E+3,0.450E+3,0.430E+2,0.39123000E+1,0.00000000E+0 - ,0.43325440E+3,0.450E+3,0.440E+2,0.39123000E+1,0.00000000E+0 - ,0.47345910E+3,0.450E+3,0.450E+2,0.39123000E+1,0.00000000E+0 - ,0.43998550E+3,0.450E+3,0.460E+2,0.39123000E+1,0.00000000E+0 - ,0.36659430E+3,0.450E+3,0.470E+2,0.39123000E+1,0.00000000E+0 - ,0.38876210E+3,0.450E+3,0.480E+2,0.39123000E+1,0.00000000E+0 - ,0.48465320E+3,0.450E+3,0.490E+2,0.39123000E+1,0.00000000E+0 - ,0.45175780E+3,0.450E+3,0.500E+2,0.39123000E+1,0.00000000E+0 - ,0.40568490E+3,0.450E+3,0.510E+2,0.39123000E+1,0.00000000E+0 - ,0.37809630E+3,0.450E+3,0.520E+2,0.39123000E+1,0.00000000E+0 - ,0.34349120E+3,0.450E+3,0.530E+2,0.39123000E+1,0.00000000E+0 - ,0.31018060E+3,0.450E+3,0.540E+2,0.39123000E+1,0.00000000E+0 - ,0.12200459E+4,0.450E+3,0.550E+2,0.39123000E+1,0.00000000E+0 - ,0.11376146E+4,0.450E+3,0.560E+2,0.39123000E+1,0.00000000E+0 - ,0.10078507E+4,0.450E+3,0.570E+2,0.39123000E+1,0.00000000E+0 - ,0.47859810E+3,0.450E+3,0.580E+2,0.39123000E+1,0.27991000E+1 - ,0.10109240E+4,0.450E+3,0.590E+2,0.39123000E+1,0.00000000E+0 - ,0.97204260E+3,0.450E+3,0.600E+2,0.39123000E+1,0.00000000E+0 - ,0.94802150E+3,0.450E+3,0.610E+2,0.39123000E+1,0.00000000E+0 - ,0.92588830E+3,0.450E+3,0.620E+2,0.39123000E+1,0.00000000E+0 - ,0.90627400E+3,0.450E+3,0.630E+2,0.39123000E+1,0.00000000E+0 - ,0.71942080E+3,0.450E+3,0.640E+2,0.39123000E+1,0.00000000E+0 - ,0.79940550E+3,0.450E+3,0.650E+2,0.39123000E+1,0.00000000E+0 - ,0.77227150E+3,0.450E+3,0.660E+2,0.39123000E+1,0.00000000E+0 - ,0.81910080E+3,0.450E+3,0.670E+2,0.39123000E+1,0.00000000E+0 - ,0.80189050E+3,0.450E+3,0.680E+2,0.39123000E+1,0.00000000E+0 - ,0.78645970E+3,0.450E+3,0.690E+2,0.39123000E+1,0.00000000E+0 - ,0.77695490E+3,0.450E+3,0.700E+2,0.39123000E+1,0.00000000E+0 - ,0.65887080E+3,0.450E+3,0.710E+2,0.39123000E+1,0.00000000E+0 - ,0.65329340E+3,0.450E+3,0.720E+2,0.39123000E+1,0.00000000E+0 - ,0.59921110E+3,0.450E+3,0.730E+2,0.39123000E+1,0.00000000E+0 - ,0.50805680E+3,0.450E+3,0.740E+2,0.39123000E+1,0.00000000E+0 - ,0.51781620E+3,0.450E+3,0.750E+2,0.39123000E+1,0.00000000E+0 - ,0.47129410E+3,0.450E+3,0.760E+2,0.39123000E+1,0.00000000E+0 - ,0.43309810E+3,0.450E+3,0.770E+2,0.39123000E+1,0.00000000E+0 - ,0.36112210E+3,0.450E+3,0.780E+2,0.39123000E+1,0.00000000E+0 - ,0.33790780E+3,0.450E+3,0.790E+2,0.39123000E+1,0.00000000E+0 - ,0.34812330E+3,0.450E+3,0.800E+2,0.39123000E+1,0.00000000E+0 - ,0.49876900E+3,0.450E+3,0.810E+2,0.39123000E+1,0.00000000E+0 - ,0.49062310E+3,0.450E+3,0.820E+2,0.39123000E+1,0.00000000E+0 - ,0.45390390E+3,0.450E+3,0.830E+2,0.39123000E+1,0.00000000E+0 - ,0.43458510E+3,0.450E+3,0.840E+2,0.39123000E+1,0.00000000E+0 - ,0.40290830E+3,0.450E+3,0.850E+2,0.39123000E+1,0.00000000E+0 - ,0.37079470E+3,0.450E+3,0.860E+2,0.39123000E+1,0.00000000E+0 - ,0.11599029E+4,0.450E+3,0.870E+2,0.39123000E+1,0.00000000E+0 - ,0.11298719E+4,0.450E+3,0.880E+2,0.39123000E+1,0.00000000E+0 - ,0.10064862E+4,0.450E+3,0.890E+2,0.39123000E+1,0.00000000E+0 - ,0.91246220E+3,0.450E+3,0.900E+2,0.39123000E+1,0.00000000E+0 - ,0.90219930E+3,0.450E+3,0.910E+2,0.39123000E+1,0.00000000E+0 - ,0.87376550E+3,0.450E+3,0.920E+2,0.39123000E+1,0.00000000E+0 - ,0.89481040E+3,0.450E+3,0.930E+2,0.39123000E+1,0.00000000E+0 - ,0.86739140E+3,0.450E+3,0.940E+2,0.39123000E+1,0.00000000E+0 - ,0.50394000E+2,0.450E+3,0.101E+3,0.39123000E+1,0.00000000E+0 - ,0.15913760E+3,0.450E+3,0.103E+3,0.39123000E+1,0.98650000E+0 - ,0.20372270E+3,0.450E+3,0.104E+3,0.39123000E+1,0.98080000E+0 - ,0.15821370E+3,0.450E+3,0.105E+3,0.39123000E+1,0.97060000E+0 - ,0.12031900E+3,0.450E+3,0.106E+3,0.39123000E+1,0.98680000E+0 - ,0.84513800E+2,0.450E+3,0.107E+3,0.39123000E+1,0.99440000E+0 - ,0.62066500E+2,0.450E+3,0.108E+3,0.39123000E+1,0.99250000E+0 - ,0.43143200E+2,0.450E+3,0.109E+3,0.39123000E+1,0.99820000E+0 - ,0.23190190E+3,0.450E+3,0.111E+3,0.39123000E+1,0.96840000E+0 - ,0.35800890E+3,0.450E+3,0.112E+3,0.39123000E+1,0.96280000E+0 - ,0.36577110E+3,0.450E+3,0.113E+3,0.39123000E+1,0.96480000E+0 - ,0.29764030E+3,0.450E+3,0.114E+3,0.39123000E+1,0.95070000E+0 - ,0.24597730E+3,0.450E+3,0.115E+3,0.39123000E+1,0.99470000E+0 - ,0.20927130E+3,0.450E+3,0.116E+3,0.39123000E+1,0.99480000E+0 - ,0.17213180E+3,0.450E+3,0.117E+3,0.39123000E+1,0.99720000E+0 - ,0.32212730E+3,0.450E+3,0.119E+3,0.39123000E+1,0.97670000E+0 - ,0.60186910E+3,0.450E+3,0.120E+3,0.39123000E+1,0.98310000E+0 - ,0.32550230E+3,0.450E+3,0.121E+3,0.39123000E+1,0.18627000E+1 - ,0.31438040E+3,0.450E+3,0.122E+3,0.39123000E+1,0.18299000E+1 - ,0.30805200E+3,0.450E+3,0.123E+3,0.39123000E+1,0.19138000E+1 - ,0.30483850E+3,0.450E+3,0.124E+3,0.39123000E+1,0.18269000E+1 - ,0.28215030E+3,0.450E+3,0.125E+3,0.39123000E+1,0.16406000E+1 - ,0.26159540E+3,0.450E+3,0.126E+3,0.39123000E+1,0.16483000E+1 - ,0.24956670E+3,0.450E+3,0.127E+3,0.39123000E+1,0.17149000E+1 - ,0.24387510E+3,0.450E+3,0.128E+3,0.39123000E+1,0.17937000E+1 - ,0.23989280E+3,0.450E+3,0.129E+3,0.39123000E+1,0.95760000E+0 - ,0.22689510E+3,0.450E+3,0.130E+3,0.39123000E+1,0.19419000E+1 - ,0.36463660E+3,0.450E+3,0.131E+3,0.39123000E+1,0.96010000E+0 - ,0.32340730E+3,0.450E+3,0.132E+3,0.39123000E+1,0.94340000E+0 - ,0.29186440E+3,0.450E+3,0.133E+3,0.39123000E+1,0.98890000E+0 - ,0.26775420E+3,0.450E+3,0.134E+3,0.39123000E+1,0.99010000E+0 - ,0.23705490E+3,0.450E+3,0.135E+3,0.39123000E+1,0.99740000E+0 - ,0.38525160E+3,0.450E+3,0.137E+3,0.39123000E+1,0.97380000E+0 - ,0.73162570E+3,0.450E+3,0.138E+3,0.39123000E+1,0.98010000E+0 - ,0.56861590E+3,0.450E+3,0.139E+3,0.39123000E+1,0.19153000E+1 - ,0.43018180E+3,0.450E+3,0.140E+3,0.39123000E+1,0.19355000E+1 - ,0.43434220E+3,0.450E+3,0.141E+3,0.39123000E+1,0.19545000E+1 - ,0.40590280E+3,0.450E+3,0.142E+3,0.39123000E+1,0.19420000E+1 - ,0.45173170E+3,0.450E+3,0.143E+3,0.39123000E+1,0.16682000E+1 - ,0.35582860E+3,0.450E+3,0.144E+3,0.39123000E+1,0.18584000E+1 - ,0.33309730E+3,0.450E+3,0.145E+3,0.39123000E+1,0.19003000E+1 - ,0.30966650E+3,0.450E+3,0.146E+3,0.39123000E+1,0.18630000E+1 - ,0.29933180E+3,0.450E+3,0.147E+3,0.39123000E+1,0.96790000E+0 - ,0.29736580E+3,0.450E+3,0.148E+3,0.39123000E+1,0.19539000E+1 - ,0.46329930E+3,0.450E+3,0.149E+3,0.39123000E+1,0.96330000E+0 - ,0.42259500E+3,0.450E+3,0.150E+3,0.39123000E+1,0.95140000E+0 - ,0.39800110E+3,0.450E+3,0.151E+3,0.39123000E+1,0.97490000E+0 - ,0.37792500E+3,0.450E+3,0.152E+3,0.39123000E+1,0.98110000E+0 - ,0.34668560E+3,0.450E+3,0.153E+3,0.39123000E+1,0.99680000E+0 - ,0.45839400E+3,0.450E+3,0.155E+3,0.39123000E+1,0.99090000E+0 - ,0.94552740E+3,0.450E+3,0.156E+3,0.39123000E+1,0.97970000E+0 - ,0.71867700E+3,0.450E+3,0.157E+3,0.39123000E+1,0.19373000E+1 - ,0.46437650E+3,0.450E+3,0.159E+3,0.39123000E+1,0.29425000E+1 - ,0.45481020E+3,0.450E+3,0.160E+3,0.39123000E+1,0.29455000E+1 - ,0.44056910E+3,0.450E+3,0.161E+3,0.39123000E+1,0.29413000E+1 - ,0.44222540E+3,0.450E+3,0.162E+3,0.39123000E+1,0.29300000E+1 - ,0.42469280E+3,0.450E+3,0.163E+3,0.39123000E+1,0.18286000E+1 - ,0.44484260E+3,0.450E+3,0.164E+3,0.39123000E+1,0.28732000E+1 - ,0.41824050E+3,0.450E+3,0.165E+3,0.39123000E+1,0.29086000E+1 - ,0.42468210E+3,0.450E+3,0.166E+3,0.39123000E+1,0.28965000E+1 - ,0.39737350E+3,0.450E+3,0.167E+3,0.39123000E+1,0.29242000E+1 - ,0.38619540E+3,0.450E+3,0.168E+3,0.39123000E+1,0.29282000E+1 - ,0.38360070E+3,0.450E+3,0.169E+3,0.39123000E+1,0.29246000E+1 - ,0.40253610E+3,0.450E+3,0.170E+3,0.39123000E+1,0.28482000E+1 - ,0.37098070E+3,0.450E+3,0.171E+3,0.39123000E+1,0.29219000E+1 - ,0.49582350E+3,0.450E+3,0.172E+3,0.39123000E+1,0.19254000E+1 - ,0.46234390E+3,0.450E+3,0.173E+3,0.39123000E+1,0.19459000E+1 - ,0.42390050E+3,0.450E+3,0.174E+3,0.39123000E+1,0.19292000E+1 - ,0.42713880E+3,0.450E+3,0.175E+3,0.39123000E+1,0.18104000E+1 - ,0.37805750E+3,0.450E+3,0.176E+3,0.39123000E+1,0.18858000E+1 - ,0.35625810E+3,0.450E+3,0.177E+3,0.39123000E+1,0.18648000E+1 - ,0.34062570E+3,0.450E+3,0.178E+3,0.39123000E+1,0.19188000E+1 - ,0.32564110E+3,0.450E+3,0.179E+3,0.39123000E+1,0.98460000E+0 - ,0.31586290E+3,0.450E+3,0.180E+3,0.39123000E+1,0.19896000E+1 - ,0.49832750E+3,0.450E+3,0.181E+3,0.39123000E+1,0.92670000E+0 - ,0.45783400E+3,0.450E+3,0.182E+3,0.39123000E+1,0.93830000E+0 - ,0.44587260E+3,0.450E+3,0.183E+3,0.39123000E+1,0.98200000E+0 - ,0.43494050E+3,0.450E+3,0.184E+3,0.39123000E+1,0.98150000E+0 - ,0.40780020E+3,0.450E+3,0.185E+3,0.39123000E+1,0.99540000E+0 - ,0.51650850E+3,0.450E+3,0.187E+3,0.39123000E+1,0.97050000E+0 - ,0.94554140E+3,0.450E+3,0.188E+3,0.39123000E+1,0.96620000E+0 - ,0.54936590E+3,0.450E+3,0.189E+3,0.39123000E+1,0.29070000E+1 - ,0.62982470E+3,0.450E+3,0.190E+3,0.39123000E+1,0.28844000E+1 - ,0.56451290E+3,0.450E+3,0.191E+3,0.39123000E+1,0.28738000E+1 - ,0.50156450E+3,0.450E+3,0.192E+3,0.39123000E+1,0.28878000E+1 - ,0.48322840E+3,0.450E+3,0.193E+3,0.39123000E+1,0.29095000E+1 - ,0.57296750E+3,0.450E+3,0.194E+3,0.39123000E+1,0.19209000E+1 - ,0.13526050E+3,0.450E+3,0.204E+3,0.39123000E+1,0.19697000E+1 - ,0.13332140E+3,0.450E+3,0.205E+3,0.39123000E+1,0.19441000E+1 - ,0.98654000E+2,0.450E+3,0.206E+3,0.39123000E+1,0.19985000E+1 - ,0.79452200E+2,0.450E+3,0.207E+3,0.39123000E+1,0.20143000E+1 - ,0.54900500E+2,0.450E+3,0.208E+3,0.39123000E+1,0.19887000E+1 - ,0.23805490E+3,0.450E+3,0.212E+3,0.39123000E+1,0.19496000E+1 - ,0.28733370E+3,0.450E+3,0.213E+3,0.39123000E+1,0.19311000E+1 - ,0.27734590E+3,0.450E+3,0.214E+3,0.39123000E+1,0.19435000E+1 - ,0.24249400E+3,0.450E+3,0.215E+3,0.39123000E+1,0.20102000E+1 - ,0.20506870E+3,0.450E+3,0.216E+3,0.39123000E+1,0.19903000E+1 - ,0.33372060E+3,0.450E+3,0.220E+3,0.39123000E+1,0.19349000E+1 - ,0.32229080E+3,0.450E+3,0.221E+3,0.39123000E+1,0.28999000E+1 - ,0.32638510E+3,0.450E+3,0.222E+3,0.39123000E+1,0.38675000E+1 - ,0.29865910E+3,0.450E+3,0.223E+3,0.39123000E+1,0.29110000E+1 - ,0.22674830E+3,0.450E+3,0.224E+3,0.39123000E+1,0.10619100E+2 - ,0.19495560E+3,0.450E+3,0.225E+3,0.39123000E+1,0.98849000E+1 - ,0.19127030E+3,0.450E+3,0.226E+3,0.39123000E+1,0.91376000E+1 - ,0.22252350E+3,0.450E+3,0.227E+3,0.39123000E+1,0.29263000E+1 - ,0.20778550E+3,0.450E+3,0.228E+3,0.39123000E+1,0.65458000E+1 - ,0.29143960E+3,0.450E+3,0.231E+3,0.39123000E+1,0.19315000E+1 - ,0.30837570E+3,0.450E+3,0.232E+3,0.39123000E+1,0.19447000E+1 - ,0.28445060E+3,0.450E+3,0.233E+3,0.39123000E+1,0.19793000E+1 - ,0.26569090E+3,0.450E+3,0.234E+3,0.39123000E+1,0.19812000E+1 - ,0.40006500E+3,0.450E+3,0.238E+3,0.39123000E+1,0.19143000E+1 - ,0.38751810E+3,0.450E+3,0.239E+3,0.39123000E+1,0.28903000E+1 - ,0.39155320E+3,0.450E+3,0.240E+3,0.39123000E+1,0.39106000E+1 - ,0.37846930E+3,0.450E+3,0.241E+3,0.39123000E+1,0.29225000E+1 - ,0.33635920E+3,0.450E+3,0.242E+3,0.39123000E+1,0.11055600E+2 - ,0.29811220E+3,0.450E+3,0.243E+3,0.39123000E+1,0.95402000E+1 - ,0.28214800E+3,0.450E+3,0.244E+3,0.39123000E+1,0.88895000E+1 - ,0.28612510E+3,0.450E+3,0.245E+3,0.39123000E+1,0.29696000E+1 - ,0.29849500E+3,0.450E+3,0.246E+3,0.39123000E+1,0.57095000E+1 - ,0.37650510E+3,0.450E+3,0.249E+3,0.39123000E+1,0.19378000E+1 - ,0.40920080E+3,0.450E+3,0.250E+3,0.39123000E+1,0.19505000E+1 - ,0.38757520E+3,0.450E+3,0.251E+3,0.39123000E+1,0.19523000E+1 - ,0.37504230E+3,0.450E+3,0.252E+3,0.39123000E+1,0.19639000E+1 - ,0.48468920E+3,0.450E+3,0.256E+3,0.39123000E+1,0.18467000E+1 - ,0.50402900E+3,0.450E+3,0.257E+3,0.39123000E+1,0.29175000E+1 - ,0.37581480E+3,0.450E+3,0.272E+3,0.39123000E+1,0.38840000E+1 - ,0.39163870E+3,0.450E+3,0.273E+3,0.39123000E+1,0.28988000E+1 - ,0.36554820E+3,0.450E+3,0.274E+3,0.39123000E+1,0.10915300E+2 - ,0.33325000E+3,0.450E+3,0.275E+3,0.39123000E+1,0.98054000E+1 - ,0.31443610E+3,0.450E+3,0.276E+3,0.39123000E+1,0.91527000E+1 - ,0.31935010E+3,0.450E+3,0.277E+3,0.39123000E+1,0.29424000E+1 - ,0.33574880E+3,0.450E+3,0.278E+3,0.39123000E+1,0.66669000E+1 - ,0.40362310E+3,0.450E+3,0.281E+3,0.39123000E+1,0.19302000E+1 - ,0.42669190E+3,0.450E+3,0.282E+3,0.39123000E+1,0.19356000E+1 - ,0.43576920E+3,0.450E+3,0.283E+3,0.39123000E+1,0.19655000E+1 - ,0.43337030E+3,0.450E+3,0.284E+3,0.39123000E+1,0.19639000E+1 - ,0.53385140E+3,0.450E+3,0.288E+3,0.39123000E+1,0.18075000E+1 - ,0.10232470E+3,0.450E+3,0.305E+3,0.39123000E+1,0.29128000E+1 - ,0.92326000E+2,0.450E+3,0.306E+3,0.39123000E+1,0.29987000E+1 - ,0.70080000E+2,0.450E+3,0.307E+3,0.39123000E+1,0.29903000E+1 - ,0.22605040E+3,0.450E+3,0.313E+3,0.39123000E+1,0.29146000E+1 - ,0.26996790E+3,0.450E+3,0.314E+3,0.39123000E+1,0.29407000E+1 - ,0.22554180E+3,0.450E+3,0.315E+3,0.39123000E+1,0.29859000E+1 - ,0.19911820E+3,0.450E+3,0.327E+3,0.39123000E+1,0.77785000E+1 - ,0.21713920E+3,0.450E+3,0.328E+3,0.39123000E+1,0.62918000E+1 - ,0.24041780E+3,0.450E+3,0.331E+3,0.39123000E+1,0.29233000E+1 - ,0.27737170E+3,0.450E+3,0.332E+3,0.39123000E+1,0.29186000E+1 - ,0.27434930E+3,0.450E+3,0.333E+3,0.39123000E+1,0.29709000E+1 - ,0.32315090E+3,0.450E+3,0.349E+3,0.39123000E+1,0.29353000E+1 - ,0.37016740E+3,0.450E+3,0.350E+3,0.39123000E+1,0.29259000E+1 - ,0.37439290E+3,0.450E+3,0.351E+3,0.39123000E+1,0.29315000E+1 - ,0.36163550E+3,0.450E+3,0.381E+3,0.39123000E+1,0.29420000E+1 - ,0.41924330E+3,0.450E+3,0.382E+3,0.39123000E+1,0.29081000E+1 - ,0.42353200E+3,0.450E+3,0.383E+3,0.39123000E+1,0.29500000E+1 - ,0.96417900E+2,0.450E+3,0.405E+3,0.39123000E+1,0.45856000E+1 - ,0.76081000E+2,0.450E+3,0.406E+3,0.39123000E+1,0.39844000E+1 - ,0.22392830E+3,0.450E+3,0.414E+3,0.39123000E+1,0.38677000E+1 - ,0.24599220E+3,0.450E+3,0.432E+3,0.39123000E+1,0.38972000E+1 - ,0.33610200E+3,0.450E+3,0.450E+3,0.39123000E+1,0.39123000E+1 - ,0.36783600E+2,0.482E+3,0.100E+1,0.39098000E+1,0.91180000E+0 - ,0.24792600E+2,0.482E+3,0.200E+1,0.39098000E+1,0.00000000E+0 - ,0.53122450E+3,0.482E+3,0.300E+1,0.39098000E+1,0.00000000E+0 - ,0.31732060E+3,0.482E+3,0.400E+1,0.39098000E+1,0.00000000E+0 - ,0.21779730E+3,0.482E+3,0.500E+1,0.39098000E+1,0.00000000E+0 - ,0.14929680E+3,0.482E+3,0.600E+1,0.39098000E+1,0.00000000E+0 - ,0.10560300E+3,0.482E+3,0.700E+1,0.39098000E+1,0.00000000E+0 - ,0.80644400E+2,0.482E+3,0.800E+1,0.39098000E+1,0.00000000E+0 - ,0.61573700E+2,0.482E+3,0.900E+1,0.39098000E+1,0.00000000E+0 - ,0.47684400E+2,0.482E+3,0.100E+2,0.39098000E+1,0.00000000E+0 - ,0.63682150E+3,0.482E+3,0.110E+2,0.39098000E+1,0.00000000E+0 - ,0.50280810E+3,0.482E+3,0.120E+2,0.39098000E+1,0.00000000E+0 - ,0.46801840E+3,0.482E+3,0.130E+2,0.39098000E+1,0.00000000E+0 - ,0.37358140E+3,0.482E+3,0.140E+2,0.39098000E+1,0.00000000E+0 - ,0.29452850E+3,0.482E+3,0.150E+2,0.39098000E+1,0.00000000E+0 - ,0.24623230E+3,0.482E+3,0.160E+2,0.39098000E+1,0.00000000E+0 - ,0.20258030E+3,0.482E+3,0.170E+2,0.39098000E+1,0.00000000E+0 - ,0.16681140E+3,0.482E+3,0.180E+2,0.39098000E+1,0.00000000E+0 - ,0.10395015E+4,0.482E+3,0.190E+2,0.39098000E+1,0.00000000E+0 - ,0.87485890E+3,0.482E+3,0.200E+2,0.39098000E+1,0.00000000E+0 - ,0.72603180E+3,0.482E+3,0.210E+2,0.39098000E+1,0.00000000E+0 - ,0.70421370E+3,0.482E+3,0.220E+2,0.39098000E+1,0.00000000E+0 - ,0.64655260E+3,0.482E+3,0.230E+2,0.39098000E+1,0.00000000E+0 - ,0.51001320E+3,0.482E+3,0.240E+2,0.39098000E+1,0.00000000E+0 - ,0.55878150E+3,0.482E+3,0.250E+2,0.39098000E+1,0.00000000E+0 - ,0.43938300E+3,0.482E+3,0.260E+2,0.39098000E+1,0.00000000E+0 - ,0.46773930E+3,0.482E+3,0.270E+2,0.39098000E+1,0.00000000E+0 - ,0.48056400E+3,0.482E+3,0.280E+2,0.39098000E+1,0.00000000E+0 - ,0.36899340E+3,0.482E+3,0.290E+2,0.39098000E+1,0.00000000E+0 - ,0.38142390E+3,0.482E+3,0.300E+2,0.39098000E+1,0.00000000E+0 - ,0.45032390E+3,0.482E+3,0.310E+2,0.39098000E+1,0.00000000E+0 - ,0.40100460E+3,0.482E+3,0.320E+2,0.39098000E+1,0.00000000E+0 - ,0.34508980E+3,0.482E+3,0.330E+2,0.39098000E+1,0.00000000E+0 - ,0.31140410E+3,0.482E+3,0.340E+2,0.39098000E+1,0.00000000E+0 - ,0.27412300E+3,0.482E+3,0.350E+2,0.39098000E+1,0.00000000E+0 - ,0.23971550E+3,0.482E+3,0.360E+2,0.39098000E+1,0.00000000E+0 - ,0.11675181E+4,0.482E+3,0.370E+2,0.39098000E+1,0.00000000E+0 - ,0.10418714E+4,0.482E+3,0.380E+2,0.39098000E+1,0.00000000E+0 - ,0.91996850E+3,0.482E+3,0.390E+2,0.39098000E+1,0.00000000E+0 - ,0.83102350E+3,0.482E+3,0.400E+2,0.39098000E+1,0.00000000E+0 - ,0.76040220E+3,0.482E+3,0.410E+2,0.39098000E+1,0.00000000E+0 - ,0.59076540E+3,0.482E+3,0.420E+2,0.39098000E+1,0.00000000E+0 - ,0.65761940E+3,0.482E+3,0.430E+2,0.39098000E+1,0.00000000E+0 - ,0.50446970E+3,0.482E+3,0.440E+2,0.39098000E+1,0.00000000E+0 - ,0.55107490E+3,0.482E+3,0.450E+2,0.39098000E+1,0.00000000E+0 - ,0.51214360E+3,0.482E+3,0.460E+2,0.39098000E+1,0.00000000E+0 - ,0.42704150E+3,0.482E+3,0.470E+2,0.39098000E+1,0.00000000E+0 - ,0.45257800E+3,0.482E+3,0.480E+2,0.39098000E+1,0.00000000E+0 - ,0.56405260E+3,0.482E+3,0.490E+2,0.39098000E+1,0.00000000E+0 - ,0.52557130E+3,0.482E+3,0.500E+2,0.39098000E+1,0.00000000E+0 - ,0.47195910E+3,0.482E+3,0.510E+2,0.39098000E+1,0.00000000E+0 - ,0.43993100E+3,0.482E+3,0.520E+2,0.39098000E+1,0.00000000E+0 - ,0.39979760E+3,0.482E+3,0.530E+2,0.39098000E+1,0.00000000E+0 - ,0.36119780E+3,0.482E+3,0.540E+2,0.39098000E+1,0.00000000E+0 - ,0.14230570E+4,0.482E+3,0.550E+2,0.39098000E+1,0.00000000E+0 - ,0.13251273E+4,0.482E+3,0.560E+2,0.39098000E+1,0.00000000E+0 - ,0.11733669E+4,0.482E+3,0.570E+2,0.39098000E+1,0.00000000E+0 - ,0.55692770E+3,0.482E+3,0.580E+2,0.39098000E+1,0.27991000E+1 - ,0.11775400E+4,0.482E+3,0.590E+2,0.39098000E+1,0.00000000E+0 - ,0.11321484E+4,0.482E+3,0.600E+2,0.39098000E+1,0.00000000E+0 - ,0.11041399E+4,0.482E+3,0.610E+2,0.39098000E+1,0.00000000E+0 - ,0.10783321E+4,0.482E+3,0.620E+2,0.39098000E+1,0.00000000E+0 - ,0.10554583E+4,0.482E+3,0.630E+2,0.39098000E+1,0.00000000E+0 - ,0.83768840E+3,0.482E+3,0.640E+2,0.39098000E+1,0.00000000E+0 - ,0.93165810E+3,0.482E+3,0.650E+2,0.39098000E+1,0.00000000E+0 - ,0.89994220E+3,0.482E+3,0.660E+2,0.39098000E+1,0.00000000E+0 - ,0.95379600E+3,0.482E+3,0.670E+2,0.39098000E+1,0.00000000E+0 - ,0.93372910E+3,0.482E+3,0.680E+2,0.39098000E+1,0.00000000E+0 - ,0.91573150E+3,0.482E+3,0.690E+2,0.39098000E+1,0.00000000E+0 - ,0.90466320E+3,0.482E+3,0.700E+2,0.39098000E+1,0.00000000E+0 - ,0.76704550E+3,0.482E+3,0.710E+2,0.39098000E+1,0.00000000E+0 - ,0.76010300E+3,0.482E+3,0.720E+2,0.39098000E+1,0.00000000E+0 - ,0.69715900E+3,0.482E+3,0.730E+2,0.39098000E+1,0.00000000E+0 - ,0.59132700E+3,0.482E+3,0.740E+2,0.39098000E+1,0.00000000E+0 - ,0.60261270E+3,0.482E+3,0.750E+2,0.39098000E+1,0.00000000E+0 - ,0.54853340E+3,0.482E+3,0.760E+2,0.39098000E+1,0.00000000E+0 - ,0.50415770E+3,0.482E+3,0.770E+2,0.39098000E+1,0.00000000E+0 - ,0.42063020E+3,0.482E+3,0.780E+2,0.39098000E+1,0.00000000E+0 - ,0.39369250E+3,0.482E+3,0.790E+2,0.39098000E+1,0.00000000E+0 - ,0.40549310E+3,0.482E+3,0.800E+2,0.39098000E+1,0.00000000E+0 - ,0.58079990E+3,0.482E+3,0.810E+2,0.39098000E+1,0.00000000E+0 - ,0.57106960E+3,0.482E+3,0.820E+2,0.39098000E+1,0.00000000E+0 - ,0.52826530E+3,0.482E+3,0.830E+2,0.39098000E+1,0.00000000E+0 - ,0.50580110E+3,0.482E+3,0.840E+2,0.39098000E+1,0.00000000E+0 - ,0.46902930E+3,0.482E+3,0.850E+2,0.39098000E+1,0.00000000E+0 - ,0.43179360E+3,0.482E+3,0.860E+2,0.39098000E+1,0.00000000E+0 - ,0.13523973E+4,0.482E+3,0.870E+2,0.39098000E+1,0.00000000E+0 - ,0.13158434E+4,0.482E+3,0.880E+2,0.39098000E+1,0.00000000E+0 - ,0.11716435E+4,0.482E+3,0.890E+2,0.39098000E+1,0.00000000E+0 - ,0.10619693E+4,0.482E+3,0.900E+2,0.39098000E+1,0.00000000E+0 - ,0.10504296E+4,0.482E+3,0.910E+2,0.39098000E+1,0.00000000E+0 - ,0.10173620E+4,0.482E+3,0.920E+2,0.39098000E+1,0.00000000E+0 - ,0.10421717E+4,0.482E+3,0.930E+2,0.39098000E+1,0.00000000E+0 - ,0.10101837E+4,0.482E+3,0.940E+2,0.39098000E+1,0.00000000E+0 - ,0.58587500E+2,0.482E+3,0.101E+3,0.39098000E+1,0.00000000E+0 - ,0.18499140E+3,0.482E+3,0.103E+3,0.39098000E+1,0.98650000E+0 - ,0.23683180E+3,0.482E+3,0.104E+3,0.39098000E+1,0.98080000E+0 - ,0.18395600E+3,0.482E+3,0.105E+3,0.39098000E+1,0.97060000E+0 - ,0.14003800E+3,0.482E+3,0.106E+3,0.39098000E+1,0.98680000E+0 - ,0.98524700E+2,0.482E+3,0.107E+3,0.39098000E+1,0.99440000E+0 - ,0.72487200E+2,0.482E+3,0.108E+3,0.39098000E+1,0.99250000E+0 - ,0.50522200E+2,0.482E+3,0.109E+3,0.39098000E+1,0.99820000E+0 - ,0.26973770E+3,0.482E+3,0.111E+3,0.39098000E+1,0.96840000E+0 - ,0.41633670E+3,0.482E+3,0.112E+3,0.39098000E+1,0.96280000E+0 - ,0.42518440E+3,0.482E+3,0.113E+3,0.39098000E+1,0.96480000E+0 - ,0.34595860E+3,0.482E+3,0.114E+3,0.39098000E+1,0.95070000E+0 - ,0.28602000E+3,0.482E+3,0.115E+3,0.39098000E+1,0.99470000E+0 - ,0.24349690E+3,0.482E+3,0.116E+3,0.39098000E+1,0.99480000E+0 - ,0.20046870E+3,0.482E+3,0.117E+3,0.39098000E+1,0.99720000E+0 - ,0.37503550E+3,0.482E+3,0.119E+3,0.39098000E+1,0.97670000E+0 - ,0.70097800E+3,0.482E+3,0.120E+3,0.39098000E+1,0.98310000E+0 - ,0.37867460E+3,0.482E+3,0.121E+3,0.39098000E+1,0.18627000E+1 - ,0.36578460E+3,0.482E+3,0.122E+3,0.39098000E+1,0.18299000E+1 - ,0.35844930E+3,0.482E+3,0.123E+3,0.39098000E+1,0.19138000E+1 - ,0.35474250E+3,0.482E+3,0.124E+3,0.39098000E+1,0.18269000E+1 - ,0.32825710E+3,0.482E+3,0.125E+3,0.39098000E+1,0.16406000E+1 - ,0.30438240E+3,0.482E+3,0.126E+3,0.39098000E+1,0.16483000E+1 - ,0.29042420E+3,0.482E+3,0.127E+3,0.39098000E+1,0.17149000E+1 - ,0.28381310E+3,0.482E+3,0.128E+3,0.39098000E+1,0.17937000E+1 - ,0.27924290E+3,0.482E+3,0.129E+3,0.39098000E+1,0.95760000E+0 - ,0.26402220E+3,0.482E+3,0.130E+3,0.39098000E+1,0.19419000E+1 - ,0.42402640E+3,0.482E+3,0.131E+3,0.39098000E+1,0.96010000E+0 - ,0.37603190E+3,0.482E+3,0.132E+3,0.39098000E+1,0.94340000E+0 - ,0.33942410E+3,0.482E+3,0.133E+3,0.39098000E+1,0.98890000E+0 - ,0.31150380E+3,0.482E+3,0.134E+3,0.39098000E+1,0.99010000E+0 - ,0.27595340E+3,0.482E+3,0.135E+3,0.39098000E+1,0.99740000E+0 - ,0.44859350E+3,0.482E+3,0.137E+3,0.39098000E+1,0.97380000E+0 - ,0.85231430E+3,0.482E+3,0.138E+3,0.39098000E+1,0.98010000E+0 - ,0.66191080E+3,0.482E+3,0.139E+3,0.39098000E+1,0.19153000E+1 - ,0.50057750E+3,0.482E+3,0.140E+3,0.39098000E+1,0.19355000E+1 - ,0.50546450E+3,0.482E+3,0.141E+3,0.39098000E+1,0.19545000E+1 - ,0.47245030E+3,0.482E+3,0.142E+3,0.39098000E+1,0.19420000E+1 - ,0.52594030E+3,0.482E+3,0.143E+3,0.39098000E+1,0.16682000E+1 - ,0.41423030E+3,0.482E+3,0.144E+3,0.39098000E+1,0.18584000E+1 - ,0.38785700E+3,0.482E+3,0.145E+3,0.39098000E+1,0.19003000E+1 - ,0.36065710E+3,0.482E+3,0.146E+3,0.39098000E+1,0.18630000E+1 - ,0.34865520E+3,0.482E+3,0.147E+3,0.39098000E+1,0.96790000E+0 - ,0.34625000E+3,0.482E+3,0.148E+3,0.39098000E+1,0.19539000E+1 - ,0.53916270E+3,0.482E+3,0.149E+3,0.39098000E+1,0.96330000E+0 - ,0.49165990E+3,0.482E+3,0.150E+3,0.39098000E+1,0.95140000E+0 - ,0.46303140E+3,0.482E+3,0.151E+3,0.39098000E+1,0.97490000E+0 - ,0.43973150E+3,0.482E+3,0.152E+3,0.39098000E+1,0.98110000E+0 - ,0.40350580E+3,0.482E+3,0.153E+3,0.39098000E+1,0.99680000E+0 - ,0.53352020E+3,0.482E+3,0.155E+3,0.39098000E+1,0.99090000E+0 - ,0.11018490E+4,0.482E+3,0.156E+3,0.39098000E+1,0.97970000E+0 - ,0.83668870E+3,0.482E+3,0.157E+3,0.39098000E+1,0.19373000E+1 - ,0.54039720E+3,0.482E+3,0.159E+3,0.39098000E+1,0.29425000E+1 - ,0.52927220E+3,0.482E+3,0.160E+3,0.39098000E+1,0.29455000E+1 - ,0.51271470E+3,0.482E+3,0.161E+3,0.39098000E+1,0.29413000E+1 - ,0.51464180E+3,0.482E+3,0.162E+3,0.39098000E+1,0.29300000E+1 - ,0.49434850E+3,0.482E+3,0.163E+3,0.39098000E+1,0.18286000E+1 - ,0.51763800E+3,0.482E+3,0.164E+3,0.39098000E+1,0.28732000E+1 - ,0.48672230E+3,0.482E+3,0.165E+3,0.39098000E+1,0.29086000E+1 - ,0.49423650E+3,0.482E+3,0.166E+3,0.39098000E+1,0.28965000E+1 - ,0.46243040E+3,0.482E+3,0.167E+3,0.39098000E+1,0.29242000E+1 - ,0.44942300E+3,0.482E+3,0.168E+3,0.39098000E+1,0.29282000E+1 - ,0.44639320E+3,0.482E+3,0.169E+3,0.39098000E+1,0.29246000E+1 - ,0.46834080E+3,0.482E+3,0.170E+3,0.39098000E+1,0.28482000E+1 - ,0.43169210E+3,0.482E+3,0.171E+3,0.39098000E+1,0.29219000E+1 - ,0.57700800E+3,0.482E+3,0.172E+3,0.39098000E+1,0.19254000E+1 - ,0.53808640E+3,0.482E+3,0.173E+3,0.39098000E+1,0.19459000E+1 - ,0.49341180E+3,0.482E+3,0.174E+3,0.39098000E+1,0.19292000E+1 - ,0.49722060E+3,0.482E+3,0.175E+3,0.39098000E+1,0.18104000E+1 - ,0.44014790E+3,0.482E+3,0.176E+3,0.39098000E+1,0.18858000E+1 - ,0.41487760E+3,0.482E+3,0.177E+3,0.39098000E+1,0.18648000E+1 - ,0.39675610E+3,0.482E+3,0.178E+3,0.39098000E+1,0.19188000E+1 - ,0.37939980E+3,0.482E+3,0.179E+3,0.39098000E+1,0.98460000E+0 - ,0.36797200E+3,0.482E+3,0.180E+3,0.39098000E+1,0.19896000E+1 - ,0.58018030E+3,0.482E+3,0.181E+3,0.39098000E+1,0.92670000E+0 - ,0.53289470E+3,0.482E+3,0.182E+3,0.39098000E+1,0.93830000E+0 - ,0.51891070E+3,0.482E+3,0.183E+3,0.39098000E+1,0.98200000E+0 - ,0.50620180E+3,0.482E+3,0.184E+3,0.39098000E+1,0.98150000E+0 - ,0.47470440E+3,0.482E+3,0.185E+3,0.39098000E+1,0.99540000E+0 - ,0.60111980E+3,0.482E+3,0.187E+3,0.39098000E+1,0.97050000E+0 - ,0.11015277E+4,0.482E+3,0.188E+3,0.39098000E+1,0.96620000E+0 - ,0.63923770E+3,0.482E+3,0.189E+3,0.39098000E+1,0.29070000E+1 - ,0.73305960E+3,0.482E+3,0.190E+3,0.39098000E+1,0.28844000E+1 - ,0.65721210E+3,0.482E+3,0.191E+3,0.39098000E+1,0.28738000E+1 - ,0.58388650E+3,0.482E+3,0.192E+3,0.39098000E+1,0.28878000E+1 - ,0.56256740E+3,0.482E+3,0.193E+3,0.39098000E+1,0.29095000E+1 - ,0.66728070E+3,0.482E+3,0.194E+3,0.39098000E+1,0.19209000E+1 - ,0.15719910E+3,0.482E+3,0.204E+3,0.39098000E+1,0.19697000E+1 - ,0.15506850E+3,0.482E+3,0.205E+3,0.39098000E+1,0.19441000E+1 - ,0.11488240E+3,0.482E+3,0.206E+3,0.39098000E+1,0.19985000E+1 - ,0.92650800E+2,0.482E+3,0.207E+3,0.39098000E+1,0.20143000E+1 - ,0.64174400E+2,0.482E+3,0.208E+3,0.39098000E+1,0.19887000E+1 - ,0.27667550E+3,0.482E+3,0.212E+3,0.39098000E+1,0.19496000E+1 - ,0.33398620E+3,0.482E+3,0.213E+3,0.39098000E+1,0.19311000E+1 - ,0.32238950E+3,0.482E+3,0.214E+3,0.39098000E+1,0.19435000E+1 - ,0.28199150E+3,0.482E+3,0.215E+3,0.39098000E+1,0.20102000E+1 - ,0.23862230E+3,0.482E+3,0.216E+3,0.39098000E+1,0.19903000E+1 - ,0.38820850E+3,0.482E+3,0.220E+3,0.39098000E+1,0.19349000E+1 - ,0.37487440E+3,0.482E+3,0.221E+3,0.39098000E+1,0.28999000E+1 - ,0.37965070E+3,0.482E+3,0.222E+3,0.39098000E+1,0.38675000E+1 - ,0.34749740E+3,0.482E+3,0.223E+3,0.39098000E+1,0.29110000E+1 - ,0.26405320E+3,0.482E+3,0.224E+3,0.39098000E+1,0.10619100E+2 - ,0.22711690E+3,0.482E+3,0.225E+3,0.39098000E+1,0.98849000E+1 - ,0.22282550E+3,0.482E+3,0.226E+3,0.39098000E+1,0.91376000E+1 - ,0.25908200E+3,0.482E+3,0.227E+3,0.39098000E+1,0.29263000E+1 - ,0.24194730E+3,0.482E+3,0.228E+3,0.39098000E+1,0.65458000E+1 - ,0.33891650E+3,0.482E+3,0.231E+3,0.39098000E+1,0.19315000E+1 - ,0.35857470E+3,0.482E+3,0.232E+3,0.39098000E+1,0.19447000E+1 - ,0.33082030E+3,0.482E+3,0.233E+3,0.39098000E+1,0.19793000E+1 - ,0.30911340E+3,0.482E+3,0.234E+3,0.39098000E+1,0.19812000E+1 - ,0.46550130E+3,0.482E+3,0.238E+3,0.39098000E+1,0.19143000E+1 - ,0.45081160E+3,0.482E+3,0.239E+3,0.39098000E+1,0.28903000E+1 - ,0.45551320E+3,0.482E+3,0.240E+3,0.39098000E+1,0.39106000E+1 - ,0.44042440E+3,0.482E+3,0.241E+3,0.39098000E+1,0.29225000E+1 - ,0.39158340E+3,0.482E+3,0.242E+3,0.39098000E+1,0.11055600E+2 - ,0.34719340E+3,0.482E+3,0.243E+3,0.39098000E+1,0.95402000E+1 - ,0.32867310E+3,0.482E+3,0.244E+3,0.39098000E+1,0.88895000E+1 - ,0.33331550E+3,0.482E+3,0.245E+3,0.39098000E+1,0.29696000E+1 - ,0.34765890E+3,0.482E+3,0.246E+3,0.39098000E+1,0.57095000E+1 - ,0.43817200E+3,0.482E+3,0.249E+3,0.39098000E+1,0.19378000E+1 - ,0.47608450E+3,0.482E+3,0.250E+3,0.39098000E+1,0.19505000E+1 - ,0.45091710E+3,0.482E+3,0.251E+3,0.39098000E+1,0.19523000E+1 - ,0.43638380E+3,0.482E+3,0.252E+3,0.39098000E+1,0.19639000E+1 - ,0.56401480E+3,0.482E+3,0.256E+3,0.39098000E+1,0.18467000E+1 - ,0.58633110E+3,0.482E+3,0.257E+3,0.39098000E+1,0.29175000E+1 - ,0.43725330E+3,0.482E+3,0.272E+3,0.39098000E+1,0.38840000E+1 - ,0.45578380E+3,0.482E+3,0.273E+3,0.39098000E+1,0.28988000E+1 - ,0.42555250E+3,0.482E+3,0.274E+3,0.39098000E+1,0.10915300E+2 - ,0.38809680E+3,0.482E+3,0.275E+3,0.39098000E+1,0.98054000E+1 - ,0.36629140E+3,0.482E+3,0.276E+3,0.39098000E+1,0.91527000E+1 - ,0.37206660E+3,0.482E+3,0.277E+3,0.39098000E+1,0.29424000E+1 - ,0.39108870E+3,0.482E+3,0.278E+3,0.39098000E+1,0.66669000E+1 - ,0.46992250E+3,0.482E+3,0.281E+3,0.39098000E+1,0.19302000E+1 - ,0.49666200E+3,0.482E+3,0.282E+3,0.39098000E+1,0.19356000E+1 - ,0.50715130E+3,0.482E+3,0.283E+3,0.39098000E+1,0.19655000E+1 - ,0.50436840E+3,0.482E+3,0.284E+3,0.39098000E+1,0.19639000E+1 - ,0.62120410E+3,0.482E+3,0.288E+3,0.39098000E+1,0.18075000E+1 - ,0.11907380E+3,0.482E+3,0.305E+3,0.39098000E+1,0.29128000E+1 - ,0.10755120E+3,0.482E+3,0.306E+3,0.39098000E+1,0.29987000E+1 - ,0.81781000E+2,0.482E+3,0.307E+3,0.39098000E+1,0.29903000E+1 - ,0.26273830E+3,0.482E+3,0.313E+3,0.39098000E+1,0.29146000E+1 - ,0.31386840E+3,0.482E+3,0.314E+3,0.39098000E+1,0.29407000E+1 - ,0.26230480E+3,0.482E+3,0.315E+3,0.39098000E+1,0.29859000E+1 - ,0.23191300E+3,0.482E+3,0.327E+3,0.39098000E+1,0.77785000E+1 - ,0.25285690E+3,0.482E+3,0.328E+3,0.39098000E+1,0.62918000E+1 - ,0.27961360E+3,0.482E+3,0.331E+3,0.39098000E+1,0.29233000E+1 - ,0.32256300E+3,0.482E+3,0.332E+3,0.39098000E+1,0.29186000E+1 - ,0.31909300E+3,0.482E+3,0.333E+3,0.39098000E+1,0.29709000E+1 - ,0.37612340E+3,0.482E+3,0.349E+3,0.39098000E+1,0.29353000E+1 - ,0.43071080E+3,0.482E+3,0.350E+3,0.39098000E+1,0.29259000E+1 - ,0.43559950E+3,0.482E+3,0.351E+3,0.39098000E+1,0.29315000E+1 - ,0.42108940E+3,0.482E+3,0.381E+3,0.39098000E+1,0.29420000E+1 - ,0.48797400E+3,0.482E+3,0.382E+3,0.39098000E+1,0.29081000E+1 - ,0.49291380E+3,0.482E+3,0.383E+3,0.39098000E+1,0.29500000E+1 - ,0.11222540E+3,0.482E+3,0.405E+3,0.39098000E+1,0.45856000E+1 - ,0.88703000E+2,0.482E+3,0.406E+3,0.39098000E+1,0.39844000E+1 - ,0.26034680E+3,0.482E+3,0.414E+3,0.39098000E+1,0.38677000E+1 - ,0.28611790E+3,0.482E+3,0.432E+3,0.39098000E+1,0.38972000E+1 - ,0.39112500E+3,0.482E+3,0.450E+3,0.39098000E+1,0.39123000E+1 - ,0.45528540E+3,0.482E+3,0.482E+3,0.39098000E+1,0.39098000E+1 - }; + std::vector C6_tmp + = {0.30267000E+1, 0.100E+1, 0.100E+1, 0.91180000E+0, 0.91180000E+0, 0.20835000E+1, 0.200E+1, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.15583000E+1, 0.200E+1, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.38944800E+2, 0.300E+1, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.22150800E+2, + 0.300E+1, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.11634454E+4, 0.300E+1, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.24441500E+2, 0.400E+1, 0.100E+1, 0.00000000E+0, 0.91180000E+0, + 0.14824600E+2, 0.400E+1, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.49461900E+3, 0.400E+1, + 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.25748630E+3, 0.400E+1, 0.400E+1, 0.00000000E+0, + 0.00000000E+0, 0.17314300E+2, 0.500E+1, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.11097500E+2, + 0.500E+1, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.28373080E+3, 0.500E+1, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.16159710E+3, 0.500E+1, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.10717770E+3, 0.500E+1, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.12140200E+2, 0.600E+1, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.81841000E+1, 0.600E+1, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.16990300E+3, 0.600E+1, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.10295600E+3, + 0.600E+1, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.71279400E+2, 0.600E+1, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.49113000E+2, 0.600E+1, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.87171000E+1, 0.700E+1, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.61380000E+1, 0.700E+1, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.10848540E+3, 0.700E+1, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.68645800E+2, 0.700E+1, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.49113200E+2, + 0.700E+1, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.34814600E+2, 0.700E+1, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.25268500E+2, 0.700E+1, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.67180000E+1, 0.800E+1, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.48949000E+1, 0.800E+1, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.76961300E+2, 0.800E+1, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.50125200E+2, 0.800E+1, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.36724700E+2, + 0.800E+1, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.26592900E+2, 0.800E+1, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.19654600E+2, 0.800E+1, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.15505900E+2, 0.800E+1, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.51616000E+1, 0.900E+1, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.38825000E+1, 0.900E+1, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.55093300E+2, 0.900E+1, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.36745300E+2, + 0.900E+1, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.27482100E+2, 0.900E+1, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.20282700E+2, 0.900E+1, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.15241800E+2, 0.900E+1, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.12183400E+2, 0.900E+1, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.96916000E+1, 0.900E+1, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.40112000E+1, 0.100E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.31025000E+1, + 0.100E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.40473100E+2, 0.100E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.27486700E+2, 0.100E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.20902200E+2, 0.100E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.15674000E+2, 0.100E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.11947900E+2, 0.100E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.96606000E+1, 0.100E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.77691000E+1, + 0.100E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.62896000E+1, 0.100E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.46823200E+2, 0.110E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, + 0.26862800E+2, 0.110E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.13673272E+4, 0.110E+2, + 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.58745630E+3, 0.110E+2, 0.400E+1, 0.00000000E+0, + 0.00000000E+0, 0.33872120E+3, 0.110E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.20376310E+3, + 0.110E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.13065630E+3, 0.110E+2, 0.700E+1, + 0.00000000E+0, 0.00000000E+0, 0.93026300E+2, 0.110E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, + 0.66842300E+2, 0.110E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.49279900E+2, 0.110E+2, + 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.16080286E+4, 0.110E+2, 0.110E+2, 0.00000000E+0, + 0.00000000E+0, 0.38353100E+2, 0.120E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.23032000E+2, + 0.120E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.83081560E+3, 0.120E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.41821640E+3, 0.120E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.25813030E+3, 0.120E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.16260820E+3, 0.120E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.10761500E+3, 0.120E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.78225000E+2, 0.120E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.57160500E+2, + 0.120E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.42677100E+2, 0.120E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.98516970E+3, 0.120E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.68337580E+3, 0.120E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.36290900E+2, 0.130E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.22322400E+2, 0.130E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.70582540E+3, 0.130E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.37263020E+3, + 0.130E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.23647800E+3, 0.130E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.15209340E+3, 0.130E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.10220000E+3, 0.130E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.75075500E+2, 0.130E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.55341200E+2, 0.130E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.41596600E+2, 0.130E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.83896480E+3, + 0.130E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.60346890E+3, 0.130E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.54054060E+3, 0.130E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.29594700E+2, 0.140E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.18850000E+2, 0.140E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.49534490E+3, 0.140E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.27978630E+3, 0.140E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.18451110E+3, + 0.140E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.12213870E+3, 0.140E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.83849800E+2, 0.140E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.62534900E+2, 0.140E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.46693600E+2, 0.140E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.35455000E+2, 0.140E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.59104580E+3, 0.140E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.44764230E+3, + 0.140E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.40896060E+3, 0.140E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.31785740E+3, 0.140E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.23760400E+2, 0.150E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.15668900E+2, 0.150E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.35080300E+3, 0.150E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.20873310E+3, 0.150E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.14234810E+3, + 0.150E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.96750300E+2, 0.150E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.67787300E+2, 0.150E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.51309800E+2, 0.150E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.38808400E+2, 0.150E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.29776700E+2, 0.150E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.42000640E+3, 0.150E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.33078010E+3, + 0.150E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.30729650E+3, 0.150E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.24435460E+3, 0.150E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.19168870E+3, 0.150E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.20094800E+2, 0.160E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.13610800E+2, 0.160E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.27378670E+3, 0.160E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.16795130E+3, + 0.160E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.11711210E+3, 0.160E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.81091900E+2, 0.160E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.57673400E+2, 0.160E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.44147000E+2, 0.160E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.33726400E+2, 0.160E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.26094000E+2, 0.160E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.32859900E+3, + 0.160E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.26466650E+3, 0.160E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.24850080E+3, 0.160E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.20053740E+3, 0.160E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.15948980E+3, 0.160E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.13400660E+3, 0.160E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.16705200E+2, 0.170E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.11630200E+2, + 0.170E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.21066260E+3, 0.170E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.13298080E+3, 0.170E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.94761200E+2, 0.170E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.66840700E+2, 0.170E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.48262400E+2, 0.170E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.37368800E+2, 0.170E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.28844500E+2, + 0.170E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.22512100E+2, 0.170E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.25351360E+3, 0.170E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.20849780E+3, 0.170E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.19775940E+3, 0.170E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.16186860E+3, 0.170E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.13047250E+3, 0.170E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.11070060E+3, + 0.170E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.92346000E+2, 0.170E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.13870000E+2, 0.180E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, + 0.99130000E+1, 0.180E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.16354970E+3, 0.180E+2, + 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.10572290E+3, 0.180E+2, 0.400E+1, 0.00000000E+0, + 0.00000000E+0, 0.76794900E+2, 0.180E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.55089800E+2, + 0.180E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.40343500E+2, 0.180E+2, 0.700E+1, + 0.00000000E+0, 0.00000000E+0, 0.31578300E+2, 0.180E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, + 0.24617800E+2, 0.180E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.19377400E+2, 0.180E+2, + 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.19734400E+3, 0.180E+2, 0.110E+2, 0.00000000E+0, + 0.00000000E+0, 0.16510060E+3, 0.180E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.15795950E+3, + 0.180E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.13089270E+3, 0.180E+2, 0.140E+2, + 0.00000000E+0, 0.00000000E+0, 0.10676980E+3, 0.180E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, + 0.91401400E+2, 0.180E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.76938300E+2, 0.180E+2, + 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.64646200E+2, 0.180E+2, 0.180E+2, 0.00000000E+0, + 0.00000000E+0, 0.76237600E+2, 0.190E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.44041100E+2, + 0.190E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.23871574E+4, 0.190E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.97231970E+3, 0.190E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.55419800E+3, 0.190E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.33226940E+3, 0.190E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.21320010E+3, 0.190E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.15214200E+3, 0.190E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.10964390E+3, + 0.190E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.81086100E+2, 0.190E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.27986124E+4, 0.190E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.16420587E+4, 0.190E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.13879361E+4, 0.190E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.96762830E+3, 0.190E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.68449680E+3, 0.190E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.53523840E+3, + 0.190E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.41315120E+3, 0.190E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.32211550E+3, 0.190E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.49835009E+4, 0.190E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.65818000E+2, 0.200E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.39070100E+2, 0.200E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.16144719E+4, 0.200E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.75790700E+3, + 0.200E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.45484390E+3, 0.200E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.28170350E+3, 0.200E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.18454980E+3, 0.200E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.13338470E+3, 0.200E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.97082400E+2, 0.200E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.72307200E+2, 0.200E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.19077081E+4, + 0.200E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.12525932E+4, 0.200E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.10888420E+4, 0.200E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.79063470E+3, 0.200E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.57546270E+3, 0.200E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.45684430E+3, 0.200E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.35747370E+3, 0.200E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.28168230E+3, + 0.200E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.32404393E+4, 0.200E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.23526862E+4, 0.200E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.54966900E+2, 0.210E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.32899500E+2, 0.210E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.12781183E+4, 0.210E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.61733580E+3, 0.210E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.37504180E+3, + 0.210E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.23419500E+3, 0.210E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.15429470E+3, 0.210E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.11193590E+3, 0.210E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.81724200E+2, 0.210E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.61015400E+2, 0.210E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.15125338E+4, 0.210E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.10155454E+4, + 0.210E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.88860250E+3, 0.210E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.65120400E+3, 0.210E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.47727970E+3, 0.210E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.38041070E+3, 0.210E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.29876860E+3, 0.210E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.23614170E+3, 0.210E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.25499412E+4, + 0.210E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.18887902E+4, 0.210E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.15224676E+4, 0.210E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.53687500E+2, 0.220E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.32531600E+2, 0.220E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.11929128E+4, 0.220E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.58748980E+3, 0.220E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.36108650E+3, + 0.220E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.22757230E+3, 0.220E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.15101990E+3, 0.220E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.11014520E+3, 0.220E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.80797500E+2, 0.220E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.60559400E+2, 0.220E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.14131570E+4, 0.220E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.96298310E+3, + 0.220E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.84746150E+3, 0.220E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.62623530E+3, 0.220E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.46232470E+3, 0.220E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.37026310E+3, 0.220E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.29218530E+3, 0.220E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.23192080E+3, 0.220E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.23746690E+4, + 0.220E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.17795162E+4, 0.220E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.14382841E+4, 0.220E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.13619185E+4, 0.220E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.49481900E+2, 0.230E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.30185100E+2, 0.230E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.10690426E+4, 0.230E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.53334990E+3, + 0.230E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.33010230E+3, 0.230E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.20914500E+3, 0.230E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.13935120E+3, 0.230E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.10193250E+3, 0.230E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.74967100E+2, 0.230E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.56310800E+2, 0.230E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.12673139E+4, + 0.230E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.87225790E+3, 0.230E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.77034320E+3, 0.230E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.57211290E+3, 0.230E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.42414700E+3, 0.230E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.34060200E+3, 0.230E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.26948630E+3, 0.230E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.21440020E+3, + 0.230E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.21241985E+4, 0.230E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.16049178E+4, 0.230E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.12995197E+4, 0.230E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.12323235E+4, 0.230E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.11160984E+4, 0.230E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.39122100E+2, 0.240E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.24146300E+2, + 0.240E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.84409360E+3, 0.240E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.41816350E+3, 0.240E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.25930210E+3, 0.240E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.16498820E+3, 0.240E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.11048610E+3, 0.240E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.81200000E+2, 0.240E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.60009900E+2, + 0.240E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.45282000E+2, 0.240E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.10004652E+4, 0.240E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.68440150E+3, 0.240E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.60440710E+3, 0.240E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.44922160E+3, 0.240E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.33383800E+3, 0.240E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.26880290E+3, + 0.240E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.21336680E+3, 0.240E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.17034650E+3, 0.240E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.16836701E+4, 0.240E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.12630809E+4, 0.240E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.10216871E+4, 0.240E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.96885650E+3, 0.240E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.87738550E+3, + 0.240E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.69074250E+3, 0.240E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.43002800E+2, 0.250E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, + 0.26497800E+2, 0.250E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.89197560E+3, 0.250E+2, + 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.45336860E+3, 0.250E+2, 0.400E+1, 0.00000000E+0, + 0.00000000E+0, 0.28347440E+3, 0.250E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.18100350E+3, + 0.250E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.12132330E+3, 0.250E+2, 0.700E+1, + 0.00000000E+0, 0.00000000E+0, 0.89134600E+2, 0.250E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, + 0.65811200E+2, 0.250E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.49595900E+2, 0.250E+2, + 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.10585103E+4, 0.250E+2, 0.110E+2, 0.00000000E+0, + 0.00000000E+0, 0.73904110E+3, 0.250E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.65607380E+3, + 0.250E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.49081560E+3, 0.250E+2, 0.140E+2, + 0.00000000E+0, 0.00000000E+0, 0.36612040E+3, 0.250E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, + 0.29517370E+3, 0.250E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.23445330E+3, 0.250E+2, + 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.18717280E+3, 0.250E+2, 0.180E+2, 0.00000000E+0, + 0.00000000E+0, 0.17680322E+4, 0.250E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.13514785E+4, + 0.250E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.10971539E+4, 0.250E+2, 0.210E+2, + 0.00000000E+0, 0.00000000E+0, 0.10426625E+4, 0.250E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, + 0.94560720E+3, 0.250E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.74331790E+3, 0.250E+2, + 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.80274840E+3, 0.250E+2, 0.250E+2, 0.00000000E+0, + 0.00000000E+0, 0.33911000E+2, 0.260E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.21175000E+2, + 0.260E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.69845390E+3, 0.260E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.35353580E+3, 0.260E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.22175470E+3, 0.260E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.14234670E+3, 0.260E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.95978200E+2, 0.260E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.70894200E+2, 0.260E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.52631000E+2, + 0.260E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.39865900E+2, 0.260E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.82889360E+3, 0.260E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.57651210E+3, 0.260E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.51208230E+3, 0.260E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.38374450E+3, 0.260E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.28716060E+3, 0.260E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.23226250E+3, + 0.260E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.18518230E+3, 0.260E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.14843190E+3, 0.260E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.13889522E+4, 0.260E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.10565193E+4, 0.260E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.85717300E+3, 0.260E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.81484020E+3, 0.260E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.73905420E+3, + 0.260E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.58181140E+3, 0.260E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.62754030E+3, 0.260E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.49133490E+3, 0.260E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.36323400E+2, 0.270E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.22723300E+2, 0.270E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.70153240E+3, 0.270E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.36919280E+3, + 0.270E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.23486930E+3, 0.270E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.15187030E+3, 0.270E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.10275030E+3, 0.270E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.75991200E+2, 0.270E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.56430700E+2, 0.270E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.42727000E+2, 0.270E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.83418260E+3, + 0.270E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.59833020E+3, 0.270E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.53597060E+3, 0.270E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.40599070E+3, 0.270E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.30592560E+3, 0.270E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.24821160E+3, 0.270E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.19835700E+3, 0.270E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.15919570E+3, + 0.270E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.13829771E+4, 0.270E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.10817690E+4, 0.270E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.88245030E+3, 0.270E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.84183350E+3, 0.270E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.76531780E+3, 0.270E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.60141780E+3, 0.270E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.65196880E+3, + 0.270E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.50977640E+3, 0.270E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.53277940E+3, 0.270E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.37159600E+2, 0.280E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.23079200E+2, 0.280E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.73885800E+3, 0.280E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.38391400E+3, 0.280E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.24241740E+3, + 0.280E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.15585070E+3, 0.280E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.10498340E+3, 0.280E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.77401000E+2, 0.280E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.57324800E+2, 0.280E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.43312900E+2, 0.280E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.87793540E+3, 0.280E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.62363050E+3, + 0.280E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.55653890E+3, 0.280E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.41935930E+3, 0.280E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.31456980E+3, 0.280E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.25446830E+3, 0.280E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.20277050E+3, 0.280E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.16232640E+3, 0.280E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.14584501E+4, + 0.280E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.11321074E+4, 0.280E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.92189900E+3, 0.280E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.87809390E+3, 0.280E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.79751950E+3, 0.280E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.62664720E+3, 0.280E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.67845310E+3, 0.280E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.53032210E+3, + 0.280E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.55308340E+3, 0.280E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.57474360E+3, 0.280E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.28594000E+2, 0.290E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.18021600E+2, 0.290E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.56945260E+3, 0.290E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.29279550E+3, 0.290E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.18517410E+3, + 0.290E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.11963500E+3, 0.290E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.81085500E+2, 0.290E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.60133500E+2, 0.290E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.44809800E+2, 0.290E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.34054400E+2, 0.290E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.67647730E+3, 0.290E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.47624260E+3, + 0.290E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.42477230E+3, 0.290E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.32019130E+3, 0.290E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.24079740E+3, 0.290E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.19540750E+3, 0.290E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.15631610E+3, 0.290E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.12567760E+3, 0.290E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.11299518E+4, + 0.290E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.86836740E+3, 0.290E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.70607200E+3, 0.290E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.67241280E+3, 0.290E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.61057000E+3, 0.290E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.48069380E+3, 0.290E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.51930780E+3, 0.290E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.40672680E+3, + 0.290E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.42308770E+3, 0.290E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.43963650E+3, 0.290E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.33718080E+3, 0.290E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.29868900E+2, 0.300E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.18969500E+2, 0.300E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.54091600E+3, 0.300E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.29331060E+3, + 0.300E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.18962930E+3, 0.300E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.12410320E+3, 0.300E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.84731100E+2, 0.300E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.63077400E+2, 0.300E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.47112200E+2, 0.300E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.35842700E+2, 0.300E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.64434080E+3, + 0.300E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.47291430E+3, 0.300E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.42716100E+3, 0.300E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.32728100E+3, 0.300E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.24897430E+3, 0.300E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.20324270E+3, 0.300E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.16338480E+3, 0.300E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.13181190E+3, + 0.300E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.10625928E+4, 0.300E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.84685270E+3, 0.300E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.69367870E+3, 0.300E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.66410090E+3, 0.300E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.60506230E+3, 0.300E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.47555940E+3, 0.300E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.51709100E+3, + 0.300E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.40455580E+3, 0.300E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.42487900E+3, 0.300E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.44009000E+3, 0.300E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.33664930E+3, 0.300E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.34052130E+3, 0.300E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.35169700E+2, 0.310E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.22045800E+2, + 0.310E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.65674410E+3, 0.310E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.35111410E+3, 0.310E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.22539330E+3, 0.310E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.14655440E+3, 0.310E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.99440700E+2, 0.310E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.73625300E+2, 0.310E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.54678200E+2, + 0.310E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.41368100E+2, 0.310E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.78135240E+3, 0.310E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.56716380E+3, 0.310E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.51058540E+3, 0.310E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.38926560E+3, 0.310E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.29479250E+3, 0.310E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.23981830E+3, + 0.310E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.19205780E+3, 0.310E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.15434230E+3, 0.310E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.12928121E+4, 0.310E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.10198835E+4, 0.310E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.83374240E+3, 0.310E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.79686170E+3, 0.310E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.72525140E+3, + 0.310E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.56976450E+3, 0.310E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.61883870E+3, 0.310E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.48378150E+3, 0.310E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.50713160E+3, 0.310E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.52581620E+3, 0.310E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.40196130E+3, 0.310E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.40545650E+3, + 0.310E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.48375160E+3, 0.310E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.31817000E+2, 0.320E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, + 0.20431800E+2, 0.320E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.52792680E+3, 0.320E+2, + 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.29842200E+3, 0.320E+2, 0.400E+1, 0.00000000E+0, + 0.00000000E+0, 0.19734480E+3, 0.320E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.13109540E+3, + 0.320E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.90332800E+2, 0.320E+2, 0.700E+1, + 0.00000000E+0, 0.00000000E+0, 0.67593200E+2, 0.320E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, + 0.50641200E+2, 0.320E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.38574600E+2, 0.320E+2, + 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.63010410E+3, 0.320E+2, 0.110E+2, 0.00000000E+0, + 0.00000000E+0, 0.47737440E+3, 0.320E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.43650600E+3, + 0.320E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.33983280E+3, 0.320E+2, 0.140E+2, + 0.00000000E+0, 0.00000000E+0, 0.26182350E+3, 0.320E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, + 0.21531010E+3, 0.320E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.17419690E+3, 0.320E+2, + 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.14120630E+3, 0.320E+2, 0.180E+2, 0.00000000E+0, + 0.00000000E+0, 0.10326651E+4, 0.320E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.84336440E+3, + 0.320E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.69470240E+3, 0.320E+2, 0.210E+2, + 0.00000000E+0, 0.00000000E+0, 0.66837860E+3, 0.320E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, + 0.61076390E+3, 0.320E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.47996390E+3, 0.320E+2, + 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.52418480E+3, 0.320E+2, 0.250E+2, 0.00000000E+0, + 0.00000000E+0, 0.41021060E+3, 0.320E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.43385080E+3, + 0.320E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.44798680E+3, 0.320E+2, 0.280E+2, + 0.00000000E+0, 0.00000000E+0, 0.34242610E+3, 0.320E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, + 0.34998850E+3, 0.320E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.41595300E+3, 0.320E+2, + 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.36354740E+3, 0.320E+2, 0.320E+2, 0.00000000E+0, + 0.00000000E+0, 0.27788400E+2, 0.330E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.18328400E+2, + 0.330E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.41515320E+3, 0.330E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.24548310E+3, 0.330E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.16690600E+3, 0.330E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.11326160E+3, 0.330E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.79308600E+2, 0.330E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.60028900E+2, 0.330E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.45418000E+2, + 0.330E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.34868600E+2, 0.330E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.49693380E+3, 0.330E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.38949270E+3, 0.330E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.36119130E+3, 0.330E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.28659090E+3, 0.330E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.22447740E+3, 0.330E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.18663480E+3, + 0.330E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.15260350E+3, 0.330E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.12485610E+3, 0.330E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.81065540E+3, 0.330E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.67900440E+3, 0.330E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.56269470E+3, 0.330E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.54467970E+3, 0.330E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.49949700E+3, + 0.330E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.39319220E+3, 0.330E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.43091460E+3, 0.330E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.33800960E+3, 0.330E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.35971500E+3, 0.330E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.37003590E+3, 0.330E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.28333230E+3, 0.330E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.29250300E+3, + 0.330E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.34635080E+3, 0.330E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.30710100E+3, 0.330E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.26294980E+3, 0.330E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.25309800E+2, 0.340E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.17024300E+2, 0.340E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.35454290E+3, 0.340E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.21502380E+3, + 0.340E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.14880080E+3, 0.340E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.10243460E+3, 0.340E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.72540300E+2, 0.340E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.55362700E+2, 0.340E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.42192300E+2, 0.340E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.32584300E+2, 0.340E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.42518640E+3, + 0.340E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.33957420E+3, 0.340E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.31761820E+3, 0.340E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.25500990E+3, 0.340E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.20190190E+3, 0.340E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.16913080E+3, 0.340E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.13931630E+3, 0.340E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.11474490E+3, + 0.340E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.69291160E+3, 0.340E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.58796470E+3, 0.340E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.48887150E+3, 0.340E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.47503480E+3, 0.340E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.43657180E+3, 0.340E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.34429560E+3, 0.340E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.37782760E+3, + 0.340E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.29703960E+3, 0.340E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.31701740E+3, 0.340E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.32534190E+3, 0.340E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.24963850E+3, 0.340E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.25904590E+3, 0.340E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.30595010E+3, 0.340E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.27365300E+3, + 0.340E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.23634730E+3, 0.340E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.21367380E+3, 0.340E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.22483400E+2, 0.350E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.15455300E+2, 0.350E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.29478970E+3, 0.350E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.18337420E+3, 0.350E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.12924950E+3, + 0.350E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.90342400E+2, 0.350E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.64763200E+2, 0.350E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.49879500E+2, 0.350E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.38322500E+2, 0.350E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.29795800E+2, 0.350E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.35428690E+3, 0.350E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.28827360E+3, + 0.350E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.27200980E+3, 0.350E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.22105370E+3, 0.350E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.17699300E+3, 0.350E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.14945630E+3, 0.350E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.12409090E+3, 0.350E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.10294710E+3, 0.350E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.57723180E+3, + 0.350E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.49597540E+3, 0.350E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.41374680E+3, 0.350E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.40365760E+3, 0.350E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.37180710E+3, 0.350E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.29391850E+3, 0.350E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.32284330E+3, 0.350E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.25453060E+3, + 0.350E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.27230530E+3, 0.350E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.27877050E+3, 0.350E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.21450590E+3, 0.350E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.22363480E+3, 0.350E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.26334580E+3, 0.350E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.23762950E+3, 0.350E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.20707720E+3, + 0.350E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.18836050E+3, 0.350E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.16712970E+3, 0.350E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.19818200E+2, 0.360E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.13921100E+2, 0.360E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.24455540E+3, 0.360E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.15556160E+3, 0.360E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.11153710E+3, + 0.360E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.79108000E+2, 0.360E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.57389500E+2, 0.360E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.44600300E+2, 0.360E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.34545200E+2, 0.360E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.27043000E+2, 0.360E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.29455740E+3, 0.360E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.24359650E+3, + 0.360E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.23169040E+3, 0.360E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.19039340E+3, 0.360E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.15405750E+3, 0.360E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.13109280E+3, 0.360E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.10968390E+3, 0.360E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.91643000E+2, 0.360E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.48024720E+3, + 0.360E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.41697770E+3, 0.360E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.34884740E+3, 0.360E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.34162730E+3, 0.360E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.31532510E+3, 0.360E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.24994130E+3, 0.360E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.27464190E+3, 0.360E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.21720710E+3, + 0.360E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.23275940E+3, 0.360E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.23774470E+3, 0.360E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.18353470E+3, 0.360E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.19204840E+3, 0.360E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.22545370E+3, 0.360E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.20505980E+3, 0.360E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.18018180E+3, + 0.360E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.16484940E+3, 0.360E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.14718300E+3, 0.360E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.13040170E+3, 0.360E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.85949900E+2, 0.370E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.50049100E+2, 0.370E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.26473331E+4, 0.370E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.10827052E+4, + 0.370E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.62008780E+3, 0.370E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.37353840E+3, 0.370E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.24069400E+3, 0.370E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.17233980E+3, 0.370E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.12458790E+3, 0.370E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.92382700E+2, 0.370E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.31041016E+4, + 0.370E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.18264648E+4, 0.370E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.15469229E+4, 0.370E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.10820563E+4, 0.370E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.76813350E+3, 0.370E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.60222210E+3, 0.370E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.46615650E+3, 0.370E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.36440670E+3, + 0.370E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.55302806E+4, 0.370E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.35994349E+4, 0.370E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.28340920E+4, 0.370E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.26412435E+4, 0.370E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.23637175E+4, 0.370E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.18740326E+4, 0.370E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.19687631E+4, + 0.370E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.15471982E+4, 0.370E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.15418997E+4, 0.370E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.16251034E+4, 0.370E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.12594427E+4, 0.370E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.11862631E+4, 0.370E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.14423807E+4, 0.370E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.11551526E+4, + 0.370E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.90942570E+3, 0.370E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.77892040E+3, 0.370E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.65036060E+3, 0.370E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.54231600E+3, 0.370E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.61387755E+4, 0.370E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.78390100E+2, 0.380E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.46665800E+2, + 0.380E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.19442260E+4, 0.380E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.90392650E+3, 0.380E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.54157290E+3, 0.380E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.33545970E+3, 0.380E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.21996080E+3, 0.380E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.15914600E+3, 0.380E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.11596470E+3, + 0.380E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.86462700E+2, 0.380E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.22961906E+4, 0.380E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.14958141E+4, 0.380E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.12985356E+4, 0.380E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.94141210E+3, 0.380E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.68496320E+3, 0.380E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.54396270E+3, + 0.380E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.42589970E+3, 0.380E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.33586900E+3, 0.380E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.39153529E+4, 0.380E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.28194935E+4, 0.380E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.22604217E+4, 0.380E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.21283951E+4, 0.380E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.19186941E+4, + 0.380E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.15113043E+4, 0.380E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.16147190E+4, 0.380E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.12632327E+4, 0.380E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.12908718E+4, 0.380E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.13513702E+4, 0.380E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.10377284E+4, 0.380E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.10096809E+4, + 0.380E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.12165138E+4, 0.380E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.10044824E+4, 0.380E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.80833700E+3, 0.380E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.70005320E+3, 0.380E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.59073260E+3, 0.380E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.49691200E+3, 0.380E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.43492577E+4, + 0.380E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.33813672E+4, 0.380E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.70057000E+2, 0.390E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, + 0.42419500E+2, 0.390E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.15853950E+4, 0.390E+2, + 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.77148440E+3, 0.390E+2, 0.400E+1, 0.00000000E+0, + 0.00000000E+0, 0.47243640E+3, 0.390E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.29721710E+3, + 0.390E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.19706110E+3, 0.390E+2, 0.700E+1, + 0.00000000E+0, 0.00000000E+0, 0.14366020E+3, 0.390E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, + 0.10534470E+3, 0.390E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.78931600E+2, 0.390E+2, + 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.18768634E+4, 0.390E+2, 0.110E+2, 0.00000000E+0, + 0.00000000E+0, 0.12667602E+4, 0.390E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.11122980E+4, + 0.390E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.81954180E+3, 0.390E+2, 0.140E+2, + 0.00000000E+0, 0.00000000E+0, 0.60399160E+3, 0.390E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, + 0.48337970E+3, 0.390E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.38124620E+3, 0.390E+2, + 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.30251430E+3, 0.390E+2, 0.180E+2, 0.00000000E+0, + 0.00000000E+0, 0.31660625E+4, 0.390E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.23508018E+4, + 0.390E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.18967809E+4, 0.390E+2, 0.210E+2, + 0.00000000E+0, 0.00000000E+0, 0.17943180E+4, 0.390E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, + 0.16224689E+4, 0.390E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.12764352E+4, 0.390E+2, + 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.13714492E+4, 0.390E+2, 0.250E+2, 0.00000000E+0, + 0.00000000E+0, 0.10723265E+4, 0.390E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.11053016E+4, + 0.390E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.11535737E+4, 0.390E+2, 0.280E+2, + 0.00000000E+0, 0.00000000E+0, 0.88416480E+3, 0.390E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, + 0.87069350E+3, 0.390E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.10455505E+4, 0.390E+2, + 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.87478360E+3, 0.390E+2, 0.320E+2, 0.00000000E+0, + 0.00000000E+0, 0.71175060E+3, 0.390E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.62033340E+3, + 0.390E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.52682990E+3, 0.390E+2, 0.350E+2, + 0.00000000E+0, 0.00000000E+0, 0.44570130E+3, 0.390E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, + 0.35209466E+4, 0.390E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.28137007E+4, 0.390E+2, + 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.23658925E+4, 0.390E+2, 0.390E+2, 0.00000000E+0, + 0.00000000E+0, 0.63780100E+2, 0.400E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.39108800E+2, + 0.400E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.13632842E+4, 0.400E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.68152830E+3, 0.400E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.42323020E+3, 0.400E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.26904900E+3, 0.400E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.17977770E+3, 0.400E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.13178520E+3, 0.400E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.97097700E+2, + 0.400E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.73031500E+2, 0.400E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.16162863E+4, 0.400E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.11138339E+4, 0.400E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.98504940E+3, 0.400E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.73318070E+3, 0.400E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.54488820E+3, 0.400E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.43838900E+3, + 0.400E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.34753340E+3, 0.400E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.27699080E+3, 0.400E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.27111542E+4, 0.400E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.20485251E+4, 0.400E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.16591156E+4, 0.400E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.15741401E+4, 0.400E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.14260687E+4, + 0.400E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.11215489E+4, 0.400E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.12087451E+4, 0.400E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.94517130E+3, 0.400E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.97897670E+3, 0.400E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.10197589E+4, 0.400E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.78111330E+3, 0.400E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.77458710E+3, + 0.400E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.92819820E+3, 0.400E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.78294420E+3, 0.400E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.64155640E+3, 0.400E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.56154740E+3, 0.400E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.47900400E+3, 0.400E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.40687270E+3, 0.400E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.30176856E+4, + 0.400E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.24494723E+4, 0.400E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.20726170E+4, 0.400E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.18227181E+4, 0.400E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.58676800E+2, 0.410E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.36341800E+2, 0.410E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.12090304E+4, 0.410E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.61398500E+3, + 0.410E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.38490720E+3, 0.410E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.24652410E+3, 0.410E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.16569430E+3, 0.410E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.12198680E+3, 0.410E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.90223400E+2, 0.410E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.68076900E+2, 0.410E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.14346641E+4, + 0.410E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.10005663E+4, 0.410E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.88903020E+3, 0.410E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.66615070E+3, 0.410E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.49797030E+3, 0.410E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.40219740E+3, 0.410E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.32006760E+3, 0.410E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.25597690E+3, + 0.410E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.24006918E+4, 0.410E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.18308523E+4, 0.410E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.14860620E+4, 0.410E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.14126818E+4, 0.410E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.12813349E+4, 0.410E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.10078571E+4, 0.410E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.10879837E+4, + 0.410E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.85106340E+3, 0.410E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.88388900E+3, 0.410E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.91953540E+3, 0.410E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.70437890E+3, 0.410E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.70135490E+3, 0.410E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.83928280E+3, 0.410E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.71168230E+3, + 0.410E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.58600840E+3, 0.410E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.51450770E+3, 0.410E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.44029990E+3, 0.410E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.37513390E+3, 0.410E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.26739344E+4, 0.410E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.21882864E+4, 0.410E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.18586377E+4, + 0.410E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.16384938E+4, 0.410E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.14752500E+4, 0.410E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.46040600E+2, 0.420E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.29161700E+2, 0.420E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.89051260E+3, 0.420E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.46330650E+3, 0.420E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.29535920E+3, + 0.420E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.19195280E+3, 0.420E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.13060450E+3, 0.420E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.97067500E+2, 0.420E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.72418600E+2, 0.420E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.55048700E+2, 0.420E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.10583899E+4, 0.420E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.75166280E+3, + 0.420E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.67311930E+3, 0.420E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.51023520E+3, 0.420E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.38558950E+3, 0.420E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.31386570E+3, 0.420E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.25177230E+3, 0.420E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.20285720E+3, 0.420E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.17658946E+4, + 0.420E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.13654837E+4, 0.420E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.11120098E+4, 0.420E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.10606255E+4, 0.420E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.96394340E+3, 0.420E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.75899550E+3, 0.420E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.82093130E+3, 0.420E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.64312470E+3, + 0.420E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.67034900E+3, 0.420E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.69583480E+3, 0.420E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.53365350E+3, 0.420E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.53452070E+3, 0.420E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.63792330E+3, 0.420E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.54578450E+3, 0.420E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.45341860E+3, + 0.420E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.40049980E+3, 0.420E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.34498260E+3, 0.420E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.29579940E+3, 0.420E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.19694796E+4, 0.420E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.16315424E+4, 0.420E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.13940976E+4, 0.420E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.12339095E+4, + 0.420E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.11140924E+4, 0.420E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.84589720E+3, 0.420E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.51052700E+2, 0.430E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.32058800E+2, 0.430E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.10116099E+4, 0.430E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.52142490E+3, 0.430E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.33032570E+3, + 0.430E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.21347990E+3, 0.430E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.14456970E+3, 0.430E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.10705880E+3, 0.430E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.79612100E+2, 0.430E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.60352100E+2, 0.430E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.12015234E+4, 0.430E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.84734970E+3, + 0.430E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.75661950E+3, 0.430E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.57105010E+3, 0.430E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.42976770E+3, 0.430E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.34877440E+3, 0.430E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.27891230E+3, 0.430E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.22407940E+3, 0.430E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.20076137E+4, + 0.430E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.15434258E+4, 0.430E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.12553446E+4, 0.430E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.11958434E+4, 0.430E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.10860231E+4, 0.430E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.85474740E+3, 0.430E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.92387430E+3, 0.430E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.72332020E+3, + 0.430E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.75296780E+3, 0.430E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.78224830E+3, 0.430E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.59961920E+3, 0.430E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.59931410E+3, 0.430E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.71598110E+3, 0.430E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.61053270E+3, 0.430E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.50550910E+3, + 0.430E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.44547780E+3, 0.430E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.38275910E+3, 0.430E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.32738270E+3, 0.430E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.22379665E+4, 0.430E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.18443774E+4, 0.430E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.15723759E+4, 0.430E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.13895979E+4, + 0.430E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.12533465E+4, 0.430E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.94964900E+3, 0.430E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.10670169E+4, 0.430E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.39574500E+2, 0.440E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.25462200E+2, 0.440E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.73055330E+3, 0.440E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.38726810E+3, + 0.440E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.24993820E+3, 0.440E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.16412790E+3, 0.440E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.11263780E+3, 0.440E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.84272500E+2, 0.440E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.63259900E+2, 0.440E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.48342900E+2, 0.440E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.86937740E+3, + 0.440E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.62621040E+3, 0.440E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.56407160E+3, 0.440E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.43121320E+3, 0.440E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.32840720E+3, 0.440E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.26878240E+3, 0.440E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.21680700E+3, 0.440E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.17558760E+3, + 0.440E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.14473048E+4, 0.440E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.11311769E+4, 0.440E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.92358110E+3, 0.440E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.88314920E+3, 0.440E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.80388070E+3, 0.440E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.63343940E+3, 0.440E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.68617720E+3, + 0.440E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.53814350E+3, 0.440E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.56248000E+3, 0.440E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.58290140E+3, 0.440E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.44742590E+3, 0.440E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.45015430E+3, 0.440E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.53610930E+3, 0.440E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.46167950E+3, + 0.440E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.38598830E+3, 0.440E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.34238140E+3, 0.440E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.29626680E+3, 0.440E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.25515160E+3, 0.440E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.16158387E+4, 0.440E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.13511988E+4, 0.440E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.11599071E+4, + 0.440E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.10297665E+4, 0.440E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.93174450E+3, 0.440E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.71028370E+3, 0.440E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, 0.79619510E+3, 0.440E+2, + 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.59819880E+3, 0.440E+2, 0.440E+2, 0.00000000E+0, + 0.00000000E+0, 0.43166100E+2, 0.450E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.27574500E+2, + 0.450E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.79420060E+3, 0.450E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.42441200E+3, 0.450E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.27371950E+3, 0.450E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.17927080E+3, 0.450E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.12264260E+3, 0.450E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.91495900E+2, 0.450E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.68488800E+2, + 0.450E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.52207200E+2, 0.450E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.94542210E+3, 0.450E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.68566280E+3, 0.450E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.61792440E+3, 0.450E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.47237380E+3, 0.450E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.35925470E+3, 0.450E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.29352140E+3, + 0.450E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.23627500E+3, 0.450E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.19093520E+3, 0.450E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.15674954E+4, 0.450E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.12346013E+4, 0.450E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.10091933E+4, 0.450E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.96523080E+3, 0.450E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.87880270E+3, + 0.450E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.69163140E+3, 0.450E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.75032510E+3, 0.450E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.58775440E+3, 0.450E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.61543640E+3, 0.450E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.63776340E+3, 0.450E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.48875010E+3, 0.450E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.49263190E+3, + 0.450E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.58677320E+3, 0.450E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.50544520E+3, 0.450E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.42219710E+3, 0.450E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.37406320E+3, 0.450E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.32319410E+3, 0.450E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.27786800E+3, 0.450E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.17497615E+4, + 0.450E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.14735487E+4, 0.450E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.12668436E+4, 0.450E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.11253403E+4, 0.450E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.10182915E+4, 0.450E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.77583530E+3, 0.450E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.86989620E+3, 0.450E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.65317750E+3, + 0.450E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.71394270E+3, 0.450E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.40237200E+2, 0.460E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, + 0.25871600E+2, 0.460E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.72242940E+3, 0.460E+2, + 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.39043100E+3, 0.460E+2, 0.400E+1, 0.00000000E+0, + 0.00000000E+0, 0.25334250E+3, 0.460E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.16671110E+3, + 0.460E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.11447630E+3, 0.460E+2, 0.700E+1, + 0.00000000E+0, 0.00000000E+0, 0.85642700E+2, 0.460E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, + 0.64270700E+2, 0.460E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.49099000E+2, 0.460E+2, + 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.86062090E+3, 0.460E+2, 0.110E+2, 0.00000000E+0, + 0.00000000E+0, 0.62959120E+3, 0.460E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.56914100E+3, + 0.460E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.43694630E+3, 0.460E+2, 0.140E+2, + 0.00000000E+0, 0.00000000E+0, 0.33352190E+3, 0.460E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, + 0.27315680E+3, 0.460E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.22040990E+3, 0.460E+2, + 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.17850210E+3, 0.460E+2, 0.180E+2, 0.00000000E+0, + 0.00000000E+0, 0.14240271E+4, 0.460E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.11296670E+4, + 0.460E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.92485560E+3, 0.460E+2, 0.210E+2, + 0.00000000E+0, 0.00000000E+0, 0.88576570E+3, 0.460E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, + 0.80712580E+3, 0.460E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.63532570E+3, 0.460E+2, + 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.68996470E+3, 0.460E+2, 0.250E+2, 0.00000000E+0, + 0.00000000E+0, 0.54065990E+3, 0.460E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.56710440E+3, + 0.460E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.58718190E+3, 0.460E+2, 0.280E+2, + 0.00000000E+0, 0.00000000E+0, 0.45005590E+3, 0.460E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, + 0.45480310E+3, 0.460E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.54115010E+3, 0.460E+2, + 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.46770420E+3, 0.460E+2, 0.320E+2, 0.00000000E+0, + 0.00000000E+0, 0.39185280E+3, 0.460E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.34783930E+3, + 0.460E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.30113900E+3, 0.460E+2, 0.350E+2, + 0.00000000E+0, 0.00000000E+0, 0.25939640E+3, 0.460E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, + 0.15904415E+4, 0.460E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.13479007E+4, 0.460E+2, + 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.11619289E+4, 0.460E+2, 0.390E+2, 0.00000000E+0, + 0.00000000E+0, 0.10338735E+4, 0.460E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.93655280E+3, + 0.460E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.71494950E+3, 0.460E+2, 0.420E+2, + 0.00000000E+0, 0.00000000E+0, 0.80104420E+3, 0.460E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, + 0.60279560E+3, 0.460E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.65887530E+3, 0.460E+2, + 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.60850410E+3, 0.460E+2, 0.460E+2, 0.00000000E+0, + 0.00000000E+0, 0.33541300E+2, 0.470E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.21789600E+2, + 0.470E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.61414770E+3, 0.470E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.32557750E+3, 0.470E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.21068110E+3, 0.470E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.13887580E+3, 0.470E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.95713700E+2, 0.470E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.71892600E+2, 0.470E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.54190300E+2, + 0.470E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.41578000E+2, 0.470E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.73108320E+3, 0.470E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.52647760E+3, 0.470E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.47457130E+3, 0.470E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.36335850E+3, 0.470E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.27735770E+3, 0.470E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.22750240E+3, + 0.470E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.18398760E+3, 0.470E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.14942690E+3, 0.470E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.12184699E+4, 0.470E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.95149350E+3, 0.470E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.77689140E+3, 0.470E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.74320410E+3, 0.470E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.67665530E+3, + 0.470E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.53368780E+3, 0.470E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.57781270E+3, 0.470E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.45363270E+3, 0.470E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.47392440E+3, 0.470E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.49097830E+3, 0.470E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.37735310E+3, 0.470E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.37956550E+3, + 0.470E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.45158870E+3, 0.470E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.38930750E+3, 0.470E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.32603710E+3, 0.470E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.28964690E+3, 0.470E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.25111890E+3, 0.470E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.21673360E+3, 0.470E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.13607517E+4, + 0.470E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.11369099E+4, 0.470E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.97620250E+3, 0.470E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.86700560E+3, 0.470E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.78481880E+3, 0.470E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.59905300E+3, 0.470E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.67117170E+3, 0.470E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.50502690E+3, + 0.470E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.55108020E+3, 0.470E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.50877420E+3, 0.470E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, + 0.42674500E+3, 0.470E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.35687900E+2, 0.480E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.23156300E+2, 0.480E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.62105360E+3, 0.480E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.34041220E+3, + 0.480E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.22262730E+3, 0.480E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.14741380E+3, 0.480E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.10173770E+3, 0.480E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.76409200E+2, 0.480E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.57550000E+2, 0.480E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.44106200E+2, 0.480E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.74057870E+3, + 0.480E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.54767210E+3, 0.480E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.49703370E+3, 0.480E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.38367900E+3, 0.480E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.29424650E+3, 0.480E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.24176140E+3, 0.480E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.19570440E+3, 0.480E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.15896500E+3, + 0.480E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.12225553E+4, 0.480E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.97842510E+3, 0.480E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.80260200E+3, 0.480E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.77003030E+3, 0.480E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.70242130E+3, 0.480E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.55309190E+3, 0.480E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.60140530E+3, + 0.480E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.47153290E+3, 0.480E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.49563130E+3, 0.480E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.51262200E+3, 0.480E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.39305100E+3, 0.480E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.39845720E+3, 0.480E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.47342030E+3, 0.480E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.41090580E+3, + 0.480E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.34560850E+3, 0.480E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.30755390E+3, 0.480E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.26697000E+3, 0.480E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.23054930E+3, 0.480E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.13663938E+4, 0.480E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.11670471E+4, 0.480E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.10094418E+4, + 0.480E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.90011540E+3, 0.480E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.81654950E+3, 0.480E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.62495060E+3, 0.480E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, 0.69953820E+3, 0.480E+2, + 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.52793870E+3, 0.480E+2, 0.440E+2, 0.00000000E+0, + 0.00000000E+0, 0.57701070E+3, 0.480E+2, 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.53341340E+3, + 0.480E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.44587010E+3, 0.480E+2, 0.470E+2, + 0.00000000E+0, 0.00000000E+0, 0.46819000E+3, 0.480E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, + 0.44041700E+2, 0.490E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.27958600E+2, 0.490E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.82896730E+3, 0.490E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.43833960E+3, 0.490E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.28117370E+3, + 0.490E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.18333680E+3, 0.490E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.12497980E+3, 0.490E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.92996800E+2, 0.490E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.69455800E+2, 0.490E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.52851700E+2, 0.490E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.98609990E+3, 0.490E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.70935650E+3, + 0.490E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.63758320E+3, 0.490E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.48553920E+3, 0.490E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.36802750E+3, 0.490E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.29998530E+3, 0.490E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.24091040E+3, 0.490E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.19426460E+3, 0.490E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.16388153E+4, + 0.490E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.12812612E+4, 0.490E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.10458401E+4, 0.490E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.99909710E+3, 0.490E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.90897530E+3, 0.490E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.71527990E+3, 0.490E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.77527360E+3, 0.490E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.60709640E+3, + 0.490E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.63472630E+3, 0.490E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.65825260E+3, 0.490E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.50438020E+3, 0.490E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.50724520E+3, 0.490E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.60471830E+3, 0.490E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.51935010E+3, 0.490E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.43261670E+3, + 0.490E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.38259680E+3, 0.490E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.32992500E+3, 0.490E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.28312690E+3, 0.490E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.18285696E+4, 0.490E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.15296862E+4, 0.490E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.13118922E+4, 0.490E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.11635963E+4, + 0.490E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.10518917E+4, 0.490E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.79999940E+3, 0.490E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.89764510E+3, 0.490E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.67265160E+3, 0.490E+2, + 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.73525250E+3, 0.490E+2, 0.450E+2, 0.00000000E+0, + 0.00000000E+0, 0.67809960E+3, 0.490E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.56733030E+3, + 0.490E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.59335740E+3, 0.490E+2, 0.480E+2, + 0.00000000E+0, 0.00000000E+0, 0.75773970E+3, 0.490E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, + 0.41533400E+2, 0.500E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.26786200E+2, 0.500E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.70845970E+3, 0.500E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.39379910E+3, 0.500E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.25871460E+3, + 0.500E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.17143670E+3, 0.500E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.11815090E+3, 0.500E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.88540800E+2, 0.500E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.66499600E+2, 0.500E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.50811000E+2, 0.500E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.84513480E+3, 0.500E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.63194340E+3, + 0.500E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.57540180E+3, 0.500E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.44576230E+3, 0.500E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.34241690E+3, 0.500E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.28132550E+3, 0.500E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.22756350E+3, 0.500E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.18458450E+3, 0.500E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.13902912E+4, + 0.500E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.11230616E+4, 0.500E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.92301820E+3, 0.500E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.88663180E+3, 0.500E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.80941340E+3, 0.500E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.63665610E+3, 0.500E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.69374420E+3, 0.500E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.54336290E+3, + 0.500E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.57281690E+3, 0.500E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.59204640E+3, 0.500E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.45320890E+3, 0.500E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.46119710E+3, 0.500E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.54805490E+3, 0.500E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.47710340E+3, 0.500E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.40194150E+3, + 0.500E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.35778710E+3, 0.500E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.31050930E+3, 0.500E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.26795320E+3, 0.500E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.15543698E+4, 0.500E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.13385665E+4, 0.500E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.11613674E+4, 0.500E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.10372812E+4, + 0.500E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.94177920E+3, 0.500E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.72129060E+3, 0.500E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.80723580E+3, 0.500E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.60961520E+3, 0.500E+2, + 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.66689540E+3, 0.500E+2, 0.450E+2, 0.00000000E+0, + 0.00000000E+0, 0.61675220E+3, 0.500E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.51444770E+3, + 0.500E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.54154900E+3, 0.500E+2, 0.480E+2, + 0.00000000E+0, 0.00000000E+0, 0.68561380E+3, 0.500E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, + 0.62756770E+3, 0.500E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.37768100E+2, 0.510E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.24858300E+2, 0.510E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.58668880E+3, 0.510E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.34030300E+3, + 0.510E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.22904210E+3, 0.510E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.15448510E+3, 0.510E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.10784360E+3, 0.510E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.81535800E+2, 0.510E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.61691200E+2, 0.510E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.47407300E+2, 0.510E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.70169030E+3, + 0.510E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.54198260E+3, 0.510E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.49972920E+3, 0.510E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.39368990E+3, 0.510E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.30669120E+3, 0.510E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.25424180E+3, 0.510E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.20740430E+3, 0.510E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.16945330E+3, + 0.510E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.11476700E+4, 0.510E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.95065430E+3, 0.510E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.78583230E+3, 0.510E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.75894060E+3, 0.510E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.69506830E+3, 0.510E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.54719810E+3, 0.510E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.59851680E+3, + 0.510E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.46945690E+3, 0.510E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.49804720E+3, 0.510E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.51305850E+3, 0.510E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.39302490E+3, 0.510E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.40386210E+3, 0.510E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.47839930E+3, 0.510E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.42186160E+3, + 0.510E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.35955640E+3, 0.510E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.32236080E+3, 0.510E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.28180500E+3, 0.510E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.24479020E+3, 0.510E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.12861750E+4, 0.510E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.11321713E+4, 0.510E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.99240010E+3, + 0.510E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.89208770E+3, 0.510E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.81343450E+3, 0.510E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.62768490E+3, 0.510E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, 0.70051630E+3, 0.510E+2, + 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.53338040E+3, 0.510E+2, 0.440E+2, 0.00000000E+0, + 0.00000000E+0, 0.58333460E+3, 0.510E+2, 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.54091250E+3, + 0.510E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.45064270E+3, 0.510E+2, 0.470E+2, + 0.00000000E+0, 0.00000000E+0, 0.47657830E+3, 0.510E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, + 0.59828910E+3, 0.510E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, 0.55335920E+3, 0.510E+2, + 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.49293790E+3, 0.510E+2, 0.510E+2, 0.00000000E+0, + 0.00000000E+0, 0.35484100E+2, 0.520E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.23691100E+2, + 0.520E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.52125110E+3, 0.520E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.30954390E+3, 0.520E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.21148980E+3, 0.520E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.14430320E+3, 0.520E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.10161240E+3, 0.520E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.77297000E+2, 0.520E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.58788100E+2, + 0.520E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.45361300E+2, 0.520E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.62440760E+3, 0.520E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.49087600E+3, 0.520E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.45604000E+3, 0.520E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.36295180E+3, 0.520E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.28527790E+3, 0.520E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.23790180E+3, + 0.520E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.19518610E+3, 0.520E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.16026740E+3, 0.520E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.10193121E+4, 0.520E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.85518820E+3, 0.520E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.70913030E+3, 0.520E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.68712350E+3, 0.520E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.63049010E+3, + 0.520E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.49691430E+3, 0.520E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.54441560E+3, 0.520E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.42764390E+3, 0.520E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.45508360E+3, 0.520E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.46784930E+3, 0.520E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.35881670E+3, 0.520E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.37059360E+3, + 0.520E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.43811020E+3, 0.520E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.38929970E+3, 0.520E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.33422340E+3, 0.520E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.30105450E+3, 0.520E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.26445160E+3, 0.520E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.23074260E+3, 0.520E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.11441913E+4, + 0.520E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.10183413E+4, 0.520E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.89780430E+3, 0.520E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.81010280E+3, 0.520E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.74062110E+3, 0.520E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.57429320E+3, 0.520E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.63974650E+3, 0.520E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.48969560E+3, + 0.520E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.53521890E+3, 0.520E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.49709590E+3, 0.520E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, + 0.41415120E+3, 0.520E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.43888610E+3, 0.520E+2, + 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.54812670E+3, 0.520E+2, 0.490E+2, 0.00000000E+0, + 0.00000000E+0, 0.50996980E+3, 0.520E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.45710570E+3, + 0.520E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.42553550E+3, 0.520E+2, 0.520E+2, + 0.00000000E+0, 0.00000000E+0, 0.32517100E+2, 0.530E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, + 0.22081300E+2, 0.530E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.44985120E+3, 0.530E+2, + 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.27373980E+3, 0.530E+2, 0.400E+1, 0.00000000E+0, + 0.00000000E+0, 0.19010940E+3, 0.530E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.13140510E+3, + 0.530E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.93456200E+2, 0.530E+2, 0.700E+1, + 0.00000000E+0, 0.00000000E+0, 0.71605900E+2, 0.530E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, + 0.54799000E+2, 0.530E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.42495400E+2, 0.530E+2, + 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.53985360E+3, 0.530E+2, 0.110E+2, 0.00000000E+0, + 0.00000000E+0, 0.43217920E+3, 0.530E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.40476310E+3, + 0.530E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.32569120E+3, 0.530E+2, 0.140E+2, + 0.00000000E+0, 0.00000000E+0, 0.25851210E+3, 0.530E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, + 0.21703370E+3, 0.530E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.17923060E+3, 0.530E+2, + 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.14802160E+3, 0.530E+2, 0.180E+2, 0.00000000E+0, + 0.00000000E+0, 0.88017410E+3, 0.530E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.74793060E+3, + 0.530E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.62218410E+3, 0.530E+2, 0.210E+2, + 0.00000000E+0, 0.00000000E+0, 0.60505080E+3, 0.530E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, + 0.55631660E+3, 0.530E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.43916600E+3, 0.530E+2, + 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.48180770E+3, 0.530E+2, 0.250E+2, 0.00000000E+0, + 0.00000000E+0, 0.37922120E+3, 0.530E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.40469290E+3, + 0.530E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.41513030E+3, 0.530E+2, 0.280E+2, + 0.00000000E+0, 0.00000000E+0, 0.31896420E+3, 0.530E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, + 0.33106510E+3, 0.530E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.39045420E+3, 0.530E+2, + 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.34977600E+3, 0.530E+2, 0.320E+2, 0.00000000E+0, + 0.00000000E+0, 0.30267430E+3, 0.530E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.27406300E+3, + 0.530E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.24205560E+3, 0.530E+2, 0.350E+2, + 0.00000000E+0, 0.00000000E+0, 0.21228200E+3, 0.530E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, + 0.98989210E+3, 0.530E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.89067230E+3, 0.530E+2, + 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.79002570E+3, 0.530E+2, 0.390E+2, 0.00000000E+0, + 0.00000000E+0, 0.71573180E+3, 0.530E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.65622760E+3, + 0.530E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.51167720E+3, 0.530E+2, 0.420E+2, + 0.00000000E+0, 0.00000000E+0, 0.56879090E+3, 0.530E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, + 0.43799920E+3, 0.530E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.47824810E+3, 0.530E+2, + 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.44496620E+3, 0.530E+2, 0.460E+2, 0.00000000E+0, + 0.00000000E+0, 0.37093440E+3, 0.530E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.39376550E+3, + 0.530E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.48897090E+3, 0.530E+2, 0.490E+2, + 0.00000000E+0, 0.00000000E+0, 0.45771560E+3, 0.530E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, + 0.41298520E+3, 0.530E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.38609970E+3, 0.530E+2, + 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.35196670E+3, 0.530E+2, 0.530E+2, 0.00000000E+0, + 0.00000000E+0, 0.29605500E+2, 0.540E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.20459400E+2, + 0.540E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.38699690E+3, 0.540E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.24076890E+3, 0.540E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.16985780E+3, 0.540E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.11891780E+3, 0.540E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.85429300E+2, 0.540E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.65940300E+2, 0.540E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.50790000E+2, + 0.540E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.39595100E+2, 0.540E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.46528170E+3, 0.540E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.37861340E+3, 0.540E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.35729600E+3, 0.540E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.29049850E+3, 0.540E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.23277860E+3, 0.540E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.19673740E+3, + 0.540E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.16353680E+3, 0.540E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.13585920E+3, 0.540E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.75832530E+3, 0.540E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.65153920E+3, 0.540E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.54356310E+3, 0.540E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.53043120E+3, 0.540E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.48865220E+3, + 0.540E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.38650670E+3, 0.540E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.42441250E+3, 0.540E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.33482590E+3, 0.540E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.35809540E+3, 0.540E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.36655970E+3, 0.540E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.28228880E+3, 0.540E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.29421380E+3, + 0.540E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.34613450E+3, 0.540E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.31242650E+3, 0.540E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.27241100E+3, 0.540E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.24792750E+3, 0.540E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.22015810E+3, 0.540E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.19406990E+3, 0.540E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.85452230E+3, + 0.540E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.77608590E+3, 0.540E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.69223860E+3, 0.540E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.62952300E+3, 0.540E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.57878760E+3, 0.540E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.45379980E+3, 0.540E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.50338110E+3, 0.540E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.38995320E+3, + 0.540E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.42526840E+3, 0.540E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.39634680E+3, 0.540E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, + 0.33076460E+3, 0.540E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.35152850E+3, 0.540E+2, + 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.43409320E+3, 0.540E+2, 0.490E+2, 0.00000000E+0, + 0.00000000E+0, 0.40859520E+3, 0.540E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.37095720E+3, + 0.540E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.34822390E+3, 0.540E+2, 0.520E+2, + 0.00000000E+0, 0.00000000E+0, 0.31889050E+3, 0.540E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, + 0.29022230E+3, 0.540E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.10500960E+3, 0.550E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.61318400E+2, 0.550E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.32422404E+4, 0.550E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.13162189E+4, + 0.550E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.75492430E+3, 0.550E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.45569600E+3, 0.550E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.29414830E+3, 0.550E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.21086720E+3, 0.550E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.15256720E+3, 0.550E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.11317640E+3, 0.550E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.37989439E+4, + 0.550E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.22209652E+4, 0.550E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.18817164E+4, 0.550E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.13170056E+4, 0.550E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.93630690E+3, 0.550E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.73500610E+3, 0.550E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.56967010E+3, 0.550E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.44581710E+3, + 0.550E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.68083900E+4, 0.550E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.43871669E+4, 0.550E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.34508369E+4, 0.550E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.32158544E+4, 0.550E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.28775279E+4, 0.550E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.22830674E+4, 0.550E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.23963445E+4, + 0.550E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.18842824E+4, 0.550E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.18757209E+4, 0.550E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.19768609E+4, 0.550E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.15334063E+4, 0.550E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.14430004E+4, 0.550E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.17555105E+4, 0.550E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.14062206E+4, + 0.550E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.11083145E+4, 0.550E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.95019750E+3, 0.550E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.79421840E+3, 0.550E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.66295560E+3, 0.550E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.75604361E+4, 0.550E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.53051627E+4, 0.550E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.42896097E+4, + 0.550E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.36748556E+4, 0.550E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.32563633E+4, 0.550E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.23987520E+4, 0.550E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, 0.27260486E+4, 0.550E+2, + 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.19683066E+4, 0.550E+2, 0.440E+2, 0.00000000E+0, + 0.00000000E+0, 0.21299275E+4, 0.550E+2, 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.19358392E+4, + 0.550E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.16577829E+4, 0.550E+2, 0.470E+2, + 0.00000000E+0, 0.00000000E+0, 0.16630447E+4, 0.550E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, + 0.22264867E+4, 0.550E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, 0.18919207E+4, 0.550E+2, + 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.15665042E+4, 0.550E+2, 0.510E+2, 0.00000000E+0, + 0.00000000E+0, 0.13945709E+4, 0.550E+2, 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.12075672E+4, + 0.550E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.10433955E+4, 0.550E+2, 0.540E+2, + 0.00000000E+0, 0.00000000E+0, 0.93307294E+4, 0.550E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, + 0.99457900E+2, 0.560E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.59114100E+2, 0.560E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.25515260E+4, 0.560E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.11604419E+4, 0.560E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.69068520E+3, + 0.560E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.42636670E+3, 0.560E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.27907420E+3, 0.560E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.20174110E+3, 0.560E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.14691740E+3, 0.560E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.10950000E+3, 0.560E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.30097233E+4, 0.560E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.19263504E+4, + 0.560E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.16657662E+4, 0.560E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.12012021E+4, 0.560E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.87116470E+3, 0.560E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.69086510E+3, 0.560E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.54031600E+3, 0.560E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.42579090E+3, 0.560E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.51712978E+4, + 0.560E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.36591655E+4, 0.560E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.29244395E+4, 0.560E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.27489797E+4, 0.560E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.24751427E+4, 0.560E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.19521126E+4, 0.560E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.20794950E+4, 0.560E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.16284040E+4, + 0.560E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.16569384E+4, 0.560E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.17363987E+4, 0.560E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.13357319E+4, 0.560E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.12926630E+4, 0.560E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.15597012E+4, 0.560E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.12819152E+4, 0.560E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.10285424E+4, + 0.560E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.88961470E+3, 0.560E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.74984750E+3, 0.560E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.63024360E+3, 0.560E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.57435673E+4, 0.560E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.43943607E+4, 0.560E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.36394735E+4, 0.560E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.31601776E+4, + 0.560E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.28195147E+4, 0.560E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.20984813E+4, 0.560E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.23739131E+4, 0.560E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.17354827E+4, 0.560E+2, + 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.18901371E+4, 0.560E+2, 0.450E+2, 0.00000000E+0, + 0.00000000E+0, 0.17272738E+4, 0.560E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.14605858E+4, + 0.560E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.14937369E+4, 0.560E+2, 0.480E+2, + 0.00000000E+0, 0.00000000E+0, 0.19640913E+4, 0.560E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, + 0.17108832E+4, 0.560E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.14425135E+4, 0.560E+2, + 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.12956354E+4, 0.560E+2, 0.520E+2, 0.00000000E+0, + 0.00000000E+0, 0.11317221E+4, 0.560E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.98512660E+3, + 0.560E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.70164917E+4, 0.560E+2, 0.550E+2, + 0.00000000E+0, 0.00000000E+0, 0.57269887E+4, 0.560E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, + 0.89101800E+2, 0.570E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.53798200E+2, 0.570E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.20850661E+4, 0.570E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.99403160E+3, 0.570E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.60449150E+3, + 0.570E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.37879280E+3, 0.570E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.25055770E+3, 0.570E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.18240750E+3, 0.570E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.13361230E+3, 0.570E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.10002770E+3, 0.570E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.24655965E+4, 0.570E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.16371586E+4, + 0.570E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.14317496E+4, 0.570E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.10491934E+4, 0.570E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.77049240E+3, 0.570E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.61555590E+3, 0.570E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.48476910E+3, 0.570E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.38423060E+3, 0.570E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.41858968E+4, + 0.570E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.30598941E+4, 0.570E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.24617619E+4, 0.570E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.23247454E+4, 0.570E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.20995853E+4, 0.570E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.16534435E+4, 0.570E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.17717653E+4, 0.570E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.13863132E+4, + 0.570E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.14234023E+4, 0.570E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.14871454E+4, 0.570E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.11414078E+4, 0.570E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.11183973E+4, 0.570E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.13447968E+4, 0.570E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.11200021E+4, 0.570E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.90836700E+3, + 0.570E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.79048550E+3, 0.570E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.67038430E+3, 0.570E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.56651010E+3, 0.570E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.46537454E+4, 0.570E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.36666556E+4, 0.570E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.30693037E+4, 0.570E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.26820879E+4, + 0.570E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.24019326E+4, 0.570E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.17981970E+4, 0.570E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.20296163E+4, 0.570E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.14938895E+4, 0.570E+2, + 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.16299126E+4, 0.570E+2, 0.450E+2, 0.00000000E+0, + 0.00000000E+0, 0.14934855E+4, 0.570E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.12574297E+4, + 0.570E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.12959364E+4, 0.570E+2, 0.480E+2, + 0.00000000E+0, 0.00000000E+0, 0.16894085E+4, 0.570E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, + 0.14890440E+4, 0.570E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.12682622E+4, 0.570E+2, + 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.11455595E+4, 0.570E+2, 0.520E+2, 0.00000000E+0, + 0.00000000E+0, 0.10065104E+4, 0.570E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.88082020E+3, + 0.570E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.56757434E+4, 0.570E+2, 0.550E+2, + 0.00000000E+0, 0.00000000E+0, 0.47544826E+4, 0.570E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, + 0.39906172E+4, 0.570E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.44510400E+2, 0.580E+2, + 0.100E+1, 0.27991000E+1, 0.91180000E+0, 0.29308100E+2, 0.580E+2, 0.200E+1, 0.27991000E+1, + 0.00000000E+0, 0.70433450E+3, 0.580E+2, 0.300E+1, 0.27991000E+1, 0.00000000E+0, 0.40374270E+3, + 0.580E+2, 0.400E+1, 0.27991000E+1, 0.00000000E+0, 0.27061870E+3, 0.580E+2, 0.500E+1, + 0.27991000E+1, 0.00000000E+0, 0.18221640E+3, 0.580E+2, 0.600E+1, 0.27991000E+1, 0.00000000E+0, + 0.12713550E+3, 0.580E+2, 0.700E+1, 0.27991000E+1, 0.00000000E+0, 0.96118900E+2, 0.580E+2, + 0.800E+1, 0.27991000E+1, 0.00000000E+0, 0.72735900E+2, 0.580E+2, 0.900E+1, 0.27991000E+1, + 0.00000000E+0, 0.55904800E+2, 0.580E+2, 0.100E+2, 0.27991000E+1, 0.00000000E+0, 0.84189860E+3, + 0.580E+2, 0.110E+2, 0.27991000E+1, 0.00000000E+0, 0.64422200E+3, 0.580E+2, 0.120E+2, + 0.27991000E+1, 0.00000000E+0, 0.59240470E+3, 0.580E+2, 0.130E+2, 0.27991000E+1, 0.00000000E+0, + 0.46526310E+3, 0.580E+2, 0.140E+2, 0.27991000E+1, 0.00000000E+0, 0.36180150E+3, 0.580E+2, + 0.150E+2, 0.27991000E+1, 0.00000000E+0, 0.29974470E+3, 0.580E+2, 0.160E+2, 0.27991000E+1, + 0.00000000E+0, 0.24444680E+3, 0.580E+2, 0.170E+2, 0.27991000E+1, 0.00000000E+0, 0.19971380E+3, + 0.580E+2, 0.180E+2, 0.27991000E+1, 0.00000000E+0, 0.13810183E+4, 0.580E+2, 0.190E+2, + 0.27991000E+1, 0.00000000E+0, 0.11346748E+4, 0.580E+2, 0.200E+2, 0.27991000E+1, 0.00000000E+0, + 0.93640680E+3, 0.580E+2, 0.210E+2, 0.27991000E+1, 0.00000000E+0, 0.90333060E+3, 0.580E+2, + 0.220E+2, 0.27991000E+1, 0.00000000E+0, 0.82670470E+3, 0.580E+2, 0.230E+2, 0.27991000E+1, + 0.00000000E+0, 0.65114400E+3, 0.580E+2, 0.240E+2, 0.27991000E+1, 0.00000000E+0, 0.71114230E+3, + 0.580E+2, 0.250E+2, 0.27991000E+1, 0.00000000E+0, 0.55801770E+3, 0.580E+2, 0.260E+2, + 0.27991000E+1, 0.00000000E+0, 0.59073870E+3, 0.580E+2, 0.270E+2, 0.27991000E+1, 0.00000000E+0, + 0.60892420E+3, 0.580E+2, 0.280E+2, 0.27991000E+1, 0.00000000E+0, 0.46681100E+3, 0.580E+2, + 0.290E+2, 0.27991000E+1, 0.00000000E+0, 0.47833500E+3, 0.580E+2, 0.300E+2, 0.27991000E+1, + 0.00000000E+0, 0.56687830E+3, 0.580E+2, 0.310E+2, 0.27991000E+1, 0.00000000E+0, 0.49862840E+3, + 0.580E+2, 0.320E+2, 0.27991000E+1, 0.00000000E+0, 0.42429060E+3, 0.580E+2, 0.330E+2, + 0.27991000E+1, 0.00000000E+0, 0.38016060E+3, 0.580E+2, 0.340E+2, 0.27991000E+1, 0.00000000E+0, + 0.33218840E+3, 0.580E+2, 0.350E+2, 0.27991000E+1, 0.00000000E+0, 0.28850100E+3, 0.580E+2, + 0.360E+2, 0.27991000E+1, 0.00000000E+0, 0.15470780E+4, 0.580E+2, 0.370E+2, 0.27991000E+1, + 0.00000000E+0, 0.13520803E+4, 0.580E+2, 0.380E+2, 0.27991000E+1, 0.00000000E+0, 0.11820124E+4, + 0.580E+2, 0.390E+2, 0.27991000E+1, 0.00000000E+0, 0.10609721E+4, 0.580E+2, 0.400E+2, + 0.27991000E+1, 0.00000000E+0, 0.96662010E+3, 0.580E+2, 0.410E+2, 0.27991000E+1, 0.00000000E+0, + 0.74511760E+3, 0.580E+2, 0.420E+2, 0.27991000E+1, 0.00000000E+0, 0.83183600E+3, 0.580E+2, + 0.430E+2, 0.27991000E+1, 0.00000000E+0, 0.63266390E+3, 0.580E+2, 0.440E+2, 0.27991000E+1, + 0.00000000E+0, 0.69156460E+3, 0.580E+2, 0.450E+2, 0.27991000E+1, 0.00000000E+0, 0.64096110E+3, + 0.580E+2, 0.460E+2, 0.27991000E+1, 0.00000000E+0, 0.53459930E+3, 0.580E+2, 0.470E+2, + 0.27991000E+1, 0.00000000E+0, 0.56439100E+3, 0.580E+2, 0.480E+2, 0.27991000E+1, 0.00000000E+0, + 0.70950090E+3, 0.580E+2, 0.490E+2, 0.27991000E+1, 0.00000000E+0, 0.65467230E+3, 0.580E+2, + 0.500E+2, 0.27991000E+1, 0.00000000E+0, 0.58216180E+3, 0.580E+2, 0.510E+2, 0.27991000E+1, + 0.00000000E+0, 0.53941670E+3, 0.580E+2, 0.520E+2, 0.27991000E+1, 0.00000000E+0, 0.48703330E+3, + 0.580E+2, 0.530E+2, 0.27991000E+1, 0.00000000E+0, 0.43728340E+3, 0.580E+2, 0.540E+2, + 0.27991000E+1, 0.00000000E+0, 0.18844554E+4, 0.580E+2, 0.550E+2, 0.27991000E+1, 0.00000000E+0, + 0.17247415E+4, 0.580E+2, 0.560E+2, 0.27991000E+1, 0.00000000E+0, 0.15122504E+4, 0.580E+2, + 0.570E+2, 0.27991000E+1, 0.00000000E+0, 0.68803530E+3, 0.580E+2, 0.580E+2, 0.27991000E+1, + 0.27991000E+1, 0.88687700E+2, 0.590E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.53152300E+2, + 0.590E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.22103168E+4, 0.590E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.10189540E+4, 0.590E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.61076150E+3, 0.590E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.37910380E+3, 0.590E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.24926330E+3, 0.590E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.18083830E+3, 0.590E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.13215840E+3, + 0.590E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.98822000E+2, 0.590E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.26090440E+4, 0.590E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.16875419E+4, 0.590E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.14644446E+4, 0.590E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.10615213E+4, 0.590E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.77317210E+3, 0.590E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.61486520E+3, + 0.590E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.48225090E+3, 0.590E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.38105030E+3, 0.590E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.44737784E+4, 0.590E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.31902086E+4, 0.590E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.25547353E+4, 0.590E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.24050561E+4, 0.590E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.21676325E+4, + 0.590E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.17091137E+4, 0.590E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.18237858E+4, 0.590E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.14281039E+4, 0.590E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.14570358E+4, 0.590E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.15254141E+4, 0.590E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.11729549E+4, 0.590E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.11394352E+4, + 0.590E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.13728649E+4, 0.590E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.11331627E+4, 0.590E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.91252630E+3, 0.590E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.79102140E+3, 0.590E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.66833280E+3, 0.590E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.56301560E+3, 0.590E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.49710778E+4, + 0.590E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.38289626E+4, 0.590E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.31814405E+4, 0.590E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.27679894E+4, 0.590E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.24726905E+4, 0.590E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.18440715E+4, 0.590E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.20845975E+4, 0.590E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.15276056E+4, + 0.590E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.16644640E+4, 0.590E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.15224806E+4, 0.590E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, + 0.12860441E+4, 0.590E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.13182791E+4, 0.590E+2, + 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.17282162E+4, 0.590E+2, 0.490E+2, 0.00000000E+0, + 0.00000000E+0, 0.15110459E+4, 0.590E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.12783406E+4, + 0.590E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.11504200E+4, 0.590E+2, 0.520E+2, + 0.00000000E+0, 0.00000000E+0, 0.10070198E+4, 0.590E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, + 0.87837980E+3, 0.590E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.60738935E+4, 0.590E+2, + 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.49833126E+4, 0.590E+2, 0.560E+2, 0.00000000E+0, + 0.00000000E+0, 0.41503203E+4, 0.590E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.15271461E+4, + 0.590E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.43422386E+4, 0.590E+2, 0.590E+2, + 0.00000000E+0, 0.00000000E+0, 0.85408000E+2, 0.600E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, + 0.51295200E+2, 0.600E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.20915068E+4, 0.600E+2, + 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.97461670E+3, 0.600E+2, 0.400E+1, 0.00000000E+0, + 0.00000000E+0, 0.58618960E+3, 0.600E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.36465190E+3, + 0.600E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.24011390E+3, 0.600E+2, 0.700E+1, + 0.00000000E+0, 0.00000000E+0, 0.17436780E+3, 0.600E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, + 0.12753080E+3, 0.600E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.95420200E+2, 0.600E+2, + 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.24706020E+4, 0.600E+2, 0.110E+2, 0.00000000E+0, + 0.00000000E+0, 0.16117831E+4, 0.600E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.14013191E+4, + 0.600E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.10185098E+4, 0.600E+2, 0.140E+2, + 0.00000000E+0, 0.00000000E+0, 0.74324070E+3, 0.600E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, + 0.59167520E+3, 0.600E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.46450620E+3, 0.600E+2, + 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.36731630E+3, 0.600E+2, 0.180E+2, 0.00000000E+0, + 0.00000000E+0, 0.42163998E+4, 0.600E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.30363662E+4, + 0.600E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.24350889E+4, 0.600E+2, 0.210E+2, + 0.00000000E+0, 0.00000000E+0, 0.22942857E+4, 0.600E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, + 0.20689809E+4, 0.600E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.16306018E+4, 0.600E+2, + 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.17421942E+4, 0.600E+2, 0.250E+2, 0.00000000E+0, + 0.00000000E+0, 0.13638456E+4, 0.600E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.13940822E+4, + 0.600E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.14587399E+4, 0.600E+2, 0.280E+2, + 0.00000000E+0, 0.00000000E+0, 0.11209931E+4, 0.600E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, + 0.10915722E+4, 0.600E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.13142306E+4, 0.600E+2, + 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.10872533E+4, 0.600E+2, 0.320E+2, 0.00000000E+0, + 0.00000000E+0, 0.87700660E+3, 0.600E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.76089490E+3, + 0.600E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.64343050E+3, 0.600E+2, 0.350E+2, + 0.00000000E+0, 0.00000000E+0, 0.54243830E+3, 0.600E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, + 0.46850846E+4, 0.600E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.36420492E+4, 0.600E+2, + 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.30329183E+4, 0.600E+2, 0.390E+2, 0.00000000E+0, + 0.00000000E+0, 0.26420526E+4, 0.600E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.23616974E+4, + 0.600E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.17631139E+4, 0.600E+2, 0.420E+2, + 0.00000000E+0, 0.00000000E+0, 0.19921534E+4, 0.600E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, + 0.14616458E+4, 0.600E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.15933696E+4, 0.600E+2, + 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.14581671E+4, 0.600E+2, 0.460E+2, 0.00000000E+0, + 0.00000000E+0, 0.12304969E+4, 0.600E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.12633482E+4, + 0.600E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.16535039E+4, 0.600E+2, 0.490E+2, + 0.00000000E+0, 0.00000000E+0, 0.14488711E+4, 0.600E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, + 0.12277455E+4, 0.600E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.11058143E+4, 0.600E+2, + 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.96879470E+3, 0.600E+2, 0.530E+2, 0.00000000E+0, + 0.00000000E+0, 0.84567030E+3, 0.600E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.57167999E+4, + 0.600E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.47334185E+4, 0.600E+2, 0.560E+2, + 0.00000000E+0, 0.00000000E+0, 0.39519956E+4, 0.600E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, + 0.14659695E+4, 0.600E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.41259023E+4, 0.600E+2, + 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.39244211E+4, 0.600E+2, 0.600E+2, 0.00000000E+0, + 0.00000000E+0, 0.83331000E+2, 0.610E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.50074800E+2, + 0.610E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.20312740E+4, 0.610E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.94912550E+3, 0.610E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.57141130E+3, 0.610E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.35567120E+3, 0.610E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.23429130E+3, 0.610E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.17018170E+3, 0.610E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.12449460E+3, + 0.610E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.93163500E+2, 0.610E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.23998207E+4, 0.610E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.15689885E+4, 0.610E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.13648494E+4, 0.610E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.99275070E+3, 0.610E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.72481970E+3, 0.610E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.57716960E+3, + 0.610E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.45323130E+3, 0.610E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.35847210E+3, 0.610E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.40920575E+4, 0.610E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.29529794E+4, 0.610E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.23691244E+4, 0.610E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.22326503E+4, 0.610E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.20137194E+4, + 0.610E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.15868512E+4, 0.610E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.16960441E+4, 0.610E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.13276064E+4, 0.610E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.13577395E+4, 0.610E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.14205045E+4, 0.610E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.10914214E+4, 0.610E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.10634898E+4, + 0.610E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.12801762E+4, 0.610E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.10597536E+4, 0.610E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.85521770E+3, 0.610E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.74216490E+3, 0.610E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.62773420E+3, 0.610E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.52930700E+3, 0.610E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.45470720E+4, + 0.610E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.35414930E+4, 0.610E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.29509303E+4, 0.610E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.25714964E+4, 0.610E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.22990481E+4, 0.610E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.17168038E+4, 0.610E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.19396215E+4, 0.610E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.14235531E+4, + 0.610E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.15520522E+4, 0.610E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.14205469E+4, 0.610E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, + 0.11984194E+4, 0.610E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.12309598E+4, 0.610E+2, + 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.16104142E+4, 0.610E+2, 0.490E+2, 0.00000000E+0, + 0.00000000E+0, 0.14119588E+4, 0.610E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.11970157E+4, + 0.610E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.10783854E+4, 0.610E+2, 0.520E+2, + 0.00000000E+0, 0.00000000E+0, 0.94498140E+3, 0.610E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, + 0.82504730E+3, 0.610E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.55474900E+4, 0.610E+2, + 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.46012171E+4, 0.610E+2, 0.560E+2, 0.00000000E+0, + 0.00000000E+0, 0.38440367E+4, 0.610E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.14290690E+4, + 0.610E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.40113635E+4, 0.610E+2, 0.590E+2, + 0.00000000E+0, 0.00000000E+0, 0.38161118E+4, 0.610E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, + 0.37109375E+4, 0.610E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.81412300E+2, 0.620E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.48940600E+2, 0.620E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.19766955E+4, 0.620E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.92581580E+3, + 0.620E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.55783800E+3, 0.620E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.34739210E+3, 0.620E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.22890650E+3, 0.620E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.16630040E+3, 0.620E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.12167270E+3, 0.620E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.91061400E+2, 0.620E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.23356474E+4, + 0.620E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.15299120E+4, 0.620E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.13314786E+4, 0.620E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.96910260E+3, 0.620E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.70786040E+3, 0.620E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.56378900E+3, 0.620E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.44280950E+3, 0.620E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.35028120E+3, + 0.620E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.39796309E+4, 0.620E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.28770680E+4, 0.620E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.23089962E+4, 0.620E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.21764184E+4, 0.620E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.19632723E+4, 0.620E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.15469195E+4, 0.620E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.16538773E+4, + 0.620E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.12944951E+4, 0.620E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.13244770E+4, 0.620E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.13855313E+4, 0.620E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.10643798E+4, 0.620E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.10377490E+4, 0.620E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.12489915E+4, 0.620E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.10345024E+4, + 0.620E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.83516220E+3, 0.620E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.72489870E+3, 0.620E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.61324050E+3, 0.620E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.51716170E+3, 0.620E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.44222696E+4, 0.620E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.34499906E+4, 0.620E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.28761716E+4, + 0.620E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.25070805E+4, 0.620E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.22418085E+4, 0.620E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.16744360E+4, 0.620E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, 0.18915883E+4, 0.620E+2, + 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.13886668E+4, 0.620E+2, 0.440E+2, 0.00000000E+0, + 0.00000000E+0, 0.15142016E+4, 0.620E+2, 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.13860622E+4, + 0.620E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.11690360E+4, 0.620E+2, 0.470E+2, + 0.00000000E+0, 0.00000000E+0, 0.12012473E+4, 0.620E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, + 0.15709643E+4, 0.620E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, 0.13780830E+4, 0.620E+2, + 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.11687524E+4, 0.620E+2, 0.510E+2, 0.00000000E+0, + 0.00000000E+0, 0.10531255E+4, 0.620E+2, 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.92301940E+3, + 0.620E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.80600020E+3, 0.620E+2, 0.540E+2, + 0.00000000E+0, 0.00000000E+0, 0.53944846E+4, 0.620E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, + 0.44810449E+4, 0.620E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, 0.37456921E+4, 0.620E+2, + 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.13951471E+4, 0.620E+2, 0.580E+2, 0.00000000E+0, + 0.27991000E+1, 0.39071923E+4, 0.620E+2, 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.37175407E+4, + 0.620E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.36152067E+4, 0.620E+2, 0.610E+2, + 0.00000000E+0, 0.00000000E+0, 0.35220508E+4, 0.620E+2, 0.620E+2, 0.00000000E+0, 0.00000000E+0, + 0.79713800E+2, 0.630E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.47936500E+2, 0.630E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.19280810E+4, 0.630E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.90511010E+3, 0.630E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.54580150E+3, + 0.630E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.34005800E+3, 0.630E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.22413830E+3, 0.630E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.16286380E+3, 0.630E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.11917340E+3, 0.630E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.89198800E+2, 0.630E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.22784898E+4, 0.630E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.14951792E+4, + 0.630E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.13018438E+4, 0.630E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.94812880E+3, 0.630E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.69283380E+3, 0.630E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.55193900E+3, 0.630E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.43358310E+3, 0.630E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.34303070E+3, 0.630E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.38794729E+4, + 0.630E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.28095233E+4, 0.630E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.22555157E+4, 0.630E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.21264190E+4, 0.630E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.19184254E+4, 0.630E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.15114156E+4, 0.630E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.16164023E+4, 0.630E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.12650643E+4, + 0.630E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.12949313E+4, 0.630E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.13544595E+4, 0.630E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.10403490E+4, 0.630E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.10148959E+4, 0.630E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.12213030E+4, 0.630E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.10121053E+4, 0.630E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.81738880E+3, + 0.630E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.70960390E+3, 0.630E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.60040640E+3, 0.630E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.50640980E+3, 0.630E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.43110961E+4, 0.630E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.33685646E+4, 0.630E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.28096885E+4, 0.630E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.24498188E+4, + 0.630E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.21909387E+4, 0.630E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.16367956E+4, 0.630E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.18489097E+4, 0.630E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.13576810E+4, 0.630E+2, + 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.14805878E+4, 0.630E+2, 0.450E+2, 0.00000000E+0, + 0.00000000E+0, 0.13554425E+4, 0.630E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.11429352E+4, + 0.630E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.11748699E+4, 0.630E+2, 0.480E+2, + 0.00000000E+0, 0.00000000E+0, 0.15359254E+4, 0.630E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, + 0.13480216E+4, 0.630E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.11436919E+4, 0.630E+2, + 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.10307380E+4, 0.630E+2, 0.520E+2, 0.00000000E+0, + 0.00000000E+0, 0.90356300E+3, 0.630E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.78913200E+3, + 0.630E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.52582068E+4, 0.630E+2, 0.550E+2, + 0.00000000E+0, 0.00000000E+0, 0.43740826E+4, 0.630E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, + 0.36582120E+4, 0.630E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.13650615E+4, 0.630E+2, + 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.38144921E+4, 0.630E+2, 0.590E+2, 0.00000000E+0, + 0.00000000E+0, 0.36298268E+4, 0.630E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.35300228E+4, + 0.630E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.34391601E+4, 0.630E+2, 0.620E+2, + 0.00000000E+0, 0.00000000E+0, 0.33583122E+4, 0.630E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, + 0.64188000E+2, 0.640E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.39578600E+2, 0.640E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.14077335E+4, 0.640E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.68992870E+3, 0.640E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.42648970E+3, + 0.640E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.27091830E+3, 0.640E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.18125810E+3, 0.640E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.13314380E+3, 0.640E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.98357300E+2, 0.640E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.74191200E+2, 0.640E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.16673895E+4, 0.640E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.11308198E+4, + 0.640E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.99679240E+3, 0.640E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.73902000E+3, 0.640E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.54836330E+3, 0.640E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.44123030E+3, 0.640E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.35003690E+3, 0.640E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.27935150E+3, 0.640E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.28176333E+4, + 0.640E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.20945326E+4, 0.640E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.16917052E+4, 0.640E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.16028927E+4, 0.640E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.14507174E+4, 0.640E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.11427015E+4, 0.640E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.12280426E+4, 0.640E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.96156000E+3, + 0.640E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.99206730E+3, 0.640E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.10341932E+4, 0.640E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.79387630E+3, 0.640E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.78351140E+3, 0.640E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.93936520E+3, 0.640E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.78963690E+3, 0.640E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.64598490E+3, + 0.640E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.56529910E+3, 0.640E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.48231720E+3, 0.640E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.40998030E+3, 0.640E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.31359242E+4, 0.640E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.25077589E+4, 0.640E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.21132076E+4, 0.640E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.18544837E+4, + 0.640E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.16654372E+4, 0.640E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.12530730E+4, 0.640E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.14116759E+4, 0.640E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.10450617E+4, 0.640E+2, + 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.11404525E+4, 0.640E+2, 0.450E+2, 0.00000000E+0, + 0.00000000E+0, 0.10471279E+4, 0.640E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.88053130E+3, + 0.640E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.91107960E+3, 0.640E+2, 0.480E+2, + 0.00000000E+0, 0.00000000E+0, 0.11799720E+4, 0.640E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, + 0.10480976E+4, 0.640E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.89951620E+3, 0.640E+2, + 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.81630470E+3, 0.640E+2, 0.520E+2, 0.00000000E+0, + 0.00000000E+0, 0.72098470E+3, 0.640E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.63421630E+3, + 0.640E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.38238426E+4, 0.640E+2, 0.550E+2, + 0.00000000E+0, 0.00000000E+0, 0.32436561E+4, 0.640E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, + 0.27405478E+4, 0.640E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.10709597E+4, 0.640E+2, + 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.28381357E+4, 0.640E+2, 0.590E+2, 0.00000000E+0, + 0.00000000E+0, 0.27056826E+4, 0.640E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.26326657E+4, + 0.640E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.25660607E+4, 0.640E+2, 0.620E+2, + 0.00000000E+0, 0.00000000E+0, 0.25068352E+4, 0.640E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, + 0.18916719E+4, 0.640E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.70179400E+2, 0.650E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.42367900E+2, 0.650E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.18023852E+4, 0.650E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.80848660E+3, + 0.650E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.48279770E+3, 0.650E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.29984690E+3, 0.650E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.19762340E+3, 0.650E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.14377540E+3, 0.650E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.10539700E+3, 0.650E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.79048400E+2, 0.650E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.21240831E+4, + 0.650E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.13433651E+4, 0.650E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.11621560E+4, 0.650E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.83917760E+3, 0.650E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.61083180E+3, 0.650E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.48623190E+3, 0.650E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.38195840E+3, 0.650E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.30241490E+3, + 0.650E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.36876305E+4, 0.650E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.25641443E+4, 0.650E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.20454927E+4, 0.650E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.19228302E+4, 0.650E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.17309890E+4, 0.650E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.13680049E+4, 0.650E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.14541614E+4, + 0.650E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.11408713E+4, 0.650E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.11579011E+4, 0.650E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.12132014E+4, 0.650E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.93575440E+3, 0.650E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.90359910E+3, 0.650E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.10900939E+4, 0.650E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.89646510E+3, + 0.650E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.72120420E+3, 0.650E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.62544800E+3, 0.650E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.52893810E+3, 0.650E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.44620840E+3, 0.650E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.40985678E+4, 0.650E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.30839899E+4, 0.650E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.25485911E+4, + 0.650E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.22114907E+4, 0.650E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.19735648E+4, 0.650E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.14705265E+4, 0.650E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, 0.16631347E+4, 0.650E+2, + 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.12173511E+4, 0.650E+2, 0.440E+2, 0.00000000E+0, + 0.00000000E+0, 0.13235223E+4, 0.650E+2, 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.12096847E+4, + 0.650E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.10256835E+4, 0.650E+2, 0.470E+2, + 0.00000000E+0, 0.00000000E+0, 0.10465789E+4, 0.650E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, + 0.13756067E+4, 0.650E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, 0.11975597E+4, 0.650E+2, + 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.10112975E+4, 0.650E+2, 0.510E+2, 0.00000000E+0, + 0.00000000E+0, 0.90991270E+3, 0.650E+2, 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.79669950E+3, + 0.650E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.69543500E+3, 0.650E+2, 0.540E+2, + 0.00000000E+0, 0.00000000E+0, 0.50226967E+4, 0.650E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, + 0.40300910E+4, 0.650E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, 0.33357435E+4, 0.650E+2, + 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.12096287E+4, 0.650E+2, 0.580E+2, 0.00000000E+0, + 0.27991000E+1, 0.35071716E+4, 0.650E+2, 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.33250797E+4, + 0.650E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.32313241E+4, 0.650E+2, 0.610E+2, + 0.00000000E+0, 0.00000000E+0, 0.31461740E+4, 0.650E+2, 0.620E+2, 0.00000000E+0, 0.00000000E+0, + 0.30703853E+4, 0.650E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, 0.22762532E+4, 0.650E+2, + 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.28516677E+4, 0.650E+2, 0.650E+2, 0.00000000E+0, + 0.00000000E+0, 0.67958000E+2, 0.660E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.41162200E+2, + 0.660E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.17207353E+4, 0.660E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.77577180E+3, 0.660E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.46524390E+3, 0.660E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.28984550E+3, 0.660E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.19145500E+3, 0.660E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.13949370E+3, 0.660E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.10238110E+3, + 0.660E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.76855700E+2, 0.660E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.20278568E+4, 0.660E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.12872471E+4, 0.660E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.11160341E+4, 0.660E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.80833220E+3, 0.660E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.58989410E+3, 0.660E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.47029770E+3, + 0.660E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.36998330E+3, 0.660E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.29329050E+3, 0.660E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.35269705E+4, 0.660E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.24517734E+4, 0.660E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.19574581E+4, 0.660E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.18415883E+4, 0.660E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.16587019E+4, + 0.660E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.13107538E+4, 0.660E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.13944853E+4, 0.660E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.10940016E+4, 0.660E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.11118174E+4, 0.660E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.11642755E+4, 0.660E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.89783730E+3, 0.660E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.86875770E+3, + 0.660E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.10475640E+4, 0.660E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.86358600E+3, 0.660E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.69627600E+3, 0.660E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.60460480E+3, 0.660E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.51197160E+3, 0.660E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.43238930E+3, 0.660E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.39216962E+4, + 0.660E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.29485688E+4, 0.660E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.24401762E+4, 0.660E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.21194908E+4, 0.660E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.18927858E+4, 0.660E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.14117363E+4, 0.660E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.15962074E+4, 0.660E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.11696785E+4, + 0.660E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.12718937E+4, 0.660E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.11630374E+4, 0.660E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, + 0.98556970E+3, 0.660E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.10068382E+4, 0.660E+2, + 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.13215257E+4, 0.660E+2, 0.490E+2, 0.00000000E+0, + 0.00000000E+0, 0.11527975E+4, 0.660E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.97544350E+3, + 0.660E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.87867530E+3, 0.660E+2, 0.520E+2, + 0.00000000E+0, 0.00000000E+0, 0.77029080E+3, 0.660E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, + 0.67313940E+3, 0.660E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.48123323E+4, 0.660E+2, + 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.38522949E+4, 0.660E+2, 0.560E+2, 0.00000000E+0, + 0.00000000E+0, 0.31924039E+4, 0.660E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.11661633E+4, + 0.660E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.33558765E+4, 0.660E+2, 0.590E+2, + 0.00000000E+0, 0.00000000E+0, 0.31799629E+4, 0.660E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, + 0.30904072E+4, 0.660E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.30090778E+4, 0.660E+2, + 0.620E+2, 0.00000000E+0, 0.00000000E+0, 0.29367065E+4, 0.660E+2, 0.630E+2, 0.00000000E+0, + 0.00000000E+0, 0.21810675E+4, 0.660E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.27299739E+4, + 0.660E+2, 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.26173310E+4, 0.660E+2, 0.660E+2, + 0.00000000E+0, 0.00000000E+0, 0.72220300E+2, 0.670E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, + 0.43571100E+2, 0.670E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.17049679E+4, 0.670E+2, + 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.81136880E+3, 0.670E+2, 0.400E+1, 0.00000000E+0, + 0.00000000E+0, 0.49188750E+3, 0.670E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.30751980E+3, + 0.670E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.20315540E+3, 0.670E+2, 0.700E+1, + 0.00000000E+0, 0.00000000E+0, 0.14783550E+3, 0.670E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, + 0.10830760E+3, 0.670E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.81141600E+2, 0.670E+2, + 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.20163392E+4, 0.670E+2, 0.110E+2, 0.00000000E+0, + 0.00000000E+0, 0.13374783E+4, 0.670E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.11679358E+4, + 0.670E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.85407400E+3, 0.670E+2, 0.140E+2, + 0.00000000E+0, 0.00000000E+0, 0.62593940E+3, 0.670E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, + 0.49945760E+3, 0.670E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.39293850E+3, 0.670E+2, + 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.31124870E+3, 0.670E+2, 0.180E+2, 0.00000000E+0, + 0.00000000E+0, 0.34195160E+4, 0.670E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.25014164E+4, + 0.670E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.20120352E+4, 0.670E+2, 0.210E+2, + 0.00000000E+0, 0.00000000E+0, 0.18992044E+4, 0.670E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, + 0.17148635E+4, 0.670E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.13502932E+4, 0.670E+2, + 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.14466020E+4, 0.670E+2, 0.250E+2, 0.00000000E+0, + 0.00000000E+0, 0.11317710E+4, 0.670E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.11614905E+4, + 0.670E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.12139348E+4, 0.670E+2, 0.280E+2, + 0.00000000E+0, 0.00000000E+0, 0.93167930E+3, 0.670E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, + 0.91200820E+3, 0.670E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.10964450E+4, 0.670E+2, + 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.91172230E+3, 0.670E+2, 0.320E+2, 0.00000000E+0, + 0.00000000E+0, 0.73821290E+3, 0.670E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.64174520E+3, + 0.670E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.54371620E+3, 0.670E+2, 0.350E+2, + 0.00000000E+0, 0.00000000E+0, 0.45912050E+3, 0.670E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, + 0.38008304E+4, 0.670E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.29970212E+4, 0.670E+2, + 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.25073572E+4, 0.670E+2, 0.390E+2, 0.00000000E+0, + 0.00000000E+0, 0.21900272E+4, 0.670E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.19605194E+4, + 0.670E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.14668017E+4, 0.670E+2, 0.420E+2, + 0.00000000E+0, 0.00000000E+0, 0.16559466E+4, 0.670E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, + 0.12180651E+4, 0.670E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.13291426E+4, 0.670E+2, + 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.12176582E+4, 0.670E+2, 0.460E+2, 0.00000000E+0, + 0.00000000E+0, 0.10253902E+4, 0.670E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.10563718E+4, + 0.670E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.13778901E+4, 0.670E+2, 0.490E+2, + 0.00000000E+0, 0.00000000E+0, 0.12131043E+4, 0.670E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, + 0.10318071E+4, 0.670E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.93112390E+3, 0.670E+2, + 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.81732200E+3, 0.670E+2, 0.530E+2, 0.00000000E+0, + 0.00000000E+0, 0.71464770E+3, 0.670E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.46328428E+4, + 0.670E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.38855093E+4, 0.670E+2, 0.560E+2, + 0.00000000E+0, 0.00000000E+0, 0.32599132E+4, 0.670E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, + 0.12305989E+4, 0.670E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.33915411E+4, 0.670E+2, + 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.32298168E+4, 0.670E+2, 0.600E+2, 0.00000000E+0, + 0.00000000E+0, 0.31416098E+4, 0.670E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.30612537E+4, + 0.670E+2, 0.620E+2, 0.00000000E+0, 0.00000000E+0, 0.29897660E+4, 0.670E+2, 0.630E+2, + 0.00000000E+0, 0.00000000E+0, 0.22379026E+4, 0.670E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, + 0.27243602E+4, 0.670E+2, 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.26065136E+4, 0.670E+2, + 0.660E+2, 0.00000000E+0, 0.00000000E+0, 0.26641668E+4, 0.670E+2, 0.670E+2, 0.00000000E+0, + 0.00000000E+0, 0.70715400E+2, 0.680E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.42665800E+2, + 0.680E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.16647700E+4, 0.680E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.79368770E+3, 0.680E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.48143850E+3, 0.680E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.30106920E+3, 0.680E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.19891850E+3, 0.680E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.14475870E+3, 0.680E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.10605520E+3, + 0.680E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.79453900E+2, 0.680E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.19689928E+4, 0.680E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.13079814E+4, 0.680E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.11425656E+4, 0.680E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.83589690E+3, 0.680E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.61278090E+3, 0.680E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.48901070E+3, + 0.680E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.38474960E+3, 0.680E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.30477480E+3, 0.680E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.33372227E+4, 0.680E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.24446758E+4, 0.680E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.19669050E+4, 0.680E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.18568743E+4, 0.680E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.16768129E+4, + 0.680E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.13201912E+4, 0.680E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.14147048E+4, 0.680E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.11067246E+4, 0.680E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.11361897E+4, 0.680E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.11873873E+4, 0.680E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.91117070E+3, 0.680E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.89233320E+3, + 0.680E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.10726768E+4, 0.680E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.89230170E+3, 0.680E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.72266540E+3, 0.680E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.62829340E+3, 0.680E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.53236410E+3, 0.680E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.44955920E+3, 0.680E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.37094297E+4, + 0.680E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.29287164E+4, 0.680E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.24511775E+4, 0.680E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.21414202E+4, 0.680E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.19172203E+4, 0.680E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.14346130E+4, 0.680E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.16195186E+4, 0.680E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.11914716E+4, + 0.680E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.13002637E+4, 0.680E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.11912962E+4, 0.680E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, + 0.10029797E+4, 0.680E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.10336009E+4, 0.680E+2, + 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.13478497E+4, 0.680E+2, 0.490E+2, 0.00000000E+0, + 0.00000000E+0, 0.11871040E+4, 0.680E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.10099583E+4, + 0.680E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.91151370E+3, 0.680E+2, 0.520E+2, + 0.00000000E+0, 0.00000000E+0, 0.80019180E+3, 0.680E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, + 0.69972310E+3, 0.680E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.45209645E+4, 0.680E+2, + 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.37960924E+4, 0.680E+2, 0.560E+2, 0.00000000E+0, + 0.00000000E+0, 0.31862327E+4, 0.680E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.12044185E+4, + 0.680E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.33138879E+4, 0.680E+2, 0.590E+2, + 0.00000000E+0, 0.00000000E+0, 0.31561992E+4, 0.680E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, + 0.30700842E+4, 0.680E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.29916275E+4, 0.680E+2, + 0.620E+2, 0.00000000E+0, 0.00000000E+0, 0.29218310E+4, 0.680E+2, 0.630E+2, 0.00000000E+0, + 0.00000000E+0, 0.21877803E+4, 0.680E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.26611461E+4, + 0.680E+2, 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.25461249E+4, 0.680E+2, 0.660E+2, + 0.00000000E+0, 0.00000000E+0, 0.26039653E+4, 0.680E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, + 0.25451713E+4, 0.680E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.69379100E+2, 0.690E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.41872700E+2, 0.690E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.16270951E+4, 0.690E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.77746020E+3, + 0.690E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.47198600E+3, 0.690E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.29530140E+3, 0.690E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.19516300E+3, 0.690E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.14204780E+3, 0.690E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.10408000E+3, 0.690E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.77978800E+2, 0.690E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.19246593E+4, + 0.690E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.12807911E+4, 0.690E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.11193391E+4, 0.690E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.81942800E+3, 0.690E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.60097010E+3, 0.690E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.47969090E+3, 0.690E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.37748730E+3, 0.690E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.29906220E+3, + 0.690E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.32599368E+4, 0.690E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.23919954E+4, 0.690E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.19251263E+4, 0.690E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.18177881E+4, 0.690E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.16417354E+4, 0.690E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.12924384E+4, 0.690E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.13853712E+4, + 0.690E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.10836957E+4, 0.690E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.11130259E+4, 0.690E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.11630369E+4, 0.690E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.89235160E+3, 0.690E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.87439610E+3, 0.690E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.10509705E+4, 0.690E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.87471320E+3, + 0.690E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.70869500E+3, 0.690E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.61626580E+3, 0.690E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.52226550E+3, 0.690E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.44109320E+3, 0.690E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.36236511E+4, 0.690E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.28652613E+4, 0.690E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.23992487E+4, + 0.690E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.20966400E+4, 0.690E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.18774174E+4, 0.690E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.14051352E+4, 0.690E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, 0.15861100E+4, 0.690E+2, + 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.11671878E+4, 0.690E+2, 0.440E+2, 0.00000000E+0, + 0.00000000E+0, 0.12739026E+4, 0.690E+2, 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.11672707E+4, + 0.690E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.98252100E+3, 0.690E+2, 0.470E+2, + 0.00000000E+0, 0.00000000E+0, 0.10128904E+4, 0.690E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, + 0.13203887E+4, 0.690E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, 0.11634988E+4, 0.690E+2, + 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.99025880E+3, 0.690E+2, 0.510E+2, 0.00000000E+0, + 0.00000000E+0, 0.89390800E+3, 0.690E+2, 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.78488410E+3, + 0.690E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.68644520E+3, 0.690E+2, 0.540E+2, + 0.00000000E+0, 0.00000000E+0, 0.44159694E+4, 0.690E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, + 0.37128812E+4, 0.690E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, 0.31180001E+4, 0.690E+2, + 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.11807776E+4, 0.690E+2, 0.580E+2, 0.00000000E+0, + 0.27991000E+1, 0.32417266E+4, 0.690E+2, 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.30878489E+4, + 0.690E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.30036922E+4, 0.690E+2, 0.610E+2, + 0.00000000E+0, 0.00000000E+0, 0.29270118E+4, 0.690E+2, 0.620E+2, 0.00000000E+0, 0.00000000E+0, + 0.28587977E+4, 0.690E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, 0.21415264E+4, 0.690E+2, + 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.26023122E+4, 0.690E+2, 0.650E+2, 0.00000000E+0, + 0.00000000E+0, 0.24899643E+4, 0.690E+2, 0.660E+2, 0.00000000E+0, 0.00000000E+0, 0.25481802E+4, + 0.690E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.24906989E+4, 0.690E+2, 0.680E+2, + 0.00000000E+0, 0.00000000E+0, 0.24374539E+4, 0.690E+2, 0.690E+2, 0.00000000E+0, 0.00000000E+0, + 0.68494900E+2, 0.700E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.41286600E+2, 0.700E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.16127581E+4, 0.700E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.76939830E+3, 0.700E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.46660990E+3, + 0.700E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.29168170E+3, 0.700E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.19263240E+3, 0.700E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.14013000E+3, 0.700E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.10262510E+3, 0.700E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.76858100E+2, 0.700E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.19075332E+4, 0.700E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.12678866E+4, + 0.700E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.11075215E+4, 0.700E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.81018450E+3, 0.700E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.59379110E+3, 0.700E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.47373900E+3, 0.700E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.37262670E+3, 0.700E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.29508360E+3, 0.700E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.32317117E+4, + 0.700E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.23690958E+4, 0.700E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.19062802E+4, 0.700E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.17996377E+4, 0.700E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.16251430E+4, 0.700E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.12793493E+4, 0.700E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.13711198E+4, 0.700E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.10724959E+4, + 0.700E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.11012182E+4, 0.700E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.11508553E+4, 0.700E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.88299190E+3, 0.700E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.86485460E+3, 0.700E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.10396601E+4, 0.700E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.86479960E+3, 0.700E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.70027180E+3, + 0.700E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.60871740E+3, 0.700E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.51566490E+3, 0.700E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.43535350E+3, 0.700E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.35920465E+4, 0.700E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.28379423E+4, 0.700E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.23754679E+4, 0.700E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.20753417E+4, + 0.700E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.18580353E+4, 0.700E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.13902059E+4, 0.700E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.15694426E+4, 0.700E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.11545209E+4, 0.700E+2, + 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.12600764E+4, 0.700E+2, 0.450E+2, 0.00000000E+0, + 0.00000000E+0, 0.11544639E+4, 0.700E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.97180930E+3, + 0.700E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.10016214E+4, 0.700E+2, 0.480E+2, + 0.00000000E+0, 0.00000000E+0, 0.13062023E+4, 0.700E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, + 0.11504571E+4, 0.700E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.97868710E+3, 0.700E+2, + 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.88319190E+3, 0.700E+2, 0.520E+2, 0.00000000E+0, + 0.00000000E+0, 0.77520910E+3, 0.700E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.67775440E+3, + 0.700E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.43774766E+4, 0.700E+2, 0.550E+2, + 0.00000000E+0, 0.00000000E+0, 0.36779606E+4, 0.700E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, + 0.30875154E+4, 0.700E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.11670799E+4, 0.700E+2, + 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.32108489E+4, 0.700E+2, 0.590E+2, 0.00000000E+0, + 0.00000000E+0, 0.30582277E+4, 0.700E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.29748238E+4, + 0.700E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.28988349E+4, 0.700E+2, 0.620E+2, + 0.00000000E+0, 0.00000000E+0, 0.28312344E+4, 0.700E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, + 0.21199794E+4, 0.700E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.25778005E+4, 0.700E+2, + 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.24663583E+4, 0.700E+2, 0.660E+2, 0.00000000E+0, + 0.00000000E+0, 0.25233630E+4, 0.700E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.24664143E+4, + 0.700E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.24136514E+4, 0.700E+2, 0.690E+2, + 0.00000000E+0, 0.00000000E+0, 0.23901227E+4, 0.700E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, + 0.58651900E+2, 0.710E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.35951600E+2, 0.710E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.12947583E+4, 0.710E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.63458810E+3, 0.710E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.39146520E+3, + 0.710E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.24795570E+3, 0.710E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.16541840E+3, 0.710E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.12121480E+3, 0.710E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.89340500E+2, 0.710E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.67257500E+2, 0.710E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.15332675E+4, 0.710E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.10401825E+4, + 0.710E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.91638240E+3, 0.710E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.67855410E+3, 0.710E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.50255170E+3, 0.710E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.40367180E+3, 0.710E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.31962860E+3, 0.710E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.25459790E+3, 0.710E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.25921299E+4, + 0.710E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.19255453E+4, 0.710E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.15553939E+4, 0.710E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.14734091E+4, 0.710E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.13334027E+4, 0.710E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.10496142E+4, 0.710E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.11285309E+4, 0.710E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.88302170E+3, + 0.710E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.91141500E+3, 0.710E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.95032780E+3, 0.710E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.72889260E+3, 0.710E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.71952410E+3, 0.710E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.86291390E+3, 0.710E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.72475130E+3, 0.710E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.59205870E+3, + 0.710E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.51745760E+3, 0.710E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.44084280E+3, 0.710E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.37414020E+3, 0.710E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.28847585E+4, 0.710E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.23048558E+4, 0.710E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.19421387E+4, 0.710E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.17040440E+4, + 0.710E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.15299721E+4, 0.710E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.11501604E+4, 0.710E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.12962701E+4, 0.710E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.95869920E+3, 0.710E+2, + 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.10467597E+4, 0.710E+2, 0.450E+2, 0.00000000E+0, + 0.00000000E+0, 0.96091280E+3, 0.710E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.80744060E+3, + 0.710E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.83583100E+3, 0.710E+2, 0.480E+2, + 0.00000000E+0, 0.00000000E+0, 0.10833008E+4, 0.710E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, + 0.96184020E+3, 0.710E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.82469640E+3, 0.710E+2, + 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.74775790E+3, 0.710E+2, 0.520E+2, 0.00000000E+0, + 0.00000000E+0, 0.65970490E+3, 0.710E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.57959110E+3, + 0.710E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.35195236E+4, 0.710E+2, 0.550E+2, + 0.00000000E+0, 0.00000000E+0, 0.29806436E+4, 0.710E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, + 0.25182192E+4, 0.710E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.98175310E+3, 0.710E+2, + 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.26089193E+4, 0.710E+2, 0.590E+2, 0.00000000E+0, + 0.00000000E+0, 0.24861931E+4, 0.710E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.24191164E+4, + 0.710E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.23579439E+4, 0.710E+2, 0.620E+2, + 0.00000000E+0, 0.00000000E+0, 0.23035540E+4, 0.710E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, + 0.17376565E+4, 0.710E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.20919380E+4, 0.710E+2, + 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.20059243E+4, 0.710E+2, 0.660E+2, 0.00000000E+0, + 0.00000000E+0, 0.20565310E+4, 0.710E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.20105203E+4, + 0.710E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.19680474E+4, 0.710E+2, 0.690E+2, + 0.00000000E+0, 0.00000000E+0, 0.19483102E+4, 0.710E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, + 0.15974796E+4, 0.710E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.58850400E+2, 0.720E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.36574900E+2, 0.720E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.11772268E+4, 0.720E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.60758590E+3, + 0.720E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.38350840E+3, 0.720E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.24668260E+3, 0.720E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.16624720E+3, 0.720E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.12259130E+3, 0.720E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.90778400E+2, 0.720E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.68550500E+2, 0.720E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.13981254E+4, + 0.720E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.98752390E+3, 0.720E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.88079020E+3, 0.720E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.66333140E+3, 0.720E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.49770150E+3, 0.720E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.40279470E+3, 0.720E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.32111450E+3, 0.720E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.25716510E+3, + 0.720E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.23300562E+4, 0.720E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.17971024E+4, 0.720E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.14619589E+4, 0.720E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.13919848E+4, 0.720E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.12638660E+4, 0.720E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.99362820E+3, 0.720E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.10747287E+4, + 0.720E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.84045370E+3, 0.720E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.87543360E+3, 0.720E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.90984070E+3, 0.720E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.69642830E+3, 0.720E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.69621350E+3, 0.720E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.83232490E+3, 0.720E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.70869710E+3, + 0.720E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.58542500E+3, 0.720E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.51487840E+3, 0.720E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.44133770E+3, 0.720E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.37652870E+3, 0.720E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.25964033E+4, 0.720E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.21464040E+4, 0.720E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.18297515E+4, + 0.720E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.16164737E+4, 0.720E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.14572492E+4, 0.720E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.11025669E+4, 0.720E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, 0.12395201E+4, 0.720E+2, + 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.92341980E+3, 0.720E+2, 0.440E+2, 0.00000000E+0, + 0.00000000E+0, 0.10097527E+4, 0.720E+2, 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.92946760E+3, + 0.720E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.77779950E+3, 0.720E+2, 0.470E+2, + 0.00000000E+0, 0.00000000E+0, 0.81120400E+3, 0.720E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, + 0.10422993E+4, 0.720E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, 0.93663610E+3, 0.720E+2, + 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.81148690E+3, 0.720E+2, 0.510E+2, 0.00000000E+0, + 0.00000000E+0, 0.74006690E+3, 0.720E+2, 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.65681710E+3, + 0.720E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.58013770E+3, 0.720E+2, 0.540E+2, + 0.00000000E+0, 0.00000000E+0, 0.31606446E+4, 0.720E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, + 0.27609094E+4, 0.720E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, 0.23609186E+4, 0.720E+2, + 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.96347730E+3, 0.720E+2, 0.580E+2, 0.00000000E+0, + 0.27991000E+1, 0.24240491E+4, 0.720E+2, 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.23170514E+4, + 0.720E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.22560584E+4, 0.720E+2, 0.610E+2, + 0.00000000E+0, 0.00000000E+0, 0.22002906E+4, 0.720E+2, 0.620E+2, 0.00000000E+0, 0.00000000E+0, + 0.21507417E+4, 0.720E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, 0.16406567E+4, 0.720E+2, + 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.19309949E+4, 0.720E+2, 0.650E+2, 0.00000000E+0, + 0.00000000E+0, 0.18529581E+4, 0.720E+2, 0.660E+2, 0.00000000E+0, 0.00000000E+0, 0.19265925E+4, + 0.720E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.18843048E+4, 0.720E+2, 0.680E+2, + 0.00000000E+0, 0.00000000E+0, 0.18455050E+4, 0.720E+2, 0.690E+2, 0.00000000E+0, 0.00000000E+0, + 0.18262149E+4, 0.720E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, 0.15072441E+4, 0.720E+2, + 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.14412394E+4, 0.720E+2, 0.720E+2, 0.00000000E+0, + 0.00000000E+0, 0.54401500E+2, 0.730E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.34283400E+2, + 0.730E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.10273577E+4, 0.730E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.54443550E+3, 0.730E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.34862850E+3, 0.730E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.22671590E+3, 0.730E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.15406960E+3, 0.730E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.11429670E+3, 0.730E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.85081400E+2, + 0.730E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.64523800E+2, 0.730E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.12220335E+4, 0.730E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.88084690E+3, 0.730E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.79141350E+3, 0.730E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.60213470E+3, 0.730E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.45569700E+3, 0.730E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.37087230E+3, + 0.730E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.29728390E+3, 0.730E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.23922910E+3, 0.730E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.20266698E+4, 0.730E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.15894883E+4, 0.730E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.12977826E+4, 0.730E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.12395033E+4, 0.730E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.11275812E+4, + 0.730E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.88658800E+3, 0.730E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.96151940E+3, 0.730E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.75231040E+3, 0.730E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.78703270E+3, 0.730E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.81634550E+3, 0.730E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.62484080E+3, 0.730E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.62867410E+3, + 0.730E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.74997760E+3, 0.730E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.64373010E+3, 0.730E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.53560150E+3, 0.730E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.47316850E+3, 0.730E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.40746910E+3, 0.730E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.34913050E+3, 0.730E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.22608400E+4, + 0.730E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.18969799E+4, 0.730E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.16272670E+4, 0.730E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.14431973E+4, 0.730E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.13043213E+4, 0.730E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.99116570E+3, 0.730E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.11124511E+4, 0.730E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.83281910E+3, + 0.730E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.91084260E+3, 0.730E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.83983510E+3, 0.730E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, + 0.70192840E+3, 0.730E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.73456590E+3, 0.730E+2, + 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.93877020E+3, 0.730E+2, 0.490E+2, 0.00000000E+0, + 0.00000000E+0, 0.84925790E+3, 0.730E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.74051010E+3, + 0.730E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.67794300E+3, 0.730E+2, 0.520E+2, + 0.00000000E+0, 0.00000000E+0, 0.60419180E+3, 0.730E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, + 0.53577730E+3, 0.730E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.27516509E+4, 0.730E+2, + 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.24344207E+4, 0.730E+2, 0.560E+2, 0.00000000E+0, + 0.00000000E+0, 0.20948531E+4, 0.730E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.87810980E+3, + 0.730E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.21417667E+4, 0.730E+2, 0.590E+2, + 0.00000000E+0, 0.00000000E+0, 0.20496125E+4, 0.730E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, + 0.19962879E+4, 0.730E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.19474669E+4, 0.730E+2, + 0.620E+2, 0.00000000E+0, 0.00000000E+0, 0.19041085E+4, 0.730E+2, 0.630E+2, 0.00000000E+0, + 0.00000000E+0, 0.14623131E+4, 0.730E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.17026705E+4, + 0.730E+2, 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.16355752E+4, 0.730E+2, 0.660E+2, + 0.00000000E+0, 0.00000000E+0, 0.17084912E+4, 0.730E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, + 0.16713110E+4, 0.730E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.16373225E+4, 0.730E+2, + 0.690E+2, 0.00000000E+0, 0.00000000E+0, 0.16197710E+4, 0.730E+2, 0.700E+2, 0.00000000E+0, + 0.00000000E+0, 0.13428697E+4, 0.730E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.12925836E+4, + 0.730E+2, 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.11638241E+4, 0.730E+2, 0.730E+2, + 0.00000000E+0, 0.00000000E+0, 0.46481300E+2, 0.740E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, + 0.29820600E+2, 0.740E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.84241230E+3, 0.740E+2, + 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.45198610E+3, 0.740E+2, 0.400E+1, 0.00000000E+0, + 0.00000000E+0, 0.29290150E+3, 0.740E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.19259840E+3, + 0.740E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.13214100E+3, 0.740E+2, 0.700E+1, + 0.00000000E+0, 0.00000000E+0, 0.98766600E+2, 0.740E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, + 0.74030900E+2, 0.740E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.56476700E+2, 0.740E+2, + 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.10029508E+4, 0.740E+2, 0.110E+2, 0.00000000E+0, + 0.00000000E+0, 0.72933520E+3, 0.740E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.65874710E+3, + 0.740E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.50518900E+3, 0.740E+2, 0.140E+2, + 0.00000000E+0, 0.00000000E+0, 0.38541090E+3, 0.740E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, + 0.31556320E+3, 0.740E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.25452870E+3, 0.740E+2, + 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.20602860E+3, 0.740E+2, 0.180E+2, 0.00000000E+0, + 0.00000000E+0, 0.16644321E+4, 0.740E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.13117641E+4, + 0.740E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.10728050E+4, 0.740E+2, 0.210E+2, + 0.00000000E+0, 0.00000000E+0, 0.10269214E+4, 0.740E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, + 0.93538590E+3, 0.740E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.73650630E+3, 0.740E+2, + 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.79917580E+3, 0.740E+2, 0.250E+2, 0.00000000E+0, + 0.00000000E+0, 0.62633800E+3, 0.740E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.65622600E+3, + 0.740E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.67963140E+3, 0.740E+2, 0.280E+2, + 0.00000000E+0, 0.00000000E+0, 0.52108220E+3, 0.740E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, + 0.52588940E+3, 0.740E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.62622030E+3, 0.740E+2, + 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.54069840E+3, 0.740E+2, 0.320E+2, 0.00000000E+0, + 0.00000000E+0, 0.45278370E+3, 0.740E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.40184290E+3, + 0.740E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.34779630E+3, 0.740E+2, 0.350E+2, + 0.00000000E+0, 0.00000000E+0, 0.29948800E+3, 0.740E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, + 0.18587683E+4, 0.740E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.15659413E+4, 0.740E+2, + 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.13478163E+4, 0.740E+2, 0.390E+2, 0.00000000E+0, + 0.00000000E+0, 0.11983202E+4, 0.740E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.10850878E+4, + 0.740E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.82786250E+3, 0.740E+2, 0.420E+2, + 0.00000000E+0, 0.00000000E+0, 0.92774070E+3, 0.740E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, + 0.69763460E+3, 0.740E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.76226600E+3, 0.740E+2, + 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.70376190E+3, 0.740E+2, 0.460E+2, 0.00000000E+0, + 0.00000000E+0, 0.58870290E+3, 0.740E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.61664100E+3, + 0.740E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.78470960E+3, 0.740E+2, 0.490E+2, + 0.00000000E+0, 0.00000000E+0, 0.71294940E+3, 0.740E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, + 0.62490100E+3, 0.740E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.57415840E+3, 0.740E+2, + 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.51383150E+3, 0.740E+2, 0.530E+2, 0.00000000E+0, + 0.00000000E+0, 0.45758530E+3, 0.740E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.22639013E+4, + 0.740E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.20087751E+4, 0.740E+2, 0.560E+2, + 0.00000000E+0, 0.00000000E+0, 0.17339129E+4, 0.740E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, + 0.74068630E+3, 0.740E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.17694139E+4, 0.740E+2, + 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.16938988E+4, 0.740E+2, 0.600E+2, 0.00000000E+0, + 0.00000000E+0, 0.16500004E+4, 0.740E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.16097798E+4, + 0.740E+2, 0.620E+2, 0.00000000E+0, 0.00000000E+0, 0.15740661E+4, 0.740E+2, 0.630E+2, + 0.00000000E+0, 0.00000000E+0, 0.12144448E+4, 0.740E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, + 0.14078390E+4, 0.740E+2, 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.13533433E+4, 0.740E+2, + 0.660E+2, 0.00000000E+0, 0.00000000E+0, 0.14132821E+4, 0.740E+2, 0.670E+2, 0.00000000E+0, + 0.00000000E+0, 0.13825761E+4, 0.740E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.13545779E+4, + 0.740E+2, 0.690E+2, 0.00000000E+0, 0.00000000E+0, 0.13397711E+4, 0.740E+2, 0.700E+2, + 0.00000000E+0, 0.00000000E+0, 0.11143056E+4, 0.740E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, + 0.10763807E+4, 0.740E+2, 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.97195240E+3, 0.740E+2, + 0.730E+2, 0.00000000E+0, 0.00000000E+0, 0.81436220E+3, 0.740E+2, 0.740E+2, 0.00000000E+0, + 0.00000000E+0, 0.47481400E+2, 0.750E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.30549200E+2, + 0.750E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.84030290E+3, 0.750E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.45686870E+3, 0.750E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.29769360E+3, 0.750E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.19640730E+3, 0.750E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.13504060E+3, 0.750E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.10106690E+3, 0.750E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.75833700E+2, + 0.750E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.57897000E+2, 0.750E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.10011833E+4, 0.750E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.73565530E+3, 0.750E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.66653080E+3, 0.750E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.51321450E+3, 0.750E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.39266040E+3, 0.750E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.32200220E+3, + 0.750E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.26008050E+3, 0.750E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.21074970E+3, 0.750E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.16563829E+4, 0.750E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.13172961E+4, 0.750E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.10793168E+4, 0.750E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.10345489E+4, 0.750E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.94314230E+3, + 0.750E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.74238390E+3, 0.750E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.80678450E+3, 0.750E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.63220880E+3, 0.750E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.66388710E+3, 0.750E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.68701430E+3, 0.750E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.52648590E+3, 0.750E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.53299620E+3, + 0.750E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.63416620E+3, 0.750E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.54932810E+3, 0.750E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.46115310E+3, 0.750E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.40981080E+3, 0.750E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.35513780E+3, 0.750E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.30613060E+3, 0.750E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.18506131E+4, + 0.750E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.15716863E+4, 0.750E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.13568533E+4, 0.750E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.12084737E+4, 0.750E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.10954282E+4, 0.750E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.83707080E+3, 0.750E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.93753010E+3, 0.750E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.70623580E+3, + 0.750E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.77195670E+3, 0.750E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.71318460E+3, 0.750E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, + 0.59599800E+3, 0.750E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.62541990E+3, 0.750E+2, + 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.79423010E+3, 0.750E+2, 0.490E+2, 0.00000000E+0, + 0.00000000E+0, 0.72367260E+3, 0.750E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.63581610E+3, + 0.750E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.58492700E+3, 0.750E+2, 0.520E+2, + 0.00000000E+0, 0.00000000E+0, 0.52412750E+3, 0.750E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, + 0.46726420E+3, 0.750E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.22535037E+4, 0.750E+2, + 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.20134740E+4, 0.750E+2, 0.560E+2, 0.00000000E+0, + 0.00000000E+0, 0.17433791E+4, 0.750E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.75313690E+3, + 0.750E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.17753357E+4, 0.750E+2, 0.590E+2, + 0.00000000E+0, 0.00000000E+0, 0.17005706E+4, 0.750E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, + 0.16567768E+4, 0.750E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.16166266E+4, 0.750E+2, + 0.620E+2, 0.00000000E+0, 0.00000000E+0, 0.15809835E+4, 0.750E+2, 0.630E+2, 0.00000000E+0, + 0.00000000E+0, 0.12234224E+4, 0.750E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.14105904E+4, + 0.750E+2, 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.13567115E+4, 0.750E+2, 0.660E+2, + 0.00000000E+0, 0.00000000E+0, 0.14207081E+4, 0.750E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, + 0.13899934E+4, 0.750E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.13620334E+4, 0.750E+2, + 0.690E+2, 0.00000000E+0, 0.00000000E+0, 0.13469951E+4, 0.750E+2, 0.700E+2, 0.00000000E+0, + 0.00000000E+0, 0.11225706E+4, 0.750E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.10876931E+4, + 0.750E+2, 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.98375910E+3, 0.750E+2, 0.730E+2, + 0.00000000E+0, 0.00000000E+0, 0.82496150E+3, 0.750E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, + 0.83633100E+3, 0.750E+2, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.43502700E+2, 0.760E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.28354600E+2, 0.760E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.73192340E+3, 0.760E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.40716460E+3, + 0.760E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.26873040E+3, 0.760E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.17905630E+3, 0.760E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.12405100E+3, 0.760E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.93359700E+2, 0.760E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.70395400E+2, 0.760E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.53964200E+2, 0.760E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.87335890E+3, + 0.760E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.65307500E+3, 0.760E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.59556280E+3, 0.760E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.46268400E+3, 0.760E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.35670880E+3, 0.760E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.29400210E+3, 0.760E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.23864150E+3, 0.760E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.19423140E+3, + 0.760E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.14396620E+4, 0.760E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.11612618E+4, 0.760E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.95445330E+3, 0.760E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.91746900E+3, 0.760E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.83784550E+3, 0.760E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.65982040E+3, 0.760E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.71850590E+3, + 0.760E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.56350590E+3, 0.760E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.59375330E+3, 0.760E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.61335130E+3, 0.760E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.47025530E+3, 0.760E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.47853750E+3, 0.760E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.56822510E+3, 0.760E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.49561460E+3, + 0.760E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.41868920E+3, 0.760E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.37355900E+3, 0.760E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.32506940E+3, 0.760E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.28130190E+3, 0.760E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.16103754E+4, 0.760E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.13848254E+4, 0.760E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.12021044E+4, + 0.760E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.10743491E+4, 0.760E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.97608420E+3, 0.760E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.74894180E+3, 0.760E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, 0.83752750E+3, 0.760E+2, + 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.63378860E+3, 0.760E+2, 0.440E+2, 0.00000000E+0, + 0.00000000E+0, 0.69267540E+3, 0.760E+2, 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.64089680E+3, + 0.760E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.53528690E+3, 0.760E+2, 0.470E+2, + 0.00000000E+0, 0.00000000E+0, 0.56312050E+3, 0.760E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, + 0.71169730E+3, 0.760E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, 0.65211350E+3, 0.760E+2, + 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.57610750E+3, 0.760E+2, 0.510E+2, 0.00000000E+0, + 0.00000000E+0, 0.53178230E+3, 0.760E+2, 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.47825570E+3, + 0.760E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.42787240E+3, 0.760E+2, 0.540E+2, + 0.00000000E+0, 0.00000000E+0, 0.19610192E+4, 0.760E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, + 0.17707984E+4, 0.760E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, 0.15416747E+4, 0.760E+2, + 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.68178680E+3, 0.760E+2, 0.580E+2, 0.00000000E+0, + 0.27991000E+1, 0.15643082E+4, 0.760E+2, 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.14998732E+4, + 0.760E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.14616315E+4, 0.760E+2, 0.610E+2, + 0.00000000E+0, 0.00000000E+0, 0.14265281E+4, 0.760E+2, 0.620E+2, 0.00000000E+0, 0.00000000E+0, + 0.13953763E+4, 0.760E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, 0.10864242E+4, 0.760E+2, + 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.12413205E+4, 0.760E+2, 0.650E+2, 0.00000000E+0, + 0.00000000E+0, 0.11950783E+4, 0.760E+2, 0.660E+2, 0.00000000E+0, 0.00000000E+0, 0.12556728E+4, + 0.760E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.12287111E+4, 0.760E+2, 0.680E+2, + 0.00000000E+0, 0.00000000E+0, 0.12042523E+4, 0.760E+2, 0.690E+2, 0.00000000E+0, 0.00000000E+0, + 0.11906528E+4, 0.760E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, 0.99636440E+3, 0.760E+2, + 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.97080130E+3, 0.760E+2, 0.720E+2, 0.00000000E+0, + 0.00000000E+0, 0.88109380E+3, 0.760E+2, 0.730E+2, 0.00000000E+0, 0.00000000E+0, 0.74095590E+3, + 0.760E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, 0.75215710E+3, 0.760E+2, 0.750E+2, + 0.00000000E+0, 0.00000000E+0, 0.67852780E+3, 0.760E+2, 0.760E+2, 0.00000000E+0, 0.00000000E+0, + 0.40192800E+2, 0.770E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.26493600E+2, 0.770E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.64922250E+3, 0.770E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.36768190E+3, 0.770E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.24523810E+3, + 0.770E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.16475860E+3, 0.770E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.11488740E+3, 0.770E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.86879300E+2, 0.770E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.65790400E+2, 0.770E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.50615900E+2, 0.770E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.77563370E+3, 0.770E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.58794870E+3, + 0.770E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.53899920E+3, 0.770E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.42178390E+3, 0.770E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.32723040E+3, 0.770E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.27085510E+3, 0.770E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.22077630E+3, 0.770E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.18037110E+3, 0.770E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.12755198E+4, + 0.770E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.10398993E+4, 0.770E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.85678860E+3, 0.770E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.82551250E+3, 0.770E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.75491930E+3, 0.770E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.59487280E+3, 0.770E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.64870850E+3, 0.770E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.50921810E+3, + 0.770E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.53789460E+3, 0.770E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.55484790E+3, 0.770E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.42567880E+3, 0.770E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.43487920E+3, 0.770E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.51550510E+3, 0.770E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.45212560E+3, 0.770E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.38392650E+3, + 0.770E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.34368330E+3, 0.770E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.30011780E+3, 0.770E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.26056720E+3, 0.770E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.14282493E+4, 0.770E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.12397351E+4, 0.770E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.10808340E+4, 0.770E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.96864880E+3, + 0.770E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.88171010E+3, 0.770E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.67887180E+3, 0.770E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.75818340E+3, 0.770E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.57594520E+3, 0.770E+2, + 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.62929090E+3, 0.770E+2, 0.450E+2, 0.00000000E+0, + 0.00000000E+0, 0.58296220E+3, 0.770E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.48681310E+3, + 0.770E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.51303760E+3, 0.770E+2, 0.480E+2, + 0.00000000E+0, 0.00000000E+0, 0.64586290E+3, 0.770E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, + 0.59440490E+3, 0.770E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.52746810E+3, 0.770E+2, + 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.48823190E+3, 0.770E+2, 0.520E+2, 0.00000000E+0, + 0.00000000E+0, 0.44042470E+3, 0.770E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.39518890E+3, + 0.770E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.17394992E+4, 0.770E+2, 0.550E+2, + 0.00000000E+0, 0.00000000E+0, 0.15831333E+4, 0.770E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, + 0.13842225E+4, 0.770E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.62381140E+3, 0.770E+2, + 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.14006813E+4, 0.770E+2, 0.590E+2, 0.00000000E+0, + 0.00000000E+0, 0.13439514E+4, 0.770E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.13099454E+4, + 0.770E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.12786986E+4, 0.770E+2, 0.620E+2, + 0.00000000E+0, 0.00000000E+0, 0.12509767E+4, 0.770E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, + 0.97887040E+3, 0.770E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.11106969E+4, 0.770E+2, + 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.10701912E+4, 0.770E+2, 0.660E+2, 0.00000000E+0, + 0.00000000E+0, 0.11269388E+4, 0.770E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.11028614E+4, + 0.770E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.10810811E+4, 0.770E+2, 0.690E+2, + 0.00000000E+0, 0.00000000E+0, 0.10686460E+4, 0.770E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, + 0.89729150E+3, 0.770E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.87805750E+3, 0.770E+2, + 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.79916860E+3, 0.770E+2, 0.730E+2, 0.00000000E+0, + 0.00000000E+0, 0.67370750E+3, 0.770E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, 0.68458550E+3, + 0.770E+2, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.61911480E+3, 0.770E+2, 0.760E+2, + 0.00000000E+0, 0.00000000E+0, 0.56606600E+3, 0.770E+2, 0.770E+2, 0.00000000E+0, 0.00000000E+0, + 0.33737400E+2, 0.780E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.22655000E+2, 0.780E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.52329220E+3, 0.780E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.30016240E+3, 0.780E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.20254080E+3, + 0.780E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.13757620E+3, 0.780E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.96865800E+2, 0.780E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.73818300E+2, 0.780E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.56305300E+2, 0.780E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.43593000E+2, 0.780E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.62596250E+3, 0.780E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.47885350E+3, + 0.780E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.44120140E+3, 0.780E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.34788170E+3, 0.780E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.27198720E+3, 0.780E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.22647100E+3, 0.780E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.18574640E+3, 0.780E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.15265670E+3, 0.780E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.10299899E+4, + 0.780E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.84443870E+3, 0.780E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.69692720E+3, 0.780E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.67305270E+3, 0.780E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.61630660E+3, 0.780E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.48652160E+3, 0.780E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.53065270E+3, 0.780E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.41743140E+3, + 0.780E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.44140210E+3, 0.780E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.45462950E+3, 0.780E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.34958030E+3, 0.780E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.35801260E+3, 0.780E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.42342920E+3, 0.780E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.37342980E+3, 0.780E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.31904090E+3, + 0.780E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.28687030E+3, 0.780E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.25174820E+3, 0.780E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.21965520E+3, 0.780E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.11547638E+4, 0.780E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.10070623E+4, 0.780E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.88099930E+3, 0.780E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.79155440E+3, + 0.780E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.72193400E+3, 0.780E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.55823890E+3, 0.780E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.62242220E+3, 0.780E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.47507150E+3, 0.780E+2, + 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.51845950E+3, 0.780E+2, 0.450E+2, 0.00000000E+0, + 0.00000000E+0, 0.48093890E+3, 0.780E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.40219150E+3, + 0.780E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.42403900E+3, 0.780E+2, 0.480E+2, + 0.00000000E+0, 0.00000000E+0, 0.53144420E+3, 0.780E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, + 0.49101090E+3, 0.780E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.43782090E+3, 0.780E+2, + 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.40661850E+3, 0.780E+2, 0.520E+2, 0.00000000E+0, + 0.00000000E+0, 0.36825920E+3, 0.780E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.33179040E+3, + 0.780E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.14071724E+4, 0.780E+2, 0.550E+2, + 0.00000000E+0, 0.00000000E+0, 0.12854322E+4, 0.780E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, + 0.11275157E+4, 0.780E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.51768570E+3, 0.780E+2, + 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.11388994E+4, 0.780E+2, 0.590E+2, 0.00000000E+0, + 0.00000000E+0, 0.10932462E+4, 0.780E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.10657050E+4, + 0.780E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.10403742E+4, 0.780E+2, 0.620E+2, + 0.00000000E+0, 0.00000000E+0, 0.10179032E+4, 0.780E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, + 0.80035340E+3, 0.780E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.90395940E+3, 0.780E+2, + 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.87158450E+3, 0.780E+2, 0.660E+2, 0.00000000E+0, + 0.00000000E+0, 0.91760410E+3, 0.780E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.89802720E+3, + 0.780E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.88036430E+3, 0.780E+2, 0.690E+2, + 0.00000000E+0, 0.00000000E+0, 0.87003670E+3, 0.780E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, + 0.73291850E+3, 0.780E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.71957520E+3, 0.780E+2, + 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.65682120E+3, 0.780E+2, 0.730E+2, 0.00000000E+0, + 0.00000000E+0, 0.55562970E+3, 0.780E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, 0.56502640E+3, + 0.780E+2, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.51242690E+3, 0.780E+2, 0.760E+2, + 0.00000000E+0, 0.00000000E+0, 0.46966640E+3, 0.780E+2, 0.770E+2, 0.00000000E+0, 0.00000000E+0, + 0.39114480E+3, 0.780E+2, 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.31643100E+2, 0.790E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.21405700E+2, 0.790E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.48271200E+3, 0.790E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.27848740E+3, + 0.790E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.18878590E+3, 0.790E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.12878430E+3, 0.790E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.91021000E+2, 0.790E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.69577200E+2, 0.790E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.53225800E+2, 0.790E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.41316600E+2, 0.790E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.57775500E+3, + 0.790E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.44384910E+3, 0.790E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.40978640E+3, 0.790E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.32409250E+3, 0.790E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.25414960E+3, 0.790E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.21210390E+3, 0.790E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.17438080E+3, 0.790E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.14364860E+3, + 0.790E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.95062180E+3, 0.790E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.78160440E+3, 0.790E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.64557500E+3, 0.790E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.62406930E+3, 0.790E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.57177460E+3, 0.790E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.45167990E+3, 0.790E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.49272680E+3, + 0.790E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.38791960E+3, 0.790E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.41040680E+3, 0.790E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.42244780E+3, 0.790E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.32511980E+3, 0.790E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.33331770E+3, 0.790E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.39382270E+3, 0.790E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.34809220E+3, + 0.790E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.29810130E+3, 0.790E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.26850000E+3, 0.790E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.23607650E+3, 0.790E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.20637560E+3, 0.790E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.10663289E+4, 0.790E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.93220550E+3, 0.790E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.81674650E+3, + 0.790E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.73461520E+3, 0.790E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.67055170E+3, 0.790E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.51941000E+3, 0.790E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, 0.57874610E+3, 0.790E+2, + 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.44259210E+3, 0.790E+2, 0.440E+2, 0.00000000E+0, + 0.00000000E+0, 0.48280890E+3, 0.790E+2, 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.44812160E+3, + 0.790E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.37494860E+3, 0.790E+2, 0.470E+2, + 0.00000000E+0, 0.00000000E+0, 0.39541490E+3, 0.790E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, + 0.49465360E+3, 0.790E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, 0.45775290E+3, 0.790E+2, + 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.40894270E+3, 0.790E+2, 0.510E+2, 0.00000000E+0, + 0.00000000E+0, 0.38029110E+3, 0.790E+2, 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.34494080E+3, + 0.790E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.31127000E+3, 0.790E+2, 0.540E+2, + 0.00000000E+0, 0.00000000E+0, 0.12995975E+4, 0.790E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, + 0.11895405E+4, 0.790E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, 0.10448996E+4, 0.790E+2, + 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.48348310E+3, 0.790E+2, 0.580E+2, 0.00000000E+0, + 0.27991000E+1, 0.10546339E+4, 0.790E+2, 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.10125735E+4, + 0.790E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.98712160E+3, 0.790E+2, 0.610E+2, + 0.00000000E+0, 0.00000000E+0, 0.96370210E+3, 0.790E+2, 0.620E+2, 0.00000000E+0, 0.00000000E+0, + 0.94292740E+3, 0.790E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, 0.74291920E+3, 0.790E+2, + 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.83729210E+3, 0.790E+2, 0.650E+2, 0.00000000E+0, + 0.00000000E+0, 0.80754210E+3, 0.790E+2, 0.660E+2, 0.00000000E+0, 0.00000000E+0, 0.85029540E+3, + 0.790E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.83217180E+3, 0.790E+2, 0.680E+2, + 0.00000000E+0, 0.00000000E+0, 0.81583760E+3, 0.790E+2, 0.690E+2, 0.00000000E+0, 0.00000000E+0, + 0.80619030E+3, 0.790E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, 0.68007310E+3, 0.790E+2, + 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.66862000E+3, 0.790E+2, 0.720E+2, 0.00000000E+0, + 0.00000000E+0, 0.61103860E+3, 0.790E+2, 0.730E+2, 0.00000000E+0, 0.00000000E+0, 0.51760830E+3, + 0.790E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, 0.52653700E+3, 0.790E+2, 0.750E+2, + 0.00000000E+0, 0.00000000E+0, 0.47806720E+3, 0.790E+2, 0.760E+2, 0.00000000E+0, 0.00000000E+0, + 0.43860830E+3, 0.790E+2, 0.770E+2, 0.00000000E+0, 0.00000000E+0, 0.36582470E+3, 0.790E+2, + 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.34235260E+3, 0.790E+2, 0.790E+2, 0.00000000E+0, + 0.00000000E+0, 0.32647500E+2, 0.800E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.22083700E+2, + 0.800E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.48740200E+3, 0.800E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.28506170E+3, 0.800E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.19416150E+3, 0.800E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.13273170E+3, 0.800E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.93883600E+2, 0.800E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.71776000E+2, 0.800E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.54902300E+2, + 0.800E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.42608500E+2, 0.800E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.58379600E+3, 0.800E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.45335960E+3, 0.800E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.41983840E+3, 0.800E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.33321670E+3, 0.800E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.26185840E+3, 0.800E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.21871850E+3, + 0.800E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.17991240E+3, 0.800E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.14823250E+3, 0.800E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.95736170E+3, 0.800E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.79465850E+3, 0.800E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.65759170E+3, 0.800E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.63652100E+3, 0.800E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.58366570E+3, + 0.800E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.46085090E+3, 0.800E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.50355400E+3, 0.800E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.39629990E+3, 0.800E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.42025520E+3, 0.800E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.43227410E+3, 0.800E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.33243400E+3, 0.800E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.34187100E+3, + 0.800E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.40370590E+3, 0.800E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.35784550E+3, 0.800E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.30703710E+3, 0.800E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.27676970E+3, 0.800E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.24349600E+3, 0.800E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.21293560E+3, 0.800E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.10744128E+4, + 0.800E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.94720110E+3, 0.800E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.83242220E+3, 0.800E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.74998240E+3, 0.800E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.68523850E+3, 0.800E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.53145620E+3, 0.800E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.59192160E+3, 0.800E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.45328020E+3, + 0.800E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.49471860E+3, 0.800E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.45942820E+3, 0.800E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, + 0.38395180E+3, 0.800E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.40566070E+3, 0.800E+2, + 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.50664510E+3, 0.800E+2, 0.490E+2, 0.00000000E+0, + 0.00000000E+0, 0.47008500E+3, 0.800E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.42079320E+3, + 0.800E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.39167400E+3, 0.800E+2, 0.520E+2, + 0.00000000E+0, 0.00000000E+0, 0.35554970E+3, 0.800E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, + 0.32102510E+3, 0.800E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.13092921E+4, 0.800E+2, + 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.12070341E+4, 0.800E+2, 0.560E+2, 0.00000000E+0, + 0.00000000E+0, 0.10636276E+4, 0.800E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.49715300E+3, + 0.800E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.10712093E+4, 0.800E+2, 0.590E+2, + 0.00000000E+0, 0.00000000E+0, 0.10290835E+4, 0.800E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, + 0.10033846E+4, 0.800E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.97972320E+3, 0.800E+2, + 0.620E+2, 0.00000000E+0, 0.00000000E+0, 0.95873970E+3, 0.800E+2, 0.630E+2, 0.00000000E+0, + 0.00000000E+0, 0.75756310E+3, 0.800E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.84922660E+3, + 0.800E+2, 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.81952610E+3, 0.800E+2, 0.660E+2, + 0.00000000E+0, 0.00000000E+0, 0.86529630E+3, 0.800E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, + 0.84694850E+3, 0.800E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.83044190E+3, 0.800E+2, + 0.690E+2, 0.00000000E+0, 0.00000000E+0, 0.82053560E+3, 0.800E+2, 0.700E+2, 0.00000000E+0, + 0.00000000E+0, 0.69354790E+3, 0.800E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.68391950E+3, + 0.800E+2, 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.62592010E+3, 0.800E+2, 0.730E+2, + 0.00000000E+0, 0.00000000E+0, 0.53051690E+3, 0.800E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, + 0.54005040E+3, 0.800E+2, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.49085310E+3, 0.800E+2, + 0.760E+2, 0.00000000E+0, 0.00000000E+0, 0.45068210E+3, 0.800E+2, 0.770E+2, 0.00000000E+0, + 0.00000000E+0, 0.37600960E+3, 0.800E+2, 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.35193500E+3, + 0.800E+2, 0.790E+2, 0.00000000E+0, 0.00000000E+0, 0.36207550E+3, 0.800E+2, 0.800E+2, + 0.00000000E+0, 0.00000000E+0, 0.45565900E+2, 0.810E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, + 0.29383200E+2, 0.810E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.84156200E+3, 0.810E+2, + 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.44509900E+3, 0.810E+2, 0.400E+1, 0.00000000E+0, + 0.00000000E+0, 0.28743460E+3, 0.810E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.18891370E+3, + 0.810E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.12977590E+3, 0.810E+2, 0.700E+1, + 0.00000000E+0, 0.00000000E+0, 0.97188700E+2, 0.810E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, + 0.73035300E+2, 0.810E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.55878200E+2, 0.810E+2, + 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.10013499E+4, 0.810E+2, 0.110E+2, 0.00000000E+0, + 0.00000000E+0, 0.71984280E+3, 0.810E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.64850370E+3, + 0.810E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.49588920E+3, 0.810E+2, 0.140E+2, + 0.00000000E+0, 0.00000000E+0, 0.37786060E+3, 0.810E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, + 0.30940570E+3, 0.810E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.24971520E+3, 0.810E+2, + 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.20236390E+3, 0.810E+2, 0.180E+2, 0.00000000E+0, + 0.00000000E+0, 0.16699732E+4, 0.810E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.13012325E+4, + 0.810E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.10621257E+4, 0.810E+2, 0.210E+2, + 0.00000000E+0, 0.00000000E+0, 0.10156676E+4, 0.810E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, + 0.92450540E+3, 0.810E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.72875260E+3, 0.810E+2, + 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.78917040E+3, 0.810E+2, 0.250E+2, 0.00000000E+0, + 0.00000000E+0, 0.61912140E+3, 0.810E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.64688450E+3, + 0.810E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.67034360E+3, 0.810E+2, 0.280E+2, + 0.00000000E+0, 0.00000000E+0, 0.51478030E+3, 0.810E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, + 0.51777130E+3, 0.810E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.61653920E+3, 0.810E+2, + 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.53101480E+3, 0.810E+2, 0.320E+2, 0.00000000E+0, + 0.00000000E+0, 0.44413160E+3, 0.810E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.39408930E+3, + 0.810E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.34115420E+3, 0.810E+2, 0.350E+2, + 0.00000000E+0, 0.00000000E+0, 0.29394640E+3, 0.810E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, + 0.18646164E+4, 0.810E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.15547036E+4, 0.810E+2, + 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.13341432E+4, 0.810E+2, 0.390E+2, 0.00000000E+0, + 0.00000000E+0, 0.11843558E+4, 0.810E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.10716858E+4, + 0.810E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.81713880E+3, 0.810E+2, 0.420E+2, + 0.00000000E+0, 0.00000000E+0, 0.91594930E+3, 0.810E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, + 0.68833610E+3, 0.810E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.75141170E+3, 0.810E+2, + 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.69349420E+3, 0.810E+2, 0.460E+2, 0.00000000E+0, + 0.00000000E+0, 0.58127400E+3, 0.810E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.60745600E+3, + 0.810E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.77388330E+3, 0.810E+2, 0.490E+2, + 0.00000000E+0, 0.00000000E+0, 0.70133540E+3, 0.810E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, + 0.61379650E+3, 0.810E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.56366330E+3, 0.810E+2, + 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.50431850E+3, 0.810E+2, 0.530E+2, 0.00000000E+0, + 0.00000000E+0, 0.44915730E+3, 0.810E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.22724078E+4, + 0.810E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.19977665E+4, 0.810E+2, 0.560E+2, + 0.00000000E+0, 0.00000000E+0, 0.17187930E+4, 0.810E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, + 0.72802070E+3, 0.810E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.17584731E+4, 0.810E+2, + 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.16821281E+4, 0.810E+2, 0.600E+2, 0.00000000E+0, + 0.00000000E+0, 0.16382173E+4, 0.810E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.15980083E+4, + 0.810E+2, 0.620E+2, 0.00000000E+0, 0.00000000E+0, 0.15622939E+4, 0.810E+2, 0.630E+2, + 0.00000000E+0, 0.00000000E+0, 0.12025229E+4, 0.810E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, + 0.14026627E+4, 0.810E+2, 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.13479037E+4, 0.810E+2, + 0.660E+2, 0.00000000E+0, 0.00000000E+0, 0.14013832E+4, 0.810E+2, 0.670E+2, 0.00000000E+0, + 0.00000000E+0, 0.13707449E+4, 0.810E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.13427654E+4, + 0.810E+2, 0.690E+2, 0.00000000E+0, 0.00000000E+0, 0.13281907E+4, 0.810E+2, 0.700E+2, + 0.00000000E+0, 0.00000000E+0, 0.11030932E+4, 0.810E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, + 0.10619960E+4, 0.810E+2, 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.95783300E+3, 0.810E+2, + 0.730E+2, 0.00000000E+0, 0.00000000E+0, 0.80262850E+3, 0.810E+2, 0.740E+2, 0.00000000E+0, + 0.00000000E+0, 0.81249710E+3, 0.810E+2, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.72924020E+3, + 0.810E+2, 0.760E+2, 0.00000000E+0, 0.00000000E+0, 0.66279090E+3, 0.810E+2, 0.770E+2, + 0.00000000E+0, 0.00000000E+0, 0.54691720E+3, 0.810E+2, 0.780E+2, 0.00000000E+0, 0.00000000E+0, + 0.50961460E+3, 0.810E+2, 0.790E+2, 0.00000000E+0, 0.00000000E+0, 0.52190910E+3, 0.810E+2, + 0.800E+2, 0.00000000E+0, 0.00000000E+0, 0.79223780E+3, 0.810E+2, 0.810E+2, 0.00000000E+0, + 0.00000000E+0, 0.45178600E+2, 0.820E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.29396300E+2, + 0.820E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.77049850E+3, 0.820E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.42598770E+3, 0.820E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.28017140E+3, 0.820E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.18622350E+3, 0.820E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.12882430E+3, 0.820E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.96880100E+2, 0.820E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.73028500E+2, + 0.820E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.55990900E+2, 0.820E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.91912570E+3, 0.820E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.68410110E+3, 0.820E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.62271340E+3, 0.820E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.48258810E+3, 0.820E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.37129390E+3, 0.820E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.30563890E+3, + 0.820E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.24781410E+3, 0.820E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.20153300E+3, 0.820E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.15164193E+4, 0.820E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.12187009E+4, 0.820E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.10008602E+4, 0.820E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.96137180E+3, 0.820E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.87756550E+3, + 0.820E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.69108340E+3, 0.820E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.75211560E+3, 0.820E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.58980850E+3, 0.820E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.62087440E+3, 0.820E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.64167640E+3, 0.820E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.49199760E+3, 0.820E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.49993220E+3, + 0.820E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.59373850E+3, 0.820E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.51689320E+3, 0.820E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.43592810E+3, 0.820E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.38853730E+3, 0.820E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.33776830E+3, 0.820E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.29204720E+3, 0.820E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.16956909E+4, + 0.820E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.14534745E+4, 0.820E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.12598691E+4, 0.820E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.11249617E+4, 0.820E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.10214733E+4, 0.820E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.78299060E+3, 0.820E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.87595820E+3, 0.820E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.66216750E+3, + 0.820E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.72370460E+3, 0.820E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.66938820E+3, 0.820E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, + 0.55927100E+3, 0.820E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.58793680E+3, 0.820E+2, + 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.74387970E+3, 0.820E+2, 0.490E+2, 0.00000000E+0, + 0.00000000E+0, 0.68057520E+3, 0.820E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.60037140E+3, + 0.820E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.55368260E+3, 0.820E+2, 0.520E+2, + 0.00000000E+0, 0.00000000E+0, 0.49748720E+3, 0.820E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, + 0.44470070E+3, 0.820E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.20646687E+4, 0.820E+2, + 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.18594085E+4, 0.820E+2, 0.560E+2, 0.00000000E+0, + 0.00000000E+0, 0.16164677E+4, 0.820E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.71062890E+3, + 0.820E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.16419885E+4, 0.820E+2, 0.590E+2, + 0.00000000E+0, 0.00000000E+0, 0.15739763E+4, 0.820E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, + 0.15337469E+4, 0.820E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.14968291E+4, 0.820E+2, + 0.620E+2, 0.00000000E+0, 0.00000000E+0, 0.14640624E+4, 0.820E+2, 0.630E+2, 0.00000000E+0, + 0.00000000E+0, 0.11380979E+4, 0.820E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.13034316E+4, + 0.820E+2, 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.12545335E+4, 0.820E+2, 0.660E+2, + 0.00000000E+0, 0.00000000E+0, 0.13170177E+4, 0.820E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, + 0.12886907E+4, 0.820E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.12629662E+4, 0.820E+2, + 0.690E+2, 0.00000000E+0, 0.00000000E+0, 0.12487891E+4, 0.820E+2, 0.700E+2, 0.00000000E+0, + 0.00000000E+0, 0.10439034E+4, 0.820E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.10154887E+4, + 0.820E+2, 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.92083050E+3, 0.820E+2, 0.730E+2, + 0.00000000E+0, 0.00000000E+0, 0.77385260E+3, 0.820E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, + 0.78529450E+3, 0.820E+2, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.70790090E+3, 0.820E+2, + 0.760E+2, 0.00000000E+0, 0.00000000E+0, 0.64554700E+3, 0.820E+2, 0.770E+2, 0.00000000E+0, + 0.00000000E+0, 0.53402070E+3, 0.820E+2, 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.49813010E+3, + 0.820E+2, 0.790E+2, 0.00000000E+0, 0.00000000E+0, 0.51131450E+3, 0.820E+2, 0.800E+2, + 0.00000000E+0, 0.00000000E+0, 0.76196480E+3, 0.820E+2, 0.810E+2, 0.00000000E+0, 0.00000000E+0, + 0.73881560E+3, 0.820E+2, 0.820E+2, 0.00000000E+0, 0.00000000E+0, 0.42241900E+2, 0.830E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.27932900E+2, 0.830E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.66152780E+3, 0.830E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.38103070E+3, + 0.830E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.25605370E+3, 0.830E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.17278310E+3, 0.830E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.12079930E+3, 0.830E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.91493400E+2, 0.830E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.69368900E+2, 0.830E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.53420400E+2, 0.830E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.79108680E+3, + 0.830E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.60760080E+3, 0.830E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.55943360E+3, 0.830E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.44013430E+3, 0.830E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.34277880E+3, 0.830E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.28429480E+3, 0.830E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.23212190E+3, 0.830E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.18987560E+3, + 0.830E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.12966253E+4, 0.830E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.10686331E+4, 0.830E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.88251530E+3, 0.830E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.85188550E+3, 0.830E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.77993360E+3, 0.830E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.61445090E+3, 0.830E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.67130550E+3, + 0.830E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.52693210E+3, 0.830E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.55817400E+3, 0.830E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.57514870E+3, 0.830E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.44105510E+3, 0.830E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.45236780E+3, 0.830E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.53570130E+3, 0.830E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.47183760E+3, + 0.830E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.40199200E+3, 0.830E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.36047350E+3, 0.830E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.31527740E+3, 0.830E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.27407550E+3, 0.830E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.14529418E+4, 0.830E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.12732370E+4, 0.830E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.11143977E+4, + 0.830E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.10010315E+4, 0.830E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.91248200E+3, 0.830E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.70407130E+3, 0.830E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, 0.78575170E+3, 0.830E+2, + 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.59827920E+3, 0.830E+2, 0.440E+2, 0.00000000E+0, + 0.00000000E+0, 0.65393370E+3, 0.830E+2, 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.60631280E+3, + 0.830E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.50575740E+3, 0.830E+2, 0.470E+2, + 0.00000000E+0, 0.00000000E+0, 0.53417140E+3, 0.830E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, + 0.67073540E+3, 0.830E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, 0.61958270E+3, 0.830E+2, + 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.55156050E+3, 0.830E+2, 0.510E+2, 0.00000000E+0, + 0.00000000E+0, 0.51139760E+3, 0.830E+2, 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.46208340E+3, + 0.830E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.41520110E+3, 0.830E+2, 0.540E+2, + 0.00000000E+0, 0.00000000E+0, 0.17696390E+4, 0.830E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, + 0.16234740E+4, 0.830E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, 0.14251223E+4, 0.830E+2, + 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.65171260E+3, 0.830E+2, 0.580E+2, 0.00000000E+0, + 0.27991000E+1, 0.14382615E+4, 0.830E+2, 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.13809451E+4, + 0.830E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.13462674E+4, 0.830E+2, 0.610E+2, + 0.00000000E+0, 0.00000000E+0, 0.13143784E+4, 0.830E+2, 0.620E+2, 0.00000000E+0, 0.00000000E+0, + 0.12860963E+4, 0.830E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, 0.10103860E+4, 0.830E+2, + 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.11390166E+4, 0.830E+2, 0.650E+2, 0.00000000E+0, + 0.00000000E+0, 0.10983110E+4, 0.830E+2, 0.660E+2, 0.00000000E+0, 0.00000000E+0, 0.11597774E+4, + 0.830E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.11351424E+4, 0.830E+2, 0.680E+2, + 0.00000000E+0, 0.00000000E+0, 0.11129109E+4, 0.830E+2, 0.690E+2, 0.00000000E+0, 0.00000000E+0, + 0.10999410E+4, 0.830E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, 0.92612910E+3, 0.830E+2, + 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.90981540E+3, 0.830E+2, 0.720E+2, 0.00000000E+0, + 0.00000000E+0, 0.82982850E+3, 0.830E+2, 0.730E+2, 0.00000000E+0, 0.00000000E+0, 0.70043950E+3, + 0.830E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, 0.71241700E+3, 0.830E+2, 0.750E+2, + 0.00000000E+0, 0.00000000E+0, 0.64537650E+3, 0.830E+2, 0.760E+2, 0.00000000E+0, 0.00000000E+0, + 0.59085050E+3, 0.830E+2, 0.770E+2, 0.00000000E+0, 0.00000000E+0, 0.49072340E+3, 0.830E+2, + 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.45847260E+3, 0.830E+2, 0.790E+2, 0.00000000E+0, + 0.00000000E+0, 0.47152310E+3, 0.830E+2, 0.800E+2, 0.00000000E+0, 0.00000000E+0, 0.68856550E+3, + 0.830E+2, 0.810E+2, 0.00000000E+0, 0.00000000E+0, 0.67269040E+3, 0.830E+2, 0.820E+2, + 0.00000000E+0, 0.00000000E+0, 0.61752960E+3, 0.830E+2, 0.830E+2, 0.00000000E+0, 0.00000000E+0, + 0.40710600E+2, 0.840E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.27211800E+2, 0.840E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.60731510E+3, 0.840E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.35746030E+3, 0.840E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.24330570E+3, + 0.840E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.16573270E+3, 0.840E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.11666150E+3, 0.840E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.88773600E+2, 0.840E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.67567200E+2, 0.840E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.52188100E+2, 0.840E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.72726310E+3, 0.840E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.56780720E+3, + 0.840E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.52626000E+3, 0.840E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.41768440E+3, 0.840E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.32771360E+3, 0.840E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.27309950E+3, 0.840E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.22398500E+3, 0.840E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.18392230E+3, 0.840E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.11891902E+4, + 0.840E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.99221250E+3, 0.840E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.82178250E+3, 0.840E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.79553840E+3, 0.840E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.72956570E+3, 0.840E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.57517310E+3, 0.840E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.62948100E+3, 0.840E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.49459140E+3, + 0.840E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.52549790E+3, 0.840E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.54053270E+3, 0.840E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.41478690E+3, 0.840E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.42746160E+3, 0.840E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.50536000E+3, 0.840E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.44808220E+3, 0.840E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.38408530E+3, + 0.840E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.34572660E+3, 0.840E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.30354480E+3, 0.840E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.26479780E+3, 0.840E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.13343692E+4, 0.840E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.11818604E+4, 0.840E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.10398622E+4, 0.840E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.93720360E+3, + 0.840E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.85623980E+3, 0.840E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.66336080E+3, 0.840E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.73919570E+3, 0.840E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.56531410E+3, 0.840E+2, + 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.61769980E+3, 0.840E+2, 0.450E+2, 0.00000000E+0, + 0.00000000E+0, 0.57350990E+3, 0.840E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.47823360E+3, + 0.840E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.50616860E+3, 0.840E+2, 0.480E+2, + 0.00000000E+0, 0.00000000E+0, 0.63278330E+3, 0.840E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, + 0.58760970E+3, 0.840E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.52587280E+3, 0.840E+2, + 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.48916400E+3, 0.840E+2, 0.520E+2, 0.00000000E+0, + 0.00000000E+0, 0.44353000E+3, 0.840E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.39983350E+3, + 0.840E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.16260419E+4, 0.840E+2, 0.550E+2, + 0.00000000E+0, 0.00000000E+0, 0.15047607E+4, 0.840E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, + 0.13277397E+4, 0.840E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.62085480E+3, 0.840E+2, + 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.13354309E+4, 0.840E+2, 0.590E+2, 0.00000000E+0, + 0.00000000E+0, 0.12832336E+4, 0.840E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.12512879E+4, + 0.840E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.12218775E+4, 0.840E+2, 0.620E+2, + 0.00000000E+0, 0.00000000E+0, 0.11958046E+4, 0.840E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, + 0.94515700E+3, 0.840E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.10569864E+4, 0.840E+2, + 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.10202790E+4, 0.840E+2, 0.660E+2, 0.00000000E+0, + 0.00000000E+0, 0.10796889E+4, 0.840E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.10568831E+4, + 0.840E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.10363788E+4, 0.840E+2, 0.690E+2, + 0.00000000E+0, 0.00000000E+0, 0.10240338E+4, 0.840E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, + 0.86580300E+3, 0.840E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.85504390E+3, 0.840E+2, + 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.78248020E+3, 0.840E+2, 0.730E+2, 0.00000000E+0, + 0.00000000E+0, 0.66238200E+3, 0.840E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, 0.67449800E+3, + 0.840E+2, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.61277720E+3, 0.840E+2, 0.760E+2, + 0.00000000E+0, 0.00000000E+0, 0.56231000E+3, 0.840E+2, 0.770E+2, 0.00000000E+0, 0.00000000E+0, + 0.46825250E+3, 0.840E+2, 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.43792710E+3, 0.840E+2, + 0.790E+2, 0.00000000E+0, 0.00000000E+0, 0.45080740E+3, 0.840E+2, 0.800E+2, 0.00000000E+0, + 0.00000000E+0, 0.65074290E+3, 0.840E+2, 0.810E+2, 0.00000000E+0, 0.00000000E+0, 0.63822510E+3, + 0.840E+2, 0.820E+2, 0.00000000E+0, 0.00000000E+0, 0.58861880E+3, 0.840E+2, 0.830E+2, + 0.00000000E+0, 0.00000000E+0, 0.56260110E+3, 0.840E+2, 0.840E+2, 0.00000000E+0, 0.00000000E+0, + 0.38046800E+2, 0.850E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.25807100E+2, 0.850E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.53565210E+3, 0.850E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.32315400E+3, 0.850E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.22339710E+3, + 0.850E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.15398830E+3, 0.850E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.10936180E+3, 0.850E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.83743700E+2, 0.850E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.64079700E+2, 0.850E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.49704300E+2, 0.850E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.64255990E+3, 0.850E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.51104720E+3, + 0.850E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.47738160E+3, 0.850E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.38289140E+3, 0.850E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.30317170E+3, 0.850E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.25418990E+3, 0.850E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.20969510E+3, 0.850E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.17306680E+3, 0.850E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.10486754E+4, + 0.850E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.88679380E+3, 0.850E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.73687680E+3, 0.850E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.71582420E+3, 0.850E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.65777000E+3, 0.850E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.51922800E+3, 0.850E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.56918500E+3, 0.850E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.44794120E+3, + 0.850E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.47740460E+3, 0.850E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.49002960E+3, 0.850E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.37654500E+3, 0.850E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.39005450E+3, 0.850E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.46013230E+3, 0.850E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.41119140E+3, 0.850E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.35508990E+3, + 0.850E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.32115720E+3, 0.850E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.28336260E+3, 0.850E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.24831690E+3, 0.850E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.11787843E+4, 0.850E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.10561781E+4, 0.850E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.93492800E+3, 0.850E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.84595890E+3, + 0.850E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.77500770E+3, 0.850E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.60351860E+3, 0.850E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.67120920E+3, 0.850E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.51618070E+3, 0.850E+2, + 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.56361340E+3, 0.850E+2, 0.450E+2, 0.00000000E+0, + 0.00000000E+0, 0.52417160E+3, 0.850E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.43716280E+3, + 0.850E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.46363160E+3, 0.850E+2, 0.480E+2, + 0.00000000E+0, 0.00000000E+0, 0.57648690E+3, 0.850E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, + 0.53857130E+3, 0.850E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.48503660E+3, 0.850E+2, + 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.45297260E+3, 0.850E+2, 0.520E+2, 0.00000000E+0, + 0.00000000E+0, 0.41249290E+3, 0.850E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.37339600E+3, + 0.850E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.14375237E+4, 0.850E+2, 0.550E+2, + 0.00000000E+0, 0.00000000E+0, 0.13427557E+4, 0.850E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, + 0.11918004E+4, 0.850E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.57219880E+3, 0.850E+2, + 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.11941552E+4, 0.850E+2, 0.590E+2, 0.00000000E+0, + 0.00000000E+0, 0.11484879E+4, 0.850E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.11201674E+4, + 0.850E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.10940580E+4, 0.850E+2, 0.620E+2, + 0.00000000E+0, 0.00000000E+0, 0.10709219E+4, 0.850E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, + 0.85263060E+3, 0.850E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.94504500E+3, 0.850E+2, + 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.91333710E+3, 0.850E+2, 0.660E+2, 0.00000000E+0, + 0.00000000E+0, 0.96825870E+3, 0.850E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.94792020E+3, + 0.850E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.92971630E+3, 0.850E+2, 0.690E+2, + 0.00000000E+0, 0.00000000E+0, 0.91834420E+3, 0.850E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, + 0.78031510E+3, 0.850E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.77523370E+3, 0.850E+2, + 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.71228880E+3, 0.850E+2, 0.730E+2, 0.00000000E+0, + 0.00000000E+0, 0.60524130E+3, 0.850E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, 0.61710680E+3, + 0.850E+2, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.56258800E+3, 0.850E+2, 0.760E+2, + 0.00000000E+0, 0.00000000E+0, 0.51772850E+3, 0.850E+2, 0.770E+2, 0.00000000E+0, 0.00000000E+0, + 0.43264880E+3, 0.850E+2, 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.40518020E+3, 0.850E+2, + 0.790E+2, 0.00000000E+0, 0.00000000E+0, 0.41747370E+3, 0.850E+2, 0.800E+2, 0.00000000E+0, + 0.00000000E+0, 0.59434970E+3, 0.850E+2, 0.810E+2, 0.00000000E+0, 0.00000000E+0, 0.58543140E+3, + 0.850E+2, 0.820E+2, 0.00000000E+0, 0.00000000E+0, 0.54287440E+3, 0.850E+2, 0.830E+2, + 0.00000000E+0, 0.00000000E+0, 0.52058720E+3, 0.850E+2, 0.840E+2, 0.00000000E+0, 0.00000000E+0, + 0.48365360E+3, 0.850E+2, 0.850E+2, 0.00000000E+0, 0.00000000E+0, 0.35275000E+2, 0.860E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.24288600E+2, 0.860E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.47129940E+3, 0.860E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.29040790E+3, + 0.860E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.20366210E+3, 0.860E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.14199460E+3, 0.860E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.10173400E+3, 0.860E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.78399300E+2, 0.860E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.60320800E+2, 0.860E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.46997000E+2, 0.860E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.56630470E+3, + 0.860E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.45752070E+3, 0.860E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.43040700E+3, 0.860E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.34853240E+3, 0.860E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.27834410E+3, 0.860E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.23475630E+3, 0.860E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.19477780E+3, 0.860E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.16157780E+3, + 0.860E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.92348960E+3, 0.860E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.78946510E+3, 0.860E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.65782090E+3, 0.860E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.64106890E+3, 0.860E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.59013650E+3, 0.860E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.46657860E+3, 0.860E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.51200690E+3, + 0.860E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.40371620E+3, 0.860E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.43125430E+3, 0.860E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.44180520E+3, 0.860E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.34010290E+3, 0.860E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.35375690E+3, 0.860E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.41640720E+3, 0.860E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.37473780E+3, + 0.860E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.32584680E+3, 0.860E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.29605910E+3, 0.860E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.26246780E+3, 0.860E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.23103920E+3, 0.860E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.10398788E+4, 0.860E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.94037660E+3, 0.860E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.83682440E+3, + 0.860E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.75986860E+3, 0.860E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.69790750E+3, 0.860E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.54617620E+3, 0.860E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, 0.60628810E+3, 0.860E+2, + 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.46875270E+3, 0.860E+2, 0.440E+2, 0.00000000E+0, + 0.00000000E+0, 0.51133700E+3, 0.860E+2, 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.47629130E+3, + 0.860E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.39751230E+3, 0.860E+2, 0.470E+2, + 0.00000000E+0, 0.00000000E+0, 0.42213930E+3, 0.860E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, + 0.52225240E+3, 0.860E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, 0.49045740E+3, 0.860E+2, + 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.44423510E+3, 0.860E+2, 0.510E+2, 0.00000000E+0, + 0.00000000E+0, 0.41640380E+3, 0.860E+2, 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.38074630E+3, + 0.860E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.34603400E+3, 0.860E+2, 0.540E+2, + 0.00000000E+0, 0.00000000E+0, 0.12691514E+4, 0.860E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, + 0.11942553E+4, 0.860E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, 0.10653886E+4, 0.860E+2, + 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.52379990E+3, 0.860E+2, 0.580E+2, 0.00000000E+0, + 0.27991000E+1, 0.10641113E+4, 0.860E+2, 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.10241601E+4, + 0.860E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.99910040E+3, 0.860E+2, 0.610E+2, + 0.00000000E+0, 0.00000000E+0, 0.97596710E+3, 0.860E+2, 0.620E+2, 0.00000000E+0, 0.00000000E+0, + 0.95547530E+3, 0.860E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, 0.76577540E+3, 0.860E+2, + 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.84248080E+3, 0.860E+2, 0.650E+2, 0.00000000E+0, + 0.00000000E+0, 0.81508100E+3, 0.860E+2, 0.660E+2, 0.00000000E+0, 0.00000000E+0, 0.86486000E+3, + 0.860E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.84676410E+3, 0.860E+2, 0.680E+2, + 0.00000000E+0, 0.00000000E+0, 0.83063370E+3, 0.860E+2, 0.690E+2, 0.00000000E+0, 0.00000000E+0, + 0.82022230E+3, 0.860E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, 0.70009390E+3, 0.860E+2, + 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.69908500E+3, 0.860E+2, 0.720E+2, 0.00000000E+0, + 0.00000000E+0, 0.64467130E+3, 0.860E+2, 0.730E+2, 0.00000000E+0, 0.00000000E+0, 0.54983920E+3, + 0.860E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, 0.56121370E+3, 0.860E+2, 0.750E+2, + 0.00000000E+0, 0.00000000E+0, 0.51327610E+3, 0.860E+2, 0.760E+2, 0.00000000E+0, 0.00000000E+0, + 0.47360870E+3, 0.860E+2, 0.770E+2, 0.00000000E+0, 0.00000000E+0, 0.39719060E+3, 0.860E+2, + 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.37248250E+3, 0.860E+2, 0.790E+2, 0.00000000E+0, + 0.00000000E+0, 0.38402410E+3, 0.860E+2, 0.800E+2, 0.00000000E+0, 0.00000000E+0, 0.53990550E+3, + 0.860E+2, 0.810E+2, 0.00000000E+0, 0.00000000E+0, 0.53369840E+3, 0.860E+2, 0.820E+2, + 0.00000000E+0, 0.00000000E+0, 0.49729720E+3, 0.860E+2, 0.830E+2, 0.00000000E+0, 0.00000000E+0, + 0.47831130E+3, 0.860E+2, 0.840E+2, 0.00000000E+0, 0.00000000E+0, 0.44604470E+3, 0.860E+2, + 0.850E+2, 0.00000000E+0, 0.00000000E+0, 0.41282750E+3, 0.860E+2, 0.860E+2, 0.00000000E+0, + 0.00000000E+0, 0.10074940E+3, 0.870E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.59659400E+2, + 0.870E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.28945966E+4, 0.870E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.12189348E+4, 0.870E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.71065850E+3, 0.870E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.43419670E+3, 0.870E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.28277630E+3, 0.870E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.20397230E+3, 0.870E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.14835840E+3, + 0.870E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.11051200E+3, 0.870E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.33986461E+4, 0.870E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.20446296E+4, 0.870E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.17465418E+4, 0.870E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.12378269E+4, 0.870E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.88882250E+3, 0.870E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.70197610E+3, + 0.870E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.54727120E+3, 0.870E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.43044680E+3, 0.870E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.60209123E+4, 0.870E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.39885535E+4, 0.870E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.31533933E+4, 0.870E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.29483214E+4, 0.870E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.26441348E+4, + 0.870E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.20951563E+4, 0.870E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.22092516E+4, 0.870E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.17359767E+4, 0.870E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.17406013E+4, 0.870E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.18302286E+4, 0.870E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.14168737E+4, 0.870E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.13464975E+4, + 0.870E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.16330869E+4, 0.870E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.13219669E+4, 0.870E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.10509064E+4, 0.870E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.90547240E+3, 0.870E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.76070860E+3, 0.870E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.63792100E+3, 0.870E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.66879551E+4, + 0.870E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.48140613E+4, 0.870E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.39238630E+4, 0.870E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.33777348E+4, 0.870E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.30012009E+4, 0.870E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.22208404E+4, 0.870E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.25189457E+4, 0.870E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.18286037E+4, + 0.870E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.19819822E+4, 0.870E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.18052792E+4, 0.870E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, + 0.15403020E+4, 0.870E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.15550964E+4, 0.870E+2, + 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.20671731E+4, 0.870E+2, 0.490E+2, 0.00000000E+0, + 0.00000000E+0, 0.17732620E+4, 0.870E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.14801255E+4, + 0.870E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.13236329E+4, 0.870E+2, 0.520E+2, + 0.00000000E+0, 0.00000000E+0, 0.11516386E+4, 0.870E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, + 0.99949930E+3, 0.870E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.82315280E+4, 0.870E+2, + 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.63397235E+4, 0.870E+2, 0.560E+2, 0.00000000E+0, + 0.00000000E+0, 0.51715628E+4, 0.870E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.17765919E+4, + 0.870E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.54969601E+4, 0.870E+2, 0.590E+2, + 0.00000000E+0, 0.00000000E+0, 0.51886826E+4, 0.870E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, + 0.50376830E+4, 0.870E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.49009739E+4, 0.870E+2, + 0.620E+2, 0.00000000E+0, 0.00000000E+0, 0.47792385E+4, 0.870E+2, 0.630E+2, 0.00000000E+0, + 0.00000000E+0, 0.35004650E+4, 0.870E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.45180145E+4, + 0.870E+2, 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.43256882E+4, 0.870E+2, 0.660E+2, + 0.00000000E+0, 0.00000000E+0, 0.42216216E+4, 0.870E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, + 0.41211013E+4, 0.870E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.40270614E+4, 0.870E+2, + 0.690E+2, 0.00000000E+0, 0.00000000E+0, 0.39908778E+4, 0.870E+2, 0.700E+2, 0.00000000E+0, + 0.00000000E+0, 0.32187704E+4, 0.870E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.29218119E+4, + 0.870E+2, 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.25563295E+4, 0.870E+2, 0.730E+2, + 0.00000000E+0, 0.00000000E+0, 0.21076991E+4, 0.870E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, + 0.21032454E+4, 0.870E+2, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.18383882E+4, 0.870E+2, + 0.760E+2, 0.00000000E+0, 0.00000000E+0, 0.16363884E+4, 0.870E+2, 0.770E+2, 0.00000000E+0, + 0.00000000E+0, 0.13271181E+4, 0.870E+2, 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.12270914E+4, + 0.870E+2, 0.790E+2, 0.00000000E+0, 0.00000000E+0, 0.12394986E+4, 0.870E+2, 0.800E+2, + 0.00000000E+0, 0.00000000E+0, 0.21094753E+4, 0.870E+2, 0.810E+2, 0.00000000E+0, 0.00000000E+0, + 0.19333025E+4, 0.870E+2, 0.820E+2, 0.00000000E+0, 0.00000000E+0, 0.16699965E+4, 0.870E+2, + 0.830E+2, 0.00000000E+0, 0.00000000E+0, 0.15408317E+4, 0.870E+2, 0.840E+2, 0.00000000E+0, + 0.00000000E+0, 0.13687363E+4, 0.870E+2, 0.850E+2, 0.00000000E+0, 0.00000000E+0, 0.12134959E+4, + 0.870E+2, 0.860E+2, 0.00000000E+0, 0.00000000E+0, 0.73147398E+4, 0.870E+2, 0.870E+2, + 0.00000000E+0, 0.00000000E+0, 0.99413100E+2, 0.880E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, + 0.59674000E+2, 0.880E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.24340697E+4, 0.880E+2, + 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.11320344E+4, 0.880E+2, 0.400E+1, 0.00000000E+0, + 0.00000000E+0, 0.68137890E+3, 0.880E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.42416130E+3, + 0.880E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.27936020E+3, 0.880E+2, 0.700E+1, + 0.00000000E+0, 0.00000000E+0, 0.20282600E+3, 0.880E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, + 0.14825160E+3, 0.880E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.11081260E+3, 0.880E+2, + 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.28745717E+4, 0.880E+2, 0.110E+2, 0.00000000E+0, + 0.00000000E+0, 0.18719600E+4, 0.880E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.16279493E+4, + 0.880E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.11837103E+4, 0.880E+2, 0.140E+2, + 0.00000000E+0, 0.00000000E+0, 0.86434290E+3, 0.880E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, + 0.68837560E+3, 0.880E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.54058680E+3, 0.880E+2, + 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.42751470E+3, 0.880E+2, 0.180E+2, 0.00000000E+0, + 0.00000000E+0, 0.49128581E+4, 0.880E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.35289590E+4, + 0.880E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.28292273E+4, 0.880E+2, 0.210E+2, + 0.00000000E+0, 0.00000000E+0, 0.26655950E+4, 0.880E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, + 0.24036878E+4, 0.880E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.18947707E+4, 0.880E+2, + 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.20238919E+4, 0.880E+2, 0.250E+2, 0.00000000E+0, + 0.00000000E+0, 0.15845838E+4, 0.880E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.16192221E+4, + 0.880E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.16942469E+4, 0.880E+2, 0.280E+2, + 0.00000000E+0, 0.00000000E+0, 0.13022136E+4, 0.880E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, + 0.12677966E+4, 0.880E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.15270149E+4, 0.880E+2, + 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.12635730E+4, 0.880E+2, 0.320E+2, 0.00000000E+0, + 0.00000000E+0, 0.10197251E+4, 0.880E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.88504330E+3, + 0.880E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.74865020E+3, 0.880E+2, 0.350E+2, + 0.00000000E+0, 0.00000000E+0, 0.63127570E+3, 0.880E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, + 0.54594039E+4, 0.880E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.42339736E+4, 0.880E+2, + 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.35246180E+4, 0.880E+2, 0.390E+2, 0.00000000E+0, + 0.00000000E+0, 0.30700206E+4, 0.880E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.27442675E+4, + 0.880E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.20488350E+4, 0.880E+2, 0.420E+2, + 0.00000000E+0, 0.00000000E+0, 0.23149349E+4, 0.880E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, + 0.16984672E+4, 0.880E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.18511077E+4, 0.880E+2, + 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.16939362E+4, 0.880E+2, 0.460E+2, 0.00000000E+0, + 0.00000000E+0, 0.14296950E+4, 0.880E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.14674624E+4, + 0.880E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.19210215E+4, 0.880E+2, 0.490E+2, + 0.00000000E+0, 0.00000000E+0, 0.16832537E+4, 0.880E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, + 0.14267831E+4, 0.880E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.12854608E+4, 0.880E+2, + 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.11265319E+4, 0.880E+2, 0.530E+2, 0.00000000E+0, + 0.00000000E+0, 0.98363370E+3, 0.880E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.66646049E+4, + 0.880E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.55052582E+4, 0.880E+2, 0.560E+2, + 0.00000000E+0, 0.00000000E+0, 0.45943095E+4, 0.880E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, + 0.17037104E+4, 0.880E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.47976061E+4, 0.880E+2, + 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.45623865E+4, 0.880E+2, 0.600E+2, 0.00000000E+0, + 0.00000000E+0, 0.44362592E+4, 0.880E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.43214914E+4, + 0.880E+2, 0.620E+2, 0.00000000E+0, 0.00000000E+0, 0.42193690E+4, 0.880E+2, 0.630E+2, + 0.00000000E+0, 0.00000000E+0, 0.31447184E+4, 0.880E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, + 0.38693475E+4, 0.880E+2, 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.37006978E+4, 0.880E+2, + 0.660E+2, 0.00000000E+0, 0.00000000E+0, 0.37536534E+4, 0.880E+2, 0.670E+2, 0.00000000E+0, + 0.00000000E+0, 0.36679746E+4, 0.880E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.35884351E+4, + 0.880E+2, 0.690E+2, 0.00000000E+0, 0.00000000E+0, 0.35540067E+4, 0.880E+2, 0.700E+2, + 0.00000000E+0, 0.00000000E+0, 0.28892983E+4, 0.880E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, + 0.26921229E+4, 0.880E+2, 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.23813318E+4, 0.880E+2, + 0.730E+2, 0.00000000E+0, 0.00000000E+0, 0.19684730E+4, 0.880E+2, 0.740E+2, 0.00000000E+0, + 0.00000000E+0, 0.19760672E+4, 0.880E+2, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.17428522E+4, + 0.880E+2, 0.760E+2, 0.00000000E+0, 0.00000000E+0, 0.15616887E+4, 0.880E+2, 0.770E+2, + 0.00000000E+0, 0.00000000E+0, 0.12704258E+4, 0.880E+2, 0.780E+2, 0.00000000E+0, 0.00000000E+0, + 0.11766222E+4, 0.880E+2, 0.790E+2, 0.00000000E+0, 0.00000000E+0, 0.11957573E+4, 0.880E+2, + 0.800E+2, 0.00000000E+0, 0.00000000E+0, 0.19547292E+4, 0.880E+2, 0.810E+2, 0.00000000E+0, + 0.00000000E+0, 0.18286515E+4, 0.880E+2, 0.820E+2, 0.00000000E+0, 0.00000000E+0, 0.16046349E+4, + 0.880E+2, 0.830E+2, 0.00000000E+0, 0.00000000E+0, 0.14914089E+4, 0.880E+2, 0.840E+2, + 0.00000000E+0, 0.00000000E+0, 0.13351632E+4, 0.880E+2, 0.850E+2, 0.00000000E+0, 0.00000000E+0, + 0.11909286E+4, 0.880E+2, 0.860E+2, 0.00000000E+0, 0.00000000E+0, 0.60457168E+4, 0.880E+2, + 0.870E+2, 0.00000000E+0, 0.00000000E+0, 0.53054399E+4, 0.880E+2, 0.880E+2, 0.00000000E+0, + 0.00000000E+0, 0.89406000E+2, 0.890E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.54461300E+2, + 0.890E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.20082591E+4, 0.890E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.97721480E+3, 0.890E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.60005330E+3, 0.890E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.37866720E+3, 0.890E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.25180860E+3, 0.890E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.18403180E+3, 0.890E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.13527920E+3, + 0.890E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.10158570E+3, 0.890E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.23774617E+4, 0.890E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.16040300E+4, 0.890E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.14098711E+4, 0.890E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.10405681E+4, 0.890E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.76851320E+3, 0.890E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.61613190E+3, + 0.890E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.48688350E+3, 0.890E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.38707200E+3, 0.890E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.40174782E+4, 0.890E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.29771478E+4, 0.890E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.24021540E+4, 0.890E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.22732739E+4, 0.890E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.20559589E+4, + 0.890E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.16183634E+4, 0.890E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.17384495E+4, 0.890E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.13600663E+4, 0.890E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.14017622E+4, 0.890E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.14625357E+4, 0.890E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.11217466E+4, 0.890E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.11049523E+4, + 0.890E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.13263601E+4, 0.890E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.11110958E+4, 0.890E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.90553420E+3, 0.890E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.79026450E+3, 0.890E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.67216580E+3, 0.890E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.56954790E+3, 0.890E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.44690053E+4, + 0.890E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.35643510E+4, 0.890E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.29977722E+4, 0.890E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.26270446E+4, 0.890E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.23567083E+4, 0.890E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.17692538E+4, 0.890E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.19948729E+4, 0.890E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.14730457E+4, + 0.890E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.16081722E+4, 0.890E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.14753924E+4, 0.890E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, + 0.12402274E+4, 0.890E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.12822835E+4, 0.890E+2, + 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.16650502E+4, 0.890E+2, 0.490E+2, 0.00000000E+0, + 0.00000000E+0, 0.14751121E+4, 0.890E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.12620917E+4, + 0.890E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.11429090E+4, 0.890E+2, 0.520E+2, + 0.00000000E+0, 0.00000000E+0, 0.10069141E+4, 0.890E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, + 0.88341400E+3, 0.890E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.54478929E+4, 0.890E+2, + 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.46120247E+4, 0.890E+2, 0.560E+2, 0.00000000E+0, + 0.00000000E+0, 0.38897052E+4, 0.890E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.15031569E+4, + 0.890E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.40323992E+4, 0.890E+2, 0.590E+2, + 0.00000000E+0, 0.00000000E+0, 0.38433536E+4, 0.890E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, + 0.37393646E+4, 0.890E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.36445469E+4, 0.890E+2, + 0.620E+2, 0.00000000E+0, 0.00000000E+0, 0.35602278E+4, 0.890E+2, 0.630E+2, 0.00000000E+0, + 0.00000000E+0, 0.26796802E+4, 0.890E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.32333681E+4, + 0.890E+2, 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.30968078E+4, 0.890E+2, 0.660E+2, + 0.00000000E+0, 0.00000000E+0, 0.31769406E+4, 0.890E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, + 0.31056847E+4, 0.890E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.30398461E+4, 0.890E+2, + 0.690E+2, 0.00000000E+0, 0.00000000E+0, 0.30095999E+4, 0.890E+2, 0.700E+2, 0.00000000E+0, + 0.00000000E+0, 0.24623774E+4, 0.890E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.23202277E+4, + 0.890E+2, 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.20645670E+4, 0.890E+2, 0.730E+2, + 0.00000000E+0, 0.00000000E+0, 0.17115570E+4, 0.890E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, + 0.17232231E+4, 0.890E+2, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.15276535E+4, 0.890E+2, + 0.760E+2, 0.00000000E+0, 0.00000000E+0, 0.13743640E+4, 0.890E+2, 0.770E+2, 0.00000000E+0, + 0.00000000E+0, 0.11213924E+4, 0.890E+2, 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.10400238E+4, + 0.890E+2, 0.790E+2, 0.00000000E+0, 0.00000000E+0, 0.10600607E+4, 0.890E+2, 0.800E+2, + 0.00000000E+0, 0.00000000E+0, 0.16946605E+4, 0.890E+2, 0.810E+2, 0.00000000E+0, 0.00000000E+0, + 0.16008616E+4, 0.890E+2, 0.820E+2, 0.00000000E+0, 0.00000000E+0, 0.14174346E+4, 0.890E+2, + 0.830E+2, 0.00000000E+0, 0.00000000E+0, 0.13236360E+4, 0.890E+2, 0.840E+2, 0.00000000E+0, + 0.00000000E+0, 0.11913272E+4, 0.890E+2, 0.850E+2, 0.00000000E+0, 0.00000000E+0, 0.10675065E+4, + 0.890E+2, 0.860E+2, 0.00000000E+0, 0.00000000E+0, 0.49814961E+4, 0.890E+2, 0.870E+2, + 0.00000000E+0, 0.00000000E+0, 0.44669584E+4, 0.890E+2, 0.880E+2, 0.00000000E+0, 0.00000000E+0, + 0.37996565E+4, 0.890E+2, 0.890E+2, 0.00000000E+0, 0.00000000E+0, 0.82083600E+2, 0.900E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.51110300E+2, 0.900E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.16724768E+4, 0.900E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.85252490E+3, + 0.900E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.53608580E+3, 0.900E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.34435760E+3, 0.900E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.23207230E+3, 0.900E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.17124180E+3, 0.900E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.12693930E+3, 0.900E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.95984500E+2, 0.900E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.19852103E+4, + 0.900E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.13883756E+4, 0.900E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.12352681E+4, 0.900E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.92751070E+3, 0.900E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.69479830E+3, 0.900E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.56206360E+3, 0.900E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.44804860E+3, 0.900E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.35892730E+3, + 0.900E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.33208171E+4, 0.900E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.25377308E+4, 0.900E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.20608901E+4, 0.900E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.19602827E+4, 0.900E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.17786546E+4, 0.900E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.13994778E+4, 0.900E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.15110816E+4, + 0.900E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.11825093E+4, 0.900E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.12287380E+4, 0.900E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.12777896E+4, 0.900E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.97919840E+3, 0.900E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.97588560E+3, 0.900E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.11670583E+4, 0.900E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.99120150E+3, + 0.900E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.81755520E+3, 0.900E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.71866790E+3, 0.900E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.61585050E+3, 0.900E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.52542400E+3, 0.900E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.36996637E+4, 0.900E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.30331273E+4, 0.900E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.25787074E+4, + 0.900E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.22748325E+4, 0.900E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.20492299E+4, 0.900E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.15491780E+4, 0.900E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, 0.17421202E+4, 0.900E+2, + 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.12966551E+4, 0.900E+2, 0.440E+2, 0.00000000E+0, + 0.00000000E+0, 0.14168423E+4, 0.900E+2, 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.13036060E+4, + 0.900E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.10925939E+4, 0.900E+2, 0.470E+2, + 0.00000000E+0, 0.00000000E+0, 0.11371745E+4, 0.900E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, + 0.14631580E+4, 0.900E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, 0.13115880E+4, 0.900E+2, + 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.11344385E+4, 0.900E+2, 0.510E+2, 0.00000000E+0, + 0.00000000E+0, 0.10338769E+4, 0.900E+2, 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.91709200E+3, + 0.900E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.80980180E+3, 0.900E+2, 0.540E+2, + 0.00000000E+0, 0.00000000E+0, 0.45055681E+4, 0.900E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, + 0.39071262E+4, 0.900E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, 0.33315473E+4, 0.900E+2, + 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.13478223E+4, 0.900E+2, 0.580E+2, 0.00000000E+0, + 0.27991000E+1, 0.34277894E+4, 0.900E+2, 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.32744792E+4, + 0.900E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.31877428E+4, 0.900E+2, 0.610E+2, + 0.00000000E+0, 0.00000000E+0, 0.31084769E+4, 0.900E+2, 0.620E+2, 0.00000000E+0, 0.00000000E+0, + 0.30380345E+4, 0.900E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, 0.23122086E+4, 0.900E+2, + 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.27358113E+4, 0.900E+2, 0.650E+2, 0.00000000E+0, + 0.00000000E+0, 0.26241922E+4, 0.900E+2, 0.660E+2, 0.00000000E+0, 0.00000000E+0, 0.27191319E+4, + 0.900E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.26591268E+4, 0.900E+2, 0.680E+2, + 0.00000000E+0, 0.00000000E+0, 0.26040009E+4, 0.900E+2, 0.690E+2, 0.00000000E+0, 0.00000000E+0, + 0.25769767E+4, 0.900E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, 0.21236819E+4, 0.900E+2, + 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.20248239E+4, 0.900E+2, 0.720E+2, 0.00000000E+0, + 0.00000000E+0, 0.18137564E+4, 0.900E+2, 0.730E+2, 0.00000000E+0, 0.00000000E+0, 0.15101361E+4, + 0.900E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, 0.15249297E+4, 0.900E+2, 0.750E+2, + 0.00000000E+0, 0.00000000E+0, 0.13598576E+4, 0.900E+2, 0.760E+2, 0.00000000E+0, 0.00000000E+0, + 0.12292164E+4, 0.900E+2, 0.770E+2, 0.00000000E+0, 0.00000000E+0, 0.10074225E+4, 0.900E+2, + 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.93609580E+3, 0.900E+2, 0.790E+2, 0.00000000E+0, + 0.00000000E+0, 0.95680470E+3, 0.900E+2, 0.800E+2, 0.00000000E+0, 0.00000000E+0, 0.14915698E+4, + 0.900E+2, 0.810E+2, 0.00000000E+0, 0.00000000E+0, 0.14229431E+4, 0.900E+2, 0.820E+2, + 0.00000000E+0, 0.00000000E+0, 0.12726601E+4, 0.900E+2, 0.830E+2, 0.00000000E+0, 0.00000000E+0, + 0.11951492E+4, 0.900E+2, 0.840E+2, 0.00000000E+0, 0.00000000E+0, 0.10828719E+4, 0.900E+2, + 0.850E+2, 0.00000000E+0, 0.00000000E+0, 0.97614170E+3, 0.900E+2, 0.860E+2, 0.00000000E+0, + 0.00000000E+0, 0.41555932E+4, 0.900E+2, 0.870E+2, 0.00000000E+0, 0.00000000E+0, 0.38047750E+4, + 0.900E+2, 0.880E+2, 0.00000000E+0, 0.00000000E+0, 0.32704258E+4, 0.900E+2, 0.890E+2, + 0.00000000E+0, 0.00000000E+0, 0.28472704E+4, 0.900E+2, 0.900E+2, 0.00000000E+0, 0.00000000E+0, + 0.80726000E+2, 0.910E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.50005200E+2, 0.910E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.17306038E+4, 0.910E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.85763790E+3, 0.910E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.53308180E+3, + 0.910E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.33998630E+3, 0.910E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.22813330E+3, 0.910E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.16791870E+3, 0.910E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.12426420E+3, 0.910E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.93866300E+2, 0.910E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.20511151E+4, 0.910E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.14030924E+4, + 0.910E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.12403071E+4, 0.910E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.92324960E+3, 0.910E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.68729140E+3, 0.910E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.55412740E+3, 0.910E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.44044180E+3, 0.910E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.35207430E+3, 0.910E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.34570434E+4, + 0.910E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.25892888E+4, 0.910E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.20945389E+4, 0.910E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.19869265E+4, 0.910E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.17996577E+4, 0.910E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.14173421E+4, 0.910E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.15251022E+4, 0.910E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.11941778E+4, + 0.910E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.12344914E+4, 0.910E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.12859300E+4, 0.910E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.98684670E+3, 0.910E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.97668650E+3, 0.910E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.11699494E+4, 0.910E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.98664000E+3, 0.910E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.80937540E+3, + 0.910E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.70943800E+3, 0.910E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.60630260E+3, 0.910E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.51614250E+3, 0.910E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.38488310E+4, 0.910E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.30987868E+4, 0.910E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.26179361E+4, 0.910E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.23009943E+4, + 0.910E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.20684111E+4, 0.910E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.15587481E+4, 0.910E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.17549706E+4, 0.910E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.13015598E+4, 0.910E+2, + 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.14207211E+4, 0.910E+2, 0.450E+2, 0.00000000E+0, + 0.00000000E+0, 0.13053320E+4, 0.910E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.10968175E+4, + 0.910E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.11367042E+4, 0.910E+2, 0.480E+2, + 0.00000000E+0, 0.00000000E+0, 0.14690715E+4, 0.910E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, + 0.13085146E+4, 0.910E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.11258498E+4, 0.910E+2, + 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.10231942E+4, 0.910E+2, 0.520E+2, 0.00000000E+0, + 0.00000000E+0, 0.90511410E+3, 0.910E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.79733130E+3, + 0.910E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.46916964E+4, 0.910E+2, 0.550E+2, + 0.00000000E+0, 0.00000000E+0, 0.40037089E+4, 0.910E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, + 0.33915606E+4, 0.910E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.13396248E+4, 0.910E+2, + 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.35059336E+4, 0.910E+2, 0.590E+2, 0.00000000E+0, + 0.00000000E+0, 0.33442162E+4, 0.910E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.32544268E+4, + 0.910E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.31724783E+4, 0.910E+2, 0.620E+2, + 0.00000000E+0, 0.00000000E+0, 0.30996207E+4, 0.910E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, + 0.23450320E+4, 0.910E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.28084101E+4, 0.910E+2, + 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.26917985E+4, 0.910E+2, 0.660E+2, 0.00000000E+0, + 0.00000000E+0, 0.27690943E+4, 0.910E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.27073188E+4, + 0.910E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.26503867E+4, 0.910E+2, 0.690E+2, + 0.00000000E+0, 0.00000000E+0, 0.26234579E+4, 0.910E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, + 0.21538516E+4, 0.910E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.20393959E+4, 0.910E+2, + 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.18205331E+4, 0.910E+2, 0.730E+2, 0.00000000E+0, + 0.00000000E+0, 0.15133881E+4, 0.910E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, 0.15256409E+4, + 0.910E+2, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.13566458E+4, 0.910E+2, 0.760E+2, + 0.00000000E+0, 0.00000000E+0, 0.12236676E+4, 0.910E+2, 0.770E+2, 0.00000000E+0, 0.00000000E+0, + 0.10014754E+4, 0.910E+2, 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.92999430E+3, 0.910E+2, + 0.790E+2, 0.00000000E+0, 0.00000000E+0, 0.94896980E+3, 0.910E+2, 0.800E+2, 0.00000000E+0, + 0.00000000E+0, 0.14976018E+4, 0.910E+2, 0.810E+2, 0.00000000E+0, 0.00000000E+0, 0.14206996E+4, + 0.910E+2, 0.820E+2, 0.00000000E+0, 0.00000000E+0, 0.12642423E+4, 0.910E+2, 0.830E+2, + 0.00000000E+0, 0.00000000E+0, 0.11841627E+4, 0.910E+2, 0.840E+2, 0.00000000E+0, 0.00000000E+0, + 0.10698651E+4, 0.910E+2, 0.850E+2, 0.00000000E+0, 0.00000000E+0, 0.96217680E+3, 0.910E+2, + 0.860E+2, 0.00000000E+0, 0.00000000E+0, 0.43039645E+4, 0.910E+2, 0.870E+2, 0.00000000E+0, + 0.00000000E+0, 0.38865716E+4, 0.910E+2, 0.880E+2, 0.00000000E+0, 0.00000000E+0, 0.33200764E+4, + 0.910E+2, 0.890E+2, 0.00000000E+0, 0.00000000E+0, 0.28725136E+4, 0.910E+2, 0.900E+2, + 0.00000000E+0, 0.00000000E+0, 0.29089206E+4, 0.910E+2, 0.910E+2, 0.00000000E+0, 0.00000000E+0, + 0.78203400E+2, 0.920E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.48498000E+2, 0.920E+2, + 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.16716156E+4, 0.920E+2, 0.300E+1, 0.00000000E+0, + 0.00000000E+0, 0.82971320E+3, 0.920E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.51601950E+3, + 0.920E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.32928020E+3, 0.920E+2, 0.600E+1, + 0.00000000E+0, 0.00000000E+0, 0.22106590E+3, 0.920E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, + 0.16279260E+3, 0.920E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.12052900E+3, 0.920E+2, + 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.91086900E+2, 0.920E+2, 0.100E+2, 0.00000000E+0, + 0.00000000E+0, 0.19814675E+4, 0.920E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.13571628E+4, + 0.920E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.12000275E+4, 0.920E+2, 0.130E+2, + 0.00000000E+0, 0.00000000E+0, 0.89364440E+3, 0.920E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, + 0.66549650E+3, 0.920E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.53670890E+3, 0.920E+2, + 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.42673540E+3, 0.920E+2, 0.170E+2, 0.00000000E+0, + 0.00000000E+0, 0.34123400E+3, 0.920E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.33376961E+4, + 0.920E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.25033576E+4, 0.920E+2, 0.200E+2, + 0.00000000E+0, 0.00000000E+0, 0.20254740E+4, 0.920E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, + 0.19216819E+4, 0.920E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.17407294E+4, 0.920E+2, + 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.13709264E+4, 0.920E+2, 0.240E+2, 0.00000000E+0, + 0.00000000E+0, 0.14753669E+4, 0.920E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.11552737E+4, + 0.920E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.11945389E+4, 0.920E+2, 0.270E+2, + 0.00000000E+0, 0.00000000E+0, 0.12442037E+4, 0.920E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, + 0.95483090E+3, 0.920E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.94527750E+3, 0.920E+2, + 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.11321107E+4, 0.920E+2, 0.310E+2, 0.00000000E+0, + 0.00000000E+0, 0.95506070E+3, 0.920E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.78370690E+3, + 0.920E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.68708390E+3, 0.920E+2, 0.340E+2, + 0.00000000E+0, 0.00000000E+0, 0.58734500E+3, 0.920E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, + 0.50013680E+3, 0.920E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.37160678E+4, 0.920E+2, + 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.29957186E+4, 0.920E+2, 0.380E+2, 0.00000000E+0, + 0.00000000E+0, 0.25317373E+4, 0.920E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.22256807E+4, + 0.920E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.20009439E+4, 0.920E+2, 0.410E+2, + 0.00000000E+0, 0.00000000E+0, 0.15082494E+4, 0.920E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, + 0.16979484E+4, 0.920E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.12596142E+4, 0.920E+2, + 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.13749665E+4, 0.920E+2, 0.450E+2, 0.00000000E+0, + 0.00000000E+0, 0.12634136E+4, 0.920E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.10615457E+4, + 0.920E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.11003399E+4, 0.920E+2, 0.480E+2, + 0.00000000E+0, 0.00000000E+0, 0.14216099E+4, 0.920E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, + 0.12666329E+4, 0.920E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.10901053E+4, 0.920E+2, + 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.99086960E+3, 0.920E+2, 0.520E+2, 0.00000000E+0, + 0.00000000E+0, 0.87669020E+3, 0.920E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.77245190E+3, + 0.920E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.45291727E+4, 0.920E+2, 0.550E+2, + 0.00000000E+0, 0.00000000E+0, 0.38697611E+4, 0.920E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, + 0.32793360E+4, 0.920E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.12970461E+4, 0.920E+2, + 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.33890395E+4, 0.920E+2, 0.590E+2, 0.00000000E+0, + 0.00000000E+0, 0.32330975E+4, 0.920E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.31463690E+4, + 0.920E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.30672053E+4, 0.920E+2, 0.620E+2, + 0.00000000E+0, 0.00000000E+0, 0.29968237E+4, 0.920E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, + 0.22680138E+4, 0.920E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.27140296E+4, 0.920E+2, + 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.26013226E+4, 0.920E+2, 0.660E+2, 0.00000000E+0, + 0.00000000E+0, 0.26775672E+4, 0.920E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.26178718E+4, + 0.920E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.25628645E+4, 0.920E+2, 0.690E+2, + 0.00000000E+0, 0.00000000E+0, 0.25367915E+4, 0.920E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, + 0.20830385E+4, 0.920E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.19730821E+4, 0.920E+2, + 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.17616844E+4, 0.920E+2, 0.730E+2, 0.00000000E+0, + 0.00000000E+0, 0.14646529E+4, 0.920E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, 0.14766337E+4, + 0.920E+2, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.13133066E+4, 0.920E+2, 0.760E+2, + 0.00000000E+0, 0.00000000E+0, 0.11847530E+4, 0.920E+2, 0.770E+2, 0.00000000E+0, 0.00000000E+0, + 0.96980220E+3, 0.920E+2, 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.90065620E+3, 0.920E+2, + 0.790E+2, 0.00000000E+0, 0.00000000E+0, 0.91908240E+3, 0.920E+2, 0.800E+2, 0.00000000E+0, + 0.00000000E+0, 0.14493061E+4, 0.920E+2, 0.810E+2, 0.00000000E+0, 0.00000000E+0, 0.13752752E+4, + 0.920E+2, 0.820E+2, 0.00000000E+0, 0.00000000E+0, 0.12241322E+4, 0.920E+2, 0.830E+2, + 0.00000000E+0, 0.00000000E+0, 0.11467509E+4, 0.920E+2, 0.840E+2, 0.00000000E+0, 0.00000000E+0, + 0.10362496E+4, 0.920E+2, 0.850E+2, 0.00000000E+0, 0.00000000E+0, 0.93211210E+3, 0.920E+2, + 0.860E+2, 0.00000000E+0, 0.00000000E+0, 0.41565121E+4, 0.920E+2, 0.870E+2, 0.00000000E+0, + 0.00000000E+0, 0.37572430E+4, 0.920E+2, 0.880E+2, 0.00000000E+0, 0.00000000E+0, 0.32107560E+4, + 0.920E+2, 0.890E+2, 0.00000000E+0, 0.00000000E+0, 0.27789432E+4, 0.920E+2, 0.900E+2, + 0.00000000E+0, 0.00000000E+0, 0.28136269E+4, 0.920E+2, 0.910E+2, 0.00000000E+0, 0.00000000E+0, + 0.27215209E+4, 0.920E+2, 0.920E+2, 0.00000000E+0, 0.00000000E+0, 0.79439100E+2, 0.930E+2, + 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.48724100E+2, 0.930E+2, 0.200E+1, 0.00000000E+0, + 0.00000000E+0, 0.18005066E+4, 0.930E+2, 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.86956410E+3, + 0.930E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, 0.53289880E+3, 0.930E+2, 0.500E+1, + 0.00000000E+0, 0.00000000E+0, 0.33646270E+3, 0.930E+2, 0.600E+1, 0.00000000E+0, 0.00000000E+0, + 0.22420940E+3, 0.930E+2, 0.700E+1, 0.00000000E+0, 0.00000000E+0, 0.16429590E+3, 0.930E+2, + 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.12116670E+3, 0.930E+2, 0.900E+1, 0.00000000E+0, + 0.00000000E+0, 0.91309000E+2, 0.930E+2, 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.21313007E+4, + 0.930E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, 0.14294308E+4, 0.930E+2, 0.120E+2, + 0.00000000E+0, 0.00000000E+0, 0.12543604E+4, 0.930E+2, 0.130E+2, 0.00000000E+0, 0.00000000E+0, + 0.92419700E+3, 0.930E+2, 0.140E+2, 0.00000000E+0, 0.00000000E+0, 0.68227500E+3, 0.930E+2, + 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.54731890E+3, 0.930E+2, 0.160E+2, 0.00000000E+0, + 0.00000000E+0, 0.43301050E+3, 0.930E+2, 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.34483050E+3, + 0.930E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, 0.36085602E+4, 0.930E+2, 0.190E+2, + 0.00000000E+0, 0.00000000E+0, 0.26611178E+4, 0.930E+2, 0.200E+2, 0.00000000E+0, 0.00000000E+0, + 0.21449232E+4, 0.930E+2, 0.210E+2, 0.00000000E+0, 0.00000000E+0, 0.20287846E+4, 0.930E+2, + 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.18341800E+4, 0.930E+2, 0.230E+2, 0.00000000E+0, + 0.00000000E+0, 0.14450682E+4, 0.930E+2, 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.15501899E+4, + 0.930E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, 0.12138708E+4, 0.930E+2, 0.260E+2, + 0.00000000E+0, 0.00000000E+0, 0.12487909E+4, 0.930E+2, 0.270E+2, 0.00000000E+0, 0.00000000E+0, + 0.13033334E+4, 0.930E+2, 0.280E+2, 0.00000000E+0, 0.00000000E+0, 0.10009549E+4, 0.930E+2, + 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.98372150E+3, 0.930E+2, 0.300E+2, 0.00000000E+0, + 0.00000000E+0, 0.11804499E+4, 0.930E+2, 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.98737510E+3, + 0.930E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, 0.80425620E+3, 0.930E+2, 0.330E+2, + 0.00000000E+0, 0.00000000E+0, 0.70203110E+3, 0.930E+2, 0.340E+2, 0.00000000E+0, 0.00000000E+0, + 0.59750350E+3, 0.930E+2, 0.350E+2, 0.00000000E+0, 0.00000000E+0, 0.50682160E+3, 0.930E+2, + 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.40138973E+4, 0.930E+2, 0.370E+2, 0.00000000E+0, + 0.00000000E+0, 0.31875734E+4, 0.930E+2, 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.26766472E+4, + 0.930E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, 0.23437586E+4, 0.930E+2, 0.400E+2, + 0.00000000E+0, 0.00000000E+0, 0.21018417E+4, 0.930E+2, 0.410E+2, 0.00000000E+0, 0.00000000E+0, + 0.15778736E+4, 0.930E+2, 0.420E+2, 0.00000000E+0, 0.00000000E+0, 0.17790323E+4, 0.930E+2, + 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.13137158E+4, 0.930E+2, 0.440E+2, 0.00000000E+0, + 0.00000000E+0, 0.14331563E+4, 0.930E+2, 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.13146561E+4, + 0.930E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, 0.11068617E+4, 0.930E+2, 0.470E+2, + 0.00000000E+0, 0.00000000E+0, 0.11425196E+4, 0.930E+2, 0.480E+2, 0.00000000E+0, 0.00000000E+0, + 0.14840150E+4, 0.930E+2, 0.490E+2, 0.00000000E+0, 0.00000000E+0, 0.13126653E+4, 0.930E+2, + 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.11221440E+4, 0.930E+2, 0.510E+2, 0.00000000E+0, + 0.00000000E+0, 0.10160025E+4, 0.930E+2, 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.89523210E+3, + 0.930E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, 0.78580380E+3, 0.930E+2, 0.540E+2, + 0.00000000E+0, 0.00000000E+0, 0.48930436E+4, 0.930E+2, 0.550E+2, 0.00000000E+0, 0.00000000E+0, + 0.41279330E+4, 0.930E+2, 0.560E+2, 0.00000000E+0, 0.00000000E+0, 0.34757124E+4, 0.930E+2, + 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.13372850E+4, 0.930E+2, 0.580E+2, 0.00000000E+0, + 0.27991000E+1, 0.36078825E+4, 0.930E+2, 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.34378544E+4, + 0.930E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, 0.33445279E+4, 0.930E+2, 0.610E+2, + 0.00000000E+0, 0.00000000E+0, 0.32594431E+4, 0.930E+2, 0.620E+2, 0.00000000E+0, 0.00000000E+0, + 0.31837627E+4, 0.930E+2, 0.630E+2, 0.00000000E+0, 0.00000000E+0, 0.23935584E+4, 0.930E+2, + 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.28964080E+4, 0.930E+2, 0.650E+2, 0.00000000E+0, + 0.00000000E+0, 0.27730351E+4, 0.930E+2, 0.660E+2, 0.00000000E+0, 0.00000000E+0, 0.28396469E+4, + 0.930E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, 0.27757424E+4, 0.930E+2, 0.680E+2, + 0.00000000E+0, 0.00000000E+0, 0.27166522E+4, 0.930E+2, 0.690E+2, 0.00000000E+0, 0.00000000E+0, + 0.26897033E+4, 0.930E+2, 0.700E+2, 0.00000000E+0, 0.00000000E+0, 0.21986632E+4, 0.930E+2, + 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.20680029E+4, 0.930E+2, 0.720E+2, 0.00000000E+0, + 0.00000000E+0, 0.18390464E+4, 0.930E+2, 0.730E+2, 0.00000000E+0, 0.00000000E+0, 0.15251115E+4, + 0.930E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, 0.15347972E+4, 0.930E+2, 0.750E+2, + 0.00000000E+0, 0.00000000E+0, 0.13602378E+4, 0.930E+2, 0.760E+2, 0.00000000E+0, 0.00000000E+0, + 0.12236448E+4, 0.930E+2, 0.770E+2, 0.00000000E+0, 0.00000000E+0, 0.99920960E+3, 0.930E+2, + 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.92702850E+3, 0.930E+2, 0.790E+2, 0.00000000E+0, + 0.00000000E+0, 0.94428620E+3, 0.930E+2, 0.800E+2, 0.00000000E+0, 0.00000000E+0, 0.15116714E+4, + 0.930E+2, 0.810E+2, 0.00000000E+0, 0.00000000E+0, 0.14258266E+4, 0.930E+2, 0.820E+2, + 0.00000000E+0, 0.00000000E+0, 0.12612415E+4, 0.930E+2, 0.830E+2, 0.00000000E+0, 0.00000000E+0, + 0.11774038E+4, 0.930E+2, 0.840E+2, 0.00000000E+0, 0.00000000E+0, 0.10596377E+4, 0.930E+2, + 0.850E+2, 0.00000000E+0, 0.00000000E+0, 0.94975540E+3, 0.930E+2, 0.860E+2, 0.00000000E+0, + 0.00000000E+0, 0.44697774E+4, 0.930E+2, 0.870E+2, 0.00000000E+0, 0.00000000E+0, 0.39952606E+4, + 0.930E+2, 0.880E+2, 0.00000000E+0, 0.00000000E+0, 0.33932601E+4, 0.930E+2, 0.890E+2, + 0.00000000E+0, 0.00000000E+0, 0.29170992E+4, 0.930E+2, 0.900E+2, 0.00000000E+0, 0.00000000E+0, + 0.29646668E+4, 0.930E+2, 0.910E+2, 0.00000000E+0, 0.00000000E+0, 0.28671025E+4, 0.930E+2, + 0.920E+2, 0.00000000E+0, 0.00000000E+0, 0.30329760E+4, 0.930E+2, 0.930E+2, 0.00000000E+0, + 0.00000000E+0, 0.77102100E+2, 0.940E+2, 0.100E+1, 0.00000000E+0, 0.91180000E+0, 0.47379800E+2, + 0.940E+2, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.17278140E+4, 0.940E+2, 0.300E+1, + 0.00000000E+0, 0.00000000E+0, 0.83944780E+3, 0.940E+2, 0.400E+1, 0.00000000E+0, 0.00000000E+0, + 0.51579770E+3, 0.940E+2, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.32625000E+3, 0.940E+2, + 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.21767650E+3, 0.940E+2, 0.700E+1, 0.00000000E+0, + 0.00000000E+0, 0.15964350E+3, 0.940E+2, 0.800E+1, 0.00000000E+0, 0.00000000E+0, 0.11781930E+3, + 0.940E+2, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.88836500E+2, 0.940E+2, 0.100E+2, + 0.00000000E+0, 0.00000000E+0, 0.20459284E+4, 0.940E+2, 0.110E+2, 0.00000000E+0, 0.00000000E+0, + 0.13785876E+4, 0.940E+2, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.12114443E+4, 0.940E+2, + 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.89432550E+3, 0.940E+2, 0.140E+2, 0.00000000E+0, + 0.00000000E+0, 0.66120920E+3, 0.940E+2, 0.150E+2, 0.00000000E+0, 0.00000000E+0, 0.53088280E+3, + 0.940E+2, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.42034980E+3, 0.940E+2, 0.170E+2, + 0.00000000E+0, 0.00000000E+0, 0.33497590E+3, 0.940E+2, 0.180E+2, 0.00000000E+0, 0.00000000E+0, + 0.34586883E+4, 0.940E+2, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.25612750E+4, 0.940E+2, + 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.20661768E+4, 0.940E+2, 0.210E+2, 0.00000000E+0, + 0.00000000E+0, 0.19554505E+4, 0.940E+2, 0.220E+2, 0.00000000E+0, 0.00000000E+0, 0.17685649E+4, + 0.940E+2, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.13931385E+4, 0.940E+2, 0.240E+2, + 0.00000000E+0, 0.00000000E+0, 0.14955657E+4, 0.940E+2, 0.250E+2, 0.00000000E+0, 0.00000000E+0, + 0.11710013E+4, 0.940E+2, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.12060158E+4, 0.940E+2, + 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.12582170E+4, 0.940E+2, 0.280E+2, 0.00000000E+0, + 0.00000000E+0, 0.96605990E+3, 0.940E+2, 0.290E+2, 0.00000000E+0, 0.00000000E+0, 0.95086030E+3, + 0.940E+2, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.11405197E+4, 0.940E+2, 0.310E+2, + 0.00000000E+0, 0.00000000E+0, 0.95550390E+3, 0.940E+2, 0.320E+2, 0.00000000E+0, 0.00000000E+0, + 0.77929760E+3, 0.940E+2, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.68073550E+3, 0.940E+2, + 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.57979560E+3, 0.940E+2, 0.350E+2, 0.00000000E+0, + 0.00000000E+0, 0.49211280E+3, 0.940E+2, 0.360E+2, 0.00000000E+0, 0.00000000E+0, 0.38477324E+4, + 0.940E+2, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.30671463E+4, 0.940E+2, 0.380E+2, + 0.00000000E+0, 0.00000000E+0, 0.25790022E+4, 0.940E+2, 0.390E+2, 0.00000000E+0, 0.00000000E+0, + 0.22600639E+4, 0.940E+2, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.20277440E+4, 0.940E+2, + 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.15233742E+4, 0.940E+2, 0.420E+2, 0.00000000E+0, + 0.00000000E+0, 0.17171041E+4, 0.940E+2, 0.430E+2, 0.00000000E+0, 0.00000000E+0, 0.12690647E+4, + 0.940E+2, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.13847315E+4, 0.940E+2, 0.450E+2, + 0.00000000E+0, 0.00000000E+0, 0.12706578E+4, 0.940E+2, 0.460E+2, 0.00000000E+0, 0.00000000E+0, + 0.10692791E+4, 0.940E+2, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.11047467E+4, 0.940E+2, + 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.14334370E+4, 0.940E+2, 0.490E+2, 0.00000000E+0, + 0.00000000E+0, 0.12697368E+4, 0.940E+2, 0.500E+2, 0.00000000E+0, 0.00000000E+0, 0.10867671E+4, + 0.940E+2, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.98462910E+3, 0.940E+2, 0.520E+2, + 0.00000000E+0, 0.00000000E+0, 0.86818680E+3, 0.940E+2, 0.530E+2, 0.00000000E+0, 0.00000000E+0, + 0.76254070E+3, 0.940E+2, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.46894909E+4, 0.940E+2, + 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.39694488E+4, 0.940E+2, 0.560E+2, 0.00000000E+0, + 0.00000000E+0, 0.33469278E+4, 0.940E+2, 0.570E+2, 0.00000000E+0, 0.00000000E+0, 0.12946997E+4, + 0.940E+2, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.34708103E+4, 0.940E+2, 0.590E+2, + 0.00000000E+0, 0.00000000E+0, 0.33082782E+4, 0.940E+2, 0.600E+2, 0.00000000E+0, 0.00000000E+0, + 0.32187253E+4, 0.940E+2, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.31370576E+4, 0.940E+2, + 0.620E+2, 0.00000000E+0, 0.00000000E+0, 0.30644224E+4, 0.940E+2, 0.630E+2, 0.00000000E+0, + 0.00000000E+0, 0.23068366E+4, 0.940E+2, 0.640E+2, 0.00000000E+0, 0.00000000E+0, 0.27842586E+4, + 0.940E+2, 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.26660816E+4, 0.940E+2, 0.660E+2, + 0.00000000E+0, 0.00000000E+0, 0.27342974E+4, 0.940E+2, 0.670E+2, 0.00000000E+0, 0.00000000E+0, + 0.26729042E+4, 0.940E+2, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.26161724E+4, 0.940E+2, + 0.690E+2, 0.00000000E+0, 0.00000000E+0, 0.25900957E+4, 0.940E+2, 0.700E+2, 0.00000000E+0, + 0.00000000E+0, 0.21189811E+4, 0.940E+2, 0.710E+2, 0.00000000E+0, 0.00000000E+0, 0.19960266E+4, + 0.940E+2, 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.17764187E+4, 0.940E+2, 0.730E+2, + 0.00000000E+0, 0.00000000E+0, 0.14737544E+4, 0.940E+2, 0.740E+2, 0.00000000E+0, 0.00000000E+0, + 0.14836747E+4, 0.940E+2, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.13158080E+4, 0.940E+2, + 0.760E+2, 0.00000000E+0, 0.00000000E+0, 0.11842955E+4, 0.940E+2, 0.770E+2, 0.00000000E+0, + 0.00000000E+0, 0.96746430E+3, 0.940E+2, 0.780E+2, 0.00000000E+0, 0.00000000E+0, 0.89773860E+3, + 0.940E+2, 0.790E+2, 0.00000000E+0, 0.00000000E+0, 0.91479120E+3, 0.940E+2, 0.800E+2, + 0.00000000E+0, 0.00000000E+0, 0.14602247E+4, 0.940E+2, 0.810E+2, 0.00000000E+0, 0.00000000E+0, + 0.13790263E+4, 0.940E+2, 0.820E+2, 0.00000000E+0, 0.00000000E+0, 0.12212647E+4, 0.940E+2, + 0.830E+2, 0.00000000E+0, 0.00000000E+0, 0.11407827E+4, 0.940E+2, 0.840E+2, 0.00000000E+0, + 0.00000000E+0, 0.10273948E+4, 0.940E+2, 0.850E+2, 0.00000000E+0, 0.00000000E+0, 0.92140470E+3, + 0.940E+2, 0.860E+2, 0.00000000E+0, 0.00000000E+0, 0.42885858E+4, 0.940E+2, 0.870E+2, + 0.00000000E+0, 0.00000000E+0, 0.38444325E+4, 0.940E+2, 0.880E+2, 0.00000000E+0, 0.00000000E+0, + 0.32695288E+4, 0.940E+2, 0.890E+2, 0.00000000E+0, 0.00000000E+0, 0.28146033E+4, 0.940E+2, + 0.900E+2, 0.00000000E+0, 0.00000000E+0, 0.28581875E+4, 0.940E+2, 0.910E+2, 0.00000000E+0, + 0.00000000E+0, 0.27642585E+4, 0.940E+2, 0.920E+2, 0.00000000E+0, 0.00000000E+0, 0.29218223E+4, + 0.940E+2, 0.930E+2, 0.00000000E+0, 0.00000000E+0, 0.28152366E+4, 0.940E+2, 0.940E+2, + 0.00000000E+0, 0.00000000E+0, 0.47379000E+1, 0.101E+3, 0.100E+1, 0.00000000E+0, 0.91180000E+0, + 0.31287000E+1, 0.101E+3, 0.200E+1, 0.00000000E+0, 0.00000000E+0, 0.68939100E+2, 0.101E+3, + 0.300E+1, 0.00000000E+0, 0.00000000E+0, 0.41307800E+2, 0.101E+3, 0.400E+1, 0.00000000E+0, + 0.00000000E+0, 0.28276700E+2, 0.101E+3, 0.500E+1, 0.00000000E+0, 0.00000000E+0, 0.19265300E+2, + 0.101E+3, 0.600E+1, 0.00000000E+0, 0.00000000E+0, 0.13516400E+2, 0.101E+3, 0.700E+1, + 0.00000000E+0, 0.00000000E+0, 0.10237100E+2, 0.101E+3, 0.800E+1, 0.00000000E+0, 0.00000000E+0, + 0.77441000E+1, 0.101E+3, 0.900E+1, 0.00000000E+0, 0.00000000E+0, 0.59403000E+1, 0.101E+3, + 0.100E+2, 0.00000000E+0, 0.00000000E+0, 0.82564100E+2, 0.101E+3, 0.110E+2, 0.00000000E+0, + 0.00000000E+0, 0.65370300E+2, 0.101E+3, 0.120E+2, 0.00000000E+0, 0.00000000E+0, 0.60855800E+2, + 0.101E+3, 0.130E+2, 0.00000000E+0, 0.00000000E+0, 0.48518200E+2, 0.101E+3, 0.140E+2, + 0.00000000E+0, 0.00000000E+0, 0.38139700E+2, 0.101E+3, 0.150E+2, 0.00000000E+0, 0.00000000E+0, + 0.31771300E+2, 0.101E+3, 0.160E+2, 0.00000000E+0, 0.00000000E+0, 0.26017000E+2, 0.101E+3, + 0.170E+2, 0.00000000E+0, 0.00000000E+0, 0.21305500E+2, 0.101E+3, 0.180E+2, 0.00000000E+0, + 0.00000000E+0, 0.13444410E+3, 0.101E+3, 0.190E+2, 0.00000000E+0, 0.00000000E+0, 0.11348570E+3, + 0.101E+3, 0.200E+2, 0.00000000E+0, 0.00000000E+0, 0.94208300E+2, 0.101E+3, 0.210E+2, + 0.00000000E+0, 0.00000000E+0, 0.91333400E+2, 0.101E+3, 0.220E+2, 0.00000000E+0, 0.00000000E+0, + 0.83831300E+2, 0.101E+3, 0.230E+2, 0.00000000E+0, 0.00000000E+0, 0.65983700E+2, 0.101E+3, + 0.240E+2, 0.00000000E+0, 0.00000000E+0, 0.72411100E+2, 0.101E+3, 0.250E+2, 0.00000000E+0, + 0.00000000E+0, 0.56799300E+2, 0.101E+3, 0.260E+2, 0.00000000E+0, 0.00000000E+0, 0.60574600E+2, + 0.101E+3, 0.270E+2, 0.00000000E+0, 0.00000000E+0, 0.62253200E+2, 0.101E+3, 0.280E+2, + 0.00000000E+0, 0.00000000E+0, 0.47649900E+2, 0.101E+3, 0.290E+2, 0.00000000E+0, 0.00000000E+0, + 0.49346900E+2, 0.101E+3, 0.300E+2, 0.00000000E+0, 0.00000000E+0, 0.58420700E+2, 0.101E+3, + 0.310E+2, 0.00000000E+0, 0.00000000E+0, 0.51990500E+2, 0.101E+3, 0.320E+2, 0.00000000E+0, + 0.00000000E+0, 0.44651200E+2, 0.101E+3, 0.330E+2, 0.00000000E+0, 0.00000000E+0, 0.40201000E+2, + 0.101E+3, 0.340E+2, 0.00000000E+0, 0.00000000E+0, 0.35274000E+2, 0.101E+3, 0.350E+2, + 0.00000000E+0, 0.00000000E+0, 0.30726100E+2, 0.101E+3, 0.360E+2, 0.00000000E+0, 0.00000000E+0, + 0.15093400E+3, 0.101E+3, 0.370E+2, 0.00000000E+0, 0.00000000E+0, 0.13506640E+3, 0.101E+3, + 0.380E+2, 0.00000000E+0, 0.00000000E+0, 0.11929610E+3, 0.101E+3, 0.390E+2, 0.00000000E+0, + 0.00000000E+0, 0.10773060E+3, 0.101E+3, 0.400E+2, 0.00000000E+0, 0.00000000E+0, 0.98518300E+2, + 0.101E+3, 0.410E+2, 0.00000000E+0, 0.00000000E+0, 0.76366100E+2, 0.101E+3, 0.420E+2, + 0.00000000E+0, 0.00000000E+0, 0.85080000E+2, 0.101E+3, 0.430E+2, 0.00000000E+0, 0.00000000E+0, + 0.65086300E+2, 0.101E+3, 0.440E+2, 0.00000000E+0, 0.00000000E+0, 0.71198500E+2, 0.101E+3, + 0.450E+2, 0.00000000E+0, 0.00000000E+0, 0.66121100E+2, 0.101E+3, 0.460E+2, 0.00000000E+0, + 0.00000000E+0, 0.54965800E+2, 0.101E+3, 0.470E+2, 0.00000000E+0, 0.00000000E+0, 0.58356800E+2, + 0.101E+3, 0.480E+2, 0.00000000E+0, 0.00000000E+0, 0.72907600E+2, 0.101E+3, 0.490E+2, + 0.00000000E+0, 0.00000000E+0, 0.67943000E+2, 0.101E+3, 0.500E+2, 0.00000000E+0, 0.00000000E+0, + 0.60947000E+2, 0.101E+3, 0.510E+2, 0.00000000E+0, 0.00000000E+0, 0.56742700E+2, 0.101E+3, + 0.520E+2, 0.00000000E+0, 0.00000000E+0, 0.51465600E+2, 0.101E+3, 0.530E+2, 0.00000000E+0, + 0.00000000E+0, 0.46379400E+2, 0.101E+3, 0.540E+2, 0.00000000E+0, 0.00000000E+0, 0.18402230E+3, + 0.101E+3, 0.550E+2, 0.00000000E+0, 0.00000000E+0, 0.17170330E+3, 0.101E+3, 0.560E+2, + 0.00000000E+0, 0.00000000E+0, 0.15211060E+3, 0.101E+3, 0.570E+2, 0.00000000E+0, 0.00000000E+0, + 0.71883000E+2, 0.101E+3, 0.580E+2, 0.00000000E+0, 0.27991000E+1, 0.15245020E+3, 0.101E+3, + 0.590E+2, 0.00000000E+0, 0.00000000E+0, 0.14658510E+3, 0.101E+3, 0.600E+2, 0.00000000E+0, + 0.00000000E+0, 0.14296200E+3, 0.101E+3, 0.610E+2, 0.00000000E+0, 0.00000000E+0, 0.13962540E+3, + 0.101E+3, 0.620E+2, 0.00000000E+0, 0.00000000E+0, 0.13666950E+3, 0.101E+3, 0.630E+2, + 0.00000000E+0, 0.00000000E+0, 0.10836620E+3, 0.101E+3, 0.640E+2, 0.00000000E+0, 0.00000000E+0, + 0.12040560E+3, 0.101E+3, 0.650E+2, 0.00000000E+0, 0.00000000E+0, 0.11631780E+3, 0.101E+3, + 0.660E+2, 0.00000000E+0, 0.00000000E+0, 0.12352200E+3, 0.101E+3, 0.670E+2, 0.00000000E+0, + 0.00000000E+0, 0.12093020E+3, 0.101E+3, 0.680E+2, 0.00000000E+0, 0.00000000E+0, 0.11860700E+3, + 0.101E+3, 0.690E+2, 0.00000000E+0, 0.00000000E+0, 0.11718110E+3, 0.101E+3, 0.700E+2, + 0.00000000E+0, 0.00000000E+0, 0.99298400E+2, 0.101E+3, 0.710E+2, 0.00000000E+0, 0.00000000E+0, + 0.98513600E+2, 0.101E+3, 0.720E+2, 0.00000000E+0, 0.00000000E+0, 0.90285800E+2, 0.101E+3, + 0.730E+2, 0.00000000E+0, 0.00000000E+0, 0.76415000E+2, 0.101E+3, 0.740E+2, 0.00000000E+0, + 0.00000000E+0, 0.77879300E+2, 0.101E+3, 0.750E+2, 0.00000000E+0, 0.00000000E+0, 0.70802400E+2, + 0.101E+3, 0.760E+2, 0.00000000E+0, 0.00000000E+0, 0.64989000E+2, 0.101E+3, 0.770E+2, + 0.00000000E+0, 0.00000000E+0, 0.54045100E+2, 0.101E+3, 0.780E+2, 0.00000000E+0, 0.00000000E+0, + 0.50508600E+2, 0.101E+3, 0.790E+2, 0.00000000E+0, 0.00000000E+0, 0.52054700E+2, 0.101E+3, + 0.800E+2, 0.00000000E+0, 0.00000000E+0, 0.74881700E+2, 0.101E+3, 0.810E+2, 0.00000000E+0, + 0.00000000E+0, 0.73669200E+2, 0.101E+3, 0.820E+2, 0.00000000E+0, 0.00000000E+0, 0.68103100E+2, + 0.101E+3, 0.830E+2, 0.00000000E+0, 0.00000000E+0, 0.65160500E+2, 0.101E+3, 0.840E+2, + 0.00000000E+0, 0.00000000E+0, 0.60333800E+2, 0.101E+3, 0.850E+2, 0.00000000E+0, 0.00000000E+0, + 0.55434500E+2, 0.101E+3, 0.860E+2, 0.00000000E+0, 0.00000000E+0, 0.17492120E+3, 0.101E+3, + 0.870E+2, 0.00000000E+0, 0.00000000E+0, 0.17050820E+3, 0.101E+3, 0.880E+2, 0.00000000E+0, + 0.00000000E+0, 0.15181390E+3, 0.101E+3, 0.890E+2, 0.00000000E+0, 0.00000000E+0, 0.13747240E+3, + 0.101E+3, 0.900E+2, 0.00000000E+0, 0.00000000E+0, 0.13587010E+3, 0.101E+3, 0.910E+2, + 0.00000000E+0, 0.00000000E+0, 0.13156440E+3, 0.101E+3, 0.920E+2, 0.00000000E+0, 0.00000000E+0, + 0.13473040E+3, 0.101E+3, 0.930E+2, 0.00000000E+0, 0.00000000E+0, 0.13059460E+3, 0.101E+3, + 0.940E+2, 0.00000000E+0, 0.00000000E+0, 0.75916000E+1, 0.101E+3, 0.101E+3, 0.00000000E+0, + 0.00000000E+0, 0.14316500E+2, 0.103E+3, 0.100E+1, 0.98650000E+0, 0.91180000E+0, 0.87773000E+1, + 0.103E+3, 0.200E+1, 0.98650000E+0, 0.00000000E+0, 0.28221060E+3, 0.103E+3, 0.300E+1, + 0.98650000E+0, 0.00000000E+0, 0.14813230E+3, 0.103E+3, 0.400E+1, 0.98650000E+0, 0.00000000E+0, + 0.93672900E+2, 0.103E+3, 0.500E+1, 0.98650000E+0, 0.00000000E+0, 0.60086000E+2, 0.103E+3, + 0.600E+1, 0.98650000E+0, 0.00000000E+0, 0.40294400E+2, 0.103E+3, 0.700E+1, 0.98650000E+0, + 0.00000000E+0, 0.29557500E+2, 0.103E+3, 0.800E+1, 0.98650000E+0, 0.00000000E+0, 0.21760500E+2, + 0.103E+3, 0.900E+1, 0.98650000E+0, 0.00000000E+0, 0.16338800E+2, 0.103E+3, 0.100E+2, + 0.98650000E+0, 0.00000000E+0, 0.33534500E+3, 0.103E+3, 0.110E+2, 0.98650000E+0, 0.00000000E+0, + 0.24016270E+3, 0.103E+3, 0.120E+2, 0.98650000E+0, 0.00000000E+0, 0.21472650E+3, 0.103E+3, + 0.130E+2, 0.98650000E+0, 0.00000000E+0, 0.16205080E+3, 0.103E+3, 0.140E+2, 0.98650000E+0, + 0.00000000E+0, 0.12150670E+3, 0.103E+3, 0.150E+2, 0.98650000E+0, 0.00000000E+0, 0.98124900E+2, + 0.103E+3, 0.160E+2, 0.98650000E+0, 0.00000000E+0, 0.77986500E+2, 0.103E+3, 0.170E+2, + 0.98650000E+0, 0.00000000E+0, 0.62220500E+2, 0.103E+3, 0.180E+2, 0.98650000E+0, 0.00000000E+0, + 0.55515160E+3, 0.103E+3, 0.190E+2, 0.98650000E+0, 0.00000000E+0, 0.43415760E+3, 0.103E+3, + 0.200E+2, 0.98650000E+0, 0.00000000E+0, 0.35403170E+3, 0.103E+3, 0.210E+2, 0.98650000E+0, + 0.00000000E+0, 0.33738960E+3, 0.103E+3, 0.220E+2, 0.98650000E+0, 0.00000000E+0, 0.30654820E+3, + 0.103E+3, 0.230E+2, 0.98650000E+0, 0.00000000E+0, 0.24050330E+3, 0.103E+3, 0.240E+2, + 0.98650000E+0, 0.00000000E+0, 0.26090190E+3, 0.103E+3, 0.250E+2, 0.98650000E+0, 0.00000000E+0, + 0.20361490E+3, 0.103E+3, 0.260E+2, 0.98650000E+0, 0.00000000E+0, 0.21289780E+3, 0.103E+3, + 0.270E+2, 0.98650000E+0, 0.00000000E+0, 0.22117390E+3, 0.103E+3, 0.280E+2, 0.98650000E+0, + 0.00000000E+0, 0.16880750E+3, 0.103E+3, 0.290E+2, 0.98650000E+0, 0.00000000E+0, 0.16949490E+3, + 0.103E+3, 0.300E+2, 0.98650000E+0, 0.00000000E+0, 0.20269000E+3, 0.103E+3, 0.310E+2, + 0.98650000E+0, 0.00000000E+0, 0.17294250E+3, 0.103E+3, 0.320E+2, 0.98650000E+0, 0.00000000E+0, + 0.14284710E+3, 0.103E+3, 0.330E+2, 0.98650000E+0, 0.00000000E+0, 0.12547680E+3, 0.103E+3, + 0.340E+2, 0.98650000E+0, 0.00000000E+0, 0.10733800E+3, 0.103E+3, 0.350E+2, 0.98650000E+0, + 0.00000000E+0, 0.91333300E+2, 0.103E+3, 0.360E+2, 0.98650000E+0, 0.00000000E+0, 0.61856810E+3, + 0.103E+3, 0.370E+2, 0.98650000E+0, 0.00000000E+0, 0.51783930E+3, 0.103E+3, 0.380E+2, + 0.98650000E+0, 0.00000000E+0, 0.44294480E+3, 0.103E+3, 0.390E+2, 0.98650000E+0, 0.00000000E+0, + 0.39191790E+3, 0.103E+3, 0.400E+2, 0.98650000E+0, 0.00000000E+0, 0.35350080E+3, 0.103E+3, + 0.410E+2, 0.98650000E+0, 0.00000000E+0, 0.26737610E+3, 0.103E+3, 0.420E+2, 0.98650000E+0, + 0.00000000E+0, 0.30065330E+3, 0.103E+3, 0.430E+2, 0.98650000E+0, 0.00000000E+0, 0.22388710E+3, + 0.103E+3, 0.440E+2, 0.98650000E+0, 0.00000000E+0, 0.24525610E+3, 0.103E+3, 0.450E+2, + 0.98650000E+0, 0.00000000E+0, 0.22580420E+3, 0.103E+3, 0.460E+2, 0.98650000E+0, 0.00000000E+0, + 0.18833740E+3, 0.103E+3, 0.470E+2, 0.98650000E+0, 0.00000000E+0, 0.19709400E+3, 0.103E+3, + 0.480E+2, 0.98650000E+0, 0.00000000E+0, 0.25313700E+3, 0.103E+3, 0.490E+2, 0.98650000E+0, + 0.00000000E+0, 0.22808140E+3, 0.103E+3, 0.500E+2, 0.98650000E+0, 0.00000000E+0, 0.19776980E+3, + 0.103E+3, 0.510E+2, 0.98650000E+0, 0.00000000E+0, 0.18030560E+3, 0.103E+3, 0.520E+2, + 0.98650000E+0, 0.00000000E+0, 0.15986700E+3, 0.103E+3, 0.530E+2, 0.98650000E+0, 0.00000000E+0, + 0.14098180E+3, 0.103E+3, 0.540E+2, 0.98650000E+0, 0.00000000E+0, 0.75234180E+3, 0.103E+3, + 0.550E+2, 0.98650000E+0, 0.00000000E+0, 0.66457190E+3, 0.103E+3, 0.560E+2, 0.98650000E+0, + 0.00000000E+0, 0.57042660E+3, 0.103E+3, 0.570E+2, 0.98650000E+0, 0.00000000E+0, 0.23452710E+3, + 0.103E+3, 0.580E+2, 0.98650000E+0, 0.27991000E+1, 0.58397970E+3, 0.103E+3, 0.590E+2, + 0.98650000E+0, 0.00000000E+0, 0.55869720E+3, 0.103E+3, 0.600E+2, 0.98650000E+0, 0.00000000E+0, + 0.54412320E+3, 0.103E+3, 0.610E+2, 0.98650000E+0, 0.00000000E+0, 0.53079090E+3, 0.103E+3, + 0.620E+2, 0.98650000E+0, 0.00000000E+0, 0.51894980E+3, 0.103E+3, 0.630E+2, 0.98650000E+0, + 0.00000000E+0, 0.39672230E+3, 0.103E+3, 0.640E+2, 0.98650000E+0, 0.00000000E+0, 0.46354420E+3, + 0.103E+3, 0.650E+2, 0.98650000E+0, 0.00000000E+0, 0.44501010E+3, 0.103E+3, 0.660E+2, + 0.98650000E+0, 0.00000000E+0, 0.46541000E+3, 0.103E+3, 0.670E+2, 0.98650000E+0, 0.00000000E+0, + 0.45528270E+3, 0.103E+3, 0.680E+2, 0.98650000E+0, 0.00000000E+0, 0.44600300E+3, 0.103E+3, + 0.690E+2, 0.98650000E+0, 0.00000000E+0, 0.44132200E+3, 0.103E+3, 0.700E+2, 0.98650000E+0, + 0.00000000E+0, 0.36474670E+3, 0.103E+3, 0.710E+2, 0.98650000E+0, 0.00000000E+0, 0.35006170E+3, + 0.103E+3, 0.720E+2, 0.98650000E+0, 0.00000000E+0, 0.31424830E+3, 0.103E+3, 0.730E+2, + 0.98650000E+0, 0.00000000E+0, 0.26138330E+3, 0.103E+3, 0.740E+2, 0.98650000E+0, 0.00000000E+0, + 0.26436970E+3, 0.103E+3, 0.750E+2, 0.98650000E+0, 0.00000000E+0, 0.23602580E+3, 0.103E+3, + 0.760E+2, 0.98650000E+0, 0.00000000E+0, 0.21346440E+3, 0.103E+3, 0.770E+2, 0.98650000E+0, + 0.00000000E+0, 0.17461320E+3, 0.103E+3, 0.780E+2, 0.98650000E+0, 0.00000000E+0, 0.16213420E+3, + 0.103E+3, 0.790E+2, 0.98650000E+0, 0.00000000E+0, 0.16604890E+3, 0.103E+3, 0.800E+2, + 0.98650000E+0, 0.00000000E+0, 0.25738230E+3, 0.103E+3, 0.810E+2, 0.98650000E+0, 0.00000000E+0, + 0.24683550E+3, 0.103E+3, 0.820E+2, 0.98650000E+0, 0.00000000E+0, 0.22143250E+3, 0.103E+3, + 0.830E+2, 0.98650000E+0, 0.00000000E+0, 0.20812690E+3, 0.103E+3, 0.840E+2, 0.98650000E+0, + 0.00000000E+0, 0.18860730E+3, 0.103E+3, 0.850E+2, 0.98650000E+0, 0.00000000E+0, 0.16989430E+3, + 0.103E+3, 0.860E+2, 0.98650000E+0, 0.00000000E+0, 0.69764490E+3, 0.103E+3, 0.870E+2, + 0.98650000E+0, 0.00000000E+0, 0.64903250E+3, 0.103E+3, 0.880E+2, 0.98650000E+0, 0.00000000E+0, + 0.56135190E+3, 0.103E+3, 0.890E+2, 0.98650000E+0, 0.00000000E+0, 0.49107770E+3, 0.103E+3, + 0.900E+2, 0.98650000E+0, 0.00000000E+0, 0.49346510E+3, 0.103E+3, 0.910E+2, 0.98650000E+0, + 0.00000000E+0, 0.47742540E+3, 0.103E+3, 0.920E+2, 0.98650000E+0, 0.00000000E+0, 0.49952020E+3, + 0.103E+3, 0.930E+2, 0.98650000E+0, 0.00000000E+0, 0.48234660E+3, 0.103E+3, 0.940E+2, + 0.98650000E+0, 0.00000000E+0, 0.24057300E+2, 0.103E+3, 0.101E+3, 0.98650000E+0, 0.00000000E+0, + 0.85319700E+2, 0.103E+3, 0.103E+3, 0.98650000E+0, 0.98650000E+0, 0.18465600E+2, 0.104E+3, + 0.100E+1, 0.98080000E+0, 0.91180000E+0, 0.11465500E+2, 0.104E+3, 0.200E+1, 0.98080000E+0, + 0.00000000E+0, 0.35221600E+3, 0.104E+3, 0.300E+1, 0.98080000E+0, 0.00000000E+0, 0.18634530E+3, + 0.104E+3, 0.400E+1, 0.98080000E+0, 0.00000000E+0, 0.11908150E+3, 0.104E+3, 0.500E+1, + 0.98080000E+0, 0.00000000E+0, 0.77095100E+2, 0.104E+3, 0.600E+1, 0.98080000E+0, 0.00000000E+0, + 0.52085200E+2, 0.104E+3, 0.700E+1, 0.98080000E+0, 0.00000000E+0, 0.38413200E+2, 0.104E+3, + 0.800E+1, 0.98080000E+0, 0.00000000E+0, 0.28409800E+2, 0.104E+3, 0.900E+1, 0.98080000E+0, + 0.00000000E+0, 0.21406700E+2, 0.104E+3, 0.100E+2, 0.98080000E+0, 0.00000000E+0, 0.41864880E+3, + 0.104E+3, 0.110E+2, 0.98080000E+0, 0.00000000E+0, 0.30137770E+3, 0.104E+3, 0.120E+2, + 0.98080000E+0, 0.00000000E+0, 0.27074610E+3, 0.104E+3, 0.130E+2, 0.98080000E+0, 0.00000000E+0, + 0.20575440E+3, 0.104E+3, 0.140E+2, 0.98080000E+0, 0.00000000E+0, 0.15536440E+3, 0.104E+3, + 0.150E+2, 0.98080000E+0, 0.00000000E+0, 0.12609930E+3, 0.104E+3, 0.160E+2, 0.98080000E+0, + 0.00000000E+0, 0.10072120E+3, 0.104E+3, 0.170E+2, 0.98080000E+0, 0.00000000E+0, 0.80717400E+2, + 0.104E+3, 0.180E+2, 0.98080000E+0, 0.00000000E+0, 0.69485960E+3, 0.104E+3, 0.190E+2, + 0.98080000E+0, 0.00000000E+0, 0.54358420E+3, 0.104E+3, 0.200E+2, 0.98080000E+0, 0.00000000E+0, + 0.44371900E+3, 0.104E+3, 0.210E+2, 0.98080000E+0, 0.00000000E+0, 0.42362170E+3, 0.104E+3, + 0.220E+2, 0.98080000E+0, 0.00000000E+0, 0.38527540E+3, 0.104E+3, 0.230E+2, 0.98080000E+0, + 0.00000000E+0, 0.30260610E+3, 0.104E+3, 0.240E+2, 0.98080000E+0, 0.00000000E+0, 0.32840120E+3, + 0.104E+3, 0.250E+2, 0.98080000E+0, 0.00000000E+0, 0.25660430E+3, 0.104E+3, 0.260E+2, + 0.98080000E+0, 0.00000000E+0, 0.26862840E+3, 0.104E+3, 0.270E+2, 0.98080000E+0, 0.00000000E+0, + 0.27871160E+3, 0.104E+3, 0.280E+2, 0.98080000E+0, 0.00000000E+0, 0.21297970E+3, 0.104E+3, + 0.290E+2, 0.98080000E+0, 0.00000000E+0, 0.21442560E+3, 0.104E+3, 0.300E+2, 0.98080000E+0, + 0.00000000E+0, 0.25620490E+3, 0.104E+3, 0.310E+2, 0.98080000E+0, 0.00000000E+0, 0.21973750E+3, + 0.104E+3, 0.320E+2, 0.98080000E+0, 0.00000000E+0, 0.18253380E+3, 0.104E+3, 0.330E+2, + 0.98080000E+0, 0.00000000E+0, 0.16096870E+3, 0.104E+3, 0.340E+2, 0.98080000E+0, 0.00000000E+0, + 0.13827470E+3, 0.104E+3, 0.350E+2, 0.98080000E+0, 0.00000000E+0, 0.11812400E+3, 0.104E+3, + 0.360E+2, 0.98080000E+0, 0.00000000E+0, 0.77496560E+3, 0.104E+3, 0.370E+2, 0.98080000E+0, + 0.00000000E+0, 0.64864220E+3, 0.104E+3, 0.380E+2, 0.98080000E+0, 0.00000000E+0, 0.55615030E+3, + 0.104E+3, 0.390E+2, 0.98080000E+0, 0.00000000E+0, 0.49301000E+3, 0.104E+3, 0.400E+2, + 0.98080000E+0, 0.00000000E+0, 0.44537360E+3, 0.104E+3, 0.410E+2, 0.98080000E+0, 0.00000000E+0, + 0.33790350E+3, 0.104E+3, 0.420E+2, 0.98080000E+0, 0.00000000E+0, 0.37952540E+3, 0.104E+3, + 0.430E+2, 0.98080000E+0, 0.00000000E+0, 0.28356950E+3, 0.104E+3, 0.440E+2, 0.98080000E+0, + 0.00000000E+0, 0.31037810E+3, 0.104E+3, 0.450E+2, 0.98080000E+0, 0.00000000E+0, 0.28603950E+3, + 0.104E+3, 0.460E+2, 0.98080000E+0, 0.00000000E+0, 0.23869620E+3, 0.104E+3, 0.470E+2, + 0.98080000E+0, 0.00000000E+0, 0.24999150E+3, 0.104E+3, 0.480E+2, 0.98080000E+0, 0.00000000E+0, + 0.32009120E+3, 0.104E+3, 0.490E+2, 0.98080000E+0, 0.00000000E+0, 0.28947130E+3, 0.104E+3, + 0.500E+2, 0.98080000E+0, 0.00000000E+0, 0.25216490E+3, 0.104E+3, 0.510E+2, 0.98080000E+0, + 0.00000000E+0, 0.23063090E+3, 0.104E+3, 0.520E+2, 0.98080000E+0, 0.00000000E+0, 0.20522370E+3, + 0.104E+3, 0.530E+2, 0.98080000E+0, 0.00000000E+0, 0.18162600E+3, 0.104E+3, 0.540E+2, + 0.98080000E+0, 0.00000000E+0, 0.94385470E+3, 0.104E+3, 0.550E+2, 0.98080000E+0, 0.00000000E+0, + 0.83262510E+3, 0.104E+3, 0.560E+2, 0.98080000E+0, 0.00000000E+0, 0.71607580E+3, 0.104E+3, + 0.570E+2, 0.98080000E+0, 0.00000000E+0, 0.29887820E+3, 0.104E+3, 0.580E+2, 0.98080000E+0, + 0.27991000E+1, 0.73216420E+3, 0.104E+3, 0.590E+2, 0.98080000E+0, 0.00000000E+0, 0.70044420E+3, + 0.104E+3, 0.600E+2, 0.98080000E+0, 0.00000000E+0, 0.68219010E+3, 0.104E+3, 0.610E+2, + 0.98080000E+0, 0.00000000E+0, 0.66548680E+3, 0.104E+3, 0.620E+2, 0.98080000E+0, 0.00000000E+0, + 0.65065570E+3, 0.104E+3, 0.630E+2, 0.98080000E+0, 0.00000000E+0, 0.49918370E+3, 0.104E+3, + 0.640E+2, 0.98080000E+0, 0.00000000E+0, 0.58212240E+3, 0.104E+3, 0.650E+2, 0.98080000E+0, + 0.00000000E+0, 0.55929170E+3, 0.104E+3, 0.660E+2, 0.98080000E+0, 0.00000000E+0, 0.58370670E+3, + 0.104E+3, 0.670E+2, 0.98080000E+0, 0.00000000E+0, 0.57100390E+3, 0.104E+3, 0.680E+2, + 0.98080000E+0, 0.00000000E+0, 0.55938980E+3, 0.104E+3, 0.690E+2, 0.98080000E+0, 0.00000000E+0, + 0.55342660E+3, 0.104E+3, 0.700E+2, 0.98080000E+0, 0.00000000E+0, 0.45865820E+3, 0.104E+3, + 0.710E+2, 0.98080000E+0, 0.00000000E+0, 0.44137890E+3, 0.104E+3, 0.720E+2, 0.98080000E+0, + 0.00000000E+0, 0.39713120E+3, 0.104E+3, 0.730E+2, 0.98080000E+0, 0.00000000E+0, 0.33121240E+3, + 0.104E+3, 0.740E+2, 0.98080000E+0, 0.00000000E+0, 0.33522610E+3, 0.104E+3, 0.750E+2, + 0.98080000E+0, 0.00000000E+0, 0.29995650E+3, 0.104E+3, 0.760E+2, 0.98080000E+0, 0.00000000E+0, + 0.27181190E+3, 0.104E+3, 0.770E+2, 0.98080000E+0, 0.00000000E+0, 0.22291570E+3, 0.104E+3, + 0.780E+2, 0.98080000E+0, 0.00000000E+0, 0.20718310E+3, 0.104E+3, 0.790E+2, 0.98080000E+0, + 0.00000000E+0, 0.21231320E+3, 0.104E+3, 0.800E+2, 0.98080000E+0, 0.00000000E+0, 0.32610680E+3, + 0.104E+3, 0.810E+2, 0.98080000E+0, 0.00000000E+0, 0.31346750E+3, 0.104E+3, 0.820E+2, + 0.98080000E+0, 0.00000000E+0, 0.28229350E+3, 0.104E+3, 0.830E+2, 0.98080000E+0, 0.00000000E+0, + 0.26602000E+3, 0.104E+3, 0.840E+2, 0.98080000E+0, 0.00000000E+0, 0.24186880E+3, 0.104E+3, + 0.850E+2, 0.98080000E+0, 0.00000000E+0, 0.21856870E+3, 0.104E+3, 0.860E+2, 0.98080000E+0, + 0.00000000E+0, 0.87585630E+3, 0.104E+3, 0.870E+2, 0.98080000E+0, 0.00000000E+0, 0.81413080E+3, + 0.104E+3, 0.880E+2, 0.98080000E+0, 0.00000000E+0, 0.70540110E+3, 0.104E+3, 0.890E+2, + 0.98080000E+0, 0.00000000E+0, 0.61906050E+3, 0.104E+3, 0.900E+2, 0.98080000E+0, 0.00000000E+0, + 0.62133990E+3, 0.104E+3, 0.910E+2, 0.98080000E+0, 0.00000000E+0, 0.60114960E+3, 0.104E+3, + 0.920E+2, 0.98080000E+0, 0.00000000E+0, 0.62763850E+3, 0.104E+3, 0.930E+2, 0.98080000E+0, + 0.00000000E+0, 0.60621390E+3, 0.104E+3, 0.940E+2, 0.98080000E+0, 0.00000000E+0, 0.30786600E+2, + 0.104E+3, 0.101E+3, 0.98080000E+0, 0.00000000E+0, 0.10750830E+3, 0.104E+3, 0.103E+3, + 0.98080000E+0, 0.98650000E+0, 0.13584450E+3, 0.104E+3, 0.104E+3, 0.98080000E+0, 0.98080000E+0, + 0.14723700E+2, 0.105E+3, 0.100E+1, 0.97060000E+0, 0.91180000E+0, 0.95836000E+1, 0.105E+3, + 0.200E+1, 0.97060000E+0, 0.00000000E+0, 0.23142090E+3, 0.105E+3, 0.300E+1, 0.97060000E+0, + 0.00000000E+0, 0.13372650E+3, 0.105E+3, 0.400E+1, 0.97060000E+0, 0.00000000E+0, 0.89742900E+2, + 0.105E+3, 0.500E+1, 0.97060000E+0, 0.00000000E+0, 0.60299600E+2, 0.105E+3, 0.600E+1, + 0.97060000E+0, 0.00000000E+0, 0.41901500E+2, 0.105E+3, 0.700E+1, 0.97060000E+0, 0.00000000E+0, + 0.31535400E+2, 0.105E+3, 0.800E+1, 0.97060000E+0, 0.00000000E+0, 0.23736900E+2, 0.105E+3, + 0.900E+1, 0.97060000E+0, 0.00000000E+0, 0.18142400E+2, 0.105E+3, 0.100E+2, 0.97060000E+0, + 0.00000000E+0, 0.27656710E+3, 0.105E+3, 0.110E+2, 0.97060000E+0, 0.00000000E+0, 0.21299790E+3, + 0.105E+3, 0.120E+2, 0.97060000E+0, 0.00000000E+0, 0.19620140E+3, 0.105E+3, 0.130E+2, + 0.97060000E+0, 0.00000000E+0, 0.15429010E+3, 0.105E+3, 0.140E+2, 0.97060000E+0, 0.00000000E+0, + 0.11993530E+3, 0.105E+3, 0.150E+2, 0.97060000E+0, 0.00000000E+0, 0.99215900E+2, 0.105E+3, + 0.160E+2, 0.97060000E+0, 0.00000000E+0, 0.80727200E+2, 0.105E+3, 0.170E+2, 0.97060000E+0, + 0.00000000E+0, 0.65758000E+2, 0.105E+3, 0.180E+2, 0.97060000E+0, 0.00000000E+0, 0.45251930E+3, + 0.105E+3, 0.190E+2, 0.97060000E+0, 0.00000000E+0, 0.37388150E+3, 0.105E+3, 0.200E+2, + 0.97060000E+0, 0.00000000E+0, 0.30887210E+3, 0.105E+3, 0.210E+2, 0.97060000E+0, 0.00000000E+0, + 0.29808710E+3, 0.105E+3, 0.220E+2, 0.97060000E+0, 0.00000000E+0, 0.27287470E+3, 0.105E+3, + 0.230E+2, 0.97060000E+0, 0.00000000E+0, 0.21463600E+3, 0.105E+3, 0.240E+2, 0.97060000E+0, + 0.00000000E+0, 0.23480000E+3, 0.105E+3, 0.250E+2, 0.97060000E+0, 0.00000000E+0, 0.18397370E+3, + 0.105E+3, 0.260E+2, 0.97060000E+0, 0.00000000E+0, 0.19517310E+3, 0.105E+3, 0.270E+2, + 0.97060000E+0, 0.00000000E+0, 0.20113510E+3, 0.105E+3, 0.280E+2, 0.97060000E+0, 0.00000000E+0, + 0.15388240E+3, 0.105E+3, 0.290E+2, 0.97060000E+0, 0.00000000E+0, 0.15808480E+3, 0.105E+3, + 0.300E+2, 0.97060000E+0, 0.00000000E+0, 0.18757970E+3, 0.105E+3, 0.310E+2, 0.97060000E+0, + 0.00000000E+0, 0.16519300E+3, 0.105E+3, 0.320E+2, 0.97060000E+0, 0.00000000E+0, 0.14056250E+3, + 0.105E+3, 0.330E+2, 0.97060000E+0, 0.00000000E+0, 0.12584370E+3, 0.105E+3, 0.340E+2, + 0.97060000E+0, 0.00000000E+0, 0.10980600E+3, 0.105E+3, 0.350E+2, 0.97060000E+0, 0.00000000E+0, + 0.95176300E+2, 0.105E+3, 0.360E+2, 0.97060000E+0, 0.00000000E+0, 0.50694210E+3, 0.105E+3, + 0.370E+2, 0.97060000E+0, 0.00000000E+0, 0.44526080E+3, 0.105E+3, 0.380E+2, 0.97060000E+0, + 0.00000000E+0, 0.38988230E+3, 0.105E+3, 0.390E+2, 0.97060000E+0, 0.00000000E+0, 0.35019700E+3, + 0.105E+3, 0.400E+2, 0.97060000E+0, 0.00000000E+0, 0.31911510E+3, 0.105E+3, 0.410E+2, + 0.97060000E+0, 0.00000000E+0, 0.24585270E+3, 0.105E+3, 0.420E+2, 0.97060000E+0, 0.00000000E+0, + 0.27453340E+3, 0.105E+3, 0.430E+2, 0.97060000E+0, 0.00000000E+0, 0.20863620E+3, 0.105E+3, + 0.440E+2, 0.97060000E+0, 0.00000000E+0, 0.22828220E+3, 0.105E+3, 0.450E+2, 0.97060000E+0, + 0.00000000E+0, 0.21155590E+3, 0.105E+3, 0.460E+2, 0.97060000E+0, 0.00000000E+0, 0.17606030E+3, + 0.105E+3, 0.470E+2, 0.97060000E+0, 0.00000000E+0, 0.18621990E+3, 0.105E+3, 0.480E+2, + 0.97060000E+0, 0.00000000E+0, 0.23421710E+3, 0.105E+3, 0.490E+2, 0.97060000E+0, 0.00000000E+0, + 0.21642760E+3, 0.105E+3, 0.500E+2, 0.97060000E+0, 0.00000000E+0, 0.19255420E+3, 0.105E+3, + 0.510E+2, 0.97060000E+0, 0.00000000E+0, 0.17839190E+3, 0.105E+3, 0.520E+2, 0.97060000E+0, + 0.00000000E+0, 0.16096790E+3, 0.105E+3, 0.530E+2, 0.97060000E+0, 0.00000000E+0, 0.14436970E+3, + 0.105E+3, 0.540E+2, 0.97060000E+0, 0.00000000E+0, 0.61760580E+3, 0.105E+3, 0.550E+2, + 0.97060000E+0, 0.00000000E+0, 0.56751360E+3, 0.105E+3, 0.560E+2, 0.97060000E+0, 0.00000000E+0, + 0.49845340E+3, 0.105E+3, 0.570E+2, 0.97060000E+0, 0.00000000E+0, 0.22741890E+3, 0.105E+3, + 0.580E+2, 0.97060000E+0, 0.27991000E+1, 0.50249670E+3, 0.105E+3, 0.590E+2, 0.97060000E+0, + 0.00000000E+0, 0.48250770E+3, 0.105E+3, 0.600E+2, 0.97060000E+0, 0.00000000E+0, 0.47040290E+3, + 0.105E+3, 0.610E+2, 0.97060000E+0, 0.00000000E+0, 0.45927530E+3, 0.105E+3, 0.620E+2, + 0.97060000E+0, 0.00000000E+0, 0.44941020E+3, 0.105E+3, 0.630E+2, 0.97060000E+0, 0.00000000E+0, + 0.35290870E+3, 0.105E+3, 0.640E+2, 0.97060000E+0, 0.00000000E+0, 0.39744990E+3, 0.105E+3, + 0.650E+2, 0.97060000E+0, 0.00000000E+0, 0.38329520E+3, 0.105E+3, 0.660E+2, 0.97060000E+0, + 0.00000000E+0, 0.40532850E+3, 0.105E+3, 0.670E+2, 0.97060000E+0, 0.00000000E+0, 0.39673770E+3, + 0.105E+3, 0.680E+2, 0.97060000E+0, 0.00000000E+0, 0.38898900E+3, 0.105E+3, 0.690E+2, + 0.97060000E+0, 0.00000000E+0, 0.38447010E+3, 0.105E+3, 0.700E+2, 0.97060000E+0, 0.00000000E+0, + 0.32364500E+3, 0.105E+3, 0.710E+2, 0.97060000E+0, 0.00000000E+0, 0.31828720E+3, 0.105E+3, + 0.720E+2, 0.97060000E+0, 0.00000000E+0, 0.29018010E+3, 0.105E+3, 0.730E+2, 0.97060000E+0, + 0.00000000E+0, 0.24456750E+3, 0.105E+3, 0.740E+2, 0.97060000E+0, 0.00000000E+0, 0.24877750E+3, + 0.105E+3, 0.750E+2, 0.97060000E+0, 0.00000000E+0, 0.22518190E+3, 0.105E+3, 0.760E+2, + 0.97060000E+0, 0.00000000E+0, 0.20597020E+3, 0.105E+3, 0.770E+2, 0.97060000E+0, 0.00000000E+0, + 0.17065560E+3, 0.105E+3, 0.780E+2, 0.97060000E+0, 0.00000000E+0, 0.15926350E+3, 0.105E+3, + 0.790E+2, 0.97060000E+0, 0.00000000E+0, 0.16388200E+3, 0.105E+3, 0.800E+2, 0.97060000E+0, + 0.00000000E+0, 0.24000000E+3, 0.105E+3, 0.810E+2, 0.97060000E+0, 0.00000000E+0, 0.23460480E+3, + 0.105E+3, 0.820E+2, 0.97060000E+0, 0.00000000E+0, 0.21530270E+3, 0.105E+3, 0.830E+2, + 0.97060000E+0, 0.00000000E+0, 0.20513340E+3, 0.105E+3, 0.840E+2, 0.97060000E+0, 0.00000000E+0, + 0.18899910E+3, 0.105E+3, 0.850E+2, 0.97060000E+0, 0.00000000E+0, 0.17288540E+3, 0.105E+3, + 0.860E+2, 0.97060000E+0, 0.00000000E+0, 0.58298150E+3, 0.105E+3, 0.870E+2, 0.97060000E+0, + 0.00000000E+0, 0.56100860E+3, 0.105E+3, 0.880E+2, 0.97060000E+0, 0.00000000E+0, 0.49563890E+3, + 0.105E+3, 0.890E+2, 0.97060000E+0, 0.00000000E+0, 0.44481020E+3, 0.105E+3, 0.900E+2, + 0.97060000E+0, 0.00000000E+0, 0.44155780E+3, 0.105E+3, 0.910E+2, 0.97060000E+0, 0.00000000E+0, + 0.42748070E+3, 0.105E+3, 0.920E+2, 0.97060000E+0, 0.00000000E+0, 0.44027100E+3, 0.105E+3, + 0.930E+2, 0.97060000E+0, 0.00000000E+0, 0.42632550E+3, 0.105E+3, 0.940E+2, 0.97060000E+0, + 0.00000000E+0, 0.23841200E+2, 0.105E+3, 0.101E+3, 0.97060000E+0, 0.00000000E+0, 0.77663300E+2, + 0.105E+3, 0.103E+3, 0.97060000E+0, 0.98650000E+0, 0.98993800E+2, 0.105E+3, 0.104E+3, + 0.97060000E+0, 0.98080000E+0, 0.75368600E+2, 0.105E+3, 0.105E+3, 0.97060000E+0, 0.97060000E+0, + 0.11393200E+2, 0.106E+3, 0.100E+1, 0.98680000E+0, 0.91180000E+0, 0.77065000E+1, 0.106E+3, + 0.200E+1, 0.98680000E+0, 0.00000000E+0, 0.16045900E+3, 0.106E+3, 0.300E+1, 0.98680000E+0, + 0.00000000E+0, 0.96543100E+2, 0.106E+3, 0.400E+1, 0.98680000E+0, 0.00000000E+0, 0.66798600E+2, + 0.106E+3, 0.500E+1, 0.98680000E+0, 0.00000000E+0, 0.46068100E+2, 0.106E+3, 0.600E+1, + 0.98680000E+0, 0.00000000E+0, 0.32700900E+2, 0.106E+3, 0.700E+1, 0.98680000E+0, 0.00000000E+0, + 0.25009700E+2, 0.106E+3, 0.800E+1, 0.98680000E+0, 0.00000000E+0, 0.19097400E+2, 0.106E+3, + 0.900E+1, 0.98680000E+0, 0.00000000E+0, 0.14771600E+2, 0.106E+3, 0.100E+2, 0.98680000E+0, + 0.00000000E+0, 0.19237290E+3, 0.106E+3, 0.110E+2, 0.98680000E+0, 0.00000000E+0, 0.15261300E+3, + 0.106E+3, 0.120E+2, 0.98680000E+0, 0.00000000E+0, 0.14260940E+3, 0.106E+3, 0.130E+2, + 0.98680000E+0, 0.00000000E+0, 0.11444050E+3, 0.106E+3, 0.140E+2, 0.98680000E+0, 0.00000000E+0, + 0.90676700E+2, 0.106E+3, 0.150E+2, 0.98680000E+0, 0.00000000E+0, 0.76055200E+2, 0.106E+3, + 0.160E+2, 0.98680000E+0, 0.00000000E+0, 0.62746500E+2, 0.106E+3, 0.170E+2, 0.98680000E+0, + 0.00000000E+0, 0.51768400E+2, 0.106E+3, 0.180E+2, 0.98680000E+0, 0.00000000E+0, 0.31458000E+3, + 0.106E+3, 0.190E+2, 0.98680000E+0, 0.00000000E+0, 0.26512060E+3, 0.106E+3, 0.200E+2, + 0.98680000E+0, 0.00000000E+0, 0.22018540E+3, 0.106E+3, 0.210E+2, 0.98680000E+0, 0.00000000E+0, + 0.21386820E+3, 0.106E+3, 0.220E+2, 0.98680000E+0, 0.00000000E+0, 0.19648850E+3, 0.106E+3, + 0.230E+2, 0.98680000E+0, 0.00000000E+0, 0.15511710E+3, 0.106E+3, 0.240E+2, 0.98680000E+0, + 0.00000000E+0, 0.16997960E+3, 0.106E+3, 0.250E+2, 0.98680000E+0, 0.00000000E+0, 0.13377000E+3, + 0.106E+3, 0.260E+2, 0.98680000E+0, 0.00000000E+0, 0.14251400E+3, 0.106E+3, 0.270E+2, + 0.98680000E+0, 0.00000000E+0, 0.14627110E+3, 0.106E+3, 0.280E+2, 0.98680000E+0, 0.00000000E+0, + 0.11239140E+3, 0.106E+3, 0.290E+2, 0.98680000E+0, 0.00000000E+0, 0.11639870E+3, 0.106E+3, + 0.300E+2, 0.98680000E+0, 0.00000000E+0, 0.13747230E+3, 0.106E+3, 0.310E+2, 0.98680000E+0, + 0.00000000E+0, 0.12288050E+3, 0.106E+3, 0.320E+2, 0.98680000E+0, 0.00000000E+0, 0.10616860E+3, + 0.106E+3, 0.330E+2, 0.98680000E+0, 0.00000000E+0, 0.96059900E+2, 0.106E+3, 0.340E+2, + 0.98680000E+0, 0.00000000E+0, 0.84772300E+2, 0.106E+3, 0.350E+2, 0.98680000E+0, 0.00000000E+0, + 0.74286500E+2, 0.106E+3, 0.360E+2, 0.98680000E+0, 0.00000000E+0, 0.35363020E+3, 0.106E+3, + 0.370E+2, 0.98680000E+0, 0.00000000E+0, 0.31589230E+3, 0.106E+3, 0.380E+2, 0.98680000E+0, + 0.00000000E+0, 0.27947270E+3, 0.106E+3, 0.390E+2, 0.98680000E+0, 0.00000000E+0, 0.25282130E+3, + 0.106E+3, 0.400E+2, 0.98680000E+0, 0.00000000E+0, 0.23159760E+3, 0.106E+3, 0.410E+2, + 0.98680000E+0, 0.00000000E+0, 0.18033900E+3, 0.106E+3, 0.420E+2, 0.98680000E+0, 0.00000000E+0, + 0.20054640E+3, 0.106E+3, 0.430E+2, 0.98680000E+0, 0.00000000E+0, 0.15419380E+3, 0.106E+3, + 0.440E+2, 0.98680000E+0, 0.00000000E+0, 0.16831150E+3, 0.106E+3, 0.450E+2, 0.98680000E+0, + 0.00000000E+0, 0.15650060E+3, 0.106E+3, 0.460E+2, 0.98680000E+0, 0.00000000E+0, 0.13051440E+3, + 0.106E+3, 0.470E+2, 0.98680000E+0, 0.00000000E+0, 0.13836720E+3, 0.106E+3, 0.480E+2, + 0.98680000E+0, 0.00000000E+0, 0.17212290E+3, 0.106E+3, 0.490E+2, 0.98680000E+0, 0.00000000E+0, + 0.16079100E+3, 0.106E+3, 0.500E+2, 0.98680000E+0, 0.00000000E+0, 0.14484620E+3, 0.106E+3, + 0.510E+2, 0.98680000E+0, 0.00000000E+0, 0.13531220E+3, 0.106E+3, 0.520E+2, 0.98680000E+0, + 0.00000000E+0, 0.12325380E+3, 0.106E+3, 0.530E+2, 0.98680000E+0, 0.00000000E+0, 0.11159230E+3, + 0.106E+3, 0.540E+2, 0.98680000E+0, 0.00000000E+0, 0.43151720E+3, 0.106E+3, 0.550E+2, + 0.98680000E+0, 0.00000000E+0, 0.40187740E+3, 0.106E+3, 0.560E+2, 0.98680000E+0, 0.00000000E+0, + 0.35646100E+3, 0.106E+3, 0.570E+2, 0.98680000E+0, 0.00000000E+0, 0.17092620E+3, 0.106E+3, + 0.580E+2, 0.98680000E+0, 0.27991000E+1, 0.35713990E+3, 0.106E+3, 0.590E+2, 0.98680000E+0, + 0.00000000E+0, 0.34341530E+3, 0.106E+3, 0.600E+2, 0.98680000E+0, 0.00000000E+0, 0.33492450E+3, + 0.106E+3, 0.610E+2, 0.98680000E+0, 0.00000000E+0, 0.32709910E+3, 0.106E+3, 0.620E+2, + 0.98680000E+0, 0.00000000E+0, 0.32016570E+3, 0.106E+3, 0.630E+2, 0.98680000E+0, 0.00000000E+0, + 0.25481220E+3, 0.106E+3, 0.640E+2, 0.98680000E+0, 0.00000000E+0, 0.28285470E+3, 0.106E+3, + 0.650E+2, 0.98680000E+0, 0.00000000E+0, 0.27333750E+3, 0.106E+3, 0.660E+2, 0.98680000E+0, + 0.00000000E+0, 0.28939200E+3, 0.106E+3, 0.670E+2, 0.98680000E+0, 0.00000000E+0, 0.28330010E+3, + 0.106E+3, 0.680E+2, 0.98680000E+0, 0.00000000E+0, 0.27784930E+3, 0.106E+3, 0.690E+2, + 0.98680000E+0, 0.00000000E+0, 0.27445000E+3, 0.106E+3, 0.700E+2, 0.98680000E+0, 0.00000000E+0, + 0.23313940E+3, 0.106E+3, 0.710E+2, 0.98680000E+0, 0.00000000E+0, 0.23163340E+3, 0.106E+3, + 0.720E+2, 0.98680000E+0, 0.00000000E+0, 0.21280410E+3, 0.106E+3, 0.730E+2, 0.98680000E+0, + 0.00000000E+0, 0.18084620E+3, 0.106E+3, 0.740E+2, 0.98680000E+0, 0.00000000E+0, 0.18435860E+3, + 0.106E+3, 0.750E+2, 0.98680000E+0, 0.00000000E+0, 0.16804770E+3, 0.106E+3, 0.760E+2, + 0.98680000E+0, 0.00000000E+0, 0.15462480E+3, 0.106E+3, 0.770E+2, 0.98680000E+0, 0.00000000E+0, + 0.12918350E+3, 0.106E+3, 0.780E+2, 0.98680000E+0, 0.00000000E+0, 0.12094850E+3, 0.106E+3, + 0.790E+2, 0.98680000E+0, 0.00000000E+0, 0.12459510E+3, 0.106E+3, 0.800E+2, 0.98680000E+0, + 0.00000000E+0, 0.17748530E+3, 0.106E+3, 0.810E+2, 0.98680000E+0, 0.00000000E+0, 0.17476750E+3, + 0.106E+3, 0.820E+2, 0.98680000E+0, 0.00000000E+0, 0.16207400E+3, 0.106E+3, 0.830E+2, + 0.98680000E+0, 0.00000000E+0, 0.15545060E+3, 0.106E+3, 0.840E+2, 0.98680000E+0, 0.00000000E+0, + 0.14445320E+3, 0.106E+3, 0.850E+2, 0.98680000E+0, 0.00000000E+0, 0.13324320E+3, 0.106E+3, + 0.860E+2, 0.98680000E+0, 0.00000000E+0, 0.41058600E+3, 0.106E+3, 0.870E+2, 0.98680000E+0, + 0.00000000E+0, 0.39952250E+3, 0.106E+3, 0.880E+2, 0.98680000E+0, 0.00000000E+0, 0.35611270E+3, + 0.106E+3, 0.890E+2, 0.98680000E+0, 0.00000000E+0, 0.32349590E+3, 0.106E+3, 0.900E+2, + 0.98680000E+0, 0.00000000E+0, 0.31967610E+3, 0.106E+3, 0.910E+2, 0.98680000E+0, 0.00000000E+0, + 0.30960820E+3, 0.106E+3, 0.920E+2, 0.98680000E+0, 0.00000000E+0, 0.31659670E+3, 0.106E+3, + 0.930E+2, 0.98680000E+0, 0.00000000E+0, 0.30693030E+3, 0.106E+3, 0.940E+2, 0.98680000E+0, + 0.00000000E+0, 0.18057500E+2, 0.106E+3, 0.101E+3, 0.98680000E+0, 0.00000000E+0, 0.56346800E+2, + 0.106E+3, 0.103E+3, 0.98680000E+0, 0.98650000E+0, 0.72316200E+2, 0.106E+3, 0.104E+3, + 0.98680000E+0, 0.98080000E+0, 0.56529500E+2, 0.106E+3, 0.105E+3, 0.98680000E+0, 0.97060000E+0, + 0.43245200E+2, 0.106E+3, 0.106E+3, 0.98680000E+0, 0.98680000E+0, 0.81417000E+1, 0.107E+3, + 0.100E+1, 0.99440000E+0, 0.91180000E+0, 0.57601000E+1, 0.107E+3, 0.200E+1, 0.99440000E+0, + 0.00000000E+0, 0.10127010E+3, 0.107E+3, 0.300E+1, 0.99440000E+0, 0.00000000E+0, 0.63858000E+2, + 0.107E+3, 0.400E+1, 0.99440000E+0, 0.00000000E+0, 0.45731900E+2, 0.107E+3, 0.500E+1, + 0.99440000E+0, 0.00000000E+0, 0.32484800E+2, 0.107E+3, 0.600E+1, 0.99440000E+0, 0.00000000E+0, + 0.23629500E+2, 0.107E+3, 0.700E+1, 0.99440000E+0, 0.00000000E+0, 0.18412800E+2, 0.107E+3, + 0.800E+1, 0.99440000E+0, 0.00000000E+0, 0.14301500E+2, 0.107E+3, 0.900E+1, 0.99440000E+0, + 0.00000000E+0, 0.11224300E+2, 0.107E+3, 0.100E+2, 0.99440000E+0, 0.00000000E+0, 0.12196010E+3, + 0.107E+3, 0.110E+2, 0.99440000E+0, 0.00000000E+0, 0.10014430E+3, 0.107E+3, 0.120E+2, + 0.99440000E+0, 0.00000000E+0, 0.95091600E+2, 0.107E+3, 0.130E+2, 0.99440000E+0, 0.00000000E+0, + 0.78046600E+2, 0.107E+3, 0.140E+2, 0.99440000E+0, 0.00000000E+0, 0.63166900E+2, 0.107E+3, + 0.150E+2, 0.99440000E+0, 0.00000000E+0, 0.53810700E+2, 0.107E+3, 0.160E+2, 0.99440000E+0, + 0.00000000E+0, 0.45095200E+2, 0.107E+3, 0.170E+2, 0.99440000E+0, 0.00000000E+0, 0.37752200E+2, + 0.107E+3, 0.180E+2, 0.99440000E+0, 0.00000000E+0, 0.19944050E+3, 0.107E+3, 0.190E+2, + 0.99440000E+0, 0.00000000E+0, 0.17204550E+3, 0.107E+3, 0.200E+2, 0.99440000E+0, 0.00000000E+0, + 0.14376580E+3, 0.107E+3, 0.210E+2, 0.99440000E+0, 0.00000000E+0, 0.14071150E+3, 0.107E+3, + 0.220E+2, 0.99440000E+0, 0.00000000E+0, 0.12982970E+3, 0.107E+3, 0.230E+2, 0.99440000E+0, + 0.00000000E+0, 0.10301890E+3, 0.107E+3, 0.240E+2, 0.99440000E+0, 0.00000000E+0, 0.11302480E+3, + 0.107E+3, 0.250E+2, 0.99440000E+0, 0.00000000E+0, 0.89486800E+2, 0.107E+3, 0.260E+2, + 0.99440000E+0, 0.00000000E+0, 0.95705100E+2, 0.107E+3, 0.270E+2, 0.99440000E+0, 0.00000000E+0, + 0.97776100E+2, 0.107E+3, 0.280E+2, 0.99440000E+0, 0.00000000E+0, 0.75598700E+2, 0.107E+3, + 0.290E+2, 0.99440000E+0, 0.00000000E+0, 0.78918300E+2, 0.107E+3, 0.300E+2, 0.99440000E+0, + 0.00000000E+0, 0.92602500E+2, 0.107E+3, 0.310E+2, 0.99440000E+0, 0.00000000E+0, 0.84127600E+2, + 0.107E+3, 0.320E+2, 0.99440000E+0, 0.00000000E+0, 0.73914200E+2, 0.107E+3, 0.330E+2, + 0.99440000E+0, 0.00000000E+0, 0.67663600E+2, 0.107E+3, 0.340E+2, 0.99440000E+0, 0.00000000E+0, + 0.60472800E+2, 0.107E+3, 0.350E+2, 0.99440000E+0, 0.00000000E+0, 0.53649600E+2, 0.107E+3, + 0.360E+2, 0.99440000E+0, 0.00000000E+0, 0.22519190E+3, 0.107E+3, 0.370E+2, 0.99440000E+0, + 0.00000000E+0, 0.20515740E+3, 0.107E+3, 0.380E+2, 0.99440000E+0, 0.00000000E+0, 0.18368510E+3, + 0.107E+3, 0.390E+2, 0.99440000E+0, 0.00000000E+0, 0.16755010E+3, 0.107E+3, 0.400E+2, + 0.99440000E+0, 0.00000000E+0, 0.15443560E+3, 0.107E+3, 0.410E+2, 0.99440000E+0, 0.00000000E+0, + 0.12180660E+3, 0.107E+3, 0.420E+2, 0.99440000E+0, 0.00000000E+0, 0.13478870E+3, 0.107E+3, + 0.430E+2, 0.99440000E+0, 0.00000000E+0, 0.10509050E+3, 0.107E+3, 0.440E+2, 0.99440000E+0, + 0.00000000E+0, 0.11434960E+3, 0.107E+3, 0.450E+2, 0.99440000E+0, 0.00000000E+0, 0.10674380E+3, + 0.107E+3, 0.460E+2, 0.99440000E+0, 0.00000000E+0, 0.89341900E+2, 0.107E+3, 0.470E+2, + 0.99440000E+0, 0.00000000E+0, 0.94877000E+2, 0.107E+3, 0.480E+2, 0.99440000E+0, 0.00000000E+0, + 0.11649590E+3, 0.107E+3, 0.490E+2, 0.99440000E+0, 0.00000000E+0, 0.11009510E+3, 0.107E+3, + 0.500E+2, 0.99440000E+0, 0.00000000E+0, 0.10051820E+3, 0.107E+3, 0.510E+2, 0.99440000E+0, + 0.00000000E+0, 0.94750800E+2, 0.107E+3, 0.520E+2, 0.99440000E+0, 0.00000000E+0, 0.87202800E+2, + 0.107E+3, 0.530E+2, 0.99440000E+0, 0.00000000E+0, 0.79777300E+2, 0.107E+3, 0.540E+2, + 0.99440000E+0, 0.00000000E+0, 0.27525670E+3, 0.107E+3, 0.550E+2, 0.99440000E+0, 0.00000000E+0, + 0.26044810E+3, 0.107E+3, 0.560E+2, 0.99440000E+0, 0.00000000E+0, 0.23366190E+3, 0.107E+3, + 0.570E+2, 0.99440000E+0, 0.00000000E+0, 0.11854700E+3, 0.107E+3, 0.580E+2, 0.99440000E+0, + 0.27991000E+1, 0.23257830E+3, 0.107E+3, 0.590E+2, 0.99440000E+0, 0.00000000E+0, 0.22400400E+3, + 0.107E+3, 0.600E+2, 0.99440000E+0, 0.00000000E+0, 0.21856110E+3, 0.107E+3, 0.610E+2, + 0.99440000E+0, 0.00000000E+0, 0.21352770E+3, 0.107E+3, 0.620E+2, 0.99440000E+0, 0.00000000E+0, + 0.20907000E+3, 0.107E+3, 0.630E+2, 0.99440000E+0, 0.00000000E+0, 0.16905560E+3, 0.107E+3, + 0.640E+2, 0.99440000E+0, 0.00000000E+0, 0.18459040E+3, 0.107E+3, 0.650E+2, 0.99440000E+0, + 0.00000000E+0, 0.17880740E+3, 0.107E+3, 0.660E+2, 0.99440000E+0, 0.00000000E+0, 0.18945310E+3, + 0.107E+3, 0.670E+2, 0.99440000E+0, 0.00000000E+0, 0.18549310E+3, 0.107E+3, 0.680E+2, + 0.99440000E+0, 0.00000000E+0, 0.18198230E+3, 0.107E+3, 0.690E+2, 0.99440000E+0, 0.00000000E+0, + 0.17962020E+3, 0.107E+3, 0.700E+2, 0.99440000E+0, 0.00000000E+0, 0.15422920E+3, 0.107E+3, + 0.710E+2, 0.99440000E+0, 0.00000000E+0, 0.15491020E+3, 0.107E+3, 0.720E+2, 0.99440000E+0, + 0.00000000E+0, 0.14357630E+3, 0.107E+3, 0.730E+2, 0.99440000E+0, 0.00000000E+0, 0.12323020E+3, + 0.107E+3, 0.740E+2, 0.99440000E+0, 0.00000000E+0, 0.12591210E+3, 0.107E+3, 0.750E+2, + 0.99440000E+0, 0.00000000E+0, 0.11569380E+3, 0.107E+3, 0.760E+2, 0.99440000E+0, 0.00000000E+0, + 0.10717750E+3, 0.107E+3, 0.770E+2, 0.99440000E+0, 0.00000000E+0, 0.90445600E+2, 0.107E+3, + 0.780E+2, 0.99440000E+0, 0.00000000E+0, 0.85014600E+2, 0.107E+3, 0.790E+2, 0.99440000E+0, + 0.00000000E+0, 0.87649000E+2, 0.107E+3, 0.800E+2, 0.99440000E+0, 0.00000000E+0, 0.12108000E+3, + 0.107E+3, 0.810E+2, 0.99440000E+0, 0.00000000E+0, 0.12012680E+3, 0.107E+3, 0.820E+2, + 0.99440000E+0, 0.00000000E+0, 0.11264850E+3, 0.107E+3, 0.830E+2, 0.99440000E+0, 0.00000000E+0, + 0.10881340E+3, 0.107E+3, 0.840E+2, 0.99440000E+0, 0.00000000E+0, 0.10205240E+3, 0.107E+3, + 0.850E+2, 0.99440000E+0, 0.00000000E+0, 0.94992800E+2, 0.107E+3, 0.860E+2, 0.99440000E+0, + 0.00000000E+0, 0.26444300E+3, 0.107E+3, 0.870E+2, 0.99440000E+0, 0.00000000E+0, 0.26065290E+3, + 0.107E+3, 0.880E+2, 0.99440000E+0, 0.00000000E+0, 0.23476520E+3, 0.107E+3, 0.890E+2, + 0.99440000E+0, 0.00000000E+0, 0.21630740E+3, 0.107E+3, 0.900E+2, 0.99440000E+0, 0.00000000E+0, + 0.21274560E+3, 0.107E+3, 0.910E+2, 0.99440000E+0, 0.00000000E+0, 0.20616310E+3, 0.107E+3, + 0.920E+2, 0.99440000E+0, 0.00000000E+0, 0.20915240E+3, 0.107E+3, 0.930E+2, 0.99440000E+0, + 0.00000000E+0, 0.20304180E+3, 0.107E+3, 0.940E+2, 0.99440000E+0, 0.00000000E+0, 0.12598000E+2, + 0.107E+3, 0.101E+3, 0.99440000E+0, 0.00000000E+0, 0.37493900E+2, 0.107E+3, 0.103E+3, + 0.99440000E+0, 0.98650000E+0, 0.48488500E+2, 0.107E+3, 0.104E+3, 0.99440000E+0, 0.98080000E+0, + 0.39043300E+2, 0.107E+3, 0.105E+3, 0.99440000E+0, 0.97060000E+0, 0.30541000E+2, 0.107E+3, + 0.106E+3, 0.99440000E+0, 0.98680000E+0, 0.22124100E+2, 0.107E+3, 0.107E+3, 0.99440000E+0, + 0.99440000E+0, 0.60575000E+1, 0.108E+3, 0.100E+1, 0.99250000E+0, 0.91180000E+0, 0.44593000E+1, + 0.108E+3, 0.200E+1, 0.99250000E+0, 0.00000000E+0, 0.67931200E+2, 0.108E+3, 0.300E+1, + 0.99250000E+0, 0.00000000E+0, 0.44496800E+2, 0.108E+3, 0.400E+1, 0.99250000E+0, 0.00000000E+0, + 0.32813600E+2, 0.108E+3, 0.500E+1, 0.99250000E+0, 0.00000000E+0, 0.23912000E+2, 0.108E+3, + 0.600E+1, 0.99250000E+0, 0.00000000E+0, 0.17769800E+2, 0.108E+3, 0.700E+1, 0.99250000E+0, + 0.00000000E+0, 0.14076400E+2, 0.108E+3, 0.800E+1, 0.99250000E+0, 0.00000000E+0, 0.11099400E+2, + 0.108E+3, 0.900E+1, 0.99250000E+0, 0.00000000E+0, 0.88252000E+1, 0.108E+3, 0.100E+2, + 0.99250000E+0, 0.00000000E+0, 0.82182000E+2, 0.108E+3, 0.110E+2, 0.99250000E+0, 0.00000000E+0, + 0.69367500E+2, 0.108E+3, 0.120E+2, 0.99250000E+0, 0.00000000E+0, 0.66745100E+2, 0.108E+3, + 0.130E+2, 0.99250000E+0, 0.00000000E+0, 0.55817500E+2, 0.108E+3, 0.140E+2, 0.99250000E+0, + 0.00000000E+0, 0.45993700E+2, 0.108E+3, 0.150E+2, 0.99250000E+0, 0.00000000E+0, 0.39709100E+2, + 0.108E+3, 0.160E+2, 0.99250000E+0, 0.00000000E+0, 0.33731300E+2, 0.108E+3, 0.170E+2, + 0.99250000E+0, 0.00000000E+0, 0.28600000E+2, 0.108E+3, 0.180E+2, 0.99250000E+0, 0.00000000E+0, + 0.13465080E+3, 0.108E+3, 0.190E+2, 0.99250000E+0, 0.00000000E+0, 0.11824110E+3, 0.108E+3, + 0.200E+2, 0.99250000E+0, 0.00000000E+0, 0.99293900E+2, 0.108E+3, 0.210E+2, 0.99250000E+0, + 0.00000000E+0, 0.97834500E+2, 0.108E+3, 0.220E+2, 0.99250000E+0, 0.00000000E+0, 0.90600700E+2, + 0.108E+3, 0.230E+2, 0.99250000E+0, 0.00000000E+0, 0.72287200E+2, 0.108E+3, 0.240E+2, + 0.99250000E+0, 0.00000000E+0, 0.79304700E+2, 0.108E+3, 0.250E+2, 0.99250000E+0, 0.00000000E+0, + 0.63186500E+2, 0.108E+3, 0.260E+2, 0.99250000E+0, 0.00000000E+0, 0.67711700E+2, 0.108E+3, + 0.270E+2, 0.99250000E+0, 0.00000000E+0, 0.68908600E+2, 0.108E+3, 0.280E+2, 0.99250000E+0, + 0.00000000E+0, 0.53642000E+2, 0.108E+3, 0.290E+2, 0.99250000E+0, 0.00000000E+0, 0.56288400E+2, + 0.108E+3, 0.300E+2, 0.99250000E+0, 0.00000000E+0, 0.65621400E+2, 0.108E+3, 0.310E+2, + 0.99250000E+0, 0.00000000E+0, 0.60404100E+2, 0.108E+3, 0.320E+2, 0.99250000E+0, 0.00000000E+0, + 0.53815300E+2, 0.108E+3, 0.330E+2, 0.99250000E+0, 0.00000000E+0, 0.49755200E+2, 0.108E+3, + 0.340E+2, 0.99250000E+0, 0.00000000E+0, 0.44951000E+2, 0.108E+3, 0.350E+2, 0.99250000E+0, + 0.00000000E+0, 0.40304300E+2, 0.108E+3, 0.360E+2, 0.99250000E+0, 0.00000000E+0, 0.15267570E+3, + 0.108E+3, 0.370E+2, 0.99250000E+0, 0.00000000E+0, 0.14115920E+3, 0.108E+3, 0.380E+2, + 0.99250000E+0, 0.00000000E+0, 0.12762820E+3, 0.108E+3, 0.390E+2, 0.99250000E+0, 0.00000000E+0, + 0.11723280E+3, 0.108E+3, 0.400E+2, 0.99250000E+0, 0.00000000E+0, 0.10863780E+3, 0.108E+3, + 0.410E+2, 0.99250000E+0, 0.00000000E+0, 0.86680300E+2, 0.108E+3, 0.420E+2, 0.99250000E+0, + 0.00000000E+0, 0.95496600E+2, 0.108E+3, 0.430E+2, 0.99250000E+0, 0.00000000E+0, 0.75391000E+2, + 0.108E+3, 0.440E+2, 0.99250000E+0, 0.00000000E+0, 0.81764000E+2, 0.108E+3, 0.450E+2, + 0.99250000E+0, 0.00000000E+0, 0.76587100E+2, 0.108E+3, 0.460E+2, 0.99250000E+0, 0.00000000E+0, + 0.64388000E+2, 0.108E+3, 0.470E+2, 0.99250000E+0, 0.00000000E+0, 0.68394300E+2, 0.108E+3, + 0.480E+2, 0.99250000E+0, 0.00000000E+0, 0.83027800E+2, 0.108E+3, 0.490E+2, 0.99250000E+0, + 0.00000000E+0, 0.79170400E+2, 0.108E+3, 0.500E+2, 0.99250000E+0, 0.00000000E+0, 0.73071800E+2, + 0.108E+3, 0.510E+2, 0.99250000E+0, 0.00000000E+0, 0.69390100E+2, 0.108E+3, 0.520E+2, + 0.99250000E+0, 0.00000000E+0, 0.64414100E+2, 0.108E+3, 0.530E+2, 0.99250000E+0, 0.00000000E+0, + 0.59446800E+2, 0.108E+3, 0.540E+2, 0.99250000E+0, 0.00000000E+0, 0.18687910E+3, 0.108E+3, + 0.550E+2, 0.99250000E+0, 0.00000000E+0, 0.17895490E+3, 0.108E+3, 0.560E+2, 0.99250000E+0, + 0.00000000E+0, 0.16203710E+3, 0.108E+3, 0.570E+2, 0.99250000E+0, 0.00000000E+0, 0.86166500E+2, + 0.108E+3, 0.580E+2, 0.99250000E+0, 0.27991000E+1, 0.16052330E+3, 0.108E+3, 0.590E+2, + 0.99250000E+0, 0.00000000E+0, 0.15480670E+3, 0.108E+3, 0.600E+2, 0.99250000E+0, 0.00000000E+0, + 0.15109700E+3, 0.108E+3, 0.610E+2, 0.99250000E+0, 0.00000000E+0, 0.14765520E+3, 0.108E+3, + 0.620E+2, 0.99250000E+0, 0.00000000E+0, 0.14460750E+3, 0.108E+3, 0.630E+2, 0.99250000E+0, + 0.00000000E+0, 0.11853880E+3, 0.108E+3, 0.640E+2, 0.99250000E+0, 0.00000000E+0, 0.12778280E+3, + 0.108E+3, 0.650E+2, 0.99250000E+0, 0.00000000E+0, 0.12401580E+3, 0.108E+3, 0.660E+2, + 0.99250000E+0, 0.00000000E+0, 0.13130040E+3, 0.108E+3, 0.670E+2, 0.99250000E+0, 0.00000000E+0, + 0.12856660E+3, 0.108E+3, 0.680E+2, 0.99250000E+0, 0.00000000E+0, 0.12616140E+3, 0.108E+3, + 0.690E+2, 0.99250000E+0, 0.00000000E+0, 0.12444020E+3, 0.108E+3, 0.700E+2, 0.99250000E+0, + 0.00000000E+0, 0.10783510E+3, 0.108E+3, 0.710E+2, 0.99250000E+0, 0.00000000E+0, 0.10920420E+3, + 0.108E+3, 0.720E+2, 0.99250000E+0, 0.00000000E+0, 0.10197340E+3, 0.108E+3, 0.730E+2, + 0.99250000E+0, 0.00000000E+0, 0.88315600E+2, 0.108E+3, 0.740E+2, 0.99250000E+0, 0.00000000E+0, + 0.90391800E+2, 0.108E+3, 0.750E+2, 0.99250000E+0, 0.00000000E+0, 0.83622700E+2, 0.108E+3, + 0.760E+2, 0.99250000E+0, 0.00000000E+0, 0.77919400E+2, 0.108E+3, 0.770E+2, 0.99250000E+0, + 0.00000000E+0, 0.66359100E+2, 0.108E+3, 0.780E+2, 0.99250000E+0, 0.00000000E+0, 0.62600800E+2, + 0.108E+3, 0.790E+2, 0.99250000E+0, 0.00000000E+0, 0.64555200E+2, 0.108E+3, 0.800E+2, + 0.99250000E+0, 0.00000000E+0, 0.86955200E+2, 0.108E+3, 0.810E+2, 0.99250000E+0, 0.00000000E+0, + 0.86739200E+2, 0.108E+3, 0.820E+2, 0.99250000E+0, 0.00000000E+0, 0.82055900E+2, 0.108E+3, + 0.830E+2, 0.99250000E+0, 0.00000000E+0, 0.79713300E+2, 0.108E+3, 0.840E+2, 0.99250000E+0, + 0.00000000E+0, 0.75326800E+2, 0.108E+3, 0.850E+2, 0.99250000E+0, 0.00000000E+0, 0.70648000E+2, + 0.108E+3, 0.860E+2, 0.99250000E+0, 0.00000000E+0, 0.18100550E+3, 0.108E+3, 0.870E+2, + 0.99250000E+0, 0.00000000E+0, 0.18009880E+3, 0.108E+3, 0.880E+2, 0.99250000E+0, 0.00000000E+0, + 0.16360420E+3, 0.108E+3, 0.890E+2, 0.99250000E+0, 0.00000000E+0, 0.15256500E+3, 0.108E+3, + 0.900E+2, 0.99250000E+0, 0.00000000E+0, 0.14955510E+3, 0.108E+3, 0.910E+2, 0.99250000E+0, + 0.00000000E+0, 0.14501130E+3, 0.108E+3, 0.920E+2, 0.99250000E+0, 0.00000000E+0, 0.14619280E+3, + 0.108E+3, 0.930E+2, 0.99250000E+0, 0.00000000E+0, 0.14207750E+3, 0.108E+3, 0.940E+2, + 0.99250000E+0, 0.00000000E+0, 0.91812000E+1, 0.108E+3, 0.101E+3, 0.99250000E+0, 0.00000000E+0, + 0.26270800E+2, 0.108E+3, 0.103E+3, 0.99250000E+0, 0.98650000E+0, 0.34198300E+2, 0.108E+3, + 0.104E+3, 0.99250000E+0, 0.98080000E+0, 0.28232700E+2, 0.108E+3, 0.105E+3, 0.99250000E+0, + 0.97060000E+0, 0.22517800E+2, 0.108E+3, 0.106E+3, 0.99250000E+0, 0.98680000E+0, 0.16677500E+2, + 0.108E+3, 0.107E+3, 0.99250000E+0, 0.99440000E+0, 0.12816100E+2, 0.108E+3, 0.108E+3, + 0.99250000E+0, 0.99250000E+0, 0.42672000E+1, 0.109E+3, 0.100E+1, 0.99820000E+0, 0.91180000E+0, + 0.33077000E+1, 0.109E+3, 0.200E+1, 0.99820000E+0, 0.00000000E+0, 0.42062700E+2, 0.109E+3, + 0.300E+1, 0.99820000E+0, 0.00000000E+0, 0.28861500E+2, 0.109E+3, 0.400E+1, 0.99820000E+0, + 0.00000000E+0, 0.22093100E+2, 0.109E+3, 0.500E+1, 0.99820000E+0, 0.00000000E+0, 0.16637300E+2, + 0.109E+3, 0.600E+1, 0.99820000E+0, 0.00000000E+0, 0.12710700E+2, 0.109E+3, 0.700E+1, + 0.99820000E+0, 0.00000000E+0, 0.10286700E+2, 0.109E+3, 0.800E+1, 0.99820000E+0, 0.00000000E+0, + 0.82739000E+1, 0.109E+3, 0.900E+1, 0.99820000E+0, 0.00000000E+0, 0.66950000E+1, 0.109E+3, + 0.100E+2, 0.99820000E+0, 0.00000000E+0, 0.51249800E+2, 0.109E+3, 0.110E+2, 0.99820000E+0, + 0.00000000E+0, 0.44714100E+2, 0.109E+3, 0.120E+2, 0.99820000E+0, 0.00000000E+0, 0.43736400E+2, + 0.109E+3, 0.130E+2, 0.99820000E+0, 0.00000000E+0, 0.37442100E+2, 0.109E+3, 0.140E+2, + 0.99820000E+0, 0.00000000E+0, 0.31557700E+2, 0.109E+3, 0.150E+2, 0.99820000E+0, 0.00000000E+0, + 0.27713700E+2, 0.109E+3, 0.160E+2, 0.99820000E+0, 0.00000000E+0, 0.23950500E+2, 0.109E+3, + 0.170E+2, 0.99820000E+0, 0.00000000E+0, 0.20639400E+2, 0.109E+3, 0.180E+2, 0.99820000E+0, + 0.00000000E+0, 0.84368800E+2, 0.109E+3, 0.190E+2, 0.99820000E+0, 0.00000000E+0, 0.75585000E+2, + 0.109E+3, 0.200E+2, 0.99820000E+0, 0.00000000E+0, 0.63856400E+2, 0.109E+3, 0.210E+2, + 0.99820000E+0, 0.00000000E+0, 0.63474800E+2, 0.109E+3, 0.220E+2, 0.99820000E+0, 0.00000000E+0, + 0.59066500E+2, 0.109E+3, 0.230E+2, 0.99820000E+0, 0.00000000E+0, 0.47531800E+2, 0.109E+3, + 0.240E+2, 0.99820000E+0, 0.00000000E+0, 0.52078000E+2, 0.109E+3, 0.250E+2, 0.99820000E+0, + 0.00000000E+0, 0.41894200E+2, 0.109E+3, 0.260E+2, 0.99820000E+0, 0.00000000E+0, 0.44940700E+2, + 0.109E+3, 0.270E+2, 0.99820000E+0, 0.00000000E+0, 0.45515500E+2, 0.109E+3, 0.280E+2, + 0.99820000E+0, 0.00000000E+0, 0.35810000E+2, 0.109E+3, 0.290E+2, 0.99820000E+0, 0.00000000E+0, + 0.37755900E+2, 0.109E+3, 0.300E+2, 0.99820000E+0, 0.00000000E+0, 0.43568500E+2, 0.109E+3, + 0.310E+2, 0.99820000E+0, 0.00000000E+0, 0.40750000E+2, 0.109E+3, 0.320E+2, 0.99820000E+0, + 0.00000000E+0, 0.36938900E+2, 0.109E+3, 0.330E+2, 0.99820000E+0, 0.00000000E+0, 0.34579200E+2, + 0.109E+3, 0.340E+2, 0.99820000E+0, 0.00000000E+0, 0.31669900E+2, 0.109E+3, 0.350E+2, + 0.99820000E+0, 0.00000000E+0, 0.28780000E+2, 0.109E+3, 0.360E+2, 0.99820000E+0, 0.00000000E+0, + 0.96223500E+2, 0.109E+3, 0.370E+2, 0.99820000E+0, 0.00000000E+0, 0.90408100E+2, 0.109E+3, + 0.380E+2, 0.99820000E+0, 0.00000000E+0, 0.82733700E+2, 0.109E+3, 0.390E+2, 0.99820000E+0, + 0.00000000E+0, 0.76671200E+2, 0.109E+3, 0.400E+2, 0.99820000E+0, 0.00000000E+0, 0.71549300E+2, + 0.109E+3, 0.410E+2, 0.99820000E+0, 0.00000000E+0, 0.57978400E+2, 0.109E+3, 0.420E+2, + 0.99820000E+0, 0.00000000E+0, 0.63507900E+2, 0.109E+3, 0.430E+2, 0.99820000E+0, 0.00000000E+0, + 0.50977000E+2, 0.109E+3, 0.440E+2, 0.99820000E+0, 0.00000000E+0, 0.55024000E+2, 0.109E+3, + 0.450E+2, 0.99820000E+0, 0.00000000E+0, 0.51774000E+2, 0.109E+3, 0.460E+2, 0.99820000E+0, + 0.00000000E+0, 0.43848000E+2, 0.109E+3, 0.470E+2, 0.99820000E+0, 0.00000000E+0, 0.46534000E+2, + 0.109E+3, 0.480E+2, 0.99820000E+0, 0.00000000E+0, 0.55658900E+2, 0.109E+3, 0.490E+2, + 0.99820000E+0, 0.00000000E+0, 0.53624300E+2, 0.109E+3, 0.500E+2, 0.99820000E+0, 0.00000000E+0, + 0.50147300E+2, 0.109E+3, 0.510E+2, 0.99820000E+0, 0.00000000E+0, 0.48053500E+2, 0.109E+3, + 0.520E+2, 0.99820000E+0, 0.00000000E+0, 0.45084800E+2, 0.109E+3, 0.530E+2, 0.99820000E+0, + 0.00000000E+0, 0.42063400E+2, 0.109E+3, 0.540E+2, 0.99820000E+0, 0.00000000E+0, 0.11797180E+3, + 0.109E+3, 0.550E+2, 0.99820000E+0, 0.00000000E+0, 0.11446760E+3, 0.109E+3, 0.560E+2, + 0.99820000E+0, 0.00000000E+0, 0.10480950E+3, 0.109E+3, 0.570E+2, 0.99820000E+0, 0.00000000E+0, + 0.59137900E+2, 0.109E+3, 0.580E+2, 0.99820000E+0, 0.27991000E+1, 0.10336160E+3, 0.109E+3, + 0.590E+2, 0.99820000E+0, 0.00000000E+0, 0.99833100E+2, 0.109E+3, 0.600E+2, 0.99820000E+0, + 0.00000000E+0, 0.97478900E+2, 0.109E+3, 0.610E+2, 0.99820000E+0, 0.00000000E+0, 0.95284600E+2, + 0.109E+3, 0.620E+2, 0.99820000E+0, 0.00000000E+0, 0.93341000E+2, 0.109E+3, 0.630E+2, + 0.99820000E+0, 0.00000000E+0, 0.77874200E+2, 0.109E+3, 0.640E+2, 0.99820000E+0, 0.00000000E+0, + 0.82715400E+2, 0.109E+3, 0.650E+2, 0.99820000E+0, 0.00000000E+0, 0.80460700E+2, 0.109E+3, + 0.660E+2, 0.99820000E+0, 0.00000000E+0, 0.84947800E+2, 0.109E+3, 0.670E+2, 0.99820000E+0, + 0.00000000E+0, 0.83182700E+2, 0.109E+3, 0.680E+2, 0.99820000E+0, 0.00000000E+0, 0.81643700E+2, + 0.109E+3, 0.690E+2, 0.99820000E+0, 0.00000000E+0, 0.80457500E+2, 0.109E+3, 0.700E+2, + 0.99820000E+0, 0.00000000E+0, 0.70552200E+2, 0.109E+3, 0.710E+2, 0.99820000E+0, 0.00000000E+0, + 0.72088700E+2, 0.109E+3, 0.720E+2, 0.99820000E+0, 0.00000000E+0, 0.67959000E+2, 0.109E+3, + 0.730E+2, 0.99820000E+0, 0.00000000E+0, 0.59575800E+2, 0.109E+3, 0.740E+2, 0.99820000E+0, + 0.00000000E+0, 0.61094900E+2, 0.109E+3, 0.750E+2, 0.99820000E+0, 0.00000000E+0, 0.57011100E+2, + 0.109E+3, 0.760E+2, 0.99820000E+0, 0.00000000E+0, 0.53521400E+2, 0.109E+3, 0.770E+2, + 0.99820000E+0, 0.00000000E+0, 0.46144200E+2, 0.109E+3, 0.780E+2, 0.99820000E+0, 0.00000000E+0, + 0.43746800E+2, 0.109E+3, 0.790E+2, 0.99820000E+0, 0.00000000E+0, 0.45120500E+2, 0.109E+3, + 0.800E+2, 0.99820000E+0, 0.00000000E+0, 0.58912900E+2, 0.109E+3, 0.810E+2, 0.99820000E+0, + 0.00000000E+0, 0.59109700E+2, 0.109E+3, 0.820E+2, 0.99820000E+0, 0.00000000E+0, 0.56500700E+2, + 0.109E+3, 0.830E+2, 0.99820000E+0, 0.00000000E+0, 0.55261400E+2, 0.109E+3, 0.840E+2, + 0.99820000E+0, 0.00000000E+0, 0.52703300E+2, 0.109E+3, 0.850E+2, 0.99820000E+0, 0.00000000E+0, + 0.49892700E+2, 0.109E+3, 0.860E+2, 0.99820000E+0, 0.00000000E+0, 0.11543210E+3, 0.109E+3, + 0.870E+2, 0.99820000E+0, 0.00000000E+0, 0.11600620E+3, 0.109E+3, 0.880E+2, 0.99820000E+0, + 0.00000000E+0, 0.10653030E+3, 0.109E+3, 0.890E+2, 0.99820000E+0, 0.00000000E+0, 0.10090290E+3, + 0.109E+3, 0.900E+2, 0.99820000E+0, 0.00000000E+0, 0.98576800E+2, 0.109E+3, 0.910E+2, + 0.99820000E+0, 0.00000000E+0, 0.95662500E+2, 0.109E+3, 0.920E+2, 0.99820000E+0, 0.00000000E+0, + 0.95732200E+2, 0.109E+3, 0.930E+2, 0.99820000E+0, 0.00000000E+0, 0.93161400E+2, 0.109E+3, + 0.940E+2, 0.99820000E+0, 0.00000000E+0, 0.63000000E+1, 0.109E+3, 0.101E+3, 0.99820000E+0, + 0.00000000E+0, 0.17173300E+2, 0.109E+3, 0.103E+3, 0.99820000E+0, 0.98650000E+0, 0.22541300E+2, + 0.109E+3, 0.104E+3, 0.99820000E+0, 0.98080000E+0, 0.19202900E+2, 0.109E+3, 0.105E+3, + 0.99820000E+0, 0.97060000E+0, 0.15685700E+2, 0.109E+3, 0.106E+3, 0.99820000E+0, 0.98680000E+0, + 0.11947000E+2, 0.109E+3, 0.107E+3, 0.99820000E+0, 0.99440000E+0, 0.94048000E+1, 0.109E+3, + 0.108E+3, 0.99820000E+0, 0.99250000E+0, 0.71341000E+1, 0.109E+3, 0.109E+3, 0.99820000E+0, + 0.99820000E+0, 0.20756700E+2, 0.111E+3, 0.100E+1, 0.96840000E+0, 0.91180000E+0, 0.12728700E+2, + 0.111E+3, 0.200E+1, 0.96840000E+0, 0.00000000E+0, 0.42571610E+3, 0.111E+3, 0.300E+1, + 0.96840000E+0, 0.00000000E+0, 0.21865720E+3, 0.111E+3, 0.400E+1, 0.96840000E+0, 0.00000000E+0, + 0.13695360E+3, 0.111E+3, 0.500E+1, 0.96840000E+0, 0.00000000E+0, 0.87395600E+2, 0.111E+3, + 0.600E+1, 0.96840000E+0, 0.00000000E+0, 0.58485300E+2, 0.111E+3, 0.700E+1, 0.96840000E+0, + 0.00000000E+0, 0.42891100E+2, 0.111E+3, 0.800E+1, 0.96840000E+0, 0.00000000E+0, 0.31606000E+2, + 0.111E+3, 0.900E+1, 0.96840000E+0, 0.00000000E+0, 0.23774500E+2, 0.111E+3, 0.100E+2, + 0.96840000E+0, 0.00000000E+0, 0.50543630E+3, 0.111E+3, 0.110E+2, 0.96840000E+0, 0.00000000E+0, + 0.35591800E+3, 0.111E+3, 0.120E+2, 0.96840000E+0, 0.00000000E+0, 0.31645880E+3, 0.111E+3, + 0.130E+2, 0.96840000E+0, 0.00000000E+0, 0.23713260E+3, 0.111E+3, 0.140E+2, 0.96840000E+0, + 0.00000000E+0, 0.17692050E+3, 0.111E+3, 0.150E+2, 0.96840000E+0, 0.00000000E+0, 0.14254300E+3, + 0.111E+3, 0.160E+2, 0.96840000E+0, 0.00000000E+0, 0.11310250E+3, 0.111E+3, 0.170E+2, + 0.96840000E+0, 0.00000000E+0, 0.90173500E+2, 0.111E+3, 0.180E+2, 0.96840000E+0, 0.00000000E+0, + 0.84082990E+3, 0.111E+3, 0.190E+2, 0.96840000E+0, 0.00000000E+0, 0.64831050E+3, 0.111E+3, + 0.200E+2, 0.96840000E+0, 0.00000000E+0, 0.52709170E+3, 0.111E+3, 0.210E+2, 0.96840000E+0, + 0.00000000E+0, 0.50123930E+3, 0.111E+3, 0.220E+2, 0.96840000E+0, 0.00000000E+0, 0.45480300E+3, + 0.111E+3, 0.230E+2, 0.96840000E+0, 0.00000000E+0, 0.35715080E+3, 0.111E+3, 0.240E+2, + 0.96840000E+0, 0.00000000E+0, 0.38634260E+3, 0.111E+3, 0.250E+2, 0.96840000E+0, 0.00000000E+0, + 0.30174010E+3, 0.111E+3, 0.260E+2, 0.96840000E+0, 0.00000000E+0, 0.31417180E+3, 0.111E+3, + 0.270E+2, 0.96840000E+0, 0.00000000E+0, 0.32682710E+3, 0.111E+3, 0.280E+2, 0.96840000E+0, + 0.00000000E+0, 0.24981970E+3, 0.111E+3, 0.290E+2, 0.96840000E+0, 0.00000000E+0, 0.24939250E+3, + 0.111E+3, 0.300E+2, 0.96840000E+0, 0.00000000E+0, 0.29840070E+3, 0.111E+3, 0.310E+2, + 0.96840000E+0, 0.00000000E+0, 0.25314330E+3, 0.111E+3, 0.320E+2, 0.96840000E+0, 0.00000000E+0, + 0.20818020E+3, 0.111E+3, 0.330E+2, 0.96840000E+0, 0.00000000E+0, 0.18247440E+3, 0.111E+3, + 0.340E+2, 0.96840000E+0, 0.00000000E+0, 0.15582020E+3, 0.111E+3, 0.350E+2, 0.96840000E+0, + 0.00000000E+0, 0.13243480E+3, 0.111E+3, 0.360E+2, 0.96840000E+0, 0.00000000E+0, 0.93630060E+3, + 0.111E+3, 0.370E+2, 0.96840000E+0, 0.00000000E+0, 0.77398540E+3, 0.111E+3, 0.380E+2, + 0.96840000E+0, 0.00000000E+0, 0.65879630E+3, 0.111E+3, 0.390E+2, 0.96840000E+0, 0.00000000E+0, + 0.58124800E+3, 0.111E+3, 0.400E+2, 0.96840000E+0, 0.00000000E+0, 0.52340580E+3, 0.111E+3, + 0.410E+2, 0.96840000E+0, 0.00000000E+0, 0.39500580E+3, 0.111E+3, 0.420E+2, 0.96840000E+0, + 0.00000000E+0, 0.44452690E+3, 0.111E+3, 0.430E+2, 0.96840000E+0, 0.00000000E+0, 0.33022730E+3, + 0.111E+3, 0.440E+2, 0.96840000E+0, 0.00000000E+0, 0.36142870E+3, 0.111E+3, 0.450E+2, + 0.96840000E+0, 0.00000000E+0, 0.33243920E+3, 0.111E+3, 0.460E+2, 0.96840000E+0, 0.00000000E+0, + 0.27794280E+3, 0.111E+3, 0.470E+2, 0.96840000E+0, 0.00000000E+0, 0.28984740E+3, 0.111E+3, + 0.480E+2, 0.96840000E+0, 0.00000000E+0, 0.37337940E+3, 0.111E+3, 0.490E+2, 0.96840000E+0, + 0.00000000E+0, 0.33470230E+3, 0.111E+3, 0.500E+2, 0.96840000E+0, 0.00000000E+0, 0.28898880E+3, + 0.111E+3, 0.510E+2, 0.96840000E+0, 0.00000000E+0, 0.26288460E+3, 0.111E+3, 0.520E+2, + 0.96840000E+0, 0.00000000E+0, 0.23260530E+3, 0.111E+3, 0.530E+2, 0.96840000E+0, 0.00000000E+0, + 0.20479860E+3, 0.111E+3, 0.540E+2, 0.96840000E+0, 0.00000000E+0, 0.11389256E+4, 0.111E+3, + 0.550E+2, 0.96840000E+0, 0.00000000E+0, 0.99536600E+3, 0.111E+3, 0.560E+2, 0.96840000E+0, + 0.00000000E+0, 0.85007680E+3, 0.111E+3, 0.570E+2, 0.96840000E+0, 0.00000000E+0, 0.34313820E+3, + 0.111E+3, 0.580E+2, 0.96840000E+0, 0.27991000E+1, 0.87351340E+3, 0.111E+3, 0.590E+2, + 0.96840000E+0, 0.00000000E+0, 0.83492630E+3, 0.111E+3, 0.600E+2, 0.96840000E+0, 0.00000000E+0, + 0.81293500E+3, 0.111E+3, 0.610E+2, 0.96840000E+0, 0.00000000E+0, 0.79283360E+3, 0.111E+3, + 0.620E+2, 0.96840000E+0, 0.00000000E+0, 0.77497190E+3, 0.111E+3, 0.630E+2, 0.96840000E+0, + 0.00000000E+0, 0.58968210E+3, 0.111E+3, 0.640E+2, 0.96840000E+0, 0.00000000E+0, 0.69502110E+3, + 0.111E+3, 0.650E+2, 0.96840000E+0, 0.00000000E+0, 0.66665150E+3, 0.111E+3, 0.660E+2, + 0.96840000E+0, 0.00000000E+0, 0.69407420E+3, 0.111E+3, 0.670E+2, 0.96840000E+0, 0.00000000E+0, + 0.67884860E+3, 0.111E+3, 0.680E+2, 0.96840000E+0, 0.00000000E+0, 0.66485800E+3, 0.111E+3, + 0.690E+2, 0.96840000E+0, 0.00000000E+0, 0.65799220E+3, 0.111E+3, 0.700E+2, 0.96840000E+0, + 0.00000000E+0, 0.54208720E+3, 0.111E+3, 0.710E+2, 0.96840000E+0, 0.00000000E+0, 0.51742950E+3, + 0.111E+3, 0.720E+2, 0.96840000E+0, 0.00000000E+0, 0.46327240E+3, 0.111E+3, 0.730E+2, + 0.96840000E+0, 0.00000000E+0, 0.38490910E+3, 0.111E+3, 0.740E+2, 0.96840000E+0, 0.00000000E+0, + 0.38879710E+3, 0.111E+3, 0.750E+2, 0.96840000E+0, 0.00000000E+0, 0.34639970E+3, 0.111E+3, + 0.760E+2, 0.96840000E+0, 0.00000000E+0, 0.31281320E+3, 0.111E+3, 0.770E+2, 0.96840000E+0, + 0.00000000E+0, 0.25572890E+3, 0.111E+3, 0.780E+2, 0.96840000E+0, 0.00000000E+0, 0.23740440E+3, + 0.111E+3, 0.790E+2, 0.96840000E+0, 0.00000000E+0, 0.24279190E+3, 0.111E+3, 0.800E+2, + 0.96840000E+0, 0.00000000E+0, 0.37972090E+3, 0.111E+3, 0.810E+2, 0.96840000E+0, 0.00000000E+0, + 0.36256490E+3, 0.111E+3, 0.820E+2, 0.96840000E+0, 0.00000000E+0, 0.32393500E+3, 0.111E+3, + 0.830E+2, 0.96840000E+0, 0.00000000E+0, 0.30383030E+3, 0.111E+3, 0.840E+2, 0.96840000E+0, + 0.00000000E+0, 0.27473150E+3, 0.111E+3, 0.850E+2, 0.96840000E+0, 0.00000000E+0, 0.24706350E+3, + 0.111E+3, 0.860E+2, 0.96840000E+0, 0.00000000E+0, 0.10521318E+4, 0.111E+3, 0.870E+2, + 0.96840000E+0, 0.00000000E+0, 0.96974210E+3, 0.111E+3, 0.880E+2, 0.96840000E+0, 0.00000000E+0, + 0.83486500E+3, 0.111E+3, 0.890E+2, 0.96840000E+0, 0.00000000E+0, 0.72693870E+3, 0.111E+3, + 0.900E+2, 0.96840000E+0, 0.00000000E+0, 0.73265540E+3, 0.111E+3, 0.910E+2, 0.96840000E+0, + 0.00000000E+0, 0.70879360E+3, 0.111E+3, 0.920E+2, 0.96840000E+0, 0.00000000E+0, 0.74391900E+3, + 0.111E+3, 0.930E+2, 0.96840000E+0, 0.00000000E+0, 0.71791000E+3, 0.111E+3, 0.940E+2, + 0.96840000E+0, 0.00000000E+0, 0.34995200E+2, 0.111E+3, 0.101E+3, 0.96840000E+0, 0.00000000E+0, + 0.12582450E+3, 0.111E+3, 0.103E+3, 0.96840000E+0, 0.98650000E+0, 0.15832680E+3, 0.111E+3, + 0.104E+3, 0.96840000E+0, 0.98080000E+0, 0.11340160E+3, 0.111E+3, 0.105E+3, 0.96840000E+0, + 0.97060000E+0, 0.82014400E+2, 0.111E+3, 0.106E+3, 0.96840000E+0, 0.98680000E+0, 0.54445400E+2, + 0.111E+3, 0.107E+3, 0.96840000E+0, 0.99440000E+0, 0.38122700E+2, 0.111E+3, 0.108E+3, + 0.96840000E+0, 0.99250000E+0, 0.24956000E+2, 0.111E+3, 0.109E+3, 0.96840000E+0, 0.99820000E+0, + 0.18610520E+3, 0.111E+3, 0.111E+3, 0.96840000E+0, 0.96840000E+0, 0.31991300E+2, 0.112E+3, + 0.100E+1, 0.96280000E+0, 0.91180000E+0, 0.19464800E+2, 0.112E+3, 0.200E+1, 0.96280000E+0, + 0.00000000E+0, 0.67003300E+3, 0.112E+3, 0.300E+1, 0.96280000E+0, 0.00000000E+0, 0.34026020E+3, + 0.112E+3, 0.400E+1, 0.96280000E+0, 0.00000000E+0, 0.21221800E+3, 0.112E+3, 0.500E+1, + 0.96280000E+0, 0.00000000E+0, 0.13492270E+3, 0.112E+3, 0.600E+1, 0.96280000E+0, 0.00000000E+0, + 0.89964600E+2, 0.112E+3, 0.700E+1, 0.96280000E+0, 0.00000000E+0, 0.65760900E+2, 0.112E+3, + 0.800E+1, 0.96280000E+0, 0.00000000E+0, 0.48286500E+2, 0.112E+3, 0.900E+1, 0.96280000E+0, + 0.00000000E+0, 0.36191100E+2, 0.112E+3, 0.100E+2, 0.96280000E+0, 0.00000000E+0, 0.79475970E+3, + 0.112E+3, 0.110E+2, 0.96280000E+0, 0.00000000E+0, 0.55459670E+3, 0.112E+3, 0.120E+2, + 0.96280000E+0, 0.00000000E+0, 0.49208290E+3, 0.112E+3, 0.130E+2, 0.96280000E+0, 0.00000000E+0, + 0.36758110E+3, 0.112E+3, 0.140E+2, 0.96280000E+0, 0.00000000E+0, 0.27352680E+3, 0.112E+3, + 0.150E+2, 0.96280000E+0, 0.00000000E+0, 0.21994890E+3, 0.112E+3, 0.160E+2, 0.96280000E+0, + 0.00000000E+0, 0.17413990E+3, 0.112E+3, 0.170E+2, 0.96280000E+0, 0.00000000E+0, 0.13851900E+3, + 0.112E+3, 0.180E+2, 0.96280000E+0, 0.00000000E+0, 0.13273176E+4, 0.112E+3, 0.190E+2, + 0.96280000E+0, 0.00000000E+0, 0.10137695E+4, 0.112E+3, 0.200E+2, 0.96280000E+0, 0.00000000E+0, + 0.82289570E+3, 0.112E+3, 0.210E+2, 0.96280000E+0, 0.00000000E+0, 0.78169930E+3, 0.112E+3, + 0.220E+2, 0.96280000E+0, 0.00000000E+0, 0.70876840E+3, 0.112E+3, 0.230E+2, 0.96280000E+0, + 0.00000000E+0, 0.55661270E+3, 0.112E+3, 0.240E+2, 0.96280000E+0, 0.00000000E+0, 0.60144990E+3, + 0.112E+3, 0.250E+2, 0.96280000E+0, 0.00000000E+0, 0.46964370E+3, 0.112E+3, 0.260E+2, + 0.96280000E+0, 0.00000000E+0, 0.48817150E+3, 0.112E+3, 0.270E+2, 0.96280000E+0, 0.00000000E+0, + 0.50815850E+3, 0.112E+3, 0.280E+2, 0.96280000E+0, 0.00000000E+0, 0.38842090E+3, 0.112E+3, + 0.290E+2, 0.96280000E+0, 0.00000000E+0, 0.38688840E+3, 0.112E+3, 0.300E+2, 0.96280000E+0, + 0.00000000E+0, 0.46356910E+3, 0.112E+3, 0.310E+2, 0.96280000E+0, 0.00000000E+0, 0.39225330E+3, + 0.112E+3, 0.320E+2, 0.96280000E+0, 0.00000000E+0, 0.32187320E+3, 0.112E+3, 0.330E+2, + 0.96280000E+0, 0.00000000E+0, 0.28171730E+3, 0.112E+3, 0.340E+2, 0.96280000E+0, 0.00000000E+0, + 0.24015650E+3, 0.112E+3, 0.350E+2, 0.96280000E+0, 0.00000000E+0, 0.20374730E+3, 0.112E+3, + 0.360E+2, 0.96280000E+0, 0.00000000E+0, 0.14776556E+4, 0.112E+3, 0.370E+2, 0.96280000E+0, + 0.00000000E+0, 0.12109593E+4, 0.112E+3, 0.380E+2, 0.96280000E+0, 0.00000000E+0, 0.10281365E+4, + 0.112E+3, 0.390E+2, 0.96280000E+0, 0.00000000E+0, 0.90577500E+3, 0.112E+3, 0.400E+2, + 0.96280000E+0, 0.00000000E+0, 0.81492890E+3, 0.112E+3, 0.410E+2, 0.96280000E+0, 0.00000000E+0, + 0.61402650E+3, 0.112E+3, 0.420E+2, 0.96280000E+0, 0.00000000E+0, 0.69144970E+3, 0.112E+3, + 0.430E+2, 0.96280000E+0, 0.00000000E+0, 0.51267590E+3, 0.112E+3, 0.440E+2, 0.96280000E+0, + 0.00000000E+0, 0.56100100E+3, 0.112E+3, 0.450E+2, 0.96280000E+0, 0.00000000E+0, 0.51564570E+3, + 0.112E+3, 0.460E+2, 0.96280000E+0, 0.00000000E+0, 0.43128070E+3, 0.112E+3, 0.470E+2, + 0.96280000E+0, 0.00000000E+0, 0.44915670E+3, 0.112E+3, 0.480E+2, 0.96280000E+0, 0.00000000E+0, + 0.57992340E+3, 0.112E+3, 0.490E+2, 0.96280000E+0, 0.00000000E+0, 0.51865180E+3, 0.112E+3, + 0.500E+2, 0.96280000E+0, 0.00000000E+0, 0.44692300E+3, 0.112E+3, 0.510E+2, 0.96280000E+0, + 0.00000000E+0, 0.40607280E+3, 0.112E+3, 0.520E+2, 0.96280000E+0, 0.00000000E+0, 0.35880520E+3, + 0.112E+3, 0.530E+2, 0.96280000E+0, 0.00000000E+0, 0.31545810E+3, 0.112E+3, 0.540E+2, + 0.96280000E+0, 0.00000000E+0, 0.17990180E+4, 0.112E+3, 0.550E+2, 0.96280000E+0, 0.00000000E+0, + 0.15595050E+4, 0.112E+3, 0.560E+2, 0.96280000E+0, 0.00000000E+0, 0.13282510E+4, 0.112E+3, + 0.570E+2, 0.96280000E+0, 0.00000000E+0, 0.53086500E+3, 0.112E+3, 0.580E+2, 0.96280000E+0, + 0.27991000E+1, 0.13672714E+4, 0.112E+3, 0.590E+2, 0.96280000E+0, 0.00000000E+0, 0.13059000E+4, + 0.112E+3, 0.600E+2, 0.96280000E+0, 0.00000000E+0, 0.12712883E+4, 0.112E+3, 0.610E+2, + 0.96280000E+0, 0.00000000E+0, 0.12396749E+4, 0.112E+3, 0.620E+2, 0.96280000E+0, 0.00000000E+0, + 0.12115825E+4, 0.112E+3, 0.630E+2, 0.96280000E+0, 0.00000000E+0, 0.91963290E+3, 0.112E+3, + 0.640E+2, 0.96280000E+0, 0.00000000E+0, 0.10898214E+4, 0.112E+3, 0.650E+2, 0.96280000E+0, + 0.00000000E+0, 0.10451961E+4, 0.112E+3, 0.660E+2, 0.96280000E+0, 0.00000000E+0, 0.10842313E+4, + 0.112E+3, 0.670E+2, 0.96280000E+0, 0.00000000E+0, 0.10603386E+4, 0.112E+3, 0.680E+2, + 0.96280000E+0, 0.00000000E+0, 0.10383601E+4, 0.112E+3, 0.690E+2, 0.96280000E+0, 0.00000000E+0, + 0.10277356E+4, 0.112E+3, 0.700E+2, 0.96280000E+0, 0.00000000E+0, 0.84553860E+3, 0.112E+3, + 0.710E+2, 0.96280000E+0, 0.00000000E+0, 0.80500140E+3, 0.112E+3, 0.720E+2, 0.96280000E+0, + 0.00000000E+0, 0.71971520E+3, 0.112E+3, 0.730E+2, 0.96280000E+0, 0.00000000E+0, 0.59743440E+3, + 0.112E+3, 0.740E+2, 0.96280000E+0, 0.00000000E+0, 0.60309070E+3, 0.112E+3, 0.750E+2, + 0.96280000E+0, 0.00000000E+0, 0.53662210E+3, 0.112E+3, 0.760E+2, 0.96280000E+0, 0.00000000E+0, + 0.48407160E+3, 0.112E+3, 0.770E+2, 0.96280000E+0, 0.00000000E+0, 0.39524010E+3, 0.112E+3, + 0.780E+2, 0.96280000E+0, 0.00000000E+0, 0.36670170E+3, 0.112E+3, 0.790E+2, 0.96280000E+0, + 0.00000000E+0, 0.37485520E+3, 0.112E+3, 0.800E+2, 0.96280000E+0, 0.00000000E+0, 0.58953950E+3, + 0.112E+3, 0.810E+2, 0.96280000E+0, 0.00000000E+0, 0.56172980E+3, 0.112E+3, 0.820E+2, + 0.96280000E+0, 0.00000000E+0, 0.50092230E+3, 0.112E+3, 0.830E+2, 0.96280000E+0, 0.00000000E+0, + 0.46935230E+3, 0.112E+3, 0.840E+2, 0.96280000E+0, 0.00000000E+0, 0.42385000E+3, 0.112E+3, + 0.850E+2, 0.96280000E+0, 0.00000000E+0, 0.38067930E+3, 0.112E+3, 0.860E+2, 0.96280000E+0, + 0.00000000E+0, 0.16575070E+4, 0.112E+3, 0.870E+2, 0.96280000E+0, 0.00000000E+0, 0.15173457E+4, + 0.112E+3, 0.880E+2, 0.96280000E+0, 0.00000000E+0, 0.13028376E+4, 0.112E+3, 0.890E+2, + 0.96280000E+0, 0.00000000E+0, 0.11313898E+4, 0.112E+3, 0.900E+2, 0.96280000E+0, 0.00000000E+0, + 0.11418668E+4, 0.112E+3, 0.910E+2, 0.96280000E+0, 0.00000000E+0, 0.11045083E+4, 0.112E+3, + 0.920E+2, 0.96280000E+0, 0.00000000E+0, 0.11608135E+4, 0.112E+3, 0.930E+2, 0.96280000E+0, + 0.00000000E+0, 0.11198466E+4, 0.112E+3, 0.940E+2, 0.96280000E+0, 0.00000000E+0, 0.54102100E+2, + 0.112E+3, 0.101E+3, 0.96280000E+0, 0.00000000E+0, 0.19570570E+3, 0.112E+3, 0.103E+3, + 0.96280000E+0, 0.98650000E+0, 0.24622270E+3, 0.112E+3, 0.104E+3, 0.96280000E+0, 0.98080000E+0, + 0.17556460E+3, 0.112E+3, 0.105E+3, 0.96280000E+0, 0.97060000E+0, 0.12666570E+3, 0.112E+3, + 0.106E+3, 0.96280000E+0, 0.98680000E+0, 0.83770300E+2, 0.112E+3, 0.107E+3, 0.96280000E+0, + 0.99440000E+0, 0.58430300E+2, 0.112E+3, 0.108E+3, 0.96280000E+0, 0.99250000E+0, 0.37988400E+2, + 0.112E+3, 0.109E+3, 0.96280000E+0, 0.99820000E+0, 0.28960820E+3, 0.112E+3, 0.111E+3, + 0.96280000E+0, 0.96840000E+0, 0.45127080E+3, 0.112E+3, 0.112E+3, 0.96280000E+0, 0.96280000E+0, + 0.33104800E+2, 0.113E+3, 0.100E+1, 0.96480000E+0, 0.91180000E+0, 0.20515800E+2, 0.113E+3, + 0.200E+1, 0.96480000E+0, 0.00000000E+0, 0.62753090E+3, 0.113E+3, 0.300E+1, 0.96480000E+0, + 0.00000000E+0, 0.33473350E+3, 0.113E+3, 0.400E+1, 0.96480000E+0, 0.00000000E+0, 0.21388480E+3, + 0.113E+3, 0.500E+1, 0.96480000E+0, 0.00000000E+0, 0.13832540E+3, 0.113E+3, 0.600E+1, + 0.96480000E+0, 0.00000000E+0, 0.93354200E+2, 0.113E+3, 0.700E+1, 0.96480000E+0, 0.00000000E+0, + 0.68798300E+2, 0.113E+3, 0.800E+1, 0.96480000E+0, 0.00000000E+0, 0.50857700E+2, 0.113E+3, + 0.900E+1, 0.96480000E+0, 0.00000000E+0, 0.38315400E+2, 0.113E+3, 0.100E+2, 0.96480000E+0, + 0.00000000E+0, 0.74634190E+3, 0.113E+3, 0.110E+2, 0.96480000E+0, 0.00000000E+0, 0.54102850E+3, + 0.113E+3, 0.120E+2, 0.96480000E+0, 0.00000000E+0, 0.48623650E+3, 0.113E+3, 0.130E+2, + 0.96480000E+0, 0.00000000E+0, 0.36962320E+3, 0.113E+3, 0.140E+2, 0.96480000E+0, 0.00000000E+0, + 0.27892720E+3, 0.113E+3, 0.150E+2, 0.96480000E+0, 0.00000000E+0, 0.22621560E+3, 0.113E+3, + 0.160E+2, 0.96480000E+0, 0.00000000E+0, 0.18054300E+3, 0.113E+3, 0.170E+2, 0.96480000E+0, + 0.00000000E+0, 0.14457980E+3, 0.113E+3, 0.180E+2, 0.96480000E+0, 0.00000000E+0, 0.12332237E+4, + 0.113E+3, 0.190E+2, 0.96480000E+0, 0.00000000E+0, 0.97304930E+3, 0.113E+3, 0.200E+2, + 0.96480000E+0, 0.00000000E+0, 0.79522060E+3, 0.113E+3, 0.210E+2, 0.96480000E+0, 0.00000000E+0, + 0.75945320E+3, 0.113E+3, 0.220E+2, 0.96480000E+0, 0.00000000E+0, 0.69091560E+3, 0.113E+3, + 0.230E+2, 0.96480000E+0, 0.00000000E+0, 0.54224590E+3, 0.113E+3, 0.240E+2, 0.96480000E+0, + 0.00000000E+0, 0.58914750E+3, 0.113E+3, 0.250E+2, 0.96480000E+0, 0.00000000E+0, 0.46004960E+3, + 0.113E+3, 0.260E+2, 0.96480000E+0, 0.00000000E+0, 0.48229900E+3, 0.113E+3, 0.270E+2, + 0.96480000E+0, 0.00000000E+0, 0.50035250E+3, 0.113E+3, 0.280E+2, 0.96480000E+0, 0.00000000E+0, + 0.38199230E+3, 0.113E+3, 0.290E+2, 0.96480000E+0, 0.00000000E+0, 0.38514490E+3, 0.113E+3, + 0.300E+2, 0.96480000E+0, 0.00000000E+0, 0.45995440E+3, 0.113E+3, 0.310E+2, 0.96480000E+0, + 0.00000000E+0, 0.39466500E+3, 0.113E+3, 0.320E+2, 0.96480000E+0, 0.00000000E+0, 0.32772290E+3, + 0.113E+3, 0.330E+2, 0.96480000E+0, 0.00000000E+0, 0.28884850E+3, 0.113E+3, 0.340E+2, + 0.96480000E+0, 0.00000000E+0, 0.24796920E+3, 0.113E+3, 0.350E+2, 0.96480000E+0, 0.00000000E+0, + 0.21169490E+3, 0.113E+3, 0.360E+2, 0.96480000E+0, 0.00000000E+0, 0.13752558E+4, 0.113E+3, + 0.370E+2, 0.96480000E+0, 0.00000000E+0, 0.11602539E+4, 0.113E+3, 0.380E+2, 0.96480000E+0, + 0.00000000E+0, 0.99637570E+3, 0.113E+3, 0.390E+2, 0.96480000E+0, 0.00000000E+0, 0.88385410E+3, + 0.113E+3, 0.400E+2, 0.96480000E+0, 0.00000000E+0, 0.79860940E+3, 0.113E+3, 0.410E+2, + 0.96480000E+0, 0.00000000E+0, 0.60591350E+3, 0.113E+3, 0.420E+2, 0.96480000E+0, 0.00000000E+0, + 0.68054270E+3, 0.113E+3, 0.430E+2, 0.96480000E+0, 0.00000000E+0, 0.50852890E+3, 0.113E+3, + 0.440E+2, 0.96480000E+0, 0.00000000E+0, 0.55700430E+3, 0.113E+3, 0.450E+2, 0.96480000E+0, + 0.00000000E+0, 0.51341630E+3, 0.113E+3, 0.460E+2, 0.96480000E+0, 0.00000000E+0, 0.42799620E+3, + 0.113E+3, 0.470E+2, 0.96480000E+0, 0.00000000E+0, 0.44880710E+3, 0.113E+3, 0.480E+2, + 0.96480000E+0, 0.00000000E+0, 0.57434200E+3, 0.113E+3, 0.490E+2, 0.96480000E+0, 0.00000000E+0, + 0.51984240E+3, 0.113E+3, 0.500E+2, 0.96480000E+0, 0.00000000E+0, 0.45284940E+3, 0.113E+3, + 0.510E+2, 0.96480000E+0, 0.00000000E+0, 0.41405440E+3, 0.113E+3, 0.520E+2, 0.96480000E+0, + 0.00000000E+0, 0.36827920E+3, 0.113E+3, 0.530E+2, 0.96480000E+0, 0.00000000E+0, 0.32576250E+3, + 0.113E+3, 0.540E+2, 0.96480000E+0, 0.00000000E+0, 0.16731922E+4, 0.113E+3, 0.550E+2, + 0.96480000E+0, 0.00000000E+0, 0.14872964E+4, 0.113E+3, 0.560E+2, 0.96480000E+0, 0.00000000E+0, + 0.12815229E+4, 0.113E+3, 0.570E+2, 0.96480000E+0, 0.00000000E+0, 0.53656260E+3, 0.113E+3, + 0.580E+2, 0.96480000E+0, 0.27991000E+1, 0.13086041E+4, 0.113E+3, 0.590E+2, 0.96480000E+0, + 0.00000000E+0, 0.12526928E+4, 0.113E+3, 0.600E+2, 0.96480000E+0, 0.00000000E+0, 0.12202246E+4, + 0.113E+3, 0.610E+2, 0.96480000E+0, 0.00000000E+0, 0.11905003E+4, 0.113E+3, 0.620E+2, + 0.96480000E+0, 0.00000000E+0, 0.11641089E+4, 0.113E+3, 0.630E+2, 0.96480000E+0, 0.00000000E+0, + 0.89395150E+3, 0.113E+3, 0.640E+2, 0.96480000E+0, 0.00000000E+0, 0.10381047E+4, 0.113E+3, + 0.650E+2, 0.96480000E+0, 0.00000000E+0, 0.99738370E+3, 0.113E+3, 0.660E+2, 0.96480000E+0, + 0.00000000E+0, 0.10450038E+4, 0.113E+3, 0.670E+2, 0.96480000E+0, 0.00000000E+0, 0.10223674E+4, + 0.113E+3, 0.680E+2, 0.96480000E+0, 0.00000000E+0, 0.10016784E+4, 0.113E+3, 0.690E+2, + 0.96480000E+0, 0.00000000E+0, 0.99098080E+3, 0.113E+3, 0.700E+2, 0.96480000E+0, 0.00000000E+0, + 0.82160050E+3, 0.113E+3, 0.710E+2, 0.96480000E+0, 0.00000000E+0, 0.79184560E+3, 0.113E+3, + 0.720E+2, 0.96480000E+0, 0.00000000E+0, 0.71274220E+3, 0.113E+3, 0.730E+2, 0.96480000E+0, + 0.00000000E+0, 0.59416160E+3, 0.113E+3, 0.740E+2, 0.96480000E+0, 0.00000000E+0, 0.60157800E+3, + 0.113E+3, 0.750E+2, 0.96480000E+0, 0.00000000E+0, 0.53838550E+3, 0.113E+3, 0.760E+2, + 0.96480000E+0, 0.00000000E+0, 0.48789840E+3, 0.113E+3, 0.770E+2, 0.96480000E+0, 0.00000000E+0, + 0.39997680E+3, 0.113E+3, 0.780E+2, 0.96480000E+0, 0.00000000E+0, 0.37172100E+3, 0.113E+3, + 0.790E+2, 0.96480000E+0, 0.00000000E+0, 0.38105900E+3, 0.113E+3, 0.800E+2, 0.96480000E+0, + 0.00000000E+0, 0.58469720E+3, 0.113E+3, 0.810E+2, 0.96480000E+0, 0.00000000E+0, 0.56268750E+3, + 0.113E+3, 0.820E+2, 0.96480000E+0, 0.00000000E+0, 0.50686630E+3, 0.113E+3, 0.830E+2, + 0.96480000E+0, 0.00000000E+0, 0.47758620E+3, 0.113E+3, 0.840E+2, 0.96480000E+0, 0.00000000E+0, + 0.43409690E+3, 0.113E+3, 0.850E+2, 0.96480000E+0, 0.00000000E+0, 0.39211690E+3, 0.113E+3, + 0.860E+2, 0.96480000E+0, 0.00000000E+0, 0.15558848E+4, 0.113E+3, 0.870E+2, 0.96480000E+0, + 0.00000000E+0, 0.14554241E+4, 0.113E+3, 0.880E+2, 0.96480000E+0, 0.00000000E+0, 0.12633724E+4, + 0.113E+3, 0.890E+2, 0.96480000E+0, 0.00000000E+0, 0.11100628E+4, 0.113E+3, 0.900E+2, + 0.96480000E+0, 0.00000000E+0, 0.11130738E+4, 0.113E+3, 0.910E+2, 0.96480000E+0, 0.00000000E+0, + 0.10770005E+4, 0.113E+3, 0.920E+2, 0.96480000E+0, 0.00000000E+0, 0.11238008E+4, 0.113E+3, + 0.930E+2, 0.96480000E+0, 0.00000000E+0, 0.10856846E+4, 0.113E+3, 0.940E+2, 0.96480000E+0, + 0.00000000E+0, 0.55263600E+2, 0.113E+3, 0.101E+3, 0.96480000E+0, 0.00000000E+0, 0.19307070E+3, + 0.113E+3, 0.103E+3, 0.96480000E+0, 0.98650000E+0, 0.24376120E+3, 0.113E+3, 0.104E+3, + 0.96480000E+0, 0.98080000E+0, 0.17772540E+3, 0.113E+3, 0.105E+3, 0.96480000E+0, 0.97060000E+0, + 0.12969220E+3, 0.113E+3, 0.106E+3, 0.96480000E+0, 0.98680000E+0, 0.86872800E+2, 0.113E+3, + 0.107E+3, 0.96480000E+0, 0.99440000E+0, 0.61217500E+2, 0.113E+3, 0.108E+3, 0.96480000E+0, + 0.99250000E+0, 0.40322000E+2, 0.113E+3, 0.109E+3, 0.96480000E+0, 0.99820000E+0, 0.28422510E+3, + 0.113E+3, 0.111E+3, 0.96480000E+0, 0.96840000E+0, 0.44173220E+3, 0.113E+3, 0.112E+3, + 0.96480000E+0, 0.96280000E+0, 0.43775750E+3, 0.113E+3, 0.113E+3, 0.96480000E+0, 0.96480000E+0, + 0.27498900E+2, 0.114E+3, 0.100E+1, 0.95070000E+0, 0.91180000E+0, 0.17635600E+2, 0.114E+3, + 0.200E+1, 0.95070000E+0, 0.00000000E+0, 0.45095830E+3, 0.114E+3, 0.300E+1, 0.95070000E+0, + 0.00000000E+0, 0.25658810E+3, 0.114E+3, 0.400E+1, 0.95070000E+0, 0.00000000E+0, 0.17018910E+3, + 0.114E+3, 0.500E+1, 0.95070000E+0, 0.00000000E+0, 0.11320460E+3, 0.114E+3, 0.600E+1, + 0.95070000E+0, 0.00000000E+0, 0.78019000E+2, 0.114E+3, 0.700E+1, 0.95070000E+0, 0.00000000E+0, + 0.58355700E+2, 0.114E+3, 0.800E+1, 0.95070000E+0, 0.00000000E+0, 0.43685500E+2, 0.114E+3, + 0.900E+1, 0.95070000E+0, 0.00000000E+0, 0.33241600E+2, 0.114E+3, 0.100E+2, 0.95070000E+0, + 0.00000000E+0, 0.53834120E+3, 0.114E+3, 0.110E+2, 0.95070000E+0, 0.00000000E+0, 0.40991740E+3, + 0.114E+3, 0.120E+2, 0.95070000E+0, 0.00000000E+0, 0.37552330E+3, 0.114E+3, 0.130E+2, + 0.95070000E+0, 0.00000000E+0, 0.29299940E+3, 0.114E+3, 0.140E+2, 0.95070000E+0, 0.00000000E+0, + 0.22606570E+3, 0.114E+3, 0.150E+2, 0.95070000E+0, 0.00000000E+0, 0.18600510E+3, 0.114E+3, + 0.160E+2, 0.95070000E+0, 0.00000000E+0, 0.15052310E+3, 0.114E+3, 0.170E+2, 0.95070000E+0, + 0.00000000E+0, 0.12200120E+3, 0.114E+3, 0.180E+2, 0.95070000E+0, 0.00000000E+0, 0.88126240E+3, + 0.114E+3, 0.190E+2, 0.95070000E+0, 0.00000000E+0, 0.72251110E+3, 0.114E+3, 0.200E+2, + 0.95070000E+0, 0.00000000E+0, 0.59567250E+3, 0.114E+3, 0.210E+2, 0.95070000E+0, 0.00000000E+0, + 0.57349880E+3, 0.114E+3, 0.220E+2, 0.95070000E+0, 0.00000000E+0, 0.52428080E+3, 0.114E+3, + 0.230E+2, 0.95070000E+0, 0.00000000E+0, 0.41188790E+3, 0.114E+3, 0.240E+2, 0.95070000E+0, + 0.00000000E+0, 0.45022340E+3, 0.114E+3, 0.250E+2, 0.95070000E+0, 0.00000000E+0, 0.35224080E+3, + 0.114E+3, 0.260E+2, 0.95070000E+0, 0.00000000E+0, 0.37301250E+3, 0.114E+3, 0.270E+2, + 0.95070000E+0, 0.00000000E+0, 0.38500480E+3, 0.114E+3, 0.280E+2, 0.95070000E+0, 0.00000000E+0, + 0.29414060E+3, 0.114E+3, 0.290E+2, 0.95070000E+0, 0.00000000E+0, 0.30117090E+3, 0.114E+3, + 0.300E+2, 0.95070000E+0, 0.00000000E+0, 0.35794110E+3, 0.114E+3, 0.310E+2, 0.95070000E+0, + 0.00000000E+0, 0.31339110E+3, 0.114E+3, 0.320E+2, 0.95070000E+0, 0.00000000E+0, 0.26507110E+3, + 0.114E+3, 0.330E+2, 0.95070000E+0, 0.00000000E+0, 0.23633230E+3, 0.114E+3, 0.340E+2, + 0.95070000E+0, 0.00000000E+0, 0.20529760E+3, 0.114E+3, 0.350E+2, 0.95070000E+0, 0.00000000E+0, + 0.17718110E+3, 0.114E+3, 0.360E+2, 0.95070000E+0, 0.00000000E+0, 0.98604380E+3, 0.114E+3, + 0.370E+2, 0.95070000E+0, 0.00000000E+0, 0.86034210E+3, 0.114E+3, 0.380E+2, 0.95070000E+0, + 0.00000000E+0, 0.75038170E+3, 0.114E+3, 0.390E+2, 0.95070000E+0, 0.00000000E+0, 0.67218340E+3, + 0.114E+3, 0.400E+2, 0.95070000E+0, 0.00000000E+0, 0.61131470E+3, 0.114E+3, 0.410E+2, + 0.95070000E+0, 0.00000000E+0, 0.46910920E+3, 0.114E+3, 0.420E+2, 0.95070000E+0, 0.00000000E+0, + 0.52464790E+3, 0.114E+3, 0.430E+2, 0.95070000E+0, 0.00000000E+0, 0.39698620E+3, 0.114E+3, + 0.440E+2, 0.95070000E+0, 0.00000000E+0, 0.43472510E+3, 0.114E+3, 0.450E+2, 0.95070000E+0, + 0.00000000E+0, 0.40236620E+3, 0.114E+3, 0.460E+2, 0.95070000E+0, 0.00000000E+0, 0.33466730E+3, + 0.114E+3, 0.470E+2, 0.95070000E+0, 0.00000000E+0, 0.35359760E+3, 0.114E+3, 0.480E+2, + 0.95070000E+0, 0.00000000E+0, 0.44659370E+3, 0.114E+3, 0.490E+2, 0.95070000E+0, 0.00000000E+0, + 0.41089600E+3, 0.114E+3, 0.500E+2, 0.95070000E+0, 0.00000000E+0, 0.36378460E+3, 0.114E+3, + 0.510E+2, 0.95070000E+0, 0.00000000E+0, 0.33592400E+3, 0.114E+3, 0.520E+2, 0.95070000E+0, + 0.00000000E+0, 0.30198520E+3, 0.114E+3, 0.530E+2, 0.95070000E+0, 0.00000000E+0, 0.26983720E+3, + 0.114E+3, 0.540E+2, 0.95070000E+0, 0.00000000E+0, 0.12005803E+4, 0.114E+3, 0.550E+2, + 0.95070000E+0, 0.00000000E+0, 0.10973980E+4, 0.114E+3, 0.560E+2, 0.95070000E+0, 0.00000000E+0, + 0.96023320E+3, 0.114E+3, 0.570E+2, 0.95070000E+0, 0.00000000E+0, 0.42980740E+3, 0.114E+3, + 0.580E+2, 0.95070000E+0, 0.27991000E+1, 0.97039570E+3, 0.114E+3, 0.590E+2, 0.95070000E+0, + 0.00000000E+0, 0.93129170E+3, 0.114E+3, 0.600E+2, 0.95070000E+0, 0.00000000E+0, 0.90779700E+3, + 0.114E+3, 0.610E+2, 0.95070000E+0, 0.00000000E+0, 0.88621930E+3, 0.114E+3, 0.620E+2, + 0.95070000E+0, 0.00000000E+0, 0.86708440E+3, 0.114E+3, 0.630E+2, 0.95070000E+0, 0.00000000E+0, + 0.67748060E+3, 0.114E+3, 0.640E+2, 0.95070000E+0, 0.00000000E+0, 0.76730550E+3, 0.114E+3, + 0.650E+2, 0.95070000E+0, 0.00000000E+0, 0.73939750E+3, 0.114E+3, 0.660E+2, 0.95070000E+0, + 0.00000000E+0, 0.78137480E+3, 0.114E+3, 0.670E+2, 0.95070000E+0, 0.00000000E+0, 0.76476680E+3, + 0.114E+3, 0.680E+2, 0.95070000E+0, 0.00000000E+0, 0.74974130E+3, 0.114E+3, 0.690E+2, + 0.95070000E+0, 0.00000000E+0, 0.74120300E+3, 0.114E+3, 0.700E+2, 0.95070000E+0, 0.00000000E+0, + 0.62181690E+3, 0.114E+3, 0.710E+2, 0.95070000E+0, 0.00000000E+0, 0.60906080E+3, 0.114E+3, + 0.720E+2, 0.95070000E+0, 0.00000000E+0, 0.55365420E+3, 0.114E+3, 0.730E+2, 0.95070000E+0, + 0.00000000E+0, 0.46519420E+3, 0.114E+3, 0.740E+2, 0.95070000E+0, 0.00000000E+0, 0.47279230E+3, + 0.114E+3, 0.750E+2, 0.95070000E+0, 0.00000000E+0, 0.42679800E+3, 0.114E+3, 0.760E+2, + 0.95070000E+0, 0.00000000E+0, 0.38949880E+3, 0.114E+3, 0.770E+2, 0.95070000E+0, 0.00000000E+0, + 0.32171830E+3, 0.114E+3, 0.780E+2, 0.95070000E+0, 0.00000000E+0, 0.29988580E+3, 0.114E+3, + 0.790E+2, 0.95070000E+0, 0.00000000E+0, 0.30842630E+3, 0.114E+3, 0.800E+2, 0.95070000E+0, + 0.00000000E+0, 0.45658720E+3, 0.114E+3, 0.810E+2, 0.95070000E+0, 0.00000000E+0, 0.44500360E+3, + 0.114E+3, 0.820E+2, 0.95070000E+0, 0.00000000E+0, 0.40670170E+3, 0.114E+3, 0.830E+2, + 0.95070000E+0, 0.00000000E+0, 0.38646750E+3, 0.114E+3, 0.840E+2, 0.95070000E+0, 0.00000000E+0, + 0.35486660E+3, 0.114E+3, 0.850E+2, 0.95070000E+0, 0.00000000E+0, 0.32354110E+3, 0.114E+3, + 0.860E+2, 0.95070000E+0, 0.00000000E+0, 0.11298915E+4, 0.114E+3, 0.870E+2, 0.95070000E+0, + 0.00000000E+0, 0.10825018E+4, 0.114E+3, 0.880E+2, 0.95070000E+0, 0.00000000E+0, 0.95314260E+3, + 0.114E+3, 0.890E+2, 0.95070000E+0, 0.00000000E+0, 0.85147580E+3, 0.114E+3, 0.900E+2, + 0.95070000E+0, 0.00000000E+0, 0.84679590E+3, 0.114E+3, 0.910E+2, 0.95070000E+0, 0.00000000E+0, + 0.81968560E+3, 0.114E+3, 0.920E+2, 0.95070000E+0, 0.00000000E+0, 0.84655430E+3, 0.114E+3, + 0.930E+2, 0.95070000E+0, 0.00000000E+0, 0.81936980E+3, 0.114E+3, 0.940E+2, 0.95070000E+0, + 0.00000000E+0, 0.44903000E+2, 0.114E+3, 0.101E+3, 0.95070000E+0, 0.00000000E+0, 0.14874780E+3, + 0.114E+3, 0.103E+3, 0.95070000E+0, 0.98650000E+0, 0.18910900E+3, 0.114E+3, 0.104E+3, + 0.95070000E+0, 0.98080000E+0, 0.14251230E+3, 0.114E+3, 0.105E+3, 0.95070000E+0, 0.97060000E+0, + 0.10608060E+3, 0.114E+3, 0.106E+3, 0.95070000E+0, 0.98680000E+0, 0.72637300E+2, 0.114E+3, + 0.107E+3, 0.95070000E+0, 0.99440000E+0, 0.52131100E+2, 0.114E+3, 0.108E+3, 0.95070000E+0, + 0.99250000E+0, 0.35129000E+2, 0.114E+3, 0.109E+3, 0.95070000E+0, 0.99820000E+0, 0.21750490E+3, + 0.114E+3, 0.111E+3, 0.95070000E+0, 0.96840000E+0, 0.33702500E+3, 0.114E+3, 0.112E+3, + 0.95070000E+0, 0.96280000E+0, 0.33965160E+3, 0.114E+3, 0.113E+3, 0.95070000E+0, 0.96480000E+0, + 0.27026500E+3, 0.114E+3, 0.114E+3, 0.95070000E+0, 0.95070000E+0, 0.23090800E+2, 0.115E+3, + 0.100E+1, 0.99470000E+0, 0.91180000E+0, 0.15261900E+2, 0.115E+3, 0.200E+1, 0.99470000E+0, + 0.00000000E+0, 0.33966930E+3, 0.115E+3, 0.300E+1, 0.99470000E+0, 0.00000000E+0, 0.20222820E+3, + 0.115E+3, 0.400E+1, 0.99470000E+0, 0.00000000E+0, 0.13807740E+3, 0.115E+3, 0.500E+1, + 0.99470000E+0, 0.00000000E+0, 0.93966300E+2, 0.115E+3, 0.600E+1, 0.99470000E+0, 0.00000000E+0, + 0.65912700E+2, 0.115E+3, 0.700E+1, 0.99470000E+0, 0.00000000E+0, 0.49937400E+2, 0.115E+3, + 0.800E+1, 0.99470000E+0, 0.00000000E+0, 0.37803500E+2, 0.115E+3, 0.900E+1, 0.99470000E+0, + 0.00000000E+0, 0.29028000E+2, 0.115E+3, 0.100E+2, 0.99470000E+0, 0.00000000E+0, 0.40671500E+3, + 0.115E+3, 0.110E+2, 0.99470000E+0, 0.00000000E+0, 0.32041760E+3, 0.115E+3, 0.120E+2, + 0.99470000E+0, 0.00000000E+0, 0.29780760E+3, 0.115E+3, 0.130E+2, 0.99470000E+0, 0.00000000E+0, + 0.23698640E+3, 0.115E+3, 0.140E+2, 0.99470000E+0, 0.00000000E+0, 0.18606840E+3, 0.115E+3, + 0.150E+2, 0.99470000E+0, 0.00000000E+0, 0.15492290E+3, 0.115E+3, 0.160E+2, 0.99470000E+0, + 0.00000000E+0, 0.12683120E+3, 0.115E+3, 0.170E+2, 0.99470000E+0, 0.00000000E+0, 0.10386530E+3, + 0.115E+3, 0.180E+2, 0.99470000E+0, 0.00000000E+0, 0.66311840E+3, 0.115E+3, 0.190E+2, + 0.99470000E+0, 0.00000000E+0, 0.55742550E+3, 0.115E+3, 0.200E+2, 0.99470000E+0, 0.00000000E+0, + 0.46235110E+3, 0.115E+3, 0.210E+2, 0.99470000E+0, 0.00000000E+0, 0.44795900E+3, 0.115E+3, + 0.220E+2, 0.99470000E+0, 0.00000000E+0, 0.41101210E+3, 0.115E+3, 0.230E+2, 0.99470000E+0, + 0.00000000E+0, 0.32359140E+3, 0.115E+3, 0.240E+2, 0.99470000E+0, 0.00000000E+0, 0.35484320E+3, + 0.115E+3, 0.250E+2, 0.99470000E+0, 0.00000000E+0, 0.27840200E+3, 0.115E+3, 0.260E+2, + 0.99470000E+0, 0.00000000E+0, 0.29657890E+3, 0.115E+3, 0.270E+2, 0.99470000E+0, 0.00000000E+0, + 0.30491450E+3, 0.115E+3, 0.280E+2, 0.99470000E+0, 0.00000000E+0, 0.23348980E+3, 0.115E+3, + 0.290E+2, 0.99470000E+0, 0.00000000E+0, 0.24143800E+3, 0.115E+3, 0.300E+2, 0.99470000E+0, + 0.00000000E+0, 0.28580720E+3, 0.115E+3, 0.310E+2, 0.99470000E+0, 0.00000000E+0, 0.25397440E+3, + 0.115E+3, 0.320E+2, 0.99470000E+0, 0.00000000E+0, 0.21789200E+3, 0.115E+3, 0.330E+2, + 0.99470000E+0, 0.00000000E+0, 0.19608060E+3, 0.115E+3, 0.340E+2, 0.99470000E+0, 0.00000000E+0, + 0.17199100E+3, 0.115E+3, 0.350E+2, 0.99470000E+0, 0.00000000E+0, 0.14979330E+3, 0.115E+3, + 0.360E+2, 0.99470000E+0, 0.00000000E+0, 0.74424750E+3, 0.115E+3, 0.370E+2, 0.99470000E+0, + 0.00000000E+0, 0.66356560E+3, 0.115E+3, 0.380E+2, 0.99470000E+0, 0.00000000E+0, 0.58524670E+3, + 0.115E+3, 0.390E+2, 0.99470000E+0, 0.00000000E+0, 0.52808410E+3, 0.115E+3, 0.400E+2, + 0.99470000E+0, 0.00000000E+0, 0.48270360E+3, 0.115E+3, 0.410E+2, 0.99470000E+0, 0.00000000E+0, + 0.37394270E+3, 0.115E+3, 0.420E+2, 0.99470000E+0, 0.00000000E+0, 0.41670800E+3, 0.115E+3, + 0.430E+2, 0.99470000E+0, 0.00000000E+0, 0.31859120E+3, 0.115E+3, 0.440E+2, 0.99470000E+0, + 0.00000000E+0, 0.34844490E+3, 0.115E+3, 0.450E+2, 0.99470000E+0, 0.00000000E+0, 0.32352760E+3, + 0.115E+3, 0.460E+2, 0.99470000E+0, 0.00000000E+0, 0.26912200E+3, 0.115E+3, 0.470E+2, + 0.99470000E+0, 0.00000000E+0, 0.28548020E+3, 0.115E+3, 0.480E+2, 0.99470000E+0, 0.00000000E+0, + 0.35690690E+3, 0.115E+3, 0.490E+2, 0.99470000E+0, 0.00000000E+0, 0.33217220E+3, 0.115E+3, + 0.500E+2, 0.99470000E+0, 0.00000000E+0, 0.29765980E+3, 0.115E+3, 0.510E+2, 0.99470000E+0, + 0.00000000E+0, 0.27698090E+3, 0.115E+3, 0.520E+2, 0.99470000E+0, 0.00000000E+0, 0.25110810E+3, + 0.115E+3, 0.530E+2, 0.99470000E+0, 0.00000000E+0, 0.22622110E+3, 0.115E+3, 0.540E+2, + 0.99470000E+0, 0.00000000E+0, 0.90729930E+3, 0.115E+3, 0.550E+2, 0.99470000E+0, 0.00000000E+0, + 0.84401200E+3, 0.115E+3, 0.560E+2, 0.99470000E+0, 0.00000000E+0, 0.74659930E+3, 0.115E+3, + 0.570E+2, 0.99470000E+0, 0.00000000E+0, 0.35115850E+3, 0.115E+3, 0.580E+2, 0.99470000E+0, + 0.27991000E+1, 0.74914380E+3, 0.115E+3, 0.590E+2, 0.99470000E+0, 0.00000000E+0, 0.72014500E+3, + 0.115E+3, 0.600E+2, 0.99470000E+0, 0.00000000E+0, 0.70229590E+3, 0.115E+3, 0.610E+2, + 0.99470000E+0, 0.00000000E+0, 0.68586200E+3, 0.115E+3, 0.620E+2, 0.99470000E+0, 0.00000000E+0, + 0.67130090E+3, 0.115E+3, 0.630E+2, 0.99470000E+0, 0.00000000E+0, 0.53154240E+3, 0.115E+3, + 0.640E+2, 0.99470000E+0, 0.00000000E+0, 0.59201350E+3, 0.115E+3, 0.650E+2, 0.99470000E+0, + 0.00000000E+0, 0.57174810E+3, 0.115E+3, 0.660E+2, 0.99470000E+0, 0.00000000E+0, 0.60649400E+3, + 0.115E+3, 0.670E+2, 0.99470000E+0, 0.00000000E+0, 0.59374030E+3, 0.115E+3, 0.680E+2, + 0.99470000E+0, 0.00000000E+0, 0.58229560E+3, 0.115E+3, 0.690E+2, 0.99470000E+0, 0.00000000E+0, + 0.57532620E+3, 0.115E+3, 0.700E+2, 0.99470000E+0, 0.00000000E+0, 0.48706190E+3, 0.115E+3, + 0.710E+2, 0.99470000E+0, 0.00000000E+0, 0.48246160E+3, 0.115E+3, 0.720E+2, 0.99470000E+0, + 0.00000000E+0, 0.44186160E+3, 0.115E+3, 0.730E+2, 0.99470000E+0, 0.00000000E+0, 0.37386540E+3, + 0.115E+3, 0.740E+2, 0.99470000E+0, 0.00000000E+0, 0.38091200E+3, 0.115E+3, 0.750E+2, + 0.99470000E+0, 0.00000000E+0, 0.34613260E+3, 0.115E+3, 0.760E+2, 0.99470000E+0, 0.00000000E+0, + 0.31760850E+3, 0.115E+3, 0.770E+2, 0.99470000E+0, 0.00000000E+0, 0.26410910E+3, 0.115E+3, + 0.780E+2, 0.99470000E+0, 0.00000000E+0, 0.24683080E+3, 0.115E+3, 0.790E+2, 0.99470000E+0, + 0.00000000E+0, 0.25431280E+3, 0.115E+3, 0.800E+2, 0.99470000E+0, 0.00000000E+0, 0.36658420E+3, + 0.115E+3, 0.810E+2, 0.99470000E+0, 0.00000000E+0, 0.36026310E+3, 0.115E+3, 0.820E+2, + 0.99470000E+0, 0.00000000E+0, 0.33271860E+3, 0.115E+3, 0.830E+2, 0.99470000E+0, 0.00000000E+0, + 0.31818410E+3, 0.115E+3, 0.840E+2, 0.99470000E+0, 0.00000000E+0, 0.29447100E+3, 0.115E+3, + 0.850E+2, 0.99470000E+0, 0.00000000E+0, 0.27046770E+3, 0.115E+3, 0.860E+2, 0.99470000E+0, + 0.00000000E+0, 0.86138240E+3, 0.115E+3, 0.870E+2, 0.99470000E+0, 0.00000000E+0, 0.83751280E+3, + 0.115E+3, 0.880E+2, 0.99470000E+0, 0.00000000E+0, 0.74476320E+3, 0.115E+3, 0.890E+2, + 0.99470000E+0, 0.00000000E+0, 0.67356880E+3, 0.115E+3, 0.900E+2, 0.99470000E+0, 0.00000000E+0, + 0.66625820E+3, 0.115E+3, 0.910E+2, 0.99470000E+0, 0.00000000E+0, 0.64514050E+3, 0.115E+3, + 0.920E+2, 0.99470000E+0, 0.00000000E+0, 0.66128050E+3, 0.115E+3, 0.930E+2, 0.99470000E+0, + 0.00000000E+0, 0.64087610E+3, 0.115E+3, 0.940E+2, 0.99470000E+0, 0.00000000E+0, 0.37023600E+2, + 0.115E+3, 0.101E+3, 0.99470000E+0, 0.00000000E+0, 0.11774720E+3, 0.115E+3, 0.103E+3, + 0.99470000E+0, 0.98650000E+0, 0.15060680E+3, 0.115E+3, 0.104E+3, 0.99470000E+0, 0.98080000E+0, + 0.11638180E+3, 0.115E+3, 0.105E+3, 0.99470000E+0, 0.97060000E+0, 0.88076900E+2, 0.115E+3, + 0.106E+3, 0.99470000E+0, 0.98680000E+0, 0.61428600E+2, 0.115E+3, 0.107E+3, 0.99470000E+0, + 0.99440000E+0, 0.44777000E+2, 0.115E+3, 0.108E+3, 0.99470000E+0, 0.99250000E+0, 0.30768800E+2, + 0.115E+3, 0.109E+3, 0.99470000E+0, 0.99820000E+0, 0.17144690E+3, 0.115E+3, 0.111E+3, + 0.99470000E+0, 0.96840000E+0, 0.26503780E+3, 0.115E+3, 0.112E+3, 0.99470000E+0, 0.96280000E+0, + 0.27035800E+3, 0.115E+3, 0.113E+3, 0.99470000E+0, 0.96480000E+0, 0.21928630E+3, 0.115E+3, + 0.114E+3, 0.99470000E+0, 0.95070000E+0, 0.18062380E+3, 0.115E+3, 0.115E+3, 0.99470000E+0, + 0.99470000E+0, 0.19866700E+2, 0.116E+3, 0.100E+1, 0.99480000E+0, 0.91180000E+0, 0.13459800E+2, + 0.116E+3, 0.200E+1, 0.99480000E+0, 0.00000000E+0, 0.27130110E+3, 0.116E+3, 0.300E+1, + 0.99480000E+0, 0.00000000E+0, 0.16618070E+3, 0.116E+3, 0.400E+1, 0.99480000E+0, 0.00000000E+0, + 0.11581680E+3, 0.116E+3, 0.500E+1, 0.99480000E+0, 0.00000000E+0, 0.80180400E+2, 0.116E+3, + 0.600E+1, 0.99480000E+0, 0.00000000E+0, 0.57025500E+2, 0.116E+3, 0.700E+1, 0.99480000E+0, + 0.00000000E+0, 0.43654800E+2, 0.116E+3, 0.800E+1, 0.99480000E+0, 0.00000000E+0, 0.33355000E+2, + 0.116E+3, 0.900E+1, 0.99480000E+0, 0.00000000E+0, 0.25810700E+2, 0.116E+3, 0.100E+2, + 0.99480000E+0, 0.00000000E+0, 0.32559690E+3, 0.116E+3, 0.110E+2, 0.99480000E+0, 0.00000000E+0, + 0.26194370E+3, 0.116E+3, 0.120E+2, 0.99480000E+0, 0.00000000E+0, 0.24585680E+3, 0.116E+3, + 0.130E+2, 0.99480000E+0, 0.00000000E+0, 0.19832660E+3, 0.116E+3, 0.140E+2, 0.99480000E+0, + 0.00000000E+0, 0.15769710E+3, 0.116E+3, 0.150E+2, 0.99480000E+0, 0.00000000E+0, 0.13249220E+3, + 0.116E+3, 0.160E+2, 0.99480000E+0, 0.00000000E+0, 0.10944860E+3, 0.116E+3, 0.170E+2, + 0.99480000E+0, 0.00000000E+0, 0.90371600E+2, 0.116E+3, 0.180E+2, 0.99480000E+0, 0.00000000E+0, + 0.53051920E+3, 0.116E+3, 0.190E+2, 0.99480000E+0, 0.00000000E+0, 0.45237450E+3, 0.116E+3, + 0.200E+2, 0.99480000E+0, 0.00000000E+0, 0.37661420E+3, 0.116E+3, 0.210E+2, 0.99480000E+0, + 0.00000000E+0, 0.36651510E+3, 0.116E+3, 0.220E+2, 0.99480000E+0, 0.00000000E+0, 0.33712500E+3, + 0.116E+3, 0.230E+2, 0.99480000E+0, 0.00000000E+0, 0.26607620E+3, 0.116E+3, 0.240E+2, + 0.99480000E+0, 0.00000000E+0, 0.29212570E+3, 0.116E+3, 0.250E+2, 0.99480000E+0, 0.00000000E+0, + 0.22987760E+3, 0.116E+3, 0.260E+2, 0.99480000E+0, 0.00000000E+0, 0.24559880E+3, 0.116E+3, + 0.270E+2, 0.99480000E+0, 0.00000000E+0, 0.25180970E+3, 0.116E+3, 0.280E+2, 0.99480000E+0, + 0.00000000E+0, 0.19338650E+3, 0.116E+3, 0.290E+2, 0.99480000E+0, 0.00000000E+0, 0.20107040E+3, + 0.116E+3, 0.300E+2, 0.99480000E+0, 0.00000000E+0, 0.23725630E+3, 0.116E+3, 0.310E+2, + 0.99480000E+0, 0.00000000E+0, 0.21294370E+3, 0.116E+3, 0.320E+2, 0.99480000E+0, 0.00000000E+0, + 0.18454670E+3, 0.116E+3, 0.330E+2, 0.99480000E+0, 0.00000000E+0, 0.16722640E+3, 0.116E+3, + 0.340E+2, 0.99480000E+0, 0.00000000E+0, 0.14776790E+3, 0.116E+3, 0.350E+2, 0.99480000E+0, + 0.00000000E+0, 0.12961230E+3, 0.116E+3, 0.360E+2, 0.99480000E+0, 0.00000000E+0, 0.59687630E+3, + 0.116E+3, 0.370E+2, 0.99480000E+0, 0.00000000E+0, 0.53867240E+3, 0.116E+3, 0.380E+2, + 0.99480000E+0, 0.00000000E+0, 0.47852040E+3, 0.116E+3, 0.390E+2, 0.99480000E+0, 0.00000000E+0, + 0.43390360E+3, 0.116E+3, 0.400E+2, 0.99480000E+0, 0.00000000E+0, 0.39804190E+3, 0.116E+3, + 0.410E+2, 0.99480000E+0, 0.00000000E+0, 0.31058610E+3, 0.116E+3, 0.420E+2, 0.99480000E+0, + 0.00000000E+0, 0.34514340E+3, 0.116E+3, 0.430E+2, 0.99480000E+0, 0.00000000E+0, 0.26595280E+3, + 0.116E+3, 0.440E+2, 0.99480000E+0, 0.00000000E+0, 0.29041460E+3, 0.116E+3, 0.450E+2, + 0.99480000E+0, 0.00000000E+0, 0.27025240E+3, 0.116E+3, 0.460E+2, 0.99480000E+0, 0.00000000E+0, + 0.22511810E+3, 0.116E+3, 0.470E+2, 0.99480000E+0, 0.00000000E+0, 0.23917840E+3, 0.116E+3, + 0.480E+2, 0.99480000E+0, 0.00000000E+0, 0.29682140E+3, 0.116E+3, 0.490E+2, 0.99480000E+0, + 0.00000000E+0, 0.27827870E+3, 0.116E+3, 0.500E+2, 0.99480000E+0, 0.00000000E+0, 0.25143440E+3, + 0.116E+3, 0.510E+2, 0.99480000E+0, 0.00000000E+0, 0.23525190E+3, 0.116E+3, 0.520E+2, + 0.99480000E+0, 0.00000000E+0, 0.21460020E+3, 0.116E+3, 0.530E+2, 0.99480000E+0, 0.00000000E+0, + 0.19452370E+3, 0.116E+3, 0.540E+2, 0.99480000E+0, 0.00000000E+0, 0.72846530E+3, 0.116E+3, + 0.550E+2, 0.99480000E+0, 0.00000000E+0, 0.68423530E+3, 0.116E+3, 0.560E+2, 0.99480000E+0, + 0.00000000E+0, 0.60944200E+3, 0.116E+3, 0.570E+2, 0.99480000E+0, 0.00000000E+0, 0.29645810E+3, + 0.116E+3, 0.580E+2, 0.99480000E+0, 0.27991000E+1, 0.60891190E+3, 0.116E+3, 0.590E+2, + 0.99480000E+0, 0.00000000E+0, 0.58591340E+3, 0.116E+3, 0.600E+2, 0.99480000E+0, 0.00000000E+0, + 0.57153970E+3, 0.116E+3, 0.610E+2, 0.99480000E+0, 0.00000000E+0, 0.55828160E+3, 0.116E+3, + 0.620E+2, 0.99480000E+0, 0.00000000E+0, 0.54653950E+3, 0.116E+3, 0.630E+2, 0.99480000E+0, + 0.00000000E+0, 0.43677850E+3, 0.116E+3, 0.640E+2, 0.99480000E+0, 0.00000000E+0, 0.48158940E+3, + 0.116E+3, 0.650E+2, 0.99480000E+0, 0.00000000E+0, 0.46577580E+3, 0.116E+3, 0.660E+2, + 0.99480000E+0, 0.00000000E+0, 0.49452850E+3, 0.116E+3, 0.670E+2, 0.99480000E+0, 0.00000000E+0, + 0.48417910E+3, 0.116E+3, 0.680E+2, 0.99480000E+0, 0.00000000E+0, 0.47494430E+3, 0.116E+3, + 0.690E+2, 0.99480000E+0, 0.00000000E+0, 0.46905670E+3, 0.116E+3, 0.700E+2, 0.99480000E+0, + 0.00000000E+0, 0.39959520E+3, 0.116E+3, 0.710E+2, 0.99480000E+0, 0.00000000E+0, 0.39859150E+3, + 0.116E+3, 0.720E+2, 0.99480000E+0, 0.00000000E+0, 0.36694770E+3, 0.116E+3, 0.730E+2, + 0.99480000E+0, 0.00000000E+0, 0.31220810E+3, 0.116E+3, 0.740E+2, 0.99480000E+0, 0.00000000E+0, + 0.31855560E+3, 0.116E+3, 0.750E+2, 0.99480000E+0, 0.00000000E+0, 0.29082630E+3, 0.116E+3, + 0.760E+2, 0.99480000E+0, 0.00000000E+0, 0.26791140E+3, 0.116E+3, 0.770E+2, 0.99480000E+0, + 0.00000000E+0, 0.22401000E+3, 0.116E+3, 0.780E+2, 0.99480000E+0, 0.00000000E+0, 0.20979980E+3, + 0.116E+3, 0.790E+2, 0.99480000E+0, 0.00000000E+0, 0.21632530E+3, 0.116E+3, 0.800E+2, + 0.99480000E+0, 0.00000000E+0, 0.30615090E+3, 0.116E+3, 0.810E+2, 0.99480000E+0, 0.00000000E+0, + 0.30235050E+3, 0.116E+3, 0.820E+2, 0.99480000E+0, 0.00000000E+0, 0.28117730E+3, 0.116E+3, + 0.830E+2, 0.99480000E+0, 0.00000000E+0, 0.27007790E+3, 0.116E+3, 0.840E+2, 0.99480000E+0, + 0.00000000E+0, 0.25135500E+3, 0.116E+3, 0.850E+2, 0.99480000E+0, 0.00000000E+0, 0.23212580E+3, + 0.116E+3, 0.860E+2, 0.99480000E+0, 0.00000000E+0, 0.69553530E+3, 0.116E+3, 0.870E+2, + 0.99480000E+0, 0.00000000E+0, 0.68165580E+3, 0.116E+3, 0.880E+2, 0.99480000E+0, 0.00000000E+0, + 0.60993410E+3, 0.116E+3, 0.890E+2, 0.99480000E+0, 0.00000000E+0, 0.55624920E+3, 0.116E+3, + 0.900E+2, 0.99480000E+0, 0.00000000E+0, 0.54849710E+3, 0.116E+3, 0.910E+2, 0.99480000E+0, + 0.00000000E+0, 0.53125540E+3, 0.116E+3, 0.920E+2, 0.99480000E+0, 0.00000000E+0, 0.54187030E+3, + 0.116E+3, 0.930E+2, 0.99480000E+0, 0.00000000E+0, 0.52557770E+3, 0.116E+3, 0.940E+2, + 0.99480000E+0, 0.00000000E+0, 0.31412700E+2, 0.116E+3, 0.101E+3, 0.99480000E+0, 0.00000000E+0, + 0.97084900E+2, 0.116E+3, 0.103E+3, 0.99480000E+0, 0.98650000E+0, 0.12475120E+3, 0.116E+3, + 0.104E+3, 0.99480000E+0, 0.98080000E+0, 0.98113900E+2, 0.116E+3, 0.105E+3, 0.99480000E+0, + 0.97060000E+0, 0.75203900E+2, 0.116E+3, 0.106E+3, 0.99480000E+0, 0.98680000E+0, 0.53208600E+2, + 0.116E+3, 0.107E+3, 0.99480000E+0, 0.99440000E+0, 0.39268300E+2, 0.116E+3, 0.108E+3, + 0.99480000E+0, 0.99250000E+0, 0.27411700E+2, 0.116E+3, 0.109E+3, 0.99480000E+0, 0.99820000E+0, + 0.14105990E+3, 0.116E+3, 0.111E+3, 0.99480000E+0, 0.96840000E+0, 0.21766290E+3, 0.116E+3, + 0.112E+3, 0.99480000E+0, 0.96280000E+0, 0.22379420E+3, 0.116E+3, 0.113E+3, 0.99480000E+0, + 0.96480000E+0, 0.18394830E+3, 0.116E+3, 0.114E+3, 0.99480000E+0, 0.95070000E+0, 0.15318230E+3, + 0.116E+3, 0.115E+3, 0.99480000E+0, 0.99470000E+0, 0.13099650E+3, 0.116E+3, 0.116E+3, + 0.99480000E+0, 0.99480000E+0, 0.16527300E+2, 0.117E+3, 0.100E+1, 0.99720000E+0, 0.91180000E+0, + 0.11509200E+2, 0.117E+3, 0.200E+1, 0.99720000E+0, 0.00000000E+0, 0.20877430E+3, 0.117E+3, + 0.300E+1, 0.99720000E+0, 0.00000000E+0, 0.13164980E+3, 0.117E+3, 0.400E+1, 0.99720000E+0, + 0.00000000E+0, 0.93774300E+2, 0.117E+3, 0.500E+1, 0.99720000E+0, 0.00000000E+0, 0.66135400E+2, + 0.117E+3, 0.600E+1, 0.99720000E+0, 0.00000000E+0, 0.47754000E+2, 0.117E+3, 0.700E+1, + 0.99720000E+0, 0.00000000E+0, 0.36978300E+2, 0.117E+3, 0.800E+1, 0.99720000E+0, 0.00000000E+0, + 0.28546800E+2, 0.117E+3, 0.900E+1, 0.99720000E+0, 0.00000000E+0, 0.22283200E+2, 0.117E+3, + 0.100E+2, 0.99720000E+0, 0.00000000E+0, 0.25123260E+3, 0.117E+3, 0.110E+2, 0.99720000E+0, + 0.00000000E+0, 0.20645210E+3, 0.117E+3, 0.120E+2, 0.99720000E+0, 0.00000000E+0, 0.19576470E+3, + 0.117E+3, 0.130E+2, 0.99720000E+0, 0.00000000E+0, 0.16018790E+3, 0.117E+3, 0.140E+2, + 0.99720000E+0, 0.00000000E+0, 0.12909560E+3, 0.117E+3, 0.150E+2, 0.99720000E+0, 0.00000000E+0, + 0.10952700E+3, 0.117E+3, 0.160E+2, 0.99720000E+0, 0.00000000E+0, 0.91366700E+2, 0.117E+3, + 0.170E+2, 0.99720000E+0, 0.00000000E+0, 0.76125600E+2, 0.117E+3, 0.180E+2, 0.99720000E+0, + 0.00000000E+0, 0.40951050E+3, 0.117E+3, 0.190E+2, 0.99720000E+0, 0.00000000E+0, 0.35409350E+3, + 0.117E+3, 0.200E+2, 0.99720000E+0, 0.00000000E+0, 0.29590280E+3, 0.117E+3, 0.210E+2, + 0.99720000E+0, 0.00000000E+0, 0.28935120E+3, 0.117E+3, 0.220E+2, 0.99720000E+0, 0.00000000E+0, + 0.26685570E+3, 0.117E+3, 0.230E+2, 0.99720000E+0, 0.00000000E+0, 0.21129280E+3, 0.117E+3, + 0.240E+2, 0.99720000E+0, 0.00000000E+0, 0.23214470E+3, 0.117E+3, 0.250E+2, 0.99720000E+0, + 0.00000000E+0, 0.18336610E+3, 0.117E+3, 0.260E+2, 0.99720000E+0, 0.00000000E+0, 0.19637550E+3, + 0.117E+3, 0.270E+2, 0.99720000E+0, 0.00000000E+0, 0.20075710E+3, 0.117E+3, 0.280E+2, + 0.99720000E+0, 0.00000000E+0, 0.15477560E+3, 0.117E+3, 0.290E+2, 0.99720000E+0, 0.00000000E+0, + 0.16173370E+3, 0.117E+3, 0.300E+2, 0.99720000E+0, 0.00000000E+0, 0.19011390E+3, 0.117E+3, + 0.310E+2, 0.99720000E+0, 0.00000000E+0, 0.17239330E+3, 0.117E+3, 0.320E+2, 0.99720000E+0, + 0.00000000E+0, 0.15099990E+3, 0.117E+3, 0.330E+2, 0.99720000E+0, 0.00000000E+0, 0.13784430E+3, + 0.117E+3, 0.340E+2, 0.99720000E+0, 0.00000000E+0, 0.12277630E+3, 0.117E+3, 0.350E+2, + 0.99720000E+0, 0.00000000E+0, 0.10852260E+3, 0.117E+3, 0.360E+2, 0.99720000E+0, 0.00000000E+0, + 0.46202520E+3, 0.117E+3, 0.370E+2, 0.99720000E+0, 0.00000000E+0, 0.42188670E+3, 0.117E+3, + 0.380E+2, 0.99720000E+0, 0.00000000E+0, 0.37756420E+3, 0.117E+3, 0.390E+2, 0.99720000E+0, + 0.00000000E+0, 0.34413180E+3, 0.117E+3, 0.400E+2, 0.99720000E+0, 0.00000000E+0, 0.31691100E+3, + 0.117E+3, 0.410E+2, 0.99720000E+0, 0.00000000E+0, 0.24926710E+3, 0.117E+3, 0.420E+2, + 0.99720000E+0, 0.00000000E+0, 0.27614550E+3, 0.117E+3, 0.430E+2, 0.99720000E+0, 0.00000000E+0, + 0.21463800E+3, 0.117E+3, 0.440E+2, 0.99720000E+0, 0.00000000E+0, 0.23390310E+3, 0.117E+3, + 0.450E+2, 0.99720000E+0, 0.00000000E+0, 0.21819030E+3, 0.117E+3, 0.460E+2, 0.99720000E+0, + 0.00000000E+0, 0.18215470E+3, 0.117E+3, 0.470E+2, 0.99720000E+0, 0.00000000E+0, 0.19372730E+3, + 0.117E+3, 0.480E+2, 0.99720000E+0, 0.00000000E+0, 0.23849880E+3, 0.117E+3, 0.490E+2, + 0.99720000E+0, 0.00000000E+0, 0.22523810E+3, 0.117E+3, 0.500E+2, 0.99720000E+0, 0.00000000E+0, + 0.20525120E+3, 0.117E+3, 0.510E+2, 0.99720000E+0, 0.00000000E+0, 0.19314490E+3, 0.117E+3, + 0.520E+2, 0.99720000E+0, 0.00000000E+0, 0.17734580E+3, 0.117E+3, 0.530E+2, 0.99720000E+0, + 0.00000000E+0, 0.16181190E+3, 0.117E+3, 0.540E+2, 0.99720000E+0, 0.00000000E+0, 0.56460060E+3, + 0.117E+3, 0.550E+2, 0.99720000E+0, 0.00000000E+0, 0.53526780E+3, 0.117E+3, 0.560E+2, + 0.99720000E+0, 0.00000000E+0, 0.48012440E+3, 0.117E+3, 0.570E+2, 0.99720000E+0, 0.00000000E+0, + 0.24192230E+3, 0.117E+3, 0.580E+2, 0.99720000E+0, 0.27991000E+1, 0.47771970E+3, 0.117E+3, + 0.590E+2, 0.99720000E+0, 0.00000000E+0, 0.46012500E+3, 0.117E+3, 0.600E+2, 0.99720000E+0, + 0.00000000E+0, 0.44895170E+3, 0.117E+3, 0.610E+2, 0.99720000E+0, 0.00000000E+0, 0.43862430E+3, + 0.117E+3, 0.620E+2, 0.99720000E+0, 0.00000000E+0, 0.42948100E+3, 0.117E+3, 0.630E+2, + 0.99720000E+0, 0.00000000E+0, 0.34664610E+3, 0.117E+3, 0.640E+2, 0.99720000E+0, 0.00000000E+0, + 0.37839840E+3, 0.117E+3, 0.650E+2, 0.99720000E+0, 0.00000000E+0, 0.36651660E+3, 0.117E+3, + 0.660E+2, 0.99720000E+0, 0.00000000E+0, 0.38919850E+3, 0.117E+3, 0.670E+2, 0.99720000E+0, + 0.00000000E+0, 0.38108470E+3, 0.117E+3, 0.680E+2, 0.99720000E+0, 0.00000000E+0, 0.37388780E+3, + 0.117E+3, 0.690E+2, 0.99720000E+0, 0.00000000E+0, 0.36907690E+3, 0.117E+3, 0.700E+2, + 0.99720000E+0, 0.00000000E+0, 0.31653270E+3, 0.117E+3, 0.710E+2, 0.99720000E+0, 0.00000000E+0, + 0.31792390E+3, 0.117E+3, 0.720E+2, 0.99720000E+0, 0.00000000E+0, 0.29429820E+3, 0.117E+3, + 0.730E+2, 0.99720000E+0, 0.00000000E+0, 0.25196160E+3, 0.117E+3, 0.740E+2, 0.99720000E+0, + 0.00000000E+0, 0.25744470E+3, 0.117E+3, 0.750E+2, 0.99720000E+0, 0.00000000E+0, 0.23620650E+3, + 0.117E+3, 0.760E+2, 0.99720000E+0, 0.00000000E+0, 0.21851340E+3, 0.117E+3, 0.770E+2, + 0.99720000E+0, 0.00000000E+0, 0.18384350E+3, 0.117E+3, 0.780E+2, 0.99720000E+0, 0.00000000E+0, + 0.17259550E+3, 0.117E+3, 0.790E+2, 0.99720000E+0, 0.00000000E+0, 0.17806050E+3, 0.117E+3, + 0.800E+2, 0.99720000E+0, 0.00000000E+0, 0.24721900E+3, 0.117E+3, 0.810E+2, 0.99720000E+0, + 0.00000000E+0, 0.24529500E+3, 0.117E+3, 0.820E+2, 0.99720000E+0, 0.00000000E+0, 0.22972670E+3, + 0.117E+3, 0.830E+2, 0.99720000E+0, 0.00000000E+0, 0.22165670E+3, 0.117E+3, 0.840E+2, + 0.99720000E+0, 0.00000000E+0, 0.20750080E+3, 0.117E+3, 0.850E+2, 0.99720000E+0, 0.00000000E+0, + 0.19273160E+3, 0.117E+3, 0.860E+2, 0.99720000E+0, 0.00000000E+0, 0.54229530E+3, 0.117E+3, + 0.870E+2, 0.99720000E+0, 0.00000000E+0, 0.53547060E+3, 0.117E+3, 0.880E+2, 0.99720000E+0, + 0.00000000E+0, 0.48217720E+3, 0.117E+3, 0.890E+2, 0.99720000E+0, 0.00000000E+0, 0.44362620E+3, + 0.117E+3, 0.900E+2, 0.99720000E+0, 0.00000000E+0, 0.43615260E+3, 0.117E+3, 0.910E+2, + 0.99720000E+0, 0.00000000E+0, 0.42258040E+3, 0.117E+3, 0.920E+2, 0.99720000E+0, 0.00000000E+0, + 0.42886190E+3, 0.117E+3, 0.930E+2, 0.99720000E+0, 0.00000000E+0, 0.41631150E+3, 0.117E+3, + 0.940E+2, 0.99720000E+0, 0.00000000E+0, 0.25741400E+2, 0.117E+3, 0.101E+3, 0.99720000E+0, + 0.00000000E+0, 0.77202300E+2, 0.117E+3, 0.103E+3, 0.99720000E+0, 0.98650000E+0, 0.99699500E+2, + 0.117E+3, 0.104E+3, 0.99720000E+0, 0.98080000E+0, 0.79883300E+2, 0.117E+3, 0.105E+3, + 0.99720000E+0, 0.97060000E+0, 0.62086400E+2, 0.117E+3, 0.106E+3, 0.99720000E+0, 0.98680000E+0, + 0.44621700E+2, 0.117E+3, 0.107E+3, 0.99720000E+0, 0.99440000E+0, 0.33380100E+2, 0.117E+3, + 0.108E+3, 0.99720000E+0, 0.99250000E+0, 0.23705900E+2, 0.117E+3, 0.109E+3, 0.99720000E+0, + 0.99820000E+0, 0.11198290E+3, 0.117E+3, 0.111E+3, 0.99720000E+0, 0.96840000E+0, 0.17241480E+3, + 0.117E+3, 0.112E+3, 0.99720000E+0, 0.96280000E+0, 0.17871270E+3, 0.117E+3, 0.113E+3, + 0.99720000E+0, 0.96480000E+0, 0.14895590E+3, 0.117E+3, 0.114E+3, 0.99720000E+0, 0.95070000E+0, + 0.12549300E+3, 0.117E+3, 0.115E+3, 0.99720000E+0, 0.99470000E+0, 0.10828930E+3, 0.117E+3, + 0.116E+3, 0.99720000E+0, 0.99480000E+0, 0.90398500E+2, 0.117E+3, 0.117E+3, 0.99720000E+0, + 0.99720000E+0, 0.29300000E+2, 0.119E+3, 0.100E+1, 0.97670000E+0, 0.91180000E+0, 0.18665500E+2, + 0.119E+3, 0.200E+1, 0.97670000E+0, 0.00000000E+0, 0.56029540E+3, 0.119E+3, 0.300E+1, + 0.97670000E+0, 0.00000000E+0, 0.29222240E+3, 0.119E+3, 0.400E+1, 0.97670000E+0, 0.00000000E+0, + 0.18695660E+3, 0.119E+3, 0.500E+1, 0.97670000E+0, 0.00000000E+0, 0.12192920E+3, 0.119E+3, + 0.600E+1, 0.97670000E+0, 0.00000000E+0, 0.83215300E+2, 0.119E+3, 0.700E+1, 0.97670000E+0, + 0.00000000E+0, 0.61994800E+2, 0.119E+3, 0.800E+1, 0.97670000E+0, 0.00000000E+0, 0.46352000E+2, + 0.119E+3, 0.900E+1, 0.97670000E+0, 0.00000000E+0, 0.35296900E+2, 0.119E+3, 0.100E+2, + 0.97670000E+0, 0.00000000E+0, 0.66603570E+3, 0.119E+3, 0.110E+2, 0.97670000E+0, 0.00000000E+0, + 0.47376610E+3, 0.119E+3, 0.120E+2, 0.97670000E+0, 0.00000000E+0, 0.42489260E+3, 0.119E+3, + 0.130E+2, 0.97670000E+0, 0.00000000E+0, 0.32282330E+3, 0.119E+3, 0.140E+2, 0.97670000E+0, + 0.00000000E+0, 0.24457290E+3, 0.119E+3, 0.150E+2, 0.97670000E+0, 0.00000000E+0, 0.19946720E+3, + 0.119E+3, 0.160E+2, 0.97670000E+0, 0.00000000E+0, 0.16033040E+3, 0.119E+3, 0.170E+2, + 0.97670000E+0, 0.00000000E+0, 0.12942830E+3, 0.119E+3, 0.180E+2, 0.97670000E+0, 0.00000000E+0, + 0.11122277E+4, 0.119E+3, 0.190E+2, 0.97670000E+0, 0.00000000E+0, 0.86017710E+3, 0.119E+3, + 0.200E+2, 0.97670000E+0, 0.00000000E+0, 0.70072810E+3, 0.119E+3, 0.210E+2, 0.97670000E+0, + 0.00000000E+0, 0.66875460E+3, 0.119E+3, 0.220E+2, 0.97670000E+0, 0.00000000E+0, 0.60799510E+3, + 0.119E+3, 0.230E+2, 0.97670000E+0, 0.00000000E+0, 0.47897440E+3, 0.119E+3, 0.240E+2, + 0.97670000E+0, 0.00000000E+0, 0.51805830E+3, 0.119E+3, 0.250E+2, 0.97670000E+0, 0.00000000E+0, + 0.40608760E+3, 0.119E+3, 0.260E+2, 0.97670000E+0, 0.00000000E+0, 0.42338090E+3, 0.119E+3, + 0.270E+2, 0.97670000E+0, 0.00000000E+0, 0.43928450E+3, 0.119E+3, 0.280E+2, 0.97670000E+0, + 0.00000000E+0, 0.33711170E+3, 0.119E+3, 0.290E+2, 0.97670000E+0, 0.00000000E+0, 0.33789860E+3, + 0.119E+3, 0.300E+2, 0.97670000E+0, 0.00000000E+0, 0.40307450E+3, 0.119E+3, 0.310E+2, + 0.97670000E+0, 0.00000000E+0, 0.34544340E+3, 0.119E+3, 0.320E+2, 0.97670000E+0, 0.00000000E+0, + 0.28755350E+3, 0.119E+3, 0.330E+2, 0.97670000E+0, 0.00000000E+0, 0.25436700E+3, 0.119E+3, + 0.340E+2, 0.97670000E+0, 0.00000000E+0, 0.21946470E+3, 0.119E+3, 0.350E+2, 0.97670000E+0, + 0.00000000E+0, 0.18848190E+3, 0.119E+3, 0.360E+2, 0.97670000E+0, 0.00000000E+0, 0.12408631E+4, + 0.119E+3, 0.370E+2, 0.97670000E+0, 0.00000000E+0, 0.10279671E+4, 0.119E+3, 0.380E+2, + 0.97670000E+0, 0.00000000E+0, 0.87903460E+3, 0.119E+3, 0.390E+2, 0.97670000E+0, 0.00000000E+0, + 0.77852380E+3, 0.119E+3, 0.400E+2, 0.97670000E+0, 0.00000000E+0, 0.70330600E+3, 0.119E+3, + 0.410E+2, 0.97670000E+0, 0.00000000E+0, 0.53463030E+3, 0.119E+3, 0.420E+2, 0.97670000E+0, + 0.00000000E+0, 0.59993020E+3, 0.119E+3, 0.430E+2, 0.97670000E+0, 0.00000000E+0, 0.44930300E+3, + 0.119E+3, 0.440E+2, 0.97670000E+0, 0.00000000E+0, 0.49058070E+3, 0.119E+3, 0.450E+2, + 0.97670000E+0, 0.00000000E+0, 0.45224640E+3, 0.119E+3, 0.460E+2, 0.97670000E+0, 0.00000000E+0, + 0.37908360E+3, 0.119E+3, 0.470E+2, 0.97670000E+0, 0.00000000E+0, 0.39551350E+3, 0.119E+3, + 0.480E+2, 0.97670000E+0, 0.00000000E+0, 0.50568380E+3, 0.119E+3, 0.490E+2, 0.97670000E+0, + 0.00000000E+0, 0.45646130E+3, 0.119E+3, 0.500E+2, 0.97670000E+0, 0.00000000E+0, 0.39784160E+3, + 0.119E+3, 0.510E+2, 0.97670000E+0, 0.00000000E+0, 0.36440900E+3, 0.119E+3, 0.520E+2, + 0.97670000E+0, 0.00000000E+0, 0.32510680E+3, 0.119E+3, 0.530E+2, 0.97670000E+0, 0.00000000E+0, + 0.28872750E+3, 0.119E+3, 0.540E+2, 0.97670000E+0, 0.00000000E+0, 0.15118898E+4, 0.119E+3, + 0.550E+2, 0.97670000E+0, 0.00000000E+0, 0.13222619E+4, 0.119E+3, 0.560E+2, 0.97670000E+0, + 0.00000000E+0, 0.11337749E+4, 0.119E+3, 0.570E+2, 0.97670000E+0, 0.00000000E+0, 0.47224550E+3, + 0.119E+3, 0.580E+2, 0.97670000E+0, 0.27991000E+1, 0.11622835E+4, 0.119E+3, 0.590E+2, + 0.97670000E+0, 0.00000000E+0, 0.11112638E+4, 0.119E+3, 0.600E+2, 0.97670000E+0, 0.00000000E+0, + 0.10820865E+4, 0.119E+3, 0.610E+2, 0.97670000E+0, 0.00000000E+0, 0.10553891E+4, 0.119E+3, + 0.620E+2, 0.97670000E+0, 0.00000000E+0, 0.10316716E+4, 0.119E+3, 0.630E+2, 0.97670000E+0, + 0.00000000E+0, 0.79078540E+3, 0.119E+3, 0.640E+2, 0.97670000E+0, 0.00000000E+0, 0.92736720E+3, + 0.119E+3, 0.650E+2, 0.97670000E+0, 0.00000000E+0, 0.89050560E+3, 0.119E+3, 0.660E+2, + 0.97670000E+0, 0.00000000E+0, 0.92461970E+3, 0.119E+3, 0.670E+2, 0.97670000E+0, 0.00000000E+0, + 0.90432570E+3, 0.119E+3, 0.680E+2, 0.97670000E+0, 0.00000000E+0, 0.88575380E+3, 0.119E+3, + 0.690E+2, 0.97670000E+0, 0.00000000E+0, 0.87628990E+3, 0.119E+3, 0.700E+2, 0.97670000E+0, + 0.00000000E+0, 0.72564410E+3, 0.119E+3, 0.710E+2, 0.97670000E+0, 0.00000000E+0, 0.69618310E+3, + 0.119E+3, 0.720E+2, 0.97670000E+0, 0.00000000E+0, 0.62634420E+3, 0.119E+3, 0.730E+2, + 0.97670000E+0, 0.00000000E+0, 0.52368920E+3, 0.119E+3, 0.740E+2, 0.97670000E+0, 0.00000000E+0, + 0.52962490E+3, 0.119E+3, 0.750E+2, 0.97670000E+0, 0.00000000E+0, 0.47425390E+3, 0.119E+3, + 0.760E+2, 0.97670000E+0, 0.00000000E+0, 0.43019640E+3, 0.119E+3, 0.770E+2, 0.97670000E+0, + 0.00000000E+0, 0.35414110E+3, 0.119E+3, 0.780E+2, 0.97670000E+0, 0.00000000E+0, 0.32964710E+3, + 0.119E+3, 0.790E+2, 0.97670000E+0, 0.00000000E+0, 0.33733350E+3, 0.119E+3, 0.800E+2, + 0.97670000E+0, 0.00000000E+0, 0.51695330E+3, 0.119E+3, 0.810E+2, 0.97670000E+0, 0.00000000E+0, + 0.49569810E+3, 0.119E+3, 0.820E+2, 0.97670000E+0, 0.00000000E+0, 0.44630330E+3, 0.119E+3, + 0.830E+2, 0.97670000E+0, 0.00000000E+0, 0.42086840E+3, 0.119E+3, 0.840E+2, 0.97670000E+0, + 0.00000000E+0, 0.38335330E+3, 0.119E+3, 0.850E+2, 0.97670000E+0, 0.00000000E+0, 0.34734370E+3, + 0.119E+3, 0.860E+2, 0.97670000E+0, 0.00000000E+0, 0.14001686E+4, 0.119E+3, 0.870E+2, + 0.97670000E+0, 0.00000000E+0, 0.12915073E+4, 0.119E+3, 0.880E+2, 0.97670000E+0, 0.00000000E+0, + 0.11159288E+4, 0.119E+3, 0.890E+2, 0.97670000E+0, 0.00000000E+0, 0.97819280E+3, 0.119E+3, + 0.900E+2, 0.97670000E+0, 0.00000000E+0, 0.98391310E+3, 0.119E+3, 0.910E+2, 0.97670000E+0, + 0.00000000E+0, 0.95206270E+3, 0.119E+3, 0.920E+2, 0.97670000E+0, 0.00000000E+0, 0.99535270E+3, + 0.119E+3, 0.930E+2, 0.97670000E+0, 0.00000000E+0, 0.96105430E+3, 0.119E+3, 0.940E+2, + 0.97670000E+0, 0.00000000E+0, 0.48449900E+2, 0.119E+3, 0.101E+3, 0.97670000E+0, 0.00000000E+0, + 0.16874120E+3, 0.119E+3, 0.103E+3, 0.97670000E+0, 0.98650000E+0, 0.21344440E+3, 0.119E+3, + 0.104E+3, 0.97670000E+0, 0.98080000E+0, 0.15577810E+3, 0.119E+3, 0.105E+3, 0.97670000E+0, + 0.97060000E+0, 0.11457230E+3, 0.119E+3, 0.106E+3, 0.97670000E+0, 0.98680000E+0, 0.77631700E+2, + 0.119E+3, 0.107E+3, 0.97670000E+0, 0.99440000E+0, 0.55403200E+2, 0.119E+3, 0.108E+3, + 0.97670000E+0, 0.99250000E+0, 0.37198200E+2, 0.119E+3, 0.109E+3, 0.97670000E+0, 0.99820000E+0, + 0.24922000E+3, 0.119E+3, 0.111E+3, 0.97670000E+0, 0.96840000E+0, 0.38733490E+3, 0.119E+3, + 0.112E+3, 0.97670000E+0, 0.96280000E+0, 0.38264220E+3, 0.119E+3, 0.113E+3, 0.97670000E+0, + 0.96480000E+0, 0.29694090E+3, 0.119E+3, 0.114E+3, 0.97670000E+0, 0.95070000E+0, 0.23721910E+3, + 0.119E+3, 0.115E+3, 0.97670000E+0, 0.99470000E+0, 0.19738060E+3, 0.119E+3, 0.116E+3, + 0.97670000E+0, 0.99480000E+0, 0.15873300E+3, 0.119E+3, 0.117E+3, 0.97670000E+0, 0.99720000E+0, + 0.33802070E+3, 0.119E+3, 0.119E+3, 0.97670000E+0, 0.97670000E+0, 0.52987100E+2, 0.120E+3, + 0.100E+1, 0.98310000E+0, 0.91180000E+0, 0.31879600E+2, 0.120E+3, 0.200E+1, 0.98310000E+0, + 0.00000000E+0, 0.13100314E+4, 0.120E+3, 0.300E+1, 0.98310000E+0, 0.00000000E+0, 0.60256610E+3, + 0.120E+3, 0.400E+1, 0.98310000E+0, 0.00000000E+0, 0.36268620E+3, 0.120E+3, 0.500E+1, + 0.98310000E+0, 0.00000000E+0, 0.22596290E+3, 0.120E+3, 0.600E+1, 0.98310000E+0, 0.00000000E+0, + 0.14897930E+3, 0.120E+3, 0.700E+1, 0.98310000E+0, 0.00000000E+0, 0.10827180E+3, 0.120E+3, + 0.800E+1, 0.98310000E+0, 0.00000000E+0, 0.79221800E+2, 0.120E+3, 0.900E+1, 0.98310000E+0, + 0.00000000E+0, 0.59277900E+2, 0.120E+3, 0.100E+2, 0.98310000E+0, 0.00000000E+0, 0.15457064E+4, + 0.120E+3, 0.110E+2, 0.98310000E+0, 0.00000000E+0, 0.99724860E+3, 0.120E+3, 0.120E+2, + 0.98310000E+0, 0.00000000E+0, 0.86695170E+3, 0.120E+3, 0.130E+2, 0.98310000E+0, 0.00000000E+0, + 0.63004560E+3, 0.120E+3, 0.140E+2, 0.98310000E+0, 0.00000000E+0, 0.46026350E+3, 0.120E+3, + 0.150E+2, 0.98310000E+0, 0.00000000E+0, 0.36677110E+3, 0.120E+3, 0.160E+2, 0.98310000E+0, + 0.00000000E+0, 0.28821820E+3, 0.120E+3, 0.170E+2, 0.98310000E+0, 0.00000000E+0, 0.22808920E+3, + 0.120E+3, 0.180E+2, 0.98310000E+0, 0.00000000E+0, 0.26610830E+4, 0.120E+3, 0.190E+2, + 0.98310000E+0, 0.00000000E+0, 0.18864221E+4, 0.120E+3, 0.200E+2, 0.98310000E+0, 0.00000000E+0, + 0.15101427E+4, 0.120E+3, 0.210E+2, 0.98310000E+0, 0.00000000E+0, 0.14223244E+4, 0.120E+3, + 0.220E+2, 0.98310000E+0, 0.00000000E+0, 0.12821610E+4, 0.120E+3, 0.230E+2, 0.98310000E+0, + 0.00000000E+0, 0.10115955E+4, 0.120E+3, 0.240E+2, 0.98310000E+0, 0.00000000E+0, 0.10791532E+4, + 0.120E+3, 0.250E+2, 0.98310000E+0, 0.00000000E+0, 0.84546860E+3, 0.120E+3, 0.260E+2, + 0.98310000E+0, 0.00000000E+0, 0.86250360E+3, 0.120E+3, 0.270E+2, 0.98310000E+0, 0.00000000E+0, + 0.90260140E+3, 0.120E+3, 0.280E+2, 0.98310000E+0, 0.00000000E+0, 0.69450580E+3, 0.120E+3, + 0.290E+2, 0.98310000E+0, 0.00000000E+0, 0.67502990E+3, 0.120E+3, 0.300E+2, 0.98310000E+0, + 0.00000000E+0, 0.81349430E+3, 0.120E+3, 0.310E+2, 0.98310000E+0, 0.00000000E+0, 0.67269170E+3, + 0.120E+3, 0.320E+2, 0.98310000E+0, 0.00000000E+0, 0.54301230E+3, 0.120E+3, 0.330E+2, + 0.98310000E+0, 0.00000000E+0, 0.47148220E+3, 0.120E+3, 0.340E+2, 0.98310000E+0, 0.00000000E+0, + 0.39902260E+3, 0.120E+3, 0.350E+2, 0.98310000E+0, 0.00000000E+0, 0.33664830E+3, 0.120E+3, + 0.360E+2, 0.98310000E+0, 0.00000000E+0, 0.29580410E+4, 0.120E+3, 0.370E+2, 0.98310000E+0, + 0.00000000E+0, 0.22654155E+4, 0.120E+3, 0.380E+2, 0.98310000E+0, 0.00000000E+0, 0.18821338E+4, + 0.120E+3, 0.390E+2, 0.98310000E+0, 0.00000000E+0, 0.16379667E+4, 0.120E+3, 0.400E+2, + 0.98310000E+0, 0.00000000E+0, 0.14638890E+4, 0.120E+3, 0.410E+2, 0.98310000E+0, 0.00000000E+0, + 0.10926733E+4, 0.120E+3, 0.420E+2, 0.98310000E+0, 0.00000000E+0, 0.12349316E+4, 0.120E+3, + 0.430E+2, 0.98310000E+0, 0.00000000E+0, 0.90575150E+3, 0.120E+3, 0.440E+2, 0.98310000E+0, + 0.00000000E+0, 0.98637270E+3, 0.120E+3, 0.450E+2, 0.98310000E+0, 0.00000000E+0, 0.90244050E+3, + 0.120E+3, 0.460E+2, 0.98310000E+0, 0.00000000E+0, 0.76261740E+3, 0.120E+3, 0.470E+2, + 0.98310000E+0, 0.00000000E+0, 0.78166000E+3, 0.120E+3, 0.480E+2, 0.98310000E+0, 0.00000000E+0, + 0.10241614E+4, 0.120E+3, 0.490E+2, 0.98310000E+0, 0.00000000E+0, 0.89641550E+3, 0.120E+3, + 0.500E+2, 0.98310000E+0, 0.00000000E+0, 0.75979880E+3, 0.120E+3, 0.510E+2, 0.98310000E+0, + 0.00000000E+0, 0.68470730E+3, 0.120E+3, 0.520E+2, 0.98310000E+0, 0.00000000E+0, 0.60026980E+3, + 0.120E+3, 0.530E+2, 0.98310000E+0, 0.00000000E+0, 0.52435470E+3, 0.120E+3, 0.540E+2, + 0.98310000E+0, 0.00000000E+0, 0.36192660E+4, 0.120E+3, 0.550E+2, 0.98310000E+0, 0.00000000E+0, + 0.29513362E+4, 0.120E+3, 0.560E+2, 0.98310000E+0, 0.00000000E+0, 0.24567601E+4, 0.120E+3, + 0.570E+2, 0.98310000E+0, 0.00000000E+0, 0.90740120E+3, 0.120E+3, 0.580E+2, 0.98310000E+0, + 0.27991000E+1, 0.25715319E+4, 0.120E+3, 0.590E+2, 0.98310000E+0, 0.00000000E+0, 0.24420495E+4, + 0.120E+3, 0.600E+2, 0.98310000E+0, 0.00000000E+0, 0.23740445E+4, 0.120E+3, 0.610E+2, + 0.98310000E+0, 0.00000000E+0, 0.23122147E+4, 0.120E+3, 0.620E+2, 0.98310000E+0, 0.00000000E+0, + 0.22571993E+4, 0.120E+3, 0.630E+2, 0.98310000E+0, 0.00000000E+0, 0.16806338E+4, 0.120E+3, + 0.640E+2, 0.98310000E+0, 0.00000000E+0, 0.20816173E+4, 0.120E+3, 0.650E+2, 0.98310000E+0, + 0.00000000E+0, 0.19928728E+4, 0.120E+3, 0.660E+2, 0.98310000E+0, 0.00000000E+0, 0.20062958E+4, + 0.120E+3, 0.670E+2, 0.98310000E+0, 0.00000000E+0, 0.19602391E+4, 0.120E+3, 0.680E+2, + 0.98310000E+0, 0.00000000E+0, 0.19174640E+4, 0.120E+3, 0.690E+2, 0.98310000E+0, 0.00000000E+0, + 0.18991306E+4, 0.120E+3, 0.700E+2, 0.98310000E+0, 0.00000000E+0, 0.15446852E+4, 0.120E+3, + 0.710E+2, 0.98310000E+0, 0.00000000E+0, 0.14351503E+4, 0.120E+3, 0.720E+2, 0.98310000E+0, + 0.00000000E+0, 0.12687518E+4, 0.120E+3, 0.730E+2, 0.98310000E+0, 0.00000000E+0, 0.10493296E+4, + 0.120E+3, 0.740E+2, 0.98310000E+0, 0.00000000E+0, 0.10529922E+4, 0.120E+3, 0.750E+2, + 0.98310000E+0, 0.00000000E+0, 0.92845210E+3, 0.120E+3, 0.760E+2, 0.98310000E+0, 0.00000000E+0, + 0.83187520E+3, 0.120E+3, 0.770E+2, 0.98310000E+0, 0.00000000E+0, 0.67699020E+3, 0.120E+3, + 0.780E+2, 0.98310000E+0, 0.00000000E+0, 0.62708530E+3, 0.120E+3, 0.790E+2, 0.98310000E+0, + 0.00000000E+0, 0.63711120E+3, 0.120E+3, 0.800E+2, 0.98310000E+0, 0.00000000E+0, 0.10430556E+4, + 0.120E+3, 0.810E+2, 0.98310000E+0, 0.00000000E+0, 0.97428450E+3, 0.120E+3, 0.820E+2, + 0.98310000E+0, 0.00000000E+0, 0.85466400E+3, 0.120E+3, 0.830E+2, 0.98310000E+0, 0.00000000E+0, + 0.79444910E+3, 0.120E+3, 0.840E+2, 0.98310000E+0, 0.00000000E+0, 0.71141430E+3, 0.120E+3, + 0.850E+2, 0.98310000E+0, 0.00000000E+0, 0.63479210E+3, 0.120E+3, 0.860E+2, 0.98310000E+0, + 0.00000000E+0, 0.32712563E+4, 0.120E+3, 0.870E+2, 0.98310000E+0, 0.00000000E+0, 0.28409447E+4, + 0.120E+3, 0.880E+2, 0.98310000E+0, 0.00000000E+0, 0.23867637E+4, 0.120E+3, 0.890E+2, + 0.98310000E+0, 0.00000000E+0, 0.20296245E+4, 0.120E+3, 0.900E+2, 0.98310000E+0, 0.00000000E+0, + 0.20761172E+4, 0.120E+3, 0.910E+2, 0.98310000E+0, 0.00000000E+0, 0.20066915E+4, 0.120E+3, + 0.920E+2, 0.98310000E+0, 0.00000000E+0, 0.21352269E+4, 0.120E+3, 0.930E+2, 0.98310000E+0, + 0.00000000E+0, 0.20540131E+4, 0.120E+3, 0.940E+2, 0.98310000E+0, 0.00000000E+0, 0.90792700E+2, + 0.120E+3, 0.101E+3, 0.98310000E+0, 0.00000000E+0, 0.34561200E+3, 0.120E+3, 0.103E+3, + 0.98310000E+0, 0.98650000E+0, 0.43402840E+3, 0.120E+3, 0.104E+3, 0.98310000E+0, 0.98080000E+0, + 0.29872640E+3, 0.120E+3, 0.105E+3, 0.98310000E+0, 0.97060000E+0, 0.21289570E+3, 0.120E+3, + 0.106E+3, 0.98310000E+0, 0.98680000E+0, 0.13902190E+3, 0.120E+3, 0.107E+3, 0.98310000E+0, + 0.99440000E+0, 0.96158400E+2, 0.120E+3, 0.108E+3, 0.98310000E+0, 0.99250000E+0, 0.62058000E+2, + 0.120E+3, 0.109E+3, 0.98310000E+0, 0.99820000E+0, 0.51669170E+3, 0.120E+3, 0.111E+3, + 0.98310000E+0, 0.96840000E+0, 0.80921820E+3, 0.120E+3, 0.112E+3, 0.98310000E+0, 0.96280000E+0, + 0.77508320E+3, 0.120E+3, 0.113E+3, 0.98310000E+0, 0.96480000E+0, 0.57629620E+3, 0.120E+3, + 0.114E+3, 0.98310000E+0, 0.95070000E+0, 0.44601700E+3, 0.120E+3, 0.115E+3, 0.98310000E+0, + 0.99470000E+0, 0.36319510E+3, 0.120E+3, 0.116E+3, 0.98310000E+0, 0.99480000E+0, 0.28549050E+3, + 0.120E+3, 0.117E+3, 0.98310000E+0, 0.99720000E+0, 0.68899110E+3, 0.120E+3, 0.119E+3, + 0.98310000E+0, 0.97670000E+0, 0.15251891E+4, 0.120E+3, 0.120E+3, 0.98310000E+0, 0.98310000E+0, + 0.29995300E+2, 0.121E+3, 0.100E+1, 0.18627000E+1, 0.91180000E+0, 0.19384100E+2, 0.121E+3, + 0.200E+1, 0.18627000E+1, 0.00000000E+0, 0.50482680E+3, 0.121E+3, 0.300E+1, 0.18627000E+1, + 0.00000000E+0, 0.28244200E+3, 0.121E+3, 0.400E+1, 0.18627000E+1, 0.00000000E+0, 0.18614190E+3, + 0.121E+3, 0.500E+1, 0.18627000E+1, 0.00000000E+0, 0.12363790E+3, 0.121E+3, 0.600E+1, + 0.18627000E+1, 0.00000000E+0, 0.85340400E+2, 0.121E+3, 0.700E+1, 0.18627000E+1, 0.00000000E+0, + 0.64007200E+2, 0.121E+3, 0.800E+1, 0.18627000E+1, 0.00000000E+0, 0.48093600E+2, 0.121E+3, + 0.900E+1, 0.18627000E+1, 0.00000000E+0, 0.36746800E+2, 0.121E+3, 0.100E+2, 0.18627000E+1, + 0.00000000E+0, 0.60249290E+3, 0.121E+3, 0.110E+2, 0.18627000E+1, 0.00000000E+0, 0.45276000E+3, + 0.121E+3, 0.120E+2, 0.18627000E+1, 0.00000000E+0, 0.41290580E+3, 0.121E+3, 0.130E+2, + 0.18627000E+1, 0.00000000E+0, 0.32058960E+3, 0.121E+3, 0.140E+2, 0.18627000E+1, 0.00000000E+0, + 0.24673580E+3, 0.121E+3, 0.150E+2, 0.18627000E+1, 0.00000000E+0, 0.20296720E+3, 0.121E+3, + 0.160E+2, 0.18627000E+1, 0.00000000E+0, 0.16436550E+3, 0.121E+3, 0.170E+2, 0.18627000E+1, + 0.00000000E+0, 0.13344040E+3, 0.121E+3, 0.180E+2, 0.18627000E+1, 0.00000000E+0, 0.98858810E+3, + 0.121E+3, 0.190E+2, 0.18627000E+1, 0.00000000E+0, 0.80323800E+3, 0.121E+3, 0.200E+2, + 0.18627000E+1, 0.00000000E+0, 0.66067800E+3, 0.121E+3, 0.210E+2, 0.18627000E+1, 0.00000000E+0, + 0.63504570E+3, 0.121E+3, 0.220E+2, 0.18627000E+1, 0.00000000E+0, 0.57995840E+3, 0.121E+3, + 0.230E+2, 0.18627000E+1, 0.00000000E+0, 0.45620230E+3, 0.121E+3, 0.240E+2, 0.18627000E+1, + 0.00000000E+0, 0.49734740E+3, 0.121E+3, 0.250E+2, 0.18627000E+1, 0.00000000E+0, 0.38959740E+3, + 0.121E+3, 0.260E+2, 0.18627000E+1, 0.00000000E+0, 0.41105720E+3, 0.121E+3, 0.270E+2, + 0.18627000E+1, 0.00000000E+0, 0.42466930E+3, 0.121E+3, 0.280E+2, 0.18627000E+1, 0.00000000E+0, + 0.32508500E+3, 0.121E+3, 0.290E+2, 0.18627000E+1, 0.00000000E+0, 0.33123100E+3, 0.121E+3, + 0.300E+2, 0.18627000E+1, 0.00000000E+0, 0.39353000E+3, 0.121E+3, 0.310E+2, 0.18627000E+1, + 0.00000000E+0, 0.34316790E+3, 0.121E+3, 0.320E+2, 0.18627000E+1, 0.00000000E+0, 0.28955820E+3, + 0.121E+3, 0.330E+2, 0.18627000E+1, 0.00000000E+0, 0.25800840E+3, 0.121E+3, 0.340E+2, + 0.18627000E+1, 0.00000000E+0, 0.22413750E+3, 0.121E+3, 0.350E+2, 0.18627000E+1, 0.00000000E+0, + 0.19358680E+3, 0.121E+3, 0.360E+2, 0.18627000E+1, 0.00000000E+0, 0.11054608E+4, 0.121E+3, + 0.370E+2, 0.18627000E+1, 0.00000000E+0, 0.95722710E+3, 0.121E+3, 0.380E+2, 0.18627000E+1, + 0.00000000E+0, 0.83166790E+3, 0.121E+3, 0.390E+2, 0.18627000E+1, 0.00000000E+0, 0.74343180E+3, + 0.121E+3, 0.400E+2, 0.18627000E+1, 0.00000000E+0, 0.67533140E+3, 0.121E+3, 0.410E+2, + 0.18627000E+1, 0.00000000E+0, 0.51773400E+3, 0.121E+3, 0.420E+2, 0.18627000E+1, 0.00000000E+0, + 0.57916230E+3, 0.121E+3, 0.430E+2, 0.18627000E+1, 0.00000000E+0, 0.43784320E+3, 0.121E+3, + 0.440E+2, 0.18627000E+1, 0.00000000E+0, 0.47895980E+3, 0.121E+3, 0.450E+2, 0.18627000E+1, + 0.00000000E+0, 0.44308160E+3, 0.121E+3, 0.460E+2, 0.18627000E+1, 0.00000000E+0, 0.36949330E+3, + 0.121E+3, 0.470E+2, 0.18627000E+1, 0.00000000E+0, 0.38918590E+3, 0.121E+3, 0.480E+2, + 0.18627000E+1, 0.00000000E+0, 0.49219040E+3, 0.121E+3, 0.490E+2, 0.18627000E+1, 0.00000000E+0, + 0.45113400E+3, 0.121E+3, 0.500E+2, 0.18627000E+1, 0.00000000E+0, 0.39831520E+3, 0.121E+3, + 0.510E+2, 0.18627000E+1, 0.00000000E+0, 0.36739080E+3, 0.121E+3, 0.520E+2, 0.18627000E+1, + 0.00000000E+0, 0.33004180E+3, 0.121E+3, 0.530E+2, 0.18627000E+1, 0.00000000E+0, 0.29487060E+3, + 0.121E+3, 0.540E+2, 0.18627000E+1, 0.00000000E+0, 0.13445274E+4, 0.121E+3, 0.550E+2, + 0.18627000E+1, 0.00000000E+0, 0.12227426E+4, 0.121E+3, 0.560E+2, 0.18627000E+1, 0.00000000E+0, + 0.10658140E+4, 0.121E+3, 0.570E+2, 0.18627000E+1, 0.00000000E+0, 0.47118540E+3, 0.121E+3, + 0.580E+2, 0.18627000E+1, 0.27991000E+1, 0.10799647E+4, 0.121E+3, 0.590E+2, 0.18627000E+1, + 0.00000000E+0, 0.10362055E+4, 0.121E+3, 0.600E+2, 0.18627000E+1, 0.00000000E+0, 0.10098893E+4, + 0.121E+3, 0.610E+2, 0.18627000E+1, 0.00000000E+0, 0.98572640E+3, 0.121E+3, 0.620E+2, + 0.18627000E+1, 0.00000000E+0, 0.96428550E+3, 0.121E+3, 0.630E+2, 0.18627000E+1, 0.00000000E+0, + 0.75078480E+3, 0.121E+3, 0.640E+2, 0.18627000E+1, 0.00000000E+0, 0.85514710E+3, 0.121E+3, + 0.650E+2, 0.18627000E+1, 0.00000000E+0, 0.82284200E+3, 0.121E+3, 0.660E+2, 0.18627000E+1, + 0.00000000E+0, 0.86811040E+3, 0.121E+3, 0.670E+2, 0.18627000E+1, 0.00000000E+0, 0.84953940E+3, + 0.121E+3, 0.680E+2, 0.18627000E+1, 0.00000000E+0, 0.83269610E+3, 0.121E+3, 0.690E+2, + 0.18627000E+1, 0.00000000E+0, 0.82330890E+3, 0.121E+3, 0.700E+2, 0.18627000E+1, 0.00000000E+0, + 0.68862420E+3, 0.121E+3, 0.710E+2, 0.18627000E+1, 0.00000000E+0, 0.67192580E+3, 0.121E+3, + 0.720E+2, 0.18627000E+1, 0.00000000E+0, 0.60975150E+3, 0.121E+3, 0.730E+2, 0.18627000E+1, + 0.00000000E+0, 0.51221050E+3, 0.121E+3, 0.740E+2, 0.18627000E+1, 0.00000000E+0, 0.52005780E+3, + 0.121E+3, 0.750E+2, 0.18627000E+1, 0.00000000E+0, 0.46895650E+3, 0.121E+3, 0.760E+2, + 0.18627000E+1, 0.00000000E+0, 0.42768450E+3, 0.121E+3, 0.770E+2, 0.18627000E+1, 0.00000000E+0, + 0.35348450E+3, 0.121E+3, 0.780E+2, 0.18627000E+1, 0.00000000E+0, 0.32959850E+3, 0.121E+3, + 0.790E+2, 0.18627000E+1, 0.00000000E+0, 0.33854780E+3, 0.121E+3, 0.800E+2, 0.18627000E+1, + 0.00000000E+0, 0.50363930E+3, 0.121E+3, 0.810E+2, 0.18627000E+1, 0.00000000E+0, 0.48925410E+3, + 0.121E+3, 0.820E+2, 0.18627000E+1, 0.00000000E+0, 0.44592310E+3, 0.121E+3, 0.830E+2, + 0.18627000E+1, 0.00000000E+0, 0.42320630E+3, 0.121E+3, 0.840E+2, 0.18627000E+1, 0.00000000E+0, + 0.38821220E+3, 0.121E+3, 0.850E+2, 0.18627000E+1, 0.00000000E+0, 0.35380050E+3, 0.121E+3, + 0.860E+2, 0.18627000E+1, 0.00000000E+0, 0.12630191E+4, 0.121E+3, 0.870E+2, 0.18627000E+1, + 0.00000000E+0, 0.12039859E+4, 0.121E+3, 0.880E+2, 0.18627000E+1, 0.00000000E+0, 0.10563541E+4, + 0.121E+3, 0.890E+2, 0.18627000E+1, 0.00000000E+0, 0.94062410E+3, 0.121E+3, 0.900E+2, + 0.18627000E+1, 0.00000000E+0, 0.93765790E+3, 0.121E+3, 0.910E+2, 0.18627000E+1, 0.00000000E+0, + 0.90769560E+3, 0.121E+3, 0.920E+2, 0.18627000E+1, 0.00000000E+0, 0.93986910E+3, 0.121E+3, + 0.930E+2, 0.18627000E+1, 0.00000000E+0, 0.90928950E+3, 0.121E+3, 0.940E+2, 0.18627000E+1, + 0.00000000E+0, 0.48975300E+2, 0.121E+3, 0.101E+3, 0.18627000E+1, 0.00000000E+0, 0.16364460E+3, + 0.121E+3, 0.103E+3, 0.18627000E+1, 0.98650000E+0, 0.20781070E+3, 0.121E+3, 0.104E+3, + 0.18627000E+1, 0.98080000E+0, 0.15582280E+3, 0.121E+3, 0.105E+3, 0.18627000E+1, 0.97060000E+0, + 0.11597260E+3, 0.121E+3, 0.106E+3, 0.18627000E+1, 0.98680000E+0, 0.79538300E+2, 0.121E+3, + 0.107E+3, 0.18627000E+1, 0.99440000E+0, 0.57261100E+2, 0.121E+3, 0.108E+3, 0.18627000E+1, + 0.99250000E+0, 0.38809700E+2, 0.121E+3, 0.109E+3, 0.18627000E+1, 0.99820000E+0, 0.23997140E+3, + 0.121E+3, 0.111E+3, 0.18627000E+1, 0.96840000E+0, 0.37177680E+3, 0.121E+3, 0.112E+3, + 0.18627000E+1, 0.96280000E+0, 0.37318450E+3, 0.121E+3, 0.113E+3, 0.18627000E+1, 0.96480000E+0, + 0.29561010E+3, 0.121E+3, 0.114E+3, 0.18627000E+1, 0.95070000E+0, 0.23937010E+3, 0.121E+3, + 0.115E+3, 0.18627000E+1, 0.99470000E+0, 0.20076220E+3, 0.121E+3, 0.116E+3, 0.18627000E+1, + 0.99480000E+0, 0.16268060E+3, 0.121E+3, 0.117E+3, 0.18627000E+1, 0.99720000E+0, 0.32770920E+3, + 0.121E+3, 0.119E+3, 0.18627000E+1, 0.97670000E+0, 0.64070760E+3, 0.121E+3, 0.120E+3, + 0.18627000E+1, 0.98310000E+0, 0.32450680E+3, 0.121E+3, 0.121E+3, 0.18627000E+1, 0.18627000E+1, + 0.29000900E+2, 0.122E+3, 0.100E+1, 0.18299000E+1, 0.91180000E+0, 0.18808400E+2, 0.122E+3, + 0.200E+1, 0.18299000E+1, 0.00000000E+0, 0.48829310E+3, 0.122E+3, 0.300E+1, 0.18299000E+1, + 0.00000000E+0, 0.27202010E+3, 0.122E+3, 0.400E+1, 0.18299000E+1, 0.00000000E+0, 0.17950770E+3, + 0.122E+3, 0.500E+1, 0.18299000E+1, 0.00000000E+0, 0.11943760E+3, 0.122E+3, 0.600E+1, + 0.18299000E+1, 0.00000000E+0, 0.82583400E+2, 0.122E+3, 0.700E+1, 0.18299000E+1, 0.00000000E+0, + 0.62030900E+2, 0.122E+3, 0.800E+1, 0.18299000E+1, 0.00000000E+0, 0.46676500E+2, 0.122E+3, + 0.900E+1, 0.18299000E+1, 0.00000000E+0, 0.35711700E+2, 0.122E+3, 0.100E+2, 0.18299000E+1, + 0.00000000E+0, 0.58252700E+3, 0.122E+3, 0.110E+2, 0.18299000E+1, 0.00000000E+0, 0.43610910E+3, + 0.122E+3, 0.120E+2, 0.18299000E+1, 0.00000000E+0, 0.39786180E+3, 0.122E+3, 0.130E+2, + 0.18299000E+1, 0.00000000E+0, 0.30910810E+3, 0.122E+3, 0.140E+2, 0.18299000E+1, 0.00000000E+0, + 0.23816440E+3, 0.122E+3, 0.150E+2, 0.18299000E+1, 0.00000000E+0, 0.19611280E+3, 0.122E+3, + 0.160E+2, 0.18299000E+1, 0.00000000E+0, 0.15898920E+3, 0.122E+3, 0.170E+2, 0.18299000E+1, + 0.00000000E+0, 0.12921800E+3, 0.122E+3, 0.180E+2, 0.18299000E+1, 0.00000000E+0, 0.96033760E+3, + 0.122E+3, 0.190E+2, 0.18299000E+1, 0.00000000E+0, 0.77468630E+3, 0.122E+3, 0.200E+2, + 0.18299000E+1, 0.00000000E+0, 0.63687060E+3, 0.122E+3, 0.210E+2, 0.18299000E+1, 0.00000000E+0, + 0.61222250E+3, 0.122E+3, 0.220E+2, 0.18299000E+1, 0.00000000E+0, 0.55911570E+3, 0.122E+3, + 0.230E+2, 0.18299000E+1, 0.00000000E+0, 0.44007620E+3, 0.122E+3, 0.240E+2, 0.18299000E+1, + 0.00000000E+0, 0.47949690E+3, 0.122E+3, 0.250E+2, 0.18299000E+1, 0.00000000E+0, 0.37582420E+3, + 0.122E+3, 0.260E+2, 0.18299000E+1, 0.00000000E+0, 0.39627480E+3, 0.122E+3, 0.270E+2, + 0.18299000E+1, 0.00000000E+0, 0.40935550E+3, 0.122E+3, 0.280E+2, 0.18299000E+1, 0.00000000E+0, + 0.31360260E+3, 0.122E+3, 0.290E+2, 0.18299000E+1, 0.00000000E+0, 0.31938340E+3, 0.122E+3, + 0.300E+2, 0.18299000E+1, 0.00000000E+0, 0.37941090E+3, 0.122E+3, 0.310E+2, 0.18299000E+1, + 0.00000000E+0, 0.33097100E+3, 0.122E+3, 0.320E+2, 0.18299000E+1, 0.00000000E+0, 0.27949900E+3, + 0.122E+3, 0.330E+2, 0.18299000E+1, 0.00000000E+0, 0.24922580E+3, 0.122E+3, 0.340E+2, + 0.18299000E+1, 0.00000000E+0, 0.21669210E+3, 0.122E+3, 0.350E+2, 0.18299000E+1, 0.00000000E+0, + 0.18732310E+3, 0.122E+3, 0.360E+2, 0.18299000E+1, 0.00000000E+0, 0.10741973E+4, 0.122E+3, + 0.370E+2, 0.18299000E+1, 0.00000000E+0, 0.92365570E+3, 0.122E+3, 0.380E+2, 0.18299000E+1, + 0.00000000E+0, 0.80203240E+3, 0.122E+3, 0.390E+2, 0.18299000E+1, 0.00000000E+0, 0.71686090E+3, + 0.122E+3, 0.400E+2, 0.18299000E+1, 0.00000000E+0, 0.65128470E+3, 0.122E+3, 0.410E+2, + 0.18299000E+1, 0.00000000E+0, 0.49950110E+3, 0.122E+3, 0.420E+2, 0.18299000E+1, 0.00000000E+0, + 0.55872110E+3, 0.122E+3, 0.430E+2, 0.18299000E+1, 0.00000000E+0, 0.42257080E+3, 0.122E+3, + 0.440E+2, 0.18299000E+1, 0.00000000E+0, 0.46203140E+3, 0.122E+3, 0.450E+2, 0.18299000E+1, + 0.00000000E+0, 0.42745770E+3, 0.122E+3, 0.460E+2, 0.18299000E+1, 0.00000000E+0, 0.35672450E+3, + 0.122E+3, 0.470E+2, 0.18299000E+1, 0.00000000E+0, 0.37552610E+3, 0.122E+3, 0.480E+2, + 0.18299000E+1, 0.00000000E+0, 0.47481120E+3, 0.122E+3, 0.490E+2, 0.18299000E+1, 0.00000000E+0, + 0.43519480E+3, 0.122E+3, 0.500E+2, 0.18299000E+1, 0.00000000E+0, 0.38444870E+3, 0.122E+3, + 0.510E+2, 0.18299000E+1, 0.00000000E+0, 0.35477930E+3, 0.122E+3, 0.520E+2, 0.18299000E+1, + 0.00000000E+0, 0.31891710E+3, 0.122E+3, 0.530E+2, 0.18299000E+1, 0.00000000E+0, 0.28513250E+3, + 0.122E+3, 0.540E+2, 0.18299000E+1, 0.00000000E+0, 0.13086418E+4, 0.122E+3, 0.550E+2, + 0.18299000E+1, 0.00000000E+0, 0.11809424E+4, 0.122E+3, 0.560E+2, 0.18299000E+1, 0.00000000E+0, + 0.10284169E+4, 0.122E+3, 0.570E+2, 0.18299000E+1, 0.00000000E+0, 0.45482000E+3, 0.122E+3, + 0.580E+2, 0.18299000E+1, 0.27991000E+1, 0.10433187E+4, 0.122E+3, 0.590E+2, 0.18299000E+1, + 0.00000000E+0, 0.10002155E+4, 0.122E+3, 0.600E+2, 0.18299000E+1, 0.00000000E+0, 0.97472270E+3, + 0.122E+3, 0.610E+2, 0.18299000E+1, 0.00000000E+0, 0.95132570E+3, 0.122E+3, 0.620E+2, + 0.18299000E+1, 0.00000000E+0, 0.93056540E+3, 0.122E+3, 0.630E+2, 0.18299000E+1, 0.00000000E+0, + 0.72458860E+3, 0.122E+3, 0.640E+2, 0.18299000E+1, 0.00000000E+0, 0.82779700E+3, 0.122E+3, + 0.650E+2, 0.18299000E+1, 0.00000000E+0, 0.79723640E+3, 0.122E+3, 0.660E+2, 0.18299000E+1, + 0.00000000E+0, 0.83746180E+3, 0.122E+3, 0.670E+2, 0.18299000E+1, 0.00000000E+0, 0.81949730E+3, + 0.122E+3, 0.680E+2, 0.18299000E+1, 0.00000000E+0, 0.80320320E+3, 0.122E+3, 0.690E+2, + 0.18299000E+1, 0.00000000E+0, 0.79414040E+3, 0.122E+3, 0.700E+2, 0.18299000E+1, 0.00000000E+0, + 0.66477270E+3, 0.122E+3, 0.710E+2, 0.18299000E+1, 0.00000000E+0, 0.64787460E+3, 0.122E+3, + 0.720E+2, 0.18299000E+1, 0.00000000E+0, 0.58798130E+3, 0.122E+3, 0.730E+2, 0.18299000E+1, + 0.00000000E+0, 0.49423570E+3, 0.122E+3, 0.740E+2, 0.18299000E+1, 0.00000000E+0, 0.50177330E+3, + 0.122E+3, 0.750E+2, 0.18299000E+1, 0.00000000E+0, 0.45257260E+3, 0.122E+3, 0.760E+2, + 0.18299000E+1, 0.00000000E+0, 0.41285580E+3, 0.122E+3, 0.770E+2, 0.18299000E+1, 0.00000000E+0, + 0.34145400E+3, 0.122E+3, 0.780E+2, 0.18299000E+1, 0.00000000E+0, 0.31846190E+3, 0.122E+3, + 0.790E+2, 0.18299000E+1, 0.00000000E+0, 0.32707700E+3, 0.122E+3, 0.800E+2, 0.18299000E+1, + 0.00000000E+0, 0.48621160E+3, 0.122E+3, 0.810E+2, 0.18299000E+1, 0.00000000E+0, 0.47215520E+3, + 0.122E+3, 0.820E+2, 0.18299000E+1, 0.00000000E+0, 0.43048050E+3, 0.122E+3, 0.830E+2, + 0.18299000E+1, 0.00000000E+0, 0.40869510E+3, 0.122E+3, 0.840E+2, 0.18299000E+1, 0.00000000E+0, + 0.37510290E+3, 0.122E+3, 0.850E+2, 0.18299000E+1, 0.00000000E+0, 0.34205750E+3, 0.122E+3, + 0.860E+2, 0.18299000E+1, 0.00000000E+0, 0.12263970E+4, 0.122E+3, 0.870E+2, 0.18299000E+1, + 0.00000000E+0, 0.11623660E+4, 0.122E+3, 0.880E+2, 0.18299000E+1, 0.00000000E+0, 0.10191422E+4, + 0.122E+3, 0.890E+2, 0.18299000E+1, 0.00000000E+0, 0.90723670E+3, 0.122E+3, 0.900E+2, + 0.18299000E+1, 0.00000000E+0, 0.90483310E+3, 0.122E+3, 0.910E+2, 0.18299000E+1, 0.00000000E+0, + 0.87587480E+3, 0.122E+3, 0.920E+2, 0.18299000E+1, 0.00000000E+0, 0.90696160E+3, 0.122E+3, + 0.930E+2, 0.18299000E+1, 0.00000000E+0, 0.87736450E+3, 0.122E+3, 0.940E+2, 0.18299000E+1, + 0.00000000E+0, 0.47275500E+2, 0.122E+3, 0.101E+3, 0.18299000E+1, 0.00000000E+0, 0.15766670E+3, + 0.122E+3, 0.103E+3, 0.18299000E+1, 0.98650000E+0, 0.20036690E+3, 0.122E+3, 0.104E+3, + 0.18299000E+1, 0.98080000E+0, 0.15035200E+3, 0.122E+3, 0.105E+3, 0.18299000E+1, 0.97060000E+0, + 0.11205230E+3, 0.122E+3, 0.106E+3, 0.18299000E+1, 0.98680000E+0, 0.76983400E+2, 0.122E+3, + 0.107E+3, 0.18299000E+1, 0.99440000E+0, 0.55516000E+2, 0.122E+3, 0.108E+3, 0.18299000E+1, + 0.99250000E+0, 0.37722200E+2, 0.122E+3, 0.109E+3, 0.18299000E+1, 0.99820000E+0, 0.23126120E+3, + 0.122E+3, 0.111E+3, 0.18299000E+1, 0.96840000E+0, 0.35836020E+3, 0.122E+3, 0.112E+3, + 0.18299000E+1, 0.96280000E+0, 0.35964970E+3, 0.122E+3, 0.113E+3, 0.18299000E+1, 0.96480000E+0, + 0.28509570E+3, 0.122E+3, 0.114E+3, 0.18299000E+1, 0.95070000E+0, 0.23107730E+3, 0.122E+3, + 0.115E+3, 0.18299000E+1, 0.99470000E+0, 0.19398450E+3, 0.122E+3, 0.116E+3, 0.18299000E+1, + 0.99480000E+0, 0.15736040E+3, 0.122E+3, 0.117E+3, 0.18299000E+1, 0.99720000E+0, 0.31625180E+3, + 0.122E+3, 0.119E+3, 0.18299000E+1, 0.97670000E+0, 0.61943010E+3, 0.122E+3, 0.120E+3, + 0.18299000E+1, 0.98310000E+0, 0.31292020E+3, 0.122E+3, 0.121E+3, 0.18299000E+1, 0.18627000E+1, + 0.30199880E+3, 0.122E+3, 0.122E+3, 0.18299000E+1, 0.18299000E+1, 0.28406700E+2, 0.123E+3, + 0.100E+1, 0.19138000E+1, 0.91180000E+0, 0.18435900E+2, 0.123E+3, 0.200E+1, 0.19138000E+1, + 0.00000000E+0, 0.47914020E+3, 0.123E+3, 0.300E+1, 0.19138000E+1, 0.00000000E+0, 0.26670500E+3, + 0.123E+3, 0.400E+1, 0.19138000E+1, 0.00000000E+0, 0.17589090E+3, 0.123E+3, 0.500E+1, + 0.19138000E+1, 0.00000000E+0, 0.11700980E+3, 0.123E+3, 0.600E+1, 0.19138000E+1, 0.00000000E+0, + 0.80914400E+2, 0.123E+3, 0.700E+1, 0.19138000E+1, 0.00000000E+0, 0.60793300E+2, 0.123E+3, + 0.800E+1, 0.19138000E+1, 0.00000000E+0, 0.45763000E+2, 0.123E+3, 0.900E+1, 0.19138000E+1, + 0.00000000E+0, 0.35029000E+2, 0.123E+3, 0.100E+2, 0.19138000E+1, 0.00000000E+0, 0.57164550E+3, + 0.123E+3, 0.110E+2, 0.19138000E+1, 0.00000000E+0, 0.42771560E+3, 0.123E+3, 0.120E+2, + 0.19138000E+1, 0.00000000E+0, 0.39004320E+3, 0.123E+3, 0.130E+2, 0.19138000E+1, 0.00000000E+0, + 0.30289850E+3, 0.123E+3, 0.140E+2, 0.19138000E+1, 0.00000000E+0, 0.23331760E+3, 0.123E+3, + 0.150E+2, 0.19138000E+1, 0.00000000E+0, 0.19211130E+3, 0.123E+3, 0.160E+2, 0.19138000E+1, + 0.00000000E+0, 0.15575070E+3, 0.123E+3, 0.170E+2, 0.19138000E+1, 0.00000000E+0, 0.12660270E+3, + 0.123E+3, 0.180E+2, 0.19138000E+1, 0.00000000E+0, 0.94198370E+3, 0.123E+3, 0.190E+2, + 0.19138000E+1, 0.00000000E+0, 0.76007180E+3, 0.123E+3, 0.200E+2, 0.19138000E+1, 0.00000000E+0, + 0.62478010E+3, 0.123E+3, 0.210E+2, 0.19138000E+1, 0.00000000E+0, 0.60052210E+3, 0.123E+3, + 0.220E+2, 0.19138000E+1, 0.00000000E+0, 0.54839080E+3, 0.123E+3, 0.230E+2, 0.19138000E+1, + 0.00000000E+0, 0.43166830E+3, 0.123E+3, 0.240E+2, 0.19138000E+1, 0.00000000E+0, 0.47025290E+3, + 0.123E+3, 0.250E+2, 0.19138000E+1, 0.00000000E+0, 0.36861360E+3, 0.123E+3, 0.260E+2, + 0.19138000E+1, 0.00000000E+0, 0.38857290E+3, 0.123E+3, 0.270E+2, 0.19138000E+1, 0.00000000E+0, + 0.40143290E+3, 0.123E+3, 0.280E+2, 0.19138000E+1, 0.00000000E+0, 0.30757630E+3, 0.123E+3, + 0.290E+2, 0.19138000E+1, 0.00000000E+0, 0.31312860E+3, 0.123E+3, 0.300E+2, 0.19138000E+1, + 0.00000000E+0, 0.37194270E+3, 0.123E+3, 0.310E+2, 0.19138000E+1, 0.00000000E+0, 0.32434350E+3, + 0.123E+3, 0.320E+2, 0.19138000E+1, 0.00000000E+0, 0.27383520E+3, 0.123E+3, 0.330E+2, + 0.19138000E+1, 0.00000000E+0, 0.24415540E+3, 0.123E+3, 0.340E+2, 0.19138000E+1, 0.00000000E+0, + 0.21227920E+3, 0.123E+3, 0.350E+2, 0.19138000E+1, 0.00000000E+0, 0.18351710E+3, 0.123E+3, + 0.360E+2, 0.19138000E+1, 0.00000000E+0, 0.10535834E+4, 0.123E+3, 0.370E+2, 0.19138000E+1, + 0.00000000E+0, 0.90623640E+3, 0.123E+3, 0.380E+2, 0.19138000E+1, 0.00000000E+0, 0.78672550E+3, + 0.123E+3, 0.390E+2, 0.19138000E+1, 0.00000000E+0, 0.70307840E+3, 0.123E+3, 0.400E+2, + 0.19138000E+1, 0.00000000E+0, 0.63870140E+3, 0.123E+3, 0.410E+2, 0.19138000E+1, 0.00000000E+0, + 0.48981600E+3, 0.123E+3, 0.420E+2, 0.19138000E+1, 0.00000000E+0, 0.54789060E+3, 0.123E+3, + 0.430E+2, 0.19138000E+1, 0.00000000E+0, 0.41435750E+3, 0.123E+3, 0.440E+2, 0.19138000E+1, + 0.00000000E+0, 0.45302620E+3, 0.123E+3, 0.450E+2, 0.19138000E+1, 0.00000000E+0, 0.41911340E+3, + 0.123E+3, 0.460E+2, 0.19138000E+1, 0.00000000E+0, 0.34982880E+3, 0.123E+3, 0.470E+2, + 0.19138000E+1, 0.00000000E+0, 0.36818710E+3, 0.123E+3, 0.480E+2, 0.19138000E+1, 0.00000000E+0, + 0.46556470E+3, 0.123E+3, 0.490E+2, 0.19138000E+1, 0.00000000E+0, 0.42659330E+3, 0.123E+3, + 0.500E+2, 0.19138000E+1, 0.00000000E+0, 0.37675440E+3, 0.123E+3, 0.510E+2, 0.19138000E+1, + 0.00000000E+0, 0.34763740E+3, 0.123E+3, 0.520E+2, 0.19138000E+1, 0.00000000E+0, 0.31247140E+3, + 0.123E+3, 0.530E+2, 0.19138000E+1, 0.00000000E+0, 0.27936120E+3, 0.123E+3, 0.540E+2, + 0.19138000E+1, 0.00000000E+0, 0.12831193E+4, 0.123E+3, 0.550E+2, 0.19138000E+1, 0.00000000E+0, + 0.11586662E+4, 0.123E+3, 0.560E+2, 0.19138000E+1, 0.00000000E+0, 0.10088336E+4, 0.123E+3, + 0.570E+2, 0.19138000E+1, 0.00000000E+0, 0.44575700E+3, 0.123E+3, 0.580E+2, 0.19138000E+1, + 0.27991000E+1, 0.10235395E+4, 0.123E+3, 0.590E+2, 0.19138000E+1, 0.00000000E+0, 0.98134570E+3, + 0.123E+3, 0.600E+2, 0.19138000E+1, 0.00000000E+0, 0.95633210E+3, 0.123E+3, 0.610E+2, + 0.19138000E+1, 0.00000000E+0, 0.93337380E+3, 0.123E+3, 0.620E+2, 0.19138000E+1, 0.00000000E+0, + 0.91300140E+3, 0.123E+3, 0.630E+2, 0.19138000E+1, 0.00000000E+0, 0.71072370E+3, 0.123E+3, + 0.640E+2, 0.19138000E+1, 0.00000000E+0, 0.81199050E+3, 0.123E+3, 0.650E+2, 0.19138000E+1, + 0.00000000E+0, 0.78182720E+3, 0.123E+3, 0.660E+2, 0.19138000E+1, 0.00000000E+0, 0.82162740E+3, + 0.123E+3, 0.670E+2, 0.19138000E+1, 0.00000000E+0, 0.80399890E+3, 0.123E+3, 0.680E+2, + 0.19138000E+1, 0.00000000E+0, 0.78800640E+3, 0.123E+3, 0.690E+2, 0.19138000E+1, 0.00000000E+0, + 0.77912190E+3, 0.123E+3, 0.700E+2, 0.19138000E+1, 0.00000000E+0, 0.65197940E+3, 0.123E+3, + 0.710E+2, 0.19138000E+1, 0.00000000E+0, 0.63529960E+3, 0.123E+3, 0.720E+2, 0.19138000E+1, + 0.00000000E+0, 0.57649460E+3, 0.123E+3, 0.730E+2, 0.19138000E+1, 0.00000000E+0, 0.48455830E+3, + 0.123E+3, 0.740E+2, 0.19138000E+1, 0.00000000E+0, 0.49191200E+3, 0.123E+3, 0.750E+2, + 0.19138000E+1, 0.00000000E+0, 0.44364130E+3, 0.123E+3, 0.760E+2, 0.19138000E+1, 0.00000000E+0, + 0.40468640E+3, 0.123E+3, 0.770E+2, 0.19138000E+1, 0.00000000E+0, 0.33471530E+3, 0.123E+3, + 0.780E+2, 0.19138000E+1, 0.00000000E+0, 0.31218730E+3, 0.123E+3, 0.790E+2, 0.19138000E+1, + 0.00000000E+0, 0.32060120E+3, 0.123E+3, 0.800E+2, 0.19138000E+1, 0.00000000E+0, 0.47675960E+3, + 0.123E+3, 0.810E+2, 0.19138000E+1, 0.00000000E+0, 0.46287410E+3, 0.123E+3, 0.820E+2, + 0.19138000E+1, 0.00000000E+0, 0.42191810E+3, 0.123E+3, 0.830E+2, 0.19138000E+1, 0.00000000E+0, + 0.40051720E+3, 0.123E+3, 0.840E+2, 0.19138000E+1, 0.00000000E+0, 0.36755880E+3, 0.123E+3, + 0.850E+2, 0.19138000E+1, 0.00000000E+0, 0.33516100E+3, 0.123E+3, 0.860E+2, 0.19138000E+1, + 0.00000000E+0, 0.12027024E+4, 0.123E+3, 0.870E+2, 0.19138000E+1, 0.00000000E+0, 0.11403430E+4, + 0.123E+3, 0.880E+2, 0.19138000E+1, 0.00000000E+0, 0.99965520E+3, 0.123E+3, 0.890E+2, + 0.19138000E+1, 0.00000000E+0, 0.88972590E+3, 0.123E+3, 0.900E+2, 0.19138000E+1, 0.00000000E+0, + 0.88748800E+3, 0.123E+3, 0.910E+2, 0.19138000E+1, 0.00000000E+0, 0.85909970E+3, 0.123E+3, + 0.920E+2, 0.19138000E+1, 0.00000000E+0, 0.88977190E+3, 0.123E+3, 0.930E+2, 0.19138000E+1, + 0.00000000E+0, 0.86071780E+3, 0.123E+3, 0.940E+2, 0.19138000E+1, 0.00000000E+0, 0.46308900E+2, + 0.123E+3, 0.101E+3, 0.19138000E+1, 0.00000000E+0, 0.15457620E+3, 0.123E+3, 0.103E+3, + 0.19138000E+1, 0.98650000E+0, 0.19640270E+3, 0.123E+3, 0.104E+3, 0.19138000E+1, 0.98080000E+0, + 0.14731530E+3, 0.123E+3, 0.105E+3, 0.19138000E+1, 0.97060000E+0, 0.10977970E+3, 0.123E+3, + 0.106E+3, 0.19138000E+1, 0.98680000E+0, 0.75430300E+2, 0.123E+3, 0.107E+3, 0.19138000E+1, + 0.99440000E+0, 0.54410900E+2, 0.123E+3, 0.108E+3, 0.19138000E+1, 0.99250000E+0, 0.36996200E+2, + 0.123E+3, 0.109E+3, 0.19138000E+1, 0.99820000E+0, 0.22678860E+3, 0.123E+3, 0.111E+3, + 0.19138000E+1, 0.96840000E+0, 0.35139280E+3, 0.123E+3, 0.112E+3, 0.19138000E+1, 0.96280000E+0, + 0.35255750E+3, 0.123E+3, 0.113E+3, 0.19138000E+1, 0.96480000E+0, 0.27935630E+3, 0.123E+3, + 0.114E+3, 0.19138000E+1, 0.95070000E+0, 0.22637670E+3, 0.123E+3, 0.115E+3, 0.19138000E+1, + 0.99470000E+0, 0.19002990E+3, 0.123E+3, 0.116E+3, 0.19138000E+1, 0.99480000E+0, 0.15415760E+3, + 0.123E+3, 0.117E+3, 0.19138000E+1, 0.99720000E+0, 0.31011080E+3, 0.123E+3, 0.119E+3, + 0.19138000E+1, 0.97670000E+0, 0.60755710E+3, 0.123E+3, 0.120E+3, 0.19138000E+1, 0.98310000E+0, + 0.30673890E+3, 0.123E+3, 0.121E+3, 0.19138000E+1, 0.18627000E+1, 0.29600290E+3, 0.123E+3, + 0.122E+3, 0.19138000E+1, 0.18299000E+1, 0.29014360E+3, 0.123E+3, 0.123E+3, 0.19138000E+1, + 0.19138000E+1, 0.28056200E+2, 0.124E+3, 0.100E+1, 0.18269000E+1, 0.91180000E+0, 0.18175400E+2, + 0.124E+3, 0.200E+1, 0.18269000E+1, 0.00000000E+0, 0.48059440E+3, 0.124E+3, 0.300E+1, + 0.18269000E+1, 0.00000000E+0, 0.26540880E+3, 0.124E+3, 0.400E+1, 0.18269000E+1, 0.00000000E+0, + 0.17437190E+3, 0.124E+3, 0.500E+1, 0.18269000E+1, 0.00000000E+0, 0.11571820E+3, 0.124E+3, + 0.600E+1, 0.18269000E+1, 0.00000000E+0, 0.79902400E+2, 0.124E+3, 0.700E+1, 0.18269000E+1, + 0.00000000E+0, 0.59982900E+2, 0.124E+3, 0.800E+1, 0.18269000E+1, 0.00000000E+0, 0.45129000E+2, + 0.124E+3, 0.900E+1, 0.18269000E+1, 0.00000000E+0, 0.34535000E+2, 0.124E+3, 0.100E+2, + 0.18269000E+1, 0.00000000E+0, 0.57314360E+3, 0.124E+3, 0.110E+2, 0.18269000E+1, 0.00000000E+0, + 0.42622760E+3, 0.124E+3, 0.120E+2, 0.18269000E+1, 0.00000000E+0, 0.38786950E+3, 0.124E+3, + 0.130E+2, 0.18269000E+1, 0.00000000E+0, 0.30039280E+3, 0.124E+3, 0.140E+2, 0.18269000E+1, + 0.00000000E+0, 0.23090900E+3, 0.124E+3, 0.150E+2, 0.18269000E+1, 0.00000000E+0, 0.18990520E+3, + 0.124E+3, 0.160E+2, 0.18269000E+1, 0.00000000E+0, 0.15380570E+3, 0.124E+3, 0.170E+2, + 0.18269000E+1, 0.00000000E+0, 0.12492650E+3, 0.124E+3, 0.180E+2, 0.18269000E+1, 0.00000000E+0, + 0.94587000E+3, 0.124E+3, 0.190E+2, 0.18269000E+1, 0.00000000E+0, 0.75936840E+3, 0.124E+3, + 0.200E+2, 0.18269000E+1, 0.00000000E+0, 0.62353320E+3, 0.124E+3, 0.210E+2, 0.18269000E+1, + 0.00000000E+0, 0.59879810E+3, 0.124E+3, 0.220E+2, 0.18269000E+1, 0.00000000E+0, 0.54652440E+3, + 0.124E+3, 0.230E+2, 0.18269000E+1, 0.00000000E+0, 0.43023530E+3, 0.124E+3, 0.240E+2, + 0.18269000E+1, 0.00000000E+0, 0.46829610E+3, 0.124E+3, 0.250E+2, 0.18269000E+1, 0.00000000E+0, + 0.36707850E+3, 0.124E+3, 0.260E+2, 0.18269000E+1, 0.00000000E+0, 0.38644860E+3, 0.124E+3, + 0.270E+2, 0.18269000E+1, 0.00000000E+0, 0.39945300E+3, 0.124E+3, 0.280E+2, 0.18269000E+1, + 0.00000000E+0, 0.30611810E+3, 0.124E+3, 0.290E+2, 0.18269000E+1, 0.00000000E+0, 0.31106030E+3, + 0.124E+3, 0.300E+2, 0.18269000E+1, 0.00000000E+0, 0.36963020E+3, 0.124E+3, 0.310E+2, + 0.18269000E+1, 0.00000000E+0, 0.32164040E+3, 0.124E+3, 0.320E+2, 0.18269000E+1, 0.00000000E+0, + 0.27107700E+3, 0.124E+3, 0.330E+2, 0.18269000E+1, 0.00000000E+0, 0.24145850E+3, 0.124E+3, + 0.340E+2, 0.18269000E+1, 0.00000000E+0, 0.20973930E+3, 0.124E+3, 0.350E+2, 0.18269000E+1, + 0.00000000E+0, 0.18118190E+3, 0.124E+3, 0.360E+2, 0.18269000E+1, 0.00000000E+0, 0.10575718E+4, + 0.124E+3, 0.370E+2, 0.18269000E+1, 0.00000000E+0, 0.90561870E+3, 0.124E+3, 0.380E+2, + 0.18269000E+1, 0.00000000E+0, 0.78474890E+3, 0.124E+3, 0.390E+2, 0.18269000E+1, 0.00000000E+0, + 0.70054320E+3, 0.124E+3, 0.400E+2, 0.18269000E+1, 0.00000000E+0, 0.63596390E+3, 0.124E+3, + 0.410E+2, 0.18269000E+1, 0.00000000E+0, 0.48719110E+3, 0.124E+3, 0.420E+2, 0.18269000E+1, + 0.00000000E+0, 0.54517240E+3, 0.124E+3, 0.430E+2, 0.18269000E+1, 0.00000000E+0, 0.41181870E+3, + 0.124E+3, 0.440E+2, 0.18269000E+1, 0.00000000E+0, 0.45019430E+3, 0.124E+3, 0.450E+2, + 0.18269000E+1, 0.00000000E+0, 0.41632300E+3, 0.124E+3, 0.460E+2, 0.18269000E+1, 0.00000000E+0, + 0.34767860E+3, 0.124E+3, 0.470E+2, 0.18269000E+1, 0.00000000E+0, 0.36555310E+3, 0.124E+3, + 0.480E+2, 0.18269000E+1, 0.00000000E+0, 0.46283040E+3, 0.124E+3, 0.490E+2, 0.18269000E+1, + 0.00000000E+0, 0.42332080E+3, 0.124E+3, 0.500E+2, 0.18269000E+1, 0.00000000E+0, 0.37325910E+3, + 0.124E+3, 0.510E+2, 0.18269000E+1, 0.00000000E+0, 0.34409820E+3, 0.124E+3, 0.520E+2, + 0.18269000E+1, 0.00000000E+0, 0.30900630E+3, 0.124E+3, 0.530E+2, 0.18269000E+1, 0.00000000E+0, + 0.27604060E+3, 0.124E+3, 0.540E+2, 0.18269000E+1, 0.00000000E+0, 0.12879616E+4, 0.124E+3, + 0.550E+2, 0.18269000E+1, 0.00000000E+0, 0.11586672E+4, 0.124E+3, 0.560E+2, 0.18269000E+1, + 0.00000000E+0, 0.10069636E+4, 0.124E+3, 0.570E+2, 0.18269000E+1, 0.00000000E+0, 0.44178090E+3, + 0.124E+3, 0.580E+2, 0.18269000E+1, 0.27991000E+1, 0.10229773E+4, 0.124E+3, 0.590E+2, + 0.18269000E+1, 0.00000000E+0, 0.98048290E+3, 0.124E+3, 0.600E+2, 0.18269000E+1, 0.00000000E+0, + 0.95540420E+3, 0.124E+3, 0.610E+2, 0.18269000E+1, 0.00000000E+0, 0.93239460E+3, 0.124E+3, + 0.620E+2, 0.18269000E+1, 0.00000000E+0, 0.91197350E+3, 0.124E+3, 0.630E+2, 0.18269000E+1, + 0.00000000E+0, 0.70857690E+3, 0.124E+3, 0.640E+2, 0.18269000E+1, 0.00000000E+0, 0.81204950E+3, + 0.124E+3, 0.650E+2, 0.18269000E+1, 0.00000000E+0, 0.78162600E+3, 0.124E+3, 0.660E+2, + 0.18269000E+1, 0.00000000E+0, 0.82030710E+3, 0.124E+3, 0.670E+2, 0.18269000E+1, 0.00000000E+0, + 0.80266090E+3, 0.124E+3, 0.680E+2, 0.18269000E+1, 0.00000000E+0, 0.78663360E+3, 0.124E+3, + 0.690E+2, 0.18269000E+1, 0.00000000E+0, 0.77782320E+3, 0.124E+3, 0.700E+2, 0.18269000E+1, + 0.00000000E+0, 0.65005720E+3, 0.124E+3, 0.710E+2, 0.18269000E+1, 0.00000000E+0, 0.63220990E+3, + 0.124E+3, 0.720E+2, 0.18269000E+1, 0.00000000E+0, 0.57309450E+3, 0.124E+3, 0.730E+2, + 0.18269000E+1, 0.00000000E+0, 0.48138140E+3, 0.124E+3, 0.740E+2, 0.18269000E+1, 0.00000000E+0, + 0.48847190E+3, 0.124E+3, 0.750E+2, 0.18269000E+1, 0.00000000E+0, 0.44016550E+3, 0.124E+3, + 0.760E+2, 0.18269000E+1, 0.00000000E+0, 0.40125220E+3, 0.124E+3, 0.770E+2, 0.18269000E+1, + 0.00000000E+0, 0.33169650E+3, 0.124E+3, 0.780E+2, 0.18269000E+1, 0.00000000E+0, 0.30930750E+3, + 0.124E+3, 0.790E+2, 0.18269000E+1, 0.00000000E+0, 0.31751490E+3, 0.124E+3, 0.800E+2, + 0.18269000E+1, 0.00000000E+0, 0.47384960E+3, 0.124E+3, 0.810E+2, 0.18269000E+1, 0.00000000E+0, + 0.45937430E+3, 0.124E+3, 0.820E+2, 0.18269000E+1, 0.00000000E+0, 0.41810440E+3, 0.124E+3, + 0.830E+2, 0.18269000E+1, 0.00000000E+0, 0.39657360E+3, 0.124E+3, 0.840E+2, 0.18269000E+1, + 0.00000000E+0, 0.36360680E+3, 0.124E+3, 0.850E+2, 0.18269000E+1, 0.00000000E+0, 0.33130140E+3, + 0.124E+3, 0.860E+2, 0.18269000E+1, 0.00000000E+0, 0.12054436E+4, 0.124E+3, 0.870E+2, + 0.18269000E+1, 0.00000000E+0, 0.11392761E+4, 0.124E+3, 0.880E+2, 0.18269000E+1, 0.00000000E+0, + 0.99702490E+3, 0.124E+3, 0.890E+2, 0.18269000E+1, 0.00000000E+0, 0.88576610E+3, 0.124E+3, + 0.900E+2, 0.18269000E+1, 0.00000000E+0, 0.88442800E+3, 0.124E+3, 0.910E+2, 0.18269000E+1, + 0.00000000E+0, 0.85610390E+3, 0.124E+3, 0.920E+2, 0.18269000E+1, 0.00000000E+0, 0.88770660E+3, + 0.124E+3, 0.930E+2, 0.18269000E+1, 0.00000000E+0, 0.85853020E+3, 0.124E+3, 0.940E+2, + 0.18269000E+1, 0.00000000E+0, 0.45817300E+2, 0.124E+3, 0.101E+3, 0.18269000E+1, 0.00000000E+0, + 0.15375390E+3, 0.124E+3, 0.103E+3, 0.18269000E+1, 0.98650000E+0, 0.19523170E+3, 0.124E+3, + 0.104E+3, 0.18269000E+1, 0.98080000E+0, 0.14594770E+3, 0.124E+3, 0.105E+3, 0.18269000E+1, + 0.97060000E+0, 0.10858200E+3, 0.124E+3, 0.106E+3, 0.18269000E+1, 0.98680000E+0, 0.74489000E+2, + 0.124E+3, 0.107E+3, 0.18269000E+1, 0.99440000E+0, 0.53673300E+2, 0.124E+3, 0.108E+3, + 0.18269000E+1, 0.99250000E+0, 0.36459400E+2, 0.124E+3, 0.109E+3, 0.18269000E+1, 0.99820000E+0, + 0.22578370E+3, 0.124E+3, 0.111E+3, 0.18269000E+1, 0.96840000E+0, 0.34993280E+3, 0.124E+3, + 0.112E+3, 0.18269000E+1, 0.96280000E+0, 0.35042960E+3, 0.124E+3, 0.113E+3, 0.18269000E+1, + 0.96480000E+0, 0.27695120E+3, 0.124E+3, 0.114E+3, 0.18269000E+1, 0.95070000E+0, 0.22403030E+3, + 0.124E+3, 0.115E+3, 0.18269000E+1, 0.99470000E+0, 0.18785700E+3, 0.124E+3, 0.116E+3, + 0.18269000E+1, 0.99480000E+0, 0.15223830E+3, 0.124E+3, 0.117E+3, 0.18269000E+1, 0.99720000E+0, + 0.30839010E+3, 0.124E+3, 0.119E+3, 0.18269000E+1, 0.97670000E+0, 0.60707000E+3, 0.124E+3, + 0.120E+3, 0.18269000E+1, 0.98310000E+0, 0.30430940E+3, 0.124E+3, 0.121E+3, 0.18269000E+1, + 0.18627000E+1, 0.29365980E+3, 0.124E+3, 0.122E+3, 0.18269000E+1, 0.18299000E+1, 0.28786570E+3, + 0.124E+3, 0.123E+3, 0.18269000E+1, 0.19138000E+1, 0.28569050E+3, 0.124E+3, 0.124E+3, + 0.18269000E+1, 0.18269000E+1, 0.26181000E+2, 0.125E+3, 0.100E+1, 0.16406000E+1, 0.91180000E+0, + 0.17152600E+2, 0.125E+3, 0.200E+1, 0.16406000E+1, 0.00000000E+0, 0.41608360E+3, 0.125E+3, + 0.300E+1, 0.16406000E+1, 0.00000000E+0, 0.23896060E+3, 0.125E+3, 0.400E+1, 0.16406000E+1, + 0.00000000E+0, 0.15984920E+3, 0.125E+3, 0.500E+1, 0.16406000E+1, 0.00000000E+0, 0.10733820E+3, + 0.125E+3, 0.600E+1, 0.16406000E+1, 0.00000000E+0, 0.74699800E+2, 0.125E+3, 0.700E+1, + 0.16406000E+1, 0.00000000E+0, 0.56362200E+2, 0.125E+3, 0.800E+1, 0.16406000E+1, 0.00000000E+0, + 0.42576400E+2, 0.125E+3, 0.900E+1, 0.16406000E+1, 0.00000000E+0, 0.32680600E+2, 0.125E+3, + 0.100E+2, 0.16406000E+1, 0.00000000E+0, 0.49735820E+3, 0.125E+3, 0.110E+2, 0.16406000E+1, + 0.00000000E+0, 0.38129680E+3, 0.125E+3, 0.120E+2, 0.16406000E+1, 0.00000000E+0, 0.35045220E+3, + 0.125E+3, 0.130E+2, 0.16406000E+1, 0.00000000E+0, 0.27492570E+3, 0.125E+3, 0.140E+2, + 0.16406000E+1, 0.00000000E+0, 0.21341010E+3, 0.125E+3, 0.150E+2, 0.16406000E+1, 0.00000000E+0, + 0.17651650E+3, 0.125E+3, 0.160E+2, 0.16406000E+1, 0.00000000E+0, 0.14370010E+3, 0.125E+3, + 0.170E+2, 0.16406000E+1, 0.00000000E+0, 0.11720570E+3, 0.125E+3, 0.180E+2, 0.16406000E+1, + 0.00000000E+0, 0.81424680E+3, 0.125E+3, 0.190E+2, 0.16406000E+1, 0.00000000E+0, 0.67083370E+3, + 0.125E+3, 0.200E+2, 0.16406000E+1, 0.00000000E+0, 0.55379310E+3, 0.125E+3, 0.210E+2, + 0.16406000E+1, 0.00000000E+0, 0.53412660E+3, 0.125E+3, 0.220E+2, 0.16406000E+1, 0.00000000E+0, + 0.48879470E+3, 0.125E+3, 0.230E+2, 0.16406000E+1, 0.00000000E+0, 0.38469310E+3, 0.125E+3, + 0.240E+2, 0.16406000E+1, 0.00000000E+0, 0.42042070E+3, 0.125E+3, 0.250E+2, 0.16406000E+1, + 0.00000000E+0, 0.32962730E+3, 0.125E+3, 0.260E+2, 0.16406000E+1, 0.00000000E+0, 0.34919410E+3, + 0.125E+3, 0.270E+2, 0.16406000E+1, 0.00000000E+0, 0.36001720E+3, 0.125E+3, 0.280E+2, + 0.16406000E+1, 0.00000000E+0, 0.27572060E+3, 0.125E+3, 0.290E+2, 0.16406000E+1, 0.00000000E+0, + 0.28266670E+3, 0.125E+3, 0.300E+2, 0.16406000E+1, 0.00000000E+0, 0.33506150E+3, 0.125E+3, + 0.310E+2, 0.16406000E+1, 0.00000000E+0, 0.29451840E+3, 0.125E+3, 0.320E+2, 0.16406000E+1, + 0.00000000E+0, 0.25028310E+3, 0.125E+3, 0.330E+2, 0.16406000E+1, 0.00000000E+0, 0.22398570E+3, + 0.125E+3, 0.340E+2, 0.16406000E+1, 0.00000000E+0, 0.19545360E+3, 0.125E+3, 0.350E+2, + 0.16406000E+1, 0.00000000E+0, 0.16950970E+3, 0.125E+3, 0.360E+2, 0.16406000E+1, 0.00000000E+0, + 0.91194330E+3, 0.125E+3, 0.370E+2, 0.16406000E+1, 0.00000000E+0, 0.79901250E+3, 0.125E+3, + 0.380E+2, 0.16406000E+1, 0.00000000E+0, 0.69867600E+3, 0.125E+3, 0.390E+2, 0.16406000E+1, + 0.00000000E+0, 0.62707900E+3, 0.125E+3, 0.400E+2, 0.16406000E+1, 0.00000000E+0, 0.57118620E+3, + 0.125E+3, 0.410E+2, 0.16406000E+1, 0.00000000E+0, 0.43993260E+3, 0.125E+3, 0.420E+2, + 0.16406000E+1, 0.00000000E+0, 0.49132100E+3, 0.125E+3, 0.430E+2, 0.16406000E+1, 0.00000000E+0, + 0.37334420E+3, 0.125E+3, 0.440E+2, 0.16406000E+1, 0.00000000E+0, 0.40836770E+3, 0.125E+3, + 0.450E+2, 0.16406000E+1, 0.00000000E+0, 0.37842950E+3, 0.125E+3, 0.460E+2, 0.16406000E+1, + 0.00000000E+0, 0.31534820E+3, 0.125E+3, 0.470E+2, 0.16406000E+1, 0.00000000E+0, 0.33315180E+3, + 0.125E+3, 0.480E+2, 0.16406000E+1, 0.00000000E+0, 0.41907070E+3, 0.125E+3, 0.490E+2, + 0.16406000E+1, 0.00000000E+0, 0.38661840E+3, 0.125E+3, 0.500E+2, 0.16406000E+1, 0.00000000E+0, + 0.34352050E+3, 0.125E+3, 0.510E+2, 0.16406000E+1, 0.00000000E+0, 0.31804850E+3, 0.125E+3, + 0.520E+2, 0.16406000E+1, 0.00000000E+0, 0.28687200E+3, 0.125E+3, 0.530E+2, 0.16406000E+1, + 0.00000000E+0, 0.25728030E+3, 0.125E+3, 0.540E+2, 0.16406000E+1, 0.00000000E+0, 0.11103588E+4, + 0.125E+3, 0.550E+2, 0.16406000E+1, 0.00000000E+0, 0.10186688E+4, 0.125E+3, 0.560E+2, + 0.16406000E+1, 0.00000000E+0, 0.89350560E+3, 0.125E+3, 0.570E+2, 0.16406000E+1, 0.00000000E+0, + 0.40587370E+3, 0.125E+3, 0.580E+2, 0.16406000E+1, 0.27991000E+1, 0.90204820E+3, 0.125E+3, + 0.590E+2, 0.16406000E+1, 0.00000000E+0, 0.86604420E+3, 0.125E+3, 0.600E+2, 0.16406000E+1, + 0.00000000E+0, 0.84428560E+3, 0.125E+3, 0.610E+2, 0.16406000E+1, 0.00000000E+0, 0.82428300E+3, + 0.125E+3, 0.620E+2, 0.16406000E+1, 0.00000000E+0, 0.80654320E+3, 0.125E+3, 0.630E+2, + 0.16406000E+1, 0.00000000E+0, 0.63257430E+3, 0.125E+3, 0.640E+2, 0.16406000E+1, 0.00000000E+0, + 0.71375520E+3, 0.125E+3, 0.650E+2, 0.16406000E+1, 0.00000000E+0, 0.68811250E+3, 0.125E+3, + 0.660E+2, 0.16406000E+1, 0.00000000E+0, 0.72723780E+3, 0.125E+3, 0.670E+2, 0.16406000E+1, + 0.00000000E+0, 0.71180010E+3, 0.125E+3, 0.680E+2, 0.16406000E+1, 0.00000000E+0, 0.69785650E+3, + 0.125E+3, 0.690E+2, 0.16406000E+1, 0.00000000E+0, 0.68978470E+3, 0.125E+3, 0.700E+2, + 0.16406000E+1, 0.00000000E+0, 0.58012870E+3, 0.125E+3, 0.710E+2, 0.16406000E+1, 0.00000000E+0, + 0.56940560E+3, 0.125E+3, 0.720E+2, 0.16406000E+1, 0.00000000E+0, 0.51879050E+3, 0.125E+3, + 0.730E+2, 0.16406000E+1, 0.00000000E+0, 0.43720880E+3, 0.125E+3, 0.740E+2, 0.16406000E+1, + 0.00000000E+0, 0.44459970E+3, 0.125E+3, 0.750E+2, 0.16406000E+1, 0.00000000E+0, 0.40230970E+3, + 0.125E+3, 0.760E+2, 0.16406000E+1, 0.00000000E+0, 0.36794540E+3, 0.125E+3, 0.770E+2, + 0.16406000E+1, 0.00000000E+0, 0.30505010E+3, 0.125E+3, 0.780E+2, 0.16406000E+1, 0.00000000E+0, + 0.28480180E+3, 0.125E+3, 0.790E+2, 0.16406000E+1, 0.00000000E+0, 0.29291770E+3, 0.125E+3, + 0.800E+2, 0.16406000E+1, 0.00000000E+0, 0.42959510E+3, 0.125E+3, 0.810E+2, 0.16406000E+1, + 0.00000000E+0, 0.41941490E+3, 0.125E+3, 0.820E+2, 0.16406000E+1, 0.00000000E+0, 0.38444960E+3, + 0.125E+3, 0.830E+2, 0.16406000E+1, 0.00000000E+0, 0.36605470E+3, 0.125E+3, 0.840E+2, + 0.16406000E+1, 0.00000000E+0, 0.33709280E+3, 0.125E+3, 0.850E+2, 0.16406000E+1, 0.00000000E+0, + 0.30829470E+3, 0.125E+3, 0.860E+2, 0.16406000E+1, 0.00000000E+0, 0.10472098E+4, 0.125E+3, + 0.870E+2, 0.16406000E+1, 0.00000000E+0, 0.10062859E+4, 0.125E+3, 0.880E+2, 0.16406000E+1, + 0.00000000E+0, 0.88823000E+3, 0.125E+3, 0.890E+2, 0.16406000E+1, 0.00000000E+0, 0.79631050E+3, + 0.125E+3, 0.900E+2, 0.16406000E+1, 0.00000000E+0, 0.79125770E+3, 0.125E+3, 0.910E+2, + 0.16406000E+1, 0.00000000E+0, 0.76609840E+3, 0.125E+3, 0.920E+2, 0.16406000E+1, 0.00000000E+0, + 0.78992350E+3, 0.125E+3, 0.930E+2, 0.16406000E+1, 0.00000000E+0, 0.76480610E+3, 0.125E+3, + 0.940E+2, 0.16406000E+1, 0.00000000E+0, 0.42392700E+2, 0.125E+3, 0.101E+3, 0.16406000E+1, + 0.00000000E+0, 0.13874910E+3, 0.125E+3, 0.103E+3, 0.16406000E+1, 0.98650000E+0, 0.17668170E+3, + 0.125E+3, 0.104E+3, 0.16406000E+1, 0.98080000E+0, 0.13421360E+3, 0.125E+3, 0.105E+3, + 0.16406000E+1, 0.97060000E+0, 0.10064630E+3, 0.125E+3, 0.106E+3, 0.16406000E+1, 0.98680000E+0, + 0.69621500E+2, 0.125E+3, 0.107E+3, 0.16406000E+1, 0.99440000E+0, 0.50485800E+2, 0.125E+3, + 0.108E+3, 0.16406000E+1, 0.99250000E+0, 0.34548100E+2, 0.125E+3, 0.109E+3, 0.16406000E+1, + 0.99820000E+0, 0.20296760E+3, 0.125E+3, 0.111E+3, 0.16406000E+1, 0.96840000E+0, 0.31401190E+3, + 0.125E+3, 0.112E+3, 0.16406000E+1, 0.96280000E+0, 0.31732870E+3, 0.125E+3, 0.113E+3, + 0.16406000E+1, 0.96480000E+0, 0.25388000E+3, 0.125E+3, 0.114E+3, 0.16406000E+1, 0.95070000E+0, + 0.20709950E+3, 0.125E+3, 0.115E+3, 0.16406000E+1, 0.99470000E+0, 0.17457750E+3, 0.125E+3, + 0.116E+3, 0.16406000E+1, 0.99480000E+0, 0.14221510E+3, 0.125E+3, 0.117E+3, 0.16406000E+1, + 0.99720000E+0, 0.27872590E+3, 0.125E+3, 0.119E+3, 0.16406000E+1, 0.97670000E+0, 0.53581490E+3, + 0.125E+3, 0.120E+3, 0.16406000E+1, 0.98310000E+0, 0.27819650E+3, 0.125E+3, 0.121E+3, + 0.16406000E+1, 0.18627000E+1, 0.26846570E+3, 0.125E+3, 0.122E+3, 0.16406000E+1, 0.18299000E+1, + 0.26311270E+3, 0.125E+3, 0.123E+3, 0.16406000E+1, 0.19138000E+1, 0.26077730E+3, 0.125E+3, + 0.124E+3, 0.16406000E+1, 0.18269000E+1, 0.23955540E+3, 0.125E+3, 0.125E+3, 0.16406000E+1, + 0.16406000E+1, 0.24345200E+2, 0.126E+3, 0.100E+1, 0.16483000E+1, 0.91180000E+0, 0.16056000E+2, + 0.126E+3, 0.200E+1, 0.16483000E+1, 0.00000000E+0, 0.37921170E+3, 0.126E+3, 0.300E+1, + 0.16483000E+1, 0.00000000E+0, 0.21947750E+3, 0.126E+3, 0.400E+1, 0.16483000E+1, 0.00000000E+0, + 0.14762980E+3, 0.126E+3, 0.500E+1, 0.16483000E+1, 0.00000000E+0, 0.99588000E+2, 0.126E+3, + 0.600E+1, 0.16483000E+1, 0.00000000E+0, 0.69563800E+2, 0.126E+3, 0.700E+1, 0.16483000E+1, + 0.00000000E+0, 0.52635100E+2, 0.126E+3, 0.800E+1, 0.16483000E+1, 0.00000000E+0, 0.39862800E+2, + 0.126E+3, 0.900E+1, 0.16483000E+1, 0.00000000E+0, 0.30664800E+2, 0.126E+3, 0.100E+2, + 0.16483000E+1, 0.00000000E+0, 0.45354440E+3, 0.126E+3, 0.110E+2, 0.16483000E+1, 0.00000000E+0, + 0.34971160E+3, 0.126E+3, 0.120E+2, 0.16483000E+1, 0.00000000E+0, 0.32227810E+3, 0.126E+3, + 0.130E+2, 0.16483000E+1, 0.00000000E+0, 0.25376380E+3, 0.126E+3, 0.140E+2, 0.16483000E+1, + 0.00000000E+0, 0.19765690E+3, 0.126E+3, 0.150E+2, 0.16483000E+1, 0.00000000E+0, 0.16387940E+3, + 0.126E+3, 0.160E+2, 0.16483000E+1, 0.00000000E+0, 0.13373240E+3, 0.126E+3, 0.170E+2, + 0.16483000E+1, 0.00000000E+0, 0.10931550E+3, 0.126E+3, 0.180E+2, 0.16483000E+1, 0.00000000E+0, + 0.74225200E+3, 0.126E+3, 0.190E+2, 0.16483000E+1, 0.00000000E+0, 0.61392330E+3, 0.126E+3, + 0.200E+2, 0.16483000E+1, 0.00000000E+0, 0.50734010E+3, 0.126E+3, 0.210E+2, 0.16483000E+1, + 0.00000000E+0, 0.48989960E+3, 0.126E+3, 0.220E+2, 0.16483000E+1, 0.00000000E+0, 0.44862620E+3, + 0.126E+3, 0.230E+2, 0.16483000E+1, 0.00000000E+0, 0.35327090E+3, 0.126E+3, 0.240E+2, + 0.16483000E+1, 0.00000000E+0, 0.38626020E+3, 0.126E+3, 0.250E+2, 0.16483000E+1, 0.00000000E+0, + 0.30304800E+3, 0.126E+3, 0.260E+2, 0.16483000E+1, 0.00000000E+0, 0.32134480E+3, 0.126E+3, + 0.270E+2, 0.16483000E+1, 0.00000000E+0, 0.33106140E+3, 0.126E+3, 0.280E+2, 0.16483000E+1, + 0.00000000E+0, 0.25370380E+3, 0.126E+3, 0.290E+2, 0.16483000E+1, 0.00000000E+0, 0.26053410E+3, + 0.126E+3, 0.300E+2, 0.16483000E+1, 0.00000000E+0, 0.30855290E+3, 0.126E+3, 0.310E+2, + 0.16483000E+1, 0.00000000E+0, 0.27197110E+3, 0.126E+3, 0.320E+2, 0.16483000E+1, 0.00000000E+0, + 0.23176180E+3, 0.126E+3, 0.330E+2, 0.16483000E+1, 0.00000000E+0, 0.20779480E+3, 0.126E+3, + 0.340E+2, 0.16483000E+1, 0.00000000E+0, 0.18168360E+3, 0.126E+3, 0.350E+2, 0.16483000E+1, + 0.00000000E+0, 0.15786610E+3, 0.126E+3, 0.360E+2, 0.16483000E+1, 0.00000000E+0, 0.83179600E+3, + 0.126E+3, 0.370E+2, 0.16483000E+1, 0.00000000E+0, 0.73123300E+3, 0.126E+3, 0.380E+2, + 0.16483000E+1, 0.00000000E+0, 0.64066410E+3, 0.126E+3, 0.390E+2, 0.16483000E+1, 0.00000000E+0, + 0.57577520E+3, 0.126E+3, 0.400E+2, 0.16483000E+1, 0.00000000E+0, 0.52495880E+3, 0.126E+3, + 0.410E+2, 0.16483000E+1, 0.00000000E+0, 0.40508170E+3, 0.126E+3, 0.420E+2, 0.16483000E+1, + 0.00000000E+0, 0.45208310E+3, 0.126E+3, 0.430E+2, 0.16483000E+1, 0.00000000E+0, 0.34423220E+3, + 0.126E+3, 0.440E+2, 0.16483000E+1, 0.00000000E+0, 0.37640450E+3, 0.126E+3, 0.450E+2, + 0.16483000E+1, 0.00000000E+0, 0.34902580E+3, 0.126E+3, 0.460E+2, 0.16483000E+1, 0.00000000E+0, + 0.29090830E+3, 0.126E+3, 0.470E+2, 0.16483000E+1, 0.00000000E+0, 0.30752090E+3, 0.126E+3, + 0.480E+2, 0.16483000E+1, 0.00000000E+0, 0.38606280E+3, 0.126E+3, 0.490E+2, 0.16483000E+1, + 0.00000000E+0, 0.35691590E+3, 0.126E+3, 0.500E+2, 0.16483000E+1, 0.00000000E+0, 0.31786240E+3, + 0.126E+3, 0.510E+2, 0.16483000E+1, 0.00000000E+0, 0.29473480E+3, 0.126E+3, 0.520E+2, + 0.16483000E+1, 0.00000000E+0, 0.26629100E+3, 0.126E+3, 0.530E+2, 0.16483000E+1, 0.00000000E+0, + 0.23921900E+3, 0.126E+3, 0.540E+2, 0.16483000E+1, 0.00000000E+0, 0.10130459E+4, 0.126E+3, + 0.550E+2, 0.16483000E+1, 0.00000000E+0, 0.93186100E+3, 0.126E+3, 0.560E+2, 0.16483000E+1, + 0.00000000E+0, 0.81889940E+3, 0.126E+3, 0.570E+2, 0.16483000E+1, 0.00000000E+0, 0.37545680E+3, + 0.126E+3, 0.580E+2, 0.16483000E+1, 0.27991000E+1, 0.82577350E+3, 0.126E+3, 0.590E+2, + 0.16483000E+1, 0.00000000E+0, 0.79302390E+3, 0.126E+3, 0.600E+2, 0.16483000E+1, 0.00000000E+0, + 0.77315750E+3, 0.126E+3, 0.610E+2, 0.16483000E+1, 0.00000000E+0, 0.75488610E+3, 0.126E+3, + 0.620E+2, 0.16483000E+1, 0.00000000E+0, 0.73868360E+3, 0.126E+3, 0.630E+2, 0.16483000E+1, + 0.00000000E+0, 0.58077730E+3, 0.126E+3, 0.640E+2, 0.16483000E+1, 0.00000000E+0, 0.65347520E+3, + 0.126E+3, 0.650E+2, 0.16483000E+1, 0.00000000E+0, 0.63025330E+3, 0.126E+3, 0.660E+2, + 0.16483000E+1, 0.00000000E+0, 0.66633780E+3, 0.126E+3, 0.670E+2, 0.16483000E+1, 0.00000000E+0, + 0.65221550E+3, 0.126E+3, 0.680E+2, 0.16483000E+1, 0.00000000E+0, 0.63947820E+3, 0.126E+3, + 0.690E+2, 0.16483000E+1, 0.00000000E+0, 0.63201230E+3, 0.126E+3, 0.700E+2, 0.16483000E+1, + 0.00000000E+0, 0.53244100E+3, 0.126E+3, 0.710E+2, 0.16483000E+1, 0.00000000E+0, 0.52361220E+3, + 0.126E+3, 0.720E+2, 0.16483000E+1, 0.00000000E+0, 0.47773970E+3, 0.126E+3, 0.730E+2, + 0.16483000E+1, 0.00000000E+0, 0.40318600E+3, 0.126E+3, 0.740E+2, 0.16483000E+1, 0.00000000E+0, + 0.41018490E+3, 0.126E+3, 0.750E+2, 0.16483000E+1, 0.00000000E+0, 0.37164480E+3, 0.126E+3, + 0.760E+2, 0.16483000E+1, 0.00000000E+0, 0.34026720E+3, 0.126E+3, 0.770E+2, 0.16483000E+1, + 0.00000000E+0, 0.28250560E+3, 0.126E+3, 0.780E+2, 0.16483000E+1, 0.00000000E+0, 0.26390350E+3, + 0.126E+3, 0.790E+2, 0.16483000E+1, 0.00000000E+0, 0.27150750E+3, 0.126E+3, 0.800E+2, + 0.16483000E+1, 0.00000000E+0, 0.39615750E+3, 0.126E+3, 0.810E+2, 0.16483000E+1, 0.00000000E+0, + 0.38734040E+3, 0.126E+3, 0.820E+2, 0.16483000E+1, 0.00000000E+0, 0.35575280E+3, 0.126E+3, + 0.830E+2, 0.16483000E+1, 0.00000000E+0, 0.33914780E+3, 0.126E+3, 0.840E+2, 0.16483000E+1, + 0.00000000E+0, 0.31279910E+3, 0.126E+3, 0.850E+2, 0.16483000E+1, 0.00000000E+0, 0.28650170E+3, + 0.126E+3, 0.860E+2, 0.16483000E+1, 0.00000000E+0, 0.95682050E+3, 0.126E+3, 0.870E+2, + 0.16483000E+1, 0.00000000E+0, 0.92149130E+3, 0.126E+3, 0.880E+2, 0.16483000E+1, 0.00000000E+0, + 0.81480800E+3, 0.126E+3, 0.890E+2, 0.16483000E+1, 0.00000000E+0, 0.73215470E+3, 0.126E+3, + 0.900E+2, 0.16483000E+1, 0.00000000E+0, 0.72684330E+3, 0.126E+3, 0.910E+2, 0.16483000E+1, + 0.00000000E+0, 0.70377870E+3, 0.126E+3, 0.920E+2, 0.16483000E+1, 0.00000000E+0, 0.72468840E+3, + 0.126E+3, 0.930E+2, 0.16483000E+1, 0.00000000E+0, 0.70180630E+3, 0.126E+3, 0.940E+2, + 0.16483000E+1, 0.00000000E+0, 0.39274200E+2, 0.126E+3, 0.101E+3, 0.16483000E+1, 0.00000000E+0, + 0.12754920E+3, 0.126E+3, 0.103E+3, 0.16483000E+1, 0.98650000E+0, 0.16261080E+3, 0.126E+3, + 0.104E+3, 0.16483000E+1, 0.98080000E+0, 0.12411700E+3, 0.126E+3, 0.105E+3, 0.16483000E+1, + 0.97060000E+0, 0.93384800E+2, 0.126E+3, 0.106E+3, 0.16483000E+1, 0.98680000E+0, 0.64846800E+2, + 0.126E+3, 0.107E+3, 0.16483000E+1, 0.99440000E+0, 0.47181600E+2, 0.126E+3, 0.108E+3, + 0.16483000E+1, 0.99250000E+0, 0.32432100E+2, 0.126E+3, 0.109E+3, 0.16483000E+1, 0.99820000E+0, + 0.18646690E+3, 0.126E+3, 0.111E+3, 0.16483000E+1, 0.96840000E+0, 0.28833710E+3, 0.126E+3, + 0.112E+3, 0.16483000E+1, 0.96280000E+0, 0.29202470E+3, 0.126E+3, 0.113E+3, 0.16483000E+1, + 0.96480000E+0, 0.23448430E+3, 0.126E+3, 0.114E+3, 0.16483000E+1, 0.95070000E+0, 0.19184290E+3, + 0.126E+3, 0.115E+3, 0.16483000E+1, 0.99470000E+0, 0.16207500E+3, 0.126E+3, 0.116E+3, + 0.16483000E+1, 0.99480000E+0, 0.13234800E+3, 0.126E+3, 0.117E+3, 0.16483000E+1, 0.99720000E+0, + 0.25675790E+3, 0.126E+3, 0.119E+3, 0.16483000E+1, 0.97670000E+0, 0.49074810E+3, 0.126E+3, + 0.120E+3, 0.16483000E+1, 0.98310000E+0, 0.25688890E+3, 0.126E+3, 0.121E+3, 0.16483000E+1, + 0.18627000E+1, 0.24796360E+3, 0.126E+3, 0.122E+3, 0.16483000E+1, 0.18299000E+1, 0.24301480E+3, + 0.126E+3, 0.123E+3, 0.16483000E+1, 0.19138000E+1, 0.24078340E+3, 0.126E+3, 0.124E+3, + 0.16483000E+1, 0.18269000E+1, 0.22153400E+3, 0.126E+3, 0.125E+3, 0.16483000E+1, 0.16406000E+1, + 0.20499250E+3, 0.126E+3, 0.126E+3, 0.16483000E+1, 0.16483000E+1, 0.23231000E+2, 0.127E+3, + 0.100E+1, 0.17149000E+1, 0.91180000E+0, 0.15354500E+2, 0.127E+3, 0.200E+1, 0.17149000E+1, + 0.00000000E+0, 0.36237460E+3, 0.127E+3, 0.300E+1, 0.17149000E+1, 0.00000000E+0, 0.20922270E+3, + 0.127E+3, 0.400E+1, 0.17149000E+1, 0.00000000E+0, 0.14074280E+3, 0.127E+3, 0.500E+1, + 0.17149000E+1, 0.00000000E+0, 0.95005100E+2, 0.127E+3, 0.600E+1, 0.17149000E+1, 0.00000000E+0, + 0.66421800E+2, 0.127E+3, 0.700E+1, 0.17149000E+1, 0.00000000E+0, 0.50301600E+2, 0.127E+3, + 0.800E+1, 0.17149000E+1, 0.00000000E+0, 0.38131300E+2, 0.127E+3, 0.900E+1, 0.17149000E+1, + 0.00000000E+0, 0.29359800E+2, 0.127E+3, 0.100E+2, 0.17149000E+1, 0.00000000E+0, 0.43337360E+3, + 0.127E+3, 0.110E+2, 0.17149000E+1, 0.00000000E+0, 0.33347670E+3, 0.127E+3, 0.120E+2, + 0.17149000E+1, 0.00000000E+0, 0.30725400E+3, 0.127E+3, 0.130E+2, 0.17149000E+1, 0.00000000E+0, + 0.24191590E+3, 0.127E+3, 0.140E+2, 0.17149000E+1, 0.00000000E+0, 0.18848520E+3, 0.127E+3, + 0.150E+2, 0.17149000E+1, 0.00000000E+0, 0.15634230E+3, 0.127E+3, 0.160E+2, 0.17149000E+1, + 0.00000000E+0, 0.12765130E+3, 0.127E+3, 0.170E+2, 0.17149000E+1, 0.00000000E+0, 0.10440910E+3, + 0.127E+3, 0.180E+2, 0.17149000E+1, 0.00000000E+0, 0.71018180E+3, 0.127E+3, 0.190E+2, + 0.17149000E+1, 0.00000000E+0, 0.58595780E+3, 0.127E+3, 0.200E+2, 0.17149000E+1, 0.00000000E+0, + 0.48407230E+3, 0.127E+3, 0.210E+2, 0.17149000E+1, 0.00000000E+0, 0.46739840E+3, 0.127E+3, + 0.220E+2, 0.17149000E+1, 0.00000000E+0, 0.42799360E+3, 0.127E+3, 0.230E+2, 0.17149000E+1, + 0.00000000E+0, 0.33714360E+3, 0.127E+3, 0.240E+2, 0.17149000E+1, 0.00000000E+0, 0.36847190E+3, + 0.127E+3, 0.250E+2, 0.17149000E+1, 0.00000000E+0, 0.28919370E+3, 0.127E+3, 0.260E+2, + 0.17149000E+1, 0.00000000E+0, 0.30649680E+3, 0.127E+3, 0.270E+2, 0.17149000E+1, 0.00000000E+0, + 0.31577130E+3, 0.127E+3, 0.280E+2, 0.17149000E+1, 0.00000000E+0, 0.24210300E+3, 0.127E+3, + 0.290E+2, 0.17149000E+1, 0.00000000E+0, 0.24848550E+3, 0.127E+3, 0.300E+2, 0.17149000E+1, + 0.00000000E+0, 0.29424080E+3, 0.127E+3, 0.310E+2, 0.17149000E+1, 0.00000000E+0, 0.25932240E+3, + 0.127E+3, 0.320E+2, 0.17149000E+1, 0.00000000E+0, 0.22102330E+3, 0.127E+3, 0.330E+2, + 0.17149000E+1, 0.00000000E+0, 0.19822130E+3, 0.127E+3, 0.340E+2, 0.17149000E+1, 0.00000000E+0, + 0.17337930E+3, 0.127E+3, 0.350E+2, 0.17149000E+1, 0.00000000E+0, 0.15071900E+3, 0.127E+3, + 0.360E+2, 0.17149000E+1, 0.00000000E+0, 0.79588590E+3, 0.127E+3, 0.370E+2, 0.17149000E+1, + 0.00000000E+0, 0.69807620E+3, 0.127E+3, 0.380E+2, 0.17149000E+1, 0.00000000E+0, 0.61134030E+3, + 0.127E+3, 0.390E+2, 0.17149000E+1, 0.00000000E+0, 0.54932940E+3, 0.127E+3, 0.400E+2, + 0.17149000E+1, 0.00000000E+0, 0.50083550E+3, 0.127E+3, 0.410E+2, 0.17149000E+1, 0.00000000E+0, + 0.38652450E+3, 0.127E+3, 0.420E+2, 0.17149000E+1, 0.00000000E+0, 0.43134780E+3, 0.127E+3, + 0.430E+2, 0.17149000E+1, 0.00000000E+0, 0.32850150E+3, 0.127E+3, 0.440E+2, 0.17149000E+1, + 0.00000000E+0, 0.35910570E+3, 0.127E+3, 0.450E+2, 0.17149000E+1, 0.00000000E+0, 0.33298960E+3, + 0.127E+3, 0.460E+2, 0.17149000E+1, 0.00000000E+0, 0.27768230E+3, 0.127E+3, 0.470E+2, + 0.17149000E+1, 0.00000000E+0, 0.29340740E+3, 0.127E+3, 0.480E+2, 0.17149000E+1, 0.00000000E+0, + 0.36832240E+3, 0.127E+3, 0.490E+2, 0.17149000E+1, 0.00000000E+0, 0.34042650E+3, 0.127E+3, + 0.500E+2, 0.17149000E+1, 0.00000000E+0, 0.30318560E+3, 0.127E+3, 0.510E+2, 0.17149000E+1, + 0.00000000E+0, 0.28116330E+3, 0.127E+3, 0.520E+2, 0.17149000E+1, 0.00000000E+0, 0.25408770E+3, + 0.127E+3, 0.530E+2, 0.17149000E+1, 0.00000000E+0, 0.22832560E+3, 0.127E+3, 0.540E+2, + 0.17149000E+1, 0.00000000E+0, 0.96954620E+3, 0.127E+3, 0.550E+2, 0.17149000E+1, 0.00000000E+0, + 0.88993460E+3, 0.127E+3, 0.560E+2, 0.17149000E+1, 0.00000000E+0, 0.78163500E+3, 0.127E+3, + 0.570E+2, 0.17149000E+1, 0.00000000E+0, 0.35816770E+3, 0.127E+3, 0.580E+2, 0.17149000E+1, + 0.27991000E+1, 0.78858090E+3, 0.127E+3, 0.590E+2, 0.17149000E+1, 0.00000000E+0, 0.75717110E+3, + 0.127E+3, 0.600E+2, 0.17149000E+1, 0.00000000E+0, 0.73817480E+3, 0.127E+3, 0.610E+2, + 0.17149000E+1, 0.00000000E+0, 0.72070520E+3, 0.127E+3, 0.620E+2, 0.17149000E+1, 0.00000000E+0, + 0.70521290E+3, 0.127E+3, 0.630E+2, 0.17149000E+1, 0.00000000E+0, 0.55434620E+3, 0.127E+3, + 0.640E+2, 0.17149000E+1, 0.00000000E+0, 0.62444810E+3, 0.127E+3, 0.650E+2, 0.17149000E+1, + 0.00000000E+0, 0.60226720E+3, 0.127E+3, 0.660E+2, 0.17149000E+1, 0.00000000E+0, 0.63603570E+3, + 0.127E+3, 0.670E+2, 0.17149000E+1, 0.00000000E+0, 0.62253720E+3, 0.127E+3, 0.680E+2, + 0.17149000E+1, 0.00000000E+0, 0.61036000E+3, 0.127E+3, 0.690E+2, 0.17149000E+1, 0.00000000E+0, + 0.60323520E+3, 0.127E+3, 0.700E+2, 0.17149000E+1, 0.00000000E+0, 0.50816310E+3, 0.127E+3, + 0.710E+2, 0.17149000E+1, 0.00000000E+0, 0.49947010E+3, 0.127E+3, 0.720E+2, 0.17149000E+1, + 0.00000000E+0, 0.45568660E+3, 0.127E+3, 0.730E+2, 0.17149000E+1, 0.00000000E+0, 0.38467230E+3, + 0.127E+3, 0.740E+2, 0.17149000E+1, 0.00000000E+0, 0.39131100E+3, 0.127E+3, 0.750E+2, + 0.17149000E+1, 0.00000000E+0, 0.35455820E+3, 0.127E+3, 0.760E+2, 0.17149000E+1, 0.00000000E+0, + 0.32464910E+3, 0.127E+3, 0.770E+2, 0.17149000E+1, 0.00000000E+0, 0.26963380E+3, 0.127E+3, + 0.780E+2, 0.17149000E+1, 0.00000000E+0, 0.25191510E+3, 0.127E+3, 0.790E+2, 0.17149000E+1, + 0.00000000E+0, 0.25913820E+3, 0.127E+3, 0.800E+2, 0.17149000E+1, 0.00000000E+0, 0.37809130E+3, + 0.127E+3, 0.810E+2, 0.17149000E+1, 0.00000000E+0, 0.36955020E+3, 0.127E+3, 0.820E+2, + 0.17149000E+1, 0.00000000E+0, 0.33939390E+3, 0.127E+3, 0.830E+2, 0.17149000E+1, 0.00000000E+0, + 0.32357100E+3, 0.127E+3, 0.840E+2, 0.17149000E+1, 0.00000000E+0, 0.29847990E+3, 0.127E+3, + 0.850E+2, 0.17149000E+1, 0.00000000E+0, 0.27345010E+3, 0.127E+3, 0.860E+2, 0.17149000E+1, + 0.00000000E+0, 0.91516100E+3, 0.127E+3, 0.870E+2, 0.17149000E+1, 0.00000000E+0, 0.87983390E+3, + 0.127E+3, 0.880E+2, 0.17149000E+1, 0.00000000E+0, 0.77761650E+3, 0.127E+3, 0.890E+2, + 0.17149000E+1, 0.00000000E+0, 0.69856190E+3, 0.127E+3, 0.900E+2, 0.17149000E+1, 0.00000000E+0, + 0.69371430E+3, 0.127E+3, 0.910E+2, 0.17149000E+1, 0.00000000E+0, 0.67170070E+3, 0.127E+3, + 0.920E+2, 0.17149000E+1, 0.00000000E+0, 0.69179850E+3, 0.127E+3, 0.930E+2, 0.17149000E+1, + 0.00000000E+0, 0.66991580E+3, 0.127E+3, 0.940E+2, 0.17149000E+1, 0.00000000E+0, 0.37449600E+2, + 0.127E+3, 0.101E+3, 0.17149000E+1, 0.00000000E+0, 0.12160370E+3, 0.127E+3, 0.103E+3, + 0.17149000E+1, 0.98650000E+0, 0.15505540E+3, 0.127E+3, 0.104E+3, 0.17149000E+1, 0.98080000E+0, + 0.11835300E+3, 0.127E+3, 0.105E+3, 0.17149000E+1, 0.97060000E+0, 0.89099200E+2, 0.127E+3, + 0.106E+3, 0.17149000E+1, 0.98680000E+0, 0.61925600E+2, 0.127E+3, 0.107E+3, 0.17149000E+1, + 0.99440000E+0, 0.45100200E+2, 0.127E+3, 0.108E+3, 0.17149000E+1, 0.99250000E+0, 0.31051600E+2, + 0.127E+3, 0.109E+3, 0.17149000E+1, 0.99820000E+0, 0.17783550E+3, 0.127E+3, 0.111E+3, + 0.17149000E+1, 0.96840000E+0, 0.27498400E+3, 0.127E+3, 0.112E+3, 0.17149000E+1, 0.96280000E+0, + 0.27841730E+3, 0.127E+3, 0.113E+3, 0.17149000E+1, 0.96480000E+0, 0.22355480E+3, 0.127E+3, + 0.114E+3, 0.17149000E+1, 0.95070000E+0, 0.18295110E+3, 0.127E+3, 0.115E+3, 0.17149000E+1, + 0.99470000E+0, 0.15462430E+3, 0.127E+3, 0.116E+3, 0.17149000E+1, 0.99480000E+0, 0.12633190E+3, + 0.127E+3, 0.117E+3, 0.17149000E+1, 0.99720000E+0, 0.24501880E+3, 0.127E+3, 0.119E+3, + 0.17149000E+1, 0.97670000E+0, 0.46868990E+3, 0.127E+3, 0.120E+3, 0.17149000E+1, 0.98310000E+0, + 0.24500350E+3, 0.127E+3, 0.121E+3, 0.17149000E+1, 0.18627000E+1, 0.23653250E+3, 0.127E+3, + 0.122E+3, 0.17149000E+1, 0.18299000E+1, 0.23181800E+3, 0.127E+3, 0.123E+3, 0.17149000E+1, + 0.19138000E+1, 0.22970220E+3, 0.127E+3, 0.124E+3, 0.17149000E+1, 0.18269000E+1, 0.21130250E+3, + 0.127E+3, 0.125E+3, 0.17149000E+1, 0.16406000E+1, 0.19554300E+3, 0.127E+3, 0.126E+3, + 0.17149000E+1, 0.16483000E+1, 0.18654620E+3, 0.127E+3, 0.127E+3, 0.17149000E+1, 0.17149000E+1, + 0.22682200E+2, 0.128E+3, 0.100E+1, 0.17937000E+1, 0.91180000E+0, 0.14983300E+2, 0.128E+3, + 0.200E+1, 0.17937000E+1, 0.00000000E+0, 0.35596060E+3, 0.128E+3, 0.300E+1, 0.17937000E+1, + 0.00000000E+0, 0.20490860E+3, 0.128E+3, 0.400E+1, 0.17937000E+1, 0.00000000E+0, 0.13762540E+3, + 0.128E+3, 0.500E+1, 0.17937000E+1, 0.00000000E+0, 0.92810700E+2, 0.128E+3, 0.600E+1, + 0.17937000E+1, 0.00000000E+0, 0.64851900E+2, 0.128E+3, 0.700E+1, 0.17937000E+1, 0.00000000E+0, + 0.49099600E+2, 0.128E+3, 0.800E+1, 0.17937000E+1, 0.00000000E+0, 0.37215800E+2, 0.128E+3, + 0.900E+1, 0.17937000E+1, 0.00000000E+0, 0.28655400E+2, 0.128E+3, 0.100E+2, 0.17937000E+1, + 0.00000000E+0, 0.42564550E+3, 0.128E+3, 0.110E+2, 0.17937000E+1, 0.00000000E+0, 0.32678640E+3, + 0.128E+3, 0.120E+2, 0.17937000E+1, 0.00000000E+0, 0.30082710E+3, 0.128E+3, 0.130E+2, + 0.17937000E+1, 0.00000000E+0, 0.23659520E+3, 0.128E+3, 0.140E+2, 0.17937000E+1, 0.00000000E+0, + 0.18418470E+3, 0.128E+3, 0.150E+2, 0.17937000E+1, 0.00000000E+0, 0.15270360E+3, 0.128E+3, + 0.160E+2, 0.17937000E+1, 0.00000000E+0, 0.12463170E+3, 0.128E+3, 0.170E+2, 0.17937000E+1, + 0.00000000E+0, 0.10191160E+3, 0.128E+3, 0.180E+2, 0.17937000E+1, 0.00000000E+0, 0.69776500E+3, + 0.128E+3, 0.190E+2, 0.17937000E+1, 0.00000000E+0, 0.57475220E+3, 0.128E+3, 0.200E+2, + 0.17937000E+1, 0.00000000E+0, 0.47462540E+3, 0.128E+3, 0.210E+2, 0.17937000E+1, 0.00000000E+0, + 0.45811360E+3, 0.128E+3, 0.220E+2, 0.17937000E+1, 0.00000000E+0, 0.41940370E+3, 0.128E+3, + 0.230E+2, 0.17937000E+1, 0.00000000E+0, 0.33038080E+3, 0.128E+3, 0.240E+2, 0.17937000E+1, + 0.00000000E+0, 0.36096920E+3, 0.128E+3, 0.250E+2, 0.17937000E+1, 0.00000000E+0, 0.28330110E+3, + 0.128E+3, 0.260E+2, 0.17937000E+1, 0.00000000E+0, 0.30010550E+3, 0.128E+3, 0.270E+2, + 0.17937000E+1, 0.00000000E+0, 0.30925430E+3, 0.128E+3, 0.280E+2, 0.17937000E+1, 0.00000000E+0, + 0.23712000E+3, 0.128E+3, 0.290E+2, 0.17937000E+1, 0.00000000E+0, 0.24319600E+3, 0.128E+3, + 0.300E+2, 0.17937000E+1, 0.00000000E+0, 0.28800730E+3, 0.128E+3, 0.310E+2, 0.17937000E+1, + 0.00000000E+0, 0.25361340E+3, 0.128E+3, 0.320E+2, 0.17937000E+1, 0.00000000E+0, 0.21600430E+3, + 0.128E+3, 0.330E+2, 0.17937000E+1, 0.00000000E+0, 0.19364320E+3, 0.128E+3, 0.340E+2, + 0.17937000E+1, 0.00000000E+0, 0.16931330E+3, 0.128E+3, 0.350E+2, 0.17937000E+1, 0.00000000E+0, + 0.14714170E+3, 0.128E+3, 0.360E+2, 0.17937000E+1, 0.00000000E+0, 0.78184410E+3, 0.128E+3, + 0.370E+2, 0.17937000E+1, 0.00000000E+0, 0.68477150E+3, 0.128E+3, 0.380E+2, 0.17937000E+1, + 0.00000000E+0, 0.59926520E+3, 0.128E+3, 0.390E+2, 0.17937000E+1, 0.00000000E+0, 0.53824800E+3, + 0.128E+3, 0.400E+2, 0.17937000E+1, 0.00000000E+0, 0.49059730E+3, 0.128E+3, 0.410E+2, + 0.17937000E+1, 0.00000000E+0, 0.37845940E+3, 0.128E+3, 0.420E+2, 0.17937000E+1, 0.00000000E+0, + 0.42241440E+3, 0.128E+3, 0.430E+2, 0.17937000E+1, 0.00000000E+0, 0.32155060E+3, 0.128E+3, + 0.440E+2, 0.17937000E+1, 0.00000000E+0, 0.35149860E+3, 0.128E+3, 0.450E+2, 0.17937000E+1, + 0.00000000E+0, 0.32588580E+3, 0.128E+3, 0.460E+2, 0.17937000E+1, 0.00000000E+0, 0.27180880E+3, + 0.128E+3, 0.470E+2, 0.17937000E+1, 0.00000000E+0, 0.28709580E+3, 0.128E+3, 0.480E+2, + 0.17937000E+1, 0.00000000E+0, 0.36057310E+3, 0.128E+3, 0.490E+2, 0.17937000E+1, 0.00000000E+0, + 0.33303010E+3, 0.128E+3, 0.500E+2, 0.17937000E+1, 0.00000000E+0, 0.29640640E+3, 0.128E+3, + 0.510E+2, 0.17937000E+1, 0.00000000E+0, 0.27477510E+3, 0.128E+3, 0.520E+2, 0.17937000E+1, + 0.00000000E+0, 0.24822370E+3, 0.128E+3, 0.530E+2, 0.17937000E+1, 0.00000000E+0, 0.22298560E+3, + 0.128E+3, 0.540E+2, 0.17937000E+1, 0.00000000E+0, 0.95234010E+3, 0.128E+3, 0.550E+2, + 0.17937000E+1, 0.00000000E+0, 0.87316220E+3, 0.128E+3, 0.560E+2, 0.17937000E+1, 0.00000000E+0, + 0.76636770E+3, 0.128E+3, 0.570E+2, 0.17937000E+1, 0.00000000E+0, 0.35020540E+3, 0.128E+3, + 0.580E+2, 0.17937000E+1, 0.27991000E+1, 0.77355490E+3, 0.128E+3, 0.590E+2, 0.17937000E+1, + 0.00000000E+0, 0.74267570E+3, 0.128E+3, 0.600E+2, 0.17937000E+1, 0.00000000E+0, 0.72402070E+3, + 0.128E+3, 0.610E+2, 0.17937000E+1, 0.00000000E+0, 0.70686710E+3, 0.128E+3, 0.620E+2, + 0.17937000E+1, 0.00000000E+0, 0.69165380E+3, 0.128E+3, 0.630E+2, 0.17937000E+1, 0.00000000E+0, + 0.54327420E+3, 0.128E+3, 0.640E+2, 0.17937000E+1, 0.00000000E+0, 0.61263290E+3, 0.128E+3, + 0.650E+2, 0.17937000E+1, 0.00000000E+0, 0.59076940E+3, 0.128E+3, 0.660E+2, 0.17937000E+1, + 0.00000000E+0, 0.62369960E+3, 0.128E+3, 0.670E+2, 0.17937000E+1, 0.00000000E+0, 0.61045110E+3, + 0.128E+3, 0.680E+2, 0.17937000E+1, 0.00000000E+0, 0.59849350E+3, 0.128E+3, 0.690E+2, + 0.17937000E+1, 0.00000000E+0, 0.59152550E+3, 0.128E+3, 0.700E+2, 0.17937000E+1, 0.00000000E+0, + 0.49802530E+3, 0.128E+3, 0.710E+2, 0.17937000E+1, 0.00000000E+0, 0.48915250E+3, 0.128E+3, + 0.720E+2, 0.17937000E+1, 0.00000000E+0, 0.44609160E+3, 0.128E+3, 0.730E+2, 0.17937000E+1, + 0.00000000E+0, 0.37646650E+3, 0.128E+3, 0.740E+2, 0.17937000E+1, 0.00000000E+0, 0.38290120E+3, + 0.128E+3, 0.750E+2, 0.17937000E+1, 0.00000000E+0, 0.34682510E+3, 0.128E+3, 0.760E+2, + 0.17937000E+1, 0.00000000E+0, 0.31748840E+3, 0.128E+3, 0.770E+2, 0.17937000E+1, 0.00000000E+0, + 0.26363220E+3, 0.128E+3, 0.780E+2, 0.17937000E+1, 0.00000000E+0, 0.24629020E+3, 0.128E+3, + 0.790E+2, 0.17937000E+1, 0.00000000E+0, 0.25331490E+3, 0.128E+3, 0.800E+2, 0.17937000E+1, + 0.00000000E+0, 0.37009330E+3, 0.128E+3, 0.810E+2, 0.17937000E+1, 0.00000000E+0, 0.36153570E+3, + 0.128E+3, 0.820E+2, 0.17937000E+1, 0.00000000E+0, 0.33183930E+3, 0.128E+3, 0.830E+2, + 0.17937000E+1, 0.00000000E+0, 0.31626530E+3, 0.128E+3, 0.840E+2, 0.17937000E+1, 0.00000000E+0, + 0.29163450E+3, 0.128E+3, 0.850E+2, 0.17937000E+1, 0.00000000E+0, 0.26709740E+3, 0.128E+3, + 0.860E+2, 0.17937000E+1, 0.00000000E+0, 0.89847060E+3, 0.128E+3, 0.870E+2, 0.17937000E+1, + 0.00000000E+0, 0.86294020E+3, 0.128E+3, 0.880E+2, 0.17937000E+1, 0.00000000E+0, 0.76220730E+3, + 0.128E+3, 0.890E+2, 0.17937000E+1, 0.00000000E+0, 0.68424210E+3, 0.128E+3, 0.900E+2, + 0.17937000E+1, 0.00000000E+0, 0.67974920E+3, 0.128E+3, 0.910E+2, 0.17937000E+1, 0.00000000E+0, + 0.65817270E+3, 0.128E+3, 0.920E+2, 0.17937000E+1, 0.00000000E+0, 0.67818560E+3, 0.128E+3, + 0.930E+2, 0.17937000E+1, 0.00000000E+0, 0.65668000E+3, 0.128E+3, 0.940E+2, 0.17937000E+1, + 0.00000000E+0, 0.36590100E+2, 0.128E+3, 0.101E+3, 0.17937000E+1, 0.00000000E+0, 0.11907250E+3, + 0.128E+3, 0.103E+3, 0.17937000E+1, 0.98650000E+0, 0.15177980E+3, 0.128E+3, 0.104E+3, + 0.17937000E+1, 0.98080000E+0, 0.11570000E+3, 0.128E+3, 0.105E+3, 0.17937000E+1, 0.97060000E+0, + 0.87043200E+2, 0.128E+3, 0.106E+3, 0.17937000E+1, 0.98680000E+0, 0.60460800E+2, 0.128E+3, + 0.107E+3, 0.17937000E+1, 0.99440000E+0, 0.44017300E+2, 0.128E+3, 0.108E+3, 0.17937000E+1, + 0.99250000E+0, 0.30300400E+2, 0.128E+3, 0.109E+3, 0.17937000E+1, 0.99820000E+0, 0.17420010E+3, + 0.128E+3, 0.111E+3, 0.17937000E+1, 0.96840000E+0, 0.26937790E+3, 0.128E+3, 0.112E+3, + 0.17937000E+1, 0.96280000E+0, 0.27254090E+3, 0.128E+3, 0.113E+3, 0.17937000E+1, 0.96480000E+0, + 0.21860660E+3, 0.128E+3, 0.114E+3, 0.17937000E+1, 0.95070000E+0, 0.17877350E+3, 0.128E+3, + 0.115E+3, 0.17937000E+1, 0.99470000E+0, 0.15102860E+3, 0.128E+3, 0.116E+3, 0.17937000E+1, + 0.99480000E+0, 0.12334570E+3, 0.128E+3, 0.117E+3, 0.17937000E+1, 0.99720000E+0, 0.23988490E+3, + 0.128E+3, 0.119E+3, 0.17937000E+1, 0.97670000E+0, 0.45968120E+3, 0.128E+3, 0.120E+3, + 0.17937000E+1, 0.98310000E+0, 0.23965630E+3, 0.128E+3, 0.121E+3, 0.17937000E+1, 0.18627000E+1, + 0.23136310E+3, 0.128E+3, 0.122E+3, 0.17937000E+1, 0.18299000E+1, 0.22676010E+3, 0.128E+3, + 0.123E+3, 0.17937000E+1, 0.19138000E+1, 0.22471760E+3, 0.128E+3, 0.124E+3, 0.17937000E+1, + 0.18269000E+1, 0.20661260E+3, 0.128E+3, 0.125E+3, 0.17937000E+1, 0.16406000E+1, 0.19117980E+3, + 0.128E+3, 0.126E+3, 0.17937000E+1, 0.16483000E+1, 0.18238760E+3, 0.128E+3, 0.127E+3, + 0.17937000E+1, 0.17149000E+1, 0.17833110E+3, 0.128E+3, 0.128E+3, 0.17937000E+1, 0.17937000E+1, + 0.22155000E+2, 0.129E+3, 0.100E+1, 0.95760000E+0, 0.91180000E+0, 0.14514700E+2, 0.129E+3, + 0.200E+1, 0.95760000E+0, 0.00000000E+0, 0.36743080E+3, 0.129E+3, 0.300E+1, 0.95760000E+0, + 0.00000000E+0, 0.20593130E+3, 0.129E+3, 0.400E+1, 0.95760000E+0, 0.00000000E+0, 0.13637050E+3, + 0.129E+3, 0.500E+1, 0.95760000E+0, 0.00000000E+0, 0.91102500E+2, 0.129E+3, 0.600E+1, + 0.95760000E+0, 0.00000000E+0, 0.63270900E+2, 0.129E+3, 0.700E+1, 0.95760000E+0, 0.00000000E+0, + 0.47723900E+2, 0.129E+3, 0.800E+1, 0.95760000E+0, 0.00000000E+0, 0.36074900E+2, 0.129E+3, + 0.900E+1, 0.95760000E+0, 0.00000000E+0, 0.27728200E+2, 0.129E+3, 0.100E+2, 0.95760000E+0, + 0.00000000E+0, 0.43871980E+3, 0.129E+3, 0.110E+2, 0.95760000E+0, 0.00000000E+0, 0.33000180E+3, + 0.129E+3, 0.120E+2, 0.95760000E+0, 0.00000000E+0, 0.30146500E+3, 0.129E+3, 0.130E+2, + 0.95760000E+0, 0.00000000E+0, 0.23475480E+3, 0.129E+3, 0.140E+2, 0.95760000E+0, 0.00000000E+0, + 0.18132670E+3, 0.129E+3, 0.150E+2, 0.95760000E+0, 0.00000000E+0, 0.14964210E+3, 0.129E+3, + 0.160E+2, 0.95760000E+0, 0.00000000E+0, 0.12163290E+3, 0.129E+3, 0.170E+2, 0.95760000E+0, + 0.00000000E+0, 0.99139800E+2, 0.129E+3, 0.180E+2, 0.95760000E+0, 0.00000000E+0, 0.72200020E+3, + 0.129E+3, 0.190E+2, 0.95760000E+0, 0.00000000E+0, 0.58537040E+3, 0.129E+3, 0.200E+2, + 0.95760000E+0, 0.00000000E+0, 0.48164720E+3, 0.129E+3, 0.210E+2, 0.95760000E+0, 0.00000000E+0, + 0.46339240E+3, 0.129E+3, 0.220E+2, 0.95760000E+0, 0.00000000E+0, 0.42341930E+3, 0.129E+3, + 0.230E+2, 0.95760000E+0, 0.00000000E+0, 0.33350140E+3, 0.129E+3, 0.240E+2, 0.95760000E+0, + 0.00000000E+0, 0.36341710E+3, 0.129E+3, 0.250E+2, 0.95760000E+0, 0.00000000E+0, 0.28510180E+3, + 0.129E+3, 0.260E+2, 0.95760000E+0, 0.00000000E+0, 0.30073560E+3, 0.129E+3, 0.270E+2, + 0.95760000E+0, 0.00000000E+0, 0.31051330E+3, 0.129E+3, 0.280E+2, 0.95760000E+0, 0.00000000E+0, + 0.23812070E+3, 0.129E+3, 0.290E+2, 0.95760000E+0, 0.00000000E+0, 0.24268930E+3, 0.129E+3, + 0.300E+2, 0.95760000E+0, 0.00000000E+0, 0.28785200E+3, 0.129E+3, 0.310E+2, 0.95760000E+0, + 0.00000000E+0, 0.25153860E+3, 0.129E+3, 0.320E+2, 0.95760000E+0, 0.00000000E+0, 0.21283460E+3, + 0.129E+3, 0.330E+2, 0.95760000E+0, 0.00000000E+0, 0.19007710E+3, 0.129E+3, 0.340E+2, + 0.95760000E+0, 0.00000000E+0, 0.16558600E+3, 0.129E+3, 0.350E+2, 0.95760000E+0, 0.00000000E+0, + 0.14345250E+3, 0.129E+3, 0.360E+2, 0.95760000E+0, 0.00000000E+0, 0.80787860E+3, 0.129E+3, + 0.370E+2, 0.95760000E+0, 0.00000000E+0, 0.69786230E+3, 0.129E+3, 0.380E+2, 0.95760000E+0, + 0.00000000E+0, 0.60685850E+3, 0.129E+3, 0.390E+2, 0.95760000E+0, 0.00000000E+0, 0.54294990E+3, + 0.129E+3, 0.400E+2, 0.95760000E+0, 0.00000000E+0, 0.49363630E+3, 0.129E+3, 0.410E+2, + 0.95760000E+0, 0.00000000E+0, 0.37922990E+3, 0.129E+3, 0.420E+2, 0.95760000E+0, 0.00000000E+0, + 0.42391540E+3, 0.129E+3, 0.430E+2, 0.95760000E+0, 0.00000000E+0, 0.32125020E+3, 0.129E+3, + 0.440E+2, 0.95760000E+0, 0.00000000E+0, 0.35112220E+3, 0.129E+3, 0.450E+2, 0.95760000E+0, + 0.00000000E+0, 0.32504660E+3, 0.129E+3, 0.460E+2, 0.95760000E+0, 0.00000000E+0, 0.27146340E+3, + 0.129E+3, 0.470E+2, 0.95760000E+0, 0.00000000E+0, 0.28581800E+3, 0.129E+3, 0.480E+2, + 0.95760000E+0, 0.00000000E+0, 0.36066260E+3, 0.129E+3, 0.490E+2, 0.95760000E+0, 0.00000000E+0, + 0.33100630E+3, 0.129E+3, 0.500E+2, 0.95760000E+0, 0.00000000E+0, 0.29285890E+3, 0.129E+3, + 0.510E+2, 0.95760000E+0, 0.00000000E+0, 0.27055260E+3, 0.129E+3, 0.520E+2, 0.95760000E+0, + 0.00000000E+0, 0.24354750E+3, 0.129E+3, 0.530E+2, 0.95760000E+0, 0.00000000E+0, 0.21809290E+3, + 0.129E+3, 0.540E+2, 0.95760000E+0, 0.00000000E+0, 0.98359160E+3, 0.129E+3, 0.550E+2, + 0.95760000E+0, 0.00000000E+0, 0.89168850E+3, 0.129E+3, 0.560E+2, 0.95760000E+0, 0.00000000E+0, + 0.77770700E+3, 0.129E+3, 0.570E+2, 0.95760000E+0, 0.00000000E+0, 0.34643740E+3, 0.129E+3, + 0.580E+2, 0.95760000E+0, 0.27991000E+1, 0.78837610E+3, 0.129E+3, 0.590E+2, 0.95760000E+0, + 0.00000000E+0, 0.75615770E+3, 0.129E+3, 0.600E+2, 0.95760000E+0, 0.00000000E+0, 0.73695090E+3, + 0.129E+3, 0.610E+2, 0.95760000E+0, 0.00000000E+0, 0.71931180E+3, 0.129E+3, 0.620E+2, + 0.95760000E+0, 0.00000000E+0, 0.70365920E+3, 0.129E+3, 0.630E+2, 0.95760000E+0, 0.00000000E+0, + 0.54891190E+3, 0.129E+3, 0.640E+2, 0.95760000E+0, 0.00000000E+0, 0.62523960E+3, 0.129E+3, + 0.650E+2, 0.95760000E+0, 0.00000000E+0, 0.60214160E+3, 0.129E+3, 0.660E+2, 0.95760000E+0, + 0.00000000E+0, 0.63352600E+3, 0.129E+3, 0.670E+2, 0.95760000E+0, 0.00000000E+0, 0.61995970E+3, + 0.129E+3, 0.680E+2, 0.95760000E+0, 0.00000000E+0, 0.60766330E+3, 0.129E+3, 0.690E+2, + 0.95760000E+0, 0.00000000E+0, 0.60075720E+3, 0.129E+3, 0.700E+2, 0.95760000E+0, 0.00000000E+0, + 0.50338410E+3, 0.129E+3, 0.710E+2, 0.95760000E+0, 0.00000000E+0, 0.49122120E+3, 0.129E+3, + 0.720E+2, 0.95760000E+0, 0.00000000E+0, 0.44629550E+3, 0.129E+3, 0.730E+2, 0.95760000E+0, + 0.00000000E+0, 0.37560840E+3, 0.129E+3, 0.740E+2, 0.95760000E+0, 0.00000000E+0, 0.38145840E+3, + 0.129E+3, 0.750E+2, 0.95760000E+0, 0.00000000E+0, 0.34444290E+3, 0.129E+3, 0.760E+2, + 0.95760000E+0, 0.00000000E+0, 0.31453250E+3, 0.129E+3, 0.770E+2, 0.95760000E+0, 0.00000000E+0, + 0.26057850E+3, 0.129E+3, 0.780E+2, 0.95760000E+0, 0.00000000E+0, 0.24322040E+3, 0.129E+3, + 0.790E+2, 0.95760000E+0, 0.00000000E+0, 0.24982310E+3, 0.129E+3, 0.800E+2, 0.95760000E+0, + 0.00000000E+0, 0.36971340E+3, 0.129E+3, 0.810E+2, 0.95760000E+0, 0.00000000E+0, 0.35938220E+3, + 0.129E+3, 0.820E+2, 0.95760000E+0, 0.00000000E+0, 0.32809610E+3, 0.129E+3, 0.830E+2, + 0.95760000E+0, 0.00000000E+0, 0.31175430E+3, 0.129E+3, 0.840E+2, 0.95760000E+0, 0.00000000E+0, + 0.28648030E+3, 0.129E+3, 0.850E+2, 0.95760000E+0, 0.00000000E+0, 0.26159230E+3, 0.129E+3, + 0.860E+2, 0.95760000E+0, 0.00000000E+0, 0.92344480E+3, 0.129E+3, 0.870E+2, 0.95760000E+0, + 0.00000000E+0, 0.87838880E+3, 0.129E+3, 0.880E+2, 0.95760000E+0, 0.00000000E+0, 0.77137100E+3, + 0.129E+3, 0.890E+2, 0.95760000E+0, 0.00000000E+0, 0.68798510E+3, 0.129E+3, 0.900E+2, + 0.95760000E+0, 0.00000000E+0, 0.68576140E+3, 0.129E+3, 0.910E+2, 0.95760000E+0, 0.00000000E+0, + 0.66390850E+3, 0.129E+3, 0.920E+2, 0.95760000E+0, 0.00000000E+0, 0.68694090E+3, 0.129E+3, + 0.930E+2, 0.95760000E+0, 0.00000000E+0, 0.66465810E+3, 0.129E+3, 0.940E+2, 0.95760000E+0, + 0.00000000E+0, 0.35987100E+2, 0.129E+3, 0.101E+3, 0.95760000E+0, 0.00000000E+0, 0.11943970E+3, + 0.129E+3, 0.103E+3, 0.95760000E+0, 0.98650000E+0, 0.15184260E+3, 0.129E+3, 0.104E+3, + 0.95760000E+0, 0.98080000E+0, 0.11434660E+3, 0.129E+3, 0.105E+3, 0.95760000E+0, 0.97060000E+0, + 0.85473100E+2, 0.129E+3, 0.106E+3, 0.95760000E+0, 0.98680000E+0, 0.58990300E+2, 0.129E+3, + 0.107E+3, 0.95760000E+0, 0.99440000E+0, 0.42745800E+2, 0.129E+3, 0.108E+3, 0.95760000E+0, + 0.99250000E+0, 0.29280800E+2, 0.129E+3, 0.109E+3, 0.95760000E+0, 0.99820000E+0, 0.17525310E+3, + 0.129E+3, 0.111E+3, 0.95760000E+0, 0.96840000E+0, 0.27127550E+3, 0.129E+3, 0.112E+3, + 0.95760000E+0, 0.96280000E+0, 0.27263840E+3, 0.129E+3, 0.113E+3, 0.95760000E+0, 0.96480000E+0, + 0.21661540E+3, 0.129E+3, 0.114E+3, 0.95760000E+0, 0.95070000E+0, 0.17596280E+3, 0.129E+3, + 0.115E+3, 0.95760000E+0, 0.99470000E+0, 0.14802440E+3, 0.129E+3, 0.116E+3, 0.95760000E+0, + 0.99480000E+0, 0.12039270E+3, 0.129E+3, 0.117E+3, 0.95760000E+0, 0.99720000E+0, 0.24017910E+3, + 0.129E+3, 0.119E+3, 0.95760000E+0, 0.97670000E+0, 0.46791560E+3, 0.129E+3, 0.120E+3, + 0.95760000E+0, 0.98310000E+0, 0.23801280E+3, 0.129E+3, 0.121E+3, 0.95760000E+0, 0.18627000E+1, + 0.22972260E+3, 0.129E+3, 0.122E+3, 0.95760000E+0, 0.18299000E+1, 0.22520200E+3, 0.129E+3, + 0.123E+3, 0.95760000E+0, 0.19138000E+1, 0.22340090E+3, 0.129E+3, 0.124E+3, 0.95760000E+0, + 0.18269000E+1, 0.20444800E+3, 0.129E+3, 0.125E+3, 0.95760000E+0, 0.16406000E+1, 0.18894450E+3, + 0.129E+3, 0.126E+3, 0.95760000E+0, 0.16483000E+1, 0.18027190E+3, 0.129E+3, 0.127E+3, + 0.95760000E+0, 0.17149000E+1, 0.17633580E+3, 0.129E+3, 0.128E+3, 0.95760000E+0, 0.17937000E+1, + 0.17499690E+3, 0.129E+3, 0.129E+3, 0.95760000E+0, 0.95760000E+0, 0.21213900E+2, 0.130E+3, + 0.100E+1, 0.19419000E+1, 0.91180000E+0, 0.14118500E+2, 0.130E+3, 0.200E+1, 0.19419000E+1, + 0.00000000E+0, 0.31788260E+3, 0.130E+3, 0.300E+1, 0.19419000E+1, 0.00000000E+0, 0.18730120E+3, + 0.130E+3, 0.400E+1, 0.19419000E+1, 0.00000000E+0, 0.12724880E+3, 0.130E+3, 0.500E+1, + 0.19419000E+1, 0.00000000E+0, 0.86470900E+2, 0.130E+3, 0.600E+1, 0.19419000E+1, 0.00000000E+0, + 0.60733100E+2, 0.130E+3, 0.700E+1, 0.19419000E+1, 0.00000000E+0, 0.46135500E+2, 0.130E+3, + 0.800E+1, 0.19419000E+1, 0.00000000E+0, 0.35062900E+2, 0.130E+3, 0.900E+1, 0.19419000E+1, + 0.00000000E+0, 0.27052400E+2, 0.130E+3, 0.100E+2, 0.19419000E+1, 0.00000000E+0, 0.38065680E+3, + 0.130E+3, 0.110E+2, 0.19419000E+1, 0.00000000E+0, 0.29754400E+3, 0.130E+3, 0.120E+2, + 0.19419000E+1, 0.00000000E+0, 0.27562990E+3, 0.130E+3, 0.130E+2, 0.19419000E+1, 0.00000000E+0, + 0.21852820E+3, 0.130E+3, 0.140E+2, 0.19419000E+1, 0.00000000E+0, 0.17118890E+3, 0.130E+3, + 0.150E+2, 0.19419000E+1, 0.00000000E+0, 0.14245910E+3, 0.130E+3, 0.160E+2, 0.19419000E+1, + 0.00000000E+0, 0.11666370E+3, 0.130E+3, 0.170E+2, 0.19419000E+1, 0.00000000E+0, 0.95658600E+2, + 0.130E+3, 0.180E+2, 0.19419000E+1, 0.00000000E+0, 0.62148410E+3, 0.130E+3, 0.190E+2, + 0.19419000E+1, 0.00000000E+0, 0.51951820E+3, 0.130E+3, 0.200E+2, 0.19419000E+1, 0.00000000E+0, + 0.43036750E+3, 0.130E+3, 0.210E+2, 0.19419000E+1, 0.00000000E+0, 0.41653280E+3, 0.130E+3, + 0.220E+2, 0.19419000E+1, 0.00000000E+0, 0.38196290E+3, 0.130E+3, 0.230E+2, 0.19419000E+1, + 0.00000000E+0, 0.30093230E+3, 0.130E+3, 0.240E+2, 0.19419000E+1, 0.00000000E+0, 0.32951960E+3, + 0.130E+3, 0.250E+2, 0.19419000E+1, 0.00000000E+0, 0.25872900E+3, 0.130E+3, 0.260E+2, + 0.19419000E+1, 0.00000000E+0, 0.27503810E+3, 0.130E+3, 0.270E+2, 0.19419000E+1, 0.00000000E+0, + 0.28296560E+3, 0.130E+3, 0.280E+2, 0.19419000E+1, 0.00000000E+0, 0.21695700E+3, 0.130E+3, + 0.290E+2, 0.19419000E+1, 0.00000000E+0, 0.22366220E+3, 0.130E+3, 0.300E+2, 0.19419000E+1, + 0.00000000E+0, 0.26447240E+3, 0.130E+3, 0.310E+2, 0.19419000E+1, 0.00000000E+0, 0.23434070E+3, + 0.130E+3, 0.320E+2, 0.19419000E+1, 0.00000000E+0, 0.20064080E+3, 0.130E+3, 0.330E+2, + 0.19419000E+1, 0.00000000E+0, 0.18041890E+3, 0.130E+3, 0.340E+2, 0.19419000E+1, 0.00000000E+0, + 0.15822130E+3, 0.130E+3, 0.350E+2, 0.19419000E+1, 0.00000000E+0, 0.13785900E+3, 0.130E+3, + 0.360E+2, 0.19419000E+1, 0.00000000E+0, 0.69720120E+3, 0.130E+3, 0.370E+2, 0.19419000E+1, + 0.00000000E+0, 0.61859280E+3, 0.130E+3, 0.380E+2, 0.19419000E+1, 0.00000000E+0, 0.54431400E+3, + 0.130E+3, 0.390E+2, 0.19419000E+1, 0.00000000E+0, 0.49050970E+3, 0.130E+3, 0.400E+2, + 0.19419000E+1, 0.00000000E+0, 0.44803280E+3, 0.130E+3, 0.410E+2, 0.19419000E+1, 0.00000000E+0, + 0.34683870E+3, 0.130E+3, 0.420E+2, 0.19419000E+1, 0.00000000E+0, 0.38662560E+3, 0.130E+3, + 0.430E+2, 0.19419000E+1, 0.00000000E+0, 0.29543070E+3, 0.130E+3, 0.440E+2, 0.19419000E+1, + 0.00000000E+0, 0.32298310E+3, 0.130E+3, 0.450E+2, 0.19419000E+1, 0.00000000E+0, 0.29983170E+3, + 0.130E+3, 0.460E+2, 0.19419000E+1, 0.00000000E+0, 0.24983480E+3, 0.130E+3, 0.470E+2, + 0.19419000E+1, 0.00000000E+0, 0.26457160E+3, 0.130E+3, 0.480E+2, 0.19419000E+1, 0.00000000E+0, + 0.33095850E+3, 0.130E+3, 0.490E+2, 0.19419000E+1, 0.00000000E+0, 0.30726350E+3, 0.130E+3, + 0.500E+2, 0.19419000E+1, 0.00000000E+0, 0.27478160E+3, 0.130E+3, 0.510E+2, 0.19419000E+1, + 0.00000000E+0, 0.25542890E+3, 0.130E+3, 0.520E+2, 0.19419000E+1, 0.00000000E+0, 0.23140060E+3, + 0.130E+3, 0.530E+2, 0.19419000E+1, 0.00000000E+0, 0.20840550E+3, 0.130E+3, 0.540E+2, + 0.19419000E+1, 0.00000000E+0, 0.84934460E+3, 0.130E+3, 0.550E+2, 0.19419000E+1, 0.00000000E+0, + 0.78727710E+3, 0.130E+3, 0.560E+2, 0.19419000E+1, 0.00000000E+0, 0.69479590E+3, 0.130E+3, + 0.570E+2, 0.19419000E+1, 0.00000000E+0, 0.32433650E+3, 0.130E+3, 0.580E+2, 0.19419000E+1, + 0.27991000E+1, 0.69872430E+3, 0.130E+3, 0.590E+2, 0.19419000E+1, 0.00000000E+0, 0.67147320E+3, + 0.130E+3, 0.600E+2, 0.19419000E+1, 0.00000000E+0, 0.65477760E+3, 0.130E+3, 0.610E+2, + 0.19419000E+1, 0.00000000E+0, 0.63940750E+3, 0.130E+3, 0.620E+2, 0.19419000E+1, 0.00000000E+0, + 0.62578200E+3, 0.130E+3, 0.630E+2, 0.19419000E+1, 0.00000000E+0, 0.49442430E+3, 0.130E+3, + 0.640E+2, 0.19419000E+1, 0.00000000E+0, 0.55258030E+3, 0.130E+3, 0.650E+2, 0.19419000E+1, + 0.00000000E+0, 0.53339380E+3, 0.130E+3, 0.660E+2, 0.19419000E+1, 0.00000000E+0, 0.56508580E+3, + 0.130E+3, 0.670E+2, 0.19419000E+1, 0.00000000E+0, 0.55316870E+3, 0.130E+3, 0.680E+2, + 0.19419000E+1, 0.00000000E+0, 0.54245160E+3, 0.130E+3, 0.690E+2, 0.19419000E+1, 0.00000000E+0, + 0.53600770E+3, 0.130E+3, 0.700E+2, 0.19419000E+1, 0.00000000E+0, 0.45307620E+3, 0.130E+3, + 0.710E+2, 0.19419000E+1, 0.00000000E+0, 0.44744320E+3, 0.130E+3, 0.720E+2, 0.19419000E+1, + 0.00000000E+0, 0.40933690E+3, 0.130E+3, 0.730E+2, 0.19419000E+1, 0.00000000E+0, 0.34623600E+3, + 0.130E+3, 0.740E+2, 0.19419000E+1, 0.00000000E+0, 0.35258880E+3, 0.130E+3, 0.750E+2, + 0.19419000E+1, 0.00000000E+0, 0.32019590E+3, 0.130E+3, 0.760E+2, 0.19419000E+1, 0.00000000E+0, + 0.29371130E+3, 0.130E+3, 0.770E+2, 0.19419000E+1, 0.00000000E+0, 0.24437210E+3, 0.130E+3, + 0.780E+2, 0.19419000E+1, 0.00000000E+0, 0.22847850E+3, 0.130E+3, 0.790E+2, 0.19419000E+1, + 0.00000000E+0, 0.23524690E+3, 0.130E+3, 0.800E+2, 0.19419000E+1, 0.00000000E+0, 0.34006610E+3, + 0.130E+3, 0.810E+2, 0.19419000E+1, 0.00000000E+0, 0.33355770E+3, 0.130E+3, 0.820E+2, + 0.19419000E+1, 0.00000000E+0, 0.30748710E+3, 0.130E+3, 0.830E+2, 0.19419000E+1, 0.00000000E+0, + 0.29376220E+3, 0.130E+3, 0.840E+2, 0.19419000E+1, 0.00000000E+0, 0.27163520E+3, 0.130E+3, + 0.850E+2, 0.19419000E+1, 0.00000000E+0, 0.24938090E+3, 0.130E+3, 0.860E+2, 0.19419000E+1, + 0.00000000E+0, 0.80499020E+3, 0.130E+3, 0.870E+2, 0.19419000E+1, 0.00000000E+0, 0.78026750E+3, + 0.130E+3, 0.880E+2, 0.19419000E+1, 0.00000000E+0, 0.69268280E+3, 0.130E+3, 0.890E+2, + 0.19419000E+1, 0.00000000E+0, 0.62529330E+3, 0.130E+3, 0.900E+2, 0.19419000E+1, 0.00000000E+0, + 0.61943840E+3, 0.130E+3, 0.910E+2, 0.19419000E+1, 0.00000000E+0, 0.59985590E+3, 0.130E+3, + 0.920E+2, 0.19419000E+1, 0.00000000E+0, 0.61596070E+3, 0.130E+3, 0.930E+2, 0.19419000E+1, + 0.00000000E+0, 0.59681690E+3, 0.130E+3, 0.940E+2, 0.19419000E+1, 0.00000000E+0, 0.34031200E+2, + 0.130E+3, 0.101E+3, 0.19419000E+1, 0.00000000E+0, 0.10901270E+3, 0.130E+3, 0.103E+3, + 0.19419000E+1, 0.98650000E+0, 0.13924200E+3, 0.130E+3, 0.104E+3, 0.19419000E+1, 0.98080000E+0, + 0.10720260E+3, 0.130E+3, 0.105E+3, 0.19419000E+1, 0.97060000E+0, 0.81068600E+2, 0.130E+3, + 0.106E+3, 0.19419000E+1, 0.98680000E+0, 0.56614000E+2, 0.130E+3, 0.107E+3, 0.19419000E+1, + 0.99440000E+0, 0.41386200E+2, 0.130E+3, 0.108E+3, 0.19419000E+1, 0.99250000E+0, 0.28629100E+2, + 0.130E+3, 0.109E+3, 0.19419000E+1, 0.99820000E+0, 0.15912280E+3, 0.130E+3, 0.111E+3, + 0.19419000E+1, 0.96840000E+0, 0.24580540E+3, 0.130E+3, 0.112E+3, 0.19419000E+1, 0.96280000E+0, + 0.25007300E+3, 0.130E+3, 0.113E+3, 0.19419000E+1, 0.96480000E+0, 0.20213060E+3, 0.130E+3, + 0.114E+3, 0.19419000E+1, 0.95070000E+0, 0.16618870E+3, 0.130E+3, 0.115E+3, 0.19419000E+1, + 0.99470000E+0, 0.14088040E+3, 0.130E+3, 0.116E+3, 0.19419000E+1, 0.99480000E+0, 0.11545010E+3, + 0.130E+3, 0.117E+3, 0.19419000E+1, 0.99720000E+0, 0.21998520E+3, 0.130E+3, 0.119E+3, + 0.19419000E+1, 0.97670000E+0, 0.41556380E+3, 0.130E+3, 0.120E+3, 0.19419000E+1, 0.98310000E+0, + 0.22124670E+3, 0.130E+3, 0.121E+3, 0.19419000E+1, 0.18627000E+1, 0.21361910E+3, 0.130E+3, + 0.122E+3, 0.19419000E+1, 0.18299000E+1, 0.20934280E+3, 0.130E+3, 0.123E+3, 0.19419000E+1, + 0.19138000E+1, 0.20729260E+3, 0.130E+3, 0.124E+3, 0.19419000E+1, 0.18269000E+1, 0.19131250E+3, + 0.130E+3, 0.125E+3, 0.19419000E+1, 0.16406000E+1, 0.17720340E+3, 0.130E+3, 0.126E+3, + 0.19419000E+1, 0.16483000E+1, 0.16904610E+3, 0.130E+3, 0.127E+3, 0.19419000E+1, 0.17149000E+1, + 0.16523610E+3, 0.130E+3, 0.128E+3, 0.19419000E+1, 0.17937000E+1, 0.16292360E+3, 0.130E+3, + 0.129E+3, 0.19419000E+1, 0.95760000E+0, 0.15345280E+3, 0.130E+3, 0.130E+3, 0.19419000E+1, + 0.19419000E+1, 0.33251500E+2, 0.131E+3, 0.100E+1, 0.96010000E+0, 0.91180000E+0, 0.20987400E+2, + 0.131E+3, 0.200E+1, 0.96010000E+0, 0.00000000E+0, 0.60281040E+3, 0.131E+3, 0.300E+1, + 0.96010000E+0, 0.00000000E+0, 0.32666720E+3, 0.131E+3, 0.400E+1, 0.96010000E+0, 0.00000000E+0, + 0.21127560E+3, 0.131E+3, 0.500E+1, 0.96010000E+0, 0.00000000E+0, 0.13814970E+3, 0.131E+3, + 0.600E+1, 0.96010000E+0, 0.00000000E+0, 0.94132900E+2, 0.131E+3, 0.700E+1, 0.96010000E+0, + 0.00000000E+0, 0.69903900E+2, 0.131E+3, 0.800E+1, 0.96010000E+0, 0.00000000E+0, 0.52047600E+2, + 0.131E+3, 0.900E+1, 0.96010000E+0, 0.00000000E+0, 0.39458700E+2, 0.131E+3, 0.100E+2, + 0.96010000E+0, 0.00000000E+0, 0.71775310E+3, 0.131E+3, 0.110E+2, 0.96010000E+0, 0.00000000E+0, + 0.52642360E+3, 0.131E+3, 0.120E+2, 0.96010000E+0, 0.00000000E+0, 0.47573180E+3, 0.131E+3, + 0.130E+2, 0.96010000E+0, 0.00000000E+0, 0.36461100E+3, 0.131E+3, 0.140E+2, 0.96010000E+0, + 0.00000000E+0, 0.27735230E+3, 0.131E+3, 0.150E+2, 0.96010000E+0, 0.00000000E+0, 0.22627960E+3, + 0.131E+3, 0.160E+2, 0.96010000E+0, 0.00000000E+0, 0.18171780E+3, 0.131E+3, 0.170E+2, + 0.96010000E+0, 0.00000000E+0, 0.14638550E+3, 0.131E+3, 0.180E+2, 0.96010000E+0, 0.00000000E+0, + 0.11848327E+4, 0.131E+3, 0.190E+2, 0.96010000E+0, 0.00000000E+0, 0.94258280E+3, 0.131E+3, + 0.200E+2, 0.96010000E+0, 0.00000000E+0, 0.77197630E+3, 0.131E+3, 0.210E+2, 0.96010000E+0, + 0.00000000E+0, 0.73902810E+3, 0.131E+3, 0.220E+2, 0.96010000E+0, 0.00000000E+0, 0.67328230E+3, + 0.131E+3, 0.230E+2, 0.96010000E+0, 0.00000000E+0, 0.52900060E+3, 0.131E+3, 0.240E+2, + 0.96010000E+0, 0.00000000E+0, 0.57532290E+3, 0.131E+3, 0.250E+2, 0.96010000E+0, 0.00000000E+0, + 0.44990400E+3, 0.131E+3, 0.260E+2, 0.96010000E+0, 0.00000000E+0, 0.47264010E+3, 0.131E+3, + 0.270E+2, 0.96010000E+0, 0.00000000E+0, 0.48954990E+3, 0.131E+3, 0.280E+2, 0.96010000E+0, + 0.00000000E+0, 0.37425370E+3, 0.131E+3, 0.290E+2, 0.96010000E+0, 0.00000000E+0, 0.37873290E+3, + 0.131E+3, 0.300E+2, 0.96010000E+0, 0.00000000E+0, 0.45140030E+3, 0.131E+3, 0.310E+2, + 0.96010000E+0, 0.00000000E+0, 0.38973700E+3, 0.131E+3, 0.320E+2, 0.96010000E+0, 0.00000000E+0, + 0.32572680E+3, 0.131E+3, 0.330E+2, 0.96010000E+0, 0.00000000E+0, 0.28839340E+3, 0.131E+3, + 0.340E+2, 0.96010000E+0, 0.00000000E+0, 0.24882110E+3, 0.131E+3, 0.350E+2, 0.96010000E+0, + 0.00000000E+0, 0.21348210E+3, 0.131E+3, 0.360E+2, 0.96010000E+0, 0.00000000E+0, 0.13227322E+4, + 0.131E+3, 0.370E+2, 0.96010000E+0, 0.00000000E+0, 0.11239167E+4, 0.131E+3, 0.380E+2, + 0.96010000E+0, 0.00000000E+0, 0.96907770E+3, 0.131E+3, 0.390E+2, 0.96010000E+0, 0.00000000E+0, + 0.86203630E+3, 0.131E+3, 0.400E+2, 0.96010000E+0, 0.00000000E+0, 0.78048050E+3, 0.131E+3, + 0.410E+2, 0.96010000E+0, 0.00000000E+0, 0.59457650E+3, 0.131E+3, 0.420E+2, 0.96010000E+0, + 0.00000000E+0, 0.66676010E+3, 0.131E+3, 0.430E+2, 0.96010000E+0, 0.00000000E+0, 0.50051620E+3, + 0.131E+3, 0.440E+2, 0.96010000E+0, 0.00000000E+0, 0.54783460E+3, 0.131E+3, 0.450E+2, + 0.96010000E+0, 0.00000000E+0, 0.50566980E+3, 0.131E+3, 0.460E+2, 0.96010000E+0, 0.00000000E+0, + 0.42174200E+3, 0.131E+3, 0.470E+2, 0.96010000E+0, 0.00000000E+0, 0.44286390E+3, 0.131E+3, + 0.480E+2, 0.96010000E+0, 0.00000000E+0, 0.56415640E+3, 0.131E+3, 0.490E+2, 0.96010000E+0, + 0.00000000E+0, 0.51303150E+3, 0.131E+3, 0.500E+2, 0.96010000E+0, 0.00000000E+0, 0.44930060E+3, + 0.131E+3, 0.510E+2, 0.96010000E+0, 0.00000000E+0, 0.41227930E+3, 0.131E+3, 0.520E+2, + 0.96010000E+0, 0.00000000E+0, 0.36821830E+3, 0.131E+3, 0.530E+2, 0.96010000E+0, 0.00000000E+0, + 0.32708380E+3, 0.131E+3, 0.540E+2, 0.96010000E+0, 0.00000000E+0, 0.16098951E+4, 0.131E+3, + 0.550E+2, 0.96010000E+0, 0.00000000E+0, 0.14393610E+4, 0.131E+3, 0.560E+2, 0.96010000E+0, + 0.00000000E+0, 0.12450382E+4, 0.131E+3, 0.570E+2, 0.96010000E+0, 0.00000000E+0, 0.53206830E+3, + 0.131E+3, 0.580E+2, 0.96010000E+0, 0.27991000E+1, 0.12682581E+4, 0.131E+3, 0.590E+2, + 0.96010000E+0, 0.00000000E+0, 0.12147867E+4, 0.131E+3, 0.600E+2, 0.96010000E+0, 0.00000000E+0, + 0.11834931E+4, 0.131E+3, 0.610E+2, 0.96010000E+0, 0.00000000E+0, 0.11548172E+4, 0.131E+3, + 0.620E+2, 0.96010000E+0, 0.00000000E+0, 0.11293623E+4, 0.131E+3, 0.630E+2, 0.96010000E+0, + 0.00000000E+0, 0.87169660E+3, 0.131E+3, 0.640E+2, 0.96010000E+0, 0.00000000E+0, 0.10061273E+4, + 0.131E+3, 0.650E+2, 0.96010000E+0, 0.00000000E+0, 0.96741930E+3, 0.131E+3, 0.660E+2, + 0.96010000E+0, 0.00000000E+0, 0.10147443E+4, 0.131E+3, 0.670E+2, 0.96010000E+0, 0.00000000E+0, + 0.99283980E+3, 0.131E+3, 0.680E+2, 0.96010000E+0, 0.00000000E+0, 0.97287530E+3, 0.131E+3, + 0.690E+2, 0.96010000E+0, 0.00000000E+0, 0.96226810E+3, 0.131E+3, 0.700E+2, 0.96010000E+0, + 0.00000000E+0, 0.80056070E+3, 0.131E+3, 0.710E+2, 0.96010000E+0, 0.00000000E+0, 0.77479490E+3, + 0.131E+3, 0.720E+2, 0.96010000E+0, 0.00000000E+0, 0.69954820E+3, 0.131E+3, 0.730E+2, + 0.96010000E+0, 0.00000000E+0, 0.58500690E+3, 0.131E+3, 0.740E+2, 0.96010000E+0, 0.00000000E+0, + 0.59290660E+3, 0.131E+3, 0.750E+2, 0.96010000E+0, 0.00000000E+0, 0.53219500E+3, 0.131E+3, + 0.760E+2, 0.96010000E+0, 0.00000000E+0, 0.48350900E+3, 0.131E+3, 0.770E+2, 0.96010000E+0, + 0.00000000E+0, 0.39773910E+3, 0.131E+3, 0.780E+2, 0.96010000E+0, 0.00000000E+0, 0.37015170E+3, + 0.131E+3, 0.790E+2, 0.96010000E+0, 0.00000000E+0, 0.37970920E+3, 0.131E+3, 0.800E+2, + 0.96010000E+0, 0.00000000E+0, 0.57562810E+3, 0.131E+3, 0.810E+2, 0.96010000E+0, 0.00000000E+0, + 0.55583070E+3, 0.131E+3, 0.820E+2, 0.96010000E+0, 0.00000000E+0, 0.50298850E+3, 0.131E+3, + 0.830E+2, 0.96010000E+0, 0.00000000E+0, 0.47531340E+3, 0.131E+3, 0.840E+2, 0.96010000E+0, + 0.00000000E+0, 0.43366250E+3, 0.131E+3, 0.850E+2, 0.96010000E+0, 0.00000000E+0, 0.39318500E+3, + 0.131E+3, 0.860E+2, 0.96010000E+0, 0.00000000E+0, 0.15014541E+4, 0.131E+3, 0.870E+2, + 0.96010000E+0, 0.00000000E+0, 0.14115217E+4, 0.131E+3, 0.880E+2, 0.96010000E+0, 0.00000000E+0, + 0.12297307E+4, 0.131E+3, 0.890E+2, 0.96010000E+0, 0.00000000E+0, 0.10857394E+4, 0.131E+3, + 0.900E+2, 0.96010000E+0, 0.00000000E+0, 0.10865380E+4, 0.131E+3, 0.910E+2, 0.96010000E+0, + 0.00000000E+0, 0.10514942E+4, 0.131E+3, 0.920E+2, 0.96010000E+0, 0.00000000E+0, 0.10941031E+4, + 0.131E+3, 0.930E+2, 0.96010000E+0, 0.00000000E+0, 0.10575095E+4, 0.131E+3, 0.940E+2, + 0.96010000E+0, 0.00000000E+0, 0.54991900E+2, 0.131E+3, 0.101E+3, 0.96010000E+0, 0.00000000E+0, + 0.18876220E+3, 0.131E+3, 0.103E+3, 0.96010000E+0, 0.98650000E+0, 0.23890680E+3, 0.131E+3, + 0.104E+3, 0.96010000E+0, 0.98080000E+0, 0.17609760E+3, 0.131E+3, 0.105E+3, 0.96010000E+0, + 0.97060000E+0, 0.12956700E+3, 0.131E+3, 0.106E+3, 0.96010000E+0, 0.98680000E+0, 0.87664500E+2, + 0.131E+3, 0.107E+3, 0.96010000E+0, 0.99440000E+0, 0.62352200E+2, 0.131E+3, 0.108E+3, + 0.96010000E+0, 0.99250000E+0, 0.41590900E+2, 0.131E+3, 0.109E+3, 0.96010000E+0, 0.99820000E+0, + 0.27751430E+3, 0.131E+3, 0.111E+3, 0.96010000E+0, 0.96840000E+0, 0.43082970E+3, 0.131E+3, + 0.112E+3, 0.96010000E+0, 0.96280000E+0, 0.42895210E+3, 0.131E+3, 0.113E+3, 0.96010000E+0, + 0.96480000E+0, 0.33552060E+3, 0.131E+3, 0.114E+3, 0.96010000E+0, 0.95070000E+0, 0.26893700E+3, + 0.131E+3, 0.115E+3, 0.96010000E+0, 0.99470000E+0, 0.22384530E+3, 0.131E+3, 0.116E+3, + 0.96010000E+0, 0.99480000E+0, 0.17986830E+3, 0.131E+3, 0.117E+3, 0.96010000E+0, 0.99720000E+0, + 0.37584950E+3, 0.131E+3, 0.119E+3, 0.96010000E+0, 0.97670000E+0, 0.75181440E+3, 0.131E+3, + 0.120E+3, 0.96010000E+0, 0.98310000E+0, 0.36854170E+3, 0.131E+3, 0.121E+3, 0.96010000E+0, + 0.18627000E+1, 0.35534980E+3, 0.131E+3, 0.122E+3, 0.96010000E+0, 0.18299000E+1, 0.34832930E+3, + 0.131E+3, 0.123E+3, 0.96010000E+0, 0.19138000E+1, 0.34597960E+3, 0.131E+3, 0.124E+3, + 0.96010000E+0, 0.18269000E+1, 0.31442440E+3, 0.131E+3, 0.125E+3, 0.96010000E+0, 0.16406000E+1, + 0.28975880E+3, 0.131E+3, 0.126E+3, 0.96010000E+0, 0.16483000E+1, 0.27631300E+3, 0.131E+3, + 0.127E+3, 0.96010000E+0, 0.17149000E+1, 0.27040230E+3, 0.131E+3, 0.128E+3, 0.96010000E+0, + 0.17937000E+1, 0.26973440E+3, 0.131E+3, 0.129E+3, 0.96010000E+0, 0.95760000E+0, 0.24870030E+3, + 0.131E+3, 0.130E+3, 0.96010000E+0, 0.19419000E+1, 0.42164970E+3, 0.131E+3, 0.131E+3, + 0.96010000E+0, 0.96010000E+0, 0.29952700E+2, 0.132E+3, 0.100E+1, 0.94340000E+0, 0.91180000E+0, + 0.19376100E+2, 0.132E+3, 0.200E+1, 0.94340000E+0, 0.00000000E+0, 0.48401650E+3, 0.132E+3, + 0.300E+1, 0.94340000E+0, 0.00000000E+0, 0.27657170E+3, 0.132E+3, 0.400E+1, 0.94340000E+0, + 0.00000000E+0, 0.18420550E+3, 0.132E+3, 0.500E+1, 0.94340000E+0, 0.00000000E+0, 0.12305740E+3, + 0.132E+3, 0.600E+1, 0.94340000E+0, 0.00000000E+0, 0.85162100E+2, 0.132E+3, 0.700E+1, + 0.94340000E+0, 0.00000000E+0, 0.63924500E+2, 0.132E+3, 0.800E+1, 0.94340000E+0, 0.00000000E+0, + 0.48023300E+2, 0.132E+3, 0.900E+1, 0.94340000E+0, 0.00000000E+0, 0.36661500E+2, 0.132E+3, + 0.100E+2, 0.94340000E+0, 0.00000000E+0, 0.57808820E+3, 0.132E+3, 0.110E+2, 0.94340000E+0, + 0.00000000E+0, 0.44152390E+3, 0.132E+3, 0.120E+2, 0.94340000E+0, 0.00000000E+0, 0.40516110E+3, + 0.132E+3, 0.130E+2, 0.94340000E+0, 0.00000000E+0, 0.31697000E+3, 0.132E+3, 0.140E+2, + 0.94340000E+0, 0.00000000E+0, 0.24526830E+3, 0.132E+3, 0.150E+2, 0.94340000E+0, 0.00000000E+0, + 0.20228630E+3, 0.132E+3, 0.160E+2, 0.94340000E+0, 0.00000000E+0, 0.16412660E+3, 0.132E+3, + 0.170E+2, 0.94340000E+0, 0.00000000E+0, 0.13337940E+3, 0.132E+3, 0.180E+2, 0.94340000E+0, + 0.00000000E+0, 0.94657560E+3, 0.132E+3, 0.190E+2, 0.94340000E+0, 0.00000000E+0, 0.77753610E+3, + 0.132E+3, 0.200E+2, 0.94340000E+0, 0.00000000E+0, 0.64140640E+3, 0.132E+3, 0.210E+2, + 0.94340000E+0, 0.00000000E+0, 0.61804010E+3, 0.132E+3, 0.220E+2, 0.94340000E+0, 0.00000000E+0, + 0.56526390E+3, 0.132E+3, 0.230E+2, 0.94340000E+0, 0.00000000E+0, 0.44441960E+3, 0.132E+3, + 0.240E+2, 0.94340000E+0, 0.00000000E+0, 0.48576480E+3, 0.132E+3, 0.250E+2, 0.94340000E+0, + 0.00000000E+0, 0.38038530E+3, 0.132E+3, 0.260E+2, 0.94340000E+0, 0.00000000E+0, 0.40291460E+3, + 0.132E+3, 0.270E+2, 0.94340000E+0, 0.00000000E+0, 0.41564390E+3, 0.132E+3, 0.280E+2, + 0.94340000E+0, 0.00000000E+0, 0.31786240E+3, 0.132E+3, 0.290E+2, 0.94340000E+0, 0.00000000E+0, + 0.32569280E+3, 0.132E+3, 0.300E+2, 0.94340000E+0, 0.00000000E+0, 0.38671290E+3, 0.132E+3, + 0.310E+2, 0.94340000E+0, 0.00000000E+0, 0.33924040E+3, 0.132E+3, 0.320E+2, 0.94340000E+0, + 0.00000000E+0, 0.28758470E+3, 0.132E+3, 0.330E+2, 0.94340000E+0, 0.00000000E+0, 0.25685170E+3, + 0.132E+3, 0.340E+2, 0.94340000E+0, 0.00000000E+0, 0.22357440E+3, 0.132E+3, 0.350E+2, + 0.94340000E+0, 0.00000000E+0, 0.19336340E+3, 0.132E+3, 0.360E+2, 0.94340000E+0, 0.00000000E+0, + 0.10596044E+4, 0.132E+3, 0.370E+2, 0.94340000E+0, 0.00000000E+0, 0.92600250E+3, 0.132E+3, + 0.380E+2, 0.94340000E+0, 0.00000000E+0, 0.80859910E+3, 0.132E+3, 0.390E+2, 0.94340000E+0, + 0.00000000E+0, 0.72498050E+3, 0.132E+3, 0.400E+2, 0.94340000E+0, 0.00000000E+0, 0.65980390E+3, + 0.132E+3, 0.410E+2, 0.94340000E+0, 0.00000000E+0, 0.50715030E+3, 0.132E+3, 0.420E+2, + 0.94340000E+0, 0.00000000E+0, 0.56682940E+3, 0.132E+3, 0.430E+2, 0.94340000E+0, 0.00000000E+0, + 0.42969960E+3, 0.132E+3, 0.440E+2, 0.94340000E+0, 0.00000000E+0, 0.47030780E+3, 0.132E+3, + 0.450E+2, 0.94340000E+0, 0.00000000E+0, 0.43552680E+3, 0.132E+3, 0.460E+2, 0.94340000E+0, + 0.00000000E+0, 0.36250760E+3, 0.132E+3, 0.470E+2, 0.94340000E+0, 0.00000000E+0, 0.38302040E+3, + 0.132E+3, 0.480E+2, 0.94340000E+0, 0.00000000E+0, 0.48291150E+3, 0.132E+3, 0.490E+2, + 0.94340000E+0, 0.00000000E+0, 0.44490480E+3, 0.132E+3, 0.500E+2, 0.94340000E+0, 0.00000000E+0, + 0.39458220E+3, 0.132E+3, 0.510E+2, 0.94340000E+0, 0.00000000E+0, 0.36482430E+3, 0.132E+3, + 0.520E+2, 0.94340000E+0, 0.00000000E+0, 0.32847500E+3, 0.132E+3, 0.530E+2, 0.94340000E+0, + 0.00000000E+0, 0.29399660E+3, 0.132E+3, 0.540E+2, 0.94340000E+0, 0.00000000E+0, 0.12903249E+4, + 0.132E+3, 0.550E+2, 0.94340000E+0, 0.00000000E+0, 0.11809729E+4, 0.132E+3, 0.560E+2, + 0.94340000E+0, 0.00000000E+0, 0.10344900E+4, 0.132E+3, 0.570E+2, 0.94340000E+0, 0.00000000E+0, + 0.46618800E+3, 0.132E+3, 0.580E+2, 0.94340000E+0, 0.27991000E+1, 0.10448624E+4, 0.132E+3, + 0.590E+2, 0.94340000E+0, 0.00000000E+0, 0.10029138E+4, 0.132E+3, 0.600E+2, 0.94340000E+0, + 0.00000000E+0, 0.97765230E+3, 0.132E+3, 0.610E+2, 0.94340000E+0, 0.00000000E+0, 0.95444310E+3, + 0.132E+3, 0.620E+2, 0.94340000E+0, 0.00000000E+0, 0.93386150E+3, 0.132E+3, 0.630E+2, + 0.94340000E+0, 0.00000000E+0, 0.73092270E+3, 0.132E+3, 0.640E+2, 0.94340000E+0, 0.00000000E+0, + 0.82651040E+3, 0.132E+3, 0.650E+2, 0.94340000E+0, 0.00000000E+0, 0.79662990E+3, 0.132E+3, + 0.660E+2, 0.94340000E+0, 0.00000000E+0, 0.84175260E+3, 0.132E+3, 0.670E+2, 0.94340000E+0, + 0.00000000E+0, 0.82386870E+3, 0.132E+3, 0.680E+2, 0.94340000E+0, 0.00000000E+0, 0.80770310E+3, + 0.132E+3, 0.690E+2, 0.94340000E+0, 0.00000000E+0, 0.79843800E+3, 0.132E+3, 0.700E+2, + 0.94340000E+0, 0.00000000E+0, 0.67060970E+3, 0.132E+3, 0.710E+2, 0.94340000E+0, 0.00000000E+0, + 0.65755650E+3, 0.132E+3, 0.720E+2, 0.94340000E+0, 0.00000000E+0, 0.59836780E+3, 0.132E+3, + 0.730E+2, 0.94340000E+0, 0.00000000E+0, 0.50344310E+3, 0.132E+3, 0.740E+2, 0.94340000E+0, + 0.00000000E+0, 0.51179750E+3, 0.132E+3, 0.750E+2, 0.94340000E+0, 0.00000000E+0, 0.46250420E+3, + 0.132E+3, 0.760E+2, 0.94340000E+0, 0.00000000E+0, 0.42248760E+3, 0.132E+3, 0.770E+2, + 0.94340000E+0, 0.00000000E+0, 0.34951600E+3, 0.132E+3, 0.780E+2, 0.94340000E+0, 0.00000000E+0, + 0.32600720E+3, 0.132E+3, 0.790E+2, 0.94340000E+0, 0.00000000E+0, 0.33530450E+3, 0.132E+3, + 0.800E+2, 0.94340000E+0, 0.00000000E+0, 0.49429340E+3, 0.132E+3, 0.810E+2, 0.94340000E+0, + 0.00000000E+0, 0.48215480E+3, 0.132E+3, 0.820E+2, 0.94340000E+0, 0.00000000E+0, 0.44128680E+3, + 0.132E+3, 0.830E+2, 0.94340000E+0, 0.00000000E+0, 0.41974070E+3, 0.132E+3, 0.840E+2, + 0.94340000E+0, 0.00000000E+0, 0.38594190E+3, 0.132E+3, 0.850E+2, 0.94340000E+0, 0.00000000E+0, + 0.35237490E+3, 0.132E+3, 0.860E+2, 0.94340000E+0, 0.00000000E+0, 0.12154454E+4, 0.132E+3, + 0.870E+2, 0.94340000E+0, 0.00000000E+0, 0.11657107E+4, 0.132E+3, 0.880E+2, 0.94340000E+0, + 0.00000000E+0, 0.10274859E+4, 0.132E+3, 0.890E+2, 0.94340000E+0, 0.00000000E+0, 0.91935170E+3, + 0.132E+3, 0.900E+2, 0.94340000E+0, 0.00000000E+0, 0.91390230E+3, 0.132E+3, 0.910E+2, + 0.94340000E+0, 0.00000000E+0, 0.88471530E+3, 0.132E+3, 0.920E+2, 0.94340000E+0, 0.00000000E+0, + 0.91297050E+3, 0.132E+3, 0.930E+2, 0.94340000E+0, 0.00000000E+0, 0.88377800E+3, 0.132E+3, + 0.940E+2, 0.94340000E+0, 0.00000000E+0, 0.48724700E+2, 0.132E+3, 0.101E+3, 0.94340000E+0, + 0.00000000E+0, 0.16045020E+3, 0.132E+3, 0.103E+3, 0.94340000E+0, 0.98650000E+0, 0.20416900E+3, + 0.132E+3, 0.104E+3, 0.94340000E+0, 0.98080000E+0, 0.15444090E+3, 0.132E+3, 0.105E+3, + 0.94340000E+0, 0.97060000E+0, 0.11534880E+3, 0.132E+3, 0.106E+3, 0.94340000E+0, 0.98680000E+0, + 0.79327800E+2, 0.132E+3, 0.107E+3, 0.94340000E+0, 0.99440000E+0, 0.57175200E+2, 0.132E+3, + 0.108E+3, 0.94340000E+0, 0.99250000E+0, 0.38758300E+2, 0.132E+3, 0.109E+3, 0.94340000E+0, + 0.99820000E+0, 0.23460480E+3, 0.132E+3, 0.111E+3, 0.94340000E+0, 0.96840000E+0, 0.36333200E+3, + 0.132E+3, 0.112E+3, 0.94340000E+0, 0.96280000E+0, 0.36665610E+3, 0.132E+3, 0.113E+3, + 0.94340000E+0, 0.96480000E+0, 0.29253350E+3, 0.132E+3, 0.114E+3, 0.94340000E+0, 0.95070000E+0, + 0.23795800E+3, 0.132E+3, 0.115E+3, 0.94340000E+0, 0.99470000E+0, 0.20005260E+3, 0.132E+3, + 0.116E+3, 0.94340000E+0, 0.99480000E+0, 0.16242060E+3, 0.132E+3, 0.117E+3, 0.94340000E+0, + 0.99720000E+0, 0.32115740E+3, 0.132E+3, 0.119E+3, 0.94340000E+0, 0.97670000E+0, 0.62067350E+3, + 0.132E+3, 0.120E+3, 0.94340000E+0, 0.98310000E+0, 0.32013420E+3, 0.132E+3, 0.121E+3, + 0.94340000E+0, 0.18627000E+1, 0.30883040E+3, 0.132E+3, 0.122E+3, 0.94340000E+0, 0.18299000E+1, + 0.30262720E+3, 0.132E+3, 0.123E+3, 0.94340000E+0, 0.19138000E+1, 0.29997060E+3, 0.132E+3, + 0.124E+3, 0.94340000E+0, 0.18269000E+1, 0.27526070E+3, 0.132E+3, 0.125E+3, 0.94340000E+0, + 0.16406000E+1, 0.25437350E+3, 0.132E+3, 0.126E+3, 0.94340000E+0, 0.16483000E+1, 0.24255720E+3, + 0.132E+3, 0.127E+3, 0.94340000E+0, 0.17149000E+1, 0.23717370E+3, 0.132E+3, 0.128E+3, + 0.94340000E+0, 0.17937000E+1, 0.23483270E+3, 0.132E+3, 0.129E+3, 0.94340000E+0, 0.95760000E+0, + 0.21945080E+3, 0.132E+3, 0.130E+3, 0.94340000E+0, 0.19419000E+1, 0.36268320E+3, 0.132E+3, + 0.131E+3, 0.94340000E+0, 0.96010000E+0, 0.31685210E+3, 0.132E+3, 0.132E+3, 0.94340000E+0, + 0.94340000E+0, 0.27357400E+2, 0.133E+3, 0.100E+1, 0.98890000E+0, 0.91180000E+0, 0.18081600E+2, + 0.133E+3, 0.200E+1, 0.98890000E+0, 0.00000000E+0, 0.40634270E+3, 0.133E+3, 0.300E+1, + 0.98890000E+0, 0.00000000E+0, 0.24075590E+3, 0.133E+3, 0.400E+1, 0.98890000E+0, 0.00000000E+0, + 0.16396550E+3, 0.133E+3, 0.500E+1, 0.98890000E+0, 0.00000000E+0, 0.11142570E+3, 0.133E+3, + 0.600E+1, 0.98890000E+0, 0.00000000E+0, 0.78113800E+2, 0.133E+3, 0.700E+1, 0.98890000E+0, + 0.00000000E+0, 0.59176400E+2, 0.133E+3, 0.800E+1, 0.98890000E+0, 0.00000000E+0, 0.44807900E+2, + 0.133E+3, 0.900E+1, 0.98890000E+0, 0.00000000E+0, 0.34422600E+2, 0.133E+3, 0.100E+2, + 0.98890000E+0, 0.00000000E+0, 0.48646380E+3, 0.133E+3, 0.110E+2, 0.98890000E+0, 0.00000000E+0, + 0.38183960E+3, 0.133E+3, 0.120E+2, 0.98890000E+0, 0.00000000E+0, 0.35437060E+3, 0.133E+3, + 0.130E+2, 0.98890000E+0, 0.00000000E+0, 0.28148930E+3, 0.133E+3, 0.140E+2, 0.98890000E+0, + 0.00000000E+0, 0.22071460E+3, 0.133E+3, 0.150E+2, 0.98890000E+0, 0.00000000E+0, 0.18364620E+3, + 0.133E+3, 0.160E+2, 0.98890000E+0, 0.00000000E+0, 0.15027420E+3, 0.133E+3, 0.170E+2, + 0.98890000E+0, 0.00000000E+0, 0.12303580E+3, 0.133E+3, 0.180E+2, 0.98890000E+0, 0.00000000E+0, + 0.79363060E+3, 0.133E+3, 0.190E+2, 0.98890000E+0, 0.00000000E+0, 0.66532210E+3, 0.133E+3, + 0.200E+2, 0.98890000E+0, 0.00000000E+0, 0.55149990E+3, 0.133E+3, 0.210E+2, 0.98890000E+0, + 0.00000000E+0, 0.53402660E+3, 0.133E+3, 0.220E+2, 0.98890000E+0, 0.00000000E+0, 0.48982100E+3, + 0.133E+3, 0.230E+2, 0.98890000E+0, 0.00000000E+0, 0.38565770E+3, 0.133E+3, 0.240E+2, + 0.98890000E+0, 0.00000000E+0, 0.42268740E+3, 0.133E+3, 0.250E+2, 0.98890000E+0, 0.00000000E+0, + 0.33163890E+3, 0.133E+3, 0.260E+2, 0.98890000E+0, 0.00000000E+0, 0.35300740E+3, 0.133E+3, + 0.270E+2, 0.98890000E+0, 0.00000000E+0, 0.36305660E+3, 0.133E+3, 0.280E+2, 0.98890000E+0, + 0.00000000E+0, 0.27805780E+3, 0.133E+3, 0.290E+2, 0.98890000E+0, 0.00000000E+0, 0.28717780E+3, + 0.133E+3, 0.300E+2, 0.98890000E+0, 0.00000000E+0, 0.33996250E+3, 0.133E+3, 0.310E+2, + 0.98890000E+0, 0.00000000E+0, 0.30168000E+3, 0.133E+3, 0.320E+2, 0.98890000E+0, 0.00000000E+0, + 0.25852630E+3, 0.133E+3, 0.330E+2, 0.98890000E+0, 0.00000000E+0, 0.23250720E+3, 0.133E+3, + 0.340E+2, 0.98890000E+0, 0.00000000E+0, 0.20384000E+3, 0.133E+3, 0.350E+2, 0.98890000E+0, + 0.00000000E+0, 0.17747160E+3, 0.133E+3, 0.360E+2, 0.98890000E+0, 0.00000000E+0, 0.89049310E+3, + 0.133E+3, 0.370E+2, 0.98890000E+0, 0.00000000E+0, 0.79208160E+3, 0.133E+3, 0.380E+2, + 0.98890000E+0, 0.00000000E+0, 0.69780370E+3, 0.133E+3, 0.390E+2, 0.98890000E+0, 0.00000000E+0, + 0.62921900E+3, 0.133E+3, 0.400E+2, 0.98890000E+0, 0.00000000E+0, 0.57490090E+3, 0.133E+3, + 0.410E+2, 0.98890000E+0, 0.00000000E+0, 0.44507990E+3, 0.133E+3, 0.420E+2, 0.98890000E+0, + 0.00000000E+0, 0.49610230E+3, 0.133E+3, 0.430E+2, 0.98890000E+0, 0.00000000E+0, 0.37904270E+3, + 0.133E+3, 0.440E+2, 0.98890000E+0, 0.00000000E+0, 0.41454110E+3, 0.133E+3, 0.450E+2, + 0.98890000E+0, 0.00000000E+0, 0.38481520E+3, 0.133E+3, 0.460E+2, 0.98890000E+0, 0.00000000E+0, + 0.32022310E+3, 0.133E+3, 0.470E+2, 0.98890000E+0, 0.00000000E+0, 0.33948140E+3, 0.133E+3, + 0.480E+2, 0.98890000E+0, 0.00000000E+0, 0.42470080E+3, 0.133E+3, 0.490E+2, 0.98890000E+0, + 0.00000000E+0, 0.39481650E+3, 0.133E+3, 0.500E+2, 0.98890000E+0, 0.00000000E+0, 0.35342450E+3, + 0.133E+3, 0.510E+2, 0.98890000E+0, 0.00000000E+0, 0.32867560E+3, 0.133E+3, 0.520E+2, + 0.98890000E+0, 0.00000000E+0, 0.29780640E+3, 0.133E+3, 0.530E+2, 0.98890000E+0, 0.00000000E+0, + 0.26817000E+3, 0.133E+3, 0.540E+2, 0.98890000E+0, 0.00000000E+0, 0.10853677E+4, 0.133E+3, + 0.550E+2, 0.98890000E+0, 0.00000000E+0, 0.10077913E+4, 0.133E+3, 0.560E+2, 0.98890000E+0, + 0.00000000E+0, 0.89047640E+3, 0.133E+3, 0.570E+2, 0.98890000E+0, 0.00000000E+0, 0.41703500E+3, + 0.133E+3, 0.580E+2, 0.98890000E+0, 0.27991000E+1, 0.89428150E+3, 0.133E+3, 0.590E+2, + 0.98890000E+0, 0.00000000E+0, 0.85952480E+3, 0.133E+3, 0.600E+2, 0.98890000E+0, 0.00000000E+0, + 0.83818370E+3, 0.133E+3, 0.610E+2, 0.98890000E+0, 0.00000000E+0, 0.81853810E+3, 0.133E+3, + 0.620E+2, 0.98890000E+0, 0.00000000E+0, 0.80112860E+3, 0.133E+3, 0.630E+2, 0.98890000E+0, + 0.00000000E+0, 0.63358090E+3, 0.133E+3, 0.640E+2, 0.98890000E+0, 0.00000000E+0, 0.70687070E+3, + 0.133E+3, 0.650E+2, 0.98890000E+0, 0.00000000E+0, 0.68251260E+3, 0.133E+3, 0.660E+2, + 0.98890000E+0, 0.00000000E+0, 0.72360130E+3, 0.133E+3, 0.670E+2, 0.98890000E+0, 0.00000000E+0, + 0.70836530E+3, 0.133E+3, 0.680E+2, 0.98890000E+0, 0.00000000E+0, 0.69468070E+3, 0.133E+3, + 0.690E+2, 0.98890000E+0, 0.00000000E+0, 0.68640110E+3, 0.133E+3, 0.700E+2, 0.98890000E+0, + 0.00000000E+0, 0.58061170E+3, 0.133E+3, 0.710E+2, 0.98890000E+0, 0.00000000E+0, 0.57440900E+3, + 0.133E+3, 0.720E+2, 0.98890000E+0, 0.00000000E+0, 0.52573750E+3, 0.133E+3, 0.730E+2, + 0.98890000E+0, 0.00000000E+0, 0.44464860E+3, 0.133E+3, 0.740E+2, 0.98890000E+0, 0.00000000E+0, + 0.45291770E+3, 0.133E+3, 0.750E+2, 0.98890000E+0, 0.00000000E+0, 0.41136690E+3, 0.133E+3, + 0.760E+2, 0.98890000E+0, 0.00000000E+0, 0.37733280E+3, 0.133E+3, 0.770E+2, 0.98890000E+0, + 0.00000000E+0, 0.31370400E+3, 0.133E+3, 0.780E+2, 0.98890000E+0, 0.00000000E+0, 0.29316560E+3, + 0.133E+3, 0.790E+2, 0.98890000E+0, 0.00000000E+0, 0.30197230E+3, 0.133E+3, 0.800E+2, + 0.98890000E+0, 0.00000000E+0, 0.43615840E+3, 0.133E+3, 0.810E+2, 0.98890000E+0, 0.00000000E+0, + 0.42826390E+3, 0.133E+3, 0.820E+2, 0.98890000E+0, 0.00000000E+0, 0.39514950E+3, 0.133E+3, + 0.830E+2, 0.98890000E+0, 0.00000000E+0, 0.37768730E+3, 0.133E+3, 0.840E+2, 0.98890000E+0, + 0.00000000E+0, 0.34934070E+3, 0.133E+3, 0.850E+2, 0.98890000E+0, 0.00000000E+0, 0.32071970E+3, + 0.133E+3, 0.860E+2, 0.98890000E+0, 0.00000000E+0, 0.10295399E+4, 0.133E+3, 0.870E+2, + 0.98890000E+0, 0.00000000E+0, 0.99943950E+3, 0.133E+3, 0.880E+2, 0.98890000E+0, 0.00000000E+0, + 0.88791120E+3, 0.133E+3, 0.890E+2, 0.98890000E+0, 0.00000000E+0, 0.80215530E+3, 0.133E+3, + 0.900E+2, 0.98890000E+0, 0.00000000E+0, 0.79394730E+3, 0.133E+3, 0.910E+2, 0.98890000E+0, + 0.00000000E+0, 0.76878210E+3, 0.133E+3, 0.920E+2, 0.98890000E+0, 0.00000000E+0, 0.78864020E+3, + 0.133E+3, 0.930E+2, 0.98890000E+0, 0.00000000E+0, 0.76421100E+3, 0.133E+3, 0.940E+2, + 0.98890000E+0, 0.00000000E+0, 0.43906700E+2, 0.133E+3, 0.101E+3, 0.98890000E+0, 0.00000000E+0, + 0.14013530E+3, 0.133E+3, 0.103E+3, 0.98890000E+0, 0.98650000E+0, 0.17913900E+3, 0.133E+3, + 0.104E+3, 0.98890000E+0, 0.98080000E+0, 0.13814460E+3, 0.133E+3, 0.105E+3, 0.98890000E+0, + 0.97060000E+0, 0.10445320E+3, 0.133E+3, 0.106E+3, 0.98890000E+0, 0.98680000E+0, 0.72807300E+2, + 0.133E+3, 0.107E+3, 0.98890000E+0, 0.99440000E+0, 0.53064500E+2, 0.133E+3, 0.108E+3, + 0.98890000E+0, 0.99250000E+0, 0.36472800E+2, 0.133E+3, 0.109E+3, 0.98890000E+0, 0.99820000E+0, + 0.20419370E+3, 0.133E+3, 0.111E+3, 0.98890000E+0, 0.96840000E+0, 0.31566880E+3, 0.133E+3, + 0.112E+3, 0.98890000E+0, 0.96280000E+0, 0.32160430E+3, 0.133E+3, 0.113E+3, 0.98890000E+0, + 0.96480000E+0, 0.26040440E+3, 0.133E+3, 0.114E+3, 0.98890000E+0, 0.95070000E+0, 0.21425140E+3, + 0.133E+3, 0.115E+3, 0.98890000E+0, 0.99470000E+0, 0.18159050E+3, 0.133E+3, 0.116E+3, + 0.98890000E+0, 0.99480000E+0, 0.14869430E+3, 0.133E+3, 0.117E+3, 0.98890000E+0, 0.99720000E+0, + 0.28230700E+3, 0.133E+3, 0.119E+3, 0.98890000E+0, 0.97670000E+0, 0.53224610E+3, 0.133E+3, + 0.120E+3, 0.98890000E+0, 0.98310000E+0, 0.28445160E+3, 0.133E+3, 0.121E+3, 0.98890000E+0, + 0.18627000E+1, 0.27459290E+3, 0.133E+3, 0.122E+3, 0.98890000E+0, 0.18299000E+1, 0.26902700E+3, + 0.133E+3, 0.123E+3, 0.98890000E+0, 0.19138000E+1, 0.26629390E+3, 0.133E+3, 0.124E+3, + 0.98890000E+0, 0.18269000E+1, 0.24597130E+3, 0.133E+3, 0.125E+3, 0.98890000E+0, 0.16406000E+1, + 0.22781130E+3, 0.133E+3, 0.126E+3, 0.98890000E+0, 0.16483000E+1, 0.21726350E+3, 0.133E+3, + 0.127E+3, 0.98890000E+0, 0.17149000E+1, 0.21232210E+3, 0.133E+3, 0.128E+3, 0.98890000E+0, + 0.17937000E+1, 0.20913220E+3, 0.133E+3, 0.129E+3, 0.98890000E+0, 0.95760000E+0, 0.19727710E+3, + 0.133E+3, 0.130E+3, 0.98890000E+0, 0.19419000E+1, 0.31978710E+3, 0.133E+3, 0.131E+3, + 0.98890000E+0, 0.96010000E+0, 0.28257170E+3, 0.133E+3, 0.132E+3, 0.98890000E+0, 0.94340000E+0, + 0.25419240E+3, 0.133E+3, 0.133E+3, 0.98890000E+0, 0.98890000E+0, 0.25314900E+2, 0.134E+3, + 0.100E+1, 0.99010000E+0, 0.91180000E+0, 0.17028000E+2, 0.134E+3, 0.200E+1, 0.99010000E+0, + 0.00000000E+0, 0.35504500E+3, 0.134E+3, 0.300E+1, 0.99010000E+0, 0.00000000E+0, 0.21516710E+3, + 0.134E+3, 0.400E+1, 0.99010000E+0, 0.00000000E+0, 0.14885900E+3, 0.134E+3, 0.500E+1, + 0.99010000E+0, 0.00000000E+0, 0.10246200E+3, 0.134E+3, 0.600E+1, 0.99010000E+0, 0.00000000E+0, + 0.72556700E+2, 0.134E+3, 0.700E+1, 0.99010000E+0, 0.00000000E+0, 0.55375200E+2, 0.134E+3, + 0.800E+1, 0.99010000E+0, 0.00000000E+0, 0.42202700E+2, 0.134E+3, 0.900E+1, 0.99010000E+0, + 0.00000000E+0, 0.32593500E+2, 0.134E+3, 0.100E+2, 0.99010000E+0, 0.00000000E+0, 0.42577330E+3, + 0.134E+3, 0.110E+2, 0.99010000E+0, 0.00000000E+0, 0.33984270E+3, 0.134E+3, 0.120E+2, + 0.99010000E+0, 0.00000000E+0, 0.31781330E+3, 0.134E+3, 0.130E+2, 0.99010000E+0, 0.00000000E+0, + 0.25511530E+3, 0.134E+3, 0.140E+2, 0.99010000E+0, 0.00000000E+0, 0.20196030E+3, 0.134E+3, + 0.150E+2, 0.99010000E+0, 0.00000000E+0, 0.16917120E+3, 0.134E+3, 0.160E+2, 0.99010000E+0, + 0.00000000E+0, 0.13934530E+3, 0.134E+3, 0.170E+2, 0.99010000E+0, 0.00000000E+0, 0.11476770E+3, + 0.134E+3, 0.180E+2, 0.99010000E+0, 0.00000000E+0, 0.69398180E+3, 0.134E+3, 0.190E+2, + 0.99010000E+0, 0.00000000E+0, 0.58857630E+3, 0.134E+3, 0.200E+2, 0.99010000E+0, 0.00000000E+0, + 0.48933050E+3, 0.134E+3, 0.210E+2, 0.99010000E+0, 0.00000000E+0, 0.47544530E+3, 0.134E+3, + 0.220E+2, 0.99010000E+0, 0.00000000E+0, 0.43692930E+3, 0.134E+3, 0.230E+2, 0.99010000E+0, + 0.00000000E+0, 0.34458580E+3, 0.134E+3, 0.240E+2, 0.99010000E+0, 0.00000000E+0, 0.37811330E+3, + 0.134E+3, 0.250E+2, 0.99010000E+0, 0.00000000E+0, 0.29726970E+3, 0.134E+3, 0.260E+2, + 0.99010000E+0, 0.00000000E+0, 0.31722330E+3, 0.134E+3, 0.270E+2, 0.99010000E+0, 0.00000000E+0, + 0.32556670E+3, 0.134E+3, 0.280E+2, 0.99010000E+0, 0.00000000E+0, 0.24982100E+3, 0.134E+3, + 0.290E+2, 0.99010000E+0, 0.00000000E+0, 0.25919160E+3, 0.134E+3, 0.300E+2, 0.99010000E+0, + 0.00000000E+0, 0.30612750E+3, 0.134E+3, 0.310E+2, 0.99010000E+0, 0.00000000E+0, 0.27376800E+3, + 0.134E+3, 0.320E+2, 0.99010000E+0, 0.00000000E+0, 0.23642060E+3, 0.134E+3, 0.330E+2, + 0.99010000E+0, 0.00000000E+0, 0.21372980E+3, 0.134E+3, 0.340E+2, 0.99010000E+0, 0.00000000E+0, + 0.18840310E+3, 0.134E+3, 0.350E+2, 0.99010000E+0, 0.00000000E+0, 0.16488330E+3, 0.134E+3, + 0.360E+2, 0.99010000E+0, 0.00000000E+0, 0.78009860E+3, 0.134E+3, 0.370E+2, 0.99010000E+0, + 0.00000000E+0, 0.70080150E+3, 0.134E+3, 0.380E+2, 0.99010000E+0, 0.00000000E+0, 0.62089180E+3, + 0.134E+3, 0.390E+2, 0.99010000E+0, 0.00000000E+0, 0.56200010E+3, 0.134E+3, 0.400E+2, + 0.99010000E+0, 0.00000000E+0, 0.51489450E+3, 0.134E+3, 0.410E+2, 0.99010000E+0, 0.00000000E+0, + 0.40077220E+3, 0.134E+3, 0.420E+2, 0.99010000E+0, 0.00000000E+0, 0.44579160E+3, 0.134E+3, + 0.430E+2, 0.99010000E+0, 0.00000000E+0, 0.34259700E+3, 0.134E+3, 0.440E+2, 0.99010000E+0, + 0.00000000E+0, 0.37429000E+3, 0.134E+3, 0.450E+2, 0.99010000E+0, 0.00000000E+0, 0.34804020E+3, + 0.134E+3, 0.460E+2, 0.99010000E+0, 0.00000000E+0, 0.28983280E+3, 0.134E+3, 0.470E+2, + 0.99010000E+0, 0.00000000E+0, 0.30772140E+3, 0.134E+3, 0.480E+2, 0.99010000E+0, 0.00000000E+0, + 0.38283810E+3, 0.134E+3, 0.490E+2, 0.99010000E+0, 0.00000000E+0, 0.35796090E+3, 0.134E+3, + 0.500E+2, 0.99010000E+0, 0.00000000E+0, 0.32248120E+3, 0.134E+3, 0.510E+2, 0.99010000E+0, + 0.00000000E+0, 0.30115060E+3, 0.134E+3, 0.520E+2, 0.99010000E+0, 0.00000000E+0, 0.27413770E+3, + 0.134E+3, 0.530E+2, 0.99010000E+0, 0.00000000E+0, 0.24798670E+3, 0.134E+3, 0.540E+2, + 0.99010000E+0, 0.00000000E+0, 0.95163050E+3, 0.134E+3, 0.550E+2, 0.99010000E+0, 0.00000000E+0, + 0.89062640E+3, 0.134E+3, 0.560E+2, 0.99010000E+0, 0.00000000E+0, 0.79124710E+3, 0.134E+3, + 0.570E+2, 0.99010000E+0, 0.00000000E+0, 0.38031600E+3, 0.134E+3, 0.580E+2, 0.99010000E+0, + 0.27991000E+1, 0.79188170E+3, 0.134E+3, 0.590E+2, 0.99010000E+0, 0.00000000E+0, 0.76169980E+3, + 0.134E+3, 0.600E+2, 0.99010000E+0, 0.00000000E+0, 0.74294350E+3, 0.134E+3, 0.610E+2, + 0.99010000E+0, 0.00000000E+0, 0.72565360E+3, 0.134E+3, 0.620E+2, 0.99010000E+0, 0.00000000E+0, + 0.71033760E+3, 0.134E+3, 0.630E+2, 0.99010000E+0, 0.00000000E+0, 0.56579140E+3, 0.134E+3, + 0.640E+2, 0.99010000E+0, 0.00000000E+0, 0.62617050E+3, 0.134E+3, 0.650E+2, 0.99010000E+0, + 0.00000000E+0, 0.60528280E+3, 0.134E+3, 0.660E+2, 0.99010000E+0, 0.00000000E+0, 0.64237950E+3, + 0.134E+3, 0.670E+2, 0.99010000E+0, 0.00000000E+0, 0.62891080E+3, 0.134E+3, 0.680E+2, + 0.99010000E+0, 0.00000000E+0, 0.61686660E+3, 0.134E+3, 0.690E+2, 0.99010000E+0, 0.00000000E+0, + 0.60931460E+3, 0.134E+3, 0.700E+2, 0.99010000E+0, 0.00000000E+0, 0.51790690E+3, 0.134E+3, + 0.710E+2, 0.99010000E+0, 0.00000000E+0, 0.51523880E+3, 0.134E+3, 0.720E+2, 0.99010000E+0, + 0.00000000E+0, 0.47346190E+3, 0.134E+3, 0.730E+2, 0.99010000E+0, 0.00000000E+0, 0.40207780E+3, + 0.134E+3, 0.740E+2, 0.99010000E+0, 0.00000000E+0, 0.41003520E+3, 0.134E+3, 0.750E+2, + 0.99010000E+0, 0.00000000E+0, 0.37374220E+3, 0.134E+3, 0.760E+2, 0.99010000E+0, 0.00000000E+0, + 0.34383760E+3, 0.134E+3, 0.770E+2, 0.99010000E+0, 0.00000000E+0, 0.28699450E+3, 0.134E+3, + 0.780E+2, 0.99010000E+0, 0.00000000E+0, 0.26861450E+3, 0.134E+3, 0.790E+2, 0.99010000E+0, + 0.00000000E+0, 0.27687780E+3, 0.134E+3, 0.800E+2, 0.99010000E+0, 0.00000000E+0, 0.39433850E+3, + 0.134E+3, 0.810E+2, 0.99010000E+0, 0.00000000E+0, 0.38873570E+3, 0.134E+3, 0.820E+2, + 0.99010000E+0, 0.00000000E+0, 0.36061850E+3, 0.134E+3, 0.830E+2, 0.99010000E+0, 0.00000000E+0, + 0.34584750E+3, 0.134E+3, 0.840E+2, 0.99010000E+0, 0.00000000E+0, 0.32125280E+3, 0.134E+3, + 0.850E+2, 0.99010000E+0, 0.00000000E+0, 0.29613640E+3, 0.134E+3, 0.860E+2, 0.99010000E+0, + 0.00000000E+0, 0.90670650E+3, 0.134E+3, 0.870E+2, 0.99010000E+0, 0.00000000E+0, 0.88597380E+3, + 0.134E+3, 0.880E+2, 0.99010000E+0, 0.00000000E+0, 0.79097170E+3, 0.134E+3, 0.890E+2, + 0.99010000E+0, 0.00000000E+0, 0.71920180E+3, 0.134E+3, 0.900E+2, 0.99010000E+0, 0.00000000E+0, + 0.71002990E+3, 0.134E+3, 0.910E+2, 0.99010000E+0, 0.00000000E+0, 0.68765590E+3, 0.134E+3, + 0.920E+2, 0.99010000E+0, 0.00000000E+0, 0.70268800E+3, 0.134E+3, 0.930E+2, 0.99010000E+0, + 0.00000000E+0, 0.68135890E+3, 0.134E+3, 0.940E+2, 0.99010000E+0, 0.00000000E+0, 0.40211700E+2, + 0.134E+3, 0.101E+3, 0.99010000E+0, 0.00000000E+0, 0.12555640E+3, 0.134E+3, 0.103E+3, + 0.99010000E+0, 0.98650000E+0, 0.16106370E+3, 0.134E+3, 0.104E+3, 0.99010000E+0, 0.98080000E+0, + 0.12588880E+3, 0.134E+3, 0.105E+3, 0.99010000E+0, 0.97060000E+0, 0.96087200E+2, 0.134E+3, + 0.106E+3, 0.99010000E+0, 0.98680000E+0, 0.67679600E+2, 0.134E+3, 0.107E+3, 0.99010000E+0, + 0.99440000E+0, 0.49766500E+2, 0.134E+3, 0.108E+3, 0.99010000E+0, 0.99250000E+0, 0.34588200E+2, + 0.134E+3, 0.109E+3, 0.99010000E+0, 0.99820000E+0, 0.18260620E+3, 0.134E+3, 0.111E+3, + 0.99010000E+0, 0.96840000E+0, 0.28192490E+3, 0.134E+3, 0.112E+3, 0.99010000E+0, 0.96280000E+0, + 0.28901630E+3, 0.134E+3, 0.113E+3, 0.99010000E+0, 0.96480000E+0, 0.23642530E+3, 0.134E+3, + 0.114E+3, 0.99010000E+0, 0.95070000E+0, 0.19613740E+3, 0.134E+3, 0.115E+3, 0.99010000E+0, + 0.99470000E+0, 0.16726720E+3, 0.134E+3, 0.116E+3, 0.99010000E+0, 0.99480000E+0, 0.13787350E+3, + 0.134E+3, 0.117E+3, 0.99010000E+0, 0.99720000E+0, 0.25453760E+3, 0.134E+3, 0.119E+3, + 0.99010000E+0, 0.97670000E+0, 0.47198210E+3, 0.134E+3, 0.120E+3, 0.99010000E+0, 0.98310000E+0, + 0.25812950E+3, 0.134E+3, 0.121E+3, 0.99010000E+0, 0.18627000E+1, 0.24934370E+3, 0.134E+3, + 0.122E+3, 0.99010000E+0, 0.18299000E+1, 0.24427270E+3, 0.134E+3, 0.123E+3, 0.99010000E+0, + 0.19138000E+1, 0.24158030E+3, 0.134E+3, 0.124E+3, 0.99010000E+0, 0.18269000E+1, 0.22407570E+3, + 0.134E+3, 0.125E+3, 0.99010000E+0, 0.16406000E+1, 0.20787480E+3, 0.134E+3, 0.126E+3, + 0.99010000E+0, 0.16483000E+1, 0.19829930E+3, 0.134E+3, 0.127E+3, 0.99010000E+0, 0.17149000E+1, + 0.19372130E+3, 0.134E+3, 0.128E+3, 0.99010000E+0, 0.17937000E+1, 0.19016850E+3, 0.134E+3, + 0.129E+3, 0.99010000E+0, 0.95760000E+0, 0.18048120E+3, 0.134E+3, 0.130E+3, 0.99010000E+0, + 0.19419000E+1, 0.28854930E+3, 0.134E+3, 0.131E+3, 0.99010000E+0, 0.96010000E+0, 0.25695230E+3, + 0.134E+3, 0.132E+3, 0.99010000E+0, 0.94340000E+0, 0.23257840E+3, 0.134E+3, 0.133E+3, + 0.99010000E+0, 0.98890000E+0, 0.21378620E+3, 0.134E+3, 0.134E+3, 0.99010000E+0, 0.99010000E+0, + 0.22623000E+2, 0.135E+3, 0.100E+1, 0.99740000E+0, 0.91180000E+0, 0.15538700E+2, 0.135E+3, + 0.200E+1, 0.99740000E+0, 0.00000000E+0, 0.29768350E+3, 0.135E+3, 0.300E+1, 0.99740000E+0, + 0.00000000E+0, 0.18488320E+3, 0.135E+3, 0.400E+1, 0.99740000E+0, 0.00000000E+0, 0.13018810E+3, + 0.135E+3, 0.500E+1, 0.99740000E+0, 0.00000000E+0, 0.90934300E+2, 0.135E+3, 0.600E+1, + 0.99740000E+0, 0.00000000E+0, 0.65154300E+2, 0.135E+3, 0.700E+1, 0.99740000E+0, 0.00000000E+0, + 0.50163200E+2, 0.135E+3, 0.800E+1, 0.99740000E+0, 0.00000000E+0, 0.38529400E+2, 0.135E+3, + 0.900E+1, 0.99740000E+0, 0.00000000E+0, 0.29950100E+2, 0.135E+3, 0.100E+2, 0.99740000E+0, + 0.00000000E+0, 0.35772460E+3, 0.135E+3, 0.110E+2, 0.99740000E+0, 0.00000000E+0, 0.29072760E+3, + 0.135E+3, 0.120E+2, 0.99740000E+0, 0.00000000E+0, 0.27418940E+3, 0.135E+3, 0.130E+2, + 0.99740000E+0, 0.00000000E+0, 0.22268120E+3, 0.135E+3, 0.140E+2, 0.99740000E+0, 0.00000000E+0, + 0.17819840E+3, 0.135E+3, 0.150E+2, 0.99740000E+0, 0.00000000E+0, 0.15042030E+3, 0.135E+3, + 0.160E+2, 0.99740000E+0, 0.00000000E+0, 0.12484950E+3, 0.135E+3, 0.170E+2, 0.99740000E+0, + 0.00000000E+0, 0.10354670E+3, 0.135E+3, 0.180E+2, 0.99740000E+0, 0.00000000E+0, 0.58289140E+3, + 0.135E+3, 0.190E+2, 0.99740000E+0, 0.00000000E+0, 0.50041520E+3, 0.135E+3, 0.200E+2, + 0.99740000E+0, 0.00000000E+0, 0.41736480E+3, 0.135E+3, 0.210E+2, 0.99740000E+0, 0.00000000E+0, + 0.40709700E+3, 0.135E+3, 0.220E+2, 0.99740000E+0, 0.00000000E+0, 0.37492830E+3, 0.135E+3, + 0.230E+2, 0.99740000E+0, 0.00000000E+0, 0.29636070E+3, 0.135E+3, 0.240E+2, 0.99740000E+0, + 0.00000000E+0, 0.32549450E+3, 0.135E+3, 0.250E+2, 0.99740000E+0, 0.00000000E+0, 0.25659390E+3, + 0.135E+3, 0.260E+2, 0.99740000E+0, 0.00000000E+0, 0.27446200E+3, 0.135E+3, 0.270E+2, + 0.99740000E+0, 0.00000000E+0, 0.28101540E+3, 0.135E+3, 0.280E+2, 0.99740000E+0, 0.00000000E+0, + 0.21621400E+3, 0.135E+3, 0.290E+2, 0.99740000E+0, 0.00000000E+0, 0.22534570E+3, 0.135E+3, + 0.300E+2, 0.99740000E+0, 0.00000000E+0, 0.26539390E+3, 0.135E+3, 0.310E+2, 0.99740000E+0, + 0.00000000E+0, 0.23936360E+3, 0.135E+3, 0.320E+2, 0.99740000E+0, 0.00000000E+0, 0.20849570E+3, + 0.135E+3, 0.330E+2, 0.99740000E+0, 0.00000000E+0, 0.18959740E+3, 0.135E+3, 0.340E+2, + 0.99740000E+0, 0.00000000E+0, 0.16817910E+3, 0.135E+3, 0.350E+2, 0.99740000E+0, 0.00000000E+0, + 0.14806890E+3, 0.135E+3, 0.360E+2, 0.99740000E+0, 0.00000000E+0, 0.65665740E+3, 0.135E+3, + 0.370E+2, 0.99740000E+0, 0.00000000E+0, 0.59602140E+3, 0.135E+3, 0.380E+2, 0.99740000E+0, + 0.00000000E+0, 0.53134260E+3, 0.135E+3, 0.390E+2, 0.99740000E+0, 0.00000000E+0, 0.48298730E+3, + 0.135E+3, 0.400E+2, 0.99740000E+0, 0.00000000E+0, 0.44388480E+3, 0.135E+3, 0.410E+2, + 0.99740000E+0, 0.00000000E+0, 0.34768000E+3, 0.135E+3, 0.420E+2, 0.99740000E+0, 0.00000000E+0, + 0.38579860E+3, 0.135E+3, 0.430E+2, 0.99740000E+0, 0.00000000E+0, 0.29851740E+3, 0.135E+3, + 0.440E+2, 0.99740000E+0, 0.00000000E+0, 0.32566500E+3, 0.135E+3, 0.450E+2, 0.99740000E+0, + 0.00000000E+0, 0.30341070E+3, 0.135E+3, 0.460E+2, 0.99740000E+0, 0.00000000E+0, 0.25300950E+3, + 0.135E+3, 0.470E+2, 0.99740000E+0, 0.00000000E+0, 0.26894910E+3, 0.135E+3, 0.480E+2, + 0.99740000E+0, 0.00000000E+0, 0.33247910E+3, 0.135E+3, 0.490E+2, 0.99740000E+0, 0.00000000E+0, + 0.31279940E+3, 0.135E+3, 0.500E+2, 0.99740000E+0, 0.00000000E+0, 0.28377610E+3, 0.135E+3, + 0.510E+2, 0.99740000E+0, 0.00000000E+0, 0.26623860E+3, 0.135E+3, 0.520E+2, 0.99740000E+0, + 0.00000000E+0, 0.24362960E+3, 0.135E+3, 0.530E+2, 0.99740000E+0, 0.00000000E+0, 0.22153670E+3, + 0.135E+3, 0.540E+2, 0.99740000E+0, 0.00000000E+0, 0.80186140E+3, 0.135E+3, 0.550E+2, + 0.99740000E+0, 0.00000000E+0, 0.75662710E+3, 0.135E+3, 0.560E+2, 0.99740000E+0, 0.00000000E+0, + 0.67619300E+3, 0.135E+3, 0.570E+2, 0.99740000E+0, 0.00000000E+0, 0.33452620E+3, 0.135E+3, + 0.580E+2, 0.99740000E+0, 0.27991000E+1, 0.67428760E+3, 0.135E+3, 0.590E+2, 0.99740000E+0, + 0.00000000E+0, 0.64912820E+3, 0.135E+3, 0.600E+2, 0.99740000E+0, 0.00000000E+0, 0.63328350E+3, + 0.135E+3, 0.610E+2, 0.99740000E+0, 0.00000000E+0, 0.61865400E+3, 0.135E+3, 0.620E+2, + 0.99740000E+0, 0.00000000E+0, 0.60569940E+3, 0.135E+3, 0.630E+2, 0.99740000E+0, 0.00000000E+0, + 0.48634440E+3, 0.135E+3, 0.640E+2, 0.99740000E+0, 0.00000000E+0, 0.53364850E+3, 0.135E+3, + 0.650E+2, 0.99740000E+0, 0.00000000E+0, 0.51649050E+3, 0.135E+3, 0.660E+2, 0.99740000E+0, + 0.00000000E+0, 0.54846290E+3, 0.135E+3, 0.670E+2, 0.99740000E+0, 0.00000000E+0, 0.53700790E+3, + 0.135E+3, 0.680E+2, 0.99740000E+0, 0.00000000E+0, 0.52681470E+3, 0.135E+3, 0.690E+2, + 0.99740000E+0, 0.00000000E+0, 0.52016740E+3, 0.135E+3, 0.700E+2, 0.99740000E+0, 0.00000000E+0, + 0.44455160E+3, 0.135E+3, 0.710E+2, 0.99740000E+0, 0.00000000E+0, 0.44488510E+3, 0.135E+3, + 0.720E+2, 0.99740000E+0, 0.00000000E+0, 0.41064300E+3, 0.135E+3, 0.730E+2, 0.99740000E+0, + 0.00000000E+0, 0.35042340E+3, 0.135E+3, 0.740E+2, 0.99740000E+0, 0.00000000E+0, 0.35779320E+3, + 0.135E+3, 0.750E+2, 0.99740000E+0, 0.00000000E+0, 0.32743170E+3, 0.135E+3, 0.760E+2, + 0.99740000E+0, 0.00000000E+0, 0.30224750E+3, 0.135E+3, 0.770E+2, 0.99740000E+0, 0.00000000E+0, + 0.25348160E+3, 0.135E+3, 0.780E+2, 0.99740000E+0, 0.00000000E+0, 0.23768320E+3, 0.135E+3, + 0.790E+2, 0.99740000E+0, 0.00000000E+0, 0.24514110E+3, 0.135E+3, 0.800E+2, 0.99740000E+0, + 0.00000000E+0, 0.34374040E+3, 0.135E+3, 0.810E+2, 0.99740000E+0, 0.00000000E+0, 0.34024220E+3, + 0.135E+3, 0.820E+2, 0.99740000E+0, 0.00000000E+0, 0.31748380E+3, 0.135E+3, 0.830E+2, + 0.99740000E+0, 0.00000000E+0, 0.30560970E+3, 0.135E+3, 0.840E+2, 0.99740000E+0, 0.00000000E+0, + 0.28522290E+3, 0.135E+3, 0.850E+2, 0.99740000E+0, 0.00000000E+0, 0.26413340E+3, 0.135E+3, + 0.860E+2, 0.99740000E+0, 0.00000000E+0, 0.76779060E+3, 0.135E+3, 0.870E+2, 0.99740000E+0, + 0.00000000E+0, 0.75526170E+3, 0.135E+3, 0.880E+2, 0.99740000E+0, 0.00000000E+0, 0.67787670E+3, + 0.135E+3, 0.890E+2, 0.99740000E+0, 0.00000000E+0, 0.62082600E+3, 0.135E+3, 0.900E+2, + 0.99740000E+0, 0.00000000E+0, 0.61130750E+3, 0.135E+3, 0.910E+2, 0.99740000E+0, 0.00000000E+0, + 0.59218710E+3, 0.135E+3, 0.920E+2, 0.99740000E+0, 0.00000000E+0, 0.60258350E+3, 0.135E+3, + 0.930E+2, 0.99740000E+0, 0.00000000E+0, 0.58469980E+3, 0.135E+3, 0.940E+2, 0.99740000E+0, + 0.00000000E+0, 0.35512300E+2, 0.135E+3, 0.101E+3, 0.99740000E+0, 0.00000000E+0, 0.10820480E+3, + 0.135E+3, 0.103E+3, 0.99740000E+0, 0.98650000E+0, 0.13936170E+3, 0.135E+3, 0.104E+3, + 0.99740000E+0, 0.98080000E+0, 0.11058020E+3, 0.135E+3, 0.105E+3, 0.99740000E+0, 0.97060000E+0, + 0.85326500E+2, 0.135E+3, 0.106E+3, 0.99740000E+0, 0.98680000E+0, 0.60835900E+2, 0.135E+3, + 0.107E+3, 0.99740000E+0, 0.99440000E+0, 0.45201900E+2, 0.135E+3, 0.108E+3, 0.99740000E+0, + 0.99250000E+0, 0.31831300E+2, 0.135E+3, 0.109E+3, 0.99740000E+0, 0.99820000E+0, 0.15710050E+3, + 0.135E+3, 0.111E+3, 0.99740000E+0, 0.96840000E+0, 0.24214760E+3, 0.135E+3, 0.112E+3, + 0.99740000E+0, 0.96280000E+0, 0.24992480E+3, 0.135E+3, 0.113E+3, 0.99740000E+0, 0.96480000E+0, + 0.20678800E+3, 0.135E+3, 0.114E+3, 0.99740000E+0, 0.95070000E+0, 0.17315820E+3, 0.135E+3, + 0.115E+3, 0.99740000E+0, 0.99470000E+0, 0.14872190E+3, 0.135E+3, 0.116E+3, 0.99740000E+0, + 0.99480000E+0, 0.12352740E+3, 0.135E+3, 0.117E+3, 0.99740000E+0, 0.99720000E+0, 0.22116420E+3, + 0.135E+3, 0.119E+3, 0.99740000E+0, 0.97670000E+0, 0.40253800E+3, 0.135E+3, 0.120E+3, + 0.99740000E+0, 0.98310000E+0, 0.22577840E+3, 0.135E+3, 0.121E+3, 0.99740000E+0, 0.18627000E+1, + 0.21827110E+3, 0.135E+3, 0.122E+3, 0.99740000E+0, 0.18299000E+1, 0.21382760E+3, 0.135E+3, + 0.123E+3, 0.99740000E+0, 0.19138000E+1, 0.21128090E+3, 0.135E+3, 0.124E+3, 0.99740000E+0, + 0.18269000E+1, 0.19683950E+3, 0.135E+3, 0.125E+3, 0.99740000E+0, 0.16406000E+1, 0.18295500E+3, + 0.135E+3, 0.126E+3, 0.99740000E+0, 0.16483000E+1, 0.17459100E+3, 0.135E+3, 0.127E+3, + 0.99740000E+0, 0.17149000E+1, 0.17050040E+3, 0.135E+3, 0.128E+3, 0.99740000E+0, 0.17937000E+1, + 0.16678160E+3, 0.135E+3, 0.129E+3, 0.99740000E+0, 0.95760000E+0, 0.15930490E+3, 0.135E+3, + 0.130E+3, 0.99740000E+0, 0.19419000E+1, 0.25072470E+3, 0.135E+3, 0.131E+3, 0.99740000E+0, + 0.96010000E+0, 0.22517920E+3, 0.135E+3, 0.132E+3, 0.99740000E+0, 0.94340000E+0, 0.20523050E+3, + 0.135E+3, 0.133E+3, 0.99740000E+0, 0.98890000E+0, 0.18964080E+3, 0.135E+3, 0.134E+3, + 0.99740000E+0, 0.99010000E+0, 0.16923750E+3, 0.135E+3, 0.135E+3, 0.99740000E+0, 0.99740000E+0, + 0.35196300E+2, 0.137E+3, 0.100E+1, 0.97380000E+0, 0.91180000E+0, 0.22623100E+2, 0.137E+3, + 0.200E+1, 0.97380000E+0, 0.00000000E+0, 0.65740760E+3, 0.137E+3, 0.300E+1, 0.97380000E+0, + 0.00000000E+0, 0.34543780E+3, 0.137E+3, 0.400E+1, 0.97380000E+0, 0.00000000E+0, 0.22250810E+3, + 0.137E+3, 0.500E+1, 0.97380000E+0, 0.00000000E+0, 0.14599740E+3, 0.137E+3, 0.600E+1, + 0.97380000E+0, 0.00000000E+0, 0.10014180E+3, 0.137E+3, 0.700E+1, 0.97380000E+0, 0.00000000E+0, + 0.74886800E+2, 0.137E+3, 0.800E+1, 0.97380000E+0, 0.00000000E+0, 0.56177900E+2, 0.137E+3, + 0.900E+1, 0.97380000E+0, 0.00000000E+0, 0.42895700E+2, 0.137E+3, 0.100E+2, 0.97380000E+0, + 0.00000000E+0, 0.78185270E+3, 0.137E+3, 0.110E+2, 0.97380000E+0, 0.00000000E+0, 0.55913370E+3, + 0.137E+3, 0.120E+2, 0.97380000E+0, 0.00000000E+0, 0.50299330E+3, 0.137E+3, 0.130E+2, + 0.97380000E+0, 0.00000000E+0, 0.38390840E+3, 0.137E+3, 0.140E+2, 0.97380000E+0, 0.00000000E+0, + 0.29216040E+3, 0.137E+3, 0.150E+2, 0.97380000E+0, 0.00000000E+0, 0.23905720E+3, 0.137E+3, + 0.160E+2, 0.97380000E+0, 0.00000000E+0, 0.19278770E+3, 0.137E+3, 0.170E+2, 0.97380000E+0, + 0.00000000E+0, 0.15610100E+3, 0.137E+3, 0.180E+2, 0.97380000E+0, 0.00000000E+0, 0.13058840E+4, + 0.137E+3, 0.190E+2, 0.97380000E+0, 0.00000000E+0, 0.10130706E+4, 0.137E+3, 0.200E+2, + 0.97380000E+0, 0.00000000E+0, 0.82610410E+3, 0.137E+3, 0.210E+2, 0.97380000E+0, 0.00000000E+0, + 0.78941170E+3, 0.137E+3, 0.220E+2, 0.97380000E+0, 0.00000000E+0, 0.71821250E+3, 0.137E+3, + 0.230E+2, 0.97380000E+0, 0.00000000E+0, 0.56618560E+3, 0.137E+3, 0.240E+2, 0.97380000E+0, + 0.00000000E+0, 0.61264440E+3, 0.137E+3, 0.250E+2, 0.97380000E+0, 0.00000000E+0, 0.48062360E+3, + 0.137E+3, 0.260E+2, 0.97380000E+0, 0.00000000E+0, 0.50159400E+3, 0.137E+3, 0.270E+2, + 0.97380000E+0, 0.00000000E+0, 0.51998260E+3, 0.137E+3, 0.280E+2, 0.97380000E+0, 0.00000000E+0, + 0.39935340E+3, 0.137E+3, 0.290E+2, 0.97380000E+0, 0.00000000E+0, 0.40105480E+3, 0.137E+3, + 0.300E+2, 0.97380000E+0, 0.00000000E+0, 0.47797370E+3, 0.137E+3, 0.310E+2, 0.97380000E+0, + 0.00000000E+0, 0.41103890E+3, 0.137E+3, 0.320E+2, 0.97380000E+0, 0.00000000E+0, 0.34339780E+3, + 0.137E+3, 0.330E+2, 0.97380000E+0, 0.00000000E+0, 0.30453120E+3, 0.137E+3, 0.340E+2, + 0.97380000E+0, 0.00000000E+0, 0.26345920E+3, 0.137E+3, 0.350E+2, 0.97380000E+0, 0.00000000E+0, + 0.22685900E+3, 0.137E+3, 0.360E+2, 0.97380000E+0, 0.00000000E+0, 0.14577817E+4, 0.137E+3, + 0.370E+2, 0.97380000E+0, 0.00000000E+0, 0.12108108E+4, 0.137E+3, 0.380E+2, 0.97380000E+0, + 0.00000000E+0, 0.10374434E+4, 0.137E+3, 0.390E+2, 0.97380000E+0, 0.00000000E+0, 0.92013580E+3, + 0.137E+3, 0.400E+2, 0.97380000E+0, 0.00000000E+0, 0.83213680E+3, 0.137E+3, 0.410E+2, + 0.97380000E+0, 0.00000000E+0, 0.63394710E+3, 0.137E+3, 0.420E+2, 0.97380000E+0, 0.00000000E+0, + 0.71077790E+3, 0.137E+3, 0.430E+2, 0.97380000E+0, 0.00000000E+0, 0.53361350E+3, 0.137E+3, + 0.440E+2, 0.97380000E+0, 0.00000000E+0, 0.58237420E+3, 0.137E+3, 0.450E+2, 0.97380000E+0, + 0.00000000E+0, 0.53725650E+3, 0.137E+3, 0.460E+2, 0.97380000E+0, 0.00000000E+0, 0.45047140E+3, + 0.137E+3, 0.470E+2, 0.97380000E+0, 0.00000000E+0, 0.47031190E+3, 0.137E+3, 0.480E+2, + 0.97380000E+0, 0.00000000E+0, 0.59989870E+3, 0.137E+3, 0.490E+2, 0.97380000E+0, 0.00000000E+0, + 0.54287770E+3, 0.137E+3, 0.500E+2, 0.97380000E+0, 0.00000000E+0, 0.47456410E+3, 0.137E+3, + 0.510E+2, 0.97380000E+0, 0.00000000E+0, 0.43555550E+3, 0.137E+3, 0.520E+2, 0.97380000E+0, + 0.00000000E+0, 0.38946840E+3, 0.137E+3, 0.530E+2, 0.97380000E+0, 0.00000000E+0, 0.34667910E+3, + 0.137E+3, 0.540E+2, 0.97380000E+0, 0.00000000E+0, 0.17768880E+4, 0.137E+3, 0.550E+2, + 0.97380000E+0, 0.00000000E+0, 0.15569958E+4, 0.137E+3, 0.560E+2, 0.97380000E+0, 0.00000000E+0, + 0.13375010E+4, 0.137E+3, 0.570E+2, 0.97380000E+0, 0.00000000E+0, 0.56314800E+3, 0.137E+3, + 0.580E+2, 0.97380000E+0, 0.27991000E+1, 0.13695245E+4, 0.137E+3, 0.590E+2, 0.97380000E+0, + 0.00000000E+0, 0.13097014E+4, 0.137E+3, 0.600E+2, 0.97380000E+0, 0.00000000E+0, 0.12753968E+4, + 0.137E+3, 0.610E+2, 0.97380000E+0, 0.00000000E+0, 0.12439950E+4, 0.137E+3, 0.620E+2, + 0.97380000E+0, 0.00000000E+0, 0.12161018E+4, 0.137E+3, 0.630E+2, 0.97380000E+0, 0.00000000E+0, + 0.93460820E+3, 0.137E+3, 0.640E+2, 0.97380000E+0, 0.00000000E+0, 0.10930934E+4, 0.137E+3, + 0.650E+2, 0.97380000E+0, 0.00000000E+0, 0.10500925E+4, 0.137E+3, 0.660E+2, 0.97380000E+0, + 0.00000000E+0, 0.10903500E+4, 0.137E+3, 0.670E+2, 0.97380000E+0, 0.00000000E+0, 0.10664469E+4, + 0.137E+3, 0.680E+2, 0.97380000E+0, 0.00000000E+0, 0.10446045E+4, 0.137E+3, 0.690E+2, + 0.97380000E+0, 0.00000000E+0, 0.10333196E+4, 0.137E+3, 0.700E+2, 0.97380000E+0, 0.00000000E+0, + 0.85724780E+3, 0.137E+3, 0.710E+2, 0.97380000E+0, 0.00000000E+0, 0.82420500E+3, 0.137E+3, + 0.720E+2, 0.97380000E+0, 0.00000000E+0, 0.74273970E+3, 0.137E+3, 0.730E+2, 0.97380000E+0, + 0.00000000E+0, 0.62209770E+3, 0.137E+3, 0.740E+2, 0.97380000E+0, 0.00000000E+0, 0.62947280E+3, + 0.137E+3, 0.750E+2, 0.97380000E+0, 0.00000000E+0, 0.56455160E+3, 0.137E+3, 0.760E+2, + 0.97380000E+0, 0.00000000E+0, 0.51279660E+3, 0.137E+3, 0.770E+2, 0.97380000E+0, 0.00000000E+0, + 0.42290190E+3, 0.137E+3, 0.780E+2, 0.97380000E+0, 0.00000000E+0, 0.39392880E+3, 0.137E+3, + 0.790E+2, 0.97380000E+0, 0.00000000E+0, 0.40326450E+3, 0.137E+3, 0.800E+2, 0.97380000E+0, + 0.00000000E+0, 0.61404690E+3, 0.137E+3, 0.810E+2, 0.97380000E+0, 0.00000000E+0, 0.58982750E+3, + 0.137E+3, 0.820E+2, 0.97380000E+0, 0.00000000E+0, 0.53239070E+3, 0.137E+3, 0.830E+2, + 0.97380000E+0, 0.00000000E+0, 0.50286730E+3, 0.137E+3, 0.840E+2, 0.97380000E+0, 0.00000000E+0, + 0.45900050E+3, 0.137E+3, 0.850E+2, 0.97380000E+0, 0.00000000E+0, 0.41673210E+3, 0.137E+3, + 0.860E+2, 0.97380000E+0, 0.00000000E+0, 0.16476456E+4, 0.137E+3, 0.870E+2, 0.97380000E+0, + 0.00000000E+0, 0.15223656E+4, 0.137E+3, 0.880E+2, 0.97380000E+0, 0.00000000E+0, 0.13176426E+4, + 0.137E+3, 0.890E+2, 0.97380000E+0, 0.00000000E+0, 0.11578649E+4, 0.137E+3, 0.900E+2, + 0.97380000E+0, 0.00000000E+0, 0.11634976E+4, 0.137E+3, 0.910E+2, 0.97380000E+0, 0.00000000E+0, + 0.11259076E+4, 0.137E+3, 0.920E+2, 0.97380000E+0, 0.00000000E+0, 0.11753584E+4, 0.137E+3, + 0.930E+2, 0.97380000E+0, 0.00000000E+0, 0.11351209E+4, 0.137E+3, 0.940E+2, 0.97380000E+0, + 0.00000000E+0, 0.57903900E+2, 0.137E+3, 0.101E+3, 0.97380000E+0, 0.00000000E+0, 0.19967710E+3, + 0.137E+3, 0.103E+3, 0.97380000E+0, 0.98650000E+0, 0.25295740E+3, 0.137E+3, 0.104E+3, + 0.97380000E+0, 0.98080000E+0, 0.18572060E+3, 0.137E+3, 0.105E+3, 0.97380000E+0, 0.97060000E+0, + 0.13721250E+3, 0.137E+3, 0.106E+3, 0.97380000E+0, 0.98680000E+0, 0.93458400E+2, 0.137E+3, + 0.107E+3, 0.97380000E+0, 0.99440000E+0, 0.67004500E+2, 0.137E+3, 0.108E+3, 0.97380000E+0, + 0.99250000E+0, 0.45248900E+2, 0.137E+3, 0.109E+3, 0.97380000E+0, 0.99820000E+0, 0.29467950E+3, + 0.137E+3, 0.111E+3, 0.97380000E+0, 0.96840000E+0, 0.45778310E+3, 0.137E+3, 0.112E+3, + 0.97380000E+0, 0.96280000E+0, 0.45336360E+3, 0.137E+3, 0.113E+3, 0.97380000E+0, 0.96480000E+0, + 0.35341420E+3, 0.137E+3, 0.114E+3, 0.97380000E+0, 0.95070000E+0, 0.28343680E+3, 0.137E+3, + 0.115E+3, 0.97380000E+0, 0.99470000E+0, 0.23654670E+3, 0.137E+3, 0.116E+3, 0.97380000E+0, + 0.99480000E+0, 0.19086020E+3, 0.137E+3, 0.117E+3, 0.97380000E+0, 0.99720000E+0, 0.40103710E+3, + 0.137E+3, 0.119E+3, 0.97380000E+0, 0.97670000E+0, 0.81234890E+3, 0.137E+3, 0.120E+3, + 0.97380000E+0, 0.98310000E+0, 0.38990570E+3, 0.137E+3, 0.121E+3, 0.97380000E+0, 0.18627000E+1, + 0.37639190E+3, 0.137E+3, 0.122E+3, 0.97380000E+0, 0.18299000E+1, 0.36906490E+3, 0.137E+3, + 0.123E+3, 0.97380000E+0, 0.19138000E+1, 0.36686860E+3, 0.137E+3, 0.124E+3, 0.97380000E+0, + 0.18269000E+1, 0.33222150E+3, 0.137E+3, 0.125E+3, 0.97380000E+0, 0.16406000E+1, 0.30627200E+3, + 0.137E+3, 0.126E+3, 0.97380000E+0, 0.16483000E+1, 0.29229920E+3, 0.137E+3, 0.127E+3, + 0.97380000E+0, 0.17149000E+1, 0.28612410E+3, 0.137E+3, 0.128E+3, 0.97380000E+0, 0.17937000E+1, + 0.28601310E+3, 0.137E+3, 0.129E+3, 0.97380000E+0, 0.95760000E+0, 0.26273320E+3, 0.137E+3, + 0.130E+3, 0.97380000E+0, 0.19419000E+1, 0.44607980E+3, 0.137E+3, 0.131E+3, 0.97380000E+0, + 0.96010000E+0, 0.38250120E+3, 0.137E+3, 0.132E+3, 0.97380000E+0, 0.94340000E+0, 0.33721600E+3, + 0.137E+3, 0.133E+3, 0.97380000E+0, 0.98890000E+0, 0.30472790E+3, 0.137E+3, 0.134E+3, + 0.97380000E+0, 0.99010000E+0, 0.26546470E+3, 0.137E+3, 0.135E+3, 0.97380000E+0, 0.99740000E+0, + 0.47625910E+3, 0.137E+3, 0.137E+3, 0.97380000E+0, 0.97380000E+0, 0.64406500E+2, 0.138E+3, + 0.100E+1, 0.98010000E+0, 0.91180000E+0, 0.38833300E+2, 0.138E+3, 0.200E+1, 0.98010000E+0, + 0.00000000E+0, 0.16182465E+4, 0.138E+3, 0.300E+1, 0.98010000E+0, 0.00000000E+0, 0.73479260E+3, + 0.138E+3, 0.400E+1, 0.98010000E+0, 0.00000000E+0, 0.44112610E+3, 0.138E+3, 0.500E+1, + 0.98010000E+0, 0.00000000E+0, 0.27470310E+3, 0.138E+3, 0.600E+1, 0.98010000E+0, 0.00000000E+0, + 0.18119730E+3, 0.138E+3, 0.700E+1, 0.98010000E+0, 0.00000000E+0, 0.13178460E+3, 0.138E+3, + 0.800E+1, 0.98010000E+0, 0.00000000E+0, 0.96508000E+2, 0.138E+3, 0.900E+1, 0.98010000E+0, + 0.00000000E+0, 0.72270300E+2, 0.138E+3, 0.100E+2, 0.98010000E+0, 0.00000000E+0, 0.19079592E+4, + 0.138E+3, 0.110E+2, 0.98010000E+0, 0.00000000E+0, 0.12181274E+4, 0.138E+3, 0.120E+2, + 0.98010000E+0, 0.00000000E+0, 0.10570218E+4, 0.138E+3, 0.130E+2, 0.98010000E+0, 0.00000000E+0, + 0.76638470E+3, 0.138E+3, 0.140E+2, 0.98010000E+0, 0.00000000E+0, 0.55938210E+3, 0.138E+3, + 0.150E+2, 0.98010000E+0, 0.00000000E+0, 0.44578600E+3, 0.138E+3, 0.160E+2, 0.98010000E+0, + 0.00000000E+0, 0.35042730E+3, 0.138E+3, 0.170E+2, 0.98010000E+0, 0.00000000E+0, 0.27747590E+3, + 0.138E+3, 0.180E+2, 0.98010000E+0, 0.00000000E+0, 0.33022504E+4, 0.138E+3, 0.190E+2, + 0.98010000E+0, 0.00000000E+0, 0.23148420E+4, 0.138E+3, 0.200E+2, 0.98010000E+0, 0.00000000E+0, + 0.18497319E+4, 0.138E+3, 0.210E+2, 0.98010000E+0, 0.00000000E+0, 0.17407410E+4, 0.138E+3, + 0.220E+2, 0.98010000E+0, 0.00000000E+0, 0.15682263E+4, 0.138E+3, 0.230E+2, 0.98010000E+0, + 0.00000000E+0, 0.12385036E+4, 0.138E+3, 0.240E+2, 0.98010000E+0, 0.00000000E+0, 0.13188096E+4, + 0.138E+3, 0.250E+2, 0.98010000E+0, 0.00000000E+0, 0.10340602E+4, 0.138E+3, 0.260E+2, + 0.98010000E+0, 0.00000000E+0, 0.10522336E+4, 0.138E+3, 0.270E+2, 0.98010000E+0, 0.00000000E+0, + 0.11016666E+4, 0.138E+3, 0.280E+2, 0.98010000E+0, 0.00000000E+0, 0.84879520E+3, 0.138E+3, + 0.290E+2, 0.98010000E+0, 0.00000000E+0, 0.82251670E+3, 0.138E+3, 0.300E+2, 0.98010000E+0, + 0.00000000E+0, 0.99191230E+3, 0.138E+3, 0.310E+2, 0.98010000E+0, 0.00000000E+0, 0.81848870E+3, + 0.138E+3, 0.320E+2, 0.98010000E+0, 0.00000000E+0, 0.66009280E+3, 0.138E+3, 0.330E+2, + 0.98010000E+0, 0.00000000E+0, 0.57308500E+3, 0.138E+3, 0.340E+2, 0.98010000E+0, 0.00000000E+0, + 0.48506500E+3, 0.138E+3, 0.350E+2, 0.98010000E+0, 0.00000000E+0, 0.40937610E+3, 0.138E+3, + 0.360E+2, 0.98010000E+0, 0.00000000E+0, 0.36709261E+4, 0.138E+3, 0.370E+2, 0.98010000E+0, + 0.00000000E+0, 0.27824577E+4, 0.138E+3, 0.380E+2, 0.98010000E+0, 0.00000000E+0, 0.23056086E+4, + 0.138E+3, 0.390E+2, 0.98010000E+0, 0.00000000E+0, 0.20037829E+4, 0.138E+3, 0.400E+2, + 0.98010000E+0, 0.00000000E+0, 0.17897638E+4, 0.138E+3, 0.410E+2, 0.98010000E+0, 0.00000000E+0, + 0.13350700E+4, 0.138E+3, 0.420E+2, 0.98010000E+0, 0.00000000E+0, 0.15092981E+4, 0.138E+3, + 0.430E+2, 0.98010000E+0, 0.00000000E+0, 0.11061259E+4, 0.138E+3, 0.440E+2, 0.98010000E+0, + 0.00000000E+0, 0.12034301E+4, 0.138E+3, 0.450E+2, 0.98010000E+0, 0.00000000E+0, 0.11005370E+4, + 0.138E+3, 0.460E+2, 0.98010000E+0, 0.00000000E+0, 0.93160220E+3, 0.138E+3, 0.470E+2, + 0.98010000E+0, 0.00000000E+0, 0.95275330E+3, 0.138E+3, 0.480E+2, 0.98010000E+0, 0.00000000E+0, + 0.12501173E+4, 0.138E+3, 0.490E+2, 0.98010000E+0, 0.00000000E+0, 0.10916636E+4, 0.138E+3, + 0.500E+2, 0.98010000E+0, 0.00000000E+0, 0.92413690E+3, 0.138E+3, 0.510E+2, 0.98010000E+0, + 0.00000000E+0, 0.83250600E+3, 0.138E+3, 0.520E+2, 0.98010000E+0, 0.00000000E+0, 0.72971760E+3, + 0.138E+3, 0.530E+2, 0.98010000E+0, 0.00000000E+0, 0.63746600E+3, 0.138E+3, 0.540E+2, + 0.98010000E+0, 0.00000000E+0, 0.44969846E+4, 0.138E+3, 0.550E+2, 0.98010000E+0, 0.00000000E+0, + 0.36314540E+4, 0.138E+3, 0.560E+2, 0.98010000E+0, 0.00000000E+0, 0.30140781E+4, 0.138E+3, + 0.570E+2, 0.98010000E+0, 0.00000000E+0, 0.11044325E+4, 0.138E+3, 0.580E+2, 0.98010000E+0, + 0.27991000E+1, 0.31621198E+4, 0.138E+3, 0.590E+2, 0.98010000E+0, 0.00000000E+0, 0.29999283E+4, + 0.138E+3, 0.600E+2, 0.98010000E+0, 0.00000000E+0, 0.29157949E+4, 0.138E+3, 0.610E+2, + 0.98010000E+0, 0.00000000E+0, 0.28393501E+4, 0.138E+3, 0.620E+2, 0.98010000E+0, 0.00000000E+0, + 0.27713234E+4, 0.138E+3, 0.630E+2, 0.98010000E+0, 0.00000000E+0, 0.20594692E+4, 0.138E+3, + 0.640E+2, 0.98010000E+0, 0.00000000E+0, 0.25668729E+4, 0.138E+3, 0.650E+2, 0.98010000E+0, + 0.00000000E+0, 0.24578402E+4, 0.138E+3, 0.660E+2, 0.98010000E+0, 0.00000000E+0, 0.24609470E+4, + 0.138E+3, 0.670E+2, 0.98010000E+0, 0.00000000E+0, 0.24041111E+4, 0.138E+3, 0.680E+2, + 0.98010000E+0, 0.00000000E+0, 0.23512803E+4, 0.138E+3, 0.690E+2, 0.98010000E+0, 0.00000000E+0, + 0.23289369E+4, 0.138E+3, 0.700E+2, 0.98010000E+0, 0.00000000E+0, 0.18927447E+4, 0.138E+3, + 0.710E+2, 0.98010000E+0, 0.00000000E+0, 0.17529565E+4, 0.138E+3, 0.720E+2, 0.98010000E+0, + 0.00000000E+0, 0.15479897E+4, 0.138E+3, 0.730E+2, 0.98010000E+0, 0.00000000E+0, 0.12804929E+4, + 0.138E+3, 0.740E+2, 0.98010000E+0, 0.00000000E+0, 0.12840434E+4, 0.138E+3, 0.750E+2, + 0.98010000E+0, 0.00000000E+0, 0.11312913E+4, 0.138E+3, 0.760E+2, 0.98010000E+0, 0.00000000E+0, + 0.10131095E+4, 0.138E+3, 0.770E+2, 0.98010000E+0, 0.00000000E+0, 0.82466090E+3, 0.138E+3, + 0.780E+2, 0.98010000E+0, 0.00000000E+0, 0.76388530E+3, 0.138E+3, 0.790E+2, 0.98010000E+0, + 0.00000000E+0, 0.77550460E+3, 0.138E+3, 0.800E+2, 0.98010000E+0, 0.00000000E+0, 0.12742283E+4, + 0.138E+3, 0.810E+2, 0.98010000E+0, 0.00000000E+0, 0.11873359E+4, 0.138E+3, 0.820E+2, + 0.98010000E+0, 0.00000000E+0, 0.10400523E+4, 0.138E+3, 0.830E+2, 0.98010000E+0, 0.00000000E+0, + 0.96630350E+3, 0.138E+3, 0.840E+2, 0.98010000E+0, 0.00000000E+0, 0.86500840E+3, 0.138E+3, + 0.850E+2, 0.98010000E+0, 0.00000000E+0, 0.77178770E+3, 0.138E+3, 0.860E+2, 0.98010000E+0, + 0.00000000E+0, 0.40533897E+4, 0.138E+3, 0.870E+2, 0.98010000E+0, 0.00000000E+0, 0.34910837E+4, + 0.138E+3, 0.880E+2, 0.98010000E+0, 0.00000000E+0, 0.29248174E+4, 0.138E+3, 0.890E+2, + 0.98010000E+0, 0.00000000E+0, 0.24812627E+4, 0.138E+3, 0.900E+2, 0.98010000E+0, 0.00000000E+0, + 0.25425532E+4, 0.138E+3, 0.910E+2, 0.98010000E+0, 0.00000000E+0, 0.24572393E+4, 0.138E+3, + 0.920E+2, 0.98010000E+0, 0.00000000E+0, 0.26180036E+4, 0.138E+3, 0.930E+2, 0.98010000E+0, + 0.00000000E+0, 0.25175053E+4, 0.138E+3, 0.940E+2, 0.98010000E+0, 0.00000000E+0, 0.11032750E+3, + 0.138E+3, 0.101E+3, 0.98010000E+0, 0.00000000E+0, 0.42146100E+3, 0.138E+3, 0.103E+3, + 0.98010000E+0, 0.98650000E+0, 0.52954940E+3, 0.138E+3, 0.104E+3, 0.98010000E+0, 0.98080000E+0, + 0.36336070E+3, 0.138E+3, 0.105E+3, 0.98010000E+0, 0.97060000E+0, 0.25898850E+3, 0.138E+3, + 0.106E+3, 0.98010000E+0, 0.98680000E+0, 0.16917720E+3, 0.138E+3, 0.107E+3, 0.98010000E+0, + 0.99440000E+0, 0.11710180E+3, 0.138E+3, 0.108E+3, 0.98010000E+0, 0.99250000E+0, 0.75675800E+2, + 0.138E+3, 0.109E+3, 0.98010000E+0, 0.99820000E+0, 0.63083040E+3, 0.138E+3, 0.111E+3, + 0.98010000E+0, 0.96840000E+0, 0.98878570E+3, 0.138E+3, 0.112E+3, 0.98010000E+0, 0.96280000E+0, + 0.94475350E+3, 0.138E+3, 0.113E+3, 0.98010000E+0, 0.96480000E+0, 0.70100090E+3, 0.138E+3, + 0.114E+3, 0.98010000E+0, 0.95070000E+0, 0.54212620E+3, 0.138E+3, 0.115E+3, 0.98010000E+0, + 0.99470000E+0, 0.44147190E+3, 0.138E+3, 0.116E+3, 0.98010000E+0, 0.99480000E+0, 0.34712550E+3, + 0.138E+3, 0.117E+3, 0.98010000E+0, 0.99720000E+0, 0.84199830E+3, 0.138E+3, 0.119E+3, + 0.98010000E+0, 0.97670000E+0, 0.18769417E+4, 0.138E+3, 0.120E+3, 0.98010000E+0, 0.98310000E+0, + 0.77994880E+3, 0.138E+3, 0.121E+3, 0.98010000E+0, 0.18627000E+1, 0.75467530E+3, 0.138E+3, + 0.122E+3, 0.98010000E+0, 0.18299000E+1, 0.74017630E+3, 0.138E+3, 0.123E+3, 0.98010000E+0, + 0.19138000E+1, 0.73983150E+3, 0.138E+3, 0.124E+3, 0.98010000E+0, 0.18269000E+1, 0.65184050E+3, + 0.138E+3, 0.125E+3, 0.98010000E+0, 0.16406000E+1, 0.59697670E+3, 0.138E+3, 0.126E+3, + 0.98010000E+0, 0.16483000E+1, 0.57030240E+3, 0.138E+3, 0.127E+3, 0.98010000E+0, 0.17149000E+1, + 0.55938830E+3, 0.138E+3, 0.128E+3, 0.98010000E+0, 0.17937000E+1, 0.56991510E+3, 0.138E+3, + 0.129E+3, 0.98010000E+0, 0.95760000E+0, 0.50526080E+3, 0.138E+3, 0.130E+3, 0.98010000E+0, + 0.19419000E+1, 0.91623120E+3, 0.138E+3, 0.131E+3, 0.98010000E+0, 0.96010000E+0, 0.75505840E+3, + 0.138E+3, 0.132E+3, 0.98010000E+0, 0.94340000E+0, 0.64702200E+3, 0.138E+3, 0.133E+3, + 0.98010000E+0, 0.98890000E+0, 0.57371350E+3, 0.138E+3, 0.134E+3, 0.98010000E+0, 0.99010000E+0, + 0.48934610E+3, 0.138E+3, 0.135E+3, 0.98010000E+0, 0.99740000E+0, 0.99279700E+3, 0.138E+3, + 0.137E+3, 0.98010000E+0, 0.97380000E+0, 0.23126602E+4, 0.138E+3, 0.138E+3, 0.98010000E+0, + 0.98010000E+0, 0.51235600E+2, 0.139E+3, 0.100E+1, 0.19153000E+1, 0.91180000E+0, 0.31988900E+2, + 0.139E+3, 0.200E+1, 0.19153000E+1, 0.00000000E+0, 0.10745875E+4, 0.139E+3, 0.300E+1, + 0.19153000E+1, 0.00000000E+0, 0.53251100E+3, 0.139E+3, 0.400E+1, 0.19153000E+1, 0.00000000E+0, + 0.33413510E+3, 0.139E+3, 0.500E+1, 0.19153000E+1, 0.00000000E+0, 0.21477600E+3, 0.139E+3, + 0.600E+1, 0.19153000E+1, 0.00000000E+0, 0.14492070E+3, 0.139E+3, 0.700E+1, 0.19153000E+1, + 0.00000000E+0, 0.10704380E+3, 0.139E+3, 0.800E+1, 0.19153000E+1, 0.00000000E+0, 0.79407600E+2, + 0.139E+3, 0.900E+1, 0.19153000E+1, 0.00000000E+0, 0.60062800E+2, 0.139E+3, 0.100E+2, + 0.19153000E+1, 0.00000000E+0, 0.12727028E+4, 0.139E+3, 0.110E+2, 0.19153000E+1, 0.00000000E+0, + 0.86937390E+3, 0.139E+3, 0.120E+2, 0.19153000E+1, 0.00000000E+0, 0.77186060E+3, 0.139E+3, + 0.130E+2, 0.19153000E+1, 0.00000000E+0, 0.57805500E+3, 0.139E+3, 0.140E+2, 0.19153000E+1, + 0.00000000E+0, 0.43301710E+3, 0.139E+3, 0.150E+2, 0.19153000E+1, 0.00000000E+0, 0.35057750E+3, + 0.139E+3, 0.160E+2, 0.19153000E+1, 0.00000000E+0, 0.27973550E+3, 0.139E+3, 0.170E+2, + 0.19153000E+1, 0.00000000E+0, 0.22431260E+3, 0.139E+3, 0.180E+2, 0.19153000E+1, 0.00000000E+0, + 0.21637031E+4, 0.139E+3, 0.190E+2, 0.19153000E+1, 0.00000000E+0, 0.16036362E+4, 0.139E+3, + 0.200E+2, 0.19153000E+1, 0.00000000E+0, 0.12972964E+4, 0.139E+3, 0.210E+2, 0.19153000E+1, + 0.00000000E+0, 0.12323433E+4, 0.139E+3, 0.220E+2, 0.19153000E+1, 0.00000000E+0, 0.11169531E+4, + 0.139E+3, 0.230E+2, 0.19153000E+1, 0.00000000E+0, 0.88060690E+3, 0.139E+3, 0.240E+2, + 0.19153000E+1, 0.00000000E+0, 0.94758340E+3, 0.139E+3, 0.250E+2, 0.19153000E+1, 0.00000000E+0, + 0.74266410E+3, 0.139E+3, 0.260E+2, 0.19153000E+1, 0.00000000E+0, 0.76821070E+3, 0.139E+3, + 0.270E+2, 0.19153000E+1, 0.00000000E+0, 0.79937100E+3, 0.139E+3, 0.280E+2, 0.19153000E+1, + 0.00000000E+0, 0.61409830E+3, 0.139E+3, 0.290E+2, 0.19153000E+1, 0.00000000E+0, 0.60904990E+3, + 0.139E+3, 0.300E+2, 0.19153000E+1, 0.00000000E+0, 0.72958130E+3, 0.139E+3, 0.310E+2, + 0.19153000E+1, 0.00000000E+0, 0.61799850E+3, 0.139E+3, 0.320E+2, 0.19153000E+1, 0.00000000E+0, + 0.50955030E+3, 0.139E+3, 0.330E+2, 0.19153000E+1, 0.00000000E+0, 0.44813810E+3, 0.139E+3, + 0.340E+2, 0.19153000E+1, 0.00000000E+0, 0.38429010E+3, 0.139E+3, 0.350E+2, 0.19153000E+1, + 0.00000000E+0, 0.32813160E+3, 0.139E+3, 0.360E+2, 0.19153000E+1, 0.00000000E+0, 0.24114577E+4, + 0.139E+3, 0.370E+2, 0.19153000E+1, 0.00000000E+0, 0.19209295E+4, 0.139E+3, 0.380E+2, + 0.19153000E+1, 0.00000000E+0, 0.16243636E+4, 0.139E+3, 0.390E+2, 0.19153000E+1, 0.00000000E+0, + 0.14293576E+4, 0.139E+3, 0.400E+2, 0.19153000E+1, 0.00000000E+0, 0.12864770E+4, 0.139E+3, + 0.410E+2, 0.19153000E+1, 0.00000000E+0, 0.97159590E+3, 0.139E+3, 0.420E+2, 0.19153000E+1, + 0.00000000E+0, 0.10932424E+4, 0.139E+3, 0.430E+2, 0.19153000E+1, 0.00000000E+0, 0.81262860E+3, + 0.139E+3, 0.440E+2, 0.19153000E+1, 0.00000000E+0, 0.88627500E+3, 0.139E+3, 0.450E+2, + 0.19153000E+1, 0.00000000E+0, 0.81484020E+3, 0.139E+3, 0.460E+2, 0.19153000E+1, 0.00000000E+0, + 0.68497960E+3, 0.139E+3, 0.470E+2, 0.19153000E+1, 0.00000000E+0, 0.71021720E+3, 0.139E+3, + 0.480E+2, 0.19153000E+1, 0.00000000E+0, 0.91615920E+3, 0.139E+3, 0.490E+2, 0.19153000E+1, + 0.00000000E+0, 0.81841300E+3, 0.139E+3, 0.500E+2, 0.19153000E+1, 0.00000000E+0, 0.70709330E+3, + 0.139E+3, 0.510E+2, 0.19153000E+1, 0.00000000E+0, 0.64444940E+3, 0.139E+3, 0.520E+2, + 0.19153000E+1, 0.00000000E+0, 0.57184320E+3, 0.139E+3, 0.530E+2, 0.19153000E+1, 0.00000000E+0, + 0.50522620E+3, 0.139E+3, 0.540E+2, 0.19153000E+1, 0.00000000E+0, 0.29502475E+4, 0.139E+3, + 0.550E+2, 0.19153000E+1, 0.00000000E+0, 0.24856310E+4, 0.139E+3, 0.560E+2, 0.19153000E+1, + 0.00000000E+0, 0.21057491E+4, 0.139E+3, 0.570E+2, 0.19153000E+1, 0.00000000E+0, 0.84084100E+3, + 0.139E+3, 0.580E+2, 0.19153000E+1, 0.27991000E+1, 0.21783229E+4, 0.139E+3, 0.590E+2, + 0.19153000E+1, 0.00000000E+0, 0.20748807E+4, 0.139E+3, 0.600E+2, 0.19153000E+1, 0.00000000E+0, + 0.20189224E+4, 0.139E+3, 0.610E+2, 0.19153000E+1, 0.00000000E+0, 0.19678827E+4, 0.139E+3, + 0.620E+2, 0.19153000E+1, 0.00000000E+0, 0.19225226E+4, 0.139E+3, 0.630E+2, 0.19153000E+1, + 0.00000000E+0, 0.14581969E+4, 0.139E+3, 0.640E+2, 0.19153000E+1, 0.00000000E+0, 0.17521144E+4, + 0.139E+3, 0.650E+2, 0.19153000E+1, 0.00000000E+0, 0.16830549E+4, 0.139E+3, 0.660E+2, + 0.19153000E+1, 0.00000000E+0, 0.17170123E+4, 0.139E+3, 0.670E+2, 0.19153000E+1, 0.00000000E+0, + 0.16785781E+4, 0.139E+3, 0.680E+2, 0.19153000E+1, 0.00000000E+0, 0.16432139E+4, 0.139E+3, + 0.690E+2, 0.19153000E+1, 0.00000000E+0, 0.16263339E+4, 0.139E+3, 0.700E+2, 0.19153000E+1, + 0.00000000E+0, 0.13398149E+4, 0.139E+3, 0.710E+2, 0.19153000E+1, 0.00000000E+0, 0.12689492E+4, + 0.139E+3, 0.720E+2, 0.19153000E+1, 0.00000000E+0, 0.11346407E+4, 0.139E+3, 0.730E+2, + 0.19153000E+1, 0.00000000E+0, 0.94540990E+3, 0.139E+3, 0.740E+2, 0.19153000E+1, 0.00000000E+0, + 0.95356340E+3, 0.139E+3, 0.750E+2, 0.19153000E+1, 0.00000000E+0, 0.84938170E+3, 0.139E+3, + 0.760E+2, 0.19153000E+1, 0.00000000E+0, 0.76730030E+3, 0.139E+3, 0.770E+2, 0.19153000E+1, + 0.00000000E+0, 0.62916050E+3, 0.139E+3, 0.780E+2, 0.19153000E+1, 0.00000000E+0, 0.58463530E+3, + 0.139E+3, 0.790E+2, 0.19153000E+1, 0.00000000E+0, 0.59694450E+3, 0.139E+3, 0.800E+2, + 0.19153000E+1, 0.00000000E+0, 0.93562990E+3, 0.139E+3, 0.810E+2, 0.19153000E+1, 0.00000000E+0, + 0.88887560E+3, 0.139E+3, 0.820E+2, 0.19153000E+1, 0.00000000E+0, 0.79367010E+3, 0.139E+3, + 0.830E+2, 0.19153000E+1, 0.00000000E+0, 0.74514710E+3, 0.139E+3, 0.840E+2, 0.19153000E+1, + 0.00000000E+0, 0.67518420E+3, 0.139E+3, 0.850E+2, 0.19153000E+1, 0.00000000E+0, 0.60886250E+3, + 0.139E+3, 0.860E+2, 0.19153000E+1, 0.00000000E+0, 0.26980970E+4, 0.139E+3, 0.870E+2, + 0.19153000E+1, 0.00000000E+0, 0.24134225E+4, 0.139E+3, 0.880E+2, 0.19153000E+1, 0.00000000E+0, + 0.20622685E+4, 0.139E+3, 0.890E+2, 0.19153000E+1, 0.00000000E+0, 0.17871863E+4, 0.139E+3, + 0.900E+2, 0.19153000E+1, 0.00000000E+0, 0.18092861E+4, 0.139E+3, 0.910E+2, 0.19153000E+1, + 0.00000000E+0, 0.17497379E+4, 0.139E+3, 0.920E+2, 0.19153000E+1, 0.00000000E+0, 0.18406901E+4, + 0.139E+3, 0.930E+2, 0.19153000E+1, 0.00000000E+0, 0.17746391E+4, 0.139E+3, 0.940E+2, + 0.19153000E+1, 0.00000000E+0, 0.85681500E+2, 0.139E+3, 0.101E+3, 0.19153000E+1, 0.00000000E+0, + 0.30688620E+3, 0.139E+3, 0.103E+3, 0.19153000E+1, 0.98650000E+0, 0.38765640E+3, 0.139E+3, + 0.104E+3, 0.19153000E+1, 0.98080000E+0, 0.27740500E+3, 0.139E+3, 0.105E+3, 0.19153000E+1, + 0.97060000E+0, 0.20197440E+3, 0.139E+3, 0.106E+3, 0.19153000E+1, 0.98680000E+0, 0.13518390E+3, + 0.139E+3, 0.107E+3, 0.19153000E+1, 0.99440000E+0, 0.95445800E+2, 0.139E+3, 0.108E+3, + 0.19153000E+1, 0.99250000E+0, 0.63188900E+2, 0.139E+3, 0.109E+3, 0.19153000E+1, 0.99820000E+0, + 0.45499280E+3, 0.139E+3, 0.111E+3, 0.19153000E+1, 0.96840000E+0, 0.70969610E+3, 0.139E+3, + 0.112E+3, 0.19153000E+1, 0.96280000E+0, 0.69347320E+3, 0.139E+3, 0.113E+3, 0.19153000E+1, + 0.96480000E+0, 0.53081800E+3, 0.139E+3, 0.114E+3, 0.19153000E+1, 0.95070000E+0, 0.41987180E+3, + 0.139E+3, 0.115E+3, 0.19153000E+1, 0.99470000E+0, 0.34697100E+3, 0.139E+3, 0.116E+3, + 0.19153000E+1, 0.99480000E+0, 0.27697730E+3, 0.139E+3, 0.117E+3, 0.19153000E+1, 0.99720000E+0, + 0.61384630E+3, 0.139E+3, 0.119E+3, 0.19153000E+1, 0.97670000E+0, 0.12935159E+4, 0.139E+3, + 0.120E+3, 0.19153000E+1, 0.98310000E+0, 0.58631350E+3, 0.139E+3, 0.121E+3, 0.19153000E+1, + 0.18627000E+1, 0.56686700E+3, 0.139E+3, 0.122E+3, 0.19153000E+1, 0.18299000E+1, 0.55572150E+3, + 0.139E+3, 0.123E+3, 0.19153000E+1, 0.19138000E+1, 0.55347640E+3, 0.139E+3, 0.124E+3, + 0.19153000E+1, 0.18269000E+1, 0.49633310E+3, 0.139E+3, 0.125E+3, 0.19153000E+1, 0.16406000E+1, + 0.45638780E+3, 0.139E+3, 0.126E+3, 0.19153000E+1, 0.16483000E+1, 0.43567010E+3, 0.139E+3, + 0.127E+3, 0.19153000E+1, 0.17149000E+1, 0.42674050E+3, 0.139E+3, 0.128E+3, 0.19153000E+1, + 0.17937000E+1, 0.42937430E+3, 0.139E+3, 0.129E+3, 0.19153000E+1, 0.95760000E+0, 0.38958110E+3, + 0.139E+3, 0.130E+3, 0.19153000E+1, 0.19419000E+1, 0.67825900E+3, 0.139E+3, 0.131E+3, + 0.19153000E+1, 0.96010000E+0, 0.57321390E+3, 0.139E+3, 0.132E+3, 0.19153000E+1, 0.94340000E+0, + 0.50000710E+3, 0.139E+3, 0.133E+3, 0.19153000E+1, 0.98890000E+0, 0.44848720E+3, 0.139E+3, + 0.134E+3, 0.19153000E+1, 0.99010000E+0, 0.38738760E+3, 0.139E+3, 0.135E+3, 0.19153000E+1, + 0.99740000E+0, 0.72686130E+3, 0.139E+3, 0.137E+3, 0.19153000E+1, 0.97380000E+0, 0.15865402E+4, + 0.139E+3, 0.138E+3, 0.19153000E+1, 0.98010000E+0, 0.11322983E+4, 0.139E+3, 0.139E+3, + 0.19153000E+1, 0.19153000E+1, 0.39666900E+2, 0.140E+3, 0.100E+1, 0.19355000E+1, 0.91180000E+0, + 0.25703700E+2, 0.140E+3, 0.200E+1, 0.19355000E+1, 0.00000000E+0, 0.67848100E+3, 0.140E+3, + 0.300E+1, 0.19355000E+1, 0.00000000E+0, 0.37401350E+3, 0.140E+3, 0.400E+1, 0.19355000E+1, + 0.00000000E+0, 0.24601470E+3, 0.140E+3, 0.500E+1, 0.19355000E+1, 0.00000000E+0, 0.16345480E+3, + 0.140E+3, 0.600E+1, 0.19355000E+1, 0.00000000E+0, 0.11293390E+3, 0.140E+3, 0.700E+1, + 0.19355000E+1, 0.00000000E+0, 0.84787600E+2, 0.140E+3, 0.800E+1, 0.19355000E+1, 0.00000000E+0, + 0.63768000E+2, 0.140E+3, 0.900E+1, 0.19355000E+1, 0.00000000E+0, 0.48760000E+2, 0.140E+3, + 0.100E+2, 0.19355000E+1, 0.00000000E+0, 0.80899730E+3, 0.140E+3, 0.110E+2, 0.19355000E+1, + 0.00000000E+0, 0.60055110E+3, 0.140E+3, 0.120E+2, 0.19355000E+1, 0.00000000E+0, 0.54671760E+3, + 0.140E+3, 0.130E+2, 0.19355000E+1, 0.00000000E+0, 0.42369920E+3, 0.140E+3, 0.140E+2, + 0.19355000E+1, 0.00000000E+0, 0.32600870E+3, 0.140E+3, 0.150E+2, 0.19355000E+1, 0.00000000E+0, + 0.26830770E+3, 0.140E+3, 0.160E+2, 0.19355000E+1, 0.00000000E+0, 0.21743220E+3, 0.140E+3, + 0.170E+2, 0.19355000E+1, 0.00000000E+0, 0.17666900E+3, 0.140E+3, 0.180E+2, 0.19355000E+1, + 0.00000000E+0, 0.13359899E+4, 0.140E+3, 0.190E+2, 0.19355000E+1, 0.00000000E+0, 0.10709104E+4, + 0.140E+3, 0.200E+2, 0.19355000E+1, 0.00000000E+0, 0.87901650E+3, 0.140E+3, 0.210E+2, + 0.19355000E+1, 0.00000000E+0, 0.84415650E+3, 0.140E+3, 0.220E+2, 0.19355000E+1, 0.00000000E+0, + 0.77041850E+3, 0.140E+3, 0.230E+2, 0.19355000E+1, 0.00000000E+0, 0.60670400E+3, 0.140E+3, + 0.240E+2, 0.19355000E+1, 0.00000000E+0, 0.66010050E+3, 0.140E+3, 0.250E+2, 0.19355000E+1, + 0.00000000E+0, 0.51758120E+3, 0.140E+3, 0.260E+2, 0.19355000E+1, 0.00000000E+0, 0.54466430E+3, + 0.140E+3, 0.270E+2, 0.19355000E+1, 0.00000000E+0, 0.56293440E+3, 0.140E+3, 0.280E+2, + 0.19355000E+1, 0.00000000E+0, 0.43155440E+3, 0.140E+3, 0.290E+2, 0.19355000E+1, 0.00000000E+0, + 0.43840800E+3, 0.140E+3, 0.300E+2, 0.19355000E+1, 0.00000000E+0, 0.52118020E+3, 0.140E+3, + 0.310E+2, 0.19355000E+1, 0.00000000E+0, 0.45369050E+3, 0.140E+3, 0.320E+2, 0.19355000E+1, + 0.00000000E+0, 0.38264580E+3, 0.140E+3, 0.330E+2, 0.19355000E+1, 0.00000000E+0, 0.34103380E+3, + 0.140E+3, 0.340E+2, 0.19355000E+1, 0.00000000E+0, 0.29639440E+3, 0.140E+3, 0.350E+2, + 0.19355000E+1, 0.00000000E+0, 0.25615010E+3, 0.140E+3, 0.360E+2, 0.19355000E+1, 0.00000000E+0, + 0.14937993E+4, 0.140E+3, 0.370E+2, 0.19355000E+1, 0.00000000E+0, 0.12775813E+4, 0.140E+3, + 0.380E+2, 0.19355000E+1, 0.00000000E+0, 0.11066630E+4, 0.140E+3, 0.390E+2, 0.19355000E+1, + 0.00000000E+0, 0.98782570E+3, 0.140E+3, 0.400E+2, 0.19355000E+1, 0.00000000E+0, 0.89679520E+3, + 0.140E+3, 0.410E+2, 0.19355000E+1, 0.00000000E+0, 0.68718480E+3, 0.140E+3, 0.420E+2, + 0.19355000E+1, 0.00000000E+0, 0.76884280E+3, 0.140E+3, 0.430E+2, 0.19355000E+1, 0.00000000E+0, + 0.58090070E+3, 0.140E+3, 0.440E+2, 0.19355000E+1, 0.00000000E+0, 0.63480240E+3, 0.140E+3, + 0.450E+2, 0.19355000E+1, 0.00000000E+0, 0.58702020E+3, 0.140E+3, 0.460E+2, 0.19355000E+1, + 0.00000000E+0, 0.49038170E+3, 0.140E+3, 0.470E+2, 0.19355000E+1, 0.00000000E+0, 0.51538610E+3, + 0.140E+3, 0.480E+2, 0.19355000E+1, 0.00000000E+0, 0.65256540E+3, 0.140E+3, 0.490E+2, + 0.19355000E+1, 0.00000000E+0, 0.59689190E+3, 0.140E+3, 0.500E+2, 0.19355000E+1, 0.00000000E+0, + 0.52654260E+3, 0.140E+3, 0.510E+2, 0.19355000E+1, 0.00000000E+0, 0.48561760E+3, 0.140E+3, + 0.520E+2, 0.19355000E+1, 0.00000000E+0, 0.43630460E+3, 0.140E+3, 0.530E+2, 0.19355000E+1, + 0.00000000E+0, 0.38993850E+3, 0.140E+3, 0.540E+2, 0.19355000E+1, 0.00000000E+0, 0.18190406E+4, + 0.140E+3, 0.550E+2, 0.19355000E+1, 0.00000000E+0, 0.16353622E+4, 0.140E+3, 0.560E+2, + 0.19355000E+1, 0.00000000E+0, 0.14206192E+4, 0.140E+3, 0.570E+2, 0.19355000E+1, 0.00000000E+0, + 0.62328410E+3, 0.140E+3, 0.580E+2, 0.19355000E+1, 0.27991000E+1, 0.14429680E+4, 0.140E+3, + 0.590E+2, 0.19355000E+1, 0.00000000E+0, 0.13832190E+4, 0.140E+3, 0.600E+2, 0.19355000E+1, + 0.00000000E+0, 0.13477804E+4, 0.140E+3, 0.610E+2, 0.19355000E+1, 0.00000000E+0, 0.13152670E+4, + 0.140E+3, 0.620E+2, 0.19355000E+1, 0.00000000E+0, 0.12864106E+4, 0.140E+3, 0.630E+2, + 0.19355000E+1, 0.00000000E+0, 0.99936150E+3, 0.140E+3, 0.640E+2, 0.19355000E+1, 0.00000000E+0, + 0.11461276E+4, 0.140E+3, 0.650E+2, 0.19355000E+1, 0.00000000E+0, 0.11025614E+4, 0.140E+3, + 0.660E+2, 0.19355000E+1, 0.00000000E+0, 0.11568729E+4, 0.140E+3, 0.670E+2, 0.19355000E+1, + 0.00000000E+0, 0.11319421E+4, 0.140E+3, 0.680E+2, 0.19355000E+1, 0.00000000E+0, 0.11093035E+4, + 0.140E+3, 0.690E+2, 0.19355000E+1, 0.00000000E+0, 0.10968681E+4, 0.140E+3, 0.700E+2, + 0.19355000E+1, 0.00000000E+0, 0.91629250E+3, 0.140E+3, 0.710E+2, 0.19355000E+1, 0.00000000E+0, + 0.89141000E+3, 0.140E+3, 0.720E+2, 0.19355000E+1, 0.00000000E+0, 0.80810660E+3, 0.140E+3, + 0.730E+2, 0.19355000E+1, 0.00000000E+0, 0.67904580E+3, 0.140E+3, 0.740E+2, 0.19355000E+1, + 0.00000000E+0, 0.68897190E+3, 0.140E+3, 0.750E+2, 0.19355000E+1, 0.00000000E+0, 0.62088940E+3, + 0.140E+3, 0.760E+2, 0.19355000E+1, 0.00000000E+0, 0.56604620E+3, 0.140E+3, 0.770E+2, + 0.19355000E+1, 0.00000000E+0, 0.46802460E+3, 0.140E+3, 0.780E+2, 0.19355000E+1, 0.00000000E+0, + 0.43643220E+3, 0.140E+3, 0.790E+2, 0.19355000E+1, 0.00000000E+0, 0.44796630E+3, 0.140E+3, + 0.800E+2, 0.19355000E+1, 0.00000000E+0, 0.66836720E+3, 0.140E+3, 0.810E+2, 0.19355000E+1, + 0.00000000E+0, 0.64781650E+3, 0.140E+3, 0.820E+2, 0.19355000E+1, 0.00000000E+0, 0.58976480E+3, + 0.140E+3, 0.830E+2, 0.19355000E+1, 0.00000000E+0, 0.55956430E+3, 0.140E+3, 0.840E+2, + 0.19355000E+1, 0.00000000E+0, 0.51325740E+3, 0.140E+3, 0.850E+2, 0.19355000E+1, 0.00000000E+0, + 0.46784580E+3, 0.140E+3, 0.860E+2, 0.19355000E+1, 0.00000000E+0, 0.17028592E+4, 0.140E+3, + 0.870E+2, 0.19355000E+1, 0.00000000E+0, 0.16078178E+4, 0.140E+3, 0.880E+2, 0.19355000E+1, + 0.00000000E+0, 0.14061219E+4, 0.140E+3, 0.890E+2, 0.19355000E+1, 0.00000000E+0, 0.12490250E+4, + 0.140E+3, 0.900E+2, 0.19355000E+1, 0.00000000E+0, 0.12473212E+4, 0.140E+3, 0.910E+2, + 0.19355000E+1, 0.00000000E+0, 0.12073349E+4, 0.140E+3, 0.920E+2, 0.19355000E+1, 0.00000000E+0, + 0.12519154E+4, 0.140E+3, 0.930E+2, 0.19355000E+1, 0.00000000E+0, 0.12106981E+4, 0.140E+3, + 0.940E+2, 0.19355000E+1, 0.00000000E+0, 0.64706800E+2, 0.140E+3, 0.101E+3, 0.19355000E+1, + 0.00000000E+0, 0.21671700E+3, 0.140E+3, 0.103E+3, 0.19355000E+1, 0.98650000E+0, 0.27536440E+3, + 0.140E+3, 0.104E+3, 0.19355000E+1, 0.98080000E+0, 0.20600140E+3, 0.140E+3, 0.105E+3, + 0.19355000E+1, 0.97060000E+0, 0.15342290E+3, 0.140E+3, 0.106E+3, 0.19355000E+1, 0.98680000E+0, + 0.10531510E+3, 0.140E+3, 0.107E+3, 0.19355000E+1, 0.99440000E+0, 0.75899400E+2, 0.140E+3, + 0.108E+3, 0.19355000E+1, 0.99250000E+0, 0.51515800E+2, 0.140E+3, 0.109E+3, 0.19355000E+1, + 0.99820000E+0, 0.31816780E+3, 0.140E+3, 0.111E+3, 0.19355000E+1, 0.96840000E+0, 0.49330570E+3, + 0.140E+3, 0.112E+3, 0.19355000E+1, 0.96280000E+0, 0.49402450E+3, 0.140E+3, 0.113E+3, + 0.19355000E+1, 0.96480000E+0, 0.39071920E+3, 0.140E+3, 0.114E+3, 0.19355000E+1, 0.95070000E+0, + 0.31631690E+3, 0.140E+3, 0.115E+3, 0.19355000E+1, 0.99470000E+0, 0.26540890E+3, 0.140E+3, + 0.116E+3, 0.19355000E+1, 0.99480000E+0, 0.21521010E+3, 0.140E+3, 0.117E+3, 0.19355000E+1, + 0.99720000E+0, 0.43506490E+3, 0.140E+3, 0.119E+3, 0.19355000E+1, 0.97670000E+0, 0.85671310E+3, + 0.140E+3, 0.120E+3, 0.19355000E+1, 0.98310000E+0, 0.42930190E+3, 0.140E+3, 0.121E+3, + 0.19355000E+1, 0.18627000E+1, 0.41420300E+3, 0.140E+3, 0.122E+3, 0.19355000E+1, 0.18299000E+1, + 0.40602230E+3, 0.140E+3, 0.123E+3, 0.19355000E+1, 0.19138000E+1, 0.40292000E+3, 0.140E+3, + 0.124E+3, 0.19355000E+1, 0.18269000E+1, 0.36779370E+3, 0.140E+3, 0.125E+3, 0.19355000E+1, + 0.16406000E+1, 0.33962780E+3, 0.140E+3, 0.126E+3, 0.19355000E+1, 0.16483000E+1, 0.32399210E+3, + 0.140E+3, 0.127E+3, 0.19355000E+1, 0.17149000E+1, 0.31694170E+3, 0.140E+3, 0.128E+3, + 0.19355000E+1, 0.17937000E+1, 0.31499080E+3, 0.140E+3, 0.129E+3, 0.19355000E+1, 0.95760000E+0, + 0.29240050E+3, 0.140E+3, 0.130E+3, 0.19355000E+1, 0.19419000E+1, 0.48787590E+3, 0.140E+3, + 0.131E+3, 0.19355000E+1, 0.96010000E+0, 0.42320760E+3, 0.140E+3, 0.132E+3, 0.19355000E+1, + 0.94340000E+0, 0.37591790E+3, 0.140E+3, 0.133E+3, 0.19355000E+1, 0.98890000E+0, 0.34120400E+3, + 0.140E+3, 0.134E+3, 0.19355000E+1, 0.99010000E+0, 0.29856340E+3, 0.140E+3, 0.135E+3, + 0.19355000E+1, 0.99740000E+0, 0.51769610E+3, 0.140E+3, 0.137E+3, 0.19355000E+1, 0.97380000E+0, + 0.10443401E+4, 0.140E+3, 0.138E+3, 0.19355000E+1, 0.98010000E+0, 0.78082120E+3, 0.140E+3, + 0.139E+3, 0.19355000E+1, 0.19153000E+1, 0.56867890E+3, 0.140E+3, 0.140E+3, 0.19355000E+1, + 0.19355000E+1, 0.40030400E+2, 0.141E+3, 0.100E+1, 0.19545000E+1, 0.91180000E+0, 0.25953400E+2, + 0.141E+3, 0.200E+1, 0.19545000E+1, 0.00000000E+0, 0.68410400E+3, 0.141E+3, 0.300E+1, + 0.19545000E+1, 0.00000000E+0, 0.37796930E+3, 0.141E+3, 0.400E+1, 0.19545000E+1, 0.00000000E+0, + 0.24842660E+3, 0.141E+3, 0.500E+1, 0.19545000E+1, 0.00000000E+0, 0.16499800E+3, 0.141E+3, + 0.600E+1, 0.19545000E+1, 0.00000000E+0, 0.11399890E+3, 0.141E+3, 0.700E+1, 0.19545000E+1, + 0.00000000E+0, 0.85602400E+2, 0.141E+3, 0.800E+1, 0.19545000E+1, 0.00000000E+0, 0.64401000E+2, + 0.141E+3, 0.900E+1, 0.19545000E+1, 0.00000000E+0, 0.49263500E+2, 0.141E+3, 0.100E+2, + 0.19545000E+1, 0.00000000E+0, 0.81603170E+3, 0.141E+3, 0.110E+2, 0.19545000E+1, 0.00000000E+0, + 0.60700730E+3, 0.141E+3, 0.120E+2, 0.19545000E+1, 0.00000000E+0, 0.55235500E+3, 0.141E+3, + 0.130E+2, 0.19545000E+1, 0.00000000E+0, 0.42788370E+3, 0.141E+3, 0.140E+2, 0.19545000E+1, + 0.00000000E+0, 0.32909470E+3, 0.141E+3, 0.150E+2, 0.19545000E+1, 0.00000000E+0, 0.27080590E+3, + 0.141E+3, 0.160E+2, 0.19545000E+1, 0.00000000E+0, 0.21944620E+3, 0.141E+3, 0.170E+2, + 0.19545000E+1, 0.00000000E+0, 0.17831830E+3, 0.141E+3, 0.180E+2, 0.19545000E+1, 0.00000000E+0, + 0.13433714E+4, 0.141E+3, 0.190E+2, 0.19545000E+1, 0.00000000E+0, 0.10819930E+4, 0.141E+3, + 0.200E+2, 0.19545000E+1, 0.00000000E+0, 0.88833560E+3, 0.141E+3, 0.210E+2, 0.19545000E+1, + 0.00000000E+0, 0.85304640E+3, 0.141E+3, 0.220E+2, 0.19545000E+1, 0.00000000E+0, 0.77852660E+3, + 0.141E+3, 0.230E+2, 0.19545000E+1, 0.00000000E+0, 0.61302240E+3, 0.141E+3, 0.240E+2, + 0.19545000E+1, 0.00000000E+0, 0.66703050E+3, 0.141E+3, 0.250E+2, 0.19545000E+1, 0.00000000E+0, + 0.52300200E+3, 0.141E+3, 0.260E+2, 0.19545000E+1, 0.00000000E+0, 0.55040920E+3, 0.141E+3, + 0.270E+2, 0.19545000E+1, 0.00000000E+0, 0.56890880E+3, 0.141E+3, 0.280E+2, 0.19545000E+1, + 0.00000000E+0, 0.43610420E+3, 0.141E+3, 0.290E+2, 0.19545000E+1, 0.00000000E+0, 0.44298860E+3, + 0.141E+3, 0.300E+2, 0.19545000E+1, 0.00000000E+0, 0.52649640E+3, 0.141E+3, 0.310E+2, + 0.19545000E+1, 0.00000000E+0, 0.45819200E+3, 0.141E+3, 0.320E+2, 0.19545000E+1, 0.00000000E+0, + 0.38630910E+3, 0.141E+3, 0.330E+2, 0.19545000E+1, 0.00000000E+0, 0.34424250E+3, 0.141E+3, + 0.340E+2, 0.19545000E+1, 0.00000000E+0, 0.29915350E+3, 0.141E+3, 0.350E+2, 0.19545000E+1, + 0.00000000E+0, 0.25853040E+3, 0.141E+3, 0.360E+2, 0.19545000E+1, 0.00000000E+0, 0.15017789E+4, + 0.141E+3, 0.370E+2, 0.19545000E+1, 0.00000000E+0, 0.12904826E+4, 0.141E+3, 0.380E+2, + 0.19545000E+1, 0.00000000E+0, 0.11181402E+4, 0.141E+3, 0.390E+2, 0.19545000E+1, 0.00000000E+0, + 0.99812240E+3, 0.141E+3, 0.400E+2, 0.19545000E+1, 0.00000000E+0, 0.90608010E+3, 0.141E+3, + 0.410E+2, 0.19545000E+1, 0.00000000E+0, 0.69429830E+3, 0.141E+3, 0.420E+2, 0.19545000E+1, + 0.00000000E+0, 0.77673680E+3, 0.141E+3, 0.430E+2, 0.19545000E+1, 0.00000000E+0, 0.58689450E+3, + 0.141E+3, 0.440E+2, 0.19545000E+1, 0.00000000E+0, 0.64141640E+3, 0.141E+3, 0.450E+2, + 0.19545000E+1, 0.00000000E+0, 0.59314140E+3, 0.141E+3, 0.460E+2, 0.19545000E+1, 0.00000000E+0, + 0.49548000E+3, 0.141E+3, 0.470E+2, 0.19545000E+1, 0.00000000E+0, 0.52076290E+3, 0.141E+3, + 0.480E+2, 0.19545000E+1, 0.00000000E+0, 0.65928650E+3, 0.141E+3, 0.490E+2, 0.19545000E+1, + 0.00000000E+0, 0.60296920E+3, 0.141E+3, 0.500E+2, 0.19545000E+1, 0.00000000E+0, 0.53174240E+3, + 0.141E+3, 0.510E+2, 0.19545000E+1, 0.00000000E+0, 0.49032060E+3, 0.141E+3, 0.520E+2, + 0.19545000E+1, 0.00000000E+0, 0.44045990E+3, 0.141E+3, 0.530E+2, 0.19545000E+1, 0.00000000E+0, + 0.39361210E+3, 0.141E+3, 0.540E+2, 0.19545000E+1, 0.00000000E+0, 0.18264461E+4, 0.141E+3, + 0.550E+2, 0.19545000E+1, 0.00000000E+0, 0.16509334E+4, 0.141E+3, 0.560E+2, 0.19545000E+1, + 0.00000000E+0, 0.14348956E+4, 0.141E+3, 0.570E+2, 0.19545000E+1, 0.00000000E+0, 0.62949770E+3, + 0.141E+3, 0.580E+2, 0.19545000E+1, 0.27991000E+1, 0.14565113E+4, 0.141E+3, 0.590E+2, + 0.19545000E+1, 0.00000000E+0, 0.13970298E+4, 0.141E+3, 0.600E+2, 0.19545000E+1, 0.00000000E+0, + 0.13613178E+4, 0.141E+3, 0.610E+2, 0.19545000E+1, 0.00000000E+0, 0.13285415E+4, 0.141E+3, + 0.620E+2, 0.19545000E+1, 0.00000000E+0, 0.12994488E+4, 0.141E+3, 0.630E+2, 0.19545000E+1, + 0.00000000E+0, 0.10094419E+4, 0.141E+3, 0.640E+2, 0.19545000E+1, 0.00000000E+0, 0.11553947E+4, + 0.141E+3, 0.650E+2, 0.19545000E+1, 0.00000000E+0, 0.11106913E+4, 0.141E+3, 0.660E+2, + 0.19545000E+1, 0.00000000E+0, 0.11688393E+4, 0.141E+3, 0.670E+2, 0.19545000E+1, 0.00000000E+0, + 0.11436857E+4, 0.141E+3, 0.680E+2, 0.19545000E+1, 0.00000000E+0, 0.11208436E+4, 0.141E+3, + 0.690E+2, 0.19545000E+1, 0.00000000E+0, 0.11082791E+4, 0.141E+3, 0.700E+2, 0.19545000E+1, + 0.00000000E+0, 0.92522660E+3, 0.141E+3, 0.710E+2, 0.19545000E+1, 0.00000000E+0, 0.90068080E+3, + 0.141E+3, 0.720E+2, 0.19545000E+1, 0.00000000E+0, 0.81649740E+3, 0.141E+3, 0.730E+2, + 0.19545000E+1, 0.00000000E+0, 0.68598560E+3, 0.141E+3, 0.740E+2, 0.19545000E+1, 0.00000000E+0, + 0.69600400E+3, 0.141E+3, 0.750E+2, 0.19545000E+1, 0.00000000E+0, 0.62720650E+3, 0.141E+3, + 0.760E+2, 0.19545000E+1, 0.00000000E+0, 0.57177930E+3, 0.141E+3, 0.770E+2, 0.19545000E+1, + 0.00000000E+0, 0.47276430E+3, 0.141E+3, 0.780E+2, 0.19545000E+1, 0.00000000E+0, 0.44085970E+3, + 0.141E+3, 0.790E+2, 0.19545000E+1, 0.00000000E+0, 0.45247610E+3, 0.141E+3, 0.800E+2, + 0.19545000E+1, 0.00000000E+0, 0.67515180E+3, 0.141E+3, 0.810E+2, 0.19545000E+1, 0.00000000E+0, + 0.65444510E+3, 0.141E+3, 0.820E+2, 0.19545000E+1, 0.00000000E+0, 0.59566400E+3, 0.141E+3, + 0.830E+2, 0.19545000E+1, 0.00000000E+0, 0.56506480E+3, 0.141E+3, 0.840E+2, 0.19545000E+1, + 0.00000000E+0, 0.51821240E+3, 0.141E+3, 0.850E+2, 0.19545000E+1, 0.00000000E+0, 0.47230580E+3, + 0.141E+3, 0.860E+2, 0.19545000E+1, 0.00000000E+0, 0.17127050E+4, 0.141E+3, 0.870E+2, + 0.19545000E+1, 0.00000000E+0, 0.16235376E+4, 0.141E+3, 0.880E+2, 0.19545000E+1, 0.00000000E+0, + 0.14203983E+4, 0.141E+3, 0.890E+2, 0.19545000E+1, 0.00000000E+0, 0.12619867E+4, 0.141E+3, + 0.900E+2, 0.19545000E+1, 0.00000000E+0, 0.12600147E+4, 0.141E+3, 0.910E+2, 0.19545000E+1, + 0.00000000E+0, 0.12197064E+4, 0.141E+3, 0.920E+2, 0.19545000E+1, 0.00000000E+0, 0.12648378E+4, + 0.141E+3, 0.930E+2, 0.19545000E+1, 0.00000000E+0, 0.12232638E+4, 0.141E+3, 0.940E+2, + 0.19545000E+1, 0.00000000E+0, 0.65312900E+2, 0.141E+3, 0.101E+3, 0.19545000E+1, 0.00000000E+0, + 0.21897060E+3, 0.141E+3, 0.103E+3, 0.19545000E+1, 0.98650000E+0, 0.27808810E+3, 0.141E+3, + 0.104E+3, 0.19545000E+1, 0.98080000E+0, 0.20799430E+3, 0.141E+3, 0.105E+3, 0.19545000E+1, + 0.97060000E+0, 0.15487640E+3, 0.141E+3, 0.106E+3, 0.19545000E+1, 0.98680000E+0, 0.10631410E+3, + 0.141E+3, 0.107E+3, 0.19545000E+1, 0.99440000E+0, 0.76634700E+2, 0.141E+3, 0.108E+3, + 0.19545000E+1, 0.99250000E+0, 0.52041200E+2, 0.141E+3, 0.109E+3, 0.19545000E+1, 0.99820000E+0, + 0.32153780E+3, 0.141E+3, 0.111E+3, 0.19545000E+1, 0.96840000E+0, 0.49834860E+3, 0.141E+3, + 0.112E+3, 0.19545000E+1, 0.96280000E+0, 0.49907610E+3, 0.141E+3, 0.113E+3, 0.19545000E+1, + 0.96480000E+0, 0.39454030E+3, 0.141E+3, 0.114E+3, 0.19545000E+1, 0.95070000E+0, 0.31930990E+3, + 0.141E+3, 0.115E+3, 0.19545000E+1, 0.99470000E+0, 0.26788580E+3, 0.141E+3, 0.116E+3, + 0.19545000E+1, 0.99480000E+0, 0.21720780E+3, 0.141E+3, 0.117E+3, 0.19545000E+1, 0.99720000E+0, + 0.43952280E+3, 0.141E+3, 0.119E+3, 0.19545000E+1, 0.97670000E+0, 0.86414110E+3, 0.141E+3, + 0.120E+3, 0.19545000E+1, 0.98310000E+0, 0.43378650E+3, 0.141E+3, 0.121E+3, 0.19545000E+1, + 0.18627000E+1, 0.41830680E+3, 0.141E+3, 0.122E+3, 0.19545000E+1, 0.18299000E+1, 0.41010330E+3, + 0.141E+3, 0.123E+3, 0.19545000E+1, 0.19138000E+1, 0.40698940E+3, 0.141E+3, 0.124E+3, + 0.19545000E+1, 0.18269000E+1, 0.37146910E+3, 0.141E+3, 0.125E+3, 0.19545000E+1, 0.16406000E+1, + 0.34300120E+3, 0.141E+3, 0.126E+3, 0.19545000E+1, 0.16483000E+1, 0.32719950E+3, 0.141E+3, + 0.127E+3, 0.19545000E+1, 0.17149000E+1, 0.32009600E+3, 0.141E+3, 0.128E+3, 0.19545000E+1, + 0.17937000E+1, 0.31821360E+3, 0.141E+3, 0.129E+3, 0.19545000E+1, 0.95760000E+0, 0.29527620E+3, + 0.141E+3, 0.130E+3, 0.19545000E+1, 0.19419000E+1, 0.49283160E+3, 0.141E+3, 0.131E+3, + 0.19545000E+1, 0.96010000E+0, 0.42736220E+3, 0.141E+3, 0.132E+3, 0.19545000E+1, 0.94340000E+0, + 0.37950970E+3, 0.141E+3, 0.133E+3, 0.19545000E+1, 0.98890000E+0, 0.34441690E+3, 0.141E+3, + 0.134E+3, 0.19545000E+1, 0.99010000E+0, 0.30134630E+3, 0.141E+3, 0.135E+3, 0.19545000E+1, + 0.99740000E+0, 0.52294490E+3, 0.141E+3, 0.137E+3, 0.19545000E+1, 0.97380000E+0, 0.10528629E+4, + 0.141E+3, 0.138E+3, 0.19545000E+1, 0.98010000E+0, 0.78749500E+3, 0.141E+3, 0.139E+3, + 0.19545000E+1, 0.19153000E+1, 0.57445910E+3, 0.141E+3, 0.140E+3, 0.19545000E+1, 0.19355000E+1, + 0.58058240E+3, 0.141E+3, 0.141E+3, 0.19545000E+1, 0.19545000E+1, 0.37547800E+2, 0.142E+3, + 0.100E+1, 0.19420000E+1, 0.91180000E+0, 0.24553000E+2, 0.142E+3, 0.200E+1, 0.19420000E+1, + 0.00000000E+0, 0.62818170E+3, 0.142E+3, 0.300E+1, 0.19420000E+1, 0.00000000E+0, 0.34918970E+3, + 0.142E+3, 0.400E+1, 0.19420000E+1, 0.00000000E+0, 0.23104490E+3, 0.142E+3, 0.500E+1, + 0.19420000E+1, 0.00000000E+0, 0.15432880E+3, 0.142E+3, 0.600E+1, 0.19420000E+1, 0.00000000E+0, + 0.10713040E+3, 0.142E+3, 0.700E+1, 0.19420000E+1, 0.00000000E+0, 0.80736000E+2, 0.142E+3, + 0.800E+1, 0.19420000E+1, 0.00000000E+0, 0.60941400E+2, 0.142E+3, 0.900E+1, 0.19420000E+1, + 0.00000000E+0, 0.46749800E+2, 0.142E+3, 0.100E+2, 0.19420000E+1, 0.00000000E+0, 0.74949740E+3, + 0.142E+3, 0.110E+2, 0.19420000E+1, 0.00000000E+0, 0.55988560E+3, 0.142E+3, 0.120E+2, + 0.19420000E+1, 0.00000000E+0, 0.51108100E+3, 0.142E+3, 0.130E+2, 0.19420000E+1, 0.00000000E+0, + 0.39766020E+3, 0.142E+3, 0.140E+2, 0.19420000E+1, 0.00000000E+0, 0.30713840E+3, 0.142E+3, + 0.150E+2, 0.19420000E+1, 0.00000000E+0, 0.25349850E+3, 0.142E+3, 0.160E+2, 0.19420000E+1, + 0.00000000E+0, 0.20604590E+3, 0.142E+3, 0.170E+2, 0.19420000E+1, 0.00000000E+0, 0.16790140E+3, + 0.142E+3, 0.180E+2, 0.19420000E+1, 0.00000000E+0, 0.12379643E+4, 0.142E+3, 0.190E+2, + 0.19420000E+1, 0.00000000E+0, 0.99601570E+3, 0.142E+3, 0.200E+2, 0.19420000E+1, 0.00000000E+0, + 0.81851610E+3, 0.142E+3, 0.210E+2, 0.19420000E+1, 0.00000000E+0, 0.78705650E+3, 0.142E+3, + 0.220E+2, 0.19420000E+1, 0.00000000E+0, 0.71884690E+3, 0.142E+3, 0.230E+2, 0.19420000E+1, + 0.00000000E+0, 0.56643000E+3, 0.142E+3, 0.240E+2, 0.19420000E+1, 0.00000000E+0, 0.61659930E+3, + 0.142E+3, 0.250E+2, 0.19420000E+1, 0.00000000E+0, 0.48385370E+3, 0.142E+3, 0.260E+2, + 0.19420000E+1, 0.00000000E+0, 0.50969990E+3, 0.142E+3, 0.270E+2, 0.19420000E+1, 0.00000000E+0, + 0.52637950E+3, 0.142E+3, 0.280E+2, 0.19420000E+1, 0.00000000E+0, 0.40384000E+3, 0.142E+3, + 0.290E+2, 0.19420000E+1, 0.00000000E+0, 0.41098660E+3, 0.142E+3, 0.300E+2, 0.19420000E+1, + 0.00000000E+0, 0.48798580E+3, 0.142E+3, 0.310E+2, 0.19420000E+1, 0.00000000E+0, 0.42607030E+3, + 0.142E+3, 0.320E+2, 0.19420000E+1, 0.00000000E+0, 0.36044960E+3, 0.142E+3, 0.330E+2, + 0.19420000E+1, 0.00000000E+0, 0.32194150E+3, 0.142E+3, 0.340E+2, 0.19420000E+1, 0.00000000E+0, + 0.28047020E+3, 0.142E+3, 0.350E+2, 0.19420000E+1, 0.00000000E+0, 0.24296840E+3, 0.142E+3, + 0.360E+2, 0.19420000E+1, 0.00000000E+0, 0.13851228E+4, 0.142E+3, 0.370E+2, 0.19420000E+1, + 0.00000000E+0, 0.11881982E+4, 0.142E+3, 0.380E+2, 0.19420000E+1, 0.00000000E+0, 0.10314745E+4, + 0.142E+3, 0.390E+2, 0.19420000E+1, 0.00000000E+0, 0.92206600E+3, 0.142E+3, 0.400E+2, + 0.19420000E+1, 0.00000000E+0, 0.83798490E+3, 0.142E+3, 0.410E+2, 0.19420000E+1, 0.00000000E+0, + 0.64347210E+3, 0.142E+3, 0.420E+2, 0.19420000E+1, 0.00000000E+0, 0.71936590E+3, 0.142E+3, + 0.430E+2, 0.19420000E+1, 0.00000000E+0, 0.54480750E+3, 0.142E+3, 0.440E+2, 0.19420000E+1, + 0.00000000E+0, 0.59515030E+3, 0.142E+3, 0.450E+2, 0.19420000E+1, 0.00000000E+0, 0.55075570E+3, + 0.142E+3, 0.460E+2, 0.19420000E+1, 0.00000000E+0, 0.46023670E+3, 0.142E+3, 0.470E+2, + 0.19420000E+1, 0.00000000E+0, 0.48402860E+3, 0.142E+3, 0.480E+2, 0.19420000E+1, 0.00000000E+0, + 0.61139110E+3, 0.142E+3, 0.490E+2, 0.19420000E+1, 0.00000000E+0, 0.56051040E+3, 0.142E+3, + 0.500E+2, 0.19420000E+1, 0.00000000E+0, 0.49569480E+3, 0.142E+3, 0.510E+2, 0.19420000E+1, + 0.00000000E+0, 0.45793020E+3, 0.142E+3, 0.520E+2, 0.19420000E+1, 0.00000000E+0, 0.41222750E+3, + 0.142E+3, 0.530E+2, 0.19420000E+1, 0.00000000E+0, 0.36915310E+3, 0.142E+3, 0.540E+2, + 0.19420000E+1, 0.00000000E+0, 0.16877490E+4, 0.142E+3, 0.550E+2, 0.19420000E+1, 0.00000000E+0, + 0.15201317E+4, 0.142E+3, 0.560E+2, 0.19420000E+1, 0.00000000E+0, 0.13232583E+4, 0.142E+3, + 0.570E+2, 0.19420000E+1, 0.00000000E+0, 0.58664300E+3, 0.142E+3, 0.580E+2, 0.19420000E+1, + 0.27991000E+1, 0.13428116E+4, 0.142E+3, 0.590E+2, 0.19420000E+1, 0.00000000E+0, 0.12872763E+4, + 0.142E+3, 0.600E+2, 0.19420000E+1, 0.00000000E+0, 0.12544039E+4, 0.142E+3, 0.610E+2, + 0.19420000E+1, 0.00000000E+0, 0.12242314E+4, 0.142E+3, 0.620E+2, 0.19420000E+1, 0.00000000E+0, + 0.11974564E+4, 0.142E+3, 0.630E+2, 0.19420000E+1, 0.00000000E+0, 0.93283320E+3, 0.142E+3, + 0.640E+2, 0.19420000E+1, 0.00000000E+0, 0.10667077E+4, 0.142E+3, 0.650E+2, 0.19420000E+1, + 0.00000000E+0, 0.10271026E+4, 0.142E+3, 0.660E+2, 0.19420000E+1, 0.00000000E+0, 0.10774205E+4, + 0.142E+3, 0.670E+2, 0.19420000E+1, 0.00000000E+0, 0.10542484E+4, 0.142E+3, 0.680E+2, + 0.19420000E+1, 0.00000000E+0, 0.10332364E+4, 0.142E+3, 0.690E+2, 0.19420000E+1, 0.00000000E+0, + 0.10215311E+4, 0.142E+3, 0.700E+2, 0.19420000E+1, 0.00000000E+0, 0.85524570E+3, 0.142E+3, + 0.710E+2, 0.19420000E+1, 0.00000000E+0, 0.83345230E+3, 0.142E+3, 0.720E+2, 0.19420000E+1, + 0.00000000E+0, 0.75675320E+3, 0.142E+3, 0.730E+2, 0.19420000E+1, 0.00000000E+0, 0.63690770E+3, + 0.142E+3, 0.740E+2, 0.19420000E+1, 0.00000000E+0, 0.64654950E+3, 0.142E+3, 0.750E+2, + 0.19420000E+1, 0.00000000E+0, 0.58352570E+3, 0.142E+3, 0.760E+2, 0.19420000E+1, 0.00000000E+0, + 0.53265790E+3, 0.142E+3, 0.770E+2, 0.19420000E+1, 0.00000000E+0, 0.44119610E+3, 0.142E+3, + 0.780E+2, 0.19420000E+1, 0.00000000E+0, 0.41171360E+3, 0.142E+3, 0.790E+2, 0.19420000E+1, + 0.00000000E+0, 0.42271910E+3, 0.142E+3, 0.800E+2, 0.19420000E+1, 0.00000000E+0, 0.62693260E+3, + 0.142E+3, 0.810E+2, 0.19420000E+1, 0.00000000E+0, 0.60866200E+3, 0.142E+3, 0.820E+2, + 0.19420000E+1, 0.00000000E+0, 0.55532550E+3, 0.142E+3, 0.830E+2, 0.19420000E+1, 0.00000000E+0, + 0.52759970E+3, 0.142E+3, 0.840E+2, 0.19420000E+1, 0.00000000E+0, 0.48478900E+3, 0.142E+3, + 0.850E+2, 0.19420000E+1, 0.00000000E+0, 0.44266740E+3, 0.142E+3, 0.860E+2, 0.19420000E+1, + 0.00000000E+0, 0.15815449E+4, 0.142E+3, 0.870E+2, 0.19420000E+1, 0.00000000E+0, 0.14962077E+4, + 0.142E+3, 0.880E+2, 0.19420000E+1, 0.00000000E+0, 0.13112088E+4, 0.142E+3, 0.890E+2, + 0.19420000E+1, 0.00000000E+0, 0.11676309E+4, 0.142E+3, 0.900E+2, 0.19420000E+1, 0.00000000E+0, + 0.11649288E+4, 0.142E+3, 0.910E+2, 0.19420000E+1, 0.00000000E+0, 0.11276927E+4, 0.142E+3, + 0.920E+2, 0.19420000E+1, 0.00000000E+0, 0.11676383E+4, 0.142E+3, 0.930E+2, 0.19420000E+1, + 0.00000000E+0, 0.11294830E+4, 0.142E+3, 0.940E+2, 0.19420000E+1, 0.00000000E+0, 0.60977300E+2, + 0.142E+3, 0.101E+3, 0.19420000E+1, 0.00000000E+0, 0.20251730E+3, 0.142E+3, 0.103E+3, + 0.19420000E+1, 0.98650000E+0, 0.25760880E+3, 0.142E+3, 0.104E+3, 0.19420000E+1, 0.98080000E+0, + 0.19375570E+3, 0.142E+3, 0.105E+3, 0.19420000E+1, 0.97060000E+0, 0.14487380E+3, 0.142E+3, + 0.106E+3, 0.19420000E+1, 0.98680000E+0, 0.99938100E+2, 0.142E+3, 0.107E+3, 0.19420000E+1, + 0.99440000E+0, 0.72352000E+2, 0.142E+3, 0.108E+3, 0.19420000E+1, 0.99250000E+0, 0.49416600E+2, + 0.142E+3, 0.109E+3, 0.19420000E+1, 0.99820000E+0, 0.29717130E+3, 0.142E+3, 0.111E+3, + 0.19420000E+1, 0.96840000E+0, 0.46042340E+3, 0.142E+3, 0.112E+3, 0.19420000E+1, 0.96280000E+0, + 0.46216780E+3, 0.142E+3, 0.113E+3, 0.19420000E+1, 0.96480000E+0, 0.36695490E+3, 0.142E+3, + 0.114E+3, 0.19420000E+1, 0.95070000E+0, 0.29806610E+3, 0.142E+3, 0.115E+3, 0.19420000E+1, + 0.99470000E+0, 0.25075730E+3, 0.142E+3, 0.116E+3, 0.19420000E+1, 0.99480000E+0, 0.20393970E+3, + 0.142E+3, 0.117E+3, 0.19420000E+1, 0.99720000E+0, 0.40759060E+3, 0.142E+3, 0.119E+3, + 0.19420000E+1, 0.97670000E+0, 0.79747730E+3, 0.142E+3, 0.120E+3, 0.19420000E+1, 0.98310000E+0, + 0.40315400E+3, 0.142E+3, 0.121E+3, 0.19420000E+1, 0.18627000E+1, 0.38917870E+3, 0.142E+3, + 0.122E+3, 0.19420000E+1, 0.18299000E+1, 0.38148040E+3, 0.142E+3, 0.123E+3, 0.19420000E+1, + 0.19138000E+1, 0.37844740E+3, 0.142E+3, 0.124E+3, 0.19420000E+1, 0.18269000E+1, 0.34604230E+3, + 0.142E+3, 0.125E+3, 0.19420000E+1, 0.16406000E+1, 0.31976370E+3, 0.142E+3, 0.126E+3, + 0.19420000E+1, 0.16483000E+1, 0.30508870E+3, 0.142E+3, 0.127E+3, 0.19420000E+1, 0.17149000E+1, + 0.29841290E+3, 0.142E+3, 0.128E+3, 0.19420000E+1, 0.17937000E+1, 0.29619890E+3, 0.142E+3, + 0.129E+3, 0.19420000E+1, 0.95760000E+0, 0.27560550E+3, 0.142E+3, 0.130E+3, 0.19420000E+1, + 0.19419000E+1, 0.45716410E+3, 0.142E+3, 0.131E+3, 0.19420000E+1, 0.96010000E+0, 0.39775920E+3, + 0.142E+3, 0.132E+3, 0.19420000E+1, 0.94340000E+0, 0.35418680E+3, 0.142E+3, 0.133E+3, + 0.19420000E+1, 0.98890000E+0, 0.32209780E+3, 0.142E+3, 0.134E+3, 0.19420000E+1, 0.99010000E+0, + 0.28249330E+3, 0.142E+3, 0.135E+3, 0.19420000E+1, 0.99740000E+0, 0.48541290E+3, 0.142E+3, + 0.137E+3, 0.19420000E+1, 0.97380000E+0, 0.97212330E+3, 0.142E+3, 0.138E+3, 0.19420000E+1, + 0.98010000E+0, 0.73014460E+3, 0.142E+3, 0.139E+3, 0.19420000E+1, 0.19153000E+1, 0.53401080E+3, + 0.142E+3, 0.140E+3, 0.19420000E+1, 0.19355000E+1, 0.53935320E+3, 0.142E+3, 0.141E+3, + 0.19420000E+1, 0.19545000E+1, 0.50200730E+3, 0.142E+3, 0.142E+3, 0.19420000E+1, 0.19420000E+1, + 0.41338500E+2, 0.143E+3, 0.100E+1, 0.16682000E+1, 0.91180000E+0, 0.26621700E+2, 0.143E+3, + 0.200E+1, 0.16682000E+1, 0.00000000E+0, 0.76378140E+3, 0.143E+3, 0.300E+1, 0.16682000E+1, + 0.00000000E+0, 0.40277270E+3, 0.143E+3, 0.400E+1, 0.16682000E+1, 0.00000000E+0, 0.26037960E+3, + 0.143E+3, 0.500E+1, 0.16682000E+1, 0.00000000E+0, 0.17125810E+3, 0.143E+3, 0.600E+1, + 0.16682000E+1, 0.00000000E+0, 0.11764790E+3, 0.143E+3, 0.700E+1, 0.16682000E+1, 0.00000000E+0, + 0.88060900E+2, 0.143E+3, 0.800E+1, 0.16682000E+1, 0.00000000E+0, 0.66109300E+2, 0.143E+3, + 0.900E+1, 0.16682000E+1, 0.00000000E+0, 0.50508700E+2, 0.143E+3, 0.100E+2, 0.16682000E+1, + 0.00000000E+0, 0.90840250E+3, 0.143E+3, 0.110E+2, 0.16682000E+1, 0.00000000E+0, 0.65125640E+3, + 0.143E+3, 0.120E+2, 0.16682000E+1, 0.00000000E+0, 0.58698620E+3, 0.143E+3, 0.130E+2, + 0.16682000E+1, 0.00000000E+0, 0.44911910E+3, 0.143E+3, 0.140E+2, 0.16682000E+1, 0.00000000E+0, + 0.34248830E+3, 0.143E+3, 0.150E+2, 0.16682000E+1, 0.00000000E+0, 0.28056130E+3, 0.143E+3, + 0.160E+2, 0.16682000E+1, 0.00000000E+0, 0.22648330E+3, 0.143E+3, 0.170E+2, 0.16682000E+1, + 0.00000000E+0, 0.18352050E+3, 0.143E+3, 0.180E+2, 0.16682000E+1, 0.00000000E+0, 0.15188755E+4, + 0.143E+3, 0.190E+2, 0.16682000E+1, 0.00000000E+0, 0.11783302E+4, 0.143E+3, 0.200E+2, + 0.16682000E+1, 0.00000000E+0, 0.96136570E+3, 0.143E+3, 0.210E+2, 0.16682000E+1, 0.00000000E+0, + 0.91930990E+3, 0.143E+3, 0.220E+2, 0.16682000E+1, 0.00000000E+0, 0.83673410E+3, 0.143E+3, + 0.230E+2, 0.16682000E+1, 0.00000000E+0, 0.65972010E+3, 0.143E+3, 0.240E+2, 0.16682000E+1, + 0.00000000E+0, 0.71418300E+3, 0.143E+3, 0.250E+2, 0.16682000E+1, 0.00000000E+0, 0.56036480E+3, + 0.143E+3, 0.260E+2, 0.16682000E+1, 0.00000000E+0, 0.58529350E+3, 0.143E+3, 0.270E+2, + 0.16682000E+1, 0.00000000E+0, 0.60647400E+3, 0.143E+3, 0.280E+2, 0.16682000E+1, 0.00000000E+0, + 0.46581470E+3, 0.143E+3, 0.290E+2, 0.16682000E+1, 0.00000000E+0, 0.46845290E+3, 0.143E+3, + 0.300E+2, 0.16682000E+1, 0.00000000E+0, 0.55815220E+3, 0.143E+3, 0.310E+2, 0.16682000E+1, + 0.00000000E+0, 0.48089260E+3, 0.143E+3, 0.320E+2, 0.16682000E+1, 0.00000000E+0, 0.40245400E+3, + 0.143E+3, 0.330E+2, 0.16682000E+1, 0.00000000E+0, 0.35725110E+3, 0.143E+3, 0.340E+2, + 0.16682000E+1, 0.00000000E+0, 0.30935300E+3, 0.143E+3, 0.350E+2, 0.16682000E+1, 0.00000000E+0, + 0.26657770E+3, 0.143E+3, 0.360E+2, 0.16682000E+1, 0.00000000E+0, 0.16961214E+4, 0.143E+3, + 0.370E+2, 0.16682000E+1, 0.00000000E+0, 0.14083895E+4, 0.143E+3, 0.380E+2, 0.16682000E+1, + 0.00000000E+0, 0.12079868E+4, 0.143E+3, 0.390E+2, 0.16682000E+1, 0.00000000E+0, 0.10721935E+4, + 0.143E+3, 0.400E+2, 0.16682000E+1, 0.00000000E+0, 0.97020700E+3, 0.143E+3, 0.410E+2, + 0.16682000E+1, 0.00000000E+0, 0.73979150E+3, 0.143E+3, 0.420E+2, 0.16682000E+1, 0.00000000E+0, + 0.82924080E+3, 0.143E+3, 0.430E+2, 0.16682000E+1, 0.00000000E+0, 0.62313860E+3, 0.143E+3, + 0.440E+2, 0.16682000E+1, 0.00000000E+0, 0.68005240E+3, 0.143E+3, 0.450E+2, 0.16682000E+1, + 0.00000000E+0, 0.62758100E+3, 0.143E+3, 0.460E+2, 0.16682000E+1, 0.00000000E+0, 0.52609770E+3, + 0.143E+3, 0.470E+2, 0.16682000E+1, 0.00000000E+0, 0.54963380E+3, 0.143E+3, 0.480E+2, + 0.16682000E+1, 0.00000000E+0, 0.70042290E+3, 0.143E+3, 0.490E+2, 0.16682000E+1, 0.00000000E+0, + 0.63478310E+3, 0.143E+3, 0.500E+2, 0.16682000E+1, 0.00000000E+0, 0.55577940E+3, 0.143E+3, + 0.510E+2, 0.16682000E+1, 0.00000000E+0, 0.51056820E+3, 0.143E+3, 0.520E+2, 0.16682000E+1, + 0.00000000E+0, 0.45697070E+3, 0.143E+3, 0.530E+2, 0.16682000E+1, 0.00000000E+0, 0.40709700E+3, + 0.143E+3, 0.540E+2, 0.16682000E+1, 0.00000000E+0, 0.20688557E+4, 0.143E+3, 0.550E+2, + 0.16682000E+1, 0.00000000E+0, 0.18110626E+4, 0.143E+3, 0.560E+2, 0.16682000E+1, 0.00000000E+0, + 0.15570674E+4, 0.143E+3, 0.570E+2, 0.16682000E+1, 0.00000000E+0, 0.65923480E+3, 0.143E+3, + 0.580E+2, 0.16682000E+1, 0.27991000E+1, 0.15936331E+4, 0.143E+3, 0.590E+2, 0.16682000E+1, + 0.00000000E+0, 0.15238714E+4, 0.143E+3, 0.600E+2, 0.16682000E+1, 0.00000000E+0, 0.14839817E+4, + 0.143E+3, 0.610E+2, 0.16682000E+1, 0.00000000E+0, 0.14474665E+4, 0.143E+3, 0.620E+2, + 0.16682000E+1, 0.00000000E+0, 0.14150358E+4, 0.143E+3, 0.630E+2, 0.16682000E+1, 0.00000000E+0, + 0.10889839E+4, 0.143E+3, 0.640E+2, 0.16682000E+1, 0.00000000E+0, 0.12727235E+4, 0.143E+3, + 0.650E+2, 0.16682000E+1, 0.00000000E+0, 0.12232739E+4, 0.143E+3, 0.660E+2, 0.16682000E+1, + 0.00000000E+0, 0.12689174E+4, 0.143E+3, 0.670E+2, 0.16682000E+1, 0.00000000E+0, 0.12411151E+4, + 0.143E+3, 0.680E+2, 0.16682000E+1, 0.00000000E+0, 0.12157298E+4, 0.143E+3, 0.690E+2, + 0.16682000E+1, 0.00000000E+0, 0.12025314E+4, 0.143E+3, 0.700E+2, 0.16682000E+1, 0.00000000E+0, + 0.99886140E+3, 0.143E+3, 0.710E+2, 0.16682000E+1, 0.00000000E+0, 0.96131920E+3, 0.143E+3, + 0.720E+2, 0.16682000E+1, 0.00000000E+0, 0.86700540E+3, 0.143E+3, 0.730E+2, 0.16682000E+1, + 0.00000000E+0, 0.72670660E+3, 0.143E+3, 0.740E+2, 0.16682000E+1, 0.00000000E+0, 0.73557240E+3, + 0.143E+3, 0.750E+2, 0.16682000E+1, 0.00000000E+0, 0.66018700E+3, 0.143E+3, 0.760E+2, + 0.16682000E+1, 0.00000000E+0, 0.60002740E+3, 0.143E+3, 0.770E+2, 0.16682000E+1, 0.00000000E+0, + 0.49511760E+3, 0.143E+3, 0.780E+2, 0.16682000E+1, 0.00000000E+0, 0.46130260E+3, 0.143E+3, + 0.790E+2, 0.16682000E+1, 0.00000000E+0, 0.47242330E+3, 0.143E+3, 0.800E+2, 0.16682000E+1, + 0.00000000E+0, 0.71722290E+3, 0.143E+3, 0.810E+2, 0.16682000E+1, 0.00000000E+0, 0.68964350E+3, + 0.143E+3, 0.820E+2, 0.16682000E+1, 0.00000000E+0, 0.62335390E+3, 0.143E+3, 0.830E+2, + 0.16682000E+1, 0.00000000E+0, 0.58927250E+3, 0.143E+3, 0.840E+2, 0.16682000E+1, 0.00000000E+0, + 0.53837470E+3, 0.143E+3, 0.850E+2, 0.16682000E+1, 0.00000000E+0, 0.48918620E+3, 0.143E+3, + 0.860E+2, 0.16682000E+1, 0.00000000E+0, 0.19184029E+4, 0.143E+3, 0.870E+2, 0.16682000E+1, + 0.00000000E+0, 0.17715639E+4, 0.143E+3, 0.880E+2, 0.16682000E+1, 0.00000000E+0, 0.15346792E+4, + 0.143E+3, 0.890E+2, 0.16682000E+1, 0.00000000E+0, 0.13502400E+4, 0.143E+3, 0.900E+2, + 0.16682000E+1, 0.00000000E+0, 0.13560504E+4, 0.143E+3, 0.910E+2, 0.16682000E+1, 0.00000000E+0, + 0.13122121E+4, 0.143E+3, 0.920E+2, 0.16682000E+1, 0.00000000E+0, 0.13686610E+4, 0.143E+3, + 0.930E+2, 0.16682000E+1, 0.00000000E+0, 0.13219594E+4, 0.143E+3, 0.940E+2, 0.16682000E+1, + 0.00000000E+0, 0.67892400E+2, 0.143E+3, 0.101E+3, 0.16682000E+1, 0.00000000E+0, 0.23295390E+3, + 0.143E+3, 0.103E+3, 0.16682000E+1, 0.98650000E+0, 0.29538160E+3, 0.143E+3, 0.104E+3, + 0.16682000E+1, 0.98080000E+0, 0.21747620E+3, 0.143E+3, 0.105E+3, 0.16682000E+1, 0.97060000E+0, + 0.16092230E+3, 0.143E+3, 0.106E+3, 0.16682000E+1, 0.98680000E+0, 0.10977550E+3, 0.143E+3, + 0.107E+3, 0.16682000E+1, 0.99440000E+0, 0.78792000E+2, 0.143E+3, 0.108E+3, 0.16682000E+1, + 0.99250000E+0, 0.53288000E+2, 0.143E+3, 0.109E+3, 0.16682000E+1, 0.99820000E+0, 0.34355920E+3, + 0.143E+3, 0.111E+3, 0.16682000E+1, 0.96840000E+0, 0.53370850E+3, 0.143E+3, 0.112E+3, + 0.16682000E+1, 0.96280000E+0, 0.52930430E+3, 0.143E+3, 0.113E+3, 0.16682000E+1, 0.96480000E+0, + 0.41359910E+3, 0.143E+3, 0.114E+3, 0.16682000E+1, 0.95070000E+0, 0.33227830E+3, 0.143E+3, + 0.115E+3, 0.16682000E+1, 0.99470000E+0, 0.27760020E+3, 0.143E+3, 0.116E+3, 0.16682000E+1, + 0.99480000E+0, 0.22420950E+3, 0.143E+3, 0.117E+3, 0.16682000E+1, 0.99720000E+0, 0.46809770E+3, + 0.143E+3, 0.119E+3, 0.16682000E+1, 0.97670000E+0, 0.94599430E+3, 0.143E+3, 0.120E+3, + 0.16682000E+1, 0.98310000E+0, 0.45591090E+3, 0.143E+3, 0.121E+3, 0.16682000E+1, 0.18627000E+1, + 0.44025610E+3, 0.143E+3, 0.122E+3, 0.16682000E+1, 0.18299000E+1, 0.43163910E+3, 0.143E+3, + 0.123E+3, 0.16682000E+1, 0.19138000E+1, 0.42896620E+3, 0.143E+3, 0.124E+3, 0.16682000E+1, + 0.18269000E+1, 0.38890660E+3, 0.143E+3, 0.125E+3, 0.16682000E+1, 0.16406000E+1, 0.35865620E+3, + 0.143E+3, 0.126E+3, 0.16682000E+1, 0.16483000E+1, 0.34229790E+3, 0.143E+3, 0.127E+3, + 0.16682000E+1, 0.17149000E+1, 0.33502870E+3, 0.143E+3, 0.128E+3, 0.16682000E+1, 0.17937000E+1, + 0.33456150E+3, 0.143E+3, 0.129E+3, 0.16682000E+1, 0.95760000E+0, 0.30788150E+3, 0.143E+3, + 0.130E+3, 0.16682000E+1, 0.19419000E+1, 0.52114410E+3, 0.143E+3, 0.131E+3, 0.16682000E+1, + 0.96010000E+0, 0.44771310E+3, 0.143E+3, 0.132E+3, 0.16682000E+1, 0.94340000E+0, 0.39524720E+3, + 0.143E+3, 0.133E+3, 0.16682000E+1, 0.98890000E+0, 0.35747370E+3, 0.143E+3, 0.134E+3, + 0.16682000E+1, 0.99010000E+0, 0.31169010E+3, 0.143E+3, 0.135E+3, 0.16682000E+1, 0.99740000E+0, + 0.55612550E+3, 0.143E+3, 0.137E+3, 0.16682000E+1, 0.97380000E+0, 0.11562604E+4, 0.143E+3, + 0.138E+3, 0.16682000E+1, 0.98010000E+0, 0.84837270E+3, 0.143E+3, 0.139E+3, 0.16682000E+1, + 0.19153000E+1, 0.60533890E+3, 0.143E+3, 0.140E+3, 0.16682000E+1, 0.19355000E+1, 0.61127640E+3, + 0.143E+3, 0.141E+3, 0.16682000E+1, 0.19545000E+1, 0.56776700E+3, 0.143E+3, 0.142E+3, + 0.16682000E+1, 0.19420000E+1, 0.64971430E+3, 0.143E+3, 0.143E+3, 0.16682000E+1, 0.16682000E+1, + 0.33187500E+2, 0.144E+3, 0.100E+1, 0.18584000E+1, 0.91180000E+0, 0.22061600E+2, 0.144E+3, + 0.200E+1, 0.18584000E+1, 0.00000000E+0, 0.51733300E+3, 0.144E+3, 0.300E+1, 0.18584000E+1, + 0.00000000E+0, 0.29751860E+3, 0.144E+3, 0.400E+1, 0.18584000E+1, 0.00000000E+0, 0.20032990E+3, + 0.144E+3, 0.500E+1, 0.18584000E+1, 0.00000000E+0, 0.13555170E+3, 0.144E+3, 0.600E+1, + 0.18584000E+1, 0.00000000E+0, 0.95019000E+2, 0.144E+3, 0.700E+1, 0.18584000E+1, 0.00000000E+0, + 0.72117300E+2, 0.144E+3, 0.800E+1, 0.18584000E+1, 0.00000000E+0, 0.54778100E+2, 0.144E+3, + 0.900E+1, 0.18584000E+1, 0.00000000E+0, 0.42243200E+2, 0.144E+3, 0.100E+2, 0.18584000E+1, + 0.00000000E+0, 0.61866690E+3, 0.144E+3, 0.110E+2, 0.18584000E+1, 0.00000000E+0, 0.47441800E+3, + 0.144E+3, 0.120E+2, 0.18584000E+1, 0.00000000E+0, 0.43702090E+3, 0.144E+3, 0.130E+2, + 0.18584000E+1, 0.00000000E+0, 0.34421130E+3, 0.144E+3, 0.140E+2, 0.18584000E+1, 0.00000000E+0, + 0.26854160E+3, 0.144E+3, 0.150E+2, 0.18584000E+1, 0.00000000E+0, 0.22308830E+3, 0.144E+3, + 0.160E+2, 0.18584000E+1, 0.00000000E+0, 0.18247210E+3, 0.144E+3, 0.170E+2, 0.18584000E+1, + 0.00000000E+0, 0.14952220E+3, 0.144E+3, 0.180E+2, 0.18584000E+1, 0.00000000E+0, 0.10157997E+4, + 0.144E+3, 0.190E+2, 0.18584000E+1, 0.00000000E+0, 0.83526920E+3, 0.144E+3, 0.200E+2, + 0.18584000E+1, 0.00000000E+0, 0.68960880E+3, 0.144E+3, 0.210E+2, 0.18584000E+1, 0.00000000E+0, + 0.66581430E+3, 0.144E+3, 0.220E+2, 0.18584000E+1, 0.00000000E+0, 0.60961590E+3, 0.144E+3, + 0.230E+2, 0.18584000E+1, 0.00000000E+0, 0.48063820E+3, 0.144E+3, 0.240E+2, 0.18584000E+1, + 0.00000000E+0, 0.52477480E+3, 0.144E+3, 0.250E+2, 0.18584000E+1, 0.00000000E+0, 0.41224680E+3, + 0.144E+3, 0.260E+2, 0.18584000E+1, 0.00000000E+0, 0.43640540E+3, 0.144E+3, 0.270E+2, + 0.18584000E+1, 0.00000000E+0, 0.44958060E+3, 0.144E+3, 0.280E+2, 0.18584000E+1, 0.00000000E+0, + 0.34510430E+3, 0.144E+3, 0.290E+2, 0.18584000E+1, 0.00000000E+0, 0.35378800E+3, 0.144E+3, + 0.300E+2, 0.18584000E+1, 0.00000000E+0, 0.41885730E+3, 0.144E+3, 0.310E+2, 0.18584000E+1, + 0.00000000E+0, 0.36917340E+3, 0.144E+3, 0.320E+2, 0.18584000E+1, 0.00000000E+0, 0.31492530E+3, + 0.144E+3, 0.330E+2, 0.18584000E+1, 0.00000000E+0, 0.28273020E+3, 0.144E+3, 0.340E+2, + 0.18584000E+1, 0.00000000E+0, 0.24762030E+3, 0.144E+3, 0.350E+2, 0.18584000E+1, 0.00000000E+0, + 0.21556830E+3, 0.144E+3, 0.360E+2, 0.18584000E+1, 0.00000000E+0, 0.11385265E+4, 0.144E+3, + 0.370E+2, 0.18584000E+1, 0.00000000E+0, 0.99561160E+3, 0.144E+3, 0.380E+2, 0.18584000E+1, + 0.00000000E+0, 0.87126000E+3, 0.144E+3, 0.390E+2, 0.18584000E+1, 0.00000000E+0, 0.78271660E+3, + 0.144E+3, 0.400E+2, 0.18584000E+1, 0.00000000E+0, 0.71364770E+3, 0.144E+3, 0.410E+2, + 0.18584000E+1, 0.00000000E+0, 0.55112400E+3, 0.144E+3, 0.420E+2, 0.18584000E+1, 0.00000000E+0, + 0.61481850E+3, 0.144E+3, 0.430E+2, 0.18584000E+1, 0.00000000E+0, 0.46856950E+3, 0.144E+3, + 0.440E+2, 0.18584000E+1, 0.00000000E+0, 0.51183150E+3, 0.144E+3, 0.450E+2, 0.18584000E+1, + 0.00000000E+0, 0.47463690E+3, 0.144E+3, 0.460E+2, 0.18584000E+1, 0.00000000E+0, 0.39627420E+3, + 0.144E+3, 0.470E+2, 0.18584000E+1, 0.00000000E+0, 0.41825790E+3, 0.144E+3, 0.480E+2, + 0.18584000E+1, 0.00000000E+0, 0.52482360E+3, 0.144E+3, 0.490E+2, 0.18584000E+1, 0.00000000E+0, + 0.48488550E+3, 0.144E+3, 0.500E+2, 0.18584000E+1, 0.00000000E+0, 0.43198650E+3, 0.144E+3, + 0.510E+2, 0.18584000E+1, 0.00000000E+0, 0.40083190E+3, 0.144E+3, 0.520E+2, 0.18584000E+1, + 0.00000000E+0, 0.36253740E+3, 0.144E+3, 0.530E+2, 0.18584000E+1, 0.00000000E+0, 0.32611570E+3, + 0.144E+3, 0.540E+2, 0.18584000E+1, 0.00000000E+0, 0.13871242E+4, 0.144E+3, 0.550E+2, + 0.18584000E+1, 0.00000000E+0, 0.12701002E+4, 0.144E+3, 0.560E+2, 0.18584000E+1, 0.00000000E+0, + 0.11145962E+4, 0.144E+3, 0.570E+2, 0.18584000E+1, 0.00000000E+0, 0.51058640E+3, 0.144E+3, + 0.580E+2, 0.18584000E+1, 0.27991000E+1, 0.11251127E+4, 0.144E+3, 0.590E+2, 0.18584000E+1, + 0.00000000E+0, 0.10801628E+4, 0.144E+3, 0.600E+2, 0.18584000E+1, 0.00000000E+0, 0.10529974E+4, + 0.144E+3, 0.610E+2, 0.18584000E+1, 0.00000000E+0, 0.10280158E+4, 0.144E+3, 0.620E+2, + 0.18584000E+1, 0.00000000E+0, 0.10058586E+4, 0.144E+3, 0.630E+2, 0.18584000E+1, 0.00000000E+0, + 0.79051760E+3, 0.144E+3, 0.640E+2, 0.18584000E+1, 0.00000000E+0, 0.89187640E+3, 0.144E+3, + 0.650E+2, 0.18584000E+1, 0.00000000E+0, 0.85997290E+3, 0.144E+3, 0.660E+2, 0.18584000E+1, + 0.00000000E+0, 0.90692140E+3, 0.144E+3, 0.670E+2, 0.18584000E+1, 0.00000000E+0, 0.88762020E+3, + 0.144E+3, 0.680E+2, 0.18584000E+1, 0.00000000E+0, 0.87020630E+3, 0.144E+3, 0.690E+2, + 0.18584000E+1, 0.00000000E+0, 0.86003450E+3, 0.144E+3, 0.700E+2, 0.18584000E+1, 0.00000000E+0, + 0.72429040E+3, 0.144E+3, 0.710E+2, 0.18584000E+1, 0.00000000E+0, 0.71147790E+3, 0.144E+3, + 0.720E+2, 0.18584000E+1, 0.00000000E+0, 0.64914710E+3, 0.144E+3, 0.730E+2, 0.18584000E+1, + 0.00000000E+0, 0.54842120E+3, 0.144E+3, 0.740E+2, 0.18584000E+1, 0.00000000E+0, 0.55775610E+3, + 0.144E+3, 0.750E+2, 0.18584000E+1, 0.00000000E+0, 0.50549330E+3, 0.144E+3, 0.760E+2, + 0.18584000E+1, 0.00000000E+0, 0.46298700E+3, 0.144E+3, 0.770E+2, 0.18584000E+1, 0.00000000E+0, + 0.38491460E+3, 0.144E+3, 0.780E+2, 0.18584000E+1, 0.00000000E+0, 0.35974270E+3, 0.144E+3, + 0.790E+2, 0.18584000E+1, 0.00000000E+0, 0.36989520E+3, 0.144E+3, 0.800E+2, 0.18584000E+1, + 0.00000000E+0, 0.53929820E+3, 0.144E+3, 0.810E+2, 0.18584000E+1, 0.00000000E+0, 0.52677380E+3, + 0.144E+3, 0.820E+2, 0.18584000E+1, 0.00000000E+0, 0.48381430E+3, 0.144E+3, 0.830E+2, + 0.18584000E+1, 0.00000000E+0, 0.46139360E+3, 0.144E+3, 0.840E+2, 0.18584000E+1, 0.00000000E+0, + 0.42587210E+3, 0.144E+3, 0.850E+2, 0.18584000E+1, 0.00000000E+0, 0.39047110E+3, 0.144E+3, + 0.860E+2, 0.18584000E+1, 0.00000000E+0, 0.13086904E+4, 0.144E+3, 0.870E+2, 0.18584000E+1, + 0.00000000E+0, 0.12553593E+4, 0.144E+3, 0.880E+2, 0.18584000E+1, 0.00000000E+0, 0.11084934E+4, + 0.144E+3, 0.890E+2, 0.18584000E+1, 0.00000000E+0, 0.99548230E+3, 0.144E+3, 0.900E+2, + 0.18584000E+1, 0.00000000E+0, 0.98913640E+3, 0.144E+3, 0.910E+2, 0.18584000E+1, 0.00000000E+0, + 0.95777810E+3, 0.144E+3, 0.920E+2, 0.18584000E+1, 0.00000000E+0, 0.98673520E+3, 0.144E+3, + 0.930E+2, 0.18584000E+1, 0.00000000E+0, 0.95542490E+3, 0.144E+3, 0.940E+2, 0.18584000E+1, + 0.00000000E+0, 0.53364800E+2, 0.144E+3, 0.101E+3, 0.18584000E+1, 0.00000000E+0, 0.17297080E+3, + 0.144E+3, 0.103E+3, 0.18584000E+1, 0.98650000E+0, 0.22067460E+3, 0.144E+3, 0.104E+3, + 0.18584000E+1, 0.98080000E+0, 0.16859440E+3, 0.144E+3, 0.105E+3, 0.18584000E+1, 0.97060000E+0, + 0.12721250E+3, 0.144E+3, 0.106E+3, 0.18584000E+1, 0.98680000E+0, 0.88661300E+2, 0.144E+3, + 0.107E+3, 0.18584000E+1, 0.99440000E+0, 0.64744800E+2, 0.144E+3, 0.108E+3, 0.18584000E+1, + 0.99250000E+0, 0.44708700E+2, 0.144E+3, 0.109E+3, 0.18584000E+1, 0.99820000E+0, 0.25309000E+3, + 0.144E+3, 0.111E+3, 0.18584000E+1, 0.96840000E+0, 0.39136060E+3, 0.144E+3, 0.112E+3, + 0.18584000E+1, 0.96280000E+0, 0.39606340E+3, 0.144E+3, 0.113E+3, 0.18584000E+1, 0.96480000E+0, + 0.31817950E+3, 0.144E+3, 0.114E+3, 0.18584000E+1, 0.95070000E+0, 0.26070120E+3, 0.144E+3, + 0.115E+3, 0.18584000E+1, 0.99470000E+0, 0.22064770E+3, 0.144E+3, 0.116E+3, 0.18584000E+1, + 0.99480000E+0, 0.18059160E+3, 0.144E+3, 0.117E+3, 0.18584000E+1, 0.99720000E+0, 0.34947530E+3, + 0.144E+3, 0.119E+3, 0.18584000E+1, 0.97670000E+0, 0.66876460E+3, 0.144E+3, 0.120E+3, + 0.18584000E+1, 0.98310000E+0, 0.34907020E+3, 0.144E+3, 0.121E+3, 0.18584000E+1, 0.18627000E+1, + 0.33705530E+3, 0.144E+3, 0.122E+3, 0.18584000E+1, 0.18299000E+1, 0.33035670E+3, 0.144E+3, + 0.123E+3, 0.18584000E+1, 0.19138000E+1, 0.32735530E+3, 0.144E+3, 0.124E+3, 0.18584000E+1, + 0.18269000E+1, 0.30103970E+3, 0.144E+3, 0.125E+3, 0.18584000E+1, 0.16406000E+1, 0.27865260E+3, + 0.144E+3, 0.126E+3, 0.18584000E+1, 0.16483000E+1, 0.26587520E+3, 0.144E+3, 0.127E+3, + 0.18584000E+1, 0.17149000E+1, 0.25994720E+3, 0.144E+3, 0.128E+3, 0.18584000E+1, 0.17937000E+1, + 0.25694800E+3, 0.144E+3, 0.129E+3, 0.18584000E+1, 0.95760000E+0, 0.24091240E+3, 0.144E+3, + 0.130E+3, 0.18584000E+1, 0.19419000E+1, 0.39335710E+3, 0.144E+3, 0.131E+3, 0.18584000E+1, + 0.96010000E+0, 0.34538720E+3, 0.144E+3, 0.132E+3, 0.18584000E+1, 0.94340000E+0, 0.30960350E+3, + 0.144E+3, 0.133E+3, 0.18584000E+1, 0.98890000E+0, 0.28284600E+3, 0.144E+3, 0.134E+3, + 0.18584000E+1, 0.99010000E+0, 0.24934040E+3, 0.144E+3, 0.135E+3, 0.18584000E+1, 0.99740000E+0, + 0.41708310E+3, 0.144E+3, 0.137E+3, 0.18584000E+1, 0.97380000E+0, 0.81419750E+3, 0.144E+3, + 0.138E+3, 0.18584000E+1, 0.98010000E+0, 0.62130580E+3, 0.144E+3, 0.139E+3, 0.18584000E+1, + 0.19153000E+1, 0.46191410E+3, 0.144E+3, 0.140E+3, 0.18584000E+1, 0.19355000E+1, 0.46653580E+3, + 0.144E+3, 0.141E+3, 0.18584000E+1, 0.19545000E+1, 0.43510620E+3, 0.144E+3, 0.142E+3, + 0.18584000E+1, 0.19420000E+1, 0.48832640E+3, 0.144E+3, 0.143E+3, 0.18584000E+1, 0.16682000E+1, + 0.37926550E+3, 0.144E+3, 0.144E+3, 0.18584000E+1, 0.18584000E+1, 0.31102400E+2, 0.145E+3, + 0.100E+1, 0.19003000E+1, 0.91180000E+0, 0.20777600E+2, 0.145E+3, 0.200E+1, 0.19003000E+1, + 0.00000000E+0, 0.48243420E+3, 0.145E+3, 0.300E+1, 0.19003000E+1, 0.00000000E+0, 0.27741740E+3, + 0.145E+3, 0.400E+1, 0.19003000E+1, 0.00000000E+0, 0.18713270E+3, 0.145E+3, 0.500E+1, + 0.19003000E+1, 0.00000000E+0, 0.12690850E+3, 0.145E+3, 0.600E+1, 0.19003000E+1, 0.00000000E+0, + 0.89165900E+2, 0.145E+3, 0.700E+1, 0.19003000E+1, 0.00000000E+0, 0.67811400E+2, 0.145E+3, + 0.800E+1, 0.19003000E+1, 0.00000000E+0, 0.51611700E+2, 0.145E+3, 0.900E+1, 0.19003000E+1, + 0.00000000E+0, 0.39876200E+2, 0.145E+3, 0.100E+2, 0.19003000E+1, 0.00000000E+0, 0.57701810E+3, + 0.145E+3, 0.110E+2, 0.19003000E+1, 0.00000000E+0, 0.44233810E+3, 0.145E+3, 0.120E+2, + 0.19003000E+1, 0.00000000E+0, 0.40769990E+3, 0.145E+3, 0.130E+2, 0.19003000E+1, 0.00000000E+0, + 0.32145940E+3, 0.145E+3, 0.140E+2, 0.19003000E+1, 0.00000000E+0, 0.25114770E+3, 0.145E+3, + 0.150E+2, 0.19003000E+1, 0.00000000E+0, 0.20890670E+3, 0.145E+3, 0.160E+2, 0.19003000E+1, + 0.00000000E+0, 0.17111870E+3, 0.145E+3, 0.170E+2, 0.19003000E+1, 0.00000000E+0, 0.14042730E+3, + 0.145E+3, 0.180E+2, 0.19003000E+1, 0.00000000E+0, 0.94851400E+3, 0.145E+3, 0.190E+2, + 0.19003000E+1, 0.00000000E+0, 0.77905470E+3, 0.145E+3, 0.200E+2, 0.19003000E+1, 0.00000000E+0, + 0.64318930E+3, 0.145E+3, 0.210E+2, 0.19003000E+1, 0.00000000E+0, 0.62118070E+3, 0.145E+3, + 0.220E+2, 0.19003000E+1, 0.00000000E+0, 0.56883480E+3, 0.145E+3, 0.230E+2, 0.19003000E+1, + 0.00000000E+0, 0.44875270E+3, 0.145E+3, 0.240E+2, 0.19003000E+1, 0.00000000E+0, 0.48979330E+3, + 0.145E+3, 0.250E+2, 0.19003000E+1, 0.00000000E+0, 0.38501530E+3, 0.145E+3, 0.260E+2, + 0.19003000E+1, 0.00000000E+0, 0.40745740E+3, 0.145E+3, 0.270E+2, 0.19003000E+1, 0.00000000E+0, + 0.41967090E+3, 0.145E+3, 0.280E+2, 0.19003000E+1, 0.00000000E+0, 0.32239880E+3, 0.145E+3, + 0.290E+2, 0.19003000E+1, 0.00000000E+0, 0.33047130E+3, 0.145E+3, 0.300E+2, 0.19003000E+1, + 0.00000000E+0, 0.39105080E+3, 0.145E+3, 0.310E+2, 0.19003000E+1, 0.00000000E+0, 0.34491000E+3, + 0.145E+3, 0.320E+2, 0.19003000E+1, 0.00000000E+0, 0.29454210E+3, 0.145E+3, 0.330E+2, + 0.19003000E+1, 0.00000000E+0, 0.26467170E+3, 0.145E+3, 0.340E+2, 0.19003000E+1, 0.00000000E+0, + 0.23205800E+3, 0.145E+3, 0.350E+2, 0.19003000E+1, 0.00000000E+0, 0.20225670E+3, 0.145E+3, + 0.360E+2, 0.19003000E+1, 0.00000000E+0, 0.10633477E+4, 0.145E+3, 0.370E+2, 0.19003000E+1, + 0.00000000E+0, 0.92882550E+3, 0.145E+3, 0.380E+2, 0.19003000E+1, 0.00000000E+0, 0.81293380E+3, + 0.145E+3, 0.390E+2, 0.19003000E+1, 0.00000000E+0, 0.73049700E+3, 0.145E+3, 0.400E+2, + 0.19003000E+1, 0.00000000E+0, 0.66622590E+3, 0.145E+3, 0.410E+2, 0.19003000E+1, 0.00000000E+0, + 0.51491280E+3, 0.145E+3, 0.420E+2, 0.19003000E+1, 0.00000000E+0, 0.57424560E+3, 0.145E+3, + 0.430E+2, 0.19003000E+1, 0.00000000E+0, 0.43804260E+3, 0.145E+3, 0.440E+2, 0.19003000E+1, + 0.00000000E+0, 0.47828480E+3, 0.145E+3, 0.450E+2, 0.19003000E+1, 0.00000000E+0, 0.44362800E+3, + 0.145E+3, 0.460E+2, 0.19003000E+1, 0.00000000E+0, 0.37063780E+3, 0.145E+3, 0.470E+2, + 0.19003000E+1, 0.00000000E+0, 0.39106750E+3, 0.145E+3, 0.480E+2, 0.19003000E+1, 0.00000000E+0, + 0.49033250E+3, 0.145E+3, 0.490E+2, 0.19003000E+1, 0.00000000E+0, 0.45317940E+3, 0.145E+3, + 0.500E+2, 0.19003000E+1, 0.00000000E+0, 0.40403840E+3, 0.145E+3, 0.510E+2, 0.19003000E+1, + 0.00000000E+0, 0.37513030E+3, 0.145E+3, 0.520E+2, 0.19003000E+1, 0.00000000E+0, 0.33956200E+3, + 0.145E+3, 0.530E+2, 0.19003000E+1, 0.00000000E+0, 0.30572010E+3, 0.145E+3, 0.540E+2, + 0.19003000E+1, 0.00000000E+0, 0.12958507E+4, 0.145E+3, 0.550E+2, 0.19003000E+1, 0.00000000E+0, + 0.11851747E+4, 0.145E+3, 0.560E+2, 0.19003000E+1, 0.00000000E+0, 0.10401066E+4, 0.145E+3, + 0.570E+2, 0.19003000E+1, 0.00000000E+0, 0.47759450E+3, 0.145E+3, 0.580E+2, 0.19003000E+1, + 0.27991000E+1, 0.10500763E+4, 0.145E+3, 0.590E+2, 0.19003000E+1, 0.00000000E+0, 0.10080521E+4, + 0.145E+3, 0.600E+2, 0.19003000E+1, 0.00000000E+0, 0.98268750E+3, 0.145E+3, 0.610E+2, + 0.19003000E+1, 0.00000000E+0, 0.95935980E+3, 0.145E+3, 0.620E+2, 0.19003000E+1, 0.00000000E+0, + 0.93866880E+3, 0.145E+3, 0.630E+2, 0.19003000E+1, 0.00000000E+0, 0.73813170E+3, 0.145E+3, + 0.640E+2, 0.19003000E+1, 0.00000000E+0, 0.83296700E+3, 0.145E+3, 0.650E+2, 0.19003000E+1, + 0.00000000E+0, 0.80325110E+3, 0.145E+3, 0.660E+2, 0.19003000E+1, 0.00000000E+0, 0.84631030E+3, + 0.145E+3, 0.670E+2, 0.19003000E+1, 0.00000000E+0, 0.82828260E+3, 0.145E+3, 0.680E+2, + 0.19003000E+1, 0.00000000E+0, 0.81202140E+3, 0.145E+3, 0.690E+2, 0.19003000E+1, 0.00000000E+0, + 0.80250260E+3, 0.145E+3, 0.700E+2, 0.19003000E+1, 0.00000000E+0, 0.67613200E+3, 0.145E+3, + 0.710E+2, 0.19003000E+1, 0.00000000E+0, 0.66419530E+3, 0.145E+3, 0.720E+2, 0.19003000E+1, + 0.00000000E+0, 0.60624630E+3, 0.145E+3, 0.730E+2, 0.19003000E+1, 0.00000000E+0, 0.51256560E+3, + 0.145E+3, 0.740E+2, 0.19003000E+1, 0.00000000E+0, 0.52130610E+3, 0.145E+3, 0.750E+2, + 0.19003000E+1, 0.00000000E+0, 0.47268090E+3, 0.145E+3, 0.760E+2, 0.19003000E+1, 0.00000000E+0, + 0.43312920E+3, 0.145E+3, 0.770E+2, 0.19003000E+1, 0.00000000E+0, 0.36041730E+3, 0.145E+3, + 0.780E+2, 0.19003000E+1, 0.00000000E+0, 0.33697140E+3, 0.145E+3, 0.790E+2, 0.19003000E+1, + 0.00000000E+0, 0.34645260E+3, 0.145E+3, 0.800E+2, 0.19003000E+1, 0.00000000E+0, 0.50424040E+3, + 0.145E+3, 0.810E+2, 0.19003000E+1, 0.00000000E+0, 0.49256890E+3, 0.145E+3, 0.820E+2, + 0.19003000E+1, 0.00000000E+0, 0.45264510E+3, 0.145E+3, 0.830E+2, 0.19003000E+1, 0.00000000E+0, + 0.43185880E+3, 0.145E+3, 0.840E+2, 0.19003000E+1, 0.00000000E+0, 0.39887680E+3, 0.145E+3, + 0.850E+2, 0.19003000E+1, 0.00000000E+0, 0.36599140E+3, 0.145E+3, 0.860E+2, 0.19003000E+1, + 0.00000000E+0, 0.12224485E+4, 0.145E+3, 0.870E+2, 0.19003000E+1, 0.00000000E+0, 0.11715378E+4, + 0.145E+3, 0.880E+2, 0.19003000E+1, 0.00000000E+0, 0.10345633E+4, 0.145E+3, 0.890E+2, + 0.19003000E+1, 0.00000000E+0, 0.92953190E+3, 0.145E+3, 0.900E+2, 0.19003000E+1, 0.00000000E+0, + 0.92366730E+3, 0.145E+3, 0.910E+2, 0.19003000E+1, 0.00000000E+0, 0.89441350E+3, 0.145E+3, + 0.920E+2, 0.19003000E+1, 0.00000000E+0, 0.92128530E+3, 0.145E+3, 0.930E+2, 0.19003000E+1, + 0.00000000E+0, 0.89206410E+3, 0.145E+3, 0.940E+2, 0.19003000E+1, 0.00000000E+0, 0.49909000E+2, + 0.145E+3, 0.101E+3, 0.19003000E+1, 0.00000000E+0, 0.16134990E+3, 0.145E+3, 0.103E+3, + 0.19003000E+1, 0.98650000E+0, 0.20595300E+3, 0.145E+3, 0.104E+3, 0.19003000E+1, 0.98080000E+0, + 0.15759490E+3, 0.145E+3, 0.105E+3, 0.19003000E+1, 0.97060000E+0, 0.11912650E+3, 0.145E+3, + 0.106E+3, 0.19003000E+1, 0.98680000E+0, 0.83222700E+2, 0.145E+3, 0.107E+3, 0.19003000E+1, + 0.99440000E+0, 0.60915900E+2, 0.145E+3, 0.108E+3, 0.19003000E+1, 0.99250000E+0, 0.42208400E+2, + 0.145E+3, 0.109E+3, 0.19003000E+1, 0.99820000E+0, 0.23614440E+3, 0.145E+3, 0.111E+3, + 0.19003000E+1, 0.96840000E+0, 0.36507050E+3, 0.145E+3, 0.112E+3, 0.19003000E+1, 0.96280000E+0, + 0.36958140E+3, 0.145E+3, 0.113E+3, 0.19003000E+1, 0.96480000E+0, 0.29723390E+3, 0.145E+3, + 0.114E+3, 0.19003000E+1, 0.95070000E+0, 0.24384390E+3, 0.145E+3, 0.115E+3, 0.19003000E+1, + 0.99470000E+0, 0.20662580E+3, 0.145E+3, 0.116E+3, 0.19003000E+1, 0.99480000E+0, 0.16935840E+3, + 0.145E+3, 0.117E+3, 0.19003000E+1, 0.99720000E+0, 0.32659470E+3, 0.145E+3, 0.119E+3, + 0.19003000E+1, 0.97670000E+0, 0.62428500E+3, 0.145E+3, 0.120E+3, 0.19003000E+1, 0.98310000E+0, + 0.32625030E+3, 0.145E+3, 0.121E+3, 0.19003000E+1, 0.18627000E+1, 0.31509820E+3, 0.145E+3, + 0.122E+3, 0.19003000E+1, 0.18299000E+1, 0.30884820E+3, 0.145E+3, 0.123E+3, 0.19003000E+1, + 0.19138000E+1, 0.30603400E+3, 0.145E+3, 0.124E+3, 0.19003000E+1, 0.18269000E+1, 0.28151340E+3, + 0.145E+3, 0.125E+3, 0.19003000E+1, 0.16406000E+1, 0.26065670E+3, 0.145E+3, 0.126E+3, + 0.19003000E+1, 0.16483000E+1, 0.24873880E+3, 0.145E+3, 0.127E+3, 0.19003000E+1, 0.17149000E+1, + 0.24319090E+3, 0.145E+3, 0.128E+3, 0.19003000E+1, 0.17937000E+1, 0.24032600E+3, 0.145E+3, + 0.129E+3, 0.19003000E+1, 0.95760000E+0, 0.22543980E+3, 0.145E+3, 0.130E+3, 0.19003000E+1, + 0.19419000E+1, 0.36731970E+3, 0.145E+3, 0.131E+3, 0.19003000E+1, 0.96010000E+0, 0.32278160E+3, + 0.145E+3, 0.132E+3, 0.19003000E+1, 0.94340000E+0, 0.28959340E+3, 0.145E+3, 0.133E+3, + 0.19003000E+1, 0.98890000E+0, 0.26478150E+3, 0.145E+3, 0.134E+3, 0.19003000E+1, 0.99010000E+0, + 0.23366080E+3, 0.145E+3, 0.135E+3, 0.19003000E+1, 0.99740000E+0, 0.38991830E+3, 0.145E+3, + 0.137E+3, 0.19003000E+1, 0.97380000E+0, 0.76024370E+3, 0.145E+3, 0.138E+3, 0.19003000E+1, + 0.98010000E+0, 0.58041450E+3, 0.145E+3, 0.139E+3, 0.19003000E+1, 0.19153000E+1, 0.43182880E+3, + 0.145E+3, 0.140E+3, 0.19003000E+1, 0.19355000E+1, 0.43614400E+3, 0.145E+3, 0.141E+3, + 0.19003000E+1, 0.19545000E+1, 0.40693380E+3, 0.145E+3, 0.142E+3, 0.19003000E+1, 0.19420000E+1, + 0.45656180E+3, 0.145E+3, 0.143E+3, 0.19003000E+1, 0.16682000E+1, 0.35492820E+3, 0.145E+3, + 0.144E+3, 0.19003000E+1, 0.18584000E+1, 0.33224250E+3, 0.145E+3, 0.145E+3, 0.19003000E+1, + 0.19003000E+1, 0.28966100E+2, 0.146E+3, 0.100E+1, 0.18630000E+1, 0.91180000E+0, 0.19468900E+2, + 0.146E+3, 0.200E+1, 0.18630000E+1, 0.00000000E+0, 0.44391060E+3, 0.146E+3, 0.300E+1, + 0.18630000E+1, 0.00000000E+0, 0.25623270E+3, 0.146E+3, 0.400E+1, 0.18630000E+1, 0.00000000E+0, + 0.17343600E+3, 0.146E+3, 0.500E+1, 0.18630000E+1, 0.00000000E+0, 0.11801370E+3, 0.146E+3, + 0.600E+1, 0.18630000E+1, 0.00000000E+0, 0.83171000E+2, 0.146E+3, 0.700E+1, 0.18630000E+1, + 0.00000000E+0, 0.63412500E+2, 0.146E+3, 0.800E+1, 0.18630000E+1, 0.00000000E+0, 0.48382400E+2, + 0.146E+3, 0.900E+1, 0.18630000E+1, 0.00000000E+0, 0.37464700E+2, 0.146E+3, 0.100E+2, + 0.18630000E+1, 0.00000000E+0, 0.53116760E+3, 0.146E+3, 0.110E+2, 0.18630000E+1, 0.00000000E+0, + 0.40830220E+3, 0.146E+3, 0.120E+2, 0.18630000E+1, 0.00000000E+0, 0.37687760E+3, 0.146E+3, + 0.130E+2, 0.18630000E+1, 0.00000000E+0, 0.29781740E+3, 0.146E+3, 0.140E+2, 0.18630000E+1, + 0.00000000E+0, 0.23321060E+3, 0.146E+3, 0.150E+2, 0.18630000E+1, 0.00000000E+0, 0.19433730E+3, + 0.146E+3, 0.160E+2, 0.18630000E+1, 0.00000000E+0, 0.15949140E+3, 0.146E+3, 0.170E+2, + 0.18630000E+1, 0.00000000E+0, 0.13113380E+3, 0.146E+3, 0.180E+2, 0.18630000E+1, 0.00000000E+0, + 0.87329840E+3, 0.146E+3, 0.190E+2, 0.18630000E+1, 0.00000000E+0, 0.71849830E+3, 0.146E+3, + 0.200E+2, 0.18630000E+1, 0.00000000E+0, 0.59349940E+3, 0.146E+3, 0.210E+2, 0.18630000E+1, + 0.00000000E+0, 0.57359720E+3, 0.146E+3, 0.220E+2, 0.18630000E+1, 0.00000000E+0, 0.52547320E+3, + 0.146E+3, 0.230E+2, 0.18630000E+1, 0.00000000E+0, 0.41479180E+3, 0.146E+3, 0.240E+2, + 0.18630000E+1, 0.00000000E+0, 0.45273530E+3, 0.146E+3, 0.250E+2, 0.18630000E+1, 0.00000000E+0, + 0.35613440E+3, 0.146E+3, 0.260E+2, 0.18630000E+1, 0.00000000E+0, 0.37699280E+3, 0.146E+3, + 0.270E+2, 0.18630000E+1, 0.00000000E+0, 0.38812000E+3, 0.146E+3, 0.280E+2, 0.18630000E+1, + 0.00000000E+0, 0.29838940E+3, 0.146E+3, 0.290E+2, 0.18630000E+1, 0.00000000E+0, 0.30606330E+3, + 0.146E+3, 0.300E+2, 0.18630000E+1, 0.00000000E+0, 0.36187800E+3, 0.146E+3, 0.310E+2, + 0.18630000E+1, 0.00000000E+0, 0.31969460E+3, 0.146E+3, 0.320E+2, 0.18630000E+1, 0.00000000E+0, + 0.27350100E+3, 0.146E+3, 0.330E+2, 0.18630000E+1, 0.00000000E+0, 0.24609210E+3, 0.146E+3, + 0.340E+2, 0.18630000E+1, 0.00000000E+0, 0.21609450E+3, 0.146E+3, 0.350E+2, 0.18630000E+1, + 0.00000000E+0, 0.18863390E+3, 0.146E+3, 0.360E+2, 0.18630000E+1, 0.00000000E+0, 0.97940320E+3, + 0.146E+3, 0.370E+2, 0.18630000E+1, 0.00000000E+0, 0.85671690E+3, 0.146E+3, 0.380E+2, + 0.18630000E+1, 0.00000000E+0, 0.75059330E+3, 0.146E+3, 0.390E+2, 0.18630000E+1, 0.00000000E+0, + 0.67499290E+3, 0.146E+3, 0.400E+2, 0.18630000E+1, 0.00000000E+0, 0.61597590E+3, 0.146E+3, + 0.410E+2, 0.18630000E+1, 0.00000000E+0, 0.47670900E+3, 0.146E+3, 0.420E+2, 0.18630000E+1, + 0.00000000E+0, 0.53137000E+3, 0.146E+3, 0.430E+2, 0.18630000E+1, 0.00000000E+0, 0.40593980E+3, + 0.146E+3, 0.440E+2, 0.18630000E+1, 0.00000000E+0, 0.44306590E+3, 0.146E+3, 0.450E+2, + 0.18630000E+1, 0.00000000E+0, 0.41113610E+3, 0.146E+3, 0.460E+2, 0.18630000E+1, 0.00000000E+0, + 0.34367070E+3, 0.146E+3, 0.470E+2, 0.18630000E+1, 0.00000000E+0, 0.36264320E+3, 0.146E+3, + 0.480E+2, 0.18630000E+1, 0.00000000E+0, 0.45405760E+3, 0.146E+3, 0.490E+2, 0.18630000E+1, + 0.00000000E+0, 0.42012680E+3, 0.146E+3, 0.500E+2, 0.18630000E+1, 0.00000000E+0, 0.37509950E+3, + 0.146E+3, 0.510E+2, 0.18630000E+1, 0.00000000E+0, 0.34860740E+3, 0.146E+3, 0.520E+2, + 0.18630000E+1, 0.00000000E+0, 0.31592880E+3, 0.146E+3, 0.530E+2, 0.18630000E+1, 0.00000000E+0, + 0.28479640E+3, 0.146E+3, 0.540E+2, 0.18630000E+1, 0.00000000E+0, 0.11937040E+4, 0.146E+3, + 0.550E+2, 0.18630000E+1, 0.00000000E+0, 0.10930044E+4, 0.146E+3, 0.560E+2, 0.18630000E+1, + 0.00000000E+0, 0.96013460E+3, 0.146E+3, 0.570E+2, 0.18630000E+1, 0.00000000E+0, 0.44336290E+3, + 0.146E+3, 0.580E+2, 0.18630000E+1, 0.27991000E+1, 0.96887580E+3, 0.146E+3, 0.590E+2, + 0.18630000E+1, 0.00000000E+0, 0.93022500E+3, 0.146E+3, 0.600E+2, 0.18630000E+1, 0.00000000E+0, + 0.90685110E+3, 0.146E+3, 0.610E+2, 0.18630000E+1, 0.00000000E+0, 0.88534770E+3, 0.146E+3, + 0.620E+2, 0.18630000E+1, 0.00000000E+0, 0.86627480E+3, 0.146E+3, 0.630E+2, 0.18630000E+1, + 0.00000000E+0, 0.68220730E+3, 0.146E+3, 0.640E+2, 0.18630000E+1, 0.00000000E+0, 0.76879040E+3, + 0.146E+3, 0.650E+2, 0.18630000E+1, 0.00000000E+0, 0.74151490E+3, 0.146E+3, 0.660E+2, + 0.18630000E+1, 0.00000000E+0, 0.78120400E+3, 0.146E+3, 0.670E+2, 0.18630000E+1, 0.00000000E+0, + 0.76457050E+3, 0.146E+3, 0.680E+2, 0.18630000E+1, 0.00000000E+0, 0.74957790E+3, 0.146E+3, + 0.690E+2, 0.18630000E+1, 0.00000000E+0, 0.74073920E+3, 0.146E+3, 0.700E+2, 0.18630000E+1, + 0.00000000E+0, 0.62471570E+3, 0.146E+3, 0.710E+2, 0.18630000E+1, 0.00000000E+0, 0.61425310E+3, + 0.146E+3, 0.720E+2, 0.18630000E+1, 0.00000000E+0, 0.56115170E+3, 0.146E+3, 0.730E+2, + 0.18630000E+1, 0.00000000E+0, 0.47494930E+3, 0.146E+3, 0.740E+2, 0.18630000E+1, 0.00000000E+0, + 0.48315690E+3, 0.146E+3, 0.750E+2, 0.18630000E+1, 0.00000000E+0, 0.43846770E+3, 0.146E+3, + 0.760E+2, 0.18630000E+1, 0.00000000E+0, 0.40208340E+3, 0.146E+3, 0.770E+2, 0.18630000E+1, + 0.00000000E+0, 0.33498540E+3, 0.146E+3, 0.780E+2, 0.18630000E+1, 0.00000000E+0, 0.31334830E+3, + 0.146E+3, 0.790E+2, 0.18630000E+1, 0.00000000E+0, 0.32218840E+3, 0.146E+3, 0.800E+2, + 0.18630000E+1, 0.00000000E+0, 0.46735710E+3, 0.146E+3, 0.810E+2, 0.18630000E+1, 0.00000000E+0, + 0.45686740E+3, 0.146E+3, 0.820E+2, 0.18630000E+1, 0.00000000E+0, 0.42032740E+3, 0.146E+3, + 0.830E+2, 0.18630000E+1, 0.00000000E+0, 0.40133490E+3, 0.146E+3, 0.840E+2, 0.18630000E+1, + 0.00000000E+0, 0.37107280E+3, 0.146E+3, 0.850E+2, 0.18630000E+1, 0.00000000E+0, 0.34084580E+3, + 0.146E+3, 0.860E+2, 0.18630000E+1, 0.00000000E+0, 0.11269549E+4, 0.146E+3, 0.870E+2, + 0.18630000E+1, 0.00000000E+0, 0.10810405E+4, 0.146E+3, 0.880E+2, 0.18630000E+1, 0.00000000E+0, + 0.95553590E+3, 0.146E+3, 0.890E+2, 0.18630000E+1, 0.00000000E+0, 0.85969500E+3, 0.146E+3, + 0.900E+2, 0.18630000E+1, 0.00000000E+0, 0.85393730E+3, 0.146E+3, 0.910E+2, 0.18630000E+1, + 0.00000000E+0, 0.82694450E+3, 0.146E+3, 0.920E+2, 0.18630000E+1, 0.00000000E+0, 0.85119160E+3, + 0.146E+3, 0.930E+2, 0.18630000E+1, 0.00000000E+0, 0.82429470E+3, 0.146E+3, 0.940E+2, + 0.18630000E+1, 0.00000000E+0, 0.46348900E+2, 0.146E+3, 0.101E+3, 0.18630000E+1, 0.00000000E+0, + 0.14912090E+3, 0.146E+3, 0.103E+3, 0.18630000E+1, 0.98650000E+0, 0.19048260E+3, 0.146E+3, + 0.104E+3, 0.18630000E+1, 0.98080000E+0, 0.14620200E+3, 0.146E+3, 0.105E+3, 0.18630000E+1, + 0.97060000E+0, 0.11079460E+3, 0.146E+3, 0.106E+3, 0.18630000E+1, 0.98680000E+0, 0.77647900E+2, + 0.146E+3, 0.107E+3, 0.18630000E+1, 0.99440000E+0, 0.57004900E+2, 0.146E+3, 0.108E+3, + 0.18630000E+1, 0.99250000E+0, 0.39663600E+2, 0.146E+3, 0.109E+3, 0.18630000E+1, 0.99820000E+0, + 0.21823330E+3, 0.146E+3, 0.111E+3, 0.18630000E+1, 0.96840000E+0, 0.33722560E+3, 0.146E+3, + 0.112E+3, 0.18630000E+1, 0.96280000E+0, 0.34179460E+3, 0.146E+3, 0.113E+3, 0.18630000E+1, + 0.96480000E+0, 0.27549250E+3, 0.146E+3, 0.114E+3, 0.18630000E+1, 0.95070000E+0, 0.22646050E+3, + 0.146E+3, 0.115E+3, 0.18630000E+1, 0.99470000E+0, 0.19221720E+3, 0.146E+3, 0.116E+3, + 0.18630000E+1, 0.99480000E+0, 0.15785240E+3, 0.146E+3, 0.117E+3, 0.18630000E+1, 0.99720000E+0, + 0.30246350E+3, 0.146E+3, 0.119E+3, 0.18630000E+1, 0.97670000E+0, 0.57613740E+3, 0.146E+3, + 0.120E+3, 0.18630000E+1, 0.98310000E+0, 0.30248980E+3, 0.146E+3, 0.121E+3, 0.18630000E+1, + 0.18627000E+1, 0.29221350E+3, 0.146E+3, 0.122E+3, 0.18630000E+1, 0.18299000E+1, 0.28642780E+3, + 0.146E+3, 0.123E+3, 0.18630000E+1, 0.19138000E+1, 0.28377850E+3, 0.146E+3, 0.124E+3, + 0.18630000E+1, 0.18269000E+1, 0.26126350E+3, 0.146E+3, 0.125E+3, 0.18630000E+1, 0.16406000E+1, + 0.24201470E+3, 0.146E+3, 0.126E+3, 0.18630000E+1, 0.16483000E+1, 0.23097880E+3, 0.146E+3, + 0.127E+3, 0.18630000E+1, 0.17149000E+1, 0.22581650E+3, 0.146E+3, 0.128E+3, 0.18630000E+1, + 0.17937000E+1, 0.22301540E+3, 0.146E+3, 0.129E+3, 0.18630000E+1, 0.95760000E+0, 0.20945460E+3, + 0.146E+3, 0.130E+3, 0.18630000E+1, 0.19419000E+1, 0.34006750E+3, 0.146E+3, 0.131E+3, + 0.18630000E+1, 0.96010000E+0, 0.29932800E+3, 0.146E+3, 0.132E+3, 0.18630000E+1, 0.94340000E+0, + 0.26894270E+3, 0.146E+3, 0.133E+3, 0.18630000E+1, 0.98890000E+0, 0.24619370E+3, 0.146E+3, + 0.134E+3, 0.18630000E+1, 0.99010000E+0, 0.21757380E+3, 0.146E+3, 0.135E+3, 0.18630000E+1, + 0.99740000E+0, 0.36130470E+3, 0.146E+3, 0.137E+3, 0.18630000E+1, 0.97380000E+0, 0.70165500E+3, + 0.146E+3, 0.138E+3, 0.18630000E+1, 0.98010000E+0, 0.53685660E+3, 0.146E+3, 0.139E+3, + 0.18630000E+1, 0.19153000E+1, 0.40042090E+3, 0.146E+3, 0.140E+3, 0.18630000E+1, 0.19355000E+1, + 0.40443000E+3, 0.146E+3, 0.141E+3, 0.18630000E+1, 0.19545000E+1, 0.37755350E+3, 0.146E+3, + 0.142E+3, 0.18630000E+1, 0.19420000E+1, 0.42312790E+3, 0.146E+3, 0.143E+3, 0.18630000E+1, + 0.16682000E+1, 0.32968260E+3, 0.146E+3, 0.144E+3, 0.18630000E+1, 0.18584000E+1, 0.30870590E+3, + 0.146E+3, 0.145E+3, 0.18630000E+1, 0.19003000E+1, 0.28695190E+3, 0.146E+3, 0.146E+3, + 0.18630000E+1, 0.18630000E+1, 0.27951800E+2, 0.147E+3, 0.100E+1, 0.96790000E+0, 0.91180000E+0, + 0.18773100E+2, 0.147E+3, 0.200E+1, 0.96790000E+0, 0.00000000E+0, 0.43260780E+3, 0.147E+3, + 0.300E+1, 0.96790000E+0, 0.00000000E+0, 0.24865730E+3, 0.147E+3, 0.400E+1, 0.96790000E+0, + 0.00000000E+0, 0.16783500E+3, 0.147E+3, 0.500E+1, 0.96790000E+0, 0.00000000E+0, 0.11399930E+3, + 0.147E+3, 0.600E+1, 0.96790000E+0, 0.00000000E+0, 0.80266300E+2, 0.147E+3, 0.700E+1, + 0.96790000E+0, 0.00000000E+0, 0.61174800E+2, 0.147E+3, 0.800E+1, 0.96790000E+0, 0.00000000E+0, + 0.46672600E+2, 0.147E+3, 0.900E+1, 0.96790000E+0, 0.00000000E+0, 0.36148600E+2, 0.147E+3, + 0.100E+2, 0.96790000E+0, 0.00000000E+0, 0.51756800E+3, 0.147E+3, 0.110E+2, 0.96790000E+0, + 0.00000000E+0, 0.39661250E+3, 0.147E+3, 0.120E+2, 0.96790000E+0, 0.00000000E+0, 0.36552690E+3, + 0.147E+3, 0.130E+2, 0.96790000E+0, 0.00000000E+0, 0.28828630E+3, 0.147E+3, 0.140E+2, + 0.96790000E+0, 0.00000000E+0, 0.22539450E+3, 0.147E+3, 0.150E+2, 0.96790000E+0, 0.00000000E+0, + 0.18765970E+3, 0.147E+3, 0.160E+2, 0.96790000E+0, 0.00000000E+0, 0.15390320E+3, 0.147E+3, + 0.170E+2, 0.96790000E+0, 0.00000000E+0, 0.12648250E+3, 0.147E+3, 0.180E+2, 0.96790000E+0, + 0.00000000E+0, 0.85100880E+3, 0.147E+3, 0.190E+2, 0.96790000E+0, 0.00000000E+0, 0.69886180E+3, + 0.147E+3, 0.200E+2, 0.96790000E+0, 0.00000000E+0, 0.57696360E+3, 0.147E+3, 0.210E+2, + 0.96790000E+0, 0.00000000E+0, 0.55728800E+3, 0.147E+3, 0.220E+2, 0.96790000E+0, 0.00000000E+0, + 0.51036440E+3, 0.147E+3, 0.230E+2, 0.96790000E+0, 0.00000000E+0, 0.40283830E+3, 0.147E+3, + 0.240E+2, 0.96790000E+0, 0.00000000E+0, 0.43950990E+3, 0.147E+3, 0.250E+2, 0.96790000E+0, + 0.00000000E+0, 0.34569950E+3, 0.147E+3, 0.260E+2, 0.96790000E+0, 0.00000000E+0, 0.36569250E+3, + 0.147E+3, 0.270E+2, 0.96790000E+0, 0.00000000E+0, 0.37662810E+3, 0.147E+3, 0.280E+2, + 0.96790000E+0, 0.00000000E+0, 0.28955800E+3, 0.147E+3, 0.290E+2, 0.96790000E+0, 0.00000000E+0, + 0.29667280E+3, 0.147E+3, 0.300E+2, 0.96790000E+0, 0.00000000E+0, 0.35080100E+3, 0.147E+3, + 0.310E+2, 0.96790000E+0, 0.00000000E+0, 0.30945430E+3, 0.147E+3, 0.320E+2, 0.96790000E+0, + 0.00000000E+0, 0.26439570E+3, 0.147E+3, 0.330E+2, 0.96790000E+0, 0.00000000E+0, 0.23772170E+3, + 0.147E+3, 0.340E+2, 0.96790000E+0, 0.00000000E+0, 0.20860440E+3, 0.147E+3, 0.350E+2, + 0.96790000E+0, 0.00000000E+0, 0.18200160E+3, 0.147E+3, 0.360E+2, 0.96790000E+0, 0.00000000E+0, + 0.95413200E+3, 0.147E+3, 0.370E+2, 0.96790000E+0, 0.00000000E+0, 0.83331680E+3, 0.147E+3, + 0.380E+2, 0.96790000E+0, 0.00000000E+0, 0.72933160E+3, 0.147E+3, 0.390E+2, 0.96790000E+0, + 0.00000000E+0, 0.65543290E+3, 0.147E+3, 0.400E+2, 0.96790000E+0, 0.00000000E+0, 0.59785280E+3, + 0.147E+3, 0.410E+2, 0.96790000E+0, 0.00000000E+0, 0.46233830E+3, 0.147E+3, 0.420E+2, + 0.96790000E+0, 0.00000000E+0, 0.51549530E+3, 0.147E+3, 0.430E+2, 0.96790000E+0, 0.00000000E+0, + 0.39350880E+3, 0.147E+3, 0.440E+2, 0.96790000E+0, 0.00000000E+0, 0.42951430E+3, 0.147E+3, + 0.450E+2, 0.96790000E+0, 0.00000000E+0, 0.39846620E+3, 0.147E+3, 0.460E+2, 0.96790000E+0, + 0.00000000E+0, 0.33315830E+3, 0.147E+3, 0.470E+2, 0.96790000E+0, 0.00000000E+0, 0.35137120E+3, + 0.147E+3, 0.480E+2, 0.96790000E+0, 0.00000000E+0, 0.44027330E+3, 0.147E+3, 0.490E+2, + 0.96790000E+0, 0.00000000E+0, 0.40690290E+3, 0.147E+3, 0.500E+2, 0.96790000E+0, 0.00000000E+0, + 0.36287400E+3, 0.147E+3, 0.510E+2, 0.96790000E+0, 0.00000000E+0, 0.33701310E+3, 0.147E+3, + 0.520E+2, 0.96790000E+0, 0.00000000E+0, 0.30521220E+3, 0.147E+3, 0.530E+2, 0.96790000E+0, + 0.00000000E+0, 0.27497440E+3, 0.147E+3, 0.540E+2, 0.96790000E+0, 0.00000000E+0, 0.11625520E+4, + 0.147E+3, 0.550E+2, 0.96790000E+0, 0.00000000E+0, 0.10633544E+4, 0.147E+3, 0.560E+2, + 0.96790000E+0, 0.00000000E+0, 0.93316800E+3, 0.147E+3, 0.570E+2, 0.96790000E+0, 0.00000000E+0, + 0.42899800E+3, 0.147E+3, 0.580E+2, 0.96790000E+0, 0.27991000E+1, 0.94235470E+3, 0.147E+3, + 0.590E+2, 0.96790000E+0, 0.00000000E+0, 0.90466880E+3, 0.147E+3, 0.600E+2, 0.96790000E+0, + 0.00000000E+0, 0.88190710E+3, 0.147E+3, 0.610E+2, 0.96790000E+0, 0.00000000E+0, 0.86096980E+3, + 0.147E+3, 0.620E+2, 0.96790000E+0, 0.00000000E+0, 0.84239660E+3, 0.147E+3, 0.630E+2, + 0.96790000E+0, 0.00000000E+0, 0.66260290E+3, 0.147E+3, 0.640E+2, 0.96790000E+0, 0.00000000E+0, + 0.74772470E+3, 0.147E+3, 0.650E+2, 0.96790000E+0, 0.00000000E+0, 0.72101030E+3, 0.147E+3, + 0.660E+2, 0.96790000E+0, 0.00000000E+0, 0.75950840E+3, 0.147E+3, 0.670E+2, 0.96790000E+0, + 0.00000000E+0, 0.74332210E+3, 0.147E+3, 0.680E+2, 0.96790000E+0, 0.00000000E+0, 0.72872030E+3, + 0.147E+3, 0.690E+2, 0.96790000E+0, 0.00000000E+0, 0.72016540E+3, 0.147E+3, 0.700E+2, + 0.96790000E+0, 0.00000000E+0, 0.60683130E+3, 0.147E+3, 0.710E+2, 0.96790000E+0, 0.00000000E+0, + 0.59598520E+3, 0.147E+3, 0.720E+2, 0.96790000E+0, 0.00000000E+0, 0.54409850E+3, 0.147E+3, + 0.730E+2, 0.96790000E+0, 0.00000000E+0, 0.46026700E+3, 0.147E+3, 0.740E+2, 0.96790000E+0, + 0.00000000E+0, 0.46810840E+3, 0.147E+3, 0.750E+2, 0.96790000E+0, 0.00000000E+0, 0.42458230E+3, + 0.147E+3, 0.760E+2, 0.96790000E+0, 0.00000000E+0, 0.38918700E+3, 0.147E+3, 0.770E+2, + 0.96790000E+0, 0.00000000E+0, 0.32412400E+3, 0.147E+3, 0.780E+2, 0.96790000E+0, 0.00000000E+0, + 0.30315550E+3, 0.147E+3, 0.790E+2, 0.96790000E+0, 0.00000000E+0, 0.31163540E+3, 0.147E+3, + 0.800E+2, 0.96790000E+0, 0.00000000E+0, 0.45304550E+3, 0.147E+3, 0.810E+2, 0.96790000E+0, + 0.00000000E+0, 0.44250950E+3, 0.147E+3, 0.820E+2, 0.96790000E+0, 0.00000000E+0, 0.40670840E+3, + 0.147E+3, 0.830E+2, 0.96790000E+0, 0.00000000E+0, 0.38810010E+3, 0.147E+3, 0.840E+2, + 0.96790000E+0, 0.00000000E+0, 0.35859540E+3, 0.147E+3, 0.850E+2, 0.96790000E+0, 0.00000000E+0, + 0.32919900E+3, 0.147E+3, 0.860E+2, 0.96790000E+0, 0.00000000E+0, 0.10968369E+4, 0.147E+3, + 0.870E+2, 0.96790000E+0, 0.00000000E+0, 0.10511515E+4, 0.147E+3, 0.880E+2, 0.96790000E+0, + 0.00000000E+0, 0.92833020E+3, 0.147E+3, 0.890E+2, 0.96790000E+0, 0.00000000E+0, 0.83431790E+3, + 0.147E+3, 0.900E+2, 0.96790000E+0, 0.00000000E+0, 0.82919230E+3, 0.147E+3, 0.910E+2, + 0.96790000E+0, 0.00000000E+0, 0.80298090E+3, 0.147E+3, 0.920E+2, 0.96790000E+0, 0.00000000E+0, + 0.82716130E+3, 0.147E+3, 0.930E+2, 0.96790000E+0, 0.00000000E+0, 0.80093320E+3, 0.147E+3, + 0.940E+2, 0.96790000E+0, 0.00000000E+0, 0.44783500E+2, 0.147E+3, 0.101E+3, 0.96790000E+0, + 0.00000000E+0, 0.14465630E+3, 0.147E+3, 0.103E+3, 0.96790000E+0, 0.98650000E+0, 0.18465300E+3, + 0.147E+3, 0.104E+3, 0.96790000E+0, 0.98080000E+0, 0.14140600E+3, 0.147E+3, 0.105E+3, + 0.96790000E+0, 0.97060000E+0, 0.10702860E+3, 0.147E+3, 0.106E+3, 0.96790000E+0, 0.98680000E+0, + 0.74935400E+2, 0.147E+3, 0.107E+3, 0.96790000E+0, 0.99440000E+0, 0.54985600E+2, 0.147E+3, + 0.108E+3, 0.96790000E+0, 0.99250000E+0, 0.38253900E+2, 0.147E+3, 0.109E+3, 0.96790000E+0, + 0.99820000E+0, 0.21184190E+3, 0.147E+3, 0.111E+3, 0.96790000E+0, 0.96840000E+0, 0.32735090E+3, + 0.147E+3, 0.112E+3, 0.96790000E+0, 0.96280000E+0, 0.33138320E+3, 0.147E+3, 0.113E+3, + 0.96790000E+0, 0.96480000E+0, 0.26660080E+3, 0.147E+3, 0.114E+3, 0.96790000E+0, 0.95070000E+0, + 0.21886170E+3, 0.147E+3, 0.115E+3, 0.96790000E+0, 0.99470000E+0, 0.18561970E+3, 0.147E+3, + 0.116E+3, 0.96790000E+0, 0.99480000E+0, 0.15232700E+3, 0.147E+3, 0.117E+3, 0.96790000E+0, + 0.99720000E+0, 0.29329110E+3, 0.147E+3, 0.119E+3, 0.96790000E+0, 0.97670000E+0, 0.56012980E+3, + 0.147E+3, 0.120E+3, 0.96790000E+0, 0.98310000E+0, 0.29290630E+3, 0.147E+3, 0.121E+3, + 0.96790000E+0, 0.18627000E+1, 0.28293320E+3, 0.147E+3, 0.122E+3, 0.96790000E+0, 0.18299000E+1, + 0.27735250E+3, 0.147E+3, 0.123E+3, 0.96790000E+0, 0.19138000E+1, 0.27484520E+3, 0.147E+3, + 0.124E+3, 0.96790000E+0, 0.18269000E+1, 0.25282980E+3, 0.147E+3, 0.125E+3, 0.96790000E+0, + 0.16406000E+1, 0.23415110E+3, 0.147E+3, 0.126E+3, 0.96790000E+0, 0.16483000E+1, 0.22348050E+3, + 0.147E+3, 0.127E+3, 0.96790000E+0, 0.17149000E+1, 0.21850750E+3, 0.147E+3, 0.128E+3, + 0.96790000E+0, 0.17937000E+1, 0.21595810E+3, 0.147E+3, 0.129E+3, 0.96790000E+0, 0.95760000E+0, + 0.20256850E+3, 0.147E+3, 0.130E+3, 0.96790000E+0, 0.19419000E+1, 0.32953870E+3, 0.147E+3, + 0.131E+3, 0.96790000E+0, 0.96010000E+0, 0.28964110E+3, 0.147E+3, 0.132E+3, 0.96790000E+0, + 0.94340000E+0, 0.25997060E+3, 0.147E+3, 0.133E+3, 0.96790000E+0, 0.98890000E+0, 0.23782380E+3, + 0.147E+3, 0.134E+3, 0.96790000E+0, 0.99010000E+0, 0.21004110E+3, 0.147E+3, 0.135E+3, + 0.96790000E+0, 0.99740000E+0, 0.35022950E+3, 0.147E+3, 0.137E+3, 0.96790000E+0, 0.97380000E+0, + 0.68218170E+3, 0.147E+3, 0.138E+3, 0.96790000E+0, 0.98010000E+0, 0.52087240E+3, 0.147E+3, + 0.139E+3, 0.96790000E+0, 0.19153000E+1, 0.38773360E+3, 0.147E+3, 0.140E+3, 0.96790000E+0, + 0.19355000E+1, 0.39166370E+3, 0.147E+3, 0.141E+3, 0.96790000E+0, 0.19545000E+1, 0.36552610E+3, + 0.147E+3, 0.142E+3, 0.96790000E+0, 0.19420000E+1, 0.41006670E+3, 0.147E+3, 0.143E+3, + 0.96790000E+0, 0.16682000E+1, 0.31896650E+3, 0.147E+3, 0.144E+3, 0.96790000E+0, 0.18584000E+1, + 0.29866780E+3, 0.147E+3, 0.145E+3, 0.96790000E+0, 0.19003000E+1, 0.27760230E+3, 0.147E+3, + 0.146E+3, 0.96790000E+0, 0.18630000E+1, 0.26861300E+3, 0.147E+3, 0.147E+3, 0.96790000E+0, + 0.96790000E+0, 0.27928100E+2, 0.148E+3, 0.100E+1, 0.19539000E+1, 0.91180000E+0, 0.18860700E+2, + 0.148E+3, 0.200E+1, 0.19539000E+1, 0.00000000E+0, 0.40844290E+3, 0.148E+3, 0.300E+1, + 0.19539000E+1, 0.00000000E+0, 0.24209500E+3, 0.148E+3, 0.400E+1, 0.19539000E+1, 0.00000000E+0, + 0.16565870E+3, 0.148E+3, 0.500E+1, 0.19539000E+1, 0.00000000E+0, 0.11343690E+3, 0.148E+3, + 0.600E+1, 0.19539000E+1, 0.00000000E+0, 0.80249200E+2, 0.148E+3, 0.700E+1, 0.19539000E+1, + 0.00000000E+0, 0.61323400E+2, 0.148E+3, 0.800E+1, 0.19539000E+1, 0.00000000E+0, 0.46869200E+2, + 0.148E+3, 0.900E+1, 0.19539000E+1, 0.00000000E+0, 0.36340100E+2, 0.148E+3, 0.100E+2, + 0.19539000E+1, 0.00000000E+0, 0.48951290E+3, 0.148E+3, 0.110E+2, 0.19539000E+1, 0.00000000E+0, + 0.38417280E+3, 0.148E+3, 0.120E+2, 0.19539000E+1, 0.00000000E+0, 0.35686540E+3, 0.148E+3, + 0.130E+2, 0.19539000E+1, 0.00000000E+0, 0.28421390E+3, 0.148E+3, 0.140E+2, 0.19539000E+1, + 0.00000000E+0, 0.22377830E+3, 0.148E+3, 0.150E+2, 0.19539000E+1, 0.00000000E+0, 0.18701630E+3, + 0.148E+3, 0.160E+2, 0.19539000E+1, 0.00000000E+0, 0.15385920E+3, 0.148E+3, 0.170E+2, + 0.19539000E+1, 0.00000000E+0, 0.12673560E+3, 0.148E+3, 0.180E+2, 0.19539000E+1, 0.00000000E+0, + 0.80025930E+3, 0.148E+3, 0.190E+2, 0.19539000E+1, 0.00000000E+0, 0.67026330E+3, 0.148E+3, + 0.200E+2, 0.19539000E+1, 0.00000000E+0, 0.55566790E+3, 0.148E+3, 0.210E+2, 0.19539000E+1, + 0.00000000E+0, 0.53855020E+3, 0.148E+3, 0.220E+2, 0.19539000E+1, 0.00000000E+0, 0.49422370E+3, + 0.148E+3, 0.230E+2, 0.19539000E+1, 0.00000000E+0, 0.38999530E+3, 0.148E+3, 0.240E+2, + 0.19539000E+1, 0.00000000E+0, 0.42685790E+3, 0.148E+3, 0.250E+2, 0.19539000E+1, 0.00000000E+0, + 0.33576420E+3, 0.148E+3, 0.260E+2, 0.19539000E+1, 0.00000000E+0, 0.35691720E+3, 0.148E+3, + 0.270E+2, 0.19539000E+1, 0.00000000E+0, 0.36686680E+3, 0.148E+3, 0.280E+2, 0.19539000E+1, + 0.00000000E+0, 0.28186750E+3, 0.148E+3, 0.290E+2, 0.19539000E+1, 0.00000000E+0, 0.29078950E+3, + 0.148E+3, 0.300E+2, 0.19539000E+1, 0.00000000E+0, 0.34329430E+3, 0.148E+3, 0.310E+2, + 0.19539000E+1, 0.00000000E+0, 0.30514680E+3, 0.148E+3, 0.320E+2, 0.19539000E+1, 0.00000000E+0, + 0.26228400E+3, 0.148E+3, 0.330E+2, 0.19539000E+1, 0.00000000E+0, 0.23657790E+3, 0.148E+3, + 0.340E+2, 0.19539000E+1, 0.00000000E+0, 0.20821130E+3, 0.148E+3, 0.350E+2, 0.19539000E+1, + 0.00000000E+0, 0.18208670E+3, 0.148E+3, 0.360E+2, 0.19539000E+1, 0.00000000E+0, 0.89853420E+3, + 0.148E+3, 0.370E+2, 0.19539000E+1, 0.00000000E+0, 0.79845280E+3, 0.148E+3, 0.380E+2, + 0.19539000E+1, 0.00000000E+0, 0.70379920E+3, 0.148E+3, 0.390E+2, 0.19539000E+1, 0.00000000E+0, + 0.63513700E+3, 0.148E+3, 0.400E+2, 0.19539000E+1, 0.00000000E+0, 0.58084120E+3, 0.148E+3, + 0.410E+2, 0.19539000E+1, 0.00000000E+0, 0.45097760E+3, 0.148E+3, 0.420E+2, 0.19539000E+1, + 0.00000000E+0, 0.50211680E+3, 0.148E+3, 0.430E+2, 0.19539000E+1, 0.00000000E+0, 0.38494360E+3, + 0.148E+3, 0.440E+2, 0.19539000E+1, 0.00000000E+0, 0.42037460E+3, 0.148E+3, 0.450E+2, + 0.19539000E+1, 0.00000000E+0, 0.39057700E+3, 0.148E+3, 0.460E+2, 0.19539000E+1, 0.00000000E+0, + 0.32596620E+3, 0.148E+3, 0.470E+2, 0.19539000E+1, 0.00000000E+0, 0.34505990E+3, 0.148E+3, + 0.480E+2, 0.19539000E+1, 0.00000000E+0, 0.43036070E+3, 0.148E+3, 0.490E+2, 0.19539000E+1, + 0.00000000E+0, 0.40034740E+3, 0.148E+3, 0.500E+2, 0.19539000E+1, 0.00000000E+0, 0.35905550E+3, + 0.148E+3, 0.510E+2, 0.19539000E+1, 0.00000000E+0, 0.33449170E+3, 0.148E+3, 0.520E+2, + 0.19539000E+1, 0.00000000E+0, 0.30384100E+3, 0.148E+3, 0.530E+2, 0.19539000E+1, 0.00000000E+0, + 0.27444070E+3, 0.148E+3, 0.540E+2, 0.19539000E+1, 0.00000000E+0, 0.10949943E+4, 0.148E+3, + 0.550E+2, 0.19539000E+1, 0.00000000E+0, 0.10161802E+4, 0.148E+3, 0.560E+2, 0.19539000E+1, + 0.00000000E+0, 0.89820920E+3, 0.148E+3, 0.570E+2, 0.19539000E+1, 0.00000000E+0, 0.42389100E+3, + 0.148E+3, 0.580E+2, 0.19539000E+1, 0.27991000E+1, 0.90262940E+3, 0.148E+3, 0.590E+2, + 0.19539000E+1, 0.00000000E+0, 0.86759380E+3, 0.148E+3, 0.600E+2, 0.19539000E+1, 0.00000000E+0, + 0.84606160E+3, 0.148E+3, 0.610E+2, 0.19539000E+1, 0.00000000E+0, 0.82622610E+3, 0.148E+3, + 0.620E+2, 0.19539000E+1, 0.00000000E+0, 0.80864130E+3, 0.148E+3, 0.630E+2, 0.19539000E+1, + 0.00000000E+0, 0.64073930E+3, 0.148E+3, 0.640E+2, 0.19539000E+1, 0.00000000E+0, 0.71462060E+3, + 0.148E+3, 0.650E+2, 0.19539000E+1, 0.00000000E+0, 0.69004230E+3, 0.148E+3, 0.660E+2, + 0.19539000E+1, 0.00000000E+0, 0.73042860E+3, 0.148E+3, 0.670E+2, 0.19539000E+1, 0.00000000E+0, + 0.71501980E+3, 0.148E+3, 0.680E+2, 0.19539000E+1, 0.00000000E+0, 0.70118290E+3, 0.148E+3, + 0.690E+2, 0.19539000E+1, 0.00000000E+0, 0.69275040E+3, 0.148E+3, 0.700E+2, 0.19539000E+1, + 0.00000000E+0, 0.58668300E+3, 0.148E+3, 0.710E+2, 0.19539000E+1, 0.00000000E+0, 0.58027960E+3, + 0.148E+3, 0.720E+2, 0.19539000E+1, 0.00000000E+0, 0.53179240E+3, 0.148E+3, 0.730E+2, + 0.19539000E+1, 0.00000000E+0, 0.45093600E+3, 0.148E+3, 0.740E+2, 0.19539000E+1, 0.00000000E+0, + 0.45935930E+3, 0.148E+3, 0.750E+2, 0.19539000E+1, 0.00000000E+0, 0.41790820E+3, 0.148E+3, + 0.760E+2, 0.19539000E+1, 0.00000000E+0, 0.38396000E+3, 0.148E+3, 0.770E+2, 0.19539000E+1, + 0.00000000E+0, 0.32036400E+3, 0.148E+3, 0.780E+2, 0.19539000E+1, 0.00000000E+0, 0.29986260E+3, + 0.148E+3, 0.790E+2, 0.19539000E+1, 0.00000000E+0, 0.30870590E+3, 0.148E+3, 0.800E+2, + 0.19539000E+1, 0.00000000E+0, 0.44321180E+3, 0.148E+3, 0.810E+2, 0.19539000E+1, 0.00000000E+0, + 0.43519640E+3, 0.148E+3, 0.820E+2, 0.19539000E+1, 0.00000000E+0, 0.40209000E+3, 0.148E+3, + 0.830E+2, 0.19539000E+1, 0.00000000E+0, 0.38476220E+3, 0.148E+3, 0.840E+2, 0.19539000E+1, + 0.00000000E+0, 0.35659780E+3, 0.148E+3, 0.850E+2, 0.19539000E+1, 0.00000000E+0, 0.32818400E+3, + 0.148E+3, 0.860E+2, 0.19539000E+1, 0.00000000E+0, 0.10391920E+4, 0.148E+3, 0.870E+2, + 0.19539000E+1, 0.00000000E+0, 0.10081792E+4, 0.148E+3, 0.880E+2, 0.19539000E+1, 0.00000000E+0, + 0.89630090E+3, 0.148E+3, 0.890E+2, 0.19539000E+1, 0.00000000E+0, 0.81114820E+3, 0.148E+3, + 0.900E+2, 0.19539000E+1, 0.00000000E+0, 0.80315200E+3, 0.148E+3, 0.910E+2, 0.19539000E+1, + 0.00000000E+0, 0.77787630E+3, 0.148E+3, 0.920E+2, 0.19539000E+1, 0.00000000E+0, 0.79775990E+3, + 0.148E+3, 0.930E+2, 0.19539000E+1, 0.00000000E+0, 0.77311930E+3, 0.148E+3, 0.940E+2, + 0.19539000E+1, 0.00000000E+0, 0.44500600E+2, 0.148E+3, 0.101E+3, 0.19539000E+1, 0.00000000E+0, + 0.14109010E+3, 0.148E+3, 0.103E+3, 0.19539000E+1, 0.98650000E+0, 0.18052070E+3, 0.148E+3, + 0.104E+3, 0.19539000E+1, 0.98080000E+0, 0.13987930E+3, 0.148E+3, 0.105E+3, 0.19539000E+1, + 0.97060000E+0, 0.10643320E+3, 0.148E+3, 0.106E+3, 0.19539000E+1, 0.98680000E+0, 0.74892500E+2, + 0.148E+3, 0.107E+3, 0.19539000E+1, 0.99440000E+0, 0.55139200E+2, 0.148E+3, 0.108E+3, + 0.19539000E+1, 0.99250000E+0, 0.38490600E+2, 0.148E+3, 0.109E+3, 0.19539000E+1, 0.99820000E+0, + 0.20596470E+3, 0.148E+3, 0.111E+3, 0.19539000E+1, 0.96840000E+0, 0.31790020E+3, 0.148E+3, + 0.112E+3, 0.19539000E+1, 0.96280000E+0, 0.32408300E+3, 0.148E+3, 0.113E+3, 0.19539000E+1, + 0.96480000E+0, 0.26314380E+3, 0.148E+3, 0.114E+3, 0.19539000E+1, 0.95070000E+0, 0.21731990E+3, + 0.148E+3, 0.115E+3, 0.19539000E+1, 0.99470000E+0, 0.18495220E+3, 0.148E+3, 0.116E+3, + 0.19539000E+1, 0.99480000E+0, 0.15226460E+3, 0.148E+3, 0.117E+3, 0.19539000E+1, 0.99720000E+0, + 0.28627350E+3, 0.148E+3, 0.119E+3, 0.19539000E+1, 0.97670000E+0, 0.53708890E+3, 0.148E+3, + 0.120E+3, 0.19539000E+1, 0.98310000E+0, 0.28838750E+3, 0.148E+3, 0.121E+3, 0.19539000E+1, + 0.18627000E+1, 0.27858690E+3, 0.148E+3, 0.122E+3, 0.19539000E+1, 0.18299000E+1, 0.27303310E+3, + 0.148E+3, 0.123E+3, 0.19539000E+1, 0.19138000E+1, 0.27028900E+3, 0.148E+3, 0.124E+3, + 0.19539000E+1, 0.18269000E+1, 0.24982010E+3, 0.148E+3, 0.125E+3, 0.19539000E+1, 0.16406000E+1, + 0.23161700E+3, 0.148E+3, 0.126E+3, 0.19539000E+1, 0.16483000E+1, 0.22102480E+3, 0.148E+3, + 0.127E+3, 0.19539000E+1, 0.17149000E+1, 0.21602110E+3, 0.148E+3, 0.128E+3, 0.19539000E+1, + 0.17937000E+1, 0.21274680E+3, 0.148E+3, 0.129E+3, 0.19539000E+1, 0.95760000E+0, 0.20082240E+3, + 0.148E+3, 0.130E+3, 0.19539000E+1, 0.19419000E+1, 0.32310800E+3, 0.148E+3, 0.131E+3, + 0.19539000E+1, 0.96010000E+0, 0.28605510E+3, 0.148E+3, 0.132E+3, 0.19539000E+1, 0.94340000E+0, + 0.25796890E+3, 0.148E+3, 0.133E+3, 0.19539000E+1, 0.98890000E+0, 0.23666040E+3, 0.148E+3, + 0.134E+3, 0.19539000E+1, 0.99010000E+0, 0.20960830E+3, 0.148E+3, 0.135E+3, 0.19539000E+1, + 0.99740000E+0, 0.34234100E+3, 0.148E+3, 0.137E+3, 0.19539000E+1, 0.97380000E+0, 0.65327820E+3, + 0.148E+3, 0.138E+3, 0.19539000E+1, 0.98010000E+0, 0.50567470E+3, 0.148E+3, 0.139E+3, + 0.19539000E+1, 0.19153000E+1, 0.38134050E+3, 0.148E+3, 0.140E+3, 0.19539000E+1, 0.19355000E+1, + 0.38512060E+3, 0.148E+3, 0.141E+3, 0.19539000E+1, 0.19545000E+1, 0.35990590E+3, 0.148E+3, + 0.142E+3, 0.19539000E+1, 0.19420000E+1, 0.40123820E+3, 0.148E+3, 0.143E+3, 0.19539000E+1, + 0.16682000E+1, 0.31533650E+3, 0.148E+3, 0.144E+3, 0.19539000E+1, 0.18584000E+1, 0.29530360E+3, + 0.148E+3, 0.145E+3, 0.19539000E+1, 0.19003000E+1, 0.27461540E+3, 0.148E+3, 0.146E+3, + 0.19539000E+1, 0.18630000E+1, 0.26554500E+3, 0.148E+3, 0.147E+3, 0.19539000E+1, 0.96790000E+0, + 0.26345080E+3, 0.148E+3, 0.148E+3, 0.19539000E+1, 0.19539000E+1, 0.42282700E+2, 0.149E+3, + 0.100E+1, 0.96330000E+0, 0.91180000E+0, 0.27023600E+2, 0.149E+3, 0.200E+1, 0.96330000E+0, + 0.00000000E+0, 0.76925140E+3, 0.149E+3, 0.300E+1, 0.96330000E+0, 0.00000000E+0, 0.41349650E+3, + 0.149E+3, 0.400E+1, 0.96330000E+0, 0.00000000E+0, 0.26747500E+3, 0.149E+3, 0.500E+1, + 0.96330000E+0, 0.00000000E+0, 0.17545850E+3, 0.149E+3, 0.600E+1, 0.96330000E+0, 0.00000000E+0, + 0.12012790E+3, 0.149E+3, 0.700E+1, 0.96330000E+0, 0.00000000E+0, 0.89652000E+2, 0.149E+3, + 0.800E+1, 0.96330000E+0, 0.00000000E+0, 0.67123200E+2, 0.149E+3, 0.900E+1, 0.96330000E+0, + 0.00000000E+0, 0.51174700E+2, 0.149E+3, 0.100E+2, 0.96330000E+0, 0.00000000E+0, 0.91594130E+3, + 0.149E+3, 0.110E+2, 0.96330000E+0, 0.00000000E+0, 0.66728440E+3, 0.149E+3, 0.120E+2, + 0.96330000E+0, 0.00000000E+0, 0.60241430E+3, 0.149E+3, 0.130E+2, 0.96330000E+0, 0.00000000E+0, + 0.46150930E+3, 0.149E+3, 0.140E+2, 0.96330000E+0, 0.00000000E+0, 0.35151570E+3, 0.149E+3, + 0.150E+2, 0.96330000E+0, 0.00000000E+0, 0.28739220E+3, 0.149E+3, 0.160E+2, 0.96330000E+0, + 0.00000000E+0, 0.23145540E+3, 0.149E+3, 0.170E+2, 0.96330000E+0, 0.00000000E+0, 0.18709160E+3, + 0.149E+3, 0.180E+2, 0.96330000E+0, 0.00000000E+0, 0.15173687E+4, 0.149E+3, 0.190E+2, + 0.96330000E+0, 0.00000000E+0, 0.11989287E+4, 0.149E+3, 0.200E+2, 0.96330000E+0, 0.00000000E+0, + 0.98084640E+3, 0.149E+3, 0.210E+2, 0.96330000E+0, 0.00000000E+0, 0.93876410E+3, 0.149E+3, + 0.220E+2, 0.96330000E+0, 0.00000000E+0, 0.85507440E+3, 0.149E+3, 0.230E+2, 0.96330000E+0, + 0.00000000E+0, 0.67285260E+3, 0.149E+3, 0.240E+2, 0.96330000E+0, 0.00000000E+0, 0.73052210E+3, + 0.149E+3, 0.250E+2, 0.96330000E+0, 0.00000000E+0, 0.57217290E+3, 0.149E+3, 0.260E+2, + 0.96330000E+0, 0.00000000E+0, 0.59982550E+3, 0.149E+3, 0.270E+2, 0.96330000E+0, 0.00000000E+0, + 0.62133050E+3, 0.149E+3, 0.280E+2, 0.96330000E+0, 0.00000000E+0, 0.47601650E+3, 0.149E+3, + 0.290E+2, 0.96330000E+0, 0.00000000E+0, 0.48059720E+3, 0.149E+3, 0.300E+2, 0.96330000E+0, + 0.00000000E+0, 0.57226580E+3, 0.149E+3, 0.310E+2, 0.96330000E+0, 0.00000000E+0, 0.49379840E+3, + 0.149E+3, 0.320E+2, 0.96330000E+0, 0.00000000E+0, 0.41301260E+3, 0.149E+3, 0.330E+2, + 0.96330000E+0, 0.00000000E+0, 0.36615190E+3, 0.149E+3, 0.340E+2, 0.96330000E+0, 0.00000000E+0, + 0.31652310E+3, 0.149E+3, 0.350E+2, 0.96330000E+0, 0.00000000E+0, 0.27222880E+3, 0.149E+3, + 0.360E+2, 0.96330000E+0, 0.00000000E+0, 0.16942091E+4, 0.149E+3, 0.370E+2, 0.96330000E+0, + 0.00000000E+0, 0.14306640E+4, 0.149E+3, 0.380E+2, 0.96330000E+0, 0.00000000E+0, 0.12316979E+4, + 0.149E+3, 0.390E+2, 0.96330000E+0, 0.00000000E+0, 0.10950419E+4, 0.149E+3, 0.400E+2, + 0.96330000E+0, 0.00000000E+0, 0.99140130E+3, 0.149E+3, 0.410E+2, 0.96330000E+0, 0.00000000E+0, + 0.75589180E+3, 0.149E+3, 0.420E+2, 0.96330000E+0, 0.00000000E+0, 0.84735570E+3, 0.149E+3, + 0.430E+2, 0.96330000E+0, 0.00000000E+0, 0.63674800E+3, 0.149E+3, 0.440E+2, 0.96330000E+0, + 0.00000000E+0, 0.69613210E+3, 0.149E+3, 0.450E+2, 0.96330000E+0, 0.00000000E+0, 0.64264560E+3, + 0.149E+3, 0.460E+2, 0.96330000E+0, 0.00000000E+0, 0.53720580E+3, 0.149E+3, 0.470E+2, + 0.96330000E+0, 0.00000000E+0, 0.56303120E+3, 0.149E+3, 0.480E+2, 0.96330000E+0, 0.00000000E+0, + 0.71679570E+3, 0.149E+3, 0.490E+2, 0.96330000E+0, 0.00000000E+0, 0.65114030E+3, 0.149E+3, + 0.500E+2, 0.96330000E+0, 0.00000000E+0, 0.57030150E+3, 0.149E+3, 0.510E+2, 0.96330000E+0, + 0.00000000E+0, 0.52361310E+3, 0.149E+3, 0.520E+2, 0.96330000E+0, 0.00000000E+0, 0.46816800E+3, + 0.149E+3, 0.530E+2, 0.96330000E+0, 0.00000000E+0, 0.41650530E+3, 0.149E+3, 0.540E+2, + 0.96330000E+0, 0.00000000E+0, 0.20626273E+4, 0.149E+3, 0.550E+2, 0.96330000E+0, 0.00000000E+0, + 0.18342595E+4, 0.149E+3, 0.560E+2, 0.96330000E+0, 0.00000000E+0, 0.15838792E+4, 0.149E+3, + 0.570E+2, 0.96330000E+0, 0.00000000E+0, 0.67579110E+3, 0.149E+3, 0.580E+2, 0.96330000E+0, + 0.27991000E+1, 0.16159882E+4, 0.149E+3, 0.590E+2, 0.96330000E+0, 0.00000000E+0, 0.15472492E+4, + 0.149E+3, 0.600E+2, 0.96330000E+0, 0.00000000E+0, 0.15072236E+4, 0.149E+3, 0.610E+2, + 0.96330000E+0, 0.00000000E+0, 0.14705492E+4, 0.149E+3, 0.620E+2, 0.96330000E+0, 0.00000000E+0, + 0.14379844E+4, 0.149E+3, 0.630E+2, 0.96330000E+0, 0.00000000E+0, 0.11092250E+4, 0.149E+3, + 0.640E+2, 0.96330000E+0, 0.00000000E+0, 0.12845648E+4, 0.149E+3, 0.650E+2, 0.96330000E+0, + 0.00000000E+0, 0.12348582E+4, 0.149E+3, 0.660E+2, 0.96330000E+0, 0.00000000E+0, 0.12913513E+4, + 0.149E+3, 0.670E+2, 0.96330000E+0, 0.00000000E+0, 0.12633503E+4, 0.149E+3, 0.680E+2, + 0.96330000E+0, 0.00000000E+0, 0.12378116E+4, 0.149E+3, 0.690E+2, 0.96330000E+0, 0.00000000E+0, + 0.12243143E+4, 0.149E+3, 0.700E+2, 0.96330000E+0, 0.00000000E+0, 0.10181407E+4, 0.149E+3, + 0.710E+2, 0.96330000E+0, 0.00000000E+0, 0.98356470E+3, 0.149E+3, 0.720E+2, 0.96330000E+0, + 0.00000000E+0, 0.88792510E+3, 0.149E+3, 0.730E+2, 0.96330000E+0, 0.00000000E+0, 0.74340350E+3, + 0.149E+3, 0.740E+2, 0.96330000E+0, 0.00000000E+0, 0.75315120E+3, 0.149E+3, 0.750E+2, + 0.96330000E+0, 0.00000000E+0, 0.67623400E+3, 0.149E+3, 0.760E+2, 0.96330000E+0, 0.00000000E+0, + 0.61465820E+3, 0.149E+3, 0.770E+2, 0.96330000E+0, 0.00000000E+0, 0.50654420E+3, 0.149E+3, + 0.780E+2, 0.96330000E+0, 0.00000000E+0, 0.47177480E+3, 0.149E+3, 0.790E+2, 0.96330000E+0, + 0.00000000E+0, 0.48363130E+3, 0.149E+3, 0.800E+2, 0.96330000E+0, 0.00000000E+0, 0.73258080E+3, + 0.149E+3, 0.810E+2, 0.96330000E+0, 0.00000000E+0, 0.70644460E+3, 0.149E+3, 0.820E+2, + 0.96330000E+0, 0.00000000E+0, 0.63913150E+3, 0.149E+3, 0.830E+2, 0.96330000E+0, 0.00000000E+0, + 0.60410820E+3, 0.149E+3, 0.840E+2, 0.96330000E+0, 0.00000000E+0, 0.55158440E+3, 0.149E+3, + 0.850E+2, 0.96330000E+0, 0.00000000E+0, 0.50067860E+3, 0.149E+3, 0.860E+2, 0.96330000E+0, + 0.00000000E+0, 0.19210063E+4, 0.149E+3, 0.870E+2, 0.96330000E+0, 0.00000000E+0, 0.17975569E+4, + 0.149E+3, 0.880E+2, 0.96330000E+0, 0.00000000E+0, 0.15637265E+4, 0.149E+3, 0.890E+2, + 0.96330000E+0, 0.00000000E+0, 0.13796361E+4, 0.149E+3, 0.900E+2, 0.96330000E+0, 0.00000000E+0, + 0.13822903E+4, 0.149E+3, 0.910E+2, 0.96330000E+0, 0.00000000E+0, 0.13377839E+4, 0.149E+3, + 0.920E+2, 0.96330000E+0, 0.00000000E+0, 0.13931101E+4, 0.149E+3, 0.930E+2, 0.96330000E+0, + 0.00000000E+0, 0.13462697E+4, 0.149E+3, 0.940E+2, 0.96330000E+0, 0.00000000E+0, 0.69675400E+2, + 0.149E+3, 0.101E+3, 0.96330000E+0, 0.00000000E+0, 0.23904190E+3, 0.149E+3, 0.103E+3, + 0.96330000E+0, 0.98650000E+0, 0.30266780E+3, 0.149E+3, 0.104E+3, 0.96330000E+0, 0.98080000E+0, + 0.22316290E+3, 0.149E+3, 0.105E+3, 0.96330000E+0, 0.97060000E+0, 0.16468120E+3, 0.149E+3, + 0.106E+3, 0.96330000E+0, 0.98680000E+0, 0.11197070E+3, 0.149E+3, 0.107E+3, 0.96330000E+0, + 0.99440000E+0, 0.80098600E+2, 0.149E+3, 0.108E+3, 0.96330000E+0, 0.99250000E+0, 0.53936400E+2, + 0.149E+3, 0.109E+3, 0.96330000E+0, 0.99820000E+0, 0.35200740E+3, 0.149E+3, 0.111E+3, + 0.96330000E+0, 0.96840000E+0, 0.54627620E+3, 0.149E+3, 0.112E+3, 0.96330000E+0, 0.96280000E+0, + 0.54321880E+3, 0.149E+3, 0.113E+3, 0.96330000E+0, 0.96480000E+0, 0.42482930E+3, 0.149E+3, + 0.114E+3, 0.96330000E+0, 0.95070000E+0, 0.34093960E+3, 0.149E+3, 0.115E+3, 0.96330000E+0, + 0.99470000E+0, 0.28433500E+3, 0.149E+3, 0.116E+3, 0.96330000E+0, 0.99480000E+0, 0.22912290E+3, + 0.149E+3, 0.117E+3, 0.96330000E+0, 0.99720000E+0, 0.47801410E+3, 0.149E+3, 0.119E+3, + 0.96330000E+0, 0.97670000E+0, 0.95798970E+3, 0.149E+3, 0.120E+3, 0.96330000E+0, 0.98310000E+0, + 0.46767000E+3, 0.149E+3, 0.121E+3, 0.96330000E+0, 0.18627000E+1, 0.45116580E+3, 0.149E+3, + 0.122E+3, 0.96330000E+0, 0.18299000E+1, 0.44234200E+3, 0.149E+3, 0.123E+3, 0.96330000E+0, + 0.19138000E+1, 0.43947280E+3, 0.149E+3, 0.124E+3, 0.96330000E+0, 0.18269000E+1, 0.39910790E+3, + 0.149E+3, 0.125E+3, 0.96330000E+0, 0.16406000E+1, 0.36795920E+3, 0.149E+3, 0.126E+3, + 0.96330000E+0, 0.16483000E+1, 0.35103000E+3, 0.149E+3, 0.127E+3, 0.96330000E+0, 0.17149000E+1, + 0.34356200E+3, 0.149E+3, 0.128E+3, 0.96330000E+0, 0.17937000E+1, 0.34289310E+3, 0.149E+3, + 0.129E+3, 0.96330000E+0, 0.95760000E+0, 0.31591660E+3, 0.149E+3, 0.130E+3, 0.96330000E+0, + 0.19419000E+1, 0.53451270E+3, 0.149E+3, 0.131E+3, 0.96330000E+0, 0.96010000E+0, 0.45962850E+3, + 0.149E+3, 0.132E+3, 0.96330000E+0, 0.94340000E+0, 0.40554530E+3, 0.149E+3, 0.133E+3, + 0.96330000E+0, 0.98890000E+0, 0.36636520E+3, 0.149E+3, 0.134E+3, 0.96330000E+0, 0.99010000E+0, + 0.31893050E+3, 0.149E+3, 0.135E+3, 0.96330000E+0, 0.99740000E+0, 0.56760020E+3, 0.149E+3, + 0.137E+3, 0.96330000E+0, 0.97380000E+0, 0.11685036E+4, 0.149E+3, 0.138E+3, 0.96330000E+0, + 0.98010000E+0, 0.86288330E+3, 0.149E+3, 0.139E+3, 0.96330000E+0, 0.19153000E+1, 0.61965370E+3, + 0.149E+3, 0.140E+3, 0.96330000E+0, 0.19355000E+1, 0.62602540E+3, 0.149E+3, 0.141E+3, + 0.96330000E+0, 0.19545000E+1, 0.58105490E+3, 0.149E+3, 0.142E+3, 0.96330000E+0, 0.19420000E+1, + 0.66303800E+3, 0.149E+3, 0.143E+3, 0.96330000E+0, 0.16682000E+1, 0.50016280E+3, 0.149E+3, + 0.144E+3, 0.96330000E+0, 0.18584000E+1, 0.46737710E+3, 0.149E+3, 0.145E+3, 0.96330000E+0, + 0.19003000E+1, 0.43299730E+3, 0.149E+3, 0.146E+3, 0.96330000E+0, 0.18630000E+1, 0.41968680E+3, + 0.149E+3, 0.147E+3, 0.96330000E+0, 0.96790000E+0, 0.41115760E+3, 0.149E+3, 0.148E+3, + 0.96330000E+0, 0.19539000E+1, 0.67899200E+3, 0.149E+3, 0.149E+3, 0.96330000E+0, 0.96330000E+0, + 0.39050000E+2, 0.150E+3, 0.100E+1, 0.95140000E+0, 0.91180000E+0, 0.25410500E+2, 0.150E+3, + 0.200E+1, 0.95140000E+0, 0.00000000E+0, 0.64241900E+3, 0.150E+3, 0.300E+1, 0.95140000E+0, + 0.00000000E+0, 0.36274340E+3, 0.150E+3, 0.400E+1, 0.95140000E+0, 0.00000000E+0, 0.24059340E+3, + 0.150E+3, 0.500E+1, 0.95140000E+0, 0.00000000E+0, 0.16058760E+3, 0.150E+3, 0.600E+1, + 0.95140000E+0, 0.00000000E+0, 0.11127680E+3, 0.150E+3, 0.700E+1, 0.95140000E+0, 0.00000000E+0, + 0.83712000E+2, 0.150E+3, 0.800E+1, 0.95140000E+0, 0.00000000E+0, 0.63080600E+2, 0.150E+3, + 0.900E+1, 0.95140000E+0, 0.00000000E+0, 0.48325800E+2, 0.150E+3, 0.100E+2, 0.95140000E+0, + 0.00000000E+0, 0.76709550E+3, 0.150E+3, 0.110E+2, 0.95140000E+0, 0.00000000E+0, 0.58045000E+3, + 0.150E+3, 0.120E+2, 0.95140000E+0, 0.00000000E+0, 0.53107940E+3, 0.150E+3, 0.130E+2, + 0.95140000E+0, 0.00000000E+0, 0.41414030E+3, 0.150E+3, 0.140E+2, 0.95140000E+0, 0.00000000E+0, + 0.31993070E+3, 0.150E+3, 0.150E+2, 0.95140000E+0, 0.00000000E+0, 0.26382770E+3, 0.150E+3, + 0.160E+2, 0.95140000E+0, 0.00000000E+0, 0.21417230E+3, 0.150E+3, 0.170E+2, 0.95140000E+0, + 0.00000000E+0, 0.17426390E+3, 0.150E+3, 0.180E+2, 0.95140000E+0, 0.00000000E+0, 0.12595964E+4, + 0.150E+3, 0.190E+2, 0.95140000E+0, 0.00000000E+0, 0.10266097E+4, 0.150E+3, 0.200E+2, + 0.95140000E+0, 0.00000000E+0, 0.84554470E+3, 0.150E+3, 0.210E+2, 0.95140000E+0, 0.00000000E+0, + 0.81389640E+3, 0.150E+3, 0.220E+2, 0.95140000E+0, 0.00000000E+0, 0.74392530E+3, 0.150E+3, + 0.230E+2, 0.95140000E+0, 0.00000000E+0, 0.58540690E+3, 0.150E+3, 0.240E+2, 0.95140000E+0, + 0.00000000E+0, 0.63875870E+3, 0.150E+3, 0.250E+2, 0.95140000E+0, 0.00000000E+0, 0.50063040E+3, + 0.150E+3, 0.260E+2, 0.95140000E+0, 0.00000000E+0, 0.52899650E+3, 0.150E+3, 0.270E+2, + 0.95140000E+0, 0.00000000E+0, 0.54604730E+3, 0.150E+3, 0.280E+2, 0.95140000E+0, 0.00000000E+0, + 0.41817300E+3, 0.150E+3, 0.290E+2, 0.95140000E+0, 0.00000000E+0, 0.42710250E+3, 0.150E+3, + 0.300E+2, 0.95140000E+0, 0.00000000E+0, 0.50688380E+3, 0.150E+3, 0.310E+2, 0.95140000E+0, + 0.00000000E+0, 0.44348920E+3, 0.150E+3, 0.320E+2, 0.95140000E+0, 0.00000000E+0, 0.37536940E+3, + 0.150E+3, 0.330E+2, 0.95140000E+0, 0.00000000E+0, 0.33511820E+3, 0.150E+3, 0.340E+2, + 0.95140000E+0, 0.00000000E+0, 0.29171790E+3, 0.150E+3, 0.350E+2, 0.95140000E+0, 0.00000000E+0, + 0.25244080E+3, 0.150E+3, 0.360E+2, 0.95140000E+0, 0.00000000E+0, 0.14095386E+4, 0.150E+3, + 0.370E+2, 0.95140000E+0, 0.00000000E+0, 0.12233073E+4, 0.150E+3, 0.380E+2, 0.95140000E+0, + 0.00000000E+0, 0.10654342E+4, 0.150E+3, 0.390E+2, 0.95140000E+0, 0.00000000E+0, 0.95393220E+3, + 0.150E+3, 0.400E+2, 0.95140000E+0, 0.00000000E+0, 0.86754750E+3, 0.150E+3, 0.410E+2, + 0.95140000E+0, 0.00000000E+0, 0.66641970E+3, 0.150E+3, 0.420E+2, 0.95140000E+0, 0.00000000E+0, + 0.74499930E+3, 0.150E+3, 0.430E+2, 0.95140000E+0, 0.00000000E+0, 0.56445890E+3, 0.150E+3, + 0.440E+2, 0.95140000E+0, 0.00000000E+0, 0.61737910E+3, 0.150E+3, 0.450E+2, 0.95140000E+0, + 0.00000000E+0, 0.57156020E+3, 0.150E+3, 0.460E+2, 0.95140000E+0, 0.00000000E+0, 0.47659660E+3, + 0.150E+3, 0.470E+2, 0.95140000E+0, 0.00000000E+0, 0.50255130E+3, 0.150E+3, 0.480E+2, + 0.95140000E+0, 0.00000000E+0, 0.63411950E+3, 0.150E+3, 0.490E+2, 0.95140000E+0, 0.00000000E+0, + 0.58276930E+3, 0.150E+3, 0.500E+2, 0.95140000E+0, 0.00000000E+0, 0.51594670E+3, 0.150E+3, + 0.510E+2, 0.95140000E+0, 0.00000000E+0, 0.47668110E+3, 0.150E+3, 0.520E+2, 0.95140000E+0, + 0.00000000E+0, 0.42899630E+3, 0.150E+3, 0.530E+2, 0.95140000E+0, 0.00000000E+0, 0.38394570E+3, + 0.150E+3, 0.540E+2, 0.95140000E+0, 0.00000000E+0, 0.17161526E+4, 0.150E+3, 0.550E+2, + 0.95140000E+0, 0.00000000E+0, 0.15618289E+4, 0.150E+3, 0.560E+2, 0.95140000E+0, 0.00000000E+0, + 0.13644290E+4, 0.150E+3, 0.570E+2, 0.95140000E+0, 0.00000000E+0, 0.61000420E+3, 0.150E+3, + 0.580E+2, 0.95140000E+0, 0.27991000E+1, 0.13811677E+4, 0.150E+3, 0.590E+2, 0.95140000E+0, + 0.00000000E+0, 0.13251151E+4, 0.150E+3, 0.600E+2, 0.95140000E+0, 0.00000000E+0, 0.12915707E+4, + 0.150E+3, 0.610E+2, 0.95140000E+0, 0.00000000E+0, 0.12607608E+4, 0.150E+3, 0.620E+2, + 0.95140000E+0, 0.00000000E+0, 0.12334280E+4, 0.150E+3, 0.630E+2, 0.95140000E+0, 0.00000000E+0, + 0.96322340E+3, 0.150E+3, 0.640E+2, 0.95140000E+0, 0.00000000E+0, 0.10940703E+4, 0.150E+3, + 0.650E+2, 0.95140000E+0, 0.00000000E+0, 0.10539748E+4, 0.150E+3, 0.660E+2, 0.95140000E+0, + 0.00000000E+0, 0.11110005E+4, 0.150E+3, 0.670E+2, 0.95140000E+0, 0.00000000E+0, 0.10872901E+4, + 0.150E+3, 0.680E+2, 0.95140000E+0, 0.00000000E+0, 0.10658196E+4, 0.150E+3, 0.690E+2, + 0.95140000E+0, 0.00000000E+0, 0.10536773E+4, 0.150E+3, 0.700E+2, 0.95140000E+0, 0.00000000E+0, + 0.88359210E+3, 0.150E+3, 0.710E+2, 0.95140000E+0, 0.00000000E+0, 0.86380750E+3, 0.150E+3, + 0.720E+2, 0.95140000E+0, 0.00000000E+0, 0.78517710E+3, 0.150E+3, 0.730E+2, 0.95140000E+0, + 0.00000000E+0, 0.66055390E+3, 0.150E+3, 0.740E+2, 0.95140000E+0, 0.00000000E+0, 0.67110130E+3, + 0.150E+3, 0.750E+2, 0.95140000E+0, 0.00000000E+0, 0.60606460E+3, 0.150E+3, 0.760E+2, + 0.95140000E+0, 0.00000000E+0, 0.55342010E+3, 0.150E+3, 0.770E+2, 0.95140000E+0, 0.00000000E+0, + 0.45807960E+3, 0.150E+3, 0.780E+2, 0.95140000E+0, 0.00000000E+0, 0.42739480E+3, 0.150E+3, + 0.790E+2, 0.95140000E+0, 0.00000000E+0, 0.43923750E+3, 0.150E+3, 0.800E+2, 0.95140000E+0, + 0.00000000E+0, 0.64947520E+3, 0.150E+3, 0.810E+2, 0.95140000E+0, 0.00000000E+0, 0.63216060E+3, + 0.150E+3, 0.820E+2, 0.95140000E+0, 0.00000000E+0, 0.57757500E+3, 0.150E+3, 0.830E+2, + 0.95140000E+0, 0.00000000E+0, 0.54893280E+3, 0.150E+3, 0.840E+2, 0.95140000E+0, 0.00000000E+0, + 0.50441400E+3, 0.150E+3, 0.850E+2, 0.95140000E+0, 0.00000000E+0, 0.46043530E+3, 0.150E+3, + 0.860E+2, 0.95140000E+0, 0.00000000E+0, 0.16132050E+4, 0.150E+3, 0.870E+2, 0.95140000E+0, + 0.00000000E+0, 0.15396549E+4, 0.150E+3, 0.880E+2, 0.95140000E+0, 0.00000000E+0, 0.13539743E+4, + 0.150E+3, 0.890E+2, 0.95140000E+0, 0.00000000E+0, 0.12088936E+4, 0.150E+3, 0.900E+2, + 0.95140000E+0, 0.00000000E+0, 0.12037043E+4, 0.150E+3, 0.910E+2, 0.95140000E+0, 0.00000000E+0, + 0.11652987E+4, 0.150E+3, 0.920E+2, 0.95140000E+0, 0.00000000E+0, 0.12045686E+4, 0.150E+3, + 0.930E+2, 0.95140000E+0, 0.00000000E+0, 0.11657062E+4, 0.150E+3, 0.940E+2, 0.95140000E+0, + 0.00000000E+0, 0.63518900E+2, 0.150E+3, 0.101E+3, 0.95140000E+0, 0.00000000E+0, 0.21038150E+3, + 0.150E+3, 0.103E+3, 0.95140000E+0, 0.98650000E+0, 0.26750360E+3, 0.150E+3, 0.104E+3, + 0.95140000E+0, 0.98080000E+0, 0.20167580E+3, 0.150E+3, 0.105E+3, 0.95140000E+0, 0.97060000E+0, + 0.15060400E+3, 0.150E+3, 0.106E+3, 0.95140000E+0, 0.98680000E+0, 0.10370700E+3, 0.150E+3, + 0.107E+3, 0.95140000E+0, 0.99440000E+0, 0.74928900E+2, 0.150E+3, 0.108E+3, 0.95140000E+0, + 0.99250000E+0, 0.51049200E+2, 0.150E+3, 0.109E+3, 0.95140000E+0, 0.99820000E+0, 0.30824700E+3, + 0.150E+3, 0.111E+3, 0.95140000E+0, 0.96840000E+0, 0.47728480E+3, 0.150E+3, 0.112E+3, + 0.95140000E+0, 0.96280000E+0, 0.48037350E+3, 0.150E+3, 0.113E+3, 0.95140000E+0, 0.96480000E+0, + 0.38212550E+3, 0.150E+3, 0.114E+3, 0.95140000E+0, 0.95070000E+0, 0.31042380E+3, 0.150E+3, + 0.115E+3, 0.95140000E+0, 0.99470000E+0, 0.26094970E+3, 0.150E+3, 0.116E+3, 0.95140000E+0, + 0.99480000E+0, 0.21197090E+3, 0.150E+3, 0.117E+3, 0.95140000E+0, 0.99720000E+0, 0.42200550E+3, + 0.150E+3, 0.119E+3, 0.95140000E+0, 0.97670000E+0, 0.81999260E+3, 0.150E+3, 0.120E+3, + 0.95140000E+0, 0.98310000E+0, 0.41914320E+3, 0.150E+3, 0.121E+3, 0.95140000E+0, 0.18627000E+1, + 0.40443780E+3, 0.150E+3, 0.122E+3, 0.95140000E+0, 0.18299000E+1, 0.39640790E+3, 0.150E+3, + 0.123E+3, 0.95140000E+0, 0.19138000E+1, 0.39312150E+3, 0.150E+3, 0.124E+3, 0.95140000E+0, + 0.18269000E+1, 0.36011140E+3, 0.150E+3, 0.125E+3, 0.95140000E+0, 0.16406000E+1, 0.33275950E+3, + 0.150E+3, 0.126E+3, 0.95140000E+0, 0.16483000E+1, 0.31739780E+3, 0.150E+3, 0.127E+3, + 0.95140000E+0, 0.17149000E+1, 0.31042370E+3, 0.150E+3, 0.128E+3, 0.95140000E+0, 0.17937000E+1, + 0.30781940E+3, 0.150E+3, 0.129E+3, 0.95140000E+0, 0.95760000E+0, 0.28694640E+3, 0.150E+3, + 0.130E+3, 0.95140000E+0, 0.19419000E+1, 0.47510140E+3, 0.150E+3, 0.131E+3, 0.95140000E+0, + 0.96010000E+0, 0.41406130E+3, 0.150E+3, 0.132E+3, 0.95140000E+0, 0.94340000E+0, 0.36881960E+3, + 0.150E+3, 0.133E+3, 0.95140000E+0, 0.98890000E+0, 0.33526670E+3, 0.150E+3, 0.134E+3, + 0.95140000E+0, 0.99010000E+0, 0.29382390E+3, 0.150E+3, 0.135E+3, 0.95140000E+0, 0.99740000E+0, + 0.50249860E+3, 0.150E+3, 0.137E+3, 0.95140000E+0, 0.97380000E+0, 0.99819190E+3, 0.150E+3, + 0.138E+3, 0.95140000E+0, 0.98010000E+0, 0.75411460E+3, 0.150E+3, 0.139E+3, 0.95140000E+0, + 0.19153000E+1, 0.55441070E+3, 0.150E+3, 0.140E+3, 0.95140000E+0, 0.19355000E+1, 0.55998500E+3, + 0.150E+3, 0.141E+3, 0.95140000E+0, 0.19545000E+1, 0.52115630E+3, 0.150E+3, 0.142E+3, + 0.95140000E+0, 0.19420000E+1, 0.58793550E+3, 0.150E+3, 0.143E+3, 0.95140000E+0, 0.16682000E+1, + 0.45216820E+3, 0.150E+3, 0.144E+3, 0.95140000E+0, 0.18584000E+1, 0.42274380E+3, 0.150E+3, + 0.145E+3, 0.95140000E+0, 0.19003000E+1, 0.39214710E+3, 0.150E+3, 0.146E+3, 0.95140000E+0, + 0.18630000E+1, 0.37963350E+3, 0.150E+3, 0.147E+3, 0.95140000E+0, 0.96790000E+0, 0.37434300E+3, + 0.150E+3, 0.148E+3, 0.95140000E+0, 0.19539000E+1, 0.60309650E+3, 0.150E+3, 0.149E+3, + 0.95140000E+0, 0.96330000E+0, 0.54204390E+3, 0.150E+3, 0.150E+3, 0.95140000E+0, 0.95140000E+0, + 0.37118600E+2, 0.151E+3, 0.100E+1, 0.97490000E+0, 0.91180000E+0, 0.24506800E+2, 0.151E+3, + 0.200E+1, 0.97490000E+0, 0.00000000E+0, 0.56950200E+3, 0.151E+3, 0.300E+1, 0.97490000E+0, + 0.00000000E+0, 0.33206650E+3, 0.151E+3, 0.400E+1, 0.97490000E+0, 0.00000000E+0, 0.22424380E+3, + 0.151E+3, 0.500E+1, 0.97490000E+0, 0.00000000E+0, 0.15163340E+3, 0.151E+3, 0.600E+1, + 0.97490000E+0, 0.00000000E+0, 0.10605380E+3, 0.151E+3, 0.700E+1, 0.97490000E+0, 0.00000000E+0, + 0.80289900E+2, 0.151E+3, 0.800E+1, 0.97490000E+0, 0.00000000E+0, 0.60817400E+2, 0.151E+3, + 0.900E+1, 0.97490000E+0, 0.00000000E+0, 0.46777500E+2, 0.151E+3, 0.100E+2, 0.97490000E+0, + 0.00000000E+0, 0.68136500E+3, 0.151E+3, 0.110E+2, 0.97490000E+0, 0.00000000E+0, 0.52835450E+3, + 0.151E+3, 0.120E+2, 0.97490000E+0, 0.00000000E+0, 0.48798470E+3, 0.151E+3, 0.130E+2, + 0.97490000E+0, 0.00000000E+0, 0.38531020E+3, 0.151E+3, 0.140E+2, 0.97490000E+0, 0.00000000E+0, + 0.30075580E+3, 0.151E+3, 0.150E+2, 0.97490000E+0, 0.00000000E+0, 0.24964690E+3, 0.151E+3, + 0.160E+2, 0.97490000E+0, 0.00000000E+0, 0.20391030E+3, 0.151E+3, 0.170E+2, 0.97490000E+0, + 0.00000000E+0, 0.16677960E+3, 0.151E+3, 0.180E+2, 0.97490000E+0, 0.00000000E+0, 0.11139369E+4, + 0.151E+3, 0.190E+2, 0.97490000E+0, 0.00000000E+0, 0.92532660E+3, 0.151E+3, 0.200E+2, + 0.97490000E+0, 0.00000000E+0, 0.76543030E+3, 0.151E+3, 0.210E+2, 0.97490000E+0, 0.00000000E+0, + 0.73977510E+3, 0.151E+3, 0.220E+2, 0.97490000E+0, 0.00000000E+0, 0.67780140E+3, 0.151E+3, + 0.230E+2, 0.97490000E+0, 0.00000000E+0, 0.53372530E+3, 0.151E+3, 0.240E+2, 0.97490000E+0, + 0.00000000E+0, 0.58400790E+3, 0.151E+3, 0.250E+2, 0.97490000E+0, 0.00000000E+0, 0.45821350E+3, + 0.151E+3, 0.260E+2, 0.97490000E+0, 0.00000000E+0, 0.48646450E+3, 0.151E+3, 0.270E+2, + 0.97490000E+0, 0.00000000E+0, 0.50090110E+3, 0.151E+3, 0.280E+2, 0.97490000E+0, 0.00000000E+0, + 0.38380100E+3, 0.151E+3, 0.290E+2, 0.97490000E+0, 0.00000000E+0, 0.39484340E+3, 0.151E+3, + 0.300E+2, 0.97490000E+0, 0.00000000E+0, 0.46751190E+3, 0.151E+3, 0.310E+2, 0.97490000E+0, + 0.00000000E+0, 0.41296610E+3, 0.151E+3, 0.320E+2, 0.97490000E+0, 0.00000000E+0, 0.35254270E+3, + 0.151E+3, 0.330E+2, 0.97490000E+0, 0.00000000E+0, 0.31639840E+3, 0.151E+3, 0.340E+2, + 0.97490000E+0, 0.00000000E+0, 0.27688560E+3, 0.151E+3, 0.350E+2, 0.97490000E+0, 0.00000000E+0, + 0.24075150E+3, 0.151E+3, 0.360E+2, 0.97490000E+0, 0.00000000E+0, 0.12488109E+4, 0.151E+3, + 0.370E+2, 0.97490000E+0, 0.00000000E+0, 0.11019644E+4, 0.151E+3, 0.380E+2, 0.97490000E+0, + 0.00000000E+0, 0.96716720E+3, 0.151E+3, 0.390E+2, 0.97490000E+0, 0.00000000E+0, 0.87013340E+3, + 0.151E+3, 0.400E+2, 0.97490000E+0, 0.00000000E+0, 0.79387710E+3, 0.151E+3, 0.410E+2, + 0.97490000E+0, 0.00000000E+0, 0.61324700E+3, 0.151E+3, 0.420E+2, 0.97490000E+0, 0.00000000E+0, + 0.68412920E+3, 0.151E+3, 0.430E+2, 0.97490000E+0, 0.00000000E+0, 0.52150710E+3, 0.151E+3, + 0.440E+2, 0.97490000E+0, 0.00000000E+0, 0.57027900E+3, 0.151E+3, 0.450E+2, 0.97490000E+0, + 0.00000000E+0, 0.52899540E+3, 0.151E+3, 0.460E+2, 0.97490000E+0, 0.00000000E+0, 0.44070410E+3, + 0.151E+3, 0.470E+2, 0.97490000E+0, 0.00000000E+0, 0.46629410E+3, 0.151E+3, 0.480E+2, + 0.97490000E+0, 0.00000000E+0, 0.58471100E+3, 0.151E+3, 0.490E+2, 0.97490000E+0, 0.00000000E+0, + 0.54152090E+3, 0.151E+3, 0.500E+2, 0.97490000E+0, 0.00000000E+0, 0.48305960E+3, 0.151E+3, + 0.510E+2, 0.97490000E+0, 0.00000000E+0, 0.44833330E+3, 0.151E+3, 0.520E+2, 0.97490000E+0, + 0.00000000E+0, 0.40544000E+3, 0.151E+3, 0.530E+2, 0.97490000E+0, 0.00000000E+0, 0.36450640E+3, + 0.151E+3, 0.540E+2, 0.97490000E+0, 0.00000000E+0, 0.15212386E+4, 0.151E+3, 0.550E+2, + 0.97490000E+0, 0.00000000E+0, 0.14035743E+4, 0.151E+3, 0.560E+2, 0.97490000E+0, 0.00000000E+0, + 0.12355723E+4, 0.151E+3, 0.570E+2, 0.97490000E+0, 0.00000000E+0, 0.57038460E+3, 0.151E+3, + 0.580E+2, 0.97490000E+0, 0.27991000E+1, 0.12443690E+4, 0.151E+3, 0.590E+2, 0.97490000E+0, + 0.00000000E+0, 0.11953394E+4, 0.151E+3, 0.600E+2, 0.97490000E+0, 0.00000000E+0, 0.11654811E+4, + 0.151E+3, 0.610E+2, 0.97490000E+0, 0.00000000E+0, 0.11380116E+4, 0.151E+3, 0.620E+2, + 0.97490000E+0, 0.00000000E+0, 0.11136574E+4, 0.151E+3, 0.630E+2, 0.97490000E+0, 0.00000000E+0, + 0.87723370E+3, 0.151E+3, 0.640E+2, 0.97490000E+0, 0.00000000E+0, 0.98436690E+3, 0.151E+3, + 0.650E+2, 0.97490000E+0, 0.00000000E+0, 0.94971600E+3, 0.151E+3, 0.660E+2, 0.97490000E+0, + 0.00000000E+0, 0.10050059E+4, 0.151E+3, 0.670E+2, 0.97490000E+0, 0.00000000E+0, 0.98375110E+3, + 0.151E+3, 0.680E+2, 0.97490000E+0, 0.00000000E+0, 0.96460520E+3, 0.151E+3, 0.690E+2, + 0.97490000E+0, 0.00000000E+0, 0.95326960E+3, 0.151E+3, 0.700E+2, 0.97490000E+0, 0.00000000E+0, + 0.80412310E+3, 0.151E+3, 0.710E+2, 0.97490000E+0, 0.00000000E+0, 0.79227200E+3, 0.151E+3, + 0.720E+2, 0.97490000E+0, 0.00000000E+0, 0.72359370E+3, 0.151E+3, 0.730E+2, 0.97490000E+0, + 0.00000000E+0, 0.61110290E+3, 0.151E+3, 0.740E+2, 0.97490000E+0, 0.00000000E+0, 0.62195650E+3, + 0.151E+3, 0.750E+2, 0.97490000E+0, 0.00000000E+0, 0.56397010E+3, 0.151E+3, 0.760E+2, + 0.97490000E+0, 0.00000000E+0, 0.51667170E+3, 0.151E+3, 0.770E+2, 0.97490000E+0, 0.00000000E+0, + 0.42917250E+3, 0.151E+3, 0.780E+2, 0.97490000E+0, 0.00000000E+0, 0.40097810E+3, 0.151E+3, + 0.790E+2, 0.97490000E+0, 0.00000000E+0, 0.41268870E+3, 0.151E+3, 0.800E+2, 0.97490000E+0, + 0.00000000E+0, 0.60016760E+3, 0.151E+3, 0.810E+2, 0.97490000E+0, 0.00000000E+0, 0.58760720E+3, + 0.151E+3, 0.820E+2, 0.97490000E+0, 0.00000000E+0, 0.54048320E+3, 0.151E+3, 0.830E+2, + 0.97490000E+0, 0.00000000E+0, 0.51568470E+3, 0.151E+3, 0.840E+2, 0.97490000E+0, 0.00000000E+0, + 0.47605910E+3, 0.151E+3, 0.850E+2, 0.97490000E+0, 0.00000000E+0, 0.43636860E+3, 0.151E+3, + 0.860E+2, 0.97490000E+0, 0.00000000E+0, 0.14387730E+4, 0.151E+3, 0.870E+2, 0.97490000E+0, + 0.00000000E+0, 0.13892118E+4, 0.151E+3, 0.880E+2, 0.97490000E+0, 0.00000000E+0, 0.12302614E+4, + 0.151E+3, 0.890E+2, 0.97490000E+0, 0.00000000E+0, 0.11073931E+4, 0.151E+3, 0.900E+2, + 0.97490000E+0, 0.00000000E+0, 0.10983173E+4, 0.151E+3, 0.910E+2, 0.97490000E+0, 0.00000000E+0, + 0.10634833E+4, 0.151E+3, 0.920E+2, 0.97490000E+0, 0.00000000E+0, 0.10937836E+4, 0.151E+3, + 0.930E+2, 0.97490000E+0, 0.00000000E+0, 0.10594592E+4, 0.151E+3, 0.940E+2, 0.97490000E+0, + 0.00000000E+0, 0.59779600E+2, 0.151E+3, 0.101E+3, 0.97490000E+0, 0.00000000E+0, 0.19308010E+3, + 0.151E+3, 0.103E+3, 0.97490000E+0, 0.98650000E+0, 0.24635800E+3, 0.151E+3, 0.104E+3, + 0.97490000E+0, 0.98080000E+0, 0.18865770E+3, 0.151E+3, 0.105E+3, 0.97490000E+0, 0.97060000E+0, + 0.14217370E+3, 0.151E+3, 0.106E+3, 0.97490000E+0, 0.98680000E+0, 0.98858300E+2, 0.151E+3, + 0.107E+3, 0.97490000E+0, 0.99440000E+0, 0.71981600E+2, 0.151E+3, 0.108E+3, 0.97490000E+0, + 0.99250000E+0, 0.49497000E+2, 0.151E+3, 0.109E+3, 0.97490000E+0, 0.99820000E+0, 0.28199230E+3, + 0.151E+3, 0.111E+3, 0.97490000E+0, 0.96840000E+0, 0.43599230E+3, 0.151E+3, 0.112E+3, + 0.97490000E+0, 0.96280000E+0, 0.44239460E+3, 0.151E+3, 0.113E+3, 0.97490000E+0, 0.96480000E+0, + 0.35616810E+3, 0.151E+3, 0.114E+3, 0.97490000E+0, 0.95070000E+0, 0.29192250E+3, 0.151E+3, + 0.115E+3, 0.97490000E+0, 0.99470000E+0, 0.24688440E+3, 0.151E+3, 0.116E+3, 0.97490000E+0, + 0.99480000E+0, 0.20178980E+3, 0.151E+3, 0.117E+3, 0.97490000E+0, 0.99720000E+0, 0.38878440E+3, + 0.151E+3, 0.119E+3, 0.97490000E+0, 0.97670000E+0, 0.73983800E+3, 0.151E+3, 0.120E+3, + 0.97490000E+0, 0.98310000E+0, 0.38986450E+3, 0.151E+3, 0.121E+3, 0.97490000E+0, 0.18627000E+1, + 0.37633360E+3, 0.151E+3, 0.122E+3, 0.97490000E+0, 0.18299000E+1, 0.36879080E+3, 0.151E+3, + 0.123E+3, 0.97490000E+0, 0.19138000E+1, 0.36529400E+3, 0.151E+3, 0.124E+3, 0.97490000E+0, + 0.18269000E+1, 0.33651780E+3, 0.151E+3, 0.125E+3, 0.97490000E+0, 0.16406000E+1, 0.31148590E+3, + 0.151E+3, 0.126E+3, 0.97490000E+0, 0.16483000E+1, 0.29711100E+3, 0.151E+3, 0.127E+3, + 0.97490000E+0, 0.17149000E+1, 0.29044330E+3, 0.151E+3, 0.128E+3, 0.97490000E+0, 0.17937000E+1, + 0.28674360E+3, 0.151E+3, 0.129E+3, 0.97490000E+0, 0.95760000E+0, 0.26942080E+3, 0.151E+3, + 0.130E+3, 0.97490000E+0, 0.19419000E+1, 0.43926920E+3, 0.151E+3, 0.131E+3, 0.97490000E+0, + 0.96010000E+0, 0.38642600E+3, 0.151E+3, 0.132E+3, 0.97490000E+0, 0.94340000E+0, 0.34656560E+3, + 0.151E+3, 0.133E+3, 0.97490000E+0, 0.98890000E+0, 0.31651250E+3, 0.151E+3, 0.134E+3, + 0.97490000E+0, 0.99010000E+0, 0.27880760E+3, 0.151E+3, 0.135E+3, 0.97490000E+0, 0.99740000E+0, + 0.46396320E+3, 0.151E+3, 0.137E+3, 0.97490000E+0, 0.97380000E+0, 0.89977960E+3, 0.151E+3, + 0.138E+3, 0.97490000E+0, 0.98010000E+0, 0.69024350E+3, 0.151E+3, 0.139E+3, 0.97490000E+0, + 0.19153000E+1, 0.51535410E+3, 0.151E+3, 0.140E+3, 0.97490000E+0, 0.19355000E+1, 0.52041820E+3, + 0.151E+3, 0.141E+3, 0.97490000E+0, 0.19545000E+1, 0.48533740E+3, 0.151E+3, 0.142E+3, + 0.97490000E+0, 0.19420000E+1, 0.54348220E+3, 0.151E+3, 0.143E+3, 0.97490000E+0, 0.16682000E+1, + 0.42337510E+3, 0.151E+3, 0.144E+3, 0.97490000E+0, 0.18584000E+1, 0.39603590E+3, 0.151E+3, + 0.145E+3, 0.97490000E+0, 0.19003000E+1, 0.36774930E+3, 0.151E+3, 0.146E+3, 0.97490000E+0, + 0.18630000E+1, 0.35570800E+3, 0.151E+3, 0.147E+3, 0.97490000E+0, 0.96790000E+0, 0.35221320E+3, + 0.151E+3, 0.148E+3, 0.97490000E+0, 0.19539000E+1, 0.55762720E+3, 0.151E+3, 0.149E+3, + 0.97490000E+0, 0.96330000E+0, 0.50519000E+3, 0.151E+3, 0.150E+3, 0.97490000E+0, 0.95140000E+0, + 0.47347030E+3, 0.151E+3, 0.151E+3, 0.97490000E+0, 0.97490000E+0, 0.35486100E+2, 0.152E+3, + 0.100E+1, 0.98110000E+0, 0.91180000E+0, 0.23710000E+2, 0.152E+3, 0.200E+1, 0.98110000E+0, + 0.00000000E+0, 0.51945180E+3, 0.152E+3, 0.300E+1, 0.98110000E+0, 0.00000000E+0, 0.30894260E+3, + 0.152E+3, 0.400E+1, 0.98110000E+0, 0.00000000E+0, 0.21127990E+3, 0.152E+3, 0.500E+1, + 0.98110000E+0, 0.00000000E+0, 0.14426000E+3, 0.152E+3, 0.600E+1, 0.98110000E+0, 0.00000000E+0, + 0.10163150E+3, 0.152E+3, 0.700E+1, 0.98110000E+0, 0.00000000E+0, 0.77336500E+2, 0.152E+3, + 0.800E+1, 0.98110000E+0, 0.00000000E+0, 0.58833200E+2, 0.152E+3, 0.900E+1, 0.98110000E+0, + 0.00000000E+0, 0.45404400E+2, 0.152E+3, 0.100E+2, 0.98110000E+0, 0.00000000E+0, 0.62230990E+3, + 0.152E+3, 0.110E+2, 0.98110000E+0, 0.00000000E+0, 0.48978200E+3, 0.152E+3, 0.120E+2, + 0.98110000E+0, 0.00000000E+0, 0.45524770E+3, 0.152E+3, 0.130E+2, 0.98110000E+0, 0.00000000E+0, + 0.36255610E+3, 0.152E+3, 0.140E+2, 0.98110000E+0, 0.00000000E+0, 0.28512390E+3, 0.152E+3, + 0.150E+2, 0.98110000E+0, 0.00000000E+0, 0.23785710E+3, 0.152E+3, 0.160E+2, 0.98110000E+0, + 0.00000000E+0, 0.19521310E+3, 0.152E+3, 0.170E+2, 0.98110000E+0, 0.00000000E+0, 0.16033310E+3, + 0.152E+3, 0.180E+2, 0.98110000E+0, 0.00000000E+0, 0.10157738E+4, 0.152E+3, 0.190E+2, + 0.98110000E+0, 0.00000000E+0, 0.85290360E+3, 0.152E+3, 0.200E+2, 0.98110000E+0, 0.00000000E+0, + 0.70737690E+3, 0.152E+3, 0.210E+2, 0.98110000E+0, 0.00000000E+0, 0.68556870E+3, 0.152E+3, + 0.220E+2, 0.98110000E+0, 0.00000000E+0, 0.62913900E+3, 0.152E+3, 0.230E+2, 0.98110000E+0, + 0.00000000E+0, 0.49588010E+3, 0.152E+3, 0.240E+2, 0.98110000E+0, 0.00000000E+0, 0.54334380E+3, + 0.152E+3, 0.250E+2, 0.98110000E+0, 0.00000000E+0, 0.42683610E+3, 0.152E+3, 0.260E+2, + 0.98110000E+0, 0.00000000E+0, 0.45431700E+3, 0.152E+3, 0.270E+2, 0.98110000E+0, 0.00000000E+0, + 0.46700090E+3, 0.152E+3, 0.280E+2, 0.98110000E+0, 0.00000000E+0, 0.35818700E+3, 0.152E+3, + 0.290E+2, 0.98110000E+0, 0.00000000E+0, 0.37006740E+3, 0.152E+3, 0.300E+2, 0.98110000E+0, + 0.00000000E+0, 0.43744170E+3, 0.152E+3, 0.310E+2, 0.98110000E+0, 0.00000000E+0, 0.38889460E+3, + 0.152E+3, 0.320E+2, 0.98110000E+0, 0.00000000E+0, 0.33402630E+3, 0.152E+3, 0.330E+2, + 0.98110000E+0, 0.00000000E+0, 0.30096170E+3, 0.152E+3, 0.340E+2, 0.98110000E+0, 0.00000000E+0, + 0.26444460E+3, 0.152E+3, 0.350E+2, 0.98110000E+0, 0.00000000E+0, 0.23079470E+3, 0.152E+3, + 0.360E+2, 0.98110000E+0, 0.00000000E+0, 0.11403397E+4, 0.152E+3, 0.370E+2, 0.98110000E+0, + 0.00000000E+0, 0.10156122E+4, 0.152E+3, 0.380E+2, 0.98110000E+0, 0.00000000E+0, 0.89573040E+3, + 0.152E+3, 0.390E+2, 0.98110000E+0, 0.00000000E+0, 0.80842520E+3, 0.152E+3, 0.400E+2, + 0.98110000E+0, 0.00000000E+0, 0.73920970E+3, 0.152E+3, 0.410E+2, 0.98110000E+0, 0.00000000E+0, + 0.57337000E+3, 0.152E+3, 0.420E+2, 0.98110000E+0, 0.00000000E+0, 0.63864620E+3, 0.152E+3, + 0.430E+2, 0.98110000E+0, 0.00000000E+0, 0.48901000E+3, 0.152E+3, 0.440E+2, 0.98110000E+0, + 0.00000000E+0, 0.53445110E+3, 0.152E+3, 0.450E+2, 0.98110000E+0, 0.00000000E+0, 0.49643130E+3, + 0.152E+3, 0.460E+2, 0.98110000E+0, 0.00000000E+0, 0.41359130E+3, 0.152E+3, 0.470E+2, + 0.98110000E+0, 0.00000000E+0, 0.43835340E+3, 0.152E+3, 0.480E+2, 0.98110000E+0, 0.00000000E+0, + 0.54729130E+3, 0.152E+3, 0.490E+2, 0.98110000E+0, 0.00000000E+0, 0.50938490E+3, 0.152E+3, + 0.500E+2, 0.98110000E+0, 0.00000000E+0, 0.45675890E+3, 0.152E+3, 0.510E+2, 0.98110000E+0, + 0.00000000E+0, 0.42531520E+3, 0.152E+3, 0.520E+2, 0.98110000E+0, 0.00000000E+0, 0.38599880E+3, + 0.152E+3, 0.530E+2, 0.98110000E+0, 0.00000000E+0, 0.34821640E+3, 0.152E+3, 0.540E+2, + 0.98110000E+0, 0.00000000E+0, 0.13899562E+4, 0.152E+3, 0.550E+2, 0.98110000E+0, 0.00000000E+0, + 0.12920505E+4, 0.152E+3, 0.560E+2, 0.98110000E+0, 0.00000000E+0, 0.11428009E+4, 0.152E+3, + 0.570E+2, 0.98110000E+0, 0.00000000E+0, 0.53897800E+3, 0.152E+3, 0.580E+2, 0.98110000E+0, + 0.27991000E+1, 0.11473718E+4, 0.152E+3, 0.590E+2, 0.98110000E+0, 0.00000000E+0, 0.11029411E+4, + 0.152E+3, 0.600E+2, 0.98110000E+0, 0.00000000E+0, 0.10755989E+4, 0.152E+3, 0.610E+2, + 0.98110000E+0, 0.00000000E+0, 0.10504168E+4, 0.152E+3, 0.620E+2, 0.98110000E+0, 0.00000000E+0, + 0.10280990E+4, 0.152E+3, 0.630E+2, 0.98110000E+0, 0.00000000E+0, 0.81457180E+3, 0.152E+3, + 0.640E+2, 0.98110000E+0, 0.00000000E+0, 0.90749290E+3, 0.152E+3, 0.650E+2, 0.98110000E+0, + 0.00000000E+0, 0.87640540E+3, 0.152E+3, 0.660E+2, 0.98110000E+0, 0.00000000E+0, 0.92881650E+3, + 0.152E+3, 0.670E+2, 0.98110000E+0, 0.00000000E+0, 0.90926160E+3, 0.152E+3, 0.680E+2, + 0.98110000E+0, 0.00000000E+0, 0.89171060E+3, 0.152E+3, 0.690E+2, 0.98110000E+0, 0.00000000E+0, + 0.88100370E+3, 0.152E+3, 0.700E+2, 0.98110000E+0, 0.00000000E+0, 0.74613080E+3, 0.152E+3, + 0.710E+2, 0.98110000E+0, 0.00000000E+0, 0.73873540E+3, 0.152E+3, 0.720E+2, 0.98110000E+0, + 0.00000000E+0, 0.67688650E+3, 0.152E+3, 0.730E+2, 0.98110000E+0, 0.00000000E+0, 0.57338870E+3, + 0.152E+3, 0.740E+2, 0.98110000E+0, 0.00000000E+0, 0.58418960E+3, 0.152E+3, 0.750E+2, + 0.98110000E+0, 0.00000000E+0, 0.53122090E+3, 0.152E+3, 0.760E+2, 0.98110000E+0, 0.00000000E+0, + 0.48779780E+3, 0.152E+3, 0.770E+2, 0.98110000E+0, 0.00000000E+0, 0.40633480E+3, 0.152E+3, + 0.780E+2, 0.98110000E+0, 0.00000000E+0, 0.38005290E+3, 0.152E+3, 0.790E+2, 0.98110000E+0, + 0.00000000E+0, 0.39145330E+3, 0.152E+3, 0.800E+2, 0.98110000E+0, 0.00000000E+0, 0.56288150E+3, + 0.152E+3, 0.810E+2, 0.98110000E+0, 0.00000000E+0, 0.55306450E+3, 0.152E+3, 0.820E+2, + 0.98110000E+0, 0.00000000E+0, 0.51099880E+3, 0.152E+3, 0.830E+2, 0.98110000E+0, 0.00000000E+0, + 0.48888150E+3, 0.152E+3, 0.840E+2, 0.98110000E+0, 0.00000000E+0, 0.45282060E+3, 0.152E+3, + 0.850E+2, 0.98110000E+0, 0.00000000E+0, 0.41635580E+3, 0.152E+3, 0.860E+2, 0.98110000E+0, + 0.00000000E+0, 0.13196282E+4, 0.152E+3, 0.870E+2, 0.98110000E+0, 0.00000000E+0, 0.12821564E+4, + 0.152E+3, 0.880E+2, 0.98110000E+0, 0.00000000E+0, 0.11403381E+4, 0.152E+3, 0.890E+2, + 0.98110000E+0, 0.00000000E+0, 0.10319646E+4, 0.152E+3, 0.900E+2, 0.98110000E+0, 0.00000000E+0, + 0.10211167E+4, 0.152E+3, 0.910E+2, 0.98110000E+0, 0.00000000E+0, 0.98886570E+3, 0.152E+3, + 0.920E+2, 0.98110000E+0, 0.00000000E+0, 0.10136901E+4, 0.152E+3, 0.930E+2, 0.98110000E+0, + 0.00000000E+0, 0.98242950E+3, 0.152E+3, 0.940E+2, 0.98110000E+0, 0.00000000E+0, 0.56715600E+2, + 0.152E+3, 0.101E+3, 0.98110000E+0, 0.00000000E+0, 0.17998120E+3, 0.152E+3, 0.103E+3, + 0.98110000E+0, 0.98650000E+0, 0.23026410E+3, 0.152E+3, 0.104E+3, 0.98110000E+0, 0.98080000E+0, + 0.17825090E+3, 0.152E+3, 0.105E+3, 0.98110000E+0, 0.97060000E+0, 0.13527200E+3, 0.152E+3, + 0.106E+3, 0.98110000E+0, 0.98680000E+0, 0.94770500E+2, 0.152E+3, 0.107E+3, 0.98110000E+0, + 0.99440000E+0, 0.69431700E+2, 0.152E+3, 0.108E+3, 0.98110000E+0, 0.99250000E+0, 0.48103700E+2, + 0.152E+3, 0.109E+3, 0.98110000E+0, 0.99820000E+0, 0.26236970E+3, 0.152E+3, 0.111E+3, + 0.98110000E+0, 0.96840000E+0, 0.40525290E+3, 0.152E+3, 0.112E+3, 0.98110000E+0, 0.96280000E+0, + 0.41338560E+3, 0.152E+3, 0.113E+3, 0.98110000E+0, 0.96480000E+0, 0.33559140E+3, 0.152E+3, + 0.114E+3, 0.98110000E+0, 0.95070000E+0, 0.27683720E+3, 0.152E+3, 0.115E+3, 0.98110000E+0, + 0.99470000E+0, 0.23520590E+3, 0.152E+3, 0.116E+3, 0.98110000E+0, 0.99480000E+0, 0.19317040E+3, + 0.152E+3, 0.117E+3, 0.98110000E+0, 0.99720000E+0, 0.36384820E+3, 0.152E+3, 0.119E+3, + 0.98110000E+0, 0.97670000E+0, 0.68296210E+3, 0.152E+3, 0.120E+3, 0.98110000E+0, 0.98310000E+0, + 0.36699000E+3, 0.152E+3, 0.121E+3, 0.98110000E+0, 0.18627000E+1, 0.35440290E+3, 0.152E+3, + 0.122E+3, 0.98110000E+0, 0.18299000E+1, 0.34726480E+3, 0.152E+3, 0.123E+3, 0.98110000E+0, + 0.19138000E+1, 0.34370870E+3, 0.152E+3, 0.124E+3, 0.98110000E+0, 0.18269000E+1, 0.31777500E+3, + 0.152E+3, 0.125E+3, 0.98110000E+0, 0.16406000E+1, 0.29450790E+3, 0.152E+3, 0.126E+3, + 0.98110000E+0, 0.16483000E+1, 0.28094820E+3, 0.152E+3, 0.127E+3, 0.98110000E+0, 0.17149000E+1, + 0.27455800E+3, 0.152E+3, 0.128E+3, 0.98110000E+0, 0.17937000E+1, 0.27027830E+3, 0.152E+3, + 0.129E+3, 0.98110000E+0, 0.95760000E+0, 0.25527130E+3, 0.152E+3, 0.130E+3, 0.98110000E+0, + 0.19419000E+1, 0.41170180E+3, 0.152E+3, 0.131E+3, 0.98110000E+0, 0.96010000E+0, 0.36448820E+3, + 0.152E+3, 0.132E+3, 0.98110000E+0, 0.94340000E+0, 0.32849090E+3, 0.152E+3, 0.133E+3, + 0.98110000E+0, 0.98890000E+0, 0.30105670E+3, 0.152E+3, 0.134E+3, 0.98110000E+0, 0.99010000E+0, + 0.26622780E+3, 0.152E+3, 0.135E+3, 0.98110000E+0, 0.99740000E+0, 0.43493910E+3, 0.152E+3, + 0.137E+3, 0.98110000E+0, 0.97380000E+0, 0.83036610E+3, 0.152E+3, 0.138E+3, 0.98110000E+0, + 0.98010000E+0, 0.64326970E+3, 0.152E+3, 0.139E+3, 0.98110000E+0, 0.19153000E+1, 0.48508560E+3, + 0.152E+3, 0.140E+3, 0.98110000E+0, 0.19355000E+1, 0.48977500E+3, 0.152E+3, 0.141E+3, + 0.98110000E+0, 0.19545000E+1, 0.45747170E+3, 0.152E+3, 0.142E+3, 0.98110000E+0, 0.19420000E+1, + 0.50987810E+3, 0.152E+3, 0.143E+3, 0.98110000E+0, 0.16682000E+1, 0.40053650E+3, 0.152E+3, + 0.144E+3, 0.98110000E+0, 0.18584000E+1, 0.37486560E+3, 0.152E+3, 0.145E+3, 0.98110000E+0, + 0.19003000E+1, 0.34838020E+3, 0.152E+3, 0.146E+3, 0.98110000E+0, 0.18630000E+1, 0.33677710E+3, + 0.152E+3, 0.147E+3, 0.98110000E+0, 0.96790000E+0, 0.33432410E+3, 0.152E+3, 0.148E+3, + 0.98110000E+0, 0.19539000E+1, 0.52288630E+3, 0.152E+3, 0.149E+3, 0.98110000E+0, 0.96330000E+0, + 0.47620870E+3, 0.152E+3, 0.150E+3, 0.98110000E+0, 0.95140000E+0, 0.44801730E+3, 0.152E+3, + 0.151E+3, 0.98110000E+0, 0.97490000E+0, 0.42510150E+3, 0.152E+3, 0.152E+3, 0.98110000E+0, + 0.98110000E+0, 0.32815100E+2, 0.153E+3, 0.100E+1, 0.99680000E+0, 0.91180000E+0, 0.22271700E+2, + 0.153E+3, 0.200E+1, 0.99680000E+0, 0.00000000E+0, 0.45439540E+3, 0.153E+3, 0.300E+1, + 0.99680000E+0, 0.00000000E+0, 0.27643090E+3, 0.153E+3, 0.400E+1, 0.99680000E+0, 0.00000000E+0, + 0.19192730E+3, 0.153E+3, 0.500E+1, 0.99680000E+0, 0.00000000E+0, 0.13262510E+3, 0.153E+3, + 0.600E+1, 0.99680000E+0, 0.00000000E+0, 0.94299100E+2, 0.153E+3, 0.700E+1, 0.99680000E+0, + 0.00000000E+0, 0.72235800E+2, 0.153E+3, 0.800E+1, 0.99680000E+0, 0.00000000E+0, 0.55268900E+2, + 0.153E+3, 0.900E+1, 0.99680000E+0, 0.00000000E+0, 0.42851200E+2, 0.153E+3, 0.100E+2, + 0.99680000E+0, 0.00000000E+0, 0.54528550E+3, 0.153E+3, 0.110E+2, 0.99680000E+0, 0.00000000E+0, + 0.43644520E+3, 0.153E+3, 0.120E+2, 0.99680000E+0, 0.00000000E+0, 0.40871490E+3, 0.153E+3, + 0.130E+2, 0.99680000E+0, 0.00000000E+0, 0.32881570E+3, 0.153E+3, 0.140E+2, 0.99680000E+0, + 0.00000000E+0, 0.26094460E+3, 0.153E+3, 0.150E+2, 0.99680000E+0, 0.00000000E+0, 0.21904300E+3, + 0.153E+3, 0.160E+2, 0.99680000E+0, 0.00000000E+0, 0.18086040E+3, 0.153E+3, 0.170E+2, + 0.99680000E+0, 0.00000000E+0, 0.14934300E+3, 0.153E+3, 0.180E+2, 0.99680000E+0, 0.00000000E+0, + 0.88900260E+3, 0.153E+3, 0.190E+2, 0.99680000E+0, 0.00000000E+0, 0.75534780E+3, 0.153E+3, + 0.200E+2, 0.99680000E+0, 0.00000000E+0, 0.62833170E+3, 0.153E+3, 0.210E+2, 0.99680000E+0, + 0.00000000E+0, 0.61099490E+3, 0.153E+3, 0.220E+2, 0.99680000E+0, 0.00000000E+0, 0.56176430E+3, + 0.153E+3, 0.230E+2, 0.99680000E+0, 0.00000000E+0, 0.44344010E+3, 0.153E+3, 0.240E+2, + 0.99680000E+0, 0.00000000E+0, 0.48650250E+3, 0.153E+3, 0.250E+2, 0.99680000E+0, 0.00000000E+0, + 0.38289000E+3, 0.153E+3, 0.260E+2, 0.99680000E+0, 0.00000000E+0, 0.40860640E+3, 0.153E+3, + 0.270E+2, 0.99680000E+0, 0.00000000E+0, 0.41915920E+3, 0.153E+3, 0.280E+2, 0.99680000E+0, + 0.00000000E+0, 0.32203460E+3, 0.153E+3, 0.290E+2, 0.99680000E+0, 0.00000000E+0, 0.33424140E+3, + 0.153E+3, 0.300E+2, 0.99680000E+0, 0.00000000E+0, 0.39422890E+3, 0.153E+3, 0.310E+2, + 0.99680000E+0, 0.00000000E+0, 0.35311560E+3, 0.153E+3, 0.320E+2, 0.99680000E+0, 0.00000000E+0, + 0.30552140E+3, 0.153E+3, 0.330E+2, 0.99680000E+0, 0.00000000E+0, 0.27661090E+3, 0.153E+3, + 0.340E+2, 0.99680000E+0, 0.00000000E+0, 0.24427520E+3, 0.153E+3, 0.350E+2, 0.99680000E+0, + 0.00000000E+0, 0.21420040E+3, 0.153E+3, 0.360E+2, 0.99680000E+0, 0.00000000E+0, 0.99978710E+3, + 0.153E+3, 0.370E+2, 0.99680000E+0, 0.00000000E+0, 0.89949300E+3, 0.153E+3, 0.380E+2, + 0.99680000E+0, 0.00000000E+0, 0.79779010E+3, 0.153E+3, 0.390E+2, 0.99680000E+0, 0.00000000E+0, + 0.72272400E+3, 0.153E+3, 0.400E+2, 0.99680000E+0, 0.00000000E+0, 0.66260680E+3, 0.153E+3, + 0.410E+2, 0.99680000E+0, 0.00000000E+0, 0.51659320E+3, 0.153E+3, 0.420E+2, 0.99680000E+0, + 0.00000000E+0, 0.57428050E+3, 0.153E+3, 0.430E+2, 0.99680000E+0, 0.00000000E+0, 0.44217100E+3, + 0.153E+3, 0.440E+2, 0.99680000E+0, 0.00000000E+0, 0.48282170E+3, 0.153E+3, 0.450E+2, + 0.99680000E+0, 0.00000000E+0, 0.44920610E+3, 0.153E+3, 0.460E+2, 0.99680000E+0, 0.00000000E+0, + 0.37444670E+3, 0.153E+3, 0.470E+2, 0.99680000E+0, 0.00000000E+0, 0.39749790E+3, 0.153E+3, + 0.480E+2, 0.99680000E+0, 0.00000000E+0, 0.49366250E+3, 0.153E+3, 0.490E+2, 0.99680000E+0, + 0.00000000E+0, 0.46207160E+3, 0.153E+3, 0.500E+2, 0.99680000E+0, 0.00000000E+0, 0.41687150E+3, + 0.153E+3, 0.510E+2, 0.99680000E+0, 0.00000000E+0, 0.38970290E+3, 0.153E+3, 0.520E+2, + 0.99680000E+0, 0.00000000E+0, 0.35521750E+3, 0.153E+3, 0.530E+2, 0.99680000E+0, 0.00000000E+0, + 0.32180290E+3, 0.153E+3, 0.540E+2, 0.99680000E+0, 0.00000000E+0, 0.12196272E+4, 0.153E+3, + 0.550E+2, 0.99680000E+0, 0.00000000E+0, 0.11429378E+4, 0.153E+3, 0.560E+2, 0.99680000E+0, + 0.00000000E+0, 0.10164155E+4, 0.153E+3, 0.570E+2, 0.99680000E+0, 0.00000000E+0, 0.49161500E+3, + 0.153E+3, 0.580E+2, 0.99680000E+0, 0.27991000E+1, 0.10169588E+4, 0.153E+3, 0.590E+2, + 0.99680000E+0, 0.00000000E+0, 0.97834710E+3, 0.153E+3, 0.600E+2, 0.99680000E+0, 0.00000000E+0, + 0.95429670E+3, 0.153E+3, 0.610E+2, 0.99680000E+0, 0.00000000E+0, 0.93211660E+3, 0.153E+3, + 0.620E+2, 0.99680000E+0, 0.00000000E+0, 0.91246710E+3, 0.153E+3, 0.630E+2, 0.99680000E+0, + 0.00000000E+0, 0.72800530E+3, 0.153E+3, 0.640E+2, 0.99680000E+0, 0.00000000E+0, 0.80453430E+3, + 0.153E+3, 0.650E+2, 0.99680000E+0, 0.00000000E+0, 0.77785480E+3, 0.153E+3, 0.660E+2, + 0.99680000E+0, 0.00000000E+0, 0.82536440E+3, 0.153E+3, 0.670E+2, 0.99680000E+0, 0.00000000E+0, + 0.80806540E+3, 0.153E+3, 0.680E+2, 0.99680000E+0, 0.00000000E+0, 0.79260610E+3, 0.153E+3, + 0.690E+2, 0.99680000E+0, 0.00000000E+0, 0.78284050E+3, 0.153E+3, 0.700E+2, 0.99680000E+0, + 0.00000000E+0, 0.66614790E+3, 0.153E+3, 0.710E+2, 0.99680000E+0, 0.00000000E+0, 0.66319200E+3, + 0.153E+3, 0.720E+2, 0.99680000E+0, 0.00000000E+0, 0.61001430E+3, 0.153E+3, 0.730E+2, + 0.99680000E+0, 0.00000000E+0, 0.51873530E+3, 0.153E+3, 0.740E+2, 0.99680000E+0, 0.00000000E+0, + 0.52912210E+3, 0.153E+3, 0.750E+2, 0.99680000E+0, 0.00000000E+0, 0.48278010E+3, 0.153E+3, + 0.760E+2, 0.99680000E+0, 0.00000000E+0, 0.44456400E+3, 0.153E+3, 0.770E+2, 0.99680000E+0, + 0.00000000E+0, 0.37168100E+3, 0.153E+3, 0.780E+2, 0.99680000E+0, 0.00000000E+0, 0.34813080E+3, + 0.153E+3, 0.790E+2, 0.99680000E+0, 0.00000000E+0, 0.35883830E+3, 0.153E+3, 0.800E+2, + 0.99680000E+0, 0.00000000E+0, 0.50911500E+3, 0.153E+3, 0.810E+2, 0.99680000E+0, 0.00000000E+0, + 0.50219660E+3, 0.153E+3, 0.820E+2, 0.99680000E+0, 0.00000000E+0, 0.46641830E+3, 0.153E+3, + 0.830E+2, 0.99680000E+0, 0.00000000E+0, 0.44766490E+3, 0.153E+3, 0.840E+2, 0.99680000E+0, + 0.00000000E+0, 0.41630430E+3, 0.153E+3, 0.850E+2, 0.99680000E+0, 0.00000000E+0, 0.38423110E+3, + 0.153E+3, 0.860E+2, 0.99680000E+0, 0.00000000E+0, 0.11630702E+4, 0.153E+3, 0.870E+2, + 0.99680000E+0, 0.00000000E+0, 0.11376470E+4, 0.153E+3, 0.880E+2, 0.99680000E+0, 0.00000000E+0, + 0.10167803E+4, 0.153E+3, 0.890E+2, 0.99680000E+0, 0.00000000E+0, 0.92598120E+3, 0.153E+3, + 0.900E+2, 0.99680000E+0, 0.00000000E+0, 0.91390750E+3, 0.153E+3, 0.910E+2, 0.99680000E+0, + 0.00000000E+0, 0.88520210E+3, 0.153E+3, 0.920E+2, 0.99680000E+0, 0.00000000E+0, 0.90396880E+3, + 0.153E+3, 0.930E+2, 0.99680000E+0, 0.00000000E+0, 0.87665190E+3, 0.153E+3, 0.940E+2, + 0.99680000E+0, 0.00000000E+0, 0.51949600E+2, 0.153E+3, 0.101E+3, 0.99680000E+0, 0.00000000E+0, + 0.16143030E+3, 0.153E+3, 0.103E+3, 0.99680000E+0, 0.98650000E+0, 0.20721850E+3, 0.153E+3, + 0.104E+3, 0.99680000E+0, 0.98080000E+0, 0.16249390E+3, 0.153E+3, 0.105E+3, 0.99680000E+0, + 0.97060000E+0, 0.12439580E+3, 0.153E+3, 0.106E+3, 0.99680000E+0, 0.98680000E+0, 0.87986900E+2, + 0.153E+3, 0.107E+3, 0.99680000E+0, 0.99440000E+0, 0.64976400E+2, 0.153E+3, 0.108E+3, + 0.99680000E+0, 0.99250000E+0, 0.45461800E+2, 0.153E+3, 0.109E+3, 0.99680000E+0, 0.99820000E+0, + 0.23487760E+3, 0.153E+3, 0.111E+3, 0.99680000E+0, 0.96840000E+0, 0.36232580E+3, 0.153E+3, + 0.112E+3, 0.99680000E+0, 0.96280000E+0, 0.37186150E+3, 0.153E+3, 0.113E+3, 0.99680000E+0, + 0.96480000E+0, 0.30487150E+3, 0.153E+3, 0.114E+3, 0.99680000E+0, 0.95070000E+0, 0.25346770E+3, + 0.153E+3, 0.115E+3, 0.99680000E+0, 0.99470000E+0, 0.21658660E+3, 0.153E+3, 0.116E+3, + 0.99680000E+0, 0.99480000E+0, 0.17895810E+3, 0.153E+3, 0.117E+3, 0.99680000E+0, 0.99720000E+0, + 0.32822070E+3, 0.153E+3, 0.119E+3, 0.99680000E+0, 0.97670000E+0, 0.60618590E+3, 0.153E+3, + 0.120E+3, 0.99680000E+0, 0.98310000E+0, 0.33318010E+3, 0.153E+3, 0.121E+3, 0.99680000E+0, + 0.18627000E+1, 0.32194330E+3, 0.153E+3, 0.122E+3, 0.99680000E+0, 0.18299000E+1, 0.31543490E+3, + 0.153E+3, 0.123E+3, 0.99680000E+0, 0.19138000E+1, 0.31193950E+3, 0.153E+3, 0.124E+3, + 0.99680000E+0, 0.18269000E+1, 0.28957840E+3, 0.153E+3, 0.125E+3, 0.99680000E+0, 0.16406000E+1, + 0.26879340E+3, 0.153E+3, 0.126E+3, 0.99680000E+0, 0.16483000E+1, 0.25647210E+3, 0.153E+3, + 0.127E+3, 0.99680000E+0, 0.17149000E+1, 0.25055360E+3, 0.153E+3, 0.128E+3, 0.99680000E+0, + 0.17937000E+1, 0.24584350E+3, 0.153E+3, 0.129E+3, 0.99680000E+0, 0.95760000E+0, 0.23356320E+3, + 0.153E+3, 0.130E+3, 0.99680000E+0, 0.19419000E+1, 0.37176550E+3, 0.153E+3, 0.131E+3, + 0.99680000E+0, 0.96010000E+0, 0.33159870E+3, 0.153E+3, 0.132E+3, 0.99680000E+0, 0.94340000E+0, + 0.30060430E+3, 0.153E+3, 0.133E+3, 0.99680000E+0, 0.98890000E+0, 0.27668620E+3, 0.153E+3, + 0.134E+3, 0.99680000E+0, 0.99010000E+0, 0.24586470E+3, 0.153E+3, 0.135E+3, 0.99680000E+0, + 0.99740000E+0, 0.39318090E+3, 0.153E+3, 0.137E+3, 0.99680000E+0, 0.97380000E+0, 0.73690210E+3, + 0.153E+3, 0.138E+3, 0.99680000E+0, 0.98010000E+0, 0.57738050E+3, 0.153E+3, 0.139E+3, + 0.99680000E+0, 0.19153000E+1, 0.44044740E+3, 0.153E+3, 0.140E+3, 0.99680000E+0, 0.19355000E+1, + 0.44464020E+3, 0.153E+3, 0.141E+3, 0.99680000E+0, 0.19545000E+1, 0.41612070E+3, 0.153E+3, + 0.142E+3, 0.99680000E+0, 0.19420000E+1, 0.46132230E+3, 0.153E+3, 0.143E+3, 0.99680000E+0, + 0.16682000E+1, 0.36592820E+3, 0.153E+3, 0.144E+3, 0.99680000E+0, 0.18584000E+1, 0.34272790E+3, + 0.153E+3, 0.145E+3, 0.99680000E+0, 0.19003000E+1, 0.31886290E+3, 0.153E+3, 0.146E+3, + 0.99680000E+0, 0.18630000E+1, 0.30804750E+3, 0.153E+3, 0.147E+3, 0.99680000E+0, 0.96790000E+0, + 0.30665490E+3, 0.153E+3, 0.148E+3, 0.99680000E+0, 0.19539000E+1, 0.47264410E+3, 0.153E+3, + 0.149E+3, 0.99680000E+0, 0.96330000E+0, 0.43305890E+3, 0.153E+3, 0.150E+3, 0.99680000E+0, + 0.95140000E+0, 0.40924850E+3, 0.153E+3, 0.151E+3, 0.99680000E+0, 0.97490000E+0, 0.38959960E+3, + 0.153E+3, 0.152E+3, 0.99680000E+0, 0.98110000E+0, 0.35849950E+3, 0.153E+3, 0.153E+3, + 0.99680000E+0, 0.99680000E+0, 0.42305800E+2, 0.155E+3, 0.100E+1, 0.99090000E+0, 0.91180000E+0, + 0.27469500E+2, 0.155E+3, 0.200E+1, 0.99090000E+0, 0.00000000E+0, 0.73291200E+3, 0.155E+3, + 0.300E+1, 0.99090000E+0, 0.00000000E+0, 0.39940200E+3, 0.155E+3, 0.400E+1, 0.99090000E+0, + 0.00000000E+0, 0.26223870E+3, 0.155E+3, 0.500E+1, 0.99090000E+0, 0.00000000E+0, 0.17427180E+3, + 0.155E+3, 0.600E+1, 0.99090000E+0, 0.00000000E+0, 0.12049820E+3, 0.155E+3, 0.700E+1, + 0.99090000E+0, 0.00000000E+0, 0.90530300E+2, 0.155E+3, 0.800E+1, 0.99090000E+0, 0.00000000E+0, + 0.68123900E+2, 0.155E+3, 0.900E+1, 0.99090000E+0, 0.00000000E+0, 0.52104100E+2, 0.155E+3, + 0.100E+2, 0.99090000E+0, 0.00000000E+0, 0.87326650E+3, 0.155E+3, 0.110E+2, 0.99090000E+0, + 0.00000000E+0, 0.64218460E+3, 0.155E+3, 0.120E+2, 0.99090000E+0, 0.00000000E+0, 0.58368500E+3, + 0.155E+3, 0.130E+2, 0.99090000E+0, 0.00000000E+0, 0.45161710E+3, 0.155E+3, 0.140E+2, + 0.99090000E+0, 0.00000000E+0, 0.34740300E+3, 0.155E+3, 0.150E+2, 0.99090000E+0, 0.00000000E+0, + 0.28604180E+3, 0.155E+3, 0.160E+2, 0.99090000E+0, 0.00000000E+0, 0.23194830E+3, 0.155E+3, + 0.170E+2, 0.99090000E+0, 0.00000000E+0, 0.18859500E+3, 0.155E+3, 0.180E+2, 0.99090000E+0, + 0.00000000E+0, 0.14495860E+4, 0.155E+3, 0.190E+2, 0.99090000E+0, 0.00000000E+0, 0.11498295E+4, + 0.155E+3, 0.200E+2, 0.99090000E+0, 0.00000000E+0, 0.94227450E+3, 0.155E+3, 0.210E+2, + 0.99090000E+0, 0.00000000E+0, 0.90422250E+3, 0.155E+3, 0.220E+2, 0.99090000E+0, 0.00000000E+0, + 0.82477800E+3, 0.155E+3, 0.230E+2, 0.99090000E+0, 0.00000000E+0, 0.65006270E+3, 0.155E+3, + 0.240E+2, 0.99090000E+0, 0.00000000E+0, 0.70614120E+3, 0.155E+3, 0.250E+2, 0.99090000E+0, + 0.00000000E+0, 0.55409250E+3, 0.155E+3, 0.260E+2, 0.99090000E+0, 0.00000000E+0, 0.58184580E+3, + 0.155E+3, 0.270E+2, 0.99090000E+0, 0.00000000E+0, 0.60158080E+3, 0.155E+3, 0.280E+2, + 0.99090000E+0, 0.00000000E+0, 0.46170190E+3, 0.155E+3, 0.290E+2, 0.99090000E+0, 0.00000000E+0, + 0.46787310E+3, 0.155E+3, 0.300E+2, 0.99090000E+0, 0.00000000E+0, 0.55650160E+3, 0.155E+3, + 0.310E+2, 0.99090000E+0, 0.00000000E+0, 0.48371170E+3, 0.155E+3, 0.320E+2, 0.99090000E+0, + 0.00000000E+0, 0.40779580E+3, 0.155E+3, 0.330E+2, 0.99090000E+0, 0.00000000E+0, 0.36352860E+3, + 0.155E+3, 0.340E+2, 0.99090000E+0, 0.00000000E+0, 0.31607000E+3, 0.155E+3, 0.350E+2, + 0.99090000E+0, 0.00000000E+0, 0.27329990E+3, 0.155E+3, 0.360E+2, 0.99090000E+0, 0.00000000E+0, + 0.16207604E+4, 0.155E+3, 0.370E+2, 0.99090000E+0, 0.00000000E+0, 0.13728515E+4, 0.155E+3, + 0.380E+2, 0.99090000E+0, 0.00000000E+0, 0.11863885E+4, 0.155E+3, 0.390E+2, 0.99090000E+0, + 0.00000000E+0, 0.10577660E+4, 0.155E+3, 0.400E+2, 0.99090000E+0, 0.00000000E+0, 0.95979080E+3, + 0.155E+3, 0.410E+2, 0.99090000E+0, 0.00000000E+0, 0.73514980E+3, 0.155E+3, 0.420E+2, + 0.99090000E+0, 0.00000000E+0, 0.82258290E+3, 0.155E+3, 0.430E+2, 0.99090000E+0, 0.00000000E+0, + 0.62119680E+3, 0.155E+3, 0.440E+2, 0.99090000E+0, 0.00000000E+0, 0.67827670E+3, 0.155E+3, + 0.450E+2, 0.99090000E+0, 0.00000000E+0, 0.62700570E+3, 0.155E+3, 0.460E+2, 0.99090000E+0, + 0.00000000E+0, 0.52450750E+3, 0.155E+3, 0.470E+2, 0.99090000E+0, 0.00000000E+0, 0.55025650E+3, + 0.155E+3, 0.480E+2, 0.99090000E+0, 0.00000000E+0, 0.69737450E+3, 0.155E+3, 0.490E+2, + 0.99090000E+0, 0.00000000E+0, 0.63676120E+3, 0.155E+3, 0.500E+2, 0.99090000E+0, 0.00000000E+0, + 0.56125330E+3, 0.155E+3, 0.510E+2, 0.99090000E+0, 0.00000000E+0, 0.51758070E+3, 0.155E+3, + 0.520E+2, 0.99090000E+0, 0.00000000E+0, 0.46507030E+3, 0.155E+3, 0.530E+2, 0.99090000E+0, + 0.00000000E+0, 0.41576900E+3, 0.155E+3, 0.540E+2, 0.99090000E+0, 0.00000000E+0, 0.19759738E+4, + 0.155E+3, 0.550E+2, 0.99090000E+0, 0.00000000E+0, 0.17600602E+4, 0.155E+3, 0.560E+2, + 0.99090000E+0, 0.00000000E+0, 0.15249399E+4, 0.155E+3, 0.570E+2, 0.99090000E+0, 0.00000000E+0, + 0.66483460E+3, 0.155E+3, 0.580E+2, 0.99090000E+0, 0.27991000E+1, 0.15520845E+4, 0.155E+3, + 0.590E+2, 0.99090000E+0, 0.00000000E+0, 0.14864897E+4, 0.155E+3, 0.600E+2, 0.99090000E+0, + 0.00000000E+0, 0.14481464E+4, 0.155E+3, 0.610E+2, 0.99090000E+0, 0.00000000E+0, 0.14129908E+4, + 0.155E+3, 0.620E+2, 0.99090000E+0, 0.00000000E+0, 0.13817863E+4, 0.155E+3, 0.630E+2, + 0.99090000E+0, 0.00000000E+0, 0.10715717E+4, 0.155E+3, 0.640E+2, 0.99090000E+0, 0.00000000E+0, + 0.12355701E+4, 0.155E+3, 0.650E+2, 0.99090000E+0, 0.00000000E+0, 0.11888012E+4, 0.155E+3, + 0.660E+2, 0.99090000E+0, 0.00000000E+0, 0.12416267E+4, 0.155E+3, 0.670E+2, 0.99090000E+0, + 0.00000000E+0, 0.12147181E+4, 0.155E+3, 0.680E+2, 0.99090000E+0, 0.00000000E+0, 0.11902611E+4, + 0.155E+3, 0.690E+2, 0.99090000E+0, 0.00000000E+0, 0.11769746E+4, 0.155E+3, 0.700E+2, + 0.99090000E+0, 0.00000000E+0, 0.98243040E+3, 0.155E+3, 0.710E+2, 0.99090000E+0, 0.00000000E+0, + 0.95327210E+3, 0.155E+3, 0.720E+2, 0.99090000E+0, 0.00000000E+0, 0.86345810E+3, 0.155E+3, + 0.730E+2, 0.99090000E+0, 0.00000000E+0, 0.72569910E+3, 0.155E+3, 0.740E+2, 0.99090000E+0, + 0.00000000E+0, 0.73587000E+3, 0.155E+3, 0.750E+2, 0.99090000E+0, 0.00000000E+0, 0.66279760E+3, + 0.155E+3, 0.760E+2, 0.99090000E+0, 0.00000000E+0, 0.60405240E+3, 0.155E+3, 0.770E+2, + 0.99090000E+0, 0.00000000E+0, 0.49959380E+3, 0.155E+3, 0.780E+2, 0.99090000E+0, 0.00000000E+0, + 0.46588050E+3, 0.155E+3, 0.790E+2, 0.99090000E+0, 0.00000000E+0, 0.47788590E+3, 0.155E+3, + 0.800E+2, 0.99090000E+0, 0.00000000E+0, 0.71477590E+3, 0.155E+3, 0.810E+2, 0.99090000E+0, + 0.00000000E+0, 0.69152340E+3, 0.155E+3, 0.820E+2, 0.99090000E+0, 0.00000000E+0, 0.62890510E+3, + 0.155E+3, 0.830E+2, 0.99090000E+0, 0.00000000E+0, 0.59653870E+3, 0.155E+3, 0.840E+2, + 0.99090000E+0, 0.00000000E+0, 0.54712200E+3, 0.155E+3, 0.850E+2, 0.99090000E+0, 0.00000000E+0, + 0.49878710E+3, 0.155E+3, 0.860E+2, 0.99090000E+0, 0.00000000E+0, 0.18443405E+4, 0.155E+3, + 0.870E+2, 0.99090000E+0, 0.00000000E+0, 0.17284117E+4, 0.155E+3, 0.880E+2, 0.99090000E+0, + 0.00000000E+0, 0.15078114E+4, 0.155E+3, 0.890E+2, 0.99090000E+0, 0.00000000E+0, 0.13366572E+4, + 0.155E+3, 0.900E+2, 0.99090000E+0, 0.00000000E+0, 0.13367673E+4, 0.155E+3, 0.910E+2, + 0.99090000E+0, 0.00000000E+0, 0.12938174E+4, 0.155E+3, 0.920E+2, 0.99090000E+0, 0.00000000E+0, + 0.13431115E+4, 0.155E+3, 0.930E+2, 0.99090000E+0, 0.00000000E+0, 0.12984675E+4, 0.155E+3, + 0.940E+2, 0.99090000E+0, 0.00000000E+0, 0.68953700E+2, 0.155E+3, 0.101E+3, 0.99090000E+0, + 0.00000000E+0, 0.23141650E+3, 0.155E+3, 0.103E+3, 0.99090000E+0, 0.98650000E+0, 0.29414590E+3, + 0.155E+3, 0.104E+3, 0.99090000E+0, 0.98080000E+0, 0.21963870E+3, 0.155E+3, 0.105E+3, + 0.99090000E+0, 0.97060000E+0, 0.16367150E+3, 0.155E+3, 0.106E+3, 0.99090000E+0, 0.98680000E+0, + 0.11242780E+3, 0.155E+3, 0.107E+3, 0.99090000E+0, 0.99440000E+0, 0.81084500E+2, 0.155E+3, + 0.108E+3, 0.99090000E+0, 0.99250000E+0, 0.55078600E+2, 0.155E+3, 0.109E+3, 0.99090000E+0, + 0.99820000E+0, 0.34006240E+3, 0.155E+3, 0.111E+3, 0.99090000E+0, 0.96840000E+0, 0.52756300E+3, + 0.155E+3, 0.112E+3, 0.99090000E+0, 0.96280000E+0, 0.52732820E+3, 0.155E+3, 0.113E+3, + 0.99090000E+0, 0.96480000E+0, 0.41648610E+3, 0.155E+3, 0.114E+3, 0.99090000E+0, 0.95070000E+0, + 0.33711350E+3, 0.155E+3, 0.115E+3, 0.99090000E+0, 0.99470000E+0, 0.28296690E+3, 0.155E+3, + 0.116E+3, 0.99090000E+0, 0.99480000E+0, 0.22958370E+3, 0.155E+3, 0.117E+3, 0.99090000E+0, + 0.99720000E+0, 0.46551820E+3, 0.155E+3, 0.119E+3, 0.99090000E+0, 0.97670000E+0, 0.92179340E+3, + 0.155E+3, 0.120E+3, 0.99090000E+0, 0.98310000E+0, 0.45790120E+3, 0.155E+3, 0.121E+3, + 0.99090000E+0, 0.18627000E+1, 0.44205470E+3, 0.155E+3, 0.122E+3, 0.99090000E+0, 0.18299000E+1, + 0.43331390E+3, 0.155E+3, 0.123E+3, 0.99090000E+0, 0.19138000E+1, 0.43010400E+3, 0.155E+3, + 0.124E+3, 0.99090000E+0, 0.18269000E+1, 0.39208310E+3, 0.155E+3, 0.125E+3, 0.99090000E+0, + 0.16406000E+1, 0.36204550E+3, 0.155E+3, 0.126E+3, 0.99090000E+0, 0.16483000E+1, 0.34544700E+3, + 0.155E+3, 0.127E+3, 0.99090000E+0, 0.17149000E+1, 0.33794540E+3, 0.155E+3, 0.128E+3, + 0.99090000E+0, 0.17937000E+1, 0.33608210E+3, 0.155E+3, 0.129E+3, 0.99090000E+0, 0.95760000E+0, + 0.31158000E+3, 0.155E+3, 0.130E+3, 0.99090000E+0, 0.19419000E+1, 0.52074900E+3, 0.155E+3, + 0.131E+3, 0.99090000E+0, 0.96010000E+0, 0.45117170E+3, 0.155E+3, 0.132E+3, 0.99090000E+0, + 0.94340000E+0, 0.40064390E+3, 0.155E+3, 0.133E+3, 0.99090000E+0, 0.98890000E+0, 0.36372020E+3, + 0.155E+3, 0.134E+3, 0.99090000E+0, 0.99010000E+0, 0.31838270E+3, 0.155E+3, 0.135E+3, + 0.99090000E+0, 0.99740000E+0, 0.55397800E+3, 0.155E+3, 0.137E+3, 0.99090000E+0, 0.97380000E+0, + 0.11249345E+4, 0.155E+3, 0.138E+3, 0.99090000E+0, 0.98010000E+0, 0.83761350E+3, 0.155E+3, + 0.139E+3, 0.99090000E+0, 0.19153000E+1, 0.60719510E+3, 0.155E+3, 0.140E+3, 0.99090000E+0, + 0.19355000E+1, 0.61320100E+3, 0.155E+3, 0.141E+3, 0.99090000E+0, 0.19545000E+1, 0.57026210E+3, + 0.155E+3, 0.142E+3, 0.99090000E+0, 0.19420000E+1, 0.64766860E+3, 0.155E+3, 0.143E+3, + 0.99090000E+0, 0.16682000E+1, 0.49283010E+3, 0.155E+3, 0.144E+3, 0.99090000E+0, 0.18584000E+1, + 0.46081940E+3, 0.155E+3, 0.145E+3, 0.99090000E+0, 0.19003000E+1, 0.42732470E+3, 0.155E+3, + 0.146E+3, 0.99090000E+0, 0.18630000E+1, 0.41377960E+3, 0.155E+3, 0.147E+3, 0.99090000E+0, + 0.96790000E+0, 0.40654590E+3, 0.155E+3, 0.148E+3, 0.99090000E+0, 0.19539000E+1, 0.66184230E+3, + 0.155E+3, 0.149E+3, 0.99090000E+0, 0.96330000E+0, 0.59127640E+3, 0.155E+3, 0.150E+3, + 0.99090000E+0, 0.95140000E+0, 0.54930440E+3, 0.155E+3, 0.151E+3, 0.99090000E+0, 0.97490000E+0, + 0.51701090E+3, 0.155E+3, 0.152E+3, 0.99090000E+0, 0.98110000E+0, 0.46948180E+3, 0.155E+3, + 0.153E+3, 0.99090000E+0, 0.99680000E+0, 0.64909240E+3, 0.155E+3, 0.155E+3, 0.99090000E+0, + 0.99090000E+0, 0.83014100E+2, 0.156E+3, 0.100E+1, 0.97970000E+0, 0.91180000E+0, 0.49923200E+2, + 0.156E+3, 0.200E+1, 0.97970000E+0, 0.00000000E+0, 0.21804015E+4, 0.156E+3, 0.300E+1, + 0.97970000E+0, 0.00000000E+0, 0.96110490E+3, 0.156E+3, 0.400E+1, 0.97970000E+0, 0.00000000E+0, + 0.57230020E+3, 0.156E+3, 0.500E+1, 0.97970000E+0, 0.00000000E+0, 0.35484660E+3, 0.156E+3, + 0.600E+1, 0.97970000E+0, 0.00000000E+0, 0.23350060E+3, 0.156E+3, 0.700E+1, 0.97970000E+0, + 0.00000000E+0, 0.16960300E+3, 0.156E+3, 0.800E+1, 0.97970000E+0, 0.00000000E+0, 0.12408020E+3, + 0.156E+3, 0.900E+1, 0.97970000E+0, 0.00000000E+0, 0.92849400E+2, 0.156E+3, 0.100E+2, + 0.97970000E+0, 0.00000000E+0, 0.25659398E+4, 0.156E+3, 0.110E+2, 0.97970000E+0, 0.00000000E+0, + 0.15996001E+4, 0.156E+3, 0.120E+2, 0.97970000E+0, 0.00000000E+0, 0.13814389E+4, 0.156E+3, + 0.130E+2, 0.97970000E+0, 0.00000000E+0, 0.99489260E+3, 0.156E+3, 0.140E+2, 0.97970000E+0, + 0.00000000E+0, 0.72325040E+3, 0.156E+3, 0.150E+2, 0.97970000E+0, 0.00000000E+0, 0.57533170E+3, + 0.156E+3, 0.160E+2, 0.97970000E+0, 0.00000000E+0, 0.45158250E+3, 0.156E+3, 0.170E+2, + 0.97970000E+0, 0.00000000E+0, 0.35719350E+3, 0.156E+3, 0.180E+2, 0.97970000E+0, 0.00000000E+0, + 0.44958369E+4, 0.156E+3, 0.190E+2, 0.97970000E+0, 0.00000000E+0, 0.30704624E+4, 0.156E+3, + 0.200E+2, 0.97970000E+0, 0.00000000E+0, 0.24434277E+4, 0.156E+3, 0.210E+2, 0.97970000E+0, + 0.00000000E+0, 0.22946062E+4, 0.156E+3, 0.220E+2, 0.97970000E+0, 0.00000000E+0, 0.20640309E+4, + 0.156E+3, 0.230E+2, 0.97970000E+0, 0.00000000E+0, 0.16327022E+4, 0.156E+3, 0.240E+2, + 0.97970000E+0, 0.00000000E+0, 0.17320375E+4, 0.156E+3, 0.250E+2, 0.97970000E+0, 0.00000000E+0, + 0.13596156E+4, 0.156E+3, 0.260E+2, 0.97970000E+0, 0.00000000E+0, 0.13759674E+4, 0.156E+3, + 0.270E+2, 0.97970000E+0, 0.00000000E+0, 0.14425133E+4, 0.156E+3, 0.280E+2, 0.97970000E+0, + 0.00000000E+0, 0.11138541E+4, 0.156E+3, 0.290E+2, 0.97970000E+0, 0.00000000E+0, 0.10720643E+4, + 0.156E+3, 0.300E+2, 0.97970000E+0, 0.00000000E+0, 0.12954563E+4, 0.156E+3, 0.310E+2, + 0.97970000E+0, 0.00000000E+0, 0.10627315E+4, 0.156E+3, 0.320E+2, 0.97970000E+0, 0.00000000E+0, + 0.85391570E+3, 0.156E+3, 0.330E+2, 0.97970000E+0, 0.00000000E+0, 0.74014960E+3, 0.156E+3, + 0.340E+2, 0.97970000E+0, 0.00000000E+0, 0.62555040E+3, 0.156E+3, 0.350E+2, 0.97970000E+0, + 0.00000000E+0, 0.52735210E+3, 0.156E+3, 0.360E+2, 0.97970000E+0, 0.00000000E+0, 0.49979230E+4, + 0.156E+3, 0.370E+2, 0.97970000E+0, 0.00000000E+0, 0.36976569E+4, 0.156E+3, 0.380E+2, + 0.97970000E+0, 0.00000000E+0, 0.30451620E+4, 0.156E+3, 0.390E+2, 0.97970000E+0, 0.00000000E+0, + 0.26376782E+4, 0.156E+3, 0.400E+2, 0.97970000E+0, 0.00000000E+0, 0.23521278E+4, 0.156E+3, + 0.410E+2, 0.97970000E+0, 0.00000000E+0, 0.17503829E+4, 0.156E+3, 0.420E+2, 0.97970000E+0, + 0.00000000E+0, 0.19809508E+4, 0.156E+3, 0.430E+2, 0.97970000E+0, 0.00000000E+0, 0.14476221E+4, + 0.156E+3, 0.440E+2, 0.97970000E+0, 0.00000000E+0, 0.15723023E+4, 0.156E+3, 0.450E+2, + 0.97970000E+0, 0.00000000E+0, 0.14360400E+4, 0.156E+3, 0.460E+2, 0.97970000E+0, 0.00000000E+0, + 0.12194904E+4, 0.156E+3, 0.470E+2, 0.97970000E+0, 0.00000000E+0, 0.12412980E+4, 0.156E+3, + 0.480E+2, 0.97970000E+0, 0.00000000E+0, 0.16356158E+4, 0.156E+3, 0.490E+2, 0.97970000E+0, + 0.00000000E+0, 0.14200022E+4, 0.156E+3, 0.500E+2, 0.97970000E+0, 0.00000000E+0, 0.11973790E+4, + 0.156E+3, 0.510E+2, 0.97970000E+0, 0.00000000E+0, 0.10767503E+4, 0.156E+3, 0.520E+2, + 0.97970000E+0, 0.00000000E+0, 0.94225240E+3, 0.156E+3, 0.530E+2, 0.97970000E+0, 0.00000000E+0, + 0.82205680E+3, 0.156E+3, 0.540E+2, 0.97970000E+0, 0.00000000E+0, 0.61419784E+4, 0.156E+3, + 0.550E+2, 0.97970000E+0, 0.00000000E+0, 0.48451776E+4, 0.156E+3, 0.560E+2, 0.97970000E+0, + 0.00000000E+0, 0.39942273E+4, 0.156E+3, 0.570E+2, 0.97970000E+0, 0.00000000E+0, 0.14330469E+4, + 0.156E+3, 0.580E+2, 0.97970000E+0, 0.27991000E+1, 0.42139225E+4, 0.156E+3, 0.590E+2, + 0.97970000E+0, 0.00000000E+0, 0.39873600E+4, 0.156E+3, 0.600E+2, 0.97970000E+0, 0.00000000E+0, + 0.38737284E+4, 0.156E+3, 0.610E+2, 0.97970000E+0, 0.00000000E+0, 0.37706523E+4, 0.156E+3, + 0.620E+2, 0.97970000E+0, 0.00000000E+0, 0.36789146E+4, 0.156E+3, 0.630E+2, 0.97970000E+0, + 0.00000000E+0, 0.27207653E+4, 0.156E+3, 0.640E+2, 0.97970000E+0, 0.00000000E+0, 0.34419852E+4, + 0.156E+3, 0.650E+2, 0.97970000E+0, 0.00000000E+0, 0.32989422E+4, 0.156E+3, 0.660E+2, + 0.97970000E+0, 0.00000000E+0, 0.32598698E+4, 0.156E+3, 0.670E+2, 0.97970000E+0, 0.00000000E+0, + 0.31836011E+4, 0.156E+3, 0.680E+2, 0.97970000E+0, 0.00000000E+0, 0.31125536E+4, 0.156E+3, + 0.690E+2, 0.97970000E+0, 0.00000000E+0, 0.30835002E+4, 0.156E+3, 0.700E+2, 0.97970000E+0, + 0.00000000E+0, 0.25019262E+4, 0.156E+3, 0.710E+2, 0.97970000E+0, 0.00000000E+0, 0.22987008E+4, + 0.156E+3, 0.720E+2, 0.97970000E+0, 0.00000000E+0, 0.20237991E+4, 0.156E+3, 0.730E+2, + 0.97970000E+0, 0.00000000E+0, 0.16732640E+4, 0.156E+3, 0.740E+2, 0.97970000E+0, 0.00000000E+0, + 0.16751136E+4, 0.156E+3, 0.750E+2, 0.97970000E+0, 0.00000000E+0, 0.14722933E+4, 0.156E+3, + 0.760E+2, 0.97970000E+0, 0.00000000E+0, 0.13162117E+4, 0.156E+3, 0.770E+2, 0.97970000E+0, + 0.00000000E+0, 0.10706911E+4, 0.156E+3, 0.780E+2, 0.97970000E+0, 0.00000000E+0, 0.99139190E+3, + 0.156E+3, 0.790E+2, 0.97970000E+0, 0.00000000E+0, 0.10048014E+4, 0.156E+3, 0.800E+2, + 0.97970000E+0, 0.00000000E+0, 0.16688986E+4, 0.156E+3, 0.810E+2, 0.97970000E+0, 0.00000000E+0, + 0.15461030E+4, 0.156E+3, 0.820E+2, 0.97970000E+0, 0.00000000E+0, 0.13487488E+4, 0.156E+3, + 0.830E+2, 0.97970000E+0, 0.00000000E+0, 0.12508513E+4, 0.156E+3, 0.840E+2, 0.97970000E+0, + 0.00000000E+0, 0.11176702E+4, 0.156E+3, 0.850E+2, 0.97970000E+0, 0.00000000E+0, 0.99586790E+3, + 0.156E+3, 0.860E+2, 0.97970000E+0, 0.00000000E+0, 0.54979393E+4, 0.156E+3, 0.870E+2, + 0.97970000E+0, 0.00000000E+0, 0.46433162E+4, 0.156E+3, 0.880E+2, 0.97970000E+0, 0.00000000E+0, + 0.38656041E+4, 0.156E+3, 0.890E+2, 0.97970000E+0, 0.00000000E+0, 0.32597257E+4, 0.156E+3, + 0.900E+2, 0.97970000E+0, 0.00000000E+0, 0.33538826E+4, 0.156E+3, 0.910E+2, 0.97970000E+0, + 0.00000000E+0, 0.32402913E+4, 0.156E+3, 0.920E+2, 0.97970000E+0, 0.00000000E+0, 0.34630576E+4, + 0.156E+3, 0.930E+2, 0.97970000E+0, 0.00000000E+0, 0.33272478E+4, 0.156E+3, 0.940E+2, + 0.97970000E+0, 0.00000000E+0, 0.14256800E+3, 0.156E+3, 0.101E+3, 0.97970000E+0, 0.00000000E+0, + 0.55107920E+3, 0.156E+3, 0.103E+3, 0.97970000E+0, 0.98650000E+0, 0.69284150E+3, 0.156E+3, + 0.104E+3, 0.97970000E+0, 0.98080000E+0, 0.47105030E+3, 0.156E+3, 0.105E+3, 0.97970000E+0, + 0.97060000E+0, 0.33492070E+3, 0.156E+3, 0.106E+3, 0.97970000E+0, 0.98680000E+0, 0.21815960E+3, + 0.156E+3, 0.107E+3, 0.97970000E+0, 0.99440000E+0, 0.15070560E+3, 0.156E+3, 0.108E+3, + 0.97970000E+0, 0.99250000E+0, 0.97192600E+2, 0.156E+3, 0.109E+3, 0.97970000E+0, 0.99820000E+0, + 0.82695650E+3, 0.156E+3, 0.111E+3, 0.97970000E+0, 0.96840000E+0, 0.12989425E+4, 0.156E+3, + 0.112E+3, 0.97970000E+0, 0.96280000E+0, 0.12335817E+4, 0.156E+3, 0.113E+3, 0.97970000E+0, + 0.96480000E+0, 0.90965670E+3, 0.156E+3, 0.114E+3, 0.97970000E+0, 0.95070000E+0, 0.70099830E+3, + 0.156E+3, 0.115E+3, 0.97970000E+0, 0.99470000E+0, 0.56985090E+3, 0.156E+3, 0.116E+3, + 0.97970000E+0, 0.99480000E+0, 0.44736800E+3, 0.156E+3, 0.117E+3, 0.97970000E+0, 0.99720000E+0, + 0.11041068E+4, 0.156E+3, 0.119E+3, 0.97970000E+0, 0.97670000E+0, 0.25056537E+4, 0.156E+3, + 0.120E+3, 0.97970000E+0, 0.98310000E+0, 0.10130298E+4, 0.156E+3, 0.121E+3, 0.97970000E+0, + 0.18627000E+1, 0.98236380E+3, 0.156E+3, 0.122E+3, 0.97970000E+0, 0.18299000E+1, 0.96327250E+3, + 0.156E+3, 0.123E+3, 0.97970000E+0, 0.19138000E+1, 0.96365340E+3, 0.156E+3, 0.124E+3, + 0.97970000E+0, 0.18269000E+1, 0.84521190E+3, 0.156E+3, 0.125E+3, 0.97970000E+0, 0.16406000E+1, + 0.77366980E+3, 0.156E+3, 0.126E+3, 0.97970000E+0, 0.16483000E+1, 0.73950900E+3, 0.156E+3, + 0.127E+3, 0.97970000E+0, 0.17149000E+1, 0.72552030E+3, 0.156E+3, 0.128E+3, 0.97970000E+0, + 0.17937000E+1, 0.74098720E+3, 0.156E+3, 0.129E+3, 0.97970000E+0, 0.95760000E+0, 0.65373360E+3, + 0.156E+3, 0.130E+3, 0.97970000E+0, 0.19419000E+1, 0.11948773E+4, 0.156E+3, 0.131E+3, + 0.97970000E+0, 0.96010000E+0, 0.97957420E+3, 0.156E+3, 0.132E+3, 0.97970000E+0, 0.94340000E+0, + 0.83693640E+3, 0.156E+3, 0.133E+3, 0.97970000E+0, 0.98890000E+0, 0.74102200E+3, 0.156E+3, + 0.134E+3, 0.97970000E+0, 0.99010000E+0, 0.63113970E+3, 0.156E+3, 0.135E+3, 0.97970000E+0, + 0.99740000E+0, 0.13013999E+4, 0.156E+3, 0.137E+3, 0.97970000E+0, 0.97380000E+0, 0.30957594E+4, + 0.156E+3, 0.138E+3, 0.97970000E+0, 0.98010000E+0, 0.21010372E+4, 0.156E+3, 0.139E+3, + 0.97970000E+0, 0.19153000E+1, 0.13604000E+4, 0.156E+3, 0.140E+3, 0.97970000E+0, 0.19355000E+1, + 0.13693825E+4, 0.156E+3, 0.141E+3, 0.97970000E+0, 0.19545000E+1, 0.12660803E+4, 0.156E+3, + 0.142E+3, 0.97970000E+0, 0.19420000E+1, 0.15162134E+4, 0.156E+3, 0.143E+3, 0.97970000E+0, + 0.16682000E+1, 0.10564422E+4, 0.156E+3, 0.144E+3, 0.97970000E+0, 0.18584000E+1, 0.98676430E+3, + 0.156E+3, 0.145E+3, 0.97970000E+0, 0.19003000E+1, 0.91052680E+3, 0.156E+3, 0.146E+3, + 0.97970000E+0, 0.18630000E+1, 0.88540390E+3, 0.156E+3, 0.147E+3, 0.97970000E+0, 0.96790000E+0, + 0.84515800E+3, 0.156E+3, 0.148E+3, 0.97970000E+0, 0.19539000E+1, 0.15259278E+4, 0.156E+3, + 0.149E+3, 0.97970000E+0, 0.96330000E+0, 0.12966408E+4, 0.156E+3, 0.150E+3, 0.97970000E+0, + 0.95140000E+0, 0.11653603E+4, 0.156E+3, 0.151E+3, 0.97970000E+0, 0.97490000E+0, 0.10738698E+4, + 0.156E+3, 0.152E+3, 0.97970000E+0, 0.98110000E+0, 0.95154100E+3, 0.156E+3, 0.153E+3, + 0.97970000E+0, 0.99680000E+0, 0.14690705E+4, 0.156E+3, 0.155E+3, 0.97970000E+0, 0.99090000E+0, + 0.41717842E+4, 0.156E+3, 0.156E+3, 0.97970000E+0, 0.97970000E+0, 0.64690600E+2, 0.157E+3, + 0.100E+1, 0.19373000E+1, 0.91180000E+0, 0.40332900E+2, 0.157E+3, 0.200E+1, 0.19373000E+1, + 0.00000000E+0, 0.13841283E+4, 0.157E+3, 0.300E+1, 0.19373000E+1, 0.00000000E+0, 0.67673740E+3, + 0.157E+3, 0.400E+1, 0.19373000E+1, 0.00000000E+0, 0.42308150E+3, 0.157E+3, 0.500E+1, + 0.19373000E+1, 0.00000000E+0, 0.27142480E+3, 0.157E+3, 0.600E+1, 0.19373000E+1, 0.00000000E+0, + 0.18293910E+3, 0.157E+3, 0.700E+1, 0.19373000E+1, 0.00000000E+0, 0.13503220E+3, 0.157E+3, + 0.800E+1, 0.19373000E+1, 0.00000000E+0, 0.10010900E+3, 0.157E+3, 0.900E+1, 0.19373000E+1, + 0.00000000E+0, 0.75679100E+2, 0.157E+3, 0.100E+2, 0.19373000E+1, 0.00000000E+0, 0.16377878E+4, + 0.157E+3, 0.110E+2, 0.19373000E+1, 0.00000000E+0, 0.11067221E+4, 0.157E+3, 0.120E+2, + 0.19373000E+1, 0.00000000E+0, 0.98043760E+3, 0.157E+3, 0.130E+2, 0.19373000E+1, 0.00000000E+0, + 0.73212110E+3, 0.157E+3, 0.140E+2, 0.19373000E+1, 0.00000000E+0, 0.54746530E+3, 0.157E+3, + 0.150E+2, 0.19373000E+1, 0.00000000E+0, 0.44287990E+3, 0.157E+3, 0.160E+2, 0.19373000E+1, + 0.00000000E+0, 0.35314670E+3, 0.157E+3, 0.170E+2, 0.19373000E+1, 0.00000000E+0, 0.28303510E+3, + 0.157E+3, 0.180E+2, 0.19373000E+1, 0.00000000E+0, 0.28009569E+4, 0.157E+3, 0.190E+2, + 0.19373000E+1, 0.00000000E+0, 0.20504253E+4, 0.157E+3, 0.200E+2, 0.19373000E+1, 0.00000000E+0, + 0.16557011E+4, 0.157E+3, 0.210E+2, 0.19373000E+1, 0.00000000E+0, 0.15712363E+4, 0.157E+3, + 0.220E+2, 0.19373000E+1, 0.00000000E+0, 0.14231173E+4, 0.157E+3, 0.230E+2, 0.19373000E+1, + 0.00000000E+0, 0.11226576E+4, 0.157E+3, 0.240E+2, 0.19373000E+1, 0.00000000E+0, 0.12061393E+4, + 0.157E+3, 0.250E+2, 0.19373000E+1, 0.00000000E+0, 0.94568080E+3, 0.157E+3, 0.260E+2, + 0.19373000E+1, 0.00000000E+0, 0.97598360E+3, 0.157E+3, 0.270E+2, 0.19373000E+1, 0.00000000E+0, + 0.10161745E+4, 0.157E+3, 0.280E+2, 0.19373000E+1, 0.00000000E+0, 0.78128810E+3, 0.157E+3, + 0.290E+2, 0.19373000E+1, 0.00000000E+0, 0.77266500E+3, 0.157E+3, 0.300E+2, 0.19373000E+1, + 0.00000000E+0, 0.92637230E+3, 0.157E+3, 0.310E+2, 0.19373000E+1, 0.00000000E+0, 0.78274010E+3, + 0.157E+3, 0.320E+2, 0.19373000E+1, 0.00000000E+0, 0.64435600E+3, 0.157E+3, 0.330E+2, + 0.19373000E+1, 0.00000000E+0, 0.56629200E+3, 0.157E+3, 0.340E+2, 0.19373000E+1, 0.00000000E+0, + 0.48529550E+3, 0.157E+3, 0.350E+2, 0.19373000E+1, 0.00000000E+0, 0.41416640E+3, 0.157E+3, + 0.360E+2, 0.19373000E+1, 0.00000000E+0, 0.31215559E+4, 0.157E+3, 0.370E+2, 0.19373000E+1, + 0.00000000E+0, 0.24580845E+4, 0.157E+3, 0.380E+2, 0.19373000E+1, 0.00000000E+0, 0.20727978E+4, + 0.157E+3, 0.390E+2, 0.19373000E+1, 0.00000000E+0, 0.18212145E+4, 0.157E+3, 0.400E+2, + 0.19373000E+1, 0.00000000E+0, 0.16379243E+4, 0.157E+3, 0.410E+2, 0.19373000E+1, 0.00000000E+0, + 0.12356226E+4, 0.157E+3, 0.420E+2, 0.19373000E+1, 0.00000000E+0, 0.13909989E+4, 0.157E+3, + 0.430E+2, 0.19373000E+1, 0.00000000E+0, 0.10325864E+4, 0.157E+3, 0.440E+2, 0.19373000E+1, + 0.00000000E+0, 0.11254492E+4, 0.157E+3, 0.450E+2, 0.19373000E+1, 0.00000000E+0, 0.10341628E+4, + 0.157E+3, 0.460E+2, 0.19373000E+1, 0.00000000E+0, 0.87041020E+3, 0.157E+3, 0.470E+2, + 0.19373000E+1, 0.00000000E+0, 0.90076730E+3, 0.157E+3, 0.480E+2, 0.19373000E+1, 0.00000000E+0, + 0.11640480E+4, 0.157E+3, 0.490E+2, 0.19373000E+1, 0.00000000E+0, 0.10373050E+4, 0.157E+3, + 0.500E+2, 0.19373000E+1, 0.00000000E+0, 0.89470260E+3, 0.157E+3, 0.510E+2, 0.19373000E+1, + 0.00000000E+0, 0.81481140E+3, 0.157E+3, 0.520E+2, 0.19373000E+1, 0.00000000E+0, 0.72249320E+3, + 0.157E+3, 0.530E+2, 0.19373000E+1, 0.00000000E+0, 0.63795900E+3, 0.157E+3, 0.540E+2, + 0.19373000E+1, 0.00000000E+0, 0.38250881E+4, 0.157E+3, 0.550E+2, 0.19373000E+1, 0.00000000E+0, + 0.31862921E+4, 0.157E+3, 0.560E+2, 0.19373000E+1, 0.00000000E+0, 0.26909591E+4, 0.157E+3, + 0.570E+2, 0.19373000E+1, 0.00000000E+0, 0.10645933E+4, 0.157E+3, 0.580E+2, 0.19373000E+1, + 0.27991000E+1, 0.27909891E+4, 0.157E+3, 0.590E+2, 0.19373000E+1, 0.00000000E+0, 0.26551171E+4, + 0.157E+3, 0.600E+2, 0.19373000E+1, 0.00000000E+0, 0.25829722E+4, 0.157E+3, 0.610E+2, + 0.19373000E+1, 0.00000000E+0, 0.25172239E+4, 0.157E+3, 0.620E+2, 0.19373000E+1, 0.00000000E+0, + 0.24587886E+4, 0.157E+3, 0.630E+2, 0.19373000E+1, 0.00000000E+0, 0.18607370E+4, 0.157E+3, + 0.640E+2, 0.19373000E+1, 0.00000000E+0, 0.22509654E+4, 0.157E+3, 0.650E+2, 0.19373000E+1, + 0.00000000E+0, 0.21634599E+4, 0.157E+3, 0.660E+2, 0.19373000E+1, 0.00000000E+0, 0.21938636E+4, + 0.157E+3, 0.670E+2, 0.19373000E+1, 0.00000000E+0, 0.21444704E+4, 0.157E+3, 0.680E+2, + 0.19373000E+1, 0.00000000E+0, 0.20989702E+4, 0.157E+3, 0.690E+2, 0.19373000E+1, 0.00000000E+0, + 0.20775774E+4, 0.157E+3, 0.700E+2, 0.19373000E+1, 0.00000000E+0, 0.17103545E+4, 0.157E+3, + 0.710E+2, 0.19373000E+1, 0.00000000E+0, 0.16140907E+4, 0.157E+3, 0.720E+2, 0.19373000E+1, + 0.00000000E+0, 0.14413394E+4, 0.157E+3, 0.730E+2, 0.19373000E+1, 0.00000000E+0, 0.12005662E+4, + 0.157E+3, 0.740E+2, 0.19373000E+1, 0.00000000E+0, 0.12100818E+4, 0.157E+3, 0.750E+2, + 0.19373000E+1, 0.00000000E+0, 0.10767583E+4, 0.157E+3, 0.760E+2, 0.19373000E+1, 0.00000000E+0, + 0.97197370E+3, 0.157E+3, 0.770E+2, 0.19373000E+1, 0.00000000E+0, 0.79670010E+3, 0.157E+3, + 0.780E+2, 0.19373000E+1, 0.00000000E+0, 0.74016750E+3, 0.157E+3, 0.790E+2, 0.19373000E+1, + 0.00000000E+0, 0.75524870E+3, 0.157E+3, 0.800E+2, 0.19373000E+1, 0.00000000E+0, 0.11891662E+4, + 0.157E+3, 0.810E+2, 0.19373000E+1, 0.00000000E+0, 0.11270513E+4, 0.157E+3, 0.820E+2, + 0.19373000E+1, 0.00000000E+0, 0.10045839E+4, 0.157E+3, 0.830E+2, 0.19373000E+1, 0.00000000E+0, + 0.94243520E+3, 0.157E+3, 0.840E+2, 0.19373000E+1, 0.00000000E+0, 0.85327010E+3, 0.157E+3, + 0.850E+2, 0.19373000E+1, 0.00000000E+0, 0.76899820E+3, 0.157E+3, 0.860E+2, 0.19373000E+1, + 0.00000000E+0, 0.34855386E+4, 0.157E+3, 0.870E+2, 0.19373000E+1, 0.00000000E+0, 0.30892071E+4, + 0.157E+3, 0.880E+2, 0.19373000E+1, 0.00000000E+0, 0.26322561E+4, 0.157E+3, 0.890E+2, + 0.19373000E+1, 0.00000000E+0, 0.22749680E+4, 0.157E+3, 0.900E+2, 0.19373000E+1, 0.00000000E+0, + 0.23071665E+4, 0.157E+3, 0.910E+2, 0.19373000E+1, 0.00000000E+0, 0.22309267E+4, 0.157E+3, + 0.920E+2, 0.19373000E+1, 0.00000000E+0, 0.23502253E+4, 0.157E+3, 0.930E+2, 0.19373000E+1, + 0.00000000E+0, 0.22650122E+4, 0.157E+3, 0.940E+2, 0.19373000E+1, 0.00000000E+0, 0.10830590E+3, + 0.157E+3, 0.101E+3, 0.19373000E+1, 0.00000000E+0, 0.38990700E+3, 0.157E+3, 0.103E+3, + 0.19373000E+1, 0.98650000E+0, 0.49258240E+3, 0.157E+3, 0.104E+3, 0.19373000E+1, 0.98080000E+0, + 0.35111660E+3, 0.157E+3, 0.105E+3, 0.19373000E+1, 0.97060000E+0, 0.25535340E+3, 0.157E+3, + 0.106E+3, 0.19373000E+1, 0.98680000E+0, 0.17069380E+3, 0.157E+3, 0.107E+3, 0.19373000E+1, + 0.99440000E+0, 0.12040040E+3, 0.157E+3, 0.108E+3, 0.19373000E+1, 0.99250000E+0, 0.79615100E+2, + 0.157E+3, 0.109E+3, 0.19373000E+1, 0.99820000E+0, 0.57870070E+3, 0.157E+3, 0.111E+3, + 0.19373000E+1, 0.96840000E+0, 0.90345630E+3, 0.157E+3, 0.112E+3, 0.19373000E+1, 0.96280000E+0, + 0.88049000E+3, 0.157E+3, 0.113E+3, 0.19373000E+1, 0.96480000E+0, 0.67215910E+3, 0.157E+3, + 0.114E+3, 0.19373000E+1, 0.95070000E+0, 0.53085730E+3, 0.157E+3, 0.115E+3, 0.19373000E+1, + 0.99470000E+0, 0.43834960E+3, 0.157E+3, 0.116E+3, 0.19373000E+1, 0.99480000E+0, 0.34967640E+3, + 0.157E+3, 0.117E+3, 0.19373000E+1, 0.99720000E+0, 0.78068060E+3, 0.157E+3, 0.119E+3, + 0.19373000E+1, 0.97670000E+0, 0.16583459E+4, 0.157E+3, 0.120E+3, 0.19373000E+1, 0.98310000E+0, + 0.74263980E+3, 0.157E+3, 0.121E+3, 0.19373000E+1, 0.18627000E+1, 0.71867820E+3, 0.157E+3, + 0.122E+3, 0.19373000E+1, 0.18299000E+1, 0.70447310E+3, 0.157E+3, 0.123E+3, 0.19373000E+1, + 0.19138000E+1, 0.70187680E+3, 0.157E+3, 0.124E+3, 0.19373000E+1, 0.18269000E+1, 0.62823400E+3, + 0.157E+3, 0.125E+3, 0.19373000E+1, 0.16406000E+1, 0.57752630E+3, 0.157E+3, 0.126E+3, + 0.19373000E+1, 0.16483000E+1, 0.55142260E+3, 0.157E+3, 0.127E+3, 0.19373000E+1, 0.17149000E+1, + 0.54016790E+3, 0.157E+3, 0.128E+3, 0.19373000E+1, 0.17937000E+1, 0.54406610E+3, 0.157E+3, + 0.129E+3, 0.19373000E+1, 0.95760000E+0, 0.49263420E+3, 0.157E+3, 0.130E+3, 0.19373000E+1, + 0.19419000E+1, 0.86066320E+3, 0.157E+3, 0.131E+3, 0.19373000E+1, 0.96010000E+0, 0.72574740E+3, + 0.157E+3, 0.132E+3, 0.19373000E+1, 0.94340000E+0, 0.63226020E+3, 0.157E+3, 0.133E+3, + 0.19373000E+1, 0.98890000E+0, 0.56675130E+3, 0.157E+3, 0.134E+3, 0.19373000E+1, 0.99010000E+0, + 0.48922910E+3, 0.157E+3, 0.135E+3, 0.19373000E+1, 0.99740000E+0, 0.92422030E+3, 0.157E+3, + 0.137E+3, 0.19373000E+1, 0.97380000E+0, 0.20365362E+4, 0.157E+3, 0.138E+3, 0.19373000E+1, + 0.98010000E+0, 0.14462394E+4, 0.157E+3, 0.139E+3, 0.19373000E+1, 0.19153000E+1, 0.99010590E+3, + 0.157E+3, 0.140E+3, 0.19373000E+1, 0.19355000E+1, 0.99792220E+3, 0.157E+3, 0.141E+3, + 0.19373000E+1, 0.19545000E+1, 0.92583590E+3, 0.157E+3, 0.142E+3, 0.19373000E+1, 0.19420000E+1, + 0.10787908E+4, 0.157E+3, 0.143E+3, 0.19373000E+1, 0.16682000E+1, 0.78658860E+3, 0.157E+3, + 0.144E+3, 0.19373000E+1, 0.18584000E+1, 0.73489180E+3, 0.157E+3, 0.145E+3, 0.19373000E+1, + 0.19003000E+1, 0.67965720E+3, 0.157E+3, 0.146E+3, 0.19373000E+1, 0.18630000E+1, 0.65947100E+3, + 0.157E+3, 0.147E+3, 0.19373000E+1, 0.96790000E+0, 0.63938320E+3, 0.157E+3, 0.148E+3, + 0.19373000E+1, 0.19539000E+1, 0.10954590E+4, 0.157E+3, 0.149E+3, 0.19373000E+1, 0.96330000E+0, + 0.95522580E+3, 0.157E+3, 0.150E+3, 0.19373000E+1, 0.95140000E+0, 0.87322870E+3, 0.157E+3, + 0.151E+3, 0.19373000E+1, 0.97490000E+0, 0.81328280E+3, 0.157E+3, 0.152E+3, 0.19373000E+1, + 0.98110000E+0, 0.72949490E+3, 0.157E+3, 0.153E+3, 0.19373000E+1, 0.99680000E+0, 0.10633274E+4, + 0.157E+3, 0.155E+3, 0.19373000E+1, 0.99090000E+0, 0.27055816E+4, 0.157E+3, 0.156E+3, + 0.19373000E+1, 0.97970000E+0, 0.18500003E+4, 0.157E+3, 0.157E+3, 0.19373000E+1, 0.19373000E+1, + 0.43220200E+2, 0.159E+3, 0.100E+1, 0.29425000E+1, 0.91180000E+0, 0.28506000E+2, 0.159E+3, + 0.200E+1, 0.29425000E+1, 0.00000000E+0, 0.68024790E+3, 0.159E+3, 0.300E+1, 0.29425000E+1, + 0.00000000E+0, 0.39079830E+3, 0.159E+3, 0.400E+1, 0.29425000E+1, 0.00000000E+0, 0.26231920E+3, + 0.159E+3, 0.500E+1, 0.29425000E+1, 0.00000000E+0, 0.17683390E+3, 0.159E+3, 0.600E+1, + 0.29425000E+1, 0.00000000E+0, 0.12349550E+3, 0.159E+3, 0.700E+1, 0.29425000E+1, 0.00000000E+0, + 0.93432700E+2, 0.159E+3, 0.800E+1, 0.29425000E+1, 0.00000000E+0, 0.70748100E+2, 0.159E+3, + 0.900E+1, 0.29425000E+1, 0.00000000E+0, 0.54406100E+2, 0.159E+3, 0.100E+2, 0.29425000E+1, + 0.00000000E+0, 0.81323530E+3, 0.159E+3, 0.110E+2, 0.29425000E+1, 0.00000000E+0, 0.62332230E+3, + 0.159E+3, 0.120E+2, 0.29425000E+1, 0.00000000E+0, 0.57359020E+3, 0.159E+3, 0.130E+2, + 0.29425000E+1, 0.00000000E+0, 0.45092530E+3, 0.159E+3, 0.140E+2, 0.29425000E+1, 0.00000000E+0, + 0.35095780E+3, 0.159E+3, 0.150E+2, 0.29425000E+1, 0.00000000E+0, 0.29093690E+3, 0.159E+3, + 0.160E+2, 0.29425000E+1, 0.00000000E+0, 0.23740720E+3, 0.159E+3, 0.170E+2, 0.29425000E+1, + 0.00000000E+0, 0.19406980E+3, 0.159E+3, 0.180E+2, 0.29425000E+1, 0.00000000E+0, 0.13337958E+4, + 0.159E+3, 0.190E+2, 0.29425000E+1, 0.00000000E+0, 0.10971659E+4, 0.159E+3, 0.200E+2, + 0.29425000E+1, 0.00000000E+0, 0.90572410E+3, 0.159E+3, 0.210E+2, 0.29425000E+1, 0.00000000E+0, + 0.87400660E+3, 0.159E+3, 0.220E+2, 0.29425000E+1, 0.00000000E+0, 0.80001520E+3, 0.159E+3, + 0.230E+2, 0.29425000E+1, 0.00000000E+0, 0.63019610E+3, 0.159E+3, 0.240E+2, 0.29425000E+1, + 0.00000000E+0, 0.68836930E+3, 0.159E+3, 0.250E+2, 0.29425000E+1, 0.00000000E+0, 0.54023110E+3, + 0.159E+3, 0.260E+2, 0.29425000E+1, 0.00000000E+0, 0.57207380E+3, 0.159E+3, 0.270E+2, + 0.29425000E+1, 0.00000000E+0, 0.58956950E+3, 0.159E+3, 0.280E+2, 0.29425000E+1, 0.00000000E+0, + 0.45203420E+3, 0.159E+3, 0.290E+2, 0.29425000E+1, 0.00000000E+0, 0.46341480E+3, 0.159E+3, + 0.300E+2, 0.29425000E+1, 0.00000000E+0, 0.54906920E+3, 0.159E+3, 0.310E+2, 0.29425000E+1, + 0.00000000E+0, 0.48331740E+3, 0.159E+3, 0.320E+2, 0.29425000E+1, 0.00000000E+0, 0.41155330E+3, + 0.159E+3, 0.330E+2, 0.29425000E+1, 0.00000000E+0, 0.36892060E+3, 0.159E+3, 0.340E+2, + 0.29425000E+1, 0.00000000E+0, 0.32252720E+3, 0.159E+3, 0.350E+2, 0.29425000E+1, 0.00000000E+0, + 0.28024380E+3, 0.159E+3, 0.360E+2, 0.29425000E+1, 0.00000000E+0, 0.14944074E+4, 0.159E+3, + 0.370E+2, 0.29425000E+1, 0.00000000E+0, 0.13073665E+4, 0.159E+3, 0.380E+2, 0.29425000E+1, + 0.00000000E+0, 0.11435524E+4, 0.159E+3, 0.390E+2, 0.29425000E+1, 0.00000000E+0, 0.10268226E+4, + 0.159E+3, 0.400E+2, 0.29425000E+1, 0.00000000E+0, 0.93574670E+3, 0.159E+3, 0.410E+2, + 0.29425000E+1, 0.00000000E+0, 0.72166730E+3, 0.159E+3, 0.420E+2, 0.29425000E+1, 0.00000000E+0, + 0.80551110E+3, 0.159E+3, 0.430E+2, 0.29425000E+1, 0.00000000E+0, 0.61296820E+3, 0.159E+3, + 0.440E+2, 0.29425000E+1, 0.00000000E+0, 0.66999170E+3, 0.159E+3, 0.450E+2, 0.29425000E+1, + 0.00000000E+0, 0.62106870E+3, 0.159E+3, 0.460E+2, 0.29425000E+1, 0.00000000E+0, 0.51802070E+3, + 0.159E+3, 0.470E+2, 0.29425000E+1, 0.00000000E+0, 0.54699380E+3, 0.159E+3, 0.480E+2, + 0.29425000E+1, 0.00000000E+0, 0.68726670E+3, 0.159E+3, 0.490E+2, 0.29425000E+1, 0.00000000E+0, + 0.63451560E+3, 0.159E+3, 0.500E+2, 0.29425000E+1, 0.00000000E+0, 0.56457530E+3, 0.159E+3, + 0.510E+2, 0.29425000E+1, 0.00000000E+0, 0.52332050E+3, 0.159E+3, 0.520E+2, 0.29425000E+1, + 0.00000000E+0, 0.47270040E+3, 0.159E+3, 0.530E+2, 0.29425000E+1, 0.00000000E+0, 0.42459150E+3, + 0.159E+3, 0.540E+2, 0.29425000E+1, 0.00000000E+0, 0.18204201E+4, 0.159E+3, 0.550E+2, + 0.29425000E+1, 0.00000000E+0, 0.16674685E+4, 0.159E+3, 0.560E+2, 0.29425000E+1, 0.00000000E+0, + 0.14628142E+4, 0.159E+3, 0.570E+2, 0.29425000E+1, 0.00000000E+0, 0.66720180E+3, 0.159E+3, + 0.580E+2, 0.29425000E+1, 0.27991000E+1, 0.14767389E+4, 0.159E+3, 0.590E+2, 0.29425000E+1, + 0.00000000E+0, 0.14176855E+4, 0.159E+3, 0.600E+2, 0.29425000E+1, 0.00000000E+0, 0.13820320E+4, + 0.159E+3, 0.610E+2, 0.29425000E+1, 0.00000000E+0, 0.13492524E+4, 0.159E+3, 0.620E+2, + 0.29425000E+1, 0.00000000E+0, 0.13201809E+4, 0.159E+3, 0.630E+2, 0.29425000E+1, 0.00000000E+0, + 0.10364403E+4, 0.159E+3, 0.640E+2, 0.29425000E+1, 0.00000000E+0, 0.11696897E+4, 0.159E+3, + 0.650E+2, 0.29425000E+1, 0.00000000E+0, 0.11277999E+4, 0.159E+3, 0.660E+2, 0.29425000E+1, + 0.00000000E+0, 0.11902918E+4, 0.159E+3, 0.670E+2, 0.29425000E+1, 0.00000000E+0, 0.11649825E+4, + 0.159E+3, 0.680E+2, 0.29425000E+1, 0.00000000E+0, 0.11421370E+4, 0.159E+3, 0.690E+2, + 0.29425000E+1, 0.00000000E+0, 0.11288548E+4, 0.159E+3, 0.700E+2, 0.29425000E+1, 0.00000000E+0, + 0.95004210E+3, 0.159E+3, 0.710E+2, 0.29425000E+1, 0.00000000E+0, 0.93285060E+3, 0.159E+3, + 0.720E+2, 0.29425000E+1, 0.00000000E+0, 0.85051620E+3, 0.159E+3, 0.730E+2, 0.29425000E+1, + 0.00000000E+0, 0.71766720E+3, 0.159E+3, 0.740E+2, 0.29425000E+1, 0.00000000E+0, 0.72982300E+3, + 0.159E+3, 0.750E+2, 0.29425000E+1, 0.00000000E+0, 0.66090480E+3, 0.159E+3, 0.760E+2, + 0.29425000E+1, 0.00000000E+0, 0.60487530E+3, 0.159E+3, 0.770E+2, 0.29425000E+1, 0.00000000E+0, + 0.50215100E+3, 0.159E+3, 0.780E+2, 0.29425000E+1, 0.00000000E+0, 0.46904220E+3, 0.159E+3, + 0.790E+2, 0.29425000E+1, 0.00000000E+0, 0.48234510E+3, 0.159E+3, 0.800E+2, 0.29425000E+1, + 0.00000000E+0, 0.70537820E+3, 0.159E+3, 0.810E+2, 0.29425000E+1, 0.00000000E+0, 0.68881010E+3, + 0.159E+3, 0.820E+2, 0.29425000E+1, 0.00000000E+0, 0.63203130E+3, 0.159E+3, 0.830E+2, + 0.29425000E+1, 0.00000000E+0, 0.60229480E+3, 0.159E+3, 0.840E+2, 0.29425000E+1, 0.00000000E+0, + 0.55531140E+3, 0.159E+3, 0.850E+2, 0.29425000E+1, 0.00000000E+0, 0.50853060E+3, 0.159E+3, + 0.860E+2, 0.29425000E+1, 0.00000000E+0, 0.17169108E+4, 0.159E+3, 0.870E+2, 0.29425000E+1, + 0.00000000E+0, 0.16476121E+4, 0.159E+3, 0.880E+2, 0.29425000E+1, 0.00000000E+0, 0.14543881E+4, + 0.159E+3, 0.890E+2, 0.29425000E+1, 0.00000000E+0, 0.13048970E+4, 0.159E+3, 0.900E+2, + 0.29425000E+1, 0.00000000E+0, 0.12966238E+4, 0.159E+3, 0.910E+2, 0.29425000E+1, 0.00000000E+0, + 0.12554359E+4, 0.159E+3, 0.920E+2, 0.29425000E+1, 0.00000000E+0, 0.12939094E+4, 0.159E+3, + 0.930E+2, 0.29425000E+1, 0.00000000E+0, 0.12527870E+4, 0.159E+3, 0.940E+2, 0.29425000E+1, + 0.00000000E+0, 0.69734100E+2, 0.159E+3, 0.101E+3, 0.29425000E+1, 0.00000000E+0, 0.22705790E+3, + 0.159E+3, 0.103E+3, 0.29425000E+1, 0.98650000E+0, 0.28944340E+3, 0.159E+3, 0.104E+3, + 0.29425000E+1, 0.98080000E+0, 0.22051700E+3, 0.159E+3, 0.105E+3, 0.29425000E+1, 0.97060000E+0, + 0.16588050E+3, 0.159E+3, 0.106E+3, 0.29425000E+1, 0.98680000E+0, 0.11516050E+3, 0.159E+3, + 0.107E+3, 0.29425000E+1, 0.99440000E+0, 0.83776500E+2, 0.159E+3, 0.108E+3, 0.29425000E+1, + 0.99250000E+0, 0.57559900E+2, 0.159E+3, 0.109E+3, 0.29425000E+1, 0.99820000E+0, 0.33214950E+3, + 0.159E+3, 0.111E+3, 0.29425000E+1, 0.96840000E+0, 0.51379560E+3, 0.159E+3, 0.112E+3, + 0.29425000E+1, 0.96280000E+0, 0.51961650E+3, 0.159E+3, 0.113E+3, 0.29425000E+1, 0.96480000E+0, + 0.41662720E+3, 0.159E+3, 0.114E+3, 0.29425000E+1, 0.95070000E+0, 0.34064700E+3, 0.159E+3, + 0.115E+3, 0.29425000E+1, 0.99470000E+0, 0.28774490E+3, 0.159E+3, 0.116E+3, 0.29425000E+1, + 0.99480000E+0, 0.23495440E+3, 0.159E+3, 0.117E+3, 0.29425000E+1, 0.99720000E+0, 0.45743380E+3, + 0.159E+3, 0.119E+3, 0.29425000E+1, 0.97670000E+0, 0.87755280E+3, 0.159E+3, 0.120E+3, + 0.29425000E+1, 0.98310000E+0, 0.45670870E+3, 0.159E+3, 0.121E+3, 0.29425000E+1, 0.18627000E+1, + 0.44087260E+3, 0.159E+3, 0.122E+3, 0.29425000E+1, 0.18299000E+1, 0.43208390E+3, 0.159E+3, + 0.123E+3, 0.29425000E+1, 0.19138000E+1, 0.42819360E+3, 0.159E+3, 0.124E+3, 0.29425000E+1, + 0.18269000E+1, 0.39355560E+3, 0.159E+3, 0.125E+3, 0.29425000E+1, 0.16406000E+1, 0.36411700E+3, + 0.159E+3, 0.126E+3, 0.29425000E+1, 0.16483000E+1, 0.34735660E+3, 0.159E+3, 0.127E+3, + 0.29425000E+1, 0.17149000E+1, 0.33962320E+3, 0.159E+3, 0.128E+3, 0.29425000E+1, 0.17937000E+1, + 0.33586060E+3, 0.159E+3, 0.129E+3, 0.29425000E+1, 0.95760000E+0, 0.31461930E+3, 0.159E+3, + 0.130E+3, 0.29425000E+1, 0.19419000E+1, 0.51545120E+3, 0.159E+3, 0.131E+3, 0.29425000E+1, + 0.96010000E+0, 0.45195710E+3, 0.159E+3, 0.132E+3, 0.29425000E+1, 0.94340000E+0, 0.40453400E+3, + 0.159E+3, 0.133E+3, 0.29425000E+1, 0.98890000E+0, 0.36906970E+3, 0.159E+3, 0.134E+3, + 0.29425000E+1, 0.99010000E+0, 0.32478940E+3, 0.159E+3, 0.135E+3, 0.29425000E+1, 0.99740000E+0, + 0.54559170E+3, 0.159E+3, 0.137E+3, 0.29425000E+1, 0.97380000E+0, 0.10680684E+4, 0.159E+3, + 0.138E+3, 0.29425000E+1, 0.98010000E+0, 0.81406370E+3, 0.159E+3, 0.139E+3, 0.29425000E+1, + 0.19153000E+1, 0.60412500E+3, 0.159E+3, 0.140E+3, 0.29425000E+1, 0.19355000E+1, 0.61013660E+3, + 0.159E+3, 0.141E+3, 0.29425000E+1, 0.19545000E+1, 0.56871480E+3, 0.159E+3, 0.142E+3, + 0.29425000E+1, 0.19420000E+1, 0.63873760E+3, 0.159E+3, 0.143E+3, 0.29425000E+1, 0.16682000E+1, + 0.49520560E+3, 0.159E+3, 0.144E+3, 0.29425000E+1, 0.18584000E+1, 0.46324120E+3, 0.159E+3, + 0.145E+3, 0.29425000E+1, 0.19003000E+1, 0.43008630E+3, 0.159E+3, 0.146E+3, 0.29425000E+1, + 0.18630000E+1, 0.41612810E+3, 0.159E+3, 0.147E+3, 0.29425000E+1, 0.96790000E+0, 0.41129410E+3, + 0.159E+3, 0.148E+3, 0.29425000E+1, 0.19539000E+1, 0.65474970E+3, 0.159E+3, 0.149E+3, + 0.29425000E+1, 0.96330000E+0, 0.59136710E+3, 0.159E+3, 0.150E+3, 0.29425000E+1, 0.95140000E+0, + 0.55320050E+3, 0.159E+3, 0.151E+3, 0.29425000E+1, 0.97490000E+0, 0.52290670E+3, 0.159E+3, + 0.152E+3, 0.29425000E+1, 0.98110000E+0, 0.47714300E+3, 0.159E+3, 0.153E+3, 0.29425000E+1, + 0.99680000E+0, 0.64438580E+3, 0.159E+3, 0.155E+3, 0.29425000E+1, 0.99090000E+0, 0.13856402E+4, + 0.159E+3, 0.156E+3, 0.29425000E+1, 0.97970000E+0, 0.10306163E+4, 0.159E+3, 0.157E+3, + 0.29425000E+1, 0.19373000E+1, 0.64702500E+3, 0.159E+3, 0.159E+3, 0.29425000E+1, 0.29425000E+1, + 0.42334300E+2, 0.160E+3, 0.100E+1, 0.29455000E+1, 0.91180000E+0, 0.27932400E+2, 0.160E+3, + 0.200E+1, 0.29455000E+1, 0.00000000E+0, 0.66553290E+3, 0.160E+3, 0.300E+1, 0.29455000E+1, + 0.00000000E+0, 0.38257600E+3, 0.160E+3, 0.400E+1, 0.29455000E+1, 0.00000000E+0, 0.25686460E+3, + 0.160E+3, 0.500E+1, 0.29455000E+1, 0.00000000E+0, 0.17319330E+3, 0.160E+3, 0.600E+1, + 0.29455000E+1, 0.00000000E+0, 0.12097590E+3, 0.160E+3, 0.700E+1, 0.29455000E+1, 0.00000000E+0, + 0.91540700E+2, 0.160E+3, 0.800E+1, 0.29455000E+1, 0.00000000E+0, 0.69326100E+2, 0.160E+3, + 0.900E+1, 0.29455000E+1, 0.00000000E+0, 0.53320100E+2, 0.160E+3, 0.100E+2, 0.29455000E+1, + 0.00000000E+0, 0.79568730E+3, 0.160E+3, 0.110E+2, 0.29455000E+1, 0.00000000E+0, 0.61016250E+3, + 0.160E+3, 0.120E+2, 0.29455000E+1, 0.00000000E+0, 0.56154980E+3, 0.160E+3, 0.130E+2, + 0.29455000E+1, 0.00000000E+0, 0.44153690E+3, 0.160E+3, 0.140E+2, 0.29455000E+1, 0.00000000E+0, + 0.34370190E+3, 0.160E+3, 0.150E+2, 0.29455000E+1, 0.00000000E+0, 0.28495290E+3, 0.160E+3, + 0.160E+2, 0.29455000E+1, 0.00000000E+0, 0.23255130E+3, 0.160E+3, 0.170E+2, 0.29455000E+1, + 0.00000000E+0, 0.19012240E+3, 0.160E+3, 0.180E+2, 0.29455000E+1, 0.00000000E+0, 0.13047563E+4, + 0.160E+3, 0.190E+2, 0.29455000E+1, 0.00000000E+0, 0.10738235E+4, 0.160E+3, 0.200E+2, + 0.29455000E+1, 0.00000000E+0, 0.88652660E+3, 0.160E+3, 0.210E+2, 0.29455000E+1, 0.00000000E+0, + 0.85553540E+3, 0.160E+3, 0.220E+2, 0.29455000E+1, 0.00000000E+0, 0.78313860E+3, 0.160E+3, + 0.230E+2, 0.29455000E+1, 0.00000000E+0, 0.61691000E+3, 0.160E+3, 0.240E+2, 0.29455000E+1, + 0.00000000E+0, 0.67388620E+3, 0.160E+3, 0.250E+2, 0.29455000E+1, 0.00000000E+0, 0.52887800E+3, + 0.160E+3, 0.260E+2, 0.29455000E+1, 0.00000000E+0, 0.56009170E+3, 0.160E+3, 0.270E+2, + 0.29455000E+1, 0.00000000E+0, 0.57719940E+3, 0.160E+3, 0.280E+2, 0.29455000E+1, 0.00000000E+0, + 0.44255790E+3, 0.160E+3, 0.290E+2, 0.29455000E+1, 0.00000000E+0, 0.45374620E+3, 0.160E+3, + 0.300E+2, 0.29455000E+1, 0.00000000E+0, 0.53757900E+3, 0.160E+3, 0.310E+2, 0.29455000E+1, + 0.00000000E+0, 0.47326730E+3, 0.160E+3, 0.320E+2, 0.29455000E+1, 0.00000000E+0, 0.40304410E+3, + 0.160E+3, 0.330E+2, 0.29455000E+1, 0.00000000E+0, 0.36132220E+3, 0.160E+3, 0.340E+2, + 0.29455000E+1, 0.00000000E+0, 0.31591320E+3, 0.160E+3, 0.350E+2, 0.29455000E+1, 0.00000000E+0, + 0.27452240E+3, 0.160E+3, 0.360E+2, 0.29455000E+1, 0.00000000E+0, 0.14619055E+4, 0.160E+3, + 0.370E+2, 0.29455000E+1, 0.00000000E+0, 0.12795273E+4, 0.160E+3, 0.380E+2, 0.29455000E+1, + 0.00000000E+0, 0.11193527E+4, 0.160E+3, 0.390E+2, 0.29455000E+1, 0.00000000E+0, 0.10051742E+4, + 0.160E+3, 0.400E+2, 0.29455000E+1, 0.00000000E+0, 0.91606480E+3, 0.160E+3, 0.410E+2, + 0.29455000E+1, 0.00000000E+0, 0.70655730E+3, 0.160E+3, 0.420E+2, 0.29455000E+1, 0.00000000E+0, + 0.78861510E+3, 0.160E+3, 0.430E+2, 0.29455000E+1, 0.00000000E+0, 0.60017770E+3, 0.160E+3, + 0.440E+2, 0.29455000E+1, 0.00000000E+0, 0.65600920E+3, 0.160E+3, 0.450E+2, 0.29455000E+1, + 0.00000000E+0, 0.60812890E+3, 0.160E+3, 0.460E+2, 0.29455000E+1, 0.00000000E+0, 0.50722690E+3, + 0.160E+3, 0.470E+2, 0.29455000E+1, 0.00000000E+0, 0.53562280E+3, 0.160E+3, 0.480E+2, + 0.29455000E+1, 0.00000000E+0, 0.67289960E+3, 0.160E+3, 0.490E+2, 0.29455000E+1, 0.00000000E+0, + 0.62132160E+3, 0.160E+3, 0.500E+2, 0.29455000E+1, 0.00000000E+0, 0.55289340E+3, 0.160E+3, + 0.510E+2, 0.29455000E+1, 0.00000000E+0, 0.51252450E+3, 0.160E+3, 0.520E+2, 0.29455000E+1, + 0.00000000E+0, 0.46298250E+3, 0.160E+3, 0.530E+2, 0.29455000E+1, 0.00000000E+0, 0.41589380E+3, + 0.160E+3, 0.540E+2, 0.29455000E+1, 0.00000000E+0, 0.17807379E+4, 0.160E+3, 0.550E+2, + 0.29455000E+1, 0.00000000E+0, 0.16318559E+4, 0.160E+3, 0.560E+2, 0.29455000E+1, 0.00000000E+0, + 0.14317796E+4, 0.160E+3, 0.570E+2, 0.29455000E+1, 0.00000000E+0, 0.65338750E+3, 0.160E+3, + 0.580E+2, 0.29455000E+1, 0.27991000E+1, 0.14452611E+4, 0.160E+3, 0.590E+2, 0.29455000E+1, + 0.00000000E+0, 0.13875284E+4, 0.160E+3, 0.600E+2, 0.29455000E+1, 0.00000000E+0, 0.13526449E+4, + 0.160E+3, 0.610E+2, 0.29455000E+1, 0.00000000E+0, 0.13205717E+4, 0.160E+3, 0.620E+2, + 0.29455000E+1, 0.00000000E+0, 0.12921268E+4, 0.160E+3, 0.630E+2, 0.29455000E+1, 0.00000000E+0, + 0.10145593E+4, 0.160E+3, 0.640E+2, 0.29455000E+1, 0.00000000E+0, 0.11446770E+4, 0.160E+3, + 0.650E+2, 0.29455000E+1, 0.00000000E+0, 0.11036788E+4, 0.160E+3, 0.660E+2, 0.29455000E+1, + 0.00000000E+0, 0.11650450E+4, 0.160E+3, 0.670E+2, 0.29455000E+1, 0.00000000E+0, 0.11402779E+4, + 0.160E+3, 0.680E+2, 0.29455000E+1, 0.00000000E+0, 0.11179234E+4, 0.160E+3, 0.690E+2, + 0.29455000E+1, 0.00000000E+0, 0.11049164E+4, 0.160E+3, 0.700E+2, 0.29455000E+1, 0.00000000E+0, + 0.92996320E+3, 0.160E+3, 0.710E+2, 0.29455000E+1, 0.00000000E+0, 0.91326380E+3, 0.160E+3, + 0.720E+2, 0.29455000E+1, 0.00000000E+0, 0.83272290E+3, 0.160E+3, 0.730E+2, 0.29455000E+1, + 0.00000000E+0, 0.70269660E+3, 0.160E+3, 0.740E+2, 0.29455000E+1, 0.00000000E+0, 0.71461940E+3, + 0.160E+3, 0.750E+2, 0.29455000E+1, 0.00000000E+0, 0.64718140E+3, 0.160E+3, 0.760E+2, + 0.29455000E+1, 0.00000000E+0, 0.59234880E+3, 0.160E+3, 0.770E+2, 0.29455000E+1, 0.00000000E+0, + 0.49178730E+3, 0.160E+3, 0.780E+2, 0.29455000E+1, 0.00000000E+0, 0.45937630E+3, 0.160E+3, + 0.790E+2, 0.29455000E+1, 0.00000000E+0, 0.47241230E+3, 0.160E+3, 0.800E+2, 0.29455000E+1, + 0.00000000E+0, 0.69065930E+3, 0.160E+3, 0.810E+2, 0.29455000E+1, 0.00000000E+0, 0.67450000E+3, + 0.160E+3, 0.820E+2, 0.29455000E+1, 0.00000000E+0, 0.61895970E+3, 0.160E+3, 0.830E+2, + 0.29455000E+1, 0.00000000E+0, 0.58986940E+3, 0.160E+3, 0.840E+2, 0.29455000E+1, 0.00000000E+0, + 0.54389180E+3, 0.160E+3, 0.850E+2, 0.29455000E+1, 0.00000000E+0, 0.49810570E+3, 0.160E+3, + 0.860E+2, 0.29455000E+1, 0.00000000E+0, 0.16797710E+4, 0.160E+3, 0.870E+2, 0.29455000E+1, + 0.00000000E+0, 0.16125437E+4, 0.160E+3, 0.880E+2, 0.29455000E+1, 0.00000000E+0, 0.14236214E+4, + 0.160E+3, 0.890E+2, 0.29455000E+1, 0.00000000E+0, 0.12774745E+4, 0.160E+3, 0.900E+2, + 0.29455000E+1, 0.00000000E+0, 0.12692909E+4, 0.160E+3, 0.910E+2, 0.29455000E+1, 0.00000000E+0, + 0.12289809E+4, 0.160E+3, 0.920E+2, 0.29455000E+1, 0.00000000E+0, 0.12665506E+4, 0.160E+3, + 0.930E+2, 0.29455000E+1, 0.00000000E+0, 0.12263194E+4, 0.160E+3, 0.940E+2, 0.29455000E+1, + 0.00000000E+0, 0.68293100E+2, 0.160E+3, 0.101E+3, 0.29455000E+1, 0.00000000E+0, 0.22228830E+3, + 0.160E+3, 0.103E+3, 0.29455000E+1, 0.98650000E+0, 0.28337150E+3, 0.160E+3, 0.104E+3, + 0.29455000E+1, 0.98080000E+0, 0.21594380E+3, 0.160E+3, 0.105E+3, 0.29455000E+1, 0.97060000E+0, + 0.16246650E+3, 0.160E+3, 0.106E+3, 0.29455000E+1, 0.98680000E+0, 0.11281340E+3, 0.160E+3, + 0.107E+3, 0.29455000E+1, 0.99440000E+0, 0.82084900E+2, 0.160E+3, 0.108E+3, 0.29455000E+1, + 0.99250000E+0, 0.56411700E+2, 0.160E+3, 0.109E+3, 0.29455000E+1, 0.99820000E+0, 0.32516360E+3, + 0.160E+3, 0.111E+3, 0.29455000E+1, 0.96840000E+0, 0.50296550E+3, 0.160E+3, 0.112E+3, + 0.29455000E+1, 0.96280000E+0, 0.50872500E+3, 0.160E+3, 0.113E+3, 0.29455000E+1, 0.96480000E+0, + 0.40796290E+3, 0.160E+3, 0.114E+3, 0.29455000E+1, 0.95070000E+0, 0.33360650E+3, 0.160E+3, + 0.115E+3, 0.29455000E+1, 0.99470000E+0, 0.28182650E+3, 0.160E+3, 0.116E+3, 0.29455000E+1, + 0.99480000E+0, 0.23014880E+3, 0.160E+3, 0.117E+3, 0.29455000E+1, 0.99720000E+0, 0.44786360E+3, + 0.160E+3, 0.119E+3, 0.29455000E+1, 0.97670000E+0, 0.85883830E+3, 0.160E+3, 0.120E+3, + 0.29455000E+1, 0.98310000E+0, 0.44722200E+3, 0.160E+3, 0.121E+3, 0.29455000E+1, 0.18627000E+1, + 0.43170970E+3, 0.160E+3, 0.122E+3, 0.29455000E+1, 0.18299000E+1, 0.42310550E+3, 0.160E+3, + 0.123E+3, 0.29455000E+1, 0.19138000E+1, 0.41928980E+3, 0.160E+3, 0.124E+3, 0.29455000E+1, + 0.18269000E+1, 0.38540430E+3, 0.160E+3, 0.125E+3, 0.29455000E+1, 0.16406000E+1, 0.35658500E+3, + 0.160E+3, 0.126E+3, 0.29455000E+1, 0.16483000E+1, 0.34017190E+3, 0.160E+3, 0.127E+3, + 0.29455000E+1, 0.17149000E+1, 0.33259710E+3, 0.160E+3, 0.128E+3, 0.29455000E+1, 0.17937000E+1, + 0.32889540E+3, 0.160E+3, 0.129E+3, 0.29455000E+1, 0.95760000E+0, 0.30812510E+3, 0.160E+3, + 0.130E+3, 0.29455000E+1, 0.19419000E+1, 0.50468300E+3, 0.160E+3, 0.131E+3, 0.29455000E+1, + 0.96010000E+0, 0.44257280E+3, 0.160E+3, 0.132E+3, 0.29455000E+1, 0.94340000E+0, 0.39617290E+3, + 0.160E+3, 0.133E+3, 0.29455000E+1, 0.98890000E+0, 0.36146790E+3, 0.160E+3, 0.134E+3, + 0.29455000E+1, 0.99010000E+0, 0.31812780E+3, 0.160E+3, 0.135E+3, 0.29455000E+1, 0.99740000E+0, + 0.53419470E+3, 0.160E+3, 0.137E+3, 0.29455000E+1, 0.97380000E+0, 0.10452541E+4, 0.160E+3, + 0.138E+3, 0.29455000E+1, 0.98010000E+0, 0.79688440E+3, 0.160E+3, 0.139E+3, 0.29455000E+1, + 0.19153000E+1, 0.59156300E+3, 0.160E+3, 0.140E+3, 0.29455000E+1, 0.19355000E+1, 0.59746030E+3, + 0.160E+3, 0.141E+3, 0.29455000E+1, 0.19545000E+1, 0.55690660E+3, 0.160E+3, 0.142E+3, + 0.29455000E+1, 0.19420000E+1, 0.62539660E+3, 0.160E+3, 0.143E+3, 0.29455000E+1, 0.16682000E+1, + 0.48497040E+3, 0.160E+3, 0.144E+3, 0.29455000E+1, 0.18584000E+1, 0.45367340E+3, 0.160E+3, + 0.145E+3, 0.29455000E+1, 0.19003000E+1, 0.42121350E+3, 0.160E+3, 0.146E+3, 0.29455000E+1, + 0.18630000E+1, 0.40754200E+3, 0.160E+3, 0.147E+3, 0.29455000E+1, 0.96790000E+0, 0.40282810E+3, + 0.160E+3, 0.148E+3, 0.29455000E+1, 0.19539000E+1, 0.64108970E+3, 0.160E+3, 0.149E+3, + 0.29455000E+1, 0.96330000E+0, 0.57909510E+3, 0.160E+3, 0.150E+3, 0.29455000E+1, 0.95140000E+0, + 0.54176140E+3, 0.160E+3, 0.151E+3, 0.29455000E+1, 0.97490000E+0, 0.51212090E+3, 0.160E+3, + 0.152E+3, 0.29455000E+1, 0.98110000E+0, 0.46733270E+3, 0.160E+3, 0.153E+3, 0.29455000E+1, + 0.99680000E+0, 0.63096990E+3, 0.160E+3, 0.155E+3, 0.29455000E+1, 0.99090000E+0, 0.13558874E+4, + 0.160E+3, 0.156E+3, 0.29455000E+1, 0.97970000E+0, 0.10088176E+4, 0.160E+3, 0.157E+3, + 0.29455000E+1, 0.19373000E+1, 0.63363330E+3, 0.160E+3, 0.159E+3, 0.29455000E+1, 0.29425000E+1, + 0.62052060E+3, 0.160E+3, 0.160E+3, 0.29455000E+1, 0.29455000E+1, 0.41035600E+2, 0.161E+3, + 0.100E+1, 0.29413000E+1, 0.91180000E+0, 0.27115000E+2, 0.161E+3, 0.200E+1, 0.29413000E+1, + 0.00000000E+0, 0.64218080E+3, 0.161E+3, 0.300E+1, 0.29413000E+1, 0.00000000E+0, 0.36981420E+3, + 0.161E+3, 0.400E+1, 0.29413000E+1, 0.00000000E+0, 0.24860710E+3, 0.161E+3, 0.500E+1, + 0.29413000E+1, 0.00000000E+0, 0.16779680E+3, 0.161E+3, 0.600E+1, 0.29413000E+1, 0.00000000E+0, + 0.11730260E+3, 0.161E+3, 0.700E+1, 0.29413000E+1, 0.00000000E+0, 0.88815900E+2, 0.161E+3, + 0.800E+1, 0.29413000E+1, 0.00000000E+0, 0.67299900E+2, 0.161E+3, 0.900E+1, 0.29413000E+1, + 0.00000000E+0, 0.51786000E+2, 0.161E+3, 0.100E+2, 0.29413000E+1, 0.00000000E+0, 0.76786760E+3, + 0.161E+3, 0.110E+2, 0.29413000E+1, 0.00000000E+0, 0.58961410E+3, 0.161E+3, 0.120E+2, + 0.29413000E+1, 0.00000000E+0, 0.54296830E+3, 0.161E+3, 0.130E+2, 0.29413000E+1, 0.00000000E+0, + 0.42728580E+3, 0.161E+3, 0.140E+2, 0.29413000E+1, 0.00000000E+0, 0.33286240E+3, 0.161E+3, + 0.150E+2, 0.29413000E+1, 0.00000000E+0, 0.27611290E+3, 0.161E+3, 0.160E+2, 0.29413000E+1, + 0.00000000E+0, 0.22545620E+3, 0.161E+3, 0.170E+2, 0.29413000E+1, 0.00000000E+0, 0.18441100E+3, + 0.161E+3, 0.180E+2, 0.29413000E+1, 0.00000000E+0, 0.12590280E+4, 0.161E+3, 0.190E+2, + 0.29413000E+1, 0.00000000E+0, 0.10371340E+4, 0.161E+3, 0.200E+2, 0.29413000E+1, 0.00000000E+0, + 0.85644340E+3, 0.161E+3, 0.210E+2, 0.29413000E+1, 0.00000000E+0, 0.82672570E+3, 0.161E+3, + 0.220E+2, 0.29413000E+1, 0.00000000E+0, 0.75688430E+3, 0.161E+3, 0.230E+2, 0.29413000E+1, + 0.00000000E+0, 0.59629710E+3, 0.161E+3, 0.240E+2, 0.29413000E+1, 0.00000000E+0, 0.65144380E+3, + 0.161E+3, 0.250E+2, 0.29413000E+1, 0.00000000E+0, 0.51133840E+3, 0.161E+3, 0.260E+2, + 0.29413000E+1, 0.00000000E+0, 0.54164010E+3, 0.161E+3, 0.270E+2, 0.29413000E+1, 0.00000000E+0, + 0.55809040E+3, 0.161E+3, 0.280E+2, 0.29413000E+1, 0.00000000E+0, 0.42796300E+3, 0.161E+3, + 0.290E+2, 0.29413000E+1, 0.00000000E+0, 0.43895460E+3, 0.161E+3, 0.300E+2, 0.29413000E+1, + 0.00000000E+0, 0.51995360E+3, 0.161E+3, 0.310E+2, 0.29413000E+1, 0.00000000E+0, 0.45803850E+3, + 0.161E+3, 0.320E+2, 0.29413000E+1, 0.00000000E+0, 0.39031610E+3, 0.161E+3, 0.330E+2, + 0.29413000E+1, 0.00000000E+0, 0.35005540E+3, 0.161E+3, 0.340E+2, 0.29413000E+1, 0.00000000E+0, + 0.30619590E+3, 0.161E+3, 0.350E+2, 0.29413000E+1, 0.00000000E+0, 0.26618930E+3, 0.161E+3, + 0.360E+2, 0.29413000E+1, 0.00000000E+0, 0.14108565E+4, 0.161E+3, 0.370E+2, 0.29413000E+1, + 0.00000000E+0, 0.12358086E+4, 0.161E+3, 0.380E+2, 0.29413000E+1, 0.00000000E+0, 0.10815963E+4, + 0.161E+3, 0.390E+2, 0.29413000E+1, 0.00000000E+0, 0.97156440E+3, 0.161E+3, 0.400E+2, + 0.29413000E+1, 0.00000000E+0, 0.88562820E+3, 0.161E+3, 0.410E+2, 0.29413000E+1, 0.00000000E+0, + 0.68336810E+3, 0.161E+3, 0.420E+2, 0.29413000E+1, 0.00000000E+0, 0.76261340E+3, 0.161E+3, + 0.430E+2, 0.29413000E+1, 0.00000000E+0, 0.58065630E+3, 0.161E+3, 0.440E+2, 0.29413000E+1, + 0.00000000E+0, 0.63462930E+3, 0.161E+3, 0.450E+2, 0.29413000E+1, 0.00000000E+0, 0.58839190E+3, + 0.161E+3, 0.460E+2, 0.29413000E+1, 0.00000000E+0, 0.49078330E+3, 0.161E+3, 0.470E+2, + 0.29413000E+1, 0.00000000E+0, 0.51833560E+3, 0.161E+3, 0.480E+2, 0.29413000E+1, 0.00000000E+0, + 0.65088900E+3, 0.161E+3, 0.490E+2, 0.29413000E+1, 0.00000000E+0, 0.60128620E+3, 0.161E+3, + 0.500E+2, 0.29413000E+1, 0.00000000E+0, 0.53534260E+3, 0.161E+3, 0.510E+2, 0.29413000E+1, + 0.00000000E+0, 0.49642060E+3, 0.161E+3, 0.520E+2, 0.29413000E+1, 0.00000000E+0, 0.44860200E+3, + 0.161E+3, 0.530E+2, 0.29413000E+1, 0.00000000E+0, 0.40312330E+3, 0.161E+3, 0.540E+2, + 0.29413000E+1, 0.00000000E+0, 0.17186565E+4, 0.161E+3, 0.550E+2, 0.29413000E+1, 0.00000000E+0, + 0.15759396E+4, 0.161E+3, 0.560E+2, 0.29413000E+1, 0.00000000E+0, 0.13833184E+4, 0.161E+3, + 0.570E+2, 0.29413000E+1, 0.00000000E+0, 0.63260690E+3, 0.161E+3, 0.580E+2, 0.29413000E+1, + 0.27991000E+1, 0.13959648E+4, 0.161E+3, 0.590E+2, 0.29413000E+1, 0.00000000E+0, 0.13402848E+4, + 0.161E+3, 0.600E+2, 0.29413000E+1, 0.00000000E+0, 0.13066123E+4, 0.161E+3, 0.610E+2, + 0.29413000E+1, 0.00000000E+0, 0.12756493E+4, 0.161E+3, 0.620E+2, 0.29413000E+1, 0.00000000E+0, + 0.12481896E+4, 0.161E+3, 0.630E+2, 0.29413000E+1, 0.00000000E+0, 0.98061140E+3, 0.161E+3, + 0.640E+2, 0.29413000E+1, 0.00000000E+0, 0.11056577E+4, 0.161E+3, 0.650E+2, 0.29413000E+1, + 0.00000000E+0, 0.10661553E+4, 0.161E+3, 0.660E+2, 0.29413000E+1, 0.00000000E+0, 0.11255430E+4, + 0.161E+3, 0.670E+2, 0.29413000E+1, 0.00000000E+0, 0.11016251E+4, 0.161E+3, 0.680E+2, + 0.29413000E+1, 0.00000000E+0, 0.10800441E+4, 0.161E+3, 0.690E+2, 0.29413000E+1, 0.00000000E+0, + 0.10674513E+4, 0.161E+3, 0.700E+2, 0.29413000E+1, 0.00000000E+0, 0.89877880E+3, 0.161E+3, + 0.710E+2, 0.29413000E+1, 0.00000000E+0, 0.88303380E+3, 0.161E+3, 0.720E+2, 0.29413000E+1, + 0.00000000E+0, 0.80541670E+3, 0.161E+3, 0.730E+2, 0.29413000E+1, 0.00000000E+0, 0.67986960E+3, + 0.161E+3, 0.740E+2, 0.29413000E+1, 0.00000000E+0, 0.69147700E+3, 0.161E+3, 0.750E+2, + 0.29413000E+1, 0.00000000E+0, 0.62640460E+3, 0.161E+3, 0.760E+2, 0.29413000E+1, 0.00000000E+0, + 0.57347180E+3, 0.161E+3, 0.770E+2, 0.29413000E+1, 0.00000000E+0, 0.47626530E+3, 0.161E+3, + 0.780E+2, 0.29413000E+1, 0.00000000E+0, 0.44493320E+3, 0.161E+3, 0.790E+2, 0.29413000E+1, + 0.00000000E+0, 0.45759140E+3, 0.161E+3, 0.800E+2, 0.29413000E+1, 0.00000000E+0, 0.66821650E+3, + 0.161E+3, 0.810E+2, 0.29413000E+1, 0.00000000E+0, 0.65280350E+3, 0.161E+3, 0.820E+2, + 0.29413000E+1, 0.00000000E+0, 0.59931800E+3, 0.161E+3, 0.830E+2, 0.29413000E+1, 0.00000000E+0, + 0.57130760E+3, 0.161E+3, 0.840E+2, 0.29413000E+1, 0.00000000E+0, 0.52695800E+3, 0.161E+3, + 0.850E+2, 0.29413000E+1, 0.00000000E+0, 0.48275550E+3, 0.161E+3, 0.860E+2, 0.29413000E+1, + 0.00000000E+0, 0.16217509E+4, 0.161E+3, 0.870E+2, 0.29413000E+1, 0.00000000E+0, 0.15576603E+4, + 0.161E+3, 0.880E+2, 0.29413000E+1, 0.00000000E+0, 0.13757224E+4, 0.161E+3, 0.890E+2, + 0.29413000E+1, 0.00000000E+0, 0.12351334E+4, 0.161E+3, 0.900E+2, 0.29413000E+1, 0.00000000E+0, + 0.12269612E+4, 0.161E+3, 0.910E+2, 0.29413000E+1, 0.00000000E+0, 0.11880136E+4, 0.161E+3, + 0.920E+2, 0.29413000E+1, 0.00000000E+0, 0.12239539E+4, 0.161E+3, 0.930E+2, 0.29413000E+1, + 0.00000000E+0, 0.11851389E+4, 0.161E+3, 0.940E+2, 0.29413000E+1, 0.00000000E+0, 0.66143900E+2, + 0.161E+3, 0.101E+3, 0.29413000E+1, 0.00000000E+0, 0.21491570E+3, 0.161E+3, 0.103E+3, + 0.29413000E+1, 0.98650000E+0, 0.27404530E+3, 0.161E+3, 0.104E+3, 0.29413000E+1, 0.98080000E+0, + 0.20906270E+3, 0.161E+3, 0.105E+3, 0.29413000E+1, 0.97060000E+0, 0.15740780E+3, 0.161E+3, + 0.106E+3, 0.29413000E+1, 0.98680000E+0, 0.10939440E+3, 0.161E+3, 0.107E+3, 0.29413000E+1, + 0.99440000E+0, 0.79656600E+2, 0.161E+3, 0.108E+3, 0.29413000E+1, 0.99250000E+0, 0.54794700E+2, + 0.161E+3, 0.109E+3, 0.29413000E+1, 0.99820000E+0, 0.31433160E+3, 0.161E+3, 0.111E+3, + 0.29413000E+1, 0.96840000E+0, 0.48615820E+3, 0.161E+3, 0.112E+3, 0.29413000E+1, 0.96280000E+0, + 0.49197000E+3, 0.161E+3, 0.113E+3, 0.29413000E+1, 0.96480000E+0, 0.39485010E+3, 0.161E+3, + 0.114E+3, 0.29413000E+1, 0.95070000E+0, 0.32309660E+3, 0.161E+3, 0.115E+3, 0.29413000E+1, + 0.99470000E+0, 0.27308190E+3, 0.161E+3, 0.116E+3, 0.29413000E+1, 0.99480000E+0, 0.22312610E+3, + 0.161E+3, 0.117E+3, 0.29413000E+1, 0.99720000E+0, 0.43320740E+3, 0.161E+3, 0.119E+3, + 0.29413000E+1, 0.97670000E+0, 0.82964080E+3, 0.161E+3, 0.120E+3, 0.29413000E+1, 0.98310000E+0, + 0.43282760E+3, 0.161E+3, 0.121E+3, 0.29413000E+1, 0.18627000E+1, 0.41783600E+3, 0.161E+3, + 0.122E+3, 0.29413000E+1, 0.18299000E+1, 0.40950580E+3, 0.161E+3, 0.123E+3, 0.29413000E+1, + 0.19138000E+1, 0.40578350E+3, 0.161E+3, 0.124E+3, 0.29413000E+1, 0.18269000E+1, 0.37312230E+3, + 0.161E+3, 0.125E+3, 0.29413000E+1, 0.16406000E+1, 0.34526760E+3, 0.161E+3, 0.126E+3, + 0.29413000E+1, 0.16483000E+1, 0.32938120E+3, 0.161E+3, 0.127E+3, 0.29413000E+1, 0.17149000E+1, + 0.32203750E+3, 0.161E+3, 0.128E+3, 0.29413000E+1, 0.17937000E+1, 0.31836420E+3, 0.161E+3, + 0.129E+3, 0.29413000E+1, 0.95760000E+0, 0.29841060E+3, 0.161E+3, 0.130E+3, 0.29413000E+1, + 0.19419000E+1, 0.48821620E+3, 0.161E+3, 0.131E+3, 0.29413000E+1, 0.96010000E+0, 0.42840160E+3, + 0.161E+3, 0.132E+3, 0.29413000E+1, 0.94340000E+0, 0.38367750E+3, 0.161E+3, 0.133E+3, + 0.29413000E+1, 0.98890000E+0, 0.35019520E+3, 0.161E+3, 0.134E+3, 0.29413000E+1, 0.99010000E+0, + 0.30833610E+3, 0.161E+3, 0.135E+3, 0.29413000E+1, 0.99740000E+0, 0.51680260E+3, 0.161E+3, + 0.137E+3, 0.29413000E+1, 0.97380000E+0, 0.10097020E+4, 0.161E+3, 0.138E+3, 0.29413000E+1, + 0.98010000E+0, 0.77048950E+3, 0.161E+3, 0.139E+3, 0.29413000E+1, 0.19153000E+1, 0.57252260E+3, + 0.161E+3, 0.140E+3, 0.29413000E+1, 0.19355000E+1, 0.57822130E+3, 0.161E+3, 0.141E+3, + 0.29413000E+1, 0.19545000E+1, 0.53906400E+3, 0.161E+3, 0.142E+3, 0.29413000E+1, 0.19420000E+1, + 0.60508290E+3, 0.161E+3, 0.143E+3, 0.29413000E+1, 0.16682000E+1, 0.46961340E+3, 0.161E+3, + 0.144E+3, 0.29413000E+1, 0.18584000E+1, 0.43933610E+3, 0.161E+3, 0.145E+3, 0.29413000E+1, + 0.19003000E+1, 0.40794200E+3, 0.161E+3, 0.146E+3, 0.29413000E+1, 0.18630000E+1, 0.39468140E+3, + 0.161E+3, 0.147E+3, 0.29413000E+1, 0.96790000E+0, 0.39021360E+3, 0.161E+3, 0.148E+3, + 0.29413000E+1, 0.19539000E+1, 0.62022960E+3, 0.161E+3, 0.149E+3, 0.29413000E+1, 0.96330000E+0, + 0.56054060E+3, 0.161E+3, 0.150E+3, 0.29413000E+1, 0.95140000E+0, 0.52460280E+3, 0.161E+3, + 0.151E+3, 0.29413000E+1, 0.97490000E+0, 0.49603960E+3, 0.161E+3, 0.152E+3, 0.29413000E+1, + 0.98110000E+0, 0.45281350E+3, 0.161E+3, 0.153E+3, 0.29413000E+1, 0.99680000E+0, 0.61065170E+3, + 0.161E+3, 0.155E+3, 0.29413000E+1, 0.99090000E+0, 0.13096071E+4, 0.161E+3, 0.156E+3, + 0.29413000E+1, 0.97970000E+0, 0.97534290E+3, 0.161E+3, 0.157E+3, 0.29413000E+1, 0.19373000E+1, + 0.61350220E+3, 0.161E+3, 0.159E+3, 0.29413000E+1, 0.29425000E+1, 0.60081010E+3, 0.161E+3, + 0.160E+3, 0.29413000E+1, 0.29455000E+1, 0.58174350E+3, 0.161E+3, 0.161E+3, 0.29413000E+1, + 0.29413000E+1, 0.41118600E+2, 0.162E+3, 0.100E+1, 0.29300000E+1, 0.91180000E+0, 0.27091000E+2, + 0.162E+3, 0.200E+1, 0.29300000E+1, 0.00000000E+0, 0.65371250E+3, 0.162E+3, 0.300E+1, + 0.29300000E+1, 0.00000000E+0, 0.37335380E+3, 0.162E+3, 0.400E+1, 0.29300000E+1, 0.00000000E+0, + 0.25006900E+3, 0.162E+3, 0.500E+1, 0.29300000E+1, 0.00000000E+0, 0.16835070E+3, 0.162E+3, + 0.600E+1, 0.29300000E+1, 0.00000000E+0, 0.11747400E+3, 0.162E+3, 0.700E+1, 0.29300000E+1, + 0.00000000E+0, 0.88833200E+2, 0.162E+3, 0.800E+1, 0.29300000E+1, 0.00000000E+0, 0.67241500E+2, + 0.162E+3, 0.900E+1, 0.29300000E+1, 0.00000000E+0, 0.51697700E+2, 0.162E+3, 0.100E+2, + 0.29300000E+1, 0.00000000E+0, 0.78120500E+3, 0.162E+3, 0.110E+2, 0.29300000E+1, 0.00000000E+0, + 0.59600220E+3, 0.162E+3, 0.120E+2, 0.29300000E+1, 0.00000000E+0, 0.54777420E+3, 0.162E+3, + 0.130E+2, 0.29300000E+1, 0.00000000E+0, 0.42994940E+3, 0.162E+3, 0.140E+2, 0.29300000E+1, + 0.00000000E+0, 0.33425170E+3, 0.162E+3, 0.150E+2, 0.29300000E+1, 0.00000000E+0, 0.27691160E+3, + 0.162E+3, 0.160E+2, 0.29300000E+1, 0.00000000E+0, 0.22583700E+3, 0.162E+3, 0.170E+2, + 0.29300000E+1, 0.00000000E+0, 0.18453320E+3, 0.162E+3, 0.180E+2, 0.29300000E+1, 0.00000000E+0, + 0.12836315E+4, 0.162E+3, 0.190E+2, 0.29300000E+1, 0.00000000E+0, 0.10509848E+4, 0.162E+3, + 0.200E+2, 0.29300000E+1, 0.00000000E+0, 0.86692280E+3, 0.162E+3, 0.210E+2, 0.29300000E+1, + 0.00000000E+0, 0.83609940E+3, 0.162E+3, 0.220E+2, 0.29300000E+1, 0.00000000E+0, 0.76505120E+3, + 0.162E+3, 0.230E+2, 0.29300000E+1, 0.00000000E+0, 0.60271130E+3, 0.162E+3, 0.240E+2, + 0.29300000E+1, 0.00000000E+0, 0.65796350E+3, 0.162E+3, 0.250E+2, 0.29300000E+1, 0.00000000E+0, + 0.51637700E+3, 0.162E+3, 0.260E+2, 0.29300000E+1, 0.00000000E+0, 0.54633630E+3, 0.162E+3, + 0.270E+2, 0.29300000E+1, 0.00000000E+0, 0.56322550E+3, 0.162E+3, 0.280E+2, 0.29300000E+1, + 0.00000000E+0, 0.43190330E+3, 0.162E+3, 0.290E+2, 0.29300000E+1, 0.00000000E+0, 0.44225450E+3, + 0.162E+3, 0.300E+2, 0.29300000E+1, 0.00000000E+0, 0.52416760E+3, 0.162E+3, 0.310E+2, + 0.29300000E+1, 0.00000000E+0, 0.46081790E+3, 0.162E+3, 0.320E+2, 0.29300000E+1, 0.00000000E+0, + 0.39201390E+3, 0.162E+3, 0.330E+2, 0.29300000E+1, 0.00000000E+0, 0.35121820E+3, 0.162E+3, + 0.340E+2, 0.29300000E+1, 0.00000000E+0, 0.30689590E+3, 0.162E+3, 0.350E+2, 0.29300000E+1, + 0.00000000E+0, 0.26654940E+3, 0.162E+3, 0.360E+2, 0.29300000E+1, 0.00000000E+0, 0.14379300E+4, + 0.162E+3, 0.370E+2, 0.29300000E+1, 0.00000000E+0, 0.12526342E+4, 0.162E+3, 0.380E+2, + 0.29300000E+1, 0.00000000E+0, 0.10942695E+4, 0.162E+3, 0.390E+2, 0.29300000E+1, 0.00000000E+0, + 0.98185530E+3, 0.162E+3, 0.400E+2, 0.29300000E+1, 0.00000000E+0, 0.89439170E+3, 0.162E+3, + 0.410E+2, 0.29300000E+1, 0.00000000E+0, 0.68930910E+3, 0.162E+3, 0.420E+2, 0.29300000E+1, + 0.00000000E+0, 0.76959900E+3, 0.162E+3, 0.430E+2, 0.29300000E+1, 0.00000000E+0, 0.58520650E+3, + 0.162E+3, 0.440E+2, 0.29300000E+1, 0.00000000E+0, 0.63957050E+3, 0.162E+3, 0.450E+2, + 0.29300000E+1, 0.00000000E+0, 0.59271510E+3, 0.162E+3, 0.460E+2, 0.29300000E+1, 0.00000000E+0, + 0.49454430E+3, 0.162E+3, 0.470E+2, 0.29300000E+1, 0.00000000E+0, 0.52185710E+3, 0.162E+3, + 0.480E+2, 0.29300000E+1, 0.00000000E+0, 0.65623190E+3, 0.162E+3, 0.490E+2, 0.29300000E+1, + 0.00000000E+0, 0.60519030E+3, 0.162E+3, 0.500E+2, 0.29300000E+1, 0.00000000E+0, 0.53798990E+3, + 0.162E+3, 0.510E+2, 0.29300000E+1, 0.00000000E+0, 0.49842910E+3, 0.162E+3, 0.520E+2, + 0.29300000E+1, 0.00000000E+0, 0.44999200E+3, 0.162E+3, 0.530E+2, 0.29300000E+1, 0.00000000E+0, + 0.40401740E+3, 0.162E+3, 0.540E+2, 0.29300000E+1, 0.00000000E+0, 0.17521410E+4, 0.162E+3, + 0.550E+2, 0.29300000E+1, 0.00000000E+0, 0.15986396E+4, 0.162E+3, 0.560E+2, 0.29300000E+1, + 0.00000000E+0, 0.14005068E+4, 0.162E+3, 0.570E+2, 0.29300000E+1, 0.00000000E+0, 0.63591570E+3, + 0.162E+3, 0.580E+2, 0.29300000E+1, 0.27991000E+1, 0.14152709E+4, 0.162E+3, 0.590E+2, + 0.29300000E+1, 0.00000000E+0, 0.13581904E+4, 0.162E+3, 0.600E+2, 0.29300000E+1, 0.00000000E+0, + 0.13239329E+4, 0.162E+3, 0.610E+2, 0.29300000E+1, 0.00000000E+0, 0.12924475E+4, 0.162E+3, + 0.620E+2, 0.29300000E+1, 0.00000000E+0, 0.12645213E+4, 0.162E+3, 0.630E+2, 0.29300000E+1, + 0.00000000E+0, 0.99151760E+3, 0.162E+3, 0.640E+2, 0.29300000E+1, 0.00000000E+0, 0.11218549E+4, + 0.162E+3, 0.650E+2, 0.29300000E+1, 0.00000000E+0, 0.10816001E+4, 0.162E+3, 0.660E+2, + 0.29300000E+1, 0.00000000E+0, 0.11396825E+4, 0.162E+3, 0.670E+2, 0.29300000E+1, 0.00000000E+0, + 0.11153978E+4, 0.162E+3, 0.680E+2, 0.29300000E+1, 0.00000000E+0, 0.10934602E+4, 0.162E+3, + 0.690E+2, 0.29300000E+1, 0.00000000E+0, 0.10807974E+4, 0.162E+3, 0.700E+2, 0.29300000E+1, + 0.00000000E+0, 0.90896190E+3, 0.162E+3, 0.710E+2, 0.29300000E+1, 0.00000000E+0, 0.89127890E+3, + 0.162E+3, 0.720E+2, 0.29300000E+1, 0.00000000E+0, 0.81208250E+3, 0.162E+3, 0.730E+2, + 0.29300000E+1, 0.00000000E+0, 0.68499030E+3, 0.162E+3, 0.740E+2, 0.29300000E+1, 0.00000000E+0, + 0.69640000E+3, 0.162E+3, 0.750E+2, 0.29300000E+1, 0.00000000E+0, 0.63031370E+3, 0.162E+3, + 0.760E+2, 0.29300000E+1, 0.00000000E+0, 0.57665350E+3, 0.162E+3, 0.770E+2, 0.29300000E+1, + 0.00000000E+0, 0.47857310E+3, 0.162E+3, 0.780E+2, 0.29300000E+1, 0.00000000E+0, 0.44696260E+3, + 0.162E+3, 0.790E+2, 0.29300000E+1, 0.00000000E+0, 0.45952800E+3, 0.162E+3, 0.800E+2, + 0.29300000E+1, 0.00000000E+0, 0.67346620E+3, 0.162E+3, 0.810E+2, 0.29300000E+1, 0.00000000E+0, + 0.65702270E+3, 0.162E+3, 0.820E+2, 0.29300000E+1, 0.00000000E+0, 0.60234550E+3, 0.162E+3, + 0.830E+2, 0.29300000E+1, 0.00000000E+0, 0.57374780E+3, 0.162E+3, 0.840E+2, 0.29300000E+1, + 0.00000000E+0, 0.52872700E+3, 0.162E+3, 0.850E+2, 0.29300000E+1, 0.00000000E+0, 0.48398270E+3, + 0.162E+3, 0.860E+2, 0.29300000E+1, 0.00000000E+0, 0.16501361E+4, 0.162E+3, 0.870E+2, + 0.29300000E+1, 0.00000000E+0, 0.15785123E+4, 0.162E+3, 0.880E+2, 0.29300000E+1, 0.00000000E+0, + 0.13916728E+4, 0.162E+3, 0.890E+2, 0.29300000E+1, 0.00000000E+0, 0.12470771E+4, 0.162E+3, + 0.900E+2, 0.29300000E+1, 0.00000000E+0, 0.12400445E+4, 0.162E+3, 0.910E+2, 0.29300000E+1, + 0.00000000E+0, 0.12006028E+4, 0.162E+3, 0.920E+2, 0.29300000E+1, 0.00000000E+0, 0.12383187E+4, + 0.162E+3, 0.930E+2, 0.29300000E+1, 0.00000000E+0, 0.11987720E+4, 0.162E+3, 0.940E+2, + 0.29300000E+1, 0.00000000E+0, 0.66405700E+2, 0.162E+3, 0.101E+3, 0.29300000E+1, 0.00000000E+0, + 0.21686950E+3, 0.162E+3, 0.103E+3, 0.29300000E+1, 0.98650000E+0, 0.27638280E+3, 0.162E+3, + 0.104E+3, 0.29300000E+1, 0.98080000E+0, 0.21014480E+3, 0.162E+3, 0.105E+3, 0.29300000E+1, + 0.97060000E+0, 0.15794060E+3, 0.162E+3, 0.106E+3, 0.29300000E+1, 0.98680000E+0, 0.10955230E+3, + 0.162E+3, 0.107E+3, 0.29300000E+1, 0.99440000E+0, 0.79647700E+2, 0.162E+3, 0.108E+3, + 0.29300000E+1, 0.99250000E+0, 0.54685200E+2, 0.162E+3, 0.109E+3, 0.29300000E+1, 0.99820000E+0, + 0.31740960E+3, 0.162E+3, 0.111E+3, 0.29300000E+1, 0.96840000E+0, 0.49113850E+3, 0.162E+3, + 0.112E+3, 0.29300000E+1, 0.96280000E+0, 0.49609590E+3, 0.162E+3, 0.113E+3, 0.29300000E+1, + 0.96480000E+0, 0.39717520E+3, 0.162E+3, 0.114E+3, 0.29300000E+1, 0.95070000E+0, 0.32442460E+3, + 0.162E+3, 0.115E+3, 0.29300000E+1, 0.99470000E+0, 0.27388040E+3, 0.162E+3, 0.116E+3, + 0.29300000E+1, 0.99480000E+0, 0.22350790E+3, 0.162E+3, 0.117E+3, 0.29300000E+1, 0.99720000E+0, + 0.43688540E+3, 0.162E+3, 0.119E+3, 0.29300000E+1, 0.97670000E+0, 0.84105190E+3, 0.162E+3, + 0.120E+3, 0.29300000E+1, 0.98310000E+0, 0.43551720E+3, 0.162E+3, 0.121E+3, 0.29300000E+1, + 0.18627000E+1, 0.42046710E+3, 0.162E+3, 0.122E+3, 0.29300000E+1, 0.18299000E+1, 0.41208740E+3, + 0.162E+3, 0.123E+3, 0.29300000E+1, 0.19138000E+1, 0.40844600E+3, 0.162E+3, 0.124E+3, + 0.29300000E+1, 0.18269000E+1, 0.37510510E+3, 0.162E+3, 0.125E+3, 0.29300000E+1, 0.16406000E+1, + 0.34698680E+3, 0.162E+3, 0.126E+3, 0.29300000E+1, 0.16483000E+1, 0.33102820E+3, 0.162E+3, + 0.127E+3, 0.29300000E+1, 0.17149000E+1, 0.32367720E+3, 0.162E+3, 0.128E+3, 0.29300000E+1, + 0.17937000E+1, 0.32026840E+3, 0.162E+3, 0.129E+3, 0.29300000E+1, 0.95760000E+0, 0.29970920E+3, + 0.162E+3, 0.130E+3, 0.29300000E+1, 0.19419000E+1, 0.49191570E+3, 0.162E+3, 0.131E+3, + 0.29300000E+1, 0.96010000E+0, 0.43081190E+3, 0.162E+3, 0.132E+3, 0.29300000E+1, 0.94340000E+0, + 0.38530990E+3, 0.162E+3, 0.133E+3, 0.29300000E+1, 0.98890000E+0, 0.35136440E+3, 0.162E+3, + 0.134E+3, 0.29300000E+1, 0.99010000E+0, 0.30905750E+3, 0.162E+3, 0.135E+3, 0.29300000E+1, + 0.99740000E+0, 0.52097030E+3, 0.162E+3, 0.137E+3, 0.29300000E+1, 0.97380000E+0, 0.10240101E+4, + 0.162E+3, 0.138E+3, 0.29300000E+1, 0.98010000E+0, 0.77856140E+3, 0.162E+3, 0.139E+3, + 0.29300000E+1, 0.19153000E+1, 0.57624530E+3, 0.162E+3, 0.140E+3, 0.29300000E+1, 0.19355000E+1, + 0.58193050E+3, 0.162E+3, 0.141E+3, 0.29300000E+1, 0.19545000E+1, 0.54238030E+3, 0.162E+3, + 0.142E+3, 0.29300000E+1, 0.19420000E+1, 0.60986550E+3, 0.162E+3, 0.143E+3, 0.29300000E+1, + 0.16682000E+1, 0.47194410E+3, 0.162E+3, 0.144E+3, 0.29300000E+1, 0.18584000E+1, 0.44147690E+3, + 0.162E+3, 0.145E+3, 0.29300000E+1, 0.19003000E+1, 0.40984440E+3, 0.162E+3, 0.146E+3, + 0.29300000E+1, 0.18630000E+1, 0.39658040E+3, 0.162E+3, 0.147E+3, 0.29300000E+1, 0.96790000E+0, + 0.39174910E+3, 0.162E+3, 0.148E+3, 0.29300000E+1, 0.19539000E+1, 0.62494310E+3, 0.162E+3, + 0.149E+3, 0.29300000E+1, 0.96330000E+0, 0.56383860E+3, 0.162E+3, 0.150E+3, 0.29300000E+1, + 0.95140000E+0, 0.52709190E+3, 0.162E+3, 0.151E+3, 0.29300000E+1, 0.97490000E+0, 0.49801930E+3, + 0.162E+3, 0.152E+3, 0.29300000E+1, 0.98110000E+0, 0.45422360E+3, 0.162E+3, 0.153E+3, + 0.29300000E+1, 0.99680000E+0, 0.61477890E+3, 0.162E+3, 0.155E+3, 0.29300000E+1, 0.99090000E+0, + 0.13297509E+4, 0.162E+3, 0.156E+3, 0.29300000E+1, 0.97970000E+0, 0.98604390E+3, 0.162E+3, + 0.157E+3, 0.29300000E+1, 0.19373000E+1, 0.61665720E+3, 0.162E+3, 0.159E+3, 0.29300000E+1, + 0.29425000E+1, 0.60388680E+3, 0.162E+3, 0.160E+3, 0.29300000E+1, 0.29455000E+1, 0.58467880E+3, + 0.162E+3, 0.161E+3, 0.29300000E+1, 0.29413000E+1, 0.58778910E+3, 0.162E+3, 0.162E+3, + 0.29300000E+1, 0.29300000E+1, 0.39256400E+2, 0.163E+3, 0.100E+1, 0.18286000E+1, 0.91180000E+0, + 0.25691300E+2, 0.163E+3, 0.200E+1, 0.18286000E+1, 0.00000000E+0, 0.65368460E+3, 0.163E+3, + 0.300E+1, 0.18286000E+1, 0.00000000E+0, 0.36511120E+3, 0.163E+3, 0.400E+1, 0.18286000E+1, + 0.00000000E+0, 0.24163430E+3, 0.163E+3, 0.500E+1, 0.18286000E+1, 0.00000000E+0, 0.16139330E+3, + 0.163E+3, 0.600E+1, 0.18286000E+1, 0.00000000E+0, 0.11205120E+3, 0.163E+3, 0.700E+1, + 0.18286000E+1, 0.00000000E+0, 0.84473100E+2, 0.163E+3, 0.800E+1, 0.18286000E+1, 0.00000000E+0, + 0.63799600E+2, 0.163E+3, 0.900E+1, 0.18286000E+1, 0.00000000E+0, 0.48980900E+2, 0.163E+3, + 0.100E+2, 0.18286000E+1, 0.00000000E+0, 0.78026740E+3, 0.163E+3, 0.110E+2, 0.18286000E+1, + 0.00000000E+0, 0.58523670E+3, 0.163E+3, 0.120E+2, 0.18286000E+1, 0.00000000E+0, 0.53437570E+3, + 0.163E+3, 0.130E+2, 0.18286000E+1, 0.00000000E+0, 0.41591500E+3, 0.163E+3, 0.140E+2, + 0.18286000E+1, 0.00000000E+0, 0.32121200E+3, 0.163E+3, 0.150E+2, 0.18286000E+1, 0.00000000E+0, + 0.26508690E+3, 0.163E+3, 0.160E+2, 0.18286000E+1, 0.00000000E+0, 0.21546030E+3, 0.163E+3, + 0.170E+2, 0.18286000E+1, 0.00000000E+0, 0.17559080E+3, 0.163E+3, 0.180E+2, 0.18286000E+1, + 0.00000000E+0, 0.12856965E+4, 0.163E+3, 0.190E+2, 0.18286000E+1, 0.00000000E+0, 0.10394662E+4, + 0.163E+3, 0.200E+2, 0.18286000E+1, 0.00000000E+0, 0.85482160E+3, 0.163E+3, 0.210E+2, + 0.18286000E+1, 0.00000000E+0, 0.82218100E+3, 0.163E+3, 0.220E+2, 0.18286000E+1, 0.00000000E+0, + 0.75108930E+3, 0.163E+3, 0.230E+2, 0.18286000E+1, 0.00000000E+0, 0.59166600E+3, 0.163E+3, + 0.240E+2, 0.18286000E+1, 0.00000000E+0, 0.64444210E+3, 0.163E+3, 0.250E+2, 0.18286000E+1, + 0.00000000E+0, 0.50560640E+3, 0.163E+3, 0.260E+2, 0.18286000E+1, 0.00000000E+0, 0.53300400E+3, + 0.163E+3, 0.270E+2, 0.18286000E+1, 0.00000000E+0, 0.55039520E+3, 0.163E+3, 0.280E+2, + 0.18286000E+1, 0.00000000E+0, 0.42213760E+3, 0.163E+3, 0.290E+2, 0.18286000E+1, 0.00000000E+0, + 0.42993040E+3, 0.163E+3, 0.300E+2, 0.18286000E+1, 0.00000000E+0, 0.51021570E+3, 0.163E+3, + 0.310E+2, 0.18286000E+1, 0.00000000E+0, 0.44563750E+3, 0.163E+3, 0.320E+2, 0.18286000E+1, + 0.00000000E+0, 0.37699910E+3, 0.163E+3, 0.330E+2, 0.18286000E+1, 0.00000000E+0, 0.33669100E+3, + 0.163E+3, 0.340E+2, 0.18286000E+1, 0.00000000E+0, 0.29330360E+3, 0.163E+3, 0.350E+2, + 0.18286000E+1, 0.00000000E+0, 0.25408590E+3, 0.163E+3, 0.360E+2, 0.18286000E+1, 0.00000000E+0, + 0.14385445E+4, 0.163E+3, 0.370E+2, 0.18286000E+1, 0.00000000E+0, 0.12395504E+4, 0.163E+3, + 0.380E+2, 0.18286000E+1, 0.00000000E+0, 0.10770858E+4, 0.163E+3, 0.390E+2, 0.18286000E+1, + 0.00000000E+0, 0.96327150E+3, 0.163E+3, 0.400E+2, 0.18286000E+1, 0.00000000E+0, 0.87559310E+3, + 0.163E+3, 0.410E+2, 0.18286000E+1, 0.00000000E+0, 0.67249140E+3, 0.163E+3, 0.420E+2, + 0.18286000E+1, 0.00000000E+0, 0.75175670E+3, 0.163E+3, 0.430E+2, 0.18286000E+1, 0.00000000E+0, + 0.56950600E+3, 0.163E+3, 0.440E+2, 0.18286000E+1, 0.00000000E+0, 0.62232140E+3, 0.163E+3, + 0.450E+2, 0.18286000E+1, 0.00000000E+0, 0.57599650E+3, 0.163E+3, 0.460E+2, 0.18286000E+1, + 0.00000000E+0, 0.48115240E+3, 0.163E+3, 0.470E+2, 0.18286000E+1, 0.00000000E+0, 0.50633030E+3, + 0.163E+3, 0.480E+2, 0.18286000E+1, 0.00000000E+0, 0.63922390E+3, 0.163E+3, 0.490E+2, + 0.18286000E+1, 0.00000000E+0, 0.58633170E+3, 0.163E+3, 0.500E+2, 0.18286000E+1, 0.00000000E+0, + 0.51859750E+3, 0.163E+3, 0.510E+2, 0.18286000E+1, 0.00000000E+0, 0.47906490E+3, 0.163E+3, + 0.520E+2, 0.18286000E+1, 0.00000000E+0, 0.43122670E+3, 0.163E+3, 0.530E+2, 0.18286000E+1, + 0.00000000E+0, 0.38614600E+3, 0.163E+3, 0.540E+2, 0.18286000E+1, 0.00000000E+0, 0.17518319E+4, + 0.163E+3, 0.550E+2, 0.18286000E+1, 0.00000000E+0, 0.15845929E+4, 0.163E+3, 0.560E+2, + 0.18286000E+1, 0.00000000E+0, 0.13809239E+4, 0.163E+3, 0.570E+2, 0.18286000E+1, 0.00000000E+0, + 0.61365370E+3, 0.163E+3, 0.580E+2, 0.18286000E+1, 0.27991000E+1, 0.14003880E+4, 0.163E+3, + 0.590E+2, 0.18286000E+1, 0.00000000E+0, 0.13429247E+4, 0.163E+3, 0.600E+2, 0.18286000E+1, + 0.00000000E+0, 0.13087424E+4, 0.163E+3, 0.610E+2, 0.18286000E+1, 0.00000000E+0, 0.12773568E+4, + 0.163E+3, 0.620E+2, 0.18286000E+1, 0.00000000E+0, 0.12495054E+4, 0.163E+3, 0.630E+2, + 0.18286000E+1, 0.00000000E+0, 0.97406900E+3, 0.163E+3, 0.640E+2, 0.18286000E+1, 0.00000000E+0, + 0.11111877E+4, 0.163E+3, 0.650E+2, 0.18286000E+1, 0.00000000E+0, 0.10699921E+4, 0.163E+3, + 0.660E+2, 0.18286000E+1, 0.00000000E+0, 0.11246771E+4, 0.163E+3, 0.670E+2, 0.18286000E+1, + 0.00000000E+0, 0.11005512E+4, 0.163E+3, 0.680E+2, 0.18286000E+1, 0.00000000E+0, 0.10786794E+4, + 0.163E+3, 0.690E+2, 0.18286000E+1, 0.00000000E+0, 0.10664387E+4, 0.163E+3, 0.700E+2, + 0.18286000E+1, 0.00000000E+0, 0.89316870E+3, 0.163E+3, 0.710E+2, 0.18286000E+1, 0.00000000E+0, + 0.87110070E+3, 0.163E+3, 0.720E+2, 0.18286000E+1, 0.00000000E+0, 0.79118140E+3, 0.163E+3, + 0.730E+2, 0.18286000E+1, 0.00000000E+0, 0.66583170E+3, 0.163E+3, 0.740E+2, 0.18286000E+1, + 0.00000000E+0, 0.67605760E+3, 0.163E+3, 0.750E+2, 0.18286000E+1, 0.00000000E+0, 0.61029470E+3, + 0.163E+3, 0.760E+2, 0.18286000E+1, 0.00000000E+0, 0.55718050E+3, 0.163E+3, 0.770E+2, + 0.18286000E+1, 0.00000000E+0, 0.46153520E+3, 0.163E+3, 0.780E+2, 0.18286000E+1, 0.00000000E+0, + 0.43073110E+3, 0.163E+3, 0.790E+2, 0.18286000E+1, 0.00000000E+0, 0.44232070E+3, 0.163E+3, + 0.800E+2, 0.18286000E+1, 0.00000000E+0, 0.65532760E+3, 0.163E+3, 0.810E+2, 0.18286000E+1, + 0.00000000E+0, 0.63664300E+3, 0.163E+3, 0.820E+2, 0.18286000E+1, 0.00000000E+0, 0.58099830E+3, + 0.163E+3, 0.830E+2, 0.18286000E+1, 0.00000000E+0, 0.55199550E+3, 0.163E+3, 0.840E+2, + 0.18286000E+1, 0.00000000E+0, 0.50719420E+3, 0.163E+3, 0.850E+2, 0.18286000E+1, 0.00000000E+0, + 0.46310600E+3, 0.163E+3, 0.860E+2, 0.18286000E+1, 0.00000000E+0, 0.16436058E+4, 0.163E+3, + 0.870E+2, 0.18286000E+1, 0.00000000E+0, 0.15604236E+4, 0.163E+3, 0.880E+2, 0.18286000E+1, + 0.00000000E+0, 0.13690464E+4, 0.163E+3, 0.890E+2, 0.18286000E+1, 0.00000000E+0, 0.12201277E+4, + 0.163E+3, 0.900E+2, 0.18286000E+1, 0.00000000E+0, 0.12166738E+4, 0.163E+3, 0.910E+2, + 0.18286000E+1, 0.00000000E+0, 0.11778612E+4, 0.163E+3, 0.920E+2, 0.18286000E+1, 0.00000000E+0, + 0.12191450E+4, 0.163E+3, 0.930E+2, 0.18286000E+1, 0.00000000E+0, 0.11794690E+4, 0.163E+3, + 0.940E+2, 0.18286000E+1, 0.00000000E+0, 0.63762900E+2, 0.163E+3, 0.101E+3, 0.18286000E+1, + 0.00000000E+0, 0.21174000E+3, 0.163E+3, 0.103E+3, 0.18286000E+1, 0.98650000E+0, 0.26923050E+3, + 0.163E+3, 0.104E+3, 0.18286000E+1, 0.98080000E+0, 0.20261480E+3, 0.163E+3, 0.105E+3, + 0.18286000E+1, 0.97060000E+0, 0.15147130E+3, 0.163E+3, 0.106E+3, 0.18286000E+1, 0.98680000E+0, + 0.10450970E+3, 0.163E+3, 0.107E+3, 0.18286000E+1, 0.99440000E+0, 0.75690800E+2, 0.163E+3, + 0.108E+3, 0.18286000E+1, 0.99250000E+0, 0.51755700E+2, 0.163E+3, 0.109E+3, 0.18286000E+1, + 0.99820000E+0, 0.31068640E+3, 0.163E+3, 0.111E+3, 0.18286000E+1, 0.96840000E+0, 0.48112160E+3, + 0.163E+3, 0.112E+3, 0.18286000E+1, 0.96280000E+0, 0.48324150E+3, 0.163E+3, 0.113E+3, + 0.18286000E+1, 0.96480000E+0, 0.38377640E+3, 0.163E+3, 0.114E+3, 0.18286000E+1, 0.95070000E+0, + 0.31171580E+3, 0.163E+3, 0.115E+3, 0.18286000E+1, 0.99470000E+0, 0.26222190E+3, 0.163E+3, + 0.116E+3, 0.18286000E+1, 0.99480000E+0, 0.21326140E+3, 0.163E+3, 0.117E+3, 0.18286000E+1, + 0.99720000E+0, 0.42593700E+3, 0.163E+3, 0.119E+3, 0.18286000E+1, 0.97670000E+0, 0.83127500E+3, + 0.163E+3, 0.120E+3, 0.18286000E+1, 0.98310000E+0, 0.42169690E+3, 0.163E+3, 0.121E+3, + 0.18286000E+1, 0.18627000E+1, 0.40700940E+3, 0.163E+3, 0.122E+3, 0.18286000E+1, 0.18299000E+1, + 0.39898160E+3, 0.163E+3, 0.123E+3, 0.18286000E+1, 0.19138000E+1, 0.39579870E+3, 0.163E+3, + 0.124E+3, 0.18286000E+1, 0.18269000E+1, 0.36204930E+3, 0.163E+3, 0.125E+3, 0.18286000E+1, + 0.16406000E+1, 0.33456150E+3, 0.163E+3, 0.126E+3, 0.18286000E+1, 0.16483000E+1, 0.31919930E+3, + 0.163E+3, 0.127E+3, 0.18286000E+1, 0.17149000E+1, 0.31222210E+3, 0.163E+3, 0.128E+3, + 0.18286000E+1, 0.17937000E+1, 0.30989590E+3, 0.163E+3, 0.129E+3, 0.18286000E+1, 0.95760000E+0, + 0.28840040E+3, 0.163E+3, 0.130E+3, 0.18286000E+1, 0.19419000E+1, 0.47803960E+3, 0.163E+3, + 0.131E+3, 0.18286000E+1, 0.96010000E+0, 0.41601900E+3, 0.163E+3, 0.132E+3, 0.18286000E+1, + 0.94340000E+0, 0.37044180E+3, 0.163E+3, 0.133E+3, 0.18286000E+1, 0.98890000E+0, 0.33685390E+3, + 0.163E+3, 0.134E+3, 0.18286000E+1, 0.99010000E+0, 0.29542100E+3, 0.163E+3, 0.135E+3, + 0.18286000E+1, 0.99740000E+0, 0.50722850E+3, 0.163E+3, 0.137E+3, 0.18286000E+1, 0.97380000E+0, + 0.10128078E+4, 0.163E+3, 0.138E+3, 0.18286000E+1, 0.98010000E+0, 0.76200330E+3, 0.163E+3, + 0.139E+3, 0.18286000E+1, 0.19153000E+1, 0.55829510E+3, 0.163E+3, 0.140E+3, 0.18286000E+1, + 0.19355000E+1, 0.56398160E+3, 0.163E+3, 0.141E+3, 0.18286000E+1, 0.19545000E+1, 0.52490850E+3, + 0.163E+3, 0.142E+3, 0.18286000E+1, 0.19420000E+1, 0.59323860E+3, 0.163E+3, 0.143E+3, + 0.18286000E+1, 0.16682000E+1, 0.45513890E+3, 0.163E+3, 0.144E+3, 0.18286000E+1, 0.18584000E+1, + 0.42567220E+3, 0.163E+3, 0.145E+3, 0.18286000E+1, 0.19003000E+1, 0.39496580E+3, 0.163E+3, + 0.146E+3, 0.18286000E+1, 0.18630000E+1, 0.38242790E+3, 0.163E+3, 0.147E+3, 0.18286000E+1, + 0.96790000E+0, 0.37661900E+3, 0.163E+3, 0.148E+3, 0.18286000E+1, 0.19539000E+1, 0.60761490E+3, + 0.163E+3, 0.149E+3, 0.18286000E+1, 0.96330000E+0, 0.54518900E+3, 0.163E+3, 0.150E+3, + 0.18286000E+1, 0.95140000E+0, 0.50775680E+3, 0.163E+3, 0.151E+3, 0.18286000E+1, 0.97490000E+0, + 0.47858010E+3, 0.163E+3, 0.152E+3, 0.18286000E+1, 0.98110000E+0, 0.43529630E+3, 0.163E+3, + 0.153E+3, 0.18286000E+1, 0.99680000E+0, 0.59594990E+3, 0.163E+3, 0.155E+3, 0.18286000E+1, + 0.99090000E+0, 0.13176067E+4, 0.163E+3, 0.156E+3, 0.18286000E+1, 0.97970000E+0, 0.96582370E+3, + 0.163E+3, 0.157E+3, 0.18286000E+1, 0.19373000E+1, 0.59490700E+3, 0.163E+3, 0.159E+3, + 0.18286000E+1, 0.29425000E+1, 0.58256410E+3, 0.163E+3, 0.160E+3, 0.18286000E+1, 0.29455000E+1, + 0.56390150E+3, 0.163E+3, 0.161E+3, 0.18286000E+1, 0.29413000E+1, 0.56731710E+3, 0.163E+3, + 0.162E+3, 0.18286000E+1, 0.29300000E+1, 0.54902810E+3, 0.163E+3, 0.163E+3, 0.18286000E+1, + 0.18286000E+1, 0.41327500E+2, 0.164E+3, 0.100E+1, 0.28732000E+1, 0.91180000E+0, 0.27159500E+2, + 0.164E+3, 0.200E+1, 0.28732000E+1, 0.00000000E+0, 0.65909240E+3, 0.164E+3, 0.300E+1, + 0.28732000E+1, 0.00000000E+0, 0.37646100E+3, 0.164E+3, 0.400E+1, 0.28732000E+1, 0.00000000E+0, + 0.25184240E+3, 0.164E+3, 0.500E+1, 0.28732000E+1, 0.00000000E+0, 0.16931590E+3, 0.164E+3, + 0.600E+1, 0.28732000E+1, 0.00000000E+0, 0.11799770E+3, 0.164E+3, 0.700E+1, 0.28732000E+1, + 0.00000000E+0, 0.89135900E+2, 0.164E+3, 0.800E+1, 0.28732000E+1, 0.00000000E+0, 0.67403000E+2, + 0.164E+3, 0.900E+1, 0.28732000E+1, 0.00000000E+0, 0.51775600E+2, 0.164E+3, 0.100E+2, + 0.28732000E+1, 0.00000000E+0, 0.78761870E+3, 0.164E+3, 0.110E+2, 0.28732000E+1, 0.00000000E+0, + 0.60103840E+3, 0.164E+3, 0.120E+2, 0.28732000E+1, 0.00000000E+0, 0.55215450E+3, 0.164E+3, + 0.130E+2, 0.28732000E+1, 0.00000000E+0, 0.43306620E+3, 0.164E+3, 0.140E+2, 0.28732000E+1, + 0.00000000E+0, 0.33637000E+3, 0.164E+3, 0.150E+2, 0.28732000E+1, 0.00000000E+0, 0.27845510E+3, + 0.164E+3, 0.160E+2, 0.28732000E+1, 0.00000000E+0, 0.22691090E+3, 0.164E+3, 0.170E+2, + 0.28732000E+1, 0.00000000E+0, 0.18526210E+3, 0.164E+3, 0.180E+2, 0.28732000E+1, 0.00000000E+0, + 0.12927733E+4, 0.164E+3, 0.190E+2, 0.28732000E+1, 0.00000000E+0, 0.10597192E+4, 0.164E+3, + 0.200E+2, 0.28732000E+1, 0.00000000E+0, 0.87413140E+3, 0.164E+3, 0.210E+2, 0.28732000E+1, + 0.00000000E+0, 0.84288400E+3, 0.164E+3, 0.220E+2, 0.28732000E+1, 0.00000000E+0, 0.77118400E+3, + 0.164E+3, 0.230E+2, 0.28732000E+1, 0.00000000E+0, 0.60734870E+3, 0.164E+3, 0.240E+2, + 0.28732000E+1, 0.00000000E+0, 0.66313130E+3, 0.164E+3, 0.250E+2, 0.28732000E+1, 0.00000000E+0, + 0.52025690E+3, 0.164E+3, 0.260E+2, 0.28732000E+1, 0.00000000E+0, 0.55050450E+3, 0.164E+3, + 0.270E+2, 0.28732000E+1, 0.00000000E+0, 0.56760260E+3, 0.164E+3, 0.280E+2, 0.28732000E+1, + 0.00000000E+0, 0.43508290E+3, 0.164E+3, 0.290E+2, 0.28732000E+1, 0.00000000E+0, 0.44549820E+3, + 0.164E+3, 0.300E+2, 0.28732000E+1, 0.00000000E+0, 0.52813050E+3, 0.164E+3, 0.310E+2, + 0.28732000E+1, 0.00000000E+0, 0.46406710E+3, 0.164E+3, 0.320E+2, 0.28732000E+1, 0.00000000E+0, + 0.39450330E+3, 0.164E+3, 0.330E+2, 0.28732000E+1, 0.00000000E+0, 0.35325210E+3, 0.164E+3, + 0.340E+2, 0.28732000E+1, 0.00000000E+0, 0.30847630E+3, 0.164E+3, 0.350E+2, 0.28732000E+1, + 0.00000000E+0, 0.26774640E+3, 0.164E+3, 0.360E+2, 0.28732000E+1, 0.00000000E+0, 0.14479360E+4, + 0.164E+3, 0.370E+2, 0.28732000E+1, 0.00000000E+0, 0.12628491E+4, 0.164E+3, 0.380E+2, + 0.28732000E+1, 0.00000000E+0, 0.11030742E+4, 0.164E+3, 0.390E+2, 0.28732000E+1, 0.00000000E+0, + 0.98959400E+3, 0.164E+3, 0.400E+2, 0.28732000E+1, 0.00000000E+0, 0.90127470E+3, 0.164E+3, + 0.410E+2, 0.28732000E+1, 0.00000000E+0, 0.69429580E+3, 0.164E+3, 0.420E+2, 0.28732000E+1, + 0.00000000E+0, 0.77529730E+3, 0.164E+3, 0.430E+2, 0.28732000E+1, 0.00000000E+0, 0.58924130E+3, + 0.164E+3, 0.440E+2, 0.28732000E+1, 0.00000000E+0, 0.64413130E+3, 0.164E+3, 0.450E+2, + 0.28732000E+1, 0.00000000E+0, 0.59686540E+3, 0.164E+3, 0.460E+2, 0.28732000E+1, 0.00000000E+0, + 0.49784100E+3, 0.164E+3, 0.470E+2, 0.28732000E+1, 0.00000000E+0, 0.52541210E+3, 0.164E+3, + 0.480E+2, 0.28732000E+1, 0.00000000E+0, 0.66098150E+3, 0.164E+3, 0.490E+2, 0.28732000E+1, + 0.00000000E+0, 0.60940140E+3, 0.164E+3, 0.500E+2, 0.28732000E+1, 0.00000000E+0, 0.54146000E+3, + 0.164E+3, 0.510E+2, 0.28732000E+1, 0.00000000E+0, 0.50144410E+3, 0.164E+3, 0.520E+2, + 0.28732000E+1, 0.00000000E+0, 0.45249160E+3, 0.164E+3, 0.530E+2, 0.28732000E+1, 0.00000000E+0, + 0.40604790E+3, 0.164E+3, 0.540E+2, 0.28732000E+1, 0.00000000E+0, 0.17636917E+4, 0.164E+3, + 0.550E+2, 0.28732000E+1, 0.00000000E+0, 0.16113765E+4, 0.164E+3, 0.560E+2, 0.28732000E+1, + 0.00000000E+0, 0.14116458E+4, 0.164E+3, 0.570E+2, 0.28732000E+1, 0.00000000E+0, 0.63999700E+3, + 0.164E+3, 0.580E+2, 0.28732000E+1, 0.27991000E+1, 0.14263405E+4, 0.164E+3, 0.590E+2, + 0.28732000E+1, 0.00000000E+0, 0.13689945E+4, 0.164E+3, 0.600E+2, 0.28732000E+1, 0.00000000E+0, + 0.13344823E+4, 0.164E+3, 0.610E+2, 0.28732000E+1, 0.00000000E+0, 0.13027626E+4, 0.164E+3, + 0.620E+2, 0.28732000E+1, 0.00000000E+0, 0.12746283E+4, 0.164E+3, 0.630E+2, 0.28732000E+1, + 0.00000000E+0, 0.99906170E+3, 0.164E+3, 0.640E+2, 0.28732000E+1, 0.00000000E+0, 0.11300310E+4, + 0.164E+3, 0.650E+2, 0.28732000E+1, 0.00000000E+0, 0.10892614E+4, 0.164E+3, 0.660E+2, + 0.28732000E+1, 0.00000000E+0, 0.11488304E+4, 0.164E+3, 0.670E+2, 0.28732000E+1, 0.00000000E+0, + 0.11243657E+4, 0.164E+3, 0.680E+2, 0.28732000E+1, 0.00000000E+0, 0.11022614E+4, 0.164E+3, + 0.690E+2, 0.28732000E+1, 0.00000000E+0, 0.10895200E+4, 0.164E+3, 0.700E+2, 0.28732000E+1, + 0.00000000E+0, 0.91593800E+3, 0.164E+3, 0.710E+2, 0.28732000E+1, 0.00000000E+0, 0.89812800E+3, + 0.164E+3, 0.720E+2, 0.28732000E+1, 0.00000000E+0, 0.81811890E+3, 0.164E+3, 0.730E+2, + 0.28732000E+1, 0.00000000E+0, 0.68977370E+3, 0.164E+3, 0.740E+2, 0.28732000E+1, 0.00000000E+0, + 0.70124130E+3, 0.164E+3, 0.750E+2, 0.28732000E+1, 0.00000000E+0, 0.63451700E+3, 0.164E+3, + 0.760E+2, 0.28732000E+1, 0.00000000E+0, 0.58034520E+3, 0.164E+3, 0.770E+2, 0.28732000E+1, + 0.00000000E+0, 0.48140120E+3, 0.164E+3, 0.780E+2, 0.28732000E+1, 0.00000000E+0, 0.44951810E+3, + 0.164E+3, 0.790E+2, 0.28732000E+1, 0.00000000E+0, 0.46216400E+3, 0.164E+3, 0.800E+2, + 0.28732000E+1, 0.00000000E+0, 0.67804940E+3, 0.164E+3, 0.810E+2, 0.28732000E+1, 0.00000000E+0, + 0.66143650E+3, 0.164E+3, 0.820E+2, 0.28732000E+1, 0.00000000E+0, 0.60616090E+3, 0.164E+3, + 0.830E+2, 0.28732000E+1, 0.00000000E+0, 0.57721150E+3, 0.164E+3, 0.840E+2, 0.28732000E+1, + 0.00000000E+0, 0.53169500E+3, 0.164E+3, 0.850E+2, 0.28732000E+1, 0.00000000E+0, 0.48648120E+3, + 0.164E+3, 0.860E+2, 0.28732000E+1, 0.00000000E+0, 0.16615027E+4, 0.164E+3, 0.870E+2, + 0.28732000E+1, 0.00000000E+0, 0.15910020E+4, 0.164E+3, 0.880E+2, 0.28732000E+1, 0.00000000E+0, + 0.14026190E+4, 0.164E+3, 0.890E+2, 0.28732000E+1, 0.00000000E+0, 0.12565351E+4, 0.164E+3, + 0.900E+2, 0.28732000E+1, 0.00000000E+0, 0.12494197E+4, 0.164E+3, 0.910E+2, 0.28732000E+1, + 0.00000000E+0, 0.12096721E+4, 0.164E+3, 0.920E+2, 0.28732000E+1, 0.00000000E+0, 0.12478750E+4, + 0.164E+3, 0.930E+2, 0.28732000E+1, 0.00000000E+0, 0.12080168E+4, 0.164E+3, 0.940E+2, + 0.28732000E+1, 0.00000000E+0, 0.66823500E+2, 0.164E+3, 0.101E+3, 0.28732000E+1, 0.00000000E+0, + 0.21861950E+3, 0.164E+3, 0.103E+3, 0.28732000E+1, 0.98650000E+0, 0.27850800E+3, 0.164E+3, + 0.104E+3, 0.28732000E+1, 0.98080000E+0, 0.21154850E+3, 0.164E+3, 0.105E+3, 0.28732000E+1, + 0.97060000E+0, 0.15883010E+3, 0.164E+3, 0.106E+3, 0.28732000E+1, 0.98680000E+0, 0.11002650E+3, + 0.164E+3, 0.107E+3, 0.28732000E+1, 0.99440000E+0, 0.79894900E+2, 0.164E+3, 0.108E+3, + 0.28732000E+1, 0.99250000E+0, 0.54760000E+2, 0.164E+3, 0.109E+3, 0.28732000E+1, 0.99820000E+0, + 0.31995720E+3, 0.164E+3, 0.111E+3, 0.28732000E+1, 0.96840000E+0, 0.49511470E+3, 0.164E+3, + 0.112E+3, 0.28732000E+1, 0.96280000E+0, 0.49998200E+3, 0.164E+3, 0.113E+3, 0.28732000E+1, + 0.96480000E+0, 0.39998160E+3, 0.164E+3, 0.114E+3, 0.28732000E+1, 0.95070000E+0, 0.32645920E+3, + 0.164E+3, 0.115E+3, 0.28732000E+1, 0.99470000E+0, 0.27540540E+3, 0.164E+3, 0.116E+3, + 0.28732000E+1, 0.99480000E+0, 0.22456980E+3, 0.164E+3, 0.117E+3, 0.28732000E+1, 0.99720000E+0, + 0.43997650E+3, 0.164E+3, 0.119E+3, 0.28732000E+1, 0.97670000E+0, 0.84744860E+3, 0.164E+3, + 0.120E+3, 0.28732000E+1, 0.98310000E+0, 0.43855500E+3, 0.164E+3, 0.121E+3, 0.28732000E+1, + 0.18627000E+1, 0.42330690E+3, 0.164E+3, 0.122E+3, 0.28732000E+1, 0.18299000E+1, 0.41487410E+3, + 0.164E+3, 0.123E+3, 0.28732000E+1, 0.19138000E+1, 0.41122300E+3, 0.164E+3, 0.124E+3, + 0.28732000E+1, 0.18269000E+1, 0.37757470E+3, 0.164E+3, 0.125E+3, 0.28732000E+1, 0.16406000E+1, + 0.34920950E+3, 0.164E+3, 0.126E+3, 0.28732000E+1, 0.16483000E+1, 0.33312400E+3, 0.164E+3, + 0.127E+3, 0.28732000E+1, 0.17149000E+1, 0.32573280E+3, 0.164E+3, 0.128E+3, 0.28732000E+1, + 0.17937000E+1, 0.32237280E+3, 0.164E+3, 0.129E+3, 0.28732000E+1, 0.95760000E+0, 0.30155830E+3, + 0.164E+3, 0.130E+3, 0.28732000E+1, 0.19419000E+1, 0.49556680E+3, 0.164E+3, 0.131E+3, + 0.28732000E+1, 0.96010000E+0, 0.43376750E+3, 0.164E+3, 0.132E+3, 0.28732000E+1, 0.94340000E+0, + 0.38773360E+3, 0.164E+3, 0.133E+3, 0.28732000E+1, 0.98890000E+0, 0.35339890E+3, 0.164E+3, + 0.134E+3, 0.28732000E+1, 0.99010000E+0, 0.31065690E+3, 0.164E+3, 0.135E+3, 0.28732000E+1, + 0.99740000E+0, 0.52453740E+3, 0.164E+3, 0.137E+3, 0.28732000E+1, 0.97380000E+0, 0.10315808E+4, + 0.164E+3, 0.138E+3, 0.28732000E+1, 0.98010000E+0, 0.78404790E+3, 0.164E+3, 0.139E+3, + 0.28732000E+1, 0.19153000E+1, 0.58016290E+3, 0.164E+3, 0.140E+3, 0.28732000E+1, 0.19355000E+1, + 0.58594010E+3, 0.164E+3, 0.141E+3, 0.28732000E+1, 0.19545000E+1, 0.54592550E+3, 0.164E+3, + 0.142E+3, 0.28732000E+1, 0.19420000E+1, 0.61398170E+3, 0.164E+3, 0.143E+3, 0.28732000E+1, + 0.16682000E+1, 0.47485900E+3, 0.164E+3, 0.144E+3, 0.28732000E+1, 0.18584000E+1, 0.44414170E+3, + 0.164E+3, 0.145E+3, 0.28732000E+1, 0.19003000E+1, 0.41225320E+3, 0.164E+3, 0.146E+3, + 0.28732000E+1, 0.18630000E+1, 0.39892850E+3, 0.164E+3, 0.147E+3, 0.28732000E+1, 0.96790000E+0, + 0.39401610E+3, 0.164E+3, 0.148E+3, 0.28732000E+1, 0.19539000E+1, 0.62938940E+3, 0.164E+3, + 0.149E+3, 0.28732000E+1, 0.96330000E+0, 0.56763680E+3, 0.164E+3, 0.150E+3, 0.28732000E+1, + 0.95140000E+0, 0.53044640E+3, 0.164E+3, 0.151E+3, 0.28732000E+1, 0.97490000E+0, 0.50102050E+3, + 0.164E+3, 0.152E+3, 0.28732000E+1, 0.98110000E+0, 0.45675320E+3, 0.164E+3, 0.153E+3, + 0.28732000E+1, 0.99680000E+0, 0.61885080E+3, 0.164E+3, 0.155E+3, 0.28732000E+1, 0.99090000E+0, + 0.13390290E+4, 0.164E+3, 0.156E+3, 0.28732000E+1, 0.97970000E+0, 0.99282930E+3, 0.164E+3, + 0.157E+3, 0.28732000E+1, 0.19373000E+1, 0.62058810E+3, 0.164E+3, 0.159E+3, 0.28732000E+1, + 0.29425000E+1, 0.60773400E+3, 0.164E+3, 0.160E+3, 0.28732000E+1, 0.29455000E+1, 0.58838130E+3, + 0.164E+3, 0.161E+3, 0.28732000E+1, 0.29413000E+1, 0.59153680E+3, 0.164E+3, 0.162E+3, + 0.28732000E+1, 0.29300000E+1, 0.57104500E+3, 0.164E+3, 0.163E+3, 0.28732000E+1, 0.18286000E+1, + 0.59536280E+3, 0.164E+3, 0.164E+3, 0.28732000E+1, 0.28732000E+1, 0.38915000E+2, 0.165E+3, + 0.100E+1, 0.29086000E+1, 0.91180000E+0, 0.25669500E+2, 0.165E+3, 0.200E+1, 0.29086000E+1, + 0.00000000E+0, 0.61281660E+3, 0.165E+3, 0.300E+1, 0.29086000E+1, 0.00000000E+0, 0.35207530E+3, + 0.165E+3, 0.400E+1, 0.29086000E+1, 0.00000000E+0, 0.23626590E+3, 0.165E+3, 0.500E+1, + 0.29086000E+1, 0.00000000E+0, 0.15924220E+3, 0.165E+3, 0.600E+1, 0.29086000E+1, 0.00000000E+0, + 0.11120430E+3, 0.165E+3, 0.700E+1, 0.29086000E+1, 0.00000000E+0, 0.84136300E+2, 0.165E+3, + 0.800E+1, 0.29086000E+1, 0.00000000E+0, 0.63715200E+2, 0.165E+3, 0.900E+1, 0.29086000E+1, + 0.00000000E+0, 0.49005000E+2, 0.165E+3, 0.100E+2, 0.29086000E+1, 0.00000000E+0, 0.73264570E+3, + 0.165E+3, 0.110E+2, 0.29086000E+1, 0.00000000E+0, 0.56159910E+3, 0.165E+3, 0.120E+2, + 0.29086000E+1, 0.00000000E+0, 0.51672630E+3, 0.165E+3, 0.130E+2, 0.29086000E+1, 0.00000000E+0, + 0.40615220E+3, 0.165E+3, 0.140E+2, 0.29086000E+1, 0.00000000E+0, 0.31605550E+3, 0.165E+3, + 0.150E+2, 0.29086000E+1, 0.00000000E+0, 0.26197720E+3, 0.165E+3, 0.160E+2, 0.29086000E+1, + 0.00000000E+0, 0.21376170E+3, 0.165E+3, 0.170E+2, 0.29086000E+1, 0.00000000E+0, 0.17473800E+3, + 0.165E+3, 0.180E+2, 0.29086000E+1, 0.00000000E+0, 0.12013307E+4, 0.165E+3, 0.190E+2, + 0.29086000E+1, 0.00000000E+0, 0.98850950E+3, 0.165E+3, 0.200E+2, 0.29086000E+1, 0.00000000E+0, + 0.81603910E+3, 0.165E+3, 0.210E+2, 0.29086000E+1, 0.00000000E+0, 0.78743780E+3, 0.165E+3, + 0.220E+2, 0.29086000E+1, 0.00000000E+0, 0.72076790E+3, 0.165E+3, 0.230E+2, 0.29086000E+1, + 0.00000000E+0, 0.56775360E+3, 0.165E+3, 0.240E+2, 0.29086000E+1, 0.00000000E+0, 0.62017110E+3, + 0.165E+3, 0.250E+2, 0.29086000E+1, 0.00000000E+0, 0.48669710E+3, 0.165E+3, 0.260E+2, + 0.29086000E+1, 0.00000000E+0, 0.51538390E+3, 0.165E+3, 0.270E+2, 0.29086000E+1, 0.00000000E+0, + 0.53115950E+3, 0.165E+3, 0.280E+2, 0.29086000E+1, 0.00000000E+0, 0.40724140E+3, 0.165E+3, + 0.290E+2, 0.29086000E+1, 0.00000000E+0, 0.41747630E+3, 0.165E+3, 0.300E+2, 0.29086000E+1, + 0.00000000E+0, 0.49461700E+3, 0.165E+3, 0.310E+2, 0.29086000E+1, 0.00000000E+0, 0.43533390E+3, + 0.165E+3, 0.320E+2, 0.29086000E+1, 0.00000000E+0, 0.37064210E+3, 0.165E+3, 0.330E+2, + 0.29086000E+1, 0.00000000E+0, 0.33221730E+3, 0.165E+3, 0.340E+2, 0.29086000E+1, 0.00000000E+0, + 0.29041790E+3, 0.165E+3, 0.350E+2, 0.29086000E+1, 0.00000000E+0, 0.25233250E+3, 0.165E+3, + 0.360E+2, 0.29086000E+1, 0.00000000E+0, 0.13459552E+4, 0.165E+3, 0.370E+2, 0.29086000E+1, + 0.00000000E+0, 0.11778523E+4, 0.165E+3, 0.380E+2, 0.29086000E+1, 0.00000000E+0, 0.10302577E+4, + 0.165E+3, 0.390E+2, 0.29086000E+1, 0.00000000E+0, 0.92507300E+3, 0.165E+3, 0.400E+2, + 0.29086000E+1, 0.00000000E+0, 0.84300140E+3, 0.165E+3, 0.410E+2, 0.29086000E+1, 0.00000000E+0, + 0.65010950E+3, 0.165E+3, 0.420E+2, 0.29086000E+1, 0.00000000E+0, 0.72565600E+3, 0.165E+3, + 0.430E+2, 0.29086000E+1, 0.00000000E+0, 0.55217930E+3, 0.165E+3, 0.440E+2, 0.29086000E+1, + 0.00000000E+0, 0.60356690E+3, 0.165E+3, 0.450E+2, 0.29086000E+1, 0.00000000E+0, 0.55949210E+3, + 0.165E+3, 0.460E+2, 0.29086000E+1, 0.00000000E+0, 0.46665970E+3, 0.165E+3, 0.470E+2, + 0.29086000E+1, 0.00000000E+0, 0.49276250E+3, 0.165E+3, 0.480E+2, 0.29086000E+1, 0.00000000E+0, + 0.61913660E+3, 0.165E+3, 0.490E+2, 0.29086000E+1, 0.00000000E+0, 0.57157510E+3, 0.165E+3, + 0.500E+2, 0.29086000E+1, 0.00000000E+0, 0.50851710E+3, 0.165E+3, 0.510E+2, 0.29086000E+1, + 0.00000000E+0, 0.47131940E+3, 0.165E+3, 0.520E+2, 0.29086000E+1, 0.00000000E+0, 0.42569420E+3, + 0.165E+3, 0.530E+2, 0.29086000E+1, 0.00000000E+0, 0.38234290E+3, 0.165E+3, 0.540E+2, + 0.29086000E+1, 0.00000000E+0, 0.16393995E+4, 0.165E+3, 0.550E+2, 0.29086000E+1, 0.00000000E+0, + 0.15021922E+4, 0.165E+3, 0.560E+2, 0.29086000E+1, 0.00000000E+0, 0.13178387E+4, 0.165E+3, + 0.570E+2, 0.29086000E+1, 0.00000000E+0, 0.60095180E+3, 0.165E+3, 0.580E+2, 0.29086000E+1, + 0.27991000E+1, 0.13303810E+4, 0.165E+3, 0.590E+2, 0.29086000E+1, 0.00000000E+0, 0.12772241E+4, + 0.165E+3, 0.600E+2, 0.29086000E+1, 0.00000000E+0, 0.12451109E+4, 0.165E+3, 0.610E+2, + 0.29086000E+1, 0.00000000E+0, 0.12155853E+4, 0.165E+3, 0.620E+2, 0.29086000E+1, 0.00000000E+0, + 0.11893991E+4, 0.165E+3, 0.630E+2, 0.29086000E+1, 0.00000000E+0, 0.93372280E+3, 0.165E+3, + 0.640E+2, 0.29086000E+1, 0.00000000E+0, 0.10536587E+4, 0.165E+3, 0.650E+2, 0.29086000E+1, + 0.00000000E+0, 0.10158840E+4, 0.165E+3, 0.660E+2, 0.29086000E+1, 0.00000000E+0, 0.10723978E+4, + 0.165E+3, 0.670E+2, 0.29086000E+1, 0.00000000E+0, 0.10495999E+4, 0.165E+3, 0.680E+2, + 0.29086000E+1, 0.00000000E+0, 0.10290199E+4, 0.165E+3, 0.690E+2, 0.29086000E+1, 0.00000000E+0, + 0.10170572E+4, 0.165E+3, 0.700E+2, 0.29086000E+1, 0.00000000E+0, 0.85590310E+3, 0.165E+3, + 0.710E+2, 0.29086000E+1, 0.00000000E+0, 0.84038840E+3, 0.165E+3, 0.720E+2, 0.29086000E+1, + 0.00000000E+0, 0.76618830E+3, 0.165E+3, 0.730E+2, 0.29086000E+1, 0.00000000E+0, 0.64647490E+3, + 0.165E+3, 0.740E+2, 0.29086000E+1, 0.00000000E+0, 0.65742490E+3, 0.165E+3, 0.750E+2, + 0.29086000E+1, 0.00000000E+0, 0.59532710E+3, 0.165E+3, 0.760E+2, 0.29086000E+1, 0.00000000E+0, + 0.54484580E+3, 0.165E+3, 0.770E+2, 0.29086000E+1, 0.00000000E+0, 0.45230750E+3, 0.165E+3, + 0.780E+2, 0.29086000E+1, 0.00000000E+0, 0.42248760E+3, 0.165E+3, 0.790E+2, 0.29086000E+1, + 0.00000000E+0, 0.43446390E+3, 0.165E+3, 0.800E+2, 0.29086000E+1, 0.00000000E+0, 0.63542770E+3, + 0.165E+3, 0.810E+2, 0.29086000E+1, 0.00000000E+0, 0.62048770E+3, 0.165E+3, 0.820E+2, + 0.29086000E+1, 0.00000000E+0, 0.56929560E+3, 0.165E+3, 0.830E+2, 0.29086000E+1, 0.00000000E+0, + 0.54247560E+3, 0.165E+3, 0.840E+2, 0.29086000E+1, 0.00000000E+0, 0.50012070E+3, 0.165E+3, + 0.850E+2, 0.29086000E+1, 0.00000000E+0, 0.45795880E+3, 0.165E+3, 0.860E+2, 0.29086000E+1, + 0.00000000E+0, 0.15463042E+4, 0.165E+3, 0.870E+2, 0.29086000E+1, 0.00000000E+0, 0.14842932E+4, + 0.165E+3, 0.880E+2, 0.29086000E+1, 0.00000000E+0, 0.13102595E+4, 0.165E+3, 0.890E+2, + 0.29086000E+1, 0.00000000E+0, 0.11755520E+4, 0.165E+3, 0.900E+2, 0.29086000E+1, 0.00000000E+0, + 0.11681093E+4, 0.165E+3, 0.910E+2, 0.29086000E+1, 0.00000000E+0, 0.11310127E+4, 0.165E+3, + 0.920E+2, 0.29086000E+1, 0.00000000E+0, 0.11657289E+4, 0.165E+3, 0.930E+2, 0.29086000E+1, + 0.00000000E+0, 0.11286850E+4, 0.165E+3, 0.940E+2, 0.29086000E+1, 0.00000000E+0, 0.62797100E+2, + 0.165E+3, 0.101E+3, 0.29086000E+1, 0.00000000E+0, 0.20455140E+3, 0.165E+3, 0.103E+3, + 0.29086000E+1, 0.98650000E+0, 0.26072450E+3, 0.165E+3, 0.104E+3, 0.29086000E+1, 0.98080000E+0, + 0.19860250E+3, 0.165E+3, 0.105E+3, 0.29086000E+1, 0.97060000E+0, 0.14938110E+3, 0.165E+3, + 0.106E+3, 0.29086000E+1, 0.98680000E+0, 0.10370340E+3, 0.165E+3, 0.107E+3, 0.29086000E+1, + 0.99440000E+0, 0.75446500E+2, 0.165E+3, 0.108E+3, 0.29086000E+1, 0.99250000E+0, 0.51841400E+2, + 0.165E+3, 0.109E+3, 0.29086000E+1, 0.99820000E+0, 0.29924680E+3, 0.165E+3, 0.111E+3, + 0.29086000E+1, 0.96840000E+0, 0.46288270E+3, 0.165E+3, 0.112E+3, 0.29086000E+1, 0.96280000E+0, + 0.46808680E+3, 0.165E+3, 0.113E+3, 0.29086000E+1, 0.96480000E+0, 0.37524590E+3, 0.165E+3, + 0.114E+3, 0.29086000E+1, 0.95070000E+0, 0.30676780E+3, 0.165E+3, 0.115E+3, 0.29086000E+1, + 0.99470000E+0, 0.25910430E+3, 0.165E+3, 0.116E+3, 0.29086000E+1, 0.99480000E+0, 0.21155470E+3, + 0.165E+3, 0.117E+3, 0.29086000E+1, 0.99720000E+0, 0.41206550E+3, 0.165E+3, 0.119E+3, + 0.29086000E+1, 0.97670000E+0, 0.79052270E+3, 0.165E+3, 0.120E+3, 0.29086000E+1, 0.98310000E+0, + 0.41139690E+3, 0.165E+3, 0.121E+3, 0.29086000E+1, 0.18627000E+1, 0.39711900E+3, 0.165E+3, + 0.122E+3, 0.29086000E+1, 0.18299000E+1, 0.38920800E+3, 0.165E+3, 0.123E+3, 0.29086000E+1, + 0.19138000E+1, 0.38571070E+3, 0.165E+3, 0.124E+3, 0.29086000E+1, 0.18269000E+1, 0.35449400E+3, + 0.165E+3, 0.125E+3, 0.29086000E+1, 0.16406000E+1, 0.32797050E+3, 0.165E+3, 0.126E+3, + 0.29086000E+1, 0.16483000E+1, 0.31287350E+3, 0.165E+3, 0.127E+3, 0.29086000E+1, 0.17149000E+1, + 0.30591120E+3, 0.165E+3, 0.128E+3, 0.29086000E+1, 0.17937000E+1, 0.30254470E+3, 0.165E+3, + 0.129E+3, 0.29086000E+1, 0.95760000E+0, 0.28337650E+3, 0.165E+3, 0.130E+3, 0.29086000E+1, + 0.19419000E+1, 0.46432020E+3, 0.165E+3, 0.131E+3, 0.29086000E+1, 0.96010000E+0, 0.40707180E+3, + 0.165E+3, 0.132E+3, 0.29086000E+1, 0.94340000E+0, 0.36431690E+3, 0.165E+3, 0.133E+3, + 0.29086000E+1, 0.98890000E+0, 0.33235190E+3, 0.165E+3, 0.134E+3, 0.29086000E+1, 0.99010000E+0, + 0.29245640E+3, 0.165E+3, 0.135E+3, 0.29086000E+1, 0.99740000E+0, 0.49146210E+3, 0.165E+3, + 0.137E+3, 0.29086000E+1, 0.97380000E+0, 0.96209720E+3, 0.165E+3, 0.138E+3, 0.29086000E+1, + 0.98010000E+0, 0.73326220E+3, 0.165E+3, 0.139E+3, 0.29086000E+1, 0.19153000E+1, 0.54416190E+3, + 0.165E+3, 0.140E+3, 0.29086000E+1, 0.19355000E+1, 0.54959500E+3, 0.165E+3, 0.141E+3, + 0.29086000E+1, 0.19545000E+1, 0.51226070E+3, 0.165E+3, 0.142E+3, 0.29086000E+1, 0.19420000E+1, + 0.57535150E+3, 0.165E+3, 0.143E+3, 0.29086000E+1, 0.16682000E+1, 0.44604100E+3, 0.165E+3, + 0.144E+3, 0.29086000E+1, 0.18584000E+1, 0.41725200E+3, 0.165E+3, 0.145E+3, 0.29086000E+1, + 0.19003000E+1, 0.38739090E+3, 0.165E+3, 0.146E+3, 0.29086000E+1, 0.18630000E+1, 0.37483220E+3, + 0.165E+3, 0.147E+3, 0.29086000E+1, 0.96790000E+0, 0.37045920E+3, 0.165E+3, 0.148E+3, + 0.29086000E+1, 0.19539000E+1, 0.58983000E+3, 0.165E+3, 0.149E+3, 0.29086000E+1, 0.96330000E+0, + 0.53268550E+3, 0.165E+3, 0.150E+3, 0.29086000E+1, 0.95140000E+0, 0.49826300E+3, 0.165E+3, + 0.151E+3, 0.29086000E+1, 0.97490000E+0, 0.47094350E+3, 0.165E+3, 0.152E+3, 0.29086000E+1, + 0.98110000E+0, 0.42969450E+3, 0.165E+3, 0.153E+3, 0.29086000E+1, 0.99680000E+0, 0.58038410E+3, + 0.165E+3, 0.155E+3, 0.29086000E+1, 0.99090000E+0, 0.12480182E+4, 0.165E+3, 0.156E+3, + 0.29086000E+1, 0.97970000E+0, 0.92827050E+3, 0.165E+3, 0.157E+3, 0.29086000E+1, 0.19373000E+1, + 0.58277730E+3, 0.165E+3, 0.159E+3, 0.29086000E+1, 0.29425000E+1, 0.57071750E+3, 0.165E+3, + 0.160E+3, 0.29086000E+1, 0.29455000E+1, 0.55258430E+3, 0.165E+3, 0.161E+3, 0.29086000E+1, + 0.29413000E+1, 0.55542950E+3, 0.165E+3, 0.162E+3, 0.29086000E+1, 0.29300000E+1, 0.53587600E+3, + 0.165E+3, 0.163E+3, 0.29086000E+1, 0.18286000E+1, 0.55897620E+3, 0.165E+3, 0.164E+3, + 0.29086000E+1, 0.28732000E+1, 0.52491950E+3, 0.165E+3, 0.165E+3, 0.29086000E+1, 0.29086000E+1, + 0.39396700E+2, 0.166E+3, 0.100E+1, 0.28965000E+1, 0.91180000E+0, 0.25865800E+2, 0.166E+3, + 0.200E+1, 0.28965000E+1, 0.00000000E+0, 0.63848500E+3, 0.166E+3, 0.300E+1, 0.28965000E+1, + 0.00000000E+0, 0.36118220E+3, 0.166E+3, 0.400E+1, 0.28965000E+1, 0.00000000E+0, 0.24078360E+3, + 0.166E+3, 0.500E+1, 0.28965000E+1, 0.00000000E+0, 0.16156910E+3, 0.166E+3, 0.600E+1, + 0.28965000E+1, 0.00000000E+0, 0.11248360E+3, 0.166E+3, 0.700E+1, 0.28965000E+1, 0.00000000E+0, + 0.84928800E+2, 0.166E+3, 0.800E+1, 0.28965000E+1, 0.00000000E+0, 0.64205600E+2, 0.166E+3, + 0.900E+1, 0.28965000E+1, 0.00000000E+0, 0.49316600E+2, 0.166E+3, 0.100E+2, 0.28965000E+1, + 0.00000000E+0, 0.76254390E+3, 0.166E+3, 0.110E+2, 0.28965000E+1, 0.00000000E+0, 0.57748050E+3, + 0.166E+3, 0.120E+2, 0.28965000E+1, 0.00000000E+0, 0.52942090E+3, 0.166E+3, 0.130E+2, + 0.28965000E+1, 0.00000000E+0, 0.41417170E+3, 0.166E+3, 0.140E+2, 0.28965000E+1, 0.00000000E+0, + 0.32113630E+3, 0.166E+3, 0.150E+2, 0.28965000E+1, 0.00000000E+0, 0.26561240E+3, 0.166E+3, + 0.160E+2, 0.28965000E+1, 0.00000000E+0, 0.21629400E+3, 0.166E+3, 0.170E+2, 0.28965000E+1, + 0.00000000E+0, 0.17651170E+3, 0.166E+3, 0.180E+2, 0.28965000E+1, 0.00000000E+0, 0.12553434E+4, + 0.166E+3, 0.190E+2, 0.28965000E+1, 0.00000000E+0, 0.10213342E+4, 0.166E+3, 0.200E+2, + 0.28965000E+1, 0.00000000E+0, 0.84137840E+3, 0.166E+3, 0.210E+2, 0.28965000E+1, 0.00000000E+0, + 0.81057120E+3, 0.166E+3, 0.220E+2, 0.28965000E+1, 0.00000000E+0, 0.74119950E+3, 0.166E+3, + 0.230E+2, 0.28965000E+1, 0.00000000E+0, 0.58388160E+3, 0.166E+3, 0.240E+2, 0.28965000E+1, + 0.00000000E+0, 0.63684280E+3, 0.166E+3, 0.250E+2, 0.28965000E+1, 0.00000000E+0, 0.49970290E+3, + 0.166E+3, 0.260E+2, 0.28965000E+1, 0.00000000E+0, 0.52794350E+3, 0.166E+3, 0.270E+2, + 0.28965000E+1, 0.00000000E+0, 0.54462440E+3, 0.166E+3, 0.280E+2, 0.28965000E+1, 0.00000000E+0, + 0.41763490E+3, 0.166E+3, 0.290E+2, 0.28965000E+1, 0.00000000E+0, 0.42675460E+3, 0.166E+3, + 0.300E+2, 0.28965000E+1, 0.00000000E+0, 0.50613150E+3, 0.166E+3, 0.310E+2, 0.28965000E+1, + 0.00000000E+0, 0.44382260E+3, 0.166E+3, 0.320E+2, 0.28965000E+1, 0.00000000E+0, 0.37672490E+3, + 0.166E+3, 0.330E+2, 0.28965000E+1, 0.00000000E+0, 0.33707580E+3, 0.166E+3, 0.340E+2, + 0.28965000E+1, 0.00000000E+0, 0.29415100E+3, 0.166E+3, 0.350E+2, 0.28965000E+1, 0.00000000E+0, + 0.25518090E+3, 0.166E+3, 0.360E+2, 0.28965000E+1, 0.00000000E+0, 0.14056043E+4, 0.166E+3, + 0.370E+2, 0.28965000E+1, 0.00000000E+0, 0.12176072E+4, 0.166E+3, 0.380E+2, 0.28965000E+1, + 0.00000000E+0, 0.10613052E+4, 0.166E+3, 0.390E+2, 0.28965000E+1, 0.00000000E+0, 0.95099220E+3, + 0.166E+3, 0.400E+2, 0.28965000E+1, 0.00000000E+0, 0.86553240E+3, 0.166E+3, 0.410E+2, + 0.28965000E+1, 0.00000000E+0, 0.66608950E+3, 0.166E+3, 0.420E+2, 0.28965000E+1, 0.00000000E+0, + 0.74408720E+3, 0.166E+3, 0.430E+2, 0.28965000E+1, 0.00000000E+0, 0.56489840E+3, 0.166E+3, + 0.440E+2, 0.28965000E+1, 0.00000000E+0, 0.61735350E+3, 0.166E+3, 0.450E+2, 0.28965000E+1, + 0.00000000E+0, 0.57182020E+3, 0.166E+3, 0.460E+2, 0.28965000E+1, 0.00000000E+0, 0.47729120E+3, + 0.166E+3, 0.470E+2, 0.28965000E+1, 0.00000000E+0, 0.50312050E+3, 0.166E+3, 0.480E+2, + 0.28965000E+1, 0.00000000E+0, 0.63374930E+3, 0.166E+3, 0.490E+2, 0.28965000E+1, 0.00000000E+0, + 0.58321300E+3, 0.166E+3, 0.500E+2, 0.28965000E+1, 0.00000000E+0, 0.51742880E+3, 0.166E+3, + 0.510E+2, 0.28965000E+1, 0.00000000E+0, 0.47882440E+3, 0.166E+3, 0.520E+2, 0.28965000E+1, + 0.00000000E+0, 0.43176670E+3, 0.166E+3, 0.530E+2, 0.28965000E+1, 0.00000000E+0, 0.38721870E+3, + 0.166E+3, 0.540E+2, 0.28965000E+1, 0.00000000E+0, 0.17128830E+4, 0.166E+3, 0.550E+2, + 0.28965000E+1, 0.00000000E+0, 0.15552120E+4, 0.166E+3, 0.560E+2, 0.28965000E+1, 0.00000000E+0, + 0.13593802E+4, 0.166E+3, 0.570E+2, 0.28965000E+1, 0.00000000E+0, 0.61183610E+3, 0.166E+3, + 0.580E+2, 0.28965000E+1, 0.27991000E+1, 0.13758472E+4, 0.166E+3, 0.590E+2, 0.28965000E+1, + 0.00000000E+0, 0.13197747E+4, 0.166E+3, 0.600E+2, 0.28965000E+1, 0.00000000E+0, 0.12863433E+4, + 0.166E+3, 0.610E+2, 0.28965000E+1, 0.00000000E+0, 0.12556329E+4, 0.166E+3, 0.620E+2, + 0.28965000E+1, 0.00000000E+0, 0.12283897E+4, 0.166E+3, 0.630E+2, 0.28965000E+1, 0.00000000E+0, + 0.96089950E+3, 0.166E+3, 0.640E+2, 0.28965000E+1, 0.00000000E+0, 0.10913776E+4, 0.166E+3, + 0.650E+2, 0.28965000E+1, 0.00000000E+0, 0.10518609E+4, 0.166E+3, 0.660E+2, 0.28965000E+1, + 0.00000000E+0, 0.11064740E+4, 0.166E+3, 0.670E+2, 0.28965000E+1, 0.00000000E+0, 0.10828259E+4, + 0.166E+3, 0.680E+2, 0.28965000E+1, 0.00000000E+0, 0.10614329E+4, 0.166E+3, 0.690E+2, + 0.28965000E+1, 0.00000000E+0, 0.10492440E+4, 0.166E+3, 0.700E+2, 0.28965000E+1, 0.00000000E+0, + 0.88106130E+3, 0.166E+3, 0.710E+2, 0.28965000E+1, 0.00000000E+0, 0.86194390E+3, 0.166E+3, + 0.720E+2, 0.28965000E+1, 0.00000000E+0, 0.78433470E+3, 0.166E+3, 0.730E+2, 0.28965000E+1, + 0.00000000E+0, 0.66095780E+3, 0.166E+3, 0.740E+2, 0.28965000E+1, 0.00000000E+0, 0.67162740E+3, + 0.166E+3, 0.750E+2, 0.28965000E+1, 0.00000000E+0, 0.60723190E+3, 0.166E+3, 0.760E+2, + 0.28965000E+1, 0.00000000E+0, 0.55505840E+3, 0.166E+3, 0.770E+2, 0.28965000E+1, 0.00000000E+0, + 0.46025170E+3, 0.166E+3, 0.780E+2, 0.28965000E+1, 0.00000000E+0, 0.42970270E+3, 0.166E+3, + 0.790E+2, 0.28965000E+1, 0.00000000E+0, 0.44159570E+3, 0.166E+3, 0.800E+2, 0.28965000E+1, + 0.00000000E+0, 0.65009130E+3, 0.166E+3, 0.810E+2, 0.28965000E+1, 0.00000000E+0, 0.63314710E+3, + 0.166E+3, 0.820E+2, 0.28965000E+1, 0.00000000E+0, 0.57941850E+3, 0.166E+3, 0.830E+2, + 0.28965000E+1, 0.00000000E+0, 0.55135470E+3, 0.166E+3, 0.840E+2, 0.28965000E+1, 0.00000000E+0, + 0.50749380E+3, 0.166E+3, 0.850E+2, 0.28965000E+1, 0.00000000E+0, 0.46406150E+3, 0.166E+3, + 0.860E+2, 0.28965000E+1, 0.00000000E+0, 0.16099709E+4, 0.166E+3, 0.870E+2, 0.28965000E+1, + 0.00000000E+0, 0.15338391E+4, 0.166E+3, 0.880E+2, 0.28965000E+1, 0.00000000E+0, 0.13494846E+4, + 0.166E+3, 0.890E+2, 0.28965000E+1, 0.00000000E+0, 0.12065102E+4, 0.166E+3, 0.900E+2, + 0.28965000E+1, 0.00000000E+0, 0.12011049E+4, 0.166E+3, 0.910E+2, 0.28965000E+1, 0.00000000E+0, + 0.11628261E+4, 0.166E+3, 0.920E+2, 0.28965000E+1, 0.00000000E+0, 0.12010327E+4, 0.166E+3, + 0.930E+2, 0.28965000E+1, 0.00000000E+0, 0.11623643E+4, 0.166E+3, 0.940E+2, 0.28965000E+1, + 0.00000000E+0, 0.63781600E+2, 0.166E+3, 0.101E+3, 0.28965000E+1, 0.00000000E+0, 0.20966850E+3, + 0.166E+3, 0.103E+3, 0.28965000E+1, 0.98650000E+0, 0.26699220E+3, 0.166E+3, 0.104E+3, + 0.28965000E+1, 0.98080000E+0, 0.20215950E+3, 0.166E+3, 0.105E+3, 0.28965000E+1, 0.97060000E+0, + 0.15159630E+3, 0.166E+3, 0.106E+3, 0.28965000E+1, 0.98680000E+0, 0.10489910E+3, 0.166E+3, + 0.107E+3, 0.28965000E+1, 0.99440000E+0, 0.76120900E+2, 0.166E+3, 0.108E+3, 0.28965000E+1, + 0.99250000E+0, 0.52145400E+2, 0.166E+3, 0.109E+3, 0.28965000E+1, 0.99820000E+0, 0.30714640E+3, + 0.166E+3, 0.111E+3, 0.28965000E+1, 0.96840000E+0, 0.47548270E+3, 0.166E+3, 0.112E+3, + 0.28965000E+1, 0.96280000E+0, 0.47919230E+3, 0.166E+3, 0.113E+3, 0.28965000E+1, 0.96480000E+0, + 0.38242860E+3, 0.166E+3, 0.114E+3, 0.28965000E+1, 0.95070000E+0, 0.31166960E+3, 0.166E+3, + 0.115E+3, 0.28965000E+1, 0.99470000E+0, 0.26271630E+3, 0.166E+3, 0.116E+3, 0.28965000E+1, + 0.99480000E+0, 0.21407020E+3, 0.166E+3, 0.117E+3, 0.28965000E+1, 0.99720000E+0, 0.42205350E+3, + 0.166E+3, 0.119E+3, 0.28965000E+1, 0.97670000E+0, 0.81742610E+3, 0.166E+3, 0.120E+3, + 0.28965000E+1, 0.98310000E+0, 0.41957740E+3, 0.166E+3, 0.121E+3, 0.28965000E+1, 0.18627000E+1, + 0.40507580E+3, 0.166E+3, 0.122E+3, 0.28965000E+1, 0.18299000E+1, 0.39701800E+3, 0.166E+3, + 0.123E+3, 0.28965000E+1, 0.19138000E+1, 0.39363860E+3, 0.166E+3, 0.124E+3, 0.28965000E+1, + 0.18269000E+1, 0.36094370E+3, 0.166E+3, 0.125E+3, 0.28965000E+1, 0.16406000E+1, 0.33374440E+3, + 0.166E+3, 0.126E+3, 0.28965000E+1, 0.16483000E+1, 0.31840100E+3, 0.166E+3, 0.127E+3, + 0.28965000E+1, 0.17149000E+1, 0.31136890E+3, 0.166E+3, 0.128E+3, 0.28965000E+1, 0.17937000E+1, + 0.30844670E+3, 0.166E+3, 0.129E+3, 0.28965000E+1, 0.95760000E+0, 0.28804090E+3, 0.166E+3, + 0.130E+3, 0.28965000E+1, 0.19419000E+1, 0.47467810E+3, 0.166E+3, 0.131E+3, 0.28965000E+1, + 0.96010000E+0, 0.41468730E+3, 0.166E+3, 0.132E+3, 0.28965000E+1, 0.94340000E+0, 0.37023680E+3, + 0.166E+3, 0.133E+3, 0.28965000E+1, 0.98890000E+0, 0.33722390E+3, 0.166E+3, 0.134E+3, + 0.28965000E+1, 0.99010000E+0, 0.29624340E+3, 0.166E+3, 0.135E+3, 0.28965000E+1, 0.99740000E+0, + 0.50300950E+3, 0.166E+3, 0.137E+3, 0.28965000E+1, 0.97380000E+0, 0.99563320E+3, 0.166E+3, + 0.138E+3, 0.28965000E+1, 0.98010000E+0, 0.75368720E+3, 0.166E+3, 0.139E+3, 0.28965000E+1, + 0.19153000E+1, 0.55531660E+3, 0.166E+3, 0.140E+3, 0.28965000E+1, 0.19355000E+1, 0.56079120E+3, + 0.166E+3, 0.141E+3, 0.28965000E+1, 0.19545000E+1, 0.52244060E+3, 0.166E+3, 0.142E+3, + 0.28965000E+1, 0.19420000E+1, 0.58868540E+3, 0.166E+3, 0.143E+3, 0.28965000E+1, 0.16682000E+1, + 0.45392960E+3, 0.166E+3, 0.144E+3, 0.28965000E+1, 0.18584000E+1, 0.42457780E+3, 0.166E+3, + 0.145E+3, 0.28965000E+1, 0.19003000E+1, 0.39405630E+3, 0.166E+3, 0.146E+3, 0.28965000E+1, + 0.18630000E+1, 0.38138420E+3, 0.166E+3, 0.147E+3, 0.28965000E+1, 0.96790000E+0, 0.37631210E+3, + 0.166E+3, 0.148E+3, 0.28965000E+1, 0.19539000E+1, 0.60308050E+3, 0.166E+3, 0.149E+3, + 0.28965000E+1, 0.96330000E+0, 0.54294040E+3, 0.166E+3, 0.150E+3, 0.28965000E+1, 0.95140000E+0, + 0.50681590E+3, 0.166E+3, 0.151E+3, 0.28965000E+1, 0.97490000E+0, 0.47839610E+3, 0.166E+3, + 0.152E+3, 0.28965000E+1, 0.98110000E+0, 0.43583490E+3, 0.166E+3, 0.153E+3, 0.28965000E+1, + 0.99680000E+0, 0.59259730E+3, 0.166E+3, 0.155E+3, 0.28965000E+1, 0.99090000E+0, 0.12943501E+4, + 0.166E+3, 0.156E+3, 0.28965000E+1, 0.97970000E+0, 0.95498290E+3, 0.166E+3, 0.157E+3, + 0.28965000E+1, 0.19373000E+1, 0.59324060E+3, 0.166E+3, 0.159E+3, 0.28965000E+1, 0.29425000E+1, + 0.58094220E+3, 0.166E+3, 0.160E+3, 0.28965000E+1, 0.29455000E+1, 0.56241030E+3, 0.166E+3, + 0.161E+3, 0.28965000E+1, 0.29413000E+1, 0.56558410E+3, 0.166E+3, 0.162E+3, 0.28965000E+1, + 0.29300000E+1, 0.54641960E+3, 0.166E+3, 0.163E+3, 0.28965000E+1, 0.18286000E+1, 0.56923180E+3, + 0.166E+3, 0.164E+3, 0.28965000E+1, 0.28732000E+1, 0.53434800E+3, 0.166E+3, 0.165E+3, + 0.28965000E+1, 0.29086000E+1, 0.54443560E+3, 0.166E+3, 0.166E+3, 0.28965000E+1, 0.28965000E+1, + 0.37029500E+2, 0.167E+3, 0.100E+1, 0.29242000E+1, 0.91180000E+0, 0.24480600E+2, 0.167E+3, + 0.200E+1, 0.29242000E+1, 0.00000000E+0, 0.57574990E+3, 0.167E+3, 0.300E+1, 0.29242000E+1, + 0.00000000E+0, 0.33286460E+3, 0.167E+3, 0.400E+1, 0.29242000E+1, 0.00000000E+0, 0.22408560E+3, + 0.167E+3, 0.500E+1, 0.29242000E+1, 0.00000000E+0, 0.15136070E+3, 0.167E+3, 0.600E+1, + 0.29242000E+1, 0.00000000E+0, 0.10585820E+3, 0.167E+3, 0.700E+1, 0.29242000E+1, 0.00000000E+0, + 0.80170400E+2, 0.167E+3, 0.800E+1, 0.29242000E+1, 0.00000000E+0, 0.60759800E+2, 0.167E+3, + 0.900E+1, 0.29242000E+1, 0.00000000E+0, 0.46759500E+2, 0.167E+3, 0.100E+2, 0.29242000E+1, + 0.00000000E+0, 0.68859100E+3, 0.167E+3, 0.110E+2, 0.29242000E+1, 0.00000000E+0, 0.53038700E+3, + 0.167E+3, 0.120E+2, 0.29242000E+1, 0.00000000E+0, 0.48884720E+3, 0.167E+3, 0.130E+2, + 0.29242000E+1, 0.00000000E+0, 0.38509520E+3, 0.167E+3, 0.140E+2, 0.29242000E+1, 0.00000000E+0, + 0.30019740E+3, 0.167E+3, 0.150E+2, 0.29242000E+1, 0.00000000E+0, 0.24909840E+3, 0.167E+3, + 0.160E+2, 0.29242000E+1, 0.00000000E+0, 0.20345290E+3, 0.167E+3, 0.170E+2, 0.29242000E+1, + 0.00000000E+0, 0.16644660E+3, 0.167E+3, 0.180E+2, 0.29242000E+1, 0.00000000E+0, 0.11279480E+4, + 0.167E+3, 0.190E+2, 0.29242000E+1, 0.00000000E+0, 0.93174430E+3, 0.167E+3, 0.200E+2, + 0.29242000E+1, 0.00000000E+0, 0.76983360E+3, 0.167E+3, 0.210E+2, 0.29242000E+1, 0.00000000E+0, + 0.74340690E+3, 0.167E+3, 0.220E+2, 0.29242000E+1, 0.00000000E+0, 0.68076970E+3, 0.167E+3, + 0.230E+2, 0.29242000E+1, 0.00000000E+0, 0.53627310E+3, 0.167E+3, 0.240E+2, 0.29242000E+1, + 0.00000000E+0, 0.58613150E+3, 0.167E+3, 0.250E+2, 0.29242000E+1, 0.00000000E+0, 0.46004150E+3, + 0.167E+3, 0.260E+2, 0.29242000E+1, 0.00000000E+0, 0.48762020E+3, 0.167E+3, 0.270E+2, + 0.29242000E+1, 0.00000000E+0, 0.50232060E+3, 0.167E+3, 0.280E+2, 0.29242000E+1, 0.00000000E+0, + 0.38513270E+3, 0.167E+3, 0.290E+2, 0.29242000E+1, 0.00000000E+0, 0.39536540E+3, 0.167E+3, + 0.300E+2, 0.29242000E+1, 0.00000000E+0, 0.46822770E+3, 0.167E+3, 0.310E+2, 0.29242000E+1, + 0.00000000E+0, 0.41281620E+3, 0.167E+3, 0.320E+2, 0.29242000E+1, 0.00000000E+0, 0.35198750E+3, + 0.167E+3, 0.330E+2, 0.29242000E+1, 0.00000000E+0, 0.31577010E+3, 0.167E+3, 0.340E+2, + 0.29242000E+1, 0.00000000E+0, 0.27627680E+3, 0.167E+3, 0.350E+2, 0.29242000E+1, 0.00000000E+0, + 0.24022750E+3, 0.167E+3, 0.360E+2, 0.29242000E+1, 0.00000000E+0, 0.12641518E+4, 0.167E+3, + 0.370E+2, 0.29242000E+1, 0.00000000E+0, 0.11100442E+4, 0.167E+3, 0.380E+2, 0.29242000E+1, + 0.00000000E+0, 0.97238640E+3, 0.167E+3, 0.390E+2, 0.29242000E+1, 0.00000000E+0, 0.87389940E+3, + 0.167E+3, 0.400E+2, 0.29242000E+1, 0.00000000E+0, 0.79683270E+3, 0.167E+3, 0.410E+2, + 0.29242000E+1, 0.00000000E+0, 0.61510520E+3, 0.167E+3, 0.420E+2, 0.29242000E+1, 0.00000000E+0, + 0.68633810E+3, 0.167E+3, 0.430E+2, 0.29242000E+1, 0.00000000E+0, 0.52281640E+3, 0.167E+3, + 0.440E+2, 0.29242000E+1, 0.00000000E+0, 0.57148280E+3, 0.167E+3, 0.450E+2, 0.29242000E+1, + 0.00000000E+0, 0.52993880E+3, 0.167E+3, 0.460E+2, 0.29242000E+1, 0.00000000E+0, 0.44189760E+3, + 0.167E+3, 0.470E+2, 0.29242000E+1, 0.00000000E+0, 0.46694330E+3, 0.167E+3, 0.480E+2, + 0.29242000E+1, 0.00000000E+0, 0.58603950E+3, 0.167E+3, 0.490E+2, 0.29242000E+1, 0.00000000E+0, + 0.54179100E+3, 0.167E+3, 0.500E+2, 0.29242000E+1, 0.00000000E+0, 0.48265820E+3, 0.167E+3, + 0.510E+2, 0.29242000E+1, 0.00000000E+0, 0.44769600E+3, 0.167E+3, 0.520E+2, 0.29242000E+1, + 0.00000000E+0, 0.40468130E+3, 0.167E+3, 0.530E+2, 0.29242000E+1, 0.00000000E+0, 0.36373600E+3, + 0.167E+3, 0.540E+2, 0.29242000E+1, 0.00000000E+0, 0.15398453E+4, 0.167E+3, 0.550E+2, + 0.29242000E+1, 0.00000000E+0, 0.14149943E+4, 0.167E+3, 0.560E+2, 0.29242000E+1, 0.00000000E+0, + 0.12431883E+4, 0.167E+3, 0.570E+2, 0.29242000E+1, 0.00000000E+0, 0.57024510E+3, 0.167E+3, + 0.580E+2, 0.29242000E+1, 0.27991000E+1, 0.12537691E+4, 0.167E+3, 0.590E+2, 0.29242000E+1, + 0.00000000E+0, 0.12039727E+4, 0.167E+3, 0.600E+2, 0.29242000E+1, 0.00000000E+0, 0.11737842E+4, + 0.167E+3, 0.610E+2, 0.29242000E+1, 0.00000000E+0, 0.11460194E+4, 0.167E+3, 0.620E+2, + 0.29242000E+1, 0.00000000E+0, 0.11213978E+4, 0.167E+3, 0.630E+2, 0.29242000E+1, 0.00000000E+0, + 0.88175490E+3, 0.167E+3, 0.640E+2, 0.29242000E+1, 0.00000000E+0, 0.99262670E+3, 0.167E+3, + 0.650E+2, 0.29242000E+1, 0.00000000E+0, 0.95731530E+3, 0.167E+3, 0.660E+2, 0.29242000E+1, + 0.00000000E+0, 0.10114677E+4, 0.167E+3, 0.670E+2, 0.29242000E+1, 0.00000000E+0, 0.99000700E+3, + 0.167E+3, 0.680E+2, 0.29242000E+1, 0.00000000E+0, 0.97065280E+3, 0.167E+3, 0.690E+2, + 0.29242000E+1, 0.00000000E+0, 0.95930580E+3, 0.167E+3, 0.700E+2, 0.29242000E+1, 0.00000000E+0, + 0.80819030E+3, 0.167E+3, 0.710E+2, 0.29242000E+1, 0.00000000E+0, 0.79471630E+3, 0.167E+3, + 0.720E+2, 0.29242000E+1, 0.00000000E+0, 0.72517730E+3, 0.167E+3, 0.730E+2, 0.29242000E+1, + 0.00000000E+0, 0.61226400E+3, 0.167E+3, 0.740E+2, 0.29242000E+1, 0.00000000E+0, 0.62284620E+3, + 0.167E+3, 0.750E+2, 0.29242000E+1, 0.00000000E+0, 0.56442200E+3, 0.167E+3, 0.760E+2, + 0.29242000E+1, 0.00000000E+0, 0.51685750E+3, 0.167E+3, 0.770E+2, 0.29242000E+1, 0.00000000E+0, + 0.42931700E+3, 0.167E+3, 0.780E+2, 0.29242000E+1, 0.00000000E+0, 0.40110390E+3, 0.167E+3, + 0.790E+2, 0.29242000E+1, 0.00000000E+0, 0.41259070E+3, 0.167E+3, 0.800E+2, 0.29242000E+1, + 0.00000000E+0, 0.60165160E+3, 0.167E+3, 0.810E+2, 0.29242000E+1, 0.00000000E+0, 0.58816150E+3, + 0.167E+3, 0.820E+2, 0.29242000E+1, 0.00000000E+0, 0.54028410E+3, 0.167E+3, 0.830E+2, + 0.29242000E+1, 0.00000000E+0, 0.51517620E+3, 0.167E+3, 0.840E+2, 0.29242000E+1, 0.00000000E+0, + 0.47532260E+3, 0.167E+3, 0.850E+2, 0.29242000E+1, 0.00000000E+0, 0.43554890E+3, 0.167E+3, + 0.860E+2, 0.29242000E+1, 0.00000000E+0, 0.14541544E+4, 0.167E+3, 0.870E+2, 0.29242000E+1, + 0.00000000E+0, 0.13992062E+4, 0.167E+3, 0.880E+2, 0.29242000E+1, 0.00000000E+0, 0.12368406E+4, + 0.167E+3, 0.890E+2, 0.29242000E+1, 0.00000000E+0, 0.11113608E+4, 0.167E+3, 0.900E+2, + 0.29242000E+1, 0.00000000E+0, 0.11034821E+4, 0.167E+3, 0.910E+2, 0.29242000E+1, 0.00000000E+0, + 0.10684783E+4, 0.167E+3, 0.920E+2, 0.29242000E+1, 0.00000000E+0, 0.11002364E+4, 0.167E+3, + 0.930E+2, 0.29242000E+1, 0.00000000E+0, 0.10654625E+4, 0.167E+3, 0.940E+2, 0.29242000E+1, + 0.00000000E+0, 0.59658600E+2, 0.167E+3, 0.101E+3, 0.29242000E+1, 0.00000000E+0, 0.19347380E+3, + 0.167E+3, 0.103E+3, 0.29242000E+1, 0.98650000E+0, 0.24674640E+3, 0.167E+3, 0.104E+3, + 0.29242000E+1, 0.98080000E+0, 0.18847650E+3, 0.167E+3, 0.105E+3, 0.29242000E+1, 0.97060000E+0, + 0.14197970E+3, 0.167E+3, 0.106E+3, 0.29242000E+1, 0.98680000E+0, 0.98721200E+2, 0.167E+3, + 0.107E+3, 0.29242000E+1, 0.99440000E+0, 0.71910400E+2, 0.167E+3, 0.108E+3, 0.29242000E+1, + 0.99250000E+0, 0.49479300E+2, 0.167E+3, 0.109E+3, 0.29242000E+1, 0.99820000E+0, 0.28286510E+3, + 0.167E+3, 0.111E+3, 0.29242000E+1, 0.96840000E+0, 0.43742550E+3, 0.167E+3, 0.112E+3, + 0.29242000E+1, 0.96280000E+0, 0.44300780E+3, 0.167E+3, 0.113E+3, 0.29242000E+1, 0.96480000E+0, + 0.35589820E+3, 0.167E+3, 0.114E+3, 0.29242000E+1, 0.95070000E+0, 0.29139070E+3, 0.167E+3, + 0.115E+3, 0.29242000E+1, 0.99470000E+0, 0.24635930E+3, 0.167E+3, 0.116E+3, 0.29242000E+1, + 0.99480000E+0, 0.20134780E+3, 0.167E+3, 0.117E+3, 0.29242000E+1, 0.99720000E+0, 0.38995180E+3, + 0.167E+3, 0.119E+3, 0.29242000E+1, 0.97670000E+0, 0.74517810E+3, 0.167E+3, 0.120E+3, + 0.29242000E+1, 0.98310000E+0, 0.39002770E+3, 0.167E+3, 0.121E+3, 0.29242000E+1, 0.18627000E+1, + 0.37650890E+3, 0.167E+3, 0.122E+3, 0.29242000E+1, 0.18299000E+1, 0.36899410E+3, 0.167E+3, + 0.123E+3, 0.29242000E+1, 0.19138000E+1, 0.36559720E+3, 0.167E+3, 0.124E+3, 0.29242000E+1, + 0.18269000E+1, 0.33635820E+3, 0.167E+3, 0.125E+3, 0.29242000E+1, 0.16406000E+1, 0.31127980E+3, + 0.167E+3, 0.126E+3, 0.29242000E+1, 0.16483000E+1, 0.29694730E+3, 0.167E+3, 0.127E+3, + 0.29242000E+1, 0.17149000E+1, 0.29031390E+3, 0.167E+3, 0.128E+3, 0.29242000E+1, 0.17937000E+1, + 0.28689270E+3, 0.167E+3, 0.129E+3, 0.29242000E+1, 0.95760000E+0, 0.26909650E+3, 0.167E+3, + 0.130E+3, 0.29242000E+1, 0.19419000E+1, 0.43973990E+3, 0.167E+3, 0.131E+3, 0.29242000E+1, + 0.96010000E+0, 0.38616340E+3, 0.167E+3, 0.132E+3, 0.29242000E+1, 0.94340000E+0, 0.34600850E+3, + 0.167E+3, 0.133E+3, 0.29242000E+1, 0.98890000E+0, 0.31589290E+3, 0.167E+3, 0.134E+3, + 0.29242000E+1, 0.99010000E+0, 0.27820320E+3, 0.167E+3, 0.135E+3, 0.29242000E+1, 0.99740000E+0, + 0.46526060E+3, 0.167E+3, 0.137E+3, 0.29242000E+1, 0.97380000E+0, 0.90671060E+3, 0.167E+3, + 0.138E+3, 0.29242000E+1, 0.98010000E+0, 0.69306070E+3, 0.167E+3, 0.139E+3, 0.29242000E+1, + 0.19153000E+1, 0.51580860E+3, 0.167E+3, 0.140E+3, 0.29242000E+1, 0.19355000E+1, 0.52093800E+3, + 0.167E+3, 0.141E+3, 0.29242000E+1, 0.19545000E+1, 0.48572140E+3, 0.167E+3, 0.142E+3, + 0.29242000E+1, 0.19420000E+1, 0.54479060E+3, 0.167E+3, 0.143E+3, 0.29242000E+1, 0.16682000E+1, + 0.42334180E+3, 0.167E+3, 0.144E+3, 0.29242000E+1, 0.18584000E+1, 0.39604750E+3, 0.167E+3, + 0.145E+3, 0.29242000E+1, 0.19003000E+1, 0.36776460E+3, 0.167E+3, 0.146E+3, 0.29242000E+1, + 0.18630000E+1, 0.35578930E+3, 0.167E+3, 0.147E+3, 0.29242000E+1, 0.96790000E+0, 0.35190760E+3, + 0.167E+3, 0.148E+3, 0.29242000E+1, 0.19539000E+1, 0.55857850E+3, 0.167E+3, 0.149E+3, + 0.29242000E+1, 0.96330000E+0, 0.50519270E+3, 0.167E+3, 0.150E+3, 0.29242000E+1, 0.95140000E+0, + 0.47300760E+3, 0.167E+3, 0.151E+3, 0.29242000E+1, 0.97490000E+0, 0.44736060E+3, 0.167E+3, + 0.152E+3, 0.29242000E+1, 0.98110000E+0, 0.40847930E+3, 0.167E+3, 0.153E+3, 0.29242000E+1, + 0.99680000E+0, 0.55005480E+3, 0.167E+3, 0.155E+3, 0.29242000E+1, 0.99090000E+0, 0.11754332E+4, + 0.167E+3, 0.156E+3, 0.29242000E+1, 0.97970000E+0, 0.87714780E+3, 0.167E+3, 0.157E+3, + 0.29242000E+1, 0.19373000E+1, 0.55304140E+3, 0.167E+3, 0.159E+3, 0.29242000E+1, 0.29425000E+1, + 0.54160480E+3, 0.167E+3, 0.160E+3, 0.29242000E+1, 0.29455000E+1, 0.52443100E+3, 0.167E+3, + 0.161E+3, 0.29242000E+1, 0.29413000E+1, 0.52702430E+3, 0.167E+3, 0.162E+3, 0.29242000E+1, + 0.29300000E+1, 0.50812970E+3, 0.167E+3, 0.163E+3, 0.29242000E+1, 0.18286000E+1, 0.53036160E+3, + 0.167E+3, 0.164E+3, 0.29242000E+1, 0.28732000E+1, 0.49813190E+3, 0.167E+3, 0.165E+3, + 0.29242000E+1, 0.29086000E+1, 0.50688950E+3, 0.167E+3, 0.166E+3, 0.29242000E+1, 0.28965000E+1, + 0.47279500E+3, 0.167E+3, 0.167E+3, 0.29242000E+1, 0.29242000E+1, 0.36008400E+2, 0.168E+3, + 0.100E+1, 0.29282000E+1, 0.91180000E+0, 0.23828900E+2, 0.168E+3, 0.200E+1, 0.29282000E+1, + 0.00000000E+0, 0.55724540E+3, 0.168E+3, 0.300E+1, 0.29282000E+1, 0.00000000E+0, 0.32288400E+3, + 0.168E+3, 0.400E+1, 0.29282000E+1, 0.00000000E+0, 0.21762790E+3, 0.168E+3, 0.500E+1, + 0.29282000E+1, 0.00000000E+0, 0.14712440E+3, 0.168E+3, 0.600E+1, 0.29282000E+1, 0.00000000E+0, + 0.10295880E+3, 0.168E+3, 0.700E+1, 0.29282000E+1, 0.00000000E+0, 0.78007900E+2, 0.168E+3, + 0.800E+1, 0.29282000E+1, 0.00000000E+0, 0.59142300E+2, 0.168E+3, 0.900E+1, 0.29282000E+1, + 0.00000000E+0, 0.45527900E+2, 0.168E+3, 0.100E+2, 0.29282000E+1, 0.00000000E+0, 0.66655340E+3, + 0.168E+3, 0.110E+2, 0.29282000E+1, 0.00000000E+0, 0.51428720E+3, 0.168E+3, 0.120E+2, + 0.29282000E+1, 0.00000000E+0, 0.47430950E+3, 0.168E+3, 0.130E+2, 0.29282000E+1, 0.00000000E+0, + 0.37395400E+3, 0.168E+3, 0.140E+2, 0.29282000E+1, 0.00000000E+0, 0.29171000E+3, 0.168E+3, + 0.150E+2, 0.29282000E+1, 0.00000000E+0, 0.24215880E+3, 0.168E+3, 0.160E+2, 0.29282000E+1, + 0.00000000E+0, 0.19786420E+3, 0.168E+3, 0.170E+2, 0.29282000E+1, 0.00000000E+0, 0.16193000E+3, + 0.168E+3, 0.180E+2, 0.29282000E+1, 0.00000000E+0, 0.10915091E+4, 0.168E+3, 0.190E+2, + 0.29282000E+1, 0.00000000E+0, 0.90284450E+3, 0.168E+3, 0.200E+2, 0.29282000E+1, 0.00000000E+0, + 0.74618100E+3, 0.168E+3, 0.210E+2, 0.29282000E+1, 0.00000000E+0, 0.72076670E+3, 0.168E+3, + 0.220E+2, 0.29282000E+1, 0.00000000E+0, 0.66014630E+3, 0.168E+3, 0.230E+2, 0.29282000E+1, + 0.00000000E+0, 0.52004920E+3, 0.168E+3, 0.240E+2, 0.29282000E+1, 0.00000000E+0, 0.56851110E+3, + 0.168E+3, 0.250E+2, 0.29282000E+1, 0.00000000E+0, 0.44624320E+3, 0.168E+3, 0.260E+2, + 0.29282000E+1, 0.00000000E+0, 0.47314860E+3, 0.168E+3, 0.270E+2, 0.29282000E+1, 0.00000000E+0, + 0.48733120E+3, 0.168E+3, 0.280E+2, 0.29282000E+1, 0.00000000E+0, 0.37365280E+3, 0.168E+3, + 0.290E+2, 0.29282000E+1, 0.00000000E+0, 0.38376960E+3, 0.168E+3, 0.300E+2, 0.29282000E+1, + 0.00000000E+0, 0.45441890E+3, 0.168E+3, 0.310E+2, 0.29282000E+1, 0.00000000E+0, 0.40089710E+3, + 0.168E+3, 0.320E+2, 0.29282000E+1, 0.00000000E+0, 0.34201700E+3, 0.168E+3, 0.330E+2, + 0.29282000E+1, 0.00000000E+0, 0.30693000E+3, 0.168E+3, 0.340E+2, 0.29282000E+1, 0.00000000E+0, + 0.26863470E+3, 0.168E+3, 0.350E+2, 0.29282000E+1, 0.00000000E+0, 0.23365510E+3, 0.168E+3, + 0.360E+2, 0.29282000E+1, 0.00000000E+0, 0.12234668E+4, 0.168E+3, 0.370E+2, 0.29282000E+1, + 0.00000000E+0, 0.10755659E+4, 0.168E+3, 0.380E+2, 0.29282000E+1, 0.00000000E+0, 0.94268540E+3, + 0.168E+3, 0.390E+2, 0.29282000E+1, 0.00000000E+0, 0.84748690E+3, 0.168E+3, 0.400E+2, + 0.29282000E+1, 0.00000000E+0, 0.77291870E+3, 0.168E+3, 0.410E+2, 0.29282000E+1, 0.00000000E+0, + 0.59687070E+3, 0.168E+3, 0.420E+2, 0.29282000E+1, 0.00000000E+0, 0.66589970E+3, 0.168E+3, + 0.430E+2, 0.29282000E+1, 0.00000000E+0, 0.50745680E+3, 0.168E+3, 0.440E+2, 0.29282000E+1, + 0.00000000E+0, 0.55468820E+3, 0.168E+3, 0.450E+2, 0.29282000E+1, 0.00000000E+0, 0.51443460E+3, + 0.168E+3, 0.460E+2, 0.29282000E+1, 0.00000000E+0, 0.42894240E+3, 0.168E+3, 0.470E+2, + 0.29282000E+1, 0.00000000E+0, 0.45336080E+3, 0.168E+3, 0.480E+2, 0.29282000E+1, 0.00000000E+0, + 0.56875080E+3, 0.168E+3, 0.490E+2, 0.29282000E+1, 0.00000000E+0, 0.52608060E+3, 0.168E+3, + 0.500E+2, 0.29282000E+1, 0.00000000E+0, 0.46889680E+3, 0.168E+3, 0.510E+2, 0.29282000E+1, + 0.00000000E+0, 0.43506030E+3, 0.168E+3, 0.520E+2, 0.29282000E+1, 0.00000000E+0, 0.39338290E+3, + 0.168E+3, 0.530E+2, 0.29282000E+1, 0.00000000E+0, 0.35368410E+3, 0.168E+3, 0.540E+2, + 0.29282000E+1, 0.00000000E+0, 0.14903329E+4, 0.168E+3, 0.550E+2, 0.29282000E+1, 0.00000000E+0, + 0.13708120E+4, 0.168E+3, 0.560E+2, 0.29282000E+1, 0.00000000E+0, 0.12050073E+4, 0.168E+3, + 0.570E+2, 0.29282000E+1, 0.00000000E+0, 0.55393560E+3, 0.168E+3, 0.580E+2, 0.29282000E+1, + 0.27991000E+1, 0.12148410E+4, 0.168E+3, 0.590E+2, 0.29282000E+1, 0.00000000E+0, 0.11666903E+4, + 0.168E+3, 0.600E+2, 0.29282000E+1, 0.00000000E+0, 0.11374645E+4, 0.168E+3, 0.610E+2, + 0.29282000E+1, 0.00000000E+0, 0.11105819E+4, 0.168E+3, 0.620E+2, 0.29282000E+1, 0.00000000E+0, + 0.10867437E+4, 0.168E+3, 0.630E+2, 0.29282000E+1, 0.00000000E+0, 0.85501380E+3, 0.168E+3, + 0.640E+2, 0.29282000E+1, 0.00000000E+0, 0.96171480E+3, 0.168E+3, 0.650E+2, 0.29282000E+1, + 0.00000000E+0, 0.92760080E+3, 0.168E+3, 0.660E+2, 0.29282000E+1, 0.00000000E+0, 0.98034030E+3, + 0.168E+3, 0.670E+2, 0.29282000E+1, 0.00000000E+0, 0.95955360E+3, 0.168E+3, 0.680E+2, + 0.29282000E+1, 0.00000000E+0, 0.94081400E+3, 0.168E+3, 0.690E+2, 0.29282000E+1, 0.00000000E+0, + 0.92979290E+3, 0.168E+3, 0.700E+2, 0.29282000E+1, 0.00000000E+0, 0.78364610E+3, 0.168E+3, + 0.710E+2, 0.29282000E+1, 0.00000000E+0, 0.77098740E+3, 0.168E+3, 0.720E+2, 0.29282000E+1, + 0.00000000E+0, 0.70375210E+3, 0.168E+3, 0.730E+2, 0.29282000E+1, 0.00000000E+0, 0.59432800E+3, + 0.168E+3, 0.740E+2, 0.29282000E+1, 0.00000000E+0, 0.60467390E+3, 0.168E+3, 0.750E+2, + 0.29282000E+1, 0.00000000E+0, 0.54810470E+3, 0.168E+3, 0.760E+2, 0.29282000E+1, 0.00000000E+0, + 0.50202620E+3, 0.168E+3, 0.770E+2, 0.29282000E+1, 0.00000000E+0, 0.41709650E+3, 0.168E+3, + 0.780E+2, 0.29282000E+1, 0.00000000E+0, 0.38972370E+3, 0.168E+3, 0.790E+2, 0.29282000E+1, + 0.00000000E+0, 0.40092380E+3, 0.168E+3, 0.800E+2, 0.29282000E+1, 0.00000000E+0, 0.58398610E+3, + 0.168E+3, 0.810E+2, 0.29282000E+1, 0.00000000E+0, 0.57111950E+3, 0.168E+3, 0.820E+2, + 0.29282000E+1, 0.00000000E+0, 0.52486410E+3, 0.168E+3, 0.830E+2, 0.29282000E+1, 0.00000000E+0, + 0.50060050E+3, 0.168E+3, 0.840E+2, 0.29282000E+1, 0.00000000E+0, 0.46201380E+3, 0.168E+3, + 0.850E+2, 0.29282000E+1, 0.00000000E+0, 0.42346810E+3, 0.168E+3, 0.860E+2, 0.29282000E+1, + 0.00000000E+0, 0.14079944E+4, 0.168E+3, 0.870E+2, 0.29282000E+1, 0.00000000E+0, 0.13558908E+4, + 0.168E+3, 0.880E+2, 0.29282000E+1, 0.00000000E+0, 0.11991383E+4, 0.168E+3, 0.890E+2, + 0.29282000E+1, 0.00000000E+0, 0.10780836E+4, 0.168E+3, 0.900E+2, 0.29282000E+1, 0.00000000E+0, + 0.10701540E+4, 0.168E+3, 0.910E+2, 0.29282000E+1, 0.00000000E+0, 0.10362222E+4, 0.168E+3, + 0.920E+2, 0.29282000E+1, 0.00000000E+0, 0.10666560E+4, 0.168E+3, 0.930E+2, 0.29282000E+1, + 0.00000000E+0, 0.10330090E+4, 0.168E+3, 0.940E+2, 0.29282000E+1, 0.00000000E+0, 0.57976000E+2, + 0.168E+3, 0.101E+3, 0.29282000E+1, 0.00000000E+0, 0.18770500E+3, 0.168E+3, 0.103E+3, + 0.29282000E+1, 0.98650000E+0, 0.23944310E+3, 0.168E+3, 0.104E+3, 0.29282000E+1, 0.98080000E+0, + 0.18308850E+3, 0.168E+3, 0.105E+3, 0.29282000E+1, 0.97060000E+0, 0.13800410E+3, 0.168E+3, + 0.106E+3, 0.29282000E+1, 0.98680000E+0, 0.96019300E+2, 0.168E+3, 0.107E+3, 0.29282000E+1, + 0.99440000E+0, 0.69979100E+2, 0.168E+3, 0.108E+3, 0.29282000E+1, 0.99250000E+0, 0.48180500E+2, + 0.168E+3, 0.109E+3, 0.29282000E+1, 0.99820000E+0, 0.27437320E+3, 0.168E+3, 0.111E+3, + 0.29282000E+1, 0.96840000E+0, 0.42424930E+3, 0.168E+3, 0.112E+3, 0.29282000E+1, 0.96280000E+0, + 0.42989820E+3, 0.168E+3, 0.113E+3, 0.29282000E+1, 0.96480000E+0, 0.34564250E+3, 0.168E+3, + 0.114E+3, 0.29282000E+1, 0.95070000E+0, 0.28315870E+3, 0.168E+3, 0.115E+3, 0.29282000E+1, + 0.99470000E+0, 0.23949360E+3, 0.168E+3, 0.116E+3, 0.29282000E+1, 0.99480000E+0, 0.19581550E+3, + 0.168E+3, 0.117E+3, 0.29282000E+1, 0.99720000E+0, 0.37842050E+3, 0.168E+3, 0.119E+3, + 0.29282000E+1, 0.97670000E+0, 0.72211110E+3, 0.168E+3, 0.120E+3, 0.29282000E+1, 0.98310000E+0, + 0.37874080E+3, 0.168E+3, 0.121E+3, 0.29282000E+1, 0.18627000E+1, 0.36562310E+3, 0.168E+3, + 0.122E+3, 0.29282000E+1, 0.18299000E+1, 0.35832130E+3, 0.168E+3, 0.123E+3, 0.29282000E+1, + 0.19138000E+1, 0.35499450E+3, 0.168E+3, 0.124E+3, 0.29282000E+1, 0.18269000E+1, 0.32672790E+3, + 0.168E+3, 0.125E+3, 0.29282000E+1, 0.16406000E+1, 0.30240170E+3, 0.168E+3, 0.126E+3, + 0.29282000E+1, 0.16483000E+1, 0.28847830E+3, 0.168E+3, 0.127E+3, 0.29282000E+1, 0.17149000E+1, + 0.28202540E+3, 0.168E+3, 0.128E+3, 0.29282000E+1, 0.17937000E+1, 0.27862110E+3, 0.168E+3, + 0.129E+3, 0.29282000E+1, 0.95760000E+0, 0.26147450E+3, 0.168E+3, 0.130E+3, 0.29282000E+1, + 0.19419000E+1, 0.42684110E+3, 0.168E+3, 0.131E+3, 0.29282000E+1, 0.96010000E+0, 0.37506910E+3, + 0.168E+3, 0.132E+3, 0.29282000E+1, 0.94340000E+0, 0.33621830E+3, 0.168E+3, 0.133E+3, + 0.29282000E+1, 0.98890000E+0, 0.30704780E+3, 0.168E+3, 0.134E+3, 0.29282000E+1, 0.99010000E+0, + 0.27050300E+3, 0.168E+3, 0.135E+3, 0.29282000E+1, 0.99740000E+0, 0.45156840E+3, 0.168E+3, + 0.137E+3, 0.29282000E+1, 0.97380000E+0, 0.87858370E+3, 0.168E+3, 0.138E+3, 0.29282000E+1, + 0.98010000E+0, 0.67226710E+3, 0.168E+3, 0.139E+3, 0.29282000E+1, 0.19153000E+1, 0.50085680E+3, + 0.168E+3, 0.140E+3, 0.29282000E+1, 0.19355000E+1, 0.50582970E+3, 0.168E+3, 0.141E+3, + 0.29282000E+1, 0.19545000E+1, 0.47170110E+3, 0.168E+3, 0.142E+3, 0.29282000E+1, 0.19420000E+1, + 0.52880060E+3, 0.168E+3, 0.143E+3, 0.29282000E+1, 0.16682000E+1, 0.41127310E+3, 0.168E+3, + 0.144E+3, 0.29282000E+1, 0.18584000E+1, 0.38477140E+3, 0.168E+3, 0.145E+3, 0.29282000E+1, + 0.19003000E+1, 0.35731920E+3, 0.168E+3, 0.146E+3, 0.29282000E+1, 0.18630000E+1, 0.34566580E+3, + 0.168E+3, 0.147E+3, 0.29282000E+1, 0.96790000E+0, 0.34198940E+3, 0.168E+3, 0.148E+3, + 0.29282000E+1, 0.19539000E+1, 0.54219990E+3, 0.168E+3, 0.149E+3, 0.29282000E+1, 0.96330000E+0, + 0.49064160E+3, 0.168E+3, 0.150E+3, 0.29282000E+1, 0.95140000E+0, 0.45955210E+3, 0.168E+3, + 0.151E+3, 0.29282000E+1, 0.97490000E+0, 0.43474240E+3, 0.168E+3, 0.152E+3, 0.29282000E+1, + 0.98110000E+0, 0.39707280E+3, 0.168E+3, 0.153E+3, 0.29282000E+1, 0.99680000E+0, 0.53408180E+3, + 0.168E+3, 0.155E+3, 0.29282000E+1, 0.99090000E+0, 0.11387329E+4, 0.168E+3, 0.156E+3, + 0.29282000E+1, 0.97970000E+0, 0.85075470E+3, 0.168E+3, 0.157E+3, 0.29282000E+1, 0.19373000E+1, + 0.53723990E+3, 0.168E+3, 0.159E+3, 0.29282000E+1, 0.29425000E+1, 0.52613310E+3, 0.168E+3, + 0.160E+3, 0.29282000E+1, 0.29455000E+1, 0.50946310E+3, 0.168E+3, 0.161E+3, 0.29282000E+1, + 0.29413000E+1, 0.51194390E+3, 0.168E+3, 0.162E+3, 0.29282000E+1, 0.29300000E+1, 0.49346840E+3, + 0.168E+3, 0.163E+3, 0.29282000E+1, 0.18286000E+1, 0.51517330E+3, 0.168E+3, 0.164E+3, + 0.29282000E+1, 0.28732000E+1, 0.48389820E+3, 0.168E+3, 0.165E+3, 0.29282000E+1, 0.29086000E+1, + 0.49233800E+3, 0.168E+3, 0.166E+3, 0.29282000E+1, 0.28965000E+1, 0.45931550E+3, 0.168E+3, + 0.167E+3, 0.29282000E+1, 0.29242000E+1, 0.44623140E+3, 0.168E+3, 0.168E+3, 0.29282000E+1, + 0.29282000E+1, 0.35748000E+2, 0.169E+3, 0.100E+1, 0.29246000E+1, 0.91180000E+0, 0.23629700E+2, + 0.169E+3, 0.200E+1, 0.29246000E+1, 0.00000000E+0, 0.55525980E+3, 0.169E+3, 0.300E+1, + 0.29246000E+1, 0.00000000E+0, 0.32123930E+3, 0.169E+3, 0.400E+1, 0.29246000E+1, 0.00000000E+0, + 0.21630990E+3, 0.169E+3, 0.500E+1, 0.29246000E+1, 0.00000000E+0, 0.14611730E+3, 0.169E+3, + 0.600E+1, 0.29246000E+1, 0.00000000E+0, 0.10218880E+3, 0.169E+3, 0.700E+1, 0.29246000E+1, + 0.00000000E+0, 0.77387400E+2, 0.169E+3, 0.800E+1, 0.29246000E+1, 0.00000000E+0, 0.58646500E+2, + 0.169E+3, 0.900E+1, 0.29246000E+1, 0.00000000E+0, 0.45129800E+2, 0.169E+3, 0.100E+2, + 0.29246000E+1, 0.00000000E+0, 0.66409940E+3, 0.169E+3, 0.110E+2, 0.29246000E+1, 0.00000000E+0, + 0.51180090E+3, 0.169E+3, 0.120E+2, 0.29246000E+1, 0.00000000E+0, 0.47179450E+3, 0.169E+3, + 0.130E+2, 0.29246000E+1, 0.00000000E+0, 0.37172710E+3, 0.169E+3, 0.140E+2, 0.29246000E+1, + 0.00000000E+0, 0.28980090E+3, 0.169E+3, 0.150E+2, 0.29246000E+1, 0.00000000E+0, 0.24047400E+3, + 0.169E+3, 0.160E+2, 0.29246000E+1, 0.00000000E+0, 0.19640620E+3, 0.169E+3, 0.170E+2, + 0.29246000E+1, 0.00000000E+0, 0.16067610E+3, 0.169E+3, 0.180E+2, 0.29246000E+1, 0.00000000E+0, + 0.10876970E+4, 0.169E+3, 0.190E+2, 0.29246000E+1, 0.00000000E+0, 0.89886340E+3, 0.169E+3, + 0.200E+2, 0.29246000E+1, 0.00000000E+0, 0.74273900E+3, 0.169E+3, 0.210E+2, 0.29246000E+1, + 0.00000000E+0, 0.71728970E+3, 0.169E+3, 0.220E+2, 0.29246000E+1, 0.00000000E+0, 0.65688060E+3, + 0.169E+3, 0.230E+2, 0.29246000E+1, 0.00000000E+0, 0.51743220E+3, 0.169E+3, 0.240E+2, + 0.29246000E+1, 0.00000000E+0, 0.56559590E+3, 0.169E+3, 0.250E+2, 0.29246000E+1, 0.00000000E+0, + 0.44390510E+3, 0.169E+3, 0.260E+2, 0.29246000E+1, 0.00000000E+0, 0.47058200E+3, 0.169E+3, + 0.270E+2, 0.29246000E+1, 0.00000000E+0, 0.48475110E+3, 0.169E+3, 0.280E+2, 0.29246000E+1, + 0.00000000E+0, 0.37163760E+3, 0.169E+3, 0.290E+2, 0.29246000E+1, 0.00000000E+0, 0.38158090E+3, + 0.169E+3, 0.300E+2, 0.29246000E+1, 0.00000000E+0, 0.45190020E+3, 0.169E+3, 0.310E+2, + 0.29246000E+1, 0.00000000E+0, 0.39847870E+3, 0.169E+3, 0.320E+2, 0.29246000E+1, 0.00000000E+0, + 0.33979060E+3, 0.169E+3, 0.330E+2, 0.29246000E+1, 0.00000000E+0, 0.30483420E+3, 0.169E+3, + 0.340E+2, 0.29246000E+1, 0.00000000E+0, 0.26670930E+3, 0.169E+3, 0.350E+2, 0.29246000E+1, + 0.00000000E+0, 0.23190470E+3, 0.169E+3, 0.360E+2, 0.29246000E+1, 0.00000000E+0, 0.12190706E+4, + 0.169E+3, 0.370E+2, 0.29246000E+1, 0.00000000E+0, 0.10708351E+4, 0.169E+3, 0.380E+2, + 0.29246000E+1, 0.00000000E+0, 0.93818730E+3, 0.169E+3, 0.390E+2, 0.29246000E+1, 0.00000000E+0, + 0.84323610E+3, 0.169E+3, 0.400E+2, 0.29246000E+1, 0.00000000E+0, 0.76891010E+3, 0.169E+3, + 0.410E+2, 0.29246000E+1, 0.00000000E+0, 0.59357780E+3, 0.169E+3, 0.420E+2, 0.29246000E+1, + 0.00000000E+0, 0.66231090E+3, 0.169E+3, 0.430E+2, 0.29246000E+1, 0.00000000E+0, 0.50453730E+3, + 0.169E+3, 0.440E+2, 0.29246000E+1, 0.00000000E+0, 0.55152390E+3, 0.169E+3, 0.450E+2, + 0.29246000E+1, 0.00000000E+0, 0.51144340E+3, 0.169E+3, 0.460E+2, 0.29246000E+1, 0.00000000E+0, + 0.42643750E+3, 0.169E+3, 0.470E+2, 0.29246000E+1, 0.00000000E+0, 0.45065890E+3, 0.169E+3, + 0.480E+2, 0.29246000E+1, 0.00000000E+0, 0.56556470E+3, 0.169E+3, 0.490E+2, 0.29246000E+1, + 0.00000000E+0, 0.52293560E+3, 0.169E+3, 0.500E+2, 0.29246000E+1, 0.00000000E+0, 0.46590590E+3, + 0.169E+3, 0.510E+2, 0.29246000E+1, 0.00000000E+0, 0.43217320E+3, 0.169E+3, 0.520E+2, + 0.29246000E+1, 0.00000000E+0, 0.39065890E+3, 0.169E+3, 0.530E+2, 0.29246000E+1, 0.00000000E+0, + 0.35113440E+3, 0.169E+3, 0.540E+2, 0.29246000E+1, 0.00000000E+0, 0.14849661E+4, 0.169E+3, + 0.550E+2, 0.29246000E+1, 0.00000000E+0, 0.13649240E+4, 0.169E+3, 0.560E+2, 0.29246000E+1, + 0.00000000E+0, 0.11993874E+4, 0.169E+3, 0.570E+2, 0.29246000E+1, 0.00000000E+0, 0.55042640E+3, + 0.169E+3, 0.580E+2, 0.29246000E+1, 0.27991000E+1, 0.12094663E+4, 0.169E+3, 0.590E+2, + 0.29246000E+1, 0.00000000E+0, 0.11614494E+4, 0.169E+3, 0.600E+2, 0.29246000E+1, 0.00000000E+0, + 0.11323365E+4, 0.169E+3, 0.610E+2, 0.29246000E+1, 0.00000000E+0, 0.11055604E+4, 0.169E+3, + 0.620E+2, 0.29246000E+1, 0.00000000E+0, 0.10818160E+4, 0.169E+3, 0.630E+2, 0.29246000E+1, + 0.00000000E+0, 0.85075460E+3, 0.169E+3, 0.640E+2, 0.29246000E+1, 0.00000000E+0, 0.95749480E+3, + 0.169E+3, 0.650E+2, 0.29246000E+1, 0.00000000E+0, 0.92347850E+3, 0.169E+3, 0.660E+2, + 0.29246000E+1, 0.00000000E+0, 0.97580850E+3, 0.169E+3, 0.670E+2, 0.29246000E+1, 0.00000000E+0, + 0.95511040E+3, 0.169E+3, 0.680E+2, 0.29246000E+1, 0.00000000E+0, 0.93644570E+3, 0.169E+3, + 0.690E+2, 0.29246000E+1, 0.00000000E+0, 0.92549440E+3, 0.169E+3, 0.700E+2, 0.29246000E+1, + 0.00000000E+0, 0.77979590E+3, 0.169E+3, 0.710E+2, 0.29246000E+1, 0.00000000E+0, 0.76690850E+3, + 0.169E+3, 0.720E+2, 0.29246000E+1, 0.00000000E+0, 0.69985110E+3, 0.169E+3, 0.730E+2, + 0.29246000E+1, 0.00000000E+0, 0.59088900E+3, 0.169E+3, 0.740E+2, 0.29246000E+1, 0.00000000E+0, + 0.60112600E+3, 0.169E+3, 0.750E+2, 0.29246000E+1, 0.00000000E+0, 0.54476460E+3, 0.169E+3, + 0.760E+2, 0.29246000E+1, 0.00000000E+0, 0.49887240E+3, 0.169E+3, 0.770E+2, 0.29246000E+1, + 0.00000000E+0, 0.41437420E+3, 0.169E+3, 0.780E+2, 0.29246000E+1, 0.00000000E+0, 0.38714220E+3, + 0.169E+3, 0.790E+2, 0.29246000E+1, 0.00000000E+0, 0.39824650E+3, 0.169E+3, 0.800E+2, + 0.29246000E+1, 0.00000000E+0, 0.58061670E+3, 0.169E+3, 0.810E+2, 0.29246000E+1, 0.00000000E+0, + 0.56766880E+3, 0.169E+3, 0.820E+2, 0.29246000E+1, 0.00000000E+0, 0.52151170E+3, 0.169E+3, + 0.830E+2, 0.29246000E+1, 0.00000000E+0, 0.49729730E+3, 0.169E+3, 0.840E+2, 0.29246000E+1, + 0.00000000E+0, 0.45884250E+3, 0.169E+3, 0.850E+2, 0.29246000E+1, 0.00000000E+0, 0.42045390E+3, + 0.169E+3, 0.860E+2, 0.29246000E+1, 0.00000000E+0, 0.14024613E+4, 0.169E+3, 0.870E+2, + 0.29246000E+1, 0.00000000E+0, 0.13497931E+4, 0.169E+3, 0.880E+2, 0.29246000E+1, 0.00000000E+0, + 0.11933412E+4, 0.169E+3, 0.890E+2, 0.29246000E+1, 0.00000000E+0, 0.10724182E+4, 0.169E+3, + 0.900E+2, 0.29246000E+1, 0.00000000E+0, 0.10647199E+4, 0.169E+3, 0.910E+2, 0.29246000E+1, + 0.00000000E+0, 0.10309456E+4, 0.169E+3, 0.920E+2, 0.29246000E+1, 0.00000000E+0, 0.10614860E+4, + 0.169E+3, 0.930E+2, 0.29246000E+1, 0.00000000E+0, 0.10279565E+4, 0.169E+3, 0.940E+2, + 0.29246000E+1, 0.00000000E+0, 0.57593700E+2, 0.169E+3, 0.101E+3, 0.29246000E+1, 0.00000000E+0, + 0.18672100E+3, 0.169E+3, 0.103E+3, 0.29246000E+1, 0.98650000E+0, 0.23814200E+3, 0.169E+3, + 0.104E+3, 0.29246000E+1, 0.98080000E+0, 0.18193830E+3, 0.169E+3, 0.105E+3, 0.29246000E+1, + 0.97060000E+0, 0.13705810E+3, 0.169E+3, 0.106E+3, 0.29246000E+1, 0.98680000E+0, 0.95297900E+2, + 0.169E+3, 0.107E+3, 0.29246000E+1, 0.99440000E+0, 0.69413700E+2, 0.169E+3, 0.108E+3, + 0.29246000E+1, 0.99250000E+0, 0.47755100E+2, 0.169E+3, 0.109E+3, 0.29246000E+1, 0.99820000E+0, + 0.27296680E+3, 0.169E+3, 0.111E+3, 0.29246000E+1, 0.96840000E+0, 0.42211770E+3, 0.169E+3, + 0.112E+3, 0.29246000E+1, 0.96280000E+0, 0.42756550E+3, 0.169E+3, 0.113E+3, 0.29246000E+1, + 0.96480000E+0, 0.34354750E+3, 0.169E+3, 0.114E+3, 0.29246000E+1, 0.95070000E+0, 0.28129780E+3, + 0.169E+3, 0.115E+3, 0.29246000E+1, 0.99470000E+0, 0.23782830E+3, 0.169E+3, 0.116E+3, + 0.29246000E+1, 0.99480000E+0, 0.19437320E+3, 0.169E+3, 0.117E+3, 0.29246000E+1, 0.99720000E+0, + 0.37630470E+3, 0.169E+3, 0.119E+3, 0.29246000E+1, 0.97670000E+0, 0.71887190E+3, 0.169E+3, + 0.120E+3, 0.29246000E+1, 0.98310000E+0, 0.37645520E+3, 0.169E+3, 0.121E+3, 0.29246000E+1, + 0.18627000E+1, 0.36340760E+3, 0.169E+3, 0.122E+3, 0.29246000E+1, 0.18299000E+1, 0.35615030E+3, + 0.169E+3, 0.123E+3, 0.29246000E+1, 0.19138000E+1, 0.35286320E+3, 0.169E+3, 0.124E+3, + 0.29246000E+1, 0.18269000E+1, 0.32467610E+3, 0.169E+3, 0.125E+3, 0.29246000E+1, 0.16406000E+1, + 0.30047150E+3, 0.169E+3, 0.126E+3, 0.29246000E+1, 0.16483000E+1, 0.28663320E+3, 0.169E+3, + 0.127E+3, 0.29246000E+1, 0.17149000E+1, 0.28022740E+3, 0.169E+3, 0.128E+3, 0.29246000E+1, + 0.17937000E+1, 0.27690380E+3, 0.169E+3, 0.129E+3, 0.29246000E+1, 0.95760000E+0, 0.25976130E+3, + 0.169E+3, 0.130E+3, 0.29246000E+1, 0.19419000E+1, 0.42442030E+3, 0.169E+3, 0.131E+3, + 0.29246000E+1, 0.96010000E+0, 0.37275950E+3, 0.169E+3, 0.132E+3, 0.29246000E+1, 0.94340000E+0, + 0.33401900E+3, 0.169E+3, 0.133E+3, 0.29246000E+1, 0.98890000E+0, 0.30495200E+3, 0.169E+3, + 0.134E+3, 0.29246000E+1, 0.99010000E+0, 0.26856840E+3, 0.169E+3, 0.135E+3, 0.29246000E+1, + 0.99740000E+0, 0.44898400E+3, 0.169E+3, 0.137E+3, 0.29246000E+1, 0.97380000E+0, 0.87467070E+3, + 0.169E+3, 0.138E+3, 0.29246000E+1, 0.98010000E+0, 0.66876560E+3, 0.169E+3, 0.139E+3, + 0.29246000E+1, 0.19153000E+1, 0.49783950E+3, 0.169E+3, 0.140E+3, 0.29246000E+1, 0.19355000E+1, + 0.50278080E+3, 0.169E+3, 0.141E+3, 0.29246000E+1, 0.19545000E+1, 0.46880410E+3, 0.169E+3, + 0.142E+3, 0.29246000E+1, 0.19420000E+1, 0.52574810E+3, 0.169E+3, 0.143E+3, 0.29246000E+1, + 0.16682000E+1, 0.40862370E+3, 0.169E+3, 0.144E+3, 0.29246000E+1, 0.18584000E+1, 0.38227390E+3, + 0.169E+3, 0.145E+3, 0.29246000E+1, 0.19003000E+1, 0.35497280E+3, 0.169E+3, 0.146E+3, + 0.29246000E+1, 0.18630000E+1, 0.34340860E+3, 0.169E+3, 0.147E+3, 0.29246000E+1, 0.96790000E+0, + 0.33969190E+3, 0.169E+3, 0.148E+3, 0.29246000E+1, 0.19539000E+1, 0.53908680E+3, 0.169E+3, + 0.149E+3, 0.29246000E+1, 0.96330000E+0, 0.48762850E+3, 0.169E+3, 0.150E+3, 0.29246000E+1, + 0.95140000E+0, 0.45659480E+3, 0.169E+3, 0.151E+3, 0.29246000E+1, 0.97490000E+0, 0.43185070E+3, + 0.169E+3, 0.152E+3, 0.29246000E+1, 0.98110000E+0, 0.39432570E+3, 0.169E+3, 0.153E+3, + 0.29246000E+1, 0.99680000E+0, 0.53087060E+3, 0.169E+3, 0.155E+3, 0.29246000E+1, 0.99090000E+0, + 0.11338329E+4, 0.169E+3, 0.156E+3, 0.29246000E+1, 0.97970000E+0, 0.84637940E+3, 0.169E+3, + 0.157E+3, 0.29246000E+1, 0.19373000E+1, 0.53382250E+3, 0.169E+3, 0.159E+3, 0.29246000E+1, + 0.29425000E+1, 0.52278360E+3, 0.169E+3, 0.160E+3, 0.29246000E+1, 0.29455000E+1, 0.50620810E+3, + 0.169E+3, 0.161E+3, 0.29246000E+1, 0.29413000E+1, 0.50870480E+3, 0.169E+3, 0.162E+3, + 0.29246000E+1, 0.29300000E+1, 0.49043340E+3, 0.169E+3, 0.163E+3, 0.29246000E+1, 0.18286000E+1, + 0.51192810E+3, 0.169E+3, 0.164E+3, 0.29246000E+1, 0.28732000E+1, 0.48082180E+3, 0.169E+3, + 0.165E+3, 0.29246000E+1, 0.29086000E+1, 0.48926080E+3, 0.169E+3, 0.166E+3, 0.29246000E+1, + 0.28965000E+1, 0.45637280E+3, 0.169E+3, 0.167E+3, 0.29246000E+1, 0.29242000E+1, 0.44336390E+3, + 0.169E+3, 0.168E+3, 0.29246000E+1, 0.29282000E+1, 0.44052280E+3, 0.169E+3, 0.169E+3, + 0.29246000E+1, 0.29246000E+1, 0.37398600E+2, 0.170E+3, 0.100E+1, 0.28482000E+1, 0.91180000E+0, + 0.24543500E+2, 0.170E+3, 0.200E+1, 0.28482000E+1, 0.00000000E+0, 0.59236510E+3, 0.170E+3, + 0.300E+1, 0.28482000E+1, 0.00000000E+0, 0.34023850E+3, 0.170E+3, 0.400E+1, 0.28482000E+1, + 0.00000000E+0, 0.22788020E+3, 0.170E+3, 0.500E+1, 0.28482000E+1, 0.00000000E+0, 0.15321460E+3, + 0.170E+3, 0.600E+1, 0.28482000E+1, 0.00000000E+0, 0.10673400E+3, 0.170E+3, 0.700E+1, + 0.28482000E+1, 0.00000000E+0, 0.80586300E+2, 0.170E+3, 0.800E+1, 0.28482000E+1, 0.00000000E+0, + 0.60903100E+2, 0.170E+3, 0.900E+1, 0.28482000E+1, 0.00000000E+0, 0.46756900E+2, 0.170E+3, + 0.100E+2, 0.28482000E+1, 0.00000000E+0, 0.70806290E+3, 0.170E+3, 0.110E+2, 0.28482000E+1, + 0.00000000E+0, 0.54277630E+3, 0.170E+3, 0.120E+2, 0.28482000E+1, 0.00000000E+0, 0.49910710E+3, + 0.170E+3, 0.130E+2, 0.28482000E+1, 0.00000000E+0, 0.39184510E+3, 0.170E+3, 0.140E+2, + 0.28482000E+1, 0.00000000E+0, 0.30444600E+3, 0.170E+3, 0.150E+2, 0.28482000E+1, 0.00000000E+0, + 0.25199750E+3, 0.170E+3, 0.160E+2, 0.28482000E+1, 0.00000000E+0, 0.20529690E+3, 0.170E+3, + 0.170E+2, 0.28482000E+1, 0.00000000E+0, 0.16755260E+3, 0.170E+3, 0.180E+2, 0.28482000E+1, + 0.00000000E+0, 0.11600767E+4, 0.170E+3, 0.190E+2, 0.28482000E+1, 0.00000000E+0, 0.95507870E+3, + 0.170E+3, 0.200E+2, 0.28482000E+1, 0.00000000E+0, 0.78843250E+3, 0.170E+3, 0.210E+2, + 0.28482000E+1, 0.00000000E+0, 0.76056390E+3, 0.170E+3, 0.220E+2, 0.28482000E+1, 0.00000000E+0, + 0.69606330E+3, 0.170E+3, 0.230E+2, 0.28482000E+1, 0.00000000E+0, 0.54795880E+3, 0.170E+3, + 0.240E+2, 0.28482000E+1, 0.00000000E+0, 0.59876220E+3, 0.170E+3, 0.250E+2, 0.28482000E+1, + 0.00000000E+0, 0.46957880E+3, 0.170E+3, 0.260E+2, 0.28482000E+1, 0.00000000E+0, 0.49740630E+3, + 0.170E+3, 0.270E+2, 0.28482000E+1, 0.00000000E+0, 0.51274730E+3, 0.170E+3, 0.280E+2, + 0.28482000E+1, 0.00000000E+0, 0.39280830E+3, 0.170E+3, 0.290E+2, 0.28482000E+1, 0.00000000E+0, + 0.40272690E+3, 0.170E+3, 0.300E+2, 0.28482000E+1, 0.00000000E+0, 0.47737550E+3, 0.170E+3, + 0.310E+2, 0.28482000E+1, 0.00000000E+0, 0.41982970E+3, 0.170E+3, 0.320E+2, 0.28482000E+1, + 0.00000000E+0, 0.35702170E+3, 0.170E+3, 0.330E+2, 0.28482000E+1, 0.00000000E+0, 0.31968520E+3, + 0.170E+3, 0.340E+2, 0.28482000E+1, 0.00000000E+0, 0.27912740E+3, 0.170E+3, 0.350E+2, + 0.28482000E+1, 0.00000000E+0, 0.24221470E+3, 0.170E+3, 0.360E+2, 0.28482000E+1, 0.00000000E+0, + 0.12994482E+4, 0.170E+3, 0.370E+2, 0.28482000E+1, 0.00000000E+0, 0.11377525E+4, 0.170E+3, + 0.380E+2, 0.28482000E+1, 0.00000000E+0, 0.99498690E+3, 0.170E+3, 0.390E+2, 0.28482000E+1, + 0.00000000E+0, 0.89315950E+3, 0.170E+3, 0.400E+2, 0.28482000E+1, 0.00000000E+0, 0.81367980E+3, + 0.170E+3, 0.410E+2, 0.28482000E+1, 0.00000000E+0, 0.62696020E+3, 0.170E+3, 0.420E+2, + 0.28482000E+1, 0.00000000E+0, 0.70006760E+3, 0.170E+3, 0.430E+2, 0.28482000E+1, 0.00000000E+0, + 0.53219550E+3, 0.170E+3, 0.440E+2, 0.28482000E+1, 0.00000000E+0, 0.58198660E+3, 0.170E+3, + 0.450E+2, 0.28482000E+1, 0.00000000E+0, 0.53936520E+3, 0.170E+3, 0.460E+2, 0.28482000E+1, + 0.00000000E+0, 0.44956060E+3, 0.170E+3, 0.470E+2, 0.28482000E+1, 0.00000000E+0, 0.47487730E+3, + 0.170E+3, 0.480E+2, 0.28482000E+1, 0.00000000E+0, 0.59714660E+3, 0.170E+3, 0.490E+2, + 0.28482000E+1, 0.00000000E+0, 0.55105660E+3, 0.170E+3, 0.500E+2, 0.28482000E+1, 0.00000000E+0, + 0.48986860E+3, 0.170E+3, 0.510E+2, 0.28482000E+1, 0.00000000E+0, 0.45372430E+3, 0.170E+3, + 0.520E+2, 0.28482000E+1, 0.00000000E+0, 0.40944070E+3, 0.170E+3, 0.530E+2, 0.28482000E+1, + 0.00000000E+0, 0.36738410E+3, 0.170E+3, 0.540E+2, 0.28482000E+1, 0.00000000E+0, 0.15825500E+4, + 0.170E+3, 0.550E+2, 0.28482000E+1, 0.00000000E+0, 0.14507794E+4, 0.170E+3, 0.560E+2, + 0.28482000E+1, 0.00000000E+0, 0.12725822E+4, 0.170E+3, 0.570E+2, 0.28482000E+1, 0.00000000E+0, + 0.57883400E+3, 0.170E+3, 0.580E+2, 0.28482000E+1, 0.27991000E+1, 0.12846682E+4, 0.170E+3, + 0.590E+2, 0.28482000E+1, 0.00000000E+0, 0.12333365E+4, 0.170E+3, 0.600E+2, 0.28482000E+1, + 0.00000000E+0, 0.12023371E+4, 0.170E+3, 0.610E+2, 0.28482000E+1, 0.00000000E+0, 0.11738392E+4, + 0.170E+3, 0.620E+2, 0.28482000E+1, 0.00000000E+0, 0.11485655E+4, 0.170E+3, 0.630E+2, + 0.28482000E+1, 0.00000000E+0, 0.90112100E+3, 0.170E+3, 0.640E+2, 0.28482000E+1, 0.00000000E+0, + 0.10169049E+4, 0.170E+3, 0.650E+2, 0.28482000E+1, 0.00000000E+0, 0.98043260E+3, 0.170E+3, + 0.660E+2, 0.28482000E+1, 0.00000000E+0, 0.10356000E+4, 0.170E+3, 0.670E+2, 0.28482000E+1, + 0.00000000E+0, 0.10136038E+4, 0.170E+3, 0.680E+2, 0.28482000E+1, 0.00000000E+0, 0.99374150E+3, + 0.170E+3, 0.690E+2, 0.28482000E+1, 0.00000000E+0, 0.98222660E+3, 0.170E+3, 0.700E+2, + 0.28482000E+1, 0.00000000E+0, 0.82628510E+3, 0.170E+3, 0.710E+2, 0.28482000E+1, 0.00000000E+0, + 0.81115710E+3, 0.170E+3, 0.720E+2, 0.28482000E+1, 0.00000000E+0, 0.73922210E+3, 0.170E+3, + 0.730E+2, 0.28482000E+1, 0.00000000E+0, 0.62322500E+3, 0.170E+3, 0.740E+2, 0.28482000E+1, + 0.00000000E+0, 0.63376790E+3, 0.170E+3, 0.750E+2, 0.28482000E+1, 0.00000000E+0, 0.57362030E+3, + 0.170E+3, 0.760E+2, 0.28482000E+1, 0.00000000E+0, 0.52473400E+3, 0.170E+3, 0.770E+2, + 0.28482000E+1, 0.00000000E+0, 0.43520090E+3, 0.170E+3, 0.780E+2, 0.28482000E+1, 0.00000000E+0, + 0.40635950E+3, 0.170E+3, 0.790E+2, 0.28482000E+1, 0.00000000E+0, 0.41792020E+3, 0.170E+3, + 0.800E+2, 0.28482000E+1, 0.00000000E+0, 0.61237220E+3, 0.170E+3, 0.810E+2, 0.28482000E+1, + 0.00000000E+0, 0.59791090E+3, 0.170E+3, 0.820E+2, 0.28482000E+1, 0.00000000E+0, 0.54826140E+3, + 0.170E+3, 0.830E+2, 0.28482000E+1, 0.00000000E+0, 0.52217940E+3, 0.170E+3, 0.840E+2, + 0.28482000E+1, 0.00000000E+0, 0.48105700E+3, 0.170E+3, 0.850E+2, 0.28482000E+1, 0.00000000E+0, + 0.44014200E+3, 0.170E+3, 0.860E+2, 0.28482000E+1, 0.00000000E+0, 0.14924670E+4, 0.170E+3, + 0.870E+2, 0.28482000E+1, 0.00000000E+0, 0.14332640E+4, 0.170E+3, 0.880E+2, 0.28482000E+1, + 0.00000000E+0, 0.12650809E+4, 0.170E+3, 0.890E+2, 0.28482000E+1, 0.00000000E+0, 0.11344175E+4, + 0.170E+3, 0.900E+2, 0.28482000E+1, 0.00000000E+0, 0.11272049E+4, 0.170E+3, 0.910E+2, + 0.28482000E+1, 0.00000000E+0, 0.10913656E+4, 0.170E+3, 0.920E+2, 0.28482000E+1, 0.00000000E+0, + 0.11251094E+4, 0.170E+3, 0.930E+2, 0.28482000E+1, 0.00000000E+0, 0.10893370E+4, 0.170E+3, + 0.940E+2, 0.28482000E+1, 0.00000000E+0, 0.60487100E+2, 0.170E+3, 0.101E+3, 0.28482000E+1, + 0.00000000E+0, 0.19759460E+3, 0.170E+3, 0.103E+3, 0.28482000E+1, 0.98650000E+0, 0.25172230E+3, + 0.170E+3, 0.104E+3, 0.28482000E+1, 0.98080000E+0, 0.19141090E+3, 0.170E+3, 0.105E+3, + 0.28482000E+1, 0.97060000E+0, 0.14369300E+3, 0.170E+3, 0.106E+3, 0.28482000E+1, 0.98680000E+0, + 0.99505900E+2, 0.170E+3, 0.107E+3, 0.28482000E+1, 0.99440000E+0, 0.72218200E+2, 0.170E+3, + 0.108E+3, 0.28482000E+1, 0.99250000E+0, 0.49450200E+2, 0.170E+3, 0.109E+3, 0.28482000E+1, + 0.99820000E+0, 0.28901230E+3, 0.170E+3, 0.111E+3, 0.28482000E+1, 0.96840000E+0, 0.44716520E+3, + 0.170E+3, 0.112E+3, 0.28482000E+1, 0.96280000E+0, 0.45200550E+3, 0.170E+3, 0.113E+3, + 0.28482000E+1, 0.96480000E+0, 0.36191400E+3, 0.170E+3, 0.114E+3, 0.28482000E+1, 0.95070000E+0, + 0.29546110E+3, 0.170E+3, 0.115E+3, 0.28482000E+1, 0.99470000E+0, 0.24922870E+3, 0.170E+3, + 0.116E+3, 0.28482000E+1, 0.99480000E+0, 0.20317400E+3, 0.170E+3, 0.117E+3, 0.28482000E+1, + 0.99720000E+0, 0.39728560E+3, 0.170E+3, 0.119E+3, 0.28482000E+1, 0.97670000E+0, 0.76326450E+3, + 0.170E+3, 0.120E+3, 0.28482000E+1, 0.98310000E+0, 0.39658450E+3, 0.170E+3, 0.121E+3, + 0.28482000E+1, 0.18627000E+1, 0.38275050E+3, 0.170E+3, 0.122E+3, 0.28482000E+1, 0.18299000E+1, + 0.37510830E+3, 0.170E+3, 0.123E+3, 0.28482000E+1, 0.19138000E+1, 0.37175280E+3, 0.170E+3, + 0.124E+3, 0.28482000E+1, 0.18269000E+1, 0.34156320E+3, 0.170E+3, 0.125E+3, 0.28482000E+1, + 0.16406000E+1, 0.31590920E+3, 0.170E+3, 0.126E+3, 0.28482000E+1, 0.16483000E+1, 0.30132730E+3, + 0.170E+3, 0.127E+3, 0.28482000E+1, 0.17149000E+1, 0.29462620E+3, 0.170E+3, 0.128E+3, + 0.28482000E+1, 0.17937000E+1, 0.29146390E+3, 0.170E+3, 0.129E+3, 0.28482000E+1, 0.95760000E+0, + 0.27284960E+3, 0.170E+3, 0.130E+3, 0.28482000E+1, 0.19419000E+1, 0.44803280E+3, 0.170E+3, + 0.131E+3, 0.28482000E+1, 0.96010000E+0, 0.39245010E+3, 0.170E+3, 0.132E+3, 0.28482000E+1, + 0.94340000E+0, 0.35089060E+3, 0.170E+3, 0.133E+3, 0.28482000E+1, 0.98890000E+0, 0.31981290E+3, + 0.170E+3, 0.134E+3, 0.28482000E+1, 0.99010000E+0, 0.28109900E+3, 0.170E+3, 0.135E+3, + 0.28482000E+1, 0.99740000E+0, 0.47364740E+3, 0.170E+3, 0.137E+3, 0.28482000E+1, 0.97380000E+0, + 0.92871230E+3, 0.170E+3, 0.138E+3, 0.28482000E+1, 0.98010000E+0, 0.70739100E+3, 0.170E+3, + 0.139E+3, 0.28482000E+1, 0.19153000E+1, 0.52442450E+3, 0.170E+3, 0.140E+3, 0.28482000E+1, + 0.19355000E+1, 0.52963760E+3, 0.170E+3, 0.141E+3, 0.28482000E+1, 0.19545000E+1, 0.49348140E+3, + 0.170E+3, 0.142E+3, 0.28482000E+1, 0.19420000E+1, 0.55447820E+3, 0.170E+3, 0.143E+3, + 0.28482000E+1, 0.16682000E+1, 0.42941670E+3, 0.170E+3, 0.144E+3, 0.28482000E+1, 0.18584000E+1, + 0.40159420E+3, 0.170E+3, 0.145E+3, 0.28482000E+1, 0.19003000E+1, 0.37273910E+3, 0.170E+3, + 0.146E+3, 0.28482000E+1, 0.18630000E+1, 0.36066920E+3, 0.170E+3, 0.147E+3, 0.28482000E+1, + 0.96790000E+0, 0.35642060E+3, 0.170E+3, 0.148E+3, 0.28482000E+1, 0.19539000E+1, 0.56876740E+3, + 0.170E+3, 0.149E+3, 0.28482000E+1, 0.96330000E+0, 0.51338040E+3, 0.170E+3, 0.150E+3, + 0.28482000E+1, 0.95140000E+0, 0.47992240E+3, 0.170E+3, 0.151E+3, 0.28482000E+1, 0.97490000E+0, + 0.45334590E+3, 0.170E+3, 0.152E+3, 0.28482000E+1, 0.98110000E+0, 0.41330020E+3, 0.170E+3, + 0.153E+3, 0.28482000E+1, 0.99680000E+0, 0.55918680E+3, 0.170E+3, 0.155E+3, 0.28482000E+1, + 0.99090000E+0, 0.12045119E+4, 0.170E+3, 0.156E+3, 0.28482000E+1, 0.97970000E+0, 0.89547410E+3, + 0.170E+3, 0.157E+3, 0.28482000E+1, 0.19373000E+1, 0.56128730E+3, 0.170E+3, 0.159E+3, + 0.28482000E+1, 0.29425000E+1, 0.54966430E+3, 0.170E+3, 0.160E+3, 0.28482000E+1, 0.29455000E+1, + 0.53216530E+3, 0.170E+3, 0.161E+3, 0.28482000E+1, 0.29413000E+1, 0.53496580E+3, 0.170E+3, + 0.162E+3, 0.28482000E+1, 0.29300000E+1, 0.51624120E+3, 0.170E+3, 0.163E+3, 0.28482000E+1, + 0.18286000E+1, 0.53845600E+3, 0.170E+3, 0.164E+3, 0.28482000E+1, 0.28732000E+1, 0.50556900E+3, + 0.170E+3, 0.165E+3, 0.28482000E+1, 0.29086000E+1, 0.51473030E+3, 0.170E+3, 0.166E+3, + 0.28482000E+1, 0.28965000E+1, 0.47973200E+3, 0.170E+3, 0.167E+3, 0.28482000E+1, 0.29242000E+1, + 0.46600690E+3, 0.170E+3, 0.168E+3, 0.28482000E+1, 0.29282000E+1, 0.46306960E+3, 0.170E+3, + 0.169E+3, 0.28482000E+1, 0.29246000E+1, 0.48707530E+3, 0.170E+3, 0.170E+3, 0.28482000E+1, + 0.28482000E+1, 0.34601200E+2, 0.171E+3, 0.100E+1, 0.29219000E+1, 0.91180000E+0, 0.22892600E+2, + 0.171E+3, 0.200E+1, 0.29219000E+1, 0.00000000E+0, 0.53345810E+3, 0.171E+3, 0.300E+1, + 0.29219000E+1, 0.00000000E+0, 0.30982450E+3, 0.171E+3, 0.400E+1, 0.29219000E+1, 0.00000000E+0, + 0.20900590E+3, 0.171E+3, 0.500E+1, 0.29219000E+1, 0.00000000E+0, 0.14134580E+3, 0.171E+3, + 0.600E+1, 0.29219000E+1, 0.00000000E+0, 0.98922300E+2, 0.171E+3, 0.700E+1, 0.29219000E+1, + 0.00000000E+0, 0.74945100E+2, 0.171E+3, 0.800E+1, 0.29219000E+1, 0.00000000E+0, 0.56812400E+2, + 0.171E+3, 0.900E+1, 0.29219000E+1, 0.00000000E+0, 0.43726300E+2, 0.171E+3, 0.100E+2, + 0.29219000E+1, 0.00000000E+0, 0.63816340E+3, 0.171E+3, 0.110E+2, 0.29219000E+1, 0.00000000E+0, + 0.49328830E+3, 0.171E+3, 0.120E+2, 0.29219000E+1, 0.00000000E+0, 0.45519600E+3, 0.171E+3, + 0.130E+2, 0.29219000E+1, 0.00000000E+0, 0.35911410E+3, 0.171E+3, 0.140E+2, 0.29219000E+1, + 0.00000000E+0, 0.28024060E+3, 0.171E+3, 0.150E+2, 0.29219000E+1, 0.00000000E+0, 0.23266870E+3, + 0.171E+3, 0.160E+2, 0.29219000E+1, 0.00000000E+0, 0.19012190E+3, 0.171E+3, 0.170E+2, + 0.29219000E+1, 0.00000000E+0, 0.15559160E+3, 0.171E+3, 0.180E+2, 0.29219000E+1, 0.00000000E+0, + 0.10444701E+4, 0.171E+3, 0.190E+2, 0.29219000E+1, 0.00000000E+0, 0.86528290E+3, 0.171E+3, + 0.200E+2, 0.29219000E+1, 0.00000000E+0, 0.71536520E+3, 0.171E+3, 0.210E+2, 0.29219000E+1, + 0.00000000E+0, 0.69115730E+3, 0.171E+3, 0.220E+2, 0.29219000E+1, 0.00000000E+0, 0.63311630E+3, + 0.171E+3, 0.230E+2, 0.29219000E+1, 0.00000000E+0, 0.49870530E+3, 0.171E+3, 0.240E+2, + 0.29219000E+1, 0.00000000E+0, 0.54533910E+3, 0.171E+3, 0.250E+2, 0.29219000E+1, 0.00000000E+0, + 0.42801770E+3, 0.171E+3, 0.260E+2, 0.29219000E+1, 0.00000000E+0, 0.45401590E+3, 0.171E+3, + 0.270E+2, 0.29219000E+1, 0.00000000E+0, 0.46756420E+3, 0.171E+3, 0.280E+2, 0.29219000E+1, + 0.00000000E+0, 0.35843930E+3, 0.171E+3, 0.290E+2, 0.29219000E+1, 0.00000000E+0, 0.36835200E+3, + 0.171E+3, 0.300E+2, 0.29219000E+1, 0.00000000E+0, 0.43614550E+3, 0.171E+3, 0.310E+2, + 0.29219000E+1, 0.00000000E+0, 0.38497400E+3, 0.171E+3, 0.320E+2, 0.29219000E+1, 0.00000000E+0, + 0.32854540E+3, 0.171E+3, 0.330E+2, 0.29219000E+1, 0.00000000E+0, 0.29488120E+3, 0.171E+3, + 0.340E+2, 0.29219000E+1, 0.00000000E+0, 0.25811290E+3, 0.171E+3, 0.350E+2, 0.29219000E+1, + 0.00000000E+0, 0.22451100E+3, 0.171E+3, 0.360E+2, 0.29219000E+1, 0.00000000E+0, 0.11708400E+4, + 0.171E+3, 0.370E+2, 0.29219000E+1, 0.00000000E+0, 0.10307165E+4, 0.171E+3, 0.380E+2, + 0.29219000E+1, 0.00000000E+0, 0.90385210E+3, 0.171E+3, 0.390E+2, 0.29219000E+1, 0.00000000E+0, + 0.81281250E+3, 0.171E+3, 0.400E+2, 0.29219000E+1, 0.00000000E+0, 0.74141830E+3, 0.171E+3, + 0.410E+2, 0.29219000E+1, 0.00000000E+0, 0.57266250E+3, 0.171E+3, 0.420E+2, 0.29219000E+1, + 0.00000000E+0, 0.63884880E+3, 0.171E+3, 0.430E+2, 0.29219000E+1, 0.00000000E+0, 0.48694650E+3, + 0.171E+3, 0.440E+2, 0.29219000E+1, 0.00000000E+0, 0.53231850E+3, 0.171E+3, 0.450E+2, + 0.29219000E+1, 0.00000000E+0, 0.49373180E+3, 0.171E+3, 0.460E+2, 0.29219000E+1, 0.00000000E+0, + 0.41158220E+3, 0.171E+3, 0.470E+2, 0.29219000E+1, 0.00000000E+0, 0.43515940E+3, 0.171E+3, + 0.480E+2, 0.29219000E+1, 0.00000000E+0, 0.54577490E+3, 0.171E+3, 0.490E+2, 0.29219000E+1, + 0.00000000E+0, 0.50506710E+3, 0.171E+3, 0.500E+2, 0.29219000E+1, 0.00000000E+0, 0.45032940E+3, + 0.171E+3, 0.510E+2, 0.29219000E+1, 0.00000000E+0, 0.41790250E+3, 0.171E+3, 0.520E+2, + 0.29219000E+1, 0.00000000E+0, 0.37792070E+3, 0.171E+3, 0.530E+2, 0.29219000E+1, 0.00000000E+0, + 0.33981250E+3, 0.171E+3, 0.540E+2, 0.29219000E+1, 0.00000000E+0, 0.14262370E+4, 0.171E+3, + 0.550E+2, 0.29219000E+1, 0.00000000E+0, 0.13133618E+4, 0.171E+3, 0.560E+2, 0.29219000E+1, + 0.00000000E+0, 0.11551299E+4, 0.171E+3, 0.570E+2, 0.29219000E+1, 0.00000000E+0, 0.53193250E+3, + 0.171E+3, 0.580E+2, 0.29219000E+1, 0.27991000E+1, 0.11640997E+4, 0.171E+3, 0.590E+2, + 0.29219000E+1, 0.00000000E+0, 0.11180647E+4, 0.171E+3, 0.600E+2, 0.29219000E+1, 0.00000000E+0, + 0.10900872E+4, 0.171E+3, 0.610E+2, 0.29219000E+1, 0.00000000E+0, 0.10643505E+4, 0.171E+3, + 0.620E+2, 0.29219000E+1, 0.00000000E+0, 0.10415296E+4, 0.171E+3, 0.630E+2, 0.29219000E+1, + 0.00000000E+0, 0.81984680E+3, 0.171E+3, 0.640E+2, 0.29219000E+1, 0.00000000E+0, 0.92133410E+3, + 0.171E+3, 0.650E+2, 0.29219000E+1, 0.00000000E+0, 0.88874530E+3, 0.171E+3, 0.660E+2, + 0.29219000E+1, 0.00000000E+0, 0.93968880E+3, 0.171E+3, 0.670E+2, 0.29219000E+1, 0.00000000E+0, + 0.91978180E+3, 0.171E+3, 0.680E+2, 0.29219000E+1, 0.00000000E+0, 0.90184110E+3, 0.171E+3, + 0.690E+2, 0.29219000E+1, 0.00000000E+0, 0.89126080E+3, 0.171E+3, 0.700E+2, 0.29219000E+1, + 0.00000000E+0, 0.75143080E+3, 0.171E+3, 0.710E+2, 0.29219000E+1, 0.00000000E+0, 0.73969160E+3, + 0.171E+3, 0.720E+2, 0.29219000E+1, 0.00000000E+0, 0.67535320E+3, 0.171E+3, 0.730E+2, + 0.29219000E+1, 0.00000000E+0, 0.57039690E+3, 0.171E+3, 0.740E+2, 0.29219000E+1, 0.00000000E+0, + 0.58039830E+3, 0.171E+3, 0.750E+2, 0.29219000E+1, 0.00000000E+0, 0.52619340E+3, 0.171E+3, + 0.760E+2, 0.29219000E+1, 0.00000000E+0, 0.48201740E+3, 0.171E+3, 0.770E+2, 0.29219000E+1, + 0.00000000E+0, 0.40048290E+3, 0.171E+3, 0.780E+2, 0.29219000E+1, 0.00000000E+0, 0.37420390E+3, + 0.171E+3, 0.790E+2, 0.29219000E+1, 0.00000000E+0, 0.38500720E+3, 0.171E+3, 0.800E+2, + 0.29219000E+1, 0.00000000E+0, 0.56037600E+3, 0.171E+3, 0.810E+2, 0.29219000E+1, 0.00000000E+0, + 0.54825190E+3, 0.171E+3, 0.820E+2, 0.29219000E+1, 0.00000000E+0, 0.50402540E+3, 0.171E+3, + 0.830E+2, 0.29219000E+1, 0.00000000E+0, 0.48080590E+3, 0.171E+3, 0.840E+2, 0.29219000E+1, + 0.00000000E+0, 0.44381570E+3, 0.171E+3, 0.850E+2, 0.29219000E+1, 0.00000000E+0, 0.40683040E+3, + 0.171E+3, 0.860E+2, 0.29219000E+1, 0.00000000E+0, 0.13480198E+4, 0.171E+3, 0.870E+2, + 0.29219000E+1, 0.00000000E+0, 0.12994057E+4, 0.171E+3, 0.880E+2, 0.29219000E+1, 0.00000000E+0, + 0.11497484E+4, 0.171E+3, 0.890E+2, 0.29219000E+1, 0.00000000E+0, 0.10341669E+4, 0.171E+3, + 0.900E+2, 0.29219000E+1, 0.00000000E+0, 0.10262543E+4, 0.171E+3, 0.910E+2, 0.29219000E+1, + 0.00000000E+0, 0.99371920E+3, 0.171E+3, 0.920E+2, 0.29219000E+1, 0.00000000E+0, 0.10225738E+4, + 0.171E+3, 0.930E+2, 0.29219000E+1, 0.00000000E+0, 0.99038000E+3, 0.171E+3, 0.940E+2, + 0.29219000E+1, 0.00000000E+0, 0.55700800E+2, 0.171E+3, 0.101E+3, 0.29219000E+1, 0.00000000E+0, + 0.18012920E+3, 0.171E+3, 0.103E+3, 0.29219000E+1, 0.98650000E+0, 0.22980950E+3, 0.171E+3, + 0.104E+3, 0.29219000E+1, 0.98080000E+0, 0.17585020E+3, 0.171E+3, 0.105E+3, 0.29219000E+1, + 0.97060000E+0, 0.13257550E+3, 0.171E+3, 0.106E+3, 0.29219000E+1, 0.98680000E+0, 0.92251200E+2, + 0.171E+3, 0.107E+3, 0.29219000E+1, 0.99440000E+0, 0.67230800E+2, 0.171E+3, 0.108E+3, + 0.29219000E+1, 0.99250000E+0, 0.46277200E+2, 0.171E+3, 0.109E+3, 0.29219000E+1, 0.99820000E+0, + 0.26322190E+3, 0.171E+3, 0.111E+3, 0.29219000E+1, 0.96840000E+0, 0.40699260E+3, 0.171E+3, + 0.112E+3, 0.29219000E+1, 0.96280000E+0, 0.41261700E+3, 0.171E+3, 0.113E+3, 0.29219000E+1, + 0.96480000E+0, 0.33194510E+3, 0.171E+3, 0.114E+3, 0.29219000E+1, 0.95070000E+0, 0.27202390E+3, + 0.171E+3, 0.115E+3, 0.29219000E+1, 0.99470000E+0, 0.23010400E+3, 0.171E+3, 0.116E+3, + 0.29219000E+1, 0.99480000E+0, 0.18815090E+3, 0.171E+3, 0.117E+3, 0.29219000E+1, 0.99720000E+0, + 0.36307990E+3, 0.171E+3, 0.119E+3, 0.29219000E+1, 0.97670000E+0, 0.69200830E+3, 0.171E+3, + 0.120E+3, 0.29219000E+1, 0.98310000E+0, 0.36363190E+3, 0.171E+3, 0.121E+3, 0.29219000E+1, + 0.18627000E+1, 0.35103090E+3, 0.171E+3, 0.122E+3, 0.29219000E+1, 0.18299000E+1, 0.34401120E+3, + 0.171E+3, 0.123E+3, 0.29219000E+1, 0.19138000E+1, 0.34078980E+3, 0.171E+3, 0.124E+3, + 0.29219000E+1, 0.18269000E+1, 0.31376160E+3, 0.171E+3, 0.125E+3, 0.29219000E+1, 0.16406000E+1, + 0.29041450E+3, 0.171E+3, 0.126E+3, 0.29219000E+1, 0.16483000E+1, 0.27703380E+3, 0.171E+3, + 0.127E+3, 0.29219000E+1, 0.17149000E+1, 0.27082780E+3, 0.171E+3, 0.128E+3, 0.29219000E+1, + 0.17937000E+1, 0.26748920E+3, 0.171E+3, 0.129E+3, 0.29219000E+1, 0.95760000E+0, 0.25114070E+3, + 0.171E+3, 0.130E+3, 0.29219000E+1, 0.19419000E+1, 0.40972790E+3, 0.171E+3, 0.131E+3, + 0.29219000E+1, 0.96010000E+0, 0.36020340E+3, 0.171E+3, 0.132E+3, 0.29219000E+1, 0.94340000E+0, + 0.32297840E+3, 0.171E+3, 0.133E+3, 0.29219000E+1, 0.98890000E+0, 0.29499200E+3, 0.171E+3, + 0.134E+3, 0.29219000E+1, 0.99010000E+0, 0.25990550E+3, 0.171E+3, 0.135E+3, 0.29219000E+1, + 0.99740000E+0, 0.43329230E+3, 0.171E+3, 0.137E+3, 0.29219000E+1, 0.97380000E+0, 0.84185430E+3, + 0.171E+3, 0.138E+3, 0.29219000E+1, 0.98010000E+0, 0.64480130E+3, 0.171E+3, 0.139E+3, + 0.29219000E+1, 0.19153000E+1, 0.48082360E+3, 0.171E+3, 0.140E+3, 0.29219000E+1, 0.19355000E+1, + 0.48558420E+3, 0.171E+3, 0.141E+3, 0.29219000E+1, 0.19545000E+1, 0.45284900E+3, 0.171E+3, + 0.142E+3, 0.29219000E+1, 0.19420000E+1, 0.50743830E+3, 0.171E+3, 0.143E+3, 0.29219000E+1, + 0.16682000E+1, 0.39493050E+3, 0.171E+3, 0.144E+3, 0.29219000E+1, 0.18584000E+1, 0.36947180E+3, + 0.171E+3, 0.145E+3, 0.29219000E+1, 0.19003000E+1, 0.34311040E+3, 0.171E+3, 0.146E+3, + 0.29219000E+1, 0.18630000E+1, 0.33190160E+3, 0.171E+3, 0.147E+3, 0.29219000E+1, 0.96790000E+0, + 0.32846280E+3, 0.171E+3, 0.148E+3, 0.29219000E+1, 0.19539000E+1, 0.52037630E+3, 0.171E+3, + 0.149E+3, 0.29219000E+1, 0.96330000E+0, 0.47110690E+3, 0.171E+3, 0.150E+3, 0.29219000E+1, + 0.95140000E+0, 0.44137250E+3, 0.171E+3, 0.151E+3, 0.29219000E+1, 0.97490000E+0, 0.41760220E+3, + 0.171E+3, 0.152E+3, 0.29219000E+1, 0.98110000E+0, 0.38146630E+3, 0.171E+3, 0.153E+3, + 0.29219000E+1, 0.99680000E+0, 0.51266580E+3, 0.171E+3, 0.155E+3, 0.29219000E+1, 0.99090000E+0, + 0.10908422E+4, 0.171E+3, 0.156E+3, 0.29219000E+1, 0.97970000E+0, 0.81591040E+3, 0.171E+3, + 0.157E+3, 0.29219000E+1, 0.19373000E+1, 0.51590750E+3, 0.171E+3, 0.159E+3, 0.29219000E+1, + 0.29425000E+1, 0.50524280E+3, 0.171E+3, 0.160E+3, 0.29219000E+1, 0.29455000E+1, 0.48924070E+3, + 0.171E+3, 0.161E+3, 0.29219000E+1, 0.29413000E+1, 0.49159590E+3, 0.171E+3, 0.162E+3, + 0.29219000E+1, 0.29300000E+1, 0.47374820E+3, 0.171E+3, 0.163E+3, 0.29219000E+1, 0.18286000E+1, + 0.49470080E+3, 0.171E+3, 0.164E+3, 0.29219000E+1, 0.28732000E+1, 0.46468280E+3, 0.171E+3, + 0.165E+3, 0.29219000E+1, 0.29086000E+1, 0.47273450E+3, 0.171E+3, 0.166E+3, 0.29219000E+1, + 0.28965000E+1, 0.44109990E+3, 0.171E+3, 0.167E+3, 0.29219000E+1, 0.29242000E+1, 0.42854250E+3, + 0.171E+3, 0.168E+3, 0.29219000E+1, 0.29282000E+1, 0.42578520E+3, 0.171E+3, 0.169E+3, + 0.29219000E+1, 0.29246000E+1, 0.44751580E+3, 0.171E+3, 0.170E+3, 0.29219000E+1, 0.28482000E+1, + 0.41156650E+3, 0.171E+3, 0.171E+3, 0.29219000E+1, 0.29219000E+1, 0.45346600E+2, 0.172E+3, + 0.100E+1, 0.19254000E+1, 0.91180000E+0, 0.28998600E+2, 0.172E+3, 0.200E+1, 0.19254000E+1, + 0.00000000E+0, 0.83344750E+3, 0.172E+3, 0.300E+1, 0.19254000E+1, 0.00000000E+0, 0.44256360E+3, + 0.172E+3, 0.400E+1, 0.19254000E+1, 0.00000000E+0, 0.28628310E+3, 0.172E+3, 0.500E+1, + 0.19254000E+1, 0.00000000E+0, 0.18798820E+3, 0.172E+3, 0.600E+1, 0.19254000E+1, 0.00000000E+0, + 0.12879820E+3, 0.172E+3, 0.700E+1, 0.19254000E+1, 0.00000000E+0, 0.96142400E+2, 0.172E+3, + 0.800E+1, 0.19254000E+1, 0.00000000E+0, 0.71959700E+2, 0.172E+3, 0.900E+1, 0.19254000E+1, + 0.00000000E+0, 0.54816700E+2, 0.172E+3, 0.100E+2, 0.19254000E+1, 0.00000000E+0, 0.99134020E+3, + 0.172E+3, 0.110E+2, 0.19254000E+1, 0.00000000E+0, 0.71475720E+3, 0.172E+3, 0.120E+2, + 0.19254000E+1, 0.00000000E+0, 0.64492820E+3, 0.172E+3, 0.130E+2, 0.19254000E+1, 0.00000000E+0, + 0.49384800E+3, 0.172E+3, 0.140E+2, 0.19254000E+1, 0.00000000E+0, 0.37640650E+3, 0.172E+3, + 0.150E+2, 0.19254000E+1, 0.00000000E+0, 0.30798130E+3, 0.172E+3, 0.160E+2, 0.19254000E+1, + 0.00000000E+0, 0.24821220E+3, 0.172E+3, 0.170E+2, 0.19254000E+1, 0.00000000E+0, 0.20073430E+3, + 0.172E+3, 0.180E+2, 0.19254000E+1, 0.00000000E+0, 0.16539476E+4, 0.172E+3, 0.190E+2, + 0.19254000E+1, 0.00000000E+0, 0.12894650E+4, 0.172E+3, 0.200E+2, 0.19254000E+1, 0.00000000E+0, + 0.10530789E+4, 0.172E+3, 0.210E+2, 0.19254000E+1, 0.00000000E+0, 0.10073778E+4, 0.172E+3, + 0.220E+2, 0.19254000E+1, 0.00000000E+0, 0.91714520E+3, 0.172E+3, 0.230E+2, 0.19254000E+1, + 0.00000000E+0, 0.72238490E+3, 0.172E+3, 0.240E+2, 0.19254000E+1, 0.00000000E+0, 0.78308020E+3, + 0.172E+3, 0.250E+2, 0.19254000E+1, 0.00000000E+0, 0.61378620E+3, 0.172E+3, 0.260E+2, + 0.19254000E+1, 0.00000000E+0, 0.64219290E+3, 0.172E+3, 0.270E+2, 0.19254000E+1, 0.00000000E+0, + 0.66532650E+3, 0.172E+3, 0.280E+2, 0.19254000E+1, 0.00000000E+0, 0.51028620E+3, 0.172E+3, + 0.290E+2, 0.19254000E+1, 0.00000000E+0, 0.51419020E+3, 0.172E+3, 0.300E+2, 0.19254000E+1, + 0.00000000E+0, 0.61287020E+3, 0.172E+3, 0.310E+2, 0.19254000E+1, 0.00000000E+0, 0.52847210E+3, + 0.172E+3, 0.320E+2, 0.19254000E+1, 0.00000000E+0, 0.44218700E+3, 0.172E+3, 0.330E+2, + 0.19254000E+1, 0.00000000E+0, 0.39224560E+3, 0.172E+3, 0.340E+2, 0.19254000E+1, 0.00000000E+0, + 0.33928530E+3, 0.172E+3, 0.350E+2, 0.19254000E+1, 0.00000000E+0, 0.29196450E+3, 0.172E+3, + 0.360E+2, 0.19254000E+1, 0.00000000E+0, 0.18469699E+4, 0.172E+3, 0.370E+2, 0.19254000E+1, + 0.00000000E+0, 0.15403424E+4, 0.172E+3, 0.380E+2, 0.19254000E+1, 0.00000000E+0, 0.13230311E+4, + 0.172E+3, 0.390E+2, 0.19254000E+1, 0.00000000E+0, 0.11750345E+4, 0.172E+3, 0.400E+2, + 0.19254000E+1, 0.00000000E+0, 0.10634756E+4, 0.172E+3, 0.410E+2, 0.19254000E+1, 0.00000000E+0, + 0.81065520E+3, 0.172E+3, 0.420E+2, 0.19254000E+1, 0.00000000E+0, 0.90884210E+3, 0.172E+3, + 0.430E+2, 0.19254000E+1, 0.00000000E+0, 0.68268070E+3, 0.172E+3, 0.440E+2, 0.19254000E+1, + 0.00000000E+0, 0.74565500E+3, 0.172E+3, 0.450E+2, 0.19254000E+1, 0.00000000E+0, 0.68814480E+3, + 0.172E+3, 0.460E+2, 0.19254000E+1, 0.00000000E+0, 0.57595500E+3, 0.172E+3, 0.470E+2, + 0.19254000E+1, 0.00000000E+0, 0.60264510E+3, 0.172E+3, 0.480E+2, 0.19254000E+1, 0.00000000E+0, + 0.76801030E+3, 0.172E+3, 0.490E+2, 0.19254000E+1, 0.00000000E+0, 0.69681050E+3, 0.172E+3, + 0.500E+2, 0.19254000E+1, 0.00000000E+0, 0.61025270E+3, 0.172E+3, 0.510E+2, 0.19254000E+1, + 0.00000000E+0, 0.56048120E+3, 0.172E+3, 0.520E+2, 0.19254000E+1, 0.00000000E+0, 0.50136210E+3, + 0.172E+3, 0.530E+2, 0.19254000E+1, 0.00000000E+0, 0.44626410E+3, 0.172E+3, 0.540E+2, + 0.19254000E+1, 0.00000000E+0, 0.22528586E+4, 0.172E+3, 0.550E+2, 0.19254000E+1, 0.00000000E+0, + 0.19789909E+4, 0.172E+3, 0.560E+2, 0.19254000E+1, 0.00000000E+0, 0.17040270E+4, 0.172E+3, + 0.570E+2, 0.19254000E+1, 0.00000000E+0, 0.72344560E+3, 0.172E+3, 0.580E+2, 0.19254000E+1, + 0.27991000E+1, 0.17420729E+4, 0.172E+3, 0.590E+2, 0.19254000E+1, 0.00000000E+0, 0.16661615E+4, + 0.172E+3, 0.600E+2, 0.19254000E+1, 0.00000000E+0, 0.16226978E+4, 0.172E+3, 0.610E+2, + 0.19254000E+1, 0.00000000E+0, 0.15829071E+4, 0.172E+3, 0.620E+2, 0.19254000E+1, 0.00000000E+0, + 0.15475750E+4, 0.172E+3, 0.630E+2, 0.19254000E+1, 0.00000000E+0, 0.11920226E+4, 0.172E+3, + 0.640E+2, 0.19254000E+1, 0.00000000E+0, 0.13894684E+4, 0.172E+3, 0.650E+2, 0.19254000E+1, + 0.00000000E+0, 0.13360613E+4, 0.172E+3, 0.660E+2, 0.19254000E+1, 0.00000000E+0, 0.13884173E+4, + 0.172E+3, 0.670E+2, 0.19254000E+1, 0.00000000E+0, 0.13581065E+4, 0.172E+3, 0.680E+2, + 0.19254000E+1, 0.00000000E+0, 0.13304473E+4, 0.172E+3, 0.690E+2, 0.19254000E+1, 0.00000000E+0, + 0.13159859E+4, 0.172E+3, 0.700E+2, 0.19254000E+1, 0.00000000E+0, 0.10939351E+4, 0.172E+3, + 0.710E+2, 0.19254000E+1, 0.00000000E+0, 0.10543108E+4, 0.172E+3, 0.720E+2, 0.19254000E+1, + 0.00000000E+0, 0.95118510E+3, 0.172E+3, 0.730E+2, 0.19254000E+1, 0.00000000E+0, 0.79676620E+3, + 0.172E+3, 0.740E+2, 0.19254000E+1, 0.00000000E+0, 0.80679990E+3, 0.172E+3, 0.750E+2, + 0.19254000E+1, 0.00000000E+0, 0.72412960E+3, 0.172E+3, 0.760E+2, 0.19254000E+1, 0.00000000E+0, + 0.65806160E+3, 0.172E+3, 0.770E+2, 0.19254000E+1, 0.00000000E+0, 0.54245470E+3, 0.172E+3, + 0.780E+2, 0.19254000E+1, 0.00000000E+0, 0.50520370E+3, 0.172E+3, 0.790E+2, 0.19254000E+1, + 0.00000000E+0, 0.51767100E+3, 0.172E+3, 0.800E+2, 0.19254000E+1, 0.00000000E+0, 0.78562040E+3, + 0.172E+3, 0.810E+2, 0.19254000E+1, 0.00000000E+0, 0.75633770E+3, 0.172E+3, 0.820E+2, + 0.19254000E+1, 0.00000000E+0, 0.68397230E+3, 0.172E+3, 0.830E+2, 0.19254000E+1, 0.00000000E+0, + 0.64657460E+3, 0.172E+3, 0.840E+2, 0.19254000E+1, 0.00000000E+0, 0.59053860E+3, 0.172E+3, + 0.850E+2, 0.19254000E+1, 0.00000000E+0, 0.53625670E+3, 0.172E+3, 0.860E+2, 0.19254000E+1, + 0.00000000E+0, 0.20908542E+4, 0.172E+3, 0.870E+2, 0.19254000E+1, 0.00000000E+0, 0.19370166E+4, + 0.172E+3, 0.880E+2, 0.19254000E+1, 0.00000000E+0, 0.16804201E+4, 0.172E+3, 0.890E+2, + 0.19254000E+1, 0.00000000E+0, 0.14797956E+4, 0.172E+3, 0.900E+2, 0.19254000E+1, 0.00000000E+0, + 0.14847146E+4, 0.172E+3, 0.910E+2, 0.19254000E+1, 0.00000000E+0, 0.14366817E+4, 0.172E+3, + 0.920E+2, 0.19254000E+1, 0.00000000E+0, 0.14973302E+4, 0.172E+3, 0.930E+2, 0.19254000E+1, + 0.00000000E+0, 0.14464901E+4, 0.172E+3, 0.940E+2, 0.19254000E+1, 0.00000000E+0, 0.74629200E+2, + 0.172E+3, 0.101E+3, 0.19254000E+1, 0.00000000E+0, 0.25592080E+3, 0.172E+3, 0.103E+3, + 0.19254000E+1, 0.98650000E+0, 0.32443230E+3, 0.172E+3, 0.104E+3, 0.19254000E+1, 0.98080000E+0, + 0.23897670E+3, 0.172E+3, 0.105E+3, 0.19254000E+1, 0.97060000E+0, 0.17654080E+3, 0.172E+3, + 0.106E+3, 0.19254000E+1, 0.98680000E+0, 0.12010680E+3, 0.172E+3, 0.107E+3, 0.19254000E+1, + 0.99440000E+0, 0.85937000E+2, 0.172E+3, 0.108E+3, 0.19254000E+1, 0.99250000E+0, 0.57827200E+2, + 0.172E+3, 0.109E+3, 0.19254000E+1, 0.99820000E+0, 0.37699540E+3, 0.172E+3, 0.111E+3, + 0.19254000E+1, 0.96840000E+0, 0.58570530E+3, 0.172E+3, 0.112E+3, 0.19254000E+1, 0.96280000E+0, + 0.58157180E+3, 0.172E+3, 0.113E+3, 0.19254000E+1, 0.96480000E+0, 0.45471270E+3, 0.172E+3, + 0.114E+3, 0.19254000E+1, 0.95070000E+0, 0.36512350E+3, 0.172E+3, 0.115E+3, 0.19254000E+1, + 0.99470000E+0, 0.30470560E+3, 0.172E+3, 0.116E+3, 0.19254000E+1, 0.99480000E+0, 0.24570480E+3, + 0.172E+3, 0.117E+3, 0.19254000E+1, 0.99720000E+0, 0.51281530E+3, 0.172E+3, 0.119E+3, + 0.19254000E+1, 0.97670000E+0, 0.10341456E+4, 0.172E+3, 0.120E+3, 0.19254000E+1, 0.98310000E+0, + 0.50045280E+3, 0.172E+3, 0.121E+3, 0.19254000E+1, 0.18627000E+1, 0.48316910E+3, 0.172E+3, + 0.122E+3, 0.19254000E+1, 0.18299000E+1, 0.47364140E+3, 0.172E+3, 0.123E+3, 0.19254000E+1, + 0.19138000E+1, 0.47060760E+3, 0.172E+3, 0.124E+3, 0.19254000E+1, 0.18269000E+1, 0.42699780E+3, + 0.172E+3, 0.125E+3, 0.19254000E+1, 0.16406000E+1, 0.39370530E+3, 0.172E+3, 0.126E+3, + 0.19254000E+1, 0.16483000E+1, 0.37565220E+3, 0.172E+3, 0.127E+3, 0.19254000E+1, 0.17149000E+1, + 0.36764140E+3, 0.172E+3, 0.128E+3, 0.19254000E+1, 0.17937000E+1, 0.36693480E+3, 0.172E+3, + 0.129E+3, 0.19254000E+1, 0.95760000E+0, 0.33796290E+3, 0.172E+3, 0.130E+3, 0.19254000E+1, + 0.19419000E+1, 0.57232270E+3, 0.172E+3, 0.131E+3, 0.19254000E+1, 0.96010000E+0, 0.49197380E+3, + 0.172E+3, 0.132E+3, 0.19254000E+1, 0.94340000E+0, 0.43422870E+3, 0.172E+3, 0.133E+3, + 0.19254000E+1, 0.98890000E+0, 0.39247750E+3, 0.172E+3, 0.134E+3, 0.19254000E+1, 0.99010000E+0, + 0.34185570E+3, 0.172E+3, 0.135E+3, 0.19254000E+1, 0.99740000E+0, 0.60910480E+3, 0.172E+3, + 0.137E+3, 0.19254000E+1, 0.97380000E+0, 0.12632459E+4, 0.172E+3, 0.138E+3, 0.19254000E+1, + 0.98010000E+0, 0.92911650E+3, 0.172E+3, 0.139E+3, 0.19254000E+1, 0.19153000E+1, 0.66400370E+3, + 0.172E+3, 0.140E+3, 0.19254000E+1, 0.19355000E+1, 0.67040190E+3, 0.172E+3, 0.141E+3, + 0.19254000E+1, 0.19545000E+1, 0.62262030E+3, 0.172E+3, 0.142E+3, 0.19254000E+1, 0.19420000E+1, + 0.71174240E+3, 0.172E+3, 0.143E+3, 0.19254000E+1, 0.16682000E+1, 0.53554020E+3, 0.172E+3, + 0.144E+3, 0.19254000E+1, 0.18584000E+1, 0.50050420E+3, 0.172E+3, 0.145E+3, 0.19254000E+1, + 0.19003000E+1, 0.46368240E+3, 0.172E+3, 0.146E+3, 0.19254000E+1, 0.18630000E+1, 0.44930820E+3, + 0.172E+3, 0.147E+3, 0.19254000E+1, 0.96790000E+0, 0.43997740E+3, 0.172E+3, 0.148E+3, + 0.19254000E+1, 0.19539000E+1, 0.72721640E+3, 0.172E+3, 0.149E+3, 0.19254000E+1, 0.96330000E+0, + 0.64540420E+3, 0.172E+3, 0.150E+3, 0.19254000E+1, 0.95140000E+0, 0.59673110E+3, 0.172E+3, + 0.151E+3, 0.19254000E+1, 0.97490000E+0, 0.55972270E+3, 0.172E+3, 0.152E+3, 0.19254000E+1, + 0.98110000E+0, 0.50615680E+3, 0.172E+3, 0.153E+3, 0.19254000E+1, 0.99680000E+0, 0.71003790E+3, + 0.172E+3, 0.155E+3, 0.19254000E+1, 0.99090000E+0, 0.16551217E+4, 0.172E+3, 0.156E+3, + 0.19254000E+1, 0.97970000E+0, 0.11811130E+4, 0.172E+3, 0.157E+3, 0.19254000E+1, 0.19373000E+1, + 0.70092550E+3, 0.172E+3, 0.159E+3, 0.19254000E+1, 0.29425000E+1, 0.68627630E+3, 0.172E+3, + 0.160E+3, 0.19254000E+1, 0.29455000E+1, 0.66395860E+3, 0.172E+3, 0.161E+3, 0.19254000E+1, + 0.29413000E+1, 0.66917280E+3, 0.172E+3, 0.162E+3, 0.19254000E+1, 0.29300000E+1, 0.65059990E+3, + 0.172E+3, 0.163E+3, 0.19254000E+1, 0.18286000E+1, 0.67380220E+3, 0.172E+3, 0.164E+3, + 0.19254000E+1, 0.28732000E+1, 0.63135970E+3, 0.172E+3, 0.165E+3, 0.19254000E+1, 0.29086000E+1, + 0.64587040E+3, 0.172E+3, 0.166E+3, 0.19254000E+1, 0.28965000E+1, 0.59787350E+3, 0.172E+3, + 0.167E+3, 0.19254000E+1, 0.29242000E+1, 0.58033350E+3, 0.172E+3, 0.168E+3, 0.19254000E+1, + 0.29282000E+1, 0.57700390E+3, 0.172E+3, 0.169E+3, 0.19254000E+1, 0.29246000E+1, 0.60871420E+3, + 0.172E+3, 0.170E+3, 0.19254000E+1, 0.28482000E+1, 0.55695720E+3, 0.172E+3, 0.171E+3, + 0.19254000E+1, 0.29219000E+1, 0.78038720E+3, 0.172E+3, 0.172E+3, 0.19254000E+1, 0.19254000E+1, + 0.42599100E+2, 0.173E+3, 0.100E+1, 0.19459000E+1, 0.91180000E+0, 0.27620800E+2, 0.173E+3, + 0.200E+1, 0.19459000E+1, 0.00000000E+0, 0.73880890E+3, 0.173E+3, 0.300E+1, 0.19459000E+1, + 0.00000000E+0, 0.40322390E+3, 0.173E+3, 0.400E+1, 0.19459000E+1, 0.00000000E+0, 0.26458080E+3, + 0.173E+3, 0.500E+1, 0.19459000E+1, 0.00000000E+0, 0.17562680E+3, 0.173E+3, 0.600E+1, + 0.19459000E+1, 0.00000000E+0, 0.12132320E+3, 0.173E+3, 0.700E+1, 0.19459000E+1, 0.00000000E+0, + 0.91102500E+2, 0.173E+3, 0.800E+1, 0.19459000E+1, 0.00000000E+0, 0.68542500E+2, 0.173E+3, + 0.900E+1, 0.19459000E+1, 0.00000000E+0, 0.52435800E+2, 0.173E+3, 0.100E+2, 0.19459000E+1, + 0.00000000E+0, 0.88035320E+3, 0.173E+3, 0.110E+2, 0.19459000E+1, 0.00000000E+0, 0.64829810E+3, + 0.173E+3, 0.120E+2, 0.19459000E+1, 0.00000000E+0, 0.58923010E+3, 0.173E+3, 0.130E+2, + 0.19459000E+1, 0.00000000E+0, 0.45575650E+3, 0.173E+3, 0.140E+2, 0.19459000E+1, 0.00000000E+0, + 0.35031540E+3, 0.173E+3, 0.150E+2, 0.19459000E+1, 0.00000000E+0, 0.28821970E+3, 0.173E+3, + 0.160E+2, 0.19459000E+1, 0.00000000E+0, 0.23353600E+3, 0.173E+3, 0.170E+2, 0.19459000E+1, + 0.00000000E+0, 0.18976410E+3, 0.173E+3, 0.180E+2, 0.19459000E+1, 0.00000000E+0, 0.14604707E+4, + 0.173E+3, 0.190E+2, 0.19459000E+1, 0.00000000E+0, 0.11597504E+4, 0.173E+3, 0.200E+2, + 0.19459000E+1, 0.00000000E+0, 0.95068620E+3, 0.173E+3, 0.210E+2, 0.19459000E+1, 0.00000000E+0, + 0.91232910E+3, 0.173E+3, 0.220E+2, 0.19459000E+1, 0.00000000E+0, 0.83223310E+3, 0.173E+3, + 0.230E+2, 0.19459000E+1, 0.00000000E+0, 0.65570910E+3, 0.173E+3, 0.240E+2, 0.19459000E+1, + 0.00000000E+0, 0.71259280E+3, 0.173E+3, 0.250E+2, 0.19459000E+1, 0.00000000E+0, 0.55895410E+3, + 0.173E+3, 0.260E+2, 0.19459000E+1, 0.00000000E+0, 0.58724740E+3, 0.173E+3, 0.270E+2, + 0.19459000E+1, 0.00000000E+0, 0.60719280E+3, 0.173E+3, 0.280E+2, 0.19459000E+1, 0.00000000E+0, + 0.46580690E+3, 0.173E+3, 0.290E+2, 0.19459000E+1, 0.00000000E+0, 0.47225470E+3, 0.173E+3, + 0.300E+2, 0.19459000E+1, 0.00000000E+0, 0.56160790E+3, 0.173E+3, 0.310E+2, 0.19459000E+1, + 0.00000000E+0, 0.48807900E+3, 0.173E+3, 0.320E+2, 0.19459000E+1, 0.00000000E+0, 0.41125650E+3, + 0.173E+3, 0.330E+2, 0.19459000E+1, 0.00000000E+0, 0.36640670E+3, 0.173E+3, 0.340E+2, + 0.19459000E+1, 0.00000000E+0, 0.31837520E+3, 0.173E+3, 0.350E+2, 0.19459000E+1, 0.00000000E+0, + 0.27512740E+3, 0.173E+3, 0.360E+2, 0.19459000E+1, 0.00000000E+0, 0.16328526E+4, 0.173E+3, + 0.370E+2, 0.19459000E+1, 0.00000000E+0, 0.13843496E+4, 0.173E+3, 0.380E+2, 0.19459000E+1, + 0.00000000E+0, 0.11967064E+4, 0.173E+3, 0.390E+2, 0.19459000E+1, 0.00000000E+0, 0.10670698E+4, + 0.173E+3, 0.400E+2, 0.19459000E+1, 0.00000000E+0, 0.96823440E+3, 0.173E+3, 0.410E+2, + 0.19459000E+1, 0.00000000E+0, 0.74142020E+3, 0.173E+3, 0.420E+2, 0.19459000E+1, 0.00000000E+0, + 0.82976170E+3, 0.173E+3, 0.430E+2, 0.19459000E+1, 0.00000000E+0, 0.62645270E+3, 0.173E+3, + 0.440E+2, 0.19459000E+1, 0.00000000E+0, 0.68426530E+3, 0.173E+3, 0.450E+2, 0.19459000E+1, + 0.00000000E+0, 0.63255740E+3, 0.173E+3, 0.460E+2, 0.19459000E+1, 0.00000000E+0, 0.52892880E+3, + 0.173E+3, 0.470E+2, 0.19459000E+1, 0.00000000E+0, 0.55516740E+3, 0.173E+3, 0.480E+2, + 0.19459000E+1, 0.00000000E+0, 0.70365600E+3, 0.173E+3, 0.490E+2, 0.19459000E+1, 0.00000000E+0, + 0.64257250E+3, 0.173E+3, 0.500E+2, 0.19459000E+1, 0.00000000E+0, 0.56623950E+3, 0.173E+3, + 0.510E+2, 0.19459000E+1, 0.00000000E+0, 0.52199830E+3, 0.173E+3, 0.520E+2, 0.19459000E+1, + 0.00000000E+0, 0.46882570E+3, 0.173E+3, 0.530E+2, 0.19459000E+1, 0.00000000E+0, 0.41891390E+3, + 0.173E+3, 0.540E+2, 0.19459000E+1, 0.00000000E+0, 0.19906514E+4, 0.173E+3, 0.550E+2, + 0.19459000E+1, 0.00000000E+0, 0.17742433E+4, 0.173E+3, 0.560E+2, 0.19459000E+1, 0.00000000E+0, + 0.15377374E+4, 0.173E+3, 0.570E+2, 0.19459000E+1, 0.00000000E+0, 0.67054450E+3, 0.173E+3, + 0.580E+2, 0.19459000E+1, 0.27991000E+1, 0.15650227E+4, 0.173E+3, 0.590E+2, 0.19459000E+1, + 0.00000000E+0, 0.14988909E+4, 0.173E+3, 0.600E+2, 0.19459000E+1, 0.00000000E+0, 0.14602740E+4, + 0.173E+3, 0.610E+2, 0.19459000E+1, 0.00000000E+0, 0.14248668E+4, 0.173E+3, 0.620E+2, + 0.19459000E+1, 0.00000000E+0, 0.13934393E+4, 0.173E+3, 0.630E+2, 0.19459000E+1, 0.00000000E+0, + 0.10807361E+4, 0.173E+3, 0.640E+2, 0.19459000E+1, 0.00000000E+0, 0.12454654E+4, 0.173E+3, + 0.650E+2, 0.19459000E+1, 0.00000000E+0, 0.11985562E+4, 0.173E+3, 0.660E+2, 0.19459000E+1, + 0.00000000E+0, 0.12522798E+4, 0.173E+3, 0.670E+2, 0.19459000E+1, 0.00000000E+0, 0.12251780E+4, + 0.173E+3, 0.680E+2, 0.19459000E+1, 0.00000000E+0, 0.12005428E+4, 0.173E+3, 0.690E+2, + 0.19459000E+1, 0.00000000E+0, 0.11871547E+4, 0.173E+3, 0.700E+2, 0.19459000E+1, 0.00000000E+0, + 0.99115750E+3, 0.173E+3, 0.710E+2, 0.19459000E+1, 0.00000000E+0, 0.96178800E+3, 0.173E+3, + 0.720E+2, 0.19459000E+1, 0.00000000E+0, 0.87115170E+3, 0.173E+3, 0.730E+2, 0.19459000E+1, + 0.00000000E+0, 0.73191440E+3, 0.173E+3, 0.740E+2, 0.19459000E+1, 0.00000000E+0, 0.74227510E+3, + 0.173E+3, 0.750E+2, 0.19459000E+1, 0.00000000E+0, 0.66851880E+3, 0.173E+3, 0.760E+2, + 0.19459000E+1, 0.00000000E+0, 0.60921920E+3, 0.173E+3, 0.770E+2, 0.19459000E+1, 0.00000000E+0, + 0.50370150E+3, 0.173E+3, 0.780E+2, 0.19459000E+1, 0.00000000E+0, 0.46968660E+3, 0.173E+3, + 0.790E+2, 0.19459000E+1, 0.00000000E+0, 0.48188500E+3, 0.173E+3, 0.800E+2, 0.19459000E+1, + 0.00000000E+0, 0.72091450E+3, 0.173E+3, 0.810E+2, 0.19459000E+1, 0.00000000E+0, 0.69765140E+3, + 0.173E+3, 0.820E+2, 0.19459000E+1, 0.00000000E+0, 0.63443450E+3, 0.173E+3, 0.830E+2, + 0.19459000E+1, 0.00000000E+0, 0.60166450E+3, 0.173E+3, 0.840E+2, 0.19459000E+1, 0.00000000E+0, + 0.55163790E+3, 0.173E+3, 0.850E+2, 0.19459000E+1, 0.00000000E+0, 0.50269970E+3, 0.173E+3, + 0.860E+2, 0.19459000E+1, 0.00000000E+0, 0.18580508E+4, 0.173E+3, 0.870E+2, 0.19459000E+1, + 0.00000000E+0, 0.17424506E+4, 0.173E+3, 0.880E+2, 0.19459000E+1, 0.00000000E+0, 0.15208103E+4, + 0.173E+3, 0.890E+2, 0.19459000E+1, 0.00000000E+0, 0.13484147E+4, 0.173E+3, 0.900E+2, + 0.19459000E+1, 0.00000000E+0, 0.13482588E+4, 0.173E+3, 0.910E+2, 0.19459000E+1, 0.00000000E+0, + 0.13049404E+4, 0.173E+3, 0.920E+2, 0.19459000E+1, 0.00000000E+0, 0.13545615E+4, 0.173E+3, + 0.930E+2, 0.19459000E+1, 0.00000000E+0, 0.13096099E+4, 0.173E+3, 0.940E+2, 0.19459000E+1, + 0.00000000E+0, 0.69517200E+2, 0.173E+3, 0.101E+3, 0.19459000E+1, 0.00000000E+0, 0.23360750E+3, + 0.173E+3, 0.103E+3, 0.19459000E+1, 0.98650000E+0, 0.29681730E+3, 0.173E+3, 0.104E+3, + 0.19459000E+1, 0.98080000E+0, 0.22150850E+3, 0.173E+3, 0.105E+3, 0.19459000E+1, 0.97060000E+0, + 0.16489220E+3, 0.173E+3, 0.106E+3, 0.19459000E+1, 0.98680000E+0, 0.11316000E+3, 0.173E+3, + 0.107E+3, 0.19459000E+1, 0.99440000E+0, 0.81561000E+2, 0.173E+3, 0.108E+3, 0.19459000E+1, + 0.99250000E+0, 0.55390500E+2, 0.173E+3, 0.109E+3, 0.19459000E+1, 0.99820000E+0, 0.34328010E+3, + 0.173E+3, 0.111E+3, 0.19459000E+1, 0.96840000E+0, 0.53247660E+3, 0.173E+3, 0.112E+3, + 0.19459000E+1, 0.96280000E+0, 0.53228640E+3, 0.173E+3, 0.113E+3, 0.19459000E+1, 0.96480000E+0, + 0.42023260E+3, 0.173E+3, 0.114E+3, 0.19459000E+1, 0.95070000E+0, 0.33991220E+3, 0.173E+3, + 0.115E+3, 0.19459000E+1, 0.99470000E+0, 0.28511970E+3, 0.173E+3, 0.116E+3, 0.19459000E+1, + 0.99480000E+0, 0.23115710E+3, 0.173E+3, 0.117E+3, 0.19459000E+1, 0.99720000E+0, 0.46941050E+3, + 0.173E+3, 0.119E+3, 0.19459000E+1, 0.97670000E+0, 0.92943790E+3, 0.173E+3, 0.120E+3, + 0.19459000E+1, 0.98310000E+0, 0.46193760E+3, 0.173E+3, 0.121E+3, 0.19459000E+1, 0.18627000E+1, + 0.44595790E+3, 0.173E+3, 0.122E+3, 0.19459000E+1, 0.18299000E+1, 0.43713970E+3, 0.173E+3, + 0.123E+3, 0.19459000E+1, 0.19138000E+1, 0.43391220E+3, 0.173E+3, 0.124E+3, 0.19459000E+1, + 0.18269000E+1, 0.39561160E+3, 0.173E+3, 0.125E+3, 0.19459000E+1, 0.16406000E+1, 0.36527420E+3, + 0.173E+3, 0.126E+3, 0.19459000E+1, 0.16483000E+1, 0.34851570E+3, 0.173E+3, 0.127E+3, + 0.19459000E+1, 0.17149000E+1, 0.34095800E+3, 0.173E+3, 0.128E+3, 0.19459000E+1, 0.17937000E+1, + 0.33910500E+3, 0.173E+3, 0.129E+3, 0.19459000E+1, 0.95760000E+0, 0.31436170E+3, 0.173E+3, + 0.130E+3, 0.19459000E+1, 0.19419000E+1, 0.52550400E+3, 0.173E+3, 0.131E+3, 0.19459000E+1, + 0.96010000E+0, 0.45518330E+3, 0.173E+3, 0.132E+3, 0.19459000E+1, 0.94340000E+0, 0.40401890E+3, + 0.173E+3, 0.133E+3, 0.19459000E+1, 0.98890000E+0, 0.36659830E+3, 0.173E+3, 0.134E+3, + 0.19459000E+1, 0.99010000E+0, 0.32071300E+3, 0.173E+3, 0.135E+3, 0.19459000E+1, 0.99740000E+0, + 0.55849190E+3, 0.173E+3, 0.137E+3, 0.19459000E+1, 0.97380000E+0, 0.11339963E+4, 0.173E+3, + 0.138E+3, 0.19459000E+1, 0.98010000E+0, 0.84472340E+3, 0.173E+3, 0.139E+3, 0.19459000E+1, + 0.19153000E+1, 0.61231920E+3, 0.173E+3, 0.140E+3, 0.19459000E+1, 0.19355000E+1, 0.61833280E+3, + 0.173E+3, 0.141E+3, 0.19459000E+1, 0.19545000E+1, 0.57504470E+3, 0.173E+3, 0.142E+3, + 0.19459000E+1, 0.19420000E+1, 0.65304060E+3, 0.173E+3, 0.143E+3, 0.19459000E+1, 0.16682000E+1, + 0.49697040E+3, 0.173E+3, 0.144E+3, 0.19459000E+1, 0.18584000E+1, 0.46466380E+3, 0.173E+3, + 0.145E+3, 0.19459000E+1, 0.19003000E+1, 0.43087120E+3, 0.173E+3, 0.146E+3, 0.19459000E+1, + 0.18630000E+1, 0.41726470E+3, 0.173E+3, 0.147E+3, 0.19459000E+1, 0.96790000E+0, 0.41002790E+3, + 0.173E+3, 0.148E+3, 0.19459000E+1, 0.19539000E+1, 0.66780870E+3, 0.173E+3, 0.149E+3, + 0.19459000E+1, 0.96330000E+0, 0.59661500E+3, 0.173E+3, 0.150E+3, 0.19459000E+1, 0.95140000E+0, + 0.55414990E+3, 0.173E+3, 0.151E+3, 0.19459000E+1, 0.97490000E+0, 0.52141070E+3, 0.173E+3, + 0.152E+3, 0.19459000E+1, 0.98110000E+0, 0.47327510E+3, 0.173E+3, 0.153E+3, 0.19459000E+1, + 0.99680000E+0, 0.65424880E+3, 0.173E+3, 0.155E+3, 0.19459000E+1, 0.99090000E+0, 0.14806088E+4, + 0.173E+3, 0.156E+3, 0.19459000E+1, 0.97970000E+0, 0.10722142E+4, 0.173E+3, 0.157E+3, + 0.19459000E+1, 0.19373000E+1, 0.64990970E+3, 0.173E+3, 0.159E+3, 0.19459000E+1, 0.29425000E+1, + 0.63638010E+3, 0.173E+3, 0.160E+3, 0.19459000E+1, 0.29455000E+1, 0.61587840E+3, 0.173E+3, + 0.161E+3, 0.19459000E+1, 0.29413000E+1, 0.62006220E+3, 0.173E+3, 0.162E+3, 0.19459000E+1, + 0.29300000E+1, 0.60108450E+3, 0.173E+3, 0.163E+3, 0.19459000E+1, 0.18286000E+1, 0.62420110E+3, + 0.173E+3, 0.164E+3, 0.19459000E+1, 0.28732000E+1, 0.58539210E+3, 0.173E+3, 0.165E+3, + 0.19459000E+1, 0.29086000E+1, 0.59771440E+3, 0.173E+3, 0.166E+3, 0.19459000E+1, 0.28965000E+1, + 0.55479820E+3, 0.173E+3, 0.167E+3, 0.19459000E+1, 0.29242000E+1, 0.53868740E+3, 0.173E+3, + 0.168E+3, 0.19459000E+1, 0.29282000E+1, 0.53545990E+3, 0.173E+3, 0.169E+3, 0.19459000E+1, + 0.29246000E+1, 0.56410720E+3, 0.173E+3, 0.170E+3, 0.19459000E+1, 0.28482000E+1, 0.51709820E+3, + 0.173E+3, 0.171E+3, 0.19459000E+1, 0.29219000E+1, 0.71609920E+3, 0.173E+3, 0.172E+3, + 0.19459000E+1, 0.19254000E+1, 0.65975010E+3, 0.173E+3, 0.173E+3, 0.19459000E+1, 0.19459000E+1, + 0.39353000E+2, 0.174E+3, 0.100E+1, 0.19292000E+1, 0.91180000E+0, 0.25891600E+2, 0.174E+3, + 0.200E+1, 0.19292000E+1, 0.00000000E+0, 0.64222390E+3, 0.174E+3, 0.300E+1, 0.19292000E+1, + 0.00000000E+0, 0.36075580E+3, 0.174E+3, 0.400E+1, 0.19292000E+1, 0.00000000E+0, 0.24029820E+3, + 0.174E+3, 0.500E+1, 0.19292000E+1, 0.00000000E+0, 0.16132870E+3, 0.174E+3, 0.600E+1, + 0.19292000E+1, 0.00000000E+0, 0.11241380E+3, 0.174E+3, 0.700E+1, 0.19292000E+1, 0.00000000E+0, + 0.84942800E+2, 0.174E+3, 0.800E+1, 0.19292000E+1, 0.00000000E+0, 0.64260400E+2, 0.174E+3, + 0.900E+1, 0.19292000E+1, 0.00000000E+0, 0.49383000E+2, 0.174E+3, 0.100E+2, 0.19292000E+1, + 0.00000000E+0, 0.76674770E+3, 0.174E+3, 0.110E+2, 0.19292000E+1, 0.00000000E+0, 0.57730020E+3, + 0.174E+3, 0.120E+2, 0.19292000E+1, 0.00000000E+0, 0.52875590E+3, 0.174E+3, 0.130E+2, + 0.19292000E+1, 0.00000000E+0, 0.41330440E+3, 0.174E+3, 0.140E+2, 0.19292000E+1, 0.00000000E+0, + 0.32049320E+3, 0.174E+3, 0.150E+2, 0.19292000E+1, 0.00000000E+0, 0.26521130E+3, 0.174E+3, + 0.160E+2, 0.19292000E+1, 0.00000000E+0, 0.21610340E+3, 0.174E+3, 0.170E+2, 0.19292000E+1, + 0.00000000E+0, 0.17647630E+3, 0.174E+3, 0.180E+2, 0.19292000E+1, 0.00000000E+0, 0.12652105E+4, + 0.174E+3, 0.190E+2, 0.19292000E+1, 0.00000000E+0, 0.10237513E+4, 0.174E+3, 0.200E+2, + 0.19292000E+1, 0.00000000E+0, 0.84249870E+3, 0.174E+3, 0.210E+2, 0.19292000E+1, 0.00000000E+0, + 0.81128040E+3, 0.174E+3, 0.220E+2, 0.19292000E+1, 0.00000000E+0, 0.74159550E+3, 0.174E+3, + 0.230E+2, 0.19292000E+1, 0.00000000E+0, 0.58457670E+3, 0.174E+3, 0.240E+2, 0.19292000E+1, + 0.00000000E+0, 0.63689720E+3, 0.174E+3, 0.250E+2, 0.19292000E+1, 0.00000000E+0, 0.50004450E+3, + 0.174E+3, 0.260E+2, 0.19292000E+1, 0.00000000E+0, 0.52755830E+3, 0.174E+3, 0.270E+2, + 0.19292000E+1, 0.00000000E+0, 0.54433150E+3, 0.174E+3, 0.280E+2, 0.19292000E+1, 0.00000000E+0, + 0.41776790E+3, 0.174E+3, 0.290E+2, 0.19292000E+1, 0.00000000E+0, 0.42620470E+3, 0.174E+3, + 0.300E+2, 0.19292000E+1, 0.00000000E+0, 0.50560850E+3, 0.174E+3, 0.310E+2, 0.19292000E+1, + 0.00000000E+0, 0.44299990E+3, 0.174E+3, 0.320E+2, 0.19292000E+1, 0.00000000E+0, 0.37599840E+3, + 0.174E+3, 0.330E+2, 0.19292000E+1, 0.00000000E+0, 0.33652400E+3, 0.174E+3, 0.340E+2, + 0.19292000E+1, 0.00000000E+0, 0.29379580E+3, 0.174E+3, 0.350E+2, 0.19292000E+1, 0.00000000E+0, + 0.25500680E+3, 0.174E+3, 0.360E+2, 0.19292000E+1, 0.00000000E+0, 0.14165256E+4, 0.174E+3, + 0.370E+2, 0.19292000E+1, 0.00000000E+0, 0.12211434E+4, 0.174E+3, 0.380E+2, 0.19292000E+1, + 0.00000000E+0, 0.10628100E+4, 0.174E+3, 0.390E+2, 0.19292000E+1, 0.00000000E+0, 0.95167080E+3, + 0.174E+3, 0.400E+2, 0.19292000E+1, 0.00000000E+0, 0.86588950E+3, 0.174E+3, 0.410E+2, + 0.19292000E+1, 0.00000000E+0, 0.66629380E+3, 0.174E+3, 0.420E+2, 0.19292000E+1, 0.00000000E+0, + 0.74429510E+3, 0.174E+3, 0.430E+2, 0.19292000E+1, 0.00000000E+0, 0.56498080E+3, 0.174E+3, + 0.440E+2, 0.19292000E+1, 0.00000000E+0, 0.61707470E+3, 0.174E+3, 0.450E+2, 0.19292000E+1, + 0.00000000E+0, 0.57145890E+3, 0.174E+3, 0.460E+2, 0.19292000E+1, 0.00000000E+0, 0.47746470E+3, + 0.174E+3, 0.470E+2, 0.19292000E+1, 0.00000000E+0, 0.50269480E+3, 0.174E+3, 0.480E+2, + 0.19292000E+1, 0.00000000E+0, 0.63350610E+3, 0.174E+3, 0.490E+2, 0.19292000E+1, 0.00000000E+0, + 0.58238420E+3, 0.174E+3, 0.500E+2, 0.19292000E+1, 0.00000000E+0, 0.51649490E+3, 0.174E+3, + 0.510E+2, 0.19292000E+1, 0.00000000E+0, 0.47798250E+3, 0.174E+3, 0.520E+2, 0.19292000E+1, + 0.00000000E+0, 0.43109430E+3, 0.174E+3, 0.530E+2, 0.19292000E+1, 0.00000000E+0, 0.38674400E+3, + 0.174E+3, 0.540E+2, 0.19292000E+1, 0.00000000E+0, 0.17264733E+4, 0.174E+3, 0.550E+2, + 0.19292000E+1, 0.00000000E+0, 0.15612112E+4, 0.174E+3, 0.560E+2, 0.19292000E+1, 0.00000000E+0, + 0.13624276E+4, 0.174E+3, 0.570E+2, 0.19292000E+1, 0.00000000E+0, 0.61099070E+3, 0.174E+3, + 0.580E+2, 0.19292000E+1, 0.27991000E+1, 0.13802768E+4, 0.174E+3, 0.590E+2, 0.19292000E+1, + 0.00000000E+0, 0.13236943E+4, 0.174E+3, 0.600E+2, 0.19292000E+1, 0.00000000E+0, 0.12900298E+4, + 0.174E+3, 0.610E+2, 0.19292000E+1, 0.00000000E+0, 0.12591135E+4, 0.174E+3, 0.620E+2, + 0.19292000E+1, 0.00000000E+0, 0.12316839E+4, 0.174E+3, 0.630E+2, 0.19292000E+1, 0.00000000E+0, + 0.96239750E+3, 0.174E+3, 0.640E+2, 0.19292000E+1, 0.00000000E+0, 0.10962341E+4, 0.174E+3, + 0.650E+2, 0.19292000E+1, 0.00000000E+0, 0.10560748E+4, 0.174E+3, 0.660E+2, 0.19292000E+1, + 0.00000000E+0, 0.11088832E+4, 0.174E+3, 0.670E+2, 0.19292000E+1, 0.00000000E+0, 0.10850974E+4, + 0.174E+3, 0.680E+2, 0.19292000E+1, 0.00000000E+0, 0.10635675E+4, 0.174E+3, 0.690E+2, + 0.19292000E+1, 0.00000000E+0, 0.10513822E+4, 0.174E+3, 0.700E+2, 0.19292000E+1, 0.00000000E+0, + 0.88206880E+3, 0.174E+3, 0.710E+2, 0.19292000E+1, 0.00000000E+0, 0.86187340E+3, 0.174E+3, + 0.720E+2, 0.19292000E+1, 0.00000000E+0, 0.78390750E+3, 0.174E+3, 0.730E+2, 0.19292000E+1, + 0.00000000E+0, 0.66076360E+3, 0.174E+3, 0.740E+2, 0.19292000E+1, 0.00000000E+0, 0.67117640E+3, + 0.174E+3, 0.750E+2, 0.19292000E+1, 0.00000000E+0, 0.60666990E+3, 0.174E+3, 0.760E+2, + 0.19292000E+1, 0.00000000E+0, 0.55447220E+3, 0.174E+3, 0.770E+2, 0.19292000E+1, 0.00000000E+0, + 0.45992100E+3, 0.174E+3, 0.780E+2, 0.19292000E+1, 0.00000000E+0, 0.42942760E+3, 0.174E+3, + 0.790E+2, 0.19292000E+1, 0.00000000E+0, 0.44112500E+3, 0.174E+3, 0.800E+2, 0.19292000E+1, + 0.00000000E+0, 0.65021480E+3, 0.174E+3, 0.810E+2, 0.19292000E+1, 0.00000000E+0, 0.63255270E+3, + 0.174E+3, 0.820E+2, 0.19292000E+1, 0.00000000E+0, 0.57855330E+3, 0.174E+3, 0.830E+2, + 0.19292000E+1, 0.00000000E+0, 0.55048090E+3, 0.174E+3, 0.840E+2, 0.19292000E+1, 0.00000000E+0, + 0.50671990E+3, 0.174E+3, 0.850E+2, 0.19292000E+1, 0.00000000E+0, 0.46345510E+3, 0.174E+3, + 0.860E+2, 0.19292000E+1, 0.00000000E+0, 0.16209287E+4, 0.174E+3, 0.870E+2, 0.19292000E+1, + 0.00000000E+0, 0.15387012E+4, 0.174E+3, 0.880E+2, 0.19292000E+1, 0.00000000E+0, 0.13515716E+4, + 0.174E+3, 0.890E+2, 0.19292000E+1, 0.00000000E+0, 0.12069993E+4, 0.174E+3, 0.900E+2, + 0.19292000E+1, 0.00000000E+0, 0.12026346E+4, 0.174E+3, 0.910E+2, 0.19292000E+1, 0.00000000E+0, + 0.11642737E+4, 0.174E+3, 0.920E+2, 0.19292000E+1, 0.00000000E+0, 0.12034096E+4, 0.174E+3, + 0.930E+2, 0.19292000E+1, 0.00000000E+0, 0.11644393E+4, 0.174E+3, 0.940E+2, 0.19292000E+1, + 0.00000000E+0, 0.63655000E+2, 0.174E+3, 0.101E+3, 0.19292000E+1, 0.00000000E+0, 0.20943010E+3, + 0.174E+3, 0.103E+3, 0.19292000E+1, 0.98650000E+0, 0.26676230E+3, 0.174E+3, 0.104E+3, + 0.19292000E+1, 0.98080000E+0, 0.20180580E+3, 0.174E+3, 0.105E+3, 0.19292000E+1, 0.97060000E+0, + 0.15143990E+3, 0.174E+3, 0.106E+3, 0.19292000E+1, 0.98680000E+0, 0.10487960E+3, 0.174E+3, + 0.107E+3, 0.19292000E+1, 0.99440000E+0, 0.76174700E+2, 0.174E+3, 0.108E+3, 0.19292000E+1, + 0.99250000E+0, 0.52233500E+2, 0.174E+3, 0.109E+3, 0.19292000E+1, 0.99820000E+0, 0.30698940E+3, + 0.174E+3, 0.111E+3, 0.19292000E+1, 0.96840000E+0, 0.47538840E+3, 0.174E+3, 0.112E+3, + 0.19292000E+1, 0.96280000E+0, 0.47855460E+3, 0.174E+3, 0.113E+3, 0.19292000E+1, 0.96480000E+0, + 0.38166000E+3, 0.174E+3, 0.114E+3, 0.19292000E+1, 0.95070000E+0, 0.31107370E+3, 0.174E+3, + 0.115E+3, 0.19292000E+1, 0.99470000E+0, 0.26232930E+3, 0.174E+3, 0.116E+3, 0.19292000E+1, + 0.99480000E+0, 0.21388550E+3, 0.174E+3, 0.117E+3, 0.19292000E+1, 0.99720000E+0, 0.42224100E+3, + 0.174E+3, 0.119E+3, 0.19292000E+1, 0.97670000E+0, 0.82019820E+3, 0.174E+3, 0.120E+3, + 0.19292000E+1, 0.98310000E+0, 0.41903830E+3, 0.174E+3, 0.121E+3, 0.19292000E+1, 0.18627000E+1, + 0.40459180E+3, 0.174E+3, 0.122E+3, 0.19292000E+1, 0.18299000E+1, 0.39656360E+3, 0.174E+3, + 0.123E+3, 0.19292000E+1, 0.19138000E+1, 0.39324210E+3, 0.174E+3, 0.124E+3, 0.19292000E+1, + 0.18269000E+1, 0.36030430E+3, 0.174E+3, 0.125E+3, 0.19292000E+1, 0.16406000E+1, 0.33316370E+3, + 0.174E+3, 0.126E+3, 0.19292000E+1, 0.16483000E+1, 0.31788470E+3, 0.174E+3, 0.127E+3, + 0.19292000E+1, 0.17149000E+1, 0.31087480E+3, 0.174E+3, 0.128E+3, 0.19292000E+1, 0.17937000E+1, + 0.30807170E+3, 0.174E+3, 0.129E+3, 0.19292000E+1, 0.95760000E+0, 0.28748760E+3, 0.174E+3, + 0.130E+3, 0.19292000E+1, 0.19419000E+1, 0.47409680E+3, 0.174E+3, 0.131E+3, 0.19292000E+1, + 0.96010000E+0, 0.41391720E+3, 0.174E+3, 0.132E+3, 0.19292000E+1, 0.94340000E+0, 0.36953950E+3, + 0.174E+3, 0.133E+3, 0.19292000E+1, 0.98890000E+0, 0.33667770E+3, 0.174E+3, 0.134E+3, + 0.19292000E+1, 0.99010000E+0, 0.29588320E+3, 0.174E+3, 0.135E+3, 0.19292000E+1, 0.99740000E+0, + 0.50328860E+3, 0.174E+3, 0.137E+3, 0.19292000E+1, 0.97380000E+0, 0.99960180E+3, 0.174E+3, + 0.138E+3, 0.19292000E+1, 0.98010000E+0, 0.75469660E+3, 0.174E+3, 0.139E+3, 0.19292000E+1, + 0.19153000E+1, 0.55497370E+3, 0.174E+3, 0.140E+3, 0.19292000E+1, 0.19355000E+1, 0.56047340E+3, + 0.174E+3, 0.141E+3, 0.19292000E+1, 0.19545000E+1, 0.52208970E+3, 0.174E+3, 0.142E+3, + 0.19292000E+1, 0.19420000E+1, 0.58893300E+3, 0.174E+3, 0.143E+3, 0.19292000E+1, 0.16682000E+1, + 0.45342630E+3, 0.174E+3, 0.144E+3, 0.19292000E+1, 0.18584000E+1, 0.42417090E+3, 0.174E+3, + 0.145E+3, 0.19292000E+1, 0.19003000E+1, 0.39371240E+3, 0.174E+3, 0.146E+3, 0.19292000E+1, + 0.18630000E+1, 0.38104950E+3, 0.174E+3, 0.147E+3, 0.19292000E+1, 0.96790000E+0, 0.37575480E+3, + 0.174E+3, 0.148E+3, 0.19292000E+1, 0.19539000E+1, 0.60266490E+3, 0.174E+3, 0.149E+3, + 0.19292000E+1, 0.96330000E+0, 0.54210550E+3, 0.174E+3, 0.150E+3, 0.19292000E+1, 0.95140000E+0, + 0.50590030E+3, 0.174E+3, 0.151E+3, 0.19292000E+1, 0.97490000E+0, 0.47755630E+3, 0.174E+3, + 0.152E+3, 0.19292000E+1, 0.98110000E+0, 0.43515150E+3, 0.174E+3, 0.153E+3, 0.19292000E+1, + 0.99680000E+0, 0.59256180E+3, 0.174E+3, 0.155E+3, 0.19292000E+1, 0.99090000E+0, 0.13007753E+4, + 0.174E+3, 0.156E+3, 0.19292000E+1, 0.97970000E+0, 0.95659970E+3, 0.174E+3, 0.157E+3, + 0.19292000E+1, 0.19373000E+1, 0.59241900E+3, 0.174E+3, 0.159E+3, 0.19292000E+1, 0.29425000E+1, + 0.58013530E+3, 0.174E+3, 0.160E+3, 0.19292000E+1, 0.29455000E+1, 0.56163190E+3, 0.174E+3, + 0.161E+3, 0.19292000E+1, 0.29413000E+1, 0.56485240E+3, 0.174E+3, 0.162E+3, 0.19292000E+1, + 0.29300000E+1, 0.54591020E+3, 0.174E+3, 0.163E+3, 0.19292000E+1, 0.18286000E+1, 0.56845330E+3, + 0.174E+3, 0.164E+3, 0.19292000E+1, 0.28732000E+1, 0.53359460E+3, 0.174E+3, 0.165E+3, + 0.19292000E+1, 0.29086000E+1, 0.54379510E+3, 0.174E+3, 0.166E+3, 0.19292000E+1, 0.28965000E+1, + 0.50613240E+3, 0.174E+3, 0.167E+3, 0.19292000E+1, 0.29242000E+1, 0.49159050E+3, 0.174E+3, + 0.168E+3, 0.19292000E+1, 0.29282000E+1, 0.48851540E+3, 0.174E+3, 0.169E+3, 0.19292000E+1, + 0.29246000E+1, 0.51389840E+3, 0.174E+3, 0.170E+3, 0.19292000E+1, 0.28482000E+1, 0.47198590E+3, + 0.174E+3, 0.171E+3, 0.19292000E+1, 0.29219000E+1, 0.64582280E+3, 0.174E+3, 0.172E+3, + 0.19292000E+1, 0.19254000E+1, 0.59747460E+3, 0.174E+3, 0.173E+3, 0.19292000E+1, 0.19459000E+1, + 0.54340360E+3, 0.174E+3, 0.174E+3, 0.19292000E+1, 0.19292000E+1, 0.39390200E+2, 0.175E+3, + 0.100E+1, 0.18104000E+1, 0.91180000E+0, 0.25661400E+2, 0.175E+3, 0.200E+1, 0.18104000E+1, + 0.00000000E+0, 0.67790210E+3, 0.175E+3, 0.300E+1, 0.18104000E+1, 0.00000000E+0, 0.37113480E+3, + 0.175E+3, 0.400E+1, 0.18104000E+1, 0.00000000E+0, 0.24394890E+3, 0.175E+3, 0.500E+1, + 0.18104000E+1, 0.00000000E+0, 0.16225790E+3, 0.175E+3, 0.600E+1, 0.18104000E+1, 0.00000000E+0, + 0.11232650E+3, 0.175E+3, 0.700E+1, 0.18104000E+1, 0.00000000E+0, 0.84509400E+2, 0.175E+3, + 0.800E+1, 0.18104000E+1, 0.00000000E+0, 0.63709900E+2, 0.175E+3, 0.900E+1, 0.18104000E+1, + 0.00000000E+0, 0.48832900E+2, 0.175E+3, 0.100E+2, 0.18104000E+1, 0.00000000E+0, 0.80810000E+3, + 0.175E+3, 0.110E+2, 0.18104000E+1, 0.00000000E+0, 0.59653470E+3, 0.175E+3, 0.120E+2, + 0.18104000E+1, 0.00000000E+0, 0.54254110E+3, 0.175E+3, 0.130E+2, 0.18104000E+1, 0.00000000E+0, + 0.42013030E+3, 0.175E+3, 0.140E+2, 0.18104000E+1, 0.00000000E+0, 0.32333970E+3, 0.175E+3, + 0.150E+2, 0.18104000E+1, 0.00000000E+0, 0.26632530E+3, 0.175E+3, 0.160E+2, 0.18104000E+1, + 0.00000000E+0, 0.21607690E+3, 0.175E+3, 0.170E+2, 0.18104000E+1, 0.00000000E+0, 0.17582140E+3, + 0.175E+3, 0.180E+2, 0.18104000E+1, 0.00000000E+0, 0.13393807E+4, 0.175E+3, 0.190E+2, + 0.18104000E+1, 0.00000000E+0, 0.10664078E+4, 0.175E+3, 0.200E+2, 0.18104000E+1, 0.00000000E+0, + 0.87454390E+3, 0.175E+3, 0.210E+2, 0.18104000E+1, 0.00000000E+0, 0.83959150E+3, 0.175E+3, + 0.220E+2, 0.18104000E+1, 0.00000000E+0, 0.76607010E+3, 0.175E+3, 0.230E+2, 0.18104000E+1, + 0.00000000E+0, 0.60376280E+3, 0.175E+3, 0.240E+2, 0.18104000E+1, 0.00000000E+0, 0.65618380E+3, + 0.175E+3, 0.250E+2, 0.18104000E+1, 0.00000000E+0, 0.51491990E+3, 0.175E+3, 0.260E+2, + 0.18104000E+1, 0.00000000E+0, 0.54109810E+3, 0.175E+3, 0.270E+2, 0.18104000E+1, 0.00000000E+0, + 0.55933980E+3, 0.175E+3, 0.280E+2, 0.18104000E+1, 0.00000000E+0, 0.42928690E+3, 0.175E+3, + 0.290E+2, 0.18104000E+1, 0.00000000E+0, 0.43539440E+3, 0.175E+3, 0.300E+2, 0.18104000E+1, + 0.00000000E+0, 0.51743050E+3, 0.175E+3, 0.310E+2, 0.18104000E+1, 0.00000000E+0, 0.45007850E+3, + 0.175E+3, 0.320E+2, 0.18104000E+1, 0.00000000E+0, 0.37961010E+3, 0.175E+3, 0.330E+2, + 0.18104000E+1, 0.00000000E+0, 0.33848080E+3, 0.175E+3, 0.340E+2, 0.18104000E+1, 0.00000000E+0, + 0.29439730E+3, 0.175E+3, 0.350E+2, 0.18104000E+1, 0.00000000E+0, 0.25467830E+3, 0.175E+3, + 0.360E+2, 0.18104000E+1, 0.00000000E+0, 0.14977174E+4, 0.175E+3, 0.370E+2, 0.18104000E+1, + 0.00000000E+0, 0.12728662E+4, 0.175E+3, 0.380E+2, 0.18104000E+1, 0.00000000E+0, 0.11011436E+4, + 0.175E+3, 0.390E+2, 0.18104000E+1, 0.00000000E+0, 0.98233900E+3, 0.175E+3, 0.400E+2, + 0.18104000E+1, 0.00000000E+0, 0.89165750E+3, 0.175E+3, 0.410E+2, 0.18104000E+1, 0.00000000E+0, + 0.68333990E+3, 0.175E+3, 0.420E+2, 0.18104000E+1, 0.00000000E+0, 0.76450150E+3, 0.175E+3, + 0.430E+2, 0.18104000E+1, 0.00000000E+0, 0.57773560E+3, 0.175E+3, 0.440E+2, 0.18104000E+1, + 0.00000000E+0, 0.63093880E+3, 0.175E+3, 0.450E+2, 0.18104000E+1, 0.00000000E+0, 0.58342570E+3, + 0.175E+3, 0.460E+2, 0.18104000E+1, 0.00000000E+0, 0.48800010E+3, 0.175E+3, 0.470E+2, + 0.18104000E+1, 0.00000000E+0, 0.51225330E+3, 0.175E+3, 0.480E+2, 0.18104000E+1, 0.00000000E+0, + 0.64862950E+3, 0.175E+3, 0.490E+2, 0.18104000E+1, 0.00000000E+0, 0.59271140E+3, 0.175E+3, + 0.500E+2, 0.18104000E+1, 0.00000000E+0, 0.52269700E+3, 0.175E+3, 0.510E+2, 0.18104000E+1, + 0.00000000E+0, 0.48212230E+3, 0.175E+3, 0.520E+2, 0.18104000E+1, 0.00000000E+0, 0.43331830E+3, + 0.175E+3, 0.530E+2, 0.18104000E+1, 0.00000000E+0, 0.38749410E+3, 0.175E+3, 0.540E+2, + 0.18104000E+1, 0.00000000E+0, 0.18253618E+4, 0.175E+3, 0.550E+2, 0.18104000E+1, 0.00000000E+0, + 0.16308213E+4, 0.175E+3, 0.560E+2, 0.18104000E+1, 0.00000000E+0, 0.14145400E+4, 0.175E+3, + 0.570E+2, 0.18104000E+1, 0.00000000E+0, 0.61899030E+3, 0.175E+3, 0.580E+2, 0.18104000E+1, + 0.27991000E+1, 0.14389986E+4, 0.175E+3, 0.590E+2, 0.18104000E+1, 0.00000000E+0, 0.13785166E+4, + 0.175E+3, 0.600E+2, 0.18104000E+1, 0.00000000E+0, 0.13430628E+4, 0.175E+3, 0.610E+2, + 0.18104000E+1, 0.00000000E+0, 0.13105457E+4, 0.175E+3, 0.620E+2, 0.18104000E+1, 0.00000000E+0, + 0.12816825E+4, 0.175E+3, 0.630E+2, 0.18104000E+1, 0.00000000E+0, 0.99495010E+3, 0.175E+3, + 0.640E+2, 0.18104000E+1, 0.00000000E+0, 0.11448282E+4, 0.175E+3, 0.650E+2, 0.18104000E+1, + 0.00000000E+0, 0.11017061E+4, 0.175E+3, 0.660E+2, 0.18104000E+1, 0.00000000E+0, 0.11520955E+4, + 0.175E+3, 0.670E+2, 0.18104000E+1, 0.00000000E+0, 0.11271846E+4, 0.175E+3, 0.680E+2, + 0.18104000E+1, 0.00000000E+0, 0.11045493E+4, 0.175E+3, 0.690E+2, 0.18104000E+1, 0.00000000E+0, + 0.10921865E+4, 0.175E+3, 0.700E+2, 0.18104000E+1, 0.00000000E+0, 0.91229470E+3, 0.175E+3, + 0.710E+2, 0.18104000E+1, 0.00000000E+0, 0.88587570E+3, 0.175E+3, 0.720E+2, 0.18104000E+1, + 0.00000000E+0, 0.80282330E+3, 0.175E+3, 0.730E+2, 0.18104000E+1, 0.00000000E+0, 0.67490990E+3, + 0.175E+3, 0.740E+2, 0.18104000E+1, 0.00000000E+0, 0.68456550E+3, 0.175E+3, 0.750E+2, + 0.18104000E+1, 0.00000000E+0, 0.61687960E+3, 0.175E+3, 0.760E+2, 0.18104000E+1, 0.00000000E+0, + 0.56243030E+3, 0.175E+3, 0.770E+2, 0.18104000E+1, 0.00000000E+0, 0.46538980E+3, 0.175E+3, + 0.780E+2, 0.18104000E+1, 0.00000000E+0, 0.43411300E+3, 0.175E+3, 0.790E+2, 0.18104000E+1, + 0.00000000E+0, 0.44539470E+3, 0.175E+3, 0.800E+2, 0.18104000E+1, 0.00000000E+0, 0.66487270E+3, + 0.175E+3, 0.810E+2, 0.18104000E+1, 0.00000000E+0, 0.64374060E+3, 0.175E+3, 0.820E+2, + 0.18104000E+1, 0.00000000E+0, 0.58578780E+3, 0.175E+3, 0.830E+2, 0.18104000E+1, 0.00000000E+0, + 0.55576230E+3, 0.175E+3, 0.840E+2, 0.18104000E+1, 0.00000000E+0, 0.50986150E+3, 0.175E+3, + 0.850E+2, 0.18104000E+1, 0.00000000E+0, 0.46493840E+3, 0.175E+3, 0.860E+2, 0.18104000E+1, + 0.00000000E+0, 0.17053318E+4, 0.175E+3, 0.870E+2, 0.18104000E+1, 0.00000000E+0, 0.16022866E+4, + 0.175E+3, 0.880E+2, 0.18104000E+1, 0.00000000E+0, 0.13995346E+4, 0.175E+3, 0.890E+2, + 0.18104000E+1, 0.00000000E+0, 0.12420205E+4, 0.175E+3, 0.900E+2, 0.18104000E+1, 0.00000000E+0, + 0.12414957E+4, 0.175E+3, 0.910E+2, 0.18104000E+1, 0.00000000E+0, 0.12016927E+4, 0.175E+3, + 0.920E+2, 0.18104000E+1, 0.00000000E+0, 0.12468949E+4, 0.175E+3, 0.930E+2, 0.18104000E+1, + 0.00000000E+0, 0.12056353E+4, 0.175E+3, 0.940E+2, 0.18104000E+1, 0.00000000E+0, 0.64164300E+2, + 0.175E+3, 0.101E+3, 0.18104000E+1, 0.00000000E+0, 0.21507820E+3, 0.175E+3, 0.103E+3, + 0.18104000E+1, 0.98650000E+0, 0.27332730E+3, 0.175E+3, 0.104E+3, 0.18104000E+1, 0.98080000E+0, + 0.20434870E+3, 0.175E+3, 0.105E+3, 0.18104000E+1, 0.97060000E+0, 0.15235770E+3, 0.175E+3, + 0.106E+3, 0.18104000E+1, 0.98680000E+0, 0.10479180E+3, 0.175E+3, 0.107E+3, 0.18104000E+1, + 0.99440000E+0, 0.75702000E+2, 0.175E+3, 0.108E+3, 0.18104000E+1, 0.99250000E+0, 0.51588100E+2, + 0.175E+3, 0.109E+3, 0.18104000E+1, 0.99820000E+0, 0.31607860E+3, 0.175E+3, 0.111E+3, + 0.18104000E+1, 0.96840000E+0, 0.49005630E+3, 0.175E+3, 0.112E+3, 0.18104000E+1, 0.96280000E+0, + 0.49022120E+3, 0.175E+3, 0.113E+3, 0.18104000E+1, 0.96480000E+0, 0.38746930E+3, 0.175E+3, + 0.114E+3, 0.18104000E+1, 0.95070000E+0, 0.31376610E+3, 0.175E+3, 0.115E+3, 0.18104000E+1, + 0.99470000E+0, 0.26346580E+3, 0.175E+3, 0.116E+3, 0.18104000E+1, 0.99480000E+0, 0.21388020E+3, + 0.175E+3, 0.117E+3, 0.18104000E+1, 0.99720000E+0, 0.43270980E+3, 0.175E+3, 0.119E+3, + 0.18104000E+1, 0.97670000E+0, 0.85443090E+3, 0.175E+3, 0.120E+3, 0.18104000E+1, 0.98310000E+0, + 0.42613390E+3, 0.175E+3, 0.121E+3, 0.18104000E+1, 0.18627000E+1, 0.41139560E+3, 0.175E+3, + 0.122E+3, 0.18104000E+1, 0.18299000E+1, 0.40328980E+3, 0.175E+3, 0.123E+3, 0.18104000E+1, + 0.19138000E+1, 0.40028790E+3, 0.175E+3, 0.124E+3, 0.18104000E+1, 0.18269000E+1, 0.36513690E+3, + 0.175E+3, 0.125E+3, 0.18104000E+1, 0.16406000E+1, 0.33722470E+3, 0.175E+3, 0.126E+3, + 0.18104000E+1, 0.16483000E+1, 0.32177920E+3, 0.175E+3, 0.127E+3, 0.18104000E+1, 0.17149000E+1, + 0.31479940E+3, 0.175E+3, 0.128E+3, 0.18104000E+1, 0.17937000E+1, 0.31300420E+3, 0.175E+3, + 0.129E+3, 0.18104000E+1, 0.95760000E+0, 0.29033450E+3, 0.175E+3, 0.130E+3, 0.18104000E+1, + 0.19419000E+1, 0.48428840E+3, 0.175E+3, 0.131E+3, 0.18104000E+1, 0.96010000E+0, 0.41985020E+3, + 0.175E+3, 0.132E+3, 0.18104000E+1, 0.94340000E+0, 0.37295910E+3, 0.175E+3, 0.133E+3, + 0.18104000E+1, 0.98890000E+0, 0.33865860E+3, 0.175E+3, 0.134E+3, 0.18104000E+1, 0.99010000E+0, + 0.29654870E+3, 0.175E+3, 0.135E+3, 0.18104000E+1, 0.99740000E+0, 0.51497470E+3, 0.175E+3, + 0.137E+3, 0.18104000E+1, 0.97380000E+0, 0.10423341E+4, 0.175E+3, 0.138E+3, 0.18104000E+1, + 0.98010000E+0, 0.77762370E+3, 0.175E+3, 0.139E+3, 0.18104000E+1, 0.19153000E+1, 0.56481820E+3, + 0.175E+3, 0.140E+3, 0.18104000E+1, 0.19355000E+1, 0.57045940E+3, 0.175E+3, 0.141E+3, + 0.18104000E+1, 0.19545000E+1, 0.53064150E+3, 0.175E+3, 0.142E+3, 0.18104000E+1, 0.19420000E+1, + 0.60213570E+3, 0.175E+3, 0.143E+3, 0.18104000E+1, 0.16682000E+1, 0.45894910E+3, 0.175E+3, + 0.144E+3, 0.18104000E+1, 0.18584000E+1, 0.42920470E+3, 0.175E+3, 0.145E+3, 0.18104000E+1, + 0.19003000E+1, 0.39810440E+3, 0.175E+3, 0.146E+3, 0.18104000E+1, 0.18630000E+1, 0.38554200E+3, + 0.175E+3, 0.147E+3, 0.18104000E+1, 0.96790000E+0, 0.37894250E+3, 0.175E+3, 0.148E+3, + 0.18104000E+1, 0.19539000E+1, 0.61575540E+3, 0.175E+3, 0.149E+3, 0.18104000E+1, 0.96330000E+0, + 0.55049820E+3, 0.175E+3, 0.150E+3, 0.18104000E+1, 0.95140000E+0, 0.51159560E+3, 0.175E+3, + 0.151E+3, 0.18104000E+1, 0.97490000E+0, 0.48159190E+3, 0.175E+3, 0.152E+3, 0.18104000E+1, + 0.98110000E+0, 0.43741870E+3, 0.175E+3, 0.153E+3, 0.18104000E+1, 0.99680000E+0, 0.60346930E+3, + 0.175E+3, 0.155E+3, 0.18104000E+1, 0.99090000E+0, 0.13601123E+4, 0.175E+3, 0.156E+3, + 0.18104000E+1, 0.97970000E+0, 0.98679870E+3, 0.175E+3, 0.157E+3, 0.18104000E+1, 0.19373000E+1, + 0.59998280E+3, 0.175E+3, 0.159E+3, 0.18104000E+1, 0.29425000E+1, 0.58750600E+3, 0.175E+3, + 0.160E+3, 0.18104000E+1, 0.29455000E+1, 0.56861140E+3, 0.175E+3, 0.161E+3, 0.18104000E+1, + 0.29413000E+1, 0.57238360E+3, 0.175E+3, 0.162E+3, 0.18104000E+1, 0.29300000E+1, 0.55475530E+3, + 0.175E+3, 0.163E+3, 0.18104000E+1, 0.18286000E+1, 0.57615700E+3, 0.175E+3, 0.164E+3, + 0.18104000E+1, 0.28732000E+1, 0.54043300E+3, 0.175E+3, 0.165E+3, 0.18104000E+1, 0.29086000E+1, + 0.55166610E+3, 0.175E+3, 0.166E+3, 0.18104000E+1, 0.28965000E+1, 0.51223480E+3, 0.175E+3, + 0.167E+3, 0.18104000E+1, 0.29242000E+1, 0.49737970E+3, 0.175E+3, 0.168E+3, 0.18104000E+1, + 0.29282000E+1, 0.49437500E+3, 0.175E+3, 0.169E+3, 0.18104000E+1, 0.29246000E+1, 0.52066780E+3, + 0.175E+3, 0.170E+3, 0.18104000E+1, 0.28482000E+1, 0.47743820E+3, 0.175E+3, 0.171E+3, + 0.18104000E+1, 0.29219000E+1, 0.66008460E+3, 0.175E+3, 0.172E+3, 0.18104000E+1, 0.19254000E+1, + 0.60852880E+3, 0.175E+3, 0.173E+3, 0.18104000E+1, 0.19459000E+1, 0.55146290E+3, 0.175E+3, + 0.174E+3, 0.18104000E+1, 0.19292000E+1, 0.56143380E+3, 0.175E+3, 0.175E+3, 0.18104000E+1, + 0.18104000E+1, 0.35464600E+2, 0.176E+3, 0.100E+1, 0.18858000E+1, 0.91180000E+0, 0.23812500E+2, + 0.176E+3, 0.200E+1, 0.18858000E+1, 0.00000000E+0, 0.53066030E+3, 0.176E+3, 0.300E+1, + 0.18858000E+1, 0.00000000E+0, 0.31052240E+3, 0.176E+3, 0.400E+1, 0.18858000E+1, 0.00000000E+0, + 0.21141050E+3, 0.176E+3, 0.500E+1, 0.18858000E+1, 0.00000000E+0, 0.14424940E+3, 0.176E+3, + 0.600E+1, 0.18858000E+1, 0.00000000E+0, 0.10174200E+3, 0.176E+3, 0.700E+1, 0.18858000E+1, + 0.00000000E+0, 0.77553600E+2, 0.176E+3, 0.800E+1, 0.18858000E+1, 0.00000000E+0, 0.59120400E+2, + 0.176E+3, 0.900E+1, 0.18858000E+1, 0.00000000E+0, 0.45720500E+2, 0.176E+3, 0.100E+2, + 0.18858000E+1, 0.00000000E+0, 0.63530720E+3, 0.176E+3, 0.110E+2, 0.18858000E+1, 0.00000000E+0, + 0.49355920E+3, 0.176E+3, 0.120E+2, 0.18858000E+1, 0.00000000E+0, 0.45721240E+3, 0.176E+3, + 0.130E+2, 0.18858000E+1, 0.00000000E+0, 0.36283630E+3, 0.176E+3, 0.140E+2, 0.18858000E+1, + 0.00000000E+0, 0.28491700E+3, 0.176E+3, 0.150E+2, 0.18858000E+1, 0.00000000E+0, 0.23770450E+3, + 0.176E+3, 0.160E+2, 0.18858000E+1, 0.00000000E+0, 0.19521900E+3, 0.176E+3, 0.170E+2, + 0.18858000E+1, 0.00000000E+0, 0.16053010E+3, 0.176E+3, 0.180E+2, 0.18858000E+1, 0.00000000E+0, + 0.10420654E+4, 0.176E+3, 0.190E+2, 0.18858000E+1, 0.00000000E+0, 0.86452710E+3, 0.176E+3, + 0.200E+2, 0.18858000E+1, 0.00000000E+0, 0.71543320E+3, 0.176E+3, 0.210E+2, 0.18858000E+1, + 0.00000000E+0, 0.69243390E+3, 0.176E+3, 0.220E+2, 0.18858000E+1, 0.00000000E+0, 0.63488380E+3, + 0.176E+3, 0.230E+2, 0.18858000E+1, 0.00000000E+0, 0.50093670E+3, 0.176E+3, 0.240E+2, + 0.18858000E+1, 0.00000000E+0, 0.54765220E+3, 0.176E+3, 0.250E+2, 0.18858000E+1, 0.00000000E+0, + 0.43064570E+3, 0.176E+3, 0.260E+2, 0.18858000E+1, 0.00000000E+0, 0.45696500E+3, 0.176E+3, + 0.270E+2, 0.18858000E+1, 0.00000000E+0, 0.47005570E+3, 0.176E+3, 0.280E+2, 0.18858000E+1, + 0.00000000E+0, 0.36110090E+3, 0.176E+3, 0.290E+2, 0.18858000E+1, 0.00000000E+0, 0.37162530E+3, + 0.176E+3, 0.300E+2, 0.18858000E+1, 0.00000000E+0, 0.43932630E+3, 0.176E+3, 0.310E+2, + 0.18858000E+1, 0.00000000E+0, 0.38941390E+3, 0.176E+3, 0.320E+2, 0.18858000E+1, 0.00000000E+0, + 0.33396020E+3, 0.176E+3, 0.330E+2, 0.18858000E+1, 0.00000000E+0, 0.30083180E+3, 0.176E+3, + 0.340E+2, 0.18858000E+1, 0.00000000E+0, 0.26438450E+3, 0.176E+3, 0.350E+2, 0.18858000E+1, + 0.00000000E+0, 0.23089140E+3, 0.176E+3, 0.360E+2, 0.18858000E+1, 0.00000000E+0, 0.11693798E+4, + 0.176E+3, 0.370E+2, 0.18858000E+1, 0.00000000E+0, 0.10303644E+4, 0.176E+3, 0.380E+2, + 0.18858000E+1, 0.00000000E+0, 0.90555540E+3, 0.176E+3, 0.390E+2, 0.18858000E+1, 0.00000000E+0, + 0.81580510E+3, 0.176E+3, 0.400E+2, 0.18858000E+1, 0.00000000E+0, 0.74526460E+3, 0.176E+3, + 0.410E+2, 0.18858000E+1, 0.00000000E+0, 0.57758390E+3, 0.176E+3, 0.420E+2, 0.18858000E+1, + 0.00000000E+0, 0.64348640E+3, 0.176E+3, 0.430E+2, 0.18858000E+1, 0.00000000E+0, 0.49230820E+3, + 0.176E+3, 0.440E+2, 0.18858000E+1, 0.00000000E+0, 0.53754740E+3, 0.176E+3, 0.450E+2, + 0.18858000E+1, 0.00000000E+0, 0.49907810E+3, 0.176E+3, 0.460E+2, 0.18858000E+1, 0.00000000E+0, + 0.41664440E+3, 0.176E+3, 0.470E+2, 0.18858000E+1, 0.00000000E+0, 0.44047370E+3, 0.176E+3, + 0.480E+2, 0.18858000E+1, 0.00000000E+0, 0.55060050E+3, 0.176E+3, 0.490E+2, 0.18858000E+1, + 0.00000000E+0, 0.51094940E+3, 0.176E+3, 0.500E+2, 0.18858000E+1, 0.00000000E+0, 0.45728590E+3, + 0.176E+3, 0.510E+2, 0.18858000E+1, 0.00000000E+0, 0.42551160E+3, 0.176E+3, 0.520E+2, + 0.18858000E+1, 0.00000000E+0, 0.38604100E+3, 0.176E+3, 0.530E+2, 0.18858000E+1, 0.00000000E+0, + 0.34827200E+3, 0.176E+3, 0.540E+2, 0.18858000E+1, 0.00000000E+0, 0.14257528E+4, 0.176E+3, + 0.550E+2, 0.18858000E+1, 0.00000000E+0, 0.13130562E+4, 0.176E+3, 0.560E+2, 0.18858000E+1, + 0.00000000E+0, 0.11570873E+4, 0.176E+3, 0.570E+2, 0.18858000E+1, 0.00000000E+0, 0.54014830E+3, + 0.176E+3, 0.580E+2, 0.18858000E+1, 0.27991000E+1, 0.11649532E+4, 0.176E+3, 0.590E+2, + 0.18858000E+1, 0.00000000E+0, 0.11189840E+4, 0.176E+3, 0.600E+2, 0.18858000E+1, 0.00000000E+0, + 0.10910275E+4, 0.176E+3, 0.610E+2, 0.18858000E+1, 0.00000000E+0, 0.10652955E+4, 0.176E+3, + 0.620E+2, 0.18858000E+1, 0.00000000E+0, 0.10424806E+4, 0.176E+3, 0.630E+2, 0.18858000E+1, + 0.00000000E+0, 0.82351360E+3, 0.176E+3, 0.640E+2, 0.18858000E+1, 0.00000000E+0, 0.92339310E+3, + 0.176E+3, 0.650E+2, 0.18858000E+1, 0.00000000E+0, 0.89129600E+3, 0.176E+3, 0.660E+2, + 0.18858000E+1, 0.00000000E+0, 0.94085810E+3, 0.176E+3, 0.670E+2, 0.18858000E+1, 0.00000000E+0, + 0.92091700E+3, 0.176E+3, 0.680E+2, 0.18858000E+1, 0.00000000E+0, 0.90298170E+3, 0.176E+3, + 0.690E+2, 0.18858000E+1, 0.00000000E+0, 0.89222740E+3, 0.176E+3, 0.700E+2, 0.18858000E+1, + 0.00000000E+0, 0.75415480E+3, 0.176E+3, 0.710E+2, 0.18858000E+1, 0.00000000E+0, 0.74392130E+3, + 0.176E+3, 0.720E+2, 0.18858000E+1, 0.00000000E+0, 0.68068180E+3, 0.176E+3, 0.730E+2, + 0.18858000E+1, 0.00000000E+0, 0.57655350E+3, 0.176E+3, 0.740E+2, 0.18858000E+1, 0.00000000E+0, + 0.58693470E+3, 0.176E+3, 0.750E+2, 0.18858000E+1, 0.00000000E+0, 0.53325550E+3, 0.176E+3, + 0.760E+2, 0.18858000E+1, 0.00000000E+0, 0.48940580E+3, 0.176E+3, 0.770E+2, 0.18858000E+1, + 0.00000000E+0, 0.40785710E+3, 0.176E+3, 0.780E+2, 0.18858000E+1, 0.00000000E+0, 0.38154050E+3, + 0.176E+3, 0.790E+2, 0.18858000E+1, 0.00000000E+0, 0.39259340E+3, 0.176E+3, 0.800E+2, + 0.18858000E+1, 0.00000000E+0, 0.56672940E+3, 0.176E+3, 0.810E+2, 0.18858000E+1, 0.00000000E+0, + 0.55534130E+3, 0.176E+3, 0.820E+2, 0.18858000E+1, 0.00000000E+0, 0.51207880E+3, 0.176E+3, + 0.830E+2, 0.18858000E+1, 0.00000000E+0, 0.48950850E+3, 0.176E+3, 0.840E+2, 0.18858000E+1, + 0.00000000E+0, 0.45312570E+3, 0.176E+3, 0.850E+2, 0.18858000E+1, 0.00000000E+0, 0.41656370E+3, + 0.176E+3, 0.860E+2, 0.18858000E+1, 0.00000000E+0, 0.13491716E+4, 0.176E+3, 0.870E+2, + 0.18858000E+1, 0.00000000E+0, 0.13007391E+4, 0.176E+3, 0.880E+2, 0.18858000E+1, 0.00000000E+0, + 0.11529664E+4, 0.176E+3, 0.890E+2, 0.18858000E+1, 0.00000000E+0, 0.10402935E+4, 0.176E+3, + 0.900E+2, 0.18858000E+1, 0.00000000E+0, 0.10315219E+4, 0.176E+3, 0.910E+2, 0.18858000E+1, + 0.00000000E+0, 0.99893380E+3, 0.176E+3, 0.920E+2, 0.18858000E+1, 0.00000000E+0, 0.10261425E+4, + 0.176E+3, 0.930E+2, 0.18858000E+1, 0.00000000E+0, 0.99407460E+3, 0.176E+3, 0.940E+2, + 0.18858000E+1, 0.00000000E+0, 0.56656700E+2, 0.176E+3, 0.101E+3, 0.18858000E+1, 0.00000000E+0, + 0.18083220E+3, 0.176E+3, 0.103E+3, 0.18858000E+1, 0.98650000E+0, 0.23124090E+3, 0.176E+3, + 0.104E+3, 0.18858000E+1, 0.98080000E+0, 0.17834690E+3, 0.176E+3, 0.105E+3, 0.18858000E+1, + 0.97060000E+0, 0.13537830E+3, 0.176E+3, 0.106E+3, 0.18858000E+1, 0.98680000E+0, 0.94961200E+2, + 0.176E+3, 0.107E+3, 0.18858000E+1, 0.99440000E+0, 0.69708000E+2, 0.176E+3, 0.108E+3, + 0.18858000E+1, 0.99250000E+0, 0.48438300E+2, 0.176E+3, 0.109E+3, 0.18858000E+1, 0.99820000E+0, + 0.26414790E+3, 0.176E+3, 0.111E+3, 0.18858000E+1, 0.96840000E+0, 0.40811310E+3, 0.176E+3, + 0.112E+3, 0.18858000E+1, 0.96280000E+0, 0.41494650E+3, 0.176E+3, 0.113E+3, 0.18858000E+1, + 0.96480000E+0, 0.33578860E+3, 0.176E+3, 0.114E+3, 0.18858000E+1, 0.95070000E+0, 0.27667050E+3, + 0.176E+3, 0.115E+3, 0.18858000E+1, 0.99470000E+0, 0.23508600E+3, 0.176E+3, 0.116E+3, + 0.18858000E+1, 0.99480000E+0, 0.19319560E+3, 0.176E+3, 0.117E+3, 0.18858000E+1, 0.99720000E+0, + 0.36655110E+3, 0.176E+3, 0.119E+3, 0.18858000E+1, 0.97670000E+0, 0.69317420E+3, 0.176E+3, + 0.120E+3, 0.18858000E+1, 0.98310000E+0, 0.36802850E+3, 0.176E+3, 0.121E+3, 0.18858000E+1, + 0.18627000E+1, 0.35552300E+3, 0.176E+3, 0.122E+3, 0.18858000E+1, 0.18299000E+1, 0.34841720E+3, + 0.176E+3, 0.123E+3, 0.18858000E+1, 0.19138000E+1, 0.34501650E+3, 0.176E+3, 0.124E+3, + 0.18858000E+1, 0.18269000E+1, 0.31830430E+3, 0.176E+3, 0.125E+3, 0.18858000E+1, 0.16406000E+1, + 0.29495420E+3, 0.176E+3, 0.126E+3, 0.18858000E+1, 0.16483000E+1, 0.28145410E+3, 0.176E+3, + 0.127E+3, 0.18858000E+1, 0.17149000E+1, 0.27510220E+3, 0.176E+3, 0.128E+3, 0.18858000E+1, + 0.17937000E+1, 0.27123140E+3, 0.176E+3, 0.129E+3, 0.18858000E+1, 0.95760000E+0, 0.25547700E+3, + 0.176E+3, 0.130E+3, 0.18858000E+1, 0.19419000E+1, 0.41318390E+3, 0.176E+3, 0.131E+3, + 0.18858000E+1, 0.96010000E+0, 0.36483360E+3, 0.176E+3, 0.132E+3, 0.18858000E+1, 0.94340000E+0, + 0.32842530E+3, 0.176E+3, 0.133E+3, 0.18858000E+1, 0.98890000E+0, 0.30094220E+3, 0.176E+3, + 0.134E+3, 0.18858000E+1, 0.99010000E+0, 0.26617570E+3, 0.176E+3, 0.135E+3, 0.18858000E+1, + 0.99740000E+0, 0.43809620E+3, 0.176E+3, 0.137E+3, 0.18858000E+1, 0.97380000E+0, 0.84371770E+3, + 0.176E+3, 0.138E+3, 0.18858000E+1, 0.98010000E+0, 0.64942160E+3, 0.176E+3, 0.139E+3, + 0.18858000E+1, 0.19153000E+1, 0.48694320E+3, 0.176E+3, 0.140E+3, 0.18858000E+1, 0.19355000E+1, + 0.49170440E+3, 0.176E+3, 0.141E+3, 0.18858000E+1, 0.19545000E+1, 0.45926500E+3, 0.176E+3, + 0.142E+3, 0.18858000E+1, 0.19420000E+1, 0.51329930E+3, 0.176E+3, 0.143E+3, 0.18858000E+1, + 0.16682000E+1, 0.40162410E+3, 0.176E+3, 0.144E+3, 0.18858000E+1, 0.18584000E+1, 0.37601550E+3, + 0.176E+3, 0.145E+3, 0.18858000E+1, 0.19003000E+1, 0.34951790E+3, 0.176E+3, 0.146E+3, + 0.18858000E+1, 0.18630000E+1, 0.33798580E+3, 0.176E+3, 0.147E+3, 0.18858000E+1, 0.96790000E+0, + 0.33491410E+3, 0.176E+3, 0.148E+3, 0.18858000E+1, 0.19539000E+1, 0.52556660E+3, 0.176E+3, + 0.149E+3, 0.18858000E+1, 0.96330000E+0, 0.47735010E+3, 0.176E+3, 0.150E+3, 0.18858000E+1, + 0.95140000E+0, 0.44845320E+3, 0.176E+3, 0.151E+3, 0.18858000E+1, 0.97490000E+0, 0.42527250E+3, + 0.176E+3, 0.152E+3, 0.18858000E+1, 0.98110000E+0, 0.38963030E+3, 0.176E+3, 0.153E+3, + 0.18858000E+1, 0.99680000E+0, 0.51948750E+3, 0.176E+3, 0.155E+3, 0.18858000E+1, 0.99090000E+0, + 0.10935492E+4, 0.176E+3, 0.156E+3, 0.18858000E+1, 0.97970000E+0, 0.82179670E+3, 0.176E+3, + 0.157E+3, 0.18858000E+1, 0.19373000E+1, 0.52402380E+3, 0.176E+3, 0.159E+3, 0.18858000E+1, + 0.29425000E+1, 0.51321590E+3, 0.176E+3, 0.160E+3, 0.18858000E+1, 0.29455000E+1, 0.49708550E+3, + 0.176E+3, 0.161E+3, 0.18858000E+1, 0.29413000E+1, 0.49923160E+3, 0.176E+3, 0.162E+3, + 0.18858000E+1, 0.29300000E+1, 0.48040280E+3, 0.176E+3, 0.163E+3, 0.18858000E+1, 0.18286000E+1, + 0.50216590E+3, 0.176E+3, 0.164E+3, 0.18858000E+1, 0.28732000E+1, 0.47197170E+3, 0.176E+3, + 0.165E+3, 0.18858000E+1, 0.29086000E+1, 0.47976830E+3, 0.176E+3, 0.166E+3, 0.18858000E+1, + 0.28965000E+1, 0.44820990E+3, 0.176E+3, 0.167E+3, 0.18858000E+1, 0.29242000E+1, 0.43552800E+3, + 0.176E+3, 0.168E+3, 0.18858000E+1, 0.29282000E+1, 0.43264200E+3, 0.176E+3, 0.169E+3, + 0.18858000E+1, 0.29246000E+1, 0.45417000E+3, 0.176E+3, 0.170E+3, 0.18858000E+1, 0.28482000E+1, + 0.41827710E+3, 0.176E+3, 0.171E+3, 0.18858000E+1, 0.29219000E+1, 0.56287830E+3, 0.176E+3, + 0.172E+3, 0.18858000E+1, 0.19254000E+1, 0.52375380E+3, 0.176E+3, 0.173E+3, 0.18858000E+1, + 0.19459000E+1, 0.47921590E+3, 0.176E+3, 0.174E+3, 0.18858000E+1, 0.19292000E+1, 0.48386730E+3, + 0.176E+3, 0.175E+3, 0.18858000E+1, 0.18104000E+1, 0.42619030E+3, 0.176E+3, 0.176E+3, + 0.18858000E+1, 0.18858000E+1, 0.33511700E+2, 0.177E+3, 0.100E+1, 0.18648000E+1, 0.91180000E+0, + 0.22677900E+2, 0.177E+3, 0.200E+1, 0.18648000E+1, 0.00000000E+0, 0.49147210E+3, 0.177E+3, + 0.300E+1, 0.18648000E+1, 0.00000000E+0, 0.28982980E+3, 0.177E+3, 0.400E+1, 0.18648000E+1, + 0.00000000E+0, 0.19838070E+3, 0.177E+3, 0.500E+1, 0.18648000E+1, 0.00000000E+0, 0.13600690E+3, + 0.177E+3, 0.600E+1, 0.18648000E+1, 0.00000000E+0, 0.96324300E+2, 0.177E+3, 0.700E+1, + 0.18648000E+1, 0.00000000E+0, 0.73663400E+2, 0.177E+3, 0.800E+1, 0.18648000E+1, 0.00000000E+0, + 0.56326800E+2, 0.177E+3, 0.900E+1, 0.18648000E+1, 0.00000000E+0, 0.43677300E+2, 0.177E+3, + 0.100E+2, 0.18648000E+1, 0.00000000E+0, 0.58883180E+3, 0.177E+3, 0.110E+2, 0.18648000E+1, + 0.00000000E+0, 0.46010610E+3, 0.177E+3, 0.120E+2, 0.18648000E+1, 0.00000000E+0, 0.42726470E+3, + 0.177E+3, 0.130E+2, 0.18648000E+1, 0.00000000E+0, 0.34027370E+3, 0.177E+3, 0.140E+2, + 0.18648000E+1, 0.00000000E+0, 0.26810830E+3, 0.177E+3, 0.150E+2, 0.18648000E+1, 0.00000000E+0, + 0.22424930E+3, 0.177E+3, 0.160E+2, 0.18648000E+1, 0.00000000E+0, 0.18465170E+3, 0.177E+3, + 0.170E+2, 0.18648000E+1, 0.00000000E+0, 0.15222030E+3, 0.177E+3, 0.180E+2, 0.18648000E+1, + 0.00000000E+0, 0.96506260E+3, 0.177E+3, 0.190E+2, 0.18648000E+1, 0.00000000E+0, 0.80438060E+3, + 0.177E+3, 0.200E+2, 0.18648000E+1, 0.00000000E+0, 0.66634240E+3, 0.177E+3, 0.210E+2, + 0.18648000E+1, 0.00000000E+0, 0.64567380E+3, 0.177E+3, 0.220E+2, 0.18648000E+1, 0.00000000E+0, + 0.59240830E+3, 0.177E+3, 0.230E+2, 0.18648000E+1, 0.00000000E+0, 0.46775860E+3, 0.177E+3, + 0.240E+2, 0.18648000E+1, 0.00000000E+0, 0.51152360E+3, 0.177E+3, 0.250E+2, 0.18648000E+1, + 0.00000000E+0, 0.40259270E+3, 0.177E+3, 0.260E+2, 0.18648000E+1, 0.00000000E+0, 0.42750640E+3, + 0.177E+3, 0.270E+2, 0.18648000E+1, 0.00000000E+0, 0.43943760E+3, 0.177E+3, 0.280E+2, + 0.18648000E+1, 0.00000000E+0, 0.33788310E+3, 0.177E+3, 0.290E+2, 0.18648000E+1, 0.00000000E+0, + 0.34820520E+3, 0.177E+3, 0.300E+2, 0.18648000E+1, 0.00000000E+0, 0.41118360E+3, 0.177E+3, + 0.310E+2, 0.18648000E+1, 0.00000000E+0, 0.36542010E+3, 0.177E+3, 0.320E+2, 0.18648000E+1, + 0.00000000E+0, 0.31422920E+3, 0.177E+3, 0.330E+2, 0.18648000E+1, 0.00000000E+0, 0.28359750E+3, + 0.177E+3, 0.340E+2, 0.18648000E+1, 0.00000000E+0, 0.24976170E+3, 0.177E+3, 0.350E+2, + 0.18648000E+1, 0.00000000E+0, 0.21857530E+3, 0.177E+3, 0.360E+2, 0.18648000E+1, 0.00000000E+0, + 0.10836129E+4, 0.177E+3, 0.370E+2, 0.18648000E+1, 0.00000000E+0, 0.95871100E+3, 0.177E+3, + 0.380E+2, 0.18648000E+1, 0.00000000E+0, 0.84420740E+3, 0.177E+3, 0.390E+2, 0.18648000E+1, + 0.00000000E+0, 0.76153710E+3, 0.177E+3, 0.400E+2, 0.18648000E+1, 0.00000000E+0, 0.69635620E+3, + 0.177E+3, 0.410E+2, 0.18648000E+1, 0.00000000E+0, 0.54076150E+3, 0.177E+3, 0.420E+2, + 0.18648000E+1, 0.00000000E+0, 0.60199360E+3, 0.177E+3, 0.430E+2, 0.18648000E+1, 0.00000000E+0, + 0.46158650E+3, 0.177E+3, 0.440E+2, 0.18648000E+1, 0.00000000E+0, 0.50378310E+3, 0.177E+3, + 0.450E+2, 0.18648000E+1, 0.00000000E+0, 0.46803160E+3, 0.177E+3, 0.460E+2, 0.18648000E+1, + 0.00000000E+0, 0.39092010E+3, 0.177E+3, 0.470E+2, 0.18648000E+1, 0.00000000E+0, 0.41343530E+3, + 0.177E+3, 0.480E+2, 0.18648000E+1, 0.00000000E+0, 0.51570310E+3, 0.177E+3, 0.490E+2, + 0.18648000E+1, 0.00000000E+0, 0.47948370E+3, 0.177E+3, 0.500E+2, 0.18648000E+1, 0.00000000E+0, + 0.43006080E+3, 0.177E+3, 0.510E+2, 0.18648000E+1, 0.00000000E+0, 0.40076390E+3, 0.177E+3, + 0.520E+2, 0.18648000E+1, 0.00000000E+0, 0.36420700E+3, 0.177E+3, 0.530E+2, 0.18648000E+1, + 0.00000000E+0, 0.32914390E+3, 0.177E+3, 0.540E+2, 0.18648000E+1, 0.00000000E+0, 0.13211273E+4, + 0.177E+3, 0.550E+2, 0.18648000E+1, 0.00000000E+0, 0.12211564E+4, 0.177E+3, 0.560E+2, + 0.18648000E+1, 0.00000000E+0, 0.10781412E+4, 0.177E+3, 0.570E+2, 0.18648000E+1, 0.00000000E+0, + 0.50792020E+3, 0.177E+3, 0.580E+2, 0.18648000E+1, 0.27991000E+1, 0.10842087E+4, 0.177E+3, + 0.590E+2, 0.18648000E+1, 0.00000000E+0, 0.10418248E+4, 0.177E+3, 0.600E+2, 0.18648000E+1, + 0.00000000E+0, 0.10158802E+4, 0.177E+3, 0.610E+2, 0.18648000E+1, 0.00000000E+0, 0.99198570E+3, + 0.177E+3, 0.620E+2, 0.18648000E+1, 0.00000000E+0, 0.97080130E+3, 0.177E+3, 0.630E+2, + 0.18648000E+1, 0.00000000E+0, 0.76877680E+3, 0.177E+3, 0.640E+2, 0.18648000E+1, 0.00000000E+0, + 0.85938870E+3, 0.177E+3, 0.650E+2, 0.18648000E+1, 0.00000000E+0, 0.82970230E+3, 0.177E+3, + 0.660E+2, 0.18648000E+1, 0.00000000E+0, 0.87655810E+3, 0.177E+3, 0.670E+2, 0.18648000E+1, + 0.00000000E+0, 0.85800850E+3, 0.177E+3, 0.680E+2, 0.18648000E+1, 0.00000000E+0, 0.84134750E+3, + 0.177E+3, 0.690E+2, 0.18648000E+1, 0.00000000E+0, 0.83123230E+3, 0.177E+3, 0.700E+2, + 0.18648000E+1, 0.00000000E+0, 0.70368220E+3, 0.177E+3, 0.710E+2, 0.18648000E+1, 0.00000000E+0, + 0.69544610E+3, 0.177E+3, 0.720E+2, 0.18648000E+1, 0.00000000E+0, 0.63722330E+3, 0.177E+3, + 0.730E+2, 0.18648000E+1, 0.00000000E+0, 0.54056670E+3, 0.177E+3, 0.740E+2, 0.18648000E+1, + 0.00000000E+0, 0.55051890E+3, 0.177E+3, 0.750E+2, 0.18648000E+1, 0.00000000E+0, 0.50082420E+3, + 0.177E+3, 0.760E+2, 0.18648000E+1, 0.00000000E+0, 0.46015330E+3, 0.177E+3, 0.770E+2, + 0.18648000E+1, 0.00000000E+0, 0.38410330E+3, 0.177E+3, 0.780E+2, 0.18648000E+1, 0.00000000E+0, + 0.35955540E+3, 0.177E+3, 0.790E+2, 0.18648000E+1, 0.00000000E+0, 0.37003820E+3, 0.177E+3, + 0.800E+2, 0.18648000E+1, 0.00000000E+0, 0.53143810E+3, 0.177E+3, 0.810E+2, 0.18648000E+1, + 0.00000000E+0, 0.52144650E+3, 0.177E+3, 0.820E+2, 0.18648000E+1, 0.00000000E+0, 0.48170840E+3, + 0.177E+3, 0.830E+2, 0.18648000E+1, 0.00000000E+0, 0.46101200E+3, 0.177E+3, 0.840E+2, + 0.18648000E+1, 0.00000000E+0, 0.42739750E+3, 0.177E+3, 0.850E+2, 0.18648000E+1, 0.00000000E+0, + 0.39350690E+3, 0.177E+3, 0.860E+2, 0.18648000E+1, 0.00000000E+0, 0.12524472E+4, 0.177E+3, + 0.870E+2, 0.18648000E+1, 0.00000000E+0, 0.12109999E+4, 0.177E+3, 0.880E+2, 0.18648000E+1, + 0.00000000E+0, 0.10753003E+4, 0.177E+3, 0.890E+2, 0.18648000E+1, 0.00000000E+0, 0.97245520E+3, + 0.177E+3, 0.900E+2, 0.18648000E+1, 0.00000000E+0, 0.96345570E+3, 0.177E+3, 0.910E+2, + 0.18648000E+1, 0.00000000E+0, 0.93311220E+3, 0.177E+3, 0.920E+2, 0.18648000E+1, 0.00000000E+0, + 0.95733480E+3, 0.177E+3, 0.930E+2, 0.18648000E+1, 0.00000000E+0, 0.92763110E+3, 0.177E+3, + 0.940E+2, 0.18648000E+1, 0.00000000E+0, 0.53325500E+2, 0.177E+3, 0.101E+3, 0.18648000E+1, + 0.00000000E+0, 0.16893310E+3, 0.177E+3, 0.103E+3, 0.18648000E+1, 0.98650000E+0, 0.21625690E+3, + 0.177E+3, 0.104E+3, 0.18648000E+1, 0.98080000E+0, 0.16758690E+3, 0.177E+3, 0.105E+3, + 0.18648000E+1, 0.97060000E+0, 0.12766650E+3, 0.177E+3, 0.106E+3, 0.18648000E+1, 0.98680000E+0, + 0.89935700E+2, 0.177E+3, 0.107E+3, 0.18648000E+1, 0.99440000E+0, 0.66274300E+2, 0.177E+3, + 0.108E+3, 0.18648000E+1, 0.99250000E+0, 0.46290900E+2, 0.177E+3, 0.109E+3, 0.18648000E+1, + 0.99820000E+0, 0.24667920E+3, 0.177E+3, 0.111E+3, 0.18648000E+1, 0.96840000E+0, 0.38086140E+3, + 0.177E+3, 0.112E+3, 0.18648000E+1, 0.96280000E+0, 0.38803830E+3, 0.177E+3, 0.113E+3, + 0.18648000E+1, 0.96480000E+0, 0.31510570E+3, 0.177E+3, 0.114E+3, 0.18648000E+1, 0.95070000E+0, + 0.26039720E+3, 0.177E+3, 0.115E+3, 0.18648000E+1, 0.99470000E+0, 0.22177880E+3, 0.177E+3, + 0.116E+3, 0.18648000E+1, 0.99480000E+0, 0.18273850E+3, 0.177E+3, 0.117E+3, 0.18648000E+1, + 0.99720000E+0, 0.34334310E+3, 0.177E+3, 0.119E+3, 0.18648000E+1, 0.97670000E+0, 0.64530690E+3, + 0.177E+3, 0.120E+3, 0.18648000E+1, 0.98310000E+0, 0.34546620E+3, 0.177E+3, 0.121E+3, + 0.18648000E+1, 0.18627000E+1, 0.33378450E+3, 0.177E+3, 0.122E+3, 0.18648000E+1, 0.18299000E+1, + 0.32712730E+3, 0.177E+3, 0.123E+3, 0.18648000E+1, 0.19138000E+1, 0.32385110E+3, 0.177E+3, + 0.124E+3, 0.18648000E+1, 0.18269000E+1, 0.29919940E+3, 0.177E+3, 0.125E+3, 0.18648000E+1, + 0.16406000E+1, 0.27742410E+3, 0.177E+3, 0.126E+3, 0.18648000E+1, 0.16483000E+1, 0.26476150E+3, + 0.177E+3, 0.127E+3, 0.18648000E+1, 0.17149000E+1, 0.25876330E+3, 0.177E+3, 0.128E+3, + 0.18648000E+1, 0.17937000E+1, 0.25485680E+3, 0.177E+3, 0.129E+3, 0.18648000E+1, 0.95760000E+0, + 0.24052350E+3, 0.177E+3, 0.130E+3, 0.18648000E+1, 0.19419000E+1, 0.38698910E+3, 0.177E+3, + 0.131E+3, 0.18648000E+1, 0.96010000E+0, 0.34259940E+3, 0.177E+3, 0.132E+3, 0.18648000E+1, + 0.94340000E+0, 0.30908100E+3, 0.177E+3, 0.133E+3, 0.18648000E+1, 0.98890000E+0, 0.28369920E+3, + 0.177E+3, 0.134E+3, 0.18648000E+1, 0.99010000E+0, 0.25143160E+3, 0.177E+3, 0.135E+3, + 0.18648000E+1, 0.99740000E+0, 0.41068500E+3, 0.177E+3, 0.137E+3, 0.18648000E+1, 0.97380000E+0, + 0.78537910E+3, 0.177E+3, 0.138E+3, 0.18648000E+1, 0.98010000E+0, 0.60690870E+3, 0.177E+3, + 0.139E+3, 0.18648000E+1, 0.19153000E+1, 0.45710620E+3, 0.177E+3, 0.140E+3, 0.18648000E+1, + 0.19355000E+1, 0.46161660E+3, 0.177E+3, 0.141E+3, 0.18648000E+1, 0.19545000E+1, 0.43145100E+3, + 0.177E+3, 0.142E+3, 0.18648000E+1, 0.19420000E+1, 0.48128810E+3, 0.177E+3, 0.143E+3, + 0.18648000E+1, 0.16682000E+1, 0.37795500E+3, 0.177E+3, 0.144E+3, 0.18648000E+1, 0.18584000E+1, + 0.35398970E+3, 0.177E+3, 0.145E+3, 0.18648000E+1, 0.19003000E+1, 0.32921750E+3, 0.177E+3, + 0.146E+3, 0.18648000E+1, 0.18630000E+1, 0.31831050E+3, 0.177E+3, 0.147E+3, 0.18648000E+1, + 0.96790000E+0, 0.31569280E+3, 0.177E+3, 0.148E+3, 0.18648000E+1, 0.19539000E+1, 0.49262420E+3, + 0.177E+3, 0.149E+3, 0.18648000E+1, 0.96330000E+0, 0.44836200E+3, 0.177E+3, 0.150E+3, + 0.18648000E+1, 0.95140000E+0, 0.42188850E+3, 0.177E+3, 0.151E+3, 0.18648000E+1, 0.97490000E+0, + 0.40057160E+3, 0.177E+3, 0.152E+3, 0.18648000E+1, 0.98110000E+0, 0.36757650E+3, 0.177E+3, + 0.153E+3, 0.18648000E+1, 0.99680000E+0, 0.48764860E+3, 0.177E+3, 0.155E+3, 0.18648000E+1, + 0.99090000E+0, 0.10171183E+4, 0.177E+3, 0.156E+3, 0.18648000E+1, 0.97970000E+0, 0.76771820E+3, + 0.177E+3, 0.157E+3, 0.18648000E+1, 0.19373000E+1, 0.49283570E+3, 0.177E+3, 0.159E+3, + 0.18648000E+1, 0.29425000E+1, 0.48268880E+3, 0.177E+3, 0.160E+3, 0.18648000E+1, 0.29455000E+1, + 0.46758270E+3, 0.177E+3, 0.161E+3, 0.18648000E+1, 0.29413000E+1, 0.46943970E+3, 0.177E+3, + 0.162E+3, 0.18648000E+1, 0.29300000E+1, 0.45134990E+3, 0.177E+3, 0.163E+3, 0.18648000E+1, + 0.18286000E+1, 0.47210950E+3, 0.177E+3, 0.164E+3, 0.18648000E+1, 0.28732000E+1, 0.44388260E+3, + 0.177E+3, 0.165E+3, 0.18648000E+1, 0.29086000E+1, 0.45095330E+3, 0.177E+3, 0.166E+3, + 0.18648000E+1, 0.28965000E+1, 0.42164500E+3, 0.177E+3, 0.167E+3, 0.18648000E+1, 0.29242000E+1, + 0.40975870E+3, 0.177E+3, 0.168E+3, 0.18648000E+1, 0.29282000E+1, 0.40699850E+3, 0.177E+3, + 0.169E+3, 0.18648000E+1, 0.29246000E+1, 0.42696980E+3, 0.177E+3, 0.170E+3, 0.18648000E+1, + 0.28482000E+1, 0.39353520E+3, 0.177E+3, 0.171E+3, 0.18648000E+1, 0.29219000E+1, 0.52755310E+3, + 0.177E+3, 0.172E+3, 0.18648000E+1, 0.19254000E+1, 0.49159800E+3, 0.177E+3, 0.173E+3, + 0.18648000E+1, 0.19459000E+1, 0.45048000E+3, 0.177E+3, 0.174E+3, 0.18648000E+1, 0.19292000E+1, + 0.45433550E+3, 0.177E+3, 0.175E+3, 0.18648000E+1, 0.18104000E+1, 0.40148890E+3, 0.177E+3, + 0.176E+3, 0.18648000E+1, 0.18858000E+1, 0.37849390E+3, 0.177E+3, 0.177E+3, 0.18648000E+1, + 0.18648000E+1, 0.32091700E+2, 0.178E+3, 0.100E+1, 0.19188000E+1, 0.91180000E+0, 0.21833800E+2, + 0.178E+3, 0.200E+1, 0.19188000E+1, 0.00000000E+0, 0.46520110E+3, 0.178E+3, 0.300E+1, + 0.19188000E+1, 0.00000000E+0, 0.27545630E+3, 0.178E+3, 0.400E+1, 0.19188000E+1, 0.00000000E+0, + 0.18914850E+3, 0.178E+3, 0.500E+1, 0.19188000E+1, 0.00000000E+0, 0.13007010E+3, 0.178E+3, + 0.600E+1, 0.19188000E+1, 0.00000000E+0, 0.92371000E+2, 0.178E+3, 0.700E+1, 0.19188000E+1, + 0.00000000E+0, 0.70797500E+2, 0.178E+3, 0.800E+1, 0.19188000E+1, 0.00000000E+0, 0.54251600E+2, + 0.178E+3, 0.900E+1, 0.19188000E+1, 0.00000000E+0, 0.42149900E+2, 0.178E+3, 0.100E+2, + 0.19188000E+1, 0.00000000E+0, 0.55760480E+3, 0.178E+3, 0.110E+2, 0.19188000E+1, 0.00000000E+0, + 0.43700990E+3, 0.178E+3, 0.120E+2, 0.19188000E+1, 0.00000000E+0, 0.40638720E+3, 0.178E+3, + 0.130E+2, 0.19188000E+1, 0.00000000E+0, 0.32432370E+3, 0.178E+3, 0.140E+2, 0.19188000E+1, + 0.00000000E+0, 0.25607430E+3, 0.178E+3, 0.150E+2, 0.19188000E+1, 0.00000000E+0, 0.21453080E+3, + 0.178E+3, 0.160E+2, 0.19188000E+1, 0.00000000E+0, 0.17695160E+3, 0.178E+3, 0.170E+2, + 0.19188000E+1, 0.00000000E+0, 0.14611660E+3, 0.178E+3, 0.180E+2, 0.19188000E+1, 0.00000000E+0, + 0.91385330E+3, 0.178E+3, 0.190E+2, 0.19188000E+1, 0.00000000E+0, 0.76327990E+3, 0.178E+3, + 0.200E+2, 0.19188000E+1, 0.00000000E+0, 0.63264330E+3, 0.178E+3, 0.210E+2, 0.19188000E+1, + 0.00000000E+0, 0.61344560E+3, 0.178E+3, 0.220E+2, 0.19188000E+1, 0.00000000E+0, 0.56306260E+3, + 0.178E+3, 0.230E+2, 0.19188000E+1, 0.00000000E+0, 0.44482350E+3, 0.178E+3, 0.240E+2, + 0.19188000E+1, 0.00000000E+0, 0.48647550E+3, 0.178E+3, 0.250E+2, 0.19188000E+1, 0.00000000E+0, + 0.38312130E+3, 0.178E+3, 0.260E+2, 0.19188000E+1, 0.00000000E+0, 0.40695490E+3, 0.178E+3, + 0.270E+2, 0.19188000E+1, 0.00000000E+0, 0.41813480E+3, 0.178E+3, 0.280E+2, 0.19188000E+1, + 0.00000000E+0, 0.32172230E+3, 0.178E+3, 0.290E+2, 0.19188000E+1, 0.00000000E+0, 0.33177490E+3, + 0.178E+3, 0.300E+2, 0.19188000E+1, 0.00000000E+0, 0.39148440E+3, 0.178E+3, 0.310E+2, + 0.19188000E+1, 0.00000000E+0, 0.34844170E+3, 0.178E+3, 0.320E+2, 0.19188000E+1, 0.00000000E+0, + 0.30012110E+3, 0.178E+3, 0.330E+2, 0.19188000E+1, 0.00000000E+0, 0.27118850E+3, 0.178E+3, + 0.340E+2, 0.19188000E+1, 0.00000000E+0, 0.23915510E+3, 0.178E+3, 0.350E+2, 0.19188000E+1, + 0.00000000E+0, 0.20957880E+3, 0.178E+3, 0.360E+2, 0.19188000E+1, 0.00000000E+0, 0.10265038E+4, + 0.178E+3, 0.370E+2, 0.19188000E+1, 0.00000000E+0, 0.90978800E+3, 0.178E+3, 0.380E+2, + 0.19188000E+1, 0.00000000E+0, 0.80197930E+3, 0.178E+3, 0.390E+2, 0.19188000E+1, 0.00000000E+0, + 0.72399270E+3, 0.178E+3, 0.400E+2, 0.19188000E+1, 0.00000000E+0, 0.66240900E+3, 0.178E+3, + 0.410E+2, 0.19188000E+1, 0.00000000E+0, 0.51504420E+3, 0.178E+3, 0.420E+2, 0.19188000E+1, + 0.00000000E+0, 0.57309040E+3, 0.178E+3, 0.430E+2, 0.19188000E+1, 0.00000000E+0, 0.44003780E+3, + 0.178E+3, 0.440E+2, 0.19188000E+1, 0.00000000E+0, 0.48010810E+3, 0.178E+3, 0.450E+2, + 0.19188000E+1, 0.00000000E+0, 0.44621570E+3, 0.178E+3, 0.460E+2, 0.19188000E+1, 0.00000000E+0, + 0.37286390E+3, 0.178E+3, 0.470E+2, 0.19188000E+1, 0.00000000E+0, 0.39438550E+3, 0.178E+3, + 0.480E+2, 0.19188000E+1, 0.00000000E+0, 0.49129160E+3, 0.178E+3, 0.490E+2, 0.19188000E+1, + 0.00000000E+0, 0.45727960E+3, 0.178E+3, 0.500E+2, 0.19188000E+1, 0.00000000E+0, 0.41067770E+3, + 0.178E+3, 0.510E+2, 0.19188000E+1, 0.00000000E+0, 0.38304320E+3, 0.178E+3, 0.520E+2, + 0.19188000E+1, 0.00000000E+0, 0.34847210E+3, 0.178E+3, 0.530E+2, 0.19188000E+1, 0.00000000E+0, + 0.31527170E+3, 0.178E+3, 0.540E+2, 0.19188000E+1, 0.00000000E+0, 0.12516079E+4, 0.178E+3, + 0.550E+2, 0.19188000E+1, 0.00000000E+0, 0.11586040E+4, 0.178E+3, 0.560E+2, 0.19188000E+1, + 0.00000000E+0, 0.10239496E+4, 0.178E+3, 0.570E+2, 0.19188000E+1, 0.00000000E+0, 0.48500190E+3, + 0.178E+3, 0.580E+2, 0.19188000E+1, 0.27991000E+1, 0.10291720E+4, 0.178E+3, 0.590E+2, + 0.19188000E+1, 0.00000000E+0, 0.98909200E+3, 0.178E+3, 0.600E+2, 0.19188000E+1, 0.00000000E+0, + 0.96450040E+3, 0.178E+3, 0.610E+2, 0.19188000E+1, 0.00000000E+0, 0.94184450E+3, 0.178E+3, + 0.620E+2, 0.19188000E+1, 0.00000000E+0, 0.92175840E+3, 0.178E+3, 0.630E+2, 0.19188000E+1, + 0.00000000E+0, 0.73100210E+3, 0.178E+3, 0.640E+2, 0.19188000E+1, 0.00000000E+0, 0.81592560E+3, + 0.178E+3, 0.650E+2, 0.19188000E+1, 0.00000000E+0, 0.78790030E+3, 0.178E+3, 0.660E+2, + 0.19188000E+1, 0.00000000E+0, 0.83246930E+3, 0.178E+3, 0.670E+2, 0.19188000E+1, 0.00000000E+0, + 0.81486390E+3, 0.178E+3, 0.680E+2, 0.19188000E+1, 0.00000000E+0, 0.79906290E+3, 0.178E+3, + 0.690E+2, 0.19188000E+1, 0.00000000E+0, 0.78940200E+3, 0.178E+3, 0.700E+2, 0.19188000E+1, + 0.00000000E+0, 0.66892220E+3, 0.178E+3, 0.710E+2, 0.19188000E+1, 0.00000000E+0, 0.66171440E+3, + 0.178E+3, 0.720E+2, 0.19188000E+1, 0.00000000E+0, 0.60682340E+3, 0.178E+3, 0.730E+2, + 0.19188000E+1, 0.00000000E+0, 0.51528520E+3, 0.178E+3, 0.740E+2, 0.19188000E+1, 0.00000000E+0, + 0.52488810E+3, 0.178E+3, 0.750E+2, 0.19188000E+1, 0.00000000E+0, 0.47789070E+3, 0.178E+3, + 0.760E+2, 0.19188000E+1, 0.00000000E+0, 0.43938870E+3, 0.178E+3, 0.770E+2, 0.19188000E+1, + 0.00000000E+0, 0.36716870E+3, 0.178E+3, 0.780E+2, 0.19188000E+1, 0.00000000E+0, 0.34385620E+3, + 0.178E+3, 0.790E+2, 0.19188000E+1, 0.00000000E+0, 0.35390700E+3, 0.178E+3, 0.800E+2, + 0.19188000E+1, 0.00000000E+0, 0.50669330E+3, 0.178E+3, 0.810E+2, 0.19188000E+1, 0.00000000E+0, + 0.49751750E+3, 0.178E+3, 0.820E+2, 0.19188000E+1, 0.00000000E+0, 0.46009860E+3, 0.178E+3, + 0.830E+2, 0.19188000E+1, 0.00000000E+0, 0.44063800E+3, 0.178E+3, 0.840E+2, 0.19188000E+1, + 0.00000000E+0, 0.40889250E+3, 0.178E+3, 0.850E+2, 0.19188000E+1, 0.00000000E+0, 0.37682880E+3, + 0.178E+3, 0.860E+2, 0.19188000E+1, 0.00000000E+0, 0.11875608E+4, 0.178E+3, 0.870E+2, + 0.19188000E+1, 0.00000000E+0, 0.11496435E+4, 0.178E+3, 0.880E+2, 0.19188000E+1, 0.00000000E+0, + 0.10218132E+4, 0.178E+3, 0.890E+2, 0.19188000E+1, 0.00000000E+0, 0.92532050E+3, 0.178E+3, + 0.900E+2, 0.19188000E+1, 0.00000000E+0, 0.91638160E+3, 0.178E+3, 0.910E+2, 0.19188000E+1, + 0.00000000E+0, 0.88757730E+3, 0.178E+3, 0.920E+2, 0.19188000E+1, 0.00000000E+0, 0.90998500E+3, + 0.178E+3, 0.930E+2, 0.19188000E+1, 0.00000000E+0, 0.88186200E+3, 0.178E+3, 0.940E+2, + 0.19188000E+1, 0.00000000E+0, 0.50936600E+2, 0.178E+3, 0.101E+3, 0.19188000E+1, 0.00000000E+0, + 0.16064720E+3, 0.178E+3, 0.103E+3, 0.19188000E+1, 0.98650000E+0, 0.20578590E+3, 0.178E+3, + 0.104E+3, 0.19188000E+1, 0.98080000E+0, 0.15992840E+3, 0.178E+3, 0.105E+3, 0.19188000E+1, + 0.97060000E+0, 0.12211080E+3, 0.178E+3, 0.106E+3, 0.19188000E+1, 0.98680000E+0, 0.86265500E+2, + 0.178E+3, 0.107E+3, 0.19188000E+1, 0.99440000E+0, 0.63736400E+2, 0.178E+3, 0.108E+3, + 0.19188000E+1, 0.99250000E+0, 0.44679200E+2, 0.178E+3, 0.109E+3, 0.19188000E+1, 0.99820000E+0, + 0.23456040E+3, 0.178E+3, 0.111E+3, 0.19188000E+1, 0.96840000E+0, 0.36198670E+3, 0.178E+3, + 0.112E+3, 0.19188000E+1, 0.96280000E+0, 0.36923330E+3, 0.178E+3, 0.113E+3, 0.19188000E+1, + 0.96480000E+0, 0.30045310E+3, 0.178E+3, 0.114E+3, 0.19188000E+1, 0.95070000E+0, 0.24874070E+3, + 0.178E+3, 0.115E+3, 0.19188000E+1, 0.99470000E+0, 0.21216920E+3, 0.178E+3, 0.116E+3, + 0.19188000E+1, 0.99480000E+0, 0.17511990E+3, 0.178E+3, 0.117E+3, 0.19188000E+1, 0.99720000E+0, + 0.32711390E+3, 0.178E+3, 0.119E+3, 0.19188000E+1, 0.97670000E+0, 0.61266150E+3, 0.178E+3, + 0.120E+3, 0.19188000E+1, 0.98310000E+0, 0.32950500E+3, 0.178E+3, 0.121E+3, 0.19188000E+1, + 0.18627000E+1, 0.31842170E+3, 0.178E+3, 0.122E+3, 0.19188000E+1, 0.18299000E+1, 0.31208150E+3, + 0.178E+3, 0.123E+3, 0.19188000E+1, 0.19138000E+1, 0.30891510E+3, 0.178E+3, 0.124E+3, + 0.19188000E+1, 0.18269000E+1, 0.28562920E+3, 0.178E+3, 0.125E+3, 0.19188000E+1, 0.16406000E+1, + 0.26494780E+3, 0.178E+3, 0.126E+3, 0.19188000E+1, 0.16483000E+1, 0.25288280E+3, 0.178E+3, + 0.127E+3, 0.19188000E+1, 0.17149000E+1, 0.24714320E+3, 0.178E+3, 0.128E+3, 0.19188000E+1, + 0.17937000E+1, 0.24327100E+3, 0.178E+3, 0.129E+3, 0.19188000E+1, 0.95760000E+0, 0.22984390E+3, + 0.178E+3, 0.130E+3, 0.19188000E+1, 0.19419000E+1, 0.36860280E+3, 0.178E+3, 0.131E+3, + 0.19188000E+1, 0.96010000E+0, 0.32682470E+3, 0.178E+3, 0.132E+3, 0.19188000E+1, 0.94340000E+0, + 0.29524020E+3, 0.178E+3, 0.133E+3, 0.19188000E+1, 0.98890000E+0, 0.27128510E+3, 0.178E+3, + 0.134E+3, 0.19188000E+1, 0.99010000E+0, 0.24074110E+3, 0.178E+3, 0.135E+3, 0.19188000E+1, + 0.99740000E+0, 0.39146850E+3, 0.178E+3, 0.137E+3, 0.19188000E+1, 0.97380000E+0, 0.74566370E+3, + 0.178E+3, 0.138E+3, 0.19188000E+1, 0.98010000E+0, 0.57749450E+3, 0.178E+3, 0.139E+3, + 0.19188000E+1, 0.19153000E+1, 0.43601580E+3, 0.178E+3, 0.140E+3, 0.19188000E+1, 0.19355000E+1, + 0.44033040E+3, 0.178E+3, 0.141E+3, 0.19188000E+1, 0.19545000E+1, 0.41176280E+3, 0.178E+3, + 0.142E+3, 0.19188000E+1, 0.19420000E+1, 0.45883330E+3, 0.178E+3, 0.143E+3, 0.19188000E+1, + 0.16682000E+1, 0.36109350E+3, 0.178E+3, 0.144E+3, 0.19188000E+1, 0.18584000E+1, 0.33829080E+3, + 0.178E+3, 0.145E+3, 0.19188000E+1, 0.19003000E+1, 0.31473130E+3, 0.178E+3, 0.146E+3, + 0.19188000E+1, 0.18630000E+1, 0.30428650E+3, 0.178E+3, 0.147E+3, 0.19188000E+1, 0.96790000E+0, + 0.30192540E+3, 0.178E+3, 0.148E+3, 0.19188000E+1, 0.19539000E+1, 0.46950870E+3, 0.178E+3, + 0.149E+3, 0.19188000E+1, 0.96330000E+0, 0.42783570E+3, 0.178E+3, 0.150E+3, 0.19188000E+1, + 0.95140000E+0, 0.40295210E+3, 0.178E+3, 0.151E+3, 0.19188000E+1, 0.97490000E+0, 0.38287770E+3, + 0.178E+3, 0.152E+3, 0.19188000E+1, 0.98110000E+0, 0.35168470E+3, 0.178E+3, 0.153E+3, + 0.19188000E+1, 0.99680000E+0, 0.46516200E+3, 0.178E+3, 0.155E+3, 0.19188000E+1, 0.99090000E+0, + 0.96540540E+3, 0.178E+3, 0.156E+3, 0.19188000E+1, 0.97970000E+0, 0.73040540E+3, 0.178E+3, + 0.157E+3, 0.19188000E+1, 0.19373000E+1, 0.47064590E+3, 0.178E+3, 0.159E+3, 0.19188000E+1, + 0.29425000E+1, 0.46096660E+3, 0.178E+3, 0.160E+3, 0.19188000E+1, 0.29455000E+1, 0.44658000E+3, + 0.178E+3, 0.161E+3, 0.19188000E+1, 0.29413000E+1, 0.44826620E+3, 0.178E+3, 0.162E+3, + 0.19188000E+1, 0.29300000E+1, 0.43078610E+3, 0.178E+3, 0.163E+3, 0.19188000E+1, 0.18286000E+1, + 0.45075260E+3, 0.178E+3, 0.164E+3, 0.19188000E+1, 0.28732000E+1, 0.42390040E+3, 0.178E+3, + 0.165E+3, 0.19188000E+1, 0.29086000E+1, 0.43051250E+3, 0.178E+3, 0.166E+3, 0.19188000E+1, + 0.28965000E+1, 0.40272530E+3, 0.178E+3, 0.167E+3, 0.19188000E+1, 0.29242000E+1, 0.39139780E+3, + 0.178E+3, 0.168E+3, 0.19188000E+1, 0.29282000E+1, 0.38873440E+3, 0.178E+3, 0.169E+3, + 0.19188000E+1, 0.29246000E+1, 0.40763660E+3, 0.178E+3, 0.170E+3, 0.19188000E+1, 0.28482000E+1, + 0.37590100E+3, 0.178E+3, 0.171E+3, 0.19188000E+1, 0.29219000E+1, 0.50277570E+3, 0.178E+3, + 0.172E+3, 0.19188000E+1, 0.19254000E+1, 0.46891240E+3, 0.178E+3, 0.173E+3, 0.19188000E+1, + 0.19459000E+1, 0.43008890E+3, 0.178E+3, 0.174E+3, 0.19188000E+1, 0.19292000E+1, 0.43348520E+3, + 0.178E+3, 0.175E+3, 0.19188000E+1, 0.18104000E+1, 0.38382310E+3, 0.178E+3, 0.176E+3, + 0.19188000E+1, 0.18858000E+1, 0.36201210E+3, 0.178E+3, 0.177E+3, 0.19188000E+1, 0.18648000E+1, + 0.34636100E+3, 0.178E+3, 0.178E+3, 0.19188000E+1, 0.19188000E+1, 0.30675700E+2, 0.179E+3, + 0.100E+1, 0.98460000E+0, 0.91180000E+0, 0.20941000E+2, 0.179E+3, 0.200E+1, 0.98460000E+0, + 0.00000000E+0, 0.44619080E+3, 0.179E+3, 0.300E+1, 0.98460000E+0, 0.00000000E+0, 0.26322300E+3, + 0.179E+3, 0.400E+1, 0.98460000E+0, 0.00000000E+0, 0.18065820E+3, 0.179E+3, 0.500E+1, + 0.98460000E+0, 0.00000000E+0, 0.12431330E+3, 0.179E+3, 0.600E+1, 0.98460000E+0, 0.00000000E+0, + 0.88391500E+2, 0.179E+3, 0.700E+1, 0.98460000E+0, 0.00000000E+0, 0.67837200E+2, 0.179E+3, + 0.800E+1, 0.98460000E+0, 0.00000000E+0, 0.52061000E+2, 0.179E+3, 0.900E+1, 0.98460000E+0, + 0.00000000E+0, 0.40509200E+2, 0.179E+3, 0.100E+2, 0.98460000E+0, 0.00000000E+0, 0.53480760E+3, + 0.179E+3, 0.110E+2, 0.98460000E+0, 0.00000000E+0, 0.41788500E+3, 0.179E+3, 0.120E+2, + 0.98460000E+0, 0.00000000E+0, 0.38834460E+3, 0.179E+3, 0.130E+2, 0.98460000E+0, 0.00000000E+0, + 0.30976480E+3, 0.179E+3, 0.140E+2, 0.98460000E+0, 0.00000000E+0, 0.24460550E+3, 0.179E+3, + 0.150E+2, 0.98460000E+0, 0.00000000E+0, 0.20502050E+3, 0.179E+3, 0.160E+2, 0.98460000E+0, + 0.00000000E+0, 0.16922710E+3, 0.179E+3, 0.170E+2, 0.98460000E+0, 0.00000000E+0, 0.13986320E+3, + 0.179E+3, 0.180E+2, 0.98460000E+0, 0.00000000E+0, 0.87757830E+3, 0.179E+3, 0.190E+2, + 0.98460000E+0, 0.00000000E+0, 0.73094660E+3, 0.179E+3, 0.200E+2, 0.98460000E+0, 0.00000000E+0, + 0.60554530E+3, 0.179E+3, 0.210E+2, 0.98460000E+0, 0.00000000E+0, 0.58704740E+3, 0.179E+3, + 0.220E+2, 0.98460000E+0, 0.00000000E+0, 0.53875790E+3, 0.179E+3, 0.230E+2, 0.98460000E+0, + 0.00000000E+0, 0.42583430E+3, 0.179E+3, 0.240E+2, 0.98460000E+0, 0.00000000E+0, 0.46540030E+3, + 0.179E+3, 0.250E+2, 0.98460000E+0, 0.00000000E+0, 0.36671160E+3, 0.179E+3, 0.260E+2, + 0.98460000E+0, 0.00000000E+0, 0.38919570E+3, 0.179E+3, 0.270E+2, 0.98460000E+0, 0.00000000E+0, + 0.39992890E+3, 0.179E+3, 0.280E+2, 0.98460000E+0, 0.00000000E+0, 0.30793520E+3, 0.179E+3, + 0.290E+2, 0.98460000E+0, 0.00000000E+0, 0.31723870E+3, 0.179E+3, 0.300E+2, 0.98460000E+0, + 0.00000000E+0, 0.37421180E+3, 0.179E+3, 0.310E+2, 0.98460000E+0, 0.00000000E+0, 0.33290660E+3, + 0.179E+3, 0.320E+2, 0.98460000E+0, 0.00000000E+0, 0.28673520E+3, 0.179E+3, 0.330E+2, + 0.98460000E+0, 0.00000000E+0, 0.25915840E+3, 0.179E+3, 0.340E+2, 0.98460000E+0, 0.00000000E+0, + 0.22864850E+3, 0.179E+3, 0.350E+2, 0.98460000E+0, 0.00000000E+0, 0.20049290E+3, 0.179E+3, + 0.360E+2, 0.98460000E+0, 0.00000000E+0, 0.98572350E+3, 0.179E+3, 0.370E+2, 0.98460000E+0, + 0.00000000E+0, 0.87147550E+3, 0.179E+3, 0.380E+2, 0.98460000E+0, 0.00000000E+0, 0.76763160E+3, + 0.179E+3, 0.390E+2, 0.98460000E+0, 0.00000000E+0, 0.69275660E+3, 0.179E+3, 0.400E+2, + 0.98460000E+0, 0.00000000E+0, 0.63375930E+3, 0.179E+3, 0.410E+2, 0.98460000E+0, 0.00000000E+0, + 0.49282900E+3, 0.179E+3, 0.420E+2, 0.98460000E+0, 0.00000000E+0, 0.54833760E+3, 0.179E+3, + 0.430E+2, 0.98460000E+0, 0.00000000E+0, 0.42110840E+3, 0.179E+3, 0.440E+2, 0.98460000E+0, + 0.00000000E+0, 0.45928620E+3, 0.179E+3, 0.450E+2, 0.98460000E+0, 0.00000000E+0, 0.42686340E+3, + 0.179E+3, 0.460E+2, 0.98460000E+0, 0.00000000E+0, 0.35697430E+3, 0.179E+3, 0.470E+2, + 0.98460000E+0, 0.00000000E+0, 0.37730490E+3, 0.179E+3, 0.480E+2, 0.98460000E+0, 0.00000000E+0, + 0.46998930E+3, 0.179E+3, 0.490E+2, 0.98460000E+0, 0.00000000E+0, 0.43719460E+3, 0.179E+3, + 0.500E+2, 0.98460000E+0, 0.00000000E+0, 0.39255510E+3, 0.179E+3, 0.510E+2, 0.98460000E+0, + 0.00000000E+0, 0.36615260E+3, 0.179E+3, 0.520E+2, 0.98460000E+0, 0.00000000E+0, 0.33316950E+3, + 0.179E+3, 0.530E+2, 0.98460000E+0, 0.00000000E+0, 0.30152720E+3, 0.179E+3, 0.540E+2, + 0.98460000E+0, 0.00000000E+0, 0.12018793E+4, 0.179E+3, 0.550E+2, 0.98460000E+0, 0.00000000E+0, + 0.11102792E+4, 0.179E+3, 0.560E+2, 0.98460000E+0, 0.00000000E+0, 0.98044160E+3, 0.179E+3, + 0.570E+2, 0.98460000E+0, 0.00000000E+0, 0.46371250E+3, 0.179E+3, 0.580E+2, 0.98460000E+0, + 0.27991000E+1, 0.98614070E+3, 0.179E+3, 0.590E+2, 0.98460000E+0, 0.00000000E+0, 0.94759800E+3, + 0.179E+3, 0.600E+2, 0.98460000E+0, 0.00000000E+0, 0.92399680E+3, 0.179E+3, 0.610E+2, + 0.98460000E+0, 0.00000000E+0, 0.90225470E+3, 0.179E+3, 0.620E+2, 0.98460000E+0, 0.00000000E+0, + 0.88297590E+3, 0.179E+3, 0.630E+2, 0.98460000E+0, 0.00000000E+0, 0.69990580E+3, 0.179E+3, + 0.640E+2, 0.98460000E+0, 0.00000000E+0, 0.78232470E+3, 0.179E+3, 0.650E+2, 0.98460000E+0, + 0.00000000E+0, 0.75533300E+3, 0.179E+3, 0.660E+2, 0.98460000E+0, 0.00000000E+0, 0.79726220E+3, + 0.179E+3, 0.670E+2, 0.98460000E+0, 0.00000000E+0, 0.78037200E+3, 0.179E+3, 0.680E+2, + 0.98460000E+0, 0.00000000E+0, 0.76520560E+3, 0.179E+3, 0.690E+2, 0.98460000E+0, 0.00000000E+0, + 0.75596270E+3, 0.179E+3, 0.700E+2, 0.98460000E+0, 0.00000000E+0, 0.64035930E+3, 0.179E+3, + 0.710E+2, 0.98460000E+0, 0.00000000E+0, 0.63292020E+3, 0.179E+3, 0.720E+2, 0.98460000E+0, + 0.00000000E+0, 0.58031360E+3, 0.179E+3, 0.730E+2, 0.98460000E+0, 0.00000000E+0, 0.49290480E+3, + 0.179E+3, 0.740E+2, 0.98460000E+0, 0.00000000E+0, 0.50200340E+3, 0.179E+3, 0.750E+2, + 0.98460000E+0, 0.00000000E+0, 0.45704880E+3, 0.179E+3, 0.760E+2, 0.98460000E+0, 0.00000000E+0, + 0.42025190E+3, 0.179E+3, 0.770E+2, 0.98460000E+0, 0.00000000E+0, 0.35135070E+3, 0.179E+3, + 0.780E+2, 0.98460000E+0, 0.00000000E+0, 0.32911380E+3, 0.179E+3, 0.790E+2, 0.98460000E+0, + 0.00000000E+0, 0.33864570E+3, 0.179E+3, 0.800E+2, 0.98460000E+0, 0.00000000E+0, 0.48495430E+3, + 0.179E+3, 0.810E+2, 0.98460000E+0, 0.00000000E+0, 0.47588520E+3, 0.179E+3, 0.820E+2, + 0.98460000E+0, 0.00000000E+0, 0.43996460E+3, 0.179E+3, 0.830E+2, 0.98460000E+0, 0.00000000E+0, + 0.42133170E+3, 0.179E+3, 0.840E+2, 0.98460000E+0, 0.00000000E+0, 0.39100970E+3, 0.179E+3, + 0.850E+2, 0.98460000E+0, 0.00000000E+0, 0.36042890E+3, 0.179E+3, 0.860E+2, 0.98460000E+0, + 0.00000000E+0, 0.11396407E+4, 0.179E+3, 0.870E+2, 0.98460000E+0, 0.00000000E+0, 0.11012980E+4, + 0.179E+3, 0.880E+2, 0.98460000E+0, 0.00000000E+0, 0.97817100E+3, 0.179E+3, 0.890E+2, + 0.98460000E+0, 0.00000000E+0, 0.88538660E+3, 0.179E+3, 0.900E+2, 0.98460000E+0, 0.00000000E+0, + 0.87728480E+3, 0.179E+3, 0.910E+2, 0.98460000E+0, 0.00000000E+0, 0.84972830E+3, 0.179E+3, + 0.920E+2, 0.98460000E+0, 0.00000000E+0, 0.87157240E+3, 0.179E+3, 0.930E+2, 0.98460000E+0, + 0.00000000E+0, 0.84456390E+3, 0.179E+3, 0.940E+2, 0.98460000E+0, 0.00000000E+0, 0.48647800E+2, + 0.179E+3, 0.101E+3, 0.98460000E+0, 0.00000000E+0, 0.15352370E+3, 0.179E+3, 0.103E+3, + 0.98460000E+0, 0.98650000E+0, 0.19665700E+3, 0.179E+3, 0.104E+3, 0.98460000E+0, 0.98080000E+0, + 0.15278290E+3, 0.179E+3, 0.105E+3, 0.98460000E+0, 0.97060000E+0, 0.11673350E+3, 0.179E+3, + 0.106E+3, 0.98460000E+0, 0.98680000E+0, 0.82569800E+2, 0.179E+3, 0.107E+3, 0.98460000E+0, + 0.99440000E+0, 0.61097100E+2, 0.179E+3, 0.108E+3, 0.98460000E+0, 0.99250000E+0, 0.42933900E+2, + 0.179E+3, 0.109E+3, 0.98460000E+0, 0.99820000E+0, 0.22431640E+3, 0.179E+3, 0.111E+3, + 0.98460000E+0, 0.96840000E+0, 0.34612620E+3, 0.179E+3, 0.112E+3, 0.98460000E+0, 0.96280000E+0, + 0.35282440E+3, 0.179E+3, 0.113E+3, 0.98460000E+0, 0.96480000E+0, 0.28698060E+3, 0.179E+3, + 0.114E+3, 0.98460000E+0, 0.95070000E+0, 0.23761790E+3, 0.179E+3, 0.115E+3, 0.98460000E+0, + 0.99470000E+0, 0.20277280E+3, 0.179E+3, 0.116E+3, 0.98460000E+0, 0.99480000E+0, 0.16748190E+3, + 0.179E+3, 0.117E+3, 0.98460000E+0, 0.99720000E+0, 0.31303240E+3, 0.179E+3, 0.119E+3, + 0.98460000E+0, 0.97670000E+0, 0.58698040E+3, 0.179E+3, 0.120E+3, 0.98460000E+0, 0.98310000E+0, + 0.31500110E+3, 0.179E+3, 0.121E+3, 0.98460000E+0, 0.18627000E+1, 0.30444790E+3, 0.179E+3, + 0.122E+3, 0.98460000E+0, 0.18299000E+1, 0.29841150E+3, 0.179E+3, 0.123E+3, 0.98460000E+0, + 0.19138000E+1, 0.29542220E+3, 0.179E+3, 0.124E+3, 0.98460000E+0, 0.18269000E+1, 0.27304550E+3, + 0.179E+3, 0.125E+3, 0.98460000E+0, 0.16406000E+1, 0.25329860E+3, 0.179E+3, 0.126E+3, + 0.98460000E+0, 0.16483000E+1, 0.24179700E+3, 0.179E+3, 0.127E+3, 0.98460000E+0, 0.17149000E+1, + 0.23632330E+3, 0.179E+3, 0.128E+3, 0.98460000E+0, 0.17937000E+1, 0.23269810E+3, 0.179E+3, + 0.129E+3, 0.98460000E+0, 0.95760000E+0, 0.21974110E+3, 0.179E+3, 0.130E+3, 0.98460000E+0, + 0.19419000E+1, 0.35230670E+3, 0.179E+3, 0.131E+3, 0.98460000E+0, 0.96010000E+0, 0.31225540E+3, + 0.179E+3, 0.132E+3, 0.98460000E+0, 0.94340000E+0, 0.28208180E+3, 0.179E+3, 0.133E+3, + 0.98460000E+0, 0.98890000E+0, 0.25925510E+3, 0.179E+3, 0.134E+3, 0.98460000E+0, 0.99010000E+0, + 0.23016390E+3, 0.179E+3, 0.135E+3, 0.98460000E+0, 0.99740000E+0, 0.37464460E+3, 0.179E+3, + 0.137E+3, 0.98460000E+0, 0.97380000E+0, 0.71461700E+3, 0.179E+3, 0.138E+3, 0.98460000E+0, + 0.98010000E+0, 0.55272720E+3, 0.179E+3, 0.139E+3, 0.98460000E+0, 0.19153000E+1, 0.41693630E+3, + 0.179E+3, 0.140E+3, 0.98460000E+0, 0.19355000E+1, 0.42109580E+3, 0.179E+3, 0.141E+3, + 0.98460000E+0, 0.19545000E+1, 0.39381950E+3, 0.179E+3, 0.142E+3, 0.98460000E+0, 0.19420000E+1, + 0.43907200E+3, 0.179E+3, 0.143E+3, 0.98460000E+0, 0.16682000E+1, 0.34535640E+3, 0.179E+3, + 0.144E+3, 0.98460000E+0, 0.18584000E+1, 0.32361650E+3, 0.179E+3, 0.145E+3, 0.98460000E+0, + 0.19003000E+1, 0.30113910E+3, 0.179E+3, 0.146E+3, 0.98460000E+0, 0.18630000E+1, 0.29118100E+3, + 0.179E+3, 0.147E+3, 0.98460000E+0, 0.96790000E+0, 0.28880380E+3, 0.179E+3, 0.148E+3, + 0.98460000E+0, 0.19539000E+1, 0.44908360E+3, 0.179E+3, 0.149E+3, 0.98460000E+0, 0.96330000E+0, + 0.40902650E+3, 0.179E+3, 0.150E+3, 0.98460000E+0, 0.95140000E+0, 0.38517040E+3, 0.179E+3, + 0.151E+3, 0.98460000E+0, 0.97490000E+0, 0.36599200E+3, 0.179E+3, 0.152E+3, 0.98460000E+0, + 0.98110000E+0, 0.33623370E+3, 0.179E+3, 0.153E+3, 0.98460000E+0, 0.99680000E+0, 0.44489470E+3, + 0.179E+3, 0.155E+3, 0.98460000E+0, 0.99090000E+0, 0.92564640E+3, 0.179E+3, 0.156E+3, + 0.98460000E+0, 0.97970000E+0, 0.69919040E+3, 0.179E+3, 0.157E+3, 0.98460000E+0, 0.19373000E+1, + 0.44999540E+3, 0.179E+3, 0.159E+3, 0.98460000E+0, 0.29425000E+1, 0.44074490E+3, 0.179E+3, + 0.160E+3, 0.98460000E+0, 0.29455000E+1, 0.42699740E+3, 0.179E+3, 0.161E+3, 0.98460000E+0, + 0.29413000E+1, 0.42862430E+3, 0.179E+3, 0.162E+3, 0.98460000E+0, 0.29300000E+1, 0.41203450E+3, + 0.179E+3, 0.163E+3, 0.98460000E+0, 0.18286000E+1, 0.43096490E+3, 0.179E+3, 0.164E+3, + 0.98460000E+0, 0.28732000E+1, 0.40531130E+3, 0.179E+3, 0.165E+3, 0.98460000E+0, 0.29086000E+1, + 0.41167450E+3, 0.179E+3, 0.166E+3, 0.98460000E+0, 0.28965000E+1, 0.38504690E+3, 0.179E+3, + 0.167E+3, 0.98460000E+0, 0.29242000E+1, 0.37421380E+3, 0.179E+3, 0.168E+3, 0.98460000E+0, + 0.29282000E+1, 0.37166190E+3, 0.179E+3, 0.169E+3, 0.98460000E+0, 0.29246000E+1, 0.38968240E+3, + 0.179E+3, 0.170E+3, 0.98460000E+0, 0.28482000E+1, 0.35937430E+3, 0.179E+3, 0.171E+3, + 0.98460000E+0, 0.29219000E+1, 0.48090340E+3, 0.179E+3, 0.172E+3, 0.98460000E+0, 0.19254000E+1, + 0.44847840E+3, 0.179E+3, 0.173E+3, 0.98460000E+0, 0.19459000E+1, 0.41133730E+3, 0.179E+3, + 0.174E+3, 0.98460000E+0, 0.19292000E+1, 0.41467050E+3, 0.179E+3, 0.175E+3, 0.98460000E+0, + 0.18104000E+1, 0.36709540E+3, 0.179E+3, 0.176E+3, 0.98460000E+0, 0.18858000E+1, 0.34630750E+3, + 0.179E+3, 0.177E+3, 0.98460000E+0, 0.18648000E+1, 0.33139460E+3, 0.179E+3, 0.178E+3, + 0.98460000E+0, 0.19188000E+1, 0.31715610E+3, 0.179E+3, 0.179E+3, 0.98460000E+0, 0.98460000E+0, + 0.29920300E+2, 0.180E+3, 0.100E+1, 0.19896000E+1, 0.91180000E+0, 0.20585200E+2, 0.180E+3, + 0.200E+1, 0.19896000E+1, 0.00000000E+0, 0.41310610E+3, 0.180E+3, 0.300E+1, 0.19896000E+1, + 0.00000000E+0, 0.25030210E+3, 0.180E+3, 0.400E+1, 0.19896000E+1, 0.00000000E+0, 0.17402940E+3, + 0.180E+3, 0.500E+1, 0.19896000E+1, 0.00000000E+0, 0.12076050E+3, 0.180E+3, 0.600E+1, + 0.19896000E+1, 0.00000000E+0, 0.86338200E+2, 0.180E+3, 0.700E+1, 0.19896000E+1, 0.00000000E+0, + 0.66493700E+2, 0.180E+3, 0.800E+1, 0.19896000E+1, 0.00000000E+0, 0.51170200E+2, 0.180E+3, + 0.900E+1, 0.19896000E+1, 0.00000000E+0, 0.39897400E+2, 0.180E+3, 0.100E+2, 0.19896000E+1, + 0.00000000E+0, 0.49600030E+3, 0.180E+3, 0.110E+2, 0.19896000E+1, 0.00000000E+0, 0.39561740E+3, + 0.180E+3, 0.120E+2, 0.19896000E+1, 0.00000000E+0, 0.37029810E+3, 0.180E+3, 0.130E+2, + 0.19896000E+1, 0.00000000E+0, 0.29804830E+3, 0.180E+3, 0.140E+2, 0.19896000E+1, 0.00000000E+0, + 0.23698310E+3, 0.180E+3, 0.150E+2, 0.19896000E+1, 0.00000000E+0, 0.19943500E+3, 0.180E+3, + 0.160E+2, 0.19896000E+1, 0.00000000E+0, 0.16520990E+3, 0.180E+3, 0.170E+2, 0.19896000E+1, + 0.00000000E+0, 0.13693730E+3, 0.180E+3, 0.180E+2, 0.19896000E+1, 0.00000000E+0, 0.81050400E+3, + 0.180E+3, 0.190E+2, 0.19896000E+1, 0.00000000E+0, 0.68633430E+3, 0.180E+3, 0.200E+2, + 0.19896000E+1, 0.00000000E+0, 0.57063520E+3, 0.180E+3, 0.210E+2, 0.19896000E+1, 0.00000000E+0, + 0.55496780E+3, 0.180E+3, 0.220E+2, 0.19896000E+1, 0.00000000E+0, 0.51028000E+3, 0.180E+3, + 0.230E+2, 0.19896000E+1, 0.00000000E+0, 0.40344500E+3, 0.180E+3, 0.240E+2, 0.19896000E+1, + 0.00000000E+0, 0.44199080E+3, 0.180E+3, 0.250E+2, 0.19896000E+1, 0.00000000E+0, 0.34847560E+3, + 0.180E+3, 0.260E+2, 0.19896000E+1, 0.00000000E+0, 0.37126550E+3, 0.180E+3, 0.270E+2, + 0.19896000E+1, 0.00000000E+0, 0.38080390E+3, 0.180E+3, 0.280E+2, 0.19896000E+1, 0.00000000E+0, + 0.29324220E+3, 0.180E+3, 0.290E+2, 0.19896000E+1, 0.00000000E+0, 0.30381440E+3, 0.180E+3, + 0.300E+2, 0.19896000E+1, 0.00000000E+0, 0.35775570E+3, 0.180E+3, 0.310E+2, 0.19896000E+1, + 0.00000000E+0, 0.32047320E+3, 0.180E+3, 0.320E+2, 0.19896000E+1, 0.00000000E+0, 0.27762260E+3, + 0.180E+3, 0.330E+2, 0.19896000E+1, 0.00000000E+0, 0.25175200E+3, 0.180E+3, 0.340E+2, + 0.19896000E+1, 0.00000000E+0, 0.22282360E+3, 0.180E+3, 0.350E+2, 0.19896000E+1, 0.00000000E+0, + 0.19592110E+3, 0.180E+3, 0.360E+2, 0.19896000E+1, 0.00000000E+0, 0.91174980E+3, 0.180E+3, + 0.370E+2, 0.19896000E+1, 0.00000000E+0, 0.81778560E+3, 0.180E+3, 0.380E+2, 0.19896000E+1, + 0.00000000E+0, 0.72486420E+3, 0.180E+3, 0.390E+2, 0.19896000E+1, 0.00000000E+0, 0.65664200E+3, + 0.180E+3, 0.400E+2, 0.19896000E+1, 0.00000000E+0, 0.60218630E+3, 0.180E+3, 0.410E+2, + 0.19896000E+1, 0.00000000E+0, 0.47017490E+3, 0.180E+3, 0.420E+2, 0.19896000E+1, 0.00000000E+0, + 0.52236590E+3, 0.180E+3, 0.430E+2, 0.19896000E+1, 0.00000000E+0, 0.40291110E+3, 0.180E+3, + 0.440E+2, 0.19896000E+1, 0.00000000E+0, 0.43946430E+3, 0.180E+3, 0.450E+2, 0.19896000E+1, + 0.00000000E+0, 0.40902800E+3, 0.180E+3, 0.460E+2, 0.19896000E+1, 0.00000000E+0, 0.34173120E+3, + 0.180E+3, 0.470E+2, 0.19896000E+1, 0.00000000E+0, 0.36219820E+3, 0.180E+3, 0.480E+2, + 0.19896000E+1, 0.00000000E+0, 0.44915100E+3, 0.180E+3, 0.490E+2, 0.19896000E+1, 0.00000000E+0, + 0.42020430E+3, 0.180E+3, 0.500E+2, 0.19896000E+1, 0.00000000E+0, 0.37928220E+3, 0.180E+3, + 0.510E+2, 0.19896000E+1, 0.00000000E+0, 0.35482940E+3, 0.180E+3, 0.520E+2, 0.19896000E+1, + 0.00000000E+0, 0.32385100E+3, 0.180E+3, 0.530E+2, 0.19896000E+1, 0.00000000E+0, 0.29389350E+3, + 0.180E+3, 0.540E+2, 0.19896000E+1, 0.00000000E+0, 0.11120309E+4, 0.180E+3, 0.550E+2, + 0.19896000E+1, 0.00000000E+0, 0.10396919E+4, 0.180E+3, 0.560E+2, 0.19896000E+1, 0.00000000E+0, + 0.92389520E+3, 0.180E+3, 0.570E+2, 0.19896000E+1, 0.00000000E+0, 0.44756220E+3, 0.180E+3, + 0.580E+2, 0.19896000E+1, 0.27991000E+1, 0.92541710E+3, 0.180E+3, 0.590E+2, 0.19896000E+1, + 0.00000000E+0, 0.89016940E+3, 0.180E+3, 0.600E+2, 0.19896000E+1, 0.00000000E+0, 0.86825330E+3, + 0.180E+3, 0.610E+2, 0.19896000E+1, 0.00000000E+0, 0.84803530E+3, 0.180E+3, 0.620E+2, + 0.19896000E+1, 0.00000000E+0, 0.83011710E+3, 0.180E+3, 0.630E+2, 0.19896000E+1, 0.00000000E+0, + 0.66249390E+3, 0.180E+3, 0.640E+2, 0.19896000E+1, 0.00000000E+0, 0.73314800E+3, 0.180E+3, + 0.650E+2, 0.19896000E+1, 0.00000000E+0, 0.70872400E+3, 0.180E+3, 0.660E+2, 0.19896000E+1, + 0.00000000E+0, 0.75071540E+3, 0.180E+3, 0.670E+2, 0.19896000E+1, 0.00000000E+0, 0.73493810E+3, + 0.180E+3, 0.680E+2, 0.19896000E+1, 0.00000000E+0, 0.72083100E+3, 0.180E+3, 0.690E+2, + 0.19896000E+1, 0.00000000E+0, 0.71192400E+3, 0.180E+3, 0.700E+2, 0.19896000E+1, 0.00000000E+0, + 0.60586800E+3, 0.180E+3, 0.710E+2, 0.19896000E+1, 0.00000000E+0, 0.60248380E+3, 0.180E+3, + 0.720E+2, 0.19896000E+1, 0.00000000E+0, 0.55437230E+3, 0.180E+3, 0.730E+2, 0.19896000E+1, + 0.00000000E+0, 0.47211020E+3, 0.180E+3, 0.740E+2, 0.19896000E+1, 0.00000000E+0, 0.48147760E+3, + 0.180E+3, 0.750E+2, 0.19896000E+1, 0.00000000E+0, 0.43962380E+3, 0.180E+3, 0.760E+2, + 0.19896000E+1, 0.00000000E+0, 0.40514540E+3, 0.180E+3, 0.770E+2, 0.19896000E+1, 0.00000000E+0, + 0.33947380E+3, 0.180E+3, 0.780E+2, 0.19896000E+1, 0.00000000E+0, 0.31826990E+3, 0.180E+3, + 0.790E+2, 0.19896000E+1, 0.00000000E+0, 0.32785490E+3, 0.180E+3, 0.800E+2, 0.19896000E+1, + 0.00000000E+0, 0.46406660E+3, 0.180E+3, 0.810E+2, 0.19896000E+1, 0.00000000E+0, 0.45741320E+3, + 0.180E+3, 0.820E+2, 0.19896000E+1, 0.00000000E+0, 0.42489250E+3, 0.180E+3, 0.830E+2, + 0.19896000E+1, 0.00000000E+0, 0.40796160E+3, 0.180E+3, 0.840E+2, 0.19896000E+1, 0.00000000E+0, + 0.37973280E+3, 0.180E+3, 0.850E+2, 0.19896000E+1, 0.00000000E+0, 0.35093490E+3, 0.180E+3, + 0.860E+2, 0.19896000E+1, 0.00000000E+0, 0.10599693E+4, 0.180E+3, 0.870E+2, 0.19896000E+1, + 0.00000000E+0, 0.10346573E+4, 0.180E+3, 0.880E+2, 0.19896000E+1, 0.00000000E+0, 0.92429380E+3, + 0.180E+3, 0.890E+2, 0.19896000E+1, 0.00000000E+0, 0.84192530E+3, 0.180E+3, 0.900E+2, + 0.19896000E+1, 0.00000000E+0, 0.83161820E+3, 0.180E+3, 0.910E+2, 0.19896000E+1, 0.00000000E+0, + 0.80561970E+3, 0.180E+3, 0.920E+2, 0.19896000E+1, 0.00000000E+0, 0.82308290E+3, 0.180E+3, + 0.930E+2, 0.19896000E+1, 0.00000000E+0, 0.79816520E+3, 0.180E+3, 0.940E+2, 0.19896000E+1, + 0.00000000E+0, 0.47166200E+2, 0.180E+3, 0.101E+3, 0.19896000E+1, 0.00000000E+0, 0.14625750E+3, + 0.180E+3, 0.103E+3, 0.19896000E+1, 0.98650000E+0, 0.18779790E+3, 0.180E+3, 0.104E+3, + 0.19896000E+1, 0.98080000E+0, 0.14752400E+3, 0.180E+3, 0.105E+3, 0.19896000E+1, 0.97060000E+0, + 0.11336050E+3, 0.180E+3, 0.106E+3, 0.19896000E+1, 0.98680000E+0, 0.80647100E+2, 0.180E+3, + 0.107E+3, 0.19896000E+1, 0.99440000E+0, 0.59931300E+2, 0.180E+3, 0.108E+3, 0.19896000E+1, + 0.99250000E+0, 0.42319500E+2, 0.180E+3, 0.109E+3, 0.19896000E+1, 0.99820000E+0, 0.21316680E+3, + 0.180E+3, 0.111E+3, 0.19896000E+1, 0.96840000E+0, 0.32853430E+3, 0.180E+3, 0.112E+3, + 0.19896000E+1, 0.96280000E+0, 0.33698220E+3, 0.180E+3, 0.113E+3, 0.19896000E+1, 0.96480000E+0, + 0.27645860E+3, 0.180E+3, 0.114E+3, 0.19896000E+1, 0.95070000E+0, 0.23025850E+3, 0.180E+3, + 0.115E+3, 0.19896000E+1, 0.99470000E+0, 0.19722520E+3, 0.180E+3, 0.116E+3, 0.19896000E+1, + 0.99480000E+0, 0.16349210E+3, 0.180E+3, 0.117E+3, 0.19896000E+1, 0.99720000E+0, 0.29887190E+3, + 0.180E+3, 0.119E+3, 0.19896000E+1, 0.97670000E+0, 0.55142200E+3, 0.180E+3, 0.120E+3, + 0.19896000E+1, 0.98310000E+0, 0.30295130E+3, 0.180E+3, 0.121E+3, 0.19896000E+1, 0.18627000E+1, + 0.29286460E+3, 0.180E+3, 0.122E+3, 0.19896000E+1, 0.18299000E+1, 0.28701690E+3, 0.180E+3, + 0.123E+3, 0.19896000E+1, 0.19138000E+1, 0.28389530E+3, 0.180E+3, 0.124E+3, 0.19896000E+1, + 0.18269000E+1, 0.26347450E+3, 0.180E+3, 0.125E+3, 0.19896000E+1, 0.16406000E+1, 0.24469520E+3, + 0.180E+3, 0.126E+3, 0.19896000E+1, 0.16483000E+1, 0.23357610E+3, 0.180E+3, 0.127E+3, + 0.19896000E+1, 0.17149000E+1, 0.22821280E+3, 0.180E+3, 0.128E+3, 0.19896000E+1, 0.17937000E+1, + 0.22401780E+3, 0.180E+3, 0.129E+3, 0.19896000E+1, 0.95760000E+0, 0.21272240E+3, 0.180E+3, + 0.130E+3, 0.19896000E+1, 0.19419000E+1, 0.33741410E+3, 0.180E+3, 0.131E+3, 0.19896000E+1, + 0.96010000E+0, 0.30105020E+3, 0.180E+3, 0.132E+3, 0.19896000E+1, 0.94340000E+0, 0.27320270E+3, + 0.180E+3, 0.133E+3, 0.19896000E+1, 0.98890000E+0, 0.25183060E+3, 0.180E+3, 0.134E+3, + 0.19896000E+1, 0.99010000E+0, 0.22426200E+3, 0.180E+3, 0.135E+3, 0.19896000E+1, 0.99740000E+0, + 0.35823720E+3, 0.180E+3, 0.137E+3, 0.19896000E+1, 0.97380000E+0, 0.67072660E+3, 0.180E+3, + 0.138E+3, 0.19896000E+1, 0.98010000E+0, 0.52511790E+3, 0.180E+3, 0.139E+3, 0.19896000E+1, + 0.19153000E+1, 0.40071700E+3, 0.180E+3, 0.140E+3, 0.19896000E+1, 0.19355000E+1, 0.40464840E+3, + 0.180E+3, 0.141E+3, 0.19896000E+1, 0.19545000E+1, 0.37897070E+3, 0.180E+3, 0.142E+3, + 0.19896000E+1, 0.19420000E+1, 0.42021610E+3, 0.180E+3, 0.143E+3, 0.19896000E+1, 0.16682000E+1, + 0.33359820E+3, 0.180E+3, 0.144E+3, 0.19896000E+1, 0.18584000E+1, 0.31269220E+3, 0.180E+3, + 0.145E+3, 0.19896000E+1, 0.19003000E+1, 0.29116220E+3, 0.180E+3, 0.146E+3, 0.19896000E+1, + 0.18630000E+1, 0.28137530E+3, 0.180E+3, 0.147E+3, 0.19896000E+1, 0.96790000E+0, 0.27990990E+3, + 0.180E+3, 0.148E+3, 0.19896000E+1, 0.19539000E+1, 0.43003950E+3, 0.180E+3, 0.149E+3, + 0.19896000E+1, 0.96330000E+0, 0.39395270E+3, 0.180E+3, 0.150E+3, 0.19896000E+1, 0.95140000E+0, + 0.37239970E+3, 0.180E+3, 0.151E+3, 0.19896000E+1, 0.97490000E+0, 0.35473990E+3, 0.180E+3, + 0.152E+3, 0.19896000E+1, 0.98110000E+0, 0.32681510E+3, 0.180E+3, 0.153E+3, 0.19896000E+1, + 0.99680000E+0, 0.42730670E+3, 0.180E+3, 0.155E+3, 0.19896000E+1, 0.99090000E+0, 0.86655170E+3, + 0.180E+3, 0.156E+3, 0.19896000E+1, 0.97970000E+0, 0.66355950E+3, 0.180E+3, 0.157E+3, + 0.19896000E+1, 0.19373000E+1, 0.43445080E+3, 0.180E+3, 0.159E+3, 0.19896000E+1, 0.29425000E+1, + 0.42554240E+3, 0.180E+3, 0.160E+3, 0.19896000E+1, 0.29455000E+1, 0.41237370E+3, 0.180E+3, + 0.161E+3, 0.19896000E+1, 0.29413000E+1, 0.41361800E+3, 0.180E+3, 0.162E+3, 0.19896000E+1, + 0.29300000E+1, 0.39655650E+3, 0.180E+3, 0.163E+3, 0.19896000E+1, 0.18286000E+1, 0.41578790E+3, + 0.180E+3, 0.164E+3, 0.19896000E+1, 0.28732000E+1, 0.39129420E+3, 0.180E+3, 0.165E+3, + 0.19896000E+1, 0.29086000E+1, 0.39685720E+3, 0.180E+3, 0.166E+3, 0.19896000E+1, 0.28965000E+1, + 0.37198460E+3, 0.180E+3, 0.167E+3, 0.19896000E+1, 0.29242000E+1, 0.36161110E+3, 0.180E+3, + 0.168E+3, 0.19896000E+1, 0.29282000E+1, 0.35907550E+3, 0.180E+3, 0.169E+3, 0.19896000E+1, + 0.29246000E+1, 0.37609030E+3, 0.180E+3, 0.170E+3, 0.19896000E+1, 0.28482000E+1, 0.34734250E+3, + 0.180E+3, 0.171E+3, 0.19896000E+1, 0.29219000E+1, 0.46039360E+3, 0.180E+3, 0.172E+3, + 0.19896000E+1, 0.19254000E+1, 0.43075880E+3, 0.180E+3, 0.173E+3, 0.19896000E+1, 0.19459000E+1, + 0.39639370E+3, 0.180E+3, 0.174E+3, 0.19896000E+1, 0.19292000E+1, 0.39843040E+3, 0.180E+3, + 0.175E+3, 0.19896000E+1, 0.18104000E+1, 0.35538470E+3, 0.180E+3, 0.176E+3, 0.19896000E+1, + 0.18858000E+1, 0.33559480E+3, 0.180E+3, 0.177E+3, 0.19896000E+1, 0.18648000E+1, 0.32133060E+3, + 0.180E+3, 0.178E+3, 0.19896000E+1, 0.19188000E+1, 0.30747100E+3, 0.180E+3, 0.179E+3, + 0.19896000E+1, 0.98460000E+0, 0.29886160E+3, 0.180E+3, 0.180E+3, 0.19896000E+1, 0.19896000E+1, + 0.45657800E+2, 0.181E+3, 0.100E+1, 0.92670000E+0, 0.91180000E+0, 0.29528900E+2, 0.181E+3, + 0.200E+1, 0.92670000E+0, 0.00000000E+0, 0.81893710E+3, 0.181E+3, 0.300E+1, 0.92670000E+0, + 0.00000000E+0, 0.44031470E+3, 0.181E+3, 0.400E+1, 0.92670000E+0, 0.00000000E+0, 0.28625250E+3, + 0.181E+3, 0.500E+1, 0.92670000E+0, 0.00000000E+0, 0.18889680E+3, 0.181E+3, 0.600E+1, + 0.92670000E+0, 0.00000000E+0, 0.13007910E+3, 0.181E+3, 0.700E+1, 0.92670000E+0, 0.00000000E+0, + 0.97551000E+2, 0.181E+3, 0.800E+1, 0.92670000E+0, 0.00000000E+0, 0.73378400E+2, 0.181E+3, + 0.900E+1, 0.92670000E+0, 0.00000000E+0, 0.56174600E+2, 0.181E+3, 0.100E+2, 0.92670000E+0, + 0.00000000E+0, 0.97532750E+3, 0.181E+3, 0.110E+2, 0.92670000E+0, 0.00000000E+0, 0.71024040E+3, + 0.181E+3, 0.120E+2, 0.92670000E+0, 0.00000000E+0, 0.64228990E+3, 0.181E+3, 0.130E+2, + 0.92670000E+0, 0.00000000E+0, 0.49356290E+3, 0.181E+3, 0.140E+2, 0.92670000E+0, 0.00000000E+0, + 0.37740890E+3, 0.181E+3, 0.150E+2, 0.92670000E+0, 0.00000000E+0, 0.30961610E+3, 0.181E+3, + 0.160E+2, 0.92670000E+0, 0.00000000E+0, 0.25028720E+3, 0.181E+3, 0.170E+2, 0.92670000E+0, + 0.00000000E+0, 0.20307020E+3, 0.181E+3, 0.180E+2, 0.92670000E+0, 0.00000000E+0, 0.16199398E+4, + 0.181E+3, 0.190E+2, 0.92670000E+0, 0.00000000E+0, 0.12768842E+4, 0.181E+3, 0.200E+2, + 0.92670000E+0, 0.00000000E+0, 0.10446215E+4, 0.181E+3, 0.210E+2, 0.92670000E+0, 0.00000000E+0, + 0.10005590E+4, 0.181E+3, 0.220E+2, 0.92670000E+0, 0.00000000E+0, 0.91170000E+3, 0.181E+3, + 0.230E+2, 0.92670000E+0, 0.00000000E+0, 0.71835580E+3, 0.181E+3, 0.240E+2, 0.92670000E+0, + 0.00000000E+0, 0.77938520E+3, 0.181E+3, 0.250E+2, 0.92670000E+0, 0.00000000E+0, 0.61131150E+3, + 0.181E+3, 0.260E+2, 0.92670000E+0, 0.00000000E+0, 0.64053000E+3, 0.181E+3, 0.270E+2, + 0.92670000E+0, 0.00000000E+0, 0.66311020E+3, 0.181E+3, 0.280E+2, 0.92670000E+0, 0.00000000E+0, + 0.50888790E+3, 0.181E+3, 0.290E+2, 0.92670000E+0, 0.00000000E+0, 0.51381200E+3, 0.181E+3, + 0.300E+2, 0.92670000E+0, 0.00000000E+0, 0.61125030E+3, 0.181E+3, 0.310E+2, 0.92670000E+0, + 0.00000000E+0, 0.52855090E+3, 0.181E+3, 0.320E+2, 0.92670000E+0, 0.00000000E+0, 0.44341250E+3, + 0.181E+3, 0.330E+2, 0.92670000E+0, 0.00000000E+0, 0.39408000E+3, 0.181E+3, 0.340E+2, + 0.92670000E+0, 0.00000000E+0, 0.34165520E+3, 0.181E+3, 0.350E+2, 0.92670000E+0, 0.00000000E+0, + 0.29473510E+3, 0.181E+3, 0.360E+2, 0.92670000E+0, 0.00000000E+0, 0.18096860E+4, 0.181E+3, + 0.370E+2, 0.92670000E+0, 0.00000000E+0, 0.15245549E+4, 0.181E+3, 0.380E+2, 0.92670000E+0, + 0.00000000E+0, 0.13131378E+4, 0.181E+3, 0.390E+2, 0.92670000E+0, 0.00000000E+0, 0.11682143E+4, + 0.181E+3, 0.400E+2, 0.92670000E+0, 0.00000000E+0, 0.10584151E+4, 0.181E+3, 0.410E+2, + 0.92670000E+0, 0.00000000E+0, 0.80855780E+3, 0.181E+3, 0.420E+2, 0.92670000E+0, 0.00000000E+0, + 0.90569280E+3, 0.181E+3, 0.430E+2, 0.92670000E+0, 0.00000000E+0, 0.68207110E+3, 0.181E+3, + 0.440E+2, 0.92670000E+0, 0.00000000E+0, 0.74493760E+3, 0.181E+3, 0.450E+2, 0.92670000E+0, + 0.00000000E+0, 0.68807030E+3, 0.181E+3, 0.460E+2, 0.92670000E+0, 0.00000000E+0, 0.57599280E+3, + 0.181E+3, 0.470E+2, 0.92670000E+0, 0.00000000E+0, 0.60330050E+3, 0.181E+3, 0.480E+2, + 0.92670000E+0, 0.00000000E+0, 0.76665730E+3, 0.181E+3, 0.490E+2, 0.92670000E+0, 0.00000000E+0, + 0.69724530E+3, 0.181E+3, 0.500E+2, 0.92670000E+0, 0.00000000E+0, 0.61199840E+3, 0.181E+3, + 0.510E+2, 0.92670000E+0, 0.00000000E+0, 0.56288000E+3, 0.181E+3, 0.520E+2, 0.92670000E+0, + 0.00000000E+0, 0.50438410E+3, 0.181E+3, 0.530E+2, 0.92670000E+0, 0.00000000E+0, 0.44980100E+3, + 0.181E+3, 0.540E+2, 0.92670000E+0, 0.00000000E+0, 0.22046359E+4, 0.181E+3, 0.550E+2, + 0.92670000E+0, 0.00000000E+0, 0.19557490E+4, 0.181E+3, 0.560E+2, 0.92670000E+0, 0.00000000E+0, + 0.16891285E+4, 0.181E+3, 0.570E+2, 0.92670000E+0, 0.00000000E+0, 0.72531910E+3, 0.181E+3, + 0.580E+2, 0.92670000E+0, 0.27991000E+1, 0.17235094E+4, 0.181E+3, 0.590E+2, 0.92670000E+0, + 0.00000000E+0, 0.16499797E+4, 0.181E+3, 0.600E+2, 0.92670000E+0, 0.00000000E+0, 0.16072448E+4, + 0.181E+3, 0.610E+2, 0.92670000E+0, 0.00000000E+0, 0.15680817E+4, 0.181E+3, 0.620E+2, + 0.92670000E+0, 0.00000000E+0, 0.15333057E+4, 0.181E+3, 0.630E+2, 0.92670000E+0, 0.00000000E+0, + 0.11844744E+4, 0.181E+3, 0.640E+2, 0.92670000E+0, 0.00000000E+0, 0.13721977E+4, 0.181E+3, + 0.650E+2, 0.92670000E+0, 0.00000000E+0, 0.13193709E+4, 0.181E+3, 0.660E+2, 0.92670000E+0, + 0.00000000E+0, 0.13768441E+4, 0.181E+3, 0.670E+2, 0.92670000E+0, 0.00000000E+0, 0.13469267E+4, + 0.181E+3, 0.680E+2, 0.92670000E+0, 0.00000000E+0, 0.13196608E+4, 0.181E+3, 0.690E+2, + 0.92670000E+0, 0.00000000E+0, 0.13051597E+4, 0.181E+3, 0.700E+2, 0.92670000E+0, 0.00000000E+0, + 0.10865229E+4, 0.181E+3, 0.710E+2, 0.92670000E+0, 0.00000000E+0, 0.10501050E+4, 0.181E+3, + 0.720E+2, 0.92670000E+0, 0.00000000E+0, 0.94898330E+3, 0.181E+3, 0.730E+2, 0.92670000E+0, + 0.00000000E+0, 0.79601210E+3, 0.181E+3, 0.740E+2, 0.92670000E+0, 0.00000000E+0, 0.80654170E+3, + 0.181E+3, 0.750E+2, 0.92670000E+0, 0.00000000E+0, 0.72504930E+3, 0.181E+3, 0.760E+2, + 0.92670000E+0, 0.00000000E+0, 0.65978220E+3, 0.181E+3, 0.770E+2, 0.92670000E+0, 0.00000000E+0, + 0.54489940E+3, 0.181E+3, 0.780E+2, 0.92670000E+0, 0.00000000E+0, 0.50792100E+3, 0.181E+3, + 0.790E+2, 0.92670000E+0, 0.00000000E+0, 0.52062730E+3, 0.181E+3, 0.800E+2, 0.92670000E+0, + 0.00000000E+0, 0.78494960E+3, 0.181E+3, 0.810E+2, 0.92670000E+0, 0.00000000E+0, 0.75725660E+3, + 0.181E+3, 0.820E+2, 0.92670000E+0, 0.00000000E+0, 0.68621680E+3, 0.181E+3, 0.830E+2, + 0.92670000E+0, 0.00000000E+0, 0.64945010E+3, 0.181E+3, 0.840E+2, 0.92670000E+0, 0.00000000E+0, + 0.59409560E+3, 0.181E+3, 0.850E+2, 0.92670000E+0, 0.00000000E+0, 0.54036210E+3, 0.181E+3, + 0.860E+2, 0.92670000E+0, 0.00000000E+0, 0.20530994E+4, 0.181E+3, 0.870E+2, 0.92670000E+0, + 0.00000000E+0, 0.19172106E+4, 0.181E+3, 0.880E+2, 0.92670000E+0, 0.00000000E+0, 0.16681370E+4, + 0.181E+3, 0.890E+2, 0.92670000E+0, 0.00000000E+0, 0.14735523E+4, 0.181E+3, 0.900E+2, + 0.92670000E+0, 0.00000000E+0, 0.14764021E+4, 0.181E+3, 0.910E+2, 0.92670000E+0, 0.00000000E+0, + 0.14289400E+4, 0.181E+3, 0.920E+2, 0.92670000E+0, 0.00000000E+0, 0.14871204E+4, 0.181E+3, + 0.930E+2, 0.92670000E+0, 0.00000000E+0, 0.14371768E+4, 0.181E+3, 0.940E+2, 0.92670000E+0, + 0.00000000E+0, 0.74826500E+2, 0.181E+3, 0.101E+3, 0.92670000E+0, 0.00000000E+0, 0.25479910E+3, + 0.181E+3, 0.103E+3, 0.92670000E+0, 0.98650000E+0, 0.32309330E+3, 0.181E+3, 0.104E+3, + 0.92670000E+0, 0.98080000E+0, 0.23925450E+3, 0.181E+3, 0.105E+3, 0.92670000E+0, 0.97060000E+0, + 0.17739330E+3, 0.181E+3, 0.106E+3, 0.92670000E+0, 0.98680000E+0, 0.12133560E+3, 0.181E+3, + 0.107E+3, 0.92670000E+0, 0.99440000E+0, 0.87298300E+2, 0.181E+3, 0.108E+3, 0.92670000E+0, + 0.99250000E+0, 0.59255000E+2, 0.181E+3, 0.109E+3, 0.92670000E+0, 0.99820000E+0, 0.37528460E+3, + 0.181E+3, 0.111E+3, 0.92670000E+0, 0.96840000E+0, 0.58220680E+3, 0.181E+3, 0.112E+3, + 0.92670000E+0, 0.96280000E+0, 0.57956000E+3, 0.181E+3, 0.113E+3, 0.92670000E+0, 0.96480000E+0, + 0.45468720E+3, 0.181E+3, 0.114E+3, 0.92670000E+0, 0.95070000E+0, 0.36616070E+3, 0.181E+3, + 0.115E+3, 0.92670000E+0, 0.99470000E+0, 0.30633030E+3, 0.181E+3, 0.116E+3, 0.92670000E+0, + 0.99480000E+0, 0.24776880E+3, 0.181E+3, 0.117E+3, 0.92670000E+0, 0.99720000E+0, 0.51164600E+3, + 0.181E+3, 0.119E+3, 0.92670000E+0, 0.97670000E+0, 0.10224025E+4, 0.181E+3, 0.120E+3, + 0.92670000E+0, 0.98310000E+0, 0.50090730E+3, 0.181E+3, 0.121E+3, 0.92670000E+0, 0.18627000E+1, + 0.48349150E+3, 0.181E+3, 0.122E+3, 0.92670000E+0, 0.18299000E+1, 0.47405210E+3, 0.181E+3, + 0.123E+3, 0.92670000E+0, 0.19138000E+1, 0.47089950E+3, 0.181E+3, 0.124E+3, 0.92670000E+0, + 0.18269000E+1, 0.42804350E+3, 0.181E+3, 0.125E+3, 0.92670000E+0, 0.16406000E+1, 0.39493390E+3, + 0.181E+3, 0.126E+3, 0.92670000E+0, 0.16483000E+1, 0.37686900E+3, 0.181E+3, 0.127E+3, + 0.92670000E+0, 0.17149000E+1, 0.36882120E+3, 0.181E+3, 0.128E+3, 0.92670000E+0, 0.17937000E+1, + 0.36776620E+3, 0.181E+3, 0.129E+3, 0.92670000E+0, 0.95760000E+0, 0.33940980E+3, 0.181E+3, + 0.130E+3, 0.92670000E+0, 0.19419000E+1, 0.57125400E+3, 0.181E+3, 0.131E+3, 0.92670000E+0, + 0.96010000E+0, 0.49237270E+3, 0.181E+3, 0.132E+3, 0.92670000E+0, 0.94340000E+0, 0.43551000E+3, + 0.181E+3, 0.133E+3, 0.92670000E+0, 0.98890000E+0, 0.39431080E+3, 0.181E+3, 0.134E+3, + 0.92670000E+0, 0.99010000E+0, 0.34421330E+3, 0.181E+3, 0.135E+3, 0.92670000E+0, 0.99740000E+0, + 0.60811700E+3, 0.181E+3, 0.137E+3, 0.92670000E+0, 0.97380000E+0, 0.12478398E+4, 0.181E+3, + 0.138E+3, 0.92670000E+0, 0.98010000E+0, 0.92281660E+3, 0.181E+3, 0.139E+3, 0.92670000E+0, + 0.19153000E+1, 0.66415540E+3, 0.181E+3, 0.140E+3, 0.92670000E+0, 0.19355000E+1, 0.67092560E+3, + 0.181E+3, 0.141E+3, 0.92670000E+0, 0.19545000E+1, 0.62334490E+3, 0.181E+3, 0.142E+3, + 0.92670000E+0, 0.19420000E+1, 0.71055610E+3, 0.181E+3, 0.143E+3, 0.92670000E+0, 0.16682000E+1, + 0.53741150E+3, 0.181E+3, 0.144E+3, 0.92670000E+0, 0.18584000E+1, 0.50247720E+3, 0.181E+3, + 0.145E+3, 0.92670000E+0, 0.19003000E+1, 0.46583490E+3, 0.181E+3, 0.146E+3, 0.92670000E+0, + 0.18630000E+1, 0.45142980E+3, 0.181E+3, 0.147E+3, 0.92670000E+0, 0.96790000E+0, 0.44250690E+3, + 0.181E+3, 0.148E+3, 0.92670000E+0, 0.19539000E+1, 0.72660300E+3, 0.181E+3, 0.149E+3, + 0.92670000E+0, 0.96330000E+0, 0.64640140E+3, 0.181E+3, 0.150E+3, 0.92670000E+0, 0.95140000E+0, + 0.59861930E+3, 0.181E+3, 0.151E+3, 0.92670000E+0, 0.97490000E+0, 0.56215510E+3, 0.181E+3, + 0.152E+3, 0.92670000E+0, 0.98110000E+0, 0.50917420E+3, 0.181E+3, 0.153E+3, 0.92670000E+0, + 0.99680000E+0, 0.70976410E+3, 0.181E+3, 0.155E+3, 0.92670000E+0, 0.99090000E+0, 0.16307553E+4, + 0.181E+3, 0.156E+3, 0.92670000E+0, 0.97970000E+0, 0.11718156E+4, 0.181E+3, 0.157E+3, + 0.92670000E+0, 0.19373000E+1, 0.70286450E+3, 0.181E+3, 0.159E+3, 0.92670000E+0, 0.29425000E+1, + 0.68822190E+3, 0.181E+3, 0.160E+3, 0.92670000E+0, 0.29455000E+1, 0.66593910E+3, 0.181E+3, + 0.161E+3, 0.92670000E+0, 0.29413000E+1, 0.67082470E+3, 0.181E+3, 0.162E+3, 0.92670000E+0, + 0.29300000E+1, 0.65173940E+3, 0.181E+3, 0.163E+3, 0.92670000E+0, 0.18286000E+1, 0.67537850E+3, + 0.181E+3, 0.164E+3, 0.92670000E+0, 0.28732000E+1, 0.63315820E+3, 0.181E+3, 0.165E+3, + 0.92670000E+0, 0.29086000E+1, 0.64713510E+3, 0.181E+3, 0.166E+3, 0.92670000E+0, 0.28965000E+1, + 0.59975110E+3, 0.181E+3, 0.167E+3, 0.92670000E+0, 0.29242000E+1, 0.58222680E+3, 0.181E+3, + 0.168E+3, 0.92670000E+0, 0.29282000E+1, 0.57881040E+3, 0.181E+3, 0.169E+3, 0.92670000E+0, + 0.29246000E+1, 0.61017640E+3, 0.181E+3, 0.170E+3, 0.92670000E+0, 0.28482000E+1, 0.55877490E+3, + 0.181E+3, 0.171E+3, 0.92670000E+0, 0.29219000E+1, 0.77870390E+3, 0.181E+3, 0.172E+3, + 0.92670000E+0, 0.19254000E+1, 0.71593350E+3, 0.181E+3, 0.173E+3, 0.92670000E+0, 0.19459000E+1, + 0.64697310E+3, 0.181E+3, 0.174E+3, 0.92670000E+0, 0.19292000E+1, 0.66039260E+3, 0.181E+3, + 0.175E+3, 0.92670000E+0, 0.18104000E+1, 0.56540350E+3, 0.181E+3, 0.176E+3, 0.92670000E+0, + 0.18858000E+1, 0.53044050E+3, 0.181E+3, 0.177E+3, 0.92670000E+0, 0.18648000E+1, 0.50586340E+3, + 0.181E+3, 0.178E+3, 0.92670000E+0, 0.19188000E+1, 0.48403950E+3, 0.181E+3, 0.179E+3, + 0.92670000E+0, 0.98460000E+0, 0.46395530E+3, 0.181E+3, 0.180E+3, 0.92670000E+0, 0.19896000E+1, + 0.77861880E+3, 0.181E+3, 0.181E+3, 0.92670000E+0, 0.92670000E+0, 0.42434000E+2, 0.182E+3, + 0.100E+1, 0.93830000E+0, 0.91180000E+0, 0.27907300E+2, 0.182E+3, 0.200E+1, 0.93830000E+0, + 0.00000000E+0, 0.68807560E+3, 0.182E+3, 0.300E+1, 0.93830000E+0, 0.00000000E+0, 0.38943570E+3, + 0.182E+3, 0.400E+1, 0.93830000E+0, 0.00000000E+0, 0.25945980E+3, 0.182E+3, 0.500E+1, + 0.93830000E+0, 0.00000000E+0, 0.17407890E+3, 0.182E+3, 0.600E+1, 0.93830000E+0, 0.00000000E+0, + 0.12124080E+3, 0.182E+3, 0.700E+1, 0.93830000E+0, 0.00000000E+0, 0.91603500E+2, 0.182E+3, + 0.800E+1, 0.93830000E+0, 0.00000000E+0, 0.69320700E+2, 0.182E+3, 0.900E+1, 0.93830000E+0, + 0.00000000E+0, 0.53310500E+2, 0.182E+3, 0.100E+2, 0.93830000E+0, 0.00000000E+0, 0.82197960E+3, + 0.182E+3, 0.110E+2, 0.93830000E+0, 0.00000000E+0, 0.62284710E+3, 0.182E+3, 0.120E+2, + 0.93830000E+0, 0.00000000E+0, 0.57078670E+3, 0.182E+3, 0.130E+2, 0.93830000E+0, 0.00000000E+0, + 0.44634760E+3, 0.182E+3, 0.140E+2, 0.93830000E+0, 0.00000000E+0, 0.34597620E+3, 0.182E+3, + 0.150E+2, 0.93830000E+0, 0.00000000E+0, 0.28614180E+3, 0.182E+3, 0.160E+2, 0.93830000E+0, + 0.00000000E+0, 0.23303850E+3, 0.182E+3, 0.170E+2, 0.93830000E+0, 0.00000000E+0, 0.19023650E+3, + 0.182E+3, 0.180E+2, 0.93830000E+0, 0.00000000E+0, 0.13514635E+4, 0.182E+3, 0.190E+2, + 0.93830000E+0, 0.00000000E+0, 0.11015257E+4, 0.182E+3, 0.200E+2, 0.93830000E+0, 0.00000000E+0, + 0.90751920E+3, 0.182E+3, 0.210E+2, 0.93830000E+0, 0.00000000E+0, 0.87424690E+3, 0.182E+3, + 0.220E+2, 0.93830000E+0, 0.00000000E+0, 0.79942710E+3, 0.182E+3, 0.230E+2, 0.93830000E+0, + 0.00000000E+0, 0.62978200E+3, 0.182E+3, 0.240E+2, 0.93830000E+0, 0.00000000E+0, 0.68687860E+3, + 0.182E+3, 0.250E+2, 0.93830000E+0, 0.00000000E+0, 0.53901900E+3, 0.182E+3, 0.260E+2, + 0.93830000E+0, 0.00000000E+0, 0.56943390E+3, 0.182E+3, 0.270E+2, 0.93830000E+0, 0.00000000E+0, + 0.58746310E+3, 0.182E+3, 0.280E+2, 0.93830000E+0, 0.00000000E+0, 0.45054860E+3, 0.182E+3, + 0.290E+2, 0.93830000E+0, 0.00000000E+0, 0.46028610E+3, 0.182E+3, 0.300E+2, 0.93830000E+0, + 0.00000000E+0, 0.54568040E+3, 0.182E+3, 0.310E+2, 0.93830000E+0, 0.00000000E+0, 0.47836640E+3, + 0.182E+3, 0.320E+2, 0.93830000E+0, 0.00000000E+0, 0.40593740E+3, 0.182E+3, 0.330E+2, + 0.93830000E+0, 0.00000000E+0, 0.36317430E+3, 0.182E+3, 0.340E+2, 0.93830000E+0, 0.00000000E+0, + 0.31692710E+3, 0.182E+3, 0.350E+2, 0.93830000E+0, 0.00000000E+0, 0.27497470E+3, 0.182E+3, + 0.360E+2, 0.93830000E+0, 0.00000000E+0, 0.15131000E+4, 0.182E+3, 0.370E+2, 0.93830000E+0, + 0.00000000E+0, 0.13130553E+4, 0.182E+3, 0.380E+2, 0.93830000E+0, 0.00000000E+0, 0.11445456E+4, + 0.182E+3, 0.390E+2, 0.93830000E+0, 0.00000000E+0, 0.10255674E+4, 0.182E+3, 0.400E+2, + 0.93830000E+0, 0.00000000E+0, 0.93337410E+3, 0.182E+3, 0.410E+2, 0.93830000E+0, 0.00000000E+0, + 0.71832310E+3, 0.182E+3, 0.420E+2, 0.93830000E+0, 0.00000000E+0, 0.80242420E+3, 0.182E+3, + 0.430E+2, 0.93830000E+0, 0.00000000E+0, 0.60924720E+3, 0.182E+3, 0.440E+2, 0.93830000E+0, + 0.00000000E+0, 0.66583460E+3, 0.182E+3, 0.450E+2, 0.93830000E+0, 0.00000000E+0, 0.61675520E+3, + 0.182E+3, 0.460E+2, 0.93830000E+0, 0.00000000E+0, 0.51489300E+3, 0.182E+3, 0.470E+2, + 0.93830000E+0, 0.00000000E+0, 0.54271640E+3, 0.182E+3, 0.480E+2, 0.93830000E+0, 0.00000000E+0, + 0.68352170E+3, 0.182E+3, 0.490E+2, 0.93830000E+0, 0.00000000E+0, 0.62890890E+3, 0.182E+3, + 0.500E+2, 0.93830000E+0, 0.00000000E+0, 0.55784160E+3, 0.182E+3, 0.510E+2, 0.93830000E+0, + 0.00000000E+0, 0.51614750E+3, 0.182E+3, 0.520E+2, 0.93830000E+0, 0.00000000E+0, 0.46537870E+3, + 0.182E+3, 0.530E+2, 0.93830000E+0, 0.00000000E+0, 0.41735550E+3, 0.182E+3, 0.540E+2, + 0.93830000E+0, 0.00000000E+0, 0.18427711E+4, 0.182E+3, 0.550E+2, 0.93830000E+0, 0.00000000E+0, + 0.16767003E+4, 0.182E+3, 0.560E+2, 0.93830000E+0, 0.00000000E+0, 0.14657704E+4, 0.182E+3, + 0.570E+2, 0.93830000E+0, 0.00000000E+0, 0.65962730E+3, 0.182E+3, 0.580E+2, 0.93830000E+0, + 0.27991000E+1, 0.14834234E+4, 0.182E+3, 0.590E+2, 0.93830000E+0, 0.00000000E+0, 0.14232913E+4, + 0.182E+3, 0.600E+2, 0.93830000E+0, 0.00000000E+0, 0.13872742E+4, 0.182E+3, 0.610E+2, + 0.93830000E+0, 0.00000000E+0, 0.13541823E+4, 0.182E+3, 0.620E+2, 0.93830000E+0, 0.00000000E+0, + 0.13248237E+4, 0.182E+3, 0.630E+2, 0.93830000E+0, 0.00000000E+0, 0.10362745E+4, 0.182E+3, + 0.640E+2, 0.93830000E+0, 0.00000000E+0, 0.11761635E+4, 0.182E+3, 0.650E+2, 0.93830000E+0, + 0.00000000E+0, 0.11332571E+4, 0.182E+3, 0.660E+2, 0.93830000E+0, 0.00000000E+0, 0.11934379E+4, + 0.182E+3, 0.670E+2, 0.93830000E+0, 0.00000000E+0, 0.11679468E+4, 0.182E+3, 0.680E+2, + 0.93830000E+0, 0.00000000E+0, 0.11448817E+4, 0.182E+3, 0.690E+2, 0.93830000E+0, 0.00000000E+0, + 0.11317397E+4, 0.182E+3, 0.700E+2, 0.93830000E+0, 0.00000000E+0, 0.95008080E+3, 0.182E+3, + 0.710E+2, 0.93830000E+0, 0.00000000E+0, 0.92948800E+3, 0.182E+3, 0.720E+2, 0.93830000E+0, + 0.00000000E+0, 0.84577140E+3, 0.182E+3, 0.730E+2, 0.93830000E+0, 0.00000000E+0, 0.71270800E+3, + 0.182E+3, 0.740E+2, 0.93830000E+0, 0.00000000E+0, 0.72421000E+3, 0.182E+3, 0.750E+2, + 0.93830000E+0, 0.00000000E+0, 0.65478150E+3, 0.182E+3, 0.760E+2, 0.93830000E+0, 0.00000000E+0, + 0.59854060E+3, 0.182E+3, 0.770E+2, 0.93830000E+0, 0.00000000E+0, 0.49639040E+3, 0.182E+3, + 0.780E+2, 0.93830000E+0, 0.00000000E+0, 0.46349930E+3, 0.182E+3, 0.790E+2, 0.93830000E+0, + 0.00000000E+0, 0.47629930E+3, 0.182E+3, 0.800E+2, 0.93830000E+0, 0.00000000E+0, 0.70116210E+3, + 0.182E+3, 0.810E+2, 0.93830000E+0, 0.00000000E+0, 0.68285450E+3, 0.182E+3, 0.820E+2, + 0.93830000E+0, 0.00000000E+0, 0.62480060E+3, 0.182E+3, 0.830E+2, 0.93830000E+0, 0.00000000E+0, + 0.59446280E+3, 0.182E+3, 0.840E+2, 0.93830000E+0, 0.00000000E+0, 0.54711560E+3, 0.182E+3, + 0.850E+2, 0.93830000E+0, 0.00000000E+0, 0.50027110E+3, 0.182E+3, 0.860E+2, 0.93830000E+0, + 0.00000000E+0, 0.17331333E+4, 0.182E+3, 0.870E+2, 0.93830000E+0, 0.00000000E+0, 0.16537357E+4, + 0.182E+3, 0.880E+2, 0.93830000E+0, 0.00000000E+0, 0.14552479E+4, 0.182E+3, 0.890E+2, + 0.93830000E+0, 0.00000000E+0, 0.13011870E+4, 0.182E+3, 0.900E+2, 0.93830000E+0, 0.00000000E+0, + 0.12953664E+4, 0.182E+3, 0.910E+2, 0.93830000E+0, 0.00000000E+0, 0.12541422E+4, 0.182E+3, + 0.920E+2, 0.93830000E+0, 0.00000000E+0, 0.12955258E+4, 0.182E+3, 0.930E+2, 0.93830000E+0, + 0.00000000E+0, 0.12538462E+4, 0.182E+3, 0.940E+2, 0.93830000E+0, 0.00000000E+0, 0.68700900E+2, + 0.182E+3, 0.101E+3, 0.93830000E+0, 0.00000000E+0, 0.22605860E+3, 0.182E+3, 0.103E+3, + 0.93830000E+0, 0.98650000E+0, 0.28775870E+3, 0.182E+3, 0.104E+3, 0.93830000E+0, 0.98080000E+0, + 0.21782360E+3, 0.182E+3, 0.105E+3, 0.93830000E+0, 0.97060000E+0, 0.16333240E+3, 0.182E+3, + 0.106E+3, 0.93830000E+0, 0.98680000E+0, 0.11306740E+3, 0.182E+3, 0.107E+3, 0.93830000E+0, + 0.99440000E+0, 0.82111500E+2, 0.182E+3, 0.108E+3, 0.93830000E+0, 0.99250000E+0, 0.56344500E+2, + 0.182E+3, 0.109E+3, 0.93830000E+0, 0.99820000E+0, 0.33128460E+3, 0.182E+3, 0.111E+3, + 0.93830000E+0, 0.96840000E+0, 0.51267930E+3, 0.182E+3, 0.112E+3, 0.93830000E+0, 0.96280000E+0, + 0.51659790E+3, 0.182E+3, 0.113E+3, 0.93830000E+0, 0.96480000E+0, 0.41211230E+3, 0.182E+3, + 0.114E+3, 0.93830000E+0, 0.95070000E+0, 0.33577950E+3, 0.182E+3, 0.115E+3, 0.93830000E+0, + 0.99470000E+0, 0.28302980E+3, 0.182E+3, 0.116E+3, 0.93830000E+0, 0.99480000E+0, 0.23064950E+3, + 0.182E+3, 0.117E+3, 0.93830000E+0, 0.99720000E+0, 0.45512070E+3, 0.182E+3, 0.119E+3, + 0.93830000E+0, 0.97670000E+0, 0.88099550E+3, 0.182E+3, 0.120E+3, 0.93830000E+0, 0.98310000E+0, + 0.45242230E+3, 0.182E+3, 0.121E+3, 0.93830000E+0, 0.18627000E+1, 0.43671780E+3, 0.182E+3, + 0.122E+3, 0.93830000E+0, 0.18299000E+1, 0.42807670E+3, 0.182E+3, 0.123E+3, 0.93830000E+0, + 0.19138000E+1, 0.42446770E+3, 0.182E+3, 0.124E+3, 0.93830000E+0, 0.18269000E+1, 0.38917610E+3, + 0.182E+3, 0.125E+3, 0.93830000E+0, 0.16406000E+1, 0.35985440E+3, 0.182E+3, 0.126E+3, + 0.93830000E+0, 0.16483000E+1, 0.34332520E+3, 0.182E+3, 0.127E+3, 0.93830000E+0, 0.17149000E+1, + 0.33576340E+3, 0.182E+3, 0.128E+3, 0.93830000E+0, 0.17937000E+1, 0.33269860E+3, 0.182E+3, + 0.129E+3, 0.93830000E+0, 0.95760000E+0, 0.31058260E+3, 0.182E+3, 0.130E+3, 0.93830000E+0, + 0.19419000E+1, 0.51174530E+3, 0.182E+3, 0.131E+3, 0.93830000E+0, 0.96010000E+0, 0.44693270E+3, + 0.182E+3, 0.132E+3, 0.93830000E+0, 0.94340000E+0, 0.39894250E+3, 0.182E+3, 0.133E+3, + 0.93830000E+0, 0.98890000E+0, 0.36333700E+3, 0.182E+3, 0.134E+3, 0.93830000E+0, 0.99010000E+0, + 0.31918450E+3, 0.182E+3, 0.135E+3, 0.93830000E+0, 0.99740000E+0, 0.54238170E+3, 0.182E+3, + 0.137E+3, 0.93830000E+0, 0.97380000E+0, 0.10728240E+4, 0.182E+3, 0.138E+3, 0.93830000E+0, + 0.98010000E+0, 0.81213110E+3, 0.182E+3, 0.139E+3, 0.93830000E+0, 0.19153000E+1, 0.59868520E+3, + 0.182E+3, 0.140E+3, 0.93830000E+0, 0.19355000E+1, 0.60472750E+3, 0.182E+3, 0.141E+3, + 0.93830000E+0, 0.19545000E+1, 0.56326320E+3, 0.182E+3, 0.142E+3, 0.93830000E+0, 0.19420000E+1, + 0.63469440E+3, 0.182E+3, 0.143E+3, 0.93830000E+0, 0.16682000E+1, 0.48944530E+3, 0.182E+3, + 0.144E+3, 0.93830000E+0, 0.18584000E+1, 0.45783760E+3, 0.182E+3, 0.145E+3, 0.93830000E+0, + 0.19003000E+1, 0.42497290E+3, 0.182E+3, 0.146E+3, 0.93830000E+0, 0.18630000E+1, 0.41137260E+3, + 0.182E+3, 0.147E+3, 0.93830000E+0, 0.96790000E+0, 0.40583020E+3, 0.182E+3, 0.148E+3, + 0.93830000E+0, 0.19539000E+1, 0.65042200E+3, 0.182E+3, 0.149E+3, 0.93830000E+0, 0.96330000E+0, + 0.58543790E+3, 0.182E+3, 0.150E+3, 0.93830000E+0, 0.95140000E+0, 0.54638190E+3, 0.182E+3, + 0.151E+3, 0.93830000E+0, 0.97490000E+0, 0.51567690E+3, 0.182E+3, 0.152E+3, 0.93830000E+0, + 0.98110000E+0, 0.46975780E+3, 0.182E+3, 0.153E+3, 0.93830000E+0, 0.99680000E+0, 0.63871850E+3, + 0.182E+3, 0.155E+3, 0.93830000E+0, 0.99090000E+0, 0.13938082E+4, 0.182E+3, 0.156E+3, + 0.93830000E+0, 0.97970000E+0, 0.10287291E+4, 0.182E+3, 0.157E+3, 0.93830000E+0, 0.19373000E+1, + 0.63957980E+3, 0.182E+3, 0.159E+3, 0.93830000E+0, 0.29425000E+1, 0.62632970E+3, 0.182E+3, + 0.160E+3, 0.93830000E+0, 0.29455000E+1, 0.60635080E+3, 0.182E+3, 0.161E+3, 0.93830000E+0, + 0.29413000E+1, 0.60975710E+3, 0.182E+3, 0.162E+3, 0.93830000E+0, 0.29300000E+1, 0.58924030E+3, + 0.182E+3, 0.163E+3, 0.93830000E+0, 0.18286000E+1, 0.61369780E+3, 0.182E+3, 0.164E+3, + 0.93830000E+0, 0.28732000E+1, 0.57611550E+3, 0.182E+3, 0.165E+3, 0.93830000E+0, 0.29086000E+1, + 0.58697030E+3, 0.182E+3, 0.166E+3, 0.93830000E+0, 0.28965000E+1, 0.54649440E+3, 0.182E+3, + 0.167E+3, 0.93830000E+0, 0.29242000E+1, 0.53080340E+3, 0.182E+3, 0.168E+3, 0.93830000E+0, + 0.29282000E+1, 0.52748330E+3, 0.182E+3, 0.169E+3, 0.93830000E+0, 0.29246000E+1, 0.55493190E+3, + 0.182E+3, 0.170E+3, 0.93830000E+0, 0.28482000E+1, 0.50965210E+3, 0.182E+3, 0.171E+3, + 0.93830000E+0, 0.29219000E+1, 0.69621110E+3, 0.182E+3, 0.172E+3, 0.93830000E+0, 0.19254000E+1, + 0.64434370E+3, 0.182E+3, 0.173E+3, 0.93830000E+0, 0.19459000E+1, 0.58625070E+3, 0.182E+3, + 0.174E+3, 0.93830000E+0, 0.19292000E+1, 0.59480320E+3, 0.182E+3, 0.175E+3, 0.93830000E+0, + 0.18104000E+1, 0.51723940E+3, 0.182E+3, 0.176E+3, 0.93830000E+0, 0.18858000E+1, 0.48623500E+3, + 0.182E+3, 0.177E+3, 0.93830000E+0, 0.18648000E+1, 0.46424430E+3, 0.182E+3, 0.178E+3, + 0.93830000E+0, 0.19188000E+1, 0.44400340E+3, 0.182E+3, 0.179E+3, 0.93830000E+0, 0.98460000E+0, + 0.42798590E+3, 0.182E+3, 0.180E+3, 0.93830000E+0, 0.19896000E+1, 0.69795700E+3, 0.182E+3, + 0.181E+3, 0.93830000E+0, 0.92670000E+0, 0.63299910E+3, 0.182E+3, 0.182E+3, 0.93830000E+0, + 0.93830000E+0, 0.41596400E+2, 0.183E+3, 0.100E+1, 0.98200000E+0, 0.91180000E+0, 0.27609300E+2, + 0.183E+3, 0.200E+1, 0.98200000E+0, 0.00000000E+0, 0.63913910E+3, 0.183E+3, 0.300E+1, + 0.98200000E+0, 0.00000000E+0, 0.37140510E+3, 0.183E+3, 0.400E+1, 0.98200000E+0, 0.00000000E+0, + 0.25081810E+3, 0.183E+3, 0.500E+1, 0.98200000E+0, 0.00000000E+0, 0.16984210E+3, 0.183E+3, + 0.600E+1, 0.98200000E+0, 0.00000000E+0, 0.11903470E+3, 0.183E+3, 0.700E+1, 0.98200000E+0, + 0.00000000E+0, 0.90305200E+2, 0.183E+3, 0.800E+1, 0.98200000E+0, 0.00000000E+0, 0.68559300E+2, + 0.183E+3, 0.900E+1, 0.98200000E+0, 0.00000000E+0, 0.52850100E+2, 0.183E+3, 0.100E+2, + 0.98200000E+0, 0.00000000E+0, 0.76472640E+3, 0.183E+3, 0.110E+2, 0.98200000E+0, 0.00000000E+0, + 0.59132420E+3, 0.183E+3, 0.120E+2, 0.98200000E+0, 0.00000000E+0, 0.54586550E+3, 0.183E+3, + 0.130E+2, 0.98200000E+0, 0.00000000E+0, 0.43092720E+3, 0.183E+3, 0.140E+2, 0.98200000E+0, + 0.00000000E+0, 0.33654820E+3, 0.183E+3, 0.150E+2, 0.98200000E+0, 0.00000000E+0, 0.27961500E+3, + 0.183E+3, 0.160E+2, 0.98200000E+0, 0.00000000E+0, 0.22867090E+3, 0.183E+3, 0.170E+2, + 0.98200000E+0, 0.00000000E+0, 0.18730610E+3, 0.183E+3, 0.180E+2, 0.98200000E+0, 0.00000000E+0, + 0.12519864E+4, 0.183E+3, 0.190E+2, 0.98200000E+0, 0.00000000E+0, 0.10371898E+4, 0.183E+3, + 0.200E+2, 0.98200000E+0, 0.00000000E+0, 0.85756950E+3, 0.183E+3, 0.210E+2, 0.98200000E+0, + 0.00000000E+0, 0.82873520E+3, 0.183E+3, 0.220E+2, 0.98200000E+0, 0.00000000E+0, 0.75924150E+3, + 0.183E+3, 0.230E+2, 0.98200000E+0, 0.00000000E+0, 0.59825830E+3, 0.183E+3, 0.240E+2, + 0.98200000E+0, 0.00000000E+0, 0.65412160E+3, 0.183E+3, 0.250E+2, 0.98200000E+0, 0.00000000E+0, + 0.51359410E+3, 0.183E+3, 0.260E+2, 0.98200000E+0, 0.00000000E+0, 0.54475080E+3, 0.183E+3, + 0.270E+2, 0.98200000E+0, 0.00000000E+0, 0.56093530E+3, 0.183E+3, 0.280E+2, 0.98200000E+0, + 0.00000000E+0, 0.43021600E+3, 0.183E+3, 0.290E+2, 0.98200000E+0, 0.00000000E+0, 0.44212850E+3, + 0.183E+3, 0.300E+2, 0.98200000E+0, 0.00000000E+0, 0.52324780E+3, 0.183E+3, 0.310E+2, + 0.98200000E+0, 0.00000000E+0, 0.46207160E+3, 0.183E+3, 0.320E+2, 0.98200000E+0, 0.00000000E+0, + 0.39458520E+3, 0.183E+3, 0.330E+2, 0.98200000E+0, 0.00000000E+0, 0.35432910E+3, 0.183E+3, + 0.340E+2, 0.98200000E+0, 0.00000000E+0, 0.31033860E+3, 0.183E+3, 0.350E+2, 0.98200000E+0, + 0.00000000E+0, 0.27012000E+3, 0.183E+3, 0.360E+2, 0.98200000E+0, 0.00000000E+0, 0.14036411E+4, + 0.183E+3, 0.370E+2, 0.98200000E+0, 0.00000000E+0, 0.12355778E+4, 0.183E+3, 0.380E+2, + 0.98200000E+0, 0.00000000E+0, 0.10837333E+4, 0.183E+3, 0.390E+2, 0.98200000E+0, 0.00000000E+0, + 0.97477890E+3, 0.183E+3, 0.400E+2, 0.98200000E+0, 0.00000000E+0, 0.88933630E+3, 0.183E+3, + 0.410E+2, 0.98200000E+0, 0.00000000E+0, 0.68726090E+3, 0.183E+3, 0.420E+2, 0.98200000E+0, + 0.00000000E+0, 0.76655860E+3, 0.183E+3, 0.430E+2, 0.98200000E+0, 0.00000000E+0, 0.58463360E+3, + 0.183E+3, 0.440E+2, 0.98200000E+0, 0.00000000E+0, 0.63898360E+3, 0.183E+3, 0.450E+2, + 0.98200000E+0, 0.00000000E+0, 0.59276900E+3, 0.183E+3, 0.460E+2, 0.98200000E+0, 0.00000000E+0, + 0.49433450E+3, 0.183E+3, 0.470E+2, 0.98200000E+0, 0.00000000E+0, 0.52259600E+3, 0.183E+3, + 0.480E+2, 0.98200000E+0, 0.00000000E+0, 0.65509190E+3, 0.183E+3, 0.490E+2, 0.98200000E+0, + 0.00000000E+0, 0.60640770E+3, 0.183E+3, 0.500E+2, 0.98200000E+0, 0.00000000E+0, 0.54093950E+3, + 0.183E+3, 0.510E+2, 0.98200000E+0, 0.00000000E+0, 0.50216500E+3, 0.183E+3, 0.520E+2, + 0.98200000E+0, 0.00000000E+0, 0.45432770E+3, 0.183E+3, 0.530E+2, 0.98200000E+0, 0.00000000E+0, + 0.40872120E+3, 0.183E+3, 0.540E+2, 0.98200000E+0, 0.00000000E+0, 0.17098764E+4, 0.183E+3, + 0.550E+2, 0.98200000E+0, 0.00000000E+0, 0.15744445E+4, 0.183E+3, 0.560E+2, 0.98200000E+0, + 0.00000000E+0, 0.13849862E+4, 0.183E+3, 0.570E+2, 0.98200000E+0, 0.00000000E+0, 0.63893210E+3, + 0.183E+3, 0.580E+2, 0.98200000E+0, 0.27991000E+1, 0.13958040E+4, 0.183E+3, 0.590E+2, + 0.98200000E+0, 0.00000000E+0, 0.13406235E+4, 0.183E+3, 0.600E+2, 0.98200000E+0, 0.00000000E+0, + 0.13070810E+4, 0.183E+3, 0.610E+2, 0.98200000E+0, 0.00000000E+0, 0.12762220E+4, 0.183E+3, + 0.620E+2, 0.98200000E+0, 0.00000000E+0, 0.12488582E+4, 0.183E+3, 0.630E+2, 0.98200000E+0, + 0.00000000E+0, 0.98347160E+3, 0.183E+3, 0.640E+2, 0.98200000E+0, 0.00000000E+0, 0.11050192E+4, + 0.183E+3, 0.650E+2, 0.98200000E+0, 0.00000000E+0, 0.10659790E+4, 0.183E+3, 0.660E+2, + 0.98200000E+0, 0.00000000E+0, 0.11267767E+4, 0.183E+3, 0.670E+2, 0.98200000E+0, 0.00000000E+0, + 0.11029019E+4, 0.183E+3, 0.680E+2, 0.98200000E+0, 0.00000000E+0, 0.10813880E+4, 0.183E+3, + 0.690E+2, 0.98200000E+0, 0.00000000E+0, 0.10686785E+4, 0.183E+3, 0.700E+2, 0.98200000E+0, + 0.00000000E+0, 0.90128220E+3, 0.183E+3, 0.710E+2, 0.98200000E+0, 0.00000000E+0, 0.88729660E+3, + 0.183E+3, 0.720E+2, 0.98200000E+0, 0.00000000E+0, 0.81034560E+3, 0.183E+3, 0.730E+2, + 0.98200000E+0, 0.00000000E+0, 0.68471570E+3, 0.183E+3, 0.740E+2, 0.98200000E+0, 0.00000000E+0, + 0.69676070E+3, 0.183E+3, 0.750E+2, 0.98200000E+0, 0.00000000E+0, 0.63189030E+3, 0.183E+3, + 0.760E+2, 0.98200000E+0, 0.00000000E+0, 0.57901680E+3, 0.183E+3, 0.770E+2, 0.98200000E+0, + 0.00000000E+0, 0.48134860E+3, 0.183E+3, 0.780E+2, 0.98200000E+0, 0.00000000E+0, 0.44988030E+3, + 0.183E+3, 0.790E+2, 0.98200000E+0, 0.00000000E+0, 0.46287080E+3, 0.183E+3, 0.800E+2, + 0.98200000E+0, 0.00000000E+0, 0.67290150E+3, 0.183E+3, 0.810E+2, 0.98200000E+0, 0.00000000E+0, + 0.65843910E+3, 0.183E+3, 0.820E+2, 0.98200000E+0, 0.00000000E+0, 0.60554990E+3, 0.183E+3, + 0.830E+2, 0.98200000E+0, 0.00000000E+0, 0.57780740E+3, 0.183E+3, 0.840E+2, 0.98200000E+0, + 0.00000000E+0, 0.53356470E+3, 0.183E+3, 0.850E+2, 0.98200000E+0, 0.00000000E+0, 0.48931160E+3, + 0.183E+3, 0.860E+2, 0.98200000E+0, 0.00000000E+0, 0.16162977E+4, 0.183E+3, 0.870E+2, + 0.98200000E+0, 0.00000000E+0, 0.15578929E+4, 0.183E+3, 0.880E+2, 0.98200000E+0, 0.00000000E+0, + 0.13787984E+4, 0.183E+3, 0.890E+2, 0.98200000E+0, 0.00000000E+0, 0.12407328E+4, 0.183E+3, + 0.900E+2, 0.98200000E+0, 0.00000000E+0, 0.12312018E+4, 0.183E+3, 0.910E+2, 0.98200000E+0, + 0.00000000E+0, 0.11922019E+4, 0.183E+3, 0.920E+2, 0.98200000E+0, 0.00000000E+0, 0.12266358E+4, + 0.183E+3, 0.930E+2, 0.98200000E+0, 0.00000000E+0, 0.11880528E+4, 0.183E+3, 0.940E+2, + 0.98200000E+0, 0.00000000E+0, 0.66885700E+2, 0.183E+3, 0.101E+3, 0.98200000E+0, 0.00000000E+0, + 0.21599080E+3, 0.183E+3, 0.103E+3, 0.98200000E+0, 0.98650000E+0, 0.27562110E+3, 0.183E+3, + 0.104E+3, 0.98200000E+0, 0.98080000E+0, 0.21110780E+3, 0.183E+3, 0.105E+3, 0.98200000E+0, + 0.97060000E+0, 0.15930450E+3, 0.183E+3, 0.106E+3, 0.98200000E+0, 0.98680000E+0, 0.11100780E+3, + 0.183E+3, 0.107E+3, 0.98200000E+0, 0.99440000E+0, 0.81023800E+2, 0.183E+3, 0.108E+3, + 0.98200000E+0, 0.99250000E+0, 0.55921600E+2, 0.183E+3, 0.109E+3, 0.98200000E+0, 0.99820000E+0, + 0.31569470E+3, 0.183E+3, 0.111E+3, 0.98200000E+0, 0.96840000E+0, 0.48798840E+3, 0.183E+3, + 0.112E+3, 0.98200000E+0, 0.96280000E+0, 0.49488070E+3, 0.183E+3, 0.113E+3, 0.98200000E+0, + 0.96480000E+0, 0.39838950E+3, 0.183E+3, 0.114E+3, 0.98200000E+0, 0.95070000E+0, 0.32670150E+3, + 0.183E+3, 0.115E+3, 0.98200000E+0, 0.99470000E+0, 0.27653670E+3, 0.183E+3, 0.116E+3, + 0.98200000E+0, 0.99480000E+0, 0.22630380E+3, 0.183E+3, 0.117E+3, 0.98200000E+0, 0.99720000E+0, + 0.43578520E+3, 0.183E+3, 0.119E+3, 0.98200000E+0, 0.97670000E+0, 0.82978660E+3, 0.183E+3, + 0.120E+3, 0.98200000E+0, 0.98310000E+0, 0.43655630E+3, 0.183E+3, 0.121E+3, 0.98200000E+0, + 0.18627000E+1, 0.42148580E+3, 0.183E+3, 0.122E+3, 0.98200000E+0, 0.18299000E+1, 0.41307940E+3, + 0.183E+3, 0.123E+3, 0.98200000E+0, 0.19138000E+1, 0.40921130E+3, 0.183E+3, 0.124E+3, + 0.98200000E+0, 0.18269000E+1, 0.37685240E+3, 0.183E+3, 0.125E+3, 0.98200000E+0, 0.16406000E+1, + 0.34888250E+3, 0.183E+3, 0.126E+3, 0.98200000E+0, 0.16483000E+1, 0.33284050E+3, 0.183E+3, + 0.127E+3, 0.98200000E+0, 0.17149000E+1, 0.32538910E+3, 0.183E+3, 0.128E+3, 0.98200000E+0, + 0.17937000E+1, 0.32133350E+3, 0.183E+3, 0.129E+3, 0.98200000E+0, 0.95760000E+0, 0.30179750E+3, + 0.183E+3, 0.130E+3, 0.98200000E+0, 0.19419000E+1, 0.49162320E+3, 0.183E+3, 0.131E+3, + 0.98200000E+0, 0.96010000E+0, 0.43241530E+3, 0.183E+3, 0.132E+3, 0.98200000E+0, 0.94340000E+0, + 0.38792100E+3, 0.183E+3, 0.133E+3, 0.98200000E+0, 0.98890000E+0, 0.35446370E+3, 0.183E+3, + 0.134E+3, 0.98200000E+0, 0.99010000E+0, 0.31248750E+3, 0.183E+3, 0.135E+3, 0.98200000E+0, + 0.99740000E+0, 0.52015670E+3, 0.183E+3, 0.137E+3, 0.98200000E+0, 0.97380000E+0, 0.10095291E+4, + 0.183E+3, 0.138E+3, 0.98200000E+0, 0.98010000E+0, 0.77362030E+3, 0.183E+3, 0.139E+3, + 0.98200000E+0, 0.19153000E+1, 0.57727760E+3, 0.183E+3, 0.140E+3, 0.98200000E+0, 0.19355000E+1, + 0.58300940E+3, 0.183E+3, 0.141E+3, 0.98200000E+0, 0.19545000E+1, 0.54383670E+3, 0.183E+3, + 0.142E+3, 0.98200000E+0, 0.19420000E+1, 0.60923200E+3, 0.183E+3, 0.143E+3, 0.98200000E+0, + 0.16682000E+1, 0.47449870E+3, 0.183E+3, 0.144E+3, 0.98200000E+0, 0.18584000E+1, 0.44399260E+3, + 0.183E+3, 0.145E+3, 0.98200000E+0, 0.19003000E+1, 0.41240560E+3, 0.183E+3, 0.146E+3, + 0.98200000E+0, 0.18630000E+1, 0.39894980E+3, 0.183E+3, 0.147E+3, 0.98200000E+0, 0.96790000E+0, + 0.39486670E+3, 0.183E+3, 0.148E+3, 0.98200000E+0, 0.19539000E+1, 0.62469100E+3, 0.183E+3, + 0.149E+3, 0.98200000E+0, 0.96330000E+0, 0.56575460E+3, 0.183E+3, 0.150E+3, 0.98200000E+0, + 0.95140000E+0, 0.53022150E+3, 0.183E+3, 0.151E+3, 0.98200000E+0, 0.97490000E+0, 0.50181220E+3, + 0.183E+3, 0.152E+3, 0.98200000E+0, 0.98110000E+0, 0.45858080E+3, 0.183E+3, 0.153E+3, + 0.98200000E+0, 0.99680000E+0, 0.61548530E+3, 0.183E+3, 0.155E+3, 0.98200000E+0, 0.99090000E+0, + 0.13081372E+4, 0.183E+3, 0.156E+3, 0.98200000E+0, 0.97970000E+0, 0.97887630E+3, 0.183E+3, + 0.157E+3, 0.98200000E+0, 0.19373000E+1, 0.61971040E+3, 0.183E+3, 0.159E+3, 0.98200000E+0, + 0.29425000E+1, 0.60690590E+3, 0.183E+3, 0.160E+3, 0.98200000E+0, 0.29455000E+1, 0.58770740E+3, + 0.183E+3, 0.161E+3, 0.98200000E+0, 0.29413000E+1, 0.59049670E+3, 0.183E+3, 0.162E+3, + 0.98200000E+0, 0.29300000E+1, 0.56898830E+3, 0.183E+3, 0.163E+3, 0.98200000E+0, 0.18286000E+1, + 0.59417810E+3, 0.183E+3, 0.164E+3, 0.98200000E+0, 0.28732000E+1, 0.55818530E+3, 0.183E+3, + 0.165E+3, 0.98200000E+0, 0.29086000E+1, 0.56779730E+3, 0.183E+3, 0.166E+3, 0.98200000E+0, + 0.28965000E+1, 0.52988060E+3, 0.183E+3, 0.167E+3, 0.98200000E+0, 0.29242000E+1, 0.51480880E+3, + 0.183E+3, 0.168E+3, 0.98200000E+0, 0.29282000E+1, 0.51148010E+3, 0.183E+3, 0.169E+3, + 0.98200000E+0, 0.29246000E+1, 0.53747970E+3, 0.183E+3, 0.170E+3, 0.98200000E+0, 0.28482000E+1, + 0.49440600E+3, 0.183E+3, 0.171E+3, 0.98200000E+0, 0.29219000E+1, 0.66852110E+3, 0.183E+3, + 0.172E+3, 0.98200000E+0, 0.19254000E+1, 0.62087010E+3, 0.183E+3, 0.173E+3, 0.98200000E+0, + 0.19459000E+1, 0.56690460E+3, 0.183E+3, 0.174E+3, 0.98200000E+0, 0.19292000E+1, 0.57334500E+3, + 0.183E+3, 0.175E+3, 0.98200000E+0, 0.18104000E+1, 0.50267320E+3, 0.183E+3, 0.176E+3, + 0.98200000E+0, 0.18858000E+1, 0.47305980E+3, 0.183E+3, 0.177E+3, 0.98200000E+0, 0.18648000E+1, + 0.45195060E+3, 0.183E+3, 0.178E+3, 0.98200000E+0, 0.19188000E+1, 0.43215130E+3, 0.183E+3, + 0.179E+3, 0.98200000E+0, 0.98460000E+0, 0.41777890E+3, 0.183E+3, 0.180E+3, 0.98200000E+0, + 0.19896000E+1, 0.67100110E+3, 0.183E+3, 0.181E+3, 0.98200000E+0, 0.92670000E+0, 0.61223660E+3, + 0.183E+3, 0.182E+3, 0.98200000E+0, 0.93830000E+0, 0.59404570E+3, 0.183E+3, 0.183E+3, + 0.98200000E+0, 0.98200000E+0, 0.40784000E+2, 0.184E+3, 0.100E+1, 0.98150000E+0, 0.91180000E+0, + 0.27292700E+2, 0.184E+3, 0.200E+1, 0.98150000E+0, 0.00000000E+0, 0.60378280E+3, 0.184E+3, + 0.300E+1, 0.98150000E+0, 0.00000000E+0, 0.35667730E+3, 0.184E+3, 0.400E+1, 0.98150000E+0, + 0.00000000E+0, 0.24325530E+3, 0.184E+3, 0.500E+1, 0.98150000E+0, 0.00000000E+0, 0.16591800E+3, + 0.184E+3, 0.600E+1, 0.98150000E+0, 0.00000000E+0, 0.11689210E+3, 0.184E+3, 0.700E+1, + 0.98150000E+0, 0.00000000E+0, 0.88996000E+2, 0.184E+3, 0.800E+1, 0.98150000E+0, 0.00000000E+0, + 0.67762500E+2, 0.184E+3, 0.900E+1, 0.98150000E+0, 0.00000000E+0, 0.52352000E+2, 0.184E+3, + 0.100E+2, 0.98150000E+0, 0.00000000E+0, 0.72318320E+3, 0.184E+3, 0.110E+2, 0.98150000E+0, + 0.00000000E+0, 0.56618910E+3, 0.184E+3, 0.120E+2, 0.98150000E+0, 0.00000000E+0, 0.52532650E+3, + 0.184E+3, 0.130E+2, 0.98150000E+0, 0.00000000E+0, 0.41751820E+3, 0.184E+3, 0.140E+2, + 0.98150000E+0, 0.00000000E+0, 0.32794200E+3, 0.184E+3, 0.150E+2, 0.98150000E+0, 0.00000000E+0, + 0.27346760E+3, 0.184E+3, 0.160E+2, 0.98150000E+0, 0.00000000E+0, 0.22441640E+3, 0.184E+3, + 0.170E+2, 0.98150000E+0, 0.00000000E+0, 0.18436010E+3, 0.184E+3, 0.180E+2, 0.98150000E+0, + 0.00000000E+0, 0.11819863E+4, 0.184E+3, 0.190E+2, 0.98150000E+0, 0.00000000E+0, 0.98827090E+3, + 0.184E+3, 0.200E+2, 0.98150000E+0, 0.00000000E+0, 0.81891600E+3, 0.184E+3, 0.210E+2, + 0.98150000E+0, 0.00000000E+0, 0.79312700E+3, 0.184E+3, 0.220E+2, 0.98150000E+0, 0.00000000E+0, + 0.72754910E+3, 0.184E+3, 0.230E+2, 0.98150000E+0, 0.00000000E+0, 0.57361570E+3, 0.184E+3, + 0.240E+2, 0.98150000E+0, 0.00000000E+0, 0.62798280E+3, 0.184E+3, 0.250E+2, 0.98150000E+0, + 0.00000000E+0, 0.49346120E+3, 0.184E+3, 0.260E+2, 0.98150000E+0, 0.00000000E+0, 0.52458090E+3, + 0.184E+3, 0.270E+2, 0.98150000E+0, 0.00000000E+0, 0.53944100E+3, 0.184E+3, 0.280E+2, + 0.98150000E+0, 0.00000000E+0, 0.41395970E+3, 0.184E+3, 0.290E+2, 0.98150000E+0, 0.00000000E+0, + 0.42696110E+3, 0.184E+3, 0.300E+2, 0.98150000E+0, 0.00000000E+0, 0.50466270E+3, 0.184E+3, + 0.310E+2, 0.98150000E+0, 0.00000000E+0, 0.44793420E+3, 0.184E+3, 0.320E+2, 0.98150000E+0, + 0.00000000E+0, 0.38430870E+3, 0.184E+3, 0.330E+2, 0.98150000E+0, 0.00000000E+0, 0.34611240E+3, + 0.184E+3, 0.340E+2, 0.98150000E+0, 0.00000000E+0, 0.30404010E+3, 0.184E+3, 0.350E+2, + 0.98150000E+0, 0.00000000E+0, 0.26534650E+3, 0.184E+3, 0.360E+2, 0.98150000E+0, 0.00000000E+0, + 0.13265708E+4, 0.184E+3, 0.370E+2, 0.98150000E+0, 0.00000000E+0, 0.11770902E+4, 0.184E+3, + 0.380E+2, 0.98150000E+0, 0.00000000E+0, 0.10365660E+4, 0.184E+3, 0.390E+2, 0.98150000E+0, + 0.00000000E+0, 0.93473590E+3, 0.184E+3, 0.400E+2, 0.98150000E+0, 0.00000000E+0, 0.85428840E+3, + 0.184E+3, 0.410E+2, 0.98150000E+0, 0.00000000E+0, 0.66224370E+3, 0.184E+3, 0.420E+2, + 0.98150000E+0, 0.00000000E+0, 0.73778930E+3, 0.184E+3, 0.430E+2, 0.98150000E+0, 0.00000000E+0, + 0.56459860E+3, 0.184E+3, 0.440E+2, 0.98150000E+0, 0.00000000E+0, 0.61691080E+3, 0.184E+3, + 0.450E+2, 0.98150000E+0, 0.00000000E+0, 0.57289550E+3, 0.184E+3, 0.460E+2, 0.98150000E+0, + 0.00000000E+0, 0.47765720E+3, 0.184E+3, 0.470E+2, 0.98150000E+0, 0.00000000E+0, 0.50575670E+3, + 0.184E+3, 0.480E+2, 0.98150000E+0, 0.00000000E+0, 0.63186020E+3, 0.184E+3, 0.490E+2, + 0.98150000E+0, 0.00000000E+0, 0.58725260E+3, 0.184E+3, 0.500E+2, 0.98150000E+0, 0.00000000E+0, + 0.52598230E+3, 0.184E+3, 0.510E+2, 0.98150000E+0, 0.00000000E+0, 0.48950040E+3, 0.184E+3, + 0.520E+2, 0.98150000E+0, 0.00000000E+0, 0.44405350E+3, 0.184E+3, 0.530E+2, 0.98150000E+0, + 0.00000000E+0, 0.40048270E+3, 0.184E+3, 0.540E+2, 0.98150000E+0, 0.00000000E+0, 0.16166889E+4, + 0.184E+3, 0.550E+2, 0.98150000E+0, 0.00000000E+0, 0.14983060E+4, 0.184E+3, 0.560E+2, + 0.98150000E+0, 0.00000000E+0, 0.13231799E+4, 0.184E+3, 0.570E+2, 0.98150000E+0, 0.00000000E+0, + 0.62088910E+3, 0.184E+3, 0.580E+2, 0.98150000E+0, 0.27991000E+1, 0.13300657E+4, 0.184E+3, + 0.590E+2, 0.98150000E+0, 0.00000000E+0, 0.12782459E+4, 0.184E+3, 0.600E+2, 0.98150000E+0, + 0.00000000E+0, 0.12464709E+4, 0.184E+3, 0.610E+2, 0.98150000E+0, 0.00000000E+0, 0.12172125E+4, + 0.184E+3, 0.620E+2, 0.98150000E+0, 0.00000000E+0, 0.11912765E+4, 0.184E+3, 0.630E+2, + 0.98150000E+0, 0.00000000E+0, 0.94248920E+3, 0.184E+3, 0.640E+2, 0.98150000E+0, 0.00000000E+0, + 0.10526025E+4, 0.184E+3, 0.650E+2, 0.98150000E+0, 0.00000000E+0, 0.10162272E+4, 0.184E+3, + 0.660E+2, 0.98150000E+0, 0.00000000E+0, 0.10758235E+4, 0.184E+3, 0.670E+2, 0.98150000E+0, + 0.00000000E+0, 0.10531221E+4, 0.184E+3, 0.680E+2, 0.98150000E+0, 0.00000000E+0, 0.10327245E+4, + 0.184E+3, 0.690E+2, 0.98150000E+0, 0.00000000E+0, 0.10203815E+4, 0.184E+3, 0.700E+2, + 0.98150000E+0, 0.00000000E+0, 0.86329250E+3, 0.184E+3, 0.710E+2, 0.98150000E+0, 0.00000000E+0, + 0.85331590E+3, 0.184E+3, 0.720E+2, 0.98150000E+0, 0.00000000E+0, 0.78130510E+3, 0.184E+3, + 0.730E+2, 0.98150000E+0, 0.00000000E+0, 0.66165650E+3, 0.184E+3, 0.740E+2, 0.98150000E+0, + 0.00000000E+0, 0.67388930E+3, 0.184E+3, 0.750E+2, 0.98150000E+0, 0.00000000E+0, 0.61248620E+3, + 0.184E+3, 0.760E+2, 0.98150000E+0, 0.00000000E+0, 0.56223340E+3, 0.184E+3, 0.770E+2, + 0.98150000E+0, 0.00000000E+0, 0.46834590E+3, 0.184E+3, 0.780E+2, 0.98150000E+0, 0.00000000E+0, + 0.43807020E+3, 0.184E+3, 0.790E+2, 0.98150000E+0, 0.00000000E+0, 0.45102990E+3, 0.184E+3, + 0.800E+2, 0.98150000E+0, 0.00000000E+0, 0.64993220E+3, 0.184E+3, 0.810E+2, 0.98150000E+0, + 0.00000000E+0, 0.63784100E+3, 0.184E+3, 0.820E+2, 0.98150000E+0, 0.00000000E+0, 0.58869220E+3, + 0.184E+3, 0.830E+2, 0.98150000E+0, 0.00000000E+0, 0.56290490E+3, 0.184E+3, 0.840E+2, + 0.98150000E+0, 0.00000000E+0, 0.52111770E+3, 0.184E+3, 0.850E+2, 0.98150000E+0, 0.00000000E+0, + 0.47899830E+3, 0.184E+3, 0.860E+2, 0.98150000E+0, 0.00000000E+0, 0.15330137E+4, 0.184E+3, + 0.870E+2, 0.98150000E+0, 0.00000000E+0, 0.14856837E+4, 0.184E+3, 0.880E+2, 0.98150000E+0, + 0.00000000E+0, 0.13195792E+4, 0.184E+3, 0.890E+2, 0.98150000E+0, 0.00000000E+0, 0.11925537E+4, + 0.184E+3, 0.900E+2, 0.98150000E+0, 0.00000000E+0, 0.11810674E+4, 0.184E+3, 0.910E+2, + 0.98150000E+0, 0.00000000E+0, 0.11437723E+4, 0.184E+3, 0.920E+2, 0.98150000E+0, 0.00000000E+0, + 0.11736700E+4, 0.184E+3, 0.930E+2, 0.98150000E+0, 0.00000000E+0, 0.11372796E+4, 0.184E+3, + 0.940E+2, 0.98150000E+0, 0.00000000E+0, 0.65214600E+2, 0.184E+3, 0.101E+3, 0.98150000E+0, + 0.00000000E+0, 0.20772960E+3, 0.184E+3, 0.103E+3, 0.98150000E+0, 0.98650000E+0, 0.26561960E+3, + 0.184E+3, 0.104E+3, 0.98150000E+0, 0.98080000E+0, 0.20516820E+3, 0.184E+3, 0.105E+3, + 0.98150000E+0, 0.97060000E+0, 0.15561880E+3, 0.184E+3, 0.106E+3, 0.98150000E+0, 0.98680000E+0, + 0.10902870E+3, 0.184E+3, 0.107E+3, 0.98150000E+0, 0.99440000E+0, 0.79923000E+2, 0.184E+3, + 0.108E+3, 0.98150000E+0, 0.99250000E+0, 0.55445000E+2, 0.184E+3, 0.109E+3, 0.98150000E+0, + 0.99820000E+0, 0.30313050E+3, 0.184E+3, 0.111E+3, 0.98150000E+0, 0.96840000E+0, 0.46821060E+3, + 0.184E+3, 0.112E+3, 0.98150000E+0, 0.96280000E+0, 0.47685900E+3, 0.184E+3, 0.113E+3, + 0.98150000E+0, 0.96480000E+0, 0.38638850E+3, 0.184E+3, 0.114E+3, 0.98150000E+0, 0.95070000E+0, + 0.31841620E+3, 0.184E+3, 0.115E+3, 0.98150000E+0, 0.99470000E+0, 0.27043650E+3, 0.184E+3, + 0.116E+3, 0.98150000E+0, 0.99480000E+0, 0.22208000E+3, 0.184E+3, 0.117E+3, 0.98150000E+0, + 0.99720000E+0, 0.42021160E+3, 0.184E+3, 0.119E+3, 0.98150000E+0, 0.97670000E+0, 0.79141640E+3, + 0.184E+3, 0.120E+3, 0.98150000E+0, 0.98310000E+0, 0.42299690E+3, 0.184E+3, 0.121E+3, + 0.98150000E+0, 0.18627000E+1, 0.40851000E+3, 0.184E+3, 0.122E+3, 0.98150000E+0, 0.18299000E+1, + 0.40032420E+3, 0.184E+3, 0.123E+3, 0.98150000E+0, 0.19138000E+1, 0.39632850E+3, 0.184E+3, + 0.124E+3, 0.98150000E+0, 0.18269000E+1, 0.36605400E+3, 0.184E+3, 0.125E+3, 0.98150000E+0, + 0.16406000E+1, 0.33920620E+3, 0.184E+3, 0.126E+3, 0.98150000E+0, 0.16483000E+1, 0.32362470E+3, + 0.184E+3, 0.127E+3, 0.98150000E+0, 0.17149000E+1, 0.31630020E+3, 0.184E+3, 0.128E+3, + 0.98150000E+0, 0.17937000E+1, 0.31163550E+3, 0.184E+3, 0.129E+3, 0.98150000E+0, 0.95760000E+0, + 0.29390630E+3, 0.184E+3, 0.130E+3, 0.98150000E+0, 0.19419000E+1, 0.47478450E+3, 0.184E+3, + 0.131E+3, 0.98150000E+0, 0.96010000E+0, 0.41970260E+3, 0.184E+3, 0.132E+3, 0.98150000E+0, + 0.94340000E+0, 0.37792620E+3, 0.184E+3, 0.133E+3, 0.98150000E+0, 0.98890000E+0, 0.34623010E+3, + 0.184E+3, 0.134E+3, 0.98150000E+0, 0.99010000E+0, 0.30609970E+3, 0.184E+3, 0.135E+3, + 0.98150000E+0, 0.99740000E+0, 0.50220180E+3, 0.184E+3, 0.137E+3, 0.98150000E+0, 0.97380000E+0, + 0.96252050E+3, 0.184E+3, 0.138E+3, 0.98150000E+0, 0.98010000E+0, 0.74349910E+3, 0.184E+3, + 0.139E+3, 0.98150000E+0, 0.19153000E+1, 0.55925120E+3, 0.184E+3, 0.140E+3, 0.98150000E+0, + 0.19355000E+1, 0.56472600E+3, 0.184E+3, 0.141E+3, 0.98150000E+0, 0.19545000E+1, 0.52739750E+3, + 0.184E+3, 0.142E+3, 0.98150000E+0, 0.19420000E+1, 0.58857680E+3, 0.184E+3, 0.143E+3, + 0.98150000E+0, 0.16682000E+1, 0.46147450E+3, 0.184E+3, 0.144E+3, 0.98150000E+0, 0.18584000E+1, + 0.43195260E+3, 0.184E+3, 0.145E+3, 0.98150000E+0, 0.19003000E+1, 0.40145890E+3, 0.184E+3, + 0.146E+3, 0.98150000E+0, 0.18630000E+1, 0.38817970E+3, 0.184E+3, 0.147E+3, 0.98150000E+0, + 0.96790000E+0, 0.38501900E+3, 0.184E+3, 0.148E+3, 0.98150000E+0, 0.19539000E+1, 0.60340750E+3, + 0.184E+3, 0.149E+3, 0.98150000E+0, 0.96330000E+0, 0.54877650E+3, 0.184E+3, 0.150E+3, + 0.98150000E+0, 0.95140000E+0, 0.51584790E+3, 0.184E+3, 0.151E+3, 0.98150000E+0, 0.97490000E+0, + 0.48923280E+3, 0.184E+3, 0.152E+3, 0.98150000E+0, 0.98110000E+0, 0.44819060E+3, 0.184E+3, + 0.153E+3, 0.98150000E+0, 0.99680000E+0, 0.59616690E+3, 0.184E+3, 0.155E+3, 0.98150000E+0, + 0.99090000E+0, 0.12455740E+4, 0.184E+3, 0.156E+3, 0.98150000E+0, 0.97970000E+0, 0.94022950E+3, + 0.184E+3, 0.157E+3, 0.98150000E+0, 0.19373000E+1, 0.60235500E+3, 0.184E+3, 0.159E+3, + 0.98150000E+0, 0.29425000E+1, 0.58993220E+3, 0.184E+3, 0.160E+3, 0.98150000E+0, 0.29455000E+1, + 0.57139080E+3, 0.184E+3, 0.161E+3, 0.98150000E+0, 0.29413000E+1, 0.57376380E+3, 0.184E+3, + 0.162E+3, 0.98150000E+0, 0.29300000E+1, 0.55177910E+3, 0.184E+3, 0.163E+3, 0.98150000E+0, + 0.18286000E+1, 0.57720750E+3, 0.184E+3, 0.164E+3, 0.98150000E+0, 0.28732000E+1, 0.54252310E+3, + 0.184E+3, 0.165E+3, 0.98150000E+0, 0.29086000E+1, 0.55128420E+3, 0.184E+3, 0.166E+3, + 0.98150000E+0, 0.28965000E+1, 0.51527560E+3, 0.184E+3, 0.167E+3, 0.98150000E+0, 0.29242000E+1, + 0.50071660E+3, 0.184E+3, 0.168E+3, 0.98150000E+0, 0.29282000E+1, 0.49739780E+3, 0.184E+3, + 0.169E+3, 0.98150000E+0, 0.29246000E+1, 0.52220000E+3, 0.184E+3, 0.170E+3, 0.98150000E+0, + 0.28482000E+1, 0.48093310E+3, 0.184E+3, 0.171E+3, 0.98150000E+0, 0.29219000E+1, 0.64584430E+3, + 0.184E+3, 0.172E+3, 0.98150000E+0, 0.19254000E+1, 0.60127470E+3, 0.184E+3, 0.173E+3, + 0.98150000E+0, 0.19459000E+1, 0.55039340E+3, 0.184E+3, 0.174E+3, 0.98150000E+0, 0.19292000E+1, + 0.55542350E+3, 0.184E+3, 0.175E+3, 0.98150000E+0, 0.18104000E+1, 0.48976750E+3, 0.184E+3, + 0.176E+3, 0.98150000E+0, 0.18858000E+1, 0.46132380E+3, 0.184E+3, 0.177E+3, 0.98150000E+0, + 0.18648000E+1, 0.44097230E+3, 0.184E+3, 0.178E+3, 0.98150000E+0, 0.19188000E+1, 0.42163540E+3, + 0.184E+3, 0.179E+3, 0.98150000E+0, 0.98460000E+0, 0.40842210E+3, 0.184E+3, 0.180E+3, + 0.98150000E+0, 0.19896000E+1, 0.64879600E+3, 0.184E+3, 0.181E+3, 0.98150000E+0, 0.92670000E+0, + 0.59436400E+3, 0.184E+3, 0.182E+3, 0.98150000E+0, 0.93830000E+0, 0.57797360E+3, 0.184E+3, + 0.183E+3, 0.98150000E+0, 0.98200000E+0, 0.56324630E+3, 0.184E+3, 0.184E+3, 0.98150000E+0, + 0.98150000E+0, 0.38512100E+2, 0.185E+3, 0.100E+1, 0.99540000E+0, 0.91180000E+0, 0.26111100E+2, + 0.185E+3, 0.200E+1, 0.99540000E+0, 0.00000000E+0, 0.54178230E+3, 0.185E+3, 0.300E+1, + 0.99540000E+0, 0.00000000E+0, 0.32704600E+3, 0.185E+3, 0.400E+1, 0.99540000E+0, 0.00000000E+0, + 0.22612850E+3, 0.185E+3, 0.500E+1, 0.99540000E+0, 0.00000000E+0, 0.15586820E+3, 0.185E+3, + 0.600E+1, 0.99540000E+0, 0.00000000E+0, 0.11068200E+3, 0.185E+3, 0.700E+1, 0.99540000E+0, + 0.00000000E+0, 0.84740100E+2, 0.185E+3, 0.800E+1, 0.99540000E+0, 0.00000000E+0, 0.64828700E+2, + 0.185E+3, 0.900E+1, 0.99540000E+0, 0.00000000E+0, 0.50274100E+2, 0.185E+3, 0.100E+2, + 0.99540000E+0, 0.00000000E+0, 0.64991410E+3, 0.185E+3, 0.110E+2, 0.99540000E+0, 0.00000000E+0, + 0.51713720E+3, 0.185E+3, 0.120E+2, 0.99540000E+0, 0.00000000E+0, 0.48314350E+3, 0.185E+3, + 0.130E+2, 0.99540000E+0, 0.00000000E+0, 0.38756890E+3, 0.185E+3, 0.140E+2, 0.99540000E+0, + 0.00000000E+0, 0.30689040E+3, 0.185E+3, 0.150E+2, 0.99540000E+0, 0.00000000E+0, 0.25730000E+3, + 0.185E+3, 0.160E+2, 0.99540000E+0, 0.00000000E+0, 0.21224570E+3, 0.185E+3, 0.170E+2, + 0.99540000E+0, 0.00000000E+0, 0.17515290E+3, 0.185E+3, 0.180E+2, 0.99540000E+0, 0.00000000E+0, + 0.10605365E+4, 0.185E+3, 0.190E+2, 0.99540000E+0, 0.00000000E+0, 0.89715640E+3, 0.185E+3, + 0.200E+2, 0.99540000E+0, 0.00000000E+0, 0.74554500E+3, 0.185E+3, 0.210E+2, 0.99540000E+0, + 0.00000000E+0, 0.72428050E+3, 0.185E+3, 0.220E+2, 0.99540000E+0, 0.00000000E+0, 0.66556000E+3, + 0.185E+3, 0.230E+2, 0.99540000E+0, 0.00000000E+0, 0.52534660E+3, 0.185E+3, 0.240E+2, + 0.99540000E+0, 0.00000000E+0, 0.57594770E+3, 0.185E+3, 0.250E+2, 0.99540000E+0, 0.00000000E+0, + 0.45323530E+3, 0.185E+3, 0.260E+2, 0.99540000E+0, 0.00000000E+0, 0.48311010E+3, 0.185E+3, + 0.270E+2, 0.99540000E+0, 0.00000000E+0, 0.49587210E+3, 0.185E+3, 0.280E+2, 0.99540000E+0, + 0.00000000E+0, 0.38099950E+3, 0.185E+3, 0.290E+2, 0.99540000E+0, 0.00000000E+0, 0.39473600E+3, + 0.185E+3, 0.300E+2, 0.99540000E+0, 0.00000000E+0, 0.46567730E+3, 0.185E+3, 0.310E+2, + 0.99540000E+0, 0.00000000E+0, 0.41619670E+3, 0.185E+3, 0.320E+2, 0.99540000E+0, 0.00000000E+0, + 0.35943220E+3, 0.185E+3, 0.330E+2, 0.99540000E+0, 0.00000000E+0, 0.32508320E+3, 0.185E+3, + 0.340E+2, 0.99540000E+0, 0.00000000E+0, 0.28681650E+3, 0.185E+3, 0.350E+2, 0.99540000E+0, + 0.00000000E+0, 0.25132750E+3, 0.185E+3, 0.360E+2, 0.99540000E+0, 0.00000000E+0, 0.11921368E+4, + 0.185E+3, 0.370E+2, 0.99540000E+0, 0.00000000E+0, 0.10684888E+4, 0.185E+3, 0.380E+2, + 0.99540000E+0, 0.00000000E+0, 0.94594700E+3, 0.185E+3, 0.390E+2, 0.99540000E+0, 0.00000000E+0, + 0.85598480E+3, 0.185E+3, 0.400E+2, 0.99540000E+0, 0.00000000E+0, 0.78421710E+3, 0.185E+3, + 0.410E+2, 0.99540000E+0, 0.00000000E+0, 0.61069650E+3, 0.185E+3, 0.420E+2, 0.99540000E+0, + 0.00000000E+0, 0.67919130E+3, 0.185E+3, 0.430E+2, 0.99540000E+0, 0.00000000E+0, 0.52232000E+3, + 0.185E+3, 0.440E+2, 0.99540000E+0, 0.00000000E+0, 0.57034140E+3, 0.185E+3, 0.450E+2, + 0.99540000E+0, 0.00000000E+0, 0.53043260E+3, 0.185E+3, 0.460E+2, 0.99540000E+0, 0.00000000E+0, + 0.44233610E+3, 0.185E+3, 0.470E+2, 0.99540000E+0, 0.00000000E+0, 0.46916940E+3, 0.185E+3, + 0.480E+2, 0.99540000E+0, 0.00000000E+0, 0.58336540E+3, 0.185E+3, 0.490E+2, 0.99540000E+0, + 0.00000000E+0, 0.54506230E+3, 0.185E+3, 0.500E+2, 0.99540000E+0, 0.00000000E+0, 0.49091940E+3, + 0.185E+3, 0.510E+2, 0.99540000E+0, 0.00000000E+0, 0.45847770E+3, 0.185E+3, 0.520E+2, + 0.99540000E+0, 0.00000000E+0, 0.41750700E+3, 0.185E+3, 0.530E+2, 0.99540000E+0, 0.00000000E+0, + 0.37792660E+3, 0.185E+3, 0.540E+2, 0.99540000E+0, 0.00000000E+0, 0.14538408E+4, 0.185E+3, + 0.550E+2, 0.99540000E+0, 0.00000000E+0, 0.13583391E+4, 0.185E+3, 0.560E+2, 0.99540000E+0, + 0.00000000E+0, 0.12057906E+4, 0.185E+3, 0.570E+2, 0.99540000E+0, 0.00000000E+0, 0.57911420E+3, + 0.185E+3, 0.580E+2, 0.99540000E+0, 0.27991000E+1, 0.12080329E+4, 0.185E+3, 0.590E+2, + 0.99540000E+0, 0.00000000E+0, 0.11618576E+4, 0.185E+3, 0.600E+2, 0.99540000E+0, 0.00000000E+0, + 0.11332140E+4, 0.185E+3, 0.610E+2, 0.99540000E+0, 0.00000000E+0, 0.11068065E+4, 0.185E+3, + 0.620E+2, 0.99540000E+0, 0.00000000E+0, 0.10834069E+4, 0.185E+3, 0.630E+2, 0.99540000E+0, + 0.00000000E+0, 0.86266010E+3, 0.185E+3, 0.640E+2, 0.99540000E+0, 0.00000000E+0, 0.95596420E+3, + 0.185E+3, 0.650E+2, 0.99540000E+0, 0.00000000E+0, 0.92391610E+3, 0.185E+3, 0.660E+2, + 0.99540000E+0, 0.00000000E+0, 0.97957880E+3, 0.185E+3, 0.670E+2, 0.99540000E+0, 0.00000000E+0, + 0.95900710E+3, 0.185E+3, 0.680E+2, 0.99540000E+0, 0.00000000E+0, 0.94059640E+3, 0.185E+3, + 0.690E+2, 0.99540000E+0, 0.00000000E+0, 0.92908800E+3, 0.185E+3, 0.700E+2, 0.99540000E+0, + 0.00000000E+0, 0.78950440E+3, 0.185E+3, 0.710E+2, 0.99540000E+0, 0.00000000E+0, 0.78448200E+3, + 0.185E+3, 0.720E+2, 0.99540000E+0, 0.00000000E+0, 0.72081970E+3, 0.185E+3, 0.730E+2, + 0.99540000E+0, 0.00000000E+0, 0.61248290E+3, 0.185E+3, 0.740E+2, 0.99540000E+0, 0.00000000E+0, + 0.62450880E+3, 0.185E+3, 0.750E+2, 0.99540000E+0, 0.00000000E+0, 0.56934740E+3, 0.185E+3, + 0.760E+2, 0.99540000E+0, 0.00000000E+0, 0.52395200E+3, 0.185E+3, 0.770E+2, 0.99540000E+0, + 0.00000000E+0, 0.43782610E+3, 0.185E+3, 0.780E+2, 0.99540000E+0, 0.00000000E+0, 0.41001810E+3, + 0.185E+3, 0.790E+2, 0.99540000E+0, 0.00000000E+0, 0.42247690E+3, 0.185E+3, 0.800E+2, + 0.99540000E+0, 0.00000000E+0, 0.60141130E+3, 0.185E+3, 0.810E+2, 0.99540000E+0, 0.00000000E+0, + 0.59244910E+3, 0.185E+3, 0.820E+2, 0.99540000E+0, 0.00000000E+0, 0.54942480E+3, 0.185E+3, + 0.830E+2, 0.99540000E+0, 0.00000000E+0, 0.52688570E+3, 0.185E+3, 0.840E+2, 0.99540000E+0, + 0.00000000E+0, 0.48951330E+3, 0.185E+3, 0.850E+2, 0.99540000E+0, 0.00000000E+0, 0.45144550E+3, + 0.185E+3, 0.860E+2, 0.99540000E+0, 0.00000000E+0, 0.13844068E+4, 0.185E+3, 0.870E+2, + 0.99540000E+0, 0.00000000E+0, 0.13507426E+4, 0.185E+3, 0.880E+2, 0.99540000E+0, 0.00000000E+0, + 0.12053587E+4, 0.185E+3, 0.890E+2, 0.99540000E+0, 0.00000000E+0, 0.10957307E+4, 0.185E+3, + 0.900E+2, 0.99540000E+0, 0.00000000E+0, 0.10824781E+4, 0.185E+3, 0.910E+2, 0.99540000E+0, + 0.00000000E+0, 0.10484614E+4, 0.185E+3, 0.920E+2, 0.99540000E+0, 0.00000000E+0, 0.10720311E+4, + 0.185E+3, 0.930E+2, 0.99540000E+0, 0.00000000E+0, 0.10394256E+4, 0.185E+3, 0.940E+2, + 0.99540000E+0, 0.00000000E+0, 0.61075700E+2, 0.185E+3, 0.101E+3, 0.99540000E+0, 0.00000000E+0, + 0.19088070E+3, 0.185E+3, 0.103E+3, 0.99540000E+0, 0.98650000E+0, 0.24479400E+3, 0.185E+3, + 0.104E+3, 0.99540000E+0, 0.98080000E+0, 0.19130870E+3, 0.185E+3, 0.105E+3, 0.99540000E+0, + 0.97060000E+0, 0.14621180E+3, 0.185E+3, 0.106E+3, 0.99540000E+0, 0.98680000E+0, 0.10328040E+3, + 0.185E+3, 0.107E+3, 0.99540000E+0, 0.99440000E+0, 0.76218600E+2, 0.185E+3, 0.108E+3, + 0.99540000E+0, 0.99250000E+0, 0.53309200E+2, 0.185E+3, 0.109E+3, 0.99540000E+0, 0.99820000E+0, + 0.27800940E+3, 0.185E+3, 0.111E+3, 0.99540000E+0, 0.96840000E+0, 0.42891920E+3, 0.185E+3, + 0.112E+3, 0.99540000E+0, 0.96280000E+0, 0.43934570E+3, 0.185E+3, 0.113E+3, 0.99540000E+0, + 0.96480000E+0, 0.35920390E+3, 0.185E+3, 0.114E+3, 0.99540000E+0, 0.95070000E+0, 0.29808060E+3, + 0.185E+3, 0.115E+3, 0.99540000E+0, 0.99470000E+0, 0.25442840E+3, 0.185E+3, 0.116E+3, + 0.99540000E+0, 0.99480000E+0, 0.21002330E+3, 0.185E+3, 0.117E+3, 0.99540000E+0, 0.99720000E+0, + 0.38791110E+3, 0.185E+3, 0.119E+3, 0.99540000E+0, 0.97670000E+0, 0.71971410E+3, 0.185E+3, + 0.120E+3, 0.99540000E+0, 0.98310000E+0, 0.39289950E+3, 0.185E+3, 0.121E+3, 0.99540000E+0, + 0.18627000E+1, 0.37962690E+3, 0.185E+3, 0.122E+3, 0.99540000E+0, 0.18299000E+1, 0.37198630E+3, + 0.185E+3, 0.123E+3, 0.99540000E+0, 0.19138000E+1, 0.36797730E+3, 0.185E+3, 0.124E+3, + 0.99540000E+0, 0.18269000E+1, 0.34117250E+3, 0.185E+3, 0.125E+3, 0.99540000E+0, 0.16406000E+1, + 0.31658390E+3, 0.185E+3, 0.126E+3, 0.99540000E+0, 0.16483000E+1, 0.30208580E+3, 0.185E+3, + 0.127E+3, 0.99540000E+0, 0.17149000E+1, 0.29515410E+3, 0.185E+3, 0.128E+3, 0.99540000E+0, + 0.17937000E+1, 0.28991570E+3, 0.185E+3, 0.129E+3, 0.99540000E+0, 0.95760000E+0, 0.27492600E+3, + 0.185E+3, 0.130E+3, 0.99540000E+0, 0.19419000E+1, 0.43890000E+3, 0.185E+3, 0.131E+3, + 0.99540000E+0, 0.96010000E+0, 0.39064520E+3, 0.185E+3, 0.132E+3, 0.99540000E+0, 0.94340000E+0, + 0.35361220E+3, 0.185E+3, 0.133E+3, 0.99540000E+0, 0.98890000E+0, 0.32517910E+3, 0.185E+3, + 0.134E+3, 0.99540000E+0, 0.99010000E+0, 0.28869910E+3, 0.185E+3, 0.135E+3, 0.99540000E+0, + 0.99740000E+0, 0.46445980E+3, 0.185E+3, 0.137E+3, 0.99540000E+0, 0.97380000E+0, 0.87507120E+3, + 0.185E+3, 0.138E+3, 0.99540000E+0, 0.98010000E+0, 0.68319770E+3, 0.185E+3, 0.139E+3, + 0.99540000E+0, 0.19153000E+1, 0.51943980E+3, 0.185E+3, 0.140E+3, 0.99540000E+0, 0.19355000E+1, + 0.52444490E+3, 0.185E+3, 0.141E+3, 0.99540000E+0, 0.19545000E+1, 0.49061730E+3, 0.185E+3, + 0.142E+3, 0.99540000E+0, 0.19420000E+1, 0.54479300E+3, 0.185E+3, 0.143E+3, 0.99540000E+0, + 0.16682000E+1, 0.43100110E+3, 0.185E+3, 0.144E+3, 0.99540000E+0, 0.18584000E+1, 0.40366930E+3, + 0.185E+3, 0.145E+3, 0.99540000E+0, 0.19003000E+1, 0.37552180E+3, 0.185E+3, 0.146E+3, + 0.99540000E+0, 0.18630000E+1, 0.36288510E+3, 0.185E+3, 0.147E+3, 0.99540000E+0, 0.96790000E+0, + 0.36089310E+3, 0.185E+3, 0.148E+3, 0.99540000E+0, 0.19539000E+1, 0.55818460E+3, 0.185E+3, + 0.149E+3, 0.99540000E+0, 0.96330000E+0, 0.51050570E+3, 0.185E+3, 0.150E+3, 0.99540000E+0, + 0.95140000E+0, 0.48183620E+3, 0.185E+3, 0.151E+3, 0.99540000E+0, 0.97490000E+0, 0.45832530E+3, + 0.185E+3, 0.152E+3, 0.99540000E+0, 0.98110000E+0, 0.42136600E+3, 0.185E+3, 0.153E+3, + 0.99540000E+0, 0.99680000E+0, 0.55369970E+3, 0.185E+3, 0.155E+3, 0.99540000E+0, 0.99090000E+0, + 0.11306124E+4, 0.185E+3, 0.156E+3, 0.99540000E+0, 0.97970000E+0, 0.86338050E+3, 0.185E+3, + 0.157E+3, 0.99540000E+0, 0.19373000E+1, 0.56202230E+3, 0.185E+3, 0.159E+3, 0.99540000E+0, + 0.29425000E+1, 0.55046390E+3, 0.185E+3, 0.160E+3, 0.99540000E+0, 0.29455000E+1, 0.53332520E+3, + 0.185E+3, 0.161E+3, 0.99540000E+0, 0.29413000E+1, 0.53511070E+3, 0.185E+3, 0.162E+3, + 0.99540000E+0, 0.29300000E+1, 0.51328320E+3, 0.185E+3, 0.163E+3, 0.99540000E+0, 0.18286000E+1, + 0.53811960E+3, 0.185E+3, 0.164E+3, 0.99540000E+0, 0.28732000E+1, 0.50616170E+3, 0.185E+3, + 0.165E+3, 0.99540000E+0, 0.29086000E+1, 0.51361300E+3, 0.185E+3, 0.166E+3, 0.99540000E+0, + 0.28965000E+1, 0.48106970E+3, 0.185E+3, 0.167E+3, 0.99540000E+0, 0.29242000E+1, 0.46760130E+3, + 0.185E+3, 0.168E+3, 0.99540000E+0, 0.29282000E+1, 0.46439200E+3, 0.185E+3, 0.169E+3, + 0.99540000E+0, 0.29246000E+1, 0.48688020E+3, 0.185E+3, 0.170E+3, 0.99540000E+0, 0.28482000E+1, + 0.44918810E+3, 0.185E+3, 0.171E+3, 0.99540000E+0, 0.29219000E+1, 0.59761830E+3, 0.185E+3, + 0.172E+3, 0.99540000E+0, 0.19254000E+1, 0.55826740E+3, 0.185E+3, 0.173E+3, 0.99540000E+0, + 0.19459000E+1, 0.51282040E+3, 0.185E+3, 0.174E+3, 0.99540000E+0, 0.19292000E+1, 0.51597410E+3, + 0.185E+3, 0.175E+3, 0.99540000E+0, 0.18104000E+1, 0.45859230E+3, 0.185E+3, 0.176E+3, + 0.99540000E+0, 0.18858000E+1, 0.43254320E+3, 0.185E+3, 0.177E+3, 0.99540000E+0, 0.18648000E+1, + 0.41380590E+3, 0.185E+3, 0.178E+3, 0.99540000E+0, 0.19188000E+1, 0.39569230E+3, 0.185E+3, + 0.179E+3, 0.99540000E+0, 0.98460000E+0, 0.38429790E+3, 0.185E+3, 0.180E+3, 0.99540000E+0, + 0.19896000E+1, 0.60117960E+3, 0.185E+3, 0.181E+3, 0.99540000E+0, 0.92670000E+0, 0.55369590E+3, + 0.185E+3, 0.182E+3, 0.99540000E+0, 0.93830000E+0, 0.54001160E+3, 0.185E+3, 0.183E+3, + 0.99540000E+0, 0.98200000E+0, 0.52742780E+3, 0.185E+3, 0.184E+3, 0.99540000E+0, 0.98150000E+0, + 0.49544740E+3, 0.185E+3, 0.185E+3, 0.99540000E+0, 0.99540000E+0, 0.47701600E+2, 0.187E+3, + 0.100E+1, 0.97050000E+0, 0.91180000E+0, 0.30982700E+2, 0.187E+3, 0.200E+1, 0.97050000E+0, + 0.00000000E+0, 0.82128980E+3, 0.187E+3, 0.300E+1, 0.97050000E+0, 0.00000000E+0, 0.44907760E+3, + 0.187E+3, 0.400E+1, 0.97050000E+0, 0.00000000E+0, 0.29529920E+3, 0.187E+3, 0.500E+1, + 0.97050000E+0, 0.00000000E+0, 0.19640820E+3, 0.187E+3, 0.600E+1, 0.97050000E+0, 0.00000000E+0, + 0.13586190E+3, 0.187E+3, 0.700E+1, 0.97050000E+0, 0.00000000E+0, 0.10209130E+3, 0.187E+3, + 0.800E+1, 0.97050000E+0, 0.00000000E+0, 0.76828100E+2, 0.187E+3, 0.900E+1, 0.97050000E+0, + 0.00000000E+0, 0.58759900E+2, 0.187E+3, 0.100E+2, 0.97050000E+0, 0.00000000E+0, 0.97872720E+3, + 0.187E+3, 0.110E+2, 0.97050000E+0, 0.00000000E+0, 0.72162860E+3, 0.187E+3, 0.120E+2, + 0.97050000E+0, 0.00000000E+0, 0.65646580E+3, 0.187E+3, 0.130E+2, 0.97050000E+0, 0.00000000E+0, + 0.50848770E+3, 0.187E+3, 0.140E+2, 0.97050000E+0, 0.00000000E+0, 0.39145280E+3, 0.187E+3, + 0.150E+2, 0.97050000E+0, 0.00000000E+0, 0.32243460E+3, 0.187E+3, 0.160E+2, 0.97050000E+0, + 0.00000000E+0, 0.26153630E+3, 0.187E+3, 0.170E+2, 0.97050000E+0, 0.00000000E+0, 0.21269100E+3, + 0.187E+3, 0.180E+2, 0.97050000E+0, 0.00000000E+0, 0.16235241E+4, 0.187E+3, 0.190E+2, + 0.97050000E+0, 0.00000000E+0, 0.12906007E+4, 0.187E+3, 0.200E+2, 0.97050000E+0, 0.00000000E+0, + 0.10581233E+4, 0.187E+3, 0.210E+2, 0.97050000E+0, 0.00000000E+0, 0.10157559E+4, 0.187E+3, + 0.220E+2, 0.97050000E+0, 0.00000000E+0, 0.92671700E+3, 0.187E+3, 0.230E+2, 0.97050000E+0, + 0.00000000E+0, 0.73034690E+3, 0.187E+3, 0.240E+2, 0.97050000E+0, 0.00000000E+0, 0.79366630E+3, + 0.187E+3, 0.250E+2, 0.97050000E+0, 0.00000000E+0, 0.62273900E+3, 0.187E+3, 0.260E+2, + 0.97050000E+0, 0.00000000E+0, 0.65432150E+3, 0.187E+3, 0.270E+2, 0.97050000E+0, 0.00000000E+0, + 0.67636930E+3, 0.187E+3, 0.280E+2, 0.97050000E+0, 0.00000000E+0, 0.51902340E+3, 0.187E+3, + 0.290E+2, 0.97050000E+0, 0.00000000E+0, 0.52639910E+3, 0.187E+3, 0.300E+2, 0.97050000E+0, + 0.00000000E+0, 0.62602660E+3, 0.187E+3, 0.310E+2, 0.97050000E+0, 0.00000000E+0, 0.54461780E+3, + 0.187E+3, 0.320E+2, 0.97050000E+0, 0.00000000E+0, 0.45945110E+3, 0.187E+3, 0.330E+2, + 0.97050000E+0, 0.00000000E+0, 0.40971550E+3, 0.187E+3, 0.340E+2, 0.97050000E+0, 0.00000000E+0, + 0.35633240E+3, 0.187E+3, 0.350E+2, 0.97050000E+0, 0.00000000E+0, 0.30818050E+3, 0.187E+3, + 0.360E+2, 0.97050000E+0, 0.00000000E+0, 0.18154672E+4, 0.187E+3, 0.370E+2, 0.97050000E+0, + 0.00000000E+0, 0.15407355E+4, 0.187E+3, 0.380E+2, 0.97050000E+0, 0.00000000E+0, 0.13325023E+4, + 0.187E+3, 0.390E+2, 0.97050000E+0, 0.00000000E+0, 0.11885781E+4, 0.187E+3, 0.400E+2, + 0.97050000E+0, 0.00000000E+0, 0.10787813E+4, 0.187E+3, 0.410E+2, 0.97050000E+0, 0.00000000E+0, + 0.82661910E+3, 0.187E+3, 0.420E+2, 0.97050000E+0, 0.00000000E+0, 0.92479920E+3, 0.187E+3, + 0.430E+2, 0.97050000E+0, 0.00000000E+0, 0.69868860E+3, 0.187E+3, 0.440E+2, 0.97050000E+0, + 0.00000000E+0, 0.76296140E+3, 0.187E+3, 0.450E+2, 0.97050000E+0, 0.00000000E+0, 0.70540290E+3, + 0.187E+3, 0.460E+2, 0.97050000E+0, 0.00000000E+0, 0.58992230E+3, 0.187E+3, 0.470E+2, + 0.97050000E+0, 0.00000000E+0, 0.61917780E+3, 0.187E+3, 0.480E+2, 0.97050000E+0, 0.00000000E+0, + 0.78433640E+3, 0.187E+3, 0.490E+2, 0.97050000E+0, 0.00000000E+0, 0.71671230E+3, 0.187E+3, + 0.500E+2, 0.97050000E+0, 0.00000000E+0, 0.63213270E+3, 0.187E+3, 0.510E+2, 0.97050000E+0, + 0.00000000E+0, 0.58314470E+3, 0.187E+3, 0.520E+2, 0.97050000E+0, 0.00000000E+0, 0.52415300E+3, + 0.187E+3, 0.530E+2, 0.97050000E+0, 0.00000000E+0, 0.46871230E+3, 0.187E+3, 0.540E+2, + 0.97050000E+0, 0.00000000E+0, 0.22133513E+4, 0.187E+3, 0.550E+2, 0.97050000E+0, 0.00000000E+0, + 0.19746939E+4, 0.187E+3, 0.560E+2, 0.97050000E+0, 0.00000000E+0, 0.17122469E+4, 0.187E+3, + 0.570E+2, 0.97050000E+0, 0.00000000E+0, 0.74865870E+3, 0.187E+3, 0.580E+2, 0.97050000E+0, + 0.27991000E+1, 0.17417523E+4, 0.187E+3, 0.590E+2, 0.97050000E+0, 0.00000000E+0, 0.16683774E+4, + 0.187E+3, 0.600E+2, 0.97050000E+0, 0.00000000E+0, 0.16254063E+4, 0.187E+3, 0.610E+2, + 0.97050000E+0, 0.00000000E+0, 0.15860020E+4, 0.187E+3, 0.620E+2, 0.97050000E+0, 0.00000000E+0, + 0.15510288E+4, 0.187E+3, 0.630E+2, 0.97050000E+0, 0.00000000E+0, 0.12037458E+4, 0.187E+3, + 0.640E+2, 0.97050000E+0, 0.00000000E+0, 0.13861364E+4, 0.187E+3, 0.650E+2, 0.97050000E+0, + 0.00000000E+0, 0.13338527E+4, 0.187E+3, 0.660E+2, 0.97050000E+0, 0.00000000E+0, 0.13939911E+4, + 0.187E+3, 0.670E+2, 0.97050000E+0, 0.00000000E+0, 0.13638159E+4, 0.187E+3, 0.680E+2, + 0.97050000E+0, 0.00000000E+0, 0.13364029E+4, 0.187E+3, 0.690E+2, 0.97050000E+0, 0.00000000E+0, + 0.13214462E+4, 0.187E+3, 0.700E+2, 0.97050000E+0, 0.00000000E+0, 0.11036008E+4, 0.187E+3, + 0.710E+2, 0.97050000E+0, 0.00000000E+0, 0.10717256E+4, 0.187E+3, 0.720E+2, 0.97050000E+0, + 0.00000000E+0, 0.97115790E+3, 0.187E+3, 0.730E+2, 0.97050000E+0, 0.00000000E+0, 0.81639790E+3, + 0.187E+3, 0.740E+2, 0.97050000E+0, 0.00000000E+0, 0.82799830E+3, 0.187E+3, 0.750E+2, + 0.97050000E+0, 0.00000000E+0, 0.74602310E+3, 0.187E+3, 0.760E+2, 0.97050000E+0, 0.00000000E+0, + 0.68007030E+3, 0.187E+3, 0.770E+2, 0.97050000E+0, 0.00000000E+0, 0.56255190E+3, 0.187E+3, + 0.780E+2, 0.97050000E+0, 0.00000000E+0, 0.52462170E+3, 0.187E+3, 0.790E+2, 0.97050000E+0, + 0.00000000E+0, 0.53824540E+3, 0.187E+3, 0.800E+2, 0.97050000E+0, 0.00000000E+0, 0.80393350E+3, + 0.187E+3, 0.810E+2, 0.97050000E+0, 0.00000000E+0, 0.77827560E+3, 0.187E+3, 0.820E+2, + 0.97050000E+0, 0.00000000E+0, 0.70823270E+3, 0.187E+3, 0.830E+2, 0.97050000E+0, 0.00000000E+0, + 0.67199770E+3, 0.187E+3, 0.840E+2, 0.97050000E+0, 0.00000000E+0, 0.61653950E+3, 0.187E+3, + 0.850E+2, 0.97050000E+0, 0.00000000E+0, 0.56222180E+3, 0.187E+3, 0.860E+2, 0.97050000E+0, + 0.00000000E+0, 0.20671766E+4, 0.187E+3, 0.870E+2, 0.97050000E+0, 0.00000000E+0, 0.19399392E+4, + 0.187E+3, 0.880E+2, 0.97050000E+0, 0.00000000E+0, 0.16935702E+4, 0.187E+3, 0.890E+2, + 0.97050000E+0, 0.00000000E+0, 0.15024640E+4, 0.187E+3, 0.900E+2, 0.97050000E+0, 0.00000000E+0, + 0.15019252E+4, 0.187E+3, 0.910E+2, 0.97050000E+0, 0.00000000E+0, 0.14536878E+4, 0.187E+3, + 0.920E+2, 0.97050000E+0, 0.00000000E+0, 0.15083332E+4, 0.187E+3, 0.930E+2, 0.97050000E+0, + 0.00000000E+0, 0.14583342E+4, 0.187E+3, 0.940E+2, 0.97050000E+0, 0.00000000E+0, 0.77705500E+2, + 0.187E+3, 0.101E+3, 0.97050000E+0, 0.00000000E+0, 0.26024430E+3, 0.187E+3, 0.103E+3, + 0.97050000E+0, 0.98650000E+0, 0.33086670E+3, 0.187E+3, 0.104E+3, 0.97050000E+0, 0.98080000E+0, + 0.24738310E+3, 0.187E+3, 0.105E+3, 0.97050000E+0, 0.97060000E+0, 0.18444310E+3, 0.187E+3, + 0.106E+3, 0.97050000E+0, 0.98680000E+0, 0.12675340E+3, 0.187E+3, 0.107E+3, 0.97050000E+0, + 0.99440000E+0, 0.91438800E+2, 0.187E+3, 0.108E+3, 0.97050000E+0, 0.99250000E+0, 0.62121900E+2, + 0.187E+3, 0.109E+3, 0.97050000E+0, 0.99820000E+0, 0.38227080E+3, 0.187E+3, 0.111E+3, + 0.97050000E+0, 0.96840000E+0, 0.59297950E+3, 0.187E+3, 0.112E+3, 0.97050000E+0, 0.96280000E+0, + 0.59319050E+3, 0.187E+3, 0.113E+3, 0.97050000E+0, 0.96480000E+0, 0.46899060E+3, 0.187E+3, + 0.114E+3, 0.97050000E+0, 0.95070000E+0, 0.37986120E+3, 0.187E+3, 0.115E+3, 0.97050000E+0, + 0.99470000E+0, 0.31896080E+3, 0.187E+3, 0.116E+3, 0.97050000E+0, 0.99480000E+0, 0.25886520E+3, + 0.187E+3, 0.117E+3, 0.97050000E+0, 0.99720000E+0, 0.52346900E+3, 0.187E+3, 0.119E+3, + 0.97050000E+0, 0.97670000E+0, 0.10345424E+4, 0.187E+3, 0.120E+3, 0.97050000E+0, 0.98310000E+0, + 0.51544090E+3, 0.187E+3, 0.121E+3, 0.97050000E+0, 0.18627000E+1, 0.49759520E+3, 0.187E+3, + 0.122E+3, 0.97050000E+0, 0.18299000E+1, 0.48774150E+3, 0.187E+3, 0.123E+3, 0.97050000E+0, + 0.19138000E+1, 0.48406800E+3, 0.187E+3, 0.124E+3, 0.97050000E+0, 0.18269000E+1, 0.44152590E+3, + 0.187E+3, 0.125E+3, 0.97050000E+0, 0.16406000E+1, 0.40774620E+3, 0.187E+3, 0.126E+3, + 0.97050000E+0, 0.16483000E+1, 0.38903940E+3, 0.187E+3, 0.127E+3, 0.97050000E+0, 0.17149000E+1, + 0.38057220E+3, 0.187E+3, 0.128E+3, 0.97050000E+0, 0.17937000E+1, 0.37831310E+3, 0.187E+3, + 0.129E+3, 0.97050000E+0, 0.95760000E+0, 0.35099820E+3, 0.187E+3, 0.130E+3, 0.97050000E+0, + 0.19419000E+1, 0.58593320E+3, 0.187E+3, 0.131E+3, 0.97050000E+0, 0.96010000E+0, 0.50806740E+3, + 0.187E+3, 0.132E+3, 0.97050000E+0, 0.94340000E+0, 0.45140640E+3, 0.187E+3, 0.133E+3, + 0.97050000E+0, 0.98890000E+0, 0.40992700E+3, 0.187E+3, 0.134E+3, 0.97050000E+0, 0.99010000E+0, + 0.35893240E+3, 0.187E+3, 0.135E+3, 0.97050000E+0, 0.99740000E+0, 0.62302850E+3, 0.187E+3, + 0.137E+3, 0.97050000E+0, 0.97380000E+0, 0.12623248E+4, 0.187E+3, 0.138E+3, 0.97050000E+0, + 0.98010000E+0, 0.94131820E+3, 0.187E+3, 0.139E+3, 0.97050000E+0, 0.19153000E+1, 0.68339070E+3, + 0.187E+3, 0.140E+3, 0.97050000E+0, 0.19355000E+1, 0.69013390E+3, 0.187E+3, 0.141E+3, + 0.97050000E+0, 0.19545000E+1, 0.64188840E+3, 0.187E+3, 0.142E+3, 0.97050000E+0, 0.19420000E+1, + 0.72847950E+3, 0.187E+3, 0.143E+3, 0.97050000E+0, 0.16682000E+1, 0.55498020E+3, 0.187E+3, + 0.144E+3, 0.97050000E+0, 0.18584000E+1, 0.51892730E+3, 0.187E+3, 0.145E+3, 0.97050000E+0, + 0.19003000E+1, 0.48122640E+3, 0.187E+3, 0.146E+3, 0.97050000E+0, 0.18630000E+1, 0.46593230E+3, + 0.187E+3, 0.147E+3, 0.97050000E+0, 0.96790000E+0, 0.45799090E+3, 0.187E+3, 0.148E+3, + 0.97050000E+0, 0.19539000E+1, 0.74456260E+3, 0.187E+3, 0.149E+3, 0.97050000E+0, 0.96330000E+0, + 0.66567970E+3, 0.187E+3, 0.150E+3, 0.97050000E+0, 0.95140000E+0, 0.61872370E+3, 0.187E+3, + 0.151E+3, 0.97050000E+0, 0.97490000E+0, 0.58251630E+3, 0.187E+3, 0.152E+3, 0.97050000E+0, + 0.98110000E+0, 0.52912450E+3, 0.187E+3, 0.153E+3, 0.97050000E+0, 0.99680000E+0, 0.73044860E+3, + 0.187E+3, 0.155E+3, 0.97050000E+0, 0.99090000E+0, 0.16478674E+4, 0.187E+3, 0.156E+3, + 0.97050000E+0, 0.97970000E+0, 0.11947861E+4, 0.187E+3, 0.157E+3, 0.97050000E+0, 0.19373000E+1, + 0.72565350E+3, 0.187E+3, 0.159E+3, 0.97050000E+0, 0.29425000E+1, 0.71054890E+3, 0.187E+3, + 0.160E+3, 0.97050000E+0, 0.29455000E+1, 0.68768570E+3, 0.187E+3, 0.161E+3, 0.97050000E+0, + 0.29413000E+1, 0.69226220E+3, 0.187E+3, 0.162E+3, 0.97050000E+0, 0.29300000E+1, 0.67081490E+3, + 0.187E+3, 0.163E+3, 0.97050000E+0, 0.18286000E+1, 0.69684430E+3, 0.187E+3, 0.164E+3, + 0.97050000E+0, 0.28732000E+1, 0.65357440E+3, 0.187E+3, 0.165E+3, 0.97050000E+0, 0.29086000E+1, + 0.66719620E+3, 0.187E+3, 0.166E+3, 0.97050000E+0, 0.28965000E+1, 0.61947600E+3, 0.187E+3, + 0.167E+3, 0.97050000E+0, 0.29242000E+1, 0.60150620E+3, 0.187E+3, 0.168E+3, 0.97050000E+0, + 0.29282000E+1, 0.59787770E+3, 0.187E+3, 0.169E+3, 0.97050000E+0, 0.29246000E+1, 0.62970880E+3, + 0.187E+3, 0.170E+3, 0.97050000E+0, 0.28482000E+1, 0.57740830E+3, 0.187E+3, 0.171E+3, + 0.97050000E+0, 0.29219000E+1, 0.79873450E+3, 0.187E+3, 0.172E+3, 0.97050000E+0, 0.19254000E+1, + 0.73626140E+3, 0.187E+3, 0.173E+3, 0.97050000E+0, 0.19459000E+1, 0.66710040E+3, 0.187E+3, + 0.174E+3, 0.97050000E+0, 0.19292000E+1, 0.67912190E+3, 0.187E+3, 0.175E+3, 0.97050000E+0, + 0.18104000E+1, 0.58515020E+3, 0.187E+3, 0.176E+3, 0.97050000E+0, 0.18858000E+1, 0.54932980E+3, + 0.187E+3, 0.177E+3, 0.97050000E+0, 0.18648000E+1, 0.52401710E+3, 0.187E+3, 0.178E+3, + 0.97050000E+0, 0.19188000E+1, 0.50114870E+3, 0.187E+3, 0.179E+3, 0.97050000E+0, 0.98460000E+0, + 0.48150990E+3, 0.187E+3, 0.180E+3, 0.97050000E+0, 0.19896000E+1, 0.79848790E+3, 0.187E+3, + 0.181E+3, 0.97050000E+0, 0.92670000E+0, 0.71909940E+3, 0.187E+3, 0.182E+3, 0.97050000E+0, + 0.93830000E+0, 0.69321150E+3, 0.187E+3, 0.183E+3, 0.97050000E+0, 0.98200000E+0, 0.67161670E+3, + 0.187E+3, 0.184E+3, 0.97050000E+0, 0.98150000E+0, 0.62396020E+3, 0.187E+3, 0.185E+3, + 0.97050000E+0, 0.99540000E+0, 0.82204820E+3, 0.187E+3, 0.187E+3, 0.97050000E+0, 0.97050000E+0, + 0.83609000E+2, 0.188E+3, 0.100E+1, 0.96620000E+0, 0.91180000E+0, 0.50796500E+2, 0.188E+3, + 0.200E+1, 0.96620000E+0, 0.00000000E+0, 0.20637836E+4, 0.188E+3, 0.300E+1, 0.96620000E+0, + 0.00000000E+0, 0.94042740E+3, 0.188E+3, 0.400E+1, 0.96620000E+0, 0.00000000E+0, 0.56781070E+3, + 0.188E+3, 0.500E+1, 0.96620000E+0, 0.00000000E+0, 0.35548600E+3, 0.188E+3, 0.600E+1, + 0.96620000E+0, 0.00000000E+0, 0.23551600E+3, 0.188E+3, 0.700E+1, 0.96620000E+0, 0.00000000E+0, + 0.17184720E+3, 0.188E+3, 0.800E+1, 0.96620000E+0, 0.00000000E+0, 0.12619530E+3, 0.188E+3, + 0.900E+1, 0.96620000E+0, 0.00000000E+0, 0.94703500E+2, 0.188E+3, 0.100E+2, 0.96620000E+0, + 0.00000000E+0, 0.24334034E+4, 0.188E+3, 0.110E+2, 0.96620000E+0, 0.00000000E+0, 0.15570501E+4, + 0.188E+3, 0.120E+2, 0.96620000E+0, 0.00000000E+0, 0.13544541E+4, 0.188E+3, 0.130E+2, + 0.96620000E+0, 0.00000000E+0, 0.98580450E+3, 0.188E+3, 0.140E+2, 0.96620000E+0, 0.00000000E+0, + 0.72244190E+3, 0.188E+3, 0.150E+2, 0.96620000E+0, 0.00000000E+0, 0.57742680E+3, 0.188E+3, + 0.160E+2, 0.96620000E+0, 0.00000000E+0, 0.45525930E+3, 0.188E+3, 0.170E+2, 0.96620000E+0, + 0.00000000E+0, 0.36144930E+3, 0.188E+3, 0.180E+2, 0.96620000E+0, 0.00000000E+0, 0.42189528E+4, + 0.188E+3, 0.190E+2, 0.96620000E+0, 0.00000000E+0, 0.29555781E+4, 0.188E+3, 0.200E+2, + 0.96620000E+0, 0.00000000E+0, 0.23628855E+4, 0.188E+3, 0.210E+2, 0.96620000E+0, 0.00000000E+0, + 0.22256317E+4, 0.188E+3, 0.220E+2, 0.96620000E+0, 0.00000000E+0, 0.20060593E+4, 0.188E+3, + 0.230E+2, 0.96620000E+0, 0.00000000E+0, 0.15850984E+4, 0.188E+3, 0.240E+2, 0.96620000E+0, + 0.00000000E+0, 0.16883164E+4, 0.188E+3, 0.250E+2, 0.96620000E+0, 0.00000000E+0, 0.13245409E+4, + 0.188E+3, 0.260E+2, 0.96620000E+0, 0.00000000E+0, 0.13487863E+4, 0.188E+3, 0.270E+2, + 0.96620000E+0, 0.00000000E+0, 0.14111951E+4, 0.188E+3, 0.280E+2, 0.96620000E+0, 0.00000000E+0, + 0.10878878E+4, 0.188E+3, 0.290E+2, 0.96620000E+0, 0.00000000E+0, 0.10558450E+4, 0.188E+3, + 0.300E+2, 0.96620000E+0, 0.00000000E+0, 0.12726682E+4, 0.188E+3, 0.310E+2, 0.96620000E+0, + 0.00000000E+0, 0.10532146E+4, 0.188E+3, 0.320E+2, 0.96620000E+0, 0.00000000E+0, 0.85217950E+3, + 0.188E+3, 0.330E+2, 0.96620000E+0, 0.00000000E+0, 0.74155110E+3, 0.188E+3, 0.340E+2, + 0.96620000E+0, 0.00000000E+0, 0.62920990E+3, 0.188E+3, 0.350E+2, 0.96620000E+0, 0.00000000E+0, + 0.53228900E+3, 0.188E+3, 0.360E+2, 0.96620000E+0, 0.00000000E+0, 0.46920594E+4, 0.188E+3, + 0.370E+2, 0.96620000E+0, 0.00000000E+0, 0.35533992E+4, 0.188E+3, 0.380E+2, 0.96620000E+0, + 0.00000000E+0, 0.29477908E+4, 0.188E+3, 0.390E+2, 0.96620000E+0, 0.00000000E+0, 0.25643290E+4, + 0.188E+3, 0.400E+2, 0.96620000E+0, 0.00000000E+0, 0.22922709E+4, 0.188E+3, 0.410E+2, + 0.96620000E+0, 0.00000000E+0, 0.17126002E+4, 0.188E+3, 0.420E+2, 0.96620000E+0, 0.00000000E+0, + 0.19349917E+4, 0.188E+3, 0.430E+2, 0.96620000E+0, 0.00000000E+0, 0.14205909E+4, 0.188E+3, + 0.440E+2, 0.96620000E+0, 0.00000000E+0, 0.15449801E+4, 0.188E+3, 0.450E+2, 0.96620000E+0, + 0.00000000E+0, 0.14136504E+4, 0.188E+3, 0.460E+2, 0.96620000E+0, 0.00000000E+0, 0.11968365E+4, + 0.188E+3, 0.470E+2, 0.96620000E+0, 0.00000000E+0, 0.12247085E+4, 0.188E+3, 0.480E+2, + 0.96620000E+0, 0.00000000E+0, 0.16042050E+4, 0.188E+3, 0.490E+2, 0.96620000E+0, 0.00000000E+0, + 0.14037977E+4, 0.188E+3, 0.500E+2, 0.96620000E+0, 0.00000000E+0, 0.11915335E+4, 0.188E+3, + 0.510E+2, 0.96620000E+0, 0.00000000E+0, 0.10753755E+4, 0.188E+3, 0.520E+2, 0.96620000E+0, + 0.00000000E+0, 0.94459510E+3, 0.188E+3, 0.530E+2, 0.96620000E+0, 0.00000000E+0, 0.82692720E+3, + 0.188E+3, 0.540E+2, 0.96620000E+0, 0.00000000E+0, 0.57528877E+4, 0.188E+3, 0.550E+2, + 0.96620000E+0, 0.00000000E+0, 0.46383134E+4, 0.188E+3, 0.560E+2, 0.96620000E+0, 0.00000000E+0, + 0.38532093E+4, 0.188E+3, 0.570E+2, 0.96620000E+0, 0.00000000E+0, 0.14235132E+4, 0.188E+3, + 0.580E+2, 0.96620000E+0, 0.27991000E+1, 0.40407923E+4, 0.188E+3, 0.590E+2, 0.96620000E+0, + 0.00000000E+0, 0.38327972E+4, 0.188E+3, 0.600E+2, 0.96620000E+0, 0.00000000E+0, 0.37253298E+4, + 0.188E+3, 0.610E+2, 0.96620000E+0, 0.00000000E+0, 0.36276787E+4, 0.188E+3, 0.620E+2, + 0.96620000E+0, 0.00000000E+0, 0.35407934E+4, 0.188E+3, 0.630E+2, 0.96620000E+0, 0.00000000E+0, + 0.26359841E+4, 0.188E+3, 0.640E+2, 0.96620000E+0, 0.00000000E+0, 0.32830964E+4, 0.188E+3, + 0.650E+2, 0.96620000E+0, 0.00000000E+0, 0.31457261E+4, 0.188E+3, 0.660E+2, 0.96620000E+0, + 0.00000000E+0, 0.31446702E+4, 0.188E+3, 0.670E+2, 0.96620000E+0, 0.00000000E+0, 0.30720386E+4, + 0.188E+3, 0.680E+2, 0.96620000E+0, 0.00000000E+0, 0.30045907E+4, 0.188E+3, 0.690E+2, + 0.96620000E+0, 0.00000000E+0, 0.29758018E+4, 0.188E+3, 0.700E+2, 0.96620000E+0, 0.00000000E+0, + 0.24223257E+4, 0.188E+3, 0.710E+2, 0.96620000E+0, 0.00000000E+0, 0.22460574E+4, 0.188E+3, + 0.720E+2, 0.96620000E+0, 0.00000000E+0, 0.19858562E+4, 0.188E+3, 0.730E+2, 0.96620000E+0, + 0.00000000E+0, 0.16449966E+4, 0.188E+3, 0.740E+2, 0.96620000E+0, 0.00000000E+0, 0.16502454E+4, + 0.188E+3, 0.750E+2, 0.96620000E+0, 0.00000000E+0, 0.14557663E+4, 0.188E+3, 0.760E+2, + 0.96620000E+0, 0.00000000E+0, 0.13051372E+4, 0.188E+3, 0.770E+2, 0.96620000E+0, 0.00000000E+0, + 0.10638806E+4, 0.188E+3, 0.780E+2, 0.96620000E+0, 0.00000000E+0, 0.98600810E+3, 0.188E+3, + 0.790E+2, 0.96620000E+0, 0.00000000E+0, 0.10014312E+4, 0.188E+3, 0.800E+2, 0.96620000E+0, + 0.00000000E+0, 0.16367789E+4, 0.188E+3, 0.810E+2, 0.96620000E+0, 0.00000000E+0, 0.15272655E+4, + 0.188E+3, 0.820E+2, 0.96620000E+0, 0.00000000E+0, 0.13408219E+4, 0.188E+3, 0.830E+2, + 0.96620000E+0, 0.00000000E+0, 0.12476338E+4, 0.188E+3, 0.840E+2, 0.96620000E+0, 0.00000000E+0, + 0.11190260E+4, 0.188E+3, 0.850E+2, 0.96620000E+0, 0.00000000E+0, 0.10003262E+4, 0.188E+3, + 0.860E+2, 0.96620000E+0, 0.00000000E+0, 0.51851636E+4, 0.188E+3, 0.870E+2, 0.96620000E+0, + 0.00000000E+0, 0.44613947E+4, 0.188E+3, 0.880E+2, 0.96620000E+0, 0.00000000E+0, 0.37411085E+4, + 0.188E+3, 0.890E+2, 0.96620000E+0, 0.00000000E+0, 0.31788167E+4, 0.188E+3, 0.900E+2, + 0.96620000E+0, 0.00000000E+0, 0.32553913E+4, 0.188E+3, 0.910E+2, 0.96620000E+0, 0.00000000E+0, + 0.31461615E+4, 0.188E+3, 0.920E+2, 0.96620000E+0, 0.00000000E+0, 0.33483818E+4, 0.188E+3, + 0.930E+2, 0.96620000E+0, 0.00000000E+0, 0.32202388E+4, 0.188E+3, 0.940E+2, 0.96620000E+0, + 0.00000000E+0, 0.14255890E+3, 0.188E+3, 0.101E+3, 0.96620000E+0, 0.00000000E+0, 0.53986610E+3, + 0.188E+3, 0.103E+3, 0.96620000E+0, 0.98650000E+0, 0.67929310E+3, 0.188E+3, 0.104E+3, + 0.96620000E+0, 0.98080000E+0, 0.46840690E+3, 0.188E+3, 0.105E+3, 0.96620000E+0, 0.97060000E+0, + 0.33516710E+3, 0.188E+3, 0.106E+3, 0.96620000E+0, 0.98680000E+0, 0.21993730E+3, 0.188E+3, + 0.107E+3, 0.96620000E+0, 0.99440000E+0, 0.15284480E+3, 0.188E+3, 0.108E+3, 0.96620000E+0, + 0.99250000E+0, 0.99280200E+2, 0.188E+3, 0.109E+3, 0.96620000E+0, 0.99820000E+0, 0.80746090E+3, + 0.188E+3, 0.111E+3, 0.96620000E+0, 0.96840000E+0, 0.12655466E+4, 0.188E+3, 0.112E+3, + 0.96620000E+0, 0.96280000E+0, 0.12114303E+4, 0.188E+3, 0.113E+3, 0.96620000E+0, 0.96480000E+0, + 0.90234430E+3, 0.188E+3, 0.114E+3, 0.96620000E+0, 0.95070000E+0, 0.70028070E+3, 0.188E+3, + 0.115E+3, 0.96620000E+0, 0.99470000E+0, 0.57180250E+3, 0.188E+3, 0.116E+3, 0.96620000E+0, + 0.99480000E+0, 0.45094310E+3, 0.188E+3, 0.117E+3, 0.96620000E+0, 0.99720000E+0, 0.10806042E+4, + 0.188E+3, 0.119E+3, 0.96620000E+0, 0.97670000E+0, 0.24004019E+4, 0.188E+3, 0.120E+3, + 0.96620000E+0, 0.98310000E+0, 0.10031278E+4, 0.188E+3, 0.121E+3, 0.96620000E+0, 0.18627000E+1, + 0.97117090E+3, 0.188E+3, 0.122E+3, 0.96620000E+0, 0.18299000E+1, 0.95238070E+3, 0.188E+3, + 0.123E+3, 0.96620000E+0, 0.19138000E+1, 0.95158400E+3, 0.188E+3, 0.124E+3, 0.96620000E+0, + 0.18269000E+1, 0.83982780E+3, 0.188E+3, 0.125E+3, 0.96620000E+0, 0.16406000E+1, 0.76965310E+3, + 0.188E+3, 0.126E+3, 0.96620000E+0, 0.16483000E+1, 0.73532570E+3, 0.188E+3, 0.127E+3, + 0.96620000E+0, 0.17149000E+1, 0.72111550E+3, 0.188E+3, 0.128E+3, 0.96620000E+0, 0.17937000E+1, + 0.73354280E+3, 0.188E+3, 0.129E+3, 0.96620000E+0, 0.95760000E+0, 0.65214040E+3, 0.188E+3, + 0.130E+3, 0.96620000E+0, 0.19419000E+1, 0.11763896E+4, 0.188E+3, 0.131E+3, 0.96620000E+0, + 0.96010000E+0, 0.97240690E+3, 0.188E+3, 0.132E+3, 0.96620000E+0, 0.94340000E+0, 0.83549110E+3, + 0.188E+3, 0.133E+3, 0.96620000E+0, 0.98890000E+0, 0.74234170E+3, 0.188E+3, 0.134E+3, + 0.96620000E+0, 0.99010000E+0, 0.63468070E+3, 0.188E+3, 0.135E+3, 0.96620000E+0, 0.99740000E+0, + 0.12751297E+4, 0.188E+3, 0.137E+3, 0.96620000E+0, 0.97380000E+0, 0.29585401E+4, 0.188E+3, + 0.138E+3, 0.96620000E+0, 0.98010000E+0, 0.20352098E+4, 0.188E+3, 0.139E+3, 0.96620000E+0, + 0.19153000E+1, 0.13434836E+4, 0.188E+3, 0.140E+3, 0.96620000E+0, 0.19355000E+1, 0.13539176E+4, + 0.188E+3, 0.141E+3, 0.96620000E+0, 0.19545000E+1, 0.12515281E+4, 0.188E+3, 0.142E+3, + 0.96620000E+0, 0.19420000E+1, 0.14858293E+4, 0.188E+3, 0.143E+3, 0.96620000E+0, 0.16682000E+1, + 0.10500362E+4, 0.188E+3, 0.144E+3, 0.96620000E+0, 0.18584000E+1, 0.98072260E+3, 0.188E+3, + 0.145E+3, 0.96620000E+0, 0.19003000E+1, 0.90551290E+3, 0.188E+3, 0.146E+3, 0.96620000E+0, + 0.18630000E+1, 0.88003940E+3, 0.188E+3, 0.147E+3, 0.96620000E+0, 0.96790000E+0, 0.84398030E+3, + 0.188E+3, 0.148E+3, 0.96620000E+0, 0.19539000E+1, 0.15005632E+4, 0.188E+3, 0.149E+3, + 0.96620000E+0, 0.96330000E+0, 0.12849412E+4, 0.188E+3, 0.150E+3, 0.96620000E+0, 0.95140000E+0, + 0.11605961E+4, 0.188E+3, 0.151E+3, 0.96620000E+0, 0.97490000E+0, 0.10727423E+4, 0.188E+3, + 0.152E+3, 0.96620000E+0, 0.98110000E+0, 0.95386310E+3, 0.188E+3, 0.153E+3, 0.96620000E+0, + 0.99680000E+0, 0.14475205E+4, 0.188E+3, 0.155E+3, 0.96620000E+0, 0.99090000E+0, 0.39627043E+4, + 0.188E+3, 0.156E+3, 0.96620000E+0, 0.97970000E+0, 0.26130493E+4, 0.188E+3, 0.157E+3, + 0.96620000E+0, 0.19373000E+1, 0.13768762E+4, 0.188E+3, 0.159E+3, 0.96620000E+0, 0.29425000E+1, + 0.13474829E+4, 0.188E+3, 0.160E+3, 0.96620000E+0, 0.29455000E+1, 0.13018447E+4, 0.188E+3, + 0.161E+3, 0.96620000E+0, 0.29413000E+1, 0.13198844E+4, 0.188E+3, 0.162E+3, 0.96620000E+0, + 0.29300000E+1, 0.13036758E+4, 0.188E+3, 0.163E+3, 0.96620000E+0, 0.18286000E+1, 0.13293323E+4, + 0.188E+3, 0.164E+3, 0.96620000E+0, 0.28732000E+1, 0.12401840E+4, 0.188E+3, 0.165E+3, + 0.96620000E+0, 0.29086000E+1, 0.12827144E+4, 0.188E+3, 0.166E+3, 0.96620000E+0, 0.28965000E+1, + 0.11691884E+4, 0.188E+3, 0.167E+3, 0.96620000E+0, 0.29242000E+1, 0.11330697E+4, 0.188E+3, + 0.168E+3, 0.96620000E+0, 0.29282000E+1, 0.11279011E+4, 0.188E+3, 0.169E+3, 0.96620000E+0, + 0.29246000E+1, 0.11968168E+4, 0.188E+3, 0.170E+3, 0.96620000E+0, 0.28482000E+1, 0.10857933E+4, + 0.188E+3, 0.171E+3, 0.96620000E+0, 0.29219000E+1, 0.16232598E+4, 0.188E+3, 0.172E+3, + 0.96620000E+0, 0.19254000E+1, 0.14589496E+4, 0.188E+3, 0.173E+3, 0.96620000E+0, 0.19459000E+1, + 0.12878783E+4, 0.188E+3, 0.174E+3, 0.96620000E+0, 0.19292000E+1, 0.13411577E+4, 0.188E+3, + 0.175E+3, 0.96620000E+0, 0.18104000E+1, 0.10896139E+4, 0.188E+3, 0.176E+3, 0.96620000E+0, + 0.18858000E+1, 0.10148760E+4, 0.188E+3, 0.177E+3, 0.96620000E+0, 0.18648000E+1, 0.96392390E+3, + 0.188E+3, 0.178E+3, 0.96620000E+0, 0.19188000E+1, 0.92374840E+3, 0.188E+3, 0.179E+3, + 0.96620000E+0, 0.98460000E+0, 0.86831320E+3, 0.188E+3, 0.180E+3, 0.96620000E+0, 0.19896000E+1, + 0.16036402E+4, 0.188E+3, 0.181E+3, 0.96620000E+0, 0.92670000E+0, 0.13818325E+4, 0.188E+3, + 0.182E+3, 0.96620000E+0, 0.93830000E+0, 0.13022054E+4, 0.188E+3, 0.183E+3, 0.96620000E+0, + 0.98200000E+0, 0.12430479E+4, 0.188E+3, 0.184E+3, 0.96620000E+0, 0.98150000E+0, 0.11320728E+4, + 0.188E+3, 0.185E+3, 0.96620000E+0, 0.99540000E+0, 0.16245332E+4, 0.188E+3, 0.187E+3, + 0.96620000E+0, 0.97050000E+0, 0.37875943E+4, 0.188E+3, 0.188E+3, 0.96620000E+0, 0.96620000E+0, + 0.51107300E+2, 0.189E+3, 0.100E+1, 0.29070000E+1, 0.91180000E+0, 0.33639800E+2, 0.189E+3, + 0.200E+1, 0.29070000E+1, 0.00000000E+0, 0.80602430E+3, 0.189E+3, 0.300E+1, 0.29070000E+1, + 0.00000000E+0, 0.46302300E+3, 0.189E+3, 0.400E+1, 0.29070000E+1, 0.00000000E+0, 0.31058590E+3, + 0.189E+3, 0.500E+1, 0.29070000E+1, 0.00000000E+0, 0.20918580E+3, 0.189E+3, 0.600E+1, + 0.29070000E+1, 0.00000000E+0, 0.14595370E+3, 0.189E+3, 0.700E+1, 0.29070000E+1, 0.00000000E+0, + 0.11033330E+3, 0.189E+3, 0.800E+1, 0.29070000E+1, 0.00000000E+0, 0.83476100E+2, 0.189E+3, + 0.900E+1, 0.29070000E+1, 0.00000000E+0, 0.64144300E+2, 0.189E+3, 0.100E+2, 0.29070000E+1, + 0.00000000E+0, 0.96353500E+3, 0.189E+3, 0.110E+2, 0.29070000E+1, 0.00000000E+0, 0.73854190E+3, + 0.189E+3, 0.120E+2, 0.29070000E+1, 0.00000000E+0, 0.67947260E+3, 0.189E+3, 0.130E+2, + 0.29070000E+1, 0.00000000E+0, 0.53394560E+3, 0.189E+3, 0.140E+2, 0.29070000E+1, 0.00000000E+0, + 0.41534530E+3, 0.189E+3, 0.150E+2, 0.29070000E+1, 0.00000000E+0, 0.34413770E+3, 0.189E+3, + 0.160E+2, 0.29070000E+1, 0.00000000E+0, 0.28065670E+3, 0.189E+3, 0.170E+2, 0.29070000E+1, + 0.00000000E+0, 0.22928490E+3, 0.189E+3, 0.180E+2, 0.29070000E+1, 0.00000000E+0, 0.15796611E+4, + 0.189E+3, 0.190E+2, 0.29070000E+1, 0.00000000E+0, 0.12998428E+4, 0.189E+3, 0.200E+2, + 0.29070000E+1, 0.00000000E+0, 0.10730233E+4, 0.189E+3, 0.210E+2, 0.29070000E+1, 0.00000000E+0, + 0.10353252E+4, 0.189E+3, 0.220E+2, 0.29070000E+1, 0.00000000E+0, 0.94761900E+3, 0.189E+3, + 0.230E+2, 0.29070000E+1, 0.00000000E+0, 0.74630200E+3, 0.189E+3, 0.240E+2, 0.29070000E+1, + 0.00000000E+0, 0.81529190E+3, 0.189E+3, 0.250E+2, 0.29070000E+1, 0.00000000E+0, 0.63968180E+3, + 0.189E+3, 0.260E+2, 0.29070000E+1, 0.00000000E+0, 0.67745550E+3, 0.189E+3, 0.270E+2, + 0.29070000E+1, 0.00000000E+0, 0.69823130E+3, 0.189E+3, 0.280E+2, 0.29070000E+1, 0.00000000E+0, + 0.53518630E+3, 0.189E+3, 0.290E+2, 0.29070000E+1, 0.00000000E+0, 0.54868120E+3, 0.189E+3, + 0.300E+2, 0.29070000E+1, 0.00000000E+0, 0.65023470E+3, 0.189E+3, 0.310E+2, 0.29070000E+1, + 0.00000000E+0, 0.57221090E+3, 0.189E+3, 0.320E+2, 0.29070000E+1, 0.00000000E+0, 0.48704720E+3, + 0.189E+3, 0.330E+2, 0.29070000E+1, 0.00000000E+0, 0.43643770E+3, 0.189E+3, 0.340E+2, + 0.29070000E+1, 0.00000000E+0, 0.38138700E+3, 0.189E+3, 0.350E+2, 0.29070000E+1, 0.00000000E+0, + 0.33123010E+3, 0.189E+3, 0.360E+2, 0.29070000E+1, 0.00000000E+0, 0.17697228E+4, 0.189E+3, + 0.370E+2, 0.29070000E+1, 0.00000000E+0, 0.15487458E+4, 0.189E+3, 0.380E+2, 0.29070000E+1, + 0.00000000E+0, 0.13545806E+4, 0.189E+3, 0.390E+2, 0.29070000E+1, 0.00000000E+0, 0.12161834E+4, + 0.189E+3, 0.400E+2, 0.29070000E+1, 0.00000000E+0, 0.11081864E+4, 0.189E+3, 0.410E+2, + 0.29070000E+1, 0.00000000E+0, 0.85438760E+3, 0.189E+3, 0.420E+2, 0.29070000E+1, 0.00000000E+0, + 0.95376820E+3, 0.189E+3, 0.430E+2, 0.29070000E+1, 0.00000000E+0, 0.72552720E+3, 0.189E+3, + 0.440E+2, 0.29070000E+1, 0.00000000E+0, 0.79314780E+3, 0.189E+3, 0.450E+2, 0.29070000E+1, + 0.00000000E+0, 0.73516550E+3, 0.189E+3, 0.460E+2, 0.29070000E+1, 0.00000000E+0, 0.61302710E+3, + 0.189E+3, 0.470E+2, 0.29070000E+1, 0.00000000E+0, 0.64739340E+3, 0.189E+3, 0.480E+2, + 0.29070000E+1, 0.00000000E+0, 0.81366740E+3, 0.189E+3, 0.490E+2, 0.29070000E+1, 0.00000000E+0, + 0.75110850E+3, 0.189E+3, 0.500E+2, 0.29070000E+1, 0.00000000E+0, 0.66812780E+3, 0.189E+3, + 0.510E+2, 0.29070000E+1, 0.00000000E+0, 0.61915920E+3, 0.189E+3, 0.520E+2, 0.29070000E+1, + 0.00000000E+0, 0.55909410E+3, 0.189E+3, 0.530E+2, 0.29070000E+1, 0.00000000E+0, 0.50201500E+3, + 0.189E+3, 0.540E+2, 0.29070000E+1, 0.00000000E+0, 0.21555972E+4, 0.189E+3, 0.550E+2, + 0.29070000E+1, 0.00000000E+0, 0.19751996E+4, 0.189E+3, 0.560E+2, 0.29070000E+1, 0.00000000E+0, + 0.17327032E+4, 0.189E+3, 0.570E+2, 0.29070000E+1, 0.00000000E+0, 0.78954030E+3, 0.189E+3, + 0.580E+2, 0.29070000E+1, 0.27991000E+1, 0.17491123E+4, 0.189E+3, 0.590E+2, 0.29070000E+1, + 0.00000000E+0, 0.16792118E+4, 0.189E+3, 0.600E+2, 0.29070000E+1, 0.00000000E+0, 0.16369858E+4, + 0.189E+3, 0.610E+2, 0.29070000E+1, 0.00000000E+0, 0.15981651E+4, 0.189E+3, 0.620E+2, + 0.29070000E+1, 0.00000000E+0, 0.15637364E+4, 0.189E+3, 0.630E+2, 0.29070000E+1, 0.00000000E+0, + 0.12273570E+4, 0.189E+3, 0.640E+2, 0.29070000E+1, 0.00000000E+0, 0.13851029E+4, 0.189E+3, + 0.650E+2, 0.29070000E+1, 0.00000000E+0, 0.13354249E+4, 0.189E+3, 0.660E+2, 0.29070000E+1, + 0.00000000E+0, 0.14098902E+4, 0.189E+3, 0.670E+2, 0.29070000E+1, 0.00000000E+0, 0.13799203E+4, + 0.189E+3, 0.680E+2, 0.29070000E+1, 0.00000000E+0, 0.13528654E+4, 0.189E+3, 0.690E+2, + 0.29070000E+1, 0.00000000E+0, 0.13371510E+4, 0.189E+3, 0.700E+2, 0.29070000E+1, 0.00000000E+0, + 0.11251350E+4, 0.189E+3, 0.710E+2, 0.29070000E+1, 0.00000000E+0, 0.11047547E+4, 0.189E+3, + 0.720E+2, 0.29070000E+1, 0.00000000E+0, 0.10070882E+4, 0.189E+3, 0.730E+2, 0.29070000E+1, + 0.00000000E+0, 0.84953530E+3, 0.189E+3, 0.740E+2, 0.29070000E+1, 0.00000000E+0, 0.86391120E+3, + 0.189E+3, 0.750E+2, 0.29070000E+1, 0.00000000E+0, 0.78218420E+3, 0.189E+3, 0.760E+2, + 0.29070000E+1, 0.00000000E+0, 0.71574490E+3, 0.189E+3, 0.770E+2, 0.29070000E+1, 0.00000000E+0, + 0.59397880E+3, 0.189E+3, 0.780E+2, 0.29070000E+1, 0.00000000E+0, 0.55473410E+3, 0.189E+3, + 0.790E+2, 0.29070000E+1, 0.00000000E+0, 0.57048480E+3, 0.189E+3, 0.800E+2, 0.29070000E+1, + 0.00000000E+0, 0.83486440E+3, 0.189E+3, 0.810E+2, 0.29070000E+1, 0.00000000E+0, 0.81522210E+3, + 0.189E+3, 0.820E+2, 0.29070000E+1, 0.00000000E+0, 0.74786620E+3, 0.189E+3, 0.830E+2, + 0.29070000E+1, 0.00000000E+0, 0.71256000E+3, 0.189E+3, 0.840E+2, 0.29070000E+1, 0.00000000E+0, + 0.65680530E+3, 0.189E+3, 0.850E+2, 0.29070000E+1, 0.00000000E+0, 0.60129860E+3, 0.189E+3, + 0.860E+2, 0.29070000E+1, 0.00000000E+0, 0.20330823E+4, 0.189E+3, 0.870E+2, 0.29070000E+1, + 0.00000000E+0, 0.19515778E+4, 0.189E+3, 0.880E+2, 0.29070000E+1, 0.00000000E+0, 0.17226039E+4, + 0.189E+3, 0.890E+2, 0.29070000E+1, 0.00000000E+0, 0.15452383E+4, 0.189E+3, 0.900E+2, + 0.29070000E+1, 0.00000000E+0, 0.15354151E+4, 0.189E+3, 0.910E+2, 0.29070000E+1, 0.00000000E+0, + 0.14866193E+4, 0.189E+3, 0.920E+2, 0.29070000E+1, 0.00000000E+0, 0.15322963E+4, 0.189E+3, + 0.930E+2, 0.29070000E+1, 0.00000000E+0, 0.14835856E+4, 0.189E+3, 0.940E+2, 0.29070000E+1, + 0.00000000E+0, 0.82527300E+2, 0.189E+3, 0.101E+3, 0.29070000E+1, 0.00000000E+0, 0.26898140E+3, + 0.189E+3, 0.103E+3, 0.29070000E+1, 0.98650000E+0, 0.34282380E+3, 0.189E+3, 0.104E+3, + 0.29070000E+1, 0.98080000E+0, 0.26102340E+3, 0.189E+3, 0.105E+3, 0.29070000E+1, 0.97060000E+0, + 0.19621380E+3, 0.189E+3, 0.106E+3, 0.29070000E+1, 0.98680000E+0, 0.13608950E+3, 0.189E+3, + 0.107E+3, 0.29070000E+1, 0.99440000E+0, 0.98908000E+2, 0.189E+3, 0.108E+3, 0.29070000E+1, + 0.99250000E+0, 0.67858600E+2, 0.189E+3, 0.109E+3, 0.29070000E+1, 0.99820000E+0, 0.39343830E+3, + 0.189E+3, 0.111E+3, 0.29070000E+1, 0.96840000E+0, 0.60867090E+3, 0.189E+3, 0.112E+3, + 0.29070000E+1, 0.96280000E+0, 0.61547850E+3, 0.189E+3, 0.113E+3, 0.29070000E+1, 0.96480000E+0, + 0.49327920E+3, 0.189E+3, 0.114E+3, 0.29070000E+1, 0.95070000E+0, 0.40312400E+3, 0.189E+3, + 0.115E+3, 0.29070000E+1, 0.99470000E+0, 0.34035860E+3, 0.189E+3, 0.116E+3, 0.29070000E+1, + 0.99480000E+0, 0.27775450E+3, 0.189E+3, 0.117E+3, 0.29070000E+1, 0.99720000E+0, 0.54150520E+3, + 0.189E+3, 0.119E+3, 0.29070000E+1, 0.97670000E+0, 0.10393542E+4, 0.189E+3, 0.120E+3, + 0.29070000E+1, 0.98310000E+0, 0.54062540E+3, 0.189E+3, 0.121E+3, 0.29070000E+1, 0.18627000E+1, + 0.52182910E+3, 0.189E+3, 0.122E+3, 0.29070000E+1, 0.18299000E+1, 0.51141880E+3, 0.189E+3, + 0.123E+3, 0.29070000E+1, 0.19138000E+1, 0.50681950E+3, 0.189E+3, 0.124E+3, 0.29070000E+1, + 0.18269000E+1, 0.46576900E+3, 0.189E+3, 0.125E+3, 0.29070000E+1, 0.16406000E+1, 0.43087900E+3, + 0.189E+3, 0.126E+3, 0.29070000E+1, 0.16483000E+1, 0.41102320E+3, 0.189E+3, 0.127E+3, + 0.29070000E+1, 0.17149000E+1, 0.40187340E+3, 0.189E+3, 0.128E+3, 0.29070000E+1, 0.17937000E+1, + 0.39745630E+3, 0.189E+3, 0.129E+3, 0.29070000E+1, 0.95760000E+0, 0.37225130E+3, 0.189E+3, + 0.130E+3, 0.29070000E+1, 0.19419000E+1, 0.61037340E+3, 0.189E+3, 0.131E+3, 0.29070000E+1, + 0.96010000E+0, 0.53502330E+3, 0.189E+3, 0.132E+3, 0.29070000E+1, 0.94340000E+0, 0.47872210E+3, + 0.189E+3, 0.133E+3, 0.29070000E+1, 0.98890000E+0, 0.43661290E+3, 0.189E+3, 0.134E+3, + 0.29070000E+1, 0.99010000E+0, 0.38406800E+3, 0.189E+3, 0.135E+3, 0.29070000E+1, 0.99740000E+0, + 0.64577530E+3, 0.189E+3, 0.137E+3, 0.29070000E+1, 0.97380000E+0, 0.12648795E+4, 0.189E+3, + 0.138E+3, 0.29070000E+1, 0.98010000E+0, 0.96384860E+3, 0.189E+3, 0.139E+3, 0.29070000E+1, + 0.19153000E+1, 0.71506360E+3, 0.189E+3, 0.140E+3, 0.29070000E+1, 0.19355000E+1, 0.72218160E+3, + 0.189E+3, 0.141E+3, 0.29070000E+1, 0.19545000E+1, 0.67303520E+3, 0.189E+3, 0.142E+3, + 0.29070000E+1, 0.19420000E+1, 0.75600910E+3, 0.189E+3, 0.143E+3, 0.29070000E+1, 0.16682000E+1, + 0.58589660E+3, 0.189E+3, 0.144E+3, 0.29070000E+1, 0.18584000E+1, 0.54801980E+3, 0.189E+3, + 0.145E+3, 0.29070000E+1, 0.19003000E+1, 0.50873460E+3, 0.189E+3, 0.146E+3, 0.29070000E+1, + 0.18630000E+1, 0.49222520E+3, 0.189E+3, 0.147E+3, 0.29070000E+1, 0.96790000E+0, 0.48648840E+3, + 0.189E+3, 0.148E+3, 0.29070000E+1, 0.19539000E+1, 0.77511410E+3, 0.189E+3, 0.149E+3, + 0.29070000E+1, 0.96330000E+0, 0.69994150E+3, 0.189E+3, 0.150E+3, 0.29070000E+1, 0.95140000E+0, + 0.65463420E+3, 0.189E+3, 0.151E+3, 0.29070000E+1, 0.97490000E+0, 0.61866240E+3, 0.189E+3, + 0.152E+3, 0.29070000E+1, 0.98110000E+0, 0.56435520E+3, 0.189E+3, 0.153E+3, 0.29070000E+1, + 0.99680000E+0, 0.76265600E+3, 0.189E+3, 0.155E+3, 0.29070000E+1, 0.99090000E+0, 0.16407829E+4, + 0.189E+3, 0.156E+3, 0.29070000E+1, 0.97970000E+0, 0.12201975E+4, 0.189E+3, 0.157E+3, + 0.29070000E+1, 0.19373000E+1, 0.76564160E+3, 0.189E+3, 0.159E+3, 0.29070000E+1, 0.29425000E+1, + 0.74979030E+3, 0.189E+3, 0.160E+3, 0.29070000E+1, 0.29455000E+1, 0.72595040E+3, 0.189E+3, + 0.161E+3, 0.29070000E+1, 0.29413000E+1, 0.72971000E+3, 0.189E+3, 0.162E+3, 0.29070000E+1, + 0.29300000E+1, 0.70402290E+3, 0.189E+3, 0.163E+3, 0.29070000E+1, 0.18286000E+1, 0.73440270E+3, + 0.189E+3, 0.164E+3, 0.29070000E+1, 0.28732000E+1, 0.68961450E+3, 0.189E+3, 0.165E+3, + 0.29070000E+1, 0.29086000E+1, 0.70203220E+3, 0.189E+3, 0.166E+3, 0.29070000E+1, 0.28965000E+1, + 0.65440840E+3, 0.189E+3, 0.167E+3, 0.29070000E+1, 0.29242000E+1, 0.63570180E+3, 0.189E+3, + 0.168E+3, 0.29070000E+1, 0.29282000E+1, 0.63167050E+3, 0.189E+3, 0.169E+3, 0.29070000E+1, + 0.29246000E+1, 0.66425610E+3, 0.189E+3, 0.170E+3, 0.29070000E+1, 0.28482000E+1, 0.61046730E+3, + 0.189E+3, 0.171E+3, 0.29070000E+1, 0.29219000E+1, 0.82974450E+3, 0.189E+3, 0.172E+3, + 0.29070000E+1, 0.19254000E+1, 0.76921560E+3, 0.189E+3, 0.173E+3, 0.29070000E+1, 0.19459000E+1, + 0.70102290E+3, 0.189E+3, 0.174E+3, 0.29070000E+1, 0.19292000E+1, 0.71006080E+3, 0.189E+3, + 0.175E+3, 0.29070000E+1, 0.18104000E+1, 0.61988720E+3, 0.189E+3, 0.176E+3, 0.29070000E+1, + 0.18858000E+1, 0.58290540E+3, 0.189E+3, 0.177E+3, 0.29070000E+1, 0.18648000E+1, 0.55659850E+3, + 0.189E+3, 0.178E+3, 0.29070000E+1, 0.19188000E+1, 0.53213080E+3, 0.189E+3, 0.179E+3, + 0.29070000E+1, 0.98460000E+0, 0.51369080E+3, 0.189E+3, 0.180E+3, 0.29070000E+1, 0.19896000E+1, + 0.83188530E+3, 0.189E+3, 0.181E+3, 0.29070000E+1, 0.92670000E+0, 0.75684580E+3, 0.189E+3, + 0.182E+3, 0.29070000E+1, 0.93830000E+0, 0.73324790E+3, 0.189E+3, 0.183E+3, 0.29070000E+1, + 0.98200000E+0, 0.71262070E+3, 0.189E+3, 0.184E+3, 0.29070000E+1, 0.98150000E+0, 0.66475080E+3, + 0.189E+3, 0.185E+3, 0.29070000E+1, 0.99540000E+0, 0.85884400E+3, 0.189E+3, 0.187E+3, + 0.29070000E+1, 0.97050000E+0, 0.16304211E+4, 0.189E+3, 0.188E+3, 0.29070000E+1, 0.96620000E+0, + 0.90604480E+3, 0.189E+3, 0.189E+3, 0.29070000E+1, 0.29070000E+1, 0.58042000E+2, 0.190E+3, + 0.100E+1, 0.28844000E+1, 0.91180000E+0, 0.37717100E+2, 0.190E+3, 0.200E+1, 0.28844000E+1, + 0.00000000E+0, 0.10088719E+4, 0.190E+3, 0.300E+1, 0.28844000E+1, 0.00000000E+0, 0.54842030E+3, + 0.190E+3, 0.400E+1, 0.28844000E+1, 0.00000000E+0, 0.36005530E+3, 0.190E+3, 0.500E+1, + 0.28844000E+1, 0.00000000E+0, 0.23921200E+3, 0.190E+3, 0.600E+1, 0.28844000E+1, 0.00000000E+0, + 0.16541170E+3, 0.190E+3, 0.700E+1, 0.28844000E+1, 0.00000000E+0, 0.12432800E+3, 0.190E+3, + 0.800E+1, 0.28844000E+1, 0.00000000E+0, 0.93640800E+2, 0.190E+3, 0.900E+1, 0.28844000E+1, + 0.00000000E+0, 0.71718500E+2, 0.190E+3, 0.100E+2, 0.28844000E+1, 0.00000000E+0, 0.12017562E+4, + 0.190E+3, 0.110E+2, 0.28844000E+1, 0.00000000E+0, 0.88196280E+3, 0.190E+3, 0.120E+2, + 0.28844000E+1, 0.00000000E+0, 0.80168460E+3, 0.190E+3, 0.130E+2, 0.28844000E+1, 0.00000000E+0, + 0.62020400E+3, 0.190E+3, 0.140E+2, 0.28844000E+1, 0.00000000E+0, 0.47697090E+3, 0.190E+3, + 0.150E+2, 0.28844000E+1, 0.00000000E+0, 0.39262180E+3, 0.190E+3, 0.160E+2, 0.28844000E+1, + 0.00000000E+0, 0.31831370E+3, 0.190E+3, 0.170E+2, 0.28844000E+1, 0.00000000E+0, 0.25881200E+3, + 0.190E+3, 0.180E+2, 0.28844000E+1, 0.00000000E+0, 0.20007417E+4, 0.190E+3, 0.190E+2, + 0.28844000E+1, 0.00000000E+0, 0.15795049E+4, 0.190E+3, 0.200E+2, 0.28844000E+1, 0.00000000E+0, + 0.12941588E+4, 0.190E+3, 0.210E+2, 0.28844000E+1, 0.00000000E+0, 0.12419423E+4, 0.190E+3, + 0.220E+2, 0.28844000E+1, 0.00000000E+0, 0.11328667E+4, 0.190E+3, 0.230E+2, 0.28844000E+1, + 0.00000000E+0, 0.89296930E+3, 0.190E+3, 0.240E+2, 0.28844000E+1, 0.00000000E+0, 0.96999930E+3, + 0.190E+3, 0.250E+2, 0.28844000E+1, 0.00000000E+0, 0.76115260E+3, 0.190E+3, 0.260E+2, + 0.28844000E+1, 0.00000000E+0, 0.79925150E+3, 0.190E+3, 0.270E+2, 0.28844000E+1, 0.00000000E+0, + 0.82638550E+3, 0.190E+3, 0.280E+2, 0.28844000E+1, 0.00000000E+0, 0.63431240E+3, 0.190E+3, + 0.290E+2, 0.28844000E+1, 0.00000000E+0, 0.64280130E+3, 0.190E+3, 0.300E+2, 0.28844000E+1, + 0.00000000E+0, 0.76433880E+3, 0.190E+3, 0.310E+2, 0.28844000E+1, 0.00000000E+0, 0.66430070E+3, + 0.190E+3, 0.320E+2, 0.28844000E+1, 0.00000000E+0, 0.55996260E+3, 0.190E+3, 0.330E+2, + 0.28844000E+1, 0.00000000E+0, 0.49907290E+3, 0.190E+3, 0.340E+2, 0.28844000E+1, 0.00000000E+0, + 0.43384090E+3, 0.190E+3, 0.350E+2, 0.28844000E+1, 0.00000000E+0, 0.37508740E+3, 0.190E+3, + 0.360E+2, 0.28844000E+1, 0.00000000E+0, 0.22372776E+4, 0.190E+3, 0.370E+2, 0.28844000E+1, + 0.00000000E+0, 0.18860887E+4, 0.190E+3, 0.380E+2, 0.28844000E+1, 0.00000000E+0, 0.16294376E+4, + 0.190E+3, 0.390E+2, 0.28844000E+1, 0.00000000E+0, 0.14526448E+4, 0.190E+3, 0.400E+2, + 0.28844000E+1, 0.00000000E+0, 0.13181488E+4, 0.190E+3, 0.410E+2, 0.28844000E+1, 0.00000000E+0, + 0.10095160E+4, 0.190E+3, 0.420E+2, 0.28844000E+1, 0.00000000E+0, 0.11298359E+4, 0.190E+3, + 0.430E+2, 0.28844000E+1, 0.00000000E+0, 0.85313360E+3, 0.190E+3, 0.440E+2, 0.28844000E+1, + 0.00000000E+0, 0.93156900E+3, 0.190E+3, 0.450E+2, 0.28844000E+1, 0.00000000E+0, 0.86120120E+3, + 0.190E+3, 0.460E+2, 0.28844000E+1, 0.00000000E+0, 0.72051370E+3, 0.190E+3, 0.470E+2, + 0.28844000E+1, 0.00000000E+0, 0.75592110E+3, 0.190E+3, 0.480E+2, 0.28844000E+1, 0.00000000E+0, + 0.95811210E+3, 0.190E+3, 0.490E+2, 0.28844000E+1, 0.00000000E+0, 0.87479670E+3, 0.190E+3, + 0.500E+2, 0.28844000E+1, 0.00000000E+0, 0.77106630E+3, 0.190E+3, 0.510E+2, 0.28844000E+1, + 0.00000000E+0, 0.71100220E+3, 0.190E+3, 0.520E+2, 0.28844000E+1, 0.00000000E+0, 0.63878920E+3, + 0.190E+3, 0.530E+2, 0.28844000E+1, 0.00000000E+0, 0.57099520E+3, 0.190E+3, 0.540E+2, + 0.28844000E+1, 0.00000000E+0, 0.27306836E+4, 0.190E+3, 0.550E+2, 0.28844000E+1, 0.00000000E+0, + 0.24191244E+4, 0.190E+3, 0.560E+2, 0.28844000E+1, 0.00000000E+0, 0.20947841E+4, 0.190E+3, + 0.570E+2, 0.28844000E+1, 0.00000000E+0, 0.91310340E+3, 0.190E+3, 0.580E+2, 0.28844000E+1, + 0.27991000E+1, 0.21341663E+4, 0.190E+3, 0.590E+2, 0.28844000E+1, 0.00000000E+0, 0.20426932E+4, + 0.190E+3, 0.600E+2, 0.28844000E+1, 0.00000000E+0, 0.19899080E+4, 0.190E+3, 0.610E+2, + 0.28844000E+1, 0.00000000E+0, 0.19415270E+4, 0.190E+3, 0.620E+2, 0.28844000E+1, 0.00000000E+0, + 0.18985844E+4, 0.190E+3, 0.630E+2, 0.28844000E+1, 0.00000000E+0, 0.14723209E+4, 0.190E+3, + 0.640E+2, 0.28844000E+1, 0.00000000E+0, 0.17011137E+4, 0.190E+3, 0.650E+2, 0.28844000E+1, + 0.00000000E+0, 0.16379975E+4, 0.190E+3, 0.660E+2, 0.28844000E+1, 0.00000000E+0, 0.17057192E+4, + 0.190E+3, 0.670E+2, 0.28844000E+1, 0.00000000E+0, 0.16687205E+4, 0.190E+3, 0.680E+2, + 0.28844000E+1, 0.00000000E+0, 0.16350831E+4, 0.190E+3, 0.690E+2, 0.28844000E+1, 0.00000000E+0, + 0.16168530E+4, 0.190E+3, 0.700E+2, 0.28844000E+1, 0.00000000E+0, 0.13505554E+4, 0.190E+3, + 0.710E+2, 0.28844000E+1, 0.00000000E+0, 0.13091260E+4, 0.190E+3, 0.720E+2, 0.28844000E+1, + 0.00000000E+0, 0.11857100E+4, 0.190E+3, 0.730E+2, 0.28844000E+1, 0.00000000E+0, 0.99656680E+3, + 0.190E+3, 0.740E+2, 0.28844000E+1, 0.00000000E+0, 0.10106039E+4, 0.190E+3, 0.750E+2, + 0.28844000E+1, 0.00000000E+0, 0.91025670E+3, 0.190E+3, 0.760E+2, 0.28844000E+1, 0.00000000E+0, + 0.82962710E+3, 0.190E+3, 0.770E+2, 0.28844000E+1, 0.00000000E+0, 0.68620440E+3, 0.190E+3, + 0.780E+2, 0.28844000E+1, 0.00000000E+0, 0.63997490E+3, 0.190E+3, 0.790E+2, 0.28844000E+1, + 0.00000000E+0, 0.65657070E+3, 0.190E+3, 0.800E+2, 0.28844000E+1, 0.00000000E+0, 0.98206910E+3, + 0.190E+3, 0.810E+2, 0.28844000E+1, 0.00000000E+0, 0.95002070E+3, 0.190E+3, 0.820E+2, + 0.28844000E+1, 0.00000000E+0, 0.86404130E+3, 0.190E+3, 0.830E+2, 0.28844000E+1, 0.00000000E+0, + 0.81955770E+3, 0.190E+3, 0.840E+2, 0.28844000E+1, 0.00000000E+0, 0.75162660E+3, 0.190E+3, + 0.850E+2, 0.28844000E+1, 0.00000000E+0, 0.68516600E+3, 0.190E+3, 0.860E+2, 0.28844000E+1, + 0.00000000E+0, 0.25440695E+4, 0.190E+3, 0.870E+2, 0.28844000E+1, 0.00000000E+0, 0.23748028E+4, + 0.190E+3, 0.880E+2, 0.28844000E+1, 0.00000000E+0, 0.20713967E+4, 0.190E+3, 0.890E+2, + 0.28844000E+1, 0.00000000E+0, 0.18359296E+4, 0.190E+3, 0.900E+2, 0.28844000E+1, 0.00000000E+0, + 0.18365610E+4, 0.190E+3, 0.910E+2, 0.28844000E+1, 0.00000000E+0, 0.17774636E+4, 0.190E+3, + 0.920E+2, 0.28844000E+1, 0.00000000E+0, 0.18453202E+4, 0.190E+3, 0.930E+2, 0.28844000E+1, + 0.00000000E+0, 0.17839174E+4, 0.190E+3, 0.940E+2, 0.28844000E+1, 0.00000000E+0, 0.94641800E+2, + 0.190E+3, 0.101E+3, 0.28844000E+1, 0.00000000E+0, 0.31781250E+3, 0.190E+3, 0.103E+3, + 0.28844000E+1, 0.98650000E+0, 0.40399690E+3, 0.190E+3, 0.104E+3, 0.28844000E+1, 0.98080000E+0, + 0.30152640E+3, 0.190E+3, 0.105E+3, 0.28844000E+1, 0.97060000E+0, 0.22458760E+3, 0.190E+3, + 0.106E+3, 0.28844000E+1, 0.98680000E+0, 0.15426790E+3, 0.190E+3, 0.107E+3, 0.28844000E+1, + 0.99440000E+0, 0.11130120E+3, 0.190E+3, 0.108E+3, 0.28844000E+1, 0.99250000E+0, 0.75746100E+2, + 0.190E+3, 0.109E+3, 0.28844000E+1, 0.99820000E+0, 0.46715670E+3, 0.190E+3, 0.111E+3, + 0.28844000E+1, 0.96840000E+0, 0.72473020E+3, 0.190E+3, 0.112E+3, 0.28844000E+1, 0.96280000E+0, + 0.72426630E+3, 0.190E+3, 0.113E+3, 0.28844000E+1, 0.96480000E+0, 0.57194340E+3, 0.190E+3, + 0.114E+3, 0.28844000E+1, 0.95070000E+0, 0.46283220E+3, 0.190E+3, 0.115E+3, 0.28844000E+1, + 0.99470000E+0, 0.38840280E+3, 0.190E+3, 0.116E+3, 0.28844000E+1, 0.99480000E+0, 0.31507380E+3, + 0.190E+3, 0.117E+3, 0.28844000E+1, 0.99720000E+0, 0.63924470E+3, 0.190E+3, 0.119E+3, + 0.28844000E+1, 0.97670000E+0, 0.12682110E+4, 0.190E+3, 0.120E+3, 0.28844000E+1, 0.98310000E+0, + 0.62863700E+3, 0.190E+3, 0.121E+3, 0.28844000E+1, 0.18627000E+1, 0.60726950E+3, 0.190E+3, + 0.122E+3, 0.28844000E+1, 0.18299000E+1, 0.59522520E+3, 0.190E+3, 0.123E+3, 0.28844000E+1, + 0.19138000E+1, 0.59085660E+3, 0.190E+3, 0.124E+3, 0.28844000E+1, 0.18269000E+1, 0.53866860E+3, + 0.190E+3, 0.125E+3, 0.28844000E+1, 0.16406000E+1, 0.49744160E+3, 0.190E+3, 0.126E+3, + 0.28844000E+1, 0.16483000E+1, 0.47468740E+3, 0.190E+3, 0.127E+3, 0.28844000E+1, 0.17149000E+1, + 0.46439490E+3, 0.190E+3, 0.128E+3, 0.28844000E+1, 0.17937000E+1, 0.46183290E+3, 0.190E+3, + 0.129E+3, 0.28844000E+1, 0.95760000E+0, 0.42819990E+3, 0.190E+3, 0.130E+3, 0.28844000E+1, + 0.19419000E+1, 0.71520850E+3, 0.190E+3, 0.131E+3, 0.28844000E+1, 0.96010000E+0, 0.61960740E+3, + 0.190E+3, 0.132E+3, 0.28844000E+1, 0.94340000E+0, 0.55013410E+3, 0.190E+3, 0.133E+3, + 0.28844000E+1, 0.98890000E+0, 0.49933630E+3, 0.190E+3, 0.134E+3, 0.28844000E+1, 0.99010000E+0, + 0.43701980E+3, 0.190E+3, 0.135E+3, 0.28844000E+1, 0.99740000E+0, 0.76067450E+3, 0.190E+3, + 0.137E+3, 0.28844000E+1, 0.97380000E+0, 0.15482877E+4, 0.190E+3, 0.138E+3, 0.28844000E+1, + 0.98010000E+0, 0.11522222E+4, 0.190E+3, 0.139E+3, 0.28844000E+1, 0.19153000E+1, 0.83361520E+3, + 0.190E+3, 0.140E+3, 0.28844000E+1, 0.19355000E+1, 0.84145560E+3, 0.190E+3, 0.141E+3, + 0.28844000E+1, 0.19545000E+1, 0.78311230E+3, 0.190E+3, 0.142E+3, 0.28844000E+1, 0.19420000E+1, + 0.88973240E+3, 0.190E+3, 0.143E+3, 0.28844000E+1, 0.16682000E+1, 0.67685180E+3, 0.190E+3, + 0.144E+3, 0.28844000E+1, 0.18584000E+1, 0.63296580E+3, 0.190E+3, 0.145E+3, 0.28844000E+1, + 0.19003000E+1, 0.58702360E+3, 0.190E+3, 0.146E+3, 0.28844000E+1, 0.18630000E+1, 0.56847740E+3, + 0.190E+3, 0.147E+3, 0.28844000E+1, 0.96790000E+0, 0.55862930E+3, 0.190E+3, 0.148E+3, + 0.28844000E+1, 0.19539000E+1, 0.90926210E+3, 0.190E+3, 0.149E+3, 0.28844000E+1, 0.96330000E+0, + 0.81233800E+3, 0.190E+3, 0.150E+3, 0.28844000E+1, 0.95140000E+0, 0.75464760E+3, 0.190E+3, + 0.151E+3, 0.28844000E+1, 0.97490000E+0, 0.71021200E+3, 0.190E+3, 0.152E+3, 0.28844000E+1, + 0.98110000E+0, 0.64484300E+3, 0.190E+3, 0.153E+3, 0.28844000E+1, 0.99680000E+0, 0.89097610E+3, + 0.190E+3, 0.155E+3, 0.28844000E+1, 0.99090000E+0, 0.20249316E+4, 0.190E+3, 0.156E+3, + 0.28844000E+1, 0.97970000E+0, 0.14635069E+4, 0.190E+3, 0.157E+3, 0.28844000E+1, 0.19373000E+1, + 0.88503310E+3, 0.190E+3, 0.159E+3, 0.28844000E+1, 0.29425000E+1, 0.86659780E+3, 0.190E+3, + 0.160E+3, 0.28844000E+1, 0.29455000E+1, 0.83870440E+3, 0.190E+3, 0.161E+3, 0.28844000E+1, + 0.29413000E+1, 0.84447740E+3, 0.190E+3, 0.162E+3, 0.28844000E+1, 0.29300000E+1, 0.81850700E+3, + 0.190E+3, 0.163E+3, 0.28844000E+1, 0.18286000E+1, 0.84998270E+3, 0.190E+3, 0.164E+3, + 0.28844000E+1, 0.28732000E+1, 0.79715610E+3, 0.190E+3, 0.165E+3, 0.28844000E+1, 0.29086000E+1, + 0.81406210E+3, 0.190E+3, 0.166E+3, 0.28844000E+1, 0.28965000E+1, 0.75550250E+3, 0.190E+3, + 0.167E+3, 0.28844000E+1, 0.29242000E+1, 0.73357320E+3, 0.190E+3, 0.168E+3, 0.28844000E+1, + 0.29282000E+1, 0.72916890E+3, 0.190E+3, 0.169E+3, 0.28844000E+1, 0.29246000E+1, 0.76808740E+3, + 0.190E+3, 0.170E+3, 0.28844000E+1, 0.28482000E+1, 0.70415860E+3, 0.190E+3, 0.171E+3, + 0.28844000E+1, 0.29219000E+1, 0.97550990E+3, 0.190E+3, 0.172E+3, 0.28844000E+1, 0.19254000E+1, + 0.89859560E+3, 0.190E+3, 0.173E+3, 0.28844000E+1, 0.19459000E+1, 0.81374230E+3, 0.190E+3, + 0.174E+3, 0.28844000E+1, 0.19292000E+1, 0.82881920E+3, 0.190E+3, 0.175E+3, 0.28844000E+1, + 0.18104000E+1, 0.71350780E+3, 0.190E+3, 0.176E+3, 0.28844000E+1, 0.18858000E+1, 0.66976280E+3, + 0.190E+3, 0.177E+3, 0.28844000E+1, 0.18648000E+1, 0.63893520E+3, 0.190E+3, 0.178E+3, + 0.28844000E+1, 0.19188000E+1, 0.61116560E+3, 0.190E+3, 0.179E+3, 0.28844000E+1, 0.98460000E+0, + 0.58708670E+3, 0.190E+3, 0.180E+3, 0.28844000E+1, 0.19896000E+1, 0.97511530E+3, 0.190E+3, + 0.181E+3, 0.28844000E+1, 0.92670000E+0, 0.87752310E+3, 0.190E+3, 0.182E+3, 0.28844000E+1, + 0.93830000E+0, 0.84561490E+3, 0.190E+3, 0.183E+3, 0.28844000E+1, 0.98200000E+0, 0.81904220E+3, + 0.190E+3, 0.184E+3, 0.28844000E+1, 0.98150000E+0, 0.76065040E+3, 0.190E+3, 0.185E+3, + 0.28844000E+1, 0.99540000E+0, 0.10026461E+4, 0.190E+3, 0.187E+3, 0.28844000E+1, 0.97050000E+0, + 0.19926647E+4, 0.190E+3, 0.188E+3, 0.28844000E+1, 0.96620000E+0, 0.10474302E+4, 0.190E+3, + 0.189E+3, 0.28844000E+1, 0.29070000E+1, 0.12245933E+4, 0.190E+3, 0.190E+3, 0.28844000E+1, + 0.28844000E+1, 0.52264500E+2, 0.191E+3, 0.100E+1, 0.28738000E+1, 0.91180000E+0, 0.34332900E+2, + 0.191E+3, 0.200E+1, 0.28738000E+1, 0.00000000E+0, 0.89070150E+3, 0.191E+3, 0.300E+1, + 0.28738000E+1, 0.00000000E+0, 0.48502270E+3, 0.191E+3, 0.400E+1, 0.28738000E+1, 0.00000000E+0, + 0.32084970E+3, 0.191E+3, 0.500E+1, 0.28738000E+1, 0.00000000E+0, 0.21465050E+3, 0.191E+3, + 0.600E+1, 0.28738000E+1, 0.00000000E+0, 0.14930470E+3, 0.191E+3, 0.700E+1, 0.28738000E+1, + 0.00000000E+0, 0.11273380E+3, 0.191E+3, 0.800E+1, 0.28738000E+1, 0.00000000E+0, 0.85262100E+2, + 0.191E+3, 0.900E+1, 0.28738000E+1, 0.00000000E+0, 0.65533100E+2, 0.191E+3, 0.100E+2, + 0.28738000E+1, 0.00000000E+0, 0.10608040E+4, 0.191E+3, 0.110E+2, 0.28738000E+1, 0.00000000E+0, + 0.77888060E+3, 0.191E+3, 0.120E+2, 0.28738000E+1, 0.00000000E+0, 0.71034880E+3, 0.191E+3, + 0.130E+2, 0.28738000E+1, 0.00000000E+0, 0.55219130E+3, 0.191E+3, 0.140E+2, 0.28738000E+1, + 0.00000000E+0, 0.42680750E+3, 0.191E+3, 0.150E+2, 0.28738000E+1, 0.00000000E+0, 0.35264770E+3, + 0.191E+3, 0.160E+2, 0.28738000E+1, 0.00000000E+0, 0.28699980E+3, 0.191E+3, 0.170E+2, + 0.28738000E+1, 0.00000000E+0, 0.23418470E+3, 0.191E+3, 0.180E+2, 0.28738000E+1, 0.00000000E+0, + 0.17789468E+4, 0.191E+3, 0.190E+2, 0.28738000E+1, 0.00000000E+0, 0.13939683E+4, 0.191E+3, + 0.200E+2, 0.28738000E+1, 0.00000000E+0, 0.11425935E+4, 0.191E+3, 0.210E+2, 0.28738000E+1, + 0.00000000E+0, 0.10979705E+4, 0.191E+3, 0.220E+2, 0.28738000E+1, 0.00000000E+0, 0.10022471E+4, + 0.191E+3, 0.230E+2, 0.28738000E+1, 0.00000000E+0, 0.79096650E+3, 0.191E+3, 0.240E+2, + 0.28738000E+1, 0.00000000E+0, 0.85910440E+3, 0.191E+3, 0.250E+2, 0.28738000E+1, 0.00000000E+0, + 0.67498040E+3, 0.191E+3, 0.260E+2, 0.28738000E+1, 0.00000000E+0, 0.70900470E+3, 0.191E+3, + 0.270E+2, 0.28738000E+1, 0.00000000E+0, 0.73240820E+3, 0.191E+3, 0.280E+2, 0.28738000E+1, + 0.00000000E+0, 0.56299640E+3, 0.191E+3, 0.290E+2, 0.28738000E+1, 0.00000000E+0, 0.57131500E+3, + 0.191E+3, 0.300E+2, 0.28738000E+1, 0.00000000E+0, 0.67870160E+3, 0.191E+3, 0.310E+2, + 0.28738000E+1, 0.00000000E+0, 0.59190790E+3, 0.191E+3, 0.320E+2, 0.28738000E+1, 0.00000000E+0, + 0.50094070E+3, 0.191E+3, 0.330E+2, 0.28738000E+1, 0.00000000E+0, 0.44774380E+3, 0.191E+3, + 0.340E+2, 0.28738000E+1, 0.00000000E+0, 0.39043140E+3, 0.191E+3, 0.350E+2, 0.28738000E+1, + 0.00000000E+0, 0.33858330E+3, 0.191E+3, 0.360E+2, 0.28738000E+1, 0.00000000E+0, 0.19913447E+4, + 0.191E+3, 0.370E+2, 0.28738000E+1, 0.00000000E+0, 0.16656547E+4, 0.191E+3, 0.380E+2, + 0.28738000E+1, 0.00000000E+0, 0.14407783E+4, 0.191E+3, 0.390E+2, 0.28738000E+1, 0.00000000E+0, + 0.12860297E+4, 0.191E+3, 0.400E+2, 0.28738000E+1, 0.00000000E+0, 0.11683462E+4, 0.191E+3, + 0.410E+2, 0.28738000E+1, 0.00000000E+0, 0.89688390E+3, 0.191E+3, 0.420E+2, 0.28738000E+1, + 0.00000000E+0, 0.10030323E+4, 0.191E+3, 0.430E+2, 0.28738000E+1, 0.00000000E+0, 0.75931940E+3, + 0.191E+3, 0.440E+2, 0.28738000E+1, 0.00000000E+0, 0.82841280E+3, 0.191E+3, 0.450E+2, + 0.28738000E+1, 0.00000000E+0, 0.76640860E+3, 0.191E+3, 0.460E+2, 0.28738000E+1, 0.00000000E+0, + 0.64182000E+3, 0.191E+3, 0.470E+2, 0.28738000E+1, 0.00000000E+0, 0.67342870E+3, 0.191E+3, + 0.480E+2, 0.28738000E+1, 0.00000000E+0, 0.85158740E+3, 0.191E+3, 0.490E+2, 0.28738000E+1, + 0.00000000E+0, 0.77929980E+3, 0.191E+3, 0.500E+2, 0.28738000E+1, 0.00000000E+0, 0.68907930E+3, + 0.191E+3, 0.510E+2, 0.28738000E+1, 0.00000000E+0, 0.63681840E+3, 0.191E+3, 0.520E+2, + 0.28738000E+1, 0.00000000E+0, 0.57361210E+3, 0.191E+3, 0.530E+2, 0.28738000E+1, 0.00000000E+0, + 0.51407080E+3, 0.191E+3, 0.540E+2, 0.28738000E+1, 0.00000000E+0, 0.24381558E+4, 0.191E+3, + 0.550E+2, 0.28738000E+1, 0.00000000E+0, 0.21382977E+4, 0.191E+3, 0.560E+2, 0.28738000E+1, + 0.00000000E+0, 0.18526946E+4, 0.191E+3, 0.570E+2, 0.28738000E+1, 0.00000000E+0, 0.81584440E+3, + 0.191E+3, 0.580E+2, 0.28738000E+1, 0.27991000E+1, 0.18889925E+4, 0.191E+3, 0.590E+2, + 0.28738000E+1, 0.00000000E+0, 0.18057716E+4, 0.191E+3, 0.600E+2, 0.28738000E+1, 0.00000000E+0, + 0.17590005E+4, 0.191E+3, 0.610E+2, 0.28738000E+1, 0.00000000E+0, 0.17161451E+4, 0.191E+3, + 0.620E+2, 0.28738000E+1, 0.00000000E+0, 0.16781174E+4, 0.191E+3, 0.630E+2, 0.28738000E+1, + 0.00000000E+0, 0.13048651E+4, 0.191E+3, 0.640E+2, 0.28738000E+1, 0.00000000E+0, 0.15104078E+4, + 0.191E+3, 0.650E+2, 0.28738000E+1, 0.00000000E+0, 0.14576760E+4, 0.191E+3, 0.660E+2, + 0.28738000E+1, 0.00000000E+0, 0.15075770E+4, 0.191E+3, 0.670E+2, 0.28738000E+1, 0.00000000E+0, + 0.14748115E+4, 0.191E+3, 0.680E+2, 0.28738000E+1, 0.00000000E+0, 0.14450628E+4, 0.191E+3, + 0.690E+2, 0.28738000E+1, 0.00000000E+0, 0.14287766E+4, 0.191E+3, 0.700E+2, 0.28738000E+1, + 0.00000000E+0, 0.11975147E+4, 0.191E+3, 0.710E+2, 0.28738000E+1, 0.00000000E+0, 0.11607498E+4, + 0.191E+3, 0.720E+2, 0.28738000E+1, 0.00000000E+0, 0.10529859E+4, 0.191E+3, 0.730E+2, + 0.28738000E+1, 0.00000000E+0, 0.88698680E+3, 0.191E+3, 0.740E+2, 0.28738000E+1, 0.00000000E+0, + 0.89986720E+3, 0.191E+3, 0.750E+2, 0.28738000E+1, 0.00000000E+0, 0.81184020E+3, 0.191E+3, + 0.760E+2, 0.28738000E+1, 0.00000000E+0, 0.74102110E+3, 0.191E+3, 0.770E+2, 0.28738000E+1, + 0.00000000E+0, 0.61428030E+3, 0.191E+3, 0.780E+2, 0.28738000E+1, 0.00000000E+0, 0.57339400E+3, + 0.191E+3, 0.790E+2, 0.28738000E+1, 0.00000000E+0, 0.58842050E+3, 0.191E+3, 0.800E+2, + 0.28738000E+1, 0.00000000E+0, 0.87453780E+3, 0.191E+3, 0.810E+2, 0.28738000E+1, 0.00000000E+0, + 0.84698840E+3, 0.191E+3, 0.820E+2, 0.28738000E+1, 0.00000000E+0, 0.77232730E+3, 0.191E+3, + 0.830E+2, 0.28738000E+1, 0.00000000E+0, 0.73386420E+3, 0.191E+3, 0.840E+2, 0.28738000E+1, + 0.00000000E+0, 0.67459880E+3, 0.191E+3, 0.850E+2, 0.28738000E+1, 0.00000000E+0, 0.61636260E+3, + 0.191E+3, 0.860E+2, 0.28738000E+1, 0.00000000E+0, 0.22655221E+4, 0.191E+3, 0.870E+2, + 0.28738000E+1, 0.00000000E+0, 0.21000716E+4, 0.191E+3, 0.880E+2, 0.28738000E+1, 0.00000000E+0, + 0.18334406E+4, 0.191E+3, 0.890E+2, 0.28738000E+1, 0.00000000E+0, 0.16280585E+4, 0.191E+3, + 0.900E+2, 0.28738000E+1, 0.00000000E+0, 0.16281996E+4, 0.191E+3, 0.910E+2, 0.28738000E+1, + 0.00000000E+0, 0.15757649E+4, 0.191E+3, 0.920E+2, 0.28738000E+1, 0.00000000E+0, 0.16336303E+4, + 0.191E+3, 0.930E+2, 0.28738000E+1, 0.00000000E+0, 0.15794150E+4, 0.191E+3, 0.940E+2, + 0.28738000E+1, 0.00000000E+0, 0.84723800E+2, 0.191E+3, 0.101E+3, 0.28738000E+1, 0.00000000E+0, + 0.28145990E+3, 0.191E+3, 0.103E+3, 0.28738000E+1, 0.98650000E+0, 0.35859140E+3, 0.191E+3, + 0.104E+3, 0.28738000E+1, 0.98080000E+0, 0.26924380E+3, 0.191E+3, 0.105E+3, 0.28738000E+1, + 0.97060000E+0, 0.20157990E+3, 0.191E+3, 0.106E+3, 0.28738000E+1, 0.98680000E+0, 0.13931210E+3, + 0.191E+3, 0.107E+3, 0.28738000E+1, 0.99440000E+0, 0.10105790E+3, 0.191E+3, 0.108E+3, + 0.28738000E+1, 0.99250000E+0, 0.69270700E+2, 0.191E+3, 0.109E+3, 0.28738000E+1, 0.99820000E+0, + 0.41351280E+3, 0.191E+3, 0.111E+3, 0.28738000E+1, 0.96840000E+0, 0.64146750E+3, 0.191E+3, + 0.112E+3, 0.28738000E+1, 0.96280000E+0, 0.64236160E+3, 0.191E+3, 0.113E+3, 0.28738000E+1, + 0.96480000E+0, 0.50971630E+3, 0.191E+3, 0.114E+3, 0.28738000E+1, 0.95070000E+0, 0.41427030E+3, + 0.191E+3, 0.115E+3, 0.28738000E+1, 0.99470000E+0, 0.34884970E+3, 0.191E+3, 0.116E+3, + 0.28738000E+1, 0.99480000E+0, 0.28407250E+3, 0.191E+3, 0.117E+3, 0.28738000E+1, 0.99720000E+0, + 0.56838310E+3, 0.191E+3, 0.119E+3, 0.28738000E+1, 0.97670000E+0, 0.11243632E+4, 0.191E+3, + 0.120E+3, 0.28738000E+1, 0.98310000E+0, 0.55973470E+3, 0.191E+3, 0.121E+3, 0.28738000E+1, + 0.18627000E+1, 0.54164230E+3, 0.191E+3, 0.122E+3, 0.28738000E+1, 0.18299000E+1, 0.53075760E+3, + 0.191E+3, 0.123E+3, 0.28738000E+1, 0.19138000E+1, 0.52667650E+3, 0.191E+3, 0.124E+3, + 0.28738000E+1, 0.18269000E+1, 0.48098950E+3, 0.191E+3, 0.125E+3, 0.28738000E+1, 0.16406000E+1, + 0.44458610E+3, 0.191E+3, 0.126E+3, 0.28738000E+1, 0.16483000E+1, 0.42438350E+3, 0.191E+3, + 0.127E+3, 0.28738000E+1, 0.17149000E+1, 0.41509660E+3, 0.191E+3, 0.128E+3, 0.28738000E+1, + 0.17937000E+1, 0.41210000E+3, 0.191E+3, 0.129E+3, 0.28738000E+1, 0.95760000E+0, 0.38322820E+3, + 0.191E+3, 0.130E+3, 0.28738000E+1, 0.19419000E+1, 0.63562870E+3, 0.191E+3, 0.131E+3, + 0.28738000E+1, 0.96010000E+0, 0.55267960E+3, 0.191E+3, 0.132E+3, 0.28738000E+1, 0.94340000E+0, + 0.49229290E+3, 0.191E+3, 0.133E+3, 0.28738000E+1, 0.98890000E+0, 0.44797180E+3, 0.191E+3, + 0.134E+3, 0.28738000E+1, 0.99010000E+0, 0.39323670E+3, 0.191E+3, 0.135E+3, 0.28738000E+1, + 0.99740000E+0, 0.67715660E+3, 0.191E+3, 0.137E+3, 0.28738000E+1, 0.97380000E+0, 0.13743437E+4, + 0.191E+3, 0.138E+3, 0.28738000E+1, 0.98010000E+0, 0.10260397E+4, 0.191E+3, 0.139E+3, + 0.28738000E+1, 0.19153000E+1, 0.74279230E+3, 0.191E+3, 0.140E+3, 0.28738000E+1, 0.19355000E+1, + 0.74895660E+3, 0.191E+3, 0.141E+3, 0.28738000E+1, 0.19545000E+1, 0.69892350E+3, 0.191E+3, + 0.142E+3, 0.28738000E+1, 0.19420000E+1, 0.79275350E+3, 0.191E+3, 0.143E+3, 0.28738000E+1, + 0.16682000E+1, 0.60535870E+3, 0.191E+3, 0.144E+3, 0.28738000E+1, 0.18584000E+1, 0.56644570E+3, + 0.191E+3, 0.145E+3, 0.28738000E+1, 0.19003000E+1, 0.52569600E+3, 0.191E+3, 0.146E+3, + 0.28738000E+1, 0.18630000E+1, 0.50889220E+3, 0.191E+3, 0.147E+3, 0.28738000E+1, 0.96790000E+0, + 0.50075690E+3, 0.191E+3, 0.148E+3, 0.28738000E+1, 0.19539000E+1, 0.80885400E+3, 0.191E+3, + 0.149E+3, 0.28738000E+1, 0.96330000E+0, 0.72462440E+3, 0.191E+3, 0.150E+3, 0.28738000E+1, + 0.95140000E+0, 0.67473780E+3, 0.191E+3, 0.151E+3, 0.28738000E+1, 0.97490000E+0, 0.63619670E+3, + 0.191E+3, 0.152E+3, 0.28738000E+1, 0.98110000E+0, 0.57901430E+3, 0.191E+3, 0.153E+3, + 0.28738000E+1, 0.99680000E+0, 0.79465520E+3, 0.191E+3, 0.155E+3, 0.28738000E+1, 0.99090000E+0, + 0.18031914E+4, 0.191E+3, 0.156E+3, 0.28738000E+1, 0.97970000E+0, 0.13050880E+4, 0.191E+3, + 0.157E+3, 0.28738000E+1, 0.19373000E+1, 0.79095680E+3, 0.191E+3, 0.159E+3, 0.28738000E+1, + 0.29425000E+1, 0.77448190E+3, 0.191E+3, 0.160E+3, 0.28738000E+1, 0.29455000E+1, 0.74970660E+3, + 0.191E+3, 0.161E+3, 0.28738000E+1, 0.29413000E+1, 0.75473340E+3, 0.191E+3, 0.162E+3, + 0.28738000E+1, 0.29300000E+1, 0.73034120E+3, 0.191E+3, 0.163E+3, 0.28738000E+1, 0.18286000E+1, + 0.75925810E+3, 0.191E+3, 0.164E+3, 0.28738000E+1, 0.28732000E+1, 0.71236590E+3, 0.191E+3, + 0.165E+3, 0.28738000E+1, 0.29086000E+1, 0.72723060E+3, 0.191E+3, 0.166E+3, 0.28738000E+1, + 0.28965000E+1, 0.67539950E+3, 0.191E+3, 0.167E+3, 0.28738000E+1, 0.29242000E+1, 0.65589880E+3, + 0.191E+3, 0.168E+3, 0.28738000E+1, 0.29282000E+1, 0.65187600E+3, 0.191E+3, 0.169E+3, + 0.28738000E+1, 0.29246000E+1, 0.68605020E+3, 0.191E+3, 0.170E+3, 0.28738000E+1, 0.28482000E+1, + 0.62962830E+3, 0.191E+3, 0.171E+3, 0.28738000E+1, 0.29219000E+1, 0.86895920E+3, 0.191E+3, + 0.172E+3, 0.28738000E+1, 0.19254000E+1, 0.80143340E+3, 0.191E+3, 0.173E+3, 0.28738000E+1, + 0.19459000E+1, 0.72695200E+3, 0.191E+3, 0.174E+3, 0.28738000E+1, 0.19292000E+1, 0.73934260E+3, + 0.191E+3, 0.175E+3, 0.28738000E+1, 0.18104000E+1, 0.63931090E+3, 0.191E+3, 0.176E+3, + 0.28738000E+1, 0.18858000E+1, 0.60057540E+3, 0.191E+3, 0.177E+3, 0.28738000E+1, 0.18648000E+1, + 0.57328530E+3, 0.191E+3, 0.178E+3, 0.28738000E+1, 0.19188000E+1, 0.54847560E+3, 0.191E+3, + 0.179E+3, 0.28738000E+1, 0.98460000E+0, 0.52767310E+3, 0.191E+3, 0.180E+3, 0.28738000E+1, + 0.19896000E+1, 0.86865890E+3, 0.191E+3, 0.181E+3, 0.28738000E+1, 0.92670000E+0, 0.78363670E+3, + 0.191E+3, 0.182E+3, 0.28738000E+1, 0.93830000E+0, 0.75634500E+3, 0.191E+3, 0.183E+3, + 0.28738000E+1, 0.98200000E+0, 0.73358480E+3, 0.191E+3, 0.184E+3, 0.28738000E+1, 0.98150000E+0, + 0.68269100E+3, 0.191E+3, 0.185E+3, 0.28738000E+1, 0.99540000E+0, 0.89435100E+3, 0.191E+3, + 0.187E+3, 0.28738000E+1, 0.97050000E+0, 0.17716049E+4, 0.191E+3, 0.188E+3, 0.28738000E+1, + 0.96620000E+0, 0.93586320E+3, 0.191E+3, 0.189E+3, 0.28738000E+1, 0.29070000E+1, 0.10934914E+4, + 0.191E+3, 0.190E+3, 0.28738000E+1, 0.28844000E+1, 0.98037580E+3, 0.191E+3, 0.191E+3, + 0.28738000E+1, 0.28738000E+1, 0.46755900E+2, 0.192E+3, 0.100E+1, 0.28878000E+1, 0.91180000E+0, + 0.31074600E+2, 0.192E+3, 0.200E+1, 0.28878000E+1, 0.00000000E+0, 0.73198050E+3, 0.192E+3, + 0.300E+1, 0.28878000E+1, 0.00000000E+0, 0.41975640E+3, 0.192E+3, 0.400E+1, 0.28878000E+1, + 0.00000000E+0, 0.28243120E+3, 0.192E+3, 0.500E+1, 0.28878000E+1, 0.00000000E+0, 0.19102230E+3, + 0.192E+3, 0.600E+1, 0.28878000E+1, 0.00000000E+0, 0.13387230E+3, 0.192E+3, 0.700E+1, + 0.28878000E+1, 0.00000000E+0, 0.10159960E+3, 0.192E+3, 0.800E+1, 0.28878000E+1, 0.00000000E+0, + 0.77176400E+2, 0.192E+3, 0.900E+1, 0.28878000E+1, 0.00000000E+0, 0.59527100E+2, 0.192E+3, + 0.100E+2, 0.28878000E+1, 0.00000000E+0, 0.87518610E+3, 0.192E+3, 0.110E+2, 0.28878000E+1, + 0.00000000E+0, 0.66958510E+3, 0.192E+3, 0.120E+2, 0.28878000E+1, 0.00000000E+0, 0.61654260E+3, + 0.192E+3, 0.130E+2, 0.28878000E+1, 0.00000000E+0, 0.48533720E+3, 0.192E+3, 0.140E+2, + 0.28878000E+1, 0.00000000E+0, 0.37850250E+3, 0.192E+3, 0.150E+2, 0.28878000E+1, 0.00000000E+0, + 0.31437000E+3, 0.192E+3, 0.160E+2, 0.28878000E+1, 0.00000000E+0, 0.25708750E+3, 0.192E+3, + 0.170E+2, 0.28878000E+1, 0.00000000E+0, 0.21063660E+3, 0.192E+3, 0.180E+2, 0.28878000E+1, + 0.00000000E+0, 0.14387994E+4, 0.192E+3, 0.190E+2, 0.28878000E+1, 0.00000000E+0, 0.11798248E+4, + 0.192E+3, 0.200E+2, 0.28878000E+1, 0.00000000E+0, 0.97372410E+3, 0.192E+3, 0.210E+2, + 0.28878000E+1, 0.00000000E+0, 0.93993750E+3, 0.192E+3, 0.220E+2, 0.28878000E+1, 0.00000000E+0, + 0.86049210E+3, 0.192E+3, 0.230E+2, 0.28878000E+1, 0.00000000E+0, 0.67850520E+3, 0.192E+3, + 0.240E+2, 0.28878000E+1, 0.00000000E+0, 0.74061370E+3, 0.192E+3, 0.250E+2, 0.28878000E+1, + 0.00000000E+0, 0.58183780E+3, 0.192E+3, 0.260E+2, 0.28878000E+1, 0.00000000E+0, 0.61569900E+3, + 0.192E+3, 0.270E+2, 0.28878000E+1, 0.00000000E+0, 0.63436640E+3, 0.192E+3, 0.280E+2, + 0.28878000E+1, 0.00000000E+0, 0.48701500E+3, 0.192E+3, 0.290E+2, 0.28878000E+1, 0.00000000E+0, + 0.49903190E+3, 0.192E+3, 0.300E+2, 0.28878000E+1, 0.00000000E+0, 0.59084610E+3, 0.192E+3, + 0.310E+2, 0.28878000E+1, 0.00000000E+0, 0.52052680E+3, 0.192E+3, 0.320E+2, 0.28878000E+1, + 0.00000000E+0, 0.44390020E+3, 0.192E+3, 0.330E+2, 0.28878000E+1, 0.00000000E+0, 0.39844930E+3, + 0.192E+3, 0.340E+2, 0.28878000E+1, 0.00000000E+0, 0.34891220E+3, 0.192E+3, 0.350E+2, + 0.28878000E+1, 0.00000000E+0, 0.30370810E+3, 0.192E+3, 0.360E+2, 0.28878000E+1, 0.00000000E+0, + 0.16125430E+4, 0.192E+3, 0.370E+2, 0.28878000E+1, 0.00000000E+0, 0.14064978E+4, 0.192E+3, + 0.380E+2, 0.28878000E+1, 0.00000000E+0, 0.12301136E+4, 0.192E+3, 0.390E+2, 0.28878000E+1, + 0.00000000E+0, 0.11047666E+4, 0.192E+3, 0.400E+2, 0.28878000E+1, 0.00000000E+0, 0.10071282E+4, + 0.192E+3, 0.410E+2, 0.28878000E+1, 0.00000000E+0, 0.77757670E+3, 0.192E+3, 0.420E+2, + 0.28878000E+1, 0.00000000E+0, 0.86755080E+3, 0.192E+3, 0.430E+2, 0.28878000E+1, 0.00000000E+0, + 0.66100390E+3, 0.192E+3, 0.440E+2, 0.28878000E+1, 0.00000000E+0, 0.72198170E+3, 0.192E+3, + 0.450E+2, 0.28878000E+1, 0.00000000E+0, 0.66945830E+3, 0.192E+3, 0.460E+2, 0.28878000E+1, + 0.00000000E+0, 0.55904400E+3, 0.192E+3, 0.470E+2, 0.28878000E+1, 0.00000000E+0, 0.58989000E+3, + 0.192E+3, 0.480E+2, 0.28878000E+1, 0.00000000E+0, 0.74043240E+3, 0.192E+3, 0.490E+2, + 0.28878000E+1, 0.00000000E+0, 0.68380180E+3, 0.192E+3, 0.500E+2, 0.28878000E+1, 0.00000000E+0, + 0.60902530E+3, 0.192E+3, 0.510E+2, 0.28878000E+1, 0.00000000E+0, 0.56501830E+3, 0.192E+3, + 0.520E+2, 0.28878000E+1, 0.00000000E+0, 0.51096120E+3, 0.192E+3, 0.530E+2, 0.28878000E+1, + 0.00000000E+0, 0.45956760E+3, 0.192E+3, 0.540E+2, 0.28878000E+1, 0.00000000E+0, 0.19652428E+4, + 0.192E+3, 0.550E+2, 0.28878000E+1, 0.00000000E+0, 0.17949059E+4, 0.192E+3, 0.560E+2, + 0.28878000E+1, 0.00000000E+0, 0.15740959E+4, 0.192E+3, 0.570E+2, 0.28878000E+1, 0.00000000E+0, + 0.71985720E+3, 0.192E+3, 0.580E+2, 0.28878000E+1, 0.27991000E+1, 0.15898595E+4, 0.192E+3, + 0.590E+2, 0.28878000E+1, 0.00000000E+0, 0.15259822E+4, 0.192E+3, 0.600E+2, 0.28878000E+1, + 0.00000000E+0, 0.14875408E+4, 0.192E+3, 0.610E+2, 0.28878000E+1, 0.00000000E+0, 0.14521965E+4, + 0.192E+3, 0.620E+2, 0.28878000E+1, 0.00000000E+0, 0.14208475E+4, 0.192E+3, 0.630E+2, + 0.28878000E+1, 0.00000000E+0, 0.11161138E+4, 0.192E+3, 0.640E+2, 0.28878000E+1, 0.00000000E+0, + 0.12609766E+4, 0.192E+3, 0.650E+2, 0.28878000E+1, 0.00000000E+0, 0.12159398E+4, 0.192E+3, + 0.660E+2, 0.28878000E+1, 0.00000000E+0, 0.12808410E+4, 0.192E+3, 0.670E+2, 0.28878000E+1, + 0.00000000E+0, 0.12535493E+4, 0.192E+3, 0.680E+2, 0.28878000E+1, 0.00000000E+0, 0.12289183E+4, + 0.192E+3, 0.690E+2, 0.28878000E+1, 0.00000000E+0, 0.12145773E+4, 0.192E+3, 0.700E+2, + 0.28878000E+1, 0.00000000E+0, 0.10226803E+4, 0.192E+3, 0.710E+2, 0.28878000E+1, 0.00000000E+0, + 0.10038975E+4, 0.192E+3, 0.720E+2, 0.28878000E+1, 0.00000000E+0, 0.91571760E+3, 0.192E+3, + 0.730E+2, 0.28878000E+1, 0.00000000E+0, 0.77355940E+3, 0.192E+3, 0.740E+2, 0.28878000E+1, + 0.00000000E+0, 0.78664370E+3, 0.192E+3, 0.750E+2, 0.28878000E+1, 0.00000000E+0, 0.71280370E+3, + 0.192E+3, 0.760E+2, 0.28878000E+1, 0.00000000E+0, 0.65278320E+3, 0.192E+3, 0.770E+2, + 0.28878000E+1, 0.00000000E+0, 0.54266550E+3, 0.192E+3, 0.780E+2, 0.28878000E+1, 0.00000000E+0, + 0.50716770E+3, 0.192E+3, 0.790E+2, 0.28878000E+1, 0.00000000E+0, 0.52145390E+3, 0.192E+3, + 0.800E+2, 0.28878000E+1, 0.00000000E+0, 0.76086200E+3, 0.192E+3, 0.810E+2, 0.28878000E+1, + 0.00000000E+0, 0.74290150E+3, 0.192E+3, 0.820E+2, 0.28878000E+1, 0.00000000E+0, 0.68212270E+3, + 0.192E+3, 0.830E+2, 0.28878000E+1, 0.00000000E+0, 0.65042490E+3, 0.192E+3, 0.840E+2, + 0.28878000E+1, 0.00000000E+0, 0.60026280E+3, 0.192E+3, 0.850E+2, 0.28878000E+1, 0.00000000E+0, + 0.55029950E+3, 0.192E+3, 0.860E+2, 0.28878000E+1, 0.00000000E+0, 0.18525059E+4, 0.192E+3, + 0.870E+2, 0.28878000E+1, 0.00000000E+0, 0.17734791E+4, 0.192E+3, 0.880E+2, 0.28878000E+1, + 0.00000000E+0, 0.15651457E+4, 0.192E+3, 0.890E+2, 0.28878000E+1, 0.00000000E+0, 0.14048813E+4, + 0.192E+3, 0.900E+2, 0.28878000E+1, 0.00000000E+0, 0.13963790E+4, 0.192E+3, 0.910E+2, + 0.28878000E+1, 0.00000000E+0, 0.13520713E+4, 0.192E+3, 0.920E+2, 0.28878000E+1, 0.00000000E+0, + 0.13933621E+4, 0.192E+3, 0.930E+2, 0.28878000E+1, 0.00000000E+0, 0.13490495E+4, 0.192E+3, + 0.940E+2, 0.28878000E+1, 0.00000000E+0, 0.75206600E+2, 0.192E+3, 0.101E+3, 0.28878000E+1, + 0.00000000E+0, 0.24403010E+3, 0.192E+3, 0.103E+3, 0.28878000E+1, 0.98650000E+0, 0.31132040E+3, + 0.192E+3, 0.104E+3, 0.28878000E+1, 0.98080000E+0, 0.23766340E+3, 0.192E+3, 0.105E+3, + 0.28878000E+1, 0.97060000E+0, 0.17925610E+3, 0.192E+3, 0.106E+3, 0.28878000E+1, 0.98680000E+0, + 0.12489310E+3, 0.192E+3, 0.107E+3, 0.28878000E+1, 0.99440000E+0, 0.91186300E+2, 0.192E+3, + 0.108E+3, 0.28878000E+1, 0.99250000E+0, 0.62986700E+2, 0.192E+3, 0.109E+3, 0.28878000E+1, + 0.99820000E+0, 0.35715820E+3, 0.192E+3, 0.111E+3, 0.28878000E+1, 0.96840000E+0, 0.55232750E+3, + 0.192E+3, 0.112E+3, 0.28878000E+1, 0.96280000E+0, 0.55871280E+3, 0.192E+3, 0.113E+3, + 0.28878000E+1, 0.96480000E+0, 0.44861130E+3, 0.192E+3, 0.114E+3, 0.28878000E+1, 0.95070000E+0, + 0.36744990E+3, 0.192E+3, 0.115E+3, 0.28878000E+1, 0.99470000E+0, 0.31093340E+3, 0.192E+3, + 0.116E+3, 0.28878000E+1, 0.99480000E+0, 0.25443970E+3, 0.192E+3, 0.117E+3, 0.28878000E+1, + 0.99720000E+0, 0.49305900E+3, 0.192E+3, 0.119E+3, 0.28878000E+1, 0.97670000E+0, 0.94512240E+3, + 0.192E+3, 0.120E+3, 0.28878000E+1, 0.98310000E+0, 0.49217970E+3, 0.192E+3, 0.121E+3, + 0.28878000E+1, 0.18627000E+1, 0.47531010E+3, 0.192E+3, 0.122E+3, 0.28878000E+1, 0.18299000E+1, + 0.46586480E+3, 0.192E+3, 0.123E+3, 0.28878000E+1, 0.19138000E+1, 0.46166860E+3, 0.192E+3, + 0.124E+3, 0.28878000E+1, 0.18269000E+1, 0.42443750E+3, 0.192E+3, 0.125E+3, 0.28878000E+1, + 0.16406000E+1, 0.39286320E+3, 0.192E+3, 0.126E+3, 0.28878000E+1, 0.16483000E+1, 0.37486590E+3, + 0.192E+3, 0.127E+3, 0.28878000E+1, 0.17149000E+1, 0.36651980E+3, 0.192E+3, 0.128E+3, + 0.28878000E+1, 0.17937000E+1, 0.36235940E+3, 0.192E+3, 0.129E+3, 0.28878000E+1, 0.95760000E+0, + 0.33963850E+3, 0.192E+3, 0.130E+3, 0.28878000E+1, 0.19419000E+1, 0.55481070E+3, 0.192E+3, + 0.131E+3, 0.28878000E+1, 0.96010000E+0, 0.48695430E+3, 0.192E+3, 0.132E+3, 0.28878000E+1, + 0.94340000E+0, 0.43639410E+3, 0.192E+3, 0.133E+3, 0.28878000E+1, 0.98890000E+0, 0.39861480E+3, + 0.192E+3, 0.134E+3, 0.28878000E+1, 0.99010000E+0, 0.35133960E+3, 0.192E+3, 0.135E+3, + 0.28878000E+1, 0.99740000E+0, 0.58839800E+3, 0.192E+3, 0.137E+3, 0.28878000E+1, 0.97380000E+0, + 0.11509048E+4, 0.192E+3, 0.138E+3, 0.28878000E+1, 0.98010000E+0, 0.87728230E+3, 0.192E+3, + 0.139E+3, 0.28878000E+1, 0.19153000E+1, 0.65137000E+3, 0.192E+3, 0.140E+3, 0.28878000E+1, + 0.19355000E+1, 0.65782330E+3, 0.192E+3, 0.141E+3, 0.28878000E+1, 0.19545000E+1, 0.61355160E+3, + 0.192E+3, 0.142E+3, 0.28878000E+1, 0.19420000E+1, 0.68895110E+3, 0.192E+3, 0.143E+3, + 0.28878000E+1, 0.16682000E+1, 0.53468200E+3, 0.192E+3, 0.144E+3, 0.28878000E+1, 0.18584000E+1, + 0.50038440E+3, 0.192E+3, 0.145E+3, 0.28878000E+1, 0.19003000E+1, 0.46479060E+3, 0.192E+3, + 0.146E+3, 0.28878000E+1, 0.18630000E+1, 0.44970340E+3, 0.192E+3, 0.147E+3, 0.28878000E+1, + 0.96790000E+0, 0.44450890E+3, 0.192E+3, 0.148E+3, 0.28878000E+1, 0.19539000E+1, 0.70553710E+3, + 0.192E+3, 0.149E+3, 0.28878000E+1, 0.96330000E+0, 0.63759540E+3, 0.192E+3, 0.150E+3, + 0.28878000E+1, 0.95140000E+0, 0.59686560E+3, 0.192E+3, 0.151E+3, 0.28878000E+1, 0.97490000E+0, + 0.56459640E+3, 0.192E+3, 0.152E+3, 0.28878000E+1, 0.98110000E+0, 0.51574020E+3, 0.192E+3, + 0.153E+3, 0.28878000E+1, 0.99680000E+0, 0.69501880E+3, 0.192E+3, 0.155E+3, 0.28878000E+1, + 0.99090000E+0, 0.14942771E+4, 0.192E+3, 0.156E+3, 0.28878000E+1, 0.97970000E+0, 0.11109199E+4, + 0.192E+3, 0.157E+3, 0.28878000E+1, 0.19373000E+1, 0.69816140E+3, 0.192E+3, 0.159E+3, + 0.28878000E+1, 0.29425000E+1, 0.68372500E+3, 0.192E+3, 0.160E+3, 0.28878000E+1, 0.29455000E+1, + 0.66206630E+3, 0.192E+3, 0.161E+3, 0.28878000E+1, 0.29413000E+1, 0.66540380E+3, 0.192E+3, + 0.162E+3, 0.28878000E+1, 0.29300000E+1, 0.64179300E+3, 0.192E+3, 0.163E+3, 0.28878000E+1, + 0.18286000E+1, 0.66949760E+3, 0.192E+3, 0.164E+3, 0.28878000E+1, 0.28732000E+1, 0.62884090E+3, + 0.192E+3, 0.165E+3, 0.28878000E+1, 0.29086000E+1, 0.64005220E+3, 0.192E+3, 0.166E+3, + 0.28878000E+1, 0.28965000E+1, 0.59680940E+3, 0.192E+3, 0.167E+3, 0.28878000E+1, 0.29242000E+1, + 0.57978670E+3, 0.192E+3, 0.168E+3, 0.28878000E+1, 0.29282000E+1, 0.57605760E+3, 0.192E+3, + 0.169E+3, 0.28878000E+1, 0.29246000E+1, 0.60540230E+3, 0.192E+3, 0.170E+3, 0.28878000E+1, + 0.28482000E+1, 0.55673610E+3, 0.192E+3, 0.171E+3, 0.28878000E+1, 0.29219000E+1, 0.75552630E+3, + 0.192E+3, 0.172E+3, 0.28878000E+1, 0.19254000E+1, 0.70091760E+3, 0.192E+3, 0.173E+3, + 0.28878000E+1, 0.19459000E+1, 0.63934100E+3, 0.192E+3, 0.174E+3, 0.28878000E+1, 0.19292000E+1, + 0.64727080E+3, 0.192E+3, 0.175E+3, 0.28878000E+1, 0.18104000E+1, 0.56614580E+3, 0.192E+3, + 0.176E+3, 0.28878000E+1, 0.18858000E+1, 0.53275200E+3, 0.192E+3, 0.177E+3, 0.28878000E+1, + 0.18648000E+1, 0.50897860E+3, 0.192E+3, 0.178E+3, 0.28878000E+1, 0.19188000E+1, 0.48681770E+3, + 0.192E+3, 0.179E+3, 0.28878000E+1, 0.98460000E+0, 0.47017820E+3, 0.192E+3, 0.180E+3, + 0.28878000E+1, 0.19896000E+1, 0.75808150E+3, 0.192E+3, 0.181E+3, 0.28878000E+1, 0.92670000E+0, + 0.69014330E+3, 0.192E+3, 0.182E+3, 0.28878000E+1, 0.93830000E+0, 0.66895140E+3, 0.192E+3, + 0.183E+3, 0.28878000E+1, 0.98200000E+0, 0.65052430E+3, 0.192E+3, 0.184E+3, 0.28878000E+1, + 0.98150000E+0, 0.60748900E+3, 0.192E+3, 0.185E+3, 0.28878000E+1, 0.99540000E+0, 0.78264720E+3, + 0.192E+3, 0.187E+3, 0.28878000E+1, 0.97050000E+0, 0.14842630E+4, 0.192E+3, 0.188E+3, + 0.28878000E+1, 0.96620000E+0, 0.82601520E+3, 0.192E+3, 0.189E+3, 0.28878000E+1, 0.29070000E+1, + 0.95479790E+3, 0.192E+3, 0.190E+3, 0.28878000E+1, 0.28844000E+1, 0.85410020E+3, 0.192E+3, + 0.191E+3, 0.28878000E+1, 0.28738000E+1, 0.75386170E+3, 0.192E+3, 0.192E+3, 0.28878000E+1, + 0.28878000E+1, 0.45123600E+2, 0.193E+3, 0.100E+1, 0.29095000E+1, 0.91180000E+0, 0.30097800E+2, + 0.193E+3, 0.200E+1, 0.29095000E+1, 0.00000000E+0, 0.69501280E+3, 0.193E+3, 0.300E+1, + 0.29095000E+1, 0.00000000E+0, 0.40190350E+3, 0.193E+3, 0.400E+1, 0.29095000E+1, 0.00000000E+0, + 0.27145390E+3, 0.193E+3, 0.500E+1, 0.29095000E+1, 0.00000000E+0, 0.18410950E+3, 0.193E+3, + 0.600E+1, 0.29095000E+1, 0.00000000E+0, 0.12930040E+3, 0.193E+3, 0.700E+1, 0.29095000E+1, + 0.00000000E+0, 0.98281200E+2, 0.193E+3, 0.800E+1, 0.29095000E+1, 0.00000000E+0, 0.74758400E+2, + 0.193E+3, 0.900E+1, 0.29095000E+1, 0.00000000E+0, 0.57729000E+2, 0.193E+3, 0.100E+2, + 0.29095000E+1, 0.00000000E+0, 0.83149520E+3, 0.193E+3, 0.110E+2, 0.29095000E+1, 0.00000000E+0, + 0.64031040E+3, 0.193E+3, 0.120E+2, 0.29095000E+1, 0.00000000E+0, 0.59077440E+3, 0.193E+3, + 0.130E+2, 0.29095000E+1, 0.00000000E+0, 0.46630230E+3, 0.193E+3, 0.140E+2, 0.29095000E+1, + 0.00000000E+0, 0.36444330E+3, 0.193E+3, 0.150E+2, 0.29095000E+1, 0.00000000E+0, 0.30311500E+3, + 0.193E+3, 0.160E+2, 0.29095000E+1, 0.00000000E+0, 0.24821860E+3, 0.193E+3, 0.170E+2, + 0.29095000E+1, 0.00000000E+0, 0.20361560E+3, 0.193E+3, 0.180E+2, 0.29095000E+1, 0.00000000E+0, + 0.13643503E+4, 0.193E+3, 0.190E+2, 0.29095000E+1, 0.00000000E+0, 0.11254292E+4, 0.193E+3, + 0.200E+2, 0.29095000E+1, 0.00000000E+0, 0.92988130E+3, 0.193E+3, 0.210E+2, 0.29095000E+1, + 0.00000000E+0, 0.89845340E+3, 0.193E+3, 0.220E+2, 0.29095000E+1, 0.00000000E+0, 0.82298300E+3, + 0.193E+3, 0.230E+2, 0.29095000E+1, 0.00000000E+0, 0.64899350E+3, 0.193E+3, 0.240E+2, + 0.29095000E+1, 0.00000000E+0, 0.70890860E+3, 0.193E+3, 0.250E+2, 0.29095000E+1, 0.00000000E+0, + 0.55705720E+3, 0.193E+3, 0.260E+2, 0.29095000E+1, 0.00000000E+0, 0.59015540E+3, 0.193E+3, + 0.270E+2, 0.29095000E+1, 0.00000000E+0, 0.60771500E+3, 0.193E+3, 0.280E+2, 0.29095000E+1, + 0.00000000E+0, 0.46659660E+3, 0.193E+3, 0.290E+2, 0.29095000E+1, 0.00000000E+0, 0.47890520E+3, + 0.193E+3, 0.300E+2, 0.29095000E+1, 0.00000000E+0, 0.56662400E+3, 0.193E+3, 0.310E+2, + 0.29095000E+1, 0.00000000E+0, 0.50022560E+3, 0.193E+3, 0.320E+2, 0.29095000E+1, 0.00000000E+0, + 0.42735080E+3, 0.193E+3, 0.330E+2, 0.29095000E+1, 0.00000000E+0, 0.38401570E+3, 0.193E+3, + 0.340E+2, 0.29095000E+1, 0.00000000E+0, 0.33665520E+3, 0.193E+3, 0.350E+2, 0.29095000E+1, + 0.00000000E+0, 0.29334880E+3, 0.193E+3, 0.360E+2, 0.29095000E+1, 0.00000000E+0, 0.15296978E+4, + 0.193E+3, 0.370E+2, 0.29095000E+1, 0.00000000E+0, 0.13413275E+4, 0.193E+3, 0.380E+2, + 0.29095000E+1, 0.00000000E+0, 0.11753725E+4, 0.193E+3, 0.390E+2, 0.29095000E+1, 0.00000000E+0, + 0.10568235E+4, 0.193E+3, 0.400E+2, 0.29095000E+1, 0.00000000E+0, 0.96412660E+3, 0.193E+3, + 0.410E+2, 0.29095000E+1, 0.00000000E+0, 0.74533540E+3, 0.193E+3, 0.420E+2, 0.29095000E+1, + 0.00000000E+0, 0.83117090E+3, 0.193E+3, 0.430E+2, 0.29095000E+1, 0.00000000E+0, 0.63418960E+3, + 0.193E+3, 0.440E+2, 0.29095000E+1, 0.00000000E+0, 0.69270260E+3, 0.193E+3, 0.450E+2, + 0.29095000E+1, 0.00000000E+0, 0.64261150E+3, 0.193E+3, 0.460E+2, 0.29095000E+1, 0.00000000E+0, + 0.53650370E+3, 0.193E+3, 0.470E+2, 0.29095000E+1, 0.00000000E+0, 0.56657800E+3, 0.193E+3, + 0.480E+2, 0.29095000E+1, 0.00000000E+0, 0.71009360E+3, 0.193E+3, 0.490E+2, 0.29095000E+1, + 0.00000000E+0, 0.65692100E+3, 0.193E+3, 0.500E+2, 0.29095000E+1, 0.00000000E+0, 0.58601680E+3, + 0.193E+3, 0.510E+2, 0.29095000E+1, 0.00000000E+0, 0.54418120E+3, 0.193E+3, 0.520E+2, + 0.29095000E+1, 0.00000000E+0, 0.49261320E+3, 0.193E+3, 0.530E+2, 0.29095000E+1, 0.00000000E+0, + 0.44348890E+3, 0.193E+3, 0.540E+2, 0.29095000E+1, 0.00000000E+0, 0.18638860E+4, 0.193E+3, + 0.550E+2, 0.29095000E+1, 0.00000000E+0, 0.17104153E+4, 0.193E+3, 0.560E+2, 0.29095000E+1, + 0.00000000E+0, 0.15029787E+4, 0.193E+3, 0.570E+2, 0.29095000E+1, 0.00000000E+0, 0.69246950E+3, + 0.193E+3, 0.580E+2, 0.29095000E+1, 0.27991000E+1, 0.15160160E+4, 0.193E+3, 0.590E+2, + 0.29095000E+1, 0.00000000E+0, 0.14557245E+4, 0.193E+3, 0.600E+2, 0.29095000E+1, 0.00000000E+0, + 0.14191992E+4, 0.193E+3, 0.610E+2, 0.29095000E+1, 0.00000000E+0, 0.13855997E+4, 0.193E+3, + 0.620E+2, 0.29095000E+1, 0.00000000E+0, 0.13558015E+4, 0.193E+3, 0.630E+2, 0.29095000E+1, + 0.00000000E+0, 0.10671944E+4, 0.193E+3, 0.640E+2, 0.29095000E+1, 0.00000000E+0, 0.12015530E+4, + 0.193E+3, 0.650E+2, 0.29095000E+1, 0.00000000E+0, 0.11589243E+4, 0.193E+3, 0.660E+2, + 0.29095000E+1, 0.00000000E+0, 0.12228454E+4, 0.193E+3, 0.670E+2, 0.29095000E+1, 0.00000000E+0, + 0.11968607E+4, 0.193E+3, 0.680E+2, 0.29095000E+1, 0.00000000E+0, 0.11734369E+4, 0.193E+3, + 0.690E+2, 0.29095000E+1, 0.00000000E+0, 0.11596457E+4, 0.193E+3, 0.700E+2, 0.29095000E+1, + 0.00000000E+0, 0.97768160E+3, 0.193E+3, 0.710E+2, 0.29095000E+1, 0.00000000E+0, 0.96156840E+3, + 0.193E+3, 0.720E+2, 0.29095000E+1, 0.00000000E+0, 0.87807320E+3, 0.193E+3, 0.730E+2, + 0.29095000E+1, 0.00000000E+0, 0.74236820E+3, 0.193E+3, 0.740E+2, 0.29095000E+1, 0.00000000E+0, + 0.75524290E+3, 0.193E+3, 0.750E+2, 0.29095000E+1, 0.00000000E+0, 0.68498790E+3, 0.193E+3, + 0.760E+2, 0.29095000E+1, 0.00000000E+0, 0.62777710E+3, 0.193E+3, 0.770E+2, 0.29095000E+1, + 0.00000000E+0, 0.52230280E+3, 0.193E+3, 0.780E+2, 0.29095000E+1, 0.00000000E+0, 0.48830230E+3, + 0.193E+3, 0.790E+2, 0.29095000E+1, 0.00000000E+0, 0.50221500E+3, 0.193E+3, 0.800E+2, + 0.29095000E+1, 0.00000000E+0, 0.73000580E+3, 0.193E+3, 0.810E+2, 0.29095000E+1, 0.00000000E+0, + 0.71376740E+3, 0.193E+3, 0.820E+2, 0.29095000E+1, 0.00000000E+0, 0.65632120E+3, 0.193E+3, + 0.830E+2, 0.29095000E+1, 0.00000000E+0, 0.62632590E+3, 0.193E+3, 0.840E+2, 0.29095000E+1, + 0.00000000E+0, 0.57857790E+3, 0.193E+3, 0.850E+2, 0.29095000E+1, 0.00000000E+0, 0.53088320E+3, + 0.193E+3, 0.860E+2, 0.29095000E+1, 0.00000000E+0, 0.17602462E+4, 0.193E+3, 0.870E+2, + 0.29095000E+1, 0.00000000E+0, 0.16917254E+4, 0.193E+3, 0.880E+2, 0.29095000E+1, 0.00000000E+0, + 0.14957351E+4, 0.193E+3, 0.890E+2, 0.29095000E+1, 0.00000000E+0, 0.13452345E+4, 0.193E+3, + 0.900E+2, 0.29095000E+1, 0.00000000E+0, 0.13357938E+4, 0.193E+3, 0.910E+2, 0.29095000E+1, + 0.00000000E+0, 0.12935031E+4, 0.193E+3, 0.920E+2, 0.29095000E+1, 0.00000000E+0, 0.13314737E+4, + 0.193E+3, 0.930E+2, 0.29095000E+1, 0.00000000E+0, 0.12894340E+4, 0.193E+3, 0.940E+2, + 0.29095000E+1, 0.00000000E+0, 0.72427200E+2, 0.193E+3, 0.101E+3, 0.29095000E+1, 0.00000000E+0, + 0.23377270E+3, 0.193E+3, 0.103E+3, 0.29095000E+1, 0.98650000E+0, 0.29840760E+3, 0.193E+3, + 0.104E+3, 0.29095000E+1, 0.98080000E+0, 0.22859970E+3, 0.193E+3, 0.105E+3, 0.29095000E+1, + 0.97060000E+0, 0.17275920E+3, 0.193E+3, 0.106E+3, 0.29095000E+1, 0.98680000E+0, 0.12063570E+3, + 0.193E+3, 0.107E+3, 0.29095000E+1, 0.99440000E+0, 0.88243900E+2, 0.193E+3, 0.108E+3, + 0.29095000E+1, 0.99250000E+0, 0.61099300E+2, 0.193E+3, 0.109E+3, 0.29095000E+1, 0.99820000E+0, + 0.34193020E+3, 0.193E+3, 0.111E+3, 0.29095000E+1, 0.96840000E+0, 0.52851140E+3, 0.193E+3, + 0.112E+3, 0.29095000E+1, 0.96280000E+0, 0.53561950E+3, 0.193E+3, 0.113E+3, 0.29095000E+1, + 0.96480000E+0, 0.43117410E+3, 0.193E+3, 0.114E+3, 0.29095000E+1, 0.95070000E+0, 0.35382780E+3, + 0.193E+3, 0.115E+3, 0.29095000E+1, 0.99470000E+0, 0.29979380E+3, 0.193E+3, 0.116E+3, + 0.29095000E+1, 0.99480000E+0, 0.24565840E+3, 0.193E+3, 0.117E+3, 0.29095000E+1, 0.99720000E+0, + 0.47272210E+3, 0.193E+3, 0.119E+3, 0.29095000E+1, 0.97670000E+0, 0.90129920E+3, 0.193E+3, + 0.120E+3, 0.29095000E+1, 0.98310000E+0, 0.47293970E+3, 0.193E+3, 0.121E+3, 0.29095000E+1, + 0.18627000E+1, 0.45672220E+3, 0.193E+3, 0.122E+3, 0.29095000E+1, 0.18299000E+1, 0.44764490E+3, + 0.193E+3, 0.123E+3, 0.29095000E+1, 0.19138000E+1, 0.44350180E+3, 0.193E+3, 0.124E+3, + 0.29095000E+1, 0.18269000E+1, 0.40825230E+3, 0.193E+3, 0.125E+3, 0.29095000E+1, 0.16406000E+1, + 0.37802020E+3, 0.193E+3, 0.126E+3, 0.29095000E+1, 0.16483000E+1, 0.36070350E+3, 0.193E+3, + 0.127E+3, 0.29095000E+1, 0.17149000E+1, 0.35264190E+3, 0.193E+3, 0.128E+3, 0.29095000E+1, + 0.17937000E+1, 0.34833050E+3, 0.193E+3, 0.129E+3, 0.29095000E+1, 0.95760000E+0, 0.32702340E+3, + 0.193E+3, 0.130E+3, 0.29095000E+1, 0.19419000E+1, 0.53235460E+3, 0.193E+3, 0.131E+3, + 0.29095000E+1, 0.96010000E+0, 0.46817890E+3, 0.193E+3, 0.132E+3, 0.29095000E+1, 0.94340000E+0, + 0.42016770E+3, 0.193E+3, 0.133E+3, 0.29095000E+1, 0.98890000E+0, 0.38416910E+3, 0.193E+3, + 0.134E+3, 0.29095000E+1, 0.99010000E+0, 0.33897840E+3, 0.193E+3, 0.135E+3, 0.29095000E+1, + 0.99740000E+0, 0.56438650E+3, 0.193E+3, 0.137E+3, 0.29095000E+1, 0.97380000E+0, 0.10971255E+4, + 0.193E+3, 0.138E+3, 0.29095000E+1, 0.98010000E+0, 0.83943700E+3, 0.193E+3, 0.139E+3, + 0.29095000E+1, 0.19153000E+1, 0.62573340E+3, 0.193E+3, 0.140E+3, 0.29095000E+1, 0.19355000E+1, + 0.63197490E+3, 0.193E+3, 0.141E+3, 0.29095000E+1, 0.19545000E+1, 0.58965940E+3, 0.193E+3, + 0.142E+3, 0.29095000E+1, 0.19420000E+1, 0.66095050E+3, 0.193E+3, 0.143E+3, 0.29095000E+1, + 0.16682000E+1, 0.51451210E+3, 0.193E+3, 0.144E+3, 0.29095000E+1, 0.18584000E+1, 0.48157200E+3, + 0.193E+3, 0.145E+3, 0.29095000E+1, 0.19003000E+1, 0.44743080E+3, 0.193E+3, 0.146E+3, + 0.29095000E+1, 0.18630000E+1, 0.43285140E+3, 0.193E+3, 0.147E+3, 0.29095000E+1, 0.96790000E+0, + 0.42822300E+3, 0.193E+3, 0.148E+3, 0.29095000E+1, 0.19539000E+1, 0.67704980E+3, 0.193E+3, + 0.149E+3, 0.29095000E+1, 0.96330000E+0, 0.61292050E+3, 0.193E+3, 0.150E+3, 0.29095000E+1, + 0.95140000E+0, 0.57443630E+3, 0.193E+3, 0.151E+3, 0.29095000E+1, 0.97490000E+0, 0.54380490E+3, + 0.193E+3, 0.152E+3, 0.29095000E+1, 0.98110000E+0, 0.49721050E+3, 0.193E+3, 0.153E+3, + 0.29095000E+1, 0.99680000E+0, 0.66750050E+3, 0.193E+3, 0.155E+3, 0.29095000E+1, 0.99090000E+0, + 0.14228735E+4, 0.193E+3, 0.156E+3, 0.29095000E+1, 0.97970000E+0, 0.10625153E+4, 0.193E+3, + 0.157E+3, 0.29095000E+1, 0.19373000E+1, 0.67166460E+3, 0.193E+3, 0.159E+3, 0.29095000E+1, + 0.29425000E+1, 0.65779210E+3, 0.193E+3, 0.160E+3, 0.29095000E+1, 0.29455000E+1, 0.63700760E+3, + 0.193E+3, 0.161E+3, 0.29095000E+1, 0.29413000E+1, 0.64004320E+3, 0.193E+3, 0.162E+3, + 0.29095000E+1, 0.29300000E+1, 0.61687680E+3, 0.193E+3, 0.163E+3, 0.29095000E+1, 0.18286000E+1, + 0.64393890E+3, 0.193E+3, 0.164E+3, 0.29095000E+1, 0.28732000E+1, 0.60497690E+3, 0.193E+3, + 0.165E+3, 0.29095000E+1, 0.29086000E+1, 0.61545730E+3, 0.193E+3, 0.166E+3, 0.29095000E+1, + 0.28965000E+1, 0.57428150E+3, 0.193E+3, 0.167E+3, 0.29095000E+1, 0.29242000E+1, 0.55794580E+3, + 0.193E+3, 0.168E+3, 0.29095000E+1, 0.29282000E+1, 0.55432010E+3, 0.193E+3, 0.169E+3, + 0.29095000E+1, 0.29246000E+1, 0.58234520E+3, 0.193E+3, 0.170E+3, 0.29095000E+1, 0.28482000E+1, + 0.53579050E+3, 0.193E+3, 0.171E+3, 0.29095000E+1, 0.29219000E+1, 0.72482070E+3, 0.193E+3, + 0.172E+3, 0.29095000E+1, 0.19254000E+1, 0.67316650E+3, 0.193E+3, 0.173E+3, 0.29095000E+1, + 0.19459000E+1, 0.61471110E+3, 0.193E+3, 0.174E+3, 0.29095000E+1, 0.19292000E+1, 0.62176580E+3, + 0.193E+3, 0.175E+3, 0.29095000E+1, 0.18104000E+1, 0.54516120E+3, 0.193E+3, 0.176E+3, + 0.29095000E+1, 0.18858000E+1, 0.51320580E+3, 0.193E+3, 0.177E+3, 0.29095000E+1, 0.18648000E+1, + 0.49042130E+3, 0.193E+3, 0.178E+3, 0.29095000E+1, 0.19188000E+1, 0.46907220E+3, 0.193E+3, + 0.179E+3, 0.29095000E+1, 0.98460000E+0, 0.45340690E+3, 0.193E+3, 0.180E+3, 0.29095000E+1, + 0.19896000E+1, 0.72771340E+3, 0.193E+3, 0.181E+3, 0.29095000E+1, 0.92670000E+0, 0.66365960E+3, + 0.193E+3, 0.182E+3, 0.29095000E+1, 0.93830000E+0, 0.64384950E+3, 0.193E+3, 0.183E+3, + 0.29095000E+1, 0.98200000E+0, 0.62649490E+3, 0.193E+3, 0.184E+3, 0.29095000E+1, 0.98150000E+0, + 0.58554410E+3, 0.193E+3, 0.185E+3, 0.29095000E+1, 0.99540000E+0, 0.75173280E+3, 0.193E+3, + 0.187E+3, 0.29095000E+1, 0.97050000E+0, 0.14153925E+4, 0.193E+3, 0.188E+3, 0.29095000E+1, + 0.96620000E+0, 0.79462310E+3, 0.193E+3, 0.189E+3, 0.29095000E+1, 0.29070000E+1, 0.91695930E+3, + 0.193E+3, 0.190E+3, 0.29095000E+1, 0.28844000E+1, 0.82052080E+3, 0.193E+3, 0.191E+3, + 0.29095000E+1, 0.28738000E+1, 0.72537300E+3, 0.193E+3, 0.192E+3, 0.29095000E+1, 0.28878000E+1, + 0.69816440E+3, 0.193E+3, 0.193E+3, 0.29095000E+1, 0.29095000E+1, 0.52391900E+2, 0.194E+3, + 0.100E+1, 0.19209000E+1, 0.91180000E+0, 0.33861500E+2, 0.194E+3, 0.200E+1, 0.19209000E+1, + 0.00000000E+0, 0.97720270E+3, 0.194E+3, 0.300E+1, 0.19209000E+1, 0.00000000E+0, 0.51120280E+3, + 0.194E+3, 0.400E+1, 0.19209000E+1, 0.00000000E+0, 0.33002550E+3, 0.194E+3, 0.500E+1, + 0.19209000E+1, 0.00000000E+0, 0.21709250E+3, 0.194E+3, 0.600E+1, 0.19209000E+1, 0.00000000E+0, + 0.14929170E+3, 0.194E+3, 0.700E+1, 0.19209000E+1, 0.00000000E+0, 0.11190540E+3, 0.194E+3, + 0.800E+1, 0.19209000E+1, 0.00000000E+0, 0.84162800E+2, 0.194E+3, 0.900E+1, 0.19209000E+1, + 0.00000000E+0, 0.64433300E+2, 0.194E+3, 0.100E+2, 0.19209000E+1, 0.00000000E+0, 0.11617208E+4, + 0.194E+3, 0.110E+2, 0.19209000E+1, 0.00000000E+0, 0.82748750E+3, 0.194E+3, 0.120E+2, + 0.19209000E+1, 0.00000000E+0, 0.74501090E+3, 0.194E+3, 0.130E+2, 0.19209000E+1, 0.00000000E+0, + 0.56932030E+3, 0.194E+3, 0.140E+2, 0.19209000E+1, 0.00000000E+0, 0.43398740E+3, 0.194E+3, + 0.150E+2, 0.19209000E+1, 0.00000000E+0, 0.35559410E+3, 0.194E+3, 0.160E+2, 0.19209000E+1, + 0.00000000E+0, 0.28720610E+3, 0.194E+3, 0.170E+2, 0.19209000E+1, 0.00000000E+0, 0.23291960E+3, + 0.194E+3, 0.180E+2, 0.19209000E+1, 0.00000000E+0, 0.19509820E+4, 0.194E+3, 0.190E+2, + 0.19209000E+1, 0.00000000E+0, 0.15010394E+4, 0.194E+3, 0.200E+2, 0.19209000E+1, 0.00000000E+0, + 0.12234261E+4, 0.194E+3, 0.210E+2, 0.19209000E+1, 0.00000000E+0, 0.11694190E+4, 0.194E+3, + 0.220E+2, 0.19209000E+1, 0.00000000E+0, 0.10640685E+4, 0.194E+3, 0.230E+2, 0.19209000E+1, + 0.00000000E+0, 0.83949690E+3, 0.194E+3, 0.240E+2, 0.19209000E+1, 0.00000000E+0, 0.90788740E+3, + 0.194E+3, 0.250E+2, 0.19209000E+1, 0.00000000E+0, 0.71275770E+3, 0.194E+3, 0.260E+2, + 0.19209000E+1, 0.00000000E+0, 0.74344550E+3, 0.194E+3, 0.270E+2, 0.19209000E+1, 0.00000000E+0, + 0.77054070E+3, 0.194E+3, 0.280E+2, 0.19209000E+1, 0.00000000E+0, 0.59237050E+3, 0.194E+3, + 0.290E+2, 0.19209000E+1, 0.00000000E+0, 0.59475930E+3, 0.194E+3, 0.300E+2, 0.19209000E+1, + 0.00000000E+0, 0.70853630E+3, 0.194E+3, 0.310E+2, 0.19209000E+1, 0.00000000E+0, 0.60979120E+3, + 0.194E+3, 0.320E+2, 0.19209000E+1, 0.00000000E+0, 0.51011170E+3, 0.194E+3, 0.330E+2, + 0.19209000E+1, 0.00000000E+0, 0.45283130E+3, 0.194E+3, 0.340E+2, 0.19209000E+1, 0.00000000E+0, + 0.39222240E+3, 0.194E+3, 0.350E+2, 0.19209000E+1, 0.00000000E+0, 0.33815470E+3, 0.194E+3, + 0.360E+2, 0.19209000E+1, 0.00000000E+0, 0.21787996E+4, 0.194E+3, 0.370E+2, 0.19209000E+1, + 0.00000000E+0, 0.17950359E+4, 0.194E+3, 0.380E+2, 0.19209000E+1, 0.00000000E+0, 0.15372794E+4, + 0.194E+3, 0.390E+2, 0.19209000E+1, 0.00000000E+0, 0.13634850E+4, 0.194E+3, 0.400E+2, + 0.19209000E+1, 0.00000000E+0, 0.12334617E+4, 0.194E+3, 0.410E+2, 0.19209000E+1, 0.00000000E+0, + 0.94031770E+3, 0.194E+3, 0.420E+2, 0.19209000E+1, 0.00000000E+0, 0.10541841E+4, 0.194E+3, + 0.430E+2, 0.19209000E+1, 0.00000000E+0, 0.79200470E+3, 0.194E+3, 0.440E+2, 0.19209000E+1, + 0.00000000E+0, 0.86390680E+3, 0.194E+3, 0.450E+2, 0.19209000E+1, 0.00000000E+0, 0.79715370E+3, + 0.194E+3, 0.460E+2, 0.19209000E+1, 0.00000000E+0, 0.66898050E+3, 0.194E+3, 0.470E+2, + 0.19209000E+1, 0.00000000E+0, 0.69811240E+3, 0.194E+3, 0.480E+2, 0.19209000E+1, 0.00000000E+0, + 0.89002560E+3, 0.194E+3, 0.490E+2, 0.19209000E+1, 0.00000000E+0, 0.80567160E+3, 0.194E+3, + 0.500E+2, 0.19209000E+1, 0.00000000E+0, 0.70498790E+3, 0.194E+3, 0.510E+2, 0.19209000E+1, + 0.00000000E+0, 0.64753750E+3, 0.194E+3, 0.520E+2, 0.19209000E+1, 0.00000000E+0, 0.57956520E+3, + 0.194E+3, 0.530E+2, 0.19209000E+1, 0.00000000E+0, 0.51640770E+3, 0.194E+3, 0.540E+2, + 0.19209000E+1, 0.00000000E+0, 0.26607475E+4, 0.194E+3, 0.550E+2, 0.19209000E+1, 0.00000000E+0, + 0.23107445E+4, 0.194E+3, 0.560E+2, 0.19209000E+1, 0.00000000E+0, 0.19831026E+4, 0.194E+3, + 0.570E+2, 0.19209000E+1, 0.00000000E+0, 0.83646730E+3, 0.194E+3, 0.580E+2, 0.19209000E+1, + 0.27991000E+1, 0.20333939E+4, 0.194E+3, 0.590E+2, 0.19209000E+1, 0.00000000E+0, 0.19427158E+4, + 0.194E+3, 0.600E+2, 0.19209000E+1, 0.00000000E+0, 0.18916327E+4, 0.194E+3, 0.610E+2, + 0.19209000E+1, 0.00000000E+0, 0.18448932E+4, 0.194E+3, 0.620E+2, 0.19209000E+1, 0.00000000E+0, + 0.18033780E+4, 0.194E+3, 0.630E+2, 0.19209000E+1, 0.00000000E+0, 0.13864919E+4, 0.194E+3, + 0.640E+2, 0.19209000E+1, 0.00000000E+0, 0.16271471E+4, 0.194E+3, 0.650E+2, 0.19209000E+1, + 0.00000000E+0, 0.15648029E+4, 0.194E+3, 0.660E+2, 0.19209000E+1, 0.00000000E+0, 0.16162873E+4, + 0.194E+3, 0.670E+2, 0.19209000E+1, 0.00000000E+0, 0.15807484E+4, 0.194E+3, 0.680E+2, + 0.19209000E+1, 0.00000000E+0, 0.15482741E+4, 0.194E+3, 0.690E+2, 0.19209000E+1, 0.00000000E+0, + 0.15315185E+4, 0.194E+3, 0.700E+2, 0.19209000E+1, 0.00000000E+0, 0.12721137E+4, 0.194E+3, + 0.710E+2, 0.19209000E+1, 0.00000000E+0, 0.12215252E+4, 0.194E+3, 0.720E+2, 0.19209000E+1, + 0.00000000E+0, 0.11011039E+4, 0.194E+3, 0.730E+2, 0.19209000E+1, 0.00000000E+0, 0.92310550E+3, + 0.194E+3, 0.740E+2, 0.19209000E+1, 0.00000000E+0, 0.93407850E+3, 0.194E+3, 0.750E+2, + 0.19209000E+1, 0.00000000E+0, 0.83812920E+3, 0.194E+3, 0.760E+2, 0.19209000E+1, 0.00000000E+0, + 0.76168140E+3, 0.194E+3, 0.770E+2, 0.19209000E+1, 0.00000000E+0, 0.62877650E+3, 0.194E+3, + 0.780E+2, 0.19209000E+1, 0.00000000E+0, 0.58595420E+3, 0.194E+3, 0.790E+2, 0.19209000E+1, + 0.00000000E+0, 0.59987110E+3, 0.194E+3, 0.800E+2, 0.19209000E+1, 0.00000000E+0, 0.91189380E+3, + 0.194E+3, 0.810E+2, 0.19209000E+1, 0.00000000E+0, 0.87576580E+3, 0.194E+3, 0.820E+2, + 0.19209000E+1, 0.00000000E+0, 0.79106510E+3, 0.194E+3, 0.830E+2, 0.19209000E+1, 0.00000000E+0, + 0.74764610E+3, 0.194E+3, 0.840E+2, 0.19209000E+1, 0.00000000E+0, 0.68300400E+3, 0.194E+3, + 0.850E+2, 0.19209000E+1, 0.00000000E+0, 0.62065460E+3, 0.194E+3, 0.860E+2, 0.19209000E+1, + 0.00000000E+0, 0.24608767E+4, 0.194E+3, 0.870E+2, 0.19209000E+1, 0.00000000E+0, 0.22584201E+4, + 0.194E+3, 0.880E+2, 0.19209000E+1, 0.00000000E+0, 0.19536369E+4, 0.194E+3, 0.890E+2, + 0.19209000E+1, 0.00000000E+0, 0.17167267E+4, 0.194E+3, 0.900E+2, 0.19209000E+1, 0.00000000E+0, + 0.17259338E+4, 0.194E+3, 0.910E+2, 0.19209000E+1, 0.00000000E+0, 0.16700620E+4, 0.194E+3, + 0.920E+2, 0.19209000E+1, 0.00000000E+0, 0.17432351E+4, 0.194E+3, 0.930E+2, 0.19209000E+1, + 0.00000000E+0, 0.16834151E+4, 0.194E+3, 0.940E+2, 0.19209000E+1, 0.00000000E+0, 0.86005200E+2, + 0.194E+3, 0.101E+3, 0.19209000E+1, 0.00000000E+0, 0.29568750E+3, 0.194E+3, 0.103E+3, + 0.19209000E+1, 0.98650000E+0, 0.37496860E+3, 0.194E+3, 0.104E+3, 0.19209000E+1, 0.98080000E+0, + 0.27566970E+3, 0.194E+3, 0.105E+3, 0.19209000E+1, 0.97060000E+0, 0.20403100E+3, 0.194E+3, + 0.106E+3, 0.19209000E+1, 0.98680000E+0, 0.13932300E+3, 0.194E+3, 0.107E+3, 0.19209000E+1, + 0.99440000E+0, 0.10015200E+3, 0.194E+3, 0.108E+3, 0.19209000E+1, 0.99250000E+0, 0.67951400E+2, + 0.194E+3, 0.109E+3, 0.19209000E+1, 0.99820000E+0, 0.43651000E+3, 0.194E+3, 0.111E+3, + 0.19209000E+1, 0.96840000E+0, 0.67820670E+3, 0.194E+3, 0.112E+3, 0.19209000E+1, 0.96280000E+0, + 0.67169720E+3, 0.194E+3, 0.113E+3, 0.19209000E+1, 0.96480000E+0, 0.52429270E+3, 0.194E+3, + 0.114E+3, 0.19209000E+1, 0.95070000E+0, 0.42107980E+3, 0.194E+3, 0.115E+3, 0.19209000E+1, + 0.99470000E+0, 0.35186230E+3, 0.194E+3, 0.116E+3, 0.19209000E+1, 0.99480000E+0, 0.28433720E+3, + 0.194E+3, 0.117E+3, 0.19209000E+1, 0.99720000E+0, 0.59504560E+3, 0.194E+3, 0.119E+3, + 0.19209000E+1, 0.97670000E+0, 0.12074896E+4, 0.194E+3, 0.120E+3, 0.19209000E+1, 0.98310000E+0, + 0.57829290E+3, 0.194E+3, 0.121E+3, 0.19209000E+1, 0.18627000E+1, 0.55886520E+3, 0.194E+3, + 0.122E+3, 0.19209000E+1, 0.18299000E+1, 0.54792340E+3, 0.194E+3, 0.123E+3, 0.19209000E+1, + 0.19138000E+1, 0.54465600E+3, 0.194E+3, 0.124E+3, 0.19209000E+1, 0.18269000E+1, 0.49339110E+3, + 0.194E+3, 0.125E+3, 0.19209000E+1, 0.16406000E+1, 0.45504230E+3, 0.194E+3, 0.126E+3, + 0.19209000E+1, 0.16483000E+1, 0.43439050E+3, 0.194E+3, 0.127E+3, 0.19209000E+1, 0.17149000E+1, + 0.42520030E+3, 0.194E+3, 0.128E+3, 0.19209000E+1, 0.17937000E+1, 0.42483420E+3, 0.194E+3, + 0.129E+3, 0.19209000E+1, 0.95760000E+0, 0.39059480E+3, 0.194E+3, 0.130E+3, 0.19209000E+1, + 0.19419000E+1, 0.66138520E+3, 0.194E+3, 0.131E+3, 0.19209000E+1, 0.96010000E+0, 0.56767290E+3, + 0.194E+3, 0.132E+3, 0.19209000E+1, 0.94340000E+0, 0.50098750E+3, 0.194E+3, 0.133E+3, + 0.19209000E+1, 0.98890000E+0, 0.45312420E+3, 0.194E+3, 0.134E+3, 0.19209000E+1, 0.99010000E+0, + 0.39518880E+3, 0.194E+3, 0.135E+3, 0.19209000E+1, 0.99740000E+0, 0.70695870E+3, 0.194E+3, + 0.137E+3, 0.19209000E+1, 0.97380000E+0, 0.14771099E+4, 0.194E+3, 0.138E+3, 0.19209000E+1, + 0.98010000E+0, 0.10809253E+4, 0.194E+3, 0.139E+3, 0.19209000E+1, 0.19153000E+1, 0.76828830E+3, + 0.194E+3, 0.140E+3, 0.19209000E+1, 0.19355000E+1, 0.77551800E+3, 0.194E+3, 0.141E+3, + 0.19209000E+1, 0.19545000E+1, 0.72086910E+3, 0.194E+3, 0.142E+3, 0.19209000E+1, 0.19420000E+1, + 0.82604480E+3, 0.194E+3, 0.143E+3, 0.19209000E+1, 0.16682000E+1, 0.61978620E+3, 0.194E+3, + 0.144E+3, 0.19209000E+1, 0.18584000E+1, 0.57963490E+3, 0.194E+3, 0.145E+3, 0.19209000E+1, + 0.19003000E+1, 0.53729800E+3, 0.194E+3, 0.146E+3, 0.19209000E+1, 0.18630000E+1, 0.52079250E+3, + 0.194E+3, 0.147E+3, 0.19209000E+1, 0.96790000E+0, 0.50925590E+3, 0.194E+3, 0.148E+3, + 0.19209000E+1, 0.19539000E+1, 0.84221840E+3, 0.194E+3, 0.149E+3, 0.19209000E+1, 0.96330000E+0, + 0.74608910E+3, 0.194E+3, 0.150E+3, 0.19209000E+1, 0.95140000E+0, 0.68936250E+3, 0.194E+3, + 0.151E+3, 0.19209000E+1, 0.97490000E+0, 0.64664990E+3, 0.194E+3, 0.152E+3, 0.19209000E+1, + 0.98110000E+0, 0.58507090E+3, 0.194E+3, 0.153E+3, 0.19209000E+1, 0.99680000E+0, 0.82245460E+3, + 0.194E+3, 0.155E+3, 0.19209000E+1, 0.99090000E+0, 0.19411744E+4, 0.194E+3, 0.156E+3, + 0.19209000E+1, 0.97970000E+0, 0.13757929E+4, 0.194E+3, 0.157E+3, 0.19209000E+1, 0.19373000E+1, + 0.81046870E+3, 0.194E+3, 0.159E+3, 0.19209000E+1, 0.29425000E+1, 0.79353070E+3, 0.194E+3, + 0.160E+3, 0.19209000E+1, 0.29455000E+1, 0.76776280E+3, 0.194E+3, 0.161E+3, 0.19209000E+1, + 0.29413000E+1, 0.77400610E+3, 0.194E+3, 0.162E+3, 0.19209000E+1, 0.29300000E+1, 0.75318700E+3, + 0.194E+3, 0.163E+3, 0.19209000E+1, 0.18286000E+1, 0.77907900E+3, 0.194E+3, 0.164E+3, + 0.19209000E+1, 0.28732000E+1, 0.73004770E+3, 0.194E+3, 0.165E+3, 0.19209000E+1, 0.29086000E+1, + 0.74727740E+3, 0.194E+3, 0.166E+3, 0.19209000E+1, 0.28965000E+1, 0.69119800E+3, 0.194E+3, + 0.167E+3, 0.19209000E+1, 0.29242000E+1, 0.67089470E+3, 0.194E+3, 0.168E+3, 0.19209000E+1, + 0.29282000E+1, 0.66702610E+3, 0.194E+3, 0.169E+3, 0.19209000E+1, 0.29246000E+1, 0.70343090E+3, + 0.194E+3, 0.170E+3, 0.19209000E+1, 0.28482000E+1, 0.64373580E+3, 0.194E+3, 0.171E+3, + 0.19209000E+1, 0.29219000E+1, 0.90452750E+3, 0.194E+3, 0.172E+3, 0.19209000E+1, 0.19254000E+1, + 0.82941860E+3, 0.194E+3, 0.173E+3, 0.19209000E+1, 0.19459000E+1, 0.74766610E+3, 0.194E+3, + 0.174E+3, 0.19209000E+1, 0.19292000E+1, 0.76481820E+3, 0.194E+3, 0.175E+3, 0.19209000E+1, + 0.18104000E+1, 0.65146000E+3, 0.194E+3, 0.176E+3, 0.19209000E+1, 0.18858000E+1, 0.61088630E+3, + 0.194E+3, 0.177E+3, 0.19209000E+1, 0.18648000E+1, 0.58248590E+3, 0.194E+3, 0.178E+3, + 0.19209000E+1, 0.19188000E+1, 0.55757750E+3, 0.194E+3, 0.179E+3, 0.19209000E+1, 0.98460000E+0, + 0.53344460E+3, 0.194E+3, 0.180E+3, 0.19209000E+1, 0.19896000E+1, 0.90297300E+3, 0.194E+3, + 0.181E+3, 0.19209000E+1, 0.92670000E+0, 0.80572640E+3, 0.194E+3, 0.182E+3, 0.19209000E+1, + 0.93830000E+0, 0.77305280E+3, 0.194E+3, 0.183E+3, 0.19209000E+1, 0.98200000E+0, 0.74671410E+3, + 0.194E+3, 0.184E+3, 0.19209000E+1, 0.98150000E+0, 0.69111280E+3, 0.194E+3, 0.185E+3, + 0.19209000E+1, 0.99540000E+0, 0.92497250E+3, 0.194E+3, 0.187E+3, 0.19209000E+1, 0.97050000E+0, + 0.18985076E+4, 0.194E+3, 0.188E+3, 0.19209000E+1, 0.96620000E+0, 0.95915900E+3, 0.194E+3, + 0.189E+3, 0.19209000E+1, 0.29070000E+1, 0.11307742E+4, 0.194E+3, 0.190E+3, 0.19209000E+1, + 0.28844000E+1, 0.10088729E+4, 0.194E+3, 0.191E+3, 0.19209000E+1, 0.28738000E+1, 0.87461490E+3, + 0.194E+3, 0.192E+3, 0.19209000E+1, 0.28878000E+1, 0.83895690E+3, 0.194E+3, 0.193E+3, + 0.19209000E+1, 0.29095000E+1, 0.10512468E+4, 0.194E+3, 0.194E+3, 0.19209000E+1, 0.19209000E+1, + 0.12593100E+2, 0.204E+3, 0.100E+1, 0.19697000E+1, 0.91180000E+0, 0.81628000E+1, 0.204E+3, + 0.200E+1, 0.19697000E+1, 0.00000000E+0, 0.19470360E+3, 0.204E+3, 0.300E+1, 0.19697000E+1, + 0.00000000E+0, 0.11396770E+3, 0.204E+3, 0.400E+1, 0.19697000E+1, 0.00000000E+0, 0.76723000E+2, + 0.204E+3, 0.500E+1, 0.19697000E+1, 0.00000000E+0, 0.51562800E+2, 0.204E+3, 0.600E+1, + 0.19697000E+1, 0.00000000E+0, 0.35790200E+2, 0.204E+3, 0.700E+1, 0.19697000E+1, 0.00000000E+0, + 0.26895400E+2, 0.204E+3, 0.800E+1, 0.19697000E+1, 0.00000000E+0, 0.20208300E+2, 0.204E+3, + 0.900E+1, 0.19697000E+1, 0.00000000E+0, 0.15417600E+2, 0.204E+3, 0.100E+2, 0.19697000E+1, + 0.00000000E+0, 0.23280600E+3, 0.204E+3, 0.110E+2, 0.19697000E+1, 0.00000000E+0, 0.18116530E+3, + 0.204E+3, 0.120E+2, 0.19697000E+1, 0.00000000E+0, 0.16729290E+3, 0.204E+3, 0.130E+2, + 0.19697000E+1, 0.00000000E+0, 0.13189200E+3, 0.204E+3, 0.140E+2, 0.19697000E+1, 0.00000000E+0, + 0.10261760E+3, 0.204E+3, 0.150E+2, 0.19697000E+1, 0.00000000E+0, 0.84869100E+2, 0.204E+3, + 0.160E+2, 0.19697000E+1, 0.00000000E+0, 0.69006900E+2, 0.204E+3, 0.170E+2, 0.19697000E+1, + 0.00000000E+0, 0.56151700E+2, 0.204E+3, 0.180E+2, 0.19697000E+1, 0.00000000E+0, 0.37942250E+3, + 0.204E+3, 0.190E+2, 0.19697000E+1, 0.00000000E+0, 0.31651020E+3, 0.204E+3, 0.200E+2, + 0.19697000E+1, 0.00000000E+0, 0.26194430E+3, 0.204E+3, 0.210E+2, 0.19697000E+1, 0.00000000E+0, + 0.25305430E+3, 0.204E+3, 0.220E+2, 0.19697000E+1, 0.00000000E+0, 0.23180650E+3, 0.204E+3, + 0.230E+2, 0.19697000E+1, 0.00000000E+0, 0.18215580E+3, 0.204E+3, 0.240E+2, 0.19697000E+1, + 0.00000000E+0, 0.19964260E+3, 0.204E+3, 0.250E+2, 0.19697000E+1, 0.00000000E+0, 0.15628450E+3, + 0.204E+3, 0.260E+2, 0.19697000E+1, 0.00000000E+0, 0.16621660E+3, 0.204E+3, 0.270E+2, + 0.19697000E+1, 0.00000000E+0, 0.17120430E+3, 0.204E+3, 0.280E+2, 0.19697000E+1, 0.00000000E+0, + 0.13080120E+3, 0.204E+3, 0.290E+2, 0.19697000E+1, 0.00000000E+0, 0.13479330E+3, 0.204E+3, + 0.300E+2, 0.19697000E+1, 0.00000000E+0, 0.15992730E+3, 0.204E+3, 0.310E+2, 0.19697000E+1, + 0.00000000E+0, 0.14114890E+3, 0.204E+3, 0.320E+2, 0.19697000E+1, 0.00000000E+0, 0.12022240E+3, + 0.204E+3, 0.330E+2, 0.19697000E+1, 0.00000000E+0, 0.10763710E+3, 0.204E+3, 0.340E+2, + 0.19697000E+1, 0.00000000E+0, 0.93891100E+2, 0.204E+3, 0.350E+2, 0.19697000E+1, 0.00000000E+0, + 0.81330600E+2, 0.204E+3, 0.360E+2, 0.19697000E+1, 0.00000000E+0, 0.42517040E+3, 0.204E+3, + 0.370E+2, 0.19697000E+1, 0.00000000E+0, 0.37664680E+3, 0.204E+3, 0.380E+2, 0.19697000E+1, + 0.00000000E+0, 0.33071900E+3, 0.204E+3, 0.390E+2, 0.19697000E+1, 0.00000000E+0, 0.29747500E+3, + 0.204E+3, 0.400E+2, 0.19697000E+1, 0.00000000E+0, 0.27126060E+3, 0.204E+3, 0.410E+2, + 0.19697000E+1, 0.00000000E+0, 0.20909590E+3, 0.204E+3, 0.420E+2, 0.19697000E+1, 0.00000000E+0, + 0.23346060E+3, 0.204E+3, 0.430E+2, 0.19697000E+1, 0.00000000E+0, 0.17751740E+3, 0.204E+3, + 0.440E+2, 0.19697000E+1, 0.00000000E+0, 0.19439840E+3, 0.204E+3, 0.450E+2, 0.19697000E+1, + 0.00000000E+0, 0.18021780E+3, 0.204E+3, 0.460E+2, 0.19697000E+1, 0.00000000E+0, 0.14971980E+3, + 0.204E+3, 0.470E+2, 0.19697000E+1, 0.00000000E+0, 0.15869370E+3, 0.204E+3, 0.480E+2, + 0.19697000E+1, 0.00000000E+0, 0.19941110E+3, 0.204E+3, 0.490E+2, 0.19697000E+1, 0.00000000E+0, + 0.18468490E+3, 0.204E+3, 0.500E+2, 0.19697000E+1, 0.00000000E+0, 0.16453480E+3, 0.204E+3, + 0.510E+2, 0.19697000E+1, 0.00000000E+0, 0.15249560E+3, 0.204E+3, 0.520E+2, 0.19697000E+1, + 0.00000000E+0, 0.13761920E+3, 0.204E+3, 0.530E+2, 0.19697000E+1, 0.00000000E+0, 0.12340700E+3, + 0.204E+3, 0.540E+2, 0.19697000E+1, 0.00000000E+0, 0.51787260E+3, 0.204E+3, 0.550E+2, + 0.19697000E+1, 0.00000000E+0, 0.47936610E+3, 0.204E+3, 0.560E+2, 0.19697000E+1, 0.00000000E+0, + 0.42227540E+3, 0.204E+3, 0.570E+2, 0.19697000E+1, 0.00000000E+0, 0.19417280E+3, 0.204E+3, + 0.580E+2, 0.19697000E+1, 0.27991000E+1, 0.42478830E+3, 0.204E+3, 0.590E+2, 0.19697000E+1, + 0.00000000E+0, 0.40812030E+3, 0.204E+3, 0.600E+2, 0.19697000E+1, 0.00000000E+0, 0.39794790E+3, + 0.204E+3, 0.610E+2, 0.19697000E+1, 0.00000000E+0, 0.38859250E+3, 0.204E+3, 0.620E+2, + 0.19697000E+1, 0.00000000E+0, 0.38030110E+3, 0.204E+3, 0.630E+2, 0.19697000E+1, 0.00000000E+0, + 0.29932330E+3, 0.204E+3, 0.640E+2, 0.19697000E+1, 0.00000000E+0, 0.33536650E+3, 0.204E+3, + 0.650E+2, 0.19697000E+1, 0.00000000E+0, 0.32359410E+3, 0.204E+3, 0.660E+2, 0.19697000E+1, + 0.00000000E+0, 0.34328500E+3, 0.204E+3, 0.670E+2, 0.19697000E+1, 0.00000000E+0, 0.33605070E+3, + 0.204E+3, 0.680E+2, 0.19697000E+1, 0.00000000E+0, 0.32953550E+3, 0.204E+3, 0.690E+2, + 0.19697000E+1, 0.00000000E+0, 0.32568440E+3, 0.204E+3, 0.700E+2, 0.19697000E+1, 0.00000000E+0, + 0.27459690E+3, 0.204E+3, 0.710E+2, 0.19697000E+1, 0.00000000E+0, 0.27080850E+3, 0.204E+3, + 0.720E+2, 0.19697000E+1, 0.00000000E+0, 0.24715510E+3, 0.204E+3, 0.730E+2, 0.19697000E+1, + 0.00000000E+0, 0.20829050E+3, 0.204E+3, 0.740E+2, 0.19697000E+1, 0.00000000E+0, 0.21201830E+3, + 0.204E+3, 0.750E+2, 0.19697000E+1, 0.00000000E+0, 0.19203170E+3, 0.204E+3, 0.760E+2, + 0.19697000E+1, 0.00000000E+0, 0.17571480E+3, 0.204E+3, 0.770E+2, 0.19697000E+1, 0.00000000E+0, + 0.14552190E+3, 0.204E+3, 0.780E+2, 0.19697000E+1, 0.00000000E+0, 0.13578630E+3, 0.204E+3, + 0.790E+2, 0.19697000E+1, 0.00000000E+0, 0.13983510E+3, 0.204E+3, 0.800E+2, 0.19697000E+1, + 0.00000000E+0, 0.20418140E+3, 0.204E+3, 0.810E+2, 0.19697000E+1, 0.00000000E+0, 0.20002350E+3, + 0.204E+3, 0.820E+2, 0.19697000E+1, 0.00000000E+0, 0.18383790E+3, 0.204E+3, 0.830E+2, + 0.19697000E+1, 0.00000000E+0, 0.17525160E+3, 0.204E+3, 0.840E+2, 0.19697000E+1, 0.00000000E+0, + 0.16152400E+3, 0.204E+3, 0.850E+2, 0.19697000E+1, 0.00000000E+0, 0.14775410E+3, 0.204E+3, + 0.860E+2, 0.19697000E+1, 0.00000000E+0, 0.49003150E+3, 0.204E+3, 0.870E+2, 0.19697000E+1, + 0.00000000E+0, 0.47451000E+3, 0.204E+3, 0.880E+2, 0.19697000E+1, 0.00000000E+0, 0.42036790E+3, + 0.204E+3, 0.890E+2, 0.19697000E+1, 0.00000000E+0, 0.37811690E+3, 0.204E+3, 0.900E+2, + 0.19697000E+1, 0.00000000E+0, 0.37472790E+3, 0.204E+3, 0.910E+2, 0.19697000E+1, 0.00000000E+0, + 0.36278690E+3, 0.204E+3, 0.920E+2, 0.19697000E+1, 0.00000000E+0, 0.37304730E+3, 0.204E+3, + 0.930E+2, 0.19697000E+1, 0.00000000E+0, 0.36135530E+3, 0.204E+3, 0.940E+2, 0.19697000E+1, + 0.00000000E+0, 0.20403900E+2, 0.204E+3, 0.101E+3, 0.19697000E+1, 0.00000000E+0, 0.66200900E+2, + 0.204E+3, 0.103E+3, 0.19697000E+1, 0.98650000E+0, 0.84400000E+2, 0.204E+3, 0.104E+3, + 0.19697000E+1, 0.98080000E+0, 0.64430100E+2, 0.204E+3, 0.105E+3, 0.19697000E+1, 0.97060000E+0, + 0.48307200E+2, 0.204E+3, 0.106E+3, 0.19697000E+1, 0.98680000E+0, 0.33327400E+2, 0.204E+3, + 0.107E+3, 0.19697000E+1, 0.99440000E+0, 0.24059200E+2, 0.204E+3, 0.108E+3, 0.19697000E+1, + 0.99250000E+0, 0.16318500E+2, 0.204E+3, 0.109E+3, 0.19697000E+1, 0.99820000E+0, 0.96512500E+2, + 0.204E+3, 0.111E+3, 0.19697000E+1, 0.96840000E+0, 0.14938320E+3, 0.204E+3, 0.112E+3, + 0.19697000E+1, 0.96280000E+0, 0.15159310E+3, 0.204E+3, 0.113E+3, 0.19697000E+1, 0.96480000E+0, + 0.12183330E+3, 0.204E+3, 0.114E+3, 0.19697000E+1, 0.95070000E+0, 0.99565600E+2, 0.204E+3, + 0.115E+3, 0.19697000E+1, 0.99470000E+0, 0.83918100E+2, 0.204E+3, 0.116E+3, 0.19697000E+1, + 0.99480000E+0, 0.68280600E+2, 0.204E+3, 0.117E+3, 0.19697000E+1, 0.99720000E+0, 0.13247510E+3, + 0.204E+3, 0.119E+3, 0.19697000E+1, 0.97670000E+0, 0.25257780E+3, 0.204E+3, 0.120E+3, + 0.19697000E+1, 0.98310000E+0, 0.13298680E+3, 0.204E+3, 0.121E+3, 0.19697000E+1, 0.18627000E+1, + 0.12828620E+3, 0.204E+3, 0.122E+3, 0.19697000E+1, 0.18299000E+1, 0.12567780E+3, 0.204E+3, + 0.123E+3, 0.19697000E+1, 0.19138000E+1, 0.12446450E+3, 0.204E+3, 0.124E+3, 0.19697000E+1, + 0.18269000E+1, 0.11464650E+3, 0.204E+3, 0.125E+3, 0.19697000E+1, 0.16406000E+1, 0.10602860E+3, + 0.204E+3, 0.126E+3, 0.19697000E+1, 0.16483000E+1, 0.10108010E+3, 0.204E+3, 0.127E+3, + 0.19697000E+1, 0.17149000E+1, 0.98800400E+2, 0.204E+3, 0.128E+3, 0.19697000E+1, 0.17937000E+1, + 0.97534000E+2, 0.204E+3, 0.129E+3, 0.19697000E+1, 0.95760000E+0, 0.91622700E+2, 0.204E+3, + 0.130E+3, 0.19697000E+1, 0.19419000E+1, 0.15021480E+3, 0.204E+3, 0.131E+3, 0.19697000E+1, + 0.96010000E+0, 0.13199340E+3, 0.204E+3, 0.132E+3, 0.19697000E+1, 0.94340000E+0, 0.11815200E+3, + 0.204E+3, 0.133E+3, 0.19697000E+1, 0.98890000E+0, 0.10767130E+3, 0.204E+3, 0.134E+3, + 0.19697000E+1, 0.99010000E+0, 0.94551500E+2, 0.204E+3, 0.135E+3, 0.19697000E+1, 0.99740000E+0, + 0.15794790E+3, 0.204E+3, 0.137E+3, 0.19697000E+1, 0.97380000E+0, 0.30694330E+3, 0.204E+3, + 0.138E+3, 0.19697000E+1, 0.98010000E+0, 0.23552320E+3, 0.204E+3, 0.139E+3, 0.19697000E+1, + 0.19153000E+1, 0.17565640E+3, 0.204E+3, 0.140E+3, 0.19697000E+1, 0.19355000E+1, 0.17733570E+3, + 0.204E+3, 0.141E+3, 0.19697000E+1, 0.19545000E+1, 0.16520660E+3, 0.204E+3, 0.142E+3, + 0.19697000E+1, 0.19420000E+1, 0.18502440E+3, 0.204E+3, 0.143E+3, 0.19697000E+1, 0.16682000E+1, + 0.14388510E+3, 0.204E+3, 0.144E+3, 0.19697000E+1, 0.18584000E+1, 0.13445760E+3, 0.204E+3, + 0.145E+3, 0.19697000E+1, 0.19003000E+1, 0.12471510E+3, 0.204E+3, 0.146E+3, 0.19697000E+1, + 0.18630000E+1, 0.12059750E+3, 0.204E+3, 0.147E+3, 0.19697000E+1, 0.96790000E+0, 0.11946230E+3, + 0.204E+3, 0.148E+3, 0.19697000E+1, 0.19539000E+1, 0.19013130E+3, 0.204E+3, 0.149E+3, + 0.19697000E+1, 0.96330000E+0, 0.17217670E+3, 0.204E+3, 0.150E+3, 0.19697000E+1, 0.95140000E+0, + 0.16122340E+3, 0.204E+3, 0.151E+3, 0.19697000E+1, 0.97490000E+0, 0.15238060E+3, 0.204E+3, + 0.152E+3, 0.19697000E+1, 0.98110000E+0, 0.13892730E+3, 0.204E+3, 0.153E+3, 0.19697000E+1, + 0.99680000E+0, 0.18713180E+3, 0.204E+3, 0.155E+3, 0.19697000E+1, 0.99090000E+0, 0.39721940E+3, + 0.204E+3, 0.156E+3, 0.19697000E+1, 0.97970000E+0, 0.29790180E+3, 0.204E+3, 0.157E+3, + 0.19697000E+1, 0.19373000E+1, 0.18828490E+3, 0.204E+3, 0.159E+3, 0.19697000E+1, 0.29425000E+1, + 0.18438050E+3, 0.204E+3, 0.160E+3, 0.19697000E+1, 0.29455000E+1, 0.17850850E+3, 0.204E+3, + 0.161E+3, 0.19697000E+1, 0.29413000E+1, 0.17939000E+3, 0.204E+3, 0.162E+3, 0.19697000E+1, + 0.29300000E+1, 0.17278660E+3, 0.204E+3, 0.163E+3, 0.19697000E+1, 0.18286000E+1, 0.18061150E+3, + 0.204E+3, 0.164E+3, 0.19697000E+1, 0.28732000E+1, 0.16957170E+3, 0.204E+3, 0.165E+3, + 0.19697000E+1, 0.29086000E+1, 0.17251880E+3, 0.204E+3, 0.166E+3, 0.19697000E+1, 0.28965000E+1, + 0.16096160E+3, 0.204E+3, 0.167E+3, 0.19697000E+1, 0.29242000E+1, 0.15637090E+3, 0.204E+3, + 0.168E+3, 0.19697000E+1, 0.29282000E+1, 0.15538670E+3, 0.204E+3, 0.169E+3, 0.19697000E+1, + 0.29246000E+1, 0.16348550E+3, 0.204E+3, 0.170E+3, 0.19697000E+1, 0.28482000E+1, 0.15021190E+3, + 0.204E+3, 0.171E+3, 0.19697000E+1, 0.29219000E+1, 0.20349990E+3, 0.204E+3, 0.172E+3, + 0.19697000E+1, 0.19254000E+1, 0.18878180E+3, 0.204E+3, 0.173E+3, 0.19697000E+1, 0.19459000E+1, + 0.17212060E+3, 0.204E+3, 0.174E+3, 0.19697000E+1, 0.19292000E+1, 0.17412660E+3, 0.204E+3, + 0.175E+3, 0.19697000E+1, 0.18104000E+1, 0.15226480E+3, 0.204E+3, 0.176E+3, 0.19697000E+1, + 0.18858000E+1, 0.14305840E+3, 0.204E+3, 0.177E+3, 0.19697000E+1, 0.18648000E+1, 0.13650000E+3, + 0.204E+3, 0.178E+3, 0.19697000E+1, 0.19188000E+1, 0.13034490E+3, 0.204E+3, 0.179E+3, + 0.19697000E+1, 0.98460000E+0, 0.12597100E+3, 0.204E+3, 0.180E+3, 0.19697000E+1, 0.19896000E+1, + 0.20371920E+3, 0.204E+3, 0.181E+3, 0.19697000E+1, 0.92670000E+0, 0.18586380E+3, 0.204E+3, + 0.182E+3, 0.19697000E+1, 0.93830000E+0, 0.18030690E+3, 0.204E+3, 0.183E+3, 0.19697000E+1, + 0.98200000E+0, 0.17530470E+3, 0.204E+3, 0.184E+3, 0.19697000E+1, 0.98150000E+0, 0.16350870E+3, + 0.204E+3, 0.185E+3, 0.19697000E+1, 0.99540000E+0, 0.21081250E+3, 0.204E+3, 0.187E+3, + 0.19697000E+1, 0.97050000E+0, 0.39575600E+3, 0.204E+3, 0.188E+3, 0.19697000E+1, 0.96620000E+0, + 0.22289780E+3, 0.204E+3, 0.189E+3, 0.19697000E+1, 0.29070000E+1, 0.25694260E+3, 0.204E+3, + 0.190E+3, 0.19697000E+1, 0.28844000E+1, 0.22939980E+3, 0.204E+3, 0.191E+3, 0.19697000E+1, + 0.28738000E+1, 0.20281970E+3, 0.204E+3, 0.192E+3, 0.19697000E+1, 0.28878000E+1, 0.19512320E+3, + 0.204E+3, 0.193E+3, 0.19697000E+1, 0.29095000E+1, 0.23441020E+3, 0.204E+3, 0.194E+3, + 0.19697000E+1, 0.19209000E+1, 0.55136400E+2, 0.204E+3, 0.204E+3, 0.19697000E+1, 0.19697000E+1, + 0.12495200E+2, 0.205E+3, 0.100E+1, 0.19441000E+1, 0.91180000E+0, 0.82586000E+1, 0.205E+3, + 0.200E+1, 0.19441000E+1, 0.00000000E+0, 0.18876110E+3, 0.205E+3, 0.300E+1, 0.19441000E+1, + 0.00000000E+0, 0.11041850E+3, 0.205E+3, 0.400E+1, 0.19441000E+1, 0.00000000E+0, 0.74986500E+2, + 0.205E+3, 0.500E+1, 0.19441000E+1, 0.00000000E+0, 0.50909000E+2, 0.205E+3, 0.600E+1, + 0.19441000E+1, 0.00000000E+0, 0.35677800E+2, 0.205E+3, 0.700E+1, 0.19441000E+1, 0.00000000E+0, + 0.27024700E+2, 0.205E+3, 0.800E+1, 0.19441000E+1, 0.00000000E+0, 0.20459200E+2, 0.205E+3, + 0.900E+1, 0.19441000E+1, 0.00000000E+0, 0.15712700E+2, 0.205E+3, 0.100E+2, 0.19441000E+1, + 0.00000000E+0, 0.22578430E+3, 0.205E+3, 0.110E+2, 0.19441000E+1, 0.00000000E+0, 0.17539140E+3, + 0.205E+3, 0.120E+2, 0.19441000E+1, 0.00000000E+0, 0.16244730E+3, 0.205E+3, 0.130E+2, + 0.19441000E+1, 0.00000000E+0, 0.12874590E+3, 0.205E+3, 0.140E+2, 0.19441000E+1, 0.00000000E+0, + 0.10084320E+3, 0.205E+3, 0.150E+2, 0.19441000E+1, 0.00000000E+0, 0.83884700E+2, 0.205E+3, + 0.160E+2, 0.19441000E+1, 0.00000000E+0, 0.68633100E+2, 0.205E+3, 0.170E+2, 0.19441000E+1, + 0.00000000E+0, 0.56192600E+2, 0.205E+3, 0.180E+2, 0.19441000E+1, 0.00000000E+0, 0.37015350E+3, + 0.205E+3, 0.190E+2, 0.19441000E+1, 0.00000000E+0, 0.30690780E+3, 0.205E+3, 0.200E+2, + 0.19441000E+1, 0.00000000E+0, 0.25395340E+3, 0.205E+3, 0.210E+2, 0.19441000E+1, 0.00000000E+0, + 0.24566470E+3, 0.205E+3, 0.220E+2, 0.19441000E+1, 0.00000000E+0, 0.22517830E+3, 0.205E+3, + 0.230E+2, 0.19441000E+1, 0.00000000E+0, 0.17740000E+3, 0.205E+3, 0.240E+2, 0.19441000E+1, + 0.00000000E+0, 0.19413780E+3, 0.205E+3, 0.250E+2, 0.19441000E+1, 0.00000000E+0, 0.15238870E+3, + 0.205E+3, 0.260E+2, 0.19441000E+1, 0.00000000E+0, 0.16187200E+3, 0.205E+3, 0.270E+2, + 0.19441000E+1, 0.00000000E+0, 0.16656140E+3, 0.205E+3, 0.280E+2, 0.19441000E+1, 0.00000000E+0, + 0.12766860E+3, 0.205E+3, 0.290E+2, 0.19441000E+1, 0.00000000E+0, 0.13152520E+3, 0.205E+3, + 0.300E+2, 0.19441000E+1, 0.00000000E+0, 0.15580800E+3, 0.205E+3, 0.310E+2, 0.19441000E+1, + 0.00000000E+0, 0.13799560E+3, 0.205E+3, 0.320E+2, 0.19441000E+1, 0.00000000E+0, 0.11813540E+3, + 0.205E+3, 0.330E+2, 0.19441000E+1, 0.00000000E+0, 0.10621400E+3, 0.205E+3, 0.340E+2, + 0.19441000E+1, 0.00000000E+0, 0.93100300E+2, 0.205E+3, 0.350E+2, 0.19441000E+1, 0.00000000E+0, + 0.81051800E+2, 0.205E+3, 0.360E+2, 0.19441000E+1, 0.00000000E+0, 0.41522010E+3, 0.205E+3, + 0.370E+2, 0.19441000E+1, 0.00000000E+0, 0.36565710E+3, 0.205E+3, 0.380E+2, 0.19441000E+1, + 0.00000000E+0, 0.32126520E+3, 0.205E+3, 0.390E+2, 0.19441000E+1, 0.00000000E+0, 0.28928690E+3, + 0.205E+3, 0.400E+2, 0.19441000E+1, 0.00000000E+0, 0.26412850E+3, 0.205E+3, 0.410E+2, + 0.19441000E+1, 0.00000000E+0, 0.20430920E+3, 0.205E+3, 0.420E+2, 0.19441000E+1, 0.00000000E+0, + 0.22779590E+3, 0.205E+3, 0.430E+2, 0.19441000E+1, 0.00000000E+0, 0.17387670E+3, 0.205E+3, + 0.440E+2, 0.19441000E+1, 0.00000000E+0, 0.19004450E+3, 0.205E+3, 0.450E+2, 0.19441000E+1, + 0.00000000E+0, 0.17633810E+3, 0.205E+3, 0.460E+2, 0.19441000E+1, 0.00000000E+0, 0.14690170E+3, + 0.205E+3, 0.470E+2, 0.19441000E+1, 0.00000000E+0, 0.15547780E+3, 0.205E+3, 0.480E+2, + 0.19441000E+1, 0.00000000E+0, 0.19476490E+3, 0.205E+3, 0.490E+2, 0.19441000E+1, 0.00000000E+0, + 0.18069960E+3, 0.205E+3, 0.500E+2, 0.19441000E+1, 0.00000000E+0, 0.16155700E+3, 0.205E+3, + 0.510E+2, 0.19441000E+1, 0.00000000E+0, 0.15017540E+3, 0.205E+3, 0.520E+2, 0.19441000E+1, + 0.00000000E+0, 0.13602390E+3, 0.205E+3, 0.530E+2, 0.19441000E+1, 0.00000000E+0, 0.12246340E+3, + 0.205E+3, 0.540E+2, 0.19441000E+1, 0.00000000E+0, 0.50650540E+3, 0.205E+3, 0.550E+2, + 0.19441000E+1, 0.00000000E+0, 0.46597660E+3, 0.205E+3, 0.560E+2, 0.19441000E+1, 0.00000000E+0, + 0.41051230E+3, 0.205E+3, 0.570E+2, 0.19441000E+1, 0.00000000E+0, 0.19074630E+3, 0.205E+3, + 0.580E+2, 0.19441000E+1, 0.27991000E+1, 0.41312090E+3, 0.205E+3, 0.590E+2, 0.19441000E+1, + 0.00000000E+0, 0.39675810E+3, 0.205E+3, 0.600E+2, 0.19441000E+1, 0.00000000E+0, 0.38683630E+3, + 0.205E+3, 0.610E+2, 0.19441000E+1, 0.00000000E+0, 0.37770920E+3, 0.205E+3, 0.620E+2, + 0.19441000E+1, 0.00000000E+0, 0.36961950E+3, 0.205E+3, 0.630E+2, 0.19441000E+1, 0.00000000E+0, + 0.29164910E+3, 0.205E+3, 0.640E+2, 0.19441000E+1, 0.00000000E+0, 0.32723330E+3, 0.205E+3, + 0.650E+2, 0.19441000E+1, 0.00000000E+0, 0.31588750E+3, 0.205E+3, 0.660E+2, 0.19441000E+1, + 0.00000000E+0, 0.33355970E+3, 0.205E+3, 0.670E+2, 0.19441000E+1, 0.00000000E+0, 0.32649630E+3, + 0.205E+3, 0.680E+2, 0.19441000E+1, 0.00000000E+0, 0.32014370E+3, 0.205E+3, 0.690E+2, + 0.19441000E+1, 0.00000000E+0, 0.31635220E+3, 0.205E+3, 0.700E+2, 0.19441000E+1, 0.00000000E+0, + 0.26724090E+3, 0.205E+3, 0.710E+2, 0.19441000E+1, 0.00000000E+0, 0.26368480E+3, 0.205E+3, + 0.720E+2, 0.19441000E+1, 0.00000000E+0, 0.24107990E+3, 0.205E+3, 0.730E+2, 0.19441000E+1, + 0.00000000E+0, 0.20385670E+3, 0.205E+3, 0.740E+2, 0.19441000E+1, 0.00000000E+0, 0.20752370E+3, + 0.205E+3, 0.750E+2, 0.19441000E+1, 0.00000000E+0, 0.18834080E+3, 0.205E+3, 0.760E+2, + 0.19441000E+1, 0.00000000E+0, 0.17266610E+3, 0.205E+3, 0.770E+2, 0.19441000E+1, 0.00000000E+0, + 0.14353170E+3, 0.205E+3, 0.780E+2, 0.19441000E+1, 0.00000000E+0, 0.13411890E+3, 0.205E+3, + 0.790E+2, 0.19441000E+1, 0.00000000E+0, 0.13806770E+3, 0.205E+3, 0.800E+2, 0.19441000E+1, + 0.00000000E+0, 0.20008980E+3, 0.205E+3, 0.810E+2, 0.19441000E+1, 0.00000000E+0, 0.19608950E+3, + 0.205E+3, 0.820E+2, 0.19441000E+1, 0.00000000E+0, 0.18068820E+3, 0.205E+3, 0.830E+2, + 0.19441000E+1, 0.00000000E+0, 0.17261360E+3, 0.205E+3, 0.840E+2, 0.19441000E+1, 0.00000000E+0, + 0.15958520E+3, 0.205E+3, 0.850E+2, 0.19441000E+1, 0.00000000E+0, 0.14647210E+3, 0.205E+3, + 0.860E+2, 0.19441000E+1, 0.00000000E+0, 0.47896760E+3, 0.205E+3, 0.870E+2, 0.19441000E+1, + 0.00000000E+0, 0.46147150E+3, 0.205E+3, 0.880E+2, 0.19441000E+1, 0.00000000E+0, 0.40883210E+3, + 0.205E+3, 0.890E+2, 0.19441000E+1, 0.00000000E+0, 0.36846880E+3, 0.205E+3, 0.900E+2, + 0.19441000E+1, 0.00000000E+0, 0.36524790E+3, 0.205E+3, 0.910E+2, 0.19441000E+1, 0.00000000E+0, + 0.35364010E+3, 0.205E+3, 0.920E+2, 0.19441000E+1, 0.00000000E+0, 0.36328030E+3, 0.205E+3, + 0.930E+2, 0.19441000E+1, 0.00000000E+0, 0.35190410E+3, 0.205E+3, 0.940E+2, 0.19441000E+1, + 0.00000000E+0, 0.20059700E+2, 0.205E+3, 0.101E+3, 0.19441000E+1, 0.00000000E+0, 0.64255300E+2, + 0.205E+3, 0.103E+3, 0.19441000E+1, 0.98650000E+0, 0.82143000E+2, 0.205E+3, 0.104E+3, + 0.19441000E+1, 0.98080000E+0, 0.63168500E+2, 0.205E+3, 0.105E+3, 0.19441000E+1, 0.97060000E+0, + 0.47746200E+2, 0.205E+3, 0.106E+3, 0.19441000E+1, 0.98680000E+0, 0.33267700E+2, 0.205E+3, + 0.107E+3, 0.19441000E+1, 0.99440000E+0, 0.24241600E+2, 0.205E+3, 0.108E+3, 0.19441000E+1, + 0.99250000E+0, 0.16653100E+2, 0.205E+3, 0.109E+3, 0.19441000E+1, 0.99820000E+0, 0.93715900E+2, + 0.205E+3, 0.111E+3, 0.19441000E+1, 0.96840000E+0, 0.14497830E+3, 0.205E+3, 0.112E+3, + 0.19441000E+1, 0.96280000E+0, 0.14737660E+3, 0.205E+3, 0.113E+3, 0.19441000E+1, 0.96480000E+0, + 0.11908890E+3, 0.205E+3, 0.114E+3, 0.19441000E+1, 0.95070000E+0, 0.97894700E+2, 0.205E+3, + 0.115E+3, 0.19441000E+1, 0.99470000E+0, 0.82949700E+2, 0.205E+3, 0.116E+3, 0.19441000E+1, + 0.99480000E+0, 0.67913200E+2, 0.205E+3, 0.117E+3, 0.19441000E+1, 0.99720000E+0, 0.12959630E+3, + 0.205E+3, 0.119E+3, 0.19441000E+1, 0.97670000E+0, 0.24594980E+3, 0.205E+3, 0.120E+3, + 0.19441000E+1, 0.98310000E+0, 0.13017250E+3, 0.205E+3, 0.121E+3, 0.19441000E+1, 0.18627000E+1, + 0.12570170E+3, 0.205E+3, 0.122E+3, 0.19441000E+1, 0.18299000E+1, 0.12315290E+3, 0.205E+3, + 0.123E+3, 0.19441000E+1, 0.19138000E+1, 0.12193400E+3, 0.205E+3, 0.124E+3, 0.19441000E+1, + 0.18269000E+1, 0.11246480E+3, 0.205E+3, 0.125E+3, 0.19441000E+1, 0.16406000E+1, 0.10414370E+3, + 0.205E+3, 0.126E+3, 0.19441000E+1, 0.16483000E+1, 0.99334300E+2, 0.205E+3, 0.127E+3, + 0.19441000E+1, 0.17149000E+1, 0.97081600E+2, 0.205E+3, 0.128E+3, 0.19441000E+1, 0.17937000E+1, + 0.95700700E+2, 0.205E+3, 0.129E+3, 0.19441000E+1, 0.95760000E+0, 0.90135100E+2, 0.205E+3, + 0.130E+3, 0.19441000E+1, 0.19419000E+1, 0.14648900E+3, 0.205E+3, 0.131E+3, 0.19441000E+1, + 0.96010000E+0, 0.12922270E+3, 0.205E+3, 0.132E+3, 0.19441000E+1, 0.94340000E+0, 0.11615350E+3, + 0.205E+3, 0.133E+3, 0.19441000E+1, 0.98890000E+0, 0.10624910E+3, 0.205E+3, 0.134E+3, + 0.19441000E+1, 0.99010000E+0, 0.93737400E+2, 0.205E+3, 0.135E+3, 0.19441000E+1, 0.99740000E+0, + 0.15478270E+3, 0.205E+3, 0.137E+3, 0.19441000E+1, 0.97380000E+0, 0.29929140E+3, 0.205E+3, + 0.138E+3, 0.19441000E+1, 0.98010000E+0, 0.23013840E+3, 0.205E+3, 0.139E+3, 0.19441000E+1, + 0.19153000E+1, 0.17218100E+3, 0.205E+3, 0.140E+3, 0.19441000E+1, 0.19355000E+1, 0.17379460E+3, + 0.205E+3, 0.141E+3, 0.19441000E+1, 0.19545000E+1, 0.16219830E+3, 0.205E+3, 0.142E+3, + 0.19441000E+1, 0.19420000E+1, 0.18138850E+3, 0.205E+3, 0.143E+3, 0.19441000E+1, 0.16682000E+1, + 0.14162010E+3, 0.205E+3, 0.144E+3, 0.19441000E+1, 0.18584000E+1, 0.13247760E+3, 0.205E+3, + 0.145E+3, 0.19441000E+1, 0.19003000E+1, 0.12302270E+3, 0.205E+3, 0.146E+3, 0.19441000E+1, + 0.18630000E+1, 0.11892360E+3, 0.205E+3, 0.147E+3, 0.19441000E+1, 0.96790000E+0, 0.11788430E+3, + 0.205E+3, 0.148E+3, 0.19441000E+1, 0.19539000E+1, 0.18585760E+3, 0.205E+3, 0.149E+3, + 0.19441000E+1, 0.96330000E+0, 0.16872480E+3, 0.205E+3, 0.150E+3, 0.19441000E+1, 0.95140000E+0, + 0.15840370E+3, 0.205E+3, 0.151E+3, 0.19441000E+1, 0.97490000E+0, 0.15008700E+3, 0.205E+3, + 0.152E+3, 0.19441000E+1, 0.98110000E+0, 0.13730200E+3, 0.205E+3, 0.153E+3, 0.19441000E+1, + 0.99680000E+0, 0.18365680E+3, 0.205E+3, 0.155E+3, 0.19441000E+1, 0.99090000E+0, 0.38802680E+3, + 0.205E+3, 0.156E+3, 0.19441000E+1, 0.97970000E+0, 0.29127440E+3, 0.205E+3, 0.157E+3, + 0.19441000E+1, 0.19373000E+1, 0.18501940E+3, 0.205E+3, 0.159E+3, 0.19441000E+1, 0.29425000E+1, + 0.18119130E+3, 0.205E+3, 0.160E+3, 0.19441000E+1, 0.29455000E+1, 0.17546970E+3, 0.205E+3, + 0.161E+3, 0.19441000E+1, 0.29413000E+1, 0.17626590E+3, 0.205E+3, 0.162E+3, 0.19441000E+1, + 0.29300000E+1, 0.16958240E+3, 0.205E+3, 0.163E+3, 0.19441000E+1, 0.18286000E+1, 0.17736130E+3, + 0.205E+3, 0.164E+3, 0.19441000E+1, 0.28732000E+1, 0.16662020E+3, 0.205E+3, 0.165E+3, + 0.19441000E+1, 0.29086000E+1, 0.16942280E+3, 0.205E+3, 0.166E+3, 0.19441000E+1, 0.28965000E+1, + 0.15821700E+3, 0.205E+3, 0.167E+3, 0.19441000E+1, 0.29242000E+1, 0.15373020E+3, 0.205E+3, + 0.168E+3, 0.19441000E+1, 0.29282000E+1, 0.15273000E+3, 0.205E+3, 0.169E+3, 0.19441000E+1, + 0.29246000E+1, 0.16046200E+3, 0.205E+3, 0.170E+3, 0.19441000E+1, 0.28482000E+1, 0.14766360E+3, + 0.205E+3, 0.171E+3, 0.19441000E+1, 0.29219000E+1, 0.19919290E+3, 0.205E+3, 0.172E+3, + 0.19441000E+1, 0.19254000E+1, 0.18514520E+3, 0.205E+3, 0.173E+3, 0.19441000E+1, 0.19459000E+1, + 0.16918110E+3, 0.205E+3, 0.174E+3, 0.19441000E+1, 0.19292000E+1, 0.17089180E+3, 0.205E+3, + 0.175E+3, 0.19441000E+1, 0.18104000E+1, 0.15017550E+3, 0.205E+3, 0.176E+3, 0.19441000E+1, + 0.18858000E+1, 0.14130850E+3, 0.205E+3, 0.177E+3, 0.19441000E+1, 0.18648000E+1, 0.13497080E+3, + 0.205E+3, 0.178E+3, 0.19441000E+1, 0.19188000E+1, 0.12897340E+3, 0.205E+3, 0.179E+3, + 0.19441000E+1, 0.98460000E+0, 0.12481680E+3, 0.205E+3, 0.180E+3, 0.19441000E+1, 0.19896000E+1, + 0.19964430E+3, 0.205E+3, 0.181E+3, 0.19441000E+1, 0.92670000E+0, 0.18252700E+3, 0.205E+3, + 0.182E+3, 0.19441000E+1, 0.93830000E+0, 0.17734000E+3, 0.205E+3, 0.183E+3, 0.19441000E+1, + 0.98200000E+0, 0.17270710E+3, 0.205E+3, 0.184E+3, 0.19441000E+1, 0.98150000E+0, 0.16153370E+3, + 0.205E+3, 0.185E+3, 0.19441000E+1, 0.99540000E+0, 0.20689790E+3, 0.205E+3, 0.187E+3, + 0.19441000E+1, 0.97050000E+0, 0.38645800E+3, 0.205E+3, 0.188E+3, 0.19441000E+1, 0.96620000E+0, + 0.21894300E+3, 0.205E+3, 0.189E+3, 0.19441000E+1, 0.29070000E+1, 0.25214850E+3, 0.205E+3, + 0.190E+3, 0.19441000E+1, 0.28844000E+1, 0.22571000E+3, 0.205E+3, 0.191E+3, 0.19441000E+1, + 0.28738000E+1, 0.19962770E+3, 0.205E+3, 0.192E+3, 0.19441000E+1, 0.28878000E+1, 0.19215040E+3, + 0.205E+3, 0.193E+3, 0.19441000E+1, 0.29095000E+1, 0.23000030E+3, 0.205E+3, 0.194E+3, + 0.19441000E+1, 0.19209000E+1, 0.53991900E+2, 0.205E+3, 0.204E+3, 0.19441000E+1, 0.19697000E+1, + 0.53112800E+2, 0.205E+3, 0.205E+3, 0.19441000E+1, 0.19441000E+1, 0.94203000E+1, 0.206E+3, + 0.100E+1, 0.19985000E+1, 0.91180000E+0, 0.65027000E+1, 0.206E+3, 0.200E+1, 0.19985000E+1, + 0.00000000E+0, 0.12377070E+3, 0.206E+3, 0.300E+1, 0.19985000E+1, 0.00000000E+0, 0.76755200E+2, + 0.206E+3, 0.400E+1, 0.19985000E+1, 0.00000000E+0, 0.54085400E+2, 0.206E+3, 0.500E+1, + 0.19985000E+1, 0.00000000E+0, 0.37841900E+2, 0.206E+3, 0.600E+1, 0.19985000E+1, 0.00000000E+0, + 0.27170400E+2, 0.206E+3, 0.700E+1, 0.19985000E+1, 0.00000000E+0, 0.20959700E+2, 0.206E+3, + 0.800E+1, 0.19985000E+1, 0.00000000E+0, 0.16131200E+2, 0.206E+3, 0.900E+1, 0.19985000E+1, + 0.00000000E+0, 0.12562900E+2, 0.206E+3, 0.100E+2, 0.19985000E+1, 0.00000000E+0, 0.14876180E+3, + 0.206E+3, 0.110E+2, 0.19985000E+1, 0.00000000E+0, 0.12073860E+3, 0.206E+3, 0.120E+2, + 0.19985000E+1, 0.00000000E+0, 0.11385600E+3, 0.206E+3, 0.130E+2, 0.19985000E+1, 0.00000000E+0, + 0.92493100E+2, 0.206E+3, 0.140E+2, 0.19985000E+1, 0.00000000E+0, 0.74078400E+2, 0.206E+3, + 0.150E+2, 0.19985000E+1, 0.00000000E+0, 0.62595300E+2, 0.206E+3, 0.160E+2, 0.19985000E+1, + 0.00000000E+0, 0.52020800E+2, 0.206E+3, 0.170E+2, 0.19985000E+1, 0.00000000E+0, 0.43206400E+2, + 0.206E+3, 0.180E+2, 0.19985000E+1, 0.00000000E+0, 0.24263660E+3, 0.206E+3, 0.190E+2, + 0.19985000E+1, 0.00000000E+0, 0.20802230E+3, 0.206E+3, 0.200E+2, 0.19985000E+1, 0.00000000E+0, + 0.17346300E+3, 0.206E+3, 0.210E+2, 0.19985000E+1, 0.00000000E+0, 0.16920640E+3, 0.206E+3, + 0.220E+2, 0.19985000E+1, 0.00000000E+0, 0.15583870E+3, 0.206E+3, 0.230E+2, 0.19985000E+1, + 0.00000000E+0, 0.12325910E+3, 0.206E+3, 0.240E+2, 0.19985000E+1, 0.00000000E+0, 0.13529940E+3, + 0.206E+3, 0.250E+2, 0.19985000E+1, 0.00000000E+0, 0.10673260E+3, 0.206E+3, 0.260E+2, + 0.19985000E+1, 0.00000000E+0, 0.11409130E+3, 0.206E+3, 0.270E+2, 0.19985000E+1, 0.00000000E+0, + 0.11680720E+3, 0.206E+3, 0.280E+2, 0.19985000E+1, 0.00000000E+0, 0.89951500E+2, 0.206E+3, + 0.290E+2, 0.19985000E+1, 0.00000000E+0, 0.93687000E+2, 0.206E+3, 0.300E+2, 0.19985000E+1, + 0.00000000E+0, 0.11027700E+3, 0.206E+3, 0.310E+2, 0.19985000E+1, 0.00000000E+0, 0.99469800E+2, + 0.206E+3, 0.320E+2, 0.19985000E+1, 0.00000000E+0, 0.86689500E+2, 0.206E+3, 0.330E+2, + 0.19985000E+1, 0.00000000E+0, 0.78883800E+2, 0.206E+3, 0.340E+2, 0.19985000E+1, 0.00000000E+0, + 0.70035200E+2, 0.206E+3, 0.350E+2, 0.19985000E+1, 0.00000000E+0, 0.61725400E+2, 0.206E+3, + 0.360E+2, 0.19985000E+1, 0.00000000E+0, 0.27337570E+3, 0.206E+3, 0.370E+2, 0.19985000E+1, + 0.00000000E+0, 0.24782850E+3, 0.206E+3, 0.380E+2, 0.19985000E+1, 0.00000000E+0, 0.22088300E+3, + 0.206E+3, 0.390E+2, 0.19985000E+1, 0.00000000E+0, 0.20078170E+3, 0.206E+3, 0.400E+2, + 0.19985000E+1, 0.00000000E+0, 0.18454770E+3, 0.206E+3, 0.410E+2, 0.19985000E+1, 0.00000000E+0, + 0.14463550E+3, 0.206E+3, 0.420E+2, 0.19985000E+1, 0.00000000E+0, 0.16045200E+3, 0.206E+3, + 0.430E+2, 0.19985000E+1, 0.00000000E+0, 0.12423890E+3, 0.206E+3, 0.440E+2, 0.19985000E+1, + 0.00000000E+0, 0.13547600E+3, 0.206E+3, 0.450E+2, 0.19985000E+1, 0.00000000E+0, 0.12623620E+3, + 0.206E+3, 0.460E+2, 0.19985000E+1, 0.00000000E+0, 0.10535720E+3, 0.206E+3, 0.470E+2, + 0.19985000E+1, 0.00000000E+0, 0.11192520E+3, 0.206E+3, 0.480E+2, 0.19985000E+1, 0.00000000E+0, + 0.13828310E+3, 0.206E+3, 0.490E+2, 0.19985000E+1, 0.00000000E+0, 0.13007660E+3, 0.206E+3, + 0.500E+2, 0.19985000E+1, 0.00000000E+0, 0.11803370E+3, 0.206E+3, 0.510E+2, 0.19985000E+1, + 0.00000000E+0, 0.11077470E+3, 0.206E+3, 0.520E+2, 0.19985000E+1, 0.00000000E+0, 0.10142160E+3, + 0.206E+3, 0.530E+2, 0.19985000E+1, 0.00000000E+0, 0.92287600E+2, 0.206E+3, 0.540E+2, + 0.19985000E+1, 0.00000000E+0, 0.33381300E+3, 0.206E+3, 0.550E+2, 0.19985000E+1, 0.00000000E+0, + 0.31468370E+3, 0.206E+3, 0.560E+2, 0.19985000E+1, 0.00000000E+0, 0.28115040E+3, 0.206E+3, + 0.570E+2, 0.19985000E+1, 0.00000000E+0, 0.13918110E+3, 0.206E+3, 0.580E+2, 0.19985000E+1, + 0.27991000E+1, 0.28046490E+3, 0.206E+3, 0.590E+2, 0.19985000E+1, 0.00000000E+0, 0.26998650E+3, + 0.206E+3, 0.600E+2, 0.19985000E+1, 0.00000000E+0, 0.26339220E+3, 0.206E+3, 0.610E+2, + 0.19985000E+1, 0.00000000E+0, 0.25730290E+3, 0.206E+3, 0.620E+2, 0.19985000E+1, 0.00000000E+0, + 0.25190990E+3, 0.206E+3, 0.630E+2, 0.19985000E+1, 0.00000000E+0, 0.20229780E+3, 0.206E+3, + 0.640E+2, 0.19985000E+1, 0.00000000E+0, 0.22209340E+3, 0.206E+3, 0.650E+2, 0.19985000E+1, + 0.00000000E+0, 0.21493990E+3, 0.206E+3, 0.660E+2, 0.19985000E+1, 0.00000000E+0, 0.22808570E+3, + 0.206E+3, 0.670E+2, 0.19985000E+1, 0.00000000E+0, 0.22331660E+3, 0.206E+3, 0.680E+2, + 0.19985000E+1, 0.00000000E+0, 0.21907220E+3, 0.206E+3, 0.690E+2, 0.19985000E+1, 0.00000000E+0, + 0.21630440E+3, 0.206E+3, 0.700E+2, 0.19985000E+1, 0.00000000E+0, 0.18487050E+3, 0.206E+3, + 0.710E+2, 0.19985000E+1, 0.00000000E+0, 0.18493620E+3, 0.206E+3, 0.720E+2, 0.19985000E+1, + 0.00000000E+0, 0.17072850E+3, 0.206E+3, 0.730E+2, 0.19985000E+1, 0.00000000E+0, 0.14577740E+3, + 0.206E+3, 0.740E+2, 0.19985000E+1, 0.00000000E+0, 0.14883210E+3, 0.206E+3, 0.750E+2, + 0.19985000E+1, 0.00000000E+0, 0.13624100E+3, 0.206E+3, 0.760E+2, 0.19985000E+1, 0.00000000E+0, + 0.12580040E+3, 0.206E+3, 0.770E+2, 0.19985000E+1, 0.00000000E+0, 0.10559200E+3, 0.206E+3, + 0.780E+2, 0.19985000E+1, 0.00000000E+0, 0.99045400E+2, 0.206E+3, 0.790E+2, 0.19985000E+1, + 0.00000000E+0, 0.10212660E+3, 0.206E+3, 0.800E+2, 0.19985000E+1, 0.00000000E+0, 0.14307200E+3, + 0.206E+3, 0.810E+2, 0.19985000E+1, 0.00000000E+0, 0.14157460E+3, 0.206E+3, 0.820E+2, + 0.19985000E+1, 0.00000000E+0, 0.13211550E+3, 0.206E+3, 0.830E+2, 0.19985000E+1, 0.00000000E+0, + 0.12719520E+3, 0.206E+3, 0.840E+2, 0.19985000E+1, 0.00000000E+0, 0.11875500E+3, 0.206E+3, + 0.850E+2, 0.19985000E+1, 0.00000000E+0, 0.11003140E+3, 0.206E+3, 0.860E+2, 0.19985000E+1, + 0.00000000E+0, 0.31957380E+3, 0.206E+3, 0.870E+2, 0.19985000E+1, 0.00000000E+0, 0.31409480E+3, + 0.206E+3, 0.880E+2, 0.19985000E+1, 0.00000000E+0, 0.28185090E+3, 0.206E+3, 0.890E+2, + 0.19985000E+1, 0.00000000E+0, 0.25814870E+3, 0.206E+3, 0.900E+2, 0.19985000E+1, 0.00000000E+0, + 0.25426850E+3, 0.206E+3, 0.910E+2, 0.19985000E+1, 0.00000000E+0, 0.24632970E+3, 0.206E+3, + 0.920E+2, 0.19985000E+1, 0.00000000E+0, 0.25069380E+3, 0.206E+3, 0.930E+2, 0.19985000E+1, + 0.00000000E+0, 0.24324780E+3, 0.206E+3, 0.940E+2, 0.19985000E+1, 0.00000000E+0, 0.14762300E+2, + 0.206E+3, 0.101E+3, 0.19985000E+1, 0.00000000E+0, 0.44932000E+2, 0.206E+3, 0.103E+3, + 0.19985000E+1, 0.98650000E+0, 0.57880500E+2, 0.206E+3, 0.104E+3, 0.19985000E+1, 0.98080000E+0, + 0.45963200E+2, 0.206E+3, 0.105E+3, 0.19985000E+1, 0.97060000E+0, 0.35521900E+2, 0.206E+3, + 0.106E+3, 0.19985000E+1, 0.98680000E+0, 0.25382700E+2, 0.206E+3, 0.107E+3, 0.19985000E+1, + 0.99440000E+0, 0.18903400E+2, 0.206E+3, 0.108E+3, 0.19985000E+1, 0.99250000E+0, 0.13352900E+2, + 0.206E+3, 0.109E+3, 0.19985000E+1, 0.99820000E+0, 0.65273900E+2, 0.206E+3, 0.111E+3, + 0.19985000E+1, 0.96840000E+0, 0.10058170E+3, 0.206E+3, 0.112E+3, 0.19985000E+1, 0.96280000E+0, + 0.10379070E+3, 0.206E+3, 0.113E+3, 0.19985000E+1, 0.96480000E+0, 0.85906800E+2, 0.206E+3, + 0.114E+3, 0.19985000E+1, 0.95070000E+0, 0.71991400E+2, 0.206E+3, 0.115E+3, 0.19985000E+1, + 0.99470000E+0, 0.61891600E+2, 0.206E+3, 0.116E+3, 0.19985000E+1, 0.99480000E+0, 0.51472100E+2, + 0.206E+3, 0.117E+3, 0.19985000E+1, 0.99720000E+0, 0.92024000E+2, 0.206E+3, 0.119E+3, + 0.19985000E+1, 0.97670000E+0, 0.16741450E+3, 0.206E+3, 0.120E+3, 0.19985000E+1, 0.98310000E+0, + 0.93891100E+2, 0.206E+3, 0.121E+3, 0.19985000E+1, 0.18627000E+1, 0.90783800E+2, 0.206E+3, + 0.122E+3, 0.19985000E+1, 0.18299000E+1, 0.88942900E+2, 0.206E+3, 0.123E+3, 0.19985000E+1, + 0.19138000E+1, 0.87888900E+2, 0.206E+3, 0.124E+3, 0.19985000E+1, 0.18269000E+1, 0.81873100E+2, + 0.206E+3, 0.125E+3, 0.19985000E+1, 0.16406000E+1, 0.76113200E+2, 0.206E+3, 0.126E+3, + 0.19985000E+1, 0.16483000E+1, 0.72644300E+2, 0.206E+3, 0.127E+3, 0.19985000E+1, 0.17149000E+1, + 0.70944400E+2, 0.206E+3, 0.128E+3, 0.19985000E+1, 0.17937000E+1, 0.69405800E+2, 0.206E+3, + 0.129E+3, 0.19985000E+1, 0.95760000E+0, 0.66283800E+2, 0.206E+3, 0.130E+3, 0.19985000E+1, + 0.19419000E+1, 0.10418810E+3, 0.206E+3, 0.131E+3, 0.19985000E+1, 0.96010000E+0, 0.93589300E+2, + 0.206E+3, 0.132E+3, 0.19985000E+1, 0.94340000E+0, 0.85337900E+2, 0.206E+3, 0.133E+3, + 0.19985000E+1, 0.98890000E+0, 0.78902900E+2, 0.206E+3, 0.134E+3, 0.19985000E+1, 0.99010000E+0, + 0.70474400E+2, 0.206E+3, 0.135E+3, 0.19985000E+1, 0.99740000E+0, 0.11048560E+3, 0.206E+3, + 0.137E+3, 0.19985000E+1, 0.97380000E+0, 0.20357060E+3, 0.206E+3, 0.138E+3, 0.19985000E+1, + 0.98010000E+0, 0.16111150E+3, 0.206E+3, 0.139E+3, 0.19985000E+1, 0.19153000E+1, 0.12419200E+3, + 0.206E+3, 0.140E+3, 0.19985000E+1, 0.19355000E+1, 0.12536250E+3, 0.206E+3, 0.141E+3, + 0.19985000E+1, 0.19545000E+1, 0.11755240E+3, 0.206E+3, 0.142E+3, 0.19985000E+1, 0.19420000E+1, + 0.12970790E+3, 0.206E+3, 0.143E+3, 0.19985000E+1, 0.16682000E+1, 0.10379560E+3, 0.206E+3, + 0.144E+3, 0.19985000E+1, 0.18584000E+1, 0.97296100E+2, 0.206E+3, 0.145E+3, 0.19985000E+1, + 0.19003000E+1, 0.90624900E+2, 0.206E+3, 0.146E+3, 0.19985000E+1, 0.18630000E+1, 0.87495100E+2, + 0.206E+3, 0.147E+3, 0.19985000E+1, 0.96790000E+0, 0.87291500E+2, 0.206E+3, 0.148E+3, + 0.19985000E+1, 0.19539000E+1, 0.13265050E+3, 0.206E+3, 0.149E+3, 0.19985000E+1, 0.96330000E+0, + 0.12220300E+3, 0.206E+3, 0.150E+3, 0.19985000E+1, 0.95140000E+0, 0.11597420E+3, 0.206E+3, + 0.151E+3, 0.19985000E+1, 0.97490000E+0, 0.11077110E+3, 0.206E+3, 0.152E+3, 0.19985000E+1, + 0.98110000E+0, 0.10234890E+3, 0.206E+3, 0.153E+3, 0.19985000E+1, 0.99680000E+0, 0.13246620E+3, + 0.206E+3, 0.155E+3, 0.19985000E+1, 0.99090000E+0, 0.26261810E+3, 0.206E+3, 0.156E+3, + 0.19985000E+1, 0.97970000E+0, 0.20348290E+3, 0.206E+3, 0.157E+3, 0.19985000E+1, 0.19373000E+1, + 0.13513800E+3, 0.206E+3, 0.159E+3, 0.19985000E+1, 0.29425000E+1, 0.13236910E+3, 0.206E+3, + 0.160E+3, 0.19985000E+1, 0.29455000E+1, 0.12830130E+3, 0.206E+3, 0.161E+3, 0.19985000E+1, + 0.29413000E+1, 0.12859630E+3, 0.206E+3, 0.162E+3, 0.19985000E+1, 0.29300000E+1, 0.12294040E+3, + 0.206E+3, 0.163E+3, 0.19985000E+1, 0.18286000E+1, 0.12924610E+3, 0.206E+3, 0.164E+3, + 0.19985000E+1, 0.28732000E+1, 0.12168990E+3, 0.206E+3, 0.165E+3, 0.19985000E+1, 0.29086000E+1, + 0.12326190E+3, 0.206E+3, 0.166E+3, 0.19985000E+1, 0.28965000E+1, 0.11576120E+3, 0.206E+3, + 0.167E+3, 0.19985000E+1, 0.29242000E+1, 0.11255880E+3, 0.206E+3, 0.168E+3, 0.19985000E+1, + 0.29282000E+1, 0.11174980E+3, 0.206E+3, 0.169E+3, 0.19985000E+1, 0.29246000E+1, 0.11693130E+3, + 0.206E+3, 0.170E+3, 0.19985000E+1, 0.28482000E+1, 0.10814300E+3, 0.206E+3, 0.171E+3, + 0.19985000E+1, 0.29219000E+1, 0.14218370E+3, 0.206E+3, 0.172E+3, 0.19985000E+1, 0.19254000E+1, + 0.13342480E+3, 0.206E+3, 0.173E+3, 0.19985000E+1, 0.19459000E+1, 0.12313620E+3, 0.206E+3, + 0.174E+3, 0.19985000E+1, 0.19292000E+1, 0.12340630E+3, 0.206E+3, 0.175E+3, 0.19985000E+1, + 0.18104000E+1, 0.11082750E+3, 0.206E+3, 0.176E+3, 0.19985000E+1, 0.18858000E+1, 0.10472640E+3, + 0.206E+3, 0.177E+3, 0.19985000E+1, 0.18648000E+1, 0.10030120E+3, 0.206E+3, 0.178E+3, + 0.19985000E+1, 0.19188000E+1, 0.95922700E+2, 0.206E+3, 0.179E+3, 0.19985000E+1, 0.98460000E+0, + 0.93462800E+2, 0.206E+3, 0.180E+3, 0.19985000E+1, 0.19896000E+1, 0.14324960E+3, 0.206E+3, + 0.181E+3, 0.19985000E+1, 0.92670000E+0, 0.13282830E+3, 0.206E+3, 0.182E+3, 0.19985000E+1, + 0.93830000E+0, 0.13004040E+3, 0.206E+3, 0.183E+3, 0.19985000E+1, 0.98200000E+0, 0.12739760E+3, + 0.206E+3, 0.184E+3, 0.19985000E+1, 0.98150000E+0, 0.12019670E+3, 0.206E+3, 0.185E+3, + 0.19985000E+1, 0.99540000E+0, 0.14932790E+3, 0.206E+3, 0.187E+3, 0.19985000E+1, 0.97050000E+0, + 0.26405250E+3, 0.206E+3, 0.188E+3, 0.19985000E+1, 0.96620000E+0, 0.15978300E+3, 0.206E+3, + 0.189E+3, 0.19985000E+1, 0.29070000E+1, 0.18182240E+3, 0.206E+3, 0.190E+3, 0.19985000E+1, + 0.28844000E+1, 0.16366940E+3, 0.206E+3, 0.191E+3, 0.19985000E+1, 0.28738000E+1, 0.14625060E+3, + 0.206E+3, 0.192E+3, 0.19985000E+1, 0.28878000E+1, 0.14111910E+3, 0.206E+3, 0.193E+3, + 0.19985000E+1, 0.29095000E+1, 0.16450530E+3, 0.206E+3, 0.194E+3, 0.19985000E+1, 0.19209000E+1, + 0.39281400E+2, 0.206E+3, 0.204E+3, 0.19985000E+1, 0.19697000E+1, 0.38983400E+2, 0.206E+3, + 0.205E+3, 0.19985000E+1, 0.19441000E+1, 0.29360200E+2, 0.206E+3, 0.206E+3, 0.19985000E+1, + 0.19985000E+1, 0.76610000E+1, 0.207E+3, 0.100E+1, 0.20143000E+1, 0.91180000E+0, 0.54559000E+1, + 0.207E+3, 0.200E+1, 0.20143000E+1, 0.00000000E+0, 0.94006000E+2, 0.207E+3, 0.300E+1, + 0.20143000E+1, 0.00000000E+0, 0.59598300E+2, 0.207E+3, 0.400E+1, 0.20143000E+1, 0.00000000E+0, + 0.42834800E+2, 0.207E+3, 0.500E+1, 0.20143000E+1, 0.00000000E+0, 0.30530500E+2, 0.207E+3, + 0.600E+1, 0.20143000E+1, 0.00000000E+0, 0.22279400E+2, 0.207E+3, 0.700E+1, 0.20143000E+1, + 0.00000000E+0, 0.17409300E+2, 0.207E+3, 0.800E+1, 0.20143000E+1, 0.00000000E+0, 0.13561300E+2, + 0.207E+3, 0.900E+1, 0.20143000E+1, 0.00000000E+0, 0.10674000E+2, 0.207E+3, 0.100E+2, + 0.20143000E+1, 0.00000000E+0, 0.11330310E+3, 0.207E+3, 0.110E+2, 0.20143000E+1, 0.00000000E+0, + 0.93413000E+2, 0.207E+3, 0.120E+2, 0.20143000E+1, 0.00000000E+0, 0.88840700E+2, 0.207E+3, + 0.130E+2, 0.20143000E+1, 0.00000000E+0, 0.73085800E+2, 0.207E+3, 0.140E+2, 0.20143000E+1, + 0.00000000E+0, 0.59285900E+2, 0.207E+3, 0.150E+2, 0.20143000E+1, 0.00000000E+0, 0.50594600E+2, + 0.207E+3, 0.160E+2, 0.20143000E+1, 0.00000000E+0, 0.42481600E+2, 0.207E+3, 0.170E+2, + 0.20143000E+1, 0.00000000E+0, 0.35633400E+2, 0.207E+3, 0.180E+2, 0.20143000E+1, 0.00000000E+0, + 0.18521810E+3, 0.207E+3, 0.190E+2, 0.20143000E+1, 0.00000000E+0, 0.16027500E+3, 0.207E+3, + 0.200E+2, 0.20143000E+1, 0.00000000E+0, 0.13403140E+3, 0.207E+3, 0.210E+2, 0.20143000E+1, + 0.00000000E+0, 0.13130150E+3, 0.207E+3, 0.220E+2, 0.20143000E+1, 0.00000000E+0, 0.12121190E+3, + 0.207E+3, 0.230E+2, 0.20143000E+1, 0.00000000E+0, 0.96254700E+2, 0.207E+3, 0.240E+2, + 0.20143000E+1, 0.00000000E+0, 0.10560800E+3, 0.207E+3, 0.250E+2, 0.20143000E+1, 0.00000000E+0, + 0.83691600E+2, 0.207E+3, 0.260E+2, 0.20143000E+1, 0.00000000E+0, 0.89534500E+2, 0.207E+3, + 0.270E+2, 0.20143000E+1, 0.00000000E+0, 0.91429500E+2, 0.207E+3, 0.280E+2, 0.20143000E+1, + 0.00000000E+0, 0.70763900E+2, 0.207E+3, 0.290E+2, 0.20143000E+1, 0.00000000E+0, 0.73921000E+2, + 0.207E+3, 0.300E+2, 0.20143000E+1, 0.00000000E+0, 0.86619400E+2, 0.207E+3, 0.310E+2, + 0.20143000E+1, 0.00000000E+0, 0.78823500E+2, 0.207E+3, 0.320E+2, 0.20143000E+1, 0.00000000E+0, + 0.69377000E+2, 0.207E+3, 0.330E+2, 0.20143000E+1, 0.00000000E+0, 0.63591900E+2, 0.207E+3, + 0.340E+2, 0.20143000E+1, 0.00000000E+0, 0.56918700E+2, 0.207E+3, 0.350E+2, 0.20143000E+1, + 0.00000000E+0, 0.50574600E+2, 0.207E+3, 0.360E+2, 0.20143000E+1, 0.00000000E+0, 0.20923780E+3, + 0.207E+3, 0.370E+2, 0.20143000E+1, 0.00000000E+0, 0.19112680E+3, 0.207E+3, 0.380E+2, + 0.20143000E+1, 0.00000000E+0, 0.17135740E+3, 0.207E+3, 0.390E+2, 0.20143000E+1, 0.00000000E+0, + 0.15645400E+3, 0.207E+3, 0.400E+2, 0.20143000E+1, 0.00000000E+0, 0.14431220E+3, 0.207E+3, + 0.410E+2, 0.20143000E+1, 0.00000000E+0, 0.11400040E+3, 0.207E+3, 0.420E+2, 0.20143000E+1, + 0.00000000E+0, 0.12608010E+3, 0.207E+3, 0.430E+2, 0.20143000E+1, 0.00000000E+0, 0.98472800E+2, + 0.207E+3, 0.440E+2, 0.20143000E+1, 0.00000000E+0, 0.10710840E+3, 0.207E+3, 0.450E+2, + 0.20143000E+1, 0.00000000E+0, 0.10003700E+3, 0.207E+3, 0.460E+2, 0.20143000E+1, 0.00000000E+0, + 0.83787500E+2, 0.207E+3, 0.470E+2, 0.20143000E+1, 0.00000000E+0, 0.88985800E+2, 0.207E+3, + 0.480E+2, 0.20143000E+1, 0.00000000E+0, 0.10908250E+3, 0.207E+3, 0.490E+2, 0.20143000E+1, + 0.00000000E+0, 0.10321130E+3, 0.207E+3, 0.500E+2, 0.20143000E+1, 0.00000000E+0, 0.94365400E+2, + 0.207E+3, 0.510E+2, 0.20143000E+1, 0.00000000E+0, 0.89035900E+2, 0.207E+3, 0.520E+2, + 0.20143000E+1, 0.00000000E+0, 0.82037400E+2, 0.207E+3, 0.530E+2, 0.20143000E+1, 0.00000000E+0, + 0.75142700E+2, 0.207E+3, 0.540E+2, 0.20143000E+1, 0.00000000E+0, 0.25574990E+3, 0.207E+3, + 0.550E+2, 0.20143000E+1, 0.00000000E+0, 0.24255280E+3, 0.207E+3, 0.560E+2, 0.20143000E+1, + 0.00000000E+0, 0.21789480E+3, 0.207E+3, 0.570E+2, 0.20143000E+1, 0.00000000E+0, 0.11128270E+3, + 0.207E+3, 0.580E+2, 0.20143000E+1, 0.27991000E+1, 0.21678200E+3, 0.207E+3, 0.590E+2, + 0.20143000E+1, 0.00000000E+0, 0.20883570E+3, 0.207E+3, 0.600E+2, 0.20143000E+1, 0.00000000E+0, + 0.20377290E+3, 0.207E+3, 0.610E+2, 0.20143000E+1, 0.00000000E+0, 0.19908850E+3, 0.207E+3, + 0.620E+2, 0.20143000E+1, 0.00000000E+0, 0.19493970E+3, 0.207E+3, 0.630E+2, 0.20143000E+1, + 0.00000000E+0, 0.15792210E+3, 0.207E+3, 0.640E+2, 0.20143000E+1, 0.00000000E+0, 0.17208570E+3, + 0.207E+3, 0.650E+2, 0.20143000E+1, 0.00000000E+0, 0.16673560E+3, 0.207E+3, 0.660E+2, + 0.20143000E+1, 0.00000000E+0, 0.17670260E+3, 0.207E+3, 0.670E+2, 0.20143000E+1, 0.00000000E+0, + 0.17301200E+3, 0.207E+3, 0.680E+2, 0.20143000E+1, 0.00000000E+0, 0.16974290E+3, 0.207E+3, + 0.690E+2, 0.20143000E+1, 0.00000000E+0, 0.16752470E+3, 0.207E+3, 0.700E+2, 0.20143000E+1, + 0.00000000E+0, 0.14402080E+3, 0.207E+3, 0.710E+2, 0.20143000E+1, 0.00000000E+0, 0.14479850E+3, + 0.207E+3, 0.720E+2, 0.20143000E+1, 0.00000000E+0, 0.13433990E+3, 0.207E+3, 0.730E+2, + 0.20143000E+1, 0.00000000E+0, 0.11544060E+3, 0.207E+3, 0.740E+2, 0.20143000E+1, 0.00000000E+0, + 0.11798450E+3, 0.207E+3, 0.750E+2, 0.20143000E+1, 0.00000000E+0, 0.10851360E+3, 0.207E+3, + 0.760E+2, 0.20143000E+1, 0.00000000E+0, 0.10061040E+3, 0.207E+3, 0.770E+2, 0.20143000E+1, + 0.00000000E+0, 0.85019700E+2, 0.207E+3, 0.780E+2, 0.20143000E+1, 0.00000000E+0, 0.79962500E+2, + 0.207E+3, 0.790E+2, 0.20143000E+1, 0.00000000E+0, 0.82454000E+2, 0.207E+3, 0.800E+2, + 0.20143000E+1, 0.00000000E+0, 0.11348820E+3, 0.207E+3, 0.810E+2, 0.20143000E+1, 0.00000000E+0, + 0.11268290E+3, 0.207E+3, 0.820E+2, 0.20143000E+1, 0.00000000E+0, 0.10579110E+3, 0.207E+3, + 0.830E+2, 0.20143000E+1, 0.00000000E+0, 0.10226460E+3, 0.207E+3, 0.840E+2, 0.20143000E+1, + 0.00000000E+0, 0.96007100E+2, 0.207E+3, 0.850E+2, 0.20143000E+1, 0.00000000E+0, 0.89458900E+2, + 0.207E+3, 0.860E+2, 0.20143000E+1, 0.00000000E+0, 0.24600480E+3, 0.207E+3, 0.870E+2, + 0.20143000E+1, 0.00000000E+0, 0.24292720E+3, 0.207E+3, 0.880E+2, 0.20143000E+1, 0.00000000E+0, + 0.21910640E+3, 0.207E+3, 0.890E+2, 0.20143000E+1, 0.00000000E+0, 0.20223940E+3, 0.207E+3, + 0.900E+2, 0.20143000E+1, 0.00000000E+0, 0.19881690E+3, 0.207E+3, 0.910E+2, 0.20143000E+1, + 0.00000000E+0, 0.19268400E+3, 0.207E+3, 0.920E+2, 0.20143000E+1, 0.00000000E+0, 0.19532220E+3, + 0.207E+3, 0.930E+2, 0.20143000E+1, 0.00000000E+0, 0.18964690E+3, 0.207E+3, 0.940E+2, + 0.20143000E+1, 0.00000000E+0, 0.11821400E+2, 0.207E+3, 0.101E+3, 0.20143000E+1, 0.00000000E+0, + 0.35019400E+2, 0.207E+3, 0.103E+3, 0.20143000E+1, 0.98650000E+0, 0.45316400E+2, 0.207E+3, + 0.104E+3, 0.20143000E+1, 0.98080000E+0, 0.36606300E+2, 0.207E+3, 0.105E+3, 0.20143000E+1, + 0.97060000E+0, 0.28693800E+2, 0.207E+3, 0.106E+3, 0.20143000E+1, 0.98680000E+0, 0.20850100E+2, + 0.207E+3, 0.107E+3, 0.20143000E+1, 0.99440000E+0, 0.15763100E+2, 0.207E+3, 0.108E+3, + 0.20143000E+1, 0.99250000E+0, 0.11357100E+2, 0.207E+3, 0.109E+3, 0.20143000E+1, 0.99820000E+0, + 0.50867200E+2, 0.207E+3, 0.111E+3, 0.20143000E+1, 0.96840000E+0, 0.78176000E+2, 0.207E+3, + 0.112E+3, 0.20143000E+1, 0.96280000E+0, 0.81202600E+2, 0.207E+3, 0.113E+3, 0.20143000E+1, + 0.96480000E+0, 0.68050400E+2, 0.207E+3, 0.114E+3, 0.20143000E+1, 0.95070000E+0, 0.57663200E+2, + 0.207E+3, 0.115E+3, 0.20143000E+1, 0.99470000E+0, 0.50029800E+2, 0.207E+3, 0.116E+3, + 0.20143000E+1, 0.99480000E+0, 0.42036700E+2, 0.207E+3, 0.117E+3, 0.20143000E+1, 0.99720000E+0, + 0.72681800E+2, 0.207E+3, 0.119E+3, 0.20143000E+1, 0.97670000E+0, 0.12958410E+3, 0.207E+3, + 0.120E+3, 0.20143000E+1, 0.98310000E+0, 0.74558700E+2, 0.207E+3, 0.121E+3, 0.20143000E+1, + 0.18627000E+1, 0.72182800E+2, 0.207E+3, 0.122E+3, 0.20143000E+1, 0.18299000E+1, 0.70734700E+2, + 0.207E+3, 0.123E+3, 0.20143000E+1, 0.19138000E+1, 0.69847100E+2, 0.207E+3, 0.124E+3, + 0.20143000E+1, 0.18269000E+1, 0.65341500E+2, 0.207E+3, 0.125E+3, 0.20143000E+1, 0.16406000E+1, + 0.60892000E+2, 0.207E+3, 0.126E+3, 0.20143000E+1, 0.16483000E+1, 0.58161100E+2, 0.207E+3, + 0.127E+3, 0.20143000E+1, 0.17149000E+1, 0.56786800E+2, 0.207E+3, 0.128E+3, 0.20143000E+1, + 0.17937000E+1, 0.55378900E+2, 0.207E+3, 0.129E+3, 0.20143000E+1, 0.95760000E+0, 0.53207000E+2, + 0.207E+3, 0.130E+3, 0.20143000E+1, 0.19419000E+1, 0.82040200E+2, 0.207E+3, 0.131E+3, + 0.20143000E+1, 0.96010000E+0, 0.74362700E+2, 0.207E+3, 0.132E+3, 0.20143000E+1, 0.94340000E+0, + 0.68347700E+2, 0.207E+3, 0.133E+3, 0.20143000E+1, 0.98890000E+0, 0.63607400E+2, 0.207E+3, + 0.134E+3, 0.20143000E+1, 0.99010000E+0, 0.57257800E+2, 0.207E+3, 0.135E+3, 0.20143000E+1, + 0.99740000E+0, 0.87544700E+2, 0.207E+3, 0.137E+3, 0.20143000E+1, 0.97380000E+0, 0.15768360E+3, + 0.207E+3, 0.138E+3, 0.20143000E+1, 0.98010000E+0, 0.12634700E+3, 0.207E+3, 0.139E+3, + 0.20143000E+1, 0.19153000E+1, 0.98716500E+2, 0.207E+3, 0.140E+3, 0.20143000E+1, 0.19355000E+1, + 0.99662500E+2, 0.207E+3, 0.141E+3, 0.20143000E+1, 0.19545000E+1, 0.93743400E+2, 0.207E+3, + 0.142E+3, 0.20143000E+1, 0.19420000E+1, 0.10285060E+3, 0.207E+3, 0.143E+3, 0.20143000E+1, + 0.16682000E+1, 0.83274400E+2, 0.207E+3, 0.144E+3, 0.20143000E+1, 0.18584000E+1, 0.78197600E+2, + 0.207E+3, 0.145E+3, 0.20143000E+1, 0.19003000E+1, 0.72996500E+2, 0.207E+3, 0.146E+3, + 0.20143000E+1, 0.18630000E+1, 0.70450900E+2, 0.207E+3, 0.147E+3, 0.20143000E+1, 0.96790000E+0, + 0.70442000E+2, 0.207E+3, 0.148E+3, 0.20143000E+1, 0.19539000E+1, 0.10489720E+3, 0.207E+3, + 0.149E+3, 0.20143000E+1, 0.96330000E+0, 0.97282600E+2, 0.207E+3, 0.150E+3, 0.20143000E+1, + 0.95140000E+0, 0.92826200E+2, 0.207E+3, 0.151E+3, 0.20143000E+1, 0.97490000E+0, 0.89058200E+2, + 0.207E+3, 0.152E+3, 0.20143000E+1, 0.98110000E+0, 0.82771300E+2, 0.207E+3, 0.153E+3, + 0.20143000E+1, 0.99680000E+0, 0.10537260E+3, 0.207E+3, 0.155E+3, 0.20143000E+1, 0.99090000E+0, + 0.20323960E+3, 0.207E+3, 0.156E+3, 0.20143000E+1, 0.97970000E+0, 0.15949680E+3, 0.207E+3, + 0.157E+3, 0.20143000E+1, 0.19373000E+1, 0.10811590E+3, 0.207E+3, 0.159E+3, 0.20143000E+1, + 0.29425000E+1, 0.10591500E+3, 0.207E+3, 0.160E+3, 0.20143000E+1, 0.29455000E+1, 0.10271500E+3, + 0.207E+3, 0.161E+3, 0.20143000E+1, 0.29413000E+1, 0.10283980E+3, 0.207E+3, 0.162E+3, + 0.20143000E+1, 0.29300000E+1, 0.98062800E+2, 0.207E+3, 0.163E+3, 0.20143000E+1, 0.18286000E+1, + 0.10326480E+3, 0.207E+3, 0.164E+3, 0.20143000E+1, 0.28732000E+1, 0.97359100E+2, 0.207E+3, + 0.165E+3, 0.20143000E+1, 0.29086000E+1, 0.98444500E+2, 0.207E+3, 0.166E+3, 0.20143000E+1, + 0.28965000E+1, 0.92693900E+2, 0.207E+3, 0.167E+3, 0.20143000E+1, 0.29242000E+1, 0.90162700E+2, + 0.207E+3, 0.168E+3, 0.20143000E+1, 0.29282000E+1, 0.89477400E+2, 0.207E+3, 0.169E+3, + 0.20143000E+1, 0.29246000E+1, 0.93380800E+2, 0.207E+3, 0.170E+3, 0.20143000E+1, 0.28482000E+1, + 0.86620200E+2, 0.207E+3, 0.171E+3, 0.20143000E+1, 0.29219000E+1, 0.11247170E+3, 0.207E+3, + 0.172E+3, 0.20143000E+1, 0.19254000E+1, 0.10607460E+3, 0.207E+3, 0.173E+3, 0.20143000E+1, + 0.19459000E+1, 0.98419900E+2, 0.207E+3, 0.174E+3, 0.20143000E+1, 0.19292000E+1, 0.98272000E+2, + 0.207E+3, 0.175E+3, 0.20143000E+1, 0.18104000E+1, 0.89250800E+2, 0.207E+3, 0.176E+3, + 0.20143000E+1, 0.18858000E+1, 0.84579000E+2, 0.207E+3, 0.177E+3, 0.20143000E+1, 0.18648000E+1, + 0.81163500E+2, 0.207E+3, 0.178E+3, 0.20143000E+1, 0.19188000E+1, 0.77711500E+2, 0.207E+3, + 0.179E+3, 0.20143000E+1, 0.98460000E+0, 0.75948200E+2, 0.207E+3, 0.180E+3, 0.20143000E+1, + 0.19896000E+1, 0.11375630E+3, 0.207E+3, 0.181E+3, 0.20143000E+1, 0.92670000E+0, 0.10614180E+3, + 0.207E+3, 0.182E+3, 0.20143000E+1, 0.93830000E+0, 0.10427680E+3, 0.207E+3, 0.183E+3, + 0.20143000E+1, 0.98200000E+0, 0.10247400E+3, 0.207E+3, 0.184E+3, 0.20143000E+1, 0.98150000E+0, + 0.97157900E+2, 0.207E+3, 0.185E+3, 0.20143000E+1, 0.99540000E+0, 0.11880190E+3, 0.207E+3, + 0.187E+3, 0.20143000E+1, 0.97050000E+0, 0.20507880E+3, 0.207E+3, 0.188E+3, 0.20143000E+1, + 0.96620000E+0, 0.12774120E+3, 0.207E+3, 0.189E+3, 0.20143000E+1, 0.29070000E+1, 0.14466290E+3, + 0.207E+3, 0.190E+3, 0.20143000E+1, 0.28844000E+1, 0.13073320E+3, 0.207E+3, 0.191E+3, + 0.20143000E+1, 0.28738000E+1, 0.11732470E+3, 0.207E+3, 0.192E+3, 0.20143000E+1, 0.28878000E+1, + 0.11335810E+3, 0.207E+3, 0.193E+3, 0.20143000E+1, 0.29095000E+1, 0.13059750E+3, 0.207E+3, + 0.194E+3, 0.20143000E+1, 0.19209000E+1, 0.31240700E+2, 0.207E+3, 0.204E+3, 0.20143000E+1, + 0.19697000E+1, 0.31222100E+2, 0.207E+3, 0.205E+3, 0.20143000E+1, 0.19441000E+1, 0.23896500E+2, + 0.207E+3, 0.206E+3, 0.20143000E+1, 0.19985000E+1, 0.19676800E+2, 0.207E+3, 0.207E+3, + 0.20143000E+1, 0.20143000E+1, 0.53717000E+1, 0.208E+3, 0.100E+1, 0.19887000E+1, 0.91180000E+0, + 0.40179000E+1, 0.208E+3, 0.200E+1, 0.19887000E+1, 0.00000000E+0, 0.58670300E+2, 0.208E+3, + 0.300E+1, 0.19887000E+1, 0.00000000E+0, 0.38702700E+2, 0.208E+3, 0.400E+1, 0.19887000E+1, + 0.00000000E+0, 0.28771300E+2, 0.208E+3, 0.500E+1, 0.19887000E+1, 0.00000000E+0, 0.21142800E+2, + 0.208E+3, 0.600E+1, 0.19887000E+1, 0.00000000E+0, 0.15836400E+2, 0.208E+3, 0.700E+1, + 0.19887000E+1, 0.00000000E+0, 0.12627700E+2, 0.208E+3, 0.800E+1, 0.19887000E+1, 0.00000000E+0, + 0.10022200E+2, 0.208E+3, 0.900E+1, 0.19887000E+1, 0.00000000E+0, 0.80175000E+1, 0.208E+3, + 0.100E+2, 0.19887000E+1, 0.00000000E+0, 0.71099900E+2, 0.208E+3, 0.110E+2, 0.19887000E+1, + 0.00000000E+0, 0.60298300E+2, 0.208E+3, 0.120E+2, 0.19887000E+1, 0.00000000E+0, 0.58195100E+2, + 0.208E+3, 0.130E+2, 0.19887000E+1, 0.00000000E+0, 0.48906600E+2, 0.208E+3, 0.140E+2, + 0.19887000E+1, 0.00000000E+0, 0.40516700E+2, 0.208E+3, 0.150E+2, 0.19887000E+1, 0.00000000E+0, + 0.35137700E+2, 0.208E+3, 0.160E+2, 0.19887000E+1, 0.00000000E+0, 0.29991800E+2, 0.208E+3, + 0.170E+2, 0.19887000E+1, 0.00000000E+0, 0.25551400E+2, 0.208E+3, 0.180E+2, 0.19887000E+1, + 0.00000000E+0, 0.11670690E+3, 0.208E+3, 0.190E+2, 0.19887000E+1, 0.00000000E+0, 0.10271260E+3, + 0.208E+3, 0.200E+2, 0.19887000E+1, 0.00000000E+0, 0.86336500E+2, 0.208E+3, 0.210E+2, + 0.19887000E+1, 0.00000000E+0, 0.85221900E+2, 0.208E+3, 0.220E+2, 0.19887000E+1, 0.00000000E+0, + 0.79000300E+2, 0.208E+3, 0.230E+2, 0.19887000E+1, 0.00000000E+0, 0.63186700E+2, 0.208E+3, + 0.240E+2, 0.19887000E+1, 0.00000000E+0, 0.69259800E+2, 0.208E+3, 0.250E+2, 0.19887000E+1, + 0.00000000E+0, 0.55335600E+2, 0.208E+3, 0.260E+2, 0.19887000E+1, 0.00000000E+0, 0.59268800E+2, + 0.208E+3, 0.270E+2, 0.19887000E+1, 0.00000000E+0, 0.60257500E+2, 0.208E+3, 0.280E+2, + 0.19887000E+1, 0.00000000E+0, 0.47058500E+2, 0.208E+3, 0.290E+2, 0.19887000E+1, 0.00000000E+0, + 0.49389700E+2, 0.208E+3, 0.300E+2, 0.19887000E+1, 0.00000000E+0, 0.57401600E+2, 0.208E+3, + 0.310E+2, 0.19887000E+1, 0.00000000E+0, 0.53011000E+2, 0.208E+3, 0.320E+2, 0.19887000E+1, + 0.00000000E+0, 0.47420200E+2, 0.208E+3, 0.330E+2, 0.19887000E+1, 0.00000000E+0, 0.43981900E+2, + 0.208E+3, 0.340E+2, 0.19887000E+1, 0.00000000E+0, 0.39882100E+2, 0.208E+3, 0.350E+2, + 0.19887000E+1, 0.00000000E+0, 0.35896100E+2, 0.208E+3, 0.360E+2, 0.19887000E+1, 0.00000000E+0, + 0.13248790E+3, 0.208E+3, 0.370E+2, 0.19887000E+1, 0.00000000E+0, 0.12269280E+3, 0.208E+3, + 0.380E+2, 0.19887000E+1, 0.00000000E+0, 0.11116060E+3, 0.208E+3, 0.390E+2, 0.19887000E+1, + 0.00000000E+0, 0.10228360E+3, 0.208E+3, 0.400E+2, 0.19887000E+1, 0.00000000E+0, 0.94928100E+2, + 0.208E+3, 0.410E+2, 0.19887000E+1, 0.00000000E+0, 0.76023900E+2, 0.208E+3, 0.420E+2, + 0.19887000E+1, 0.00000000E+0, 0.83640900E+2, 0.208E+3, 0.430E+2, 0.19887000E+1, 0.00000000E+0, + 0.66302500E+2, 0.208E+3, 0.440E+2, 0.19887000E+1, 0.00000000E+0, 0.71807100E+2, 0.208E+3, + 0.450E+2, 0.19887000E+1, 0.00000000E+0, 0.67335400E+2, 0.208E+3, 0.460E+2, 0.19887000E+1, + 0.00000000E+0, 0.56751100E+2, 0.208E+3, 0.470E+2, 0.19887000E+1, 0.00000000E+0, 0.60233400E+2, + 0.208E+3, 0.480E+2, 0.19887000E+1, 0.00000000E+0, 0.72857100E+2, 0.208E+3, 0.490E+2, + 0.19887000E+1, 0.00000000E+0, 0.69604600E+2, 0.208E+3, 0.500E+2, 0.19887000E+1, 0.00000000E+0, + 0.64429100E+2, 0.208E+3, 0.510E+2, 0.19887000E+1, 0.00000000E+0, 0.61315900E+2, 0.208E+3, + 0.520E+2, 0.19887000E+1, 0.00000000E+0, 0.57073800E+2, 0.208E+3, 0.530E+2, 0.19887000E+1, + 0.00000000E+0, 0.52826900E+2, 0.208E+3, 0.540E+2, 0.19887000E+1, 0.00000000E+0, 0.16220010E+3, + 0.208E+3, 0.550E+2, 0.19887000E+1, 0.00000000E+0, 0.15554370E+3, 0.208E+3, 0.560E+2, + 0.19887000E+1, 0.00000000E+0, 0.14109330E+3, 0.208E+3, 0.570E+2, 0.19887000E+1, 0.00000000E+0, + 0.75991000E+2, 0.208E+3, 0.580E+2, 0.19887000E+1, 0.27991000E+1, 0.13974720E+3, 0.208E+3, + 0.590E+2, 0.19887000E+1, 0.00000000E+0, 0.13480190E+3, 0.208E+3, 0.600E+2, 0.19887000E+1, + 0.00000000E+0, 0.13157850E+3, 0.208E+3, 0.610E+2, 0.19887000E+1, 0.00000000E+0, 0.12858460E+3, + 0.208E+3, 0.620E+2, 0.19887000E+1, 0.00000000E+0, 0.12593290E+3, 0.208E+3, 0.630E+2, + 0.19887000E+1, 0.00000000E+0, 0.10360070E+3, 0.208E+3, 0.640E+2, 0.19887000E+1, 0.00000000E+0, + 0.11142770E+3, 0.208E+3, 0.650E+2, 0.19887000E+1, 0.00000000E+0, 0.10818200E+3, 0.208E+3, + 0.660E+2, 0.19887000E+1, 0.00000000E+0, 0.11438200E+3, 0.208E+3, 0.670E+2, 0.19887000E+1, + 0.00000000E+0, 0.11199780E+3, 0.208E+3, 0.680E+2, 0.19887000E+1, 0.00000000E+0, 0.10990310E+3, + 0.208E+3, 0.690E+2, 0.19887000E+1, 0.00000000E+0, 0.10838260E+3, 0.208E+3, 0.700E+2, + 0.19887000E+1, 0.00000000E+0, 0.94143100E+2, 0.208E+3, 0.710E+2, 0.19887000E+1, 0.00000000E+0, + 0.95450600E+2, 0.208E+3, 0.720E+2, 0.19887000E+1, 0.00000000E+0, 0.89314200E+2, 0.208E+3, + 0.730E+2, 0.19887000E+1, 0.00000000E+0, 0.77589500E+2, 0.208E+3, 0.740E+2, 0.19887000E+1, + 0.00000000E+0, 0.79439800E+2, 0.208E+3, 0.750E+2, 0.19887000E+1, 0.00000000E+0, 0.73642700E+2, + 0.208E+3, 0.760E+2, 0.19887000E+1, 0.00000000E+0, 0.68748100E+2, 0.208E+3, 0.770E+2, + 0.19887000E+1, 0.00000000E+0, 0.58749700E+2, 0.208E+3, 0.780E+2, 0.19887000E+1, 0.00000000E+0, + 0.55502000E+2, 0.208E+3, 0.790E+2, 0.19887000E+1, 0.00000000E+0, 0.57232800E+2, 0.208E+3, + 0.800E+2, 0.19887000E+1, 0.00000000E+0, 0.76523500E+2, 0.208E+3, 0.810E+2, 0.19887000E+1, + 0.00000000E+0, 0.76401300E+2, 0.208E+3, 0.820E+2, 0.19887000E+1, 0.00000000E+0, 0.72435200E+2, + 0.208E+3, 0.830E+2, 0.19887000E+1, 0.00000000E+0, 0.70476900E+2, 0.208E+3, 0.840E+2, + 0.19887000E+1, 0.00000000E+0, 0.66750400E+2, 0.208E+3, 0.850E+2, 0.19887000E+1, 0.00000000E+0, + 0.62757800E+2, 0.208E+3, 0.860E+2, 0.19887000E+1, 0.00000000E+0, 0.15736950E+3, 0.208E+3, + 0.870E+2, 0.19887000E+1, 0.00000000E+0, 0.15673170E+3, 0.208E+3, 0.880E+2, 0.19887000E+1, + 0.00000000E+0, 0.14266360E+3, 0.208E+3, 0.890E+2, 0.19887000E+1, 0.00000000E+0, 0.13347620E+3, + 0.208E+3, 0.900E+2, 0.19887000E+1, 0.00000000E+0, 0.13079990E+3, 0.208E+3, 0.910E+2, + 0.19887000E+1, 0.00000000E+0, 0.12685500E+3, 0.208E+3, 0.920E+2, 0.19887000E+1, 0.00000000E+0, + 0.12772950E+3, 0.208E+3, 0.930E+2, 0.19887000E+1, 0.00000000E+0, 0.12416310E+3, 0.208E+3, + 0.940E+2, 0.19887000E+1, 0.00000000E+0, 0.80848000E+1, 0.208E+3, 0.101E+3, 0.19887000E+1, + 0.00000000E+0, 0.22893000E+2, 0.208E+3, 0.103E+3, 0.19887000E+1, 0.98650000E+0, 0.29852300E+2, + 0.208E+3, 0.104E+3, 0.19887000E+1, 0.98080000E+0, 0.24818500E+2, 0.208E+3, 0.105E+3, + 0.19887000E+1, 0.97060000E+0, 0.19909000E+2, 0.208E+3, 0.106E+3, 0.19887000E+1, 0.98680000E+0, + 0.14860000E+2, 0.208E+3, 0.107E+3, 0.19887000E+1, 0.99440000E+0, 0.11500900E+2, 0.208E+3, + 0.108E+3, 0.19887000E+1, 0.99250000E+0, 0.85397000E+1, 0.208E+3, 0.109E+3, 0.19887000E+1, + 0.99820000E+0, 0.33263600E+2, 0.208E+3, 0.111E+3, 0.19887000E+1, 0.96840000E+0, 0.50866900E+2, + 0.208E+3, 0.112E+3, 0.19887000E+1, 0.96280000E+0, 0.53436500E+2, 0.208E+3, 0.113E+3, + 0.19887000E+1, 0.96480000E+0, 0.45727300E+2, 0.208E+3, 0.114E+3, 0.19887000E+1, 0.95070000E+0, + 0.39461700E+2, 0.208E+3, 0.115E+3, 0.19887000E+1, 0.99470000E+0, 0.34751000E+2, 0.208E+3, + 0.116E+3, 0.19887000E+1, 0.99480000E+0, 0.29682200E+2, 0.208E+3, 0.117E+3, 0.19887000E+1, + 0.99720000E+0, 0.48638000E+2, 0.208E+3, 0.119E+3, 0.19887000E+1, 0.97670000E+0, 0.83727900E+2, + 0.208E+3, 0.120E+3, 0.19887000E+1, 0.98310000E+0, 0.50337300E+2, 0.208E+3, 0.121E+3, + 0.19887000E+1, 0.18627000E+1, 0.48839600E+2, 0.208E+3, 0.122E+3, 0.19887000E+1, 0.18299000E+1, + 0.47881500E+2, 0.208E+3, 0.123E+3, 0.19887000E+1, 0.19138000E+1, 0.47229700E+2, 0.208E+3, + 0.124E+3, 0.19887000E+1, 0.18269000E+1, 0.44488800E+2, 0.208E+3, 0.125E+3, 0.19887000E+1, + 0.16406000E+1, 0.41627000E+2, 0.208E+3, 0.126E+3, 0.19887000E+1, 0.16483000E+1, 0.39813100E+2, + 0.208E+3, 0.127E+3, 0.19887000E+1, 0.17149000E+1, 0.38859700E+2, 0.208E+3, 0.128E+3, + 0.19887000E+1, 0.17937000E+1, 0.37708300E+2, 0.208E+3, 0.129E+3, 0.19887000E+1, 0.95760000E+0, + 0.36576400E+2, 0.208E+3, 0.130E+3, 0.19887000E+1, 0.19419000E+1, 0.54596400E+2, 0.208E+3, + 0.131E+3, 0.19887000E+1, 0.96010000E+0, 0.50234300E+2, 0.208E+3, 0.132E+3, 0.19887000E+1, + 0.94340000E+0, 0.46775300E+2, 0.208E+3, 0.133E+3, 0.19887000E+1, 0.98890000E+0, 0.43993100E+2, + 0.208E+3, 0.134E+3, 0.19887000E+1, 0.99010000E+0, 0.40100200E+2, 0.208E+3, 0.135E+3, + 0.19887000E+1, 0.99740000E+0, 0.58901500E+2, 0.208E+3, 0.137E+3, 0.19887000E+1, 0.97380000E+0, + 0.10201160E+3, 0.208E+3, 0.138E+3, 0.19887000E+1, 0.98010000E+0, 0.83510800E+2, 0.208E+3, + 0.139E+3, 0.19887000E+1, 0.19153000E+1, 0.66749800E+2, 0.208E+3, 0.140E+3, 0.19887000E+1, + 0.19355000E+1, 0.67412800E+2, 0.208E+3, 0.141E+3, 0.19887000E+1, 0.19545000E+1, 0.63740200E+2, + 0.208E+3, 0.142E+3, 0.19887000E+1, 0.19420000E+1, 0.69283800E+2, 0.208E+3, 0.143E+3, + 0.19887000E+1, 0.16682000E+1, 0.57192800E+2, 0.208E+3, 0.144E+3, 0.19887000E+1, 0.18584000E+1, + 0.53867000E+2, 0.208E+3, 0.145E+3, 0.19887000E+1, 0.19003000E+1, 0.50470900E+2, 0.208E+3, + 0.146E+3, 0.19887000E+1, 0.18630000E+1, 0.48691200E+2, 0.208E+3, 0.147E+3, 0.19887000E+1, + 0.96790000E+0, 0.48849700E+2, 0.208E+3, 0.148E+3, 0.19887000E+1, 0.19539000E+1, 0.70351100E+2, + 0.208E+3, 0.149E+3, 0.19887000E+1, 0.96330000E+0, 0.65963500E+2, 0.208E+3, 0.150E+3, + 0.19887000E+1, 0.95140000E+0, 0.63497200E+2, 0.208E+3, 0.151E+3, 0.19887000E+1, 0.97490000E+0, + 0.61358500E+2, 0.208E+3, 0.152E+3, 0.19887000E+1, 0.98110000E+0, 0.57565500E+2, 0.208E+3, + 0.153E+3, 0.19887000E+1, 0.99680000E+0, 0.71326900E+2, 0.208E+3, 0.155E+3, 0.19887000E+1, + 0.99090000E+0, 0.13126330E+3, 0.208E+3, 0.156E+3, 0.19887000E+1, 0.97970000E+0, 0.10532360E+3, + 0.208E+3, 0.157E+3, 0.19887000E+1, 0.19373000E+1, 0.73903200E+2, 0.208E+3, 0.159E+3, + 0.19887000E+1, 0.29425000E+1, 0.72415600E+2, 0.208E+3, 0.160E+3, 0.19887000E+1, 0.29455000E+1, + 0.70289800E+2, 0.208E+3, 0.161E+3, 0.19887000E+1, 0.29413000E+1, 0.70251100E+2, 0.208E+3, + 0.162E+3, 0.19887000E+1, 0.29300000E+1, 0.66716600E+2, 0.208E+3, 0.163E+3, 0.19887000E+1, + 0.18286000E+1, 0.70433100E+2, 0.208E+3, 0.164E+3, 0.19887000E+1, 0.28732000E+1, 0.66555900E+2, + 0.208E+3, 0.165E+3, 0.19887000E+1, 0.29086000E+1, 0.67106000E+2, 0.208E+3, 0.166E+3, + 0.19887000E+1, 0.28965000E+1, 0.63452700E+2, 0.208E+3, 0.167E+3, 0.19887000E+1, 0.29242000E+1, + 0.61756800E+2, 0.208E+3, 0.168E+3, 0.19887000E+1, 0.29282000E+1, 0.61245400E+2, 0.208E+3, + 0.169E+3, 0.19887000E+1, 0.29246000E+1, 0.63639600E+2, 0.208E+3, 0.170E+3, 0.19887000E+1, + 0.28482000E+1, 0.59322400E+2, 0.208E+3, 0.171E+3, 0.19887000E+1, 0.29219000E+1, 0.75441200E+2, + 0.208E+3, 0.172E+3, 0.19887000E+1, 0.19254000E+1, 0.71752400E+2, 0.208E+3, 0.173E+3, + 0.19887000E+1, 0.19459000E+1, 0.67168700E+2, 0.208E+3, 0.174E+3, 0.19887000E+1, 0.19292000E+1, + 0.66668200E+2, 0.208E+3, 0.175E+3, 0.19887000E+1, 0.18104000E+1, 0.61667600E+2, 0.208E+3, + 0.176E+3, 0.19887000E+1, 0.18858000E+1, 0.58716200E+2, 0.208E+3, 0.177E+3, 0.19887000E+1, + 0.18648000E+1, 0.56528500E+2, 0.208E+3, 0.178E+3, 0.19887000E+1, 0.19188000E+1, 0.54235200E+2, + 0.208E+3, 0.179E+3, 0.19887000E+1, 0.98460000E+0, 0.53255600E+2, 0.208E+3, 0.180E+3, + 0.19887000E+1, 0.19896000E+1, 0.76842400E+2, 0.208E+3, 0.181E+3, 0.19887000E+1, 0.92670000E+0, + 0.72435300E+2, 0.208E+3, 0.182E+3, 0.19887000E+1, 0.93830000E+0, 0.71560300E+2, 0.208E+3, + 0.183E+3, 0.19887000E+1, 0.98200000E+0, 0.70670800E+2, 0.208E+3, 0.184E+3, 0.19887000E+1, + 0.98150000E+0, 0.67531900E+2, 0.208E+3, 0.185E+3, 0.19887000E+1, 0.99540000E+0, 0.80432600E+2, + 0.208E+3, 0.187E+3, 0.19887000E+1, 0.97050000E+0, 0.13328520E+3, 0.208E+3, 0.188E+3, + 0.19887000E+1, 0.96620000E+0, 0.87210800E+2, 0.208E+3, 0.189E+3, 0.19887000E+1, 0.29070000E+1, + 0.97994500E+2, 0.208E+3, 0.190E+3, 0.19887000E+1, 0.28844000E+1, 0.89142100E+2, 0.208E+3, + 0.191E+3, 0.19887000E+1, 0.28738000E+1, 0.80572400E+2, 0.208E+3, 0.192E+3, 0.19887000E+1, + 0.28878000E+1, 0.78019000E+2, 0.208E+3, 0.193E+3, 0.19887000E+1, 0.29095000E+1, 0.88176800E+2, + 0.208E+3, 0.194E+3, 0.19887000E+1, 0.19209000E+1, 0.21128200E+2, 0.208E+3, 0.204E+3, + 0.19887000E+1, 0.19697000E+1, 0.21364800E+2, 0.208E+3, 0.205E+3, 0.19887000E+1, 0.19441000E+1, + 0.16785500E+2, 0.208E+3, 0.206E+3, 0.19887000E+1, 0.19985000E+1, 0.14080700E+2, 0.208E+3, + 0.207E+3, 0.19887000E+1, 0.20143000E+1, 0.10370800E+2, 0.208E+3, 0.208E+3, 0.19887000E+1, + 0.19887000E+1, 0.21837000E+2, 0.212E+3, 0.100E+1, 0.19496000E+1, 0.91180000E+0, 0.13849600E+2, + 0.212E+3, 0.200E+1, 0.19496000E+1, 0.00000000E+0, 0.37081900E+3, 0.212E+3, 0.300E+1, + 0.19496000E+1, 0.00000000E+0, 0.20867690E+3, 0.212E+3, 0.400E+1, 0.19496000E+1, 0.00000000E+0, + 0.13699320E+3, 0.212E+3, 0.500E+1, 0.19496000E+1, 0.00000000E+0, 0.90330500E+2, 0.212E+3, + 0.600E+1, 0.19496000E+1, 0.00000000E+0, 0.61837200E+2, 0.212E+3, 0.700E+1, 0.19496000E+1, + 0.00000000E+0, 0.46034700E+2, 0.212E+3, 0.800E+1, 0.19496000E+1, 0.00000000E+0, 0.34331400E+2, + 0.212E+3, 0.900E+1, 0.19496000E+1, 0.00000000E+0, 0.26053300E+2, 0.212E+3, 0.100E+2, + 0.19496000E+1, 0.00000000E+0, 0.44240190E+3, 0.212E+3, 0.110E+2, 0.19496000E+1, 0.00000000E+0, + 0.33424930E+3, 0.212E+3, 0.120E+2, 0.19496000E+1, 0.00000000E+0, 0.30473370E+3, 0.212E+3, + 0.130E+2, 0.19496000E+1, 0.00000000E+0, 0.23613880E+3, 0.212E+3, 0.140E+2, 0.19496000E+1, + 0.00000000E+0, 0.18098430E+3, 0.212E+3, 0.150E+2, 0.19496000E+1, 0.00000000E+0, 0.14821300E+3, + 0.212E+3, 0.160E+2, 0.19496000E+1, 0.00000000E+0, 0.11939110E+3, 0.212E+3, 0.170E+2, + 0.19496000E+1, 0.00000000E+0, 0.96381300E+2, 0.212E+3, 0.180E+2, 0.19496000E+1, 0.00000000E+0, + 0.72363460E+3, 0.212E+3, 0.190E+2, 0.19496000E+1, 0.00000000E+0, 0.59087370E+3, 0.212E+3, + 0.200E+2, 0.19496000E+1, 0.00000000E+0, 0.48646530E+3, 0.212E+3, 0.210E+2, 0.19496000E+1, + 0.00000000E+0, 0.46745060E+3, 0.212E+3, 0.220E+2, 0.19496000E+1, 0.00000000E+0, 0.42688150E+3, + 0.212E+3, 0.230E+2, 0.19496000E+1, 0.00000000E+0, 0.33501180E+3, 0.212E+3, 0.240E+2, + 0.19496000E+1, 0.00000000E+0, 0.36600240E+3, 0.212E+3, 0.250E+2, 0.19496000E+1, 0.00000000E+0, + 0.28599690E+3, 0.212E+3, 0.260E+2, 0.19496000E+1, 0.00000000E+0, 0.30245180E+3, 0.212E+3, + 0.270E+2, 0.19496000E+1, 0.00000000E+0, 0.31258620E+3, 0.212E+3, 0.280E+2, 0.19496000E+1, + 0.00000000E+0, 0.23853700E+3, 0.212E+3, 0.290E+2, 0.19496000E+1, 0.00000000E+0, 0.24356630E+3, + 0.212E+3, 0.300E+2, 0.19496000E+1, 0.00000000E+0, 0.28974250E+3, 0.212E+3, 0.310E+2, + 0.19496000E+1, 0.00000000E+0, 0.25239640E+3, 0.212E+3, 0.320E+2, 0.19496000E+1, 0.00000000E+0, + 0.21233920E+3, 0.212E+3, 0.330E+2, 0.19496000E+1, 0.00000000E+0, 0.18862140E+3, 0.212E+3, + 0.340E+2, 0.19496000E+1, 0.00000000E+0, 0.16322210E+3, 0.212E+3, 0.350E+2, 0.19496000E+1, + 0.00000000E+0, 0.14036050E+3, 0.212E+3, 0.360E+2, 0.19496000E+1, 0.00000000E+0, 0.80885370E+3, + 0.212E+3, 0.370E+2, 0.19496000E+1, 0.00000000E+0, 0.70339060E+3, 0.212E+3, 0.380E+2, + 0.19496000E+1, 0.00000000E+0, 0.61169610E+3, 0.212E+3, 0.390E+2, 0.19496000E+1, 0.00000000E+0, + 0.54679350E+3, 0.212E+3, 0.400E+2, 0.19496000E+1, 0.00000000E+0, 0.49648070E+3, 0.212E+3, + 0.410E+2, 0.19496000E+1, 0.00000000E+0, 0.37976260E+3, 0.212E+3, 0.420E+2, 0.19496000E+1, + 0.00000000E+0, 0.42526560E+3, 0.212E+3, 0.430E+2, 0.19496000E+1, 0.00000000E+0, 0.32066780E+3, + 0.212E+3, 0.440E+2, 0.19496000E+1, 0.00000000E+0, 0.35143020E+3, 0.212E+3, 0.450E+2, + 0.19496000E+1, 0.00000000E+0, 0.32495510E+3, 0.212E+3, 0.460E+2, 0.19496000E+1, 0.00000000E+0, + 0.27016330E+3, 0.212E+3, 0.470E+2, 0.19496000E+1, 0.00000000E+0, 0.28521610E+3, 0.212E+3, + 0.480E+2, 0.19496000E+1, 0.00000000E+0, 0.36138350E+3, 0.212E+3, 0.490E+2, 0.19496000E+1, + 0.00000000E+0, 0.33128280E+3, 0.212E+3, 0.500E+2, 0.19496000E+1, 0.00000000E+0, 0.29202460E+3, + 0.212E+3, 0.510E+2, 0.19496000E+1, 0.00000000E+0, 0.26885950E+3, 0.212E+3, 0.520E+2, + 0.19496000E+1, 0.00000000E+0, 0.24089430E+3, 0.212E+3, 0.530E+2, 0.19496000E+1, 0.00000000E+0, + 0.21454790E+3, 0.212E+3, 0.540E+2, 0.19496000E+1, 0.00000000E+0, 0.98395840E+3, 0.212E+3, + 0.550E+2, 0.19496000E+1, 0.00000000E+0, 0.89740290E+3, 0.212E+3, 0.560E+2, 0.19496000E+1, + 0.00000000E+0, 0.78313020E+3, 0.212E+3, 0.570E+2, 0.19496000E+1, 0.00000000E+0, 0.34513820E+3, + 0.212E+3, 0.580E+2, 0.19496000E+1, 0.27991000E+1, 0.79290630E+3, 0.212E+3, 0.590E+2, + 0.19496000E+1, 0.00000000E+0, 0.76073520E+3, 0.212E+3, 0.600E+2, 0.19496000E+1, 0.00000000E+0, + 0.74148810E+3, 0.212E+3, 0.610E+2, 0.19496000E+1, 0.00000000E+0, 0.72382090E+3, 0.212E+3, + 0.620E+2, 0.19496000E+1, 0.00000000E+0, 0.70814950E+3, 0.212E+3, 0.630E+2, 0.19496000E+1, + 0.00000000E+0, 0.55111930E+3, 0.212E+3, 0.640E+2, 0.19496000E+1, 0.00000000E+0, 0.62646370E+3, + 0.212E+3, 0.650E+2, 0.19496000E+1, 0.00000000E+0, 0.60329280E+3, 0.212E+3, 0.660E+2, + 0.19496000E+1, 0.00000000E+0, 0.63781980E+3, 0.212E+3, 0.670E+2, 0.19496000E+1, 0.00000000E+0, + 0.62424880E+3, 0.212E+3, 0.680E+2, 0.19496000E+1, 0.00000000E+0, 0.61193920E+3, 0.212E+3, + 0.690E+2, 0.19496000E+1, 0.00000000E+0, 0.60508430E+3, 0.212E+3, 0.700E+2, 0.19496000E+1, + 0.00000000E+0, 0.50623650E+3, 0.212E+3, 0.710E+2, 0.19496000E+1, 0.00000000E+0, 0.49422900E+3, + 0.212E+3, 0.720E+2, 0.19496000E+1, 0.00000000E+0, 0.44819920E+3, 0.212E+3, 0.730E+2, + 0.19496000E+1, 0.00000000E+0, 0.37559750E+3, 0.212E+3, 0.740E+2, 0.19496000E+1, 0.00000000E+0, + 0.38147930E+3, 0.212E+3, 0.750E+2, 0.19496000E+1, 0.00000000E+0, 0.34361070E+3, 0.212E+3, + 0.760E+2, 0.19496000E+1, 0.00000000E+0, 0.31299940E+3, 0.212E+3, 0.770E+2, 0.19496000E+1, + 0.00000000E+0, 0.25789210E+3, 0.212E+3, 0.780E+2, 0.19496000E+1, 0.00000000E+0, 0.24017810E+3, + 0.212E+3, 0.790E+2, 0.19496000E+1, 0.00000000E+0, 0.24690090E+3, 0.212E+3, 0.800E+2, + 0.19496000E+1, 0.00000000E+0, 0.36875940E+3, 0.212E+3, 0.810E+2, 0.19496000E+1, 0.00000000E+0, + 0.35855060E+3, 0.212E+3, 0.820E+2, 0.19496000E+1, 0.00000000E+0, 0.32650440E+3, 0.212E+3, + 0.830E+2, 0.19496000E+1, 0.00000000E+0, 0.30951770E+3, 0.212E+3, 0.840E+2, 0.19496000E+1, + 0.00000000E+0, 0.28334810E+3, 0.212E+3, 0.850E+2, 0.19496000E+1, 0.00000000E+0, 0.25758240E+3, + 0.212E+3, 0.860E+2, 0.19496000E+1, 0.00000000E+0, 0.92425730E+3, 0.212E+3, 0.870E+2, + 0.19496000E+1, 0.00000000E+0, 0.88381110E+3, 0.212E+3, 0.880E+2, 0.19496000E+1, 0.00000000E+0, + 0.77640740E+3, 0.212E+3, 0.890E+2, 0.19496000E+1, 0.00000000E+0, 0.69112710E+3, 0.212E+3, + 0.900E+2, 0.19496000E+1, 0.00000000E+0, 0.68830150E+3, 0.212E+3, 0.910E+2, 0.19496000E+1, + 0.00000000E+0, 0.66622690E+3, 0.212E+3, 0.920E+2, 0.19496000E+1, 0.00000000E+0, 0.68965180E+3, + 0.212E+3, 0.930E+2, 0.19496000E+1, 0.00000000E+0, 0.66729490E+3, 0.212E+3, 0.940E+2, + 0.19496000E+1, 0.00000000E+0, 0.35919000E+2, 0.212E+3, 0.101E+3, 0.19496000E+1, 0.00000000E+0, + 0.12078080E+3, 0.212E+3, 0.103E+3, 0.19496000E+1, 0.98650000E+0, 0.15315750E+3, 0.212E+3, + 0.104E+3, 0.19496000E+1, 0.98080000E+0, 0.11441900E+3, 0.212E+3, 0.105E+3, 0.19496000E+1, + 0.97060000E+0, 0.84617800E+2, 0.212E+3, 0.106E+3, 0.19496000E+1, 0.98680000E+0, 0.57539800E+2, + 0.212E+3, 0.107E+3, 0.19496000E+1, 0.99440000E+0, 0.41060500E+2, 0.212E+3, 0.108E+3, + 0.19496000E+1, 0.99250000E+0, 0.27484100E+2, 0.212E+3, 0.109E+3, 0.19496000E+1, 0.99820000E+0, + 0.17686830E+3, 0.212E+3, 0.111E+3, 0.19496000E+1, 0.96840000E+0, 0.27415900E+3, 0.212E+3, + 0.112E+3, 0.19496000E+1, 0.96280000E+0, 0.27526090E+3, 0.212E+3, 0.113E+3, 0.19496000E+1, + 0.96480000E+0, 0.21754710E+3, 0.212E+3, 0.114E+3, 0.19496000E+1, 0.95070000E+0, 0.17550060E+3, + 0.212E+3, 0.115E+3, 0.19496000E+1, 0.99470000E+0, 0.14658490E+3, 0.212E+3, 0.116E+3, + 0.19496000E+1, 0.99480000E+0, 0.11815670E+3, 0.212E+3, 0.117E+3, 0.19496000E+1, 0.99720000E+0, + 0.24017250E+3, 0.212E+3, 0.119E+3, 0.19496000E+1, 0.97670000E+0, 0.47030590E+3, 0.212E+3, + 0.120E+3, 0.19496000E+1, 0.98310000E+0, 0.23815400E+3, 0.212E+3, 0.121E+3, 0.19496000E+1, + 0.18627000E+1, 0.22957540E+3, 0.212E+3, 0.122E+3, 0.19496000E+1, 0.18299000E+1, 0.22498220E+3, + 0.212E+3, 0.123E+3, 0.19496000E+1, 0.19138000E+1, 0.22318550E+3, 0.212E+3, 0.124E+3, + 0.19496000E+1, 0.18269000E+1, 0.20404460E+3, 0.212E+3, 0.125E+3, 0.19496000E+1, 0.16406000E+1, + 0.18825250E+3, 0.212E+3, 0.126E+3, 0.19496000E+1, 0.16483000E+1, 0.17945530E+3, 0.212E+3, + 0.127E+3, 0.19496000E+1, 0.17149000E+1, 0.17553430E+3, 0.212E+3, 0.128E+3, 0.19496000E+1, + 0.17937000E+1, 0.17436190E+3, 0.212E+3, 0.129E+3, 0.19496000E+1, 0.95760000E+0, 0.16200320E+3, + 0.212E+3, 0.130E+3, 0.19496000E+1, 0.19419000E+1, 0.27124200E+3, 0.212E+3, 0.131E+3, + 0.19496000E+1, 0.96010000E+0, 0.23526700E+3, 0.212E+3, 0.132E+3, 0.19496000E+1, 0.94340000E+0, + 0.20852360E+3, 0.212E+3, 0.133E+3, 0.19496000E+1, 0.98890000E+0, 0.18870250E+3, 0.212E+3, + 0.134E+3, 0.19496000E+1, 0.99010000E+0, 0.16443830E+3, 0.212E+3, 0.135E+3, 0.19496000E+1, + 0.99740000E+0, 0.28542190E+3, 0.212E+3, 0.137E+3, 0.19496000E+1, 0.97380000E+0, 0.57194480E+3, + 0.212E+3, 0.138E+3, 0.19496000E+1, 0.98010000E+0, 0.43039400E+3, 0.212E+3, 0.139E+3, + 0.19496000E+1, 0.19153000E+1, 0.31464020E+3, 0.212E+3, 0.140E+3, 0.19496000E+1, 0.19355000E+1, + 0.31779230E+3, 0.212E+3, 0.141E+3, 0.19496000E+1, 0.19545000E+1, 0.29518160E+3, 0.212E+3, + 0.142E+3, 0.19496000E+1, 0.19420000E+1, 0.33381660E+3, 0.212E+3, 0.143E+3, 0.19496000E+1, + 0.16682000E+1, 0.25522890E+3, 0.212E+3, 0.144E+3, 0.19496000E+1, 0.18584000E+1, 0.23831870E+3, + 0.212E+3, 0.145E+3, 0.19496000E+1, 0.19003000E+1, 0.22073750E+3, 0.212E+3, 0.146E+3, + 0.19496000E+1, 0.18630000E+1, 0.21374770E+3, 0.212E+3, 0.147E+3, 0.19496000E+1, 0.96790000E+0, + 0.21054980E+3, 0.212E+3, 0.148E+3, 0.19496000E+1, 0.19539000E+1, 0.34330980E+3, 0.212E+3, + 0.149E+3, 0.19496000E+1, 0.96330000E+0, 0.30754750E+3, 0.212E+3, 0.150E+3, 0.19496000E+1, + 0.95140000E+0, 0.28572510E+3, 0.212E+3, 0.151E+3, 0.19496000E+1, 0.97490000E+0, 0.26854180E+3, + 0.212E+3, 0.152E+3, 0.19496000E+1, 0.98110000E+0, 0.24320970E+3, 0.212E+3, 0.153E+3, + 0.19496000E+1, 0.99680000E+0, 0.33524300E+3, 0.212E+3, 0.155E+3, 0.19496000E+1, 0.99090000E+0, + 0.74236730E+3, 0.212E+3, 0.156E+3, 0.19496000E+1, 0.97970000E+0, 0.54507520E+3, 0.212E+3, + 0.157E+3, 0.19496000E+1, 0.19373000E+1, 0.33446520E+3, 0.212E+3, 0.159E+3, 0.19496000E+1, + 0.29425000E+1, 0.32749910E+3, 0.212E+3, 0.160E+3, 0.19496000E+1, 0.29455000E+1, 0.31689690E+3, + 0.212E+3, 0.161E+3, 0.19496000E+1, 0.29413000E+1, 0.31894850E+3, 0.212E+3, 0.162E+3, + 0.19496000E+1, 0.29300000E+1, 0.30882190E+3, 0.212E+3, 0.163E+3, 0.19496000E+1, 0.18286000E+1, + 0.32130770E+3, 0.212E+3, 0.164E+3, 0.19496000E+1, 0.28732000E+1, 0.30127990E+3, 0.212E+3, + 0.165E+3, 0.19496000E+1, 0.29086000E+1, 0.30734770E+3, 0.212E+3, 0.166E+3, 0.19496000E+1, + 0.28965000E+1, 0.28559620E+3, 0.212E+3, 0.167E+3, 0.19496000E+1, 0.29242000E+1, 0.27731030E+3, + 0.212E+3, 0.168E+3, 0.19496000E+1, 0.29282000E+1, 0.27568110E+3, 0.212E+3, 0.169E+3, + 0.19496000E+1, 0.29246000E+1, 0.29074100E+3, 0.212E+3, 0.170E+3, 0.19496000E+1, 0.28482000E+1, + 0.26629260E+3, 0.212E+3, 0.171E+3, 0.19496000E+1, 0.29219000E+1, 0.36710790E+3, 0.212E+3, + 0.172E+3, 0.19496000E+1, 0.19254000E+1, 0.33846150E+3, 0.212E+3, 0.173E+3, 0.19496000E+1, + 0.19459000E+1, 0.30662140E+3, 0.212E+3, 0.174E+3, 0.19496000E+1, 0.19292000E+1, 0.31198680E+3, + 0.212E+3, 0.175E+3, 0.19496000E+1, 0.18104000E+1, 0.26878310E+3, 0.212E+3, 0.176E+3, + 0.19496000E+1, 0.18858000E+1, 0.25196650E+3, 0.212E+3, 0.177E+3, 0.19496000E+1, 0.18648000E+1, + 0.24010400E+3, 0.212E+3, 0.178E+3, 0.19496000E+1, 0.19188000E+1, 0.22934010E+3, 0.212E+3, + 0.179E+3, 0.19496000E+1, 0.98460000E+0, 0.22047400E+3, 0.212E+3, 0.180E+3, 0.19496000E+1, + 0.19896000E+1, 0.36691360E+3, 0.212E+3, 0.181E+3, 0.19496000E+1, 0.92670000E+0, 0.33131350E+3, + 0.212E+3, 0.182E+3, 0.19496000E+1, 0.93830000E+0, 0.31955040E+3, 0.212E+3, 0.183E+3, + 0.19496000E+1, 0.98200000E+0, 0.30934230E+3, 0.212E+3, 0.184E+3, 0.19496000E+1, 0.98150000E+0, + 0.28680210E+3, 0.212E+3, 0.185E+3, 0.19496000E+1, 0.99540000E+0, 0.37742160E+3, 0.212E+3, + 0.187E+3, 0.19496000E+1, 0.97050000E+0, 0.73519780E+3, 0.212E+3, 0.188E+3, 0.19496000E+1, + 0.96620000E+0, 0.39606860E+3, 0.212E+3, 0.189E+3, 0.19496000E+1, 0.29070000E+1, 0.46056730E+3, + 0.212E+3, 0.190E+3, 0.19496000E+1, 0.28844000E+1, 0.40974230E+3, 0.212E+3, 0.191E+3, + 0.19496000E+1, 0.28738000E+1, 0.35990110E+3, 0.212E+3, 0.192E+3, 0.19496000E+1, 0.28878000E+1, + 0.34571200E+3, 0.212E+3, 0.193E+3, 0.19496000E+1, 0.29095000E+1, 0.42322520E+3, 0.212E+3, + 0.194E+3, 0.19496000E+1, 0.19209000E+1, 0.97810100E+2, 0.212E+3, 0.204E+3, 0.19496000E+1, + 0.19697000E+1, 0.95357500E+2, 0.212E+3, 0.205E+3, 0.19496000E+1, 0.19441000E+1, 0.68298400E+2, + 0.212E+3, 0.206E+3, 0.19496000E+1, 0.19985000E+1, 0.53880300E+2, 0.212E+3, 0.207E+3, + 0.19496000E+1, 0.20143000E+1, 0.35966500E+2, 0.212E+3, 0.208E+3, 0.19496000E+1, 0.19887000E+1, + 0.17556160E+3, 0.212E+3, 0.212E+3, 0.19496000E+1, 0.19496000E+1, 0.26352400E+2, 0.213E+3, + 0.100E+1, 0.19311000E+1, 0.91180000E+0, 0.16703100E+2, 0.213E+3, 0.200E+1, 0.19311000E+1, + 0.00000000E+0, 0.45636130E+3, 0.213E+3, 0.300E+1, 0.19311000E+1, 0.00000000E+0, 0.25306490E+3, + 0.213E+3, 0.400E+1, 0.19311000E+1, 0.00000000E+0, 0.16559380E+3, 0.213E+3, 0.500E+1, + 0.19311000E+1, 0.00000000E+0, 0.10905410E+3, 0.213E+3, 0.600E+1, 0.19311000E+1, 0.00000000E+0, + 0.74611700E+2, 0.213E+3, 0.700E+1, 0.19311000E+1, 0.00000000E+0, 0.55525000E+2, 0.213E+3, + 0.800E+1, 0.19311000E+1, 0.00000000E+0, 0.41391400E+2, 0.213E+3, 0.900E+1, 0.19311000E+1, + 0.00000000E+0, 0.31394400E+2, 0.213E+3, 0.100E+2, 0.19311000E+1, 0.00000000E+0, 0.54393780E+3, + 0.213E+3, 0.110E+2, 0.19311000E+1, 0.00000000E+0, 0.40606870E+3, 0.213E+3, 0.120E+2, + 0.19311000E+1, 0.00000000E+0, 0.36938290E+3, 0.213E+3, 0.130E+2, 0.19311000E+1, 0.00000000E+0, + 0.28548250E+3, 0.213E+3, 0.140E+2, 0.19311000E+1, 0.00000000E+0, 0.21853020E+3, 0.213E+3, + 0.150E+2, 0.19311000E+1, 0.00000000E+0, 0.17889260E+3, 0.213E+3, 0.160E+2, 0.19311000E+1, + 0.00000000E+0, 0.14406690E+3, 0.213E+3, 0.170E+2, 0.19311000E+1, 0.00000000E+0, 0.11628170E+3, + 0.213E+3, 0.180E+2, 0.19311000E+1, 0.00000000E+0, 0.89462280E+3, 0.213E+3, 0.190E+2, + 0.19311000E+1, 0.00000000E+0, 0.72140890E+3, 0.213E+3, 0.200E+2, 0.19311000E+1, 0.00000000E+0, + 0.59270500E+3, 0.213E+3, 0.210E+2, 0.19311000E+1, 0.00000000E+0, 0.56890770E+3, 0.213E+3, + 0.220E+2, 0.19311000E+1, 0.00000000E+0, 0.51913280E+3, 0.213E+3, 0.230E+2, 0.19311000E+1, + 0.00000000E+0, 0.40772880E+3, 0.213E+3, 0.240E+2, 0.19311000E+1, 0.00000000E+0, 0.44462830E+3, + 0.213E+3, 0.250E+2, 0.19311000E+1, 0.00000000E+0, 0.34763940E+3, 0.213E+3, 0.260E+2, + 0.19311000E+1, 0.00000000E+0, 0.36672360E+3, 0.213E+3, 0.270E+2, 0.19311000E+1, 0.00000000E+0, + 0.37922800E+3, 0.213E+3, 0.280E+2, 0.19311000E+1, 0.00000000E+0, 0.28968240E+3, 0.213E+3, + 0.290E+2, 0.19311000E+1, 0.00000000E+0, 0.29490170E+3, 0.213E+3, 0.300E+2, 0.19311000E+1, + 0.00000000E+0, 0.35111920E+3, 0.213E+3, 0.310E+2, 0.19311000E+1, 0.00000000E+0, 0.30516430E+3, + 0.213E+3, 0.320E+2, 0.19311000E+1, 0.00000000E+0, 0.25642310E+3, 0.213E+3, 0.330E+2, + 0.19311000E+1, 0.00000000E+0, 0.22769360E+3, 0.213E+3, 0.340E+2, 0.19311000E+1, 0.00000000E+0, + 0.19697430E+3, 0.213E+3, 0.350E+2, 0.19311000E+1, 0.00000000E+0, 0.16935470E+3, 0.213E+3, + 0.360E+2, 0.19311000E+1, 0.00000000E+0, 0.99974000E+3, 0.213E+3, 0.370E+2, 0.19311000E+1, + 0.00000000E+0, 0.85956780E+3, 0.213E+3, 0.380E+2, 0.19311000E+1, 0.00000000E+0, 0.74518010E+3, + 0.213E+3, 0.390E+2, 0.19311000E+1, 0.00000000E+0, 0.66503860E+3, 0.213E+3, 0.400E+2, + 0.19311000E+1, 0.00000000E+0, 0.60335750E+3, 0.213E+3, 0.410E+2, 0.19311000E+1, 0.00000000E+0, + 0.46105860E+3, 0.213E+3, 0.420E+2, 0.19311000E+1, 0.00000000E+0, 0.51647660E+3, 0.213E+3, + 0.430E+2, 0.19311000E+1, 0.00000000E+0, 0.38899560E+3, 0.213E+3, 0.440E+2, 0.19311000E+1, + 0.00000000E+0, 0.42598370E+3, 0.213E+3, 0.450E+2, 0.19311000E+1, 0.00000000E+0, 0.39367760E+3, + 0.213E+3, 0.460E+2, 0.19311000E+1, 0.00000000E+0, 0.32774720E+3, 0.213E+3, 0.470E+2, + 0.19311000E+1, 0.00000000E+0, 0.34529970E+3, 0.213E+3, 0.480E+2, 0.19311000E+1, 0.00000000E+0, + 0.43824740E+3, 0.213E+3, 0.490E+2, 0.19311000E+1, 0.00000000E+0, 0.40078940E+3, 0.213E+3, + 0.500E+2, 0.19311000E+1, 0.00000000E+0, 0.35278490E+3, 0.213E+3, 0.510E+2, 0.19311000E+1, + 0.00000000E+0, 0.32462780E+3, 0.213E+3, 0.520E+2, 0.19311000E+1, 0.00000000E+0, 0.29073780E+3, + 0.213E+3, 0.530E+2, 0.19311000E+1, 0.00000000E+0, 0.25886870E+3, 0.213E+3, 0.540E+2, + 0.19311000E+1, 0.00000000E+0, 0.12173141E+4, 0.213E+3, 0.550E+2, 0.19311000E+1, 0.00000000E+0, + 0.10987485E+4, 0.213E+3, 0.560E+2, 0.19311000E+1, 0.00000000E+0, 0.95554880E+3, 0.213E+3, + 0.570E+2, 0.19311000E+1, 0.00000000E+0, 0.41722080E+3, 0.213E+3, 0.580E+2, 0.19311000E+1, + 0.27991000E+1, 0.96973660E+3, 0.213E+3, 0.590E+2, 0.19311000E+1, 0.00000000E+0, 0.92960420E+3, + 0.213E+3, 0.600E+2, 0.19311000E+1, 0.00000000E+0, 0.90588600E+3, 0.213E+3, 0.610E+2, + 0.19311000E+1, 0.00000000E+0, 0.88413220E+3, 0.213E+3, 0.620E+2, 0.19311000E+1, 0.00000000E+0, + 0.86483220E+3, 0.213E+3, 0.630E+2, 0.19311000E+1, 0.00000000E+0, 0.67129000E+3, 0.213E+3, + 0.640E+2, 0.19311000E+1, 0.00000000E+0, 0.76813130E+3, 0.213E+3, 0.650E+2, 0.19311000E+1, + 0.00000000E+0, 0.73945380E+3, 0.213E+3, 0.660E+2, 0.19311000E+1, 0.00000000E+0, 0.77813230E+3, + 0.213E+3, 0.670E+2, 0.19311000E+1, 0.00000000E+0, 0.76146230E+3, 0.213E+3, 0.680E+2, + 0.19311000E+1, 0.00000000E+0, 0.74632100E+3, 0.213E+3, 0.690E+2, 0.19311000E+1, 0.00000000E+0, + 0.73802330E+3, 0.213E+3, 0.700E+2, 0.19311000E+1, 0.00000000E+0, 0.61647150E+3, 0.213E+3, + 0.710E+2, 0.19311000E+1, 0.00000000E+0, 0.60003080E+3, 0.213E+3, 0.720E+2, 0.19311000E+1, + 0.00000000E+0, 0.54344620E+3, 0.213E+3, 0.730E+2, 0.19311000E+1, 0.00000000E+0, 0.45533130E+3, + 0.213E+3, 0.740E+2, 0.19311000E+1, 0.00000000E+0, 0.46211940E+3, 0.213E+3, 0.750E+2, + 0.19311000E+1, 0.00000000E+0, 0.41585260E+3, 0.213E+3, 0.760E+2, 0.19311000E+1, 0.00000000E+0, + 0.37855240E+3, 0.213E+3, 0.770E+2, 0.19311000E+1, 0.00000000E+0, 0.31184500E+3, 0.213E+3, + 0.780E+2, 0.19311000E+1, 0.00000000E+0, 0.29037770E+3, 0.213E+3, 0.790E+2, 0.19311000E+1, + 0.00000000E+0, 0.29830060E+3, 0.213E+3, 0.800E+2, 0.19311000E+1, 0.00000000E+0, 0.44739490E+3, + 0.213E+3, 0.810E+2, 0.19311000E+1, 0.00000000E+0, 0.43398370E+3, 0.213E+3, 0.820E+2, + 0.19311000E+1, 0.00000000E+0, 0.39457020E+3, 0.213E+3, 0.830E+2, 0.19311000E+1, 0.00000000E+0, + 0.37381510E+3, 0.213E+3, 0.840E+2, 0.19311000E+1, 0.00000000E+0, 0.34202110E+3, 0.213E+3, + 0.850E+2, 0.19311000E+1, 0.00000000E+0, 0.31081620E+3, 0.213E+3, 0.860E+2, 0.19311000E+1, + 0.00000000E+0, 0.11397020E+4, 0.213E+3, 0.870E+2, 0.19311000E+1, 0.00000000E+0, 0.10803973E+4, + 0.213E+3, 0.880E+2, 0.19311000E+1, 0.00000000E+0, 0.94598830E+3, 0.213E+3, 0.890E+2, + 0.19311000E+1, 0.00000000E+0, 0.83976740E+3, 0.213E+3, 0.900E+2, 0.19311000E+1, 0.00000000E+0, + 0.83781840E+3, 0.213E+3, 0.910E+2, 0.19311000E+1, 0.00000000E+0, 0.81085380E+3, 0.213E+3, + 0.920E+2, 0.19311000E+1, 0.00000000E+0, 0.84069890E+3, 0.213E+3, 0.930E+2, 0.19311000E+1, + 0.00000000E+0, 0.81310950E+3, 0.213E+3, 0.940E+2, 0.19311000E+1, 0.00000000E+0, 0.43366100E+2, + 0.213E+3, 0.101E+3, 0.19311000E+1, 0.00000000E+0, 0.14644260E+3, 0.213E+3, 0.103E+3, + 0.19311000E+1, 0.98650000E+0, 0.18573100E+3, 0.213E+3, 0.104E+3, 0.19311000E+1, 0.98080000E+0, + 0.13828380E+3, 0.213E+3, 0.105E+3, 0.19311000E+1, 0.97060000E+0, 0.10220950E+3, 0.213E+3, + 0.106E+3, 0.19311000E+1, 0.98680000E+0, 0.69450100E+2, 0.213E+3, 0.107E+3, 0.19311000E+1, + 0.99440000E+0, 0.49531900E+2, 0.213E+3, 0.108E+3, 0.19311000E+1, 0.99250000E+0, 0.33126500E+2, + 0.213E+3, 0.109E+3, 0.19311000E+1, 0.99820000E+0, 0.21467960E+3, 0.213E+3, 0.111E+3, + 0.19311000E+1, 0.96840000E+0, 0.33305050E+3, 0.213E+3, 0.112E+3, 0.19311000E+1, 0.96280000E+0, + 0.33353410E+3, 0.213E+3, 0.113E+3, 0.19311000E+1, 0.96480000E+0, 0.26297700E+3, 0.213E+3, + 0.114E+3, 0.19311000E+1, 0.95070000E+0, 0.21192050E+3, 0.213E+3, 0.115E+3, 0.19311000E+1, + 0.99470000E+0, 0.17693650E+3, 0.213E+3, 0.116E+3, 0.19311000E+1, 0.99480000E+0, 0.14258060E+3, + 0.213E+3, 0.117E+3, 0.19311000E+1, 0.99720000E+0, 0.29160280E+3, 0.213E+3, 0.119E+3, + 0.19311000E+1, 0.97670000E+0, 0.57547210E+3, 0.213E+3, 0.120E+3, 0.19311000E+1, 0.98310000E+0, + 0.28808340E+3, 0.213E+3, 0.121E+3, 0.19311000E+1, 0.18627000E+1, 0.27780740E+3, 0.213E+3, + 0.122E+3, 0.19311000E+1, 0.18299000E+1, 0.27224960E+3, 0.213E+3, 0.123E+3, 0.19311000E+1, + 0.19138000E+1, 0.27016230E+3, 0.213E+3, 0.124E+3, 0.19311000E+1, 0.18269000E+1, 0.24655880E+3, + 0.213E+3, 0.125E+3, 0.19311000E+1, 0.16406000E+1, 0.22743270E+3, 0.213E+3, 0.126E+3, + 0.19311000E+1, 0.16483000E+1, 0.21683930E+3, 0.213E+3, 0.127E+3, 0.19311000E+1, 0.17149000E+1, + 0.21211940E+3, 0.213E+3, 0.128E+3, 0.19311000E+1, 0.17937000E+1, 0.21090190E+3, 0.213E+3, + 0.129E+3, 0.19311000E+1, 0.95760000E+0, 0.19559730E+3, 0.213E+3, 0.130E+3, 0.19311000E+1, + 0.19419000E+1, 0.32851000E+3, 0.213E+3, 0.131E+3, 0.19311000E+1, 0.96010000E+0, 0.28437390E+3, + 0.213E+3, 0.132E+3, 0.19311000E+1, 0.94340000E+0, 0.25181270E+3, 0.213E+3, 0.133E+3, + 0.19311000E+1, 0.98890000E+0, 0.22779820E+3, 0.213E+3, 0.134E+3, 0.19311000E+1, 0.99010000E+0, + 0.19844730E+3, 0.213E+3, 0.135E+3, 0.19311000E+1, 0.99740000E+0, 0.34649590E+3, 0.213E+3, + 0.137E+3, 0.19311000E+1, 0.97380000E+0, 0.70067460E+3, 0.213E+3, 0.138E+3, 0.19311000E+1, + 0.98010000E+0, 0.52422670E+3, 0.213E+3, 0.139E+3, 0.19311000E+1, 0.19153000E+1, 0.38103090E+3, + 0.213E+3, 0.140E+3, 0.19311000E+1, 0.19355000E+1, 0.38476780E+3, 0.213E+3, 0.141E+3, + 0.19311000E+1, 0.19545000E+1, 0.35735760E+3, 0.213E+3, 0.142E+3, 0.19311000E+1, 0.19420000E+1, + 0.40520110E+3, 0.213E+3, 0.143E+3, 0.19311000E+1, 0.16682000E+1, 0.30854590E+3, 0.213E+3, + 0.144E+3, 0.19311000E+1, 0.18584000E+1, 0.28812910E+3, 0.213E+3, 0.145E+3, 0.19311000E+1, + 0.19003000E+1, 0.26684840E+3, 0.213E+3, 0.146E+3, 0.19311000E+1, 0.18630000E+1, 0.25840650E+3, + 0.213E+3, 0.147E+3, 0.19311000E+1, 0.96790000E+0, 0.25422360E+3, 0.213E+3, 0.148E+3, + 0.19311000E+1, 0.19539000E+1, 0.41600330E+3, 0.213E+3, 0.149E+3, 0.19311000E+1, 0.96330000E+0, + 0.37187790E+3, 0.213E+3, 0.150E+3, 0.19311000E+1, 0.95140000E+0, 0.34513030E+3, 0.213E+3, + 0.151E+3, 0.19311000E+1, 0.97490000E+0, 0.32423490E+3, 0.213E+3, 0.152E+3, 0.19311000E+1, + 0.98110000E+0, 0.29353370E+3, 0.213E+3, 0.153E+3, 0.19311000E+1, 0.99680000E+0, 0.40637240E+3, + 0.213E+3, 0.155E+3, 0.19311000E+1, 0.99090000E+0, 0.91183210E+3, 0.213E+3, 0.156E+3, + 0.19311000E+1, 0.97970000E+0, 0.66459040E+3, 0.213E+3, 0.157E+3, 0.19311000E+1, 0.19373000E+1, + 0.40429100E+3, 0.213E+3, 0.159E+3, 0.19311000E+1, 0.29425000E+1, 0.39585770E+3, 0.213E+3, + 0.160E+3, 0.19311000E+1, 0.29455000E+1, 0.38302380E+3, 0.213E+3, 0.161E+3, 0.19311000E+1, + 0.29413000E+1, 0.38563610E+3, 0.213E+3, 0.162E+3, 0.19311000E+1, 0.29300000E+1, 0.37369250E+3, + 0.213E+3, 0.163E+3, 0.19311000E+1, 0.18286000E+1, 0.38845580E+3, 0.213E+3, 0.164E+3, + 0.19311000E+1, 0.28732000E+1, 0.36415710E+3, 0.213E+3, 0.165E+3, 0.19311000E+1, 0.29086000E+1, + 0.37174820E+3, 0.213E+3, 0.166E+3, 0.19311000E+1, 0.28965000E+1, 0.34511820E+3, 0.213E+3, + 0.167E+3, 0.19311000E+1, 0.29242000E+1, 0.33507830E+3, 0.213E+3, 0.168E+3, 0.19311000E+1, + 0.29282000E+1, 0.33312390E+3, 0.213E+3, 0.169E+3, 0.19311000E+1, 0.29246000E+1, 0.35137350E+3, + 0.213E+3, 0.170E+3, 0.19311000E+1, 0.28482000E+1, 0.32173170E+3, 0.213E+3, 0.171E+3, + 0.19311000E+1, 0.29219000E+1, 0.44538150E+3, 0.213E+3, 0.172E+3, 0.19311000E+1, 0.19254000E+1, + 0.41012060E+3, 0.213E+3, 0.173E+3, 0.19311000E+1, 0.19459000E+1, 0.37108910E+3, 0.213E+3, + 0.174E+3, 0.19311000E+1, 0.19292000E+1, 0.37797370E+3, 0.213E+3, 0.175E+3, 0.19311000E+1, + 0.18104000E+1, 0.32478730E+3, 0.213E+3, 0.176E+3, 0.19311000E+1, 0.18858000E+1, 0.30440310E+3, + 0.213E+3, 0.177E+3, 0.19311000E+1, 0.18648000E+1, 0.29003910E+3, 0.213E+3, 0.178E+3, + 0.19311000E+1, 0.19188000E+1, 0.27707890E+3, 0.213E+3, 0.179E+3, 0.19311000E+1, 0.98460000E+0, + 0.26611650E+3, 0.213E+3, 0.180E+3, 0.19311000E+1, 0.19896000E+1, 0.44475260E+3, 0.213E+3, + 0.181E+3, 0.19311000E+1, 0.92670000E+0, 0.40065540E+3, 0.213E+3, 0.182E+3, 0.19311000E+1, + 0.93830000E+0, 0.38605640E+3, 0.213E+3, 0.183E+3, 0.19311000E+1, 0.98200000E+0, 0.37356510E+3, + 0.213E+3, 0.184E+3, 0.19311000E+1, 0.98150000E+0, 0.34618570E+3, 0.213E+3, 0.185E+3, + 0.19311000E+1, 0.99540000E+0, 0.45742940E+3, 0.213E+3, 0.187E+3, 0.19311000E+1, 0.97050000E+0, + 0.90069660E+3, 0.213E+3, 0.188E+3, 0.19311000E+1, 0.96620000E+0, 0.47874300E+3, 0.213E+3, + 0.189E+3, 0.19311000E+1, 0.29070000E+1, 0.55821910E+3, 0.213E+3, 0.190E+3, 0.19311000E+1, + 0.28844000E+1, 0.49675560E+3, 0.213E+3, 0.191E+3, 0.19311000E+1, 0.28738000E+1, 0.43513510E+3, + 0.213E+3, 0.192E+3, 0.19311000E+1, 0.28878000E+1, 0.41782680E+3, 0.213E+3, 0.193E+3, + 0.19311000E+1, 0.29095000E+1, 0.51393660E+3, 0.213E+3, 0.194E+3, 0.19311000E+1, 0.19209000E+1, + 0.11812330E+3, 0.213E+3, 0.204E+3, 0.19311000E+1, 0.19697000E+1, 0.11524800E+3, 0.213E+3, + 0.205E+3, 0.19311000E+1, 0.19441000E+1, 0.82430300E+2, 0.213E+3, 0.206E+3, 0.19311000E+1, + 0.19985000E+1, 0.65016400E+2, 0.213E+3, 0.207E+3, 0.19311000E+1, 0.20143000E+1, 0.43378800E+2, + 0.213E+3, 0.208E+3, 0.19311000E+1, 0.19887000E+1, 0.21219710E+3, 0.213E+3, 0.212E+3, + 0.19311000E+1, 0.19496000E+1, 0.25674970E+3, 0.213E+3, 0.213E+3, 0.19311000E+1, 0.19311000E+1, + 0.25702100E+2, 0.214E+3, 0.100E+1, 0.19435000E+1, 0.91180000E+0, 0.16580600E+2, 0.214E+3, + 0.200E+1, 0.19435000E+1, 0.00000000E+0, 0.41243230E+3, 0.214E+3, 0.300E+1, 0.19435000E+1, + 0.00000000E+0, 0.23689910E+3, 0.214E+3, 0.400E+1, 0.19435000E+1, 0.00000000E+0, 0.15801650E+3, + 0.214E+3, 0.500E+1, 0.19435000E+1, 0.00000000E+0, 0.10557130E+3, 0.214E+3, 0.600E+1, + 0.19435000E+1, 0.00000000E+0, 0.73007300E+2, 0.214E+3, 0.700E+1, 0.19435000E+1, 0.00000000E+0, + 0.54744300E+2, 0.214E+3, 0.800E+1, 0.19435000E+1, 0.00000000E+0, 0.41072800E+2, 0.214E+3, + 0.900E+1, 0.19435000E+1, 0.00000000E+0, 0.31310700E+2, 0.214E+3, 0.100E+2, 0.19435000E+1, + 0.00000000E+0, 0.49265620E+3, 0.214E+3, 0.110E+2, 0.19435000E+1, 0.00000000E+0, 0.37783600E+3, + 0.214E+3, 0.120E+2, 0.19435000E+1, 0.00000000E+0, 0.34711540E+3, 0.214E+3, 0.130E+2, + 0.19435000E+1, 0.00000000E+0, 0.27188440E+3, 0.214E+3, 0.140E+2, 0.19435000E+1, 0.00000000E+0, + 0.21048400E+3, 0.214E+3, 0.150E+2, 0.19435000E+1, 0.00000000E+0, 0.17357980E+3, 0.214E+3, + 0.160E+2, 0.19435000E+1, 0.00000000E+0, 0.14078240E+3, 0.214E+3, 0.170E+2, 0.19435000E+1, + 0.00000000E+0, 0.11433480E+3, 0.214E+3, 0.180E+2, 0.19435000E+1, 0.00000000E+0, 0.80549240E+3, + 0.214E+3, 0.190E+2, 0.19435000E+1, 0.00000000E+0, 0.66409770E+3, 0.214E+3, 0.200E+2, + 0.19435000E+1, 0.00000000E+0, 0.54821150E+3, 0.214E+3, 0.210E+2, 0.19435000E+1, 0.00000000E+0, + 0.52845930E+3, 0.214E+3, 0.220E+2, 0.19435000E+1, 0.00000000E+0, 0.48345990E+3, 0.214E+3, + 0.230E+2, 0.19435000E+1, 0.00000000E+0, 0.37993850E+3, 0.214E+3, 0.240E+2, 0.19435000E+1, + 0.00000000E+0, 0.41561120E+3, 0.214E+3, 0.250E+2, 0.19435000E+1, 0.00000000E+0, 0.32531170E+3, + 0.214E+3, 0.260E+2, 0.19435000E+1, 0.00000000E+0, 0.34494790E+3, 0.214E+3, 0.270E+2, + 0.19435000E+1, 0.00000000E+0, 0.35576410E+3, 0.214E+3, 0.280E+2, 0.19435000E+1, 0.00000000E+0, + 0.27189110E+3, 0.214E+3, 0.290E+2, 0.19435000E+1, 0.00000000E+0, 0.27896960E+3, 0.214E+3, + 0.300E+2, 0.19435000E+1, 0.00000000E+0, 0.33128490E+3, 0.214E+3, 0.310E+2, 0.19435000E+1, + 0.00000000E+0, 0.29090920E+3, 0.214E+3, 0.320E+2, 0.19435000E+1, 0.00000000E+0, 0.24673790E+3, + 0.214E+3, 0.330E+2, 0.19435000E+1, 0.00000000E+0, 0.22038060E+3, 0.214E+3, 0.340E+2, + 0.19435000E+1, 0.00000000E+0, 0.19179920E+3, 0.214E+3, 0.350E+2, 0.19435000E+1, 0.00000000E+0, + 0.16582300E+3, 0.214E+3, 0.360E+2, 0.19435000E+1, 0.00000000E+0, 0.90177390E+3, 0.214E+3, + 0.370E+2, 0.19435000E+1, 0.00000000E+0, 0.79067650E+3, 0.214E+3, 0.380E+2, 0.19435000E+1, + 0.00000000E+0, 0.69120290E+3, 0.214E+3, 0.390E+2, 0.19435000E+1, 0.00000000E+0, 0.62007920E+3, + 0.214E+3, 0.400E+2, 0.19435000E+1, 0.00000000E+0, 0.56449010E+3, 0.214E+3, 0.410E+2, + 0.19435000E+1, 0.00000000E+0, 0.43396780E+3, 0.214E+3, 0.420E+2, 0.19435000E+1, 0.00000000E+0, + 0.48500980E+3, 0.214E+3, 0.430E+2, 0.19435000E+1, 0.00000000E+0, 0.36773060E+3, 0.214E+3, + 0.440E+2, 0.19435000E+1, 0.00000000E+0, 0.40262390E+3, 0.214E+3, 0.450E+2, 0.19435000E+1, + 0.00000000E+0, 0.37288980E+3, 0.214E+3, 0.460E+2, 0.19435000E+1, 0.00000000E+0, 0.31011860E+3, + 0.214E+3, 0.470E+2, 0.19435000E+1, 0.00000000E+0, 0.32796220E+3, 0.214E+3, 0.480E+2, + 0.19435000E+1, 0.00000000E+0, 0.41337540E+3, 0.214E+3, 0.490E+2, 0.19435000E+1, 0.00000000E+0, + 0.38122300E+3, 0.214E+3, 0.500E+2, 0.19435000E+1, 0.00000000E+0, 0.33831890E+3, 0.214E+3, + 0.510E+2, 0.19435000E+1, 0.00000000E+0, 0.31287500E+3, 0.214E+3, 0.520E+2, 0.19435000E+1, + 0.00000000E+0, 0.28172560E+3, 0.214E+3, 0.530E+2, 0.19435000E+1, 0.00000000E+0, 0.25213370E+3, + 0.214E+3, 0.540E+2, 0.19435000E+1, 0.00000000E+0, 0.10981239E+4, 0.214E+3, 0.550E+2, + 0.19435000E+1, 0.00000000E+0, 0.10078503E+4, 0.214E+3, 0.560E+2, 0.19435000E+1, 0.00000000E+0, + 0.88388150E+3, 0.214E+3, 0.570E+2, 0.19435000E+1, 0.00000000E+0, 0.39958530E+3, 0.214E+3, + 0.580E+2, 0.19435000E+1, 0.27991000E+1, 0.89190420E+3, 0.214E+3, 0.590E+2, 0.19435000E+1, + 0.00000000E+0, 0.85628170E+3, 0.214E+3, 0.600E+2, 0.19435000E+1, 0.00000000E+0, 0.83476410E+3, + 0.214E+3, 0.610E+2, 0.19435000E+1, 0.00000000E+0, 0.81499180E+3, 0.214E+3, 0.620E+2, + 0.19435000E+1, 0.00000000E+0, 0.79746090E+3, 0.214E+3, 0.630E+2, 0.19435000E+1, 0.00000000E+0, + 0.62473210E+3, 0.214E+3, 0.640E+2, 0.19435000E+1, 0.00000000E+0, 0.70500060E+3, 0.214E+3, + 0.650E+2, 0.19435000E+1, 0.00000000E+0, 0.67965440E+3, 0.214E+3, 0.660E+2, 0.19435000E+1, + 0.00000000E+0, 0.71903230E+3, 0.214E+3, 0.670E+2, 0.19435000E+1, 0.00000000E+0, 0.70378810E+3, + 0.214E+3, 0.680E+2, 0.19435000E+1, 0.00000000E+0, 0.69001840E+3, 0.214E+3, 0.690E+2, + 0.19435000E+1, 0.00000000E+0, 0.68208270E+3, 0.214E+3, 0.700E+2, 0.19435000E+1, 0.00000000E+0, + 0.57324330E+3, 0.214E+3, 0.710E+2, 0.19435000E+1, 0.00000000E+0, 0.56278660E+3, 0.214E+3, + 0.720E+2, 0.19435000E+1, 0.00000000E+0, 0.51235040E+3, 0.214E+3, 0.730E+2, 0.19435000E+1, + 0.00000000E+0, 0.43105180E+3, 0.214E+3, 0.740E+2, 0.19435000E+1, 0.00000000E+0, 0.43832130E+3, + 0.214E+3, 0.750E+2, 0.19435000E+1, 0.00000000E+0, 0.39619890E+3, 0.214E+3, 0.760E+2, + 0.19435000E+1, 0.00000000E+0, 0.36196280E+3, 0.214E+3, 0.770E+2, 0.19435000E+1, 0.00000000E+0, + 0.29935640E+3, 0.214E+3, 0.780E+2, 0.19435000E+1, 0.00000000E+0, 0.27918270E+3, 0.214E+3, + 0.790E+2, 0.19435000E+1, 0.00000000E+0, 0.28724760E+3, 0.214E+3, 0.800E+2, 0.19435000E+1, + 0.00000000E+0, 0.42296870E+3, 0.214E+3, 0.810E+2, 0.19435000E+1, 0.00000000E+0, 0.41296020E+3, + 0.214E+3, 0.820E+2, 0.19435000E+1, 0.00000000E+0, 0.37820780E+3, 0.214E+3, 0.830E+2, + 0.19435000E+1, 0.00000000E+0, 0.35984120E+3, 0.214E+3, 0.840E+2, 0.19435000E+1, 0.00000000E+0, + 0.33092490E+3, 0.214E+3, 0.850E+2, 0.19435000E+1, 0.00000000E+0, 0.30214620E+3, 0.214E+3, + 0.860E+2, 0.19435000E+1, 0.00000000E+0, 0.10353860E+4, 0.214E+3, 0.870E+2, 0.19435000E+1, + 0.00000000E+0, 0.99537320E+3, 0.214E+3, 0.880E+2, 0.19435000E+1, 0.00000000E+0, 0.87825500E+3, + 0.214E+3, 0.890E+2, 0.19435000E+1, 0.00000000E+0, 0.78653170E+3, 0.214E+3, 0.900E+2, + 0.19435000E+1, 0.00000000E+0, 0.78131330E+3, 0.214E+3, 0.910E+2, 0.19435000E+1, 0.00000000E+0, + 0.75635270E+3, 0.214E+3, 0.920E+2, 0.19435000E+1, 0.00000000E+0, 0.77996360E+3, 0.214E+3, + 0.930E+2, 0.19435000E+1, 0.00000000E+0, 0.75512290E+3, 0.214E+3, 0.940E+2, 0.19435000E+1, + 0.00000000E+0, 0.41822200E+2, 0.214E+3, 0.101E+3, 0.19435000E+1, 0.00000000E+0, 0.13744580E+3, + 0.214E+3, 0.103E+3, 0.19435000E+1, 0.98650000E+0, 0.17493150E+3, 0.214E+3, 0.104E+3, + 0.19435000E+1, 0.98080000E+0, 0.13248310E+3, 0.214E+3, 0.105E+3, 0.19435000E+1, 0.97060000E+0, + 0.98927800E+2, 0.214E+3, 0.106E+3, 0.19435000E+1, 0.98680000E+0, 0.67982000E+2, 0.214E+3, + 0.107E+3, 0.19435000E+1, 0.99440000E+0, 0.48939100E+2, 0.214E+3, 0.108E+3, 0.19435000E+1, + 0.99250000E+0, 0.33107500E+2, 0.214E+3, 0.109E+3, 0.19435000E+1, 0.99820000E+0, 0.20080380E+3, + 0.214E+3, 0.111E+3, 0.19435000E+1, 0.96840000E+0, 0.31098970E+3, 0.214E+3, 0.112E+3, + 0.19435000E+1, 0.96280000E+0, 0.31418090E+3, 0.214E+3, 0.113E+3, 0.19435000E+1, 0.96480000E+0, + 0.25093760E+3, 0.214E+3, 0.114E+3, 0.19435000E+1, 0.95070000E+0, 0.20419980E+3, 0.214E+3, + 0.115E+3, 0.19435000E+1, 0.99470000E+0, 0.17165370E+3, 0.214E+3, 0.116E+3, 0.19435000E+1, + 0.99480000E+0, 0.13931250E+3, 0.214E+3, 0.117E+3, 0.19435000E+1, 0.99720000E+0, 0.27480560E+3, + 0.214E+3, 0.119E+3, 0.19435000E+1, 0.97670000E+0, 0.52989460E+3, 0.214E+3, 0.120E+3, + 0.19435000E+1, 0.98310000E+0, 0.27434930E+3, 0.214E+3, 0.121E+3, 0.19435000E+1, 0.18627000E+1, + 0.26463020E+3, 0.214E+3, 0.122E+3, 0.19435000E+1, 0.18299000E+1, 0.25929250E+3, 0.214E+3, + 0.123E+3, 0.19435000E+1, 0.19138000E+1, 0.25696820E+3, 0.214E+3, 0.124E+3, 0.19435000E+1, + 0.18269000E+1, 0.23596760E+3, 0.214E+3, 0.125E+3, 0.19435000E+1, 0.16406000E+1, 0.21806460E+3, + 0.214E+3, 0.126E+3, 0.19435000E+1, 0.16483000E+1, 0.20790840E+3, 0.214E+3, 0.127E+3, + 0.19435000E+1, 0.17149000E+1, 0.20327770E+3, 0.214E+3, 0.128E+3, 0.19435000E+1, 0.17937000E+1, + 0.20115730E+3, 0.214E+3, 0.129E+3, 0.19435000E+1, 0.95760000E+0, 0.18816130E+3, 0.214E+3, + 0.130E+3, 0.19435000E+1, 0.19419000E+1, 0.31077040E+3, 0.214E+3, 0.131E+3, 0.19435000E+1, + 0.96010000E+0, 0.27174380E+3, 0.214E+3, 0.132E+3, 0.19435000E+1, 0.94340000E+0, 0.24243590E+3, + 0.214E+3, 0.133E+3, 0.19435000E+1, 0.98890000E+0, 0.22046240E+3, 0.214E+3, 0.134E+3, + 0.19435000E+1, 0.99010000E+0, 0.19317380E+3, 0.214E+3, 0.135E+3, 0.19435000E+1, 0.99740000E+0, + 0.32730800E+3, 0.214E+3, 0.137E+3, 0.19435000E+1, 0.97380000E+0, 0.64440170E+3, 0.214E+3, + 0.138E+3, 0.19435000E+1, 0.98010000E+0, 0.49021540E+3, 0.214E+3, 0.139E+3, 0.19435000E+1, + 0.19153000E+1, 0.36256720E+3, 0.214E+3, 0.140E+3, 0.19435000E+1, 0.19355000E+1, 0.36609840E+3, + 0.214E+3, 0.141E+3, 0.19435000E+1, 0.19545000E+1, 0.34073580E+3, 0.214E+3, 0.142E+3, + 0.19435000E+1, 0.19420000E+1, 0.38317340E+3, 0.214E+3, 0.143E+3, 0.19435000E+1, 0.16682000E+1, + 0.29596310E+3, 0.214E+3, 0.144E+3, 0.19435000E+1, 0.18584000E+1, 0.27654270E+3, 0.214E+3, + 0.145E+3, 0.19435000E+1, 0.19003000E+1, 0.25641330E+3, 0.214E+3, 0.146E+3, 0.19435000E+1, + 0.18630000E+1, 0.24807500E+3, 0.214E+3, 0.147E+3, 0.19435000E+1, 0.96790000E+0, 0.24516140E+3, + 0.214E+3, 0.148E+3, 0.19435000E+1, 0.19539000E+1, 0.39356170E+3, 0.214E+3, 0.149E+3, + 0.19435000E+1, 0.96330000E+0, 0.35486870E+3, 0.214E+3, 0.150E+3, 0.19435000E+1, 0.95140000E+0, + 0.33134490E+3, 0.214E+3, 0.151E+3, 0.19435000E+1, 0.97490000E+0, 0.31259390E+3, 0.214E+3, + 0.152E+3, 0.19435000E+1, 0.98110000E+0, 0.28440960E+3, 0.214E+3, 0.153E+3, 0.19435000E+1, + 0.99680000E+0, 0.38643270E+3, 0.214E+3, 0.155E+3, 0.19435000E+1, 0.99090000E+0, 0.83548010E+3, + 0.214E+3, 0.156E+3, 0.19435000E+1, 0.97970000E+0, 0.62051600E+3, 0.214E+3, 0.157E+3, + 0.19435000E+1, 0.19373000E+1, 0.38738880E+3, 0.214E+3, 0.159E+3, 0.19435000E+1, 0.29425000E+1, + 0.37934290E+3, 0.214E+3, 0.160E+3, 0.19435000E+1, 0.29455000E+1, 0.36719680E+3, 0.214E+3, + 0.161E+3, 0.19435000E+1, 0.29413000E+1, 0.36922530E+3, 0.214E+3, 0.162E+3, 0.19435000E+1, + 0.29300000E+1, 0.35636770E+3, 0.214E+3, 0.163E+3, 0.19435000E+1, 0.18286000E+1, 0.37178190E+3, + 0.214E+3, 0.164E+3, 0.19435000E+1, 0.28732000E+1, 0.34890330E+3, 0.214E+3, 0.165E+3, + 0.19435000E+1, 0.29086000E+1, 0.35535340E+3, 0.214E+3, 0.166E+3, 0.19435000E+1, 0.28965000E+1, + 0.33101430E+3, 0.214E+3, 0.167E+3, 0.19435000E+1, 0.29242000E+1, 0.32151310E+3, 0.214E+3, + 0.168E+3, 0.19435000E+1, 0.29282000E+1, 0.31953220E+3, 0.214E+3, 0.169E+3, 0.19435000E+1, + 0.29246000E+1, 0.33642390E+3, 0.214E+3, 0.170E+3, 0.19435000E+1, 0.28482000E+1, 0.30879300E+3, + 0.214E+3, 0.171E+3, 0.19435000E+1, 0.29219000E+1, 0.42124260E+3, 0.214E+3, 0.172E+3, + 0.19435000E+1, 0.19254000E+1, 0.38987130E+3, 0.214E+3, 0.173E+3, 0.19435000E+1, 0.19459000E+1, + 0.35462710E+3, 0.214E+3, 0.174E+3, 0.19435000E+1, 0.19292000E+1, 0.35955640E+3, 0.214E+3, + 0.175E+3, 0.19435000E+1, 0.18104000E+1, 0.31268360E+3, 0.214E+3, 0.176E+3, 0.19435000E+1, + 0.18858000E+1, 0.29359280E+3, 0.214E+3, 0.177E+3, 0.19435000E+1, 0.18648000E+1, 0.28003950E+3, + 0.214E+3, 0.178E+3, 0.19435000E+1, 0.19188000E+1, 0.26748530E+3, 0.214E+3, 0.179E+3, + 0.19435000E+1, 0.98460000E+0, 0.25798760E+3, 0.214E+3, 0.180E+3, 0.19435000E+1, 0.19896000E+1, + 0.42147770E+3, 0.214E+3, 0.181E+3, 0.19435000E+1, 0.92670000E+0, 0.38292490E+3, 0.214E+3, + 0.182E+3, 0.19435000E+1, 0.93830000E+0, 0.37065420E+3, 0.214E+3, 0.183E+3, 0.19435000E+1, + 0.98200000E+0, 0.35983420E+3, 0.214E+3, 0.184E+3, 0.19435000E+1, 0.98150000E+0, 0.33497230E+3, + 0.214E+3, 0.185E+3, 0.19435000E+1, 0.99540000E+0, 0.43520780E+3, 0.214E+3, 0.187E+3, + 0.19435000E+1, 0.97050000E+0, 0.83000970E+3, 0.214E+3, 0.188E+3, 0.19435000E+1, 0.96620000E+0, + 0.45862090E+3, 0.214E+3, 0.189E+3, 0.19435000E+1, 0.29070000E+1, 0.53065480E+3, 0.214E+3, + 0.190E+3, 0.19435000E+1, 0.28844000E+1, 0.47329240E+3, 0.214E+3, 0.191E+3, 0.19435000E+1, + 0.28738000E+1, 0.41725880E+3, 0.214E+3, 0.192E+3, 0.19435000E+1, 0.28878000E+1, 0.40119370E+3, + 0.214E+3, 0.193E+3, 0.19435000E+1, 0.29095000E+1, 0.48568000E+3, 0.214E+3, 0.194E+3, + 0.19435000E+1, 0.19209000E+1, 0.11328200E+3, 0.214E+3, 0.204E+3, 0.19435000E+1, 0.19697000E+1, + 0.11084470E+3, 0.214E+3, 0.205E+3, 0.19435000E+1, 0.19441000E+1, 0.80261900E+2, 0.214E+3, + 0.206E+3, 0.19435000E+1, 0.19985000E+1, 0.63715100E+2, 0.214E+3, 0.207E+3, 0.19435000E+1, + 0.20143000E+1, 0.42967900E+2, 0.214E+3, 0.208E+3, 0.19435000E+1, 0.19887000E+1, 0.20177580E+3, + 0.214E+3, 0.212E+3, 0.19435000E+1, 0.19496000E+1, 0.24384070E+3, 0.214E+3, 0.213E+3, + 0.19435000E+1, 0.19311000E+1, 0.23312540E+3, 0.214E+3, 0.214E+3, 0.19435000E+1, 0.19435000E+1, + 0.22742900E+2, 0.215E+3, 0.100E+1, 0.20102000E+1, 0.91180000E+0, 0.15024500E+2, 0.215E+3, + 0.200E+1, 0.20102000E+1, 0.00000000E+0, 0.33746620E+3, 0.215E+3, 0.300E+1, 0.20102000E+1, + 0.00000000E+0, 0.19995760E+3, 0.215E+3, 0.400E+1, 0.20102000E+1, 0.00000000E+0, 0.13624020E+3, + 0.215E+3, 0.500E+1, 0.20102000E+1, 0.00000000E+0, 0.92608000E+2, 0.215E+3, 0.600E+1, + 0.20102000E+1, 0.00000000E+0, 0.64920900E+2, 0.215E+3, 0.700E+1, 0.20102000E+1, 0.00000000E+0, + 0.49172900E+2, 0.215E+3, 0.800E+1, 0.20102000E+1, 0.00000000E+0, 0.37220500E+2, 0.215E+3, + 0.900E+1, 0.20102000E+1, 0.00000000E+0, 0.28580500E+2, 0.215E+3, 0.100E+2, 0.20102000E+1, + 0.00000000E+0, 0.40398020E+3, 0.215E+3, 0.110E+2, 0.20102000E+1, 0.00000000E+0, 0.31708240E+3, + 0.215E+3, 0.120E+2, 0.20102000E+1, 0.00000000E+0, 0.29434030E+3, 0.215E+3, 0.130E+2, + 0.20102000E+1, 0.00000000E+0, 0.23387520E+3, 0.215E+3, 0.140E+2, 0.20102000E+1, 0.00000000E+0, + 0.18343220E+3, 0.215E+3, 0.150E+2, 0.20102000E+1, 0.00000000E+0, 0.15264700E+3, 0.215E+3, + 0.160E+2, 0.20102000E+1, 0.00000000E+0, 0.12491620E+3, 0.215E+3, 0.170E+2, 0.20102000E+1, + 0.00000000E+0, 0.10227010E+3, 0.215E+3, 0.180E+2, 0.20102000E+1, 0.00000000E+0, 0.65923940E+3, + 0.215E+3, 0.190E+2, 0.20102000E+1, 0.00000000E+0, 0.55248890E+3, 0.215E+3, 0.200E+2, + 0.20102000E+1, 0.00000000E+0, 0.45796080E+3, 0.215E+3, 0.210E+2, 0.20102000E+1, 0.00000000E+0, + 0.44347230E+3, 0.215E+3, 0.220E+2, 0.20102000E+1, 0.00000000E+0, 0.40676720E+3, 0.215E+3, + 0.230E+2, 0.20102000E+1, 0.00000000E+0, 0.32027340E+3, 0.215E+3, 0.240E+2, 0.20102000E+1, + 0.00000000E+0, 0.35102240E+3, 0.215E+3, 0.250E+2, 0.20102000E+1, 0.00000000E+0, 0.27541380E+3, + 0.215E+3, 0.260E+2, 0.20102000E+1, 0.00000000E+0, 0.29316610E+3, 0.215E+3, 0.270E+2, + 0.20102000E+1, 0.00000000E+0, 0.30149740E+3, 0.215E+3, 0.280E+2, 0.20102000E+1, 0.00000000E+0, + 0.23090910E+3, 0.215E+3, 0.290E+2, 0.20102000E+1, 0.00000000E+0, 0.23850630E+3, 0.215E+3, + 0.300E+2, 0.20102000E+1, 0.00000000E+0, 0.28238710E+3, 0.215E+3, 0.310E+2, 0.20102000E+1, + 0.00000000E+0, 0.25064010E+3, 0.215E+3, 0.320E+2, 0.20102000E+1, 0.00000000E+0, 0.21483630E+3, + 0.215E+3, 0.330E+2, 0.20102000E+1, 0.00000000E+0, 0.19324100E+3, 0.215E+3, 0.340E+2, + 0.20102000E+1, 0.00000000E+0, 0.16943130E+3, 0.215E+3, 0.350E+2, 0.20102000E+1, 0.00000000E+0, + 0.14751930E+3, 0.215E+3, 0.360E+2, 0.20102000E+1, 0.00000000E+0, 0.73972690E+3, 0.215E+3, + 0.370E+2, 0.20102000E+1, 0.00000000E+0, 0.65778770E+3, 0.215E+3, 0.380E+2, 0.20102000E+1, + 0.00000000E+0, 0.57951050E+3, 0.215E+3, 0.390E+2, 0.20102000E+1, 0.00000000E+0, 0.52257210E+3, + 0.215E+3, 0.400E+2, 0.20102000E+1, 0.00000000E+0, 0.47747720E+3, 0.215E+3, 0.410E+2, + 0.20102000E+1, 0.00000000E+0, 0.36967940E+3, 0.215E+3, 0.420E+2, 0.20102000E+1, 0.00000000E+0, + 0.41204130E+3, 0.215E+3, 0.430E+2, 0.20102000E+1, 0.00000000E+0, 0.31482970E+3, 0.215E+3, + 0.440E+2, 0.20102000E+1, 0.00000000E+0, 0.34429870E+3, 0.215E+3, 0.450E+2, 0.20102000E+1, + 0.00000000E+0, 0.31960770E+3, 0.215E+3, 0.460E+2, 0.20102000E+1, 0.00000000E+0, 0.26595030E+3, + 0.215E+3, 0.470E+2, 0.20102000E+1, 0.00000000E+0, 0.28194690E+3, 0.215E+3, 0.480E+2, + 0.20102000E+1, 0.00000000E+0, 0.35272470E+3, 0.215E+3, 0.490E+2, 0.20102000E+1, 0.00000000E+0, + 0.32794600E+3, 0.215E+3, 0.500E+2, 0.20102000E+1, 0.00000000E+0, 0.29361680E+3, 0.215E+3, + 0.510E+2, 0.20102000E+1, 0.00000000E+0, 0.27309200E+3, 0.215E+3, 0.520E+2, 0.20102000E+1, + 0.00000000E+0, 0.24747320E+3, 0.215E+3, 0.530E+2, 0.20102000E+1, 0.00000000E+0, 0.22286600E+3, + 0.215E+3, 0.540E+2, 0.20102000E+1, 0.00000000E+0, 0.90172930E+3, 0.215E+3, 0.550E+2, + 0.20102000E+1, 0.00000000E+0, 0.83699700E+3, 0.215E+3, 0.560E+2, 0.20102000E+1, 0.00000000E+0, + 0.73956740E+3, 0.215E+3, 0.570E+2, 0.20102000E+1, 0.00000000E+0, 0.34646750E+3, 0.215E+3, + 0.580E+2, 0.20102000E+1, 0.27991000E+1, 0.74267020E+3, 0.215E+3, 0.590E+2, 0.20102000E+1, + 0.00000000E+0, 0.71379130E+3, 0.215E+3, 0.600E+2, 0.20102000E+1, 0.00000000E+0, 0.69606280E+3, + 0.215E+3, 0.610E+2, 0.20102000E+1, 0.00000000E+0, 0.67974330E+3, 0.215E+3, 0.620E+2, + 0.20102000E+1, 0.00000000E+0, 0.66528190E+3, 0.215E+3, 0.630E+2, 0.20102000E+1, 0.00000000E+0, + 0.52618270E+3, 0.215E+3, 0.640E+2, 0.20102000E+1, 0.00000000E+0, 0.58709720E+3, 0.215E+3, + 0.650E+2, 0.20102000E+1, 0.00000000E+0, 0.56687340E+3, 0.215E+3, 0.660E+2, 0.20102000E+1, + 0.00000000E+0, 0.60088550E+3, 0.215E+3, 0.670E+2, 0.20102000E+1, 0.00000000E+0, 0.58822970E+3, + 0.215E+3, 0.680E+2, 0.20102000E+1, 0.00000000E+0, 0.57686430E+3, 0.215E+3, 0.690E+2, + 0.20102000E+1, 0.00000000E+0, 0.56998510E+3, 0.215E+3, 0.700E+2, 0.20102000E+1, 0.00000000E+0, + 0.48216270E+3, 0.215E+3, 0.710E+2, 0.20102000E+1, 0.00000000E+0, 0.47707590E+3, 0.215E+3, + 0.720E+2, 0.20102000E+1, 0.00000000E+0, 0.43667570E+3, 0.215E+3, 0.730E+2, 0.20102000E+1, + 0.00000000E+0, 0.36935120E+3, 0.215E+3, 0.740E+2, 0.20102000E+1, 0.00000000E+0, 0.37621900E+3, + 0.215E+3, 0.750E+2, 0.20102000E+1, 0.00000000E+0, 0.34171560E+3, 0.215E+3, 0.760E+2, + 0.20102000E+1, 0.00000000E+0, 0.31344980E+3, 0.215E+3, 0.770E+2, 0.20102000E+1, 0.00000000E+0, + 0.26059070E+3, 0.215E+3, 0.780E+2, 0.20102000E+1, 0.00000000E+0, 0.24352110E+3, 0.215E+3, + 0.790E+2, 0.20102000E+1, 0.00000000E+0, 0.25084270E+3, 0.215E+3, 0.800E+2, 0.20102000E+1, + 0.00000000E+0, 0.36225560E+3, 0.215E+3, 0.810E+2, 0.20102000E+1, 0.00000000E+0, 0.35571630E+3, + 0.215E+3, 0.820E+2, 0.20102000E+1, 0.00000000E+0, 0.32825370E+3, 0.215E+3, 0.830E+2, + 0.20102000E+1, 0.00000000E+0, 0.31378020E+3, 0.215E+3, 0.840E+2, 0.20102000E+1, 0.00000000E+0, + 0.29026290E+3, 0.215E+3, 0.850E+2, 0.20102000E+1, 0.00000000E+0, 0.26650630E+3, 0.215E+3, + 0.860E+2, 0.20102000E+1, 0.00000000E+0, 0.85532140E+3, 0.215E+3, 0.870E+2, 0.20102000E+1, + 0.00000000E+0, 0.83008340E+3, 0.215E+3, 0.880E+2, 0.20102000E+1, 0.00000000E+0, 0.73740950E+3, + 0.215E+3, 0.890E+2, 0.20102000E+1, 0.00000000E+0, 0.66621410E+3, 0.215E+3, 0.900E+2, + 0.20102000E+1, 0.00000000E+0, 0.65937380E+3, 0.215E+3, 0.910E+2, 0.20102000E+1, 0.00000000E+0, + 0.63846460E+3, 0.215E+3, 0.920E+2, 0.20102000E+1, 0.00000000E+0, 0.65489730E+3, 0.215E+3, + 0.930E+2, 0.20102000E+1, 0.00000000E+0, 0.63460740E+3, 0.215E+3, 0.940E+2, 0.20102000E+1, + 0.00000000E+0, 0.36493600E+2, 0.215E+3, 0.101E+3, 0.20102000E+1, 0.00000000E+0, 0.11639410E+3, + 0.215E+3, 0.103E+3, 0.20102000E+1, 0.98650000E+0, 0.14881940E+3, 0.215E+3, 0.104E+3, + 0.20102000E+1, 0.98080000E+0, 0.11479680E+3, 0.215E+3, 0.105E+3, 0.20102000E+1, 0.97060000E+0, + 0.86812800E+2, 0.215E+3, 0.106E+3, 0.20102000E+1, 0.98680000E+0, 0.60508500E+2, 0.215E+3, + 0.107E+3, 0.20102000E+1, 0.99440000E+0, 0.44090400E+2, 0.215E+3, 0.108E+3, 0.20102000E+1, + 0.99250000E+0, 0.30289400E+2, 0.215E+3, 0.109E+3, 0.20102000E+1, 0.99820000E+0, 0.16956980E+3, + 0.215E+3, 0.111E+3, 0.20102000E+1, 0.96840000E+0, 0.26216960E+3, 0.215E+3, 0.112E+3, + 0.20102000E+1, 0.96280000E+0, 0.26714040E+3, 0.215E+3, 0.113E+3, 0.20102000E+1, 0.96480000E+0, + 0.21636930E+3, 0.215E+3, 0.114E+3, 0.20102000E+1, 0.95070000E+0, 0.17806220E+3, 0.215E+3, + 0.115E+3, 0.20102000E+1, 0.99470000E+0, 0.15093640E+3, 0.215E+3, 0.116E+3, 0.20102000E+1, + 0.99480000E+0, 0.12360110E+3, 0.215E+3, 0.117E+3, 0.20102000E+1, 0.99720000E+0, 0.23449210E+3, + 0.215E+3, 0.119E+3, 0.20102000E+1, 0.97670000E+0, 0.44207020E+3, 0.215E+3, 0.120E+3, + 0.20102000E+1, 0.98310000E+0, 0.23629650E+3, 0.215E+3, 0.121E+3, 0.20102000E+1, 0.18627000E+1, + 0.22810870E+3, 0.215E+3, 0.122E+3, 0.20102000E+1, 0.18299000E+1, 0.22347840E+3, 0.215E+3, + 0.123E+3, 0.20102000E+1, 0.19138000E+1, 0.22119860E+3, 0.215E+3, 0.124E+3, 0.20102000E+1, + 0.18269000E+1, 0.20433190E+3, 0.215E+3, 0.125E+3, 0.20102000E+1, 0.16406000E+1, 0.18924970E+3, + 0.215E+3, 0.126E+3, 0.20102000E+1, 0.16483000E+1, 0.18048460E+3, 0.215E+3, 0.127E+3, + 0.20102000E+1, 0.17149000E+1, 0.17637500E+3, 0.215E+3, 0.128E+3, 0.20102000E+1, 0.17937000E+1, + 0.17370060E+3, 0.215E+3, 0.129E+3, 0.20102000E+1, 0.95760000E+0, 0.16388840E+3, 0.215E+3, + 0.130E+3, 0.20102000E+1, 0.19419000E+1, 0.26564070E+3, 0.215E+3, 0.131E+3, 0.20102000E+1, + 0.96010000E+0, 0.23477850E+3, 0.215E+3, 0.132E+3, 0.20102000E+1, 0.94340000E+0, 0.21123800E+3, + 0.215E+3, 0.133E+3, 0.20102000E+1, 0.98890000E+0, 0.19329960E+3, 0.215E+3, 0.134E+3, + 0.20102000E+1, 0.99010000E+0, 0.17058580E+3, 0.215E+3, 0.135E+3, 0.20102000E+1, 0.99740000E+0, + 0.28011830E+3, 0.215E+3, 0.137E+3, 0.20102000E+1, 0.97380000E+0, 0.53743520E+3, 0.215E+3, + 0.138E+3, 0.20102000E+1, 0.98010000E+0, 0.41535780E+3, 0.215E+3, 0.139E+3, 0.20102000E+1, + 0.19153000E+1, 0.31230500E+3, 0.215E+3, 0.140E+3, 0.20102000E+1, 0.19355000E+1, 0.31527630E+3, + 0.215E+3, 0.141E+3, 0.20102000E+1, 0.19545000E+1, 0.29424360E+3, 0.215E+3, 0.142E+3, + 0.20102000E+1, 0.19420000E+1, 0.32833170E+3, 0.215E+3, 0.143E+3, 0.20102000E+1, 0.16682000E+1, + 0.25720590E+3, 0.215E+3, 0.144E+3, 0.20102000E+1, 0.18584000E+1, 0.24057510E+3, 0.215E+3, + 0.145E+3, 0.20102000E+1, 0.19003000E+1, 0.22341250E+3, 0.215E+3, 0.146E+3, 0.20102000E+1, + 0.18630000E+1, 0.21594190E+3, 0.215E+3, 0.147E+3, 0.20102000E+1, 0.96790000E+0, 0.21429840E+3, + 0.215E+3, 0.148E+3, 0.20102000E+1, 0.19539000E+1, 0.33682850E+3, 0.215E+3, 0.149E+3, + 0.20102000E+1, 0.96330000E+0, 0.30637120E+3, 0.215E+3, 0.150E+3, 0.20102000E+1, 0.95140000E+0, + 0.28792660E+3, 0.215E+3, 0.151E+3, 0.20102000E+1, 0.97490000E+0, 0.27294170E+3, 0.215E+3, + 0.152E+3, 0.20102000E+1, 0.98110000E+0, 0.24979920E+3, 0.215E+3, 0.153E+3, 0.20102000E+1, + 0.99680000E+0, 0.33288760E+3, 0.215E+3, 0.155E+3, 0.20102000E+1, 0.99090000E+0, 0.69526390E+3, + 0.215E+3, 0.156E+3, 0.20102000E+1, 0.97970000E+0, 0.52525150E+3, 0.215E+3, 0.157E+3, + 0.20102000E+1, 0.19373000E+1, 0.33608240E+3, 0.215E+3, 0.159E+3, 0.20102000E+1, 0.29425000E+1, + 0.32913430E+3, 0.215E+3, 0.160E+3, 0.20102000E+1, 0.29455000E+1, 0.31875390E+3, 0.215E+3, + 0.161E+3, 0.20102000E+1, 0.29413000E+1, 0.32010570E+3, 0.215E+3, 0.162E+3, 0.20102000E+1, + 0.29300000E+1, 0.30771680E+3, 0.215E+3, 0.163E+3, 0.20102000E+1, 0.18286000E+1, 0.32211770E+3, + 0.215E+3, 0.164E+3, 0.20102000E+1, 0.28732000E+1, 0.30266100E+3, 0.215E+3, 0.165E+3, + 0.20102000E+1, 0.29086000E+1, 0.30757360E+3, 0.215E+3, 0.166E+3, 0.20102000E+1, 0.28965000E+1, + 0.28745570E+3, 0.215E+3, 0.167E+3, 0.20102000E+1, 0.29242000E+1, 0.27932320E+3, 0.215E+3, + 0.168E+3, 0.20102000E+1, 0.29282000E+1, 0.27749490E+3, 0.215E+3, 0.169E+3, 0.20102000E+1, + 0.29246000E+1, 0.29150550E+3, 0.215E+3, 0.170E+3, 0.20102000E+1, 0.28482000E+1, 0.26832640E+3, + 0.215E+3, 0.171E+3, 0.20102000E+1, 0.29219000E+1, 0.36072920E+3, 0.215E+3, 0.172E+3, + 0.20102000E+1, 0.19254000E+1, 0.33564790E+3, 0.215E+3, 0.173E+3, 0.20102000E+1, 0.19459000E+1, + 0.30701360E+3, 0.215E+3, 0.174E+3, 0.20102000E+1, 0.19292000E+1, 0.30982750E+3, 0.215E+3, + 0.175E+3, 0.20102000E+1, 0.18104000E+1, 0.27286500E+3, 0.215E+3, 0.176E+3, 0.20102000E+1, + 0.18858000E+1, 0.25678780E+3, 0.215E+3, 0.177E+3, 0.20102000E+1, 0.18648000E+1, 0.24528060E+3, + 0.215E+3, 0.178E+3, 0.20102000E+1, 0.19188000E+1, 0.23433320E+3, 0.215E+3, 0.179E+3, + 0.20102000E+1, 0.98460000E+0, 0.22697090E+3, 0.215E+3, 0.180E+3, 0.20102000E+1, 0.19896000E+1, + 0.36172460E+3, 0.215E+3, 0.181E+3, 0.20102000E+1, 0.92670000E+0, 0.33138450E+3, 0.215E+3, + 0.182E+3, 0.20102000E+1, 0.93830000E+0, 0.32226070E+3, 0.215E+3, 0.183E+3, 0.20102000E+1, + 0.98200000E+0, 0.31398590E+3, 0.215E+3, 0.184E+3, 0.20102000E+1, 0.98150000E+0, 0.29381590E+3, + 0.215E+3, 0.185E+3, 0.20102000E+1, 0.99540000E+0, 0.37507170E+3, 0.215E+3, 0.187E+3, + 0.20102000E+1, 0.97050000E+0, 0.69405520E+3, 0.215E+3, 0.188E+3, 0.20102000E+1, 0.96620000E+0, + 0.39772110E+3, 0.215E+3, 0.189E+3, 0.20102000E+1, 0.29070000E+1, 0.45702730E+3, 0.215E+3, + 0.190E+3, 0.20102000E+1, 0.28844000E+1, 0.40899300E+3, 0.215E+3, 0.191E+3, 0.20102000E+1, + 0.28738000E+1, 0.36253380E+3, 0.215E+3, 0.192E+3, 0.20102000E+1, 0.28878000E+1, 0.34905070E+3, + 0.215E+3, 0.193E+3, 0.20102000E+1, 0.29095000E+1, 0.41613190E+3, 0.215E+3, 0.194E+3, + 0.20102000E+1, 0.19209000E+1, 0.98185900E+2, 0.215E+3, 0.204E+3, 0.20102000E+1, 0.19697000E+1, + 0.96532400E+2, 0.215E+3, 0.205E+3, 0.20102000E+1, 0.19441000E+1, 0.70926900E+2, 0.215E+3, + 0.206E+3, 0.20102000E+1, 0.19985000E+1, 0.56798100E+2, 0.215E+3, 0.207E+3, 0.20102000E+1, + 0.20143000E+1, 0.38857800E+2, 0.215E+3, 0.208E+3, 0.20102000E+1, 0.19887000E+1, 0.17322270E+3, + 0.215E+3, 0.212E+3, 0.20102000E+1, 0.19496000E+1, 0.20920610E+3, 0.215E+3, 0.213E+3, + 0.20102000E+1, 0.19311000E+1, 0.20144650E+3, 0.215E+3, 0.214E+3, 0.20102000E+1, 0.19435000E+1, + 0.17555340E+3, 0.215E+3, 0.215E+3, 0.20102000E+1, 0.20102000E+1, 0.19472900E+2, 0.216E+3, + 0.100E+1, 0.19903000E+1, 0.91180000E+0, 0.13209000E+2, 0.216E+3, 0.200E+1, 0.19903000E+1, + 0.00000000E+0, 0.26554640E+3, 0.216E+3, 0.300E+1, 0.19903000E+1, 0.00000000E+0, 0.16268750E+3, + 0.216E+3, 0.400E+1, 0.19903000E+1, 0.00000000E+0, 0.11343240E+3, 0.216E+3, 0.500E+1, + 0.19903000E+1, 0.00000000E+0, 0.78572900E+2, 0.216E+3, 0.600E+1, 0.19903000E+1, 0.00000000E+0, + 0.55913600E+2, 0.216E+3, 0.700E+1, 0.19903000E+1, 0.00000000E+0, 0.42824500E+2, 0.216E+3, + 0.800E+1, 0.19903000E+1, 0.00000000E+0, 0.32736500E+2, 0.216E+3, 0.900E+1, 0.19903000E+1, + 0.00000000E+0, 0.25343500E+2, 0.216E+3, 0.100E+2, 0.19903000E+1, 0.00000000E+0, 0.31871200E+3, + 0.216E+3, 0.110E+2, 0.19903000E+1, 0.00000000E+0, 0.25643150E+3, 0.216E+3, 0.120E+2, + 0.19903000E+1, 0.00000000E+0, 0.24071650E+3, 0.216E+3, 0.130E+2, 0.19903000E+1, 0.00000000E+0, + 0.19423140E+3, 0.216E+3, 0.140E+2, 0.19903000E+1, 0.00000000E+0, 0.15449350E+3, 0.216E+3, + 0.150E+2, 0.19903000E+1, 0.00000000E+0, 0.12984130E+3, 0.216E+3, 0.160E+2, 0.19903000E+1, + 0.00000000E+0, 0.10729640E+3, 0.216E+3, 0.170E+2, 0.19903000E+1, 0.00000000E+0, 0.88626800E+2, + 0.216E+3, 0.180E+2, 0.19903000E+1, 0.00000000E+0, 0.51938020E+3, 0.216E+3, 0.190E+2, + 0.19903000E+1, 0.00000000E+0, 0.44287350E+3, 0.216E+3, 0.200E+2, 0.19903000E+1, 0.00000000E+0, + 0.36871310E+3, 0.216E+3, 0.210E+2, 0.19903000E+1, 0.00000000E+0, 0.35885540E+3, 0.216E+3, + 0.220E+2, 0.19903000E+1, 0.00000000E+0, 0.33009380E+3, 0.216E+3, 0.230E+2, 0.19903000E+1, + 0.00000000E+0, 0.26056470E+3, 0.216E+3, 0.240E+2, 0.19903000E+1, 0.00000000E+0, 0.28605270E+3, + 0.216E+3, 0.250E+2, 0.19903000E+1, 0.00000000E+0, 0.22513570E+3, 0.216E+3, 0.260E+2, + 0.19903000E+1, 0.00000000E+0, 0.24051750E+3, 0.216E+3, 0.270E+2, 0.19903000E+1, 0.00000000E+0, + 0.24658640E+3, 0.216E+3, 0.280E+2, 0.19903000E+1, 0.00000000E+0, 0.18941220E+3, 0.216E+3, + 0.290E+2, 0.19903000E+1, 0.00000000E+0, 0.19693310E+3, 0.216E+3, 0.300E+2, 0.19903000E+1, + 0.00000000E+0, 0.23234090E+3, 0.216E+3, 0.310E+2, 0.19903000E+1, 0.00000000E+0, 0.20856850E+3, + 0.216E+3, 0.320E+2, 0.19903000E+1, 0.00000000E+0, 0.18080070E+3, 0.216E+3, 0.330E+2, + 0.19903000E+1, 0.00000000E+0, 0.16386810E+3, 0.216E+3, 0.340E+2, 0.19903000E+1, 0.00000000E+0, + 0.14483870E+3, 0.216E+3, 0.350E+2, 0.19903000E+1, 0.00000000E+0, 0.12707910E+3, 0.216E+3, + 0.360E+2, 0.19903000E+1, 0.00000000E+0, 0.58437840E+3, 0.216E+3, 0.370E+2, 0.19903000E+1, + 0.00000000E+0, 0.52738380E+3, 0.216E+3, 0.380E+2, 0.19903000E+1, 0.00000000E+0, 0.46852690E+3, + 0.216E+3, 0.390E+2, 0.19903000E+1, 0.00000000E+0, 0.42487480E+3, 0.216E+3, 0.400E+2, + 0.19903000E+1, 0.00000000E+0, 0.38978890E+3, 0.216E+3, 0.410E+2, 0.19903000E+1, 0.00000000E+0, + 0.30421090E+3, 0.216E+3, 0.420E+2, 0.19903000E+1, 0.00000000E+0, 0.33802960E+3, 0.216E+3, + 0.430E+2, 0.19903000E+1, 0.00000000E+0, 0.26053350E+3, 0.216E+3, 0.440E+2, 0.19903000E+1, + 0.00000000E+0, 0.28446820E+3, 0.216E+3, 0.450E+2, 0.19903000E+1, 0.00000000E+0, 0.26473450E+3, + 0.216E+3, 0.460E+2, 0.19903000E+1, 0.00000000E+0, 0.22055850E+3, 0.216E+3, 0.470E+2, + 0.19903000E+1, 0.00000000E+0, 0.23431540E+3, 0.216E+3, 0.480E+2, 0.19903000E+1, 0.00000000E+0, + 0.29072550E+3, 0.216E+3, 0.490E+2, 0.19903000E+1, 0.00000000E+0, 0.27258810E+3, 0.216E+3, + 0.500E+2, 0.19903000E+1, 0.00000000E+0, 0.24633500E+3, 0.216E+3, 0.510E+2, 0.19903000E+1, + 0.00000000E+0, 0.23051370E+3, 0.216E+3, 0.520E+2, 0.19903000E+1, 0.00000000E+0, 0.21031760E+3, + 0.216E+3, 0.530E+2, 0.19903000E+1, 0.00000000E+0, 0.19068220E+3, 0.216E+3, 0.540E+2, + 0.19903000E+1, 0.00000000E+0, 0.71322290E+3, 0.216E+3, 0.550E+2, 0.19903000E+1, 0.00000000E+0, + 0.66991060E+3, 0.216E+3, 0.560E+2, 0.19903000E+1, 0.00000000E+0, 0.59671860E+3, 0.216E+3, + 0.570E+2, 0.19903000E+1, 0.00000000E+0, 0.29045550E+3, 0.216E+3, 0.580E+2, 0.19903000E+1, + 0.27991000E+1, 0.59619860E+3, 0.216E+3, 0.590E+2, 0.19903000E+1, 0.00000000E+0, 0.57368400E+3, + 0.216E+3, 0.600E+2, 0.19903000E+1, 0.00000000E+0, 0.55961080E+3, 0.216E+3, 0.610E+2, + 0.19903000E+1, 0.00000000E+0, 0.54662920E+3, 0.216E+3, 0.620E+2, 0.19903000E+1, 0.00000000E+0, + 0.53513180E+3, 0.216E+3, 0.630E+2, 0.19903000E+1, 0.00000000E+0, 0.42773380E+3, 0.216E+3, + 0.640E+2, 0.19903000E+1, 0.00000000E+0, 0.47158580E+3, 0.216E+3, 0.650E+2, 0.19903000E+1, + 0.00000000E+0, 0.45610620E+3, 0.216E+3, 0.660E+2, 0.19903000E+1, 0.00000000E+0, 0.48421010E+3, + 0.216E+3, 0.670E+2, 0.19903000E+1, 0.00000000E+0, 0.47407530E+3, 0.216E+3, 0.680E+2, + 0.19903000E+1, 0.00000000E+0, 0.46503260E+3, 0.216E+3, 0.690E+2, 0.19903000E+1, 0.00000000E+0, + 0.45926340E+3, 0.216E+3, 0.700E+2, 0.19903000E+1, 0.00000000E+0, 0.39129390E+3, 0.216E+3, + 0.710E+2, 0.19903000E+1, 0.00000000E+0, 0.39032880E+3, 0.216E+3, 0.720E+2, 0.19903000E+1, + 0.00000000E+0, 0.35937970E+3, 0.216E+3, 0.730E+2, 0.19903000E+1, 0.00000000E+0, 0.30582610E+3, + 0.216E+3, 0.740E+2, 0.19903000E+1, 0.00000000E+0, 0.31204680E+3, 0.216E+3, 0.750E+2, + 0.19903000E+1, 0.00000000E+0, 0.28491830E+3, 0.216E+3, 0.760E+2, 0.19903000E+1, 0.00000000E+0, + 0.26249830E+3, 0.216E+3, 0.770E+2, 0.19903000E+1, 0.00000000E+0, 0.21953350E+3, 0.216E+3, + 0.780E+2, 0.19903000E+1, 0.00000000E+0, 0.20562600E+3, 0.216E+3, 0.790E+2, 0.19903000E+1, + 0.00000000E+0, 0.21201590E+3, 0.216E+3, 0.800E+2, 0.19903000E+1, 0.00000000E+0, 0.29991980E+3, + 0.216E+3, 0.810E+2, 0.19903000E+1, 0.00000000E+0, 0.29620520E+3, 0.216E+3, 0.820E+2, + 0.19903000E+1, 0.00000000E+0, 0.27549690E+3, 0.216E+3, 0.830E+2, 0.19903000E+1, 0.00000000E+0, + 0.26464810E+3, 0.216E+3, 0.840E+2, 0.19903000E+1, 0.00000000E+0, 0.24633950E+3, 0.216E+3, + 0.850E+2, 0.19903000E+1, 0.00000000E+0, 0.22753380E+3, 0.216E+3, 0.860E+2, 0.19903000E+1, + 0.00000000E+0, 0.68102410E+3, 0.216E+3, 0.870E+2, 0.19903000E+1, 0.00000000E+0, 0.66741950E+3, + 0.216E+3, 0.880E+2, 0.19903000E+1, 0.00000000E+0, 0.59723200E+3, 0.216E+3, 0.890E+2, + 0.19903000E+1, 0.00000000E+0, 0.54474490E+3, 0.216E+3, 0.900E+2, 0.19903000E+1, 0.00000000E+0, + 0.53715360E+3, 0.216E+3, 0.910E+2, 0.19903000E+1, 0.00000000E+0, 0.52027520E+3, 0.216E+3, + 0.920E+2, 0.19903000E+1, 0.00000000E+0, 0.53064210E+3, 0.216E+3, 0.930E+2, 0.19903000E+1, + 0.00000000E+0, 0.51469140E+3, 0.216E+3, 0.940E+2, 0.19903000E+1, 0.00000000E+0, 0.30774700E+2, + 0.216E+3, 0.101E+3, 0.19903000E+1, 0.00000000E+0, 0.95053100E+2, 0.216E+3, 0.103E+3, + 0.19903000E+1, 0.98650000E+0, 0.12215340E+3, 0.216E+3, 0.104E+3, 0.19903000E+1, 0.98080000E+0, + 0.96110000E+2, 0.216E+3, 0.105E+3, 0.19903000E+1, 0.97060000E+0, 0.73700600E+2, 0.216E+3, + 0.106E+3, 0.19903000E+1, 0.98680000E+0, 0.52175300E+2, 0.216E+3, 0.107E+3, 0.19903000E+1, + 0.99440000E+0, 0.38527600E+2, 0.216E+3, 0.108E+3, 0.19903000E+1, 0.99250000E+0, 0.26916300E+2, + 0.216E+3, 0.109E+3, 0.19903000E+1, 0.99820000E+0, 0.13811660E+3, 0.216E+3, 0.111E+3, + 0.19903000E+1, 0.96840000E+0, 0.21310360E+3, 0.216E+3, 0.112E+3, 0.19903000E+1, 0.96280000E+0, + 0.21912850E+3, 0.216E+3, 0.113E+3, 0.19903000E+1, 0.96480000E+0, 0.18016220E+3, 0.216E+3, + 0.114E+3, 0.19903000E+1, 0.95070000E+0, 0.15007480E+3, 0.216E+3, 0.115E+3, 0.19903000E+1, + 0.99470000E+0, 0.12837640E+3, 0.216E+3, 0.116E+3, 0.19903000E+1, 0.99480000E+0, 0.10616060E+3, + 0.216E+3, 0.117E+3, 0.19903000E+1, 0.99720000E+0, 0.19334120E+3, 0.216E+3, 0.119E+3, + 0.19903000E+1, 0.97670000E+0, 0.35561610E+3, 0.216E+3, 0.120E+3, 0.19903000E+1, 0.98310000E+0, + 0.19666010E+3, 0.216E+3, 0.121E+3, 0.19903000E+1, 0.18627000E+1, 0.19002900E+3, 0.216E+3, + 0.122E+3, 0.19903000E+1, 0.18299000E+1, 0.18615760E+3, 0.216E+3, 0.123E+3, 0.19903000E+1, + 0.19138000E+1, 0.18402800E+3, 0.216E+3, 0.124E+3, 0.19903000E+1, 0.18269000E+1, 0.17103060E+3, + 0.216E+3, 0.125E+3, 0.19903000E+1, 0.16406000E+1, 0.15879330E+3, 0.216E+3, 0.126E+3, + 0.19903000E+1, 0.16483000E+1, 0.15149830E+3, 0.216E+3, 0.127E+3, 0.19903000E+1, 0.17149000E+1, + 0.14797530E+3, 0.216E+3, 0.128E+3, 0.19903000E+1, 0.17937000E+1, 0.14502500E+3, 0.216E+3, + 0.129E+3, 0.19903000E+1, 0.95760000E+0, 0.13803960E+3, 0.216E+3, 0.130E+3, 0.19903000E+1, + 0.19419000E+1, 0.21921940E+3, 0.216E+3, 0.131E+3, 0.19903000E+1, 0.96010000E+0, 0.19595580E+3, + 0.216E+3, 0.132E+3, 0.19903000E+1, 0.94340000E+0, 0.17790880E+3, 0.216E+3, 0.133E+3, + 0.19903000E+1, 0.98890000E+0, 0.16390830E+3, 0.216E+3, 0.134E+3, 0.19903000E+1, 0.99010000E+0, + 0.14577240E+3, 0.216E+3, 0.135E+3, 0.19903000E+1, 0.99740000E+0, 0.23172650E+3, 0.216E+3, + 0.137E+3, 0.19903000E+1, 0.97380000E+0, 0.43227830E+3, 0.216E+3, 0.138E+3, 0.19903000E+1, + 0.98010000E+0, 0.33980820E+3, 0.216E+3, 0.139E+3, 0.19903000E+1, 0.19153000E+1, 0.25999910E+3, + 0.216E+3, 0.140E+3, 0.19903000E+1, 0.19355000E+1, 0.26242950E+3, 0.216E+3, 0.141E+3, + 0.19903000E+1, 0.19545000E+1, 0.24567190E+3, 0.216E+3, 0.142E+3, 0.19903000E+1, 0.19420000E+1, + 0.27194340E+3, 0.216E+3, 0.143E+3, 0.19903000E+1, 0.16682000E+1, 0.21620660E+3, 0.216E+3, + 0.144E+3, 0.19903000E+1, 0.18584000E+1, 0.20248030E+3, 0.216E+3, 0.145E+3, 0.19903000E+1, + 0.19003000E+1, 0.18837520E+3, 0.216E+3, 0.146E+3, 0.19903000E+1, 0.18630000E+1, 0.18191000E+3, + 0.216E+3, 0.147E+3, 0.19903000E+1, 0.96790000E+0, 0.18125820E+3, 0.216E+3, 0.148E+3, + 0.19903000E+1, 0.19539000E+1, 0.27850870E+3, 0.216E+3, 0.149E+3, 0.19903000E+1, 0.96330000E+0, + 0.25563360E+3, 0.216E+3, 0.150E+3, 0.19903000E+1, 0.95140000E+0, 0.24188440E+3, 0.216E+3, + 0.151E+3, 0.19903000E+1, 0.97490000E+0, 0.23047020E+3, 0.216E+3, 0.152E+3, 0.19903000E+1, + 0.98110000E+0, 0.21226280E+3, 0.216E+3, 0.153E+3, 0.19903000E+1, 0.99680000E+0, 0.27721210E+3, + 0.216E+3, 0.155E+3, 0.19903000E+1, 0.99090000E+0, 0.55799180E+3, 0.216E+3, 0.156E+3, + 0.19903000E+1, 0.97970000E+0, 0.42930150E+3, 0.216E+3, 0.157E+3, 0.19903000E+1, 0.19373000E+1, + 0.28192380E+3, 0.216E+3, 0.159E+3, 0.19903000E+1, 0.29425000E+1, 0.27612630E+3, 0.216E+3, + 0.160E+3, 0.19903000E+1, 0.29455000E+1, 0.26756270E+3, 0.216E+3, 0.161E+3, 0.19903000E+1, + 0.29413000E+1, 0.26833820E+3, 0.216E+3, 0.162E+3, 0.19903000E+1, 0.29300000E+1, 0.25690680E+3, + 0.216E+3, 0.163E+3, 0.19903000E+1, 0.18286000E+1, 0.26982370E+3, 0.216E+3, 0.164E+3, + 0.19903000E+1, 0.28732000E+1, 0.25386320E+3, 0.216E+3, 0.165E+3, 0.19903000E+1, 0.29086000E+1, + 0.25739270E+3, 0.216E+3, 0.166E+3, 0.19903000E+1, 0.28965000E+1, 0.24138000E+3, 0.216E+3, + 0.167E+3, 0.19903000E+1, 0.29242000E+1, 0.23465510E+3, 0.216E+3, 0.168E+3, 0.19903000E+1, + 0.29282000E+1, 0.23302060E+3, 0.216E+3, 0.169E+3, 0.19903000E+1, 0.29246000E+1, 0.24417040E+3, + 0.216E+3, 0.170E+3, 0.19903000E+1, 0.28482000E+1, 0.22545330E+3, 0.216E+3, 0.171E+3, + 0.19903000E+1, 0.29219000E+1, 0.29846420E+3, 0.216E+3, 0.172E+3, 0.19903000E+1, 0.19254000E+1, + 0.27931410E+3, 0.216E+3, 0.173E+3, 0.19903000E+1, 0.19459000E+1, 0.25702350E+3, 0.216E+3, + 0.174E+3, 0.19903000E+1, 0.19292000E+1, 0.25811720E+3, 0.216E+3, 0.175E+3, 0.19903000E+1, + 0.18104000E+1, 0.23037700E+3, 0.216E+3, 0.176E+3, 0.19903000E+1, 0.18858000E+1, 0.21735740E+3, + 0.216E+3, 0.177E+3, 0.19903000E+1, 0.18648000E+1, 0.20795360E+3, 0.216E+3, 0.178E+3, + 0.19903000E+1, 0.19188000E+1, 0.19875510E+3, 0.216E+3, 0.179E+3, 0.19903000E+1, 0.98460000E+0, + 0.19332900E+3, 0.216E+3, 0.180E+3, 0.19903000E+1, 0.19896000E+1, 0.30009690E+3, 0.216E+3, + 0.181E+3, 0.19903000E+1, 0.92670000E+0, 0.27730190E+3, 0.216E+3, 0.182E+3, 0.19903000E+1, + 0.93830000E+0, 0.27095850E+3, 0.216E+3, 0.183E+3, 0.19903000E+1, 0.98200000E+0, 0.26500160E+3, + 0.216E+3, 0.184E+3, 0.19903000E+1, 0.98150000E+0, 0.24934960E+3, 0.216E+3, 0.185E+3, + 0.19903000E+1, 0.99540000E+0, 0.31247270E+3, 0.216E+3, 0.187E+3, 0.19903000E+1, 0.97050000E+0, + 0.55992810E+3, 0.216E+3, 0.188E+3, 0.19903000E+1, 0.96620000E+0, 0.33346380E+3, 0.216E+3, + 0.189E+3, 0.19903000E+1, 0.29070000E+1, 0.38050360E+3, 0.216E+3, 0.190E+3, 0.19903000E+1, + 0.28844000E+1, 0.34179510E+3, 0.216E+3, 0.191E+3, 0.19903000E+1, 0.28738000E+1, 0.30467440E+3, + 0.216E+3, 0.192E+3, 0.19903000E+1, 0.28878000E+1, 0.29376970E+3, 0.216E+3, 0.193E+3, + 0.19903000E+1, 0.29095000E+1, 0.34471170E+3, 0.216E+3, 0.194E+3, 0.19903000E+1, 0.19209000E+1, + 0.82197300E+2, 0.216E+3, 0.204E+3, 0.19903000E+1, 0.19697000E+1, 0.81269300E+2, 0.216E+3, + 0.205E+3, 0.19903000E+1, 0.19441000E+1, 0.60669000E+2, 0.216E+3, 0.206E+3, 0.19903000E+1, + 0.19985000E+1, 0.49062900E+2, 0.216E+3, 0.207E+3, 0.19903000E+1, 0.20143000E+1, 0.34104200E+2, + 0.216E+3, 0.208E+3, 0.19903000E+1, 0.19887000E+1, 0.14355230E+3, 0.216E+3, 0.212E+3, + 0.19903000E+1, 0.19496000E+1, 0.17327790E+3, 0.216E+3, 0.213E+3, 0.19903000E+1, 0.19311000E+1, + 0.16813020E+3, 0.216E+3, 0.214E+3, 0.19903000E+1, 0.19435000E+1, 0.14787500E+3, 0.216E+3, + 0.215E+3, 0.19903000E+1, 0.20102000E+1, 0.12581090E+3, 0.216E+3, 0.216E+3, 0.19903000E+1, + 0.19903000E+1, 0.30678300E+2, 0.220E+3, 0.100E+1, 0.19349000E+1, 0.91180000E+0, 0.19724700E+2, + 0.220E+3, 0.200E+1, 0.19349000E+1, 0.00000000E+0, 0.52531960E+3, 0.220E+3, 0.300E+1, + 0.19349000E+1, 0.00000000E+0, 0.29170210E+3, 0.220E+3, 0.400E+1, 0.19349000E+1, 0.00000000E+0, + 0.19141350E+3, 0.220E+3, 0.500E+1, 0.19349000E+1, 0.00000000E+0, 0.12668360E+3, 0.220E+3, + 0.600E+1, 0.19349000E+1, 0.00000000E+0, 0.87190600E+2, 0.220E+3, 0.700E+1, 0.19349000E+1, + 0.00000000E+0, 0.65252500E+2, 0.220E+3, 0.800E+1, 0.19349000E+1, 0.00000000E+0, 0.48933100E+2, + 0.220E+3, 0.900E+1, 0.19349000E+1, 0.00000000E+0, 0.37325800E+2, 0.220E+3, 0.100E+2, + 0.19349000E+1, 0.00000000E+0, 0.62655260E+3, 0.220E+3, 0.110E+2, 0.19349000E+1, 0.00000000E+0, + 0.46815270E+3, 0.220E+3, 0.120E+2, 0.19349000E+1, 0.00000000E+0, 0.42605680E+3, 0.220E+3, + 0.130E+2, 0.19349000E+1, 0.00000000E+0, 0.32981710E+3, 0.220E+3, 0.140E+2, 0.19349000E+1, + 0.00000000E+0, 0.25315190E+3, 0.220E+3, 0.150E+2, 0.19349000E+1, 0.00000000E+0, 0.20785310E+3, + 0.220E+3, 0.160E+2, 0.19349000E+1, 0.00000000E+0, 0.16800650E+3, 0.220E+3, 0.170E+2, + 0.19349000E+1, 0.00000000E+0, 0.13616380E+3, 0.220E+3, 0.180E+2, 0.19349000E+1, 0.00000000E+0, + 0.10305394E+4, 0.220E+3, 0.190E+2, 0.19349000E+1, 0.00000000E+0, 0.83223790E+3, 0.220E+3, + 0.200E+2, 0.19349000E+1, 0.00000000E+0, 0.68387860E+3, 0.220E+3, 0.210E+2, 0.19349000E+1, + 0.00000000E+0, 0.65674740E+3, 0.220E+3, 0.220E+2, 0.19349000E+1, 0.00000000E+0, 0.59945210E+3, + 0.220E+3, 0.230E+2, 0.19349000E+1, 0.00000000E+0, 0.47138320E+3, 0.220E+3, 0.240E+2, + 0.19349000E+1, 0.00000000E+0, 0.51365160E+3, 0.220E+3, 0.250E+2, 0.19349000E+1, 0.00000000E+0, + 0.40218720E+3, 0.220E+3, 0.260E+2, 0.19349000E+1, 0.00000000E+0, 0.42395230E+3, 0.220E+3, + 0.270E+2, 0.19349000E+1, 0.00000000E+0, 0.43824820E+3, 0.220E+3, 0.280E+2, 0.19349000E+1, + 0.00000000E+0, 0.33535920E+3, 0.220E+3, 0.290E+2, 0.19349000E+1, 0.00000000E+0, 0.34119230E+3, + 0.220E+3, 0.300E+2, 0.19349000E+1, 0.00000000E+0, 0.40564880E+3, 0.220E+3, 0.310E+2, + 0.19349000E+1, 0.00000000E+0, 0.35293360E+3, 0.220E+3, 0.320E+2, 0.19349000E+1, 0.00000000E+0, + 0.29714260E+3, 0.220E+3, 0.330E+2, 0.19349000E+1, 0.00000000E+0, 0.26437900E+3, 0.220E+3, + 0.340E+2, 0.19349000E+1, 0.00000000E+0, 0.22931470E+3, 0.220E+3, 0.350E+2, 0.19349000E+1, + 0.00000000E+0, 0.19776450E+3, 0.220E+3, 0.360E+2, 0.19349000E+1, 0.00000000E+0, 0.11520197E+4, + 0.220E+3, 0.370E+2, 0.19349000E+1, 0.00000000E+0, 0.99191430E+3, 0.220E+3, 0.380E+2, + 0.19349000E+1, 0.00000000E+0, 0.86032290E+3, 0.220E+3, 0.390E+2, 0.19349000E+1, 0.00000000E+0, + 0.76820000E+3, 0.220E+3, 0.400E+2, 0.19349000E+1, 0.00000000E+0, 0.69731480E+3, 0.220E+3, + 0.410E+2, 0.19349000E+1, 0.00000000E+0, 0.53379780E+3, 0.220E+3, 0.420E+2, 0.19349000E+1, + 0.00000000E+0, 0.59749150E+3, 0.220E+3, 0.430E+2, 0.19349000E+1, 0.00000000E+0, 0.45095970E+3, + 0.220E+3, 0.440E+2, 0.19349000E+1, 0.00000000E+0, 0.49339260E+3, 0.220E+3, 0.450E+2, + 0.19349000E+1, 0.00000000E+0, 0.45620630E+3, 0.220E+3, 0.460E+2, 0.19349000E+1, 0.00000000E+0, + 0.38042830E+3, 0.220E+3, 0.470E+2, 0.19349000E+1, 0.00000000E+0, 0.40045350E+3, 0.220E+3, + 0.480E+2, 0.19349000E+1, 0.00000000E+0, 0.50726050E+3, 0.220E+3, 0.490E+2, 0.19349000E+1, + 0.00000000E+0, 0.46411930E+3, 0.220E+3, 0.500E+2, 0.19349000E+1, 0.00000000E+0, 0.40901730E+3, + 0.220E+3, 0.510E+2, 0.19349000E+1, 0.00000000E+0, 0.37680930E+3, 0.220E+3, 0.520E+2, + 0.19349000E+1, 0.00000000E+0, 0.33804940E+3, 0.220E+3, 0.530E+2, 0.19349000E+1, 0.00000000E+0, + 0.30162730E+3, 0.220E+3, 0.540E+2, 0.19349000E+1, 0.00000000E+0, 0.14021290E+4, 0.220E+3, + 0.550E+2, 0.19349000E+1, 0.00000000E+0, 0.12678490E+4, 0.220E+3, 0.560E+2, 0.19349000E+1, + 0.00000000E+0, 0.11031556E+4, 0.220E+3, 0.570E+2, 0.19349000E+1, 0.00000000E+0, 0.48397150E+3, + 0.220E+3, 0.580E+2, 0.19349000E+1, 0.27991000E+1, 0.11194842E+4, 0.220E+3, 0.590E+2, + 0.19349000E+1, 0.00000000E+0, 0.10733952E+4, 0.220E+3, 0.600E+2, 0.19349000E+1, 0.00000000E+0, + 0.10460388E+4, 0.220E+3, 0.610E+2, 0.19349000E+1, 0.00000000E+0, 0.10209351E+4, 0.220E+3, + 0.620E+2, 0.19349000E+1, 0.00000000E+0, 0.99865850E+3, 0.220E+3, 0.630E+2, 0.19349000E+1, + 0.00000000E+0, 0.77606950E+3, 0.220E+3, 0.640E+2, 0.19349000E+1, 0.00000000E+0, 0.88704210E+3, + 0.220E+3, 0.650E+2, 0.19349000E+1, 0.00000000E+0, 0.85381990E+3, 0.220E+3, 0.660E+2, + 0.19349000E+1, 0.00000000E+0, 0.89865150E+3, 0.220E+3, 0.670E+2, 0.19349000E+1, 0.00000000E+0, + 0.87938870E+3, 0.220E+3, 0.680E+2, 0.19349000E+1, 0.00000000E+0, 0.86189750E+3, 0.220E+3, + 0.690E+2, 0.19349000E+1, 0.00000000E+0, 0.85225470E+3, 0.220E+3, 0.700E+2, 0.19349000E+1, + 0.00000000E+0, 0.71226080E+3, 0.220E+3, 0.710E+2, 0.19349000E+1, 0.00000000E+0, 0.69344710E+3, + 0.220E+3, 0.720E+2, 0.19349000E+1, 0.00000000E+0, 0.62855660E+3, 0.220E+3, 0.730E+2, + 0.19349000E+1, 0.00000000E+0, 0.52745270E+3, 0.220E+3, 0.740E+2, 0.19349000E+1, 0.00000000E+0, + 0.53533140E+3, 0.220E+3, 0.750E+2, 0.19349000E+1, 0.00000000E+0, 0.48222940E+3, 0.220E+3, + 0.760E+2, 0.19349000E+1, 0.00000000E+0, 0.43941270E+3, 0.220E+3, 0.770E+2, 0.19349000E+1, + 0.00000000E+0, 0.36278720E+3, 0.220E+3, 0.780E+2, 0.19349000E+1, 0.00000000E+0, 0.33812750E+3, + 0.220E+3, 0.790E+2, 0.19349000E+1, 0.00000000E+0, 0.34721000E+3, 0.220E+3, 0.800E+2, + 0.19349000E+1, 0.00000000E+0, 0.51871070E+3, 0.220E+3, 0.810E+2, 0.19349000E+1, 0.00000000E+0, + 0.50321870E+3, 0.220E+3, 0.820E+2, 0.19349000E+1, 0.00000000E+0, 0.45790780E+3, 0.220E+3, + 0.830E+2, 0.19349000E+1, 0.00000000E+0, 0.43414870E+3, 0.220E+3, 0.840E+2, 0.19349000E+1, + 0.00000000E+0, 0.39775460E+3, 0.220E+3, 0.850E+2, 0.19349000E+1, 0.00000000E+0, 0.36206750E+3, + 0.220E+3, 0.860E+2, 0.19349000E+1, 0.00000000E+0, 0.13139837E+4, 0.220E+3, 0.870E+2, + 0.19349000E+1, 0.00000000E+0, 0.12471871E+4, 0.220E+3, 0.880E+2, 0.19349000E+1, 0.00000000E+0, + 0.10925678E+4, 0.220E+3, 0.890E+2, 0.19349000E+1, 0.00000000E+0, 0.97093620E+3, 0.220E+3, + 0.900E+2, 0.19349000E+1, 0.00000000E+0, 0.96877080E+3, 0.220E+3, 0.910E+2, 0.19349000E+1, + 0.00000000E+0, 0.93774220E+3, 0.220E+3, 0.920E+2, 0.19349000E+1, 0.00000000E+0, 0.97203520E+3, + 0.220E+3, 0.930E+2, 0.19349000E+1, 0.00000000E+0, 0.94020330E+3, 0.220E+3, 0.940E+2, + 0.19349000E+1, 0.00000000E+0, 0.50236800E+2, 0.220E+3, 0.101E+3, 0.19349000E+1, 0.00000000E+0, + 0.16890090E+3, 0.220E+3, 0.103E+3, 0.19349000E+1, 0.98650000E+0, 0.21431710E+3, 0.220E+3, + 0.104E+3, 0.19349000E+1, 0.98080000E+0, 0.16007340E+3, 0.220E+3, 0.105E+3, 0.19349000E+1, + 0.97060000E+0, 0.11882550E+3, 0.220E+3, 0.106E+3, 0.19349000E+1, 0.98680000E+0, 0.81252500E+2, + 0.220E+3, 0.107E+3, 0.19349000E+1, 0.99440000E+0, 0.58342300E+2, 0.220E+3, 0.108E+3, + 0.19349000E+1, 0.99250000E+0, 0.39404800E+2, 0.220E+3, 0.109E+3, 0.19349000E+1, 0.99820000E+0, + 0.24782230E+3, 0.220E+3, 0.111E+3, 0.19349000E+1, 0.96840000E+0, 0.38413080E+3, 0.220E+3, + 0.112E+3, 0.19349000E+1, 0.96280000E+0, 0.38485550E+3, 0.220E+3, 0.113E+3, 0.19349000E+1, + 0.96480000E+0, 0.30397250E+3, 0.220E+3, 0.114E+3, 0.19349000E+1, 0.95070000E+0, 0.24556540E+3, + 0.220E+3, 0.115E+3, 0.19349000E+1, 0.99470000E+0, 0.20560060E+3, 0.220E+3, 0.116E+3, + 0.19349000E+1, 0.99480000E+0, 0.16628780E+3, 0.220E+3, 0.117E+3, 0.19349000E+1, 0.99720000E+0, + 0.33777950E+3, 0.220E+3, 0.119E+3, 0.19349000E+1, 0.97670000E+0, 0.66406200E+3, 0.220E+3, + 0.120E+3, 0.19349000E+1, 0.98310000E+0, 0.33367800E+3, 0.220E+3, 0.121E+3, 0.19349000E+1, + 0.18627000E+1, 0.32184410E+3, 0.220E+3, 0.122E+3, 0.19349000E+1, 0.18299000E+1, 0.31546860E+3, + 0.220E+3, 0.123E+3, 0.19349000E+1, 0.19138000E+1, 0.31305380E+3, 0.220E+3, 0.124E+3, + 0.19349000E+1, 0.18269000E+1, 0.28580680E+3, 0.220E+3, 0.125E+3, 0.19349000E+1, 0.16406000E+1, + 0.26379300E+3, 0.220E+3, 0.126E+3, 0.19349000E+1, 0.16483000E+1, 0.25158410E+3, 0.220E+3, + 0.127E+3, 0.19349000E+1, 0.17149000E+1, 0.24611560E+3, 0.220E+3, 0.128E+3, 0.19349000E+1, + 0.17937000E+1, 0.24467160E+3, 0.220E+3, 0.129E+3, 0.19349000E+1, 0.95760000E+0, 0.22701180E+3, + 0.220E+3, 0.130E+3, 0.19349000E+1, 0.19419000E+1, 0.37966500E+3, 0.220E+3, 0.131E+3, + 0.19349000E+1, 0.96010000E+0, 0.32905540E+3, 0.220E+3, 0.132E+3, 0.19349000E+1, 0.94340000E+0, + 0.29186010E+3, 0.220E+3, 0.133E+3, 0.19349000E+1, 0.98890000E+0, 0.26450720E+3, 0.220E+3, + 0.134E+3, 0.19349000E+1, 0.99010000E+0, 0.23101070E+3, 0.220E+3, 0.135E+3, 0.19349000E+1, + 0.99740000E+0, 0.40165720E+3, 0.220E+3, 0.137E+3, 0.19349000E+1, 0.97380000E+0, 0.80869090E+3, + 0.220E+3, 0.138E+3, 0.19349000E+1, 0.98010000E+0, 0.60584530E+3, 0.220E+3, 0.139E+3, + 0.19349000E+1, 0.19153000E+1, 0.44149510E+3, 0.220E+3, 0.140E+3, 0.19349000E+1, 0.19355000E+1, + 0.44598950E+3, 0.220E+3, 0.141E+3, 0.19349000E+1, 0.19545000E+1, 0.41448110E+3, 0.220E+3, + 0.142E+3, 0.19349000E+1, 0.19420000E+1, 0.46957520E+3, 0.220E+3, 0.143E+3, 0.19349000E+1, + 0.16682000E+1, 0.35837320E+3, 0.220E+3, 0.144E+3, 0.19349000E+1, 0.18584000E+1, 0.33488270E+3, + 0.220E+3, 0.145E+3, 0.19349000E+1, 0.19003000E+1, 0.31039090E+3, 0.220E+3, 0.146E+3, + 0.19349000E+1, 0.18630000E+1, 0.30060940E+3, 0.220E+3, 0.147E+3, 0.19349000E+1, 0.96790000E+0, + 0.29569410E+3, 0.220E+3, 0.148E+3, 0.19349000E+1, 0.19539000E+1, 0.48167290E+3, 0.220E+3, + 0.149E+3, 0.19349000E+1, 0.96330000E+0, 0.43088530E+3, 0.220E+3, 0.150E+3, 0.19349000E+1, + 0.95140000E+0, 0.40023370E+3, 0.220E+3, 0.151E+3, 0.19349000E+1, 0.97490000E+0, 0.37637060E+3, + 0.220E+3, 0.152E+3, 0.19349000E+1, 0.98110000E+0, 0.34127320E+3, 0.220E+3, 0.153E+3, + 0.19349000E+1, 0.99680000E+0, 0.47105090E+3, 0.220E+3, 0.155E+3, 0.19349000E+1, 0.99090000E+0, + 0.10519461E+4, 0.220E+3, 0.156E+3, 0.19349000E+1, 0.97970000E+0, 0.76794120E+3, 0.220E+3, + 0.157E+3, 0.19349000E+1, 0.19373000E+1, 0.46904980E+3, 0.220E+3, 0.159E+3, 0.19349000E+1, + 0.29425000E+1, 0.45929190E+3, 0.220E+3, 0.160E+3, 0.19349000E+1, 0.29455000E+1, 0.44446290E+3, + 0.220E+3, 0.161E+3, 0.19349000E+1, 0.29413000E+1, 0.44738260E+3, 0.220E+3, 0.162E+3, + 0.19349000E+1, 0.29300000E+1, 0.43352520E+3, 0.220E+3, 0.163E+3, 0.19349000E+1, 0.18286000E+1, + 0.45052800E+3, 0.220E+3, 0.164E+3, 0.19349000E+1, 0.28732000E+1, 0.42251560E+3, 0.220E+3, + 0.165E+3, 0.19349000E+1, 0.29086000E+1, 0.43117490E+3, 0.220E+3, 0.166E+3, 0.19349000E+1, + 0.28965000E+1, 0.40047540E+3, 0.220E+3, 0.167E+3, 0.19349000E+1, 0.29242000E+1, 0.38885070E+3, + 0.220E+3, 0.168E+3, 0.19349000E+1, 0.29282000E+1, 0.38653820E+3, 0.220E+3, 0.169E+3, + 0.19349000E+1, 0.29246000E+1, 0.40739760E+3, 0.220E+3, 0.170E+3, 0.19349000E+1, 0.28482000E+1, + 0.37332130E+3, 0.220E+3, 0.171E+3, 0.19349000E+1, 0.29219000E+1, 0.51554770E+3, 0.220E+3, + 0.172E+3, 0.19349000E+1, 0.19254000E+1, 0.47526240E+3, 0.220E+3, 0.173E+3, 0.19349000E+1, + 0.19459000E+1, 0.43058420E+3, 0.220E+3, 0.174E+3, 0.19349000E+1, 0.19292000E+1, 0.43832070E+3, + 0.220E+3, 0.175E+3, 0.19349000E+1, 0.18104000E+1, 0.37753700E+3, 0.220E+3, 0.176E+3, + 0.19349000E+1, 0.18858000E+1, 0.35420050E+3, 0.220E+3, 0.177E+3, 0.19349000E+1, 0.18648000E+1, + 0.33773330E+3, 0.220E+3, 0.178E+3, 0.19349000E+1, 0.19188000E+1, 0.32285240E+3, 0.220E+3, + 0.179E+3, 0.19349000E+1, 0.98460000E+0, 0.31020900E+3, 0.220E+3, 0.180E+3, 0.19349000E+1, + 0.19896000E+1, 0.51564400E+3, 0.220E+3, 0.181E+3, 0.19349000E+1, 0.92670000E+0, 0.46487620E+3, + 0.220E+3, 0.182E+3, 0.19349000E+1, 0.93830000E+0, 0.44812230E+3, 0.220E+3, 0.183E+3, + 0.19349000E+1, 0.98200000E+0, 0.43387110E+3, 0.220E+3, 0.184E+3, 0.19349000E+1, 0.98150000E+0, + 0.40255590E+3, 0.220E+3, 0.185E+3, 0.19349000E+1, 0.99540000E+0, 0.53018890E+3, 0.220E+3, + 0.187E+3, 0.19349000E+1, 0.97050000E+0, 0.10398007E+4, 0.220E+3, 0.188E+3, 0.19349000E+1, + 0.96620000E+0, 0.55526920E+3, 0.220E+3, 0.189E+3, 0.19349000E+1, 0.29070000E+1, 0.64689110E+3, + 0.220E+3, 0.190E+3, 0.19349000E+1, 0.28844000E+1, 0.57609270E+3, 0.220E+3, 0.191E+3, + 0.19349000E+1, 0.28738000E+1, 0.50534480E+3, 0.220E+3, 0.192E+3, 0.19349000E+1, 0.28878000E+1, + 0.48542450E+3, 0.220E+3, 0.193E+3, 0.19349000E+1, 0.29095000E+1, 0.59584710E+3, 0.220E+3, + 0.194E+3, 0.19349000E+1, 0.19209000E+1, 0.13659980E+3, 0.220E+3, 0.204E+3, 0.19349000E+1, + 0.19697000E+1, 0.13359950E+3, 0.220E+3, 0.205E+3, 0.19349000E+1, 0.19441000E+1, 0.96055300E+2, + 0.220E+3, 0.206E+3, 0.19349000E+1, 0.19985000E+1, 0.76136500E+2, 0.220E+3, 0.207E+3, + 0.19349000E+1, 0.20143000E+1, 0.51242500E+2, 0.220E+3, 0.208E+3, 0.19349000E+1, 0.19887000E+1, + 0.24509830E+3, 0.220E+3, 0.212E+3, 0.19349000E+1, 0.19496000E+1, 0.29655720E+3, 0.220E+3, + 0.213E+3, 0.19349000E+1, 0.19311000E+1, 0.28198140E+3, 0.220E+3, 0.214E+3, 0.19349000E+1, + 0.19435000E+1, 0.24244540E+3, 0.220E+3, 0.215E+3, 0.19349000E+1, 0.20102000E+1, 0.20138950E+3, + 0.220E+3, 0.216E+3, 0.19349000E+1, 0.19903000E+1, 0.34333430E+3, 0.220E+3, 0.220E+3, + 0.19349000E+1, 0.19349000E+1, 0.29861500E+2, 0.221E+3, 0.100E+1, 0.28999000E+1, 0.91180000E+0, + 0.19430400E+2, 0.221E+3, 0.200E+1, 0.28999000E+1, 0.00000000E+0, 0.48195860E+3, 0.221E+3, + 0.300E+1, 0.28999000E+1, 0.00000000E+0, 0.27500610E+3, 0.221E+3, 0.400E+1, 0.28999000E+1, + 0.00000000E+0, 0.18324130E+3, 0.221E+3, 0.500E+1, 0.28999000E+1, 0.00000000E+0, 0.12261150E+3, + 0.221E+3, 0.600E+1, 0.28999000E+1, 0.00000000E+0, 0.85046400E+2, 0.221E+3, 0.700E+1, + 0.28999000E+1, 0.00000000E+0, 0.63983900E+2, 0.221E+3, 0.800E+1, 0.28999000E+1, 0.00000000E+0, + 0.48189200E+2, 0.221E+3, 0.900E+1, 0.28999000E+1, 0.00000000E+0, 0.36880000E+2, 0.221E+3, + 0.100E+2, 0.28999000E+1, 0.00000000E+0, 0.57574000E+3, 0.221E+3, 0.110E+2, 0.28999000E+1, + 0.00000000E+0, 0.43920300E+3, 0.221E+3, 0.120E+2, 0.28999000E+1, 0.00000000E+0, 0.40293570E+3, + 0.221E+3, 0.130E+2, 0.28999000E+1, 0.00000000E+0, 0.31526550E+3, 0.221E+3, 0.140E+2, + 0.28999000E+1, 0.00000000E+0, 0.24412340E+3, 0.221E+3, 0.150E+2, 0.28999000E+1, 0.00000000E+0, + 0.20154660E+3, 0.221E+3, 0.160E+2, 0.28999000E+1, 0.00000000E+0, 0.16374820E+3, 0.221E+3, + 0.170E+2, 0.28999000E+1, 0.00000000E+0, 0.13328650E+3, 0.221E+3, 0.180E+2, 0.28999000E+1, + 0.00000000E+0, 0.94339620E+3, 0.221E+3, 0.190E+2, 0.28999000E+1, 0.00000000E+0, 0.77413680E+3, + 0.221E+3, 0.200E+2, 0.28999000E+1, 0.00000000E+0, 0.63848690E+3, 0.221E+3, 0.210E+2, + 0.28999000E+1, 0.00000000E+0, 0.61524940E+3, 0.221E+3, 0.220E+2, 0.28999000E+1, 0.00000000E+0, + 0.56271800E+3, 0.221E+3, 0.230E+2, 0.28999000E+1, 0.00000000E+0, 0.44267360E+3, 0.221E+3, + 0.240E+2, 0.28999000E+1, 0.00000000E+0, 0.48359930E+3, 0.221E+3, 0.250E+2, 0.28999000E+1, + 0.00000000E+0, 0.37893660E+3, 0.221E+3, 0.260E+2, 0.28999000E+1, 0.00000000E+0, 0.40112950E+3, + 0.221E+3, 0.270E+2, 0.28999000E+1, 0.00000000E+0, 0.41378410E+3, 0.221E+3, 0.280E+2, + 0.28999000E+1, 0.00000000E+0, 0.31671020E+3, 0.221E+3, 0.290E+2, 0.28999000E+1, 0.00000000E+0, + 0.32428910E+3, 0.221E+3, 0.300E+2, 0.28999000E+1, 0.00000000E+0, 0.38481720E+3, 0.221E+3, + 0.310E+2, 0.28999000E+1, 0.00000000E+0, 0.33757610E+3, 0.221E+3, 0.320E+2, 0.28999000E+1, + 0.00000000E+0, 0.28630450E+3, 0.221E+3, 0.330E+2, 0.28999000E+1, 0.00000000E+0, 0.25587020E+3, + 0.221E+3, 0.340E+2, 0.28999000E+1, 0.00000000E+0, 0.22292560E+3, 0.221E+3, 0.350E+2, + 0.28999000E+1, 0.00000000E+0, 0.19302240E+3, 0.221E+3, 0.360E+2, 0.28999000E+1, 0.00000000E+0, + 0.10561444E+4, 0.221E+3, 0.370E+2, 0.28999000E+1, 0.00000000E+0, 0.92214300E+3, 0.221E+3, + 0.380E+2, 0.28999000E+1, 0.00000000E+0, 0.80504650E+3, 0.221E+3, 0.390E+2, 0.28999000E+1, + 0.00000000E+0, 0.72178370E+3, 0.221E+3, 0.400E+2, 0.28999000E+1, 0.00000000E+0, 0.65695460E+3, + 0.221E+3, 0.410E+2, 0.28999000E+1, 0.00000000E+0, 0.50523460E+3, 0.221E+3, 0.420E+2, + 0.28999000E+1, 0.00000000E+0, 0.56455600E+3, 0.221E+3, 0.430E+2, 0.28999000E+1, 0.00000000E+0, + 0.42826290E+3, 0.221E+3, 0.440E+2, 0.28999000E+1, 0.00000000E+0, 0.46853580E+3, 0.221E+3, + 0.450E+2, 0.28999000E+1, 0.00000000E+0, 0.43394840E+3, 0.221E+3, 0.460E+2, 0.28999000E+1, + 0.00000000E+0, 0.36150570E+3, 0.221E+3, 0.470E+2, 0.28999000E+1, 0.00000000E+0, 0.38172980E+3, + 0.221E+3, 0.480E+2, 0.28999000E+1, 0.00000000E+0, 0.48100660E+3, 0.221E+3, 0.490E+2, + 0.28999000E+1, 0.00000000E+0, 0.44306050E+3, 0.221E+3, 0.500E+2, 0.28999000E+1, 0.00000000E+0, + 0.39301150E+3, 0.221E+3, 0.510E+2, 0.28999000E+1, 0.00000000E+0, 0.36347770E+3, 0.221E+3, + 0.520E+2, 0.28999000E+1, 0.00000000E+0, 0.32743400E+3, 0.221E+3, 0.530E+2, 0.28999000E+1, + 0.00000000E+0, 0.29327410E+3, 0.221E+3, 0.540E+2, 0.28999000E+1, 0.00000000E+0, 0.12859957E+4, + 0.221E+3, 0.550E+2, 0.28999000E+1, 0.00000000E+0, 0.11762602E+4, 0.221E+3, 0.560E+2, + 0.28999000E+1, 0.00000000E+0, 0.10300975E+4, 0.221E+3, 0.570E+2, 0.28999000E+1, 0.00000000E+0, + 0.46446000E+3, 0.221E+3, 0.580E+2, 0.28999000E+1, 0.27991000E+1, 0.10408154E+4, 0.221E+3, + 0.590E+2, 0.28999000E+1, 0.00000000E+0, 0.99899710E+3, 0.221E+3, 0.600E+2, 0.28999000E+1, + 0.00000000E+0, 0.97382280E+3, 0.221E+3, 0.610E+2, 0.28999000E+1, 0.00000000E+0, 0.95069090E+3, + 0.221E+3, 0.620E+2, 0.28999000E+1, 0.00000000E+0, 0.93017500E+3, 0.221E+3, 0.630E+2, + 0.28999000E+1, 0.00000000E+0, 0.72811220E+3, 0.221E+3, 0.640E+2, 0.28999000E+1, 0.00000000E+0, + 0.82368220E+3, 0.221E+3, 0.650E+2, 0.28999000E+1, 0.00000000E+0, 0.79385410E+3, 0.221E+3, + 0.660E+2, 0.28999000E+1, 0.00000000E+0, 0.83837100E+3, 0.221E+3, 0.670E+2, 0.28999000E+1, + 0.00000000E+0, 0.82054230E+3, 0.221E+3, 0.680E+2, 0.28999000E+1, 0.00000000E+0, 0.80442380E+3, + 0.221E+3, 0.690E+2, 0.28999000E+1, 0.00000000E+0, 0.79518560E+3, 0.221E+3, 0.700E+2, + 0.28999000E+1, 0.00000000E+0, 0.66789240E+3, 0.221E+3, 0.710E+2, 0.28999000E+1, 0.00000000E+0, + 0.65462000E+3, 0.221E+3, 0.720E+2, 0.28999000E+1, 0.00000000E+0, 0.59577000E+3, 0.221E+3, + 0.730E+2, 0.28999000E+1, 0.00000000E+0, 0.50153070E+3, 0.221E+3, 0.740E+2, 0.28999000E+1, + 0.00000000E+0, 0.50981600E+3, 0.221E+3, 0.750E+2, 0.28999000E+1, 0.00000000E+0, 0.46083870E+3, + 0.221E+3, 0.760E+2, 0.28999000E+1, 0.00000000E+0, 0.42109420E+3, 0.221E+3, 0.770E+2, + 0.28999000E+1, 0.00000000E+0, 0.34866710E+3, 0.221E+3, 0.780E+2, 0.28999000E+1, 0.00000000E+0, + 0.32533860E+3, 0.221E+3, 0.790E+2, 0.28999000E+1, 0.00000000E+0, 0.33453100E+3, 0.221E+3, + 0.800E+2, 0.28999000E+1, 0.00000000E+0, 0.49268870E+3, 0.221E+3, 0.810E+2, 0.28999000E+1, + 0.00000000E+0, 0.48044970E+3, 0.221E+3, 0.820E+2, 0.28999000E+1, 0.00000000E+0, 0.43974760E+3, + 0.221E+3, 0.830E+2, 0.28999000E+1, 0.00000000E+0, 0.41833640E+3, 0.221E+3, 0.840E+2, + 0.28999000E+1, 0.00000000E+0, 0.38479250E+3, 0.221E+3, 0.850E+2, 0.28999000E+1, 0.00000000E+0, + 0.35151420E+3, 0.221E+3, 0.860E+2, 0.28999000E+1, 0.00000000E+0, 0.12112384E+4, 0.221E+3, + 0.870E+2, 0.28999000E+1, 0.00000000E+0, 0.11609837E+4, 0.221E+3, 0.880E+2, 0.28999000E+1, + 0.00000000E+0, 0.10231422E+4, 0.221E+3, 0.890E+2, 0.28999000E+1, 0.00000000E+0, 0.91552140E+3, + 0.221E+3, 0.900E+2, 0.28999000E+1, 0.00000000E+0, 0.91036450E+3, 0.221E+3, 0.910E+2, + 0.28999000E+1, 0.00000000E+0, 0.88134280E+3, 0.221E+3, 0.920E+2, 0.28999000E+1, 0.00000000E+0, + 0.90964690E+3, 0.221E+3, 0.930E+2, 0.28999000E+1, 0.00000000E+0, 0.88054330E+3, 0.221E+3, + 0.940E+2, 0.28999000E+1, 0.00000000E+0, 0.48492900E+2, 0.221E+3, 0.101E+3, 0.28999000E+1, + 0.00000000E+0, 0.15957150E+3, 0.221E+3, 0.103E+3, 0.28999000E+1, 0.98650000E+0, 0.20306780E+3, + 0.221E+3, 0.104E+3, 0.28999000E+1, 0.98080000E+0, 0.15370500E+3, 0.221E+3, 0.105E+3, + 0.28999000E+1, 0.97060000E+0, 0.11497100E+3, 0.221E+3, 0.106E+3, 0.28999000E+1, 0.98680000E+0, + 0.79258600E+2, 0.221E+3, 0.107E+3, 0.28999000E+1, 0.99440000E+0, 0.57280500E+2, 0.221E+3, + 0.108E+3, 0.28999000E+1, 0.99250000E+0, 0.38989900E+2, 0.221E+3, 0.109E+3, 0.28999000E+1, + 0.99820000E+0, 0.23346740E+3, 0.221E+3, 0.111E+3, 0.28999000E+1, 0.96840000E+0, 0.36145020E+3, + 0.221E+3, 0.112E+3, 0.28999000E+1, 0.96280000E+0, 0.36466680E+3, 0.221E+3, 0.113E+3, + 0.28999000E+1, 0.96480000E+0, 0.29100370E+3, 0.221E+3, 0.114E+3, 0.28999000E+1, 0.95070000E+0, + 0.23687400E+3, 0.221E+3, 0.115E+3, 0.28999000E+1, 0.99470000E+0, 0.19933220E+3, 0.221E+3, + 0.116E+3, 0.28999000E+1, 0.99480000E+0, 0.16205420E+3, 0.221E+3, 0.117E+3, 0.28999000E+1, + 0.99720000E+0, 0.32000430E+3, 0.221E+3, 0.119E+3, 0.28999000E+1, 0.97670000E+0, 0.61816760E+3, + 0.221E+3, 0.120E+3, 0.28999000E+1, 0.98310000E+0, 0.31880040E+3, 0.221E+3, 0.121E+3, + 0.28999000E+1, 0.18627000E+1, 0.30759130E+3, 0.221E+3, 0.122E+3, 0.28999000E+1, 0.18299000E+1, + 0.30144200E+3, 0.221E+3, 0.123E+3, 0.28999000E+1, 0.19138000E+1, 0.29881900E+3, 0.221E+3, + 0.124E+3, 0.28999000E+1, 0.18269000E+1, 0.27417030E+3, 0.221E+3, 0.125E+3, 0.28999000E+1, + 0.16406000E+1, 0.25341680E+3, 0.221E+3, 0.126E+3, 0.28999000E+1, 0.16483000E+1, 0.24168330E+3, + 0.221E+3, 0.127E+3, 0.28999000E+1, 0.17149000E+1, 0.23632960E+3, 0.221E+3, 0.128E+3, + 0.28999000E+1, 0.17937000E+1, 0.23403740E+3, 0.221E+3, 0.129E+3, 0.28999000E+1, 0.95760000E+0, + 0.21866030E+3, 0.221E+3, 0.130E+3, 0.28999000E+1, 0.19419000E+1, 0.36091960E+3, 0.221E+3, + 0.131E+3, 0.28999000E+1, 0.96010000E+0, 0.31533670E+3, 0.221E+3, 0.132E+3, 0.28999000E+1, + 0.94340000E+0, 0.28133310E+3, 0.221E+3, 0.133E+3, 0.28999000E+1, 0.98890000E+0, 0.25597460E+3, + 0.221E+3, 0.134E+3, 0.28999000E+1, 0.99010000E+0, 0.22452090E+3, 0.221E+3, 0.135E+3, + 0.28999000E+1, 0.99740000E+0, 0.38121510E+3, 0.221E+3, 0.137E+3, 0.28999000E+1, 0.97380000E+0, + 0.75216410E+3, 0.221E+3, 0.138E+3, 0.28999000E+1, 0.98010000E+0, 0.57086180E+3, 0.221E+3, + 0.139E+3, 0.28999000E+1, 0.19153000E+1, 0.42153880E+3, 0.221E+3, 0.140E+3, 0.28999000E+1, + 0.19355000E+1, 0.42572990E+3, 0.221E+3, 0.141E+3, 0.28999000E+1, 0.19545000E+1, 0.39634700E+3, + 0.221E+3, 0.142E+3, 0.28999000E+1, 0.19420000E+1, 0.44614920E+3, 0.221E+3, 0.143E+3, + 0.28999000E+1, 0.16682000E+1, 0.34429480E+3, 0.221E+3, 0.144E+3, 0.28999000E+1, 0.18584000E+1, + 0.32185830E+3, 0.221E+3, 0.145E+3, 0.28999000E+1, 0.19003000E+1, 0.29856920E+3, 0.221E+3, + 0.146E+3, 0.28999000E+1, 0.18630000E+1, 0.28894080E+3, 0.221E+3, 0.147E+3, 0.28999000E+1, + 0.96790000E+0, 0.28528140E+3, 0.221E+3, 0.148E+3, 0.28999000E+1, 0.19539000E+1, 0.45781840E+3, + 0.221E+3, 0.149E+3, 0.28999000E+1, 0.96330000E+0, 0.41239390E+3, 0.221E+3, 0.150E+3, + 0.28999000E+1, 0.95140000E+0, 0.38490810E+3, 0.221E+3, 0.151E+3, 0.28999000E+1, 0.97490000E+0, + 0.36314460E+3, 0.221E+3, 0.152E+3, 0.28999000E+1, 0.98110000E+0, 0.33053650E+3, 0.221E+3, + 0.153E+3, 0.28999000E+1, 0.99680000E+0, 0.44947740E+3, 0.221E+3, 0.155E+3, 0.28999000E+1, + 0.99090000E+0, 0.97596650E+3, 0.221E+3, 0.156E+3, 0.28999000E+1, 0.97970000E+0, 0.72280680E+3, + 0.221E+3, 0.157E+3, 0.28999000E+1, 0.19373000E+1, 0.45030760E+3, 0.221E+3, 0.159E+3, + 0.28999000E+1, 0.29425000E+1, 0.44096740E+3, 0.221E+3, 0.160E+3, 0.28999000E+1, 0.29455000E+1, + 0.42686830E+3, 0.221E+3, 0.161E+3, 0.28999000E+1, 0.29413000E+1, 0.42925270E+3, 0.221E+3, + 0.162E+3, 0.28999000E+1, 0.29300000E+1, 0.41458930E+3, 0.221E+3, 0.163E+3, 0.28999000E+1, + 0.18286000E+1, 0.43214410E+3, 0.221E+3, 0.164E+3, 0.28999000E+1, 0.28732000E+1, 0.40560400E+3, + 0.221E+3, 0.165E+3, 0.28999000E+1, 0.29086000E+1, 0.41317950E+3, 0.221E+3, 0.166E+3, + 0.28999000E+1, 0.28965000E+1, 0.38477440E+3, 0.221E+3, 0.167E+3, 0.28999000E+1, 0.29242000E+1, + 0.37372510E+3, 0.221E+3, 0.168E+3, 0.28999000E+1, 0.29282000E+1, 0.37141000E+3, 0.221E+3, + 0.169E+3, 0.28999000E+1, 0.29246000E+1, 0.39092160E+3, 0.221E+3, 0.170E+3, 0.28999000E+1, + 0.28482000E+1, 0.35888950E+3, 0.221E+3, 0.171E+3, 0.28999000E+1, 0.29219000E+1, 0.48998500E+3, + 0.221E+3, 0.172E+3, 0.28999000E+1, 0.19254000E+1, 0.45345540E+3, 0.221E+3, 0.173E+3, + 0.28999000E+1, 0.19459000E+1, 0.41248260E+3, 0.221E+3, 0.174E+3, 0.28999000E+1, 0.19292000E+1, + 0.41838190E+3, 0.221E+3, 0.175E+3, 0.28999000E+1, 0.18104000E+1, 0.36375220E+3, 0.221E+3, + 0.176E+3, 0.28999000E+1, 0.18858000E+1, 0.34171650E+3, 0.221E+3, 0.177E+3, 0.28999000E+1, + 0.18648000E+1, 0.32608130E+3, 0.221E+3, 0.178E+3, 0.28999000E+1, 0.19188000E+1, 0.31164840E+3, + 0.221E+3, 0.179E+3, 0.28999000E+1, 0.98460000E+0, 0.30046490E+3, 0.221E+3, 0.180E+3, + 0.28999000E+1, 0.19896000E+1, 0.49070860E+3, 0.221E+3, 0.181E+3, 0.28999000E+1, 0.92670000E+0, + 0.44539670E+3, 0.221E+3, 0.182E+3, 0.28999000E+1, 0.93830000E+0, 0.43091620E+3, 0.221E+3, + 0.183E+3, 0.28999000E+1, 0.98200000E+0, 0.41829040E+3, 0.221E+3, 0.184E+3, 0.28999000E+1, + 0.98150000E+0, 0.38946080E+3, 0.221E+3, 0.185E+3, 0.28999000E+1, 0.99540000E+0, 0.50612520E+3, + 0.221E+3, 0.187E+3, 0.28999000E+1, 0.97050000E+0, 0.96871930E+3, 0.221E+3, 0.188E+3, + 0.28999000E+1, 0.96620000E+0, 0.53300150E+3, 0.221E+3, 0.189E+3, 0.28999000E+1, 0.29070000E+1, + 0.61730540E+3, 0.221E+3, 0.190E+3, 0.28999000E+1, 0.28844000E+1, 0.55082530E+3, 0.221E+3, + 0.191E+3, 0.28999000E+1, 0.28738000E+1, 0.48540710E+3, 0.221E+3, 0.192E+3, 0.28999000E+1, + 0.28878000E+1, 0.46674110E+3, 0.221E+3, 0.193E+3, 0.28999000E+1, 0.29095000E+1, 0.56587940E+3, + 0.221E+3, 0.194E+3, 0.28999000E+1, 0.19209000E+1, 0.13129800E+3, 0.221E+3, 0.204E+3, + 0.28999000E+1, 0.19697000E+1, 0.12867160E+3, 0.221E+3, 0.205E+3, 0.28999000E+1, 0.19441000E+1, + 0.93360300E+2, 0.221E+3, 0.206E+3, 0.28999000E+1, 0.19985000E+1, 0.74329700E+2, 0.221E+3, + 0.207E+3, 0.28999000E+1, 0.20143000E+1, 0.50392000E+2, 0.221E+3, 0.208E+3, 0.28999000E+1, + 0.19887000E+1, 0.23400680E+3, 0.221E+3, 0.212E+3, 0.28999000E+1, 0.19496000E+1, 0.28286280E+3, + 0.221E+3, 0.213E+3, 0.28999000E+1, 0.19311000E+1, 0.27035480E+3, 0.221E+3, 0.214E+3, + 0.28999000E+1, 0.19435000E+1, 0.23372820E+3, 0.221E+3, 0.215E+3, 0.28999000E+1, 0.20102000E+1, + 0.19526710E+3, 0.221E+3, 0.216E+3, 0.28999000E+1, 0.19903000E+1, 0.32764580E+3, 0.221E+3, + 0.220E+3, 0.28999000E+1, 0.19349000E+1, 0.31398460E+3, 0.221E+3, 0.221E+3, 0.28999000E+1, + 0.28999000E+1, 0.30259300E+2, 0.222E+3, 0.100E+1, 0.38675000E+1, 0.91180000E+0, 0.19720500E+2, + 0.222E+3, 0.200E+1, 0.38675000E+1, 0.00000000E+0, 0.48620980E+3, 0.222E+3, 0.300E+1, + 0.38675000E+1, 0.00000000E+0, 0.27793710E+3, 0.222E+3, 0.400E+1, 0.38675000E+1, 0.00000000E+0, + 0.18540740E+3, 0.222E+3, 0.500E+1, 0.38675000E+1, 0.00000000E+0, 0.12418490E+3, 0.222E+3, + 0.600E+1, 0.38675000E+1, 0.00000000E+0, 0.86210900E+2, 0.222E+3, 0.700E+1, 0.38675000E+1, + 0.00000000E+0, 0.64903700E+2, 0.222E+3, 0.800E+1, 0.38675000E+1, 0.00000000E+0, 0.48913100E+2, + 0.222E+3, 0.900E+1, 0.38675000E+1, 0.00000000E+0, 0.37455400E+2, 0.222E+3, 0.100E+2, + 0.38675000E+1, 0.00000000E+0, 0.58090670E+3, 0.222E+3, 0.110E+2, 0.38675000E+1, 0.00000000E+0, + 0.44375570E+3, 0.222E+3, 0.120E+2, 0.38675000E+1, 0.00000000E+0, 0.40733310E+3, 0.222E+3, + 0.130E+2, 0.38675000E+1, 0.00000000E+0, 0.31895500E+3, 0.222E+3, 0.140E+2, 0.38675000E+1, + 0.00000000E+0, 0.24716030E+3, 0.222E+3, 0.150E+2, 0.38675000E+1, 0.00000000E+0, 0.20416200E+3, + 0.222E+3, 0.160E+2, 0.38675000E+1, 0.00000000E+0, 0.16596320E+3, 0.222E+3, 0.170E+2, + 0.38675000E+1, 0.00000000E+0, 0.13515860E+3, 0.222E+3, 0.180E+2, 0.38675000E+1, 0.00000000E+0, + 0.95162680E+3, 0.222E+3, 0.190E+2, 0.38675000E+1, 0.00000000E+0, 0.78176790E+3, 0.222E+3, + 0.200E+2, 0.38675000E+1, 0.00000000E+0, 0.64493880E+3, 0.222E+3, 0.210E+2, 0.38675000E+1, + 0.00000000E+0, 0.62162280E+3, 0.222E+3, 0.220E+2, 0.38675000E+1, 0.00000000E+0, 0.56863160E+3, + 0.222E+3, 0.230E+2, 0.38675000E+1, 0.00000000E+0, 0.44737630E+3, 0.222E+3, 0.240E+2, + 0.38675000E+1, 0.00000000E+0, 0.48878880E+3, 0.222E+3, 0.250E+2, 0.38675000E+1, 0.00000000E+0, + 0.38306060E+3, 0.222E+3, 0.260E+2, 0.38675000E+1, 0.00000000E+0, 0.40558090E+3, 0.222E+3, + 0.270E+2, 0.38675000E+1, 0.00000000E+0, 0.41831130E+3, 0.222E+3, 0.280E+2, 0.38675000E+1, + 0.00000000E+0, 0.32021980E+3, 0.222E+3, 0.290E+2, 0.38675000E+1, 0.00000000E+0, 0.32800010E+3, + 0.222E+3, 0.300E+2, 0.38675000E+1, 0.00000000E+0, 0.38913250E+3, 0.222E+3, 0.310E+2, + 0.38675000E+1, 0.00000000E+0, 0.34156270E+3, 0.222E+3, 0.320E+2, 0.38675000E+1, 0.00000000E+0, + 0.28985600E+3, 0.222E+3, 0.330E+2, 0.38675000E+1, 0.00000000E+0, 0.25914890E+3, 0.222E+3, + 0.340E+2, 0.38675000E+1, 0.00000000E+0, 0.22588180E+3, 0.222E+3, 0.350E+2, 0.38675000E+1, + 0.00000000E+0, 0.19566660E+3, 0.222E+3, 0.360E+2, 0.38675000E+1, 0.00000000E+0, 0.10654841E+4, + 0.222E+3, 0.370E+2, 0.38675000E+1, 0.00000000E+0, 0.93121720E+3, 0.222E+3, 0.380E+2, + 0.38675000E+1, 0.00000000E+0, 0.81333020E+3, 0.222E+3, 0.390E+2, 0.38675000E+1, 0.00000000E+0, + 0.72942430E+3, 0.222E+3, 0.400E+2, 0.38675000E+1, 0.00000000E+0, 0.66404520E+3, 0.222E+3, + 0.410E+2, 0.38675000E+1, 0.00000000E+0, 0.51089670E+3, 0.222E+3, 0.420E+2, 0.38675000E+1, + 0.00000000E+0, 0.57079220E+3, 0.222E+3, 0.430E+2, 0.38675000E+1, 0.00000000E+0, 0.43319140E+3, + 0.222E+3, 0.440E+2, 0.38675000E+1, 0.00000000E+0, 0.47389730E+3, 0.222E+3, 0.450E+2, + 0.38675000E+1, 0.00000000E+0, 0.43897520E+3, 0.222E+3, 0.460E+2, 0.38675000E+1, 0.00000000E+0, + 0.36571240E+3, 0.222E+3, 0.470E+2, 0.38675000E+1, 0.00000000E+0, 0.38622410E+3, 0.222E+3, + 0.480E+2, 0.38675000E+1, 0.00000000E+0, 0.48644970E+3, 0.222E+3, 0.490E+2, 0.38675000E+1, + 0.00000000E+0, 0.44827700E+3, 0.222E+3, 0.500E+2, 0.38675000E+1, 0.00000000E+0, 0.39783330E+3, + 0.222E+3, 0.510E+2, 0.38675000E+1, 0.00000000E+0, 0.36805570E+3, 0.222E+3, 0.520E+2, + 0.38675000E+1, 0.00000000E+0, 0.33168000E+3, 0.222E+3, 0.530E+2, 0.38675000E+1, 0.00000000E+0, + 0.29718710E+3, 0.222E+3, 0.540E+2, 0.38675000E+1, 0.00000000E+0, 0.12973700E+4, 0.222E+3, + 0.550E+2, 0.38675000E+1, 0.00000000E+0, 0.11876789E+4, 0.222E+3, 0.560E+2, 0.38675000E+1, + 0.00000000E+0, 0.10405570E+4, 0.222E+3, 0.570E+2, 0.38675000E+1, 0.00000000E+0, 0.47013410E+3, + 0.222E+3, 0.580E+2, 0.38675000E+1, 0.27991000E+1, 0.10511001E+4, 0.222E+3, 0.590E+2, + 0.38675000E+1, 0.00000000E+0, 0.10089483E+4, 0.222E+3, 0.600E+2, 0.38675000E+1, 0.00000000E+0, + 0.98354270E+3, 0.222E+3, 0.610E+2, 0.38675000E+1, 0.00000000E+0, 0.96019540E+3, 0.222E+3, + 0.620E+2, 0.38675000E+1, 0.00000000E+0, 0.93948900E+3, 0.222E+3, 0.630E+2, 0.38675000E+1, + 0.00000000E+0, 0.73579720E+3, 0.222E+3, 0.640E+2, 0.38675000E+1, 0.00000000E+0, 0.83177260E+3, + 0.222E+3, 0.650E+2, 0.38675000E+1, 0.00000000E+0, 0.80171120E+3, 0.222E+3, 0.660E+2, + 0.38675000E+1, 0.00000000E+0, 0.84685680E+3, 0.222E+3, 0.670E+2, 0.38675000E+1, 0.00000000E+0, + 0.82885550E+3, 0.222E+3, 0.680E+2, 0.38675000E+1, 0.00000000E+0, 0.81258600E+3, 0.222E+3, + 0.690E+2, 0.38675000E+1, 0.00000000E+0, 0.80323470E+3, 0.222E+3, 0.700E+2, 0.38675000E+1, + 0.00000000E+0, 0.67488900E+3, 0.222E+3, 0.710E+2, 0.38675000E+1, 0.00000000E+0, 0.66176650E+3, + 0.222E+3, 0.720E+2, 0.38675000E+1, 0.00000000E+0, 0.60245920E+3, 0.222E+3, 0.730E+2, + 0.38675000E+1, 0.00000000E+0, 0.50731550E+3, 0.222E+3, 0.740E+2, 0.38675000E+1, 0.00000000E+0, + 0.51574640E+3, 0.222E+3, 0.750E+2, 0.38675000E+1, 0.00000000E+0, 0.46633110E+3, 0.222E+3, + 0.760E+2, 0.38675000E+1, 0.00000000E+0, 0.42621440E+3, 0.222E+3, 0.770E+2, 0.38675000E+1, + 0.00000000E+0, 0.35302080E+3, 0.222E+3, 0.780E+2, 0.38675000E+1, 0.00000000E+0, 0.32944450E+3, + 0.222E+3, 0.790E+2, 0.38675000E+1, 0.00000000E+0, 0.33877410E+3, 0.222E+3, 0.800E+2, + 0.38675000E+1, 0.00000000E+0, 0.49837090E+3, 0.222E+3, 0.810E+2, 0.38675000E+1, 0.00000000E+0, + 0.48615110E+3, 0.222E+3, 0.820E+2, 0.38675000E+1, 0.00000000E+0, 0.44515370E+3, 0.222E+3, + 0.830E+2, 0.38675000E+1, 0.00000000E+0, 0.42359010E+3, 0.222E+3, 0.840E+2, 0.38675000E+1, + 0.00000000E+0, 0.38975590E+3, 0.222E+3, 0.850E+2, 0.38675000E+1, 0.00000000E+0, 0.35616530E+3, + 0.222E+3, 0.860E+2, 0.38675000E+1, 0.00000000E+0, 0.12224279E+4, 0.222E+3, 0.870E+2, + 0.38675000E+1, 0.00000000E+0, 0.11725376E+4, 0.222E+3, 0.880E+2, 0.38675000E+1, 0.00000000E+0, + 0.10337520E+4, 0.222E+3, 0.890E+2, 0.38675000E+1, 0.00000000E+0, 0.92548980E+3, 0.222E+3, + 0.900E+2, 0.38675000E+1, 0.00000000E+0, 0.92008400E+3, 0.222E+3, 0.910E+2, 0.38675000E+1, + 0.00000000E+0, 0.89076990E+3, 0.222E+3, 0.920E+2, 0.38675000E+1, 0.00000000E+0, 0.91911090E+3, + 0.222E+3, 0.930E+2, 0.38675000E+1, 0.00000000E+0, 0.88975190E+3, 0.222E+3, 0.940E+2, + 0.38675000E+1, 0.00000000E+0, 0.49098300E+2, 0.222E+3, 0.101E+3, 0.38675000E+1, 0.00000000E+0, + 0.16130130E+3, 0.222E+3, 0.103E+3, 0.38675000E+1, 0.98650000E+0, 0.20531340E+3, 0.222E+3, + 0.104E+3, 0.38675000E+1, 0.98080000E+0, 0.15556610E+3, 0.222E+3, 0.105E+3, 0.38675000E+1, + 0.97060000E+0, 0.11644710E+3, 0.222E+3, 0.106E+3, 0.38675000E+1, 0.98680000E+0, 0.80346400E+2, + 0.222E+3, 0.107E+3, 0.38675000E+1, 0.99440000E+0, 0.58112700E+2, 0.222E+3, 0.108E+3, + 0.38675000E+1, 0.99250000E+0, 0.39601500E+2, 0.222E+3, 0.109E+3, 0.38675000E+1, 0.99820000E+0, + 0.23597180E+3, 0.222E+3, 0.111E+3, 0.38675000E+1, 0.96840000E+0, 0.36527360E+3, 0.222E+3, + 0.112E+3, 0.38675000E+1, 0.96280000E+0, 0.36870140E+3, 0.222E+3, 0.113E+3, 0.38675000E+1, + 0.96480000E+0, 0.29444790E+3, 0.222E+3, 0.114E+3, 0.38675000E+1, 0.95070000E+0, 0.23982940E+3, + 0.222E+3, 0.115E+3, 0.38675000E+1, 0.99470000E+0, 0.20191810E+3, 0.222E+3, 0.116E+3, + 0.38675000E+1, 0.99480000E+0, 0.16424590E+3, 0.222E+3, 0.117E+3, 0.38675000E+1, 0.99720000E+0, + 0.32361900E+3, 0.222E+3, 0.119E+3, 0.38675000E+1, 0.97670000E+0, 0.62430360E+3, 0.222E+3, + 0.120E+3, 0.38675000E+1, 0.98310000E+0, 0.32257050E+3, 0.222E+3, 0.121E+3, 0.38675000E+1, + 0.18627000E+1, 0.31124080E+3, 0.222E+3, 0.122E+3, 0.38675000E+1, 0.18299000E+1, 0.30502010E+3, + 0.222E+3, 0.123E+3, 0.38675000E+1, 0.19138000E+1, 0.30234740E+3, 0.222E+3, 0.124E+3, + 0.38675000E+1, 0.18269000E+1, 0.27750050E+3, 0.222E+3, 0.125E+3, 0.38675000E+1, 0.16406000E+1, + 0.25652910E+3, 0.222E+3, 0.126E+3, 0.38675000E+1, 0.16483000E+1, 0.24465710E+3, 0.222E+3, + 0.127E+3, 0.38675000E+1, 0.17149000E+1, 0.23923230E+3, 0.222E+3, 0.128E+3, 0.38675000E+1, + 0.17937000E+1, 0.23685320E+3, 0.222E+3, 0.129E+3, 0.38675000E+1, 0.95760000E+0, 0.22139430E+3, + 0.222E+3, 0.130E+3, 0.38675000E+1, 0.19419000E+1, 0.36502390E+3, 0.222E+3, 0.131E+3, + 0.38675000E+1, 0.96010000E+0, 0.31910990E+3, 0.222E+3, 0.132E+3, 0.38675000E+1, 0.94340000E+0, + 0.28483450E+3, 0.222E+3, 0.133E+3, 0.38675000E+1, 0.98890000E+0, 0.25925390E+3, 0.222E+3, + 0.134E+3, 0.38675000E+1, 0.99010000E+0, 0.22749370E+3, 0.222E+3, 0.135E+3, 0.38675000E+1, + 0.99740000E+0, 0.38558300E+3, 0.222E+3, 0.137E+3, 0.38675000E+1, 0.97380000E+0, 0.75959780E+3, + 0.222E+3, 0.138E+3, 0.38675000E+1, 0.98010000E+0, 0.57702860E+3, 0.222E+3, 0.139E+3, + 0.38675000E+1, 0.19153000E+1, 0.42651570E+3, 0.222E+3, 0.140E+3, 0.38675000E+1, 0.19355000E+1, + 0.43076130E+3, 0.222E+3, 0.141E+3, 0.38675000E+1, 0.19545000E+1, 0.40109190E+3, 0.222E+3, + 0.142E+3, 0.38675000E+1, 0.19420000E+1, 0.45128660E+3, 0.222E+3, 0.143E+3, 0.38675000E+1, + 0.16682000E+1, 0.34854900E+3, 0.222E+3, 0.144E+3, 0.38675000E+1, 0.18584000E+1, 0.32585820E+3, + 0.222E+3, 0.145E+3, 0.38675000E+1, 0.19003000E+1, 0.30231120E+3, 0.222E+3, 0.146E+3, + 0.38675000E+1, 0.18630000E+1, 0.29255140E+3, 0.222E+3, 0.147E+3, 0.38675000E+1, 0.96790000E+0, + 0.28891110E+3, 0.222E+3, 0.148E+3, 0.38675000E+1, 0.19539000E+1, 0.46307770E+3, 0.222E+3, + 0.149E+3, 0.38675000E+1, 0.96330000E+0, 0.41733250E+3, 0.222E+3, 0.150E+3, 0.38675000E+1, + 0.95140000E+0, 0.38965780E+3, 0.222E+3, 0.151E+3, 0.38675000E+1, 0.97490000E+0, 0.36772520E+3, + 0.222E+3, 0.152E+3, 0.38675000E+1, 0.98110000E+0, 0.33481970E+3, 0.222E+3, 0.153E+3, + 0.38675000E+1, 0.99680000E+0, 0.45477990E+3, 0.222E+3, 0.155E+3, 0.38675000E+1, 0.99090000E+0, + 0.98542930E+3, 0.222E+3, 0.156E+3, 0.38675000E+1, 0.97970000E+0, 0.73055840E+3, 0.222E+3, + 0.157E+3, 0.38675000E+1, 0.19373000E+1, 0.45582340E+3, 0.222E+3, 0.159E+3, 0.38675000E+1, + 0.29425000E+1, 0.44637170E+3, 0.222E+3, 0.160E+3, 0.38675000E+1, 0.29455000E+1, 0.43211200E+3, + 0.222E+3, 0.161E+3, 0.38675000E+1, 0.29413000E+1, 0.43449190E+3, 0.222E+3, 0.162E+3, + 0.38675000E+1, 0.29300000E+1, 0.41956220E+3, 0.222E+3, 0.163E+3, 0.38675000E+1, 0.18286000E+1, + 0.43740200E+3, 0.222E+3, 0.164E+3, 0.38675000E+1, 0.28732000E+1, 0.41057030E+3, 0.222E+3, + 0.165E+3, 0.38675000E+1, 0.29086000E+1, 0.41818290E+3, 0.222E+3, 0.166E+3, 0.38675000E+1, + 0.28965000E+1, 0.38950840E+3, 0.222E+3, 0.167E+3, 0.38675000E+1, 0.29242000E+1, 0.37833210E+3, + 0.222E+3, 0.168E+3, 0.38675000E+1, 0.29282000E+1, 0.37597960E+3, 0.222E+3, 0.169E+3, + 0.38675000E+1, 0.29246000E+1, 0.39567790E+3, 0.222E+3, 0.170E+3, 0.38675000E+1, 0.28482000E+1, + 0.36331600E+3, 0.222E+3, 0.171E+3, 0.38675000E+1, 0.29219000E+1, 0.49559850E+3, 0.222E+3, + 0.172E+3, 0.38675000E+1, 0.19254000E+1, 0.45879570E+3, 0.222E+3, 0.173E+3, 0.38675000E+1, + 0.19459000E+1, 0.41747930E+3, 0.222E+3, 0.174E+3, 0.38675000E+1, 0.19292000E+1, 0.42334010E+3, + 0.222E+3, 0.175E+3, 0.38675000E+1, 0.18104000E+1, 0.36833170E+3, 0.222E+3, 0.176E+3, + 0.38675000E+1, 0.18858000E+1, 0.34606910E+3, 0.222E+3, 0.177E+3, 0.38675000E+1, 0.18648000E+1, + 0.33026610E+3, 0.222E+3, 0.178E+3, 0.38675000E+1, 0.19188000E+1, 0.31565750E+3, 0.222E+3, + 0.179E+3, 0.38675000E+1, 0.98460000E+0, 0.30440290E+3, 0.222E+3, 0.180E+3, 0.38675000E+1, + 0.19896000E+1, 0.49642620E+3, 0.222E+3, 0.181E+3, 0.38675000E+1, 0.92670000E+0, 0.45079950E+3, + 0.222E+3, 0.182E+3, 0.38675000E+1, 0.93830000E+0, 0.43625560E+3, 0.222E+3, 0.183E+3, + 0.38675000E+1, 0.98200000E+0, 0.42355850E+3, 0.222E+3, 0.184E+3, 0.38675000E+1, 0.98150000E+0, + 0.39448330E+3, 0.222E+3, 0.185E+3, 0.38675000E+1, 0.99540000E+0, 0.51210760E+3, 0.222E+3, + 0.187E+3, 0.38675000E+1, 0.97050000E+0, 0.97841480E+3, 0.222E+3, 0.188E+3, 0.38675000E+1, + 0.96620000E+0, 0.53951560E+3, 0.222E+3, 0.189E+3, 0.38675000E+1, 0.29070000E+1, 0.62459130E+3, + 0.222E+3, 0.190E+3, 0.38675000E+1, 0.28844000E+1, 0.55742270E+3, 0.222E+3, 0.191E+3, + 0.38675000E+1, 0.28738000E+1, 0.49140260E+3, 0.222E+3, 0.192E+3, 0.38675000E+1, 0.28878000E+1, + 0.47254630E+3, 0.222E+3, 0.193E+3, 0.38675000E+1, 0.29095000E+1, 0.57240170E+3, 0.222E+3, + 0.194E+3, 0.38675000E+1, 0.19209000E+1, 0.13288810E+3, 0.222E+3, 0.204E+3, 0.38675000E+1, + 0.19697000E+1, 0.13026620E+3, 0.222E+3, 0.205E+3, 0.38675000E+1, 0.19441000E+1, 0.94601300E+2, + 0.222E+3, 0.206E+3, 0.38675000E+1, 0.19985000E+1, 0.75360900E+2, 0.222E+3, 0.207E+3, + 0.38675000E+1, 0.20143000E+1, 0.51141000E+2, 0.222E+3, 0.208E+3, 0.38675000E+1, 0.19887000E+1, + 0.23672460E+3, 0.222E+3, 0.212E+3, 0.38675000E+1, 0.19496000E+1, 0.28613170E+3, 0.222E+3, + 0.213E+3, 0.38675000E+1, 0.19311000E+1, 0.27358870E+3, 0.222E+3, 0.214E+3, 0.38675000E+1, + 0.19435000E+1, 0.23663740E+3, 0.222E+3, 0.215E+3, 0.38675000E+1, 0.20102000E+1, 0.19780370E+3, + 0.222E+3, 0.216E+3, 0.38675000E+1, 0.19903000E+1, 0.33148510E+3, 0.222E+3, 0.220E+3, + 0.38675000E+1, 0.19349000E+1, 0.31775890E+3, 0.222E+3, 0.221E+3, 0.38675000E+1, 0.28999000E+1, + 0.32158900E+3, 0.222E+3, 0.222E+3, 0.38675000E+1, 0.38675000E+1, 0.27688000E+2, 0.223E+3, + 0.100E+1, 0.29110000E+1, 0.91180000E+0, 0.18112700E+2, 0.223E+3, 0.200E+1, 0.29110000E+1, + 0.00000000E+0, 0.44829230E+3, 0.223E+3, 0.300E+1, 0.29110000E+1, 0.00000000E+0, 0.25437670E+3, + 0.223E+3, 0.400E+1, 0.29110000E+1, 0.00000000E+0, 0.16952210E+3, 0.223E+3, 0.500E+1, + 0.29110000E+1, 0.00000000E+0, 0.11361290E+3, 0.223E+3, 0.600E+1, 0.29110000E+1, 0.00000000E+0, + 0.78976100E+2, 0.223E+3, 0.700E+1, 0.29110000E+1, 0.00000000E+0, 0.59544500E+2, 0.223E+3, + 0.800E+1, 0.29110000E+1, 0.00000000E+0, 0.44949300E+2, 0.223E+3, 0.900E+1, 0.29110000E+1, + 0.00000000E+0, 0.34478900E+2, 0.223E+3, 0.100E+2, 0.29110000E+1, 0.00000000E+0, 0.53544830E+3, + 0.223E+3, 0.110E+2, 0.29110000E+1, 0.00000000E+0, 0.40656420E+3, 0.223E+3, 0.120E+2, + 0.29110000E+1, 0.00000000E+0, 0.37280190E+3, 0.223E+3, 0.130E+2, 0.29110000E+1, 0.00000000E+0, + 0.29163180E+3, 0.223E+3, 0.140E+2, 0.29110000E+1, 0.00000000E+0, 0.22598490E+3, 0.223E+3, + 0.150E+2, 0.29110000E+1, 0.00000000E+0, 0.18676650E+3, 0.223E+3, 0.160E+2, 0.29110000E+1, + 0.00000000E+0, 0.15194160E+3, 0.223E+3, 0.170E+2, 0.29110000E+1, 0.00000000E+0, 0.12386350E+3, + 0.223E+3, 0.180E+2, 0.29110000E+1, 0.00000000E+0, 0.87974450E+3, 0.223E+3, 0.190E+2, + 0.29110000E+1, 0.00000000E+0, 0.71816300E+3, 0.223E+3, 0.200E+2, 0.29110000E+1, 0.00000000E+0, + 0.59186950E+3, 0.223E+3, 0.210E+2, 0.29110000E+1, 0.00000000E+0, 0.57022820E+3, 0.223E+3, + 0.220E+2, 0.29110000E+1, 0.00000000E+0, 0.52146020E+3, 0.223E+3, 0.230E+2, 0.29110000E+1, + 0.00000000E+0, 0.41056610E+3, 0.223E+3, 0.240E+2, 0.29110000E+1, 0.00000000E+0, 0.44806980E+3, + 0.223E+3, 0.250E+2, 0.29110000E+1, 0.00000000E+0, 0.35139390E+3, 0.223E+3, 0.260E+2, + 0.29110000E+1, 0.00000000E+0, 0.37151490E+3, 0.223E+3, 0.270E+2, 0.29110000E+1, 0.00000000E+0, + 0.38325570E+3, 0.223E+3, 0.280E+2, 0.29110000E+1, 0.00000000E+0, 0.29368160E+3, 0.223E+3, + 0.290E+2, 0.29110000E+1, 0.00000000E+0, 0.30031300E+3, 0.223E+3, 0.300E+2, 0.29110000E+1, + 0.00000000E+0, 0.35624690E+3, 0.223E+3, 0.310E+2, 0.29110000E+1, 0.00000000E+0, 0.31241300E+3, + 0.223E+3, 0.320E+2, 0.29110000E+1, 0.00000000E+0, 0.26507780E+3, 0.223E+3, 0.330E+2, + 0.29110000E+1, 0.00000000E+0, 0.23705770E+3, 0.223E+3, 0.340E+2, 0.29110000E+1, 0.00000000E+0, + 0.20672770E+3, 0.223E+3, 0.350E+2, 0.29110000E+1, 0.00000000E+0, 0.17919650E+3, 0.223E+3, + 0.360E+2, 0.29110000E+1, 0.00000000E+0, 0.98495040E+3, 0.223E+3, 0.370E+2, 0.29110000E+1, + 0.00000000E+0, 0.85590050E+3, 0.223E+3, 0.380E+2, 0.29110000E+1, 0.00000000E+0, 0.74643350E+3, + 0.223E+3, 0.390E+2, 0.29110000E+1, 0.00000000E+0, 0.66896670E+3, 0.223E+3, 0.400E+2, + 0.29110000E+1, 0.00000000E+0, 0.60884420E+3, 0.223E+3, 0.410E+2, 0.29110000E+1, 0.00000000E+0, + 0.46840590E+3, 0.223E+3, 0.420E+2, 0.29110000E+1, 0.00000000E+0, 0.52332230E+3, 0.223E+3, + 0.430E+2, 0.29110000E+1, 0.00000000E+0, 0.39715580E+3, 0.223E+3, 0.440E+2, 0.29110000E+1, + 0.00000000E+0, 0.43421760E+3, 0.223E+3, 0.450E+2, 0.29110000E+1, 0.00000000E+0, 0.40217500E+3, + 0.223E+3, 0.460E+2, 0.29110000E+1, 0.00000000E+0, 0.33544360E+3, 0.223E+3, 0.470E+2, + 0.29110000E+1, 0.00000000E+0, 0.35382270E+3, 0.223E+3, 0.480E+2, 0.29110000E+1, 0.00000000E+0, + 0.44577660E+3, 0.223E+3, 0.490E+2, 0.29110000E+1, 0.00000000E+0, 0.41035180E+3, 0.223E+3, + 0.500E+2, 0.29110000E+1, 0.00000000E+0, 0.36401890E+3, 0.223E+3, 0.510E+2, 0.29110000E+1, + 0.00000000E+0, 0.33677190E+3, 0.223E+3, 0.520E+2, 0.29110000E+1, 0.00000000E+0, 0.30354590E+3, + 0.223E+3, 0.530E+2, 0.29110000E+1, 0.00000000E+0, 0.27207950E+3, 0.223E+3, 0.540E+2, + 0.29110000E+1, 0.00000000E+0, 0.11997581E+4, 0.223E+3, 0.550E+2, 0.29110000E+1, 0.00000000E+0, + 0.10926689E+4, 0.223E+3, 0.560E+2, 0.29110000E+1, 0.00000000E+0, 0.95571690E+3, 0.223E+3, + 0.570E+2, 0.29110000E+1, 0.00000000E+0, 0.43033410E+3, 0.223E+3, 0.580E+2, 0.29110000E+1, + 0.27991000E+1, 0.96666190E+3, 0.223E+3, 0.590E+2, 0.29110000E+1, 0.00000000E+0, 0.92752540E+3, + 0.223E+3, 0.600E+2, 0.29110000E+1, 0.00000000E+0, 0.90407530E+3, 0.223E+3, 0.610E+2, + 0.29110000E+1, 0.00000000E+0, 0.88253130E+3, 0.223E+3, 0.620E+2, 0.29110000E+1, 0.00000000E+0, + 0.86342100E+3, 0.223E+3, 0.630E+2, 0.29110000E+1, 0.00000000E+0, 0.67551500E+3, 0.223E+3, + 0.640E+2, 0.29110000E+1, 0.00000000E+0, 0.76607760E+3, 0.223E+3, 0.650E+2, 0.29110000E+1, + 0.00000000E+0, 0.73824890E+3, 0.223E+3, 0.660E+2, 0.29110000E+1, 0.00000000E+0, 0.77789910E+3, + 0.223E+3, 0.670E+2, 0.29110000E+1, 0.00000000E+0, 0.76130400E+3, 0.223E+3, 0.680E+2, + 0.29110000E+1, 0.00000000E+0, 0.74629430E+3, 0.223E+3, 0.690E+2, 0.29110000E+1, 0.00000000E+0, + 0.73772690E+3, 0.223E+3, 0.700E+2, 0.29110000E+1, 0.00000000E+0, 0.61945150E+3, 0.223E+3, + 0.710E+2, 0.29110000E+1, 0.00000000E+0, 0.60644790E+3, 0.223E+3, 0.720E+2, 0.29110000E+1, + 0.00000000E+0, 0.55185300E+3, 0.223E+3, 0.730E+2, 0.29110000E+1, 0.00000000E+0, 0.46484330E+3, + 0.223E+3, 0.740E+2, 0.29110000E+1, 0.00000000E+0, 0.47240710E+3, 0.223E+3, 0.750E+2, + 0.29110000E+1, 0.00000000E+0, 0.42706310E+3, 0.223E+3, 0.760E+2, 0.29110000E+1, 0.00000000E+0, + 0.39030550E+3, 0.223E+3, 0.770E+2, 0.29110000E+1, 0.00000000E+0, 0.32344940E+3, 0.223E+3, + 0.780E+2, 0.29110000E+1, 0.00000000E+0, 0.30191160E+3, 0.223E+3, 0.790E+2, 0.29110000E+1, + 0.00000000E+0, 0.31033530E+3, 0.223E+3, 0.800E+2, 0.29110000E+1, 0.00000000E+0, 0.45700230E+3, + 0.223E+3, 0.810E+2, 0.29110000E+1, 0.00000000E+0, 0.44528620E+3, 0.223E+3, 0.820E+2, + 0.29110000E+1, 0.00000000E+0, 0.40750360E+3, 0.223E+3, 0.830E+2, 0.29110000E+1, 0.00000000E+0, + 0.38771530E+3, 0.223E+3, 0.840E+2, 0.29110000E+1, 0.00000000E+0, 0.35676420E+3, 0.223E+3, + 0.850E+2, 0.29110000E+1, 0.00000000E+0, 0.32609510E+3, 0.223E+3, 0.860E+2, 0.29110000E+1, + 0.00000000E+0, 0.11286750E+4, 0.223E+3, 0.870E+2, 0.29110000E+1, 0.00000000E+0, 0.10779350E+4, + 0.223E+3, 0.880E+2, 0.29110000E+1, 0.00000000E+0, 0.94892310E+3, 0.223E+3, 0.890E+2, + 0.29110000E+1, 0.00000000E+0, 0.84862350E+3, 0.223E+3, 0.900E+2, 0.29110000E+1, 0.00000000E+0, + 0.84446350E+3, 0.223E+3, 0.910E+2, 0.29110000E+1, 0.00000000E+0, 0.81754620E+3, 0.223E+3, + 0.920E+2, 0.29110000E+1, 0.00000000E+0, 0.84421690E+3, 0.223E+3, 0.930E+2, 0.29110000E+1, + 0.00000000E+0, 0.81709710E+3, 0.223E+3, 0.940E+2, 0.29110000E+1, 0.00000000E+0, 0.44884200E+2, + 0.223E+3, 0.101E+3, 0.29110000E+1, 0.00000000E+0, 0.14764100E+3, 0.223E+3, 0.103E+3, + 0.29110000E+1, 0.98650000E+0, 0.18795310E+3, 0.223E+3, 0.104E+3, 0.29110000E+1, 0.98080000E+0, + 0.14227280E+3, 0.223E+3, 0.105E+3, 0.29110000E+1, 0.97060000E+0, 0.10657110E+3, 0.223E+3, + 0.106E+3, 0.29110000E+1, 0.98680000E+0, 0.73627500E+2, 0.223E+3, 0.107E+3, 0.29110000E+1, + 0.99440000E+0, 0.53340000E+2, 0.223E+3, 0.108E+3, 0.29110000E+1, 0.99250000E+0, 0.36451300E+2, + 0.223E+3, 0.109E+3, 0.29110000E+1, 0.99820000E+0, 0.21618670E+3, 0.223E+3, 0.111E+3, + 0.29110000E+1, 0.96840000E+0, 0.33467830E+3, 0.223E+3, 0.112E+3, 0.29110000E+1, 0.96280000E+0, + 0.33741280E+3, 0.223E+3, 0.113E+3, 0.29110000E+1, 0.96480000E+0, 0.26924130E+3, 0.223E+3, + 0.114E+3, 0.29110000E+1, 0.95070000E+0, 0.21930330E+3, 0.223E+3, 0.115E+3, 0.29110000E+1, + 0.99470000E+0, 0.18472410E+3, 0.223E+3, 0.116E+3, 0.29110000E+1, 0.99480000E+0, 0.15037570E+3, + 0.223E+3, 0.117E+3, 0.29110000E+1, 0.99720000E+0, 0.29674310E+3, 0.223E+3, 0.119E+3, + 0.29110000E+1, 0.97670000E+0, 0.57423510E+3, 0.223E+3, 0.120E+3, 0.29110000E+1, 0.98310000E+0, + 0.29523740E+3, 0.223E+3, 0.121E+3, 0.29110000E+1, 0.18627000E+1, 0.28494970E+3, 0.223E+3, + 0.122E+3, 0.29110000E+1, 0.18299000E+1, 0.27927550E+3, 0.223E+3, 0.123E+3, 0.29110000E+1, + 0.19138000E+1, 0.27688190E+3, 0.223E+3, 0.124E+3, 0.29110000E+1, 0.18269000E+1, 0.25393700E+3, + 0.223E+3, 0.125E+3, 0.29110000E+1, 0.16406000E+1, 0.23476650E+3, 0.223E+3, 0.126E+3, + 0.29110000E+1, 0.16483000E+1, 0.22394370E+3, 0.223E+3, 0.127E+3, 0.29110000E+1, 0.17149000E+1, + 0.21899430E+3, 0.223E+3, 0.128E+3, 0.29110000E+1, 0.17937000E+1, 0.21692030E+3, 0.223E+3, + 0.129E+3, 0.29110000E+1, 0.95760000E+0, 0.20259800E+3, 0.223E+3, 0.130E+3, 0.29110000E+1, + 0.19419000E+1, 0.33410780E+3, 0.223E+3, 0.131E+3, 0.29110000E+1, 0.96010000E+0, 0.29187130E+3, + 0.223E+3, 0.132E+3, 0.29110000E+1, 0.94340000E+0, 0.26049700E+3, 0.223E+3, 0.133E+3, + 0.29110000E+1, 0.98890000E+0, 0.23715920E+3, 0.223E+3, 0.134E+3, 0.29110000E+1, 0.99010000E+0, + 0.20820220E+3, 0.223E+3, 0.135E+3, 0.29110000E+1, 0.99740000E+0, 0.35359290E+3, 0.223E+3, + 0.137E+3, 0.29110000E+1, 0.97380000E+0, 0.69913020E+3, 0.223E+3, 0.138E+3, 0.29110000E+1, + 0.98010000E+0, 0.52968240E+3, 0.223E+3, 0.139E+3, 0.29110000E+1, 0.19153000E+1, 0.39060560E+3, + 0.223E+3, 0.140E+3, 0.29110000E+1, 0.19355000E+1, 0.39448540E+3, 0.223E+3, 0.141E+3, + 0.29110000E+1, 0.19545000E+1, 0.36737500E+3, 0.223E+3, 0.142E+3, 0.29110000E+1, 0.19420000E+1, + 0.41382300E+3, 0.223E+3, 0.143E+3, 0.29110000E+1, 0.16682000E+1, 0.31915840E+3, 0.223E+3, + 0.144E+3, 0.29110000E+1, 0.18584000E+1, 0.29845770E+3, 0.223E+3, 0.145E+3, 0.29110000E+1, + 0.19003000E+1, 0.27694720E+3, 0.223E+3, 0.146E+3, 0.29110000E+1, 0.18630000E+1, 0.26803530E+3, + 0.223E+3, 0.147E+3, 0.29110000E+1, 0.96790000E+0, 0.26453140E+3, 0.223E+3, 0.148E+3, + 0.29110000E+1, 0.19539000E+1, 0.42422720E+3, 0.223E+3, 0.149E+3, 0.29110000E+1, 0.96330000E+0, + 0.38198180E+3, 0.223E+3, 0.150E+3, 0.29110000E+1, 0.95140000E+0, 0.35653490E+3, 0.223E+3, + 0.151E+3, 0.29110000E+1, 0.97490000E+0, 0.33646710E+3, 0.223E+3, 0.152E+3, 0.29110000E+1, + 0.98110000E+0, 0.30641230E+3, 0.223E+3, 0.153E+3, 0.29110000E+1, 0.99680000E+0, 0.41667550E+3, + 0.223E+3, 0.155E+3, 0.29110000E+1, 0.99090000E+0, 0.90813400E+3, 0.223E+3, 0.156E+3, + 0.29110000E+1, 0.97970000E+0, 0.67092080E+3, 0.223E+3, 0.157E+3, 0.29110000E+1, 0.19373000E+1, + 0.41723950E+3, 0.223E+3, 0.159E+3, 0.29110000E+1, 0.29425000E+1, 0.40858800E+3, 0.223E+3, + 0.160E+3, 0.29110000E+1, 0.29455000E+1, 0.39554120E+3, 0.223E+3, 0.161E+3, 0.29110000E+1, + 0.29413000E+1, 0.39776470E+3, 0.223E+3, 0.162E+3, 0.29110000E+1, 0.29300000E+1, 0.38425760E+3, + 0.223E+3, 0.163E+3, 0.29110000E+1, 0.18286000E+1, 0.40037930E+3, 0.223E+3, 0.164E+3, + 0.29110000E+1, 0.28732000E+1, 0.37581950E+3, 0.223E+3, 0.165E+3, 0.29110000E+1, 0.29086000E+1, + 0.38288660E+3, 0.223E+3, 0.166E+3, 0.29110000E+1, 0.28965000E+1, 0.35650840E+3, 0.223E+3, + 0.167E+3, 0.29110000E+1, 0.29242000E+1, 0.34627180E+3, 0.223E+3, 0.168E+3, 0.29110000E+1, + 0.29282000E+1, 0.34411550E+3, 0.223E+3, 0.169E+3, 0.29110000E+1, 0.29246000E+1, 0.36209870E+3, + 0.223E+3, 0.170E+3, 0.29110000E+1, 0.28482000E+1, 0.33249970E+3, 0.223E+3, 0.171E+3, + 0.29110000E+1, 0.29219000E+1, 0.45419310E+3, 0.223E+3, 0.172E+3, 0.29110000E+1, 0.19254000E+1, + 0.42031920E+3, 0.223E+3, 0.173E+3, 0.29110000E+1, 0.19459000E+1, 0.38236280E+3, 0.223E+3, + 0.174E+3, 0.29110000E+1, 0.19292000E+1, 0.38788720E+3, 0.223E+3, 0.175E+3, 0.29110000E+1, + 0.18104000E+1, 0.33726140E+3, 0.223E+3, 0.176E+3, 0.29110000E+1, 0.18858000E+1, 0.31693610E+3, + 0.223E+3, 0.177E+3, 0.29110000E+1, 0.18648000E+1, 0.30251590E+3, 0.223E+3, 0.178E+3, + 0.29110000E+1, 0.19188000E+1, 0.28922160E+3, 0.223E+3, 0.179E+3, 0.29110000E+1, 0.98460000E+0, + 0.27881840E+3, 0.223E+3, 0.180E+3, 0.29110000E+1, 0.19896000E+1, 0.45500920E+3, 0.223E+3, + 0.181E+3, 0.29110000E+1, 0.92670000E+0, 0.41279290E+3, 0.223E+3, 0.182E+3, 0.29110000E+1, + 0.93830000E+0, 0.39932210E+3, 0.223E+3, 0.183E+3, 0.29110000E+1, 0.98200000E+0, 0.38766700E+3, + 0.223E+3, 0.184E+3, 0.29110000E+1, 0.98150000E+0, 0.36107620E+3, 0.223E+3, 0.185E+3, + 0.29110000E+1, 0.99540000E+0, 0.46915130E+3, 0.223E+3, 0.187E+3, 0.29110000E+1, 0.97050000E+0, + 0.90055920E+3, 0.223E+3, 0.188E+3, 0.29110000E+1, 0.96620000E+0, 0.49379900E+3, 0.223E+3, + 0.189E+3, 0.29110000E+1, 0.29070000E+1, 0.57234950E+3, 0.223E+3, 0.190E+3, 0.29110000E+1, + 0.28844000E+1, 0.51099770E+3, 0.223E+3, 0.191E+3, 0.29110000E+1, 0.28738000E+1, 0.45000790E+3, + 0.223E+3, 0.192E+3, 0.29110000E+1, 0.28878000E+1, 0.43270840E+3, 0.223E+3, 0.193E+3, + 0.29110000E+1, 0.29095000E+1, 0.52512640E+3, 0.223E+3, 0.194E+3, 0.29110000E+1, 0.19209000E+1, + 0.12146010E+3, 0.223E+3, 0.204E+3, 0.29110000E+1, 0.19697000E+1, 0.11917710E+3, 0.223E+3, + 0.205E+3, 0.29110000E+1, 0.19441000E+1, 0.86606000E+2, 0.223E+3, 0.206E+3, 0.29110000E+1, + 0.19985000E+1, 0.69080900E+2, 0.223E+3, 0.207E+3, 0.29110000E+1, 0.20143000E+1, 0.46987500E+2, + 0.223E+3, 0.208E+3, 0.29110000E+1, 0.19887000E+1, 0.21643950E+3, 0.223E+3, 0.212E+3, + 0.29110000E+1, 0.19496000E+1, 0.26172830E+3, 0.223E+3, 0.213E+3, 0.29110000E+1, 0.19311000E+1, + 0.25015910E+3, 0.223E+3, 0.214E+3, 0.29110000E+1, 0.19435000E+1, 0.21641010E+3, 0.223E+3, + 0.215E+3, 0.29110000E+1, 0.20102000E+1, 0.18097100E+3, 0.223E+3, 0.216E+3, 0.29110000E+1, + 0.19903000E+1, 0.30339700E+3, 0.223E+3, 0.220E+3, 0.29110000E+1, 0.19349000E+1, 0.29073090E+3, + 0.223E+3, 0.221E+3, 0.29110000E+1, 0.28999000E+1, 0.29424170E+3, 0.223E+3, 0.222E+3, + 0.29110000E+1, 0.38675000E+1, 0.26933490E+3, 0.223E+3, 0.223E+3, 0.29110000E+1, 0.29110000E+1, + 0.21313400E+2, 0.224E+3, 0.100E+1, 0.10619100E+2, 0.91180000E+0, 0.14405100E+2, 0.224E+3, + 0.200E+1, 0.10619100E+2, 0.00000000E+0, 0.31428070E+3, 0.224E+3, 0.300E+1, 0.10619100E+2, + 0.00000000E+0, 0.18490790E+3, 0.224E+3, 0.400E+1, 0.10619100E+2, 0.00000000E+0, 0.12637360E+3, + 0.224E+3, 0.500E+1, 0.10619100E+2, 0.00000000E+0, 0.86546400E+2, 0.224E+3, 0.600E+1, + 0.10619100E+2, 0.00000000E+0, 0.61247100E+2, 0.224E+3, 0.700E+1, 0.10619100E+2, 0.00000000E+0, + 0.46813800E+2, 0.224E+3, 0.800E+1, 0.10619100E+2, 0.00000000E+0, 0.35781100E+2, 0.224E+3, + 0.900E+1, 0.10619100E+2, 0.00000000E+0, 0.27737200E+2, 0.224E+3, 0.100E+2, 0.10619100E+2, + 0.00000000E+0, 0.37649060E+3, 0.224E+3, 0.110E+2, 0.10619100E+2, 0.00000000E+0, 0.29367770E+3, + 0.224E+3, 0.120E+2, 0.10619100E+2, 0.00000000E+0, 0.27250150E+3, 0.224E+3, 0.130E+2, + 0.10619100E+2, 0.00000000E+0, 0.21680010E+3, 0.224E+3, 0.140E+2, 0.10619100E+2, 0.00000000E+0, + 0.17067670E+3, 0.224E+3, 0.150E+2, 0.10619100E+2, 0.00000000E+0, 0.14267950E+3, 0.224E+3, + 0.160E+2, 0.10619100E+2, 0.00000000E+0, 0.11742580E+3, 0.224E+3, 0.170E+2, 0.10619100E+2, + 0.00000000E+0, 0.96759300E+2, 0.224E+3, 0.180E+2, 0.10619100E+2, 0.00000000E+0, 0.61705660E+3, + 0.224E+3, 0.190E+2, 0.10619100E+2, 0.00000000E+0, 0.51377680E+3, 0.224E+3, 0.200E+2, + 0.10619100E+2, 0.00000000E+0, 0.42547450E+3, 0.224E+3, 0.210E+2, 0.10619100E+2, 0.00000000E+0, + 0.41213870E+3, 0.224E+3, 0.220E+2, 0.10619100E+2, 0.00000000E+0, 0.37806600E+3, 0.224E+3, + 0.230E+2, 0.10619100E+2, 0.00000000E+0, 0.29848940E+3, 0.224E+3, 0.240E+2, 0.10619100E+2, + 0.00000000E+0, 0.32635580E+3, 0.224E+3, 0.250E+2, 0.10619100E+2, 0.00000000E+0, 0.25682780E+3, + 0.224E+3, 0.260E+2, 0.10619100E+2, 0.00000000E+0, 0.27263010E+3, 0.224E+3, 0.270E+2, + 0.10619100E+2, 0.00000000E+0, 0.28029770E+3, 0.224E+3, 0.280E+2, 0.10619100E+2, 0.00000000E+0, + 0.21550230E+3, 0.224E+3, 0.290E+2, 0.10619100E+2, 0.00000000E+0, 0.22196560E+3, 0.224E+3, + 0.300E+2, 0.10619100E+2, 0.00000000E+0, 0.26215300E+3, 0.224E+3, 0.310E+2, 0.10619100E+2, + 0.00000000E+0, 0.23279920E+3, 0.224E+3, 0.320E+2, 0.10619100E+2, 0.00000000E+0, 0.20004860E+3, + 0.224E+3, 0.330E+2, 0.10619100E+2, 0.00000000E+0, 0.18047050E+3, 0.224E+3, 0.340E+2, + 0.10619100E+2, 0.00000000E+0, 0.15887040E+3, 0.224E+3, 0.350E+2, 0.10619100E+2, 0.00000000E+0, + 0.13897880E+3, 0.224E+3, 0.360E+2, 0.10619100E+2, 0.00000000E+0, 0.69273590E+3, 0.224E+3, + 0.370E+2, 0.10619100E+2, 0.00000000E+0, 0.61235490E+3, 0.224E+3, 0.380E+2, 0.10619100E+2, + 0.00000000E+0, 0.53890290E+3, 0.224E+3, 0.390E+2, 0.10619100E+2, 0.00000000E+0, 0.48594470E+3, + 0.224E+3, 0.400E+2, 0.10619100E+2, 0.00000000E+0, 0.44423280E+3, 0.224E+3, 0.410E+2, + 0.10619100E+2, 0.00000000E+0, 0.34481050E+3, 0.224E+3, 0.420E+2, 0.10619100E+2, 0.00000000E+0, + 0.38391860E+3, 0.224E+3, 0.430E+2, 0.10619100E+2, 0.00000000E+0, 0.29422580E+3, 0.224E+3, + 0.440E+2, 0.10619100E+2, 0.00000000E+0, 0.32113840E+3, 0.224E+3, 0.450E+2, 0.10619100E+2, + 0.00000000E+0, 0.29830140E+3, 0.224E+3, 0.460E+2, 0.10619100E+2, 0.00000000E+0, 0.24916130E+3, + 0.224E+3, 0.470E+2, 0.10619100E+2, 0.00000000E+0, 0.26345110E+3, 0.224E+3, 0.480E+2, + 0.10619100E+2, 0.00000000E+0, 0.32878360E+3, 0.224E+3, 0.490E+2, 0.10619100E+2, 0.00000000E+0, + 0.30551080E+3, 0.224E+3, 0.500E+2, 0.10619100E+2, 0.00000000E+0, 0.27385520E+3, 0.224E+3, + 0.510E+2, 0.10619100E+2, 0.00000000E+0, 0.25510770E+3, 0.224E+3, 0.520E+2, 0.10619100E+2, + 0.00000000E+0, 0.23174840E+3, 0.224E+3, 0.530E+2, 0.10619100E+2, 0.00000000E+0, 0.20936220E+3, + 0.224E+3, 0.540E+2, 0.10619100E+2, 0.00000000E+0, 0.84446350E+3, 0.224E+3, 0.550E+2, + 0.10619100E+2, 0.00000000E+0, 0.78008380E+3, 0.224E+3, 0.560E+2, 0.10619100E+2, 0.00000000E+0, + 0.68834330E+3, 0.224E+3, 0.570E+2, 0.10619100E+2, 0.00000000E+0, 0.32346600E+3, 0.224E+3, + 0.580E+2, 0.10619100E+2, 0.27991000E+1, 0.69246670E+3, 0.224E+3, 0.590E+2, 0.10619100E+2, + 0.00000000E+0, 0.66535710E+3, 0.224E+3, 0.600E+2, 0.10619100E+2, 0.00000000E+0, 0.64877270E+3, + 0.224E+3, 0.610E+2, 0.10619100E+2, 0.00000000E+0, 0.63350050E+3, 0.224E+3, 0.620E+2, + 0.10619100E+2, 0.00000000E+0, 0.61995990E+3, 0.224E+3, 0.630E+2, 0.10619100E+2, 0.00000000E+0, + 0.49059980E+3, 0.224E+3, 0.640E+2, 0.10619100E+2, 0.00000000E+0, 0.54884660E+3, 0.224E+3, + 0.650E+2, 0.10619100E+2, 0.00000000E+0, 0.52980690E+3, 0.224E+3, 0.660E+2, 0.10619100E+2, + 0.00000000E+0, 0.55970160E+3, 0.224E+3, 0.670E+2, 0.10619100E+2, 0.00000000E+0, 0.54785030E+3, + 0.224E+3, 0.680E+2, 0.10619100E+2, 0.00000000E+0, 0.53720110E+3, 0.224E+3, 0.690E+2, + 0.10619100E+2, 0.00000000E+0, 0.53075810E+3, 0.224E+3, 0.700E+2, 0.10619100E+2, 0.00000000E+0, + 0.44908170E+3, 0.224E+3, 0.710E+2, 0.10619100E+2, 0.00000000E+0, 0.44357620E+3, 0.224E+3, + 0.720E+2, 0.10619100E+2, 0.00000000E+0, 0.40628410E+3, 0.224E+3, 0.730E+2, 0.10619100E+2, + 0.00000000E+0, 0.34453870E+3, 0.224E+3, 0.740E+2, 0.10619100E+2, 0.00000000E+0, 0.35083400E+3, + 0.224E+3, 0.750E+2, 0.10619100E+2, 0.00000000E+0, 0.31905950E+3, 0.224E+3, 0.760E+2, + 0.10619100E+2, 0.00000000E+0, 0.29307050E+3, 0.224E+3, 0.770E+2, 0.10619100E+2, 0.00000000E+0, + 0.24455970E+3, 0.224E+3, 0.780E+2, 0.10619100E+2, 0.00000000E+0, 0.22890260E+3, 0.224E+3, + 0.790E+2, 0.10619100E+2, 0.00000000E+0, 0.23555590E+3, 0.224E+3, 0.800E+2, 0.10619100E+2, + 0.00000000E+0, 0.33874020E+3, 0.224E+3, 0.810E+2, 0.10619100E+2, 0.00000000E+0, 0.33222990E+3, + 0.224E+3, 0.820E+2, 0.10619100E+2, 0.00000000E+0, 0.30674920E+3, 0.224E+3, 0.830E+2, + 0.10619100E+2, 0.00000000E+0, 0.29347990E+3, 0.224E+3, 0.840E+2, 0.10619100E+2, 0.00000000E+0, + 0.27198150E+3, 0.224E+3, 0.850E+2, 0.10619100E+2, 0.00000000E+0, 0.25033250E+3, 0.224E+3, + 0.860E+2, 0.10619100E+2, 0.00000000E+0, 0.80027390E+3, 0.224E+3, 0.870E+2, 0.10619100E+2, + 0.00000000E+0, 0.77336630E+3, 0.224E+3, 0.880E+2, 0.10619100E+2, 0.00000000E+0, 0.68635790E+3, + 0.224E+3, 0.890E+2, 0.10619100E+2, 0.00000000E+0, 0.62032700E+3, 0.224E+3, 0.900E+2, + 0.10619100E+2, 0.00000000E+0, 0.61475560E+3, 0.224E+3, 0.910E+2, 0.10619100E+2, 0.00000000E+0, + 0.59538630E+3, 0.224E+3, 0.920E+2, 0.10619100E+2, 0.00000000E+0, 0.61108390E+3, 0.224E+3, + 0.930E+2, 0.10619100E+2, 0.00000000E+0, 0.59208300E+3, 0.224E+3, 0.940E+2, 0.10619100E+2, + 0.00000000E+0, 0.33942700E+2, 0.224E+3, 0.101E+3, 0.10619100E+2, 0.00000000E+0, 0.10775270E+3, + 0.224E+3, 0.103E+3, 0.10619100E+2, 0.98650000E+0, 0.13789190E+3, 0.224E+3, 0.104E+3, + 0.10619100E+2, 0.98080000E+0, 0.10672440E+3, 0.224E+3, 0.105E+3, 0.10619100E+2, 0.97060000E+0, + 0.81233500E+2, 0.224E+3, 0.106E+3, 0.10619100E+2, 0.98680000E+0, 0.57176600E+2, 0.224E+3, + 0.107E+3, 0.10619100E+2, 0.99440000E+0, 0.42104600E+2, 0.224E+3, 0.108E+3, 0.10619100E+2, + 0.99250000E+0, 0.29392300E+2, 0.224E+3, 0.109E+3, 0.10619100E+2, 0.99820000E+0, 0.15738300E+3, + 0.224E+3, 0.111E+3, 0.10619100E+2, 0.96840000E+0, 0.24300490E+3, 0.224E+3, 0.112E+3, + 0.10619100E+2, 0.96280000E+0, 0.24743720E+3, 0.224E+3, 0.113E+3, 0.10619100E+2, 0.96480000E+0, + 0.20073440E+3, 0.224E+3, 0.114E+3, 0.10619100E+2, 0.95070000E+0, 0.16576280E+3, 0.224E+3, + 0.115E+3, 0.10619100E+2, 0.99470000E+0, 0.14110920E+3, 0.224E+3, 0.116E+3, 0.10619100E+2, + 0.99480000E+0, 0.11621000E+3, 0.224E+3, 0.117E+3, 0.10619100E+2, 0.99720000E+0, 0.21890440E+3, + 0.224E+3, 0.119E+3, 0.10619100E+2, 0.97670000E+0, 0.41206100E+3, 0.224E+3, 0.120E+3, + 0.10619100E+2, 0.98310000E+0, 0.22010130E+3, 0.224E+3, 0.121E+3, 0.10619100E+2, 0.18627000E+1, + 0.21264500E+3, 0.224E+3, 0.122E+3, 0.10619100E+2, 0.18299000E+1, 0.20840940E+3, 0.224E+3, + 0.123E+3, 0.10619100E+2, 0.19138000E+1, 0.20634260E+3, 0.224E+3, 0.124E+3, 0.10619100E+2, + 0.18269000E+1, 0.19055280E+3, 0.224E+3, 0.125E+3, 0.10619100E+2, 0.16406000E+1, 0.17666070E+3, + 0.224E+3, 0.126E+3, 0.10619100E+2, 0.16483000E+1, 0.16859690E+3, 0.224E+3, 0.127E+3, + 0.10619100E+2, 0.17149000E+1, 0.16478470E+3, 0.224E+3, 0.128E+3, 0.10619100E+2, 0.17937000E+1, + 0.16235450E+3, 0.224E+3, 0.129E+3, 0.10619100E+2, 0.95760000E+0, 0.15312950E+3, 0.224E+3, + 0.130E+3, 0.10619100E+2, 0.19419000E+1, 0.24667960E+3, 0.224E+3, 0.131E+3, 0.10619100E+2, + 0.96010000E+0, 0.21822070E+3, 0.224E+3, 0.132E+3, 0.10619100E+2, 0.94340000E+0, 0.19676310E+3, + 0.224E+3, 0.133E+3, 0.10619100E+2, 0.98890000E+0, 0.18053650E+3, 0.224E+3, 0.134E+3, + 0.10619100E+2, 0.99010000E+0, 0.15993620E+3, 0.224E+3, 0.135E+3, 0.10619100E+2, 0.99740000E+0, + 0.26178690E+3, 0.224E+3, 0.137E+3, 0.10619100E+2, 0.97380000E+0, 0.50151140E+3, 0.224E+3, + 0.138E+3, 0.10619100E+2, 0.98010000E+0, 0.38709820E+3, 0.224E+3, 0.139E+3, 0.10619100E+2, + 0.19153000E+1, 0.29122970E+3, 0.224E+3, 0.140E+3, 0.10619100E+2, 0.19355000E+1, 0.29411860E+3, + 0.224E+3, 0.141E+3, 0.10619100E+2, 0.19545000E+1, 0.27484220E+3, 0.224E+3, 0.142E+3, + 0.10619100E+2, 0.19420000E+1, 0.30675850E+3, 0.224E+3, 0.143E+3, 0.10619100E+2, 0.16682000E+1, + 0.24066050E+3, 0.224E+3, 0.144E+3, 0.10619100E+2, 0.18584000E+1, 0.22538880E+3, 0.224E+3, + 0.145E+3, 0.10619100E+2, 0.19003000E+1, 0.20959760E+3, 0.224E+3, 0.146E+3, 0.10619100E+2, + 0.18630000E+1, 0.20266840E+3, 0.224E+3, 0.147E+3, 0.10619100E+2, 0.96790000E+0, 0.20093810E+3, + 0.224E+3, 0.148E+3, 0.10619100E+2, 0.19539000E+1, 0.31400260E+3, 0.224E+3, 0.149E+3, + 0.10619100E+2, 0.96330000E+0, 0.28561070E+3, 0.224E+3, 0.150E+3, 0.10619100E+2, 0.95140000E+0, + 0.26862910E+3, 0.224E+3, 0.151E+3, 0.10619100E+2, 0.97490000E+0, 0.25497950E+3, 0.224E+3, + 0.152E+3, 0.10619100E+2, 0.98110000E+0, 0.23389400E+3, 0.224E+3, 0.153E+3, 0.10619100E+2, + 0.99680000E+0, 0.31070160E+3, 0.224E+3, 0.155E+3, 0.10619100E+2, 0.99090000E+0, 0.64956240E+3, + 0.224E+3, 0.156E+3, 0.10619100E+2, 0.97970000E+0, 0.48969530E+3, 0.224E+3, 0.157E+3, + 0.10619100E+2, 0.19373000E+1, 0.31384690E+3, 0.224E+3, 0.159E+3, 0.10619100E+2, 0.29425000E+1, + 0.30738260E+3, 0.224E+3, 0.160E+3, 0.10619100E+2, 0.29455000E+1, 0.29775220E+3, 0.224E+3, + 0.161E+3, 0.10619100E+2, 0.29413000E+1, 0.29895830E+3, 0.224E+3, 0.162E+3, 0.10619100E+2, + 0.29300000E+1, 0.28752360E+3, 0.224E+3, 0.163E+3, 0.10619100E+2, 0.18286000E+1, 0.30066880E+3, + 0.224E+3, 0.164E+3, 0.10619100E+2, 0.28732000E+1, 0.28267060E+3, 0.224E+3, 0.165E+3, + 0.10619100E+2, 0.29086000E+1, 0.28721540E+3, 0.224E+3, 0.166E+3, 0.10619100E+2, 0.28965000E+1, + 0.26848670E+3, 0.224E+3, 0.167E+3, 0.10619100E+2, 0.29242000E+1, 0.26090960E+3, 0.224E+3, + 0.168E+3, 0.10619100E+2, 0.29282000E+1, 0.25915780E+3, 0.224E+3, 0.169E+3, 0.10619100E+2, + 0.29246000E+1, 0.27191140E+3, 0.224E+3, 0.170E+3, 0.10619100E+2, 0.28482000E+1, 0.25057300E+3, + 0.224E+3, 0.171E+3, 0.10619100E+2, 0.29219000E+1, 0.33624450E+3, 0.224E+3, 0.172E+3, + 0.10619100E+2, 0.19254000E+1, 0.31321870E+3, 0.224E+3, 0.173E+3, 0.10619100E+2, 0.19459000E+1, + 0.28691560E+3, 0.224E+3, 0.174E+3, 0.10619100E+2, 0.19292000E+1, 0.28946620E+3, 0.224E+3, + 0.175E+3, 0.10619100E+2, 0.18104000E+1, 0.25557530E+3, 0.224E+3, 0.176E+3, 0.10619100E+2, + 0.18858000E+1, 0.24090600E+3, 0.224E+3, 0.177E+3, 0.10619100E+2, 0.18648000E+1, 0.23039700E+3, + 0.224E+3, 0.178E+3, 0.10619100E+2, 0.19188000E+1, 0.22040320E+3, 0.224E+3, 0.179E+3, + 0.10619100E+2, 0.98460000E+0, 0.21352200E+3, 0.224E+3, 0.180E+3, 0.10619100E+2, 0.19896000E+1, + 0.33805130E+3, 0.224E+3, 0.181E+3, 0.10619100E+2, 0.92670000E+0, 0.30969410E+3, 0.224E+3, + 0.182E+3, 0.10619100E+2, 0.93830000E+0, 0.30120530E+3, 0.224E+3, 0.183E+3, 0.10619100E+2, + 0.98200000E+0, 0.29366450E+3, 0.224E+3, 0.184E+3, 0.10619100E+2, 0.98150000E+0, 0.27525520E+3, + 0.224E+3, 0.185E+3, 0.10619100E+2, 0.99540000E+0, 0.34998930E+3, 0.224E+3, 0.187E+3, + 0.10619100E+2, 0.97050000E+0, 0.64793370E+3, 0.224E+3, 0.188E+3, 0.10619100E+2, 0.96620000E+0, + 0.37121200E+3, 0.224E+3, 0.189E+3, 0.10619100E+2, 0.29070000E+1, 0.42672840E+3, 0.224E+3, + 0.190E+3, 0.10619100E+2, 0.28844000E+1, 0.38254780E+3, 0.224E+3, 0.191E+3, 0.10619100E+2, + 0.28738000E+1, 0.33923950E+3, 0.224E+3, 0.192E+3, 0.10619100E+2, 0.28878000E+1, 0.32676380E+3, + 0.224E+3, 0.193E+3, 0.10619100E+2, 0.29095000E+1, 0.38936500E+3, 0.224E+3, 0.194E+3, + 0.10619100E+2, 0.19209000E+1, 0.91098500E+2, 0.224E+3, 0.204E+3, 0.10619100E+2, 0.19697000E+1, + 0.89961000E+2, 0.224E+3, 0.205E+3, 0.10619100E+2, 0.19441000E+1, 0.66613100E+2, 0.224E+3, + 0.206E+3, 0.10619100E+2, 0.19985000E+1, 0.53772600E+2, 0.224E+3, 0.207E+3, 0.10619100E+2, + 0.20143000E+1, 0.37302400E+2, 0.224E+3, 0.208E+3, 0.10619100E+2, 0.19887000E+1, 0.16055540E+3, + 0.224E+3, 0.212E+3, 0.10619100E+2, 0.19496000E+1, 0.19398150E+3, 0.224E+3, 0.213E+3, + 0.10619100E+2, 0.19311000E+1, 0.18700360E+3, 0.224E+3, 0.214E+3, 0.10619100E+2, 0.19435000E+1, + 0.16347330E+3, 0.224E+3, 0.215E+3, 0.10619100E+2, 0.20102000E+1, 0.13829440E+3, 0.224E+3, + 0.216E+3, 0.10619100E+2, 0.19903000E+1, 0.22568810E+3, 0.224E+3, 0.220E+3, 0.10619100E+2, + 0.19349000E+1, 0.21764940E+3, 0.224E+3, 0.221E+3, 0.10619100E+2, 0.28999000E+1, 0.22041700E+3, + 0.224E+3, 0.222E+3, 0.10619100E+2, 0.38675000E+1, 0.20186410E+3, 0.224E+3, 0.223E+3, + 0.10619100E+2, 0.29110000E+1, 0.15334350E+3, 0.224E+3, 0.224E+3, 0.10619100E+2, 0.10619100E+2, + 0.18469400E+2, 0.225E+3, 0.100E+1, 0.98849000E+1, 0.91180000E+0, 0.12698500E+2, 0.225E+3, + 0.200E+1, 0.98849000E+1, 0.00000000E+0, 0.25656890E+3, 0.225E+3, 0.300E+1, 0.98849000E+1, + 0.00000000E+0, 0.15476870E+3, 0.225E+3, 0.400E+1, 0.98849000E+1, 0.00000000E+0, 0.10748660E+3, + 0.225E+3, 0.500E+1, 0.98849000E+1, 0.00000000E+0, 0.74551100E+2, 0.225E+3, 0.600E+1, + 0.98849000E+1, 0.00000000E+0, 0.53282800E+2, 0.225E+3, 0.700E+1, 0.98849000E+1, 0.00000000E+0, + 0.41023700E+2, 0.225E+3, 0.800E+1, 0.98849000E+1, 0.00000000E+0, 0.31558200E+2, 0.225E+3, + 0.900E+1, 0.98849000E+1, 0.00000000E+0, 0.24595700E+2, 0.225E+3, 0.100E+2, 0.98849000E+1, + 0.00000000E+0, 0.30795570E+3, 0.225E+3, 0.110E+2, 0.98849000E+1, 0.00000000E+0, 0.24475170E+3, + 0.225E+3, 0.120E+2, 0.98849000E+1, 0.00000000E+0, 0.22891250E+3, 0.225E+3, 0.130E+2, + 0.98849000E+1, 0.00000000E+0, 0.18409450E+3, 0.225E+3, 0.140E+2, 0.98849000E+1, 0.00000000E+0, + 0.14631750E+3, 0.225E+3, 0.150E+2, 0.98849000E+1, 0.00000000E+0, 0.12311700E+3, 0.225E+3, + 0.160E+2, 0.98849000E+1, 0.00000000E+0, 0.10197460E+3, 0.225E+3, 0.170E+2, 0.98849000E+1, + 0.00000000E+0, 0.84510700E+2, 0.225E+3, 0.180E+2, 0.98849000E+1, 0.00000000E+0, 0.50386210E+3, + 0.225E+3, 0.190E+2, 0.98849000E+1, 0.00000000E+0, 0.42523820E+3, 0.225E+3, 0.200E+2, + 0.98849000E+1, 0.00000000E+0, 0.35332830E+3, 0.225E+3, 0.210E+2, 0.98849000E+1, 0.00000000E+0, + 0.34349160E+3, 0.225E+3, 0.220E+2, 0.98849000E+1, 0.00000000E+0, 0.31574920E+3, 0.225E+3, + 0.230E+2, 0.98849000E+1, 0.00000000E+0, 0.24968190E+3, 0.225E+3, 0.240E+2, 0.98849000E+1, + 0.00000000E+0, 0.27339370E+3, 0.225E+3, 0.250E+2, 0.98849000E+1, 0.00000000E+0, 0.21557380E+3, + 0.225E+3, 0.260E+2, 0.98849000E+1, 0.00000000E+0, 0.22950770E+3, 0.225E+3, 0.270E+2, + 0.98849000E+1, 0.00000000E+0, 0.23544990E+3, 0.225E+3, 0.280E+2, 0.98849000E+1, 0.00000000E+0, + 0.18134820E+3, 0.225E+3, 0.290E+2, 0.98849000E+1, 0.00000000E+0, 0.18772140E+3, 0.225E+3, + 0.300E+2, 0.98849000E+1, 0.00000000E+0, 0.22112170E+3, 0.225E+3, 0.310E+2, 0.98849000E+1, + 0.00000000E+0, 0.19793940E+3, 0.225E+3, 0.320E+2, 0.98849000E+1, 0.00000000E+0, 0.17140770E+3, + 0.225E+3, 0.330E+2, 0.98849000E+1, 0.00000000E+0, 0.15541540E+3, 0.225E+3, 0.340E+2, + 0.98849000E+1, 0.00000000E+0, 0.13754060E+3, 0.225E+3, 0.350E+2, 0.98849000E+1, 0.00000000E+0, + 0.12092190E+3, 0.225E+3, 0.360E+2, 0.98849000E+1, 0.00000000E+0, 0.56671690E+3, 0.225E+3, + 0.370E+2, 0.98849000E+1, 0.00000000E+0, 0.50680360E+3, 0.225E+3, 0.380E+2, 0.98849000E+1, + 0.00000000E+0, 0.44877680E+3, 0.225E+3, 0.390E+2, 0.98849000E+1, 0.00000000E+0, 0.40632670E+3, + 0.225E+3, 0.400E+2, 0.98849000E+1, 0.00000000E+0, 0.37252150E+3, 0.225E+3, 0.410E+2, + 0.98849000E+1, 0.00000000E+0, 0.29074940E+3, 0.225E+3, 0.420E+2, 0.98849000E+1, 0.00000000E+0, + 0.32305520E+3, 0.225E+3, 0.430E+2, 0.98849000E+1, 0.00000000E+0, 0.24907370E+3, 0.225E+3, + 0.440E+2, 0.98849000E+1, 0.00000000E+0, 0.27161880E+3, 0.225E+3, 0.450E+2, 0.98849000E+1, + 0.00000000E+0, 0.25275950E+3, 0.225E+3, 0.460E+2, 0.98849000E+1, 0.00000000E+0, 0.21123900E+3, + 0.225E+3, 0.470E+2, 0.98849000E+1, 0.00000000E+0, 0.22376440E+3, 0.225E+3, 0.480E+2, + 0.98849000E+1, 0.00000000E+0, 0.27763500E+3, 0.225E+3, 0.490E+2, 0.98849000E+1, 0.00000000E+0, + 0.25955840E+3, 0.225E+3, 0.500E+2, 0.98849000E+1, 0.00000000E+0, 0.23417500E+3, 0.225E+3, + 0.510E+2, 0.98849000E+1, 0.00000000E+0, 0.21904270E+3, 0.225E+3, 0.520E+2, 0.98849000E+1, + 0.00000000E+0, 0.19989240E+3, 0.225E+3, 0.530E+2, 0.98849000E+1, 0.00000000E+0, 0.18138370E+3, + 0.225E+3, 0.540E+2, 0.98849000E+1, 0.00000000E+0, 0.69130860E+3, 0.225E+3, 0.550E+2, + 0.98849000E+1, 0.00000000E+0, 0.64466000E+3, 0.225E+3, 0.560E+2, 0.98849000E+1, 0.00000000E+0, + 0.57226670E+3, 0.225E+3, 0.570E+2, 0.98849000E+1, 0.00000000E+0, 0.27639550E+3, 0.225E+3, + 0.580E+2, 0.98849000E+1, 0.27991000E+1, 0.57357140E+3, 0.225E+3, 0.590E+2, 0.98849000E+1, + 0.00000000E+0, 0.55161300E+3, 0.225E+3, 0.600E+2, 0.98849000E+1, 0.00000000E+0, 0.53799770E+3, + 0.225E+3, 0.610E+2, 0.98849000E+1, 0.00000000E+0, 0.52544060E+3, 0.225E+3, 0.620E+2, + 0.98849000E+1, 0.00000000E+0, 0.51431120E+3, 0.225E+3, 0.630E+2, 0.98849000E+1, 0.00000000E+0, + 0.41008630E+3, 0.225E+3, 0.640E+2, 0.98849000E+1, 0.00000000E+0, 0.45463510E+3, 0.225E+3, + 0.650E+2, 0.98849000E+1, 0.00000000E+0, 0.43940520E+3, 0.225E+3, 0.660E+2, 0.98849000E+1, + 0.00000000E+0, 0.46497300E+3, 0.225E+3, 0.670E+2, 0.98849000E+1, 0.00000000E+0, 0.45518120E+3, + 0.225E+3, 0.680E+2, 0.98849000E+1, 0.00000000E+0, 0.44642190E+3, 0.225E+3, 0.690E+2, + 0.98849000E+1, 0.00000000E+0, 0.44091820E+3, 0.225E+3, 0.700E+2, 0.98849000E+1, 0.00000000E+0, + 0.37499750E+3, 0.225E+3, 0.710E+2, 0.98849000E+1, 0.00000000E+0, 0.37259650E+3, 0.225E+3, + 0.720E+2, 0.98849000E+1, 0.00000000E+0, 0.34269950E+3, 0.225E+3, 0.730E+2, 0.98849000E+1, + 0.00000000E+0, 0.29180770E+3, 0.225E+3, 0.740E+2, 0.98849000E+1, 0.00000000E+0, 0.29752890E+3, + 0.225E+3, 0.750E+2, 0.98849000E+1, 0.00000000E+0, 0.27157970E+3, 0.225E+3, 0.760E+2, + 0.98849000E+1, 0.00000000E+0, 0.25022110E+3, 0.225E+3, 0.770E+2, 0.98849000E+1, 0.00000000E+0, + 0.20963300E+3, 0.225E+3, 0.780E+2, 0.98849000E+1, 0.00000000E+0, 0.19652040E+3, 0.225E+3, + 0.790E+2, 0.98849000E+1, 0.00000000E+0, 0.20240200E+3, 0.225E+3, 0.800E+2, 0.98849000E+1, + 0.00000000E+0, 0.28686700E+3, 0.225E+3, 0.810E+2, 0.98849000E+1, 0.00000000E+0, 0.28256650E+3, + 0.225E+3, 0.820E+2, 0.98849000E+1, 0.00000000E+0, 0.26234870E+3, 0.225E+3, 0.830E+2, + 0.98849000E+1, 0.00000000E+0, 0.25184810E+3, 0.225E+3, 0.840E+2, 0.98849000E+1, 0.00000000E+0, + 0.23438100E+3, 0.225E+3, 0.850E+2, 0.98849000E+1, 0.00000000E+0, 0.21658230E+3, 0.225E+3, + 0.860E+2, 0.98849000E+1, 0.00000000E+0, 0.65835450E+3, 0.225E+3, 0.870E+2, 0.98849000E+1, + 0.00000000E+0, 0.64123120E+3, 0.225E+3, 0.880E+2, 0.98849000E+1, 0.00000000E+0, 0.57224570E+3, + 0.225E+3, 0.890E+2, 0.98849000E+1, 0.00000000E+0, 0.52079400E+3, 0.225E+3, 0.900E+2, + 0.98849000E+1, 0.00000000E+0, 0.51467310E+3, 0.225E+3, 0.910E+2, 0.98849000E+1, 0.00000000E+0, + 0.49856630E+3, 0.225E+3, 0.920E+2, 0.98849000E+1, 0.00000000E+0, 0.50962770E+3, 0.225E+3, + 0.930E+2, 0.98849000E+1, 0.00000000E+0, 0.49413580E+3, 0.225E+3, 0.940E+2, 0.98849000E+1, + 0.00000000E+0, 0.29120800E+2, 0.225E+3, 0.101E+3, 0.98849000E+1, 0.00000000E+0, 0.90423100E+2, + 0.225E+3, 0.103E+3, 0.98849000E+1, 0.98650000E+0, 0.11610320E+3, 0.225E+3, 0.104E+3, + 0.98849000E+1, 0.98080000E+0, 0.91109100E+2, 0.225E+3, 0.105E+3, 0.98849000E+1, 0.97060000E+0, + 0.69988300E+2, 0.225E+3, 0.106E+3, 0.98849000E+1, 0.98680000E+0, 0.49769800E+2, 0.225E+3, + 0.107E+3, 0.98849000E+1, 0.99440000E+0, 0.36969200E+2, 0.225E+3, 0.108E+3, 0.98849000E+1, + 0.99250000E+0, 0.26092600E+2, 0.225E+3, 0.109E+3, 0.98849000E+1, 0.99820000E+0, 0.13182570E+3, + 0.225E+3, 0.111E+3, 0.98849000E+1, 0.96840000E+0, 0.20321730E+3, 0.225E+3, 0.112E+3, + 0.98849000E+1, 0.96280000E+0, 0.20829020E+3, 0.225E+3, 0.113E+3, 0.98849000E+1, 0.96480000E+0, + 0.17075150E+3, 0.225E+3, 0.114E+3, 0.98849000E+1, 0.95070000E+0, 0.14216740E+3, 0.225E+3, + 0.115E+3, 0.98849000E+1, 0.99470000E+0, 0.12175410E+3, 0.225E+3, 0.116E+3, 0.98849000E+1, + 0.99480000E+0, 0.10091430E+3, 0.225E+3, 0.117E+3, 0.98849000E+1, 0.99720000E+0, 0.18481700E+3, + 0.225E+3, 0.119E+3, 0.98849000E+1, 0.97670000E+0, 0.34176740E+3, 0.225E+3, 0.120E+3, + 0.98849000E+1, 0.98310000E+0, 0.18713640E+3, 0.225E+3, 0.121E+3, 0.98849000E+1, 0.18627000E+1, + 0.18091050E+3, 0.225E+3, 0.122E+3, 0.98849000E+1, 0.18299000E+1, 0.17729930E+3, 0.225E+3, + 0.123E+3, 0.98849000E+1, 0.19138000E+1, 0.17538670E+3, 0.225E+3, 0.124E+3, 0.98849000E+1, + 0.18269000E+1, 0.16268440E+3, 0.225E+3, 0.125E+3, 0.98849000E+1, 0.16406000E+1, 0.15107680E+3, + 0.225E+3, 0.126E+3, 0.98849000E+1, 0.16483000E+1, 0.14421590E+3, 0.225E+3, 0.127E+3, + 0.98849000E+1, 0.17149000E+1, 0.14090800E+3, 0.225E+3, 0.128E+3, 0.98849000E+1, 0.17937000E+1, + 0.13835720E+3, 0.225E+3, 0.129E+3, 0.98849000E+1, 0.95760000E+0, 0.13131000E+3, 0.225E+3, + 0.130E+3, 0.98849000E+1, 0.19419000E+1, 0.20851100E+3, 0.225E+3, 0.131E+3, 0.98849000E+1, + 0.96010000E+0, 0.18592460E+3, 0.225E+3, 0.132E+3, 0.98849000E+1, 0.94340000E+0, 0.16867800E+3, + 0.225E+3, 0.133E+3, 0.98849000E+1, 0.98890000E+0, 0.15546520E+3, 0.225E+3, 0.134E+3, + 0.98849000E+1, 0.99010000E+0, 0.13842960E+3, 0.225E+3, 0.135E+3, 0.98849000E+1, 0.99740000E+0, + 0.22151020E+3, 0.225E+3, 0.137E+3, 0.98849000E+1, 0.97380000E+0, 0.41583400E+3, 0.225E+3, + 0.138E+3, 0.98849000E+1, 0.98010000E+0, 0.32497510E+3, 0.225E+3, 0.139E+3, 0.98849000E+1, + 0.19153000E+1, 0.24759810E+3, 0.225E+3, 0.140E+3, 0.98849000E+1, 0.19355000E+1, 0.25002660E+3, + 0.225E+3, 0.141E+3, 0.98849000E+1, 0.19545000E+1, 0.23413150E+3, 0.225E+3, 0.142E+3, + 0.98849000E+1, 0.19420000E+1, 0.25980510E+3, 0.225E+3, 0.143E+3, 0.98849000E+1, 0.16682000E+1, + 0.20600200E+3, 0.225E+3, 0.144E+3, 0.98849000E+1, 0.18584000E+1, 0.19308940E+3, 0.225E+3, + 0.145E+3, 0.98849000E+1, 0.19003000E+1, 0.17978240E+3, 0.225E+3, 0.146E+3, 0.98849000E+1, + 0.18630000E+1, 0.17373810E+3, 0.225E+3, 0.147E+3, 0.98849000E+1, 0.96790000E+0, 0.17276980E+3, + 0.225E+3, 0.148E+3, 0.98849000E+1, 0.19539000E+1, 0.26575750E+3, 0.225E+3, 0.149E+3, + 0.98849000E+1, 0.96330000E+0, 0.24329840E+3, 0.225E+3, 0.150E+3, 0.98849000E+1, 0.95140000E+0, + 0.22991580E+3, 0.225E+3, 0.151E+3, 0.98849000E+1, 0.97490000E+0, 0.21898580E+3, 0.225E+3, + 0.152E+3, 0.98849000E+1, 0.98110000E+0, 0.20172290E+3, 0.225E+3, 0.153E+3, 0.98849000E+1, + 0.99680000E+0, 0.26411800E+3, 0.225E+3, 0.155E+3, 0.98849000E+1, 0.99090000E+0, 0.53758040E+3, + 0.225E+3, 0.156E+3, 0.98849000E+1, 0.97970000E+0, 0.41076200E+3, 0.225E+3, 0.157E+3, + 0.98849000E+1, 0.19373000E+1, 0.26829020E+3, 0.225E+3, 0.159E+3, 0.98849000E+1, 0.29425000E+1, + 0.26278540E+3, 0.225E+3, 0.160E+3, 0.98849000E+1, 0.29455000E+1, 0.25464690E+3, 0.225E+3, + 0.161E+3, 0.98849000E+1, 0.29413000E+1, 0.25543700E+3, 0.225E+3, 0.162E+3, 0.98849000E+1, + 0.29300000E+1, 0.24496120E+3, 0.225E+3, 0.163E+3, 0.98849000E+1, 0.18286000E+1, 0.25677460E+3, + 0.225E+3, 0.164E+3, 0.98849000E+1, 0.28732000E+1, 0.24162910E+3, 0.225E+3, 0.165E+3, + 0.98849000E+1, 0.29086000E+1, 0.24510920E+3, 0.225E+3, 0.166E+3, 0.98849000E+1, 0.28965000E+1, + 0.22968660E+3, 0.225E+3, 0.167E+3, 0.98849000E+1, 0.29242000E+1, 0.22327460E+3, 0.225E+3, + 0.168E+3, 0.98849000E+1, 0.29282000E+1, 0.22171170E+3, 0.225E+3, 0.169E+3, 0.98849000E+1, + 0.29246000E+1, 0.23223100E+3, 0.225E+3, 0.170E+3, 0.98849000E+1, 0.28482000E+1, 0.21445700E+3, + 0.225E+3, 0.171E+3, 0.98849000E+1, 0.29219000E+1, 0.28461080E+3, 0.225E+3, 0.172E+3, + 0.98849000E+1, 0.19254000E+1, 0.26619500E+3, 0.225E+3, 0.173E+3, 0.98849000E+1, 0.19459000E+1, + 0.24486880E+3, 0.225E+3, 0.174E+3, 0.98849000E+1, 0.19292000E+1, 0.24620160E+3, 0.225E+3, + 0.175E+3, 0.98849000E+1, 0.18104000E+1, 0.21942180E+3, 0.225E+3, 0.176E+3, 0.98849000E+1, + 0.18858000E+1, 0.20718460E+3, 0.225E+3, 0.177E+3, 0.98849000E+1, 0.18648000E+1, 0.19836510E+3, + 0.225E+3, 0.178E+3, 0.98849000E+1, 0.19188000E+1, 0.18980990E+3, 0.225E+3, 0.179E+3, + 0.98849000E+1, 0.98460000E+0, 0.18444130E+3, 0.225E+3, 0.180E+3, 0.98849000E+1, 0.19896000E+1, + 0.28672590E+3, 0.225E+3, 0.181E+3, 0.98849000E+1, 0.92670000E+0, 0.26430990E+3, 0.225E+3, + 0.182E+3, 0.98849000E+1, 0.93830000E+0, 0.25793290E+3, 0.225E+3, 0.183E+3, 0.98849000E+1, + 0.98200000E+0, 0.25212510E+3, 0.225E+3, 0.184E+3, 0.98849000E+1, 0.98150000E+0, 0.23719910E+3, + 0.225E+3, 0.185E+3, 0.98849000E+1, 0.99540000E+0, 0.29760870E+3, 0.225E+3, 0.187E+3, + 0.98849000E+1, 0.97050000E+0, 0.53830700E+3, 0.225E+3, 0.188E+3, 0.98849000E+1, 0.96620000E+0, + 0.31722510E+3, 0.225E+3, 0.189E+3, 0.98849000E+1, 0.29070000E+1, 0.36280170E+3, 0.225E+3, + 0.190E+3, 0.98849000E+1, 0.28844000E+1, 0.32606070E+3, 0.225E+3, 0.191E+3, 0.98849000E+1, + 0.28738000E+1, 0.29035010E+3, 0.225E+3, 0.192E+3, 0.98849000E+1, 0.28878000E+1, 0.27996200E+3, + 0.225E+3, 0.193E+3, 0.98849000E+1, 0.29095000E+1, 0.32981320E+3, 0.225E+3, 0.194E+3, + 0.98849000E+1, 0.19209000E+1, 0.77782300E+2, 0.225E+3, 0.204E+3, 0.98849000E+1, 0.19697000E+1, + 0.77081200E+2, 0.225E+3, 0.205E+3, 0.98849000E+1, 0.19441000E+1, 0.57689300E+2, 0.225E+3, + 0.206E+3, 0.98849000E+1, 0.19985000E+1, 0.46868100E+2, 0.225E+3, 0.207E+3, 0.98849000E+1, + 0.20143000E+1, 0.32849500E+2, 0.225E+3, 0.208E+3, 0.98849000E+1, 0.19887000E+1, 0.13616190E+3, + 0.225E+3, 0.212E+3, 0.98849000E+1, 0.19496000E+1, 0.16440450E+3, 0.225E+3, 0.213E+3, + 0.98849000E+1, 0.19311000E+1, 0.15932860E+3, 0.225E+3, 0.214E+3, 0.98849000E+1, 0.19435000E+1, + 0.14014430E+3, 0.225E+3, 0.215E+3, 0.98849000E+1, 0.20102000E+1, 0.11934860E+3, 0.225E+3, + 0.216E+3, 0.98849000E+1, 0.19903000E+1, 0.19163220E+3, 0.225E+3, 0.220E+3, 0.98849000E+1, + 0.19349000E+1, 0.18555440E+3, 0.225E+3, 0.221E+3, 0.98849000E+1, 0.28999000E+1, 0.18798380E+3, + 0.225E+3, 0.222E+3, 0.98849000E+1, 0.38675000E+1, 0.17219800E+3, 0.225E+3, 0.223E+3, + 0.98849000E+1, 0.29110000E+1, 0.13182880E+3, 0.225E+3, 0.224E+3, 0.98849000E+1, 0.10619100E+2, + 0.11384630E+3, 0.225E+3, 0.225E+3, 0.98849000E+1, 0.98849000E+1, 0.18097700E+2, 0.226E+3, + 0.100E+1, 0.91376000E+1, 0.91180000E+0, 0.12427700E+2, 0.226E+3, 0.200E+1, 0.91376000E+1, + 0.00000000E+0, 0.25324320E+3, 0.226E+3, 0.300E+1, 0.91376000E+1, 0.00000000E+0, 0.15229860E+3, + 0.226E+3, 0.400E+1, 0.91376000E+1, 0.00000000E+0, 0.10555810E+3, 0.226E+3, 0.500E+1, + 0.91376000E+1, 0.00000000E+0, 0.73107900E+2, 0.226E+3, 0.600E+1, 0.91376000E+1, 0.00000000E+0, + 0.52202800E+2, 0.226E+3, 0.700E+1, 0.91376000E+1, 0.00000000E+0, 0.40170900E+2, 0.226E+3, + 0.800E+1, 0.91376000E+1, 0.00000000E+0, 0.30892500E+2, 0.226E+3, 0.900E+1, 0.91376000E+1, + 0.00000000E+0, 0.24074100E+2, 0.226E+3, 0.100E+2, 0.91376000E+1, 0.00000000E+0, 0.30391240E+3, + 0.226E+3, 0.110E+2, 0.91376000E+1, 0.00000000E+0, 0.24099620E+3, 0.226E+3, 0.120E+2, + 0.91376000E+1, 0.00000000E+0, 0.22516630E+3, 0.226E+3, 0.130E+2, 0.91376000E+1, 0.00000000E+0, + 0.18083460E+3, 0.226E+3, 0.140E+2, 0.91376000E+1, 0.00000000E+0, 0.14355850E+3, 0.226E+3, + 0.150E+2, 0.91376000E+1, 0.00000000E+0, 0.12070600E+3, 0.226E+3, 0.160E+2, 0.91376000E+1, + 0.00000000E+0, 0.99911900E+2, 0.226E+3, 0.170E+2, 0.91376000E+1, 0.00000000E+0, 0.82759100E+2, + 0.226E+3, 0.180E+2, 0.91376000E+1, 0.00000000E+0, 0.49731050E+3, 0.226E+3, 0.190E+2, + 0.91376000E+1, 0.00000000E+0, 0.41906350E+3, 0.226E+3, 0.200E+2, 0.91376000E+1, 0.00000000E+0, + 0.34806420E+3, 0.226E+3, 0.210E+2, 0.91376000E+1, 0.00000000E+0, 0.33822830E+3, 0.226E+3, + 0.220E+2, 0.91376000E+1, 0.00000000E+0, 0.31083750E+3, 0.226E+3, 0.230E+2, 0.91376000E+1, + 0.00000000E+0, 0.24576290E+3, 0.226E+3, 0.240E+2, 0.91376000E+1, 0.00000000E+0, 0.26904940E+3, + 0.226E+3, 0.250E+2, 0.91376000E+1, 0.00000000E+0, 0.21211090E+3, 0.226E+3, 0.260E+2, + 0.91376000E+1, 0.00000000E+0, 0.22573460E+3, 0.226E+3, 0.270E+2, 0.91376000E+1, 0.00000000E+0, + 0.23164220E+3, 0.226E+3, 0.280E+2, 0.91376000E+1, 0.00000000E+0, 0.17839240E+3, 0.226E+3, + 0.290E+2, 0.91376000E+1, 0.00000000E+0, 0.18454030E+3, 0.226E+3, 0.300E+2, 0.91376000E+1, + 0.00000000E+0, 0.21740400E+3, 0.226E+3, 0.310E+2, 0.91376000E+1, 0.00000000E+0, 0.19441570E+3, + 0.226E+3, 0.320E+2, 0.91376000E+1, 0.00000000E+0, 0.16819670E+3, 0.226E+3, 0.330E+2, + 0.91376000E+1, 0.00000000E+0, 0.15241280E+3, 0.226E+3, 0.340E+2, 0.91376000E+1, 0.00000000E+0, + 0.13480510E+3, 0.226E+3, 0.350E+2, 0.91376000E+1, 0.00000000E+0, 0.11845780E+3, 0.226E+3, + 0.360E+2, 0.91376000E+1, 0.00000000E+0, 0.55921770E+3, 0.226E+3, 0.370E+2, 0.91376000E+1, + 0.00000000E+0, 0.49943750E+3, 0.226E+3, 0.380E+2, 0.91376000E+1, 0.00000000E+0, 0.44192580E+3, + 0.226E+3, 0.390E+2, 0.91376000E+1, 0.00000000E+0, 0.39992950E+3, 0.226E+3, 0.400E+2, + 0.91376000E+1, 0.00000000E+0, 0.36653290E+3, 0.226E+3, 0.410E+2, 0.91376000E+1, 0.00000000E+0, + 0.28589770E+3, 0.226E+3, 0.420E+2, 0.91376000E+1, 0.00000000E+0, 0.31774320E+3, 0.226E+3, + 0.430E+2, 0.91376000E+1, 0.00000000E+0, 0.24481840E+3, 0.226E+3, 0.440E+2, 0.91376000E+1, + 0.00000000E+0, 0.26700480E+3, 0.226E+3, 0.450E+2, 0.91376000E+1, 0.00000000E+0, 0.24842030E+3, + 0.226E+3, 0.460E+2, 0.91376000E+1, 0.00000000E+0, 0.20761810E+3, 0.226E+3, 0.470E+2, + 0.91376000E+1, 0.00000000E+0, 0.21987500E+3, 0.226E+3, 0.480E+2, 0.91376000E+1, 0.00000000E+0, + 0.27297690E+3, 0.226E+3, 0.490E+2, 0.91376000E+1, 0.00000000E+0, 0.25501000E+3, 0.226E+3, + 0.500E+2, 0.91376000E+1, 0.00000000E+0, 0.22988770E+3, 0.226E+3, 0.510E+2, 0.91376000E+1, + 0.00000000E+0, 0.21492360E+3, 0.226E+3, 0.520E+2, 0.91376000E+1, 0.00000000E+0, 0.19602880E+3, + 0.226E+3, 0.530E+2, 0.91376000E+1, 0.00000000E+0, 0.17779050E+3, 0.226E+3, 0.540E+2, + 0.91376000E+1, 0.00000000E+0, 0.68205790E+3, 0.226E+3, 0.550E+2, 0.91376000E+1, 0.00000000E+0, + 0.63538110E+3, 0.226E+3, 0.560E+2, 0.91376000E+1, 0.00000000E+0, 0.56362450E+3, 0.226E+3, + 0.570E+2, 0.91376000E+1, 0.00000000E+0, 0.27135450E+3, 0.226E+3, 0.580E+2, 0.91376000E+1, + 0.27991000E+1, 0.56520430E+3, 0.226E+3, 0.590E+2, 0.91376000E+1, 0.00000000E+0, 0.54351170E+3, + 0.226E+3, 0.600E+2, 0.91376000E+1, 0.00000000E+0, 0.53008260E+3, 0.226E+3, 0.610E+2, + 0.91376000E+1, 0.00000000E+0, 0.51769890E+3, 0.226E+3, 0.620E+2, 0.91376000E+1, 0.00000000E+0, + 0.50672260E+3, 0.226E+3, 0.630E+2, 0.91376000E+1, 0.00000000E+0, 0.40367390E+3, 0.226E+3, + 0.640E+2, 0.91376000E+1, 0.00000000E+0, 0.44799700E+3, 0.226E+3, 0.650E+2, 0.91376000E+1, + 0.00000000E+0, 0.43292450E+3, 0.226E+3, 0.660E+2, 0.91376000E+1, 0.00000000E+0, 0.45804090E+3, + 0.226E+3, 0.670E+2, 0.91376000E+1, 0.00000000E+0, 0.44838960E+3, 0.226E+3, 0.680E+2, + 0.91376000E+1, 0.00000000E+0, 0.43975060E+3, 0.226E+3, 0.690E+2, 0.91376000E+1, 0.00000000E+0, + 0.43434720E+3, 0.226E+3, 0.700E+2, 0.91376000E+1, 0.00000000E+0, 0.36918400E+3, 0.226E+3, + 0.710E+2, 0.91376000E+1, 0.00000000E+0, 0.36653030E+3, 0.226E+3, 0.720E+2, 0.91376000E+1, + 0.00000000E+0, 0.33695440E+3, 0.226E+3, 0.730E+2, 0.91376000E+1, 0.00000000E+0, 0.28678360E+3, + 0.226E+3, 0.740E+2, 0.91376000E+1, 0.00000000E+0, 0.29236350E+3, 0.226E+3, 0.750E+2, + 0.91376000E+1, 0.00000000E+0, 0.26675590E+3, 0.226E+3, 0.760E+2, 0.91376000E+1, 0.00000000E+0, + 0.24569670E+3, 0.226E+3, 0.770E+2, 0.91376000E+1, 0.00000000E+0, 0.20576580E+3, 0.226E+3, + 0.780E+2, 0.91376000E+1, 0.00000000E+0, 0.19287140E+3, 0.226E+3, 0.790E+2, 0.91376000E+1, + 0.00000000E+0, 0.19862370E+3, 0.226E+3, 0.800E+2, 0.91376000E+1, 0.00000000E+0, 0.28196900E+3, + 0.226E+3, 0.810E+2, 0.91376000E+1, 0.00000000E+0, 0.27759650E+3, 0.226E+3, 0.820E+2, + 0.91376000E+1, 0.00000000E+0, 0.25755980E+3, 0.226E+3, 0.830E+2, 0.91376000E+1, 0.00000000E+0, + 0.24714790E+3, 0.226E+3, 0.840E+2, 0.91376000E+1, 0.00000000E+0, 0.22989230E+3, 0.226E+3, + 0.850E+2, 0.91376000E+1, 0.00000000E+0, 0.21233880E+3, 0.226E+3, 0.860E+2, 0.91376000E+1, + 0.00000000E+0, 0.64916640E+3, 0.226E+3, 0.870E+2, 0.91376000E+1, 0.00000000E+0, 0.63174380E+3, + 0.226E+3, 0.880E+2, 0.91376000E+1, 0.00000000E+0, 0.56344000E+3, 0.226E+3, 0.890E+2, + 0.91376000E+1, 0.00000000E+0, 0.51237500E+3, 0.226E+3, 0.900E+2, 0.91376000E+1, 0.00000000E+0, + 0.50653490E+3, 0.226E+3, 0.910E+2, 0.91376000E+1, 0.00000000E+0, 0.49067580E+3, 0.226E+3, + 0.920E+2, 0.91376000E+1, 0.00000000E+0, 0.50182620E+3, 0.226E+3, 0.930E+2, 0.91376000E+1, + 0.00000000E+0, 0.48653240E+3, 0.226E+3, 0.940E+2, 0.91376000E+1, 0.00000000E+0, 0.28566500E+2, + 0.226E+3, 0.101E+3, 0.91376000E+1, 0.00000000E+0, 0.88953800E+2, 0.226E+3, 0.103E+3, + 0.91376000E+1, 0.98650000E+0, 0.11416130E+3, 0.226E+3, 0.104E+3, 0.91376000E+1, 0.98080000E+0, + 0.89435400E+2, 0.226E+3, 0.105E+3, 0.91376000E+1, 0.97060000E+0, 0.68629300E+2, 0.226E+3, + 0.106E+3, 0.91376000E+1, 0.98680000E+0, 0.48755800E+2, 0.226E+3, 0.107E+3, 0.91376000E+1, + 0.99440000E+0, 0.36191900E+2, 0.226E+3, 0.108E+3, 0.91376000E+1, 0.99250000E+0, 0.25531400E+2, + 0.226E+3, 0.109E+3, 0.91376000E+1, 0.99820000E+0, 0.12973320E+3, 0.226E+3, 0.111E+3, + 0.91376000E+1, 0.96840000E+0, 0.20000410E+3, 0.226E+3, 0.112E+3, 0.91376000E+1, 0.96280000E+0, + 0.20482820E+3, 0.226E+3, 0.113E+3, 0.91376000E+1, 0.96480000E+0, 0.16769170E+3, 0.226E+3, + 0.114E+3, 0.91376000E+1, 0.95070000E+0, 0.13948020E+3, 0.226E+3, 0.115E+3, 0.91376000E+1, + 0.99470000E+0, 0.11937190E+3, 0.226E+3, 0.116E+3, 0.91376000E+1, 0.99480000E+0, 0.98874700E+2, + 0.226E+3, 0.117E+3, 0.91376000E+1, 0.99720000E+0, 0.18170400E+3, 0.226E+3, 0.119E+3, + 0.91376000E+1, 0.97670000E+0, 0.33670380E+3, 0.226E+3, 0.120E+3, 0.91376000E+1, 0.98310000E+0, + 0.18382570E+3, 0.226E+3, 0.121E+3, 0.91376000E+1, 0.18627000E+1, 0.17770070E+3, 0.226E+3, + 0.122E+3, 0.91376000E+1, 0.18299000E+1, 0.17415940E+3, 0.226E+3, 0.123E+3, 0.91376000E+1, + 0.19138000E+1, 0.17230360E+3, 0.226E+3, 0.124E+3, 0.91376000E+1, 0.18269000E+1, 0.15974020E+3, + 0.226E+3, 0.125E+3, 0.91376000E+1, 0.16406000E+1, 0.14831710E+3, 0.226E+3, 0.126E+3, + 0.91376000E+1, 0.16483000E+1, 0.14158150E+3, 0.226E+3, 0.127E+3, 0.91376000E+1, 0.17149000E+1, + 0.13834240E+3, 0.226E+3, 0.128E+3, 0.91376000E+1, 0.17937000E+1, 0.13590190E+3, 0.226E+3, + 0.129E+3, 0.91376000E+1, 0.95760000E+0, 0.12887600E+3, 0.226E+3, 0.130E+3, 0.91376000E+1, + 0.19419000E+1, 0.20495230E+3, 0.226E+3, 0.131E+3, 0.91376000E+1, 0.96010000E+0, 0.18256910E+3, + 0.226E+3, 0.132E+3, 0.91376000E+1, 0.94340000E+0, 0.16550840E+3, 0.226E+3, 0.133E+3, + 0.91376000E+1, 0.98890000E+0, 0.15246290E+3, 0.226E+3, 0.134E+3, 0.91376000E+1, 0.99010000E+0, + 0.13568060E+3, 0.226E+3, 0.135E+3, 0.91376000E+1, 0.99740000E+0, 0.21771950E+3, 0.226E+3, + 0.137E+3, 0.91376000E+1, 0.97380000E+0, 0.40967730E+3, 0.226E+3, 0.138E+3, 0.91376000E+1, + 0.98010000E+0, 0.31968600E+3, 0.226E+3, 0.139E+3, 0.91376000E+1, 0.19153000E+1, 0.24320860E+3, + 0.226E+3, 0.140E+3, 0.91376000E+1, 0.19355000E+1, 0.24560370E+3, 0.226E+3, 0.141E+3, + 0.91376000E+1, 0.19545000E+1, 0.22993990E+3, 0.226E+3, 0.142E+3, 0.91376000E+1, 0.19420000E+1, + 0.25533300E+3, 0.226E+3, 0.143E+3, 0.91376000E+1, 0.16682000E+1, 0.20221300E+3, 0.226E+3, + 0.144E+3, 0.91376000E+1, 0.18584000E+1, 0.18952850E+3, 0.226E+3, 0.145E+3, 0.91376000E+1, + 0.19003000E+1, 0.17645130E+3, 0.226E+3, 0.146E+3, 0.91376000E+1, 0.18630000E+1, 0.17054030E+3, + 0.226E+3, 0.147E+3, 0.91376000E+1, 0.96790000E+0, 0.16952460E+3, 0.226E+3, 0.148E+3, + 0.91376000E+1, 0.19539000E+1, 0.26122680E+3, 0.226E+3, 0.149E+3, 0.91376000E+1, 0.96330000E+0, + 0.23895870E+3, 0.226E+3, 0.150E+3, 0.91376000E+1, 0.95140000E+0, 0.22568120E+3, 0.226E+3, + 0.151E+3, 0.91376000E+1, 0.97490000E+0, 0.21486070E+3, 0.226E+3, 0.152E+3, 0.91376000E+1, + 0.98110000E+0, 0.19782510E+3, 0.226E+3, 0.153E+3, 0.91376000E+1, 0.99680000E+0, 0.25941930E+3, + 0.226E+3, 0.155E+3, 0.91376000E+1, 0.99090000E+0, 0.52971550E+3, 0.226E+3, 0.156E+3, + 0.91376000E+1, 0.97970000E+0, 0.40410260E+3, 0.226E+3, 0.157E+3, 0.91376000E+1, 0.19373000E+1, + 0.26338510E+3, 0.226E+3, 0.159E+3, 0.91376000E+1, 0.29425000E+1, 0.25797950E+3, 0.226E+3, + 0.160E+3, 0.91376000E+1, 0.29455000E+1, 0.24997990E+3, 0.226E+3, 0.161E+3, 0.91376000E+1, + 0.29413000E+1, 0.25078300E+3, 0.226E+3, 0.162E+3, 0.91376000E+1, 0.29300000E+1, 0.24059220E+3, + 0.226E+3, 0.163E+3, 0.91376000E+1, 0.18286000E+1, 0.25210750E+3, 0.226E+3, 0.164E+3, + 0.91376000E+1, 0.28732000E+1, 0.23721640E+3, 0.226E+3, 0.165E+3, 0.91376000E+1, 0.29086000E+1, + 0.24067880E+3, 0.226E+3, 0.166E+3, 0.91376000E+1, 0.28965000E+1, 0.22546970E+3, 0.226E+3, + 0.167E+3, 0.91376000E+1, 0.29242000E+1, 0.21916750E+3, 0.226E+3, 0.168E+3, 0.91376000E+1, + 0.29282000E+1, 0.21764010E+3, 0.226E+3, 0.169E+3, 0.91376000E+1, 0.29246000E+1, 0.22800720E+3, + 0.226E+3, 0.170E+3, 0.91376000E+1, 0.28482000E+1, 0.21050650E+3, 0.226E+3, 0.171E+3, + 0.91376000E+1, 0.29219000E+1, 0.27971240E+3, 0.226E+3, 0.172E+3, 0.91376000E+1, 0.19254000E+1, + 0.26149250E+3, 0.226E+3, 0.173E+3, 0.91376000E+1, 0.19459000E+1, 0.24043090E+3, 0.226E+3, + 0.174E+3, 0.91376000E+1, 0.19292000E+1, 0.24184390E+3, 0.226E+3, 0.175E+3, 0.91376000E+1, + 0.18104000E+1, 0.21530790E+3, 0.226E+3, 0.176E+3, 0.91376000E+1, 0.18858000E+1, 0.20326950E+3, + 0.226E+3, 0.177E+3, 0.91376000E+1, 0.18648000E+1, 0.19460130E+3, 0.226E+3, 0.178E+3, + 0.91376000E+1, 0.19188000E+1, 0.18621520E+3, 0.226E+3, 0.179E+3, 0.91376000E+1, 0.98460000E+0, + 0.18088400E+3, 0.226E+3, 0.180E+3, 0.91376000E+1, 0.19896000E+1, 0.28177560E+3, 0.226E+3, + 0.181E+3, 0.91376000E+1, 0.92670000E+0, 0.25955420E+3, 0.226E+3, 0.182E+3, 0.91376000E+1, + 0.93830000E+0, 0.25318480E+3, 0.226E+3, 0.183E+3, 0.91376000E+1, 0.98200000E+0, 0.24740350E+3, + 0.226E+3, 0.184E+3, 0.91376000E+1, 0.98150000E+0, 0.23265410E+3, 0.226E+3, 0.185E+3, + 0.91376000E+1, 0.99540000E+0, 0.29230010E+3, 0.226E+3, 0.187E+3, 0.91376000E+1, 0.97050000E+0, + 0.53018710E+3, 0.226E+3, 0.188E+3, 0.91376000E+1, 0.96620000E+0, 0.31143140E+3, 0.226E+3, + 0.189E+3, 0.91376000E+1, 0.29070000E+1, 0.35639700E+3, 0.226E+3, 0.190E+3, 0.91376000E+1, + 0.28844000E+1, 0.32021770E+3, 0.226E+3, 0.191E+3, 0.91376000E+1, 0.28738000E+1, 0.28502300E+3, + 0.226E+3, 0.192E+3, 0.91376000E+1, 0.28878000E+1, 0.27479730E+3, 0.226E+3, 0.193E+3, + 0.91376000E+1, 0.29095000E+1, 0.32416540E+3, 0.226E+3, 0.194E+3, 0.91376000E+1, 0.19209000E+1, + 0.76349400E+2, 0.226E+3, 0.204E+3, 0.91376000E+1, 0.19697000E+1, 0.75632700E+2, 0.226E+3, + 0.205E+3, 0.91376000E+1, 0.19441000E+1, 0.56542900E+2, 0.226E+3, 0.206E+3, 0.91376000E+1, + 0.19985000E+1, 0.45914000E+2, 0.226E+3, 0.207E+3, 0.91376000E+1, 0.20143000E+1, 0.32158400E+2, + 0.226E+3, 0.208E+3, 0.91376000E+1, 0.19887000E+1, 0.13378530E+3, 0.226E+3, 0.212E+3, + 0.91376000E+1, 0.19496000E+1, 0.16153570E+3, 0.226E+3, 0.213E+3, 0.91376000E+1, 0.19311000E+1, + 0.15644370E+3, 0.226E+3, 0.214E+3, 0.91376000E+1, 0.19435000E+1, 0.13750430E+3, 0.226E+3, + 0.215E+3, 0.91376000E+1, 0.20102000E+1, 0.11701210E+3, 0.226E+3, 0.216E+3, 0.91376000E+1, + 0.19903000E+1, 0.18826960E+3, 0.226E+3, 0.220E+3, 0.91376000E+1, 0.19349000E+1, 0.18220620E+3, + 0.226E+3, 0.221E+3, 0.91376000E+1, 0.28999000E+1, 0.18458560E+3, 0.226E+3, 0.222E+3, + 0.91376000E+1, 0.38675000E+1, 0.16909000E+3, 0.226E+3, 0.223E+3, 0.91376000E+1, 0.29110000E+1, + 0.12934440E+3, 0.226E+3, 0.224E+3, 0.91376000E+1, 0.10619100E+2, 0.11164910E+3, 0.226E+3, + 0.225E+3, 0.91376000E+1, 0.98849000E+1, 0.10950410E+3, 0.226E+3, 0.226E+3, 0.91376000E+1, + 0.91376000E+1, 0.20774100E+2, 0.227E+3, 0.100E+1, 0.29263000E+1, 0.91180000E+0, 0.13880400E+2, + 0.227E+3, 0.200E+1, 0.29263000E+1, 0.00000000E+0, 0.31984480E+3, 0.227E+3, 0.300E+1, + 0.29263000E+1, 0.00000000E+0, 0.18489380E+3, 0.227E+3, 0.400E+1, 0.29263000E+1, 0.00000000E+0, + 0.12490870E+3, 0.227E+3, 0.500E+1, 0.29263000E+1, 0.00000000E+0, 0.84755200E+2, 0.227E+3, + 0.600E+1, 0.29263000E+1, 0.00000000E+0, 0.59562800E+2, 0.227E+3, 0.700E+1, 0.29263000E+1, + 0.00000000E+0, 0.45306600E+2, 0.227E+3, 0.800E+1, 0.29263000E+1, 0.00000000E+0, 0.34493500E+2, + 0.227E+3, 0.900E+1, 0.29263000E+1, 0.00000000E+0, 0.26662700E+2, 0.227E+3, 0.100E+2, + 0.29263000E+1, 0.00000000E+0, 0.38268210E+3, 0.227E+3, 0.110E+2, 0.29263000E+1, 0.00000000E+0, + 0.29460910E+3, 0.227E+3, 0.120E+2, 0.29263000E+1, 0.00000000E+0, 0.27182260E+3, 0.227E+3, + 0.130E+2, 0.29263000E+1, 0.00000000E+0, 0.21457260E+3, 0.227E+3, 0.140E+2, 0.29263000E+1, + 0.00000000E+0, 0.16773560E+3, 0.227E+3, 0.150E+2, 0.29263000E+1, 0.00000000E+0, 0.13954300E+3, + 0.227E+3, 0.160E+2, 0.29263000E+1, 0.00000000E+0, 0.11430910E+3, 0.227E+3, 0.170E+2, + 0.29263000E+1, 0.00000000E+0, 0.93808400E+2, 0.227E+3, 0.180E+2, 0.29263000E+1, 0.00000000E+0, + 0.62812380E+3, 0.227E+3, 0.190E+2, 0.29263000E+1, 0.00000000E+0, 0.51787690E+3, 0.227E+3, + 0.200E+2, 0.29263000E+1, 0.00000000E+0, 0.42788660E+3, 0.227E+3, 0.210E+2, 0.29263000E+1, + 0.00000000E+0, 0.41344790E+3, 0.227E+3, 0.220E+2, 0.29263000E+1, 0.00000000E+0, 0.37873270E+3, + 0.227E+3, 0.230E+2, 0.29263000E+1, 0.00000000E+0, 0.29871690E+3, 0.227E+3, 0.240E+2, + 0.29263000E+1, 0.00000000E+0, 0.32626030E+3, 0.227E+3, 0.250E+2, 0.29263000E+1, 0.00000000E+0, + 0.25642380E+3, 0.227E+3, 0.260E+2, 0.29263000E+1, 0.00000000E+0, 0.27162880E+3, 0.227E+3, + 0.270E+2, 0.29263000E+1, 0.00000000E+0, 0.27970520E+3, 0.227E+3, 0.280E+2, 0.29263000E+1, + 0.00000000E+0, 0.21480930E+3, 0.227E+3, 0.290E+2, 0.29263000E+1, 0.00000000E+0, 0.22045250E+3, + 0.227E+3, 0.300E+2, 0.29263000E+1, 0.00000000E+0, 0.26075480E+3, 0.227E+3, 0.310E+2, + 0.29263000E+1, 0.00000000E+0, 0.23021330E+3, 0.227E+3, 0.320E+2, 0.29263000E+1, 0.00000000E+0, + 0.19670460E+3, 0.227E+3, 0.330E+2, 0.29263000E+1, 0.00000000E+0, 0.17678440E+3, 0.227E+3, + 0.340E+2, 0.29263000E+1, 0.00000000E+0, 0.15501690E+3, 0.227E+3, 0.350E+2, 0.29263000E+1, + 0.00000000E+0, 0.13511470E+3, 0.227E+3, 0.360E+2, 0.29263000E+1, 0.00000000E+0, 0.70427300E+3, + 0.227E+3, 0.370E+2, 0.29263000E+1, 0.00000000E+0, 0.61724930E+3, 0.227E+3, 0.380E+2, + 0.29263000E+1, 0.00000000E+0, 0.54087060E+3, 0.227E+3, 0.390E+2, 0.29263000E+1, 0.00000000E+0, + 0.48633250E+3, 0.227E+3, 0.400E+2, 0.29263000E+1, 0.00000000E+0, 0.44370070E+3, 0.227E+3, + 0.410E+2, 0.29263000E+1, 0.00000000E+0, 0.34307100E+3, 0.227E+3, 0.420E+2, 0.29263000E+1, + 0.00000000E+0, 0.38256460E+3, 0.227E+3, 0.430E+2, 0.29263000E+1, 0.00000000E+0, 0.29196350E+3, + 0.227E+3, 0.440E+2, 0.29263000E+1, 0.00000000E+0, 0.31887320E+3, 0.227E+3, 0.450E+2, + 0.29263000E+1, 0.00000000E+0, 0.29583660E+3, 0.227E+3, 0.460E+2, 0.29263000E+1, 0.00000000E+0, + 0.24704870E+3, 0.227E+3, 0.470E+2, 0.29263000E+1, 0.00000000E+0, 0.26087010E+3, 0.227E+3, + 0.480E+2, 0.29263000E+1, 0.00000000E+0, 0.32688520E+3, 0.227E+3, 0.490E+2, 0.29263000E+1, + 0.00000000E+0, 0.30241310E+3, 0.227E+3, 0.500E+2, 0.29263000E+1, 0.00000000E+0, 0.26980100E+3, + 0.227E+3, 0.510E+2, 0.29263000E+1, 0.00000000E+0, 0.25056260E+3, 0.227E+3, 0.520E+2, + 0.29263000E+1, 0.00000000E+0, 0.22685100E+3, 0.227E+3, 0.530E+2, 0.29263000E+1, 0.00000000E+0, + 0.20426630E+3, 0.227E+3, 0.540E+2, 0.29263000E+1, 0.00000000E+0, 0.85816140E+3, 0.227E+3, + 0.550E+2, 0.29263000E+1, 0.00000000E+0, 0.78713930E+3, 0.227E+3, 0.560E+2, 0.29263000E+1, + 0.00000000E+0, 0.69163680E+3, 0.227E+3, 0.570E+2, 0.29263000E+1, 0.00000000E+0, 0.31880260E+3, + 0.227E+3, 0.580E+2, 0.29263000E+1, 0.27991000E+1, 0.69775630E+3, 0.227E+3, 0.590E+2, + 0.29263000E+1, 0.00000000E+0, 0.66998350E+3, 0.227E+3, 0.600E+2, 0.29263000E+1, 0.00000000E+0, + 0.65317050E+3, 0.227E+3, 0.610E+2, 0.29263000E+1, 0.00000000E+0, 0.63770390E+3, 0.227E+3, + 0.620E+2, 0.29263000E+1, 0.00000000E+0, 0.62398650E+3, 0.227E+3, 0.630E+2, 0.29263000E+1, + 0.00000000E+0, 0.49120470E+3, 0.227E+3, 0.640E+2, 0.29263000E+1, 0.00000000E+0, 0.55314370E+3, + 0.227E+3, 0.650E+2, 0.29263000E+1, 0.00000000E+0, 0.53353430E+3, 0.227E+3, 0.660E+2, + 0.29263000E+1, 0.00000000E+0, 0.56278640E+3, 0.227E+3, 0.670E+2, 0.29263000E+1, 0.00000000E+0, + 0.55082490E+3, 0.227E+3, 0.680E+2, 0.29263000E+1, 0.00000000E+0, 0.54004150E+3, 0.227E+3, + 0.690E+2, 0.29263000E+1, 0.00000000E+0, 0.53369230E+3, 0.227E+3, 0.700E+2, 0.29263000E+1, + 0.00000000E+0, 0.44999220E+3, 0.227E+3, 0.710E+2, 0.29263000E+1, 0.00000000E+0, 0.44251450E+3, + 0.227E+3, 0.720E+2, 0.29263000E+1, 0.00000000E+0, 0.40411740E+3, 0.227E+3, 0.730E+2, + 0.29263000E+1, 0.00000000E+0, 0.34172070E+3, 0.227E+3, 0.740E+2, 0.29263000E+1, 0.00000000E+0, + 0.34765120E+3, 0.227E+3, 0.750E+2, 0.29263000E+1, 0.00000000E+0, 0.31534640E+3, 0.227E+3, + 0.760E+2, 0.29263000E+1, 0.00000000E+0, 0.28904310E+3, 0.227E+3, 0.770E+2, 0.29263000E+1, + 0.00000000E+0, 0.24054490E+3, 0.227E+3, 0.780E+2, 0.29263000E+1, 0.00000000E+0, 0.22491750E+3, + 0.227E+3, 0.790E+2, 0.29263000E+1, 0.00000000E+0, 0.23132500E+3, 0.227E+3, 0.800E+2, + 0.29263000E+1, 0.00000000E+0, 0.33611600E+3, 0.227E+3, 0.810E+2, 0.29263000E+1, 0.00000000E+0, + 0.32863270E+3, 0.227E+3, 0.820E+2, 0.29263000E+1, 0.00000000E+0, 0.30220800E+3, 0.227E+3, + 0.830E+2, 0.29263000E+1, 0.00000000E+0, 0.28841500E+3, 0.227E+3, 0.840E+2, 0.29263000E+1, + 0.00000000E+0, 0.26645950E+3, 0.227E+3, 0.850E+2, 0.29263000E+1, 0.00000000E+0, 0.24453080E+3, + 0.227E+3, 0.860E+2, 0.29263000E+1, 0.00000000E+0, 0.81034850E+3, 0.227E+3, 0.870E+2, + 0.29263000E+1, 0.00000000E+0, 0.77851930E+3, 0.227E+3, 0.880E+2, 0.29263000E+1, 0.00000000E+0, + 0.68835160E+3, 0.227E+3, 0.890E+2, 0.29263000E+1, 0.00000000E+0, 0.61915580E+3, 0.227E+3, + 0.900E+2, 0.29263000E+1, 0.00000000E+0, 0.61484900E+3, 0.227E+3, 0.910E+2, 0.29263000E+1, + 0.00000000E+0, 0.59539070E+3, 0.227E+3, 0.920E+2, 0.29263000E+1, 0.00000000E+0, 0.61287940E+3, + 0.227E+3, 0.930E+2, 0.29263000E+1, 0.00000000E+0, 0.59353010E+3, 0.227E+3, 0.940E+2, + 0.29263000E+1, 0.00000000E+0, 0.33330700E+2, 0.227E+3, 0.101E+3, 0.29263000E+1, 0.00000000E+0, + 0.10755820E+3, 0.227E+3, 0.103E+3, 0.29263000E+1, 0.98650000E+0, 0.13729980E+3, 0.227E+3, + 0.104E+3, 0.29263000E+1, 0.98080000E+0, 0.10520190E+3, 0.227E+3, 0.105E+3, 0.29263000E+1, + 0.97060000E+0, 0.79527300E+2, 0.227E+3, 0.106E+3, 0.29263000E+1, 0.98680000E+0, 0.55568500E+2, + 0.227E+3, 0.107E+3, 0.29263000E+1, 0.99440000E+0, 0.40679900E+2, 0.227E+3, 0.108E+3, + 0.29263000E+1, 0.99250000E+0, 0.28212200E+2, 0.227E+3, 0.109E+3, 0.29263000E+1, 0.99820000E+0, + 0.15735780E+3, 0.227E+3, 0.111E+3, 0.29263000E+1, 0.96840000E+0, 0.24318090E+3, 0.227E+3, + 0.112E+3, 0.29263000E+1, 0.96280000E+0, 0.24645390E+3, 0.227E+3, 0.113E+3, 0.29263000E+1, + 0.96480000E+0, 0.19841740E+3, 0.227E+3, 0.114E+3, 0.29263000E+1, 0.95070000E+0, 0.16285410E+3, + 0.227E+3, 0.115E+3, 0.29263000E+1, 0.99470000E+0, 0.13801590E+3, 0.227E+3, 0.116E+3, + 0.29263000E+1, 0.99480000E+0, 0.11313180E+3, 0.227E+3, 0.117E+3, 0.29263000E+1, 0.99720000E+0, + 0.21759670E+3, 0.227E+3, 0.119E+3, 0.29263000E+1, 0.97670000E+0, 0.41483380E+3, 0.227E+3, + 0.120E+3, 0.29263000E+1, 0.98310000E+0, 0.21769090E+3, 0.227E+3, 0.121E+3, 0.29263000E+1, + 0.18627000E+1, 0.21024640E+3, 0.227E+3, 0.122E+3, 0.29263000E+1, 0.18299000E+1, 0.20607570E+3, + 0.227E+3, 0.123E+3, 0.29263000E+1, 0.19138000E+1, 0.20417500E+3, 0.227E+3, 0.124E+3, + 0.29263000E+1, 0.18269000E+1, 0.18795640E+3, 0.227E+3, 0.125E+3, 0.29263000E+1, 0.16406000E+1, + 0.17405360E+3, 0.227E+3, 0.126E+3, 0.29263000E+1, 0.16483000E+1, 0.16609110E+3, 0.227E+3, + 0.127E+3, 0.29263000E+1, 0.17149000E+1, 0.16238310E+3, 0.227E+3, 0.128E+3, 0.29263000E+1, + 0.17937000E+1, 0.16040150E+3, 0.227E+3, 0.129E+3, 0.29263000E+1, 0.95760000E+0, 0.15059460E+3, + 0.227E+3, 0.130E+3, 0.29263000E+1, 0.19419000E+1, 0.24499140E+3, 0.227E+3, 0.131E+3, + 0.29263000E+1, 0.96010000E+0, 0.21547520E+3, 0.227E+3, 0.132E+3, 0.29263000E+1, 0.94340000E+0, + 0.19340210E+3, 0.227E+3, 0.133E+3, 0.29263000E+1, 0.98890000E+0, 0.17685580E+3, 0.227E+3, + 0.134E+3, 0.29263000E+1, 0.99010000E+0, 0.15608590E+3, 0.227E+3, 0.135E+3, 0.29263000E+1, + 0.99740000E+0, 0.25980390E+3, 0.227E+3, 0.137E+3, 0.29263000E+1, 0.97380000E+0, 0.50499050E+3, + 0.227E+3, 0.138E+3, 0.29263000E+1, 0.98010000E+0, 0.38637760E+3, 0.227E+3, 0.139E+3, + 0.29263000E+1, 0.19153000E+1, 0.28802430E+3, 0.227E+3, 0.140E+3, 0.29263000E+1, 0.19355000E+1, + 0.29089880E+3, 0.227E+3, 0.141E+3, 0.29263000E+1, 0.19545000E+1, 0.27145590E+3, 0.227E+3, + 0.142E+3, 0.29263000E+1, 0.19420000E+1, 0.30427490E+3, 0.227E+3, 0.143E+3, 0.29263000E+1, + 0.16682000E+1, 0.23690460E+3, 0.227E+3, 0.144E+3, 0.29263000E+1, 0.18584000E+1, 0.22176150E+3, + 0.227E+3, 0.145E+3, 0.29263000E+1, 0.19003000E+1, 0.20606490E+3, 0.227E+3, 0.146E+3, + 0.29263000E+1, 0.18630000E+1, 0.19936290E+3, 0.227E+3, 0.147E+3, 0.29263000E+1, 0.96790000E+0, + 0.19723130E+3, 0.227E+3, 0.148E+3, 0.29263000E+1, 0.19539000E+1, 0.31168130E+3, 0.227E+3, + 0.149E+3, 0.29263000E+1, 0.96330000E+0, 0.28217500E+3, 0.227E+3, 0.150E+3, 0.29263000E+1, + 0.95140000E+0, 0.26447480E+3, 0.227E+3, 0.151E+3, 0.29263000E+1, 0.97490000E+0, 0.25038960E+3, + 0.227E+3, 0.152E+3, 0.29263000E+1, 0.98110000E+0, 0.22896540E+3, 0.227E+3, 0.153E+3, + 0.29263000E+1, 0.99680000E+0, 0.30722970E+3, 0.227E+3, 0.155E+3, 0.29263000E+1, 0.99090000E+0, + 0.65499420E+3, 0.227E+3, 0.156E+3, 0.29263000E+1, 0.97970000E+0, 0.48905800E+3, 0.227E+3, + 0.157E+3, 0.29263000E+1, 0.19373000E+1, 0.30922990E+3, 0.227E+3, 0.159E+3, 0.29263000E+1, + 0.29425000E+1, 0.30284470E+3, 0.227E+3, 0.160E+3, 0.29263000E+1, 0.29455000E+1, 0.29328050E+3, + 0.227E+3, 0.161E+3, 0.29263000E+1, 0.29413000E+1, 0.29467450E+3, 0.227E+3, 0.162E+3, + 0.29263000E+1, 0.29300000E+1, 0.28401110E+3, 0.227E+3, 0.163E+3, 0.29263000E+1, 0.18286000E+1, + 0.29645530E+3, 0.227E+3, 0.164E+3, 0.29263000E+1, 0.28732000E+1, 0.27853190E+3, 0.227E+3, + 0.165E+3, 0.29263000E+1, 0.29086000E+1, 0.28335200E+3, 0.227E+3, 0.166E+3, 0.29263000E+1, + 0.28965000E+1, 0.26440130E+3, 0.227E+3, 0.167E+3, 0.29263000E+1, 0.29242000E+1, 0.25688240E+3, + 0.227E+3, 0.168E+3, 0.29263000E+1, 0.29282000E+1, 0.25521000E+3, 0.227E+3, 0.169E+3, + 0.29263000E+1, 0.29246000E+1, 0.26809220E+3, 0.227E+3, 0.170E+3, 0.29263000E+1, 0.28482000E+1, + 0.24667760E+3, 0.227E+3, 0.171E+3, 0.29263000E+1, 0.29219000E+1, 0.33363020E+3, 0.227E+3, + 0.172E+3, 0.29263000E+1, 0.19254000E+1, 0.30987820E+3, 0.227E+3, 0.173E+3, 0.29263000E+1, + 0.19459000E+1, 0.28300050E+3, 0.227E+3, 0.174E+3, 0.29263000E+1, 0.19292000E+1, 0.28624380E+3, + 0.227E+3, 0.175E+3, 0.29263000E+1, 0.18104000E+1, 0.25103410E+3, 0.227E+3, 0.176E+3, + 0.29263000E+1, 0.18858000E+1, 0.23634850E+3, 0.227E+3, 0.177E+3, 0.29263000E+1, 0.18648000E+1, + 0.22587990E+3, 0.227E+3, 0.178E+3, 0.29263000E+1, 0.19188000E+1, 0.21607200E+3, 0.227E+3, + 0.179E+3, 0.29263000E+1, 0.98460000E+0, 0.20886990E+3, 0.227E+3, 0.180E+3, 0.29263000E+1, + 0.19896000E+1, 0.33505330E+3, 0.227E+3, 0.181E+3, 0.29263000E+1, 0.92670000E+0, 0.30558290E+3, + 0.227E+3, 0.182E+3, 0.29263000E+1, 0.93830000E+0, 0.29647100E+3, 0.227E+3, 0.183E+3, + 0.29263000E+1, 0.98200000E+0, 0.28849230E+3, 0.227E+3, 0.184E+3, 0.29263000E+1, 0.98150000E+0, + 0.26966300E+3, 0.227E+3, 0.185E+3, 0.29263000E+1, 0.99540000E+0, 0.34599510E+3, 0.227E+3, + 0.187E+3, 0.29263000E+1, 0.97050000E+0, 0.65149430E+3, 0.227E+3, 0.188E+3, 0.29263000E+1, + 0.96620000E+0, 0.36582470E+3, 0.227E+3, 0.189E+3, 0.29263000E+1, 0.29070000E+1, 0.42216210E+3, + 0.227E+3, 0.190E+3, 0.29263000E+1, 0.28844000E+1, 0.37782790E+3, 0.227E+3, 0.191E+3, + 0.29263000E+1, 0.28738000E+1, 0.33401640E+3, 0.227E+3, 0.192E+3, 0.29263000E+1, 0.28878000E+1, + 0.32150040E+3, 0.227E+3, 0.193E+3, 0.29263000E+1, 0.29095000E+1, 0.38630110E+3, 0.227E+3, + 0.194E+3, 0.29263000E+1, 0.19209000E+1, 0.89789100E+2, 0.227E+3, 0.204E+3, 0.29263000E+1, + 0.19697000E+1, 0.88440500E+2, 0.227E+3, 0.205E+3, 0.29263000E+1, 0.19441000E+1, 0.64985600E+2, + 0.227E+3, 0.206E+3, 0.29263000E+1, 0.19985000E+1, 0.52232200E+2, 0.227E+3, 0.207E+3, + 0.29263000E+1, 0.20143000E+1, 0.35989200E+2, 0.227E+3, 0.208E+3, 0.29263000E+1, 0.19887000E+1, + 0.15909800E+3, 0.227E+3, 0.212E+3, 0.29263000E+1, 0.19496000E+1, 0.19227550E+3, 0.227E+3, + 0.213E+3, 0.29263000E+1, 0.19311000E+1, 0.18462850E+3, 0.227E+3, 0.214E+3, 0.29263000E+1, + 0.19435000E+1, 0.16065780E+3, 0.227E+3, 0.215E+3, 0.29263000E+1, 0.20102000E+1, 0.13524560E+3, + 0.227E+3, 0.216E+3, 0.29263000E+1, 0.19903000E+1, 0.22342730E+3, 0.227E+3, 0.220E+3, + 0.29263000E+1, 0.19349000E+1, 0.21483990E+3, 0.227E+3, 0.221E+3, 0.29263000E+1, 0.28999000E+1, + 0.21751780E+3, 0.227E+3, 0.222E+3, 0.29263000E+1, 0.38675000E+1, 0.19920380E+3, 0.227E+3, + 0.223E+3, 0.29263000E+1, 0.29110000E+1, 0.15048630E+3, 0.227E+3, 0.224E+3, 0.29263000E+1, + 0.10619100E+2, 0.12896280E+3, 0.227E+3, 0.225E+3, 0.29263000E+1, 0.98849000E+1, 0.12658850E+3, + 0.227E+3, 0.226E+3, 0.29263000E+1, 0.91376000E+1, 0.14806570E+3, 0.227E+3, 0.227E+3, + 0.29263000E+1, 0.29263000E+1, 0.19464800E+2, 0.228E+3, 0.100E+1, 0.65458000E+1, 0.91180000E+0, + 0.13097900E+2, 0.228E+3, 0.200E+1, 0.65458000E+1, 0.00000000E+0, 0.29104880E+3, 0.228E+3, + 0.300E+1, 0.65458000E+1, 0.00000000E+0, 0.17059360E+3, 0.228E+3, 0.400E+1, 0.65458000E+1, + 0.00000000E+0, 0.11609230E+3, 0.228E+3, 0.500E+1, 0.65458000E+1, 0.00000000E+0, 0.79205600E+2, + 0.228E+3, 0.600E+1, 0.65458000E+1, 0.00000000E+0, 0.55895400E+2, 0.228E+3, 0.700E+1, + 0.65458000E+1, 0.00000000E+0, 0.42646200E+2, 0.228E+3, 0.800E+1, 0.65458000E+1, 0.00000000E+0, + 0.32555300E+2, 0.228E+3, 0.900E+1, 0.65458000E+1, 0.00000000E+0, 0.25221000E+2, 0.228E+3, + 0.100E+2, 0.65458000E+1, 0.00000000E+0, 0.34857980E+3, 0.228E+3, 0.110E+2, 0.65458000E+1, + 0.00000000E+0, 0.27122230E+3, 0.228E+3, 0.120E+2, 0.65458000E+1, 0.00000000E+0, 0.25118770E+3, + 0.228E+3, 0.130E+2, 0.65458000E+1, 0.00000000E+0, 0.19928550E+3, 0.228E+3, 0.140E+2, + 0.65458000E+1, 0.00000000E+0, 0.15644320E+3, 0.228E+3, 0.150E+2, 0.65458000E+1, 0.00000000E+0, + 0.13051020E+3, 0.228E+3, 0.160E+2, 0.65458000E+1, 0.00000000E+0, 0.10719760E+3, 0.228E+3, + 0.170E+2, 0.65458000E+1, 0.00000000E+0, 0.88182900E+2, 0.228E+3, 0.180E+2, 0.65458000E+1, + 0.00000000E+0, 0.57086590E+3, 0.228E+3, 0.190E+2, 0.65458000E+1, 0.00000000E+0, 0.47482250E+3, + 0.228E+3, 0.200E+2, 0.65458000E+1, 0.00000000E+0, 0.39304870E+3, 0.228E+3, 0.210E+2, + 0.65458000E+1, 0.00000000E+0, 0.38043770E+3, 0.228E+3, 0.220E+2, 0.65458000E+1, 0.00000000E+0, + 0.34885100E+3, 0.228E+3, 0.230E+2, 0.65458000E+1, 0.00000000E+0, 0.27525510E+3, 0.228E+3, + 0.240E+2, 0.65458000E+1, 0.00000000E+0, 0.30096400E+3, 0.228E+3, 0.250E+2, 0.65458000E+1, + 0.00000000E+0, 0.23668420E+3, 0.228E+3, 0.260E+2, 0.65458000E+1, 0.00000000E+0, 0.25118370E+3, + 0.228E+3, 0.270E+2, 0.65458000E+1, 0.00000000E+0, 0.25838880E+3, 0.228E+3, 0.280E+2, + 0.65458000E+1, 0.00000000E+0, 0.19852020E+3, 0.228E+3, 0.290E+2, 0.65458000E+1, 0.00000000E+0, + 0.20431190E+3, 0.228E+3, 0.300E+2, 0.65458000E+1, 0.00000000E+0, 0.24136360E+3, 0.228E+3, + 0.310E+2, 0.65458000E+1, 0.00000000E+0, 0.21391340E+3, 0.228E+3, 0.320E+2, 0.65458000E+1, + 0.00000000E+0, 0.18341100E+3, 0.228E+3, 0.330E+2, 0.65458000E+1, 0.00000000E+0, 0.16519610E+3, + 0.228E+3, 0.340E+2, 0.65458000E+1, 0.00000000E+0, 0.14518280E+3, 0.228E+3, 0.350E+2, + 0.65458000E+1, 0.00000000E+0, 0.12680940E+3, 0.228E+3, 0.360E+2, 0.65458000E+1, 0.00000000E+0, + 0.64057820E+3, 0.228E+3, 0.370E+2, 0.65458000E+1, 0.00000000E+0, 0.56577900E+3, 0.228E+3, + 0.380E+2, 0.65458000E+1, 0.00000000E+0, 0.49739960E+3, 0.228E+3, 0.390E+2, 0.65458000E+1, + 0.00000000E+0, 0.44816000E+3, 0.228E+3, 0.400E+2, 0.65458000E+1, 0.00000000E+0, 0.40942870E+3, + 0.228E+3, 0.410E+2, 0.65458000E+1, 0.00000000E+0, 0.31734720E+3, 0.228E+3, 0.420E+2, + 0.65458000E+1, 0.00000000E+0, 0.35355460E+3, 0.228E+3, 0.430E+2, 0.65458000E+1, 0.00000000E+0, + 0.27055020E+3, 0.228E+3, 0.440E+2, 0.65458000E+1, 0.00000000E+0, 0.29544510E+3, 0.228E+3, + 0.450E+2, 0.65458000E+1, 0.00000000E+0, 0.27433660E+3, 0.228E+3, 0.460E+2, 0.65458000E+1, + 0.00000000E+0, 0.22905370E+3, 0.228E+3, 0.470E+2, 0.65458000E+1, 0.00000000E+0, 0.24218240E+3, + 0.228E+3, 0.480E+2, 0.65458000E+1, 0.00000000E+0, 0.30263410E+3, 0.228E+3, 0.490E+2, + 0.65458000E+1, 0.00000000E+0, 0.28084550E+3, 0.228E+3, 0.500E+2, 0.65458000E+1, 0.00000000E+0, + 0.25131640E+3, 0.228E+3, 0.510E+2, 0.65458000E+1, 0.00000000E+0, 0.23382360E+3, 0.228E+3, + 0.520E+2, 0.65458000E+1, 0.00000000E+0, 0.21211680E+3, 0.228E+3, 0.530E+2, 0.65458000E+1, + 0.00000000E+0, 0.19136210E+3, 0.228E+3, 0.540E+2, 0.65458000E+1, 0.00000000E+0, 0.78055200E+3, + 0.228E+3, 0.550E+2, 0.65458000E+1, 0.00000000E+0, 0.72070440E+3, 0.228E+3, 0.560E+2, + 0.65458000E+1, 0.00000000E+0, 0.63535610E+3, 0.228E+3, 0.570E+2, 0.65458000E+1, 0.00000000E+0, + 0.29682360E+3, 0.228E+3, 0.580E+2, 0.65458000E+1, 0.27991000E+1, 0.63962140E+3, 0.228E+3, + 0.590E+2, 0.65458000E+1, 0.00000000E+0, 0.61452410E+3, 0.228E+3, 0.600E+2, 0.65458000E+1, + 0.00000000E+0, 0.59919690E+3, 0.228E+3, 0.610E+2, 0.65458000E+1, 0.00000000E+0, 0.58508560E+3, + 0.228E+3, 0.620E+2, 0.65458000E+1, 0.00000000E+0, 0.57257280E+3, 0.228E+3, 0.630E+2, + 0.65458000E+1, 0.00000000E+0, 0.45239680E+3, 0.228E+3, 0.640E+2, 0.65458000E+1, 0.00000000E+0, + 0.50669850E+3, 0.228E+3, 0.650E+2, 0.65458000E+1, 0.00000000E+0, 0.48901870E+3, 0.228E+3, + 0.660E+2, 0.65458000E+1, 0.00000000E+0, 0.51684540E+3, 0.228E+3, 0.670E+2, 0.65458000E+1, + 0.00000000E+0, 0.50590420E+3, 0.228E+3, 0.680E+2, 0.65458000E+1, 0.00000000E+0, 0.49606180E+3, + 0.228E+3, 0.690E+2, 0.65458000E+1, 0.00000000E+0, 0.49015300E+3, 0.228E+3, 0.700E+2, + 0.65458000E+1, 0.00000000E+0, 0.41429680E+3, 0.228E+3, 0.710E+2, 0.65458000E+1, 0.00000000E+0, + 0.40871690E+3, 0.228E+3, 0.720E+2, 0.65458000E+1, 0.00000000E+0, 0.37400200E+3, 0.228E+3, + 0.730E+2, 0.65458000E+1, 0.00000000E+0, 0.31678470E+3, 0.228E+3, 0.740E+2, 0.65458000E+1, + 0.00000000E+0, 0.32251470E+3, 0.228E+3, 0.750E+2, 0.65458000E+1, 0.00000000E+0, 0.29305060E+3, + 0.228E+3, 0.760E+2, 0.65458000E+1, 0.00000000E+0, 0.26898340E+3, 0.228E+3, 0.770E+2, + 0.65458000E+1, 0.00000000E+0, 0.22421600E+3, 0.228E+3, 0.780E+2, 0.65458000E+1, 0.00000000E+0, + 0.20978810E+3, 0.228E+3, 0.790E+2, 0.65458000E+1, 0.00000000E+0, 0.21587920E+3, 0.228E+3, + 0.800E+2, 0.65458000E+1, 0.00000000E+0, 0.31149490E+3, 0.228E+3, 0.810E+2, 0.65458000E+1, + 0.00000000E+0, 0.30528260E+3, 0.228E+3, 0.820E+2, 0.65458000E+1, 0.00000000E+0, 0.28148900E+3, + 0.228E+3, 0.830E+2, 0.65458000E+1, 0.00000000E+0, 0.26905740E+3, 0.228E+3, 0.840E+2, + 0.65458000E+1, 0.00000000E+0, 0.24904140E+3, 0.228E+3, 0.850E+2, 0.65458000E+1, 0.00000000E+0, + 0.22894100E+3, 0.228E+3, 0.860E+2, 0.65458000E+1, 0.00000000E+0, 0.73916470E+3, 0.228E+3, + 0.870E+2, 0.65458000E+1, 0.00000000E+0, 0.71405300E+3, 0.228E+3, 0.880E+2, 0.65458000E+1, + 0.00000000E+0, 0.63328860E+3, 0.228E+3, 0.890E+2, 0.65458000E+1, 0.00000000E+0, 0.57161590E+3, + 0.228E+3, 0.900E+2, 0.65458000E+1, 0.00000000E+0, 0.56672940E+3, 0.228E+3, 0.910E+2, + 0.65458000E+1, 0.00000000E+0, 0.54885680E+3, 0.228E+3, 0.920E+2, 0.65458000E+1, 0.00000000E+0, + 0.56381700E+3, 0.228E+3, 0.930E+2, 0.65458000E+1, 0.00000000E+0, 0.54623160E+3, 0.228E+3, + 0.940E+2, 0.65458000E+1, 0.00000000E+0, 0.31098100E+2, 0.228E+3, 0.101E+3, 0.65458000E+1, + 0.00000000E+0, 0.99345400E+2, 0.228E+3, 0.103E+3, 0.65458000E+1, 0.98650000E+0, 0.12698120E+3, + 0.228E+3, 0.104E+3, 0.65458000E+1, 0.98080000E+0, 0.97926800E+2, 0.228E+3, 0.105E+3, + 0.65458000E+1, 0.97060000E+0, 0.74314900E+2, 0.228E+3, 0.106E+3, 0.65458000E+1, 0.98680000E+0, + 0.52153200E+2, 0.228E+3, 0.107E+3, 0.65458000E+1, 0.99440000E+0, 0.38319400E+2, 0.228E+3, + 0.108E+3, 0.65458000E+1, 0.99250000E+0, 0.26700000E+2, 0.228E+3, 0.109E+3, 0.65458000E+1, + 0.99820000E+0, 0.14518540E+3, 0.228E+3, 0.111E+3, 0.65458000E+1, 0.96840000E+0, 0.22418120E+3, + 0.228E+3, 0.112E+3, 0.65458000E+1, 0.96280000E+0, 0.22795650E+3, 0.228E+3, 0.113E+3, + 0.65458000E+1, 0.96480000E+0, 0.18441750E+3, 0.228E+3, 0.114E+3, 0.65458000E+1, 0.95070000E+0, + 0.15191520E+3, 0.228E+3, 0.115E+3, 0.65458000E+1, 0.99470000E+0, 0.12907630E+3, 0.228E+3, + 0.116E+3, 0.65458000E+1, 0.99480000E+0, 0.10609050E+3, 0.228E+3, 0.117E+3, 0.65458000E+1, + 0.99720000E+0, 0.20137990E+3, 0.228E+3, 0.119E+3, 0.65458000E+1, 0.97670000E+0, 0.38042010E+3, + 0.228E+3, 0.120E+3, 0.65458000E+1, 0.98310000E+0, 0.20223920E+3, 0.228E+3, 0.121E+3, + 0.65458000E+1, 0.18627000E+1, 0.19535160E+3, 0.228E+3, 0.122E+3, 0.65458000E+1, 0.18299000E+1, + 0.19147150E+3, 0.228E+3, 0.123E+3, 0.65458000E+1, 0.19138000E+1, 0.18962030E+3, 0.228E+3, + 0.124E+3, 0.65458000E+1, 0.18269000E+1, 0.17495290E+3, 0.228E+3, 0.125E+3, 0.65458000E+1, + 0.16406000E+1, 0.16212930E+3, 0.228E+3, 0.126E+3, 0.65458000E+1, 0.16483000E+1, 0.15471980E+3, + 0.228E+3, 0.127E+3, 0.65458000E+1, 0.17149000E+1, 0.15124090E+3, 0.228E+3, 0.128E+3, + 0.65458000E+1, 0.17937000E+1, 0.14914790E+3, 0.228E+3, 0.129E+3, 0.65458000E+1, 0.95760000E+0, + 0.14045520E+3, 0.228E+3, 0.130E+3, 0.65458000E+1, 0.19419000E+1, 0.22700010E+3, 0.228E+3, + 0.131E+3, 0.65458000E+1, 0.96010000E+0, 0.20040030E+3, 0.228E+3, 0.132E+3, 0.65458000E+1, + 0.94340000E+0, 0.18036950E+3, 0.228E+3, 0.133E+3, 0.65458000E+1, 0.98890000E+0, 0.16525840E+3, + 0.228E+3, 0.134E+3, 0.65458000E+1, 0.99010000E+0, 0.14616810E+3, 0.228E+3, 0.135E+3, + 0.65458000E+1, 0.99740000E+0, 0.24066290E+3, 0.228E+3, 0.137E+3, 0.65458000E+1, 0.97380000E+0, + 0.46289020E+3, 0.228E+3, 0.138E+3, 0.65458000E+1, 0.98010000E+0, 0.35647370E+3, 0.228E+3, + 0.139E+3, 0.65458000E+1, 0.19153000E+1, 0.26749730E+3, 0.228E+3, 0.140E+3, 0.65458000E+1, + 0.19355000E+1, 0.27016880E+3, 0.228E+3, 0.141E+3, 0.65458000E+1, 0.19545000E+1, 0.25232810E+3, + 0.228E+3, 0.142E+3, 0.65458000E+1, 0.19420000E+1, 0.28197070E+3, 0.228E+3, 0.143E+3, + 0.65458000E+1, 0.16682000E+1, 0.22072030E+3, 0.228E+3, 0.144E+3, 0.65458000E+1, 0.18584000E+1, + 0.20667290E+3, 0.228E+3, 0.145E+3, 0.65458000E+1, 0.19003000E+1, 0.19214160E+3, 0.228E+3, + 0.146E+3, 0.65458000E+1, 0.18630000E+1, 0.18584300E+3, 0.228E+3, 0.147E+3, 0.65458000E+1, + 0.96790000E+0, 0.18414330E+3, 0.228E+3, 0.148E+3, 0.65458000E+1, 0.19539000E+1, 0.28888240E+3, + 0.228E+3, 0.149E+3, 0.65458000E+1, 0.96330000E+0, 0.26236960E+3, 0.228E+3, 0.150E+3, + 0.65458000E+1, 0.95140000E+0, 0.24645550E+3, 0.228E+3, 0.151E+3, 0.65458000E+1, 0.97490000E+0, + 0.23368760E+3, 0.228E+3, 0.152E+3, 0.65458000E+1, 0.98110000E+0, 0.21408530E+3, 0.228E+3, + 0.153E+3, 0.65458000E+1, 0.99680000E+0, 0.28525530E+3, 0.228E+3, 0.155E+3, 0.65458000E+1, + 0.99090000E+0, 0.59951160E+3, 0.228E+3, 0.156E+3, 0.65458000E+1, 0.97970000E+0, 0.45093480E+3, + 0.228E+3, 0.157E+3, 0.65458000E+1, 0.19373000E+1, 0.28796490E+3, 0.228E+3, 0.159E+3, + 0.65458000E+1, 0.29425000E+1, 0.28202970E+3, 0.228E+3, 0.160E+3, 0.65458000E+1, 0.29455000E+1, + 0.27316700E+3, 0.228E+3, 0.161E+3, 0.65458000E+1, 0.29413000E+1, 0.27433460E+3, 0.228E+3, + 0.162E+3, 0.65458000E+1, 0.29300000E+1, 0.26403730E+3, 0.228E+3, 0.163E+3, 0.65458000E+1, + 0.18286000E+1, 0.27594550E+3, 0.228E+3, 0.164E+3, 0.65458000E+1, 0.28732000E+1, 0.25937430E+3, + 0.228E+3, 0.165E+3, 0.65458000E+1, 0.29086000E+1, 0.26363770E+3, 0.228E+3, 0.166E+3, + 0.65458000E+1, 0.28965000E+1, 0.24631030E+3, 0.228E+3, 0.167E+3, 0.65458000E+1, 0.29242000E+1, + 0.23934130E+3, 0.228E+3, 0.168E+3, 0.65458000E+1, 0.29282000E+1, 0.23775270E+3, 0.228E+3, + 0.169E+3, 0.65458000E+1, 0.29246000E+1, 0.24957470E+3, 0.228E+3, 0.170E+3, 0.65458000E+1, + 0.28482000E+1, 0.22985230E+3, 0.228E+3, 0.171E+3, 0.65458000E+1, 0.29219000E+1, 0.30915100E+3, + 0.228E+3, 0.172E+3, 0.65458000E+1, 0.19254000E+1, 0.28770370E+3, 0.228E+3, 0.173E+3, + 0.65458000E+1, 0.19459000E+1, 0.26327960E+3, 0.228E+3, 0.174E+3, 0.65458000E+1, 0.19292000E+1, + 0.26585220E+3, 0.228E+3, 0.175E+3, 0.65458000E+1, 0.18104000E+1, 0.23419810E+3, 0.228E+3, + 0.176E+3, 0.65458000E+1, 0.18858000E+1, 0.22066120E+3, 0.228E+3, 0.177E+3, 0.65458000E+1, + 0.18648000E+1, 0.21098510E+3, 0.228E+3, 0.178E+3, 0.65458000E+1, 0.19188000E+1, 0.20183220E+3, + 0.228E+3, 0.179E+3, 0.65458000E+1, 0.98460000E+0, 0.19539650E+3, 0.228E+3, 0.180E+3, + 0.65458000E+1, 0.19896000E+1, 0.31077960E+3, 0.228E+3, 0.181E+3, 0.65458000E+1, 0.92670000E+0, + 0.28433510E+3, 0.228E+3, 0.182E+3, 0.65458000E+1, 0.93830000E+0, 0.27630910E+3, 0.228E+3, + 0.183E+3, 0.65458000E+1, 0.98200000E+0, 0.26918960E+3, 0.228E+3, 0.184E+3, 0.65458000E+1, + 0.98150000E+0, 0.25203630E+3, 0.228E+3, 0.185E+3, 0.65458000E+1, 0.99540000E+0, 0.32130350E+3, + 0.228E+3, 0.187E+3, 0.65458000E+1, 0.97050000E+0, 0.59764750E+3, 0.228E+3, 0.188E+3, + 0.65458000E+1, 0.96620000E+0, 0.34062710E+3, 0.228E+3, 0.189E+3, 0.65458000E+1, 0.29070000E+1, + 0.39198180E+3, 0.228E+3, 0.190E+3, 0.65458000E+1, 0.28844000E+1, 0.35114350E+3, 0.228E+3, + 0.191E+3, 0.65458000E+1, 0.28738000E+1, 0.31117290E+3, 0.228E+3, 0.192E+3, 0.65458000E+1, + 0.28878000E+1, 0.29966590E+3, 0.228E+3, 0.193E+3, 0.65458000E+1, 0.29095000E+1, 0.35795210E+3, + 0.228E+3, 0.194E+3, 0.65458000E+1, 0.19209000E+1, 0.83603000E+2, 0.228E+3, 0.204E+3, + 0.65458000E+1, 0.19697000E+1, 0.82447400E+2, 0.228E+3, 0.205E+3, 0.65458000E+1, 0.19441000E+1, + 0.60867800E+2, 0.228E+3, 0.206E+3, 0.65458000E+1, 0.19985000E+1, 0.49051100E+2, 0.228E+3, + 0.207E+3, 0.65458000E+1, 0.20143000E+1, 0.33942700E+2, 0.228E+3, 0.208E+3, 0.65458000E+1, + 0.19887000E+1, 0.14769120E+3, 0.228E+3, 0.212E+3, 0.65458000E+1, 0.19496000E+1, 0.17839840E+3, + 0.228E+3, 0.213E+3, 0.65458000E+1, 0.19311000E+1, 0.17172690E+3, 0.228E+3, 0.214E+3, + 0.65458000E+1, 0.19435000E+1, 0.14983280E+3, 0.228E+3, 0.215E+3, 0.65458000E+1, 0.20102000E+1, + 0.12649470E+3, 0.228E+3, 0.216E+3, 0.65458000E+1, 0.19903000E+1, 0.20744400E+3, 0.228E+3, + 0.220E+3, 0.65458000E+1, 0.19349000E+1, 0.19985020E+3, 0.228E+3, 0.221E+3, 0.65458000E+1, + 0.28999000E+1, 0.20237460E+3, 0.228E+3, 0.222E+3, 0.65458000E+1, 0.38675000E+1, 0.18532650E+3, + 0.228E+3, 0.223E+3, 0.65458000E+1, 0.29110000E+1, 0.14047480E+3, 0.228E+3, 0.224E+3, + 0.65458000E+1, 0.10619100E+2, 0.12062490E+3, 0.228E+3, 0.225E+3, 0.65458000E+1, 0.98849000E+1, + 0.11838000E+3, 0.228E+3, 0.226E+3, 0.65458000E+1, 0.91376000E+1, 0.13802230E+3, 0.228E+3, + 0.227E+3, 0.65458000E+1, 0.29263000E+1, 0.12878200E+3, 0.228E+3, 0.228E+3, 0.65458000E+1, + 0.65458000E+1, 0.26956200E+2, 0.231E+3, 0.100E+1, 0.19315000E+1, 0.91180000E+0, 0.17439200E+2, + 0.231E+3, 0.200E+1, 0.19315000E+1, 0.00000000E+0, 0.44148880E+3, 0.231E+3, 0.300E+1, + 0.19315000E+1, 0.00000000E+0, 0.25018890E+3, 0.231E+3, 0.400E+1, 0.19315000E+1, 0.00000000E+0, + 0.16615250E+3, 0.231E+3, 0.500E+1, 0.19315000E+1, 0.00000000E+0, 0.11083840E+3, 0.231E+3, + 0.600E+1, 0.19315000E+1, 0.00000000E+0, 0.76664100E+2, 0.231E+3, 0.700E+1, 0.19315000E+1, + 0.00000000E+0, 0.57542500E+2, 0.231E+3, 0.800E+1, 0.19315000E+1, 0.00000000E+0, 0.43238500E+2, + 0.231E+3, 0.900E+1, 0.19315000E+1, 0.00000000E+0, 0.33022800E+2, 0.231E+3, 0.100E+2, + 0.19315000E+1, 0.00000000E+0, 0.52706710E+3, 0.231E+3, 0.110E+2, 0.19315000E+1, 0.00000000E+0, + 0.39992630E+3, 0.231E+3, 0.120E+2, 0.19315000E+1, 0.00000000E+0, 0.36633710E+3, 0.231E+3, + 0.130E+2, 0.19315000E+1, 0.00000000E+0, 0.28597610E+3, 0.231E+3, 0.140E+2, 0.19315000E+1, + 0.00000000E+0, 0.22097630E+3, 0.231E+3, 0.150E+2, 0.19315000E+1, 0.00000000E+0, 0.18213800E+3, + 0.231E+3, 0.160E+2, 0.19315000E+1, 0.00000000E+0, 0.14771690E+3, 0.231E+3, 0.170E+2, + 0.19315000E+1, 0.00000000E+0, 0.12002340E+3, 0.231E+3, 0.180E+2, 0.19315000E+1, 0.00000000E+0, + 0.86510660E+3, 0.231E+3, 0.190E+2, 0.19315000E+1, 0.00000000E+0, 0.70620410E+3, 0.231E+3, + 0.200E+2, 0.19315000E+1, 0.00000000E+0, 0.58191500E+3, 0.231E+3, 0.210E+2, 0.19315000E+1, + 0.00000000E+0, 0.56029450E+3, 0.231E+3, 0.220E+2, 0.19315000E+1, 0.00000000E+0, 0.51220750E+3, + 0.231E+3, 0.230E+2, 0.19315000E+1, 0.00000000E+0, 0.40283090E+3, 0.231E+3, 0.240E+2, + 0.19315000E+1, 0.00000000E+0, 0.43988290E+3, 0.231E+3, 0.250E+2, 0.19315000E+1, 0.00000000E+0, + 0.34453520E+3, 0.231E+3, 0.260E+2, 0.19315000E+1, 0.00000000E+0, 0.36443400E+3, 0.231E+3, + 0.270E+2, 0.19315000E+1, 0.00000000E+0, 0.37611120E+3, 0.231E+3, 0.280E+2, 0.19315000E+1, + 0.00000000E+0, 0.28776680E+3, 0.231E+3, 0.290E+2, 0.19315000E+1, 0.00000000E+0, 0.29431290E+3, + 0.231E+3, 0.300E+2, 0.19315000E+1, 0.00000000E+0, 0.34953890E+3, 0.231E+3, 0.310E+2, + 0.19315000E+1, 0.00000000E+0, 0.30609340E+3, 0.231E+3, 0.320E+2, 0.19315000E+1, 0.00000000E+0, + 0.25916500E+3, 0.231E+3, 0.330E+2, 0.19315000E+1, 0.00000000E+0, 0.23133530E+3, 0.231E+3, + 0.340E+2, 0.19315000E+1, 0.00000000E+0, 0.20127060E+3, 0.231E+3, 0.350E+2, 0.19315000E+1, + 0.00000000E+0, 0.17402300E+3, 0.231E+3, 0.360E+2, 0.19315000E+1, 0.00000000E+0, 0.96816820E+3, + 0.231E+3, 0.370E+2, 0.19315000E+1, 0.00000000E+0, 0.84136100E+3, 0.231E+3, 0.380E+2, + 0.19315000E+1, 0.00000000E+0, 0.73335550E+3, 0.231E+3, 0.390E+2, 0.19315000E+1, 0.00000000E+0, + 0.65685920E+3, 0.231E+3, 0.400E+2, 0.19315000E+1, 0.00000000E+0, 0.59747450E+3, 0.231E+3, + 0.410E+2, 0.19315000E+1, 0.00000000E+0, 0.45889060E+3, 0.231E+3, 0.420E+2, 0.19315000E+1, + 0.00000000E+0, 0.51304100E+3, 0.231E+3, 0.430E+2, 0.19315000E+1, 0.00000000E+0, 0.38860430E+3, + 0.231E+3, 0.440E+2, 0.19315000E+1, 0.00000000E+0, 0.42520690E+3, 0.231E+3, 0.450E+2, + 0.19315000E+1, 0.00000000E+0, 0.39363700E+3, 0.231E+3, 0.460E+2, 0.19315000E+1, 0.00000000E+0, + 0.32788520E+3, 0.231E+3, 0.470E+2, 0.19315000E+1, 0.00000000E+0, 0.34605680E+3, 0.231E+3, + 0.480E+2, 0.19315000E+1, 0.00000000E+0, 0.43674070E+3, 0.231E+3, 0.490E+2, 0.19315000E+1, + 0.00000000E+0, 0.40172510E+3, 0.231E+3, 0.500E+2, 0.19315000E+1, 0.00000000E+0, 0.35584740E+3, + 0.231E+3, 0.510E+2, 0.19315000E+1, 0.00000000E+0, 0.32880760E+3, 0.231E+3, 0.520E+2, + 0.19315000E+1, 0.00000000E+0, 0.29588170E+3, 0.231E+3, 0.530E+2, 0.19315000E+1, 0.00000000E+0, + 0.26471260E+3, 0.231E+3, 0.540E+2, 0.19315000E+1, 0.00000000E+0, 0.11792492E+4, 0.231E+3, + 0.550E+2, 0.19315000E+1, 0.00000000E+0, 0.10739458E+4, 0.231E+3, 0.560E+2, 0.19315000E+1, + 0.00000000E+0, 0.93892860E+3, 0.231E+3, 0.570E+2, 0.19315000E+1, 0.00000000E+0, 0.42057330E+3, + 0.231E+3, 0.580E+2, 0.19315000E+1, 0.27991000E+1, 0.94969780E+3, 0.231E+3, 0.590E+2, + 0.19315000E+1, 0.00000000E+0, 0.91118510E+3, 0.231E+3, 0.600E+2, 0.19315000E+1, 0.00000000E+0, + 0.88814170E+3, 0.231E+3, 0.610E+2, 0.19315000E+1, 0.00000000E+0, 0.86697870E+3, 0.231E+3, + 0.620E+2, 0.19315000E+1, 0.00000000E+0, 0.84820840E+3, 0.231E+3, 0.630E+2, 0.19315000E+1, + 0.00000000E+0, 0.66277010E+3, 0.231E+3, 0.640E+2, 0.19315000E+1, 0.00000000E+0, 0.75204060E+3, + 0.231E+3, 0.650E+2, 0.19315000E+1, 0.00000000E+0, 0.72468160E+3, 0.231E+3, 0.660E+2, + 0.19315000E+1, 0.00000000E+0, 0.76414750E+3, 0.231E+3, 0.670E+2, 0.19315000E+1, 0.00000000E+0, + 0.74786110E+3, 0.231E+3, 0.680E+2, 0.19315000E+1, 0.00000000E+0, 0.73312340E+3, 0.231E+3, + 0.690E+2, 0.19315000E+1, 0.00000000E+0, 0.72475960E+3, 0.231E+3, 0.700E+2, 0.19315000E+1, + 0.00000000E+0, 0.60808820E+3, 0.231E+3, 0.710E+2, 0.19315000E+1, 0.00000000E+0, 0.59509760E+3, + 0.231E+3, 0.720E+2, 0.19315000E+1, 0.00000000E+0, 0.54106220E+3, 0.231E+3, 0.730E+2, + 0.19315000E+1, 0.00000000E+0, 0.45507210E+3, 0.231E+3, 0.740E+2, 0.19315000E+1, 0.00000000E+0, + 0.46243470E+3, 0.231E+3, 0.750E+2, 0.19315000E+1, 0.00000000E+0, 0.41762900E+3, 0.231E+3, + 0.760E+2, 0.19315000E+1, 0.00000000E+0, 0.38132090E+3, 0.231E+3, 0.770E+2, 0.19315000E+1, + 0.00000000E+0, 0.31540110E+3, 0.231E+3, 0.780E+2, 0.19315000E+1, 0.00000000E+0, 0.29416770E+3, + 0.231E+3, 0.790E+2, 0.19315000E+1, 0.00000000E+0, 0.30243400E+3, 0.231E+3, 0.800E+2, + 0.19315000E+1, 0.00000000E+0, 0.44706730E+3, 0.231E+3, 0.810E+2, 0.19315000E+1, 0.00000000E+0, + 0.43547920E+3, 0.231E+3, 0.820E+2, 0.19315000E+1, 0.00000000E+0, 0.39809290E+3, 0.231E+3, + 0.830E+2, 0.19315000E+1, 0.00000000E+0, 0.37843240E+3, 0.231E+3, 0.840E+2, 0.19315000E+1, + 0.00000000E+0, 0.34775130E+3, 0.231E+3, 0.850E+2, 0.19315000E+1, 0.00000000E+0, 0.31736560E+3, + 0.231E+3, 0.860E+2, 0.19315000E+1, 0.00000000E+0, 0.11088359E+4, 0.231E+3, 0.870E+2, + 0.19315000E+1, 0.00000000E+0, 0.10590662E+4, 0.231E+3, 0.880E+2, 0.19315000E+1, 0.00000000E+0, + 0.93187680E+3, 0.231E+3, 0.890E+2, 0.19315000E+1, 0.00000000E+0, 0.83242240E+3, 0.231E+3, + 0.900E+2, 0.19315000E+1, 0.00000000E+0, 0.82834850E+3, 0.231E+3, 0.910E+2, 0.19315000E+1, + 0.00000000E+0, 0.80186390E+3, 0.231E+3, 0.920E+2, 0.19315000E+1, 0.00000000E+0, 0.82836820E+3, + 0.231E+3, 0.930E+2, 0.19315000E+1, 0.00000000E+0, 0.80170370E+3, 0.231E+3, 0.940E+2, + 0.19315000E+1, 0.00000000E+0, 0.43888100E+2, 0.231E+3, 0.101E+3, 0.19315000E+1, 0.00000000E+0, + 0.14510430E+3, 0.231E+3, 0.103E+3, 0.19315000E+1, 0.98650000E+0, 0.18457440E+3, 0.231E+3, + 0.104E+3, 0.19315000E+1, 0.98080000E+0, 0.13925460E+3, 0.231E+3, 0.105E+3, 0.19315000E+1, + 0.97060000E+0, 0.10391800E+3, 0.231E+3, 0.106E+3, 0.19315000E+1, 0.98680000E+0, 0.71423400E+2, + 0.231E+3, 0.107E+3, 0.19315000E+1, 0.99440000E+0, 0.51470500E+2, 0.231E+3, 0.108E+3, + 0.19315000E+1, 0.99250000E+0, 0.34900800E+2, 0.231E+3, 0.109E+3, 0.19315000E+1, 0.99820000E+0, + 0.21236180E+3, 0.231E+3, 0.111E+3, 0.19315000E+1, 0.96840000E+0, 0.32896970E+3, 0.231E+3, + 0.112E+3, 0.19315000E+1, 0.96280000E+0, 0.33140550E+3, 0.231E+3, 0.113E+3, 0.19315000E+1, + 0.96480000E+0, 0.26387400E+3, 0.231E+3, 0.114E+3, 0.19315000E+1, 0.95070000E+0, 0.21439030E+3, + 0.231E+3, 0.115E+3, 0.19315000E+1, 0.99470000E+0, 0.18013610E+3, 0.231E+3, 0.116E+3, + 0.19315000E+1, 0.99480000E+0, 0.14618730E+3, 0.231E+3, 0.117E+3, 0.19315000E+1, 0.99720000E+0, + 0.29057390E+3, 0.231E+3, 0.119E+3, 0.19315000E+1, 0.97670000E+0, 0.56411470E+3, 0.231E+3, + 0.120E+3, 0.19315000E+1, 0.98310000E+0, 0.28899240E+3, 0.231E+3, 0.121E+3, 0.19315000E+1, + 0.18627000E+1, 0.27882930E+3, 0.231E+3, 0.122E+3, 0.19315000E+1, 0.18299000E+1, 0.27324400E+3, + 0.231E+3, 0.123E+3, 0.19315000E+1, 0.19138000E+1, 0.27091680E+3, 0.231E+3, 0.124E+3, + 0.19315000E+1, 0.18269000E+1, 0.24831530E+3, 0.231E+3, 0.125E+3, 0.19315000E+1, 0.16406000E+1, + 0.22943180E+3, 0.231E+3, 0.126E+3, 0.19315000E+1, 0.16483000E+1, 0.21879640E+3, 0.231E+3, + 0.127E+3, 0.19315000E+1, 0.17149000E+1, 0.21396210E+3, 0.231E+3, 0.128E+3, 0.19315000E+1, + 0.17937000E+1, 0.21202750E+3, 0.231E+3, 0.129E+3, 0.19315000E+1, 0.95760000E+0, 0.19784590E+3, + 0.231E+3, 0.130E+3, 0.19315000E+1, 0.19419000E+1, 0.32767720E+3, 0.231E+3, 0.131E+3, + 0.19315000E+1, 0.96010000E+0, 0.28580490E+3, 0.231E+3, 0.132E+3, 0.19315000E+1, 0.94340000E+0, + 0.25463590E+3, 0.231E+3, 0.133E+3, 0.19315000E+1, 0.98890000E+0, 0.23143120E+3, 0.231E+3, + 0.134E+3, 0.19315000E+1, 0.99010000E+0, 0.20272250E+3, 0.231E+3, 0.135E+3, 0.19315000E+1, + 0.99740000E+0, 0.34599210E+3, 0.231E+3, 0.137E+3, 0.19315000E+1, 0.97380000E+0, 0.68659850E+3, + 0.231E+3, 0.138E+3, 0.19315000E+1, 0.98010000E+0, 0.51944370E+3, 0.231E+3, 0.139E+3, + 0.19315000E+1, 0.19153000E+1, 0.38219520E+3, 0.231E+3, 0.140E+3, 0.19315000E+1, 0.19355000E+1, + 0.38593850E+3, 0.231E+3, 0.141E+3, 0.19315000E+1, 0.19545000E+1, 0.35915800E+3, 0.231E+3, + 0.142E+3, 0.19315000E+1, 0.19420000E+1, 0.40491750E+3, 0.231E+3, 0.143E+3, 0.19315000E+1, + 0.16682000E+1, 0.31159910E+3, 0.231E+3, 0.144E+3, 0.19315000E+1, 0.18584000E+1, 0.29122610E+3, + 0.231E+3, 0.145E+3, 0.19315000E+1, 0.19003000E+1, 0.27005910E+3, 0.231E+3, 0.146E+3, + 0.19315000E+1, 0.18630000E+1, 0.26136540E+3, 0.231E+3, 0.147E+3, 0.19315000E+1, 0.96790000E+0, + 0.25790070E+3, 0.231E+3, 0.148E+3, 0.19315000E+1, 0.19539000E+1, 0.41546410E+3, 0.231E+3, + 0.149E+3, 0.19315000E+1, 0.96330000E+0, 0.37370470E+3, 0.231E+3, 0.150E+3, 0.19315000E+1, + 0.95140000E+0, 0.34844250E+3, 0.231E+3, 0.151E+3, 0.19315000E+1, 0.97490000E+0, 0.32849050E+3, + 0.231E+3, 0.152E+3, 0.19315000E+1, 0.98110000E+0, 0.29869480E+3, 0.231E+3, 0.153E+3, + 0.19315000E+1, 0.99680000E+0, 0.40757240E+3, 0.231E+3, 0.155E+3, 0.19315000E+1, 0.99090000E+0, + 0.89181060E+3, 0.231E+3, 0.156E+3, 0.19315000E+1, 0.97970000E+0, 0.65796510E+3, 0.231E+3, + 0.157E+3, 0.19315000E+1, 0.19373000E+1, 0.40771430E+3, 0.231E+3, 0.159E+3, 0.19315000E+1, + 0.29425000E+1, 0.39924480E+3, 0.231E+3, 0.160E+3, 0.19315000E+1, 0.29455000E+1, 0.38644530E+3, + 0.231E+3, 0.161E+3, 0.19315000E+1, 0.29413000E+1, 0.38870550E+3, 0.231E+3, 0.162E+3, + 0.19315000E+1, 0.29300000E+1, 0.37562490E+3, 0.231E+3, 0.163E+3, 0.19315000E+1, 0.18286000E+1, + 0.39136320E+3, 0.231E+3, 0.164E+3, 0.19315000E+1, 0.28732000E+1, 0.36723070E+3, 0.231E+3, + 0.165E+3, 0.19315000E+1, 0.29086000E+1, 0.37425920E+3, 0.231E+3, 0.166E+3, 0.19315000E+1, + 0.28965000E+1, 0.34830790E+3, 0.231E+3, 0.167E+3, 0.19315000E+1, 0.29242000E+1, 0.33828140E+3, + 0.231E+3, 0.168E+3, 0.19315000E+1, 0.29282000E+1, 0.33621030E+3, 0.231E+3, 0.169E+3, + 0.19315000E+1, 0.29246000E+1, 0.35402460E+3, 0.231E+3, 0.170E+3, 0.19315000E+1, 0.28482000E+1, + 0.32484810E+3, 0.231E+3, 0.171E+3, 0.19315000E+1, 0.29219000E+1, 0.44480230E+3, 0.231E+3, + 0.172E+3, 0.19315000E+1, 0.19254000E+1, 0.41120500E+3, 0.231E+3, 0.173E+3, 0.19315000E+1, + 0.19459000E+1, 0.37363290E+3, 0.231E+3, 0.174E+3, 0.19315000E+1, 0.19292000E+1, 0.37928200E+3, + 0.231E+3, 0.175E+3, 0.19315000E+1, 0.18104000E+1, 0.32899190E+3, 0.231E+3, 0.176E+3, + 0.19315000E+1, 0.18858000E+1, 0.30890630E+3, 0.231E+3, 0.177E+3, 0.19315000E+1, 0.18648000E+1, + 0.29467460E+3, 0.231E+3, 0.178E+3, 0.19315000E+1, 0.19188000E+1, 0.28159150E+3, 0.231E+3, + 0.179E+3, 0.19315000E+1, 0.98460000E+0, 0.27130180E+3, 0.231E+3, 0.180E+3, 0.19315000E+1, + 0.19896000E+1, 0.44509120E+3, 0.231E+3, 0.181E+3, 0.19315000E+1, 0.92670000E+0, 0.40339300E+3, + 0.231E+3, 0.182E+3, 0.19315000E+1, 0.93830000E+0, 0.38999300E+3, 0.231E+3, 0.183E+3, + 0.19315000E+1, 0.98200000E+0, 0.37835750E+3, 0.231E+3, 0.184E+3, 0.19315000E+1, 0.98150000E+0, + 0.35197820E+3, 0.231E+3, 0.185E+3, 0.19315000E+1, 0.99540000E+0, 0.45891490E+3, 0.231E+3, + 0.187E+3, 0.19315000E+1, 0.97050000E+0, 0.88404110E+3, 0.231E+3, 0.188E+3, 0.19315000E+1, + 0.96620000E+0, 0.48263570E+3, 0.231E+3, 0.189E+3, 0.19315000E+1, 0.29070000E+1, 0.55982510E+3, + 0.231E+3, 0.190E+3, 0.19315000E+1, 0.28844000E+1, 0.49934950E+3, 0.231E+3, 0.191E+3, + 0.19315000E+1, 0.28738000E+1, 0.43935480E+3, 0.231E+3, 0.192E+3, 0.19315000E+1, 0.28878000E+1, + 0.42233120E+3, 0.231E+3, 0.193E+3, 0.19315000E+1, 0.29095000E+1, 0.51359610E+3, 0.231E+3, + 0.194E+3, 0.19315000E+1, 0.19209000E+1, 0.11896190E+3, 0.231E+3, 0.204E+3, 0.19315000E+1, + 0.19697000E+1, 0.11648300E+3, 0.231E+3, 0.205E+3, 0.19315000E+1, 0.19441000E+1, 0.84269100E+2, + 0.231E+3, 0.206E+3, 0.19315000E+1, 0.19985000E+1, 0.66955000E+2, 0.231E+3, 0.207E+3, + 0.19315000E+1, 0.20143000E+1, 0.45233600E+2, 0.231E+3, 0.208E+3, 0.19315000E+1, 0.19887000E+1, + 0.21230440E+3, 0.231E+3, 0.212E+3, 0.19315000E+1, 0.19496000E+1, 0.25671210E+3, 0.231E+3, + 0.213E+3, 0.19315000E+1, 0.19311000E+1, 0.24505850E+3, 0.231E+3, 0.214E+3, 0.19315000E+1, + 0.19435000E+1, 0.21155710E+3, 0.231E+3, 0.215E+3, 0.19315000E+1, 0.20102000E+1, 0.17644990E+3, + 0.231E+3, 0.216E+3, 0.19315000E+1, 0.19903000E+1, 0.29710840E+3, 0.231E+3, 0.220E+3, + 0.19315000E+1, 0.19349000E+1, 0.28448700E+3, 0.231E+3, 0.221E+3, 0.19315000E+1, 0.28999000E+1, + 0.28787970E+3, 0.231E+3, 0.222E+3, 0.19315000E+1, 0.38675000E+1, 0.26338000E+3, 0.231E+3, + 0.223E+3, 0.19315000E+1, 0.29110000E+1, 0.19677040E+3, 0.231E+3, 0.224E+3, 0.19315000E+1, + 0.10619100E+2, 0.16756290E+3, 0.231E+3, 0.225E+3, 0.19315000E+1, 0.98849000E+1, 0.16455530E+3, + 0.231E+3, 0.226E+3, 0.19315000E+1, 0.91376000E+1, 0.19438680E+3, 0.231E+3, 0.227E+3, + 0.19315000E+1, 0.29263000E+1, 0.18072890E+3, 0.231E+3, 0.228E+3, 0.19315000E+1, 0.65458000E+1, + 0.25787270E+3, 0.231E+3, 0.231E+3, 0.19315000E+1, 0.19315000E+1, 0.28635900E+2, 0.232E+3, + 0.100E+1, 0.19447000E+1, 0.91180000E+0, 0.18618600E+2, 0.232E+3, 0.200E+1, 0.19447000E+1, + 0.00000000E+0, 0.45411250E+3, 0.232E+3, 0.300E+1, 0.19447000E+1, 0.00000000E+0, 0.26160340E+3, + 0.232E+3, 0.400E+1, 0.19447000E+1, 0.00000000E+0, 0.17509380E+3, 0.232E+3, 0.500E+1, + 0.19447000E+1, 0.00000000E+0, 0.11741980E+3, 0.232E+3, 0.600E+1, 0.19447000E+1, 0.00000000E+0, + 0.81501900E+2, 0.232E+3, 0.700E+1, 0.19447000E+1, 0.00000000E+0, 0.61309900E+2, 0.232E+3, + 0.800E+1, 0.19447000E+1, 0.00000000E+0, 0.46146800E+2, 0.232E+3, 0.900E+1, 0.19447000E+1, + 0.00000000E+0, 0.35284200E+2, 0.232E+3, 0.100E+2, 0.19447000E+1, 0.00000000E+0, 0.54266570E+3, + 0.232E+3, 0.110E+2, 0.19447000E+1, 0.00000000E+0, 0.41703070E+3, 0.232E+3, 0.120E+2, + 0.19447000E+1, 0.00000000E+0, 0.38363050E+3, 0.232E+3, 0.130E+2, 0.19447000E+1, 0.00000000E+0, + 0.30113800E+3, 0.232E+3, 0.140E+2, 0.19447000E+1, 0.00000000E+0, 0.23370440E+3, 0.232E+3, + 0.150E+2, 0.19447000E+1, 0.00000000E+0, 0.19313150E+3, 0.232E+3, 0.160E+2, 0.19447000E+1, + 0.00000000E+0, 0.15700310E+3, 0.232E+3, 0.170E+2, 0.19447000E+1, 0.00000000E+0, 0.12781130E+3, + 0.232E+3, 0.180E+2, 0.19447000E+1, 0.00000000E+0, 0.88770750E+3, 0.232E+3, 0.190E+2, + 0.19447000E+1, 0.00000000E+0, 0.73264330E+3, 0.232E+3, 0.200E+2, 0.19447000E+1, 0.00000000E+0, + 0.60503430E+3, 0.232E+3, 0.210E+2, 0.19447000E+1, 0.00000000E+0, 0.58362370E+3, 0.232E+3, + 0.220E+2, 0.19447000E+1, 0.00000000E+0, 0.53412560E+3, 0.232E+3, 0.230E+2, 0.19447000E+1, + 0.00000000E+0, 0.42006420E+3, 0.232E+3, 0.240E+2, 0.19447000E+1, 0.00000000E+0, 0.45943140E+3, + 0.232E+3, 0.250E+2, 0.19447000E+1, 0.00000000E+0, 0.35991720E+3, 0.232E+3, 0.260E+2, + 0.19447000E+1, 0.00000000E+0, 0.38165880E+3, 0.232E+3, 0.270E+2, 0.19447000E+1, 0.00000000E+0, + 0.39345300E+3, 0.232E+3, 0.280E+2, 0.19447000E+1, 0.00000000E+0, 0.30098740E+3, 0.232E+3, + 0.290E+2, 0.19447000E+1, 0.00000000E+0, 0.30895170E+3, 0.232E+3, 0.300E+2, 0.19447000E+1, + 0.00000000E+0, 0.36657420E+3, 0.232E+3, 0.310E+2, 0.19447000E+1, 0.00000000E+0, 0.32239740E+3, + 0.232E+3, 0.320E+2, 0.19447000E+1, 0.00000000E+0, 0.27396550E+3, 0.232E+3, 0.330E+2, + 0.19447000E+1, 0.00000000E+0, 0.24506900E+3, 0.232E+3, 0.340E+2, 0.19447000E+1, 0.00000000E+0, + 0.21366510E+3, 0.232E+3, 0.350E+2, 0.19447000E+1, 0.00000000E+0, 0.18507510E+3, 0.232E+3, + 0.360E+2, 0.19447000E+1, 0.00000000E+0, 0.99420460E+3, 0.232E+3, 0.370E+2, 0.19447000E+1, + 0.00000000E+0, 0.87244650E+3, 0.232E+3, 0.380E+2, 0.19447000E+1, 0.00000000E+0, 0.76334100E+3, + 0.232E+3, 0.390E+2, 0.19447000E+1, 0.00000000E+0, 0.68527160E+3, 0.232E+3, 0.400E+2, + 0.19447000E+1, 0.00000000E+0, 0.62420610E+3, 0.232E+3, 0.410E+2, 0.19447000E+1, 0.00000000E+0, + 0.48055520E+3, 0.232E+3, 0.420E+2, 0.19447000E+1, 0.00000000E+0, 0.53677950E+3, 0.232E+3, + 0.430E+2, 0.19447000E+1, 0.00000000E+0, 0.40763390E+3, 0.232E+3, 0.440E+2, 0.19447000E+1, + 0.00000000E+0, 0.44608760E+3, 0.232E+3, 0.450E+2, 0.19447000E+1, 0.00000000E+0, 0.41332440E+3, + 0.232E+3, 0.460E+2, 0.19447000E+1, 0.00000000E+0, 0.34400650E+3, 0.232E+3, 0.470E+2, + 0.19447000E+1, 0.00000000E+0, 0.36375360E+3, 0.232E+3, 0.480E+2, 0.19447000E+1, 0.00000000E+0, + 0.45781190E+3, 0.232E+3, 0.490E+2, 0.19447000E+1, 0.00000000E+0, 0.42263220E+3, 0.232E+3, + 0.500E+2, 0.19447000E+1, 0.00000000E+0, 0.37560470E+3, 0.232E+3, 0.510E+2, 0.19447000E+1, + 0.00000000E+0, 0.34772860E+3, 0.232E+3, 0.520E+2, 0.19447000E+1, 0.00000000E+0, 0.31352800E+3, + 0.232E+3, 0.530E+2, 0.19447000E+1, 0.00000000E+0, 0.28100460E+3, 0.232E+3, 0.540E+2, + 0.19447000E+1, 0.00000000E+0, 0.12108497E+4, 0.232E+3, 0.550E+2, 0.19447000E+1, 0.00000000E+0, + 0.11120376E+4, 0.232E+3, 0.560E+2, 0.19447000E+1, 0.00000000E+0, 0.97600660E+3, 0.232E+3, + 0.570E+2, 0.19447000E+1, 0.00000000E+0, 0.44363880E+3, 0.232E+3, 0.580E+2, 0.19447000E+1, + 0.27991000E+1, 0.98453560E+3, 0.232E+3, 0.590E+2, 0.19447000E+1, 0.00000000E+0, 0.94530650E+3, + 0.232E+3, 0.600E+2, 0.19447000E+1, 0.00000000E+0, 0.92157530E+3, 0.232E+3, 0.610E+2, + 0.19447000E+1, 0.00000000E+0, 0.89976220E+3, 0.232E+3, 0.620E+2, 0.19447000E+1, 0.00000000E+0, + 0.88042150E+3, 0.232E+3, 0.630E+2, 0.19447000E+1, 0.00000000E+0, 0.69068230E+3, 0.232E+3, + 0.640E+2, 0.19447000E+1, 0.00000000E+0, 0.77859640E+3, 0.232E+3, 0.650E+2, 0.19447000E+1, + 0.00000000E+0, 0.75073230E+3, 0.232E+3, 0.660E+2, 0.19447000E+1, 0.00000000E+0, 0.79395920E+3, + 0.232E+3, 0.670E+2, 0.19447000E+1, 0.00000000E+0, 0.77712650E+3, 0.232E+3, 0.680E+2, + 0.19447000E+1, 0.00000000E+0, 0.76193210E+3, 0.232E+3, 0.690E+2, 0.19447000E+1, 0.00000000E+0, + 0.75311720E+3, 0.232E+3, 0.700E+2, 0.19447000E+1, 0.00000000E+0, 0.63353080E+3, 0.232E+3, + 0.710E+2, 0.19447000E+1, 0.00000000E+0, 0.62243820E+3, 0.232E+3, 0.720E+2, 0.19447000E+1, + 0.00000000E+0, 0.56714200E+3, 0.232E+3, 0.730E+2, 0.19447000E+1, 0.00000000E+0, 0.47771970E+3, + 0.232E+3, 0.740E+2, 0.19447000E+1, 0.00000000E+0, 0.48586480E+3, 0.232E+3, 0.750E+2, + 0.19447000E+1, 0.00000000E+0, 0.43956860E+3, 0.232E+3, 0.760E+2, 0.19447000E+1, 0.00000000E+0, + 0.40191180E+3, 0.232E+3, 0.770E+2, 0.19447000E+1, 0.00000000E+0, 0.33286630E+3, 0.232E+3, + 0.780E+2, 0.19447000E+1, 0.00000000E+0, 0.31061480E+3, 0.232E+3, 0.790E+2, 0.19447000E+1, + 0.00000000E+0, 0.31958080E+3, 0.232E+3, 0.800E+2, 0.19447000E+1, 0.00000000E+0, 0.46894260E+3, + 0.232E+3, 0.810E+2, 0.19447000E+1, 0.00000000E+0, 0.45811250E+3, 0.232E+3, 0.820E+2, + 0.19447000E+1, 0.00000000E+0, 0.42004290E+3, 0.232E+3, 0.830E+2, 0.19447000E+1, 0.00000000E+0, + 0.39996790E+3, 0.232E+3, 0.840E+2, 0.19447000E+1, 0.00000000E+0, 0.36825120E+3, 0.232E+3, + 0.850E+2, 0.19447000E+1, 0.00000000E+0, 0.33664170E+3, 0.232E+3, 0.860E+2, 0.19447000E+1, + 0.00000000E+0, 0.11423947E+4, 0.232E+3, 0.870E+2, 0.19447000E+1, 0.00000000E+0, 0.10988136E+4, + 0.232E+3, 0.880E+2, 0.19447000E+1, 0.00000000E+0, 0.97025760E+3, 0.232E+3, 0.890E+2, + 0.19447000E+1, 0.00000000E+0, 0.87002090E+3, 0.232E+3, 0.900E+2, 0.19447000E+1, 0.00000000E+0, + 0.86401750E+3, 0.232E+3, 0.910E+2, 0.19447000E+1, 0.00000000E+0, 0.83647440E+3, 0.232E+3, + 0.920E+2, 0.19447000E+1, 0.00000000E+0, 0.86205870E+3, 0.232E+3, 0.930E+2, 0.19447000E+1, + 0.00000000E+0, 0.83468930E+3, 0.232E+3, 0.940E+2, 0.19447000E+1, 0.00000000E+0, 0.46440900E+2, + 0.232E+3, 0.101E+3, 0.19447000E+1, 0.00000000E+0, 0.15187590E+3, 0.232E+3, 0.103E+3, + 0.19447000E+1, 0.98650000E+0, 0.19344570E+3, 0.232E+3, 0.104E+3, 0.19447000E+1, 0.98080000E+0, + 0.14696060E+3, 0.232E+3, 0.105E+3, 0.19447000E+1, 0.97060000E+0, 0.11006510E+3, 0.232E+3, + 0.106E+3, 0.19447000E+1, 0.98680000E+0, 0.75928700E+2, 0.232E+3, 0.107E+3, 0.19447000E+1, + 0.99440000E+0, 0.54869300E+2, 0.232E+3, 0.108E+3, 0.19447000E+1, 0.99250000E+0, 0.37320200E+2, + 0.232E+3, 0.109E+3, 0.19447000E+1, 0.99820000E+0, 0.22190310E+3, 0.232E+3, 0.111E+3, + 0.19447000E+1, 0.96840000E+0, 0.34351060E+3, 0.232E+3, 0.112E+3, 0.19447000E+1, 0.96280000E+0, + 0.34738790E+3, 0.232E+3, 0.113E+3, 0.19447000E+1, 0.96480000E+0, 0.27806710E+3, 0.232E+3, + 0.114E+3, 0.19447000E+1, 0.95070000E+0, 0.22676600E+3, 0.232E+3, 0.115E+3, 0.19447000E+1, + 0.99470000E+0, 0.19099270E+3, 0.232E+3, 0.116E+3, 0.19447000E+1, 0.99480000E+0, 0.15536720E+3, + 0.232E+3, 0.117E+3, 0.19447000E+1, 0.99720000E+0, 0.30442220E+3, 0.232E+3, 0.119E+3, + 0.19447000E+1, 0.97670000E+0, 0.58505150E+3, 0.232E+3, 0.120E+3, 0.19447000E+1, 0.98310000E+0, + 0.30419020E+3, 0.232E+3, 0.121E+3, 0.19447000E+1, 0.18627000E+1, 0.29348990E+3, 0.232E+3, + 0.122E+3, 0.19447000E+1, 0.18299000E+1, 0.28758510E+3, 0.232E+3, 0.123E+3, 0.19447000E+1, + 0.19138000E+1, 0.28497290E+3, 0.232E+3, 0.124E+3, 0.19447000E+1, 0.18269000E+1, 0.26188660E+3, + 0.232E+3, 0.125E+3, 0.19447000E+1, 0.16406000E+1, 0.24213490E+3, 0.232E+3, 0.126E+3, + 0.19447000E+1, 0.16483000E+1, 0.23089560E+3, 0.232E+3, 0.127E+3, 0.19447000E+1, 0.17149000E+1, + 0.22574350E+3, 0.232E+3, 0.128E+3, 0.19447000E+1, 0.17937000E+1, 0.22325740E+3, 0.232E+3, + 0.129E+3, 0.19447000E+1, 0.95760000E+0, 0.20907070E+3, 0.232E+3, 0.130E+3, 0.19447000E+1, + 0.19419000E+1, 0.34402320E+3, 0.232E+3, 0.131E+3, 0.19447000E+1, 0.96010000E+0, 0.30131020E+3, + 0.232E+3, 0.132E+3, 0.19447000E+1, 0.94340000E+0, 0.26923080E+3, 0.232E+3, 0.133E+3, + 0.19447000E+1, 0.98890000E+0, 0.24516040E+3, 0.232E+3, 0.134E+3, 0.19447000E+1, 0.99010000E+0, + 0.21518160E+3, 0.232E+3, 0.135E+3, 0.19447000E+1, 0.99740000E+0, 0.36280200E+3, 0.232E+3, + 0.137E+3, 0.19447000E+1, 0.97380000E+0, 0.71158620E+3, 0.232E+3, 0.138E+3, 0.19447000E+1, + 0.98010000E+0, 0.54236550E+3, 0.232E+3, 0.139E+3, 0.19447000E+1, 0.19153000E+1, 0.40208770E+3, + 0.232E+3, 0.140E+3, 0.19447000E+1, 0.19355000E+1, 0.40601940E+3, 0.232E+3, 0.141E+3, + 0.19447000E+1, 0.19545000E+1, 0.37812310E+3, 0.232E+3, 0.142E+3, 0.19447000E+1, 0.19420000E+1, + 0.42477910E+3, 0.232E+3, 0.143E+3, 0.19447000E+1, 0.16682000E+1, 0.32883410E+3, 0.232E+3, + 0.144E+3, 0.19447000E+1, 0.18584000E+1, 0.30737400E+3, 0.232E+3, 0.145E+3, 0.19447000E+1, + 0.19003000E+1, 0.28513600E+3, 0.232E+3, 0.146E+3, 0.19447000E+1, 0.18630000E+1, 0.27584840E+3, + 0.232E+3, 0.147E+3, 0.19447000E+1, 0.96790000E+0, 0.27272280E+3, 0.232E+3, 0.148E+3, + 0.19447000E+1, 0.19539000E+1, 0.43605730E+3, 0.232E+3, 0.149E+3, 0.19447000E+1, 0.96330000E+0, + 0.39365950E+3, 0.232E+3, 0.150E+3, 0.19447000E+1, 0.95140000E+0, 0.36794630E+3, 0.232E+3, + 0.151E+3, 0.19447000E+1, 0.97490000E+0, 0.34743580E+3, 0.232E+3, 0.152E+3, 0.19447000E+1, + 0.98110000E+0, 0.31650110E+3, 0.232E+3, 0.153E+3, 0.19447000E+1, 0.99680000E+0, 0.42861700E+3, + 0.232E+3, 0.155E+3, 0.19447000E+1, 0.99090000E+0, 0.92250460E+3, 0.232E+3, 0.156E+3, + 0.19447000E+1, 0.97970000E+0, 0.68647720E+3, 0.232E+3, 0.157E+3, 0.19447000E+1, 0.19373000E+1, + 0.43015130E+3, 0.232E+3, 0.159E+3, 0.19447000E+1, 0.29425000E+1, 0.42122950E+3, 0.232E+3, + 0.160E+3, 0.19447000E+1, 0.29455000E+1, 0.40778710E+3, 0.232E+3, 0.161E+3, 0.19447000E+1, + 0.29413000E+1, 0.40995360E+3, 0.232E+3, 0.162E+3, 0.19447000E+1, 0.29300000E+1, 0.39549150E+3, + 0.232E+3, 0.163E+3, 0.19447000E+1, 0.18286000E+1, 0.41271440E+3, 0.232E+3, 0.164E+3, + 0.19447000E+1, 0.28732000E+1, 0.38742350E+3, 0.232E+3, 0.165E+3, 0.19447000E+1, 0.29086000E+1, + 0.39445350E+3, 0.232E+3, 0.166E+3, 0.19447000E+1, 0.28965000E+1, 0.36762060E+3, 0.232E+3, + 0.167E+3, 0.19447000E+1, 0.29242000E+1, 0.35709490E+3, 0.232E+3, 0.168E+3, 0.19447000E+1, + 0.29282000E+1, 0.35486500E+3, 0.232E+3, 0.169E+3, 0.19447000E+1, 0.29246000E+1, 0.37342540E+3, + 0.232E+3, 0.170E+3, 0.19447000E+1, 0.28482000E+1, 0.34296160E+3, 0.232E+3, 0.171E+3, + 0.19447000E+1, 0.29219000E+1, 0.46674760E+3, 0.232E+3, 0.172E+3, 0.19447000E+1, 0.19254000E+1, + 0.43239170E+3, 0.232E+3, 0.173E+3, 0.19447000E+1, 0.19459000E+1, 0.39371210E+3, 0.232E+3, + 0.174E+3, 0.19447000E+1, 0.19292000E+1, 0.39890670E+3, 0.232E+3, 0.175E+3, 0.19447000E+1, + 0.18104000E+1, 0.34767760E+3, 0.232E+3, 0.176E+3, 0.19447000E+1, 0.18858000E+1, 0.32665250E+3, + 0.232E+3, 0.177E+3, 0.19447000E+1, 0.18648000E+1, 0.31170830E+3, 0.232E+3, 0.178E+3, + 0.19447000E+1, 0.19188000E+1, 0.29781700E+3, 0.232E+3, 0.179E+3, 0.19447000E+1, 0.98460000E+0, + 0.28742670E+3, 0.232E+3, 0.180E+3, 0.19447000E+1, 0.19896000E+1, 0.46737550E+3, 0.232E+3, + 0.181E+3, 0.19447000E+1, 0.92670000E+0, 0.42511580E+3, 0.232E+3, 0.182E+3, 0.19447000E+1, + 0.93830000E+0, 0.41176820E+3, 0.232E+3, 0.183E+3, 0.19447000E+1, 0.98200000E+0, 0.39999560E+3, + 0.232E+3, 0.184E+3, 0.19447000E+1, 0.98150000E+0, 0.37274130E+3, 0.232E+3, 0.185E+3, + 0.19447000E+1, 0.99540000E+0, 0.48272480E+3, 0.232E+3, 0.187E+3, 0.19447000E+1, 0.97050000E+0, + 0.91693150E+3, 0.232E+3, 0.188E+3, 0.19447000E+1, 0.96620000E+0, 0.50916980E+3, 0.232E+3, + 0.189E+3, 0.19447000E+1, 0.29070000E+1, 0.58862060E+3, 0.232E+3, 0.190E+3, 0.19447000E+1, + 0.28844000E+1, 0.52540620E+3, 0.232E+3, 0.191E+3, 0.19447000E+1, 0.28738000E+1, 0.46359030E+3, + 0.232E+3, 0.192E+3, 0.19447000E+1, 0.28878000E+1, 0.44586270E+3, 0.232E+3, 0.193E+3, + 0.19447000E+1, 0.29095000E+1, 0.53855800E+3, 0.232E+3, 0.194E+3, 0.19447000E+1, 0.19209000E+1, + 0.12562090E+3, 0.232E+3, 0.204E+3, 0.19447000E+1, 0.19697000E+1, 0.12309690E+3, 0.232E+3, + 0.205E+3, 0.19447000E+1, 0.19441000E+1, 0.89444800E+2, 0.232E+3, 0.206E+3, 0.19447000E+1, + 0.19985000E+1, 0.71201700E+2, 0.232E+3, 0.207E+3, 0.19447000E+1, 0.20143000E+1, 0.48247600E+2, + 0.232E+3, 0.208E+3, 0.19447000E+1, 0.19887000E+1, 0.22342490E+3, 0.232E+3, 0.212E+3, + 0.19447000E+1, 0.19496000E+1, 0.26999430E+3, 0.232E+3, 0.213E+3, 0.19447000E+1, 0.19311000E+1, + 0.25843380E+3, 0.232E+3, 0.214E+3, 0.19447000E+1, 0.19435000E+1, 0.22370080E+3, 0.232E+3, + 0.215E+3, 0.19447000E+1, 0.20102000E+1, 0.18709060E+3, 0.232E+3, 0.216E+3, 0.19447000E+1, + 0.19903000E+1, 0.31254240E+3, 0.232E+3, 0.220E+3, 0.19447000E+1, 0.19349000E+1, 0.29990140E+3, + 0.232E+3, 0.221E+3, 0.19447000E+1, 0.28999000E+1, 0.30352280E+3, 0.232E+3, 0.222E+3, + 0.19447000E+1, 0.38675000E+1, 0.27760900E+3, 0.232E+3, 0.223E+3, 0.19447000E+1, 0.29110000E+1, + 0.20803810E+3, 0.232E+3, 0.224E+3, 0.19447000E+1, 0.10619100E+2, 0.17749730E+3, 0.232E+3, + 0.225E+3, 0.19447000E+1, 0.98849000E+1, 0.17426540E+3, 0.232E+3, 0.226E+3, 0.19447000E+1, + 0.91376000E+1, 0.20521220E+3, 0.232E+3, 0.227E+3, 0.19447000E+1, 0.29263000E+1, 0.19097590E+3, + 0.232E+3, 0.228E+3, 0.19447000E+1, 0.65458000E+1, 0.27172720E+3, 0.232E+3, 0.231E+3, + 0.19447000E+1, 0.19315000E+1, 0.28665450E+3, 0.232E+3, 0.232E+3, 0.19447000E+1, 0.19447000E+1, + 0.26704200E+2, 0.233E+3, 0.100E+1, 0.19793000E+1, 0.91180000E+0, 0.17705100E+2, 0.233E+3, + 0.200E+1, 0.19793000E+1, 0.00000000E+0, 0.39243650E+3, 0.233E+3, 0.300E+1, 0.19793000E+1, + 0.00000000E+0, 0.23351510E+3, 0.233E+3, 0.400E+1, 0.19793000E+1, 0.00000000E+0, 0.15949690E+3, + 0.233E+3, 0.500E+1, 0.19793000E+1, 0.00000000E+0, 0.10864070E+3, 0.233E+3, 0.600E+1, + 0.19793000E+1, 0.00000000E+0, 0.76299200E+2, 0.233E+3, 0.700E+1, 0.19793000E+1, 0.00000000E+0, + 0.57878400E+2, 0.233E+3, 0.800E+1, 0.19793000E+1, 0.00000000E+0, 0.43876200E+2, 0.233E+3, + 0.900E+1, 0.19793000E+1, 0.00000000E+0, 0.33739100E+2, 0.233E+3, 0.100E+2, 0.19793000E+1, + 0.00000000E+0, 0.46995960E+3, 0.233E+3, 0.110E+2, 0.19793000E+1, 0.00000000E+0, 0.37006380E+3, + 0.233E+3, 0.120E+2, 0.19793000E+1, 0.00000000E+0, 0.34393430E+3, 0.233E+3, 0.130E+2, + 0.19793000E+1, 0.00000000E+0, 0.27373340E+3, 0.233E+3, 0.140E+2, 0.19793000E+1, 0.00000000E+0, + 0.21501030E+3, 0.233E+3, 0.150E+2, 0.19793000E+1, 0.00000000E+0, 0.17911600E+3, 0.233E+3, + 0.160E+2, 0.19793000E+1, 0.00000000E+0, 0.14674050E+3, 0.233E+3, 0.170E+2, 0.19793000E+1, + 0.00000000E+0, 0.12026980E+3, 0.233E+3, 0.180E+2, 0.19793000E+1, 0.00000000E+0, 0.76653110E+3, + 0.233E+3, 0.190E+2, 0.19793000E+1, 0.00000000E+0, 0.64403510E+3, 0.233E+3, 0.200E+2, + 0.19793000E+1, 0.00000000E+0, 0.53415750E+3, 0.233E+3, 0.210E+2, 0.19793000E+1, 0.00000000E+0, + 0.51756110E+3, 0.233E+3, 0.220E+2, 0.19793000E+1, 0.00000000E+0, 0.47488980E+3, 0.233E+3, + 0.230E+2, 0.19793000E+1, 0.00000000E+0, 0.37400380E+3, 0.233E+3, 0.240E+2, 0.19793000E+1, + 0.00000000E+0, 0.41001990E+3, 0.233E+3, 0.250E+2, 0.19793000E+1, 0.00000000E+0, 0.32180920E+3, + 0.233E+3, 0.260E+2, 0.19793000E+1, 0.00000000E+0, 0.34272150E+3, 0.233E+3, 0.270E+2, + 0.19793000E+1, 0.00000000E+0, 0.35234030E+3, 0.233E+3, 0.280E+2, 0.19793000E+1, 0.00000000E+0, + 0.26993300E+3, 0.233E+3, 0.290E+2, 0.19793000E+1, 0.00000000E+0, 0.27903750E+3, 0.233E+3, + 0.300E+2, 0.19793000E+1, 0.00000000E+0, 0.33018810E+3, 0.233E+3, 0.310E+2, 0.19793000E+1, + 0.00000000E+0, 0.29343220E+3, 0.233E+3, 0.320E+2, 0.19793000E+1, 0.00000000E+0, 0.25181550E+3, + 0.233E+3, 0.330E+2, 0.19793000E+1, 0.00000000E+0, 0.22668450E+3, 0.233E+3, 0.340E+2, + 0.19793000E+1, 0.00000000E+0, 0.19893080E+3, 0.233E+3, 0.350E+2, 0.19793000E+1, 0.00000000E+0, + 0.17335820E+3, 0.233E+3, 0.360E+2, 0.19793000E+1, 0.00000000E+0, 0.86036720E+3, 0.233E+3, + 0.370E+2, 0.19793000E+1, 0.00000000E+0, 0.76674210E+3, 0.233E+3, 0.380E+2, 0.19793000E+1, + 0.00000000E+0, 0.67620360E+3, 0.233E+3, 0.390E+2, 0.19793000E+1, 0.00000000E+0, 0.61017610E+3, + 0.233E+3, 0.400E+2, 0.19793000E+1, 0.00000000E+0, 0.55778500E+3, 0.233E+3, 0.410E+2, + 0.19793000E+1, 0.00000000E+0, 0.43224960E+3, 0.233E+3, 0.420E+2, 0.19793000E+1, 0.00000000E+0, + 0.48162290E+3, 0.233E+3, 0.430E+2, 0.19793000E+1, 0.00000000E+0, 0.36836950E+3, 0.233E+3, + 0.440E+2, 0.19793000E+1, 0.00000000E+0, 0.40280170E+3, 0.233E+3, 0.450E+2, 0.19793000E+1, + 0.00000000E+0, 0.37403530E+3, 0.233E+3, 0.460E+2, 0.19793000E+1, 0.00000000E+0, 0.31127990E+3, + 0.233E+3, 0.470E+2, 0.19793000E+1, 0.00000000E+0, 0.33010750E+3, 0.233E+3, 0.480E+2, + 0.19793000E+1, 0.00000000E+0, 0.41255410E+3, 0.233E+3, 0.490E+2, 0.19793000E+1, 0.00000000E+0, + 0.38394660E+3, 0.233E+3, 0.500E+2, 0.19793000E+1, 0.00000000E+0, 0.34410360E+3, 0.233E+3, + 0.510E+2, 0.19793000E+1, 0.00000000E+0, 0.32025290E+3, 0.233E+3, 0.520E+2, 0.19793000E+1, + 0.00000000E+0, 0.29042110E+3, 0.233E+3, 0.530E+2, 0.19793000E+1, 0.00000000E+0, 0.26173610E+3, + 0.233E+3, 0.540E+2, 0.19793000E+1, 0.00000000E+0, 0.10488144E+4, 0.233E+3, 0.550E+2, + 0.19793000E+1, 0.00000000E+0, 0.97532420E+3, 0.233E+3, 0.560E+2, 0.19793000E+1, 0.00000000E+0, + 0.86267800E+3, 0.233E+3, 0.570E+2, 0.19793000E+1, 0.00000000E+0, 0.40598460E+3, 0.233E+3, + 0.580E+2, 0.19793000E+1, 0.27991000E+1, 0.86579390E+3, 0.233E+3, 0.590E+2, 0.19793000E+1, + 0.00000000E+0, 0.83226700E+3, 0.233E+3, 0.600E+2, 0.19793000E+1, 0.00000000E+0, 0.81163560E+3, + 0.233E+3, 0.610E+2, 0.19793000E+1, 0.00000000E+0, 0.79263850E+3, 0.233E+3, 0.620E+2, + 0.19793000E+1, 0.00000000E+0, 0.77580510E+3, 0.233E+3, 0.630E+2, 0.19793000E+1, 0.00000000E+0, + 0.61436540E+3, 0.233E+3, 0.640E+2, 0.19793000E+1, 0.00000000E+0, 0.68438050E+3, 0.233E+3, + 0.650E+2, 0.19793000E+1, 0.00000000E+0, 0.66094210E+3, 0.233E+3, 0.660E+2, 0.19793000E+1, + 0.00000000E+0, 0.70089270E+3, 0.233E+3, 0.670E+2, 0.19793000E+1, 0.00000000E+0, 0.68614780E+3, + 0.233E+3, 0.680E+2, 0.19793000E+1, 0.00000000E+0, 0.67291500E+3, 0.233E+3, 0.690E+2, + 0.19793000E+1, 0.00000000E+0, 0.66485520E+3, 0.233E+3, 0.700E+2, 0.19793000E+1, 0.00000000E+0, + 0.56289600E+3, 0.233E+3, 0.710E+2, 0.19793000E+1, 0.00000000E+0, 0.55747290E+3, 0.233E+3, + 0.720E+2, 0.19793000E+1, 0.00000000E+0, 0.51061380E+3, 0.233E+3, 0.730E+2, 0.19793000E+1, + 0.00000000E+0, 0.43217460E+3, 0.233E+3, 0.740E+2, 0.19793000E+1, 0.00000000E+0, 0.44031270E+3, + 0.233E+3, 0.750E+2, 0.19793000E+1, 0.00000000E+0, 0.40018070E+3, 0.233E+3, 0.760E+2, + 0.19793000E+1, 0.00000000E+0, 0.36727240E+3, 0.233E+3, 0.770E+2, 0.19793000E+1, 0.00000000E+0, + 0.30555600E+3, 0.233E+3, 0.780E+2, 0.19793000E+1, 0.00000000E+0, 0.28562940E+3, 0.233E+3, + 0.790E+2, 0.19793000E+1, 0.00000000E+0, 0.29425470E+3, 0.233E+3, 0.800E+2, 0.19793000E+1, + 0.00000000E+0, 0.42390230E+3, 0.233E+3, 0.810E+2, 0.19793000E+1, 0.00000000E+0, 0.41654960E+3, + 0.233E+3, 0.820E+2, 0.19793000E+1, 0.00000000E+0, 0.38473230E+3, 0.233E+3, 0.830E+2, + 0.19793000E+1, 0.00000000E+0, 0.36796170E+3, 0.233E+3, 0.840E+2, 0.19793000E+1, 0.00000000E+0, + 0.34061170E+3, 0.233E+3, 0.850E+2, 0.19793000E+1, 0.00000000E+0, 0.31293820E+3, 0.233E+3, + 0.860E+2, 0.19793000E+1, 0.00000000E+0, 0.99568830E+3, 0.233E+3, 0.870E+2, 0.19793000E+1, + 0.00000000E+0, 0.96779800E+3, 0.233E+3, 0.880E+2, 0.19793000E+1, 0.00000000E+0, 0.86060590E+3, + 0.233E+3, 0.890E+2, 0.19793000E+1, 0.00000000E+0, 0.77842680E+3, 0.233E+3, 0.900E+2, + 0.19793000E+1, 0.00000000E+0, 0.77007950E+3, 0.233E+3, 0.910E+2, 0.19793000E+1, 0.00000000E+0, + 0.74569540E+3, 0.233E+3, 0.920E+2, 0.19793000E+1, 0.00000000E+0, 0.76439730E+3, 0.233E+3, + 0.930E+2, 0.19793000E+1, 0.00000000E+0, 0.74080980E+3, 0.233E+3, 0.940E+2, 0.19793000E+1, + 0.00000000E+0, 0.42778900E+2, 0.233E+3, 0.101E+3, 0.19793000E+1, 0.00000000E+0, 0.13598320E+3, + 0.233E+3, 0.103E+3, 0.19793000E+1, 0.98650000E+0, 0.17394150E+3, 0.233E+3, 0.104E+3, + 0.19793000E+1, 0.98080000E+0, 0.13447040E+3, 0.233E+3, 0.105E+3, 0.19793000E+1, 0.97060000E+0, + 0.10184690E+3, 0.233E+3, 0.106E+3, 0.19793000E+1, 0.98680000E+0, 0.71123800E+2, 0.233E+3, + 0.107E+3, 0.19793000E+1, 0.99440000E+0, 0.51919900E+2, 0.233E+3, 0.108E+3, 0.19793000E+1, + 0.99250000E+0, 0.35758200E+2, 0.233E+3, 0.109E+3, 0.19793000E+1, 0.99820000E+0, 0.19806920E+3, + 0.233E+3, 0.111E+3, 0.19793000E+1, 0.96840000E+0, 0.30612750E+3, 0.233E+3, 0.112E+3, + 0.19793000E+1, 0.96280000E+0, 0.31225010E+3, 0.233E+3, 0.113E+3, 0.19793000E+1, 0.96480000E+0, + 0.25331120E+3, 0.233E+3, 0.114E+3, 0.19793000E+1, 0.95070000E+0, 0.20873090E+3, 0.233E+3, + 0.115E+3, 0.19793000E+1, 0.99470000E+0, 0.17710850E+3, 0.233E+3, 0.116E+3, 0.19793000E+1, + 0.99480000E+0, 0.14519610E+3, 0.233E+3, 0.117E+3, 0.19793000E+1, 0.99720000E+0, 0.27423250E+3, + 0.233E+3, 0.119E+3, 0.19793000E+1, 0.97670000E+0, 0.51543230E+3, 0.233E+3, 0.120E+3, + 0.19793000E+1, 0.98310000E+0, 0.27666340E+3, 0.233E+3, 0.121E+3, 0.19793000E+1, 0.18627000E+1, + 0.26710550E+3, 0.233E+3, 0.122E+3, 0.19793000E+1, 0.18299000E+1, 0.26168720E+3, 0.233E+3, + 0.123E+3, 0.19793000E+1, 0.19138000E+1, 0.25898560E+3, 0.233E+3, 0.124E+3, 0.19793000E+1, + 0.18269000E+1, 0.23941200E+3, 0.233E+3, 0.125E+3, 0.19793000E+1, 0.16406000E+1, 0.22180340E+3, + 0.233E+3, 0.126E+3, 0.19793000E+1, 0.16483000E+1, 0.21154220E+3, 0.233E+3, 0.127E+3, + 0.19793000E+1, 0.17149000E+1, 0.20671720E+3, 0.233E+3, 0.128E+3, 0.19793000E+1, 0.17937000E+1, + 0.20348070E+3, 0.233E+3, 0.129E+3, 0.19793000E+1, 0.95760000E+0, 0.19216860E+3, 0.233E+3, + 0.130E+3, 0.19793000E+1, 0.19419000E+1, 0.31071100E+3, 0.233E+3, 0.131E+3, 0.19793000E+1, + 0.96010000E+0, 0.27494970E+3, 0.233E+3, 0.132E+3, 0.19793000E+1, 0.94340000E+0, 0.24761740E+3, + 0.233E+3, 0.133E+3, 0.19793000E+1, 0.98890000E+0, 0.22675190E+3, 0.233E+3, 0.134E+3, + 0.19793000E+1, 0.99010000E+0, 0.20027860E+3, 0.233E+3, 0.135E+3, 0.19793000E+1, 0.99740000E+0, + 0.32770320E+3, 0.233E+3, 0.137E+3, 0.19793000E+1, 0.97380000E+0, 0.62656050E+3, 0.233E+3, + 0.138E+3, 0.19793000E+1, 0.98010000E+0, 0.48524610E+3, 0.233E+3, 0.139E+3, 0.19793000E+1, + 0.19153000E+1, 0.36563120E+3, 0.233E+3, 0.140E+3, 0.19793000E+1, 0.19355000E+1, 0.36911250E+3, + 0.233E+3, 0.141E+3, 0.19793000E+1, 0.19545000E+1, 0.34461330E+3, 0.233E+3, 0.142E+3, + 0.19793000E+1, 0.19420000E+1, 0.38416440E+3, 0.233E+3, 0.143E+3, 0.19793000E+1, 0.16682000E+1, + 0.30149240E+3, 0.233E+3, 0.144E+3, 0.19793000E+1, 0.18584000E+1, 0.28204640E+3, 0.233E+3, + 0.145E+3, 0.19793000E+1, 0.19003000E+1, 0.26198970E+3, 0.233E+3, 0.146E+3, 0.19793000E+1, + 0.18630000E+1, 0.25321800E+3, 0.233E+3, 0.147E+3, 0.19793000E+1, 0.96790000E+0, 0.25140820E+3, + 0.233E+3, 0.148E+3, 0.19793000E+1, 0.19539000E+1, 0.39410730E+3, 0.233E+3, 0.149E+3, + 0.19793000E+1, 0.96330000E+0, 0.35883980E+3, 0.233E+3, 0.150E+3, 0.19793000E+1, 0.95140000E+0, + 0.33748280E+3, 0.233E+3, 0.151E+3, 0.19793000E+1, 0.97490000E+0, 0.32008780E+3, 0.233E+3, + 0.152E+3, 0.19793000E+1, 0.98110000E+0, 0.29314450E+3, 0.233E+3, 0.153E+3, 0.19793000E+1, + 0.99680000E+0, 0.38968370E+3, 0.233E+3, 0.155E+3, 0.19793000E+1, 0.99090000E+0, 0.81023570E+3, + 0.233E+3, 0.156E+3, 0.19793000E+1, 0.97970000E+0, 0.61351580E+3, 0.233E+3, 0.157E+3, + 0.19793000E+1, 0.19373000E+1, 0.39384480E+3, 0.233E+3, 0.159E+3, 0.19793000E+1, 0.29425000E+1, + 0.38570960E+3, 0.233E+3, 0.160E+3, 0.19793000E+1, 0.29455000E+1, 0.37356920E+3, 0.233E+3, + 0.161E+3, 0.19793000E+1, 0.29413000E+1, 0.37509470E+3, 0.233E+3, 0.162E+3, 0.19793000E+1, + 0.29300000E+1, 0.36042550E+3, 0.233E+3, 0.163E+3, 0.19793000E+1, 0.18286000E+1, 0.37742120E+3, + 0.233E+3, 0.164E+3, 0.19793000E+1, 0.28732000E+1, 0.35468510E+3, 0.233E+3, 0.165E+3, + 0.19793000E+1, 0.29086000E+1, 0.36034200E+3, 0.233E+3, 0.166E+3, 0.19793000E+1, 0.28965000E+1, + 0.33690980E+3, 0.233E+3, 0.167E+3, 0.19793000E+1, 0.29242000E+1, 0.32739560E+3, 0.233E+3, + 0.168E+3, 0.19793000E+1, 0.29282000E+1, 0.32523710E+3, 0.233E+3, 0.169E+3, 0.19793000E+1, + 0.29246000E+1, 0.34156110E+3, 0.233E+3, 0.170E+3, 0.19793000E+1, 0.28482000E+1, 0.31451130E+3, + 0.233E+3, 0.171E+3, 0.19793000E+1, 0.29219000E+1, 0.42201500E+3, 0.233E+3, 0.172E+3, + 0.19793000E+1, 0.19254000E+1, 0.39293770E+3, 0.233E+3, 0.173E+3, 0.19793000E+1, 0.19459000E+1, + 0.35967380E+3, 0.233E+3, 0.174E+3, 0.19793000E+1, 0.19292000E+1, 0.36277430E+3, 0.233E+3, + 0.175E+3, 0.19793000E+1, 0.18104000E+1, 0.31999870E+3, 0.233E+3, 0.176E+3, 0.19793000E+1, + 0.18858000E+1, 0.30124260E+3, 0.233E+3, 0.177E+3, 0.19793000E+1, 0.18648000E+1, 0.28780780E+3, + 0.233E+3, 0.178E+3, 0.19793000E+1, 0.19188000E+1, 0.27498950E+3, 0.233E+3, 0.179E+3, + 0.19793000E+1, 0.98460000E+0, 0.26648330E+3, 0.233E+3, 0.180E+3, 0.19793000E+1, 0.19896000E+1, + 0.42338910E+3, 0.233E+3, 0.181E+3, 0.19793000E+1, 0.92670000E+0, 0.38827410E+3, 0.233E+3, + 0.182E+3, 0.19793000E+1, 0.93830000E+0, 0.37778300E+3, 0.233E+3, 0.183E+3, 0.19793000E+1, + 0.98200000E+0, 0.36822760E+3, 0.233E+3, 0.184E+3, 0.19793000E+1, 0.98150000E+0, 0.34477670E+3, + 0.233E+3, 0.185E+3, 0.19793000E+1, 0.99540000E+0, 0.43908390E+3, 0.233E+3, 0.187E+3, + 0.19793000E+1, 0.97050000E+0, 0.80936840E+3, 0.233E+3, 0.188E+3, 0.19793000E+1, 0.96620000E+0, + 0.46604700E+3, 0.233E+3, 0.189E+3, 0.19793000E+1, 0.29070000E+1, 0.53507930E+3, 0.233E+3, + 0.190E+3, 0.19793000E+1, 0.28844000E+1, 0.47904230E+3, 0.233E+3, 0.191E+3, 0.19793000E+1, + 0.28738000E+1, 0.42495090E+3, 0.233E+3, 0.192E+3, 0.19793000E+1, 0.28878000E+1, 0.40922440E+3, + 0.233E+3, 0.193E+3, 0.19793000E+1, 0.29095000E+1, 0.48694030E+3, 0.233E+3, 0.194E+3, + 0.19793000E+1, 0.19209000E+1, 0.11501370E+3, 0.233E+3, 0.204E+3, 0.19793000E+1, 0.19697000E+1, + 0.11314120E+3, 0.233E+3, 0.205E+3, 0.19793000E+1, 0.19441000E+1, 0.83286500E+2, 0.233E+3, + 0.206E+3, 0.19793000E+1, 0.19985000E+1, 0.66781800E+2, 0.233E+3, 0.207E+3, 0.19793000E+1, + 0.20143000E+1, 0.45789900E+2, 0.233E+3, 0.208E+3, 0.19793000E+1, 0.19887000E+1, 0.20272440E+3, + 0.233E+3, 0.212E+3, 0.19793000E+1, 0.19496000E+1, 0.24478960E+3, 0.233E+3, 0.213E+3, + 0.19793000E+1, 0.19311000E+1, 0.23590120E+3, 0.233E+3, 0.214E+3, 0.19793000E+1, 0.19435000E+1, + 0.20577840E+3, 0.233E+3, 0.215E+3, 0.19793000E+1, 0.20102000E+1, 0.17352340E+3, 0.233E+3, + 0.216E+3, 0.19793000E+1, 0.19903000E+1, 0.28380130E+3, 0.233E+3, 0.220E+3, 0.19793000E+1, + 0.19349000E+1, 0.27376840E+3, 0.233E+3, 0.221E+3, 0.19793000E+1, 0.28999000E+1, 0.27719390E+3, + 0.233E+3, 0.222E+3, 0.19793000E+1, 0.38675000E+1, 0.25351690E+3, 0.233E+3, 0.223E+3, + 0.19793000E+1, 0.29110000E+1, 0.19175980E+3, 0.233E+3, 0.224E+3, 0.19793000E+1, 0.10619100E+2, + 0.16452480E+3, 0.233E+3, 0.225E+3, 0.19793000E+1, 0.98849000E+1, 0.16141780E+3, 0.233E+3, + 0.226E+3, 0.19793000E+1, 0.91376000E+1, 0.18837020E+3, 0.233E+3, 0.227E+3, 0.19793000E+1, + 0.29263000E+1, 0.17573990E+3, 0.233E+3, 0.228E+3, 0.19793000E+1, 0.65458000E+1, 0.24774210E+3, + 0.233E+3, 0.231E+3, 0.19793000E+1, 0.19315000E+1, 0.26203540E+3, 0.233E+3, 0.232E+3, + 0.19793000E+1, 0.19447000E+1, 0.24124940E+3, 0.233E+3, 0.233E+3, 0.19793000E+1, 0.19793000E+1, + 0.25126800E+2, 0.234E+3, 0.100E+1, 0.19812000E+1, 0.91180000E+0, 0.16915700E+2, 0.234E+3, + 0.200E+1, 0.19812000E+1, 0.00000000E+0, 0.35181040E+3, 0.234E+3, 0.300E+1, 0.19812000E+1, + 0.00000000E+0, 0.21331490E+3, 0.234E+3, 0.400E+1, 0.19812000E+1, 0.00000000E+0, 0.14765020E+3, + 0.234E+3, 0.500E+1, 0.19812000E+1, 0.00000000E+0, 0.10167860E+3, 0.234E+3, 0.600E+1, + 0.19812000E+1, 0.00000000E+0, 0.72032800E+2, 0.234E+3, 0.700E+1, 0.19812000E+1, 0.00000000E+0, + 0.54994300E+2, 0.234E+3, 0.800E+1, 0.19812000E+1, 0.00000000E+0, 0.41926000E+2, 0.234E+3, + 0.900E+1, 0.19812000E+1, 0.00000000E+0, 0.32389200E+2, 0.234E+3, 0.100E+2, 0.19812000E+1, + 0.00000000E+0, 0.42191950E+3, 0.234E+3, 0.110E+2, 0.19812000E+1, 0.00000000E+0, 0.33688690E+3, + 0.234E+3, 0.120E+2, 0.19812000E+1, 0.00000000E+0, 0.31511470E+3, 0.234E+3, 0.130E+2, + 0.19812000E+1, 0.00000000E+0, 0.25302890E+3, 0.234E+3, 0.140E+2, 0.19812000E+1, 0.00000000E+0, + 0.20037470E+3, 0.234E+3, 0.150E+2, 0.19812000E+1, 0.00000000E+0, 0.16788680E+3, 0.234E+3, + 0.160E+2, 0.19812000E+1, 0.00000000E+0, 0.13832530E+3, 0.234E+3, 0.170E+2, 0.19812000E+1, + 0.00000000E+0, 0.11395770E+3, 0.234E+3, 0.180E+2, 0.19812000E+1, 0.00000000E+0, 0.68773700E+3, + 0.234E+3, 0.190E+2, 0.19812000E+1, 0.00000000E+0, 0.58340090E+3, 0.234E+3, 0.200E+2, + 0.19812000E+1, 0.00000000E+0, 0.48505940E+3, 0.234E+3, 0.210E+2, 0.19812000E+1, 0.00000000E+0, + 0.47134280E+3, 0.234E+3, 0.220E+2, 0.19812000E+1, 0.00000000E+0, 0.43318300E+3, 0.234E+3, + 0.230E+2, 0.19812000E+1, 0.00000000E+0, 0.34166370E+3, 0.234E+3, 0.240E+2, 0.19812000E+1, + 0.00000000E+0, 0.37490260E+3, 0.234E+3, 0.250E+2, 0.19812000E+1, 0.00000000E+0, 0.29477780E+3, + 0.234E+3, 0.260E+2, 0.19812000E+1, 0.00000000E+0, 0.31457060E+3, 0.234E+3, 0.270E+2, + 0.19812000E+1, 0.00000000E+0, 0.32282380E+3, 0.234E+3, 0.280E+2, 0.19812000E+1, 0.00000000E+0, + 0.24774600E+3, 0.234E+3, 0.290E+2, 0.19812000E+1, 0.00000000E+0, 0.25705830E+3, 0.234E+3, + 0.300E+2, 0.19812000E+1, 0.00000000E+0, 0.30357640E+3, 0.234E+3, 0.310E+2, 0.19812000E+1, + 0.00000000E+0, 0.27154740E+3, 0.234E+3, 0.320E+2, 0.19812000E+1, 0.00000000E+0, 0.23456310E+3, + 0.234E+3, 0.330E+2, 0.19812000E+1, 0.00000000E+0, 0.21209150E+3, 0.234E+3, 0.340E+2, + 0.19812000E+1, 0.00000000E+0, 0.18699940E+3, 0.234E+3, 0.350E+2, 0.19812000E+1, 0.00000000E+0, + 0.16369060E+3, 0.234E+3, 0.360E+2, 0.19812000E+1, 0.00000000E+0, 0.77312550E+3, 0.234E+3, + 0.370E+2, 0.19812000E+1, 0.00000000E+0, 0.69465560E+3, 0.234E+3, 0.380E+2, 0.19812000E+1, + 0.00000000E+0, 0.61553170E+3, 0.234E+3, 0.390E+2, 0.19812000E+1, 0.00000000E+0, 0.55720710E+3, + 0.234E+3, 0.400E+2, 0.19812000E+1, 0.00000000E+0, 0.51054640E+3, 0.234E+3, 0.410E+2, + 0.19812000E+1, 0.00000000E+0, 0.39746440E+3, 0.234E+3, 0.420E+2, 0.19812000E+1, 0.00000000E+0, + 0.44207860E+3, 0.234E+3, 0.430E+2, 0.19812000E+1, 0.00000000E+0, 0.33981570E+3, 0.234E+3, + 0.440E+2, 0.19812000E+1, 0.00000000E+0, 0.37122770E+3, 0.234E+3, 0.450E+2, 0.19812000E+1, + 0.00000000E+0, 0.34521240E+3, 0.234E+3, 0.460E+2, 0.19812000E+1, 0.00000000E+0, 0.28750250E+3, + 0.234E+3, 0.470E+2, 0.19812000E+1, 0.00000000E+0, 0.30524540E+3, 0.234E+3, 0.480E+2, + 0.19812000E+1, 0.00000000E+0, 0.37968440E+3, 0.234E+3, 0.490E+2, 0.19812000E+1, 0.00000000E+0, + 0.35506520E+3, 0.234E+3, 0.500E+2, 0.19812000E+1, 0.00000000E+0, 0.31993540E+3, 0.234E+3, + 0.510E+2, 0.19812000E+1, 0.00000000E+0, 0.29881560E+3, 0.234E+3, 0.520E+2, 0.19812000E+1, + 0.00000000E+0, 0.27205830E+3, 0.234E+3, 0.530E+2, 0.19812000E+1, 0.00000000E+0, 0.24614950E+3, + 0.234E+3, 0.540E+2, 0.19812000E+1, 0.00000000E+0, 0.94314870E+3, 0.234E+3, 0.550E+2, + 0.19812000E+1, 0.00000000E+0, 0.88280690E+3, 0.234E+3, 0.560E+2, 0.19812000E+1, 0.00000000E+0, + 0.78440000E+3, 0.234E+3, 0.570E+2, 0.19812000E+1, 0.00000000E+0, 0.37731490E+3, 0.234E+3, + 0.580E+2, 0.19812000E+1, 0.27991000E+1, 0.78497740E+3, 0.234E+3, 0.590E+2, 0.19812000E+1, + 0.00000000E+0, 0.75507130E+3, 0.234E+3, 0.600E+2, 0.19812000E+1, 0.00000000E+0, 0.73648110E+3, + 0.234E+3, 0.610E+2, 0.19812000E+1, 0.00000000E+0, 0.71934360E+3, 0.234E+3, 0.620E+2, + 0.19812000E+1, 0.00000000E+0, 0.70416270E+3, 0.234E+3, 0.630E+2, 0.19812000E+1, 0.00000000E+0, + 0.56098910E+3, 0.234E+3, 0.640E+2, 0.19812000E+1, 0.00000000E+0, 0.62074640E+3, 0.234E+3, + 0.650E+2, 0.19812000E+1, 0.00000000E+0, 0.60005550E+3, 0.234E+3, 0.660E+2, 0.19812000E+1, + 0.00000000E+0, 0.63681140E+3, 0.234E+3, 0.670E+2, 0.19812000E+1, 0.00000000E+0, 0.62345960E+3, + 0.234E+3, 0.680E+2, 0.19812000E+1, 0.00000000E+0, 0.61152130E+3, 0.234E+3, 0.690E+2, + 0.19812000E+1, 0.00000000E+0, 0.60402840E+3, 0.234E+3, 0.700E+2, 0.19812000E+1, 0.00000000E+0, + 0.51348430E+3, 0.234E+3, 0.710E+2, 0.19812000E+1, 0.00000000E+0, 0.51090340E+3, 0.234E+3, + 0.720E+2, 0.19812000E+1, 0.00000000E+0, 0.46953520E+3, 0.234E+3, 0.730E+2, 0.19812000E+1, + 0.00000000E+0, 0.39880630E+3, 0.234E+3, 0.740E+2, 0.19812000E+1, 0.00000000E+0, 0.40670940E+3, + 0.234E+3, 0.750E+2, 0.19812000E+1, 0.00000000E+0, 0.37075460E+3, 0.234E+3, 0.760E+2, + 0.19812000E+1, 0.00000000E+0, 0.34112450E+3, 0.234E+3, 0.770E+2, 0.19812000E+1, 0.00000000E+0, + 0.28477860E+3, 0.234E+3, 0.780E+2, 0.19812000E+1, 0.00000000E+0, 0.26655850E+3, 0.234E+3, + 0.790E+2, 0.19812000E+1, 0.00000000E+0, 0.27475930E+3, 0.234E+3, 0.800E+2, 0.19812000E+1, + 0.00000000E+0, 0.39114380E+3, 0.234E+3, 0.810E+2, 0.19812000E+1, 0.00000000E+0, 0.38562000E+3, + 0.234E+3, 0.820E+2, 0.19812000E+1, 0.00000000E+0, 0.35778450E+3, 0.234E+3, 0.830E+2, + 0.19812000E+1, 0.00000000E+0, 0.34316660E+3, 0.234E+3, 0.840E+2, 0.19812000E+1, 0.00000000E+0, + 0.31880970E+3, 0.234E+3, 0.850E+2, 0.19812000E+1, 0.00000000E+0, 0.29392920E+3, 0.234E+3, + 0.860E+2, 0.19812000E+1, 0.00000000E+0, 0.89872340E+3, 0.234E+3, 0.870E+2, 0.19812000E+1, + 0.00000000E+0, 0.87826560E+3, 0.234E+3, 0.880E+2, 0.19812000E+1, 0.00000000E+0, 0.78418190E+3, + 0.234E+3, 0.890E+2, 0.19812000E+1, 0.00000000E+0, 0.71316020E+3, 0.234E+3, 0.900E+2, + 0.19812000E+1, 0.00000000E+0, 0.70403150E+3, 0.234E+3, 0.910E+2, 0.19812000E+1, 0.00000000E+0, + 0.68185240E+3, 0.234E+3, 0.920E+2, 0.19812000E+1, 0.00000000E+0, 0.69668950E+3, 0.234E+3, + 0.930E+2, 0.19812000E+1, 0.00000000E+0, 0.67555290E+3, 0.234E+3, 0.940E+2, 0.19812000E+1, + 0.00000000E+0, 0.39896700E+2, 0.234E+3, 0.101E+3, 0.19812000E+1, 0.00000000E+0, 0.12448680E+3, + 0.234E+3, 0.103E+3, 0.19812000E+1, 0.98650000E+0, 0.15970990E+3, 0.234E+3, 0.104E+3, + 0.19812000E+1, 0.98080000E+0, 0.12488450E+3, 0.234E+3, 0.105E+3, 0.19812000E+1, 0.97060000E+0, + 0.95355300E+2, 0.234E+3, 0.106E+3, 0.19812000E+1, 0.98680000E+0, 0.67193600E+2, 0.234E+3, + 0.107E+3, 0.19812000E+1, 0.99440000E+0, 0.49429100E+2, 0.234E+3, 0.108E+3, 0.19812000E+1, + 0.99250000E+0, 0.34372900E+2, 0.234E+3, 0.109E+3, 0.19812000E+1, 0.99820000E+0, 0.18104870E+3, + 0.234E+3, 0.111E+3, 0.19812000E+1, 0.96840000E+0, 0.27950350E+3, 0.234E+3, 0.112E+3, + 0.19812000E+1, 0.96280000E+0, 0.28658090E+3, 0.234E+3, 0.113E+3, 0.19812000E+1, 0.96480000E+0, + 0.23450660E+3, 0.234E+3, 0.114E+3, 0.19812000E+1, 0.95070000E+0, 0.19460170E+3, 0.234E+3, + 0.115E+3, 0.19812000E+1, 0.99470000E+0, 0.16599750E+3, 0.234E+3, 0.116E+3, 0.19812000E+1, + 0.99480000E+0, 0.13686440E+3, 0.234E+3, 0.117E+3, 0.19812000E+1, 0.99720000E+0, 0.25244980E+3, + 0.234E+3, 0.119E+3, 0.19812000E+1, 0.97670000E+0, 0.46788320E+3, 0.234E+3, 0.120E+3, + 0.19812000E+1, 0.98310000E+0, 0.25604740E+3, 0.234E+3, 0.121E+3, 0.19812000E+1, 0.18627000E+1, + 0.24734020E+3, 0.234E+3, 0.122E+3, 0.19812000E+1, 0.18299000E+1, 0.24231110E+3, 0.234E+3, + 0.123E+3, 0.19812000E+1, 0.19138000E+1, 0.23963570E+3, 0.234E+3, 0.124E+3, 0.19812000E+1, + 0.18269000E+1, 0.22229610E+3, 0.234E+3, 0.125E+3, 0.19812000E+1, 0.16406000E+1, 0.20623670E+3, + 0.234E+3, 0.126E+3, 0.19812000E+1, 0.16483000E+1, 0.19674030E+3, 0.234E+3, 0.127E+3, + 0.19812000E+1, 0.17149000E+1, 0.19219700E+3, 0.234E+3, 0.128E+3, 0.19812000E+1, 0.17937000E+1, + 0.18865600E+3, 0.234E+3, 0.129E+3, 0.19812000E+1, 0.95760000E+0, 0.17907470E+3, 0.234E+3, + 0.130E+3, 0.19812000E+1, 0.19419000E+1, 0.28616240E+3, 0.234E+3, 0.131E+3, 0.19812000E+1, + 0.96010000E+0, 0.25488570E+3, 0.234E+3, 0.132E+3, 0.19812000E+1, 0.94340000E+0, 0.23075580E+3, + 0.234E+3, 0.133E+3, 0.19812000E+1, 0.98890000E+0, 0.21214750E+3, 0.234E+3, 0.134E+3, + 0.19812000E+1, 0.99010000E+0, 0.18822630E+3, 0.234E+3, 0.135E+3, 0.19812000E+1, 0.99740000E+0, + 0.30225300E+3, 0.234E+3, 0.137E+3, 0.19812000E+1, 0.97380000E+0, 0.56874160E+3, 0.234E+3, + 0.138E+3, 0.19812000E+1, 0.98010000E+0, 0.44473220E+3, 0.234E+3, 0.139E+3, 0.19812000E+1, + 0.19153000E+1, 0.33846100E+3, 0.234E+3, 0.140E+3, 0.19812000E+1, 0.19355000E+1, 0.34164920E+3, + 0.234E+3, 0.141E+3, 0.19812000E+1, 0.19545000E+1, 0.31953400E+3, 0.234E+3, 0.142E+3, + 0.19812000E+1, 0.19420000E+1, 0.35457680E+3, 0.234E+3, 0.143E+3, 0.19812000E+1, 0.16682000E+1, + 0.28063740E+3, 0.234E+3, 0.144E+3, 0.19812000E+1, 0.18584000E+1, 0.26272550E+3, 0.234E+3, + 0.145E+3, 0.19812000E+1, 0.19003000E+1, 0.24429540E+3, 0.234E+3, 0.146E+3, 0.19812000E+1, + 0.18630000E+1, 0.23598710E+3, 0.234E+3, 0.147E+3, 0.19812000E+1, 0.96790000E+0, 0.23484700E+3, + 0.234E+3, 0.148E+3, 0.19812000E+1, 0.19539000E+1, 0.36336970E+3, 0.234E+3, 0.149E+3, + 0.19812000E+1, 0.96330000E+0, 0.33258250E+3, 0.234E+3, 0.150E+3, 0.19812000E+1, 0.95140000E+0, + 0.31402340E+3, 0.234E+3, 0.151E+3, 0.19812000E+1, 0.97490000E+0, 0.29872470E+3, 0.234E+3, + 0.152E+3, 0.19812000E+1, 0.98110000E+0, 0.27458620E+3, 0.234E+3, 0.153E+3, 0.19812000E+1, + 0.99680000E+0, 0.36080530E+3, 0.234E+3, 0.155E+3, 0.19812000E+1, 0.99090000E+0, 0.73458650E+3, + 0.234E+3, 0.156E+3, 0.19812000E+1, 0.97970000E+0, 0.56200060E+3, 0.234E+3, 0.157E+3, + 0.19812000E+1, 0.19373000E+1, 0.36616290E+3, 0.234E+3, 0.159E+3, 0.19812000E+1, 0.29425000E+1, + 0.35862210E+3, 0.234E+3, 0.160E+3, 0.19812000E+1, 0.29455000E+1, 0.34744280E+3, 0.234E+3, + 0.161E+3, 0.19812000E+1, 0.29413000E+1, 0.34859290E+3, 0.234E+3, 0.162E+3, 0.19812000E+1, + 0.29300000E+1, 0.33417340E+3, 0.234E+3, 0.163E+3, 0.19812000E+1, 0.18286000E+1, 0.35060320E+3, + 0.234E+3, 0.164E+3, 0.19812000E+1, 0.28732000E+1, 0.32973370E+3, 0.234E+3, 0.165E+3, + 0.19812000E+1, 0.29086000E+1, 0.33455220E+3, 0.234E+3, 0.166E+3, 0.19812000E+1, 0.28965000E+1, + 0.31341130E+3, 0.234E+3, 0.167E+3, 0.19812000E+1, 0.29242000E+1, 0.30463840E+3, 0.234E+3, + 0.168E+3, 0.19812000E+1, 0.29282000E+1, 0.30255580E+3, 0.234E+3, 0.169E+3, 0.19812000E+1, + 0.29246000E+1, 0.31727860E+3, 0.234E+3, 0.170E+3, 0.19812000E+1, 0.28482000E+1, 0.29267680E+3, + 0.234E+3, 0.171E+3, 0.19812000E+1, 0.29219000E+1, 0.38927450E+3, 0.234E+3, 0.172E+3, + 0.19812000E+1, 0.19254000E+1, 0.36365250E+3, 0.234E+3, 0.173E+3, 0.19812000E+1, 0.19459000E+1, + 0.33401770E+3, 0.234E+3, 0.174E+3, 0.19812000E+1, 0.19292000E+1, 0.33595050E+3, 0.234E+3, + 0.175E+3, 0.19812000E+1, 0.18104000E+1, 0.29862210E+3, 0.234E+3, 0.176E+3, 0.19812000E+1, + 0.18858000E+1, 0.28153260E+3, 0.234E+3, 0.177E+3, 0.19812000E+1, 0.18648000E+1, 0.26922650E+3, + 0.234E+3, 0.178E+3, 0.19812000E+1, 0.19188000E+1, 0.25729480E+3, 0.234E+3, 0.179E+3, + 0.19812000E+1, 0.98460000E+0, 0.24994700E+3, 0.234E+3, 0.180E+3, 0.19812000E+1, 0.19896000E+1, + 0.39112750E+3, 0.234E+3, 0.181E+3, 0.19812000E+1, 0.92670000E+0, 0.36046170E+3, 0.234E+3, + 0.182E+3, 0.19812000E+1, 0.93830000E+0, 0.35169120E+3, 0.234E+3, 0.183E+3, 0.19812000E+1, + 0.98200000E+0, 0.34355060E+3, 0.234E+3, 0.184E+3, 0.19812000E+1, 0.98150000E+0, 0.32270510E+3, + 0.234E+3, 0.185E+3, 0.19812000E+1, 0.99540000E+0, 0.40664340E+3, 0.234E+3, 0.187E+3, + 0.19812000E+1, 0.97050000E+0, 0.73595700E+3, 0.234E+3, 0.188E+3, 0.19812000E+1, 0.96620000E+0, + 0.43316650E+3, 0.234E+3, 0.189E+3, 0.19812000E+1, 0.29070000E+1, 0.49533320E+3, 0.234E+3, + 0.190E+3, 0.19812000E+1, 0.28844000E+1, 0.44442440E+3, 0.234E+3, 0.191E+3, 0.19812000E+1, + 0.28738000E+1, 0.39550150E+3, 0.234E+3, 0.192E+3, 0.19812000E+1, 0.28878000E+1, 0.38118140E+3, + 0.234E+3, 0.193E+3, 0.19812000E+1, 0.29095000E+1, 0.44946340E+3, 0.234E+3, 0.194E+3, + 0.19812000E+1, 0.19209000E+1, 0.10680860E+3, 0.234E+3, 0.204E+3, 0.19812000E+1, 0.19697000E+1, + 0.10541670E+3, 0.234E+3, 0.205E+3, 0.19812000E+1, 0.19441000E+1, 0.78317700E+2, 0.234E+3, + 0.206E+3, 0.19812000E+1, 0.19985000E+1, 0.63154900E+2, 0.234E+3, 0.207E+3, 0.19812000E+1, + 0.20143000E+1, 0.43702200E+2, 0.234E+3, 0.208E+3, 0.19812000E+1, 0.19887000E+1, 0.18715040E+3, + 0.234E+3, 0.212E+3, 0.19812000E+1, 0.19496000E+1, 0.22592450E+3, 0.234E+3, 0.213E+3, + 0.19812000E+1, 0.19311000E+1, 0.21868530E+3, 0.234E+3, 0.214E+3, 0.19812000E+1, 0.19435000E+1, + 0.19178480E+3, 0.234E+3, 0.215E+3, 0.19812000E+1, 0.20102000E+1, 0.16266590E+3, 0.234E+3, + 0.216E+3, 0.19812000E+1, 0.19903000E+1, 0.26236130E+3, 0.234E+3, 0.220E+3, 0.19812000E+1, + 0.19349000E+1, 0.25392720E+3, 0.234E+3, 0.221E+3, 0.19812000E+1, 0.28999000E+1, 0.25718410E+3, + 0.234E+3, 0.222E+3, 0.19812000E+1, 0.38675000E+1, 0.23527290E+3, 0.234E+3, 0.223E+3, + 0.19812000E+1, 0.29110000E+1, 0.17915590E+3, 0.234E+3, 0.224E+3, 0.19812000E+1, 0.10619100E+2, + 0.15430230E+3, 0.234E+3, 0.225E+3, 0.19812000E+1, 0.98849000E+1, 0.15132020E+3, 0.234E+3, + 0.226E+3, 0.19812000E+1, 0.91376000E+1, 0.17548260E+3, 0.234E+3, 0.227E+3, 0.19812000E+1, + 0.29263000E+1, 0.16398640E+3, 0.234E+3, 0.228E+3, 0.19812000E+1, 0.65458000E+1, 0.22956900E+3, + 0.234E+3, 0.231E+3, 0.19812000E+1, 0.19315000E+1, 0.24320020E+3, 0.234E+3, 0.232E+3, + 0.19812000E+1, 0.19447000E+1, 0.22498180E+3, 0.234E+3, 0.233E+3, 0.19812000E+1, 0.19793000E+1, + 0.21052310E+3, 0.234E+3, 0.234E+3, 0.19812000E+1, 0.19812000E+1, 0.36860600E+2, 0.238E+3, + 0.100E+1, 0.19143000E+1, 0.91180000E+0, 0.23840100E+2, 0.238E+3, 0.200E+1, 0.19143000E+1, + 0.00000000E+0, 0.62823990E+3, 0.238E+3, 0.300E+1, 0.19143000E+1, 0.00000000E+0, 0.34816900E+3, + 0.238E+3, 0.400E+1, 0.19143000E+1, 0.00000000E+0, 0.22895120E+3, 0.238E+3, 0.500E+1, + 0.19143000E+1, 0.00000000E+0, 0.15197450E+3, 0.238E+3, 0.600E+1, 0.19143000E+1, 0.00000000E+0, + 0.10490040E+3, 0.238E+3, 0.700E+1, 0.19143000E+1, 0.00000000E+0, 0.78693300E+2, 0.238E+3, + 0.800E+1, 0.19143000E+1, 0.00000000E+0, 0.59141500E+2, 0.238E+3, 0.900E+1, 0.19143000E+1, + 0.00000000E+0, 0.45194100E+2, 0.238E+3, 0.100E+2, 0.19143000E+1, 0.00000000E+0, 0.74930050E+3, + 0.238E+3, 0.110E+2, 0.19143000E+1, 0.00000000E+0, 0.55878190E+3, 0.238E+3, 0.120E+2, + 0.19143000E+1, 0.00000000E+0, 0.50880610E+3, 0.238E+3, 0.130E+2, 0.19143000E+1, 0.00000000E+0, + 0.39434550E+3, 0.238E+3, 0.140E+2, 0.19143000E+1, 0.00000000E+0, 0.30325210E+3, 0.238E+3, + 0.150E+2, 0.19143000E+1, 0.00000000E+0, 0.24942670E+3, 0.238E+3, 0.160E+2, 0.19143000E+1, + 0.00000000E+0, 0.20199970E+3, 0.238E+3, 0.170E+2, 0.19143000E+1, 0.00000000E+0, 0.16402750E+3, + 0.238E+3, 0.180E+2, 0.19143000E+1, 0.00000000E+0, 0.12349320E+4, 0.238E+3, 0.190E+2, + 0.19143000E+1, 0.00000000E+0, 0.99446760E+3, 0.238E+3, 0.200E+2, 0.19143000E+1, 0.00000000E+0, + 0.81692750E+3, 0.238E+3, 0.210E+2, 0.19143000E+1, 0.00000000E+0, 0.78468860E+3, 0.238E+3, + 0.220E+2, 0.19143000E+1, 0.00000000E+0, 0.71627780E+3, 0.238E+3, 0.230E+2, 0.19143000E+1, + 0.00000000E+0, 0.56371140E+3, 0.238E+3, 0.240E+2, 0.19143000E+1, 0.00000000E+0, 0.61384180E+3, + 0.238E+3, 0.250E+2, 0.19143000E+1, 0.00000000E+0, 0.48104470E+3, 0.238E+3, 0.260E+2, + 0.19143000E+1, 0.00000000E+0, 0.50672720E+3, 0.238E+3, 0.270E+2, 0.19143000E+1, 0.00000000E+0, + 0.52370020E+3, 0.238E+3, 0.280E+2, 0.19143000E+1, 0.00000000E+0, 0.40117140E+3, 0.238E+3, + 0.290E+2, 0.19143000E+1, 0.00000000E+0, 0.40794990E+3, 0.238E+3, 0.300E+2, 0.19143000E+1, + 0.00000000E+0, 0.48488130E+3, 0.238E+3, 0.310E+2, 0.19143000E+1, 0.00000000E+0, 0.42218130E+3, + 0.238E+3, 0.320E+2, 0.19143000E+1, 0.00000000E+0, 0.35593940E+3, 0.238E+3, 0.330E+2, + 0.19143000E+1, 0.00000000E+0, 0.31709380E+3, 0.238E+3, 0.340E+2, 0.19143000E+1, 0.00000000E+0, + 0.27544760E+3, 0.238E+3, 0.350E+2, 0.19143000E+1, 0.00000000E+0, 0.23792190E+3, 0.238E+3, + 0.360E+2, 0.19143000E+1, 0.00000000E+0, 0.13808411E+4, 0.238E+3, 0.370E+2, 0.19143000E+1, + 0.00000000E+0, 0.11858018E+4, 0.238E+3, 0.380E+2, 0.19143000E+1, 0.00000000E+0, 0.10282536E+4, + 0.238E+3, 0.390E+2, 0.19143000E+1, 0.00000000E+0, 0.91823780E+3, 0.238E+3, 0.400E+2, + 0.19143000E+1, 0.00000000E+0, 0.83371350E+3, 0.238E+3, 0.410E+2, 0.19143000E+1, 0.00000000E+0, + 0.63877680E+3, 0.238E+3, 0.420E+2, 0.19143000E+1, 0.00000000E+0, 0.71471880E+3, 0.238E+3, + 0.430E+2, 0.19143000E+1, 0.00000000E+0, 0.53996390E+3, 0.238E+3, 0.440E+2, 0.19143000E+1, + 0.00000000E+0, 0.59037440E+3, 0.238E+3, 0.450E+2, 0.19143000E+1, 0.00000000E+0, 0.54597680E+3, + 0.238E+3, 0.460E+2, 0.19143000E+1, 0.00000000E+0, 0.45572670E+3, 0.238E+3, 0.470E+2, + 0.19143000E+1, 0.00000000E+0, 0.47937970E+3, 0.238E+3, 0.480E+2, 0.19143000E+1, 0.00000000E+0, + 0.60681450E+3, 0.238E+3, 0.490E+2, 0.19143000E+1, 0.00000000E+0, 0.55532330E+3, 0.238E+3, + 0.500E+2, 0.19143000E+1, 0.00000000E+0, 0.48982280E+3, 0.238E+3, 0.510E+2, 0.19143000E+1, + 0.00000000E+0, 0.45162950E+3, 0.238E+3, 0.520E+2, 0.19143000E+1, 0.00000000E+0, 0.40561580E+3, + 0.238E+3, 0.530E+2, 0.19143000E+1, 0.00000000E+0, 0.36235560E+3, 0.238E+3, 0.540E+2, + 0.19143000E+1, 0.00000000E+0, 0.16813249E+4, 0.238E+3, 0.550E+2, 0.19143000E+1, 0.00000000E+0, + 0.15165369E+4, 0.238E+3, 0.560E+2, 0.19143000E+1, 0.00000000E+0, 0.13190312E+4, 0.238E+3, + 0.570E+2, 0.19143000E+1, 0.00000000E+0, 0.57973570E+3, 0.238E+3, 0.580E+2, 0.19143000E+1, + 0.27991000E+1, 0.13389789E+4, 0.238E+3, 0.590E+2, 0.19143000E+1, 0.00000000E+0, 0.12836521E+4, + 0.238E+3, 0.600E+2, 0.19143000E+1, 0.00000000E+0, 0.12508766E+4, 0.238E+3, 0.610E+2, + 0.19143000E+1, 0.00000000E+0, 0.12208006E+4, 0.238E+3, 0.620E+2, 0.19143000E+1, 0.00000000E+0, + 0.11941104E+4, 0.238E+3, 0.630E+2, 0.19143000E+1, 0.00000000E+0, 0.92828660E+3, 0.238E+3, + 0.640E+2, 0.19143000E+1, 0.00000000E+0, 0.10621534E+4, 0.238E+3, 0.650E+2, 0.19143000E+1, + 0.00000000E+0, 0.10223708E+4, 0.238E+3, 0.660E+2, 0.19143000E+1, 0.00000000E+0, 0.10743220E+4, + 0.238E+3, 0.670E+2, 0.19143000E+1, 0.00000000E+0, 0.10512437E+4, 0.238E+3, 0.680E+2, + 0.19143000E+1, 0.00000000E+0, 0.10302928E+4, 0.238E+3, 0.690E+2, 0.19143000E+1, 0.00000000E+0, + 0.10187310E+4, 0.238E+3, 0.700E+2, 0.19143000E+1, 0.00000000E+0, 0.85160220E+3, 0.238E+3, + 0.710E+2, 0.19143000E+1, 0.00000000E+0, 0.82898030E+3, 0.238E+3, 0.720E+2, 0.19143000E+1, + 0.00000000E+0, 0.75166620E+3, 0.238E+3, 0.730E+2, 0.19143000E+1, 0.00000000E+0, 0.63136390E+3, + 0.238E+3, 0.740E+2, 0.19143000E+1, 0.00000000E+0, 0.64074450E+3, 0.238E+3, 0.750E+2, + 0.19143000E+1, 0.00000000E+0, 0.57745940E+3, 0.238E+3, 0.760E+2, 0.19143000E+1, 0.00000000E+0, + 0.52643720E+3, 0.238E+3, 0.770E+2, 0.19143000E+1, 0.00000000E+0, 0.43510780E+3, 0.238E+3, + 0.780E+2, 0.19143000E+1, 0.00000000E+0, 0.40568950E+3, 0.238E+3, 0.790E+2, 0.19143000E+1, + 0.00000000E+0, 0.41649740E+3, 0.238E+3, 0.800E+2, 0.19143000E+1, 0.00000000E+0, 0.62114960E+3, + 0.238E+3, 0.810E+2, 0.19143000E+1, 0.00000000E+0, 0.60248990E+3, 0.238E+3, 0.820E+2, + 0.19143000E+1, 0.00000000E+0, 0.54855160E+3, 0.238E+3, 0.830E+2, 0.19143000E+1, 0.00000000E+0, + 0.52038560E+3, 0.238E+3, 0.840E+2, 0.19143000E+1, 0.00000000E+0, 0.47718560E+3, 0.238E+3, + 0.850E+2, 0.19143000E+1, 0.00000000E+0, 0.43481090E+3, 0.238E+3, 0.860E+2, 0.19143000E+1, + 0.00000000E+0, 0.15749942E+4, 0.238E+3, 0.870E+2, 0.19143000E+1, 0.00000000E+0, 0.14917535E+4, + 0.238E+3, 0.880E+2, 0.19143000E+1, 0.00000000E+0, 0.13062558E+4, 0.238E+3, 0.890E+2, + 0.19143000E+1, 0.00000000E+0, 0.11610723E+4, 0.238E+3, 0.900E+2, 0.19143000E+1, 0.00000000E+0, + 0.11587996E+4, 0.238E+3, 0.910E+2, 0.19143000E+1, 0.00000000E+0, 0.11217009E+4, 0.238E+3, + 0.920E+2, 0.19143000E+1, 0.00000000E+0, 0.11626290E+4, 0.238E+3, 0.930E+2, 0.19143000E+1, + 0.00000000E+0, 0.11245057E+4, 0.238E+3, 0.940E+2, 0.19143000E+1, 0.00000000E+0, 0.60189200E+2, + 0.238E+3, 0.101E+3, 0.19143000E+1, 0.00000000E+0, 0.20169000E+3, 0.238E+3, 0.103E+3, + 0.19143000E+1, 0.98650000E+0, 0.25612950E+3, 0.238E+3, 0.104E+3, 0.19143000E+1, 0.98080000E+0, + 0.19164290E+3, 0.238E+3, 0.105E+3, 0.19143000E+1, 0.97060000E+0, 0.14261130E+3, 0.238E+3, + 0.106E+3, 0.19143000E+1, 0.98680000E+0, 0.97808500E+2, 0.238E+3, 0.107E+3, 0.19143000E+1, + 0.99440000E+0, 0.70428500E+2, 0.238E+3, 0.108E+3, 0.19143000E+1, 0.99250000E+0, 0.47741100E+2, + 0.238E+3, 0.109E+3, 0.19143000E+1, 0.99820000E+0, 0.29600050E+3, 0.238E+3, 0.111E+3, + 0.19143000E+1, 0.96840000E+0, 0.45880010E+3, 0.238E+3, 0.112E+3, 0.19143000E+1, 0.96280000E+0, + 0.45973700E+3, 0.238E+3, 0.113E+3, 0.19143000E+1, 0.96480000E+0, 0.36358720E+3, 0.238E+3, + 0.114E+3, 0.19143000E+1, 0.95070000E+0, 0.29421340E+3, 0.238E+3, 0.115E+3, 0.19143000E+1, + 0.99470000E+0, 0.24672930E+3, 0.238E+3, 0.116E+3, 0.19143000E+1, 0.99480000E+0, 0.19993530E+3, + 0.238E+3, 0.117E+3, 0.19143000E+1, 0.99720000E+0, 0.40435370E+3, 0.238E+3, 0.119E+3, + 0.19143000E+1, 0.97670000E+0, 0.79454790E+3, 0.238E+3, 0.120E+3, 0.19143000E+1, 0.98310000E+0, + 0.39932770E+3, 0.238E+3, 0.121E+3, 0.19143000E+1, 0.18627000E+1, 0.38527560E+3, 0.238E+3, + 0.122E+3, 0.19143000E+1, 0.18299000E+1, 0.37765080E+3, 0.238E+3, 0.123E+3, 0.19143000E+1, + 0.19138000E+1, 0.37474370E+3, 0.238E+3, 0.124E+3, 0.19143000E+1, 0.18269000E+1, 0.34218210E+3, + 0.238E+3, 0.125E+3, 0.19143000E+1, 0.16406000E+1, 0.31593550E+3, 0.238E+3, 0.126E+3, + 0.19143000E+1, 0.16483000E+1, 0.30136140E+3, 0.238E+3, 0.127E+3, 0.19143000E+1, 0.17149000E+1, + 0.29480040E+3, 0.238E+3, 0.128E+3, 0.19143000E+1, 0.17937000E+1, 0.29297830E+3, 0.238E+3, + 0.129E+3, 0.19143000E+1, 0.95760000E+0, 0.27198180E+3, 0.238E+3, 0.130E+3, 0.19143000E+1, + 0.19419000E+1, 0.45391820E+3, 0.238E+3, 0.131E+3, 0.19143000E+1, 0.96010000E+0, 0.39376600E+3, + 0.238E+3, 0.132E+3, 0.19143000E+1, 0.94340000E+0, 0.34965980E+3, 0.238E+3, 0.133E+3, + 0.19143000E+1, 0.98890000E+0, 0.31724980E+3, 0.238E+3, 0.134E+3, 0.19143000E+1, 0.99010000E+0, + 0.27746890E+3, 0.238E+3, 0.135E+3, 0.19143000E+1, 0.99740000E+0, 0.48106050E+3, 0.238E+3, + 0.137E+3, 0.19143000E+1, 0.97380000E+0, 0.96807870E+3, 0.238E+3, 0.138E+3, 0.19143000E+1, + 0.98010000E+0, 0.72518090E+3, 0.238E+3, 0.139E+3, 0.19143000E+1, 0.19153000E+1, 0.52865740E+3, + 0.238E+3, 0.140E+3, 0.19143000E+1, 0.19355000E+1, 0.53402030E+3, 0.238E+3, 0.141E+3, + 0.19143000E+1, 0.19545000E+1, 0.49651280E+3, 0.238E+3, 0.142E+3, 0.19143000E+1, 0.19420000E+1, + 0.56243130E+3, 0.238E+3, 0.143E+3, 0.19143000E+1, 0.16682000E+1, 0.42953830E+3, 0.238E+3, + 0.144E+3, 0.19143000E+1, 0.18584000E+1, 0.40150480E+3, 0.238E+3, 0.145E+3, 0.19143000E+1, + 0.19003000E+1, 0.37226120E+3, 0.238E+3, 0.146E+3, 0.19143000E+1, 0.18630000E+1, 0.36048910E+3, + 0.238E+3, 0.147E+3, 0.19143000E+1, 0.96790000E+0, 0.35460960E+3, 0.238E+3, 0.148E+3, + 0.19143000E+1, 0.19539000E+1, 0.57628960E+3, 0.238E+3, 0.149E+3, 0.19143000E+1, 0.96330000E+0, + 0.51576060E+3, 0.238E+3, 0.150E+3, 0.19143000E+1, 0.95140000E+0, 0.47938630E+3, 0.238E+3, + 0.151E+3, 0.19143000E+1, 0.97490000E+0, 0.45112580E+3, 0.238E+3, 0.152E+3, 0.19143000E+1, + 0.98110000E+0, 0.40947120E+3, 0.238E+3, 0.153E+3, 0.19143000E+1, 0.99680000E+0, 0.56434540E+3, + 0.238E+3, 0.155E+3, 0.19143000E+1, 0.99090000E+0, 0.12601619E+4, 0.238E+3, 0.156E+3, + 0.19143000E+1, 0.97970000E+0, 0.91944900E+3, 0.238E+3, 0.157E+3, 0.19143000E+1, 0.19373000E+1, + 0.56190760E+3, 0.238E+3, 0.159E+3, 0.19143000E+1, 0.29425000E+1, 0.55022410E+3, 0.238E+3, + 0.160E+3, 0.19143000E+1, 0.29455000E+1, 0.53249960E+3, 0.238E+3, 0.161E+3, 0.19143000E+1, + 0.29413000E+1, 0.53594970E+3, 0.238E+3, 0.162E+3, 0.19143000E+1, 0.29300000E+1, 0.51922710E+3, + 0.238E+3, 0.163E+3, 0.19143000E+1, 0.18286000E+1, 0.53962270E+3, 0.238E+3, 0.164E+3, + 0.19143000E+1, 0.28732000E+1, 0.50614540E+3, 0.238E+3, 0.165E+3, 0.19143000E+1, 0.29086000E+1, + 0.51646990E+3, 0.238E+3, 0.166E+3, 0.19143000E+1, 0.28965000E+1, 0.47978110E+3, 0.238E+3, + 0.167E+3, 0.19143000E+1, 0.29242000E+1, 0.46587230E+3, 0.238E+3, 0.168E+3, 0.19143000E+1, + 0.29282000E+1, 0.46307400E+3, 0.238E+3, 0.169E+3, 0.19143000E+1, 0.29246000E+1, 0.48786280E+3, + 0.238E+3, 0.170E+3, 0.19143000E+1, 0.28482000E+1, 0.44725110E+3, 0.238E+3, 0.171E+3, + 0.19143000E+1, 0.29219000E+1, 0.61717070E+3, 0.238E+3, 0.172E+3, 0.19143000E+1, 0.19254000E+1, + 0.56919750E+3, 0.238E+3, 0.173E+3, 0.19143000E+1, 0.19459000E+1, 0.51595990E+3, 0.238E+3, + 0.174E+3, 0.19143000E+1, 0.19292000E+1, 0.52505030E+3, 0.238E+3, 0.175E+3, 0.19143000E+1, + 0.18104000E+1, 0.45276340E+3, 0.238E+3, 0.176E+3, 0.19143000E+1, 0.18858000E+1, 0.42495970E+3, + 0.238E+3, 0.177E+3, 0.19143000E+1, 0.18648000E+1, 0.40531970E+3, 0.238E+3, 0.178E+3, + 0.19143000E+1, 0.19188000E+1, 0.38754040E+3, 0.238E+3, 0.179E+3, 0.19143000E+1, 0.98460000E+0, + 0.37247490E+3, 0.238E+3, 0.180E+3, 0.19143000E+1, 0.19896000E+1, 0.61741750E+3, 0.238E+3, + 0.181E+3, 0.19143000E+1, 0.92670000E+0, 0.55680680E+3, 0.238E+3, 0.182E+3, 0.19143000E+1, + 0.93830000E+0, 0.53692140E+3, 0.238E+3, 0.183E+3, 0.19143000E+1, 0.98200000E+0, 0.52008520E+3, + 0.238E+3, 0.184E+3, 0.19143000E+1, 0.98150000E+0, 0.48293520E+3, 0.238E+3, 0.185E+3, + 0.19143000E+1, 0.99540000E+0, 0.63518450E+3, 0.238E+3, 0.187E+3, 0.19143000E+1, 0.97050000E+0, + 0.12452372E+4, 0.238E+3, 0.188E+3, 0.19143000E+1, 0.96620000E+0, 0.66511670E+3, 0.238E+3, + 0.189E+3, 0.19143000E+1, 0.29070000E+1, 0.77484830E+3, 0.238E+3, 0.190E+3, 0.19143000E+1, + 0.28844000E+1, 0.69052460E+3, 0.238E+3, 0.191E+3, 0.19143000E+1, 0.28738000E+1, 0.60568150E+3, + 0.238E+3, 0.192E+3, 0.19143000E+1, 0.28878000E+1, 0.58187050E+3, 0.238E+3, 0.193E+3, + 0.19143000E+1, 0.29095000E+1, 0.71381570E+3, 0.238E+3, 0.194E+3, 0.19143000E+1, 0.19209000E+1, + 0.16346210E+3, 0.238E+3, 0.204E+3, 0.19143000E+1, 0.19697000E+1, 0.16010980E+3, 0.238E+3, + 0.205E+3, 0.19143000E+1, 0.19441000E+1, 0.11541070E+3, 0.238E+3, 0.206E+3, 0.19143000E+1, + 0.19985000E+1, 0.91672500E+2, 0.238E+3, 0.207E+3, 0.19143000E+1, 0.20143000E+1, 0.61915900E+2, + 0.238E+3, 0.208E+3, 0.19143000E+1, 0.19887000E+1, 0.29291740E+3, 0.238E+3, 0.212E+3, + 0.19143000E+1, 0.19496000E+1, 0.35455260E+3, 0.238E+3, 0.213E+3, 0.19143000E+1, 0.19311000E+1, + 0.33737570E+3, 0.238E+3, 0.214E+3, 0.19143000E+1, 0.19435000E+1, 0.29047610E+3, 0.238E+3, + 0.215E+3, 0.19143000E+1, 0.20102000E+1, 0.24169490E+3, 0.238E+3, 0.216E+3, 0.19143000E+1, + 0.19903000E+1, 0.41078570E+3, 0.238E+3, 0.220E+3, 0.19143000E+1, 0.19349000E+1, 0.39219670E+3, + 0.238E+3, 0.221E+3, 0.19143000E+1, 0.28999000E+1, 0.39682160E+3, 0.238E+3, 0.222E+3, + 0.19143000E+1, 0.38675000E+1, 0.36331250E+3, 0.238E+3, 0.223E+3, 0.19143000E+1, 0.29110000E+1, + 0.27075430E+3, 0.238E+3, 0.224E+3, 0.19143000E+1, 0.10619100E+2, 0.23012310E+3, 0.238E+3, + 0.225E+3, 0.19143000E+1, 0.98849000E+1, 0.22605370E+3, 0.238E+3, 0.226E+3, 0.19143000E+1, + 0.91376000E+1, 0.26782340E+3, 0.238E+3, 0.227E+3, 0.19143000E+1, 0.29263000E+1, 0.24873790E+3, + 0.238E+3, 0.228E+3, 0.19143000E+1, 0.65458000E+1, 0.35556210E+3, 0.238E+3, 0.231E+3, + 0.19143000E+1, 0.19315000E+1, 0.37409750E+3, 0.238E+3, 0.232E+3, 0.19143000E+1, 0.19447000E+1, + 0.34006880E+3, 0.238E+3, 0.233E+3, 0.19143000E+1, 0.19793000E+1, 0.31469330E+3, 0.238E+3, + 0.234E+3, 0.19143000E+1, 0.19812000E+1, 0.49174480E+3, 0.238E+3, 0.238E+3, 0.19143000E+1, + 0.19143000E+1, 0.36054300E+2, 0.239E+3, 0.100E+1, 0.28903000E+1, 0.91180000E+0, 0.23646200E+2, + 0.239E+3, 0.200E+1, 0.28903000E+1, 0.00000000E+0, 0.56732020E+3, 0.239E+3, 0.300E+1, + 0.28903000E+1, 0.00000000E+0, 0.32691860E+3, 0.239E+3, 0.400E+1, 0.28903000E+1, 0.00000000E+0, + 0.21933470E+3, 0.239E+3, 0.500E+1, 0.28903000E+1, 0.00000000E+0, 0.14760490E+3, 0.239E+3, + 0.600E+1, 0.28903000E+1, 0.00000000E+0, 0.10284790E+3, 0.239E+3, 0.700E+1, 0.28903000E+1, + 0.00000000E+0, 0.77633500E+2, 0.239E+3, 0.800E+1, 0.28903000E+1, 0.00000000E+0, 0.58635900E+2, + 0.239E+3, 0.900E+1, 0.28903000E+1, 0.00000000E+0, 0.44975300E+2, 0.239E+3, 0.100E+2, + 0.28903000E+1, 0.00000000E+0, 0.67817260E+3, 0.239E+3, 0.110E+2, 0.28903000E+1, 0.00000000E+0, + 0.52114300E+3, 0.239E+3, 0.120E+2, 0.28903000E+1, 0.00000000E+0, 0.47968840E+3, 0.239E+3, + 0.130E+2, 0.28903000E+1, 0.00000000E+0, 0.37706390E+3, 0.239E+3, 0.140E+2, 0.28903000E+1, + 0.00000000E+0, 0.29323240E+3, 0.239E+3, 0.150E+2, 0.28903000E+1, 0.00000000E+0, 0.24282560E+3, + 0.239E+3, 0.160E+2, 0.28903000E+1, 0.00000000E+0, 0.19787960E+3, 0.239E+3, 0.170E+2, + 0.28903000E+1, 0.00000000E+0, 0.16150560E+3, 0.239E+3, 0.180E+2, 0.28903000E+1, 0.00000000E+0, + 0.11105426E+4, 0.239E+3, 0.190E+2, 0.28903000E+1, 0.00000000E+0, 0.91608550E+3, 0.239E+3, + 0.200E+2, 0.28903000E+1, 0.00000000E+0, 0.75654430E+3, 0.239E+3, 0.210E+2, 0.28903000E+1, + 0.00000000E+0, 0.73005840E+3, 0.239E+3, 0.220E+2, 0.28903000E+1, 0.00000000E+0, 0.66827290E+3, + 0.239E+3, 0.230E+2, 0.28903000E+1, 0.00000000E+0, 0.52603240E+3, 0.239E+3, 0.240E+2, + 0.28903000E+1, 0.00000000E+0, 0.57500600E+3, 0.239E+3, 0.250E+2, 0.28903000E+1, 0.00000000E+0, + 0.45091200E+3, 0.239E+3, 0.260E+2, 0.28903000E+1, 0.00000000E+0, 0.47789770E+3, 0.239E+3, + 0.270E+2, 0.28903000E+1, 0.00000000E+0, 0.49251980E+3, 0.239E+3, 0.280E+2, 0.28903000E+1, + 0.00000000E+0, 0.37723750E+3, 0.239E+3, 0.290E+2, 0.28903000E+1, 0.00000000E+0, 0.38708210E+3, + 0.239E+3, 0.300E+2, 0.28903000E+1, 0.00000000E+0, 0.45890330E+3, 0.239E+3, 0.310E+2, + 0.28903000E+1, 0.00000000E+0, 0.40396460E+3, 0.239E+3, 0.320E+2, 0.28903000E+1, 0.00000000E+0, + 0.34379750E+3, 0.239E+3, 0.330E+2, 0.28903000E+1, 0.00000000E+0, 0.30797330E+3, 0.239E+3, + 0.340E+2, 0.28903000E+1, 0.00000000E+0, 0.26898800E+3, 0.239E+3, 0.350E+2, 0.28903000E+1, + 0.00000000E+0, 0.23345810E+3, 0.239E+3, 0.360E+2, 0.28903000E+1, 0.00000000E+0, 0.12441578E+4, + 0.239E+3, 0.370E+2, 0.28903000E+1, 0.00000000E+0, 0.10912408E+4, 0.239E+3, 0.380E+2, + 0.28903000E+1, 0.00000000E+0, 0.95501530E+3, 0.239E+3, 0.390E+2, 0.28903000E+1, 0.00000000E+0, + 0.85765270E+3, 0.239E+3, 0.400E+2, 0.28903000E+1, 0.00000000E+0, 0.78153770E+3, 0.239E+3, + 0.410E+2, 0.28903000E+1, 0.00000000E+0, 0.60242530E+3, 0.239E+3, 0.420E+2, 0.28903000E+1, + 0.00000000E+0, 0.67255530E+3, 0.239E+3, 0.430E+2, 0.28903000E+1, 0.00000000E+0, 0.51147220E+3, + 0.239E+3, 0.440E+2, 0.28903000E+1, 0.00000000E+0, 0.55934530E+3, 0.239E+3, 0.450E+2, + 0.28903000E+1, 0.00000000E+0, 0.51843740E+3, 0.239E+3, 0.460E+2, 0.28903000E+1, 0.00000000E+0, + 0.43197050E+3, 0.239E+3, 0.470E+2, 0.28903000E+1, 0.00000000E+0, 0.45648750E+3, 0.239E+3, + 0.480E+2, 0.28903000E+1, 0.00000000E+0, 0.57380210E+3, 0.239E+3, 0.490E+2, 0.28903000E+1, + 0.00000000E+0, 0.52991860E+3, 0.239E+3, 0.500E+2, 0.28903000E+1, 0.00000000E+0, 0.47140640E+3, + 0.239E+3, 0.510E+2, 0.28903000E+1, 0.00000000E+0, 0.43680220E+3, 0.239E+3, 0.520E+2, + 0.28903000E+1, 0.00000000E+0, 0.39431850E+3, 0.239E+3, 0.530E+2, 0.28903000E+1, 0.00000000E+0, + 0.35391780E+3, 0.239E+3, 0.540E+2, 0.28903000E+1, 0.00000000E+0, 0.15153755E+4, 0.239E+3, + 0.550E+2, 0.28903000E+1, 0.00000000E+0, 0.13911764E+4, 0.239E+3, 0.560E+2, 0.28903000E+1, + 0.00000000E+0, 0.12212152E+4, 0.239E+3, 0.570E+2, 0.28903000E+1, 0.00000000E+0, 0.55696970E+3, + 0.239E+3, 0.580E+2, 0.28903000E+1, 0.27991000E+1, 0.12319890E+4, 0.239E+3, 0.590E+2, + 0.28903000E+1, 0.00000000E+0, 0.11829141E+4, 0.239E+3, 0.600E+2, 0.28903000E+1, 0.00000000E+0, + 0.11532166E+4, 0.239E+3, 0.610E+2, 0.28903000E+1, 0.00000000E+0, 0.11259127E+4, 0.239E+3, + 0.620E+2, 0.28903000E+1, 0.00000000E+0, 0.11017008E+4, 0.239E+3, 0.630E+2, 0.28903000E+1, + 0.00000000E+0, 0.86500110E+3, 0.239E+3, 0.640E+2, 0.28903000E+1, 0.00000000E+0, 0.97497080E+3, + 0.239E+3, 0.650E+2, 0.28903000E+1, 0.00000000E+0, 0.94011780E+3, 0.239E+3, 0.660E+2, + 0.28903000E+1, 0.00000000E+0, 0.99351430E+3, 0.239E+3, 0.670E+2, 0.28903000E+1, 0.00000000E+0, + 0.97243020E+3, 0.239E+3, 0.680E+2, 0.28903000E+1, 0.00000000E+0, 0.95340360E+3, 0.239E+3, + 0.690E+2, 0.28903000E+1, 0.00000000E+0, 0.94232490E+3, 0.239E+3, 0.700E+2, 0.28903000E+1, + 0.00000000E+0, 0.79310590E+3, 0.239E+3, 0.710E+2, 0.28903000E+1, 0.00000000E+0, 0.77930040E+3, + 0.239E+3, 0.720E+2, 0.28903000E+1, 0.00000000E+0, 0.71047900E+3, 0.239E+3, 0.730E+2, + 0.28903000E+1, 0.00000000E+0, 0.59913420E+3, 0.239E+3, 0.740E+2, 0.28903000E+1, 0.00000000E+0, + 0.60936150E+3, 0.239E+3, 0.750E+2, 0.28903000E+1, 0.00000000E+0, 0.55168900E+3, 0.239E+3, + 0.760E+2, 0.28903000E+1, 0.00000000E+0, 0.50477160E+3, 0.239E+3, 0.770E+2, 0.28903000E+1, + 0.00000000E+0, 0.41866960E+3, 0.239E+3, 0.780E+2, 0.28903000E+1, 0.00000000E+0, 0.39091310E+3, + 0.239E+3, 0.790E+2, 0.28903000E+1, 0.00000000E+0, 0.40209420E+3, 0.239E+3, 0.800E+2, + 0.28903000E+1, 0.00000000E+0, 0.58845790E+3, 0.239E+3, 0.810E+2, 0.28903000E+1, 0.00000000E+0, + 0.57489740E+3, 0.239E+3, 0.820E+2, 0.28903000E+1, 0.00000000E+0, 0.52748310E+3, 0.239E+3, + 0.830E+2, 0.28903000E+1, 0.00000000E+0, 0.50256880E+3, 0.239E+3, 0.840E+2, 0.28903000E+1, + 0.00000000E+0, 0.46316440E+3, 0.239E+3, 0.850E+2, 0.28903000E+1, 0.00000000E+0, 0.42389390E+3, + 0.239E+3, 0.860E+2, 0.28903000E+1, 0.00000000E+0, 0.14300247E+4, 0.239E+3, 0.870E+2, + 0.28903000E+1, 0.00000000E+0, 0.13749340E+4, 0.239E+3, 0.880E+2, 0.28903000E+1, 0.00000000E+0, + 0.12142860E+4, 0.239E+3, 0.890E+2, 0.28903000E+1, 0.00000000E+0, 0.10895911E+4, 0.239E+3, + 0.900E+2, 0.28903000E+1, 0.00000000E+0, 0.10821909E+4, 0.239E+3, 0.910E+2, 0.28903000E+1, + 0.00000000E+0, 0.10477793E+4, 0.239E+3, 0.920E+2, 0.28903000E+1, 0.00000000E+0, 0.10795998E+4, + 0.239E+3, 0.930E+2, 0.28903000E+1, 0.00000000E+0, 0.10453553E+4, 0.239E+3, 0.940E+2, + 0.28903000E+1, 0.00000000E+0, 0.58275500E+2, 0.239E+3, 0.101E+3, 0.28903000E+1, 0.00000000E+0, + 0.18988940E+3, 0.239E+3, 0.103E+3, 0.28903000E+1, 0.98650000E+0, 0.24200800E+3, 0.239E+3, + 0.104E+3, 0.28903000E+1, 0.98080000E+0, 0.18428470E+3, 0.239E+3, 0.105E+3, 0.28903000E+1, + 0.97060000E+0, 0.13843530E+3, 0.239E+3, 0.106E+3, 0.28903000E+1, 0.98680000E+0, 0.95889700E+2, + 0.239E+3, 0.107E+3, 0.28903000E+1, 0.99440000E+0, 0.69580600E+2, 0.239E+3, 0.108E+3, + 0.28903000E+1, 0.99250000E+0, 0.47591400E+2, 0.239E+3, 0.109E+3, 0.28903000E+1, 0.99820000E+0, + 0.27757010E+3, 0.239E+3, 0.111E+3, 0.28903000E+1, 0.96840000E+0, 0.42950590E+3, 0.239E+3, + 0.112E+3, 0.28903000E+1, 0.96280000E+0, 0.43451020E+3, 0.239E+3, 0.113E+3, 0.28903000E+1, + 0.96480000E+0, 0.34831620E+3, 0.239E+3, 0.114E+3, 0.28903000E+1, 0.95070000E+0, 0.28458190E+3, + 0.239E+3, 0.115E+3, 0.28903000E+1, 0.99470000E+0, 0.24014930E+3, 0.239E+3, 0.116E+3, + 0.28903000E+1, 0.99480000E+0, 0.19582670E+3, 0.239E+3, 0.117E+3, 0.28903000E+1, 0.99720000E+0, + 0.38177780E+3, 0.239E+3, 0.119E+3, 0.28903000E+1, 0.97670000E+0, 0.73212430E+3, 0.239E+3, + 0.120E+3, 0.28903000E+1, 0.98310000E+0, 0.38147190E+3, 0.239E+3, 0.121E+3, 0.28903000E+1, + 0.18627000E+1, 0.36814810E+3, 0.239E+3, 0.122E+3, 0.28903000E+1, 0.18299000E+1, 0.36077080E+3, + 0.239E+3, 0.123E+3, 0.28903000E+1, 0.19138000E+1, 0.35748370E+3, 0.239E+3, 0.124E+3, + 0.28903000E+1, 0.18269000E+1, 0.32862230E+3, 0.239E+3, 0.125E+3, 0.28903000E+1, 0.16406000E+1, + 0.30396440E+3, 0.239E+3, 0.126E+3, 0.28903000E+1, 0.16483000E+1, 0.28991370E+3, 0.239E+3, + 0.127E+3, 0.28903000E+1, 0.17149000E+1, 0.28344240E+3, 0.239E+3, 0.128E+3, 0.28903000E+1, + 0.17937000E+1, 0.28025690E+3, 0.239E+3, 0.129E+3, 0.28903000E+1, 0.95760000E+0, 0.26257350E+3, + 0.239E+3, 0.130E+3, 0.28903000E+1, 0.19419000E+1, 0.43079250E+3, 0.239E+3, 0.131E+3, + 0.28903000E+1, 0.96010000E+0, 0.37769300E+3, 0.239E+3, 0.132E+3, 0.28903000E+1, 0.94340000E+0, + 0.33790570E+3, 0.239E+3, 0.133E+3, 0.28903000E+1, 0.98890000E+0, 0.30809200E+3, 0.239E+3, + 0.134E+3, 0.28903000E+1, 0.99010000E+0, 0.27088100E+3, 0.239E+3, 0.135E+3, 0.28903000E+1, + 0.99740000E+0, 0.45524600E+3, 0.239E+3, 0.137E+3, 0.28903000E+1, 0.97380000E+0, 0.89074400E+3, + 0.239E+3, 0.138E+3, 0.28903000E+1, 0.98010000E+0, 0.67945910E+3, 0.239E+3, 0.139E+3, + 0.28903000E+1, 0.19153000E+1, 0.50443250E+3, 0.239E+3, 0.140E+3, 0.28903000E+1, 0.19355000E+1, + 0.50941810E+3, 0.239E+3, 0.141E+3, 0.28903000E+1, 0.19545000E+1, 0.47468070E+3, 0.239E+3, + 0.142E+3, 0.28903000E+1, 0.19420000E+1, 0.53297190E+3, 0.239E+3, 0.143E+3, 0.28903000E+1, + 0.16682000E+1, 0.41319030E+3, 0.239E+3, 0.144E+3, 0.28903000E+1, 0.18584000E+1, 0.38639150E+3, + 0.239E+3, 0.145E+3, 0.28903000E+1, 0.19003000E+1, 0.35861330E+3, 0.239E+3, 0.146E+3, + 0.28903000E+1, 0.18630000E+1, 0.34693600E+3, 0.239E+3, 0.147E+3, 0.28903000E+1, 0.96790000E+0, + 0.34299870E+3, 0.239E+3, 0.148E+3, 0.28903000E+1, 0.19539000E+1, 0.54666900E+3, 0.239E+3, + 0.149E+3, 0.28903000E+1, 0.96330000E+0, 0.49381290E+3, 0.239E+3, 0.150E+3, 0.28903000E+1, + 0.95140000E+0, 0.46187660E+3, 0.239E+3, 0.151E+3, 0.28903000E+1, 0.97490000E+0, 0.43645200E+3, + 0.239E+3, 0.152E+3, 0.28903000E+1, 0.98110000E+0, 0.39803820E+3, 0.239E+3, 0.153E+3, + 0.28903000E+1, 0.99680000E+0, 0.53790930E+3, 0.239E+3, 0.155E+3, 0.28903000E+1, 0.99090000E+0, + 0.11549423E+4, 0.239E+3, 0.156E+3, 0.28903000E+1, 0.97970000E+0, 0.86004650E+3, 0.239E+3, + 0.157E+3, 0.28903000E+1, 0.19373000E+1, 0.54009920E+3, 0.239E+3, 0.159E+3, 0.28903000E+1, + 0.29425000E+1, 0.52891450E+3, 0.239E+3, 0.160E+3, 0.28903000E+1, 0.29455000E+1, 0.51208670E+3, + 0.239E+3, 0.161E+3, 0.28903000E+1, 0.29413000E+1, 0.51473080E+3, 0.239E+3, 0.162E+3, + 0.28903000E+1, 0.29300000E+1, 0.49650390E+3, 0.239E+3, 0.163E+3, 0.28903000E+1, 0.18286000E+1, + 0.51809120E+3, 0.239E+3, 0.164E+3, 0.28903000E+1, 0.28732000E+1, 0.48646500E+3, 0.239E+3, + 0.165E+3, 0.28903000E+1, 0.29086000E+1, 0.49519130E+3, 0.239E+3, 0.166E+3, 0.28903000E+1, + 0.28965000E+1, 0.46164810E+3, 0.239E+3, 0.167E+3, 0.28903000E+1, 0.29242000E+1, 0.44845310E+3, + 0.239E+3, 0.168E+3, 0.28903000E+1, 0.29282000E+1, 0.44561860E+3, 0.239E+3, 0.169E+3, + 0.28903000E+1, 0.29246000E+1, 0.46867840E+3, 0.239E+3, 0.170E+3, 0.28903000E+1, 0.28482000E+1, + 0.43067940E+3, 0.239E+3, 0.171E+3, 0.28903000E+1, 0.29219000E+1, 0.58521160E+3, 0.239E+3, + 0.172E+3, 0.28903000E+1, 0.19254000E+1, 0.54252680E+3, 0.239E+3, 0.173E+3, 0.28903000E+1, + 0.19459000E+1, 0.49440990E+3, 0.239E+3, 0.174E+3, 0.28903000E+1, 0.19292000E+1, 0.50071270E+3, + 0.239E+3, 0.175E+3, 0.28903000E+1, 0.18104000E+1, 0.43713590E+3, 0.239E+3, 0.176E+3, + 0.28903000E+1, 0.18858000E+1, 0.41096170E+3, 0.239E+3, 0.177E+3, 0.28903000E+1, 0.18648000E+1, + 0.39233860E+3, 0.239E+3, 0.178E+3, 0.28903000E+1, 0.19188000E+1, 0.37499560E+3, 0.239E+3, + 0.179E+3, 0.28903000E+1, 0.98460000E+0, 0.36203330E+3, 0.239E+3, 0.180E+3, 0.28903000E+1, + 0.19896000E+1, 0.58648270E+3, 0.239E+3, 0.181E+3, 0.28903000E+1, 0.92670000E+0, 0.53375820E+3, + 0.239E+3, 0.182E+3, 0.28903000E+1, 0.93830000E+0, 0.51718370E+3, 0.239E+3, 0.183E+3, + 0.28903000E+1, 0.98200000E+0, 0.50262410E+3, 0.239E+3, 0.184E+3, 0.28903000E+1, 0.98150000E+0, + 0.46878500E+3, 0.239E+3, 0.185E+3, 0.28903000E+1, 0.99540000E+0, 0.60578760E+3, 0.239E+3, + 0.187E+3, 0.28903000E+1, 0.97050000E+0, 0.11481563E+4, 0.239E+3, 0.188E+3, 0.28903000E+1, + 0.96620000E+0, 0.63919770E+3, 0.239E+3, 0.189E+3, 0.28903000E+1, 0.29070000E+1, 0.73861040E+3, + 0.239E+3, 0.190E+3, 0.28903000E+1, 0.28844000E+1, 0.65977710E+3, 0.239E+3, 0.191E+3, + 0.28903000E+1, 0.28738000E+1, 0.58247220E+3, 0.239E+3, 0.192E+3, 0.28903000E+1, 0.28878000E+1, + 0.56032370E+3, 0.239E+3, 0.193E+3, 0.28903000E+1, 0.29095000E+1, 0.67595320E+3, 0.239E+3, + 0.194E+3, 0.28903000E+1, 0.19209000E+1, 0.15742770E+3, 0.239E+3, 0.204E+3, 0.28903000E+1, + 0.19697000E+1, 0.15452800E+3, 0.239E+3, 0.205E+3, 0.28903000E+1, 0.19441000E+1, 0.11266800E+3, + 0.239E+3, 0.206E+3, 0.28903000E+1, 0.19985000E+1, 0.89962600E+2, 0.239E+3, 0.207E+3, + 0.28903000E+1, 0.20143000E+1, 0.61279600E+2, 0.239E+3, 0.208E+3, 0.28903000E+1, 0.19887000E+1, + 0.27968340E+3, 0.239E+3, 0.212E+3, 0.28903000E+1, 0.19496000E+1, 0.33801530E+3, 0.239E+3, + 0.213E+3, 0.28903000E+1, 0.19311000E+1, 0.32383050E+3, 0.239E+3, 0.214E+3, 0.28903000E+1, + 0.19435000E+1, 0.28074710E+3, 0.239E+3, 0.215E+3, 0.28903000E+1, 0.20102000E+1, 0.23527170E+3, + 0.239E+3, 0.216E+3, 0.28903000E+1, 0.19903000E+1, 0.39183600E+3, 0.239E+3, 0.220E+3, + 0.28903000E+1, 0.19349000E+1, 0.37616230E+3, 0.239E+3, 0.221E+3, 0.28903000E+1, 0.28999000E+1, + 0.38074190E+3, 0.239E+3, 0.222E+3, 0.28903000E+1, 0.38675000E+1, 0.34837280E+3, 0.239E+3, + 0.223E+3, 0.28903000E+1, 0.29110000E+1, 0.26170420E+3, 0.239E+3, 0.224E+3, 0.28903000E+1, + 0.10619100E+2, 0.22356370E+3, 0.239E+3, 0.225E+3, 0.28903000E+1, 0.98849000E+1, 0.21947140E+3, + 0.239E+3, 0.226E+3, 0.28903000E+1, 0.91376000E+1, 0.25791900E+3, 0.239E+3, 0.227E+3, + 0.28903000E+1, 0.29263000E+1, 0.24013260E+3, 0.239E+3, 0.228E+3, 0.28903000E+1, 0.65458000E+1, + 0.34065350E+3, 0.239E+3, 0.231E+3, 0.28903000E+1, 0.19315000E+1, 0.35942740E+3, 0.239E+3, + 0.232E+3, 0.28903000E+1, 0.19447000E+1, 0.32894310E+3, 0.239E+3, 0.233E+3, 0.28903000E+1, + 0.19793000E+1, 0.30565080E+3, 0.239E+3, 0.234E+3, 0.28903000E+1, 0.19812000E+1, 0.46926390E+3, + 0.239E+3, 0.238E+3, 0.28903000E+1, 0.19143000E+1, 0.45108450E+3, 0.239E+3, 0.239E+3, + 0.28903000E+1, 0.28903000E+1, 0.36540500E+2, 0.240E+3, 0.100E+1, 0.39106000E+1, 0.91180000E+0, + 0.24088300E+2, 0.240E+3, 0.200E+1, 0.39106000E+1, 0.00000000E+0, 0.56215830E+3, 0.240E+3, + 0.300E+1, 0.39106000E+1, 0.00000000E+0, 0.32721920E+3, 0.240E+3, 0.400E+1, 0.39106000E+1, + 0.00000000E+0, 0.22083610E+3, 0.240E+3, 0.500E+1, 0.39106000E+1, 0.00000000E+0, 0.14926580E+3, + 0.240E+3, 0.600E+1, 0.39106000E+1, 0.00000000E+0, 0.10433800E+3, 0.240E+3, 0.700E+1, + 0.39106000E+1, 0.00000000E+0, 0.78933900E+2, 0.240E+3, 0.800E+1, 0.39106000E+1, 0.00000000E+0, + 0.59729900E+2, 0.240E+3, 0.900E+1, 0.39106000E+1, 0.00000000E+0, 0.45882400E+2, 0.240E+3, + 0.100E+2, 0.39106000E+1, 0.00000000E+0, 0.67243030E+3, 0.240E+3, 0.110E+2, 0.39106000E+1, + 0.00000000E+0, 0.52068680E+3, 0.240E+3, 0.120E+2, 0.39106000E+1, 0.00000000E+0, 0.48073130E+3, + 0.240E+3, 0.130E+2, 0.39106000E+1, 0.00000000E+0, 0.37942120E+3, 0.240E+3, 0.140E+2, + 0.39106000E+1, 0.00000000E+0, 0.29608060E+3, 0.240E+3, 0.150E+2, 0.39106000E+1, 0.00000000E+0, + 0.24572860E+3, 0.240E+3, 0.160E+2, 0.39106000E+1, 0.00000000E+0, 0.20066650E+3, 0.240E+3, + 0.170E+2, 0.39106000E+1, 0.00000000E+0, 0.16407610E+3, 0.240E+3, 0.180E+2, 0.39106000E+1, + 0.00000000E+0, 0.10998393E+4, 0.240E+3, 0.190E+2, 0.39106000E+1, 0.00000000E+0, 0.91252050E+3, + 0.240E+3, 0.200E+2, 0.39106000E+1, 0.00000000E+0, 0.75461820E+3, 0.240E+3, 0.210E+2, + 0.39106000E+1, 0.00000000E+0, 0.72916220E+3, 0.240E+3, 0.220E+2, 0.39106000E+1, 0.00000000E+0, + 0.66796950E+3, 0.240E+3, 0.230E+2, 0.39106000E+1, 0.00000000E+0, 0.52595350E+3, 0.240E+3, + 0.240E+2, 0.39106000E+1, 0.00000000E+0, 0.57539200E+3, 0.240E+3, 0.250E+2, 0.39106000E+1, + 0.00000000E+0, 0.45141300E+3, 0.240E+3, 0.260E+2, 0.39106000E+1, 0.00000000E+0, 0.47910890E+3, + 0.240E+3, 0.270E+2, 0.39106000E+1, 0.00000000E+0, 0.49336920E+3, 0.240E+3, 0.280E+2, + 0.39106000E+1, 0.00000000E+0, 0.37799640E+3, 0.240E+3, 0.290E+2, 0.39106000E+1, 0.00000000E+0, + 0.38872950E+3, 0.240E+3, 0.300E+2, 0.39106000E+1, 0.00000000E+0, 0.46049590E+3, 0.240E+3, + 0.310E+2, 0.39106000E+1, 0.00000000E+0, 0.40661960E+3, 0.240E+3, 0.320E+2, 0.39106000E+1, + 0.00000000E+0, 0.34703710E+3, 0.240E+3, 0.330E+2, 0.39106000E+1, 0.00000000E+0, 0.31142450E+3, + 0.240E+3, 0.340E+2, 0.39106000E+1, 0.00000000E+0, 0.27249100E+3, 0.240E+3, 0.350E+2, + 0.39106000E+1, 0.00000000E+0, 0.23688550E+3, 0.240E+3, 0.360E+2, 0.39106000E+1, 0.00000000E+0, + 0.12329252E+4, 0.240E+3, 0.370E+2, 0.39106000E+1, 0.00000000E+0, 0.10868394E+4, 0.240E+3, + 0.380E+2, 0.39106000E+1, 0.00000000E+0, 0.95348210E+3, 0.240E+3, 0.390E+2, 0.39106000E+1, + 0.00000000E+0, 0.85760110E+3, 0.240E+3, 0.400E+2, 0.39106000E+1, 0.00000000E+0, 0.78230880E+3, + 0.240E+3, 0.410E+2, 0.39106000E+1, 0.00000000E+0, 0.60414750E+3, 0.240E+3, 0.420E+2, + 0.39106000E+1, 0.00000000E+0, 0.67400680E+3, 0.240E+3, 0.430E+2, 0.39106000E+1, 0.00000000E+0, + 0.51361970E+3, 0.240E+3, 0.440E+2, 0.39106000E+1, 0.00000000E+0, 0.56161690E+3, 0.240E+3, + 0.450E+2, 0.39106000E+1, 0.00000000E+0, 0.52087810E+3, 0.240E+3, 0.460E+2, 0.39106000E+1, + 0.00000000E+0, 0.43392780E+3, 0.240E+3, 0.470E+2, 0.39106000E+1, 0.00000000E+0, 0.45901640E+3, + 0.240E+3, 0.480E+2, 0.39106000E+1, 0.00000000E+0, 0.57580200E+3, 0.240E+3, 0.490E+2, + 0.39106000E+1, 0.00000000E+0, 0.53307320E+3, 0.240E+3, 0.500E+2, 0.39106000E+1, 0.00000000E+0, + 0.47538210E+3, 0.240E+3, 0.510E+2, 0.39106000E+1, 0.00000000E+0, 0.44115130E+3, 0.240E+3, + 0.520E+2, 0.39106000E+1, 0.00000000E+0, 0.39888950E+3, 0.240E+3, 0.530E+2, 0.39106000E+1, + 0.00000000E+0, 0.35856750E+3, 0.240E+3, 0.540E+2, 0.39106000E+1, 0.00000000E+0, 0.15020119E+4, + 0.240E+3, 0.550E+2, 0.39106000E+1, 0.00000000E+0, 0.13846011E+4, 0.240E+3, 0.560E+2, + 0.39106000E+1, 0.00000000E+0, 0.12183604E+4, 0.240E+3, 0.570E+2, 0.39106000E+1, 0.00000000E+0, + 0.56144680E+3, 0.240E+3, 0.580E+2, 0.39106000E+1, 0.27991000E+1, 0.12271618E+4, 0.240E+3, + 0.590E+2, 0.39106000E+1, 0.00000000E+0, 0.11787222E+4, 0.240E+3, 0.600E+2, 0.39106000E+1, + 0.00000000E+0, 0.11492501E+4, 0.240E+3, 0.610E+2, 0.39106000E+1, 0.00000000E+0, 0.11221393E+4, + 0.240E+3, 0.620E+2, 0.39106000E+1, 0.00000000E+0, 0.10981031E+4, 0.240E+3, 0.630E+2, + 0.39106000E+1, 0.00000000E+0, 0.86458960E+3, 0.240E+3, 0.640E+2, 0.39106000E+1, 0.00000000E+0, + 0.97085510E+3, 0.240E+3, 0.650E+2, 0.39106000E+1, 0.00000000E+0, 0.93659920E+3, 0.240E+3, + 0.660E+2, 0.39106000E+1, 0.00000000E+0, 0.99084400E+3, 0.240E+3, 0.670E+2, 0.39106000E+1, + 0.00000000E+0, 0.96987250E+3, 0.240E+3, 0.680E+2, 0.39106000E+1, 0.00000000E+0, 0.95097990E+3, + 0.240E+3, 0.690E+2, 0.39106000E+1, 0.00000000E+0, 0.93981690E+3, 0.240E+3, 0.700E+2, + 0.39106000E+1, 0.00000000E+0, 0.79250890E+3, 0.240E+3, 0.710E+2, 0.39106000E+1, 0.00000000E+0, + 0.78062700E+3, 0.240E+3, 0.720E+2, 0.39106000E+1, 0.00000000E+0, 0.71279020E+3, 0.240E+3, + 0.730E+2, 0.39106000E+1, 0.00000000E+0, 0.60188010E+3, 0.240E+3, 0.740E+2, 0.39106000E+1, + 0.00000000E+0, 0.61249070E+3, 0.240E+3, 0.750E+2, 0.39106000E+1, 0.00000000E+0, 0.55526090E+3, + 0.240E+3, 0.760E+2, 0.39106000E+1, 0.00000000E+0, 0.50858990E+3, 0.240E+3, 0.770E+2, + 0.39106000E+1, 0.00000000E+0, 0.42235350E+3, 0.240E+3, 0.780E+2, 0.39106000E+1, 0.00000000E+0, + 0.39454210E+3, 0.240E+3, 0.790E+2, 0.39106000E+1, 0.00000000E+0, 0.40600450E+3, 0.240E+3, + 0.800E+2, 0.39106000E+1, 0.00000000E+0, 0.59097830E+3, 0.240E+3, 0.810E+2, 0.39106000E+1, + 0.00000000E+0, 0.57841880E+3, 0.240E+3, 0.820E+2, 0.39106000E+1, 0.00000000E+0, 0.53186650E+3, + 0.240E+3, 0.830E+2, 0.39106000E+1, 0.00000000E+0, 0.50739330E+3, 0.240E+3, 0.840E+2, + 0.39106000E+1, 0.00000000E+0, 0.46832900E+3, 0.240E+3, 0.850E+2, 0.39106000E+1, 0.00000000E+0, + 0.42922150E+3, 0.240E+3, 0.860E+2, 0.39106000E+1, 0.00000000E+0, 0.14201434E+4, 0.240E+3, + 0.870E+2, 0.39106000E+1, 0.00000000E+0, 0.13701849E+4, 0.240E+3, 0.880E+2, 0.39106000E+1, + 0.00000000E+0, 0.12127510E+4, 0.240E+3, 0.890E+2, 0.39106000E+1, 0.00000000E+0, 0.10910589E+4, + 0.240E+3, 0.900E+2, 0.39106000E+1, 0.00000000E+0, 0.10823309E+4, 0.240E+3, 0.910E+2, + 0.39106000E+1, 0.00000000E+0, 0.10479820E+4, 0.240E+3, 0.920E+2, 0.39106000E+1, 0.00000000E+0, + 0.10780658E+4, 0.240E+3, 0.930E+2, 0.39106000E+1, 0.00000000E+0, 0.10441684E+4, 0.240E+3, + 0.940E+2, 0.39106000E+1, 0.00000000E+0, 0.58862500E+2, 0.240E+3, 0.101E+3, 0.39106000E+1, + 0.00000000E+0, 0.19022830E+3, 0.240E+3, 0.103E+3, 0.39106000E+1, 0.98650000E+0, 0.24272640E+3, + 0.240E+3, 0.104E+3, 0.39106000E+1, 0.98080000E+0, 0.18577620E+3, 0.240E+3, 0.105E+3, + 0.39106000E+1, 0.97060000E+0, 0.13998770E+3, 0.240E+3, 0.106E+3, 0.39106000E+1, 0.98680000E+0, + 0.97288100E+2, 0.240E+3, 0.107E+3, 0.39106000E+1, 0.99440000E+0, 0.70786500E+2, 0.240E+3, + 0.108E+3, 0.39106000E+1, 0.99250000E+0, 0.48576900E+2, 0.240E+3, 0.109E+3, 0.39106000E+1, + 0.99820000E+0, 0.27779360E+3, 0.240E+3, 0.111E+3, 0.39106000E+1, 0.96840000E+0, 0.42964620E+3, + 0.240E+3, 0.112E+3, 0.39106000E+1, 0.96280000E+0, 0.43578140E+3, 0.240E+3, 0.113E+3, + 0.39106000E+1, 0.96480000E+0, 0.35070760E+3, 0.240E+3, 0.114E+3, 0.39106000E+1, 0.95070000E+0, + 0.28738300E+3, 0.240E+3, 0.115E+3, 0.39106000E+1, 0.99470000E+0, 0.24300890E+3, 0.240E+3, + 0.116E+3, 0.39106000E+1, 0.99480000E+0, 0.19857750E+3, 0.240E+3, 0.117E+3, 0.39106000E+1, + 0.99720000E+0, 0.38302240E+3, 0.240E+3, 0.119E+3, 0.39106000E+1, 0.97670000E+0, 0.72962110E+3, + 0.240E+3, 0.120E+3, 0.39106000E+1, 0.98310000E+0, 0.38386450E+3, 0.240E+3, 0.121E+3, + 0.39106000E+1, 0.18627000E+1, 0.37051580E+3, 0.240E+3, 0.122E+3, 0.39106000E+1, 0.18299000E+1, + 0.36307110E+3, 0.240E+3, 0.123E+3, 0.39106000E+1, 0.19138000E+1, 0.35962670E+3, 0.240E+3, + 0.124E+3, 0.39106000E+1, 0.18269000E+1, 0.33118730E+3, 0.240E+3, 0.125E+3, 0.39106000E+1, + 0.16406000E+1, 0.30651240E+3, 0.240E+3, 0.126E+3, 0.39106000E+1, 0.16483000E+1, 0.29235140E+3, + 0.240E+3, 0.127E+3, 0.39106000E+1, 0.17149000E+1, 0.28578230E+3, 0.240E+3, 0.128E+3, + 0.39106000E+1, 0.17937000E+1, 0.28217240E+3, 0.240E+3, 0.129E+3, 0.39106000E+1, 0.95760000E+0, + 0.26504020E+3, 0.240E+3, 0.130E+3, 0.39106000E+1, 0.19419000E+1, 0.43263090E+3, 0.240E+3, + 0.131E+3, 0.39106000E+1, 0.96010000E+0, 0.38045750E+3, 0.240E+3, 0.132E+3, 0.39106000E+1, + 0.94340000E+0, 0.34114820E+3, 0.240E+3, 0.133E+3, 0.39106000E+1, 0.98890000E+0, 0.31153680E+3, + 0.240E+3, 0.134E+3, 0.39106000E+1, 0.99010000E+0, 0.27438370E+3, 0.240E+3, 0.135E+3, + 0.39106000E+1, 0.99740000E+0, 0.45707170E+3, 0.240E+3, 0.137E+3, 0.39106000E+1, 0.97380000E+0, + 0.88748100E+3, 0.240E+3, 0.138E+3, 0.39106000E+1, 0.98010000E+0, 0.68026830E+3, 0.240E+3, + 0.139E+3, 0.39106000E+1, 0.19153000E+1, 0.50752160E+3, 0.240E+3, 0.140E+3, 0.39106000E+1, + 0.19355000E+1, 0.51249950E+3, 0.240E+3, 0.141E+3, 0.39106000E+1, 0.19545000E+1, 0.47788700E+3, + 0.240E+3, 0.142E+3, 0.39106000E+1, 0.19420000E+1, 0.53531530E+3, 0.240E+3, 0.143E+3, + 0.39106000E+1, 0.16682000E+1, 0.41671520E+3, 0.240E+3, 0.144E+3, 0.39106000E+1, 0.18584000E+1, + 0.38976730E+3, 0.240E+3, 0.145E+3, 0.39106000E+1, 0.19003000E+1, 0.36187710E+3, 0.240E+3, + 0.146E+3, 0.39106000E+1, 0.18630000E+1, 0.34999750E+3, 0.240E+3, 0.147E+3, 0.39106000E+1, + 0.96790000E+0, 0.34647920E+3, 0.240E+3, 0.148E+3, 0.39106000E+1, 0.19539000E+1, 0.54905720E+3, + 0.240E+3, 0.149E+3, 0.39106000E+1, 0.96330000E+0, 0.49724240E+3, 0.240E+3, 0.150E+3, + 0.39106000E+1, 0.95140000E+0, 0.46592890E+3, 0.240E+3, 0.151E+3, 0.39106000E+1, 0.97490000E+0, + 0.44083920E+3, 0.240E+3, 0.152E+3, 0.39106000E+1, 0.98110000E+0, 0.40264130E+3, 0.240E+3, + 0.153E+3, 0.39106000E+1, 0.99680000E+0, 0.54112590E+3, 0.240E+3, 0.155E+3, 0.39106000E+1, + 0.99090000E+0, 0.11497163E+4, 0.240E+3, 0.156E+3, 0.39106000E+1, 0.97970000E+0, 0.86075030E+3, + 0.240E+3, 0.157E+3, 0.39106000E+1, 0.19373000E+1, 0.54452030E+3, 0.240E+3, 0.159E+3, + 0.39106000E+1, 0.29425000E+1, 0.53325740E+3, 0.240E+3, 0.160E+3, 0.39106000E+1, 0.29455000E+1, + 0.51635730E+3, 0.240E+3, 0.161E+3, 0.39106000E+1, 0.29413000E+1, 0.51883450E+3, 0.240E+3, + 0.162E+3, 0.39106000E+1, 0.29300000E+1, 0.49986370E+3, 0.240E+3, 0.163E+3, 0.39106000E+1, + 0.18286000E+1, 0.52215120E+3, 0.240E+3, 0.164E+3, 0.39106000E+1, 0.28732000E+1, 0.49043320E+3, + 0.240E+3, 0.165E+3, 0.39106000E+1, 0.29086000E+1, 0.49890510E+3, 0.240E+3, 0.166E+3, + 0.39106000E+1, 0.28965000E+1, 0.46555960E+3, 0.240E+3, 0.167E+3, 0.39106000E+1, 0.29242000E+1, + 0.45230680E+3, 0.240E+3, 0.168E+3, 0.39106000E+1, 0.29282000E+1, 0.44940350E+3, 0.240E+3, + 0.169E+3, 0.39106000E+1, 0.29246000E+1, 0.47239670E+3, 0.240E+3, 0.170E+3, 0.39106000E+1, + 0.28482000E+1, 0.43441480E+3, 0.240E+3, 0.171E+3, 0.39106000E+1, 0.29219000E+1, 0.58778890E+3, + 0.240E+3, 0.172E+3, 0.39106000E+1, 0.19254000E+1, 0.54572750E+3, 0.240E+3, 0.173E+3, + 0.39106000E+1, 0.19459000E+1, 0.49809170E+3, 0.240E+3, 0.174E+3, 0.39106000E+1, 0.19292000E+1, + 0.50376490E+3, 0.240E+3, 0.175E+3, 0.39106000E+1, 0.18104000E+1, 0.44135260E+3, 0.240E+3, + 0.176E+3, 0.39106000E+1, 0.18858000E+1, 0.41515170E+3, 0.240E+3, 0.177E+3, 0.39106000E+1, + 0.18648000E+1, 0.39646860E+3, 0.240E+3, 0.178E+3, 0.39106000E+1, 0.19188000E+1, 0.37893340E+3, + 0.240E+3, 0.179E+3, 0.39106000E+1, 0.98460000E+0, 0.36628550E+3, 0.240E+3, 0.180E+3, + 0.39106000E+1, 0.19896000E+1, 0.58938990E+3, 0.240E+3, 0.181E+3, 0.39106000E+1, 0.92670000E+0, + 0.53773400E+3, 0.240E+3, 0.182E+3, 0.39106000E+1, 0.93830000E+0, 0.52173760E+3, 0.240E+3, + 0.183E+3, 0.39106000E+1, 0.98200000E+0, 0.50754760E+3, 0.240E+3, 0.184E+3, 0.39106000E+1, + 0.98150000E+0, 0.47401940E+3, 0.240E+3, 0.185E+3, 0.39106000E+1, 0.99540000E+0, 0.60950110E+3, + 0.240E+3, 0.187E+3, 0.39106000E+1, 0.97050000E+0, 0.11447357E+4, 0.240E+3, 0.188E+3, + 0.39106000E+1, 0.96620000E+0, 0.64438060E+3, 0.240E+3, 0.189E+3, 0.39106000E+1, 0.29070000E+1, + 0.74302780E+3, 0.240E+3, 0.190E+3, 0.39106000E+1, 0.28844000E+1, 0.66426180E+3, 0.240E+3, + 0.191E+3, 0.39106000E+1, 0.28738000E+1, 0.58740530E+3, 0.240E+3, 0.192E+3, 0.39106000E+1, + 0.28878000E+1, 0.56528300E+3, 0.240E+3, 0.193E+3, 0.39106000E+1, 0.29095000E+1, 0.67885160E+3, + 0.240E+3, 0.194E+3, 0.39106000E+1, 0.19209000E+1, 0.15874420E+3, 0.240E+3, 0.204E+3, + 0.39106000E+1, 0.19697000E+1, 0.15597060E+3, 0.240E+3, 0.205E+3, 0.39106000E+1, 0.19441000E+1, + 0.11413350E+3, 0.240E+3, 0.206E+3, 0.39106000E+1, 0.19985000E+1, 0.91307200E+2, 0.240E+3, + 0.207E+3, 0.39106000E+1, 0.20143000E+1, 0.62389300E+2, 0.240E+3, 0.208E+3, 0.39106000E+1, + 0.19887000E+1, 0.28129500E+3, 0.240E+3, 0.212E+3, 0.39106000E+1, 0.19496000E+1, 0.33986220E+3, + 0.240E+3, 0.213E+3, 0.39106000E+1, 0.19311000E+1, 0.32624310E+3, 0.240E+3, 0.214E+3, + 0.39106000E+1, 0.19435000E+1, 0.28345370E+3, 0.240E+3, 0.215E+3, 0.39106000E+1, 0.20102000E+1, + 0.23808430E+3, 0.240E+3, 0.216E+3, 0.39106000E+1, 0.19903000E+1, 0.39411100E+3, 0.240E+3, + 0.220E+3, 0.39106000E+1, 0.19349000E+1, 0.37893950E+3, 0.240E+3, 0.221E+3, 0.39106000E+1, + 0.28999000E+1, 0.38359990E+3, 0.240E+3, 0.222E+3, 0.39106000E+1, 0.38675000E+1, 0.35096590E+3, + 0.240E+3, 0.223E+3, 0.39106000E+1, 0.29110000E+1, 0.26433470E+3, 0.240E+3, 0.224E+3, + 0.39106000E+1, 0.10619100E+2, 0.22616840E+3, 0.240E+3, 0.225E+3, 0.39106000E+1, 0.98849000E+1, + 0.22198580E+3, 0.240E+3, 0.226E+3, 0.39106000E+1, 0.91376000E+1, 0.26021080E+3, 0.240E+3, + 0.227E+3, 0.39106000E+1, 0.29263000E+1, 0.24244220E+3, 0.240E+3, 0.228E+3, 0.39106000E+1, + 0.65458000E+1, 0.34305200E+3, 0.240E+3, 0.231E+3, 0.39106000E+1, 0.19315000E+1, 0.36224070E+3, + 0.240E+3, 0.232E+3, 0.39106000E+1, 0.19447000E+1, 0.33219680E+3, 0.240E+3, 0.233E+3, + 0.39106000E+1, 0.19793000E+1, 0.30908380E+3, 0.240E+3, 0.234E+3, 0.39106000E+1, 0.19812000E+1, + 0.47210810E+3, 0.240E+3, 0.238E+3, 0.39106000E+1, 0.19143000E+1, 0.45473560E+3, 0.240E+3, + 0.239E+3, 0.39106000E+1, 0.28903000E+1, 0.45868960E+3, 0.240E+3, 0.240E+3, 0.39106000E+1, + 0.39106000E+1, 0.35315200E+2, 0.241E+3, 0.100E+1, 0.29225000E+1, 0.91180000E+0, 0.23359200E+2, + 0.241E+3, 0.200E+1, 0.29225000E+1, 0.00000000E+0, 0.54961140E+3, 0.241E+3, 0.300E+1, + 0.29225000E+1, 0.00000000E+0, 0.31671620E+3, 0.241E+3, 0.400E+1, 0.29225000E+1, 0.00000000E+0, + 0.21337350E+3, 0.241E+3, 0.500E+1, 0.29225000E+1, 0.00000000E+0, 0.14425580E+3, 0.241E+3, + 0.600E+1, 0.29225000E+1, 0.00000000E+0, 0.10094600E+3, 0.241E+3, 0.700E+1, 0.29225000E+1, + 0.00000000E+0, 0.76465800E+2, 0.241E+3, 0.800E+1, 0.29225000E+1, 0.00000000E+0, 0.57946700E+2, + 0.241E+3, 0.900E+1, 0.29225000E+1, 0.00000000E+0, 0.44577600E+2, 0.241E+3, 0.100E+2, + 0.29225000E+1, 0.00000000E+0, 0.65711510E+3, 0.241E+3, 0.110E+2, 0.29225000E+1, 0.00000000E+0, + 0.50467530E+3, 0.241E+3, 0.120E+2, 0.29225000E+1, 0.00000000E+0, 0.46522590E+3, 0.241E+3, + 0.130E+2, 0.29225000E+1, 0.00000000E+0, 0.36661690E+3, 0.241E+3, 0.140E+2, 0.29225000E+1, + 0.00000000E+0, 0.28599260E+3, 0.241E+3, 0.150E+2, 0.29225000E+1, 0.00000000E+0, 0.23744480E+3, + 0.241E+3, 0.160E+2, 0.29225000E+1, 0.00000000E+0, 0.19403010E+3, 0.241E+3, 0.170E+2, + 0.29225000E+1, 0.00000000E+0, 0.15879150E+3, 0.241E+3, 0.180E+2, 0.29225000E+1, 0.00000000E+0, + 0.10788336E+4, 0.241E+3, 0.190E+2, 0.29225000E+1, 0.00000000E+0, 0.88761670E+3, 0.241E+3, + 0.200E+2, 0.29225000E+1, 0.00000000E+0, 0.73301140E+3, 0.241E+3, 0.210E+2, 0.29225000E+1, + 0.00000000E+0, 0.70781110E+3, 0.241E+3, 0.220E+2, 0.29225000E+1, 0.00000000E+0, 0.64811200E+3, + 0.241E+3, 0.230E+2, 0.29225000E+1, 0.00000000E+0, 0.51073850E+3, 0.241E+3, 0.240E+2, + 0.29225000E+1, 0.00000000E+0, 0.55795140E+3, 0.241E+3, 0.250E+2, 0.29225000E+1, 0.00000000E+0, + 0.43806030E+3, 0.241E+3, 0.260E+2, 0.29225000E+1, 0.00000000E+0, 0.46406680E+3, 0.241E+3, + 0.270E+2, 0.29225000E+1, 0.00000000E+0, 0.47803720E+3, 0.241E+3, 0.280E+2, 0.29225000E+1, + 0.00000000E+0, 0.36666480E+3, 0.241E+3, 0.290E+2, 0.29225000E+1, 0.00000000E+0, 0.37623990E+3, + 0.241E+3, 0.300E+2, 0.29225000E+1, 0.00000000E+0, 0.44572790E+3, 0.241E+3, 0.310E+2, + 0.29225000E+1, 0.00000000E+0, 0.39303660E+3, 0.241E+3, 0.320E+2, 0.29225000E+1, 0.00000000E+0, + 0.33529210E+3, 0.241E+3, 0.330E+2, 0.29225000E+1, 0.00000000E+0, 0.30092580E+3, 0.241E+3, + 0.340E+2, 0.29225000E+1, 0.00000000E+0, 0.26340340E+3, 0.241E+3, 0.350E+2, 0.29225000E+1, + 0.00000000E+0, 0.22911910E+3, 0.241E+3, 0.360E+2, 0.29225000E+1, 0.00000000E+0, 0.12092081E+4, + 0.241E+3, 0.370E+2, 0.29225000E+1, 0.00000000E+0, 0.10578748E+4, 0.241E+3, 0.380E+2, + 0.29225000E+1, 0.00000000E+0, 0.92614390E+3, 0.241E+3, 0.390E+2, 0.29225000E+1, 0.00000000E+0, + 0.83217430E+3, 0.241E+3, 0.400E+2, 0.29225000E+1, 0.00000000E+0, 0.75877890E+3, 0.241E+3, + 0.410E+2, 0.29225000E+1, 0.00000000E+0, 0.58581260E+3, 0.241E+3, 0.420E+2, 0.29225000E+1, + 0.00000000E+0, 0.65360280E+3, 0.241E+3, 0.430E+2, 0.29225000E+1, 0.00000000E+0, 0.49792860E+3, + 0.241E+3, 0.440E+2, 0.29225000E+1, 0.00000000E+0, 0.54408210E+3, 0.241E+3, 0.450E+2, + 0.29225000E+1, 0.00000000E+0, 0.50450370E+3, 0.241E+3, 0.460E+2, 0.29225000E+1, 0.00000000E+0, + 0.42085520E+3, 0.241E+3, 0.470E+2, 0.29225000E+1, 0.00000000E+0, 0.44449320E+3, 0.241E+3, + 0.480E+2, 0.29225000E+1, 0.00000000E+0, 0.55793400E+3, 0.241E+3, 0.490E+2, 0.29225000E+1, + 0.00000000E+0, 0.51573740E+3, 0.241E+3, 0.500E+2, 0.29225000E+1, 0.00000000E+0, 0.45957500E+3, + 0.241E+3, 0.510E+2, 0.29225000E+1, 0.00000000E+0, 0.42642020E+3, 0.241E+3, 0.520E+2, + 0.29225000E+1, 0.00000000E+0, 0.38559230E+3, 0.241E+3, 0.530E+2, 0.29225000E+1, 0.00000000E+0, + 0.34670630E+3, 0.241E+3, 0.540E+2, 0.29225000E+1, 0.00000000E+0, 0.14737970E+4, 0.241E+3, + 0.550E+2, 0.29225000E+1, 0.00000000E+0, 0.13493970E+4, 0.241E+3, 0.560E+2, 0.29225000E+1, + 0.00000000E+0, 0.11846610E+4, 0.241E+3, 0.570E+2, 0.29225000E+1, 0.00000000E+0, 0.54305060E+3, + 0.241E+3, 0.580E+2, 0.29225000E+1, 0.27991000E+1, 0.11952654E+4, 0.241E+3, 0.590E+2, + 0.29225000E+1, 0.00000000E+0, 0.11474757E+4, 0.241E+3, 0.600E+2, 0.29225000E+1, 0.00000000E+0, + 0.11186278E+4, 0.241E+3, 0.610E+2, 0.29225000E+1, 0.00000000E+0, 0.10921025E+4, 0.241E+3, + 0.620E+2, 0.29225000E+1, 0.00000000E+0, 0.10685805E+4, 0.241E+3, 0.630E+2, 0.29225000E+1, + 0.00000000E+0, 0.84000980E+3, 0.241E+3, 0.640E+2, 0.29225000E+1, 0.00000000E+0, 0.94732140E+3, + 0.241E+3, 0.650E+2, 0.29225000E+1, 0.00000000E+0, 0.91363480E+3, 0.241E+3, 0.660E+2, + 0.29225000E+1, 0.00000000E+0, 0.96355250E+3, 0.241E+3, 0.670E+2, 0.29225000E+1, 0.00000000E+0, + 0.94306260E+3, 0.241E+3, 0.680E+2, 0.29225000E+1, 0.00000000E+0, 0.92458410E+3, 0.241E+3, + 0.690E+2, 0.29225000E+1, 0.00000000E+0, 0.91377400E+3, 0.241E+3, 0.700E+2, 0.29225000E+1, + 0.00000000E+0, 0.76978010E+3, 0.241E+3, 0.710E+2, 0.29225000E+1, 0.00000000E+0, 0.75663130E+3, + 0.241E+3, 0.720E+2, 0.29225000E+1, 0.00000000E+0, 0.69039390E+3, 0.241E+3, 0.730E+2, + 0.29225000E+1, 0.00000000E+0, 0.58308880E+3, 0.241E+3, 0.740E+2, 0.29225000E+1, 0.00000000E+0, + 0.59308720E+3, 0.241E+3, 0.750E+2, 0.29225000E+1, 0.00000000E+0, 0.53746300E+3, 0.241E+3, + 0.760E+2, 0.29225000E+1, 0.00000000E+0, 0.49219170E+3, 0.241E+3, 0.770E+2, 0.29225000E+1, + 0.00000000E+0, 0.40891560E+3, 0.241E+3, 0.780E+2, 0.29225000E+1, 0.00000000E+0, 0.38205000E+3, + 0.241E+3, 0.790E+2, 0.29225000E+1, 0.00000000E+0, 0.39294050E+3, 0.241E+3, 0.800E+2, + 0.29225000E+1, 0.00000000E+0, 0.57302740E+3, 0.241E+3, 0.810E+2, 0.29225000E+1, 0.00000000E+0, + 0.55997550E+3, 0.241E+3, 0.820E+2, 0.29225000E+1, 0.00000000E+0, 0.51444520E+3, 0.241E+3, + 0.830E+2, 0.29225000E+1, 0.00000000E+0, 0.49063940E+3, 0.241E+3, 0.840E+2, 0.29225000E+1, + 0.00000000E+0, 0.45281960E+3, 0.241E+3, 0.850E+2, 0.29225000E+1, 0.00000000E+0, 0.41506050E+3, + 0.241E+3, 0.860E+2, 0.29225000E+1, 0.00000000E+0, 0.13904637E+4, 0.241E+3, 0.870E+2, + 0.29225000E+1, 0.00000000E+0, 0.13339556E+4, 0.241E+3, 0.880E+2, 0.29225000E+1, 0.00000000E+0, + 0.11782143E+4, 0.241E+3, 0.890E+2, 0.29225000E+1, 0.00000000E+0, 0.10582704E+4, 0.241E+3, + 0.900E+2, 0.29225000E+1, 0.00000000E+0, 0.10511231E+4, 0.241E+3, 0.910E+2, 0.29225000E+1, + 0.00000000E+0, 0.10177328E+4, 0.241E+3, 0.920E+2, 0.29225000E+1, 0.00000000E+0, 0.10481038E+4, + 0.241E+3, 0.930E+2, 0.29225000E+1, 0.00000000E+0, 0.10148828E+4, 0.241E+3, 0.940E+2, + 0.29225000E+1, 0.00000000E+0, 0.56846600E+2, 0.241E+3, 0.101E+3, 0.29225000E+1, 0.00000000E+0, + 0.18412220E+3, 0.241E+3, 0.103E+3, 0.29225000E+1, 0.98650000E+0, 0.23495680E+3, 0.241E+3, + 0.104E+3, 0.29225000E+1, 0.98080000E+0, 0.17952910E+3, 0.241E+3, 0.105E+3, 0.29225000E+1, + 0.97060000E+0, 0.13534930E+3, 0.241E+3, 0.106E+3, 0.29225000E+1, 0.98680000E+0, 0.94163100E+2, + 0.241E+3, 0.107E+3, 0.29225000E+1, 0.99440000E+0, 0.68608700E+2, 0.241E+3, 0.108E+3, + 0.29225000E+1, 0.99250000E+0, 0.47194100E+2, 0.241E+3, 0.109E+3, 0.29225000E+1, 0.99820000E+0, + 0.26917780E+3, 0.241E+3, 0.111E+3, 0.29225000E+1, 0.96840000E+0, 0.41641830E+3, 0.241E+3, + 0.112E+3, 0.29225000E+1, 0.96280000E+0, 0.42164610E+3, 0.241E+3, 0.113E+3, 0.29225000E+1, + 0.96480000E+0, 0.33887850E+3, 0.241E+3, 0.114E+3, 0.29225000E+1, 0.95070000E+0, 0.27761880E+3, + 0.241E+3, 0.115E+3, 0.29225000E+1, 0.99470000E+0, 0.23483210E+3, 0.241E+3, 0.116E+3, + 0.29225000E+1, 0.99480000E+0, 0.19201920E+3, 0.241E+3, 0.117E+3, 0.29225000E+1, 0.99720000E+0, + 0.37144330E+3, 0.241E+3, 0.119E+3, 0.29225000E+1, 0.97670000E+0, 0.71075730E+3, 0.241E+3, + 0.120E+3, 0.29225000E+1, 0.98310000E+0, 0.37132440E+3, 0.241E+3, 0.121E+3, 0.29225000E+1, + 0.18627000E+1, 0.35852320E+3, 0.241E+3, 0.122E+3, 0.29225000E+1, 0.18299000E+1, 0.35134710E+3, + 0.241E+3, 0.123E+3, 0.29225000E+1, 0.19138000E+1, 0.34810210E+3, 0.241E+3, 0.124E+3, + 0.29225000E+1, 0.18269000E+1, 0.32022560E+3, 0.241E+3, 0.125E+3, 0.29225000E+1, 0.16406000E+1, + 0.29637490E+3, 0.241E+3, 0.126E+3, 0.29225000E+1, 0.16483000E+1, 0.28273960E+3, 0.241E+3, + 0.127E+3, 0.29225000E+1, 0.17149000E+1, 0.27641130E+3, 0.241E+3, 0.128E+3, 0.29225000E+1, + 0.17937000E+1, 0.27310650E+3, 0.241E+3, 0.129E+3, 0.29225000E+1, 0.95760000E+0, 0.25621710E+3, + 0.241E+3, 0.130E+3, 0.29225000E+1, 0.19419000E+1, 0.41862090E+3, 0.241E+3, 0.131E+3, + 0.29225000E+1, 0.96010000E+0, 0.36771370E+3, 0.241E+3, 0.132E+3, 0.29225000E+1, 0.94340000E+0, + 0.32961390E+3, 0.241E+3, 0.133E+3, 0.29225000E+1, 0.98890000E+0, 0.30104260E+3, 0.241E+3, + 0.134E+3, 0.29225000E+1, 0.99010000E+0, 0.26523400E+3, 0.241E+3, 0.135E+3, 0.29225000E+1, + 0.99740000E+0, 0.44326820E+3, 0.241E+3, 0.137E+3, 0.29225000E+1, 0.97380000E+0, 0.86524620E+3, + 0.241E+3, 0.138E+3, 0.29225000E+1, 0.98010000E+0, 0.66073770E+3, 0.241E+3, 0.139E+3, + 0.29225000E+1, 0.19153000E+1, 0.49130810E+3, 0.241E+3, 0.140E+3, 0.29225000E+1, 0.19355000E+1, + 0.49611270E+3, 0.241E+3, 0.141E+3, 0.29225000E+1, 0.19545000E+1, 0.46265460E+3, 0.241E+3, + 0.142E+3, 0.29225000E+1, 0.19420000E+1, 0.51908450E+3, 0.241E+3, 0.143E+3, 0.29225000E+1, + 0.16682000E+1, 0.40320320E+3, 0.241E+3, 0.144E+3, 0.29225000E+1, 0.18584000E+1, 0.37722490E+3, + 0.241E+3, 0.145E+3, 0.29225000E+1, 0.19003000E+1, 0.35029100E+3, 0.241E+3, 0.146E+3, + 0.29225000E+1, 0.18630000E+1, 0.33883350E+3, 0.241E+3, 0.147E+3, 0.29225000E+1, 0.96790000E+0, + 0.33513120E+3, 0.241E+3, 0.148E+3, 0.29225000E+1, 0.19539000E+1, 0.53177200E+3, 0.241E+3, + 0.149E+3, 0.29225000E+1, 0.96330000E+0, 0.48095640E+3, 0.241E+3, 0.150E+3, 0.29225000E+1, + 0.95140000E+0, 0.45041590E+3, 0.241E+3, 0.151E+3, 0.29225000E+1, 0.97490000E+0, 0.42611180E+3, + 0.241E+3, 0.152E+3, 0.29225000E+1, 0.98110000E+0, 0.38921120E+3, 0.241E+3, 0.153E+3, + 0.29225000E+1, 0.99680000E+0, 0.52415620E+3, 0.241E+3, 0.155E+3, 0.29225000E+1, 0.99090000E+0, + 0.11227672E+4, 0.241E+3, 0.156E+3, 0.29225000E+1, 0.97970000E+0, 0.83655040E+3, 0.241E+3, + 0.157E+3, 0.29225000E+1, 0.19373000E+1, 0.52667590E+3, 0.241E+3, 0.159E+3, 0.29225000E+1, + 0.29425000E+1, 0.51577970E+3, 0.241E+3, 0.160E+3, 0.29225000E+1, 0.29455000E+1, 0.49943430E+3, + 0.241E+3, 0.161E+3, 0.29225000E+1, 0.29413000E+1, 0.50191700E+3, 0.241E+3, 0.162E+3, + 0.29225000E+1, 0.29300000E+1, 0.48385420E+3, 0.241E+3, 0.163E+3, 0.29225000E+1, 0.18286000E+1, + 0.50506200E+3, 0.241E+3, 0.164E+3, 0.29225000E+1, 0.28732000E+1, 0.47436130E+3, 0.241E+3, + 0.165E+3, 0.29225000E+1, 0.29086000E+1, 0.48273800E+3, 0.241E+3, 0.166E+3, 0.29225000E+1, + 0.28965000E+1, 0.45024130E+3, 0.241E+3, 0.167E+3, 0.29225000E+1, 0.29242000E+1, 0.43740790E+3, + 0.241E+3, 0.168E+3, 0.29225000E+1, 0.29282000E+1, 0.43460070E+3, 0.241E+3, 0.169E+3, + 0.29225000E+1, 0.29246000E+1, 0.45679920E+3, 0.241E+3, 0.170E+3, 0.29225000E+1, 0.28482000E+1, + 0.42006140E+3, 0.241E+3, 0.171E+3, 0.29225000E+1, 0.29219000E+1, 0.56959350E+3, 0.241E+3, + 0.172E+3, 0.29225000E+1, 0.19254000E+1, 0.52852650E+3, 0.241E+3, 0.173E+3, 0.29225000E+1, + 0.19459000E+1, 0.48214800E+3, 0.241E+3, 0.174E+3, 0.29225000E+1, 0.19292000E+1, 0.48793610E+3, + 0.241E+3, 0.175E+3, 0.29225000E+1, 0.18104000E+1, 0.42697730E+3, 0.241E+3, 0.176E+3, + 0.29225000E+1, 0.18858000E+1, 0.40168310E+3, 0.241E+3, 0.177E+3, 0.29225000E+1, 0.18648000E+1, + 0.38365960E+3, 0.241E+3, 0.178E+3, 0.29225000E+1, 0.19188000E+1, 0.36680700E+3, 0.241E+3, + 0.179E+3, 0.29225000E+1, 0.98460000E+0, 0.35437800E+3, 0.241E+3, 0.180E+3, 0.29225000E+1, + 0.19896000E+1, 0.57113440E+3, 0.241E+3, 0.181E+3, 0.29225000E+1, 0.92670000E+0, 0.52034420E+3, + 0.241E+3, 0.182E+3, 0.29225000E+1, 0.93830000E+0, 0.50456970E+3, 0.241E+3, 0.183E+3, + 0.29225000E+1, 0.98200000E+0, 0.49075210E+3, 0.241E+3, 0.184E+3, 0.29225000E+1, 0.98150000E+0, + 0.45830100E+3, 0.241E+3, 0.185E+3, 0.29225000E+1, 0.99540000E+0, 0.59030800E+3, 0.241E+3, + 0.187E+3, 0.29225000E+1, 0.97050000E+0, 0.11160377E+4, 0.241E+3, 0.188E+3, 0.29225000E+1, + 0.96620000E+0, 0.62320270E+3, 0.241E+3, 0.189E+3, 0.29225000E+1, 0.29070000E+1, 0.71978040E+3, + 0.241E+3, 0.190E+3, 0.29225000E+1, 0.28844000E+1, 0.64370980E+3, 0.241E+3, 0.191E+3, + 0.29225000E+1, 0.28738000E+1, 0.56841140E+3, 0.241E+3, 0.192E+3, 0.29225000E+1, 0.28878000E+1, + 0.54692870E+3, 0.241E+3, 0.193E+3, 0.29225000E+1, 0.29095000E+1, 0.65859550E+3, 0.241E+3, + 0.194E+3, 0.29225000E+1, 0.19209000E+1, 0.15329480E+3, 0.241E+3, 0.204E+3, 0.29225000E+1, + 0.19697000E+1, 0.15076980E+3, 0.241E+3, 0.205E+3, 0.29225000E+1, 0.19441000E+1, 0.11036390E+3, + 0.241E+3, 0.206E+3, 0.29225000E+1, 0.19985000E+1, 0.88394400E+2, 0.241E+3, 0.207E+3, + 0.29225000E+1, 0.20143000E+1, 0.60521700E+2, 0.241E+3, 0.208E+3, 0.29225000E+1, 0.19887000E+1, + 0.27178760E+3, 0.241E+3, 0.212E+3, 0.29225000E+1, 0.19496000E+1, 0.32857270E+3, 0.241E+3, + 0.213E+3, 0.29225000E+1, 0.19311000E+1, 0.31520730E+3, 0.241E+3, 0.214E+3, 0.29225000E+1, + 0.19435000E+1, 0.27386490E+3, 0.241E+3, 0.215E+3, 0.29225000E+1, 0.20102000E+1, 0.23008710E+3, + 0.241E+3, 0.216E+3, 0.29225000E+1, 0.19903000E+1, 0.38125920E+3, 0.241E+3, 0.220E+3, + 0.29225000E+1, 0.19349000E+1, 0.36637160E+3, 0.241E+3, 0.221E+3, 0.29225000E+1, 0.28999000E+1, + 0.37088000E+3, 0.241E+3, 0.222E+3, 0.29225000E+1, 0.38675000E+1, 0.33949100E+3, 0.241E+3, + 0.223E+3, 0.29225000E+1, 0.29110000E+1, 0.25576580E+3, 0.241E+3, 0.224E+3, 0.29225000E+1, + 0.10619100E+2, 0.21884580E+3, 0.241E+3, 0.225E+3, 0.29225000E+1, 0.98849000E+1, 0.21480530E+3, + 0.241E+3, 0.226E+3, 0.29225000E+1, 0.91376000E+1, 0.25178560E+3, 0.241E+3, 0.227E+3, + 0.29225000E+1, 0.29263000E+1, 0.23455580E+3, 0.241E+3, 0.228E+3, 0.29225000E+1, 0.65458000E+1, + 0.33167180E+3, 0.241E+3, 0.231E+3, 0.29225000E+1, 0.19315000E+1, 0.35008010E+3, 0.241E+3, + 0.232E+3, 0.29225000E+1, 0.19447000E+1, 0.32096670E+3, 0.241E+3, 0.233E+3, 0.29225000E+1, + 0.19793000E+1, 0.29868080E+3, 0.241E+3, 0.234E+3, 0.29225000E+1, 0.19812000E+1, 0.45688220E+3, + 0.241E+3, 0.238E+3, 0.29225000E+1, 0.19143000E+1, 0.43965480E+3, 0.241E+3, 0.239E+3, + 0.29225000E+1, 0.28903000E+1, 0.44341820E+3, 0.241E+3, 0.240E+3, 0.29225000E+1, 0.39106000E+1, + 0.42889620E+3, 0.241E+3, 0.241E+3, 0.29225000E+1, 0.29225000E+1, 0.31668100E+2, 0.242E+3, + 0.100E+1, 0.11055600E+2, 0.91180000E+0, 0.21351600E+2, 0.242E+3, 0.200E+1, 0.11055600E+2, + 0.00000000E+0, 0.46157510E+3, 0.242E+3, 0.300E+1, 0.11055600E+2, 0.00000000E+0, 0.27354460E+3, + 0.242E+3, 0.400E+1, 0.11055600E+2, 0.00000000E+0, 0.18746660E+3, 0.242E+3, 0.500E+1, + 0.11055600E+2, 0.00000000E+0, 0.12849780E+3, 0.242E+3, 0.600E+1, 0.11055600E+2, 0.00000000E+0, + 0.90904300E+2, 0.242E+3, 0.700E+1, 0.11055600E+2, 0.00000000E+0, 0.69418100E+2, 0.242E+3, + 0.800E+1, 0.11055600E+2, 0.00000000E+0, 0.52984500E+2, 0.242E+3, 0.900E+1, 0.11055600E+2, + 0.00000000E+0, 0.41003500E+2, 0.242E+3, 0.100E+2, 0.11055600E+2, 0.00000000E+0, 0.55303570E+3, + 0.242E+3, 0.110E+2, 0.11055600E+2, 0.00000000E+0, 0.43382780E+3, 0.242E+3, 0.120E+2, + 0.11055600E+2, 0.00000000E+0, 0.40329140E+3, 0.242E+3, 0.130E+2, 0.11055600E+2, 0.00000000E+0, + 0.32151630E+3, 0.242E+3, 0.140E+2, 0.11055600E+2, 0.00000000E+0, 0.25341230E+3, 0.242E+3, + 0.150E+2, 0.11055600E+2, 0.00000000E+0, 0.21190690E+3, 0.242E+3, 0.160E+2, 0.11055600E+2, + 0.00000000E+0, 0.17439200E+3, 0.242E+3, 0.170E+2, 0.11055600E+2, 0.00000000E+0, 0.14363890E+3, + 0.242E+3, 0.180E+2, 0.11055600E+2, 0.00000000E+0, 0.90508480E+3, 0.242E+3, 0.190E+2, + 0.11055600E+2, 0.00000000E+0, 0.75708580E+3, 0.242E+3, 0.200E+2, 0.11055600E+2, 0.00000000E+0, + 0.62755600E+3, 0.242E+3, 0.210E+2, 0.11055600E+2, 0.00000000E+0, 0.60830000E+3, 0.242E+3, + 0.220E+2, 0.11055600E+2, 0.00000000E+0, 0.55823240E+3, 0.242E+3, 0.230E+2, 0.11055600E+2, + 0.00000000E+0, 0.44055160E+3, 0.242E+3, 0.240E+2, 0.11055600E+2, 0.00000000E+0, 0.48213620E+3, + 0.242E+3, 0.250E+2, 0.11055600E+2, 0.00000000E+0, 0.37926880E+3, 0.242E+3, 0.260E+2, + 0.11055600E+2, 0.00000000E+0, 0.40314840E+3, 0.242E+3, 0.270E+2, 0.11055600E+2, 0.00000000E+0, + 0.41431560E+3, 0.242E+3, 0.280E+2, 0.11055600E+2, 0.00000000E+0, 0.31832390E+3, 0.242E+3, + 0.290E+2, 0.11055600E+2, 0.00000000E+0, 0.32847070E+3, 0.242E+3, 0.300E+2, 0.11055600E+2, + 0.00000000E+0, 0.38804460E+3, 0.242E+3, 0.310E+2, 0.11055600E+2, 0.00000000E+0, 0.34515780E+3, + 0.242E+3, 0.320E+2, 0.11055600E+2, 0.00000000E+0, 0.29691650E+3, 0.242E+3, 0.330E+2, + 0.11055600E+2, 0.00000000E+0, 0.26796230E+3, 0.242E+3, 0.340E+2, 0.11055600E+2, 0.00000000E+0, + 0.23592640E+3, 0.242E+3, 0.350E+2, 0.11055600E+2, 0.00000000E+0, 0.20636370E+3, 0.242E+3, + 0.360E+2, 0.11055600E+2, 0.00000000E+0, 0.10163718E+4, 0.242E+3, 0.370E+2, 0.11055600E+2, + 0.00000000E+0, 0.90210970E+3, 0.242E+3, 0.380E+2, 0.11055600E+2, 0.00000000E+0, 0.79517640E+3, + 0.242E+3, 0.390E+2, 0.11055600E+2, 0.00000000E+0, 0.71766320E+3, 0.242E+3, 0.400E+2, + 0.11055600E+2, 0.00000000E+0, 0.65637740E+3, 0.242E+3, 0.410E+2, 0.11055600E+2, 0.00000000E+0, + 0.50974240E+3, 0.242E+3, 0.420E+2, 0.11055600E+2, 0.00000000E+0, 0.56744410E+3, 0.242E+3, + 0.430E+2, 0.11055600E+2, 0.00000000E+0, 0.43508880E+3, 0.242E+3, 0.440E+2, 0.11055600E+2, + 0.00000000E+0, 0.47502730E+3, 0.242E+3, 0.450E+2, 0.11055600E+2, 0.00000000E+0, 0.44133190E+3, + 0.242E+3, 0.460E+2, 0.11055600E+2, 0.00000000E+0, 0.36828980E+3, 0.242E+3, 0.470E+2, + 0.11055600E+2, 0.00000000E+0, 0.38983000E+3, 0.242E+3, 0.480E+2, 0.11055600E+2, 0.00000000E+0, + 0.48621160E+3, 0.242E+3, 0.490E+2, 0.11055600E+2, 0.00000000E+0, 0.45246160E+3, 0.242E+3, + 0.500E+2, 0.11055600E+2, 0.00000000E+0, 0.40603120E+3, 0.242E+3, 0.510E+2, 0.11055600E+2, + 0.00000000E+0, 0.37843120E+3, 0.242E+3, 0.520E+2, 0.11055600E+2, 0.00000000E+0, 0.34390960E+3, + 0.242E+3, 0.530E+2, 0.11055600E+2, 0.00000000E+0, 0.31074420E+3, 0.242E+3, 0.540E+2, + 0.11055600E+2, 0.00000000E+0, 0.12391934E+4, 0.242E+3, 0.550E+2, 0.11055600E+2, 0.00000000E+0, + 0.11485106E+4, 0.242E+3, 0.560E+2, 0.11055600E+2, 0.00000000E+0, 0.10151154E+4, 0.242E+3, + 0.570E+2, 0.11055600E+2, 0.00000000E+0, 0.47942470E+3, 0.242E+3, 0.580E+2, 0.11055600E+2, + 0.27991000E+1, 0.10198084E+4, 0.242E+3, 0.590E+2, 0.11055600E+2, 0.00000000E+0, 0.98014620E+3, + 0.242E+3, 0.600E+2, 0.11055600E+2, 0.00000000E+0, 0.95578910E+3, 0.242E+3, 0.610E+2, + 0.11055600E+2, 0.00000000E+0, 0.93335430E+3, 0.242E+3, 0.620E+2, 0.11055600E+2, 0.00000000E+0, + 0.91346790E+3, 0.242E+3, 0.630E+2, 0.11055600E+2, 0.00000000E+0, 0.72393420E+3, 0.242E+3, + 0.640E+2, 0.11055600E+2, 0.00000000E+0, 0.80773280E+3, 0.242E+3, 0.650E+2, 0.11055600E+2, + 0.00000000E+0, 0.77996820E+3, 0.242E+3, 0.660E+2, 0.11055600E+2, 0.00000000E+0, 0.82502430E+3, + 0.242E+3, 0.670E+2, 0.11055600E+2, 0.00000000E+0, 0.80759920E+3, 0.242E+3, 0.680E+2, + 0.11055600E+2, 0.00000000E+0, 0.79196020E+3, 0.242E+3, 0.690E+2, 0.11055600E+2, 0.00000000E+0, + 0.78241790E+3, 0.242E+3, 0.700E+2, 0.11055600E+2, 0.00000000E+0, 0.66269770E+3, 0.242E+3, + 0.710E+2, 0.11055600E+2, 0.00000000E+0, 0.65575410E+3, 0.242E+3, 0.720E+2, 0.11055600E+2, + 0.00000000E+0, 0.60105960E+3, 0.242E+3, 0.730E+2, 0.11055600E+2, 0.00000000E+0, 0.50981570E+3, + 0.242E+3, 0.740E+2, 0.11055600E+2, 0.00000000E+0, 0.51931350E+3, 0.242E+3, 0.750E+2, + 0.11055600E+2, 0.00000000E+0, 0.47249570E+3, 0.242E+3, 0.760E+2, 0.11055600E+2, 0.00000000E+0, + 0.43413160E+3, 0.242E+3, 0.770E+2, 0.11055600E+2, 0.00000000E+0, 0.36221680E+3, 0.242E+3, + 0.780E+2, 0.11055600E+2, 0.00000000E+0, 0.33898810E+3, 0.242E+3, 0.790E+2, 0.11055600E+2, + 0.00000000E+0, 0.34897520E+3, 0.242E+3, 0.800E+2, 0.11055600E+2, 0.00000000E+0, 0.50083330E+3, + 0.242E+3, 0.810E+2, 0.11055600E+2, 0.00000000E+0, 0.49181440E+3, 0.242E+3, 0.820E+2, + 0.11055600E+2, 0.00000000E+0, 0.45457810E+3, 0.242E+3, 0.830E+2, 0.11055600E+2, 0.00000000E+0, + 0.43514050E+3, 0.242E+3, 0.840E+2, 0.11055600E+2, 0.00000000E+0, 0.40344890E+3, 0.242E+3, + 0.850E+2, 0.11055600E+2, 0.00000000E+0, 0.37142770E+3, 0.242E+3, 0.860E+2, 0.11055600E+2, + 0.00000000E+0, 0.11758873E+4, 0.242E+3, 0.870E+2, 0.11055600E+2, 0.00000000E+0, 0.11395556E+4, + 0.242E+3, 0.880E+2, 0.11055600E+2, 0.00000000E+0, 0.10127341E+4, 0.242E+3, 0.890E+2, + 0.11055600E+2, 0.00000000E+0, 0.91652630E+3, 0.242E+3, 0.900E+2, 0.11055600E+2, 0.00000000E+0, + 0.90743040E+3, 0.242E+3, 0.910E+2, 0.11055600E+2, 0.00000000E+0, 0.87883040E+3, 0.242E+3, + 0.920E+2, 0.11055600E+2, 0.00000000E+0, 0.90104700E+3, 0.242E+3, 0.930E+2, 0.11055600E+2, + 0.00000000E+0, 0.87318690E+3, 0.242E+3, 0.940E+2, 0.11055600E+2, 0.00000000E+0, 0.50417300E+2, + 0.242E+3, 0.101E+3, 0.11055600E+2, 0.00000000E+0, 0.15944040E+3, 0.242E+3, 0.103E+3, + 0.11055600E+2, 0.98650000E+0, 0.20415190E+3, 0.242E+3, 0.104E+3, 0.11055600E+2, 0.98080000E+0, + 0.15835630E+3, 0.242E+3, 0.105E+3, 0.11055600E+2, 0.97060000E+0, 0.12059460E+3, 0.242E+3, + 0.106E+3, 0.11055600E+2, 0.98680000E+0, 0.84858200E+2, 0.242E+3, 0.107E+3, 0.11055600E+2, + 0.99440000E+0, 0.62432400E+2, 0.242E+3, 0.108E+3, 0.11055600E+2, 0.99250000E+0, 0.43476000E+2, + 0.242E+3, 0.109E+3, 0.11055600E+2, 0.99820000E+0, 0.23259320E+3, 0.242E+3, 0.111E+3, + 0.11055600E+2, 0.96840000E+0, 0.35918880E+3, 0.242E+3, 0.112E+3, 0.11055600E+2, 0.96280000E+0, + 0.36631710E+3, 0.242E+3, 0.113E+3, 0.11055600E+2, 0.96480000E+0, 0.29774360E+3, 0.242E+3, + 0.114E+3, 0.11055600E+2, 0.95070000E+0, 0.24610860E+3, 0.242E+3, 0.115E+3, 0.11055600E+2, + 0.99470000E+0, 0.20955990E+3, 0.242E+3, 0.116E+3, 0.11055600E+2, 0.99480000E+0, 0.17257580E+3, + 0.242E+3, 0.117E+3, 0.11055600E+2, 0.99720000E+0, 0.32363810E+3, 0.242E+3, 0.119E+3, + 0.11055600E+2, 0.97670000E+0, 0.60709190E+3, 0.242E+3, 0.120E+3, 0.11055600E+2, 0.98310000E+0, + 0.32607870E+3, 0.242E+3, 0.121E+3, 0.11055600E+2, 0.18627000E+1, 0.31499830E+3, 0.242E+3, + 0.122E+3, 0.11055600E+2, 0.18299000E+1, 0.30868010E+3, 0.242E+3, 0.123E+3, 0.11055600E+2, + 0.19138000E+1, 0.30552730E+3, 0.242E+3, 0.124E+3, 0.11055600E+2, 0.18269000E+1, 0.28243340E+3, + 0.242E+3, 0.125E+3, 0.11055600E+2, 0.16406000E+1, 0.26186300E+3, 0.242E+3, 0.126E+3, + 0.11055600E+2, 0.16483000E+1, 0.24986950E+3, 0.242E+3, 0.127E+3, 0.11055600E+2, 0.17149000E+1, + 0.24418470E+3, 0.242E+3, 0.128E+3, 0.11055600E+2, 0.17937000E+1, 0.24036730E+3, 0.242E+3, + 0.129E+3, 0.11055600E+2, 0.95760000E+0, 0.22704050E+3, 0.242E+3, 0.130E+3, 0.11055600E+2, + 0.19419000E+1, 0.36528020E+3, 0.242E+3, 0.131E+3, 0.11055600E+2, 0.96010000E+0, 0.32362930E+3, + 0.242E+3, 0.132E+3, 0.11055600E+2, 0.94340000E+0, 0.29204750E+3, 0.242E+3, 0.133E+3, + 0.11055600E+2, 0.98890000E+0, 0.26805260E+3, 0.242E+3, 0.134E+3, 0.11055600E+2, 0.99010000E+0, + 0.23750190E+3, 0.242E+3, 0.135E+3, 0.11055600E+2, 0.99740000E+0, 0.38712360E+3, 0.242E+3, + 0.137E+3, 0.11055600E+2, 0.97380000E+0, 0.73864010E+3, 0.242E+3, 0.138E+3, 0.11055600E+2, + 0.98010000E+0, 0.57185300E+3, 0.242E+3, 0.139E+3, 0.11055600E+2, 0.19153000E+1, 0.43135120E+3, + 0.242E+3, 0.140E+3, 0.11055600E+2, 0.19355000E+1, 0.43556920E+3, 0.242E+3, 0.141E+3, + 0.11055600E+2, 0.19545000E+1, 0.40706590E+3, 0.242E+3, 0.142E+3, 0.11055600E+2, 0.19420000E+1, + 0.45371970E+3, 0.242E+3, 0.143E+3, 0.11055600E+2, 0.16682000E+1, 0.35663380E+3, 0.242E+3, + 0.144E+3, 0.11055600E+2, 0.18584000E+1, 0.33393870E+3, 0.242E+3, 0.145E+3, 0.11055600E+2, + 0.19003000E+1, 0.31050050E+3, 0.242E+3, 0.146E+3, 0.11055600E+2, 0.18630000E+1, 0.30014930E+3, + 0.242E+3, 0.147E+3, 0.11055600E+2, 0.96790000E+0, 0.29784780E+3, 0.242E+3, 0.148E+3, + 0.11055600E+2, 0.19539000E+1, 0.46456790E+3, 0.242E+3, 0.149E+3, 0.11055600E+2, 0.96330000E+0, + 0.42315700E+3, 0.242E+3, 0.150E+3, 0.11055600E+2, 0.95140000E+0, 0.39833180E+3, 0.242E+3, + 0.151E+3, 0.11055600E+2, 0.97490000E+0, 0.37825790E+3, 0.242E+3, 0.152E+3, 0.11055600E+2, + 0.98110000E+0, 0.34710000E+3, 0.242E+3, 0.153E+3, 0.11055600E+2, 0.99680000E+0, 0.46012630E+3, + 0.242E+3, 0.155E+3, 0.11055600E+2, 0.99090000E+0, 0.95602290E+3, 0.242E+3, 0.156E+3, + 0.11055600E+2, 0.97970000E+0, 0.72324370E+3, 0.242E+3, 0.157E+3, 0.11055600E+2, 0.19373000E+1, + 0.46518180E+3, 0.242E+3, 0.159E+3, 0.11055600E+2, 0.29425000E+1, 0.45559950E+3, 0.242E+3, + 0.160E+3, 0.11055600E+2, 0.29455000E+1, 0.44133640E+3, 0.242E+3, 0.161E+3, 0.11055600E+2, + 0.29413000E+1, 0.44305470E+3, 0.242E+3, 0.162E+3, 0.11055600E+2, 0.29300000E+1, 0.42578150E+3, + 0.242E+3, 0.163E+3, 0.11055600E+2, 0.18286000E+1, 0.44561250E+3, 0.242E+3, 0.164E+3, + 0.11055600E+2, 0.28732000E+1, 0.41895420E+3, 0.242E+3, 0.165E+3, 0.11055600E+2, 0.29086000E+1, + 0.42555500E+3, 0.242E+3, 0.166E+3, 0.11055600E+2, 0.28965000E+1, 0.39799830E+3, 0.242E+3, + 0.167E+3, 0.11055600E+2, 0.29242000E+1, 0.38678540E+3, 0.242E+3, 0.168E+3, 0.11055600E+2, + 0.29282000E+1, 0.38418230E+3, 0.242E+3, 0.169E+3, 0.11055600E+2, 0.29246000E+1, 0.40306860E+3, + 0.242E+3, 0.170E+3, 0.11055600E+2, 0.28482000E+1, 0.37150160E+3, 0.242E+3, 0.171E+3, + 0.11055600E+2, 0.29219000E+1, 0.49758720E+3, 0.242E+3, 0.172E+3, 0.11055600E+2, 0.19254000E+1, + 0.46378430E+3, 0.242E+3, 0.173E+3, 0.11055600E+2, 0.19459000E+1, 0.42506300E+3, 0.242E+3, + 0.174E+3, 0.11055600E+2, 0.19292000E+1, 0.42853830E+3, 0.242E+3, 0.175E+3, 0.11055600E+2, + 0.18104000E+1, 0.37888850E+3, 0.242E+3, 0.176E+3, 0.11055600E+2, 0.18858000E+1, 0.35711560E+3, + 0.242E+3, 0.177E+3, 0.11055600E+2, 0.18648000E+1, 0.34149670E+3, 0.242E+3, 0.178E+3, + 0.11055600E+2, 0.19188000E+1, 0.32657380E+3, 0.242E+3, 0.179E+3, 0.11055600E+2, 0.98460000E+0, + 0.31656330E+3, 0.242E+3, 0.180E+3, 0.11055600E+2, 0.19896000E+1, 0.50005880E+3, 0.242E+3, + 0.181E+3, 0.11055600E+2, 0.92670000E+0, 0.45872390E+3, 0.242E+3, 0.182E+3, 0.11055600E+2, + 0.93830000E+0, 0.44646550E+3, 0.242E+3, 0.183E+3, 0.11055600E+2, 0.98200000E+0, 0.43546460E+3, + 0.242E+3, 0.184E+3, 0.11055600E+2, 0.98150000E+0, 0.40832830E+3, 0.242E+3, 0.185E+3, + 0.11055600E+2, 0.99540000E+0, 0.51837750E+3, 0.242E+3, 0.187E+3, 0.11055600E+2, 0.97050000E+0, + 0.95463010E+3, 0.242E+3, 0.188E+3, 0.11055600E+2, 0.96620000E+0, 0.55025080E+3, 0.242E+3, + 0.189E+3, 0.11055600E+2, 0.29070000E+1, 0.63174190E+3, 0.242E+3, 0.190E+3, 0.11055600E+2, + 0.28844000E+1, 0.56637730E+3, 0.242E+3, 0.191E+3, 0.11055600E+2, 0.28738000E+1, 0.50265170E+3, + 0.242E+3, 0.192E+3, 0.11055600E+2, 0.28878000E+1, 0.48421620E+3, 0.242E+3, 0.193E+3, + 0.11055600E+2, 0.29095000E+1, 0.57561980E+3, 0.242E+3, 0.194E+3, 0.11055600E+2, 0.19209000E+1, + 0.13524280E+3, 0.242E+3, 0.204E+3, 0.11055600E+2, 0.19697000E+1, 0.13350900E+3, 0.242E+3, + 0.205E+3, 0.11055600E+2, 0.19441000E+1, 0.98890300E+2, 0.242E+3, 0.206E+3, 0.11055600E+2, + 0.19985000E+1, 0.79767200E+2, 0.242E+3, 0.207E+3, 0.11055600E+2, 0.20143000E+1, 0.55248400E+2, + 0.242E+3, 0.208E+3, 0.11055600E+2, 0.19887000E+1, 0.23801690E+3, 0.242E+3, 0.212E+3, + 0.11055600E+2, 0.19496000E+1, 0.28752250E+3, 0.242E+3, 0.213E+3, 0.11055600E+2, 0.19311000E+1, + 0.27743120E+3, 0.242E+3, 0.214E+3, 0.11055600E+2, 0.19435000E+1, 0.24266760E+3, 0.242E+3, + 0.215E+3, 0.11055600E+2, 0.20102000E+1, 0.20536950E+3, 0.242E+3, 0.216E+3, 0.11055600E+2, + 0.19903000E+1, 0.33432060E+3, 0.242E+3, 0.220E+3, 0.11055600E+2, 0.19349000E+1, 0.32266550E+3, + 0.242E+3, 0.221E+3, 0.11055600E+2, 0.28999000E+1, 0.32676700E+3, 0.242E+3, 0.222E+3, + 0.11055600E+2, 0.38675000E+1, 0.29914950E+3, 0.242E+3, 0.223E+3, 0.11055600E+2, 0.29110000E+1, + 0.22729470E+3, 0.242E+3, 0.224E+3, 0.11055600E+2, 0.10619100E+2, 0.19544560E+3, 0.242E+3, + 0.225E+3, 0.11055600E+2, 0.98849000E+1, 0.19173330E+3, 0.242E+3, 0.226E+3, 0.11055600E+2, + 0.91376000E+1, 0.22295460E+3, 0.242E+3, 0.227E+3, 0.11055600E+2, 0.29263000E+1, 0.20815700E+3, + 0.242E+3, 0.228E+3, 0.11055600E+2, 0.65458000E+1, 0.29172410E+3, 0.242E+3, 0.231E+3, + 0.11055600E+2, 0.19315000E+1, 0.30857810E+3, 0.242E+3, 0.232E+3, 0.11055600E+2, 0.19447000E+1, + 0.28464110E+3, 0.242E+3, 0.233E+3, 0.11055600E+2, 0.19793000E+1, 0.26599860E+3, 0.242E+3, + 0.234E+3, 0.11055600E+2, 0.19812000E+1, 0.40105410E+3, 0.242E+3, 0.238E+3, 0.11055600E+2, + 0.19143000E+1, 0.38807180E+3, 0.242E+3, 0.239E+3, 0.11055600E+2, 0.28903000E+1, 0.39206550E+3, + 0.242E+3, 0.240E+3, 0.11055600E+2, 0.39106000E+1, 0.37920750E+3, 0.242E+3, 0.241E+3, + 0.11055600E+2, 0.29225000E+1, 0.33710750E+3, 0.242E+3, 0.242E+3, 0.11055600E+2, 0.11055600E+2, + 0.28262700E+2, 0.243E+3, 0.100E+1, 0.95402000E+1, 0.91180000E+0, 0.19355600E+2, 0.243E+3, + 0.200E+1, 0.95402000E+1, 0.00000000E+0, 0.39142550E+3, 0.243E+3, 0.300E+1, 0.95402000E+1, + 0.00000000E+0, 0.23684570E+3, 0.243E+3, 0.400E+1, 0.95402000E+1, 0.00000000E+0, 0.16457770E+3, + 0.243E+3, 0.500E+1, 0.95402000E+1, 0.00000000E+0, 0.11407740E+3, 0.243E+3, 0.600E+1, + 0.95402000E+1, 0.00000000E+0, 0.81421700E+2, 0.243E+3, 0.700E+1, 0.95402000E+1, 0.00000000E+0, + 0.62588600E+2, 0.243E+3, 0.800E+1, 0.95402000E+1, 0.00000000E+0, 0.48054000E+2, 0.243E+3, + 0.900E+1, 0.95402000E+1, 0.00000000E+0, 0.37372300E+2, 0.243E+3, 0.100E+2, 0.95402000E+1, + 0.00000000E+0, 0.46976960E+3, 0.243E+3, 0.110E+2, 0.95402000E+1, 0.00000000E+0, 0.37426910E+3, + 0.243E+3, 0.120E+2, 0.95402000E+1, 0.00000000E+0, 0.35028040E+3, 0.243E+3, 0.130E+2, + 0.95402000E+1, 0.00000000E+0, 0.28184800E+3, 0.243E+3, 0.140E+2, 0.95402000E+1, 0.00000000E+0, + 0.22400340E+3, 0.243E+3, 0.150E+2, 0.95402000E+1, 0.00000000E+0, 0.18840440E+3, 0.243E+3, + 0.160E+2, 0.95402000E+1, 0.00000000E+0, 0.15594050E+3, 0.243E+3, 0.170E+2, 0.95402000E+1, + 0.00000000E+0, 0.12911050E+3, 0.243E+3, 0.180E+2, 0.95402000E+1, 0.00000000E+0, 0.76793390E+3, + 0.243E+3, 0.190E+2, 0.95402000E+1, 0.00000000E+0, 0.64950000E+3, 0.243E+3, 0.200E+2, + 0.95402000E+1, 0.00000000E+0, 0.53986620E+3, 0.243E+3, 0.210E+2, 0.95402000E+1, 0.00000000E+0, + 0.52491730E+3, 0.243E+3, 0.220E+2, 0.95402000E+1, 0.00000000E+0, 0.48256220E+3, 0.243E+3, + 0.230E+2, 0.95402000E+1, 0.00000000E+0, 0.38140060E+3, 0.243E+3, 0.240E+2, 0.95402000E+1, + 0.00000000E+0, 0.41786140E+3, 0.243E+3, 0.250E+2, 0.95402000E+1, 0.00000000E+0, 0.32931160E+3, + 0.243E+3, 0.260E+2, 0.95402000E+1, 0.00000000E+0, 0.35085640E+3, 0.243E+3, 0.270E+2, + 0.95402000E+1, 0.00000000E+0, 0.35990170E+3, 0.243E+3, 0.280E+2, 0.95402000E+1, 0.00000000E+0, + 0.27699700E+3, 0.243E+3, 0.290E+2, 0.95402000E+1, 0.00000000E+0, 0.28699270E+3, 0.243E+3, + 0.300E+2, 0.95402000E+1, 0.00000000E+0, 0.33826270E+3, 0.243E+3, 0.310E+2, 0.95402000E+1, + 0.00000000E+0, 0.30293890E+3, 0.243E+3, 0.320E+2, 0.95402000E+1, 0.00000000E+0, 0.26234800E+3, + 0.243E+3, 0.330E+2, 0.95402000E+1, 0.00000000E+0, 0.23782350E+3, 0.243E+3, 0.340E+2, + 0.95402000E+1, 0.00000000E+0, 0.21038120E+3, 0.243E+3, 0.350E+2, 0.95402000E+1, 0.00000000E+0, + 0.18484770E+3, 0.243E+3, 0.360E+2, 0.95402000E+1, 0.00000000E+0, 0.86376550E+3, 0.243E+3, + 0.370E+2, 0.95402000E+1, 0.00000000E+0, 0.77394630E+3, 0.243E+3, 0.380E+2, 0.95402000E+1, + 0.00000000E+0, 0.68574890E+3, 0.243E+3, 0.390E+2, 0.95402000E+1, 0.00000000E+0, 0.62104380E+3, + 0.243E+3, 0.400E+2, 0.95402000E+1, 0.00000000E+0, 0.56941590E+3, 0.243E+3, 0.410E+2, + 0.95402000E+1, 0.00000000E+0, 0.44434710E+3, 0.243E+3, 0.420E+2, 0.95402000E+1, 0.00000000E+0, + 0.49374300E+3, 0.243E+3, 0.430E+2, 0.95402000E+1, 0.00000000E+0, 0.38057300E+3, 0.243E+3, + 0.440E+2, 0.95402000E+1, 0.00000000E+0, 0.41514630E+3, 0.243E+3, 0.450E+2, 0.95402000E+1, + 0.00000000E+0, 0.38629860E+3, 0.243E+3, 0.460E+2, 0.95402000E+1, 0.00000000E+0, 0.32258210E+3, + 0.243E+3, 0.470E+2, 0.95402000E+1, 0.00000000E+0, 0.34192370E+3, 0.243E+3, 0.480E+2, + 0.95402000E+1, 0.00000000E+0, 0.42431450E+3, 0.243E+3, 0.490E+2, 0.95402000E+1, 0.00000000E+0, + 0.39689200E+3, 0.243E+3, 0.500E+2, 0.95402000E+1, 0.00000000E+0, 0.35815190E+3, 0.243E+3, + 0.510E+2, 0.95402000E+1, 0.00000000E+0, 0.33500590E+3, 0.243E+3, 0.520E+2, 0.95402000E+1, + 0.00000000E+0, 0.30566670E+3, 0.243E+3, 0.530E+2, 0.95402000E+1, 0.00000000E+0, 0.27727710E+3, + 0.243E+3, 0.540E+2, 0.95402000E+1, 0.00000000E+0, 0.10537818E+4, 0.243E+3, 0.550E+2, + 0.95402000E+1, 0.00000000E+0, 0.98418610E+3, 0.243E+3, 0.560E+2, 0.95402000E+1, 0.00000000E+0, + 0.87424490E+3, 0.243E+3, 0.570E+2, 0.95402000E+1, 0.00000000E+0, 0.42266280E+3, 0.243E+3, + 0.580E+2, 0.95402000E+1, 0.27991000E+1, 0.87559270E+3, 0.243E+3, 0.590E+2, 0.95402000E+1, + 0.00000000E+0, 0.84216510E+3, 0.243E+3, 0.600E+2, 0.95402000E+1, 0.00000000E+0, 0.82140430E+3, + 0.243E+3, 0.610E+2, 0.95402000E+1, 0.00000000E+0, 0.80225710E+3, 0.243E+3, 0.620E+2, + 0.95402000E+1, 0.00000000E+0, 0.78528980E+3, 0.243E+3, 0.630E+2, 0.95402000E+1, 0.00000000E+0, + 0.62638240E+3, 0.243E+3, 0.640E+2, 0.95402000E+1, 0.00000000E+0, 0.69366130E+3, 0.243E+3, + 0.650E+2, 0.95402000E+1, 0.00000000E+0, 0.67051140E+3, 0.243E+3, 0.660E+2, 0.95402000E+1, + 0.00000000E+0, 0.71007710E+3, 0.243E+3, 0.670E+2, 0.95402000E+1, 0.00000000E+0, 0.69514360E+3, + 0.243E+3, 0.680E+2, 0.95402000E+1, 0.00000000E+0, 0.68179200E+3, 0.243E+3, 0.690E+2, + 0.95402000E+1, 0.00000000E+0, 0.67337970E+3, 0.243E+3, 0.700E+2, 0.95402000E+1, 0.00000000E+0, + 0.57285580E+3, 0.243E+3, 0.710E+2, 0.95402000E+1, 0.00000000E+0, 0.56966440E+3, 0.243E+3, + 0.720E+2, 0.95402000E+1, 0.00000000E+0, 0.52402130E+3, 0.243E+3, 0.730E+2, 0.95402000E+1, + 0.00000000E+0, 0.44608380E+3, 0.243E+3, 0.740E+2, 0.95402000E+1, 0.00000000E+0, 0.45488600E+3, + 0.243E+3, 0.750E+2, 0.95402000E+1, 0.00000000E+0, 0.41519500E+3, 0.243E+3, 0.760E+2, + 0.95402000E+1, 0.00000000E+0, 0.38249740E+3, 0.243E+3, 0.770E+2, 0.95402000E+1, 0.00000000E+0, + 0.32027240E+3, 0.243E+3, 0.780E+2, 0.95402000E+1, 0.00000000E+0, 0.30015390E+3, 0.243E+3, + 0.790E+2, 0.95402000E+1, 0.00000000E+0, 0.30919500E+3, 0.243E+3, 0.800E+2, 0.95402000E+1, + 0.00000000E+0, 0.43822480E+3, 0.243E+3, 0.810E+2, 0.95402000E+1, 0.00000000E+0, 0.43187000E+3, + 0.243E+3, 0.820E+2, 0.95402000E+1, 0.00000000E+0, 0.40107000E+3, 0.243E+3, 0.830E+2, + 0.95402000E+1, 0.00000000E+0, 0.38504170E+3, 0.243E+3, 0.840E+2, 0.95402000E+1, 0.00000000E+0, + 0.35831060E+3, 0.243E+3, 0.850E+2, 0.95402000E+1, 0.00000000E+0, 0.33103010E+3, 0.243E+3, + 0.860E+2, 0.95402000E+1, 0.00000000E+0, 0.10040757E+4, 0.243E+3, 0.870E+2, 0.95402000E+1, + 0.00000000E+0, 0.97925300E+3, 0.243E+3, 0.880E+2, 0.95402000E+1, 0.00000000E+0, 0.87428430E+3, + 0.243E+3, 0.890E+2, 0.95402000E+1, 0.00000000E+0, 0.79590040E+3, 0.243E+3, 0.900E+2, + 0.95402000E+1, 0.00000000E+0, 0.78618960E+3, 0.243E+3, 0.910E+2, 0.95402000E+1, 0.00000000E+0, + 0.76155790E+3, 0.243E+3, 0.920E+2, 0.95402000E+1, 0.00000000E+0, 0.77812490E+3, 0.243E+3, + 0.930E+2, 0.95402000E+1, 0.00000000E+0, 0.75451690E+3, 0.243E+3, 0.940E+2, 0.95402000E+1, + 0.00000000E+0, 0.44596300E+2, 0.243E+3, 0.101E+3, 0.95402000E+1, 0.00000000E+0, 0.13836130E+3, + 0.243E+3, 0.103E+3, 0.95402000E+1, 0.98650000E+0, 0.17768370E+3, 0.243E+3, 0.104E+3, + 0.95402000E+1, 0.98080000E+0, 0.13947630E+3, 0.243E+3, 0.105E+3, 0.95402000E+1, 0.97060000E+0, + 0.10709060E+3, 0.243E+3, 0.106E+3, 0.95402000E+1, 0.98680000E+0, 0.76053200E+2, 0.243E+3, + 0.107E+3, 0.95402000E+1, 0.99440000E+0, 0.56396200E+2, 0.243E+3, 0.108E+3, 0.95402000E+1, + 0.99250000E+0, 0.39666800E+2, 0.243E+3, 0.109E+3, 0.95402000E+1, 0.99820000E+0, 0.20154030E+3, + 0.243E+3, 0.111E+3, 0.95402000E+1, 0.96840000E+0, 0.31080830E+3, 0.243E+3, 0.112E+3, + 0.95402000E+1, 0.96280000E+0, 0.31873880E+3, 0.243E+3, 0.113E+3, 0.95402000E+1, 0.96480000E+0, + 0.26141050E+3, 0.243E+3, 0.114E+3, 0.95402000E+1, 0.95070000E+0, 0.21763470E+3, 0.243E+3, + 0.115E+3, 0.95402000E+1, 0.99470000E+0, 0.18630930E+3, 0.243E+3, 0.116E+3, 0.95402000E+1, + 0.99480000E+0, 0.15431180E+3, 0.243E+3, 0.117E+3, 0.95402000E+1, 0.99720000E+0, 0.28243840E+3, + 0.243E+3, 0.119E+3, 0.95402000E+1, 0.97670000E+0, 0.52184580E+3, 0.243E+3, 0.120E+3, + 0.95402000E+1, 0.98310000E+0, 0.28622410E+3, 0.243E+3, 0.121E+3, 0.95402000E+1, 0.18627000E+1, + 0.27665670E+3, 0.243E+3, 0.122E+3, 0.95402000E+1, 0.18299000E+1, 0.27110010E+3, 0.243E+3, + 0.123E+3, 0.95402000E+1, 0.19138000E+1, 0.26813250E+3, 0.243E+3, 0.124E+3, 0.95402000E+1, + 0.18269000E+1, 0.24878950E+3, 0.243E+3, 0.125E+3, 0.95402000E+1, 0.16406000E+1, 0.23100810E+3, + 0.243E+3, 0.126E+3, 0.95402000E+1, 0.16483000E+1, 0.22048020E+3, 0.243E+3, 0.127E+3, + 0.95402000E+1, 0.17149000E+1, 0.21540300E+3, 0.243E+3, 0.128E+3, 0.95402000E+1, 0.17937000E+1, + 0.21142380E+3, 0.243E+3, 0.129E+3, 0.95402000E+1, 0.95760000E+0, 0.20075620E+3, 0.243E+3, + 0.130E+3, 0.95402000E+1, 0.19419000E+1, 0.31899680E+3, 0.243E+3, 0.131E+3, 0.95402000E+1, + 0.96010000E+0, 0.28455050E+3, 0.243E+3, 0.132E+3, 0.95402000E+1, 0.94340000E+0, 0.25816170E+3, + 0.243E+3, 0.133E+3, 0.95402000E+1, 0.98890000E+0, 0.23789530E+3, 0.243E+3, 0.134E+3, + 0.95402000E+1, 0.99010000E+0, 0.21174100E+3, 0.243E+3, 0.135E+3, 0.95402000E+1, 0.99740000E+0, + 0.33850140E+3, 0.243E+3, 0.137E+3, 0.95402000E+1, 0.97380000E+0, 0.63481680E+3, 0.243E+3, + 0.138E+3, 0.95402000E+1, 0.98010000E+0, 0.49663990E+3, 0.243E+3, 0.139E+3, 0.95402000E+1, + 0.19153000E+1, 0.37865110E+3, 0.243E+3, 0.140E+3, 0.95402000E+1, 0.19355000E+1, 0.38232250E+3, + 0.243E+3, 0.141E+3, 0.95402000E+1, 0.19545000E+1, 0.35796340E+3, 0.243E+3, 0.142E+3, + 0.95402000E+1, 0.19420000E+1, 0.39703670E+3, 0.243E+3, 0.143E+3, 0.95402000E+1, 0.16682000E+1, + 0.31491710E+3, 0.243E+3, 0.144E+3, 0.95402000E+1, 0.18584000E+1, 0.29510120E+3, 0.243E+3, + 0.145E+3, 0.95402000E+1, 0.19003000E+1, 0.27469180E+3, 0.243E+3, 0.146E+3, 0.95402000E+1, + 0.18630000E+1, 0.26540330E+3, 0.243E+3, 0.147E+3, 0.95402000E+1, 0.96790000E+0, 0.26402010E+3, + 0.243E+3, 0.148E+3, 0.95402000E+1, 0.19539000E+1, 0.40621170E+3, 0.243E+3, 0.149E+3, + 0.95402000E+1, 0.96330000E+0, 0.37204100E+3, 0.243E+3, 0.150E+3, 0.95402000E+1, 0.95140000E+0, + 0.35163900E+3, 0.243E+3, 0.151E+3, 0.95402000E+1, 0.97490000E+0, 0.33492300E+3, 0.243E+3, + 0.152E+3, 0.95402000E+1, 0.98110000E+0, 0.30847430E+3, 0.243E+3, 0.153E+3, 0.95402000E+1, + 0.99680000E+0, 0.40390770E+3, 0.243E+3, 0.155E+3, 0.95402000E+1, 0.99090000E+0, 0.82041740E+3, + 0.243E+3, 0.156E+3, 0.95402000E+1, 0.97970000E+0, 0.62770030E+3, 0.243E+3, 0.157E+3, + 0.95402000E+1, 0.19373000E+1, 0.41025930E+3, 0.243E+3, 0.159E+3, 0.95402000E+1, 0.29425000E+1, + 0.40183710E+3, 0.243E+3, 0.160E+3, 0.95402000E+1, 0.29455000E+1, 0.38938420E+3, 0.243E+3, + 0.161E+3, 0.95402000E+1, 0.29413000E+1, 0.39058410E+3, 0.243E+3, 0.162E+3, 0.95402000E+1, + 0.29300000E+1, 0.37444730E+3, 0.243E+3, 0.163E+3, 0.95402000E+1, 0.18286000E+1, 0.39266670E+3, + 0.243E+3, 0.164E+3, 0.95402000E+1, 0.28732000E+1, 0.36947670E+3, 0.243E+3, 0.165E+3, + 0.95402000E+1, 0.29086000E+1, 0.37477260E+3, 0.243E+3, 0.166E+3, 0.95402000E+1, 0.28965000E+1, + 0.35123330E+3, 0.243E+3, 0.167E+3, 0.95402000E+1, 0.29242000E+1, 0.34142990E+3, 0.243E+3, + 0.168E+3, 0.95402000E+1, 0.29282000E+1, 0.33904640E+3, 0.243E+3, 0.169E+3, 0.95402000E+1, + 0.29246000E+1, 0.35518230E+3, 0.243E+3, 0.170E+3, 0.95402000E+1, 0.28482000E+1, 0.32797090E+3, + 0.243E+3, 0.171E+3, 0.95402000E+1, 0.29219000E+1, 0.43515580E+3, 0.243E+3, 0.172E+3, + 0.95402000E+1, 0.19254000E+1, 0.40701010E+3, 0.243E+3, 0.173E+3, 0.95402000E+1, 0.19459000E+1, + 0.37438790E+3, 0.243E+3, 0.174E+3, 0.95402000E+1, 0.19292000E+1, 0.37634630E+3, 0.243E+3, + 0.175E+3, 0.95402000E+1, 0.18104000E+1, 0.33543720E+3, 0.243E+3, 0.176E+3, 0.95402000E+1, + 0.18858000E+1, 0.31664800E+3, 0.243E+3, 0.177E+3, 0.95402000E+1, 0.18648000E+1, 0.30309840E+3, + 0.243E+3, 0.178E+3, 0.95402000E+1, 0.19188000E+1, 0.28993290E+3, 0.243E+3, 0.179E+3, + 0.95402000E+1, 0.98460000E+0, 0.28176770E+3, 0.243E+3, 0.180E+3, 0.95402000E+1, 0.19896000E+1, + 0.43810480E+3, 0.243E+3, 0.181E+3, 0.95402000E+1, 0.92670000E+0, 0.40400650E+3, 0.243E+3, + 0.182E+3, 0.95402000E+1, 0.93830000E+0, 0.39433950E+3, 0.243E+3, 0.183E+3, 0.95402000E+1, + 0.98200000E+0, 0.38548280E+3, 0.243E+3, 0.184E+3, 0.95402000E+1, 0.98150000E+0, 0.36263740E+3, + 0.243E+3, 0.185E+3, 0.95402000E+1, 0.99540000E+0, 0.45515750E+3, 0.243E+3, 0.187E+3, + 0.95402000E+1, 0.97050000E+0, 0.82187390E+3, 0.243E+3, 0.188E+3, 0.95402000E+1, 0.96620000E+0, + 0.48513840E+3, 0.243E+3, 0.189E+3, 0.95402000E+1, 0.29070000E+1, 0.55458830E+3, 0.243E+3, + 0.190E+3, 0.95402000E+1, 0.28844000E+1, 0.49832020E+3, 0.243E+3, 0.191E+3, 0.95402000E+1, + 0.28738000E+1, 0.44380410E+3, 0.243E+3, 0.192E+3, 0.95402000E+1, 0.28878000E+1, 0.42790900E+3, + 0.243E+3, 0.193E+3, 0.95402000E+1, 0.29095000E+1, 0.50378650E+3, 0.243E+3, 0.194E+3, + 0.95402000E+1, 0.19209000E+1, 0.11912060E+3, 0.243E+3, 0.204E+3, 0.95402000E+1, 0.19697000E+1, + 0.11797580E+3, 0.243E+3, 0.205E+3, 0.95402000E+1, 0.19441000E+1, 0.88215800E+2, 0.243E+3, + 0.206E+3, 0.95402000E+1, 0.19985000E+1, 0.71572300E+2, 0.243E+3, 0.207E+3, 0.95402000E+1, + 0.20143000E+1, 0.50040600E+2, 0.243E+3, 0.208E+3, 0.95402000E+1, 0.19887000E+1, 0.20841310E+3, + 0.243E+3, 0.212E+3, 0.95402000E+1, 0.19496000E+1, 0.25164210E+3, 0.243E+3, 0.213E+3, + 0.95402000E+1, 0.19311000E+1, 0.24391880E+3, 0.243E+3, 0.214E+3, 0.95402000E+1, 0.19435000E+1, + 0.21451760E+3, 0.243E+3, 0.215E+3, 0.95402000E+1, 0.20102000E+1, 0.18261700E+3, 0.243E+3, + 0.216E+3, 0.95402000E+1, 0.19903000E+1, 0.29311980E+3, 0.243E+3, 0.220E+3, 0.95402000E+1, + 0.19349000E+1, 0.28387840E+3, 0.243E+3, 0.221E+3, 0.95402000E+1, 0.28999000E+1, 0.28758070E+3, + 0.243E+3, 0.222E+3, 0.95402000E+1, 0.38675000E+1, 0.26334090E+3, 0.243E+3, 0.223E+3, + 0.95402000E+1, 0.29110000E+1, 0.20147070E+3, 0.243E+3, 0.224E+3, 0.95402000E+1, 0.10619100E+2, + 0.17392920E+3, 0.243E+3, 0.225E+3, 0.95402000E+1, 0.98849000E+1, 0.17055570E+3, 0.243E+3, + 0.226E+3, 0.95402000E+1, 0.91376000E+1, 0.19706800E+3, 0.243E+3, 0.227E+3, 0.95402000E+1, + 0.29263000E+1, 0.18430860E+3, 0.243E+3, 0.228E+3, 0.95402000E+1, 0.65458000E+1, 0.25639330E+3, + 0.243E+3, 0.231E+3, 0.95402000E+1, 0.19315000E+1, 0.27164740E+3, 0.243E+3, 0.232E+3, + 0.95402000E+1, 0.19447000E+1, 0.25179730E+3, 0.243E+3, 0.233E+3, 0.95402000E+1, 0.19793000E+1, + 0.23610840E+3, 0.243E+3, 0.234E+3, 0.95402000E+1, 0.19812000E+1, 0.35195640E+3, 0.243E+3, + 0.238E+3, 0.95402000E+1, 0.19143000E+1, 0.34203460E+3, 0.243E+3, 0.239E+3, 0.95402000E+1, + 0.28903000E+1, 0.34602660E+3, 0.243E+3, 0.240E+3, 0.95402000E+1, 0.39106000E+1, 0.33471740E+3, + 0.243E+3, 0.241E+3, 0.95402000E+1, 0.29225000E+1, 0.29885080E+3, 0.243E+3, 0.242E+3, + 0.95402000E+1, 0.11055600E+2, 0.26586540E+3, 0.243E+3, 0.243E+3, 0.95402000E+1, 0.95402000E+1, + 0.26814200E+2, 0.244E+3, 0.100E+1, 0.88895000E+1, 0.91180000E+0, 0.18486400E+2, 0.244E+3, + 0.200E+1, 0.88895000E+1, 0.00000000E+0, 0.36441020E+3, 0.244E+3, 0.300E+1, 0.88895000E+1, + 0.00000000E+0, 0.22214890E+3, 0.244E+3, 0.400E+1, 0.88895000E+1, 0.00000000E+0, 0.15516280E+3, + 0.244E+3, 0.500E+1, 0.88895000E+1, 0.00000000E+0, 0.10802000E+3, 0.244E+3, 0.600E+1, + 0.88895000E+1, 0.00000000E+0, 0.77377200E+2, 0.244E+3, 0.700E+1, 0.88895000E+1, 0.00000000E+0, + 0.59646000E+2, 0.244E+3, 0.800E+1, 0.88895000E+1, 0.00000000E+0, 0.45913300E+2, 0.244E+3, + 0.900E+1, 0.88895000E+1, 0.00000000E+0, 0.35788400E+2, 0.244E+3, 0.100E+2, 0.88895000E+1, + 0.00000000E+0, 0.43764910E+3, 0.244E+3, 0.110E+2, 0.88895000E+1, 0.00000000E+0, 0.35061410E+3, + 0.244E+3, 0.120E+2, 0.88895000E+1, 0.00000000E+0, 0.32894340E+3, 0.244E+3, 0.130E+2, + 0.88895000E+1, 0.00000000E+0, 0.26558080E+3, 0.244E+3, 0.140E+2, 0.88895000E+1, 0.00000000E+0, + 0.21173900E+3, 0.244E+3, 0.150E+2, 0.88895000E+1, 0.00000000E+0, 0.17849350E+3, 0.244E+3, + 0.160E+2, 0.88895000E+1, 0.00000000E+0, 0.14807630E+3, 0.244E+3, 0.170E+2, 0.88895000E+1, + 0.00000000E+0, 0.12286250E+3, 0.244E+3, 0.180E+2, 0.88895000E+1, 0.00000000E+0, 0.71523760E+3, + 0.244E+3, 0.190E+2, 0.88895000E+1, 0.00000000E+0, 0.60729210E+3, 0.244E+3, 0.200E+2, + 0.88895000E+1, 0.00000000E+0, 0.50528540E+3, 0.244E+3, 0.210E+2, 0.88895000E+1, 0.00000000E+0, + 0.49186430E+3, 0.244E+3, 0.220E+2, 0.88895000E+1, 0.00000000E+0, 0.45247550E+3, 0.244E+3, + 0.230E+2, 0.88895000E+1, 0.00000000E+0, 0.35786670E+3, 0.244E+3, 0.240E+2, 0.88895000E+1, + 0.00000000E+0, 0.39219220E+3, 0.244E+3, 0.250E+2, 0.88895000E+1, 0.00000000E+0, 0.30933800E+3, + 0.244E+3, 0.260E+2, 0.88895000E+1, 0.00000000E+0, 0.32981210E+3, 0.244E+3, 0.270E+2, + 0.88895000E+1, 0.00000000E+0, 0.33808050E+3, 0.244E+3, 0.280E+2, 0.88895000E+1, 0.00000000E+0, + 0.26041990E+3, 0.244E+3, 0.290E+2, 0.88895000E+1, 0.00000000E+0, 0.27017940E+3, 0.244E+3, + 0.300E+2, 0.88895000E+1, 0.00000000E+0, 0.31812240E+3, 0.244E+3, 0.310E+2, 0.88895000E+1, + 0.00000000E+0, 0.28561020E+3, 0.244E+3, 0.320E+2, 0.88895000E+1, 0.00000000E+0, 0.24796070E+3, + 0.244E+3, 0.330E+2, 0.88895000E+1, 0.00000000E+0, 0.22516700E+3, 0.244E+3, 0.340E+2, + 0.88895000E+1, 0.00000000E+0, 0.19955490E+3, 0.244E+3, 0.350E+2, 0.88895000E+1, 0.00000000E+0, + 0.17565240E+3, 0.244E+3, 0.360E+2, 0.88895000E+1, 0.00000000E+0, 0.80500650E+3, 0.244E+3, + 0.370E+2, 0.88895000E+1, 0.00000000E+0, 0.72369110E+3, 0.244E+3, 0.380E+2, 0.88895000E+1, + 0.00000000E+0, 0.64242790E+3, 0.244E+3, 0.390E+2, 0.88895000E+1, 0.00000000E+0, 0.58255440E+3, + 0.244E+3, 0.400E+2, 0.88895000E+1, 0.00000000E+0, 0.53462660E+3, 0.244E+3, 0.410E+2, + 0.88895000E+1, 0.00000000E+0, 0.41798890E+3, 0.244E+3, 0.420E+2, 0.88895000E+1, 0.00000000E+0, + 0.46412390E+3, 0.244E+3, 0.430E+2, 0.88895000E+1, 0.00000000E+0, 0.35848400E+3, 0.244E+3, + 0.440E+2, 0.88895000E+1, 0.00000000E+0, 0.39089370E+3, 0.244E+3, 0.450E+2, 0.88895000E+1, + 0.00000000E+0, 0.36395130E+3, 0.244E+3, 0.460E+2, 0.88895000E+1, 0.00000000E+0, 0.30405500E+3, + 0.244E+3, 0.470E+2, 0.88895000E+1, 0.00000000E+0, 0.32240840E+3, 0.244E+3, 0.480E+2, + 0.88895000E+1, 0.00000000E+0, 0.39931090E+3, 0.244E+3, 0.490E+2, 0.88895000E+1, 0.00000000E+0, + 0.37418700E+3, 0.244E+3, 0.500E+2, 0.88895000E+1, 0.00000000E+0, 0.33835410E+3, 0.244E+3, + 0.510E+2, 0.88895000E+1, 0.00000000E+0, 0.31691230E+3, 0.244E+3, 0.520E+2, 0.88895000E+1, + 0.00000000E+0, 0.28960010E+3, 0.244E+3, 0.530E+2, 0.88895000E+1, 0.00000000E+0, 0.26310510E+3, + 0.244E+3, 0.540E+2, 0.88895000E+1, 0.00000000E+0, 0.98230160E+3, 0.244E+3, 0.550E+2, + 0.88895000E+1, 0.00000000E+0, 0.91991100E+3, 0.244E+3, 0.560E+2, 0.88895000E+1, 0.00000000E+0, + 0.81862810E+3, 0.244E+3, 0.570E+2, 0.88895000E+1, 0.00000000E+0, 0.39923510E+3, 0.244E+3, + 0.580E+2, 0.88895000E+1, 0.27991000E+1, 0.81904250E+3, 0.244E+3, 0.590E+2, 0.88895000E+1, + 0.00000000E+0, 0.78798460E+3, 0.244E+3, 0.600E+2, 0.88895000E+1, 0.00000000E+0, 0.76861590E+3, + 0.244E+3, 0.610E+2, 0.88895000E+1, 0.00000000E+0, 0.75074320E+3, 0.244E+3, 0.620E+2, + 0.88895000E+1, 0.00000000E+0, 0.73490660E+3, 0.244E+3, 0.630E+2, 0.88895000E+1, 0.00000000E+0, + 0.58761560E+3, 0.244E+3, 0.640E+2, 0.88895000E+1, 0.00000000E+0, 0.64899040E+3, 0.244E+3, + 0.650E+2, 0.88895000E+1, 0.00000000E+0, 0.62756590E+3, 0.244E+3, 0.660E+2, 0.88895000E+1, + 0.00000000E+0, 0.66479550E+3, 0.244E+3, 0.670E+2, 0.88895000E+1, 0.00000000E+0, 0.65083380E+3, + 0.244E+3, 0.680E+2, 0.88895000E+1, 0.00000000E+0, 0.63836820E+3, 0.244E+3, 0.690E+2, + 0.88895000E+1, 0.00000000E+0, 0.63042130E+3, 0.244E+3, 0.700E+2, 0.88895000E+1, 0.00000000E+0, + 0.53719250E+3, 0.244E+3, 0.710E+2, 0.88895000E+1, 0.00000000E+0, 0.53511600E+3, 0.244E+3, + 0.720E+2, 0.88895000E+1, 0.00000000E+0, 0.49290160E+3, 0.244E+3, 0.730E+2, 0.88895000E+1, + 0.00000000E+0, 0.42019700E+3, 0.244E+3, 0.740E+2, 0.88895000E+1, 0.00000000E+0, 0.42865240E+3, + 0.244E+3, 0.750E+2, 0.88895000E+1, 0.00000000E+0, 0.39172610E+3, 0.244E+3, 0.760E+2, + 0.88895000E+1, 0.00000000E+0, 0.36124810E+3, 0.244E+3, 0.770E+2, 0.88895000E+1, 0.00000000E+0, + 0.30292430E+3, 0.244E+3, 0.780E+2, 0.88895000E+1, 0.00000000E+0, 0.28406330E+3, 0.244E+3, + 0.790E+2, 0.88895000E+1, 0.00000000E+0, 0.29267440E+3, 0.244E+3, 0.800E+2, 0.88895000E+1, + 0.00000000E+0, 0.41285870E+3, 0.244E+3, 0.810E+2, 0.88895000E+1, 0.00000000E+0, 0.40737440E+3, + 0.244E+3, 0.820E+2, 0.88895000E+1, 0.00000000E+0, 0.37897400E+3, 0.244E+3, 0.830E+2, + 0.88895000E+1, 0.00000000E+0, 0.36421970E+3, 0.244E+3, 0.840E+2, 0.88895000E+1, 0.00000000E+0, + 0.33940270E+3, 0.244E+3, 0.850E+2, 0.88895000E+1, 0.00000000E+0, 0.31398490E+3, 0.244E+3, + 0.860E+2, 0.88895000E+1, 0.00000000E+0, 0.93738470E+3, 0.244E+3, 0.870E+2, 0.88895000E+1, + 0.00000000E+0, 0.91624010E+3, 0.244E+3, 0.880E+2, 0.88895000E+1, 0.00000000E+0, 0.81940930E+3, + 0.244E+3, 0.890E+2, 0.88895000E+1, 0.00000000E+0, 0.74758980E+3, 0.244E+3, 0.900E+2, + 0.88895000E+1, 0.00000000E+0, 0.73789240E+3, 0.244E+3, 0.910E+2, 0.88895000E+1, 0.00000000E+0, + 0.71483440E+3, 0.244E+3, 0.920E+2, 0.88895000E+1, 0.00000000E+0, 0.72948730E+3, 0.244E+3, + 0.930E+2, 0.88895000E+1, 0.00000000E+0, 0.70750950E+3, 0.244E+3, 0.940E+2, 0.88895000E+1, + 0.00000000E+0, 0.42162700E+2, 0.244E+3, 0.101E+3, 0.88895000E+1, 0.00000000E+0, 0.12989070E+3, + 0.244E+3, 0.103E+3, 0.88895000E+1, 0.98650000E+0, 0.16698720E+3, 0.244E+3, 0.104E+3, + 0.88895000E+1, 0.98080000E+0, 0.13166500E+3, 0.244E+3, 0.105E+3, 0.88895000E+1, 0.97060000E+0, + 0.10141840E+3, 0.244E+3, 0.106E+3, 0.88895000E+1, 0.98680000E+0, 0.72295000E+2, 0.244E+3, + 0.107E+3, 0.88895000E+1, 0.99440000E+0, 0.53786300E+2, 0.244E+3, 0.108E+3, 0.88895000E+1, + 0.99250000E+0, 0.37996100E+2, 0.244E+3, 0.109E+3, 0.88895000E+1, 0.99820000E+0, 0.18913000E+3, + 0.244E+3, 0.111E+3, 0.88895000E+1, 0.96840000E+0, 0.29149160E+3, 0.244E+3, 0.112E+3, + 0.88895000E+1, 0.96280000E+0, 0.29952560E+3, 0.244E+3, 0.113E+3, 0.88895000E+1, 0.96480000E+0, + 0.24646800E+3, 0.244E+3, 0.114E+3, 0.88895000E+1, 0.95070000E+0, 0.20575330E+3, 0.244E+3, + 0.115E+3, 0.88895000E+1, 0.99470000E+0, 0.17650780E+3, 0.244E+3, 0.116E+3, 0.88895000E+1, + 0.99480000E+0, 0.14652980E+3, 0.244E+3, 0.117E+3, 0.88895000E+1, 0.99720000E+0, 0.26580330E+3, + 0.244E+3, 0.119E+3, 0.88895000E+1, 0.97670000E+0, 0.48833520E+3, 0.244E+3, 0.120E+3, + 0.88895000E+1, 0.98310000E+0, 0.26990590E+3, 0.244E+3, 0.121E+3, 0.88895000E+1, 0.18627000E+1, + 0.26094910E+3, 0.244E+3, 0.122E+3, 0.88895000E+1, 0.18299000E+1, 0.25571250E+3, 0.244E+3, + 0.123E+3, 0.88895000E+1, 0.19138000E+1, 0.25285150E+3, 0.244E+3, 0.124E+3, 0.88895000E+1, + 0.18269000E+1, 0.23492290E+3, 0.244E+3, 0.125E+3, 0.88895000E+1, 0.16406000E+1, 0.21825880E+3, + 0.244E+3, 0.126E+3, 0.88895000E+1, 0.16483000E+1, 0.20833810E+3, 0.244E+3, 0.127E+3, + 0.88895000E+1, 0.17149000E+1, 0.20352280E+3, 0.244E+3, 0.128E+3, 0.88895000E+1, 0.17937000E+1, + 0.19956410E+3, 0.244E+3, 0.129E+3, 0.88895000E+1, 0.95760000E+0, 0.18984580E+3, 0.244E+3, + 0.130E+3, 0.88895000E+1, 0.19419000E+1, 0.30020530E+3, 0.244E+3, 0.131E+3, 0.88895000E+1, + 0.96010000E+0, 0.26845380E+3, 0.244E+3, 0.132E+3, 0.88895000E+1, 0.94340000E+0, 0.24404670E+3, + 0.244E+3, 0.133E+3, 0.88895000E+1, 0.98890000E+0, 0.22523300E+3, 0.244E+3, 0.134E+3, + 0.88895000E+1, 0.99010000E+0, 0.20082890E+3, 0.244E+3, 0.135E+3, 0.88895000E+1, 0.99740000E+0, + 0.31880410E+3, 0.244E+3, 0.137E+3, 0.88895000E+1, 0.97380000E+0, 0.59403870E+3, 0.244E+3, + 0.138E+3, 0.88895000E+1, 0.98010000E+0, 0.46651060E+3, 0.244E+3, 0.139E+3, 0.88895000E+1, + 0.19153000E+1, 0.35708190E+3, 0.244E+3, 0.140E+3, 0.88895000E+1, 0.19355000E+1, 0.36054300E+3, + 0.244E+3, 0.141E+3, 0.88895000E+1, 0.19545000E+1, 0.33781860E+3, 0.244E+3, 0.142E+3, + 0.88895000E+1, 0.19420000E+1, 0.37403450E+3, 0.244E+3, 0.143E+3, 0.88895000E+1, 0.16682000E+1, + 0.29766760E+3, 0.244E+3, 0.144E+3, 0.88895000E+1, 0.18584000E+1, 0.27903330E+3, 0.244E+3, + 0.145E+3, 0.88895000E+1, 0.19003000E+1, 0.25985840E+3, 0.244E+3, 0.146E+3, 0.88895000E+1, + 0.18630000E+1, 0.25103670E+3, 0.244E+3, 0.147E+3, 0.88895000E+1, 0.96790000E+0, 0.24993600E+3, + 0.244E+3, 0.148E+3, 0.88895000E+1, 0.19539000E+1, 0.38254570E+3, 0.244E+3, 0.149E+3, + 0.88895000E+1, 0.96330000E+0, 0.35105910E+3, 0.244E+3, 0.150E+3, 0.88895000E+1, 0.95140000E+0, + 0.33229950E+3, 0.244E+3, 0.151E+3, 0.88895000E+1, 0.97490000E+0, 0.31685780E+3, 0.244E+3, + 0.152E+3, 0.88895000E+1, 0.98110000E+0, 0.29224830E+3, 0.244E+3, 0.153E+3, 0.88895000E+1, + 0.99680000E+0, 0.38090100E+3, 0.244E+3, 0.155E+3, 0.88895000E+1, 0.99090000E+0, 0.76731680E+3, + 0.244E+3, 0.156E+3, 0.88895000E+1, 0.97970000E+0, 0.58947680E+3, 0.244E+3, 0.157E+3, + 0.88895000E+1, 0.19373000E+1, 0.38757590E+3, 0.244E+3, 0.159E+3, 0.88895000E+1, 0.29425000E+1, + 0.37963090E+3, 0.244E+3, 0.160E+3, 0.88895000E+1, 0.29455000E+1, 0.36791330E+3, 0.244E+3, + 0.161E+3, 0.88895000E+1, 0.29413000E+1, 0.36893680E+3, 0.244E+3, 0.162E+3, 0.88895000E+1, + 0.29300000E+1, 0.35339960E+3, 0.244E+3, 0.163E+3, 0.88895000E+1, 0.18286000E+1, 0.37083500E+3, + 0.244E+3, 0.164E+3, 0.88895000E+1, 0.28732000E+1, 0.34904790E+3, 0.244E+3, 0.165E+3, + 0.88895000E+1, 0.29086000E+1, 0.35387000E+3, 0.244E+3, 0.166E+3, 0.88895000E+1, 0.28965000E+1, + 0.33189420E+3, 0.244E+3, 0.167E+3, 0.88895000E+1, 0.29242000E+1, 0.32266300E+3, 0.244E+3, + 0.168E+3, 0.88895000E+1, 0.29282000E+1, 0.32037880E+3, 0.244E+3, 0.169E+3, 0.88895000E+1, + 0.29246000E+1, 0.33542660E+3, 0.244E+3, 0.170E+3, 0.88895000E+1, 0.28482000E+1, 0.30995020E+3, + 0.244E+3, 0.171E+3, 0.88895000E+1, 0.29219000E+1, 0.40980230E+3, 0.244E+3, 0.172E+3, + 0.88895000E+1, 0.19254000E+1, 0.38380190E+3, 0.244E+3, 0.173E+3, 0.88895000E+1, 0.19459000E+1, + 0.35352930E+3, 0.244E+3, 0.174E+3, 0.88895000E+1, 0.19292000E+1, 0.35500360E+3, 0.244E+3, + 0.175E+3, 0.88895000E+1, 0.18104000E+1, 0.31737010E+3, 0.244E+3, 0.176E+3, 0.88895000E+1, + 0.18858000E+1, 0.29978350E+3, 0.244E+3, 0.177E+3, 0.88895000E+1, 0.18648000E+1, 0.28707700E+3, + 0.244E+3, 0.178E+3, 0.88895000E+1, 0.19188000E+1, 0.27465620E+3, 0.244E+3, 0.179E+3, + 0.88895000E+1, 0.98460000E+0, 0.26716680E+3, 0.244E+3, 0.180E+3, 0.88895000E+1, 0.19896000E+1, + 0.41292460E+3, 0.244E+3, 0.181E+3, 0.88895000E+1, 0.92670000E+0, 0.38150770E+3, 0.244E+3, + 0.182E+3, 0.88895000E+1, 0.93830000E+0, 0.37276100E+3, 0.244E+3, 0.183E+3, 0.88895000E+1, + 0.98200000E+0, 0.36468730E+3, 0.244E+3, 0.184E+3, 0.88895000E+1, 0.98150000E+0, 0.34349450E+3, + 0.244E+3, 0.185E+3, 0.88895000E+1, 0.99540000E+0, 0.42926480E+3, 0.244E+3, 0.187E+3, + 0.88895000E+1, 0.97050000E+0, 0.76957810E+3, 0.244E+3, 0.188E+3, 0.88895000E+1, 0.96620000E+0, + 0.45825190E+3, 0.244E+3, 0.189E+3, 0.88895000E+1, 0.29070000E+1, 0.52305080E+3, 0.244E+3, + 0.190E+3, 0.88895000E+1, 0.28844000E+1, 0.47040220E+3, 0.244E+3, 0.191E+3, 0.88895000E+1, + 0.28738000E+1, 0.41948400E+3, 0.244E+3, 0.192E+3, 0.88895000E+1, 0.28878000E+1, 0.40459980E+3, + 0.244E+3, 0.193E+3, 0.88895000E+1, 0.29095000E+1, 0.47467630E+3, 0.244E+3, 0.194E+3, + 0.88895000E+1, 0.19209000E+1, 0.11243910E+3, 0.244E+3, 0.204E+3, 0.88895000E+1, 0.19697000E+1, + 0.11151080E+3, 0.244E+3, 0.205E+3, 0.88895000E+1, 0.19441000E+1, 0.83694600E+2, 0.244E+3, + 0.206E+3, 0.88895000E+1, 0.19985000E+1, 0.68072000E+2, 0.244E+3, 0.207E+3, 0.88895000E+1, + 0.20143000E+1, 0.47784700E+2, 0.244E+3, 0.208E+3, 0.88895000E+1, 0.19887000E+1, 0.19631020E+3, + 0.244E+3, 0.212E+3, 0.88895000E+1, 0.19496000E+1, 0.23698540E+3, 0.244E+3, 0.213E+3, + 0.88895000E+1, 0.19311000E+1, 0.23009880E+3, 0.244E+3, 0.214E+3, 0.88895000E+1, 0.19435000E+1, + 0.20278480E+3, 0.244E+3, 0.215E+3, 0.88895000E+1, 0.20102000E+1, 0.17302410E+3, 0.244E+3, + 0.216E+3, 0.88895000E+1, 0.19903000E+1, 0.27628420E+3, 0.244E+3, 0.220E+3, 0.88895000E+1, + 0.19349000E+1, 0.26790880E+3, 0.244E+3, 0.221E+3, 0.88895000E+1, 0.28999000E+1, 0.27143870E+3, + 0.244E+3, 0.222E+3, 0.88895000E+1, 0.38675000E+1, 0.24860210E+3, 0.244E+3, 0.223E+3, + 0.88895000E+1, 0.29110000E+1, 0.19071700E+3, 0.244E+3, 0.224E+3, 0.88895000E+1, 0.10619100E+2, + 0.16490150E+3, 0.244E+3, 0.225E+3, 0.88895000E+1, 0.98849000E+1, 0.16168180E+3, 0.244E+3, + 0.226E+3, 0.88895000E+1, 0.91376000E+1, 0.18635590E+3, 0.244E+3, 0.227E+3, 0.88895000E+1, + 0.29263000E+1, 0.17440700E+3, 0.244E+3, 0.228E+3, 0.88895000E+1, 0.65458000E+1, 0.24186460E+3, + 0.244E+3, 0.231E+3, 0.88895000E+1, 0.19315000E+1, 0.25639940E+3, 0.244E+3, 0.232E+3, + 0.88895000E+1, 0.19447000E+1, 0.23809660E+3, 0.244E+3, 0.233E+3, 0.88895000E+1, 0.19793000E+1, + 0.22355550E+3, 0.244E+3, 0.234E+3, 0.88895000E+1, 0.19812000E+1, 0.33186870E+3, 0.244E+3, + 0.238E+3, 0.88895000E+1, 0.19143000E+1, 0.32301240E+3, 0.244E+3, 0.239E+3, 0.88895000E+1, + 0.28903000E+1, 0.32694770E+3, 0.244E+3, 0.240E+3, 0.88895000E+1, 0.39106000E+1, 0.31629900E+3, + 0.244E+3, 0.241E+3, 0.88895000E+1, 0.29225000E+1, 0.28288320E+3, 0.244E+3, 0.242E+3, + 0.88895000E+1, 0.11055600E+2, 0.25200750E+3, 0.244E+3, 0.243E+3, 0.88895000E+1, 0.95402000E+1, + 0.23900710E+3, 0.244E+3, 0.244E+3, 0.88895000E+1, 0.88895000E+1, 0.26980300E+2, 0.245E+3, + 0.100E+1, 0.29696000E+1, 0.91180000E+0, 0.18402600E+2, 0.245E+3, 0.200E+1, 0.29696000E+1, + 0.00000000E+0, 0.39027660E+3, 0.245E+3, 0.300E+1, 0.29696000E+1, 0.00000000E+0, 0.23089960E+3, + 0.245E+3, 0.400E+1, 0.29696000E+1, 0.00000000E+0, 0.15871240E+3, 0.245E+3, 0.500E+1, + 0.29696000E+1, 0.00000000E+0, 0.10928410E+3, 0.245E+3, 0.600E+1, 0.29696000E+1, 0.00000000E+0, + 0.77707400E+2, 0.245E+3, 0.700E+1, 0.29696000E+1, 0.00000000E+0, 0.59619400E+2, 0.245E+3, + 0.800E+1, 0.29696000E+1, 0.00000000E+0, 0.45728900E+2, 0.245E+3, 0.900E+1, 0.29696000E+1, + 0.00000000E+0, 0.35556300E+2, 0.245E+3, 0.100E+2, 0.29696000E+1, 0.00000000E+0, 0.46780860E+3, + 0.245E+3, 0.110E+2, 0.29696000E+1, 0.00000000E+0, 0.36632450E+3, 0.245E+3, 0.120E+2, + 0.29696000E+1, 0.00000000E+0, 0.34074550E+3, 0.245E+3, 0.130E+2, 0.29696000E+1, 0.00000000E+0, + 0.27209130E+3, 0.245E+3, 0.140E+2, 0.29696000E+1, 0.00000000E+0, 0.21501450E+3, 0.245E+3, + 0.150E+2, 0.29696000E+1, 0.00000000E+0, 0.18027000E+3, 0.245E+3, 0.160E+2, 0.29696000E+1, + 0.00000000E+0, 0.14881480E+3, 0.245E+3, 0.170E+2, 0.29696000E+1, 0.00000000E+0, 0.12298220E+3, + 0.245E+3, 0.180E+2, 0.29696000E+1, 0.00000000E+0, 0.76742050E+3, 0.245E+3, 0.190E+2, + 0.29696000E+1, 0.00000000E+0, 0.64014310E+3, 0.245E+3, 0.200E+2, 0.29696000E+1, 0.00000000E+0, + 0.53051110E+3, 0.245E+3, 0.210E+2, 0.29696000E+1, 0.00000000E+0, 0.51447440E+3, 0.245E+3, + 0.220E+2, 0.29696000E+1, 0.00000000E+0, 0.47224010E+3, 0.245E+3, 0.230E+2, 0.29696000E+1, + 0.00000000E+0, 0.37322320E+3, 0.245E+3, 0.240E+2, 0.29696000E+1, 0.00000000E+0, 0.40804110E+3, + 0.245E+3, 0.250E+2, 0.29696000E+1, 0.00000000E+0, 0.32148500E+3, 0.245E+3, 0.260E+2, + 0.29696000E+1, 0.00000000E+0, 0.34137600E+3, 0.245E+3, 0.270E+2, 0.29696000E+1, 0.00000000E+0, + 0.35071710E+3, 0.245E+3, 0.280E+2, 0.29696000E+1, 0.00000000E+0, 0.26998860E+3, 0.245E+3, + 0.290E+2, 0.29696000E+1, 0.00000000E+0, 0.27836200E+3, 0.245E+3, 0.300E+2, 0.29696000E+1, + 0.00000000E+0, 0.32839780E+3, 0.245E+3, 0.310E+2, 0.29696000E+1, 0.00000000E+0, 0.29239200E+3, + 0.245E+3, 0.320E+2, 0.29696000E+1, 0.00000000E+0, 0.25200000E+3, 0.245E+3, 0.330E+2, + 0.29696000E+1, 0.00000000E+0, 0.22783110E+3, 0.245E+3, 0.340E+2, 0.29696000E+1, 0.00000000E+0, + 0.20104720E+3, 0.245E+3, 0.350E+2, 0.29696000E+1, 0.00000000E+0, 0.17630020E+3, 0.245E+3, + 0.360E+2, 0.29696000E+1, 0.00000000E+0, 0.86212220E+3, 0.245E+3, 0.370E+2, 0.29696000E+1, + 0.00000000E+0, 0.76317560E+3, 0.245E+3, 0.380E+2, 0.29696000E+1, 0.00000000E+0, 0.67268360E+3, + 0.245E+3, 0.390E+2, 0.29696000E+1, 0.00000000E+0, 0.60730800E+3, 0.245E+3, 0.400E+2, + 0.29696000E+1, 0.00000000E+0, 0.55572040E+3, 0.245E+3, 0.410E+2, 0.29696000E+1, 0.00000000E+0, + 0.43227820E+3, 0.245E+3, 0.420E+2, 0.29696000E+1, 0.00000000E+0, 0.48090810E+3, 0.245E+3, + 0.430E+2, 0.29696000E+1, 0.00000000E+0, 0.36943280E+3, 0.245E+3, 0.440E+2, 0.29696000E+1, + 0.00000000E+0, 0.40294980E+3, 0.245E+3, 0.450E+2, 0.29696000E+1, 0.00000000E+0, 0.37453940E+3, + 0.245E+3, 0.460E+2, 0.29696000E+1, 0.00000000E+0, 0.31311430E+3, 0.245E+3, 0.470E+2, + 0.29696000E+1, 0.00000000E+0, 0.33108150E+3, 0.245E+3, 0.480E+2, 0.29696000E+1, 0.00000000E+0, + 0.41228890E+3, 0.245E+3, 0.490E+2, 0.29696000E+1, 0.00000000E+0, 0.38378510E+3, 0.245E+3, + 0.500E+2, 0.29696000E+1, 0.00000000E+0, 0.34480820E+3, 0.245E+3, 0.510E+2, 0.29696000E+1, + 0.00000000E+0, 0.32172250E+3, 0.245E+3, 0.520E+2, 0.29696000E+1, 0.00000000E+0, 0.29282270E+3, + 0.245E+3, 0.530E+2, 0.29696000E+1, 0.00000000E+0, 0.26506110E+3, 0.245E+3, 0.540E+2, + 0.29696000E+1, 0.00000000E+0, 0.10513610E+4, 0.245E+3, 0.550E+2, 0.29696000E+1, 0.00000000E+0, + 0.97214520E+3, 0.245E+3, 0.560E+2, 0.29696000E+1, 0.00000000E+0, 0.85902210E+3, 0.245E+3, + 0.570E+2, 0.29696000E+1, 0.00000000E+0, 0.40725580E+3, 0.245E+3, 0.580E+2, 0.29696000E+1, + 0.27991000E+1, 0.86353440E+3, 0.245E+3, 0.590E+2, 0.29696000E+1, 0.00000000E+0, 0.82985260E+3, + 0.245E+3, 0.600E+2, 0.29696000E+1, 0.00000000E+0, 0.80920320E+3, 0.245E+3, 0.610E+2, + 0.29696000E+1, 0.00000000E+0, 0.79017910E+3, 0.245E+3, 0.620E+2, 0.29696000E+1, 0.00000000E+0, + 0.77331220E+3, 0.245E+3, 0.630E+2, 0.29696000E+1, 0.00000000E+0, 0.61339590E+3, 0.245E+3, + 0.640E+2, 0.29696000E+1, 0.00000000E+0, 0.68497150E+3, 0.245E+3, 0.650E+2, 0.29696000E+1, + 0.00000000E+0, 0.66143730E+3, 0.245E+3, 0.660E+2, 0.29696000E+1, 0.00000000E+0, 0.69834480E+3, + 0.245E+3, 0.670E+2, 0.29696000E+1, 0.00000000E+0, 0.68356120E+3, 0.245E+3, 0.680E+2, + 0.29696000E+1, 0.00000000E+0, 0.67029400E+3, 0.245E+3, 0.690E+2, 0.29696000E+1, 0.00000000E+0, + 0.66217850E+3, 0.245E+3, 0.700E+2, 0.29696000E+1, 0.00000000E+0, 0.56118900E+3, 0.245E+3, + 0.710E+2, 0.29696000E+1, 0.00000000E+0, 0.55510630E+3, 0.245E+3, 0.720E+2, 0.29696000E+1, + 0.00000000E+0, 0.50914750E+3, 0.245E+3, 0.730E+2, 0.29696000E+1, 0.00000000E+0, 0.43253910E+3, + 0.245E+3, 0.740E+2, 0.29696000E+1, 0.00000000E+0, 0.44058660E+3, 0.245E+3, 0.750E+2, + 0.29696000E+1, 0.00000000E+0, 0.40122800E+3, 0.245E+3, 0.760E+2, 0.29696000E+1, 0.00000000E+0, + 0.36898490E+3, 0.245E+3, 0.770E+2, 0.29696000E+1, 0.00000000E+0, 0.30849150E+3, 0.245E+3, + 0.780E+2, 0.29696000E+1, 0.00000000E+0, 0.28895780E+3, 0.245E+3, 0.790E+2, 0.29696000E+1, + 0.00000000E+0, 0.29737620E+3, 0.245E+3, 0.800E+2, 0.29696000E+1, 0.00000000E+0, 0.42541930E+3, + 0.245E+3, 0.810E+2, 0.29696000E+1, 0.00000000E+0, 0.41768300E+3, 0.245E+3, 0.820E+2, + 0.29696000E+1, 0.00000000E+0, 0.38636610E+3, 0.245E+3, 0.830E+2, 0.29696000E+1, 0.00000000E+0, + 0.37011470E+3, 0.245E+3, 0.840E+2, 0.29696000E+1, 0.00000000E+0, 0.34358050E+3, 0.245E+3, + 0.850E+2, 0.29696000E+1, 0.00000000E+0, 0.31677380E+3, 0.245E+3, 0.860E+2, 0.29696000E+1, + 0.00000000E+0, 0.99738560E+3, 0.245E+3, 0.870E+2, 0.29696000E+1, 0.00000000E+0, 0.96461400E+3, + 0.245E+3, 0.880E+2, 0.29696000E+1, 0.00000000E+0, 0.85721330E+3, 0.245E+3, 0.890E+2, + 0.29696000E+1, 0.00000000E+0, 0.77636620E+3, 0.245E+3, 0.900E+2, 0.29696000E+1, 0.00000000E+0, + 0.76896120E+3, 0.245E+3, 0.910E+2, 0.29696000E+1, 0.00000000E+0, 0.74479890E+3, 0.245E+3, + 0.920E+2, 0.29696000E+1, 0.00000000E+0, 0.76357260E+3, 0.245E+3, 0.930E+2, 0.29696000E+1, + 0.00000000E+0, 0.73996210E+3, 0.245E+3, 0.940E+2, 0.29696000E+1, 0.00000000E+0, 0.42771400E+2, + 0.245E+3, 0.101E+3, 0.29696000E+1, 0.00000000E+0, 0.13469310E+3, 0.245E+3, 0.103E+3, + 0.29696000E+1, 0.98650000E+0, 0.17260210E+3, 0.245E+3, 0.104E+3, 0.29696000E+1, 0.98080000E+0, + 0.13425050E+3, 0.245E+3, 0.105E+3, 0.29696000E+1, 0.97060000E+0, 0.10261550E+3, 0.245E+3, + 0.106E+3, 0.29696000E+1, 0.98680000E+0, 0.72586300E+2, 0.245E+3, 0.107E+3, 0.29696000E+1, + 0.99440000E+0, 0.53693400E+2, 0.245E+3, 0.108E+3, 0.29696000E+1, 0.99250000E+0, 0.37696700E+2, + 0.245E+3, 0.109E+3, 0.29696000E+1, 0.99820000E+0, 0.19669260E+3, 0.245E+3, 0.111E+3, + 0.29696000E+1, 0.96840000E+0, 0.30353120E+3, 0.245E+3, 0.112E+3, 0.29696000E+1, 0.96280000E+0, + 0.30963670E+3, 0.245E+3, 0.113E+3, 0.29696000E+1, 0.96480000E+0, 0.25211010E+3, 0.245E+3, + 0.114E+3, 0.29696000E+1, 0.95070000E+0, 0.20887230E+3, 0.245E+3, 0.115E+3, 0.29696000E+1, + 0.99470000E+0, 0.17828770E+3, 0.245E+3, 0.116E+3, 0.29696000E+1, 0.99480000E+0, 0.14727550E+3, + 0.245E+3, 0.117E+3, 0.29696000E+1, 0.99720000E+0, 0.27459280E+3, 0.245E+3, 0.119E+3, + 0.29696000E+1, 0.97670000E+0, 0.51413850E+3, 0.245E+3, 0.120E+3, 0.29696000E+1, 0.98310000E+0, + 0.27656690E+3, 0.245E+3, 0.121E+3, 0.29696000E+1, 0.18627000E+1, 0.26729850E+3, 0.245E+3, + 0.122E+3, 0.29696000E+1, 0.18299000E+1, 0.26198070E+3, 0.245E+3, 0.123E+3, 0.29696000E+1, + 0.19138000E+1, 0.25931910E+3, 0.245E+3, 0.124E+3, 0.29696000E+1, 0.18269000E+1, 0.23979050E+3, + 0.245E+3, 0.125E+3, 0.29696000E+1, 0.16406000E+1, 0.22246400E+3, 0.245E+3, 0.126E+3, + 0.29696000E+1, 0.16483000E+1, 0.21235000E+3, 0.245E+3, 0.127E+3, 0.29696000E+1, 0.17149000E+1, + 0.20752820E+3, 0.245E+3, 0.128E+3, 0.29696000E+1, 0.17937000E+1, 0.20425110E+3, 0.245E+3, + 0.129E+3, 0.29696000E+1, 0.95760000E+0, 0.19302210E+3, 0.245E+3, 0.130E+3, 0.29696000E+1, + 0.19419000E+1, 0.30923520E+3, 0.245E+3, 0.131E+3, 0.29696000E+1, 0.96010000E+0, 0.27429900E+3, + 0.245E+3, 0.132E+3, 0.29696000E+1, 0.94340000E+0, 0.24791670E+3, 0.245E+3, 0.133E+3, + 0.29696000E+1, 0.98890000E+0, 0.22791320E+3, 0.245E+3, 0.134E+3, 0.29696000E+1, 0.99010000E+0, + 0.20237580E+3, 0.245E+3, 0.135E+3, 0.29696000E+1, 0.99740000E+0, 0.32868890E+3, 0.245E+3, + 0.137E+3, 0.29696000E+1, 0.97380000E+0, 0.62589490E+3, 0.245E+3, 0.138E+3, 0.29696000E+1, + 0.98010000E+0, 0.48472570E+3, 0.245E+3, 0.139E+3, 0.29696000E+1, 0.19153000E+1, 0.36605390E+3, + 0.245E+3, 0.140E+3, 0.29696000E+1, 0.19355000E+1, 0.36967440E+3, 0.245E+3, 0.141E+3, + 0.29696000E+1, 0.19545000E+1, 0.34576000E+3, 0.245E+3, 0.142E+3, 0.29696000E+1, 0.19420000E+1, + 0.38525950E+3, 0.245E+3, 0.143E+3, 0.29696000E+1, 0.16682000E+1, 0.30329340E+3, 0.245E+3, + 0.144E+3, 0.29696000E+1, 0.18584000E+1, 0.28418210E+3, 0.245E+3, 0.145E+3, 0.29696000E+1, + 0.19003000E+1, 0.26443210E+3, 0.245E+3, 0.146E+3, 0.29696000E+1, 0.18630000E+1, 0.25564790E+3, + 0.245E+3, 0.147E+3, 0.29696000E+1, 0.96790000E+0, 0.25366630E+3, 0.245E+3, 0.148E+3, + 0.29696000E+1, 0.19539000E+1, 0.39403700E+3, 0.245E+3, 0.149E+3, 0.29696000E+1, 0.96330000E+0, + 0.35913800E+3, 0.245E+3, 0.150E+3, 0.29696000E+1, 0.95140000E+0, 0.33834720E+3, 0.245E+3, + 0.151E+3, 0.29696000E+1, 0.97490000E+0, 0.32158990E+3, 0.245E+3, 0.152E+3, 0.29696000E+1, + 0.98110000E+0, 0.29551790E+3, 0.245E+3, 0.153E+3, 0.29696000E+1, 0.99680000E+0, 0.39060480E+3, + 0.245E+3, 0.155E+3, 0.29696000E+1, 0.99090000E+0, 0.81058950E+3, 0.245E+3, 0.156E+3, + 0.29696000E+1, 0.97970000E+0, 0.61313650E+3, 0.245E+3, 0.157E+3, 0.29696000E+1, 0.19373000E+1, + 0.39521610E+3, 0.245E+3, 0.159E+3, 0.29696000E+1, 0.29425000E+1, 0.38709050E+3, 0.245E+3, + 0.160E+3, 0.29696000E+1, 0.29455000E+1, 0.37502280E+3, 0.245E+3, 0.161E+3, 0.29696000E+1, + 0.29413000E+1, 0.37642310E+3, 0.245E+3, 0.162E+3, 0.29696000E+1, 0.29300000E+1, 0.36171140E+3, + 0.245E+3, 0.163E+3, 0.29696000E+1, 0.18286000E+1, 0.37848060E+3, 0.245E+3, 0.164E+3, + 0.29696000E+1, 0.28732000E+1, 0.35595940E+3, 0.245E+3, 0.165E+3, 0.29696000E+1, 0.29086000E+1, + 0.36149530E+3, 0.245E+3, 0.166E+3, 0.29696000E+1, 0.28965000E+1, 0.33818990E+3, 0.245E+3, + 0.167E+3, 0.29696000E+1, 0.29242000E+1, 0.32868340E+3, 0.245E+3, 0.168E+3, 0.29696000E+1, + 0.29282000E+1, 0.32643780E+3, 0.245E+3, 0.169E+3, 0.29696000E+1, 0.29246000E+1, 0.34224650E+3, + 0.245E+3, 0.170E+3, 0.29696000E+1, 0.28482000E+1, 0.31566390E+3, 0.245E+3, 0.171E+3, + 0.29696000E+1, 0.29219000E+1, 0.42204710E+3, 0.245E+3, 0.172E+3, 0.29696000E+1, 0.19254000E+1, + 0.39370480E+3, 0.245E+3, 0.173E+3, 0.29696000E+1, 0.19459000E+1, 0.36119710E+3, 0.245E+3, + 0.174E+3, 0.29696000E+1, 0.19292000E+1, 0.36399550E+3, 0.245E+3, 0.175E+3, 0.29696000E+1, + 0.18104000E+1, 0.32246250E+3, 0.245E+3, 0.176E+3, 0.29696000E+1, 0.18858000E+1, 0.30419920E+3, + 0.245E+3, 0.177E+3, 0.29696000E+1, 0.18648000E+1, 0.29108740E+3, 0.245E+3, 0.178E+3, + 0.29696000E+1, 0.19188000E+1, 0.27853890E+3, 0.245E+3, 0.179E+3, 0.29696000E+1, 0.98460000E+0, + 0.27011300E+3, 0.245E+3, 0.180E+3, 0.29696000E+1, 0.19896000E+1, 0.42470380E+3, 0.245E+3, + 0.181E+3, 0.29696000E+1, 0.92670000E+0, 0.38982000E+3, 0.245E+3, 0.182E+3, 0.29696000E+1, + 0.93830000E+0, 0.37955200E+3, 0.245E+3, 0.183E+3, 0.29696000E+1, 0.98200000E+0, 0.37040460E+3, + 0.245E+3, 0.184E+3, 0.29696000E+1, 0.98150000E+0, 0.34770470E+3, 0.245E+3, 0.185E+3, + 0.29696000E+1, 0.99540000E+0, 0.44002170E+3, 0.245E+3, 0.187E+3, 0.29696000E+1, 0.97050000E+0, + 0.80924300E+3, 0.245E+3, 0.188E+3, 0.29696000E+1, 0.96620000E+0, 0.46736610E+3, 0.245E+3, + 0.189E+3, 0.29696000E+1, 0.29070000E+1, 0.53649470E+3, 0.245E+3, 0.190E+3, 0.29696000E+1, + 0.28844000E+1, 0.48151730E+3, 0.245E+3, 0.191E+3, 0.29696000E+1, 0.28738000E+1, 0.42750540E+3, + 0.245E+3, 0.192E+3, 0.29696000E+1, 0.28878000E+1, 0.41194110E+3, 0.245E+3, 0.193E+3, + 0.29696000E+1, 0.29095000E+1, 0.48914000E+3, 0.245E+3, 0.194E+3, 0.29696000E+1, 0.19209000E+1, + 0.11455870E+3, 0.245E+3, 0.204E+3, 0.29696000E+1, 0.19697000E+1, 0.11335080E+3, 0.245E+3, + 0.205E+3, 0.29696000E+1, 0.19441000E+1, 0.84329800E+2, 0.245E+3, 0.206E+3, 0.29696000E+1, + 0.19985000E+1, 0.68302900E+2, 0.245E+3, 0.207E+3, 0.29696000E+1, 0.20143000E+1, 0.47642200E+2, + 0.245E+3, 0.208E+3, 0.29696000E+1, 0.19887000E+1, 0.20139880E+3, 0.245E+3, 0.212E+3, + 0.29696000E+1, 0.19496000E+1, 0.24332100E+3, 0.245E+3, 0.213E+3, 0.29696000E+1, 0.19311000E+1, + 0.23501080E+3, 0.245E+3, 0.214E+3, 0.29696000E+1, 0.19435000E+1, 0.20596780E+3, 0.245E+3, + 0.215E+3, 0.29696000E+1, 0.20102000E+1, 0.17475170E+3, 0.245E+3, 0.216E+3, 0.29696000E+1, + 0.19903000E+1, 0.28343990E+3, 0.245E+3, 0.220E+3, 0.29696000E+1, 0.19349000E+1, 0.27371790E+3, + 0.245E+3, 0.221E+3, 0.29696000E+1, 0.28999000E+1, 0.27724060E+3, 0.245E+3, 0.222E+3, + 0.29696000E+1, 0.38675000E+1, 0.25398530E+3, 0.245E+3, 0.223E+3, 0.29696000E+1, 0.29110000E+1, + 0.19359700E+3, 0.245E+3, 0.224E+3, 0.29696000E+1, 0.10619100E+2, 0.16675330E+3, 0.245E+3, + 0.225E+3, 0.29696000E+1, 0.98849000E+1, 0.16358130E+3, 0.245E+3, 0.226E+3, 0.29696000E+1, + 0.91376000E+1, 0.18973800E+3, 0.245E+3, 0.227E+3, 0.29696000E+1, 0.29263000E+1, 0.17725080E+3, + 0.245E+3, 0.228E+3, 0.29696000E+1, 0.65458000E+1, 0.24732620E+3, 0.245E+3, 0.231E+3, + 0.29696000E+1, 0.19315000E+1, 0.26164130E+3, 0.245E+3, 0.232E+3, 0.29696000E+1, 0.19447000E+1, + 0.24169560E+3, 0.245E+3, 0.233E+3, 0.29696000E+1, 0.19793000E+1, 0.22618930E+3, 0.245E+3, + 0.234E+3, 0.29696000E+1, 0.19812000E+1, 0.34023920E+3, 0.245E+3, 0.238E+3, 0.29696000E+1, + 0.19143000E+1, 0.32940570E+3, 0.245E+3, 0.239E+3, 0.29696000E+1, 0.28903000E+1, 0.33291030E+3, + 0.245E+3, 0.240E+3, 0.29696000E+1, 0.39106000E+1, 0.32221010E+3, 0.245E+3, 0.241E+3, + 0.29696000E+1, 0.29225000E+1, 0.28693400E+3, 0.245E+3, 0.242E+3, 0.29696000E+1, 0.11055600E+2, + 0.25477490E+3, 0.245E+3, 0.243E+3, 0.29696000E+1, 0.95402000E+1, 0.24134970E+3, 0.245E+3, + 0.244E+3, 0.29696000E+1, 0.88895000E+1, 0.24465860E+3, 0.245E+3, 0.245E+3, 0.29696000E+1, + 0.29696000E+1, 0.28063100E+2, 0.246E+3, 0.100E+1, 0.57095000E+1, 0.91180000E+0, 0.19020800E+2, + 0.246E+3, 0.200E+1, 0.57095000E+1, 0.00000000E+0, 0.41221710E+3, 0.246E+3, 0.300E+1, + 0.57095000E+1, 0.00000000E+0, 0.24288250E+3, 0.246E+3, 0.400E+1, 0.57095000E+1, 0.00000000E+0, + 0.16615330E+3, 0.246E+3, 0.500E+1, 0.57095000E+1, 0.00000000E+0, 0.11391260E+3, 0.246E+3, + 0.600E+1, 0.57095000E+1, 0.00000000E+0, 0.80711800E+2, 0.246E+3, 0.700E+1, 0.57095000E+1, + 0.00000000E+0, 0.61761900E+2, 0.246E+3, 0.800E+1, 0.57095000E+1, 0.00000000E+0, 0.47264500E+2, + 0.246E+3, 0.900E+1, 0.57095000E+1, 0.00000000E+0, 0.36683700E+2, 0.246E+3, 0.100E+2, + 0.57095000E+1, 0.00000000E+0, 0.49392410E+3, 0.246E+3, 0.110E+2, 0.57095000E+1, 0.00000000E+0, + 0.38571180E+3, 0.246E+3, 0.120E+2, 0.57095000E+1, 0.00000000E+0, 0.35802870E+3, 0.246E+3, + 0.130E+2, 0.57095000E+1, 0.00000000E+0, 0.28501380E+3, 0.246E+3, 0.140E+2, 0.57095000E+1, + 0.00000000E+0, 0.22452110E+3, 0.246E+3, 0.150E+2, 0.57095000E+1, 0.00000000E+0, 0.18780070E+3, + 0.246E+3, 0.160E+2, 0.57095000E+1, 0.00000000E+0, 0.15466930E+3, 0.246E+3, 0.170E+2, + 0.57095000E+1, 0.00000000E+0, 0.12754830E+3, 0.246E+3, 0.180E+2, 0.57095000E+1, 0.00000000E+0, + 0.80942550E+3, 0.246E+3, 0.190E+2, 0.57095000E+1, 0.00000000E+0, 0.67457400E+3, 0.246E+3, + 0.200E+2, 0.57095000E+1, 0.00000000E+0, 0.55875930E+3, 0.246E+3, 0.210E+2, 0.57095000E+1, + 0.00000000E+0, 0.54137410E+3, 0.246E+3, 0.220E+2, 0.57095000E+1, 0.00000000E+0, 0.49669050E+3, + 0.246E+3, 0.230E+2, 0.57095000E+1, 0.00000000E+0, 0.39222970E+3, 0.246E+3, 0.240E+2, + 0.57095000E+1, 0.00000000E+0, 0.42885090E+3, 0.246E+3, 0.250E+2, 0.57095000E+1, 0.00000000E+0, + 0.33757700E+3, 0.246E+3, 0.260E+2, 0.57095000E+1, 0.00000000E+0, 0.35837430E+3, 0.246E+3, + 0.270E+2, 0.57095000E+1, 0.00000000E+0, 0.36840320E+3, 0.246E+3, 0.280E+2, 0.57095000E+1, + 0.00000000E+0, 0.28332920E+3, 0.246E+3, 0.290E+2, 0.57095000E+1, 0.00000000E+0, 0.29187250E+3, + 0.246E+3, 0.300E+2, 0.57095000E+1, 0.00000000E+0, 0.34456860E+3, 0.246E+3, 0.310E+2, + 0.57095000E+1, 0.00000000E+0, 0.30611920E+3, 0.246E+3, 0.320E+2, 0.57095000E+1, 0.00000000E+0, + 0.26318210E+3, 0.246E+3, 0.330E+2, 0.57095000E+1, 0.00000000E+0, 0.23751920E+3, 0.246E+3, + 0.340E+2, 0.57095000E+1, 0.00000000E+0, 0.20919710E+3, 0.246E+3, 0.350E+2, 0.57095000E+1, + 0.00000000E+0, 0.18310950E+3, 0.246E+3, 0.360E+2, 0.57095000E+1, 0.00000000E+0, 0.90881520E+3, + 0.246E+3, 0.370E+2, 0.57095000E+1, 0.00000000E+0, 0.80400360E+3, 0.246E+3, 0.380E+2, + 0.57095000E+1, 0.00000000E+0, 0.70783430E+3, 0.246E+3, 0.390E+2, 0.57095000E+1, 0.00000000E+0, + 0.63844630E+3, 0.246E+3, 0.400E+2, 0.57095000E+1, 0.00000000E+0, 0.58376530E+3, 0.246E+3, + 0.410E+2, 0.57095000E+1, 0.00000000E+0, 0.45332840E+3, 0.246E+3, 0.420E+2, 0.57095000E+1, + 0.00000000E+0, 0.50466070E+3, 0.246E+3, 0.430E+2, 0.57095000E+1, 0.00000000E+0, 0.38697280E+3, + 0.246E+3, 0.440E+2, 0.57095000E+1, 0.00000000E+0, 0.42232030E+3, 0.246E+3, 0.450E+2, + 0.57095000E+1, 0.00000000E+0, 0.39235480E+3, 0.246E+3, 0.460E+2, 0.57095000E+1, 0.00000000E+0, + 0.32780150E+3, 0.246E+3, 0.470E+2, 0.57095000E+1, 0.00000000E+0, 0.34660550E+3, 0.246E+3, + 0.480E+2, 0.57095000E+1, 0.00000000E+0, 0.43231830E+3, 0.246E+3, 0.490E+2, 0.57095000E+1, + 0.00000000E+0, 0.40184330E+3, 0.246E+3, 0.500E+2, 0.57095000E+1, 0.00000000E+0, 0.36034200E+3, + 0.246E+3, 0.510E+2, 0.57095000E+1, 0.00000000E+0, 0.33576050E+3, 0.246E+3, 0.520E+2, + 0.57095000E+1, 0.00000000E+0, 0.30512160E+3, 0.246E+3, 0.530E+2, 0.57095000E+1, 0.00000000E+0, + 0.27575770E+3, 0.246E+3, 0.540E+2, 0.57095000E+1, 0.00000000E+0, 0.11077988E+4, 0.246E+3, + 0.550E+2, 0.57095000E+1, 0.00000000E+0, 0.10240901E+4, 0.246E+3, 0.560E+2, 0.57095000E+1, + 0.00000000E+0, 0.90399280E+3, 0.246E+3, 0.570E+2, 0.57095000E+1, 0.00000000E+0, 0.42561430E+3, + 0.246E+3, 0.580E+2, 0.57095000E+1, 0.27991000E+1, 0.90929190E+3, 0.246E+3, 0.590E+2, + 0.57095000E+1, 0.00000000E+0, 0.87375470E+3, 0.246E+3, 0.600E+2, 0.57095000E+1, 0.00000000E+0, + 0.85199520E+3, 0.246E+3, 0.610E+2, 0.57095000E+1, 0.00000000E+0, 0.83195410E+3, 0.246E+3, + 0.620E+2, 0.57095000E+1, 0.00000000E+0, 0.81418450E+3, 0.246E+3, 0.630E+2, 0.57095000E+1, + 0.00000000E+0, 0.64463620E+3, 0.246E+3, 0.640E+2, 0.57095000E+1, 0.00000000E+0, 0.72073150E+3, + 0.246E+3, 0.650E+2, 0.57095000E+1, 0.00000000E+0, 0.69578030E+3, 0.246E+3, 0.660E+2, + 0.57095000E+1, 0.00000000E+0, 0.73512820E+3, 0.246E+3, 0.670E+2, 0.57095000E+1, 0.00000000E+0, + 0.71956930E+3, 0.246E+3, 0.680E+2, 0.57095000E+1, 0.00000000E+0, 0.70559090E+3, 0.246E+3, + 0.690E+2, 0.57095000E+1, 0.00000000E+0, 0.69711310E+3, 0.246E+3, 0.700E+2, 0.57095000E+1, + 0.00000000E+0, 0.59004660E+3, 0.246E+3, 0.710E+2, 0.57095000E+1, 0.00000000E+0, 0.58295090E+3, + 0.246E+3, 0.720E+2, 0.57095000E+1, 0.00000000E+0, 0.53409830E+3, 0.246E+3, 0.730E+2, + 0.57095000E+1, 0.00000000E+0, 0.45309060E+3, 0.246E+3, 0.740E+2, 0.57095000E+1, 0.00000000E+0, + 0.46141030E+3, 0.246E+3, 0.750E+2, 0.57095000E+1, 0.00000000E+0, 0.41975000E+3, 0.246E+3, + 0.760E+2, 0.57095000E+1, 0.00000000E+0, 0.38566670E+3, 0.246E+3, 0.770E+2, 0.57095000E+1, + 0.00000000E+0, 0.32198390E+3, 0.246E+3, 0.780E+2, 0.57095000E+1, 0.00000000E+0, 0.30143730E+3, + 0.246E+3, 0.790E+2, 0.57095000E+1, 0.00000000E+0, 0.31019540E+3, 0.246E+3, 0.800E+2, + 0.57095000E+1, 0.00000000E+0, 0.44555610E+3, 0.246E+3, 0.810E+2, 0.57095000E+1, 0.00000000E+0, + 0.43708990E+3, 0.246E+3, 0.820E+2, 0.57095000E+1, 0.00000000E+0, 0.40369830E+3, 0.246E+3, + 0.830E+2, 0.57095000E+1, 0.00000000E+0, 0.38631140E+3, 0.246E+3, 0.840E+2, 0.57095000E+1, + 0.00000000E+0, 0.35811890E+3, 0.246E+3, 0.850E+2, 0.57095000E+1, 0.00000000E+0, 0.32972180E+3, + 0.246E+3, 0.860E+2, 0.57095000E+1, 0.00000000E+0, 0.10501750E+4, 0.246E+3, 0.870E+2, + 0.57095000E+1, 0.00000000E+0, 0.10154760E+4, 0.246E+3, 0.880E+2, 0.57095000E+1, 0.00000000E+0, + 0.90160180E+3, 0.246E+3, 0.890E+2, 0.57095000E+1, 0.00000000E+0, 0.81526350E+3, 0.246E+3, + 0.900E+2, 0.57095000E+1, 0.00000000E+0, 0.80784930E+3, 0.246E+3, 0.910E+2, 0.57095000E+1, + 0.00000000E+0, 0.78242750E+3, 0.246E+3, 0.920E+2, 0.57095000E+1, 0.00000000E+0, 0.80290250E+3, + 0.246E+3, 0.930E+2, 0.57095000E+1, 0.00000000E+0, 0.77797910E+3, 0.246E+3, 0.940E+2, + 0.57095000E+1, 0.00000000E+0, 0.44649800E+2, 0.246E+3, 0.101E+3, 0.57095000E+1, 0.00000000E+0, + 0.14156390E+3, 0.246E+3, 0.103E+3, 0.57095000E+1, 0.98650000E+0, 0.18118110E+3, 0.246E+3, + 0.104E+3, 0.57095000E+1, 0.98080000E+0, 0.14035990E+3, 0.246E+3, 0.105E+3, 0.57095000E+1, + 0.97060000E+0, 0.10693200E+3, 0.246E+3, 0.106E+3, 0.57095000E+1, 0.98680000E+0, 0.75363600E+2, + 0.246E+3, 0.107E+3, 0.57095000E+1, 0.99440000E+0, 0.55574400E+2, 0.246E+3, 0.108E+3, + 0.57095000E+1, 0.99250000E+0, 0.38869700E+2, 0.246E+3, 0.109E+3, 0.57095000E+1, 0.99820000E+0, + 0.20679400E+3, 0.246E+3, 0.111E+3, 0.57095000E+1, 0.96840000E+0, 0.31921760E+3, 0.246E+3, + 0.112E+3, 0.57095000E+1, 0.96280000E+0, 0.32513700E+3, 0.246E+3, 0.113E+3, 0.57095000E+1, + 0.96480000E+0, 0.26392340E+3, 0.246E+3, 0.114E+3, 0.57095000E+1, 0.95070000E+0, 0.21806750E+3, + 0.246E+3, 0.115E+3, 0.57095000E+1, 0.99470000E+0, 0.18573680E+3, 0.246E+3, 0.116E+3, + 0.57095000E+1, 0.99480000E+0, 0.15307080E+3, 0.246E+3, 0.117E+3, 0.57095000E+1, 0.99720000E+0, + 0.28782600E+3, 0.246E+3, 0.119E+3, 0.57095000E+1, 0.97670000E+0, 0.54107730E+3, 0.246E+3, + 0.120E+3, 0.57095000E+1, 0.98310000E+0, 0.28949650E+3, 0.246E+3, 0.121E+3, 0.57095000E+1, + 0.18627000E+1, 0.27971050E+3, 0.246E+3, 0.122E+3, 0.57095000E+1, 0.18299000E+1, 0.27414900E+3, + 0.246E+3, 0.123E+3, 0.57095000E+1, 0.19138000E+1, 0.27142500E+3, 0.246E+3, 0.124E+3, + 0.57095000E+1, 0.18269000E+1, 0.25071870E+3, 0.246E+3, 0.125E+3, 0.57095000E+1, 0.16406000E+1, + 0.23247500E+3, 0.246E+3, 0.126E+3, 0.57095000E+1, 0.16483000E+1, 0.22187670E+3, 0.246E+3, + 0.127E+3, 0.57095000E+1, 0.17149000E+1, 0.21686020E+3, 0.246E+3, 0.128E+3, 0.57095000E+1, + 0.17937000E+1, 0.21363790E+3, 0.246E+3, 0.129E+3, 0.57095000E+1, 0.95760000E+0, 0.20155080E+3, + 0.246E+3, 0.130E+3, 0.57095000E+1, 0.19419000E+1, 0.32427260E+3, 0.246E+3, 0.131E+3, + 0.57095000E+1, 0.96010000E+0, 0.28698700E+3, 0.246E+3, 0.132E+3, 0.57095000E+1, 0.94340000E+0, + 0.25886990E+3, 0.246E+3, 0.133E+3, 0.57095000E+1, 0.98890000E+0, 0.23760650E+3, 0.246E+3, + 0.134E+3, 0.57095000E+1, 0.99010000E+0, 0.21059700E+3, 0.246E+3, 0.135E+3, 0.57095000E+1, + 0.99740000E+0, 0.34426700E+3, 0.246E+3, 0.137E+3, 0.57095000E+1, 0.97380000E+0, 0.65851960E+3, + 0.246E+3, 0.138E+3, 0.57095000E+1, 0.98010000E+0, 0.50868390E+3, 0.246E+3, 0.139E+3, + 0.57095000E+1, 0.19153000E+1, 0.38304250E+3, 0.246E+3, 0.140E+3, 0.57095000E+1, 0.19355000E+1, + 0.38685740E+3, 0.246E+3, 0.141E+3, 0.57095000E+1, 0.19545000E+1, 0.36157810E+3, 0.246E+3, + 0.142E+3, 0.57095000E+1, 0.19420000E+1, 0.40341880E+3, 0.246E+3, 0.143E+3, 0.57095000E+1, + 0.16682000E+1, 0.31674990E+3, 0.246E+3, 0.144E+3, 0.57095000E+1, 0.18584000E+1, 0.29669340E+3, + 0.246E+3, 0.145E+3, 0.57095000E+1, 0.19003000E+1, 0.27595750E+3, 0.246E+3, 0.146E+3, + 0.57095000E+1, 0.18630000E+1, 0.26684590E+3, 0.246E+3, 0.147E+3, 0.57095000E+1, 0.96790000E+0, + 0.26459410E+3, 0.246E+3, 0.148E+3, 0.57095000E+1, 0.19539000E+1, 0.41294080E+3, 0.246E+3, + 0.149E+3, 0.57095000E+1, 0.96330000E+0, 0.37573450E+3, 0.246E+3, 0.150E+3, 0.57095000E+1, + 0.95140000E+0, 0.35348570E+3, 0.246E+3, 0.151E+3, 0.57095000E+1, 0.97490000E+0, 0.33559490E+3, + 0.246E+3, 0.152E+3, 0.57095000E+1, 0.98110000E+0, 0.30794100E+3, 0.246E+3, 0.153E+3, + 0.57095000E+1, 0.99680000E+0, 0.40861880E+3, 0.246E+3, 0.155E+3, 0.57095000E+1, 0.99090000E+0, + 0.85276800E+3, 0.246E+3, 0.156E+3, 0.57095000E+1, 0.97970000E+0, 0.64344430E+3, 0.246E+3, + 0.157E+3, 0.57095000E+1, 0.19373000E+1, 0.41297590E+3, 0.246E+3, 0.159E+3, 0.57095000E+1, + 0.29425000E+1, 0.40447640E+3, 0.246E+3, 0.160E+3, 0.57095000E+1, 0.29455000E+1, 0.39181900E+3, + 0.246E+3, 0.161E+3, 0.57095000E+1, 0.29413000E+1, 0.39338030E+3, 0.246E+3, 0.162E+3, + 0.57095000E+1, 0.29300000E+1, 0.37830190E+3, 0.246E+3, 0.163E+3, 0.57095000E+1, 0.18286000E+1, + 0.39560900E+3, 0.246E+3, 0.164E+3, 0.57095000E+1, 0.28732000E+1, 0.37196670E+3, 0.246E+3, + 0.165E+3, 0.57095000E+1, 0.29086000E+1, 0.37790420E+3, 0.246E+3, 0.166E+3, 0.57095000E+1, + 0.28965000E+1, 0.35332080E+3, 0.246E+3, 0.167E+3, 0.57095000E+1, 0.29242000E+1, 0.34335820E+3, + 0.246E+3, 0.168E+3, 0.57095000E+1, 0.29282000E+1, 0.34104430E+3, 0.246E+3, 0.169E+3, + 0.57095000E+1, 0.29246000E+1, 0.35776850E+3, 0.246E+3, 0.170E+3, 0.57095000E+1, 0.28482000E+1, + 0.32975260E+3, 0.246E+3, 0.171E+3, 0.57095000E+1, 0.29219000E+1, 0.44211340E+3, 0.246E+3, + 0.172E+3, 0.57095000E+1, 0.19254000E+1, 0.41196690E+3, 0.246E+3, 0.173E+3, 0.57095000E+1, + 0.19459000E+1, 0.37750500E+3, 0.246E+3, 0.174E+3, 0.57095000E+1, 0.19292000E+1, 0.38078680E+3, + 0.246E+3, 0.175E+3, 0.57095000E+1, 0.18104000E+1, 0.33644710E+3, 0.246E+3, 0.176E+3, + 0.57095000E+1, 0.18858000E+1, 0.31720710E+3, 0.246E+3, 0.177E+3, 0.57095000E+1, 0.18648000E+1, + 0.30342150E+3, 0.246E+3, 0.178E+3, 0.57095000E+1, 0.19188000E+1, 0.29030040E+3, 0.246E+3, + 0.179E+3, 0.57095000E+1, 0.98460000E+0, 0.28128840E+3, 0.246E+3, 0.180E+3, 0.57095000E+1, + 0.19896000E+1, 0.44468180E+3, 0.246E+3, 0.181E+3, 0.57095000E+1, 0.92670000E+0, 0.40753420E+3, + 0.246E+3, 0.182E+3, 0.57095000E+1, 0.93830000E+0, 0.39643040E+3, 0.246E+3, 0.183E+3, + 0.57095000E+1, 0.98200000E+0, 0.38655960E+3, 0.246E+3, 0.184E+3, 0.57095000E+1, 0.98150000E+0, + 0.36242110E+3, 0.246E+3, 0.185E+3, 0.57095000E+1, 0.99540000E+0, 0.46028590E+3, 0.246E+3, + 0.187E+3, 0.57095000E+1, 0.97050000E+0, 0.85084330E+3, 0.246E+3, 0.188E+3, 0.57095000E+1, + 0.96620000E+0, 0.48843100E+3, 0.246E+3, 0.189E+3, 0.57095000E+1, 0.29070000E+1, 0.56129360E+3, + 0.246E+3, 0.190E+3, 0.57095000E+1, 0.28844000E+1, 0.50330170E+3, 0.246E+3, 0.191E+3, + 0.57095000E+1, 0.28738000E+1, 0.44649080E+3, 0.246E+3, 0.192E+3, 0.57095000E+1, 0.28878000E+1, + 0.43011690E+3, 0.246E+3, 0.193E+3, 0.57095000E+1, 0.29095000E+1, 0.51213360E+3, 0.246E+3, + 0.194E+3, 0.57095000E+1, 0.19209000E+1, 0.11979600E+3, 0.246E+3, 0.204E+3, 0.57095000E+1, + 0.19697000E+1, 0.11834870E+3, 0.246E+3, 0.205E+3, 0.57095000E+1, 0.19441000E+1, 0.87732000E+2, + 0.246E+3, 0.206E+3, 0.57095000E+1, 0.19985000E+1, 0.70890900E+2, 0.246E+3, 0.207E+3, + 0.57095000E+1, 0.20143000E+1, 0.49262900E+2, 0.246E+3, 0.208E+3, 0.57095000E+1, 0.19887000E+1, + 0.21108310E+3, 0.246E+3, 0.212E+3, 0.57095000E+1, 0.19496000E+1, 0.25499480E+3, 0.246E+3, + 0.213E+3, 0.57095000E+1, 0.19311000E+1, 0.24589890E+3, 0.246E+3, 0.214E+3, 0.57095000E+1, + 0.19435000E+1, 0.21505640E+3, 0.246E+3, 0.215E+3, 0.57095000E+1, 0.20102000E+1, 0.18203880E+3, + 0.246E+3, 0.216E+3, 0.57095000E+1, 0.19903000E+1, 0.29681460E+3, 0.246E+3, 0.220E+3, + 0.57095000E+1, 0.19349000E+1, 0.28630250E+3, 0.246E+3, 0.221E+3, 0.57095000E+1, 0.28999000E+1, + 0.28995300E+3, 0.246E+3, 0.222E+3, 0.57095000E+1, 0.38675000E+1, 0.26557670E+3, 0.246E+3, + 0.223E+3, 0.57095000E+1, 0.29110000E+1, 0.20190070E+3, 0.246E+3, 0.224E+3, 0.57095000E+1, + 0.10619100E+2, 0.17364950E+3, 0.246E+3, 0.225E+3, 0.57095000E+1, 0.98849000E+1, 0.17037740E+3, + 0.246E+3, 0.226E+3, 0.57095000E+1, 0.91376000E+1, 0.19810080E+3, 0.246E+3, 0.227E+3, + 0.57095000E+1, 0.29263000E+1, 0.18495540E+3, 0.246E+3, 0.228E+3, 0.57095000E+1, 0.65458000E+1, + 0.25878790E+3, 0.246E+3, 0.231E+3, 0.57095000E+1, 0.19315000E+1, 0.27362340E+3, 0.246E+3, + 0.232E+3, 0.57095000E+1, 0.19447000E+1, 0.25230300E+3, 0.246E+3, 0.233E+3, 0.57095000E+1, + 0.19793000E+1, 0.23579430E+3, 0.246E+3, 0.234E+3, 0.57095000E+1, 0.19812000E+1, 0.35611480E+3, + 0.246E+3, 0.238E+3, 0.57095000E+1, 0.19143000E+1, 0.34430530E+3, 0.246E+3, 0.239E+3, + 0.57095000E+1, 0.28903000E+1, 0.34779920E+3, 0.246E+3, 0.240E+3, 0.57095000E+1, 0.39106000E+1, + 0.33655350E+3, 0.246E+3, 0.241E+3, 0.57095000E+1, 0.29225000E+1, 0.29922510E+3, 0.246E+3, + 0.242E+3, 0.57095000E+1, 0.11055600E+2, 0.26533520E+3, 0.246E+3, 0.243E+3, 0.57095000E+1, + 0.95402000E+1, 0.25122310E+3, 0.246E+3, 0.244E+3, 0.57095000E+1, 0.88895000E+1, 0.25497130E+3, + 0.246E+3, 0.245E+3, 0.57095000E+1, 0.29696000E+1, 0.26587460E+3, 0.246E+3, 0.246E+3, + 0.57095000E+1, 0.57095000E+1, 0.34893100E+2, 0.249E+3, 0.100E+1, 0.19378000E+1, 0.91180000E+0, + 0.22907600E+2, 0.249E+3, 0.200E+1, 0.19378000E+1, 0.00000000E+0, 0.56526540E+3, 0.249E+3, + 0.300E+1, 0.19378000E+1, 0.00000000E+0, 0.32028070E+3, 0.249E+3, 0.400E+1, 0.19378000E+1, + 0.00000000E+0, 0.21344840E+3, 0.249E+3, 0.500E+1, 0.19378000E+1, 0.00000000E+0, 0.14316020E+3, + 0.249E+3, 0.600E+1, 0.19378000E+1, 0.00000000E+0, 0.99643500E+2, 0.249E+3, 0.700E+1, + 0.19378000E+1, 0.00000000E+0, 0.75235100E+2, 0.249E+3, 0.800E+1, 0.19378000E+1, 0.00000000E+0, + 0.56892200E+2, 0.249E+3, 0.900E+1, 0.19378000E+1, 0.00000000E+0, 0.43721500E+2, 0.249E+3, + 0.100E+2, 0.19378000E+1, 0.00000000E+0, 0.67522680E+3, 0.249E+3, 0.110E+2, 0.19378000E+1, + 0.00000000E+0, 0.51209020E+3, 0.249E+3, 0.120E+2, 0.19378000E+1, 0.00000000E+0, 0.46945400E+3, + 0.249E+3, 0.130E+2, 0.19378000E+1, 0.00000000E+0, 0.36720280E+3, 0.249E+3, 0.140E+2, + 0.19378000E+1, 0.00000000E+0, 0.28461460E+3, 0.249E+3, 0.150E+2, 0.19378000E+1, 0.00000000E+0, + 0.23533010E+3, 0.249E+3, 0.160E+2, 0.19378000E+1, 0.00000000E+0, 0.19158160E+3, 0.249E+3, + 0.170E+2, 0.19378000E+1, 0.00000000E+0, 0.15631790E+3, 0.249E+3, 0.180E+2, 0.19378000E+1, + 0.00000000E+0, 0.11101907E+4, 0.249E+3, 0.190E+2, 0.19378000E+1, 0.00000000E+0, 0.90511860E+3, + 0.249E+3, 0.200E+2, 0.19378000E+1, 0.00000000E+0, 0.74582820E+3, 0.249E+3, 0.210E+2, + 0.19378000E+1, 0.00000000E+0, 0.71855370E+3, 0.249E+3, 0.220E+2, 0.19378000E+1, 0.00000000E+0, + 0.65710020E+3, 0.249E+3, 0.230E+2, 0.19378000E+1, 0.00000000E+0, 0.51754970E+3, 0.249E+3, + 0.240E+2, 0.19378000E+1, 0.00000000E+0, 0.56463620E+3, 0.249E+3, 0.250E+2, 0.19378000E+1, + 0.00000000E+0, 0.44298550E+3, 0.249E+3, 0.260E+2, 0.19378000E+1, 0.00000000E+0, 0.46815800E+3, + 0.249E+3, 0.270E+2, 0.19378000E+1, 0.00000000E+0, 0.48295770E+3, 0.249E+3, 0.280E+2, + 0.19378000E+1, 0.00000000E+0, 0.37028130E+3, 0.249E+3, 0.290E+2, 0.19378000E+1, 0.00000000E+0, + 0.37846340E+3, 0.249E+3, 0.300E+2, 0.19378000E+1, 0.00000000E+0, 0.44874480E+3, 0.249E+3, + 0.310E+2, 0.19378000E+1, 0.00000000E+0, 0.39348230E+3, 0.249E+3, 0.320E+2, 0.19378000E+1, + 0.00000000E+0, 0.33391140E+3, 0.249E+3, 0.330E+2, 0.19378000E+1, 0.00000000E+0, 0.29869330E+3, + 0.249E+3, 0.340E+2, 0.19378000E+1, 0.00000000E+0, 0.26059250E+3, 0.249E+3, 0.350E+2, + 0.19378000E+1, 0.00000000E+0, 0.22602150E+3, 0.249E+3, 0.360E+2, 0.19378000E+1, 0.00000000E+0, + 0.12430036E+4, 0.249E+3, 0.370E+2, 0.19378000E+1, 0.00000000E+0, 0.10788447E+4, 0.249E+3, + 0.380E+2, 0.19378000E+1, 0.00000000E+0, 0.94063630E+3, 0.249E+3, 0.390E+2, 0.19378000E+1, + 0.00000000E+0, 0.84295940E+3, 0.249E+3, 0.400E+2, 0.19378000E+1, 0.00000000E+0, 0.76722430E+3, + 0.249E+3, 0.410E+2, 0.19378000E+1, 0.00000000E+0, 0.59040500E+3, 0.249E+3, 0.420E+2, + 0.19378000E+1, 0.00000000E+0, 0.65957470E+3, 0.249E+3, 0.430E+2, 0.19378000E+1, 0.00000000E+0, + 0.50072770E+3, 0.249E+3, 0.440E+2, 0.19378000E+1, 0.00000000E+0, 0.54733000E+3, 0.249E+3, + 0.450E+2, 0.19378000E+1, 0.00000000E+0, 0.50698660E+3, 0.249E+3, 0.460E+2, 0.19378000E+1, + 0.00000000E+0, 0.42310210E+3, 0.249E+3, 0.470E+2, 0.19378000E+1, 0.00000000E+0, 0.44611840E+3, + 0.249E+3, 0.480E+2, 0.19378000E+1, 0.00000000E+0, 0.56190060E+3, 0.249E+3, 0.490E+2, + 0.19378000E+1, 0.00000000E+0, 0.51714790E+3, 0.249E+3, 0.500E+2, 0.19378000E+1, 0.00000000E+0, + 0.45876760E+3, 0.249E+3, 0.510E+2, 0.19378000E+1, 0.00000000E+0, 0.42447180E+3, 0.249E+3, + 0.520E+2, 0.19378000E+1, 0.00000000E+0, 0.38268090E+3, 0.249E+3, 0.530E+2, 0.19378000E+1, + 0.00000000E+0, 0.34312810E+3, 0.249E+3, 0.540E+2, 0.19378000E+1, 0.00000000E+0, 0.15141166E+4, + 0.249E+3, 0.550E+2, 0.19378000E+1, 0.00000000E+0, 0.13775185E+4, 0.249E+3, 0.560E+2, + 0.19378000E+1, 0.00000000E+0, 0.12045072E+4, 0.249E+3, 0.570E+2, 0.19378000E+1, 0.00000000E+0, + 0.54238350E+3, 0.249E+3, 0.580E+2, 0.19378000E+1, 0.27991000E+1, 0.12188063E+4, 0.249E+3, + 0.590E+2, 0.19378000E+1, 0.00000000E+0, 0.11693656E+4, 0.249E+3, 0.600E+2, 0.19378000E+1, + 0.00000000E+0, 0.11397842E+4, 0.249E+3, 0.610E+2, 0.19378000E+1, 0.00000000E+0, 0.11126065E+4, + 0.249E+3, 0.620E+2, 0.19378000E+1, 0.00000000E+0, 0.10884965E+4, 0.249E+3, 0.630E+2, + 0.19378000E+1, 0.00000000E+0, 0.85158160E+3, 0.249E+3, 0.640E+2, 0.19378000E+1, 0.00000000E+0, + 0.96631820E+3, 0.249E+3, 0.650E+2, 0.19378000E+1, 0.00000000E+0, 0.93121350E+3, 0.249E+3, + 0.660E+2, 0.19378000E+1, 0.00000000E+0, 0.98060600E+3, 0.249E+3, 0.670E+2, 0.19378000E+1, + 0.00000000E+0, 0.95967190E+3, 0.249E+3, 0.680E+2, 0.19378000E+1, 0.00000000E+0, 0.94073330E+3, + 0.249E+3, 0.690E+2, 0.19378000E+1, 0.00000000E+0, 0.92993260E+3, 0.249E+3, 0.700E+2, + 0.19378000E+1, 0.00000000E+0, 0.78085310E+3, 0.249E+3, 0.710E+2, 0.19378000E+1, 0.00000000E+0, + 0.76411810E+3, 0.249E+3, 0.720E+2, 0.19378000E+1, 0.00000000E+0, 0.69534460E+3, 0.249E+3, + 0.730E+2, 0.19378000E+1, 0.00000000E+0, 0.58588080E+3, 0.249E+3, 0.740E+2, 0.19378000E+1, + 0.00000000E+0, 0.59538900E+3, 0.249E+3, 0.750E+2, 0.19378000E+1, 0.00000000E+0, 0.53831140E+3, + 0.249E+3, 0.760E+2, 0.19378000E+1, 0.00000000E+0, 0.49206190E+3, 0.249E+3, 0.770E+2, + 0.19378000E+1, 0.00000000E+0, 0.40798400E+3, 0.249E+3, 0.780E+2, 0.19378000E+1, 0.00000000E+0, + 0.38091340E+3, 0.249E+3, 0.790E+2, 0.19378000E+1, 0.00000000E+0, 0.39149310E+3, 0.249E+3, + 0.800E+2, 0.19378000E+1, 0.00000000E+0, 0.57627840E+3, 0.249E+3, 0.810E+2, 0.19378000E+1, + 0.00000000E+0, 0.56137620E+3, 0.249E+3, 0.820E+2, 0.19378000E+1, 0.00000000E+0, 0.51373240E+3, + 0.249E+3, 0.830E+2, 0.19378000E+1, 0.00000000E+0, 0.48880570E+3, 0.249E+3, 0.840E+2, + 0.19378000E+1, 0.00000000E+0, 0.44985640E+3, 0.249E+3, 0.850E+2, 0.19378000E+1, 0.00000000E+0, + 0.41128990E+3, 0.249E+3, 0.860E+2, 0.19378000E+1, 0.00000000E+0, 0.14239693E+4, 0.249E+3, + 0.870E+2, 0.19378000E+1, 0.00000000E+0, 0.13587684E+4, 0.249E+3, 0.880E+2, 0.19378000E+1, + 0.00000000E+0, 0.11959642E+4, 0.249E+3, 0.890E+2, 0.19378000E+1, 0.00000000E+0, 0.10695257E+4, + 0.249E+3, 0.900E+2, 0.19378000E+1, 0.00000000E+0, 0.10645406E+4, 0.249E+3, 0.910E+2, + 0.19378000E+1, 0.00000000E+0, 0.10306377E+4, 0.249E+3, 0.920E+2, 0.19378000E+1, 0.00000000E+0, + 0.10644434E+4, 0.249E+3, 0.930E+2, 0.19378000E+1, 0.00000000E+0, 0.10302277E+4, 0.249E+3, + 0.940E+2, 0.19378000E+1, 0.00000000E+0, 0.56518900E+2, 0.249E+3, 0.101E+3, 0.19378000E+1, + 0.00000000E+0, 0.18591700E+3, 0.249E+3, 0.103E+3, 0.19378000E+1, 0.98650000E+0, 0.23667710E+3, + 0.249E+3, 0.104E+3, 0.19378000E+1, 0.98080000E+0, 0.17917550E+3, 0.249E+3, 0.105E+3, + 0.19378000E+1, 0.97060000E+0, 0.13430140E+3, 0.249E+3, 0.106E+3, 0.19378000E+1, 0.98680000E+0, + 0.92908600E+2, 0.249E+3, 0.107E+3, 0.19378000E+1, 0.99440000E+0, 0.67419300E+2, 0.249E+3, + 0.108E+3, 0.19378000E+1, 0.99250000E+0, 0.46208200E+2, 0.249E+3, 0.109E+3, 0.19378000E+1, + 0.99820000E+0, 0.27237350E+3, 0.249E+3, 0.111E+3, 0.19378000E+1, 0.96840000E+0, 0.42155730E+3, + 0.249E+3, 0.112E+3, 0.19378000E+1, 0.96280000E+0, 0.42489670E+3, 0.249E+3, 0.113E+3, + 0.19378000E+1, 0.96480000E+0, 0.33903150E+3, 0.249E+3, 0.114E+3, 0.19378000E+1, 0.95070000E+0, + 0.27621540E+3, 0.249E+3, 0.115E+3, 0.19378000E+1, 0.99470000E+0, 0.23276490E+3, 0.249E+3, + 0.116E+3, 0.19378000E+1, 0.99480000E+0, 0.18961390E+3, 0.249E+3, 0.117E+3, 0.19378000E+1, + 0.99720000E+0, 0.37405850E+3, 0.249E+3, 0.119E+3, 0.19378000E+1, 0.97670000E+0, 0.72398140E+3, + 0.249E+3, 0.120E+3, 0.19378000E+1, 0.98310000E+0, 0.37201170E+3, 0.249E+3, 0.121E+3, + 0.19378000E+1, 0.18627000E+1, 0.35910570E+3, 0.249E+3, 0.122E+3, 0.19378000E+1, 0.18299000E+1, + 0.35198070E+3, 0.249E+3, 0.123E+3, 0.19378000E+1, 0.19138000E+1, 0.34899300E+3, 0.249E+3, + 0.124E+3, 0.19378000E+1, 0.18269000E+1, 0.32004310E+3, 0.249E+3, 0.125E+3, 0.19378000E+1, + 0.16406000E+1, 0.29592090E+3, 0.249E+3, 0.126E+3, 0.19378000E+1, 0.16483000E+1, 0.28231300E+3, + 0.249E+3, 0.127E+3, 0.19378000E+1, 0.17149000E+1, 0.27608710E+3, 0.249E+3, 0.128E+3, + 0.19378000E+1, 0.17937000E+1, 0.27351670E+3, 0.249E+3, 0.129E+3, 0.19378000E+1, 0.95760000E+0, + 0.25541010E+3, 0.249E+3, 0.130E+3, 0.19378000E+1, 0.19419000E+1, 0.42085570E+3, 0.249E+3, + 0.131E+3, 0.19378000E+1, 0.96010000E+0, 0.36762820E+3, 0.249E+3, 0.132E+3, 0.19378000E+1, + 0.94340000E+0, 0.32815180E+3, 0.249E+3, 0.133E+3, 0.19378000E+1, 0.98890000E+0, 0.29882440E+3, + 0.249E+3, 0.134E+3, 0.19378000E+1, 0.99010000E+0, 0.26244940E+3, 0.249E+3, 0.135E+3, + 0.19378000E+1, 0.99740000E+0, 0.44576050E+3, 0.249E+3, 0.137E+3, 0.19378000E+1, 0.97380000E+0, + 0.88157390E+3, 0.249E+3, 0.138E+3, 0.19378000E+1, 0.98010000E+0, 0.66764710E+3, 0.249E+3, + 0.139E+3, 0.19378000E+1, 0.19153000E+1, 0.49222910E+3, 0.249E+3, 0.140E+3, 0.19378000E+1, + 0.19355000E+1, 0.49713820E+3, 0.249E+3, 0.141E+3, 0.19378000E+1, 0.19545000E+1, 0.46306700E+3, + 0.249E+3, 0.142E+3, 0.19378000E+1, 0.19420000E+1, 0.52169780E+3, 0.249E+3, 0.143E+3, + 0.19378000E+1, 0.16682000E+1, 0.40238250E+3, 0.249E+3, 0.144E+3, 0.19378000E+1, 0.18584000E+1, + 0.37636250E+3, 0.249E+3, 0.145E+3, 0.19378000E+1, 0.19003000E+1, 0.34931490E+3, 0.249E+3, + 0.146E+3, 0.19378000E+1, 0.18630000E+1, 0.33811650E+3, 0.249E+3, 0.147E+3, 0.19378000E+1, + 0.96790000E+0, 0.33364080E+3, 0.249E+3, 0.148E+3, 0.19378000E+1, 0.19539000E+1, 0.53472480E+3, + 0.249E+3, 0.149E+3, 0.19378000E+1, 0.96330000E+0, 0.48141850E+3, 0.249E+3, 0.150E+3, + 0.19378000E+1, 0.95140000E+0, 0.44934480E+3, 0.249E+3, 0.151E+3, 0.19378000E+1, 0.97490000E+0, + 0.42408620E+3, 0.249E+3, 0.152E+3, 0.19378000E+1, 0.98110000E+0, 0.38628580E+3, 0.249E+3, + 0.153E+3, 0.19378000E+1, 0.99680000E+0, 0.52507760E+3, 0.249E+3, 0.155E+3, 0.19378000E+1, + 0.99090000E+0, 0.11453931E+4, 0.249E+3, 0.156E+3, 0.19378000E+1, 0.97970000E+0, 0.84571730E+3, + 0.249E+3, 0.157E+3, 0.19378000E+1, 0.19373000E+1, 0.52589560E+3, 0.249E+3, 0.159E+3, + 0.19378000E+1, 0.29425000E+1, 0.51499740E+3, 0.249E+3, 0.160E+3, 0.19378000E+1, 0.29455000E+1, + 0.49856690E+3, 0.249E+3, 0.161E+3, 0.19378000E+1, 0.29413000E+1, 0.50136870E+3, 0.249E+3, + 0.162E+3, 0.19378000E+1, 0.29300000E+1, 0.48441020E+3, 0.249E+3, 0.163E+3, 0.19378000E+1, + 0.18286000E+1, 0.50462370E+3, 0.249E+3, 0.164E+3, 0.19378000E+1, 0.28732000E+1, 0.47370770E+3, + 0.249E+3, 0.165E+3, 0.19378000E+1, 0.29086000E+1, 0.48262190E+3, 0.249E+3, 0.166E+3, + 0.19378000E+1, 0.28965000E+1, 0.44936380E+3, 0.249E+3, 0.167E+3, 0.19378000E+1, 0.29242000E+1, + 0.43646450E+3, 0.249E+3, 0.168E+3, 0.19378000E+1, 0.29282000E+1, 0.43373820E+3, 0.249E+3, + 0.169E+3, 0.19378000E+1, 0.29246000E+1, 0.45634090E+3, 0.249E+3, 0.170E+3, 0.19378000E+1, + 0.28482000E+1, 0.41908700E+3, 0.249E+3, 0.171E+3, 0.19378000E+1, 0.29219000E+1, 0.57239970E+3, + 0.249E+3, 0.172E+3, 0.19378000E+1, 0.19254000E+1, 0.52974800E+3, 0.249E+3, 0.173E+3, + 0.19378000E+1, 0.19459000E+1, 0.48197450E+3, 0.249E+3, 0.174E+3, 0.19378000E+1, 0.19292000E+1, + 0.48896420E+3, 0.249E+3, 0.175E+3, 0.19378000E+1, 0.18104000E+1, 0.42523900E+3, 0.249E+3, + 0.176E+3, 0.19378000E+1, 0.18858000E+1, 0.39970400E+3, 0.249E+3, 0.177E+3, 0.19378000E+1, + 0.18648000E+1, 0.38159490E+3, 0.249E+3, 0.178E+3, 0.19378000E+1, 0.19188000E+1, 0.36491310E+3, + 0.249E+3, 0.179E+3, 0.19378000E+1, 0.98460000E+0, 0.35178910E+3, 0.249E+3, 0.180E+3, + 0.19378000E+1, 0.19896000E+1, 0.57370310E+3, 0.249E+3, 0.181E+3, 0.19378000E+1, 0.92670000E+0, + 0.52042840E+3, 0.249E+3, 0.182E+3, 0.19378000E+1, 0.93830000E+0, 0.50341800E+3, 0.249E+3, + 0.183E+3, 0.19378000E+1, 0.98200000E+0, 0.48873500E+3, 0.249E+3, 0.184E+3, 0.19378000E+1, + 0.98150000E+0, 0.45527610E+3, 0.249E+3, 0.185E+3, 0.19378000E+1, 0.99540000E+0, 0.59117920E+3, + 0.249E+3, 0.187E+3, 0.19378000E+1, 0.97050000E+0, 0.11355611E+4, 0.249E+3, 0.188E+3, + 0.19378000E+1, 0.96620000E+0, 0.62234260E+3, 0.249E+3, 0.189E+3, 0.19378000E+1, 0.29070000E+1, + 0.72148760E+3, 0.249E+3, 0.190E+3, 0.19378000E+1, 0.28844000E+1, 0.64433230E+3, 0.249E+3, + 0.191E+3, 0.19378000E+1, 0.28738000E+1, 0.56739040E+3, 0.249E+3, 0.192E+3, 0.19378000E+1, + 0.28878000E+1, 0.54560930E+3, 0.249E+3, 0.193E+3, 0.19378000E+1, 0.29095000E+1, 0.66224690E+3, + 0.249E+3, 0.194E+3, 0.19378000E+1, 0.19209000E+1, 0.15292390E+3, 0.249E+3, 0.204E+3, + 0.19378000E+1, 0.19697000E+1, 0.15012670E+3, 0.249E+3, 0.205E+3, 0.19378000E+1, 0.19441000E+1, + 0.10920000E+3, 0.249E+3, 0.206E+3, 0.19378000E+1, 0.19985000E+1, 0.87207600E+2, 0.249E+3, + 0.207E+3, 0.19378000E+1, 0.20143000E+1, 0.59451100E+2, 0.249E+3, 0.208E+3, 0.19378000E+1, + 0.19887000E+1, 0.27256770E+3, 0.249E+3, 0.212E+3, 0.19378000E+1, 0.19496000E+1, 0.32959200E+3, + 0.249E+3, 0.213E+3, 0.19378000E+1, 0.19311000E+1, 0.31501770E+3, 0.249E+3, 0.214E+3, + 0.19378000E+1, 0.19435000E+1, 0.27258640E+3, 0.249E+3, 0.215E+3, 0.19378000E+1, 0.20102000E+1, + 0.22804730E+3, 0.249E+3, 0.216E+3, 0.19378000E+1, 0.19903000E+1, 0.38227200E+3, 0.249E+3, + 0.220E+3, 0.19378000E+1, 0.19349000E+1, 0.36630170E+3, 0.249E+3, 0.221E+3, 0.19378000E+1, + 0.28999000E+1, 0.37073900E+3, 0.249E+3, 0.222E+3, 0.19378000E+1, 0.38675000E+1, 0.33943990E+3, + 0.249E+3, 0.223E+3, 0.19378000E+1, 0.29110000E+1, 0.25457810E+3, 0.249E+3, 0.224E+3, + 0.19378000E+1, 0.10619100E+2, 0.21724670E+3, 0.249E+3, 0.225E+3, 0.19378000E+1, 0.98849000E+1, + 0.21333730E+3, 0.249E+3, 0.226E+3, 0.19378000E+1, 0.91376000E+1, 0.25122060E+3, 0.249E+3, + 0.227E+3, 0.19378000E+1, 0.29263000E+1, 0.23374770E+3, 0.249E+3, 0.228E+3, 0.19378000E+1, + 0.65458000E+1, 0.33179130E+3, 0.249E+3, 0.231E+3, 0.19378000E+1, 0.19315000E+1, 0.34968000E+3, + 0.249E+3, 0.232E+3, 0.19378000E+1, 0.19447000E+1, 0.31937190E+3, 0.249E+3, 0.233E+3, + 0.19378000E+1, 0.19793000E+1, 0.29645520E+3, 0.249E+3, 0.234E+3, 0.19378000E+1, 0.19812000E+1, + 0.45781020E+3, 0.249E+3, 0.238E+3, 0.19378000E+1, 0.19143000E+1, 0.43894830E+3, 0.249E+3, + 0.239E+3, 0.19378000E+1, 0.28903000E+1, 0.44222600E+3, 0.249E+3, 0.240E+3, 0.19378000E+1, + 0.39106000E+1, 0.42786320E+3, 0.249E+3, 0.241E+3, 0.19378000E+1, 0.29225000E+1, 0.37713750E+3, + 0.249E+3, 0.242E+3, 0.19378000E+1, 0.11055600E+2, 0.33210880E+3, 0.249E+3, 0.243E+3, + 0.19378000E+1, 0.95402000E+1, 0.31358880E+3, 0.249E+3, 0.244E+3, 0.19378000E+1, 0.88895000E+1, + 0.32040110E+3, 0.249E+3, 0.245E+3, 0.19378000E+1, 0.29696000E+1, 0.33498740E+3, 0.249E+3, + 0.246E+3, 0.19378000E+1, 0.57095000E+1, 0.42791400E+3, 0.249E+3, 0.249E+3, 0.19378000E+1, + 0.19378000E+1, 0.37912200E+2, 0.250E+3, 0.100E+1, 0.19505000E+1, 0.91180000E+0, 0.24783300E+2, + 0.250E+3, 0.200E+1, 0.19505000E+1, 0.00000000E+0, 0.61156120E+3, 0.250E+3, 0.300E+1, + 0.19505000E+1, 0.00000000E+0, 0.34839490E+3, 0.250E+3, 0.400E+1, 0.19505000E+1, 0.00000000E+0, + 0.23225130E+3, 0.250E+3, 0.500E+1, 0.19505000E+1, 0.00000000E+0, 0.15560830E+3, 0.250E+3, + 0.600E+1, 0.19505000E+1, 0.00000000E+0, 0.10812990E+3, 0.250E+3, 0.700E+1, 0.19505000E+1, + 0.00000000E+0, 0.81505800E+2, 0.250E+3, 0.800E+1, 0.19505000E+1, 0.00000000E+0, 0.61521400E+2, + 0.250E+3, 0.900E+1, 0.19505000E+1, 0.00000000E+0, 0.47194200E+2, 0.250E+3, 0.100E+2, + 0.19505000E+1, 0.00000000E+0, 0.73065870E+3, 0.250E+3, 0.110E+2, 0.19505000E+1, 0.00000000E+0, + 0.55662410E+3, 0.250E+3, 0.120E+2, 0.19505000E+1, 0.00000000E+0, 0.51060870E+3, 0.250E+3, + 0.130E+2, 0.19505000E+1, 0.00000000E+0, 0.39957740E+3, 0.250E+3, 0.140E+2, 0.19505000E+1, + 0.00000000E+0, 0.30959920E+3, 0.250E+3, 0.150E+2, 0.19505000E+1, 0.00000000E+0, 0.25580130E+3, + 0.250E+3, 0.160E+2, 0.19505000E+1, 0.00000000E+0, 0.20804020E+3, 0.250E+3, 0.170E+2, + 0.19505000E+1, 0.00000000E+0, 0.16954570E+3, 0.250E+3, 0.180E+2, 0.19505000E+1, 0.00000000E+0, + 0.11982993E+4, 0.250E+3, 0.190E+2, 0.19505000E+1, 0.00000000E+0, 0.98182060E+3, 0.250E+3, + 0.200E+2, 0.19505000E+1, 0.00000000E+0, 0.80962470E+3, 0.250E+3, 0.210E+2, 0.19505000E+1, + 0.00000000E+0, 0.78020170E+3, 0.250E+3, 0.220E+2, 0.19505000E+1, 0.00000000E+0, 0.71360600E+3, + 0.250E+3, 0.230E+2, 0.19505000E+1, 0.00000000E+0, 0.56166940E+3, 0.250E+3, 0.240E+2, + 0.19505000E+1, 0.00000000E+0, 0.61332300E+3, 0.250E+3, 0.250E+2, 0.19505000E+1, 0.00000000E+0, + 0.48085880E+3, 0.250E+3, 0.260E+2, 0.19505000E+1, 0.00000000E+0, 0.50875980E+3, 0.250E+3, + 0.270E+2, 0.19505000E+1, 0.00000000E+0, 0.52479280E+3, 0.250E+3, 0.280E+2, 0.19505000E+1, + 0.00000000E+0, 0.40197520E+3, 0.250E+3, 0.290E+2, 0.19505000E+1, 0.00000000E+0, 0.41137780E+3, + 0.250E+3, 0.300E+2, 0.19505000E+1, 0.00000000E+0, 0.48787860E+3, 0.250E+3, 0.310E+2, + 0.19505000E+1, 0.00000000E+0, 0.42801030E+3, 0.250E+3, 0.320E+2, 0.19505000E+1, 0.00000000E+0, + 0.36315760E+3, 0.250E+3, 0.330E+2, 0.19505000E+1, 0.00000000E+0, 0.32471350E+3, 0.250E+3, + 0.340E+2, 0.19505000E+1, 0.00000000E+0, 0.28310510E+3, 0.250E+3, 0.350E+2, 0.19505000E+1, + 0.00000000E+0, 0.24534090E+3, 0.250E+3, 0.360E+2, 0.19505000E+1, 0.00000000E+0, 0.13416152E+4, + 0.250E+3, 0.370E+2, 0.19505000E+1, 0.00000000E+0, 0.11697495E+4, 0.250E+3, 0.380E+2, + 0.19505000E+1, 0.00000000E+0, 0.10209627E+4, 0.250E+3, 0.390E+2, 0.19505000E+1, 0.00000000E+0, + 0.91534550E+3, 0.250E+3, 0.400E+2, 0.19505000E+1, 0.00000000E+0, 0.83320500E+3, 0.250E+3, + 0.410E+2, 0.19505000E+1, 0.00000000E+0, 0.64106430E+3, 0.250E+3, 0.420E+2, 0.19505000E+1, + 0.00000000E+0, 0.71622390E+3, 0.250E+3, 0.430E+2, 0.19505000E+1, 0.00000000E+0, 0.54361040E+3, + 0.250E+3, 0.440E+2, 0.19505000E+1, 0.00000000E+0, 0.59452770E+3, 0.250E+3, 0.450E+2, + 0.19505000E+1, 0.00000000E+0, 0.55071590E+3, 0.250E+3, 0.460E+2, 0.19505000E+1, 0.00000000E+0, + 0.45912190E+3, 0.250E+3, 0.470E+2, 0.19505000E+1, 0.00000000E+0, 0.48457590E+3, 0.250E+3, + 0.480E+2, 0.19505000E+1, 0.00000000E+0, 0.61033820E+3, 0.250E+3, 0.490E+2, 0.19505000E+1, + 0.00000000E+0, 0.56212760E+3, 0.250E+3, 0.500E+2, 0.19505000E+1, 0.00000000E+0, 0.49873950E+3, + 0.250E+3, 0.510E+2, 0.19505000E+1, 0.00000000E+0, 0.46138680E+3, 0.250E+3, 0.520E+2, + 0.19505000E+1, 0.00000000E+0, 0.41581730E+3, 0.250E+3, 0.530E+2, 0.19505000E+1, 0.00000000E+0, + 0.37264800E+3, 0.250E+3, 0.540E+2, 0.19505000E+1, 0.00000000E+0, 0.16336348E+4, 0.250E+3, + 0.550E+2, 0.19505000E+1, 0.00000000E+0, 0.14924625E+4, 0.250E+3, 0.560E+2, 0.19505000E+1, + 0.00000000E+0, 0.13065898E+4, 0.250E+3, 0.570E+2, 0.19505000E+1, 0.00000000E+0, 0.58945280E+3, + 0.250E+3, 0.580E+2, 0.19505000E+1, 0.27991000E+1, 0.13207683E+4, 0.250E+3, 0.590E+2, + 0.19505000E+1, 0.00000000E+0, 0.12676087E+4, 0.250E+3, 0.600E+2, 0.19505000E+1, 0.00000000E+0, + 0.12356389E+4, 0.250E+3, 0.610E+2, 0.19505000E+1, 0.00000000E+0, 0.12062616E+4, 0.250E+3, + 0.620E+2, 0.19505000E+1, 0.00000000E+0, 0.11802039E+4, 0.250E+3, 0.630E+2, 0.19505000E+1, + 0.00000000E+0, 0.92388260E+3, 0.250E+3, 0.640E+2, 0.19505000E+1, 0.00000000E+0, 0.10458286E+4, + 0.250E+3, 0.650E+2, 0.19505000E+1, 0.00000000E+0, 0.10079093E+4, 0.250E+3, 0.660E+2, + 0.19505000E+1, 0.00000000E+0, 0.10636161E+4, 0.250E+3, 0.670E+2, 0.19505000E+1, 0.00000000E+0, + 0.10409736E+4, 0.250E+3, 0.680E+2, 0.19505000E+1, 0.00000000E+0, 0.10204995E+4, 0.250E+3, + 0.690E+2, 0.19505000E+1, 0.00000000E+0, 0.10087709E+4, 0.250E+3, 0.700E+2, 0.19505000E+1, + 0.00000000E+0, 0.84732020E+3, 0.250E+3, 0.710E+2, 0.19505000E+1, 0.00000000E+0, 0.83014100E+3, + 0.250E+3, 0.720E+2, 0.19505000E+1, 0.00000000E+0, 0.75559170E+3, 0.250E+3, 0.730E+2, + 0.19505000E+1, 0.00000000E+0, 0.63637500E+3, 0.250E+3, 0.740E+2, 0.19505000E+1, 0.00000000E+0, + 0.64685600E+3, 0.250E+3, 0.750E+2, 0.19505000E+1, 0.00000000E+0, 0.58485060E+3, 0.250E+3, + 0.760E+2, 0.19505000E+1, 0.00000000E+0, 0.53455500E+3, 0.250E+3, 0.770E+2, 0.19505000E+1, + 0.00000000E+0, 0.44293230E+3, 0.250E+3, 0.780E+2, 0.19505000E+1, 0.00000000E+0, 0.41343530E+3, + 0.250E+3, 0.790E+2, 0.19505000E+1, 0.00000000E+0, 0.42506050E+3, 0.250E+3, 0.800E+2, + 0.19505000E+1, 0.00000000E+0, 0.62552300E+3, 0.250E+3, 0.810E+2, 0.19505000E+1, 0.00000000E+0, + 0.60984910E+3, 0.250E+3, 0.820E+2, 0.19505000E+1, 0.00000000E+0, 0.55825050E+3, 0.250E+3, + 0.830E+2, 0.19505000E+1, 0.00000000E+0, 0.53115730E+3, 0.250E+3, 0.840E+2, 0.19505000E+1, + 0.00000000E+0, 0.48873370E+3, 0.250E+3, 0.850E+2, 0.19505000E+1, 0.00000000E+0, 0.44666830E+3, + 0.250E+3, 0.860E+2, 0.19505000E+1, 0.00000000E+0, 0.15382573E+4, 0.250E+3, 0.870E+2, + 0.19505000E+1, 0.00000000E+0, 0.14729117E+4, 0.250E+3, 0.880E+2, 0.19505000E+1, 0.00000000E+0, + 0.12978097E+4, 0.250E+3, 0.890E+2, 0.19505000E+1, 0.00000000E+0, 0.11613917E+4, 0.250E+3, + 0.900E+2, 0.19505000E+1, 0.00000000E+0, 0.11551516E+4, 0.250E+3, 0.910E+2, 0.19505000E+1, + 0.00000000E+0, 0.11183627E+4, 0.250E+3, 0.920E+2, 0.19505000E+1, 0.00000000E+0, 0.11544374E+4, + 0.250E+3, 0.930E+2, 0.19505000E+1, 0.00000000E+0, 0.11174761E+4, 0.250E+3, 0.940E+2, + 0.19505000E+1, 0.00000000E+0, 0.61486800E+2, 0.250E+3, 0.101E+3, 0.19505000E+1, 0.00000000E+0, + 0.20220530E+3, 0.250E+3, 0.103E+3, 0.19505000E+1, 0.98650000E+0, 0.25735510E+3, 0.250E+3, + 0.104E+3, 0.19505000E+1, 0.98080000E+0, 0.19488950E+3, 0.250E+3, 0.105E+3, 0.19505000E+1, + 0.97060000E+0, 0.14592740E+3, 0.250E+3, 0.106E+3, 0.19505000E+1, 0.98680000E+0, 0.10078260E+3, + 0.250E+3, 0.107E+3, 0.19505000E+1, 0.99440000E+0, 0.72992300E+2, 0.250E+3, 0.108E+3, + 0.19505000E+1, 0.99250000E+0, 0.49877800E+2, 0.250E+3, 0.109E+3, 0.19505000E+1, 0.99820000E+0, + 0.29601550E+3, 0.250E+3, 0.111E+3, 0.19505000E+1, 0.96840000E+0, 0.45814250E+3, 0.250E+3, + 0.112E+3, 0.19505000E+1, 0.96280000E+0, 0.46215210E+3, 0.250E+3, 0.113E+3, 0.19505000E+1, + 0.96480000E+0, 0.36887960E+3, 0.250E+3, 0.114E+3, 0.19505000E+1, 0.95070000E+0, 0.30043180E+3, + 0.250E+3, 0.115E+3, 0.19505000E+1, 0.99470000E+0, 0.25300030E+3, 0.250E+3, 0.116E+3, + 0.19505000E+1, 0.99480000E+0, 0.20589540E+3, 0.250E+3, 0.117E+3, 0.19505000E+1, 0.99720000E+0, + 0.40608450E+3, 0.250E+3, 0.119E+3, 0.19505000E+1, 0.97670000E+0, 0.78442190E+3, 0.250E+3, + 0.120E+3, 0.19505000E+1, 0.98310000E+0, 0.40440960E+3, 0.250E+3, 0.121E+3, 0.19505000E+1, + 0.18627000E+1, 0.39026550E+3, 0.250E+3, 0.122E+3, 0.19505000E+1, 0.18299000E+1, 0.38249970E+3, + 0.250E+3, 0.123E+3, 0.19505000E+1, 0.19138000E+1, 0.37920210E+3, 0.250E+3, 0.124E+3, + 0.19505000E+1, 0.18269000E+1, 0.34791510E+3, 0.250E+3, 0.125E+3, 0.19505000E+1, 0.16406000E+1, + 0.32164840E+3, 0.250E+3, 0.126E+3, 0.19505000E+1, 0.16483000E+1, 0.30680410E+3, 0.250E+3, + 0.127E+3, 0.19505000E+1, 0.17149000E+1, 0.30002320E+3, 0.250E+3, 0.128E+3, 0.19505000E+1, + 0.17937000E+1, 0.29714060E+3, 0.250E+3, 0.129E+3, 0.19505000E+1, 0.95760000E+0, 0.27760830E+3, + 0.250E+3, 0.130E+3, 0.19505000E+1, 0.19419000E+1, 0.45760310E+3, 0.250E+3, 0.131E+3, + 0.19505000E+1, 0.96010000E+0, 0.39986460E+3, 0.250E+3, 0.132E+3, 0.19505000E+1, 0.94340000E+0, + 0.35687340E+3, 0.250E+3, 0.133E+3, 0.19505000E+1, 0.98890000E+0, 0.32485020E+3, 0.250E+3, + 0.134E+3, 0.19505000E+1, 0.99010000E+0, 0.28512610E+3, 0.250E+3, 0.135E+3, 0.19505000E+1, + 0.99740000E+0, 0.48384610E+3, 0.250E+3, 0.137E+3, 0.19505000E+1, 0.97380000E+0, 0.95464460E+3, + 0.250E+3, 0.138E+3, 0.19505000E+1, 0.98010000E+0, 0.72429340E+3, 0.250E+3, 0.139E+3, + 0.19505000E+1, 0.19153000E+1, 0.53482740E+3, 0.250E+3, 0.140E+3, 0.19505000E+1, 0.19355000E+1, + 0.54017920E+3, 0.250E+3, 0.141E+3, 0.19505000E+1, 0.19545000E+1, 0.50302360E+3, 0.250E+3, + 0.142E+3, 0.19505000E+1, 0.19420000E+1, 0.56629020E+3, 0.250E+3, 0.143E+3, 0.19505000E+1, + 0.16682000E+1, 0.43711840E+3, 0.250E+3, 0.144E+3, 0.19505000E+1, 0.18584000E+1, 0.40874340E+3, + 0.250E+3, 0.145E+3, 0.19505000E+1, 0.19003000E+1, 0.37927910E+3, 0.250E+3, 0.146E+3, + 0.19505000E+1, 0.18630000E+1, 0.36709070E+3, 0.250E+3, 0.147E+3, 0.19505000E+1, 0.96790000E+0, + 0.36239660E+3, 0.250E+3, 0.148E+3, 0.19505000E+1, 0.19539000E+1, 0.58092600E+3, 0.250E+3, + 0.149E+3, 0.19505000E+1, 0.96330000E+0, 0.52329100E+3, 0.250E+3, 0.150E+3, 0.19505000E+1, + 0.95140000E+0, 0.48848390E+3, 0.250E+3, 0.151E+3, 0.19505000E+1, 0.97490000E+0, 0.46096710E+3, + 0.250E+3, 0.152E+3, 0.19505000E+1, 0.98110000E+0, 0.41974500E+3, 0.250E+3, 0.153E+3, + 0.19505000E+1, 0.99680000E+0, 0.57029930E+3, 0.250E+3, 0.155E+3, 0.19505000E+1, 0.99090000E+0, + 0.12390351E+4, 0.250E+3, 0.156E+3, 0.19505000E+1, 0.97970000E+0, 0.91712310E+3, 0.250E+3, + 0.157E+3, 0.19505000E+1, 0.19373000E+1, 0.57151660E+3, 0.250E+3, 0.159E+3, 0.19505000E+1, + 0.29425000E+1, 0.55966960E+3, 0.250E+3, 0.160E+3, 0.19505000E+1, 0.29455000E+1, 0.54179760E+3, + 0.250E+3, 0.161E+3, 0.19505000E+1, 0.29413000E+1, 0.54480780E+3, 0.250E+3, 0.162E+3, + 0.19505000E+1, 0.29300000E+1, 0.52623920E+3, 0.250E+3, 0.163E+3, 0.19505000E+1, 0.18286000E+1, + 0.54841680E+3, 0.250E+3, 0.164E+3, 0.19505000E+1, 0.28732000E+1, 0.51479430E+3, 0.250E+3, + 0.165E+3, 0.19505000E+1, 0.29086000E+1, 0.52439740E+3, 0.250E+3, 0.166E+3, 0.19505000E+1, + 0.28965000E+1, 0.48836000E+3, 0.250E+3, 0.167E+3, 0.19505000E+1, 0.29242000E+1, 0.47434360E+3, + 0.250E+3, 0.168E+3, 0.19505000E+1, 0.29282000E+1, 0.47138980E+3, 0.250E+3, 0.169E+3, + 0.19505000E+1, 0.29246000E+1, 0.49604540E+3, 0.250E+3, 0.170E+3, 0.19505000E+1, 0.28482000E+1, + 0.45549010E+3, 0.250E+3, 0.171E+3, 0.19505000E+1, 0.29219000E+1, 0.62165690E+3, 0.250E+3, + 0.172E+3, 0.19505000E+1, 0.19254000E+1, 0.57541630E+3, 0.250E+3, 0.173E+3, 0.19505000E+1, + 0.19459000E+1, 0.52355470E+3, 0.250E+3, 0.174E+3, 0.19505000E+1, 0.19292000E+1, 0.53103290E+3, + 0.250E+3, 0.175E+3, 0.19505000E+1, 0.18104000E+1, 0.46190580E+3, 0.250E+3, 0.176E+3, + 0.19505000E+1, 0.18858000E+1, 0.43406330E+3, 0.250E+3, 0.177E+3, 0.19505000E+1, 0.18648000E+1, + 0.41431110E+3, 0.250E+3, 0.178E+3, 0.19505000E+1, 0.19188000E+1, 0.39608640E+3, 0.250E+3, + 0.179E+3, 0.19505000E+1, 0.98460000E+0, 0.38190670E+3, 0.250E+3, 0.180E+3, 0.19505000E+1, + 0.19896000E+1, 0.62293810E+3, 0.250E+3, 0.181E+3, 0.19505000E+1, 0.92670000E+0, 0.56542470E+3, + 0.250E+3, 0.182E+3, 0.19505000E+1, 0.93830000E+0, 0.54706010E+3, 0.250E+3, 0.183E+3, + 0.19505000E+1, 0.98200000E+0, 0.53109590E+3, 0.250E+3, 0.184E+3, 0.19505000E+1, 0.98150000E+0, + 0.49464220E+3, 0.250E+3, 0.185E+3, 0.19505000E+1, 0.99540000E+0, 0.64214730E+3, 0.250E+3, + 0.187E+3, 0.19505000E+1, 0.97050000E+0, 0.12295628E+4, 0.250E+3, 0.188E+3, 0.19505000E+1, + 0.96620000E+0, 0.67640190E+3, 0.250E+3, 0.189E+3, 0.19505000E+1, 0.29070000E+1, 0.78351290E+3, + 0.250E+3, 0.190E+3, 0.19505000E+1, 0.28844000E+1, 0.69937990E+3, 0.250E+3, 0.191E+3, + 0.19505000E+1, 0.28738000E+1, 0.61633520E+3, 0.250E+3, 0.192E+3, 0.19505000E+1, 0.28878000E+1, + 0.59268480E+3, 0.250E+3, 0.193E+3, 0.19505000E+1, 0.29095000E+1, 0.71854240E+3, 0.250E+3, + 0.194E+3, 0.19505000E+1, 0.19209000E+1, 0.16642480E+3, 0.250E+3, 0.204E+3, 0.19505000E+1, + 0.19697000E+1, 0.16321840E+3, 0.250E+3, 0.205E+3, 0.19505000E+1, 0.19441000E+1, 0.11859420E+3, + 0.250E+3, 0.206E+3, 0.19505000E+1, 0.19985000E+1, 0.94569600E+2, 0.250E+3, 0.207E+3, + 0.19505000E+1, 0.20143000E+1, 0.64302200E+2, 0.250E+3, 0.208E+3, 0.19505000E+1, 0.19887000E+1, + 0.29661470E+3, 0.250E+3, 0.212E+3, 0.19505000E+1, 0.19496000E+1, 0.35855000E+3, 0.250E+3, + 0.213E+3, 0.19505000E+1, 0.19311000E+1, 0.34274070E+3, 0.250E+3, 0.214E+3, 0.19505000E+1, + 0.19435000E+1, 0.29645720E+3, 0.250E+3, 0.215E+3, 0.19505000E+1, 0.20102000E+1, 0.24785630E+3, + 0.250E+3, 0.216E+3, 0.19505000E+1, 0.19903000E+1, 0.41557270E+3, 0.250E+3, 0.220E+3, + 0.19505000E+1, 0.19349000E+1, 0.39827950E+3, 0.250E+3, 0.221E+3, 0.19505000E+1, 0.28999000E+1, + 0.40309190E+3, 0.250E+3, 0.222E+3, 0.19505000E+1, 0.38675000E+1, 0.36892090E+3, 0.250E+3, + 0.223E+3, 0.19505000E+1, 0.29110000E+1, 0.27646740E+3, 0.250E+3, 0.224E+3, 0.19505000E+1, + 0.10619100E+2, 0.23583660E+3, 0.250E+3, 0.225E+3, 0.19505000E+1, 0.98849000E+1, 0.23159140E+3, + 0.250E+3, 0.226E+3, 0.19505000E+1, 0.91376000E+1, 0.27286680E+3, 0.250E+3, 0.227E+3, + 0.19505000E+1, 0.29263000E+1, 0.25387790E+3, 0.250E+3, 0.228E+3, 0.19505000E+1, 0.65458000E+1, + 0.36080170E+3, 0.250E+3, 0.231E+3, 0.19505000E+1, 0.19315000E+1, 0.38032910E+3, 0.250E+3, + 0.232E+3, 0.19505000E+1, 0.19447000E+1, 0.34730490E+3, 0.250E+3, 0.233E+3, 0.19505000E+1, + 0.19793000E+1, 0.32226350E+3, 0.250E+3, 0.234E+3, 0.19505000E+1, 0.19812000E+1, 0.49753160E+3, + 0.250E+3, 0.238E+3, 0.19505000E+1, 0.19143000E+1, 0.47720360E+3, 0.250E+3, 0.239E+3, + 0.19505000E+1, 0.28903000E+1, 0.48076680E+3, 0.250E+3, 0.240E+3, 0.19505000E+1, 0.39106000E+1, + 0.46495560E+3, 0.250E+3, 0.241E+3, 0.19505000E+1, 0.29225000E+1, 0.40969630E+3, 0.250E+3, + 0.242E+3, 0.19505000E+1, 0.11055600E+2, 0.36063780E+3, 0.250E+3, 0.243E+3, 0.19505000E+1, + 0.95402000E+1, 0.34045080E+3, 0.250E+3, 0.244E+3, 0.19505000E+1, 0.88895000E+1, 0.34781660E+3, + 0.250E+3, 0.245E+3, 0.19505000E+1, 0.29696000E+1, 0.36373910E+3, 0.250E+3, 0.246E+3, + 0.19505000E+1, 0.57095000E+1, 0.46496770E+3, 0.250E+3, 0.249E+3, 0.19505000E+1, 0.19378000E+1, + 0.50541480E+3, 0.250E+3, 0.250E+3, 0.19505000E+1, 0.19505000E+1, 0.36227700E+2, 0.251E+3, + 0.100E+1, 0.19523000E+1, 0.91180000E+0, 0.24014100E+2, 0.251E+3, 0.200E+1, 0.19523000E+1, + 0.00000000E+0, 0.54685470E+3, 0.251E+3, 0.300E+1, 0.19523000E+1, 0.00000000E+0, 0.32111700E+3, + 0.251E+3, 0.400E+1, 0.19523000E+1, 0.00000000E+0, 0.21779050E+3, 0.251E+3, 0.500E+1, + 0.19523000E+1, 0.00000000E+0, 0.14775190E+3, 0.251E+3, 0.600E+1, 0.19523000E+1, 0.00000000E+0, + 0.10359080E+3, 0.251E+3, 0.700E+1, 0.19523000E+1, 0.00000000E+0, 0.78560000E+2, 0.251E+3, + 0.800E+1, 0.19523000E+1, 0.00000000E+0, 0.59593700E+2, 0.251E+3, 0.900E+1, 0.19523000E+1, + 0.00000000E+0, 0.45889400E+2, 0.251E+3, 0.100E+2, 0.19523000E+1, 0.00000000E+0, 0.65457160E+3, + 0.251E+3, 0.110E+2, 0.19523000E+1, 0.00000000E+0, 0.51028240E+3, 0.251E+3, 0.120E+2, + 0.19523000E+1, 0.00000000E+0, 0.47233520E+3, 0.251E+3, 0.130E+2, 0.19523000E+1, 0.00000000E+0, + 0.37405660E+3, 0.251E+3, 0.140E+2, 0.19523000E+1, 0.00000000E+0, 0.29271450E+3, 0.251E+3, + 0.150E+2, 0.19523000E+1, 0.00000000E+0, 0.24337850E+3, 0.251E+3, 0.160E+2, 0.19523000E+1, + 0.00000000E+0, 0.19910820E+3, 0.251E+3, 0.170E+2, 0.19523000E+1, 0.00000000E+0, 0.16307830E+3, + 0.251E+3, 0.180E+2, 0.19523000E+1, 0.00000000E+0, 0.10694211E+4, 0.251E+3, 0.190E+2, + 0.19523000E+1, 0.00000000E+0, 0.89182320E+3, 0.251E+3, 0.200E+2, 0.19523000E+1, 0.00000000E+0, + 0.73841210E+3, 0.251E+3, 0.210E+2, 0.19523000E+1, 0.00000000E+0, 0.71434970E+3, 0.251E+3, + 0.220E+2, 0.19523000E+1, 0.00000000E+0, 0.65487180E+3, 0.251E+3, 0.230E+2, 0.19523000E+1, + 0.00000000E+0, 0.51581520E+3, 0.251E+3, 0.240E+2, 0.19523000E+1, 0.00000000E+0, 0.56471100E+3, + 0.251E+3, 0.250E+2, 0.19523000E+1, 0.00000000E+0, 0.44324120E+3, 0.251E+3, 0.260E+2, + 0.19523000E+1, 0.00000000E+0, 0.47101860E+3, 0.251E+3, 0.270E+2, 0.19523000E+1, 0.00000000E+0, + 0.48471110E+3, 0.251E+3, 0.280E+2, 0.19523000E+1, 0.00000000E+0, 0.37150280E+3, 0.251E+3, + 0.290E+2, 0.19523000E+1, 0.00000000E+0, 0.38278190E+3, 0.251E+3, 0.300E+2, 0.19523000E+1, + 0.00000000E+0, 0.45296620E+3, 0.251E+3, 0.310E+2, 0.19523000E+1, 0.00000000E+0, 0.40100980E+3, + 0.251E+3, 0.320E+2, 0.19523000E+1, 0.00000000E+0, 0.34304870E+3, 0.251E+3, 0.330E+2, + 0.19523000E+1, 0.00000000E+0, 0.30828460E+3, 0.251E+3, 0.340E+2, 0.19523000E+1, 0.00000000E+0, + 0.27015060E+3, 0.251E+3, 0.350E+2, 0.19523000E+1, 0.00000000E+0, 0.23518820E+3, 0.251E+3, + 0.360E+2, 0.19523000E+1, 0.00000000E+0, 0.11994646E+4, 0.251E+3, 0.370E+2, 0.19523000E+1, + 0.00000000E+0, 0.10619947E+4, 0.251E+3, 0.380E+2, 0.19523000E+1, 0.00000000E+0, 0.93369560E+3, + 0.251E+3, 0.390E+2, 0.19523000E+1, 0.00000000E+0, 0.84095330E+3, 0.251E+3, 0.400E+2, + 0.19523000E+1, 0.00000000E+0, 0.76784150E+3, 0.251E+3, 0.410E+2, 0.19523000E+1, 0.00000000E+0, + 0.59396240E+3, 0.251E+3, 0.420E+2, 0.19523000E+1, 0.00000000E+0, 0.66226990E+3, 0.251E+3, + 0.430E+2, 0.19523000E+1, 0.00000000E+0, 0.50560890E+3, 0.251E+3, 0.440E+2, 0.19523000E+1, + 0.00000000E+0, 0.55281280E+3, 0.251E+3, 0.450E+2, 0.19523000E+1, 0.00000000E+0, 0.51303450E+3, + 0.251E+3, 0.460E+2, 0.19523000E+1, 0.00000000E+0, 0.42738710E+3, 0.251E+3, 0.470E+2, + 0.19523000E+1, 0.00000000E+0, 0.45249980E+3, 0.251E+3, 0.480E+2, 0.19523000E+1, 0.00000000E+0, + 0.56656420E+3, 0.251E+3, 0.490E+2, 0.19523000E+1, 0.00000000E+0, 0.52563100E+3, 0.251E+3, + 0.500E+2, 0.19523000E+1, 0.00000000E+0, 0.46972550E+3, 0.251E+3, 0.510E+2, 0.19523000E+1, + 0.00000000E+0, 0.43644300E+3, 0.251E+3, 0.520E+2, 0.19523000E+1, 0.00000000E+0, 0.39516260E+3, + 0.251E+3, 0.530E+2, 0.19523000E+1, 0.00000000E+0, 0.35567420E+3, 0.251E+3, 0.540E+2, + 0.19523000E+1, 0.00000000E+0, 0.14614083E+4, 0.251E+3, 0.550E+2, 0.19523000E+1, 0.00000000E+0, + 0.13520527E+4, 0.251E+3, 0.560E+2, 0.19523000E+1, 0.00000000E+0, 0.11922239E+4, 0.251E+3, + 0.570E+2, 0.19523000E+1, 0.00000000E+0, 0.55449760E+3, 0.251E+3, 0.580E+2, 0.19523000E+1, + 0.27991000E+1, 0.11993914E+4, 0.251E+3, 0.590E+2, 0.19523000E+1, 0.00000000E+0, 0.11524260E+4, + 0.251E+3, 0.600E+2, 0.19523000E+1, 0.00000000E+0, 0.11237195E+4, 0.251E+3, 0.610E+2, + 0.19523000E+1, 0.00000000E+0, 0.10972997E+4, 0.251E+3, 0.620E+2, 0.19523000E+1, 0.00000000E+0, + 0.10738792E+4, 0.251E+3, 0.630E+2, 0.19523000E+1, 0.00000000E+0, 0.84761650E+3, 0.251E+3, + 0.640E+2, 0.19523000E+1, 0.00000000E+0, 0.94867820E+3, 0.251E+3, 0.650E+2, 0.19523000E+1, + 0.00000000E+0, 0.91560320E+3, 0.251E+3, 0.660E+2, 0.19523000E+1, 0.00000000E+0, 0.96949560E+3, + 0.251E+3, 0.670E+2, 0.19523000E+1, 0.00000000E+0, 0.94902750E+3, 0.251E+3, 0.680E+2, + 0.19523000E+1, 0.00000000E+0, 0.93061310E+3, 0.251E+3, 0.690E+2, 0.19523000E+1, 0.00000000E+0, + 0.91959590E+3, 0.251E+3, 0.700E+2, 0.19523000E+1, 0.00000000E+0, 0.77679900E+3, 0.251E+3, + 0.710E+2, 0.19523000E+1, 0.00000000E+0, 0.76667010E+3, 0.251E+3, 0.720E+2, 0.19523000E+1, + 0.00000000E+0, 0.70099760E+3, 0.251E+3, 0.730E+2, 0.19523000E+1, 0.00000000E+0, 0.59261750E+3, + 0.251E+3, 0.740E+2, 0.19523000E+1, 0.00000000E+0, 0.60337400E+3, 0.251E+3, 0.750E+2, + 0.19523000E+1, 0.00000000E+0, 0.54765300E+3, 0.251E+3, 0.760E+2, 0.19523000E+1, 0.00000000E+0, + 0.50212300E+3, 0.251E+3, 0.770E+2, 0.19523000E+1, 0.00000000E+0, 0.41748050E+3, 0.251E+3, + 0.780E+2, 0.19523000E+1, 0.00000000E+0, 0.39019750E+3, 0.251E+3, 0.790E+2, 0.19523000E+1, + 0.00000000E+0, 0.40170990E+3, 0.251E+3, 0.800E+2, 0.19523000E+1, 0.00000000E+0, 0.58191410E+3, + 0.251E+3, 0.810E+2, 0.19523000E+1, 0.00000000E+0, 0.57046250E+3, 0.251E+3, 0.820E+2, + 0.19523000E+1, 0.00000000E+0, 0.52553390E+3, 0.251E+3, 0.830E+2, 0.19523000E+1, 0.00000000E+0, + 0.50188930E+3, 0.251E+3, 0.840E+2, 0.19523000E+1, 0.00000000E+0, 0.46384860E+3, 0.251E+3, + 0.850E+2, 0.19523000E+1, 0.00000000E+0, 0.42562050E+3, 0.251E+3, 0.860E+2, 0.19523000E+1, + 0.00000000E+0, 0.13840410E+4, 0.251E+3, 0.870E+2, 0.19523000E+1, 0.00000000E+0, 0.13394353E+4, + 0.251E+3, 0.880E+2, 0.19523000E+1, 0.00000000E+0, 0.11880075E+4, 0.251E+3, 0.890E+2, + 0.19523000E+1, 0.00000000E+0, 0.10713664E+4, 0.251E+3, 0.900E+2, 0.19523000E+1, 0.00000000E+0, + 0.10616930E+4, 0.251E+3, 0.910E+2, 0.19523000E+1, 0.00000000E+0, 0.10280688E+4, 0.251E+3, + 0.920E+2, 0.19523000E+1, 0.00000000E+0, 0.10561396E+4, 0.251E+3, 0.930E+2, 0.19523000E+1, + 0.00000000E+0, 0.10232018E+4, 0.251E+3, 0.940E+2, 0.19523000E+1, 0.00000000E+0, 0.58196200E+2, + 0.251E+3, 0.101E+3, 0.19523000E+1, 0.00000000E+0, 0.18683530E+3, 0.251E+3, 0.103E+3, + 0.19523000E+1, 0.98650000E+0, 0.23860370E+3, 0.251E+3, 0.104E+3, 0.19523000E+1, 0.98080000E+0, + 0.18340000E+3, 0.251E+3, 0.105E+3, 0.19523000E+1, 0.97060000E+0, 0.13853490E+3, 0.251E+3, + 0.106E+3, 0.19523000E+1, 0.98680000E+0, 0.96572400E+2, 0.251E+3, 0.107E+3, 0.19523000E+1, + 0.99440000E+0, 0.70463400E+2, 0.251E+3, 0.108E+3, 0.19523000E+1, 0.99250000E+0, 0.48576600E+2, + 0.251E+3, 0.109E+3, 0.19523000E+1, 0.99820000E+0, 0.27268930E+3, 0.251E+3, 0.111E+3, + 0.19523000E+1, 0.96840000E+0, 0.42146260E+3, 0.251E+3, 0.112E+3, 0.19523000E+1, 0.96280000E+0, + 0.42844370E+3, 0.251E+3, 0.113E+3, 0.19523000E+1, 0.96480000E+0, 0.34592360E+3, 0.251E+3, + 0.114E+3, 0.19523000E+1, 0.95070000E+0, 0.28414620E+3, 0.251E+3, 0.115E+3, 0.19523000E+1, + 0.99470000E+0, 0.24067810E+3, 0.251E+3, 0.116E+3, 0.19523000E+1, 0.99480000E+0, 0.19703300E+3, + 0.251E+3, 0.117E+3, 0.19523000E+1, 0.99720000E+0, 0.37667550E+3, 0.251E+3, 0.119E+3, + 0.19523000E+1, 0.97670000E+0, 0.71337770E+3, 0.251E+3, 0.120E+3, 0.19523000E+1, 0.98310000E+0, + 0.37851240E+3, 0.251E+3, 0.121E+3, 0.19523000E+1, 0.18627000E+1, 0.36542570E+3, 0.251E+3, + 0.122E+3, 0.19523000E+1, 0.18299000E+1, 0.35808830E+3, 0.251E+3, 0.123E+3, 0.19523000E+1, + 0.19138000E+1, 0.35459770E+3, 0.251E+3, 0.124E+3, 0.19523000E+1, 0.18269000E+1, 0.32708070E+3, + 0.251E+3, 0.125E+3, 0.19523000E+1, 0.16406000E+1, 0.30288030E+3, 0.251E+3, 0.126E+3, + 0.19523000E+1, 0.16483000E+1, 0.28891150E+3, 0.251E+3, 0.127E+3, 0.19523000E+1, 0.17149000E+1, + 0.28239730E+3, 0.251E+3, 0.128E+3, 0.19523000E+1, 0.17937000E+1, 0.27851920E+3, 0.251E+3, + 0.129E+3, 0.19523000E+1, 0.95760000E+0, 0.26216840E+3, 0.251E+3, 0.130E+3, 0.19523000E+1, + 0.19419000E+1, 0.42584750E+3, 0.251E+3, 0.131E+3, 0.19523000E+1, 0.96010000E+0, 0.37544380E+3, + 0.251E+3, 0.132E+3, 0.19523000E+1, 0.94340000E+0, 0.33727630E+3, 0.251E+3, 0.133E+3, + 0.19523000E+1, 0.98890000E+0, 0.30839060E+3, 0.251E+3, 0.134E+3, 0.19523000E+1, 0.99010000E+0, + 0.27200760E+3, 0.251E+3, 0.135E+3, 0.19523000E+1, 0.99740000E+0, 0.44976690E+3, 0.251E+3, + 0.137E+3, 0.19523000E+1, 0.97380000E+0, 0.86748280E+3, 0.251E+3, 0.138E+3, 0.19523000E+1, + 0.98010000E+0, 0.66777030E+3, 0.251E+3, 0.139E+3, 0.19523000E+1, 0.19153000E+1, 0.50031680E+3, + 0.251E+3, 0.140E+3, 0.19523000E+1, 0.19355000E+1, 0.50520350E+3, 0.251E+3, 0.141E+3, + 0.19523000E+1, 0.19545000E+1, 0.47139900E+3, 0.251E+3, 0.142E+3, 0.19523000E+1, 0.19420000E+1, + 0.52700000E+3, 0.251E+3, 0.143E+3, 0.19523000E+1, 0.16682000E+1, 0.41174300E+3, 0.251E+3, + 0.144E+3, 0.19523000E+1, 0.18584000E+1, 0.38521960E+3, 0.251E+3, 0.145E+3, 0.19523000E+1, + 0.19003000E+1, 0.35780550E+3, 0.251E+3, 0.146E+3, 0.19523000E+1, 0.18630000E+1, 0.34602160E+3, + 0.251E+3, 0.147E+3, 0.19523000E+1, 0.96790000E+0, 0.34293620E+3, 0.251E+3, 0.148E+3, + 0.19523000E+1, 0.19539000E+1, 0.54066240E+3, 0.251E+3, 0.149E+3, 0.19523000E+1, 0.96330000E+0, + 0.49072030E+3, 0.251E+3, 0.150E+3, 0.19523000E+1, 0.95140000E+0, 0.46051500E+3, 0.251E+3, + 0.151E+3, 0.19523000E+1, 0.97490000E+0, 0.43616550E+3, 0.251E+3, 0.152E+3, 0.19523000E+1, + 0.98110000E+0, 0.39886600E+3, 0.251E+3, 0.153E+3, 0.19523000E+1, 0.99680000E+0, 0.53323930E+3, + 0.251E+3, 0.155E+3, 0.19523000E+1, 0.99090000E+0, 0.11229068E+4, 0.251E+3, 0.156E+3, + 0.19523000E+1, 0.97970000E+0, 0.84459250E+3, 0.251E+3, 0.157E+3, 0.19523000E+1, 0.19373000E+1, + 0.53785080E+3, 0.251E+3, 0.159E+3, 0.19523000E+1, 0.29425000E+1, 0.52673890E+3, 0.251E+3, + 0.160E+3, 0.19523000E+1, 0.29455000E+1, 0.51010490E+3, 0.251E+3, 0.161E+3, 0.19523000E+1, + 0.29413000E+1, 0.51239170E+3, 0.251E+3, 0.162E+3, 0.19523000E+1, 0.29300000E+1, 0.49317410E+3, + 0.251E+3, 0.163E+3, 0.19523000E+1, 0.18286000E+1, 0.51559660E+3, 0.251E+3, 0.164E+3, + 0.19523000E+1, 0.28732000E+1, 0.48442780E+3, 0.251E+3, 0.165E+3, 0.19523000E+1, 0.29086000E+1, + 0.49251520E+3, 0.251E+3, 0.166E+3, 0.19523000E+1, 0.28965000E+1, 0.45997740E+3, 0.251E+3, + 0.167E+3, 0.19523000E+1, 0.29242000E+1, 0.44693120E+3, 0.251E+3, 0.168E+3, 0.19523000E+1, + 0.29282000E+1, 0.44402250E+3, 0.251E+3, 0.169E+3, 0.19523000E+1, 0.29246000E+1, 0.46651200E+3, + 0.251E+3, 0.170E+3, 0.19523000E+1, 0.28482000E+1, 0.42927350E+3, 0.251E+3, 0.171E+3, + 0.19523000E+1, 0.29219000E+1, 0.57861310E+3, 0.251E+3, 0.172E+3, 0.19523000E+1, 0.19254000E+1, + 0.53790480E+3, 0.251E+3, 0.173E+3, 0.19523000E+1, 0.19459000E+1, 0.49161910E+3, 0.251E+3, + 0.174E+3, 0.19523000E+1, 0.19292000E+1, 0.49667380E+3, 0.251E+3, 0.175E+3, 0.19523000E+1, + 0.18104000E+1, 0.43648690E+3, 0.251E+3, 0.176E+3, 0.19523000E+1, 0.18858000E+1, 0.41080070E+3, + 0.251E+3, 0.177E+3, 0.19523000E+1, 0.18648000E+1, 0.39246080E+3, 0.251E+3, 0.178E+3, + 0.19523000E+1, 0.19188000E+1, 0.37514240E+3, 0.251E+3, 0.179E+3, 0.19523000E+1, 0.98460000E+0, + 0.36302260E+3, 0.251E+3, 0.180E+3, 0.19523000E+1, 0.19896000E+1, 0.58068260E+3, 0.251E+3, + 0.181E+3, 0.19523000E+1, 0.92670000E+0, 0.53094590E+3, 0.251E+3, 0.182E+3, 0.19523000E+1, + 0.93830000E+0, 0.51573940E+3, 0.251E+3, 0.183E+3, 0.19523000E+1, 0.98200000E+0, 0.50211810E+3, + 0.251E+3, 0.184E+3, 0.19523000E+1, 0.98150000E+0, 0.46948140E+3, 0.251E+3, 0.185E+3, + 0.19523000E+1, 0.99540000E+0, 0.60069020E+3, 0.251E+3, 0.187E+3, 0.19523000E+1, 0.97050000E+0, + 0.11195215E+4, 0.251E+3, 0.188E+3, 0.19523000E+1, 0.96620000E+0, 0.63642920E+3, 0.251E+3, + 0.189E+3, 0.19523000E+1, 0.29070000E+1, 0.73257850E+3, 0.251E+3, 0.190E+3, 0.19523000E+1, + 0.28844000E+1, 0.65541880E+3, 0.251E+3, 0.191E+3, 0.19523000E+1, 0.28738000E+1, 0.58044230E+3, + 0.251E+3, 0.192E+3, 0.19523000E+1, 0.28878000E+1, 0.55878270E+3, 0.251E+3, 0.193E+3, + 0.19523000E+1, 0.29095000E+1, 0.66842250E+3, 0.251E+3, 0.194E+3, 0.19523000E+1, 0.19209000E+1, + 0.15675410E+3, 0.251E+3, 0.204E+3, 0.19523000E+1, 0.19697000E+1, 0.15413350E+3, 0.251E+3, + 0.205E+3, 0.19523000E+1, 0.19441000E+1, 0.11315480E+3, 0.251E+3, 0.206E+3, 0.19523000E+1, + 0.19985000E+1, 0.90704300E+2, 0.251E+3, 0.207E+3, 0.19523000E+1, 0.20143000E+1, 0.62195400E+2, + 0.251E+3, 0.208E+3, 0.19523000E+1, 0.19887000E+1, 0.27727810E+3, 0.251E+3, 0.212E+3, + 0.19523000E+1, 0.19496000E+1, 0.33486500E+3, 0.251E+3, 0.213E+3, 0.19523000E+1, 0.19311000E+1, + 0.32195190E+3, 0.251E+3, 0.214E+3, 0.19523000E+1, 0.19435000E+1, 0.28021780E+3, 0.251E+3, + 0.215E+3, 0.19523000E+1, 0.20102000E+1, 0.23581280E+3, 0.251E+3, 0.216E+3, 0.19523000E+1, + 0.19903000E+1, 0.38844680E+3, 0.251E+3, 0.220E+3, 0.19523000E+1, 0.19349000E+1, 0.37399630E+3, + 0.251E+3, 0.221E+3, 0.19523000E+1, 0.28999000E+1, 0.37864590E+3, 0.251E+3, 0.222E+3, + 0.19523000E+1, 0.38675000E+1, 0.34645320E+3, 0.251E+3, 0.223E+3, 0.19523000E+1, 0.29110000E+1, + 0.26154130E+3, 0.251E+3, 0.224E+3, 0.19523000E+1, 0.10619100E+2, 0.22411260E+3, 0.251E+3, + 0.225E+3, 0.19523000E+1, 0.98849000E+1, 0.21995380E+3, 0.251E+3, 0.226E+3, 0.19523000E+1, + 0.91376000E+1, 0.25727540E+3, 0.251E+3, 0.227E+3, 0.19523000E+1, 0.29263000E+1, 0.23987350E+3, + 0.251E+3, 0.228E+3, 0.19523000E+1, 0.65458000E+1, 0.33847720E+3, 0.251E+3, 0.231E+3, + 0.19523000E+1, 0.19315000E+1, 0.35762210E+3, 0.251E+3, 0.232E+3, 0.19523000E+1, 0.19447000E+1, + 0.32850830E+3, 0.251E+3, 0.233E+3, 0.19523000E+1, 0.19793000E+1, 0.30597730E+3, 0.251E+3, + 0.234E+3, 0.19523000E+1, 0.19812000E+1, 0.46536830E+3, 0.251E+3, 0.238E+3, 0.19523000E+1, + 0.19143000E+1, 0.44902050E+3, 0.251E+3, 0.239E+3, 0.19523000E+1, 0.28903000E+1, 0.45315700E+3, + 0.251E+3, 0.240E+3, 0.19523000E+1, 0.39106000E+1, 0.43804100E+3, 0.251E+3, 0.241E+3, + 0.19523000E+1, 0.29225000E+1, 0.38788180E+3, 0.251E+3, 0.242E+3, 0.19523000E+1, 0.11055600E+2, + 0.34276350E+3, 0.251E+3, 0.243E+3, 0.19523000E+1, 0.95402000E+1, 0.32403570E+3, 0.251E+3, + 0.244E+3, 0.19523000E+1, 0.88895000E+1, 0.32956900E+3, 0.251E+3, 0.245E+3, 0.19523000E+1, + 0.29696000E+1, 0.34418570E+3, 0.251E+3, 0.246E+3, 0.19523000E+1, 0.57095000E+1, 0.43665200E+3, + 0.251E+3, 0.249E+3, 0.19523000E+1, 0.19378000E+1, 0.47467200E+3, 0.251E+3, 0.250E+3, + 0.19523000E+1, 0.19505000E+1, 0.44805730E+3, 0.251E+3, 0.251E+3, 0.19523000E+1, 0.19523000E+1, + 0.35246100E+2, 0.252E+3, 0.100E+1, 0.19639000E+1, 0.91180000E+0, 0.23585100E+2, 0.252E+3, + 0.200E+1, 0.19639000E+1, 0.00000000E+0, 0.51271640E+3, 0.252E+3, 0.300E+1, 0.19639000E+1, + 0.00000000E+0, 0.30576290E+3, 0.252E+3, 0.400E+1, 0.19639000E+1, 0.00000000E+0, 0.20945590E+3, + 0.252E+3, 0.500E+1, 0.19639000E+1, 0.00000000E+0, 0.14319470E+3, 0.252E+3, 0.600E+1, + 0.19639000E+1, 0.00000000E+0, 0.10097450E+3, 0.252E+3, 0.700E+1, 0.19639000E+1, 0.00000000E+0, + 0.76886300E+2, 0.252E+3, 0.800E+1, 0.19639000E+1, 0.00000000E+0, 0.58522300E+2, 0.252E+3, + 0.900E+1, 0.19639000E+1, 0.00000000E+0, 0.45183600E+2, 0.252E+3, 0.100E+2, 0.19639000E+1, + 0.00000000E+0, 0.61435230E+3, 0.252E+3, 0.110E+2, 0.19639000E+1, 0.00000000E+0, 0.48450380E+3, + 0.252E+3, 0.120E+2, 0.19639000E+1, 0.00000000E+0, 0.45072670E+3, 0.252E+3, 0.130E+2, + 0.19639000E+1, 0.00000000E+0, 0.35936400E+3, 0.252E+3, 0.140E+2, 0.19639000E+1, 0.00000000E+0, + 0.28289020E+3, 0.252E+3, 0.150E+2, 0.19639000E+1, 0.00000000E+0, 0.23614560E+3, 0.252E+3, + 0.160E+2, 0.19639000E+1, 0.00000000E+0, 0.19392690E+3, 0.252E+3, 0.170E+2, 0.19639000E+1, + 0.00000000E+0, 0.15936080E+3, 0.252E+3, 0.180E+2, 0.19639000E+1, 0.00000000E+0, 0.10025559E+4, + 0.252E+3, 0.190E+2, 0.19639000E+1, 0.00000000E+0, 0.84305400E+3, 0.252E+3, 0.200E+2, + 0.19639000E+1, 0.00000000E+0, 0.69945860E+3, 0.252E+3, 0.210E+2, 0.19639000E+1, 0.00000000E+0, + 0.67814850E+3, 0.252E+3, 0.220E+2, 0.19639000E+1, 0.00000000E+0, 0.62246350E+3, 0.252E+3, + 0.230E+2, 0.19639000E+1, 0.00000000E+0, 0.49067860E+3, 0.252E+3, 0.240E+2, 0.19639000E+1, + 0.00000000E+0, 0.53774700E+3, 0.252E+3, 0.250E+2, 0.19639000E+1, 0.00000000E+0, 0.42250680E+3, + 0.252E+3, 0.260E+2, 0.19639000E+1, 0.00000000E+0, 0.44986640E+3, 0.252E+3, 0.270E+2, + 0.19639000E+1, 0.00000000E+0, 0.46232080E+3, 0.252E+3, 0.280E+2, 0.19639000E+1, 0.00000000E+0, + 0.35464230E+3, 0.252E+3, 0.290E+2, 0.19639000E+1, 0.00000000E+0, 0.36661620E+3, 0.252E+3, + 0.300E+2, 0.19639000E+1, 0.00000000E+0, 0.43326650E+3, 0.252E+3, 0.310E+2, 0.19639000E+1, + 0.00000000E+0, 0.38551090E+3, 0.252E+3, 0.320E+2, 0.19639000E+1, 0.00000000E+0, 0.33138440E+3, + 0.252E+3, 0.330E+2, 0.19639000E+1, 0.00000000E+0, 0.29873310E+3, 0.252E+3, 0.340E+2, + 0.19639000E+1, 0.00000000E+0, 0.26262260E+3, 0.252E+3, 0.350E+2, 0.19639000E+1, 0.00000000E+0, + 0.22931350E+3, 0.252E+3, 0.360E+2, 0.19639000E+1, 0.00000000E+0, 0.11257134E+4, 0.252E+3, + 0.370E+2, 0.19639000E+1, 0.00000000E+0, 0.10038665E+4, 0.252E+3, 0.380E+2, 0.19639000E+1, + 0.00000000E+0, 0.88595760E+3, 0.252E+3, 0.390E+2, 0.19639000E+1, 0.00000000E+0, 0.79994710E+3, + 0.252E+3, 0.400E+2, 0.19639000E+1, 0.00000000E+0, 0.73167410E+3, 0.252E+3, 0.410E+2, + 0.19639000E+1, 0.00000000E+0, 0.56783410E+3, 0.252E+3, 0.420E+2, 0.19639000E+1, 0.00000000E+0, + 0.63235020E+3, 0.252E+3, 0.430E+2, 0.19639000E+1, 0.00000000E+0, 0.48447400E+3, 0.252E+3, + 0.440E+2, 0.19639000E+1, 0.00000000E+0, 0.52945790E+3, 0.252E+3, 0.450E+2, 0.19639000E+1, + 0.00000000E+0, 0.49188120E+3, 0.252E+3, 0.460E+2, 0.19639000E+1, 0.00000000E+0, 0.40979950E+3, + 0.252E+3, 0.470E+2, 0.19639000E+1, 0.00000000E+0, 0.43443580E+3, 0.252E+3, 0.480E+2, + 0.19639000E+1, 0.00000000E+0, 0.54208910E+3, 0.252E+3, 0.490E+2, 0.19639000E+1, 0.00000000E+0, + 0.50487630E+3, 0.252E+3, 0.500E+2, 0.19639000E+1, 0.00000000E+0, 0.45302540E+3, 0.252E+3, + 0.510E+2, 0.19639000E+1, 0.00000000E+0, 0.42201870E+3, 0.252E+3, 0.520E+2, 0.19639000E+1, + 0.00000000E+0, 0.38318370E+3, 0.252E+3, 0.530E+2, 0.19639000E+1, 0.00000000E+0, 0.34582830E+3, + 0.252E+3, 0.540E+2, 0.19639000E+1, 0.00000000E+0, 0.13722422E+4, 0.252E+3, 0.550E+2, + 0.19639000E+1, 0.00000000E+0, 0.12768973E+4, 0.252E+3, 0.560E+2, 0.19639000E+1, 0.00000000E+0, + 0.11301276E+4, 0.252E+3, 0.570E+2, 0.19639000E+1, 0.00000000E+0, 0.53452440E+3, 0.252E+3, + 0.580E+2, 0.19639000E+1, 0.27991000E+1, 0.11341681E+4, 0.252E+3, 0.590E+2, 0.19639000E+1, + 0.00000000E+0, 0.10903536E+4, 0.252E+3, 0.600E+2, 0.19639000E+1, 0.00000000E+0, 0.10633516E+4, + 0.252E+3, 0.610E+2, 0.19639000E+1, 0.00000000E+0, 0.10384792E+4, 0.252E+3, 0.620E+2, + 0.19639000E+1, 0.00000000E+0, 0.10164371E+4, 0.252E+3, 0.630E+2, 0.19639000E+1, 0.00000000E+0, + 0.80596520E+3, 0.252E+3, 0.640E+2, 0.19639000E+1, 0.00000000E+0, 0.89702580E+3, 0.252E+3, + 0.650E+2, 0.19639000E+1, 0.00000000E+0, 0.86641260E+3, 0.252E+3, 0.660E+2, 0.19639000E+1, + 0.00000000E+0, 0.91841900E+3, 0.252E+3, 0.670E+2, 0.19639000E+1, 0.00000000E+0, 0.89909510E+3, + 0.252E+3, 0.680E+2, 0.19639000E+1, 0.00000000E+0, 0.88176000E+3, 0.252E+3, 0.690E+2, + 0.19639000E+1, 0.00000000E+0, 0.87114240E+3, 0.252E+3, 0.700E+2, 0.19639000E+1, 0.00000000E+0, + 0.73817630E+3, 0.252E+3, 0.710E+2, 0.19639000E+1, 0.00000000E+0, 0.73134130E+3, 0.252E+3, + 0.720E+2, 0.19639000E+1, 0.00000000E+0, 0.67040070E+3, 0.252E+3, 0.730E+2, 0.19639000E+1, + 0.00000000E+0, 0.56812010E+3, 0.252E+3, 0.740E+2, 0.19639000E+1, 0.00000000E+0, 0.57890380E+3, + 0.252E+3, 0.750E+2, 0.19639000E+1, 0.00000000E+0, 0.52661010E+3, 0.252E+3, 0.760E+2, + 0.19639000E+1, 0.00000000E+0, 0.48371080E+3, 0.252E+3, 0.770E+2, 0.19639000E+1, 0.00000000E+0, + 0.40307740E+3, 0.252E+3, 0.780E+2, 0.19639000E+1, 0.00000000E+0, 0.37705920E+3, 0.252E+3, + 0.790E+2, 0.19639000E+1, 0.00000000E+0, 0.38840990E+3, 0.252E+3, 0.800E+2, 0.19639000E+1, + 0.00000000E+0, 0.55767540E+3, 0.252E+3, 0.810E+2, 0.19639000E+1, 0.00000000E+0, 0.54820960E+3, + 0.252E+3, 0.820E+2, 0.19639000E+1, 0.00000000E+0, 0.50681290E+3, 0.252E+3, 0.830E+2, + 0.19639000E+1, 0.00000000E+0, 0.48504920E+3, 0.252E+3, 0.840E+2, 0.19639000E+1, 0.00000000E+0, + 0.44946500E+3, 0.252E+3, 0.850E+2, 0.19639000E+1, 0.00000000E+0, 0.41343530E+3, 0.252E+3, + 0.860E+2, 0.19639000E+1, 0.00000000E+0, 0.13034917E+4, 0.252E+3, 0.870E+2, 0.19639000E+1, + 0.00000000E+0, 0.12675667E+4, 0.252E+3, 0.880E+2, 0.19639000E+1, 0.00000000E+0, 0.11280206E+4, + 0.252E+3, 0.890E+2, 0.19639000E+1, 0.00000000E+0, 0.10215531E+4, 0.252E+3, 0.900E+2, + 0.19639000E+1, 0.00000000E+0, 0.10104948E+4, 0.252E+3, 0.910E+2, 0.19639000E+1, 0.00000000E+0, + 0.97859690E+3, 0.252E+3, 0.920E+2, 0.19639000E+1, 0.00000000E+0, 0.10027172E+4, 0.252E+3, + 0.930E+2, 0.19639000E+1, 0.00000000E+0, 0.97186890E+3, 0.252E+3, 0.940E+2, 0.19639000E+1, + 0.00000000E+0, 0.56276900E+2, 0.252E+3, 0.101E+3, 0.19639000E+1, 0.00000000E+0, 0.17817450E+3, + 0.252E+3, 0.103E+3, 0.19639000E+1, 0.98650000E+0, 0.22803400E+3, 0.252E+3, 0.104E+3, + 0.19639000E+1, 0.98080000E+0, 0.17677650E+3, 0.252E+3, 0.105E+3, 0.19639000E+1, 0.97060000E+0, + 0.13427420E+3, 0.252E+3, 0.106E+3, 0.19639000E+1, 0.98680000E+0, 0.94162200E+2, 0.252E+3, + 0.107E+3, 0.19639000E+1, 0.99440000E+0, 0.69039900E+2, 0.252E+3, 0.108E+3, 0.19639000E+1, + 0.99250000E+0, 0.47877100E+2, 0.252E+3, 0.109E+3, 0.19639000E+1, 0.99820000E+0, 0.25966980E+3, + 0.252E+3, 0.111E+3, 0.19639000E+1, 0.96840000E+0, 0.40103040E+3, 0.252E+3, 0.112E+3, + 0.19639000E+1, 0.96280000E+0, 0.40936850E+3, 0.252E+3, 0.113E+3, 0.19639000E+1, 0.96480000E+0, + 0.33269600E+3, 0.252E+3, 0.114E+3, 0.19639000E+1, 0.95070000E+0, 0.27467950E+3, 0.252E+3, + 0.115E+3, 0.19639000E+1, 0.99470000E+0, 0.23351090E+3, 0.252E+3, 0.116E+3, 0.19639000E+1, + 0.99480000E+0, 0.19189600E+3, 0.252E+3, 0.117E+3, 0.19639000E+1, 0.99720000E+0, 0.36037990E+3, + 0.252E+3, 0.119E+3, 0.19639000E+1, 0.97670000E+0, 0.67520960E+3, 0.252E+3, 0.120E+3, + 0.19639000E+1, 0.98310000E+0, 0.36377550E+3, 0.252E+3, 0.121E+3, 0.19639000E+1, 0.18627000E+1, + 0.35131790E+3, 0.252E+3, 0.122E+3, 0.19639000E+1, 0.18299000E+1, 0.34423720E+3, 0.252E+3, + 0.123E+3, 0.19639000E+1, 0.19138000E+1, 0.34067740E+3, 0.252E+3, 0.124E+3, 0.19639000E+1, + 0.18269000E+1, 0.31512290E+3, 0.252E+3, 0.125E+3, 0.19639000E+1, 0.16406000E+1, 0.29209790E+3, + 0.252E+3, 0.126E+3, 0.19639000E+1, 0.16483000E+1, 0.27865290E+3, 0.252E+3, 0.127E+3, + 0.19639000E+1, 0.17149000E+1, 0.27230380E+3, 0.252E+3, 0.128E+3, 0.19639000E+1, 0.17937000E+1, + 0.26795690E+3, 0.252E+3, 0.129E+3, 0.19639000E+1, 0.95760000E+0, 0.25325200E+3, 0.252E+3, + 0.130E+3, 0.19639000E+1, 0.19419000E+1, 0.40786260E+3, 0.252E+3, 0.131E+3, 0.19639000E+1, + 0.96010000E+0, 0.36139310E+3, 0.252E+3, 0.132E+3, 0.19639000E+1, 0.94340000E+0, 0.32590920E+3, + 0.252E+3, 0.133E+3, 0.19639000E+1, 0.98890000E+0, 0.29882550E+3, 0.252E+3, 0.134E+3, + 0.19639000E+1, 0.99010000E+0, 0.26438680E+3, 0.252E+3, 0.135E+3, 0.19639000E+1, 0.99740000E+0, + 0.43088900E+3, 0.252E+3, 0.137E+3, 0.19639000E+1, 0.97380000E+0, 0.82090550E+3, 0.252E+3, + 0.138E+3, 0.19639000E+1, 0.98010000E+0, 0.63678340E+3, 0.252E+3, 0.139E+3, 0.19639000E+1, + 0.19153000E+1, 0.48083080E+3, 0.252E+3, 0.140E+3, 0.19639000E+1, 0.19355000E+1, 0.48546850E+3, + 0.252E+3, 0.141E+3, 0.19639000E+1, 0.19545000E+1, 0.45354170E+3, 0.252E+3, 0.142E+3, + 0.19639000E+1, 0.19420000E+1, 0.50518300E+3, 0.252E+3, 0.143E+3, 0.19639000E+1, 0.16682000E+1, + 0.39728740E+3, 0.252E+3, 0.144E+3, 0.19639000E+1, 0.18584000E+1, 0.37184930E+3, 0.252E+3, + 0.145E+3, 0.19639000E+1, 0.19003000E+1, 0.34561400E+3, 0.252E+3, 0.146E+3, 0.19639000E+1, + 0.18630000E+1, 0.33407750E+3, 0.252E+3, 0.147E+3, 0.19639000E+1, 0.96790000E+0, 0.33175670E+3, + 0.252E+3, 0.148E+3, 0.19639000E+1, 0.19539000E+1, 0.51804080E+3, 0.252E+3, 0.149E+3, + 0.19639000E+1, 0.96330000E+0, 0.47212430E+3, 0.252E+3, 0.150E+3, 0.19639000E+1, 0.95140000E+0, + 0.44439750E+3, 0.252E+3, 0.151E+3, 0.19639000E+1, 0.97490000E+0, 0.42181780E+3, 0.252E+3, + 0.152E+3, 0.19639000E+1, 0.98110000E+0, 0.38675500E+3, 0.252E+3, 0.153E+3, 0.19639000E+1, + 0.99680000E+0, 0.51246920E+3, 0.252E+3, 0.155E+3, 0.19639000E+1, 0.99090000E+0, 0.10614185E+4, + 0.252E+3, 0.156E+3, 0.19639000E+1, 0.97970000E+0, 0.80501180E+3, 0.252E+3, 0.157E+3, + 0.19639000E+1, 0.19373000E+1, 0.51860750E+3, 0.252E+3, 0.159E+3, 0.19639000E+1, 0.29425000E+1, + 0.50791390E+3, 0.252E+3, 0.160E+3, 0.19639000E+1, 0.29455000E+1, 0.49198270E+3, 0.252E+3, + 0.161E+3, 0.19639000E+1, 0.29413000E+1, 0.49389760E+3, 0.252E+3, 0.162E+3, 0.19639000E+1, + 0.29300000E+1, 0.47446600E+3, 0.252E+3, 0.163E+3, 0.19639000E+1, 0.18286000E+1, 0.49685260E+3, + 0.252E+3, 0.164E+3, 0.19639000E+1, 0.28732000E+1, 0.46706730E+3, 0.252E+3, 0.165E+3, + 0.19639000E+1, 0.29086000E+1, 0.47437630E+3, 0.252E+3, 0.166E+3, 0.19639000E+1, 0.28965000E+1, + 0.44371620E+3, 0.252E+3, 0.167E+3, 0.19639000E+1, 0.29242000E+1, 0.43121480E+3, 0.252E+3, + 0.168E+3, 0.19639000E+1, 0.29282000E+1, 0.42833450E+3, 0.252E+3, 0.169E+3, 0.19639000E+1, + 0.29246000E+1, 0.44958170E+3, 0.252E+3, 0.170E+3, 0.19639000E+1, 0.28482000E+1, 0.41422170E+3, + 0.252E+3, 0.171E+3, 0.19639000E+1, 0.29219000E+1, 0.55455640E+3, 0.252E+3, 0.172E+3, + 0.19639000E+1, 0.19254000E+1, 0.51681140E+3, 0.252E+3, 0.173E+3, 0.19639000E+1, 0.19459000E+1, + 0.47354520E+3, 0.252E+3, 0.174E+3, 0.19639000E+1, 0.19292000E+1, 0.47737190E+3, 0.252E+3, + 0.175E+3, 0.19639000E+1, 0.18104000E+1, 0.42195370E+3, 0.252E+3, 0.176E+3, 0.19639000E+1, + 0.18858000E+1, 0.39750830E+3, 0.252E+3, 0.177E+3, 0.19639000E+1, 0.18648000E+1, 0.37998620E+3, + 0.252E+3, 0.178E+3, 0.19639000E+1, 0.19188000E+1, 0.36322860E+3, 0.252E+3, 0.179E+3, + 0.19639000E+1, 0.98460000E+0, 0.35217630E+3, 0.252E+3, 0.180E+3, 0.19639000E+1, 0.19896000E+1, + 0.55705210E+3, 0.252E+3, 0.181E+3, 0.19639000E+1, 0.92670000E+0, 0.51133530E+3, 0.252E+3, + 0.182E+3, 0.19639000E+1, 0.93830000E+0, 0.49776870E+3, 0.252E+3, 0.183E+3, 0.19639000E+1, + 0.98200000E+0, 0.48542330E+3, 0.252E+3, 0.184E+3, 0.19639000E+1, 0.98150000E+0, 0.45493030E+3, + 0.252E+3, 0.185E+3, 0.19639000E+1, 0.99540000E+0, 0.57742140E+3, 0.252E+3, 0.187E+3, + 0.19639000E+1, 0.97050000E+0, 0.10607432E+4, 0.252E+3, 0.188E+3, 0.19639000E+1, 0.96620000E+0, + 0.61356050E+3, 0.252E+3, 0.189E+3, 0.19639000E+1, 0.29070000E+1, 0.70396650E+3, 0.252E+3, + 0.190E+3, 0.19639000E+1, 0.28844000E+1, 0.63075620E+3, 0.252E+3, 0.191E+3, 0.19639000E+1, + 0.28738000E+1, 0.56000710E+3, 0.252E+3, 0.192E+3, 0.19639000E+1, 0.28878000E+1, 0.53943990E+3, + 0.252E+3, 0.193E+3, 0.19639000E+1, 0.29095000E+1, 0.64068280E+3, 0.252E+3, 0.194E+3, + 0.19639000E+1, 0.19209000E+1, 0.15112750E+3, 0.252E+3, 0.204E+3, 0.19639000E+1, 0.19697000E+1, + 0.14889980E+3, 0.252E+3, 0.205E+3, 0.19639000E+1, 0.19441000E+1, 0.11000870E+3, 0.252E+3, + 0.206E+3, 0.19639000E+1, 0.19985000E+1, 0.88495300E+2, 0.252E+3, 0.207E+3, 0.19639000E+1, + 0.20143000E+1, 0.61025800E+2, 0.252E+3, 0.208E+3, 0.19639000E+1, 0.19887000E+1, 0.26613770E+3, + 0.252E+3, 0.212E+3, 0.19639000E+1, 0.19496000E+1, 0.32131290E+3, 0.252E+3, 0.213E+3, + 0.19639000E+1, 0.19311000E+1, 0.30994780E+3, 0.252E+3, 0.214E+3, 0.19639000E+1, 0.19435000E+1, + 0.27080050E+3, 0.252E+3, 0.215E+3, 0.19639000E+1, 0.20102000E+1, 0.22881280E+3, 0.252E+3, + 0.216E+3, 0.19639000E+1, 0.19903000E+1, 0.37302450E+3, 0.252E+3, 0.220E+3, 0.19639000E+1, + 0.19349000E+1, 0.36007160E+3, 0.252E+3, 0.221E+3, 0.19639000E+1, 0.28999000E+1, 0.36462620E+3, + 0.252E+3, 0.222E+3, 0.19639000E+1, 0.38675000E+1, 0.33363080E+3, 0.252E+3, 0.223E+3, + 0.19639000E+1, 0.29110000E+1, 0.25301950E+3, 0.252E+3, 0.224E+3, 0.19639000E+1, 0.10619100E+2, + 0.21739930E+3, 0.252E+3, 0.225E+3, 0.19639000E+1, 0.98849000E+1, 0.21329230E+3, 0.252E+3, + 0.226E+3, 0.19639000E+1, 0.91376000E+1, 0.24838210E+3, 0.252E+3, 0.227E+3, 0.19639000E+1, + 0.29263000E+1, 0.23186030E+3, 0.252E+3, 0.228E+3, 0.19639000E+1, 0.65458000E+1, 0.32567860E+3, + 0.252E+3, 0.231E+3, 0.19639000E+1, 0.19315000E+1, 0.34453460E+3, 0.252E+3, 0.232E+3, + 0.19639000E+1, 0.19447000E+1, 0.31759860E+3, 0.252E+3, 0.233E+3, 0.19639000E+1, 0.19793000E+1, + 0.29651530E+3, 0.252E+3, 0.234E+3, 0.19639000E+1, 0.19812000E+1, 0.44715550E+3, 0.252E+3, + 0.238E+3, 0.19639000E+1, 0.19143000E+1, 0.43284780E+3, 0.252E+3, 0.239E+3, 0.19639000E+1, + 0.28903000E+1, 0.43727120E+3, 0.252E+3, 0.240E+3, 0.19639000E+1, 0.39106000E+1, 0.42265520E+3, + 0.252E+3, 0.241E+3, 0.19639000E+1, 0.29225000E+1, 0.37537250E+3, 0.252E+3, 0.242E+3, + 0.19639000E+1, 0.11055600E+2, 0.33249710E+3, 0.252E+3, 0.243E+3, 0.19639000E+1, 0.95402000E+1, + 0.31460820E+3, 0.252E+3, 0.244E+3, 0.19639000E+1, 0.88895000E+1, 0.31917350E+3, 0.252E+3, + 0.245E+3, 0.19639000E+1, 0.29696000E+1, 0.33302450E+3, 0.252E+3, 0.246E+3, 0.19639000E+1, + 0.57095000E+1, 0.42051550E+3, 0.252E+3, 0.249E+3, 0.19639000E+1, 0.19378000E+1, 0.45707930E+3, + 0.252E+3, 0.250E+3, 0.19639000E+1, 0.19505000E+1, 0.43269410E+3, 0.252E+3, 0.251E+3, + 0.19639000E+1, 0.19523000E+1, 0.41857890E+3, 0.252E+3, 0.252E+3, 0.19639000E+1, 0.19639000E+1, + 0.44832100E+2, 0.256E+3, 0.100E+1, 0.18467000E+1, 0.91180000E+0, 0.29186400E+2, 0.256E+3, + 0.200E+1, 0.18467000E+1, 0.00000000E+0, 0.75032270E+3, 0.256E+3, 0.300E+1, 0.18467000E+1, + 0.00000000E+0, 0.41786520E+3, 0.256E+3, 0.400E+1, 0.18467000E+1, 0.00000000E+0, 0.27634300E+3, + 0.256E+3, 0.500E+1, 0.18467000E+1, 0.00000000E+0, 0.18434620E+3, 0.256E+3, 0.600E+1, + 0.18467000E+1, 0.00000000E+0, 0.12774190E+3, 0.256E+3, 0.700E+1, 0.18467000E+1, 0.00000000E+0, + 0.96095000E+2, 0.256E+3, 0.800E+1, 0.18467000E+1, 0.00000000E+0, 0.72385200E+2, 0.256E+3, + 0.900E+1, 0.18467000E+1, 0.00000000E+0, 0.55409200E+2, 0.256E+3, 0.100E+2, 0.18467000E+1, + 0.00000000E+0, 0.89516260E+3, 0.256E+3, 0.110E+2, 0.18467000E+1, 0.00000000E+0, 0.66976420E+3, + 0.256E+3, 0.120E+2, 0.18467000E+1, 0.00000000E+0, 0.61142610E+3, 0.256E+3, 0.130E+2, + 0.18467000E+1, 0.00000000E+0, 0.47565060E+3, 0.256E+3, 0.140E+2, 0.18467000E+1, 0.00000000E+0, + 0.36714490E+3, 0.256E+3, 0.150E+2, 0.18467000E+1, 0.00000000E+0, 0.30279080E+3, 0.256E+3, + 0.160E+2, 0.18467000E+1, 0.00000000E+0, 0.24586350E+3, 0.256E+3, 0.170E+2, 0.18467000E+1, + 0.00000000E+0, 0.20010940E+3, 0.256E+3, 0.180E+2, 0.18467000E+1, 0.00000000E+0, 0.14768694E+4, + 0.256E+3, 0.190E+2, 0.18467000E+1, 0.00000000E+0, 0.11905306E+4, 0.256E+3, 0.200E+2, + 0.18467000E+1, 0.00000000E+0, 0.97858840E+3, 0.256E+3, 0.210E+2, 0.18467000E+1, 0.00000000E+0, + 0.94093240E+3, 0.256E+3, 0.220E+2, 0.18467000E+1, 0.00000000E+0, 0.85937300E+3, 0.256E+3, + 0.230E+2, 0.18467000E+1, 0.00000000E+0, 0.67681130E+3, 0.256E+3, 0.240E+2, 0.18467000E+1, + 0.00000000E+0, 0.73708980E+3, 0.256E+3, 0.250E+2, 0.18467000E+1, 0.00000000E+0, 0.57808990E+3, + 0.256E+3, 0.260E+2, 0.18467000E+1, 0.00000000E+0, 0.60928650E+3, 0.256E+3, 0.270E+2, + 0.18467000E+1, 0.00000000E+0, 0.62924930E+3, 0.256E+3, 0.280E+2, 0.18467000E+1, 0.00000000E+0, + 0.48241490E+3, 0.256E+3, 0.290E+2, 0.18467000E+1, 0.00000000E+0, 0.49120730E+3, 0.256E+3, + 0.300E+2, 0.18467000E+1, 0.00000000E+0, 0.58352030E+3, 0.256E+3, 0.310E+2, 0.18467000E+1, + 0.00000000E+0, 0.50945200E+3, 0.256E+3, 0.320E+2, 0.18467000E+1, 0.00000000E+0, 0.43080210E+3, + 0.256E+3, 0.330E+2, 0.18467000E+1, 0.00000000E+0, 0.38458730E+3, 0.256E+3, 0.340E+2, + 0.18467000E+1, 0.00000000E+0, 0.33481150E+3, 0.256E+3, 0.350E+2, 0.18467000E+1, 0.00000000E+0, + 0.28979810E+3, 0.256E+3, 0.360E+2, 0.18467000E+1, 0.00000000E+0, 0.16522832E+4, 0.256E+3, + 0.370E+2, 0.18467000E+1, 0.00000000E+0, 0.14199417E+4, 0.256E+3, 0.380E+2, 0.18467000E+1, + 0.00000000E+0, 0.12330006E+4, 0.256E+3, 0.390E+2, 0.18467000E+1, 0.00000000E+0, 0.11022638E+4, + 0.256E+3, 0.400E+2, 0.18467000E+1, 0.00000000E+0, 0.10016660E+4, 0.256E+3, 0.410E+2, + 0.18467000E+1, 0.00000000E+0, 0.76883820E+3, 0.256E+3, 0.420E+2, 0.18467000E+1, 0.00000000E+0, + 0.85963920E+3, 0.256E+3, 0.430E+2, 0.18467000E+1, 0.00000000E+0, 0.65071280E+3, 0.256E+3, + 0.440E+2, 0.18467000E+1, 0.00000000E+0, 0.71108920E+3, 0.256E+3, 0.450E+2, 0.18467000E+1, + 0.00000000E+0, 0.65796470E+3, 0.256E+3, 0.460E+2, 0.18467000E+1, 0.00000000E+0, 0.54942990E+3, + 0.256E+3, 0.470E+2, 0.18467000E+1, 0.00000000E+0, 0.57810960E+3, 0.256E+3, 0.480E+2, + 0.18467000E+1, 0.00000000E+0, 0.73051140E+3, 0.256E+3, 0.490E+2, 0.18467000E+1, 0.00000000E+0, + 0.66979600E+3, 0.256E+3, 0.500E+2, 0.18467000E+1, 0.00000000E+0, 0.59220770E+3, 0.256E+3, + 0.510E+2, 0.18467000E+1, 0.00000000E+0, 0.54693930E+3, 0.256E+3, 0.520E+2, 0.18467000E+1, + 0.00000000E+0, 0.49213770E+3, 0.256E+3, 0.530E+2, 0.18467000E+1, 0.00000000E+0, 0.44046680E+3, + 0.256E+3, 0.540E+2, 0.18467000E+1, 0.00000000E+0, 0.20130282E+4, 0.256E+3, 0.550E+2, + 0.18467000E+1, 0.00000000E+0, 0.18160675E+4, 0.256E+3, 0.560E+2, 0.18467000E+1, 0.00000000E+0, + 0.15814671E+4, 0.256E+3, 0.570E+2, 0.18467000E+1, 0.00000000E+0, 0.70080410E+3, 0.256E+3, + 0.580E+2, 0.18467000E+1, 0.27991000E+1, 0.16040906E+4, 0.256E+3, 0.590E+2, 0.18467000E+1, + 0.00000000E+0, 0.15379273E+4, 0.256E+3, 0.600E+2, 0.18467000E+1, 0.00000000E+0, 0.14986941E+4, + 0.256E+3, 0.610E+2, 0.18467000E+1, 0.00000000E+0, 0.14626834E+4, 0.256E+3, 0.620E+2, + 0.18467000E+1, 0.00000000E+0, 0.14307306E+4, 0.256E+3, 0.630E+2, 0.18467000E+1, 0.00000000E+0, + 0.11145114E+4, 0.256E+3, 0.640E+2, 0.18467000E+1, 0.00000000E+0, 0.12733916E+4, 0.256E+3, + 0.650E+2, 0.18467000E+1, 0.00000000E+0, 0.12261232E+4, 0.256E+3, 0.660E+2, 0.18467000E+1, + 0.00000000E+0, 0.12874672E+4, 0.256E+3, 0.670E+2, 0.18467000E+1, 0.00000000E+0, 0.12598096E+4, + 0.256E+3, 0.680E+2, 0.18467000E+1, 0.00000000E+0, 0.12347344E+4, 0.256E+3, 0.690E+2, + 0.18467000E+1, 0.00000000E+0, 0.12207557E+4, 0.256E+3, 0.700E+2, 0.18467000E+1, 0.00000000E+0, + 0.10219725E+4, 0.256E+3, 0.710E+2, 0.18467000E+1, 0.00000000E+0, 0.99637850E+3, 0.256E+3, + 0.720E+2, 0.18467000E+1, 0.00000000E+0, 0.90460210E+3, 0.256E+3, 0.730E+2, 0.18467000E+1, + 0.00000000E+0, 0.76098160E+3, 0.256E+3, 0.740E+2, 0.18467000E+1, 0.00000000E+0, 0.77254200E+3, + 0.256E+3, 0.750E+2, 0.18467000E+1, 0.00000000E+0, 0.69708220E+3, 0.256E+3, 0.760E+2, + 0.18467000E+1, 0.00000000E+0, 0.63615080E+3, 0.256E+3, 0.770E+2, 0.18467000E+1, 0.00000000E+0, + 0.52655380E+3, 0.256E+3, 0.780E+2, 0.18467000E+1, 0.00000000E+0, 0.49121220E+3, 0.256E+3, + 0.790E+2, 0.18467000E+1, 0.00000000E+0, 0.50441110E+3, 0.256E+3, 0.800E+2, 0.18467000E+1, + 0.00000000E+0, 0.74864790E+3, 0.256E+3, 0.810E+2, 0.18467000E+1, 0.00000000E+0, 0.72700690E+3, + 0.256E+3, 0.820E+2, 0.18467000E+1, 0.00000000E+0, 0.66322010E+3, 0.256E+3, 0.830E+2, + 0.18467000E+1, 0.00000000E+0, 0.63000140E+3, 0.256E+3, 0.840E+2, 0.18467000E+1, 0.00000000E+0, + 0.57868480E+3, 0.256E+3, 0.850E+2, 0.18467000E+1, 0.00000000E+0, 0.52816950E+3, 0.256E+3, + 0.860E+2, 0.18467000E+1, 0.00000000E+0, 0.18871061E+4, 0.256E+3, 0.870E+2, 0.18467000E+1, + 0.00000000E+0, 0.17877406E+4, 0.256E+3, 0.880E+2, 0.18467000E+1, 0.00000000E+0, 0.15670784E+4, + 0.256E+3, 0.890E+2, 0.18467000E+1, 0.00000000E+0, 0.13954519E+4, 0.256E+3, 0.900E+2, + 0.18467000E+1, 0.00000000E+0, 0.13918292E+4, 0.256E+3, 0.910E+2, 0.18467000E+1, 0.00000000E+0, + 0.13473076E+4, 0.256E+3, 0.920E+2, 0.18467000E+1, 0.00000000E+0, 0.13948404E+4, 0.256E+3, + 0.930E+2, 0.18467000E+1, 0.00000000E+0, 0.13493008E+4, 0.256E+3, 0.940E+2, 0.18467000E+1, + 0.00000000E+0, 0.72901300E+2, 0.256E+3, 0.101E+3, 0.18467000E+1, 0.00000000E+0, 0.24228720E+3, + 0.256E+3, 0.103E+3, 0.18467000E+1, 0.98650000E+0, 0.30814100E+3, 0.256E+3, 0.104E+3, + 0.18467000E+1, 0.98080000E+0, 0.23165430E+3, 0.256E+3, 0.105E+3, 0.18467000E+1, 0.97060000E+0, + 0.17302490E+3, 0.256E+3, 0.106E+3, 0.18467000E+1, 0.98680000E+0, 0.11914340E+3, 0.256E+3, + 0.107E+3, 0.18467000E+1, 0.99440000E+0, 0.86077300E+2, 0.256E+3, 0.108E+3, 0.18467000E+1, + 0.99250000E+0, 0.58583600E+2, 0.256E+3, 0.109E+3, 0.18467000E+1, 0.99820000E+0, 0.35534390E+3, + 0.256E+3, 0.111E+3, 0.18467000E+1, 0.96840000E+0, 0.55067610E+3, 0.256E+3, 0.112E+3, + 0.18467000E+1, 0.96280000E+0, 0.55286340E+3, 0.256E+3, 0.113E+3, 0.18467000E+1, 0.96480000E+0, + 0.43885970E+3, 0.256E+3, 0.114E+3, 0.18467000E+1, 0.95070000E+0, 0.35626970E+3, 0.256E+3, + 0.115E+3, 0.18467000E+1, 0.99470000E+0, 0.29950590E+3, 0.256E+3, 0.116E+3, 0.18467000E+1, + 0.99480000E+0, 0.24334210E+3, 0.256E+3, 0.117E+3, 0.18467000E+1, 0.99720000E+0, 0.48693460E+3, + 0.256E+3, 0.119E+3, 0.18467000E+1, 0.97670000E+0, 0.95257710E+3, 0.256E+3, 0.120E+3, + 0.18467000E+1, 0.98310000E+0, 0.48182380E+3, 0.256E+3, 0.121E+3, 0.18467000E+1, 0.18627000E+1, + 0.46502110E+3, 0.256E+3, 0.122E+3, 0.18467000E+1, 0.18299000E+1, 0.45578960E+3, 0.256E+3, + 0.123E+3, 0.18467000E+1, 0.19138000E+1, 0.45213520E+3, 0.256E+3, 0.124E+3, 0.18467000E+1, + 0.18269000E+1, 0.41343280E+3, 0.256E+3, 0.125E+3, 0.18467000E+1, 0.16406000E+1, 0.38195910E+3, + 0.256E+3, 0.126E+3, 0.18467000E+1, 0.16483000E+1, 0.36437600E+3, 0.256E+3, 0.127E+3, + 0.18467000E+1, 0.17149000E+1, 0.35638920E+3, 0.256E+3, 0.128E+3, 0.18467000E+1, 0.17937000E+1, + 0.35372270E+3, 0.256E+3, 0.129E+3, 0.18467000E+1, 0.95760000E+0, 0.32913430E+3, 0.256E+3, + 0.130E+3, 0.18467000E+1, 0.19419000E+1, 0.54664020E+3, 0.256E+3, 0.131E+3, 0.18467000E+1, + 0.96010000E+0, 0.47553820E+3, 0.256E+3, 0.132E+3, 0.18467000E+1, 0.94340000E+0, 0.42329180E+3, + 0.256E+3, 0.133E+3, 0.18467000E+1, 0.98890000E+0, 0.38476970E+3, 0.256E+3, 0.134E+3, + 0.18467000E+1, 0.99010000E+0, 0.33723270E+3, 0.256E+3, 0.135E+3, 0.18467000E+1, 0.99740000E+0, + 0.57979800E+3, 0.256E+3, 0.137E+3, 0.18467000E+1, 0.97380000E+0, 0.11609040E+4, 0.256E+3, + 0.138E+3, 0.18467000E+1, 0.98010000E+0, 0.87228820E+3, 0.256E+3, 0.139E+3, 0.18467000E+1, + 0.19153000E+1, 0.63807920E+3, 0.256E+3, 0.140E+3, 0.18467000E+1, 0.19355000E+1, 0.64445150E+3, + 0.256E+3, 0.141E+3, 0.18467000E+1, 0.19545000E+1, 0.59966140E+3, 0.256E+3, 0.142E+3, + 0.18467000E+1, 0.19420000E+1, 0.67812320E+3, 0.256E+3, 0.143E+3, 0.18467000E+1, 0.16682000E+1, + 0.51957380E+3, 0.256E+3, 0.144E+3, 0.18467000E+1, 0.18584000E+1, 0.48580720E+3, 0.256E+3, + 0.145E+3, 0.18467000E+1, 0.19003000E+1, 0.45060820E+3, 0.256E+3, 0.146E+3, 0.18467000E+1, + 0.18630000E+1, 0.43621390E+3, 0.256E+3, 0.147E+3, 0.18467000E+1, 0.96790000E+0, 0.42955510E+3, + 0.256E+3, 0.148E+3, 0.18467000E+1, 0.19539000E+1, 0.69425600E+3, 0.256E+3, 0.149E+3, + 0.18467000E+1, 0.96330000E+0, 0.62268260E+3, 0.256E+3, 0.150E+3, 0.18467000E+1, 0.95140000E+0, + 0.57980000E+3, 0.256E+3, 0.151E+3, 0.18467000E+1, 0.97490000E+0, 0.54638720E+3, 0.256E+3, + 0.152E+3, 0.18467000E+1, 0.98110000E+0, 0.49679900E+3, 0.256E+3, 0.153E+3, 0.18467000E+1, + 0.99680000E+0, 0.68134670E+3, 0.256E+3, 0.155E+3, 0.18467000E+1, 0.99090000E+0, 0.15113430E+4, + 0.256E+3, 0.156E+3, 0.18467000E+1, 0.97970000E+0, 0.11059643E+4, 0.256E+3, 0.157E+3, + 0.18467000E+1, 0.19373000E+1, 0.67935610E+3, 0.256E+3, 0.159E+3, 0.18467000E+1, 0.29425000E+1, + 0.66524220E+3, 0.256E+3, 0.160E+3, 0.18467000E+1, 0.29455000E+1, 0.64390080E+3, 0.256E+3, + 0.161E+3, 0.18467000E+1, 0.29413000E+1, 0.64787420E+3, 0.256E+3, 0.162E+3, 0.18467000E+1, + 0.29300000E+1, 0.62696840E+3, 0.256E+3, 0.163E+3, 0.18467000E+1, 0.18286000E+1, 0.65218100E+3, + 0.256E+3, 0.164E+3, 0.18467000E+1, 0.28732000E+1, 0.61190030E+3, 0.256E+3, 0.165E+3, + 0.18467000E+1, 0.29086000E+1, 0.62406450E+3, 0.256E+3, 0.166E+3, 0.18467000E+1, 0.28965000E+1, + 0.58019150E+3, 0.256E+3, 0.167E+3, 0.18467000E+1, 0.29242000E+1, 0.56343460E+3, 0.256E+3, + 0.168E+3, 0.18467000E+1, 0.29282000E+1, 0.55999100E+3, 0.256E+3, 0.169E+3, 0.18467000E+1, + 0.29246000E+1, 0.58959320E+3, 0.256E+3, 0.170E+3, 0.18467000E+1, 0.28482000E+1, 0.54094020E+3, + 0.256E+3, 0.171E+3, 0.18467000E+1, 0.29219000E+1, 0.74394190E+3, 0.256E+3, 0.172E+3, + 0.18467000E+1, 0.19254000E+1, 0.68699120E+3, 0.256E+3, 0.173E+3, 0.18467000E+1, 0.19459000E+1, + 0.62358700E+3, 0.256E+3, 0.174E+3, 0.18467000E+1, 0.19292000E+1, 0.63381630E+3, 0.256E+3, + 0.175E+3, 0.18467000E+1, 0.18104000E+1, 0.54831610E+3, 0.256E+3, 0.176E+3, 0.18467000E+1, + 0.18858000E+1, 0.51495440E+3, 0.256E+3, 0.177E+3, 0.18467000E+1, 0.18648000E+1, 0.49133470E+3, + 0.256E+3, 0.178E+3, 0.18467000E+1, 0.19188000E+1, 0.46979990E+3, 0.256E+3, 0.179E+3, + 0.18467000E+1, 0.98460000E+0, 0.45204520E+3, 0.256E+3, 0.180E+3, 0.18467000E+1, 0.19896000E+1, + 0.74445260E+3, 0.256E+3, 0.181E+3, 0.18467000E+1, 0.92670000E+0, 0.67269630E+3, 0.256E+3, + 0.182E+3, 0.18467000E+1, 0.93830000E+0, 0.64947180E+3, 0.256E+3, 0.183E+3, 0.18467000E+1, + 0.98200000E+0, 0.62976130E+3, 0.256E+3, 0.184E+3, 0.18467000E+1, 0.98150000E+0, 0.58566430E+3, + 0.256E+3, 0.185E+3, 0.18467000E+1, 0.99540000E+0, 0.76695690E+3, 0.256E+3, 0.187E+3, + 0.18467000E+1, 0.97050000E+0, 0.14944404E+4, 0.256E+3, 0.188E+3, 0.18467000E+1, 0.96620000E+0, + 0.80404920E+3, 0.256E+3, 0.189E+3, 0.18467000E+1, 0.29070000E+1, 0.93536030E+3, 0.256E+3, + 0.190E+3, 0.18467000E+1, 0.28844000E+1, 0.83446090E+3, 0.256E+3, 0.191E+3, 0.18467000E+1, + 0.28738000E+1, 0.73260640E+3, 0.256E+3, 0.192E+3, 0.18467000E+1, 0.28878000E+1, 0.70402570E+3, + 0.256E+3, 0.193E+3, 0.18467000E+1, 0.29095000E+1, 0.86065850E+3, 0.256E+3, 0.194E+3, + 0.18467000E+1, 0.19209000E+1, 0.19758390E+3, 0.256E+3, 0.204E+3, 0.18467000E+1, 0.19697000E+1, + 0.19383810E+3, 0.256E+3, 0.205E+3, 0.18467000E+1, 0.19441000E+1, 0.14029040E+3, 0.256E+3, + 0.206E+3, 0.18467000E+1, 0.19985000E+1, 0.11170570E+3, 0.256E+3, 0.207E+3, 0.18467000E+1, + 0.20143000E+1, 0.75741700E+2, 0.256E+3, 0.208E+3, 0.18467000E+1, 0.19887000E+1, 0.35305310E+3, + 0.256E+3, 0.212E+3, 0.18467000E+1, 0.19496000E+1, 0.42739490E+3, 0.256E+3, 0.213E+3, + 0.18467000E+1, 0.19311000E+1, 0.40746200E+3, 0.256E+3, 0.214E+3, 0.18467000E+1, 0.19435000E+1, + 0.35168440E+3, 0.256E+3, 0.215E+3, 0.18467000E+1, 0.20102000E+1, 0.29341430E+3, 0.256E+3, + 0.216E+3, 0.18467000E+1, 0.19903000E+1, 0.49541720E+3, 0.256E+3, 0.220E+3, 0.18467000E+1, + 0.19349000E+1, 0.47369840E+3, 0.256E+3, 0.221E+3, 0.18467000E+1, 0.28999000E+1, 0.47934490E+3, + 0.256E+3, 0.222E+3, 0.18467000E+1, 0.38675000E+1, 0.43891900E+3, 0.256E+3, 0.223E+3, + 0.18467000E+1, 0.29110000E+1, 0.32804360E+3, 0.256E+3, 0.224E+3, 0.18467000E+1, 0.10619100E+2, + 0.27929530E+3, 0.256E+3, 0.225E+3, 0.18467000E+1, 0.98849000E+1, 0.27428730E+3, 0.256E+3, + 0.226E+3, 0.18467000E+1, 0.91376000E+1, 0.32404980E+3, 0.256E+3, 0.227E+3, 0.18467000E+1, + 0.29263000E+1, 0.30116290E+3, 0.256E+3, 0.228E+3, 0.18467000E+1, 0.65458000E+1, 0.42932210E+3, + 0.256E+3, 0.231E+3, 0.18467000E+1, 0.19315000E+1, 0.45201960E+3, 0.256E+3, 0.232E+3, + 0.18467000E+1, 0.19447000E+1, 0.41181840E+3, 0.256E+3, 0.233E+3, 0.18467000E+1, 0.19793000E+1, + 0.38169420E+3, 0.256E+3, 0.234E+3, 0.18467000E+1, 0.19812000E+1, 0.59335720E+3, 0.256E+3, + 0.238E+3, 0.18467000E+1, 0.19143000E+1, 0.56724450E+3, 0.256E+3, 0.239E+3, 0.18467000E+1, + 0.28903000E+1, 0.57102950E+3, 0.256E+3, 0.240E+3, 0.18467000E+1, 0.39106000E+1, 0.55267180E+3, + 0.256E+3, 0.241E+3, 0.18467000E+1, 0.29225000E+1, 0.48602980E+3, 0.256E+3, 0.242E+3, + 0.18467000E+1, 0.11055600E+2, 0.42718180E+3, 0.256E+3, 0.243E+3, 0.18467000E+1, 0.95402000E+1, + 0.40302800E+3, 0.256E+3, 0.244E+3, 0.18467000E+1, 0.88895000E+1, 0.41253210E+3, 0.256E+3, + 0.245E+3, 0.18467000E+1, 0.29696000E+1, 0.43149070E+3, 0.256E+3, 0.246E+3, 0.18467000E+1, + 0.57095000E+1, 0.55308270E+3, 0.256E+3, 0.249E+3, 0.18467000E+1, 0.19378000E+1, 0.60097790E+3, + 0.256E+3, 0.250E+3, 0.18467000E+1, 0.19505000E+1, 0.56310510E+3, 0.256E+3, 0.251E+3, + 0.18467000E+1, 0.19523000E+1, 0.54167760E+3, 0.256E+3, 0.252E+3, 0.18467000E+1, 0.19639000E+1, + 0.71654750E+3, 0.256E+3, 0.256E+3, 0.18467000E+1, 0.18467000E+1, 0.46820200E+2, 0.257E+3, + 0.100E+1, 0.29175000E+1, 0.91180000E+0, 0.30588600E+2, 0.257E+3, 0.200E+1, 0.29175000E+1, + 0.00000000E+0, 0.74890520E+3, 0.257E+3, 0.300E+1, 0.29175000E+1, 0.00000000E+0, 0.42804980E+3, + 0.257E+3, 0.400E+1, 0.29175000E+1, 0.00000000E+0, 0.28602900E+3, 0.257E+3, 0.500E+1, + 0.29175000E+1, 0.00000000E+0, 0.19193550E+3, 0.257E+3, 0.600E+1, 0.29175000E+1, 0.00000000E+0, + 0.13344100E+3, 0.257E+3, 0.700E+1, 0.29175000E+1, 0.00000000E+0, 0.10055750E+3, 0.257E+3, + 0.800E+1, 0.29175000E+1, 0.00000000E+0, 0.75829800E+2, 0.257E+3, 0.900E+1, 0.29175000E+1, + 0.00000000E+0, 0.58079500E+2, 0.257E+3, 0.100E+2, 0.29175000E+1, 0.00000000E+0, 0.89474480E+3, + 0.257E+3, 0.110E+2, 0.29175000E+1, 0.00000000E+0, 0.68323710E+3, 0.257E+3, 0.120E+2, + 0.29175000E+1, 0.00000000E+0, 0.62753480E+3, 0.257E+3, 0.130E+2, 0.29175000E+1, 0.00000000E+0, + 0.49189290E+3, 0.257E+3, 0.140E+2, 0.29175000E+1, 0.00000000E+0, 0.38167570E+3, 0.257E+3, + 0.150E+2, 0.29175000E+1, 0.00000000E+0, 0.31561930E+3, 0.257E+3, 0.160E+2, 0.29175000E+1, + 0.00000000E+0, 0.25684550E+3, 0.257E+3, 0.170E+2, 0.29175000E+1, 0.00000000E+0, 0.20937070E+3, + 0.257E+3, 0.180E+2, 0.29175000E+1, 0.00000000E+0, 0.14672405E+4, 0.257E+3, 0.190E+2, + 0.29175000E+1, 0.00000000E+0, 0.12041091E+4, 0.257E+3, 0.200E+2, 0.29175000E+1, 0.00000000E+0, + 0.99328050E+3, 0.257E+3, 0.210E+2, 0.29175000E+1, 0.00000000E+0, 0.95757000E+3, 0.257E+3, + 0.220E+2, 0.29175000E+1, 0.00000000E+0, 0.87600500E+3, 0.257E+3, 0.230E+2, 0.29175000E+1, + 0.00000000E+0, 0.68947940E+3, 0.257E+3, 0.240E+2, 0.29175000E+1, 0.00000000E+0, 0.75309320E+3, + 0.257E+3, 0.250E+2, 0.29175000E+1, 0.00000000E+0, 0.59043900E+3, 0.257E+3, 0.260E+2, + 0.29175000E+1, 0.00000000E+0, 0.62501030E+3, 0.257E+3, 0.270E+2, 0.29175000E+1, 0.00000000E+0, + 0.64450280E+3, 0.257E+3, 0.280E+2, 0.29175000E+1, 0.00000000E+0, 0.49360530E+3, 0.257E+3, + 0.290E+2, 0.29175000E+1, 0.00000000E+0, 0.50558370E+3, 0.257E+3, 0.300E+2, 0.29175000E+1, + 0.00000000E+0, 0.59983010E+3, 0.257E+3, 0.310E+2, 0.29175000E+1, 0.00000000E+0, 0.52686600E+3, + 0.257E+3, 0.320E+2, 0.29175000E+1, 0.00000000E+0, 0.44755460E+3, 0.257E+3, 0.330E+2, + 0.29175000E+1, 0.00000000E+0, 0.40047040E+3, 0.257E+3, 0.340E+2, 0.29175000E+1, 0.00000000E+0, + 0.34937100E+3, 0.257E+3, 0.350E+2, 0.29175000E+1, 0.00000000E+0, 0.30289600E+3, 0.257E+3, + 0.360E+2, 0.29175000E+1, 0.00000000E+0, 0.16430879E+4, 0.257E+3, 0.370E+2, 0.29175000E+1, + 0.00000000E+0, 0.14346583E+4, 0.257E+3, 0.380E+2, 0.29175000E+1, 0.00000000E+0, 0.12531317E+4, + 0.257E+3, 0.390E+2, 0.29175000E+1, 0.00000000E+0, 0.11240457E+4, 0.257E+3, 0.400E+2, + 0.29175000E+1, 0.00000000E+0, 0.10235000E+4, 0.257E+3, 0.410E+2, 0.29175000E+1, 0.00000000E+0, + 0.78790450E+3, 0.257E+3, 0.420E+2, 0.29175000E+1, 0.00000000E+0, 0.88003140E+3, 0.257E+3, + 0.430E+2, 0.29175000E+1, 0.00000000E+0, 0.66828590E+3, 0.257E+3, 0.440E+2, 0.29175000E+1, + 0.00000000E+0, 0.73081350E+3, 0.257E+3, 0.450E+2, 0.29175000E+1, 0.00000000E+0, 0.67702710E+3, + 0.257E+3, 0.460E+2, 0.29175000E+1, 0.00000000E+0, 0.56424900E+3, 0.257E+3, 0.470E+2, + 0.29175000E+1, 0.00000000E+0, 0.59573220E+3, 0.257E+3, 0.480E+2, 0.29175000E+1, 0.00000000E+0, + 0.74999110E+3, 0.257E+3, 0.490E+2, 0.29175000E+1, 0.00000000E+0, 0.69136370E+3, 0.257E+3, + 0.500E+2, 0.29175000E+1, 0.00000000E+0, 0.61397930E+3, 0.257E+3, 0.510E+2, 0.29175000E+1, + 0.00000000E+0, 0.56835230E+3, 0.257E+3, 0.520E+2, 0.29175000E+1, 0.00000000E+0, 0.51253890E+3, + 0.257E+3, 0.530E+2, 0.29175000E+1, 0.00000000E+0, 0.45957350E+3, 0.257E+3, 0.540E+2, + 0.29175000E+1, 0.00000000E+0, 0.20012557E+4, 0.257E+3, 0.550E+2, 0.29175000E+1, 0.00000000E+0, + 0.18302684E+4, 0.257E+3, 0.560E+2, 0.29175000E+1, 0.00000000E+0, 0.16035452E+4, 0.257E+3, + 0.570E+2, 0.29175000E+1, 0.00000000E+0, 0.72568940E+3, 0.257E+3, 0.580E+2, 0.29175000E+1, + 0.27991000E+1, 0.16196684E+4, 0.257E+3, 0.590E+2, 0.29175000E+1, 0.00000000E+0, 0.15546376E+4, + 0.257E+3, 0.600E+2, 0.29175000E+1, 0.00000000E+0, 0.15154611E+4, 0.257E+3, 0.610E+2, + 0.29175000E+1, 0.00000000E+0, 0.14794584E+4, 0.257E+3, 0.620E+2, 0.29175000E+1, 0.00000000E+0, + 0.14475288E+4, 0.257E+3, 0.630E+2, 0.29175000E+1, 0.00000000E+0, 0.11341326E+4, 0.257E+3, + 0.640E+2, 0.29175000E+1, 0.00000000E+0, 0.12823779E+4, 0.257E+3, 0.650E+2, 0.29175000E+1, + 0.00000000E+0, 0.12360668E+4, 0.257E+3, 0.660E+2, 0.29175000E+1, 0.00000000E+0, 0.13047191E+4, + 0.257E+3, 0.670E+2, 0.29175000E+1, 0.00000000E+0, 0.12769567E+4, 0.257E+3, 0.680E+2, + 0.29175000E+1, 0.00000000E+0, 0.12518739E+4, 0.257E+3, 0.690E+2, 0.29175000E+1, 0.00000000E+0, + 0.12374305E+4, 0.257E+3, 0.700E+2, 0.29175000E+1, 0.00000000E+0, 0.10399691E+4, 0.257E+3, + 0.710E+2, 0.29175000E+1, 0.00000000E+0, 0.10199809E+4, 0.257E+3, 0.720E+2, 0.29175000E+1, + 0.00000000E+0, 0.92884540E+3, 0.257E+3, 0.730E+2, 0.29175000E+1, 0.00000000E+0, 0.78260680E+3, + 0.257E+3, 0.740E+2, 0.29175000E+1, 0.00000000E+0, 0.79560020E+3, 0.257E+3, 0.750E+2, + 0.29175000E+1, 0.00000000E+0, 0.71959790E+3, 0.257E+3, 0.760E+2, 0.29175000E+1, 0.00000000E+0, + 0.65787990E+3, 0.257E+3, 0.770E+2, 0.29175000E+1, 0.00000000E+0, 0.54519970E+3, 0.257E+3, + 0.780E+2, 0.29175000E+1, 0.00000000E+0, 0.50886690E+3, 0.257E+3, 0.790E+2, 0.29175000E+1, + 0.00000000E+0, 0.52322550E+3, 0.257E+3, 0.800E+2, 0.29175000E+1, 0.00000000E+0, 0.76879970E+3, + 0.257E+3, 0.810E+2, 0.29175000E+1, 0.00000000E+0, 0.74998940E+3, 0.257E+3, 0.820E+2, + 0.29175000E+1, 0.00000000E+0, 0.68706370E+3, 0.257E+3, 0.830E+2, 0.29175000E+1, 0.00000000E+0, + 0.65405030E+3, 0.257E+3, 0.840E+2, 0.29175000E+1, 0.00000000E+0, 0.60215770E+3, 0.257E+3, + 0.850E+2, 0.29175000E+1, 0.00000000E+0, 0.55060100E+3, 0.257E+3, 0.860E+2, 0.29175000E+1, + 0.00000000E+0, 0.18855867E+4, 0.257E+3, 0.870E+2, 0.29175000E+1, 0.00000000E+0, 0.18071153E+4, + 0.257E+3, 0.880E+2, 0.29175000E+1, 0.00000000E+0, 0.15930087E+4, 0.257E+3, 0.890E+2, + 0.29175000E+1, 0.00000000E+0, 0.14265400E+4, 0.257E+3, 0.900E+2, 0.29175000E+1, 0.00000000E+0, + 0.14182359E+4, 0.257E+3, 0.910E+2, 0.29175000E+1, 0.00000000E+0, 0.13730549E+4, 0.257E+3, + 0.920E+2, 0.29175000E+1, 0.00000000E+0, 0.14164457E+4, 0.257E+3, 0.930E+2, 0.29175000E+1, + 0.00000000E+0, 0.13711890E+4, 0.257E+3, 0.940E+2, 0.29175000E+1, 0.00000000E+0, 0.75839400E+2, + 0.257E+3, 0.101E+3, 0.29175000E+1, 0.00000000E+0, 0.24848670E+3, 0.257E+3, 0.103E+3, + 0.29175000E+1, 0.98650000E+0, 0.31648150E+3, 0.257E+3, 0.104E+3, 0.29175000E+1, 0.98080000E+0, + 0.24013610E+3, 0.257E+3, 0.105E+3, 0.29175000E+1, 0.97060000E+0, 0.18003260E+3, 0.257E+3, + 0.106E+3, 0.29175000E+1, 0.98680000E+0, 0.12441240E+3, 0.257E+3, 0.107E+3, 0.29175000E+1, + 0.99440000E+0, 0.90093200E+2, 0.257E+3, 0.108E+3, 0.29175000E+1, 0.99250000E+0, 0.61449900E+2, + 0.257E+3, 0.109E+3, 0.29175000E+1, 0.99820000E+0, 0.36346120E+3, 0.257E+3, 0.111E+3, + 0.29175000E+1, 0.96840000E+0, 0.56268080E+3, 0.257E+3, 0.112E+3, 0.29175000E+1, 0.96280000E+0, + 0.56814570E+3, 0.257E+3, 0.113E+3, 0.29175000E+1, 0.96480000E+0, 0.45421760E+3, 0.257E+3, + 0.114E+3, 0.29175000E+1, 0.95070000E+0, 0.37038990E+3, 0.257E+3, 0.115E+3, 0.29175000E+1, + 0.99470000E+0, 0.31215000E+3, 0.257E+3, 0.116E+3, 0.29175000E+1, 0.99480000E+0, 0.25418510E+3, + 0.257E+3, 0.117E+3, 0.29175000E+1, 0.99720000E+0, 0.49920670E+3, 0.257E+3, 0.119E+3, + 0.29175000E+1, 0.97670000E+0, 0.96226620E+3, 0.257E+3, 0.120E+3, 0.29175000E+1, 0.98310000E+0, + 0.49762570E+3, 0.257E+3, 0.121E+3, 0.29175000E+1, 0.18627000E+1, 0.48020280E+3, 0.257E+3, + 0.122E+3, 0.29175000E+1, 0.18299000E+1, 0.47059030E+3, 0.257E+3, 0.123E+3, 0.29175000E+1, + 0.19138000E+1, 0.46642410E+3, 0.257E+3, 0.124E+3, 0.29175000E+1, 0.18269000E+1, 0.42818050E+3, + 0.257E+3, 0.125E+3, 0.29175000E+1, 0.16406000E+1, 0.39589450E+3, 0.257E+3, 0.126E+3, + 0.29175000E+1, 0.16483000E+1, 0.37758950E+3, 0.257E+3, 0.127E+3, 0.29175000E+1, 0.17149000E+1, + 0.36919520E+3, 0.257E+3, 0.128E+3, 0.29175000E+1, 0.17937000E+1, 0.36539900E+3, 0.257E+3, + 0.129E+3, 0.29175000E+1, 0.95760000E+0, 0.34173160E+3, 0.257E+3, 0.130E+3, 0.29175000E+1, + 0.19419000E+1, 0.56276860E+3, 0.257E+3, 0.131E+3, 0.29175000E+1, 0.96010000E+0, 0.49236040E+3, + 0.257E+3, 0.132E+3, 0.29175000E+1, 0.94340000E+0, 0.43983840E+3, 0.257E+3, 0.133E+3, + 0.29175000E+1, 0.98890000E+0, 0.40063200E+3, 0.257E+3, 0.134E+3, 0.29175000E+1, 0.99010000E+0, + 0.35185020E+3, 0.257E+3, 0.135E+3, 0.29175000E+1, 0.99740000E+0, 0.59499260E+3, 0.257E+3, + 0.137E+3, 0.29175000E+1, 0.97380000E+0, 0.11711205E+4, 0.257E+3, 0.138E+3, 0.29175000E+1, + 0.98010000E+0, 0.88995010E+3, 0.257E+3, 0.139E+3, 0.29175000E+1, 0.19153000E+1, 0.65820980E+3, + 0.257E+3, 0.140E+3, 0.29175000E+1, 0.19355000E+1, 0.66473460E+3, 0.257E+3, 0.141E+3, + 0.29175000E+1, 0.19545000E+1, 0.61909740E+3, 0.257E+3, 0.142E+3, 0.29175000E+1, 0.19420000E+1, + 0.69637520E+3, 0.257E+3, 0.143E+3, 0.29175000E+1, 0.16682000E+1, 0.53817200E+3, 0.257E+3, + 0.144E+3, 0.29175000E+1, 0.18584000E+1, 0.50319100E+3, 0.257E+3, 0.145E+3, 0.29175000E+1, + 0.19003000E+1, 0.46688550E+3, 0.257E+3, 0.146E+3, 0.29175000E+1, 0.18630000E+1, 0.45174170E+3, + 0.257E+3, 0.147E+3, 0.29175000E+1, 0.96790000E+0, 0.44617650E+3, 0.257E+3, 0.148E+3, + 0.29175000E+1, 0.19539000E+1, 0.71406170E+3, 0.257E+3, 0.149E+3, 0.29175000E+1, 0.96330000E+0, + 0.64381770E+3, 0.257E+3, 0.150E+3, 0.29175000E+1, 0.95140000E+0, 0.60143340E+3, 0.257E+3, + 0.151E+3, 0.29175000E+1, 0.97490000E+0, 0.56786370E+3, 0.257E+3, 0.152E+3, 0.29175000E+1, + 0.98110000E+0, 0.51738510E+3, 0.257E+3, 0.153E+3, 0.29175000E+1, 0.99680000E+0, 0.70211480E+3, + 0.257E+3, 0.155E+3, 0.29175000E+1, 0.99090000E+0, 0.15197933E+4, 0.257E+3, 0.156E+3, + 0.29175000E+1, 0.97970000E+0, 0.11269136E+4, 0.257E+3, 0.157E+3, 0.29175000E+1, 0.19373000E+1, + 0.70363390E+3, 0.257E+3, 0.159E+3, 0.29175000E+1, 0.29425000E+1, 0.68904640E+3, 0.257E+3, + 0.160E+3, 0.29175000E+1, 0.29455000E+1, 0.66706290E+3, 0.257E+3, 0.161E+3, 0.29175000E+1, + 0.29413000E+1, 0.67068630E+3, 0.257E+3, 0.162E+3, 0.29175000E+1, 0.29300000E+1, 0.64747300E+3, + 0.257E+3, 0.163E+3, 0.29175000E+1, 0.18286000E+1, 0.67511960E+3, 0.257E+3, 0.164E+3, + 0.29175000E+1, 0.28732000E+1, 0.63375280E+3, 0.257E+3, 0.165E+3, 0.29175000E+1, 0.29086000E+1, + 0.64544130E+3, 0.257E+3, 0.166E+3, 0.29175000E+1, 0.28965000E+1, 0.60128460E+3, 0.257E+3, + 0.167E+3, 0.29175000E+1, 0.29242000E+1, 0.58404680E+3, 0.257E+3, 0.168E+3, 0.29175000E+1, + 0.29282000E+1, 0.58039470E+3, 0.257E+3, 0.169E+3, 0.29175000E+1, 0.29246000E+1, 0.61065540E+3, + 0.257E+3, 0.170E+3, 0.29175000E+1, 0.28482000E+1, 0.56086530E+3, 0.257E+3, 0.171E+3, + 0.29175000E+1, 0.29219000E+1, 0.76459540E+3, 0.257E+3, 0.172E+3, 0.29175000E+1, 0.19254000E+1, + 0.70805680E+3, 0.257E+3, 0.173E+3, 0.29175000E+1, 0.19459000E+1, 0.64452930E+3, 0.257E+3, + 0.174E+3, 0.29175000E+1, 0.19292000E+1, 0.65336840E+3, 0.257E+3, 0.175E+3, 0.29175000E+1, + 0.18104000E+1, 0.56893970E+3, 0.257E+3, 0.176E+3, 0.29175000E+1, 0.18858000E+1, 0.53465980E+3, + 0.257E+3, 0.177E+3, 0.29175000E+1, 0.18648000E+1, 0.51029930E+3, 0.257E+3, 0.178E+3, + 0.29175000E+1, 0.19188000E+1, 0.48773540E+3, 0.257E+3, 0.179E+3, 0.29175000E+1, 0.98460000E+0, + 0.47044860E+3, 0.257E+3, 0.180E+3, 0.29175000E+1, 0.19896000E+1, 0.76580950E+3, 0.257E+3, + 0.181E+3, 0.29175000E+1, 0.92670000E+0, 0.69566310E+3, 0.257E+3, 0.182E+3, 0.29175000E+1, + 0.93830000E+0, 0.67341930E+3, 0.257E+3, 0.183E+3, 0.29175000E+1, 0.98200000E+0, 0.65403890E+3, + 0.257E+3, 0.184E+3, 0.29175000E+1, 0.98150000E+0, 0.60946360E+3, 0.257E+3, 0.185E+3, + 0.29175000E+1, 0.99540000E+0, 0.79062920E+3, 0.257E+3, 0.187E+3, 0.29175000E+1, 0.97050000E+0, + 0.15089609E+4, 0.257E+3, 0.188E+3, 0.29175000E+1, 0.96620000E+0, 0.83278590E+3, 0.257E+3, + 0.189E+3, 0.29175000E+1, 0.29070000E+1, 0.96389140E+3, 0.257E+3, 0.190E+3, 0.29175000E+1, + 0.28844000E+1, 0.86055570E+3, 0.257E+3, 0.191E+3, 0.29175000E+1, 0.28738000E+1, 0.75868030E+3, + 0.257E+3, 0.192E+3, 0.29175000E+1, 0.28878000E+1, 0.72961370E+3, 0.257E+3, 0.193E+3, + 0.29175000E+1, 0.29095000E+1, 0.88320780E+3, 0.257E+3, 0.194E+3, 0.29175000E+1, 0.19209000E+1, + 0.20508500E+3, 0.257E+3, 0.204E+3, 0.29175000E+1, 0.19697000E+1, 0.20120830E+3, 0.257E+3, + 0.205E+3, 0.29175000E+1, 0.19441000E+1, 0.14633300E+3, 0.257E+3, 0.206E+3, 0.29175000E+1, + 0.19985000E+1, 0.11668030E+3, 0.257E+3, 0.207E+3, 0.29175000E+1, 0.20143000E+1, 0.79287700E+2, + 0.257E+3, 0.208E+3, 0.29175000E+1, 0.19887000E+1, 0.36491620E+3, 0.257E+3, 0.212E+3, + 0.29175000E+1, 0.19496000E+1, 0.44120040E+3, 0.257E+3, 0.213E+3, 0.29175000E+1, 0.19311000E+1, + 0.42212020E+3, 0.257E+3, 0.214E+3, 0.29175000E+1, 0.19435000E+1, 0.36544980E+3, 0.257E+3, + 0.215E+3, 0.29175000E+1, 0.20102000E+1, 0.30579960E+3, 0.257E+3, 0.216E+3, 0.29175000E+1, + 0.19903000E+1, 0.51130630E+3, 0.257E+3, 0.220E+3, 0.29175000E+1, 0.19349000E+1, 0.49031810E+3, + 0.257E+3, 0.221E+3, 0.29175000E+1, 0.28999000E+1, 0.49624460E+3, 0.257E+3, 0.222E+3, + 0.29175000E+1, 0.38675000E+1, 0.45408320E+3, 0.257E+3, 0.223E+3, 0.29175000E+1, 0.29110000E+1, + 0.34051320E+3, 0.257E+3, 0.224E+3, 0.29175000E+1, 0.10619100E+2, 0.29056100E+3, 0.257E+3, + 0.225E+3, 0.29175000E+1, 0.98849000E+1, 0.28526770E+3, 0.257E+3, 0.226E+3, 0.29175000E+1, + 0.91376000E+1, 0.33581530E+3, 0.257E+3, 0.227E+3, 0.29175000E+1, 0.29263000E+1, 0.31248780E+3, + 0.257E+3, 0.228E+3, 0.29175000E+1, 0.65458000E+1, 0.44415730E+3, 0.257E+3, 0.231E+3, + 0.29175000E+1, 0.19315000E+1, 0.46838860E+3, 0.257E+3, 0.232E+3, 0.29175000E+1, 0.19447000E+1, + 0.42809060E+3, 0.257E+3, 0.233E+3, 0.29175000E+1, 0.19793000E+1, 0.39744450E+3, 0.257E+3, + 0.234E+3, 0.29175000E+1, 0.19812000E+1, 0.61229940E+3, 0.257E+3, 0.238E+3, 0.29175000E+1, + 0.19143000E+1, 0.58772220E+3, 0.257E+3, 0.239E+3, 0.29175000E+1, 0.28903000E+1, 0.59223960E+3, + 0.257E+3, 0.240E+3, 0.29175000E+1, 0.39106000E+1, 0.57268150E+3, 0.257E+3, 0.241E+3, + 0.29175000E+1, 0.29225000E+1, 0.50489560E+3, 0.257E+3, 0.242E+3, 0.29175000E+1, 0.11055600E+2, + 0.44457570E+3, 0.257E+3, 0.243E+3, 0.29175000E+1, 0.95402000E+1, 0.41969160E+3, 0.257E+3, + 0.244E+3, 0.29175000E+1, 0.88895000E+1, 0.42842590E+3, 0.257E+3, 0.245E+3, 0.29175000E+1, + 0.29696000E+1, 0.44792670E+3, 0.257E+3, 0.246E+3, 0.29175000E+1, 0.57095000E+1, 0.57208230E+3, + 0.257E+3, 0.249E+3, 0.29175000E+1, 0.19378000E+1, 0.62193900E+3, 0.257E+3, 0.250E+3, + 0.29175000E+1, 0.19505000E+1, 0.58452180E+3, 0.257E+3, 0.251E+3, 0.29175000E+1, 0.19523000E+1, + 0.56311340E+3, 0.257E+3, 0.252E+3, 0.29175000E+1, 0.19639000E+1, 0.73991600E+3, 0.257E+3, + 0.256E+3, 0.29175000E+1, 0.18467000E+1, 0.76602020E+3, 0.257E+3, 0.257E+3, 0.29175000E+1, + 0.29175000E+1, 0.35219500E+2, 0.272E+3, 0.100E+1, 0.38840000E+1, 0.91180000E+0, 0.23410600E+2, + 0.272E+3, 0.200E+1, 0.38840000E+1, 0.00000000E+0, 0.52531240E+3, 0.272E+3, 0.300E+1, + 0.38840000E+1, 0.00000000E+0, 0.30984670E+3, 0.272E+3, 0.400E+1, 0.38840000E+1, 0.00000000E+0, + 0.21084170E+3, 0.272E+3, 0.500E+1, 0.38840000E+1, 0.00000000E+0, 0.14342000E+3, 0.272E+3, + 0.600E+1, 0.38840000E+1, 0.00000000E+0, 0.10074190E+3, 0.272E+3, 0.700E+1, 0.38840000E+1, + 0.00000000E+0, 0.76484200E+2, 0.272E+3, 0.800E+1, 0.38840000E+1, 0.00000000E+0, 0.58056700E+2, + 0.272E+3, 0.900E+1, 0.38840000E+1, 0.00000000E+0, 0.44712000E+2, 0.272E+3, 0.100E+2, + 0.38840000E+1, 0.00000000E+0, 0.62893080E+3, 0.272E+3, 0.110E+2, 0.38840000E+1, 0.00000000E+0, + 0.49188460E+3, 0.272E+3, 0.120E+2, 0.38840000E+1, 0.00000000E+0, 0.45602900E+3, 0.272E+3, + 0.130E+2, 0.38840000E+1, 0.00000000E+0, 0.36194550E+3, 0.272E+3, 0.140E+2, 0.38840000E+1, + 0.00000000E+0, 0.28382390E+3, 0.272E+3, 0.150E+2, 0.38840000E+1, 0.00000000E+0, 0.23632710E+3, + 0.272E+3, 0.160E+2, 0.38840000E+1, 0.00000000E+0, 0.19360200E+3, 0.272E+3, 0.170E+2, + 0.38840000E+1, 0.00000000E+0, 0.15874630E+3, 0.272E+3, 0.180E+2, 0.38840000E+1, 0.00000000E+0, + 0.10274537E+4, 0.272E+3, 0.190E+2, 0.38840000E+1, 0.00000000E+0, 0.85873510E+3, 0.272E+3, + 0.200E+2, 0.38840000E+1, 0.00000000E+0, 0.71140130E+3, 0.272E+3, 0.210E+2, 0.38840000E+1, + 0.00000000E+0, 0.68866520E+3, 0.272E+3, 0.220E+2, 0.38840000E+1, 0.00000000E+0, 0.63154370E+3, + 0.272E+3, 0.230E+2, 0.38840000E+1, 0.00000000E+0, 0.49757540E+3, 0.272E+3, 0.240E+2, + 0.38840000E+1, 0.00000000E+0, 0.54486260E+3, 0.272E+3, 0.250E+2, 0.38840000E+1, 0.00000000E+0, + 0.42780560E+3, 0.272E+3, 0.260E+2, 0.38840000E+1, 0.00000000E+0, 0.45484270E+3, 0.272E+3, + 0.270E+2, 0.38840000E+1, 0.00000000E+0, 0.46785600E+3, 0.272E+3, 0.280E+2, 0.38840000E+1, + 0.00000000E+0, 0.35868500E+3, 0.272E+3, 0.290E+2, 0.38840000E+1, 0.00000000E+0, 0.36992010E+3, + 0.272E+3, 0.300E+2, 0.38840000E+1, 0.00000000E+0, 0.43768410E+3, 0.272E+3, 0.310E+2, + 0.38840000E+1, 0.00000000E+0, 0.38810850E+3, 0.272E+3, 0.320E+2, 0.38840000E+1, 0.00000000E+0, + 0.33255870E+3, 0.272E+3, 0.330E+2, 0.38840000E+1, 0.00000000E+0, 0.29919670E+3, 0.272E+3, + 0.340E+2, 0.38840000E+1, 0.00000000E+0, 0.26248890E+3, 0.272E+3, 0.350E+2, 0.38840000E+1, + 0.00000000E+0, 0.22875780E+3, 0.272E+3, 0.360E+2, 0.38840000E+1, 0.00000000E+0, 0.11528150E+4, + 0.272E+3, 0.370E+2, 0.38840000E+1, 0.00000000E+0, 0.10226698E+4, 0.272E+3, 0.380E+2, + 0.38840000E+1, 0.00000000E+0, 0.90010840E+3, 0.272E+3, 0.390E+2, 0.38840000E+1, 0.00000000E+0, + 0.81130330E+3, 0.272E+3, 0.400E+2, 0.38840000E+1, 0.00000000E+0, 0.74116010E+3, 0.272E+3, + 0.410E+2, 0.38840000E+1, 0.00000000E+0, 0.57392370E+3, 0.272E+3, 0.420E+2, 0.38840000E+1, + 0.00000000E+0, 0.63963880E+3, 0.272E+3, 0.430E+2, 0.38840000E+1, 0.00000000E+0, 0.48887360E+3, + 0.272E+3, 0.440E+2, 0.38840000E+1, 0.00000000E+0, 0.53438470E+3, 0.272E+3, 0.450E+2, + 0.38840000E+1, 0.00000000E+0, 0.49607390E+3, 0.272E+3, 0.460E+2, 0.38840000E+1, 0.00000000E+0, + 0.41327390E+3, 0.272E+3, 0.470E+2, 0.38840000E+1, 0.00000000E+0, 0.43768030E+3, 0.272E+3, + 0.480E+2, 0.38840000E+1, 0.00000000E+0, 0.54743800E+3, 0.272E+3, 0.490E+2, 0.38840000E+1, + 0.00000000E+0, 0.50847990E+3, 0.272E+3, 0.500E+2, 0.38840000E+1, 0.00000000E+0, 0.45499670E+3, + 0.272E+3, 0.510E+2, 0.38840000E+1, 0.00000000E+0, 0.42313470E+3, 0.272E+3, 0.520E+2, + 0.38840000E+1, 0.00000000E+0, 0.38349110E+3, 0.272E+3, 0.530E+2, 0.38840000E+1, 0.00000000E+0, + 0.34549990E+3, 0.272E+3, 0.540E+2, 0.38840000E+1, 0.00000000E+0, 0.14048971E+4, 0.272E+3, + 0.550E+2, 0.38840000E+1, 0.00000000E+0, 0.13017488E+4, 0.272E+3, 0.560E+2, 0.38840000E+1, + 0.00000000E+0, 0.11490950E+4, 0.272E+3, 0.570E+2, 0.38840000E+1, 0.00000000E+0, 0.53712000E+3, + 0.272E+3, 0.580E+2, 0.38840000E+1, 0.27991000E+1, 0.11550423E+4, 0.272E+3, 0.590E+2, + 0.38840000E+1, 0.00000000E+0, 0.11099829E+4, 0.272E+3, 0.600E+2, 0.38840000E+1, 0.00000000E+0, + 0.10823751E+4, 0.272E+3, 0.610E+2, 0.38840000E+1, 0.00000000E+0, 0.10569604E+4, 0.272E+3, + 0.620E+2, 0.38840000E+1, 0.00000000E+0, 0.10344333E+4, 0.272E+3, 0.630E+2, 0.38840000E+1, + 0.00000000E+0, 0.81761230E+3, 0.272E+3, 0.640E+2, 0.38840000E+1, 0.00000000E+0, 0.91364540E+3, + 0.272E+3, 0.650E+2, 0.38840000E+1, 0.00000000E+0, 0.88198390E+3, 0.272E+3, 0.660E+2, + 0.38840000E+1, 0.00000000E+0, 0.93409640E+3, 0.272E+3, 0.670E+2, 0.38840000E+1, 0.00000000E+0, + 0.91438960E+3, 0.272E+3, 0.680E+2, 0.38840000E+1, 0.00000000E+0, 0.89667750E+3, 0.272E+3, + 0.690E+2, 0.38840000E+1, 0.00000000E+0, 0.88600250E+3, 0.272E+3, 0.700E+2, 0.38840000E+1, + 0.00000000E+0, 0.74911050E+3, 0.272E+3, 0.710E+2, 0.38840000E+1, 0.00000000E+0, 0.74025210E+3, + 0.272E+3, 0.720E+2, 0.38840000E+1, 0.00000000E+0, 0.67737500E+3, 0.272E+3, 0.730E+2, + 0.38840000E+1, 0.00000000E+0, 0.57310850E+3, 0.272E+3, 0.740E+2, 0.38840000E+1, 0.00000000E+0, + 0.58363200E+3, 0.272E+3, 0.750E+2, 0.38840000E+1, 0.00000000E+0, 0.53009450E+3, 0.272E+3, + 0.760E+2, 0.38840000E+1, 0.00000000E+0, 0.48629160E+3, 0.272E+3, 0.770E+2, 0.38840000E+1, + 0.00000000E+0, 0.40460200E+3, 0.272E+3, 0.780E+2, 0.38840000E+1, 0.00000000E+0, 0.37824260E+3, + 0.272E+3, 0.790E+2, 0.38840000E+1, 0.00000000E+0, 0.38943520E+3, 0.272E+3, 0.800E+2, + 0.38840000E+1, 0.00000000E+0, 0.56259750E+3, 0.272E+3, 0.810E+2, 0.38840000E+1, 0.00000000E+0, + 0.55195500E+3, 0.272E+3, 0.820E+2, 0.38840000E+1, 0.00000000E+0, 0.50903810E+3, 0.272E+3, + 0.830E+2, 0.38840000E+1, 0.00000000E+0, 0.48647930E+3, 0.272E+3, 0.840E+2, 0.38840000E+1, + 0.00000000E+0, 0.45000480E+3, 0.272E+3, 0.850E+2, 0.38840000E+1, 0.00000000E+0, 0.41326650E+3, + 0.272E+3, 0.860E+2, 0.38840000E+1, 0.00000000E+0, 0.13317058E+4, 0.272E+3, 0.870E+2, + 0.38840000E+1, 0.00000000E+0, 0.12904127E+4, 0.272E+3, 0.880E+2, 0.38840000E+1, 0.00000000E+0, + 0.11454809E+4, 0.272E+3, 0.890E+2, 0.38840000E+1, 0.00000000E+0, 0.10342317E+4, 0.272E+3, + 0.900E+2, 0.38840000E+1, 0.00000000E+0, 0.10243603E+4, 0.272E+3, 0.910E+2, 0.38840000E+1, + 0.00000000E+0, 0.99194790E+3, 0.272E+3, 0.920E+2, 0.38840000E+1, 0.00000000E+0, 0.10182141E+4, + 0.272E+3, 0.930E+2, 0.38840000E+1, 0.00000000E+0, 0.98657360E+3, 0.272E+3, 0.940E+2, + 0.38840000E+1, 0.00000000E+0, 0.56451300E+2, 0.272E+3, 0.101E+3, 0.38840000E+1, 0.00000000E+0, + 0.18035670E+3, 0.272E+3, 0.103E+3, 0.38840000E+1, 0.98650000E+0, 0.23052060E+3, 0.272E+3, + 0.104E+3, 0.38840000E+1, 0.98080000E+0, 0.17769180E+3, 0.272E+3, 0.105E+3, 0.38840000E+1, + 0.97060000E+0, 0.13451000E+3, 0.272E+3, 0.106E+3, 0.38840000E+1, 0.98680000E+0, 0.93956900E+2, + 0.272E+3, 0.107E+3, 0.38840000E+1, 0.99440000E+0, 0.68655500E+2, 0.272E+3, 0.108E+3, + 0.38840000E+1, 0.99250000E+0, 0.47370200E+2, 0.272E+3, 0.109E+3, 0.38840000E+1, 0.99820000E+0, + 0.26307010E+3, 0.272E+3, 0.111E+3, 0.38840000E+1, 0.96840000E+0, 0.40658200E+3, 0.272E+3, + 0.112E+3, 0.38840000E+1, 0.96280000E+0, 0.41382490E+3, 0.272E+3, 0.113E+3, 0.38840000E+1, + 0.96480000E+0, 0.33484900E+3, 0.272E+3, 0.114E+3, 0.38840000E+1, 0.95070000E+0, 0.27554270E+3, + 0.272E+3, 0.115E+3, 0.38840000E+1, 0.99470000E+0, 0.23369990E+3, 0.272E+3, 0.116E+3, + 0.38840000E+1, 0.99480000E+0, 0.19157960E+3, 0.272E+3, 0.117E+3, 0.38840000E+1, 0.99720000E+0, + 0.36408150E+3, 0.272E+3, 0.119E+3, 0.38840000E+1, 0.97670000E+0, 0.68723560E+3, 0.272E+3, + 0.120E+3, 0.38840000E+1, 0.98310000E+0, 0.36630740E+3, 0.272E+3, 0.121E+3, 0.38840000E+1, + 0.18627000E+1, 0.35366860E+3, 0.272E+3, 0.122E+3, 0.38840000E+1, 0.18299000E+1, 0.34654410E+3, + 0.272E+3, 0.123E+3, 0.38840000E+1, 0.19138000E+1, 0.34308700E+3, 0.272E+3, 0.124E+3, + 0.38840000E+1, 0.18269000E+1, 0.31671570E+3, 0.272E+3, 0.125E+3, 0.38840000E+1, 0.16406000E+1, + 0.29336460E+3, 0.272E+3, 0.126E+3, 0.38840000E+1, 0.16483000E+1, 0.27983390E+3, 0.272E+3, + 0.127E+3, 0.38840000E+1, 0.17149000E+1, 0.27349300E+3, 0.272E+3, 0.128E+3, 0.38840000E+1, + 0.17937000E+1, 0.26953150E+3, 0.272E+3, 0.129E+3, 0.38840000E+1, 0.95760000E+0, 0.25402930E+3, + 0.272E+3, 0.130E+3, 0.38840000E+1, 0.19419000E+1, 0.41165060E+3, 0.272E+3, 0.131E+3, + 0.38840000E+1, 0.96010000E+0, 0.36351880E+3, 0.272E+3, 0.132E+3, 0.38840000E+1, 0.94340000E+0, + 0.32699810E+3, 0.272E+3, 0.133E+3, 0.38840000E+1, 0.98890000E+0, 0.29929580E+3, 0.272E+3, + 0.134E+3, 0.38840000E+1, 0.99010000E+0, 0.26427820E+3, 0.272E+3, 0.135E+3, 0.38840000E+1, + 0.99740000E+0, 0.43494430E+3, 0.272E+3, 0.137E+3, 0.38840000E+1, 0.97380000E+0, 0.83572700E+3, + 0.272E+3, 0.138E+3, 0.38840000E+1, 0.98010000E+0, 0.64479280E+3, 0.272E+3, 0.139E+3, + 0.38840000E+1, 0.19153000E+1, 0.48425820E+3, 0.272E+3, 0.140E+3, 0.38840000E+1, 0.19355000E+1, + 0.48896320E+3, 0.272E+3, 0.141E+3, 0.38840000E+1, 0.19545000E+1, 0.45641490E+3, 0.272E+3, + 0.142E+3, 0.38840000E+1, 0.19420000E+1, 0.50966540E+3, 0.272E+3, 0.143E+3, 0.38840000E+1, + 0.16682000E+1, 0.39898040E+3, 0.272E+3, 0.144E+3, 0.38840000E+1, 0.18584000E+1, 0.37331410E+3, + 0.272E+3, 0.145E+3, 0.38840000E+1, 0.19003000E+1, 0.34680080E+3, 0.272E+3, 0.146E+3, + 0.38840000E+1, 0.18630000E+1, 0.33529990E+3, 0.272E+3, 0.147E+3, 0.38840000E+1, 0.96790000E+0, + 0.33249420E+3, 0.272E+3, 0.148E+3, 0.38840000E+1, 0.19539000E+1, 0.52263660E+3, 0.272E+3, + 0.149E+3, 0.38840000E+1, 0.96330000E+0, 0.47495740E+3, 0.272E+3, 0.150E+3, 0.38840000E+1, + 0.95140000E+0, 0.44616040E+3, 0.272E+3, 0.151E+3, 0.38840000E+1, 0.97490000E+0, 0.42289020E+3, + 0.272E+3, 0.152E+3, 0.38840000E+1, 0.98110000E+0, 0.38708050E+3, 0.272E+3, 0.153E+3, + 0.38840000E+1, 0.99680000E+0, 0.51625270E+3, 0.272E+3, 0.155E+3, 0.38840000E+1, 0.99090000E+0, + 0.10815338E+4, 0.272E+3, 0.156E+3, 0.38840000E+1, 0.97970000E+0, 0.81548330E+3, 0.272E+3, + 0.157E+3, 0.38840000E+1, 0.19373000E+1, 0.52103820E+3, 0.272E+3, 0.159E+3, 0.38840000E+1, + 0.29425000E+1, 0.51028040E+3, 0.272E+3, 0.160E+3, 0.38840000E+1, 0.29455000E+1, 0.49420110E+3, + 0.272E+3, 0.161E+3, 0.38840000E+1, 0.29413000E+1, 0.49632490E+3, 0.272E+3, 0.162E+3, + 0.38840000E+1, 0.29300000E+1, 0.47741750E+3, 0.272E+3, 0.163E+3, 0.38840000E+1, 0.18286000E+1, + 0.49938720E+3, 0.272E+3, 0.164E+3, 0.38840000E+1, 0.28732000E+1, 0.46926950E+3, 0.272E+3, + 0.165E+3, 0.38840000E+1, 0.29086000E+1, 0.47695560E+3, 0.272E+3, 0.166E+3, 0.38840000E+1, + 0.28965000E+1, 0.44565950E+3, 0.272E+3, 0.167E+3, 0.38840000E+1, 0.29242000E+1, 0.43304490E+3, + 0.272E+3, 0.168E+3, 0.38840000E+1, 0.29282000E+1, 0.43020330E+3, 0.272E+3, 0.169E+3, + 0.38840000E+1, 0.29246000E+1, 0.45184050E+3, 0.272E+3, 0.170E+3, 0.38840000E+1, 0.28482000E+1, + 0.41595250E+3, 0.272E+3, 0.171E+3, 0.38840000E+1, 0.29219000E+1, 0.55954550E+3, 0.272E+3, + 0.172E+3, 0.38840000E+1, 0.19254000E+1, 0.52058420E+3, 0.272E+3, 0.173E+3, 0.38840000E+1, + 0.19459000E+1, 0.47617010E+3, 0.272E+3, 0.174E+3, 0.38840000E+1, 0.19292000E+1, 0.48071520E+3, + 0.272E+3, 0.175E+3, 0.38840000E+1, 0.18104000E+1, 0.42322750E+3, 0.272E+3, 0.176E+3, + 0.38840000E+1, 0.18858000E+1, 0.39843450E+3, 0.272E+3, 0.177E+3, 0.38840000E+1, 0.18648000E+1, + 0.38070180E+3, 0.272E+3, 0.178E+3, 0.38840000E+1, 0.19188000E+1, 0.36388290E+3, 0.272E+3, + 0.179E+3, 0.38840000E+1, 0.98460000E+0, 0.35232230E+3, 0.272E+3, 0.180E+3, 0.38840000E+1, + 0.19896000E+1, 0.56157040E+3, 0.272E+3, 0.181E+3, 0.38840000E+1, 0.92670000E+0, 0.51406470E+3, + 0.272E+3, 0.182E+3, 0.38840000E+1, 0.93830000E+0, 0.49968080E+3, 0.272E+3, 0.183E+3, + 0.38840000E+1, 0.98200000E+0, 0.48675350E+3, 0.272E+3, 0.184E+3, 0.38840000E+1, 0.98150000E+0, + 0.45547580E+3, 0.272E+3, 0.185E+3, 0.38840000E+1, 0.99540000E+0, 0.58159320E+3, 0.272E+3, + 0.187E+3, 0.38840000E+1, 0.97050000E+0, 0.10790444E+4, 0.272E+3, 0.188E+3, 0.38840000E+1, + 0.96620000E+0, 0.61650660E+3, 0.272E+3, 0.189E+3, 0.38840000E+1, 0.29070000E+1, 0.70890840E+3, + 0.272E+3, 0.190E+3, 0.38840000E+1, 0.28844000E+1, 0.63454270E+3, 0.272E+3, 0.191E+3, + 0.38840000E+1, 0.28738000E+1, 0.56236500E+3, 0.272E+3, 0.192E+3, 0.38840000E+1, 0.28878000E+1, + 0.54147420E+3, 0.272E+3, 0.193E+3, 0.38840000E+1, 0.29095000E+1, 0.64630030E+3, 0.272E+3, + 0.194E+3, 0.38840000E+1, 0.19209000E+1, 0.15187100E+3, 0.272E+3, 0.204E+3, 0.38840000E+1, + 0.19697000E+1, 0.14945570E+3, 0.272E+3, 0.205E+3, 0.38840000E+1, 0.19441000E+1, 0.10995340E+3, + 0.272E+3, 0.206E+3, 0.38840000E+1, 0.19985000E+1, 0.88233300E+2, 0.272E+3, 0.207E+3, + 0.38840000E+1, 0.20143000E+1, 0.60592700E+2, 0.272E+3, 0.208E+3, 0.38840000E+1, 0.19887000E+1, + 0.26815940E+3, 0.272E+3, 0.212E+3, 0.38840000E+1, 0.19496000E+1, 0.32387400E+3, 0.272E+3, + 0.213E+3, 0.38840000E+1, 0.19311000E+1, 0.31174680E+3, 0.272E+3, 0.214E+3, 0.38840000E+1, + 0.19435000E+1, 0.27170710E+3, 0.272E+3, 0.215E+3, 0.38840000E+1, 0.20102000E+1, 0.22898300E+3, + 0.272E+3, 0.216E+3, 0.38840000E+1, 0.19903000E+1, 0.37583520E+3, 0.272E+3, 0.220E+3, + 0.38840000E+1, 0.19349000E+1, 0.36214280E+3, 0.272E+3, 0.221E+3, 0.38840000E+1, 0.28999000E+1, + 0.36666280E+3, 0.272E+3, 0.222E+3, 0.38840000E+1, 0.38675000E+1, 0.33547490E+3, 0.272E+3, + 0.223E+3, 0.38840000E+1, 0.29110000E+1, 0.25363880E+3, 0.272E+3, 0.224E+3, 0.38840000E+1, + 0.10619100E+2, 0.21751740E+3, 0.272E+3, 0.225E+3, 0.38840000E+1, 0.98849000E+1, 0.21343980E+3, + 0.272E+3, 0.226E+3, 0.38840000E+1, 0.91376000E+1, 0.24927270E+3, 0.272E+3, 0.227E+3, + 0.38840000E+1, 0.29263000E+1, 0.23249050E+3, 0.272E+3, 0.228E+3, 0.38840000E+1, 0.65458000E+1, + 0.32767280E+3, 0.272E+3, 0.231E+3, 0.38840000E+1, 0.19315000E+1, 0.34636060E+3, 0.272E+3, + 0.232E+3, 0.38840000E+1, 0.19447000E+1, 0.31855200E+3, 0.272E+3, 0.233E+3, 0.38840000E+1, + 0.19793000E+1, 0.29696280E+3, 0.272E+3, 0.234E+3, 0.38840000E+1, 0.19812000E+1, 0.45040960E+3, + 0.272E+3, 0.238E+3, 0.38840000E+1, 0.19143000E+1, 0.43502220E+3, 0.272E+3, 0.239E+3, + 0.38840000E+1, 0.28903000E+1, 0.43916880E+3, 0.272E+3, 0.240E+3, 0.38840000E+1, 0.39106000E+1, + 0.42451400E+3, 0.272E+3, 0.241E+3, 0.38840000E+1, 0.29225000E+1, 0.37628530E+3, 0.272E+3, + 0.242E+3, 0.38840000E+1, 0.11055600E+2, 0.33276620E+3, 0.272E+3, 0.243E+3, 0.38840000E+1, + 0.95402000E+1, 0.31465980E+3, 0.272E+3, 0.244E+3, 0.38840000E+1, 0.88895000E+1, 0.31973310E+3, + 0.272E+3, 0.245E+3, 0.38840000E+1, 0.29696000E+1, 0.33378790E+3, 0.272E+3, 0.246E+3, + 0.38840000E+1, 0.57095000E+1, 0.42275520E+3, 0.272E+3, 0.249E+3, 0.38840000E+1, 0.19378000E+1, + 0.45955200E+3, 0.272E+3, 0.250E+3, 0.38840000E+1, 0.19505000E+1, 0.43419590E+3, 0.272E+3, + 0.251E+3, 0.38840000E+1, 0.19523000E+1, 0.41956530E+3, 0.272E+3, 0.252E+3, 0.38840000E+1, + 0.19639000E+1, 0.54526090E+3, 0.272E+3, 0.256E+3, 0.38840000E+1, 0.18467000E+1, 0.56623920E+3, + 0.272E+3, 0.257E+3, 0.38840000E+1, 0.29175000E+1, 0.42097660E+3, 0.272E+3, 0.272E+3, + 0.38840000E+1, 0.38840000E+1, 0.36595100E+2, 0.273E+3, 0.100E+1, 0.28988000E+1, 0.91180000E+0, + 0.24281400E+2, 0.273E+3, 0.200E+1, 0.28988000E+1, 0.00000000E+0, 0.56610590E+3, 0.273E+3, + 0.300E+1, 0.28988000E+1, 0.00000000E+0, 0.32644690E+3, 0.273E+3, 0.400E+1, 0.28988000E+1, + 0.00000000E+0, 0.22041970E+3, 0.273E+3, 0.500E+1, 0.28988000E+1, 0.00000000E+0, 0.14932900E+3, + 0.273E+3, 0.600E+1, 0.28988000E+1, 0.00000000E+0, 0.10467690E+3, 0.273E+3, 0.700E+1, + 0.28988000E+1, 0.00000000E+0, 0.79396800E+2, 0.273E+3, 0.800E+1, 0.28988000E+1, 0.00000000E+0, + 0.60239300E+2, 0.273E+3, 0.900E+1, 0.28988000E+1, 0.00000000E+0, 0.46387800E+2, 0.273E+3, + 0.100E+2, 0.28988000E+1, 0.00000000E+0, 0.67687130E+3, 0.273E+3, 0.110E+2, 0.28988000E+1, + 0.00000000E+0, 0.51998460E+3, 0.273E+3, 0.120E+2, 0.28988000E+1, 0.00000000E+0, 0.47979410E+3, + 0.273E+3, 0.130E+2, 0.28988000E+1, 0.00000000E+0, 0.37862690E+3, 0.273E+3, 0.140E+2, + 0.28988000E+1, 0.00000000E+0, 0.29580530E+3, 0.273E+3, 0.150E+2, 0.28988000E+1, 0.00000000E+0, + 0.24586750E+3, 0.273E+3, 0.160E+2, 0.28988000E+1, 0.00000000E+0, 0.20113960E+3, 0.273E+3, + 0.170E+2, 0.28988000E+1, 0.00000000E+0, 0.16478050E+3, 0.273E+3, 0.180E+2, 0.28988000E+1, + 0.00000000E+0, 0.11126264E+4, 0.273E+3, 0.190E+2, 0.28988000E+1, 0.00000000E+0, 0.91447030E+3, + 0.273E+3, 0.200E+2, 0.28988000E+1, 0.00000000E+0, 0.75525190E+3, 0.273E+3, 0.210E+2, + 0.28988000E+1, 0.00000000E+0, 0.72956490E+3, 0.273E+3, 0.220E+2, 0.28988000E+1, 0.00000000E+0, + 0.66815990E+3, 0.273E+3, 0.230E+2, 0.28988000E+1, 0.00000000E+0, 0.52676740E+3, 0.273E+3, + 0.240E+2, 0.28988000E+1, 0.00000000E+0, 0.57538750E+3, 0.273E+3, 0.250E+2, 0.28988000E+1, + 0.00000000E+0, 0.45195440E+3, 0.273E+3, 0.260E+2, 0.28988000E+1, 0.00000000E+0, 0.47878370E+3, + 0.273E+3, 0.270E+2, 0.28988000E+1, 0.00000000E+0, 0.49306650E+3, 0.273E+3, 0.280E+2, + 0.28988000E+1, 0.00000000E+0, 0.37838780E+3, 0.273E+3, 0.290E+2, 0.28988000E+1, 0.00000000E+0, + 0.38837940E+3, 0.273E+3, 0.300E+2, 0.28988000E+1, 0.00000000E+0, 0.45998760E+3, 0.273E+3, + 0.310E+2, 0.28988000E+1, 0.00000000E+0, 0.40600970E+3, 0.273E+3, 0.320E+2, 0.28988000E+1, + 0.00000000E+0, 0.34676900E+3, 0.273E+3, 0.330E+2, 0.28988000E+1, 0.00000000E+0, 0.31149230E+3, + 0.273E+3, 0.340E+2, 0.28988000E+1, 0.00000000E+0, 0.27290380E+3, 0.273E+3, 0.350E+2, + 0.28988000E+1, 0.00000000E+0, 0.23759510E+3, 0.273E+3, 0.360E+2, 0.28988000E+1, 0.00000000E+0, + 0.12473944E+4, 0.273E+3, 0.370E+2, 0.28988000E+1, 0.00000000E+0, 0.10901054E+4, 0.273E+3, + 0.380E+2, 0.28988000E+1, 0.00000000E+0, 0.95467960E+3, 0.273E+3, 0.390E+2, 0.28988000E+1, + 0.00000000E+0, 0.85810820E+3, 0.273E+3, 0.400E+2, 0.28988000E+1, 0.00000000E+0, 0.78268490E+3, + 0.273E+3, 0.410E+2, 0.28988000E+1, 0.00000000E+0, 0.60471660E+3, 0.273E+3, 0.420E+2, + 0.28988000E+1, 0.00000000E+0, 0.67451160E+3, 0.273E+3, 0.430E+2, 0.28988000E+1, 0.00000000E+0, + 0.51426690E+3, 0.273E+3, 0.440E+2, 0.28988000E+1, 0.00000000E+0, 0.56175990E+3, 0.273E+3, + 0.450E+2, 0.28988000E+1, 0.00000000E+0, 0.52100450E+3, 0.273E+3, 0.460E+2, 0.28988000E+1, + 0.00000000E+0, 0.43478170E+3, 0.273E+3, 0.470E+2, 0.28988000E+1, 0.00000000E+0, 0.45916630E+3, + 0.273E+3, 0.480E+2, 0.28988000E+1, 0.00000000E+0, 0.57597200E+3, 0.273E+3, 0.490E+2, + 0.28988000E+1, 0.00000000E+0, 0.53273890E+3, 0.273E+3, 0.500E+2, 0.28988000E+1, 0.00000000E+0, + 0.47516010E+3, 0.273E+3, 0.510E+2, 0.28988000E+1, 0.00000000E+0, 0.44117360E+3, 0.273E+3, + 0.520E+2, 0.28988000E+1, 0.00000000E+0, 0.39923870E+3, 0.273E+3, 0.530E+2, 0.28988000E+1, + 0.00000000E+0, 0.35925420E+3, 0.273E+3, 0.540E+2, 0.28988000E+1, 0.00000000E+0, 0.15209786E+4, + 0.273E+3, 0.550E+2, 0.28988000E+1, 0.00000000E+0, 0.13908237E+4, 0.273E+3, 0.560E+2, + 0.28988000E+1, 0.00000000E+0, 0.12212713E+4, 0.273E+3, 0.570E+2, 0.28988000E+1, 0.00000000E+0, + 0.56144200E+3, 0.273E+3, 0.580E+2, 0.28988000E+1, 0.27991000E+1, 0.12321348E+4, 0.273E+3, + 0.590E+2, 0.28988000E+1, 0.00000000E+0, 0.11827756E+4, 0.273E+3, 0.600E+2, 0.28988000E+1, + 0.00000000E+0, 0.11530265E+4, 0.273E+3, 0.610E+2, 0.28988000E+1, 0.00000000E+0, 0.11256719E+4, + 0.273E+3, 0.620E+2, 0.28988000E+1, 0.00000000E+0, 0.11014151E+4, 0.273E+3, 0.630E+2, + 0.28988000E+1, 0.00000000E+0, 0.86643530E+3, 0.273E+3, 0.640E+2, 0.28988000E+1, 0.00000000E+0, + 0.97722080E+3, 0.273E+3, 0.650E+2, 0.28988000E+1, 0.00000000E+0, 0.94263090E+3, 0.273E+3, + 0.660E+2, 0.28988000E+1, 0.00000000E+0, 0.99314900E+3, 0.273E+3, 0.670E+2, 0.28988000E+1, + 0.00000000E+0, 0.97201510E+3, 0.273E+3, 0.680E+2, 0.28988000E+1, 0.00000000E+0, 0.95296410E+3, + 0.273E+3, 0.690E+2, 0.28988000E+1, 0.00000000E+0, 0.94178690E+3, 0.273E+3, 0.700E+2, + 0.28988000E+1, 0.00000000E+0, 0.79383690E+3, 0.273E+3, 0.710E+2, 0.28988000E+1, 0.00000000E+0, + 0.78053540E+3, 0.273E+3, 0.720E+2, 0.28988000E+1, 0.00000000E+0, 0.71253240E+3, 0.273E+3, + 0.730E+2, 0.28988000E+1, 0.00000000E+0, 0.60220240E+3, 0.273E+3, 0.740E+2, 0.28988000E+1, + 0.00000000E+0, 0.61258210E+3, 0.273E+3, 0.750E+2, 0.28988000E+1, 0.00000000E+0, 0.55538920E+3, + 0.273E+3, 0.760E+2, 0.28988000E+1, 0.00000000E+0, 0.50882230E+3, 0.273E+3, 0.770E+2, + 0.28988000E+1, 0.00000000E+0, 0.42301850E+3, 0.273E+3, 0.780E+2, 0.28988000E+1, 0.00000000E+0, + 0.39532750E+3, 0.273E+3, 0.790E+2, 0.28988000E+1, 0.00000000E+0, 0.40661330E+3, 0.273E+3, + 0.800E+2, 0.28988000E+1, 0.00000000E+0, 0.59190940E+3, 0.273E+3, 0.810E+2, 0.28988000E+1, + 0.00000000E+0, 0.57859300E+3, 0.273E+3, 0.820E+2, 0.28988000E+1, 0.00000000E+0, 0.53193140E+3, + 0.273E+3, 0.830E+2, 0.28988000E+1, 0.00000000E+0, 0.50757870E+3, 0.273E+3, 0.840E+2, + 0.28988000E+1, 0.00000000E+0, 0.46877360E+3, 0.273E+3, 0.850E+2, 0.28988000E+1, 0.00000000E+0, + 0.42997720E+3, 0.273E+3, 0.860E+2, 0.28988000E+1, 0.00000000E+0, 0.14348337E+4, 0.273E+3, + 0.870E+2, 0.28988000E+1, 0.00000000E+0, 0.13751465E+4, 0.273E+3, 0.880E+2, 0.28988000E+1, + 0.00000000E+0, 0.12148259E+4, 0.273E+3, 0.890E+2, 0.28988000E+1, 0.00000000E+0, 0.10917991E+4, + 0.273E+3, 0.900E+2, 0.28988000E+1, 0.00000000E+0, 0.10843209E+4, 0.273E+3, 0.910E+2, + 0.28988000E+1, 0.00000000E+0, 0.10498792E+4, 0.273E+3, 0.920E+2, 0.28988000E+1, 0.00000000E+0, + 0.10808128E+4, 0.273E+3, 0.930E+2, 0.28988000E+1, 0.00000000E+0, 0.10465858E+4, 0.273E+3, + 0.940E+2, 0.28988000E+1, 0.00000000E+0, 0.58803800E+2, 0.273E+3, 0.101E+3, 0.28988000E+1, + 0.00000000E+0, 0.18986110E+3, 0.273E+3, 0.103E+3, 0.28988000E+1, 0.98650000E+0, 0.24244290E+3, + 0.273E+3, 0.104E+3, 0.28988000E+1, 0.98080000E+0, 0.18557490E+3, 0.273E+3, 0.105E+3, + 0.28988000E+1, 0.97060000E+0, 0.14012490E+3, 0.273E+3, 0.106E+3, 0.28988000E+1, 0.98680000E+0, + 0.97656800E+2, 0.273E+3, 0.107E+3, 0.28988000E+1, 0.99440000E+0, 0.71264400E+2, 0.273E+3, + 0.108E+3, 0.28988000E+1, 0.99250000E+0, 0.49121900E+2, 0.273E+3, 0.109E+3, 0.28988000E+1, + 0.99820000E+0, 0.27753610E+3, 0.273E+3, 0.111E+3, 0.28988000E+1, 0.96840000E+0, 0.42932400E+3, + 0.273E+3, 0.112E+3, 0.28988000E+1, 0.96280000E+0, 0.43497780E+3, 0.273E+3, 0.113E+3, + 0.28988000E+1, 0.96480000E+0, 0.35008490E+3, 0.273E+3, 0.114E+3, 0.28988000E+1, 0.95070000E+0, + 0.28716960E+3, 0.273E+3, 0.115E+3, 0.28988000E+1, 0.99470000E+0, 0.24316080E+3, 0.273E+3, + 0.116E+3, 0.28988000E+1, 0.99480000E+0, 0.19905370E+3, 0.273E+3, 0.117E+3, 0.28988000E+1, + 0.99720000E+0, 0.38351900E+3, 0.273E+3, 0.119E+3, 0.28988000E+1, 0.97670000E+0, 0.73299270E+3, + 0.273E+3, 0.120E+3, 0.28988000E+1, 0.98310000E+0, 0.38359320E+3, 0.273E+3, 0.121E+3, + 0.28988000E+1, 0.18627000E+1, 0.37045440E+3, 0.273E+3, 0.122E+3, 0.28988000E+1, 0.18299000E+1, + 0.36303280E+3, 0.273E+3, 0.123E+3, 0.28988000E+1, 0.19138000E+1, 0.35964520E+3, 0.273E+3, + 0.124E+3, 0.28988000E+1, 0.18269000E+1, 0.33100010E+3, 0.273E+3, 0.125E+3, 0.28988000E+1, + 0.16406000E+1, 0.30643150E+3, 0.273E+3, 0.126E+3, 0.28988000E+1, 0.16483000E+1, 0.29235680E+3, + 0.273E+3, 0.127E+3, 0.28988000E+1, 0.17149000E+1, 0.28579970E+3, 0.273E+3, 0.128E+3, + 0.28988000E+1, 0.17937000E+1, 0.28225140E+3, 0.273E+3, 0.129E+3, 0.28988000E+1, 0.95760000E+0, + 0.26501660E+3, 0.273E+3, 0.130E+3, 0.28988000E+1, 0.19419000E+1, 0.43212490E+3, 0.273E+3, + 0.131E+3, 0.28988000E+1, 0.96010000E+0, 0.37997370E+3, 0.273E+3, 0.132E+3, 0.28988000E+1, + 0.94340000E+0, 0.34092760E+3, 0.273E+3, 0.133E+3, 0.28988000E+1, 0.98890000E+0, 0.31161210E+3, + 0.273E+3, 0.134E+3, 0.28988000E+1, 0.99010000E+0, 0.27478910E+3, 0.273E+3, 0.135E+3, + 0.28988000E+1, 0.99740000E+0, 0.45784580E+3, 0.273E+3, 0.137E+3, 0.28988000E+1, 0.97380000E+0, + 0.89253360E+3, 0.273E+3, 0.138E+3, 0.28988000E+1, 0.98010000E+0, 0.68212820E+3, 0.273E+3, + 0.139E+3, 0.28988000E+1, 0.19153000E+1, 0.50766120E+3, 0.273E+3, 0.140E+3, 0.28988000E+1, + 0.19355000E+1, 0.51256950E+3, 0.273E+3, 0.141E+3, 0.28988000E+1, 0.19545000E+1, 0.47819280E+3, + 0.273E+3, 0.142E+3, 0.28988000E+1, 0.19420000E+1, 0.53626360E+3, 0.273E+3, 0.143E+3, + 0.28988000E+1, 0.16682000E+1, 0.41699040E+3, 0.273E+3, 0.144E+3, 0.28988000E+1, 0.18584000E+1, + 0.39019030E+3, 0.273E+3, 0.145E+3, 0.28988000E+1, 0.19003000E+1, 0.36240560E+3, 0.273E+3, + 0.146E+3, 0.28988000E+1, 0.18630000E+1, 0.35051370E+3, 0.273E+3, 0.147E+3, 0.28988000E+1, + 0.96790000E+0, 0.34680430E+3, 0.273E+3, 0.148E+3, 0.28988000E+1, 0.19539000E+1, 0.54909790E+3, + 0.273E+3, 0.149E+3, 0.28988000E+1, 0.96330000E+0, 0.49700410E+3, 0.273E+3, 0.150E+3, + 0.28988000E+1, 0.95140000E+0, 0.46575860E+3, 0.273E+3, 0.151E+3, 0.28988000E+1, 0.97490000E+0, + 0.44087250E+3, 0.273E+3, 0.152E+3, 0.28988000E+1, 0.98110000E+0, 0.40297870E+3, 0.273E+3, + 0.153E+3, 0.28988000E+1, 0.99680000E+0, 0.54168560E+3, 0.273E+3, 0.155E+3, 0.28988000E+1, + 0.99090000E+0, 0.11586256E+4, 0.273E+3, 0.156E+3, 0.28988000E+1, 0.97970000E+0, 0.86372770E+3, + 0.273E+3, 0.157E+3, 0.28988000E+1, 0.19373000E+1, 0.54454800E+3, 0.273E+3, 0.159E+3, + 0.28988000E+1, 0.29425000E+1, 0.53328550E+3, 0.273E+3, 0.160E+3, 0.28988000E+1, 0.29455000E+1, + 0.51641630E+3, 0.273E+3, 0.161E+3, 0.28988000E+1, 0.29413000E+1, 0.51893410E+3, 0.273E+3, + 0.162E+3, 0.28988000E+1, 0.29300000E+1, 0.50005910E+3, 0.273E+3, 0.163E+3, 0.28988000E+1, + 0.18286000E+1, 0.52212860E+3, 0.273E+3, 0.164E+3, 0.28988000E+1, 0.28732000E+1, 0.49044870E+3, + 0.273E+3, 0.165E+3, 0.28988000E+1, 0.29086000E+1, 0.49903390E+3, 0.273E+3, 0.166E+3, + 0.28988000E+1, 0.28965000E+1, 0.46555820E+3, 0.273E+3, 0.167E+3, 0.28988000E+1, 0.29242000E+1, + 0.45230800E+3, 0.273E+3, 0.168E+3, 0.28988000E+1, 0.29282000E+1, 0.44938570E+3, 0.273E+3, + 0.169E+3, 0.28988000E+1, 0.29246000E+1, 0.47221050E+3, 0.273E+3, 0.170E+3, 0.28988000E+1, + 0.28482000E+1, 0.43437410E+3, 0.273E+3, 0.171E+3, 0.28988000E+1, 0.29219000E+1, 0.58833640E+3, + 0.273E+3, 0.172E+3, 0.28988000E+1, 0.19254000E+1, 0.54616030E+3, 0.273E+3, 0.173E+3, + 0.28988000E+1, 0.19459000E+1, 0.49848100E+3, 0.273E+3, 0.174E+3, 0.28988000E+1, 0.19292000E+1, + 0.50425710E+3, 0.273E+3, 0.175E+3, 0.28988000E+1, 0.18104000E+1, 0.44178790E+3, 0.273E+3, + 0.176E+3, 0.28988000E+1, 0.18858000E+1, 0.41572770E+3, 0.273E+3, 0.177E+3, 0.28988000E+1, + 0.18648000E+1, 0.39714540E+3, 0.273E+3, 0.178E+3, 0.28988000E+1, 0.19188000E+1, 0.37972750E+3, + 0.273E+3, 0.179E+3, 0.28988000E+1, 0.98460000E+0, 0.36701200E+3, 0.273E+3, 0.180E+3, + 0.28988000E+1, 0.19896000E+1, 0.59000540E+3, 0.273E+3, 0.181E+3, 0.28988000E+1, 0.92670000E+0, + 0.53789130E+3, 0.273E+3, 0.182E+3, 0.28988000E+1, 0.93830000E+0, 0.52181620E+3, 0.273E+3, + 0.183E+3, 0.28988000E+1, 0.98200000E+0, 0.50773170E+3, 0.273E+3, 0.184E+3, 0.28988000E+1, + 0.98150000E+0, 0.47444690E+3, 0.273E+3, 0.185E+3, 0.28988000E+1, 0.99540000E+0, 0.61006800E+3, + 0.273E+3, 0.187E+3, 0.28988000E+1, 0.97050000E+0, 0.11516502E+4, 0.273E+3, 0.188E+3, + 0.28988000E+1, 0.96620000E+0, 0.64431070E+3, 0.273E+3, 0.189E+3, 0.28988000E+1, 0.29070000E+1, + 0.74392250E+3, 0.273E+3, 0.190E+3, 0.28988000E+1, 0.28844000E+1, 0.66568850E+3, 0.273E+3, + 0.191E+3, 0.28988000E+1, 0.28738000E+1, 0.58786120E+3, 0.273E+3, 0.192E+3, 0.28988000E+1, + 0.28878000E+1, 0.56570590E+3, 0.273E+3, 0.193E+3, 0.28988000E+1, 0.29095000E+1, 0.68049130E+3, + 0.273E+3, 0.194E+3, 0.28988000E+1, 0.19209000E+1, 0.15844380E+3, 0.273E+3, 0.204E+3, + 0.28988000E+1, 0.19697000E+1, 0.15595490E+3, 0.273E+3, 0.205E+3, 0.28988000E+1, 0.19441000E+1, + 0.11435140E+3, 0.273E+3, 0.206E+3, 0.28988000E+1, 0.19985000E+1, 0.91693500E+2, 0.273E+3, + 0.207E+3, 0.28988000E+1, 0.20143000E+1, 0.62899100E+2, 0.273E+3, 0.208E+3, 0.28988000E+1, + 0.19887000E+1, 0.28061570E+3, 0.273E+3, 0.212E+3, 0.28988000E+1, 0.19496000E+1, 0.33928390E+3, + 0.273E+3, 0.213E+3, 0.28988000E+1, 0.19311000E+1, 0.32570670E+3, 0.273E+3, 0.214E+3, + 0.28988000E+1, 0.19435000E+1, 0.28327190E+3, 0.273E+3, 0.215E+3, 0.28988000E+1, 0.20102000E+1, + 0.23825580E+3, 0.273E+3, 0.216E+3, 0.28988000E+1, 0.19903000E+1, 0.39378620E+3, 0.273E+3, + 0.220E+3, 0.28988000E+1, 0.19349000E+1, 0.37862350E+3, 0.273E+3, 0.221E+3, 0.28988000E+1, + 0.28999000E+1, 0.38330360E+3, 0.273E+3, 0.222E+3, 0.28988000E+1, 0.38675000E+1, 0.35090960E+3, + 0.273E+3, 0.223E+3, 0.28988000E+1, 0.29110000E+1, 0.26469190E+3, 0.273E+3, 0.224E+3, + 0.28988000E+1, 0.10619100E+2, 0.22664920E+3, 0.273E+3, 0.225E+3, 0.28988000E+1, 0.98849000E+1, + 0.22244630E+3, 0.273E+3, 0.226E+3, 0.28988000E+1, 0.91376000E+1, 0.26044220E+3, 0.273E+3, + 0.227E+3, 0.28988000E+1, 0.29263000E+1, 0.24268500E+3, 0.273E+3, 0.228E+3, 0.28988000E+1, + 0.65458000E+1, 0.34272530E+3, 0.273E+3, 0.231E+3, 0.28988000E+1, 0.19315000E+1, 0.36182680E+3, + 0.273E+3, 0.232E+3, 0.28988000E+1, 0.19447000E+1, 0.33202940E+3, 0.273E+3, 0.233E+3, + 0.28988000E+1, 0.19793000E+1, 0.30917670E+3, 0.273E+3, 0.234E+3, 0.28988000E+1, 0.19812000E+1, + 0.47200610E+3, 0.273E+3, 0.238E+3, 0.28988000E+1, 0.19143000E+1, 0.45450240E+3, 0.273E+3, + 0.239E+3, 0.28988000E+1, 0.28903000E+1, 0.45850240E+3, 0.273E+3, 0.240E+3, 0.28988000E+1, + 0.39106000E+1, 0.44354250E+3, 0.273E+3, 0.241E+3, 0.28988000E+1, 0.29225000E+1, 0.39244480E+3, + 0.273E+3, 0.242E+3, 0.28988000E+1, 0.11055600E+2, 0.34662740E+3, 0.273E+3, 0.243E+3, + 0.28988000E+1, 0.95402000E+1, 0.32763810E+3, 0.273E+3, 0.244E+3, 0.28988000E+1, 0.88895000E+1, + 0.33357090E+3, 0.273E+3, 0.245E+3, 0.28988000E+1, 0.29696000E+1, 0.34831840E+3, 0.273E+3, + 0.246E+3, 0.28988000E+1, 0.57095000E+1, 0.44228570E+3, 0.273E+3, 0.249E+3, 0.28988000E+1, + 0.19378000E+1, 0.48056320E+3, 0.273E+3, 0.250E+3, 0.28988000E+1, 0.19505000E+1, 0.45304590E+3, + 0.273E+3, 0.251E+3, 0.28988000E+1, 0.19523000E+1, 0.43732780E+3, 0.273E+3, 0.252E+3, + 0.28988000E+1, 0.19639000E+1, 0.57116140E+3, 0.273E+3, 0.256E+3, 0.28988000E+1, 0.18467000E+1, + 0.59193970E+3, 0.273E+3, 0.257E+3, 0.28988000E+1, 0.29175000E+1, 0.43911410E+3, 0.273E+3, + 0.272E+3, 0.28988000E+1, 0.38840000E+1, 0.45876770E+3, 0.273E+3, 0.273E+3, 0.28988000E+1, + 0.28988000E+1, 0.34435200E+2, 0.274E+3, 0.100E+1, 0.10915300E+2, 0.91180000E+0, 0.23230100E+2, + 0.274E+3, 0.200E+1, 0.10915300E+2, 0.00000000E+0, 0.49948070E+3, 0.274E+3, 0.300E+1, + 0.10915300E+2, 0.00000000E+0, 0.29673610E+3, 0.274E+3, 0.400E+1, 0.10915300E+2, 0.00000000E+0, + 0.20361200E+3, 0.274E+3, 0.500E+1, 0.10915300E+2, 0.00000000E+0, 0.13967130E+3, 0.274E+3, + 0.600E+1, 0.10915300E+2, 0.00000000E+0, 0.98854100E+2, 0.274E+3, 0.700E+1, 0.10915300E+2, + 0.00000000E+0, 0.75508800E+2, 0.274E+3, 0.800E+1, 0.10915300E+2, 0.00000000E+0, 0.57643800E+2, + 0.274E+3, 0.900E+1, 0.10915300E+2, 0.00000000E+0, 0.44614500E+2, 0.274E+3, 0.100E+2, + 0.10915300E+2, 0.00000000E+0, 0.59853480E+3, 0.274E+3, 0.110E+2, 0.10915300E+2, 0.00000000E+0, + 0.47040460E+3, 0.274E+3, 0.120E+2, 0.10915300E+2, 0.00000000E+0, 0.43759830E+3, 0.274E+3, + 0.130E+2, 0.10915300E+2, 0.00000000E+0, 0.34916910E+3, 0.274E+3, 0.140E+2, 0.10915300E+2, + 0.00000000E+0, 0.27538760E+3, 0.274E+3, 0.150E+2, 0.10915300E+2, 0.00000000E+0, 0.23036660E+3, + 0.274E+3, 0.160E+2, 0.10915300E+2, 0.00000000E+0, 0.18964180E+3, 0.274E+3, 0.170E+2, + 0.10915300E+2, 0.00000000E+0, 0.15623470E+3, 0.274E+3, 0.180E+2, 0.10915300E+2, 0.00000000E+0, + 0.97919910E+3, 0.274E+3, 0.190E+2, 0.10915300E+2, 0.00000000E+0, 0.82027660E+3, 0.274E+3, + 0.200E+2, 0.10915300E+2, 0.00000000E+0, 0.68015970E+3, 0.274E+3, 0.210E+2, 0.10915300E+2, + 0.00000000E+0, 0.65948500E+3, 0.274E+3, 0.220E+2, 0.10915300E+2, 0.00000000E+0, 0.60531050E+3, + 0.274E+3, 0.230E+2, 0.10915300E+2, 0.00000000E+0, 0.47771160E+3, 0.274E+3, 0.240E+2, + 0.10915300E+2, 0.00000000E+0, 0.52292780E+3, 0.274E+3, 0.250E+2, 0.10915300E+2, 0.00000000E+0, + 0.41137250E+3, 0.274E+3, 0.260E+2, 0.10915300E+2, 0.00000000E+0, 0.43743830E+3, 0.274E+3, + 0.270E+2, 0.10915300E+2, 0.00000000E+0, 0.44947760E+3, 0.274E+3, 0.280E+2, 0.10915300E+2, + 0.00000000E+0, 0.34533400E+3, 0.274E+3, 0.290E+2, 0.10915300E+2, 0.00000000E+0, 0.35654050E+3, + 0.274E+3, 0.300E+2, 0.10915300E+2, 0.00000000E+0, 0.42115000E+3, 0.274E+3, 0.310E+2, + 0.10915300E+2, 0.00000000E+0, 0.37485400E+3, 0.274E+3, 0.320E+2, 0.10915300E+2, 0.00000000E+0, + 0.32264010E+3, 0.274E+3, 0.330E+2, 0.10915300E+2, 0.00000000E+0, 0.29126630E+3, 0.274E+3, + 0.340E+2, 0.10915300E+2, 0.00000000E+0, 0.25651700E+3, 0.274E+3, 0.350E+2, 0.10915300E+2, + 0.00000000E+0, 0.22442600E+3, 0.274E+3, 0.360E+2, 0.10915300E+2, 0.00000000E+0, 0.10997481E+4, + 0.274E+3, 0.370E+2, 0.10915300E+2, 0.00000000E+0, 0.97735030E+3, 0.274E+3, 0.380E+2, + 0.10915300E+2, 0.00000000E+0, 0.86199720E+3, 0.274E+3, 0.390E+2, 0.10915300E+2, 0.00000000E+0, + 0.77824330E+3, 0.274E+3, 0.400E+2, 0.10915300E+2, 0.00000000E+0, 0.71194490E+3, 0.274E+3, + 0.410E+2, 0.10915300E+2, 0.00000000E+0, 0.55309640E+3, 0.274E+3, 0.420E+2, 0.10915300E+2, + 0.00000000E+0, 0.61562580E+3, 0.274E+3, 0.430E+2, 0.10915300E+2, 0.00000000E+0, 0.47221430E+3, + 0.274E+3, 0.440E+2, 0.10915300E+2, 0.00000000E+0, 0.51556800E+3, 0.274E+3, 0.450E+2, + 0.10915300E+2, 0.00000000E+0, 0.47905900E+3, 0.274E+3, 0.460E+2, 0.10915300E+2, 0.00000000E+0, + 0.39972620E+3, 0.274E+3, 0.470E+2, 0.10915300E+2, 0.00000000E+0, 0.42322300E+3, 0.274E+3, + 0.480E+2, 0.10915300E+2, 0.00000000E+0, 0.52765140E+3, 0.274E+3, 0.490E+2, 0.10915300E+2, + 0.00000000E+0, 0.49129650E+3, 0.274E+3, 0.500E+2, 0.10915300E+2, 0.00000000E+0, 0.44110510E+3, + 0.274E+3, 0.510E+2, 0.10915300E+2, 0.00000000E+0, 0.41123900E+3, 0.274E+3, 0.520E+2, + 0.10915300E+2, 0.00000000E+0, 0.37383140E+3, 0.274E+3, 0.530E+2, 0.10915300E+2, 0.00000000E+0, + 0.33786400E+3, 0.274E+3, 0.540E+2, 0.10915300E+2, 0.00000000E+0, 0.13409193E+4, 0.274E+3, + 0.550E+2, 0.10915300E+2, 0.00000000E+0, 0.12440756E+4, 0.274E+3, 0.560E+2, 0.10915300E+2, + 0.00000000E+0, 0.11002138E+4, 0.274E+3, 0.570E+2, 0.10915300E+2, 0.00000000E+0, 0.52077890E+3, + 0.274E+3, 0.580E+2, 0.10915300E+2, 0.27991000E+1, 0.11048675E+4, 0.274E+3, 0.590E+2, + 0.10915300E+2, 0.00000000E+0, 0.10619928E+4, 0.274E+3, 0.600E+2, 0.10915300E+2, 0.00000000E+0, + 0.10356282E+4, 0.274E+3, 0.610E+2, 0.10915300E+2, 0.00000000E+0, 0.10113417E+4, 0.274E+3, + 0.620E+2, 0.10915300E+2, 0.00000000E+0, 0.98981510E+3, 0.274E+3, 0.630E+2, 0.10915300E+2, + 0.00000000E+0, 0.78493070E+3, 0.274E+3, 0.640E+2, 0.10915300E+2, 0.00000000E+0, 0.87500190E+3, + 0.274E+3, 0.650E+2, 0.10915300E+2, 0.00000000E+0, 0.84502380E+3, 0.274E+3, 0.660E+2, + 0.10915300E+2, 0.00000000E+0, 0.89410530E+3, 0.274E+3, 0.670E+2, 0.10915300E+2, 0.00000000E+0, + 0.87523480E+3, 0.274E+3, 0.680E+2, 0.10915300E+2, 0.00000000E+0, 0.85830520E+3, 0.274E+3, + 0.690E+2, 0.10915300E+2, 0.00000000E+0, 0.84794180E+3, 0.274E+3, 0.700E+2, 0.10915300E+2, + 0.00000000E+0, 0.71850660E+3, 0.274E+3, 0.710E+2, 0.10915300E+2, 0.00000000E+0, 0.71139240E+3, + 0.274E+3, 0.720E+2, 0.10915300E+2, 0.00000000E+0, 0.65227240E+3, 0.274E+3, 0.730E+2, + 0.10915300E+2, 0.00000000E+0, 0.55338510E+3, 0.274E+3, 0.740E+2, 0.10915300E+2, 0.00000000E+0, + 0.56376710E+3, 0.274E+3, 0.750E+2, 0.10915300E+2, 0.00000000E+0, 0.51307710E+3, 0.274E+3, + 0.760E+2, 0.10915300E+2, 0.00000000E+0, 0.47151500E+3, 0.274E+3, 0.770E+2, 0.10915300E+2, + 0.00000000E+0, 0.39347970E+3, 0.274E+3, 0.780E+2, 0.10915300E+2, 0.00000000E+0, 0.36827210E+3, + 0.274E+3, 0.790E+2, 0.10915300E+2, 0.00000000E+0, 0.37916720E+3, 0.274E+3, 0.800E+2, + 0.10915300E+2, 0.00000000E+0, 0.54357710E+3, 0.274E+3, 0.810E+2, 0.10915300E+2, 0.00000000E+0, + 0.53401680E+3, 0.274E+3, 0.820E+2, 0.10915300E+2, 0.00000000E+0, 0.49381190E+3, 0.274E+3, + 0.830E+2, 0.10915300E+2, 0.00000000E+0, 0.47281700E+3, 0.274E+3, 0.840E+2, 0.10915300E+2, + 0.00000000E+0, 0.43850630E+3, 0.274E+3, 0.850E+2, 0.10915300E+2, 0.00000000E+0, 0.40379910E+3, + 0.274E+3, 0.860E+2, 0.10915300E+2, 0.00000000E+0, 0.12730029E+4, 0.274E+3, 0.870E+2, + 0.10915300E+2, 0.00000000E+0, 0.12347444E+4, 0.274E+3, 0.880E+2, 0.10915300E+2, 0.00000000E+0, + 0.10979052E+4, 0.274E+3, 0.890E+2, 0.10915300E+2, 0.00000000E+0, 0.99418690E+3, 0.274E+3, + 0.900E+2, 0.10915300E+2, 0.00000000E+0, 0.98402510E+3, 0.274E+3, 0.910E+2, 0.10915300E+2, + 0.00000000E+0, 0.95302030E+3, 0.274E+3, 0.920E+2, 0.10915300E+2, 0.00000000E+0, 0.97674380E+3, + 0.274E+3, 0.930E+2, 0.10915300E+2, 0.00000000E+0, 0.94660700E+3, 0.274E+3, 0.940E+2, + 0.10915300E+2, 0.00000000E+0, 0.54793400E+2, 0.274E+3, 0.101E+3, 0.10915300E+2, 0.00000000E+0, + 0.17298830E+3, 0.274E+3, 0.103E+3, 0.10915300E+2, 0.98650000E+0, 0.22155260E+3, 0.274E+3, + 0.104E+3, 0.10915300E+2, 0.98080000E+0, 0.17203160E+3, 0.274E+3, 0.105E+3, 0.10915300E+2, + 0.97060000E+0, 0.13107440E+3, 0.274E+3, 0.106E+3, 0.10915300E+2, 0.98680000E+0, 0.92276100E+2, + 0.274E+3, 0.107E+3, 0.10915300E+2, 0.99440000E+0, 0.67911900E+2, 0.274E+3, 0.108E+3, + 0.10915300E+2, 0.99250000E+0, 0.47308600E+2, 0.274E+3, 0.109E+3, 0.10915300E+2, 0.99820000E+0, + 0.25228990E+3, 0.274E+3, 0.111E+3, 0.10915300E+2, 0.96840000E+0, 0.38957210E+3, 0.274E+3, + 0.112E+3, 0.10915300E+2, 0.96280000E+0, 0.39754110E+3, 0.274E+3, 0.113E+3, 0.10915300E+2, + 0.96480000E+0, 0.32338900E+3, 0.274E+3, 0.114E+3, 0.10915300E+2, 0.95070000E+0, 0.26745480E+3, + 0.274E+3, 0.115E+3, 0.10915300E+2, 0.99470000E+0, 0.22781180E+3, 0.274E+3, 0.116E+3, + 0.10915300E+2, 0.99480000E+0, 0.18766470E+3, 0.274E+3, 0.117E+3, 0.10915300E+2, 0.99720000E+0, + 0.35118760E+3, 0.274E+3, 0.119E+3, 0.10915300E+2, 0.97670000E+0, 0.65780950E+3, 0.274E+3, + 0.120E+3, 0.10915300E+2, 0.98310000E+0, 0.35408760E+3, 0.274E+3, 0.121E+3, 0.10915300E+2, + 0.18627000E+1, 0.34206260E+3, 0.274E+3, 0.122E+3, 0.10915300E+2, 0.18299000E+1, 0.33519530E+3, + 0.274E+3, 0.123E+3, 0.10915300E+2, 0.19138000E+1, 0.33174290E+3, 0.274E+3, 0.124E+3, + 0.10915300E+2, 0.18269000E+1, 0.30679020E+3, 0.274E+3, 0.125E+3, 0.10915300E+2, 0.16406000E+1, + 0.28447550E+3, 0.274E+3, 0.126E+3, 0.10915300E+2, 0.16483000E+1, 0.27144430E+3, 0.274E+3, + 0.127E+3, 0.10915300E+2, 0.17149000E+1, 0.26525960E+3, 0.274E+3, 0.128E+3, 0.10915300E+2, + 0.17937000E+1, 0.26103120E+3, 0.274E+3, 0.129E+3, 0.10915300E+2, 0.95760000E+0, 0.24669600E+3, + 0.274E+3, 0.130E+3, 0.10915300E+2, 0.19419000E+1, 0.39651060E+3, 0.274E+3, 0.131E+3, + 0.10915300E+2, 0.96010000E+0, 0.35152430E+3, 0.274E+3, 0.132E+3, 0.10915300E+2, 0.94340000E+0, + 0.31735850E+3, 0.274E+3, 0.133E+3, 0.10915300E+2, 0.98890000E+0, 0.29136250E+3, 0.274E+3, + 0.134E+3, 0.10915300E+2, 0.99010000E+0, 0.25822570E+3, 0.274E+3, 0.135E+3, 0.10915300E+2, + 0.99740000E+0, 0.42013560E+3, 0.274E+3, 0.137E+3, 0.10915300E+2, 0.97380000E+0, 0.80028360E+3, + 0.274E+3, 0.138E+3, 0.10915300E+2, 0.98010000E+0, 0.62027440E+3, 0.274E+3, 0.139E+3, + 0.10915300E+2, 0.19153000E+1, 0.46837410E+3, 0.274E+3, 0.140E+3, 0.10915300E+2, 0.19355000E+1, + 0.47294180E+3, 0.274E+3, 0.141E+3, 0.10915300E+2, 0.19545000E+1, 0.44204910E+3, 0.274E+3, + 0.142E+3, 0.10915300E+2, 0.19420000E+1, 0.49245940E+3, 0.274E+3, 0.143E+3, 0.10915300E+2, + 0.16682000E+1, 0.38741710E+3, 0.274E+3, 0.144E+3, 0.10915300E+2, 0.18584000E+1, 0.36276960E+3, + 0.274E+3, 0.145E+3, 0.10915300E+2, 0.19003000E+1, 0.33732470E+3, 0.274E+3, 0.146E+3, + 0.10915300E+2, 0.18630000E+1, 0.32605860E+3, 0.274E+3, 0.147E+3, 0.10915300E+2, 0.96790000E+0, + 0.32365690E+3, 0.274E+3, 0.148E+3, 0.10915300E+2, 0.19539000E+1, 0.50425970E+3, 0.274E+3, + 0.149E+3, 0.10915300E+2, 0.96330000E+0, 0.45956860E+3, 0.274E+3, 0.150E+3, 0.10915300E+2, + 0.95140000E+0, 0.43276910E+3, 0.274E+3, 0.151E+3, 0.10915300E+2, 0.97490000E+0, 0.41105850E+3, + 0.274E+3, 0.152E+3, 0.10915300E+2, 0.98110000E+0, 0.37729830E+3, 0.274E+3, 0.153E+3, + 0.10915300E+2, 0.99680000E+0, 0.49958850E+3, 0.274E+3, 0.155E+3, 0.10915300E+2, 0.99090000E+0, + 0.10355821E+4, 0.274E+3, 0.156E+3, 0.10915300E+2, 0.97970000E+0, 0.78441150E+3, 0.274E+3, + 0.157E+3, 0.10915300E+2, 0.19373000E+1, 0.50532050E+3, 0.274E+3, 0.159E+3, 0.10915300E+2, + 0.29425000E+1, 0.49491310E+3, 0.274E+3, 0.160E+3, 0.10915300E+2, 0.29455000E+1, 0.47943010E+3, + 0.274E+3, 0.161E+3, 0.10915300E+2, 0.29413000E+1, 0.48126120E+3, 0.274E+3, 0.162E+3, + 0.10915300E+2, 0.29300000E+1, 0.46237370E+3, 0.274E+3, 0.163E+3, 0.10915300E+2, 0.18286000E+1, + 0.48403110E+3, 0.274E+3, 0.164E+3, 0.10915300E+2, 0.28732000E+1, 0.45510020E+3, 0.274E+3, + 0.165E+3, 0.10915300E+2, 0.29086000E+1, 0.46220710E+3, 0.274E+3, 0.166E+3, 0.10915300E+2, + 0.28965000E+1, 0.43236450E+3, 0.274E+3, 0.167E+3, 0.10915300E+2, 0.29242000E+1, 0.42019360E+3, + 0.274E+3, 0.168E+3, 0.10915300E+2, 0.29282000E+1, 0.41735840E+3, 0.274E+3, 0.169E+3, + 0.10915300E+2, 0.29246000E+1, 0.43783510E+3, 0.274E+3, 0.170E+3, 0.10915300E+2, 0.28482000E+1, + 0.40359860E+3, 0.274E+3, 0.171E+3, 0.10915300E+2, 0.29219000E+1, 0.54010000E+3, 0.274E+3, + 0.172E+3, 0.10915300E+2, 0.19254000E+1, 0.50356000E+3, 0.274E+3, 0.173E+3, 0.10915300E+2, + 0.19459000E+1, 0.46165670E+3, 0.274E+3, 0.174E+3, 0.10915300E+2, 0.19292000E+1, 0.46529970E+3, + 0.274E+3, 0.175E+3, 0.10915300E+2, 0.18104000E+1, 0.41168040E+3, 0.274E+3, 0.176E+3, + 0.10915300E+2, 0.18858000E+1, 0.38805470E+3, 0.274E+3, 0.177E+3, 0.10915300E+2, 0.18648000E+1, + 0.37109900E+3, 0.274E+3, 0.178E+3, 0.10915300E+2, 0.19188000E+1, 0.35487160E+3, 0.274E+3, + 0.179E+3, 0.10915300E+2, 0.98460000E+0, 0.34408260E+3, 0.274E+3, 0.180E+3, 0.10915300E+2, + 0.19896000E+1, 0.54282280E+3, 0.274E+3, 0.181E+3, 0.10915300E+2, 0.92670000E+0, 0.49822260E+3, + 0.274E+3, 0.182E+3, 0.10915300E+2, 0.93830000E+0, 0.48504830E+3, 0.274E+3, 0.183E+3, + 0.10915300E+2, 0.98200000E+0, 0.47318900E+3, 0.274E+3, 0.184E+3, 0.10915300E+2, 0.98150000E+0, + 0.44381290E+3, 0.274E+3, 0.185E+3, 0.10915300E+2, 0.99540000E+0, 0.56285700E+3, 0.274E+3, + 0.187E+3, 0.10915300E+2, 0.97050000E+0, 0.10344519E+4, 0.274E+3, 0.188E+3, 0.10915300E+2, + 0.96620000E+0, 0.59772660E+3, 0.274E+3, 0.189E+3, 0.10915300E+2, 0.29070000E+1, 0.68593330E+3, + 0.274E+3, 0.190E+3, 0.10915300E+2, 0.28844000E+1, 0.61504850E+3, 0.274E+3, 0.191E+3, + 0.10915300E+2, 0.28738000E+1, 0.54603460E+3, 0.274E+3, 0.192E+3, 0.10915300E+2, 0.28878000E+1, + 0.52604590E+3, 0.274E+3, 0.193E+3, 0.10915300E+2, 0.29095000E+1, 0.62473940E+3, 0.274E+3, + 0.194E+3, 0.10915300E+2, 0.19209000E+1, 0.14693770E+3, 0.274E+3, 0.204E+3, 0.10915300E+2, + 0.19697000E+1, 0.14506890E+3, 0.274E+3, 0.205E+3, 0.10915300E+2, 0.19441000E+1, 0.10751640E+3, + 0.274E+3, 0.206E+3, 0.10915300E+2, 0.19985000E+1, 0.86744300E+2, 0.274E+3, 0.207E+3, + 0.10915300E+2, 0.20143000E+1, 0.60101300E+2, 0.274E+3, 0.208E+3, 0.10915300E+2, 0.19887000E+1, + 0.25846390E+3, 0.274E+3, 0.212E+3, 0.10915300E+2, 0.19496000E+1, 0.31219790E+3, 0.274E+3, + 0.213E+3, 0.10915300E+2, 0.19311000E+1, 0.30136080E+3, 0.274E+3, 0.214E+3, 0.10915300E+2, + 0.19435000E+1, 0.26370240E+3, 0.274E+3, 0.215E+3, 0.10915300E+2, 0.20102000E+1, 0.22325700E+3, + 0.274E+3, 0.216E+3, 0.10915300E+2, 0.19903000E+1, 0.36300510E+3, 0.274E+3, 0.220E+3, + 0.10915300E+2, 0.19349000E+1, 0.35046740E+3, 0.274E+3, 0.221E+3, 0.10915300E+2, 0.28999000E+1, + 0.35493010E+3, 0.274E+3, 0.222E+3, 0.10915300E+2, 0.38675000E+1, 0.32491900E+3, 0.274E+3, + 0.223E+3, 0.10915300E+2, 0.29110000E+1, 0.24698040E+3, 0.274E+3, 0.224E+3, 0.10915300E+2, + 0.10619100E+2, 0.21243170E+3, 0.274E+3, 0.225E+3, 0.10915300E+2, 0.98849000E+1, 0.20838910E+3, + 0.274E+3, 0.226E+3, 0.10915300E+2, 0.91376000E+1, 0.24221550E+3, 0.274E+3, 0.227E+3, + 0.10915300E+2, 0.29263000E+1, 0.22617060E+3, 0.274E+3, 0.228E+3, 0.10915300E+2, 0.65458000E+1, + 0.31684610E+3, 0.274E+3, 0.231E+3, 0.10915300E+2, 0.19315000E+1, 0.33520830E+3, 0.274E+3, + 0.232E+3, 0.10915300E+2, 0.19447000E+1, 0.30932650E+3, 0.274E+3, 0.233E+3, 0.10915300E+2, + 0.19793000E+1, 0.28913180E+3, 0.274E+3, 0.234E+3, 0.10915300E+2, 0.19812000E+1, 0.43547330E+3, + 0.274E+3, 0.238E+3, 0.10915300E+2, 0.19143000E+1, 0.42156130E+3, 0.274E+3, 0.239E+3, + 0.10915300E+2, 0.28903000E+1, 0.42595070E+3, 0.274E+3, 0.240E+3, 0.10915300E+2, 0.39106000E+1, + 0.41195670E+3, 0.274E+3, 0.241E+3, 0.10915300E+2, 0.29225000E+1, 0.36633030E+3, 0.274E+3, + 0.242E+3, 0.10915300E+2, 0.11055600E+2, 0.32483190E+3, 0.274E+3, 0.243E+3, 0.10915300E+2, + 0.95402000E+1, 0.30750010E+3, 0.274E+3, 0.244E+3, 0.10915300E+2, 0.88895000E+1, 0.31180890E+3, + 0.274E+3, 0.245E+3, 0.10915300E+2, 0.29696000E+1, 0.32514160E+3, 0.274E+3, 0.246E+3, + 0.10915300E+2, 0.57095000E+1, 0.40961940E+3, 0.274E+3, 0.249E+3, 0.10915300E+2, 0.19378000E+1, + 0.44499610E+3, 0.274E+3, 0.250E+3, 0.10915300E+2, 0.19505000E+1, 0.42145120E+3, 0.274E+3, + 0.251E+3, 0.10915300E+2, 0.19523000E+1, 0.40793570E+3, 0.274E+3, 0.252E+3, 0.10915300E+2, + 0.19639000E+1, 0.52780130E+3, 0.274E+3, 0.256E+3, 0.10915300E+2, 0.18467000E+1, 0.54842160E+3, + 0.274E+3, 0.257E+3, 0.10915300E+2, 0.29175000E+1, 0.40887060E+3, 0.274E+3, 0.272E+3, + 0.10915300E+2, 0.38840000E+1, 0.42635470E+3, 0.274E+3, 0.273E+3, 0.10915300E+2, 0.28988000E+1, + 0.39809730E+3, 0.274E+3, 0.274E+3, 0.10915300E+2, 0.10915300E+2, 0.31592800E+2, 0.275E+3, + 0.100E+1, 0.98054000E+1, 0.91180000E+0, 0.21621000E+2, 0.275E+3, 0.200E+1, 0.98054000E+1, + 0.00000000E+0, 0.43757960E+3, 0.275E+3, 0.300E+1, 0.98054000E+1, 0.00000000E+0, 0.26483780E+3, + 0.275E+3, 0.400E+1, 0.98054000E+1, 0.00000000E+0, 0.18401940E+3, 0.275E+3, 0.500E+1, + 0.98054000E+1, 0.00000000E+0, 0.12752710E+3, 0.275E+3, 0.600E+1, 0.98054000E+1, 0.00000000E+0, + 0.90995800E+2, 0.275E+3, 0.700E+1, 0.98054000E+1, 0.00000000E+0, 0.69928900E+2, 0.275E+3, + 0.800E+1, 0.98054000E+1, 0.00000000E+0, 0.53673800E+2, 0.275E+3, 0.900E+1, 0.98054000E+1, + 0.00000000E+0, 0.41731000E+2, 0.275E+3, 0.100E+2, 0.98054000E+1, 0.00000000E+0, 0.52514830E+3, + 0.275E+3, 0.110E+2, 0.98054000E+1, 0.00000000E+0, 0.41847680E+3, 0.275E+3, 0.120E+2, + 0.98054000E+1, 0.00000000E+0, 0.39167000E+3, 0.275E+3, 0.130E+2, 0.98054000E+1, 0.00000000E+0, + 0.31514880E+3, 0.275E+3, 0.140E+2, 0.98054000E+1, 0.00000000E+0, 0.25044750E+3, 0.275E+3, + 0.150E+2, 0.98054000E+1, 0.00000000E+0, 0.21061910E+3, 0.275E+3, 0.160E+2, 0.98054000E+1, + 0.00000000E+0, 0.17429820E+3, 0.275E+3, 0.170E+2, 0.98054000E+1, 0.00000000E+0, 0.14428140E+3, + 0.275E+3, 0.180E+2, 0.98054000E+1, 0.00000000E+0, 0.85835650E+3, 0.275E+3, 0.190E+2, + 0.98054000E+1, 0.00000000E+0, 0.72611640E+3, 0.275E+3, 0.200E+2, 0.98054000E+1, 0.00000000E+0, + 0.60356880E+3, 0.275E+3, 0.210E+2, 0.98054000E+1, 0.00000000E+0, 0.58685490E+3, 0.275E+3, + 0.220E+2, 0.98054000E+1, 0.00000000E+0, 0.53950230E+3, 0.275E+3, 0.230E+2, 0.98054000E+1, + 0.00000000E+0, 0.42636910E+3, 0.275E+3, 0.240E+2, 0.98054000E+1, 0.00000000E+0, 0.46716530E+3, + 0.275E+3, 0.250E+2, 0.98054000E+1, 0.00000000E+0, 0.36813400E+3, 0.275E+3, 0.260E+2, + 0.98054000E+1, 0.00000000E+0, 0.39225490E+3, 0.275E+3, 0.270E+2, 0.98054000E+1, 0.00000000E+0, + 0.40236920E+3, 0.275E+3, 0.280E+2, 0.98054000E+1, 0.00000000E+0, 0.30964490E+3, 0.275E+3, + 0.290E+2, 0.98054000E+1, 0.00000000E+0, 0.32085180E+3, 0.275E+3, 0.300E+2, 0.98054000E+1, + 0.00000000E+0, 0.37820130E+3, 0.275E+3, 0.310E+2, 0.98054000E+1, 0.00000000E+0, 0.33870950E+3, + 0.275E+3, 0.320E+2, 0.98054000E+1, 0.00000000E+0, 0.29330960E+3, 0.275E+3, 0.330E+2, + 0.98054000E+1, 0.00000000E+0, 0.26587000E+3, 0.275E+3, 0.340E+2, 0.98054000E+1, 0.00000000E+0, + 0.23516470E+3, 0.275E+3, 0.350E+2, 0.98054000E+1, 0.00000000E+0, 0.20659450E+3, 0.275E+3, + 0.360E+2, 0.98054000E+1, 0.00000000E+0, 0.96546080E+3, 0.275E+3, 0.370E+2, 0.98054000E+1, + 0.00000000E+0, 0.86521550E+3, 0.275E+3, 0.380E+2, 0.98054000E+1, 0.00000000E+0, 0.76664930E+3, + 0.275E+3, 0.390E+2, 0.98054000E+1, 0.00000000E+0, 0.69431570E+3, 0.275E+3, 0.400E+2, + 0.98054000E+1, 0.00000000E+0, 0.63659010E+3, 0.275E+3, 0.410E+2, 0.98054000E+1, 0.00000000E+0, + 0.49673190E+3, 0.275E+3, 0.420E+2, 0.98054000E+1, 0.00000000E+0, 0.55196750E+3, 0.275E+3, + 0.430E+2, 0.98054000E+1, 0.00000000E+0, 0.42541540E+3, 0.275E+3, 0.440E+2, 0.98054000E+1, + 0.00000000E+0, 0.46408940E+3, 0.275E+3, 0.450E+2, 0.98054000E+1, 0.00000000E+0, 0.43183300E+3, + 0.275E+3, 0.460E+2, 0.98054000E+1, 0.00000000E+0, 0.36056290E+3, 0.275E+3, 0.470E+2, + 0.98054000E+1, 0.00000000E+0, 0.38221490E+3, 0.275E+3, 0.480E+2, 0.98054000E+1, 0.00000000E+0, + 0.47434870E+3, 0.275E+3, 0.490E+2, 0.98054000E+1, 0.00000000E+0, 0.44370850E+3, 0.275E+3, + 0.500E+2, 0.98054000E+1, 0.00000000E+0, 0.40039260E+3, 0.275E+3, 0.510E+2, 0.98054000E+1, + 0.00000000E+0, 0.37450420E+3, 0.275E+3, 0.520E+2, 0.98054000E+1, 0.00000000E+0, 0.34168440E+3, + 0.275E+3, 0.530E+2, 0.98054000E+1, 0.00000000E+0, 0.30992280E+3, 0.275E+3, 0.540E+2, + 0.98054000E+1, 0.00000000E+0, 0.11778622E+4, 0.275E+3, 0.550E+2, 0.98054000E+1, 0.00000000E+0, + 0.11002149E+4, 0.275E+3, 0.560E+2, 0.98054000E+1, 0.00000000E+0, 0.97735910E+3, 0.275E+3, + 0.570E+2, 0.98054000E+1, 0.00000000E+0, 0.47249460E+3, 0.275E+3, 0.580E+2, 0.98054000E+1, + 0.27991000E+1, 0.97880490E+3, 0.275E+3, 0.590E+2, 0.98054000E+1, 0.00000000E+0, 0.94144390E+3, + 0.275E+3, 0.600E+2, 0.98054000E+1, 0.00000000E+0, 0.91823780E+3, 0.275E+3, 0.610E+2, + 0.98054000E+1, 0.00000000E+0, 0.89683560E+3, 0.275E+3, 0.620E+2, 0.98054000E+1, 0.00000000E+0, + 0.87787040E+3, 0.275E+3, 0.630E+2, 0.98054000E+1, 0.00000000E+0, 0.70022530E+3, 0.275E+3, + 0.640E+2, 0.98054000E+1, 0.00000000E+0, 0.77537110E+3, 0.275E+3, 0.650E+2, 0.98054000E+1, + 0.00000000E+0, 0.74950170E+3, 0.275E+3, 0.660E+2, 0.98054000E+1, 0.00000000E+0, 0.79380070E+3, + 0.275E+3, 0.670E+2, 0.98054000E+1, 0.00000000E+0, 0.77710890E+3, 0.275E+3, 0.680E+2, + 0.98054000E+1, 0.00000000E+0, 0.76218580E+3, 0.275E+3, 0.690E+2, 0.98054000E+1, 0.00000000E+0, + 0.75278270E+3, 0.275E+3, 0.700E+2, 0.98054000E+1, 0.00000000E+0, 0.64040610E+3, 0.275E+3, + 0.710E+2, 0.98054000E+1, 0.00000000E+0, 0.63688250E+3, 0.275E+3, 0.720E+2, 0.98054000E+1, + 0.00000000E+0, 0.58584610E+3, 0.275E+3, 0.730E+2, 0.98054000E+1, 0.00000000E+0, 0.49867750E+3, + 0.275E+3, 0.740E+2, 0.98054000E+1, 0.00000000E+0, 0.50852330E+3, 0.275E+3, 0.750E+2, + 0.98054000E+1, 0.00000000E+0, 0.46413690E+3, 0.275E+3, 0.760E+2, 0.98054000E+1, 0.00000000E+0, + 0.42756890E+3, 0.275E+3, 0.770E+2, 0.98054000E+1, 0.00000000E+0, 0.35797140E+3, 0.275E+3, + 0.780E+2, 0.98054000E+1, 0.00000000E+0, 0.33546850E+3, 0.275E+3, 0.790E+2, 0.98054000E+1, + 0.00000000E+0, 0.34558560E+3, 0.275E+3, 0.800E+2, 0.98054000E+1, 0.00000000E+0, 0.48985300E+3, + 0.275E+3, 0.810E+2, 0.98054000E+1, 0.00000000E+0, 0.48277210E+3, 0.275E+3, 0.820E+2, + 0.98054000E+1, 0.00000000E+0, 0.44834220E+3, 0.275E+3, 0.830E+2, 0.98054000E+1, 0.00000000E+0, + 0.43041860E+3, 0.275E+3, 0.840E+2, 0.98054000E+1, 0.00000000E+0, 0.40052020E+3, 0.275E+3, + 0.850E+2, 0.98054000E+1, 0.00000000E+0, 0.37000240E+3, 0.275E+3, 0.860E+2, 0.98054000E+1, + 0.00000000E+0, 0.11223371E+4, 0.275E+3, 0.870E+2, 0.98054000E+1, 0.00000000E+0, 0.10947171E+4, + 0.275E+3, 0.880E+2, 0.98054000E+1, 0.00000000E+0, 0.97740400E+3, 0.275E+3, 0.890E+2, + 0.98054000E+1, 0.00000000E+0, 0.88977500E+3, 0.275E+3, 0.900E+2, 0.98054000E+1, 0.00000000E+0, + 0.87887760E+3, 0.275E+3, 0.910E+2, 0.98054000E+1, 0.00000000E+0, 0.85133500E+3, 0.275E+3, + 0.920E+2, 0.98054000E+1, 0.00000000E+0, 0.86982820E+3, 0.275E+3, 0.930E+2, 0.98054000E+1, + 0.00000000E+0, 0.84344130E+3, 0.275E+3, 0.940E+2, 0.98054000E+1, 0.00000000E+0, 0.49861600E+2, + 0.275E+3, 0.101E+3, 0.98054000E+1, 0.00000000E+0, 0.15470980E+3, 0.275E+3, 0.103E+3, + 0.98054000E+1, 0.98650000E+0, 0.19867640E+3, 0.275E+3, 0.104E+3, 0.98054000E+1, 0.98080000E+0, + 0.15594320E+3, 0.275E+3, 0.105E+3, 0.98054000E+1, 0.97060000E+0, 0.11971100E+3, 0.275E+3, + 0.106E+3, 0.98054000E+1, 0.98680000E+0, 0.84990600E+2, 0.275E+3, 0.107E+3, 0.98054000E+1, + 0.99440000E+0, 0.63003200E+2, 0.275E+3, 0.108E+3, 0.98054000E+1, 0.99250000E+0, 0.44293300E+2, + 0.275E+3, 0.109E+3, 0.98054000E+1, 0.99820000E+0, 0.22533300E+3, 0.275E+3, 0.111E+3, + 0.98054000E+1, 0.96840000E+0, 0.34751630E+3, 0.275E+3, 0.112E+3, 0.98054000E+1, 0.96280000E+0, + 0.35639850E+3, 0.275E+3, 0.113E+3, 0.98054000E+1, 0.96480000E+0, 0.29229100E+3, 0.275E+3, + 0.114E+3, 0.98054000E+1, 0.95070000E+0, 0.24332340E+3, 0.275E+3, 0.115E+3, 0.98054000E+1, + 0.99470000E+0, 0.20827540E+3, 0.275E+3, 0.116E+3, 0.98054000E+1, 0.99480000E+0, 0.17247660E+3, + 0.275E+3, 0.117E+3, 0.98054000E+1, 0.99720000E+0, 0.31572770E+3, 0.275E+3, 0.119E+3, + 0.98054000E+1, 0.97670000E+0, 0.58337200E+3, 0.275E+3, 0.120E+3, 0.98054000E+1, 0.98310000E+0, + 0.31998810E+3, 0.275E+3, 0.121E+3, 0.98054000E+1, 0.18627000E+1, 0.30928520E+3, 0.275E+3, + 0.122E+3, 0.98054000E+1, 0.18299000E+1, 0.30306940E+3, 0.275E+3, 0.123E+3, 0.98054000E+1, + 0.19138000E+1, 0.29974820E+3, 0.275E+3, 0.124E+3, 0.98054000E+1, 0.18269000E+1, 0.27813060E+3, + 0.275E+3, 0.125E+3, 0.98054000E+1, 0.16406000E+1, 0.25824560E+3, 0.275E+3, 0.126E+3, + 0.98054000E+1, 0.16483000E+1, 0.24647110E+3, 0.275E+3, 0.127E+3, 0.98054000E+1, 0.17149000E+1, + 0.24079380E+3, 0.275E+3, 0.128E+3, 0.98054000E+1, 0.17937000E+1, 0.23633890E+3, 0.275E+3, + 0.129E+3, 0.98054000E+1, 0.95760000E+0, 0.22442270E+3, 0.275E+3, 0.130E+3, 0.98054000E+1, + 0.19419000E+1, 0.35665940E+3, 0.275E+3, 0.131E+3, 0.98054000E+1, 0.96010000E+0, 0.31814490E+3, + 0.275E+3, 0.132E+3, 0.98054000E+1, 0.94340000E+0, 0.28862680E+3, 0.275E+3, 0.133E+3, + 0.98054000E+1, 0.98890000E+0, 0.26594970E+3, 0.275E+3, 0.134E+3, 0.98054000E+1, 0.99010000E+0, + 0.23668530E+3, 0.275E+3, 0.135E+3, 0.98054000E+1, 0.99740000E+0, 0.37838750E+3, 0.275E+3, + 0.137E+3, 0.98054000E+1, 0.97380000E+0, 0.70963970E+3, 0.275E+3, 0.138E+3, 0.98054000E+1, + 0.98010000E+0, 0.55520870E+3, 0.275E+3, 0.139E+3, 0.98054000E+1, 0.19153000E+1, 0.42330460E+3, + 0.275E+3, 0.140E+3, 0.98054000E+1, 0.19355000E+1, 0.42740240E+3, 0.275E+3, 0.141E+3, + 0.98054000E+1, 0.19545000E+1, 0.40015670E+3, 0.275E+3, 0.142E+3, 0.98054000E+1, 0.19420000E+1, + 0.44382790E+3, 0.275E+3, 0.143E+3, 0.98054000E+1, 0.16682000E+1, 0.35202000E+3, 0.275E+3, + 0.144E+3, 0.98054000E+1, 0.18584000E+1, 0.32985620E+3, 0.275E+3, 0.145E+3, 0.98054000E+1, + 0.19003000E+1, 0.30703010E+3, 0.275E+3, 0.146E+3, 0.98054000E+1, 0.18630000E+1, 0.29664300E+3, + 0.275E+3, 0.147E+3, 0.98054000E+1, 0.96790000E+0, 0.29510960E+3, 0.275E+3, 0.148E+3, + 0.98054000E+1, 0.19539000E+1, 0.45411220E+3, 0.275E+3, 0.149E+3, 0.98054000E+1, 0.96330000E+0, + 0.41592040E+3, 0.275E+3, 0.150E+3, 0.98054000E+1, 0.95140000E+0, 0.39310920E+3, 0.275E+3, + 0.151E+3, 0.98054000E+1, 0.97490000E+0, 0.37441140E+3, 0.275E+3, 0.152E+3, 0.98054000E+1, + 0.98110000E+0, 0.34482440E+3, 0.275E+3, 0.153E+3, 0.98054000E+1, 0.99680000E+0, 0.45152920E+3, + 0.275E+3, 0.155E+3, 0.98054000E+1, 0.99090000E+0, 0.91708910E+3, 0.275E+3, 0.156E+3, + 0.98054000E+1, 0.97970000E+0, 0.70171880E+3, 0.275E+3, 0.157E+3, 0.98054000E+1, 0.19373000E+1, + 0.45862530E+3, 0.275E+3, 0.159E+3, 0.98054000E+1, 0.29425000E+1, 0.44920880E+3, 0.275E+3, + 0.160E+3, 0.98054000E+1, 0.29455000E+1, 0.43528510E+3, 0.275E+3, 0.161E+3, 0.98054000E+1, + 0.29413000E+1, 0.43662810E+3, 0.275E+3, 0.162E+3, 0.98054000E+1, 0.29300000E+1, 0.41857700E+3, + 0.275E+3, 0.163E+3, 0.98054000E+1, 0.18286000E+1, 0.43896330E+3, 0.275E+3, 0.164E+3, + 0.98054000E+1, 0.28732000E+1, 0.41303190E+3, 0.275E+3, 0.165E+3, 0.98054000E+1, 0.29086000E+1, + 0.41895270E+3, 0.275E+3, 0.166E+3, 0.98054000E+1, 0.28965000E+1, 0.39263770E+3, 0.275E+3, + 0.167E+3, 0.98054000E+1, 0.29242000E+1, 0.38167800E+3, 0.275E+3, 0.168E+3, 0.98054000E+1, + 0.29282000E+1, 0.37901540E+3, 0.275E+3, 0.169E+3, 0.98054000E+1, 0.29246000E+1, 0.39706740E+3, + 0.275E+3, 0.170E+3, 0.98054000E+1, 0.28482000E+1, 0.36663560E+3, 0.275E+3, 0.171E+3, + 0.98054000E+1, 0.29219000E+1, 0.48647620E+3, 0.275E+3, 0.172E+3, 0.98054000E+1, 0.19254000E+1, + 0.45499830E+3, 0.275E+3, 0.173E+3, 0.98054000E+1, 0.19459000E+1, 0.41851340E+3, 0.275E+3, + 0.174E+3, 0.98054000E+1, 0.19292000E+1, 0.42070230E+3, 0.275E+3, 0.175E+3, 0.98054000E+1, + 0.18104000E+1, 0.37494930E+3, 0.275E+3, 0.176E+3, 0.98054000E+1, 0.18858000E+1, 0.35392940E+3, + 0.275E+3, 0.177E+3, 0.98054000E+1, 0.18648000E+1, 0.33877130E+3, 0.275E+3, 0.178E+3, + 0.98054000E+1, 0.19188000E+1, 0.32404200E+3, 0.275E+3, 0.179E+3, 0.98054000E+1, 0.98460000E+0, + 0.31491790E+3, 0.275E+3, 0.180E+3, 0.98054000E+1, 0.19896000E+1, 0.48972910E+3, 0.275E+3, + 0.181E+3, 0.98054000E+1, 0.92670000E+0, 0.45162020E+3, 0.275E+3, 0.182E+3, 0.98054000E+1, + 0.93830000E+0, 0.44081790E+3, 0.275E+3, 0.183E+3, 0.98054000E+1, 0.98200000E+0, 0.43091310E+3, + 0.275E+3, 0.184E+3, 0.98054000E+1, 0.98150000E+0, 0.40535970E+3, 0.275E+3, 0.185E+3, + 0.98054000E+1, 0.99540000E+0, 0.50882630E+3, 0.275E+3, 0.187E+3, 0.98054000E+1, 0.97050000E+0, + 0.91874100E+3, 0.275E+3, 0.188E+3, 0.98054000E+1, 0.96620000E+0, 0.54234140E+3, 0.275E+3, + 0.189E+3, 0.98054000E+1, 0.29070000E+1, 0.61996910E+3, 0.275E+3, 0.190E+3, 0.98054000E+1, + 0.28844000E+1, 0.55704040E+3, 0.275E+3, 0.191E+3, 0.98054000E+1, 0.28738000E+1, 0.49609310E+3, + 0.275E+3, 0.192E+3, 0.98054000E+1, 0.28878000E+1, 0.47831910E+3, 0.275E+3, 0.193E+3, + 0.98054000E+1, 0.29095000E+1, 0.56313100E+3, 0.275E+3, 0.194E+3, 0.98054000E+1, 0.19209000E+1, + 0.13319340E+3, 0.275E+3, 0.204E+3, 0.98054000E+1, 0.19697000E+1, 0.13189570E+3, 0.275E+3, + 0.205E+3, 0.98054000E+1, 0.19441000E+1, 0.98601900E+2, 0.275E+3, 0.206E+3, 0.98054000E+1, + 0.19985000E+1, 0.79979000E+2, 0.275E+3, 0.207E+3, 0.98054000E+1, 0.20143000E+1, 0.55894600E+2, + 0.275E+3, 0.208E+3, 0.98054000E+1, 0.19887000E+1, 0.23303610E+3, 0.275E+3, 0.212E+3, + 0.98054000E+1, 0.19496000E+1, 0.28137080E+3, 0.275E+3, 0.213E+3, 0.98054000E+1, 0.19311000E+1, + 0.27272890E+3, 0.275E+3, 0.214E+3, 0.98054000E+1, 0.19435000E+1, 0.23983560E+3, 0.275E+3, + 0.215E+3, 0.98054000E+1, 0.20102000E+1, 0.20414550E+3, 0.275E+3, 0.216E+3, 0.98054000E+1, + 0.19903000E+1, 0.32770190E+3, 0.275E+3, 0.220E+3, 0.98054000E+1, 0.19349000E+1, 0.31737170E+3, + 0.275E+3, 0.221E+3, 0.98054000E+1, 0.28999000E+1, 0.32150860E+3, 0.275E+3, 0.222E+3, + 0.98054000E+1, 0.38675000E+1, 0.29439580E+3, 0.275E+3, 0.223E+3, 0.98054000E+1, 0.29110000E+1, + 0.22519270E+3, 0.275E+3, 0.224E+3, 0.98054000E+1, 0.10619100E+2, 0.19439360E+3, 0.275E+3, + 0.225E+3, 0.98054000E+1, 0.98849000E+1, 0.19062290E+3, 0.275E+3, 0.226E+3, 0.98054000E+1, + 0.91376000E+1, 0.22028000E+3, 0.275E+3, 0.227E+3, 0.98054000E+1, 0.29263000E+1, 0.20601270E+3, + 0.275E+3, 0.228E+3, 0.98054000E+1, 0.65458000E+1, 0.28665620E+3, 0.275E+3, 0.231E+3, + 0.98054000E+1, 0.19315000E+1, 0.30371450E+3, 0.275E+3, 0.232E+3, 0.98054000E+1, 0.19447000E+1, + 0.28150840E+3, 0.275E+3, 0.233E+3, 0.98054000E+1, 0.19793000E+1, 0.26395060E+3, 0.275E+3, + 0.234E+3, 0.98054000E+1, 0.19812000E+1, 0.39346440E+3, 0.275E+3, 0.238E+3, 0.98054000E+1, + 0.19143000E+1, 0.38237800E+3, 0.275E+3, 0.239E+3, 0.98054000E+1, 0.28903000E+1, 0.38683830E+3, + 0.275E+3, 0.240E+3, 0.98054000E+1, 0.39106000E+1, 0.37417790E+3, 0.275E+3, 0.241E+3, + 0.98054000E+1, 0.29225000E+1, 0.33405520E+3, 0.275E+3, 0.242E+3, 0.98054000E+1, 0.11055600E+2, + 0.29716160E+3, 0.275E+3, 0.243E+3, 0.98054000E+1, 0.95402000E+1, 0.28166080E+3, 0.275E+3, + 0.244E+3, 0.98054000E+1, 0.88895000E+1, 0.28475480E+3, 0.275E+3, 0.245E+3, 0.98054000E+1, + 0.29696000E+1, 0.29656750E+3, 0.275E+3, 0.246E+3, 0.98054000E+1, 0.57095000E+1, 0.37125760E+3, + 0.275E+3, 0.249E+3, 0.98054000E+1, 0.19378000E+1, 0.40316950E+3, 0.275E+3, 0.250E+3, + 0.98054000E+1, 0.19505000E+1, 0.38318380E+3, 0.275E+3, 0.251E+3, 0.98054000E+1, 0.19523000E+1, + 0.37169830E+3, 0.275E+3, 0.252E+3, 0.98054000E+1, 0.19639000E+1, 0.47755530E+3, 0.275E+3, + 0.256E+3, 0.98054000E+1, 0.18467000E+1, 0.49702050E+3, 0.275E+3, 0.257E+3, 0.98054000E+1, + 0.29175000E+1, 0.37200450E+3, 0.275E+3, 0.272E+3, 0.98054000E+1, 0.38840000E+1, 0.38748710E+3, + 0.275E+3, 0.273E+3, 0.98054000E+1, 0.28988000E+1, 0.36309850E+3, 0.275E+3, 0.274E+3, + 0.98054000E+1, 0.10915300E+2, 0.33214480E+3, 0.275E+3, 0.275E+3, 0.98054000E+1, 0.98054000E+1, + 0.29959700E+2, 0.276E+3, 0.100E+1, 0.91527000E+1, 0.91180000E+0, 0.20732100E+2, 0.276E+3, + 0.200E+1, 0.91527000E+1, 0.00000000E+0, 0.39946230E+3, 0.276E+3, 0.300E+1, 0.91527000E+1, + 0.00000000E+0, 0.24560490E+3, 0.276E+3, 0.400E+1, 0.91527000E+1, 0.00000000E+0, 0.17242600E+3, + 0.276E+3, 0.500E+1, 0.91527000E+1, 0.00000000E+0, 0.12047520E+3, 0.276E+3, 0.600E+1, + 0.91527000E+1, 0.00000000E+0, 0.86515000E+2, 0.276E+3, 0.700E+1, 0.91527000E+1, 0.00000000E+0, + 0.66798300E+2, 0.276E+3, 0.800E+1, 0.91527000E+1, 0.00000000E+0, 0.51483900E+2, 0.276E+3, + 0.900E+1, 0.91527000E+1, 0.00000000E+0, 0.40166600E+2, 0.276E+3, 0.100E+2, 0.91527000E+1, + 0.00000000E+0, 0.48002060E+3, 0.276E+3, 0.110E+2, 0.91527000E+1, 0.00000000E+0, 0.38703270E+3, + 0.276E+3, 0.120E+2, 0.91527000E+1, 0.00000000E+0, 0.36408530E+3, 0.276E+3, 0.130E+2, + 0.91527000E+1, 0.00000000E+0, 0.29497480E+3, 0.276E+3, 0.140E+2, 0.91527000E+1, 0.00000000E+0, + 0.23585440E+3, 0.276E+3, 0.150E+2, 0.91527000E+1, 0.00000000E+0, 0.19918590E+3, 0.276E+3, + 0.160E+2, 0.91527000E+1, 0.00000000E+0, 0.16551840E+3, 0.276E+3, 0.170E+2, 0.91527000E+1, + 0.00000000E+0, 0.13752330E+3, 0.276E+3, 0.180E+2, 0.91527000E+1, 0.00000000E+0, 0.78398180E+3, + 0.276E+3, 0.190E+2, 0.91527000E+1, 0.00000000E+0, 0.66874580E+3, 0.276E+3, 0.200E+2, + 0.91527000E+1, 0.00000000E+0, 0.55703780E+3, 0.276E+3, 0.210E+2, 0.91527000E+1, 0.00000000E+0, + 0.54287970E+3, 0.276E+3, 0.220E+2, 0.91527000E+1, 0.00000000E+0, 0.49973800E+3, 0.276E+3, + 0.230E+2, 0.91527000E+1, 0.00000000E+0, 0.39539650E+3, 0.276E+3, 0.240E+2, 0.91527000E+1, + 0.00000000E+0, 0.43357460E+3, 0.276E+3, 0.250E+2, 0.91527000E+1, 0.00000000E+0, 0.34214260E+3, + 0.276E+3, 0.260E+2, 0.91527000E+1, 0.00000000E+0, 0.36517850E+3, 0.276E+3, 0.270E+2, + 0.91527000E+1, 0.00000000E+0, 0.37407150E+3, 0.276E+3, 0.280E+2, 0.91527000E+1, 0.00000000E+0, + 0.28825030E+3, 0.276E+3, 0.290E+2, 0.91527000E+1, 0.00000000E+0, 0.29957880E+3, 0.276E+3, + 0.300E+2, 0.91527000E+1, 0.00000000E+0, 0.35252400E+3, 0.276E+3, 0.310E+2, 0.91527000E+1, + 0.00000000E+0, 0.31731180E+3, 0.276E+3, 0.320E+2, 0.91527000E+1, 0.00000000E+0, 0.27613370E+3, + 0.276E+3, 0.330E+2, 0.91527000E+1, 0.00000000E+0, 0.25111640E+3, 0.276E+3, 0.340E+2, + 0.91527000E+1, 0.00000000E+0, 0.22287460E+3, 0.276E+3, 0.350E+2, 0.91527000E+1, 0.00000000E+0, + 0.19643010E+3, 0.276E+3, 0.360E+2, 0.91527000E+1, 0.00000000E+0, 0.88292900E+3, 0.276E+3, + 0.370E+2, 0.91527000E+1, 0.00000000E+0, 0.79689500E+3, 0.276E+3, 0.380E+2, 0.91527000E+1, + 0.00000000E+0, 0.70887790E+3, 0.276E+3, 0.390E+2, 0.91527000E+1, 0.00000000E+0, 0.64366450E+3, + 0.276E+3, 0.400E+2, 0.91527000E+1, 0.00000000E+0, 0.59124780E+3, 0.276E+3, 0.410E+2, + 0.91527000E+1, 0.00000000E+0, 0.46302150E+3, 0.276E+3, 0.420E+2, 0.91527000E+1, 0.00000000E+0, + 0.51380610E+3, 0.276E+3, 0.430E+2, 0.91527000E+1, 0.00000000E+0, 0.39755570E+3, 0.276E+3, + 0.440E+2, 0.91527000E+1, 0.00000000E+0, 0.43340920E+3, 0.276E+3, 0.450E+2, 0.91527000E+1, + 0.00000000E+0, 0.40374870E+3, 0.276E+3, 0.460E+2, 0.91527000E+1, 0.00000000E+0, 0.33729140E+3, + 0.276E+3, 0.470E+2, 0.91527000E+1, 0.00000000E+0, 0.35790130E+3, 0.276E+3, 0.480E+2, + 0.91527000E+1, 0.00000000E+0, 0.44252210E+3, 0.276E+3, 0.490E+2, 0.91527000E+1, 0.00000000E+0, + 0.41550540E+3, 0.276E+3, 0.500E+2, 0.91527000E+1, 0.00000000E+0, 0.37647850E+3, 0.276E+3, + 0.510E+2, 0.91527000E+1, 0.00000000E+0, 0.35306060E+3, 0.276E+3, 0.520E+2, 0.91527000E+1, + 0.00000000E+0, 0.32305850E+3, 0.276E+3, 0.530E+2, 0.91527000E+1, 0.00000000E+0, 0.29386160E+3, + 0.276E+3, 0.540E+2, 0.91527000E+1, 0.00000000E+0, 0.10777158E+4, 0.276E+3, 0.550E+2, + 0.91527000E+1, 0.00000000E+0, 0.10124643E+4, 0.276E+3, 0.560E+2, 0.91527000E+1, 0.00000000E+0, + 0.90281190E+3, 0.276E+3, 0.570E+2, 0.91527000E+1, 0.00000000E+0, 0.44410240E+3, 0.276E+3, + 0.580E+2, 0.91527000E+1, 0.27991000E+1, 0.90205950E+3, 0.276E+3, 0.590E+2, 0.91527000E+1, + 0.00000000E+0, 0.86810970E+3, 0.276E+3, 0.600E+2, 0.91527000E+1, 0.00000000E+0, 0.84683980E+3, + 0.276E+3, 0.610E+2, 0.91527000E+1, 0.00000000E+0, 0.82720360E+3, 0.276E+3, 0.620E+2, + 0.91527000E+1, 0.00000000E+0, 0.80980750E+3, 0.276E+3, 0.630E+2, 0.91527000E+1, 0.00000000E+0, + 0.64909210E+3, 0.276E+3, 0.640E+2, 0.91527000E+1, 0.00000000E+0, 0.71473580E+3, 0.276E+3, + 0.650E+2, 0.91527000E+1, 0.00000000E+0, 0.69143160E+3, 0.276E+3, 0.660E+2, 0.91527000E+1, + 0.00000000E+0, 0.73288920E+3, 0.276E+3, 0.670E+2, 0.91527000E+1, 0.00000000E+0, 0.71752640E+3, + 0.276E+3, 0.680E+2, 0.91527000E+1, 0.00000000E+0, 0.70383170E+3, 0.276E+3, 0.690E+2, + 0.91527000E+1, 0.00000000E+0, 0.69499350E+3, 0.276E+3, 0.700E+2, 0.91527000E+1, 0.00000000E+0, + 0.59320990E+3, 0.276E+3, 0.710E+2, 0.91527000E+1, 0.00000000E+0, 0.59212750E+3, 0.276E+3, + 0.720E+2, 0.91527000E+1, 0.00000000E+0, 0.54613100E+3, 0.276E+3, 0.730E+2, 0.91527000E+1, + 0.00000000E+0, 0.46612960E+3, 0.276E+3, 0.740E+2, 0.91527000E+1, 0.00000000E+0, 0.47570880E+3, + 0.276E+3, 0.750E+2, 0.91527000E+1, 0.00000000E+0, 0.43520440E+3, 0.276E+3, 0.760E+2, + 0.91527000E+1, 0.00000000E+0, 0.40169710E+3, 0.276E+3, 0.770E+2, 0.91527000E+1, 0.00000000E+0, + 0.33718850E+3, 0.276E+3, 0.780E+2, 0.91527000E+1, 0.00000000E+0, 0.31631490E+3, 0.276E+3, + 0.790E+2, 0.91527000E+1, 0.00000000E+0, 0.32600310E+3, 0.276E+3, 0.800E+2, 0.91527000E+1, + 0.00000000E+0, 0.45788770E+3, 0.276E+3, 0.810E+2, 0.91527000E+1, 0.00000000E+0, 0.45244550E+3, + 0.276E+3, 0.820E+2, 0.91527000E+1, 0.00000000E+0, 0.42163980E+3, 0.276E+3, 0.830E+2, + 0.91527000E+1, 0.00000000E+0, 0.40564640E+3, 0.276E+3, 0.840E+2, 0.91527000E+1, 0.00000000E+0, + 0.37847640E+3, 0.276E+3, 0.850E+2, 0.91527000E+1, 0.00000000E+0, 0.35052560E+3, 0.276E+3, + 0.860E+2, 0.91527000E+1, 0.00000000E+0, 0.10301431E+4, 0.276E+3, 0.870E+2, 0.91527000E+1, + 0.00000000E+0, 0.10095485E+4, 0.276E+3, 0.880E+2, 0.91527000E+1, 0.00000000E+0, 0.90447790E+3, + 0.276E+3, 0.890E+2, 0.91527000E+1, 0.00000000E+0, 0.82702680E+3, 0.276E+3, 0.900E+2, + 0.91527000E+1, 0.00000000E+0, 0.81550490E+3, 0.276E+3, 0.910E+2, 0.91527000E+1, 0.00000000E+0, + 0.79006160E+3, 0.276E+3, 0.920E+2, 0.91527000E+1, 0.00000000E+0, 0.80513870E+3, 0.276E+3, + 0.930E+2, 0.91527000E+1, 0.00000000E+0, 0.78106340E+3, 0.276E+3, 0.940E+2, 0.91527000E+1, + 0.00000000E+0, 0.46979300E+2, 0.276E+3, 0.101E+3, 0.91527000E+1, 0.00000000E+0, 0.14371930E+3, + 0.276E+3, 0.103E+3, 0.91527000E+1, 0.98650000E+0, 0.18497380E+3, 0.276E+3, 0.104E+3, + 0.91527000E+1, 0.98080000E+0, 0.14647120E+3, 0.276E+3, 0.105E+3, 0.91527000E+1, 0.97060000E+0, + 0.11311480E+3, 0.276E+3, 0.106E+3, 0.91527000E+1, 0.98680000E+0, 0.80841400E+2, 0.276E+3, + 0.107E+3, 0.91527000E+1, 0.99440000E+0, 0.60262600E+2, 0.276E+3, 0.108E+3, 0.91527000E+1, + 0.99250000E+0, 0.42663600E+2, 0.276E+3, 0.109E+3, 0.91527000E+1, 0.99820000E+0, 0.20909190E+3, + 0.276E+3, 0.111E+3, 0.91527000E+1, 0.96840000E+0, 0.32213980E+3, 0.276E+3, 0.112E+3, + 0.91527000E+1, 0.96280000E+0, 0.33174520E+3, 0.276E+3, 0.113E+3, 0.91527000E+1, 0.96480000E+0, + 0.27389260E+3, 0.276E+3, 0.114E+3, 0.91527000E+1, 0.95070000E+0, 0.22921310E+3, 0.276E+3, + 0.115E+3, 0.91527000E+1, 0.99470000E+0, 0.19696310E+3, 0.276E+3, 0.116E+3, 0.91527000E+1, + 0.99480000E+0, 0.16378500E+3, 0.276E+3, 0.117E+3, 0.91527000E+1, 0.99720000E+0, 0.29455150E+3, + 0.276E+3, 0.119E+3, 0.91527000E+1, 0.97670000E+0, 0.53811810E+3, 0.276E+3, 0.120E+3, + 0.91527000E+1, 0.98310000E+0, 0.29979870E+3, 0.276E+3, 0.121E+3, 0.91527000E+1, 0.18627000E+1, + 0.28989590E+3, 0.276E+3, 0.122E+3, 0.91527000E+1, 0.18299000E+1, 0.28406410E+3, 0.276E+3, + 0.123E+3, 0.91527000E+1, 0.19138000E+1, 0.28079860E+3, 0.276E+3, 0.124E+3, 0.91527000E+1, + 0.18269000E+1, 0.26125710E+3, 0.276E+3, 0.125E+3, 0.91527000E+1, 0.16406000E+1, 0.24283990E+3, + 0.276E+3, 0.126E+3, 0.91527000E+1, 0.16483000E+1, 0.23180890E+3, 0.276E+3, 0.127E+3, + 0.91527000E+1, 0.17149000E+1, 0.22642260E+3, 0.276E+3, 0.128E+3, 0.91527000E+1, 0.17937000E+1, + 0.22176420E+3, 0.276E+3, 0.129E+3, 0.91527000E+1, 0.95760000E+0, 0.21139390E+3, 0.276E+3, + 0.130E+3, 0.91527000E+1, 0.19419000E+1, 0.33289310E+3, 0.276E+3, 0.131E+3, 0.91527000E+1, + 0.96010000E+0, 0.29843870E+3, 0.276E+3, 0.132E+3, 0.91527000E+1, 0.94340000E+0, 0.27181450E+3, + 0.276E+3, 0.133E+3, 0.91527000E+1, 0.98890000E+0, 0.25118530E+3, 0.276E+3, 0.134E+3, + 0.91527000E+1, 0.99010000E+0, 0.22428140E+3, 0.276E+3, 0.135E+3, 0.91527000E+1, 0.99740000E+0, + 0.35352250E+3, 0.276E+3, 0.137E+3, 0.91527000E+1, 0.97380000E+0, 0.65452330E+3, 0.276E+3, + 0.138E+3, 0.91527000E+1, 0.98010000E+0, 0.51611830E+3, 0.276E+3, 0.139E+3, 0.91527000E+1, + 0.19153000E+1, 0.39662190E+3, 0.276E+3, 0.140E+3, 0.91527000E+1, 0.19355000E+1, 0.40043580E+3, + 0.276E+3, 0.141E+3, 0.91527000E+1, 0.19545000E+1, 0.37541960E+3, 0.276E+3, 0.142E+3, + 0.91527000E+1, 0.19420000E+1, 0.41489900E+3, 0.276E+3, 0.143E+3, 0.91527000E+1, 0.16682000E+1, + 0.33125900E+3, 0.276E+3, 0.144E+3, 0.91527000E+1, 0.18584000E+1, 0.31057580E+3, 0.276E+3, + 0.145E+3, 0.91527000E+1, 0.19003000E+1, 0.28931700E+3, 0.276E+3, 0.146E+3, 0.91527000E+1, + 0.18630000E+1, 0.27942790E+3, 0.276E+3, 0.147E+3, 0.91527000E+1, 0.96790000E+0, 0.27848020E+3, + 0.276E+3, 0.148E+3, 0.91527000E+1, 0.19539000E+1, 0.42425050E+3, 0.276E+3, 0.149E+3, + 0.91527000E+1, 0.96330000E+0, 0.39014410E+3, 0.276E+3, 0.150E+3, 0.91527000E+1, 0.95140000E+0, + 0.36984470E+3, 0.276E+3, 0.151E+3, 0.91527000E+1, 0.97490000E+0, 0.35302740E+3, 0.276E+3, + 0.152E+3, 0.91527000E+1, 0.98110000E+0, 0.32600590E+3, 0.276E+3, 0.153E+3, 0.91527000E+1, + 0.99680000E+0, 0.42307320E+3, 0.276E+3, 0.155E+3, 0.91527000E+1, 0.99090000E+0, 0.84493410E+3, + 0.276E+3, 0.156E+3, 0.91527000E+1, 0.97970000E+0, 0.65199750E+3, 0.276E+3, 0.157E+3, + 0.91527000E+1, 0.19373000E+1, 0.43118430E+3, 0.276E+3, 0.159E+3, 0.91527000E+1, 0.29425000E+1, + 0.42235310E+3, 0.276E+3, 0.160E+3, 0.91527000E+1, 0.29455000E+1, 0.40935960E+3, 0.276E+3, + 0.161E+3, 0.91527000E+1, 0.29413000E+1, 0.41038090E+3, 0.276E+3, 0.162E+3, 0.91527000E+1, + 0.29300000E+1, 0.39271700E+3, 0.276E+3, 0.163E+3, 0.91527000E+1, 0.18286000E+1, 0.41244200E+3, + 0.276E+3, 0.164E+3, 0.91527000E+1, 0.28732000E+1, 0.38830810E+3, 0.276E+3, 0.165E+3, + 0.91527000E+1, 0.29086000E+1, 0.39347340E+3, 0.276E+3, 0.166E+3, 0.91527000E+1, 0.28965000E+1, + 0.36931690E+3, 0.276E+3, 0.167E+3, 0.91527000E+1, 0.29242000E+1, 0.35907870E+3, 0.276E+3, + 0.168E+3, 0.91527000E+1, 0.29282000E+1, 0.35650780E+3, 0.276E+3, 0.169E+3, 0.91527000E+1, + 0.29246000E+1, 0.37307840E+3, 0.276E+3, 0.170E+3, 0.91527000E+1, 0.28482000E+1, 0.34495150E+3, + 0.276E+3, 0.171E+3, 0.91527000E+1, 0.29219000E+1, 0.45455470E+3, 0.276E+3, 0.172E+3, + 0.91527000E+1, 0.19254000E+1, 0.42623560E+3, 0.276E+3, 0.173E+3, 0.91527000E+1, 0.19459000E+1, + 0.39310340E+3, 0.276E+3, 0.174E+3, 0.91527000E+1, 0.19292000E+1, 0.39431360E+3, 0.276E+3, + 0.175E+3, 0.91527000E+1, 0.18104000E+1, 0.35350380E+3, 0.276E+3, 0.176E+3, 0.91527000E+1, + 0.18858000E+1, 0.33405950E+3, 0.276E+3, 0.177E+3, 0.91527000E+1, 0.18648000E+1, 0.31998180E+3, + 0.276E+3, 0.178E+3, 0.91527000E+1, 0.19188000E+1, 0.30613090E+3, 0.276E+3, 0.179E+3, + 0.91527000E+1, 0.98460000E+0, 0.29806110E+3, 0.276E+3, 0.180E+3, 0.91527000E+1, 0.19896000E+1, + 0.45819840E+3, 0.276E+3, 0.181E+3, 0.91527000E+1, 0.92670000E+0, 0.42417020E+3, 0.276E+3, + 0.182E+3, 0.91527000E+1, 0.93830000E+0, 0.41489180E+3, 0.276E+3, 0.183E+3, 0.91527000E+1, + 0.98200000E+0, 0.40623070E+3, 0.276E+3, 0.184E+3, 0.91527000E+1, 0.98150000E+0, 0.38304430E+3, + 0.276E+3, 0.185E+3, 0.91527000E+1, 0.99540000E+0, 0.47684810E+3, 0.276E+3, 0.187E+3, + 0.91527000E+1, 0.97050000E+0, 0.84851510E+3, 0.276E+3, 0.188E+3, 0.91527000E+1, 0.96620000E+0, + 0.50977850E+3, 0.276E+3, 0.189E+3, 0.91527000E+1, 0.29070000E+1, 0.58092120E+3, 0.276E+3, + 0.190E+3, 0.91527000E+1, 0.28844000E+1, 0.52282120E+3, 0.276E+3, 0.191E+3, 0.91527000E+1, + 0.28738000E+1, 0.46679740E+3, 0.276E+3, 0.192E+3, 0.91527000E+1, 0.28878000E+1, 0.45036480E+3, + 0.276E+3, 0.193E+3, 0.91527000E+1, 0.29095000E+1, 0.52648950E+3, 0.276E+3, 0.194E+3, + 0.91527000E+1, 0.19209000E+1, 0.12510340E+3, 0.276E+3, 0.204E+3, 0.91527000E+1, 0.19697000E+1, + 0.12418210E+3, 0.276E+3, 0.205E+3, 0.91527000E+1, 0.19441000E+1, 0.93473800E+2, 0.276E+3, + 0.206E+3, 0.91527000E+1, 0.19985000E+1, 0.76136500E+2, 0.276E+3, 0.207E+3, 0.91527000E+1, + 0.20143000E+1, 0.53564100E+2, 0.276E+3, 0.208E+3, 0.91527000E+1, 0.19887000E+1, 0.21793200E+3, + 0.276E+3, 0.212E+3, 0.91527000E+1, 0.19496000E+1, 0.26304720E+3, 0.276E+3, 0.213E+3, + 0.91527000E+1, 0.19311000E+1, 0.25582610E+3, 0.276E+3, 0.214E+3, 0.91527000E+1, 0.19435000E+1, + 0.22587090E+3, 0.276E+3, 0.215E+3, 0.91527000E+1, 0.20102000E+1, 0.19308290E+3, 0.276E+3, + 0.216E+3, 0.91527000E+1, 0.19903000E+1, 0.30676340E+3, 0.276E+3, 0.220E+3, 0.91527000E+1, + 0.19349000E+1, 0.29784850E+3, 0.276E+3, 0.221E+3, 0.91527000E+1, 0.28999000E+1, 0.30180320E+3, + 0.276E+3, 0.222E+3, 0.91527000E+1, 0.38675000E+1, 0.27640530E+3, 0.276E+3, 0.223E+3, + 0.91527000E+1, 0.29110000E+1, 0.21249880E+3, 0.276E+3, 0.224E+3, 0.91527000E+1, 0.10619100E+2, + 0.18396380E+3, 0.276E+3, 0.225E+3, 0.91527000E+1, 0.98849000E+1, 0.18034190E+3, 0.276E+3, + 0.226E+3, 0.91527000E+1, 0.91376000E+1, 0.20743670E+3, 0.276E+3, 0.227E+3, 0.91527000E+1, + 0.29263000E+1, 0.19424620E+3, 0.276E+3, 0.228E+3, 0.91527000E+1, 0.65458000E+1, 0.26882090E+3, + 0.276E+3, 0.231E+3, 0.91527000E+1, 0.19315000E+1, 0.28515730E+3, 0.276E+3, 0.232E+3, + 0.91527000E+1, 0.19447000E+1, 0.26525130E+3, 0.276E+3, 0.233E+3, 0.91527000E+1, 0.19793000E+1, + 0.24932490E+3, 0.276E+3, 0.234E+3, 0.91527000E+1, 0.19812000E+1, 0.36858100E+3, 0.276E+3, + 0.238E+3, 0.91527000E+1, 0.19143000E+1, 0.35932890E+3, 0.276E+3, 0.239E+3, 0.91527000E+1, + 0.28903000E+1, 0.36388390E+3, 0.276E+3, 0.240E+3, 0.91527000E+1, 0.39106000E+1, 0.35200850E+3, + 0.276E+3, 0.241E+3, 0.91527000E+1, 0.29225000E+1, 0.31525780E+3, 0.276E+3, 0.242E+3, + 0.91527000E+1, 0.11055600E+2, 0.28115270E+3, 0.276E+3, 0.243E+3, 0.91527000E+1, 0.95402000E+1, + 0.26675220E+3, 0.276E+3, 0.244E+3, 0.91527000E+1, 0.88895000E+1, 0.26904190E+3, 0.276E+3, + 0.245E+3, 0.91527000E+1, 0.29696000E+1, 0.27993090E+3, 0.276E+3, 0.246E+3, 0.91527000E+1, + 0.57095000E+1, 0.34865850E+3, 0.276E+3, 0.249E+3, 0.91527000E+1, 0.19378000E+1, 0.37851600E+3, + 0.276E+3, 0.250E+3, 0.91527000E+1, 0.19505000E+1, 0.36077560E+3, 0.276E+3, 0.251E+3, + 0.91527000E+1, 0.19523000E+1, 0.35056820E+3, 0.276E+3, 0.252E+3, 0.91527000E+1, 0.19639000E+1, + 0.44786270E+3, 0.276E+3, 0.256E+3, 0.91527000E+1, 0.18467000E+1, 0.46673680E+3, 0.276E+3, + 0.257E+3, 0.91527000E+1, 0.29175000E+1, 0.35044320E+3, 0.276E+3, 0.272E+3, 0.91527000E+1, + 0.38840000E+1, 0.36470460E+3, 0.276E+3, 0.273E+3, 0.91527000E+1, 0.28988000E+1, 0.34272390E+3, + 0.276E+3, 0.274E+3, 0.91527000E+1, 0.10915300E+2, 0.31423420E+3, 0.276E+3, 0.275E+3, + 0.91527000E+1, 0.98054000E+1, 0.29783380E+3, 0.276E+3, 0.276E+3, 0.91527000E+1, 0.91527000E+1, + 0.30229400E+2, 0.277E+3, 0.100E+1, 0.29424000E+1, 0.91180000E+0, 0.20760800E+2, 0.277E+3, + 0.200E+1, 0.29424000E+1, 0.00000000E+0, 0.42636380E+3, 0.277E+3, 0.300E+1, 0.29424000E+1, + 0.00000000E+0, 0.25474750E+3, 0.277E+3, 0.400E+1, 0.29424000E+1, 0.00000000E+0, 0.17635010E+3, + 0.277E+3, 0.500E+1, 0.29424000E+1, 0.00000000E+0, 0.12210880E+3, 0.277E+3, 0.600E+1, + 0.29424000E+1, 0.00000000E+0, 0.87190700E+2, 0.277E+3, 0.700E+1, 0.29424000E+1, 0.00000000E+0, + 0.67091300E+2, 0.277E+3, 0.800E+1, 0.29424000E+1, 0.00000000E+0, 0.51585000E+2, 0.277E+3, + 0.900E+1, 0.29424000E+1, 0.00000000E+0, 0.40184600E+2, 0.277E+3, 0.100E+2, 0.29424000E+1, + 0.00000000E+0, 0.51143160E+3, 0.277E+3, 0.110E+2, 0.29424000E+1, 0.00000000E+0, 0.40339630E+3, + 0.277E+3, 0.120E+2, 0.29424000E+1, 0.00000000E+0, 0.37653390E+3, 0.277E+3, 0.130E+2, + 0.29424000E+1, 0.00000000E+0, 0.30209560E+3, 0.277E+3, 0.140E+2, 0.29424000E+1, 0.00000000E+0, + 0.23974340E+3, 0.277E+3, 0.150E+2, 0.29424000E+1, 0.00000000E+0, 0.20158550E+3, 0.277E+3, + 0.160E+2, 0.29424000E+1, 0.00000000E+0, 0.16687220E+3, 0.277E+3, 0.170E+2, 0.29424000E+1, + 0.00000000E+0, 0.13823710E+3, 0.277E+3, 0.180E+2, 0.29424000E+1, 0.00000000E+0, 0.83884470E+3, + 0.277E+3, 0.190E+2, 0.29424000E+1, 0.00000000E+0, 0.70306100E+3, 0.277E+3, 0.200E+2, + 0.29424000E+1, 0.00000000E+0, 0.58340320E+3, 0.277E+3, 0.210E+2, 0.29424000E+1, 0.00000000E+0, + 0.56663000E+3, 0.277E+3, 0.220E+2, 0.29424000E+1, 0.00000000E+0, 0.52055850E+3, 0.277E+3, + 0.230E+2, 0.29424000E+1, 0.00000000E+0, 0.41171570E+3, 0.277E+3, 0.240E+2, 0.29424000E+1, + 0.00000000E+0, 0.45035590E+3, 0.277E+3, 0.250E+2, 0.29424000E+1, 0.00000000E+0, 0.35513960E+3, + 0.277E+3, 0.260E+2, 0.29424000E+1, 0.00000000E+0, 0.37753770E+3, 0.277E+3, 0.270E+2, + 0.29424000E+1, 0.00000000E+0, 0.38750230E+3, 0.277E+3, 0.280E+2, 0.29424000E+1, 0.00000000E+0, + 0.29855250E+3, 0.277E+3, 0.290E+2, 0.29424000E+1, 0.00000000E+0, 0.30844330E+3, 0.277E+3, + 0.300E+2, 0.29424000E+1, 0.00000000E+0, 0.36354100E+3, 0.277E+3, 0.310E+2, 0.29424000E+1, + 0.00000000E+0, 0.32481010E+3, 0.277E+3, 0.320E+2, 0.29424000E+1, 0.00000000E+0, 0.28090060E+3, + 0.277E+3, 0.330E+2, 0.29424000E+1, 0.00000000E+0, 0.25453380E+3, 0.277E+3, 0.340E+2, + 0.29424000E+1, 0.00000000E+0, 0.22513410E+3, 0.277E+3, 0.350E+2, 0.29424000E+1, 0.00000000E+0, + 0.19784740E+3, 0.277E+3, 0.360E+2, 0.29424000E+1, 0.00000000E+0, 0.94312750E+3, 0.277E+3, + 0.370E+2, 0.29424000E+1, 0.00000000E+0, 0.83825760E+3, 0.277E+3, 0.380E+2, 0.29424000E+1, + 0.00000000E+0, 0.74070150E+3, 0.277E+3, 0.390E+2, 0.29424000E+1, 0.00000000E+0, 0.66984280E+3, + 0.277E+3, 0.400E+2, 0.29424000E+1, 0.00000000E+0, 0.61369150E+3, 0.277E+3, 0.410E+2, + 0.29424000E+1, 0.00000000E+0, 0.47850440E+3, 0.277E+3, 0.420E+2, 0.29424000E+1, 0.00000000E+0, + 0.53185130E+3, 0.277E+3, 0.430E+2, 0.29424000E+1, 0.00000000E+0, 0.40961050E+3, 0.277E+3, + 0.440E+2, 0.29424000E+1, 0.00000000E+0, 0.44656770E+3, 0.277E+3, 0.450E+2, 0.29424000E+1, + 0.00000000E+0, 0.41538870E+3, 0.277E+3, 0.460E+2, 0.29424000E+1, 0.00000000E+0, 0.34736190E+3, + 0.277E+3, 0.470E+2, 0.29424000E+1, 0.00000000E+0, 0.36754320E+3, 0.277E+3, 0.480E+2, + 0.29424000E+1, 0.00000000E+0, 0.45659440E+3, 0.277E+3, 0.490E+2, 0.29424000E+1, 0.00000000E+0, + 0.42612630E+3, 0.277E+3, 0.500E+2, 0.29424000E+1, 0.00000000E+0, 0.38393930E+3, 0.277E+3, + 0.510E+2, 0.29424000E+1, 0.00000000E+0, 0.35889370E+3, 0.277E+3, 0.520E+2, 0.29424000E+1, + 0.00000000E+0, 0.32731610E+3, 0.277E+3, 0.530E+2, 0.29424000E+1, 0.00000000E+0, 0.29686250E+3, + 0.277E+3, 0.540E+2, 0.29424000E+1, 0.00000000E+0, 0.11506653E+4, 0.277E+3, 0.550E+2, + 0.29424000E+1, 0.00000000E+0, 0.10673048E+4, 0.277E+3, 0.560E+2, 0.29424000E+1, 0.00000000E+0, + 0.94534330E+3, 0.277E+3, 0.570E+2, 0.29424000E+1, 0.00000000E+0, 0.45335410E+3, 0.277E+3, + 0.580E+2, 0.29424000E+1, 0.27991000E+1, 0.94886600E+3, 0.277E+3, 0.590E+2, 0.29424000E+1, + 0.00000000E+0, 0.91214940E+3, 0.277E+3, 0.600E+2, 0.29424000E+1, 0.00000000E+0, 0.88952970E+3, + 0.277E+3, 0.610E+2, 0.29424000E+1, 0.00000000E+0, 0.86867840E+3, 0.277E+3, 0.620E+2, + 0.29424000E+1, 0.00000000E+0, 0.85019490E+3, 0.277E+3, 0.630E+2, 0.29424000E+1, 0.00000000E+0, + 0.67650560E+3, 0.277E+3, 0.640E+2, 0.29424000E+1, 0.00000000E+0, 0.75286050E+3, 0.277E+3, + 0.650E+2, 0.29424000E+1, 0.00000000E+0, 0.72736460E+3, 0.277E+3, 0.660E+2, 0.29424000E+1, + 0.00000000E+0, 0.76817290E+3, 0.277E+3, 0.670E+2, 0.29424000E+1, 0.00000000E+0, 0.75193870E+3, + 0.277E+3, 0.680E+2, 0.29424000E+1, 0.00000000E+0, 0.73739820E+3, 0.277E+3, 0.690E+2, + 0.29424000E+1, 0.00000000E+0, 0.72836400E+3, 0.277E+3, 0.700E+2, 0.29424000E+1, 0.00000000E+0, + 0.61861380E+3, 0.277E+3, 0.710E+2, 0.29424000E+1, 0.00000000E+0, 0.61342840E+3, 0.277E+3, + 0.720E+2, 0.29424000E+1, 0.00000000E+0, 0.56363530E+3, 0.277E+3, 0.730E+2, 0.29424000E+1, + 0.00000000E+0, 0.47969460E+3, 0.277E+3, 0.740E+2, 0.29424000E+1, 0.00000000E+0, 0.48887240E+3, + 0.277E+3, 0.750E+2, 0.29424000E+1, 0.00000000E+0, 0.44589270E+3, 0.277E+3, 0.760E+2, + 0.29424000E+1, 0.00000000E+0, 0.41058900E+3, 0.277E+3, 0.770E+2, 0.29424000E+1, 0.00000000E+0, + 0.34385250E+3, 0.277E+3, 0.780E+2, 0.29424000E+1, 0.00000000E+0, 0.32228400E+3, 0.277E+3, + 0.790E+2, 0.29424000E+1, 0.00000000E+0, 0.33178240E+3, 0.277E+3, 0.800E+2, 0.29424000E+1, + 0.00000000E+0, 0.47174830E+3, 0.277E+3, 0.810E+2, 0.29424000E+1, 0.00000000E+0, 0.46398210E+3, + 0.277E+3, 0.820E+2, 0.29424000E+1, 0.00000000E+0, 0.43022560E+3, 0.277E+3, 0.830E+2, + 0.29424000E+1, 0.00000000E+0, 0.41274680E+3, 0.277E+3, 0.840E+2, 0.29424000E+1, 0.00000000E+0, + 0.38386920E+3, 0.277E+3, 0.850E+2, 0.29424000E+1, 0.00000000E+0, 0.35453980E+3, 0.277E+3, + 0.860E+2, 0.29424000E+1, 0.00000000E+0, 0.10936353E+4, 0.277E+3, 0.870E+2, 0.29424000E+1, + 0.00000000E+0, 0.10604655E+4, 0.277E+3, 0.880E+2, 0.29424000E+1, 0.00000000E+0, 0.94439170E+3, + 0.277E+3, 0.890E+2, 0.29424000E+1, 0.00000000E+0, 0.85775700E+3, 0.277E+3, 0.900E+2, + 0.29424000E+1, 0.00000000E+0, 0.84861880E+3, 0.277E+3, 0.910E+2, 0.29424000E+1, 0.00000000E+0, + 0.82201600E+3, 0.277E+3, 0.920E+2, 0.29424000E+1, 0.00000000E+0, 0.84127950E+3, 0.277E+3, + 0.930E+2, 0.29424000E+1, 0.00000000E+0, 0.81549360E+3, 0.277E+3, 0.940E+2, 0.29424000E+1, + 0.00000000E+0, 0.47710700E+2, 0.277E+3, 0.101E+3, 0.29424000E+1, 0.00000000E+0, 0.14877410E+3, + 0.277E+3, 0.103E+3, 0.29424000E+1, 0.98650000E+0, 0.19095480E+3, 0.277E+3, 0.104E+3, + 0.29424000E+1, 0.98080000E+0, 0.14941700E+3, 0.277E+3, 0.105E+3, 0.29424000E+1, 0.97060000E+0, + 0.11467490E+3, 0.277E+3, 0.106E+3, 0.29424000E+1, 0.98680000E+0, 0.81468600E+2, 0.277E+3, + 0.107E+3, 0.29424000E+1, 0.99440000E+0, 0.60474900E+2, 0.277E+3, 0.108E+3, 0.29424000E+1, + 0.99250000E+0, 0.42633000E+2, 0.277E+3, 0.109E+3, 0.29424000E+1, 0.99820000E+0, 0.21706070E+3, + 0.277E+3, 0.111E+3, 0.29424000E+1, 0.96840000E+0, 0.33478560E+3, 0.277E+3, 0.112E+3, + 0.29424000E+1, 0.96280000E+0, 0.34247320E+3, 0.277E+3, 0.113E+3, 0.29424000E+1, 0.96480000E+0, + 0.28013350E+3, 0.277E+3, 0.114E+3, 0.29424000E+1, 0.95070000E+0, 0.23294100E+3, 0.277E+3, + 0.115E+3, 0.29424000E+1, 0.99470000E+0, 0.19936180E+3, 0.277E+3, 0.116E+3, 0.29424000E+1, + 0.99480000E+0, 0.16514130E+3, 0.277E+3, 0.117E+3, 0.29424000E+1, 0.99720000E+0, 0.30413400E+3, + 0.277E+3, 0.119E+3, 0.29424000E+1, 0.97670000E+0, 0.56534700E+3, 0.277E+3, 0.120E+3, + 0.29424000E+1, 0.98310000E+0, 0.30720500E+3, 0.277E+3, 0.121E+3, 0.29424000E+1, 0.18627000E+1, + 0.29699590E+3, 0.277E+3, 0.122E+3, 0.29424000E+1, 0.18299000E+1, 0.29107410E+3, 0.277E+3, + 0.123E+3, 0.29424000E+1, 0.19138000E+1, 0.28800240E+3, 0.277E+3, 0.124E+3, 0.29424000E+1, + 0.18269000E+1, 0.26680930E+3, 0.277E+3, 0.125E+3, 0.29424000E+1, 0.16406000E+1, 0.24770870E+3, + 0.277E+3, 0.126E+3, 0.29424000E+1, 0.16483000E+1, 0.23646980E+3, 0.277E+3, 0.127E+3, + 0.29424000E+1, 0.17149000E+1, 0.23106240E+3, 0.277E+3, 0.128E+3, 0.29424000E+1, 0.17937000E+1, + 0.22706590E+3, 0.277E+3, 0.129E+3, 0.29424000E+1, 0.95760000E+0, 0.21517070E+3, 0.277E+3, + 0.130E+3, 0.29424000E+1, 0.19419000E+1, 0.34264070E+3, 0.277E+3, 0.131E+3, 0.29424000E+1, + 0.96010000E+0, 0.30498940E+3, 0.277E+3, 0.132E+3, 0.29424000E+1, 0.94340000E+0, 0.27641200E+3, + 0.277E+3, 0.133E+3, 0.29424000E+1, 0.98890000E+0, 0.25462020E+3, 0.277E+3, 0.134E+3, + 0.29424000E+1, 0.99010000E+0, 0.22659700E+3, 0.277E+3, 0.135E+3, 0.29424000E+1, 0.99740000E+0, + 0.36441220E+3, 0.277E+3, 0.137E+3, 0.29424000E+1, 0.97380000E+0, 0.68823470E+3, 0.277E+3, + 0.138E+3, 0.29424000E+1, 0.98010000E+0, 0.53570340E+3, 0.277E+3, 0.139E+3, 0.29424000E+1, + 0.19153000E+1, 0.40665130E+3, 0.277E+3, 0.140E+3, 0.29424000E+1, 0.19355000E+1, 0.41063670E+3, + 0.277E+3, 0.141E+3, 0.29424000E+1, 0.19545000E+1, 0.38441940E+3, 0.277E+3, 0.142E+3, + 0.29424000E+1, 0.19420000E+1, 0.42730450E+3, 0.277E+3, 0.143E+3, 0.29424000E+1, 0.16682000E+1, + 0.33787470E+3, 0.277E+3, 0.144E+3, 0.29424000E+1, 0.18584000E+1, 0.31668990E+3, 0.277E+3, + 0.145E+3, 0.29424000E+1, 0.19003000E+1, 0.29482600E+3, 0.277E+3, 0.146E+3, 0.29424000E+1, + 0.18630000E+1, 0.28494240E+3, 0.277E+3, 0.147E+3, 0.29424000E+1, 0.96790000E+0, 0.28309650E+3, + 0.277E+3, 0.148E+3, 0.29424000E+1, 0.19539000E+1, 0.43680210E+3, 0.277E+3, 0.149E+3, + 0.29424000E+1, 0.96330000E+0, 0.39922460E+3, 0.277E+3, 0.150E+3, 0.29424000E+1, 0.95140000E+0, + 0.37689830E+3, 0.277E+3, 0.151E+3, 0.29424000E+1, 0.97490000E+0, 0.35878610E+3, 0.277E+3, + 0.152E+3, 0.29424000E+1, 0.98110000E+0, 0.33031590E+3, 0.277E+3, 0.153E+3, 0.29424000E+1, + 0.99680000E+0, 0.43396820E+3, 0.277E+3, 0.155E+3, 0.29424000E+1, 0.99090000E+0, 0.89082740E+3, + 0.277E+3, 0.156E+3, 0.29424000E+1, 0.97970000E+0, 0.67744550E+3, 0.277E+3, 0.157E+3, + 0.29424000E+1, 0.19373000E+1, 0.44003130E+3, 0.277E+3, 0.159E+3, 0.29424000E+1, 0.29425000E+1, + 0.43099700E+3, 0.277E+3, 0.160E+3, 0.29424000E+1, 0.29455000E+1, 0.41762690E+3, 0.277E+3, + 0.161E+3, 0.29424000E+1, 0.29413000E+1, 0.41901960E+3, 0.277E+3, 0.162E+3, 0.29424000E+1, + 0.29300000E+1, 0.40212590E+3, 0.277E+3, 0.163E+3, 0.29424000E+1, 0.18286000E+1, 0.42122030E+3, + 0.277E+3, 0.164E+3, 0.29424000E+1, 0.28732000E+1, 0.39630640E+3, 0.277E+3, 0.165E+3, + 0.29424000E+1, 0.29086000E+1, 0.40219400E+3, 0.277E+3, 0.166E+3, 0.29424000E+1, 0.28965000E+1, + 0.37665190E+3, 0.277E+3, 0.167E+3, 0.29424000E+1, 0.29242000E+1, 0.36611320E+3, 0.277E+3, + 0.168E+3, 0.29424000E+1, 0.29282000E+1, 0.36356690E+3, 0.277E+3, 0.169E+3, 0.29424000E+1, + 0.29246000E+1, 0.38089510E+3, 0.277E+3, 0.170E+3, 0.29424000E+1, 0.28482000E+1, 0.35163250E+3, + 0.277E+3, 0.171E+3, 0.29424000E+1, 0.29219000E+1, 0.46799190E+3, 0.277E+3, 0.172E+3, + 0.29424000E+1, 0.19254000E+1, 0.43730900E+3, 0.277E+3, 0.173E+3, 0.29424000E+1, 0.19459000E+1, + 0.40191040E+3, 0.277E+3, 0.174E+3, 0.29424000E+1, 0.19292000E+1, 0.40442320E+3, 0.277E+3, + 0.175E+3, 0.29424000E+1, 0.18104000E+1, 0.35970450E+3, 0.277E+3, 0.176E+3, 0.29424000E+1, + 0.18858000E+1, 0.33957300E+3, 0.277E+3, 0.177E+3, 0.29424000E+1, 0.18648000E+1, 0.32507870E+3, + 0.277E+3, 0.178E+3, 0.29424000E+1, 0.19188000E+1, 0.31108440E+3, 0.277E+3, 0.179E+3, + 0.29424000E+1, 0.98460000E+0, 0.30206450E+3, 0.277E+3, 0.180E+3, 0.29424000E+1, 0.19896000E+1, + 0.47125110E+3, 0.277E+3, 0.181E+3, 0.29424000E+1, 0.92670000E+0, 0.43367490E+3, 0.277E+3, + 0.182E+3, 0.29424000E+1, 0.93830000E+0, 0.42287330E+3, 0.277E+3, 0.183E+3, 0.29424000E+1, + 0.98200000E+0, 0.41315870E+3, 0.277E+3, 0.184E+3, 0.29424000E+1, 0.98150000E+0, 0.38847900E+3, + 0.277E+3, 0.185E+3, 0.29424000E+1, 0.99540000E+0, 0.48893950E+3, 0.277E+3, 0.187E+3, + 0.29424000E+1, 0.97050000E+0, 0.89067630E+3, 0.277E+3, 0.188E+3, 0.29424000E+1, 0.96620000E+0, + 0.52029480E+3, 0.277E+3, 0.189E+3, 0.29424000E+1, 0.29070000E+1, 0.59599730E+3, 0.277E+3, + 0.190E+3, 0.29424000E+1, 0.28844000E+1, 0.53552370E+3, 0.277E+3, 0.191E+3, 0.29424000E+1, + 0.28738000E+1, 0.47621600E+3, 0.277E+3, 0.192E+3, 0.29424000E+1, 0.28878000E+1, 0.45907020E+3, + 0.277E+3, 0.193E+3, 0.29424000E+1, 0.29095000E+1, 0.54251670E+3, 0.277E+3, 0.194E+3, + 0.29424000E+1, 0.19209000E+1, 0.12750670E+3, 0.277E+3, 0.204E+3, 0.29424000E+1, 0.19697000E+1, + 0.12636580E+3, 0.277E+3, 0.205E+3, 0.29424000E+1, 0.19441000E+1, 0.94442200E+2, 0.277E+3, + 0.206E+3, 0.29424000E+1, 0.19985000E+1, 0.76693600E+2, 0.277E+3, 0.207E+3, 0.29424000E+1, + 0.20143000E+1, 0.53713500E+2, 0.277E+3, 0.208E+3, 0.29424000E+1, 0.19887000E+1, 0.22345060E+3, + 0.277E+3, 0.212E+3, 0.29424000E+1, 0.19496000E+1, 0.26992960E+3, 0.277E+3, 0.213E+3, + 0.29424000E+1, 0.19311000E+1, 0.26131790E+3, 0.277E+3, 0.214E+3, 0.29424000E+1, 0.19435000E+1, + 0.22965740E+3, 0.277E+3, 0.215E+3, 0.29424000E+1, 0.20102000E+1, 0.19542290E+3, 0.277E+3, + 0.216E+3, 0.29424000E+1, 0.19903000E+1, 0.31465860E+3, 0.277E+3, 0.220E+3, 0.29424000E+1, + 0.19349000E+1, 0.30440560E+3, 0.277E+3, 0.221E+3, 0.29424000E+1, 0.28999000E+1, 0.30837100E+3, + 0.277E+3, 0.222E+3, 0.29424000E+1, 0.38675000E+1, 0.28252780E+3, 0.277E+3, 0.223E+3, + 0.29424000E+1, 0.29110000E+1, 0.21607310E+3, 0.277E+3, 0.224E+3, 0.29424000E+1, 0.10619100E+2, + 0.18647130E+3, 0.277E+3, 0.225E+3, 0.29424000E+1, 0.98849000E+1, 0.18288010E+3, 0.277E+3, + 0.226E+3, 0.29424000E+1, 0.91376000E+1, 0.21145410E+3, 0.277E+3, 0.227E+3, 0.29424000E+1, + 0.29263000E+1, 0.19770250E+3, 0.277E+3, 0.228E+3, 0.29424000E+1, 0.65458000E+1, 0.27493230E+3, + 0.277E+3, 0.231E+3, 0.29424000E+1, 0.19315000E+1, 0.29109370E+3, 0.277E+3, 0.232E+3, + 0.29424000E+1, 0.19447000E+1, 0.26957470E+3, 0.277E+3, 0.233E+3, 0.29424000E+1, 0.19793000E+1, + 0.25271240E+3, 0.277E+3, 0.234E+3, 0.29424000E+1, 0.19812000E+1, 0.37790170E+3, 0.277E+3, + 0.238E+3, 0.29424000E+1, 0.19143000E+1, 0.36667450E+3, 0.277E+3, 0.239E+3, 0.29424000E+1, + 0.28903000E+1, 0.37083430E+3, 0.277E+3, 0.240E+3, 0.29424000E+1, 0.39106000E+1, 0.35892720E+3, + 0.277E+3, 0.241E+3, 0.29424000E+1, 0.29225000E+1, 0.32031090E+3, 0.277E+3, 0.242E+3, + 0.29424000E+1, 0.11055600E+2, 0.28489430E+3, 0.277E+3, 0.243E+3, 0.29424000E+1, 0.95402000E+1, + 0.27005380E+3, 0.277E+3, 0.244E+3, 0.29424000E+1, 0.88895000E+1, 0.27328420E+3, 0.277E+3, + 0.245E+3, 0.29424000E+1, 0.29696000E+1, 0.28460940E+3, 0.277E+3, 0.246E+3, 0.29424000E+1, + 0.57095000E+1, 0.35643230E+3, 0.277E+3, 0.249E+3, 0.29424000E+1, 0.19378000E+1, 0.38687350E+3, + 0.277E+3, 0.250E+3, 0.29424000E+1, 0.19505000E+1, 0.36731080E+3, 0.277E+3, 0.251E+3, + 0.29424000E+1, 0.19523000E+1, 0.35616120E+3, 0.277E+3, 0.252E+3, 0.29424000E+1, 0.19639000E+1, + 0.45858100E+3, 0.277E+3, 0.256E+3, 0.29424000E+1, 0.18467000E+1, 0.47669270E+3, 0.277E+3, + 0.257E+3, 0.29424000E+1, 0.29175000E+1, 0.35651190E+3, 0.277E+3, 0.272E+3, 0.29424000E+1, + 0.38840000E+1, 0.37170810E+3, 0.277E+3, 0.273E+3, 0.29424000E+1, 0.28988000E+1, 0.34812240E+3, + 0.277E+3, 0.274E+3, 0.29424000E+1, 0.10915300E+2, 0.31841110E+3, 0.277E+3, 0.275E+3, + 0.29424000E+1, 0.98054000E+1, 0.30121160E+3, 0.277E+3, 0.276E+3, 0.29424000E+1, 0.91527000E+1, + 0.30552580E+3, 0.277E+3, 0.277E+3, 0.29424000E+1, 0.29424000E+1, 0.31736800E+2, 0.278E+3, + 0.100E+1, 0.66669000E+1, 0.91180000E+0, 0.21706400E+2, 0.278E+3, 0.200E+1, 0.66669000E+1, + 0.00000000E+0, 0.44817370E+3, 0.278E+3, 0.300E+1, 0.66669000E+1, 0.00000000E+0, 0.26864910E+3, + 0.278E+3, 0.400E+1, 0.66669000E+1, 0.00000000E+0, 0.18571950E+3, 0.278E+3, 0.500E+1, + 0.66669000E+1, 0.00000000E+0, 0.12832810E+3, 0.278E+3, 0.600E+1, 0.66669000E+1, 0.00000000E+0, + 0.91444100E+2, 0.278E+3, 0.700E+1, 0.66669000E+1, 0.00000000E+0, 0.70247200E+2, 0.278E+3, + 0.800E+1, 0.66669000E+1, 0.00000000E+0, 0.53929300E+2, 0.278E+3, 0.900E+1, 0.66669000E+1, + 0.00000000E+0, 0.41957400E+2, 0.278E+3, 0.100E+2, 0.66669000E+1, 0.00000000E+0, 0.53764280E+3, + 0.278E+3, 0.110E+2, 0.66669000E+1, 0.00000000E+0, 0.42531660E+3, 0.278E+3, 0.120E+2, + 0.66669000E+1, 0.00000000E+0, 0.39691230E+3, 0.278E+3, 0.130E+2, 0.66669000E+1, 0.00000000E+0, + 0.31822850E+3, 0.278E+3, 0.140E+2, 0.66669000E+1, 0.00000000E+0, 0.25221940E+3, 0.278E+3, + 0.150E+2, 0.66669000E+1, 0.00000000E+0, 0.21181210E+3, 0.278E+3, 0.160E+2, 0.66669000E+1, + 0.00000000E+0, 0.17510170E+3, 0.278E+3, 0.170E+2, 0.66669000E+1, 0.00000000E+0, 0.14486250E+3, + 0.278E+3, 0.180E+2, 0.66669000E+1, 0.00000000E+0, 0.87976340E+3, 0.278E+3, 0.190E+2, + 0.66669000E+1, 0.00000000E+0, 0.74019810E+3, 0.278E+3, 0.200E+2, 0.66669000E+1, 0.00000000E+0, + 0.61451280E+3, 0.278E+3, 0.210E+2, 0.66669000E+1, 0.00000000E+0, 0.59680090E+3, 0.278E+3, + 0.220E+2, 0.66669000E+1, 0.00000000E+0, 0.54828530E+3, 0.278E+3, 0.230E+2, 0.66669000E+1, + 0.00000000E+0, 0.43331070E+3, 0.278E+3, 0.240E+2, 0.66669000E+1, 0.00000000E+0, 0.47433180E+3, + 0.278E+3, 0.250E+2, 0.66669000E+1, 0.00000000E+0, 0.37375740E+3, 0.278E+3, 0.260E+2, + 0.66669000E+1, 0.00000000E+0, 0.39765430E+3, 0.278E+3, 0.270E+2, 0.66669000E+1, 0.00000000E+0, + 0.40819710E+3, 0.278E+3, 0.280E+2, 0.66669000E+1, 0.00000000E+0, 0.31418780E+3, 0.278E+3, + 0.290E+2, 0.66669000E+1, 0.00000000E+0, 0.32482660E+3, 0.278E+3, 0.300E+2, 0.66669000E+1, + 0.00000000E+0, 0.38293500E+3, 0.278E+3, 0.310E+2, 0.66669000E+1, 0.00000000E+0, 0.34202100E+3, + 0.278E+3, 0.320E+2, 0.66669000E+1, 0.00000000E+0, 0.29551180E+3, 0.278E+3, 0.330E+2, + 0.66669000E+1, 0.00000000E+0, 0.26753780E+3, 0.278E+3, 0.340E+2, 0.66669000E+1, 0.00000000E+0, + 0.23639130E+3, 0.278E+3, 0.350E+2, 0.66669000E+1, 0.00000000E+0, 0.20751570E+3, 0.278E+3, + 0.360E+2, 0.66669000E+1, 0.00000000E+0, 0.98897460E+3, 0.278E+3, 0.370E+2, 0.66669000E+1, + 0.00000000E+0, 0.88212520E+3, 0.278E+3, 0.380E+2, 0.66669000E+1, 0.00000000E+0, 0.77987150E+3, + 0.278E+3, 0.390E+2, 0.66669000E+1, 0.00000000E+0, 0.70532520E+3, 0.278E+3, 0.400E+2, + 0.66669000E+1, 0.00000000E+0, 0.64612000E+3, 0.278E+3, 0.410E+2, 0.66669000E+1, 0.00000000E+0, + 0.50347710E+3, 0.278E+3, 0.420E+2, 0.66669000E+1, 0.00000000E+0, 0.55975880E+3, 0.278E+3, + 0.430E+2, 0.66669000E+1, 0.00000000E+0, 0.43081480E+3, 0.278E+3, 0.440E+2, 0.66669000E+1, + 0.00000000E+0, 0.46996810E+3, 0.278E+3, 0.450E+2, 0.66669000E+1, 0.00000000E+0, 0.43711170E+3, + 0.278E+3, 0.460E+2, 0.66669000E+1, 0.00000000E+0, 0.36518920E+3, 0.278E+3, 0.470E+2, + 0.66669000E+1, 0.00000000E+0, 0.38669930E+3, 0.278E+3, 0.480E+2, 0.66669000E+1, 0.00000000E+0, + 0.48058480E+3, 0.278E+3, 0.490E+2, 0.66669000E+1, 0.00000000E+0, 0.44855300E+3, 0.278E+3, + 0.500E+2, 0.66669000E+1, 0.00000000E+0, 0.40393700E+3, 0.278E+3, 0.510E+2, 0.66669000E+1, + 0.00000000E+0, 0.37737610E+3, 0.278E+3, 0.520E+2, 0.66669000E+1, 0.00000000E+0, 0.34391650E+3, + 0.278E+3, 0.530E+2, 0.66669000E+1, 0.00000000E+0, 0.31165760E+3, 0.278E+3, 0.540E+2, + 0.66669000E+1, 0.00000000E+0, 0.12060907E+4, 0.278E+3, 0.550E+2, 0.66669000E+1, 0.00000000E+0, + 0.11224006E+4, 0.278E+3, 0.560E+2, 0.66669000E+1, 0.00000000E+0, 0.99484110E+3, 0.278E+3, + 0.570E+2, 0.66669000E+1, 0.00000000E+0, 0.47685250E+3, 0.278E+3, 0.580E+2, 0.66669000E+1, + 0.27991000E+1, 0.99799760E+3, 0.278E+3, 0.590E+2, 0.66669000E+1, 0.00000000E+0, 0.95958830E+3, + 0.278E+3, 0.600E+2, 0.66669000E+1, 0.00000000E+0, 0.93585100E+3, 0.278E+3, 0.610E+2, + 0.66669000E+1, 0.00000000E+0, 0.91396730E+3, 0.278E+3, 0.620E+2, 0.66669000E+1, 0.00000000E+0, + 0.89457000E+3, 0.278E+3, 0.630E+2, 0.66669000E+1, 0.00000000E+0, 0.71180730E+3, 0.278E+3, + 0.640E+2, 0.66669000E+1, 0.00000000E+0, 0.79087860E+3, 0.278E+3, 0.650E+2, 0.66669000E+1, + 0.00000000E+0, 0.76413790E+3, 0.278E+3, 0.660E+2, 0.66669000E+1, 0.00000000E+0, 0.80848440E+3, + 0.278E+3, 0.670E+2, 0.66669000E+1, 0.00000000E+0, 0.79144150E+3, 0.278E+3, 0.680E+2, + 0.66669000E+1, 0.00000000E+0, 0.77617700E+3, 0.278E+3, 0.690E+2, 0.66669000E+1, 0.00000000E+0, + 0.76668210E+3, 0.278E+3, 0.700E+2, 0.66669000E+1, 0.00000000E+0, 0.65113390E+3, 0.278E+3, + 0.710E+2, 0.66669000E+1, 0.00000000E+0, 0.64597680E+3, 0.278E+3, 0.720E+2, 0.66669000E+1, + 0.00000000E+0, 0.59345200E+3, 0.278E+3, 0.730E+2, 0.66669000E+1, 0.00000000E+0, 0.50469500E+3, + 0.278E+3, 0.740E+2, 0.66669000E+1, 0.00000000E+0, 0.51441860E+3, 0.278E+3, 0.750E+2, + 0.66669000E+1, 0.00000000E+0, 0.46906170E+3, 0.278E+3, 0.760E+2, 0.66669000E+1, 0.00000000E+0, + 0.43179110E+3, 0.278E+3, 0.770E+2, 0.66669000E+1, 0.00000000E+0, 0.36131080E+3, 0.278E+3, + 0.780E+2, 0.66669000E+1, 0.00000000E+0, 0.33854780E+3, 0.278E+3, 0.790E+2, 0.66669000E+1, + 0.00000000E+0, 0.34860350E+3, 0.278E+3, 0.800E+2, 0.66669000E+1, 0.00000000E+0, 0.49610630E+3, + 0.278E+3, 0.810E+2, 0.66669000E+1, 0.00000000E+0, 0.48812730E+3, 0.278E+3, 0.820E+2, + 0.66669000E+1, 0.00000000E+0, 0.45249450E+3, 0.278E+3, 0.830E+2, 0.66669000E+1, 0.00000000E+0, + 0.43395750E+3, 0.278E+3, 0.840E+2, 0.66669000E+1, 0.00000000E+0, 0.40335980E+3, 0.278E+3, + 0.850E+2, 0.66669000E+1, 0.00000000E+0, 0.37228610E+3, 0.278E+3, 0.860E+2, 0.66669000E+1, + 0.00000000E+0, 0.11471809E+4, 0.278E+3, 0.870E+2, 0.66669000E+1, 0.00000000E+0, 0.11154572E+4, + 0.278E+3, 0.880E+2, 0.66669000E+1, 0.00000000E+0, 0.99404090E+3, 0.278E+3, 0.890E+2, + 0.66669000E+1, 0.00000000E+0, 0.90293930E+3, 0.278E+3, 0.900E+2, 0.66669000E+1, 0.00000000E+0, + 0.89295040E+3, 0.278E+3, 0.910E+2, 0.66669000E+1, 0.00000000E+0, 0.86495490E+3, 0.278E+3, + 0.920E+2, 0.66669000E+1, 0.00000000E+0, 0.88511780E+3, 0.278E+3, 0.930E+2, 0.66669000E+1, + 0.00000000E+0, 0.85805490E+3, 0.278E+3, 0.940E+2, 0.66669000E+1, 0.00000000E+0, 0.50189900E+2, + 0.278E+3, 0.101E+3, 0.66669000E+1, 0.00000000E+0, 0.15683270E+3, 0.278E+3, 0.103E+3, + 0.66669000E+1, 0.98650000E+0, 0.20116870E+3, 0.278E+3, 0.104E+3, 0.66669000E+1, 0.98080000E+0, + 0.15724660E+3, 0.278E+3, 0.105E+3, 0.66669000E+1, 0.97060000E+0, 0.12047330E+3, 0.278E+3, + 0.106E+3, 0.66669000E+1, 0.98680000E+0, 0.85411300E+2, 0.278E+3, 0.107E+3, 0.66669000E+1, + 0.99440000E+0, 0.63280300E+2, 0.278E+3, 0.108E+3, 0.66669000E+1, 0.99250000E+0, 0.44500400E+2, + 0.278E+3, 0.109E+3, 0.66669000E+1, 0.99820000E+0, 0.22873580E+3, 0.278E+3, 0.111E+3, + 0.66669000E+1, 0.96840000E+0, 0.35278900E+3, 0.278E+3, 0.112E+3, 0.66669000E+1, 0.96280000E+0, + 0.36093540E+3, 0.278E+3, 0.113E+3, 0.66669000E+1, 0.96480000E+0, 0.29500710E+3, 0.278E+3, + 0.114E+3, 0.66669000E+1, 0.95070000E+0, 0.24503090E+3, 0.278E+3, 0.115E+3, 0.66669000E+1, + 0.99470000E+0, 0.20947030E+3, 0.278E+3, 0.116E+3, 0.66669000E+1, 0.99480000E+0, 0.17328290E+3, + 0.278E+3, 0.117E+3, 0.66669000E+1, 0.99720000E+0, 0.31991700E+3, 0.278E+3, 0.119E+3, + 0.66669000E+1, 0.97670000E+0, 0.59442400E+3, 0.278E+3, 0.120E+3, 0.66669000E+1, 0.98310000E+0, + 0.32334130E+3, 0.278E+3, 0.121E+3, 0.66669000E+1, 0.18627000E+1, 0.31251320E+3, 0.278E+3, + 0.122E+3, 0.66669000E+1, 0.18299000E+1, 0.30627330E+3, 0.278E+3, 0.123E+3, 0.66669000E+1, + 0.19138000E+1, 0.30303740E+3, 0.278E+3, 0.124E+3, 0.66669000E+1, 0.18269000E+1, 0.28075180E+3, + 0.278E+3, 0.125E+3, 0.66669000E+1, 0.16406000E+1, 0.26058650E+3, 0.278E+3, 0.126E+3, + 0.66669000E+1, 0.16483000E+1, 0.24872640E+3, 0.278E+3, 0.127E+3, 0.66669000E+1, 0.17149000E+1, + 0.24304070E+3, 0.278E+3, 0.128E+3, 0.66669000E+1, 0.17937000E+1, 0.23886500E+3, 0.278E+3, + 0.129E+3, 0.66669000E+1, 0.95760000E+0, 0.22630430E+3, 0.278E+3, 0.130E+3, 0.66669000E+1, + 0.19419000E+1, 0.36087970E+3, 0.278E+3, 0.131E+3, 0.66669000E+1, 0.96010000E+0, 0.32106640E+3, + 0.278E+3, 0.132E+3, 0.66669000E+1, 0.94340000E+0, 0.29076020E+3, 0.278E+3, 0.133E+3, + 0.66669000E+1, 0.98890000E+0, 0.26762610E+3, 0.278E+3, 0.134E+3, 0.66669000E+1, 0.99010000E+0, + 0.23793600E+3, 0.278E+3, 0.135E+3, 0.66669000E+1, 0.99740000E+0, 0.38318340E+3, 0.278E+3, + 0.137E+3, 0.66669000E+1, 0.97380000E+0, 0.72324770E+3, 0.278E+3, 0.138E+3, 0.66669000E+1, + 0.98010000E+0, 0.56337460E+3, 0.278E+3, 0.139E+3, 0.66669000E+1, 0.19153000E+1, 0.42778570E+3, + 0.278E+3, 0.140E+3, 0.66669000E+1, 0.19355000E+1, 0.43199420E+3, 0.278E+3, 0.141E+3, + 0.66669000E+1, 0.19545000E+1, 0.40427790E+3, 0.278E+3, 0.142E+3, 0.66669000E+1, 0.19420000E+1, + 0.44929790E+3, 0.278E+3, 0.143E+3, 0.66669000E+1, 0.16682000E+1, 0.35522280E+3, 0.278E+3, + 0.144E+3, 0.66669000E+1, 0.18584000E+1, 0.33286530E+3, 0.278E+3, 0.145E+3, 0.66669000E+1, + 0.19003000E+1, 0.30980620E+3, 0.278E+3, 0.146E+3, 0.66669000E+1, 0.18630000E+1, 0.29943630E+3, + 0.278E+3, 0.147E+3, 0.66669000E+1, 0.96790000E+0, 0.29752810E+3, 0.278E+3, 0.148E+3, + 0.66669000E+1, 0.19539000E+1, 0.45973620E+3, 0.278E+3, 0.149E+3, 0.66669000E+1, 0.96330000E+0, + 0.42013030E+3, 0.278E+3, 0.150E+3, 0.66669000E+1, 0.95140000E+0, 0.39648380E+3, 0.278E+3, + 0.151E+3, 0.66669000E+1, 0.97490000E+0, 0.37725130E+3, 0.278E+3, 0.152E+3, 0.66669000E+1, + 0.98110000E+0, 0.34707680E+3, 0.278E+3, 0.153E+3, 0.66669000E+1, 0.99680000E+0, 0.45631660E+3, + 0.278E+3, 0.155E+3, 0.66669000E+1, 0.99090000E+0, 0.93534640E+3, 0.278E+3, 0.156E+3, + 0.66669000E+1, 0.97970000E+0, 0.71222580E+3, 0.278E+3, 0.157E+3, 0.66669000E+1, 0.19373000E+1, + 0.46281270E+3, 0.278E+3, 0.159E+3, 0.66669000E+1, 0.29425000E+1, 0.45330770E+3, 0.278E+3, + 0.160E+3, 0.66669000E+1, 0.29455000E+1, 0.43922170E+3, 0.278E+3, 0.161E+3, 0.66669000E+1, + 0.29413000E+1, 0.44070090E+3, 0.278E+3, 0.162E+3, 0.66669000E+1, 0.29300000E+1, 0.42296520E+3, + 0.278E+3, 0.163E+3, 0.66669000E+1, 0.18286000E+1, 0.44307970E+3, 0.278E+3, 0.164E+3, + 0.66669000E+1, 0.28732000E+1, 0.41683270E+3, 0.278E+3, 0.165E+3, 0.66669000E+1, 0.29086000E+1, + 0.42302650E+3, 0.278E+3, 0.166E+3, 0.66669000E+1, 0.28965000E+1, 0.39614680E+3, 0.278E+3, + 0.167E+3, 0.66669000E+1, 0.29242000E+1, 0.38505430E+3, 0.278E+3, 0.168E+3, 0.66669000E+1, + 0.29282000E+1, 0.38239220E+3, 0.278E+3, 0.169E+3, 0.66669000E+1, 0.29246000E+1, 0.40073810E+3, + 0.278E+3, 0.170E+3, 0.66669000E+1, 0.28482000E+1, 0.36983970E+3, 0.278E+3, 0.171E+3, + 0.66669000E+1, 0.29219000E+1, 0.49231890E+3, 0.278E+3, 0.172E+3, 0.66669000E+1, 0.19254000E+1, + 0.45993990E+3, 0.278E+3, 0.173E+3, 0.66669000E+1, 0.19459000E+1, 0.42259020E+3, 0.278E+3, + 0.174E+3, 0.66669000E+1, 0.19292000E+1, 0.42529100E+3, 0.278E+3, 0.175E+3, 0.66669000E+1, + 0.18104000E+1, 0.37803640E+3, 0.278E+3, 0.176E+3, 0.66669000E+1, 0.18858000E+1, 0.35676720E+3, + 0.278E+3, 0.177E+3, 0.66669000E+1, 0.18648000E+1, 0.34146440E+3, 0.278E+3, 0.178E+3, + 0.66669000E+1, 0.19188000E+1, 0.32670140E+3, 0.278E+3, 0.179E+3, 0.66669000E+1, 0.98460000E+0, + 0.31719220E+3, 0.278E+3, 0.180E+3, 0.66669000E+1, 0.19896000E+1, 0.49566950E+3, 0.278E+3, + 0.181E+3, 0.66669000E+1, 0.92670000E+0, 0.45614500E+3, 0.278E+3, 0.182E+3, 0.66669000E+1, + 0.93830000E+0, 0.44471840E+3, 0.278E+3, 0.183E+3, 0.66669000E+1, 0.98200000E+0, 0.43437700E+3, + 0.278E+3, 0.184E+3, 0.66669000E+1, 0.98150000E+0, 0.40821270E+3, 0.278E+3, 0.185E+3, + 0.66669000E+1, 0.99540000E+0, 0.51413610E+3, 0.278E+3, 0.187E+3, 0.66669000E+1, 0.97050000E+0, + 0.93570360E+3, 0.278E+3, 0.188E+3, 0.66669000E+1, 0.96620000E+0, 0.54728610E+3, 0.278E+3, + 0.189E+3, 0.66669000E+1, 0.29070000E+1, 0.62674370E+3, 0.278E+3, 0.190E+3, 0.66669000E+1, + 0.28844000E+1, 0.56283810E+3, 0.278E+3, 0.191E+3, 0.66669000E+1, 0.28738000E+1, 0.50066010E+3, + 0.278E+3, 0.192E+3, 0.66669000E+1, 0.28878000E+1, 0.48260870E+3, 0.278E+3, 0.193E+3, + 0.66669000E+1, 0.29095000E+1, 0.57030020E+3, 0.278E+3, 0.194E+3, 0.66669000E+1, 0.19209000E+1, + 0.13424720E+3, 0.278E+3, 0.204E+3, 0.66669000E+1, 0.19697000E+1, 0.13288680E+3, 0.278E+3, + 0.205E+3, 0.66669000E+1, 0.19441000E+1, 0.99142600E+2, 0.278E+3, 0.206E+3, 0.66669000E+1, + 0.19985000E+1, 0.80387800E+2, 0.278E+3, 0.207E+3, 0.66669000E+1, 0.20143000E+1, 0.56164700E+2, + 0.278E+3, 0.208E+3, 0.66669000E+1, 0.19887000E+1, 0.23546090E+3, 0.278E+3, 0.212E+3, + 0.66669000E+1, 0.19496000E+1, 0.28433280E+3, 0.278E+3, 0.213E+3, 0.66669000E+1, 0.19311000E+1, + 0.27514210E+3, 0.278E+3, 0.214E+3, 0.66669000E+1, 0.19435000E+1, 0.24157090E+3, 0.278E+3, + 0.215E+3, 0.66669000E+1, 0.20102000E+1, 0.20531920E+3, 0.278E+3, 0.216E+3, 0.66669000E+1, + 0.19903000E+1, 0.33124320E+3, 0.278E+3, 0.220E+3, 0.66669000E+1, 0.19349000E+1, 0.32036790E+3, + 0.278E+3, 0.221E+3, 0.66669000E+1, 0.28999000E+1, 0.32452330E+3, 0.278E+3, 0.222E+3, + 0.66669000E+1, 0.38675000E+1, 0.29723410E+3, 0.278E+3, 0.223E+3, 0.66669000E+1, 0.29110000E+1, + 0.22702370E+3, 0.278E+3, 0.224E+3, 0.66669000E+1, 0.10619100E+2, 0.19579190E+3, 0.278E+3, + 0.225E+3, 0.66669000E+1, 0.98849000E+1, 0.19203650E+3, 0.278E+3, 0.226E+3, 0.66669000E+1, + 0.91376000E+1, 0.22228680E+3, 0.278E+3, 0.227E+3, 0.66669000E+1, 0.29263000E+1, 0.20779350E+3, + 0.278E+3, 0.228E+3, 0.66669000E+1, 0.65458000E+1, 0.28939310E+3, 0.278E+3, 0.231E+3, + 0.66669000E+1, 0.19315000E+1, 0.30638780E+3, 0.278E+3, 0.232E+3, 0.66669000E+1, 0.19447000E+1, + 0.28353080E+3, 0.278E+3, 0.233E+3, 0.66669000E+1, 0.19793000E+1, 0.26560990E+3, 0.278E+3, + 0.234E+3, 0.66669000E+1, 0.19812000E+1, 0.39765110E+3, 0.278E+3, 0.238E+3, 0.66669000E+1, + 0.19143000E+1, 0.38577200E+3, 0.278E+3, 0.239E+3, 0.66669000E+1, 0.28903000E+1, 0.39008630E+3, + 0.278E+3, 0.240E+3, 0.66669000E+1, 0.39106000E+1, 0.37742800E+3, 0.278E+3, 0.241E+3, + 0.66669000E+1, 0.29225000E+1, 0.33658580E+3, 0.278E+3, 0.242E+3, 0.66669000E+1, 0.11055600E+2, + 0.29917850E+3, 0.278E+3, 0.243E+3, 0.66669000E+1, 0.95402000E+1, 0.28351650E+3, 0.278E+3, + 0.244E+3, 0.66669000E+1, 0.88895000E+1, 0.28700770E+3, 0.278E+3, 0.245E+3, 0.66669000E+1, + 0.29696000E+1, 0.29901090E+3, 0.278E+3, 0.246E+3, 0.66669000E+1, 0.57095000E+1, 0.37493950E+3, + 0.278E+3, 0.249E+3, 0.66669000E+1, 0.19378000E+1, 0.40708260E+3, 0.278E+3, 0.250E+3, + 0.66669000E+1, 0.19505000E+1, 0.38634370E+3, 0.278E+3, 0.251E+3, 0.66669000E+1, 0.19523000E+1, + 0.37446930E+3, 0.278E+3, 0.252E+3, 0.66669000E+1, 0.19639000E+1, 0.48236480E+3, 0.278E+3, + 0.256E+3, 0.66669000E+1, 0.18467000E+1, 0.50153880E+3, 0.278E+3, 0.257E+3, 0.66669000E+1, + 0.29175000E+1, 0.37491100E+3, 0.278E+3, 0.272E+3, 0.66669000E+1, 0.38840000E+1, 0.39079260E+3, + 0.278E+3, 0.273E+3, 0.66669000E+1, 0.28988000E+1, 0.36580820E+3, 0.278E+3, 0.274E+3, + 0.66669000E+1, 0.10915300E+2, 0.33438680E+3, 0.278E+3, 0.275E+3, 0.66669000E+1, 0.98054000E+1, + 0.31617560E+3, 0.278E+3, 0.276E+3, 0.66669000E+1, 0.91527000E+1, 0.32076260E+3, 0.278E+3, + 0.277E+3, 0.66669000E+1, 0.29424000E+1, 0.33687270E+3, 0.278E+3, 0.278E+3, 0.66669000E+1, + 0.66669000E+1, 0.37640700E+2, 0.281E+3, 0.100E+1, 0.19302000E+1, 0.91180000E+0, 0.25087500E+2, + 0.281E+3, 0.200E+1, 0.19302000E+1, 0.00000000E+0, 0.58487960E+3, 0.281E+3, 0.300E+1, + 0.19302000E+1, 0.00000000E+0, 0.33672920E+3, 0.281E+3, 0.400E+1, 0.19302000E+1, 0.00000000E+0, + 0.22693930E+3, 0.281E+3, 0.500E+1, 0.19302000E+1, 0.00000000E+0, 0.15370200E+3, 0.281E+3, + 0.600E+1, 0.19302000E+1, 0.00000000E+0, 0.10786020E+3, 0.281E+3, 0.700E+1, 0.19302000E+1, + 0.00000000E+0, 0.81954700E+2, 0.281E+3, 0.800E+1, 0.19302000E+1, 0.00000000E+0, 0.62331700E+2, + 0.281E+3, 0.900E+1, 0.19302000E+1, 0.00000000E+0, 0.48136800E+2, 0.281E+3, 0.100E+2, + 0.19302000E+1, 0.00000000E+0, 0.69957010E+3, 0.281E+3, 0.110E+2, 0.19302000E+1, 0.00000000E+0, + 0.53690060E+3, 0.281E+3, 0.120E+2, 0.19302000E+1, 0.00000000E+0, 0.49477230E+3, 0.281E+3, + 0.130E+2, 0.19302000E+1, 0.00000000E+0, 0.38992290E+3, 0.281E+3, 0.140E+2, 0.19302000E+1, + 0.00000000E+0, 0.30437830E+3, 0.281E+3, 0.150E+2, 0.19302000E+1, 0.00000000E+0, 0.25298030E+3, + 0.281E+3, 0.160E+2, 0.19302000E+1, 0.00000000E+0, 0.20704280E+3, 0.281E+3, 0.170E+2, + 0.19302000E+1, 0.00000000E+0, 0.16977090E+3, 0.281E+3, 0.180E+2, 0.19302000E+1, 0.00000000E+0, + 0.11488307E+4, 0.281E+3, 0.190E+2, 0.19302000E+1, 0.00000000E+0, 0.94494750E+3, 0.281E+3, + 0.200E+2, 0.19302000E+1, 0.00000000E+0, 0.78031190E+3, 0.281E+3, 0.210E+2, 0.19302000E+1, + 0.00000000E+0, 0.75356620E+3, 0.281E+3, 0.220E+2, 0.19302000E+1, 0.00000000E+0, 0.69006660E+3, + 0.281E+3, 0.230E+2, 0.19302000E+1, 0.00000000E+0, 0.54417950E+3, 0.281E+3, 0.240E+2, + 0.19302000E+1, 0.00000000E+0, 0.59417250E+3, 0.281E+3, 0.250E+2, 0.19302000E+1, 0.00000000E+0, + 0.46687620E+3, 0.281E+3, 0.260E+2, 0.19302000E+1, 0.00000000E+0, 0.49428940E+3, 0.281E+3, + 0.270E+2, 0.19302000E+1, 0.00000000E+0, 0.50915080E+3, 0.281E+3, 0.280E+2, 0.19302000E+1, + 0.00000000E+0, 0.39094350E+3, 0.281E+3, 0.290E+2, 0.19302000E+1, 0.00000000E+0, 0.40086460E+3, + 0.281E+3, 0.300E+2, 0.19302000E+1, 0.00000000E+0, 0.47436550E+3, 0.281E+3, 0.310E+2, + 0.19302000E+1, 0.00000000E+0, 0.41828000E+3, 0.281E+3, 0.320E+2, 0.19302000E+1, 0.00000000E+0, + 0.35698080E+3, 0.281E+3, 0.330E+2, 0.19302000E+1, 0.00000000E+0, 0.32059210E+3, 0.281E+3, + 0.340E+2, 0.19302000E+1, 0.00000000E+0, 0.28090020E+3, 0.281E+3, 0.350E+2, 0.19302000E+1, + 0.00000000E+0, 0.24465900E+3, 0.281E+3, 0.360E+2, 0.19302000E+1, 0.00000000E+0, 0.12877826E+4, + 0.281E+3, 0.370E+2, 0.19302000E+1, 0.00000000E+0, 0.11263391E+4, 0.281E+3, 0.380E+2, + 0.19302000E+1, 0.00000000E+0, 0.98598710E+3, 0.281E+3, 0.390E+2, 0.19302000E+1, 0.00000000E+0, + 0.88600180E+3, 0.281E+3, 0.400E+2, 0.19302000E+1, 0.00000000E+0, 0.80798210E+3, 0.281E+3, + 0.410E+2, 0.19302000E+1, 0.00000000E+0, 0.62423380E+3, 0.281E+3, 0.420E+2, 0.19302000E+1, + 0.00000000E+0, 0.69629870E+3, 0.281E+3, 0.430E+2, 0.19302000E+1, 0.00000000E+0, 0.53092790E+3, + 0.281E+3, 0.440E+2, 0.19302000E+1, 0.00000000E+0, 0.57990290E+3, 0.281E+3, 0.450E+2, + 0.19302000E+1, 0.00000000E+0, 0.53785540E+3, 0.281E+3, 0.460E+2, 0.19302000E+1, 0.00000000E+0, + 0.44915460E+3, 0.281E+3, 0.470E+2, 0.19302000E+1, 0.00000000E+0, 0.47410150E+3, 0.281E+3, + 0.480E+2, 0.19302000E+1, 0.00000000E+0, 0.59460280E+3, 0.281E+3, 0.490E+2, 0.19302000E+1, + 0.00000000E+0, 0.54954150E+3, 0.281E+3, 0.500E+2, 0.19302000E+1, 0.00000000E+0, 0.48978390E+3, + 0.281E+3, 0.510E+2, 0.19302000E+1, 0.00000000E+0, 0.45457430E+3, 0.281E+3, 0.520E+2, + 0.19302000E+1, 0.00000000E+0, 0.41127480E+3, 0.281E+3, 0.530E+2, 0.19302000E+1, 0.00000000E+0, + 0.37008590E+3, 0.281E+3, 0.540E+2, 0.19302000E+1, 0.00000000E+0, 0.15690757E+4, 0.281E+3, + 0.550E+2, 0.19302000E+1, 0.00000000E+0, 0.14367682E+4, 0.281E+3, 0.560E+2, 0.19302000E+1, + 0.00000000E+0, 0.12612174E+4, 0.281E+3, 0.570E+2, 0.19302000E+1, 0.00000000E+0, 0.57883370E+3, + 0.281E+3, 0.580E+2, 0.19302000E+1, 0.27991000E+1, 0.12731210E+4, 0.281E+3, 0.590E+2, + 0.19302000E+1, 0.00000000E+0, 0.12222593E+4, 0.281E+3, 0.600E+2, 0.19302000E+1, 0.00000000E+0, + 0.11915365E+4, 0.281E+3, 0.610E+2, 0.19302000E+1, 0.00000000E+0, 0.11632807E+4, 0.281E+3, + 0.620E+2, 0.19302000E+1, 0.00000000E+0, 0.11382189E+4, 0.281E+3, 0.630E+2, 0.19302000E+1, + 0.00000000E+0, 0.89497400E+3, 0.281E+3, 0.640E+2, 0.19302000E+1, 0.00000000E+0, 0.10093816E+4, + 0.281E+3, 0.650E+2, 0.19302000E+1, 0.00000000E+0, 0.97340780E+3, 0.281E+3, 0.660E+2, + 0.19302000E+1, 0.00000000E+0, 0.10263420E+4, 0.281E+3, 0.670E+2, 0.19302000E+1, 0.00000000E+0, + 0.10045056E+4, 0.281E+3, 0.680E+2, 0.19302000E+1, 0.00000000E+0, 0.98480680E+3, 0.281E+3, + 0.690E+2, 0.19302000E+1, 0.00000000E+0, 0.97327760E+3, 0.281E+3, 0.700E+2, 0.19302000E+1, + 0.00000000E+0, 0.81998780E+3, 0.281E+3, 0.710E+2, 0.19302000E+1, 0.00000000E+0, 0.80559300E+3, + 0.281E+3, 0.720E+2, 0.19302000E+1, 0.00000000E+0, 0.73521850E+3, 0.281E+3, 0.730E+2, + 0.19302000E+1, 0.00000000E+0, 0.62134250E+3, 0.281E+3, 0.740E+2, 0.19302000E+1, 0.00000000E+0, + 0.63198300E+3, 0.281E+3, 0.750E+2, 0.19302000E+1, 0.00000000E+0, 0.57293310E+3, 0.281E+3, + 0.760E+2, 0.19302000E+1, 0.00000000E+0, 0.52489900E+3, 0.281E+3, 0.770E+2, 0.19302000E+1, + 0.00000000E+0, 0.43657950E+3, 0.281E+3, 0.780E+2, 0.19302000E+1, 0.00000000E+0, 0.40812070E+3, + 0.281E+3, 0.790E+2, 0.19302000E+1, 0.00000000E+0, 0.41966530E+3, 0.281E+3, 0.800E+2, + 0.19302000E+1, 0.00000000E+0, 0.61117330E+3, 0.281E+3, 0.810E+2, 0.19302000E+1, 0.00000000E+0, + 0.59712280E+3, 0.281E+3, 0.820E+2, 0.19302000E+1, 0.00000000E+0, 0.54862180E+3, 0.281E+3, + 0.830E+2, 0.19302000E+1, 0.00000000E+0, 0.52330660E+3, 0.281E+3, 0.840E+2, 0.19302000E+1, + 0.00000000E+0, 0.48315870E+3, 0.281E+3, 0.850E+2, 0.19302000E+1, 0.00000000E+0, 0.44313040E+3, + 0.281E+3, 0.860E+2, 0.19302000E+1, 0.00000000E+0, 0.14804889E+4, 0.281E+3, 0.870E+2, + 0.19302000E+1, 0.00000000E+0, 0.14202956E+4, 0.281E+3, 0.880E+2, 0.19302000E+1, 0.00000000E+0, + 0.12546279E+4, 0.281E+3, 0.890E+2, 0.19302000E+1, 0.00000000E+0, 0.11272570E+4, 0.281E+3, + 0.900E+2, 0.19302000E+1, 0.00000000E+0, 0.11199568E+4, 0.281E+3, 0.910E+2, 0.19302000E+1, + 0.00000000E+0, 0.10844785E+4, 0.281E+3, 0.920E+2, 0.19302000E+1, 0.00000000E+0, 0.11170554E+4, + 0.281E+3, 0.930E+2, 0.19302000E+1, 0.00000000E+0, 0.10816612E+4, 0.281E+3, 0.940E+2, + 0.19302000E+1, 0.00000000E+0, 0.60479200E+2, 0.281E+3, 0.101E+3, 0.19302000E+1, 0.00000000E+0, + 0.19581130E+3, 0.281E+3, 0.103E+3, 0.19302000E+1, 0.98650000E+0, 0.24984400E+3, 0.281E+3, + 0.104E+3, 0.19302000E+1, 0.98080000E+0, 0.19103520E+3, 0.281E+3, 0.105E+3, 0.19302000E+1, + 0.97060000E+0, 0.14423770E+3, 0.281E+3, 0.106E+3, 0.19302000E+1, 0.98680000E+0, 0.10063880E+3, + 0.281E+3, 0.107E+3, 0.19302000E+1, 0.99440000E+0, 0.73584100E+2, 0.281E+3, 0.108E+3, + 0.19302000E+1, 0.99250000E+0, 0.50930700E+2, 0.281E+3, 0.109E+3, 0.19302000E+1, 0.99820000E+0, + 0.28655560E+3, 0.281E+3, 0.111E+3, 0.19302000E+1, 0.96840000E+0, 0.44298480E+3, 0.281E+3, + 0.112E+3, 0.19302000E+1, 0.96280000E+0, 0.44845700E+3, 0.281E+3, 0.113E+3, 0.19302000E+1, + 0.96480000E+0, 0.36047340E+3, 0.281E+3, 0.114E+3, 0.19302000E+1, 0.95070000E+0, 0.29550270E+3, + 0.281E+3, 0.115E+3, 0.19302000E+1, 0.99470000E+0, 0.25021530E+3, 0.281E+3, 0.116E+3, + 0.19302000E+1, 0.99480000E+0, 0.20491230E+3, 0.281E+3, 0.117E+3, 0.19302000E+1, 0.99720000E+0, + 0.39586240E+3, 0.281E+3, 0.119E+3, 0.19302000E+1, 0.97670000E+0, 0.75678810E+3, 0.281E+3, + 0.120E+3, 0.19302000E+1, 0.98310000E+0, 0.39555800E+3, 0.281E+3, 0.121E+3, 0.19302000E+1, + 0.18627000E+1, 0.38199770E+3, 0.281E+3, 0.122E+3, 0.19302000E+1, 0.18299000E+1, 0.37441990E+3, + 0.281E+3, 0.123E+3, 0.19302000E+1, 0.19138000E+1, 0.37101600E+3, 0.281E+3, 0.124E+3, + 0.19302000E+1, 0.18269000E+1, 0.34129280E+3, 0.281E+3, 0.125E+3, 0.19302000E+1, 0.16406000E+1, + 0.31596540E+3, 0.281E+3, 0.126E+3, 0.19302000E+1, 0.16483000E+1, 0.30149960E+3, 0.281E+3, + 0.127E+3, 0.19302000E+1, 0.17149000E+1, 0.29478150E+3, 0.281E+3, 0.128E+3, 0.19302000E+1, + 0.17937000E+1, 0.29134120E+3, 0.281E+3, 0.129E+3, 0.19302000E+1, 0.95760000E+0, 0.27325060E+3, + 0.281E+3, 0.130E+3, 0.19302000E+1, 0.19419000E+1, 0.44554260E+3, 0.281E+3, 0.131E+3, + 0.19302000E+1, 0.96010000E+0, 0.39138140E+3, 0.281E+3, 0.132E+3, 0.19302000E+1, 0.94340000E+0, + 0.35096110E+3, 0.281E+3, 0.133E+3, 0.19302000E+1, 0.98890000E+0, 0.32072380E+3, 0.281E+3, + 0.134E+3, 0.19302000E+1, 0.99010000E+0, 0.28284750E+3, 0.281E+3, 0.135E+3, 0.19302000E+1, + 0.99740000E+0, 0.47250610E+3, 0.281E+3, 0.137E+3, 0.19302000E+1, 0.97380000E+0, 0.92136230E+3, + 0.281E+3, 0.138E+3, 0.19302000E+1, 0.98010000E+0, 0.70355580E+3, 0.281E+3, 0.139E+3, + 0.19302000E+1, 0.19153000E+1, 0.52340250E+3, 0.281E+3, 0.140E+3, 0.19302000E+1, 0.19355000E+1, + 0.52863200E+3, 0.281E+3, 0.141E+3, 0.19302000E+1, 0.19545000E+1, 0.49314640E+3, 0.281E+3, + 0.142E+3, 0.19302000E+1, 0.19420000E+1, 0.55329240E+3, 0.281E+3, 0.143E+3, 0.19302000E+1, + 0.16682000E+1, 0.43004960E+3, 0.281E+3, 0.144E+3, 0.19302000E+1, 0.18584000E+1, 0.40251430E+3, + 0.281E+3, 0.145E+3, 0.19302000E+1, 0.19003000E+1, 0.37395490E+3, 0.281E+3, 0.146E+3, + 0.19302000E+1, 0.18630000E+1, 0.36182100E+3, 0.281E+3, 0.147E+3, 0.19302000E+1, 0.96790000E+0, + 0.35776620E+3, 0.281E+3, 0.148E+3, 0.19302000E+1, 0.19539000E+1, 0.56674250E+3, 0.281E+3, + 0.149E+3, 0.19302000E+1, 0.96330000E+0, 0.51255600E+3, 0.281E+3, 0.150E+3, 0.19302000E+1, + 0.95140000E+0, 0.48004840E+3, 0.281E+3, 0.151E+3, 0.19302000E+1, 0.97490000E+0, 0.45424350E+3, + 0.281E+3, 0.152E+3, 0.19302000E+1, 0.98110000E+0, 0.41511430E+3, 0.281E+3, 0.153E+3, + 0.19302000E+1, 0.99680000E+0, 0.55834700E+3, 0.281E+3, 0.155E+3, 0.19302000E+1, 0.99090000E+0, + 0.11954806E+4, 0.281E+3, 0.156E+3, 0.19302000E+1, 0.97970000E+0, 0.89067110E+3, 0.281E+3, + 0.157E+3, 0.19302000E+1, 0.19373000E+1, 0.56141900E+3, 0.281E+3, 0.159E+3, 0.19302000E+1, + 0.29425000E+1, 0.54982120E+3, 0.281E+3, 0.160E+3, 0.19302000E+1, 0.29455000E+1, 0.53242950E+3, + 0.281E+3, 0.161E+3, 0.19302000E+1, 0.29413000E+1, 0.53504270E+3, 0.281E+3, 0.162E+3, + 0.19302000E+1, 0.29300000E+1, 0.51592290E+3, 0.281E+3, 0.163E+3, 0.19302000E+1, 0.18286000E+1, + 0.53831350E+3, 0.281E+3, 0.164E+3, 0.19302000E+1, 0.28732000E+1, 0.50569480E+3, 0.281E+3, + 0.165E+3, 0.19302000E+1, 0.29086000E+1, 0.51458640E+3, 0.281E+3, 0.166E+3, 0.19302000E+1, + 0.28965000E+1, 0.47998260E+3, 0.281E+3, 0.167E+3, 0.19302000E+1, 0.29242000E+1, 0.46631110E+3, + 0.281E+3, 0.168E+3, 0.19302000E+1, 0.29282000E+1, 0.46329610E+3, 0.281E+3, 0.169E+3, + 0.19302000E+1, 0.29246000E+1, 0.48680100E+3, 0.281E+3, 0.170E+3, 0.19302000E+1, 0.28482000E+1, + 0.44777810E+3, 0.281E+3, 0.171E+3, 0.19302000E+1, 0.29219000E+1, 0.60670050E+3, 0.281E+3, + 0.172E+3, 0.19302000E+1, 0.19254000E+1, 0.56315480E+3, 0.281E+3, 0.173E+3, 0.19302000E+1, + 0.19459000E+1, 0.51397290E+3, 0.281E+3, 0.174E+3, 0.19302000E+1, 0.19292000E+1, 0.52014190E+3, + 0.281E+3, 0.175E+3, 0.19302000E+1, 0.18104000E+1, 0.45549230E+3, 0.281E+3, 0.176E+3, + 0.19302000E+1, 0.18858000E+1, 0.42873640E+3, 0.281E+3, 0.177E+3, 0.19302000E+1, 0.18648000E+1, + 0.40967910E+3, 0.281E+3, 0.178E+3, 0.19302000E+1, 0.19188000E+1, 0.39187930E+3, 0.281E+3, + 0.179E+3, 0.19302000E+1, 0.98460000E+0, 0.37862560E+3, 0.281E+3, 0.180E+3, 0.19302000E+1, + 0.19896000E+1, 0.60907890E+3, 0.281E+3, 0.181E+3, 0.19302000E+1, 0.92670000E+0, 0.55494180E+3, + 0.281E+3, 0.182E+3, 0.19302000E+1, 0.93830000E+0, 0.53810030E+3, 0.281E+3, 0.183E+3, + 0.19302000E+1, 0.98200000E+0, 0.52340750E+3, 0.281E+3, 0.184E+3, 0.19302000E+1, 0.98150000E+0, + 0.48896760E+3, 0.281E+3, 0.185E+3, 0.19302000E+1, 0.99540000E+0, 0.62876220E+3, 0.281E+3, + 0.187E+3, 0.19302000E+1, 0.97050000E+0, 0.11883406E+4, 0.281E+3, 0.188E+3, 0.19302000E+1, + 0.96620000E+0, 0.66419980E+3, 0.281E+3, 0.189E+3, 0.19302000E+1, 0.29070000E+1, 0.76713680E+3, + 0.281E+3, 0.190E+3, 0.19302000E+1, 0.28844000E+1, 0.68633050E+3, 0.281E+3, 0.191E+3, + 0.19302000E+1, 0.28738000E+1, 0.60632050E+3, 0.281E+3, 0.192E+3, 0.19302000E+1, 0.28878000E+1, + 0.58350520E+3, 0.281E+3, 0.193E+3, 0.19302000E+1, 0.29095000E+1, 0.70242340E+3, 0.281E+3, + 0.194E+3, 0.19302000E+1, 0.19209000E+1, 0.16303250E+3, 0.281E+3, 0.204E+3, 0.19302000E+1, + 0.19697000E+1, 0.16051470E+3, 0.281E+3, 0.205E+3, 0.19302000E+1, 0.19441000E+1, 0.11775890E+3, + 0.281E+3, 0.206E+3, 0.19302000E+1, 0.19985000E+1, 0.94561900E+2, 0.281E+3, 0.207E+3, + 0.19302000E+1, 0.20143000E+1, 0.65054900E+2, 0.281E+3, 0.208E+3, 0.19302000E+1, 0.19887000E+1, + 0.28915800E+3, 0.281E+3, 0.212E+3, 0.19302000E+1, 0.19496000E+1, 0.34950920E+3, 0.281E+3, + 0.213E+3, 0.19302000E+1, 0.19311000E+1, 0.33534010E+3, 0.281E+3, 0.214E+3, 0.19302000E+1, + 0.19435000E+1, 0.29153890E+3, 0.281E+3, 0.215E+3, 0.19302000E+1, 0.20102000E+1, 0.24518670E+3, + 0.281E+3, 0.216E+3, 0.19302000E+1, 0.19903000E+1, 0.40606400E+3, 0.281E+3, 0.220E+3, + 0.19302000E+1, 0.19349000E+1, 0.39020820E+3, 0.281E+3, 0.221E+3, 0.19302000E+1, 0.28999000E+1, + 0.39504660E+3, 0.281E+3, 0.222E+3, 0.19302000E+1, 0.38675000E+1, 0.36178060E+3, 0.281E+3, + 0.223E+3, 0.19302000E+1, 0.29110000E+1, 0.27298940E+3, 0.281E+3, 0.224E+3, 0.19302000E+1, + 0.10619100E+2, 0.23378110E+3, 0.281E+3, 0.225E+3, 0.19302000E+1, 0.98849000E+1, 0.22948940E+3, + 0.281E+3, 0.226E+3, 0.19302000E+1, 0.91376000E+1, 0.26871310E+3, 0.281E+3, 0.227E+3, + 0.19302000E+1, 0.29263000E+1, 0.25040430E+3, 0.281E+3, 0.228E+3, 0.19302000E+1, 0.65458000E+1, + 0.35311120E+3, 0.281E+3, 0.231E+3, 0.19302000E+1, 0.19315000E+1, 0.37266030E+3, 0.281E+3, + 0.232E+3, 0.19302000E+1, 0.19447000E+1, 0.34178700E+3, 0.281E+3, 0.233E+3, 0.19302000E+1, + 0.19793000E+1, 0.31822560E+3, 0.281E+3, 0.234E+3, 0.19302000E+1, 0.19812000E+1, 0.48670590E+3, + 0.281E+3, 0.238E+3, 0.19302000E+1, 0.19143000E+1, 0.46832670E+3, 0.281E+3, 0.239E+3, + 0.19302000E+1, 0.28903000E+1, 0.47237120E+3, 0.281E+3, 0.240E+3, 0.19302000E+1, 0.39106000E+1, + 0.45708930E+3, 0.281E+3, 0.241E+3, 0.19302000E+1, 0.29225000E+1, 0.40445180E+3, 0.281E+3, + 0.242E+3, 0.19302000E+1, 0.11055600E+2, 0.35727900E+3, 0.281E+3, 0.243E+3, 0.19302000E+1, + 0.95402000E+1, 0.33777820E+3, 0.281E+3, 0.244E+3, 0.19302000E+1, 0.88895000E+1, 0.34411230E+3, + 0.281E+3, 0.245E+3, 0.19302000E+1, 0.29696000E+1, 0.35934930E+3, 0.281E+3, 0.246E+3, + 0.19302000E+1, 0.57095000E+1, 0.45622010E+3, 0.281E+3, 0.249E+3, 0.19302000E+1, 0.19378000E+1, + 0.49554180E+3, 0.281E+3, 0.250E+3, 0.19302000E+1, 0.19505000E+1, 0.46689650E+3, 0.281E+3, + 0.251E+3, 0.19302000E+1, 0.19523000E+1, 0.45057090E+3, 0.281E+3, 0.252E+3, 0.19302000E+1, + 0.19639000E+1, 0.58874480E+3, 0.281E+3, 0.256E+3, 0.19302000E+1, 0.18467000E+1, 0.60988230E+3, + 0.281E+3, 0.257E+3, 0.19302000E+1, 0.29175000E+1, 0.45235490E+3, 0.281E+3, 0.272E+3, + 0.19302000E+1, 0.38840000E+1, 0.47275440E+3, 0.281E+3, 0.273E+3, 0.19302000E+1, 0.28988000E+1, + 0.43936980E+3, 0.281E+3, 0.274E+3, 0.19302000E+1, 0.10915300E+2, 0.39936360E+3, 0.281E+3, + 0.275E+3, 0.19302000E+1, 0.98054000E+1, 0.37591510E+3, 0.281E+3, 0.276E+3, 0.19302000E+1, + 0.91527000E+1, 0.38338850E+3, 0.281E+3, 0.277E+3, 0.19302000E+1, 0.29424000E+1, 0.40305640E+3, + 0.281E+3, 0.278E+3, 0.19302000E+1, 0.66669000E+1, 0.48774180E+3, 0.281E+3, 0.281E+3, + 0.19302000E+1, 0.19302000E+1, 0.39792200E+2, 0.282E+3, 0.100E+1, 0.19356000E+1, 0.91180000E+0, + 0.26446700E+2, 0.282E+3, 0.200E+1, 0.19356000E+1, 0.00000000E+0, 0.61488410E+3, 0.282E+3, + 0.300E+1, 0.19356000E+1, 0.00000000E+0, 0.35582050E+3, 0.282E+3, 0.400E+1, 0.19356000E+1, + 0.00000000E+0, 0.24002620E+3, 0.282E+3, 0.500E+1, 0.19356000E+1, 0.00000000E+0, 0.16250360E+3, + 0.282E+3, 0.600E+1, 0.19356000E+1, 0.00000000E+0, 0.11392620E+3, 0.282E+3, 0.700E+1, + 0.19356000E+1, 0.00000000E+0, 0.86471200E+2, 0.282E+3, 0.800E+1, 0.19356000E+1, 0.00000000E+0, + 0.65688800E+2, 0.282E+3, 0.900E+1, 0.19356000E+1, 0.00000000E+0, 0.50670700E+2, 0.282E+3, + 0.100E+2, 0.19356000E+1, 0.00000000E+0, 0.73557820E+3, 0.282E+3, 0.110E+2, 0.19356000E+1, + 0.00000000E+0, 0.56688720E+3, 0.282E+3, 0.120E+2, 0.19356000E+1, 0.00000000E+0, 0.52287510E+3, + 0.282E+3, 0.130E+2, 0.19356000E+1, 0.00000000E+0, 0.41241080E+3, 0.282E+3, 0.140E+2, + 0.19356000E+1, 0.00000000E+0, 0.32196130E+3, 0.282E+3, 0.150E+2, 0.19356000E+1, 0.00000000E+0, + 0.26749610E+3, 0.282E+3, 0.160E+2, 0.19356000E+1, 0.00000000E+0, 0.21879400E+3, 0.282E+3, + 0.170E+2, 0.19356000E+1, 0.00000000E+0, 0.17927010E+3, 0.282E+3, 0.180E+2, 0.19356000E+1, + 0.00000000E+0, 0.12058672E+4, 0.282E+3, 0.190E+2, 0.19356000E+1, 0.00000000E+0, 0.99578930E+3, + 0.282E+3, 0.200E+2, 0.19356000E+1, 0.00000000E+0, 0.82287620E+3, 0.282E+3, 0.210E+2, + 0.19356000E+1, 0.00000000E+0, 0.79494560E+3, 0.282E+3, 0.220E+2, 0.19356000E+1, 0.00000000E+0, + 0.72813060E+3, 0.282E+3, 0.230E+2, 0.19356000E+1, 0.00000000E+0, 0.57390570E+3, 0.282E+3, + 0.240E+2, 0.19356000E+1, 0.00000000E+0, 0.62713920E+3, 0.282E+3, 0.250E+2, 0.19356000E+1, + 0.00000000E+0, 0.49253590E+3, 0.282E+3, 0.260E+2, 0.19356000E+1, 0.00000000E+0, 0.52201020E+3, + 0.282E+3, 0.270E+2, 0.19356000E+1, 0.00000000E+0, 0.53761470E+3, 0.282E+3, 0.280E+2, + 0.19356000E+1, 0.00000000E+0, 0.41250160E+3, 0.282E+3, 0.290E+2, 0.19356000E+1, 0.00000000E+0, + 0.42350910E+3, 0.282E+3, 0.300E+2, 0.19356000E+1, 0.00000000E+0, 0.50121030E+3, 0.282E+3, + 0.310E+2, 0.19356000E+1, 0.00000000E+0, 0.44228050E+3, 0.282E+3, 0.320E+2, 0.19356000E+1, + 0.00000000E+0, 0.37753680E+3, 0.282E+3, 0.330E+2, 0.19356000E+1, 0.00000000E+0, 0.33899500E+3, + 0.282E+3, 0.340E+2, 0.19356000E+1, 0.00000000E+0, 0.29691970E+3, 0.282E+3, 0.350E+2, + 0.19356000E+1, 0.00000000E+0, 0.25848000E+3, 0.282E+3, 0.360E+2, 0.19356000E+1, 0.00000000E+0, + 0.13518089E+4, 0.282E+3, 0.370E+2, 0.19356000E+1, 0.00000000E+0, 0.11865298E+4, 0.282E+3, + 0.380E+2, 0.19356000E+1, 0.00000000E+0, 0.10397874E+4, 0.282E+3, 0.390E+2, 0.19356000E+1, + 0.00000000E+0, 0.93482320E+3, 0.282E+3, 0.400E+2, 0.19356000E+1, 0.00000000E+0, 0.85268980E+3, + 0.282E+3, 0.410E+2, 0.19356000E+1, 0.00000000E+0, 0.65880460E+3, 0.282E+3, 0.420E+2, + 0.19356000E+1, 0.00000000E+0, 0.73487030E+3, 0.282E+3, 0.430E+2, 0.19356000E+1, 0.00000000E+0, + 0.56035040E+3, 0.282E+3, 0.440E+2, 0.19356000E+1, 0.00000000E+0, 0.61229710E+3, 0.282E+3, + 0.450E+2, 0.19356000E+1, 0.00000000E+0, 0.56795070E+3, 0.282E+3, 0.460E+2, 0.19356000E+1, + 0.00000000E+0, 0.47388930E+3, 0.282E+3, 0.470E+2, 0.19356000E+1, 0.00000000E+0, 0.50066290E+3, + 0.282E+3, 0.480E+2, 0.19356000E+1, 0.00000000E+0, 0.62779210E+3, 0.282E+3, 0.490E+2, + 0.19356000E+1, 0.00000000E+0, 0.58070530E+3, 0.282E+3, 0.500E+2, 0.19356000E+1, 0.00000000E+0, + 0.51776630E+3, 0.282E+3, 0.510E+2, 0.19356000E+1, 0.00000000E+0, 0.48056780E+3, 0.282E+3, + 0.520E+2, 0.19356000E+1, 0.00000000E+0, 0.43474640E+3, 0.282E+3, 0.530E+2, 0.19356000E+1, + 0.00000000E+0, 0.39110730E+3, 0.282E+3, 0.540E+2, 0.19356000E+1, 0.00000000E+0, 0.16469053E+4, + 0.282E+3, 0.550E+2, 0.19356000E+1, 0.00000000E+0, 0.15126316E+4, 0.282E+3, 0.560E+2, + 0.19356000E+1, 0.00000000E+0, 0.13293437E+4, 0.282E+3, 0.570E+2, 0.19356000E+1, 0.00000000E+0, + 0.61169810E+3, 0.282E+3, 0.580E+2, 0.19356000E+1, 0.27991000E+1, 0.13407087E+4, 0.282E+3, + 0.590E+2, 0.19356000E+1, 0.00000000E+0, 0.12874426E+4, 0.282E+3, 0.600E+2, 0.19356000E+1, + 0.00000000E+0, 0.12551651E+4, 0.282E+3, 0.610E+2, 0.19356000E+1, 0.00000000E+0, 0.12254747E+4, + 0.282E+3, 0.620E+2, 0.19356000E+1, 0.00000000E+0, 0.11991443E+4, 0.282E+3, 0.630E+2, + 0.19356000E+1, 0.00000000E+0, 0.94362380E+3, 0.282E+3, 0.640E+2, 0.19356000E+1, 0.00000000E+0, + 0.10620589E+4, 0.282E+3, 0.650E+2, 0.19356000E+1, 0.00000000E+0, 0.10244069E+4, 0.282E+3, + 0.660E+2, 0.19356000E+1, 0.00000000E+0, 0.10816382E+4, 0.282E+3, 0.670E+2, 0.19356000E+1, + 0.00000000E+0, 0.10586802E+4, 0.282E+3, 0.680E+2, 0.19356000E+1, 0.00000000E+0, 0.10379814E+4, + 0.282E+3, 0.690E+2, 0.19356000E+1, 0.00000000E+0, 0.10258078E+4, 0.282E+3, 0.700E+2, + 0.19356000E+1, 0.00000000E+0, 0.86471680E+3, 0.282E+3, 0.710E+2, 0.19356000E+1, 0.00000000E+0, + 0.85048450E+3, 0.282E+3, 0.720E+2, 0.19356000E+1, 0.00000000E+0, 0.77645220E+3, 0.282E+3, + 0.730E+2, 0.19356000E+1, 0.00000000E+0, 0.65606950E+3, 0.282E+3, 0.740E+2, 0.19356000E+1, + 0.00000000E+0, 0.66747630E+3, 0.282E+3, 0.750E+2, 0.19356000E+1, 0.00000000E+0, 0.60520260E+3, + 0.282E+3, 0.760E+2, 0.19356000E+1, 0.00000000E+0, 0.55449180E+3, 0.282E+3, 0.770E+2, + 0.19356000E+1, 0.00000000E+0, 0.46101730E+3, 0.282E+3, 0.780E+2, 0.19356000E+1, 0.00000000E+0, + 0.43090160E+3, 0.282E+3, 0.790E+2, 0.19356000E+1, 0.00000000E+0, 0.44323910E+3, 0.282E+3, + 0.800E+2, 0.19356000E+1, 0.00000000E+0, 0.64499260E+3, 0.282E+3, 0.810E+2, 0.19356000E+1, + 0.00000000E+0, 0.63069680E+3, 0.282E+3, 0.820E+2, 0.19356000E+1, 0.00000000E+0, 0.57974990E+3, + 0.282E+3, 0.830E+2, 0.19356000E+1, 0.00000000E+0, 0.55307510E+3, 0.282E+3, 0.840E+2, + 0.19356000E+1, 0.00000000E+0, 0.51064800E+3, 0.282E+3, 0.850E+2, 0.19356000E+1, 0.00000000E+0, + 0.46827350E+3, 0.282E+3, 0.860E+2, 0.19356000E+1, 0.00000000E+0, 0.15554213E+4, 0.282E+3, + 0.870E+2, 0.19356000E+1, 0.00000000E+0, 0.14960560E+4, 0.282E+3, 0.880E+2, 0.19356000E+1, + 0.00000000E+0, 0.13229452E+4, 0.282E+3, 0.890E+2, 0.19356000E+1, 0.00000000E+0, 0.11895930E+4, + 0.282E+3, 0.900E+2, 0.19356000E+1, 0.00000000E+0, 0.11810895E+4, 0.282E+3, 0.910E+2, + 0.19356000E+1, 0.00000000E+0, 0.11436704E+4, 0.282E+3, 0.920E+2, 0.19356000E+1, 0.00000000E+0, + 0.11773166E+4, 0.282E+3, 0.930E+2, 0.19356000E+1, 0.00000000E+0, 0.11401626E+4, 0.282E+3, + 0.940E+2, 0.19356000E+1, 0.00000000E+0, 0.63979600E+2, 0.282E+3, 0.101E+3, 0.19356000E+1, + 0.00000000E+0, 0.20691270E+3, 0.282E+3, 0.103E+3, 0.19356000E+1, 0.98650000E+0, 0.26400830E+3, + 0.282E+3, 0.104E+3, 0.19356000E+1, 0.98080000E+0, 0.20201910E+3, 0.282E+3, 0.105E+3, + 0.19356000E+1, 0.97060000E+0, 0.15244950E+3, 0.282E+3, 0.106E+3, 0.19356000E+1, 0.98680000E+0, + 0.10626350E+3, 0.282E+3, 0.107E+3, 0.19356000E+1, 0.99440000E+0, 0.77602400E+2, 0.282E+3, + 0.108E+3, 0.19356000E+1, 0.99250000E+0, 0.53610900E+2, 0.282E+3, 0.109E+3, 0.19356000E+1, + 0.99820000E+0, 0.30258820E+3, 0.282E+3, 0.111E+3, 0.19356000E+1, 0.96840000E+0, 0.46775760E+3, + 0.282E+3, 0.112E+3, 0.19356000E+1, 0.96280000E+0, 0.47397540E+3, 0.282E+3, 0.113E+3, + 0.19356000E+1, 0.96480000E+0, 0.38125380E+3, 0.282E+3, 0.114E+3, 0.19356000E+1, 0.95070000E+0, + 0.31255060E+3, 0.282E+3, 0.115E+3, 0.19356000E+1, 0.99470000E+0, 0.26456000E+3, 0.282E+3, + 0.116E+3, 0.19356000E+1, 0.99480000E+0, 0.21653480E+3, 0.282E+3, 0.117E+3, 0.19356000E+1, + 0.99720000E+0, 0.41774830E+3, 0.282E+3, 0.119E+3, 0.19356000E+1, 0.97670000E+0, 0.79700090E+3, + 0.282E+3, 0.120E+3, 0.19356000E+1, 0.98310000E+0, 0.41801280E+3, 0.282E+3, 0.121E+3, + 0.19356000E+1, 0.18627000E+1, 0.40362390E+3, 0.282E+3, 0.122E+3, 0.19356000E+1, 0.18299000E+1, + 0.39559060E+3, 0.282E+3, 0.123E+3, 0.19356000E+1, 0.19138000E+1, 0.39193640E+3, 0.282E+3, + 0.124E+3, 0.19356000E+1, 0.18269000E+1, 0.36075390E+3, 0.282E+3, 0.125E+3, 0.19356000E+1, + 0.16406000E+1, 0.33396980E+3, 0.282E+3, 0.126E+3, 0.19356000E+1, 0.16483000E+1, 0.31863900E+3, + 0.282E+3, 0.127E+3, 0.19356000E+1, 0.17149000E+1, 0.31152110E+3, 0.282E+3, 0.128E+3, + 0.19356000E+1, 0.17937000E+1, 0.30775700E+3, 0.282E+3, 0.129E+3, 0.19356000E+1, 0.95760000E+0, + 0.28885340E+3, 0.282E+3, 0.130E+3, 0.19356000E+1, 0.19419000E+1, 0.47083440E+3, 0.282E+3, + 0.131E+3, 0.19356000E+1, 0.96010000E+0, 0.41385520E+3, 0.282E+3, 0.132E+3, 0.19356000E+1, + 0.94340000E+0, 0.37116030E+3, 0.282E+3, 0.133E+3, 0.19356000E+1, 0.98890000E+0, 0.33912820E+3, + 0.282E+3, 0.134E+3, 0.19356000E+1, 0.99010000E+0, 0.29897830E+3, 0.282E+3, 0.135E+3, + 0.19356000E+1, 0.99740000E+0, 0.49860580E+3, 0.282E+3, 0.137E+3, 0.19356000E+1, 0.97380000E+0, + 0.96992320E+3, 0.282E+3, 0.138E+3, 0.19356000E+1, 0.98010000E+0, 0.74205020E+3, 0.282E+3, + 0.139E+3, 0.19356000E+1, 0.19153000E+1, 0.55289600E+3, 0.282E+3, 0.140E+3, 0.19356000E+1, + 0.19355000E+1, 0.55839300E+3, 0.282E+3, 0.141E+3, 0.19356000E+1, 0.19545000E+1, 0.52087780E+3, + 0.282E+3, 0.142E+3, 0.19356000E+1, 0.19420000E+1, 0.58393470E+3, 0.282E+3, 0.143E+3, + 0.19356000E+1, 0.16682000E+1, 0.45433520E+3, 0.282E+3, 0.144E+3, 0.19356000E+1, 0.18584000E+1, + 0.42516750E+3, 0.282E+3, 0.145E+3, 0.19356000E+1, 0.19003000E+1, 0.39494400E+3, 0.282E+3, + 0.146E+3, 0.19356000E+1, 0.18630000E+1, 0.38209250E+3, 0.282E+3, 0.147E+3, 0.19356000E+1, + 0.96790000E+0, 0.37801500E+3, 0.282E+3, 0.148E+3, 0.19356000E+1, 0.19539000E+1, 0.59852070E+3, + 0.282E+3, 0.149E+3, 0.19356000E+1, 0.96330000E+0, 0.54168720E+3, 0.282E+3, 0.150E+3, + 0.19356000E+1, 0.95140000E+0, 0.50748490E+3, 0.282E+3, 0.151E+3, 0.19356000E+1, 0.97490000E+0, + 0.48022270E+3, 0.282E+3, 0.152E+3, 0.19356000E+1, 0.98110000E+0, 0.43881240E+3, 0.282E+3, + 0.153E+3, 0.19356000E+1, 0.99680000E+0, 0.58960800E+3, 0.282E+3, 0.155E+3, 0.19356000E+1, + 0.99090000E+0, 0.12575693E+4, 0.282E+3, 0.156E+3, 0.19356000E+1, 0.97970000E+0, 0.93914200E+3, + 0.282E+3, 0.157E+3, 0.19356000E+1, 0.19373000E+1, 0.59329090E+3, 0.282E+3, 0.159E+3, + 0.19356000E+1, 0.29425000E+1, 0.58103250E+3, 0.282E+3, 0.160E+3, 0.19356000E+1, 0.29455000E+1, + 0.56264920E+3, 0.282E+3, 0.161E+3, 0.19356000E+1, 0.29413000E+1, 0.56536800E+3, 0.282E+3, + 0.162E+3, 0.19356000E+1, 0.29300000E+1, 0.54495840E+3, 0.282E+3, 0.163E+3, 0.19356000E+1, + 0.18286000E+1, 0.56886990E+3, 0.282E+3, 0.164E+3, 0.19356000E+1, 0.28732000E+1, 0.53439680E+3, + 0.282E+3, 0.165E+3, 0.19356000E+1, 0.29086000E+1, 0.54369520E+3, 0.282E+3, 0.166E+3, + 0.19356000E+1, 0.28965000E+1, 0.50726200E+3, 0.282E+3, 0.167E+3, 0.19356000E+1, 0.29242000E+1, + 0.49282300E+3, 0.282E+3, 0.168E+3, 0.19356000E+1, 0.29282000E+1, 0.48963950E+3, 0.282E+3, + 0.169E+3, 0.19356000E+1, 0.29246000E+1, 0.51452780E+3, 0.282E+3, 0.170E+3, 0.19356000E+1, + 0.28482000E+1, 0.47326870E+3, 0.282E+3, 0.171E+3, 0.19356000E+1, 0.29219000E+1, 0.64058910E+3, + 0.282E+3, 0.172E+3, 0.19356000E+1, 0.19254000E+1, 0.59475240E+3, 0.282E+3, 0.173E+3, + 0.19356000E+1, 0.19459000E+1, 0.54291370E+3, 0.282E+3, 0.174E+3, 0.19356000E+1, 0.19292000E+1, + 0.54925780E+3, 0.282E+3, 0.175E+3, 0.19356000E+1, 0.18104000E+1, 0.48124530E+3, 0.282E+3, + 0.176E+3, 0.19356000E+1, 0.18858000E+1, 0.45291160E+3, 0.282E+3, 0.177E+3, 0.19356000E+1, + 0.18648000E+1, 0.43272460E+3, 0.282E+3, 0.178E+3, 0.19356000E+1, 0.19188000E+1, 0.41382910E+3, + 0.282E+3, 0.179E+3, 0.19356000E+1, 0.98460000E+0, 0.39995160E+3, 0.282E+3, 0.180E+3, + 0.19356000E+1, 0.19896000E+1, 0.64299800E+3, 0.282E+3, 0.181E+3, 0.19356000E+1, 0.92670000E+0, + 0.58628560E+3, 0.282E+3, 0.182E+3, 0.19356000E+1, 0.93830000E+0, 0.56868040E+3, 0.282E+3, + 0.183E+3, 0.19356000E+1, 0.98200000E+0, 0.55320800E+3, 0.282E+3, 0.184E+3, 0.19356000E+1, + 0.98150000E+0, 0.51680550E+3, 0.282E+3, 0.185E+3, 0.19356000E+1, 0.99540000E+0, 0.66402220E+3, + 0.282E+3, 0.187E+3, 0.19356000E+1, 0.97050000E+0, 0.12510172E+4, 0.282E+3, 0.188E+3, + 0.19356000E+1, 0.96620000E+0, 0.70195930E+3, 0.282E+3, 0.189E+3, 0.19356000E+1, 0.29070000E+1, + 0.81010680E+3, 0.282E+3, 0.190E+3, 0.19356000E+1, 0.28844000E+1, 0.72464740E+3, 0.282E+3, + 0.191E+3, 0.19356000E+1, 0.28738000E+1, 0.64054440E+3, 0.282E+3, 0.192E+3, 0.19356000E+1, + 0.28878000E+1, 0.61646960E+3, 0.282E+3, 0.193E+3, 0.19356000E+1, 0.29095000E+1, 0.74111760E+3, + 0.282E+3, 0.194E+3, 0.19356000E+1, 0.19209000E+1, 0.17249040E+3, 0.282E+3, 0.204E+3, + 0.19356000E+1, 0.19697000E+1, 0.16970770E+3, 0.282E+3, 0.205E+3, 0.19356000E+1, 0.19441000E+1, + 0.12443980E+3, 0.282E+3, 0.206E+3, 0.19356000E+1, 0.19985000E+1, 0.99829400E+2, 0.282E+3, + 0.207E+3, 0.19356000E+1, 0.20143000E+1, 0.68563200E+2, 0.282E+3, 0.208E+3, 0.19356000E+1, + 0.19887000E+1, 0.30583900E+3, 0.282E+3, 0.212E+3, 0.19356000E+1, 0.19496000E+1, 0.36956280E+3, + 0.282E+3, 0.213E+3, 0.19356000E+1, 0.19311000E+1, 0.35468400E+3, 0.282E+3, 0.214E+3, + 0.19356000E+1, 0.19435000E+1, 0.30832680E+3, 0.282E+3, 0.215E+3, 0.19356000E+1, 0.20102000E+1, + 0.25923020E+3, 0.282E+3, 0.216E+3, 0.19356000E+1, 0.19903000E+1, 0.42911330E+3, 0.282E+3, + 0.220E+3, 0.19356000E+1, 0.19349000E+1, 0.41249460E+3, 0.282E+3, 0.221E+3, 0.19356000E+1, + 0.28999000E+1, 0.41760390E+3, 0.282E+3, 0.222E+3, 0.19356000E+1, 0.38675000E+1, 0.38232410E+3, + 0.282E+3, 0.223E+3, 0.19356000E+1, 0.29110000E+1, 0.28838020E+3, 0.282E+3, 0.224E+3, + 0.19356000E+1, 0.10619100E+2, 0.24693330E+3, 0.282E+3, 0.225E+3, 0.19356000E+1, 0.98849000E+1, + 0.24239630E+3, 0.282E+3, 0.226E+3, 0.19356000E+1, 0.91376000E+1, 0.28387680E+3, 0.282E+3, + 0.227E+3, 0.19356000E+1, 0.29263000E+1, 0.26454680E+3, 0.282E+3, 0.228E+3, 0.19356000E+1, + 0.65458000E+1, 0.37331260E+3, 0.282E+3, 0.231E+3, 0.19356000E+1, 0.19315000E+1, 0.39406900E+3, + 0.282E+3, 0.232E+3, 0.19356000E+1, 0.19447000E+1, 0.36145320E+3, 0.282E+3, 0.233E+3, + 0.19356000E+1, 0.19793000E+1, 0.33647870E+3, 0.282E+3, 0.234E+3, 0.19356000E+1, 0.19812000E+1, + 0.51420470E+3, 0.282E+3, 0.238E+3, 0.19356000E+1, 0.19143000E+1, 0.49505130E+3, 0.282E+3, + 0.239E+3, 0.19356000E+1, 0.28903000E+1, 0.49936110E+3, 0.282E+3, 0.240E+3, 0.19356000E+1, + 0.39106000E+1, 0.48303860E+3, 0.282E+3, 0.241E+3, 0.19356000E+1, 0.29225000E+1, 0.42736900E+3, + 0.282E+3, 0.242E+3, 0.19356000E+1, 0.11055600E+2, 0.37746330E+3, 0.282E+3, 0.243E+3, + 0.19356000E+1, 0.95402000E+1, 0.35681920E+3, 0.282E+3, 0.244E+3, 0.19356000E+1, 0.88895000E+1, + 0.36342680E+3, 0.282E+3, 0.245E+3, 0.19356000E+1, 0.29696000E+1, 0.37957410E+3, 0.282E+3, + 0.246E+3, 0.19356000E+1, 0.57095000E+1, 0.48204630E+3, 0.282E+3, 0.249E+3, 0.19356000E+1, + 0.19378000E+1, 0.52374110E+3, 0.282E+3, 0.250E+3, 0.19356000E+1, 0.19505000E+1, 0.49359530E+3, + 0.282E+3, 0.251E+3, 0.19356000E+1, 0.19523000E+1, 0.47634340E+3, 0.282E+3, 0.252E+3, + 0.19356000E+1, 0.19639000E+1, 0.62197270E+3, 0.282E+3, 0.256E+3, 0.19356000E+1, 0.18467000E+1, + 0.64464210E+3, 0.282E+3, 0.257E+3, 0.19356000E+1, 0.29175000E+1, 0.47820960E+3, 0.282E+3, + 0.272E+3, 0.19356000E+1, 0.38840000E+1, 0.49956010E+3, 0.282E+3, 0.273E+3, 0.19356000E+1, + 0.28988000E+1, 0.46428480E+3, 0.282E+3, 0.274E+3, 0.19356000E+1, 0.10915300E+2, 0.42194200E+3, + 0.282E+3, 0.275E+3, 0.19356000E+1, 0.98054000E+1, 0.39711980E+3, 0.282E+3, 0.276E+3, + 0.19356000E+1, 0.91527000E+1, 0.40488970E+3, 0.282E+3, 0.277E+3, 0.19356000E+1, 0.29424000E+1, + 0.42575640E+3, 0.282E+3, 0.278E+3, 0.19356000E+1, 0.66669000E+1, 0.51525750E+3, 0.282E+3, + 0.281E+3, 0.19356000E+1, 0.19302000E+1, 0.54445630E+3, 0.282E+3, 0.282E+3, 0.19356000E+1, + 0.19356000E+1, 0.40764900E+2, 0.283E+3, 0.100E+1, 0.19655000E+1, 0.91180000E+0, 0.27174600E+2, + 0.283E+3, 0.200E+1, 0.19655000E+1, 0.00000000E+0, 0.61318280E+3, 0.283E+3, 0.300E+1, + 0.19655000E+1, 0.00000000E+0, 0.35984820E+3, 0.283E+3, 0.400E+1, 0.19655000E+1, 0.00000000E+0, + 0.24435680E+3, 0.283E+3, 0.500E+1, 0.19655000E+1, 0.00000000E+0, 0.16611890E+3, 0.283E+3, + 0.600E+1, 0.19655000E+1, 0.00000000E+0, 0.11675030E+3, 0.283E+3, 0.700E+1, 0.19655000E+1, + 0.00000000E+0, 0.88739700E+2, 0.283E+3, 0.800E+1, 0.19655000E+1, 0.00000000E+0, 0.67475000E+2, + 0.283E+3, 0.900E+1, 0.19655000E+1, 0.00000000E+0, 0.52075900E+2, 0.283E+3, 0.100E+2, + 0.19655000E+1, 0.00000000E+0, 0.73412320E+3, 0.283E+3, 0.110E+2, 0.19655000E+1, 0.00000000E+0, + 0.57193110E+3, 0.283E+3, 0.120E+2, 0.19655000E+1, 0.00000000E+0, 0.52949770E+3, 0.283E+3, + 0.130E+2, 0.19655000E+1, 0.00000000E+0, 0.41959890E+3, 0.283E+3, 0.140E+2, 0.19655000E+1, + 0.00000000E+0, 0.32872910E+3, 0.283E+3, 0.150E+2, 0.19655000E+1, 0.00000000E+0, 0.27365740E+3, + 0.283E+3, 0.160E+2, 0.19655000E+1, 0.00000000E+0, 0.22421020E+3, 0.283E+3, 0.170E+2, + 0.19655000E+1, 0.00000000E+0, 0.18393680E+3, 0.283E+3, 0.180E+2, 0.19655000E+1, 0.00000000E+0, + 0.12004050E+4, 0.283E+3, 0.190E+2, 0.19655000E+1, 0.00000000E+0, 0.10001815E+4, 0.283E+3, + 0.200E+2, 0.19655000E+1, 0.00000000E+0, 0.82806580E+3, 0.283E+3, 0.210E+2, 0.19655000E+1, + 0.00000000E+0, 0.80123380E+3, 0.283E+3, 0.220E+2, 0.19655000E+1, 0.00000000E+0, 0.73459090E+3, + 0.283E+3, 0.230E+2, 0.19655000E+1, 0.00000000E+0, 0.57897210E+3, 0.283E+3, 0.240E+2, + 0.19655000E+1, 0.00000000E+0, 0.63356300E+3, 0.283E+3, 0.250E+2, 0.19655000E+1, 0.00000000E+0, + 0.49763260E+3, 0.283E+3, 0.260E+2, 0.19655000E+1, 0.00000000E+0, 0.52856480E+3, 0.283E+3, + 0.270E+2, 0.19655000E+1, 0.00000000E+0, 0.54385410E+3, 0.283E+3, 0.280E+2, 0.19655000E+1, + 0.00000000E+0, 0.41719990E+3, 0.283E+3, 0.290E+2, 0.19655000E+1, 0.00000000E+0, 0.42968510E+3, + 0.283E+3, 0.300E+2, 0.19655000E+1, 0.00000000E+0, 0.50815670E+3, 0.283E+3, 0.310E+2, + 0.19655000E+1, 0.00000000E+0, 0.45004640E+3, 0.283E+3, 0.320E+2, 0.19655000E+1, 0.00000000E+0, + 0.38531250E+3, 0.283E+3, 0.330E+2, 0.19655000E+1, 0.00000000E+0, 0.34654960E+3, 0.283E+3, + 0.340E+2, 0.19655000E+1, 0.00000000E+0, 0.30400640E+3, 0.283E+3, 0.350E+2, 0.19655000E+1, + 0.00000000E+0, 0.26498470E+3, 0.283E+3, 0.360E+2, 0.19655000E+1, 0.00000000E+0, 0.13466051E+4, + 0.283E+3, 0.370E+2, 0.19655000E+1, 0.00000000E+0, 0.11912973E+4, 0.283E+3, 0.380E+2, + 0.19655000E+1, 0.00000000E+0, 0.10473694E+4, 0.283E+3, 0.390E+2, 0.19655000E+1, 0.00000000E+0, + 0.94346900E+3, 0.283E+3, 0.400E+2, 0.19655000E+1, 0.00000000E+0, 0.86162430E+3, 0.283E+3, + 0.410E+2, 0.19655000E+1, 0.00000000E+0, 0.66699900E+3, 0.283E+3, 0.420E+2, 0.19655000E+1, + 0.00000000E+0, 0.74348240E+3, 0.283E+3, 0.430E+2, 0.19655000E+1, 0.00000000E+0, 0.56809890E+3, + 0.283E+3, 0.440E+2, 0.19655000E+1, 0.00000000E+0, 0.62085810E+3, 0.283E+3, 0.450E+2, + 0.19655000E+1, 0.00000000E+0, 0.57630050E+3, 0.283E+3, 0.460E+2, 0.19655000E+1, 0.00000000E+0, + 0.48048740E+3, 0.283E+3, 0.470E+2, 0.19655000E+1, 0.00000000E+0, 0.50846720E+3, 0.283E+3, + 0.480E+2, 0.19655000E+1, 0.00000000E+0, 0.63617130E+3, 0.283E+3, 0.490E+2, 0.19655000E+1, + 0.00000000E+0, 0.59026500E+3, 0.283E+3, 0.500E+2, 0.19655000E+1, 0.00000000E+0, 0.52774110E+3, + 0.283E+3, 0.510E+2, 0.19655000E+1, 0.00000000E+0, 0.49058420E+3, 0.283E+3, 0.520E+2, + 0.19655000E+1, 0.00000000E+0, 0.44449370E+3, 0.283E+3, 0.530E+2, 0.19655000E+1, 0.00000000E+0, + 0.40041400E+3, 0.283E+3, 0.540E+2, 0.19655000E+1, 0.00000000E+0, 0.16407171E+4, 0.283E+3, + 0.550E+2, 0.19655000E+1, 0.00000000E+0, 0.15169526E+4, 0.283E+3, 0.560E+2, 0.19655000E+1, + 0.00000000E+0, 0.13375362E+4, 0.283E+3, 0.570E+2, 0.19655000E+1, 0.00000000E+0, 0.62310240E+3, + 0.283E+3, 0.580E+2, 0.19655000E+1, 0.27991000E+1, 0.13458984E+4, 0.283E+3, 0.590E+2, + 0.19655000E+1, 0.00000000E+0, 0.12931656E+4, 0.283E+3, 0.600E+2, 0.19655000E+1, 0.00000000E+0, + 0.12609414E+4, 0.283E+3, 0.610E+2, 0.19655000E+1, 0.00000000E+0, 0.12312801E+4, 0.283E+3, + 0.620E+2, 0.19655000E+1, 0.00000000E+0, 0.12049833E+4, 0.283E+3, 0.630E+2, 0.19655000E+1, + 0.00000000E+0, 0.95146290E+3, 0.283E+3, 0.640E+2, 0.19655000E+1, 0.00000000E+0, 0.10651460E+4, + 0.283E+3, 0.650E+2, 0.19655000E+1, 0.00000000E+0, 0.10280001E+4, 0.283E+3, 0.660E+2, + 0.19655000E+1, 0.00000000E+0, 0.10878112E+4, 0.283E+3, 0.670E+2, 0.19655000E+1, 0.00000000E+0, + 0.10648244E+4, 0.283E+3, 0.680E+2, 0.19655000E+1, 0.00000000E+0, 0.10441447E+4, 0.283E+3, + 0.690E+2, 0.19655000E+1, 0.00000000E+0, 0.10317560E+4, 0.283E+3, 0.700E+2, 0.19655000E+1, + 0.00000000E+0, 0.87174390E+3, 0.283E+3, 0.710E+2, 0.19655000E+1, 0.00000000E+0, 0.86024520E+3, + 0.283E+3, 0.720E+2, 0.19655000E+1, 0.00000000E+0, 0.78678670E+3, 0.283E+3, 0.730E+2, + 0.19655000E+1, 0.00000000E+0, 0.66560880E+3, 0.283E+3, 0.740E+2, 0.19655000E+1, 0.00000000E+0, + 0.67767670E+3, 0.283E+3, 0.750E+2, 0.19655000E+1, 0.00000000E+0, 0.61534220E+3, 0.283E+3, + 0.760E+2, 0.19655000E+1, 0.00000000E+0, 0.56441430E+3, 0.283E+3, 0.770E+2, 0.19655000E+1, + 0.00000000E+0, 0.46971680E+3, 0.283E+3, 0.780E+2, 0.19655000E+1, 0.00000000E+0, 0.43919500E+3, + 0.283E+3, 0.790E+2, 0.19655000E+1, 0.00000000E+0, 0.45207010E+3, 0.283E+3, 0.800E+2, + 0.19655000E+1, 0.00000000E+0, 0.65391820E+3, 0.283E+3, 0.810E+2, 0.19655000E+1, 0.00000000E+0, + 0.64098700E+3, 0.283E+3, 0.820E+2, 0.19655000E+1, 0.00000000E+0, 0.59069190E+3, 0.283E+3, + 0.830E+2, 0.19655000E+1, 0.00000000E+0, 0.56428990E+3, 0.283E+3, 0.840E+2, 0.19655000E+1, + 0.00000000E+0, 0.52180500E+3, 0.283E+3, 0.850E+2, 0.19655000E+1, 0.00000000E+0, 0.47912360E+3, + 0.283E+3, 0.860E+2, 0.19655000E+1, 0.00000000E+0, 0.15538386E+4, 0.283E+3, 0.870E+2, + 0.19655000E+1, 0.00000000E+0, 0.15028627E+4, 0.283E+3, 0.880E+2, 0.19655000E+1, 0.00000000E+0, + 0.13329466E+4, 0.283E+3, 0.890E+2, 0.19655000E+1, 0.00000000E+0, 0.12024650E+4, 0.283E+3, + 0.900E+2, 0.19655000E+1, 0.00000000E+0, 0.11918172E+4, 0.283E+3, 0.910E+2, 0.19655000E+1, + 0.00000000E+0, 0.11541338E+4, 0.283E+3, 0.920E+2, 0.19655000E+1, 0.00000000E+0, 0.11856295E+4, + 0.283E+3, 0.930E+2, 0.19655000E+1, 0.00000000E+0, 0.11486554E+4, 0.283E+3, 0.940E+2, + 0.19655000E+1, 0.00000000E+0, 0.65353600E+2, 0.283E+3, 0.101E+3, 0.19655000E+1, 0.00000000E+0, + 0.20943720E+3, 0.283E+3, 0.103E+3, 0.19655000E+1, 0.98650000E+0, 0.26754910E+3, 0.283E+3, + 0.104E+3, 0.19655000E+1, 0.98080000E+0, 0.20589850E+3, 0.283E+3, 0.105E+3, 0.19655000E+1, + 0.97060000E+0, 0.15580320E+3, 0.283E+3, 0.106E+3, 0.19655000E+1, 0.98680000E+0, 0.10888470E+3, + 0.283E+3, 0.107E+3, 0.19655000E+1, 0.99440000E+0, 0.79657600E+2, 0.283E+3, 0.108E+3, + 0.19655000E+1, 0.99250000E+0, 0.55128300E+2, 0.283E+3, 0.109E+3, 0.19655000E+1, 0.99820000E+0, + 0.30582180E+3, 0.283E+3, 0.111E+3, 0.19655000E+1, 0.96840000E+0, 0.47251580E+3, 0.283E+3, + 0.112E+3, 0.19655000E+1, 0.96280000E+0, 0.48037720E+3, 0.283E+3, 0.113E+3, 0.19655000E+1, + 0.96480000E+0, 0.38813130E+3, 0.283E+3, 0.114E+3, 0.19655000E+1, 0.95070000E+0, 0.31914590E+3, + 0.283E+3, 0.115E+3, 0.19655000E+1, 0.99470000E+0, 0.27063230E+3, 0.283E+3, 0.116E+3, + 0.19655000E+1, 0.99480000E+0, 0.22188150E+3, 0.283E+3, 0.117E+3, 0.19655000E+1, 0.99720000E+0, + 0.42309090E+3, 0.283E+3, 0.119E+3, 0.19655000E+1, 0.97670000E+0, 0.80050250E+3, 0.283E+3, + 0.120E+3, 0.19655000E+1, 0.98310000E+0, 0.42505990E+3, 0.283E+3, 0.121E+3, 0.19655000E+1, + 0.18627000E+1, 0.41044180E+3, 0.283E+3, 0.122E+3, 0.19655000E+1, 0.18299000E+1, 0.40223240E+3, + 0.283E+3, 0.123E+3, 0.19655000E+1, 0.19138000E+1, 0.39832240E+3, 0.283E+3, 0.124E+3, + 0.19655000E+1, 0.18269000E+1, 0.36744750E+3, 0.283E+3, 0.125E+3, 0.19655000E+1, 0.16406000E+1, + 0.34035150E+3, 0.283E+3, 0.126E+3, 0.19655000E+1, 0.16483000E+1, 0.32470530E+3, 0.283E+3, + 0.127E+3, 0.19655000E+1, 0.17149000E+1, 0.31739060E+3, 0.283E+3, 0.128E+3, 0.19655000E+1, + 0.17937000E+1, 0.31302130E+3, 0.283E+3, 0.129E+3, 0.19655000E+1, 0.95760000E+0, 0.29468800E+3, + 0.283E+3, 0.130E+3, 0.19655000E+1, 0.19419000E+1, 0.47779970E+3, 0.283E+3, 0.131E+3, + 0.19655000E+1, 0.96010000E+0, 0.42144820E+3, 0.283E+3, 0.132E+3, 0.19655000E+1, 0.94340000E+0, + 0.37886260E+3, 0.283E+3, 0.133E+3, 0.19655000E+1, 0.98890000E+0, 0.34667280E+3, 0.283E+3, + 0.134E+3, 0.19655000E+1, 0.99010000E+0, 0.30608650E+3, 0.283E+3, 0.135E+3, 0.19655000E+1, + 0.99740000E+0, 0.50534960E+3, 0.283E+3, 0.137E+3, 0.19655000E+1, 0.97380000E+0, 0.97364740E+3, + 0.283E+3, 0.138E+3, 0.19655000E+1, 0.98010000E+0, 0.74962580E+3, 0.283E+3, 0.139E+3, + 0.19655000E+1, 0.19153000E+1, 0.56197920E+3, 0.283E+3, 0.140E+3, 0.19655000E+1, 0.19355000E+1, + 0.56751500E+3, 0.283E+3, 0.141E+3, 0.19655000E+1, 0.19545000E+1, 0.52972340E+3, 0.283E+3, + 0.142E+3, 0.19655000E+1, 0.19420000E+1, 0.59210620E+3, 0.283E+3, 0.143E+3, 0.19655000E+1, + 0.16682000E+1, 0.46293930E+3, 0.283E+3, 0.144E+3, 0.19655000E+1, 0.18584000E+1, 0.43325010E+3, + 0.283E+3, 0.145E+3, 0.19655000E+1, 0.19003000E+1, 0.40255460E+3, 0.283E+3, 0.146E+3, + 0.19655000E+1, 0.18630000E+1, 0.38932060E+3, 0.283E+3, 0.147E+3, 0.19655000E+1, 0.96790000E+0, + 0.38581270E+3, 0.283E+3, 0.148E+3, 0.19655000E+1, 0.19539000E+1, 0.60715180E+3, 0.283E+3, + 0.149E+3, 0.19655000E+1, 0.96330000E+0, 0.55119600E+3, 0.283E+3, 0.150E+3, 0.19655000E+1, + 0.95140000E+0, 0.51744360E+3, 0.283E+3, 0.151E+3, 0.19655000E+1, 0.97490000E+0, 0.49028150E+3, + 0.283E+3, 0.152E+3, 0.19655000E+1, 0.98110000E+0, 0.44864430E+3, 0.283E+3, 0.153E+3, + 0.19655000E+1, 0.99680000E+0, 0.59907190E+3, 0.283E+3, 0.155E+3, 0.19655000E+1, 0.99090000E+0, + 0.12605537E+4, 0.283E+3, 0.156E+3, 0.19655000E+1, 0.97970000E+0, 0.94816680E+3, 0.283E+3, + 0.157E+3, 0.19655000E+1, 0.19373000E+1, 0.60443760E+3, 0.283E+3, 0.159E+3, 0.19655000E+1, + 0.29425000E+1, 0.59196230E+3, 0.283E+3, 0.160E+3, 0.19655000E+1, 0.29455000E+1, 0.57330320E+3, + 0.283E+3, 0.161E+3, 0.19655000E+1, 0.29413000E+1, 0.57583010E+3, 0.283E+3, 0.162E+3, + 0.19655000E+1, 0.29300000E+1, 0.55423280E+3, 0.283E+3, 0.163E+3, 0.19655000E+1, 0.18286000E+1, + 0.57935270E+3, 0.283E+3, 0.164E+3, 0.19655000E+1, 0.28732000E+1, 0.54441580E+3, 0.283E+3, + 0.165E+3, 0.19655000E+1, 0.29086000E+1, 0.55345320E+3, 0.283E+3, 0.166E+3, 0.19655000E+1, + 0.28965000E+1, 0.51696070E+3, 0.283E+3, 0.167E+3, 0.19655000E+1, 0.29242000E+1, 0.50231200E+3, + 0.283E+3, 0.168E+3, 0.19655000E+1, 0.29282000E+1, 0.49901960E+3, 0.283E+3, 0.169E+3, + 0.19655000E+1, 0.29246000E+1, 0.52412520E+3, 0.283E+3, 0.170E+3, 0.19655000E+1, 0.28482000E+1, + 0.48244240E+3, 0.283E+3, 0.171E+3, 0.19655000E+1, 0.29219000E+1, 0.64975910E+3, 0.283E+3, + 0.172E+3, 0.19655000E+1, 0.19254000E+1, 0.60428050E+3, 0.283E+3, 0.173E+3, 0.19655000E+1, + 0.19459000E+1, 0.55254180E+3, 0.283E+3, 0.174E+3, 0.19655000E+1, 0.19292000E+1, 0.55811920E+3, + 0.283E+3, 0.175E+3, 0.19655000E+1, 0.18104000E+1, 0.49092230E+3, 0.283E+3, 0.176E+3, + 0.19655000E+1, 0.18858000E+1, 0.46222330E+3, 0.283E+3, 0.177E+3, 0.19655000E+1, 0.18648000E+1, + 0.44172420E+3, 0.283E+3, 0.178E+3, 0.19655000E+1, 0.19188000E+1, 0.42235490E+3, 0.283E+3, + 0.179E+3, 0.19655000E+1, 0.98460000E+0, 0.40877310E+3, 0.283E+3, 0.180E+3, 0.19655000E+1, + 0.19896000E+1, 0.65249230E+3, 0.283E+3, 0.181E+3, 0.19655000E+1, 0.92670000E+0, 0.59673810E+3, + 0.283E+3, 0.182E+3, 0.19655000E+1, 0.93830000E+0, 0.57973290E+3, 0.283E+3, 0.183E+3, + 0.19655000E+1, 0.98200000E+0, 0.56455350E+3, 0.283E+3, 0.184E+3, 0.19655000E+1, 0.98150000E+0, + 0.52811830E+3, 0.283E+3, 0.185E+3, 0.19655000E+1, 0.99540000E+0, 0.67482210E+3, 0.283E+3, + 0.187E+3, 0.19655000E+1, 0.97050000E+0, 0.12567278E+4, 0.283E+3, 0.188E+3, 0.19655000E+1, + 0.96620000E+0, 0.71513070E+3, 0.283E+3, 0.189E+3, 0.19655000E+1, 0.29070000E+1, 0.82307590E+3, + 0.283E+3, 0.190E+3, 0.19655000E+1, 0.28844000E+1, 0.73672690E+3, 0.283E+3, 0.191E+3, + 0.19655000E+1, 0.28738000E+1, 0.65261520E+3, 0.283E+3, 0.192E+3, 0.19655000E+1, 0.28878000E+1, + 0.62834540E+3, 0.283E+3, 0.193E+3, 0.19655000E+1, 0.29095000E+1, 0.75123490E+3, 0.283E+3, + 0.194E+3, 0.19655000E+1, 0.19209000E+1, 0.17590820E+3, 0.283E+3, 0.204E+3, 0.19655000E+1, + 0.19697000E+1, 0.17315440E+3, 0.283E+3, 0.205E+3, 0.19655000E+1, 0.19441000E+1, 0.12738320E+3, + 0.283E+3, 0.206E+3, 0.19655000E+1, 0.19985000E+1, 0.10231260E+3, 0.283E+3, 0.207E+3, + 0.19655000E+1, 0.20143000E+1, 0.70396100E+2, 0.283E+3, 0.208E+3, 0.19655000E+1, 0.19887000E+1, + 0.31101430E+3, 0.283E+3, 0.212E+3, 0.19655000E+1, 0.19496000E+1, 0.37562900E+3, 0.283E+3, + 0.213E+3, 0.19655000E+1, 0.19311000E+1, 0.36130250E+3, 0.283E+3, 0.214E+3, 0.19655000E+1, + 0.19435000E+1, 0.31474790E+3, 0.283E+3, 0.215E+3, 0.19655000E+1, 0.20102000E+1, 0.26518320E+3, + 0.283E+3, 0.216E+3, 0.19655000E+1, 0.19903000E+1, 0.43613820E+3, 0.283E+3, 0.220E+3, + 0.19655000E+1, 0.19349000E+1, 0.42000450E+3, 0.283E+3, 0.221E+3, 0.19655000E+1, 0.28999000E+1, + 0.42525490E+3, 0.283E+3, 0.222E+3, 0.19655000E+1, 0.38675000E+1, 0.38922030E+3, 0.283E+3, + 0.223E+3, 0.19655000E+1, 0.29110000E+1, 0.29426590E+3, 0.283E+3, 0.224E+3, 0.19655000E+1, + 0.10619100E+2, 0.25234820E+3, 0.283E+3, 0.225E+3, 0.19655000E+1, 0.98849000E+1, 0.24765980E+3, + 0.283E+3, 0.226E+3, 0.19655000E+1, 0.91376000E+1, 0.28933940E+3, 0.283E+3, 0.227E+3, + 0.19655000E+1, 0.29263000E+1, 0.26984110E+3, 0.283E+3, 0.228E+3, 0.19655000E+1, 0.65458000E+1, + 0.38000030E+3, 0.283E+3, 0.231E+3, 0.19655000E+1, 0.19315000E+1, 0.40150980E+3, 0.283E+3, + 0.232E+3, 0.19655000E+1, 0.19447000E+1, 0.36905850E+3, 0.283E+3, 0.233E+3, 0.19655000E+1, + 0.19793000E+1, 0.34397610E+3, 0.283E+3, 0.234E+3, 0.19655000E+1, 0.19812000E+1, 0.52267140E+3, + 0.283E+3, 0.238E+3, 0.19655000E+1, 0.19143000E+1, 0.50441040E+3, 0.283E+3, 0.239E+3, + 0.19655000E+1, 0.28903000E+1, 0.50913000E+3, 0.283E+3, 0.240E+3, 0.19655000E+1, 0.39106000E+1, + 0.49230130E+3, 0.283E+3, 0.241E+3, 0.19655000E+1, 0.29225000E+1, 0.43628420E+3, 0.283E+3, + 0.242E+3, 0.19655000E+1, 0.11055600E+2, 0.38581740E+3, 0.283E+3, 0.243E+3, 0.19655000E+1, + 0.95402000E+1, 0.36486800E+3, 0.283E+3, 0.244E+3, 0.19655000E+1, 0.88895000E+1, 0.37099700E+3, + 0.283E+3, 0.245E+3, 0.19655000E+1, 0.29696000E+1, 0.38733000E+3, 0.283E+3, 0.246E+3, + 0.19655000E+1, 0.57095000E+1, 0.49068810E+3, 0.283E+3, 0.249E+3, 0.19655000E+1, 0.19378000E+1, + 0.53323730E+3, 0.283E+3, 0.250E+3, 0.19655000E+1, 0.19505000E+1, 0.50351030E+3, 0.283E+3, + 0.251E+3, 0.19655000E+1, 0.19523000E+1, 0.48640400E+3, 0.283E+3, 0.252E+3, 0.19655000E+1, + 0.19639000E+1, 0.63257940E+3, 0.283E+3, 0.256E+3, 0.19655000E+1, 0.18467000E+1, 0.65653900E+3, + 0.283E+3, 0.257E+3, 0.19655000E+1, 0.29175000E+1, 0.48797410E+3, 0.283E+3, 0.272E+3, + 0.19655000E+1, 0.38840000E+1, 0.50923540E+3, 0.283E+3, 0.273E+3, 0.19655000E+1, 0.28988000E+1, + 0.47403980E+3, 0.283E+3, 0.274E+3, 0.19655000E+1, 0.10915300E+2, 0.43128970E+3, 0.283E+3, + 0.275E+3, 0.19655000E+1, 0.98054000E+1, 0.40628510E+3, 0.283E+3, 0.276E+3, 0.19655000E+1, + 0.91527000E+1, 0.41359970E+3, 0.283E+3, 0.277E+3, 0.19655000E+1, 0.29424000E+1, 0.43491300E+3, + 0.283E+3, 0.278E+3, 0.19655000E+1, 0.66669000E+1, 0.52503950E+3, 0.283E+3, 0.281E+3, + 0.19655000E+1, 0.19302000E+1, 0.55492310E+3, 0.283E+3, 0.282E+3, 0.19655000E+1, 0.19356000E+1, + 0.56604970E+3, 0.283E+3, 0.283E+3, 0.19655000E+1, 0.19655000E+1, 0.40683500E+2, 0.284E+3, + 0.100E+1, 0.19639000E+1, 0.91180000E+0, 0.27269000E+2, 0.284E+3, 0.200E+1, 0.19639000E+1, + 0.00000000E+0, 0.59704830E+3, 0.284E+3, 0.300E+1, 0.19639000E+1, 0.00000000E+0, 0.35412790E+3, + 0.284E+3, 0.400E+1, 0.19639000E+1, 0.00000000E+0, 0.24207220E+3, 0.284E+3, 0.500E+1, + 0.19639000E+1, 0.00000000E+0, 0.16537510E+3, 0.284E+3, 0.600E+1, 0.19639000E+1, 0.00000000E+0, + 0.11663660E+3, 0.284E+3, 0.700E+1, 0.19639000E+1, 0.00000000E+0, 0.88864100E+2, 0.284E+3, + 0.800E+1, 0.19639000E+1, 0.00000000E+0, 0.67699200E+2, 0.284E+3, 0.900E+1, 0.19639000E+1, + 0.00000000E+0, 0.52323700E+2, 0.284E+3, 0.100E+2, 0.19639000E+1, 0.00000000E+0, 0.71529180E+3, + 0.284E+3, 0.110E+2, 0.19639000E+1, 0.00000000E+0, 0.56173090E+3, 0.284E+3, 0.120E+2, + 0.19639000E+1, 0.00000000E+0, 0.52182740E+3, 0.284E+3, 0.130E+2, 0.19639000E+1, 0.00000000E+0, + 0.41539360E+3, 0.284E+3, 0.140E+2, 0.19639000E+1, 0.00000000E+0, 0.32669480E+3, 0.284E+3, + 0.150E+2, 0.19639000E+1, 0.00000000E+0, 0.27264470E+3, 0.284E+3, 0.160E+2, 0.19639000E+1, + 0.00000000E+0, 0.22390350E+3, 0.284E+3, 0.170E+2, 0.19639000E+1, 0.00000000E+0, 0.18404790E+3, + 0.284E+3, 0.180E+2, 0.19639000E+1, 0.00000000E+0, 0.11685636E+4, 0.284E+3, 0.190E+2, + 0.19639000E+1, 0.00000000E+0, 0.97928960E+3, 0.284E+3, 0.200E+2, 0.19639000E+1, 0.00000000E+0, + 0.81191130E+3, 0.284E+3, 0.210E+2, 0.19639000E+1, 0.00000000E+0, 0.78675610E+3, 0.284E+3, + 0.220E+2, 0.19639000E+1, 0.00000000E+0, 0.72192550E+3, 0.284E+3, 0.230E+2, 0.19639000E+1, + 0.00000000E+0, 0.56923970E+3, 0.284E+3, 0.240E+2, 0.19639000E+1, 0.00000000E+0, 0.62340350E+3, + 0.284E+3, 0.250E+2, 0.19639000E+1, 0.00000000E+0, 0.48993540E+3, 0.284E+3, 0.260E+2, + 0.19639000E+1, 0.00000000E+0, 0.52113280E+3, 0.284E+3, 0.270E+2, 0.19639000E+1, 0.00000000E+0, + 0.53572570E+3, 0.284E+3, 0.280E+2, 0.19639000E+1, 0.00000000E+0, 0.41114170E+3, 0.284E+3, + 0.290E+2, 0.19639000E+1, 0.00000000E+0, 0.42443520E+3, 0.284E+3, 0.300E+2, 0.19639000E+1, + 0.00000000E+0, 0.50154410E+3, 0.284E+3, 0.310E+2, 0.19639000E+1, 0.00000000E+0, 0.44570000E+3, + 0.284E+3, 0.320E+2, 0.19639000E+1, 0.00000000E+0, 0.38280030E+3, 0.284E+3, 0.330E+2, + 0.19639000E+1, 0.00000000E+0, 0.34497610E+3, 0.284E+3, 0.340E+2, 0.19639000E+1, 0.00000000E+0, + 0.30323440E+3, 0.284E+3, 0.350E+2, 0.19639000E+1, 0.00000000E+0, 0.26479090E+3, 0.284E+3, + 0.360E+2, 0.19639000E+1, 0.00000000E+0, 0.13118379E+4, 0.284E+3, 0.370E+2, 0.19639000E+1, + 0.00000000E+0, 0.11663270E+4, 0.284E+3, 0.380E+2, 0.19639000E+1, 0.00000000E+0, 0.10280879E+4, + 0.284E+3, 0.390E+2, 0.19639000E+1, 0.00000000E+0, 0.92765740E+3, 0.284E+3, 0.400E+2, + 0.19639000E+1, 0.00000000E+0, 0.84816650E+3, 0.284E+3, 0.410E+2, 0.19639000E+1, 0.00000000E+0, + 0.65796520E+3, 0.284E+3, 0.420E+2, 0.19639000E+1, 0.00000000E+0, 0.73282990E+3, 0.284E+3, + 0.430E+2, 0.19639000E+1, 0.00000000E+0, 0.56123130E+3, 0.284E+3, 0.440E+2, 0.19639000E+1, + 0.00000000E+0, 0.61320640E+3, 0.284E+3, 0.450E+2, 0.19639000E+1, 0.00000000E+0, 0.56959290E+3, + 0.284E+3, 0.460E+2, 0.19639000E+1, 0.00000000E+0, 0.47485530E+3, 0.284E+3, 0.470E+2, + 0.19639000E+1, 0.00000000E+0, 0.50299460E+3, 0.284E+3, 0.480E+2, 0.19639000E+1, 0.00000000E+0, + 0.62793100E+3, 0.284E+3, 0.490E+2, 0.19639000E+1, 0.00000000E+0, 0.58416010E+3, 0.284E+3, + 0.500E+2, 0.19639000E+1, 0.00000000E+0, 0.52370500E+3, 0.284E+3, 0.510E+2, 0.19639000E+1, + 0.00000000E+0, 0.48765620E+3, 0.284E+3, 0.520E+2, 0.19639000E+1, 0.00000000E+0, 0.44264170E+3, + 0.284E+3, 0.530E+2, 0.19639000E+1, 0.00000000E+0, 0.39942590E+3, 0.284E+3, 0.540E+2, + 0.19639000E+1, 0.00000000E+0, 0.15989091E+4, 0.284E+3, 0.550E+2, 0.19639000E+1, 0.00000000E+0, + 0.14842030E+4, 0.284E+3, 0.560E+2, 0.19639000E+1, 0.00000000E+0, 0.13119805E+4, 0.284E+3, + 0.570E+2, 0.19639000E+1, 0.00000000E+0, 0.61810270E+3, 0.284E+3, 0.580E+2, 0.19639000E+1, + 0.27991000E+1, 0.13179599E+4, 0.284E+3, 0.590E+2, 0.19639000E+1, 0.00000000E+0, 0.12667956E+4, + 0.284E+3, 0.600E+2, 0.19639000E+1, 0.00000000E+0, 0.12353557E+4, 0.284E+3, 0.610E+2, + 0.19639000E+1, 0.00000000E+0, 0.12064001E+4, 0.284E+3, 0.620E+2, 0.19639000E+1, 0.00000000E+0, + 0.11807346E+4, 0.284E+3, 0.630E+2, 0.19639000E+1, 0.00000000E+0, 0.93518300E+3, 0.284E+3, + 0.640E+2, 0.19639000E+1, 0.00000000E+0, 0.10429069E+4, 0.284E+3, 0.650E+2, 0.19639000E+1, + 0.00000000E+0, 0.10070657E+4, 0.284E+3, 0.660E+2, 0.19639000E+1, 0.00000000E+0, 0.10665471E+4, + 0.284E+3, 0.670E+2, 0.19639000E+1, 0.00000000E+0, 0.10440654E+4, 0.284E+3, 0.680E+2, + 0.19639000E+1, 0.00000000E+0, 0.10238793E+4, 0.284E+3, 0.690E+2, 0.19639000E+1, 0.00000000E+0, + 0.10115941E+4, 0.284E+3, 0.700E+2, 0.19639000E+1, 0.00000000E+0, 0.85651120E+3, 0.284E+3, + 0.710E+2, 0.19639000E+1, 0.00000000E+0, 0.84744200E+3, 0.284E+3, 0.720E+2, 0.19639000E+1, + 0.00000000E+0, 0.77639170E+3, 0.284E+3, 0.730E+2, 0.19639000E+1, 0.00000000E+0, 0.65782210E+3, + 0.284E+3, 0.740E+2, 0.19639000E+1, 0.00000000E+0, 0.67012730E+3, 0.284E+3, 0.750E+2, + 0.19639000E+1, 0.00000000E+0, 0.60937170E+3, 0.284E+3, 0.760E+2, 0.19639000E+1, 0.00000000E+0, + 0.55959870E+3, 0.284E+3, 0.770E+2, 0.19639000E+1, 0.00000000E+0, 0.46635070E+3, 0.284E+3, + 0.780E+2, 0.19639000E+1, 0.00000000E+0, 0.43627520E+3, 0.284E+3, 0.790E+2, 0.19639000E+1, + 0.00000000E+0, 0.44926040E+3, 0.284E+3, 0.800E+2, 0.19639000E+1, 0.00000000E+0, 0.64607450E+3, + 0.284E+3, 0.810E+2, 0.19639000E+1, 0.00000000E+0, 0.63450740E+3, 0.284E+3, 0.820E+2, + 0.19639000E+1, 0.00000000E+0, 0.58610180E+3, 0.284E+3, 0.830E+2, 0.19639000E+1, 0.00000000E+0, + 0.56069830E+3, 0.284E+3, 0.840E+2, 0.19639000E+1, 0.00000000E+0, 0.51936900E+3, 0.284E+3, + 0.850E+2, 0.19639000E+1, 0.00000000E+0, 0.47763150E+3, 0.284E+3, 0.860E+2, 0.19639000E+1, + 0.00000000E+0, 0.15173140E+4, 0.284E+3, 0.870E+2, 0.19639000E+1, 0.00000000E+0, 0.14724510E+4, + 0.284E+3, 0.880E+2, 0.19639000E+1, 0.00000000E+0, 0.13089597E+4, 0.284E+3, 0.890E+2, + 0.19639000E+1, 0.00000000E+0, 0.11841644E+4, 0.284E+3, 0.900E+2, 0.19639000E+1, 0.00000000E+0, + 0.11721895E+4, 0.284E+3, 0.910E+2, 0.19639000E+1, 0.00000000E+0, 0.11351989E+4, 0.284E+3, + 0.920E+2, 0.19639000E+1, 0.00000000E+0, 0.11641193E+4, 0.284E+3, 0.930E+2, 0.19639000E+1, + 0.00000000E+0, 0.11281520E+4, 0.284E+3, 0.940E+2, 0.19639000E+1, 0.00000000E+0, 0.64976000E+2, + 0.284E+3, 0.101E+3, 0.19639000E+1, 0.00000000E+0, 0.20631430E+3, 0.284E+3, 0.103E+3, + 0.19639000E+1, 0.98650000E+0, 0.26393510E+3, 0.284E+3, 0.104E+3, 0.19639000E+1, 0.98080000E+0, + 0.20426390E+3, 0.284E+3, 0.105E+3, 0.19639000E+1, 0.97060000E+0, 0.15510600E+3, 0.284E+3, + 0.106E+3, 0.19639000E+1, 0.98680000E+0, 0.10879270E+3, 0.284E+3, 0.107E+3, 0.19639000E+1, + 0.99440000E+0, 0.79818800E+2, 0.284E+3, 0.108E+3, 0.19639000E+1, 0.99250000E+0, 0.55426400E+2, + 0.284E+3, 0.109E+3, 0.19639000E+1, 0.99820000E+0, 0.30093900E+3, 0.284E+3, 0.111E+3, + 0.19639000E+1, 0.96840000E+0, 0.46475070E+3, 0.284E+3, 0.112E+3, 0.19639000E+1, 0.96280000E+0, + 0.47382140E+3, 0.284E+3, 0.113E+3, 0.19639000E+1, 0.96480000E+0, 0.38451100E+3, 0.284E+3, + 0.114E+3, 0.19639000E+1, 0.95070000E+0, 0.31721920E+3, 0.284E+3, 0.115E+3, 0.19639000E+1, + 0.99470000E+0, 0.26961720E+3, 0.284E+3, 0.116E+3, 0.19639000E+1, 0.99480000E+0, 0.22156890E+3, + 0.284E+3, 0.117E+3, 0.19639000E+1, 0.99720000E+0, 0.41756030E+3, 0.284E+3, 0.119E+3, + 0.19639000E+1, 0.97670000E+0, 0.78439170E+3, 0.284E+3, 0.120E+3, 0.19639000E+1, 0.98310000E+0, + 0.42082330E+3, 0.284E+3, 0.121E+3, 0.19639000E+1, 0.18627000E+1, 0.40643450E+3, 0.284E+3, + 0.122E+3, 0.19639000E+1, 0.18299000E+1, 0.39827910E+3, 0.284E+3, 0.123E+3, 0.19639000E+1, + 0.19138000E+1, 0.39424420E+3, 0.284E+3, 0.124E+3, 0.19639000E+1, 0.18269000E+1, 0.36438140E+3, + 0.284E+3, 0.125E+3, 0.19639000E+1, 0.16406000E+1, 0.33772700E+3, 0.284E+3, 0.126E+3, + 0.19639000E+1, 0.16483000E+1, 0.32221420E+3, 0.284E+3, 0.127E+3, 0.19639000E+1, 0.17149000E+1, + 0.31490220E+3, 0.284E+3, 0.128E+3, 0.19639000E+1, 0.17937000E+1, 0.31008700E+3, 0.284E+3, + 0.129E+3, 0.19639000E+1, 0.95760000E+0, 0.29273330E+3, 0.284E+3, 0.130E+3, 0.19639000E+1, + 0.19419000E+1, 0.47199570E+3, 0.284E+3, 0.131E+3, 0.19639000E+1, 0.96010000E+0, 0.41772680E+3, + 0.284E+3, 0.132E+3, 0.19639000E+1, 0.94340000E+0, 0.37646650E+3, 0.284E+3, 0.133E+3, + 0.19639000E+1, 0.98890000E+0, 0.34508980E+3, 0.284E+3, 0.134E+3, 0.19639000E+1, 0.99010000E+0, + 0.30527830E+3, 0.284E+3, 0.135E+3, 0.19639000E+1, 0.99740000E+0, 0.49917560E+3, 0.284E+3, + 0.137E+3, 0.19639000E+1, 0.97380000E+0, 0.95388690E+3, 0.284E+3, 0.138E+3, 0.19639000E+1, + 0.98010000E+0, 0.73824840E+3, 0.284E+3, 0.139E+3, 0.19639000E+1, 0.19153000E+1, 0.55634680E+3, + 0.284E+3, 0.140E+3, 0.19639000E+1, 0.19355000E+1, 0.56177040E+3, 0.284E+3, 0.141E+3, + 0.19639000E+1, 0.19545000E+1, 0.52477420E+3, 0.284E+3, 0.142E+3, 0.19639000E+1, 0.19420000E+1, + 0.58512270E+3, 0.284E+3, 0.143E+3, 0.19639000E+1, 0.16682000E+1, 0.45947870E+3, 0.284E+3, + 0.144E+3, 0.19639000E+1, 0.18584000E+1, 0.43011170E+3, 0.284E+3, 0.145E+3, 0.19639000E+1, + 0.19003000E+1, 0.39979630E+3, 0.284E+3, 0.146E+3, 0.19639000E+1, 0.18630000E+1, 0.38652800E+3, + 0.284E+3, 0.147E+3, 0.19639000E+1, 0.96790000E+0, 0.38357630E+3, 0.284E+3, 0.148E+3, + 0.19639000E+1, 0.19539000E+1, 0.59985960E+3, 0.284E+3, 0.149E+3, 0.19639000E+1, 0.96330000E+0, + 0.54609180E+3, 0.284E+3, 0.150E+3, 0.19639000E+1, 0.95140000E+0, 0.51367970E+3, 0.284E+3, + 0.151E+3, 0.19639000E+1, 0.97490000E+0, 0.48740710E+3, 0.284E+3, 0.152E+3, 0.19639000E+1, + 0.98110000E+0, 0.44676180E+3, 0.284E+3, 0.153E+3, 0.19639000E+1, 0.99680000E+0, 0.59303760E+3, + 0.284E+3, 0.155E+3, 0.19639000E+1, 0.99090000E+0, 0.12339967E+4, 0.284E+3, 0.156E+3, + 0.19639000E+1, 0.97970000E+0, 0.93345900E+3, 0.284E+3, 0.157E+3, 0.19639000E+1, 0.19373000E+1, + 0.59968400E+3, 0.284E+3, 0.159E+3, 0.19639000E+1, 0.29425000E+1, 0.58732120E+3, 0.284E+3, + 0.160E+3, 0.19639000E+1, 0.29455000E+1, 0.56888850E+3, 0.284E+3, 0.161E+3, 0.19639000E+1, + 0.29413000E+1, 0.57117360E+3, 0.284E+3, 0.162E+3, 0.19639000E+1, 0.29300000E+1, 0.54902970E+3, + 0.284E+3, 0.163E+3, 0.19639000E+1, 0.18286000E+1, 0.57457480E+3, 0.284E+3, 0.164E+3, + 0.19639000E+1, 0.28732000E+1, 0.54011010E+3, 0.284E+3, 0.165E+3, 0.19639000E+1, 0.29086000E+1, + 0.54869770E+3, 0.284E+3, 0.166E+3, 0.19639000E+1, 0.28965000E+1, 0.51304540E+3, 0.284E+3, + 0.167E+3, 0.19639000E+1, 0.29242000E+1, 0.49857190E+3, 0.284E+3, 0.168E+3, 0.19639000E+1, + 0.29282000E+1, 0.49524940E+3, 0.284E+3, 0.169E+3, 0.19639000E+1, 0.29246000E+1, 0.51984050E+3, + 0.284E+3, 0.170E+3, 0.19639000E+1, 0.28482000E+1, 0.47888930E+3, 0.284E+3, 0.171E+3, + 0.19639000E+1, 0.29219000E+1, 0.64207210E+3, 0.284E+3, 0.172E+3, 0.19639000E+1, 0.19254000E+1, + 0.59809800E+3, 0.284E+3, 0.173E+3, 0.19639000E+1, 0.19459000E+1, 0.54779890E+3, 0.284E+3, + 0.174E+3, 0.19639000E+1, 0.19292000E+1, 0.55252070E+3, 0.284E+3, 0.175E+3, 0.19639000E+1, + 0.18104000E+1, 0.48785140E+3, 0.284E+3, 0.176E+3, 0.19639000E+1, 0.18858000E+1, 0.45960480E+3, + 0.284E+3, 0.177E+3, 0.19639000E+1, 0.18648000E+1, 0.43937670E+3, 0.284E+3, 0.178E+3, + 0.19639000E+1, 0.19188000E+1, 0.42009830E+3, 0.284E+3, 0.179E+3, 0.19639000E+1, 0.98460000E+0, + 0.40712160E+3, 0.284E+3, 0.180E+3, 0.19639000E+1, 0.19896000E+1, 0.64511470E+3, 0.284E+3, + 0.181E+3, 0.19639000E+1, 0.92670000E+0, 0.59155410E+3, 0.284E+3, 0.182E+3, 0.19639000E+1, + 0.93830000E+0, 0.57553810E+3, 0.284E+3, 0.183E+3, 0.19639000E+1, 0.98200000E+0, 0.56108050E+3, + 0.284E+3, 0.184E+3, 0.19639000E+1, 0.98150000E+0, 0.52566240E+3, 0.284E+3, 0.185E+3, + 0.19639000E+1, 0.99540000E+0, 0.66813180E+3, 0.284E+3, 0.187E+3, 0.19639000E+1, 0.97050000E+0, + 0.12322448E+4, 0.284E+3, 0.188E+3, 0.19639000E+1, 0.96620000E+0, 0.70944400E+3, 0.284E+3, + 0.189E+3, 0.19639000E+1, 0.29070000E+1, 0.81473780E+3, 0.284E+3, 0.190E+3, 0.19639000E+1, + 0.28844000E+1, 0.72995170E+3, 0.284E+3, 0.191E+3, 0.19639000E+1, 0.28738000E+1, 0.64769500E+3, + 0.284E+3, 0.192E+3, 0.19639000E+1, 0.28878000E+1, 0.62385580E+3, 0.284E+3, 0.193E+3, + 0.19639000E+1, 0.29095000E+1, 0.74228920E+3, 0.284E+3, 0.194E+3, 0.19639000E+1, 0.19209000E+1, + 0.17455350E+3, 0.284E+3, 0.204E+3, 0.19639000E+1, 0.19697000E+1, 0.17202380E+3, 0.284E+3, + 0.205E+3, 0.19639000E+1, 0.19441000E+1, 0.12705660E+3, 0.284E+3, 0.206E+3, 0.19639000E+1, + 0.19985000E+1, 0.10226240E+3, 0.284E+3, 0.207E+3, 0.19639000E+1, 0.20143000E+1, 0.70592600E+2, + 0.284E+3, 0.208E+3, 0.19639000E+1, 0.19887000E+1, 0.30770750E+3, 0.284E+3, 0.212E+3, + 0.19639000E+1, 0.19496000E+1, 0.37155110E+3, 0.284E+3, 0.213E+3, 0.19639000E+1, 0.19311000E+1, + 0.35816390E+3, 0.284E+3, 0.214E+3, 0.19639000E+1, 0.19435000E+1, 0.31278040E+3, 0.284E+3, + 0.215E+3, 0.19639000E+1, 0.20102000E+1, 0.26420220E+3, 0.284E+3, 0.216E+3, 0.19639000E+1, + 0.19903000E+1, 0.43156730E+3, 0.284E+3, 0.220E+3, 0.19639000E+1, 0.19349000E+1, 0.41632140E+3, + 0.284E+3, 0.221E+3, 0.19639000E+1, 0.28999000E+1, 0.42158300E+3, 0.284E+3, 0.222E+3, + 0.19639000E+1, 0.38675000E+1, 0.38584400E+3, 0.284E+3, 0.223E+3, 0.19639000E+1, 0.29110000E+1, + 0.29255420E+3, 0.284E+3, 0.224E+3, 0.19639000E+1, 0.10619100E+2, 0.25131440E+3, 0.284E+3, + 0.225E+3, 0.19639000E+1, 0.98849000E+1, 0.24658940E+3, 0.284E+3, 0.226E+3, 0.19639000E+1, + 0.91376000E+1, 0.28727800E+3, 0.284E+3, 0.227E+3, 0.19639000E+1, 0.29263000E+1, 0.26812740E+3, + 0.284E+3, 0.228E+3, 0.19639000E+1, 0.65458000E+1, 0.37653350E+3, 0.284E+3, 0.231E+3, + 0.19639000E+1, 0.19315000E+1, 0.39818770E+3, 0.284E+3, 0.232E+3, 0.19639000E+1, 0.19447000E+1, + 0.36684470E+3, 0.284E+3, 0.233E+3, 0.19639000E+1, 0.19793000E+1, 0.34242490E+3, 0.284E+3, + 0.234E+3, 0.19639000E+1, 0.19812000E+1, 0.51736980E+3, 0.284E+3, 0.238E+3, 0.19639000E+1, + 0.19143000E+1, 0.50039000E+3, 0.284E+3, 0.239E+3, 0.19639000E+1, 0.28903000E+1, 0.50540540E+3, + 0.284E+3, 0.240E+3, 0.19639000E+1, 0.39106000E+1, 0.48864930E+3, 0.284E+3, 0.241E+3, + 0.19639000E+1, 0.29225000E+1, 0.43386770E+3, 0.284E+3, 0.242E+3, 0.19639000E+1, 0.11055600E+2, + 0.38425630E+3, 0.284E+3, 0.243E+3, 0.19639000E+1, 0.95402000E+1, 0.36358980E+3, 0.284E+3, + 0.244E+3, 0.19639000E+1, 0.88895000E+1, 0.36907770E+3, 0.284E+3, 0.245E+3, 0.19639000E+1, + 0.29696000E+1, 0.38510740E+3, 0.284E+3, 0.246E+3, 0.19639000E+1, 0.57095000E+1, 0.48643230E+3, + 0.284E+3, 0.249E+3, 0.19639000E+1, 0.19378000E+1, 0.52860140E+3, 0.284E+3, 0.250E+3, + 0.19639000E+1, 0.19505000E+1, 0.50008910E+3, 0.284E+3, 0.251E+3, 0.19639000E+1, 0.19523000E+1, + 0.48364170E+3, 0.284E+3, 0.252E+3, 0.19639000E+1, 0.19639000E+1, 0.62662040E+3, 0.284E+3, + 0.256E+3, 0.19639000E+1, 0.18467000E+1, 0.65103510E+3, 0.284E+3, 0.257E+3, 0.19639000E+1, + 0.29175000E+1, 0.48484790E+3, 0.284E+3, 0.272E+3, 0.19639000E+1, 0.38840000E+1, 0.50560090E+3, + 0.284E+3, 0.273E+3, 0.19639000E+1, 0.28988000E+1, 0.47147570E+3, 0.284E+3, 0.274E+3, + 0.19639000E+1, 0.10915300E+2, 0.42954230E+3, 0.284E+3, 0.275E+3, 0.19639000E+1, 0.98054000E+1, + 0.40508190E+3, 0.284E+3, 0.276E+3, 0.19639000E+1, 0.91527000E+1, 0.41178430E+3, 0.284E+3, + 0.277E+3, 0.19639000E+1, 0.29424000E+1, 0.43290980E+3, 0.284E+3, 0.278E+3, 0.19639000E+1, + 0.66669000E+1, 0.52115810E+3, 0.284E+3, 0.281E+3, 0.19639000E+1, 0.19302000E+1, 0.55085190E+3, + 0.284E+3, 0.282E+3, 0.19639000E+1, 0.19356000E+1, 0.56229090E+3, 0.284E+3, 0.283E+3, + 0.19639000E+1, 0.19655000E+1, 0.55897120E+3, 0.284E+3, 0.284E+3, 0.19639000E+1, 0.19639000E+1, + 0.49435900E+2, 0.288E+3, 0.100E+1, 0.18075000E+1, 0.91180000E+0, 0.32220500E+2, 0.288E+3, + 0.200E+1, 0.18075000E+1, 0.00000000E+0, 0.82215000E+3, 0.288E+3, 0.300E+1, 0.18075000E+1, + 0.00000000E+0, 0.45899560E+3, 0.288E+3, 0.400E+1, 0.18075000E+1, 0.00000000E+0, 0.30409170E+3, + 0.288E+3, 0.500E+1, 0.18075000E+1, 0.00000000E+0, 0.20312550E+3, 0.288E+3, 0.600E+1, + 0.18075000E+1, 0.00000000E+0, 0.14087730E+3, 0.288E+3, 0.700E+1, 0.18075000E+1, 0.00000000E+0, + 0.10603060E+3, 0.288E+3, 0.800E+1, 0.18075000E+1, 0.00000000E+0, 0.79895700E+2, 0.288E+3, + 0.900E+1, 0.18075000E+1, 0.00000000E+0, 0.61167600E+2, 0.288E+3, 0.100E+2, 0.18075000E+1, + 0.00000000E+0, 0.98096360E+3, 0.288E+3, 0.110E+2, 0.18075000E+1, 0.00000000E+0, 0.73528720E+3, + 0.288E+3, 0.120E+2, 0.18075000E+1, 0.00000000E+0, 0.67185720E+3, 0.288E+3, 0.130E+2, + 0.18075000E+1, 0.00000000E+0, 0.52330930E+3, 0.288E+3, 0.140E+2, 0.18075000E+1, 0.00000000E+0, + 0.40436880E+3, 0.288E+3, 0.150E+2, 0.18075000E+1, 0.00000000E+0, 0.33371710E+3, 0.288E+3, + 0.160E+2, 0.18075000E+1, 0.00000000E+0, 0.27114080E+3, 0.288E+3, 0.170E+2, 0.18075000E+1, + 0.00000000E+0, 0.22078740E+3, 0.288E+3, 0.180E+2, 0.18075000E+1, 0.00000000E+0, 0.16183210E+4, + 0.288E+3, 0.190E+2, 0.18075000E+1, 0.00000000E+0, 0.13060236E+4, 0.288E+3, 0.200E+2, + 0.18075000E+1, 0.00000000E+0, 0.10738645E+4, 0.288E+3, 0.210E+2, 0.18075000E+1, 0.00000000E+0, + 0.10329143E+4, 0.288E+3, 0.220E+2, 0.18075000E+1, 0.00000000E+0, 0.94357380E+3, 0.288E+3, + 0.230E+2, 0.18075000E+1, 0.00000000E+0, 0.74319420E+3, 0.288E+3, 0.240E+2, 0.18075000E+1, + 0.00000000E+0, 0.80955010E+3, 0.288E+3, 0.250E+2, 0.18075000E+1, 0.00000000E+0, 0.63499500E+3, + 0.288E+3, 0.260E+2, 0.18075000E+1, 0.00000000E+0, 0.66951560E+3, 0.288E+3, 0.270E+2, + 0.18075000E+1, 0.00000000E+0, 0.69128830E+3, 0.288E+3, 0.280E+2, 0.18075000E+1, 0.00000000E+0, + 0.53001490E+3, 0.288E+3, 0.290E+2, 0.18075000E+1, 0.00000000E+0, 0.54001980E+3, 0.288E+3, + 0.300E+2, 0.18075000E+1, 0.00000000E+0, 0.64142920E+3, 0.288E+3, 0.310E+2, 0.18075000E+1, + 0.00000000E+0, 0.56053310E+3, 0.288E+3, 0.320E+2, 0.18075000E+1, 0.00000000E+0, 0.47441890E+3, + 0.288E+3, 0.330E+2, 0.18075000E+1, 0.00000000E+0, 0.42376020E+3, 0.288E+3, 0.340E+2, + 0.18075000E+1, 0.00000000E+0, 0.36911450E+3, 0.288E+3, 0.350E+2, 0.18075000E+1, 0.00000000E+0, + 0.31963860E+3, 0.288E+3, 0.360E+2, 0.18075000E+1, 0.00000000E+0, 0.18108441E+4, 0.288E+3, + 0.370E+2, 0.18075000E+1, 0.00000000E+0, 0.15576903E+4, 0.288E+3, 0.380E+2, 0.18075000E+1, + 0.00000000E+0, 0.13534487E+4, 0.288E+3, 0.390E+2, 0.18075000E+1, 0.00000000E+0, 0.12104384E+4, + 0.288E+3, 0.400E+2, 0.18075000E+1, 0.00000000E+0, 0.11002859E+4, 0.288E+3, 0.410E+2, + 0.18075000E+1, 0.00000000E+0, 0.84497140E+3, 0.288E+3, 0.420E+2, 0.18075000E+1, 0.00000000E+0, + 0.94457550E+3, 0.288E+3, 0.430E+2, 0.18075000E+1, 0.00000000E+0, 0.71540020E+3, 0.288E+3, + 0.440E+2, 0.18075000E+1, 0.00000000E+0, 0.78173110E+3, 0.288E+3, 0.450E+2, 0.18075000E+1, + 0.00000000E+0, 0.72344940E+3, 0.288E+3, 0.460E+2, 0.18075000E+1, 0.00000000E+0, 0.60407200E+3, + 0.288E+3, 0.470E+2, 0.18075000E+1, 0.00000000E+0, 0.63577580E+3, 0.288E+3, 0.480E+2, + 0.18075000E+1, 0.00000000E+0, 0.80295170E+3, 0.288E+3, 0.490E+2, 0.18075000E+1, 0.00000000E+0, + 0.73674350E+3, 0.288E+3, 0.500E+2, 0.18075000E+1, 0.00000000E+0, 0.65189600E+3, 0.288E+3, + 0.510E+2, 0.18075000E+1, 0.00000000E+0, 0.60235480E+3, 0.288E+3, 0.520E+2, 0.18075000E+1, + 0.00000000E+0, 0.54227570E+3, 0.288E+3, 0.530E+2, 0.18075000E+1, 0.00000000E+0, 0.48556750E+3, + 0.288E+3, 0.540E+2, 0.18075000E+1, 0.00000000E+0, 0.22065294E+4, 0.288E+3, 0.550E+2, + 0.18075000E+1, 0.00000000E+0, 0.19920198E+4, 0.288E+3, 0.560E+2, 0.18075000E+1, 0.00000000E+0, + 0.17357045E+4, 0.288E+3, 0.570E+2, 0.18075000E+1, 0.00000000E+0, 0.77135460E+3, 0.288E+3, + 0.580E+2, 0.18075000E+1, 0.27991000E+1, 0.17597955E+4, 0.288E+3, 0.590E+2, 0.18075000E+1, + 0.00000000E+0, 0.16873282E+4, 0.288E+3, 0.600E+2, 0.18075000E+1, 0.00000000E+0, 0.16443172E+4, + 0.288E+3, 0.610E+2, 0.18075000E+1, 0.00000000E+0, 0.16048351E+4, 0.288E+3, 0.620E+2, + 0.18075000E+1, 0.00000000E+0, 0.15698044E+4, 0.288E+3, 0.630E+2, 0.18075000E+1, 0.00000000E+0, + 0.12237547E+4, 0.288E+3, 0.640E+2, 0.18075000E+1, 0.00000000E+0, 0.13970237E+4, 0.288E+3, + 0.650E+2, 0.18075000E+1, 0.00000000E+0, 0.13453523E+4, 0.288E+3, 0.660E+2, 0.18075000E+1, + 0.00000000E+0, 0.14127942E+4, 0.288E+3, 0.670E+2, 0.18075000E+1, 0.00000000E+0, 0.13824590E+4, + 0.288E+3, 0.680E+2, 0.18075000E+1, 0.00000000E+0, 0.13549696E+4, 0.288E+3, 0.690E+2, + 0.18075000E+1, 0.00000000E+0, 0.13395852E+4, 0.288E+3, 0.700E+2, 0.18075000E+1, 0.00000000E+0, + 0.11220389E+4, 0.288E+3, 0.710E+2, 0.18075000E+1, 0.00000000E+0, 0.10946876E+4, 0.288E+3, + 0.720E+2, 0.18075000E+1, 0.00000000E+0, 0.99428480E+3, 0.288E+3, 0.730E+2, 0.18075000E+1, + 0.00000000E+0, 0.83675230E+3, 0.288E+3, 0.740E+2, 0.18075000E+1, 0.00000000E+0, 0.84958700E+3, + 0.288E+3, 0.750E+2, 0.18075000E+1, 0.00000000E+0, 0.76688670E+3, 0.288E+3, 0.760E+2, + 0.18075000E+1, 0.00000000E+0, 0.70006410E+3, 0.288E+3, 0.770E+2, 0.18075000E+1, 0.00000000E+0, + 0.57964280E+3, 0.288E+3, 0.780E+2, 0.18075000E+1, 0.00000000E+0, 0.54079780E+3, 0.288E+3, + 0.790E+2, 0.18075000E+1, 0.00000000E+0, 0.55540190E+3, 0.288E+3, 0.800E+2, 0.18075000E+1, + 0.00000000E+0, 0.82307860E+3, 0.288E+3, 0.810E+2, 0.18075000E+1, 0.00000000E+0, 0.79969300E+3, + 0.288E+3, 0.820E+2, 0.18075000E+1, 0.00000000E+0, 0.73000700E+3, 0.288E+3, 0.830E+2, + 0.18075000E+1, 0.00000000E+0, 0.69372340E+3, 0.288E+3, 0.840E+2, 0.18075000E+1, 0.00000000E+0, + 0.63752300E+3, 0.288E+3, 0.850E+2, 0.18075000E+1, 0.00000000E+0, 0.58212360E+3, 0.288E+3, + 0.860E+2, 0.18075000E+1, 0.00000000E+0, 0.20693475E+4, 0.288E+3, 0.870E+2, 0.18075000E+1, + 0.00000000E+0, 0.19615822E+4, 0.288E+3, 0.880E+2, 0.18075000E+1, 0.00000000E+0, 0.17203415E+4, + 0.288E+3, 0.890E+2, 0.18075000E+1, 0.00000000E+0, 0.15329737E+4, 0.288E+3, 0.900E+2, + 0.18075000E+1, 0.00000000E+0, 0.15284967E+4, 0.288E+3, 0.910E+2, 0.18075000E+1, 0.00000000E+0, + 0.14796138E+4, 0.288E+3, 0.920E+2, 0.18075000E+1, 0.00000000E+0, 0.15311137E+4, 0.288E+3, + 0.930E+2, 0.18075000E+1, 0.00000000E+0, 0.14812261E+4, 0.288E+3, 0.940E+2, 0.18075000E+1, + 0.00000000E+0, 0.80304800E+2, 0.288E+3, 0.101E+3, 0.18075000E+1, 0.00000000E+0, 0.26620380E+3, + 0.288E+3, 0.103E+3, 0.18075000E+1, 0.98650000E+0, 0.33870130E+3, 0.288E+3, 0.104E+3, + 0.18075000E+1, 0.98080000E+0, 0.25501410E+3, 0.288E+3, 0.105E+3, 0.18075000E+1, 0.97060000E+0, + 0.19065070E+3, 0.288E+3, 0.106E+3, 0.18075000E+1, 0.98680000E+0, 0.13139800E+3, 0.288E+3, + 0.107E+3, 0.18075000E+1, 0.99440000E+0, 0.94990900E+2, 0.288E+3, 0.108E+3, 0.18075000E+1, + 0.99250000E+0, 0.64689400E+2, 0.288E+3, 0.109E+3, 0.18075000E+1, 0.99820000E+0, 0.39028390E+3, + 0.288E+3, 0.111E+3, 0.18075000E+1, 0.96840000E+0, 0.60479080E+3, 0.288E+3, 0.112E+3, + 0.18075000E+1, 0.96280000E+0, 0.60764500E+3, 0.288E+3, 0.113E+3, 0.18075000E+1, 0.96480000E+0, + 0.48292640E+3, 0.288E+3, 0.114E+3, 0.18075000E+1, 0.95070000E+0, 0.39240610E+3, 0.288E+3, + 0.115E+3, 0.18075000E+1, 0.99470000E+0, 0.33009010E+3, 0.288E+3, 0.116E+3, 0.18075000E+1, + 0.99480000E+0, 0.26835530E+3, 0.288E+3, 0.117E+3, 0.18075000E+1, 0.99720000E+0, 0.53522110E+3, + 0.288E+3, 0.119E+3, 0.18075000E+1, 0.97670000E+0, 0.10452655E+4, 0.288E+3, 0.120E+3, + 0.18075000E+1, 0.98310000E+0, 0.53005110E+3, 0.288E+3, 0.121E+3, 0.18075000E+1, 0.18627000E+1, + 0.51159590E+3, 0.288E+3, 0.122E+3, 0.18075000E+1, 0.18299000E+1, 0.50142290E+3, 0.288E+3, + 0.123E+3, 0.18075000E+1, 0.19138000E+1, 0.49734050E+3, 0.288E+3, 0.124E+3, 0.18075000E+1, + 0.18269000E+1, 0.45500680E+3, 0.288E+3, 0.125E+3, 0.18075000E+1, 0.16406000E+1, 0.42043750E+3, + 0.288E+3, 0.126E+3, 0.18075000E+1, 0.16483000E+1, 0.40108240E+3, 0.288E+3, 0.127E+3, + 0.18075000E+1, 0.17149000E+1, 0.39226860E+3, 0.288E+3, 0.128E+3, 0.18075000E+1, 0.17937000E+1, + 0.38915420E+3, 0.288E+3, 0.129E+3, 0.18075000E+1, 0.95760000E+0, 0.36239480E+3, 0.288E+3, + 0.130E+3, 0.18075000E+1, 0.19419000E+1, 0.60102950E+3, 0.288E+3, 0.131E+3, 0.18075000E+1, + 0.96010000E+0, 0.52334040E+3, 0.288E+3, 0.132E+3, 0.18075000E+1, 0.94340000E+0, 0.46617350E+3, + 0.288E+3, 0.133E+3, 0.18075000E+1, 0.98890000E+0, 0.42395730E+3, 0.288E+3, 0.134E+3, + 0.18075000E+1, 0.99010000E+0, 0.37177260E+3, 0.288E+3, 0.135E+3, 0.18075000E+1, 0.99740000E+0, + 0.63744040E+3, 0.288E+3, 0.137E+3, 0.18075000E+1, 0.97380000E+0, 0.12738440E+4, 0.288E+3, + 0.138E+3, 0.18075000E+1, 0.98010000E+0, 0.95836130E+3, 0.288E+3, 0.139E+3, 0.18075000E+1, + 0.19153000E+1, 0.70195430E+3, 0.288E+3, 0.140E+3, 0.18075000E+1, 0.19355000E+1, 0.70892730E+3, + 0.288E+3, 0.141E+3, 0.18075000E+1, 0.19545000E+1, 0.65979250E+3, 0.288E+3, 0.142E+3, + 0.18075000E+1, 0.19420000E+1, 0.74563430E+3, 0.288E+3, 0.143E+3, 0.18075000E+1, 0.16682000E+1, + 0.57194600E+3, 0.288E+3, 0.144E+3, 0.18075000E+1, 0.18584000E+1, 0.53479690E+3, 0.288E+3, + 0.145E+3, 0.18075000E+1, 0.19003000E+1, 0.49608770E+3, 0.288E+3, 0.146E+3, 0.18075000E+1, + 0.18630000E+1, 0.48018350E+3, 0.288E+3, 0.147E+3, 0.18075000E+1, 0.96790000E+0, 0.47304820E+3, + 0.288E+3, 0.148E+3, 0.18075000E+1, 0.19539000E+1, 0.76329290E+3, 0.288E+3, 0.149E+3, + 0.18075000E+1, 0.96330000E+0, 0.68512580E+3, 0.288E+3, 0.150E+3, 0.18075000E+1, 0.95140000E+0, + 0.63830590E+3, 0.288E+3, 0.151E+3, 0.18075000E+1, 0.97490000E+0, 0.60176620E+3, 0.288E+3, + 0.152E+3, 0.18075000E+1, 0.98110000E+0, 0.54740910E+3, 0.288E+3, 0.153E+3, 0.18075000E+1, + 0.99680000E+0, 0.74957040E+3, 0.288E+3, 0.155E+3, 0.18075000E+1, 0.99090000E+0, 0.16581771E+4, + 0.288E+3, 0.156E+3, 0.18075000E+1, 0.97970000E+0, 0.12150291E+4, 0.288E+3, 0.157E+3, + 0.18075000E+1, 0.19373000E+1, 0.74777800E+3, 0.288E+3, 0.159E+3, 0.18075000E+1, 0.29425000E+1, + 0.73224530E+3, 0.288E+3, 0.160E+3, 0.18075000E+1, 0.29455000E+1, 0.70878020E+3, 0.288E+3, + 0.161E+3, 0.18075000E+1, 0.29413000E+1, 0.71308040E+3, 0.288E+3, 0.162E+3, 0.18075000E+1, + 0.29300000E+1, 0.68979990E+3, 0.288E+3, 0.163E+3, 0.18075000E+1, 0.18286000E+1, 0.71779230E+3, + 0.288E+3, 0.164E+3, 0.18075000E+1, 0.28732000E+1, 0.67351320E+3, 0.288E+3, 0.165E+3, + 0.18075000E+1, 0.29086000E+1, 0.68677710E+3, 0.288E+3, 0.166E+3, 0.18075000E+1, 0.28965000E+1, + 0.63867240E+3, 0.288E+3, 0.167E+3, 0.18075000E+1, 0.29242000E+1, 0.62024820E+3, 0.288E+3, + 0.168E+3, 0.18075000E+1, 0.29282000E+1, 0.61643990E+3, 0.288E+3, 0.169E+3, 0.18075000E+1, + 0.29246000E+1, 0.64892260E+3, 0.288E+3, 0.170E+3, 0.18075000E+1, 0.28482000E+1, 0.59550270E+3, + 0.288E+3, 0.171E+3, 0.18075000E+1, 0.29219000E+1, 0.81802970E+3, 0.288E+3, 0.172E+3, + 0.18075000E+1, 0.19254000E+1, 0.75571890E+3, 0.288E+3, 0.173E+3, 0.18075000E+1, 0.19459000E+1, + 0.68626340E+3, 0.288E+3, 0.174E+3, 0.18075000E+1, 0.19292000E+1, 0.69723760E+3, 0.288E+3, + 0.175E+3, 0.18075000E+1, 0.18104000E+1, 0.60379550E+3, 0.288E+3, 0.176E+3, 0.18075000E+1, + 0.18858000E+1, 0.56713440E+3, 0.288E+3, 0.177E+3, 0.18075000E+1, 0.18648000E+1, 0.54115970E+3, + 0.288E+3, 0.178E+3, 0.18075000E+1, 0.19188000E+1, 0.51741800E+3, 0.288E+3, 0.179E+3, + 0.18075000E+1, 0.98460000E+0, 0.49805080E+3, 0.288E+3, 0.180E+3, 0.18075000E+1, 0.19896000E+1, + 0.81861890E+3, 0.288E+3, 0.181E+3, 0.18075000E+1, 0.92670000E+0, 0.74024200E+3, 0.288E+3, + 0.182E+3, 0.18075000E+1, 0.93830000E+0, 0.71498450E+3, 0.288E+3, 0.183E+3, 0.18075000E+1, + 0.98200000E+0, 0.69350480E+3, 0.288E+3, 0.184E+3, 0.18075000E+1, 0.98150000E+0, 0.64521980E+3, + 0.288E+3, 0.185E+3, 0.18075000E+1, 0.99540000E+0, 0.84379470E+3, 0.288E+3, 0.187E+3, + 0.18075000E+1, 0.97050000E+0, 0.16402094E+4, 0.288E+3, 0.188E+3, 0.18075000E+1, 0.96620000E+0, + 0.88501740E+3, 0.288E+3, 0.189E+3, 0.18075000E+1, 0.29070000E+1, 0.10289540E+4, 0.288E+3, + 0.190E+3, 0.18075000E+1, 0.28844000E+1, 0.91819730E+3, 0.288E+3, 0.191E+3, 0.18075000E+1, + 0.28738000E+1, 0.80643310E+3, 0.288E+3, 0.192E+3, 0.18075000E+1, 0.28878000E+1, 0.77504710E+3, + 0.288E+3, 0.193E+3, 0.18075000E+1, 0.29095000E+1, 0.94627710E+3, 0.288E+3, 0.194E+3, + 0.18075000E+1, 0.19209000E+1, 0.21752840E+3, 0.288E+3, 0.204E+3, 0.18075000E+1, 0.19697000E+1, + 0.21346830E+3, 0.288E+3, 0.205E+3, 0.18075000E+1, 0.19441000E+1, 0.15465610E+3, 0.288E+3, + 0.206E+3, 0.18075000E+1, 0.19985000E+1, 0.12319970E+3, 0.288E+3, 0.207E+3, 0.18075000E+1, + 0.20143000E+1, 0.83591200E+2, 0.288E+3, 0.208E+3, 0.18075000E+1, 0.19887000E+1, 0.38834390E+3, + 0.288E+3, 0.212E+3, 0.18075000E+1, 0.19496000E+1, 0.47010710E+3, 0.288E+3, 0.213E+3, + 0.18075000E+1, 0.19311000E+1, 0.44845450E+3, 0.288E+3, 0.214E+3, 0.18075000E+1, 0.19435000E+1, + 0.38732870E+3, 0.288E+3, 0.215E+3, 0.18075000E+1, 0.20102000E+1, 0.32337880E+3, 0.288E+3, + 0.216E+3, 0.18075000E+1, 0.19903000E+1, 0.54493370E+3, 0.288E+3, 0.220E+3, 0.18075000E+1, + 0.19349000E+1, 0.52129830E+3, 0.288E+3, 0.221E+3, 0.18075000E+1, 0.28999000E+1, 0.52752920E+3, + 0.288E+3, 0.222E+3, 0.18075000E+1, 0.38675000E+1, 0.48302220E+3, 0.288E+3, 0.223E+3, + 0.18075000E+1, 0.29110000E+1, 0.36126840E+3, 0.288E+3, 0.224E+3, 0.18075000E+1, 0.10619100E+2, + 0.30772170E+3, 0.288E+3, 0.225E+3, 0.18075000E+1, 0.98849000E+1, 0.30218010E+3, 0.288E+3, + 0.226E+3, 0.18075000E+1, 0.91376000E+1, 0.35673210E+3, 0.288E+3, 0.227E+3, 0.18075000E+1, + 0.29263000E+1, 0.33160290E+3, 0.288E+3, 0.228E+3, 0.18075000E+1, 0.65458000E+1, 0.47243170E+3, + 0.288E+3, 0.231E+3, 0.18075000E+1, 0.19315000E+1, 0.49753330E+3, 0.288E+3, 0.232E+3, + 0.18075000E+1, 0.19447000E+1, 0.45357900E+3, 0.288E+3, 0.233E+3, 0.18075000E+1, 0.19793000E+1, + 0.42057420E+3, 0.288E+3, 0.234E+3, 0.18075000E+1, 0.19812000E+1, 0.65272580E+3, 0.288E+3, + 0.238E+3, 0.18075000E+1, 0.19143000E+1, 0.62438560E+3, 0.288E+3, 0.239E+3, 0.18075000E+1, + 0.28903000E+1, 0.62866890E+3, 0.288E+3, 0.240E+3, 0.18075000E+1, 0.39106000E+1, 0.60842970E+3, + 0.288E+3, 0.241E+3, 0.18075000E+1, 0.29225000E+1, 0.53532960E+3, 0.288E+3, 0.242E+3, + 0.18075000E+1, 0.11055600E+2, 0.47069610E+3, 0.288E+3, 0.243E+3, 0.18075000E+1, 0.95402000E+1, + 0.44413890E+3, 0.288E+3, 0.244E+3, 0.18075000E+1, 0.88895000E+1, 0.45438240E+3, 0.288E+3, + 0.245E+3, 0.18075000E+1, 0.29696000E+1, 0.47518820E+3, 0.288E+3, 0.246E+3, 0.18075000E+1, + 0.57095000E+1, 0.60862900E+3, 0.288E+3, 0.249E+3, 0.18075000E+1, 0.19378000E+1, 0.66134830E+3, + 0.288E+3, 0.250E+3, 0.18075000E+1, 0.19505000E+1, 0.62001070E+3, 0.288E+3, 0.251E+3, + 0.18075000E+1, 0.19523000E+1, 0.59661110E+3, 0.288E+3, 0.252E+3, 0.18075000E+1, 0.19639000E+1, + 0.78841700E+3, 0.288E+3, 0.256E+3, 0.18075000E+1, 0.18467000E+1, 0.81437400E+3, 0.288E+3, + 0.257E+3, 0.18075000E+1, 0.29175000E+1, 0.60044820E+3, 0.288E+3, 0.272E+3, 0.18075000E+1, + 0.38840000E+1, 0.62883490E+3, 0.288E+3, 0.273E+3, 0.18075000E+1, 0.28988000E+1, 0.58136160E+3, + 0.288E+3, 0.274E+3, 0.18075000E+1, 0.10915300E+2, 0.52620370E+3, 0.288E+3, 0.275E+3, + 0.18075000E+1, 0.98054000E+1, 0.49362900E+3, 0.288E+3, 0.276E+3, 0.18075000E+1, 0.91527000E+1, + 0.50521810E+3, 0.288E+3, 0.277E+3, 0.18075000E+1, 0.29424000E+1, 0.53138910E+3, 0.288E+3, + 0.278E+3, 0.18075000E+1, 0.66669000E+1, 0.64808000E+3, 0.288E+3, 0.281E+3, 0.18075000E+1, + 0.19302000E+1, 0.68468130E+3, 0.288E+3, 0.282E+3, 0.18075000E+1, 0.19356000E+1, 0.69650710E+3, + 0.288E+3, 0.283E+3, 0.18075000E+1, 0.19655000E+1, 0.69009760E+3, 0.288E+3, 0.284E+3, + 0.18075000E+1, 0.19639000E+1, 0.86755840E+3, 0.288E+3, 0.288E+3, 0.18075000E+1, 0.18075000E+1, + 0.97472000E+1, 0.305E+3, 0.100E+1, 0.29128000E+1, 0.91180000E+0, 0.66434000E+1, 0.305E+3, + 0.200E+1, 0.29128000E+1, 0.00000000E+0, 0.12998750E+3, 0.305E+3, 0.300E+1, 0.29128000E+1, + 0.00000000E+0, 0.80427600E+2, 0.305E+3, 0.400E+1, 0.29128000E+1, 0.00000000E+0, 0.56411600E+2, + 0.305E+3, 0.500E+1, 0.29128000E+1, 0.00000000E+0, 0.39244900E+2, 0.305E+3, 0.600E+1, + 0.29128000E+1, 0.00000000E+0, 0.28012900E+2, 0.305E+3, 0.700E+1, 0.29128000E+1, 0.00000000E+0, + 0.21498900E+2, 0.305E+3, 0.800E+1, 0.29128000E+1, 0.00000000E+0, 0.16460700E+2, 0.305E+3, + 0.900E+1, 0.29128000E+1, 0.00000000E+0, 0.12757700E+2, 0.305E+3, 0.100E+2, 0.29128000E+1, + 0.00000000E+0, 0.15611380E+3, 0.305E+3, 0.110E+2, 0.29128000E+1, 0.00000000E+0, 0.12654250E+3, + 0.305E+3, 0.120E+2, 0.29128000E+1, 0.00000000E+0, 0.11915450E+3, 0.305E+3, 0.130E+2, + 0.29128000E+1, 0.00000000E+0, 0.96531300E+2, 0.305E+3, 0.140E+2, 0.29128000E+1, 0.00000000E+0, + 0.77042900E+2, 0.305E+3, 0.150E+2, 0.29128000E+1, 0.00000000E+0, 0.64891800E+2, 0.305E+3, + 0.160E+2, 0.29128000E+1, 0.00000000E+0, 0.53734300E+2, 0.305E+3, 0.170E+2, 0.29128000E+1, + 0.00000000E+0, 0.44461300E+2, 0.305E+3, 0.180E+2, 0.29128000E+1, 0.00000000E+0, 0.25422370E+3, + 0.305E+3, 0.190E+2, 0.29128000E+1, 0.00000000E+0, 0.21794570E+3, 0.305E+3, 0.200E+2, + 0.29128000E+1, 0.00000000E+0, 0.18168340E+3, 0.305E+3, 0.210E+2, 0.29128000E+1, 0.00000000E+0, + 0.17706600E+3, 0.305E+3, 0.220E+2, 0.29128000E+1, 0.00000000E+0, 0.16299900E+3, 0.305E+3, + 0.230E+2, 0.29128000E+1, 0.00000000E+0, 0.12872330E+3, 0.305E+3, 0.240E+2, 0.29128000E+1, + 0.00000000E+0, 0.14140710E+3, 0.305E+3, 0.250E+2, 0.29128000E+1, 0.00000000E+0, 0.11135690E+3, + 0.305E+3, 0.260E+2, 0.29128000E+1, 0.00000000E+0, 0.11910910E+3, 0.305E+3, 0.270E+2, + 0.29128000E+1, 0.00000000E+0, 0.12201440E+3, 0.305E+3, 0.280E+2, 0.29128000E+1, 0.00000000E+0, + 0.93766000E+2, 0.305E+3, 0.290E+2, 0.29128000E+1, 0.00000000E+0, 0.97684500E+2, 0.305E+3, + 0.300E+2, 0.29128000E+1, 0.00000000E+0, 0.11517060E+3, 0.305E+3, 0.310E+2, 0.29128000E+1, + 0.00000000E+0, 0.10369470E+3, 0.305E+3, 0.320E+2, 0.29128000E+1, 0.00000000E+0, 0.90137300E+2, + 0.305E+3, 0.330E+2, 0.29128000E+1, 0.00000000E+0, 0.81838100E+2, 0.305E+3, 0.340E+2, + 0.29128000E+1, 0.00000000E+0, 0.72461300E+2, 0.305E+3, 0.350E+2, 0.29128000E+1, 0.00000000E+0, + 0.63676800E+2, 0.305E+3, 0.360E+2, 0.29128000E+1, 0.00000000E+0, 0.28624860E+3, 0.305E+3, + 0.370E+2, 0.29128000E+1, 0.00000000E+0, 0.25952790E+3, 0.305E+3, 0.380E+2, 0.29128000E+1, + 0.00000000E+0, 0.23111730E+3, 0.305E+3, 0.390E+2, 0.29128000E+1, 0.00000000E+0, 0.20990660E+3, + 0.305E+3, 0.400E+2, 0.29128000E+1, 0.00000000E+0, 0.19277650E+3, 0.305E+3, 0.410E+2, + 0.29128000E+1, 0.00000000E+0, 0.15074470E+3, 0.305E+3, 0.420E+2, 0.29128000E+1, 0.00000000E+0, + 0.16737830E+3, 0.305E+3, 0.430E+2, 0.29128000E+1, 0.00000000E+0, 0.12927260E+3, 0.305E+3, + 0.440E+2, 0.29128000E+1, 0.00000000E+0, 0.14111090E+3, 0.305E+3, 0.450E+2, 0.29128000E+1, + 0.00000000E+0, 0.13140190E+3, 0.305E+3, 0.460E+2, 0.29128000E+1, 0.00000000E+0, 0.10947410E+3, + 0.305E+3, 0.470E+2, 0.29128000E+1, 0.00000000E+0, 0.11639220E+3, 0.305E+3, 0.480E+2, + 0.29128000E+1, 0.00000000E+0, 0.14412590E+3, 0.305E+3, 0.490E+2, 0.29128000E+1, 0.00000000E+0, + 0.13544390E+3, 0.305E+3, 0.500E+2, 0.29128000E+1, 0.00000000E+0, 0.12268730E+3, 0.305E+3, + 0.510E+2, 0.29128000E+1, 0.00000000E+0, 0.11497520E+3, 0.305E+3, 0.520E+2, 0.29128000E+1, + 0.00000000E+0, 0.10506600E+3, 0.305E+3, 0.530E+2, 0.29128000E+1, 0.00000000E+0, 0.95397300E+2, + 0.305E+3, 0.540E+2, 0.29128000E+1, 0.00000000E+0, 0.34948600E+3, 0.305E+3, 0.550E+2, + 0.29128000E+1, 0.00000000E+0, 0.32947840E+3, 0.305E+3, 0.560E+2, 0.29128000E+1, 0.00000000E+0, + 0.29416920E+3, 0.305E+3, 0.570E+2, 0.29128000E+1, 0.00000000E+0, 0.14462380E+3, 0.305E+3, + 0.580E+2, 0.29128000E+1, 0.27991000E+1, 0.29344860E+3, 0.305E+3, 0.590E+2, 0.29128000E+1, + 0.00000000E+0, 0.28246410E+3, 0.305E+3, 0.600E+2, 0.29128000E+1, 0.00000000E+0, 0.27556100E+3, + 0.305E+3, 0.610E+2, 0.29128000E+1, 0.00000000E+0, 0.26918990E+3, 0.305E+3, 0.620E+2, + 0.29128000E+1, 0.00000000E+0, 0.26354840E+3, 0.305E+3, 0.630E+2, 0.29128000E+1, 0.00000000E+0, + 0.21125650E+3, 0.305E+3, 0.640E+2, 0.29128000E+1, 0.00000000E+0, 0.23210280E+3, 0.305E+3, + 0.650E+2, 0.29128000E+1, 0.00000000E+0, 0.22459400E+3, 0.305E+3, 0.660E+2, 0.29128000E+1, + 0.00000000E+0, 0.23859840E+3, 0.305E+3, 0.670E+2, 0.29128000E+1, 0.00000000E+0, 0.23361550E+3, + 0.305E+3, 0.680E+2, 0.29128000E+1, 0.00000000E+0, 0.22917770E+3, 0.305E+3, 0.690E+2, + 0.29128000E+1, 0.00000000E+0, 0.22630560E+3, 0.305E+3, 0.700E+2, 0.29128000E+1, 0.00000000E+0, + 0.19318890E+3, 0.305E+3, 0.710E+2, 0.29128000E+1, 0.00000000E+0, 0.19317020E+3, 0.305E+3, + 0.720E+2, 0.29128000E+1, 0.00000000E+0, 0.17812490E+3, 0.305E+3, 0.730E+2, 0.29128000E+1, + 0.00000000E+0, 0.15179460E+3, 0.305E+3, 0.740E+2, 0.29128000E+1, 0.00000000E+0, 0.15495640E+3, + 0.305E+3, 0.750E+2, 0.29128000E+1, 0.00000000E+0, 0.14166610E+3, 0.305E+3, 0.760E+2, + 0.29128000E+1, 0.00000000E+0, 0.13065360E+3, 0.305E+3, 0.770E+2, 0.29128000E+1, 0.00000000E+0, + 0.10940400E+3, 0.305E+3, 0.780E+2, 0.29128000E+1, 0.00000000E+0, 0.10252010E+3, 0.305E+3, + 0.790E+2, 0.29128000E+1, 0.00000000E+0, 0.10573840E+3, 0.305E+3, 0.800E+2, 0.29128000E+1, + 0.00000000E+0, 0.14882270E+3, 0.305E+3, 0.810E+2, 0.29128000E+1, 0.00000000E+0, 0.14721780E+3, + 0.305E+3, 0.820E+2, 0.29128000E+1, 0.00000000E+0, 0.13720280E+3, 0.305E+3, 0.830E+2, + 0.29128000E+1, 0.00000000E+0, 0.13195960E+3, 0.305E+3, 0.840E+2, 0.29128000E+1, 0.00000000E+0, + 0.12301010E+3, 0.305E+3, 0.850E+2, 0.29128000E+1, 0.00000000E+0, 0.11377160E+3, 0.305E+3, + 0.860E+2, 0.29128000E+1, 0.00000000E+0, 0.33435640E+3, 0.305E+3, 0.870E+2, 0.29128000E+1, + 0.00000000E+0, 0.32867970E+3, 0.305E+3, 0.880E+2, 0.29128000E+1, 0.00000000E+0, 0.29472000E+3, + 0.305E+3, 0.890E+2, 0.29128000E+1, 0.00000000E+0, 0.26950210E+3, 0.305E+3, 0.900E+2, + 0.29128000E+1, 0.00000000E+0, 0.26545030E+3, 0.305E+3, 0.910E+2, 0.29128000E+1, 0.00000000E+0, + 0.25712540E+3, 0.305E+3, 0.920E+2, 0.29128000E+1, 0.00000000E+0, 0.26182830E+3, 0.305E+3, + 0.930E+2, 0.29128000E+1, 0.00000000E+0, 0.25402630E+3, 0.305E+3, 0.940E+2, 0.29128000E+1, + 0.00000000E+0, 0.15353100E+2, 0.305E+3, 0.101E+3, 0.29128000E+1, 0.00000000E+0, 0.47033800E+2, + 0.305E+3, 0.103E+3, 0.29128000E+1, 0.98650000E+0, 0.60523400E+2, 0.305E+3, 0.104E+3, + 0.29128000E+1, 0.98080000E+0, 0.47858000E+2, 0.305E+3, 0.105E+3, 0.29128000E+1, 0.97060000E+0, + 0.36816600E+2, 0.305E+3, 0.106E+3, 0.29128000E+1, 0.98680000E+0, 0.26148100E+2, 0.305E+3, + 0.107E+3, 0.29128000E+1, 0.99440000E+0, 0.19357100E+2, 0.305E+3, 0.108E+3, 0.29128000E+1, + 0.99250000E+0, 0.13558100E+2, 0.305E+3, 0.109E+3, 0.29128000E+1, 0.99820000E+0, 0.68275500E+2, + 0.305E+3, 0.111E+3, 0.29128000E+1, 0.96840000E+0, 0.10530540E+3, 0.305E+3, 0.112E+3, + 0.29128000E+1, 0.96280000E+0, 0.10855170E+3, 0.305E+3, 0.113E+3, 0.29128000E+1, 0.96480000E+0, + 0.89594800E+2, 0.305E+3, 0.114E+3, 0.29128000E+1, 0.95070000E+0, 0.74849700E+2, 0.305E+3, + 0.115E+3, 0.29128000E+1, 0.99470000E+0, 0.64157300E+2, 0.305E+3, 0.116E+3, 0.29128000E+1, + 0.99480000E+0, 0.53163800E+2, 0.305E+3, 0.117E+3, 0.29128000E+1, 0.99720000E+0, 0.95849700E+2, + 0.305E+3, 0.119E+3, 0.29128000E+1, 0.97670000E+0, 0.17514340E+3, 0.305E+3, 0.120E+3, + 0.29128000E+1, 0.98310000E+0, 0.97755000E+2, 0.305E+3, 0.121E+3, 0.29128000E+1, 0.18627000E+1, + 0.94475800E+2, 0.305E+3, 0.122E+3, 0.29128000E+1, 0.18299000E+1, 0.92545100E+2, 0.305E+3, + 0.123E+3, 0.29128000E+1, 0.19138000E+1, 0.91452800E+2, 0.305E+3, 0.124E+3, 0.29128000E+1, + 0.18269000E+1, 0.85131200E+2, 0.305E+3, 0.125E+3, 0.29128000E+1, 0.16406000E+1, 0.79083200E+2, + 0.305E+3, 0.126E+3, 0.29128000E+1, 0.16483000E+1, 0.75452500E+2, 0.305E+3, 0.127E+3, + 0.29128000E+1, 0.17149000E+1, 0.73686500E+2, 0.305E+3, 0.128E+3, 0.29128000E+1, 0.17937000E+1, + 0.72121600E+2, 0.305E+3, 0.129E+3, 0.29128000E+1, 0.95760000E+0, 0.68807700E+2, 0.305E+3, + 0.130E+3, 0.29128000E+1, 0.19419000E+1, 0.10875080E+3, 0.305E+3, 0.131E+3, 0.29128000E+1, + 0.96010000E+0, 0.97495300E+2, 0.305E+3, 0.132E+3, 0.29128000E+1, 0.94340000E+0, 0.88710800E+2, + 0.305E+3, 0.133E+3, 0.29128000E+1, 0.98890000E+0, 0.81856400E+2, 0.305E+3, 0.134E+3, + 0.29128000E+1, 0.99010000E+0, 0.72922100E+2, 0.305E+3, 0.135E+3, 0.29128000E+1, 0.99740000E+0, + 0.11497210E+3, 0.305E+3, 0.137E+3, 0.29128000E+1, 0.97380000E+0, 0.21287590E+3, 0.305E+3, + 0.138E+3, 0.29128000E+1, 0.98010000E+0, 0.16813540E+3, 0.305E+3, 0.139E+3, 0.29128000E+1, + 0.19153000E+1, 0.12924090E+3, 0.305E+3, 0.140E+3, 0.29128000E+1, 0.19355000E+1, 0.13043790E+3, + 0.305E+3, 0.141E+3, 0.29128000E+1, 0.19545000E+1, 0.12219410E+3, 0.305E+3, 0.142E+3, + 0.29128000E+1, 0.19420000E+1, 0.13497050E+3, 0.305E+3, 0.143E+3, 0.29128000E+1, 0.16682000E+1, + 0.10771280E+3, 0.305E+3, 0.144E+3, 0.29128000E+1, 0.18584000E+1, 0.10089580E+3, 0.305E+3, + 0.145E+3, 0.29128000E+1, 0.19003000E+1, 0.93899700E+2, 0.305E+3, 0.146E+3, 0.29128000E+1, + 0.18630000E+1, 0.90650800E+2, 0.305E+3, 0.147E+3, 0.29128000E+1, 0.96790000E+0, 0.90427700E+2, + 0.305E+3, 0.148E+3, 0.29128000E+1, 0.19539000E+1, 0.13818550E+3, 0.305E+3, 0.149E+3, + 0.29128000E+1, 0.96330000E+0, 0.12714090E+3, 0.305E+3, 0.150E+3, 0.29128000E+1, 0.95140000E+0, + 0.12050990E+3, 0.305E+3, 0.151E+3, 0.29128000E+1, 0.97490000E+0, 0.11496400E+3, 0.305E+3, + 0.152E+3, 0.29128000E+1, 0.98110000E+0, 0.10603500E+3, 0.305E+3, 0.153E+3, 0.29128000E+1, + 0.99680000E+0, 0.13780050E+3, 0.305E+3, 0.155E+3, 0.29128000E+1, 0.99090000E+0, 0.27459140E+3, + 0.305E+3, 0.156E+3, 0.29128000E+1, 0.97970000E+0, 0.21235690E+3, 0.305E+3, 0.157E+3, + 0.29128000E+1, 0.19373000E+1, 0.14039590E+3, 0.305E+3, 0.159E+3, 0.29128000E+1, 0.29425000E+1, + 0.13751220E+3, 0.305E+3, 0.160E+3, 0.29128000E+1, 0.29455000E+1, 0.13326430E+3, 0.305E+3, + 0.161E+3, 0.29128000E+1, 0.29413000E+1, 0.13360610E+3, 0.305E+3, 0.162E+3, 0.29128000E+1, + 0.29300000E+1, 0.12777250E+3, 0.305E+3, 0.163E+3, 0.29128000E+1, 0.18286000E+1, 0.13432640E+3, + 0.305E+3, 0.164E+3, 0.29128000E+1, 0.28732000E+1, 0.12641840E+3, 0.305E+3, 0.165E+3, + 0.29128000E+1, 0.29086000E+1, 0.12810090E+3, 0.305E+3, 0.166E+3, 0.29128000E+1, 0.28965000E+1, + 0.12023750E+3, 0.305E+3, 0.167E+3, 0.29128000E+1, 0.29242000E+1, 0.11690070E+3, 0.305E+3, + 0.168E+3, 0.29128000E+1, 0.29282000E+1, 0.11607540E+3, 0.305E+3, 0.169E+3, 0.29128000E+1, + 0.29246000E+1, 0.12156170E+3, 0.305E+3, 0.170E+3, 0.29128000E+1, 0.28482000E+1, 0.11232440E+3, + 0.305E+3, 0.171E+3, 0.29128000E+1, 0.29219000E+1, 0.14812250E+3, 0.305E+3, 0.172E+3, + 0.29128000E+1, 0.19254000E+1, 0.13881710E+3, 0.305E+3, 0.173E+3, 0.29128000E+1, 0.19459000E+1, + 0.12792520E+3, 0.305E+3, 0.174E+3, 0.29128000E+1, 0.19292000E+1, 0.12830620E+3, 0.305E+3, + 0.175E+3, 0.29128000E+1, 0.18104000E+1, 0.11489450E+3, 0.305E+3, 0.176E+3, 0.29128000E+1, + 0.18858000E+1, 0.10845800E+3, 0.305E+3, 0.177E+3, 0.29128000E+1, 0.18648000E+1, 0.10379770E+3, + 0.305E+3, 0.178E+3, 0.29128000E+1, 0.19188000E+1, 0.99205000E+2, 0.305E+3, 0.179E+3, + 0.29128000E+1, 0.98460000E+0, 0.96600200E+2, 0.305E+3, 0.180E+3, 0.29128000E+1, 0.19896000E+1, + 0.14899930E+3, 0.305E+3, 0.181E+3, 0.29128000E+1, 0.92670000E+0, 0.13799420E+3, 0.305E+3, + 0.182E+3, 0.29128000E+1, 0.93830000E+0, 0.13500470E+3, 0.305E+3, 0.183E+3, 0.29128000E+1, + 0.98200000E+0, 0.13215970E+3, 0.305E+3, 0.184E+3, 0.29128000E+1, 0.98150000E+0, 0.12451480E+3, + 0.305E+3, 0.185E+3, 0.29128000E+1, 0.99540000E+0, 0.15534870E+3, 0.305E+3, 0.187E+3, + 0.29128000E+1, 0.97050000E+0, 0.27595780E+3, 0.305E+3, 0.188E+3, 0.29128000E+1, 0.96620000E+0, + 0.16604890E+3, 0.305E+3, 0.189E+3, 0.29128000E+1, 0.29070000E+1, 0.18911370E+3, 0.305E+3, + 0.190E+3, 0.29128000E+1, 0.28844000E+1, 0.17001950E+3, 0.305E+3, 0.191E+3, 0.29128000E+1, + 0.28738000E+1, 0.15177090E+3, 0.305E+3, 0.192E+3, 0.29128000E+1, 0.28878000E+1, 0.14638890E+3, + 0.305E+3, 0.193E+3, 0.29128000E+1, 0.29095000E+1, 0.17106450E+3, 0.305E+3, 0.194E+3, + 0.29128000E+1, 0.19209000E+1, 0.40935800E+2, 0.305E+3, 0.204E+3, 0.29128000E+1, 0.19697000E+1, + 0.40519200E+2, 0.305E+3, 0.205E+3, 0.29128000E+1, 0.19441000E+1, 0.30353600E+2, 0.305E+3, + 0.206E+3, 0.29128000E+1, 0.19985000E+1, 0.24591900E+2, 0.305E+3, 0.207E+3, 0.29128000E+1, + 0.20143000E+1, 0.17142400E+2, 0.305E+3, 0.208E+3, 0.29128000E+1, 0.19887000E+1, 0.71302300E+2, + 0.305E+3, 0.212E+3, 0.29128000E+1, 0.19496000E+1, 0.86053200E+2, 0.305E+3, 0.213E+3, + 0.29128000E+1, 0.19311000E+1, 0.83658600E+2, 0.305E+3, 0.214E+3, 0.29128000E+1, 0.19435000E+1, + 0.73739700E+2, 0.305E+3, 0.215E+3, 0.29128000E+1, 0.20102000E+1, 0.62878300E+2, 0.305E+3, + 0.216E+3, 0.29128000E+1, 0.19903000E+1, 0.10006100E+3, 0.305E+3, 0.220E+3, 0.29128000E+1, + 0.19349000E+1, 0.97163200E+2, 0.305E+3, 0.221E+3, 0.29128000E+1, 0.28999000E+1, 0.98436300E+2, + 0.305E+3, 0.222E+3, 0.29128000E+1, 0.38675000E+1, 0.90057400E+2, 0.305E+3, 0.223E+3, + 0.29128000E+1, 0.29110000E+1, 0.68995800E+2, 0.305E+3, 0.224E+3, 0.29128000E+1, 0.10619100E+2, + 0.59631300E+2, 0.305E+3, 0.225E+3, 0.29128000E+1, 0.98849000E+1, 0.58451500E+2, 0.305E+3, + 0.226E+3, 0.29128000E+1, 0.91376000E+1, 0.67393200E+2, 0.305E+3, 0.227E+3, 0.29128000E+1, + 0.29263000E+1, 0.63074000E+2, 0.305E+3, 0.228E+3, 0.29128000E+1, 0.65458000E+1, 0.87768800E+2, + 0.305E+3, 0.231E+3, 0.29128000E+1, 0.19315000E+1, 0.93130100E+2, 0.305E+3, 0.232E+3, + 0.29128000E+1, 0.19447000E+1, 0.86548600E+2, 0.305E+3, 0.233E+3, 0.29128000E+1, 0.19793000E+1, + 0.81240000E+2, 0.305E+3, 0.234E+3, 0.29128000E+1, 0.19812000E+1, 0.12013000E+3, 0.305E+3, + 0.238E+3, 0.29128000E+1, 0.19143000E+1, 0.11715700E+3, 0.305E+3, 0.239E+3, 0.29128000E+1, + 0.28903000E+1, 0.11862430E+3, 0.305E+3, 0.240E+3, 0.29128000E+1, 0.39106000E+1, 0.11463280E+3, + 0.305E+3, 0.241E+3, 0.29128000E+1, 0.29225000E+1, 0.10248830E+3, 0.305E+3, 0.242E+3, + 0.29128000E+1, 0.11055600E+2, 0.91251800E+2, 0.305E+3, 0.243E+3, 0.29128000E+1, 0.95402000E+1, + 0.86498600E+2, 0.305E+3, 0.244E+3, 0.29128000E+1, 0.88895000E+1, 0.87237600E+2, 0.305E+3, + 0.245E+3, 0.29128000E+1, 0.29696000E+1, 0.90828400E+2, 0.305E+3, 0.246E+3, 0.29128000E+1, + 0.57095000E+1, 0.11348260E+3, 0.305E+3, 0.249E+3, 0.29128000E+1, 0.19378000E+1, 0.12333400E+3, + 0.305E+3, 0.250E+3, 0.29128000E+1, 0.19505000E+1, 0.11753380E+3, 0.305E+3, 0.251E+3, + 0.29128000E+1, 0.19523000E+1, 0.11415530E+3, 0.305E+3, 0.252E+3, 0.29128000E+1, 0.19639000E+1, + 0.14593300E+3, 0.305E+3, 0.256E+3, 0.29128000E+1, 0.18467000E+1, 0.15222500E+3, 0.305E+3, + 0.257E+3, 0.29128000E+1, 0.29175000E+1, 0.11417940E+3, 0.305E+3, 0.272E+3, 0.29128000E+1, + 0.38840000E+1, 0.11873150E+3, 0.305E+3, 0.273E+3, 0.29128000E+1, 0.28988000E+1, 0.11142620E+3, + 0.305E+3, 0.274E+3, 0.29128000E+1, 0.10915300E+2, 0.10200810E+3, 0.305E+3, 0.275E+3, + 0.29128000E+1, 0.98054000E+1, 0.96570600E+2, 0.305E+3, 0.276E+3, 0.29128000E+1, 0.91527000E+1, + 0.97623800E+2, 0.305E+3, 0.277E+3, 0.29128000E+1, 0.29424000E+1, 0.10254510E+3, 0.305E+3, + 0.278E+3, 0.29128000E+1, 0.66669000E+1, 0.12215410E+3, 0.305E+3, 0.281E+3, 0.29128000E+1, + 0.19302000E+1, 0.12915240E+3, 0.305E+3, 0.282E+3, 0.29128000E+1, 0.19356000E+1, 0.13219470E+3, + 0.305E+3, 0.283E+3, 0.29128000E+1, 0.19655000E+1, 0.13178890E+3, 0.305E+3, 0.284E+3, + 0.29128000E+1, 0.19639000E+1, 0.16086740E+3, 0.305E+3, 0.288E+3, 0.29128000E+1, 0.18075000E+1, + 0.31443600E+2, 0.305E+3, 0.305E+3, 0.29128000E+1, 0.29128000E+1, 0.88210000E+1, 0.306E+3, + 0.100E+1, 0.29987000E+1, 0.91180000E+0, 0.61196000E+1, 0.306E+3, 0.200E+1, 0.29987000E+1, + 0.00000000E+0, 0.11594980E+3, 0.306E+3, 0.300E+1, 0.29987000E+1, 0.00000000E+0, 0.71681800E+2, + 0.306E+3, 0.400E+1, 0.29987000E+1, 0.00000000E+0, 0.50530300E+2, 0.306E+3, 0.500E+1, + 0.29987000E+1, 0.00000000E+0, 0.35412900E+2, 0.306E+3, 0.600E+1, 0.29987000E+1, 0.00000000E+0, + 0.25479900E+2, 0.306E+3, 0.700E+1, 0.29987000E+1, 0.00000000E+0, 0.19694300E+2, 0.306E+3, + 0.800E+1, 0.29987000E+1, 0.00000000E+0, 0.15188300E+2, 0.306E+3, 0.900E+1, 0.29987000E+1, + 0.00000000E+0, 0.11851300E+2, 0.306E+3, 0.100E+2, 0.29987000E+1, 0.00000000E+0, 0.13937530E+3, + 0.306E+3, 0.110E+2, 0.29987000E+1, 0.00000000E+0, 0.11282100E+3, 0.306E+3, 0.120E+2, + 0.29987000E+1, 0.00000000E+0, 0.10635080E+3, 0.306E+3, 0.130E+2, 0.29987000E+1, 0.00000000E+0, + 0.86399900E+2, 0.306E+3, 0.140E+2, 0.29987000E+1, 0.00000000E+0, 0.69251500E+2, 0.306E+3, + 0.150E+2, 0.29987000E+1, 0.00000000E+0, 0.58577600E+2, 0.306E+3, 0.160E+2, 0.29987000E+1, + 0.00000000E+0, 0.48744800E+2, 0.306E+3, 0.170E+2, 0.29987000E+1, 0.00000000E+0, 0.40544100E+2, + 0.306E+3, 0.180E+2, 0.29987000E+1, 0.00000000E+0, 0.22766000E+3, 0.306E+3, 0.190E+2, + 0.29987000E+1, 0.00000000E+0, 0.19467190E+3, 0.306E+3, 0.200E+2, 0.29987000E+1, 0.00000000E+0, + 0.16226090E+3, 0.306E+3, 0.210E+2, 0.29987000E+1, 0.00000000E+0, 0.15827050E+3, 0.306E+3, + 0.220E+2, 0.29987000E+1, 0.00000000E+0, 0.14575800E+3, 0.306E+3, 0.230E+2, 0.29987000E+1, + 0.00000000E+0, 0.11536970E+3, 0.306E+3, 0.240E+2, 0.29987000E+1, 0.00000000E+0, 0.12654160E+3, + 0.306E+3, 0.250E+2, 0.29987000E+1, 0.00000000E+0, 0.99901700E+2, 0.306E+3, 0.260E+2, + 0.29987000E+1, 0.00000000E+0, 0.10669170E+3, 0.306E+3, 0.270E+2, 0.29987000E+1, 0.00000000E+0, + 0.10923050E+3, 0.306E+3, 0.280E+2, 0.29987000E+1, 0.00000000E+0, 0.84202800E+2, 0.306E+3, + 0.290E+2, 0.29987000E+1, 0.00000000E+0, 0.87612400E+2, 0.306E+3, 0.300E+2, 0.29987000E+1, + 0.00000000E+0, 0.10307380E+3, 0.306E+3, 0.310E+2, 0.29987000E+1, 0.00000000E+0, 0.92962100E+2, + 0.306E+3, 0.320E+2, 0.29987000E+1, 0.00000000E+0, 0.81056300E+2, 0.306E+3, 0.330E+2, + 0.29987000E+1, 0.00000000E+0, 0.73806400E+2, 0.306E+3, 0.340E+2, 0.29987000E+1, 0.00000000E+0, + 0.65586800E+2, 0.306E+3, 0.350E+2, 0.29987000E+1, 0.00000000E+0, 0.57866500E+2, 0.306E+3, + 0.360E+2, 0.29987000E+1, 0.00000000E+0, 0.25651980E+3, 0.306E+3, 0.370E+2, 0.29987000E+1, + 0.00000000E+0, 0.23200320E+3, 0.306E+3, 0.380E+2, 0.29987000E+1, 0.00000000E+0, 0.20665890E+3, + 0.306E+3, 0.390E+2, 0.29987000E+1, 0.00000000E+0, 0.18782030E+3, 0.306E+3, 0.400E+2, + 0.29987000E+1, 0.00000000E+0, 0.17263950E+3, 0.306E+3, 0.410E+2, 0.29987000E+1, 0.00000000E+0, + 0.13537160E+3, 0.306E+3, 0.420E+2, 0.29987000E+1, 0.00000000E+0, 0.15013980E+3, 0.306E+3, + 0.430E+2, 0.29987000E+1, 0.00000000E+0, 0.11632470E+3, 0.306E+3, 0.440E+2, 0.29987000E+1, + 0.00000000E+0, 0.12677780E+3, 0.306E+3, 0.450E+2, 0.29987000E+1, 0.00000000E+0, 0.11814270E+3, + 0.306E+3, 0.460E+2, 0.29987000E+1, 0.00000000E+0, 0.98703200E+2, 0.306E+3, 0.470E+2, + 0.29987000E+1, 0.00000000E+0, 0.10476920E+3, 0.306E+3, 0.480E+2, 0.29987000E+1, 0.00000000E+0, + 0.12938530E+3, 0.306E+3, 0.490E+2, 0.29987000E+1, 0.00000000E+0, 0.12165980E+3, 0.306E+3, + 0.500E+2, 0.29987000E+1, 0.00000000E+0, 0.11040890E+3, 0.306E+3, 0.510E+2, 0.29987000E+1, + 0.00000000E+0, 0.10365030E+3, 0.306E+3, 0.520E+2, 0.29987000E+1, 0.00000000E+0, 0.94948900E+2, + 0.306E+3, 0.530E+2, 0.29987000E+1, 0.00000000E+0, 0.86458100E+2, 0.306E+3, 0.540E+2, + 0.29987000E+1, 0.00000000E+0, 0.31323470E+3, 0.306E+3, 0.550E+2, 0.29987000E+1, 0.00000000E+0, + 0.29471680E+3, 0.306E+3, 0.560E+2, 0.29987000E+1, 0.00000000E+0, 0.26313810E+3, 0.306E+3, + 0.570E+2, 0.29987000E+1, 0.00000000E+0, 0.13023410E+3, 0.306E+3, 0.580E+2, 0.29987000E+1, + 0.27991000E+1, 0.26266440E+3, 0.306E+3, 0.590E+2, 0.29987000E+1, 0.00000000E+0, 0.25281970E+3, + 0.306E+3, 0.600E+2, 0.29987000E+1, 0.00000000E+0, 0.24663480E+3, 0.306E+3, 0.610E+2, + 0.29987000E+1, 0.00000000E+0, 0.24092330E+3, 0.306E+3, 0.620E+2, 0.29987000E+1, 0.00000000E+0, + 0.23586410E+3, 0.306E+3, 0.630E+2, 0.29987000E+1, 0.00000000E+0, 0.18938240E+3, 0.306E+3, + 0.640E+2, 0.29987000E+1, 0.00000000E+0, 0.20816040E+3, 0.306E+3, 0.650E+2, 0.29987000E+1, + 0.00000000E+0, 0.20142940E+3, 0.306E+3, 0.660E+2, 0.29987000E+1, 0.00000000E+0, 0.21351460E+3, + 0.306E+3, 0.670E+2, 0.29987000E+1, 0.00000000E+0, 0.20904160E+3, 0.306E+3, 0.680E+2, + 0.29987000E+1, 0.00000000E+0, 0.20505940E+3, 0.306E+3, 0.690E+2, 0.29987000E+1, 0.00000000E+0, + 0.20246690E+3, 0.306E+3, 0.700E+2, 0.29987000E+1, 0.00000000E+0, 0.17301760E+3, 0.306E+3, + 0.710E+2, 0.29987000E+1, 0.00000000E+0, 0.17295930E+3, 0.306E+3, 0.720E+2, 0.29987000E+1, + 0.00000000E+0, 0.15967690E+3, 0.306E+3, 0.730E+2, 0.29987000E+1, 0.00000000E+0, 0.13642100E+3, + 0.306E+3, 0.740E+2, 0.29987000E+1, 0.00000000E+0, 0.13925850E+3, 0.306E+3, 0.750E+2, + 0.29987000E+1, 0.00000000E+0, 0.12750310E+3, 0.306E+3, 0.760E+2, 0.29987000E+1, 0.00000000E+0, + 0.11776180E+3, 0.306E+3, 0.770E+2, 0.29987000E+1, 0.00000000E+0, 0.98928700E+2, 0.306E+3, + 0.780E+2, 0.29987000E+1, 0.00000000E+0, 0.92827200E+2, 0.306E+3, 0.790E+2, 0.29987000E+1, + 0.00000000E+0, 0.95685300E+2, 0.306E+3, 0.800E+2, 0.29987000E+1, 0.00000000E+0, 0.13397180E+3, + 0.306E+3, 0.810E+2, 0.29987000E+1, 0.00000000E+0, 0.13250170E+3, 0.306E+3, 0.820E+2, + 0.29987000E+1, 0.00000000E+0, 0.12364240E+3, 0.306E+3, 0.830E+2, 0.29987000E+1, 0.00000000E+0, + 0.11905310E+3, 0.306E+3, 0.840E+2, 0.29987000E+1, 0.00000000E+0, 0.11119300E+3, 0.306E+3, + 0.850E+2, 0.29987000E+1, 0.00000000E+0, 0.10307880E+3, 0.306E+3, 0.860E+2, 0.29987000E+1, + 0.00000000E+0, 0.29972370E+3, 0.306E+3, 0.870E+2, 0.29987000E+1, 0.00000000E+0, 0.29409590E+3, + 0.306E+3, 0.880E+2, 0.29987000E+1, 0.00000000E+0, 0.26375700E+3, 0.306E+3, 0.890E+2, + 0.29987000E+1, 0.00000000E+0, 0.24153050E+3, 0.306E+3, 0.900E+2, 0.29987000E+1, 0.00000000E+0, + 0.23801510E+3, 0.306E+3, 0.910E+2, 0.29987000E+1, 0.00000000E+0, 0.23059460E+3, 0.306E+3, + 0.920E+2, 0.29987000E+1, 0.00000000E+0, 0.23475660E+3, 0.306E+3, 0.930E+2, 0.29987000E+1, + 0.00000000E+0, 0.22776830E+3, 0.306E+3, 0.940E+2, 0.29987000E+1, 0.00000000E+0, 0.13799200E+2, + 0.306E+3, 0.101E+3, 0.29987000E+1, 0.00000000E+0, 0.41971300E+2, 0.306E+3, 0.103E+3, + 0.29987000E+1, 0.98650000E+0, 0.54077000E+2, 0.306E+3, 0.104E+3, 0.29987000E+1, 0.98080000E+0, + 0.42964600E+2, 0.306E+3, 0.105E+3, 0.29987000E+1, 0.97060000E+0, 0.33254000E+2, 0.306E+3, + 0.106E+3, 0.29987000E+1, 0.98680000E+0, 0.23813600E+2, 0.306E+3, 0.107E+3, 0.29987000E+1, + 0.99440000E+0, 0.17775000E+2, 0.306E+3, 0.108E+3, 0.29987000E+1, 0.99250000E+0, 0.12597000E+2, + 0.306E+3, 0.109E+3, 0.29987000E+1, 0.99820000E+0, 0.61017400E+2, 0.306E+3, 0.111E+3, + 0.29987000E+1, 0.96840000E+0, 0.93997800E+2, 0.306E+3, 0.112E+3, 0.29987000E+1, 0.96280000E+0, + 0.96956000E+2, 0.306E+3, 0.113E+3, 0.29987000E+1, 0.96480000E+0, 0.80261800E+2, 0.306E+3, + 0.114E+3, 0.29987000E+1, 0.95070000E+0, 0.67308800E+2, 0.306E+3, 0.115E+3, 0.29987000E+1, + 0.99470000E+0, 0.57922100E+2, 0.306E+3, 0.116E+3, 0.29987000E+1, 0.99480000E+0, 0.48232800E+2, + 0.306E+3, 0.117E+3, 0.29987000E+1, 0.99720000E+0, 0.86148100E+2, 0.306E+3, 0.119E+3, + 0.29987000E+1, 0.97670000E+0, 0.15677020E+3, 0.306E+3, 0.120E+3, 0.29987000E+1, 0.98310000E+0, + 0.87815300E+2, 0.306E+3, 0.121E+3, 0.29987000E+1, 0.18627000E+1, 0.84925300E+2, 0.306E+3, + 0.122E+3, 0.29987000E+1, 0.18299000E+1, 0.83211100E+2, 0.306E+3, 0.123E+3, 0.29987000E+1, + 0.19138000E+1, 0.82233100E+2, 0.306E+3, 0.124E+3, 0.29987000E+1, 0.18269000E+1, 0.76584600E+2, + 0.306E+3, 0.125E+3, 0.29987000E+1, 0.16406000E+1, 0.71211000E+2, 0.306E+3, 0.126E+3, + 0.29987000E+1, 0.16483000E+1, 0.67977400E+2, 0.306E+3, 0.127E+3, 0.29987000E+1, 0.17149000E+1, + 0.66389700E+2, 0.306E+3, 0.128E+3, 0.29987000E+1, 0.17937000E+1, 0.64964100E+2, 0.306E+3, + 0.129E+3, 0.29987000E+1, 0.95760000E+0, 0.62022800E+2, 0.306E+3, 0.130E+3, 0.29987000E+1, + 0.19419000E+1, 0.97383800E+2, 0.306E+3, 0.131E+3, 0.29987000E+1, 0.96010000E+0, 0.87478100E+2, + 0.306E+3, 0.132E+3, 0.29987000E+1, 0.94340000E+0, 0.79798600E+2, 0.306E+3, 0.133E+3, + 0.29987000E+1, 0.98890000E+0, 0.73825700E+2, 0.306E+3, 0.134E+3, 0.29987000E+1, 0.99010000E+0, + 0.65996700E+2, 0.306E+3, 0.135E+3, 0.29987000E+1, 0.99740000E+0, 0.10345590E+3, 0.306E+3, + 0.137E+3, 0.29987000E+1, 0.97380000E+0, 0.19069760E+3, 0.306E+3, 0.138E+3, 0.29987000E+1, + 0.98010000E+0, 0.15078940E+3, 0.306E+3, 0.139E+3, 0.29987000E+1, 0.19153000E+1, 0.11619730E+3, + 0.306E+3, 0.140E+3, 0.29987000E+1, 0.19355000E+1, 0.11730510E+3, 0.306E+3, 0.141E+3, + 0.29987000E+1, 0.19545000E+1, 0.11002550E+3, 0.306E+3, 0.142E+3, 0.29987000E+1, 0.19420000E+1, + 0.12143810E+3, 0.306E+3, 0.143E+3, 0.29987000E+1, 0.16682000E+1, 0.97174400E+2, 0.306E+3, + 0.144E+3, 0.29987000E+1, 0.18584000E+1, 0.91117100E+2, 0.306E+3, 0.145E+3, 0.29987000E+1, + 0.19003000E+1, 0.84895400E+2, 0.306E+3, 0.146E+3, 0.29987000E+1, 0.18630000E+1, 0.81971500E+2, + 0.306E+3, 0.147E+3, 0.29987000E+1, 0.96790000E+0, 0.81750000E+2, 0.306E+3, 0.148E+3, + 0.29987000E+1, 0.19539000E+1, 0.12410850E+3, 0.306E+3, 0.149E+3, 0.29987000E+1, 0.96330000E+0, + 0.11430720E+3, 0.306E+3, 0.150E+3, 0.29987000E+1, 0.95140000E+0, 0.10848830E+3, 0.306E+3, + 0.151E+3, 0.29987000E+1, 0.97490000E+0, 0.10364770E+3, 0.306E+3, 0.152E+3, 0.29987000E+1, + 0.98110000E+0, 0.95813900E+2, 0.306E+3, 0.153E+3, 0.29987000E+1, 0.99680000E+0, 0.12398030E+3, + 0.306E+3, 0.155E+3, 0.29987000E+1, 0.99090000E+0, 0.24612560E+3, 0.306E+3, 0.156E+3, + 0.29987000E+1, 0.97970000E+0, 0.19047850E+3, 0.306E+3, 0.157E+3, 0.29987000E+1, 0.19373000E+1, + 0.12645720E+3, 0.306E+3, 0.159E+3, 0.29987000E+1, 0.29425000E+1, 0.12386820E+3, 0.306E+3, + 0.160E+3, 0.29987000E+1, 0.29455000E+1, 0.12006680E+3, 0.306E+3, 0.161E+3, 0.29987000E+1, + 0.29413000E+1, 0.12034080E+3, 0.306E+3, 0.162E+3, 0.29987000E+1, 0.29300000E+1, 0.11507330E+3, + 0.306E+3, 0.163E+3, 0.29987000E+1, 0.18286000E+1, 0.12093240E+3, 0.306E+3, 0.164E+3, + 0.29987000E+1, 0.28732000E+1, 0.11387540E+3, 0.306E+3, 0.165E+3, 0.29987000E+1, 0.29086000E+1, + 0.11534910E+3, 0.306E+3, 0.166E+3, 0.29987000E+1, 0.28965000E+1, 0.10832620E+3, 0.306E+3, + 0.167E+3, 0.29987000E+1, 0.29242000E+1, 0.10533020E+3, 0.306E+3, 0.168E+3, 0.29987000E+1, + 0.29282000E+1, 0.10456940E+3, 0.306E+3, 0.169E+3, 0.29987000E+1, 0.29246000E+1, 0.10938790E+3, + 0.306E+3, 0.170E+3, 0.29987000E+1, 0.28482000E+1, 0.10119050E+3, 0.306E+3, 0.171E+3, + 0.29987000E+1, 0.29219000E+1, 0.13303630E+3, 0.306E+3, 0.172E+3, 0.29987000E+1, 0.19254000E+1, + 0.12486130E+3, 0.306E+3, 0.173E+3, 0.29987000E+1, 0.19459000E+1, 0.11526060E+3, 0.306E+3, + 0.174E+3, 0.29987000E+1, 0.19292000E+1, 0.11551780E+3, 0.306E+3, 0.175E+3, 0.29987000E+1, + 0.18104000E+1, 0.10377670E+3, 0.306E+3, 0.176E+3, 0.29987000E+1, 0.18858000E+1, 0.98098700E+2, + 0.306E+3, 0.177E+3, 0.29987000E+1, 0.18648000E+1, 0.93979300E+2, 0.306E+3, 0.178E+3, + 0.29987000E+1, 0.19188000E+1, 0.89905200E+2, 0.306E+3, 0.179E+3, 0.29987000E+1, 0.98460000E+0, + 0.87593000E+2, 0.306E+3, 0.180E+3, 0.29987000E+1, 0.19896000E+1, 0.13410840E+3, 0.306E+3, + 0.181E+3, 0.29987000E+1, 0.92670000E+0, 0.12432080E+3, 0.306E+3, 0.182E+3, 0.29987000E+1, + 0.93830000E+0, 0.12170140E+3, 0.306E+3, 0.183E+3, 0.29987000E+1, 0.98200000E+0, 0.11924010E+3, + 0.306E+3, 0.184E+3, 0.29987000E+1, 0.98150000E+0, 0.11253730E+3, 0.306E+3, 0.185E+3, + 0.29987000E+1, 0.99540000E+0, 0.13975100E+3, 0.306E+3, 0.187E+3, 0.29987000E+1, 0.97050000E+0, + 0.24737300E+3, 0.306E+3, 0.188E+3, 0.29987000E+1, 0.96620000E+0, 0.14949980E+3, 0.306E+3, + 0.189E+3, 0.29987000E+1, 0.29070000E+1, 0.17017100E+3, 0.306E+3, 0.190E+3, 0.29987000E+1, + 0.28844000E+1, 0.15324030E+3, 0.306E+3, 0.191E+3, 0.29987000E+1, 0.28738000E+1, 0.13692210E+3, + 0.306E+3, 0.192E+3, 0.29987000E+1, 0.28878000E+1, 0.13212700E+3, 0.306E+3, 0.193E+3, + 0.29987000E+1, 0.29095000E+1, 0.15407130E+3, 0.306E+3, 0.194E+3, 0.29987000E+1, 0.19209000E+1, + 0.36697700E+2, 0.306E+3, 0.204E+3, 0.29987000E+1, 0.19697000E+1, 0.36460400E+2, 0.306E+3, + 0.205E+3, 0.29987000E+1, 0.19441000E+1, 0.27506300E+2, 0.306E+3, 0.206E+3, 0.29987000E+1, + 0.19985000E+1, 0.22427900E+2, 0.306E+3, 0.207E+3, 0.29987000E+1, 0.20143000E+1, 0.15800900E+2, + 0.306E+3, 0.208E+3, 0.29987000E+1, 0.19887000E+1, 0.63794400E+2, 0.306E+3, 0.212E+3, + 0.29987000E+1, 0.19496000E+1, 0.77008700E+2, 0.306E+3, 0.213E+3, 0.29987000E+1, 0.19311000E+1, + 0.74996700E+2, 0.306E+3, 0.214E+3, 0.29987000E+1, 0.19435000E+1, 0.66319400E+2, 0.306E+3, + 0.215E+3, 0.29987000E+1, 0.20102000E+1, 0.56782600E+2, 0.306E+3, 0.216E+3, 0.29987000E+1, + 0.19903000E+1, 0.89828500E+2, 0.306E+3, 0.220E+3, 0.29987000E+1, 0.19349000E+1, 0.87304800E+2, + 0.306E+3, 0.221E+3, 0.29987000E+1, 0.28999000E+1, 0.88470300E+2, 0.306E+3, 0.222E+3, + 0.29987000E+1, 0.38675000E+1, 0.81022900E+2, 0.306E+3, 0.223E+3, 0.29987000E+1, 0.29110000E+1, + 0.62396300E+2, 0.306E+3, 0.224E+3, 0.29987000E+1, 0.10619100E+2, 0.54067600E+2, 0.306E+3, + 0.225E+3, 0.29987000E+1, 0.98849000E+1, 0.52992800E+2, 0.306E+3, 0.226E+3, 0.29987000E+1, + 0.91376000E+1, 0.60851300E+2, 0.306E+3, 0.227E+3, 0.29987000E+1, 0.29263000E+1, 0.57004600E+2, + 0.306E+3, 0.228E+3, 0.29987000E+1, 0.65458000E+1, 0.78781200E+2, 0.306E+3, 0.231E+3, + 0.29987000E+1, 0.19315000E+1, 0.83613100E+2, 0.306E+3, 0.232E+3, 0.29987000E+1, 0.19447000E+1, + 0.77887400E+2, 0.306E+3, 0.233E+3, 0.29987000E+1, 0.19793000E+1, 0.73281400E+2, 0.306E+3, + 0.234E+3, 0.29987000E+1, 0.19812000E+1, 0.10796880E+3, 0.306E+3, 0.238E+3, 0.29987000E+1, + 0.19143000E+1, 0.10538580E+3, 0.306E+3, 0.239E+3, 0.29987000E+1, 0.28903000E+1, 0.10676290E+3, + 0.306E+3, 0.240E+3, 0.29987000E+1, 0.39106000E+1, 0.10327750E+3, 0.306E+3, 0.241E+3, + 0.29987000E+1, 0.29225000E+1, 0.92598300E+2, 0.306E+3, 0.242E+3, 0.29987000E+1, 0.11055600E+2, + 0.82649600E+2, 0.306E+3, 0.243E+3, 0.29987000E+1, 0.95402000E+1, 0.78436800E+2, 0.306E+3, + 0.244E+3, 0.29987000E+1, 0.88895000E+1, 0.79027900E+2, 0.306E+3, 0.245E+3, 0.29987000E+1, + 0.29696000E+1, 0.82193000E+2, 0.306E+3, 0.246E+3, 0.29987000E+1, 0.57095000E+1, 0.10218770E+3, + 0.306E+3, 0.249E+3, 0.29987000E+1, 0.19378000E+1, 0.11093720E+3, 0.306E+3, 0.250E+3, + 0.29987000E+1, 0.19505000E+1, 0.10585840E+3, 0.306E+3, 0.251E+3, 0.29987000E+1, 0.19523000E+1, + 0.10293730E+3, 0.306E+3, 0.252E+3, 0.29987000E+1, 0.19639000E+1, 0.13126760E+3, 0.306E+3, + 0.256E+3, 0.29987000E+1, 0.18467000E+1, 0.13686860E+3, 0.306E+3, 0.257E+3, 0.29987000E+1, + 0.29175000E+1, 0.10287240E+3, 0.306E+3, 0.272E+3, 0.29987000E+1, 0.38840000E+1, 0.10702160E+3, + 0.306E+3, 0.273E+3, 0.29987000E+1, 0.28988000E+1, 0.10067270E+3, 0.306E+3, 0.274E+3, + 0.29987000E+1, 0.10915300E+2, 0.92374800E+2, 0.306E+3, 0.275E+3, 0.29987000E+1, 0.98054000E+1, + 0.87606400E+2, 0.306E+3, 0.276E+3, 0.29987000E+1, 0.91527000E+1, 0.88522700E+2, 0.306E+3, + 0.277E+3, 0.29987000E+1, 0.29424000E+1, 0.92901000E+2, 0.306E+3, 0.278E+3, 0.29987000E+1, + 0.66669000E+1, 0.11026110E+3, 0.306E+3, 0.281E+3, 0.29987000E+1, 0.19302000E+1, 0.11648110E+3, + 0.306E+3, 0.282E+3, 0.29987000E+1, 0.19356000E+1, 0.11921790E+3, 0.306E+3, 0.283E+3, + 0.29987000E+1, 0.19655000E+1, 0.11892080E+3, 0.306E+3, 0.284E+3, 0.29987000E+1, 0.19639000E+1, + 0.14470670E+3, 0.306E+3, 0.288E+3, 0.29987000E+1, 0.18075000E+1, 0.28412100E+2, 0.306E+3, + 0.305E+3, 0.29987000E+1, 0.29128000E+1, 0.25780900E+2, 0.306E+3, 0.306E+3, 0.29987000E+1, + 0.29987000E+1, 0.67746000E+1, 0.307E+3, 0.100E+1, 0.29903000E+1, 0.91180000E+0, 0.48836000E+1, + 0.307E+3, 0.200E+1, 0.29903000E+1, 0.00000000E+0, 0.81977000E+2, 0.307E+3, 0.300E+1, + 0.29903000E+1, 0.00000000E+0, 0.52023700E+2, 0.307E+3, 0.400E+1, 0.29903000E+1, 0.00000000E+0, + 0.37568500E+2, 0.307E+3, 0.500E+1, 0.29903000E+1, 0.00000000E+0, 0.26935100E+2, 0.307E+3, + 0.600E+1, 0.29903000E+1, 0.00000000E+0, 0.19770700E+2, 0.307E+3, 0.700E+1, 0.29903000E+1, + 0.00000000E+0, 0.15524900E+2, 0.307E+3, 0.800E+1, 0.29903000E+1, 0.00000000E+0, 0.12151100E+2, + 0.307E+3, 0.900E+1, 0.29903000E+1, 0.00000000E+0, 0.96050000E+1, 0.307E+3, 0.100E+2, + 0.29903000E+1, 0.00000000E+0, 0.98880600E+2, 0.307E+3, 0.110E+2, 0.29903000E+1, 0.00000000E+0, + 0.81535200E+2, 0.307E+3, 0.120E+2, 0.29903000E+1, 0.00000000E+0, 0.77652000E+2, 0.307E+3, + 0.130E+2, 0.29903000E+1, 0.00000000E+0, 0.64057600E+2, 0.307E+3, 0.140E+2, 0.29903000E+1, + 0.00000000E+0, 0.52150900E+2, 0.307E+3, 0.150E+2, 0.29903000E+1, 0.00000000E+0, 0.44652900E+2, + 0.307E+3, 0.160E+2, 0.29903000E+1, 0.00000000E+0, 0.37629500E+2, 0.307E+3, 0.170E+2, + 0.29903000E+1, 0.00000000E+0, 0.31680400E+2, 0.307E+3, 0.180E+2, 0.29903000E+1, 0.00000000E+0, + 0.16201600E+3, 0.307E+3, 0.190E+2, 0.29903000E+1, 0.00000000E+0, 0.14002730E+3, 0.307E+3, + 0.200E+2, 0.29903000E+1, 0.00000000E+0, 0.11711120E+3, 0.307E+3, 0.210E+2, 0.29903000E+1, + 0.00000000E+0, 0.11482560E+3, 0.307E+3, 0.220E+2, 0.29903000E+1, 0.00000000E+0, 0.10604890E+3, + 0.307E+3, 0.230E+2, 0.29903000E+1, 0.00000000E+0, 0.84363100E+2, 0.307E+3, 0.240E+2, + 0.29903000E+1, 0.00000000E+0, 0.92463600E+2, 0.307E+3, 0.250E+2, 0.29903000E+1, 0.00000000E+0, + 0.73418500E+2, 0.307E+3, 0.260E+2, 0.29903000E+1, 0.00000000E+0, 0.78469600E+2, 0.307E+3, + 0.270E+2, 0.29903000E+1, 0.00000000E+0, 0.80085300E+2, 0.307E+3, 0.280E+2, 0.29903000E+1, + 0.00000000E+0, 0.62129900E+2, 0.307E+3, 0.290E+2, 0.29903000E+1, 0.00000000E+0, 0.64863300E+2, + 0.307E+3, 0.300E+2, 0.29903000E+1, 0.00000000E+0, 0.75880000E+2, 0.307E+3, 0.310E+2, + 0.29903000E+1, 0.00000000E+0, 0.69171000E+2, 0.307E+3, 0.320E+2, 0.29903000E+1, 0.00000000E+0, + 0.61042500E+2, 0.307E+3, 0.330E+2, 0.29903000E+1, 0.00000000E+0, 0.56081200E+2, 0.307E+3, + 0.340E+2, 0.29903000E+1, 0.00000000E+0, 0.50334400E+2, 0.307E+3, 0.350E+2, 0.29903000E+1, + 0.00000000E+0, 0.44854600E+2, 0.307E+3, 0.360E+2, 0.29903000E+1, 0.00000000E+0, 0.18314860E+3, + 0.307E+3, 0.370E+2, 0.29903000E+1, 0.00000000E+0, 0.16708650E+3, 0.307E+3, 0.380E+2, + 0.29903000E+1, 0.00000000E+0, 0.14989060E+3, 0.307E+3, 0.390E+2, 0.29903000E+1, 0.00000000E+0, + 0.13695780E+3, 0.307E+3, 0.400E+2, 0.29903000E+1, 0.00000000E+0, 0.12643070E+3, 0.307E+3, + 0.410E+2, 0.29903000E+1, 0.00000000E+0, 0.10010800E+3, 0.307E+3, 0.420E+2, 0.29903000E+1, + 0.00000000E+0, 0.11061190E+3, 0.307E+3, 0.430E+2, 0.29903000E+1, 0.00000000E+0, 0.86616300E+2, + 0.307E+3, 0.440E+2, 0.29903000E+1, 0.00000000E+0, 0.94100700E+2, 0.307E+3, 0.450E+2, + 0.29903000E+1, 0.00000000E+0, 0.87943000E+2, 0.307E+3, 0.460E+2, 0.29903000E+1, 0.00000000E+0, + 0.73805700E+2, 0.307E+3, 0.470E+2, 0.29903000E+1, 0.00000000E+0, 0.78301600E+2, 0.307E+3, + 0.480E+2, 0.29903000E+1, 0.00000000E+0, 0.95772700E+2, 0.307E+3, 0.490E+2, 0.29903000E+1, + 0.00000000E+0, 0.90687600E+2, 0.307E+3, 0.500E+2, 0.29903000E+1, 0.00000000E+0, 0.83057700E+2, + 0.307E+3, 0.510E+2, 0.29903000E+1, 0.00000000E+0, 0.78481900E+2, 0.307E+3, 0.520E+2, + 0.29903000E+1, 0.00000000E+0, 0.72453100E+2, 0.307E+3, 0.530E+2, 0.29903000E+1, 0.00000000E+0, + 0.66508100E+2, 0.307E+3, 0.540E+2, 0.29903000E+1, 0.00000000E+0, 0.22390760E+3, 0.307E+3, + 0.550E+2, 0.29903000E+1, 0.00000000E+0, 0.21212970E+3, 0.307E+3, 0.560E+2, 0.29903000E+1, + 0.00000000E+0, 0.19063700E+3, 0.307E+3, 0.570E+2, 0.29903000E+1, 0.00000000E+0, 0.97988200E+2, + 0.307E+3, 0.580E+2, 0.29903000E+1, 0.27991000E+1, 0.18970840E+3, 0.307E+3, 0.590E+2, + 0.29903000E+1, 0.00000000E+0, 0.18275600E+3, 0.307E+3, 0.600E+2, 0.29903000E+1, 0.00000000E+0, + 0.17832410E+3, 0.307E+3, 0.610E+2, 0.29903000E+1, 0.00000000E+0, 0.17422140E+3, 0.307E+3, + 0.620E+2, 0.29903000E+1, 0.00000000E+0, 0.17058700E+3, 0.307E+3, 0.630E+2, 0.29903000E+1, + 0.00000000E+0, 0.13842980E+3, 0.307E+3, 0.640E+2, 0.29903000E+1, 0.00000000E+0, 0.15082040E+3, + 0.307E+3, 0.650E+2, 0.29903000E+1, 0.00000000E+0, 0.14614450E+3, 0.307E+3, 0.660E+2, + 0.29903000E+1, 0.00000000E+0, 0.15462870E+3, 0.307E+3, 0.670E+2, 0.29903000E+1, 0.00000000E+0, + 0.15139240E+3, 0.307E+3, 0.680E+2, 0.29903000E+1, 0.00000000E+0, 0.14852730E+3, 0.307E+3, + 0.690E+2, 0.29903000E+1, 0.00000000E+0, 0.14657090E+3, 0.307E+3, 0.700E+2, 0.29903000E+1, + 0.00000000E+0, 0.12614450E+3, 0.307E+3, 0.710E+2, 0.29903000E+1, 0.00000000E+0, 0.12685210E+3, + 0.307E+3, 0.720E+2, 0.29903000E+1, 0.00000000E+0, 0.11782080E+3, 0.307E+3, 0.730E+2, + 0.29903000E+1, 0.00000000E+0, 0.10145610E+3, 0.307E+3, 0.740E+2, 0.29903000E+1, 0.00000000E+0, + 0.10369670E+3, 0.307E+3, 0.750E+2, 0.29903000E+1, 0.00000000E+0, 0.95491900E+2, 0.307E+3, + 0.760E+2, 0.29903000E+1, 0.00000000E+0, 0.88641300E+2, 0.307E+3, 0.770E+2, 0.29903000E+1, + 0.00000000E+0, 0.75088300E+2, 0.307E+3, 0.780E+2, 0.29903000E+1, 0.00000000E+0, 0.70691000E+2, + 0.307E+3, 0.790E+2, 0.29903000E+1, 0.00000000E+0, 0.72867700E+2, 0.307E+3, 0.800E+2, + 0.29903000E+1, 0.00000000E+0, 0.99854500E+2, 0.307E+3, 0.810E+2, 0.29903000E+1, 0.00000000E+0, + 0.99155700E+2, 0.307E+3, 0.820E+2, 0.29903000E+1, 0.00000000E+0, 0.93202900E+2, 0.307E+3, + 0.830E+2, 0.29903000E+1, 0.00000000E+0, 0.90185300E+2, 0.307E+3, 0.840E+2, 0.29903000E+1, + 0.00000000E+0, 0.84799100E+2, 0.307E+3, 0.850E+2, 0.29903000E+1, 0.00000000E+0, 0.79155500E+2, + 0.307E+3, 0.860E+2, 0.29903000E+1, 0.00000000E+0, 0.21546340E+3, 0.307E+3, 0.870E+2, + 0.29903000E+1, 0.00000000E+0, 0.21255240E+3, 0.307E+3, 0.880E+2, 0.29903000E+1, 0.00000000E+0, + 0.19179540E+3, 0.307E+3, 0.890E+2, 0.29903000E+1, 0.00000000E+0, 0.17728870E+3, 0.307E+3, + 0.900E+2, 0.29903000E+1, 0.00000000E+0, 0.17432070E+3, 0.307E+3, 0.910E+2, 0.29903000E+1, + 0.00000000E+0, 0.16896800E+3, 0.307E+3, 0.920E+2, 0.29903000E+1, 0.00000000E+0, 0.17120630E+3, + 0.307E+3, 0.930E+2, 0.29903000E+1, 0.00000000E+0, 0.16624200E+3, 0.307E+3, 0.940E+2, + 0.29903000E+1, 0.00000000E+0, 0.10398700E+2, 0.307E+3, 0.101E+3, 0.29903000E+1, 0.00000000E+0, + 0.30602200E+2, 0.307E+3, 0.103E+3, 0.29903000E+1, 0.98650000E+0, 0.39647800E+2, 0.307E+3, + 0.104E+3, 0.29903000E+1, 0.98080000E+0, 0.32164400E+2, 0.307E+3, 0.105E+3, 0.29903000E+1, + 0.97060000E+0, 0.25331800E+2, 0.307E+3, 0.106E+3, 0.29903000E+1, 0.98680000E+0, 0.18518000E+2, + 0.307E+3, 0.107E+3, 0.29903000E+1, 0.99440000E+0, 0.14079300E+2, 0.307E+3, 0.108E+3, + 0.29903000E+1, 0.99250000E+0, 0.10221400E+2, 0.307E+3, 0.109E+3, 0.29903000E+1, 0.99820000E+0, + 0.44492400E+2, 0.307E+3, 0.111E+3, 0.29903000E+1, 0.96840000E+0, 0.68314100E+2, 0.307E+3, + 0.112E+3, 0.29903000E+1, 0.96280000E+0, 0.71023100E+2, 0.307E+3, 0.113E+3, 0.29903000E+1, + 0.96480000E+0, 0.59688700E+2, 0.307E+3, 0.114E+3, 0.29903000E+1, 0.95070000E+0, 0.50739800E+2, + 0.307E+3, 0.115E+3, 0.29903000E+1, 0.99470000E+0, 0.44158100E+2, 0.307E+3, 0.116E+3, + 0.29903000E+1, 0.99480000E+0, 0.37238100E+2, 0.307E+3, 0.117E+3, 0.29903000E+1, 0.99720000E+0, + 0.63868600E+2, 0.307E+3, 0.119E+3, 0.29903000E+1, 0.97670000E+0, 0.11341610E+3, 0.307E+3, + 0.120E+3, 0.29903000E+1, 0.98310000E+0, 0.65520300E+2, 0.307E+3, 0.121E+3, 0.29903000E+1, + 0.18627000E+1, 0.63464500E+2, 0.307E+3, 0.122E+3, 0.29903000E+1, 0.18299000E+1, 0.62202000E+2, + 0.307E+3, 0.123E+3, 0.29903000E+1, 0.19138000E+1, 0.61420200E+2, 0.307E+3, 0.124E+3, + 0.29903000E+1, 0.18269000E+1, 0.57491500E+2, 0.307E+3, 0.125E+3, 0.29903000E+1, 0.16406000E+1, + 0.53617100E+2, 0.307E+3, 0.126E+3, 0.29903000E+1, 0.16483000E+1, 0.51231800E+2, 0.307E+3, + 0.127E+3, 0.29903000E+1, 0.17149000E+1, 0.50021800E+2, 0.307E+3, 0.128E+3, 0.29903000E+1, + 0.17937000E+1, 0.48763000E+2, 0.307E+3, 0.129E+3, 0.29903000E+1, 0.95760000E+0, 0.46891100E+2, + 0.307E+3, 0.130E+3, 0.29903000E+1, 0.19419000E+1, 0.71907900E+2, 0.307E+3, 0.131E+3, + 0.29903000E+1, 0.96010000E+0, 0.65304100E+2, 0.307E+3, 0.132E+3, 0.29903000E+1, 0.94340000E+0, + 0.60151900E+2, 0.307E+3, 0.133E+3, 0.29903000E+1, 0.98890000E+0, 0.56096200E+2, 0.307E+3, + 0.134E+3, 0.29903000E+1, 0.99010000E+0, 0.50629800E+2, 0.307E+3, 0.135E+3, 0.29903000E+1, + 0.99740000E+0, 0.77004000E+2, 0.307E+3, 0.137E+3, 0.29903000E+1, 0.97380000E+0, 0.13809270E+3, + 0.307E+3, 0.138E+3, 0.29903000E+1, 0.98010000E+0, 0.11082380E+3, 0.307E+3, 0.139E+3, + 0.29903000E+1, 0.19153000E+1, 0.86803500E+2, 0.307E+3, 0.140E+3, 0.29903000E+1, 0.19355000E+1, + 0.87650400E+2, 0.307E+3, 0.141E+3, 0.29903000E+1, 0.19545000E+1, 0.82525100E+2, 0.307E+3, + 0.142E+3, 0.29903000E+1, 0.19420000E+1, 0.90466000E+2, 0.307E+3, 0.143E+3, 0.29903000E+1, + 0.16682000E+1, 0.73425900E+2, 0.307E+3, 0.144E+3, 0.29903000E+1, 0.18584000E+1, 0.69000500E+2, + 0.307E+3, 0.145E+3, 0.29903000E+1, 0.19003000E+1, 0.64465100E+2, 0.307E+3, 0.146E+3, + 0.29903000E+1, 0.18630000E+1, 0.62220900E+2, 0.307E+3, 0.147E+3, 0.29903000E+1, 0.96790000E+0, + 0.62213100E+2, 0.307E+3, 0.148E+3, 0.29903000E+1, 0.19539000E+1, 0.92140300E+2, 0.307E+3, + 0.149E+3, 0.29903000E+1, 0.96330000E+0, 0.85547900E+2, 0.307E+3, 0.150E+3, 0.29903000E+1, + 0.95140000E+0, 0.81727900E+2, 0.307E+3, 0.151E+3, 0.29903000E+1, 0.97490000E+0, 0.78506700E+2, + 0.307E+3, 0.152E+3, 0.29903000E+1, 0.98110000E+0, 0.73095400E+2, 0.307E+3, 0.153E+3, + 0.29903000E+1, 0.99680000E+0, 0.92705000E+2, 0.307E+3, 0.155E+3, 0.29903000E+1, 0.99090000E+0, + 0.17805360E+3, 0.307E+3, 0.156E+3, 0.29903000E+1, 0.97970000E+0, 0.13991280E+3, 0.307E+3, + 0.157E+3, 0.29903000E+1, 0.19373000E+1, 0.95217800E+2, 0.307E+3, 0.159E+3, 0.29903000E+1, + 0.29425000E+1, 0.93284100E+2, 0.307E+3, 0.160E+3, 0.29903000E+1, 0.29455000E+1, 0.90480700E+2, + 0.307E+3, 0.161E+3, 0.29903000E+1, 0.29413000E+1, 0.90568200E+2, 0.307E+3, 0.162E+3, + 0.29903000E+1, 0.29300000E+1, 0.86338600E+2, 0.307E+3, 0.163E+3, 0.29903000E+1, 0.18286000E+1, + 0.90910000E+2, 0.307E+3, 0.164E+3, 0.29903000E+1, 0.28732000E+1, 0.85747500E+2, 0.307E+3, + 0.165E+3, 0.29903000E+1, 0.29086000E+1, 0.86674000E+2, 0.307E+3, 0.166E+3, 0.29903000E+1, + 0.28965000E+1, 0.81652000E+2, 0.307E+3, 0.167E+3, 0.29903000E+1, 0.29242000E+1, 0.79429100E+2, + 0.307E+3, 0.168E+3, 0.29903000E+1, 0.29282000E+1, 0.78815000E+2, 0.307E+3, 0.169E+3, + 0.29903000E+1, 0.29246000E+1, 0.82180600E+2, 0.307E+3, 0.170E+3, 0.29903000E+1, 0.28482000E+1, + 0.76300400E+2, 0.307E+3, 0.171E+3, 0.29903000E+1, 0.29219000E+1, 0.98802500E+2, 0.307E+3, + 0.172E+3, 0.29903000E+1, 0.19254000E+1, 0.93300800E+2, 0.307E+3, 0.173E+3, 0.29903000E+1, + 0.19459000E+1, 0.86690900E+2, 0.307E+3, 0.174E+3, 0.29903000E+1, 0.19292000E+1, 0.86498300E+2, + 0.307E+3, 0.175E+3, 0.29903000E+1, 0.18104000E+1, 0.78773500E+2, 0.307E+3, 0.176E+3, + 0.29903000E+1, 0.18858000E+1, 0.74726900E+2, 0.307E+3, 0.177E+3, 0.29903000E+1, 0.18648000E+1, + 0.71762400E+2, 0.307E+3, 0.178E+3, 0.29903000E+1, 0.19188000E+1, 0.68753800E+2, 0.307E+3, + 0.179E+3, 0.29903000E+1, 0.98460000E+0, 0.67229300E+2, 0.307E+3, 0.180E+3, 0.29903000E+1, + 0.19896000E+1, 0.10008700E+3, 0.307E+3, 0.181E+3, 0.29903000E+1, 0.92670000E+0, 0.93482100E+2, + 0.307E+3, 0.182E+3, 0.29903000E+1, 0.93830000E+0, 0.91896500E+2, 0.307E+3, 0.183E+3, + 0.29903000E+1, 0.98200000E+0, 0.90376000E+2, 0.307E+3, 0.184E+3, 0.29903000E+1, 0.98150000E+0, + 0.85807500E+2, 0.307E+3, 0.185E+3, 0.29903000E+1, 0.99540000E+0, 0.10451280E+3, 0.307E+3, + 0.187E+3, 0.29903000E+1, 0.97050000E+0, 0.17971610E+3, 0.307E+3, 0.188E+3, 0.29903000E+1, + 0.96620000E+0, 0.11246690E+3, 0.307E+3, 0.189E+3, 0.29903000E+1, 0.29070000E+1, 0.12728190E+3, + 0.307E+3, 0.190E+3, 0.29903000E+1, 0.28844000E+1, 0.11517510E+3, 0.307E+3, 0.191E+3, + 0.29903000E+1, 0.28738000E+1, 0.10344890E+3, 0.307E+3, 0.192E+3, 0.29903000E+1, 0.28878000E+1, + 0.99987800E+2, 0.307E+3, 0.193E+3, 0.29903000E+1, 0.29095000E+1, 0.11495380E+3, 0.307E+3, + 0.194E+3, 0.29903000E+1, 0.19209000E+1, 0.27422500E+2, 0.307E+3, 0.204E+3, 0.29903000E+1, + 0.19697000E+1, 0.27484200E+2, 0.307E+3, 0.205E+3, 0.29903000E+1, 0.19441000E+1, 0.21148800E+2, + 0.307E+3, 0.206E+3, 0.29903000E+1, 0.19985000E+1, 0.17492800E+2, 0.307E+3, 0.207E+3, + 0.29903000E+1, 0.20143000E+1, 0.12607700E+2, 0.307E+3, 0.208E+3, 0.29903000E+1, 0.19887000E+1, + 0.47205900E+2, 0.307E+3, 0.212E+3, 0.29903000E+1, 0.19496000E+1, 0.56971300E+2, 0.307E+3, + 0.213E+3, 0.29903000E+1, 0.19311000E+1, 0.55919700E+2, 0.307E+3, 0.214E+3, 0.29903000E+1, + 0.19435000E+1, 0.49981800E+2, 0.307E+3, 0.215E+3, 0.29903000E+1, 0.20102000E+1, 0.43313000E+2, + 0.307E+3, 0.216E+3, 0.29903000E+1, 0.19903000E+1, 0.66870600E+2, 0.307E+3, 0.220E+3, + 0.29903000E+1, 0.19349000E+1, 0.65341500E+2, 0.307E+3, 0.221E+3, 0.29903000E+1, 0.28999000E+1, + 0.66260700E+2, 0.307E+3, 0.222E+3, 0.29903000E+1, 0.38675000E+1, 0.60783400E+2, 0.307E+3, + 0.223E+3, 0.29903000E+1, 0.29110000E+1, 0.47503300E+2, 0.307E+3, 0.224E+3, 0.29903000E+1, + 0.10619100E+2, 0.41486200E+2, 0.307E+3, 0.225E+3, 0.29903000E+1, 0.98849000E+1, 0.40637600E+2, + 0.307E+3, 0.226E+3, 0.29903000E+1, 0.91376000E+1, 0.46084100E+2, 0.307E+3, 0.227E+3, + 0.29903000E+1, 0.29263000E+1, 0.43309600E+2, 0.307E+3, 0.228E+3, 0.29903000E+1, 0.65458000E+1, + 0.58812600E+2, 0.307E+3, 0.231E+3, 0.29903000E+1, 0.19315000E+1, 0.62560900E+2, 0.307E+3, + 0.232E+3, 0.29903000E+1, 0.19447000E+1, 0.58794500E+2, 0.307E+3, 0.233E+3, 0.29903000E+1, + 0.19793000E+1, 0.55703700E+2, 0.307E+3, 0.234E+3, 0.29903000E+1, 0.19812000E+1, 0.80586800E+2, + 0.307E+3, 0.238E+3, 0.29903000E+1, 0.19143000E+1, 0.79155000E+2, 0.307E+3, 0.239E+3, + 0.29903000E+1, 0.28903000E+1, 0.80375800E+2, 0.307E+3, 0.240E+3, 0.29903000E+1, 0.39106000E+1, + 0.77868100E+2, 0.307E+3, 0.241E+3, 0.29903000E+1, 0.29225000E+1, 0.70424400E+2, 0.307E+3, + 0.242E+3, 0.29903000E+1, 0.11055600E+2, 0.63308100E+2, 0.307E+3, 0.243E+3, 0.29903000E+1, + 0.95402000E+1, 0.60264100E+2, 0.307E+3, 0.244E+3, 0.29903000E+1, 0.88895000E+1, 0.60414900E+2, + 0.307E+3, 0.245E+3, 0.29903000E+1, 0.29696000E+1, 0.62653200E+2, 0.307E+3, 0.246E+3, + 0.29903000E+1, 0.57095000E+1, 0.76779800E+2, 0.307E+3, 0.249E+3, 0.29903000E+1, 0.19378000E+1, + 0.83196800E+2, 0.307E+3, 0.250E+3, 0.29903000E+1, 0.19505000E+1, 0.79891200E+2, 0.307E+3, + 0.251E+3, 0.29903000E+1, 0.19523000E+1, 0.78022400E+2, 0.307E+3, 0.252E+3, 0.29903000E+1, + 0.19639000E+1, 0.98267000E+2, 0.307E+3, 0.256E+3, 0.29903000E+1, 0.18467000E+1, 0.10262510E+3, + 0.307E+3, 0.257E+3, 0.29903000E+1, 0.29175000E+1, 0.77737900E+2, 0.307E+3, 0.272E+3, + 0.29903000E+1, 0.38840000E+1, 0.80805200E+2, 0.307E+3, 0.273E+3, 0.29903000E+1, 0.28988000E+1, + 0.76585200E+2, 0.307E+3, 0.274E+3, 0.29903000E+1, 0.10915300E+2, 0.70735300E+2, 0.307E+3, + 0.275E+3, 0.29903000E+1, 0.98054000E+1, 0.67427200E+2, 0.307E+3, 0.276E+3, 0.29903000E+1, + 0.91527000E+1, 0.67888500E+2, 0.307E+3, 0.277E+3, 0.29903000E+1, 0.29424000E+1, 0.71112000E+2, + 0.307E+3, 0.278E+3, 0.29903000E+1, 0.66669000E+1, 0.83409500E+2, 0.307E+3, 0.281E+3, + 0.29903000E+1, 0.19302000E+1, 0.88005200E+2, 0.307E+3, 0.282E+3, 0.29903000E+1, 0.19356000E+1, + 0.90199000E+2, 0.307E+3, 0.283E+3, 0.29903000E+1, 0.19655000E+1, 0.90200500E+2, 0.307E+3, + 0.284E+3, 0.29903000E+1, 0.19639000E+1, 0.10838490E+3, 0.307E+3, 0.288E+3, 0.29903000E+1, + 0.18075000E+1, 0.21720500E+2, 0.307E+3, 0.305E+3, 0.29903000E+1, 0.29128000E+1, 0.19866900E+2, + 0.307E+3, 0.306E+3, 0.29903000E+1, 0.29987000E+1, 0.15581700E+2, 0.307E+3, 0.307E+3, + 0.29903000E+1, 0.29903000E+1, 0.21058400E+2, 0.313E+3, 0.100E+1, 0.29146000E+1, 0.91180000E+0, + 0.13698200E+2, 0.313E+3, 0.200E+1, 0.29146000E+1, 0.00000000E+0, 0.32279250E+3, 0.313E+3, + 0.300E+1, 0.29146000E+1, 0.00000000E+0, 0.18966050E+3, 0.313E+3, 0.400E+1, 0.29146000E+1, + 0.00000000E+0, 0.12796450E+3, 0.313E+3, 0.500E+1, 0.29146000E+1, 0.00000000E+0, 0.86160500E+2, + 0.313E+3, 0.600E+1, 0.29146000E+1, 0.00000000E+0, 0.59907400E+2, 0.313E+3, 0.700E+1, + 0.29146000E+1, 0.00000000E+0, 0.45087600E+2, 0.313E+3, 0.800E+1, 0.29146000E+1, 0.00000000E+0, + 0.33933400E+2, 0.313E+3, 0.900E+1, 0.29146000E+1, 0.00000000E+0, 0.25933500E+2, 0.313E+3, + 0.100E+2, 0.29146000E+1, 0.00000000E+0, 0.38609800E+3, 0.313E+3, 0.110E+2, 0.29146000E+1, + 0.00000000E+0, 0.30133070E+3, 0.313E+3, 0.120E+2, 0.29146000E+1, 0.00000000E+0, 0.27856390E+3, + 0.313E+3, 0.130E+2, 0.29146000E+1, 0.00000000E+0, 0.21994790E+3, 0.313E+3, 0.140E+2, + 0.29146000E+1, 0.00000000E+0, 0.17135570E+3, 0.313E+3, 0.150E+2, 0.29146000E+1, 0.00000000E+0, + 0.14185170E+3, 0.313E+3, 0.160E+2, 0.29146000E+1, 0.00000000E+0, 0.11545520E+3, 0.313E+3, + 0.170E+2, 0.29146000E+1, 0.00000000E+0, 0.94042800E+2, 0.313E+3, 0.180E+2, 0.29146000E+1, + 0.00000000E+0, 0.62895370E+3, 0.313E+3, 0.190E+2, 0.29146000E+1, 0.00000000E+0, 0.52583670E+3, + 0.313E+3, 0.200E+2, 0.29146000E+1, 0.00000000E+0, 0.43542050E+3, 0.313E+3, 0.210E+2, + 0.29146000E+1, 0.00000000E+0, 0.42087110E+3, 0.313E+3, 0.220E+2, 0.29146000E+1, 0.00000000E+0, + 0.38566110E+3, 0.313E+3, 0.230E+2, 0.29146000E+1, 0.00000000E+0, 0.30312660E+3, 0.313E+3, + 0.240E+2, 0.29146000E+1, 0.00000000E+0, 0.33231560E+3, 0.313E+3, 0.250E+2, 0.29146000E+1, + 0.00000000E+0, 0.26022290E+3, 0.313E+3, 0.260E+2, 0.29146000E+1, 0.00000000E+0, 0.27689480E+3, + 0.313E+3, 0.270E+2, 0.29146000E+1, 0.00000000E+0, 0.28511740E+3, 0.313E+3, 0.280E+2, + 0.29146000E+1, 0.00000000E+0, 0.21789580E+3, 0.313E+3, 0.290E+2, 0.29146000E+1, 0.00000000E+0, + 0.22471970E+3, 0.313E+3, 0.300E+2, 0.29146000E+1, 0.00000000E+0, 0.26645340E+3, 0.313E+3, + 0.310E+2, 0.29146000E+1, 0.00000000E+0, 0.23543820E+3, 0.313E+3, 0.320E+2, 0.29146000E+1, + 0.00000000E+0, 0.20075140E+3, 0.313E+3, 0.330E+2, 0.29146000E+1, 0.00000000E+0, 0.17986350E+3, + 0.313E+3, 0.340E+2, 0.29146000E+1, 0.00000000E+0, 0.15701910E+3, 0.313E+3, 0.350E+2, + 0.29146000E+1, 0.00000000E+0, 0.13612380E+3, 0.313E+3, 0.360E+2, 0.29146000E+1, 0.00000000E+0, + 0.70496090E+3, 0.313E+3, 0.370E+2, 0.29146000E+1, 0.00000000E+0, 0.62569960E+3, 0.313E+3, + 0.380E+2, 0.29146000E+1, 0.00000000E+0, 0.54992420E+3, 0.313E+3, 0.390E+2, 0.29146000E+1, + 0.00000000E+0, 0.49495070E+3, 0.313E+3, 0.400E+2, 0.29146000E+1, 0.00000000E+0, 0.45153080E+3, + 0.313E+3, 0.410E+2, 0.29146000E+1, 0.00000000E+0, 0.34833970E+3, 0.313E+3, 0.420E+2, + 0.29146000E+1, 0.00000000E+0, 0.38882260E+3, 0.313E+3, 0.430E+2, 0.29146000E+1, 0.00000000E+0, + 0.29592560E+3, 0.313E+3, 0.440E+2, 0.29146000E+1, 0.00000000E+0, 0.32404080E+3, 0.313E+3, + 0.450E+2, 0.29146000E+1, 0.00000000E+0, 0.30049770E+3, 0.313E+3, 0.460E+2, 0.29146000E+1, + 0.00000000E+0, 0.24967590E+3, 0.313E+3, 0.470E+2, 0.29146000E+1, 0.00000000E+0, 0.26472910E+3, + 0.313E+3, 0.480E+2, 0.29146000E+1, 0.00000000E+0, 0.33234100E+3, 0.313E+3, 0.490E+2, + 0.29146000E+1, 0.00000000E+0, 0.30808400E+3, 0.313E+3, 0.500E+2, 0.29146000E+1, 0.00000000E+0, + 0.27473330E+3, 0.313E+3, 0.510E+2, 0.29146000E+1, 0.00000000E+0, 0.25478050E+3, 0.313E+3, + 0.520E+2, 0.29146000E+1, 0.00000000E+0, 0.23007980E+3, 0.313E+3, 0.530E+2, 0.29146000E+1, + 0.00000000E+0, 0.20645810E+3, 0.313E+3, 0.540E+2, 0.29146000E+1, 0.00000000E+0, 0.85867990E+3, + 0.313E+3, 0.550E+2, 0.29146000E+1, 0.00000000E+0, 0.79610660E+3, 0.313E+3, 0.560E+2, + 0.29146000E+1, 0.00000000E+0, 0.70193980E+3, 0.313E+3, 0.570E+2, 0.29146000E+1, 0.00000000E+0, + 0.32415330E+3, 0.313E+3, 0.580E+2, 0.29146000E+1, 0.27991000E+1, 0.70578730E+3, 0.313E+3, + 0.590E+2, 0.29146000E+1, 0.00000000E+0, 0.67819310E+3, 0.313E+3, 0.600E+2, 0.29146000E+1, + 0.00000000E+0, 0.66131780E+3, 0.313E+3, 0.610E+2, 0.29146000E+1, 0.00000000E+0, 0.64579390E+3, + 0.313E+3, 0.620E+2, 0.29146000E+1, 0.00000000E+0, 0.63203590E+3, 0.313E+3, 0.630E+2, + 0.29146000E+1, 0.00000000E+0, 0.49802070E+3, 0.313E+3, 0.640E+2, 0.29146000E+1, 0.00000000E+0, + 0.55718410E+3, 0.313E+3, 0.650E+2, 0.29146000E+1, 0.00000000E+0, 0.53772660E+3, 0.313E+3, + 0.660E+2, 0.29146000E+1, 0.00000000E+0, 0.57065080E+3, 0.313E+3, 0.670E+2, 0.29146000E+1, + 0.00000000E+0, 0.55863790E+3, 0.313E+3, 0.680E+2, 0.29146000E+1, 0.00000000E+0, 0.54782520E+3, + 0.313E+3, 0.690E+2, 0.29146000E+1, 0.00000000E+0, 0.54139780E+3, 0.313E+3, 0.700E+2, + 0.29146000E+1, 0.00000000E+0, 0.45683250E+3, 0.313E+3, 0.710E+2, 0.29146000E+1, 0.00000000E+0, + 0.45089790E+3, 0.313E+3, 0.720E+2, 0.29146000E+1, 0.00000000E+0, 0.41177370E+3, 0.313E+3, + 0.730E+2, 0.29146000E+1, 0.00000000E+0, 0.34723090E+3, 0.313E+3, 0.740E+2, 0.29146000E+1, + 0.00000000E+0, 0.35352640E+3, 0.313E+3, 0.750E+2, 0.29146000E+1, 0.00000000E+0, 0.32038750E+3, + 0.313E+3, 0.760E+2, 0.29146000E+1, 0.00000000E+0, 0.29331160E+3, 0.313E+3, 0.770E+2, + 0.29146000E+1, 0.00000000E+0, 0.24307640E+3, 0.313E+3, 0.780E+2, 0.29146000E+1, 0.00000000E+0, + 0.22688500E+3, 0.313E+3, 0.790E+2, 0.29146000E+1, 0.00000000E+0, 0.23369270E+3, 0.313E+3, + 0.800E+2, 0.29146000E+1, 0.00000000E+0, 0.34043160E+3, 0.313E+3, 0.810E+2, 0.29146000E+1, + 0.00000000E+0, 0.33373140E+3, 0.313E+3, 0.820E+2, 0.29146000E+1, 0.00000000E+0, 0.30698840E+3, + 0.313E+3, 0.830E+2, 0.29146000E+1, 0.00000000E+0, 0.29279590E+3, 0.313E+3, 0.840E+2, + 0.29146000E+1, 0.00000000E+0, 0.27003130E+3, 0.313E+3, 0.850E+2, 0.29146000E+1, 0.00000000E+0, + 0.24716150E+3, 0.313E+3, 0.860E+2, 0.29146000E+1, 0.00000000E+0, 0.81311660E+3, 0.313E+3, + 0.870E+2, 0.29146000E+1, 0.00000000E+0, 0.78841980E+3, 0.313E+3, 0.880E+2, 0.29146000E+1, + 0.00000000E+0, 0.69912600E+3, 0.313E+3, 0.890E+2, 0.29146000E+1, 0.00000000E+0, 0.62955760E+3, + 0.313E+3, 0.900E+2, 0.29146000E+1, 0.00000000E+0, 0.62364620E+3, 0.313E+3, 0.910E+2, + 0.29146000E+1, 0.00000000E+0, 0.60379750E+3, 0.313E+3, 0.920E+2, 0.29146000E+1, 0.00000000E+0, + 0.62051110E+3, 0.313E+3, 0.930E+2, 0.29146000E+1, 0.00000000E+0, 0.60113500E+3, 0.313E+3, + 0.940E+2, 0.29146000E+1, 0.00000000E+0, 0.34070000E+2, 0.313E+3, 0.101E+3, 0.29146000E+1, + 0.00000000E+0, 0.11021360E+3, 0.313E+3, 0.103E+3, 0.29146000E+1, 0.98650000E+0, 0.14056320E+3, + 0.313E+3, 0.104E+3, 0.29146000E+1, 0.98080000E+0, 0.10751580E+3, 0.313E+3, 0.105E+3, + 0.29146000E+1, 0.97060000E+0, 0.80711100E+2, 0.313E+3, 0.106E+3, 0.29146000E+1, 0.98680000E+0, + 0.55779300E+2, 0.313E+3, 0.107E+3, 0.29146000E+1, 0.99440000E+0, 0.40337400E+2, 0.313E+3, + 0.108E+3, 0.29146000E+1, 0.99250000E+0, 0.27443600E+2, 0.313E+3, 0.109E+3, 0.29146000E+1, + 0.99820000E+0, 0.16065940E+3, 0.313E+3, 0.111E+3, 0.29146000E+1, 0.96840000E+0, 0.24856920E+3, + 0.313E+3, 0.112E+3, 0.29146000E+1, 0.96280000E+0, 0.25249530E+3, 0.313E+3, 0.113E+3, + 0.29146000E+1, 0.96480000E+0, 0.20322260E+3, 0.313E+3, 0.114E+3, 0.29146000E+1, 0.95070000E+0, + 0.16626980E+3, 0.313E+3, 0.115E+3, 0.29146000E+1, 0.99470000E+0, 0.14026180E+3, 0.313E+3, + 0.116E+3, 0.29146000E+1, 0.99480000E+0, 0.11424050E+3, 0.313E+3, 0.117E+3, 0.29146000E+1, + 0.99720000E+0, 0.22072640E+3, 0.313E+3, 0.119E+3, 0.29146000E+1, 0.97670000E+0, 0.41971290E+3, + 0.313E+3, 0.120E+3, 0.29146000E+1, 0.98310000E+0, 0.22183390E+3, 0.313E+3, 0.121E+3, + 0.29146000E+1, 0.18627000E+1, 0.21401930E+3, 0.313E+3, 0.122E+3, 0.29146000E+1, 0.18299000E+1, + 0.20967420E+3, 0.313E+3, 0.123E+3, 0.29146000E+1, 0.19138000E+1, 0.20762990E+3, 0.313E+3, + 0.124E+3, 0.29146000E+1, 0.18269000E+1, 0.19138970E+3, 0.313E+3, 0.125E+3, 0.29146000E+1, + 0.16406000E+1, 0.17705420E+3, 0.313E+3, 0.126E+3, 0.29146000E+1, 0.16483000E+1, 0.16880270E+3, + 0.313E+3, 0.127E+3, 0.29146000E+1, 0.17149000E+1, 0.16499240E+3, 0.313E+3, 0.128E+3, + 0.29146000E+1, 0.17937000E+1, 0.16280210E+3, 0.313E+3, 0.129E+3, 0.29146000E+1, 0.95760000E+0, + 0.15307760E+3, 0.313E+3, 0.130E+3, 0.29146000E+1, 0.19419000E+1, 0.25034940E+3, 0.313E+3, + 0.131E+3, 0.29146000E+1, 0.96010000E+0, 0.22023170E+3, 0.313E+3, 0.132E+3, 0.29146000E+1, + 0.94340000E+0, 0.19730880E+3, 0.313E+3, 0.133E+3, 0.29146000E+1, 0.98890000E+0, 0.17991980E+3, + 0.313E+3, 0.134E+3, 0.29146000E+1, 0.99010000E+0, 0.15811820E+3, 0.313E+3, 0.135E+3, + 0.29146000E+1, 0.99740000E+0, 0.26324390E+3, 0.313E+3, 0.137E+3, 0.29146000E+1, 0.97380000E+0, + 0.50999270E+3, 0.313E+3, 0.138E+3, 0.29146000E+1, 0.98010000E+0, 0.39206600E+3, 0.313E+3, + 0.139E+3, 0.29146000E+1, 0.19153000E+1, 0.29297650E+3, 0.313E+3, 0.140E+3, 0.29146000E+1, + 0.19355000E+1, 0.29577860E+3, 0.313E+3, 0.141E+3, 0.29146000E+1, 0.19545000E+1, 0.27564350E+3, + 0.313E+3, 0.142E+3, 0.29146000E+1, 0.19420000E+1, 0.30843590E+3, 0.313E+3, 0.143E+3, + 0.29146000E+1, 0.16682000E+1, 0.24026870E+3, 0.313E+3, 0.144E+3, 0.29146000E+1, 0.18584000E+1, + 0.22456570E+3, 0.313E+3, 0.145E+3, 0.29146000E+1, 0.19003000E+1, 0.20834700E+3, 0.313E+3, + 0.146E+3, 0.29146000E+1, 0.18630000E+1, 0.20146610E+3, 0.313E+3, 0.147E+3, 0.29146000E+1, + 0.96790000E+0, 0.19966700E+3, 0.313E+3, 0.148E+3, 0.29146000E+1, 0.19539000E+1, 0.31698520E+3, + 0.313E+3, 0.149E+3, 0.29146000E+1, 0.96330000E+0, 0.28733370E+3, 0.313E+3, 0.150E+3, + 0.29146000E+1, 0.95140000E+0, 0.26924000E+3, 0.313E+3, 0.151E+3, 0.29146000E+1, 0.97490000E+0, + 0.25459630E+3, 0.313E+3, 0.152E+3, 0.29146000E+1, 0.98110000E+0, 0.23226170E+3, 0.313E+3, + 0.153E+3, 0.29146000E+1, 0.99680000E+0, 0.31205400E+3, 0.313E+3, 0.155E+3, 0.29146000E+1, + 0.99090000E+0, 0.65974760E+3, 0.313E+3, 0.156E+3, 0.29146000E+1, 0.97970000E+0, 0.49580770E+3, + 0.313E+3, 0.157E+3, 0.29146000E+1, 0.19373000E+1, 0.31434490E+3, 0.313E+3, 0.159E+3, + 0.29146000E+1, 0.29425000E+1, 0.30783100E+3, 0.313E+3, 0.160E+3, 0.29146000E+1, 0.29455000E+1, + 0.29804520E+3, 0.313E+3, 0.161E+3, 0.29146000E+1, 0.29413000E+1, 0.29947280E+3, 0.313E+3, + 0.162E+3, 0.29146000E+1, 0.29300000E+1, 0.28833130E+3, 0.313E+3, 0.163E+3, 0.29146000E+1, + 0.18286000E+1, 0.30148740E+3, 0.313E+3, 0.164E+3, 0.29146000E+1, 0.28732000E+1, 0.28310610E+3, + 0.313E+3, 0.165E+3, 0.29146000E+1, 0.29086000E+1, 0.28795020E+3, 0.313E+3, 0.166E+3, + 0.29146000E+1, 0.28965000E+1, 0.26876200E+3, 0.313E+3, 0.167E+3, 0.29146000E+1, 0.29242000E+1, + 0.26111000E+3, 0.313E+3, 0.168E+3, 0.29146000E+1, 0.29282000E+1, 0.25945460E+3, 0.313E+3, + 0.169E+3, 0.29146000E+1, 0.29246000E+1, 0.27290680E+3, 0.313E+3, 0.170E+3, 0.29146000E+1, + 0.28482000E+1, 0.25082830E+3, 0.313E+3, 0.171E+3, 0.29146000E+1, 0.29219000E+1, 0.33919420E+3, + 0.313E+3, 0.172E+3, 0.29146000E+1, 0.19254000E+1, 0.31485670E+3, 0.313E+3, 0.173E+3, + 0.29146000E+1, 0.19459000E+1, 0.28725880E+3, 0.313E+3, 0.174E+3, 0.29146000E+1, 0.19292000E+1, + 0.29046490E+3, 0.313E+3, 0.175E+3, 0.29146000E+1, 0.18104000E+1, 0.25437210E+3, 0.313E+3, + 0.176E+3, 0.29146000E+1, 0.18858000E+1, 0.23906730E+3, 0.313E+3, 0.177E+3, 0.29146000E+1, + 0.18648000E+1, 0.22815940E+3, 0.313E+3, 0.178E+3, 0.29146000E+1, 0.19188000E+1, 0.21789610E+3, + 0.313E+3, 0.179E+3, 0.29146000E+1, 0.98460000E+0, 0.21069250E+3, 0.313E+3, 0.180E+3, + 0.29146000E+1, 0.19896000E+1, 0.33974310E+3, 0.313E+3, 0.181E+3, 0.29146000E+1, 0.92670000E+0, + 0.31027180E+3, 0.313E+3, 0.182E+3, 0.29146000E+1, 0.93830000E+0, 0.30114890E+3, 0.313E+3, + 0.183E+3, 0.29146000E+1, 0.98200000E+0, 0.29290320E+3, 0.313E+3, 0.184E+3, 0.29146000E+1, + 0.98150000E+0, 0.27334560E+3, 0.313E+3, 0.185E+3, 0.29146000E+1, 0.99540000E+0, 0.35155860E+3, + 0.313E+3, 0.187E+3, 0.29146000E+1, 0.97050000E+0, 0.65770110E+3, 0.313E+3, 0.188E+3, + 0.29146000E+1, 0.96620000E+0, 0.37210800E+3, 0.313E+3, 0.189E+3, 0.29146000E+1, 0.29070000E+1, + 0.42861200E+3, 0.313E+3, 0.190E+3, 0.29146000E+1, 0.28844000E+1, 0.38281860E+3, 0.313E+3, + 0.191E+3, 0.29146000E+1, 0.28738000E+1, 0.33870230E+3, 0.313E+3, 0.192E+3, 0.29146000E+1, + 0.28878000E+1, 0.32590880E+3, 0.313E+3, 0.193E+3, 0.29146000E+1, 0.29095000E+1, 0.39082830E+3, + 0.313E+3, 0.194E+3, 0.29146000E+1, 0.19209000E+1, 0.92012600E+2, 0.313E+3, 0.204E+3, + 0.29146000E+1, 0.19697000E+1, 0.90144000E+2, 0.313E+3, 0.205E+3, 0.29146000E+1, 0.19441000E+1, + 0.65696800E+2, 0.313E+3, 0.206E+3, 0.29146000E+1, 0.19985000E+1, 0.52313600E+2, 0.313E+3, + 0.207E+3, 0.29146000E+1, 0.20143000E+1, 0.35460200E+2, 0.313E+3, 0.208E+3, 0.29146000E+1, + 0.19887000E+1, 0.16311000E+3, 0.313E+3, 0.212E+3, 0.29146000E+1, 0.19496000E+1, 0.19694110E+3, + 0.313E+3, 0.213E+3, 0.29146000E+1, 0.19311000E+1, 0.18900340E+3, 0.313E+3, 0.214E+3, + 0.29146000E+1, 0.19435000E+1, 0.16395650E+3, 0.313E+3, 0.215E+3, 0.29146000E+1, 0.20102000E+1, + 0.13739070E+3, 0.313E+3, 0.216E+3, 0.29146000E+1, 0.19903000E+1, 0.22781080E+3, 0.313E+3, + 0.220E+3, 0.29146000E+1, 0.19349000E+1, 0.21910140E+3, 0.313E+3, 0.221E+3, 0.29146000E+1, + 0.28999000E+1, 0.22177080E+3, 0.313E+3, 0.222E+3, 0.29146000E+1, 0.38675000E+1, 0.20271680E+3, + 0.313E+3, 0.223E+3, 0.29146000E+1, 0.29110000E+1, 0.15223080E+3, 0.313E+3, 0.224E+3, + 0.29146000E+1, 0.10619100E+2, 0.13008090E+3, 0.313E+3, 0.225E+3, 0.29146000E+1, 0.98849000E+1, + 0.12768330E+3, 0.313E+3, 0.226E+3, 0.29146000E+1, 0.91376000E+1, 0.14999510E+3, 0.313E+3, + 0.227E+3, 0.29146000E+1, 0.29263000E+1, 0.13971080E+3, 0.313E+3, 0.228E+3, 0.29146000E+1, + 0.65458000E+1, 0.19848130E+3, 0.313E+3, 0.231E+3, 0.29146000E+1, 0.19315000E+1, 0.20964300E+3, + 0.313E+3, 0.232E+3, 0.29146000E+1, 0.19447000E+1, 0.19209160E+3, 0.313E+3, 0.233E+3, + 0.29146000E+1, 0.19793000E+1, 0.17848350E+3, 0.313E+3, 0.234E+3, 0.29146000E+1, 0.19812000E+1, + 0.27262520E+3, 0.313E+3, 0.238E+3, 0.29146000E+1, 0.19143000E+1, 0.26276340E+3, 0.313E+3, + 0.239E+3, 0.29146000E+1, 0.28903000E+1, 0.26502430E+3, 0.313E+3, 0.240E+3, 0.29146000E+1, + 0.39106000E+1, 0.25593200E+3, 0.313E+3, 0.241E+3, 0.29146000E+1, 0.29225000E+1, 0.22596360E+3, + 0.313E+3, 0.242E+3, 0.29146000E+1, 0.11055600E+2, 0.19915880E+3, 0.313E+3, 0.243E+3, + 0.29146000E+1, 0.95402000E+1, 0.18804460E+3, 0.313E+3, 0.244E+3, 0.29146000E+1, 0.88895000E+1, + 0.19149380E+3, 0.313E+3, 0.245E+3, 0.29146000E+1, 0.29696000E+1, 0.20021140E+3, 0.313E+3, + 0.246E+3, 0.29146000E+1, 0.57095000E+1, 0.25528030E+3, 0.313E+3, 0.249E+3, 0.29146000E+1, + 0.19378000E+1, 0.27779270E+3, 0.313E+3, 0.250E+3, 0.29146000E+1, 0.19505000E+1, 0.26182240E+3, + 0.313E+3, 0.251E+3, 0.29146000E+1, 0.19523000E+1, 0.25251890E+3, 0.313E+3, 0.252E+3, + 0.29146000E+1, 0.19639000E+1, 0.32959150E+3, 0.313E+3, 0.256E+3, 0.29146000E+1, 0.18467000E+1, + 0.34222420E+3, 0.313E+3, 0.257E+3, 0.29146000E+1, 0.29175000E+1, 0.25364330E+3, 0.313E+3, + 0.272E+3, 0.29146000E+1, 0.38840000E+1, 0.26456000E+3, 0.313E+3, 0.273E+3, 0.29146000E+1, + 0.28988000E+1, 0.24551490E+3, 0.313E+3, 0.274E+3, 0.29146000E+1, 0.10915300E+2, 0.22268310E+3, + 0.313E+3, 0.275E+3, 0.29146000E+1, 0.98054000E+1, 0.20925910E+3, 0.313E+3, 0.276E+3, + 0.29146000E+1, 0.91527000E+1, 0.21319310E+3, 0.313E+3, 0.277E+3, 0.29146000E+1, 0.29424000E+1, + 0.22444800E+3, 0.313E+3, 0.278E+3, 0.29146000E+1, 0.66669000E+1, 0.27230380E+3, 0.313E+3, + 0.281E+3, 0.29146000E+1, 0.19302000E+1, 0.28809540E+3, 0.313E+3, 0.282E+3, 0.29146000E+1, + 0.19356000E+1, 0.29386510E+3, 0.313E+3, 0.283E+3, 0.29146000E+1, 0.19655000E+1, 0.29167140E+3, + 0.313E+3, 0.284E+3, 0.29146000E+1, 0.19639000E+1, 0.36287330E+3, 0.313E+3, 0.288E+3, + 0.29146000E+1, 0.18075000E+1, 0.68433000E+2, 0.313E+3, 0.305E+3, 0.29146000E+1, 0.29128000E+1, + 0.61382900E+2, 0.313E+3, 0.306E+3, 0.29146000E+1, 0.29987000E+1, 0.45939900E+2, 0.313E+3, + 0.307E+3, 0.29146000E+1, 0.29903000E+1, 0.15359450E+3, 0.313E+3, 0.313E+3, 0.29146000E+1, + 0.29146000E+1, 0.24983300E+2, 0.314E+3, 0.100E+1, 0.29407000E+1, 0.91180000E+0, 0.16110400E+2, + 0.314E+3, 0.200E+1, 0.29407000E+1, 0.00000000E+0, 0.40808020E+3, 0.314E+3, 0.300E+1, + 0.29407000E+1, 0.00000000E+0, 0.23182510E+3, 0.314E+3, 0.400E+1, 0.29407000E+1, 0.00000000E+0, + 0.15403880E+3, 0.314E+3, 0.500E+1, 0.29407000E+1, 0.00000000E+0, 0.10272020E+3, 0.314E+3, + 0.600E+1, 0.29407000E+1, 0.00000000E+0, 0.70976100E+2, 0.314E+3, 0.700E+1, 0.29407000E+1, + 0.00000000E+0, 0.53206100E+2, 0.314E+3, 0.800E+1, 0.29407000E+1, 0.00000000E+0, 0.39917200E+2, + 0.314E+3, 0.900E+1, 0.29407000E+1, 0.00000000E+0, 0.30433800E+2, 0.314E+3, 0.100E+2, + 0.29407000E+1, 0.00000000E+0, 0.48717610E+3, 0.314E+3, 0.110E+2, 0.29407000E+1, 0.00000000E+0, + 0.37037780E+3, 0.314E+3, 0.120E+2, 0.29407000E+1, 0.00000000E+0, 0.33945020E+3, 0.314E+3, + 0.130E+2, 0.29407000E+1, 0.00000000E+0, 0.26511890E+3, 0.314E+3, 0.140E+2, 0.29407000E+1, + 0.00000000E+0, 0.20487700E+3, 0.314E+3, 0.150E+2, 0.29407000E+1, 0.00000000E+0, 0.16882250E+3, + 0.314E+3, 0.160E+2, 0.29407000E+1, 0.00000000E+0, 0.13684600E+3, 0.314E+3, 0.170E+2, + 0.29407000E+1, 0.00000000E+0, 0.11110440E+3, 0.314E+3, 0.180E+2, 0.29407000E+1, 0.00000000E+0, + 0.79883900E+3, 0.314E+3, 0.190E+2, 0.29407000E+1, 0.00000000E+0, 0.65341740E+3, 0.314E+3, + 0.200E+2, 0.29407000E+1, 0.00000000E+0, 0.53857540E+3, 0.314E+3, 0.210E+2, 0.29407000E+1, + 0.00000000E+0, 0.51863330E+3, 0.314E+3, 0.220E+2, 0.29407000E+1, 0.00000000E+0, 0.47415850E+3, + 0.314E+3, 0.230E+2, 0.29407000E+1, 0.00000000E+0, 0.37278380E+3, 0.314E+3, 0.240E+2, + 0.29407000E+1, 0.00000000E+0, 0.40724250E+3, 0.314E+3, 0.250E+2, 0.29407000E+1, 0.00000000E+0, + 0.31885890E+3, 0.314E+3, 0.260E+2, 0.29407000E+1, 0.00000000E+0, 0.33746240E+3, 0.314E+3, + 0.270E+2, 0.29407000E+1, 0.00000000E+0, 0.34824770E+3, 0.314E+3, 0.280E+2, 0.29407000E+1, + 0.00000000E+0, 0.26631200E+3, 0.314E+3, 0.290E+2, 0.29407000E+1, 0.00000000E+0, 0.27256060E+3, + 0.314E+3, 0.300E+2, 0.29407000E+1, 0.00000000E+0, 0.32381790E+3, 0.314E+3, 0.310E+2, + 0.29407000E+1, 0.00000000E+0, 0.28369090E+3, 0.314E+3, 0.320E+2, 0.29407000E+1, 0.00000000E+0, + 0.24023030E+3, 0.314E+3, 0.330E+2, 0.29407000E+1, 0.00000000E+0, 0.21441210E+3, 0.314E+3, + 0.340E+2, 0.29407000E+1, 0.00000000E+0, 0.18649270E+3, 0.314E+3, 0.350E+2, 0.29407000E+1, + 0.00000000E+0, 0.16117030E+3, 0.314E+3, 0.360E+2, 0.29407000E+1, 0.00000000E+0, 0.89400720E+3, + 0.314E+3, 0.370E+2, 0.29407000E+1, 0.00000000E+0, 0.77835390E+3, 0.314E+3, 0.380E+2, + 0.29407000E+1, 0.00000000E+0, 0.67875770E+3, 0.314E+3, 0.390E+2, 0.29407000E+1, 0.00000000E+0, + 0.60808480E+3, 0.314E+3, 0.400E+2, 0.29407000E+1, 0.00000000E+0, 0.55314470E+3, 0.314E+3, + 0.410E+2, 0.29407000E+1, 0.00000000E+0, 0.42480720E+3, 0.314E+3, 0.420E+2, 0.29407000E+1, + 0.00000000E+0, 0.47494180E+3, 0.314E+3, 0.430E+2, 0.29407000E+1, 0.00000000E+0, 0.35969290E+3, + 0.314E+3, 0.440E+2, 0.29407000E+1, 0.00000000E+0, 0.39366130E+3, 0.314E+3, 0.450E+2, + 0.29407000E+1, 0.00000000E+0, 0.36442410E+3, 0.314E+3, 0.460E+2, 0.29407000E+1, 0.00000000E+0, + 0.30337520E+3, 0.314E+3, 0.470E+2, 0.29407000E+1, 0.00000000E+0, 0.32034290E+3, 0.314E+3, + 0.480E+2, 0.29407000E+1, 0.00000000E+0, 0.40432940E+3, 0.314E+3, 0.490E+2, 0.29407000E+1, + 0.00000000E+0, 0.37207850E+3, 0.314E+3, 0.500E+2, 0.29407000E+1, 0.00000000E+0, 0.32966250E+3, + 0.314E+3, 0.510E+2, 0.29407000E+1, 0.00000000E+0, 0.30462850E+3, 0.314E+3, 0.520E+2, + 0.29407000E+1, 0.00000000E+0, 0.27410450E+3, 0.314E+3, 0.530E+2, 0.29407000E+1, 0.00000000E+0, + 0.24517980E+3, 0.314E+3, 0.540E+2, 0.29407000E+1, 0.00000000E+0, 0.10888566E+4, 0.314E+3, + 0.550E+2, 0.29407000E+1, 0.00000000E+0, 0.99327630E+3, 0.314E+3, 0.560E+2, 0.29407000E+1, + 0.00000000E+0, 0.86886070E+3, 0.314E+3, 0.570E+2, 0.29407000E+1, 0.00000000E+0, 0.38956690E+3, + 0.314E+3, 0.580E+2, 0.29407000E+1, 0.27991000E+1, 0.87832220E+3, 0.314E+3, 0.590E+2, + 0.29407000E+1, 0.00000000E+0, 0.84282680E+3, 0.314E+3, 0.600E+2, 0.29407000E+1, 0.00000000E+0, + 0.82153240E+3, 0.314E+3, 0.610E+2, 0.29407000E+1, 0.00000000E+0, 0.80197510E+3, 0.314E+3, + 0.620E+2, 0.29407000E+1, 0.00000000E+0, 0.78463100E+3, 0.314E+3, 0.630E+2, 0.29407000E+1, + 0.00000000E+0, 0.61326270E+3, 0.314E+3, 0.640E+2, 0.29407000E+1, 0.00000000E+0, 0.69516170E+3, + 0.314E+3, 0.650E+2, 0.29407000E+1, 0.00000000E+0, 0.66987120E+3, 0.314E+3, 0.660E+2, + 0.29407000E+1, 0.00000000E+0, 0.70696300E+3, 0.314E+3, 0.670E+2, 0.29407000E+1, 0.00000000E+0, + 0.69190950E+3, 0.314E+3, 0.680E+2, 0.29407000E+1, 0.00000000E+0, 0.67829270E+3, 0.314E+3, + 0.690E+2, 0.29407000E+1, 0.00000000E+0, 0.67054790E+3, 0.314E+3, 0.700E+2, 0.29407000E+1, + 0.00000000E+0, 0.56267060E+3, 0.314E+3, 0.710E+2, 0.29407000E+1, 0.00000000E+0, 0.55104570E+3, + 0.314E+3, 0.720E+2, 0.29407000E+1, 0.00000000E+0, 0.50107280E+3, 0.314E+3, 0.730E+2, + 0.29407000E+1, 0.00000000E+0, 0.42136670E+3, 0.314E+3, 0.740E+2, 0.29407000E+1, 0.00000000E+0, + 0.42822450E+3, 0.314E+3, 0.750E+2, 0.29407000E+1, 0.00000000E+0, 0.38673130E+3, 0.314E+3, + 0.760E+2, 0.29407000E+1, 0.00000000E+0, 0.35308580E+3, 0.314E+3, 0.770E+2, 0.29407000E+1, + 0.00000000E+0, 0.29192880E+3, 0.314E+3, 0.780E+2, 0.29407000E+1, 0.00000000E+0, 0.27221920E+3, + 0.314E+3, 0.790E+2, 0.29407000E+1, 0.00000000E+0, 0.27992390E+3, 0.314E+3, 0.800E+2, + 0.29407000E+1, 0.00000000E+0, 0.41374950E+3, 0.314E+3, 0.810E+2, 0.29407000E+1, 0.00000000E+0, + 0.40319540E+3, 0.314E+3, 0.820E+2, 0.29407000E+1, 0.00000000E+0, 0.36867120E+3, 0.314E+3, + 0.830E+2, 0.29407000E+1, 0.00000000E+0, 0.35049670E+3, 0.314E+3, 0.840E+2, 0.29407000E+1, + 0.00000000E+0, 0.32207940E+3, 0.314E+3, 0.850E+2, 0.29407000E+1, 0.00000000E+0, 0.29390180E+3, + 0.314E+3, 0.860E+2, 0.29407000E+1, 0.00000000E+0, 0.10244219E+4, 0.314E+3, 0.870E+2, + 0.29407000E+1, 0.00000000E+0, 0.97976180E+3, 0.314E+3, 0.880E+2, 0.29407000E+1, 0.00000000E+0, + 0.86241890E+3, 0.314E+3, 0.890E+2, 0.29407000E+1, 0.00000000E+0, 0.77060950E+3, 0.314E+3, + 0.900E+2, 0.29407000E+1, 0.00000000E+0, 0.76655200E+3, 0.314E+3, 0.910E+2, 0.29407000E+1, + 0.00000000E+0, 0.74202530E+3, 0.314E+3, 0.920E+2, 0.29407000E+1, 0.00000000E+0, 0.76630100E+3, + 0.314E+3, 0.930E+2, 0.29407000E+1, 0.00000000E+0, 0.74167020E+3, 0.314E+3, 0.940E+2, + 0.29407000E+1, 0.00000000E+0, 0.40697200E+2, 0.314E+3, 0.101E+3, 0.29407000E+1, 0.00000000E+0, + 0.13444900E+3, 0.314E+3, 0.103E+3, 0.29407000E+1, 0.98650000E+0, 0.17103980E+3, 0.314E+3, + 0.104E+3, 0.29407000E+1, 0.98080000E+0, 0.12908980E+3, 0.314E+3, 0.105E+3, 0.29407000E+1, + 0.97060000E+0, 0.96287200E+2, 0.314E+3, 0.106E+3, 0.29407000E+1, 0.98680000E+0, 0.66105200E+2, + 0.314E+3, 0.107E+3, 0.29407000E+1, 0.99440000E+0, 0.47566400E+2, 0.314E+3, 0.108E+3, + 0.29407000E+1, 0.99250000E+0, 0.32173000E+2, 0.314E+3, 0.109E+3, 0.29407000E+1, 0.99820000E+0, + 0.19665260E+3, 0.314E+3, 0.111E+3, 0.29407000E+1, 0.96840000E+0, 0.30467970E+3, 0.314E+3, + 0.112E+3, 0.29407000E+1, 0.96280000E+0, 0.30710150E+3, 0.314E+3, 0.113E+3, 0.29407000E+1, + 0.96480000E+0, 0.24462880E+3, 0.314E+3, 0.114E+3, 0.29407000E+1, 0.95070000E+0, 0.19876160E+3, + 0.314E+3, 0.115E+3, 0.29407000E+1, 0.99470000E+0, 0.16695970E+3, 0.314E+3, 0.116E+3, + 0.29407000E+1, 0.99480000E+0, 0.13542340E+3, 0.314E+3, 0.117E+3, 0.29407000E+1, 0.99720000E+0, + 0.26897780E+3, 0.314E+3, 0.119E+3, 0.29407000E+1, 0.97670000E+0, 0.52175350E+3, 0.314E+3, + 0.120E+3, 0.29407000E+1, 0.98310000E+0, 0.26771200E+3, 0.314E+3, 0.121E+3, 0.29407000E+1, + 0.18627000E+1, 0.25825540E+3, 0.314E+3, 0.122E+3, 0.29407000E+1, 0.18299000E+1, 0.25306610E+3, + 0.314E+3, 0.123E+3, 0.29407000E+1, 0.19138000E+1, 0.25088270E+3, 0.314E+3, 0.124E+3, + 0.29407000E+1, 0.18269000E+1, 0.23001820E+3, 0.314E+3, 0.125E+3, 0.29407000E+1, 0.16406000E+1, + 0.21251260E+3, 0.314E+3, 0.126E+3, 0.29407000E+1, 0.16483000E+1, 0.20263880E+3, 0.314E+3, + 0.127E+3, 0.29407000E+1, 0.17149000E+1, 0.19815060E+3, 0.314E+3, 0.128E+3, 0.29407000E+1, + 0.17937000E+1, 0.19629960E+3, 0.314E+3, 0.129E+3, 0.29407000E+1, 0.95760000E+0, 0.18325560E+3, + 0.314E+3, 0.130E+3, 0.29407000E+1, 0.19419000E+1, 0.30359070E+3, 0.314E+3, 0.131E+3, + 0.29407000E+1, 0.96010000E+0, 0.26489450E+3, 0.314E+3, 0.132E+3, 0.29407000E+1, 0.94340000E+0, + 0.23602870E+3, 0.314E+3, 0.133E+3, 0.29407000E+1, 0.98890000E+0, 0.21449810E+3, 0.314E+3, + 0.134E+3, 0.29407000E+1, 0.99010000E+0, 0.18783780E+3, 0.314E+3, 0.135E+3, 0.29407000E+1, + 0.99740000E+0, 0.32026650E+3, 0.314E+3, 0.137E+3, 0.29407000E+1, 0.97380000E+0, 0.63491250E+3, + 0.314E+3, 0.138E+3, 0.29407000E+1, 0.98010000E+0, 0.48074960E+3, 0.314E+3, 0.139E+3, + 0.29407000E+1, 0.19153000E+1, 0.35400180E+3, 0.314E+3, 0.140E+3, 0.29407000E+1, 0.19355000E+1, + 0.35746120E+3, 0.314E+3, 0.141E+3, 0.29407000E+1, 0.19545000E+1, 0.33259800E+3, 0.314E+3, + 0.142E+3, 0.29407000E+1, 0.19420000E+1, 0.37482840E+3, 0.314E+3, 0.143E+3, 0.29407000E+1, + 0.16682000E+1, 0.28854060E+3, 0.314E+3, 0.144E+3, 0.29407000E+1, 0.18584000E+1, 0.26962410E+3, + 0.314E+3, 0.145E+3, 0.29407000E+1, 0.19003000E+1, 0.24998080E+3, 0.314E+3, 0.146E+3, + 0.29407000E+1, 0.18630000E+1, 0.24189890E+3, 0.314E+3, 0.147E+3, 0.29407000E+1, 0.96790000E+0, + 0.23876910E+3, 0.314E+3, 0.148E+3, 0.29407000E+1, 0.19539000E+1, 0.38467520E+3, 0.314E+3, + 0.149E+3, 0.29407000E+1, 0.96330000E+0, 0.34614310E+3, 0.314E+3, 0.150E+3, 0.29407000E+1, + 0.95140000E+0, 0.32280720E+3, 0.314E+3, 0.151E+3, 0.29407000E+1, 0.97490000E+0, 0.30433880E+3, + 0.314E+3, 0.152E+3, 0.29407000E+1, 0.98110000E+0, 0.27671610E+3, 0.314E+3, 0.153E+3, + 0.29407000E+1, 0.99680000E+0, 0.37749200E+3, 0.314E+3, 0.155E+3, 0.29407000E+1, 0.99090000E+0, + 0.82435520E+3, 0.314E+3, 0.156E+3, 0.29407000E+1, 0.97970000E+0, 0.60887560E+3, 0.314E+3, + 0.157E+3, 0.29407000E+1, 0.19373000E+1, 0.37764800E+3, 0.314E+3, 0.159E+3, 0.29407000E+1, + 0.29425000E+1, 0.36979850E+3, 0.314E+3, 0.160E+3, 0.29407000E+1, 0.29455000E+1, 0.35793640E+3, + 0.314E+3, 0.161E+3, 0.29407000E+1, 0.29413000E+1, 0.36001510E+3, 0.314E+3, 0.162E+3, + 0.29407000E+1, 0.29300000E+1, 0.34780870E+3, 0.314E+3, 0.163E+3, 0.29407000E+1, 0.18286000E+1, + 0.36250210E+3, 0.314E+3, 0.164E+3, 0.29407000E+1, 0.28732000E+1, 0.34013210E+3, 0.314E+3, + 0.165E+3, 0.29407000E+1, 0.29086000E+1, 0.34661200E+3, 0.314E+3, 0.166E+3, 0.29407000E+1, + 0.28965000E+1, 0.32261560E+3, 0.314E+3, 0.167E+3, 0.29407000E+1, 0.29242000E+1, 0.31332960E+3, + 0.314E+3, 0.168E+3, 0.29407000E+1, 0.29282000E+1, 0.31141380E+3, 0.314E+3, 0.169E+3, + 0.29407000E+1, 0.29246000E+1, 0.32794410E+3, 0.314E+3, 0.170E+3, 0.29407000E+1, 0.28482000E+1, + 0.30090150E+3, 0.314E+3, 0.171E+3, 0.29407000E+1, 0.29219000E+1, 0.41188700E+3, 0.314E+3, + 0.172E+3, 0.29407000E+1, 0.19254000E+1, 0.38080640E+3, 0.314E+3, 0.173E+3, 0.29407000E+1, + 0.19459000E+1, 0.34601610E+3, 0.314E+3, 0.174E+3, 0.29407000E+1, 0.19292000E+1, 0.35118480E+3, + 0.314E+3, 0.175E+3, 0.29407000E+1, 0.18104000E+1, 0.30465320E+3, 0.314E+3, 0.176E+3, + 0.29407000E+1, 0.18858000E+1, 0.28600240E+3, 0.314E+3, 0.177E+3, 0.29407000E+1, 0.18648000E+1, + 0.27277910E+3, 0.314E+3, 0.178E+3, 0.29407000E+1, 0.19188000E+1, 0.26060470E+3, 0.314E+3, + 0.179E+3, 0.29407000E+1, 0.98460000E+0, 0.25111540E+3, 0.314E+3, 0.180E+3, 0.29407000E+1, + 0.19896000E+1, 0.41199350E+3, 0.314E+3, 0.181E+3, 0.29407000E+1, 0.92670000E+0, 0.37352430E+3, + 0.314E+3, 0.182E+3, 0.29407000E+1, 0.93830000E+0, 0.36118830E+3, 0.314E+3, 0.183E+3, + 0.29407000E+1, 0.98200000E+0, 0.35044170E+3, 0.314E+3, 0.184E+3, 0.29407000E+1, 0.98150000E+0, + 0.32600770E+3, 0.314E+3, 0.185E+3, 0.29407000E+1, 0.99540000E+0, 0.42507230E+3, 0.314E+3, + 0.187E+3, 0.29407000E+1, 0.97050000E+0, 0.81753510E+3, 0.314E+3, 0.188E+3, 0.29407000E+1, + 0.96620000E+0, 0.44707850E+3, 0.314E+3, 0.189E+3, 0.29407000E+1, 0.29070000E+1, 0.51836450E+3, + 0.314E+3, 0.190E+3, 0.29407000E+1, 0.28844000E+1, 0.46224170E+3, 0.314E+3, 0.191E+3, + 0.29407000E+1, 0.28738000E+1, 0.40682820E+3, 0.314E+3, 0.192E+3, 0.29407000E+1, 0.28878000E+1, + 0.39105750E+3, 0.314E+3, 0.193E+3, 0.29407000E+1, 0.29095000E+1, 0.47525970E+3, 0.314E+3, + 0.194E+3, 0.29407000E+1, 0.19209000E+1, 0.11031340E+3, 0.314E+3, 0.204E+3, 0.29407000E+1, + 0.19697000E+1, 0.10796470E+3, 0.314E+3, 0.205E+3, 0.29407000E+1, 0.19441000E+1, 0.78057400E+2, + 0.314E+3, 0.206E+3, 0.29407000E+1, 0.19985000E+1, 0.61953000E+2, 0.314E+3, 0.207E+3, + 0.29407000E+1, 0.20143000E+1, 0.41768700E+2, 0.314E+3, 0.208E+3, 0.29407000E+1, 0.19887000E+1, + 0.19678410E+3, 0.314E+3, 0.212E+3, 0.29407000E+1, 0.19496000E+1, 0.23794340E+3, 0.314E+3, + 0.213E+3, 0.29407000E+1, 0.19311000E+1, 0.22718820E+3, 0.314E+3, 0.214E+3, 0.29407000E+1, + 0.19435000E+1, 0.19611960E+3, 0.314E+3, 0.215E+3, 0.29407000E+1, 0.20102000E+1, 0.16353520E+3, + 0.314E+3, 0.216E+3, 0.29407000E+1, 0.19903000E+1, 0.27522420E+3, 0.314E+3, 0.220E+3, + 0.29407000E+1, 0.19349000E+1, 0.26358530E+3, 0.314E+3, 0.221E+3, 0.29407000E+1, 0.28999000E+1, + 0.26672430E+3, 0.314E+3, 0.222E+3, 0.29407000E+1, 0.38675000E+1, 0.24396540E+3, 0.314E+3, + 0.223E+3, 0.29407000E+1, 0.29110000E+1, 0.18218540E+3, 0.314E+3, 0.224E+3, 0.29407000E+1, + 0.10619100E+2, 0.15510950E+3, 0.314E+3, 0.225E+3, 0.29407000E+1, 0.98849000E+1, 0.15231640E+3, + 0.314E+3, 0.226E+3, 0.29407000E+1, 0.91376000E+1, 0.17996900E+3, 0.314E+3, 0.227E+3, + 0.29407000E+1, 0.29263000E+1, 0.16731730E+3, 0.314E+3, 0.228E+3, 0.29407000E+1, 0.65458000E+1, + 0.23896240E+3, 0.314E+3, 0.231E+3, 0.29407000E+1, 0.19315000E+1, 0.25184820E+3, 0.314E+3, + 0.232E+3, 0.29407000E+1, 0.19447000E+1, 0.22963620E+3, 0.314E+3, 0.233E+3, 0.29407000E+1, + 0.19793000E+1, 0.21276790E+3, 0.314E+3, 0.234E+3, 0.29407000E+1, 0.19812000E+1, 0.32933860E+3, + 0.314E+3, 0.238E+3, 0.29407000E+1, 0.19143000E+1, 0.31562100E+3, 0.314E+3, 0.239E+3, + 0.29407000E+1, 0.28903000E+1, 0.31785670E+3, 0.314E+3, 0.240E+3, 0.29407000E+1, 0.39106000E+1, + 0.30723810E+3, 0.314E+3, 0.241E+3, 0.29407000E+1, 0.29225000E+1, 0.27018990E+3, 0.314E+3, + 0.242E+3, 0.29407000E+1, 0.11055600E+2, 0.23741460E+3, 0.314E+3, 0.243E+3, 0.29407000E+1, + 0.95402000E+1, 0.22392390E+3, 0.314E+3, 0.244E+3, 0.29407000E+1, 0.88895000E+1, 0.22893290E+3, + 0.314E+3, 0.245E+3, 0.29407000E+1, 0.29696000E+1, 0.23956050E+3, 0.314E+3, 0.246E+3, + 0.29407000E+1, 0.57095000E+1, 0.30725150E+3, 0.314E+3, 0.249E+3, 0.29407000E+1, 0.19378000E+1, + 0.33420220E+3, 0.314E+3, 0.250E+3, 0.29407000E+1, 0.19505000E+1, 0.31357940E+3, 0.314E+3, + 0.251E+3, 0.29407000E+1, 0.19523000E+1, 0.30173570E+3, 0.314E+3, 0.252E+3, 0.29407000E+1, + 0.19639000E+1, 0.39768030E+3, 0.314E+3, 0.256E+3, 0.29407000E+1, 0.18467000E+1, 0.41154360E+3, + 0.314E+3, 0.257E+3, 0.29407000E+1, 0.29175000E+1, 0.30359840E+3, 0.314E+3, 0.272E+3, + 0.29407000E+1, 0.38840000E+1, 0.31746390E+3, 0.314E+3, 0.273E+3, 0.29407000E+1, 0.28988000E+1, + 0.29346710E+3, 0.314E+3, 0.274E+3, 0.29407000E+1, 0.10915300E+2, 0.26545010E+3, 0.314E+3, + 0.275E+3, 0.29407000E+1, 0.98054000E+1, 0.24889430E+3, 0.314E+3, 0.276E+3, 0.29407000E+1, + 0.91527000E+1, 0.25448410E+3, 0.314E+3, 0.277E+3, 0.29407000E+1, 0.29424000E+1, 0.26790110E+3, + 0.314E+3, 0.278E+3, 0.29407000E+1, 0.66669000E+1, 0.32692180E+3, 0.314E+3, 0.281E+3, + 0.29407000E+1, 0.19302000E+1, 0.34569090E+3, 0.314E+3, 0.282E+3, 0.29407000E+1, 0.19356000E+1, + 0.35194960E+3, 0.314E+3, 0.283E+3, 0.29407000E+1, 0.19655000E+1, 0.34876390E+3, 0.314E+3, + 0.284E+3, 0.29407000E+1, 0.19639000E+1, 0.43764130E+3, 0.314E+3, 0.288E+3, 0.29407000E+1, + 0.18075000E+1, 0.81347800E+2, 0.314E+3, 0.305E+3, 0.29407000E+1, 0.29128000E+1, 0.72953000E+2, + 0.314E+3, 0.306E+3, 0.29407000E+1, 0.29987000E+1, 0.54385700E+2, 0.314E+3, 0.307E+3, + 0.29407000E+1, 0.29903000E+1, 0.18402910E+3, 0.314E+3, 0.313E+3, 0.29407000E+1, 0.29146000E+1, + 0.22150460E+3, 0.314E+3, 0.314E+3, 0.29407000E+1, 0.29407000E+1, 0.21250700E+2, 0.315E+3, + 0.100E+1, 0.29859000E+1, 0.91180000E+0, 0.14157700E+2, 0.315E+3, 0.200E+1, 0.29859000E+1, + 0.00000000E+0, 0.30477070E+3, 0.315E+3, 0.300E+1, 0.29859000E+1, 0.00000000E+0, 0.18330560E+3, + 0.315E+3, 0.400E+1, 0.29859000E+1, 0.00000000E+0, 0.12601940E+3, 0.315E+3, 0.500E+1, + 0.29859000E+1, 0.00000000E+0, 0.86242700E+2, 0.315E+3, 0.600E+1, 0.29859000E+1, 0.00000000E+0, + 0.60766300E+2, 0.315E+3, 0.700E+1, 0.29859000E+1, 0.00000000E+0, 0.46192700E+2, 0.315E+3, + 0.800E+1, 0.29859000E+1, 0.00000000E+0, 0.35073300E+2, 0.315E+3, 0.900E+1, 0.29859000E+1, + 0.00000000E+0, 0.26999000E+2, 0.315E+3, 0.100E+2, 0.29859000E+1, 0.00000000E+0, 0.36521100E+3, + 0.315E+3, 0.110E+2, 0.29859000E+1, 0.00000000E+0, 0.28990900E+3, 0.315E+3, 0.120E+2, + 0.29859000E+1, 0.00000000E+0, 0.27035350E+3, 0.315E+3, 0.130E+2, 0.29859000E+1, 0.00000000E+0, + 0.21613030E+3, 0.315E+3, 0.140E+2, 0.29859000E+1, 0.00000000E+0, 0.17040450E+3, 0.315E+3, + 0.150E+2, 0.29859000E+1, 0.00000000E+0, 0.14229820E+3, 0.315E+3, 0.160E+2, 0.29859000E+1, + 0.00000000E+0, 0.11683550E+3, 0.315E+3, 0.170E+2, 0.29859000E+1, 0.00000000E+0, 0.95933600E+2, + 0.315E+3, 0.180E+2, 0.29859000E+1, 0.00000000E+0, 0.59510330E+3, 0.315E+3, 0.190E+2, + 0.29859000E+1, 0.00000000E+0, 0.50296540E+3, 0.315E+3, 0.200E+2, 0.29859000E+1, 0.00000000E+0, + 0.41774000E+3, 0.315E+3, 0.210E+2, 0.29859000E+1, 0.00000000E+0, 0.40534620E+3, 0.315E+3, + 0.220E+2, 0.29859000E+1, 0.00000000E+0, 0.37223260E+3, 0.315E+3, 0.230E+2, 0.29859000E+1, + 0.00000000E+0, 0.29326800E+3, 0.315E+3, 0.240E+2, 0.29859000E+1, 0.00000000E+0, 0.32176790E+3, + 0.315E+3, 0.250E+2, 0.29859000E+1, 0.00000000E+0, 0.25267400E+3, 0.315E+3, 0.260E+2, + 0.29859000E+1, 0.00000000E+0, 0.26948070E+3, 0.315E+3, 0.270E+2, 0.29859000E+1, 0.00000000E+0, + 0.27679850E+3, 0.315E+3, 0.280E+2, 0.29859000E+1, 0.00000000E+0, 0.21213400E+3, 0.315E+3, + 0.290E+2, 0.29859000E+1, 0.00000000E+0, 0.21980160E+3, 0.315E+3, 0.300E+2, 0.29859000E+1, + 0.00000000E+0, 0.25991840E+3, 0.315E+3, 0.310E+2, 0.29859000E+1, 0.00000000E+0, 0.23175640E+3, + 0.315E+3, 0.320E+2, 0.29859000E+1, 0.00000000E+0, 0.19950090E+3, 0.315E+3, 0.330E+2, + 0.29859000E+1, 0.00000000E+0, 0.17993740E+3, 0.315E+3, 0.340E+2, 0.29859000E+1, 0.00000000E+0, + 0.15821040E+3, 0.315E+3, 0.350E+2, 0.29859000E+1, 0.00000000E+0, 0.13810760E+3, 0.315E+3, + 0.360E+2, 0.29859000E+1, 0.00000000E+0, 0.66844010E+3, 0.315E+3, 0.370E+2, 0.29859000E+1, + 0.00000000E+0, 0.59874980E+3, 0.315E+3, 0.380E+2, 0.29859000E+1, 0.00000000E+0, 0.52942130E+3, + 0.315E+3, 0.390E+2, 0.29859000E+1, 0.00000000E+0, 0.47851960E+3, 0.315E+3, 0.400E+2, + 0.29859000E+1, 0.00000000E+0, 0.43792800E+3, 0.315E+3, 0.410E+2, 0.29859000E+1, 0.00000000E+0, + 0.34005920E+3, 0.315E+3, 0.420E+2, 0.29859000E+1, 0.00000000E+0, 0.37860580E+3, 0.315E+3, + 0.430E+2, 0.29859000E+1, 0.00000000E+0, 0.29020770E+3, 0.315E+3, 0.440E+2, 0.29859000E+1, + 0.00000000E+0, 0.31726290E+3, 0.315E+3, 0.450E+2, 0.29859000E+1, 0.00000000E+0, 0.29479860E+3, + 0.315E+3, 0.460E+2, 0.29859000E+1, 0.00000000E+0, 0.24529960E+3, 0.315E+3, 0.470E+2, + 0.29859000E+1, 0.00000000E+0, 0.26038920E+3, 0.315E+3, 0.480E+2, 0.29859000E+1, 0.00000000E+0, + 0.32473460E+3, 0.315E+3, 0.490E+2, 0.29859000E+1, 0.00000000E+0, 0.30300330E+3, 0.315E+3, + 0.500E+2, 0.29859000E+1, 0.00000000E+0, 0.27228130E+3, 0.315E+3, 0.510E+2, 0.29859000E+1, + 0.00000000E+0, 0.25382690E+3, 0.315E+3, 0.520E+2, 0.29859000E+1, 0.00000000E+0, 0.23058600E+3, + 0.315E+3, 0.530E+2, 0.29859000E+1, 0.00000000E+0, 0.20815070E+3, 0.315E+3, 0.540E+2, + 0.29859000E+1, 0.00000000E+0, 0.81515180E+3, 0.315E+3, 0.550E+2, 0.29859000E+1, 0.00000000E+0, + 0.76114330E+3, 0.315E+3, 0.560E+2, 0.29859000E+1, 0.00000000E+0, 0.67494890E+3, 0.315E+3, + 0.570E+2, 0.29859000E+1, 0.00000000E+0, 0.32113780E+3, 0.315E+3, 0.580E+2, 0.29859000E+1, + 0.27991000E+1, 0.67620310E+3, 0.315E+3, 0.590E+2, 0.29859000E+1, 0.00000000E+0, 0.65026390E+3, + 0.315E+3, 0.600E+2, 0.29859000E+1, 0.00000000E+0, 0.63420890E+3, 0.315E+3, 0.610E+2, + 0.29859000E+1, 0.00000000E+0, 0.61941760E+3, 0.315E+3, 0.620E+2, 0.29859000E+1, 0.00000000E+0, + 0.60631410E+3, 0.315E+3, 0.630E+2, 0.29859000E+1, 0.00000000E+0, 0.48160310E+3, 0.315E+3, + 0.640E+2, 0.29859000E+1, 0.00000000E+0, 0.53441950E+3, 0.315E+3, 0.650E+2, 0.29859000E+1, + 0.00000000E+0, 0.51638640E+3, 0.315E+3, 0.660E+2, 0.29859000E+1, 0.00000000E+0, 0.54808770E+3, + 0.315E+3, 0.670E+2, 0.29859000E+1, 0.00000000E+0, 0.53658580E+3, 0.315E+3, 0.680E+2, + 0.29859000E+1, 0.00000000E+0, 0.52628420E+3, 0.315E+3, 0.690E+2, 0.29859000E+1, 0.00000000E+0, + 0.51991030E+3, 0.315E+3, 0.700E+2, 0.29859000E+1, 0.00000000E+0, 0.44109130E+3, 0.315E+3, + 0.710E+2, 0.29859000E+1, 0.00000000E+0, 0.43800800E+3, 0.315E+3, 0.720E+2, 0.29859000E+1, + 0.00000000E+0, 0.40185550E+3, 0.315E+3, 0.730E+2, 0.29859000E+1, 0.00000000E+0, 0.34062380E+3, + 0.315E+3, 0.740E+2, 0.29859000E+1, 0.00000000E+0, 0.34722720E+3, 0.315E+3, 0.750E+2, + 0.29859000E+1, 0.00000000E+0, 0.31601980E+3, 0.315E+3, 0.760E+2, 0.29859000E+1, 0.00000000E+0, + 0.29035810E+3, 0.315E+3, 0.770E+2, 0.29859000E+1, 0.00000000E+0, 0.24187400E+3, 0.315E+3, + 0.780E+2, 0.29859000E+1, 0.00000000E+0, 0.22620530E+3, 0.315E+3, 0.790E+2, 0.29859000E+1, + 0.00000000E+0, 0.23313640E+3, 0.315E+3, 0.800E+2, 0.29859000E+1, 0.00000000E+0, 0.33397090E+3, + 0.315E+3, 0.810E+2, 0.29859000E+1, 0.00000000E+0, 0.32879450E+3, 0.315E+3, 0.820E+2, + 0.29859000E+1, 0.00000000E+0, 0.30437900E+3, 0.315E+3, 0.830E+2, 0.29859000E+1, 0.00000000E+0, + 0.29151300E+3, 0.315E+3, 0.840E+2, 0.29859000E+1, 0.00000000E+0, 0.27029090E+3, 0.315E+3, + 0.850E+2, 0.29859000E+1, 0.00000000E+0, 0.24870320E+3, 0.315E+3, 0.860E+2, 0.29859000E+1, + 0.00000000E+0, 0.77546700E+3, 0.315E+3, 0.870E+2, 0.29859000E+1, 0.00000000E+0, 0.75632330E+3, + 0.315E+3, 0.880E+2, 0.29859000E+1, 0.00000000E+0, 0.67406280E+3, 0.315E+3, 0.890E+2, + 0.29859000E+1, 0.00000000E+0, 0.61138240E+3, 0.315E+3, 0.900E+2, 0.29859000E+1, 0.00000000E+0, + 0.60405420E+3, 0.315E+3, 0.910E+2, 0.29859000E+1, 0.00000000E+0, 0.58496010E+3, 0.315E+3, + 0.920E+2, 0.29859000E+1, 0.00000000E+0, 0.59856780E+3, 0.315E+3, 0.930E+2, 0.29859000E+1, + 0.00000000E+0, 0.58026720E+3, 0.315E+3, 0.940E+2, 0.29859000E+1, 0.00000000E+0, 0.33919300E+2, + 0.315E+3, 0.101E+3, 0.29859000E+1, 0.00000000E+0, 0.10684660E+3, 0.315E+3, 0.103E+3, + 0.29859000E+1, 0.98650000E+0, 0.13686740E+3, 0.315E+3, 0.104E+3, 0.29859000E+1, 0.98080000E+0, + 0.10639230E+3, 0.315E+3, 0.105E+3, 0.29859000E+1, 0.97060000E+0, 0.80849600E+2, 0.315E+3, + 0.106E+3, 0.29859000E+1, 0.98680000E+0, 0.56650800E+2, 0.315E+3, 0.107E+3, 0.29859000E+1, + 0.99440000E+0, 0.41460000E+2, 0.315E+3, 0.108E+3, 0.29859000E+1, 0.99250000E+0, 0.28636200E+2, + 0.315E+3, 0.109E+3, 0.29859000E+1, 0.99820000E+0, 0.15544950E+3, 0.315E+3, 0.111E+3, + 0.29859000E+1, 0.96840000E+0, 0.24015820E+3, 0.315E+3, 0.112E+3, 0.29859000E+1, 0.96280000E+0, + 0.24565290E+3, 0.315E+3, 0.113E+3, 0.29859000E+1, 0.96480000E+0, 0.20014220E+3, 0.315E+3, + 0.114E+3, 0.29859000E+1, 0.95070000E+0, 0.16545180E+3, 0.315E+3, 0.115E+3, 0.29859000E+1, + 0.99470000E+0, 0.14069580E+3, 0.315E+3, 0.116E+3, 0.29859000E+1, 0.99480000E+0, 0.11560060E+3, + 0.315E+3, 0.117E+3, 0.29859000E+1, 0.99720000E+0, 0.21584670E+3, 0.315E+3, 0.119E+3, + 0.29859000E+1, 0.97670000E+0, 0.40282860E+3, 0.315E+3, 0.120E+3, 0.29859000E+1, 0.98310000E+0, + 0.21843190E+3, 0.315E+3, 0.121E+3, 0.29859000E+1, 0.18627000E+1, 0.21092280E+3, 0.315E+3, + 0.122E+3, 0.29859000E+1, 0.18299000E+1, 0.20662740E+3, 0.315E+3, 0.123E+3, 0.29859000E+1, + 0.19138000E+1, 0.20440810E+3, 0.315E+3, 0.124E+3, 0.29859000E+1, 0.18269000E+1, 0.18931020E+3, + 0.315E+3, 0.125E+3, 0.29859000E+1, 0.16406000E+1, 0.17549190E+3, 0.315E+3, 0.126E+3, + 0.29859000E+1, 0.16483000E+1, 0.16737650E+3, 0.315E+3, 0.127E+3, 0.29859000E+1, 0.17149000E+1, + 0.16353010E+3, 0.315E+3, 0.128E+3, 0.29859000E+1, 0.17937000E+1, 0.16072250E+3, 0.315E+3, + 0.129E+3, 0.29859000E+1, 0.95760000E+0, 0.15220000E+3, 0.315E+3, 0.130E+3, 0.29859000E+1, + 0.19419000E+1, 0.24479640E+3, 0.315E+3, 0.131E+3, 0.29859000E+1, 0.96010000E+0, 0.21733500E+3, + 0.315E+3, 0.132E+3, 0.29859000E+1, 0.94340000E+0, 0.19621220E+3, 0.315E+3, 0.133E+3, + 0.29859000E+1, 0.98890000E+0, 0.17998620E+3, 0.315E+3, 0.134E+3, 0.29859000E+1, 0.99010000E+0, + 0.15926660E+3, 0.315E+3, 0.135E+3, 0.29859000E+1, 0.99740000E+0, 0.25815200E+3, 0.315E+3, + 0.137E+3, 0.29859000E+1, 0.97380000E+0, 0.48959430E+3, 0.315E+3, 0.138E+3, 0.29859000E+1, + 0.98010000E+0, 0.38114140E+3, 0.315E+3, 0.139E+3, 0.29859000E+1, 0.19153000E+1, 0.28866370E+3, + 0.315E+3, 0.140E+3, 0.29859000E+1, 0.19355000E+1, 0.29138130E+3, 0.315E+3, 0.141E+3, + 0.29859000E+1, 0.19545000E+1, 0.27224210E+3, 0.315E+3, 0.142E+3, 0.29859000E+1, 0.19420000E+1, + 0.30274930E+3, 0.315E+3, 0.143E+3, 0.29859000E+1, 0.16682000E+1, 0.23860140E+3, 0.315E+3, + 0.144E+3, 0.29859000E+1, 0.18584000E+1, 0.22325490E+3, 0.315E+3, 0.145E+3, 0.29859000E+1, + 0.19003000E+1, 0.20745050E+3, 0.315E+3, 0.146E+3, 0.29859000E+1, 0.18630000E+1, 0.20043480E+3, + 0.315E+3, 0.147E+3, 0.29859000E+1, 0.96790000E+0, 0.19927140E+3, 0.315E+3, 0.148E+3, + 0.29859000E+1, 0.19539000E+1, 0.31050480E+3, 0.315E+3, 0.149E+3, 0.29859000E+1, 0.96330000E+0, + 0.28348980E+3, 0.315E+3, 0.150E+3, 0.29859000E+1, 0.95140000E+0, 0.26714010E+3, 0.315E+3, + 0.151E+3, 0.29859000E+1, 0.97490000E+0, 0.25372280E+3, 0.315E+3, 0.152E+3, 0.29859000E+1, + 0.98110000E+0, 0.23274260E+3, 0.315E+3, 0.153E+3, 0.29859000E+1, 0.99680000E+0, 0.30765740E+3, + 0.315E+3, 0.155E+3, 0.29859000E+1, 0.99090000E+0, 0.63261590E+3, 0.315E+3, 0.156E+3, + 0.29859000E+1, 0.97970000E+0, 0.48173950E+3, 0.315E+3, 0.157E+3, 0.29859000E+1, 0.19373000E+1, + 0.31158240E+3, 0.315E+3, 0.159E+3, 0.29859000E+1, 0.29425000E+1, 0.30515280E+3, 0.315E+3, + 0.160E+3, 0.29859000E+1, 0.29455000E+1, 0.29558710E+3, 0.315E+3, 0.161E+3, 0.29859000E+1, + 0.29413000E+1, 0.29668160E+3, 0.315E+3, 0.162E+3, 0.29859000E+1, 0.29300000E+1, 0.28470850E+3, + 0.315E+3, 0.163E+3, 0.29859000E+1, 0.18286000E+1, 0.29847730E+3, 0.315E+3, 0.164E+3, + 0.29859000E+1, 0.28732000E+1, 0.28058560E+3, 0.315E+3, 0.165E+3, 0.29859000E+1, 0.29086000E+1, + 0.28487000E+3, 0.315E+3, 0.166E+3, 0.29859000E+1, 0.28965000E+1, 0.26661130E+3, 0.315E+3, + 0.167E+3, 0.29859000E+1, 0.29242000E+1, 0.25911400E+3, 0.315E+3, 0.168E+3, 0.29859000E+1, + 0.29282000E+1, 0.25737860E+3, 0.315E+3, 0.169E+3, 0.29859000E+1, 0.29246000E+1, 0.27013590E+3, + 0.315E+3, 0.170E+3, 0.29859000E+1, 0.28482000E+1, 0.24893750E+3, 0.315E+3, 0.171E+3, + 0.29859000E+1, 0.29219000E+1, 0.33258120E+3, 0.315E+3, 0.172E+3, 0.29859000E+1, 0.19254000E+1, + 0.31015250E+3, 0.315E+3, 0.173E+3, 0.29859000E+1, 0.19459000E+1, 0.28435150E+3, 0.315E+3, + 0.174E+3, 0.29859000E+1, 0.19292000E+1, 0.28639060E+3, 0.315E+3, 0.175E+3, 0.29859000E+1, + 0.18104000E+1, 0.25354990E+3, 0.315E+3, 0.176E+3, 0.29859000E+1, 0.18858000E+1, 0.23881810E+3, + 0.315E+3, 0.177E+3, 0.29859000E+1, 0.18648000E+1, 0.22823770E+3, 0.315E+3, 0.178E+3, + 0.29859000E+1, 0.19188000E+1, 0.21805720E+3, 0.315E+3, 0.179E+3, 0.29859000E+1, 0.98460000E+0, + 0.21157770E+3, 0.315E+3, 0.180E+3, 0.29859000E+1, 0.19896000E+1, 0.33379720E+3, 0.315E+3, + 0.181E+3, 0.29859000E+1, 0.92670000E+0, 0.30690290E+3, 0.315E+3, 0.182E+3, 0.29859000E+1, + 0.93830000E+0, 0.29903800E+3, 0.315E+3, 0.183E+3, 0.29859000E+1, 0.98200000E+0, 0.29178570E+3, + 0.315E+3, 0.184E+3, 0.29859000E+1, 0.98150000E+0, 0.27360270E+3, 0.315E+3, 0.185E+3, + 0.29859000E+1, 0.99540000E+0, 0.34671520E+3, 0.315E+3, 0.187E+3, 0.29859000E+1, 0.97050000E+0, + 0.63297580E+3, 0.315E+3, 0.188E+3, 0.29859000E+1, 0.96620000E+0, 0.36867540E+3, 0.315E+3, + 0.189E+3, 0.29859000E+1, 0.29070000E+1, 0.42237050E+3, 0.315E+3, 0.190E+3, 0.29859000E+1, + 0.28844000E+1, 0.37847190E+3, 0.315E+3, 0.191E+3, 0.29859000E+1, 0.28738000E+1, 0.33627890E+3, + 0.315E+3, 0.192E+3, 0.29859000E+1, 0.28878000E+1, 0.32395480E+3, 0.315E+3, 0.193E+3, + 0.29859000E+1, 0.29095000E+1, 0.38367070E+3, 0.315E+3, 0.194E+3, 0.29859000E+1, 0.19209000E+1, + 0.91020600E+2, 0.315E+3, 0.204E+3, 0.29859000E+1, 0.19697000E+1, 0.89639100E+2, 0.315E+3, + 0.205E+3, 0.29859000E+1, 0.19441000E+1, 0.66234300E+2, 0.315E+3, 0.206E+3, 0.29859000E+1, + 0.19985000E+1, 0.53207600E+2, 0.315E+3, 0.207E+3, 0.29859000E+1, 0.20143000E+1, 0.36587500E+2, + 0.315E+3, 0.208E+3, 0.29859000E+1, 0.19887000E+1, 0.15995620E+3, 0.315E+3, 0.212E+3, + 0.29859000E+1, 0.19496000E+1, 0.19311320E+3, 0.315E+3, 0.213E+3, 0.29859000E+1, 0.19311000E+1, + 0.18650310E+3, 0.315E+3, 0.214E+3, 0.29859000E+1, 0.19435000E+1, 0.16307640E+3, 0.315E+3, + 0.215E+3, 0.29859000E+1, 0.20102000E+1, 0.13785400E+3, 0.315E+3, 0.216E+3, 0.29859000E+1, + 0.19903000E+1, 0.22395660E+3, 0.315E+3, 0.220E+3, 0.29859000E+1, 0.19349000E+1, 0.21640380E+3, + 0.315E+3, 0.221E+3, 0.29859000E+1, 0.28999000E+1, 0.21913910E+3, 0.315E+3, 0.222E+3, + 0.29859000E+1, 0.38675000E+1, 0.20040530E+3, 0.315E+3, 0.223E+3, 0.29859000E+1, 0.29110000E+1, + 0.15200100E+3, 0.315E+3, 0.224E+3, 0.29859000E+1, 0.10619100E+2, 0.13062480E+3, 0.315E+3, + 0.225E+3, 0.29859000E+1, 0.98849000E+1, 0.12812710E+3, 0.315E+3, 0.226E+3, 0.29859000E+1, + 0.91376000E+1, 0.14911580E+3, 0.315E+3, 0.227E+3, 0.29859000E+1, 0.29263000E+1, 0.13922010E+3, + 0.315E+3, 0.228E+3, 0.29859000E+1, 0.65458000E+1, 0.19576670E+3, 0.315E+3, 0.231E+3, + 0.29859000E+1, 0.19315000E+1, 0.20723900E+3, 0.315E+3, 0.232E+3, 0.29859000E+1, 0.19447000E+1, + 0.19122650E+3, 0.315E+3, 0.233E+3, 0.29859000E+1, 0.19793000E+1, 0.17859070E+3, 0.315E+3, + 0.234E+3, 0.29859000E+1, 0.19812000E+1, 0.26845260E+3, 0.315E+3, 0.238E+3, 0.29859000E+1, + 0.19143000E+1, 0.26022540E+3, 0.315E+3, 0.239E+3, 0.29859000E+1, 0.28903000E+1, 0.26296750E+3, + 0.315E+3, 0.240E+3, 0.29859000E+1, 0.39106000E+1, 0.25404600E+3, 0.315E+3, 0.241E+3, + 0.29859000E+1, 0.29225000E+1, 0.22570300E+3, 0.315E+3, 0.242E+3, 0.29859000E+1, 0.11055600E+2, + 0.19994180E+3, 0.315E+3, 0.243E+3, 0.29859000E+1, 0.95402000E+1, 0.18915600E+3, 0.315E+3, + 0.244E+3, 0.29859000E+1, 0.88895000E+1, 0.19169620E+3, 0.315E+3, 0.245E+3, 0.29859000E+1, + 0.29696000E+1, 0.19999790E+3, 0.315E+3, 0.246E+3, 0.29859000E+1, 0.57095000E+1, 0.25244560E+3, + 0.315E+3, 0.249E+3, 0.29859000E+1, 0.19378000E+1, 0.27452930E+3, 0.315E+3, 0.250E+3, + 0.29859000E+1, 0.19505000E+1, 0.26015780E+3, 0.315E+3, 0.251E+3, 0.29859000E+1, 0.19523000E+1, + 0.25179490E+3, 0.315E+3, 0.252E+3, 0.29859000E+1, 0.19639000E+1, 0.32533280E+3, 0.315E+3, + 0.256E+3, 0.29859000E+1, 0.18467000E+1, 0.33853620E+3, 0.315E+3, 0.257E+3, 0.29859000E+1, + 0.29175000E+1, 0.25238610E+3, 0.315E+3, 0.272E+3, 0.29859000E+1, 0.38840000E+1, 0.26287220E+3, + 0.315E+3, 0.273E+3, 0.29859000E+1, 0.28988000E+1, 0.24530820E+3, 0.315E+3, 0.274E+3, + 0.29859000E+1, 0.10915300E+2, 0.22353440E+3, 0.315E+3, 0.275E+3, 0.29859000E+1, 0.98054000E+1, + 0.21084220E+3, 0.315E+3, 0.276E+3, 0.29859000E+1, 0.91527000E+1, 0.21397300E+3, 0.315E+3, + 0.277E+3, 0.29859000E+1, 0.29424000E+1, 0.22500270E+3, 0.315E+3, 0.278E+3, 0.29859000E+1, + 0.66669000E+1, 0.27049420E+3, 0.315E+3, 0.281E+3, 0.29859000E+1, 0.19302000E+1, 0.28607870E+3, + 0.315E+3, 0.282E+3, 0.29859000E+1, 0.19356000E+1, 0.29230220E+3, 0.315E+3, 0.283E+3, + 0.29859000E+1, 0.19655000E+1, 0.29076120E+3, 0.315E+3, 0.284E+3, 0.29859000E+1, 0.19639000E+1, + 0.35840590E+3, 0.315E+3, 0.288E+3, 0.29859000E+1, 0.18075000E+1, 0.68800700E+2, 0.315E+3, + 0.305E+3, 0.29859000E+1, 0.29128000E+1, 0.61943300E+2, 0.315E+3, 0.306E+3, 0.29859000E+1, + 0.29987000E+1, 0.46863500E+2, 0.315E+3, 0.307E+3, 0.29859000E+1, 0.29903000E+1, 0.15204520E+3, + 0.315E+3, 0.313E+3, 0.29859000E+1, 0.29146000E+1, 0.18148400E+3, 0.315E+3, 0.314E+3, + 0.29859000E+1, 0.29407000E+1, 0.15168860E+3, 0.315E+3, 0.315E+3, 0.29859000E+1, 0.29859000E+1, + 0.18750000E+2, 0.327E+3, 0.100E+1, 0.77785000E+1, 0.91180000E+0, 0.12752300E+2, 0.327E+3, + 0.200E+1, 0.77785000E+1, 0.00000000E+0, 0.27075980E+3, 0.327E+3, 0.300E+1, 0.77785000E+1, + 0.00000000E+0, 0.16088700E+3, 0.327E+3, 0.400E+1, 0.77785000E+1, 0.00000000E+0, 0.11053650E+3, + 0.327E+3, 0.500E+1, 0.77785000E+1, 0.00000000E+0, 0.76007200E+2, 0.327E+3, 0.600E+1, + 0.77785000E+1, 0.00000000E+0, 0.53969500E+2, 0.327E+3, 0.700E+1, 0.77785000E+1, 0.00000000E+0, + 0.41362300E+2, 0.327E+3, 0.800E+1, 0.77785000E+1, 0.00000000E+0, 0.31698500E+2, 0.327E+3, + 0.900E+1, 0.77785000E+1, 0.00000000E+0, 0.24634300E+2, 0.327E+3, 0.100E+2, 0.77785000E+1, + 0.00000000E+0, 0.32462410E+3, 0.327E+3, 0.110E+2, 0.77785000E+1, 0.00000000E+0, 0.25515610E+3, + 0.327E+3, 0.120E+2, 0.77785000E+1, 0.00000000E+0, 0.23739610E+3, 0.327E+3, 0.130E+2, + 0.77785000E+1, 0.00000000E+0, 0.18954880E+3, 0.327E+3, 0.140E+2, 0.77785000E+1, 0.00000000E+0, + 0.14967090E+3, 0.327E+3, 0.150E+2, 0.77785000E+1, 0.00000000E+0, 0.12537250E+3, 0.327E+3, + 0.160E+2, 0.77785000E+1, 0.00000000E+0, 0.10339310E+3, 0.327E+3, 0.170E+2, 0.77785000E+1, + 0.00000000E+0, 0.85361600E+2, 0.327E+3, 0.180E+2, 0.77785000E+1, 0.00000000E+0, 0.53130440E+3, + 0.327E+3, 0.190E+2, 0.77785000E+1, 0.00000000E+0, 0.44506810E+3, 0.327E+3, 0.200E+2, + 0.77785000E+1, 0.00000000E+0, 0.36908350E+3, 0.327E+3, 0.210E+2, 0.77785000E+1, 0.00000000E+0, + 0.35797830E+3, 0.327E+3, 0.220E+2, 0.77785000E+1, 0.00000000E+0, 0.32864070E+3, 0.327E+3, + 0.230E+2, 0.77785000E+1, 0.00000000E+0, 0.25957220E+3, 0.327E+3, 0.240E+2, 0.77785000E+1, + 0.00000000E+0, 0.28401670E+3, 0.327E+3, 0.250E+2, 0.77785000E+1, 0.00000000E+0, 0.22363540E+3, + 0.327E+3, 0.260E+2, 0.77785000E+1, 0.00000000E+0, 0.23769940E+3, 0.327E+3, 0.270E+2, + 0.77785000E+1, 0.00000000E+0, 0.24420530E+3, 0.327E+3, 0.280E+2, 0.77785000E+1, 0.00000000E+0, + 0.18784400E+3, 0.327E+3, 0.290E+2, 0.77785000E+1, 0.00000000E+0, 0.19385700E+3, 0.327E+3, + 0.300E+2, 0.77785000E+1, 0.00000000E+0, 0.22867850E+3, 0.327E+3, 0.310E+2, 0.77785000E+1, + 0.00000000E+0, 0.20362780E+3, 0.327E+3, 0.320E+2, 0.77785000E+1, 0.00000000E+0, 0.17541210E+3, + 0.327E+3, 0.330E+2, 0.77785000E+1, 0.00000000E+0, 0.15849070E+3, 0.327E+3, 0.340E+2, + 0.77785000E+1, 0.00000000E+0, 0.13975410E+3, 0.327E+3, 0.350E+2, 0.77785000E+1, 0.00000000E+0, + 0.12245360E+3, 0.327E+3, 0.360E+2, 0.77785000E+1, 0.00000000E+0, 0.59683060E+3, 0.327E+3, + 0.370E+2, 0.77785000E+1, 0.00000000E+0, 0.53035890E+3, 0.327E+3, 0.380E+2, 0.77785000E+1, + 0.00000000E+0, 0.46786120E+3, 0.327E+3, 0.390E+2, 0.77785000E+1, 0.00000000E+0, 0.42252080E+3, + 0.327E+3, 0.400E+2, 0.77785000E+1, 0.00000000E+0, 0.38664910E+3, 0.327E+3, 0.410E+2, + 0.77785000E+1, 0.00000000E+0, 0.30067530E+3, 0.327E+3, 0.420E+2, 0.77785000E+1, 0.00000000E+0, + 0.33455830E+3, 0.327E+3, 0.430E+2, 0.77785000E+1, 0.00000000E+0, 0.25692950E+3, 0.327E+3, + 0.440E+2, 0.77785000E+1, 0.00000000E+0, 0.28039530E+3, 0.327E+3, 0.450E+2, 0.77785000E+1, + 0.00000000E+0, 0.26063370E+3, 0.327E+3, 0.460E+2, 0.77785000E+1, 0.00000000E+0, 0.21771120E+3, + 0.327E+3, 0.470E+2, 0.77785000E+1, 0.00000000E+0, 0.23040100E+3, 0.327E+3, 0.480E+2, + 0.77785000E+1, 0.00000000E+0, 0.28692990E+3, 0.327E+3, 0.490E+2, 0.77785000E+1, 0.00000000E+0, + 0.26720820E+3, 0.327E+3, 0.500E+2, 0.77785000E+1, 0.00000000E+0, 0.24003960E+3, 0.327E+3, + 0.510E+2, 0.77785000E+1, 0.00000000E+0, 0.22389640E+3, 0.327E+3, 0.520E+2, 0.77785000E+1, + 0.00000000E+0, 0.20368550E+3, 0.327E+3, 0.530E+2, 0.77785000E+1, 0.00000000E+0, 0.18426650E+3, + 0.327E+3, 0.540E+2, 0.77785000E+1, 0.00000000E+0, 0.72757110E+3, 0.327E+3, 0.550E+2, + 0.77785000E+1, 0.00000000E+0, 0.67509330E+3, 0.327E+3, 0.560E+2, 0.77785000E+1, 0.00000000E+0, + 0.59711540E+3, 0.327E+3, 0.570E+2, 0.77785000E+1, 0.00000000E+0, 0.28341080E+3, 0.327E+3, + 0.580E+2, 0.77785000E+1, 0.27991000E+1, 0.59987830E+3, 0.327E+3, 0.590E+2, 0.77785000E+1, + 0.00000000E+0, 0.57662050E+3, 0.327E+3, 0.600E+2, 0.77785000E+1, 0.00000000E+0, 0.56231220E+3, + 0.327E+3, 0.610E+2, 0.77785000E+1, 0.00000000E+0, 0.54912780E+3, 0.327E+3, 0.620E+2, + 0.77785000E+1, 0.00000000E+0, 0.53743950E+3, 0.327E+3, 0.630E+2, 0.77785000E+1, 0.00000000E+0, + 0.42647230E+3, 0.327E+3, 0.640E+2, 0.77785000E+1, 0.00000000E+0, 0.47530650E+3, 0.327E+3, + 0.650E+2, 0.77785000E+1, 0.00000000E+0, 0.45903360E+3, 0.327E+3, 0.660E+2, 0.77785000E+1, + 0.00000000E+0, 0.48549610E+3, 0.327E+3, 0.670E+2, 0.77785000E+1, 0.00000000E+0, 0.47524580E+3, + 0.327E+3, 0.680E+2, 0.77785000E+1, 0.00000000E+0, 0.46604870E+3, 0.327E+3, 0.690E+2, + 0.77785000E+1, 0.00000000E+0, 0.46040630E+3, 0.327E+3, 0.700E+2, 0.77785000E+1, 0.00000000E+0, + 0.39029370E+3, 0.327E+3, 0.710E+2, 0.77785000E+1, 0.00000000E+0, 0.38633500E+3, 0.327E+3, + 0.720E+2, 0.77785000E+1, 0.00000000E+0, 0.35438040E+3, 0.327E+3, 0.730E+2, 0.77785000E+1, + 0.00000000E+0, 0.30091280E+3, 0.327E+3, 0.740E+2, 0.77785000E+1, 0.00000000E+0, 0.30657700E+3, + 0.327E+3, 0.750E+2, 0.77785000E+1, 0.00000000E+0, 0.27917480E+3, 0.327E+3, 0.760E+2, + 0.77785000E+1, 0.00000000E+0, 0.25671260E+3, 0.327E+3, 0.770E+2, 0.77785000E+1, 0.00000000E+0, + 0.21450850E+3, 0.327E+3, 0.780E+2, 0.77785000E+1, 0.00000000E+0, 0.20089400E+3, 0.327E+3, + 0.790E+2, 0.77785000E+1, 0.00000000E+0, 0.20681470E+3, 0.327E+3, 0.800E+2, 0.77785000E+1, + 0.00000000E+0, 0.29586670E+3, 0.327E+3, 0.810E+2, 0.77785000E+1, 0.00000000E+0, 0.29066840E+3, + 0.327E+3, 0.820E+2, 0.77785000E+1, 0.00000000E+0, 0.26889430E+3, 0.327E+3, 0.830E+2, + 0.77785000E+1, 0.00000000E+0, 0.25754500E+3, 0.327E+3, 0.840E+2, 0.77785000E+1, 0.00000000E+0, + 0.23900100E+3, 0.327E+3, 0.850E+2, 0.77785000E+1, 0.00000000E+0, 0.22025450E+3, 0.327E+3, + 0.860E+2, 0.77785000E+1, 0.00000000E+0, 0.69085290E+3, 0.327E+3, 0.870E+2, 0.77785000E+1, + 0.00000000E+0, 0.67010980E+3, 0.327E+3, 0.880E+2, 0.77785000E+1, 0.00000000E+0, 0.59610010E+3, + 0.327E+3, 0.890E+2, 0.77785000E+1, 0.00000000E+0, 0.54016650E+3, 0.327E+3, 0.900E+2, + 0.77785000E+1, 0.00000000E+0, 0.53472260E+3, 0.327E+3, 0.910E+2, 0.77785000E+1, 0.00000000E+0, + 0.51792390E+3, 0.327E+3, 0.920E+2, 0.77785000E+1, 0.00000000E+0, 0.53080430E+3, 0.327E+3, + 0.930E+2, 0.77785000E+1, 0.00000000E+0, 0.51445080E+3, 0.327E+3, 0.940E+2, 0.77785000E+1, + 0.00000000E+0, 0.29768000E+2, 0.327E+3, 0.101E+3, 0.77785000E+1, 0.00000000E+0, 0.93835600E+2, + 0.327E+3, 0.103E+3, 0.77785000E+1, 0.98650000E+0, 0.12018800E+3, 0.327E+3, 0.104E+3, + 0.77785000E+1, 0.98080000E+0, 0.93454100E+2, 0.327E+3, 0.105E+3, 0.77785000E+1, 0.97060000E+0, + 0.71331800E+2, 0.327E+3, 0.106E+3, 0.77785000E+1, 0.98680000E+0, 0.50381400E+2, 0.327E+3, + 0.107E+3, 0.77785000E+1, 0.99440000E+0, 0.37217800E+2, 0.327E+3, 0.108E+3, 0.77785000E+1, + 0.99250000E+0, 0.26103100E+2, 0.327E+3, 0.109E+3, 0.77785000E+1, 0.99820000E+0, 0.13698410E+3, + 0.327E+3, 0.111E+3, 0.77785000E+1, 0.96840000E+0, 0.21133880E+3, 0.327E+3, 0.112E+3, + 0.77785000E+1, 0.96280000E+0, 0.21570660E+3, 0.327E+3, 0.113E+3, 0.77785000E+1, 0.96480000E+0, + 0.17559630E+3, 0.327E+3, 0.114E+3, 0.77785000E+1, 0.95070000E+0, 0.14538010E+3, 0.327E+3, + 0.115E+3, 0.77785000E+1, 0.99470000E+0, 0.12399050E+3, 0.327E+3, 0.116E+3, 0.77785000E+1, + 0.99480000E+0, 0.10232230E+3, 0.327E+3, 0.117E+3, 0.77785000E+1, 0.99720000E+0, 0.19095210E+3, + 0.327E+3, 0.119E+3, 0.77785000E+1, 0.97670000E+0, 0.35707210E+3, 0.327E+3, 0.120E+3, + 0.77785000E+1, 0.98310000E+0, 0.19252210E+3, 0.327E+3, 0.121E+3, 0.77785000E+1, 0.18627000E+1, + 0.18603690E+3, 0.327E+3, 0.122E+3, 0.77785000E+1, 0.18299000E+1, 0.18233530E+3, 0.327E+3, + 0.123E+3, 0.77785000E+1, 0.19138000E+1, 0.18047740E+3, 0.327E+3, 0.124E+3, 0.77785000E+1, + 0.18269000E+1, 0.16694170E+3, 0.327E+3, 0.125E+3, 0.77785000E+1, 0.16406000E+1, 0.15486080E+3, + 0.327E+3, 0.126E+3, 0.77785000E+1, 0.16483000E+1, 0.14780570E+3, 0.327E+3, 0.127E+3, + 0.77785000E+1, 0.17149000E+1, 0.14445180E+3, 0.327E+3, 0.128E+3, 0.77785000E+1, 0.17937000E+1, + 0.14216340E+3, 0.327E+3, 0.129E+3, 0.77785000E+1, 0.95760000E+0, 0.13437060E+3, 0.327E+3, + 0.130E+3, 0.77785000E+1, 0.19419000E+1, 0.21533740E+3, 0.327E+3, 0.131E+3, 0.77785000E+1, + 0.96010000E+0, 0.19100140E+3, 0.327E+3, 0.132E+3, 0.77785000E+1, 0.94340000E+0, 0.17255780E+3, + 0.327E+3, 0.133E+3, 0.77785000E+1, 0.98890000E+0, 0.15854630E+3, 0.327E+3, 0.134E+3, + 0.77785000E+1, 0.99010000E+0, 0.14068120E+3, 0.327E+3, 0.135E+3, 0.77785000E+1, 0.99740000E+0, + 0.22851060E+3, 0.327E+3, 0.137E+3, 0.77785000E+1, 0.97380000E+0, 0.43445030E+3, 0.327E+3, + 0.138E+3, 0.77785000E+1, 0.98010000E+0, 0.33691730E+3, 0.327E+3, 0.139E+3, 0.77785000E+1, + 0.19153000E+1, 0.25466980E+3, 0.327E+3, 0.140E+3, 0.77785000E+1, 0.19355000E+1, 0.25719610E+3, + 0.327E+3, 0.141E+3, 0.77785000E+1, 0.19545000E+1, 0.24051390E+3, 0.327E+3, 0.142E+3, + 0.77785000E+1, 0.19420000E+1, 0.26786660E+3, 0.327E+3, 0.143E+3, 0.77785000E+1, 0.16682000E+1, + 0.21097970E+3, 0.327E+3, 0.144E+3, 0.77785000E+1, 0.18584000E+1, 0.19765180E+3, 0.327E+3, + 0.145E+3, 0.77785000E+1, 0.19003000E+1, 0.18389000E+3, 0.327E+3, 0.146E+3, 0.77785000E+1, + 0.18630000E+1, 0.17779340E+3, 0.327E+3, 0.147E+3, 0.77785000E+1, 0.96790000E+0, 0.17646970E+3, + 0.327E+3, 0.148E+3, 0.77785000E+1, 0.19539000E+1, 0.27425370E+3, 0.327E+3, 0.149E+3, + 0.77785000E+1, 0.96330000E+0, 0.25002640E+3, 0.327E+3, 0.150E+3, 0.77785000E+1, 0.95140000E+0, + 0.23552760E+3, 0.327E+3, 0.151E+3, 0.77785000E+1, 0.97490000E+0, 0.22379990E+3, 0.327E+3, + 0.152E+3, 0.77785000E+1, 0.98110000E+0, 0.20556330E+3, 0.327E+3, 0.153E+3, 0.77785000E+1, + 0.99680000E+0, 0.27160040E+3, 0.327E+3, 0.155E+3, 0.77785000E+1, 0.99090000E+0, 0.56214810E+3, + 0.327E+3, 0.156E+3, 0.77785000E+1, 0.97970000E+0, 0.42601980E+3, 0.327E+3, 0.157E+3, + 0.77785000E+1, 0.19373000E+1, 0.27502300E+3, 0.327E+3, 0.159E+3, 0.77785000E+1, 0.29425000E+1, + 0.26936720E+3, 0.327E+3, 0.160E+3, 0.77785000E+1, 0.29455000E+1, 0.26096100E+3, 0.327E+3, + 0.161E+3, 0.77785000E+1, 0.29413000E+1, 0.26192990E+3, 0.327E+3, 0.162E+3, 0.77785000E+1, + 0.29300000E+1, 0.25167010E+3, 0.327E+3, 0.163E+3, 0.77785000E+1, 0.18286000E+1, 0.26338860E+3, + 0.327E+3, 0.164E+3, 0.77785000E+1, 0.28732000E+1, 0.24770800E+3, 0.327E+3, 0.165E+3, + 0.77785000E+1, 0.29086000E+1, 0.25153730E+3, 0.327E+3, 0.166E+3, 0.77785000E+1, 0.28965000E+1, + 0.23534260E+3, 0.327E+3, 0.167E+3, 0.77785000E+1, 0.29242000E+1, 0.22872630E+3, 0.327E+3, + 0.168E+3, 0.77785000E+1, 0.29282000E+1, 0.22716850E+3, 0.327E+3, 0.169E+3, 0.77785000E+1, + 0.29246000E+1, 0.23821710E+3, 0.327E+3, 0.170E+3, 0.77785000E+1, 0.28482000E+1, 0.21967420E+3, + 0.327E+3, 0.171E+3, 0.77785000E+1, 0.29219000E+1, 0.29356720E+3, 0.327E+3, 0.172E+3, + 0.77785000E+1, 0.19254000E+1, 0.27385420E+3, 0.327E+3, 0.173E+3, 0.77785000E+1, 0.19459000E+1, + 0.25123200E+3, 0.327E+3, 0.174E+3, 0.77785000E+1, 0.19292000E+1, 0.25317100E+3, 0.327E+3, + 0.175E+3, 0.77785000E+1, 0.18104000E+1, 0.22427020E+3, 0.327E+3, 0.176E+3, 0.77785000E+1, + 0.18858000E+1, 0.21152860E+3, 0.327E+3, 0.177E+3, 0.77785000E+1, 0.18648000E+1, 0.20238660E+3, + 0.327E+3, 0.178E+3, 0.77785000E+1, 0.19188000E+1, 0.19363610E+3, 0.327E+3, 0.179E+3, + 0.77785000E+1, 0.98460000E+0, 0.18779620E+3, 0.327E+3, 0.180E+3, 0.77785000E+1, 0.19896000E+1, + 0.29544290E+3, 0.327E+3, 0.181E+3, 0.77785000E+1, 0.92670000E+0, 0.27127660E+3, 0.327E+3, + 0.182E+3, 0.77785000E+1, 0.93830000E+0, 0.26414600E+3, 0.327E+3, 0.183E+3, 0.77785000E+1, + 0.98200000E+0, 0.25774500E+3, 0.327E+3, 0.184E+3, 0.77785000E+1, 0.98150000E+0, 0.24187370E+3, + 0.327E+3, 0.185E+3, 0.77785000E+1, 0.99540000E+0, 0.30597750E+3, 0.327E+3, 0.187E+3, + 0.77785000E+1, 0.97050000E+0, 0.56160150E+3, 0.327E+3, 0.188E+3, 0.77785000E+1, 0.96620000E+0, + 0.32525320E+3, 0.327E+3, 0.189E+3, 0.77785000E+1, 0.29070000E+1, 0.37317930E+3, 0.327E+3, + 0.190E+3, 0.77785000E+1, 0.28844000E+1, 0.33481340E+3, 0.327E+3, 0.191E+3, 0.77785000E+1, + 0.28738000E+1, 0.29740820E+3, 0.327E+3, 0.192E+3, 0.77785000E+1, 0.28878000E+1, 0.28658400E+3, + 0.327E+3, 0.193E+3, 0.77785000E+1, 0.29095000E+1, 0.34006000E+3, 0.327E+3, 0.194E+3, + 0.77785000E+1, 0.19209000E+1, 0.79784500E+2, 0.327E+3, 0.204E+3, 0.77785000E+1, 0.19697000E+1, + 0.78862400E+2, 0.327E+3, 0.205E+3, 0.77785000E+1, 0.19441000E+1, 0.58605700E+2, 0.327E+3, + 0.206E+3, 0.77785000E+1, 0.19985000E+1, 0.47416800E+2, 0.327E+3, 0.207E+3, 0.77785000E+1, + 0.20143000E+1, 0.33021500E+2, 0.327E+3, 0.208E+3, 0.77785000E+1, 0.19887000E+1, 0.14035180E+3, + 0.327E+3, 0.212E+3, 0.77785000E+1, 0.19496000E+1, 0.16949030E+3, 0.327E+3, 0.213E+3, + 0.77785000E+1, 0.19311000E+1, 0.16367210E+3, 0.327E+3, 0.214E+3, 0.77785000E+1, 0.19435000E+1, + 0.14335180E+3, 0.327E+3, 0.215E+3, 0.77785000E+1, 0.20102000E+1, 0.12152560E+3, 0.327E+3, + 0.216E+3, 0.77785000E+1, 0.19903000E+1, 0.19732010E+3, 0.327E+3, 0.220E+3, 0.77785000E+1, + 0.19349000E+1, 0.19055180E+3, 0.327E+3, 0.221E+3, 0.77785000E+1, 0.28999000E+1, 0.19300120E+3, + 0.327E+3, 0.222E+3, 0.77785000E+1, 0.38675000E+1, 0.17676920E+3, 0.327E+3, 0.223E+3, + 0.77785000E+1, 0.29110000E+1, 0.13462870E+3, 0.327E+3, 0.224E+3, 0.77785000E+1, 0.10619100E+2, + 0.11592230E+3, 0.327E+3, 0.225E+3, 0.77785000E+1, 0.98849000E+1, 0.11372870E+3, 0.327E+3, + 0.226E+3, 0.77785000E+1, 0.91376000E+1, 0.13200850E+3, 0.327E+3, 0.227E+3, 0.77785000E+1, + 0.29263000E+1, 0.12331710E+3, 0.327E+3, 0.228E+3, 0.77785000E+1, 0.65458000E+1, 0.17220040E+3, + 0.327E+3, 0.231E+3, 0.77785000E+1, 0.19315000E+1, 0.18217310E+3, 0.327E+3, 0.232E+3, + 0.77785000E+1, 0.19447000E+1, 0.16821430E+3, 0.327E+3, 0.233E+3, 0.77785000E+1, 0.19793000E+1, + 0.15734260E+3, 0.327E+3, 0.234E+3, 0.77785000E+1, 0.19812000E+1, 0.23676080E+3, 0.327E+3, + 0.238E+3, 0.77785000E+1, 0.19143000E+1, 0.22925270E+3, 0.327E+3, 0.239E+3, 0.77785000E+1, + 0.28903000E+1, 0.23167830E+3, 0.327E+3, 0.240E+3, 0.77785000E+1, 0.39106000E+1, 0.22415900E+3, + 0.327E+3, 0.241E+3, 0.77785000E+1, 0.29225000E+1, 0.19953250E+3, 0.327E+3, 0.242E+3, + 0.77785000E+1, 0.11055600E+2, 0.17710190E+3, 0.327E+3, 0.243E+3, 0.77785000E+1, 0.95402000E+1, + 0.16774480E+3, 0.327E+3, 0.244E+3, 0.77785000E+1, 0.88895000E+1, 0.17007730E+3, 0.327E+3, + 0.245E+3, 0.77785000E+1, 0.29696000E+1, 0.17730100E+3, 0.327E+3, 0.246E+3, 0.77785000E+1, + 0.57095000E+1, 0.22299250E+3, 0.327E+3, 0.249E+3, 0.77785000E+1, 0.19378000E+1, 0.24213510E+3, + 0.327E+3, 0.250E+3, 0.77785000E+1, 0.19505000E+1, 0.22940100E+3, 0.327E+3, 0.251E+3, + 0.77785000E+1, 0.19523000E+1, 0.22211080E+3, 0.327E+3, 0.252E+3, 0.77785000E+1, 0.19639000E+1, + 0.28697840E+3, 0.327E+3, 0.256E+3, 0.77785000E+1, 0.18467000E+1, 0.29814430E+3, 0.327E+3, + 0.257E+3, 0.77785000E+1, 0.29175000E+1, 0.22247740E+3, 0.327E+3, 0.272E+3, 0.77785000E+1, + 0.38840000E+1, 0.23203320E+3, 0.327E+3, 0.273E+3, 0.77785000E+1, 0.28988000E+1, 0.21683460E+3, + 0.327E+3, 0.274E+3, 0.77785000E+1, 0.10915300E+2, 0.19794790E+3, 0.327E+3, 0.275E+3, + 0.77785000E+1, 0.98054000E+1, 0.18697210E+3, 0.327E+3, 0.276E+3, 0.77785000E+1, 0.91527000E+1, + 0.18993130E+3, 0.327E+3, 0.277E+3, 0.77785000E+1, 0.29424000E+1, 0.19953230E+3, 0.327E+3, + 0.278E+3, 0.77785000E+1, 0.66669000E+1, 0.23939990E+3, 0.327E+3, 0.281E+3, 0.77785000E+1, + 0.19302000E+1, 0.25289420E+3, 0.327E+3, 0.282E+3, 0.77785000E+1, 0.19356000E+1, 0.25818280E+3, + 0.327E+3, 0.283E+3, 0.77785000E+1, 0.19655000E+1, 0.25681660E+3, 0.327E+3, 0.284E+3, + 0.77785000E+1, 0.19639000E+1, 0.31607620E+3, 0.327E+3, 0.288E+3, 0.77785000E+1, 0.18075000E+1, + 0.60653700E+2, 0.327E+3, 0.305E+3, 0.77785000E+1, 0.29128000E+1, 0.54906600E+2, 0.327E+3, + 0.306E+3, 0.77785000E+1, 0.29987000E+1, 0.41919300E+2, 0.327E+3, 0.307E+3, 0.77785000E+1, + 0.29903000E+1, 0.13338200E+3, 0.327E+3, 0.313E+3, 0.77785000E+1, 0.29146000E+1, 0.15940630E+3, + 0.327E+3, 0.314E+3, 0.77785000E+1, 0.29407000E+1, 0.13339560E+3, 0.327E+3, 0.315E+3, + 0.77785000E+1, 0.29859000E+1, 0.11828630E+3, 0.327E+3, 0.327E+3, 0.77785000E+1, 0.77785000E+1, + 0.20185300E+2, 0.328E+3, 0.100E+1, 0.62918000E+1, 0.91180000E+0, 0.13430500E+2, 0.328E+3, + 0.200E+1, 0.62918000E+1, 0.00000000E+0, 0.32065850E+3, 0.328E+3, 0.300E+1, 0.62918000E+1, + 0.00000000E+0, 0.18269550E+3, 0.328E+3, 0.400E+1, 0.62918000E+1, 0.00000000E+0, 0.12239150E+3, + 0.328E+3, 0.500E+1, 0.62918000E+1, 0.00000000E+0, 0.82593000E+2, 0.328E+3, 0.600E+1, + 0.62918000E+1, 0.00000000E+0, 0.57846900E+2, 0.328E+3, 0.700E+1, 0.62918000E+1, 0.00000000E+0, + 0.43916100E+2, 0.328E+3, 0.800E+1, 0.62918000E+1, 0.00000000E+0, 0.33392400E+2, 0.328E+3, + 0.900E+1, 0.62918000E+1, 0.00000000E+0, 0.25794000E+2, 0.328E+3, 0.100E+2, 0.62918000E+1, + 0.00000000E+0, 0.38337730E+3, 0.328E+3, 0.110E+2, 0.62918000E+1, 0.00000000E+0, 0.29192630E+3, + 0.328E+3, 0.120E+2, 0.62918000E+1, 0.00000000E+0, 0.26812070E+3, 0.328E+3, 0.130E+2, + 0.62918000E+1, 0.00000000E+0, 0.21041880E+3, 0.328E+3, 0.140E+2, 0.62918000E+1, 0.00000000E+0, + 0.16372990E+3, 0.328E+3, 0.150E+2, 0.62918000E+1, 0.00000000E+0, 0.13584700E+3, 0.328E+3, + 0.160E+2, 0.62918000E+1, 0.00000000E+0, 0.11102480E+3, 0.328E+3, 0.170E+2, 0.62918000E+1, + 0.00000000E+0, 0.90955300E+2, 0.328E+3, 0.180E+2, 0.62918000E+1, 0.00000000E+0, 0.63014120E+3, + 0.328E+3, 0.190E+2, 0.62918000E+1, 0.00000000E+0, 0.51554150E+3, 0.328E+3, 0.200E+2, + 0.62918000E+1, 0.00000000E+0, 0.42512770E+3, 0.328E+3, 0.210E+2, 0.62918000E+1, 0.00000000E+0, + 0.41001290E+3, 0.328E+3, 0.220E+2, 0.62918000E+1, 0.00000000E+0, 0.37517450E+3, 0.328E+3, + 0.230E+2, 0.62918000E+1, 0.00000000E+0, 0.29585990E+3, 0.328E+3, 0.240E+2, 0.62918000E+1, + 0.00000000E+0, 0.32268450E+3, 0.328E+3, 0.250E+2, 0.62918000E+1, 0.00000000E+0, 0.25353650E+3, + 0.328E+3, 0.260E+2, 0.62918000E+1, 0.00000000E+0, 0.26794820E+3, 0.328E+3, 0.270E+2, + 0.62918000E+1, 0.00000000E+0, 0.27623270E+3, 0.328E+3, 0.280E+2, 0.62918000E+1, 0.00000000E+0, + 0.21214340E+3, 0.328E+3, 0.290E+2, 0.62918000E+1, 0.00000000E+0, 0.21694470E+3, 0.328E+3, + 0.300E+2, 0.62918000E+1, 0.00000000E+0, 0.25679600E+3, 0.328E+3, 0.310E+2, 0.62918000E+1, + 0.00000000E+0, 0.22570800E+3, 0.328E+3, 0.320E+2, 0.62918000E+1, 0.00000000E+0, 0.19211030E+3, + 0.328E+3, 0.330E+2, 0.62918000E+1, 0.00000000E+0, 0.17227180E+3, 0.328E+3, 0.340E+2, + 0.62918000E+1, 0.00000000E+0, 0.15074260E+3, 0.328E+3, 0.350E+2, 0.62918000E+1, 0.00000000E+0, + 0.13116000E+3, 0.328E+3, 0.360E+2, 0.62918000E+1, 0.00000000E+0, 0.70593280E+3, 0.328E+3, + 0.370E+2, 0.62918000E+1, 0.00000000E+0, 0.61461390E+3, 0.328E+3, 0.380E+2, 0.62918000E+1, + 0.00000000E+0, 0.53667450E+3, 0.328E+3, 0.390E+2, 0.62918000E+1, 0.00000000E+0, 0.48150000E+3, + 0.328E+3, 0.400E+2, 0.62918000E+1, 0.00000000E+0, 0.43865020E+3, 0.328E+3, 0.410E+2, + 0.62918000E+1, 0.00000000E+0, 0.33835350E+3, 0.328E+3, 0.420E+2, 0.62918000E+1, 0.00000000E+0, + 0.37763020E+3, 0.328E+3, 0.430E+2, 0.62918000E+1, 0.00000000E+0, 0.28746140E+3, 0.328E+3, + 0.440E+2, 0.62918000E+1, 0.00000000E+0, 0.31395770E+3, 0.328E+3, 0.450E+2, 0.62918000E+1, + 0.00000000E+0, 0.29103090E+3, 0.328E+3, 0.460E+2, 0.62918000E+1, 0.00000000E+0, 0.24320090E+3, + 0.328E+3, 0.470E+2, 0.62918000E+1, 0.00000000E+0, 0.25636430E+3, 0.328E+3, 0.480E+2, + 0.62918000E+1, 0.00000000E+0, 0.32207710E+3, 0.328E+3, 0.490E+2, 0.62918000E+1, 0.00000000E+0, + 0.29688720E+3, 0.328E+3, 0.500E+2, 0.62918000E+1, 0.00000000E+0, 0.26394960E+3, 0.328E+3, + 0.510E+2, 0.62918000E+1, 0.00000000E+0, 0.24463100E+3, 0.328E+3, 0.520E+2, 0.62918000E+1, + 0.00000000E+0, 0.22102500E+3, 0.328E+3, 0.530E+2, 0.62918000E+1, 0.00000000E+0, 0.19865840E+3, + 0.328E+3, 0.540E+2, 0.62918000E+1, 0.00000000E+0, 0.85972520E+3, 0.328E+3, 0.550E+2, + 0.62918000E+1, 0.00000000E+0, 0.78452520E+3, 0.328E+3, 0.560E+2, 0.62918000E+1, 0.00000000E+0, + 0.68699020E+3, 0.328E+3, 0.570E+2, 0.62918000E+1, 0.00000000E+0, 0.31211020E+3, 0.328E+3, + 0.580E+2, 0.62918000E+1, 0.27991000E+1, 0.69469690E+3, 0.328E+3, 0.590E+2, 0.62918000E+1, + 0.00000000E+0, 0.66673430E+3, 0.328E+3, 0.600E+2, 0.62918000E+1, 0.00000000E+0, 0.64990940E+3, + 0.328E+3, 0.610E+2, 0.62918000E+1, 0.00000000E+0, 0.63444150E+3, 0.328E+3, 0.620E+2, + 0.62918000E+1, 0.00000000E+0, 0.62071840E+3, 0.328E+3, 0.630E+2, 0.62918000E+1, 0.00000000E+0, + 0.48671800E+3, 0.328E+3, 0.640E+2, 0.62918000E+1, 0.00000000E+0, 0.55092420E+3, 0.328E+3, + 0.650E+2, 0.62918000E+1, 0.00000000E+0, 0.53097990E+3, 0.328E+3, 0.660E+2, 0.62918000E+1, + 0.00000000E+0, 0.55938190E+3, 0.328E+3, 0.670E+2, 0.62918000E+1, 0.00000000E+0, 0.54744560E+3, + 0.328E+3, 0.680E+2, 0.62918000E+1, 0.00000000E+0, 0.53665810E+3, 0.328E+3, 0.690E+2, + 0.62918000E+1, 0.00000000E+0, 0.53043510E+3, 0.328E+3, 0.700E+2, 0.62918000E+1, 0.00000000E+0, + 0.44599990E+3, 0.328E+3, 0.710E+2, 0.62918000E+1, 0.00000000E+0, 0.43700330E+3, 0.328E+3, + 0.720E+2, 0.62918000E+1, 0.00000000E+0, 0.39822740E+3, 0.328E+3, 0.730E+2, 0.62918000E+1, + 0.00000000E+0, 0.33618450E+3, 0.328E+3, 0.740E+2, 0.62918000E+1, 0.00000000E+0, 0.34173640E+3, + 0.328E+3, 0.750E+2, 0.62918000E+1, 0.00000000E+0, 0.30943260E+3, 0.328E+3, 0.760E+2, + 0.62918000E+1, 0.00000000E+0, 0.28322570E+3, 0.328E+3, 0.770E+2, 0.62918000E+1, 0.00000000E+0, + 0.23539680E+3, 0.328E+3, 0.780E+2, 0.62918000E+1, 0.00000000E+0, 0.21999670E+3, 0.328E+3, + 0.790E+2, 0.62918000E+1, 0.00000000E+0, 0.22609290E+3, 0.328E+3, 0.800E+2, 0.62918000E+1, + 0.00000000E+0, 0.33090130E+3, 0.328E+3, 0.810E+2, 0.62918000E+1, 0.00000000E+0, 0.32264990E+3, + 0.328E+3, 0.820E+2, 0.62918000E+1, 0.00000000E+0, 0.29578510E+3, 0.328E+3, 0.830E+2, + 0.62918000E+1, 0.00000000E+0, 0.28178430E+3, 0.328E+3, 0.840E+2, 0.62918000E+1, 0.00000000E+0, + 0.25980700E+3, 0.328E+3, 0.850E+2, 0.62918000E+1, 0.00000000E+0, 0.23801290E+3, 0.328E+3, + 0.860E+2, 0.62918000E+1, 0.00000000E+0, 0.80981600E+3, 0.328E+3, 0.870E+2, 0.62918000E+1, + 0.00000000E+0, 0.77454730E+3, 0.328E+3, 0.880E+2, 0.62918000E+1, 0.00000000E+0, 0.68271560E+3, + 0.328E+3, 0.890E+2, 0.62918000E+1, 0.00000000E+0, 0.61185740E+3, 0.328E+3, 0.900E+2, + 0.62918000E+1, 0.00000000E+0, 0.60871940E+3, 0.328E+3, 0.910E+2, 0.62918000E+1, 0.00000000E+0, + 0.58942580E+3, 0.328E+3, 0.920E+2, 0.62918000E+1, 0.00000000E+0, 0.60818860E+3, 0.328E+3, + 0.930E+2, 0.62918000E+1, 0.00000000E+0, 0.58874820E+3, 0.328E+3, 0.940E+2, 0.62918000E+1, + 0.00000000E+0, 0.32514900E+2, 0.328E+3, 0.101E+3, 0.62918000E+1, 0.00000000E+0, 0.10615450E+3, + 0.328E+3, 0.103E+3, 0.62918000E+1, 0.98650000E+0, 0.13527020E+3, 0.328E+3, 0.104E+3, + 0.62918000E+1, 0.98080000E+0, 0.10292200E+3, 0.328E+3, 0.105E+3, 0.62918000E+1, 0.97060000E+0, + 0.77512400E+2, 0.328E+3, 0.106E+3, 0.62918000E+1, 0.98680000E+0, 0.53969000E+2, 0.328E+3, + 0.107E+3, 0.62918000E+1, 0.99440000E+0, 0.39412500E+2, 0.328E+3, 0.108E+3, 0.62918000E+1, + 0.99250000E+0, 0.27270500E+2, 0.328E+3, 0.109E+3, 0.62918000E+1, 0.99820000E+0, 0.15557860E+3, + 0.328E+3, 0.111E+3, 0.62918000E+1, 0.96840000E+0, 0.24053020E+3, 0.328E+3, 0.112E+3, + 0.62918000E+1, 0.96280000E+0, 0.24284190E+3, 0.328E+3, 0.113E+3, 0.62918000E+1, 0.96480000E+0, + 0.19441840E+3, 0.328E+3, 0.114E+3, 0.62918000E+1, 0.95070000E+0, 0.15894530E+3, 0.328E+3, + 0.115E+3, 0.62918000E+1, 0.99470000E+0, 0.13437370E+3, 0.328E+3, 0.116E+3, 0.62918000E+1, + 0.99480000E+0, 0.10989000E+3, 0.328E+3, 0.117E+3, 0.62918000E+1, 0.99720000E+0, 0.21449610E+3, + 0.328E+3, 0.119E+3, 0.62918000E+1, 0.97670000E+0, 0.41261420E+3, 0.328E+3, 0.120E+3, + 0.62918000E+1, 0.98310000E+0, 0.21361290E+3, 0.328E+3, 0.121E+3, 0.62918000E+1, 0.18627000E+1, + 0.20626510E+3, 0.328E+3, 0.122E+3, 0.62918000E+1, 0.18299000E+1, 0.20220500E+3, 0.328E+3, + 0.123E+3, 0.62918000E+1, 0.19138000E+1, 0.20045980E+3, 0.328E+3, 0.124E+3, 0.62918000E+1, + 0.18269000E+1, 0.18404780E+3, 0.328E+3, 0.125E+3, 0.62918000E+1, 0.16406000E+1, 0.17031170E+3, + 0.328E+3, 0.126E+3, 0.62918000E+1, 0.16483000E+1, 0.16252860E+3, 0.328E+3, 0.127E+3, + 0.62918000E+1, 0.17149000E+1, 0.15894050E+3, 0.328E+3, 0.128E+3, 0.62918000E+1, 0.17937000E+1, + 0.15733960E+3, 0.328E+3, 0.129E+3, 0.62918000E+1, 0.95760000E+0, 0.14715970E+3, 0.328E+3, + 0.130E+3, 0.62918000E+1, 0.19419000E+1, 0.24100160E+3, 0.328E+3, 0.131E+3, 0.62918000E+1, + 0.96010000E+0, 0.21104400E+3, 0.328E+3, 0.132E+3, 0.62918000E+1, 0.94340000E+0, 0.18884500E+3, + 0.328E+3, 0.133E+3, 0.62918000E+1, 0.98890000E+0, 0.17234930E+3, 0.328E+3, 0.134E+3, + 0.62918000E+1, 0.99010000E+0, 0.15180060E+3, 0.328E+3, 0.135E+3, 0.62918000E+1, 0.99740000E+0, + 0.25585120E+3, 0.328E+3, 0.137E+3, 0.62918000E+1, 0.97380000E+0, 0.50246340E+3, 0.328E+3, + 0.138E+3, 0.62918000E+1, 0.98010000E+0, 0.38179030E+3, 0.328E+3, 0.139E+3, 0.62918000E+1, + 0.19153000E+1, 0.28270210E+3, 0.328E+3, 0.140E+3, 0.62918000E+1, 0.19355000E+1, 0.28559450E+3, + 0.328E+3, 0.141E+3, 0.62918000E+1, 0.19545000E+1, 0.26625680E+3, 0.328E+3, 0.142E+3, + 0.62918000E+1, 0.19420000E+1, 0.29944610E+3, 0.328E+3, 0.143E+3, 0.62918000E+1, 0.16682000E+1, + 0.23182850E+3, 0.328E+3, 0.144E+3, 0.62918000E+1, 0.18584000E+1, 0.21698060E+3, 0.328E+3, + 0.145E+3, 0.62918000E+1, 0.19003000E+1, 0.20155360E+3, 0.328E+3, 0.146E+3, 0.62918000E+1, + 0.18630000E+1, 0.19509170E+3, 0.328E+3, 0.147E+3, 0.62918000E+1, 0.96790000E+0, 0.19260990E+3, + 0.328E+3, 0.148E+3, 0.62918000E+1, 0.19539000E+1, 0.30671200E+3, 0.328E+3, 0.149E+3, + 0.62918000E+1, 0.96330000E+0, 0.27663930E+3, 0.328E+3, 0.150E+3, 0.62918000E+1, 0.95140000E+0, + 0.25861940E+3, 0.328E+3, 0.151E+3, 0.62918000E+1, 0.97490000E+0, 0.24442920E+3, 0.328E+3, + 0.152E+3, 0.62918000E+1, 0.98110000E+0, 0.22308960E+3, 0.328E+3, 0.153E+3, 0.62918000E+1, + 0.99680000E+0, 0.30164000E+3, 0.328E+3, 0.155E+3, 0.62918000E+1, 0.99090000E+0, 0.65239960E+3, + 0.328E+3, 0.156E+3, 0.62918000E+1, 0.97970000E+0, 0.48348120E+3, 0.328E+3, 0.157E+3, + 0.62918000E+1, 0.19373000E+1, 0.30268200E+3, 0.328E+3, 0.159E+3, 0.62918000E+1, 0.29425000E+1, + 0.29642470E+3, 0.328E+3, 0.160E+3, 0.62918000E+1, 0.29455000E+1, 0.28701630E+3, 0.328E+3, + 0.161E+3, 0.62918000E+1, 0.29413000E+1, 0.28852060E+3, 0.328E+3, 0.162E+3, 0.62918000E+1, + 0.29300000E+1, 0.27859570E+3, 0.328E+3, 0.163E+3, 0.62918000E+1, 0.18286000E+1, 0.29030390E+3, + 0.328E+3, 0.164E+3, 0.62918000E+1, 0.28732000E+1, 0.27264920E+3, 0.328E+3, 0.165E+3, + 0.62918000E+1, 0.29086000E+1, 0.27761700E+3, 0.328E+3, 0.166E+3, 0.62918000E+1, 0.28965000E+1, + 0.25869870E+3, 0.328E+3, 0.167E+3, 0.62918000E+1, 0.29242000E+1, 0.25129970E+3, 0.328E+3, + 0.168E+3, 0.62918000E+1, 0.29282000E+1, 0.24969380E+3, 0.328E+3, 0.169E+3, 0.62918000E+1, + 0.29246000E+1, 0.26246920E+3, 0.328E+3, 0.170E+3, 0.62918000E+1, 0.28482000E+1, 0.24127880E+3, + 0.328E+3, 0.171E+3, 0.62918000E+1, 0.29219000E+1, 0.32823180E+3, 0.328E+3, 0.172E+3, + 0.62918000E+1, 0.19254000E+1, 0.30426470E+3, 0.328E+3, 0.173E+3, 0.62918000E+1, 0.19459000E+1, + 0.27731590E+3, 0.328E+3, 0.174E+3, 0.62918000E+1, 0.19292000E+1, 0.28103260E+3, 0.328E+3, + 0.175E+3, 0.62918000E+1, 0.18104000E+1, 0.24528440E+3, 0.328E+3, 0.176E+3, 0.62918000E+1, + 0.18858000E+1, 0.23080460E+3, 0.328E+3, 0.177E+3, 0.62918000E+1, 0.18648000E+1, 0.22051410E+3, + 0.328E+3, 0.178E+3, 0.62918000E+1, 0.19188000E+1, 0.21098620E+3, 0.328E+3, 0.179E+3, + 0.62918000E+1, 0.98460000E+0, 0.20359070E+3, 0.328E+3, 0.180E+3, 0.62918000E+1, 0.19896000E+1, + 0.32952070E+3, 0.328E+3, 0.181E+3, 0.62918000E+1, 0.92670000E+0, 0.29946420E+3, 0.328E+3, + 0.182E+3, 0.62918000E+1, 0.93830000E+0, 0.28996580E+3, 0.328E+3, 0.183E+3, 0.62918000E+1, + 0.98200000E+0, 0.28177690E+3, 0.328E+3, 0.184E+3, 0.62918000E+1, 0.98150000E+0, 0.26291680E+3, + 0.328E+3, 0.185E+3, 0.62918000E+1, 0.99540000E+0, 0.33961520E+3, 0.328E+3, 0.187E+3, + 0.62918000E+1, 0.97050000E+0, 0.64757740E+3, 0.328E+3, 0.188E+3, 0.62918000E+1, 0.96620000E+0, + 0.35809400E+3, 0.328E+3, 0.189E+3, 0.62918000E+1, 0.29070000E+1, 0.41447150E+3, 0.328E+3, + 0.190E+3, 0.62918000E+1, 0.28844000E+1, 0.37053510E+3, 0.328E+3, 0.191E+3, 0.62918000E+1, + 0.28738000E+1, 0.32689030E+3, 0.328E+3, 0.192E+3, 0.62918000E+1, 0.28878000E+1, 0.31449130E+3, + 0.328E+3, 0.193E+3, 0.62918000E+1, 0.29095000E+1, 0.38028110E+3, 0.328E+3, 0.194E+3, + 0.62918000E+1, 0.19209000E+1, 0.87785200E+2, 0.328E+3, 0.204E+3, 0.62918000E+1, 0.19697000E+1, + 0.86389500E+2, 0.328E+3, 0.205E+3, 0.62918000E+1, 0.19441000E+1, 0.63209200E+2, 0.328E+3, + 0.206E+3, 0.62918000E+1, 0.19985000E+1, 0.50719800E+2, 0.328E+3, 0.207E+3, 0.62918000E+1, + 0.20143000E+1, 0.34859600E+2, 0.328E+3, 0.208E+3, 0.62918000E+1, 0.19887000E+1, 0.15613270E+3, + 0.328E+3, 0.212E+3, 0.62918000E+1, 0.19496000E+1, 0.18876990E+3, 0.328E+3, 0.213E+3, + 0.62918000E+1, 0.19311000E+1, 0.18076730E+3, 0.328E+3, 0.214E+3, 0.62918000E+1, 0.19435000E+1, + 0.15685490E+3, 0.328E+3, 0.215E+3, 0.62918000E+1, 0.20102000E+1, 0.13167410E+3, 0.328E+3, + 0.216E+3, 0.62918000E+1, 0.19903000E+1, 0.21936790E+3, 0.328E+3, 0.220E+3, 0.62918000E+1, + 0.19349000E+1, 0.21045590E+3, 0.328E+3, 0.221E+3, 0.62918000E+1, 0.28999000E+1, 0.21305010E+3, + 0.328E+3, 0.222E+3, 0.62918000E+1, 0.38675000E+1, 0.19516290E+3, 0.328E+3, 0.223E+3, + 0.62918000E+1, 0.29110000E+1, 0.14698850E+3, 0.328E+3, 0.224E+3, 0.62918000E+1, 0.10619100E+2, + 0.12572050E+3, 0.328E+3, 0.225E+3, 0.62918000E+1, 0.98849000E+1, 0.12344170E+3, 0.328E+3, + 0.226E+3, 0.62918000E+1, 0.91376000E+1, 0.14484240E+3, 0.328E+3, 0.227E+3, 0.62918000E+1, + 0.29263000E+1, 0.13489330E+3, 0.328E+3, 0.228E+3, 0.62918000E+1, 0.65458000E+1, 0.19047990E+3, + 0.328E+3, 0.231E+3, 0.62918000E+1, 0.19315000E+1, 0.20085740E+3, 0.328E+3, 0.232E+3, + 0.62918000E+1, 0.19447000E+1, 0.18386230E+3, 0.328E+3, 0.233E+3, 0.62918000E+1, 0.19793000E+1, + 0.17100310E+3, 0.328E+3, 0.234E+3, 0.62918000E+1, 0.19812000E+1, 0.26289820E+3, 0.328E+3, + 0.238E+3, 0.62918000E+1, 0.19143000E+1, 0.25242450E+3, 0.328E+3, 0.239E+3, 0.62918000E+1, + 0.28903000E+1, 0.25445670E+3, 0.328E+3, 0.240E+3, 0.62918000E+1, 0.39106000E+1, 0.24630770E+3, + 0.328E+3, 0.241E+3, 0.62918000E+1, 0.29225000E+1, 0.21764570E+3, 0.328E+3, 0.242E+3, + 0.62918000E+1, 0.11055600E+2, 0.19205910E+3, 0.328E+3, 0.243E+3, 0.62918000E+1, 0.95402000E+1, + 0.18151960E+3, 0.328E+3, 0.244E+3, 0.62918000E+1, 0.88895000E+1, 0.18521540E+3, 0.328E+3, + 0.245E+3, 0.62918000E+1, 0.29696000E+1, 0.19349000E+3, 0.328E+3, 0.246E+3, 0.62918000E+1, + 0.57095000E+1, 0.24615700E+3, 0.328E+3, 0.249E+3, 0.62918000E+1, 0.19378000E+1, 0.26732250E+3, + 0.328E+3, 0.250E+3, 0.62918000E+1, 0.19505000E+1, 0.25143010E+3, 0.328E+3, 0.251E+3, + 0.62918000E+1, 0.19523000E+1, 0.24241490E+3, 0.328E+3, 0.252E+3, 0.62918000E+1, 0.19639000E+1, + 0.31782550E+3, 0.328E+3, 0.256E+3, 0.62918000E+1, 0.18467000E+1, 0.32883880E+3, 0.328E+3, + 0.257E+3, 0.62918000E+1, 0.29175000E+1, 0.24349370E+3, 0.328E+3, 0.272E+3, 0.62918000E+1, + 0.38840000E+1, 0.25469760E+3, 0.328E+3, 0.273E+3, 0.62918000E+1, 0.28988000E+1, 0.23640400E+3, + 0.328E+3, 0.274E+3, 0.62918000E+1, 0.10915300E+2, 0.21467590E+3, 0.328E+3, 0.275E+3, + 0.62918000E+1, 0.98054000E+1, 0.20191630E+3, 0.328E+3, 0.276E+3, 0.62918000E+1, 0.91527000E+1, + 0.20622720E+3, 0.328E+3, 0.277E+3, 0.62918000E+1, 0.29424000E+1, 0.21681400E+3, 0.328E+3, + 0.278E+3, 0.62918000E+1, 0.66669000E+1, 0.26294210E+3, 0.328E+3, 0.281E+3, 0.62918000E+1, + 0.19302000E+1, 0.27771100E+3, 0.328E+3, 0.282E+3, 0.62918000E+1, 0.19356000E+1, 0.28277180E+3, + 0.328E+3, 0.283E+3, 0.62918000E+1, 0.19655000E+1, 0.28049880E+3, 0.328E+3, 0.284E+3, + 0.62918000E+1, 0.19639000E+1, 0.34977880E+3, 0.328E+3, 0.288E+3, 0.62918000E+1, 0.18075000E+1, + 0.65561800E+2, 0.328E+3, 0.305E+3, 0.62918000E+1, 0.29128000E+1, 0.59198000E+2, 0.328E+3, + 0.306E+3, 0.62918000E+1, 0.29987000E+1, 0.44744200E+2, 0.328E+3, 0.307E+3, 0.62918000E+1, + 0.29903000E+1, 0.14661210E+3, 0.328E+3, 0.313E+3, 0.62918000E+1, 0.29146000E+1, 0.17631430E+3, + 0.328E+3, 0.314E+3, 0.62918000E+1, 0.29407000E+1, 0.14541330E+3, 0.328E+3, 0.315E+3, + 0.62918000E+1, 0.29859000E+1, 0.12886410E+3, 0.328E+3, 0.327E+3, 0.62918000E+1, 0.77785000E+1, + 0.14187630E+3, 0.328E+3, 0.328E+3, 0.62918000E+1, 0.62918000E+1, 0.22539000E+2, 0.331E+3, + 0.100E+1, 0.29233000E+1, 0.91180000E+0, 0.14929600E+2, 0.331E+3, 0.200E+1, 0.29233000E+1, + 0.00000000E+0, 0.33234640E+3, 0.331E+3, 0.300E+1, 0.29233000E+1, 0.00000000E+0, 0.19774540E+3, + 0.331E+3, 0.400E+1, 0.29233000E+1, 0.00000000E+0, 0.13488560E+3, 0.331E+3, 0.500E+1, + 0.29233000E+1, 0.00000000E+0, 0.91766100E+2, 0.331E+3, 0.600E+1, 0.29233000E+1, 0.00000000E+0, + 0.64397700E+2, 0.331E+3, 0.700E+1, 0.29233000E+1, 0.00000000E+0, 0.48831000E+2, 0.331E+3, + 0.800E+1, 0.29233000E+1, 0.00000000E+0, 0.37012900E+2, 0.331E+3, 0.900E+1, 0.29233000E+1, + 0.00000000E+0, 0.28465400E+2, 0.331E+3, 0.100E+2, 0.29233000E+1, 0.00000000E+0, 0.39801800E+3, + 0.331E+3, 0.110E+2, 0.29233000E+1, 0.00000000E+0, 0.31346580E+3, 0.331E+3, 0.120E+2, + 0.29233000E+1, 0.00000000E+0, 0.29117040E+3, 0.331E+3, 0.130E+2, 0.29233000E+1, 0.00000000E+0, + 0.23154320E+3, 0.331E+3, 0.140E+2, 0.29233000E+1, 0.00000000E+0, 0.18169810E+3, 0.331E+3, + 0.150E+2, 0.29233000E+1, 0.00000000E+0, 0.15126110E+3, 0.331E+3, 0.160E+2, 0.29233000E+1, + 0.00000000E+0, 0.12384420E+3, 0.331E+3, 0.170E+2, 0.29233000E+1, 0.00000000E+0, 0.10145720E+3, + 0.331E+3, 0.180E+2, 0.29233000E+1, 0.00000000E+0, 0.64868790E+3, 0.331E+3, 0.190E+2, + 0.29233000E+1, 0.00000000E+0, 0.54545480E+3, 0.331E+3, 0.200E+2, 0.29233000E+1, 0.00000000E+0, + 0.45241480E+3, 0.331E+3, 0.210E+2, 0.29233000E+1, 0.00000000E+0, 0.43828120E+3, 0.331E+3, + 0.220E+2, 0.29233000E+1, 0.00000000E+0, 0.40212020E+3, 0.331E+3, 0.230E+2, 0.29233000E+1, + 0.00000000E+0, 0.31661340E+3, 0.331E+3, 0.240E+2, 0.29233000E+1, 0.00000000E+0, 0.34715450E+3, + 0.331E+3, 0.250E+2, 0.29233000E+1, 0.00000000E+0, 0.27239980E+3, 0.331E+3, 0.260E+2, + 0.29233000E+1, 0.00000000E+0, 0.29012680E+3, 0.331E+3, 0.270E+2, 0.29233000E+1, 0.00000000E+0, + 0.29831410E+3, 0.331E+3, 0.280E+2, 0.29233000E+1, 0.00000000E+0, 0.22848110E+3, 0.331E+3, + 0.290E+2, 0.29233000E+1, 0.00000000E+0, 0.23616610E+3, 0.331E+3, 0.300E+2, 0.29233000E+1, + 0.00000000E+0, 0.27943460E+3, 0.331E+3, 0.310E+2, 0.29233000E+1, 0.00000000E+0, 0.24818660E+3, + 0.331E+3, 0.320E+2, 0.29233000E+1, 0.00000000E+0, 0.21282990E+3, 0.331E+3, 0.330E+2, + 0.29233000E+1, 0.00000000E+0, 0.19148490E+3, 0.331E+3, 0.340E+2, 0.29233000E+1, 0.00000000E+0, + 0.16795000E+3, 0.331E+3, 0.350E+2, 0.29233000E+1, 0.00000000E+0, 0.14629100E+3, 0.331E+3, + 0.360E+2, 0.29233000E+1, 0.00000000E+0, 0.72799780E+3, 0.331E+3, 0.370E+2, 0.29233000E+1, + 0.00000000E+0, 0.64926400E+3, 0.331E+3, 0.380E+2, 0.29233000E+1, 0.00000000E+0, 0.57254520E+3, + 0.331E+3, 0.390E+2, 0.29233000E+1, 0.00000000E+0, 0.51656560E+3, 0.331E+3, 0.400E+2, + 0.29233000E+1, 0.00000000E+0, 0.47214060E+3, 0.331E+3, 0.410E+2, 0.29233000E+1, 0.00000000E+0, + 0.36573900E+3, 0.331E+3, 0.420E+2, 0.29233000E+1, 0.00000000E+0, 0.40759020E+3, 0.331E+3, + 0.430E+2, 0.29233000E+1, 0.00000000E+0, 0.31162540E+3, 0.331E+3, 0.440E+2, 0.29233000E+1, + 0.00000000E+0, 0.34083280E+3, 0.331E+3, 0.450E+2, 0.29233000E+1, 0.00000000E+0, 0.31647210E+3, + 0.331E+3, 0.460E+2, 0.29233000E+1, 0.00000000E+0, 0.26332580E+3, 0.331E+3, 0.470E+2, + 0.29233000E+1, 0.00000000E+0, 0.27928860E+3, 0.331E+3, 0.480E+2, 0.29233000E+1, 0.00000000E+0, + 0.34913300E+3, 0.331E+3, 0.490E+2, 0.29233000E+1, 0.00000000E+0, 0.32482290E+3, 0.331E+3, + 0.500E+2, 0.29233000E+1, 0.00000000E+0, 0.29096000E+3, 0.331E+3, 0.510E+2, 0.29233000E+1, + 0.00000000E+0, 0.27067740E+3, 0.331E+3, 0.520E+2, 0.29233000E+1, 0.00000000E+0, 0.24534690E+3, + 0.331E+3, 0.530E+2, 0.29233000E+1, 0.00000000E+0, 0.22101200E+3, 0.331E+3, 0.540E+2, + 0.29233000E+1, 0.00000000E+0, 0.88720920E+3, 0.331E+3, 0.550E+2, 0.29233000E+1, 0.00000000E+0, + 0.82570960E+3, 0.331E+3, 0.560E+2, 0.29233000E+1, 0.00000000E+0, 0.73032590E+3, 0.331E+3, + 0.570E+2, 0.29233000E+1, 0.00000000E+0, 0.34326010E+3, 0.331E+3, 0.580E+2, 0.29233000E+1, + 0.27991000E+1, 0.73303460E+3, 0.331E+3, 0.590E+2, 0.29233000E+1, 0.00000000E+0, 0.70467870E+3, + 0.331E+3, 0.600E+2, 0.29233000E+1, 0.00000000E+0, 0.68722230E+3, 0.331E+3, 0.610E+2, + 0.29233000E+1, 0.00000000E+0, 0.67114820E+3, 0.331E+3, 0.620E+2, 0.29233000E+1, 0.00000000E+0, + 0.65690430E+3, 0.331E+3, 0.630E+2, 0.29233000E+1, 0.00000000E+0, 0.52004840E+3, 0.331E+3, + 0.640E+2, 0.29233000E+1, 0.00000000E+0, 0.57921270E+3, 0.331E+3, 0.650E+2, 0.29233000E+1, + 0.00000000E+0, 0.55935900E+3, 0.331E+3, 0.660E+2, 0.29233000E+1, 0.00000000E+0, 0.59350440E+3, + 0.331E+3, 0.670E+2, 0.29233000E+1, 0.00000000E+0, 0.58102860E+3, 0.331E+3, 0.680E+2, + 0.29233000E+1, 0.00000000E+0, 0.56982860E+3, 0.331E+3, 0.690E+2, 0.29233000E+1, 0.00000000E+0, + 0.56301640E+3, 0.331E+3, 0.700E+2, 0.29233000E+1, 0.00000000E+0, 0.47657670E+3, 0.331E+3, + 0.710E+2, 0.29233000E+1, 0.00000000E+0, 0.47186840E+3, 0.331E+3, 0.720E+2, 0.29233000E+1, + 0.00000000E+0, 0.43210850E+3, 0.331E+3, 0.730E+2, 0.29233000E+1, 0.00000000E+0, 0.36558740E+3, + 0.331E+3, 0.740E+2, 0.29233000E+1, 0.00000000E+0, 0.37247260E+3, 0.331E+3, 0.750E+2, + 0.29233000E+1, 0.00000000E+0, 0.33845240E+3, 0.331E+3, 0.760E+2, 0.29233000E+1, 0.00000000E+0, + 0.31056410E+3, 0.331E+3, 0.770E+2, 0.29233000E+1, 0.00000000E+0, 0.25829950E+3, 0.331E+3, + 0.780E+2, 0.29233000E+1, 0.00000000E+0, 0.24143850E+3, 0.331E+3, 0.790E+2, 0.29233000E+1, + 0.00000000E+0, 0.24873340E+3, 0.331E+3, 0.800E+2, 0.29233000E+1, 0.00000000E+0, 0.35861390E+3, + 0.331E+3, 0.810E+2, 0.29233000E+1, 0.00000000E+0, 0.35236140E+3, 0.331E+3, 0.820E+2, + 0.29233000E+1, 0.00000000E+0, 0.32532280E+3, 0.331E+3, 0.830E+2, 0.29233000E+1, 0.00000000E+0, + 0.31104340E+3, 0.331E+3, 0.840E+2, 0.29233000E+1, 0.00000000E+0, 0.28780550E+3, 0.331E+3, + 0.850E+2, 0.29233000E+1, 0.00000000E+0, 0.26431470E+3, 0.331E+3, 0.860E+2, 0.29233000E+1, + 0.00000000E+0, 0.84229970E+3, 0.331E+3, 0.870E+2, 0.29233000E+1, 0.00000000E+0, 0.81926690E+3, + 0.331E+3, 0.880E+2, 0.29233000E+1, 0.00000000E+0, 0.72858620E+3, 0.331E+3, 0.890E+2, + 0.29233000E+1, 0.00000000E+0, 0.65887100E+3, 0.331E+3, 0.900E+2, 0.29233000E+1, 0.00000000E+0, + 0.65182590E+3, 0.331E+3, 0.910E+2, 0.29233000E+1, 0.00000000E+0, 0.63119280E+3, 0.331E+3, + 0.920E+2, 0.29233000E+1, 0.00000000E+0, 0.64715530E+3, 0.331E+3, 0.930E+2, 0.29233000E+1, + 0.00000000E+0, 0.62718910E+3, 0.331E+3, 0.940E+2, 0.29233000E+1, 0.00000000E+0, 0.36144700E+2, + 0.331E+3, 0.101E+3, 0.29233000E+1, 0.00000000E+0, 0.11512840E+3, 0.331E+3, 0.103E+3, + 0.29233000E+1, 0.98650000E+0, 0.14719230E+3, 0.331E+3, 0.104E+3, 0.29233000E+1, 0.98080000E+0, + 0.11367480E+3, 0.331E+3, 0.105E+3, 0.29233000E+1, 0.97060000E+0, 0.86017200E+2, 0.331E+3, + 0.106E+3, 0.29233000E+1, 0.98680000E+0, 0.60022900E+2, 0.331E+3, 0.107E+3, 0.29233000E+1, + 0.99440000E+0, 0.43796200E+2, 0.331E+3, 0.108E+3, 0.29233000E+1, 0.99250000E+0, 0.30155700E+2, + 0.331E+3, 0.109E+3, 0.29233000E+1, 0.99820000E+0, 0.16772780E+3, 0.331E+3, 0.111E+3, + 0.29233000E+1, 0.96840000E+0, 0.25920610E+3, 0.331E+3, 0.112E+3, 0.29233000E+1, 0.96280000E+0, + 0.26429930E+3, 0.331E+3, 0.113E+3, 0.29233000E+1, 0.96480000E+0, 0.21422700E+3, 0.331E+3, + 0.114E+3, 0.29233000E+1, 0.95070000E+0, 0.17638160E+3, 0.331E+3, 0.115E+3, 0.29233000E+1, + 0.99470000E+0, 0.14956740E+3, 0.331E+3, 0.116E+3, 0.29233000E+1, 0.99480000E+0, 0.12254290E+3, + 0.331E+3, 0.117E+3, 0.29233000E+1, 0.99720000E+0, 0.23199890E+3, 0.331E+3, 0.119E+3, + 0.29233000E+1, 0.97670000E+0, 0.43628440E+3, 0.331E+3, 0.120E+3, 0.29233000E+1, 0.98310000E+0, + 0.23401650E+3, 0.331E+3, 0.121E+3, 0.29233000E+1, 0.18627000E+1, 0.22591360E+3, 0.331E+3, + 0.122E+3, 0.29233000E+1, 0.18299000E+1, 0.22133820E+3, 0.331E+3, 0.123E+3, 0.29233000E+1, + 0.19138000E+1, 0.21907040E+3, 0.331E+3, 0.124E+3, 0.29233000E+1, 0.18269000E+1, 0.20247400E+3, + 0.331E+3, 0.125E+3, 0.29233000E+1, 0.16406000E+1, 0.18755800E+3, 0.331E+3, 0.126E+3, + 0.29233000E+1, 0.16483000E+1, 0.17887740E+3, 0.331E+3, 0.127E+3, 0.29233000E+1, 0.17149000E+1, + 0.17480580E+3, 0.331E+3, 0.128E+3, 0.29233000E+1, 0.17937000E+1, 0.17212150E+3, 0.331E+3, + 0.129E+3, 0.29233000E+1, 0.95760000E+0, 0.16247350E+3, 0.331E+3, 0.130E+3, 0.29233000E+1, + 0.19419000E+1, 0.26291340E+3, 0.331E+3, 0.131E+3, 0.29233000E+1, 0.96010000E+0, 0.23250850E+3, + 0.331E+3, 0.132E+3, 0.29233000E+1, 0.94340000E+0, 0.20926950E+3, 0.331E+3, 0.133E+3, + 0.29233000E+1, 0.98890000E+0, 0.19154240E+3, 0.331E+3, 0.134E+3, 0.29233000E+1, 0.99010000E+0, + 0.16909250E+3, 0.331E+3, 0.135E+3, 0.29233000E+1, 0.99740000E+0, 0.27717010E+3, 0.331E+3, + 0.137E+3, 0.29233000E+1, 0.97380000E+0, 0.53024480E+3, 0.331E+3, 0.138E+3, 0.29233000E+1, + 0.98010000E+0, 0.41052730E+3, 0.331E+3, 0.139E+3, 0.29233000E+1, 0.19153000E+1, 0.30919640E+3, + 0.331E+3, 0.140E+3, 0.29233000E+1, 0.19355000E+1, 0.31215680E+3, 0.331E+3, 0.141E+3, + 0.29233000E+1, 0.19545000E+1, 0.29139440E+3, 0.331E+3, 0.142E+3, 0.29233000E+1, 0.19420000E+1, + 0.32490950E+3, 0.331E+3, 0.143E+3, 0.29233000E+1, 0.16682000E+1, 0.25488120E+3, 0.331E+3, + 0.144E+3, 0.29233000E+1, 0.18584000E+1, 0.23843110E+3, 0.331E+3, 0.145E+3, 0.29233000E+1, + 0.19003000E+1, 0.22146490E+3, 0.331E+3, 0.146E+3, 0.29233000E+1, 0.18630000E+1, 0.21407940E+3, + 0.331E+3, 0.147E+3, 0.29233000E+1, 0.96790000E+0, 0.21251480E+3, 0.331E+3, 0.148E+3, + 0.29233000E+1, 0.19539000E+1, 0.33348150E+3, 0.331E+3, 0.149E+3, 0.29233000E+1, 0.96330000E+0, + 0.30351790E+3, 0.331E+3, 0.150E+3, 0.29233000E+1, 0.95140000E+0, 0.28533630E+3, 0.331E+3, + 0.151E+3, 0.29233000E+1, 0.97490000E+0, 0.27052970E+3, 0.331E+3, 0.152E+3, 0.29233000E+1, + 0.98110000E+0, 0.24764850E+3, 0.331E+3, 0.153E+3, 0.29233000E+1, 0.99680000E+0, 0.32944100E+3, + 0.331E+3, 0.155E+3, 0.29233000E+1, 0.99090000E+0, 0.68550020E+3, 0.331E+3, 0.156E+3, + 0.29233000E+1, 0.97970000E+0, 0.51898320E+3, 0.331E+3, 0.157E+3, 0.29233000E+1, 0.19373000E+1, + 0.33298690E+3, 0.331E+3, 0.159E+3, 0.29233000E+1, 0.29425000E+1, 0.32610980E+3, 0.331E+3, + 0.160E+3, 0.29233000E+1, 0.29455000E+1, 0.31583740E+3, 0.331E+3, 0.161E+3, 0.29233000E+1, + 0.29413000E+1, 0.31714450E+3, 0.331E+3, 0.162E+3, 0.29233000E+1, 0.29300000E+1, 0.30481740E+3, + 0.331E+3, 0.163E+3, 0.29233000E+1, 0.18286000E+1, 0.31912880E+3, 0.331E+3, 0.164E+3, + 0.29233000E+1, 0.28732000E+1, 0.29989300E+3, 0.331E+3, 0.165E+3, 0.29233000E+1, 0.29086000E+1, + 0.30469800E+3, 0.331E+3, 0.166E+3, 0.29233000E+1, 0.28965000E+1, 0.28484920E+3, 0.331E+3, + 0.167E+3, 0.29233000E+1, 0.29242000E+1, 0.27680030E+3, 0.331E+3, 0.168E+3, 0.29233000E+1, + 0.29282000E+1, 0.27498180E+3, 0.331E+3, 0.169E+3, 0.29233000E+1, 0.29246000E+1, 0.28882640E+3, + 0.331E+3, 0.170E+3, 0.29233000E+1, 0.28482000E+1, 0.26590550E+3, 0.331E+3, 0.171E+3, + 0.29233000E+1, 0.29219000E+1, 0.35695090E+3, 0.331E+3, 0.172E+3, 0.29233000E+1, 0.19254000E+1, + 0.33227960E+3, 0.331E+3, 0.173E+3, 0.29233000E+1, 0.19459000E+1, 0.30407910E+3, 0.331E+3, + 0.174E+3, 0.29233000E+1, 0.19292000E+1, 0.30677590E+3, 0.331E+3, 0.175E+3, 0.29233000E+1, + 0.18104000E+1, 0.27045010E+3, 0.331E+3, 0.176E+3, 0.29233000E+1, 0.18858000E+1, 0.25457310E+3, + 0.331E+3, 0.177E+3, 0.29233000E+1, 0.18648000E+1, 0.24321020E+3, 0.331E+3, 0.178E+3, + 0.29233000E+1, 0.19188000E+1, 0.23238620E+3, 0.331E+3, 0.179E+3, 0.29233000E+1, 0.98460000E+0, + 0.22515610E+3, 0.331E+3, 0.180E+3, 0.29233000E+1, 0.19896000E+1, 0.35816930E+3, 0.331E+3, + 0.181E+3, 0.29233000E+1, 0.92670000E+0, 0.32836650E+3, 0.331E+3, 0.182E+3, 0.29233000E+1, + 0.93830000E+0, 0.31941280E+3, 0.331E+3, 0.183E+3, 0.29233000E+1, 0.98200000E+0, 0.31125260E+3, + 0.331E+3, 0.184E+3, 0.29233000E+1, 0.98150000E+0, 0.29132130E+3, 0.331E+3, 0.185E+3, + 0.29233000E+1, 0.99540000E+0, 0.37119590E+3, 0.331E+3, 0.187E+3, 0.29233000E+1, 0.97050000E+0, + 0.68477170E+3, 0.331E+3, 0.188E+3, 0.29233000E+1, 0.96620000E+0, 0.39403910E+3, 0.331E+3, + 0.189E+3, 0.29233000E+1, 0.29070000E+1, 0.45247860E+3, 0.331E+3, 0.190E+3, 0.29233000E+1, + 0.28844000E+1, 0.40499240E+3, 0.331E+3, 0.191E+3, 0.29233000E+1, 0.28738000E+1, 0.35926250E+3, + 0.331E+3, 0.192E+3, 0.29233000E+1, 0.28878000E+1, 0.34595630E+3, 0.331E+3, 0.193E+3, + 0.29233000E+1, 0.29095000E+1, 0.41186560E+3, 0.331E+3, 0.194E+3, 0.29233000E+1, 0.19209000E+1, + 0.97234600E+2, 0.331E+3, 0.204E+3, 0.29233000E+1, 0.19697000E+1, 0.95603900E+2, 0.331E+3, + 0.205E+3, 0.29233000E+1, 0.19441000E+1, 0.70318400E+2, 0.331E+3, 0.206E+3, 0.29233000E+1, + 0.19985000E+1, 0.56361200E+2, 0.331E+3, 0.207E+3, 0.29233000E+1, 0.20143000E+1, 0.38626300E+2, + 0.331E+3, 0.208E+3, 0.29233000E+1, 0.19887000E+1, 0.17153850E+3, 0.331E+3, 0.212E+3, + 0.29233000E+1, 0.19496000E+1, 0.20708710E+3, 0.331E+3, 0.213E+3, 0.29233000E+1, 0.19311000E+1, + 0.19947600E+3, 0.331E+3, 0.214E+3, 0.29233000E+1, 0.19435000E+1, 0.17389310E+3, 0.331E+3, + 0.215E+3, 0.29233000E+1, 0.20102000E+1, 0.14653820E+3, 0.331E+3, 0.216E+3, 0.29233000E+1, + 0.19903000E+1, 0.24008000E+3, 0.331E+3, 0.220E+3, 0.29233000E+1, 0.19349000E+1, 0.23151840E+3, + 0.331E+3, 0.221E+3, 0.29233000E+1, 0.28999000E+1, 0.23440930E+3, 0.331E+3, 0.222E+3, + 0.29233000E+1, 0.38675000E+1, 0.21438080E+3, 0.331E+3, 0.223E+3, 0.29233000E+1, 0.29110000E+1, + 0.16205470E+3, 0.331E+3, 0.224E+3, 0.29233000E+1, 0.10619100E+2, 0.13899280E+3, 0.331E+3, + 0.225E+3, 0.29233000E+1, 0.98849000E+1, 0.13638180E+3, 0.331E+3, 0.226E+3, 0.29233000E+1, + 0.91376000E+1, 0.15925840E+3, 0.331E+3, 0.227E+3, 0.29233000E+1, 0.29263000E+1, 0.14856420E+3, + 0.331E+3, 0.228E+3, 0.29233000E+1, 0.65458000E+1, 0.20951300E+3, 0.331E+3, 0.231E+3, + 0.29233000E+1, 0.19315000E+1, 0.22156120E+3, 0.331E+3, 0.232E+3, 0.29233000E+1, 0.19447000E+1, + 0.20387080E+3, 0.331E+3, 0.233E+3, 0.29233000E+1, 0.19793000E+1, 0.19004420E+3, 0.331E+3, + 0.234E+3, 0.29233000E+1, 0.19812000E+1, 0.28761670E+3, 0.331E+3, 0.238E+3, 0.29233000E+1, + 0.19143000E+1, 0.27811250E+3, 0.331E+3, 0.239E+3, 0.29233000E+1, 0.28903000E+1, 0.28082410E+3, + 0.331E+3, 0.240E+3, 0.29233000E+1, 0.39106000E+1, 0.27131370E+3, 0.331E+3, 0.241E+3, + 0.29233000E+1, 0.29225000E+1, 0.24051090E+3, 0.331E+3, 0.242E+3, 0.29233000E+1, 0.11055600E+2, + 0.21269370E+3, 0.331E+3, 0.243E+3, 0.29233000E+1, 0.95402000E+1, 0.20110400E+3, 0.331E+3, + 0.244E+3, 0.29233000E+1, 0.88895000E+1, 0.20422770E+3, 0.331E+3, 0.245E+3, 0.29233000E+1, + 0.29696000E+1, 0.21323450E+3, 0.331E+3, 0.246E+3, 0.29233000E+1, 0.57095000E+1, 0.27009880E+3, + 0.331E+3, 0.249E+3, 0.29233000E+1, 0.19378000E+1, 0.29372900E+3, 0.331E+3, 0.250E+3, + 0.29233000E+1, 0.19505000E+1, 0.27771860E+3, 0.331E+3, 0.251E+3, 0.29233000E+1, 0.19523000E+1, + 0.26841360E+3, 0.331E+3, 0.252E+3, 0.29233000E+1, 0.19639000E+1, 0.34819780E+3, 0.331E+3, + 0.256E+3, 0.29233000E+1, 0.18467000E+1, 0.36193370E+3, 0.331E+3, 0.257E+3, 0.29233000E+1, + 0.29175000E+1, 0.26924010E+3, 0.331E+3, 0.272E+3, 0.29233000E+1, 0.38840000E+1, 0.28063840E+3, + 0.331E+3, 0.273E+3, 0.29233000E+1, 0.28988000E+1, 0.26136250E+3, 0.331E+3, 0.274E+3, + 0.29233000E+1, 0.10915300E+2, 0.23778890E+3, 0.331E+3, 0.275E+3, 0.29233000E+1, 0.98054000E+1, + 0.22400480E+3, 0.331E+3, 0.276E+3, 0.29233000E+1, 0.91527000E+1, 0.22773200E+3, 0.331E+3, + 0.277E+3, 0.29233000E+1, 0.29424000E+1, 0.23955770E+3, 0.331E+3, 0.278E+3, 0.29233000E+1, + 0.66669000E+1, 0.28897680E+3, 0.331E+3, 0.281E+3, 0.29233000E+1, 0.19302000E+1, 0.30561160E+3, + 0.331E+3, 0.282E+3, 0.29233000E+1, 0.19356000E+1, 0.31199930E+3, 0.331E+3, 0.283E+3, + 0.29233000E+1, 0.19655000E+1, 0.31006550E+3, 0.331E+3, 0.284E+3, 0.29233000E+1, 0.19639000E+1, + 0.38347400E+3, 0.331E+3, 0.288E+3, 0.29233000E+1, 0.18075000E+1, 0.73075400E+2, 0.331E+3, + 0.305E+3, 0.29233000E+1, 0.29128000E+1, 0.65758400E+2, 0.331E+3, 0.306E+3, 0.29233000E+1, + 0.29987000E+1, 0.49615900E+2, 0.331E+3, 0.307E+3, 0.29233000E+1, 0.29903000E+1, 0.16240650E+3, + 0.331E+3, 0.313E+3, 0.29233000E+1, 0.29146000E+1, 0.19417780E+3, 0.331E+3, 0.314E+3, + 0.29233000E+1, 0.29407000E+1, 0.16155910E+3, 0.331E+3, 0.315E+3, 0.29233000E+1, 0.29859000E+1, + 0.14216340E+3, 0.331E+3, 0.327E+3, 0.29233000E+1, 0.77785000E+1, 0.15548130E+3, 0.331E+3, + 0.328E+3, 0.29233000E+1, 0.62918000E+1, 0.17231530E+3, 0.331E+3, 0.331E+3, 0.29233000E+1, + 0.29233000E+1, 0.25925500E+2, 0.332E+3, 0.100E+1, 0.29186000E+1, 0.91180000E+0, 0.17061400E+2, + 0.332E+3, 0.200E+1, 0.29186000E+1, 0.00000000E+0, 0.39241090E+3, 0.332E+3, 0.300E+1, + 0.29186000E+1, 0.00000000E+0, 0.23062870E+3, 0.332E+3, 0.400E+1, 0.29186000E+1, 0.00000000E+0, + 0.15627830E+3, 0.332E+3, 0.500E+1, 0.29186000E+1, 0.00000000E+0, 0.10580040E+3, 0.332E+3, + 0.600E+1, 0.29186000E+1, 0.00000000E+0, 0.73967500E+2, 0.332E+3, 0.700E+1, 0.29186000E+1, + 0.00000000E+0, 0.55931400E+2, 0.332E+3, 0.800E+1, 0.29186000E+1, 0.00000000E+0, 0.42287900E+2, + 0.332E+3, 0.900E+1, 0.29186000E+1, 0.00000000E+0, 0.32451500E+2, 0.332E+3, 0.100E+2, + 0.29186000E+1, 0.00000000E+0, 0.46954960E+3, 0.332E+3, 0.110E+2, 0.29186000E+1, 0.00000000E+0, + 0.36633190E+3, 0.332E+3, 0.120E+2, 0.29186000E+1, 0.00000000E+0, 0.33910340E+3, 0.332E+3, + 0.130E+2, 0.29186000E+1, 0.00000000E+0, 0.26843700E+3, 0.332E+3, 0.140E+2, 0.29186000E+1, + 0.00000000E+0, 0.20985610E+3, 0.332E+3, 0.150E+2, 0.29186000E+1, 0.00000000E+0, 0.17427160E+3, + 0.332E+3, 0.160E+2, 0.29186000E+1, 0.00000000E+0, 0.14234130E+3, 0.332E+3, 0.170E+2, + 0.29186000E+1, 0.00000000E+0, 0.11635890E+3, 0.332E+3, 0.180E+2, 0.29186000E+1, 0.00000000E+0, + 0.76657140E+3, 0.332E+3, 0.190E+2, 0.29186000E+1, 0.00000000E+0, 0.63980000E+3, 0.332E+3, + 0.200E+2, 0.29186000E+1, 0.00000000E+0, 0.52977990E+3, 0.332E+3, 0.210E+2, 0.29186000E+1, + 0.00000000E+0, 0.51242740E+3, 0.332E+3, 0.220E+2, 0.29186000E+1, 0.00000000E+0, 0.46971220E+3, + 0.332E+3, 0.230E+2, 0.29186000E+1, 0.00000000E+0, 0.36970490E+3, 0.332E+3, 0.240E+2, + 0.29186000E+1, 0.00000000E+0, 0.40496220E+3, 0.332E+3, 0.250E+2, 0.29186000E+1, 0.00000000E+0, + 0.31759430E+3, 0.332E+3, 0.260E+2, 0.29186000E+1, 0.00000000E+0, 0.33769310E+3, 0.332E+3, + 0.270E+2, 0.29186000E+1, 0.00000000E+0, 0.34754450E+3, 0.332E+3, 0.280E+2, 0.29186000E+1, + 0.00000000E+0, 0.26609200E+3, 0.332E+3, 0.290E+2, 0.29186000E+1, 0.00000000E+0, 0.27433390E+3, + 0.332E+3, 0.300E+2, 0.29186000E+1, 0.00000000E+0, 0.32494560E+3, 0.332E+3, 0.310E+2, + 0.29186000E+1, 0.00000000E+0, 0.28761030E+3, 0.332E+3, 0.320E+2, 0.29186000E+1, 0.00000000E+0, + 0.24587190E+3, 0.332E+3, 0.330E+2, 0.29186000E+1, 0.00000000E+0, 0.22078460E+3, 0.332E+3, + 0.340E+2, 0.29186000E+1, 0.00000000E+0, 0.19325910E+3, 0.332E+3, 0.350E+2, 0.29186000E+1, + 0.00000000E+0, 0.16801940E+3, 0.332E+3, 0.360E+2, 0.29186000E+1, 0.00000000E+0, 0.85965830E+3, + 0.332E+3, 0.370E+2, 0.29186000E+1, 0.00000000E+0, 0.76173640E+3, 0.332E+3, 0.380E+2, + 0.29186000E+1, 0.00000000E+0, 0.66974730E+3, 0.332E+3, 0.390E+2, 0.29186000E+1, 0.00000000E+0, + 0.60315190E+3, 0.332E+3, 0.400E+2, 0.29186000E+1, 0.00000000E+0, 0.55060110E+3, 0.332E+3, + 0.410E+2, 0.29186000E+1, 0.00000000E+0, 0.42558490E+3, 0.332E+3, 0.420E+2, 0.29186000E+1, + 0.00000000E+0, 0.47466380E+3, 0.332E+3, 0.430E+2, 0.29186000E+1, 0.00000000E+0, 0.36203660E+3, + 0.332E+3, 0.440E+2, 0.29186000E+1, 0.00000000E+0, 0.39601830E+3, 0.332E+3, 0.450E+2, + 0.29186000E+1, 0.00000000E+0, 0.36742870E+3, 0.332E+3, 0.460E+2, 0.29186000E+1, 0.00000000E+0, + 0.30577550E+3, 0.332E+3, 0.470E+2, 0.29186000E+1, 0.00000000E+0, 0.32392920E+3, 0.332E+3, + 0.480E+2, 0.29186000E+1, 0.00000000E+0, 0.40593030E+3, 0.332E+3, 0.490E+2, 0.29186000E+1, + 0.00000000E+0, 0.37661080E+3, 0.332E+3, 0.500E+2, 0.29186000E+1, 0.00000000E+0, 0.33642890E+3, + 0.332E+3, 0.510E+2, 0.29186000E+1, 0.00000000E+0, 0.31246310E+3, 0.332E+3, 0.520E+2, + 0.29186000E+1, 0.00000000E+0, 0.28271950E+3, 0.332E+3, 0.530E+2, 0.29186000E+1, 0.00000000E+0, + 0.25424580E+3, 0.332E+3, 0.540E+2, 0.29186000E+1, 0.00000000E+0, 0.10475077E+4, 0.332E+3, + 0.550E+2, 0.29186000E+1, 0.00000000E+0, 0.96965590E+3, 0.332E+3, 0.560E+2, 0.29186000E+1, + 0.00000000E+0, 0.85512980E+3, 0.332E+3, 0.570E+2, 0.29186000E+1, 0.00000000E+0, 0.39708240E+3, + 0.332E+3, 0.580E+2, 0.29186000E+1, 0.27991000E+1, 0.85990430E+3, 0.332E+3, 0.590E+2, + 0.29186000E+1, 0.00000000E+0, 0.82624710E+3, 0.332E+3, 0.600E+2, 0.29186000E+1, 0.00000000E+0, + 0.80566910E+3, 0.332E+3, 0.610E+2, 0.29186000E+1, 0.00000000E+0, 0.78673400E+3, 0.332E+3, + 0.620E+2, 0.29186000E+1, 0.00000000E+0, 0.76995120E+3, 0.332E+3, 0.630E+2, 0.29186000E+1, + 0.00000000E+0, 0.60750730E+3, 0.332E+3, 0.640E+2, 0.29186000E+1, 0.00000000E+0, 0.67977520E+3, + 0.332E+3, 0.650E+2, 0.29186000E+1, 0.00000000E+0, 0.65608890E+3, 0.332E+3, 0.660E+2, + 0.29186000E+1, 0.00000000E+0, 0.69513050E+3, 0.332E+3, 0.670E+2, 0.29186000E+1, 0.00000000E+0, + 0.68046640E+3, 0.332E+3, 0.680E+2, 0.29186000E+1, 0.00000000E+0, 0.66727580E+3, 0.332E+3, + 0.690E+2, 0.29186000E+1, 0.00000000E+0, 0.65939100E+3, 0.332E+3, 0.700E+2, 0.29186000E+1, + 0.00000000E+0, 0.55687690E+3, 0.332E+3, 0.710E+2, 0.29186000E+1, 0.00000000E+0, 0.54981880E+3, + 0.332E+3, 0.720E+2, 0.29186000E+1, 0.00000000E+0, 0.50258340E+3, 0.332E+3, 0.730E+2, + 0.29186000E+1, 0.00000000E+0, 0.42456930E+3, 0.332E+3, 0.740E+2, 0.29186000E+1, 0.00000000E+0, + 0.43228120E+3, 0.332E+3, 0.750E+2, 0.29186000E+1, 0.00000000E+0, 0.39218940E+3, 0.332E+3, + 0.760E+2, 0.29186000E+1, 0.00000000E+0, 0.35941840E+3, 0.332E+3, 0.770E+2, 0.29186000E+1, + 0.00000000E+0, 0.29849470E+3, 0.332E+3, 0.780E+2, 0.29186000E+1, 0.00000000E+0, 0.27884190E+3, + 0.332E+3, 0.790E+2, 0.29186000E+1, 0.00000000E+0, 0.28712700E+3, 0.332E+3, 0.800E+2, + 0.29186000E+1, 0.00000000E+0, 0.41657100E+3, 0.332E+3, 0.810E+2, 0.29186000E+1, 0.00000000E+0, + 0.40843950E+3, 0.332E+3, 0.820E+2, 0.29186000E+1, 0.00000000E+0, 0.37618150E+3, 0.332E+3, + 0.830E+2, 0.29186000E+1, 0.00000000E+0, 0.35916750E+3, 0.332E+3, 0.840E+2, 0.29186000E+1, + 0.00000000E+0, 0.33177440E+3, 0.332E+3, 0.850E+2, 0.29186000E+1, 0.00000000E+0, 0.30422370E+3, + 0.332E+3, 0.860E+2, 0.29186000E+1, 0.00000000E+0, 0.99208740E+3, 0.332E+3, 0.870E+2, + 0.29186000E+1, 0.00000000E+0, 0.96060620E+3, 0.332E+3, 0.880E+2, 0.29186000E+1, 0.00000000E+0, + 0.85194620E+3, 0.332E+3, 0.890E+2, 0.29186000E+1, 0.00000000E+0, 0.76802670E+3, 0.332E+3, + 0.900E+2, 0.29186000E+1, 0.00000000E+0, 0.76090240E+3, 0.332E+3, 0.910E+2, 0.29186000E+1, + 0.00000000E+0, 0.73674860E+3, 0.332E+3, 0.920E+2, 0.29186000E+1, 0.00000000E+0, 0.75679710E+3, + 0.332E+3, 0.930E+2, 0.29186000E+1, 0.00000000E+0, 0.73318910E+3, 0.332E+3, 0.940E+2, + 0.29186000E+1, 0.00000000E+0, 0.41732300E+2, 0.332E+3, 0.101E+3, 0.29186000E+1, 0.00000000E+0, + 0.13414080E+3, 0.332E+3, 0.103E+3, 0.29186000E+1, 0.98650000E+0, 0.17128910E+3, 0.332E+3, + 0.104E+3, 0.29186000E+1, 0.98080000E+0, 0.13152340E+3, 0.332E+3, 0.105E+3, 0.29186000E+1, + 0.97060000E+0, 0.99176300E+2, 0.332E+3, 0.106E+3, 0.29186000E+1, 0.98680000E+0, 0.68932300E+2, + 0.332E+3, 0.107E+3, 0.29186000E+1, 0.99440000E+0, 0.50126900E+2, 0.332E+3, 0.108E+3, + 0.29186000E+1, 0.99250000E+0, 0.34364200E+2, 0.332E+3, 0.109E+3, 0.29186000E+1, 0.99820000E+0, + 0.19562310E+3, 0.332E+3, 0.111E+3, 0.29186000E+1, 0.96840000E+0, 0.30252130E+3, 0.332E+3, + 0.112E+3, 0.29186000E+1, 0.96280000E+0, 0.30755040E+3, 0.332E+3, 0.113E+3, 0.29186000E+1, + 0.96480000E+0, 0.24819650E+3, 0.332E+3, 0.114E+3, 0.29186000E+1, 0.95070000E+0, 0.20368650E+3, + 0.332E+3, 0.115E+3, 0.29186000E+1, 0.99470000E+0, 0.17232720E+3, 0.332E+3, 0.116E+3, + 0.29186000E+1, 0.99480000E+0, 0.14084920E+3, 0.332E+3, 0.117E+3, 0.29186000E+1, 0.99720000E+0, + 0.26984030E+3, 0.332E+3, 0.119E+3, 0.29186000E+1, 0.97670000E+0, 0.51153740E+3, 0.332E+3, + 0.120E+3, 0.29186000E+1, 0.98310000E+0, 0.27124750E+3, 0.332E+3, 0.121E+3, 0.29186000E+1, + 0.18627000E+1, 0.26180740E+3, 0.332E+3, 0.122E+3, 0.29186000E+1, 0.18299000E+1, 0.25651490E+3, + 0.332E+3, 0.123E+3, 0.29186000E+1, 0.19138000E+1, 0.25399050E+3, 0.332E+3, 0.124E+3, + 0.29186000E+1, 0.18269000E+1, 0.23426800E+3, 0.332E+3, 0.125E+3, 0.29186000E+1, 0.16406000E+1, + 0.21686750E+3, 0.332E+3, 0.126E+3, 0.29186000E+1, 0.16483000E+1, 0.20682100E+3, 0.332E+3, + 0.127E+3, 0.29186000E+1, 0.17149000E+1, 0.20214420E+3, 0.332E+3, 0.128E+3, 0.29186000E+1, + 0.17937000E+1, 0.19934300E+3, 0.332E+3, 0.129E+3, 0.29186000E+1, 0.95760000E+0, 0.18764810E+3, + 0.332E+3, 0.130E+3, 0.29186000E+1, 0.19419000E+1, 0.30545790E+3, 0.332E+3, 0.131E+3, + 0.29186000E+1, 0.96010000E+0, 0.26922150E+3, 0.332E+3, 0.132E+3, 0.29186000E+1, 0.94340000E+0, + 0.24171350E+3, 0.332E+3, 0.133E+3, 0.29186000E+1, 0.98890000E+0, 0.22085650E+3, 0.332E+3, + 0.134E+3, 0.29186000E+1, 0.99010000E+0, 0.19459280E+3, 0.332E+3, 0.135E+3, 0.29186000E+1, + 0.99740000E+0, 0.32210960E+3, 0.332E+3, 0.137E+3, 0.29186000E+1, 0.97380000E+0, 0.62192630E+3, + 0.332E+3, 0.138E+3, 0.29186000E+1, 0.98010000E+0, 0.47871320E+3, 0.332E+3, 0.139E+3, + 0.29186000E+1, 0.19153000E+1, 0.35847720E+3, 0.332E+3, 0.140E+3, 0.29186000E+1, 0.19355000E+1, + 0.36192950E+3, 0.332E+3, 0.141E+3, 0.29186000E+1, 0.19545000E+1, 0.33757750E+3, 0.332E+3, + 0.142E+3, 0.29186000E+1, 0.19420000E+1, 0.37742760E+3, 0.332E+3, 0.143E+3, 0.29186000E+1, + 0.16682000E+1, 0.29466340E+3, 0.332E+3, 0.144E+3, 0.29186000E+1, 0.18584000E+1, 0.27557070E+3, + 0.332E+3, 0.145E+3, 0.29186000E+1, 0.19003000E+1, 0.25584410E+3, 0.332E+3, 0.146E+3, + 0.29186000E+1, 0.18630000E+1, 0.24737280E+3, 0.332E+3, 0.147E+3, 0.29186000E+1, 0.96790000E+0, + 0.24521190E+3, 0.332E+3, 0.148E+3, 0.29186000E+1, 0.19539000E+1, 0.38734040E+3, 0.332E+3, + 0.149E+3, 0.29186000E+1, 0.96330000E+0, 0.35152010E+3, 0.332E+3, 0.150E+3, 0.29186000E+1, + 0.95140000E+0, 0.32980470E+3, 0.332E+3, 0.151E+3, 0.29186000E+1, 0.97490000E+0, 0.31226190E+3, + 0.332E+3, 0.152E+3, 0.29186000E+1, 0.98110000E+0, 0.28538200E+3, 0.332E+3, 0.153E+3, + 0.29186000E+1, 0.99680000E+0, 0.38205620E+3, 0.332E+3, 0.155E+3, 0.29186000E+1, 0.99090000E+0, + 0.80495990E+3, 0.332E+3, 0.156E+3, 0.29186000E+1, 0.97970000E+0, 0.60548420E+3, 0.332E+3, + 0.157E+3, 0.29186000E+1, 0.19373000E+1, 0.38513200E+3, 0.332E+3, 0.159E+3, 0.29186000E+1, + 0.29425000E+1, 0.37716470E+3, 0.332E+3, 0.160E+3, 0.29186000E+1, 0.29455000E+1, 0.36522950E+3, + 0.332E+3, 0.161E+3, 0.29186000E+1, 0.29413000E+1, 0.36689290E+3, 0.332E+3, 0.162E+3, + 0.29186000E+1, 0.29300000E+1, 0.35308810E+3, 0.332E+3, 0.163E+3, 0.29186000E+1, 0.18286000E+1, + 0.36924660E+3, 0.332E+3, 0.164E+3, 0.29186000E+1, 0.28732000E+1, 0.34685640E+3, 0.332E+3, + 0.165E+3, 0.29186000E+1, 0.29086000E+1, 0.35267810E+3, 0.332E+3, 0.166E+3, 0.29186000E+1, + 0.28965000E+1, 0.32934030E+3, 0.332E+3, 0.167E+3, 0.29186000E+1, 0.29242000E+1, 0.31999040E+3, + 0.332E+3, 0.168E+3, 0.29186000E+1, 0.29282000E+1, 0.31792410E+3, 0.332E+3, 0.169E+3, + 0.29186000E+1, 0.29246000E+1, 0.33414390E+3, 0.332E+3, 0.170E+3, 0.29186000E+1, 0.28482000E+1, + 0.30737050E+3, 0.332E+3, 0.171E+3, 0.29186000E+1, 0.29219000E+1, 0.41466360E+3, 0.332E+3, + 0.172E+3, 0.29186000E+1, 0.19254000E+1, 0.38533830E+3, 0.332E+3, 0.173E+3, 0.29186000E+1, + 0.19459000E+1, 0.35200450E+3, 0.332E+3, 0.174E+3, 0.29186000E+1, 0.19292000E+1, 0.35566060E+3, + 0.332E+3, 0.175E+3, 0.29186000E+1, 0.18104000E+1, 0.31228140E+3, 0.332E+3, 0.176E+3, + 0.29186000E+1, 0.18858000E+1, 0.29375400E+3, 0.332E+3, 0.177E+3, 0.29186000E+1, 0.18648000E+1, + 0.28052440E+3, 0.332E+3, 0.178E+3, 0.29186000E+1, 0.19188000E+1, 0.26802920E+3, 0.332E+3, + 0.179E+3, 0.29186000E+1, 0.98460000E+0, 0.25933470E+3, 0.332E+3, 0.180E+3, 0.29186000E+1, + 0.19896000E+1, 0.41573130E+3, 0.332E+3, 0.181E+3, 0.29186000E+1, 0.92670000E+0, 0.38005970E+3, + 0.332E+3, 0.182E+3, 0.29186000E+1, 0.93830000E+0, 0.36914810E+3, 0.332E+3, 0.183E+3, + 0.29186000E+1, 0.98200000E+0, 0.35933580E+3, 0.332E+3, 0.184E+3, 0.29186000E+1, 0.98150000E+0, + 0.33582630E+3, 0.332E+3, 0.185E+3, 0.29186000E+1, 0.99540000E+0, 0.43041160E+3, 0.332E+3, + 0.187E+3, 0.29186000E+1, 0.97050000E+0, 0.80257380E+3, 0.332E+3, 0.188E+3, 0.29186000E+1, + 0.96620000E+0, 0.45579310E+3, 0.332E+3, 0.189E+3, 0.29186000E+1, 0.29070000E+1, 0.52467090E+3, + 0.332E+3, 0.190E+3, 0.29186000E+1, 0.28844000E+1, 0.46916950E+3, 0.332E+3, 0.191E+3, + 0.29186000E+1, 0.28738000E+1, 0.41536370E+3, 0.332E+3, 0.192E+3, 0.29186000E+1, 0.28878000E+1, + 0.39979830E+3, 0.332E+3, 0.193E+3, 0.29186000E+1, 0.29095000E+1, 0.47845560E+3, 0.332E+3, + 0.194E+3, 0.29186000E+1, 0.19209000E+1, 0.11247080E+3, 0.332E+3, 0.204E+3, 0.29186000E+1, + 0.19697000E+1, 0.11046530E+3, 0.332E+3, 0.205E+3, 0.29186000E+1, 0.19441000E+1, 0.80908400E+2, + 0.332E+3, 0.206E+3, 0.29186000E+1, 0.19985000E+1, 0.64694600E+2, 0.332E+3, 0.207E+3, + 0.29186000E+1, 0.20143000E+1, 0.44161100E+2, 0.332E+3, 0.208E+3, 0.29186000E+1, 0.19887000E+1, + 0.19895420E+3, 0.332E+3, 0.212E+3, 0.29186000E+1, 0.19496000E+1, 0.24029350E+3, 0.332E+3, + 0.213E+3, 0.29186000E+1, 0.19311000E+1, 0.23095630E+3, 0.332E+3, 0.214E+3, 0.29186000E+1, + 0.19435000E+1, 0.20085430E+3, 0.332E+3, 0.215E+3, 0.29186000E+1, 0.20102000E+1, 0.16882630E+3, + 0.332E+3, 0.216E+3, 0.29186000E+1, 0.19903000E+1, 0.27842050E+3, 0.332E+3, 0.220E+3, + 0.29186000E+1, 0.19349000E+1, 0.26802690E+3, 0.332E+3, 0.221E+3, 0.29186000E+1, 0.28999000E+1, + 0.27133540E+3, 0.332E+3, 0.222E+3, 0.29186000E+1, 0.38675000E+1, 0.24816060E+3, 0.332E+3, + 0.223E+3, 0.29186000E+1, 0.29110000E+1, 0.18702850E+3, 0.332E+3, 0.224E+3, 0.29186000E+1, + 0.10619100E+2, 0.16012070E+3, 0.332E+3, 0.225E+3, 0.29186000E+1, 0.98849000E+1, 0.15714100E+3, + 0.332E+3, 0.226E+3, 0.29186000E+1, 0.91376000E+1, 0.18402720E+3, 0.332E+3, 0.227E+3, + 0.29186000E+1, 0.29263000E+1, 0.17152460E+3, 0.332E+3, 0.228E+3, 0.29186000E+1, 0.65458000E+1, + 0.24266150E+3, 0.332E+3, 0.231E+3, 0.29186000E+1, 0.19315000E+1, 0.25640090E+3, 0.332E+3, + 0.232E+3, 0.29186000E+1, 0.19447000E+1, 0.23540190E+3, 0.332E+3, 0.233E+3, 0.29186000E+1, + 0.19793000E+1, 0.21911610E+3, 0.332E+3, 0.234E+3, 0.29186000E+1, 0.19812000E+1, 0.33346480E+3, + 0.332E+3, 0.238E+3, 0.29186000E+1, 0.19143000E+1, 0.32171900E+3, 0.332E+3, 0.239E+3, + 0.29186000E+1, 0.28903000E+1, 0.32464310E+3, 0.332E+3, 0.240E+3, 0.29186000E+1, 0.39106000E+1, + 0.31369090E+3, 0.332E+3, 0.241E+3, 0.29186000E+1, 0.29225000E+1, 0.27753210E+3, 0.332E+3, + 0.242E+3, 0.29186000E+1, 0.11055600E+2, 0.24504710E+3, 0.332E+3, 0.243E+3, 0.29186000E+1, + 0.95402000E+1, 0.23155270E+3, 0.332E+3, 0.244E+3, 0.29186000E+1, 0.88895000E+1, 0.23553230E+3, + 0.332E+3, 0.245E+3, 0.29186000E+1, 0.29696000E+1, 0.24604900E+3, 0.332E+3, 0.246E+3, + 0.29186000E+1, 0.57095000E+1, 0.31261830E+3, 0.332E+3, 0.249E+3, 0.29186000E+1, 0.19378000E+1, + 0.33998590E+3, 0.332E+3, 0.250E+3, 0.29186000E+1, 0.19505000E+1, 0.32084600E+3, 0.332E+3, + 0.251E+3, 0.29186000E+1, 0.19523000E+1, 0.30976360E+3, 0.332E+3, 0.252E+3, 0.29186000E+1, + 0.19639000E+1, 0.40345600E+3, 0.332E+3, 0.256E+3, 0.29186000E+1, 0.18467000E+1, 0.41889570E+3, + 0.332E+3, 0.257E+3, 0.29186000E+1, 0.29175000E+1, 0.31096060E+3, 0.332E+3, 0.272E+3, + 0.29186000E+1, 0.38840000E+1, 0.32438890E+3, 0.332E+3, 0.273E+3, 0.29186000E+1, 0.28988000E+1, + 0.30155580E+3, 0.332E+3, 0.274E+3, 0.29186000E+1, 0.10915300E+2, 0.27396610E+3, 0.332E+3, + 0.275E+3, 0.29186000E+1, 0.98054000E+1, 0.25778980E+3, 0.332E+3, 0.276E+3, 0.29186000E+1, + 0.91527000E+1, 0.26244250E+3, 0.332E+3, 0.277E+3, 0.29186000E+1, 0.29424000E+1, 0.27611510E+3, + 0.332E+3, 0.278E+3, 0.29186000E+1, 0.66669000E+1, 0.33401410E+3, 0.332E+3, 0.281E+3, + 0.29186000E+1, 0.19302000E+1, 0.35322530E+3, 0.332E+3, 0.282E+3, 0.29186000E+1, 0.19356000E+1, + 0.36036290E+3, 0.332E+3, 0.283E+3, 0.29186000E+1, 0.19655000E+1, 0.35787940E+3, 0.332E+3, + 0.284E+3, 0.29186000E+1, 0.19639000E+1, 0.44425160E+3, 0.332E+3, 0.288E+3, 0.29186000E+1, + 0.18075000E+1, 0.84139800E+2, 0.332E+3, 0.305E+3, 0.29186000E+1, 0.29128000E+1, 0.75651400E+2, + 0.332E+3, 0.306E+3, 0.29186000E+1, 0.29987000E+1, 0.56913400E+2, 0.332E+3, 0.307E+3, + 0.29186000E+1, 0.29903000E+1, 0.18779330E+3, 0.332E+3, 0.313E+3, 0.29186000E+1, 0.29146000E+1, + 0.22491460E+3, 0.332E+3, 0.314E+3, 0.29186000E+1, 0.29407000E+1, 0.18642580E+3, 0.332E+3, + 0.315E+3, 0.29186000E+1, 0.29859000E+1, 0.16395940E+3, 0.332E+3, 0.327E+3, 0.29186000E+1, + 0.77785000E+1, 0.17981780E+3, 0.332E+3, 0.328E+3, 0.29186000E+1, 0.62918000E+1, 0.19898010E+3, + 0.332E+3, 0.331E+3, 0.29186000E+1, 0.29233000E+1, 0.22994980E+3, 0.332E+3, 0.332E+3, + 0.29186000E+1, 0.29186000E+1, 0.25814400E+2, 0.333E+3, 0.100E+1, 0.29709000E+1, 0.91180000E+0, + 0.17190000E+2, 0.333E+3, 0.200E+1, 0.29709000E+1, 0.00000000E+0, 0.37309010E+3, 0.333E+3, + 0.300E+1, 0.29709000E+1, 0.00000000E+0, 0.22360990E+3, 0.333E+3, 0.400E+1, 0.29709000E+1, + 0.00000000E+0, 0.15340550E+3, 0.333E+3, 0.500E+1, 0.29709000E+1, 0.00000000E+0, 0.10484620E+3, + 0.333E+3, 0.600E+1, 0.29709000E+1, 0.00000000E+0, 0.73824600E+2, 0.333E+3, 0.700E+1, + 0.29709000E+1, 0.00000000E+0, 0.56105700E+2, 0.333E+3, 0.800E+1, 0.29709000E+1, 0.00000000E+0, + 0.42601300E+2, 0.333E+3, 0.900E+1, 0.29709000E+1, 0.00000000E+0, 0.32802100E+2, 0.333E+3, + 0.100E+2, 0.29709000E+1, 0.00000000E+0, 0.44701790E+3, 0.333E+3, 0.110E+2, 0.29709000E+1, + 0.00000000E+0, 0.35391780E+3, 0.333E+3, 0.120E+2, 0.29709000E+1, 0.00000000E+0, 0.32966240E+3, + 0.333E+3, 0.130E+2, 0.29709000E+1, 0.00000000E+0, 0.26315950E+3, 0.333E+3, 0.140E+2, + 0.29709000E+1, 0.00000000E+0, 0.20724190E+3, 0.333E+3, 0.150E+2, 0.29709000E+1, 0.00000000E+0, + 0.17294560E+3, 0.333E+3, 0.160E+2, 0.29709000E+1, 0.00000000E+0, 0.14192450E+3, 0.333E+3, + 0.170E+2, 0.29709000E+1, 0.00000000E+0, 0.11649640E+3, 0.333E+3, 0.180E+2, 0.29709000E+1, + 0.00000000E+0, 0.72861950E+3, 0.333E+3, 0.190E+2, 0.29709000E+1, 0.00000000E+0, 0.61467050E+3, + 0.333E+3, 0.200E+2, 0.29709000E+1, 0.00000000E+0, 0.51029120E+3, 0.333E+3, 0.210E+2, + 0.29709000E+1, 0.00000000E+0, 0.49492760E+3, 0.333E+3, 0.220E+2, 0.29709000E+1, 0.00000000E+0, + 0.45438220E+3, 0.333E+3, 0.230E+2, 0.29709000E+1, 0.00000000E+0, 0.35797570E+3, 0.333E+3, + 0.240E+2, 0.29709000E+1, 0.00000000E+0, 0.39264080E+3, 0.333E+3, 0.250E+2, 0.29709000E+1, + 0.00000000E+0, 0.30830750E+3, 0.333E+3, 0.260E+2, 0.29709000E+1, 0.00000000E+0, 0.32864030E+3, + 0.333E+3, 0.270E+2, 0.29709000E+1, 0.00000000E+0, 0.33766070E+3, 0.333E+3, 0.280E+2, + 0.29709000E+1, 0.00000000E+0, 0.25878300E+3, 0.333E+3, 0.290E+2, 0.29709000E+1, 0.00000000E+0, + 0.26791080E+3, 0.333E+3, 0.300E+2, 0.29709000E+1, 0.00000000E+0, 0.31682010E+3, 0.333E+3, + 0.310E+2, 0.29709000E+1, 0.00000000E+0, 0.28218280E+3, 0.333E+3, 0.320E+2, 0.29709000E+1, + 0.00000000E+0, 0.24267360E+3, 0.333E+3, 0.330E+2, 0.29709000E+1, 0.00000000E+0, 0.21875310E+3, + 0.333E+3, 0.340E+2, 0.29709000E+1, 0.00000000E+0, 0.19224210E+3, 0.333E+3, 0.350E+2, + 0.29709000E+1, 0.00000000E+0, 0.16775050E+3, 0.333E+3, 0.360E+2, 0.29709000E+1, 0.00000000E+0, + 0.81822470E+3, 0.333E+3, 0.370E+2, 0.29709000E+1, 0.00000000E+0, 0.73174620E+3, 0.333E+3, + 0.380E+2, 0.29709000E+1, 0.00000000E+0, 0.64647740E+3, 0.333E+3, 0.390E+2, 0.29709000E+1, + 0.00000000E+0, 0.58401600E+3, 0.333E+3, 0.400E+2, 0.29709000E+1, 0.00000000E+0, 0.53429150E+3, + 0.333E+3, 0.410E+2, 0.29709000E+1, 0.00000000E+0, 0.41465090E+3, 0.333E+3, 0.420E+2, + 0.29709000E+1, 0.00000000E+0, 0.46175770E+3, 0.333E+3, 0.430E+2, 0.29709000E+1, 0.00000000E+0, + 0.35373830E+3, 0.333E+3, 0.440E+2, 0.29709000E+1, 0.00000000E+0, 0.38672900E+3, 0.333E+3, + 0.450E+2, 0.29709000E+1, 0.00000000E+0, 0.35928420E+3, 0.333E+3, 0.460E+2, 0.29709000E+1, + 0.00000000E+0, 0.29901370E+3, 0.333E+3, 0.470E+2, 0.29709000E+1, 0.00000000E+0, 0.31728800E+3, + 0.333E+3, 0.480E+2, 0.29709000E+1, 0.00000000E+0, 0.39591570E+3, 0.333E+3, 0.490E+2, + 0.29709000E+1, 0.00000000E+0, 0.36910130E+3, 0.333E+3, 0.500E+2, 0.29709000E+1, 0.00000000E+0, + 0.33139460E+3, 0.333E+3, 0.510E+2, 0.29709000E+1, 0.00000000E+0, 0.30877390E+3, 0.333E+3, + 0.520E+2, 0.29709000E+1, 0.00000000E+0, 0.28035770E+3, 0.333E+3, 0.530E+2, 0.29709000E+1, + 0.00000000E+0, 0.25296780E+3, 0.333E+3, 0.540E+2, 0.29709000E+1, 0.00000000E+0, 0.99762710E+3, + 0.333E+3, 0.550E+2, 0.29709000E+1, 0.00000000E+0, 0.93038380E+3, 0.333E+3, 0.560E+2, + 0.29709000E+1, 0.00000000E+0, 0.82434880E+3, 0.333E+3, 0.570E+2, 0.29709000E+1, 0.00000000E+0, + 0.39090330E+3, 0.333E+3, 0.580E+2, 0.29709000E+1, 0.27991000E+1, 0.82640440E+3, 0.333E+3, + 0.590E+2, 0.29709000E+1, 0.00000000E+0, 0.79461360E+3, 0.333E+3, 0.600E+2, 0.29709000E+1, + 0.00000000E+0, 0.77497180E+3, 0.333E+3, 0.610E+2, 0.29709000E+1, 0.00000000E+0, 0.75687850E+3, + 0.333E+3, 0.620E+2, 0.29709000E+1, 0.00000000E+0, 0.74084790E+3, 0.333E+3, 0.630E+2, + 0.29709000E+1, 0.00000000E+0, 0.58791190E+3, 0.333E+3, 0.640E+2, 0.29709000E+1, 0.00000000E+0, + 0.65318150E+3, 0.333E+3, 0.650E+2, 0.29709000E+1, 0.00000000E+0, 0.63103160E+3, 0.333E+3, + 0.660E+2, 0.29709000E+1, 0.00000000E+0, 0.66958290E+3, 0.333E+3, 0.670E+2, 0.29709000E+1, + 0.00000000E+0, 0.65552070E+3, 0.333E+3, 0.680E+2, 0.29709000E+1, 0.00000000E+0, 0.64291690E+3, + 0.333E+3, 0.690E+2, 0.29709000E+1, 0.00000000E+0, 0.63515750E+3, 0.333E+3, 0.700E+2, + 0.29709000E+1, 0.00000000E+0, 0.53851890E+3, 0.333E+3, 0.710E+2, 0.29709000E+1, 0.00000000E+0, + 0.53425460E+3, 0.333E+3, 0.720E+2, 0.29709000E+1, 0.00000000E+0, 0.48990920E+3, 0.333E+3, + 0.730E+2, 0.29709000E+1, 0.00000000E+0, 0.41509390E+3, 0.333E+3, 0.740E+2, 0.29709000E+1, + 0.00000000E+0, 0.42306850E+3, 0.333E+3, 0.750E+2, 0.29709000E+1, 0.00000000E+0, 0.38489200E+3, + 0.333E+3, 0.760E+2, 0.29709000E+1, 0.00000000E+0, 0.35353050E+3, 0.333E+3, 0.770E+2, + 0.29709000E+1, 0.00000000E+0, 0.29442160E+3, 0.333E+3, 0.780E+2, 0.29709000E+1, 0.00000000E+0, + 0.27532990E+3, 0.333E+3, 0.790E+2, 0.29709000E+1, 0.00000000E+0, 0.28371810E+3, 0.333E+3, + 0.800E+2, 0.29709000E+1, 0.00000000E+0, 0.40709580E+3, 0.333E+3, 0.810E+2, 0.29709000E+1, + 0.00000000E+0, 0.40053490E+3, 0.333E+3, 0.820E+2, 0.29709000E+1, 0.00000000E+0, 0.37051780E+3, + 0.333E+3, 0.830E+2, 0.29709000E+1, 0.00000000E+0, 0.35469940E+3, 0.333E+3, 0.840E+2, + 0.29709000E+1, 0.00000000E+0, 0.32871350E+3, 0.333E+3, 0.850E+2, 0.29709000E+1, 0.00000000E+0, + 0.30233200E+3, 0.333E+3, 0.860E+2, 0.29709000E+1, 0.00000000E+0, 0.94844440E+3, 0.333E+3, + 0.870E+2, 0.29709000E+1, 0.00000000E+0, 0.92407530E+3, 0.333E+3, 0.880E+2, 0.29709000E+1, + 0.00000000E+0, 0.82301470E+3, 0.333E+3, 0.890E+2, 0.29709000E+1, 0.00000000E+0, 0.74585710E+3, + 0.333E+3, 0.900E+2, 0.29709000E+1, 0.00000000E+0, 0.73724570E+3, 0.333E+3, 0.910E+2, + 0.29709000E+1, 0.00000000E+0, 0.71393940E+3, 0.333E+3, 0.920E+2, 0.29709000E+1, 0.00000000E+0, + 0.73098970E+3, 0.333E+3, 0.930E+2, 0.29709000E+1, 0.00000000E+0, 0.70857740E+3, 0.333E+3, + 0.940E+2, 0.29709000E+1, 0.00000000E+0, 0.41243400E+2, 0.333E+3, 0.101E+3, 0.29709000E+1, + 0.00000000E+0, 0.13030340E+3, 0.333E+3, 0.103E+3, 0.29709000E+1, 0.98650000E+0, 0.16682950E+3, + 0.333E+3, 0.104E+3, 0.29709000E+1, 0.98080000E+0, 0.12946150E+3, 0.333E+3, 0.105E+3, + 0.29709000E+1, 0.97060000E+0, 0.98293000E+2, 0.333E+3, 0.106E+3, 0.29709000E+1, 0.98680000E+0, + 0.68826400E+2, 0.333E+3, 0.107E+3, 0.29709000E+1, 0.99440000E+0, 0.50355500E+2, 0.333E+3, + 0.108E+3, 0.29709000E+1, 0.99250000E+0, 0.34778500E+2, 0.333E+3, 0.109E+3, 0.29709000E+1, + 0.99820000E+0, 0.18967700E+3, 0.333E+3, 0.111E+3, 0.29709000E+1, 0.96840000E+0, 0.29304400E+3, + 0.333E+3, 0.112E+3, 0.29709000E+1, 0.96280000E+0, 0.29946280E+3, 0.333E+3, 0.113E+3, + 0.29709000E+1, 0.96480000E+0, 0.24364100E+3, 0.333E+3, 0.114E+3, 0.29709000E+1, 0.95070000E+0, + 0.20121190E+3, 0.333E+3, 0.115E+3, 0.29709000E+1, 0.99470000E+0, 0.17100300E+3, 0.333E+3, + 0.116E+3, 0.29709000E+1, 0.99480000E+0, 0.14042820E+3, 0.333E+3, 0.117E+3, 0.29709000E+1, + 0.99720000E+0, 0.26315470E+3, 0.333E+3, 0.119E+3, 0.29709000E+1, 0.97670000E+0, 0.49217040E+3, + 0.333E+3, 0.120E+3, 0.29709000E+1, 0.98310000E+0, 0.26602940E+3, 0.333E+3, 0.121E+3, + 0.29709000E+1, 0.18627000E+1, 0.25687630E+3, 0.333E+3, 0.122E+3, 0.29709000E+1, 0.18299000E+1, + 0.25165870E+3, 0.333E+3, 0.123E+3, 0.29709000E+1, 0.19138000E+1, 0.24899550E+3, 0.333E+3, + 0.124E+3, 0.29709000E+1, 0.18269000E+1, 0.23046590E+3, 0.333E+3, 0.125E+3, 0.29709000E+1, + 0.16406000E+1, 0.21360980E+3, 0.333E+3, 0.126E+3, 0.29709000E+1, 0.16483000E+1, 0.20373690E+3, + 0.333E+3, 0.127E+3, 0.29709000E+1, 0.17149000E+1, 0.19906950E+3, 0.333E+3, 0.128E+3, + 0.29709000E+1, 0.17937000E+1, 0.19575950E+3, 0.333E+3, 0.129E+3, 0.29709000E+1, 0.95760000E+0, + 0.18520600E+3, 0.333E+3, 0.130E+3, 0.29709000E+1, 0.19419000E+1, 0.29830600E+3, 0.333E+3, + 0.131E+3, 0.29709000E+1, 0.96010000E+0, 0.26455660E+3, 0.333E+3, 0.132E+3, 0.29709000E+1, + 0.94340000E+0, 0.23866010E+3, 0.333E+3, 0.133E+3, 0.29709000E+1, 0.98890000E+0, 0.21881490E+3, + 0.333E+3, 0.134E+3, 0.29709000E+1, 0.99010000E+0, 0.19353150E+3, 0.333E+3, 0.135E+3, + 0.29709000E+1, 0.99740000E+0, 0.31465180E+3, 0.333E+3, 0.137E+3, 0.29709000E+1, 0.97380000E+0, + 0.59821020E+3, 0.333E+3, 0.138E+3, 0.29709000E+1, 0.98010000E+0, 0.46492540E+3, 0.333E+3, + 0.139E+3, 0.29709000E+1, 0.19153000E+1, 0.35156410E+3, 0.333E+3, 0.140E+3, 0.29709000E+1, + 0.19355000E+1, 0.35489700E+3, 0.333E+3, 0.141E+3, 0.29709000E+1, 0.19545000E+1, 0.33152300E+3, + 0.333E+3, 0.142E+3, 0.29709000E+1, 0.19420000E+1, 0.36896070E+3, 0.333E+3, 0.143E+3, + 0.29709000E+1, 0.16682000E+1, 0.29041810E+3, 0.333E+3, 0.144E+3, 0.29709000E+1, 0.18584000E+1, + 0.27173870E+3, 0.333E+3, 0.145E+3, 0.29709000E+1, 0.19003000E+1, 0.25249180E+3, 0.333E+3, + 0.146E+3, 0.29709000E+1, 0.18630000E+1, 0.24399260E+3, 0.333E+3, 0.147E+3, 0.29709000E+1, + 0.96790000E+0, 0.24246050E+3, 0.333E+3, 0.148E+3, 0.29709000E+1, 0.19539000E+1, 0.37845390E+3, + 0.333E+3, 0.149E+3, 0.29709000E+1, 0.96330000E+0, 0.34521760E+3, 0.333E+3, 0.150E+3, + 0.29709000E+1, 0.95140000E+0, 0.32509990E+3, 0.333E+3, 0.151E+3, 0.29709000E+1, 0.97490000E+0, + 0.30863590E+3, 0.333E+3, 0.152E+3, 0.29709000E+1, 0.98110000E+0, 0.28298000E+3, 0.333E+3, + 0.153E+3, 0.29709000E+1, 0.99680000E+0, 0.37467690E+3, 0.333E+3, 0.155E+3, 0.29709000E+1, + 0.99090000E+0, 0.77312930E+3, 0.333E+3, 0.156E+3, 0.29709000E+1, 0.97970000E+0, 0.58768050E+3, + 0.333E+3, 0.157E+3, 0.29709000E+1, 0.19373000E+1, 0.37925720E+3, 0.333E+3, 0.159E+3, + 0.29709000E+1, 0.29425000E+1, 0.37143070E+3, 0.333E+3, 0.160E+3, 0.29709000E+1, 0.29455000E+1, + 0.35977520E+3, 0.333E+3, 0.161E+3, 0.29709000E+1, 0.29413000E+1, 0.36114910E+3, 0.333E+3, + 0.162E+3, 0.29709000E+1, 0.29300000E+1, 0.34673650E+3, 0.333E+3, 0.163E+3, 0.29709000E+1, + 0.18286000E+1, 0.36334580E+3, 0.333E+3, 0.164E+3, 0.29709000E+1, 0.28732000E+1, 0.34154120E+3, + 0.333E+3, 0.165E+3, 0.29709000E+1, 0.29086000E+1, 0.34682760E+3, 0.333E+3, 0.166E+3, + 0.29709000E+1, 0.28965000E+1, 0.32449690E+3, 0.333E+3, 0.167E+3, 0.29709000E+1, 0.29242000E+1, + 0.31536050E+3, 0.333E+3, 0.168E+3, 0.29709000E+1, 0.29282000E+1, 0.31325730E+3, 0.333E+3, + 0.169E+3, 0.29709000E+1, 0.29246000E+1, 0.32883440E+3, 0.333E+3, 0.170E+3, 0.29709000E+1, + 0.28482000E+1, 0.30296350E+3, 0.333E+3, 0.171E+3, 0.29709000E+1, 0.29219000E+1, 0.40527710E+3, + 0.333E+3, 0.172E+3, 0.29709000E+1, 0.19254000E+1, 0.37777130E+3, 0.333E+3, 0.173E+3, + 0.29709000E+1, 0.19459000E+1, 0.34618800E+3, 0.333E+3, 0.174E+3, 0.29709000E+1, 0.19292000E+1, + 0.34883500E+3, 0.333E+3, 0.175E+3, 0.29709000E+1, 0.18104000E+1, 0.30849820E+3, 0.333E+3, + 0.176E+3, 0.29709000E+1, 0.18858000E+1, 0.29054470E+3, 0.333E+3, 0.177E+3, 0.29709000E+1, + 0.18648000E+1, 0.27766310E+3, 0.333E+3, 0.178E+3, 0.29709000E+1, 0.19188000E+1, 0.26530450E+3, + 0.333E+3, 0.179E+3, 0.29709000E+1, 0.98460000E+0, 0.25731840E+3, 0.333E+3, 0.180E+3, + 0.29709000E+1, 0.19896000E+1, 0.40678760E+3, 0.333E+3, 0.181E+3, 0.29709000E+1, 0.92670000E+0, + 0.37370420E+3, 0.333E+3, 0.182E+3, 0.29709000E+1, 0.93830000E+0, 0.36395410E+3, 0.333E+3, + 0.183E+3, 0.29709000E+1, 0.98200000E+0, 0.35500400E+3, 0.333E+3, 0.184E+3, 0.29709000E+1, + 0.98150000E+0, 0.33273420E+3, 0.333E+3, 0.185E+3, 0.29709000E+1, 0.99540000E+0, 0.42221560E+3, + 0.333E+3, 0.187E+3, 0.29709000E+1, 0.97050000E+0, 0.77316810E+3, 0.333E+3, 0.188E+3, + 0.29709000E+1, 0.96620000E+0, 0.44875130E+3, 0.333E+3, 0.189E+3, 0.29709000E+1, 0.29070000E+1, + 0.51446500E+3, 0.333E+3, 0.190E+3, 0.29709000E+1, 0.28844000E+1, 0.46088700E+3, 0.333E+3, + 0.191E+3, 0.29709000E+1, 0.28738000E+1, 0.40932390E+3, 0.333E+3, 0.192E+3, 0.29709000E+1, + 0.28878000E+1, 0.39428590E+3, 0.333E+3, 0.193E+3, 0.29709000E+1, 0.29095000E+1, 0.46765480E+3, + 0.333E+3, 0.194E+3, 0.29709000E+1, 0.19209000E+1, 0.11074050E+3, 0.333E+3, 0.204E+3, + 0.29709000E+1, 0.19697000E+1, 0.10903310E+3, 0.333E+3, 0.205E+3, 0.29709000E+1, 0.19441000E+1, + 0.80490200E+2, 0.333E+3, 0.206E+3, 0.29709000E+1, 0.19985000E+1, 0.64644600E+2, 0.333E+3, + 0.207E+3, 0.29709000E+1, 0.20143000E+1, 0.44441700E+2, 0.333E+3, 0.208E+3, 0.29709000E+1, + 0.19887000E+1, 0.19481980E+3, 0.333E+3, 0.212E+3, 0.29709000E+1, 0.19496000E+1, 0.23520410E+3, + 0.333E+3, 0.213E+3, 0.29709000E+1, 0.19311000E+1, 0.22699490E+3, 0.333E+3, 0.214E+3, + 0.29709000E+1, 0.19435000E+1, 0.19834020E+3, 0.333E+3, 0.215E+3, 0.29709000E+1, 0.20102000E+1, + 0.16754910E+3, 0.333E+3, 0.216E+3, 0.29709000E+1, 0.19903000E+1, 0.27279590E+3, 0.333E+3, + 0.220E+3, 0.29709000E+1, 0.19349000E+1, 0.26344960E+3, 0.333E+3, 0.221E+3, 0.29709000E+1, + 0.28999000E+1, 0.26677170E+3, 0.333E+3, 0.222E+3, 0.29709000E+1, 0.38675000E+1, 0.24398790E+3, + 0.333E+3, 0.223E+3, 0.29709000E+1, 0.29110000E+1, 0.18493070E+3, 0.333E+3, 0.224E+3, + 0.29709000E+1, 0.10619100E+2, 0.15885780E+3, 0.333E+3, 0.225E+3, 0.29709000E+1, 0.98849000E+1, + 0.15583590E+3, 0.333E+3, 0.226E+3, 0.29709000E+1, 0.91376000E+1, 0.18150050E+3, 0.333E+3, + 0.227E+3, 0.29709000E+1, 0.29263000E+1, 0.16942270E+3, 0.333E+3, 0.228E+3, 0.29709000E+1, + 0.65458000E+1, 0.23833640E+3, 0.333E+3, 0.231E+3, 0.29709000E+1, 0.19315000E+1, 0.25222610E+3, + 0.333E+3, 0.232E+3, 0.29709000E+1, 0.19447000E+1, 0.23257440E+3, 0.333E+3, 0.233E+3, + 0.29709000E+1, 0.19793000E+1, 0.21711610E+3, 0.333E+3, 0.234E+3, 0.29709000E+1, 0.19812000E+1, + 0.32696240E+3, 0.333E+3, 0.238E+3, 0.29709000E+1, 0.19143000E+1, 0.31671890E+3, 0.333E+3, + 0.239E+3, 0.29709000E+1, 0.28903000E+1, 0.31999160E+3, 0.333E+3, 0.240E+3, 0.29709000E+1, + 0.39106000E+1, 0.30916430E+3, 0.333E+3, 0.241E+3, 0.29709000E+1, 0.29225000E+1, 0.27453760E+3, + 0.333E+3, 0.242E+3, 0.29709000E+1, 0.11055600E+2, 0.24311650E+3, 0.333E+3, 0.243E+3, + 0.29709000E+1, 0.95402000E+1, 0.22998060E+3, 0.333E+3, 0.244E+3, 0.29709000E+1, 0.88895000E+1, + 0.23320160E+3, 0.333E+3, 0.245E+3, 0.29709000E+1, 0.29696000E+1, 0.24333990E+3, 0.333E+3, + 0.246E+3, 0.29709000E+1, 0.57095000E+1, 0.30738320E+3, 0.333E+3, 0.249E+3, 0.29709000E+1, + 0.19378000E+1, 0.33424830E+3, 0.333E+3, 0.250E+3, 0.29709000E+1, 0.19505000E+1, 0.31655690E+3, + 0.333E+3, 0.251E+3, 0.29709000E+1, 0.19523000E+1, 0.30627350E+3, 0.333E+3, 0.252E+3, + 0.29709000E+1, 0.19639000E+1, 0.39613570E+3, 0.333E+3, 0.256E+3, 0.29709000E+1, 0.18467000E+1, + 0.41206100E+3, 0.333E+3, 0.257E+3, 0.29709000E+1, 0.29175000E+1, 0.30703930E+3, 0.333E+3, + 0.272E+3, 0.29709000E+1, 0.38840000E+1, 0.31988160E+3, 0.333E+3, 0.273E+3, 0.29709000E+1, + 0.28988000E+1, 0.29837090E+3, 0.333E+3, 0.274E+3, 0.29709000E+1, 0.10915300E+2, 0.27179960E+3, + 0.333E+3, 0.275E+3, 0.29709000E+1, 0.98054000E+1, 0.25630050E+3, 0.333E+3, 0.276E+3, + 0.29709000E+1, 0.91527000E+1, 0.26023930E+3, 0.333E+3, 0.277E+3, 0.29709000E+1, 0.29424000E+1, + 0.27366690E+3, 0.333E+3, 0.278E+3, 0.29709000E+1, 0.66669000E+1, 0.32926130E+3, 0.333E+3, + 0.281E+3, 0.29709000E+1, 0.19302000E+1, 0.34820710E+3, 0.333E+3, 0.282E+3, 0.29709000E+1, + 0.19356000E+1, 0.35568970E+3, 0.333E+3, 0.283E+3, 0.29709000E+1, 0.19655000E+1, 0.35372780E+3, + 0.333E+3, 0.284E+3, 0.29709000E+1, 0.19639000E+1, 0.43636490E+3, 0.333E+3, 0.288E+3, + 0.29709000E+1, 0.18075000E+1, 0.83603600E+2, 0.333E+3, 0.305E+3, 0.29709000E+1, 0.29128000E+1, + 0.75280800E+2, 0.333E+3, 0.306E+3, 0.29709000E+1, 0.29987000E+1, 0.56939800E+2, 0.333E+3, + 0.307E+3, 0.29709000E+1, 0.29903000E+1, 0.18498860E+3, 0.333E+3, 0.313E+3, 0.29709000E+1, + 0.29146000E+1, 0.22091650E+3, 0.333E+3, 0.314E+3, 0.29709000E+1, 0.29407000E+1, 0.18443640E+3, + 0.333E+3, 0.315E+3, 0.29709000E+1, 0.29859000E+1, 0.16228780E+3, 0.333E+3, 0.327E+3, + 0.29709000E+1, 0.77785000E+1, 0.17705570E+3, 0.333E+3, 0.328E+3, 0.29709000E+1, 0.62918000E+1, + 0.19651790E+3, 0.333E+3, 0.331E+3, 0.29709000E+1, 0.29233000E+1, 0.22680190E+3, 0.333E+3, + 0.332E+3, 0.29709000E+1, 0.29186000E+1, 0.22428510E+3, 0.333E+3, 0.333E+3, 0.29709000E+1, + 0.29709000E+1, 0.30319300E+2, 0.349E+3, 0.100E+1, 0.29353000E+1, 0.91180000E+0, 0.20340200E+2, + 0.349E+3, 0.200E+1, 0.29353000E+1, 0.00000000E+0, 0.44469780E+3, 0.349E+3, 0.300E+1, + 0.29353000E+1, 0.00000000E+0, 0.26404390E+3, 0.349E+3, 0.400E+1, 0.29353000E+1, 0.00000000E+0, + 0.18045680E+3, 0.349E+3, 0.500E+1, 0.29353000E+1, 0.00000000E+0, 0.12327050E+3, 0.349E+3, + 0.600E+1, 0.29353000E+1, 0.00000000E+0, 0.86956900E+2, 0.349E+3, 0.700E+1, 0.29353000E+1, + 0.00000000E+0, 0.66274100E+2, 0.349E+3, 0.800E+1, 0.29353000E+1, 0.00000000E+0, 0.50515600E+2, + 0.349E+3, 0.900E+1, 0.29353000E+1, 0.00000000E+0, 0.39067400E+2, 0.349E+3, 0.100E+2, + 0.29353000E+1, 0.00000000E+0, 0.53285380E+3, 0.349E+3, 0.110E+2, 0.29353000E+1, 0.00000000E+0, + 0.41885670E+3, 0.349E+3, 0.120E+2, 0.29353000E+1, 0.00000000E+0, 0.38906980E+3, 0.349E+3, + 0.130E+2, 0.29353000E+1, 0.00000000E+0, 0.30967790E+3, 0.349E+3, 0.140E+2, 0.29353000E+1, + 0.00000000E+0, 0.24351060E+3, 0.349E+3, 0.150E+2, 0.29353000E+1, 0.00000000E+0, 0.20320970E+3, + 0.349E+3, 0.160E+2, 0.29353000E+1, 0.00000000E+0, 0.16688670E+3, 0.349E+3, 0.170E+2, + 0.29353000E+1, 0.00000000E+0, 0.13720100E+3, 0.349E+3, 0.180E+2, 0.29353000E+1, 0.00000000E+0, + 0.86995980E+3, 0.349E+3, 0.190E+2, 0.29353000E+1, 0.00000000E+0, 0.72995940E+3, 0.349E+3, + 0.200E+2, 0.29353000E+1, 0.00000000E+0, 0.60530470E+3, 0.349E+3, 0.210E+2, 0.29353000E+1, + 0.00000000E+0, 0.58657520E+3, 0.349E+3, 0.220E+2, 0.29353000E+1, 0.00000000E+0, 0.53826720E+3, + 0.349E+3, 0.230E+2, 0.29353000E+1, 0.00000000E+0, 0.42440160E+3, 0.349E+3, 0.240E+2, + 0.29353000E+1, 0.00000000E+0, 0.46484110E+3, 0.349E+3, 0.250E+2, 0.29353000E+1, 0.00000000E+0, + 0.36531290E+3, 0.349E+3, 0.260E+2, 0.29353000E+1, 0.00000000E+0, 0.38862700E+3, 0.349E+3, + 0.270E+2, 0.29353000E+1, 0.00000000E+0, 0.39951060E+3, 0.349E+3, 0.280E+2, 0.29353000E+1, + 0.00000000E+0, 0.30659770E+3, 0.349E+3, 0.290E+2, 0.29353000E+1, 0.00000000E+0, 0.31653820E+3, + 0.349E+3, 0.300E+2, 0.29353000E+1, 0.00000000E+0, 0.37394790E+3, 0.349E+3, 0.310E+2, + 0.29353000E+1, 0.00000000E+0, 0.33229320E+3, 0.349E+3, 0.320E+2, 0.29353000E+1, 0.00000000E+0, + 0.28535990E+3, 0.349E+3, 0.330E+2, 0.29353000E+1, 0.00000000E+0, 0.25714220E+3, 0.349E+3, + 0.340E+2, 0.29353000E+1, 0.00000000E+0, 0.22602240E+3, 0.349E+3, 0.350E+2, 0.29353000E+1, + 0.00000000E+0, 0.19737620E+3, 0.349E+3, 0.360E+2, 0.29353000E+1, 0.00000000E+0, 0.97661940E+3, + 0.349E+3, 0.370E+2, 0.29353000E+1, 0.00000000E+0, 0.86927450E+3, 0.349E+3, 0.380E+2, + 0.29353000E+1, 0.00000000E+0, 0.76640590E+3, 0.349E+3, 0.390E+2, 0.29353000E+1, 0.00000000E+0, + 0.69159970E+3, 0.349E+3, 0.400E+2, 0.29353000E+1, 0.00000000E+0, 0.63235800E+3, 0.349E+3, + 0.410E+2, 0.29353000E+1, 0.00000000E+0, 0.49057200E+3, 0.349E+3, 0.420E+2, 0.29353000E+1, + 0.00000000E+0, 0.54639300E+3, 0.349E+3, 0.430E+2, 0.29353000E+1, 0.00000000E+0, 0.41848510E+3, + 0.349E+3, 0.440E+2, 0.29353000E+1, 0.00000000E+0, 0.45727800E+3, 0.349E+3, 0.450E+2, + 0.29353000E+1, 0.00000000E+0, 0.42477830E+3, 0.349E+3, 0.460E+2, 0.29353000E+1, 0.00000000E+0, + 0.35412210E+3, 0.349E+3, 0.470E+2, 0.29353000E+1, 0.00000000E+0, 0.37514860E+3, 0.349E+3, + 0.480E+2, 0.29353000E+1, 0.00000000E+0, 0.46825210E+3, 0.349E+3, 0.490E+2, 0.29353000E+1, + 0.00000000E+0, 0.43562520E+3, 0.349E+3, 0.500E+2, 0.29353000E+1, 0.00000000E+0, 0.39051070E+3, + 0.349E+3, 0.510E+2, 0.29353000E+1, 0.00000000E+0, 0.36359740E+3, 0.349E+3, 0.520E+2, + 0.29353000E+1, 0.00000000E+0, 0.33001060E+3, 0.349E+3, 0.530E+2, 0.29353000E+1, 0.00000000E+0, + 0.29777960E+3, 0.349E+3, 0.540E+2, 0.29353000E+1, 0.00000000E+0, 0.11900927E+4, 0.349E+3, + 0.550E+2, 0.29353000E+1, 0.00000000E+0, 0.11059339E+4, 0.349E+3, 0.560E+2, 0.29353000E+1, + 0.00000000E+0, 0.97785820E+3, 0.349E+3, 0.570E+2, 0.29353000E+1, 0.00000000E+0, 0.46088570E+3, + 0.349E+3, 0.580E+2, 0.29353000E+1, 0.27991000E+1, 0.98223880E+3, 0.349E+3, 0.590E+2, + 0.29353000E+1, 0.00000000E+0, 0.94418200E+3, 0.349E+3, 0.600E+2, 0.29353000E+1, 0.00000000E+0, + 0.92077280E+3, 0.349E+3, 0.610E+2, 0.29353000E+1, 0.00000000E+0, 0.89921070E+3, 0.349E+3, + 0.620E+2, 0.29353000E+1, 0.00000000E+0, 0.88009790E+3, 0.349E+3, 0.630E+2, 0.29353000E+1, + 0.00000000E+0, 0.69717420E+3, 0.349E+3, 0.640E+2, 0.29353000E+1, 0.00000000E+0, 0.77703650E+3, + 0.349E+3, 0.650E+2, 0.29353000E+1, 0.00000000E+0, 0.75035490E+3, 0.349E+3, 0.660E+2, + 0.29353000E+1, 0.00000000E+0, 0.79506940E+3, 0.349E+3, 0.670E+2, 0.29353000E+1, 0.00000000E+0, + 0.77832350E+3, 0.349E+3, 0.680E+2, 0.29353000E+1, 0.00000000E+0, 0.76328690E+3, 0.349E+3, + 0.690E+2, 0.29353000E+1, 0.00000000E+0, 0.75412760E+3, 0.349E+3, 0.700E+2, 0.29353000E+1, + 0.00000000E+0, 0.63857600E+3, 0.349E+3, 0.710E+2, 0.29353000E+1, 0.00000000E+0, 0.63185040E+3, + 0.349E+3, 0.720E+2, 0.29353000E+1, 0.00000000E+0, 0.57890360E+3, 0.349E+3, 0.730E+2, + 0.29353000E+1, 0.00000000E+0, 0.49047740E+3, 0.349E+3, 0.740E+2, 0.29353000E+1, 0.00000000E+0, + 0.49968040E+3, 0.349E+3, 0.750E+2, 0.29353000E+1, 0.00000000E+0, 0.45440140E+3, 0.349E+3, + 0.760E+2, 0.29353000E+1, 0.00000000E+0, 0.41730580E+3, 0.349E+3, 0.770E+2, 0.29353000E+1, + 0.00000000E+0, 0.34779410E+3, 0.349E+3, 0.780E+2, 0.29353000E+1, 0.00000000E+0, 0.32538710E+3, + 0.349E+3, 0.790E+2, 0.29353000E+1, 0.00000000E+0, 0.33507650E+3, 0.349E+3, 0.800E+2, + 0.29353000E+1, 0.00000000E+0, 0.48176440E+3, 0.349E+3, 0.810E+2, 0.29353000E+1, 0.00000000E+0, + 0.47318850E+3, 0.349E+3, 0.820E+2, 0.29353000E+1, 0.00000000E+0, 0.43707980E+3, 0.349E+3, + 0.830E+2, 0.29353000E+1, 0.00000000E+0, 0.41810900E+3, 0.349E+3, 0.840E+2, 0.29353000E+1, + 0.00000000E+0, 0.38726470E+3, 0.349E+3, 0.850E+2, 0.29353000E+1, 0.00000000E+0, 0.35612660E+3, + 0.349E+3, 0.860E+2, 0.29353000E+1, 0.00000000E+0, 0.11296762E+4, 0.349E+3, 0.870E+2, + 0.29353000E+1, 0.00000000E+0, 0.10972829E+4, 0.349E+3, 0.880E+2, 0.29353000E+1, 0.00000000E+0, + 0.97575910E+3, 0.349E+3, 0.890E+2, 0.29353000E+1, 0.00000000E+0, 0.88288780E+3, 0.349E+3, + 0.900E+2, 0.29353000E+1, 0.00000000E+0, 0.87388960E+3, 0.349E+3, 0.910E+2, 0.29353000E+1, + 0.00000000E+0, 0.84633640E+3, 0.349E+3, 0.920E+2, 0.29353000E+1, 0.00000000E+0, 0.86787930E+3, + 0.349E+3, 0.930E+2, 0.29353000E+1, 0.00000000E+0, 0.84109640E+3, 0.349E+3, 0.940E+2, + 0.29353000E+1, 0.00000000E+0, 0.48427000E+2, 0.349E+3, 0.101E+3, 0.29353000E+1, 0.00000000E+0, + 0.15382640E+3, 0.349E+3, 0.103E+3, 0.29353000E+1, 0.98650000E+0, 0.19674540E+3, 0.349E+3, + 0.104E+3, 0.29353000E+1, 0.98080000E+0, 0.15226150E+3, 0.349E+3, 0.105E+3, 0.29353000E+1, + 0.97060000E+0, 0.11561300E+3, 0.349E+3, 0.106E+3, 0.29353000E+1, 0.98680000E+0, 0.81111000E+2, + 0.349E+3, 0.107E+3, 0.29353000E+1, 0.99440000E+0, 0.59534400E+2, 0.349E+3, 0.108E+3, + 0.29353000E+1, 0.99250000E+0, 0.41374600E+2, 0.349E+3, 0.109E+3, 0.29353000E+1, 0.99820000E+0, + 0.22440970E+3, 0.349E+3, 0.111E+3, 0.29353000E+1, 0.96840000E+0, 0.34649400E+3, 0.349E+3, + 0.112E+3, 0.29353000E+1, 0.96280000E+0, 0.35326540E+3, 0.349E+3, 0.113E+3, 0.29353000E+1, + 0.96480000E+0, 0.28664120E+3, 0.349E+3, 0.114E+3, 0.29353000E+1, 0.95070000E+0, 0.23644610E+3, + 0.349E+3, 0.115E+3, 0.29353000E+1, 0.99470000E+0, 0.20095580E+3, 0.349E+3, 0.116E+3, + 0.29353000E+1, 0.99480000E+0, 0.16514950E+3, 0.349E+3, 0.117E+3, 0.29353000E+1, 0.99720000E+0, + 0.31131870E+3, 0.349E+3, 0.119E+3, 0.29353000E+1, 0.97670000E+0, 0.58448340E+3, 0.349E+3, + 0.120E+3, 0.29353000E+1, 0.98310000E+0, 0.31379200E+3, 0.349E+3, 0.121E+3, 0.29353000E+1, + 0.18627000E+1, 0.30305660E+3, 0.349E+3, 0.122E+3, 0.29353000E+1, 0.18299000E+1, 0.29698540E+3, + 0.349E+3, 0.123E+3, 0.29353000E+1, 0.19138000E+1, 0.29398400E+3, 0.349E+3, 0.124E+3, + 0.29353000E+1, 0.18269000E+1, 0.27172730E+3, 0.349E+3, 0.125E+3, 0.29353000E+1, 0.16406000E+1, + 0.25185120E+3, 0.349E+3, 0.126E+3, 0.29353000E+1, 0.16483000E+1, 0.24028600E+3, 0.349E+3, + 0.127E+3, 0.29353000E+1, 0.17149000E+1, 0.23483900E+3, 0.349E+3, 0.128E+3, 0.29353000E+1, + 0.17937000E+1, 0.23127000E+3, 0.349E+3, 0.129E+3, 0.29353000E+1, 0.95760000E+0, 0.21830270E+3, + 0.349E+3, 0.130E+3, 0.29353000E+1, 0.19419000E+1, 0.35191540E+3, 0.349E+3, 0.131E+3, + 0.29353000E+1, 0.96010000E+0, 0.31142600E+3, 0.349E+3, 0.132E+3, 0.29353000E+1, 0.94340000E+0, + 0.28063500E+3, 0.349E+3, 0.133E+3, 0.29353000E+1, 0.98890000E+0, 0.25722750E+3, 0.349E+3, + 0.134E+3, 0.29353000E+1, 0.99010000E+0, 0.22754720E+3, 0.349E+3, 0.135E+3, 0.29353000E+1, + 0.99740000E+0, 0.37215270E+3, 0.349E+3, 0.137E+3, 0.29353000E+1, 0.97380000E+0, 0.71067900E+3, + 0.349E+3, 0.138E+3, 0.29353000E+1, 0.98010000E+0, 0.55021640E+3, 0.349E+3, 0.139E+3, + 0.29353000E+1, 0.19153000E+1, 0.41478140E+3, 0.349E+3, 0.140E+3, 0.29353000E+1, 0.19355000E+1, + 0.41884820E+3, 0.349E+3, 0.141E+3, 0.29353000E+1, 0.19545000E+1, 0.39127220E+3, 0.349E+3, + 0.142E+3, 0.29353000E+1, 0.19420000E+1, 0.43621610E+3, 0.349E+3, 0.143E+3, 0.29353000E+1, + 0.16682000E+1, 0.34263080E+3, 0.349E+3, 0.144E+3, 0.29353000E+1, 0.18584000E+1, 0.32074540E+3, + 0.349E+3, 0.145E+3, 0.29353000E+1, 0.19003000E+1, 0.29815620E+3, 0.349E+3, 0.146E+3, + 0.29353000E+1, 0.18630000E+1, 0.28828650E+3, 0.349E+3, 0.147E+3, 0.29353000E+1, 0.96790000E+0, + 0.28607710E+3, 0.349E+3, 0.148E+3, 0.29353000E+1, 0.19539000E+1, 0.44732690E+3, 0.349E+3, + 0.149E+3, 0.29353000E+1, 0.96330000E+0, 0.40722750E+3, 0.349E+3, 0.150E+3, 0.29353000E+1, + 0.95140000E+0, 0.38302800E+3, 0.349E+3, 0.151E+3, 0.29353000E+1, 0.97490000E+0, 0.36340770E+3, + 0.349E+3, 0.152E+3, 0.29353000E+1, 0.98110000E+0, 0.33308010E+3, 0.349E+3, 0.153E+3, + 0.29353000E+1, 0.99680000E+0, 0.44205370E+3, 0.349E+3, 0.155E+3, 0.29353000E+1, 0.99090000E+0, + 0.91909280E+3, 0.349E+3, 0.156E+3, 0.29353000E+1, 0.97970000E+0, 0.69561840E+3, 0.349E+3, + 0.157E+3, 0.29353000E+1, 0.19373000E+1, 0.44715510E+3, 0.349E+3, 0.159E+3, 0.29353000E+1, + 0.29425000E+1, 0.43794100E+3, 0.349E+3, 0.160E+3, 0.29353000E+1, 0.29455000E+1, 0.42419840E+3, + 0.349E+3, 0.161E+3, 0.29353000E+1, 0.29413000E+1, 0.42589770E+3, 0.349E+3, 0.162E+3, + 0.29353000E+1, 0.29300000E+1, 0.40941900E+3, 0.349E+3, 0.163E+3, 0.29353000E+1, 0.18286000E+1, + 0.42843500E+3, 0.349E+3, 0.164E+3, 0.29353000E+1, 0.28732000E+1, 0.40274990E+3, 0.349E+3, + 0.165E+3, 0.29353000E+1, 0.29086000E+1, 0.40914080E+3, 0.349E+3, 0.166E+3, 0.29353000E+1, + 0.28965000E+1, 0.38256860E+3, 0.349E+3, 0.167E+3, 0.29353000E+1, 0.29242000E+1, 0.37177680E+3, + 0.349E+3, 0.168E+3, 0.29353000E+1, 0.29282000E+1, 0.36929910E+3, 0.349E+3, 0.169E+3, + 0.29353000E+1, 0.29246000E+1, 0.38763420E+3, 0.349E+3, 0.170E+3, 0.29353000E+1, 0.28482000E+1, + 0.35709720E+3, 0.349E+3, 0.171E+3, 0.29353000E+1, 0.29219000E+1, 0.47865480E+3, 0.349E+3, + 0.172E+3, 0.29353000E+1, 0.19254000E+1, 0.44589750E+3, 0.349E+3, 0.173E+3, 0.29353000E+1, + 0.19459000E+1, 0.40842780E+3, 0.349E+3, 0.174E+3, 0.29353000E+1, 0.19292000E+1, 0.41195430E+3, + 0.349E+3, 0.175E+3, 0.29353000E+1, 0.18104000E+1, 0.36377170E+3, 0.349E+3, 0.176E+3, + 0.29353000E+1, 0.18858000E+1, 0.34272900E+3, 0.349E+3, 0.177E+3, 0.29353000E+1, 0.18648000E+1, + 0.32766460E+3, 0.349E+3, 0.178E+3, 0.29353000E+1, 0.19188000E+1, 0.31331210E+3, 0.349E+3, + 0.179E+3, 0.29353000E+1, 0.98460000E+0, 0.30363280E+3, 0.349E+3, 0.180E+3, 0.29353000E+1, + 0.19896000E+1, 0.48106690E+3, 0.349E+3, 0.181E+3, 0.29353000E+1, 0.92670000E+0, 0.44115490E+3, + 0.349E+3, 0.182E+3, 0.29353000E+1, 0.93830000E+0, 0.42919400E+3, 0.349E+3, 0.183E+3, + 0.29353000E+1, 0.98200000E+0, 0.41838610E+3, 0.349E+3, 0.184E+3, 0.29353000E+1, 0.98150000E+0, + 0.39195070E+3, 0.349E+3, 0.185E+3, 0.29353000E+1, 0.99540000E+0, 0.49802340E+3, 0.349E+3, + 0.187E+3, 0.29353000E+1, 0.97050000E+0, 0.91797160E+3, 0.349E+3, 0.188E+3, 0.29353000E+1, + 0.96620000E+0, 0.52898700E+3, 0.349E+3, 0.189E+3, 0.29353000E+1, 0.29070000E+1, 0.60741450E+3, + 0.349E+3, 0.190E+3, 0.29353000E+1, 0.28844000E+1, 0.54418980E+3, 0.349E+3, 0.191E+3, + 0.29353000E+1, 0.28738000E+1, 0.48298360E+3, 0.349E+3, 0.192E+3, 0.29353000E+1, 0.28878000E+1, + 0.46522570E+3, 0.349E+3, 0.193E+3, 0.29353000E+1, 0.29095000E+1, 0.55343860E+3, 0.349E+3, + 0.194E+3, 0.29353000E+1, 0.19209000E+1, 0.13011390E+3, 0.349E+3, 0.204E+3, 0.29353000E+1, + 0.19697000E+1, 0.12821910E+3, 0.349E+3, 0.205E+3, 0.29353000E+1, 0.19441000E+1, 0.94715300E+2, + 0.349E+3, 0.206E+3, 0.29353000E+1, 0.19985000E+1, 0.76253000E+2, 0.349E+3, 0.207E+3, + 0.29353000E+1, 0.20143000E+1, 0.52669000E+2, 0.349E+3, 0.208E+3, 0.29353000E+1, 0.19887000E+1, + 0.22944250E+3, 0.349E+3, 0.212E+3, 0.29353000E+1, 0.19496000E+1, 0.27699400E+3, 0.349E+3, + 0.213E+3, 0.29353000E+1, 0.19311000E+1, 0.26699740E+3, 0.349E+3, 0.214E+3, 0.29353000E+1, + 0.19435000E+1, 0.23314220E+3, 0.349E+3, 0.215E+3, 0.29353000E+1, 0.20102000E+1, 0.19692250E+3, + 0.349E+3, 0.216E+3, 0.29353000E+1, 0.19903000E+1, 0.32180650E+3, 0.349E+3, 0.220E+3, + 0.29353000E+1, 0.19349000E+1, 0.31041930E+3, 0.349E+3, 0.221E+3, 0.29353000E+1, 0.28999000E+1, + 0.31434380E+3, 0.349E+3, 0.222E+3, 0.29353000E+1, 0.38675000E+1, 0.28770260E+3, 0.349E+3, + 0.223E+3, 0.29353000E+1, 0.29110000E+1, 0.21815660E+3, 0.349E+3, 0.224E+3, 0.29353000E+1, + 0.10619100E+2, 0.18741200E+3, 0.349E+3, 0.225E+3, 0.29353000E+1, 0.98849000E+1, 0.18389760E+3, + 0.349E+3, 0.226E+3, 0.29353000E+1, 0.91376000E+1, 0.21424530E+3, 0.349E+3, 0.227E+3, + 0.29353000E+1, 0.29263000E+1, 0.19997120E+3, 0.349E+3, 0.228E+3, 0.29353000E+1, 0.65458000E+1, + 0.28072610E+3, 0.349E+3, 0.231E+3, 0.29353000E+1, 0.19315000E+1, 0.29685620E+3, 0.349E+3, + 0.232E+3, 0.29353000E+1, 0.19447000E+1, 0.27345920E+3, 0.349E+3, 0.233E+3, 0.29353000E+1, + 0.19793000E+1, 0.25524180E+3, 0.349E+3, 0.234E+3, 0.29353000E+1, 0.19812000E+1, 0.38575940E+3, + 0.349E+3, 0.238E+3, 0.29353000E+1, 0.19143000E+1, 0.37308750E+3, 0.349E+3, 0.239E+3, + 0.29353000E+1, 0.28903000E+1, 0.37681730E+3, 0.349E+3, 0.240E+3, 0.29353000E+1, 0.39106000E+1, + 0.36432260E+3, 0.349E+3, 0.241E+3, 0.29353000E+1, 0.29225000E+1, 0.32348820E+3, 0.349E+3, + 0.242E+3, 0.29353000E+1, 0.11055600E+2, 0.28650850E+3, 0.349E+3, 0.243E+3, 0.29353000E+1, + 0.95402000E+1, 0.27111330E+3, 0.349E+3, 0.244E+3, 0.29353000E+1, 0.88895000E+1, 0.27523510E+3, + 0.349E+3, 0.245E+3, 0.29353000E+1, 0.29696000E+1, 0.28720260E+3, 0.349E+3, 0.246E+3, + 0.29353000E+1, 0.57095000E+1, 0.36275140E+3, 0.349E+3, 0.249E+3, 0.29353000E+1, 0.19378000E+1, + 0.39418070E+3, 0.349E+3, 0.250E+3, 0.29353000E+1, 0.19505000E+1, 0.37288760E+3, 0.349E+3, + 0.251E+3, 0.29353000E+1, 0.19523000E+1, 0.36059670E+3, 0.349E+3, 0.252E+3, 0.29353000E+1, + 0.19639000E+1, 0.46716080E+3, 0.349E+3, 0.256E+3, 0.29353000E+1, 0.18467000E+1, 0.48537390E+3, + 0.349E+3, 0.257E+3, 0.29353000E+1, 0.29175000E+1, 0.36148780E+3, 0.349E+3, 0.272E+3, + 0.29353000E+1, 0.38840000E+1, 0.37694960E+3, 0.349E+3, 0.273E+3, 0.29353000E+1, 0.28988000E+1, + 0.35152420E+3, 0.349E+3, 0.274E+3, 0.29353000E+1, 0.10915300E+2, 0.32026850E+3, 0.349E+3, + 0.275E+3, 0.29353000E+1, 0.98054000E+1, 0.30203680E+3, 0.349E+3, 0.276E+3, 0.29353000E+1, + 0.91527000E+1, 0.30706620E+3, 0.349E+3, 0.277E+3, 0.29353000E+1, 0.29424000E+1, 0.32283420E+3, + 0.349E+3, 0.278E+3, 0.29353000E+1, 0.66669000E+1, 0.38866590E+3, 0.349E+3, 0.281E+3, + 0.29353000E+1, 0.19302000E+1, 0.41079890E+3, 0.349E+3, 0.282E+3, 0.29353000E+1, 0.19356000E+1, + 0.41930730E+3, 0.349E+3, 0.283E+3, 0.29353000E+1, 0.19655000E+1, 0.41680560E+3, 0.349E+3, + 0.284E+3, 0.29353000E+1, 0.19639000E+1, 0.51446020E+3, 0.349E+3, 0.288E+3, 0.29353000E+1, + 0.18075000E+1, 0.98223500E+2, 0.349E+3, 0.305E+3, 0.29353000E+1, 0.29128000E+1, 0.88657200E+2, + 0.349E+3, 0.306E+3, 0.29353000E+1, 0.29987000E+1, 0.67270400E+2, 0.349E+3, 0.307E+3, + 0.29353000E+1, 0.29903000E+1, 0.21743180E+3, 0.349E+3, 0.313E+3, 0.29353000E+1, 0.29146000E+1, + 0.25998580E+3, 0.349E+3, 0.314E+3, 0.29353000E+1, 0.29407000E+1, 0.21672230E+3, 0.349E+3, + 0.315E+3, 0.29353000E+1, 0.29859000E+1, 0.19153170E+3, 0.349E+3, 0.327E+3, 0.29353000E+1, + 0.77785000E+1, 0.20921040E+3, 0.349E+3, 0.328E+3, 0.29353000E+1, 0.62918000E+1, 0.23116180E+3, + 0.349E+3, 0.331E+3, 0.29353000E+1, 0.29233000E+1, 0.26679440E+3, 0.349E+3, 0.332E+3, + 0.29353000E+1, 0.29186000E+1, 0.26367810E+3, 0.349E+3, 0.333E+3, 0.29353000E+1, 0.29709000E+1, + 0.31083150E+3, 0.349E+3, 0.349E+3, 0.29353000E+1, 0.29353000E+1, 0.34550300E+2, 0.350E+3, + 0.100E+1, 0.29259000E+1, 0.91180000E+0, 0.22887500E+2, 0.350E+3, 0.200E+1, 0.29259000E+1, + 0.00000000E+0, 0.52718510E+3, 0.350E+3, 0.300E+1, 0.29259000E+1, 0.00000000E+0, 0.30788140E+3, + 0.350E+3, 0.400E+1, 0.29259000E+1, 0.00000000E+0, 0.20823790E+3, 0.350E+3, 0.500E+1, + 0.29259000E+1, 0.00000000E+0, 0.14104070E+3, 0.350E+3, 0.600E+1, 0.29259000E+1, 0.00000000E+0, + 0.98802500E+2, 0.350E+3, 0.700E+1, 0.29259000E+1, 0.00000000E+0, 0.74902900E+2, 0.350E+3, + 0.800E+1, 0.29259000E+1, 0.00000000E+0, 0.56815100E+2, 0.350E+3, 0.900E+1, 0.29259000E+1, + 0.00000000E+0, 0.43755600E+2, 0.350E+3, 0.100E+2, 0.29259000E+1, 0.00000000E+0, 0.63086870E+3, + 0.350E+3, 0.110E+2, 0.29259000E+1, 0.00000000E+0, 0.48975320E+3, 0.350E+3, 0.120E+2, + 0.29259000E+1, 0.00000000E+0, 0.45261920E+3, 0.350E+3, 0.130E+2, 0.29259000E+1, 0.00000000E+0, + 0.35774280E+3, 0.350E+3, 0.140E+2, 0.29259000E+1, 0.00000000E+0, 0.27953920E+3, 0.350E+3, + 0.150E+2, 0.29259000E+1, 0.00000000E+0, 0.23224340E+3, 0.350E+3, 0.160E+2, 0.29259000E+1, + 0.00000000E+0, 0.18988240E+3, 0.350E+3, 0.170E+2, 0.29259000E+1, 0.00000000E+0, 0.15546270E+3, + 0.350E+3, 0.180E+2, 0.29259000E+1, 0.00000000E+0, 0.10315350E+4, 0.350E+3, 0.190E+2, + 0.29259000E+1, 0.00000000E+0, 0.85745370E+3, 0.350E+3, 0.200E+2, 0.29259000E+1, 0.00000000E+0, + 0.70944180E+3, 0.350E+3, 0.210E+2, 0.29259000E+1, 0.00000000E+0, 0.68588510E+3, 0.350E+3, + 0.220E+2, 0.29259000E+1, 0.00000000E+0, 0.62854190E+3, 0.350E+3, 0.230E+2, 0.29259000E+1, + 0.00000000E+0, 0.49509360E+3, 0.350E+3, 0.240E+2, 0.29259000E+1, 0.00000000E+0, 0.54171840E+3, + 0.350E+3, 0.250E+2, 0.29259000E+1, 0.00000000E+0, 0.42519040E+3, 0.350E+3, 0.260E+2, + 0.29259000E+1, 0.00000000E+0, 0.45143600E+3, 0.350E+3, 0.270E+2, 0.29259000E+1, 0.00000000E+0, + 0.46473810E+3, 0.350E+3, 0.280E+2, 0.29259000E+1, 0.00000000E+0, 0.35624130E+3, 0.350E+3, + 0.290E+2, 0.29259000E+1, 0.00000000E+0, 0.36657850E+3, 0.350E+3, 0.300E+2, 0.29259000E+1, + 0.00000000E+0, 0.43386350E+3, 0.350E+3, 0.310E+2, 0.29259000E+1, 0.00000000E+0, 0.38351890E+3, + 0.350E+3, 0.320E+2, 0.29259000E+1, 0.00000000E+0, 0.32767900E+3, 0.350E+3, 0.330E+2, + 0.29259000E+1, 0.00000000E+0, 0.29427420E+3, 0.350E+3, 0.340E+2, 0.29259000E+1, 0.00000000E+0, + 0.25771960E+3, 0.350E+3, 0.350E+2, 0.29259000E+1, 0.00000000E+0, 0.22426550E+3, 0.350E+3, + 0.360E+2, 0.29259000E+1, 0.00000000E+0, 0.11566447E+4, 0.350E+3, 0.370E+2, 0.29259000E+1, + 0.00000000E+0, 0.10211992E+4, 0.350E+3, 0.380E+2, 0.29259000E+1, 0.00000000E+0, 0.89668220E+3, + 0.350E+3, 0.390E+2, 0.29259000E+1, 0.00000000E+0, 0.80699680E+3, 0.350E+3, 0.400E+2, + 0.29259000E+1, 0.00000000E+0, 0.73648020E+3, 0.350E+3, 0.410E+2, 0.29259000E+1, 0.00000000E+0, + 0.56927660E+3, 0.350E+3, 0.420E+2, 0.29259000E+1, 0.00000000E+0, 0.63492090E+3, 0.350E+3, + 0.430E+2, 0.29259000E+1, 0.00000000E+0, 0.48434860E+3, 0.350E+3, 0.440E+2, 0.29259000E+1, + 0.00000000E+0, 0.52953710E+3, 0.350E+3, 0.450E+2, 0.29259000E+1, 0.00000000E+0, 0.49130410E+3, + 0.350E+3, 0.460E+2, 0.29259000E+1, 0.00000000E+0, 0.40943180E+3, 0.350E+3, 0.470E+2, + 0.29259000E+1, 0.00000000E+0, 0.43319920E+3, 0.350E+3, 0.480E+2, 0.29259000E+1, 0.00000000E+0, + 0.54284130E+3, 0.350E+3, 0.490E+2, 0.29259000E+1, 0.00000000E+0, 0.50298910E+3, 0.350E+3, + 0.500E+2, 0.29259000E+1, 0.00000000E+0, 0.44897690E+3, 0.350E+3, 0.510E+2, 0.29259000E+1, + 0.00000000E+0, 0.41689450E+3, 0.350E+3, 0.520E+2, 0.29259000E+1, 0.00000000E+0, 0.37722550E+3, + 0.350E+3, 0.530E+2, 0.29259000E+1, 0.00000000E+0, 0.33935050E+3, 0.350E+3, 0.540E+2, + 0.29259000E+1, 0.00000000E+0, 0.14090375E+4, 0.350E+3, 0.550E+2, 0.29259000E+1, 0.00000000E+0, + 0.13006349E+4, 0.350E+3, 0.560E+2, 0.29259000E+1, 0.00000000E+0, 0.11454236E+4, 0.350E+3, + 0.570E+2, 0.29259000E+1, 0.00000000E+0, 0.53013690E+3, 0.350E+3, 0.580E+2, 0.29259000E+1, + 0.27991000E+1, 0.11533721E+4, 0.350E+3, 0.590E+2, 0.29259000E+1, 0.00000000E+0, 0.11079903E+4, + 0.350E+3, 0.600E+2, 0.29259000E+1, 0.00000000E+0, 0.10803308E+4, 0.350E+3, 0.610E+2, + 0.29259000E+1, 0.00000000E+0, 0.10548803E+4, 0.350E+3, 0.620E+2, 0.29259000E+1, 0.00000000E+0, + 0.10323159E+4, 0.350E+3, 0.630E+2, 0.29259000E+1, 0.00000000E+0, 0.81371020E+3, 0.350E+3, + 0.640E+2, 0.29259000E+1, 0.00000000E+0, 0.91255420E+3, 0.350E+3, 0.650E+2, 0.29259000E+1, + 0.00000000E+0, 0.88050980E+3, 0.350E+3, 0.660E+2, 0.29259000E+1, 0.00000000E+0, 0.93168500E+3, + 0.350E+3, 0.670E+2, 0.29259000E+1, 0.00000000E+0, 0.91198360E+3, 0.350E+3, 0.680E+2, + 0.29259000E+1, 0.00000000E+0, 0.89424260E+3, 0.350E+3, 0.690E+2, 0.29259000E+1, 0.00000000E+0, + 0.88370520E+3, 0.350E+3, 0.700E+2, 0.29259000E+1, 0.00000000E+0, 0.74578300E+3, 0.350E+3, + 0.710E+2, 0.29259000E+1, 0.00000000E+0, 0.73506570E+3, 0.350E+3, 0.720E+2, 0.29259000E+1, + 0.00000000E+0, 0.67161750E+3, 0.350E+3, 0.730E+2, 0.29259000E+1, 0.00000000E+0, 0.56750780E+3, + 0.350E+3, 0.740E+2, 0.29259000E+1, 0.00000000E+0, 0.57764320E+3, 0.350E+3, 0.750E+2, + 0.29259000E+1, 0.00000000E+0, 0.52400420E+3, 0.350E+3, 0.760E+2, 0.29259000E+1, 0.00000000E+0, + 0.48023510E+3, 0.350E+3, 0.770E+2, 0.29259000E+1, 0.00000000E+0, 0.39915430E+3, 0.350E+3, + 0.780E+2, 0.29259000E+1, 0.00000000E+0, 0.37302900E+3, 0.350E+3, 0.790E+2, 0.29259000E+1, + 0.00000000E+0, 0.38392690E+3, 0.350E+3, 0.800E+2, 0.29259000E+1, 0.00000000E+0, 0.55745160E+3, + 0.350E+3, 0.810E+2, 0.29259000E+1, 0.00000000E+0, 0.54594690E+3, 0.350E+3, 0.820E+2, + 0.29259000E+1, 0.00000000E+0, 0.50242860E+3, 0.350E+3, 0.830E+2, 0.29259000E+1, 0.00000000E+0, + 0.47954670E+3, 0.350E+3, 0.840E+2, 0.29259000E+1, 0.00000000E+0, 0.44291920E+3, 0.350E+3, + 0.850E+2, 0.29259000E+1, 0.00000000E+0, 0.40620580E+3, 0.350E+3, 0.860E+2, 0.29259000E+1, + 0.00000000E+0, 0.13331000E+4, 0.350E+3, 0.870E+2, 0.29259000E+1, 0.00000000E+0, 0.12876457E+4, + 0.350E+3, 0.880E+2, 0.29259000E+1, 0.00000000E+0, 0.11407848E+4, 0.350E+3, 0.890E+2, + 0.29259000E+1, 0.00000000E+0, 0.10274883E+4, 0.350E+3, 0.900E+2, 0.29259000E+1, 0.00000000E+0, + 0.10189158E+4, 0.350E+3, 0.910E+2, 0.29259000E+1, 0.00000000E+0, 0.98663370E+3, 0.350E+3, + 0.920E+2, 0.29259000E+1, 0.00000000E+0, 0.10144405E+4, 0.350E+3, 0.930E+2, 0.29259000E+1, + 0.00000000E+0, 0.98265960E+3, 0.350E+3, 0.940E+2, 0.29259000E+1, 0.00000000E+0, 0.55564300E+2, + 0.350E+3, 0.101E+3, 0.29259000E+1, 0.00000000E+0, 0.17907060E+3, 0.350E+3, 0.103E+3, + 0.29259000E+1, 0.98650000E+0, 0.22855840E+3, 0.350E+3, 0.104E+3, 0.29259000E+1, 0.98080000E+0, + 0.17527450E+3, 0.350E+3, 0.105E+3, 0.29259000E+1, 0.97060000E+0, 0.13225620E+3, 0.350E+3, + 0.106E+3, 0.29259000E+1, 0.98680000E+0, 0.92115400E+2, 0.350E+3, 0.107E+3, 0.29259000E+1, + 0.99440000E+0, 0.67181100E+2, 0.350E+3, 0.108E+3, 0.29259000E+1, 0.99250000E+0, 0.46303000E+2, + 0.350E+3, 0.109E+3, 0.29259000E+1, 0.99820000E+0, 0.26154000E+3, 0.350E+3, 0.111E+3, + 0.29259000E+1, 0.96840000E+0, 0.40427630E+3, 0.350E+3, 0.112E+3, 0.29259000E+1, 0.96280000E+0, + 0.41041760E+3, 0.350E+3, 0.113E+3, 0.29259000E+1, 0.96480000E+0, 0.33075310E+3, 0.350E+3, + 0.114E+3, 0.29259000E+1, 0.95070000E+0, 0.27134880E+3, 0.350E+3, 0.115E+3, 0.29259000E+1, + 0.99470000E+0, 0.22967560E+3, 0.350E+3, 0.116E+3, 0.29259000E+1, 0.99480000E+0, 0.18790960E+3, + 0.350E+3, 0.117E+3, 0.29259000E+1, 0.99720000E+0, 0.36096750E+3, 0.350E+3, 0.119E+3, + 0.29259000E+1, 0.97670000E+0, 0.68580030E+3, 0.350E+3, 0.120E+3, 0.29259000E+1, 0.98310000E+0, + 0.36213940E+3, 0.350E+3, 0.121E+3, 0.29259000E+1, 0.18627000E+1, 0.34961060E+3, 0.350E+3, + 0.122E+3, 0.29259000E+1, 0.18299000E+1, 0.34261200E+3, 0.350E+3, 0.123E+3, 0.29259000E+1, + 0.19138000E+1, 0.33934490E+3, 0.350E+3, 0.124E+3, 0.29259000E+1, 0.18269000E+1, 0.31272950E+3, + 0.350E+3, 0.125E+3, 0.29259000E+1, 0.16406000E+1, 0.28953010E+3, 0.350E+3, 0.126E+3, + 0.29259000E+1, 0.16483000E+1, 0.27618840E+3, 0.350E+3, 0.127E+3, 0.29259000E+1, 0.17149000E+1, + 0.26998570E+3, 0.350E+3, 0.128E+3, 0.29259000E+1, 0.17937000E+1, 0.26647580E+3, 0.350E+3, + 0.129E+3, 0.29259000E+1, 0.95760000E+0, 0.25050770E+3, 0.350E+3, 0.130E+3, 0.29259000E+1, + 0.19419000E+1, 0.40773530E+3, 0.350E+3, 0.131E+3, 0.29259000E+1, 0.96010000E+0, 0.35895200E+3, + 0.350E+3, 0.132E+3, 0.29259000E+1, 0.94340000E+0, 0.32214500E+3, 0.350E+3, 0.133E+3, + 0.29259000E+1, 0.98890000E+0, 0.29438040E+3, 0.350E+3, 0.134E+3, 0.29259000E+1, 0.99010000E+0, + 0.25950110E+3, 0.350E+3, 0.135E+3, 0.29259000E+1, 0.99740000E+0, 0.43088110E+3, 0.350E+3, + 0.137E+3, 0.29259000E+1, 0.97380000E+0, 0.83409790E+3, 0.350E+3, 0.138E+3, 0.29259000E+1, + 0.98010000E+0, 0.64047400E+3, 0.350E+3, 0.139E+3, 0.29259000E+1, 0.19153000E+1, 0.47873550E+3, + 0.350E+3, 0.140E+3, 0.29259000E+1, 0.19355000E+1, 0.48344780E+3, 0.350E+3, 0.141E+3, + 0.29259000E+1, 0.19545000E+1, 0.45098400E+3, 0.350E+3, 0.142E+3, 0.29259000E+1, 0.19420000E+1, + 0.50476500E+3, 0.350E+3, 0.143E+3, 0.29259000E+1, 0.16682000E+1, 0.39362700E+3, 0.350E+3, + 0.144E+3, 0.29259000E+1, 0.18584000E+1, 0.36827100E+3, 0.350E+3, 0.145E+3, 0.29259000E+1, + 0.19003000E+1, 0.34204040E+3, 0.350E+3, 0.146E+3, 0.29259000E+1, 0.18630000E+1, 0.33083540E+3, + 0.350E+3, 0.147E+3, 0.29259000E+1, 0.96790000E+0, 0.32765190E+3, 0.350E+3, 0.148E+3, + 0.29259000E+1, 0.19539000E+1, 0.51780290E+3, 0.350E+3, 0.149E+3, 0.29259000E+1, 0.96330000E+0, + 0.46937510E+3, 0.350E+3, 0.150E+3, 0.29259000E+1, 0.95140000E+0, 0.44010850E+3, 0.350E+3, + 0.151E+3, 0.29259000E+1, 0.97490000E+0, 0.41661070E+3, 0.350E+3, 0.152E+3, 0.29259000E+1, + 0.98110000E+0, 0.38076150E+3, 0.350E+3, 0.153E+3, 0.29259000E+1, 0.99680000E+0, 0.51028570E+3, + 0.350E+3, 0.155E+3, 0.29259000E+1, 0.99090000E+0, 0.10802049E+4, 0.350E+3, 0.156E+3, + 0.29259000E+1, 0.97970000E+0, 0.81022120E+3, 0.350E+3, 0.157E+3, 0.29259000E+1, 0.19373000E+1, + 0.51419410E+3, 0.350E+3, 0.159E+3, 0.29259000E+1, 0.29425000E+1, 0.50356860E+3, 0.350E+3, + 0.160E+3, 0.29259000E+1, 0.29455000E+1, 0.48764360E+3, 0.350E+3, 0.161E+3, 0.29259000E+1, + 0.29413000E+1, 0.48991040E+3, 0.350E+3, 0.162E+3, 0.29259000E+1, 0.29300000E+1, 0.47183730E+3, + 0.350E+3, 0.163E+3, 0.29259000E+1, 0.18286000E+1, 0.49298820E+3, 0.350E+3, 0.164E+3, + 0.29259000E+1, 0.28732000E+1, 0.46313550E+3, 0.350E+3, 0.165E+3, 0.29259000E+1, 0.29086000E+1, + 0.47101170E+3, 0.350E+3, 0.166E+3, 0.29259000E+1, 0.28965000E+1, 0.43969410E+3, 0.350E+3, + 0.167E+3, 0.29259000E+1, 0.29242000E+1, 0.42720060E+3, 0.350E+3, 0.168E+3, 0.29259000E+1, + 0.29282000E+1, 0.42443580E+3, 0.350E+3, 0.169E+3, 0.29259000E+1, 0.29246000E+1, 0.44601630E+3, + 0.350E+3, 0.170E+3, 0.29259000E+1, 0.28482000E+1, 0.41029850E+3, 0.350E+3, 0.171E+3, + 0.29259000E+1, 0.29219000E+1, 0.55410220E+3, 0.350E+3, 0.172E+3, 0.29259000E+1, 0.19254000E+1, + 0.51478350E+3, 0.350E+3, 0.173E+3, 0.29259000E+1, 0.19459000E+1, 0.47018380E+3, 0.350E+3, + 0.174E+3, 0.29259000E+1, 0.19292000E+1, 0.47532640E+3, 0.350E+3, 0.175E+3, 0.29259000E+1, + 0.18104000E+1, 0.41708260E+3, 0.350E+3, 0.176E+3, 0.29259000E+1, 0.18858000E+1, 0.39248360E+3, + 0.350E+3, 0.177E+3, 0.29259000E+1, 0.18648000E+1, 0.37493960E+3, 0.350E+3, 0.178E+3, + 0.29259000E+1, 0.19188000E+1, 0.35843860E+3, 0.350E+3, 0.179E+3, 0.29259000E+1, 0.98460000E+0, + 0.34665580E+3, 0.350E+3, 0.180E+3, 0.29259000E+1, 0.19896000E+1, 0.55606680E+3, 0.350E+3, + 0.181E+3, 0.29259000E+1, 0.92670000E+0, 0.50782080E+3, 0.350E+3, 0.182E+3, 0.29259000E+1, + 0.93830000E+0, 0.49295080E+3, 0.350E+3, 0.183E+3, 0.29259000E+1, 0.98200000E+0, 0.47971720E+3, + 0.350E+3, 0.184E+3, 0.29259000E+1, 0.98150000E+0, 0.44828660E+3, 0.350E+3, 0.185E+3, + 0.29259000E+1, 0.99540000E+0, 0.57477940E+3, 0.350E+3, 0.187E+3, 0.29259000E+1, 0.97050000E+0, + 0.10760744E+4, 0.350E+3, 0.188E+3, 0.29259000E+1, 0.96620000E+0, 0.60843480E+3, 0.350E+3, + 0.189E+3, 0.29259000E+1, 0.29070000E+1, 0.70109350E+3, 0.350E+3, 0.190E+3, 0.29259000E+1, + 0.28844000E+1, 0.62707340E+3, 0.350E+3, 0.191E+3, 0.29259000E+1, 0.28738000E+1, 0.55492490E+3, + 0.350E+3, 0.192E+3, 0.29259000E+1, 0.28878000E+1, 0.53413870E+3, 0.350E+3, 0.193E+3, + 0.29259000E+1, 0.29095000E+1, 0.64033600E+3, 0.350E+3, 0.194E+3, 0.29259000E+1, 0.19209000E+1, + 0.14976800E+3, 0.350E+3, 0.204E+3, 0.29259000E+1, 0.19697000E+1, 0.14723850E+3, 0.350E+3, + 0.205E+3, 0.29259000E+1, 0.19441000E+1, 0.10796360E+3, 0.350E+3, 0.206E+3, 0.29259000E+1, + 0.19985000E+1, 0.86517400E+2, 0.350E+3, 0.207E+3, 0.29259000E+1, 0.20143000E+1, 0.59302900E+2, + 0.350E+3, 0.208E+3, 0.29259000E+1, 0.19887000E+1, 0.26525750E+3, 0.350E+3, 0.212E+3, + 0.29259000E+1, 0.19496000E+1, 0.32039240E+3, 0.350E+3, 0.213E+3, 0.29259000E+1, 0.19311000E+1, + 0.30775700E+3, 0.350E+3, 0.214E+3, 0.29259000E+1, 0.19435000E+1, 0.26762990E+3, 0.350E+3, + 0.215E+3, 0.29259000E+1, 0.20102000E+1, 0.22503380E+3, 0.350E+3, 0.216E+3, 0.29259000E+1, + 0.19903000E+1, 0.37171230E+3, 0.350E+3, 0.220E+3, 0.29259000E+1, 0.19349000E+1, 0.35761290E+3, + 0.350E+3, 0.221E+3, 0.29259000E+1, 0.28999000E+1, 0.36204400E+3, 0.350E+3, 0.222E+3, + 0.29259000E+1, 0.38675000E+1, 0.33130930E+3, 0.350E+3, 0.223E+3, 0.29259000E+1, 0.29110000E+1, + 0.24989390E+3, 0.350E+3, 0.224E+3, 0.29259000E+1, 0.10619100E+2, 0.21401180E+3, 0.350E+3, + 0.225E+3, 0.29259000E+1, 0.98849000E+1, 0.21006230E+3, 0.350E+3, 0.226E+3, 0.29259000E+1, + 0.91376000E+1, 0.24593880E+3, 0.350E+3, 0.227E+3, 0.29259000E+1, 0.29263000E+1, 0.22923870E+3, + 0.350E+3, 0.228E+3, 0.29259000E+1, 0.65458000E+1, 0.32367220E+3, 0.350E+3, 0.231E+3, + 0.29259000E+1, 0.19315000E+1, 0.34184070E+3, 0.350E+3, 0.232E+3, 0.29259000E+1, 0.19447000E+1, + 0.31373420E+3, 0.350E+3, 0.233E+3, 0.29259000E+1, 0.19793000E+1, 0.29207370E+3, 0.350E+3, + 0.234E+3, 0.29259000E+1, 0.19812000E+1, 0.44529880E+3, 0.350E+3, 0.238E+3, 0.29259000E+1, + 0.19143000E+1, 0.42922790E+3, 0.350E+3, 0.239E+3, 0.29259000E+1, 0.28903000E+1, 0.43306580E+3, + 0.350E+3, 0.240E+3, 0.29259000E+1, 0.39106000E+1, 0.41869180E+3, 0.350E+3, 0.241E+3, + 0.29259000E+1, 0.29225000E+1, 0.37051430E+3, 0.350E+3, 0.242E+3, 0.29259000E+1, 0.11055600E+2, + 0.32726370E+3, 0.350E+3, 0.243E+3, 0.29259000E+1, 0.95402000E+1, 0.30934100E+3, 0.350E+3, + 0.244E+3, 0.29259000E+1, 0.88895000E+1, 0.31485220E+3, 0.350E+3, 0.245E+3, 0.29259000E+1, + 0.29696000E+1, 0.32886980E+3, 0.350E+3, 0.246E+3, 0.29259000E+1, 0.57095000E+1, 0.41760930E+3, + 0.350E+3, 0.249E+3, 0.29259000E+1, 0.19378000E+1, 0.45391950E+3, 0.350E+3, 0.250E+3, + 0.29259000E+1, 0.19505000E+1, 0.42812220E+3, 0.350E+3, 0.251E+3, 0.29259000E+1, 0.19523000E+1, + 0.41326530E+3, 0.350E+3, 0.252E+3, 0.29259000E+1, 0.19639000E+1, 0.53867350E+3, 0.350E+3, + 0.256E+3, 0.29259000E+1, 0.18467000E+1, 0.55884130E+3, 0.350E+3, 0.257E+3, 0.29259000E+1, + 0.29175000E+1, 0.41480660E+3, 0.350E+3, 0.272E+3, 0.29259000E+1, 0.38840000E+1, 0.43299810E+3, + 0.350E+3, 0.273E+3, 0.29259000E+1, 0.28988000E+1, 0.40255440E+3, 0.350E+3, 0.274E+3, + 0.29259000E+1, 0.10915300E+2, 0.36584940E+3, 0.350E+3, 0.275E+3, 0.29259000E+1, 0.98054000E+1, + 0.34433760E+3, 0.350E+3, 0.276E+3, 0.29259000E+1, 0.91527000E+1, 0.35080960E+3, 0.350E+3, + 0.277E+3, 0.29259000E+1, 0.29424000E+1, 0.36898910E+3, 0.350E+3, 0.278E+3, 0.29259000E+1, + 0.66669000E+1, 0.44636650E+3, 0.350E+3, 0.281E+3, 0.29259000E+1, 0.19302000E+1, 0.47183450E+3, + 0.350E+3, 0.282E+3, 0.29259000E+1, 0.19356000E+1, 0.48114100E+3, 0.350E+3, 0.283E+3, + 0.29259000E+1, 0.19655000E+1, 0.47772640E+3, 0.350E+3, 0.284E+3, 0.29259000E+1, 0.19639000E+1, + 0.59304720E+3, 0.350E+3, 0.288E+3, 0.29259000E+1, 0.18075000E+1, 0.11213310E+3, 0.350E+3, + 0.305E+3, 0.29259000E+1, 0.29128000E+1, 0.10101310E+3, 0.350E+3, 0.306E+3, 0.29259000E+1, + 0.29987000E+1, 0.76210000E+2, 0.350E+3, 0.307E+3, 0.29259000E+1, 0.29903000E+1, 0.25014210E+3, + 0.350E+3, 0.313E+3, 0.29259000E+1, 0.29146000E+1, 0.29982180E+3, 0.350E+3, 0.314E+3, + 0.29259000E+1, 0.29407000E+1, 0.24837820E+3, 0.350E+3, 0.315E+3, 0.29259000E+1, 0.29859000E+1, + 0.21915410E+3, 0.350E+3, 0.327E+3, 0.29259000E+1, 0.77785000E+1, 0.24046050E+3, 0.350E+3, + 0.328E+3, 0.29259000E+1, 0.62918000E+1, 0.26525500E+3, 0.350E+3, 0.331E+3, 0.29259000E+1, + 0.29233000E+1, 0.30652410E+3, 0.350E+3, 0.332E+3, 0.29259000E+1, 0.29186000E+1, 0.30226660E+3, + 0.350E+3, 0.333E+3, 0.29259000E+1, 0.29709000E+1, 0.35623590E+3, 0.350E+3, 0.349E+3, + 0.29259000E+1, 0.29353000E+1, 0.40914530E+3, 0.350E+3, 0.350E+3, 0.29259000E+1, 0.29259000E+1, + 0.35093900E+2, 0.351E+3, 0.100E+1, 0.29315000E+1, 0.91180000E+0, 0.23379200E+2, 0.351E+3, + 0.200E+1, 0.29315000E+1, 0.00000000E+0, 0.51864270E+3, 0.351E+3, 0.300E+1, 0.29315000E+1, + 0.00000000E+0, 0.30744210E+3, 0.351E+3, 0.400E+1, 0.29315000E+1, 0.00000000E+0, 0.20967450E+3, + 0.351E+3, 0.500E+1, 0.29315000E+1, 0.00000000E+0, 0.14283480E+3, 0.351E+3, 0.600E+1, + 0.29315000E+1, 0.00000000E+0, 0.10045000E+3, 0.351E+3, 0.700E+1, 0.29315000E+1, 0.00000000E+0, + 0.76342400E+2, 0.351E+3, 0.800E+1, 0.29315000E+1, 0.00000000E+0, 0.58017600E+2, 0.351E+3, + 0.900E+1, 0.29315000E+1, 0.00000000E+0, 0.44740800E+2, 0.351E+3, 0.100E+2, 0.29315000E+1, + 0.00000000E+0, 0.62119430E+3, 0.351E+3, 0.110E+2, 0.29315000E+1, 0.00000000E+0, 0.48774180E+3, + 0.351E+3, 0.120E+2, 0.29315000E+1, 0.00000000E+0, 0.45276050E+3, 0.351E+3, 0.130E+2, + 0.29315000E+1, 0.00000000E+0, 0.35991590E+3, 0.351E+3, 0.140E+2, 0.29315000E+1, 0.00000000E+0, + 0.28255640E+3, 0.351E+3, 0.150E+2, 0.29315000E+1, 0.00000000E+0, 0.23542680E+3, 0.351E+3, + 0.160E+2, 0.29315000E+1, 0.00000000E+0, 0.19298930E+3, 0.351E+3, 0.170E+2, 0.29315000E+1, + 0.00000000E+0, 0.15834200E+3, 0.351E+3, 0.180E+2, 0.29315000E+1, 0.00000000E+0, 0.10138323E+4, + 0.351E+3, 0.190E+2, 0.29315000E+1, 0.00000000E+0, 0.85006180E+3, 0.351E+3, 0.200E+2, + 0.29315000E+1, 0.00000000E+0, 0.70472450E+3, 0.351E+3, 0.210E+2, 0.29315000E+1, 0.00000000E+0, + 0.68261700E+3, 0.351E+3, 0.220E+2, 0.29315000E+1, 0.00000000E+0, 0.62623920E+3, 0.351E+3, + 0.230E+2, 0.29315000E+1, 0.00000000E+0, 0.49343100E+3, 0.351E+3, 0.240E+2, 0.29315000E+1, + 0.00000000E+0, 0.54059460E+3, 0.351E+3, 0.250E+2, 0.29315000E+1, 0.00000000E+0, 0.42451240E+3, + 0.351E+3, 0.260E+2, 0.29315000E+1, 0.00000000E+0, 0.45168930E+3, 0.351E+3, 0.270E+2, + 0.29315000E+1, 0.00000000E+0, 0.46446650E+3, 0.351E+3, 0.280E+2, 0.29315000E+1, 0.00000000E+0, + 0.35610950E+3, 0.351E+3, 0.290E+2, 0.29315000E+1, 0.00000000E+0, 0.36766370E+3, 0.351E+3, + 0.300E+2, 0.29315000E+1, 0.00000000E+0, 0.43474170E+3, 0.351E+3, 0.310E+2, 0.29315000E+1, + 0.00000000E+0, 0.38597850E+3, 0.351E+3, 0.320E+2, 0.29315000E+1, 0.00000000E+0, 0.33106180E+3, + 0.351E+3, 0.330E+2, 0.29315000E+1, 0.00000000E+0, 0.29800720E+3, 0.351E+3, 0.340E+2, + 0.29315000E+1, 0.00000000E+0, 0.26158890E+3, 0.351E+3, 0.350E+2, 0.29315000E+1, 0.00000000E+0, + 0.22809040E+3, 0.351E+3, 0.360E+2, 0.29315000E+1, 0.00000000E+0, 0.11378099E+4, 0.351E+3, + 0.370E+2, 0.29315000E+1, 0.00000000E+0, 0.10121518E+4, 0.351E+3, 0.380E+2, 0.29315000E+1, + 0.00000000E+0, 0.89191400E+3, 0.351E+3, 0.390E+2, 0.29315000E+1, 0.00000000E+0, 0.80449370E+3, + 0.351E+3, 0.400E+2, 0.29315000E+1, 0.00000000E+0, 0.73528120E+3, 0.351E+3, 0.410E+2, + 0.29315000E+1, 0.00000000E+0, 0.56979780E+3, 0.351E+3, 0.420E+2, 0.29315000E+1, 0.00000000E+0, + 0.63489910E+3, 0.351E+3, 0.430E+2, 0.29315000E+1, 0.00000000E+0, 0.48565920E+3, 0.351E+3, + 0.440E+2, 0.29315000E+1, 0.00000000E+0, 0.53091130E+3, 0.351E+3, 0.450E+2, 0.29315000E+1, + 0.00000000E+0, 0.49300840E+3, 0.351E+3, 0.460E+2, 0.29315000E+1, 0.00000000E+0, 0.41066850E+3, + 0.351E+3, 0.470E+2, 0.29315000E+1, 0.00000000E+0, 0.43517770E+3, 0.351E+3, 0.480E+2, + 0.29315000E+1, 0.00000000E+0, 0.54381980E+3, 0.351E+3, 0.490E+2, 0.29315000E+1, 0.00000000E+0, + 0.50566970E+3, 0.351E+3, 0.500E+2, 0.29315000E+1, 0.00000000E+0, 0.45291870E+3, 0.351E+3, + 0.510E+2, 0.29315000E+1, 0.00000000E+0, 0.42141870E+3, 0.351E+3, 0.520E+2, 0.29315000E+1, + 0.00000000E+0, 0.38213760E+3, 0.351E+3, 0.530E+2, 0.29315000E+1, 0.00000000E+0, 0.34444580E+3, + 0.351E+3, 0.540E+2, 0.29315000E+1, 0.00000000E+0, 0.13865806E+4, 0.351E+3, 0.550E+2, + 0.29315000E+1, 0.00000000E+0, 0.12877738E+4, 0.351E+3, 0.560E+2, 0.29315000E+1, 0.00000000E+0, + 0.11381053E+4, 0.351E+3, 0.570E+2, 0.29315000E+1, 0.00000000E+0, 0.53448010E+3, 0.351E+3, + 0.580E+2, 0.29315000E+1, 0.27991000E+1, 0.11432636E+4, 0.351E+3, 0.590E+2, 0.29315000E+1, + 0.00000000E+0, 0.10988818E+4, 0.351E+3, 0.600E+2, 0.29315000E+1, 0.00000000E+0, 0.10716137E+4, + 0.351E+3, 0.610E+2, 0.29315000E+1, 0.00000000E+0, 0.10465046E+4, 0.351E+3, 0.620E+2, + 0.29315000E+1, 0.00000000E+0, 0.10242500E+4, 0.351E+3, 0.630E+2, 0.29315000E+1, 0.00000000E+0, + 0.81059520E+3, 0.351E+3, 0.640E+2, 0.29315000E+1, 0.00000000E+0, 0.90407560E+3, 0.351E+3, + 0.650E+2, 0.29315000E+1, 0.00000000E+0, 0.87295200E+3, 0.351E+3, 0.660E+2, 0.29315000E+1, + 0.00000000E+0, 0.92519070E+3, 0.351E+3, 0.670E+2, 0.29315000E+1, 0.00000000E+0, 0.90570520E+3, + 0.351E+3, 0.680E+2, 0.29315000E+1, 0.00000000E+0, 0.88820360E+3, 0.351E+3, 0.690E+2, + 0.29315000E+1, 0.00000000E+0, 0.87758750E+3, 0.351E+3, 0.700E+2, 0.29315000E+1, 0.00000000E+0, + 0.74266050E+3, 0.351E+3, 0.710E+2, 0.29315000E+1, 0.00000000E+0, 0.73464070E+3, 0.351E+3, + 0.720E+2, 0.29315000E+1, 0.00000000E+0, 0.67268970E+3, 0.351E+3, 0.730E+2, 0.29315000E+1, + 0.00000000E+0, 0.56941570E+3, 0.351E+3, 0.740E+2, 0.29315000E+1, 0.00000000E+0, 0.58004130E+3, + 0.351E+3, 0.750E+2, 0.29315000E+1, 0.00000000E+0, 0.52713410E+3, 0.351E+3, 0.760E+2, + 0.29315000E+1, 0.00000000E+0, 0.48380280E+3, 0.351E+3, 0.770E+2, 0.29315000E+1, 0.00000000E+0, + 0.40272830E+3, 0.351E+3, 0.780E+2, 0.29315000E+1, 0.00000000E+0, 0.37658500E+3, 0.351E+3, + 0.790E+2, 0.29315000E+1, 0.00000000E+0, 0.38784150E+3, 0.351E+3, 0.800E+2, 0.29315000E+1, + 0.00000000E+0, 0.55900180E+3, 0.351E+3, 0.810E+2, 0.29315000E+1, 0.00000000E+0, 0.54891370E+3, + 0.351E+3, 0.820E+2, 0.29315000E+1, 0.00000000E+0, 0.50669310E+3, 0.351E+3, 0.830E+2, + 0.29315000E+1, 0.00000000E+0, 0.48446800E+3, 0.351E+3, 0.840E+2, 0.29315000E+1, 0.00000000E+0, + 0.44838730E+3, 0.351E+3, 0.850E+2, 0.29315000E+1, 0.00000000E+0, 0.41197350E+3, 0.351E+3, + 0.860E+2, 0.29315000E+1, 0.00000000E+0, 0.13155898E+4, 0.351E+3, 0.870E+2, 0.29315000E+1, + 0.00000000E+0, 0.12773025E+4, 0.351E+3, 0.880E+2, 0.29315000E+1, 0.00000000E+0, 0.11352332E+4, + 0.351E+3, 0.890E+2, 0.29315000E+1, 0.00000000E+0, 0.10262943E+4, 0.351E+3, 0.900E+2, + 0.29315000E+1, 0.00000000E+0, 0.10158964E+4, 0.351E+3, 0.910E+2, 0.29315000E+1, 0.00000000E+0, + 0.98378580E+3, 0.351E+3, 0.920E+2, 0.29315000E+1, 0.00000000E+0, 0.10091230E+4, 0.351E+3, + 0.930E+2, 0.29315000E+1, 0.00000000E+0, 0.97791270E+3, 0.351E+3, 0.940E+2, 0.29315000E+1, + 0.00000000E+0, 0.56194600E+2, 0.351E+3, 0.101E+3, 0.29315000E+1, 0.00000000E+0, 0.17902740E+3, + 0.351E+3, 0.103E+3, 0.29315000E+1, 0.98650000E+0, 0.22888940E+3, 0.351E+3, 0.104E+3, + 0.29315000E+1, 0.98080000E+0, 0.17677430E+3, 0.351E+3, 0.105E+3, 0.29315000E+1, 0.97060000E+0, + 0.13392400E+3, 0.351E+3, 0.106E+3, 0.29315000E+1, 0.98680000E+0, 0.93656200E+2, 0.351E+3, + 0.107E+3, 0.29315000E+1, 0.99440000E+0, 0.68514100E+2, 0.351E+3, 0.108E+3, 0.29315000E+1, + 0.99250000E+0, 0.47383500E+2, 0.351E+3, 0.109E+3, 0.29315000E+1, 0.99820000E+0, 0.26106680E+3, + 0.351E+3, 0.111E+3, 0.29315000E+1, 0.96840000E+0, 0.40330920E+3, 0.351E+3, 0.112E+3, + 0.29315000E+1, 0.96280000E+0, 0.41097880E+3, 0.351E+3, 0.113E+3, 0.29315000E+1, 0.96480000E+0, + 0.33303840E+3, 0.351E+3, 0.114E+3, 0.29315000E+1, 0.95070000E+0, 0.27432020E+3, 0.351E+3, + 0.115E+3, 0.29315000E+1, 0.99470000E+0, 0.23280570E+3, 0.351E+3, 0.116E+3, 0.29315000E+1, + 0.99480000E+0, 0.19097240E+3, 0.351E+3, 0.117E+3, 0.29315000E+1, 0.99720000E+0, 0.36149280E+3, + 0.351E+3, 0.119E+3, 0.29315000E+1, 0.97670000E+0, 0.68031840E+3, 0.351E+3, 0.120E+3, + 0.29315000E+1, 0.98310000E+0, 0.36424560E+3, 0.351E+3, 0.121E+3, 0.29315000E+1, 0.18627000E+1, + 0.35170890E+3, 0.351E+3, 0.122E+3, 0.29315000E+1, 0.18299000E+1, 0.34463160E+3, 0.351E+3, + 0.123E+3, 0.29315000E+1, 0.19138000E+1, 0.34115480E+3, 0.351E+3, 0.124E+3, 0.29315000E+1, + 0.18269000E+1, 0.31519770E+3, 0.351E+3, 0.125E+3, 0.29315000E+1, 0.16406000E+1, 0.29203450E+3, + 0.351E+3, 0.126E+3, 0.29315000E+1, 0.16483000E+1, 0.27857600E+3, 0.351E+3, 0.127E+3, + 0.29315000E+1, 0.17149000E+1, 0.27225780E+3, 0.351E+3, 0.128E+3, 0.29315000E+1, 0.17937000E+1, + 0.26817480E+3, 0.351E+3, 0.129E+3, 0.29315000E+1, 0.95760000E+0, 0.25301490E+3, 0.351E+3, + 0.130E+3, 0.29315000E+1, 0.19419000E+1, 0.40901750E+3, 0.351E+3, 0.131E+3, 0.29315000E+1, + 0.96010000E+0, 0.36162180E+3, 0.351E+3, 0.132E+3, 0.29315000E+1, 0.94340000E+0, 0.32554390E+3, + 0.351E+3, 0.133E+3, 0.29315000E+1, 0.98890000E+0, 0.29810330E+3, 0.351E+3, 0.134E+3, + 0.29315000E+1, 0.99010000E+0, 0.26336490E+3, 0.351E+3, 0.135E+3, 0.29315000E+1, 0.99740000E+0, + 0.43194800E+3, 0.351E+3, 0.137E+3, 0.29315000E+1, 0.97380000E+0, 0.82711060E+3, 0.351E+3, + 0.138E+3, 0.29315000E+1, 0.98010000E+0, 0.63960320E+3, 0.351E+3, 0.139E+3, 0.29315000E+1, + 0.19153000E+1, 0.48140710E+3, 0.351E+3, 0.140E+3, 0.29315000E+1, 0.19355000E+1, 0.48607860E+3, + 0.351E+3, 0.141E+3, 0.29315000E+1, 0.19545000E+1, 0.45385780E+3, 0.351E+3, 0.142E+3, + 0.29315000E+1, 0.19420000E+1, 0.50629760E+3, 0.351E+3, 0.143E+3, 0.29315000E+1, 0.16682000E+1, + 0.39707420E+3, 0.351E+3, 0.144E+3, 0.29315000E+1, 0.18584000E+1, 0.37157400E+3, 0.351E+3, + 0.145E+3, 0.29315000E+1, 0.19003000E+1, 0.34525330E+3, 0.351E+3, 0.146E+3, 0.29315000E+1, + 0.18630000E+1, 0.33380120E+3, 0.351E+3, 0.147E+3, 0.29315000E+1, 0.96790000E+0, 0.33121190E+3, + 0.351E+3, 0.148E+3, 0.29315000E+1, 0.19539000E+1, 0.51938200E+3, 0.351E+3, 0.149E+3, + 0.29315000E+1, 0.96330000E+0, 0.47251890E+3, 0.351E+3, 0.150E+3, 0.29315000E+1, 0.95140000E+0, + 0.44417700E+3, 0.351E+3, 0.151E+3, 0.29315000E+1, 0.97490000E+0, 0.42118710E+3, 0.351E+3, + 0.152E+3, 0.29315000E+1, 0.98110000E+0, 0.38570840E+3, 0.351E+3, 0.153E+3, 0.29315000E+1, + 0.99680000E+0, 0.51302910E+3, 0.351E+3, 0.155E+3, 0.29315000E+1, 0.99090000E+0, 0.10697955E+4, + 0.351E+3, 0.156E+3, 0.29315000E+1, 0.97970000E+0, 0.80869310E+3, 0.351E+3, 0.157E+3, + 0.29315000E+1, 0.19373000E+1, 0.51850620E+3, 0.351E+3, 0.159E+3, 0.29315000E+1, 0.29425000E+1, + 0.50780630E+3, 0.351E+3, 0.160E+3, 0.29315000E+1, 0.29455000E+1, 0.49182970E+3, 0.351E+3, + 0.161E+3, 0.29315000E+1, 0.29413000E+1, 0.49386870E+3, 0.351E+3, 0.162E+3, 0.29315000E+1, + 0.29300000E+1, 0.47482940E+3, 0.351E+3, 0.163E+3, 0.29315000E+1, 0.18286000E+1, 0.49689070E+3, + 0.351E+3, 0.164E+3, 0.29315000E+1, 0.28732000E+1, 0.46699360E+3, 0.351E+3, 0.165E+3, + 0.29315000E+1, 0.29086000E+1, 0.47450580E+3, 0.351E+3, 0.166E+3, 0.29315000E+1, 0.28965000E+1, + 0.44355070E+3, 0.351E+3, 0.167E+3, 0.29315000E+1, 0.29242000E+1, 0.43101790E+3, 0.351E+3, + 0.168E+3, 0.29315000E+1, 0.29282000E+1, 0.42817260E+3, 0.351E+3, 0.169E+3, 0.29315000E+1, + 0.29246000E+1, 0.44962020E+3, 0.351E+3, 0.170E+3, 0.29315000E+1, 0.28482000E+1, 0.41401670E+3, + 0.351E+3, 0.171E+3, 0.29315000E+1, 0.29219000E+1, 0.55586120E+3, 0.351E+3, 0.172E+3, + 0.29315000E+1, 0.19254000E+1, 0.51747490E+3, 0.351E+3, 0.173E+3, 0.29315000E+1, 0.19459000E+1, + 0.47362850E+3, 0.351E+3, 0.174E+3, 0.29315000E+1, 0.19292000E+1, 0.47790620E+3, 0.351E+3, + 0.175E+3, 0.29315000E+1, 0.18104000E+1, 0.42136930E+3, 0.351E+3, 0.176E+3, 0.29315000E+1, + 0.18858000E+1, 0.39678090E+3, 0.351E+3, 0.177E+3, 0.29315000E+1, 0.18648000E+1, 0.37918850E+3, + 0.351E+3, 0.178E+3, 0.29315000E+1, 0.19188000E+1, 0.36245620E+3, 0.351E+3, 0.179E+3, + 0.29315000E+1, 0.98460000E+0, 0.35113700E+3, 0.351E+3, 0.180E+3, 0.29315000E+1, 0.19896000E+1, + 0.55815810E+3, 0.351E+3, 0.181E+3, 0.29315000E+1, 0.92670000E+0, 0.51151250E+3, 0.351E+3, + 0.182E+3, 0.29315000E+1, 0.93830000E+0, 0.49747420E+3, 0.351E+3, 0.183E+3, 0.29315000E+1, + 0.98200000E+0, 0.48477400E+3, 0.351E+3, 0.184E+3, 0.29315000E+1, 0.98150000E+0, 0.45383680E+3, + 0.351E+3, 0.185E+3, 0.29315000E+1, 0.99540000E+0, 0.57800010E+3, 0.351E+3, 0.187E+3, + 0.29315000E+1, 0.97050000E+0, 0.10681281E+4, 0.351E+3, 0.188E+3, 0.29315000E+1, 0.96620000E+0, + 0.61348930E+3, 0.351E+3, 0.189E+3, 0.29315000E+1, 0.29070000E+1, 0.70481290E+3, 0.351E+3, + 0.190E+3, 0.29315000E+1, 0.28844000E+1, 0.63107130E+3, 0.351E+3, 0.191E+3, 0.29315000E+1, + 0.28738000E+1, 0.55973100E+3, 0.351E+3, 0.192E+3, 0.29315000E+1, 0.28878000E+1, 0.53903440E+3, + 0.351E+3, 0.193E+3, 0.29315000E+1, 0.29095000E+1, 0.64211740E+3, 0.351E+3, 0.194E+3, + 0.29315000E+1, 0.19209000E+1, 0.15112150E+3, 0.351E+3, 0.204E+3, 0.29315000E+1, 0.19697000E+1, + 0.14873950E+3, 0.351E+3, 0.205E+3, 0.29315000E+1, 0.19441000E+1, 0.10957100E+3, 0.351E+3, + 0.206E+3, 0.29315000E+1, 0.19985000E+1, 0.87995800E+2, 0.351E+3, 0.207E+3, 0.29315000E+1, + 0.20143000E+1, 0.60520900E+2, 0.351E+3, 0.208E+3, 0.29315000E+1, 0.19887000E+1, 0.26667450E+3, + 0.351E+3, 0.212E+3, 0.29315000E+1, 0.19496000E+1, 0.32197480E+3, 0.351E+3, 0.213E+3, + 0.29315000E+1, 0.19311000E+1, 0.31012840E+3, 0.351E+3, 0.214E+3, 0.29315000E+1, 0.19435000E+1, + 0.27048000E+3, 0.351E+3, 0.215E+3, 0.29315000E+1, 0.20102000E+1, 0.22811080E+3, 0.351E+3, + 0.216E+3, 0.29315000E+1, 0.19903000E+1, 0.37364230E+3, 0.351E+3, 0.220E+3, 0.29315000E+1, + 0.19349000E+1, 0.36026270E+3, 0.351E+3, 0.221E+3, 0.29315000E+1, 0.28999000E+1, 0.36478380E+3, + 0.351E+3, 0.222E+3, 0.29315000E+1, 0.38675000E+1, 0.33375970E+3, 0.351E+3, 0.223E+3, + 0.29315000E+1, 0.29110000E+1, 0.25258170E+3, 0.351E+3, 0.224E+3, 0.29315000E+1, 0.10619100E+2, + 0.21675670E+3, 0.351E+3, 0.225E+3, 0.29315000E+1, 0.98849000E+1, 0.21269690E+3, 0.351E+3, + 0.226E+3, 0.29315000E+1, 0.91376000E+1, 0.24819240E+3, 0.351E+3, 0.227E+3, 0.29315000E+1, + 0.29263000E+1, 0.23156140E+3, 0.351E+3, 0.228E+3, 0.29315000E+1, 0.65458000E+1, 0.32593780E+3, + 0.351E+3, 0.231E+3, 0.29315000E+1, 0.19315000E+1, 0.34461890E+3, 0.351E+3, 0.232E+3, + 0.29315000E+1, 0.19447000E+1, 0.31716790E+3, 0.351E+3, 0.233E+3, 0.29315000E+1, 0.19793000E+1, + 0.29578510E+3, 0.351E+3, 0.234E+3, 0.29315000E+1, 0.19812000E+1, 0.44775000E+3, 0.351E+3, + 0.238E+3, 0.29315000E+1, 0.19143000E+1, 0.43282190E+3, 0.351E+3, 0.239E+3, 0.29315000E+1, + 0.28903000E+1, 0.43705000E+3, 0.351E+3, 0.240E+3, 0.29315000E+1, 0.39106000E+1, 0.42243200E+3, + 0.351E+3, 0.241E+3, 0.29315000E+1, 0.29225000E+1, 0.37466630E+3, 0.351E+3, 0.242E+3, + 0.29315000E+1, 0.11055600E+2, 0.33151190E+3, 0.351E+3, 0.243E+3, 0.29315000E+1, 0.95402000E+1, + 0.31355000E+3, 0.351E+3, 0.244E+3, 0.29315000E+1, 0.88895000E+1, 0.31846020E+3, 0.351E+3, + 0.245E+3, 0.29315000E+1, 0.29696000E+1, 0.33242910E+3, 0.351E+3, 0.246E+3, 0.29315000E+1, + 0.57095000E+1, 0.42067140E+3, 0.351E+3, 0.249E+3, 0.29315000E+1, 0.19378000E+1, 0.45728600E+3, + 0.351E+3, 0.250E+3, 0.29315000E+1, 0.19505000E+1, 0.43233570E+3, 0.351E+3, 0.251E+3, + 0.29315000E+1, 0.19523000E+1, 0.41789910E+3, 0.351E+3, 0.252E+3, 0.29315000E+1, 0.19639000E+1, + 0.54209840E+3, 0.351E+3, 0.256E+3, 0.29315000E+1, 0.18467000E+1, 0.56322280E+3, 0.351E+3, + 0.257E+3, 0.29315000E+1, 0.29175000E+1, 0.41908730E+3, 0.351E+3, 0.272E+3, 0.29315000E+1, + 0.38840000E+1, 0.43700180E+3, 0.351E+3, 0.273E+3, 0.29315000E+1, 0.28988000E+1, 0.40713540E+3, + 0.351E+3, 0.274E+3, 0.29315000E+1, 0.10915300E+2, 0.37060120E+3, 0.351E+3, 0.275E+3, + 0.29315000E+1, 0.98054000E+1, 0.34925650E+3, 0.351E+3, 0.276E+3, 0.29315000E+1, 0.91527000E+1, + 0.35516130E+3, 0.351E+3, 0.277E+3, 0.29315000E+1, 0.29424000E+1, 0.37350160E+3, 0.351E+3, + 0.278E+3, 0.29315000E+1, 0.66669000E+1, 0.45030970E+3, 0.351E+3, 0.281E+3, 0.29315000E+1, + 0.19302000E+1, 0.47607850E+3, 0.351E+3, 0.282E+3, 0.29315000E+1, 0.19356000E+1, 0.48592250E+3, + 0.351E+3, 0.283E+3, 0.29315000E+1, 0.19655000E+1, 0.48291440E+3, 0.351E+3, 0.284E+3, + 0.29315000E+1, 0.19639000E+1, 0.59698270E+3, 0.351E+3, 0.288E+3, 0.29315000E+1, 0.18075000E+1, + 0.11375420E+3, 0.351E+3, 0.305E+3, 0.29315000E+1, 0.29128000E+1, 0.10251480E+3, 0.351E+3, + 0.306E+3, 0.29315000E+1, 0.29987000E+1, 0.77544000E+2, 0.351E+3, 0.307E+3, 0.29315000E+1, + 0.29903000E+1, 0.25247130E+3, 0.351E+3, 0.313E+3, 0.29315000E+1, 0.29146000E+1, 0.30196690E+3, + 0.351E+3, 0.314E+3, 0.29315000E+1, 0.29407000E+1, 0.25132430E+3, 0.351E+3, 0.315E+3, + 0.29315000E+1, 0.29859000E+1, 0.22165120E+3, 0.351E+3, 0.327E+3, 0.29315000E+1, 0.77785000E+1, + 0.24237210E+3, 0.351E+3, 0.328E+3, 0.29315000E+1, 0.62918000E+1, 0.26809680E+3, 0.351E+3, + 0.331E+3, 0.29315000E+1, 0.29233000E+1, 0.30954100E+3, 0.351E+3, 0.332E+3, 0.29315000E+1, + 0.29186000E+1, 0.30575380E+3, 0.351E+3, 0.333E+3, 0.29315000E+1, 0.29709000E+1, 0.36007570E+3, + 0.351E+3, 0.349E+3, 0.29315000E+1, 0.29353000E+1, 0.41300240E+3, 0.351E+3, 0.350E+3, + 0.29315000E+1, 0.29259000E+1, 0.41737900E+3, 0.351E+3, 0.351E+3, 0.29315000E+1, 0.29315000E+1, + 0.34044000E+2, 0.381E+3, 0.100E+1, 0.29420000E+1, 0.91180000E+0, 0.23069600E+2, 0.381E+3, + 0.200E+1, 0.29420000E+1, 0.00000000E+0, 0.48987970E+3, 0.381E+3, 0.300E+1, 0.29420000E+1, + 0.00000000E+0, 0.29240300E+3, 0.381E+3, 0.400E+1, 0.29420000E+1, 0.00000000E+0, 0.20096210E+3, + 0.381E+3, 0.500E+1, 0.29420000E+1, 0.00000000E+0, 0.13805320E+3, 0.381E+3, 0.600E+1, + 0.29420000E+1, 0.00000000E+0, 0.97883500E+2, 0.381E+3, 0.700E+1, 0.29420000E+1, 0.00000000E+0, + 0.74909600E+2, 0.381E+3, 0.800E+1, 0.29420000E+1, 0.00000000E+0, 0.57318900E+2, 0.381E+3, + 0.900E+1, 0.29420000E+1, 0.00000000E+0, 0.44478100E+2, 0.381E+3, 0.100E+2, 0.29420000E+1, + 0.00000000E+0, 0.58737390E+3, 0.381E+3, 0.110E+2, 0.29420000E+1, 0.00000000E+0, 0.46339590E+3, + 0.381E+3, 0.120E+2, 0.29420000E+1, 0.00000000E+0, 0.43142990E+3, 0.381E+3, 0.130E+2, + 0.29420000E+1, 0.00000000E+0, 0.34462380E+3, 0.381E+3, 0.140E+2, 0.29420000E+1, 0.00000000E+0, + 0.27203200E+3, 0.381E+3, 0.150E+2, 0.29420000E+1, 0.00000000E+0, 0.22771370E+3, 0.381E+3, + 0.160E+2, 0.29420000E+1, 0.00000000E+0, 0.18762390E+3, 0.381E+3, 0.170E+2, 0.29420000E+1, + 0.00000000E+0, 0.15474190E+3, 0.381E+3, 0.180E+2, 0.29420000E+1, 0.00000000E+0, 0.95974420E+3, + 0.381E+3, 0.190E+2, 0.29420000E+1, 0.00000000E+0, 0.80685000E+3, 0.381E+3, 0.200E+2, + 0.29420000E+1, 0.00000000E+0, 0.66951760E+3, 0.381E+3, 0.210E+2, 0.29420000E+1, 0.00000000E+0, + 0.64952300E+3, 0.381E+3, 0.220E+2, 0.29420000E+1, 0.00000000E+0, 0.59639240E+3, 0.381E+3, + 0.230E+2, 0.29420000E+1, 0.00000000E+0, 0.47075810E+3, 0.381E+3, 0.240E+2, 0.29420000E+1, + 0.00000000E+0, 0.51551420E+3, 0.381E+3, 0.250E+2, 0.29420000E+1, 0.00000000E+0, 0.40565730E+3, + 0.381E+3, 0.260E+2, 0.29420000E+1, 0.00000000E+0, 0.43161180E+3, 0.381E+3, 0.270E+2, + 0.29420000E+1, 0.00000000E+0, 0.44337980E+3, 0.381E+3, 0.280E+2, 0.29420000E+1, 0.00000000E+0, + 0.34075230E+3, 0.381E+3, 0.290E+2, 0.29420000E+1, 0.00000000E+0, 0.35207290E+3, 0.381E+3, + 0.300E+2, 0.29420000E+1, 0.00000000E+0, 0.41543610E+3, 0.381E+3, 0.310E+2, 0.29420000E+1, + 0.00000000E+0, 0.37009550E+3, 0.381E+3, 0.320E+2, 0.29420000E+1, 0.00000000E+0, 0.31876960E+3, + 0.381E+3, 0.330E+2, 0.29420000E+1, 0.00000000E+0, 0.28790150E+3, 0.381E+3, 0.340E+2, + 0.29420000E+1, 0.00000000E+0, 0.25371080E+3, 0.381E+3, 0.350E+2, 0.29420000E+1, 0.00000000E+0, + 0.22213540E+3, 0.381E+3, 0.360E+2, 0.29420000E+1, 0.00000000E+0, 0.10781354E+4, 0.381E+3, + 0.370E+2, 0.29420000E+1, 0.00000000E+0, 0.96112990E+3, 0.381E+3, 0.380E+2, 0.29420000E+1, + 0.00000000E+0, 0.84864220E+3, 0.381E+3, 0.390E+2, 0.29420000E+1, 0.00000000E+0, 0.76669670E+3, + 0.381E+3, 0.400E+2, 0.29420000E+1, 0.00000000E+0, 0.70169050E+3, 0.381E+3, 0.410E+2, + 0.29420000E+1, 0.00000000E+0, 0.54556530E+3, 0.381E+3, 0.420E+2, 0.29420000E+1, 0.00000000E+0, + 0.60711050E+3, 0.381E+3, 0.430E+2, 0.29420000E+1, 0.00000000E+0, 0.46612980E+3, 0.381E+3, + 0.440E+2, 0.29420000E+1, 0.00000000E+0, 0.50894760E+3, 0.381E+3, 0.450E+2, 0.29420000E+1, + 0.00000000E+0, 0.47308430E+3, 0.381E+3, 0.460E+2, 0.29420000E+1, 0.00000000E+0, 0.39480510E+3, + 0.381E+3, 0.470E+2, 0.29420000E+1, 0.00000000E+0, 0.41818980E+3, 0.381E+3, 0.480E+2, + 0.29420000E+1, 0.00000000E+0, 0.52081600E+3, 0.381E+3, 0.490E+2, 0.29420000E+1, 0.00000000E+0, + 0.48532990E+3, 0.381E+3, 0.500E+2, 0.29420000E+1, 0.00000000E+0, 0.43604710E+3, 0.381E+3, + 0.510E+2, 0.29420000E+1, 0.00000000E+0, 0.40666470E+3, 0.381E+3, 0.520E+2, 0.29420000E+1, + 0.00000000E+0, 0.36983570E+3, 0.381E+3, 0.530E+2, 0.29420000E+1, 0.00000000E+0, 0.33441780E+3, + 0.381E+3, 0.540E+2, 0.29420000E+1, 0.00000000E+0, 0.13141925E+4, 0.381E+3, 0.550E+2, + 0.29420000E+1, 0.00000000E+0, 0.12227209E+4, 0.381E+3, 0.560E+2, 0.29420000E+1, 0.00000000E+0, + 0.10825707E+4, 0.381E+3, 0.570E+2, 0.29420000E+1, 0.00000000E+0, 0.51466410E+3, 0.381E+3, + 0.580E+2, 0.29420000E+1, 0.27991000E+1, 0.10866848E+4, 0.381E+3, 0.590E+2, 0.29420000E+1, + 0.00000000E+0, 0.10447574E+4, 0.381E+3, 0.600E+2, 0.29420000E+1, 0.00000000E+0, 0.10188963E+4, + 0.381E+3, 0.610E+2, 0.29420000E+1, 0.00000000E+0, 0.99506410E+3, 0.381E+3, 0.620E+2, + 0.29420000E+1, 0.00000000E+0, 0.97393920E+3, 0.381E+3, 0.630E+2, 0.29420000E+1, 0.00000000E+0, + 0.77328240E+3, 0.381E+3, 0.640E+2, 0.29420000E+1, 0.00000000E+0, 0.86029910E+3, 0.381E+3, + 0.650E+2, 0.29420000E+1, 0.00000000E+0, 0.83099980E+3, 0.381E+3, 0.660E+2, 0.29420000E+1, + 0.00000000E+0, 0.88007510E+3, 0.381E+3, 0.670E+2, 0.29420000E+1, 0.00000000E+0, 0.86153880E+3, + 0.381E+3, 0.680E+2, 0.29420000E+1, 0.00000000E+0, 0.84491510E+3, 0.381E+3, 0.690E+2, + 0.29420000E+1, 0.00000000E+0, 0.83467880E+3, 0.381E+3, 0.700E+2, 0.29420000E+1, 0.00000000E+0, + 0.70786620E+3, 0.381E+3, 0.710E+2, 0.29420000E+1, 0.00000000E+0, 0.70135370E+3, 0.381E+3, + 0.720E+2, 0.29420000E+1, 0.00000000E+0, 0.64346570E+3, 0.381E+3, 0.730E+2, 0.29420000E+1, + 0.00000000E+0, 0.54618300E+3, 0.381E+3, 0.740E+2, 0.29420000E+1, 0.00000000E+0, 0.55658840E+3, + 0.381E+3, 0.750E+2, 0.29420000E+1, 0.00000000E+0, 0.50684330E+3, 0.381E+3, 0.760E+2, + 0.29420000E+1, 0.00000000E+0, 0.46602790E+3, 0.381E+3, 0.770E+2, 0.29420000E+1, 0.00000000E+0, + 0.38918560E+3, 0.381E+3, 0.780E+2, 0.29420000E+1, 0.00000000E+0, 0.36440110E+3, 0.381E+3, + 0.790E+2, 0.29420000E+1, 0.00000000E+0, 0.37525010E+3, 0.381E+3, 0.800E+2, 0.29420000E+1, + 0.00000000E+0, 0.53671560E+3, 0.381E+3, 0.810E+2, 0.29420000E+1, 0.00000000E+0, 0.52765960E+3, + 0.381E+3, 0.820E+2, 0.29420000E+1, 0.00000000E+0, 0.48826870E+3, 0.381E+3, 0.830E+2, + 0.29420000E+1, 0.00000000E+0, 0.46765830E+3, 0.381E+3, 0.840E+2, 0.29420000E+1, 0.00000000E+0, + 0.43390630E+3, 0.381E+3, 0.850E+2, 0.29420000E+1, 0.00000000E+0, 0.39973560E+3, 0.381E+3, + 0.860E+2, 0.29420000E+1, 0.00000000E+0, 0.12488786E+4, 0.381E+3, 0.870E+2, 0.29420000E+1, + 0.00000000E+0, 0.12142011E+4, 0.381E+3, 0.880E+2, 0.29420000E+1, 0.00000000E+0, 0.10810636E+4, + 0.381E+3, 0.890E+2, 0.29420000E+1, 0.00000000E+0, 0.98016620E+3, 0.381E+3, 0.900E+2, + 0.29420000E+1, 0.00000000E+0, 0.96970180E+3, 0.381E+3, 0.910E+2, 0.29420000E+1, 0.00000000E+0, + 0.93922300E+3, 0.381E+3, 0.920E+2, 0.29420000E+1, 0.00000000E+0, 0.96210980E+3, 0.381E+3, + 0.930E+2, 0.29420000E+1, 0.00000000E+0, 0.93257400E+3, 0.381E+3, 0.940E+2, 0.29420000E+1, + 0.00000000E+0, 0.54112100E+2, 0.381E+3, 0.101E+3, 0.29420000E+1, 0.00000000E+0, 0.17052180E+3, + 0.381E+3, 0.103E+3, 0.29420000E+1, 0.98650000E+0, 0.21838760E+3, 0.381E+3, 0.104E+3, + 0.29420000E+1, 0.98080000E+0, 0.16984800E+3, 0.381E+3, 0.105E+3, 0.29420000E+1, 0.97060000E+0, + 0.12953340E+3, 0.381E+3, 0.106E+3, 0.29420000E+1, 0.98680000E+0, 0.91360600E+2, 0.381E+3, + 0.107E+3, 0.29420000E+1, 0.99440000E+0, 0.67384900E+2, 0.381E+3, 0.108E+3, 0.29420000E+1, + 0.99250000E+0, 0.47131600E+2, 0.381E+3, 0.109E+3, 0.29420000E+1, 0.99820000E+0, 0.24874970E+3, + 0.381E+3, 0.111E+3, 0.29420000E+1, 0.96840000E+0, 0.38382790E+3, 0.381E+3, 0.112E+3, + 0.29420000E+1, 0.96280000E+0, 0.39201850E+3, 0.381E+3, 0.113E+3, 0.29420000E+1, 0.96480000E+0, + 0.31922290E+3, 0.381E+3, 0.114E+3, 0.29420000E+1, 0.95070000E+0, 0.26420730E+3, 0.381E+3, + 0.115E+3, 0.29420000E+1, 0.99470000E+0, 0.22519300E+3, 0.381E+3, 0.116E+3, 0.29420000E+1, + 0.99480000E+0, 0.18567430E+3, 0.381E+3, 0.117E+3, 0.29420000E+1, 0.99720000E+0, 0.34642790E+3, + 0.381E+3, 0.119E+3, 0.29420000E+1, 0.97670000E+0, 0.64689750E+3, 0.381E+3, 0.120E+3, + 0.29420000E+1, 0.98310000E+0, 0.34969760E+3, 0.381E+3, 0.121E+3, 0.29420000E+1, 0.18627000E+1, + 0.33785900E+3, 0.381E+3, 0.122E+3, 0.29420000E+1, 0.18299000E+1, 0.33110740E+3, 0.381E+3, + 0.123E+3, 0.29420000E+1, 0.19138000E+1, 0.32768960E+3, 0.381E+3, 0.124E+3, 0.29420000E+1, + 0.18269000E+1, 0.30324930E+3, 0.381E+3, 0.125E+3, 0.29420000E+1, 0.16406000E+1, 0.28126900E+3, + 0.381E+3, 0.126E+3, 0.29420000E+1, 0.16483000E+1, 0.26841200E+3, 0.381E+3, 0.127E+3, + 0.29420000E+1, 0.17149000E+1, 0.26230550E+3, 0.381E+3, 0.128E+3, 0.29420000E+1, 0.17937000E+1, + 0.25806750E+3, 0.381E+3, 0.129E+3, 0.29420000E+1, 0.95760000E+0, 0.24404160E+3, 0.381E+3, + 0.130E+3, 0.29420000E+1, 0.19419000E+1, 0.39123290E+3, 0.381E+3, 0.131E+3, 0.29420000E+1, + 0.96010000E+0, 0.34713060E+3, 0.381E+3, 0.132E+3, 0.29420000E+1, 0.94340000E+0, 0.31356550E+3, + 0.381E+3, 0.133E+3, 0.29420000E+1, 0.98890000E+0, 0.28799690E+3, 0.381E+3, 0.134E+3, + 0.29420000E+1, 0.99010000E+0, 0.25539640E+3, 0.381E+3, 0.135E+3, 0.29420000E+1, 0.99740000E+0, + 0.41451570E+3, 0.381E+3, 0.137E+3, 0.29420000E+1, 0.97380000E+0, 0.78676620E+3, 0.381E+3, + 0.138E+3, 0.29420000E+1, 0.98010000E+0, 0.61108840E+3, 0.381E+3, 0.139E+3, 0.29420000E+1, + 0.19153000E+1, 0.46240460E+3, 0.381E+3, 0.140E+3, 0.29420000E+1, 0.19355000E+1, 0.46695430E+3, + 0.381E+3, 0.141E+3, 0.29420000E+1, 0.19545000E+1, 0.43660630E+3, 0.381E+3, 0.142E+3, + 0.29420000E+1, 0.19420000E+1, 0.48596370E+3, 0.381E+3, 0.143E+3, 0.29420000E+1, 0.16682000E+1, + 0.38300380E+3, 0.381E+3, 0.144E+3, 0.29420000E+1, 0.18584000E+1, 0.35872510E+3, 0.381E+3, + 0.145E+3, 0.29420000E+1, 0.19003000E+1, 0.33367710E+3, 0.381E+3, 0.146E+3, 0.29420000E+1, + 0.18630000E+1, 0.32258500E+3, 0.381E+3, 0.147E+3, 0.29420000E+1, 0.96790000E+0, 0.32032730E+3, + 0.381E+3, 0.148E+3, 0.29420000E+1, 0.19539000E+1, 0.49788730E+3, 0.381E+3, 0.149E+3, + 0.29420000E+1, 0.96330000E+0, 0.45413030E+3, 0.381E+3, 0.150E+3, 0.29420000E+1, 0.95140000E+0, + 0.42784290E+3, 0.381E+3, 0.151E+3, 0.29420000E+1, 0.97490000E+0, 0.40648930E+3, 0.381E+3, + 0.152E+3, 0.29420000E+1, 0.98110000E+0, 0.37325390E+3, 0.381E+3, 0.153E+3, 0.29420000E+1, + 0.99680000E+0, 0.49296130E+3, 0.381E+3, 0.155E+3, 0.29420000E+1, 0.99090000E+0, 0.10173501E+4, + 0.381E+3, 0.156E+3, 0.29420000E+1, 0.97970000E+0, 0.77250690E+3, 0.381E+3, 0.157E+3, + 0.29420000E+1, 0.19373000E+1, 0.49942220E+3, 0.381E+3, 0.159E+3, 0.29420000E+1, 0.29425000E+1, + 0.48915000E+3, 0.381E+3, 0.160E+3, 0.29420000E+1, 0.29455000E+1, 0.47387610E+3, 0.381E+3, + 0.161E+3, 0.29420000E+1, 0.29413000E+1, 0.47562120E+3, 0.381E+3, 0.162E+3, 0.29420000E+1, + 0.29300000E+1, 0.45685930E+3, 0.381E+3, 0.163E+3, 0.29420000E+1, 0.18286000E+1, 0.47832350E+3, + 0.381E+3, 0.164E+3, 0.29420000E+1, 0.28732000E+1, 0.44982470E+3, 0.381E+3, 0.165E+3, + 0.29420000E+1, 0.29086000E+1, 0.45672830E+3, 0.381E+3, 0.166E+3, 0.29420000E+1, 0.28965000E+1, + 0.42739350E+3, 0.381E+3, 0.167E+3, 0.29420000E+1, 0.29242000E+1, 0.41538260E+3, 0.381E+3, + 0.168E+3, 0.29420000E+1, 0.29282000E+1, 0.41256270E+3, 0.381E+3, 0.169E+3, 0.29420000E+1, + 0.29246000E+1, 0.43270380E+3, 0.381E+3, 0.170E+3, 0.29420000E+1, 0.28482000E+1, 0.39897500E+3, + 0.381E+3, 0.171E+3, 0.29420000E+1, 0.29219000E+1, 0.53287050E+3, 0.381E+3, 0.172E+3, + 0.29420000E+1, 0.19254000E+1, 0.49712170E+3, 0.381E+3, 0.173E+3, 0.29420000E+1, 0.19459000E+1, + 0.45606110E+3, 0.381E+3, 0.174E+3, 0.29420000E+1, 0.19292000E+1, 0.45949090E+3, 0.381E+3, + 0.175E+3, 0.29420000E+1, 0.18104000E+1, 0.40710880E+3, 0.381E+3, 0.176E+3, 0.29420000E+1, + 0.18858000E+1, 0.38388990E+3, 0.381E+3, 0.177E+3, 0.29420000E+1, 0.18648000E+1, 0.36723030E+3, + 0.381E+3, 0.178E+3, 0.29420000E+1, 0.19188000E+1, 0.35126140E+3, 0.381E+3, 0.179E+3, + 0.29420000E+1, 0.98460000E+0, 0.34073060E+3, 0.381E+3, 0.180E+3, 0.29420000E+1, 0.19896000E+1, + 0.53610400E+3, 0.381E+3, 0.181E+3, 0.29420000E+1, 0.92670000E+0, 0.49251500E+3, 0.381E+3, + 0.182E+3, 0.29420000E+1, 0.93830000E+0, 0.47966590E+3, 0.381E+3, 0.183E+3, 0.29420000E+1, + 0.98200000E+0, 0.46803600E+3, 0.381E+3, 0.184E+3, 0.29420000E+1, 0.98150000E+0, 0.43913860E+3, + 0.381E+3, 0.185E+3, 0.29420000E+1, 0.99540000E+0, 0.55539950E+3, 0.381E+3, 0.187E+3, + 0.29420000E+1, 0.97050000E+0, 0.10170070E+4, 0.381E+3, 0.188E+3, 0.29420000E+1, 0.96620000E+0, + 0.59069510E+3, 0.381E+3, 0.189E+3, 0.29420000E+1, 0.29070000E+1, 0.67732330E+3, 0.381E+3, + 0.190E+3, 0.29420000E+1, 0.28844000E+1, 0.60753220E+3, 0.381E+3, 0.191E+3, 0.29420000E+1, + 0.28738000E+1, 0.53986600E+3, 0.381E+3, 0.192E+3, 0.29420000E+1, 0.28878000E+1, 0.52021880E+3, + 0.381E+3, 0.193E+3, 0.29420000E+1, 0.29095000E+1, 0.61673560E+3, 0.381E+3, 0.194E+3, + 0.29420000E+1, 0.19209000E+1, 0.14507840E+3, 0.381E+3, 0.204E+3, 0.29420000E+1, 0.19697000E+1, + 0.14327430E+3, 0.381E+3, 0.205E+3, 0.29420000E+1, 0.19441000E+1, 0.10636560E+3, 0.381E+3, + 0.206E+3, 0.29420000E+1, 0.19985000E+1, 0.85946800E+2, 0.381E+3, 0.207E+3, 0.29420000E+1, + 0.20143000E+1, 0.59722700E+2, 0.381E+3, 0.208E+3, 0.29420000E+1, 0.19887000E+1, 0.25519400E+3, + 0.381E+3, 0.212E+3, 0.29420000E+1, 0.19496000E+1, 0.30808810E+3, 0.381E+3, 0.213E+3, + 0.29420000E+1, 0.19311000E+1, 0.29753400E+3, 0.381E+3, 0.214E+3, 0.29420000E+1, 0.19435000E+1, + 0.26049720E+3, 0.381E+3, 0.215E+3, 0.29420000E+1, 0.20102000E+1, 0.22070250E+3, 0.381E+3, + 0.216E+3, 0.29420000E+1, 0.19903000E+1, 0.35843680E+3, 0.381E+3, 0.220E+3, 0.29420000E+1, + 0.19349000E+1, 0.34620560E+3, 0.381E+3, 0.221E+3, 0.29420000E+1, 0.28999000E+1, 0.35064040E+3, + 0.381E+3, 0.222E+3, 0.29420000E+1, 0.38675000E+1, 0.32104220E+3, 0.381E+3, 0.223E+3, + 0.29420000E+1, 0.29110000E+1, 0.24431950E+3, 0.381E+3, 0.224E+3, 0.29420000E+1, 0.10619100E+2, + 0.21030300E+3, 0.381E+3, 0.225E+3, 0.29420000E+1, 0.98849000E+1, 0.20632120E+3, 0.381E+3, + 0.226E+3, 0.29420000E+1, 0.91376000E+1, 0.23960260E+3, 0.381E+3, 0.227E+3, 0.29420000E+1, + 0.29263000E+1, 0.22381460E+3, 0.381E+3, 0.228E+3, 0.29420000E+1, 0.65458000E+1, 0.31290410E+3, + 0.381E+3, 0.231E+3, 0.29420000E+1, 0.19315000E+1, 0.33107290E+3, 0.381E+3, 0.232E+3, + 0.29420000E+1, 0.19447000E+1, 0.30565610E+3, 0.381E+3, 0.233E+3, 0.29420000E+1, 0.19793000E+1, + 0.28580050E+3, 0.381E+3, 0.234E+3, 0.29420000E+1, 0.19812000E+1, 0.42995510E+3, 0.381E+3, + 0.238E+3, 0.29420000E+1, 0.19143000E+1, 0.41647270E+3, 0.381E+3, 0.239E+3, 0.29420000E+1, + 0.28903000E+1, 0.42087950E+3, 0.381E+3, 0.240E+3, 0.29420000E+1, 0.39106000E+1, 0.40706770E+3, + 0.381E+3, 0.241E+3, 0.29420000E+1, 0.29225000E+1, 0.36222600E+3, 0.381E+3, 0.242E+3, + 0.29420000E+1, 0.11055600E+2, 0.32139710E+3, 0.381E+3, 0.243E+3, 0.29420000E+1, 0.95402000E+1, + 0.30435760E+3, 0.381E+3, 0.244E+3, 0.29420000E+1, 0.88895000E+1, 0.30856230E+3, 0.381E+3, + 0.245E+3, 0.29420000E+1, 0.29696000E+1, 0.32173420E+3, 0.381E+3, 0.246E+3, 0.29420000E+1, + 0.57095000E+1, 0.40490970E+3, 0.381E+3, 0.249E+3, 0.29420000E+1, 0.19378000E+1, 0.43980180E+3, + 0.381E+3, 0.250E+3, 0.29420000E+1, 0.19505000E+1, 0.41670500E+3, 0.381E+3, 0.251E+3, + 0.29420000E+1, 0.19523000E+1, 0.40341630E+3, 0.381E+3, 0.252E+3, 0.29420000E+1, 0.19639000E+1, + 0.52107880E+3, 0.381E+3, 0.256E+3, 0.29420000E+1, 0.18467000E+1, 0.54160900E+3, 0.381E+3, + 0.257E+3, 0.29420000E+1, 0.29175000E+1, 0.40413150E+3, 0.381E+3, 0.272E+3, 0.29420000E+1, + 0.38840000E+1, 0.42132440E+3, 0.381E+3, 0.273E+3, 0.29420000E+1, 0.28988000E+1, 0.39364640E+3, + 0.381E+3, 0.274E+3, 0.29420000E+1, 0.10915300E+2, 0.35924180E+3, 0.381E+3, 0.275E+3, + 0.29420000E+1, 0.98054000E+1, 0.33923690E+3, 0.381E+3, 0.276E+3, 0.29420000E+1, 0.91527000E+1, + 0.34453850E+3, 0.381E+3, 0.277E+3, 0.29420000E+1, 0.29424000E+1, 0.36204930E+3, 0.381E+3, + 0.278E+3, 0.29420000E+1, 0.66669000E+1, 0.43455430E+3, 0.381E+3, 0.281E+3, 0.29420000E+1, + 0.19302000E+1, 0.45916510E+3, 0.381E+3, 0.282E+3, 0.29420000E+1, 0.19356000E+1, 0.46885050E+3, + 0.381E+3, 0.283E+3, 0.29420000E+1, 0.19655000E+1, 0.46635820E+3, 0.381E+3, 0.284E+3, + 0.29420000E+1, 0.19639000E+1, 0.57392320E+3, 0.381E+3, 0.288E+3, 0.29420000E+1, 0.18075000E+1, + 0.11015230E+3, 0.381E+3, 0.305E+3, 0.29420000E+1, 0.29128000E+1, 0.99617500E+2, 0.381E+3, + 0.306E+3, 0.29420000E+1, 0.29987000E+1, 0.75930400E+2, 0.381E+3, 0.307E+3, 0.29420000E+1, + 0.29903000E+1, 0.24251390E+3, 0.381E+3, 0.313E+3, 0.29420000E+1, 0.29146000E+1, 0.28970710E+3, + 0.381E+3, 0.314E+3, 0.29420000E+1, 0.29407000E+1, 0.24238610E+3, 0.381E+3, 0.315E+3, + 0.29420000E+1, 0.29859000E+1, 0.21463710E+3, 0.381E+3, 0.327E+3, 0.29420000E+1, 0.77785000E+1, + 0.23384620E+3, 0.381E+3, 0.328E+3, 0.29420000E+1, 0.62918000E+1, 0.25833420E+3, 0.381E+3, + 0.331E+3, 0.29420000E+1, 0.29233000E+1, 0.29794670E+3, 0.381E+3, 0.332E+3, 0.29420000E+1, + 0.29186000E+1, 0.29487070E+3, 0.381E+3, 0.333E+3, 0.29420000E+1, 0.29709000E+1, 0.34780090E+3, + 0.381E+3, 0.349E+3, 0.29420000E+1, 0.29353000E+1, 0.39805300E+3, 0.381E+3, 0.350E+3, + 0.29420000E+1, 0.29259000E+1, 0.40261790E+3, 0.381E+3, 0.351E+3, 0.29420000E+1, 0.29315000E+1, + 0.38960690E+3, 0.381E+3, 0.381E+3, 0.29420000E+1, 0.29420000E+1, 0.39201800E+2, 0.382E+3, + 0.100E+1, 0.29081000E+1, 0.91180000E+0, 0.26154200E+2, 0.382E+3, 0.200E+1, 0.29081000E+1, + 0.00000000E+0, 0.59230750E+3, 0.382E+3, 0.300E+1, 0.29081000E+1, 0.00000000E+0, 0.34659360E+3, + 0.382E+3, 0.400E+1, 0.29081000E+1, 0.00000000E+0, 0.23511450E+3, 0.382E+3, 0.500E+1, + 0.29081000E+1, 0.00000000E+0, 0.15978570E+3, 0.382E+3, 0.600E+1, 0.29081000E+1, 0.00000000E+0, + 0.11231150E+3, 0.382E+3, 0.700E+1, 0.29081000E+1, 0.00000000E+0, 0.85390200E+2, 0.382E+3, + 0.800E+1, 0.29081000E+1, 0.00000000E+0, 0.64954800E+2, 0.382E+3, 0.900E+1, 0.29081000E+1, + 0.00000000E+0, 0.50154300E+2, 0.382E+3, 0.100E+2, 0.29081000E+1, 0.00000000E+0, 0.70906070E+3, + 0.382E+3, 0.110E+2, 0.29081000E+1, 0.00000000E+0, 0.55115190E+3, 0.382E+3, 0.120E+2, + 0.29081000E+1, 0.00000000E+0, 0.50990250E+3, 0.382E+3, 0.130E+2, 0.29081000E+1, 0.00000000E+0, + 0.40375640E+3, 0.382E+3, 0.140E+2, 0.29081000E+1, 0.00000000E+0, 0.31618250E+3, 0.382E+3, + 0.150E+2, 0.29081000E+1, 0.00000000E+0, 0.26318820E+3, 0.382E+3, 0.160E+2, 0.29081000E+1, + 0.00000000E+0, 0.21563940E+3, 0.382E+3, 0.170E+2, 0.29081000E+1, 0.00000000E+0, 0.17693360E+3, + 0.382E+3, 0.180E+2, 0.29081000E+1, 0.00000000E+0, 0.11602124E+4, 0.382E+3, 0.190E+2, + 0.29081000E+1, 0.00000000E+0, 0.96482980E+3, 0.382E+3, 0.200E+2, 0.29081000E+1, 0.00000000E+0, + 0.79848900E+3, 0.382E+3, 0.210E+2, 0.29081000E+1, 0.00000000E+0, 0.77240680E+3, 0.382E+3, + 0.220E+2, 0.29081000E+1, 0.00000000E+0, 0.70804470E+3, 0.382E+3, 0.230E+2, 0.29081000E+1, + 0.00000000E+0, 0.55813800E+3, 0.382E+3, 0.240E+2, 0.29081000E+1, 0.00000000E+0, 0.61052950E+3, + 0.382E+3, 0.250E+2, 0.29081000E+1, 0.00000000E+0, 0.47961190E+3, 0.382E+3, 0.260E+2, + 0.29081000E+1, 0.00000000E+0, 0.50914700E+3, 0.382E+3, 0.270E+2, 0.29081000E+1, 0.00000000E+0, + 0.52395450E+3, 0.382E+3, 0.280E+2, 0.29081000E+1, 0.00000000E+0, 0.40203690E+3, 0.382E+3, + 0.290E+2, 0.29081000E+1, 0.00000000E+0, 0.41376860E+3, 0.382E+3, 0.300E+2, 0.29081000E+1, + 0.00000000E+0, 0.48932470E+3, 0.382E+3, 0.310E+2, 0.29081000E+1, 0.00000000E+0, 0.43309510E+3, + 0.382E+3, 0.320E+2, 0.29081000E+1, 0.00000000E+0, 0.37065200E+3, 0.382E+3, 0.330E+2, + 0.29081000E+1, 0.00000000E+0, 0.33332050E+3, 0.382E+3, 0.340E+2, 0.29081000E+1, 0.00000000E+0, + 0.29238780E+3, 0.382E+3, 0.350E+2, 0.29081000E+1, 0.00000000E+0, 0.25487000E+3, 0.382E+3, + 0.360E+2, 0.29081000E+1, 0.00000000E+0, 0.13013911E+4, 0.382E+3, 0.370E+2, 0.29081000E+1, + 0.00000000E+0, 0.11493369E+4, 0.382E+3, 0.380E+2, 0.29081000E+1, 0.00000000E+0, 0.10098313E+4, + 0.382E+3, 0.390E+2, 0.29081000E+1, 0.00000000E+0, 0.90933820E+3, 0.382E+3, 0.400E+2, + 0.29081000E+1, 0.00000000E+0, 0.83029650E+3, 0.382E+3, 0.410E+2, 0.29081000E+1, 0.00000000E+0, + 0.64261650E+3, 0.382E+3, 0.420E+2, 0.29081000E+1, 0.00000000E+0, 0.71635260E+3, 0.382E+3, + 0.430E+2, 0.29081000E+1, 0.00000000E+0, 0.54725930E+3, 0.382E+3, 0.440E+2, 0.29081000E+1, + 0.00000000E+0, 0.59800230E+3, 0.382E+3, 0.450E+2, 0.29081000E+1, 0.00000000E+0, 0.55503560E+3, + 0.382E+3, 0.460E+2, 0.29081000E+1, 0.00000000E+0, 0.46292020E+3, 0.382E+3, 0.470E+2, + 0.29081000E+1, 0.00000000E+0, 0.48966130E+3, 0.382E+3, 0.480E+2, 0.29081000E+1, 0.00000000E+0, + 0.61279550E+3, 0.382E+3, 0.490E+2, 0.29081000E+1, 0.00000000E+0, 0.56824370E+3, 0.382E+3, + 0.500E+2, 0.29081000E+1, 0.00000000E+0, 0.50783300E+3, 0.382E+3, 0.510E+2, 0.29081000E+1, + 0.00000000E+0, 0.47198620E+3, 0.382E+3, 0.520E+2, 0.29081000E+1, 0.00000000E+0, 0.42758360E+3, + 0.382E+3, 0.530E+2, 0.29081000E+1, 0.00000000E+0, 0.38515720E+3, 0.382E+3, 0.540E+2, + 0.29081000E+1, 0.00000000E+0, 0.15855821E+4, 0.382E+3, 0.550E+2, 0.29081000E+1, 0.00000000E+0, + 0.14639079E+4, 0.382E+3, 0.560E+2, 0.29081000E+1, 0.00000000E+0, 0.12899128E+4, 0.382E+3, + 0.570E+2, 0.29081000E+1, 0.00000000E+0, 0.59969740E+3, 0.382E+3, 0.580E+2, 0.29081000E+1, + 0.27991000E+1, 0.12986324E+4, 0.382E+3, 0.590E+2, 0.29081000E+1, 0.00000000E+0, 0.12476103E+4, + 0.382E+3, 0.600E+2, 0.29081000E+1, 0.00000000E+0, 0.12164825E+4, 0.382E+3, 0.610E+2, + 0.29081000E+1, 0.00000000E+0, 0.11878330E+4, 0.382E+3, 0.620E+2, 0.29081000E+1, 0.00000000E+0, + 0.11624311E+4, 0.382E+3, 0.630E+2, 0.29081000E+1, 0.00000000E+0, 0.91733060E+3, 0.382E+3, + 0.640E+2, 0.29081000E+1, 0.00000000E+0, 0.10280579E+4, 0.382E+3, 0.650E+2, 0.29081000E+1, + 0.00000000E+0, 0.99208130E+3, 0.382E+3, 0.660E+2, 0.29081000E+1, 0.00000000E+0, 0.10492180E+4, + 0.382E+3, 0.670E+2, 0.29081000E+1, 0.00000000E+0, 0.10270231E+4, 0.382E+3, 0.680E+2, + 0.29081000E+1, 0.00000000E+0, 0.10070473E+4, 0.382E+3, 0.690E+2, 0.29081000E+1, 0.00000000E+0, + 0.99511980E+3, 0.382E+3, 0.700E+2, 0.29081000E+1, 0.00000000E+0, 0.84045040E+3, 0.382E+3, + 0.710E+2, 0.29081000E+1, 0.00000000E+0, 0.82879200E+3, 0.382E+3, 0.720E+2, 0.29081000E+1, + 0.00000000E+0, 0.75780230E+3, 0.382E+3, 0.730E+2, 0.29081000E+1, 0.00000000E+0, 0.64104200E+3, + 0.382E+3, 0.740E+2, 0.29081000E+1, 0.00000000E+0, 0.65256880E+3, 0.382E+3, 0.750E+2, + 0.29081000E+1, 0.00000000E+0, 0.59243330E+3, 0.382E+3, 0.760E+2, 0.29081000E+1, 0.00000000E+0, + 0.54333580E+3, 0.382E+3, 0.770E+2, 0.29081000E+1, 0.00000000E+0, 0.45219510E+3, 0.382E+3, + 0.780E+2, 0.29081000E+1, 0.00000000E+0, 0.42282310E+3, 0.382E+3, 0.790E+2, 0.29081000E+1, + 0.00000000E+0, 0.43514150E+3, 0.382E+3, 0.800E+2, 0.29081000E+1, 0.00000000E+0, 0.62994840E+3, + 0.382E+3, 0.810E+2, 0.29081000E+1, 0.00000000E+0, 0.61718100E+3, 0.382E+3, 0.820E+2, + 0.29081000E+1, 0.00000000E+0, 0.56851380E+3, 0.382E+3, 0.830E+2, 0.29081000E+1, 0.00000000E+0, + 0.54299390E+3, 0.382E+3, 0.840E+2, 0.29081000E+1, 0.00000000E+0, 0.50202460E+3, 0.382E+3, + 0.850E+2, 0.29081000E+1, 0.00000000E+0, 0.46091780E+3, 0.382E+3, 0.860E+2, 0.29081000E+1, + 0.00000000E+0, 0.15008218E+4, 0.382E+3, 0.870E+2, 0.29081000E+1, 0.00000000E+0, 0.14498449E+4, + 0.382E+3, 0.880E+2, 0.29081000E+1, 0.00000000E+0, 0.12851719E+4, 0.382E+3, 0.890E+2, + 0.29081000E+1, 0.00000000E+0, 0.11587220E+4, 0.382E+3, 0.900E+2, 0.29081000E+1, 0.00000000E+0, + 0.11488988E+4, 0.382E+3, 0.910E+2, 0.29081000E+1, 0.00000000E+0, 0.11125743E+4, 0.382E+3, + 0.920E+2, 0.29081000E+1, 0.00000000E+0, 0.11434030E+4, 0.382E+3, 0.930E+2, 0.29081000E+1, + 0.00000000E+0, 0.11076634E+4, 0.382E+3, 0.940E+2, 0.29081000E+1, 0.00000000E+0, 0.62853000E+2, + 0.382E+3, 0.101E+3, 0.29081000E+1, 0.00000000E+0, 0.20170300E+3, 0.382E+3, 0.103E+3, + 0.29081000E+1, 0.98650000E+0, 0.25762390E+3, 0.382E+3, 0.104E+3, 0.29081000E+1, 0.98080000E+0, + 0.19809520E+3, 0.382E+3, 0.105E+3, 0.29081000E+1, 0.97060000E+0, 0.14988210E+3, 0.382E+3, + 0.106E+3, 0.29081000E+1, 0.98680000E+0, 0.10475870E+3, 0.382E+3, 0.107E+3, 0.29081000E+1, + 0.99440000E+0, 0.76663400E+2, 0.382E+3, 0.108E+3, 0.29081000E+1, 0.99250000E+0, 0.53088800E+2, + 0.382E+3, 0.109E+3, 0.29081000E+1, 0.99820000E+0, 0.29465140E+3, 0.382E+3, 0.111E+3, + 0.29081000E+1, 0.96840000E+0, 0.45526290E+3, 0.382E+3, 0.112E+3, 0.29081000E+1, 0.96280000E+0, + 0.46254200E+3, 0.382E+3, 0.113E+3, 0.29081000E+1, 0.96480000E+0, 0.37345290E+3, 0.382E+3, + 0.114E+3, 0.29081000E+1, 0.95070000E+0, 0.30696940E+3, 0.382E+3, 0.115E+3, 0.29081000E+1, + 0.99470000E+0, 0.26028570E+3, 0.382E+3, 0.116E+3, 0.29081000E+1, 0.99480000E+0, 0.21340440E+3, + 0.382E+3, 0.117E+3, 0.29081000E+1, 0.99720000E+0, 0.40761910E+3, 0.382E+3, 0.119E+3, + 0.29081000E+1, 0.97670000E+0, 0.77230000E+3, 0.382E+3, 0.120E+3, 0.29081000E+1, 0.98310000E+0, + 0.40917160E+3, 0.382E+3, 0.121E+3, 0.29081000E+1, 0.18627000E+1, 0.39511390E+3, 0.382E+3, + 0.122E+3, 0.29081000E+1, 0.18299000E+1, 0.38722670E+3, 0.382E+3, 0.123E+3, 0.29081000E+1, + 0.19138000E+1, 0.38350230E+3, 0.382E+3, 0.124E+3, 0.29081000E+1, 0.18269000E+1, 0.35362940E+3, + 0.382E+3, 0.125E+3, 0.29081000E+1, 0.16406000E+1, 0.32753820E+3, 0.382E+3, 0.126E+3, + 0.29081000E+1, 0.16483000E+1, 0.31249710E+3, 0.382E+3, 0.127E+3, 0.29081000E+1, 0.17149000E+1, + 0.30547070E+3, 0.382E+3, 0.128E+3, 0.29081000E+1, 0.17937000E+1, 0.30136610E+3, 0.382E+3, + 0.129E+3, 0.29081000E+1, 0.95760000E+0, 0.28355320E+3, 0.382E+3, 0.130E+3, 0.29081000E+1, + 0.19419000E+1, 0.46002380E+3, 0.382E+3, 0.131E+3, 0.29081000E+1, 0.96010000E+0, 0.40553300E+3, + 0.382E+3, 0.132E+3, 0.29081000E+1, 0.94340000E+0, 0.36444410E+3, 0.382E+3, 0.133E+3, + 0.29081000E+1, 0.98890000E+0, 0.33344240E+3, 0.382E+3, 0.134E+3, 0.29081000E+1, 0.99010000E+0, + 0.29439140E+3, 0.382E+3, 0.135E+3, 0.29081000E+1, 0.99740000E+0, 0.48683630E+3, 0.382E+3, + 0.137E+3, 0.29081000E+1, 0.97380000E+0, 0.93949220E+3, 0.382E+3, 0.138E+3, 0.29081000E+1, + 0.98010000E+0, 0.72246140E+3, 0.382E+3, 0.139E+3, 0.29081000E+1, 0.19153000E+1, 0.54104620E+3, + 0.382E+3, 0.140E+3, 0.29081000E+1, 0.19355000E+1, 0.54639880E+3, 0.382E+3, 0.141E+3, + 0.29081000E+1, 0.19545000E+1, 0.50999070E+3, 0.382E+3, 0.142E+3, 0.29081000E+1, 0.19420000E+1, + 0.57035510E+3, 0.382E+3, 0.143E+3, 0.29081000E+1, 0.16682000E+1, 0.44558690E+3, 0.382E+3, + 0.144E+3, 0.29081000E+1, 0.18584000E+1, 0.41703620E+3, 0.382E+3, 0.145E+3, 0.29081000E+1, + 0.19003000E+1, 0.38750290E+3, 0.382E+3, 0.146E+3, 0.29081000E+1, 0.18630000E+1, 0.37479630E+3, + 0.382E+3, 0.147E+3, 0.29081000E+1, 0.96790000E+0, 0.37128680E+3, 0.382E+3, 0.148E+3, + 0.29081000E+1, 0.19539000E+1, 0.58473500E+3, 0.382E+3, 0.149E+3, 0.29081000E+1, 0.96330000E+0, + 0.53055010E+3, 0.382E+3, 0.150E+3, 0.29081000E+1, 0.95140000E+0, 0.49790060E+3, 0.382E+3, + 0.151E+3, 0.29081000E+1, 0.97490000E+0, 0.47168750E+3, 0.382E+3, 0.152E+3, 0.29081000E+1, + 0.98110000E+0, 0.43157390E+3, 0.382E+3, 0.153E+3, 0.29081000E+1, 0.99680000E+0, 0.57682000E+3, + 0.382E+3, 0.155E+3, 0.29081000E+1, 0.99090000E+0, 0.12167162E+4, 0.382E+3, 0.156E+3, + 0.29081000E+1, 0.97970000E+0, 0.91391750E+3, 0.382E+3, 0.157E+3, 0.29081000E+1, 0.19373000E+1, + 0.58172760E+3, 0.382E+3, 0.159E+3, 0.29081000E+1, 0.29425000E+1, 0.56972170E+3, 0.382E+3, + 0.160E+3, 0.29081000E+1, 0.29455000E+1, 0.55175870E+3, 0.382E+3, 0.161E+3, 0.29081000E+1, + 0.29413000E+1, 0.55422640E+3, 0.382E+3, 0.162E+3, 0.29081000E+1, 0.29300000E+1, 0.53359620E+3, + 0.382E+3, 0.163E+3, 0.29081000E+1, 0.18286000E+1, 0.55760720E+3, 0.382E+3, 0.164E+3, + 0.29081000E+1, 0.28732000E+1, 0.52397000E+3, 0.382E+3, 0.165E+3, 0.29081000E+1, 0.29086000E+1, + 0.53273770E+3, 0.382E+3, 0.166E+3, 0.29081000E+1, 0.28965000E+1, 0.49751580E+3, 0.382E+3, + 0.167E+3, 0.29081000E+1, 0.29242000E+1, 0.48340880E+3, 0.382E+3, 0.168E+3, 0.29081000E+1, + 0.29282000E+1, 0.48024390E+3, 0.382E+3, 0.169E+3, 0.29081000E+1, 0.29246000E+1, 0.50441450E+3, + 0.382E+3, 0.170E+3, 0.29081000E+1, 0.28482000E+1, 0.46426970E+3, 0.382E+3, 0.171E+3, + 0.29081000E+1, 0.29219000E+1, 0.62577080E+3, 0.382E+3, 0.172E+3, 0.29081000E+1, 0.19254000E+1, + 0.58183450E+3, 0.382E+3, 0.173E+3, 0.29081000E+1, 0.19459000E+1, 0.53190280E+3, 0.382E+3, + 0.174E+3, 0.29081000E+1, 0.19292000E+1, 0.53741510E+3, 0.382E+3, 0.175E+3, 0.29081000E+1, + 0.18104000E+1, 0.47245060E+3, 0.382E+3, 0.176E+3, 0.29081000E+1, 0.18858000E+1, 0.44483850E+3, + 0.382E+3, 0.177E+3, 0.29081000E+1, 0.18648000E+1, 0.42512390E+3, 0.382E+3, 0.178E+3, + 0.29081000E+1, 0.19188000E+1, 0.40652810E+3, 0.382E+3, 0.179E+3, 0.29081000E+1, 0.98460000E+0, + 0.39335910E+3, 0.382E+3, 0.180E+3, 0.29081000E+1, 0.19896000E+1, 0.62845220E+3, 0.382E+3, + 0.181E+3, 0.29081000E+1, 0.92670000E+0, 0.57444200E+3, 0.382E+3, 0.182E+3, 0.29081000E+1, + 0.93830000E+0, 0.55791660E+3, 0.382E+3, 0.183E+3, 0.29081000E+1, 0.98200000E+0, 0.54322420E+3, + 0.382E+3, 0.184E+3, 0.29081000E+1, 0.98150000E+0, 0.50808860E+3, 0.382E+3, 0.185E+3, + 0.29081000E+1, 0.99540000E+0, 0.64972250E+3, 0.382E+3, 0.187E+3, 0.29081000E+1, 0.97050000E+0, + 0.12125054E+4, 0.382E+3, 0.188E+3, 0.29081000E+1, 0.96620000E+0, 0.68824310E+3, 0.382E+3, + 0.189E+3, 0.29081000E+1, 0.29070000E+1, 0.79252420E+3, 0.382E+3, 0.190E+3, 0.29081000E+1, + 0.28844000E+1, 0.70936470E+3, 0.382E+3, 0.191E+3, 0.29081000E+1, 0.28738000E+1, 0.62816270E+3, + 0.382E+3, 0.192E+3, 0.29081000E+1, 0.28878000E+1, 0.60477390E+3, 0.382E+3, 0.193E+3, + 0.29081000E+1, 0.29095000E+1, 0.72374190E+3, 0.382E+3, 0.194E+3, 0.29081000E+1, 0.19209000E+1, + 0.16920360E+3, 0.382E+3, 0.204E+3, 0.29081000E+1, 0.19697000E+1, 0.16658210E+3, 0.382E+3, + 0.205E+3, 0.29081000E+1, 0.19441000E+1, 0.12253210E+3, 0.382E+3, 0.206E+3, 0.29081000E+1, + 0.19985000E+1, 0.98442100E+2, 0.382E+3, 0.207E+3, 0.29081000E+1, 0.20143000E+1, 0.67767000E+2, + 0.382E+3, 0.208E+3, 0.29081000E+1, 0.19887000E+1, 0.29929840E+3, 0.382E+3, 0.212E+3, + 0.29081000E+1, 0.19496000E+1, 0.36151620E+3, 0.382E+3, 0.213E+3, 0.29081000E+1, 0.19311000E+1, + 0.34761240E+3, 0.382E+3, 0.214E+3, 0.29081000E+1, 0.19435000E+1, 0.30275900E+3, 0.382E+3, + 0.215E+3, 0.29081000E+1, 0.20102000E+1, 0.25504960E+3, 0.382E+3, 0.216E+3, 0.29081000E+1, + 0.19903000E+1, 0.41985730E+3, 0.382E+3, 0.220E+3, 0.29081000E+1, 0.19349000E+1, 0.40420110E+3, + 0.382E+3, 0.221E+3, 0.29081000E+1, 0.28999000E+1, 0.40925130E+3, 0.382E+3, 0.222E+3, + 0.29081000E+1, 0.38675000E+1, 0.37462180E+3, 0.382E+3, 0.223E+3, 0.29081000E+1, 0.29110000E+1, + 0.28320230E+3, 0.382E+3, 0.224E+3, 0.29081000E+1, 0.10619100E+2, 0.24283500E+3, 0.382E+3, + 0.225E+3, 0.29081000E+1, 0.98849000E+1, 0.23833220E+3, 0.382E+3, 0.226E+3, 0.29081000E+1, + 0.91376000E+1, 0.27849510E+3, 0.382E+3, 0.227E+3, 0.29081000E+1, 0.29263000E+1, 0.25970610E+3, + 0.382E+3, 0.228E+3, 0.29081000E+1, 0.65458000E+1, 0.36569310E+3, 0.382E+3, 0.231E+3, + 0.29081000E+1, 0.19315000E+1, 0.38632290E+3, 0.382E+3, 0.232E+3, 0.29081000E+1, 0.19447000E+1, + 0.35500350E+3, 0.382E+3, 0.233E+3, 0.29081000E+1, 0.19793000E+1, 0.33085020E+3, 0.382E+3, + 0.234E+3, 0.29081000E+1, 0.19812000E+1, 0.50318910E+3, 0.382E+3, 0.238E+3, 0.29081000E+1, + 0.19143000E+1, 0.48540080E+3, 0.382E+3, 0.239E+3, 0.29081000E+1, 0.28903000E+1, 0.48989620E+3, + 0.382E+3, 0.240E+3, 0.29081000E+1, 0.39106000E+1, 0.47377460E+3, 0.382E+3, 0.241E+3, + 0.29081000E+1, 0.29225000E+1, 0.41981260E+3, 0.382E+3, 0.242E+3, 0.29081000E+1, 0.11055600E+2, + 0.37122640E+3, 0.382E+3, 0.243E+3, 0.29081000E+1, 0.95402000E+1, 0.35107190E+3, 0.382E+3, + 0.244E+3, 0.29081000E+1, 0.88895000E+1, 0.35706620E+3, 0.382E+3, 0.245E+3, 0.29081000E+1, + 0.29696000E+1, 0.37278680E+3, 0.382E+3, 0.246E+3, 0.29081000E+1, 0.57095000E+1, 0.47232770E+3, + 0.382E+3, 0.249E+3, 0.29081000E+1, 0.19378000E+1, 0.51322190E+3, 0.382E+3, 0.250E+3, + 0.29081000E+1, 0.19505000E+1, 0.48446450E+3, 0.382E+3, 0.251E+3, 0.29081000E+1, 0.19523000E+1, + 0.46794670E+3, 0.382E+3, 0.252E+3, 0.29081000E+1, 0.19639000E+1, 0.60895860E+3, 0.382E+3, + 0.256E+3, 0.29081000E+1, 0.18467000E+1, 0.63182890E+3, 0.382E+3, 0.257E+3, 0.29081000E+1, + 0.29175000E+1, 0.46949580E+3, 0.382E+3, 0.272E+3, 0.29081000E+1, 0.38840000E+1, 0.49006850E+3, + 0.382E+3, 0.273E+3, 0.29081000E+1, 0.28988000E+1, 0.45612840E+3, 0.382E+3, 0.274E+3, + 0.29081000E+1, 0.10915300E+2, 0.41497090E+3, 0.382E+3, 0.275E+3, 0.29081000E+1, 0.98054000E+1, + 0.39089370E+3, 0.382E+3, 0.276E+3, 0.29081000E+1, 0.91527000E+1, 0.39804290E+3, 0.382E+3, + 0.277E+3, 0.29081000E+1, 0.29424000E+1, 0.41852820E+3, 0.382E+3, 0.278E+3, 0.29081000E+1, + 0.66669000E+1, 0.50537700E+3, 0.382E+3, 0.281E+3, 0.29081000E+1, 0.19302000E+1, 0.53408270E+3, + 0.382E+3, 0.282E+3, 0.29081000E+1, 0.19356000E+1, 0.54469760E+3, 0.382E+3, 0.283E+3, + 0.29081000E+1, 0.19655000E+1, 0.54102390E+3, 0.382E+3, 0.284E+3, 0.29081000E+1, 0.19639000E+1, + 0.67046940E+3, 0.382E+3, 0.288E+3, 0.29081000E+1, 0.18075000E+1, 0.12713380E+3, 0.382E+3, + 0.305E+3, 0.29081000E+1, 0.29128000E+1, 0.11469320E+3, 0.382E+3, 0.306E+3, 0.29081000E+1, + 0.29987000E+1, 0.86806100E+2, 0.382E+3, 0.307E+3, 0.29081000E+1, 0.29903000E+1, 0.28266470E+3, + 0.382E+3, 0.313E+3, 0.29081000E+1, 0.29146000E+1, 0.33866010E+3, 0.382E+3, 0.314E+3, + 0.29081000E+1, 0.29407000E+1, 0.28113750E+3, 0.382E+3, 0.315E+3, 0.29081000E+1, 0.29859000E+1, + 0.24847100E+3, 0.382E+3, 0.327E+3, 0.29081000E+1, 0.77785000E+1, 0.27223020E+3, 0.382E+3, + 0.328E+3, 0.29081000E+1, 0.62918000E+1, 0.30012720E+3, 0.382E+3, 0.331E+3, 0.29081000E+1, + 0.29233000E+1, 0.34667580E+3, 0.382E+3, 0.332E+3, 0.29081000E+1, 0.29186000E+1, 0.34212760E+3, + 0.382E+3, 0.333E+3, 0.29081000E+1, 0.29709000E+1, 0.40346440E+3, 0.382E+3, 0.349E+3, + 0.29081000E+1, 0.29353000E+1, 0.46298340E+3, 0.382E+3, 0.350E+3, 0.29081000E+1, 0.29259000E+1, + 0.46750670E+3, 0.382E+3, 0.351E+3, 0.29081000E+1, 0.29315000E+1, 0.45116740E+3, 0.382E+3, + 0.381E+3, 0.29081000E+1, 0.29420000E+1, 0.52418400E+3, 0.382E+3, 0.382E+3, 0.29081000E+1, + 0.29081000E+1, 0.39743800E+2, 0.383E+3, 0.100E+1, 0.29500000E+1, 0.91180000E+0, 0.26627800E+2, + 0.383E+3, 0.200E+1, 0.29500000E+1, 0.00000000E+0, 0.58321980E+3, 0.383E+3, 0.300E+1, + 0.29500000E+1, 0.00000000E+0, 0.34623830E+3, 0.383E+3, 0.400E+1, 0.29500000E+1, 0.00000000E+0, + 0.23662000E+3, 0.383E+3, 0.500E+1, 0.29500000E+1, 0.00000000E+0, 0.16159220E+3, 0.383E+3, + 0.600E+1, 0.29500000E+1, 0.00000000E+0, 0.11393640E+3, 0.383E+3, 0.700E+1, 0.29500000E+1, + 0.00000000E+0, 0.86791400E+2, 0.383E+3, 0.800E+1, 0.29500000E+1, 0.00000000E+0, 0.66113100E+2, + 0.383E+3, 0.900E+1, 0.29500000E+1, 0.00000000E+0, 0.51096100E+2, 0.383E+3, 0.100E+2, + 0.29500000E+1, 0.00000000E+0, 0.69876860E+3, 0.383E+3, 0.110E+2, 0.29500000E+1, 0.00000000E+0, + 0.54919660E+3, 0.383E+3, 0.120E+2, 0.29500000E+1, 0.00000000E+0, 0.51016460E+3, 0.383E+3, + 0.130E+2, 0.29500000E+1, 0.00000000E+0, 0.40605930E+3, 0.383E+3, 0.140E+2, 0.29500000E+1, + 0.00000000E+0, 0.31927240E+3, 0.383E+3, 0.150E+2, 0.29500000E+1, 0.00000000E+0, 0.26639090E+3, + 0.383E+3, 0.160E+2, 0.29500000E+1, 0.00000000E+0, 0.21872080E+3, 0.383E+3, 0.170E+2, + 0.29500000E+1, 0.00000000E+0, 0.17975600E+3, 0.383E+3, 0.180E+2, 0.29500000E+1, 0.00000000E+0, + 0.11409307E+4, 0.383E+3, 0.190E+2, 0.29500000E+1, 0.00000000E+0, 0.95709360E+3, 0.383E+3, + 0.200E+2, 0.29500000E+1, 0.00000000E+0, 0.79362090E+3, 0.383E+3, 0.210E+2, 0.29500000E+1, + 0.00000000E+0, 0.76903960E+3, 0.383E+3, 0.220E+2, 0.29500000E+1, 0.00000000E+0, 0.70568530E+3, + 0.383E+3, 0.230E+2, 0.29500000E+1, 0.00000000E+0, 0.55635380E+3, 0.383E+3, 0.240E+2, + 0.29500000E+1, 0.00000000E+0, 0.60939430E+3, 0.383E+3, 0.250E+2, 0.29500000E+1, 0.00000000E+0, + 0.47886060E+3, 0.383E+3, 0.260E+2, 0.29500000E+1, 0.00000000E+0, 0.50944850E+3, 0.383E+3, + 0.270E+2, 0.29500000E+1, 0.00000000E+0, 0.52372160E+3, 0.383E+3, 0.280E+2, 0.29500000E+1, + 0.00000000E+0, 0.40186070E+3, 0.383E+3, 0.290E+2, 0.29500000E+1, 0.00000000E+0, 0.41492100E+3, + 0.383E+3, 0.300E+2, 0.29500000E+1, 0.00000000E+0, 0.49028010E+3, 0.383E+3, 0.310E+2, + 0.29500000E+1, 0.00000000E+0, 0.43566600E+3, 0.383E+3, 0.320E+2, 0.29500000E+1, 0.00000000E+0, + 0.37411390E+3, 0.383E+3, 0.330E+2, 0.29500000E+1, 0.00000000E+0, 0.33709110E+3, 0.383E+3, + 0.340E+2, 0.29500000E+1, 0.00000000E+0, 0.29625040E+3, 0.383E+3, 0.350E+2, 0.29500000E+1, + 0.00000000E+0, 0.25864890E+3, 0.383E+3, 0.360E+2, 0.29500000E+1, 0.00000000E+0, 0.12807871E+4, + 0.383E+3, 0.370E+2, 0.29500000E+1, 0.00000000E+0, 0.11397642E+4, 0.383E+3, 0.380E+2, + 0.29500000E+1, 0.00000000E+0, 0.10048393E+4, 0.383E+3, 0.390E+2, 0.29500000E+1, 0.00000000E+0, + 0.90672570E+3, 0.383E+3, 0.400E+2, 0.29500000E+1, 0.00000000E+0, 0.82902620E+3, 0.383E+3, + 0.410E+2, 0.29500000E+1, 0.00000000E+0, 0.64306490E+3, 0.383E+3, 0.420E+2, 0.29500000E+1, + 0.00000000E+0, 0.71626640E+3, 0.383E+3, 0.430E+2, 0.29500000E+1, 0.00000000E+0, 0.54850410E+3, + 0.383E+3, 0.440E+2, 0.29500000E+1, 0.00000000E+0, 0.59937630E+3, 0.383E+3, 0.450E+2, + 0.29500000E+1, 0.00000000E+0, 0.55674870E+3, 0.383E+3, 0.460E+2, 0.29500000E+1, 0.00000000E+0, + 0.46407170E+3, 0.383E+3, 0.470E+2, 0.29500000E+1, 0.00000000E+0, 0.49165550E+3, 0.383E+3, + 0.480E+2, 0.29500000E+1, 0.00000000E+0, 0.61377870E+3, 0.383E+3, 0.490E+2, 0.29500000E+1, + 0.00000000E+0, 0.57101580E+3, 0.383E+3, 0.500E+2, 0.29500000E+1, 0.00000000E+0, 0.51187060E+3, + 0.383E+3, 0.510E+2, 0.29500000E+1, 0.00000000E+0, 0.47658080E+3, 0.383E+3, 0.520E+2, + 0.29500000E+1, 0.00000000E+0, 0.43252650E+3, 0.383E+3, 0.530E+2, 0.29500000E+1, 0.00000000E+0, + 0.39023930E+3, 0.383E+3, 0.540E+2, 0.29500000E+1, 0.00000000E+0, 0.15608728E+4, 0.383E+3, + 0.550E+2, 0.29500000E+1, 0.00000000E+0, 0.14501356E+4, 0.383E+3, 0.560E+2, 0.29500000E+1, + 0.00000000E+0, 0.12821300E+4, 0.383E+3, 0.570E+2, 0.29500000E+1, 0.00000000E+0, 0.60410230E+3, + 0.383E+3, 0.580E+2, 0.29500000E+1, 0.27991000E+1, 0.12878172E+4, 0.383E+3, 0.590E+2, + 0.29500000E+1, 0.00000000E+0, 0.12378955E+4, 0.383E+3, 0.600E+2, 0.29500000E+1, 0.00000000E+0, + 0.12071956E+4, 0.383E+3, 0.610E+2, 0.29500000E+1, 0.00000000E+0, 0.11789199E+4, 0.383E+3, + 0.620E+2, 0.29500000E+1, 0.00000000E+0, 0.11538573E+4, 0.383E+3, 0.630E+2, 0.29500000E+1, + 0.00000000E+0, 0.91395230E+3, 0.383E+3, 0.640E+2, 0.29500000E+1, 0.00000000E+0, 0.10187768E+4, + 0.383E+3, 0.650E+2, 0.29500000E+1, 0.00000000E+0, 0.98379020E+3, 0.383E+3, 0.660E+2, + 0.29500000E+1, 0.00000000E+0, 0.10423525E+4, 0.383E+3, 0.670E+2, 0.29500000E+1, 0.00000000E+0, + 0.10203958E+4, 0.383E+3, 0.680E+2, 0.29500000E+1, 0.00000000E+0, 0.10006811E+4, 0.383E+3, + 0.690E+2, 0.29500000E+1, 0.00000000E+0, 0.98867650E+3, 0.383E+3, 0.700E+2, 0.29500000E+1, + 0.00000000E+0, 0.83714090E+3, 0.383E+3, 0.710E+2, 0.29500000E+1, 0.00000000E+0, 0.82836360E+3, + 0.383E+3, 0.720E+2, 0.29500000E+1, 0.00000000E+0, 0.75891210E+3, 0.383E+3, 0.730E+2, + 0.29500000E+1, 0.00000000E+0, 0.64292980E+3, 0.383E+3, 0.740E+2, 0.29500000E+1, 0.00000000E+0, + 0.65498530E+3, 0.383E+3, 0.750E+2, 0.29500000E+1, 0.00000000E+0, 0.59558850E+3, 0.383E+3, + 0.760E+2, 0.29500000E+1, 0.00000000E+0, 0.54692440E+3, 0.383E+3, 0.770E+2, 0.29500000E+1, + 0.00000000E+0, 0.45573730E+3, 0.383E+3, 0.780E+2, 0.29500000E+1, 0.00000000E+0, 0.42633520E+3, + 0.383E+3, 0.790E+2, 0.29500000E+1, 0.00000000E+0, 0.43904410E+3, 0.383E+3, 0.800E+2, + 0.29500000E+1, 0.00000000E+0, 0.63141780E+3, 0.383E+3, 0.810E+2, 0.29500000E+1, 0.00000000E+0, + 0.62017920E+3, 0.383E+3, 0.820E+2, 0.29500000E+1, 0.00000000E+0, 0.57284430E+3, 0.383E+3, + 0.830E+2, 0.29500000E+1, 0.00000000E+0, 0.54797510E+3, 0.383E+3, 0.840E+2, 0.29500000E+1, + 0.00000000E+0, 0.50752580E+3, 0.383E+3, 0.850E+2, 0.29500000E+1, 0.00000000E+0, 0.46668040E+3, + 0.383E+3, 0.860E+2, 0.29500000E+1, 0.00000000E+0, 0.14815226E+4, 0.383E+3, 0.870E+2, + 0.29500000E+1, 0.00000000E+0, 0.14387553E+4, 0.383E+3, 0.880E+2, 0.29500000E+1, 0.00000000E+0, + 0.12792885E+4, 0.383E+3, 0.890E+2, 0.29500000E+1, 0.00000000E+0, 0.11574185E+4, 0.383E+3, + 0.900E+2, 0.29500000E+1, 0.00000000E+0, 0.11456007E+4, 0.383E+3, 0.910E+2, 0.29500000E+1, + 0.00000000E+0, 0.11094582E+4, 0.383E+3, 0.920E+2, 0.29500000E+1, 0.00000000E+0, 0.11376821E+4, + 0.383E+3, 0.930E+2, 0.29500000E+1, 0.00000000E+0, 0.11025605E+4, 0.383E+3, 0.940E+2, + 0.29500000E+1, 0.00000000E+0, 0.63497600E+2, 0.383E+3, 0.101E+3, 0.29500000E+1, 0.00000000E+0, + 0.20170420E+3, 0.383E+3, 0.103E+3, 0.29500000E+1, 0.98650000E+0, 0.25799550E+3, 0.383E+3, + 0.104E+3, 0.29500000E+1, 0.98080000E+0, 0.19963690E+3, 0.383E+3, 0.105E+3, 0.29500000E+1, + 0.97060000E+0, 0.15154880E+3, 0.383E+3, 0.106E+3, 0.29500000E+1, 0.98680000E+0, 0.10626960E+3, + 0.383E+3, 0.107E+3, 0.29500000E+1, 0.99440000E+0, 0.77952800E+2, 0.383E+3, 0.108E+3, + 0.29500000E+1, 0.99250000E+0, 0.54119700E+2, 0.383E+3, 0.109E+3, 0.29500000E+1, 0.99820000E+0, + 0.29420730E+3, 0.383E+3, 0.111E+3, 0.29500000E+1, 0.96840000E+0, 0.45432800E+3, 0.383E+3, + 0.112E+3, 0.29500000E+1, 0.96280000E+0, 0.46321330E+3, 0.383E+3, 0.113E+3, 0.29500000E+1, + 0.96480000E+0, 0.37584780E+3, 0.383E+3, 0.114E+3, 0.29500000E+1, 0.95070000E+0, 0.31000460E+3, + 0.383E+3, 0.115E+3, 0.29500000E+1, 0.99470000E+0, 0.26343270E+3, 0.383E+3, 0.116E+3, + 0.29500000E+1, 0.99480000E+0, 0.21644080E+3, 0.383E+3, 0.117E+3, 0.29500000E+1, 0.99720000E+0, + 0.40808240E+3, 0.383E+3, 0.119E+3, 0.29500000E+1, 0.97670000E+0, 0.76638090E+3, 0.383E+3, + 0.120E+3, 0.29500000E+1, 0.98310000E+0, 0.41133690E+3, 0.383E+3, 0.121E+3, 0.29500000E+1, + 0.18627000E+1, 0.39725380E+3, 0.383E+3, 0.122E+3, 0.29500000E+1, 0.18299000E+1, 0.38928370E+3, + 0.383E+3, 0.123E+3, 0.29500000E+1, 0.19138000E+1, 0.38534090E+3, 0.383E+3, 0.124E+3, + 0.29500000E+1, 0.18269000E+1, 0.35616420E+3, 0.383E+3, 0.125E+3, 0.29500000E+1, 0.16406000E+1, + 0.33009770E+3, 0.383E+3, 0.126E+3, 0.29500000E+1, 0.16483000E+1, 0.31492830E+3, 0.383E+3, + 0.127E+3, 0.29500000E+1, 0.17149000E+1, 0.30778390E+3, 0.383E+3, 0.128E+3, 0.29500000E+1, + 0.17937000E+1, 0.30308940E+3, 0.383E+3, 0.129E+3, 0.29500000E+1, 0.95760000E+0, 0.28611150E+3, + 0.383E+3, 0.130E+3, 0.29500000E+1, 0.19419000E+1, 0.46138820E+3, 0.383E+3, 0.131E+3, + 0.29500000E+1, 0.96010000E+0, 0.40830150E+3, 0.383E+3, 0.132E+3, 0.29500000E+1, 0.94340000E+0, + 0.36791630E+3, 0.383E+3, 0.133E+3, 0.29500000E+1, 0.98890000E+0, 0.33720180E+3, 0.383E+3, + 0.134E+3, 0.29500000E+1, 0.99010000E+0, 0.29824950E+3, 0.383E+3, 0.135E+3, 0.29500000E+1, + 0.99740000E+0, 0.48781130E+3, 0.383E+3, 0.137E+3, 0.29500000E+1, 0.97380000E+0, 0.93186330E+3, + 0.383E+3, 0.138E+3, 0.29500000E+1, 0.98010000E+0, 0.72138820E+3, 0.383E+3, 0.139E+3, + 0.29500000E+1, 0.19153000E+1, 0.54373140E+3, 0.383E+3, 0.140E+3, 0.29500000E+1, 0.19355000E+1, + 0.54904170E+3, 0.383E+3, 0.141E+3, 0.29500000E+1, 0.19545000E+1, 0.51286200E+3, 0.383E+3, + 0.142E+3, 0.29500000E+1, 0.19420000E+1, 0.57179580E+3, 0.383E+3, 0.143E+3, 0.29500000E+1, + 0.16682000E+1, 0.44904810E+3, 0.383E+3, 0.144E+3, 0.29500000E+1, 0.18584000E+1, 0.42033540E+3, + 0.383E+3, 0.145E+3, 0.29500000E+1, 0.19003000E+1, 0.39069990E+3, 0.383E+3, 0.146E+3, + 0.29500000E+1, 0.18630000E+1, 0.37774640E+3, 0.383E+3, 0.147E+3, 0.29500000E+1, 0.96790000E+0, + 0.37486870E+3, 0.383E+3, 0.148E+3, 0.29500000E+1, 0.19539000E+1, 0.58634250E+3, 0.383E+3, + 0.149E+3, 0.29500000E+1, 0.96330000E+0, 0.53378120E+3, 0.383E+3, 0.150E+3, 0.29500000E+1, + 0.95140000E+0, 0.50206010E+3, 0.383E+3, 0.151E+3, 0.29500000E+1, 0.97490000E+0, 0.47633350E+3, + 0.383E+3, 0.152E+3, 0.29500000E+1, 0.98110000E+0, 0.43655340E+3, 0.383E+3, 0.153E+3, + 0.29500000E+1, 0.99680000E+0, 0.57950930E+3, 0.383E+3, 0.155E+3, 0.29500000E+1, 0.99090000E+0, + 0.12052309E+4, 0.383E+3, 0.156E+3, 0.29500000E+1, 0.97970000E+0, 0.91205970E+3, 0.383E+3, + 0.157E+3, 0.29500000E+1, 0.19373000E+1, 0.58609720E+3, 0.383E+3, 0.159E+3, 0.29500000E+1, + 0.29425000E+1, 0.57401590E+3, 0.383E+3, 0.160E+3, 0.29500000E+1, 0.29455000E+1, 0.55599730E+3, + 0.383E+3, 0.161E+3, 0.29500000E+1, 0.29413000E+1, 0.55823140E+3, 0.383E+3, 0.162E+3, + 0.29500000E+1, 0.29300000E+1, 0.53660520E+3, 0.383E+3, 0.163E+3, 0.29500000E+1, 0.18286000E+1, + 0.56156960E+3, 0.383E+3, 0.164E+3, 0.29500000E+1, 0.28732000E+1, 0.52788270E+3, 0.383E+3, + 0.165E+3, 0.29500000E+1, 0.29086000E+1, 0.53626980E+3, 0.383E+3, 0.166E+3, 0.29500000E+1, + 0.28965000E+1, 0.50142950E+3, 0.383E+3, 0.167E+3, 0.29500000E+1, 0.29242000E+1, 0.48728280E+3, + 0.383E+3, 0.168E+3, 0.29500000E+1, 0.29282000E+1, 0.48403880E+3, 0.383E+3, 0.169E+3, + 0.29500000E+1, 0.29246000E+1, 0.50809720E+3, 0.383E+3, 0.170E+3, 0.29500000E+1, 0.28482000E+1, + 0.46804880E+3, 0.383E+3, 0.171E+3, 0.29500000E+1, 0.29219000E+1, 0.62749410E+3, 0.383E+3, + 0.172E+3, 0.29500000E+1, 0.19254000E+1, 0.58451000E+3, 0.383E+3, 0.173E+3, 0.29500000E+1, + 0.19459000E+1, 0.53534350E+3, 0.383E+3, 0.174E+3, 0.29500000E+1, 0.19292000E+1, 0.53996900E+3, + 0.383E+3, 0.175E+3, 0.29500000E+1, 0.18104000E+1, 0.47674360E+3, 0.383E+3, 0.176E+3, + 0.29500000E+1, 0.18858000E+1, 0.44912500E+3, 0.383E+3, 0.177E+3, 0.29500000E+1, 0.18648000E+1, + 0.42935080E+3, 0.383E+3, 0.178E+3, 0.29500000E+1, 0.19188000E+1, 0.41050840E+3, 0.383E+3, + 0.179E+3, 0.29500000E+1, 0.98460000E+0, 0.39782250E+3, 0.383E+3, 0.180E+3, 0.29500000E+1, + 0.19896000E+1, 0.63050780E+3, 0.383E+3, 0.181E+3, 0.29500000E+1, 0.92670000E+0, 0.57817950E+3, + 0.383E+3, 0.182E+3, 0.29500000E+1, 0.93830000E+0, 0.56250870E+3, 0.383E+3, 0.183E+3, + 0.29500000E+1, 0.98200000E+0, 0.54834310E+3, 0.383E+3, 0.184E+3, 0.29500000E+1, 0.98150000E+0, + 0.51367500E+3, 0.383E+3, 0.185E+3, 0.29500000E+1, 0.99540000E+0, 0.65289240E+3, 0.383E+3, + 0.187E+3, 0.29500000E+1, 0.97050000E+0, 0.12037016E+4, 0.383E+3, 0.188E+3, 0.29500000E+1, + 0.96620000E+0, 0.69337750E+3, 0.383E+3, 0.189E+3, 0.29500000E+1, 0.29070000E+1, 0.79621000E+3, + 0.383E+3, 0.190E+3, 0.29500000E+1, 0.28844000E+1, 0.71328770E+3, 0.383E+3, 0.191E+3, + 0.29500000E+1, 0.28738000E+1, 0.63298840E+3, 0.383E+3, 0.192E+3, 0.29500000E+1, 0.28878000E+1, + 0.60969380E+3, 0.383E+3, 0.193E+3, 0.29500000E+1, 0.29095000E+1, 0.72537520E+3, 0.383E+3, + 0.194E+3, 0.29500000E+1, 0.19209000E+1, 0.17061220E+3, 0.383E+3, 0.204E+3, 0.29500000E+1, + 0.19697000E+1, 0.16810260E+3, 0.383E+3, 0.205E+3, 0.29500000E+1, 0.19441000E+1, 0.12413050E+3, + 0.383E+3, 0.206E+3, 0.29500000E+1, 0.19985000E+1, 0.99890200E+2, 0.383E+3, 0.207E+3, + 0.29500000E+1, 0.20143000E+1, 0.68938900E+2, 0.383E+3, 0.208E+3, 0.29500000E+1, 0.19887000E+1, + 0.30082770E+3, 0.383E+3, 0.212E+3, 0.29500000E+1, 0.19496000E+1, 0.36319850E+3, 0.383E+3, + 0.213E+3, 0.29500000E+1, 0.19311000E+1, 0.35008330E+3, 0.383E+3, 0.214E+3, 0.29500000E+1, + 0.19435000E+1, 0.30566690E+3, 0.383E+3, 0.215E+3, 0.29500000E+1, 0.20102000E+1, 0.25814020E+3, + 0.383E+3, 0.216E+3, 0.29500000E+1, 0.19903000E+1, 0.42185200E+3, 0.383E+3, 0.220E+3, + 0.29500000E+1, 0.19349000E+1, 0.40692810E+3, 0.383E+3, 0.221E+3, 0.29500000E+1, 0.28999000E+1, + 0.41206730E+3, 0.383E+3, 0.222E+3, 0.29500000E+1, 0.38675000E+1, 0.37711770E+3, 0.383E+3, + 0.223E+3, 0.29500000E+1, 0.29110000E+1, 0.28588310E+3, 0.383E+3, 0.224E+3, 0.29500000E+1, + 0.10619100E+2, 0.24556070E+3, 0.383E+3, 0.225E+3, 0.29500000E+1, 0.98849000E+1, 0.24095060E+3, + 0.383E+3, 0.226E+3, 0.29500000E+1, 0.91376000E+1, 0.28076020E+3, 0.383E+3, 0.227E+3, + 0.29500000E+1, 0.29263000E+1, 0.26203990E+3, 0.383E+3, 0.228E+3, 0.29500000E+1, 0.65458000E+1, + 0.36803530E+3, 0.383E+3, 0.231E+3, 0.29500000E+1, 0.19315000E+1, 0.38919220E+3, 0.383E+3, + 0.232E+3, 0.29500000E+1, 0.19447000E+1, 0.35850420E+3, 0.383E+3, 0.233E+3, 0.29500000E+1, + 0.19793000E+1, 0.33459570E+3, 0.383E+3, 0.234E+3, 0.29500000E+1, 0.19812000E+1, 0.50567630E+3, + 0.383E+3, 0.238E+3, 0.29500000E+1, 0.19143000E+1, 0.48906840E+3, 0.383E+3, 0.239E+3, + 0.29500000E+1, 0.28903000E+1, 0.49395440E+3, 0.383E+3, 0.240E+3, 0.29500000E+1, 0.39106000E+1, + 0.47754800E+3, 0.383E+3, 0.241E+3, 0.29500000E+1, 0.29225000E+1, 0.42396710E+3, 0.383E+3, + 0.242E+3, 0.29500000E+1, 0.11055600E+2, 0.37545330E+3, 0.383E+3, 0.243E+3, 0.29500000E+1, + 0.95402000E+1, 0.35525030E+3, 0.383E+3, 0.244E+3, 0.29500000E+1, 0.88895000E+1, 0.36064340E+3, + 0.383E+3, 0.245E+3, 0.29500000E+1, 0.29696000E+1, 0.37633490E+3, 0.383E+3, 0.246E+3, + 0.29500000E+1, 0.57095000E+1, 0.47544030E+3, 0.383E+3, 0.249E+3, 0.29500000E+1, 0.19378000E+1, + 0.51667410E+3, 0.383E+3, 0.250E+3, 0.29500000E+1, 0.19505000E+1, 0.48876370E+3, 0.383E+3, + 0.251E+3, 0.29500000E+1, 0.19523000E+1, 0.47264780E+3, 0.383E+3, 0.252E+3, 0.29500000E+1, + 0.19639000E+1, 0.61239630E+3, 0.383E+3, 0.256E+3, 0.29500000E+1, 0.18467000E+1, 0.63629250E+3, + 0.383E+3, 0.257E+3, 0.29500000E+1, 0.29175000E+1, 0.47384040E+3, 0.383E+3, 0.272E+3, + 0.29500000E+1, 0.38840000E+1, 0.49409450E+3, 0.383E+3, 0.273E+3, 0.29500000E+1, 0.28988000E+1, + 0.46071470E+3, 0.383E+3, 0.274E+3, 0.29500000E+1, 0.10915300E+2, 0.41970150E+3, 0.383E+3, + 0.275E+3, 0.29500000E+1, 0.98054000E+1, 0.39577380E+3, 0.383E+3, 0.276E+3, 0.29500000E+1, + 0.91527000E+1, 0.40234540E+3, 0.383E+3, 0.277E+3, 0.29500000E+1, 0.29424000E+1, 0.42301710E+3, + 0.383E+3, 0.278E+3, 0.29500000E+1, 0.66669000E+1, 0.50934070E+3, 0.383E+3, 0.281E+3, + 0.29500000E+1, 0.19302000E+1, 0.53837690E+3, 0.383E+3, 0.282E+3, 0.29500000E+1, 0.19356000E+1, + 0.54954870E+3, 0.383E+3, 0.283E+3, 0.29500000E+1, 0.19655000E+1, 0.54627450E+3, 0.383E+3, + 0.284E+3, 0.29500000E+1, 0.19639000E+1, 0.67441620E+3, 0.383E+3, 0.288E+3, 0.29500000E+1, + 0.18075000E+1, 0.12875890E+3, 0.383E+3, 0.305E+3, 0.29500000E+1, 0.29128000E+1, 0.11617900E+3, + 0.383E+3, 0.306E+3, 0.29500000E+1, 0.29987000E+1, 0.88102700E+2, 0.383E+3, 0.307E+3, + 0.29500000E+1, 0.29903000E+1, 0.28508900E+3, 0.383E+3, 0.313E+3, 0.29500000E+1, 0.29146000E+1, + 0.34088270E+3, 0.383E+3, 0.314E+3, 0.29500000E+1, 0.29407000E+1, 0.28413180E+3, 0.383E+3, + 0.315E+3, 0.29500000E+1, 0.29859000E+1, 0.25096550E+3, 0.383E+3, 0.327E+3, 0.29500000E+1, + 0.77785000E+1, 0.27414590E+3, 0.383E+3, 0.328E+3, 0.29500000E+1, 0.62918000E+1, 0.30303570E+3, + 0.383E+3, 0.331E+3, 0.29500000E+1, 0.29233000E+1, 0.34976730E+3, 0.383E+3, 0.332E+3, + 0.29500000E+1, 0.29186000E+1, 0.34567500E+3, 0.383E+3, 0.333E+3, 0.29500000E+1, 0.29709000E+1, + 0.40735630E+3, 0.383E+3, 0.349E+3, 0.29500000E+1, 0.29353000E+1, 0.46691700E+3, 0.383E+3, + 0.350E+3, 0.29500000E+1, 0.29259000E+1, 0.47196350E+3, 0.383E+3, 0.351E+3, 0.29500000E+1, + 0.29315000E+1, 0.45575440E+3, 0.383E+3, 0.381E+3, 0.29500000E+1, 0.29420000E+1, 0.52876490E+3, + 0.383E+3, 0.382E+3, 0.29500000E+1, 0.29081000E+1, 0.53388100E+3, 0.383E+3, 0.383E+3, + 0.29500000E+1, 0.29500000E+1, 0.92092000E+1, 0.405E+3, 0.100E+1, 0.45856000E+1, 0.91180000E+0, + 0.63181000E+1, 0.405E+3, 0.200E+1, 0.45856000E+1, 0.00000000E+0, 0.12066280E+3, 0.405E+3, + 0.300E+1, 0.45856000E+1, 0.00000000E+0, 0.75131100E+2, 0.405E+3, 0.400E+1, 0.45856000E+1, + 0.00000000E+0, 0.52960600E+2, 0.405E+3, 0.500E+1, 0.45856000E+1, 0.00000000E+0, 0.37004200E+2, + 0.405E+3, 0.600E+1, 0.45856000E+1, 0.00000000E+0, 0.26508300E+2, 0.405E+3, 0.700E+1, + 0.45856000E+1, 0.00000000E+0, 0.20399800E+2, 0.405E+3, 0.800E+1, 0.45856000E+1, 0.00000000E+0, + 0.15657800E+2, 0.405E+3, 0.900E+1, 0.45856000E+1, 0.00000000E+0, 0.12160800E+2, 0.405E+3, + 0.100E+2, 0.45856000E+1, 0.00000000E+0, 0.14500200E+3, 0.405E+3, 0.110E+2, 0.45856000E+1, + 0.00000000E+0, 0.11807480E+3, 0.405E+3, 0.120E+2, 0.45856000E+1, 0.00000000E+0, 0.11143770E+3, + 0.405E+3, 0.130E+2, 0.45856000E+1, 0.00000000E+0, 0.90574000E+2, 0.405E+3, 0.140E+2, + 0.45856000E+1, 0.00000000E+0, 0.72514500E+2, 0.405E+3, 0.150E+2, 0.45856000E+1, 0.00000000E+0, + 0.61218400E+2, 0.405E+3, 0.160E+2, 0.45856000E+1, 0.00000000E+0, 0.50810200E+2, 0.405E+3, + 0.170E+2, 0.45856000E+1, 0.00000000E+0, 0.42132400E+2, 0.405E+3, 0.180E+2, 0.45856000E+1, + 0.00000000E+0, 0.23618020E+3, 0.405E+3, 0.190E+2, 0.45856000E+1, 0.00000000E+0, 0.20306790E+3, + 0.405E+3, 0.200E+2, 0.45856000E+1, 0.00000000E+0, 0.16941860E+3, 0.405E+3, 0.210E+2, + 0.45856000E+1, 0.00000000E+0, 0.16529120E+3, 0.405E+3, 0.220E+2, 0.45856000E+1, 0.00000000E+0, + 0.15225000E+3, 0.405E+3, 0.230E+2, 0.45856000E+1, 0.00000000E+0, 0.12032780E+3, 0.405E+3, + 0.240E+2, 0.45856000E+1, 0.00000000E+0, 0.13219840E+3, 0.405E+3, 0.250E+2, 0.45856000E+1, + 0.00000000E+0, 0.10419900E+3, 0.405E+3, 0.260E+2, 0.45856000E+1, 0.00000000E+0, 0.11150630E+3, + 0.405E+3, 0.270E+2, 0.45856000E+1, 0.00000000E+0, 0.11415060E+3, 0.405E+3, 0.280E+2, + 0.45856000E+1, 0.00000000E+0, 0.87805200E+2, 0.405E+3, 0.290E+2, 0.45856000E+1, 0.00000000E+0, + 0.91572800E+2, 0.405E+3, 0.300E+2, 0.45856000E+1, 0.00000000E+0, 0.10787050E+3, 0.405E+3, + 0.310E+2, 0.45856000E+1, 0.00000000E+0, 0.97349000E+2, 0.405E+3, 0.320E+2, 0.45856000E+1, + 0.00000000E+0, 0.84829800E+2, 0.405E+3, 0.330E+2, 0.45856000E+1, 0.00000000E+0, 0.77153300E+2, + 0.405E+3, 0.340E+2, 0.45856000E+1, 0.00000000E+0, 0.68441600E+2, 0.405E+3, 0.350E+2, + 0.45856000E+1, 0.00000000E+0, 0.60254400E+2, 0.405E+3, 0.360E+2, 0.45856000E+1, 0.00000000E+0, + 0.26610180E+3, 0.405E+3, 0.370E+2, 0.45856000E+1, 0.00000000E+0, 0.24185040E+3, 0.405E+3, + 0.380E+2, 0.45856000E+1, 0.00000000E+0, 0.21572630E+3, 0.405E+3, 0.390E+2, 0.45856000E+1, + 0.00000000E+0, 0.19615430E+3, 0.405E+3, 0.400E+2, 0.45856000E+1, 0.00000000E+0, 0.18030420E+3, + 0.405E+3, 0.410E+2, 0.45856000E+1, 0.00000000E+0, 0.14125220E+3, 0.405E+3, 0.420E+2, + 0.45856000E+1, 0.00000000E+0, 0.15672560E+3, 0.405E+3, 0.430E+2, 0.45856000E+1, 0.00000000E+0, + 0.12128760E+3, 0.405E+3, 0.440E+2, 0.45856000E+1, 0.00000000E+0, 0.13232810E+3, 0.405E+3, + 0.450E+2, 0.45856000E+1, 0.00000000E+0, 0.12329130E+3, 0.405E+3, 0.460E+2, 0.45856000E+1, + 0.00000000E+0, 0.10277530E+3, 0.405E+3, 0.470E+2, 0.45856000E+1, 0.00000000E+0, 0.10928870E+3, + 0.405E+3, 0.480E+2, 0.45856000E+1, 0.00000000E+0, 0.13508140E+3, 0.405E+3, 0.490E+2, + 0.45856000E+1, 0.00000000E+0, 0.12715210E+3, 0.405E+3, 0.500E+2, 0.45856000E+1, 0.00000000E+0, + 0.11540180E+3, 0.405E+3, 0.510E+2, 0.45856000E+1, 0.00000000E+0, 0.10829220E+3, 0.405E+3, + 0.520E+2, 0.45856000E+1, 0.00000000E+0, 0.99110900E+2, 0.405E+3, 0.530E+2, 0.45856000E+1, + 0.00000000E+0, 0.90129600E+2, 0.405E+3, 0.540E+2, 0.45856000E+1, 0.00000000E+0, 0.32498720E+3, + 0.405E+3, 0.550E+2, 0.45856000E+1, 0.00000000E+0, 0.30696860E+3, 0.405E+3, 0.560E+2, + 0.45856000E+1, 0.00000000E+0, 0.27449320E+3, 0.405E+3, 0.570E+2, 0.45856000E+1, 0.00000000E+0, + 0.13602870E+3, 0.405E+3, 0.580E+2, 0.45856000E+1, 0.27991000E+1, 0.27357430E+3, 0.405E+3, + 0.590E+2, 0.45856000E+1, 0.00000000E+0, 0.26338860E+3, 0.405E+3, 0.600E+2, 0.45856000E+1, + 0.00000000E+0, 0.25696540E+3, 0.405E+3, 0.610E+2, 0.45856000E+1, 0.00000000E+0, 0.25103460E+3, + 0.405E+3, 0.620E+2, 0.45856000E+1, 0.00000000E+0, 0.24578320E+3, 0.405E+3, 0.630E+2, + 0.45856000E+1, 0.00000000E+0, 0.19745530E+3, 0.405E+3, 0.640E+2, 0.45856000E+1, 0.00000000E+0, + 0.21647080E+3, 0.405E+3, 0.650E+2, 0.45856000E+1, 0.00000000E+0, 0.20953600E+3, 0.405E+3, + 0.660E+2, 0.45856000E+1, 0.00000000E+0, 0.22258700E+3, 0.405E+3, 0.670E+2, 0.45856000E+1, + 0.00000000E+0, 0.21794160E+3, 0.405E+3, 0.680E+2, 0.45856000E+1, 0.00000000E+0, 0.21381010E+3, + 0.405E+3, 0.690E+2, 0.45856000E+1, 0.00000000E+0, 0.21110760E+3, 0.405E+3, 0.700E+2, + 0.45856000E+1, 0.00000000E+0, 0.18048560E+3, 0.405E+3, 0.710E+2, 0.45856000E+1, 0.00000000E+0, + 0.18074340E+3, 0.405E+3, 0.720E+2, 0.45856000E+1, 0.00000000E+0, 0.16687410E+3, 0.405E+3, + 0.730E+2, 0.45856000E+1, 0.00000000E+0, 0.14241400E+3, 0.405E+3, 0.740E+2, 0.45856000E+1, + 0.00000000E+0, 0.14542480E+3, 0.405E+3, 0.750E+2, 0.45856000E+1, 0.00000000E+0, 0.13310380E+3, + 0.405E+3, 0.760E+2, 0.45856000E+1, 0.00000000E+0, 0.12287620E+3, 0.405E+3, 0.770E+2, + 0.45856000E+1, 0.00000000E+0, 0.10304210E+3, 0.405E+3, 0.780E+2, 0.45856000E+1, 0.00000000E+0, + 0.96613000E+2, 0.405E+3, 0.790E+2, 0.45856000E+1, 0.00000000E+0, 0.99656100E+2, 0.405E+3, + 0.800E+2, 0.45856000E+1, 0.00000000E+0, 0.13964810E+3, 0.405E+3, 0.810E+2, 0.45856000E+1, + 0.00000000E+0, 0.13828410E+3, 0.405E+3, 0.820E+2, 0.45856000E+1, 0.00000000E+0, 0.12908340E+3, + 0.405E+3, 0.830E+2, 0.45856000E+1, 0.00000000E+0, 0.12428020E+3, 0.405E+3, 0.840E+2, + 0.45856000E+1, 0.00000000E+0, 0.11600970E+3, 0.405E+3, 0.850E+2, 0.45856000E+1, 0.00000000E+0, + 0.10744210E+3, 0.405E+3, 0.860E+2, 0.45856000E+1, 0.00000000E+0, 0.31132220E+3, 0.405E+3, + 0.870E+2, 0.45856000E+1, 0.00000000E+0, 0.30650670E+3, 0.405E+3, 0.880E+2, 0.45856000E+1, + 0.00000000E+0, 0.27521710E+3, 0.405E+3, 0.890E+2, 0.45856000E+1, 0.00000000E+0, 0.25216490E+3, + 0.405E+3, 0.900E+2, 0.45856000E+1, 0.00000000E+0, 0.24821560E+3, 0.405E+3, 0.910E+2, + 0.45856000E+1, 0.00000000E+0, 0.24044920E+3, 0.405E+3, 0.920E+2, 0.45856000E+1, 0.00000000E+0, + 0.24457260E+3, 0.405E+3, 0.930E+2, 0.45856000E+1, 0.00000000E+0, 0.23732770E+3, 0.405E+3, + 0.940E+2, 0.45856000E+1, 0.00000000E+0, 0.14454100E+2, 0.405E+3, 0.101E+3, 0.45856000E+1, + 0.00000000E+0, 0.43974600E+2, 0.405E+3, 0.103E+3, 0.45856000E+1, 0.98650000E+0, 0.56652700E+2, + 0.405E+3, 0.104E+3, 0.45856000E+1, 0.98080000E+0, 0.44988800E+2, 0.405E+3, 0.105E+3, + 0.45856000E+1, 0.97060000E+0, 0.34722600E+2, 0.405E+3, 0.106E+3, 0.45856000E+1, 0.98680000E+0, + 0.24752500E+2, 0.405E+3, 0.107E+3, 0.45856000E+1, 0.99440000E+0, 0.18383100E+2, 0.405E+3, + 0.108E+3, 0.45856000E+1, 0.99250000E+0, 0.12929100E+2, 0.405E+3, 0.109E+3, 0.45856000E+1, + 0.99820000E+0, 0.63812300E+2, 0.405E+3, 0.111E+3, 0.45856000E+1, 0.96840000E+0, 0.98372400E+2, + 0.405E+3, 0.112E+3, 0.45856000E+1, 0.96280000E+0, 0.10158890E+3, 0.405E+3, 0.113E+3, + 0.45856000E+1, 0.96480000E+0, 0.84115800E+2, 0.405E+3, 0.114E+3, 0.45856000E+1, 0.95070000E+0, + 0.70462900E+2, 0.405E+3, 0.115E+3, 0.45856000E+1, 0.99470000E+0, 0.60525500E+2, 0.405E+3, + 0.116E+3, 0.45856000E+1, 0.99480000E+0, 0.50270800E+2, 0.405E+3, 0.117E+3, 0.45856000E+1, + 0.99720000E+0, 0.89856900E+2, 0.405E+3, 0.119E+3, 0.45856000E+1, 0.97670000E+0, 0.16335340E+3, + 0.405E+3, 0.120E+3, 0.45856000E+1, 0.98310000E+0, 0.91795100E+2, 0.405E+3, 0.121E+3, + 0.45856000E+1, 0.18627000E+1, 0.88738900E+2, 0.405E+3, 0.122E+3, 0.45856000E+1, 0.18299000E+1, + 0.86926400E+2, 0.405E+3, 0.123E+3, 0.45856000E+1, 0.19138000E+1, 0.85880600E+2, 0.405E+3, + 0.124E+3, 0.45856000E+1, 0.18269000E+1, 0.80037500E+2, 0.405E+3, 0.125E+3, 0.45856000E+1, + 0.16406000E+1, 0.74393000E+2, 0.405E+3, 0.126E+3, 0.45856000E+1, 0.16483000E+1, 0.70987100E+2, + 0.405E+3, 0.127E+3, 0.45856000E+1, 0.17149000E+1, 0.69319400E+2, 0.405E+3, 0.128E+3, + 0.45856000E+1, 0.17937000E+1, 0.67783500E+2, 0.405E+3, 0.129E+3, 0.45856000E+1, 0.95760000E+0, + 0.64779800E+2, 0.405E+3, 0.130E+3, 0.45856000E+1, 0.19419000E+1, 0.10192230E+3, 0.405E+3, + 0.131E+3, 0.45856000E+1, 0.96010000E+0, 0.91589500E+2, 0.405E+3, 0.132E+3, 0.45856000E+1, + 0.94340000E+0, 0.83502300E+2, 0.405E+3, 0.133E+3, 0.45856000E+1, 0.98890000E+0, 0.77170000E+2, + 0.405E+3, 0.134E+3, 0.45856000E+1, 0.99010000E+0, 0.68871400E+2, 0.405E+3, 0.135E+3, + 0.45856000E+1, 0.99740000E+0, 0.10786680E+3, 0.405E+3, 0.137E+3, 0.45856000E+1, 0.97380000E+0, + 0.19856600E+3, 0.405E+3, 0.138E+3, 0.45856000E+1, 0.98010000E+0, 0.15735980E+3, 0.405E+3, + 0.139E+3, 0.45856000E+1, 0.19153000E+1, 0.12138420E+3, 0.405E+3, 0.140E+3, 0.45856000E+1, + 0.19355000E+1, 0.12250750E+3, 0.405E+3, 0.141E+3, 0.45856000E+1, 0.19545000E+1, 0.11484620E+3, + 0.405E+3, 0.142E+3, 0.45856000E+1, 0.19420000E+1, 0.12665710E+3, 0.405E+3, 0.143E+3, + 0.45856000E+1, 0.16682000E+1, 0.10138250E+3, 0.405E+3, 0.144E+3, 0.45856000E+1, 0.18584000E+1, + 0.94998700E+2, 0.405E+3, 0.145E+3, 0.45856000E+1, 0.19003000E+1, 0.88451500E+2, 0.405E+3, + 0.146E+3, 0.45856000E+1, 0.18630000E+1, 0.85377300E+2, 0.405E+3, 0.147E+3, 0.45856000E+1, + 0.96790000E+0, 0.85227400E+2, 0.405E+3, 0.148E+3, 0.45856000E+1, 0.19539000E+1, 0.12959790E+3, + 0.405E+3, 0.149E+3, 0.45856000E+1, 0.96330000E+0, 0.11945590E+3, 0.405E+3, 0.150E+3, + 0.45856000E+1, 0.95140000E+0, 0.11338670E+3, 0.405E+3, 0.151E+3, 0.45856000E+1, 0.97490000E+0, + 0.10828980E+3, 0.405E+3, 0.152E+3, 0.45856000E+1, 0.98110000E+0, 0.10002100E+3, 0.405E+3, + 0.153E+3, 0.45856000E+1, 0.99680000E+0, 0.12944610E+3, 0.405E+3, 0.155E+3, 0.45856000E+1, + 0.99090000E+0, 0.25605470E+3, 0.405E+3, 0.156E+3, 0.45856000E+1, 0.97970000E+0, 0.19871970E+3, + 0.405E+3, 0.157E+3, 0.45856000E+1, 0.19373000E+1, 0.13207060E+3, 0.405E+3, 0.159E+3, + 0.45856000E+1, 0.29425000E+1, 0.12936140E+3, 0.405E+3, 0.160E+3, 0.45856000E+1, 0.29455000E+1, + 0.12538070E+3, 0.405E+3, 0.161E+3, 0.45856000E+1, 0.29413000E+1, 0.12566750E+3, 0.405E+3, + 0.162E+3, 0.45856000E+1, 0.29300000E+1, 0.12008750E+3, 0.405E+3, 0.163E+3, 0.45856000E+1, + 0.18286000E+1, 0.12632050E+3, 0.405E+3, 0.164E+3, 0.45856000E+1, 0.28732000E+1, 0.11891980E+3, + 0.405E+3, 0.165E+3, 0.45856000E+1, 0.29086000E+1, 0.12044740E+3, 0.405E+3, 0.166E+3, + 0.45856000E+1, 0.28965000E+1, 0.11313110E+3, 0.405E+3, 0.167E+3, 0.45856000E+1, 0.29242000E+1, + 0.11000160E+3, 0.405E+3, 0.168E+3, 0.45856000E+1, 0.29282000E+1, 0.10921440E+3, 0.405E+3, + 0.169E+3, 0.45856000E+1, 0.29246000E+1, 0.11430830E+3, 0.405E+3, 0.170E+3, 0.45856000E+1, + 0.28482000E+1, 0.10569650E+3, 0.405E+3, 0.171E+3, 0.45856000E+1, 0.29219000E+1, 0.13894310E+3, + 0.405E+3, 0.172E+3, 0.45856000E+1, 0.19254000E+1, 0.13037550E+3, 0.405E+3, 0.173E+3, + 0.45856000E+1, 0.19459000E+1, 0.12030200E+3, 0.405E+3, 0.174E+3, 0.45856000E+1, 0.19292000E+1, + 0.12054080E+3, 0.405E+3, 0.175E+3, 0.45856000E+1, 0.18104000E+1, 0.10824460E+3, 0.405E+3, + 0.176E+3, 0.45856000E+1, 0.18858000E+1, 0.10224360E+3, 0.405E+3, 0.177E+3, 0.45856000E+1, + 0.18648000E+1, 0.97889800E+2, 0.405E+3, 0.178E+3, 0.45856000E+1, 0.19188000E+1, 0.93574800E+2, + 0.405E+3, 0.179E+3, 0.45856000E+1, 0.98460000E+0, 0.91193000E+2, 0.405E+3, 0.180E+3, + 0.45856000E+1, 0.19896000E+1, 0.13986370E+3, 0.405E+3, 0.181E+3, 0.45856000E+1, 0.92670000E+0, + 0.12975270E+3, 0.405E+3, 0.182E+3, 0.45856000E+1, 0.93830000E+0, 0.12706290E+3, 0.405E+3, + 0.183E+3, 0.45856000E+1, 0.98200000E+0, 0.12448510E+3, 0.405E+3, 0.184E+3, 0.45856000E+1, + 0.98150000E+0, 0.11742660E+3, 0.405E+3, 0.185E+3, 0.45856000E+1, 0.99540000E+0, 0.14593990E+3, + 0.405E+3, 0.187E+3, 0.45856000E+1, 0.97050000E+0, 0.25758460E+3, 0.405E+3, 0.188E+3, + 0.45856000E+1, 0.96620000E+0, 0.15618080E+3, 0.405E+3, 0.189E+3, 0.45856000E+1, 0.29070000E+1, + 0.17763750E+3, 0.405E+3, 0.190E+3, 0.45856000E+1, 0.28844000E+1, 0.15984520E+3, 0.405E+3, + 0.191E+3, 0.45856000E+1, 0.28738000E+1, 0.14284510E+3, 0.405E+3, 0.192E+3, 0.45856000E+1, + 0.28878000E+1, 0.13782260E+3, 0.405E+3, 0.193E+3, 0.45856000E+1, 0.29095000E+1, 0.16054880E+3, + 0.405E+3, 0.194E+3, 0.45856000E+1, 0.19209000E+1, 0.38474500E+2, 0.405E+3, 0.204E+3, + 0.45856000E+1, 0.19697000E+1, 0.38139800E+2, 0.405E+3, 0.205E+3, 0.45856000E+1, 0.19441000E+1, + 0.28676300E+2, 0.405E+3, 0.206E+3, 0.45856000E+1, 0.19985000E+1, 0.23290000E+2, 0.405E+3, + 0.207E+3, 0.45856000E+1, 0.20143000E+1, 0.16298700E+2, 0.405E+3, 0.208E+3, 0.45856000E+1, + 0.19887000E+1, 0.66869600E+2, 0.405E+3, 0.212E+3, 0.45856000E+1, 0.19496000E+1, 0.80700500E+2, + 0.405E+3, 0.213E+3, 0.45856000E+1, 0.19311000E+1, 0.78583500E+2, 0.405E+3, 0.214E+3, + 0.45856000E+1, 0.19435000E+1, 0.69411500E+2, 0.405E+3, 0.215E+3, 0.45856000E+1, 0.20102000E+1, + 0.59323900E+2, 0.405E+3, 0.216E+3, 0.45856000E+1, 0.19903000E+1, 0.93919400E+2, 0.405E+3, + 0.220E+3, 0.45856000E+1, 0.19349000E+1, 0.91307200E+2, 0.405E+3, 0.221E+3, 0.45856000E+1, + 0.28999000E+1, 0.92515400E+2, 0.405E+3, 0.222E+3, 0.45856000E+1, 0.38675000E+1, 0.84657000E+2, + 0.405E+3, 0.223E+3, 0.45856000E+1, 0.29110000E+1, 0.65034900E+2, 0.405E+3, 0.224E+3, + 0.45856000E+1, 0.10619100E+2, 0.56292100E+2, 0.405E+3, 0.225E+3, 0.45856000E+1, 0.98849000E+1, + 0.55169800E+2, 0.405E+3, 0.226E+3, 0.45856000E+1, 0.91376000E+1, 0.63454300E+2, 0.405E+3, + 0.227E+3, 0.45856000E+1, 0.29263000E+1, 0.59424700E+2, 0.405E+3, 0.228E+3, 0.45856000E+1, + 0.65458000E+1, 0.82444700E+2, 0.405E+3, 0.231E+3, 0.45856000E+1, 0.19315000E+1, 0.87528200E+2, + 0.405E+3, 0.232E+3, 0.45856000E+1, 0.19447000E+1, 0.81489600E+2, 0.405E+3, 0.233E+3, + 0.45856000E+1, 0.19793000E+1, 0.76593900E+2, 0.405E+3, 0.234E+3, 0.45856000E+1, 0.19812000E+1, + 0.11280930E+3, 0.405E+3, 0.238E+3, 0.45856000E+1, 0.19143000E+1, 0.11017370E+3, 0.405E+3, + 0.239E+3, 0.45856000E+1, 0.28903000E+1, 0.11160800E+3, 0.405E+3, 0.240E+3, 0.45856000E+1, + 0.39106000E+1, 0.10787110E+3, 0.405E+3, 0.241E+3, 0.45856000E+1, 0.29225000E+1, 0.96603000E+2, + 0.405E+3, 0.242E+3, 0.45856000E+1, 0.11055600E+2, 0.86127600E+2, 0.405E+3, 0.243E+3, + 0.45856000E+1, 0.95402000E+1, 0.81685300E+2, 0.405E+3, 0.244E+3, 0.45856000E+1, 0.88895000E+1, + 0.82288700E+2, 0.405E+3, 0.245E+3, 0.45856000E+1, 0.29696000E+1, 0.85628100E+2, 0.405E+3, + 0.246E+3, 0.45856000E+1, 0.57095000E+1, 0.10669460E+3, 0.405E+3, 0.249E+3, 0.45856000E+1, + 0.19378000E+1, 0.11592860E+3, 0.405E+3, 0.250E+3, 0.45856000E+1, 0.19505000E+1, 0.11062760E+3, + 0.405E+3, 0.251E+3, 0.45856000E+1, 0.19523000E+1, 0.10754340E+3, 0.405E+3, 0.252E+3, + 0.45856000E+1, 0.19639000E+1, 0.13712500E+3, 0.405E+3, 0.256E+3, 0.45856000E+1, 0.18467000E+1, + 0.14310680E+3, 0.405E+3, 0.257E+3, 0.45856000E+1, 0.29175000E+1, 0.10750530E+3, 0.405E+3, + 0.272E+3, 0.45856000E+1, 0.38840000E+1, 0.11175770E+3, 0.405E+3, 0.273E+3, 0.45856000E+1, + 0.28988000E+1, 0.10503500E+3, 0.405E+3, 0.274E+3, 0.45856000E+1, 0.10915300E+2, 0.96275900E+2, + 0.405E+3, 0.275E+3, 0.45856000E+1, 0.98054000E+1, 0.91232500E+2, 0.405E+3, 0.276E+3, + 0.45856000E+1, 0.91527000E+1, 0.92145800E+2, 0.405E+3, 0.277E+3, 0.45856000E+1, 0.29424000E+1, + 0.96759100E+2, 0.405E+3, 0.278E+3, 0.45856000E+1, 0.66669000E+1, 0.11499010E+3, 0.405E+3, + 0.281E+3, 0.45856000E+1, 0.19302000E+1, 0.12156000E+3, 0.405E+3, 0.282E+3, 0.45856000E+1, + 0.19356000E+1, 0.12447110E+3, 0.405E+3, 0.283E+3, 0.45856000E+1, 0.19655000E+1, 0.12415670E+3, + 0.405E+3, 0.284E+3, 0.45856000E+1, 0.19639000E+1, 0.15117960E+3, 0.405E+3, 0.288E+3, + 0.45856000E+1, 0.18075000E+1, 0.29680400E+2, 0.405E+3, 0.305E+3, 0.45856000E+1, 0.29128000E+1, + 0.26850600E+2, 0.405E+3, 0.306E+3, 0.45856000E+1, 0.29987000E+1, 0.20588600E+2, 0.405E+3, + 0.307E+3, 0.45856000E+1, 0.29903000E+1, 0.64333200E+2, 0.405E+3, 0.313E+3, 0.45856000E+1, + 0.29146000E+1, 0.76403800E+2, 0.405E+3, 0.314E+3, 0.45856000E+1, 0.29407000E+1, 0.64812700E+2, + 0.405E+3, 0.315E+3, 0.45856000E+1, 0.29859000E+1, 0.57198700E+2, 0.405E+3, 0.327E+3, + 0.45856000E+1, 0.77785000E+1, 0.61697400E+2, 0.405E+3, 0.328E+3, 0.45856000E+1, 0.62918000E+1, + 0.68793500E+2, 0.405E+3, 0.331E+3, 0.45856000E+1, 0.29233000E+1, 0.79165600E+2, 0.405E+3, + 0.332E+3, 0.45856000E+1, 0.29186000E+1, 0.78747800E+2, 0.405E+3, 0.333E+3, 0.45856000E+1, + 0.29709000E+1, 0.92535500E+2, 0.405E+3, 0.349E+3, 0.45856000E+1, 0.29353000E+1, 0.10552950E+3, + 0.405E+3, 0.350E+3, 0.45856000E+1, 0.29259000E+1, 0.10712000E+3, 0.405E+3, 0.351E+3, + 0.45856000E+1, 0.29315000E+1, 0.10385430E+3, 0.405E+3, 0.381E+3, 0.45856000E+1, 0.29420000E+1, + 0.11970710E+3, 0.405E+3, 0.382E+3, 0.45856000E+1, 0.29081000E+1, 0.12129570E+3, 0.405E+3, + 0.383E+3, 0.45856000E+1, 0.29500000E+1, 0.28031500E+2, 0.405E+3, 0.405E+3, 0.45856000E+1, + 0.45856000E+1, 0.73662000E+1, 0.406E+3, 0.100E+1, 0.39844000E+1, 0.91180000E+0, 0.52567000E+1, + 0.406E+3, 0.200E+1, 0.39844000E+1, 0.00000000E+0, 0.87818300E+2, 0.406E+3, 0.300E+1, + 0.39844000E+1, 0.00000000E+0, 0.56466200E+2, 0.406E+3, 0.400E+1, 0.39844000E+1, 0.00000000E+0, + 0.40896200E+2, 0.406E+3, 0.500E+1, 0.39844000E+1, 0.00000000E+0, 0.29283000E+2, 0.406E+3, + 0.600E+1, 0.39844000E+1, 0.00000000E+0, 0.21419900E+2, 0.406E+3, 0.700E+1, 0.39844000E+1, + 0.00000000E+0, 0.16754400E+2, 0.406E+3, 0.800E+1, 0.39844000E+1, 0.00000000E+0, 0.13054600E+2, + 0.406E+3, 0.900E+1, 0.39844000E+1, 0.00000000E+0, 0.10271600E+2, 0.406E+3, 0.100E+2, + 0.39844000E+1, 0.00000000E+0, 0.10592480E+3, 0.406E+3, 0.110E+2, 0.39844000E+1, 0.00000000E+0, + 0.88262000E+2, 0.406E+3, 0.120E+2, 0.39844000E+1, 0.00000000E+0, 0.84307300E+2, 0.406E+3, + 0.130E+2, 0.39844000E+1, 0.00000000E+0, 0.69722400E+2, 0.406E+3, 0.140E+2, 0.39844000E+1, + 0.00000000E+0, 0.56785200E+2, 0.406E+3, 0.150E+2, 0.39844000E+1, 0.00000000E+0, 0.48568100E+2, + 0.406E+3, 0.160E+2, 0.39844000E+1, 0.00000000E+0, 0.40851600E+2, 0.406E+3, 0.170E+2, + 0.39844000E+1, 0.00000000E+0, 0.34305000E+2, 0.406E+3, 0.180E+2, 0.39844000E+1, 0.00000000E+0, + 0.17296850E+3, 0.406E+3, 0.190E+2, 0.39844000E+1, 0.00000000E+0, 0.15082030E+3, 0.406E+3, + 0.200E+2, 0.39844000E+1, 0.00000000E+0, 0.12634910E+3, 0.406E+3, 0.210E+2, 0.39844000E+1, + 0.00000000E+0, 0.12400130E+3, 0.406E+3, 0.220E+2, 0.39844000E+1, 0.00000000E+0, 0.11458700E+3, + 0.406E+3, 0.230E+2, 0.39844000E+1, 0.00000000E+0, 0.91023300E+2, 0.406E+3, 0.240E+2, + 0.39844000E+1, 0.00000000E+0, 0.99976800E+2, 0.406E+3, 0.250E+2, 0.39844000E+1, 0.00000000E+0, + 0.79263000E+2, 0.406E+3, 0.260E+2, 0.39844000E+1, 0.00000000E+0, 0.84954700E+2, 0.406E+3, + 0.270E+2, 0.39844000E+1, 0.00000000E+0, 0.86660100E+2, 0.406E+3, 0.280E+2, 0.39844000E+1, + 0.00000000E+0, 0.67082300E+2, 0.406E+3, 0.290E+2, 0.39844000E+1, 0.00000000E+0, 0.70282000E+2, + 0.406E+3, 0.300E+2, 0.39844000E+1, 0.00000000E+0, 0.82324800E+2, 0.406E+3, 0.310E+2, + 0.39844000E+1, 0.00000000E+0, 0.75207600E+2, 0.406E+3, 0.320E+2, 0.39844000E+1, 0.00000000E+0, + 0.66414700E+2, 0.406E+3, 0.330E+2, 0.39844000E+1, 0.00000000E+0, 0.60991300E+2, 0.406E+3, + 0.340E+2, 0.39844000E+1, 0.00000000E+0, 0.54682400E+2, 0.406E+3, 0.350E+2, 0.39844000E+1, + 0.00000000E+0, 0.48650000E+2, 0.406E+3, 0.360E+2, 0.39844000E+1, 0.00000000E+0, 0.19559960E+3, + 0.406E+3, 0.370E+2, 0.39844000E+1, 0.00000000E+0, 0.17983950E+3, 0.406E+3, 0.380E+2, + 0.39844000E+1, 0.00000000E+0, 0.16177380E+3, 0.406E+3, 0.390E+2, 0.39844000E+1, 0.00000000E+0, + 0.14800690E+3, 0.406E+3, 0.400E+2, 0.39844000E+1, 0.00000000E+0, 0.13670500E+3, 0.406E+3, + 0.410E+2, 0.39844000E+1, 0.00000000E+0, 0.10823560E+3, 0.406E+3, 0.420E+2, 0.39844000E+1, + 0.00000000E+0, 0.11959950E+3, 0.406E+3, 0.430E+2, 0.39844000E+1, 0.00000000E+0, 0.93626900E+2, + 0.406E+3, 0.440E+2, 0.39844000E+1, 0.00000000E+0, 0.10181940E+3, 0.406E+3, 0.450E+2, + 0.39844000E+1, 0.00000000E+0, 0.95161200E+2, 0.406E+3, 0.460E+2, 0.39844000E+1, 0.00000000E+0, + 0.79665700E+2, 0.406E+3, 0.470E+2, 0.39844000E+1, 0.00000000E+0, 0.84713900E+2, 0.406E+3, + 0.480E+2, 0.39844000E+1, 0.00000000E+0, 0.10361980E+3, 0.406E+3, 0.490E+2, 0.39844000E+1, + 0.00000000E+0, 0.98343100E+2, 0.406E+3, 0.500E+2, 0.39844000E+1, 0.00000000E+0, 0.90179700E+2, + 0.406E+3, 0.510E+2, 0.39844000E+1, 0.00000000E+0, 0.85234300E+2, 0.406E+3, 0.520E+2, + 0.39844000E+1, 0.00000000E+0, 0.78668600E+2, 0.406E+3, 0.530E+2, 0.39844000E+1, 0.00000000E+0, + 0.72161700E+2, 0.406E+3, 0.540E+2, 0.39844000E+1, 0.00000000E+0, 0.23924420E+3, 0.406E+3, + 0.550E+2, 0.39844000E+1, 0.00000000E+0, 0.22805560E+3, 0.406E+3, 0.560E+2, 0.39844000E+1, + 0.00000000E+0, 0.20554070E+3, 0.406E+3, 0.570E+2, 0.39844000E+1, 0.00000000E+0, 0.10630350E+3, + 0.406E+3, 0.580E+2, 0.39844000E+1, 0.27991000E+1, 0.20400390E+3, 0.406E+3, 0.590E+2, + 0.39844000E+1, 0.00000000E+0, 0.19661650E+3, 0.406E+3, 0.600E+2, 0.39844000E+1, 0.00000000E+0, + 0.19187330E+3, 0.406E+3, 0.610E+2, 0.39844000E+1, 0.00000000E+0, 0.18748180E+3, 0.406E+3, + 0.620E+2, 0.39844000E+1, 0.00000000E+0, 0.18359400E+3, 0.406E+3, 0.630E+2, 0.39844000E+1, + 0.00000000E+0, 0.14929180E+3, 0.406E+3, 0.640E+2, 0.39844000E+1, 0.00000000E+0, 0.16190910E+3, + 0.406E+3, 0.650E+2, 0.39844000E+1, 0.00000000E+0, 0.15698310E+3, 0.406E+3, 0.660E+2, + 0.39844000E+1, 0.00000000E+0, 0.16653800E+3, 0.406E+3, 0.670E+2, 0.39844000E+1, 0.00000000E+0, + 0.16307020E+3, 0.406E+3, 0.680E+2, 0.39844000E+1, 0.00000000E+0, 0.16000710E+3, 0.406E+3, + 0.690E+2, 0.39844000E+1, 0.00000000E+0, 0.15788900E+3, 0.406E+3, 0.700E+2, 0.39844000E+1, + 0.00000000E+0, 0.13608820E+3, 0.406E+3, 0.710E+2, 0.39844000E+1, 0.00000000E+0, 0.13729240E+3, + 0.406E+3, 0.720E+2, 0.39844000E+1, 0.00000000E+0, 0.12762070E+3, 0.406E+3, 0.730E+2, + 0.39844000E+1, 0.00000000E+0, 0.10983770E+3, 0.406E+3, 0.740E+2, 0.39844000E+1, 0.00000000E+0, + 0.11232740E+3, 0.406E+3, 0.750E+2, 0.39844000E+1, 0.00000000E+0, 0.10346160E+3, 0.406E+3, + 0.760E+2, 0.39844000E+1, 0.00000000E+0, 0.96033300E+2, 0.406E+3, 0.770E+2, 0.39844000E+1, + 0.00000000E+0, 0.81236300E+2, 0.406E+3, 0.780E+2, 0.39844000E+1, 0.00000000E+0, 0.76428200E+2, + 0.406E+3, 0.790E+2, 0.39844000E+1, 0.00000000E+0, 0.78850000E+2, 0.406E+3, 0.800E+2, + 0.39844000E+1, 0.00000000E+0, 0.10789760E+3, 0.406E+3, 0.810E+2, 0.39844000E+1, 0.00000000E+0, + 0.10736650E+3, 0.406E+3, 0.820E+2, 0.39844000E+1, 0.00000000E+0, 0.10105710E+3, 0.406E+3, + 0.830E+2, 0.39844000E+1, 0.00000000E+0, 0.97833200E+2, 0.406E+3, 0.840E+2, 0.39844000E+1, + 0.00000000E+0, 0.91999000E+2, 0.406E+3, 0.850E+2, 0.39844000E+1, 0.00000000E+0, 0.85843200E+2, + 0.406E+3, 0.860E+2, 0.39844000E+1, 0.00000000E+0, 0.23075540E+3, 0.406E+3, 0.870E+2, + 0.39844000E+1, 0.00000000E+0, 0.22882200E+3, 0.406E+3, 0.880E+2, 0.39844000E+1, 0.00000000E+0, + 0.20694660E+3, 0.406E+3, 0.890E+2, 0.39844000E+1, 0.00000000E+0, 0.19164430E+3, 0.406E+3, + 0.900E+2, 0.39844000E+1, 0.00000000E+0, 0.18809650E+3, 0.406E+3, 0.910E+2, 0.39844000E+1, + 0.00000000E+0, 0.18230090E+3, 0.406E+3, 0.920E+2, 0.39844000E+1, 0.00000000E+0, 0.18437780E+3, + 0.406E+3, 0.930E+2, 0.39844000E+1, 0.00000000E+0, 0.17908370E+3, 0.406E+3, 0.940E+2, + 0.39844000E+1, 0.00000000E+0, 0.11329900E+2, 0.406E+3, 0.101E+3, 0.39844000E+1, 0.00000000E+0, + 0.33215800E+2, 0.406E+3, 0.103E+3, 0.39844000E+1, 0.98650000E+0, 0.43062000E+2, 0.406E+3, + 0.104E+3, 0.39844000E+1, 0.98080000E+0, 0.34999000E+2, 0.406E+3, 0.105E+3, 0.39844000E+1, + 0.97060000E+0, 0.27520600E+2, 0.406E+3, 0.106E+3, 0.39844000E+1, 0.98680000E+0, 0.20046800E+2, + 0.406E+3, 0.107E+3, 0.39844000E+1, 0.99440000E+0, 0.15175100E+2, 0.406E+3, 0.108E+3, + 0.39844000E+1, 0.99250000E+0, 0.10939100E+2, 0.406E+3, 0.109E+3, 0.39844000E+1, 0.99820000E+0, + 0.48162200E+2, 0.406E+3, 0.111E+3, 0.39844000E+1, 0.96840000E+0, 0.74002800E+2, 0.406E+3, + 0.112E+3, 0.39844000E+1, 0.96280000E+0, 0.77136200E+2, 0.406E+3, 0.113E+3, 0.39844000E+1, + 0.96480000E+0, 0.64967200E+2, 0.406E+3, 0.114E+3, 0.39844000E+1, 0.95070000E+0, 0.55237500E+2, + 0.406E+3, 0.115E+3, 0.39844000E+1, 0.99470000E+0, 0.48022100E+2, 0.406E+3, 0.116E+3, + 0.39844000E+1, 0.99480000E+0, 0.40420900E+2, 0.406E+3, 0.117E+3, 0.39844000E+1, 0.99720000E+0, + 0.69043400E+2, 0.406E+3, 0.119E+3, 0.39844000E+1, 0.97670000E+0, 0.12207070E+3, 0.406E+3, + 0.120E+3, 0.39844000E+1, 0.98310000E+0, 0.71085400E+2, 0.406E+3, 0.121E+3, 0.39844000E+1, + 0.18627000E+1, 0.68829700E+2, 0.406E+3, 0.122E+3, 0.39844000E+1, 0.18299000E+1, 0.67438300E+2, + 0.406E+3, 0.123E+3, 0.39844000E+1, 0.19138000E+1, 0.66556800E+2, 0.406E+3, 0.124E+3, + 0.39844000E+1, 0.18269000E+1, 0.62393100E+2, 0.406E+3, 0.125E+3, 0.39844000E+1, 0.16406000E+1, + 0.58177600E+2, 0.406E+3, 0.126E+3, 0.39844000E+1, 0.16483000E+1, 0.55565400E+2, 0.406E+3, + 0.127E+3, 0.39844000E+1, 0.17149000E+1, 0.54239700E+2, 0.406E+3, 0.128E+3, 0.39844000E+1, + 0.17937000E+1, 0.52798400E+2, 0.406E+3, 0.129E+3, 0.39844000E+1, 0.95760000E+0, 0.50885600E+2, + 0.406E+3, 0.130E+3, 0.39844000E+1, 0.19419000E+1, 0.78050500E+2, 0.406E+3, 0.131E+3, + 0.39844000E+1, 0.96010000E+0, 0.71014300E+2, 0.406E+3, 0.132E+3, 0.39844000E+1, 0.94340000E+0, + 0.65441400E+2, 0.406E+3, 0.133E+3, 0.39844000E+1, 0.98890000E+0, 0.61004100E+2, 0.406E+3, + 0.134E+3, 0.39844000E+1, 0.99010000E+0, 0.55002900E+2, 0.406E+3, 0.135E+3, 0.39844000E+1, + 0.99740000E+0, 0.83241800E+2, 0.406E+3, 0.137E+3, 0.39844000E+1, 0.97380000E+0, 0.14851410E+3, + 0.406E+3, 0.138E+3, 0.39844000E+1, 0.98010000E+0, 0.11976540E+3, 0.406E+3, 0.139E+3, + 0.39844000E+1, 0.19153000E+1, 0.94117300E+2, 0.406E+3, 0.140E+3, 0.39844000E+1, 0.19355000E+1, + 0.95000900E+2, 0.406E+3, 0.141E+3, 0.39844000E+1, 0.19545000E+1, 0.89422900E+2, 0.406E+3, + 0.142E+3, 0.39844000E+1, 0.19420000E+1, 0.97841700E+2, 0.406E+3, 0.143E+3, 0.39844000E+1, + 0.16682000E+1, 0.79575000E+2, 0.406E+3, 0.144E+3, 0.39844000E+1, 0.18584000E+1, 0.74728700E+2, + 0.406E+3, 0.145E+3, 0.39844000E+1, 0.19003000E+1, 0.69773000E+2, 0.406E+3, 0.146E+3, + 0.39844000E+1, 0.18630000E+1, 0.67307000E+2, 0.406E+3, 0.147E+3, 0.39844000E+1, 0.96790000E+0, + 0.67402800E+2, 0.406E+3, 0.148E+3, 0.39844000E+1, 0.19539000E+1, 0.99752200E+2, 0.406E+3, + 0.149E+3, 0.39844000E+1, 0.96330000E+0, 0.92802100E+2, 0.406E+3, 0.150E+3, 0.39844000E+1, + 0.95140000E+0, 0.88743400E+2, 0.406E+3, 0.151E+3, 0.39844000E+1, 0.97490000E+0, 0.85265700E+2, + 0.406E+3, 0.152E+3, 0.39844000E+1, 0.98110000E+0, 0.79371600E+2, 0.406E+3, 0.153E+3, + 0.39844000E+1, 0.99680000E+0, 0.10047420E+3, 0.406E+3, 0.155E+3, 0.39844000E+1, 0.99090000E+0, + 0.19124940E+3, 0.406E+3, 0.156E+3, 0.39844000E+1, 0.97970000E+0, 0.15114110E+3, 0.406E+3, + 0.157E+3, 0.39844000E+1, 0.19373000E+1, 0.10329330E+3, 0.406E+3, 0.159E+3, 0.39844000E+1, + 0.29425000E+1, 0.10119170E+3, 0.406E+3, 0.160E+3, 0.39844000E+1, 0.29455000E+1, 0.98146700E+2, + 0.406E+3, 0.161E+3, 0.39844000E+1, 0.29413000E+1, 0.98227000E+2, 0.406E+3, 0.162E+3, + 0.39844000E+1, 0.29300000E+1, 0.93519300E+2, 0.406E+3, 0.163E+3, 0.39844000E+1, 0.18286000E+1, + 0.98621300E+2, 0.406E+3, 0.164E+3, 0.39844000E+1, 0.28732000E+1, 0.93007000E+2, 0.406E+3, + 0.165E+3, 0.39844000E+1, 0.29086000E+1, 0.93977100E+2, 0.406E+3, 0.166E+3, 0.39844000E+1, + 0.28965000E+1, 0.88582200E+2, 0.406E+3, 0.167E+3, 0.39844000E+1, 0.29242000E+1, 0.86174300E+2, + 0.406E+3, 0.168E+3, 0.39844000E+1, 0.29282000E+1, 0.85510700E+2, 0.406E+3, 0.169E+3, + 0.39844000E+1, 0.29246000E+1, 0.89191500E+2, 0.406E+3, 0.170E+3, 0.39844000E+1, 0.28482000E+1, + 0.82798600E+2, 0.406E+3, 0.171E+3, 0.39844000E+1, 0.29219000E+1, 0.10701830E+3, 0.406E+3, + 0.172E+3, 0.39844000E+1, 0.19254000E+1, 0.10110190E+3, 0.406E+3, 0.173E+3, 0.39844000E+1, + 0.19459000E+1, 0.93960100E+2, 0.406E+3, 0.174E+3, 0.39844000E+1, 0.19292000E+1, 0.93667200E+2, + 0.406E+3, 0.175E+3, 0.39844000E+1, 0.18104000E+1, 0.85392500E+2, 0.406E+3, 0.176E+3, + 0.39844000E+1, 0.18858000E+1, 0.80955200E+2, 0.406E+3, 0.177E+3, 0.39844000E+1, 0.18648000E+1, + 0.77699700E+2, 0.406E+3, 0.178E+3, 0.39844000E+1, 0.19188000E+1, 0.74376300E+2, 0.406E+3, + 0.179E+3, 0.39844000E+1, 0.98460000E+0, 0.72783200E+2, 0.406E+3, 0.180E+3, 0.39844000E+1, + 0.19896000E+1, 0.10824170E+3, 0.406E+3, 0.181E+3, 0.39844000E+1, 0.92670000E+0, 0.10128820E+3, + 0.406E+3, 0.182E+3, 0.39844000E+1, 0.93830000E+0, 0.99667900E+2, 0.406E+3, 0.183E+3, + 0.39844000E+1, 0.98200000E+0, 0.98057500E+2, 0.406E+3, 0.184E+3, 0.39844000E+1, 0.98150000E+0, + 0.93106900E+2, 0.406E+3, 0.185E+3, 0.39844000E+1, 0.99540000E+0, 0.11330310E+3, 0.406E+3, + 0.187E+3, 0.39844000E+1, 0.97050000E+0, 0.19337770E+3, 0.406E+3, 0.188E+3, 0.39844000E+1, + 0.96620000E+0, 0.12204020E+3, 0.406E+3, 0.189E+3, 0.39844000E+1, 0.29070000E+1, 0.13787680E+3, + 0.406E+3, 0.190E+3, 0.39844000E+1, 0.28844000E+1, 0.12470980E+3, 0.406E+3, 0.191E+3, + 0.39844000E+1, 0.28738000E+1, 0.11209800E+3, 0.406E+3, 0.192E+3, 0.39844000E+1, 0.28878000E+1, + 0.10834540E+3, 0.406E+3, 0.193E+3, 0.39844000E+1, 0.29095000E+1, 0.12418240E+3, 0.406E+3, + 0.194E+3, 0.39844000E+1, 0.19209000E+1, 0.29881900E+2, 0.406E+3, 0.204E+3, 0.39844000E+1, + 0.19697000E+1, 0.29891600E+2, 0.406E+3, 0.205E+3, 0.39844000E+1, 0.19441000E+1, 0.22951700E+2, + 0.406E+3, 0.206E+3, 0.39844000E+1, 0.19985000E+1, 0.18917200E+2, 0.406E+3, 0.207E+3, + 0.39844000E+1, 0.20143000E+1, 0.13552500E+2, 0.406E+3, 0.208E+3, 0.39844000E+1, 0.19887000E+1, + 0.51352500E+2, 0.406E+3, 0.212E+3, 0.39844000E+1, 0.19496000E+1, 0.61961000E+2, 0.406E+3, + 0.213E+3, 0.39844000E+1, 0.19311000E+1, 0.60868700E+2, 0.406E+3, 0.214E+3, 0.39844000E+1, + 0.19435000E+1, 0.54394100E+2, 0.406E+3, 0.215E+3, 0.39844000E+1, 0.20102000E+1, 0.47094300E+2, + 0.406E+3, 0.216E+3, 0.39844000E+1, 0.19903000E+1, 0.72552400E+2, 0.406E+3, 0.220E+3, + 0.39844000E+1, 0.19349000E+1, 0.70967000E+2, 0.406E+3, 0.221E+3, 0.39844000E+1, 0.28999000E+1, + 0.71959500E+2, 0.406E+3, 0.222E+3, 0.39844000E+1, 0.38675000E+1, 0.65947300E+2, 0.406E+3, + 0.223E+3, 0.39844000E+1, 0.29110000E+1, 0.51461000E+2, 0.406E+3, 0.224E+3, 0.39844000E+1, + 0.10619100E+2, 0.44917900E+2, 0.406E+3, 0.225E+3, 0.39844000E+1, 0.98849000E+1, 0.43990200E+2, + 0.406E+3, 0.226E+3, 0.39844000E+1, 0.91376000E+1, 0.49914800E+2, 0.406E+3, 0.227E+3, + 0.39844000E+1, 0.29263000E+1, 0.46907100E+2, 0.406E+3, 0.228E+3, 0.39844000E+1, 0.65458000E+1, + 0.63911700E+2, 0.406E+3, 0.231E+3, 0.39844000E+1, 0.19315000E+1, 0.68034300E+2, 0.406E+3, + 0.232E+3, 0.39844000E+1, 0.19447000E+1, 0.63962100E+2, 0.406E+3, 0.233E+3, 0.39844000E+1, + 0.19793000E+1, 0.60572300E+2, 0.406E+3, 0.234E+3, 0.39844000E+1, 0.19812000E+1, 0.87389100E+2, + 0.406E+3, 0.238E+3, 0.39844000E+1, 0.19143000E+1, 0.85966800E+2, 0.406E+3, 0.239E+3, + 0.39844000E+1, 0.28903000E+1, 0.87311600E+2, 0.406E+3, 0.240E+3, 0.39844000E+1, 0.39106000E+1, + 0.84504100E+2, 0.406E+3, 0.241E+3, 0.39844000E+1, 0.29225000E+1, 0.76386900E+2, 0.406E+3, + 0.242E+3, 0.39844000E+1, 0.11055600E+2, 0.68623700E+2, 0.406E+3, 0.243E+3, 0.39844000E+1, + 0.95402000E+1, 0.65290500E+2, 0.406E+3, 0.244E+3, 0.39844000E+1, 0.88895000E+1, 0.65394900E+2, + 0.406E+3, 0.245E+3, 0.39844000E+1, 0.29696000E+1, 0.67836300E+2, 0.406E+3, 0.246E+3, + 0.39844000E+1, 0.57095000E+1, 0.83227000E+2, 0.406E+3, 0.249E+3, 0.39844000E+1, 0.19378000E+1, + 0.90268300E+2, 0.406E+3, 0.250E+3, 0.39844000E+1, 0.19505000E+1, 0.86757400E+2, 0.406E+3, + 0.251E+3, 0.39844000E+1, 0.19523000E+1, 0.84742500E+2, 0.406E+3, 0.252E+3, 0.39844000E+1, + 0.19639000E+1, 0.10658000E+3, 0.406E+3, 0.256E+3, 0.39844000E+1, 0.18467000E+1, 0.11146330E+3, + 0.406E+3, 0.257E+3, 0.39844000E+1, 0.29175000E+1, 0.84445100E+2, 0.406E+3, 0.272E+3, + 0.39844000E+1, 0.38840000E+1, 0.87680900E+2, 0.406E+3, 0.273E+3, 0.39844000E+1, 0.28988000E+1, + 0.83080500E+2, 0.406E+3, 0.274E+3, 0.39844000E+1, 0.10915300E+2, 0.76686700E+2, 0.406E+3, + 0.275E+3, 0.39844000E+1, 0.98054000E+1, 0.73066600E+2, 0.406E+3, 0.276E+3, 0.39844000E+1, + 0.91527000E+1, 0.73485300E+2, 0.406E+3, 0.277E+3, 0.39844000E+1, 0.29424000E+1, 0.77012400E+2, + 0.406E+3, 0.278E+3, 0.39844000E+1, 0.66669000E+1, 0.90346700E+2, 0.406E+3, 0.281E+3, + 0.39844000E+1, 0.19302000E+1, 0.95397300E+2, 0.406E+3, 0.282E+3, 0.39844000E+1, 0.19356000E+1, + 0.97851700E+2, 0.406E+3, 0.283E+3, 0.39844000E+1, 0.19655000E+1, 0.97881700E+2, 0.406E+3, + 0.284E+3, 0.39844000E+1, 0.19639000E+1, 0.11758210E+3, 0.406E+3, 0.288E+3, 0.39844000E+1, + 0.18075000E+1, 0.23621000E+2, 0.406E+3, 0.305E+3, 0.39844000E+1, 0.29128000E+1, 0.21537700E+2, + 0.406E+3, 0.306E+3, 0.39844000E+1, 0.29987000E+1, 0.16816900E+2, 0.406E+3, 0.307E+3, + 0.39844000E+1, 0.29903000E+1, 0.50039700E+2, 0.406E+3, 0.313E+3, 0.39844000E+1, 0.29146000E+1, + 0.59158300E+2, 0.406E+3, 0.314E+3, 0.39844000E+1, 0.29407000E+1, 0.51004800E+2, 0.406E+3, + 0.315E+3, 0.39844000E+1, 0.29859000E+1, 0.45389100E+2, 0.406E+3, 0.327E+3, 0.39844000E+1, + 0.77785000E+1, 0.48414900E+2, 0.406E+3, 0.328E+3, 0.39844000E+1, 0.62918000E+1, 0.53961700E+2, + 0.406E+3, 0.331E+3, 0.39844000E+1, 0.29233000E+1, 0.61903800E+2, 0.406E+3, 0.332E+3, + 0.39844000E+1, 0.29186000E+1, 0.61943800E+2, 0.406E+3, 0.333E+3, 0.39844000E+1, 0.29709000E+1, + 0.72970300E+2, 0.406E+3, 0.349E+3, 0.39844000E+1, 0.29353000E+1, 0.82717000E+2, 0.406E+3, + 0.350E+3, 0.39844000E+1, 0.29259000E+1, 0.84217700E+2, 0.406E+3, 0.351E+3, 0.39844000E+1, + 0.29315000E+1, 0.82282500E+2, 0.406E+3, 0.381E+3, 0.39844000E+1, 0.29420000E+1, 0.94131500E+2, + 0.406E+3, 0.382E+3, 0.39844000E+1, 0.29081000E+1, 0.95601800E+2, 0.406E+3, 0.383E+3, + 0.39844000E+1, 0.29500000E+1, 0.22379700E+2, 0.406E+3, 0.405E+3, 0.39844000E+1, 0.45856000E+1, + 0.18206700E+2, 0.406E+3, 0.406E+3, 0.39844000E+1, 0.39844000E+1, 0.21006400E+2, 0.414E+3, + 0.100E+1, 0.38677000E+1, 0.91180000E+0, 0.13854700E+2, 0.414E+3, 0.200E+1, 0.38677000E+1, + 0.00000000E+0, 0.30879530E+3, 0.414E+3, 0.300E+1, 0.38677000E+1, 0.00000000E+0, 0.18425660E+3, + 0.414E+3, 0.400E+1, 0.38677000E+1, 0.00000000E+0, 0.12577640E+3, 0.414E+3, 0.500E+1, + 0.38677000E+1, 0.00000000E+0, 0.85522300E+2, 0.414E+3, 0.600E+1, 0.38677000E+1, 0.00000000E+0, + 0.59931900E+2, 0.414E+3, 0.700E+1, 0.38677000E+1, 0.00000000E+0, 0.45368800E+2, 0.414E+3, + 0.800E+1, 0.38677000E+1, 0.00000000E+0, 0.34318700E+2, 0.414E+3, 0.900E+1, 0.38677000E+1, + 0.00000000E+0, 0.26335800E+2, 0.414E+3, 0.100E+2, 0.38677000E+1, 0.00000000E+0, 0.36977170E+3, + 0.414E+3, 0.110E+2, 0.38677000E+1, 0.00000000E+0, 0.29187160E+3, 0.414E+3, 0.120E+2, + 0.38677000E+1, 0.00000000E+0, 0.27132020E+3, 0.414E+3, 0.130E+2, 0.38677000E+1, 0.00000000E+0, + 0.21589980E+3, 0.414E+3, 0.140E+2, 0.38677000E+1, 0.00000000E+0, 0.16943560E+3, 0.414E+3, + 0.150E+2, 0.38677000E+1, 0.00000000E+0, 0.14099550E+3, 0.414E+3, 0.160E+2, 0.38677000E+1, + 0.00000000E+0, 0.11535420E+3, 0.414E+3, 0.170E+2, 0.38677000E+1, 0.00000000E+0, 0.94402700E+2, + 0.414E+3, 0.180E+2, 0.38677000E+1, 0.00000000E+0, 0.60221160E+3, 0.414E+3, 0.190E+2, + 0.38677000E+1, 0.00000000E+0, 0.50727030E+3, 0.414E+3, 0.200E+2, 0.38677000E+1, 0.00000000E+0, + 0.42088950E+3, 0.414E+3, 0.210E+2, 0.38677000E+1, 0.00000000E+0, 0.40781600E+3, 0.414E+3, + 0.220E+2, 0.38677000E+1, 0.00000000E+0, 0.37420690E+3, 0.414E+3, 0.230E+2, 0.38677000E+1, + 0.00000000E+0, 0.29450370E+3, 0.414E+3, 0.240E+2, 0.38677000E+1, 0.00000000E+0, 0.32309480E+3, + 0.414E+3, 0.250E+2, 0.38677000E+1, 0.00000000E+0, 0.25339650E+3, 0.414E+3, 0.260E+2, + 0.38677000E+1, 0.00000000E+0, 0.27008810E+3, 0.414E+3, 0.270E+2, 0.38677000E+1, 0.00000000E+0, + 0.27767940E+3, 0.414E+3, 0.280E+2, 0.38677000E+1, 0.00000000E+0, 0.21252810E+3, 0.414E+3, + 0.290E+2, 0.38677000E+1, 0.00000000E+0, 0.21988700E+3, 0.414E+3, 0.300E+2, 0.38677000E+1, + 0.00000000E+0, 0.26030910E+3, 0.414E+3, 0.310E+2, 0.38677000E+1, 0.00000000E+0, 0.23133020E+3, + 0.414E+3, 0.320E+2, 0.38677000E+1, 0.00000000E+0, 0.19840790E+3, 0.414E+3, 0.330E+2, + 0.38677000E+1, 0.00000000E+0, 0.17847990E+3, 0.414E+3, 0.340E+2, 0.38677000E+1, 0.00000000E+0, + 0.15647810E+3, 0.414E+3, 0.350E+2, 0.38677000E+1, 0.00000000E+0, 0.13621020E+3, 0.414E+3, + 0.360E+2, 0.38677000E+1, 0.00000000E+0, 0.67586350E+3, 0.414E+3, 0.370E+2, 0.38677000E+1, + 0.00000000E+0, 0.60371340E+3, 0.414E+3, 0.380E+2, 0.38677000E+1, 0.00000000E+0, 0.53268760E+3, + 0.414E+3, 0.390E+2, 0.38677000E+1, 0.00000000E+0, 0.48073180E+3, 0.414E+3, 0.400E+2, + 0.38677000E+1, 0.00000000E+0, 0.43942810E+3, 0.414E+3, 0.410E+2, 0.38677000E+1, 0.00000000E+0, + 0.34034780E+3, 0.414E+3, 0.420E+2, 0.38677000E+1, 0.00000000E+0, 0.37931480E+3, 0.414E+3, + 0.430E+2, 0.38677000E+1, 0.00000000E+0, 0.28993610E+3, 0.414E+3, 0.440E+2, 0.38677000E+1, + 0.00000000E+0, 0.31720640E+3, 0.414E+3, 0.450E+2, 0.38677000E+1, 0.00000000E+0, 0.29452200E+3, + 0.414E+3, 0.460E+2, 0.38677000E+1, 0.00000000E+0, 0.24486850E+3, 0.414E+3, 0.470E+2, + 0.38677000E+1, 0.00000000E+0, 0.25988150E+3, 0.414E+3, 0.480E+2, 0.38677000E+1, 0.00000000E+0, + 0.32493450E+3, 0.414E+3, 0.490E+2, 0.38677000E+1, 0.00000000E+0, 0.30248790E+3, 0.414E+3, + 0.500E+2, 0.38677000E+1, 0.00000000E+0, 0.27103870E+3, 0.414E+3, 0.510E+2, 0.38677000E+1, + 0.00000000E+0, 0.25216040E+3, 0.414E+3, 0.520E+2, 0.38677000E+1, 0.00000000E+0, 0.22853700E+3, + 0.414E+3, 0.530E+2, 0.38677000E+1, 0.00000000E+0, 0.20580950E+3, 0.414E+3, 0.540E+2, + 0.38677000E+1, 0.00000000E+0, 0.82382010E+3, 0.414E+3, 0.550E+2, 0.38677000E+1, 0.00000000E+0, + 0.76760950E+3, 0.414E+3, 0.560E+2, 0.38677000E+1, 0.00000000E+0, 0.67935020E+3, 0.414E+3, + 0.570E+2, 0.38677000E+1, 0.00000000E+0, 0.31968540E+3, 0.414E+3, 0.580E+2, 0.38677000E+1, + 0.27991000E+1, 0.68142510E+3, 0.414E+3, 0.590E+2, 0.38677000E+1, 0.00000000E+0, 0.65512090E+3, + 0.414E+3, 0.600E+2, 0.38677000E+1, 0.00000000E+0, 0.63890630E+3, 0.414E+3, 0.610E+2, + 0.38677000E+1, 0.00000000E+0, 0.62397630E+3, 0.414E+3, 0.620E+2, 0.38677000E+1, 0.00000000E+0, + 0.61074860E+3, 0.414E+3, 0.630E+2, 0.38677000E+1, 0.00000000E+0, 0.48368880E+3, 0.414E+3, + 0.640E+2, 0.38677000E+1, 0.00000000E+0, 0.53820120E+3, 0.414E+3, 0.650E+2, 0.38677000E+1, + 0.00000000E+0, 0.51982010E+3, 0.414E+3, 0.660E+2, 0.38677000E+1, 0.00000000E+0, 0.55187870E+3, + 0.414E+3, 0.670E+2, 0.38677000E+1, 0.00000000E+0, 0.54029010E+3, 0.414E+3, 0.680E+2, + 0.38677000E+1, 0.00000000E+0, 0.52989220E+3, 0.414E+3, 0.690E+2, 0.38677000E+1, 0.00000000E+0, + 0.52355130E+3, 0.414E+3, 0.700E+2, 0.38677000E+1, 0.00000000E+0, 0.44329500E+3, 0.414E+3, + 0.710E+2, 0.38677000E+1, 0.00000000E+0, 0.43927910E+3, 0.414E+3, 0.720E+2, 0.38677000E+1, + 0.00000000E+0, 0.40232530E+3, 0.414E+3, 0.730E+2, 0.38677000E+1, 0.00000000E+0, 0.34031200E+3, + 0.414E+3, 0.740E+2, 0.38677000E+1, 0.00000000E+0, 0.34676670E+3, 0.414E+3, 0.750E+2, + 0.38677000E+1, 0.00000000E+0, 0.31508760E+3, 0.414E+3, 0.760E+2, 0.38677000E+1, 0.00000000E+0, + 0.28909700E+3, 0.414E+3, 0.770E+2, 0.38677000E+1, 0.00000000E+0, 0.24031030E+3, 0.414E+3, + 0.780E+2, 0.38677000E+1, 0.00000000E+0, 0.22456090E+3, 0.414E+3, 0.790E+2, 0.38677000E+1, + 0.00000000E+0, 0.23141000E+3, 0.414E+3, 0.800E+2, 0.38677000E+1, 0.00000000E+0, 0.33360810E+3, + 0.414E+3, 0.810E+2, 0.38677000E+1, 0.00000000E+0, 0.32796730E+3, 0.414E+3, 0.820E+2, + 0.38677000E+1, 0.00000000E+0, 0.30290300E+3, 0.414E+3, 0.830E+2, 0.38677000E+1, 0.00000000E+0, + 0.28964470E+3, 0.414E+3, 0.840E+2, 0.38677000E+1, 0.00000000E+0, 0.26800240E+3, 0.414E+3, + 0.850E+2, 0.38677000E+1, 0.00000000E+0, 0.24608550E+3, 0.414E+3, 0.860E+2, 0.38677000E+1, + 0.00000000E+0, 0.78245740E+3, 0.414E+3, 0.870E+2, 0.38677000E+1, 0.00000000E+0, 0.76183620E+3, + 0.414E+3, 0.880E+2, 0.38677000E+1, 0.00000000E+0, 0.67780430E+3, 0.414E+3, 0.890E+2, + 0.38677000E+1, 0.00000000E+0, 0.61315740E+3, 0.414E+3, 0.900E+2, 0.38677000E+1, 0.00000000E+0, + 0.60632200E+3, 0.414E+3, 0.910E+2, 0.38677000E+1, 0.00000000E+0, 0.58710090E+3, 0.414E+3, + 0.920E+2, 0.38677000E+1, 0.00000000E+0, 0.60167790E+3, 0.414E+3, 0.930E+2, 0.38677000E+1, + 0.00000000E+0, 0.58314710E+3, 0.414E+3, 0.940E+2, 0.38677000E+1, 0.00000000E+0, 0.33712600E+2, + 0.414E+3, 0.101E+3, 0.38677000E+1, 0.00000000E+0, 0.10727210E+3, 0.414E+3, 0.103E+3, + 0.38677000E+1, 0.98650000E+0, 0.13717830E+3, 0.414E+3, 0.104E+3, 0.38677000E+1, 0.98080000E+0, + 0.10598260E+3, 0.414E+3, 0.105E+3, 0.38677000E+1, 0.97060000E+0, 0.80142700E+2, 0.414E+3, + 0.106E+3, 0.38677000E+1, 0.98680000E+0, 0.55839400E+2, 0.414E+3, 0.107E+3, 0.38677000E+1, + 0.99440000E+0, 0.40663500E+2, 0.414E+3, 0.108E+3, 0.38677000E+1, 0.99250000E+0, 0.27908600E+2, + 0.414E+3, 0.109E+3, 0.38677000E+1, 0.99820000E+0, 0.15615450E+3, 0.414E+3, 0.111E+3, + 0.38677000E+1, 0.96840000E+0, 0.24139030E+3, 0.414E+3, 0.112E+3, 0.38677000E+1, 0.96280000E+0, + 0.24630130E+3, 0.414E+3, 0.113E+3, 0.38677000E+1, 0.96480000E+0, 0.19975300E+3, 0.414E+3, + 0.114E+3, 0.38677000E+1, 0.95070000E+0, 0.16446690E+3, 0.414E+3, 0.115E+3, 0.38677000E+1, + 0.99470000E+0, 0.13940860E+3, 0.414E+3, 0.116E+3, 0.38677000E+1, 0.99480000E+0, 0.11413580E+3, + 0.414E+3, 0.117E+3, 0.38677000E+1, 0.99720000E+0, 0.21587970E+3, 0.414E+3, 0.119E+3, + 0.38677000E+1, 0.97670000E+0, 0.40567650E+3, 0.414E+3, 0.120E+3, 0.38677000E+1, 0.98310000E+0, + 0.21796280E+3, 0.414E+3, 0.121E+3, 0.38677000E+1, 0.18627000E+1, 0.21039040E+3, 0.414E+3, + 0.122E+3, 0.38677000E+1, 0.18299000E+1, 0.20610620E+3, 0.414E+3, 0.123E+3, 0.38677000E+1, + 0.19138000E+1, 0.20396330E+3, 0.414E+3, 0.124E+3, 0.38677000E+1, 0.18269000E+1, 0.18858340E+3, + 0.414E+3, 0.125E+3, 0.38677000E+1, 0.16406000E+1, 0.17467580E+3, 0.414E+3, 0.126E+3, + 0.38677000E+1, 0.16483000E+1, 0.16656740E+3, 0.414E+3, 0.127E+3, 0.38677000E+1, 0.17149000E+1, + 0.16276320E+3, 0.414E+3, 0.128E+3, 0.38677000E+1, 0.17937000E+1, 0.16019460E+3, 0.414E+3, + 0.129E+3, 0.38677000E+1, 0.95760000E+0, 0.15131410E+3, 0.414E+3, 0.130E+3, 0.38677000E+1, + 0.19419000E+1, 0.24494460E+3, 0.414E+3, 0.131E+3, 0.38677000E+1, 0.96010000E+0, 0.21672460E+3, + 0.414E+3, 0.132E+3, 0.38677000E+1, 0.94340000E+0, 0.19508440E+3, 0.414E+3, 0.133E+3, + 0.38677000E+1, 0.98890000E+0, 0.17853020E+3, 0.414E+3, 0.134E+3, 0.38677000E+1, 0.99010000E+0, + 0.15754230E+3, 0.414E+3, 0.135E+3, 0.38677000E+1, 0.99740000E+0, 0.25790200E+3, 0.414E+3, + 0.137E+3, 0.38677000E+1, 0.97380000E+0, 0.49295740E+3, 0.414E+3, 0.138E+3, 0.38677000E+1, + 0.98010000E+0, 0.38205370E+3, 0.414E+3, 0.139E+3, 0.38677000E+1, 0.19153000E+1, 0.28794440E+3, + 0.414E+3, 0.140E+3, 0.38677000E+1, 0.19355000E+1, 0.29066410E+3, 0.414E+3, 0.141E+3, + 0.38677000E+1, 0.19545000E+1, 0.27129600E+3, 0.414E+3, 0.142E+3, 0.38677000E+1, 0.19420000E+1, + 0.30236440E+3, 0.414E+3, 0.143E+3, 0.38677000E+1, 0.16682000E+1, 0.23727980E+3, 0.414E+3, + 0.144E+3, 0.38677000E+1, 0.18584000E+1, 0.22191000E+3, 0.414E+3, 0.145E+3, 0.38677000E+1, + 0.19003000E+1, 0.20606750E+3, 0.414E+3, 0.146E+3, 0.38677000E+1, 0.18630000E+1, 0.19915530E+3, + 0.414E+3, 0.147E+3, 0.38677000E+1, 0.96790000E+0, 0.19779040E+3, 0.414E+3, 0.148E+3, + 0.38677000E+1, 0.19539000E+1, 0.31041220E+3, 0.414E+3, 0.149E+3, 0.38677000E+1, 0.96330000E+0, + 0.28266840E+3, 0.414E+3, 0.150E+3, 0.38677000E+1, 0.95140000E+0, 0.26580530E+3, 0.414E+3, + 0.151E+3, 0.38677000E+1, 0.97490000E+0, 0.25202720E+3, 0.414E+3, 0.152E+3, 0.38677000E+1, + 0.98110000E+0, 0.23068720E+3, 0.414E+3, 0.153E+3, 0.38677000E+1, 0.99680000E+0, 0.30678390E+3, + 0.414E+3, 0.155E+3, 0.38677000E+1, 0.99090000E+0, 0.63715160E+3, 0.414E+3, 0.156E+3, + 0.38677000E+1, 0.97970000E+0, 0.48296010E+3, 0.414E+3, 0.157E+3, 0.38677000E+1, 0.19373000E+1, + 0.31010960E+3, 0.414E+3, 0.159E+3, 0.38677000E+1, 0.29425000E+1, 0.30369930E+3, 0.414E+3, + 0.160E+3, 0.38677000E+1, 0.29455000E+1, 0.29412610E+3, 0.414E+3, 0.161E+3, 0.38677000E+1, + 0.29413000E+1, 0.29533450E+3, 0.414E+3, 0.162E+3, 0.38677000E+1, 0.29300000E+1, 0.28374430E+3, + 0.414E+3, 0.163E+3, 0.38677000E+1, 0.18286000E+1, 0.29720650E+3, 0.414E+3, 0.164E+3, + 0.38677000E+1, 0.28732000E+1, 0.27927050E+3, 0.414E+3, 0.165E+3, 0.38677000E+1, 0.29086000E+1, + 0.28372210E+3, 0.414E+3, 0.166E+3, 0.38677000E+1, 0.28965000E+1, 0.26527330E+3, 0.414E+3, + 0.167E+3, 0.38677000E+1, 0.29242000E+1, 0.25777900E+3, 0.414E+3, 0.168E+3, 0.38677000E+1, + 0.29282000E+1, 0.25608900E+3, 0.414E+3, 0.169E+3, 0.38677000E+1, 0.29246000E+1, 0.26901820E+3, + 0.414E+3, 0.170E+3, 0.38677000E+1, 0.28482000E+1, 0.24764990E+3, 0.414E+3, 0.171E+3, + 0.38677000E+1, 0.29219000E+1, 0.33234580E+3, 0.414E+3, 0.172E+3, 0.38677000E+1, 0.19254000E+1, + 0.30938790E+3, 0.414E+3, 0.173E+3, 0.38677000E+1, 0.19459000E+1, 0.28312170E+3, 0.414E+3, + 0.174E+3, 0.38677000E+1, 0.19292000E+1, 0.28556720E+3, 0.414E+3, 0.175E+3, 0.38677000E+1, + 0.18104000E+1, 0.25178560E+3, 0.414E+3, 0.176E+3, 0.38677000E+1, 0.18858000E+1, 0.23694270E+3, + 0.414E+3, 0.177E+3, 0.38677000E+1, 0.18648000E+1, 0.22631410E+3, 0.414E+3, 0.178E+3, + 0.38677000E+1, 0.19188000E+1, 0.21617050E+3, 0.414E+3, 0.179E+3, 0.38677000E+1, 0.98460000E+0, + 0.20948600E+3, 0.414E+3, 0.180E+3, 0.38677000E+1, 0.19896000E+1, 0.33326920E+3, 0.414E+3, + 0.181E+3, 0.38677000E+1, 0.92670000E+0, 0.30567610E+3, 0.414E+3, 0.182E+3, 0.38677000E+1, + 0.93830000E+0, 0.29742190E+3, 0.414E+3, 0.183E+3, 0.38677000E+1, 0.98200000E+0, 0.28985610E+3, + 0.414E+3, 0.184E+3, 0.38677000E+1, 0.98150000E+0, 0.27129160E+3, 0.414E+3, 0.185E+3, + 0.38677000E+1, 0.99540000E+0, 0.34569720E+3, 0.414E+3, 0.187E+3, 0.38677000E+1, 0.97050000E+0, + 0.63670530E+3, 0.414E+3, 0.188E+3, 0.38677000E+1, 0.96620000E+0, 0.36700470E+3, 0.414E+3, + 0.189E+3, 0.38677000E+1, 0.29070000E+1, 0.42126010E+3, 0.414E+3, 0.190E+3, 0.38677000E+1, + 0.28844000E+1, 0.37698280E+3, 0.414E+3, 0.191E+3, 0.38677000E+1, 0.28738000E+1, 0.33444420E+3, + 0.414E+3, 0.192E+3, 0.38677000E+1, 0.28878000E+1, 0.32204370E+3, 0.414E+3, 0.193E+3, + 0.38677000E+1, 0.29095000E+1, 0.38313380E+3, 0.414E+3, 0.194E+3, 0.38677000E+1, 0.19209000E+1, + 0.90695600E+2, 0.414E+3, 0.204E+3, 0.38677000E+1, 0.19697000E+1, 0.89119000E+2, 0.414E+3, + 0.205E+3, 0.38677000E+1, 0.19441000E+1, 0.65487900E+2, 0.414E+3, 0.206E+3, 0.38677000E+1, + 0.19985000E+1, 0.52413600E+2, 0.414E+3, 0.207E+3, 0.38677000E+1, 0.20143000E+1, 0.35824700E+2, + 0.414E+3, 0.208E+3, 0.38677000E+1, 0.19887000E+1, 0.15991150E+3, 0.414E+3, 0.212E+3, + 0.38677000E+1, 0.19496000E+1, 0.19305340E+3, 0.414E+3, 0.213E+3, 0.38677000E+1, 0.19311000E+1, + 0.18599960E+3, 0.414E+3, 0.214E+3, 0.38677000E+1, 0.19435000E+1, 0.16212890E+3, 0.414E+3, + 0.215E+3, 0.38677000E+1, 0.20102000E+1, 0.13657580E+3, 0.414E+3, 0.216E+3, 0.38677000E+1, + 0.19903000E+1, 0.22361620E+3, 0.414E+3, 0.220E+3, 0.38677000E+1, 0.19349000E+1, 0.21570270E+3, + 0.414E+3, 0.221E+3, 0.38677000E+1, 0.28999000E+1, 0.21838960E+3, 0.414E+3, 0.222E+3, + 0.38677000E+1, 0.38675000E+1, 0.19966610E+3, 0.414E+3, 0.223E+3, 0.38677000E+1, 0.29110000E+1, + 0.15083440E+3, 0.414E+3, 0.224E+3, 0.38677000E+1, 0.10619100E+2, 0.12933240E+3, 0.414E+3, + 0.225E+3, 0.38677000E+1, 0.98849000E+1, 0.12689320E+3, 0.414E+3, 0.226E+3, 0.38677000E+1, + 0.91376000E+1, 0.14822590E+3, 0.414E+3, 0.227E+3, 0.38677000E+1, 0.29263000E+1, 0.13826350E+3, + 0.414E+3, 0.228E+3, 0.38677000E+1, 0.65458000E+1, 0.19524610E+3, 0.414E+3, 0.231E+3, + 0.38677000E+1, 0.19315000E+1, 0.20652060E+3, 0.414E+3, 0.232E+3, 0.38677000E+1, 0.19447000E+1, + 0.19004830E+3, 0.414E+3, 0.233E+3, 0.38677000E+1, 0.19793000E+1, 0.17712870E+3, 0.414E+3, + 0.234E+3, 0.38677000E+1, 0.19812000E+1, 0.26785250E+3, 0.414E+3, 0.238E+3, 0.38677000E+1, + 0.19143000E+1, 0.25910620E+3, 0.414E+3, 0.239E+3, 0.38677000E+1, 0.28903000E+1, 0.26164690E+3, + 0.414E+3, 0.240E+3, 0.38677000E+1, 0.39106000E+1, 0.25270610E+3, 0.414E+3, 0.241E+3, + 0.38677000E+1, 0.29225000E+1, 0.22395860E+3, 0.414E+3, 0.242E+3, 0.38677000E+1, 0.11055600E+2, + 0.19799630E+3, 0.414E+3, 0.243E+3, 0.38677000E+1, 0.95402000E+1, 0.18716590E+3, 0.414E+3, + 0.244E+3, 0.38677000E+1, 0.88895000E+1, 0.19002130E+3, 0.414E+3, 0.245E+3, 0.38677000E+1, + 0.29696000E+1, 0.19842220E+3, 0.414E+3, 0.246E+3, 0.38677000E+1, 0.57095000E+1, 0.25147160E+3, + 0.414E+3, 0.249E+3, 0.38677000E+1, 0.19378000E+1, 0.27356280E+3, 0.414E+3, 0.250E+3, + 0.38677000E+1, 0.19505000E+1, 0.25871400E+3, 0.414E+3, 0.251E+3, 0.38677000E+1, 0.19523000E+1, + 0.25005790E+3, 0.414E+3, 0.252E+3, 0.38677000E+1, 0.19639000E+1, 0.32429550E+3, 0.414E+3, + 0.256E+3, 0.38677000E+1, 0.18467000E+1, 0.33722250E+3, 0.414E+3, 0.257E+3, 0.38677000E+1, + 0.29175000E+1, 0.25084450E+3, 0.414E+3, 0.272E+3, 0.38677000E+1, 0.38840000E+1, 0.26138080E+3, + 0.414E+3, 0.273E+3, 0.38677000E+1, 0.28988000E+1, 0.24338630E+3, 0.414E+3, 0.274E+3, + 0.38677000E+1, 0.10915300E+2, 0.22137160E+3, 0.414E+3, 0.275E+3, 0.38677000E+1, 0.98054000E+1, + 0.20849420E+3, 0.414E+3, 0.276E+3, 0.38677000E+1, 0.91527000E+1, 0.21188810E+3, 0.414E+3, + 0.277E+3, 0.38677000E+1, 0.29424000E+1, 0.22292680E+3, 0.414E+3, 0.278E+3, 0.38677000E+1, + 0.66669000E+1, 0.26896090E+3, 0.414E+3, 0.281E+3, 0.38677000E+1, 0.19302000E+1, 0.28451810E+3, + 0.414E+3, 0.282E+3, 0.38677000E+1, 0.19356000E+1, 0.29053760E+3, 0.414E+3, 0.283E+3, + 0.38677000E+1, 0.19655000E+1, 0.28876380E+3, 0.414E+3, 0.284E+3, 0.38677000E+1, 0.19639000E+1, + 0.35718170E+3, 0.414E+3, 0.288E+3, 0.38677000E+1, 0.18075000E+1, 0.68110600E+2, 0.414E+3, + 0.305E+3, 0.38677000E+1, 0.29128000E+1, 0.61216900E+2, 0.414E+3, 0.306E+3, 0.38677000E+1, + 0.29987000E+1, 0.46103100E+2, 0.414E+3, 0.307E+3, 0.38677000E+1, 0.29903000E+1, 0.15146030E+3, + 0.414E+3, 0.313E+3, 0.38677000E+1, 0.29146000E+1, 0.18102370E+3, 0.414E+3, 0.314E+3, + 0.38677000E+1, 0.29407000E+1, 0.15063080E+3, 0.414E+3, 0.315E+3, 0.38677000E+1, 0.29859000E+1, + 0.13228840E+3, 0.414E+3, 0.327E+3, 0.38677000E+1, 0.77785000E+1, 0.14466440E+3, 0.414E+3, + 0.328E+3, 0.38677000E+1, 0.62918000E+1, 0.16060910E+3, 0.414E+3, 0.331E+3, 0.38677000E+1, + 0.29233000E+1, 0.18547740E+3, 0.414E+3, 0.332E+3, 0.38677000E+1, 0.29186000E+1, 0.18319150E+3, + 0.414E+3, 0.333E+3, 0.38677000E+1, 0.29709000E+1, 0.21524240E+3, 0.414E+3, 0.349E+3, + 0.38677000E+1, 0.29353000E+1, 0.24705720E+3, 0.414E+3, 0.350E+3, 0.38677000E+1, 0.29259000E+1, + 0.24975520E+3, 0.414E+3, 0.351E+3, 0.38677000E+1, 0.29315000E+1, 0.24045180E+3, 0.414E+3, + 0.381E+3, 0.38677000E+1, 0.29420000E+1, 0.27943950E+3, 0.414E+3, 0.382E+3, 0.38677000E+1, + 0.29081000E+1, 0.28220780E+3, 0.414E+3, 0.383E+3, 0.38677000E+1, 0.29500000E+1, 0.64108300E+2, + 0.414E+3, 0.405E+3, 0.38677000E+1, 0.45856000E+1, 0.50205300E+2, 0.414E+3, 0.406E+3, + 0.38677000E+1, 0.39844000E+1, 0.14977340E+3, 0.414E+3, 0.414E+3, 0.38677000E+1, 0.38677000E+1, + 0.23178400E+2, 0.432E+3, 0.100E+1, 0.38972000E+1, 0.91180000E+0, 0.15480100E+2, 0.432E+3, + 0.200E+1, 0.38972000E+1, 0.00000000E+0, 0.33056660E+3, 0.432E+3, 0.300E+1, 0.38972000E+1, + 0.00000000E+0, 0.19940340E+3, 0.432E+3, 0.400E+1, 0.38972000E+1, 0.00000000E+0, 0.13726170E+3, + 0.432E+3, 0.500E+1, 0.38972000E+1, 0.00000000E+0, 0.94035700E+2, 0.432E+3, 0.600E+1, + 0.38972000E+1, 0.00000000E+0, 0.66329300E+2, 0.432E+3, 0.700E+1, 0.38972000E+1, 0.00000000E+0, + 0.50474100E+2, 0.432E+3, 0.800E+1, 0.38972000E+1, 0.00000000E+0, 0.38369700E+2, 0.432E+3, + 0.900E+1, 0.38972000E+1, 0.00000000E+0, 0.29574000E+2, 0.432E+3, 0.100E+2, 0.38972000E+1, + 0.00000000E+0, 0.39624310E+3, 0.432E+3, 0.110E+2, 0.38972000E+1, 0.00000000E+0, 0.31527200E+3, + 0.432E+3, 0.120E+2, 0.38972000E+1, 0.00000000E+0, 0.29419700E+3, 0.432E+3, 0.130E+2, + 0.38972000E+1, 0.00000000E+0, 0.23539440E+3, 0.432E+3, 0.140E+2, 0.38972000E+1, 0.00000000E+0, + 0.18572260E+3, 0.432E+3, 0.150E+2, 0.38972000E+1, 0.00000000E+0, 0.15516910E+3, 0.432E+3, + 0.160E+2, 0.38972000E+1, 0.00000000E+0, 0.12747850E+3, 0.432E+3, 0.170E+2, 0.38972000E+1, + 0.00000000E+0, 0.10474120E+3, 0.432E+3, 0.180E+2, 0.38972000E+1, 0.00000000E+0, 0.64529730E+3, + 0.432E+3, 0.190E+2, 0.38972000E+1, 0.00000000E+0, 0.54647840E+3, 0.432E+3, 0.200E+2, + 0.38972000E+1, 0.00000000E+0, 0.45407710E+3, 0.432E+3, 0.210E+2, 0.38972000E+1, 0.00000000E+0, + 0.44076620E+3, 0.432E+3, 0.220E+2, 0.38972000E+1, 0.00000000E+0, 0.40485430E+3, 0.432E+3, + 0.230E+2, 0.38972000E+1, 0.00000000E+0, 0.31900750E+3, 0.432E+3, 0.240E+2, 0.38972000E+1, + 0.00000000E+0, 0.35008820E+3, 0.432E+3, 0.250E+2, 0.38972000E+1, 0.00000000E+0, 0.27496140E+3, + 0.432E+3, 0.260E+2, 0.38972000E+1, 0.00000000E+0, 0.29335770E+3, 0.432E+3, 0.270E+2, + 0.38972000E+1, 0.00000000E+0, 0.30126690E+3, 0.432E+3, 0.280E+2, 0.38972000E+1, 0.00000000E+0, + 0.23092580E+3, 0.432E+3, 0.290E+2, 0.38972000E+1, 0.00000000E+0, 0.23939590E+3, 0.432E+3, + 0.300E+2, 0.38972000E+1, 0.00000000E+0, 0.28294690E+3, 0.432E+3, 0.310E+2, 0.38972000E+1, + 0.00000000E+0, 0.25245910E+3, 0.432E+3, 0.320E+2, 0.38972000E+1, 0.00000000E+0, 0.21744760E+3, + 0.432E+3, 0.330E+2, 0.38972000E+1, 0.00000000E+0, 0.19619620E+3, 0.432E+3, 0.340E+2, + 0.38972000E+1, 0.00000000E+0, 0.17258230E+3, 0.432E+3, 0.350E+2, 0.38972000E+1, 0.00000000E+0, + 0.15072600E+3, 0.432E+3, 0.360E+2, 0.38972000E+1, 0.00000000E+0, 0.72493940E+3, 0.432E+3, + 0.370E+2, 0.38972000E+1, 0.00000000E+0, 0.65048490E+3, 0.432E+3, 0.380E+2, 0.38972000E+1, + 0.00000000E+0, 0.57557310E+3, 0.432E+3, 0.390E+2, 0.38972000E+1, 0.00000000E+0, 0.52045920E+3, + 0.432E+3, 0.400E+2, 0.38972000E+1, 0.00000000E+0, 0.47644890E+3, 0.432E+3, 0.410E+2, + 0.38972000E+1, 0.00000000E+0, 0.37016770E+3, 0.432E+3, 0.420E+2, 0.38972000E+1, 0.00000000E+0, + 0.41205940E+3, 0.432E+3, 0.430E+2, 0.38972000E+1, 0.00000000E+0, 0.31604420E+3, 0.432E+3, + 0.440E+2, 0.38972000E+1, 0.00000000E+0, 0.34550510E+3, 0.432E+3, 0.450E+2, 0.38972000E+1, + 0.00000000E+0, 0.32111170E+3, 0.432E+3, 0.460E+2, 0.38972000E+1, 0.00000000E+0, 0.26721350E+3, + 0.432E+3, 0.470E+2, 0.38972000E+1, 0.00000000E+0, 0.28372370E+3, 0.432E+3, 0.480E+2, + 0.38972000E+1, 0.00000000E+0, 0.35360350E+3, 0.432E+3, 0.490E+2, 0.38972000E+1, 0.00000000E+0, + 0.33013010E+3, 0.432E+3, 0.500E+2, 0.38972000E+1, 0.00000000E+0, 0.29681450E+3, 0.432E+3, + 0.510E+2, 0.38972000E+1, 0.00000000E+0, 0.27677860E+3, 0.432E+3, 0.520E+2, 0.38972000E+1, + 0.00000000E+0, 0.25152290E+3, 0.432E+3, 0.530E+2, 0.38972000E+1, 0.00000000E+0, 0.22713240E+3, + 0.432E+3, 0.540E+2, 0.38972000E+1, 0.00000000E+0, 0.88397990E+3, 0.432E+3, 0.550E+2, + 0.38972000E+1, 0.00000000E+0, 0.82666440E+3, 0.432E+3, 0.560E+2, 0.38972000E+1, 0.00000000E+0, + 0.73357140E+3, 0.432E+3, 0.570E+2, 0.38972000E+1, 0.00000000E+0, 0.35001970E+3, 0.432E+3, + 0.580E+2, 0.38972000E+1, 0.27991000E+1, 0.73468830E+3, 0.432E+3, 0.590E+2, 0.38972000E+1, + 0.00000000E+0, 0.70659670E+3, 0.432E+3, 0.600E+2, 0.38972000E+1, 0.00000000E+0, 0.68917900E+3, + 0.432E+3, 0.610E+2, 0.38972000E+1, 0.00000000E+0, 0.67312870E+3, 0.432E+3, 0.620E+2, + 0.38972000E+1, 0.00000000E+0, 0.65890990E+3, 0.432E+3, 0.630E+2, 0.38972000E+1, 0.00000000E+0, + 0.52379680E+3, 0.432E+3, 0.640E+2, 0.38972000E+1, 0.00000000E+0, 0.58056100E+3, 0.432E+3, + 0.650E+2, 0.38972000E+1, 0.00000000E+0, 0.56104910E+3, 0.432E+3, 0.660E+2, 0.38972000E+1, + 0.00000000E+0, 0.59575320E+3, 0.432E+3, 0.670E+2, 0.38972000E+1, 0.00000000E+0, 0.58326490E+3, + 0.432E+3, 0.680E+2, 0.38972000E+1, 0.00000000E+0, 0.57208340E+3, 0.432E+3, 0.690E+2, + 0.38972000E+1, 0.00000000E+0, 0.56513830E+3, 0.432E+3, 0.700E+2, 0.38972000E+1, 0.00000000E+0, + 0.47972770E+3, 0.432E+3, 0.710E+2, 0.38972000E+1, 0.00000000E+0, 0.47662680E+3, 0.432E+3, + 0.720E+2, 0.38972000E+1, 0.00000000E+0, 0.43746730E+3, 0.432E+3, 0.730E+2, 0.38972000E+1, + 0.00000000E+0, 0.37093970E+3, 0.432E+3, 0.740E+2, 0.38972000E+1, 0.00000000E+0, 0.37819490E+3, + 0.432E+3, 0.750E+2, 0.38972000E+1, 0.00000000E+0, 0.34433520E+3, 0.432E+3, 0.760E+2, + 0.38972000E+1, 0.00000000E+0, 0.31647760E+3, 0.432E+3, 0.770E+2, 0.38972000E+1, 0.00000000E+0, + 0.26374820E+3, 0.432E+3, 0.780E+2, 0.38972000E+1, 0.00000000E+0, 0.24671740E+3, 0.432E+3, + 0.790E+2, 0.38972000E+1, 0.00000000E+0, 0.25430200E+3, 0.432E+3, 0.800E+2, 0.38972000E+1, + 0.00000000E+0, 0.36374800E+3, 0.432E+3, 0.810E+2, 0.38972000E+1, 0.00000000E+0, 0.35827790E+3, + 0.432E+3, 0.820E+2, 0.38972000E+1, 0.00000000E+0, 0.33183780E+3, 0.432E+3, 0.830E+2, + 0.38972000E+1, 0.00000000E+0, 0.31789300E+3, 0.432E+3, 0.840E+2, 0.38972000E+1, 0.00000000E+0, + 0.29484760E+3, 0.432E+3, 0.850E+2, 0.38972000E+1, 0.00000000E+0, 0.27138550E+3, 0.432E+3, + 0.860E+2, 0.38972000E+1, 0.00000000E+0, 0.84145020E+3, 0.432E+3, 0.870E+2, 0.38972000E+1, + 0.00000000E+0, 0.82171730E+3, 0.432E+3, 0.880E+2, 0.38972000E+1, 0.00000000E+0, 0.73289850E+3, + 0.432E+3, 0.890E+2, 0.38972000E+1, 0.00000000E+0, 0.66526380E+3, 0.432E+3, 0.900E+2, + 0.38972000E+1, 0.00000000E+0, 0.65709130E+3, 0.432E+3, 0.910E+2, 0.38972000E+1, 0.00000000E+0, + 0.63634590E+3, 0.432E+3, 0.920E+2, 0.38972000E+1, 0.00000000E+0, 0.65090570E+3, 0.432E+3, + 0.930E+2, 0.38972000E+1, 0.00000000E+0, 0.63106470E+3, 0.432E+3, 0.940E+2, 0.38972000E+1, + 0.00000000E+0, 0.36966400E+2, 0.432E+3, 0.101E+3, 0.38972000E+1, 0.00000000E+0, 0.11625770E+3, + 0.432E+3, 0.103E+3, 0.38972000E+1, 0.98650000E+0, 0.14894110E+3, 0.432E+3, 0.104E+3, + 0.38972000E+1, 0.98080000E+0, 0.11591450E+3, 0.432E+3, 0.105E+3, 0.38972000E+1, 0.97060000E+0, + 0.88153200E+2, 0.432E+3, 0.106E+3, 0.38972000E+1, 0.98680000E+0, 0.61839900E+2, 0.432E+3, + 0.107E+3, 0.38972000E+1, 0.99440000E+0, 0.45314100E+2, 0.432E+3, 0.108E+3, 0.38972000E+1, + 0.99250000E+0, 0.31360300E+2, 0.432E+3, 0.109E+3, 0.38972000E+1, 0.99820000E+0, 0.16914050E+3, + 0.432E+3, 0.111E+3, 0.38972000E+1, 0.96840000E+0, 0.26122720E+3, 0.432E+3, 0.112E+3, + 0.38972000E+1, 0.96280000E+0, 0.26736160E+3, 0.432E+3, 0.113E+3, 0.38972000E+1, 0.96480000E+0, + 0.21800740E+3, 0.432E+3, 0.114E+3, 0.38972000E+1, 0.95070000E+0, 0.18033050E+3, 0.432E+3, + 0.115E+3, 0.38972000E+1, 0.99470000E+0, 0.15342250E+3, 0.432E+3, 0.116E+3, 0.38972000E+1, + 0.99480000E+0, 0.12613260E+3, 0.432E+3, 0.117E+3, 0.38972000E+1, 0.99720000E+0, 0.23497420E+3, + 0.432E+3, 0.119E+3, 0.38972000E+1, 0.97670000E+0, 0.43767790E+3, 0.432E+3, 0.120E+3, + 0.38972000E+1, 0.98310000E+0, 0.23797060E+3, 0.432E+3, 0.121E+3, 0.38972000E+1, 0.18627000E+1, + 0.22980530E+3, 0.432E+3, 0.122E+3, 0.38972000E+1, 0.18299000E+1, 0.22513260E+3, 0.432E+3, + 0.123E+3, 0.38972000E+1, 0.19138000E+1, 0.22270380E+3, 0.432E+3, 0.124E+3, 0.38972000E+1, + 0.18269000E+1, 0.20634830E+3, 0.432E+3, 0.125E+3, 0.38972000E+1, 0.16406000E+1, 0.19131890E+3, + 0.432E+3, 0.126E+3, 0.38972000E+1, 0.16483000E+1, 0.18247980E+3, 0.432E+3, 0.127E+3, + 0.38972000E+1, 0.17149000E+1, 0.17828580E+3, 0.432E+3, 0.128E+3, 0.38972000E+1, 0.17937000E+1, + 0.17518440E+3, 0.432E+3, 0.129E+3, 0.38972000E+1, 0.95760000E+0, 0.16597640E+3, 0.432E+3, + 0.130E+3, 0.38972000E+1, 0.19419000E+1, 0.26653500E+3, 0.432E+3, 0.131E+3, 0.38972000E+1, + 0.96010000E+0, 0.23678670E+3, 0.432E+3, 0.132E+3, 0.38972000E+1, 0.94340000E+0, 0.21387070E+3, + 0.432E+3, 0.133E+3, 0.38972000E+1, 0.98890000E+0, 0.19624890E+3, 0.432E+3, 0.134E+3, + 0.38972000E+1, 0.99010000E+0, 0.17373160E+3, 0.432E+3, 0.135E+3, 0.38972000E+1, 0.99740000E+0, + 0.28107340E+3, 0.432E+3, 0.137E+3, 0.38972000E+1, 0.97380000E+0, 0.53187620E+3, 0.432E+3, + 0.138E+3, 0.38972000E+1, 0.98010000E+0, 0.41462030E+3, 0.432E+3, 0.139E+3, 0.38972000E+1, + 0.19153000E+1, 0.31443980E+3, 0.432E+3, 0.140E+3, 0.38972000E+1, 0.19355000E+1, 0.31740770E+3, + 0.432E+3, 0.141E+3, 0.38972000E+1, 0.19545000E+1, 0.29662500E+3, 0.432E+3, 0.142E+3, + 0.38972000E+1, 0.19420000E+1, 0.32966960E+3, 0.432E+3, 0.143E+3, 0.38972000E+1, 0.16682000E+1, + 0.26011760E+3, 0.432E+3, 0.144E+3, 0.38972000E+1, 0.18584000E+1, 0.24341820E+3, 0.432E+3, + 0.145E+3, 0.38972000E+1, 0.19003000E+1, 0.22622740E+3, 0.432E+3, 0.146E+3, 0.38972000E+1, + 0.18630000E+1, 0.21858540E+3, 0.432E+3, 0.147E+3, 0.38972000E+1, 0.96790000E+0, 0.21737600E+3, + 0.432E+3, 0.148E+3, 0.38972000E+1, 0.19539000E+1, 0.33818310E+3, 0.432E+3, 0.149E+3, + 0.38972000E+1, 0.96330000E+0, 0.30894110E+3, 0.432E+3, 0.150E+3, 0.38972000E+1, 0.95140000E+0, + 0.29123020E+3, 0.432E+3, 0.151E+3, 0.38972000E+1, 0.97490000E+0, 0.27666850E+3, 0.432E+3, + 0.152E+3, 0.38972000E+1, 0.98110000E+0, 0.25387120E+3, 0.432E+3, 0.153E+3, 0.38972000E+1, + 0.99680000E+0, 0.33505240E+3, 0.432E+3, 0.155E+3, 0.38972000E+1, 0.99090000E+0, 0.68699570E+3, + 0.432E+3, 0.156E+3, 0.38972000E+1, 0.97970000E+0, 0.52395750E+3, 0.432E+3, 0.157E+3, + 0.38972000E+1, 0.19373000E+1, 0.33962030E+3, 0.432E+3, 0.159E+3, 0.38972000E+1, 0.29425000E+1, + 0.33261730E+3, 0.432E+3, 0.160E+3, 0.38972000E+1, 0.29455000E+1, 0.32220350E+3, 0.432E+3, + 0.161E+3, 0.38972000E+1, 0.29413000E+1, 0.32336760E+3, 0.432E+3, 0.162E+3, 0.38972000E+1, + 0.29300000E+1, 0.31025500E+3, 0.432E+3, 0.163E+3, 0.38972000E+1, 0.18286000E+1, 0.32531030E+3, + 0.432E+3, 0.164E+3, 0.38972000E+1, 0.28732000E+1, 0.30584570E+3, 0.432E+3, 0.165E+3, + 0.38972000E+1, 0.29086000E+1, 0.31046310E+3, 0.432E+3, 0.166E+3, 0.38972000E+1, 0.28965000E+1, + 0.29063460E+3, 0.432E+3, 0.167E+3, 0.38972000E+1, 0.29242000E+1, 0.28247120E+3, 0.432E+3, + 0.168E+3, 0.38972000E+1, 0.29282000E+1, 0.28057190E+3, 0.432E+3, 0.169E+3, 0.38972000E+1, + 0.29246000E+1, 0.29443330E+3, 0.432E+3, 0.170E+3, 0.38972000E+1, 0.28482000E+1, 0.27137930E+3, + 0.432E+3, 0.171E+3, 0.38972000E+1, 0.29219000E+1, 0.36212170E+3, 0.432E+3, 0.172E+3, + 0.38972000E+1, 0.19254000E+1, 0.33783560E+3, 0.432E+3, 0.173E+3, 0.38972000E+1, 0.19459000E+1, + 0.30986550E+3, 0.432E+3, 0.174E+3, 0.38972000E+1, 0.19292000E+1, 0.31199870E+3, 0.432E+3, + 0.175E+3, 0.38972000E+1, 0.18104000E+1, 0.27647840E+3, 0.432E+3, 0.176E+3, 0.38972000E+1, + 0.18858000E+1, 0.26047040E+3, 0.432E+3, 0.177E+3, 0.38972000E+1, 0.18648000E+1, 0.24897200E+3, + 0.432E+3, 0.178E+3, 0.38972000E+1, 0.19188000E+1, 0.23789260E+3, 0.432E+3, 0.179E+3, + 0.38972000E+1, 0.98460000E+0, 0.23089260E+3, 0.432E+3, 0.180E+3, 0.38972000E+1, 0.19896000E+1, + 0.36361850E+3, 0.432E+3, 0.181E+3, 0.38972000E+1, 0.92670000E+0, 0.33453020E+3, 0.432E+3, + 0.182E+3, 0.38972000E+1, 0.93830000E+0, 0.32604840E+3, 0.432E+3, 0.183E+3, 0.38972000E+1, + 0.98200000E+0, 0.31819910E+3, 0.432E+3, 0.184E+3, 0.38972000E+1, 0.98150000E+0, 0.29845520E+3, + 0.432E+3, 0.185E+3, 0.38972000E+1, 0.99540000E+0, 0.37759560E+3, 0.432E+3, 0.187E+3, + 0.38972000E+1, 0.97050000E+0, 0.68770170E+3, 0.432E+3, 0.188E+3, 0.38972000E+1, 0.96620000E+0, + 0.40183270E+3, 0.432E+3, 0.189E+3, 0.38972000E+1, 0.29070000E+1, 0.46011490E+3, 0.432E+3, + 0.190E+3, 0.38972000E+1, 0.28844000E+1, 0.41238990E+3, 0.432E+3, 0.191E+3, 0.38972000E+1, + 0.28738000E+1, 0.36661110E+3, 0.432E+3, 0.192E+3, 0.38972000E+1, 0.28878000E+1, 0.35322130E+3, + 0.432E+3, 0.193E+3, 0.38972000E+1, 0.29095000E+1, 0.41784880E+3, 0.432E+3, 0.194E+3, + 0.38972000E+1, 0.19209000E+1, 0.99170000E+2, 0.432E+3, 0.204E+3, 0.38972000E+1, 0.19697000E+1, + 0.97688000E+2, 0.432E+3, 0.205E+3, 0.38972000E+1, 0.19441000E+1, 0.72259500E+2, 0.432E+3, + 0.206E+3, 0.38972000E+1, 0.19985000E+1, 0.58097400E+2, 0.432E+3, 0.207E+3, 0.38972000E+1, + 0.20143000E+1, 0.40013200E+2, 0.432E+3, 0.208E+3, 0.38972000E+1, 0.19887000E+1, 0.17423120E+3, + 0.432E+3, 0.212E+3, 0.38972000E+1, 0.19496000E+1, 0.21029720E+3, 0.432E+3, 0.213E+3, + 0.38972000E+1, 0.19311000E+1, 0.20317830E+3, 0.432E+3, 0.214E+3, 0.38972000E+1, 0.19435000E+1, + 0.17773730E+3, 0.432E+3, 0.215E+3, 0.38972000E+1, 0.20102000E+1, 0.15032780E+3, 0.432E+3, + 0.216E+3, 0.38972000E+1, 0.19903000E+1, 0.24395900E+3, 0.432E+3, 0.220E+3, 0.38972000E+1, + 0.19349000E+1, 0.23581030E+3, 0.432E+3, 0.221E+3, 0.38972000E+1, 0.28999000E+1, 0.23880070E+3, + 0.432E+3, 0.222E+3, 0.38972000E+1, 0.38675000E+1, 0.21840030E+3, 0.432E+3, 0.223E+3, + 0.38972000E+1, 0.29110000E+1, 0.16577460E+3, 0.432E+3, 0.224E+3, 0.38972000E+1, 0.10619100E+2, + 0.14252950E+3, 0.432E+3, 0.225E+3, 0.38972000E+1, 0.98849000E+1, 0.13980680E+3, 0.432E+3, + 0.226E+3, 0.38972000E+1, 0.91376000E+1, 0.16260680E+3, 0.432E+3, 0.227E+3, 0.38972000E+1, + 0.29263000E+1, 0.15184970E+3, 0.432E+3, 0.228E+3, 0.38972000E+1, 0.65458000E+1, 0.21328870E+3, + 0.432E+3, 0.231E+3, 0.38972000E+1, 0.19315000E+1, 0.22581390E+3, 0.432E+3, 0.232E+3, + 0.38972000E+1, 0.19447000E+1, 0.20845000E+3, 0.432E+3, 0.233E+3, 0.38972000E+1, 0.19793000E+1, + 0.19473060E+3, 0.432E+3, 0.234E+3, 0.38972000E+1, 0.19812000E+1, 0.29242890E+3, 0.432E+3, + 0.238E+3, 0.38972000E+1, 0.19143000E+1, 0.28359490E+3, 0.432E+3, 0.239E+3, 0.38972000E+1, + 0.28903000E+1, 0.28662000E+3, 0.432E+3, 0.240E+3, 0.38972000E+1, 0.39106000E+1, 0.27689930E+3, + 0.432E+3, 0.241E+3, 0.38972000E+1, 0.29225000E+1, 0.24611820E+3, 0.432E+3, 0.242E+3, + 0.38972000E+1, 0.11055600E+2, 0.21811560E+3, 0.432E+3, 0.243E+3, 0.38972000E+1, 0.95402000E+1, + 0.20639140E+3, 0.432E+3, 0.244E+3, 0.38972000E+1, 0.88895000E+1, 0.20911520E+3, 0.432E+3, + 0.245E+3, 0.38972000E+1, 0.29696000E+1, 0.21815300E+3, 0.432E+3, 0.246E+3, 0.38972000E+1, + 0.57095000E+1, 0.27516580E+3, 0.432E+3, 0.249E+3, 0.38972000E+1, 0.19378000E+1, 0.29921170E+3, + 0.432E+3, 0.250E+3, 0.38972000E+1, 0.19505000E+1, 0.28364510E+3, 0.432E+3, 0.251E+3, + 0.38972000E+1, 0.19523000E+1, 0.27457510E+3, 0.432E+3, 0.252E+3, 0.38972000E+1, 0.19639000E+1, + 0.35440230E+3, 0.432E+3, 0.256E+3, 0.38972000E+1, 0.18467000E+1, 0.36886820E+3, 0.432E+3, + 0.257E+3, 0.38972000E+1, 0.29175000E+1, 0.27514660E+3, 0.432E+3, 0.272E+3, 0.38972000E+1, + 0.38840000E+1, 0.28653550E+3, 0.432E+3, 0.273E+3, 0.38972000E+1, 0.28988000E+1, 0.26750210E+3, + 0.432E+3, 0.274E+3, 0.38972000E+1, 0.10915300E+2, 0.24384710E+3, 0.432E+3, 0.275E+3, + 0.38972000E+1, 0.98054000E+1, 0.23006870E+3, 0.432E+3, 0.276E+3, 0.38972000E+1, 0.91527000E+1, + 0.23344450E+3, 0.432E+3, 0.277E+3, 0.38972000E+1, 0.29424000E+1, 0.24547400E+3, 0.432E+3, + 0.278E+3, 0.38972000E+1, 0.66669000E+1, 0.29494270E+3, 0.432E+3, 0.281E+3, 0.38972000E+1, + 0.19302000E+1, 0.31192660E+3, 0.432E+3, 0.282E+3, 0.38972000E+1, 0.19356000E+1, 0.31874160E+3, + 0.432E+3, 0.283E+3, 0.38972000E+1, 0.19655000E+1, 0.31709360E+3, 0.432E+3, 0.284E+3, + 0.38972000E+1, 0.19639000E+1, 0.39042810E+3, 0.432E+3, 0.288E+3, 0.38972000E+1, 0.18075000E+1, + 0.75031600E+2, 0.432E+3, 0.305E+3, 0.38972000E+1, 0.29128000E+1, 0.67585400E+2, 0.432E+3, + 0.306E+3, 0.38972000E+1, 0.29987000E+1, 0.51187400E+2, 0.432E+3, 0.307E+3, 0.38972000E+1, + 0.29903000E+1, 0.16569080E+3, 0.432E+3, 0.313E+3, 0.38972000E+1, 0.29146000E+1, 0.19769460E+3, + 0.432E+3, 0.314E+3, 0.38972000E+1, 0.29407000E+1, 0.16535710E+3, 0.432E+3, 0.315E+3, + 0.38972000E+1, 0.29859000E+1, 0.14552910E+3, 0.432E+3, 0.327E+3, 0.38972000E+1, 0.77785000E+1, + 0.15855360E+3, 0.432E+3, 0.328E+3, 0.38972000E+1, 0.62918000E+1, 0.17612940E+3, 0.432E+3, + 0.331E+3, 0.38972000E+1, 0.29233000E+1, 0.20319220E+3, 0.432E+3, 0.332E+3, 0.38972000E+1, + 0.29186000E+1, 0.20106830E+3, 0.432E+3, 0.333E+3, 0.38972000E+1, 0.29709000E+1, 0.23637610E+3, + 0.432E+3, 0.349E+3, 0.38972000E+1, 0.29353000E+1, 0.27080520E+3, 0.432E+3, 0.350E+3, + 0.38972000E+1, 0.29259000E+1, 0.27404840E+3, 0.432E+3, 0.351E+3, 0.38972000E+1, 0.29315000E+1, + 0.26442240E+3, 0.432E+3, 0.381E+3, 0.38972000E+1, 0.29420000E+1, 0.30657470E+3, 0.432E+3, + 0.382E+3, 0.38972000E+1, 0.29081000E+1, 0.30987480E+3, 0.432E+3, 0.383E+3, 0.38972000E+1, + 0.29500000E+1, 0.70691700E+2, 0.432E+3, 0.405E+3, 0.38972000E+1, 0.45856000E+1, 0.55685700E+2, + 0.432E+3, 0.406E+3, 0.38972000E+1, 0.39844000E+1, 0.16418110E+3, 0.432E+3, 0.414E+3, + 0.38972000E+1, 0.38677000E+1, 0.18029120E+3, 0.432E+3, 0.432E+3, 0.38972000E+1, 0.38972000E+1, + 0.31602000E+2, 0.450E+3, 0.100E+1, 0.39123000E+1, 0.91180000E+0, 0.21215400E+2, 0.450E+3, + 0.200E+1, 0.39123000E+1, 0.00000000E+0, 0.45591990E+3, 0.450E+3, 0.300E+1, 0.39123000E+1, + 0.00000000E+0, 0.27300460E+3, 0.450E+3, 0.400E+1, 0.39123000E+1, 0.00000000E+0, 0.18738080E+3, + 0.450E+3, 0.500E+1, 0.39123000E+1, 0.00000000E+0, 0.12831130E+3, 0.450E+3, 0.600E+1, + 0.39123000E+1, 0.00000000E+0, 0.90618400E+2, 0.450E+3, 0.700E+1, 0.39123000E+1, 0.00000000E+0, + 0.69093900E+2, 0.450E+3, 0.800E+1, 0.39123000E+1, 0.00000000E+0, 0.52666100E+2, 0.450E+3, + 0.900E+1, 0.39123000E+1, 0.00000000E+0, 0.40719500E+2, 0.450E+3, 0.100E+2, 0.39123000E+1, + 0.00000000E+0, 0.54650960E+3, 0.450E+3, 0.110E+2, 0.39123000E+1, 0.00000000E+0, 0.43237650E+3, + 0.450E+3, 0.120E+2, 0.39123000E+1, 0.00000000E+0, 0.40262520E+3, 0.450E+3, 0.130E+2, + 0.39123000E+1, 0.00000000E+0, 0.32143630E+3, 0.450E+3, 0.140E+2, 0.39123000E+1, 0.00000000E+0, + 0.25331660E+3, 0.450E+3, 0.150E+2, 0.39123000E+1, 0.00000000E+0, 0.21163180E+3, 0.450E+3, + 0.160E+2, 0.39123000E+1, 0.00000000E+0, 0.17395170E+3, 0.450E+3, 0.170E+2, 0.39123000E+1, + 0.00000000E+0, 0.14307940E+3, 0.450E+3, 0.180E+2, 0.39123000E+1, 0.00000000E+0, 0.89120910E+3, + 0.450E+3, 0.190E+2, 0.39123000E+1, 0.00000000E+0, 0.75145760E+3, 0.450E+3, 0.200E+2, + 0.39123000E+1, 0.00000000E+0, 0.62382770E+3, 0.450E+3, 0.210E+2, 0.39123000E+1, 0.00000000E+0, + 0.60513210E+3, 0.450E+3, 0.220E+2, 0.39123000E+1, 0.00000000E+0, 0.55562000E+3, 0.450E+3, + 0.230E+2, 0.39123000E+1, 0.00000000E+0, 0.43806280E+3, 0.450E+3, 0.240E+2, 0.39123000E+1, + 0.00000000E+0, 0.48022450E+3, 0.450E+3, 0.250E+2, 0.39123000E+1, 0.00000000E+0, 0.37740640E+3, + 0.450E+3, 0.260E+2, 0.39123000E+1, 0.00000000E+0, 0.40204340E+3, 0.450E+3, 0.270E+2, + 0.39123000E+1, 0.00000000E+0, 0.41305650E+3, 0.450E+3, 0.280E+2, 0.39123000E+1, 0.00000000E+0, + 0.31692740E+3, 0.450E+3, 0.290E+2, 0.39123000E+1, 0.00000000E+0, 0.32786560E+3, 0.450E+3, + 0.300E+2, 0.39123000E+1, 0.00000000E+0, 0.38724130E+3, 0.450E+3, 0.310E+2, 0.39123000E+1, + 0.00000000E+0, 0.34490650E+3, 0.450E+3, 0.320E+2, 0.39123000E+1, 0.00000000E+0, 0.29675050E+3, + 0.450E+3, 0.330E+2, 0.39123000E+1, 0.00000000E+0, 0.26767240E+3, 0.450E+3, 0.340E+2, + 0.39123000E+1, 0.00000000E+0, 0.23547970E+3, 0.450E+3, 0.350E+2, 0.39123000E+1, 0.00000000E+0, + 0.20576180E+3, 0.450E+3, 0.360E+2, 0.39123000E+1, 0.00000000E+0, 0.10009319E+4, 0.450E+3, + 0.370E+2, 0.39123000E+1, 0.00000000E+0, 0.89470560E+3, 0.450E+3, 0.380E+2, 0.39123000E+1, + 0.00000000E+0, 0.79039380E+3, 0.450E+3, 0.390E+2, 0.39123000E+1, 0.00000000E+0, 0.71409530E+3, + 0.450E+3, 0.400E+2, 0.39123000E+1, 0.00000000E+0, 0.65341870E+3, 0.450E+3, 0.410E+2, + 0.39123000E+1, 0.00000000E+0, 0.50749190E+3, 0.450E+3, 0.420E+2, 0.39123000E+1, 0.00000000E+0, + 0.56500310E+3, 0.450E+3, 0.430E+2, 0.39123000E+1, 0.00000000E+0, 0.43325440E+3, 0.450E+3, + 0.440E+2, 0.39123000E+1, 0.00000000E+0, 0.47345910E+3, 0.450E+3, 0.450E+2, 0.39123000E+1, + 0.00000000E+0, 0.43998550E+3, 0.450E+3, 0.460E+2, 0.39123000E+1, 0.00000000E+0, 0.36659430E+3, + 0.450E+3, 0.470E+2, 0.39123000E+1, 0.00000000E+0, 0.38876210E+3, 0.450E+3, 0.480E+2, + 0.39123000E+1, 0.00000000E+0, 0.48465320E+3, 0.450E+3, 0.490E+2, 0.39123000E+1, 0.00000000E+0, + 0.45175780E+3, 0.450E+3, 0.500E+2, 0.39123000E+1, 0.00000000E+0, 0.40568490E+3, 0.450E+3, + 0.510E+2, 0.39123000E+1, 0.00000000E+0, 0.37809630E+3, 0.450E+3, 0.520E+2, 0.39123000E+1, + 0.00000000E+0, 0.34349120E+3, 0.450E+3, 0.530E+2, 0.39123000E+1, 0.00000000E+0, 0.31018060E+3, + 0.450E+3, 0.540E+2, 0.39123000E+1, 0.00000000E+0, 0.12200459E+4, 0.450E+3, 0.550E+2, + 0.39123000E+1, 0.00000000E+0, 0.11376146E+4, 0.450E+3, 0.560E+2, 0.39123000E+1, 0.00000000E+0, + 0.10078507E+4, 0.450E+3, 0.570E+2, 0.39123000E+1, 0.00000000E+0, 0.47859810E+3, 0.450E+3, + 0.580E+2, 0.39123000E+1, 0.27991000E+1, 0.10109240E+4, 0.450E+3, 0.590E+2, 0.39123000E+1, + 0.00000000E+0, 0.97204260E+3, 0.450E+3, 0.600E+2, 0.39123000E+1, 0.00000000E+0, 0.94802150E+3, + 0.450E+3, 0.610E+2, 0.39123000E+1, 0.00000000E+0, 0.92588830E+3, 0.450E+3, 0.620E+2, + 0.39123000E+1, 0.00000000E+0, 0.90627400E+3, 0.450E+3, 0.630E+2, 0.39123000E+1, 0.00000000E+0, + 0.71942080E+3, 0.450E+3, 0.640E+2, 0.39123000E+1, 0.00000000E+0, 0.79940550E+3, 0.450E+3, + 0.650E+2, 0.39123000E+1, 0.00000000E+0, 0.77227150E+3, 0.450E+3, 0.660E+2, 0.39123000E+1, + 0.00000000E+0, 0.81910080E+3, 0.450E+3, 0.670E+2, 0.39123000E+1, 0.00000000E+0, 0.80189050E+3, + 0.450E+3, 0.680E+2, 0.39123000E+1, 0.00000000E+0, 0.78645970E+3, 0.450E+3, 0.690E+2, + 0.39123000E+1, 0.00000000E+0, 0.77695490E+3, 0.450E+3, 0.700E+2, 0.39123000E+1, 0.00000000E+0, + 0.65887080E+3, 0.450E+3, 0.710E+2, 0.39123000E+1, 0.00000000E+0, 0.65329340E+3, 0.450E+3, + 0.720E+2, 0.39123000E+1, 0.00000000E+0, 0.59921110E+3, 0.450E+3, 0.730E+2, 0.39123000E+1, + 0.00000000E+0, 0.50805680E+3, 0.450E+3, 0.740E+2, 0.39123000E+1, 0.00000000E+0, 0.51781620E+3, + 0.450E+3, 0.750E+2, 0.39123000E+1, 0.00000000E+0, 0.47129410E+3, 0.450E+3, 0.760E+2, + 0.39123000E+1, 0.00000000E+0, 0.43309810E+3, 0.450E+3, 0.770E+2, 0.39123000E+1, 0.00000000E+0, + 0.36112210E+3, 0.450E+3, 0.780E+2, 0.39123000E+1, 0.00000000E+0, 0.33790780E+3, 0.450E+3, + 0.790E+2, 0.39123000E+1, 0.00000000E+0, 0.34812330E+3, 0.450E+3, 0.800E+2, 0.39123000E+1, + 0.00000000E+0, 0.49876900E+3, 0.450E+3, 0.810E+2, 0.39123000E+1, 0.00000000E+0, 0.49062310E+3, + 0.450E+3, 0.820E+2, 0.39123000E+1, 0.00000000E+0, 0.45390390E+3, 0.450E+3, 0.830E+2, + 0.39123000E+1, 0.00000000E+0, 0.43458510E+3, 0.450E+3, 0.840E+2, 0.39123000E+1, 0.00000000E+0, + 0.40290830E+3, 0.450E+3, 0.850E+2, 0.39123000E+1, 0.00000000E+0, 0.37079470E+3, 0.450E+3, + 0.860E+2, 0.39123000E+1, 0.00000000E+0, 0.11599029E+4, 0.450E+3, 0.870E+2, 0.39123000E+1, + 0.00000000E+0, 0.11298719E+4, 0.450E+3, 0.880E+2, 0.39123000E+1, 0.00000000E+0, 0.10064862E+4, + 0.450E+3, 0.890E+2, 0.39123000E+1, 0.00000000E+0, 0.91246220E+3, 0.450E+3, 0.900E+2, + 0.39123000E+1, 0.00000000E+0, 0.90219930E+3, 0.450E+3, 0.910E+2, 0.39123000E+1, 0.00000000E+0, + 0.87376550E+3, 0.450E+3, 0.920E+2, 0.39123000E+1, 0.00000000E+0, 0.89481040E+3, 0.450E+3, + 0.930E+2, 0.39123000E+1, 0.00000000E+0, 0.86739140E+3, 0.450E+3, 0.940E+2, 0.39123000E+1, + 0.00000000E+0, 0.50394000E+2, 0.450E+3, 0.101E+3, 0.39123000E+1, 0.00000000E+0, 0.15913760E+3, + 0.450E+3, 0.103E+3, 0.39123000E+1, 0.98650000E+0, 0.20372270E+3, 0.450E+3, 0.104E+3, + 0.39123000E+1, 0.98080000E+0, 0.15821370E+3, 0.450E+3, 0.105E+3, 0.39123000E+1, 0.97060000E+0, + 0.12031900E+3, 0.450E+3, 0.106E+3, 0.39123000E+1, 0.98680000E+0, 0.84513800E+2, 0.450E+3, + 0.107E+3, 0.39123000E+1, 0.99440000E+0, 0.62066500E+2, 0.450E+3, 0.108E+3, 0.39123000E+1, + 0.99250000E+0, 0.43143200E+2, 0.450E+3, 0.109E+3, 0.39123000E+1, 0.99820000E+0, 0.23190190E+3, + 0.450E+3, 0.111E+3, 0.39123000E+1, 0.96840000E+0, 0.35800890E+3, 0.450E+3, 0.112E+3, + 0.39123000E+1, 0.96280000E+0, 0.36577110E+3, 0.450E+3, 0.113E+3, 0.39123000E+1, 0.96480000E+0, + 0.29764030E+3, 0.450E+3, 0.114E+3, 0.39123000E+1, 0.95070000E+0, 0.24597730E+3, 0.450E+3, + 0.115E+3, 0.39123000E+1, 0.99470000E+0, 0.20927130E+3, 0.450E+3, 0.116E+3, 0.39123000E+1, + 0.99480000E+0, 0.17213180E+3, 0.450E+3, 0.117E+3, 0.39123000E+1, 0.99720000E+0, 0.32212730E+3, + 0.450E+3, 0.119E+3, 0.39123000E+1, 0.97670000E+0, 0.60186910E+3, 0.450E+3, 0.120E+3, + 0.39123000E+1, 0.98310000E+0, 0.32550230E+3, 0.450E+3, 0.121E+3, 0.39123000E+1, 0.18627000E+1, + 0.31438040E+3, 0.450E+3, 0.122E+3, 0.39123000E+1, 0.18299000E+1, 0.30805200E+3, 0.450E+3, + 0.123E+3, 0.39123000E+1, 0.19138000E+1, 0.30483850E+3, 0.450E+3, 0.124E+3, 0.39123000E+1, + 0.18269000E+1, 0.28215030E+3, 0.450E+3, 0.125E+3, 0.39123000E+1, 0.16406000E+1, 0.26159540E+3, + 0.450E+3, 0.126E+3, 0.39123000E+1, 0.16483000E+1, 0.24956670E+3, 0.450E+3, 0.127E+3, + 0.39123000E+1, 0.17149000E+1, 0.24387510E+3, 0.450E+3, 0.128E+3, 0.39123000E+1, 0.17937000E+1, + 0.23989280E+3, 0.450E+3, 0.129E+3, 0.39123000E+1, 0.95760000E+0, 0.22689510E+3, 0.450E+3, + 0.130E+3, 0.39123000E+1, 0.19419000E+1, 0.36463660E+3, 0.450E+3, 0.131E+3, 0.39123000E+1, + 0.96010000E+0, 0.32340730E+3, 0.450E+3, 0.132E+3, 0.39123000E+1, 0.94340000E+0, 0.29186440E+3, + 0.450E+3, 0.133E+3, 0.39123000E+1, 0.98890000E+0, 0.26775420E+3, 0.450E+3, 0.134E+3, + 0.39123000E+1, 0.99010000E+0, 0.23705490E+3, 0.450E+3, 0.135E+3, 0.39123000E+1, 0.99740000E+0, + 0.38525160E+3, 0.450E+3, 0.137E+3, 0.39123000E+1, 0.97380000E+0, 0.73162570E+3, 0.450E+3, + 0.138E+3, 0.39123000E+1, 0.98010000E+0, 0.56861590E+3, 0.450E+3, 0.139E+3, 0.39123000E+1, + 0.19153000E+1, 0.43018180E+3, 0.450E+3, 0.140E+3, 0.39123000E+1, 0.19355000E+1, 0.43434220E+3, + 0.450E+3, 0.141E+3, 0.39123000E+1, 0.19545000E+1, 0.40590280E+3, 0.450E+3, 0.142E+3, + 0.39123000E+1, 0.19420000E+1, 0.45173170E+3, 0.450E+3, 0.143E+3, 0.39123000E+1, 0.16682000E+1, + 0.35582860E+3, 0.450E+3, 0.144E+3, 0.39123000E+1, 0.18584000E+1, 0.33309730E+3, 0.450E+3, + 0.145E+3, 0.39123000E+1, 0.19003000E+1, 0.30966650E+3, 0.450E+3, 0.146E+3, 0.39123000E+1, + 0.18630000E+1, 0.29933180E+3, 0.450E+3, 0.147E+3, 0.39123000E+1, 0.96790000E+0, 0.29736580E+3, + 0.450E+3, 0.148E+3, 0.39123000E+1, 0.19539000E+1, 0.46329930E+3, 0.450E+3, 0.149E+3, + 0.39123000E+1, 0.96330000E+0, 0.42259500E+3, 0.450E+3, 0.150E+3, 0.39123000E+1, 0.95140000E+0, + 0.39800110E+3, 0.450E+3, 0.151E+3, 0.39123000E+1, 0.97490000E+0, 0.37792500E+3, 0.450E+3, + 0.152E+3, 0.39123000E+1, 0.98110000E+0, 0.34668560E+3, 0.450E+3, 0.153E+3, 0.39123000E+1, + 0.99680000E+0, 0.45839400E+3, 0.450E+3, 0.155E+3, 0.39123000E+1, 0.99090000E+0, 0.94552740E+3, + 0.450E+3, 0.156E+3, 0.39123000E+1, 0.97970000E+0, 0.71867700E+3, 0.450E+3, 0.157E+3, + 0.39123000E+1, 0.19373000E+1, 0.46437650E+3, 0.450E+3, 0.159E+3, 0.39123000E+1, 0.29425000E+1, + 0.45481020E+3, 0.450E+3, 0.160E+3, 0.39123000E+1, 0.29455000E+1, 0.44056910E+3, 0.450E+3, + 0.161E+3, 0.39123000E+1, 0.29413000E+1, 0.44222540E+3, 0.450E+3, 0.162E+3, 0.39123000E+1, + 0.29300000E+1, 0.42469280E+3, 0.450E+3, 0.163E+3, 0.39123000E+1, 0.18286000E+1, 0.44484260E+3, + 0.450E+3, 0.164E+3, 0.39123000E+1, 0.28732000E+1, 0.41824050E+3, 0.450E+3, 0.165E+3, + 0.39123000E+1, 0.29086000E+1, 0.42468210E+3, 0.450E+3, 0.166E+3, 0.39123000E+1, 0.28965000E+1, + 0.39737350E+3, 0.450E+3, 0.167E+3, 0.39123000E+1, 0.29242000E+1, 0.38619540E+3, 0.450E+3, + 0.168E+3, 0.39123000E+1, 0.29282000E+1, 0.38360070E+3, 0.450E+3, 0.169E+3, 0.39123000E+1, + 0.29246000E+1, 0.40253610E+3, 0.450E+3, 0.170E+3, 0.39123000E+1, 0.28482000E+1, 0.37098070E+3, + 0.450E+3, 0.171E+3, 0.39123000E+1, 0.29219000E+1, 0.49582350E+3, 0.450E+3, 0.172E+3, + 0.39123000E+1, 0.19254000E+1, 0.46234390E+3, 0.450E+3, 0.173E+3, 0.39123000E+1, 0.19459000E+1, + 0.42390050E+3, 0.450E+3, 0.174E+3, 0.39123000E+1, 0.19292000E+1, 0.42713880E+3, 0.450E+3, + 0.175E+3, 0.39123000E+1, 0.18104000E+1, 0.37805750E+3, 0.450E+3, 0.176E+3, 0.39123000E+1, + 0.18858000E+1, 0.35625810E+3, 0.450E+3, 0.177E+3, 0.39123000E+1, 0.18648000E+1, 0.34062570E+3, + 0.450E+3, 0.178E+3, 0.39123000E+1, 0.19188000E+1, 0.32564110E+3, 0.450E+3, 0.179E+3, + 0.39123000E+1, 0.98460000E+0, 0.31586290E+3, 0.450E+3, 0.180E+3, 0.39123000E+1, 0.19896000E+1, + 0.49832750E+3, 0.450E+3, 0.181E+3, 0.39123000E+1, 0.92670000E+0, 0.45783400E+3, 0.450E+3, + 0.182E+3, 0.39123000E+1, 0.93830000E+0, 0.44587260E+3, 0.450E+3, 0.183E+3, 0.39123000E+1, + 0.98200000E+0, 0.43494050E+3, 0.450E+3, 0.184E+3, 0.39123000E+1, 0.98150000E+0, 0.40780020E+3, + 0.450E+3, 0.185E+3, 0.39123000E+1, 0.99540000E+0, 0.51650850E+3, 0.450E+3, 0.187E+3, + 0.39123000E+1, 0.97050000E+0, 0.94554140E+3, 0.450E+3, 0.188E+3, 0.39123000E+1, 0.96620000E+0, + 0.54936590E+3, 0.450E+3, 0.189E+3, 0.39123000E+1, 0.29070000E+1, 0.62982470E+3, 0.450E+3, + 0.190E+3, 0.39123000E+1, 0.28844000E+1, 0.56451290E+3, 0.450E+3, 0.191E+3, 0.39123000E+1, + 0.28738000E+1, 0.50156450E+3, 0.450E+3, 0.192E+3, 0.39123000E+1, 0.28878000E+1, 0.48322840E+3, + 0.450E+3, 0.193E+3, 0.39123000E+1, 0.29095000E+1, 0.57296750E+3, 0.450E+3, 0.194E+3, + 0.39123000E+1, 0.19209000E+1, 0.13526050E+3, 0.450E+3, 0.204E+3, 0.39123000E+1, 0.19697000E+1, + 0.13332140E+3, 0.450E+3, 0.205E+3, 0.39123000E+1, 0.19441000E+1, 0.98654000E+2, 0.450E+3, + 0.206E+3, 0.39123000E+1, 0.19985000E+1, 0.79452200E+2, 0.450E+3, 0.207E+3, 0.39123000E+1, + 0.20143000E+1, 0.54900500E+2, 0.450E+3, 0.208E+3, 0.39123000E+1, 0.19887000E+1, 0.23805490E+3, + 0.450E+3, 0.212E+3, 0.39123000E+1, 0.19496000E+1, 0.28733370E+3, 0.450E+3, 0.213E+3, + 0.39123000E+1, 0.19311000E+1, 0.27734590E+3, 0.450E+3, 0.214E+3, 0.39123000E+1, 0.19435000E+1, + 0.24249400E+3, 0.450E+3, 0.215E+3, 0.39123000E+1, 0.20102000E+1, 0.20506870E+3, 0.450E+3, + 0.216E+3, 0.39123000E+1, 0.19903000E+1, 0.33372060E+3, 0.450E+3, 0.220E+3, 0.39123000E+1, + 0.19349000E+1, 0.32229080E+3, 0.450E+3, 0.221E+3, 0.39123000E+1, 0.28999000E+1, 0.32638510E+3, + 0.450E+3, 0.222E+3, 0.39123000E+1, 0.38675000E+1, 0.29865910E+3, 0.450E+3, 0.223E+3, + 0.39123000E+1, 0.29110000E+1, 0.22674830E+3, 0.450E+3, 0.224E+3, 0.39123000E+1, 0.10619100E+2, + 0.19495560E+3, 0.450E+3, 0.225E+3, 0.39123000E+1, 0.98849000E+1, 0.19127030E+3, 0.450E+3, + 0.226E+3, 0.39123000E+1, 0.91376000E+1, 0.22252350E+3, 0.450E+3, 0.227E+3, 0.39123000E+1, + 0.29263000E+1, 0.20778550E+3, 0.450E+3, 0.228E+3, 0.39123000E+1, 0.65458000E+1, 0.29143960E+3, + 0.450E+3, 0.231E+3, 0.39123000E+1, 0.19315000E+1, 0.30837570E+3, 0.450E+3, 0.232E+3, + 0.39123000E+1, 0.19447000E+1, 0.28445060E+3, 0.450E+3, 0.233E+3, 0.39123000E+1, 0.19793000E+1, + 0.26569090E+3, 0.450E+3, 0.234E+3, 0.39123000E+1, 0.19812000E+1, 0.40006500E+3, 0.450E+3, + 0.238E+3, 0.39123000E+1, 0.19143000E+1, 0.38751810E+3, 0.450E+3, 0.239E+3, 0.39123000E+1, + 0.28903000E+1, 0.39155320E+3, 0.450E+3, 0.240E+3, 0.39123000E+1, 0.39106000E+1, 0.37846930E+3, + 0.450E+3, 0.241E+3, 0.39123000E+1, 0.29225000E+1, 0.33635920E+3, 0.450E+3, 0.242E+3, + 0.39123000E+1, 0.11055600E+2, 0.29811220E+3, 0.450E+3, 0.243E+3, 0.39123000E+1, 0.95402000E+1, + 0.28214800E+3, 0.450E+3, 0.244E+3, 0.39123000E+1, 0.88895000E+1, 0.28612510E+3, 0.450E+3, + 0.245E+3, 0.39123000E+1, 0.29696000E+1, 0.29849500E+3, 0.450E+3, 0.246E+3, 0.39123000E+1, + 0.57095000E+1, 0.37650510E+3, 0.450E+3, 0.249E+3, 0.39123000E+1, 0.19378000E+1, 0.40920080E+3, + 0.450E+3, 0.250E+3, 0.39123000E+1, 0.19505000E+1, 0.38757520E+3, 0.450E+3, 0.251E+3, + 0.39123000E+1, 0.19523000E+1, 0.37504230E+3, 0.450E+3, 0.252E+3, 0.39123000E+1, 0.19639000E+1, + 0.48468920E+3, 0.450E+3, 0.256E+3, 0.39123000E+1, 0.18467000E+1, 0.50402900E+3, 0.450E+3, + 0.257E+3, 0.39123000E+1, 0.29175000E+1, 0.37581480E+3, 0.450E+3, 0.272E+3, 0.39123000E+1, + 0.38840000E+1, 0.39163870E+3, 0.450E+3, 0.273E+3, 0.39123000E+1, 0.28988000E+1, 0.36554820E+3, + 0.450E+3, 0.274E+3, 0.39123000E+1, 0.10915300E+2, 0.33325000E+3, 0.450E+3, 0.275E+3, + 0.39123000E+1, 0.98054000E+1, 0.31443610E+3, 0.450E+3, 0.276E+3, 0.39123000E+1, 0.91527000E+1, + 0.31935010E+3, 0.450E+3, 0.277E+3, 0.39123000E+1, 0.29424000E+1, 0.33574880E+3, 0.450E+3, + 0.278E+3, 0.39123000E+1, 0.66669000E+1, 0.40362310E+3, 0.450E+3, 0.281E+3, 0.39123000E+1, + 0.19302000E+1, 0.42669190E+3, 0.450E+3, 0.282E+3, 0.39123000E+1, 0.19356000E+1, 0.43576920E+3, + 0.450E+3, 0.283E+3, 0.39123000E+1, 0.19655000E+1, 0.43337030E+3, 0.450E+3, 0.284E+3, + 0.39123000E+1, 0.19639000E+1, 0.53385140E+3, 0.450E+3, 0.288E+3, 0.39123000E+1, 0.18075000E+1, + 0.10232470E+3, 0.450E+3, 0.305E+3, 0.39123000E+1, 0.29128000E+1, 0.92326000E+2, 0.450E+3, + 0.306E+3, 0.39123000E+1, 0.29987000E+1, 0.70080000E+2, 0.450E+3, 0.307E+3, 0.39123000E+1, + 0.29903000E+1, 0.22605040E+3, 0.450E+3, 0.313E+3, 0.39123000E+1, 0.29146000E+1, 0.26996790E+3, + 0.450E+3, 0.314E+3, 0.39123000E+1, 0.29407000E+1, 0.22554180E+3, 0.450E+3, 0.315E+3, + 0.39123000E+1, 0.29859000E+1, 0.19911820E+3, 0.450E+3, 0.327E+3, 0.39123000E+1, 0.77785000E+1, + 0.21713920E+3, 0.450E+3, 0.328E+3, 0.39123000E+1, 0.62918000E+1, 0.24041780E+3, 0.450E+3, + 0.331E+3, 0.39123000E+1, 0.29233000E+1, 0.27737170E+3, 0.450E+3, 0.332E+3, 0.39123000E+1, + 0.29186000E+1, 0.27434930E+3, 0.450E+3, 0.333E+3, 0.39123000E+1, 0.29709000E+1, 0.32315090E+3, + 0.450E+3, 0.349E+3, 0.39123000E+1, 0.29353000E+1, 0.37016740E+3, 0.450E+3, 0.350E+3, + 0.39123000E+1, 0.29259000E+1, 0.37439290E+3, 0.450E+3, 0.351E+3, 0.39123000E+1, 0.29315000E+1, + 0.36163550E+3, 0.450E+3, 0.381E+3, 0.39123000E+1, 0.29420000E+1, 0.41924330E+3, 0.450E+3, + 0.382E+3, 0.39123000E+1, 0.29081000E+1, 0.42353200E+3, 0.450E+3, 0.383E+3, 0.39123000E+1, + 0.29500000E+1, 0.96417900E+2, 0.450E+3, 0.405E+3, 0.39123000E+1, 0.45856000E+1, 0.76081000E+2, + 0.450E+3, 0.406E+3, 0.39123000E+1, 0.39844000E+1, 0.22392830E+3, 0.450E+3, 0.414E+3, + 0.39123000E+1, 0.38677000E+1, 0.24599220E+3, 0.450E+3, 0.432E+3, 0.39123000E+1, 0.38972000E+1, + 0.33610200E+3, 0.450E+3, 0.450E+3, 0.39123000E+1, 0.39123000E+1, 0.36783600E+2, 0.482E+3, + 0.100E+1, 0.39098000E+1, 0.91180000E+0, 0.24792600E+2, 0.482E+3, 0.200E+1, 0.39098000E+1, + 0.00000000E+0, 0.53122450E+3, 0.482E+3, 0.300E+1, 0.39098000E+1, 0.00000000E+0, 0.31732060E+3, + 0.482E+3, 0.400E+1, 0.39098000E+1, 0.00000000E+0, 0.21779730E+3, 0.482E+3, 0.500E+1, + 0.39098000E+1, 0.00000000E+0, 0.14929680E+3, 0.482E+3, 0.600E+1, 0.39098000E+1, 0.00000000E+0, + 0.10560300E+3, 0.482E+3, 0.700E+1, 0.39098000E+1, 0.00000000E+0, 0.80644400E+2, 0.482E+3, + 0.800E+1, 0.39098000E+1, 0.00000000E+0, 0.61573700E+2, 0.482E+3, 0.900E+1, 0.39098000E+1, + 0.00000000E+0, 0.47684400E+2, 0.482E+3, 0.100E+2, 0.39098000E+1, 0.00000000E+0, 0.63682150E+3, + 0.482E+3, 0.110E+2, 0.39098000E+1, 0.00000000E+0, 0.50280810E+3, 0.482E+3, 0.120E+2, + 0.39098000E+1, 0.00000000E+0, 0.46801840E+3, 0.482E+3, 0.130E+2, 0.39098000E+1, 0.00000000E+0, + 0.37358140E+3, 0.482E+3, 0.140E+2, 0.39098000E+1, 0.00000000E+0, 0.29452850E+3, 0.482E+3, + 0.150E+2, 0.39098000E+1, 0.00000000E+0, 0.24623230E+3, 0.482E+3, 0.160E+2, 0.39098000E+1, + 0.00000000E+0, 0.20258030E+3, 0.482E+3, 0.170E+2, 0.39098000E+1, 0.00000000E+0, 0.16681140E+3, + 0.482E+3, 0.180E+2, 0.39098000E+1, 0.00000000E+0, 0.10395015E+4, 0.482E+3, 0.190E+2, + 0.39098000E+1, 0.00000000E+0, 0.87485890E+3, 0.482E+3, 0.200E+2, 0.39098000E+1, 0.00000000E+0, + 0.72603180E+3, 0.482E+3, 0.210E+2, 0.39098000E+1, 0.00000000E+0, 0.70421370E+3, 0.482E+3, + 0.220E+2, 0.39098000E+1, 0.00000000E+0, 0.64655260E+3, 0.482E+3, 0.230E+2, 0.39098000E+1, + 0.00000000E+0, 0.51001320E+3, 0.482E+3, 0.240E+2, 0.39098000E+1, 0.00000000E+0, 0.55878150E+3, + 0.482E+3, 0.250E+2, 0.39098000E+1, 0.00000000E+0, 0.43938300E+3, 0.482E+3, 0.260E+2, + 0.39098000E+1, 0.00000000E+0, 0.46773930E+3, 0.482E+3, 0.270E+2, 0.39098000E+1, 0.00000000E+0, + 0.48056400E+3, 0.482E+3, 0.280E+2, 0.39098000E+1, 0.00000000E+0, 0.36899340E+3, 0.482E+3, + 0.290E+2, 0.39098000E+1, 0.00000000E+0, 0.38142390E+3, 0.482E+3, 0.300E+2, 0.39098000E+1, + 0.00000000E+0, 0.45032390E+3, 0.482E+3, 0.310E+2, 0.39098000E+1, 0.00000000E+0, 0.40100460E+3, + 0.482E+3, 0.320E+2, 0.39098000E+1, 0.00000000E+0, 0.34508980E+3, 0.482E+3, 0.330E+2, + 0.39098000E+1, 0.00000000E+0, 0.31140410E+3, 0.482E+3, 0.340E+2, 0.39098000E+1, 0.00000000E+0, + 0.27412300E+3, 0.482E+3, 0.350E+2, 0.39098000E+1, 0.00000000E+0, 0.23971550E+3, 0.482E+3, + 0.360E+2, 0.39098000E+1, 0.00000000E+0, 0.11675181E+4, 0.482E+3, 0.370E+2, 0.39098000E+1, + 0.00000000E+0, 0.10418714E+4, 0.482E+3, 0.380E+2, 0.39098000E+1, 0.00000000E+0, 0.91996850E+3, + 0.482E+3, 0.390E+2, 0.39098000E+1, 0.00000000E+0, 0.83102350E+3, 0.482E+3, 0.400E+2, + 0.39098000E+1, 0.00000000E+0, 0.76040220E+3, 0.482E+3, 0.410E+2, 0.39098000E+1, 0.00000000E+0, + 0.59076540E+3, 0.482E+3, 0.420E+2, 0.39098000E+1, 0.00000000E+0, 0.65761940E+3, 0.482E+3, + 0.430E+2, 0.39098000E+1, 0.00000000E+0, 0.50446970E+3, 0.482E+3, 0.440E+2, 0.39098000E+1, + 0.00000000E+0, 0.55107490E+3, 0.482E+3, 0.450E+2, 0.39098000E+1, 0.00000000E+0, 0.51214360E+3, + 0.482E+3, 0.460E+2, 0.39098000E+1, 0.00000000E+0, 0.42704150E+3, 0.482E+3, 0.470E+2, + 0.39098000E+1, 0.00000000E+0, 0.45257800E+3, 0.482E+3, 0.480E+2, 0.39098000E+1, 0.00000000E+0, + 0.56405260E+3, 0.482E+3, 0.490E+2, 0.39098000E+1, 0.00000000E+0, 0.52557130E+3, 0.482E+3, + 0.500E+2, 0.39098000E+1, 0.00000000E+0, 0.47195910E+3, 0.482E+3, 0.510E+2, 0.39098000E+1, + 0.00000000E+0, 0.43993100E+3, 0.482E+3, 0.520E+2, 0.39098000E+1, 0.00000000E+0, 0.39979760E+3, + 0.482E+3, 0.530E+2, 0.39098000E+1, 0.00000000E+0, 0.36119780E+3, 0.482E+3, 0.540E+2, + 0.39098000E+1, 0.00000000E+0, 0.14230570E+4, 0.482E+3, 0.550E+2, 0.39098000E+1, 0.00000000E+0, + 0.13251273E+4, 0.482E+3, 0.560E+2, 0.39098000E+1, 0.00000000E+0, 0.11733669E+4, 0.482E+3, + 0.570E+2, 0.39098000E+1, 0.00000000E+0, 0.55692770E+3, 0.482E+3, 0.580E+2, 0.39098000E+1, + 0.27991000E+1, 0.11775400E+4, 0.482E+3, 0.590E+2, 0.39098000E+1, 0.00000000E+0, 0.11321484E+4, + 0.482E+3, 0.600E+2, 0.39098000E+1, 0.00000000E+0, 0.11041399E+4, 0.482E+3, 0.610E+2, + 0.39098000E+1, 0.00000000E+0, 0.10783321E+4, 0.482E+3, 0.620E+2, 0.39098000E+1, 0.00000000E+0, + 0.10554583E+4, 0.482E+3, 0.630E+2, 0.39098000E+1, 0.00000000E+0, 0.83768840E+3, 0.482E+3, + 0.640E+2, 0.39098000E+1, 0.00000000E+0, 0.93165810E+3, 0.482E+3, 0.650E+2, 0.39098000E+1, + 0.00000000E+0, 0.89994220E+3, 0.482E+3, 0.660E+2, 0.39098000E+1, 0.00000000E+0, 0.95379600E+3, + 0.482E+3, 0.670E+2, 0.39098000E+1, 0.00000000E+0, 0.93372910E+3, 0.482E+3, 0.680E+2, + 0.39098000E+1, 0.00000000E+0, 0.91573150E+3, 0.482E+3, 0.690E+2, 0.39098000E+1, 0.00000000E+0, + 0.90466320E+3, 0.482E+3, 0.700E+2, 0.39098000E+1, 0.00000000E+0, 0.76704550E+3, 0.482E+3, + 0.710E+2, 0.39098000E+1, 0.00000000E+0, 0.76010300E+3, 0.482E+3, 0.720E+2, 0.39098000E+1, + 0.00000000E+0, 0.69715900E+3, 0.482E+3, 0.730E+2, 0.39098000E+1, 0.00000000E+0, 0.59132700E+3, + 0.482E+3, 0.740E+2, 0.39098000E+1, 0.00000000E+0, 0.60261270E+3, 0.482E+3, 0.750E+2, + 0.39098000E+1, 0.00000000E+0, 0.54853340E+3, 0.482E+3, 0.760E+2, 0.39098000E+1, 0.00000000E+0, + 0.50415770E+3, 0.482E+3, 0.770E+2, 0.39098000E+1, 0.00000000E+0, 0.42063020E+3, 0.482E+3, + 0.780E+2, 0.39098000E+1, 0.00000000E+0, 0.39369250E+3, 0.482E+3, 0.790E+2, 0.39098000E+1, + 0.00000000E+0, 0.40549310E+3, 0.482E+3, 0.800E+2, 0.39098000E+1, 0.00000000E+0, 0.58079990E+3, + 0.482E+3, 0.810E+2, 0.39098000E+1, 0.00000000E+0, 0.57106960E+3, 0.482E+3, 0.820E+2, + 0.39098000E+1, 0.00000000E+0, 0.52826530E+3, 0.482E+3, 0.830E+2, 0.39098000E+1, 0.00000000E+0, + 0.50580110E+3, 0.482E+3, 0.840E+2, 0.39098000E+1, 0.00000000E+0, 0.46902930E+3, 0.482E+3, + 0.850E+2, 0.39098000E+1, 0.00000000E+0, 0.43179360E+3, 0.482E+3, 0.860E+2, 0.39098000E+1, + 0.00000000E+0, 0.13523973E+4, 0.482E+3, 0.870E+2, 0.39098000E+1, 0.00000000E+0, 0.13158434E+4, + 0.482E+3, 0.880E+2, 0.39098000E+1, 0.00000000E+0, 0.11716435E+4, 0.482E+3, 0.890E+2, + 0.39098000E+1, 0.00000000E+0, 0.10619693E+4, 0.482E+3, 0.900E+2, 0.39098000E+1, 0.00000000E+0, + 0.10504296E+4, 0.482E+3, 0.910E+2, 0.39098000E+1, 0.00000000E+0, 0.10173620E+4, 0.482E+3, + 0.920E+2, 0.39098000E+1, 0.00000000E+0, 0.10421717E+4, 0.482E+3, 0.930E+2, 0.39098000E+1, + 0.00000000E+0, 0.10101837E+4, 0.482E+3, 0.940E+2, 0.39098000E+1, 0.00000000E+0, 0.58587500E+2, + 0.482E+3, 0.101E+3, 0.39098000E+1, 0.00000000E+0, 0.18499140E+3, 0.482E+3, 0.103E+3, + 0.39098000E+1, 0.98650000E+0, 0.23683180E+3, 0.482E+3, 0.104E+3, 0.39098000E+1, 0.98080000E+0, + 0.18395600E+3, 0.482E+3, 0.105E+3, 0.39098000E+1, 0.97060000E+0, 0.14003800E+3, 0.482E+3, + 0.106E+3, 0.39098000E+1, 0.98680000E+0, 0.98524700E+2, 0.482E+3, 0.107E+3, 0.39098000E+1, + 0.99440000E+0, 0.72487200E+2, 0.482E+3, 0.108E+3, 0.39098000E+1, 0.99250000E+0, 0.50522200E+2, + 0.482E+3, 0.109E+3, 0.39098000E+1, 0.99820000E+0, 0.26973770E+3, 0.482E+3, 0.111E+3, + 0.39098000E+1, 0.96840000E+0, 0.41633670E+3, 0.482E+3, 0.112E+3, 0.39098000E+1, 0.96280000E+0, + 0.42518440E+3, 0.482E+3, 0.113E+3, 0.39098000E+1, 0.96480000E+0, 0.34595860E+3, 0.482E+3, + 0.114E+3, 0.39098000E+1, 0.95070000E+0, 0.28602000E+3, 0.482E+3, 0.115E+3, 0.39098000E+1, + 0.99470000E+0, 0.24349690E+3, 0.482E+3, 0.116E+3, 0.39098000E+1, 0.99480000E+0, 0.20046870E+3, + 0.482E+3, 0.117E+3, 0.39098000E+1, 0.99720000E+0, 0.37503550E+3, 0.482E+3, 0.119E+3, + 0.39098000E+1, 0.97670000E+0, 0.70097800E+3, 0.482E+3, 0.120E+3, 0.39098000E+1, 0.98310000E+0, + 0.37867460E+3, 0.482E+3, 0.121E+3, 0.39098000E+1, 0.18627000E+1, 0.36578460E+3, 0.482E+3, + 0.122E+3, 0.39098000E+1, 0.18299000E+1, 0.35844930E+3, 0.482E+3, 0.123E+3, 0.39098000E+1, + 0.19138000E+1, 0.35474250E+3, 0.482E+3, 0.124E+3, 0.39098000E+1, 0.18269000E+1, 0.32825710E+3, + 0.482E+3, 0.125E+3, 0.39098000E+1, 0.16406000E+1, 0.30438240E+3, 0.482E+3, 0.126E+3, + 0.39098000E+1, 0.16483000E+1, 0.29042420E+3, 0.482E+3, 0.127E+3, 0.39098000E+1, 0.17149000E+1, + 0.28381310E+3, 0.482E+3, 0.128E+3, 0.39098000E+1, 0.17937000E+1, 0.27924290E+3, 0.482E+3, + 0.129E+3, 0.39098000E+1, 0.95760000E+0, 0.26402220E+3, 0.482E+3, 0.130E+3, 0.39098000E+1, + 0.19419000E+1, 0.42402640E+3, 0.482E+3, 0.131E+3, 0.39098000E+1, 0.96010000E+0, 0.37603190E+3, + 0.482E+3, 0.132E+3, 0.39098000E+1, 0.94340000E+0, 0.33942410E+3, 0.482E+3, 0.133E+3, + 0.39098000E+1, 0.98890000E+0, 0.31150380E+3, 0.482E+3, 0.134E+3, 0.39098000E+1, 0.99010000E+0, + 0.27595340E+3, 0.482E+3, 0.135E+3, 0.39098000E+1, 0.99740000E+0, 0.44859350E+3, 0.482E+3, + 0.137E+3, 0.39098000E+1, 0.97380000E+0, 0.85231430E+3, 0.482E+3, 0.138E+3, 0.39098000E+1, + 0.98010000E+0, 0.66191080E+3, 0.482E+3, 0.139E+3, 0.39098000E+1, 0.19153000E+1, 0.50057750E+3, + 0.482E+3, 0.140E+3, 0.39098000E+1, 0.19355000E+1, 0.50546450E+3, 0.482E+3, 0.141E+3, + 0.39098000E+1, 0.19545000E+1, 0.47245030E+3, 0.482E+3, 0.142E+3, 0.39098000E+1, 0.19420000E+1, + 0.52594030E+3, 0.482E+3, 0.143E+3, 0.39098000E+1, 0.16682000E+1, 0.41423030E+3, 0.482E+3, + 0.144E+3, 0.39098000E+1, 0.18584000E+1, 0.38785700E+3, 0.482E+3, 0.145E+3, 0.39098000E+1, + 0.19003000E+1, 0.36065710E+3, 0.482E+3, 0.146E+3, 0.39098000E+1, 0.18630000E+1, 0.34865520E+3, + 0.482E+3, 0.147E+3, 0.39098000E+1, 0.96790000E+0, 0.34625000E+3, 0.482E+3, 0.148E+3, + 0.39098000E+1, 0.19539000E+1, 0.53916270E+3, 0.482E+3, 0.149E+3, 0.39098000E+1, 0.96330000E+0, + 0.49165990E+3, 0.482E+3, 0.150E+3, 0.39098000E+1, 0.95140000E+0, 0.46303140E+3, 0.482E+3, + 0.151E+3, 0.39098000E+1, 0.97490000E+0, 0.43973150E+3, 0.482E+3, 0.152E+3, 0.39098000E+1, + 0.98110000E+0, 0.40350580E+3, 0.482E+3, 0.153E+3, 0.39098000E+1, 0.99680000E+0, 0.53352020E+3, + 0.482E+3, 0.155E+3, 0.39098000E+1, 0.99090000E+0, 0.11018490E+4, 0.482E+3, 0.156E+3, + 0.39098000E+1, 0.97970000E+0, 0.83668870E+3, 0.482E+3, 0.157E+3, 0.39098000E+1, 0.19373000E+1, + 0.54039720E+3, 0.482E+3, 0.159E+3, 0.39098000E+1, 0.29425000E+1, 0.52927220E+3, 0.482E+3, + 0.160E+3, 0.39098000E+1, 0.29455000E+1, 0.51271470E+3, 0.482E+3, 0.161E+3, 0.39098000E+1, + 0.29413000E+1, 0.51464180E+3, 0.482E+3, 0.162E+3, 0.39098000E+1, 0.29300000E+1, 0.49434850E+3, + 0.482E+3, 0.163E+3, 0.39098000E+1, 0.18286000E+1, 0.51763800E+3, 0.482E+3, 0.164E+3, + 0.39098000E+1, 0.28732000E+1, 0.48672230E+3, 0.482E+3, 0.165E+3, 0.39098000E+1, 0.29086000E+1, + 0.49423650E+3, 0.482E+3, 0.166E+3, 0.39098000E+1, 0.28965000E+1, 0.46243040E+3, 0.482E+3, + 0.167E+3, 0.39098000E+1, 0.29242000E+1, 0.44942300E+3, 0.482E+3, 0.168E+3, 0.39098000E+1, + 0.29282000E+1, 0.44639320E+3, 0.482E+3, 0.169E+3, 0.39098000E+1, 0.29246000E+1, 0.46834080E+3, + 0.482E+3, 0.170E+3, 0.39098000E+1, 0.28482000E+1, 0.43169210E+3, 0.482E+3, 0.171E+3, + 0.39098000E+1, 0.29219000E+1, 0.57700800E+3, 0.482E+3, 0.172E+3, 0.39098000E+1, 0.19254000E+1, + 0.53808640E+3, 0.482E+3, 0.173E+3, 0.39098000E+1, 0.19459000E+1, 0.49341180E+3, 0.482E+3, + 0.174E+3, 0.39098000E+1, 0.19292000E+1, 0.49722060E+3, 0.482E+3, 0.175E+3, 0.39098000E+1, + 0.18104000E+1, 0.44014790E+3, 0.482E+3, 0.176E+3, 0.39098000E+1, 0.18858000E+1, 0.41487760E+3, + 0.482E+3, 0.177E+3, 0.39098000E+1, 0.18648000E+1, 0.39675610E+3, 0.482E+3, 0.178E+3, + 0.39098000E+1, 0.19188000E+1, 0.37939980E+3, 0.482E+3, 0.179E+3, 0.39098000E+1, 0.98460000E+0, + 0.36797200E+3, 0.482E+3, 0.180E+3, 0.39098000E+1, 0.19896000E+1, 0.58018030E+3, 0.482E+3, + 0.181E+3, 0.39098000E+1, 0.92670000E+0, 0.53289470E+3, 0.482E+3, 0.182E+3, 0.39098000E+1, + 0.93830000E+0, 0.51891070E+3, 0.482E+3, 0.183E+3, 0.39098000E+1, 0.98200000E+0, 0.50620180E+3, + 0.482E+3, 0.184E+3, 0.39098000E+1, 0.98150000E+0, 0.47470440E+3, 0.482E+3, 0.185E+3, + 0.39098000E+1, 0.99540000E+0, 0.60111980E+3, 0.482E+3, 0.187E+3, 0.39098000E+1, 0.97050000E+0, + 0.11015277E+4, 0.482E+3, 0.188E+3, 0.39098000E+1, 0.96620000E+0, 0.63923770E+3, 0.482E+3, + 0.189E+3, 0.39098000E+1, 0.29070000E+1, 0.73305960E+3, 0.482E+3, 0.190E+3, 0.39098000E+1, + 0.28844000E+1, 0.65721210E+3, 0.482E+3, 0.191E+3, 0.39098000E+1, 0.28738000E+1, 0.58388650E+3, + 0.482E+3, 0.192E+3, 0.39098000E+1, 0.28878000E+1, 0.56256740E+3, 0.482E+3, 0.193E+3, + 0.39098000E+1, 0.29095000E+1, 0.66728070E+3, 0.482E+3, 0.194E+3, 0.39098000E+1, 0.19209000E+1, + 0.15719910E+3, 0.482E+3, 0.204E+3, 0.39098000E+1, 0.19697000E+1, 0.15506850E+3, 0.482E+3, + 0.205E+3, 0.39098000E+1, 0.19441000E+1, 0.11488240E+3, 0.482E+3, 0.206E+3, 0.39098000E+1, + 0.19985000E+1, 0.92650800E+2, 0.482E+3, 0.207E+3, 0.39098000E+1, 0.20143000E+1, 0.64174400E+2, + 0.482E+3, 0.208E+3, 0.39098000E+1, 0.19887000E+1, 0.27667550E+3, 0.482E+3, 0.212E+3, + 0.39098000E+1, 0.19496000E+1, 0.33398620E+3, 0.482E+3, 0.213E+3, 0.39098000E+1, 0.19311000E+1, + 0.32238950E+3, 0.482E+3, 0.214E+3, 0.39098000E+1, 0.19435000E+1, 0.28199150E+3, 0.482E+3, + 0.215E+3, 0.39098000E+1, 0.20102000E+1, 0.23862230E+3, 0.482E+3, 0.216E+3, 0.39098000E+1, + 0.19903000E+1, 0.38820850E+3, 0.482E+3, 0.220E+3, 0.39098000E+1, 0.19349000E+1, 0.37487440E+3, + 0.482E+3, 0.221E+3, 0.39098000E+1, 0.28999000E+1, 0.37965070E+3, 0.482E+3, 0.222E+3, + 0.39098000E+1, 0.38675000E+1, 0.34749740E+3, 0.482E+3, 0.223E+3, 0.39098000E+1, 0.29110000E+1, + 0.26405320E+3, 0.482E+3, 0.224E+3, 0.39098000E+1, 0.10619100E+2, 0.22711690E+3, 0.482E+3, + 0.225E+3, 0.39098000E+1, 0.98849000E+1, 0.22282550E+3, 0.482E+3, 0.226E+3, 0.39098000E+1, + 0.91376000E+1, 0.25908200E+3, 0.482E+3, 0.227E+3, 0.39098000E+1, 0.29263000E+1, 0.24194730E+3, + 0.482E+3, 0.228E+3, 0.39098000E+1, 0.65458000E+1, 0.33891650E+3, 0.482E+3, 0.231E+3, + 0.39098000E+1, 0.19315000E+1, 0.35857470E+3, 0.482E+3, 0.232E+3, 0.39098000E+1, 0.19447000E+1, + 0.33082030E+3, 0.482E+3, 0.233E+3, 0.39098000E+1, 0.19793000E+1, 0.30911340E+3, 0.482E+3, + 0.234E+3, 0.39098000E+1, 0.19812000E+1, 0.46550130E+3, 0.482E+3, 0.238E+3, 0.39098000E+1, + 0.19143000E+1, 0.45081160E+3, 0.482E+3, 0.239E+3, 0.39098000E+1, 0.28903000E+1, 0.45551320E+3, + 0.482E+3, 0.240E+3, 0.39098000E+1, 0.39106000E+1, 0.44042440E+3, 0.482E+3, 0.241E+3, + 0.39098000E+1, 0.29225000E+1, 0.39158340E+3, 0.482E+3, 0.242E+3, 0.39098000E+1, 0.11055600E+2, + 0.34719340E+3, 0.482E+3, 0.243E+3, 0.39098000E+1, 0.95402000E+1, 0.32867310E+3, 0.482E+3, + 0.244E+3, 0.39098000E+1, 0.88895000E+1, 0.33331550E+3, 0.482E+3, 0.245E+3, 0.39098000E+1, + 0.29696000E+1, 0.34765890E+3, 0.482E+3, 0.246E+3, 0.39098000E+1, 0.57095000E+1, 0.43817200E+3, + 0.482E+3, 0.249E+3, 0.39098000E+1, 0.19378000E+1, 0.47608450E+3, 0.482E+3, 0.250E+3, + 0.39098000E+1, 0.19505000E+1, 0.45091710E+3, 0.482E+3, 0.251E+3, 0.39098000E+1, 0.19523000E+1, + 0.43638380E+3, 0.482E+3, 0.252E+3, 0.39098000E+1, 0.19639000E+1, 0.56401480E+3, 0.482E+3, + 0.256E+3, 0.39098000E+1, 0.18467000E+1, 0.58633110E+3, 0.482E+3, 0.257E+3, 0.39098000E+1, + 0.29175000E+1, 0.43725330E+3, 0.482E+3, 0.272E+3, 0.39098000E+1, 0.38840000E+1, 0.45578380E+3, + 0.482E+3, 0.273E+3, 0.39098000E+1, 0.28988000E+1, 0.42555250E+3, 0.482E+3, 0.274E+3, + 0.39098000E+1, 0.10915300E+2, 0.38809680E+3, 0.482E+3, 0.275E+3, 0.39098000E+1, 0.98054000E+1, + 0.36629140E+3, 0.482E+3, 0.276E+3, 0.39098000E+1, 0.91527000E+1, 0.37206660E+3, 0.482E+3, + 0.277E+3, 0.39098000E+1, 0.29424000E+1, 0.39108870E+3, 0.482E+3, 0.278E+3, 0.39098000E+1, + 0.66669000E+1, 0.46992250E+3, 0.482E+3, 0.281E+3, 0.39098000E+1, 0.19302000E+1, 0.49666200E+3, + 0.482E+3, 0.282E+3, 0.39098000E+1, 0.19356000E+1, 0.50715130E+3, 0.482E+3, 0.283E+3, + 0.39098000E+1, 0.19655000E+1, 0.50436840E+3, 0.482E+3, 0.284E+3, 0.39098000E+1, 0.19639000E+1, + 0.62120410E+3, 0.482E+3, 0.288E+3, 0.39098000E+1, 0.18075000E+1, 0.11907380E+3, 0.482E+3, + 0.305E+3, 0.39098000E+1, 0.29128000E+1, 0.10755120E+3, 0.482E+3, 0.306E+3, 0.39098000E+1, + 0.29987000E+1, 0.81781000E+2, 0.482E+3, 0.307E+3, 0.39098000E+1, 0.29903000E+1, 0.26273830E+3, + 0.482E+3, 0.313E+3, 0.39098000E+1, 0.29146000E+1, 0.31386840E+3, 0.482E+3, 0.314E+3, + 0.39098000E+1, 0.29407000E+1, 0.26230480E+3, 0.482E+3, 0.315E+3, 0.39098000E+1, 0.29859000E+1, + 0.23191300E+3, 0.482E+3, 0.327E+3, 0.39098000E+1, 0.77785000E+1, 0.25285690E+3, 0.482E+3, + 0.328E+3, 0.39098000E+1, 0.62918000E+1, 0.27961360E+3, 0.482E+3, 0.331E+3, 0.39098000E+1, + 0.29233000E+1, 0.32256300E+3, 0.482E+3, 0.332E+3, 0.39098000E+1, 0.29186000E+1, 0.31909300E+3, + 0.482E+3, 0.333E+3, 0.39098000E+1, 0.29709000E+1, 0.37612340E+3, 0.482E+3, 0.349E+3, + 0.39098000E+1, 0.29353000E+1, 0.43071080E+3, 0.482E+3, 0.350E+3, 0.39098000E+1, 0.29259000E+1, + 0.43559950E+3, 0.482E+3, 0.351E+3, 0.39098000E+1, 0.29315000E+1, 0.42108940E+3, 0.482E+3, + 0.381E+3, 0.39098000E+1, 0.29420000E+1, 0.48797400E+3, 0.482E+3, 0.382E+3, 0.39098000E+1, + 0.29081000E+1, 0.49291380E+3, 0.482E+3, 0.383E+3, 0.39098000E+1, 0.29500000E+1, 0.11222540E+3, + 0.482E+3, 0.405E+3, 0.39098000E+1, 0.45856000E+1, 0.88703000E+2, 0.482E+3, 0.406E+3, + 0.39098000E+1, 0.39844000E+1, 0.26034680E+3, 0.482E+3, 0.414E+3, 0.39098000E+1, 0.38677000E+1, + 0.28611790E+3, 0.482E+3, 0.432E+3, 0.39098000E+1, 0.38972000E+1, 0.39112500E+3, 0.482E+3, + 0.450E+3, 0.39098000E+1, 0.39123000E+1, 0.45528540E+3, 0.482E+3, 0.482E+3, 0.39098000E+1, + 0.39098000E+1}; int k, nline = 32385; int iat, jat, iatcn, jatcn; @@ -32425,696 +23172,357 @@ void Vdwd3Parameters::init_C6() void Vdwd3Parameters::init_r2r4() { - r2r4_ = { - 2.00734898, 1.56637132, 5.01986934, 3.85379032, 3.64446594, - 3.10492822, 2.71175247, 2.59361680, 2.38825250, 2.21522516, - 6.58585536, 5.46295967, 5.65216669, 4.88284902, 4.29727576, - 4.04108902, 3.72932356, 3.44677275, 7.97762753, 7.07623947, - 6.60844053, 6.28791364, 6.07728703, 5.54643096, 5.80491167, - 5.58415602, 5.41374528, 5.28497229, 5.22592821, 5.09817141, - 6.12149689, 5.54083734, 5.06696878, 4.87005108, 4.59089647, - 4.31176304, 9.55461698, 8.67396077, 7.97210197, 7.43439917, - 6.58711862, 6.19536215, 6.01517290, 5.81623410, 5.65710424, - 5.52640661, 5.44263305, 5.58285373, 7.02081898, 6.46815523, - 5.98089120, 5.81686657, 5.53321815, 5.25477007, 11.02204549, - 10.15679528, 9.35167836, 9.06926079, 8.97241155, 8.90092807, - 8.85984840, 8.81736827, 8.79317710, 7.89969626, 8.80588454, - 8.42439218, 8.54289262, 8.47583370, 8.45090888, 8.47339339, - 7.83525634, 8.20702843, 7.70559063, 7.32755997, 7.03887381, - 6.68978720, 6.05450052, 5.88752022, 5.70661499, 5.78450695, - 7.79780729, 7.26443867, 6.78151984, 6.67883169, 6.39024318, - 6.09527958, 11.79156076, 11.10997644, 9.51377795, 8.67197068, - 8.77140725, 8.65402716, 8.53923501, 8.85024712 - }; + r2r4_ = {2.00734898, 1.56637132, 5.01986934, 3.85379032, 3.64446594, 3.10492822, 2.71175247, 2.59361680, + 2.38825250, 2.21522516, 6.58585536, 5.46295967, 5.65216669, 4.88284902, 4.29727576, 4.04108902, + 3.72932356, 3.44677275, 7.97762753, 7.07623947, 6.60844053, 6.28791364, 6.07728703, 5.54643096, + 5.80491167, 5.58415602, 5.41374528, 5.28497229, 5.22592821, 5.09817141, 6.12149689, 5.54083734, + 5.06696878, 4.87005108, 4.59089647, 4.31176304, 9.55461698, 8.67396077, 7.97210197, 7.43439917, + 6.58711862, 6.19536215, 6.01517290, 5.81623410, 5.65710424, 5.52640661, 5.44263305, 5.58285373, + 7.02081898, 6.46815523, 5.98089120, 5.81686657, 5.53321815, 5.25477007, 11.02204549, 10.15679528, + 9.35167836, 9.06926079, 8.97241155, 8.90092807, 8.85984840, 8.81736827, 8.79317710, 7.89969626, + 8.80588454, 8.42439218, 8.54289262, 8.47583370, 8.45090888, 8.47339339, 7.83525634, 8.20702843, + 7.70559063, 7.32755997, 7.03887381, 6.68978720, 6.05450052, 5.88752022, 5.70661499, 5.78450695, + 7.79780729, 7.26443867, 6.78151984, 6.67883169, 6.39024318, 6.09527958, 11.79156076, 11.10997644, + 9.51377795, 8.67197068, 8.77140725, 8.65402716, 8.53923501, 8.85024712}; } void Vdwd3Parameters::init_rcov() { - rcov_ = { - 0.80628308, 1.15903197, 3.02356173, 2.36845659, 1.94011865, - 1.88972601, 1.78894056, 1.58736983, 1.61256616, 1.68815527, - 3.52748848, 3.14954334, 2.84718717, 2.62041997, 2.77159820, - 2.57002732, 2.49443835, 2.41884923, 4.43455700, 3.88023730, - 3.35111422, 3.07395437, 3.04875805, 2.77159820, 2.69600923, - 2.62041997, 2.51963467, 2.49443835, 2.54483100, 2.74640188, - 2.82199085, 2.74640188, 2.89757982, 2.77159820, 2.87238349, - 2.94797246, 4.76210950, 4.20778980, 3.70386304, 3.50229216, - 3.32591790, 3.12434702, 2.89757982, 2.84718717, 2.84718717, - 2.72120556, 2.89757982, 3.09915070, 3.22513231, 3.17473967, - 3.17473967, 3.09915070, 3.32591790, 3.30072128, 5.26603625, - 4.43455700, 4.08180818, 3.70386304, 3.98102289, 3.95582657, - 3.93062995, 3.90543362, 3.80464833, 3.82984466, 3.80464833, - 3.77945201, 3.75425569, 3.75425569, 3.72905937, 3.85504098, - 3.67866672, 3.45189952, 3.30072128, 3.09915070, 2.97316878, - 2.92277614, 2.79679452, 2.82199085, 2.84718717, 3.32591790, - 3.27552496, 3.27552496, 3.42670319, 3.30072128, 3.47709584, - 3.57788113, 5.06446567, 4.56053862, 4.20778980, 3.98102289, - 3.82984466, 3.85504098, 3.88023730, 3.90543362 - }; + rcov_ = {0.80628308, 1.15903197, 3.02356173, 2.36845659, 1.94011865, 1.88972601, 1.78894056, 1.58736983, 1.61256616, + 1.68815527, 3.52748848, 3.14954334, 2.84718717, 2.62041997, 2.77159820, 2.57002732, 2.49443835, 2.41884923, + 4.43455700, 3.88023730, 3.35111422, 3.07395437, 3.04875805, 2.77159820, 2.69600923, 2.62041997, 2.51963467, + 2.49443835, 2.54483100, 2.74640188, 2.82199085, 2.74640188, 2.89757982, 2.77159820, 2.87238349, 2.94797246, + 4.76210950, 4.20778980, 3.70386304, 3.50229216, 3.32591790, 3.12434702, 2.89757982, 2.84718717, 2.84718717, + 2.72120556, 2.89757982, 3.09915070, 3.22513231, 3.17473967, 3.17473967, 3.09915070, 3.32591790, 3.30072128, + 5.26603625, 4.43455700, 4.08180818, 3.70386304, 3.98102289, 3.95582657, 3.93062995, 3.90543362, 3.80464833, + 3.82984466, 3.80464833, 3.77945201, 3.75425569, 3.75425569, 3.72905937, 3.85504098, 3.67866672, 3.45189952, + 3.30072128, 3.09915070, 2.97316878, 2.92277614, 2.79679452, 2.82199085, 2.84718717, 3.32591790, 3.27552496, + 3.27552496, 3.42670319, 3.30072128, 3.47709584, 3.57788113, 5.06446567, 4.56053862, 4.20778980, 3.98102289, + 3.82984466, 3.85504098, 3.88023730, 3.90543362}; } void Vdwd3Parameters::init_r0ab() { - std::vector r = { - 2.1823, 1.8547, 1.7347, 2.9086, 2.5732, 3.4956, 2.3550, - 2.5095, 2.9802, 3.0982, 2.5141, 2.3917, 2.9977, 2.9484, - 3.2160, 2.4492, 2.2527, 3.1933, 3.0214, 2.9531, 2.9103, - 2.3667, 2.1328, 2.8784, 2.7660, 2.7776, 2.7063, 2.6225, - 2.1768, 2.0625, 2.6395, 2.6648, 2.6482, 2.5697, 2.4846, - 2.4817, 2.0646, 1.9891, 2.5086, 2.6908, 2.6233, 2.4770, - 2.3885, 2.3511, 2.2996, 1.9892, 1.9251, 2.4190, 2.5473, - 2.4994, 2.4091, 2.3176, 2.2571, 2.1946, 2.1374, 2.9898, - 2.6397, 3.6031, 3.1219, 3.7620, 3.2485, 2.9357, 2.7093, - 2.5781, 2.4839, 3.7082, 2.5129, 2.7321, 3.1052, 3.2962, - 3.1331, 3.2000, 2.9586, 3.0822, 2.8582, 2.7120, 3.2570, - 3.4839, 2.8766, 2.7427, 3.2776, 3.2363, 3.5929, 3.2826, - 3.0911, 2.9369, 2.9030, 2.7789, 3.3921, 3.3970, 4.0106, - 2.8884, 2.6605, 3.7513, 3.1613, 3.3605, 3.3325, 3.0991, - 2.9297, 2.8674, 2.7571, 3.8129, 3.3266, 3.7105, 3.7917, - 2.8304, 2.5538, 3.3932, 3.1193, 3.1866, 3.1245, 3.0465, - 2.8727, 2.7664, 2.6926, 3.4608, 3.2984, 3.5142, 3.5418, - 3.5017, 2.6190, 2.4797, 3.1331, 3.0540, 3.0651, 2.9879, - 2.9054, 2.8805, 2.7330, 2.6331, 3.2096, 3.5668, 3.3684, - 3.3686, 3.3180, 3.3107, 2.4757, 2.4019, 2.9789, 3.1468, - 2.9768, 2.8848, 2.7952, 2.7457, 2.6881, 2.5728, 3.0574, - 3.3264, 3.3562, 3.2529, 3.1916, 3.1523, 3.1046, 2.3725, - 2.3289, 2.8760, 2.9804, 2.9093, 2.8040, 2.7071, 2.6386, - 2.5720, 2.5139, 2.9517, 3.1606, 3.2085, 3.1692, 3.0982, - 3.0352, 2.9730, 2.9148, 3.2147, 2.8315, 3.8724, 3.4621, - 3.8823, 3.3760, 3.0746, 2.8817, 2.7552, 2.6605, 3.9740, - 3.6192, 3.6569, 3.9586, 3.6188, 3.3917, 3.2479, 3.1434, - 4.2411, 2.7597, 3.0588, 3.3474, 3.6214, 3.4353, 3.4729, - 3.2487, 3.3200, 3.0914, 2.9403, 3.4972, 3.7993, 3.6773, - 3.8678, 3.5808, 3.8243, 3.5826, 3.4156, 3.8765, 4.1035, - 2.7361, 2.9765, 3.2475, 3.5004, 3.4185, 3.4378, 3.2084, - 3.2787, 3.0604, 2.9187, 3.4037, 3.6759, 3.6586, 3.8327, - 3.5372, 3.7665, 3.5310, 3.3700, 3.7788, 3.9804, 3.8903, - 2.6832, 2.9060, 3.2613, 3.4359, 3.3538, 3.3860, 3.1550, - 3.2300, 3.0133, 2.8736, 3.4024, 3.6142, 3.5979, 3.5295, - 3.4834, 3.7140, 3.4782, 3.3170, 3.7434, 3.9623, 3.8181, - 3.7642, 2.6379, 2.8494, 3.1840, 3.4225, 3.2771, 3.3401, - 3.1072, 3.1885, 2.9714, 2.8319, 3.3315, 3.5979, 3.5256, - 3.4980, 3.4376, 3.6714, 3.4346, 3.2723, 3.6859, 3.8985, - 3.7918, 3.7372, 3.7211, 2.9230, 2.6223, 3.4161, 2.8999, - 3.0557, 3.3308, 3.0555, 2.8508, 2.7385, 2.6640, 3.5263, - 3.0277, 3.2990, 3.7721, 3.5017, 3.2751, 3.1368, 3.0435, - 3.7873, 3.2858, 3.2140, 3.1727, 3.2178, 3.4414, 2.5490, - 2.7623, 3.0991, 3.3252, 3.1836, 3.2428, 3.0259, 3.1225, - 2.9032, 2.7621, 3.2490, 3.5110, 3.4429, 3.3845, 3.3574, - 3.6045, 3.3658, 3.2013, 3.6110, 3.8241, 3.7090, 3.6496, - 3.6333, 3.0896, 3.5462, 2.4926, 2.7136, 3.0693, 3.2699, - 3.1272, 3.1893, 2.9658, 3.0972, 2.8778, 2.7358, 3.2206, - 3.4566, 3.3896, 3.3257, 3.2946, 3.5693, 3.3312, 3.1670, - 3.5805, 3.7711, 3.6536, 3.5927, 3.5775, 3.0411, 3.4885, - 3.4421, 2.4667, 2.6709, 3.0575, 3.2357, 3.0908, 3.1537, - 2.9235, 3.0669, 2.8476, 2.7054, 3.2064, 3.4519, 3.3593, - 3.2921, 3.2577, 3.2161, 3.2982, 3.1339, 3.5606, 3.7582, - 3.6432, 3.5833, 3.5691, 3.0161, 3.4812, 3.4339, 3.4327, - 2.4515, 2.6338, 3.0511, 3.2229, 3.0630, 3.1265, 2.8909, - 3.0253, 2.8184, 2.6764, 3.1968, 3.4114, 3.3492, 3.2691, - 3.2320, 3.1786, 3.2680, 3.1036, 3.5453, 3.7259, 3.6090, - 3.5473, 3.5327, 3.0018, 3.4413, 3.3907, 3.3593, 3.3462, - 2.4413, 2.6006, 3.0540, 3.1987, 3.0490, 3.1058, 2.8643, - 2.9948, 2.7908, 2.6491, 3.1950, 3.3922, 3.3316, 3.2585, - 3.2136, 3.1516, 3.2364, 3.0752, 3.5368, 3.7117, 3.5941, - 3.5313, 3.5164, 2.9962, 3.4225, 3.3699, 3.3370, 3.3234, - 3.3008, 2.4318, 2.5729, 3.0416, 3.1639, 3.0196, 3.0843, - 2.8413, 2.7436, 2.7608, 2.6271, 3.1811, 3.3591, 3.3045, - 3.2349, 3.1942, 3.1291, 3.2111, 3.0534, 3.5189, 3.6809, - 3.5635, 3.5001, 3.4854, 2.9857, 3.3897, 3.3363, 3.3027, - 3.2890, 3.2655, 3.2309, 2.8502, 2.6934, 3.2467, 3.1921, - 3.5663, 3.2541, 3.0571, 2.9048, 2.8657, 2.7438, 3.3547, - 3.3510, 3.9837, 3.6871, 3.4862, 3.3389, 3.2413, 3.1708, - 3.6096, 3.6280, 3.6860, 3.5568, 3.4836, 3.2868, 3.3994, - 3.3476, 3.3170, 3.2950, 3.2874, 3.2606, 3.9579, 2.9226, - 2.6838, 3.7867, 3.1732, 3.3872, 3.3643, 3.1267, 2.9541, - 2.8505, 2.7781, 3.8475, 3.3336, 3.7359, 3.8266, 3.5733, - 3.3959, 3.2775, 3.1915, 3.9878, 3.8816, 3.5810, 3.5364, - 3.5060, 3.8097, 3.3925, 3.3348, 3.3019, 3.2796, 3.2662, - 3.2464, 3.7136, 3.8619, 2.9140, 2.6271, 3.4771, 3.1774, - 3.2560, 3.1970, 3.1207, 2.9406, 2.8322, 2.7571, 3.5455, - 3.3514, 3.5837, 3.6177, 3.5816, 3.3902, 3.2604, 3.1652, - 3.7037, 3.6283, 3.5858, 3.5330, 3.4884, 3.5789, 3.4094, - 3.3473, 3.3118, 3.2876, 3.2707, 3.2521, 3.5570, 3.6496, - 3.6625, 2.7300, 2.5870, 3.2471, 3.1487, 3.1667, 3.0914, - 3.0107, 2.9812, 2.8300, 2.7284, 3.3259, 3.3182, 3.4707, - 3.4748, 3.4279, 3.4182, 3.2547, 3.1353, 3.5116, 3.9432, - 3.8828, 3.8303, 3.7880, 3.3760, 3.7218, 3.3408, 3.3059, - 3.2698, 3.2446, 3.2229, 3.4422, 3.5023, 3.5009, 3.5268, - 2.6026, 2.5355, 3.1129, 3.2863, 3.1029, 3.0108, 2.9227, - 2.8694, 2.8109, 2.6929, 3.1958, 3.4670, 3.4018, 3.3805, - 3.3218, 3.2815, 3.2346, 3.0994, 3.3937, 3.7266, 3.6697, - 3.6164, 3.5730, 3.2522, 3.5051, 3.4686, 3.4355, 3.4084, - 3.3748, 3.3496, 3.3692, 3.4052, 3.3910, 3.3849, 3.3662, - 2.5087, 2.4814, 3.0239, 3.1312, 3.0535, 2.9457, 2.8496, - 2.7780, 2.7828, 2.6532, 3.1063, 3.3143, 3.3549, 3.3120, - 3.2421, 3.1787, 3.1176, 3.0613, 3.3082, 3.5755, 3.5222, - 3.4678, 3.4231, 3.1684, 3.3528, 3.3162, 3.2827, 3.2527, - 3.2308, 3.2029, 3.3173, 3.3343, 3.3092, 3.2795, 3.2452, - 3.2096, 3.2893, 2.8991, 4.0388, 3.6100, 3.9388, 3.4475, - 3.1590, 2.9812, 2.8586, 2.7683, 4.1428, 3.7911, 3.8225, - 4.0372, 3.7059, 3.4935, 3.3529, 3.2492, 4.4352, 4.0826, - 3.9733, 3.9254, 3.8646, 3.9315, 3.7837, 3.7465, 3.7211, - 3.7012, 3.6893, 3.6676, 3.7736, 4.0660, 3.7926, 3.6158, - 3.5017, 3.4166, 4.6176, 2.8786, 3.1658, 3.5823, 3.7689, - 3.5762, 3.5789, 3.3552, 3.4004, 3.1722, 3.0212, 3.7241, - 3.9604, 3.8500, 3.9844, 3.7035, 3.9161, 3.6751, 3.5075, - 4.1151, 4.2877, 4.1579, 4.1247, 4.0617, 3.4874, 3.9848, - 3.9280, 3.9079, 3.8751, 3.8604, 3.8277, 3.8002, 3.9981, - 3.7544, 4.0371, 3.8225, 3.6718, 4.3092, 4.4764, 2.8997, - 3.0953, 3.4524, 3.6107, 3.6062, 3.5783, 3.3463, 3.3855, - 3.1746, 3.0381, 3.6019, 3.7938, 3.8697, 3.9781, 3.6877, - 3.8736, 3.6451, 3.4890, 3.9858, 4.1179, 4.0430, 3.9563, - 3.9182, 3.4002, 3.8310, 3.7716, 3.7543, 3.7203, 3.7053, - 3.6742, 3.8318, 3.7631, 3.7392, 3.9892, 3.7832, 3.6406, - 4.1701, 4.3016, 4.2196, 2.8535, 3.0167, 3.3978, 3.5363, - 3.5393, 3.5301, 3.2960, 3.3352, 3.1287, 2.9967, 3.6659, - 3.7239, 3.8070, 3.7165, 3.6368, 3.8162, 3.5885, 3.4336, - 3.9829, 4.0529, 3.9584, 3.9025, 3.8607, 3.3673, 3.7658, - 3.7035, 3.6866, 3.6504, 3.6339, 3.6024, 3.7708, 3.7283, - 3.6896, 3.9315, 3.7250, 3.5819, 4.1457, 4.2280, 4.1130, - 4.0597, 3.0905, 2.7998, 3.6448, 3.0739, 3.2996, 3.5262, - 3.2559, 3.0518, 2.9394, 2.8658, 3.7514, 3.2295, 3.5643, - 3.7808, 3.6931, 3.4723, 3.3357, 3.2429, 4.0280, 3.5589, - 3.4636, 3.4994, 3.4309, 3.6177, 3.2946, 3.2376, 3.2050, - 3.1847, 3.1715, 3.1599, 3.5555, 3.8111, 3.7693, 3.5718, - 3.4498, 3.3662, 4.1608, 3.7417, 3.6536, 3.6154, 3.8596, - 3.0301, 2.7312, 3.5821, 3.0473, 3.2137, 3.4679, 3.1975, - 2.9969, 2.8847, 2.8110, 3.6931, 3.2076, 3.4943, 3.5956, - 3.6379, 3.4190, 3.2808, 3.1860, 3.9850, 3.5105, 3.4330, - 3.3797, 3.4155, 3.6033, 3.2737, 3.2145, 3.1807, 3.1596, - 3.1461, 3.1337, 3.4812, 3.6251, 3.7152, 3.5201, 3.3966, - 3.3107, 4.1128, 3.6899, 3.6082, 3.5604, 3.7834, 3.7543, - 2.9189, 2.6777, 3.4925, 2.9648, 3.1216, 3.2940, 3.0975, - 2.9757, 2.8493, 2.7638, 3.6085, 3.1214, 3.4006, 3.4793, - 3.5147, 3.3806, 3.2356, 3.1335, 3.9144, 3.4183, 3.3369, - 3.2803, 3.2679, 3.4871, 3.1714, 3.1521, 3.1101, 3.0843, - 3.0670, 3.0539, 3.3890, 3.5086, 3.5895, 3.4783, 3.3484, - 3.2559, 4.0422, 3.5967, 3.5113, 3.4576, 3.6594, 3.6313, - 3.5690, 2.8578, 2.6334, 3.4673, 2.9245, 3.0732, 3.2435, - 3.0338, 2.9462, 2.8143, 2.7240, 3.5832, 3.0789, 3.3617, - 3.4246, 3.4505, 3.3443, 3.1964, 3.0913, 3.8921, 3.3713, - 3.2873, 3.2281, 3.2165, 3.4386, 3.1164, 3.1220, 3.0761, - 3.0480, 3.0295, 3.0155, 3.3495, 3.4543, 3.5260, 3.4413, - 3.3085, 3.2134, 4.0170, 3.5464, 3.4587, 3.4006, 3.6027, - 3.5730, 3.4945, 3.4623, 2.8240, 2.5960, 3.4635, 2.9032, - 3.0431, 3.2115, 2.9892, 2.9148, 2.7801, 2.6873, 3.5776, - 3.0568, 3.3433, 3.3949, 3.4132, 3.3116, 3.1616, 3.0548, - 3.8859, 3.3719, 3.2917, 3.2345, 3.2274, 3.4171, 3.1293, - 3.0567, 3.0565, 3.0274, 3.0087, 2.9939, 3.3293, 3.4249, - 3.4902, 3.4091, 3.2744, 3.1776, 4.0078, 3.5374, 3.4537, - 3.3956, 3.5747, 3.5430, 3.4522, 3.4160, 3.3975, 2.8004, - 2.5621, 3.4617, 2.9154, 3.0203, 3.1875, 2.9548, 2.8038, - 2.7472, 2.6530, 3.5736, 3.0584, 3.3304, 3.3748, 3.3871, - 3.2028, 3.1296, 3.0214, 3.8796, 3.3337, 3.2492, 3.1883, - 3.1802, 3.4050, 3.0756, 3.0478, 3.0322, 3.0323, 3.0163, - 3.0019, 3.3145, 3.4050, 3.4656, 3.3021, 3.2433, 3.1453, - 3.9991, 3.5017, 3.4141, 3.3520, 3.5583, 3.5251, 3.4243, - 3.3851, 3.3662, 3.3525, 2.7846, 2.5324, 3.4652, 2.8759, - 3.0051, 3.1692, 2.9273, 2.7615, 2.7164, 2.6212, 3.5744, - 3.0275, 3.3249, 3.3627, 3.3686, 3.1669, 3.0584, 2.9915, - 3.8773, 3.3099, 3.2231, 3.1600, 3.1520, 3.4023, 3.0426, - 3.0099, 2.9920, 2.9809, 2.9800, 2.9646, 3.3068, 3.3930, - 3.4486, 3.2682, 3.1729, 3.1168, 3.9952, 3.4796, 3.3901, - 3.3255, 3.5530, 3.5183, 3.4097, 3.3683, 3.3492, 3.3360, - 3.3308, 2.5424, 2.6601, 3.2555, 3.2807, 3.1384, 3.1737, - 2.9397, 2.8429, 2.8492, 2.7225, 3.3875, 3.4910, 3.4520, - 3.3608, 3.3036, 3.2345, 3.2999, 3.1487, 3.7409, 3.8392, - 3.7148, 3.6439, 3.6182, 3.1753, 3.5210, 3.4639, 3.4265, - 3.4075, 3.3828, 3.3474, 3.4071, 3.3754, 3.3646, 3.3308, - 3.4393, 3.2993, 3.8768, 3.9891, 3.8310, 3.7483, 3.3417, - 3.3019, 3.2250, 3.1832, 3.1578, 3.1564, 3.1224, 3.4620, - 2.9743, 2.8058, 3.4830, 3.3474, 3.6863, 3.3617, 3.1608, - 3.0069, 2.9640, 2.8427, 3.5885, 3.5219, 4.1314, 3.8120, - 3.6015, 3.4502, 3.3498, 3.2777, 3.8635, 3.8232, 3.8486, - 3.7215, 3.6487, 3.4724, 3.5627, 3.5087, 3.4757, 3.4517, - 3.4423, 3.4139, 4.1028, 3.8388, 3.6745, 3.5562, 3.4806, - 3.4272, 4.0182, 3.9991, 4.0007, 3.9282, 3.7238, 3.6498, - 3.5605, 3.5211, 3.5009, 3.4859, 3.4785, 3.5621, 4.2623, - 3.0775, 2.8275, 4.0181, 3.3385, 3.5379, 3.5036, 3.2589, - 3.0804, 3.0094, 2.9003, 4.0869, 3.5088, 3.9105, 3.9833, - 3.7176, 3.5323, 3.4102, 3.3227, 4.2702, 4.0888, 3.7560, - 3.7687, 3.6681, 3.6405, 3.5569, 3.4990, 3.4659, 3.4433, - 3.4330, 3.4092, 3.8867, 4.0190, 3.7961, 3.6412, 3.5405, - 3.4681, 4.3538, 4.2136, 3.9381, 3.8912, 3.9681, 3.7909, - 3.6774, 3.6262, 3.5999, 3.5823, 3.5727, 3.5419, 4.0245, - 4.1874, 3.0893, 2.7917, 3.7262, 3.3518, 3.4241, 3.5433, - 3.2773, 3.0890, 2.9775, 2.9010, 3.8048, 3.5362, 3.7746, - 3.7911, 3.7511, 3.5495, 3.4149, 3.3177, 4.0129, 3.8370, - 3.7739, 3.7125, 3.7152, 3.7701, 3.5813, 3.5187, 3.4835, - 3.4595, 3.4439, 3.4242, 3.7476, 3.8239, 3.8346, 3.6627, - 3.5479, 3.4639, 4.1026, 3.9733, 3.9292, 3.8667, 3.9513, - 3.8959, 3.7698, 3.7089, 3.6765, 3.6548, 3.6409, 3.5398, - 3.8759, 3.9804, 4.0150, 2.9091, 2.7638, 3.5066, 3.3377, - 3.3481, 3.2633, 3.1810, 3.1428, 2.9872, 2.8837, 3.5929, - 3.5183, 3.6729, 3.6596, 3.6082, 3.5927, 3.4224, 3.2997, - 3.8190, 4.1865, 4.1114, 4.0540, 3.6325, 3.5697, 3.5561, - 3.5259, 3.4901, 3.4552, 3.4315, 3.4091, 3.6438, 3.6879, - 3.6832, 3.7043, 3.5557, 3.4466, 3.9203, 4.2919, 4.2196, - 4.1542, 3.7573, 3.7039, 3.6546, 3.6151, 3.5293, 3.4849, - 3.4552, 3.5192, 3.7673, 3.8359, 3.8525, 3.8901, 2.7806, - 2.7209, 3.3812, 3.4958, 3.2913, 3.1888, 3.0990, 3.0394, - 2.9789, 2.8582, 3.4716, 3.6883, 3.6105, 3.5704, 3.5059, - 3.4619, 3.4138, 3.2742, 3.7080, 3.9773, 3.9010, 3.8409, - 3.7944, 3.4465, 3.7235, 3.6808, 3.6453, 3.6168, 3.5844, - 3.5576, 3.5772, 3.5959, 3.5768, 3.5678, 3.5486, 3.4228, - 3.8107, 4.0866, 4.0169, 3.9476, 3.6358, 3.5800, 3.5260, - 3.4838, 3.4501, 3.4204, 3.3553, 3.6487, 3.6973, 3.7398, - 3.7405, 3.7459, 3.7380, 2.6848, 2.6740, 3.2925, 3.3386, - 3.2473, 3.1284, 3.0301, 2.9531, 2.9602, 2.8272, 3.3830, - 3.5358, 3.5672, 3.5049, 3.4284, 3.3621, 3.3001, 3.2451, - 3.6209, 3.8299, 3.7543, 3.6920, 3.6436, 3.3598, 3.5701, - 3.5266, 3.4904, 3.4590, 3.4364, 3.4077, 3.5287, 3.5280, - 3.4969, 3.4650, 3.4304, 3.3963, 3.7229, 3.9402, 3.8753, - 3.8035, 3.5499, 3.4913, 3.4319, 3.3873, 3.3520, 3.3209, - 3.2948, 3.5052, 3.6465, 3.6696, 3.6577, 3.6388, 3.6142, - 3.5889, 3.3968, 3.0122, 4.2241, 3.7887, 4.0049, 3.5384, - 3.2698, 3.1083, 2.9917, 2.9057, 4.3340, 3.9900, 4.6588, - 4.1278, 3.8125, 3.6189, 3.4851, 3.3859, 4.6531, 4.3134, - 4.2258, 4.1309, 4.0692, 4.0944, 3.9850, 3.9416, 3.9112, - 3.8873, 3.8736, 3.8473, 4.6027, 4.1538, 3.8994, 3.7419, - 3.6356, 3.5548, 4.8353, 4.5413, 4.3891, 4.3416, 4.3243, - 4.2753, 4.2053, 4.1790, 4.1685, 4.1585, 4.1536, 4.0579, - 4.1980, 4.4564, 4.2192, 4.0528, 3.9489, 3.8642, 5.0567, - 3.0630, 3.3271, 4.0432, 4.0046, 4.1555, 3.7426, 3.5130, - 3.5174, 3.2884, 3.1378, 4.1894, 4.2321, 4.1725, 4.1833, - 3.8929, 4.0544, 3.8118, 3.6414, 4.6373, 4.6268, 4.4750, - 4.4134, 4.3458, 3.8582, 4.2583, 4.1898, 4.1562, 4.1191, - 4.1069, 4.0639, 4.1257, 4.1974, 3.9532, 4.1794, 3.9660, - 3.8130, 4.8160, 4.8272, 4.6294, 4.5840, 4.0770, 4.0088, - 3.9103, 3.8536, 3.8324, 3.7995, 3.7826, 4.2294, 4.3380, - 4.4352, 4.1933, 4.4580, 4.2554, 4.1072, 5.0454, 5.1814, - 3.0632, 3.2662, 3.6432, 3.8088, 3.7910, 3.7381, 3.5093, - 3.5155, 3.3047, 3.1681, 3.7871, 3.9924, 4.0637, 4.1382, - 3.8591, 4.0164, 3.7878, 3.6316, 4.1741, 4.3166, 4.2395, - 4.1831, 4.1107, 3.5857, 4.0270, 3.9676, 3.9463, 3.9150, - 3.9021, 3.8708, 4.0240, 4.1551, 3.9108, 4.1337, 3.9289, - 3.7873, 4.3666, 4.5080, 4.4232, 4.3155, 3.8461, 3.8007, - 3.6991, 3.6447, 3.6308, 3.5959, 3.5749, 4.0359, 4.3124, - 4.3539, 4.1122, 4.3772, 4.1785, 4.0386, 4.7004, 4.8604, - 4.6261, 2.9455, 3.2470, 3.6108, 3.8522, 3.6625, 3.6598, - 3.4411, 3.4660, 3.2415, 3.0944, 3.7514, 4.0397, 3.9231, - 4.0561, 3.7860, 3.9845, 3.7454, 3.5802, 4.1366, 4.3581, - 4.2351, 4.2011, 4.1402, 3.5381, 4.0653, 4.0093, 3.9883, - 3.9570, 3.9429, 3.9112, 3.8728, 4.0682, 3.8351, 4.1054, - 3.8928, 3.7445, 4.3415, 4.5497, 4.3833, 4.3122, 3.8051, - 3.7583, 3.6622, 3.6108, 3.5971, 3.5628, 3.5408, 4.0780, - 4.0727, 4.2836, 4.0553, 4.3647, 4.1622, 4.0178, 4.5802, - 4.9125, 4.5861, 4.6201, 2.9244, 3.2241, 3.5848, 3.8293, - 3.6395, 3.6400, 3.4204, 3.4499, 3.2253, 3.0779, 3.7257, - 4.0170, 3.9003, 4.0372, 3.7653, 3.9672, 3.7283, 3.5630, - 4.1092, 4.3347, 4.2117, 4.1793, 4.1179, 3.5139, 4.0426, - 3.9867, 3.9661, 3.9345, 3.9200, 3.8883, 3.8498, 4.0496, - 3.8145, 4.0881, 3.8756, 3.7271, 4.3128, 4.5242, 4.3578, - 4.2870, 3.7796, 3.7318, 3.6364, 3.5854, 3.5726, 3.5378, - 3.5155, 4.0527, 4.0478, 4.2630, 4.0322, 4.3449, 4.1421, - 3.9975, 4.5499, 4.8825, 4.5601, 4.5950, 4.5702, 2.9046, - 3.2044, 3.5621, 3.8078, 3.6185, 3.6220, 3.4019, 3.4359, - 3.2110, 3.0635, 3.7037, 3.9958, 3.8792, 4.0194, 3.7460, - 3.9517, 3.7128, 3.5474, 4.0872, 4.3138, 4.1906, 4.1593, - 4.0973, 3.4919, 4.0216, 3.9657, 3.9454, 3.9134, 3.8986, - 3.8669, 3.8289, 4.0323, 3.7954, 4.0725, 3.8598, 3.7113, - 4.2896, 4.5021, 4.3325, 4.2645, 3.7571, 3.7083, 3.6136, - 3.5628, 3.5507, 3.5155, 3.4929, 4.0297, 4.0234, 4.2442, - 4.0112, 4.3274, 4.1240, 3.9793, 4.5257, 4.8568, 4.5353, - 4.5733, 4.5485, 4.5271, 2.8878, 3.1890, 3.5412, 3.7908, - 3.5974, 3.6078, 3.3871, 3.4243, 3.1992, 3.0513, 3.6831, - 3.9784, 3.8579, 4.0049, 3.7304, 3.9392, 3.7002, 3.5347, - 4.0657, 4.2955, 4.1705, 4.1424, 4.0800, 3.4717, 4.0043, - 3.9485, 3.9286, 3.8965, 3.8815, 3.8500, 3.8073, 4.0180, - 3.7796, 4.0598, 3.8470, 3.6983, 4.2678, 4.4830, 4.3132, - 4.2444, 3.7370, 3.6876, 3.5935, 3.5428, 3.5314, 3.4958, - 3.4730, 4.0117, 4.0043, 4.2287, 3.9939, 4.3134, 4.1096, - 3.9646, 4.5032, 4.8356, 4.5156, 4.5544, 4.5297, 4.5083, - 4.4896, 2.8709, 3.1737, 3.5199, 3.7734, 3.5802, 3.5934, - 3.3724, 3.4128, 3.1877, 3.0396, 3.6624, 3.9608, 3.8397, - 3.9893, 3.7145, 3.9266, 3.6877, 3.5222, 4.0448, 4.2771, - 4.1523, 4.1247, 4.0626, 3.4530, 3.9866, 3.9310, 3.9115, - 3.8792, 3.8641, 3.8326, 3.7892, 4.0025, 3.7636, 4.0471, - 3.8343, 3.6854, 4.2464, 4.4635, 4.2939, 4.2252, 3.7169, - 3.6675, 3.5739, 3.5235, 3.5126, 3.4768, 3.4537, 3.9932, - 3.9854, 4.2123, 3.9765, 4.2992, 4.0951, 3.9500, 4.4811, - 4.8135, 4.4959, 4.5351, 4.5105, 4.4891, 4.4705, 4.4515, - 2.8568, 3.1608, 3.5050, 3.7598, 3.5665, 3.5803, 3.3601, - 3.4031, 3.1779, 3.0296, 3.6479, 3.9471, 3.8262, 3.9773, - 3.7015, 3.9162, 3.6771, 3.5115, 4.0306, 4.2634, 4.1385, - 4.1116, 4.0489, 3.4366, 3.9732, 3.9176, 3.8983, 3.8659, - 3.8507, 3.8191, 3.7757, 3.9907, 3.7506, 4.0365, 3.8235, - 3.6745, 4.2314, 4.4490, 4.2792, 4.2105, 3.7003, 3.6510, - 3.5578, 3.5075, 3.4971, 3.4609, 3.4377, 3.9788, 3.9712, - 4.1997, 3.9624, 4.2877, 4.0831, 3.9378, 4.4655, 4.7974, - 4.4813, 4.5209, 4.4964, 4.4750, 4.4565, 4.4375, 4.4234, - 2.6798, 3.0151, 3.2586, 3.5292, 3.5391, 3.4902, 3.2887, - 3.3322, 3.1228, 2.9888, 3.4012, 3.7145, 3.7830, 3.6665, - 3.5898, 3.8077, 3.5810, 3.4265, 3.7726, 4.0307, 3.9763, - 3.8890, 3.8489, 3.2706, 3.7595, 3.6984, 3.6772, 3.6428, - 3.6243, 3.5951, 3.7497, 3.6775, 3.6364, 3.9203, 3.7157, - 3.5746, 3.9494, 4.2076, 4.1563, 4.0508, 3.5329, 3.4780, - 3.3731, 3.3126, 3.2846, 3.2426, 3.2135, 3.7491, 3.9006, - 3.8332, 3.8029, 4.1436, 3.9407, 3.7998, 4.1663, 4.5309, - 4.3481, 4.2911, 4.2671, 4.2415, 4.2230, 4.2047, 4.1908, - 4.1243, 2.5189, 2.9703, 3.3063, 3.6235, 3.4517, 3.3989, - 3.2107, 3.2434, 3.0094, 2.8580, 3.4253, 3.8157, 3.7258, - 3.6132, 3.5297, 3.7566, 3.5095, 3.3368, 3.7890, 4.1298, - 4.0190, 3.9573, 3.9237, 3.2677, 3.8480, 3.8157, 3.7656, - 3.7317, 3.7126, 3.6814, 3.6793, 3.6218, 3.5788, 3.8763, - 3.6572, 3.5022, 3.9737, 4.3255, 4.1828, 4.1158, 3.5078, - 3.4595, 3.3600, 3.3088, 3.2575, 3.2164, 3.1856, 3.8522, - 3.8665, 3.8075, 3.7772, 4.1391, 3.9296, 3.7772, 4.2134, - 4.7308, 4.3787, 4.3894, 4.3649, 4.3441, 4.3257, 4.3073, - 4.2941, 4.1252, 4.2427, 3.0481, 2.9584, 3.6919, 3.5990, - 3.8881, 3.4209, 3.1606, 3.1938, 2.9975, 2.8646, 3.8138, - 3.7935, 3.7081, 3.9155, 3.5910, 3.4808, 3.4886, 3.3397, - 4.1336, 4.1122, 3.9888, 3.9543, 3.8917, 3.5894, 3.8131, - 3.7635, 3.7419, 3.7071, 3.6880, 3.6574, 3.6546, 3.9375, - 3.6579, 3.5870, 3.6361, 3.5039, 4.3149, 4.2978, 4.1321, - 4.1298, 3.8164, 3.7680, 3.7154, 3.6858, 3.6709, 3.6666, - 3.6517, 3.8174, 3.8608, 4.1805, 3.9102, 3.8394, 3.8968, - 3.7673, 4.5274, 4.6682, 4.3344, 4.3639, 4.3384, 4.3162, - 4.2972, 4.2779, 4.2636, 4.0253, 4.1168, 4.1541, 2.8136, - 3.0951, 3.4635, 3.6875, 3.4987, 3.5183, 3.2937, 3.3580, - 3.1325, 2.9832, 3.6078, 3.8757, 3.7616, 3.9222, 3.6370, - 3.8647, 3.6256, 3.4595, 3.9874, 4.1938, 4.0679, 4.0430, - 3.9781, 3.3886, 3.9008, 3.8463, 3.8288, 3.7950, 3.7790, - 3.7472, 3.7117, 3.9371, 3.6873, 3.9846, 3.7709, 3.6210, - 4.1812, 4.3750, 4.2044, 4.1340, 3.6459, 3.5929, 3.5036, - 3.4577, 3.4528, 3.4146, 3.3904, 3.9014, 3.9031, 4.1443, - 3.8961, 4.2295, 4.0227, 3.8763, 4.4086, 4.7097, 4.4064, - 4.4488, 4.4243, 4.4029, 4.3842, 4.3655, 4.3514, 4.1162, - 4.2205, 4.1953, 4.2794, 2.8032, 3.0805, 3.4519, 3.6700, - 3.4827, 3.5050, 3.2799, 3.3482, 3.1233, 2.9747, 3.5971, - 3.8586, 3.7461, 3.9100, 3.6228, 3.8535, 3.6147, 3.4490, - 3.9764, 4.1773, 4.0511, 4.0270, 3.9614, 3.3754, 3.8836, - 3.8291, 3.8121, 3.7780, 3.7619, 3.7300, 3.6965, 3.9253, - 3.6734, 3.9733, 3.7597, 3.6099, 4.1683, 4.3572, 4.1862, - 4.1153, 3.6312, 3.5772, 3.4881, 3.4429, 3.4395, 3.4009, - 3.3766, 3.8827, 3.8868, 4.1316, 3.8807, 4.2164, 4.0092, - 3.8627, 4.3936, 4.6871, 4.3882, 4.4316, 4.4073, 4.3858, - 4.3672, 4.3485, 4.3344, 4.0984, 4.2036, 4.1791, 4.2622, - 4.2450, 2.7967, 3.0689, 3.4445, 3.6581, 3.4717, 3.4951, - 3.2694, 3.3397, 3.1147, 2.9661, 3.5898, 3.8468, 3.7358, - 3.9014, 3.6129, 3.8443, 3.6054, 3.4396, 3.9683, 4.1656, - 4.0394, 4.0158, 3.9498, 3.3677, 3.8718, 3.8164, 3.8005, - 3.7662, 3.7500, 3.7181, 3.6863, 3.9170, 3.6637, 3.9641, - 3.7503, 3.6004, 4.1590, 4.3448, 4.1739, 4.1029, 3.6224, - 3.5677, 3.4785, 3.4314, 3.4313, 3.3923, 3.3680, 3.8698, - 3.8758, 4.1229, 3.8704, 4.2063, 3.9987, 3.8519, 4.3832, - 4.6728, 4.3759, 4.4195, 4.3952, 4.3737, 4.3551, 4.3364, - 4.3223, 4.0861, 4.1911, 4.1676, 4.2501, 4.2329, 4.2208, - 2.7897, 3.0636, 3.4344, 3.6480, 3.4626, 3.4892, 3.2626, - 3.3344, 3.1088, 2.9597, 3.5804, 3.8359, 3.7251, 3.8940, - 3.6047, 3.8375, 3.5990, 3.4329, 3.9597, 4.1542, 4.0278, - 4.0048, 3.9390, 3.3571, 3.8608, 3.8056, 3.7899, 3.7560, - 3.7400, 3.7081, 3.6758, 3.9095, 3.6552, 3.9572, 3.7436, - 3.5933, 4.1508, 4.3337, 4.1624, 4.0916, 3.6126, 3.5582, - 3.4684, 3.4212, 3.4207, 3.3829, 3.3586, 3.8604, 3.8658, - 4.1156, 3.8620, 4.1994, 3.9917, 3.8446, 4.3750, 4.6617, - 4.3644, 4.4083, 4.3840, 4.3625, 4.3439, 4.3253, 4.3112, - 4.0745, 4.1807, 4.1578, 4.2390, 4.2218, 4.2097, 4.1986, - 2.8395, 3.0081, 3.3171, 3.4878, 3.5360, 3.5145, 3.2809, - 3.3307, 3.1260, 2.9940, 3.4741, 3.6675, 3.7832, 3.6787, - 3.6156, 3.8041, 3.5813, 3.4301, 3.8480, 3.9849, 3.9314, - 3.8405, 3.8029, 3.2962, 3.7104, 3.6515, 3.6378, 3.6020, - 3.5849, 3.5550, 3.7494, 3.6893, 3.6666, 3.9170, 3.7150, - 3.5760, 4.0268, 4.1596, 4.1107, 3.9995, 3.5574, 3.5103, - 3.4163, 3.3655, 3.3677, 3.3243, 3.2975, 3.7071, 3.9047, - 3.8514, 3.8422, 3.8022, 3.9323, 3.7932, 4.2343, 4.4583, - 4.3115, 4.2457, 4.2213, 4.1945, 4.1756, 4.1569, 4.1424, - 4.0620, 4.0494, 3.9953, 4.0694, 4.0516, 4.0396, 4.0280, - 4.0130, 2.9007, 2.9674, 3.8174, 3.5856, 3.6486, 3.5339, - 3.2832, 3.3154, 3.1144, 2.9866, 3.9618, 3.8430, 3.9980, - 3.8134, 3.6652, 3.7985, 3.5756, 3.4207, 4.4061, 4.2817, - 4.1477, 4.0616, 3.9979, 3.6492, 3.8833, 3.8027, 3.7660, - 3.7183, 3.6954, 3.6525, 3.9669, 3.8371, 3.7325, 3.9160, - 3.7156, 3.5714, 4.6036, 4.4620, 4.3092, 4.2122, 3.8478, - 3.7572, 3.6597, 3.5969, 3.5575, 3.5386, 3.5153, 3.7818, - 4.1335, 4.0153, 3.9177, 3.8603, 3.9365, 3.7906, 4.7936, - 4.7410, 4.5461, 4.5662, 4.5340, 4.5059, 4.4832, 4.4604, - 4.4429, 4.2346, 4.4204, 4.3119, 4.3450, 4.3193, 4.3035, - 4.2933, 4.1582, 4.2450, 2.8559, 2.9050, 3.8325, 3.5442, - 3.5077, 3.4905, 3.2396, 3.2720, 3.0726, 2.9467, 3.9644, - 3.8050, 3.8981, 3.7762, 3.6216, 3.7531, 3.5297, 3.3742, - 4.3814, 4.2818, 4.1026, 4.0294, 3.9640, 3.6208, 3.8464, - 3.7648, 3.7281, 3.6790, 3.6542, 3.6117, 3.8650, 3.8010, - 3.6894, 3.8713, 3.6699, 3.5244, 4.5151, 4.4517, 4.2538, - 4.1483, 3.8641, 3.7244, 3.6243, 3.5589, 3.5172, 3.4973, - 3.4715, 3.7340, 4.0316, 3.9958, 3.8687, 3.8115, 3.8862, - 3.7379, 4.7091, 4.7156, 4.5199, 4.5542, 4.5230, 4.4959, - 4.4750, 4.4529, 4.4361, 4.1774, 4.3774, 4.2963, 4.3406, - 4.3159, 4.3006, 4.2910, 4.1008, 4.1568, 4.0980, 2.8110, - 2.8520, 3.7480, 3.5105, 3.4346, 3.3461, 3.1971, 3.2326, - 3.0329, 2.9070, 3.8823, 3.7928, 3.8264, 3.7006, 3.5797, - 3.7141, 3.4894, 3.3326, 4.3048, 4.2217, 4.0786, 3.9900, - 3.9357, 3.6331, 3.8333, 3.7317, 3.6957, 3.6460, 3.6197, - 3.5779, 3.7909, 3.7257, 3.6476, 3.5729, 3.6304, 3.4834, - 4.4368, 4.3921, 4.2207, 4.1133, 3.8067, 3.7421, 3.6140, - 3.5491, 3.5077, 3.4887, 3.4623, 3.6956, 3.9568, 3.8976, - 3.8240, 3.7684, 3.8451, 3.6949, 4.6318, 4.6559, 4.4533, - 4.4956, 4.4641, 4.4366, 4.4155, 4.3936, 4.3764, 4.1302, - 4.3398, 4.2283, 4.2796, 4.2547, 4.2391, 4.2296, 4.0699, - 4.1083, 4.0319, 3.9855, 2.7676, 2.8078, 3.6725, 3.4804, - 3.3775, 3.2411, 3.1581, 3.1983, 2.9973, 2.8705, 3.8070, - 3.7392, 3.7668, 3.6263, 3.5402, 3.6807, 3.4545, 3.2962, - 4.2283, 4.1698, 4.0240, 3.9341, 3.8711, 3.5489, 3.7798, - 3.7000, 3.6654, 3.6154, 3.5882, 3.5472, 3.7289, 3.6510, - 3.6078, 3.5355, 3.5963, 3.4480, 4.3587, 4.3390, 4.1635, - 4.0536, 3.7193, 3.6529, 3.5512, 3.4837, 3.4400, 3.4191, - 3.3891, 3.6622, 3.8934, 3.8235, 3.7823, 3.7292, 3.8106, - 3.6589, 4.5535, 4.6013, 4.3961, 4.4423, 4.4109, 4.3835, - 4.3625, 4.3407, 4.3237, 4.0863, 4.2835, 4.1675, 4.2272, - 4.2025, 4.1869, 4.1774, 4.0126, 4.0460, 3.9815, 3.9340, - 3.8955, 2.6912, 2.7604, 3.6037, 3.4194, 3.3094, 3.1710, - 3.0862, 3.1789, 2.9738, 2.8427, 3.7378, 3.6742, 3.6928, - 3.5512, 3.4614, 3.4087, 3.4201, 3.2607, 4.1527, 4.0977, - 3.9523, 3.8628, 3.8002, 3.4759, 3.7102, 3.6466, 3.6106, - 3.5580, 3.5282, 3.4878, 3.6547, 3.5763, 3.5289, 3.5086, - 3.5593, 3.4099, 4.2788, 4.2624, 4.0873, 3.9770, 3.6407, - 3.5743, 3.5178, 3.4753, 3.3931, 3.3694, 3.3339, 3.6002, - 3.8164, 3.7478, 3.7028, 3.6952, 3.7669, 3.6137, 4.4698, - 4.5488, 4.3168, 4.3646, 4.3338, 4.3067, 4.2860, 4.2645, - 4.2478, 4.0067, 4.2349, 4.0958, 4.1543, 4.1302, 4.1141, - 4.1048, 3.9410, 3.9595, 3.8941, 3.8465, 3.8089, 3.7490, - 2.7895, 2.5849, 3.6484, 3.0162, 3.1267, 3.2125, 3.0043, - 2.9572, 2.8197, 2.7261, 3.7701, 3.2446, 3.5239, 3.4696, - 3.4261, 3.3508, 3.1968, 3.0848, 4.1496, 3.6598, 3.5111, - 3.4199, 3.3809, 3.5382, 3.2572, 3.2100, 3.1917, 3.1519, - 3.1198, 3.1005, 3.5071, 3.5086, 3.5073, 3.4509, 3.3120, - 3.2082, 4.2611, 3.8117, 3.6988, 3.5646, 3.6925, 3.6295, - 3.5383, 3.4910, 3.4625, 3.4233, 3.4007, 3.2329, 3.6723, - 3.6845, 3.6876, 3.6197, 3.4799, 3.3737, 4.4341, 4.0525, - 3.9011, 3.8945, 3.8635, 3.8368, 3.8153, 3.7936, 3.7758, - 3.4944, 3.4873, 3.9040, 3.7110, 3.6922, 3.6799, 3.6724, - 3.5622, 3.6081, 3.5426, 3.4922, 3.4498, 3.3984, 3.4456, - 2.7522, 2.5524, 3.5742, 2.9508, 3.0751, 3.0158, 2.9644, - 2.8338, 2.7891, 2.6933, 3.6926, 3.1814, 3.4528, 3.4186, - 3.3836, 3.2213, 3.1626, 3.0507, 4.0548, 3.5312, 3.4244, - 3.3409, 3.2810, 3.4782, 3.1905, 3.1494, 3.1221, 3.1128, - 3.0853, 3.0384, 3.4366, 3.4562, 3.4638, 3.3211, 3.2762, - 3.1730, 4.1632, 3.6825, 3.5822, 3.4870, 3.6325, 3.5740, - 3.4733, 3.4247, 3.3969, 3.3764, 3.3525, 3.1984, 3.5989, - 3.6299, 3.6433, 3.4937, 3.4417, 3.3365, 4.3304, 3.9242, - 3.7793, 3.7623, 3.7327, 3.7071, 3.6860, 3.6650, 3.6476, - 3.3849, 3.3534, 3.8216, 3.5870, 3.5695, 3.5584, 3.5508, - 3.4856, 3.5523, 3.4934, 3.4464, 3.4055, 3.3551, 3.3888, - 3.3525, 2.7202, 2.5183, 3.4947, 2.8731, 3.0198, 3.1457, - 2.9276, 2.7826, 2.7574, 2.6606, 3.6090, 3.0581, 3.3747, - 3.3677, 3.3450, 3.1651, 3.1259, 3.0147, 3.9498, 3.3857, - 3.2917, 3.2154, 3.1604, 3.4174, 3.0735, 3.0342, 3.0096, - 3.0136, 2.9855, 2.9680, 3.3604, 3.4037, 3.4243, 3.2633, - 3.1810, 3.1351, 4.0557, 3.5368, 3.4526, 3.3699, 3.5707, - 3.5184, 3.4085, 3.3595, 3.3333, 3.3143, 3.3041, 3.1094, - 3.5193, 3.5745, 3.6025, 3.4338, 3.3448, 3.2952, 4.2158, - 3.7802, 3.6431, 3.6129, 3.5853, 3.5610, 3.5406, 3.5204, - 3.5036, 3.2679, 3.2162, 3.7068, 3.4483, 3.4323, 3.4221, - 3.4138, 3.3652, 3.4576, 3.4053, 3.3618, 3.3224, 3.2711, - 3.3326, 3.2950, 3.2564, 2.5315, 2.6104, 3.2734, 3.2299, - 3.1090, 2.9942, 2.9159, 2.8324, 2.8350, 2.7216, 3.3994, - 3.4475, 3.4354, 3.3438, 3.2807, 3.2169, 3.2677, 3.1296, - 3.7493, 3.8075, 3.6846, 3.6104, 3.5577, 3.2052, 3.4803, - 3.4236, 3.3845, 3.3640, 3.3365, 3.3010, 3.3938, 3.3624, - 3.3440, 3.3132, 3.4035, 3.2754, 3.8701, 3.9523, 3.8018, - 3.7149, 3.3673, 3.3199, 3.2483, 3.2069, 3.1793, 3.1558, - 3.1395, 3.4097, 3.5410, 3.5228, 3.5116, 3.4921, 3.4781, - 3.4690, 4.0420, 4.1759, 4.0078, 4.0450, 4.0189, 3.9952, - 3.9770, 3.9583, 3.9434, 3.7217, 3.8228, 3.7826, 3.8640, - 3.8446, 3.8314, 3.8225, 3.6817, 3.7068, 3.6555, 3.6159, - 3.5831, 3.5257, 3.2133, 3.1689, 3.1196, 3.3599, 2.9852, - 2.7881, 3.5284, 3.3493, 3.6958, 3.3642, 3.1568, 3.0055, - 2.9558, 2.8393, 3.6287, 3.5283, 4.1511, 3.8259, 3.6066, - 3.4527, 3.3480, 3.2713, 3.9037, 3.8361, 3.8579, 3.7311, - 3.6575, 3.5176, 3.5693, 3.5157, 3.4814, 3.4559, 3.4445, - 3.4160, 4.1231, 3.8543, 3.6816, 3.5602, 3.4798, 3.4208, - 4.0542, 4.0139, 4.0165, 3.9412, 3.7698, 3.6915, 3.6043, - 3.5639, 3.5416, 3.5247, 3.5153, 3.5654, 4.2862, 4.0437, - 3.8871, 3.7741, 3.6985, 3.6413, 4.2345, 4.3663, 4.3257, - 4.0869, 4.0612, 4.0364, 4.0170, 3.9978, 3.9834, 3.9137, - 3.8825, 3.8758, 3.9143, 3.8976, 3.8864, 3.8768, 3.9190, - 4.1613, 4.0566, 3.9784, 3.9116, 3.8326, 3.7122, 3.6378, - 3.5576, 3.5457, 4.3127, 3.1160, 2.8482, 4.0739, 3.3599, - 3.5698, 3.5366, 3.2854, 3.1039, 2.9953, 2.9192, 4.1432, - 3.5320, 3.9478, 4.0231, 3.7509, 3.5604, 3.4340, 3.3426, - 4.3328, 3.8288, 3.7822, 3.7909, 3.6907, 3.6864, 3.5793, - 3.5221, 3.4883, 3.4649, 3.4514, 3.4301, 3.9256, 4.0596, - 3.8307, 3.6702, 3.5651, 3.4884, 4.4182, 4.2516, 3.9687, - 3.9186, 3.9485, 3.8370, 3.7255, 3.6744, 3.6476, 3.6295, - 3.6193, 3.5659, 4.0663, 4.2309, 4.0183, 3.8680, 3.7672, - 3.6923, 4.5240, 4.4834, 4.1570, 4.3204, 4.2993, 4.2804, - 4.2647, 4.2481, 4.2354, 3.8626, 3.8448, 4.2267, 4.1799, - 4.1670, 3.8738, 3.8643, 3.8796, 4.0575, 4.0354, 3.9365, - 3.8611, 3.7847, 3.7388, 3.6826, 3.6251, 3.5492, 4.0889, - 4.2764, 3.1416, 2.8325, 3.7735, 3.3787, 3.4632, 3.5923, - 3.3214, 3.1285, 3.0147, 2.9366, 3.8527, 3.5602, 3.8131, - 3.8349, 3.7995, 3.5919, 3.4539, 3.3540, 4.0654, 3.8603, - 3.7972, 3.7358, 3.7392, 3.8157, 3.6055, 3.5438, 3.5089, - 3.4853, 3.4698, 3.4508, 3.7882, 3.8682, 3.8837, 3.7055, - 3.5870, 3.5000, 4.1573, 4.0005, 3.9568, 3.8936, 3.9990, - 3.9433, 3.8172, 3.7566, 3.7246, 3.7033, 3.6900, 3.5697, - 3.9183, 4.0262, 4.0659, 3.8969, 3.7809, 3.6949, 4.2765, - 4.2312, 4.1401, 4.0815, 4.0580, 4.0369, 4.0194, 4.0017, - 3.9874, 3.8312, 3.8120, 3.9454, 3.9210, 3.9055, 3.8951, - 3.8866, 3.8689, 3.9603, 3.9109, 3.9122, 3.8233, 3.7438, - 3.7436, 3.6981, 3.6555, 3.5452, 3.9327, 4.0658, 4.1175, - 2.9664, 2.8209, 3.5547, 3.3796, 3.3985, 3.3164, 3.2364, - 3.1956, 3.0370, 2.9313, 3.6425, 3.5565, 3.7209, 3.7108, - 3.6639, 3.6484, 3.4745, 3.3492, 3.8755, 4.2457, 3.7758, - 3.7161, 3.6693, 3.6155, 3.5941, 3.5643, 3.5292, 3.4950, - 3.4720, 3.4503, 3.6936, 3.7392, 3.7388, 3.7602, 3.6078, - 3.4960, 3.9800, 4.3518, 4.2802, 3.8580, 3.8056, 3.7527, - 3.7019, 3.6615, 3.5768, 3.5330, 3.5038, 3.5639, 3.8192, - 3.8883, 3.9092, 3.9478, 3.7995, 3.6896, 4.1165, 4.5232, - 4.4357, 4.4226, 4.4031, 4.3860, 4.3721, 4.3580, 4.3466, - 4.2036, 4.2037, 3.8867, 4.2895, 4.2766, 4.2662, 4.2598, - 3.8408, 3.9169, 3.8681, 3.8250, 3.7855, 3.7501, 3.6753, - 3.5499, 3.4872, 3.5401, 3.8288, 3.9217, 3.9538, 4.0054, - 2.8388, 2.7890, 3.4329, 3.5593, 3.3488, 3.2486, 3.1615, - 3.1000, 3.0394, 2.9165, 3.5267, 3.7479, 3.6650, 3.6263, - 3.5658, 3.5224, 3.4762, 3.3342, 3.7738, 4.0333, 3.9568, - 3.8975, 3.8521, 3.4929, 3.7830, 3.7409, 3.7062, 3.6786, - 3.6471, 3.6208, 3.6337, 3.6519, 3.6363, 3.6278, 3.6110, - 3.4825, 3.8795, 4.1448, 4.0736, 4.0045, 3.6843, 3.6291, - 3.5741, 3.5312, 3.4974, 3.4472, 3.4034, 3.7131, 3.7557, - 3.7966, 3.8005, 3.8068, 3.8015, 3.6747, 4.0222, 4.3207, - 4.2347, 4.2191, 4.1990, 4.1811, 4.1666, 4.1521, 4.1401, - 3.9970, 3.9943, 3.9592, 4.0800, 4.0664, 4.0559, 4.0488, - 3.9882, 4.0035, 3.9539, 3.9138, 3.8798, 3.8355, 3.5359, - 3.4954, 3.3962, 3.5339, 3.7595, 3.8250, 3.8408, 3.8600, - 3.8644, 2.7412, 2.7489, 3.3374, 3.3950, 3.3076, 3.1910, - 3.0961, 3.0175, 3.0280, 2.8929, 3.4328, 3.5883, 3.6227, - 3.5616, 3.4894, 3.4241, 3.3641, 3.3120, 3.6815, 3.8789, - 3.8031, 3.7413, 3.6939, 3.4010, 3.6225, 3.5797, 3.5443, - 3.5139, 3.4923, 3.4642, 3.5860, 3.5849, 3.5570, 3.5257, - 3.4936, 3.4628, 3.7874, 3.9916, 3.9249, 3.8530, 3.5932, - 3.5355, 3.4757, 3.4306, 3.3953, 3.3646, 3.3390, 3.5637, - 3.7053, 3.7266, 3.7177, 3.6996, 3.6775, 3.6558, 3.9331, - 4.1655, 4.0879, 4.0681, 4.0479, 4.0299, 4.0152, 4.0006, - 3.9883, 3.8500, 3.8359, 3.8249, 3.9269, 3.9133, 3.9025, - 3.8948, 3.8422, 3.8509, 3.7990, 3.7570, 3.7219, 3.6762, - 3.4260, 3.3866, 3.3425, 3.5294, 3.7022, 3.7497, 3.7542, - 3.7494, 3.7370, 3.7216, 3.4155, 3.0522, 4.2541, 3.8218, - 4.0438, 3.5875, 3.3286, 3.1682, 3.0566, 2.9746, 4.3627, - 4.0249, 4.6947, 4.1718, 3.8639, 3.6735, 3.5435, 3.4479, - 4.6806, 4.3485, 4.2668, 4.1690, 4.1061, 4.1245, 4.0206, - 3.9765, 3.9458, 3.9217, 3.9075, 3.8813, 3.9947, 4.1989, - 3.9507, 3.7960, 3.6925, 3.6150, 4.8535, 4.5642, 4.4134, - 4.3688, 4.3396, 4.2879, 4.2166, 4.1888, 4.1768, 4.1660, - 4.1608, 4.0745, 4.2289, 4.4863, 4.2513, 4.0897, 3.9876, - 3.9061, 5.0690, 5.0446, 4.6186, 4.6078, 4.5780, 4.5538, - 4.5319, 4.5101, 4.4945, 4.1912, 4.2315, 4.5534, 4.4373, - 4.4224, 4.4120, 4.4040, 4.2634, 4.7770, 4.6890, 4.6107, - 4.5331, 4.4496, 4.4082, 4.3095, 4.2023, 4.0501, 4.2595, - 4.5497, 4.3056, 4.1506, 4.0574, 3.9725, 5.0796, 3.0548, - 3.3206, 3.8132, 3.9720, 3.7675, 3.7351, 3.5167, 3.5274, - 3.3085, 3.1653, 3.9500, 4.1730, 4.0613, 4.1493, 3.8823, - 4.0537, 3.8200, 3.6582, 4.3422, 4.5111, 4.3795, 4.3362, - 4.2751, 3.7103, 4.1973, 4.1385, 4.1129, 4.0800, 4.0647, - 4.0308, 4.0096, 4.1619, 3.9360, 4.1766, 3.9705, 3.8262, - 4.5348, 4.7025, 4.5268, 4.5076, 3.9562, 3.9065, 3.8119, - 3.7605, 3.7447, 3.7119, 3.6916, 4.1950, 4.2110, 4.3843, - 4.1631, 4.4427, 4.2463, 4.1054, 4.7693, 5.0649, 4.7365, - 4.7761, 4.7498, 4.7272, 4.7076, 4.6877, 4.6730, 4.4274, - 4.5473, 4.5169, 4.5975, 4.5793, 4.5667, 4.5559, 4.3804, - 4.6920, 4.6731, 4.6142, 4.5600, 4.4801, 4.0149, 3.8856, - 3.7407, 4.1545, 4.2253, 4.4229, 4.1923, 4.5022, 4.3059, - 4.1591, 4.7883, 4.9294, 3.3850, 3.4208, 3.7004, 3.8800, - 3.9886, 3.9040, 3.6719, 3.6547, 3.4625, 3.3370, 3.8394, - 4.0335, 4.2373, 4.3023, 4.0306, 4.1408, 3.9297, 3.7857, - 4.1907, 4.3230, 4.2664, 4.2173, 4.1482, 3.6823, 4.0711, - 4.0180, 4.0017, 3.9747, 3.9634, 3.9383, 4.1993, 4.3205, - 4.0821, 4.2547, 4.0659, 3.9359, 4.3952, 4.5176, 4.3888, - 4.3607, 3.9583, 3.9280, 3.8390, 3.7971, 3.7955, 3.7674, - 3.7521, 4.1062, 4.3633, 4.2991, 4.2767, 4.4857, 4.3039, - 4.1762, 4.6197, 4.8654, 4.6633, 4.5878, 4.5640, 4.5422, - 4.5231, 4.5042, 4.4901, 4.3282, 4.3978, 4.3483, 4.4202, - 4.4039, 4.3926, 4.3807, 4.2649, 4.6135, 4.5605, 4.5232, - 4.4676, 4.3948, 4.0989, 3.9864, 3.8596, 4.0942, 4.2720, - 4.3270, 4.3022, 4.5410, 4.3576, 4.2235, 4.6545, 4.7447, - 4.7043, 3.0942, 3.2075, 3.5152, 3.6659, 3.8289, 3.7459, - 3.5156, 3.5197, 3.3290, 3.2069, 3.6702, 3.8448, 4.0340, - 3.9509, 3.8585, 3.9894, 3.7787, 3.6365, 4.1425, 4.1618, - 4.0940, 4.0466, 3.9941, 3.5426, 3.8952, 3.8327, 3.8126, - 3.7796, 3.7635, 3.7356, 4.0047, 3.9655, 3.9116, 4.1010, - 3.9102, 3.7800, 4.2964, 4.3330, 4.2622, 4.2254, 3.8195, - 3.7560, 3.6513, 3.5941, 3.5810, 3.5420, 3.5178, 3.8861, - 4.1459, 4.1147, 4.0772, 4.3120, 4.1207, 3.9900, 4.4733, - 4.6157, 4.4580, 4.4194, 4.3954, 4.3739, 4.3531, 4.3343, - 4.3196, 4.2140, 4.2339, 4.1738, 4.2458, 4.2278, 4.2158, - 4.2039, 4.1658, 4.3595, 4.2857, 4.2444, 4.1855, 4.1122, - 3.7839, 3.6879, 3.5816, 3.8633, 4.1585, 4.1402, 4.1036, - 4.3694, 4.1735, 4.0368, 4.5095, 4.5538, 4.5240, 4.4252, - 3.0187, 3.1918, 3.5127, 3.6875, 3.7404, 3.6943, 3.4702, - 3.4888, 3.2914, 3.1643, 3.6669, 3.8724, 3.9940, 4.0816, - 3.8054, 3.9661, 3.7492, 3.6024, 4.0428, 4.1951, 4.1466, - 4.0515, 4.0075, 3.5020, 3.9158, 3.8546, 3.8342, 3.8008, - 3.7845, 3.7549, 3.9602, 3.8872, 3.8564, 4.0793, 3.8835, - 3.7495, 4.2213, 4.3704, 4.3300, 4.2121, 3.7643, 3.7130, - 3.6144, 3.5599, 3.5474, 3.5093, 3.4853, 3.9075, 4.1115, - 4.0473, 4.0318, 4.2999, 4.1050, 3.9710, 4.4320, 4.6706, - 4.5273, 4.4581, 4.4332, 4.4064, 4.3873, 4.3684, 4.3537, - 4.2728, 4.2549, 4.2032, 4.2794, 4.2613, 4.2491, 4.2375, - 4.2322, 4.3665, 4.3061, 4.2714, 4.2155, 4.1416, 3.7660, - 3.6628, 3.5476, 3.8790, 4.1233, 4.0738, 4.0575, 4.3575, - 4.1586, 4.0183, 4.4593, 4.5927, 4.4865, 4.3813, 4.4594, - 2.9875, 3.1674, 3.4971, 3.6715, 3.7114, 3.6692, 3.4446, - 3.4676, 3.2685, 3.1405, 3.6546, 3.8579, 3.9637, 4.0581, - 3.7796, 3.9463, 3.7275, 3.5792, 4.0295, 4.1824, 4.1247, - 4.0357, 3.9926, 3.4827, 3.9007, 3.8392, 3.8191, 3.7851, - 3.7687, 3.7387, 3.9290, 3.8606, 3.8306, 4.0601, 3.8625, - 3.7269, 4.2062, 4.3566, 4.3022, 4.1929, 3.7401, 3.6888, - 3.5900, 3.5350, 3.5226, 3.4838, 3.4594, 3.8888, 4.0813, - 4.0209, 4.0059, 4.2810, 4.0843, 3.9486, 4.4162, 4.6542, - 4.5005, 4.4444, 4.4196, 4.3933, 4.3741, 4.3552, 4.3406, - 4.2484, 4.2413, 4.1907, 4.2656, 4.2474, 4.2352, 4.2236, - 4.2068, 4.3410, 4.2817, 4.2479, 4.1921, 4.1182, 3.7346, - 3.6314, 3.5168, 3.8582, 4.0927, 4.0469, 4.0313, 4.3391, - 4.1381, 3.9962, 4.4429, 4.5787, 4.4731, 4.3588, 4.4270, - 4.3957, 2.9659, 3.1442, 3.4795, 3.6503, 3.6814, 3.6476, - 3.4222, 3.4491, 3.2494, 3.1209, 3.6324, 3.8375, 3.9397, - 3.8311, 3.7581, 3.9274, 3.7085, 3.5598, 4.0080, 4.1641, - 4.1057, 4.0158, 3.9726, 3.4667, 3.8802, 3.8188, 3.7989, - 3.7644, 3.7474, 3.7173, 3.9049, 3.8424, 3.8095, 4.0412, - 3.8436, 3.7077, 4.1837, 4.3366, 4.2816, 4.1686, 3.7293, - 3.6709, 3.5700, 3.5153, 3.5039, 3.4684, 3.4437, 3.8663, - 4.0575, 4.0020, 3.9842, 4.2612, 4.0643, 3.9285, 4.3928, - 4.6308, 4.4799, 4.4244, 4.3996, 4.3737, 4.3547, 4.3358, - 4.3212, 4.2275, 4.2216, 4.1676, 4.2465, 4.2283, 4.2161, - 4.2045, 4.1841, 4.3135, 4.2562, 4.2226, 4.1667, 4.0932, - 3.7134, 3.6109, 3.4962, 3.8352, 4.0688, 4.0281, 4.0099, - 4.3199, 4.1188, 3.9768, 4.4192, 4.5577, 4.4516, 4.3365, - 4.4058, 4.3745, 4.3539, 2.8763, 3.1294, 3.5598, 3.7465, - 3.5659, 3.5816, 3.3599, 3.4024, 3.1877, 3.0484, 3.7009, - 3.9451, 3.8465, 3.9873, 3.7079, 3.9083, 3.6756, 3.5150, - 4.0829, 4.2780, 4.1511, 4.1260, 4.0571, 3.4865, 3.9744, - 3.9150, 3.8930, 3.8578, 3.8402, 3.8073, 3.7977, 4.0036, - 3.7604, 4.0288, 3.8210, 3.6757, 4.2646, 4.4558, 4.2862, - 4.2122, 3.7088, 3.6729, 3.5800, 3.5276, 3.5165, 3.4783, - 3.4539, 3.9553, 3.9818, 4.2040, 3.9604, 4.2718, 4.0689, - 3.9253, 4.4869, 4.7792, 4.4918, 4.5342, 4.5090, 4.4868, - 4.4680, 4.4486, 4.4341, 4.2023, 4.3122, 4.2710, 4.3587, - 4.3407, 4.3281, 4.3174, 4.1499, 4.3940, 4.3895, 4.3260, - 4.2725, 4.1961, 3.7361, 3.6193, 3.4916, 3.9115, 3.9914, - 3.9809, 3.9866, 4.3329, 4.1276, 3.9782, 4.5097, 4.6769, - 4.5158, 4.3291, 4.3609, 4.3462, 4.3265, 4.4341 - }; + std::vector r = { + 2.1823, 1.8547, 1.7347, 2.9086, 2.5732, 3.4956, 2.3550, 2.5095, 2.9802, 3.0982, 2.5141, 2.3917, 2.9977, 2.9484, + 3.2160, 2.4492, 2.2527, 3.1933, 3.0214, 2.9531, 2.9103, 2.3667, 2.1328, 2.8784, 2.7660, 2.7776, 2.7063, 2.6225, + 2.1768, 2.0625, 2.6395, 2.6648, 2.6482, 2.5697, 2.4846, 2.4817, 2.0646, 1.9891, 2.5086, 2.6908, 2.6233, 2.4770, + 2.3885, 2.3511, 2.2996, 1.9892, 1.9251, 2.4190, 2.5473, 2.4994, 2.4091, 2.3176, 2.2571, 2.1946, 2.1374, 2.9898, + 2.6397, 3.6031, 3.1219, 3.7620, 3.2485, 2.9357, 2.7093, 2.5781, 2.4839, 3.7082, 2.5129, 2.7321, 3.1052, 3.2962, + 3.1331, 3.2000, 2.9586, 3.0822, 2.8582, 2.7120, 3.2570, 3.4839, 2.8766, 2.7427, 3.2776, 3.2363, 3.5929, 3.2826, + 3.0911, 2.9369, 2.9030, 2.7789, 3.3921, 3.3970, 4.0106, 2.8884, 2.6605, 3.7513, 3.1613, 3.3605, 3.3325, 3.0991, + 2.9297, 2.8674, 2.7571, 3.8129, 3.3266, 3.7105, 3.7917, 2.8304, 2.5538, 3.3932, 3.1193, 3.1866, 3.1245, 3.0465, + 2.8727, 2.7664, 2.6926, 3.4608, 3.2984, 3.5142, 3.5418, 3.5017, 2.6190, 2.4797, 3.1331, 3.0540, 3.0651, 2.9879, + 2.9054, 2.8805, 2.7330, 2.6331, 3.2096, 3.5668, 3.3684, 3.3686, 3.3180, 3.3107, 2.4757, 2.4019, 2.9789, 3.1468, + 2.9768, 2.8848, 2.7952, 2.7457, 2.6881, 2.5728, 3.0574, 3.3264, 3.3562, 3.2529, 3.1916, 3.1523, 3.1046, 2.3725, + 2.3289, 2.8760, 2.9804, 2.9093, 2.8040, 2.7071, 2.6386, 2.5720, 2.5139, 2.9517, 3.1606, 3.2085, 3.1692, 3.0982, + 3.0352, 2.9730, 2.9148, 3.2147, 2.8315, 3.8724, 3.4621, 3.8823, 3.3760, 3.0746, 2.8817, 2.7552, 2.6605, 3.9740, + 3.6192, 3.6569, 3.9586, 3.6188, 3.3917, 3.2479, 3.1434, 4.2411, 2.7597, 3.0588, 3.3474, 3.6214, 3.4353, 3.4729, + 3.2487, 3.3200, 3.0914, 2.9403, 3.4972, 3.7993, 3.6773, 3.8678, 3.5808, 3.8243, 3.5826, 3.4156, 3.8765, 4.1035, + 2.7361, 2.9765, 3.2475, 3.5004, 3.4185, 3.4378, 3.2084, 3.2787, 3.0604, 2.9187, 3.4037, 3.6759, 3.6586, 3.8327, + 3.5372, 3.7665, 3.5310, 3.3700, 3.7788, 3.9804, 3.8903, 2.6832, 2.9060, 3.2613, 3.4359, 3.3538, 3.3860, 3.1550, + 3.2300, 3.0133, 2.8736, 3.4024, 3.6142, 3.5979, 3.5295, 3.4834, 3.7140, 3.4782, 3.3170, 3.7434, 3.9623, 3.8181, + 3.7642, 2.6379, 2.8494, 3.1840, 3.4225, 3.2771, 3.3401, 3.1072, 3.1885, 2.9714, 2.8319, 3.3315, 3.5979, 3.5256, + 3.4980, 3.4376, 3.6714, 3.4346, 3.2723, 3.6859, 3.8985, 3.7918, 3.7372, 3.7211, 2.9230, 2.6223, 3.4161, 2.8999, + 3.0557, 3.3308, 3.0555, 2.8508, 2.7385, 2.6640, 3.5263, 3.0277, 3.2990, 3.7721, 3.5017, 3.2751, 3.1368, 3.0435, + 3.7873, 3.2858, 3.2140, 3.1727, 3.2178, 3.4414, 2.5490, 2.7623, 3.0991, 3.3252, 3.1836, 3.2428, 3.0259, 3.1225, + 2.9032, 2.7621, 3.2490, 3.5110, 3.4429, 3.3845, 3.3574, 3.6045, 3.3658, 3.2013, 3.6110, 3.8241, 3.7090, 3.6496, + 3.6333, 3.0896, 3.5462, 2.4926, 2.7136, 3.0693, 3.2699, 3.1272, 3.1893, 2.9658, 3.0972, 2.8778, 2.7358, 3.2206, + 3.4566, 3.3896, 3.3257, 3.2946, 3.5693, 3.3312, 3.1670, 3.5805, 3.7711, 3.6536, 3.5927, 3.5775, 3.0411, 3.4885, + 3.4421, 2.4667, 2.6709, 3.0575, 3.2357, 3.0908, 3.1537, 2.9235, 3.0669, 2.8476, 2.7054, 3.2064, 3.4519, 3.3593, + 3.2921, 3.2577, 3.2161, 3.2982, 3.1339, 3.5606, 3.7582, 3.6432, 3.5833, 3.5691, 3.0161, 3.4812, 3.4339, 3.4327, + 2.4515, 2.6338, 3.0511, 3.2229, 3.0630, 3.1265, 2.8909, 3.0253, 2.8184, 2.6764, 3.1968, 3.4114, 3.3492, 3.2691, + 3.2320, 3.1786, 3.2680, 3.1036, 3.5453, 3.7259, 3.6090, 3.5473, 3.5327, 3.0018, 3.4413, 3.3907, 3.3593, 3.3462, + 2.4413, 2.6006, 3.0540, 3.1987, 3.0490, 3.1058, 2.8643, 2.9948, 2.7908, 2.6491, 3.1950, 3.3922, 3.3316, 3.2585, + 3.2136, 3.1516, 3.2364, 3.0752, 3.5368, 3.7117, 3.5941, 3.5313, 3.5164, 2.9962, 3.4225, 3.3699, 3.3370, 3.3234, + 3.3008, 2.4318, 2.5729, 3.0416, 3.1639, 3.0196, 3.0843, 2.8413, 2.7436, 2.7608, 2.6271, 3.1811, 3.3591, 3.3045, + 3.2349, 3.1942, 3.1291, 3.2111, 3.0534, 3.5189, 3.6809, 3.5635, 3.5001, 3.4854, 2.9857, 3.3897, 3.3363, 3.3027, + 3.2890, 3.2655, 3.2309, 2.8502, 2.6934, 3.2467, 3.1921, 3.5663, 3.2541, 3.0571, 2.9048, 2.8657, 2.7438, 3.3547, + 3.3510, 3.9837, 3.6871, 3.4862, 3.3389, 3.2413, 3.1708, 3.6096, 3.6280, 3.6860, 3.5568, 3.4836, 3.2868, 3.3994, + 3.3476, 3.3170, 3.2950, 3.2874, 3.2606, 3.9579, 2.9226, 2.6838, 3.7867, 3.1732, 3.3872, 3.3643, 3.1267, 2.9541, + 2.8505, 2.7781, 3.8475, 3.3336, 3.7359, 3.8266, 3.5733, 3.3959, 3.2775, 3.1915, 3.9878, 3.8816, 3.5810, 3.5364, + 3.5060, 3.8097, 3.3925, 3.3348, 3.3019, 3.2796, 3.2662, 3.2464, 3.7136, 3.8619, 2.9140, 2.6271, 3.4771, 3.1774, + 3.2560, 3.1970, 3.1207, 2.9406, 2.8322, 2.7571, 3.5455, 3.3514, 3.5837, 3.6177, 3.5816, 3.3902, 3.2604, 3.1652, + 3.7037, 3.6283, 3.5858, 3.5330, 3.4884, 3.5789, 3.4094, 3.3473, 3.3118, 3.2876, 3.2707, 3.2521, 3.5570, 3.6496, + 3.6625, 2.7300, 2.5870, 3.2471, 3.1487, 3.1667, 3.0914, 3.0107, 2.9812, 2.8300, 2.7284, 3.3259, 3.3182, 3.4707, + 3.4748, 3.4279, 3.4182, 3.2547, 3.1353, 3.5116, 3.9432, 3.8828, 3.8303, 3.7880, 3.3760, 3.7218, 3.3408, 3.3059, + 3.2698, 3.2446, 3.2229, 3.4422, 3.5023, 3.5009, 3.5268, 2.6026, 2.5355, 3.1129, 3.2863, 3.1029, 3.0108, 2.9227, + 2.8694, 2.8109, 2.6929, 3.1958, 3.4670, 3.4018, 3.3805, 3.3218, 3.2815, 3.2346, 3.0994, 3.3937, 3.7266, 3.6697, + 3.6164, 3.5730, 3.2522, 3.5051, 3.4686, 3.4355, 3.4084, 3.3748, 3.3496, 3.3692, 3.4052, 3.3910, 3.3849, 3.3662, + 2.5087, 2.4814, 3.0239, 3.1312, 3.0535, 2.9457, 2.8496, 2.7780, 2.7828, 2.6532, 3.1063, 3.3143, 3.3549, 3.3120, + 3.2421, 3.1787, 3.1176, 3.0613, 3.3082, 3.5755, 3.5222, 3.4678, 3.4231, 3.1684, 3.3528, 3.3162, 3.2827, 3.2527, + 3.2308, 3.2029, 3.3173, 3.3343, 3.3092, 3.2795, 3.2452, 3.2096, 3.2893, 2.8991, 4.0388, 3.6100, 3.9388, 3.4475, + 3.1590, 2.9812, 2.8586, 2.7683, 4.1428, 3.7911, 3.8225, 4.0372, 3.7059, 3.4935, 3.3529, 3.2492, 4.4352, 4.0826, + 3.9733, 3.9254, 3.8646, 3.9315, 3.7837, 3.7465, 3.7211, 3.7012, 3.6893, 3.6676, 3.7736, 4.0660, 3.7926, 3.6158, + 3.5017, 3.4166, 4.6176, 2.8786, 3.1658, 3.5823, 3.7689, 3.5762, 3.5789, 3.3552, 3.4004, 3.1722, 3.0212, 3.7241, + 3.9604, 3.8500, 3.9844, 3.7035, 3.9161, 3.6751, 3.5075, 4.1151, 4.2877, 4.1579, 4.1247, 4.0617, 3.4874, 3.9848, + 3.9280, 3.9079, 3.8751, 3.8604, 3.8277, 3.8002, 3.9981, 3.7544, 4.0371, 3.8225, 3.6718, 4.3092, 4.4764, 2.8997, + 3.0953, 3.4524, 3.6107, 3.6062, 3.5783, 3.3463, 3.3855, 3.1746, 3.0381, 3.6019, 3.7938, 3.8697, 3.9781, 3.6877, + 3.8736, 3.6451, 3.4890, 3.9858, 4.1179, 4.0430, 3.9563, 3.9182, 3.4002, 3.8310, 3.7716, 3.7543, 3.7203, 3.7053, + 3.6742, 3.8318, 3.7631, 3.7392, 3.9892, 3.7832, 3.6406, 4.1701, 4.3016, 4.2196, 2.8535, 3.0167, 3.3978, 3.5363, + 3.5393, 3.5301, 3.2960, 3.3352, 3.1287, 2.9967, 3.6659, 3.7239, 3.8070, 3.7165, 3.6368, 3.8162, 3.5885, 3.4336, + 3.9829, 4.0529, 3.9584, 3.9025, 3.8607, 3.3673, 3.7658, 3.7035, 3.6866, 3.6504, 3.6339, 3.6024, 3.7708, 3.7283, + 3.6896, 3.9315, 3.7250, 3.5819, 4.1457, 4.2280, 4.1130, 4.0597, 3.0905, 2.7998, 3.6448, 3.0739, 3.2996, 3.5262, + 3.2559, 3.0518, 2.9394, 2.8658, 3.7514, 3.2295, 3.5643, 3.7808, 3.6931, 3.4723, 3.3357, 3.2429, 4.0280, 3.5589, + 3.4636, 3.4994, 3.4309, 3.6177, 3.2946, 3.2376, 3.2050, 3.1847, 3.1715, 3.1599, 3.5555, 3.8111, 3.7693, 3.5718, + 3.4498, 3.3662, 4.1608, 3.7417, 3.6536, 3.6154, 3.8596, 3.0301, 2.7312, 3.5821, 3.0473, 3.2137, 3.4679, 3.1975, + 2.9969, 2.8847, 2.8110, 3.6931, 3.2076, 3.4943, 3.5956, 3.6379, 3.4190, 3.2808, 3.1860, 3.9850, 3.5105, 3.4330, + 3.3797, 3.4155, 3.6033, 3.2737, 3.2145, 3.1807, 3.1596, 3.1461, 3.1337, 3.4812, 3.6251, 3.7152, 3.5201, 3.3966, + 3.3107, 4.1128, 3.6899, 3.6082, 3.5604, 3.7834, 3.7543, 2.9189, 2.6777, 3.4925, 2.9648, 3.1216, 3.2940, 3.0975, + 2.9757, 2.8493, 2.7638, 3.6085, 3.1214, 3.4006, 3.4793, 3.5147, 3.3806, 3.2356, 3.1335, 3.9144, 3.4183, 3.3369, + 3.2803, 3.2679, 3.4871, 3.1714, 3.1521, 3.1101, 3.0843, 3.0670, 3.0539, 3.3890, 3.5086, 3.5895, 3.4783, 3.3484, + 3.2559, 4.0422, 3.5967, 3.5113, 3.4576, 3.6594, 3.6313, 3.5690, 2.8578, 2.6334, 3.4673, 2.9245, 3.0732, 3.2435, + 3.0338, 2.9462, 2.8143, 2.7240, 3.5832, 3.0789, 3.3617, 3.4246, 3.4505, 3.3443, 3.1964, 3.0913, 3.8921, 3.3713, + 3.2873, 3.2281, 3.2165, 3.4386, 3.1164, 3.1220, 3.0761, 3.0480, 3.0295, 3.0155, 3.3495, 3.4543, 3.5260, 3.4413, + 3.3085, 3.2134, 4.0170, 3.5464, 3.4587, 3.4006, 3.6027, 3.5730, 3.4945, 3.4623, 2.8240, 2.5960, 3.4635, 2.9032, + 3.0431, 3.2115, 2.9892, 2.9148, 2.7801, 2.6873, 3.5776, 3.0568, 3.3433, 3.3949, 3.4132, 3.3116, 3.1616, 3.0548, + 3.8859, 3.3719, 3.2917, 3.2345, 3.2274, 3.4171, 3.1293, 3.0567, 3.0565, 3.0274, 3.0087, 2.9939, 3.3293, 3.4249, + 3.4902, 3.4091, 3.2744, 3.1776, 4.0078, 3.5374, 3.4537, 3.3956, 3.5747, 3.5430, 3.4522, 3.4160, 3.3975, 2.8004, + 2.5621, 3.4617, 2.9154, 3.0203, 3.1875, 2.9548, 2.8038, 2.7472, 2.6530, 3.5736, 3.0584, 3.3304, 3.3748, 3.3871, + 3.2028, 3.1296, 3.0214, 3.8796, 3.3337, 3.2492, 3.1883, 3.1802, 3.4050, 3.0756, 3.0478, 3.0322, 3.0323, 3.0163, + 3.0019, 3.3145, 3.4050, 3.4656, 3.3021, 3.2433, 3.1453, 3.9991, 3.5017, 3.4141, 3.3520, 3.5583, 3.5251, 3.4243, + 3.3851, 3.3662, 3.3525, 2.7846, 2.5324, 3.4652, 2.8759, 3.0051, 3.1692, 2.9273, 2.7615, 2.7164, 2.6212, 3.5744, + 3.0275, 3.3249, 3.3627, 3.3686, 3.1669, 3.0584, 2.9915, 3.8773, 3.3099, 3.2231, 3.1600, 3.1520, 3.4023, 3.0426, + 3.0099, 2.9920, 2.9809, 2.9800, 2.9646, 3.3068, 3.3930, 3.4486, 3.2682, 3.1729, 3.1168, 3.9952, 3.4796, 3.3901, + 3.3255, 3.5530, 3.5183, 3.4097, 3.3683, 3.3492, 3.3360, 3.3308, 2.5424, 2.6601, 3.2555, 3.2807, 3.1384, 3.1737, + 2.9397, 2.8429, 2.8492, 2.7225, 3.3875, 3.4910, 3.4520, 3.3608, 3.3036, 3.2345, 3.2999, 3.1487, 3.7409, 3.8392, + 3.7148, 3.6439, 3.6182, 3.1753, 3.5210, 3.4639, 3.4265, 3.4075, 3.3828, 3.3474, 3.4071, 3.3754, 3.3646, 3.3308, + 3.4393, 3.2993, 3.8768, 3.9891, 3.8310, 3.7483, 3.3417, 3.3019, 3.2250, 3.1832, 3.1578, 3.1564, 3.1224, 3.4620, + 2.9743, 2.8058, 3.4830, 3.3474, 3.6863, 3.3617, 3.1608, 3.0069, 2.9640, 2.8427, 3.5885, 3.5219, 4.1314, 3.8120, + 3.6015, 3.4502, 3.3498, 3.2777, 3.8635, 3.8232, 3.8486, 3.7215, 3.6487, 3.4724, 3.5627, 3.5087, 3.4757, 3.4517, + 3.4423, 3.4139, 4.1028, 3.8388, 3.6745, 3.5562, 3.4806, 3.4272, 4.0182, 3.9991, 4.0007, 3.9282, 3.7238, 3.6498, + 3.5605, 3.5211, 3.5009, 3.4859, 3.4785, 3.5621, 4.2623, 3.0775, 2.8275, 4.0181, 3.3385, 3.5379, 3.5036, 3.2589, + 3.0804, 3.0094, 2.9003, 4.0869, 3.5088, 3.9105, 3.9833, 3.7176, 3.5323, 3.4102, 3.3227, 4.2702, 4.0888, 3.7560, + 3.7687, 3.6681, 3.6405, 3.5569, 3.4990, 3.4659, 3.4433, 3.4330, 3.4092, 3.8867, 4.0190, 3.7961, 3.6412, 3.5405, + 3.4681, 4.3538, 4.2136, 3.9381, 3.8912, 3.9681, 3.7909, 3.6774, 3.6262, 3.5999, 3.5823, 3.5727, 3.5419, 4.0245, + 4.1874, 3.0893, 2.7917, 3.7262, 3.3518, 3.4241, 3.5433, 3.2773, 3.0890, 2.9775, 2.9010, 3.8048, 3.5362, 3.7746, + 3.7911, 3.7511, 3.5495, 3.4149, 3.3177, 4.0129, 3.8370, 3.7739, 3.7125, 3.7152, 3.7701, 3.5813, 3.5187, 3.4835, + 3.4595, 3.4439, 3.4242, 3.7476, 3.8239, 3.8346, 3.6627, 3.5479, 3.4639, 4.1026, 3.9733, 3.9292, 3.8667, 3.9513, + 3.8959, 3.7698, 3.7089, 3.6765, 3.6548, 3.6409, 3.5398, 3.8759, 3.9804, 4.0150, 2.9091, 2.7638, 3.5066, 3.3377, + 3.3481, 3.2633, 3.1810, 3.1428, 2.9872, 2.8837, 3.5929, 3.5183, 3.6729, 3.6596, 3.6082, 3.5927, 3.4224, 3.2997, + 3.8190, 4.1865, 4.1114, 4.0540, 3.6325, 3.5697, 3.5561, 3.5259, 3.4901, 3.4552, 3.4315, 3.4091, 3.6438, 3.6879, + 3.6832, 3.7043, 3.5557, 3.4466, 3.9203, 4.2919, 4.2196, 4.1542, 3.7573, 3.7039, 3.6546, 3.6151, 3.5293, 3.4849, + 3.4552, 3.5192, 3.7673, 3.8359, 3.8525, 3.8901, 2.7806, 2.7209, 3.3812, 3.4958, 3.2913, 3.1888, 3.0990, 3.0394, + 2.9789, 2.8582, 3.4716, 3.6883, 3.6105, 3.5704, 3.5059, 3.4619, 3.4138, 3.2742, 3.7080, 3.9773, 3.9010, 3.8409, + 3.7944, 3.4465, 3.7235, 3.6808, 3.6453, 3.6168, 3.5844, 3.5576, 3.5772, 3.5959, 3.5768, 3.5678, 3.5486, 3.4228, + 3.8107, 4.0866, 4.0169, 3.9476, 3.6358, 3.5800, 3.5260, 3.4838, 3.4501, 3.4204, 3.3553, 3.6487, 3.6973, 3.7398, + 3.7405, 3.7459, 3.7380, 2.6848, 2.6740, 3.2925, 3.3386, 3.2473, 3.1284, 3.0301, 2.9531, 2.9602, 2.8272, 3.3830, + 3.5358, 3.5672, 3.5049, 3.4284, 3.3621, 3.3001, 3.2451, 3.6209, 3.8299, 3.7543, 3.6920, 3.6436, 3.3598, 3.5701, + 3.5266, 3.4904, 3.4590, 3.4364, 3.4077, 3.5287, 3.5280, 3.4969, 3.4650, 3.4304, 3.3963, 3.7229, 3.9402, 3.8753, + 3.8035, 3.5499, 3.4913, 3.4319, 3.3873, 3.3520, 3.3209, 3.2948, 3.5052, 3.6465, 3.6696, 3.6577, 3.6388, 3.6142, + 3.5889, 3.3968, 3.0122, 4.2241, 3.7887, 4.0049, 3.5384, 3.2698, 3.1083, 2.9917, 2.9057, 4.3340, 3.9900, 4.6588, + 4.1278, 3.8125, 3.6189, 3.4851, 3.3859, 4.6531, 4.3134, 4.2258, 4.1309, 4.0692, 4.0944, 3.9850, 3.9416, 3.9112, + 3.8873, 3.8736, 3.8473, 4.6027, 4.1538, 3.8994, 3.7419, 3.6356, 3.5548, 4.8353, 4.5413, 4.3891, 4.3416, 4.3243, + 4.2753, 4.2053, 4.1790, 4.1685, 4.1585, 4.1536, 4.0579, 4.1980, 4.4564, 4.2192, 4.0528, 3.9489, 3.8642, 5.0567, + 3.0630, 3.3271, 4.0432, 4.0046, 4.1555, 3.7426, 3.5130, 3.5174, 3.2884, 3.1378, 4.1894, 4.2321, 4.1725, 4.1833, + 3.8929, 4.0544, 3.8118, 3.6414, 4.6373, 4.6268, 4.4750, 4.4134, 4.3458, 3.8582, 4.2583, 4.1898, 4.1562, 4.1191, + 4.1069, 4.0639, 4.1257, 4.1974, 3.9532, 4.1794, 3.9660, 3.8130, 4.8160, 4.8272, 4.6294, 4.5840, 4.0770, 4.0088, + 3.9103, 3.8536, 3.8324, 3.7995, 3.7826, 4.2294, 4.3380, 4.4352, 4.1933, 4.4580, 4.2554, 4.1072, 5.0454, 5.1814, + 3.0632, 3.2662, 3.6432, 3.8088, 3.7910, 3.7381, 3.5093, 3.5155, 3.3047, 3.1681, 3.7871, 3.9924, 4.0637, 4.1382, + 3.8591, 4.0164, 3.7878, 3.6316, 4.1741, 4.3166, 4.2395, 4.1831, 4.1107, 3.5857, 4.0270, 3.9676, 3.9463, 3.9150, + 3.9021, 3.8708, 4.0240, 4.1551, 3.9108, 4.1337, 3.9289, 3.7873, 4.3666, 4.5080, 4.4232, 4.3155, 3.8461, 3.8007, + 3.6991, 3.6447, 3.6308, 3.5959, 3.5749, 4.0359, 4.3124, 4.3539, 4.1122, 4.3772, 4.1785, 4.0386, 4.7004, 4.8604, + 4.6261, 2.9455, 3.2470, 3.6108, 3.8522, 3.6625, 3.6598, 3.4411, 3.4660, 3.2415, 3.0944, 3.7514, 4.0397, 3.9231, + 4.0561, 3.7860, 3.9845, 3.7454, 3.5802, 4.1366, 4.3581, 4.2351, 4.2011, 4.1402, 3.5381, 4.0653, 4.0093, 3.9883, + 3.9570, 3.9429, 3.9112, 3.8728, 4.0682, 3.8351, 4.1054, 3.8928, 3.7445, 4.3415, 4.5497, 4.3833, 4.3122, 3.8051, + 3.7583, 3.6622, 3.6108, 3.5971, 3.5628, 3.5408, 4.0780, 4.0727, 4.2836, 4.0553, 4.3647, 4.1622, 4.0178, 4.5802, + 4.9125, 4.5861, 4.6201, 2.9244, 3.2241, 3.5848, 3.8293, 3.6395, 3.6400, 3.4204, 3.4499, 3.2253, 3.0779, 3.7257, + 4.0170, 3.9003, 4.0372, 3.7653, 3.9672, 3.7283, 3.5630, 4.1092, 4.3347, 4.2117, 4.1793, 4.1179, 3.5139, 4.0426, + 3.9867, 3.9661, 3.9345, 3.9200, 3.8883, 3.8498, 4.0496, 3.8145, 4.0881, 3.8756, 3.7271, 4.3128, 4.5242, 4.3578, + 4.2870, 3.7796, 3.7318, 3.6364, 3.5854, 3.5726, 3.5378, 3.5155, 4.0527, 4.0478, 4.2630, 4.0322, 4.3449, 4.1421, + 3.9975, 4.5499, 4.8825, 4.5601, 4.5950, 4.5702, 2.9046, 3.2044, 3.5621, 3.8078, 3.6185, 3.6220, 3.4019, 3.4359, + 3.2110, 3.0635, 3.7037, 3.9958, 3.8792, 4.0194, 3.7460, 3.9517, 3.7128, 3.5474, 4.0872, 4.3138, 4.1906, 4.1593, + 4.0973, 3.4919, 4.0216, 3.9657, 3.9454, 3.9134, 3.8986, 3.8669, 3.8289, 4.0323, 3.7954, 4.0725, 3.8598, 3.7113, + 4.2896, 4.5021, 4.3325, 4.2645, 3.7571, 3.7083, 3.6136, 3.5628, 3.5507, 3.5155, 3.4929, 4.0297, 4.0234, 4.2442, + 4.0112, 4.3274, 4.1240, 3.9793, 4.5257, 4.8568, 4.5353, 4.5733, 4.5485, 4.5271, 2.8878, 3.1890, 3.5412, 3.7908, + 3.5974, 3.6078, 3.3871, 3.4243, 3.1992, 3.0513, 3.6831, 3.9784, 3.8579, 4.0049, 3.7304, 3.9392, 3.7002, 3.5347, + 4.0657, 4.2955, 4.1705, 4.1424, 4.0800, 3.4717, 4.0043, 3.9485, 3.9286, 3.8965, 3.8815, 3.8500, 3.8073, 4.0180, + 3.7796, 4.0598, 3.8470, 3.6983, 4.2678, 4.4830, 4.3132, 4.2444, 3.7370, 3.6876, 3.5935, 3.5428, 3.5314, 3.4958, + 3.4730, 4.0117, 4.0043, 4.2287, 3.9939, 4.3134, 4.1096, 3.9646, 4.5032, 4.8356, 4.5156, 4.5544, 4.5297, 4.5083, + 4.4896, 2.8709, 3.1737, 3.5199, 3.7734, 3.5802, 3.5934, 3.3724, 3.4128, 3.1877, 3.0396, 3.6624, 3.9608, 3.8397, + 3.9893, 3.7145, 3.9266, 3.6877, 3.5222, 4.0448, 4.2771, 4.1523, 4.1247, 4.0626, 3.4530, 3.9866, 3.9310, 3.9115, + 3.8792, 3.8641, 3.8326, 3.7892, 4.0025, 3.7636, 4.0471, 3.8343, 3.6854, 4.2464, 4.4635, 4.2939, 4.2252, 3.7169, + 3.6675, 3.5739, 3.5235, 3.5126, 3.4768, 3.4537, 3.9932, 3.9854, 4.2123, 3.9765, 4.2992, 4.0951, 3.9500, 4.4811, + 4.8135, 4.4959, 4.5351, 4.5105, 4.4891, 4.4705, 4.4515, 2.8568, 3.1608, 3.5050, 3.7598, 3.5665, 3.5803, 3.3601, + 3.4031, 3.1779, 3.0296, 3.6479, 3.9471, 3.8262, 3.9773, 3.7015, 3.9162, 3.6771, 3.5115, 4.0306, 4.2634, 4.1385, + 4.1116, 4.0489, 3.4366, 3.9732, 3.9176, 3.8983, 3.8659, 3.8507, 3.8191, 3.7757, 3.9907, 3.7506, 4.0365, 3.8235, + 3.6745, 4.2314, 4.4490, 4.2792, 4.2105, 3.7003, 3.6510, 3.5578, 3.5075, 3.4971, 3.4609, 3.4377, 3.9788, 3.9712, + 4.1997, 3.9624, 4.2877, 4.0831, 3.9378, 4.4655, 4.7974, 4.4813, 4.5209, 4.4964, 4.4750, 4.4565, 4.4375, 4.4234, + 2.6798, 3.0151, 3.2586, 3.5292, 3.5391, 3.4902, 3.2887, 3.3322, 3.1228, 2.9888, 3.4012, 3.7145, 3.7830, 3.6665, + 3.5898, 3.8077, 3.5810, 3.4265, 3.7726, 4.0307, 3.9763, 3.8890, 3.8489, 3.2706, 3.7595, 3.6984, 3.6772, 3.6428, + 3.6243, 3.5951, 3.7497, 3.6775, 3.6364, 3.9203, 3.7157, 3.5746, 3.9494, 4.2076, 4.1563, 4.0508, 3.5329, 3.4780, + 3.3731, 3.3126, 3.2846, 3.2426, 3.2135, 3.7491, 3.9006, 3.8332, 3.8029, 4.1436, 3.9407, 3.7998, 4.1663, 4.5309, + 4.3481, 4.2911, 4.2671, 4.2415, 4.2230, 4.2047, 4.1908, 4.1243, 2.5189, 2.9703, 3.3063, 3.6235, 3.4517, 3.3989, + 3.2107, 3.2434, 3.0094, 2.8580, 3.4253, 3.8157, 3.7258, 3.6132, 3.5297, 3.7566, 3.5095, 3.3368, 3.7890, 4.1298, + 4.0190, 3.9573, 3.9237, 3.2677, 3.8480, 3.8157, 3.7656, 3.7317, 3.7126, 3.6814, 3.6793, 3.6218, 3.5788, 3.8763, + 3.6572, 3.5022, 3.9737, 4.3255, 4.1828, 4.1158, 3.5078, 3.4595, 3.3600, 3.3088, 3.2575, 3.2164, 3.1856, 3.8522, + 3.8665, 3.8075, 3.7772, 4.1391, 3.9296, 3.7772, 4.2134, 4.7308, 4.3787, 4.3894, 4.3649, 4.3441, 4.3257, 4.3073, + 4.2941, 4.1252, 4.2427, 3.0481, 2.9584, 3.6919, 3.5990, 3.8881, 3.4209, 3.1606, 3.1938, 2.9975, 2.8646, 3.8138, + 3.7935, 3.7081, 3.9155, 3.5910, 3.4808, 3.4886, 3.3397, 4.1336, 4.1122, 3.9888, 3.9543, 3.8917, 3.5894, 3.8131, + 3.7635, 3.7419, 3.7071, 3.6880, 3.6574, 3.6546, 3.9375, 3.6579, 3.5870, 3.6361, 3.5039, 4.3149, 4.2978, 4.1321, + 4.1298, 3.8164, 3.7680, 3.7154, 3.6858, 3.6709, 3.6666, 3.6517, 3.8174, 3.8608, 4.1805, 3.9102, 3.8394, 3.8968, + 3.7673, 4.5274, 4.6682, 4.3344, 4.3639, 4.3384, 4.3162, 4.2972, 4.2779, 4.2636, 4.0253, 4.1168, 4.1541, 2.8136, + 3.0951, 3.4635, 3.6875, 3.4987, 3.5183, 3.2937, 3.3580, 3.1325, 2.9832, 3.6078, 3.8757, 3.7616, 3.9222, 3.6370, + 3.8647, 3.6256, 3.4595, 3.9874, 4.1938, 4.0679, 4.0430, 3.9781, 3.3886, 3.9008, 3.8463, 3.8288, 3.7950, 3.7790, + 3.7472, 3.7117, 3.9371, 3.6873, 3.9846, 3.7709, 3.6210, 4.1812, 4.3750, 4.2044, 4.1340, 3.6459, 3.5929, 3.5036, + 3.4577, 3.4528, 3.4146, 3.3904, 3.9014, 3.9031, 4.1443, 3.8961, 4.2295, 4.0227, 3.8763, 4.4086, 4.7097, 4.4064, + 4.4488, 4.4243, 4.4029, 4.3842, 4.3655, 4.3514, 4.1162, 4.2205, 4.1953, 4.2794, 2.8032, 3.0805, 3.4519, 3.6700, + 3.4827, 3.5050, 3.2799, 3.3482, 3.1233, 2.9747, 3.5971, 3.8586, 3.7461, 3.9100, 3.6228, 3.8535, 3.6147, 3.4490, + 3.9764, 4.1773, 4.0511, 4.0270, 3.9614, 3.3754, 3.8836, 3.8291, 3.8121, 3.7780, 3.7619, 3.7300, 3.6965, 3.9253, + 3.6734, 3.9733, 3.7597, 3.6099, 4.1683, 4.3572, 4.1862, 4.1153, 3.6312, 3.5772, 3.4881, 3.4429, 3.4395, 3.4009, + 3.3766, 3.8827, 3.8868, 4.1316, 3.8807, 4.2164, 4.0092, 3.8627, 4.3936, 4.6871, 4.3882, 4.4316, 4.4073, 4.3858, + 4.3672, 4.3485, 4.3344, 4.0984, 4.2036, 4.1791, 4.2622, 4.2450, 2.7967, 3.0689, 3.4445, 3.6581, 3.4717, 3.4951, + 3.2694, 3.3397, 3.1147, 2.9661, 3.5898, 3.8468, 3.7358, 3.9014, 3.6129, 3.8443, 3.6054, 3.4396, 3.9683, 4.1656, + 4.0394, 4.0158, 3.9498, 3.3677, 3.8718, 3.8164, 3.8005, 3.7662, 3.7500, 3.7181, 3.6863, 3.9170, 3.6637, 3.9641, + 3.7503, 3.6004, 4.1590, 4.3448, 4.1739, 4.1029, 3.6224, 3.5677, 3.4785, 3.4314, 3.4313, 3.3923, 3.3680, 3.8698, + 3.8758, 4.1229, 3.8704, 4.2063, 3.9987, 3.8519, 4.3832, 4.6728, 4.3759, 4.4195, 4.3952, 4.3737, 4.3551, 4.3364, + 4.3223, 4.0861, 4.1911, 4.1676, 4.2501, 4.2329, 4.2208, 2.7897, 3.0636, 3.4344, 3.6480, 3.4626, 3.4892, 3.2626, + 3.3344, 3.1088, 2.9597, 3.5804, 3.8359, 3.7251, 3.8940, 3.6047, 3.8375, 3.5990, 3.4329, 3.9597, 4.1542, 4.0278, + 4.0048, 3.9390, 3.3571, 3.8608, 3.8056, 3.7899, 3.7560, 3.7400, 3.7081, 3.6758, 3.9095, 3.6552, 3.9572, 3.7436, + 3.5933, 4.1508, 4.3337, 4.1624, 4.0916, 3.6126, 3.5582, 3.4684, 3.4212, 3.4207, 3.3829, 3.3586, 3.8604, 3.8658, + 4.1156, 3.8620, 4.1994, 3.9917, 3.8446, 4.3750, 4.6617, 4.3644, 4.4083, 4.3840, 4.3625, 4.3439, 4.3253, 4.3112, + 4.0745, 4.1807, 4.1578, 4.2390, 4.2218, 4.2097, 4.1986, 2.8395, 3.0081, 3.3171, 3.4878, 3.5360, 3.5145, 3.2809, + 3.3307, 3.1260, 2.9940, 3.4741, 3.6675, 3.7832, 3.6787, 3.6156, 3.8041, 3.5813, 3.4301, 3.8480, 3.9849, 3.9314, + 3.8405, 3.8029, 3.2962, 3.7104, 3.6515, 3.6378, 3.6020, 3.5849, 3.5550, 3.7494, 3.6893, 3.6666, 3.9170, 3.7150, + 3.5760, 4.0268, 4.1596, 4.1107, 3.9995, 3.5574, 3.5103, 3.4163, 3.3655, 3.3677, 3.3243, 3.2975, 3.7071, 3.9047, + 3.8514, 3.8422, 3.8022, 3.9323, 3.7932, 4.2343, 4.4583, 4.3115, 4.2457, 4.2213, 4.1945, 4.1756, 4.1569, 4.1424, + 4.0620, 4.0494, 3.9953, 4.0694, 4.0516, 4.0396, 4.0280, 4.0130, 2.9007, 2.9674, 3.8174, 3.5856, 3.6486, 3.5339, + 3.2832, 3.3154, 3.1144, 2.9866, 3.9618, 3.8430, 3.9980, 3.8134, 3.6652, 3.7985, 3.5756, 3.4207, 4.4061, 4.2817, + 4.1477, 4.0616, 3.9979, 3.6492, 3.8833, 3.8027, 3.7660, 3.7183, 3.6954, 3.6525, 3.9669, 3.8371, 3.7325, 3.9160, + 3.7156, 3.5714, 4.6036, 4.4620, 4.3092, 4.2122, 3.8478, 3.7572, 3.6597, 3.5969, 3.5575, 3.5386, 3.5153, 3.7818, + 4.1335, 4.0153, 3.9177, 3.8603, 3.9365, 3.7906, 4.7936, 4.7410, 4.5461, 4.5662, 4.5340, 4.5059, 4.4832, 4.4604, + 4.4429, 4.2346, 4.4204, 4.3119, 4.3450, 4.3193, 4.3035, 4.2933, 4.1582, 4.2450, 2.8559, 2.9050, 3.8325, 3.5442, + 3.5077, 3.4905, 3.2396, 3.2720, 3.0726, 2.9467, 3.9644, 3.8050, 3.8981, 3.7762, 3.6216, 3.7531, 3.5297, 3.3742, + 4.3814, 4.2818, 4.1026, 4.0294, 3.9640, 3.6208, 3.8464, 3.7648, 3.7281, 3.6790, 3.6542, 3.6117, 3.8650, 3.8010, + 3.6894, 3.8713, 3.6699, 3.5244, 4.5151, 4.4517, 4.2538, 4.1483, 3.8641, 3.7244, 3.6243, 3.5589, 3.5172, 3.4973, + 3.4715, 3.7340, 4.0316, 3.9958, 3.8687, 3.8115, 3.8862, 3.7379, 4.7091, 4.7156, 4.5199, 4.5542, 4.5230, 4.4959, + 4.4750, 4.4529, 4.4361, 4.1774, 4.3774, 4.2963, 4.3406, 4.3159, 4.3006, 4.2910, 4.1008, 4.1568, 4.0980, 2.8110, + 2.8520, 3.7480, 3.5105, 3.4346, 3.3461, 3.1971, 3.2326, 3.0329, 2.9070, 3.8823, 3.7928, 3.8264, 3.7006, 3.5797, + 3.7141, 3.4894, 3.3326, 4.3048, 4.2217, 4.0786, 3.9900, 3.9357, 3.6331, 3.8333, 3.7317, 3.6957, 3.6460, 3.6197, + 3.5779, 3.7909, 3.7257, 3.6476, 3.5729, 3.6304, 3.4834, 4.4368, 4.3921, 4.2207, 4.1133, 3.8067, 3.7421, 3.6140, + 3.5491, 3.5077, 3.4887, 3.4623, 3.6956, 3.9568, 3.8976, 3.8240, 3.7684, 3.8451, 3.6949, 4.6318, 4.6559, 4.4533, + 4.4956, 4.4641, 4.4366, 4.4155, 4.3936, 4.3764, 4.1302, 4.3398, 4.2283, 4.2796, 4.2547, 4.2391, 4.2296, 4.0699, + 4.1083, 4.0319, 3.9855, 2.7676, 2.8078, 3.6725, 3.4804, 3.3775, 3.2411, 3.1581, 3.1983, 2.9973, 2.8705, 3.8070, + 3.7392, 3.7668, 3.6263, 3.5402, 3.6807, 3.4545, 3.2962, 4.2283, 4.1698, 4.0240, 3.9341, 3.8711, 3.5489, 3.7798, + 3.7000, 3.6654, 3.6154, 3.5882, 3.5472, 3.7289, 3.6510, 3.6078, 3.5355, 3.5963, 3.4480, 4.3587, 4.3390, 4.1635, + 4.0536, 3.7193, 3.6529, 3.5512, 3.4837, 3.4400, 3.4191, 3.3891, 3.6622, 3.8934, 3.8235, 3.7823, 3.7292, 3.8106, + 3.6589, 4.5535, 4.6013, 4.3961, 4.4423, 4.4109, 4.3835, 4.3625, 4.3407, 4.3237, 4.0863, 4.2835, 4.1675, 4.2272, + 4.2025, 4.1869, 4.1774, 4.0126, 4.0460, 3.9815, 3.9340, 3.8955, 2.6912, 2.7604, 3.6037, 3.4194, 3.3094, 3.1710, + 3.0862, 3.1789, 2.9738, 2.8427, 3.7378, 3.6742, 3.6928, 3.5512, 3.4614, 3.4087, 3.4201, 3.2607, 4.1527, 4.0977, + 3.9523, 3.8628, 3.8002, 3.4759, 3.7102, 3.6466, 3.6106, 3.5580, 3.5282, 3.4878, 3.6547, 3.5763, 3.5289, 3.5086, + 3.5593, 3.4099, 4.2788, 4.2624, 4.0873, 3.9770, 3.6407, 3.5743, 3.5178, 3.4753, 3.3931, 3.3694, 3.3339, 3.6002, + 3.8164, 3.7478, 3.7028, 3.6952, 3.7669, 3.6137, 4.4698, 4.5488, 4.3168, 4.3646, 4.3338, 4.3067, 4.2860, 4.2645, + 4.2478, 4.0067, 4.2349, 4.0958, 4.1543, 4.1302, 4.1141, 4.1048, 3.9410, 3.9595, 3.8941, 3.8465, 3.8089, 3.7490, + 2.7895, 2.5849, 3.6484, 3.0162, 3.1267, 3.2125, 3.0043, 2.9572, 2.8197, 2.7261, 3.7701, 3.2446, 3.5239, 3.4696, + 3.4261, 3.3508, 3.1968, 3.0848, 4.1496, 3.6598, 3.5111, 3.4199, 3.3809, 3.5382, 3.2572, 3.2100, 3.1917, 3.1519, + 3.1198, 3.1005, 3.5071, 3.5086, 3.5073, 3.4509, 3.3120, 3.2082, 4.2611, 3.8117, 3.6988, 3.5646, 3.6925, 3.6295, + 3.5383, 3.4910, 3.4625, 3.4233, 3.4007, 3.2329, 3.6723, 3.6845, 3.6876, 3.6197, 3.4799, 3.3737, 4.4341, 4.0525, + 3.9011, 3.8945, 3.8635, 3.8368, 3.8153, 3.7936, 3.7758, 3.4944, 3.4873, 3.9040, 3.7110, 3.6922, 3.6799, 3.6724, + 3.5622, 3.6081, 3.5426, 3.4922, 3.4498, 3.3984, 3.4456, 2.7522, 2.5524, 3.5742, 2.9508, 3.0751, 3.0158, 2.9644, + 2.8338, 2.7891, 2.6933, 3.6926, 3.1814, 3.4528, 3.4186, 3.3836, 3.2213, 3.1626, 3.0507, 4.0548, 3.5312, 3.4244, + 3.3409, 3.2810, 3.4782, 3.1905, 3.1494, 3.1221, 3.1128, 3.0853, 3.0384, 3.4366, 3.4562, 3.4638, 3.3211, 3.2762, + 3.1730, 4.1632, 3.6825, 3.5822, 3.4870, 3.6325, 3.5740, 3.4733, 3.4247, 3.3969, 3.3764, 3.3525, 3.1984, 3.5989, + 3.6299, 3.6433, 3.4937, 3.4417, 3.3365, 4.3304, 3.9242, 3.7793, 3.7623, 3.7327, 3.7071, 3.6860, 3.6650, 3.6476, + 3.3849, 3.3534, 3.8216, 3.5870, 3.5695, 3.5584, 3.5508, 3.4856, 3.5523, 3.4934, 3.4464, 3.4055, 3.3551, 3.3888, + 3.3525, 2.7202, 2.5183, 3.4947, 2.8731, 3.0198, 3.1457, 2.9276, 2.7826, 2.7574, 2.6606, 3.6090, 3.0581, 3.3747, + 3.3677, 3.3450, 3.1651, 3.1259, 3.0147, 3.9498, 3.3857, 3.2917, 3.2154, 3.1604, 3.4174, 3.0735, 3.0342, 3.0096, + 3.0136, 2.9855, 2.9680, 3.3604, 3.4037, 3.4243, 3.2633, 3.1810, 3.1351, 4.0557, 3.5368, 3.4526, 3.3699, 3.5707, + 3.5184, 3.4085, 3.3595, 3.3333, 3.3143, 3.3041, 3.1094, 3.5193, 3.5745, 3.6025, 3.4338, 3.3448, 3.2952, 4.2158, + 3.7802, 3.6431, 3.6129, 3.5853, 3.5610, 3.5406, 3.5204, 3.5036, 3.2679, 3.2162, 3.7068, 3.4483, 3.4323, 3.4221, + 3.4138, 3.3652, 3.4576, 3.4053, 3.3618, 3.3224, 3.2711, 3.3326, 3.2950, 3.2564, 2.5315, 2.6104, 3.2734, 3.2299, + 3.1090, 2.9942, 2.9159, 2.8324, 2.8350, 2.7216, 3.3994, 3.4475, 3.4354, 3.3438, 3.2807, 3.2169, 3.2677, 3.1296, + 3.7493, 3.8075, 3.6846, 3.6104, 3.5577, 3.2052, 3.4803, 3.4236, 3.3845, 3.3640, 3.3365, 3.3010, 3.3938, 3.3624, + 3.3440, 3.3132, 3.4035, 3.2754, 3.8701, 3.9523, 3.8018, 3.7149, 3.3673, 3.3199, 3.2483, 3.2069, 3.1793, 3.1558, + 3.1395, 3.4097, 3.5410, 3.5228, 3.5116, 3.4921, 3.4781, 3.4690, 4.0420, 4.1759, 4.0078, 4.0450, 4.0189, 3.9952, + 3.9770, 3.9583, 3.9434, 3.7217, 3.8228, 3.7826, 3.8640, 3.8446, 3.8314, 3.8225, 3.6817, 3.7068, 3.6555, 3.6159, + 3.5831, 3.5257, 3.2133, 3.1689, 3.1196, 3.3599, 2.9852, 2.7881, 3.5284, 3.3493, 3.6958, 3.3642, 3.1568, 3.0055, + 2.9558, 2.8393, 3.6287, 3.5283, 4.1511, 3.8259, 3.6066, 3.4527, 3.3480, 3.2713, 3.9037, 3.8361, 3.8579, 3.7311, + 3.6575, 3.5176, 3.5693, 3.5157, 3.4814, 3.4559, 3.4445, 3.4160, 4.1231, 3.8543, 3.6816, 3.5602, 3.4798, 3.4208, + 4.0542, 4.0139, 4.0165, 3.9412, 3.7698, 3.6915, 3.6043, 3.5639, 3.5416, 3.5247, 3.5153, 3.5654, 4.2862, 4.0437, + 3.8871, 3.7741, 3.6985, 3.6413, 4.2345, 4.3663, 4.3257, 4.0869, 4.0612, 4.0364, 4.0170, 3.9978, 3.9834, 3.9137, + 3.8825, 3.8758, 3.9143, 3.8976, 3.8864, 3.8768, 3.9190, 4.1613, 4.0566, 3.9784, 3.9116, 3.8326, 3.7122, 3.6378, + 3.5576, 3.5457, 4.3127, 3.1160, 2.8482, 4.0739, 3.3599, 3.5698, 3.5366, 3.2854, 3.1039, 2.9953, 2.9192, 4.1432, + 3.5320, 3.9478, 4.0231, 3.7509, 3.5604, 3.4340, 3.3426, 4.3328, 3.8288, 3.7822, 3.7909, 3.6907, 3.6864, 3.5793, + 3.5221, 3.4883, 3.4649, 3.4514, 3.4301, 3.9256, 4.0596, 3.8307, 3.6702, 3.5651, 3.4884, 4.4182, 4.2516, 3.9687, + 3.9186, 3.9485, 3.8370, 3.7255, 3.6744, 3.6476, 3.6295, 3.6193, 3.5659, 4.0663, 4.2309, 4.0183, 3.8680, 3.7672, + 3.6923, 4.5240, 4.4834, 4.1570, 4.3204, 4.2993, 4.2804, 4.2647, 4.2481, 4.2354, 3.8626, 3.8448, 4.2267, 4.1799, + 4.1670, 3.8738, 3.8643, 3.8796, 4.0575, 4.0354, 3.9365, 3.8611, 3.7847, 3.7388, 3.6826, 3.6251, 3.5492, 4.0889, + 4.2764, 3.1416, 2.8325, 3.7735, 3.3787, 3.4632, 3.5923, 3.3214, 3.1285, 3.0147, 2.9366, 3.8527, 3.5602, 3.8131, + 3.8349, 3.7995, 3.5919, 3.4539, 3.3540, 4.0654, 3.8603, 3.7972, 3.7358, 3.7392, 3.8157, 3.6055, 3.5438, 3.5089, + 3.4853, 3.4698, 3.4508, 3.7882, 3.8682, 3.8837, 3.7055, 3.5870, 3.5000, 4.1573, 4.0005, 3.9568, 3.8936, 3.9990, + 3.9433, 3.8172, 3.7566, 3.7246, 3.7033, 3.6900, 3.5697, 3.9183, 4.0262, 4.0659, 3.8969, 3.7809, 3.6949, 4.2765, + 4.2312, 4.1401, 4.0815, 4.0580, 4.0369, 4.0194, 4.0017, 3.9874, 3.8312, 3.8120, 3.9454, 3.9210, 3.9055, 3.8951, + 3.8866, 3.8689, 3.9603, 3.9109, 3.9122, 3.8233, 3.7438, 3.7436, 3.6981, 3.6555, 3.5452, 3.9327, 4.0658, 4.1175, + 2.9664, 2.8209, 3.5547, 3.3796, 3.3985, 3.3164, 3.2364, 3.1956, 3.0370, 2.9313, 3.6425, 3.5565, 3.7209, 3.7108, + 3.6639, 3.6484, 3.4745, 3.3492, 3.8755, 4.2457, 3.7758, 3.7161, 3.6693, 3.6155, 3.5941, 3.5643, 3.5292, 3.4950, + 3.4720, 3.4503, 3.6936, 3.7392, 3.7388, 3.7602, 3.6078, 3.4960, 3.9800, 4.3518, 4.2802, 3.8580, 3.8056, 3.7527, + 3.7019, 3.6615, 3.5768, 3.5330, 3.5038, 3.5639, 3.8192, 3.8883, 3.9092, 3.9478, 3.7995, 3.6896, 4.1165, 4.5232, + 4.4357, 4.4226, 4.4031, 4.3860, 4.3721, 4.3580, 4.3466, 4.2036, 4.2037, 3.8867, 4.2895, 4.2766, 4.2662, 4.2598, + 3.8408, 3.9169, 3.8681, 3.8250, 3.7855, 3.7501, 3.6753, 3.5499, 3.4872, 3.5401, 3.8288, 3.9217, 3.9538, 4.0054, + 2.8388, 2.7890, 3.4329, 3.5593, 3.3488, 3.2486, 3.1615, 3.1000, 3.0394, 2.9165, 3.5267, 3.7479, 3.6650, 3.6263, + 3.5658, 3.5224, 3.4762, 3.3342, 3.7738, 4.0333, 3.9568, 3.8975, 3.8521, 3.4929, 3.7830, 3.7409, 3.7062, 3.6786, + 3.6471, 3.6208, 3.6337, 3.6519, 3.6363, 3.6278, 3.6110, 3.4825, 3.8795, 4.1448, 4.0736, 4.0045, 3.6843, 3.6291, + 3.5741, 3.5312, 3.4974, 3.4472, 3.4034, 3.7131, 3.7557, 3.7966, 3.8005, 3.8068, 3.8015, 3.6747, 4.0222, 4.3207, + 4.2347, 4.2191, 4.1990, 4.1811, 4.1666, 4.1521, 4.1401, 3.9970, 3.9943, 3.9592, 4.0800, 4.0664, 4.0559, 4.0488, + 3.9882, 4.0035, 3.9539, 3.9138, 3.8798, 3.8355, 3.5359, 3.4954, 3.3962, 3.5339, 3.7595, 3.8250, 3.8408, 3.8600, + 3.8644, 2.7412, 2.7489, 3.3374, 3.3950, 3.3076, 3.1910, 3.0961, 3.0175, 3.0280, 2.8929, 3.4328, 3.5883, 3.6227, + 3.5616, 3.4894, 3.4241, 3.3641, 3.3120, 3.6815, 3.8789, 3.8031, 3.7413, 3.6939, 3.4010, 3.6225, 3.5797, 3.5443, + 3.5139, 3.4923, 3.4642, 3.5860, 3.5849, 3.5570, 3.5257, 3.4936, 3.4628, 3.7874, 3.9916, 3.9249, 3.8530, 3.5932, + 3.5355, 3.4757, 3.4306, 3.3953, 3.3646, 3.3390, 3.5637, 3.7053, 3.7266, 3.7177, 3.6996, 3.6775, 3.6558, 3.9331, + 4.1655, 4.0879, 4.0681, 4.0479, 4.0299, 4.0152, 4.0006, 3.9883, 3.8500, 3.8359, 3.8249, 3.9269, 3.9133, 3.9025, + 3.8948, 3.8422, 3.8509, 3.7990, 3.7570, 3.7219, 3.6762, 3.4260, 3.3866, 3.3425, 3.5294, 3.7022, 3.7497, 3.7542, + 3.7494, 3.7370, 3.7216, 3.4155, 3.0522, 4.2541, 3.8218, 4.0438, 3.5875, 3.3286, 3.1682, 3.0566, 2.9746, 4.3627, + 4.0249, 4.6947, 4.1718, 3.8639, 3.6735, 3.5435, 3.4479, 4.6806, 4.3485, 4.2668, 4.1690, 4.1061, 4.1245, 4.0206, + 3.9765, 3.9458, 3.9217, 3.9075, 3.8813, 3.9947, 4.1989, 3.9507, 3.7960, 3.6925, 3.6150, 4.8535, 4.5642, 4.4134, + 4.3688, 4.3396, 4.2879, 4.2166, 4.1888, 4.1768, 4.1660, 4.1608, 4.0745, 4.2289, 4.4863, 4.2513, 4.0897, 3.9876, + 3.9061, 5.0690, 5.0446, 4.6186, 4.6078, 4.5780, 4.5538, 4.5319, 4.5101, 4.4945, 4.1912, 4.2315, 4.5534, 4.4373, + 4.4224, 4.4120, 4.4040, 4.2634, 4.7770, 4.6890, 4.6107, 4.5331, 4.4496, 4.4082, 4.3095, 4.2023, 4.0501, 4.2595, + 4.5497, 4.3056, 4.1506, 4.0574, 3.9725, 5.0796, 3.0548, 3.3206, 3.8132, 3.9720, 3.7675, 3.7351, 3.5167, 3.5274, + 3.3085, 3.1653, 3.9500, 4.1730, 4.0613, 4.1493, 3.8823, 4.0537, 3.8200, 3.6582, 4.3422, 4.5111, 4.3795, 4.3362, + 4.2751, 3.7103, 4.1973, 4.1385, 4.1129, 4.0800, 4.0647, 4.0308, 4.0096, 4.1619, 3.9360, 4.1766, 3.9705, 3.8262, + 4.5348, 4.7025, 4.5268, 4.5076, 3.9562, 3.9065, 3.8119, 3.7605, 3.7447, 3.7119, 3.6916, 4.1950, 4.2110, 4.3843, + 4.1631, 4.4427, 4.2463, 4.1054, 4.7693, 5.0649, 4.7365, 4.7761, 4.7498, 4.7272, 4.7076, 4.6877, 4.6730, 4.4274, + 4.5473, 4.5169, 4.5975, 4.5793, 4.5667, 4.5559, 4.3804, 4.6920, 4.6731, 4.6142, 4.5600, 4.4801, 4.0149, 3.8856, + 3.7407, 4.1545, 4.2253, 4.4229, 4.1923, 4.5022, 4.3059, 4.1591, 4.7883, 4.9294, 3.3850, 3.4208, 3.7004, 3.8800, + 3.9886, 3.9040, 3.6719, 3.6547, 3.4625, 3.3370, 3.8394, 4.0335, 4.2373, 4.3023, 4.0306, 4.1408, 3.9297, 3.7857, + 4.1907, 4.3230, 4.2664, 4.2173, 4.1482, 3.6823, 4.0711, 4.0180, 4.0017, 3.9747, 3.9634, 3.9383, 4.1993, 4.3205, + 4.0821, 4.2547, 4.0659, 3.9359, 4.3952, 4.5176, 4.3888, 4.3607, 3.9583, 3.9280, 3.8390, 3.7971, 3.7955, 3.7674, + 3.7521, 4.1062, 4.3633, 4.2991, 4.2767, 4.4857, 4.3039, 4.1762, 4.6197, 4.8654, 4.6633, 4.5878, 4.5640, 4.5422, + 4.5231, 4.5042, 4.4901, 4.3282, 4.3978, 4.3483, 4.4202, 4.4039, 4.3926, 4.3807, 4.2649, 4.6135, 4.5605, 4.5232, + 4.4676, 4.3948, 4.0989, 3.9864, 3.8596, 4.0942, 4.2720, 4.3270, 4.3022, 4.5410, 4.3576, 4.2235, 4.6545, 4.7447, + 4.7043, 3.0942, 3.2075, 3.5152, 3.6659, 3.8289, 3.7459, 3.5156, 3.5197, 3.3290, 3.2069, 3.6702, 3.8448, 4.0340, + 3.9509, 3.8585, 3.9894, 3.7787, 3.6365, 4.1425, 4.1618, 4.0940, 4.0466, 3.9941, 3.5426, 3.8952, 3.8327, 3.8126, + 3.7796, 3.7635, 3.7356, 4.0047, 3.9655, 3.9116, 4.1010, 3.9102, 3.7800, 4.2964, 4.3330, 4.2622, 4.2254, 3.8195, + 3.7560, 3.6513, 3.5941, 3.5810, 3.5420, 3.5178, 3.8861, 4.1459, 4.1147, 4.0772, 4.3120, 4.1207, 3.9900, 4.4733, + 4.6157, 4.4580, 4.4194, 4.3954, 4.3739, 4.3531, 4.3343, 4.3196, 4.2140, 4.2339, 4.1738, 4.2458, 4.2278, 4.2158, + 4.2039, 4.1658, 4.3595, 4.2857, 4.2444, 4.1855, 4.1122, 3.7839, 3.6879, 3.5816, 3.8633, 4.1585, 4.1402, 4.1036, + 4.3694, 4.1735, 4.0368, 4.5095, 4.5538, 4.5240, 4.4252, 3.0187, 3.1918, 3.5127, 3.6875, 3.7404, 3.6943, 3.4702, + 3.4888, 3.2914, 3.1643, 3.6669, 3.8724, 3.9940, 4.0816, 3.8054, 3.9661, 3.7492, 3.6024, 4.0428, 4.1951, 4.1466, + 4.0515, 4.0075, 3.5020, 3.9158, 3.8546, 3.8342, 3.8008, 3.7845, 3.7549, 3.9602, 3.8872, 3.8564, 4.0793, 3.8835, + 3.7495, 4.2213, 4.3704, 4.3300, 4.2121, 3.7643, 3.7130, 3.6144, 3.5599, 3.5474, 3.5093, 3.4853, 3.9075, 4.1115, + 4.0473, 4.0318, 4.2999, 4.1050, 3.9710, 4.4320, 4.6706, 4.5273, 4.4581, 4.4332, 4.4064, 4.3873, 4.3684, 4.3537, + 4.2728, 4.2549, 4.2032, 4.2794, 4.2613, 4.2491, 4.2375, 4.2322, 4.3665, 4.3061, 4.2714, 4.2155, 4.1416, 3.7660, + 3.6628, 3.5476, 3.8790, 4.1233, 4.0738, 4.0575, 4.3575, 4.1586, 4.0183, 4.4593, 4.5927, 4.4865, 4.3813, 4.4594, + 2.9875, 3.1674, 3.4971, 3.6715, 3.7114, 3.6692, 3.4446, 3.4676, 3.2685, 3.1405, 3.6546, 3.8579, 3.9637, 4.0581, + 3.7796, 3.9463, 3.7275, 3.5792, 4.0295, 4.1824, 4.1247, 4.0357, 3.9926, 3.4827, 3.9007, 3.8392, 3.8191, 3.7851, + 3.7687, 3.7387, 3.9290, 3.8606, 3.8306, 4.0601, 3.8625, 3.7269, 4.2062, 4.3566, 4.3022, 4.1929, 3.7401, 3.6888, + 3.5900, 3.5350, 3.5226, 3.4838, 3.4594, 3.8888, 4.0813, 4.0209, 4.0059, 4.2810, 4.0843, 3.9486, 4.4162, 4.6542, + 4.5005, 4.4444, 4.4196, 4.3933, 4.3741, 4.3552, 4.3406, 4.2484, 4.2413, 4.1907, 4.2656, 4.2474, 4.2352, 4.2236, + 4.2068, 4.3410, 4.2817, 4.2479, 4.1921, 4.1182, 3.7346, 3.6314, 3.5168, 3.8582, 4.0927, 4.0469, 4.0313, 4.3391, + 4.1381, 3.9962, 4.4429, 4.5787, 4.4731, 4.3588, 4.4270, 4.3957, 2.9659, 3.1442, 3.4795, 3.6503, 3.6814, 3.6476, + 3.4222, 3.4491, 3.2494, 3.1209, 3.6324, 3.8375, 3.9397, 3.8311, 3.7581, 3.9274, 3.7085, 3.5598, 4.0080, 4.1641, + 4.1057, 4.0158, 3.9726, 3.4667, 3.8802, 3.8188, 3.7989, 3.7644, 3.7474, 3.7173, 3.9049, 3.8424, 3.8095, 4.0412, + 3.8436, 3.7077, 4.1837, 4.3366, 4.2816, 4.1686, 3.7293, 3.6709, 3.5700, 3.5153, 3.5039, 3.4684, 3.4437, 3.8663, + 4.0575, 4.0020, 3.9842, 4.2612, 4.0643, 3.9285, 4.3928, 4.6308, 4.4799, 4.4244, 4.3996, 4.3737, 4.3547, 4.3358, + 4.3212, 4.2275, 4.2216, 4.1676, 4.2465, 4.2283, 4.2161, 4.2045, 4.1841, 4.3135, 4.2562, 4.2226, 4.1667, 4.0932, + 3.7134, 3.6109, 3.4962, 3.8352, 4.0688, 4.0281, 4.0099, 4.3199, 4.1188, 3.9768, 4.4192, 4.5577, 4.4516, 4.3365, + 4.4058, 4.3745, 4.3539, 2.8763, 3.1294, 3.5598, 3.7465, 3.5659, 3.5816, 3.3599, 3.4024, 3.1877, 3.0484, 3.7009, + 3.9451, 3.8465, 3.9873, 3.7079, 3.9083, 3.6756, 3.5150, 4.0829, 4.2780, 4.1511, 4.1260, 4.0571, 3.4865, 3.9744, + 3.9150, 3.8930, 3.8578, 3.8402, 3.8073, 3.7977, 4.0036, 3.7604, 4.0288, 3.8210, 3.6757, 4.2646, 4.4558, 4.2862, + 4.2122, 3.7088, 3.6729, 3.5800, 3.5276, 3.5165, 3.4783, 3.4539, 3.9553, 3.9818, 4.2040, 3.9604, 4.2718, 4.0689, + 3.9253, 4.4869, 4.7792, 4.4918, 4.5342, 4.5090, 4.4868, 4.4680, 4.4486, 4.4341, 4.2023, 4.3122, 4.2710, 4.3587, + 4.3407, 4.3281, 4.3174, 4.1499, 4.3940, 4.3895, 4.3260, 4.2725, 4.1961, 3.7361, 3.6193, 3.4916, 3.9115, 3.9914, + 3.9809, 3.9866, 4.3329, 4.1276, 3.9782, 4.5097, 4.6769, 4.5158, 4.3291, 4.3609, 4.3462, 4.3265, 4.4341}; int k = 0; for (size_t i = 0; i != max_elem_; i++) diff --git a/source/module_hamilt_general/module_xc/kernels/cuda/xc_functional_op.cu b/source/module_hamilt_general/module_xc/kernels/cuda/xc_functional_op.cu index 60b1da3e88..5ade0c4d26 100644 --- a/source/module_hamilt_general/module_xc/kernels/cuda/xc_functional_op.cu +++ b/source/module_hamilt_general/module_xc/kernels/cuda/xc_functional_op.cu @@ -1,79 +1,74 @@ +#include "source_base/module_device/types.h" + +#include #include -#include "module_base/module_device/types.h" #include -#include #define THREADS_PER_BLOCK 256 -namespace hamilt { +namespace hamilt +{ template -__global__ void xc_functional_grad_wfc( - const int ik, - const int pol, - const int npw, - const int npwx, - const T tpiba, - const T* gcar, - const T* kvec_c, - const thrust::complex* rhog, - thrust::complex* porter) +__global__ void xc_functional_grad_wfc(const int ik, + const int pol, + const int npw, + const int npwx, + const T tpiba, + const T* gcar, + const T* kvec_c, + const thrust::complex* rhog, + thrust::complex* porter) { int idx = threadIdx.x + blockIdx.x * blockDim.x; - if (idx >= npw) { return; } - // the formula is : rho(r)^prime = \int iG * rho(G)e^{iGr} dG - // double kplusg = wfc_basis->getgpluskcar(ik,ig)[ipol] * tpiba; - T kplusg = (gcar[(ik * npwx + idx) * 3 + pol] + - kvec_c[ik * 3 + pol]) * tpiba; - // calculate the charge density gradient in reciprocal space. - porter[idx] = thrust::complex(0.0, kplusg) * rhog[idx]; + if (idx >= npw) + { + return; + } + // the formula is : rho(r)^prime = \int iG * rho(G)e^{iGr} dG + // double kplusg = wfc_basis->getgpluskcar(ik,ig)[ipol] * tpiba; + T kplusg = (gcar[(ik * npwx + idx) * 3 + pol] + kvec_c[ik * 3 + pol]) * tpiba; + // calculate the charge density gradient in reciprocal space. + porter[idx] = thrust::complex(0.0, kplusg) * rhog[idx]; } template -__global__ void xc_functional_grad_wfc( - const int ipol, - const int nrxx, - const T* porter, - T* grad) +__global__ void xc_functional_grad_wfc(const int ipol, const int nrxx, const T* porter, T* grad) { int idx = threadIdx.x + blockIdx.x * blockDim.x; - if (idx >= nrxx) { return; } + if (idx >= nrxx) + { + return; + } grad[ipol * nrxx + idx] = porter[idx]; } template -void xc_functional_grad_wfc_op::operator()( - const int& ik, - const int& pol, - const int& npw, - const int& npwx, - const Real& tpiba, - const Real * gcar, - const Real * kvec_c, - const T * rhog, - T* porter) +void xc_functional_grad_wfc_op::operator()(const int& ik, + const int& pol, + const int& npw, + const int& npwx, + const Real& tpiba, + const Real* gcar, + const Real* kvec_c, + const T* rhog, + T* porter) { auto porter_ = reinterpret_cast*>(porter); auto rhog_ = reinterpret_cast*>(rhog); const int block = (npw + THREADS_PER_BLOCK - 1) / THREADS_PER_BLOCK; - xc_functional_grad_wfc<<>>( - ik, pol, npw, npwx, tpiba, gcar, kvec_c, rhog_, porter_); + xc_functional_grad_wfc<<>>(ik, pol, npw, npwx, tpiba, gcar, kvec_c, rhog_, porter_); cudaCheckOnDebug(); } template -void xc_functional_grad_wfc_op::operator()( - const int& ipol, - const int& nrxx, - const T * porter, - T* grad) +void xc_functional_grad_wfc_op::operator()(const int& ipol, const int& nrxx, const T* porter, T* grad) { auto grad_ = reinterpret_cast*>(grad); auto porter_ = reinterpret_cast*>(porter); const int block = (nrxx + THREADS_PER_BLOCK - 1) / THREADS_PER_BLOCK; - xc_functional_grad_wfc<<>>( - ipol, nrxx, porter_, grad_); + xc_functional_grad_wfc<<>>(ipol, nrxx, porter_, grad_); cudaCheckOnDebug(); } diff --git a/source/module_hamilt_general/module_xc/kernels/rocm/xc_functional_op.hip.cu b/source/module_hamilt_general/module_xc/kernels/rocm/xc_functional_op.hip.cu index 937a277d74..a5704d3d14 100644 --- a/source/module_hamilt_general/module_xc/kernels/rocm/xc_functional_op.hip.cu +++ b/source/module_hamilt_general/module_xc/kernels/rocm/xc_functional_op.hip.cu @@ -1,80 +1,74 @@ -#include -#include "module_base/module_device/types.h" -#include +#include "source_base/module_device/types.h" #include +#include +#include #define THREADS_PER_BLOCK 256 -namespace hamilt { +namespace hamilt +{ template -__global__ void xc_functional_grad_wfc( - const int ik, - const int pol, - const int npw, - const int npwx, - const T tpiba, - const T* gcar, - const T* kvec_c, - const thrust::complex* rhog, - thrust::complex* porter) +__global__ void xc_functional_grad_wfc(const int ik, + const int pol, + const int npw, + const int npwx, + const T tpiba, + const T* gcar, + const T* kvec_c, + const thrust::complex* rhog, + thrust::complex* porter) { int idx = threadIdx.x + blockIdx.x * blockDim.x; - if (idx >= npw) { return; } - // the formula is : rho(r)^prime = \int iG * rho(G)e^{iGr} dG - // double kplusg = wfc_basis->getgpluskcar(ik,ig)[ipol] * tpiba; - T kplusg = (gcar[(ik * npwx + idx) * 3 + pol] + - kvec_c[ik * 3 + pol]) * tpiba; - // calculate the charge density gradient in reciprocal space. - porter[idx] = thrust::complex(0.0, kplusg) * rhog[idx]; + if (idx >= npw) + { + return; + } + // the formula is : rho(r)^prime = \int iG * rho(G)e^{iGr} dG + // double kplusg = wfc_basis->getgpluskcar(ik,ig)[ipol] * tpiba; + T kplusg = (gcar[(ik * npwx + idx) * 3 + pol] + kvec_c[ik * 3 + pol]) * tpiba; + // calculate the charge density gradient in reciprocal space. + porter[idx] = thrust::complex(0.0, kplusg) * rhog[idx]; } template -__global__ void xc_functional_grad_wfc( - const int ipol, - const int nrxx, - const T* porter, - T* grad) +__global__ void xc_functional_grad_wfc(const int ipol, const int nrxx, const T* porter, T* grad) { int idx = threadIdx.x + blockIdx.x * blockDim.x; - if (idx >= nrxx) { return; } + if (idx >= nrxx) + { + return; + } grad[ipol * nrxx + idx] = porter[idx]; } template -void xc_functional_grad_wfc_op::operator()( - const int& ik, - const int& pol, - const int& npw, - const int& npwx, - const Real& tpiba, - const Real * gcar, - const Real * kvec_c, - const T * rhog, - T* porter) +void xc_functional_grad_wfc_op::operator()(const int& ik, + const int& pol, + const int& npw, + const int& npwx, + const Real& tpiba, + const Real* gcar, + const Real* kvec_c, + const T* rhog, + T* porter) { auto porter_ = reinterpret_cast*>(porter); auto rhog_ = reinterpret_cast*>(rhog); const int block = (npw + THREADS_PER_BLOCK - 1) / THREADS_PER_BLOCK; - xc_functional_grad_wfc<<>>( - ik, pol, npw, npwx, tpiba, gcar, kvec_c, rhog_, porter_); + xc_functional_grad_wfc<<>>(ik, pol, npw, npwx, tpiba, gcar, kvec_c, rhog_, porter_); hipCheckOnDebug(); } template -void xc_functional_grad_wfc_op::operator()( - const int& ipol, - const int& nrxx, - const T * porter, - T* grad) +void xc_functional_grad_wfc_op::operator()(const int& ipol, const int& nrxx, const T* porter, T* grad) { auto grad_ = reinterpret_cast*>(grad); auto porter_ = reinterpret_cast*>(porter); const int block = (nrxx + THREADS_PER_BLOCK - 1) / THREADS_PER_BLOCK; - xc_functional_grad_wfc<<>>( - ipol, nrxx, porter_, grad_); + xc_functional_grad_wfc<<>>(ipol, nrxx, porter_, grad_); hipCheckOnDebug(); } diff --git a/source/module_hamilt_general/module_xc/kernels/xc_functional_op.h b/source/module_hamilt_general/module_xc/kernels/xc_functional_op.h index 1c83947182..4e84338cc9 100644 --- a/source/module_hamilt_general/module_xc/kernels/xc_functional_op.h +++ b/source/module_hamilt_general/module_xc/kernels/xc_functional_op.h @@ -3,29 +3,26 @@ #include #include -#include +#include -namespace hamilt { +namespace hamilt +{ template -struct xc_functional_grad_wfc_op { +struct xc_functional_grad_wfc_op +{ using Real = typename GetTypeReal::type; - void operator()( - const int& ik, - const int& pol, - const int& npw, - const int& npwx, - const Real& tpiba, - const Real * gcar, - const Real * kvec_c, - const T * rhog, - T* porter); - - void operator()( - const int& ipol, - const int& nrxx, - const T * porter, - T* grad); + void operator()(const int& ik, + const int& pol, + const int& npw, + const int& npwx, + const Real& tpiba, + const Real* gcar, + const Real* kvec_c, + const T* rhog, + T* porter); + + void operator()(const int& ipol, const int& nrxx, const T* porter, T* grad); }; } // namespace hamilt diff --git a/source/module_hamilt_general/module_xc/test/CMakeLists.txt b/source/module_hamilt_general/module_xc/test/CMakeLists.txt index 9b0bc440b7..0219e47b3b 100644 --- a/source/module_hamilt_general/module_xc/test/CMakeLists.txt +++ b/source/module_hamilt_general/module_xc/test/CMakeLists.txt @@ -36,11 +36,11 @@ AddTest( ../xc_functional_libxc_wrapper_tauxc.cpp ../xc_funct_corr_gga.cpp ../xc_funct_corr_lda.cpp ../xc_funct_exch_gga.cpp ../xc_funct_exch_lda.cpp ../xc_funct_hcth.cpp - ../../../module_base/matrix.cpp - ../../../module_base/memory.cpp - ../../../module_base/libm/branred.cpp - ../../../module_base/libm/sincos.cpp - ../../../module_base/blas_connector_base.cpp ../../../module_base/blas_connector_vector.cpp ../../../module_base/blas_connector_matrix.cpp + ../../../source_base/matrix.cpp + ../../../source_base/memory.cpp + ../../../source_base/libm/branred.cpp + ../../../source_base/libm/sincos.cpp + ../../../source_base/blas_connector_base.cpp ../../../source_base/blas_connector_vector.cpp ../../../source_base/blas_connector_matrix.cpp ../../../module_basis/module_pw/module_fft/fft_bundle.cpp ../../../module_basis/module_pw/module_fft/fft_cpu.cpp ${FFT_SRC} @@ -73,12 +73,12 @@ AddTest( ../xc_functional_vxc.cpp ../xc_functional_libxc_vxc.cpp ../xc_functional_libxc_tools.cpp - ../../../module_base/blas_connector_base.cpp ../../../module_base/blas_connector_vector.cpp ../../../module_base/blas_connector_matrix.cpp - ../../../module_base/matrix.cpp - ../../../module_base/memory.cpp - ../../../module_base/timer.cpp - ../../../module_base/libm/branred.cpp - ../../../module_base/libm/sincos.cpp + ../../../source_base/blas_connector_base.cpp ../../../source_base/blas_connector_vector.cpp ../../../source_base/blas_connector_matrix.cpp + ../../../source_base/matrix.cpp + ../../../source_base/memory.cpp + ../../../source_base/timer.cpp + ../../../source_base/libm/branred.cpp + ../../../source_base/libm/sincos.cpp ../../../module_basis/module_pw/module_fft/fft_bundle.cpp ../../../module_basis/module_pw/module_fft/fft_cpu.cpp ${FFT_SRC} diff --git a/source/module_hamilt_general/module_xc/test/test_xc3.cpp b/source/module_hamilt_general/module_xc/test/test_xc3.cpp index 13255831e1..4fabb573b9 100644 --- a/source/module_hamilt_general/module_xc/test/test_xc3.cpp +++ b/source/module_hamilt_general/module_xc/test/test_xc3.cpp @@ -1,207 +1,207 @@ -#include "gtest/gtest.h" #include "xctest.h" + +#include "gtest/gtest.h" #define private public #include "module_parameter/parameter.h" #undef private -#include "../xc_functional.h" #include "../exx_info.h" +#include "../xc_functional.h" +#include "source_base/matrix.h" #include "xc3_mock.h" -#include "module_base/matrix.h" /************************************************ -* unit test of functionals -***********************************************/ + * unit test of functionals + ***********************************************/ // For more information of the functions, check the comment of xc_functional.h // Two functions are tested: // gradcorr, which calculates the gradient part of GGA functional // gradwfc, which is used to obtain the derivative of wavefunction - - class XCTest_GRADCORR : public XCTest { - protected: + protected: + double et1 = 0, vt1 = 0; + ModuleBase::matrix v1; + std::vector stress1; - double et1 = 0, vt1 = 0; - ModuleBase::matrix v1; - std::vector stress1; + double et2 = 0, vt2 = 0; + ModuleBase::matrix v2; + std::vector stress2; - double et2 = 0, vt2 = 0; - ModuleBase::matrix v2; - std::vector stress2; + double et4 = 0, vt4 = 0; + ModuleBase::matrix v4; + std::vector stress4; - double et4 = 0, vt4 = 0; - ModuleBase::matrix v4; - std::vector stress4; - - void SetUp() + void SetUp() + { + ModulePW::PW_Basis rhopw; + UnitCell ucell; + Charge chr; + + rhopw.nrxx = 5; + rhopw.npw = 5; + rhopw.nmaxgr = 5; + rhopw.gcar = new ModuleBase::Vector3[5]; + + ucell.tpiba = 1; + ucell.magnet.lsign_ = true; + elecstate::cal_ux(ucell); + + chr.rho = new double*[4]; + chr.rho[0] = new double[5]; + chr.rho[1] = new double[5]; + chr.rho[2] = new double[5]; + chr.rho[3] = new double[5]; + chr.rhog = new std::complex*[2]; + chr.rhog[0] = new std::complex[5]; + chr.rhog[1] = new std::complex[5]; + + chr.rho_core = new double[5]; + chr.rhog_core = new std::complex[5]; + + for (int i = 0; i < 5; i++) { - ModulePW::PW_Basis rhopw; - UnitCell ucell; - Charge chr; - - rhopw.nrxx = 5; - rhopw.npw = 5; - rhopw.nmaxgr = 5; - rhopw.gcar = new ModuleBase::Vector3 [5]; - - ucell.tpiba = 1; - ucell.magnet.lsign_ = true; - elecstate::cal_ux(ucell); - - chr.rho = new double*[4]; - chr.rho[0] = new double[5]; - chr.rho[1] = new double[5]; - chr.rho[2] = new double[5]; - chr.rho[3] = new double[5]; - chr.rhog = new std::complex*[2]; - chr.rhog[0] = new std::complex[5]; - chr.rhog[1] = new std::complex[5]; - - chr.rho_core = new double[5]; - chr.rhog_core = new std::complex[5]; - - for(int i=0;i<5;i++) - { - chr.rho[0][i] = double(i); - chr.rho[1][i] = 0.1*double(i); - chr.rho[2][i] = chr.rho[0][i]; - chr.rho[3][i] = chr.rho[1][i]; - chr.rhog[0][i] = chr.rho[0][i]; - chr.rhog[1][i] = chr.rho[1][i]; - chr.rho_core[i] = 0; - chr.rhog_core[i] = 0; - rhopw.gcar[i]= 1; - } - - v1.create(1,5); - v1.zero_out(); - v2.create(2,5); - v2.zero_out(); - v4.create(4,5); - v4.zero_out(); - - XC_Functional::set_xc_type("PBE"); - - PARAM.input.nspin = 1; - XC_Functional::gradcorr(et1,vt1,v1,&chr,&rhopw,&ucell,stress1,false); - XC_Functional::gradcorr(et1,vt1,v1,&chr,&rhopw,&ucell,stress1,true); - - PARAM.input.nspin = 2; - XC_Functional::gradcorr(et2,vt2,v2,&chr,&rhopw,&ucell,stress2,false); - XC_Functional::gradcorr(et2,vt2,v2,&chr,&rhopw,&ucell,stress2,true); - - PARAM.input.nspin = 4; - PARAM.sys.domag = true; - XC_Functional::gradcorr(et4,vt4,v4,&chr,&rhopw,&ucell,stress4,false); + chr.rho[0][i] = double(i); + chr.rho[1][i] = 0.1 * double(i); + chr.rho[2][i] = chr.rho[0][i]; + chr.rho[3][i] = chr.rho[1][i]; + chr.rhog[0][i] = chr.rho[0][i]; + chr.rhog[1][i] = chr.rho[1][i]; + chr.rho_core[i] = 0; + chr.rhog_core[i] = 0; + rhopw.gcar[i] = 1; } + + v1.create(1, 5); + v1.zero_out(); + v2.create(2, 5); + v2.zero_out(); + v4.create(4, 5); + v4.zero_out(); + + XC_Functional::set_xc_type("PBE"); + + PARAM.input.nspin = 1; + XC_Functional::gradcorr(et1, vt1, v1, &chr, &rhopw, &ucell, stress1, false); + XC_Functional::gradcorr(et1, vt1, v1, &chr, &rhopw, &ucell, stress1, true); + + PARAM.input.nspin = 2; + XC_Functional::gradcorr(et2, vt2, v2, &chr, &rhopw, &ucell, stress2, false); + XC_Functional::gradcorr(et2, vt2, v2, &chr, &rhopw, &ucell, stress2, true); + + PARAM.input.nspin = 4; + PARAM.sys.domag = true; + XC_Functional::gradcorr(et4, vt4, v4, &chr, &rhopw, &ucell, stress4, false); + } }; TEST_F(XCTest_GRADCORR, set_xc_type) { double et1_ref = -0.02083356309, vt1_ref = 0.1433626281; - std::vector v1_ref = {0,0.02403590412,0.01672229351,0.01340429824,0.01141731056}; - std::vector stress1_ref = {-0.02536030461,0,0,-0.02536030461,-0.02536030461,0,-0.02536030461,-0.02536030461,-0.02536030461}; + std::vector v1_ref = {0, 0.02403590412, 0.01672229351, 0.01340429824, 0.01141731056}; + std::vector stress1_ref + = {-0.02536030461, 0, 0, -0.02536030461, -0.02536030461, 0, -0.02536030461, -0.02536030461, -0.02536030461}; - EXPECT_NEAR(et1_ref,et1,1.0e-8); - EXPECT_NEAR(vt1_ref,vt1,1.0e-8); - for(int i=0;i<5;i++) + EXPECT_NEAR(et1_ref, et1, 1.0e-8); + EXPECT_NEAR(vt1_ref, vt1, 1.0e-8); + for (int i = 0; i < 5; i++) { - EXPECT_NEAR(v1(0,i),v1_ref[i],1.0e-8); + EXPECT_NEAR(v1(0, i), v1_ref[i], 1.0e-8); } - for(int i=0;i<9;i++) + for (int i = 0; i < 9; i++) { - EXPECT_NEAR(stress1[i],stress1_ref[i],1.0e-8); + EXPECT_NEAR(stress1[i], stress1_ref[i], 1.0e-8); } double et2_ref = -0.02334069902, vt2_ref = 0.1585216001; - std::vector v2_ref1 = {0,0.01705561346,0.01079116099,0.008088425437,0.006519533763}; - std::vector v2_ref2 = {0,0.09418744142,0.0767446959,0.06744349422,0.0613488043}; - std::vector stress2_ref = {-0.0280735975,0,0,-0.0280735975,-0.0280735975,0,-0.0280735975,-0.0280735975,-0.0280735975}; - - EXPECT_NEAR(et2_ref,et2,1.0e-8); - EXPECT_NEAR(vt2_ref,vt2,1.0e-8); - for(int i=0;i<5;i++) + std::vector v2_ref1 = {0, 0.01705561346, 0.01079116099, 0.008088425437, 0.006519533763}; + std::vector v2_ref2 = {0, 0.09418744142, 0.0767446959, 0.06744349422, 0.0613488043}; + std::vector stress2_ref + = {-0.0280735975, 0, 0, -0.0280735975, -0.0280735975, 0, -0.0280735975, -0.0280735975, -0.0280735975}; + + EXPECT_NEAR(et2_ref, et2, 1.0e-8); + EXPECT_NEAR(vt2_ref, vt2, 1.0e-8); + for (int i = 0; i < 5; i++) { - EXPECT_NEAR(v2(0,i),v2_ref1[i],1.0e-8); - EXPECT_NEAR(v2(1,i),v2_ref2[i],1.0e-8); + EXPECT_NEAR(v2(0, i), v2_ref1[i], 1.0e-8); + EXPECT_NEAR(v2(1, i), v2_ref2[i], 1.0e-8); } - for(int i=0;i<9;i++) + for (int i = 0; i < 9; i++) { - EXPECT_NEAR(stress2[i],stress2_ref[i],1.0e-8); + EXPECT_NEAR(stress2[i], stress2_ref[i], 1.0e-8); } double et4_ref = -0.1443518167, vt4_ref = 0.4761829579; - std::vector v4_ref1 = {0,0.03249745531,0.02610023454,0.02290998159,0.02087122756}; - std::vector v4_ref2 = {0,0.003217727553,0.00258430831,0.002268426198,0.002066559469}; - std::vector v4_ref3 = {0,0.03217727553,0.0258430831,0.02268426198,0.02066559469}; - std::vector v4_ref4 = {0,0.003217727553,0.00258430831,0.002268426198,0.002066559469}; - EXPECT_NEAR(et4_ref,et4,1.0e-8); - EXPECT_NEAR(vt4_ref,vt4,1.0e-8); - for(int i=0;i<5;i++) + std::vector v4_ref1 = {0, 0.03249745531, 0.02610023454, 0.02290998159, 0.02087122756}; + std::vector v4_ref2 = {0, 0.003217727553, 0.00258430831, 0.002268426198, 0.002066559469}; + std::vector v4_ref3 = {0, 0.03217727553, 0.0258430831, 0.02268426198, 0.02066559469}; + std::vector v4_ref4 = {0, 0.003217727553, 0.00258430831, 0.002268426198, 0.002066559469}; + EXPECT_NEAR(et4_ref, et4, 1.0e-8); + EXPECT_NEAR(vt4_ref, vt4, 1.0e-8); + for (int i = 0; i < 5; i++) { - EXPECT_NEAR(v4(0,i),v4_ref1[i],1.0e-8); - EXPECT_NEAR(v4(1,i),v4_ref2[i],1.0e-8); - EXPECT_NEAR(v4(2,i),v4_ref3[i],1.0e-8); - EXPECT_NEAR(v4(3,i),v4_ref4[i],1.0e-8); + EXPECT_NEAR(v4(0, i), v4_ref1[i], 1.0e-8); + EXPECT_NEAR(v4(1, i), v4_ref2[i], 1.0e-8); + EXPECT_NEAR(v4(2, i), v4_ref3[i], 1.0e-8); + EXPECT_NEAR(v4(3, i), v4_ref4[i], 1.0e-8); } } class XCTest_GRADWFC : public XCTest { - protected: + protected: + std::complex* grad = nullptr; + ModuleBase::Vector3* gcar_wrapper = nullptr; + ModuleBase::Vector3* kvec_c_wrapper = nullptr; + ~XCTest_GRADWFC() + { + delete[] grad; + delete[] gcar_wrapper; + delete[] kvec_c_wrapper; + } - std::complex * grad = nullptr; - ModuleBase::Vector3 * gcar_wrapper = nullptr; - ModuleBase::Vector3 * kvec_c_wrapper = nullptr; - ~XCTest_GRADWFC() + void SetUp() + { + ModulePW::PW_Basis_K rhopw; + rhopw.npwk = new int[1]; + rhopw.npwk[0] = 5; + rhopw.npwk_max = 5; + rhopw.nmaxgr = 5; + rhopw.nrxx = 5; + rhopw.nks = 1; + gcar_wrapper = new ModuleBase::Vector3[rhopw.npwk_max]; + for (int ii = 0; ii < rhopw.npwk_max; ii++) { - delete [] grad; - delete [] gcar_wrapper; - delete [] kvec_c_wrapper; + gcar_wrapper[ii] = ModuleBase::Vector3(0, 0, 0); } + kvec_c_wrapper = new ModuleBase::Vector3(1, 2, 3); - void SetUp() - { - ModulePW::PW_Basis_K rhopw; - rhopw.npwk = new int[1]; - rhopw.npwk[0] = 5; - rhopw.npwk_max = 5; - rhopw.nmaxgr = 5; - rhopw.nrxx = 5; - rhopw.nks = 1; - gcar_wrapper = new ModuleBase::Vector3[rhopw.npwk_max]; - for (int ii = 0; ii < rhopw.npwk_max; ii++) { - gcar_wrapper[ii] = ModuleBase::Vector3(0,0,0); -} - kvec_c_wrapper = new ModuleBase::Vector3(1,2,3); - - rhopw.gcar = gcar_wrapper; - rhopw.kvec_c = kvec_c_wrapper; + rhopw.gcar = gcar_wrapper; + rhopw.kvec_c = kvec_c_wrapper; - std::complex rhog[5]; - for (int i=0;i<5;i++) - { - rhog[i] = double(i); - } - double tpiba = 1; + std::complex rhog[5]; + for (int i = 0; i < 5; i++) + { + rhog[i] = double(i); + } + double tpiba = 1; - grad = new std::complex[15]; + grad = new std::complex[15]; - XC_Functional::grad_wfc, base_device::DEVICE_CPU>(0, tpiba, &rhopw, rhog, grad); - } + XC_Functional::grad_wfc, base_device::DEVICE_CPU>(0, tpiba, &rhopw, rhog, grad); + } }; TEST_F(XCTest_GRADWFC, set_xc_type) { - for (int j=0;j<3;j++) + for (int j = 0; j < 3; j++) { - for (int i=0;i<5;i++) + for (int i = 0; i < 5; i++) { - EXPECT_NEAR(grad[i+j*5].real(),double(i*(j+1)),1e-8); - EXPECT_NEAR(grad[i+j*5].imag(),0,1e-8); + EXPECT_NEAR(grad[i + j * 5].real(), double(i * (j + 1)), 1e-8); + EXPECT_NEAR(grad[i + j * 5].imag(), 0, 1e-8); } } } \ No newline at end of file diff --git a/source/module_hamilt_general/module_xc/test/test_xc5.cpp b/source/module_hamilt_general/module_xc/test/test_xc5.cpp index 67e81b4208..e55cfb79b5 100644 --- a/source/module_hamilt_general/module_xc/test/test_xc5.cpp +++ b/source/module_hamilt_general/module_xc/test/test_xc5.cpp @@ -1,18 +1,19 @@ #include "../xc_functional.h" #include "../xc_functional_libxc.h" + #include "gtest/gtest.h" #define private public #include "module_parameter/parameter.h" #undef private -#include "xctest.h" +#include "../../../source_base/parallel_reduce.h" #include "../exx_info.h" +#include "source_base/matrix.h" #include "xc3_mock.h" -#include "module_base/matrix.h" -#include "../../../module_base/parallel_reduce.h" +#include "xctest.h" /************************************************ -* unit test of functionals -***********************************************/ + * unit test of functionals + ***********************************************/ // For more information of the functions, check the comment of xc_functional.h // Three functions are tested: @@ -22,325 +23,313 @@ class XCTest_VXC : public XCTest { - protected: - - double et1 = 0, vt1 = 0; - ModuleBase::matrix v1; + protected: + double et1 = 0, vt1 = 0; + ModuleBase::matrix v1; + + double et2 = 0, vt2 = 0; + ModuleBase::matrix v2; + + void SetUp() + { + ModulePW::PW_Basis rhopw; + UnitCell ucell; + Charge chr; + + rhopw.nrxx = 5; + rhopw.npw = 5; + rhopw.nmaxgr = 5; + rhopw.gcar = new ModuleBase::Vector3[5]; + rhopw.nxyz = 1; + + ucell.tpiba = 1; + ucell.magnet.lsign_ = true; + elecstate::cal_ux(ucell); + ucell.omega = 1; + + chr.rhopw = &(rhopw); + chr.rho = new double*[4]; + chr.rho[0] = new double[5]; + chr.rho[1] = new double[5]; + chr.rho[2] = new double[5]; + chr.rho[3] = new double[5]; + chr.rhog = new complex*[2]; + chr.rhog[0] = new complex[5]; + chr.rhog[1] = new complex[5]; + + chr.rho_core = new double[5]; + chr.rhog_core = new complex[5]; + + for (int i = 0; i < 5; i++) + { + chr.rho[0][i] = double(i); + chr.rho[1][i] = 0.1 * double(i); + chr.rho[2][i] = chr.rho[0][i]; + chr.rho[3][i] = chr.rho[1][i]; + chr.rhog[0][i] = chr.rho[0][i]; + chr.rhog[1][i] = chr.rho[1][i]; + chr.rho_core[i] = 0; + chr.rhog_core[i] = 0; + rhopw.gcar[i] = 1; + } - double et2 = 0, vt2 = 0; - ModuleBase::matrix v2; + XC_Functional::set_xc_type("PBE"); - void SetUp() - { - ModulePW::PW_Basis rhopw; - UnitCell ucell; - Charge chr; - - rhopw.nrxx = 5; - rhopw.npw = 5; - rhopw.nmaxgr = 5; - rhopw.gcar = new ModuleBase::Vector3 [5]; - rhopw.nxyz = 1; - - ucell.tpiba = 1; - ucell.magnet.lsign_ = true; - elecstate::cal_ux(ucell); - ucell.omega = 1; - - chr.rhopw = &(rhopw); - chr.rho = new double*[4]; - chr.rho[0] = new double[5]; - chr.rho[1] = new double[5]; - chr.rho[2] = new double[5]; - chr.rho[3] = new double[5]; - chr.rhog = new complex*[2]; - chr.rhog[0] = new complex[5]; - chr.rhog[1] = new complex[5]; - - chr.rho_core = new double[5]; - chr.rhog_core = new complex[5]; - - for(int i=0;i<5;i++) - { - chr.rho[0][i] = double(i); - chr.rho[1][i] = 0.1*double(i); - chr.rho[2][i] = chr.rho[0][i]; - chr.rho[3][i] = chr.rho[1][i]; - chr.rhog[0][i] = chr.rho[0][i]; - chr.rhog[1][i] = chr.rho[1][i]; - chr.rho_core[i] = 0; - chr.rhog_core[i] = 0; - rhopw.gcar[i]= 1; - } - - XC_Functional::set_xc_type("PBE"); - - PARAM.input.nspin = 1; - std::tuple etxc_vtxc_v - = XC_Functional::v_xc(rhopw.nrxx,&chr,&ucell); - et1 = std::get<0>(etxc_vtxc_v); - vt1 = std::get<1>(etxc_vtxc_v); - v1 = std::get<2>(etxc_vtxc_v); - - PARAM.input.nspin = 2; - etxc_vtxc_v - = XC_Functional::v_xc(rhopw.nrxx,&chr,&ucell); - et2 = std::get<0>(etxc_vtxc_v); - vt2 = std::get<1>(etxc_vtxc_v); - v2 = std::get<2>(etxc_vtxc_v); + PARAM.input.nspin = 1; + std::tuple etxc_vtxc_v = XC_Functional::v_xc(rhopw.nrxx, &chr, &ucell); + et1 = std::get<0>(etxc_vtxc_v); + vt1 = std::get<1>(etxc_vtxc_v); + v1 = std::get<2>(etxc_vtxc_v); - } + PARAM.input.nspin = 2; + etxc_vtxc_v = XC_Functional::v_xc(rhopw.nrxx, &chr, &ucell); + et2 = std::get<0>(etxc_vtxc_v); + vt2 = std::get<1>(etxc_vtxc_v); + v2 = std::get<2>(etxc_vtxc_v); + } }; TEST_F(XCTest_VXC, set_xc_type) { - EXPECT_NEAR(et1,-22.58755058,1.0e-8); - EXPECT_NEAR(vt1,-29.58544157,1.0e-8); - EXPECT_NEAR(v1(0,0),0,1.0e-8); - EXPECT_NEAR(v1(0,1),-2.10436858,1.0e-8); - EXPECT_NEAR(v1(0,2),-2.635713084,1.0e-8); - EXPECT_NEAR(v1(0,3),-3.005351752,1.0e-8); - EXPECT_NEAR(v1(0,4),-3.298397892,1.0e-8); - - EXPECT_NEAR(et2,-28.97838368,1.0e-8); - EXPECT_NEAR(vt2,-38.15420234,1.0e-8); - EXPECT_NEAR(v2(0,0),0,1.0e-8); - EXPECT_NEAR(v2(0,1),-2.560885436,1.0e-8); - EXPECT_NEAR(v2(0,2),-3.219339115,1.0e-8); - EXPECT_NEAR(v2(0,3),-3.678772816,1.0e-8); - EXPECT_NEAR(v2(0,4),-4.043604077,1.0e-8); - EXPECT_NEAR(v2(1,0),0,1.0e-8); - EXPECT_NEAR(v2(1,1),-1.394281236,1.0e-8); - EXPECT_NEAR(v2(1,2),-1.739033356,1.0e-8); - EXPECT_NEAR(v2(1,3),-1.97506482,1.0e-8); - EXPECT_NEAR(v2(1,4),-2.160374198,1.0e-8); - + EXPECT_NEAR(et1, -22.58755058, 1.0e-8); + EXPECT_NEAR(vt1, -29.58544157, 1.0e-8); + EXPECT_NEAR(v1(0, 0), 0, 1.0e-8); + EXPECT_NEAR(v1(0, 1), -2.10436858, 1.0e-8); + EXPECT_NEAR(v1(0, 2), -2.635713084, 1.0e-8); + EXPECT_NEAR(v1(0, 3), -3.005351752, 1.0e-8); + EXPECT_NEAR(v1(0, 4), -3.298397892, 1.0e-8); + + EXPECT_NEAR(et2, -28.97838368, 1.0e-8); + EXPECT_NEAR(vt2, -38.15420234, 1.0e-8); + EXPECT_NEAR(v2(0, 0), 0, 1.0e-8); + EXPECT_NEAR(v2(0, 1), -2.560885436, 1.0e-8); + EXPECT_NEAR(v2(0, 2), -3.219339115, 1.0e-8); + EXPECT_NEAR(v2(0, 3), -3.678772816, 1.0e-8); + EXPECT_NEAR(v2(0, 4), -4.043604077, 1.0e-8); + EXPECT_NEAR(v2(1, 0), 0, 1.0e-8); + EXPECT_NEAR(v2(1, 1), -1.394281236, 1.0e-8); + EXPECT_NEAR(v2(1, 2), -1.739033356, 1.0e-8); + EXPECT_NEAR(v2(1, 3), -1.97506482, 1.0e-8); + EXPECT_NEAR(v2(1, 4), -2.160374198, 1.0e-8); } class XCTest_VXC_Libxc : public XCTest { - protected: - - double et1 = 0, vt1 = 0; - ModuleBase::matrix v1; + protected: + double et1 = 0, vt1 = 0; + ModuleBase::matrix v1; + + double et2 = 0, vt2 = 0; + ModuleBase::matrix v2; + + void SetUp() + { + ModulePW::PW_Basis rhopw; + UnitCell ucell; + Charge chr; + + rhopw.nrxx = 5; + rhopw.npw = 5; + rhopw.nmaxgr = 5; + rhopw.gcar = new ModuleBase::Vector3[5]; + rhopw.nxyz = 1; + + ucell.tpiba = 1; + ucell.magnet.lsign_ = true; + elecstate::cal_ux(ucell); + ucell.omega = 1; + + chr.rhopw = &(rhopw); + chr.rho = new double*[4]; + chr.rho[0] = new double[5]; + chr.rho[1] = new double[5]; + chr.rho[2] = new double[5]; + chr.rho[3] = new double[5]; + chr.rhog = new complex*[2]; + chr.rhog[0] = new complex[5]; + chr.rhog[1] = new complex[5]; + + chr.rho_core = new double[5]; + chr.rhog_core = new complex[5]; + + for (int i = 0; i < 5; i++) + { + chr.rho[0][i] = double(i); + chr.rho[1][i] = 0.1 * double(i); + chr.rho[2][i] = chr.rho[0][i]; + chr.rho[3][i] = chr.rho[1][i]; + chr.rhog[0][i] = chr.rho[0][i]; + chr.rhog[1][i] = chr.rho[1][i]; + chr.rho_core[i] = 0; + chr.rhog_core[i] = 0; + rhopw.gcar[i] = 1; + } - double et2 = 0, vt2 = 0; - ModuleBase::matrix v2; + XC_Functional::set_xc_type("GGA_X_PBE+GGA_C_PBE"); - void SetUp() - { - ModulePW::PW_Basis rhopw; - UnitCell ucell; - Charge chr; - - rhopw.nrxx = 5; - rhopw.npw = 5; - rhopw.nmaxgr = 5; - rhopw.gcar = new ModuleBase::Vector3 [5]; - rhopw.nxyz = 1; - - ucell.tpiba = 1; - ucell.magnet.lsign_ = true; - elecstate::cal_ux(ucell); - ucell.omega = 1; - - chr.rhopw = &(rhopw); - chr.rho = new double*[4]; - chr.rho[0] = new double[5]; - chr.rho[1] = new double[5]; - chr.rho[2] = new double[5]; - chr.rho[3] = new double[5]; - chr.rhog = new complex*[2]; - chr.rhog[0] = new complex[5]; - chr.rhog[1] = new complex[5]; - - chr.rho_core = new double[5]; - chr.rhog_core = new complex[5]; - - for(int i=0;i<5;i++) - { - chr.rho[0][i] = double(i); - chr.rho[1][i] = 0.1*double(i); - chr.rho[2][i] = chr.rho[0][i]; - chr.rho[3][i] = chr.rho[1][i]; - chr.rhog[0][i] = chr.rho[0][i]; - chr.rhog[1][i] = chr.rho[1][i]; - chr.rho_core[i] = 0; - chr.rhog_core[i] = 0; - rhopw.gcar[i]= 1; - } - - XC_Functional::set_xc_type("GGA_X_PBE+GGA_C_PBE"); - - PARAM.input.nspin = 1; - std::tuple etxc_vtxc_v - = XC_Functional::v_xc(rhopw.nrxx,&chr,&ucell); - et1 = std::get<0>(etxc_vtxc_v); - vt1 = std::get<1>(etxc_vtxc_v); - v1 = std::get<2>(etxc_vtxc_v); - - PARAM.input.nspin = 2; - etxc_vtxc_v - = XC_Functional::v_xc(rhopw.nrxx,&chr,&ucell); - et2 = std::get<0>(etxc_vtxc_v); - vt2 = std::get<1>(etxc_vtxc_v); - v2 = std::get<2>(etxc_vtxc_v); + PARAM.input.nspin = 1; + std::tuple etxc_vtxc_v = XC_Functional::v_xc(rhopw.nrxx, &chr, &ucell); + et1 = std::get<0>(etxc_vtxc_v); + vt1 = std::get<1>(etxc_vtxc_v); + v1 = std::get<2>(etxc_vtxc_v); - } + PARAM.input.nspin = 2; + etxc_vtxc_v = XC_Functional::v_xc(rhopw.nrxx, &chr, &ucell); + et2 = std::get<0>(etxc_vtxc_v); + vt2 = std::get<1>(etxc_vtxc_v); + v2 = std::get<2>(etxc_vtxc_v); + } }; TEST_F(XCTest_VXC_Libxc, set_xc_type) { - EXPECT_NEAR(et1,-22.58754423,1.0e-8); - EXPECT_NEAR(vt1,-29.58543393,1.0e-8); - EXPECT_NEAR(v1(0,0),0,1.0e-8); - EXPECT_NEAR(v1(0,1),-2.104367948,1.0e-8); - EXPECT_NEAR(v1(0,2),-2.635712365,1.0e-8); - EXPECT_NEAR(v1(0,3),-3.005350979,1.0e-8); - EXPECT_NEAR(v1(0,4),-3.298397079,1.0e-8); - - EXPECT_NEAR(et2,-28.97838189,1.0e-8); - EXPECT_NEAR(vt2,-38.1541987,1.0e-8); - EXPECT_NEAR(v2(0,0),0,1.0e-8); - EXPECT_NEAR(v2(0,1),-2.560885532,1.0e-8); - EXPECT_NEAR(v2(0,2),-3.219339294,1.0e-8); - EXPECT_NEAR(v2(0,3),-3.678773042,1.0e-8); - EXPECT_NEAR(v2(0,4),-4.043604335,1.0e-8); - EXPECT_NEAR(v2(1,0),0,1.0e-8); - EXPECT_NEAR(v2(1,1),-1.394276473,1.0e-8); - EXPECT_NEAR(v2(1,2),-1.739027899,1.0e-8); - EXPECT_NEAR(v2(1,3),-1.975058937,1.0e-8); - EXPECT_NEAR(v2(1,4),-2.160368003,1.0e-8); - + EXPECT_NEAR(et1, -22.58754423, 1.0e-8); + EXPECT_NEAR(vt1, -29.58543393, 1.0e-8); + EXPECT_NEAR(v1(0, 0), 0, 1.0e-8); + EXPECT_NEAR(v1(0, 1), -2.104367948, 1.0e-8); + EXPECT_NEAR(v1(0, 2), -2.635712365, 1.0e-8); + EXPECT_NEAR(v1(0, 3), -3.005350979, 1.0e-8); + EXPECT_NEAR(v1(0, 4), -3.298397079, 1.0e-8); + + EXPECT_NEAR(et2, -28.97838189, 1.0e-8); + EXPECT_NEAR(vt2, -38.1541987, 1.0e-8); + EXPECT_NEAR(v2(0, 0), 0, 1.0e-8); + EXPECT_NEAR(v2(0, 1), -2.560885532, 1.0e-8); + EXPECT_NEAR(v2(0, 2), -3.219339294, 1.0e-8); + EXPECT_NEAR(v2(0, 3), -3.678773042, 1.0e-8); + EXPECT_NEAR(v2(0, 4), -4.043604335, 1.0e-8); + EXPECT_NEAR(v2(1, 0), 0, 1.0e-8); + EXPECT_NEAR(v2(1, 1), -1.394276473, 1.0e-8); + EXPECT_NEAR(v2(1, 2), -1.739027899, 1.0e-8); + EXPECT_NEAR(v2(1, 3), -1.975058937, 1.0e-8); + EXPECT_NEAR(v2(1, 4), -2.160368003, 1.0e-8); } class XCTest_VXC_meta : public XCTest { - protected: - - double et1 = 0, vt1 = 0; - ModuleBase::matrix v1,vtau1; - - double et2 = 0, vt2 = 0; - ModuleBase::matrix v2,vtau2; - - void SetUp() + protected: + double et1 = 0, vt1 = 0; + ModuleBase::matrix v1, vtau1; + + double et2 = 0, vt2 = 0; + ModuleBase::matrix v2, vtau2; + + void SetUp() + { + ModulePW::PW_Basis rhopw; + UnitCell ucell; + Charge chr; + + rhopw.nrxx = 5; + rhopw.npw = 5; + rhopw.nmaxgr = 5; + rhopw.gcar = new ModuleBase::Vector3[5]; + rhopw.nxyz = 1; + + ucell.tpiba = 1; + ucell.magnet.lsign_ = true; + elecstate::cal_ux(ucell); + ucell.omega = 1; + + chr.rhopw = &(rhopw); + chr.rho = new double*[2]; + chr.rho[0] = new double[5]; + chr.rho[1] = new double[5]; + chr.rhog = new complex*[2]; + chr.rhog[0] = new complex[5]; + chr.rhog[1] = new complex[5]; + + chr.rho_core = new double[5]; + chr.rhog_core = new complex[5]; + + for (int i = 0; i < 5; i++) { - ModulePW::PW_Basis rhopw; - UnitCell ucell; - Charge chr; - - rhopw.nrxx = 5; - rhopw.npw = 5; - rhopw.nmaxgr = 5; - rhopw.gcar = new ModuleBase::Vector3 [5]; - rhopw.nxyz = 1; - - ucell.tpiba = 1; - ucell.magnet.lsign_ = true; - elecstate::cal_ux(ucell); - ucell.omega = 1; - - chr.rhopw = &(rhopw); - chr.rho = new double*[2]; - chr.rho[0] = new double[5]; - chr.rho[1] = new double[5]; - chr.rhog = new complex*[2]; - chr.rhog[0] = new complex[5]; - chr.rhog[1] = new complex[5]; - - chr.rho_core = new double[5]; - chr.rhog_core = new complex[5]; - - for(int i=0;i<5;i++) - { - chr.rho[0][i] = double(i); - chr.rho[1][i] = 0.1*double(i); - chr.rhog[0][i] = chr.rho[0][i]; - chr.rhog[1][i] = chr.rho[1][i]; - chr.rho_core[i] = 0; - chr.rhog_core[i] = 0; - rhopw.gcar[i]= 1; - } - - chr.kin_r = new double*[2]; - chr.kin_r[0] = new double[5]; - chr.kin_r[1] = new double[5]; - chr.kin_r[0][0] = 0; - chr.kin_r[0][1] = 0.02403590412; - chr.kin_r[0][2] = 0.01672229351; - chr.kin_r[0][3] = 0.01340429824; - chr.kin_r[0][4] = 0.01141731056; - chr.kin_r[1][0] = 0.5; - chr.kin_r[1][1] = 0.52403590412; - chr.kin_r[1][2] = 0.51672229351; - chr.kin_r[1][3] = 0.51340429824; - chr.kin_r[1][4] = 0.51141731056; - - XC_Functional::set_xc_type("SCAN"); - - PARAM.input.nspin = 1; - std::tuple etxc_vtxc_v - = XC_Functional_Libxc::v_xc_meta(XC_Functional::get_func_id(), rhopw.nrxx,ucell.omega,ucell.tpiba,&chr); - et1 = std::get<0>(etxc_vtxc_v); - vt1 = std::get<1>(etxc_vtxc_v); - v1 = std::get<2>(etxc_vtxc_v); - vtau1 = std::get<3>(etxc_vtxc_v); - - PARAM.input.nspin = 2; - etxc_vtxc_v - = XC_Functional_Libxc::v_xc_meta(XC_Functional::get_func_id(), rhopw.nrxx,ucell.omega,ucell.tpiba,&chr); - et2 = std::get<0>(etxc_vtxc_v); - vt2 = std::get<1>(etxc_vtxc_v); - v2 = std::get<2>(etxc_vtxc_v); - vtau2 = std::get<3>(etxc_vtxc_v); + chr.rho[0][i] = double(i); + chr.rho[1][i] = 0.1 * double(i); + chr.rhog[0][i] = chr.rho[0][i]; + chr.rhog[1][i] = chr.rho[1][i]; + chr.rho_core[i] = 0; + chr.rhog_core[i] = 0; + rhopw.gcar[i] = 1; } + + chr.kin_r = new double*[2]; + chr.kin_r[0] = new double[5]; + chr.kin_r[1] = new double[5]; + chr.kin_r[0][0] = 0; + chr.kin_r[0][1] = 0.02403590412; + chr.kin_r[0][2] = 0.01672229351; + chr.kin_r[0][3] = 0.01340429824; + chr.kin_r[0][4] = 0.01141731056; + chr.kin_r[1][0] = 0.5; + chr.kin_r[1][1] = 0.52403590412; + chr.kin_r[1][2] = 0.51672229351; + chr.kin_r[1][3] = 0.51340429824; + chr.kin_r[1][4] = 0.51141731056; + + XC_Functional::set_xc_type("SCAN"); + + PARAM.input.nspin = 1; + std::tuple etxc_vtxc_v + = XC_Functional_Libxc::v_xc_meta(XC_Functional::get_func_id(), rhopw.nrxx, ucell.omega, ucell.tpiba, &chr); + et1 = std::get<0>(etxc_vtxc_v); + vt1 = std::get<1>(etxc_vtxc_v); + v1 = std::get<2>(etxc_vtxc_v); + vtau1 = std::get<3>(etxc_vtxc_v); + + PARAM.input.nspin = 2; + etxc_vtxc_v + = XC_Functional_Libxc::v_xc_meta(XC_Functional::get_func_id(), rhopw.nrxx, ucell.omega, ucell.tpiba, &chr); + et2 = std::get<0>(etxc_vtxc_v); + vt2 = std::get<1>(etxc_vtxc_v); + v2 = std::get<2>(etxc_vtxc_v); + vtau2 = std::get<3>(etxc_vtxc_v); + } }; TEST_F(XCTest_VXC_meta, set_xc_type) { - EXPECT_NEAR(et1,-25.13065363,1.0e-8); - EXPECT_NEAR(vt1,-33.13880774,1.0e-8); - EXPECT_NEAR(v1(0,0),0,1.0e-8); - EXPECT_NEAR(v1(0,1),-2.336719556,1.0e-8); - EXPECT_NEAR(v1(0,2),-2.942649664,1.0e-8); - EXPECT_NEAR(v1(0,3),-3.36679035,1.0e-8); - EXPECT_NEAR(v1(0,4),-3.704104452,1.0e-8); - EXPECT_NEAR(vtau1(0,0),0,1.0e-8); - EXPECT_NEAR(vtau1(0,1),0.0187099814,1.0e-8); - EXPECT_NEAR(vtau1(0,2),0.01578002561,1.0e-8); - EXPECT_NEAR(vtau1(0,3),0.01423896928,1.0e-8); - EXPECT_NEAR(vtau1(0,4),0.01321861589,1.0e-8); - - EXPECT_NEAR(et2,-32.72218711,1.0e-8); - EXPECT_NEAR(vt2,-43.31358017,1.0e-8); - EXPECT_NEAR(v2(0,0),0,1.0e-8); - EXPECT_NEAR(v2(0,1),-2.901190807,1.0e-8); - EXPECT_NEAR(v2(0,2),-3.662642983,1.0e-8); - EXPECT_NEAR(v2(0,3),-4.196098173,1.0e-8); - EXPECT_NEAR(v2(0,4),-4.620454375,1.0e-8); - EXPECT_NEAR(v2(1,0),0,1.0e-8); - EXPECT_NEAR(v2(1,1),-1.285513329,1.0e-8); - EXPECT_NEAR(v2(1,2),-1.795172177,1.0e-8); - EXPECT_NEAR(v2(1,3),-2.064035864,1.0e-8); - EXPECT_NEAR(v2(1,4),-2.275487119,1.0e-8); - EXPECT_NEAR(vtau2(0,0),0,1.0e-8); - EXPECT_NEAR(vtau2(0,1),0.01677946177,1.0e-8); - EXPECT_NEAR(vtau2(0,2),0.01410816304,1.0e-8); - EXPECT_NEAR(vtau2(0,3),0.01263339482,1.0e-8); - EXPECT_NEAR(vtau2(0,4),0.01165715023,1.0e-8); - EXPECT_NEAR(vtau2(1,0),0,1.0e-8); - EXPECT_NEAR(vtau2(1,1),0.01591158497,1.0e-8); - EXPECT_NEAR(vtau2(1,2),0.07990709956,1.0e-8); - EXPECT_NEAR(vtau2(1,3),0.04145463825,1.0e-8); - EXPECT_NEAR(vtau2(1,4),0.0311787189,1.0e-8); + EXPECT_NEAR(et1, -25.13065363, 1.0e-8); + EXPECT_NEAR(vt1, -33.13880774, 1.0e-8); + EXPECT_NEAR(v1(0, 0), 0, 1.0e-8); + EXPECT_NEAR(v1(0, 1), -2.336719556, 1.0e-8); + EXPECT_NEAR(v1(0, 2), -2.942649664, 1.0e-8); + EXPECT_NEAR(v1(0, 3), -3.36679035, 1.0e-8); + EXPECT_NEAR(v1(0, 4), -3.704104452, 1.0e-8); + EXPECT_NEAR(vtau1(0, 0), 0, 1.0e-8); + EXPECT_NEAR(vtau1(0, 1), 0.0187099814, 1.0e-8); + EXPECT_NEAR(vtau1(0, 2), 0.01578002561, 1.0e-8); + EXPECT_NEAR(vtau1(0, 3), 0.01423896928, 1.0e-8); + EXPECT_NEAR(vtau1(0, 4), 0.01321861589, 1.0e-8); + + EXPECT_NEAR(et2, -32.72218711, 1.0e-8); + EXPECT_NEAR(vt2, -43.31358017, 1.0e-8); + EXPECT_NEAR(v2(0, 0), 0, 1.0e-8); + EXPECT_NEAR(v2(0, 1), -2.901190807, 1.0e-8); + EXPECT_NEAR(v2(0, 2), -3.662642983, 1.0e-8); + EXPECT_NEAR(v2(0, 3), -4.196098173, 1.0e-8); + EXPECT_NEAR(v2(0, 4), -4.620454375, 1.0e-8); + EXPECT_NEAR(v2(1, 0), 0, 1.0e-8); + EXPECT_NEAR(v2(1, 1), -1.285513329, 1.0e-8); + EXPECT_NEAR(v2(1, 2), -1.795172177, 1.0e-8); + EXPECT_NEAR(v2(1, 3), -2.064035864, 1.0e-8); + EXPECT_NEAR(v2(1, 4), -2.275487119, 1.0e-8); + EXPECT_NEAR(vtau2(0, 0), 0, 1.0e-8); + EXPECT_NEAR(vtau2(0, 1), 0.01677946177, 1.0e-8); + EXPECT_NEAR(vtau2(0, 2), 0.01410816304, 1.0e-8); + EXPECT_NEAR(vtau2(0, 3), 0.01263339482, 1.0e-8); + EXPECT_NEAR(vtau2(0, 4), 0.01165715023, 1.0e-8); + EXPECT_NEAR(vtau2(1, 0), 0, 1.0e-8); + EXPECT_NEAR(vtau2(1, 1), 0.01591158497, 1.0e-8); + EXPECT_NEAR(vtau2(1, 2), 0.07990709956, 1.0e-8); + EXPECT_NEAR(vtau2(1, 3), 0.04145463825, 1.0e-8); + EXPECT_NEAR(vtau2(1, 4), 0.0311787189, 1.0e-8); } - -int main(int argc, char **argv) +int main(int argc, char** argv) { MPI_Init(&argc, &argv); testing::InitGoogleTest(&argc, argv); diff --git a/source/module_hamilt_general/module_xc/xc_functional.cpp b/source/module_hamilt_general/module_xc/xc_functional.cpp index 70e85a5c30..6fb5af8337 100644 --- a/source/module_hamilt_general/module_xc/xc_functional.cpp +++ b/source/module_hamilt_general/module_xc/xc_functional.cpp @@ -1,22 +1,27 @@ #include "xc_functional.h" + #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" -#include "module_base/global_function.h" +#include "source_base/global_function.h" #ifdef USE_LIBXC #include "xc_functional_libxc.h" #endif -XC_Functional::XC_Functional(){} +XC_Functional::XC_Functional() +{ +} -XC_Functional::~XC_Functional(){} +XC_Functional::~XC_Functional() +{ +} std::vector XC_Functional::func_id(1); int XC_Functional::func_type = 0; bool XC_Functional::ked_flag = false; bool XC_Functional::use_libxc = true; double XC_Functional::hybrid_alpha = 0.25; -std::map XC_Functional::scaling_factor_xc = { {1, 1.0} }; // added by jghan, 2024-10-10 +std::map XC_Functional::scaling_factor_xc = {{1, 1.0}}; // added by jghan, 2024-10-10 void XC_Functional::set_hybrid_alpha(const double alpha_in) { @@ -29,15 +34,17 @@ void XC_Functional::set_xc_first_loop(const UnitCell& ucell) the first scf iteration only calculate the functional without exact exchange. but in "nscf" calculation, there is no need of "two-level" method. */ - if (ucell.atoms[0].ncpp.xc_func == "HF" - || ucell.atoms[0].ncpp.xc_func == "PBE0" - || ucell.atoms[0].ncpp.xc_func == "HSE") { + if (ucell.atoms[0].ncpp.xc_func == "HF" || ucell.atoms[0].ncpp.xc_func == "PBE0" + || ucell.atoms[0].ncpp.xc_func == "HSE") + { XC_Functional::set_xc_type("pbe"); } - else if (ucell.atoms[0].ncpp.xc_func == "SCAN0") { + else if (ucell.atoms[0].ncpp.xc_func == "SCAN0") + { XC_Functional::set_xc_type("scan"); } - else if (ucell.atoms[0].ncpp.xc_func == "B3LYP") { + else if (ucell.atoms[0].ncpp.xc_func == "B3LYP") + { XC_Functional::set_xc_type("blyp"); } } @@ -46,24 +53,24 @@ method. */ // for detail, refer to https://www.tddft.org/programs/libxc/functionals/ void XC_Functional::set_xc_type(const std::string xc_func_in) { - //Note : due to the separation of gcx_spin and gcc_spin, - //when you are adding new GGA functionals, - //please put exchange first, followed by correlation, - //such as for PBE we have: - // func_id.push_back(XC_GGA_X_PBE); - // func_id.push_back(XC_GGA_C_PBE); + // Note : due to the separation of gcx_spin and gcc_spin, + // when you are adding new GGA functionals, + // please put exchange first, followed by correlation, + // such as for PBE we have: + // func_id.push_back(XC_GGA_X_PBE); + // func_id.push_back(XC_GGA_C_PBE); func_id.clear(); scaling_factor_xc.clear(); // added by jghan, 2024-07-07 std::string xc_func = xc_func_in; std::transform(xc_func.begin(), xc_func.end(), xc_func.begin(), (::toupper)); - if( xc_func == "LDA" || xc_func == "PZ" || xc_func == "SLAPZNOGXNOGC") //SLA+PZ - { + if (xc_func == "LDA" || xc_func == "PZ" || xc_func == "SLAPZNOGXNOGC") // SLA+PZ + { func_id.push_back(XC_LDA_X); func_id.push_back(XC_LDA_C_PZ); func_type = 1; use_libxc = false; - } + } else if (xc_func == "PWLDA") { func_id.push_back(XC_LDA_X); @@ -71,127 +78,128 @@ void XC_Functional::set_xc_type(const std::string xc_func_in) func_type = 1; use_libxc = false; } - else if ( xc_func == "PBE" || xc_func == "SLAPWPBXPBC") //PBX+PBC - { + else if (xc_func == "PBE" || xc_func == "SLAPWPBXPBC") // PBX+PBC + { func_id.push_back(XC_GGA_X_PBE); func_id.push_back(XC_GGA_C_PBE); func_type = 2; use_libxc = false; - } - else if ( xc_func == "PBESOL") //PBX_S+PBC_S - { + } + else if (xc_func == "PBESOL") // PBX_S+PBC_S + { func_id.push_back(XC_GGA_X_PBE_SOL); func_id.push_back(XC_GGA_C_PBE_SOL); func_type = 2; use_libxc = false; - } - else if( xc_func == "REVPBE" ) //PBX_r+PBC - { - func_id.push_back(XC_GGA_X_PBE_R); + } + else if (xc_func == "REVPBE") // PBX_r+PBC + { + func_id.push_back(XC_GGA_X_PBE_R); func_id.push_back(XC_GGA_C_PBE); func_type = 2; use_libxc = false; - } - else if ( xc_func == "WC") //WC+PBC - { + } + else if (xc_func == "WC") // WC+PBC + { func_id.push_back(XC_GGA_X_WC); func_id.push_back(XC_GGA_C_PBE); func_type = 2; use_libxc = false; - } - else if ( xc_func == "BLYP") //B88+LYP - { + } + else if (xc_func == "BLYP") // B88+LYP + { func_id.push_back(XC_GGA_X_B88); func_id.push_back(XC_GGA_C_LYP); func_type = 2; use_libxc = false; - } - else if ( xc_func == "BP") //B88+P86 - { + } + else if (xc_func == "BP") // B88+P86 + { func_id.push_back(XC_GGA_X_B88); func_id.push_back(XC_GGA_C_P86); func_type = 2; use_libxc = false; - } - else if ( xc_func == "PW91") //PW91_X+PW91_C - { + } + else if (xc_func == "PW91") // PW91_X+PW91_C + { func_id.push_back(XC_GGA_X_PW91); func_id.push_back(XC_GGA_C_PW91); func_type = 2; use_libxc = false; - } - else if ( xc_func == "HCTH") //HCTH_X+HCTH_C - { + } + else if (xc_func == "HCTH") // HCTH_X+HCTH_C + { func_id.push_back(XC_GGA_X_HCTH_A); func_id.push_back(XC_GGA_C_HCTH_A); func_type = 2; use_libxc = false; - } - else if ( xc_func == "OLYP") //OPTX+LYP - { + } + else if (xc_func == "OLYP") // OPTX+LYP + { func_id.push_back(XC_GGA_X_OPTX); func_id.push_back(XC_GGA_C_LYP); func_type = 2; use_libxc = false; - } + } #ifdef USE_LIBXC - else if ( xc_func == "SCAN") - { + else if (xc_func == "SCAN") + { func_id.push_back(XC_MGGA_X_SCAN); func_id.push_back(XC_MGGA_C_SCAN); func_type = 3; use_libxc = true; - } - else if ( xc_func == "SCAN0") - { + } + else if (xc_func == "SCAN0") + { func_id.push_back(XC_MGGA_X_SCAN); func_id.push_back(XC_MGGA_C_SCAN); func_type = 5; use_libxc = true; - } + } #endif - else if( xc_func == "HF") + else if (xc_func == "HF") { func_type = 4; use_libxc = false; } - else if( xc_func == "PBE0") - { + else if (xc_func == "PBE0") + { func_id.push_back(XC_HYB_GGA_XC_PBEH); func_type = 4; use_libxc = false; - } - else if( xc_func == "OPT_ORB" || xc_func == "NONE" || xc_func == "NOX+NOC") + } + else if (xc_func == "OPT_ORB" || xc_func == "NONE" || xc_func == "NOX+NOC") { // not doing anything } - else if( xc_func == "MULLER" || xc_func == "POWER" ) // added by jghan, 2024-07-06 + else if (xc_func == "MULLER" || xc_func == "POWER") // added by jghan, 2024-07-06 { func_type = 4; use_libxc = false; } #ifdef USE_LIBXC - else if( xc_func == "HSE") + else if (xc_func == "HSE") { func_id.push_back(XC_HYB_GGA_XC_HSE06); func_type = 4; use_libxc = true; } // added by jghan, 2024-07-06 - else if( xc_func == "WP22") + else if (xc_func == "WP22") { - func_id.push_back(XC_GGA_X_ITYH); // short-range of B88_X, id=529 - func_id.push_back(XC_GGA_C_LYPR); // short-range of LYP_C, id=624 + func_id.push_back(XC_GGA_X_ITYH); // short-range of B88_X, id=529 + func_id.push_back(XC_GGA_C_LYPR); // short-range of LYP_C, id=624 func_type = 4; use_libxc = true; } - else if( xc_func == "CWP22") - { - // BLYP_XC_lr = -BLYP_XC_sr + BLYP_XC, the realization of it is in v_xc_libxc() function, xc_functional_libxc_vxc.cpp - func_id.push_back(XC_GGA_X_ITYH); // short-range of B88_X, id=529 - func_id.push_back(XC_GGA_C_LYPR); // short-range of LYP_C, id=624 - func_id.push_back(XC_GGA_X_B88); // complete B88_X, id=106 - func_id.push_back(XC_GGA_C_LYP); // complete LYP_C, id=131 + else if (xc_func == "CWP22") + { + // BLYP_XC_lr = -BLYP_XC_sr + BLYP_XC, the realization of it is in v_xc_libxc() function, + // xc_functional_libxc_vxc.cpp + func_id.push_back(XC_GGA_X_ITYH); // short-range of B88_X, id=529 + func_id.push_back(XC_GGA_C_LYPR); // short-range of LYP_C, id=624 + func_id.push_back(XC_GGA_X_B88); // complete B88_X, id=106 + func_id.push_back(XC_GGA_C_LYP); // complete LYP_C, id=131 // the scaling factor of CWP22-functionals scaling_factor_xc[XC_GGA_X_ITYH] = -1.0; @@ -202,13 +210,14 @@ void XC_Functional::set_xc_type(const std::string xc_func_in) func_type = 4; use_libxc = true; } - else if( xc_func == "BLYP_LR") - { - // BLYP_XC_lr = -BLYP_XC_sr + BLYP_XC, the realization of it is in v_xc_libxc() function, xc_functional_libxc_vxc.cpp - func_id.push_back(XC_GGA_X_ITYH); // short-range of B88_X, id=529 - func_id.push_back(XC_GGA_C_LYPR); // short-range of LYP_C, id=624 - func_id.push_back(XC_GGA_X_B88); // complete B88_X, id=106 - func_id.push_back(XC_GGA_C_LYP); // complete LYP_C, id=131 + else if (xc_func == "BLYP_LR") + { + // BLYP_XC_lr = -BLYP_XC_sr + BLYP_XC, the realization of it is in v_xc_libxc() function, + // xc_functional_libxc_vxc.cpp + func_id.push_back(XC_GGA_X_ITYH); // short-range of B88_X, id=529 + func_id.push_back(XC_GGA_C_LYPR); // short-range of LYP_C, id=624 + func_id.push_back(XC_GGA_X_B88); // complete B88_X, id=106 + func_id.push_back(XC_GGA_C_LYP); // complete LYP_C, id=131 // the scaling factor of BLYP_LR-functionals scaling_factor_xc[XC_GGA_X_ITYH] = -1.0; @@ -229,17 +238,18 @@ void XC_Functional::set_xc_type(const std::string xc_func_in) else { #ifdef USE_LIBXC - //see if it matches libxc functionals - const std::pair> type_id = XC_Functional_Libxc::set_xc_type_libxc(xc_func); + // see if it matches libxc functionals + const std::pair> type_id = XC_Functional_Libxc::set_xc_type_libxc(xc_func); func_type = std::get<0>(type_id); func_id = std::get<1>(type_id); use_libxc = true; #else - std::string message = "Unrecognized exchange-correlation functional '"+ xc_func +"'.\n" - " Possible source: Pseudopotential file or dft_functional parameter.\n" - " Please explicitly set dft_functional in INPUT,\n" - " or verify the functional name is supported."; - ModuleBase::WARNING_QUIT("xc_functional.cpp",message); + std::string message = "Unrecognized exchange-correlation functional '" + xc_func + + "'.\n" + " Possible source: Pseudopotential file or dft_functional parameter.\n" + " Please explicitly set dft_functional in INPUT,\n" + " or verify the functional name is supported."; + ModuleBase::WARNING_QUIT("xc_functional.cpp", message); #endif } @@ -257,25 +267,24 @@ void XC_Functional::set_xc_type(const std::string xc_func_in) // { // ModuleBase::WARNING_QUIT("set_xc_type","hybrid functional not realized for planewave yet"); // } - if((func_type == 3 || func_type == 5) && PARAM.inp.nspin==4) + if ((func_type == 3 || func_type == 5) && PARAM.inp.nspin == 4) { - ModuleBase::WARNING_QUIT("set_xc_type","meta-GGA has not been implemented for nspin = 4 yet"); + ModuleBase::WARNING_QUIT("set_xc_type", "meta-GGA has not been implemented for nspin = 4 yet"); } #ifndef __EXX - if((func_type == 4 || func_type == 5) && PARAM.inp.basis_type == "lcao") + if ((func_type == 4 || func_type == 5) && PARAM.inp.basis_type == "lcao") { - ModuleBase::WARNING_QUIT("set_xc_type","compile with libri to use hybrid functional in lcao basis"); + ModuleBase::WARNING_QUIT("set_xc_type", "compile with libri to use hybrid functional in lcao basis"); } #endif #ifndef USE_LIBXC - if(xc_func == "SCAN" || xc_func == "HSE" || xc_func == "SCAN0" - || xc_func == "MULLER" || xc_func == "POWER" || xc_func == "WP22" || xc_func == "CWP22") + if (xc_func == "SCAN" || xc_func == "HSE" || xc_func == "SCAN0" || xc_func == "MULLER" || xc_func == "POWER" + || xc_func == "WP22" || xc_func == "CWP22") { - ModuleBase::WARNING_QUIT("set_xc_type","to use SCAN, SCAN0, or HSE, LIBXC is required"); + ModuleBase::WARNING_QUIT("set_xc_type", "to use SCAN, SCAN0, or HSE, LIBXC is required"); } use_libxc = false; #endif - } diff --git a/source/module_hamilt_general/module_xc/xc_functional.h b/source/module_hamilt_general/module_xc/xc_functional.h index c0fbc91744..2c568c1270 100644 --- a/source/module_hamilt_general/module_xc/xc_functional.h +++ b/source/module_hamilt_general/module_xc/xc_functional.h @@ -9,60 +9,58 @@ #include #else #include "xc_funcs.h" -#endif // ifdef USE_LIBXC -#include "module_base/macros.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/vector3.h" -#include "module_base/matrix.h" +#endif // ifdef USE_LIBXC #include "exx_info.h" #include "module_basis/module_pw/pw_basis_k.h" -#include "module_elecstate/module_charge/charge.h" #include "module_cell/unitcell.h" +#include "module_elecstate/module_charge/charge.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/macros.h" +#include "source_base/matrix.h" +#include "source_base/vector3.h" #include // added by jghan, 2024-10-10 class XC_Functional { - public: - - XC_Functional(); - ~XC_Functional(); - -//------------------- -// subroutines, grouped according to the file they are in: -//------------------- - -//------------------- -// xc_functional_vxc.cpp -//------------------- - -// This file contains interface to the xc_functional class -// it includes 3 subroutines: -// 1. v_xc : which takes rho as input, and [etxc, vtxc, v_xc] as output -// 2. v_xc_libxc : which does the same thing as v_xc, but calling libxc -// NOTE : it is only used for nspin = 1 and 2, the nspin = 4 case is treated in v_xc -// 3. v_xc_meta : which takes rho and tau as input, and v_xc as output - - // compute the exchange-correlation energy - // [etxc, vtxc, v] = v_xc(...) - static std::tuple v_xc( - const int &nrxx, // number of real-space grid - const Charge* const chr, - const UnitCell *ucell); // charge density - -//------------------- -// xc_functional.cpp -//------------------- - -// This file contains subroutines for setting the functional -// it includes 4 subroutines: -// 1. get_func_type : which returns the type of functional (func_type): -// 0 = none; 1 = lda; 2 = gga; 3 = mgga; 4 = hybrid lda/gga; 5 = hybrid mgga -// 2. set_xc_type : sets the value of: -// func_id, which is the LIBXC id of functional -// func_type, which is as specified in get_func_type -// use_libxc, whether to use LIBXC. The rule is to NOT use it for functionals that we already have. + public: + XC_Functional(); + ~XC_Functional(); + + //------------------- + // subroutines, grouped according to the file they are in: + //------------------- + + //------------------- + // xc_functional_vxc.cpp + //------------------- + + // This file contains interface to the xc_functional class + // it includes 3 subroutines: + // 1. v_xc : which takes rho as input, and [etxc, vtxc, v_xc] as output + // 2. v_xc_libxc : which does the same thing as v_xc, but calling libxc + // NOTE : it is only used for nspin = 1 and 2, the nspin = 4 case is treated in v_xc + // 3. v_xc_meta : which takes rho and tau as input, and v_xc as output + + // compute the exchange-correlation energy + // [etxc, vtxc, v] = v_xc(...) + static std::tuple v_xc(const int& nrxx, // number of real-space grid + const Charge* const chr, + const UnitCell* ucell); // charge density + + //------------------- + // xc_functional.cpp + //------------------- + + // This file contains subroutines for setting the functional + // it includes 4 subroutines: + // 1. get_func_type : which returns the type of functional (func_type): + // 0 = none; 1 = lda; 2 = gga; 3 = mgga; 4 = hybrid lda/gga; 5 = hybrid mgga + // 2. set_xc_type : sets the value of: + // func_id, which is the LIBXC id of functional + // func_type, which is as specified in get_func_type + // use_libxc, whether to use LIBXC. The rule is to NOT use it for functionals that we already have. static int get_func_type() { @@ -83,94 +81,98 @@ class XC_Functional /// Usually in exx caculation, the first SCF loop should be converged with PBE static void set_xc_first_loop(const UnitCell& ucell); - private: - - static std::vector func_id; // libxc id of functional - static int func_type; //0:none, 1:lda, 2:gga, 3:mgga, 4:hybrid lda/gga, 5:hybrid mgga - static bool ked_flag; // whether the functional has kinetic energy density + private: + static std::vector func_id; // libxc id of functional + static int func_type; // 0:none, 1:lda, 2:gga, 3:mgga, 4:hybrid lda/gga, 5:hybrid mgga + static bool ked_flag; // whether the functional has kinetic energy density static bool use_libxc; // exx_hybrid_alpha for mixing exx in hybrid functional: static double hybrid_alpha; - // added by jghan, 2024-07-07 - // as a scaling factor for different xc-functionals - static std::map scaling_factor_xc; - - public: - static std::vector get_func_id() { return func_id; } - -//------------------- -// xc_functional_wrapper_xc.cpp -//------------------- - -// This file contains wrapper for the LDA functionals -// it includes 3 subroutines: -// 1. xc, which is the wrapper of LDA part -// (i.e. LDA functional and LDA part of GGA functional) -// 2. xc_spin, which is the spin polarized counterpart of xc -// 3. xc_spin_libxc, which is the wrapper for LDA functional, spin polarized - -// NOTE : In our own realization of GGA functional, the LDA part -// and gradient correction are calculated separately. -// The LDA part is provided in xc, while the gradient correction is -// provided in gradcorr through gcxc/gcx_spin+gcc_spin. -// While in LIBXC, the entire GGA functional is provided. -// As a result, xc/xc_spin and xc_spin_libxc are different for GGA, -// the former gives nonzero result, while the latter returns 0. -// Furthermore, the reason for not having xc_libxc is that something like -// xc_libxc which evaluates functional for individual grid points -// is not efficient. For nspin = 1 and 2, v_xc_libxc evaluates potential -// on the entire grid. I'm having xc_spin_libxc because v_xc_libxc -// does not support nspin = 4. - - public: - - // LDA - static void xc(const double &rho, double &exc, double &vxc); - - // LSDA - static void xc_spin(const double &rho, const double &zeta, - double &exc, double &vxcup, double &vxcdw); - -//------------------- -// xc_functional_wrapper_gcxc.cpp -//------------------- - -// This file contains wrapper for the GGA functionals -// it includes 4 subroutines: -// 1. gcxc, which is the wrapper for gradient correction part -// 2. gcx_spin, spin polarized, exchange only -// 3. gcc_spin, spin polarized, correlation only - -// The difference between our realization (gcxc/gcx_spin/gcc_spin) and -// LIBXC, and the reason for not having gcxc_libxc is explained -// in the NOTE in the comment for xc_functional_wrapper_wc.cpp part - - // GGA - static void gcxc(const double &rho, const double &grho, - double &sxc, double &v1xc, double &v2xc); - - // spin polarized GGA - static void gcx_spin(double rhoup, double rhodw, double grhoup2, double grhodw2, - double &sx, double &v1xup, double &v1xdw, double &v2xup, - double &v2xdw); - static void gcc_spin(double rho, double &zeta, double grho, double &sc, - double &v1cup, double &v1cdw, double &v2c); - -//------------------- -// xc_functional_gradcorr.cpp -//------------------- - -// This file contains subroutines realted to gradient calculations -// it contains 5 subroutines: -// 1. gradcorr, which calculates gradient correction -// 2. grad_wfc, which calculates gradient of wavefunction -// it is used in stress_func_mgga.cpp -// 3. grad_rho, which calculates gradient of density -// 4. grad_dot, which calculates divergence of something -// 5. noncolin_rho, which diagonalizes the spin density matrix -// and gives the spin up and spin down components of the charge. + // added by jghan, 2024-07-07 + // as a scaling factor for different xc-functionals + static std::map scaling_factor_xc; + + public: + static std::vector get_func_id() + { + return func_id; + } + + //------------------- + // xc_functional_wrapper_xc.cpp + //------------------- + + // This file contains wrapper for the LDA functionals + // it includes 3 subroutines: + // 1. xc, which is the wrapper of LDA part + // (i.e. LDA functional and LDA part of GGA functional) + // 2. xc_spin, which is the spin polarized counterpart of xc + // 3. xc_spin_libxc, which is the wrapper for LDA functional, spin polarized + + // NOTE : In our own realization of GGA functional, the LDA part + // and gradient correction are calculated separately. + // The LDA part is provided in xc, while the gradient correction is + // provided in gradcorr through gcxc/gcx_spin+gcc_spin. + // While in LIBXC, the entire GGA functional is provided. + // As a result, xc/xc_spin and xc_spin_libxc are different for GGA, + // the former gives nonzero result, while the latter returns 0. + // Furthermore, the reason for not having xc_libxc is that something like + // xc_libxc which evaluates functional for individual grid points + // is not efficient. For nspin = 1 and 2, v_xc_libxc evaluates potential + // on the entire grid. I'm having xc_spin_libxc because v_xc_libxc + // does not support nspin = 4. + + public: + // LDA + static void xc(const double& rho, double& exc, double& vxc); + + // LSDA + static void xc_spin(const double& rho, const double& zeta, double& exc, double& vxcup, double& vxcdw); + + //------------------- + // xc_functional_wrapper_gcxc.cpp + //------------------- + + // This file contains wrapper for the GGA functionals + // it includes 4 subroutines: + // 1. gcxc, which is the wrapper for gradient correction part + // 2. gcx_spin, spin polarized, exchange only + // 3. gcc_spin, spin polarized, correlation only + + // The difference between our realization (gcxc/gcx_spin/gcc_spin) and + // LIBXC, and the reason for not having gcxc_libxc is explained + // in the NOTE in the comment for xc_functional_wrapper_wc.cpp part + + // GGA + static void gcxc(const double& rho, const double& grho, double& sxc, double& v1xc, double& v2xc); + + // spin polarized GGA + static void gcx_spin(double rhoup, + double rhodw, + double grhoup2, + double grhodw2, + double& sx, + double& v1xup, + double& v1xdw, + double& v2xup, + double& v2xdw); + static void gcc_spin(double rho, double& zeta, double grho, double& sc, double& v1cup, double& v1cdw, double& v2c); + + //------------------- + // xc_functional_gradcorr.cpp + //------------------- + + // This file contains subroutines realted to gradient calculations + // it contains 5 subroutines: + // 1. gradcorr, which calculates gradient correction + // 2. grad_wfc, which calculates gradient of wavefunction + // it is used in stress_func_mgga.cpp + // 3. grad_rho, which calculates gradient of density + // 4. grad_dot, which calculates divergence of something + // 5. noncolin_rho, which diagonalizes the spin density matrix + // and gives the spin up and spin down components of the charge. static void gradcorr(double& etxc, double& vtxc, @@ -180,22 +182,16 @@ class XC_Functional const UnitCell* ucell, std::vector& stress_gga, const bool is_stress = false); - template ::type> - static void grad_wfc( - const int ik, - const Real tpiba, - const ModulePW::PW_Basis_K* wfc_basis, - const T* rhog, - T* grad); + template ::type> + static void grad_wfc(const int ik, const Real tpiba, const ModulePW::PW_Basis_K* wfc_basis, const T* rhog, T* grad); static void grad_rho(const std::complex* rhog, ModuleBase::Vector3* gdr, const ModulePW::PW_Basis* rho_basis, const double tpiba); static void grad_dot(const ModuleBase::Vector3* h, - double* dh, - const ModulePW::PW_Basis* rho_basis, - const double tpiba); + double* dh, + const ModulePW::PW_Basis* rho_basis, + const double tpiba); static void noncolin_rho(double* rhoout1, double* rhoout2, double* seg, @@ -218,113 +214,115 @@ class XC_Functional // 2. slater1_spin // 3. slater_rxc_spin - // For LDA exchange energy - static void slater(const double &rs, double &ex, double &vx); - static void slater1(const double &rs, double &ex, double &vx); - static void slater_rxc(const double &rs, double &ex, double &vx); - - // For LSDA exchange energy - static void slater_spin( const double &rho, const double &zeta, - double &ex, double &vxup, double &vxdw); - static void slater1_spin( const double &rho, const double &zeta, - double &ex, double &vxup, double &vxdw); - static void slater_rxc_spin( const double &rho, const double &z, - double &ex, double &vxup, double &vxdw); - -//------------------- -// xc_funct_corr_lda.cpp -//------------------- - -// This file contains realization of LDA correlation functionals -// Spin unpolarized ones: -// 1. pw : Perdew-Wang LDA correlation -// 2. pz : Perdew-Zunger LDA correlation -// 3. lyp : Lee-Yang-Parr correlation -// 4. vwn : Vosko-Wilk-Nusair LDA correlation -// 5. wigner : Wigner -// 6. hl : Hedin-Lunqvist -// 7. gl : Gunnarson-Lunqvist -// And some of their spin polarized counterparts: -// 1. pw_spin -// 2. pz_spin, which calls pz_polarized - - // For LDA correlation energy - static void pw(const double &rs, const int &iflag, double &ec, double &vc); - static void pz(const double &rs, const int &iflag, double &ec, double &vc); - static void lyp(const double &rs, double &ec, double &vc); - static void vwn(const double &rs, double &ec, double &vc); - static void wigner(const double &rs, double &ec, double &vc); - static void hl(const double &rs, double &ec, double &vc); - static void gl(const double &rs, double &ec, double &vc); - - // For LSDA correlation energy - static void pw_spin( const double &rs, const double &zeta, - double &ec, double &vcup, double &vcdw); - static void pz_spin( const double &rs, const double &zeta, - double &ec, double &vcup, double &vcdw); - static void pz_polarized( const double &rs, double &ec, double &vc); - -//------------------- -// xc_funct_exch_gga.cpp -//------------------- - -// This file contains realizations of gradient correction to exchange part -// Spin unpolarized ones: -// 1. becke88 : Becke88 exchange -// 2. ggax : PW91 exchange -// 3. pbex : PBE exchange (and revPBE) -// 4. optx : OPTX, Handy et al. -// 5. wcx : Wu-Cohen exchange -// And some of their spin polarized counterparts: -// 1. becke88_spin - - static void becke88(const double &rho, const double &grho, double &sx, double &v1x, double &v2x); - static void ggax(const double &rho, const double &grho, double &sx, double &v1x, double &v2x); - static void pbex(const double &rho, const double &grho, const int &iflag, - double &sx, double &v1x, double &v2x); - static void optx(const double rho, const double grho, double &sx, double &v1x, double &v2x); - static void wcx(const double &rho,const double &grho, double &sx, double &v1x, double &v2x); - - static void becke88_spin(double rho, double grho, double &sx, double &v1x, - double &v2x); - -//------------------- -// xc_funct_corr_gga.cpp -//------------------- - -// This file contains realizations of gradient correction to correlation part -// Spin unpolarized ones: -// 1. perdew86 : P86 -// 2. ggac : PW91 -// 3. pbec -// 4. glyp -// And some of their spin polarized counterparts: -// 1. perdew86_spin -// 2. ggac_spin -// 3. pbec_spin - - static void perdew86(const double rho, const double grho, double &sc, double &v1c, double &v2c); - static void ggac(const double &rho,const double &grho, double &sc, double &v1c, double &v2c); - static void pbec(const double &rho, const double &grho, const int &flag, - double &sc, double &v1c, double &v2c); - static void glyp(const double &rho, const double &grho, double &sc, double &v1c, double &v2c); - - static void perdew86_spin(double rho, double zeta, double grho, double &sc, - double &v1cup, double &v1cdw, double &v2c); - //static void ggac_spin(double rho, double zeta, double grho, double &sc, - // double &v1cup, double &v1cdw, double &v2c); - static void pbec_spin(double rho, double zeta, double grho, const int &flag, double &sc, - double &v1cup, double &v1cdw, double &v2c); - -//------------------- -// xc_funct_hcth.cpp -//------------------- -// This file contains realizations of the HCTH GGA functional -// hcth calls pwcorr - - static void hcth(const double rho, const double grho, double &sx, double &v1x, double &v2x); - static void pwcorr(const double r, const double c[], double &g, double &dg); + // For LDA exchange energy + static void slater(const double& rs, double& ex, double& vx); + static void slater1(const double& rs, double& ex, double& vx); + static void slater_rxc(const double& rs, double& ex, double& vx); + + // For LSDA exchange energy + static void slater_spin(const double& rho, const double& zeta, double& ex, double& vxup, double& vxdw); + static void slater1_spin(const double& rho, const double& zeta, double& ex, double& vxup, double& vxdw); + static void slater_rxc_spin(const double& rho, const double& z, double& ex, double& vxup, double& vxdw); + + //------------------- + // xc_funct_corr_lda.cpp + //------------------- + + // This file contains realization of LDA correlation functionals + // Spin unpolarized ones: + // 1. pw : Perdew-Wang LDA correlation + // 2. pz : Perdew-Zunger LDA correlation + // 3. lyp : Lee-Yang-Parr correlation + // 4. vwn : Vosko-Wilk-Nusair LDA correlation + // 5. wigner : Wigner + // 6. hl : Hedin-Lunqvist + // 7. gl : Gunnarson-Lunqvist + // And some of their spin polarized counterparts: + // 1. pw_spin + // 2. pz_spin, which calls pz_polarized + + // For LDA correlation energy + static void pw(const double& rs, const int& iflag, double& ec, double& vc); + static void pz(const double& rs, const int& iflag, double& ec, double& vc); + static void lyp(const double& rs, double& ec, double& vc); + static void vwn(const double& rs, double& ec, double& vc); + static void wigner(const double& rs, double& ec, double& vc); + static void hl(const double& rs, double& ec, double& vc); + static void gl(const double& rs, double& ec, double& vc); + + // For LSDA correlation energy + static void pw_spin(const double& rs, const double& zeta, double& ec, double& vcup, double& vcdw); + static void pz_spin(const double& rs, const double& zeta, double& ec, double& vcup, double& vcdw); + static void pz_polarized(const double& rs, double& ec, double& vc); + + //------------------- + // xc_funct_exch_gga.cpp + //------------------- + + // This file contains realizations of gradient correction to exchange part + // Spin unpolarized ones: + // 1. becke88 : Becke88 exchange + // 2. ggax : PW91 exchange + // 3. pbex : PBE exchange (and revPBE) + // 4. optx : OPTX, Handy et al. + // 5. wcx : Wu-Cohen exchange + // And some of their spin polarized counterparts: + // 1. becke88_spin + + static void becke88(const double& rho, const double& grho, double& sx, double& v1x, double& v2x); + static void ggax(const double& rho, const double& grho, double& sx, double& v1x, double& v2x); + static void pbex(const double& rho, const double& grho, const int& iflag, double& sx, double& v1x, double& v2x); + static void optx(const double rho, const double grho, double& sx, double& v1x, double& v2x); + static void wcx(const double& rho, const double& grho, double& sx, double& v1x, double& v2x); + + static void becke88_spin(double rho, double grho, double& sx, double& v1x, double& v2x); + + //------------------- + // xc_funct_corr_gga.cpp + //------------------- + + // This file contains realizations of gradient correction to correlation part + // Spin unpolarized ones: + // 1. perdew86 : P86 + // 2. ggac : PW91 + // 3. pbec + // 4. glyp + // And some of their spin polarized counterparts: + // 1. perdew86_spin + // 2. ggac_spin + // 3. pbec_spin + + static void perdew86(const double rho, const double grho, double& sc, double& v1c, double& v2c); + static void ggac(const double& rho, const double& grho, double& sc, double& v1c, double& v2c); + static void pbec(const double& rho, const double& grho, const int& flag, double& sc, double& v1c, double& v2c); + static void glyp(const double& rho, const double& grho, double& sc, double& v1c, double& v2c); + + static void perdew86_spin(double rho, + double zeta, + double grho, + double& sc, + double& v1cup, + double& v1cdw, + double& v2c); + // static void ggac_spin(double rho, double zeta, double grho, double &sc, + // double &v1cup, double &v1cdw, double &v2c); + static void pbec_spin(double rho, + double zeta, + double grho, + const int& flag, + double& sc, + double& v1cup, + double& v1cdw, + double& v2c); + + //------------------- + // xc_funct_hcth.cpp + //------------------- + // This file contains realizations of the HCTH GGA functional + // hcth calls pwcorr + static void hcth(const double rho, const double grho, double& sx, double& v1x, double& v2x); + static void pwcorr(const double r, const double c[], double& g, double& dg); }; -#endif //XC_FUNCTION_H +#endif // XC_FUNCTION_H diff --git a/source/module_hamilt_general/module_xc/xc_functional_gradcorr.cpp b/source/module_hamilt_general/module_xc/xc_functional_gradcorr.cpp index 4250146510..00e114804e 100644 --- a/source/module_hamilt_general/module_xc/xc_functional_gradcorr.cpp +++ b/source/module_hamilt_general/module_xc/xc_functional_gradcorr.cpp @@ -8,10 +8,11 @@ // 5. noncolin_rho, which diagonalizes the spin density matrix // and gives the spin up and spin down components of the charge. -#include "xc_functional.h" -#include "module_base/timer.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" +#include "xc_functional.h" + #include #include #include @@ -22,760 +23,857 @@ #endif // from gradcorr.f90 -void XC_Functional::gradcorr(double &etxc, double &vtxc, ModuleBase::matrix &v, - const Charge* const chr, ModulePW::PW_Basis* rhopw, const UnitCell *ucell, - std::vector &stress_gga, const bool is_stress) +void XC_Functional::gradcorr(double& etxc, + double& vtxc, + ModuleBase::matrix& v, + const Charge* const chr, + ModulePW::PW_Basis* rhopw, + const UnitCell* ucell, + std::vector& stress_gga, + const bool is_stress) { - ModuleBase::TITLE("XC_Functional","gradcorr"); - - if(func_type == 0 || func_type == 1) { return; } // none or LDA functional - - bool igcc_is_lyp = false; - if( func_id[1] == XC_GGA_C_LYP) { igcc_is_lyp = true; } - - int nspin0 = PARAM.inp.nspin; - if(PARAM.inp.nspin==4) { nspin0 =1; } - if(PARAM.inp.nspin==4&&(PARAM.globalv.domag||PARAM.globalv.domag_z)) { nspin0 = 2; } - - assert(nspin0>0); - const double fac = 1.0/ nspin0; - - if(is_stress) - { - stress_gga.resize(9); - for(int i=0;i<9;i++) - { - stress_gga[i] = 0.0; - } - } - - // doing FFT to get rho in G space: rhog1 + ModuleBase::TITLE("XC_Functional", "gradcorr"); + + if (func_type == 0 || func_type == 1) + { + return; + } // none or LDA functional + + bool igcc_is_lyp = false; + if (func_id[1] == XC_GGA_C_LYP) + { + igcc_is_lyp = true; + } + + int nspin0 = PARAM.inp.nspin; + if (PARAM.inp.nspin == 4) + { + nspin0 = 1; + } + if (PARAM.inp.nspin == 4 && (PARAM.globalv.domag || PARAM.globalv.domag_z)) + { + nspin0 = 2; + } + + assert(nspin0 > 0); + const double fac = 1.0 / nspin0; + + if (is_stress) + { + stress_gga.resize(9); + for (int i = 0; i < 9; i++) + { + stress_gga[i] = 0.0; + } + } + + // doing FFT to get rho in G space: rhog1 rhopw->real2recip(chr->rho[0], chr->rhog[0]); - if(PARAM.inp.nspin==2)//mohan fix bug 2012-05-28 - { - rhopw->real2recip(chr->rho[1], chr->rhog[1]); - } + if (PARAM.inp.nspin == 2) // mohan fix bug 2012-05-28 + { + rhopw->real2recip(chr->rho[1], chr->rhog[1]); + } rhopw->real2recip(chr->rho_core, chr->rhog_core); - - // sum up (rho_core+rho) for each spin in real space - // and reciprocal space. - double* rhotmp1 = nullptr; - double* rhotmp2 = nullptr; - std::complex* rhogsum1 = nullptr; - std::complex* rhogsum2 = nullptr; - ModuleBase::Vector3* gdr1 = nullptr; - ModuleBase::Vector3* gdr2 = nullptr; - ModuleBase::Vector3* h1 = nullptr; - ModuleBase::Vector3* h2 = nullptr; - double* neg = nullptr; - double** vsave = nullptr; - double** vgg = nullptr; - - // for spin unpolarized case, - // calculate the gradient of (rho_core+rho) in reciprocal space. - rhotmp1 = new double[rhopw->nrxx]; - rhogsum1 = new std::complex[rhopw->npw]; + + // sum up (rho_core+rho) for each spin in real space + // and reciprocal space. + double* rhotmp1 = nullptr; + double* rhotmp2 = nullptr; + std::complex* rhogsum1 = nullptr; + std::complex* rhogsum2 = nullptr; + ModuleBase::Vector3* gdr1 = nullptr; + ModuleBase::Vector3* gdr2 = nullptr; + ModuleBase::Vector3* h1 = nullptr; + ModuleBase::Vector3* h2 = nullptr; + double* neg = nullptr; + double** vsave = nullptr; + double** vgg = nullptr; + + // for spin unpolarized case, + // calculate the gradient of (rho_core+rho) in reciprocal space. + rhotmp1 = new double[rhopw->nrxx]; + rhogsum1 = new std::complex[rhopw->npw]; #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ir=0; irnrxx; ir++) - { - rhotmp1[ir] = chr->rho[0][ir] + fac * chr->rho_core[ir]; - } + for (int ir = 0; ir < rhopw->nrxx; ir++) + { + rhotmp1[ir] = chr->rho[0][ir] + fac * chr->rho_core[ir]; + } #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ig=0; ignpw; ig++) - { - rhogsum1[ig] = chr->rhog[0][ig] + fac * chr->rhog_core[ig]; - } - - gdr1 = new ModuleBase::Vector3[rhopw->nrxx]; - if(!is_stress) { h1 = new ModuleBase::Vector3[rhopw->nrxx]; } - - XC_Functional::grad_rho( rhogsum1 , gdr1, rhopw, ucell->tpiba); - - // for spin polarized case; - // calculate the gradient of (rho_core+rho) in reciprocal space. - if(PARAM.inp.nspin==2) - { - rhotmp2 = new double[rhopw->nrxx]; - rhogsum2 = new std::complex[rhopw->npw]; + for (int ig = 0; ig < rhopw->npw; ig++) + { + rhogsum1[ig] = chr->rhog[0][ig] + fac * chr->rhog_core[ig]; + } + + gdr1 = new ModuleBase::Vector3[rhopw->nrxx]; + if (!is_stress) + { + h1 = new ModuleBase::Vector3[rhopw->nrxx]; + } + + XC_Functional::grad_rho(rhogsum1, gdr1, rhopw, ucell->tpiba); + + // for spin polarized case; + // calculate the gradient of (rho_core+rho) in reciprocal space. + if (PARAM.inp.nspin == 2) + { + rhotmp2 = new double[rhopw->nrxx]; + rhogsum2 = new std::complex[rhopw->npw]; #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ir=0; irnrxx; ir++) - { - rhotmp2[ir] = chr->rho[1][ir] + fac * chr->rho_core[ir]; - } + for (int ir = 0; ir < rhopw->nrxx; ir++) + { + rhotmp2[ir] = chr->rho[1][ir] + fac * chr->rho_core[ir]; + } #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ig=0; ignpw; ig++) - { - rhogsum2[ig] = chr->rhog[1][ig] + fac * chr->rhog_core[ig]; - } - - gdr2 = new ModuleBase::Vector3[rhopw->nrxx]; - if(!is_stress) { h2 = new ModuleBase::Vector3[rhopw->nrxx]; } - - XC_Functional::grad_rho( rhogsum2 , gdr2, rhopw, ucell->tpiba); - } - - if(PARAM.inp.nspin == 4&&(PARAM.globalv.domag||PARAM.globalv.domag_z)) - { - rhotmp2 = new double[rhopw->nrxx]; - rhogsum2 = new std::complex[rhopw->npw]; - neg = new double [rhopw->nrxx]; + for (int ig = 0; ig < rhopw->npw; ig++) + { + rhogsum2[ig] = chr->rhog[1][ig] + fac * chr->rhog_core[ig]; + } + + gdr2 = new ModuleBase::Vector3[rhopw->nrxx]; + if (!is_stress) + { + h2 = new ModuleBase::Vector3[rhopw->nrxx]; + } + + XC_Functional::grad_rho(rhogsum2, gdr2, rhopw, ucell->tpiba); + } + + if (PARAM.inp.nspin == 4 && (PARAM.globalv.domag || PARAM.globalv.domag_z)) + { + rhotmp2 = new double[rhopw->nrxx]; + rhogsum2 = new std::complex[rhopw->npw]; + neg = new double[rhopw->nrxx]; #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ir=0; irnrxx; ir++) - { - rhotmp1[ir] = 0.0; - rhotmp2[ir] = 0.0; - neg[ir] = 0.0; - } + for (int ir = 0; ir < rhopw->nrxx; ir++) + { + rhotmp1[ir] = 0.0; + rhotmp2[ir] = 0.0; + neg[ir] = 0.0; + } #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ig=0; ignpw; ig++) - { - rhogsum1[ig] = 0.0; - rhogsum2[ig] = 0.0; - } - if(!is_stress) - { - vsave = new double* [PARAM.inp.nspin]; - for(int is = 0;isnrxx]; - } + for (int ig = 0; ig < rhopw->npw; ig++) + { + rhogsum1[ig] = 0.0; + rhogsum2[ig] = 0.0; + } + if (!is_stress) + { + vsave = new double*[PARAM.inp.nspin]; + for (int is = 0; is < PARAM.inp.nspin; is++) + { + vsave[is] = new double[rhopw->nrxx]; + } #ifdef _OPENMP #pragma omp parallel for collapse(2) schedule(static, 1024) #endif - for(int is = 0;isnrxx;ir++){ - vsave[is][ir] = v(is,ir); - v(is,ir) = 0; - } - } - vgg = new double* [nspin0]; - for(int is = 0;isnrxx]; -} - } - noncolin_rho(rhotmp1,rhotmp2,neg,chr->rho,rhopw->nrxx,ucell->magnet.ux_,ucell->magnet.lsign_); - rhopw->real2recip(rhotmp1, rhogsum1); - rhopw->real2recip(rhotmp2, rhogsum2); + for (int is = 0; is < PARAM.inp.nspin; is++) + { + for (int ir = 0; ir < rhopw->nrxx; ir++) + { + vsave[is][ir] = v(is, ir); + v(is, ir) = 0; + } + } + vgg = new double*[nspin0]; + for (int is = 0; is < nspin0; is++) + { + vgg[is] = new double[rhopw->nrxx]; + } + } + noncolin_rho(rhotmp1, rhotmp2, neg, chr->rho, rhopw->nrxx, ucell->magnet.ux_, ucell->magnet.lsign_); + rhopw->real2recip(rhotmp1, rhogsum1); + rhopw->real2recip(rhotmp2, rhogsum2); #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ir=0; irnrxx; ir++) - { - rhotmp2[ir] += fac * chr->rho_core[ir]; - rhotmp1[ir] += fac * chr->rho_core[ir]; - } + for (int ir = 0; ir < rhopw->nrxx; ir++) + { + rhotmp2[ir] += fac * chr->rho_core[ir]; + rhotmp1[ir] += fac * chr->rho_core[ir]; + } #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ig=0; ignpw; ig++) - { - rhogsum2[ig] += fac * chr->rhog_core[ig]; - rhogsum1[ig] += fac * chr->rhog_core[ig]; - } - - gdr2 = new ModuleBase::Vector3[rhopw->nrxx]; - if(!is_stress) h2 = new ModuleBase::Vector3[rhopw->nrxx]; - - XC_Functional::grad_rho( rhogsum1 , gdr1, rhopw, ucell->tpiba); - XC_Functional::grad_rho( rhogsum2 , gdr2, rhopw, ucell->tpiba); + for (int ig = 0; ig < rhopw->npw; ig++) + { + rhogsum2[ig] += fac * chr->rhog_core[ig]; + rhogsum1[ig] += fac * chr->rhog_core[ig]; + } + + gdr2 = new ModuleBase::Vector3[rhopw->nrxx]; + if (!is_stress) + h2 = new ModuleBase::Vector3[rhopw->nrxx]; + + XC_Functional::grad_rho(rhogsum1, gdr1, rhopw, ucell->tpiba); + XC_Functional::grad_rho(rhogsum2, gdr2, rhopw, ucell->tpiba); + } - } - - const double epsr = 1.0e-6; - const double epsg = 1.0e-10; + const double epsr = 1.0e-6; + const double epsg = 1.0e-10; - double vtxcgc = 0.0; - double etxcgc = 0.0; + double vtxcgc = 0.0; + double etxcgc = 0.0; #ifdef _OPENMP #pragma omp parallel -{ - std::vector local_stress_gga; - double local_vtxcgc = 0.0; - double local_etxcgc = 0.0; - - if(is_stress) - { - local_stress_gga.resize(9); - for(int i=0;i<9;i++) - { - local_stress_gga[i] = 0.0; - } - } + { + std::vector local_stress_gga; + double local_vtxcgc = 0.0; + double local_etxcgc = 0.0; + + if (is_stress) + { + local_stress_gga.resize(9); + for (int i = 0; i < 9; i++) + { + local_stress_gga[i] = 0.0; + } + } #else - std::vector &local_stress_gga = stress_gga; - double &local_vtxcgc = vtxcgc; - double &local_etxcgc = etxcgc; + std::vector& local_stress_gga = stress_gga; + double& local_vtxcgc = vtxcgc; + double& local_etxcgc = etxcgc; #endif - double grho2a = 0.0; - double grho2b = 0.0; - double sxc = 0.0; - double v1xc = 0.0; - double v2xc = 0.0; + double grho2a = 0.0; + double grho2b = 0.0; + double sxc = 0.0; + double v1xc = 0.0; + double v2xc = 0.0; - if(nspin0==1) - { - double segno; + if (nspin0 == 1) + { + double segno; #ifdef _OPENMP #pragma omp for #endif - for(int ir=0; irnrxx; ir++) - { - const double arho = std::abs( rhotmp1[ir] ); - if(!is_stress) { h1[ir].x = h1[ir].y = h1[ir].z = 0.0; -} - - if(arho > epsr) - { - grho2a = gdr1[ir].norm2(); - - //normally values in rhotmp can either be >= 0 or < 0. - if( rhotmp1[ir] >= 0.0 ) { segno = 1.0; - } else { segno = -1.0; -} - if (use_libxc && is_stress) - { + for (int ir = 0; ir < rhopw->nrxx; ir++) + { + const double arho = std::abs(rhotmp1[ir]); + if (!is_stress) + { + h1[ir].x = h1[ir].y = h1[ir].z = 0.0; + } + + if (arho > epsr) + { + grho2a = gdr1[ir].norm2(); + + // normally values in rhotmp can either be >= 0 or < 0. + if (rhotmp1[ir] >= 0.0) + { + segno = 1.0; + } + else + { + segno = -1.0; + } + if (use_libxc && is_stress) + { #ifdef USE_LIBXC - if(func_type == 3 || func_type == 5) //the gradcorr part to stress of mGGA - { - double v3xc; - double atau = chr->kin_r[0][ir]/2.0; - XC_Functional_Libxc::tau_xc( func_id, arho, grho2a, atau, sxc, v1xc, v2xc, v3xc); - } - else - { - XC_Functional_Libxc::gcxc_libxc( func_id, arho, grho2a, sxc, v1xc, v2xc); - } -#endif - } // end use_libxc - else - { - XC_Functional::gcxc( arho, grho2a, sxc, v1xc, v2xc); - } - if(is_stress) - { - double tt[3]; - tt[0] = gdr1[ir].x; - tt[1] = gdr1[ir].y; - tt[2] = gdr1[ir].z; - for(int l = 0;l< 3;l++) - { - for(int m = 0;m< l+1;m++) - { - int ind = l*3 + m; - local_stress_gga[ind] += tt[l] * tt[m] * ModuleBase::e2 * v2xc; - } - } - } - else - { - // first term of the gradient correction: - // D(rho*Exc)/D(rho) - v(0, ir) += ModuleBase::e2 * v1xc; - // cout << "v " << v(0, ir) << endl; - - // h contains - // D(rho*Exc) / D(|grad rho|) * (grad rho) / |grad rho| - h1[ir] = ModuleBase::e2 * v2xc * gdr1[ir]; - - local_vtxcgc += ModuleBase::e2* v1xc * ( rhotmp1[ir] - chr->rho_core[ir] ); - local_etxcgc += ModuleBase::e2* sxc * segno; - } - } // end arho > epsr - } - }// end nspin0 == 1 - else // spin polarized case - { + if (func_type == 3 || func_type == 5) // the gradcorr part to stress of mGGA + { + double v3xc; + double atau = chr->kin_r[0][ir] / 2.0; + XC_Functional_Libxc::tau_xc(func_id, arho, grho2a, atau, sxc, v1xc, v2xc, v3xc); + } + else + { + XC_Functional_Libxc::gcxc_libxc(func_id, arho, grho2a, sxc, v1xc, v2xc); + } +#endif + } // end use_libxc + else + { + XC_Functional::gcxc(arho, grho2a, sxc, v1xc, v2xc); + } + if (is_stress) + { + double tt[3]; + tt[0] = gdr1[ir].x; + tt[1] = gdr1[ir].y; + tt[2] = gdr1[ir].z; + for (int l = 0; l < 3; l++) + { + for (int m = 0; m < l + 1; m++) + { + int ind = l * 3 + m; + local_stress_gga[ind] += tt[l] * tt[m] * ModuleBase::e2 * v2xc; + } + } + } + else + { + // first term of the gradient correction: + // D(rho*Exc)/D(rho) + v(0, ir) += ModuleBase::e2 * v1xc; + // cout << "v " << v(0, ir) << endl; + + // h contains + // D(rho*Exc) / D(|grad rho|) * (grad rho) / |grad rho| + h1[ir] = ModuleBase::e2 * v2xc * gdr1[ir]; + + local_vtxcgc += ModuleBase::e2 * v1xc * (rhotmp1[ir] - chr->rho_core[ir]); + local_etxcgc += ModuleBase::e2 * sxc * segno; + } + } // end arho > epsr + } + } // end nspin0 == 1 + else // spin polarized case + { #ifdef _OPENMP #pragma omp for #endif - for(int ir=0; irnrxx; ir++) - { - if(use_libxc) - { + for (int ir = 0; ir < rhopw->nrxx; ir++) + { + if (use_libxc) + { #ifdef USE_LIBXC - double sxc, v1xcup, v1xcdw, v2xcup, v2xcdw, v2xcud; - if(func_type == 3 || func_type == 5) //the gradcorr part to stress of mGGA - { - double v3xcup, v3xcdw; - double atau1 = chr->kin_r[0][ir]/2.0; - double atau2 = chr->kin_r[1][ir]/2.0; - XC_Functional_Libxc::tau_xc_spin( - func_id, - rhotmp1[ir], rhotmp2[ir], gdr1[ir], gdr2[ir], - atau1, atau2, sxc, v1xcup, v1xcdw, v2xcup, v2xcdw, v2xcud, v3xcup, v3xcdw); - } - else - { - XC_Functional_Libxc::gcxc_spin_libxc( - func_id, - rhotmp1[ir], rhotmp2[ir], gdr1[ir], gdr2[ir], - sxc, v1xcup, v1xcdw, v2xcup, v2xcdw, v2xcud); - } - if(is_stress) - { - double tt1[3],tt2[3]; - { - tt1[0] = gdr1[ir].x; - tt1[1] = gdr1[ir].y; - tt1[2] = gdr1[ir].z; - tt2[0] = gdr2[ir].x; - tt2[1] = gdr2[ir].y; - tt2[2] = gdr2[ir].z; - } - for(int l = 0;l< 3;l++) - { - for(int m = 0;m< l+1;m++) - { - int ind = l*3 + m; - local_stress_gga [ind] += ( tt1[l] * tt1[m] * v2xcup + - tt2[l] * tt2[m] * v2xcdw + - (tt1[l] * tt2[m] + - tt2[l] * tt1[m] ) * v2xcud ) * ModuleBase::e2; - } - } - } - else - { - // first term of the gradient correction : D(rho*Exc)/D(rho) - v(0,ir) += ModuleBase::e2 * v1xcup; - v(1,ir) += ModuleBase::e2 * v1xcdw; - - // h contains D(rho*Exc)/D(|grad rho|) * (grad rho) / |grad rho| - h1[ir] += ModuleBase::e2 * ( v2xcup * gdr1[ir] + v2xcud * gdr2[ir] ); - h2[ir] += ModuleBase::e2 * ( v2xcdw * gdr2[ir] + v2xcud * gdr1[ir] ); - - local_vtxcgc = local_vtxcgc + ModuleBase::e2 * v1xcup * ( rhotmp1[ir] - chr->rho_core[ir] * fac ); - local_vtxcgc = local_vtxcgc + ModuleBase::e2 * v1xcdw * ( rhotmp2[ir] - chr->rho_core[ir] * fac ); - local_etxcgc = local_etxcgc + ModuleBase::e2 * sxc; - } -#endif - } - else - { - double v1cup = 0.0; - double v1cdw = 0.0; - double v2cup = 0.0; - double v2cdw = 0.0; - double v1xup = 0.0; - double v1xdw = 0.0; - double v2xup = 0.0; - double v2xdw = 0.0; - double v2cud = 0.0; - double v2c = 0.0; - double sx = 0.0; - double sc = 0.0; - double rh = rhotmp1[ir] + rhotmp2[ir]; - grho2a = gdr1[ir].norm2(); - grho2b = gdr2[ir].norm2(); - XC_Functional::gcx_spin(rhotmp1[ir], rhotmp2[ir], grho2a, grho2b, - sx, v1xup, v1xdw, v2xup, v2xdw); - - if(rh > epsr) - { - if(igcc_is_lyp) - { - ModuleBase::WARNING_QUIT("XC_Functional","igcc_is_lyp is not available now."); - } - else - { - double zeta = ( rhotmp1[ir] - rhotmp2[ir] ) / rh; - if(PARAM.inp.nspin==4&&(PARAM.globalv.domag||PARAM.globalv.domag_z)) { zeta = fabs(zeta) * neg[ir]; -} - const double grh2 = (gdr1[ir]+gdr2[ir]).norm2(); - XC_Functional::gcc_spin(rh, zeta, grh2, sc, v1cup, v1cdw, v2c); - v2cup = v2c; - v2cdw = v2c; - v2cud = v2c; - } - } - else - { - sc = 0.0; - v1cup = 0.0; - v1cdw = 0.0; - v2c = 0.0; - v2cup = 0.0; - v2cdw = 0.0; - v2cud = 0.0; - } - - if(is_stress) - { - double tt1[3],tt2[3]; - { - tt1[0] = gdr1[ir].x; - tt1[1] = gdr1[ir].y; - tt1[2] = gdr1[ir].z; - tt2[0] = gdr2[ir].x; - tt2[1] = gdr2[ir].y; - tt2[2] = gdr2[ir].z; - } - for(int l = 0;l< 3;l++) - { - for(int m = 0;m< l+1;m++) - { - int ind = l*3 + m; - // exchange - local_stress_gga [ind] += tt1[l] * tt1[m] * ModuleBase::e2 * v2xup + - tt2[l] * tt2[m] * ModuleBase::e2 * v2xdw; - // correlation - local_stress_gga [ind] += ( tt1[l] * tt1[m] * v2cup + - tt2[l] * tt2[m] * v2cdw + - (tt1[l] * tt2[m] + - tt2[l] * tt1[m] ) * v2cud ) * ModuleBase::e2; - } - } - } - else - { - // first term of the gradient correction : D(rho*Exc)/D(rho) - v(0,ir) = v(0,ir) + ModuleBase::e2 * ( v1xup + v1cup ); - v(1,ir) = v(1,ir) + ModuleBase::e2 * ( v1xdw + v1cdw ); - - // h contains D(rho*Exc)/D(|grad rho|) * (grad rho) / |grad rho| - h1[ir] = ModuleBase::e2 * ( ( v2xup + v2cup ) * gdr1[ir] + v2cud * gdr2[ir] ); - h2[ir] = ModuleBase::e2 * ( ( v2xdw + v2cdw ) * gdr2[ir] + v2cud * gdr1[ir] ); - - local_vtxcgc = local_vtxcgc + ModuleBase::e2 * ( v1xup + v1cup ) * ( rhotmp1[ir] - chr->rho_core[ir] * fac ); - local_vtxcgc = local_vtxcgc + ModuleBase::e2 * ( v1xdw + v1cdw ) * ( rhotmp2[ir] - chr->rho_core[ir] * fac ); - local_etxcgc = local_etxcgc + ModuleBase::e2 * ( sx + sc ); - } - } - }// end ir - - } + double sxc, v1xcup, v1xcdw, v2xcup, v2xcdw, v2xcud; + if (func_type == 3 || func_type == 5) // the gradcorr part to stress of mGGA + { + double v3xcup, v3xcdw; + double atau1 = chr->kin_r[0][ir] / 2.0; + double atau2 = chr->kin_r[1][ir] / 2.0; + XC_Functional_Libxc::tau_xc_spin(func_id, + rhotmp1[ir], + rhotmp2[ir], + gdr1[ir], + gdr2[ir], + atau1, + atau2, + sxc, + v1xcup, + v1xcdw, + v2xcup, + v2xcdw, + v2xcud, + v3xcup, + v3xcdw); + } + else + { + XC_Functional_Libxc::gcxc_spin_libxc(func_id, + rhotmp1[ir], + rhotmp2[ir], + gdr1[ir], + gdr2[ir], + sxc, + v1xcup, + v1xcdw, + v2xcup, + v2xcdw, + v2xcud); + } + if (is_stress) + { + double tt1[3], tt2[3]; + { + tt1[0] = gdr1[ir].x; + tt1[1] = gdr1[ir].y; + tt1[2] = gdr1[ir].z; + tt2[0] = gdr2[ir].x; + tt2[1] = gdr2[ir].y; + tt2[2] = gdr2[ir].z; + } + for (int l = 0; l < 3; l++) + { + for (int m = 0; m < l + 1; m++) + { + int ind = l * 3 + m; + local_stress_gga[ind] += (tt1[l] * tt1[m] * v2xcup + tt2[l] * tt2[m] * v2xcdw + + (tt1[l] * tt2[m] + tt2[l] * tt1[m]) * v2xcud) + * ModuleBase::e2; + } + } + } + else + { + // first term of the gradient correction : D(rho*Exc)/D(rho) + v(0, ir) += ModuleBase::e2 * v1xcup; + v(1, ir) += ModuleBase::e2 * v1xcdw; + + // h contains D(rho*Exc)/D(|grad rho|) * (grad rho) / |grad rho| + h1[ir] += ModuleBase::e2 * (v2xcup * gdr1[ir] + v2xcud * gdr2[ir]); + h2[ir] += ModuleBase::e2 * (v2xcdw * gdr2[ir] + v2xcud * gdr1[ir]); + + local_vtxcgc = local_vtxcgc + ModuleBase::e2 * v1xcup * (rhotmp1[ir] - chr->rho_core[ir] * fac); + local_vtxcgc = local_vtxcgc + ModuleBase::e2 * v1xcdw * (rhotmp2[ir] - chr->rho_core[ir] * fac); + local_etxcgc = local_etxcgc + ModuleBase::e2 * sxc; + } +#endif + } + else + { + double v1cup = 0.0; + double v1cdw = 0.0; + double v2cup = 0.0; + double v2cdw = 0.0; + double v1xup = 0.0; + double v1xdw = 0.0; + double v2xup = 0.0; + double v2xdw = 0.0; + double v2cud = 0.0; + double v2c = 0.0; + double sx = 0.0; + double sc = 0.0; + double rh = rhotmp1[ir] + rhotmp2[ir]; + grho2a = gdr1[ir].norm2(); + grho2b = gdr2[ir].norm2(); + XC_Functional::gcx_spin(rhotmp1[ir], rhotmp2[ir], grho2a, grho2b, sx, v1xup, v1xdw, v2xup, v2xdw); + + if (rh > epsr) + { + if (igcc_is_lyp) + { + ModuleBase::WARNING_QUIT("XC_Functional", "igcc_is_lyp is not available now."); + } + else + { + double zeta = (rhotmp1[ir] - rhotmp2[ir]) / rh; + if (PARAM.inp.nspin == 4 && (PARAM.globalv.domag || PARAM.globalv.domag_z)) + { + zeta = fabs(zeta) * neg[ir]; + } + const double grh2 = (gdr1[ir] + gdr2[ir]).norm2(); + XC_Functional::gcc_spin(rh, zeta, grh2, sc, v1cup, v1cdw, v2c); + v2cup = v2c; + v2cdw = v2c; + v2cud = v2c; + } + } + else + { + sc = 0.0; + v1cup = 0.0; + v1cdw = 0.0; + v2c = 0.0; + v2cup = 0.0; + v2cdw = 0.0; + v2cud = 0.0; + } + + if (is_stress) + { + double tt1[3], tt2[3]; + { + tt1[0] = gdr1[ir].x; + tt1[1] = gdr1[ir].y; + tt1[2] = gdr1[ir].z; + tt2[0] = gdr2[ir].x; + tt2[1] = gdr2[ir].y; + tt2[2] = gdr2[ir].z; + } + for (int l = 0; l < 3; l++) + { + for (int m = 0; m < l + 1; m++) + { + int ind = l * 3 + m; + // exchange + local_stress_gga[ind] += tt1[l] * tt1[m] * ModuleBase::e2 * v2xup + + tt2[l] * tt2[m] * ModuleBase::e2 * v2xdw; + // correlation + local_stress_gga[ind] += (tt1[l] * tt1[m] * v2cup + tt2[l] * tt2[m] * v2cdw + + (tt1[l] * tt2[m] + tt2[l] * tt1[m]) * v2cud) + * ModuleBase::e2; + } + } + } + else + { + // first term of the gradient correction : D(rho*Exc)/D(rho) + v(0, ir) = v(0, ir) + ModuleBase::e2 * (v1xup + v1cup); + v(1, ir) = v(1, ir) + ModuleBase::e2 * (v1xdw + v1cdw); + + // h contains D(rho*Exc)/D(|grad rho|) * (grad rho) / |grad rho| + h1[ir] = ModuleBase::e2 * ((v2xup + v2cup) * gdr1[ir] + v2cud * gdr2[ir]); + h2[ir] = ModuleBase::e2 * ((v2xdw + v2cdw) * gdr2[ir] + v2cud * gdr1[ir]); + + local_vtxcgc + = local_vtxcgc + ModuleBase::e2 * (v1xup + v1cup) * (rhotmp1[ir] - chr->rho_core[ir] * fac); + local_vtxcgc + = local_vtxcgc + ModuleBase::e2 * (v1xdw + v1cdw) * (rhotmp2[ir] - chr->rho_core[ir] * fac); + local_etxcgc = local_etxcgc + ModuleBase::e2 * (sx + sc); + } + } + } // end ir + } #ifdef _OPENMP - #pragma omp critical(xc_functional_gradcorr_reduce) - { - if(is_stress) - { - for(int l = 0;l< 3;l++) - { - for(int m = 0;m< l+1;m++) - { - int ind = l*3 + m; - stress_gga [ind] += local_stress_gga [ind]; - } - } - } - else - { - vtxcgc += local_vtxcgc; - etxcgc += local_etxcgc; - } - } -} +#pragma omp critical(xc_functional_gradcorr_reduce) + { + if (is_stress) + { + for (int l = 0; l < 3; l++) + { + for (int m = 0; m < l + 1; m++) + { + int ind = l * 3 + m; + stress_gga[ind] += local_stress_gga[ind]; + } + } + } + else + { + vtxcgc += local_vtxcgc; + etxcgc += local_etxcgc; + } + } + } #endif - //std::cout << "\n vtxcgc=" << vtxcgc; - //std::cout << "\n etxcgc=" << etxcgc << std::endl; + // std::cout << "\n vtxcgc=" << vtxcgc; + // std::cout << "\n etxcgc=" << etxcgc << std::endl; - if(!is_stress) - { + if (!is_stress) + { #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ir=0; irnrxx; ir++) - { - rhotmp1[ir] -= fac * chr->rho_core[ir]; - } - if(nspin0==2) - { + for (int ir = 0; ir < rhopw->nrxx; ir++) + { + rhotmp1[ir] -= fac * chr->rho_core[ir]; + } + if (nspin0 == 2) + { #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ir=0; irnrxx; ir++) - { - rhotmp2[ir] -= fac * chr->rho_core[ir]; - } - } - - // second term of the gradient correction : - // \sum_alpha (D / D r_alpha) ( D(rho*Exc)/D(grad_alpha rho) ) - - // dh is in real sapce. - double* dh = new double[rhopw->nrxx]; - - for(int is=0; istpiba); -} - if(is==1) {XC_Functional::grad_dot(h2,dh,rhopw,ucell->tpiba); -} + for (int ir = 0; ir < rhopw->nrxx; ir++) + { + rhotmp2[ir] -= fac * chr->rho_core[ir]; + } + } + + // second term of the gradient correction : + // \sum_alpha (D / D r_alpha) ( D(rho*Exc)/D(grad_alpha rho) ) + + // dh is in real sapce. + double* dh = new double[rhopw->nrxx]; + + for (int is = 0; is < nspin0; is++) + { + if (is == 0) + { + XC_Functional::grad_dot(h1, dh, rhopw, ucell->tpiba); + } + if (is == 1) + { + XC_Functional::grad_dot(h2, dh, rhopw, ucell->tpiba); + } #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ir=0; irnrxx; ir++) { - v(is, ir) -= dh[ir]; -} - - double sum = 0.0; - if(is==0) - { + for (int ir = 0; ir < rhopw->nrxx; ir++) + { + v(is, ir) -= dh[ir]; + } + + double sum = 0.0; + if (is == 0) + { #ifdef _OPENMP -#pragma omp parallel for reduction(+:sum) schedule(static, 256) +#pragma omp parallel for reduction(+ : sum) schedule(static, 256) #endif - for(int ir=0; irnrxx; ir++) { - sum += dh[ir] * rhotmp1[ir]; -} - } - else if(is==1) - { + for (int ir = 0; ir < rhopw->nrxx; ir++) + { + sum += dh[ir] * rhotmp1[ir]; + } + } + else if (is == 1) + { #ifdef _OPENMP -#pragma omp parallel for reduction(+:sum) schedule(static, 256) +#pragma omp parallel for reduction(+ : sum) schedule(static, 256) #endif - for(int ir=0; irnrxx; ir++) { - sum += dh[ir] * rhotmp2[ir]; -} - } - vtxcgc -= sum; - } - - delete[] dh; + for (int ir = 0; ir < rhopw->nrxx; ir++) + { + sum += dh[ir] * rhotmp2[ir]; + } + } + vtxcgc -= sum; + } + + delete[] dh; - vtxc += vtxcgc; - etxc += etxcgc; + vtxc += vtxcgc; + etxc += etxcgc; - if(PARAM.inp.nspin == 4 && (PARAM.globalv.domag||PARAM.globalv.domag_z)) - { + if (PARAM.inp.nspin == 4 && (PARAM.globalv.domag || PARAM.globalv.domag_z)) + { #ifdef _OPENMP #pragma omp parallel for collapse(2) schedule(static, 1024) #endif - for(int is=0;isnrxx;ir++) - { - if(isnrxx; ir++) + { + if (is < nspin0) + { + vgg[is][ir] = v(is, ir); + } + v(is, ir) = vsave[is][ir]; + } + } #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ir=0;irnrxx;ir++) - { - v(0,ir) += 0.5 * (vgg[0][ir] + vgg[1][ir]); - double amag = sqrt(pow(chr->rho[1][ir],2)+pow(chr->rho[2][ir],2)+pow(chr->rho[3][ir],2)); - if(amag>1e-12) - { - for(int i=1;i<4;i++) { - v(i,ir)+= neg[ir] * 0.5 *(vgg[0][ir]-vgg[1][ir])*chr->rho[i][ir]/amag; -} - } - } - } - } - // deacllocate - delete[] rhotmp1; - delete[] rhogsum1; - delete[] gdr1; - if(!is_stress) { delete[] h1; -} + for (int ir = 0; ir < rhopw->nrxx; ir++) + { + v(0, ir) += 0.5 * (vgg[0][ir] + vgg[1][ir]); + double amag = sqrt(pow(chr->rho[1][ir], 2) + pow(chr->rho[2][ir], 2) + pow(chr->rho[3][ir], 2)); + if (amag > 1e-12) + { + for (int i = 1; i < 4; i++) + { + v(i, ir) += neg[ir] * 0.5 * (vgg[0][ir] - vgg[1][ir]) * chr->rho[i][ir] / amag; + } + } + } + } + } + // deacllocate + delete[] rhotmp1; + delete[] rhogsum1; + delete[] gdr1; + if (!is_stress) + { + delete[] h1; + } - if(PARAM.inp.nspin==2) - { - delete[] rhotmp2; - delete[] rhogsum2; - delete[] gdr2; - if(!is_stress) { delete[] h2; -} - } - if(PARAM.inp.nspin == 4 && (PARAM.globalv.domag||PARAM.globalv.domag_z)) - { - delete[] neg; - if(!is_stress) - { - for(int i=0; i -void XC_Functional::grad_wfc( - const int ik, - const Real tpiba, - const ModulePW::PW_Basis_K* wfc_basis, - const T* rhog, - T* grad) +void XC_Functional::grad_wfc(const int ik, + const Real tpiba, + const ModulePW::PW_Basis_K* wfc_basis, + const T* rhog, + T* grad) { using ct_Device = typename ct::PsiToContainer::type; - const int npw_k = wfc_basis->npwk[ik]; - - auto porter = std::move(ct::Tensor( - ct::DataTypeToEnum::value, ct::DeviceTypeToEnum::value, {wfc_basis->nmaxgr})); - auto gcar = ct::TensorMap( - &wfc_basis->gcar[0][0], ct::DataType::DT_DOUBLE, ct::DeviceType::CpuDevice, {wfc_basis->nks * wfc_basis->npwk_max, 3}).to_device(); - auto kvec_c = ct::TensorMap( - &wfc_basis->kvec_c[0][0],ct::DataType::DT_DOUBLE, ct::DeviceType::CpuDevice, {wfc_basis->nks, 3}).to_device(); - - auto xc_functional_grad_wfc_solver - = hamilt::xc_functional_grad_wfc_op(); - - for(int ipol=0; ipol<3; ipol++) { - xc_functional_grad_wfc_solver( - ik, ipol, npw_k, wfc_basis->npwk_max, // Integers - tpiba, // Double - gcar.template data(), // Array of Real - kvec_c.template data(), // Array of double - rhog, porter.data()); // Array of std::complex - - // bring the gdr from G --> R - Device * ctx = nullptr; - wfc_basis->recip_to_real(ctx, porter.data(), porter.data(), ik); - - xc_functional_grad_wfc_solver( - ipol, wfc_basis->nrxx, // Integers - porter.data(), grad); // Array of std::complex + const int npw_k = wfc_basis->npwk[ik]; + + auto porter = std::move( + ct::Tensor(ct::DataTypeToEnum::value, ct::DeviceTypeToEnum::value, {wfc_basis->nmaxgr})); + auto gcar = ct::TensorMap(&wfc_basis->gcar[0][0], + ct::DataType::DT_DOUBLE, + ct::DeviceType::CpuDevice, + {wfc_basis->nks * wfc_basis->npwk_max, 3}) + .to_device(); + auto kvec_c = ct::TensorMap(&wfc_basis->kvec_c[0][0], + ct::DataType::DT_DOUBLE, + ct::DeviceType::CpuDevice, + {wfc_basis->nks, 3}) + .to_device(); + + auto xc_functional_grad_wfc_solver = hamilt::xc_functional_grad_wfc_op(); + + for (int ipol = 0; ipol < 3; ipol++) + { + xc_functional_grad_wfc_solver(ik, + ipol, + npw_k, + wfc_basis->npwk_max, // Integers + tpiba, // Double + gcar.template data(), // Array of Real + kvec_c.template data(), // Array of double + rhog, + porter.data()); // Array of std::complex + + // bring the gdr from G --> R + Device* ctx = nullptr; + wfc_basis->recip_to_real(ctx, porter.data(), porter.data(), ik); + + xc_functional_grad_wfc_solver(ipol, + wfc_basis->nrxx, // Integers + porter.data(), + grad); // Array of std::complex } } - void XC_Functional::grad_rho(const std::complex* rhog, ModuleBase::Vector3* gdr, const ModulePW::PW_Basis* rho_basis, const double tpiba) { - std::complex *gdrtmp = new std::complex[rho_basis->nmaxgr]; + std::complex* gdrtmp = new std::complex[rho_basis->nmaxgr]; - // the formula is : rho(r)^prime = \int iG * rho(G)e^{iGr} dG - for(int i = 0 ; i < 3 ; ++i) - { - // calculate the charge density gradient in reciprocal space. + // the formula is : rho(r)^prime = \int iG * rho(G)e^{iGr} dG + for (int i = 0; i < 3; ++i) + { + // calculate the charge density gradient in reciprocal space. #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ig=0; ignpw; ig++) { - gdrtmp[ig] = ModuleBase::IMAG_UNIT * rhog[ig] * rho_basis->gcar[ig][i]; -} + for (int ig = 0; ig < rho_basis->npw; ig++) + { + gdrtmp[ig] = ModuleBase::IMAG_UNIT * rhog[ig] * rho_basis->gcar[ig][i]; + } - // bring the gdr from G --> R - rho_basis->recip2real(gdrtmp, gdrtmp); + // bring the gdr from G --> R + rho_basis->recip2real(gdrtmp, gdrtmp); - // remember to multily 2pi/a0, which belongs to G vectors. + // remember to multily 2pi/a0, which belongs to G vectors. #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ir=0; irnrxx; ir++) { - gdr[ir][i] = gdrtmp[ir].real() * tpiba; -} - } + for (int ir = 0; ir < rho_basis->nrxx; ir++) + { + gdr[ir][i] = gdrtmp[ir].real() * tpiba; + } + } - delete[] gdrtmp; - return; + delete[] gdrtmp; + return; } - -void XC_Functional::grad_dot(const ModuleBase::Vector3* h, double* dh, const ModulePW::PW_Basis* rho_basis, const double tpiba) +void XC_Functional::grad_dot(const ModuleBase::Vector3* h, + double* dh, + const ModulePW::PW_Basis* rho_basis, + const double tpiba) { - std::complex *aux = new std::complex[rho_basis->nmaxgr]; - std::complex *gaux = new std::complex[rho_basis->npw]; + std::complex* aux = new std::complex[rho_basis->nmaxgr]; + std::complex* gaux = new std::complex[rho_basis->npw]; - for(int i = 0 ; i < 3 ; ++i) - { + for (int i = 0; i < 3; ++i) + { #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ir = 0; ir < rho_basis->nrxx; ++ir) { - aux[ir] = std::complex( h[ir][i], 0.0); -} - - // bring to G space. - rho_basis->real2recip(aux,aux); - if (i == 0) - { + for (int ir = 0; ir < rho_basis->nrxx; ++ir) + { + aux[ir] = std::complex(h[ir][i], 0.0); + } + + // bring to G space. + rho_basis->real2recip(aux, aux); + if (i == 0) + { #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ig = 0; ig < rho_basis->npw; ++ig) { - gaux[ig] = ModuleBase::IMAG_UNIT * aux[ig] * rho_basis->gcar[ig][i]; -} - } - else - { + for (int ig = 0; ig < rho_basis->npw; ++ig) + { + gaux[ig] = ModuleBase::IMAG_UNIT * aux[ig] * rho_basis->gcar[ig][i]; + } + } + else + { #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ig = 0; ig < rho_basis->npw; ++ig) { - gaux[ig] += ModuleBase::IMAG_UNIT * aux[ig] * rho_basis->gcar[ig][i]; -} - } - } + for (int ig = 0; ig < rho_basis->npw; ++ig) + { + gaux[ig] += ModuleBase::IMAG_UNIT * aux[ig] * rho_basis->gcar[ig][i]; + } + } + } - // bring back to R space - rho_basis->recip2real(gaux,aux); + // bring back to R space + rho_basis->recip2real(gaux, aux); #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ir=0; irnrxx; ir++) { - dh[ir] = aux[ir].real() * tpiba; -} - - delete[] aux; - delete[] gaux; - return; + for (int ir = 0; ir < rho_basis->nrxx; ir++) + { + dh[ir] = aux[ir].real() * tpiba; + } + + delete[] aux; + delete[] gaux; + return; } -void XC_Functional::noncolin_rho(double *rhoout1, double *rhoout2, double *neg, - const double*const*const rho, const int nrxx, const double* ux_, const bool lsign_) +void XC_Functional::noncolin_rho(double* rhoout1, + double* rhoout2, + double* neg, + const double* const* const rho, + const int nrxx, + const double* ux_, + const bool lsign_) { - //this function diagonalizes the spin density matrix and gives as output the - //spin up and spin down components of the charge. - //If lsign is true up and dw are with respect to the fixed quantization axis - //ux, otherwise rho + |m| is always rhoup and rho-|m| is always rhodw. + // this function diagonalizes the spin density matrix and gives as output the + // spin up and spin down components of the charge. + // If lsign is true up and dw are with respect to the fixed quantization axis + // ux, otherwise rho + |m| is always rhoup and rho-|m| is always rhodw. #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ir = 0;ir0) { neg[ir] = 1.0; - } else { neg[ir] = -1.0; -} - } - } + for (int ir = 0; ir < nrxx; ir++) + { + if (rho[1][ir] * ux_[0] + rho[2][ir] * ux_[1] + rho[3][ir] * ux_[2] > 0) + { + neg[ir] = 1.0; + } + else + { + neg[ir] = -1.0; + } + } + } #ifdef _OPENMP #pragma omp parallel for #endif - for(int ir = 0;ir, base_device::DEVICE_CPU, double>( diff --git a/source/module_hamilt_general/module_xc/xc_functional_libxc.cpp b/source/module_hamilt_general/module_xc/xc_functional_libxc.cpp index f3ea0fbbd0..a7dd4a1df6 100644 --- a/source/module_hamilt_general/module_xc/xc_functional_libxc.cpp +++ b/source/module_hamilt_general/module_xc/xc_functional_libxc.cpp @@ -1,250 +1,250 @@ #ifdef USE_LIBXC #include "xc_functional_libxc.h" + #include "module_parameter/parameter.h" -#include "module_base/tool_quit.h" -#include "module_base/formatter.h" +#include "source_base/formatter.h" +#include "source_base/tool_quit.h" + #ifdef __EXX -#include "module_hamilt_pw/hamilt_pwdft/global.h" // just for GlobalC::exx_info +#include "module_hamilt_pw/hamilt_pwdft/global.h" // just for GlobalC::exx_info #endif -#include -#include -#include -#include #include #include +#include +#include +#include +#include + bool not_supported_xc_with_laplacian(const std::string& xc_func_in) { - // see Pyscf: https://github.com/pyscf/pyscf/blob/master/pyscf/dft/libxc.py#L1062 - // ABACUS issue: https://github.com/deepmodeling/abacus-develop/issues/5372 - const std::vector not_supported = { - "MGGA_XC_CC06", "MGGA_C_CS", "MGGA_X_BR89", "MGGA_X_MK00"}; - for (const std::string& s : not_supported) - { - if (xc_func_in.find(s) != std::string::npos) - { - return true; - } - } - return false; + // see Pyscf: https://github.com/pyscf/pyscf/blob/master/pyscf/dft/libxc.py#L1062 + // ABACUS issue: https://github.com/deepmodeling/abacus-develop/issues/5372 + const std::vector not_supported = {"MGGA_XC_CC06", "MGGA_C_CS", "MGGA_X_BR89", "MGGA_X_MK00"}; + for (const std::string& s: not_supported) + { + if (xc_func_in.find(s) != std::string::npos) + { + return true; + } + } + return false; } bool not_supported_xc_with_nonlocal_vdw(const std::string& xc_func_in) { - const std::string xc_func = FmtCore::upper(xc_func_in); - if(xc_func.find("VDW") != std::string::npos) { return true; } - /* known excluded: GGA_X_OPTB86B_VDW, GGA_X_OPTB88_VDW, GGA_X_OPTPBE_VDW, GGA_X_PBEK1_VDW */ - - if(xc_func.find("VV10") != std::string::npos) { return true; } - /* known excluded: GGA_XC_VV10, HYB_GGA_XC_LC_VV10, MGGA_C_REVSCAN_VV10, MGGA_C_SCAN_VV10, - MGGA_C_SCANL_VV10, MGGA_XC_VCML_RVV10 */ - - const std::vector not_supported = {"C09X", "VCML", "HYB_MGGA_XC_WB97M_V", "MGGA_XC_B97M_V"}; - for(const std::string& str : not_supported) - { - if(xc_func.find(str) != std::string::npos) { return true; } - } - /* known excluded: GGA_X_C09X, MGGA_X_VCML, HYB_MGGA_XC_WB97M_V, MGGA_XC_B97M_V */ - - /* There is also a functional not quite sure: HYB_GGA_XC_WB97X_V */ - if(xc_func.find("HYB_GGA_XC_WB97X_V") != std::string::npos) - { - std::cout << " WARNING: range-seperated XC omega-B97 family with nonlocal correction term is used.\n" - << " if you are not planning to use these functionals like wB97X-D3BJ that:\n" - << " XC_GGA_XC_WB97X_V with specified D3BJ DFT-D3 parameters, this is not what\n" - << " you want." << std::endl; - } - return false; + const std::string xc_func = FmtCore::upper(xc_func_in); + if (xc_func.find("VDW") != std::string::npos) + { + return true; + } + /* known excluded: GGA_X_OPTB86B_VDW, GGA_X_OPTB88_VDW, GGA_X_OPTPBE_VDW, GGA_X_PBEK1_VDW */ + + if (xc_func.find("VV10") != std::string::npos) + { + return true; + } + /* known excluded: GGA_XC_VV10, HYB_GGA_XC_LC_VV10, MGGA_C_REVSCAN_VV10, MGGA_C_SCAN_VV10, + MGGA_C_SCANL_VV10, MGGA_XC_VCML_RVV10 */ + + const std::vector not_supported = {"C09X", "VCML", "HYB_MGGA_XC_WB97M_V", "MGGA_XC_B97M_V"}; + for (const std::string& str: not_supported) + { + if (xc_func.find(str) != std::string::npos) + { + return true; + } + } + /* known excluded: GGA_X_C09X, MGGA_X_VCML, HYB_MGGA_XC_WB97M_V, MGGA_XC_B97M_V */ + + /* There is also a functional not quite sure: HYB_GGA_XC_WB97X_V */ + if (xc_func.find("HYB_GGA_XC_WB97X_V") != std::string::npos) + { + std::cout << " WARNING: range-seperated XC omega-B97 family with nonlocal correction term is used.\n" + << " if you are not planning to use these functionals like wB97X-D3BJ that:\n" + << " XC_GGA_XC_WB97X_V with specified D3BJ DFT-D3 parameters, this is not what\n" + << " you want." << std::endl; + } + return false; } -int xc_func_type_classifier(const std::string& xc_func, - const std::map& mymap = { - {"LDA", 1}, - {"GGA", 2}, - {"MGGA", 3}, - {"HYB_LDA", 4}, - {"HYB_GGA", 4}, - {"HYB_MGGA", 5} - }) +int xc_func_type_classifier(const std::string& xc_func, + const std::map& mymap + = {{"LDA", 1}, {"GGA", 2}, {"MGGA", 3}, {"HYB_LDA", 4}, {"HYB_GGA", 4}, {"HYB_MGGA", 5}}) { - // the libxc standard functional pattern is like: - // "(XC_)?(LDA|GGA|MGGA|HYB_GGA|HYB_MGGA|HYB_LDA)_(X|C|XC|K)(_(.*))?" - std::regex pattern(R"((XC_)?(LDA|GGA|MGGA|HYB_GGA|HYB_MGGA|HYB_LDA)_(X|C|XC|K)(_(.*))?)"); - std::smatch match; - if (std::regex_match(xc_func, match, pattern)) { - std::string type = match[2].str(); - auto it = mymap.find(type); - if (it != mymap.end()) { - return it->second; - } else { - ModuleBase::WARNING_QUIT("XC_Functional_Libxc::xc_func_type_classifier", - "Unrecognized functional type: " + type); - } - } else { - ModuleBase::WARNING_QUIT("XC_Functional_Libxc::xc_func_type_classifier", - "Unrecognized functional format: " + xc_func); - } + // the libxc standard functional pattern is like: + // "(XC_)?(LDA|GGA|MGGA|HYB_GGA|HYB_MGGA|HYB_LDA)_(X|C|XC|K)(_(.*))?" + std::regex pattern(R"((XC_)?(LDA|GGA|MGGA|HYB_GGA|HYB_MGGA|HYB_LDA)_(X|C|XC|K)(_(.*))?)"); + std::smatch match; + if (std::regex_match(xc_func, match, pattern)) + { + std::string type = match[2].str(); + auto it = mymap.find(type); + if (it != mymap.end()) + { + return it->second; + } + else + { + ModuleBase::WARNING_QUIT("XC_Functional_Libxc::xc_func_type_classifier", + "Unrecognized functional type: " + type); + } + } + else + { + ModuleBase::WARNING_QUIT("XC_Functional_Libxc::xc_func_type_classifier", + "Unrecognized functional format: " + xc_func); + } } -std::pair> -XC_Functional_Libxc::set_xc_type_libxc(const std::string& xc_func_in) +std::pair> XC_Functional_Libxc::set_xc_type_libxc(const std::string& xc_func_in) { // check if the functional involves Laplacian of rho - if (not_supported_xc_with_laplacian(xc_func_in)) - { - ModuleBase::WARNING_QUIT("XC_Functional::set_xc_type_libxc", - "XC Functional involving Laplacian of rho is not implemented."); - } - - // check if the functional involves non-local dispersion - if(not_supported_xc_with_nonlocal_vdw(xc_func_in)) - { - ModuleBase::WARNING_QUIT("XC_Functional::set_xc_type_libxc", - "functionals with non-local dispersion are not supported."); - } - - // check the consistency of the functional type (LDA, GGA, MGGA, HYB_LDA, HYB_GGA, HYB_MGGA) - const std::vector xcfunc_words_ = FmtCore::split(xc_func_in, "+"); - std::vector xcfunc_type_(xcfunc_words_.size(), 0); // 0: None - std::transform(xcfunc_words_.begin(), xcfunc_words_.end(), xcfunc_type_.begin(), - [](const std::string& func) { return xc_func_type_classifier(func); }); - if (std::adjacent_find(xcfunc_type_.begin(), xcfunc_type_.end(), - [](int a, int b) { return a != b; }) != xcfunc_type_.end()) - { - ModuleBase::WARNING_QUIT("XC_Functional::set_xc_type_libxc", - "All exchange-correlation functionals must be of the same type" - "(LDA, GGA, MGGA, HYB_LDA, HYB_GGA, HYB_MGGA)."); - } - - // check if there is None (no, we dont check it) + if (not_supported_xc_with_laplacian(xc_func_in)) + { + ModuleBase::WARNING_QUIT("XC_Functional::set_xc_type_libxc", + "XC Functional involving Laplacian of rho is not implemented."); + } + + // check if the functional involves non-local dispersion + if (not_supported_xc_with_nonlocal_vdw(xc_func_in)) + { + ModuleBase::WARNING_QUIT("XC_Functional::set_xc_type_libxc", + "functionals with non-local dispersion are not supported."); + } + + // check the consistency of the functional type (LDA, GGA, MGGA, HYB_LDA, HYB_GGA, HYB_MGGA) + const std::vector xcfunc_words_ = FmtCore::split(xc_func_in, "+"); + std::vector xcfunc_type_(xcfunc_words_.size(), 0); // 0: None + std::transform(xcfunc_words_.begin(), xcfunc_words_.end(), xcfunc_type_.begin(), [](const std::string& func) { + return xc_func_type_classifier(func); + }); + if (std::adjacent_find(xcfunc_type_.begin(), xcfunc_type_.end(), [](int a, int b) { return a != b; }) + != xcfunc_type_.end()) + { + ModuleBase::WARNING_QUIT("XC_Functional::set_xc_type_libxc", + "All exchange-correlation functionals must be of the same type" + "(LDA, GGA, MGGA, HYB_LDA, HYB_GGA, HYB_MGGA)."); + } + + // check if there is None (no, we dont check it) int func_type = xcfunc_type_.front(); // all functionals are of the same type - // if (func_type == 0) - // { - // ModuleBase::WARNING_QUIT("XC_Functional::set_xc_type_libxc", - // "Unrecognized functional type in '" + xc_func_in + "'."); - // } + // if (func_type == 0) + // { + // ModuleBase::WARNING_QUIT("XC_Functional::set_xc_type_libxc", + // "Unrecognized functional type in '" + xc_func_in + "'."); + // } // determine the functional id - std::vector func_id(xcfunc_words_.size(), -1); - std::transform(xcfunc_words_.begin(), xcfunc_words_.end(), func_id.begin(), - [](const std::string& func) { return xc_functional_get_number(func.c_str()); }); - // if there is any -1, it means the functional is not recognized - const bool not_recognized_xc = std::any_of(func_id.begin(), func_id.end(), - [](int id) { return id == -1; }); - if (not_recognized_xc) - { - std::string message = "Unrecognized exchange-correlation functional '" + xc_func_in + "'.\n" - " Possible source: Pseudopotential file or dft_functional parameter.\n" - " Please explicitly set dft_functional in INPUT,\n" - " or verify the functional name is supported."; - ModuleBase::WARNING_QUIT("XC_Functional::set_xc_type_libxc", message); - } - - // return + std::vector func_id(xcfunc_words_.size(), -1); + std::transform(xcfunc_words_.begin(), xcfunc_words_.end(), func_id.begin(), [](const std::string& func) { + return xc_functional_get_number(func.c_str()); + }); + // if there is any -1, it means the functional is not recognized + const bool not_recognized_xc = std::any_of(func_id.begin(), func_id.end(), [](int id) { return id == -1; }); + if (not_recognized_xc) + { + std::string message = "Unrecognized exchange-correlation functional '" + xc_func_in + + "'.\n" + " Possible source: Pseudopotential file or dft_functional parameter.\n" + " Please explicitly set dft_functional in INPUT,\n" + " or verify the functional name is supported."; + ModuleBase::WARNING_QUIT("XC_Functional::set_xc_type_libxc", message); + } + + // return return std::make_pair(func_type, func_id); } const std::vector in_built_xc_func_ext_params(const int id) { - switch(id) - { - // finite temperature XC functionals - case XC_LDA_XC_KSDT: - return {PARAM.inp.xc_temperature * 0.5}; - case XC_LDA_XC_CORRKSDT: - return {PARAM.inp.xc_temperature * 0.5}; - case XC_LDA_XC_GDSMFB: - return {PARAM.inp.xc_temperature * 0.5}; + switch (id) + { + // finite temperature XC functionals + case XC_LDA_XC_KSDT: + return {PARAM.inp.xc_temperature * 0.5}; + case XC_LDA_XC_CORRKSDT: + return {PARAM.inp.xc_temperature * 0.5}; + case XC_LDA_XC_GDSMFB: + return {PARAM.inp.xc_temperature * 0.5}; #ifdef __EXX - // hybrid functionals - case XC_HYB_GGA_XC_PBEH: - return {GlobalC::exx_info.info_global.hybrid_alpha, - GlobalC::exx_info.info_global.hse_omega, - GlobalC::exx_info.info_global.hse_omega}; - case XC_HYB_GGA_XC_HSE06: - return {GlobalC::exx_info.info_global.hybrid_alpha, - GlobalC::exx_info.info_global.hse_omega, - GlobalC::exx_info.info_global.hse_omega}; - // short-range of B88_X - case XC_GGA_X_ITYH: - return {PARAM.inp.exx_hse_omega}; - // short-range of LYP_C - case XC_GGA_C_LYPR: - return {0.04918, 0.132, 0.2533, 0.349, - 0.35/2.29, 2.0/2.29, PARAM.inp.exx_hse_omega}; + // hybrid functionals + case XC_HYB_GGA_XC_PBEH: + return {GlobalC::exx_info.info_global.hybrid_alpha, + GlobalC::exx_info.info_global.hse_omega, + GlobalC::exx_info.info_global.hse_omega}; + case XC_HYB_GGA_XC_HSE06: + return {GlobalC::exx_info.info_global.hybrid_alpha, + GlobalC::exx_info.info_global.hse_omega, + GlobalC::exx_info.info_global.hse_omega}; + // short-range of B88_X + case XC_GGA_X_ITYH: + return {PARAM.inp.exx_hse_omega}; + // short-range of LYP_C + case XC_GGA_C_LYPR: + return {0.04918, 0.132, 0.2533, 0.349, 0.35 / 2.29, 2.0 / 2.29, PARAM.inp.exx_hse_omega}; #endif - default: - return std::vector{}; - } + default: + return std::vector{}; + } } const std::vector external_xc_func_ext_params(const int id) { - const std::map> mymap = { - { - PARAM.inp.xc_exch_ext[0], - std::vector(PARAM.inp.xc_exch_ext.begin()+1, - PARAM.inp.xc_exch_ext.end()) - }, - { - PARAM.inp.xc_corr_ext[0], - std::vector(PARAM.inp.xc_corr_ext.begin()+1, - PARAM.inp.xc_corr_ext.end()) - } - }; - auto it = mymap.find(id); - return (it != mymap.end()) ? it->second : std::vector{}; + const std::map> mymap = { + {PARAM.inp.xc_exch_ext[0], std::vector(PARAM.inp.xc_exch_ext.begin() + 1, PARAM.inp.xc_exch_ext.end())}, + {PARAM.inp.xc_corr_ext[0], + std::vector(PARAM.inp.xc_corr_ext.begin() + 1, PARAM.inp.xc_corr_ext.end())}}; + auto it = mymap.find(id); + return (it != mymap.end()) ? it->second : std::vector{}; } -std::vector -XC_Functional_Libxc::init_func(const std::vector &func_id, - const int xc_polarized) +std::vector XC_Functional_Libxc::init_func(const std::vector& func_id, const int xc_polarized) { - std::vector funcs; - for (int id : func_id) - { - funcs.push_back({}); // create placeholder - xc_func_init(&funcs.back(), id, xc_polarized); // instantiate the XC term - - // search for external parameters - const std::vector in_built_ext_params = in_built_xc_func_ext_params(id); - const std::vector external_ext_params = external_xc_func_ext_params(id); - // for temporary use, I name their size as n1 and n2 - const int n1 = in_built_ext_params.size(); - const int n2 = external_ext_params.size(); - -// #ifdef __DEBUG // will the following assertion cause performance issue? - // assert the number of parameters should be either zero or the value from - // libxc function xc_func_info_get_n_ext_params, this is to avoid the undefined - // behavior of illegal memory access - const xc_func_info_type* info = xc_func_get_info(&funcs.back()); - const int nref = xc_func_info_get_n_ext_params(info); - assert ((n1 == 0) || (n1 == nref) || (n2 == 0) || (n2 == nref)); -// #endif - - // external overwrites in-built if the same functional id is found in both maps - const double* xc_func_ext_params = - (n2 > 0) ? external_ext_params.data() : - (n1 > 0) ? in_built_ext_params.data() : - nullptr; // nullptr if no external parameters are found - - // if there are no external parameters, do nothing, otherwise we set - if(xc_func_ext_params != nullptr) - { - // set the external parameters - xc_func_set_ext_params(&funcs.back(), const_cast(xc_func_ext_params)); - } - } - return funcs; + std::vector funcs; + for (int id: func_id) + { + funcs.push_back({}); // create placeholder + xc_func_init(&funcs.back(), id, xc_polarized); // instantiate the XC term + + // search for external parameters + const std::vector in_built_ext_params = in_built_xc_func_ext_params(id); + const std::vector external_ext_params = external_xc_func_ext_params(id); + // for temporary use, I name their size as n1 and n2 + const int n1 = in_built_ext_params.size(); + const int n2 = external_ext_params.size(); + + // #ifdef __DEBUG // will the following assertion cause performance issue? + // assert the number of parameters should be either zero or the value from + // libxc function xc_func_info_get_n_ext_params, this is to avoid the undefined + // behavior of illegal memory access + const xc_func_info_type* info = xc_func_get_info(&funcs.back()); + const int nref = xc_func_info_get_n_ext_params(info); + assert((n1 == 0) || (n1 == nref) || (n2 == 0) || (n2 == nref)); + // #endif + + // external overwrites in-built if the same functional id is found in both maps + const double* xc_func_ext_params = (n2 > 0) ? external_ext_params.data() + : (n1 > 0) ? in_built_ext_params.data() + : nullptr; // nullptr if no external parameters are found + + // if there are no external parameters, do nothing, otherwise we set + if (xc_func_ext_params != nullptr) + { + // set the external parameters + xc_func_set_ext_params(&funcs.back(), const_cast(xc_func_ext_params)); + } + } + return funcs; } -void XC_Functional_Libxc::finish_func(std::vector &funcs) +void XC_Functional_Libxc::finish_func(std::vector& funcs) { - for(xc_func_type func : funcs) - { + for (xc_func_type func: funcs) + { xc_func_end(&func); } } diff --git a/source/module_hamilt_general/module_xc/xc_functional_libxc.h b/source/module_hamilt_general/module_xc/xc_functional_libxc.h index 67953c0c57..61c8361a04 100644 --- a/source/module_hamilt_general/module_xc/xc_functional_libxc.h +++ b/source/module_hamilt_general/module_xc/xc_functional_libxc.h @@ -3,17 +3,16 @@ #ifdef USE_LIBXC -#include "module_base/matrix.h" -#include "module_base/vector3.h" - -#include -#include +#include "source_base/matrix.h" +#include "source_base/vector3.h" +#include // added by jghan, 2024-10-10 #include +#include #include +#include +#include -#include // added by jghan, 2024-10-10 -#include class Charge; @@ -23,175 +22,181 @@ namespace XC_Functional_Libxc // xc_functional_libxc.cpp //------------------- - // sets functional type, which allows combination of LIBXC keyword connected by "+" - // for example, "XC_LDA_X+XC_LDA_C_PZ" - extern std::pair> set_xc_type_libxc(const std::string& xc_func_in); - - /** - * @brief instantiate the XC functional by its ID, and set the external parameters if provided. - * - * @param func_id libxc ID of functional, see https://libxc.gitlab.io/functionals/ for details - * @param xc_polarized 0: unpolarized, 1: spin-polarized - * @return std::vector - * - * @note the functionality of this method is extended by supporting the user-defined - * external parameters of xc. However, there are several functionals' external - * parameters are pre-defined in the code, which herein we call those are - * "in-built" parameters. If the same functional ID is found in both in-built - * and external parameters, the external parameters will overwrite the in-built ones. - * The external parameters can be passed here by keywords xc_exch_ext and - * xc_corr_ext in the input file. The expected format would be an XC ID - * followed by a list of parameters. - */ - extern std::vector init_func(const std::vector &func_id, - const int xc_polarized); - - extern void finish_func(std::vector &funcs); - +// sets functional type, which allows combination of LIBXC keyword connected by "+" +// for example, "XC_LDA_X+XC_LDA_C_PZ" +extern std::pair> set_xc_type_libxc(const std::string& xc_func_in); + +/** + * @brief instantiate the XC functional by its ID, and set the external parameters if provided. + * + * @param func_id libxc ID of functional, see https://libxc.gitlab.io/functionals/ for details + * @param xc_polarized 0: unpolarized, 1: spin-polarized + * @return std::vector + * + * @note the functionality of this method is extended by supporting the user-defined + * external parameters of xc. However, there are several functionals' external + * parameters are pre-defined in the code, which herein we call those are + * "in-built" parameters. If the same functional ID is found in both in-built + * and external parameters, the external parameters will overwrite the in-built ones. + * The external parameters can be passed here by keywords xc_exch_ext and + * xc_corr_ext in the input file. The expected format would be an XC ID + * followed by a list of parameters. + */ +extern std::vector init_func(const std::vector& func_id, const int xc_polarized); + +extern void finish_func(std::vector& funcs); //------------------- // xc_functional_libxc_vxc.cpp //------------------- - extern std::tuple v_xc_libxc( - const std::vector &func_id, - const int &nrxx, // number of real-space grid - const double &omega, // volume of cell - const double tpiba, - const Charge* const chr, // charge density - const std::map* scaling_factor = nullptr); // added by jghan, 2024-10-10 - - // for mGGA functional - extern std::tuple v_xc_meta( - const std::vector &func_id, - const int &nrxx, // number of real-space grid - const double &omega, // volume of cell - const double tpiba, - const Charge* const chr); - +extern std::tuple v_xc_libxc(const std::vector& func_id, + const int& nrxx, // number of real-space grid + const double& omega, // volume of cell + const double tpiba, + const Charge* const chr, // charge density + const std::map* scaling_factor + = nullptr); // added by jghan, 2024-10-10 + +// for mGGA functional +extern std::tuple v_xc_meta( + const std::vector& func_id, + const int& nrxx, // number of real-space grid + const double& omega, // volume of cell + const double tpiba, + const Charge* const chr); //------------------- // xc_functional_libxc_tools.cpp //------------------- - // converting rho (abacus=>libxc) - extern std::vector convert_rho( - const int nspin, - const std::size_t nrxx, - const Charge* const chr); - - // converting rho (abacus=>libxc) - extern std::tuple, std::vector> convert_rho_amag_nspin4( - const int nspin, - const std::size_t nrxx, - const Charge* const chr); - - // calculating grho - extern std::vector>> cal_gdr( - const int nspin, - const std::size_t nrxx, - const std::vector &rho, - const double tpiba, - const Charge* const chr); - - // converting grho (abacus=>libxc) - extern std::vector convert_sigma( - const std::vector>> &gdr); - - // sgn for threshold mask - extern std::vector cal_sgn( - const double rho_threshold, - const double grho_threshold, - const xc_func_type &func, - const int nspin, - const std::size_t nrxx, - const std::vector &rho, - const std::vector &sigma); - - // converting etxc from exc (libxc=>abacus) - extern double convert_etxc( - const int nspin, - const std::size_t nrxx, - const std::vector &sgn, - const std::vector &rho, - std::vector exc); - - // converting vtxc and v from vrho and vsigma (libxc=>abacus) - extern std::pair convert_vtxc_v( - const xc_func_type &func, - const int nspin, - const std::size_t nrxx, - const std::vector &sgn, - const std::vector &rho, - const std::vector>> &gdr, - const std::vector &vrho, - const std::vector &vsigma, - const double tpiba, - const Charge* const chr); - - // dh for gga v - extern std::vector> cal_dh( - const int nspin, - const std::size_t nrxx, - const std::vector &sgn, - const std::vector>> &gdr, - const std::vector &vsigma, - const double tpiba, - const Charge* const chr); - - // convert v for NSPIN=4 - extern ModuleBase::matrix convert_v_nspin4( - const std::size_t nrxx, - const Charge* const chr, - const std::vector &amag, - const ModuleBase::matrix &v); - +// converting rho (abacus=>libxc) +extern std::vector convert_rho(const int nspin, const std::size_t nrxx, const Charge* const chr); + +// converting rho (abacus=>libxc) +extern std::tuple, std::vector> convert_rho_amag_nspin4(const int nspin, + const std::size_t nrxx, + const Charge* const chr); + +// calculating grho +extern std::vector>> cal_gdr(const int nspin, + const std::size_t nrxx, + const std::vector& rho, + const double tpiba, + const Charge* const chr); + +// converting grho (abacus=>libxc) +extern std::vector convert_sigma(const std::vector>>& gdr); + +// sgn for threshold mask +extern std::vector cal_sgn(const double rho_threshold, + const double grho_threshold, + const xc_func_type& func, + const int nspin, + const std::size_t nrxx, + const std::vector& rho, + const std::vector& sigma); + +// converting etxc from exc (libxc=>abacus) +extern double convert_etxc(const int nspin, + const std::size_t nrxx, + const std::vector& sgn, + const std::vector& rho, + std::vector exc); + +// converting vtxc and v from vrho and vsigma (libxc=>abacus) +extern std::pair convert_vtxc_v( + const xc_func_type& func, + const int nspin, + const std::size_t nrxx, + const std::vector& sgn, + const std::vector& rho, + const std::vector>>& gdr, + const std::vector& vrho, + const std::vector& vsigma, + const double tpiba, + const Charge* const chr); + +// dh for gga v +extern std::vector> cal_dh(const int nspin, + const std::size_t nrxx, + const std::vector& sgn, + const std::vector>>& gdr, + const std::vector& vsigma, + const double tpiba, + const Charge* const chr); + +// convert v for NSPIN=4 +extern ModuleBase::matrix convert_v_nspin4(const std::size_t nrxx, + const Charge* const chr, + const std::vector& amag, + const ModuleBase::matrix& v); //------------------- // xc_functional_libxc_wrapper_xc.cpp //------------------- - extern void xc_spin_libxc( - const std::vector &func_id, - const double &rhoup, const double &rhodw, - double &exc, double &vxcup, double &vxcdw); - +extern void xc_spin_libxc(const std::vector& func_id, + const double& rhoup, + const double& rhodw, + double& exc, + double& vxcup, + double& vxcdw); //------------------- // xc_functional_libxc_wrapper_gcxc.cpp //------------------- - // the entire GGA functional, for nspin=1 case - extern void gcxc_libxc( - const std::vector &func_id, - const double &rho, const double &grho, - double &sxc, double &v1xc, double &v2xc); - - // the entire GGA functional, for nspin=2 case - extern void gcxc_spin_libxc( - const std::vector &func_id, - const double rhoup, const double rhodw, - const ModuleBase::Vector3 gdr1, const ModuleBase::Vector3 gdr2, - double &sxc, double &v1xcup, double &v1xcdw, double &v2xcup, double &v2xcdw, double &v2xcud); - +// the entire GGA functional, for nspin=1 case +extern void gcxc_libxc(const std::vector& func_id, + const double& rho, + const double& grho, + double& sxc, + double& v1xc, + double& v2xc); + +// the entire GGA functional, for nspin=2 case +extern void gcxc_spin_libxc(const std::vector& func_id, + const double rhoup, + const double rhodw, + const ModuleBase::Vector3 gdr1, + const ModuleBase::Vector3 gdr2, + double& sxc, + double& v1xcup, + double& v1xcdw, + double& v2xcup, + double& v2xcdw, + double& v2xcud); //------------------- // xc_functional_libxc_wrapper_tauxc.cpp //------------------- - // wrapper for the mGGA functionals - extern void tau_xc( - const std::vector &func_id, - const double &rho, const double &grho, const double &atau, double &sxc, - double &v1xc, double &v2xc, double &v3xc); - - extern void tau_xc_spin( - const std::vector &func_id, - double rhoup, double rhodw, - ModuleBase::Vector3 gdr1, ModuleBase::Vector3 gdr2, - double tauup, double taudw, - double &sxc, double &v1xcup, double &v1xcdw, double &v2xcup, double &v2xcdw, double &v2xcud, - double &v3xcup, double &v3xcdw); +// wrapper for the mGGA functionals +extern void tau_xc(const std::vector& func_id, + const double& rho, + const double& grho, + const double& atau, + double& sxc, + double& v1xc, + double& v2xc, + double& v3xc); + +extern void tau_xc_spin(const std::vector& func_id, + double rhoup, + double rhodw, + ModuleBase::Vector3 gdr1, + ModuleBase::Vector3 gdr2, + double tauup, + double taudw, + double& sxc, + double& v1xcup, + double& v1xcdw, + double& v2xcup, + double& v2xcdw, + double& v2xcud, + double& v3xcup, + double& v3xcdw); } // namespace XC_Functional_Libxc diff --git a/source/module_hamilt_general/module_xc/xc_functional_libxc_vxc.cpp b/source/module_hamilt_general/module_xc/xc_functional_libxc_vxc.cpp index 20836fd8b1..e752e9860e 100644 --- a/source/module_hamilt_general/module_xc/xc_functional_libxc_vxc.cpp +++ b/source/module_hamilt_general/module_xc/xc_functional_libxc_vxc.cpp @@ -1,32 +1,31 @@ #ifdef USE_LIBXC -#include "xc_functional.h" -#include "xc_functional_libxc.h" #include "module_elecstate/module_charge/charge.h" -#include "module_base/global_variable.h" #include "module_parameter/parameter.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" - -#include +#include "source_base/global_variable.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" +#include "xc_functional.h" +#include "xc_functional_libxc.h" #include +#include -std::tuple XC_Functional_Libxc::v_xc_libxc( // Peize Lin update for nspin==4 at 2023.01.14 - const std::vector &func_id, - const int &nrxx, // number of real-space grid - const double &omega, // volume of cell - const double tpiba, - const Charge* const chr, - const std::map* scaling_factor) +std::tuple XC_Functional_Libxc::v_xc_libxc( // Peize Lin update for nspin==4 at + // 2023.01.14 + const std::vector& func_id, + const int& nrxx, // number of real-space grid + const double& omega, // volume of cell + const double tpiba, + const Charge* const chr, + const std::map* scaling_factor) { - ModuleBase::TITLE("XC_Functional_Libxc","v_xc_libxc"); - ModuleBase::timer::tick("XC_Functional_Libxc","v_xc_libxc"); + ModuleBase::TITLE("XC_Functional_Libxc", "v_xc_libxc"); + ModuleBase::timer::tick("XC_Functional_Libxc", "v_xc_libxc"); - const int nspin = - (PARAM.inp.nspin == 1 || ( PARAM.inp.nspin ==4 && !PARAM.globalv.domag && !PARAM.globalv.domag_z)) - ? 1 : 2; + const int nspin + = (PARAM.inp.nspin == 1 || (PARAM.inp.nspin == 4 && !PARAM.globalv.domag && !PARAM.globalv.domag_z)) ? 1 : 2; //---------------------------------------------------------- // xc_func_type is defined in Libxc package @@ -36,18 +35,17 @@ std::tuple XC_Functional_Libxc::v_xc_libxc( / //---------------------------------------------------------- std::vector funcs = XC_Functional_Libxc::init_func( - /* func_id = */ func_id, - /* xc_polarized = */ (1==nspin) ? XC_UNPOLARIZED : XC_POLARIZED); + /* func_id = */ func_id, + /* xc_polarized = */ (1 == nspin) ? XC_UNPOLARIZED : XC_POLARIZED); - const bool is_gga = [&funcs]() - { - for( xc_func_type &func : funcs ) + const bool is_gga = [&funcs]() { + for (xc_func_type& func: funcs) { - switch( func.info->family ) + switch (func.info->family) { - case XC_FAMILY_GGA: - case XC_FAMILY_HYB_GGA: - return true; + case XC_FAMILY_GGA: + case XC_FAMILY_HYB_GGA: + return true; } } return false; @@ -56,20 +54,21 @@ std::tuple XC_Functional_Libxc::v_xc_libxc( / // converting rho std::vector rho; std::vector amag; - if(1==nspin || 2==PARAM.inp.nspin) + if (1 == nspin || 2 == PARAM.inp.nspin) { rho = XC_Functional_Libxc::convert_rho(nspin, nrxx, chr); } else { - std::tuple,std::vector> rho_amag = XC_Functional_Libxc::convert_rho_amag_nspin4(nspin, nrxx, chr); + std::tuple, std::vector> rho_amag + = XC_Functional_Libxc::convert_rho_amag_nspin4(nspin, nrxx, chr); rho = std::get<0>(std::move(rho_amag)); amag = std::get<1>(std::move(rho_amag)); } std::vector>> gdr; std::vector sigma; - if(is_gga) + if (is_gga) { gdr = XC_Functional_Libxc::cal_gdr(nspin, nrxx, rho, tpiba, chr); sigma = XC_Functional_Libxc::convert_sigma(gdr); @@ -77,9 +76,9 @@ std::tuple XC_Functional_Libxc::v_xc_libxc( / double etxc = 0.0; double vtxc = 0.0; - ModuleBase::matrix v(nspin,nrxx); + ModuleBase::matrix v(nspin, nrxx); - for( xc_func_type &func : funcs ) + for (xc_func_type& func: funcs) { // jiyy add for threshold constexpr double rho_threshold = 1E-6; @@ -88,103 +87,104 @@ std::tuple XC_Functional_Libxc::v_xc_libxc( / xc_func_set_dens_threshold(&func, rho_threshold); // sgn for threshold mask - const std::vector sgn = XC_Functional_Libxc::cal_sgn(rho_threshold, grho_threshold, func, nspin, nrxx, rho, sigma); + const std::vector sgn + = XC_Functional_Libxc::cal_sgn(rho_threshold, grho_threshold, func, nspin, nrxx, rho, sigma); - std::vector exc ( nrxx ); - std::vector vrho ( nrxx * nspin ); - std::vector vsigma( nrxx * ((1==nspin)?1:3) ); - switch( func.info->family ) + std::vector exc(nrxx); + std::vector vrho(nrxx * nspin); + std::vector vsigma(nrxx * ((1 == nspin) ? 1 : 3)); + switch (func.info->family) { - case XC_FAMILY_LDA: - // call Libxc function: xc_lda_exc_vxc - xc_lda_exc_vxc( &func, nrxx, rho.data(), - exc.data(), vrho.data() ); - break; - case XC_FAMILY_GGA: - case XC_FAMILY_HYB_GGA: - // call Libxc function: xc_gga_exc_vxc - xc_gga_exc_vxc( &func, nrxx, rho.data(), sigma.data(), - exc.data(), vrho.data(), vsigma.data() ); - break; - default: - throw std::domain_error("func.info->family ="+std::to_string(func.info->family) - +" unfinished in "+std::string(__FILE__)+" line "+std::to_string(__LINE__)); - break; + case XC_FAMILY_LDA: + // call Libxc function: xc_lda_exc_vxc + xc_lda_exc_vxc(&func, nrxx, rho.data(), exc.data(), vrho.data()); + break; + case XC_FAMILY_GGA: + case XC_FAMILY_HYB_GGA: + // call Libxc function: xc_gga_exc_vxc + xc_gga_exc_vxc(&func, nrxx, rho.data(), sigma.data(), exc.data(), vrho.data(), vsigma.data()); + break; + default: + throw std::domain_error("func.info->family =" + std::to_string(func.info->family) + " unfinished in " + + std::string(__FILE__) + " line " + std::to_string(__LINE__)); + break; } // added by jghan, 2024-10-10 double factor = 1.0; - if( scaling_factor == nullptr ) { ; - } else + if (scaling_factor == nullptr) + { + ; + } + else { auto pair_factor = scaling_factor->find(func.info->number); - if( pair_factor != scaling_factor->end() ) { factor = pair_factor->second; -} + if (pair_factor != scaling_factor->end()) + { + factor = pair_factor->second; + } } // time factor is added by jghan, 2024-10-10 etxc += XC_Functional_Libxc::convert_etxc(nspin, nrxx, sgn, rho, exc) * factor; - const std::pair vtxc_v = XC_Functional_Libxc::convert_vtxc_v( - func, nspin, nrxx, - sgn, rho, gdr, - vrho, vsigma, - tpiba, chr); + const std::pair vtxc_v + = XC_Functional_Libxc::convert_vtxc_v(func, nspin, nrxx, sgn, rho, gdr, vrho, vsigma, tpiba, chr); vtxc += std::get<0>(vtxc_v) * factor; v += std::get<1>(vtxc_v) * factor; } // end for( xc_func_type &func : funcs ) - if(4==PARAM.inp.nspin) + if (4 == PARAM.inp.nspin) { v = XC_Functional_Libxc::convert_v_nspin4(nrxx, chr, amag, v); } - //------------------------------------------------- - // for MPI, reduce the exchange-correlation energy - //------------------------------------------------- - #ifdef __MPI +//------------------------------------------------- +// for MPI, reduce the exchange-correlation energy +//------------------------------------------------- +#ifdef __MPI Parallel_Reduce::reduce_pool(etxc); Parallel_Reduce::reduce_pool(vtxc); - #endif +#endif etxc *= omega / chr->rhopw->nxyz; vtxc *= omega / chr->rhopw->nxyz; XC_Functional_Libxc::finish_func(funcs); - ModuleBase::timer::tick("XC_Functional_Libxc","v_xc_libxc"); - return std::make_tuple( etxc, vtxc, std::move(v) ); + ModuleBase::timer::tick("XC_Functional_Libxc", "v_xc_libxc"); + return std::make_tuple(etxc, vtxc, std::move(v)); } +// the interface to libxc xc_mgga_exc_vxc(xc_func,n,rho,grho,laplrho,tau,e,v1,v2,v3,v4) +// xc_func : LIBXC data type, contains information on xc functional +// n: size of array, nspin*nnr +// rho,grho,laplrho: electron density, its gradient and laplacian +// tau(kin_r): kinetic energy density +// e: energy density +// v1-v4: derivative of energy density w.r.t rho, gradient, laplacian and tau +// v1 and v2 are combined to give v; v4 goes into vofk -//the interface to libxc xc_mgga_exc_vxc(xc_func,n,rho,grho,laplrho,tau,e,v1,v2,v3,v4) -//xc_func : LIBXC data type, contains information on xc functional -//n: size of array, nspin*nnr -//rho,grho,laplrho: electron density, its gradient and laplacian -//tau(kin_r): kinetic energy density -//e: energy density -//v1-v4: derivative of energy density w.r.t rho, gradient, laplacian and tau -//v1 and v2 are combined to give v; v4 goes into vofk - -//XC_POLARIZED, XC_UNPOLARIZED: internal flags used in LIBXC, denote the polarized(nspin=1) or unpolarized(nspin=2) calculations, definition can be found in xc.h from LIBXC +// XC_POLARIZED, XC_UNPOLARIZED: internal flags used in LIBXC, denote the polarized(nspin=1) or unpolarized(nspin=2) +// calculations, definition can be found in xc.h from LIBXC // [etxc, vtxc, v, vofk] = XC_Functional::v_xc(...) -std::tuple XC_Functional_Libxc::v_xc_meta( - const std::vector &func_id, - const int &nrxx, // number of real-space grid - const double &omega, // volume of cell +std::tuple XC_Functional_Libxc::v_xc_meta( + const std::vector& func_id, + const int& nrxx, // number of real-space grid + const double& omega, // volume of cell const double tpiba, const Charge* const chr) { - ModuleBase::TITLE("XC_Functional_Libxc","v_xc_meta"); - ModuleBase::timer::tick("XC_Functional_Libxc","v_xc_meta"); + ModuleBase::TITLE("XC_Functional_Libxc", "v_xc_meta"); + ModuleBase::timer::tick("XC_Functional_Libxc", "v_xc_meta"); double e2 = 2.0; - //output of the subroutine + // output of the subroutine double etxc = 0.0; double vtxc = 0.0; - ModuleBase::matrix v(PARAM.inp.nspin,nrxx); - ModuleBase::matrix vofk(PARAM.inp.nspin,nrxx); + ModuleBase::matrix v(PARAM.inp.nspin, nrxx); + ModuleBase::matrix vofk(PARAM.inp.nspin, nrxx); //---------------------------------------------------------- // xc_func_type is defined in Libxc package @@ -195,55 +195,55 @@ std::tuple XC_Functional_Li const int nspin = PARAM.inp.nspin; std::vector funcs = XC_Functional_Libxc::init_func( - /* func_id = */ func_id, - /* xc_polarized = */ (1==nspin) ? XC_UNPOLARIZED:XC_POLARIZED); + /* func_id = */ func_id, + /* xc_polarized = */ (1 == nspin) ? XC_UNPOLARIZED : XC_POLARIZED); const std::vector rho = XC_Functional_Libxc::convert_rho(nspin, nrxx, chr); const std::vector>> gdr = XC_Functional_Libxc::cal_gdr(nspin, nrxx, rho, tpiba, chr); const std::vector sigma = XC_Functional_Libxc::convert_sigma(gdr); - //converting kin_r + // converting kin_r std::vector kin_r; - kin_r.resize(nrxx*nspin); + kin_r.resize(nrxx * nspin); #ifdef _OPENMP #pragma omp parallel for collapse(2) schedule(static, 1024) #endif - for( int is=0; iskin_r[is][ir] / 2.0; + kin_r[ir * nspin + is] = chr->kin_r[is][ir] / 2.0; } } - std::vector exc ( nrxx ); - std::vector vrho ( nrxx * nspin ); - std::vector vsigma ( nrxx * ((1==nspin)?1:3) ); - std::vector vtau ( nrxx * nspin ); - std::vector vlapl ( nrxx * nspin ); + std::vector exc(nrxx); + std::vector vrho(nrxx * nspin); + std::vector vsigma(nrxx * ((1 == nspin) ? 1 : 3)); + std::vector vtau(nrxx * nspin); + std::vector vlapl(nrxx * nspin); - constexpr double rho_th = 1e-8; + constexpr double rho_th = 1e-8; constexpr double grho_th = 1e-12; - constexpr double tau_th = 1e-8; + constexpr double tau_th = 1e-8; // sgn for threshold mask - std::vector sgn( nrxx * nspin); + std::vector sgn(nrxx * nspin); #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int i = 0; i < nrxx * nspin; ++i) + for (int i = 0; i < nrxx * nspin; ++i) { sgn[i] = 1.0; } - if(nspin == 1) + if (nspin == 1) { #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for( int ir=0; ir XC_Functional_Li #ifdef _OPENMP #pragma omp parallel for schedule(static, 512) #endif - for( int ir=0; irfamily == XC_FAMILY_MGGA); - xc_mgga_exc_vxc(&func, nrxx, rho.data(), sigma.data(), sigma.data(), - kin_r.data(), exc.data(), vrho.data(), vsigma.data(), vlapl.data(), vtau.data()); - - //process etxc - for( int is=0; is!=nspin; ++is ) + xc_mgga_exc_vxc(&func, + nrxx, + rho.data(), + sigma.data(), + sigma.data(), + kin_r.data(), + exc.data(), + vrho.data(), + vsigma.data(), + vlapl.data(), + vtau.data()); + + // process etxc + for (int is = 0; is != nspin; ++is) { #ifdef _OPENMP -#pragma omp parallel for reduction(+:etxc) schedule(static, 256) +#pragma omp parallel for reduction(+ : etxc) schedule(static, 256) #endif - for( int ir=0; ir< nrxx; ++ir ) + for (int ir = 0; ir < nrxx; ++ir) { #ifdef __EXX if (func.info->number == XC_MGGA_X_SCAN && XC_Functional::get_func_type() == 5) @@ -285,40 +297,38 @@ std::tuple XC_Functional_Li exc[ir] *= (1.0 - XC_Functional::get_hybrid_alpha()); } #endif - etxc += ModuleBase::e2 * exc[ir] * rho[ir*nspin+is] * sgn[ir*nspin+is]; + etxc += ModuleBase::e2 * exc[ir] * rho[ir * nspin + is] * sgn[ir * nspin + is]; } } - //process vtxc + // process vtxc #ifdef _OPENMP -#pragma omp parallel for collapse(2) reduction(+:vtxc) schedule(static, 256) +#pragma omp parallel for collapse(2) reduction(+ : vtxc) schedule(static, 256) #endif - for( int is=0; isnumber == XC_MGGA_X_SCAN && XC_Functional::get_func_type() == 5) { - vrho[ir*nspin+is] *= (1.0 - XC_Functional::get_hybrid_alpha()); + vrho[ir * nspin + is] *= (1.0 - XC_Functional::get_hybrid_alpha()); } #endif - const double v_tmp = ModuleBase::e2 * vrho[ir*nspin+is] * sgn[ir*nspin+is]; - v(is,ir) += v_tmp; + const double v_tmp = ModuleBase::e2 * vrho[ir * nspin + is] * sgn[ir * nspin + is]; + v(is, ir) += v_tmp; vtxc += v_tmp * chr->rho[is][ir]; } } - //process vsigma - std::vector>> h( - nspin, - std::vector>(nrxx) ); - if( 1==nspin ) + // process vsigma + std::vector>> h(nspin, std::vector>(nrxx)); + if (1 == nspin) { #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for( int ir=0; ir< nrxx; ++ir ) + for (int ir = 0; ir < nrxx; ++ir) { #ifdef __EXX if (func.info->number == XC_MGGA_X_SCAN && XC_Functional::get_func_type() == 5) @@ -334,61 +344,61 @@ std::tuple XC_Functional_Li #ifdef _OPENMP #pragma omp parallel for schedule(static, 64) #endif - for( int ir=0; ir< nrxx; ++ir ) + for (int ir = 0; ir < nrxx; ++ir) { #ifdef __EXX if (func.info->number == XC_MGGA_X_SCAN && XC_Functional::get_func_type() == 5) { - vsigma[ir*3] *= (1.0 - XC_Functional::get_hybrid_alpha()); - vsigma[ir*3+1] *= (1.0 - XC_Functional::get_hybrid_alpha()); - vsigma[ir*3+2] *= (1.0 - XC_Functional::get_hybrid_alpha()); + vsigma[ir * 3] *= (1.0 - XC_Functional::get_hybrid_alpha()); + vsigma[ir * 3 + 1] *= (1.0 - XC_Functional::get_hybrid_alpha()); + vsigma[ir * 3 + 2] *= (1.0 - XC_Functional::get_hybrid_alpha()); } #endif - h[0][ir] = 2.0 * (gdr[0][ir] * vsigma[ir*3 ] * sgn[ir*2 ] * 2.0 - + gdr[1][ir] * vsigma[ir*3+1] * sgn[ir*2] * sgn[ir*2+1]); - h[1][ir] = 2.0 * (gdr[1][ir] * vsigma[ir*3+2] * sgn[ir*2+1] * 2.0 - + gdr[0][ir] * vsigma[ir*3+1] * sgn[ir*2] * sgn[ir*2+1]); + h[0][ir] = 2.0 + * (gdr[0][ir] * vsigma[ir * 3] * sgn[ir * 2] * 2.0 + + gdr[1][ir] * vsigma[ir * 3 + 1] * sgn[ir * 2] * sgn[ir * 2 + 1]); + h[1][ir] = 2.0 + * (gdr[1][ir] * vsigma[ir * 3 + 2] * sgn[ir * 2 + 1] * 2.0 + + gdr[0][ir] * vsigma[ir * 3 + 1] * sgn[ir * 2] * sgn[ir * 2 + 1]); } } // define two dimensional array dh [ nspin, nrxx ] - std::vector> dh(nspin, std::vector( nrxx)); - for( int is=0; is!=nspin; ++is ) + std::vector> dh(nspin, std::vector(nrxx)); + for (int is = 0; is != nspin; ++is) { - XC_Functional::grad_dot( h[is].data(), - dh[is].data(), chr->rhopw, - tpiba); + XC_Functional::grad_dot(h[is].data(), dh[is].data(), chr->rhopw, tpiba); } double rvtxc = 0.0; #ifdef _OPENMP -#pragma omp parallel for collapse(2) reduction(+:rvtxc) schedule(static, 256) +#pragma omp parallel for collapse(2) reduction(+ : rvtxc) schedule(static, 256) #endif - for( int is=0; isnumber == XC_MGGA_X_SCAN && XC_Functional::get_func_type() == 5) { - vtau[ir*nspin+is] *= (1.0 - XC_Functional::get_hybrid_alpha()); + vtau[ir * nspin + is] *= (1.0 - XC_Functional::get_hybrid_alpha()); } #endif - vofk(is,ir) += vtau[ir*nspin+is] * sgn[ir*nspin+is]; + vofk(is, ir) += vtau[ir * nspin + is] * sgn[ir * nspin + is]; } } } @@ -406,8 +416,8 @@ std::tuple XC_Functional_Li XC_Functional_Libxc::finish_func(funcs); - ModuleBase::timer::tick("XC_Functional_Libxc","v_xc_meta"); - return std::make_tuple( etxc, vtxc, std::move(v), std::move(vofk) ); + ModuleBase::timer::tick("XC_Functional_Libxc", "v_xc_meta"); + return std::make_tuple(etxc, vtxc, std::move(v), std::move(vofk)); } #endif \ No newline at end of file diff --git a/source/module_hamilt_general/module_xc/xc_functional_vxc.cpp b/source/module_hamilt_general/module_xc/xc_functional_vxc.cpp index 7a2adef8e3..e7bc5d3d4b 100644 --- a/source/module_hamilt_general/module_xc/xc_functional_vxc.cpp +++ b/source/module_hamilt_general/module_xc/xc_functional_vxc.cpp @@ -4,34 +4,38 @@ // NOTE : it is only used for nspin = 1 and 2, the nspin = 4 case is treated in v_xc // 3. v_xc_meta : which takes rho and tau as input, and v_xc as output -#include "xc_functional.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" #include "module_parameter/parameter.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "xc_functional.h" #ifdef USE_LIBXC #include "xc_functional_libxc.h" #endif // [etxc, vtxc, v] = XC_Functional::v_xc(...) -std::tuple XC_Functional::v_xc( - const int &nrxx, // number of real-space grid - const Charge* const chr, - const UnitCell *ucell) // core charge density +std::tuple XC_Functional::v_xc(const int& nrxx, // number of real-space grid + const Charge* const chr, + const UnitCell* ucell) // core charge density { - ModuleBase::TITLE("XC_Functional","v_xc"); - ModuleBase::timer::tick("XC_Functional","v_xc"); + ModuleBase::TITLE("XC_Functional", "v_xc"); + ModuleBase::timer::tick("XC_Functional", "v_xc"); - if(use_libxc) + if (use_libxc) { #ifdef USE_LIBXC - return XC_Functional_Libxc::v_xc_libxc(XC_Functional::get_func_id(), nrxx, ucell->omega, ucell->tpiba, chr, &(scaling_factor_xc)); + return XC_Functional_Libxc::v_xc_libxc(XC_Functional::get_func_id(), + nrxx, + ucell->omega, + ucell->tpiba, + chr, + &(scaling_factor_xc)); #else - ModuleBase::WARNING_QUIT("v_xc","compile with LIBXC"); + ModuleBase::WARNING_QUIT("v_xc", "compile with LIBXC"); #endif } - //Exchange-Correlation potential Vxc(r) from n(r) + // Exchange-Correlation potential Vxc(r) from n(r) double etxc = 0.0; double vtxc = 0.0; ModuleBase::matrix v(PARAM.inp.nspin, nrxx); @@ -42,58 +46,58 @@ std::tuple XC_Functional::v_xc( double vanishing_charge = 1.0e-10; - if (PARAM.inp.nspin == 1 || ( PARAM.inp.nspin ==4 && !PARAM.globalv.domag && !PARAM.globalv.domag_z)) + if (PARAM.inp.nspin == 1 || (PARAM.inp.nspin == 4 && !PARAM.globalv.domag && !PARAM.globalv.domag_z)) { // spin-unpolarized case #ifdef _OPENMP -#pragma omp parallel for reduction(+:etxc) reduction(+:vtxc) +#pragma omp parallel for reduction(+ : etxc) reduction(+ : vtxc) #endif - for (int ir = 0;ir < nrxx;ir++) + for (int ir = 0; ir < nrxx; ir++) { // total electron charge density double rhox = chr->rho[0][ir] + chr->rho_core[ir]; - + double arhox = std::abs(rhox); if (arhox > vanishing_charge) { double exc = 0.0; double vxc = 0.0; XC_Functional::xc(arhox, exc, vxc); - v(0,ir) = e2 * vxc; + v(0, ir) = e2 * vxc; // consider the total charge density etxc += e2 * exc * rhox; // only consider chr->rho vtxc += v(0, ir) * chr->rho[0][ir]; } // endif - } //enddo + } // enddo } - else if(PARAM.inp.nspin ==2) + else if (PARAM.inp.nspin == 2) { // spin-polarized case #ifdef _OPENMP -#pragma omp parallel for reduction(+:etxc) reduction(+:vtxc) +#pragma omp parallel for reduction(+ : etxc) reduction(+ : vtxc) #endif - for (int ir = 0;ir < nrxx;ir++) + for (int ir = 0; ir < nrxx; ir++) { - double rhox = chr->rho[0][ir] + chr->rho[1][ir] + chr->rho_core[ir]; //HLX(05-29-06): bug fixed + double rhox = chr->rho[0][ir] + chr->rho[1][ir] + chr->rho_core[ir]; // HLX(05-29-06): bug fixed double arhox = std::abs(rhox); if (arhox > vanishing_charge) { - double zeta = (chr->rho[0][ir] - chr->rho[1][ir]) / arhox; //HLX(05-29-06): bug fixed + double zeta = (chr->rho[0][ir] - chr->rho[1][ir]) / arhox; // HLX(05-29-06): bug fixed - if (std::abs(zeta) > 1.0) + if (std::abs(zeta) > 1.0) { zeta = (zeta > 0.0) ? 1.0 : (-1.0); } - double rhoup = arhox * (1.0+zeta) / 2.0; - double rhodw = arhox * (1.0-zeta) / 2.0; + double rhoup = arhox * (1.0 + zeta) / 2.0; + double rhodw = arhox * (1.0 - zeta) / 2.0; double exc = 0.0; double vxc[2]; XC_Functional::xc_spin(arhox, zeta, exc, vxc[0], vxc[1]); - for (int is = 0;is < PARAM.inp.nspin;is++) + for (int is = 0; is < PARAM.inp.nspin; is++) { v(is, ir) = e2 * vxc[is]; } @@ -103,64 +107,64 @@ std::tuple XC_Functional::v_xc( } } } - else if(PARAM.inp.nspin == 4)//noncollinear case added by zhengdy + else if (PARAM.inp.nspin == 4) // noncollinear case added by zhengdy { #ifdef _OPENMP -#pragma omp parallel for reduction(+:etxc) reduction(+:vtxc) +#pragma omp parallel for reduction(+ : etxc) reduction(+ : vtxc) #endif - for(int ir = 0;irrho[1][ir],2) + pow(chr->rho[2][ir],2) + pow(chr->rho[3][ir],2) ); + double amag = sqrt(pow(chr->rho[1][ir], 2) + pow(chr->rho[2][ir], 2) + pow(chr->rho[3][ir], 2)); double rhox = chr->rho[0][ir] + chr->rho_core[ir]; - double arhox = std::abs( rhox ); + double arhox = std::abs(rhox); - if ( arhox > vanishing_charge ) + if (arhox > vanishing_charge) { double zeta = amag / arhox; double exc = 0.0; double vxc[2]; - if ( std::abs( zeta ) > 1.0 ) + if (std::abs(zeta) > 1.0) { zeta = (zeta > 0.0) ? 1.0 : (-1.0); - }//end if + } // end if - if(use_libxc) + if (use_libxc) { #ifdef USE_LIBXC - double rhoup = arhox * (1.0+zeta) / 2.0; - double rhodw = arhox * (1.0-zeta) / 2.0; + double rhoup = arhox * (1.0 + zeta) / 2.0; + double rhodw = arhox * (1.0 - zeta) / 2.0; XC_Functional_Libxc::xc_spin_libxc(XC_Functional::get_func_id(), rhoup, rhodw, exc, vxc[0], vxc[1]); #else - ModuleBase::WARNING_QUIT("v_xc","compile with LIBXC"); -#endif + ModuleBase::WARNING_QUIT("v_xc", "compile with LIBXC"); +#endif } else { - double rhoup = arhox * (1.0+zeta) / 2.0; - double rhodw = arhox * (1.0-zeta) / 2.0; + double rhoup = arhox * (1.0 + zeta) / 2.0; + double rhodw = arhox * (1.0 - zeta) / 2.0; XC_Functional::xc_spin(arhox, zeta, exc, vxc[0], vxc[1]); } etxc += e2 * exc * rhox; - v(0, ir) = e2*( 0.5 * ( vxc[0] + vxc[1]) ); - vtxc += v(0,ir) * chr->rho[0][ir]; + v(0, ir) = e2 * (0.5 * (vxc[0] + vxc[1])); + vtxc += v(0, ir) * chr->rho[0][ir]; - double vs = 0.5 * ( vxc[0] - vxc[1] ); - if ( amag > vanishing_charge ) + double vs = 0.5 * (vxc[0] - vxc[1]); + if (amag > vanishing_charge) { - for(int ipol = 1;ipol< 4;ipol++) + for (int ipol = 1; ipol < 4; ipol++) { v(ipol, ir) = e2 * vs * chr->rho[ipol][ir] / amag; - vtxc += v(ipol,ir) * chr->rho[ipol][ir]; - }//end do - }//end if - }//end if - }//end do - }//end if + vtxc += v(ipol, ir) * chr->rho[ipol][ir]; + } // end do + } // end if + } // end if + } // end do + } // end if // energy terms, local-density contributions // add gradient corrections (if any) @@ -180,6 +184,6 @@ std::tuple XC_Functional::v_xc( etxc *= ucell->omega / chr->rhopw->nxyz; vtxc *= ucell->omega / chr->rhopw->nxyz; - ModuleBase::timer::tick("XC_Functional","v_xc"); + ModuleBase::timer::tick("XC_Functional", "v_xc"); return std::make_tuple(etxc, vtxc, std::move(v)); } diff --git a/source/module_hamilt_general/module_xc/xc_functional_wrapper_gcxc.cpp b/source/module_hamilt_general/module_xc/xc_functional_wrapper_gcxc.cpp index a162c5f06f..90af5af559 100644 --- a/source/module_hamilt_general/module_xc/xc_functional_wrapper_gcxc.cpp +++ b/source/module_hamilt_general/module_xc/xc_functional_wrapper_gcxc.cpp @@ -6,17 +6,17 @@ // 4. gcxc_libxc, the entire GGA functional, LIBXC, for nspin=1 case // 5. gcxc_spin_libxc, the entire GGA functional, LIBXC, for nspin=2 case +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/global_function.h" #include "xc_functional.h" + #include -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/global_function.h" #ifdef USE_LIBXC #include "xc_functional_libxc.h" #endif -void XC_Functional::gcxc(const double &rho, const double &grho, double &sxc, - double &v1xc, double &v2xc) +void XC_Functional::gcxc(const double& rho, const double& grho, double& sxc, double& v1xc, double& v2xc) { //----------------------------------------------------------------------- // gradient corrections for exchange and correlation - Hartree a.u. @@ -42,7 +42,7 @@ void XC_Functional::gcxc(const double &rho, const double &grho, double &sxc, // real rho, grho, sx, sc, v1x, v2x, v1c, v2c; const double small = 1.e-6; const double smallg = 1.e-10; - double s,v1,v2; + double s, v1, v2; sxc = v1xc = v2xc = 0.0; if (rho <= small || grho < smallg) @@ -50,51 +50,68 @@ void XC_Functional::gcxc(const double &rho, const double &grho, double &sxc, return; } - for(int id : func_id) + for (int id: func_id) { - switch( id ) + switch (id) { - case XC_GGA_X_B88: //B88 - XC_Functional::becke88(rho, grho, s, v1, v2);break; - case XC_GGA_X_PW91: //PW91_X - XC_Functional::ggax(rho, grho, s, v1, v2);break; - case XC_GGA_X_PBE: //PBX - XC_Functional::pbex(rho, grho, 0, s, v1, v2);break; - case XC_GGA_X_PBE_R: //revised PBX - XC_Functional::pbex(rho, grho, 1, s, v1, v2);break; - case XC_GGA_X_HCTH_A: //HCTH_X - XC_Functional::hcth(rho, grho, s, v1, v2);break; //XC together - case XC_GGA_C_HCTH_A: //HCTH_C - s = 0.0; v1 = 0.0; v2 = 0.0;break; - case XC_GGA_X_OPTX: //OPTX - XC_Functional::optx(rho, grho, s, v1, v2);break; - case XC_GGA_X_PBE_SOL: //PBXsol - XC_Functional::pbex(rho, grho, 2, s, v1, v2);break; - case XC_GGA_X_WC: //Wu-Cohen - XC_Functional::wcx (rho, grho, s, v1, v2);break; - case XC_GGA_C_P86: //P86 - XC_Functional::perdew86(rho, grho, s, v1, v2);break; - case XC_GGA_C_PW91: //PW91_C - XC_Functional::ggac(rho, grho, s, v1, v2);break; - case XC_GGA_C_PBE: //PBC - XC_Functional::pbec(rho, grho, 0, s, v1, v2);break; - case XC_GGA_C_PBE_SOL: //PBCsol - XC_Functional::pbec(rho, grho, 1, s, v1, v2);break; - case XC_GGA_C_LYP: //BLYP - XC_Functional::glyp(rho, grho, s, v1, v2); break; - case XC_HYB_GGA_XC_PBEH: //PBE0 - double sx, v1x, v2x, sc, v1c, v2c; - XC_Functional::pbex(rho, grho, 0, sx, v1x, v2x); - sx *= (1.0 - XC_Functional::hybrid_alpha); - v1x *= (1.0 - XC_Functional::hybrid_alpha); - v2x *= (1.0 - XC_Functional::hybrid_alpha); - XC_Functional::pbec(rho, grho, 0, sc, v1c, v2c); - s = sx + sc; - v1 = v1x + v1c; - v2 = v2x + v2c; - break; - default: //SCAN_X,SCAN_C,HSE, and so on - throw std::domain_error("functional unfinished in "+std::string(__FILE__)+" line "+std::to_string(__LINE__)); + case XC_GGA_X_B88: // B88 + XC_Functional::becke88(rho, grho, s, v1, v2); + break; + case XC_GGA_X_PW91: // PW91_X + XC_Functional::ggax(rho, grho, s, v1, v2); + break; + case XC_GGA_X_PBE: // PBX + XC_Functional::pbex(rho, grho, 0, s, v1, v2); + break; + case XC_GGA_X_PBE_R: // revised PBX + XC_Functional::pbex(rho, grho, 1, s, v1, v2); + break; + case XC_GGA_X_HCTH_A: // HCTH_X + XC_Functional::hcth(rho, grho, s, v1, v2); + break; // XC together + case XC_GGA_C_HCTH_A: // HCTH_C + s = 0.0; + v1 = 0.0; + v2 = 0.0; + break; + case XC_GGA_X_OPTX: // OPTX + XC_Functional::optx(rho, grho, s, v1, v2); + break; + case XC_GGA_X_PBE_SOL: // PBXsol + XC_Functional::pbex(rho, grho, 2, s, v1, v2); + break; + case XC_GGA_X_WC: // Wu-Cohen + XC_Functional::wcx(rho, grho, s, v1, v2); + break; + case XC_GGA_C_P86: // P86 + XC_Functional::perdew86(rho, grho, s, v1, v2); + break; + case XC_GGA_C_PW91: // PW91_C + XC_Functional::ggac(rho, grho, s, v1, v2); + break; + case XC_GGA_C_PBE: // PBC + XC_Functional::pbec(rho, grho, 0, s, v1, v2); + break; + case XC_GGA_C_PBE_SOL: // PBCsol + XC_Functional::pbec(rho, grho, 1, s, v1, v2); + break; + case XC_GGA_C_LYP: // BLYP + XC_Functional::glyp(rho, grho, s, v1, v2); + break; + case XC_HYB_GGA_XC_PBEH: // PBE0 + double sx, v1x, v2x, sc, v1c, v2c; + XC_Functional::pbex(rho, grho, 0, sx, v1x, v2x); + sx *= (1.0 - XC_Functional::hybrid_alpha); + v1x *= (1.0 - XC_Functional::hybrid_alpha); + v2x *= (1.0 - XC_Functional::hybrid_alpha); + XC_Functional::pbec(rho, grho, 0, sc, v1c, v2c); + s = sx + sc; + v1 = v1x + v1c; + v2 = v2x + v2c; + break; + default: // SCAN_X,SCAN_C,HSE, and so on + throw std::domain_error("functional unfinished in " + std::string(__FILE__) + " line " + + std::to_string(__LINE__)); } sxc += s; v1xc += v1; @@ -105,8 +122,15 @@ void XC_Functional::gcxc(const double &rho, const double &grho, double &sxc, } //----------------------------------------------------------------------- -void XC_Functional::gcx_spin(double rhoup, double rhodw, double grhoup2, double grhodw2, - double &sx, double &v1xup, double &v1xdw, double &v2xup, double &v2xdw) +void XC_Functional::gcx_spin(double rhoup, + double rhodw, + double grhoup2, + double grhodw2, + double& sx, + double& v1xup, + double& v1xdw, + double& v2xup, + double& v2xdw) { //-------------------------------------------------------------------- // gradient corrections for exchange - Hartree a.u. @@ -135,9 +159,12 @@ void XC_Functional::gcx_spin(double rhoup, double rhodw, double grhoup2, double double rho = rhoup + rhodw; sx = 0.00; - v1xup = 0.00; v2xup = 0.00; - v1xdw = 0.00; v2xdw = 0.00; - sxup = 0.00; sxdw = 0.00; + v1xup = 0.00; + v2xup = 0.00; + v1xdw = 0.00; + v2xdw = 0.00; + sxup = 0.00; + sxdw = 0.00; if (rho <= small) { @@ -147,84 +174,92 @@ void XC_Functional::gcx_spin(double rhoup, double rhodw, double grhoup2, double // not the correct way to do things, will change later // should put exchange and correlation together // like the others - //for(int id : func_id) + // for(int id : func_id) //{ - int id = func_id[0]; - switch( id ) + int id = func_id[0]; + switch (id) + { + case XC_GGA_X_B88: // B88 + if (rhoup > small && sqrt(fabs(grhoup2)) > small) + { + XC_Functional::becke88_spin(rhoup, grhoup2, sxup, v1xup, v2xup); + } + if (rhodw > small && sqrt(fabs(grhodw2)) > small) + { + XC_Functional::becke88_spin(rhodw, grhodw2, sxdw, v1xdw, v2xdw); + } + break; + case XC_GGA_X_PBE: // PBX + if (rhoup > small && sqrt(fabs(grhoup2)) > small) + { + XC_Functional::pbex(2.0 * rhoup, 4.0 * grhoup2, 0, sxup, v1xup, v2xup); + } + if (rhodw > small && sqrt(fabs(grhodw2)) > small) + { + XC_Functional::pbex(2.0 * rhodw, 4.0 * grhodw2, 0, sxdw, v1xdw, v2xdw); + } + break; + case XC_GGA_X_PBE_R: // revised PBX + if (rhoup > small && sqrt(fabs(grhoup2)) > small) + { + XC_Functional::pbex(2.0 * rhoup, 4.0 * grhoup2, 1, sxup, v1xup, v2xup); + } + if (rhodw > small && sqrt(fabs(grhodw2)) > small) + { + XC_Functional::pbex(2.0 * rhodw, 4.0 * grhodw2, 1, sxdw, v1xdw, v2xdw); + } + break; + case XC_HYB_GGA_XC_PBEH: // PBE0 + if (rhoup > small && sqrt(fabs(grhoup2)) > small) { - case XC_GGA_X_B88: //B88 - if (rhoup > small && sqrt(fabs(grhoup2)) > small) - { - XC_Functional::becke88_spin(rhoup, grhoup2, sxup, v1xup, v2xup); - } - if (rhodw > small && sqrt(fabs(grhodw2)) > small) - { - XC_Functional::becke88_spin(rhodw, grhodw2, sxdw, v1xdw, v2xdw); - } - break; - case XC_GGA_X_PBE: //PBX - if (rhoup > small && sqrt(fabs(grhoup2)) > small) - { - XC_Functional::pbex(2.0 * rhoup, 4.0 * grhoup2, 0, sxup, v1xup, v2xup); - } - if (rhodw > small && sqrt(fabs(grhodw2)) > small) - { - XC_Functional::pbex(2.0 * rhodw, 4.0 * grhodw2, 0, sxdw, v1xdw, v2xdw); - } - break; - case XC_GGA_X_PBE_R: //revised PBX - if (rhoup > small && sqrt(fabs(grhoup2)) > small) - { - XC_Functional::pbex(2.0 * rhoup, 4.0 * grhoup2, 1, sxup, v1xup, v2xup); - } - if (rhodw > small && sqrt(fabs(grhodw2)) > small) - { - XC_Functional::pbex(2.0 * rhodw, 4.0 * grhodw2, 1, sxdw, v1xdw, v2xdw); - } - break; - case XC_HYB_GGA_XC_PBEH: //PBE0 - if (rhoup > small && sqrt(fabs(grhoup2)) > small) - { - XC_Functional::pbex(2.0 * rhoup, 4.0 * grhoup2, 0, sxup, v1xup, v2xup); - sxup *= (1.0 - XC_Functional::hybrid_alpha); - v1xup *= (1.0 - XC_Functional::hybrid_alpha); - v2xup *= (1.0 - XC_Functional::hybrid_alpha); - } - if (rhodw > small && sqrt(fabs(grhodw2)) > small) - { - XC_Functional::pbex(2.0 * rhodw, 4.0 * grhodw2, 0, sxdw, v1xdw, v2xdw); - sxdw *= (1.0 - XC_Functional::hybrid_alpha); - v1xdw *= (1.0 - XC_Functional::hybrid_alpha); - v2xdw *= (1.0 - XC_Functional::hybrid_alpha); - } - break; - case XC_GGA_X_PBE_SOL: //PBXsol - if (rhoup > small && sqrt(fabs(grhoup2)) > small) - { - XC_Functional::pbex(2.0 * rhoup, 4.0 * grhoup2, 2, sxup, v1xup, v2xup); - } - if (rhodw > small && sqrt(fabs(grhodw2)) > small) - { - XC_Functional::pbex(2.0 * rhodw, 4.0 * grhodw2, 2, sxdw, v1xdw, v2xdw); - } - break; - default: - sxup = 0.0; sxdw = 0.0; - v1xup = 0.0; v2xup = 0.0; - v1xdw = 0.0; v2xdw = 0.0; + XC_Functional::pbex(2.0 * rhoup, 4.0 * grhoup2, 0, sxup, v1xup, v2xup); + sxup *= (1.0 - XC_Functional::hybrid_alpha); + v1xup *= (1.0 - XC_Functional::hybrid_alpha); + v2xup *= (1.0 - XC_Functional::hybrid_alpha); } - sx = 0.50 * (sxup + sxdw); - v2xup = 2.0 * v2xup; - v2xdw = 2.0 * v2xdw; + if (rhodw > small && sqrt(fabs(grhodw2)) > small) + { + XC_Functional::pbex(2.0 * rhodw, 4.0 * grhodw2, 0, sxdw, v1xdw, v2xdw); + sxdw *= (1.0 - XC_Functional::hybrid_alpha); + v1xdw *= (1.0 - XC_Functional::hybrid_alpha); + v2xdw *= (1.0 - XC_Functional::hybrid_alpha); + } + break; + case XC_GGA_X_PBE_SOL: // PBXsol + if (rhoup > small && sqrt(fabs(grhoup2)) > small) + { + XC_Functional::pbex(2.0 * rhoup, 4.0 * grhoup2, 2, sxup, v1xup, v2xup); + } + if (rhodw > small && sqrt(fabs(grhodw2)) > small) + { + XC_Functional::pbex(2.0 * rhodw, 4.0 * grhodw2, 2, sxdw, v1xdw, v2xdw); + } + break; + default: + sxup = 0.0; + sxdw = 0.0; + v1xup = 0.0; + v2xup = 0.0; + v1xdw = 0.0; + v2xdw = 0.0; + } + sx = 0.50 * (sxup + sxdw); + v2xup = 2.0 * v2xup; + v2xdw = 2.0 * v2xdw; //} return; -} //end subroutine gcx_spin +} // end subroutine gcx_spin // //----------------------------------------------------------------------- -void XC_Functional::gcc_spin(double rho, double &zeta, double grho, double &sc, - double &v1cup, double &v1cdw, double &v2c) +void XC_Functional::gcc_spin(double rho, + double& zeta, + double grho, + double& sc, + double& v1cup, + double& v1cdw, + double& v2c) { //------------------------------------------------------------------- // gradient corrections for correlations - Hartree a.u. @@ -246,12 +281,13 @@ void XC_Functional::gcc_spin(double rho, double &zeta, double grho, double &sc, // parameter : double small = 1.0e-10; - double epsr = 1.0e-6; + double epsr = 1.0e-6; double x; sc = 0.00; - v1cup = 0.00; v1cdw = 0.00; + v1cup = 0.00; + v1cdw = 0.00; v2c = 0.00; if (std::abs(zeta) - 1.0 > small || rho <= small || sqrt(std::abs(grho)) <= small) { @@ -262,38 +298,43 @@ void XC_Functional::gcc_spin(double rho, double &zeta, double grho, double &sc, // ... ( - 1.0 + epsr ) < zeta < ( 1.0 - epsr ) // zeta = SIGN( MIN( ABS( zeta ), ( 1.D0 - epsr ) ) , zeta ) x = std::min(std::abs(zeta), (1.0 - epsr)); - if(zeta>0) - { - zeta = x; - } - else - { - zeta = -x; - } - } //endif + if (zeta > 0) + { + zeta = x; + } + else + { + zeta = -x; + } + } // endif - if(func_id[0]==XC_HYB_GGA_XC_PBEH) + if (func_id[0] == XC_HYB_GGA_XC_PBEH) { XC_Functional::pbec_spin(rho, zeta, grho, 1, sc, v1cup, v1cdw, v2c); return; } - //for(int id : func_id) + // for(int id : func_id) //{ - int id = func_id[1]; - switch( id ) - { - case XC_GGA_C_P86: //P86 - XC_Functional::perdew86_spin(rho, zeta, grho, sc, v1cup, v1cdw, v2c);break; - case XC_GGA_C_PW91: //PW91_C - ModuleBase::WARNING_QUIT("xc_wrapper_gcxc","there seems to be something wrong with ggac_spin, better use libxc version instead");break; - //XC_Functional::ggac_spin(rho, zeta, grho, sc, v1cup, v1cdw, v2c); - case XC_GGA_C_PBE: //PBC - XC_Functional::pbec_spin(rho, zeta, grho, 1, sc, v1cup, v1cdw, v2c);break; - case XC_GGA_C_PBE_SOL: //PBCsol - XC_Functional::pbec_spin(rho, zeta, grho, 2, sc, v1cup, v1cdw, v2c);break; - } + int id = func_id[1]; + switch (id) + { + case XC_GGA_C_P86: // P86 + XC_Functional::perdew86_spin(rho, zeta, grho, sc, v1cup, v1cdw, v2c); + break; + case XC_GGA_C_PW91: // PW91_C + ModuleBase::WARNING_QUIT("xc_wrapper_gcxc", + "there seems to be something wrong with ggac_spin, better use libxc version instead"); + break; + // XC_Functional::ggac_spin(rho, zeta, grho, sc, v1cup, v1cdw, v2c); + case XC_GGA_C_PBE: // PBC + XC_Functional::pbec_spin(rho, zeta, grho, 1, sc, v1cup, v1cdw, v2c); + break; + case XC_GGA_C_PBE_SOL: // PBCsol + XC_Functional::pbec_spin(rho, zeta, grho, 2, sc, v1cup, v1cdw, v2c); + break; + } //} return; -} //end subroutine gcc_spin +} // end subroutine gcc_spin diff --git a/source/module_hamilt_general/operator.cpp b/source/module_hamilt_general/operator.cpp index 6682777322..c00263668d 100644 --- a/source/module_hamilt_general/operator.cpp +++ b/source/module_hamilt_general/operator.cpp @@ -1,6 +1,6 @@ #include "operator.h" -#include "module_base/timer.h" +#include "source_base/timer.h" using namespace hamilt; @@ -62,8 +62,8 @@ typename Operator::hpsi_info Operator::hPsi(hpsi_info& inp { syncmem_op()(hpsi_pointer, this->hpsi->get_pointer(), this->hpsi->size()); delete this->hpsi; - this->hpsi = new psi::Psi(hpsi_pointer, - 1, + this->hpsi = new psi::Psi(hpsi_pointer, + 1, nbands / psi_input->get_npol(), psi_input->get_nbasis(), psi_input->get_nbasis(), @@ -79,21 +79,21 @@ typename Operator::hpsi_info Operator::hPsi(hpsi_info& inp psi_input->get_nbasis(), true); - switch (op->get_act_type()) - { - case 2: - op->act(psi_wrapper, *this->hpsi, nbands); - break; - default: - op->act(nbands, - psi_input->get_nbasis(), - psi_input->get_npol(), - tmpsi_in, - this->hpsi->get_pointer(), - psi_input->get_current_nbas(), - is_first_node); - break; - } + switch (op->get_act_type()) + { + case 2: + op->act(psi_wrapper, *this->hpsi, nbands); + break; + default: + op->act(nbands, + psi_input->get_nbasis(), + psi_input->get_npol(), + tmpsi_in, + this->hpsi->get_pointer(), + psi_input->get_current_nbas(), + is_first_node); + break; + } }; ModuleBase::timer::tick("Operator", "hPsi"); @@ -162,7 +162,6 @@ void Operator::add(Operator* next) } } - template T* Operator::get_hpsi(const hpsi_info& info) const { @@ -184,7 +183,7 @@ T* Operator::get_hpsi(const hpsi_info& info) const { this->in_place = true; // this->hpsi = new psi::Psi(std::get<0>(info)[0], 1, nbands_range); - this->hpsi = new psi::Psi(1, + this->hpsi = new psi::Psi(1, nbands_range, std::get<0>(info)->get_nbasis(), std::get<0>(info)->get_nbasis(), @@ -193,12 +192,12 @@ T* Operator::get_hpsi(const hpsi_info& info) const else { this->in_place = false; - - this->hpsi = new psi::Psi(hpsi_pointer, - 1, - nbands_range, - std::get<0>(info)->get_nbasis(), - std::get<0>(info)->get_nbasis(), + + this->hpsi = new psi::Psi(hpsi_pointer, + 1, + nbands_range, + std::get<0>(info)->get_nbasis(), + std::get<0>(info)->get_nbasis(), true); } diff --git a/source/module_hamilt_general/operator.h b/source/module_hamilt_general/operator.h index 87567f9f36..6681757c9e 100644 --- a/source/module_hamilt_general/operator.h +++ b/source/module_hamilt_general/operator.h @@ -1,9 +1,9 @@ #ifndef OPERATOR_H #define OPERATOR_H -#include "module_base/global_function.h" -#include "module_base/tool_quit.h" #include "module_psi/psi.h" +#include "source_base/global_function.h" +#include "source_base/tool_quit.h" #include @@ -73,10 +73,8 @@ class Operator /// developer-friendly interfaces for act() function /// interface type 2: input and change the Psi-type HPsi - // virtual void act(const psi::Psi& psi_in, psi::Psi& psi_out) const {}; - virtual void act(const psi::Psi& psi_in, - psi::Psi& psi_out, - const int nbands) const {}; + // virtual void act(const psi::Psi& psi_in, psi::Psi& psi_out) const {}; + virtual void act(const psi::Psi& psi_in, psi::Psi& psi_out, const int nbands) const {}; /// interface type 3: return a Psi-type HPsi // virtual psi::Psi act(const psi::Psi& psi_in) const { return psi_in; }; diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/FORCE.h b/source/module_hamilt_lcao/hamilt_lcaodft/FORCE.h index cb28b3cb98..898937d122 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/FORCE.h +++ b/source/module_hamilt_lcao/hamilt_lcaodft/FORCE.h @@ -1,9 +1,6 @@ #ifndef W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_MODULE_HAMILT_LCAO_HAMILT_LCAODFT_FORCE_H #define W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_MODULE_HAMILT_LCAO_HAMILT_LCAODFT_FORCE_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/matrix.h" #include "module_basis/module_nao/two_center_bundle.h" #include "module_elecstate/elecstate.h" #include "module_elecstate/module_dm/density_matrix.h" @@ -13,6 +10,9 @@ #include "module_hamilt_lcao/module_gint/gint_gamma.h" #include "module_hamilt_lcao/module_gint/gint_k.h" #include "module_psi/psi.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/matrix.h" #ifndef TGINT_H #define TGINT_H diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_STRESS.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_STRESS.cpp index 30abb40823..5e87f8228e 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_STRESS.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_STRESS.cpp @@ -5,7 +5,6 @@ #include "module_io/output_log.h" #include "module_parameter/parameter.h" // new -#include "module_base/timer.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_elecstate/elecstate_lcao.h" #include "module_elecstate/module_pot/H_TDDFT_pw.h" // Taoni add 2025-02-20 @@ -14,6 +13,7 @@ #include "module_hamilt_general/module_surchem/surchem.h" //sunml add 2022-08-10 #include "module_hamilt_general/module_vdw/vdw.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" #ifdef __MLALGO #include "module_hamilt_lcao/module_deepks/LCAO_deepks.h" //caoyu add for deepks 2021-06-03 #include "module_hamilt_lcao/module_deepks/LCAO_deepks_io.h" // mohan add 2024-07-22 @@ -482,11 +482,12 @@ void Force_Stress_LCAO::getForceStress(UnitCell& ucell, } // xiaohui add "OUT_LEVEL", 2015-09-16 -// if (PARAM.inp.out_level != "m") -// { -// GlobalV::ofs_running << " correction force for each atom along direction " << i + 1 << " is " -// << sum / nat << std::endl; -// } + // if (PARAM.inp.out_level != "m") + // { + // GlobalV::ofs_running << " correction force for each atom along direction " << i + 1 << " + // is " + // << sum / nat << std::endl; + // } } if (PARAM.inp.gate_flag || PARAM.inp.efield_flag) @@ -710,10 +711,7 @@ void Force_Stress_LCAO::getForceStress(UnitCell& ucell, } else { - LCAO_deepks_io::save_matrix2npy(file_sbase, - scs, - GlobalV::MY_RANK, - ucell.omega, + LCAO_deepks_io::save_matrix2npy(file_sbase, scs, GlobalV::MY_RANK, ucell.omega, 'U'); // sbase = stot } } @@ -997,7 +995,7 @@ void Force_Stress_LCAO::calStressPwPart(UnitCell& ucell, return; } -#include "module_base/mathzone.h" +#include "source_base/mathzone.h" // do symmetry for total force template void Force_Stress_LCAO::forceSymmetry(const UnitCell& ucell, ModuleBase::matrix& fcs, ModuleSymmetry::Symmetry* symm) diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_STRESS.h b/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_STRESS.h index ebd725f1a6..fed21ab961 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_STRESS.h +++ b/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_STRESS.h @@ -2,14 +2,14 @@ #define FORCE_STRESS_LCAO_H #include "FORCE.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/matrix.h" #include "module_hamilt_pw/hamilt_pwdft/forces.h" #include "module_hamilt_pw/hamilt_pwdft/stress_func.h" #include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" #include "module_io/input_conv.h" #include "module_psi/psi.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/matrix.h" #ifdef __EXX #include "module_ri/Exx_LRI_interface.h" #endif diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_gamma.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_gamma.cpp index 72fe2feba9..e1c8df5b70 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_gamma.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_gamma.cpp @@ -1,10 +1,10 @@ #include "FORCE.h" -#include "module_base/memory.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" +#include "source_base/memory.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" #ifdef __MLALGO #include "module_hamilt_lcao/module_deepks/LCAO_deepks.h" //caoyu add for deepks on 20210813 #include "module_hamilt_lcao/module_deepks/LCAO_deepks_io.h" diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_k.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_k.cpp index 8a5545e637..43152adf72 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_k.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/FORCE_k.cpp @@ -1,8 +1,4 @@ #include "FORCE.h" -#include "module_base/memory.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" -#include "module_base/tool_threading.h" #include "module_basis/module_ao/ORB_read.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_elecstate/cal_dm.h" @@ -13,6 +9,10 @@ #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/write_HS.h" #include "module_parameter/parameter.h" +#include "source_base/memory.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/tool_threading.h" #include #include diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_HS_arrays.hpp b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_HS_arrays.hpp index 908b04c80f..3f34e0798c 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_HS_arrays.hpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_HS_arrays.hpp @@ -1,12 +1,13 @@ #ifndef LCAO_HS_ARRAYS_H #define LCAO_HS_ARRAYS_H -#include "module_base/abfs-vector3_order.h" +#include "source_base/abfs-vector3_order.h" #include #include -class LCAO_HS_Arrays { +class LCAO_HS_Arrays +{ public: LCAO_HS_Arrays(){}; ~LCAO_HS_Arrays(){}; @@ -24,43 +25,21 @@ class LCAO_HS_Arrays { // For HR_sparse[2], when nspin=1, only 0 is valid, when nspin=2, 0 means // spin up, 1 means spin down - std::map, - std::map>> - HR_sparse[2]; - std::map, - std::map>> - SR_sparse; - std::map, - std::map>> - TR_sparse; + std::map, std::map>> HR_sparse[2]; + std::map, std::map>> SR_sparse; + std::map, std::map>> TR_sparse; - std::map, - std::map>> - dHRx_sparse[2]; - std::map, - std::map>> - dHRy_sparse[2]; - std::map, - std::map>> - dHRz_sparse[2]; + std::map, std::map>> dHRx_sparse[2]; + std::map, std::map>> dHRy_sparse[2]; + std::map, std::map>> dHRz_sparse[2]; // For nspin = 4 - std::map, - std::map>>> - HR_soc_sparse; - std::map, - std::map>>> - SR_soc_sparse; + std::map, std::map>>> HR_soc_sparse; + std::map, std::map>>> SR_soc_sparse; - std::map, - std::map>>> - dHRx_soc_sparse; - std::map, - std::map>>> - dHRy_soc_sparse; - std::map, - std::map>>> - dHRz_soc_sparse; + std::map, std::map>>> dHRx_soc_sparse; + std::map, std::map>>> dHRy_soc_sparse; + std::map, std::map>>> dHRz_soc_sparse; // Records the R direct coordinates of HR and SR output, This variable will // be filled with data when HR and SR files are output. diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_allocate.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_allocate.cpp index 49f5e2bb9b..45a6b225e5 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_allocate.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_allocate.cpp @@ -1,8 +1,8 @@ -#include "module_base/timer.h" #include "module_hamilt_lcao/hamilt_lcaodft/LCAO_domain.h" #include "module_hamilt_lcao/module_deepks/LCAO_deepks.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" namespace LCAO_domain { diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_domain.h b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_domain.h index 80b566356c..d008f736be 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_domain.h +++ b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_domain.h @@ -1,9 +1,6 @@ #ifndef LCAO_DOMAIN_H #define LCAO_DOMAIN_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/vector3.h" #include "module_basis/module_nao/two_center_bundle.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_lcao/hamilt_lcaodft/LCAO_HS_arrays.hpp" @@ -12,6 +9,9 @@ #include "module_hamilt_lcao/module_gint/gint_gamma.h" #include "module_hamilt_lcao/module_gint/gint_k.h" #include "module_hamilt_lcao/module_gint/grid_technique.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/vector3.h" namespace LCAO_domain { diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_hamilt.hpp b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_hamilt.hpp index 10f508c578..6a04e33754 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_hamilt.hpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_hamilt.hpp @@ -3,11 +3,11 @@ #ifndef LCAO_HAMILT_HPP #define LCAO_HAMILT_HPP -#include "module_base/abfs-vector3_order.h" -#include "module_base/global_variable.h" -#include "module_base/timer.h" #include "module_hamilt_lcao/hamilt_lcaodft/spar_exx.h" #include "module_ri/RI_2D_Comm.h" +#include "source_base/abfs-vector3_order.h" +#include "source_base/global_variable.h" +#include "source_base/timer.h" #include #include @@ -21,28 +21,27 @@ // Peize Lin add 2022.09.13 template -void sparse_format::cal_HR_exx(const UnitCell& ucell, +void sparse_format::cal_HR_exx( + const UnitCell& ucell, const Parallel_Orbitals& pv, LCAO_HS_Arrays& HS_Arrays, const int& current_spin, const double& sparse_threshold, const int (&nmp)[3], - const std::vector>, - RI::Tensor>>>& Hexxs) { + const std::vector>, RI::Tensor>>>& Hexxs) +{ ModuleBase::TITLE("sparse_format", "cal_HR_exx"); ModuleBase::timer::tick("sparse_format", "cal_HR_exx"); const Tdata frac = GlobalC::exx_info.info_global.hybrid_alpha; std::map> atoms_pos; - for (int iat = 0; iat < ucell.nat; ++iat) { - atoms_pos[iat] = RI_Util::Vector3_to_array3( - ucell.atoms[ucell.iat2it[iat]] - .tau[ucell.iat2ia[iat]]); + for (int iat = 0; iat < ucell.nat; ++iat) + { + atoms_pos[iat] = RI_Util::Vector3_to_array3(ucell.atoms[ucell.iat2it[iat]].tau[ucell.iat2ia[iat]]); } const std::array, 3> latvec - = {RI_Util::Vector3_to_array3(ucell.a1), // too bad to use GlobalC here, + = {RI_Util::Vector3_to_array3(ucell.a1), // too bad to use GlobalC here, RI_Util::Vector3_to_array3(ucell.a2), RI_Util::Vector3_to_array3(ucell.a3)}; @@ -51,92 +50,83 @@ void sparse_format::cal_HR_exx(const UnitCell& ucell, RI::Cell_Nearest cell_nearest; cell_nearest.init(atoms_pos, latvec, Rs_period); - const std::vector is_list = (PARAM.inp.nspin != 4) - ? std::vector{current_spin} - : std::vector{0, 1, 2, 3}; + const std::vector is_list + = (PARAM.inp.nspin != 4) ? std::vector{current_spin} : std::vector{0, 1, 2, 3}; - for (const int is: is_list) + for (const int is: is_list) { int is0_b = 0; int is1_b = 0; std::tie(is0_b, is1_b) = RI_2D_Comm::split_is_block(is); - if (Hexxs.empty()) + if (Hexxs.empty()) { break; } - for (const auto& HexxA: Hexxs[is]) + for (const auto& HexxA: Hexxs[is]) { const int iat0 = HexxA.first; - for (const auto& HexxB: HexxA.second) + for (const auto& HexxB: HexxA.second) { const int iat1 = HexxB.first.first; const Abfs::Vector3_Order R = RI_Util::array3_to_Vector3( - cell_nearest.get_cell_nearest_discrete(iat0, - iat1, - HexxB.first.second)); + cell_nearest.get_cell_nearest_discrete(iat0, iat1, HexxB.first.second)); HS_Arrays.all_R_coor.insert(R); const RI::Tensor& Hexx = HexxB.second; - for (size_t iw0 = 0; iw0 < Hexx.shape[0]; ++iw0) + for (size_t iw0 = 0; iw0 < Hexx.shape[0]; ++iw0) { - const int iwt0 = RI_2D_Comm::get_iwt(ucell,iat0, iw0, is0_b); + const int iwt0 = RI_2D_Comm::get_iwt(ucell, iat0, iw0, is0_b); const int iwt0_local = pv.global2local_row(iwt0); - if (iwt0_local < 0) + if (iwt0_local < 0) { continue; } - for (size_t iw1 = 0; iw1 < Hexx.shape[1]; ++iw1) + for (size_t iw1 = 0; iw1 < Hexx.shape[1]; ++iw1) { - const int iwt1 = RI_2D_Comm::get_iwt(ucell,iat1, iw1, is1_b); + const int iwt1 = RI_2D_Comm::get_iwt(ucell, iat1, iw1, is1_b); const int iwt1_local = pv.global2local_col(iwt1); - if (iwt1_local < 0) + if (iwt1_local < 0) { continue; } - if (std::abs(Hexx(iw0, iw1)) > sparse_threshold) + if (std::abs(Hexx(iw0, iw1)) > sparse_threshold) { - if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 2) + if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 2) { - auto& HR_sparse_ptr - = HS_Arrays - .HR_sparse[current_spin][R][iwt0]; + auto& HR_sparse_ptr = HS_Arrays.HR_sparse[current_spin][R][iwt0]; double& HR_sparse = HR_sparse_ptr[iwt1]; - HR_sparse += RI::Global_Func::convert( - frac * Hexx(iw0, iw1)); - if (std::abs(HR_sparse) <= sparse_threshold) + HR_sparse += RI::Global_Func::convert(frac * Hexx(iw0, iw1)); + if (std::abs(HR_sparse) <= sparse_threshold) { HR_sparse_ptr.erase(iwt1); } - } - else if (PARAM.inp.nspin == 4) + } + else if (PARAM.inp.nspin == 4) { - auto& HR_sparse_ptr - = HS_Arrays.HR_soc_sparse[R][iwt0]; - - std::complex& HR_sparse - = HR_sparse_ptr[iwt1]; - - HR_sparse += RI::Global_Func::convert< - std::complex>(frac * Hexx(iw0, iw1)); - - if (std::abs(HR_sparse) <= sparse_threshold) + auto& HR_sparse_ptr = HS_Arrays.HR_soc_sparse[R][iwt0]; + + std::complex& HR_sparse = HR_sparse_ptr[iwt1]; + + HR_sparse += RI::Global_Func::convert>(frac * Hexx(iw0, iw1)); + + if (std::abs(HR_sparse) <= sparse_threshold) { HR_sparse_ptr.erase(iwt1); } - } - else + } + else { throw std::invalid_argument(std::string(__FILE__) + " line " - + std::to_string(__LINE__)); + + std::to_string(__LINE__)); } } } diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_nl_mu.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_nl_mu.cpp index be02ede822..6396561da4 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_nl_mu.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_nl_mu.cpp @@ -1,6 +1,6 @@ -#include "module_base/timer.h" #include "module_hamilt_lcao/hamilt_lcaodft/LCAO_domain.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" namespace LCAO_domain { @@ -108,9 +108,10 @@ void build_Nonlocal_mu_new(const Parallel_Orbitals& pv, const int iw1_all = start1 + iw1; const int iw1_local = pv.global2local_row(iw1_all); const int iw2_local = pv.global2local_col(iw1_all); - if (iw1_local < 0 && iw2_local < 0) { + if (iw1_local < 0 && iw2_local < 0) + { continue; -} + } const int iw1_0 = iw1 / npol; std::vector> nlm; // nlm is a vector of vectors, but size of outer vector is only 1 here @@ -216,9 +217,11 @@ void build_Nonlocal_mu_new(const Parallel_Orbitals& pv, // this rcut is in order to make nnr consistent // with other matrix. rcut = pow(orb.Phi[T1].getRcut() + orb.Phi[T2].getRcut(), 2); - if (distance < rcut) { + if (distance < rcut) + { is_adj = true; - } else if (distance >= rcut) + } + else if (distance >= rcut) { for (int ad0 = 0; ad0 < adjs.adj_num + 1; ++ad0) { @@ -303,9 +306,10 @@ void build_Nonlocal_mu_new(const Parallel_Orbitals& pv, const int j0 = j / npol; // added by zhengdy-soc const int iw1_all = start1 + j; const int mu = pv.global2local_row(iw1_all); - if (mu < 0) { + if (mu < 0) + { continue; -} + } // fix a serious bug: atom2[T2] -> atom2 // mohan 2010-12-20 @@ -314,9 +318,10 @@ void build_Nonlocal_mu_new(const Parallel_Orbitals& pv, const int k0 = k / npol; const int iw2_all = start2 + k; const int nu = pv.global2local_col(iw2_all); - if (nu < 0) { + if (nu < 0) + { continue; -} + } if (!calc_deri) { @@ -340,10 +345,10 @@ void build_Nonlocal_mu_new(const Parallel_Orbitals& pv, if (nlm_tmp != 0.0) { LCAO_domain::set_mat2d(iw1_all, - iw2_all, - nlm_tmp, - pv, - NLloc); // N stands for nonlocal. + iw2_all, + nlm_tmp, + pv, + NLloc); // N stands for nonlocal. } } else diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_set_st.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_set_st.cpp index 718d504615..444c26ba0e 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_set_st.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_set_st.cpp @@ -1,6 +1,6 @@ -#include "module_base/timer.h" #include "module_hamilt_lcao/hamilt_lcaodft/LCAO_domain.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" namespace LCAO_domain { @@ -515,15 +515,17 @@ void build_ST_new(ForceStressArrays& fsr, for (int jj = 0; jj < atom1->nw * npol; ++jj) { const int mu = pv.global2local_row(start1 + jj); - if (mu < 0) { + if (mu < 0) + { continue; -} + } for (int kk = 0; kk < atom2->nw * npol; ++kk) { const int nu = pv.global2local_col(start2 + kk); - if (nu < 0) { + if (nu < 0) + { continue; -} + } ++total_nnr; ++nnr; } // kk diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_set_zero.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_set_zero.cpp index 039efae65d..6077aa10bb 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_set_zero.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/LCAO_set_zero.cpp @@ -1,22 +1,26 @@ #include "module_hamilt_lcao/hamilt_lcaodft/LCAO_domain.h" -#include "module_base/global_variable.h" #include "module_parameter/parameter.h" -#include "module_base/timer.h" -#include "module_base/tool_threading.h" +#include "source_base/global_variable.h" +#include "source_base/timer.h" +#include "source_base/tool_threading.h" namespace LCAO_domain { -void zeros_HSR(const char &mtype, LCAO_HS_Arrays& HS_arrays) +void zeros_HSR(const char& mtype, LCAO_HS_Arrays& HS_arrays) { - auto zeros_HSR_ker = [&](int num_threads, int thread_id) - { + auto zeros_HSR_ker = [&](int num_threads, int thread_id) { long long beg, len; - if(PARAM.inp.nspin!=4) + if (PARAM.inp.nspin != 4) { - if (mtype=='T') + if (mtype == 'T') { - ModuleBase::BLOCK_TASK_DIST_1D(num_threads, thread_id, (long long)HS_arrays.Hloc_fixedR.size(), (long long)512, beg, len); + ModuleBase::BLOCK_TASK_DIST_1D(num_threads, + thread_id, + (long long)HS_arrays.Hloc_fixedR.size(), + (long long)512, + beg, + len); ModuleBase::GlobalFunc::ZEROS(HS_arrays.Hloc_fixedR.data() + beg, len); } } @@ -25,4 +29,4 @@ void zeros_HSR(const char &mtype, LCAO_HS_Arrays& HS_arrays) return; } -} +} // namespace LCAO_domain diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb11.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb11.cpp index 7ad7ad7dfa..a40714e76f 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb11.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb11.cpp @@ -6,11 +6,11 @@ #include "center2_orb-orb11.h" #include "center2_orb.h" -#include "module_base/constants.h" -#include "module_base/math_polyint.h" -#include "module_base/sph_bessel_recursive.h" -#include "module_base/ylm.h" -#include "module_base/array_pool.h" +#include "source_base/array_pool.h" +#include "source_base/constants.h" +#include "source_base/math_polyint.h" +#include "source_base/sph_bessel_recursive.h" +#include "source_base/ylm.h" #include @@ -58,17 +58,20 @@ void Center2_Orb::Orb11::init_radial_table(const std::set& radials) const size_t rmesh = Center2_Orb::get_rmesh(this->nA.getRcut(), this->nB.getRcut(), dr_); std::set radials_used; - for (const size_t& ir: radials) { - if (ir < rmesh) { + for (const size_t& ir: radials) + { + if (ir < rmesh) + { radials_used.insert(ir); -} -} + } + } for (int LAB = std::abs(LA - LB); LAB <= LA + LB; ++LAB) { - if ((LAB - std::abs(LA - LB)) % 2 == 1) { // if LA+LB-LAB == odd, then Gaunt_Coefficients = 0 + if ((LAB - std::abs(LA - LB)) % 2 == 1) + { // if LA+LB-LAB == odd, then Gaunt_Coefficients = 0 continue; -} + } this->Table_r[LAB].resize(rmesh, 0); this->Table_dr[LAB].resize(rmesh, 0); @@ -97,9 +100,10 @@ double Center2_Orb::Orb11::cal_overlap(const ModuleBase::Vector3& RA, const double distance = (distance_true >= tiny1) ? distance_true : distance_true + tiny1; const double RcutA = this->nA.getRcut(); const double RcutB = this->nB.getRcut(); - if (distance > (RcutA + RcutB)) { + if (distance > (RcutA + RcutB)) + { return 0.0; -} + } const int LA = this->nA.getL(); const int LB = this->nB.getL(); @@ -123,14 +127,16 @@ double Center2_Orb::Orb11::cal_overlap(const ModuleBase::Vector3& RA, const double Gaunt_real_A_B_AB = this->MGT.Gaunt_Coefficients(this->MGT.get_lm_index(LA, mA), this->MGT.get_lm_index(LB, mB), this->MGT.get_lm_index(LAB, mAB)); - if (0 == Gaunt_real_A_B_AB) { + if (0 == Gaunt_real_A_B_AB) + { continue; -} + } const double ylm_solid = rly[this->MGT.get_lm_index(LAB, mAB)]; - if (0 == ylm_solid) { + if (0 == ylm_solid) + { continue; -} + } const double ylm_real = (distance > tiny2) ? ylm_solid / pow(distance, LAB) : ylm_solid; const double i_exp = std::pow(-1.0, (LA - LB - LAB) / 2); @@ -166,9 +172,10 @@ ModuleBase::Vector3 Center2_Orb::Orb11::cal_grad_overlap( // caoyu add 2 const double distance = (distance_true >= tiny1) ? distance_true : distance_true + tiny1; const double RcutA = this->nA.getRcut(); const double RcutB = this->nB.getRcut(); - if (distance > (RcutA + RcutB)) { + if (distance > (RcutA + RcutB)) + { return ModuleBase::Vector3(0.0, 0.0, 0.0); -} + } const int LA = this->nA.getL(); const int LB = this->nB.getL(); @@ -177,7 +184,7 @@ ModuleBase::Vector3 Center2_Orb::Orb11::cal_grad_overlap( // caoyu add 2 std::vector> grly; ModuleBase::Array_Pool tmp_grly((LA + LB + 1) * (LA + LB + 1), 3); ModuleBase::Ylm::grad_rl_sph_harm(LA + LB, delta_R.x, delta_R.y, delta_R.z, rly.data(), tmp_grly.get_ptr_2D()); - for (int i=0; i<(LA + LB + 1) * (LA + LB + 1); ++i) + for (int i = 0; i < (LA + LB + 1) * (LA + LB + 1); ++i) { ModuleBase::Vector3 ele(tmp_grly[i][0], tmp_grly[i][1], tmp_grly[i][2]); grly.push_back(ele); @@ -194,9 +201,10 @@ ModuleBase::Vector3 Center2_Orb::Orb11::cal_grad_overlap( // caoyu add 2 const double Gaunt_real_A_B_AB = this->MGT.Gaunt_Coefficients(this->MGT.get_lm_index(LA, mA), this->MGT.get_lm_index(LB, mB), this->MGT.get_lm_index(LAB, mAB)); - if (0 == Gaunt_real_A_B_AB) { + if (0 == Gaunt_real_A_B_AB) + { continue; -} + } const double ylm_solid = rly[this->MGT.get_lm_index(LAB, mAB)]; const double ylm_real = (distance > tiny2) ? ylm_solid / pow(distance, LAB) : ylm_solid; diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb11.h b/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb11.h index 8cd2eaa606..4179dc1e18 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb11.h +++ b/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb11.h @@ -7,10 +7,10 @@ #define W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_MODULE_HAMILT_LCAO_HAMILT_LCAODFT_CENTER2_ORB_ORB11_H #include "center2_orb.h" -#include "module_base/sph_bessel_recursive.h" -#include "module_base/vector3.h" #include "module_basis/module_ao/ORB_atomic_lm.h" #include "module_basis/module_ao/ORB_gaunt_table.h" +#include "source_base/sph_bessel_recursive.h" +#include "source_base/vector3.h" #include #include diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb21.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb21.cpp index ae0fde5fd6..b5b3e33a07 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb21.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb21.cpp @@ -5,9 +5,8 @@ //========================================================= #include "center2_orb-orb21.h" - -#include "module_base/constants.h" -#include "module_base/ylm.h" +#include "source_base/constants.h" +#include "source_base/ylm.h" #include diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb21.h b/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb21.h index 0f90bc7847..6e768ee234 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb21.h +++ b/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb21.h @@ -8,9 +8,9 @@ #include "center2_orb-orb11.h" #include "center2_orb.h" -#include "module_base/vector3.h" #include "module_basis/module_ao/ORB_atomic_lm.h" #include "module_basis/module_ao/ORB_gaunt_table.h" +#include "source_base/vector3.h" #include #include diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb22.h b/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb22.h index 0b44bcbc50..3484b236f6 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb22.h +++ b/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb22.h @@ -8,9 +8,9 @@ #include "center2_orb-orb21.h" #include "center2_orb.h" -#include "module_base/vector3.h" #include "module_basis/module_ao/ORB_atomic_lm.h" #include "module_basis/module_ao/ORB_gaunt_table.h" +#include "source_base/vector3.h" #include #include diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb.cpp index 6766349027..83b5595206 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb.cpp @@ -1,19 +1,20 @@ #include "center2_orb.h" -#include "module_base/constants.h" -#include "module_base/math_integral.h" -#include "module_base/mathzone_add1.h" -#include "module_base/memory.h" -#include "module_base/timer.h" -#include "module_base/tool_quit.h" -#include "module_base/tool_title.h" +#include "source_base/constants.h" +#include "source_base/math_integral.h" +#include "source_base/mathzone_add1.h" +#include "source_base/memory.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" +#include "source_base/tool_title.h" int Center2_Orb::get_rmesh(const double& R1, const double& R2, const double dr) { int rmesh = static_cast((R1 + R2) / dr) + 5; // mohan update 2009-09-08 +1 ==> +5 // considering interpolation or so on... - if (rmesh % 2 == 0) { + if (rmesh % 2 == 0) + { rmesh++; } @@ -273,7 +274,7 @@ void Center2_Orb::cal_ST_Phi12_R(const int& job, ModuleBase::timer::tick("Center2_Orb", "cal_ST_Phi12_R"); } -#include "module_base/constants.h" +#include "source_base/constants.h" // Peize Lin add 2017-10-27 void Center2_Orb::cal_ST_Phi12_R(const int& job, @@ -345,7 +346,8 @@ void Center2_Orb::cal_ST_Phi12_R(const int& job, // if(rs[ir]) => rs[ir] has been calculated // if(drs[ir]) => drs[ir] has been calculated // Actually, if(ir[ir]||dr[ir]) is enough. Double insurance for the sake of avoiding numerical errors - if (rs[ir] && drs[ir]) { + if (rs[ir] && drs[ir]) + { continue; } diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb.h b/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb.h index f0b49b9128..7a505dae9d 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb.h +++ b/source/module_hamilt_lcao/hamilt_lcaodft/center2_orb.h @@ -6,8 +6,8 @@ #ifndef CENTER2_ORB_H #define CENTER2_ORB_H -#include "module_base/sph_bessel_recursive.h" #include "module_basis/module_ao/ORB_atomic_lm.h" +#include "source_base/sph_bessel_recursive.h" #include diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/edm.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/edm.cpp index 49074830a8..01c8793eda 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/edm.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/edm.cpp @@ -1,32 +1,32 @@ #include "FORCE.h" #include "module_elecstate/module_dm/cal_dm_psi.h" -#include "module_base/memory.h" #include "module_parameter/parameter.h" -template<> +#include "source_base/memory.h" +template <> elecstate::DensityMatrix Force_LCAO::cal_edm(const elecstate::ElecState* pelec, - const psi::Psi& psi, - const elecstate::DensityMatrix& dm, - const K_Vectors& kv, - const Parallel_Orbitals& pv, - const int& nspin, - const int& nbands, - const UnitCell& ucell, - Record_adj& ra) const + const psi::Psi& psi, + const elecstate::DensityMatrix& dm, + const K_Vectors& kv, + const Parallel_Orbitals& pv, + const int& nspin, + const int& nbands, + const UnitCell& ucell, + Record_adj& ra) const { ModuleBase::matrix wg_ekb; wg_ekb.create(nspin, nbands); - for(int is=0; iswg(is,ib) * pelec->ekb(is, ib); + wg_ekb(is, ib) = pelec->wg(is, ib) * pelec->ekb(is, ib); } } // construct a DensityMatrix for Gamma-Only elecstate::DensityMatrix edm(&pv, nspin); - + #ifdef __PEXSI if (PARAM.inp.ks_solver == "pexsi") { @@ -35,7 +35,6 @@ elecstate::DensityMatrix Force_LCAO::cal_edm(const elecs { edm.set_DMK_pointer(ik, pes->get_DM()->pexsi_EDM[ik]); } - } else #endif @@ -45,13 +44,14 @@ elecstate::DensityMatrix Force_LCAO::cal_edm(const elecs return edm; } -template<> -elecstate::DensityMatrix, double> Force_LCAO>::cal_edm(const elecstate::ElecState* pelec, +template <> +elecstate::DensityMatrix, double> Force_LCAO>::cal_edm( + const elecstate::ElecState* pelec, const psi::Psi>& psi, const elecstate::DensityMatrix, double>& dm, const K_Vectors& kv, const Parallel_Orbitals& pv, - const int& nspin, + const int& nspin, const int& nbands, const UnitCell& ucell, Record_adj& ra) const diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/grid_init.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/grid_init.cpp index d14e3ef8a9..de99638773 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/grid_init.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/grid_init.cpp @@ -1,9 +1,9 @@ #include "module_hamilt_lcao/hamilt_lcaodft/LCAO_domain.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" namespace LCAO_domain { @@ -11,61 +11,58 @@ namespace LCAO_domain //-------------------------------------------- // prepare grid network for Gint(grid integral) //-------------------------------------------- -void grid_prepare( - const Grid_Technique& gt, - Gint_Gamma &gint_gamma, - Gint_k &gint_k, - const UnitCell& ucell, - const LCAO_Orbitals& orb, - const ModulePW::PW_Basis& rhopw, - const ModulePW::PW_Basis_Big& bigpw) +void grid_prepare(const Grid_Technique& gt, + Gint_Gamma& gint_gamma, + Gint_k& gint_k, + const UnitCell& ucell, + const LCAO_Orbitals& orb, + const ModulePW::PW_Basis& rhopw, + const ModulePW::PW_Basis_Big& bigpw) { - ModuleBase::TITLE("LCAO_domain","grid_prepare"); - ModuleBase::timer::tick("LCAO_domain","grid_prepare"); - if(PARAM.globalv.gamma_only_local) + ModuleBase::TITLE("LCAO_domain", "grid_prepare"); + ModuleBase::timer::tick("LCAO_domain", "grid_prepare"); + if (PARAM.globalv.gamma_only_local) { - gint_gamma.prep_grid( - gt, - bigpw.nbx, - bigpw.nby, - bigpw.nbzp, - bigpw.nbzp_start, - rhopw.nxyz, - bigpw.bx, - bigpw.by, - bigpw.bz, - bigpw.bxyz, - bigpw.nbxx, - rhopw.ny, - rhopw.nplane, - rhopw.startz_current, - &ucell, - &orb); - } + gint_gamma.prep_grid(gt, + bigpw.nbx, + bigpw.nby, + bigpw.nbzp, + bigpw.nbzp_start, + rhopw.nxyz, + bigpw.bx, + bigpw.by, + bigpw.bz, + bigpw.bxyz, + bigpw.nbxx, + rhopw.ny, + rhopw.nplane, + rhopw.startz_current, + &ucell, + &orb); + } else // multiple k-points { // cal the grid integration of 'Vl' matrix for l-points algorithms. - gint_k.prep_grid( - gt, - bigpw.nbx, - bigpw.nby, - bigpw.nbzp, - bigpw.nbzp_start, - rhopw.nxyz, - bigpw.bx, - bigpw.by, - bigpw.bz, - bigpw.bxyz, - bigpw.nbxx, - rhopw.ny, - rhopw.nplane, - rhopw.startz_current, - &ucell, - &orb); - } + gint_k.prep_grid(gt, + bigpw.nbx, + bigpw.nby, + bigpw.nbzp, + bigpw.nbzp_start, + rhopw.nxyz, + bigpw.bx, + bigpw.by, + bigpw.bz, + bigpw.bxyz, + bigpw.nbxx, + rhopw.ny, + rhopw.nplane, + rhopw.startz_current, + &ucell, + &orb); + } - ModuleBase::timer::tick("LCAO_domain","grid_prepare"); + ModuleBase::timer::tick("LCAO_domain", "grid_prepare"); return; } -} +} // namespace LCAO_domain diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.cpp index 953f35579c..38e48dc66f 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.cpp @@ -1,11 +1,11 @@ #include "hamilt_lcao.h" -#include "module_base/global_variable.h" -#include "module_base/memory.h" -#include "module_base/timer.h" #include "module_hamilt_lcao/module_dftu/dftu.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" +#include "source_base/timer.h" #include @@ -27,7 +27,6 @@ #include "module_hamilt_general/module_xc/xc_functional.h" #include "module_hamilt_lcao/module_deltaspin/spin_constrain.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer_funcs.h" -#include "source_hsolver/hsolver_lcao.h" #include "operator_lcao/dftu_lcao.h" #include "operator_lcao/dspin_lcao.h" #include "operator_lcao/ekinetic_new.h" @@ -39,6 +38,7 @@ #include "operator_lcao/td_ekinetic_lcao.h" #include "operator_lcao/td_nonlocal_lcao.h" #include "operator_lcao/veff_lcao.h" +#include "source_hsolver/hsolver_lcao.h" namespace hamilt { @@ -498,9 +498,7 @@ Operator*& HamiltLCAO::getOperator() } template -void HamiltLCAO::updateSk( - const int ik, - const int hk_type) +void HamiltLCAO::updateSk(const int ik, const int hk_type) { ModuleBase::TITLE("HamiltLCAO", "updateSk"); ModuleBase::timer::tick("HamiltLCAO", "updateSk"); @@ -510,17 +508,17 @@ void HamiltLCAO::updateSk( if (hk_type == 1) // collumn-major matrix for SK { const int nrow = this->hsk->get_pv()->get_row_size(); - hamilt::folding_HR(*this->sR, this->getSk(), this->kv->kvec_d[ik], nrow, 1); - } - else if (hk_type == 0) // row-major matrix for SK - { + hamilt::folding_HR(*this->sR, this->getSk(), this->kv->kvec_d[ik], nrow, 1); + } + else if (hk_type == 0) // row-major matrix for SK + { const int ncol = this->hsk->get_pv()->get_col_size(); hamilt::folding_HR(*this->sR, this->getSk(), this->kv->kvec_d[ik], ncol, 0); } - else - { - ModuleBase::WARNING_QUIT("updateSk","the value of hk_type is incorrect."); - } + else + { + ModuleBase::WARNING_QUIT("updateSk", "the value of hk_type is incorrect."); + } ModuleBase::timer::tick("HamiltLCAO", "updateSk"); } diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/deepks_lcao.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/deepks_lcao.cpp index 262832d50b..e8e46001a0 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/deepks_lcao.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/deepks_lcao.cpp @@ -1,11 +1,11 @@ #include "deepks_lcao.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_lcao/module_deepks/LCAO_deepks.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer_funcs.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" #ifdef _OPENMP #include #endif @@ -233,7 +233,7 @@ void hamilt::DeePKS>::calculate_HR() const Parallel_Orbitals* paraV = this->V_delta_R->get_paraV(); const int npol = this->ucell->get_npol(); - #pragma omp parallel for schedule(dynamic) +#pragma omp parallel for schedule(dynamic) for (int iat0 = 0; iat0 < this->ucell->nat; iat0++) { auto tau0 = ucell->get_tau(iat0); @@ -378,11 +378,11 @@ void hamilt::DeePKS>::calculate_HR() hr_current.data(), &col_size); - // add data of HR to target BaseMatrix - #pragma omp critical - { - this->cal_HR_IJR(hr_current.data(), row_size, col_size, tmp->get_pointer()); - } +// add data of HR to target BaseMatrix +#pragma omp critical + { + this->cal_HR_IJR(hr_current.data(), row_size, col_size, tmp->get_pointer()); + } } } } diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/dftu_force_stress.hpp b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/dftu_force_stress.hpp index c6d1d343f8..84c605f097 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/dftu_force_stress.hpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/dftu_force_stress.hpp @@ -1,7 +1,7 @@ #pragma once #include "dftu_lcao.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" namespace hamilt { @@ -22,14 +22,14 @@ void DFTU>::cal_force_stress(const bool cal_force, const hamilt::HContainer* dmR_tmp[this->nspin]; dmR_tmp[0] = this->dftu->get_dmr(0); - if (this->nspin == 2) - { - dmR_tmp[1] = this->dftu->get_dmr(1); - } - if (dmR_tmp[0]->size_atom_pairs() == 0) - { - return; - } + if (this->nspin == 2) + { + dmR_tmp[1] = this->dftu->get_dmr(1); + } + if (dmR_tmp[0]->size_atom_pairs() == 0) + { + return; + } // begin the calculation of force and stress ModuleBase::timer::tick("DFTU", "cal_force_stress"); @@ -46,10 +46,10 @@ void DFTU>::cal_force_stress(const bool cal_force, std::vector atom_index_all(this->ucell->nat, -1); for (int iat0 = 0; iat0 < this->ucell->nat; iat0++) { - int T0=0; - int I0=0; + int T0 = 0; + int I0 = 0; ucell->iat2iait(iat0, &I0, &T0); - if(this->dftu->orbital_corr[T0] == -1) + if (this->dftu->orbital_corr[T0] == -1) { continue; } @@ -57,202 +57,205 @@ void DFTU>::cal_force_stress(const bool cal_force, atom_index++; } - // 1. calculate for each pair of atoms - // loop over all on-site atoms - #pragma omp parallel +// 1. calculate for each pair of atoms +// loop over all on-site atoms +#pragma omp parallel { - std::vector stress_local(6, 0); - ModuleBase::matrix force_local(force.nr, force.nc); - #pragma omp for schedule(dynamic) - for (int iat0 = 0; iat0 < this->ucell->nat; iat0++) - { - // skip the atoms without plus-U - auto tau0 = ucell->get_tau(iat0); - int T0=0; - int I0=0; - ucell->iat2iait(iat0, &I0, &T0); - const int target_L = this->dftu->orbital_corr[T0]; - if (target_L == -1) - { - continue; - } - const int tlp1 = 2 * target_L + 1; - AdjacentAtomInfo& adjs = this->adjs_all[atom_index_all[iat0]]; - - std::vector>> nlm_tot; - nlm_tot.resize(adjs.adj_num + 1); - - for (int ad = 0; ad < adjs.adj_num + 1; ++ad) + std::vector stress_local(6, 0); + ModuleBase::matrix force_local(force.nr, force.nc); +#pragma omp for schedule(dynamic) + for (int iat0 = 0; iat0 < this->ucell->nat; iat0++) { - const int T1 = adjs.ntype[ad]; - const int I1 = adjs.natom[ad]; - const int iat1 = ucell->itia2iat(T1, I1); - const ModuleBase::Vector3& tau1 = adjs.adjacent_tau[ad]; - const Atom* atom1 = &ucell->atoms[T1]; - - auto all_indexes = paraV->get_indexes_row(iat1); - auto col_indexes = paraV->get_indexes_col(iat1); - // insert col_indexes into all_indexes to get universal set with no repeat elements - all_indexes.insert(all_indexes.end(), col_indexes.begin(), col_indexes.end()); - std::sort(all_indexes.begin(), all_indexes.end()); - all_indexes.erase(std::unique(all_indexes.begin(), all_indexes.end()), all_indexes.end()); - for (int iw1l = 0; iw1l < all_indexes.size(); iw1l += npol) + // skip the atoms without plus-U + auto tau0 = ucell->get_tau(iat0); + int T0 = 0; + int I0 = 0; + ucell->iat2iait(iat0, &I0, &T0); + const int target_L = this->dftu->orbital_corr[T0]; + if (target_L == -1) { - const int iw1 = all_indexes[iw1l] / npol; - std::vector> nlm; - // nlm is a vector of vectors, but size of outer vector is only 1 here - // If we are calculating force, we need also to store the gradient - // and size of outer vector is then 4 - // inner loop : all projectors (L0,M0) - int L1 = atom1->iw2l[iw1]; - int N1 = atom1->iw2n[iw1]; - int m1 = atom1->iw2m[iw1]; + continue; + } + const int tlp1 = 2 * target_L + 1; + AdjacentAtomInfo& adjs = this->adjs_all[atom_index_all[iat0]]; - // convert m (0,1,...2l) to M (-l, -l+1, ..., l-1, l) - int M1 = (m1 % 2 == 0) ? -m1 / 2 : (m1 + 1) / 2; + std::vector>> nlm_tot; + nlm_tot.resize(adjs.adj_num + 1); - ModuleBase::Vector3 dtau = tau0 - tau1; - intor_->snap(T1, L1, N1, M1, T0, dtau * this->ucell->lat0, 1 /*cal_deri*/, nlm); + for (int ad = 0; ad < adjs.adj_num + 1; ++ad) + { + const int T1 = adjs.ntype[ad]; + const int I1 = adjs.natom[ad]; + const int iat1 = ucell->itia2iat(T1, I1); + const ModuleBase::Vector3& tau1 = adjs.adjacent_tau[ad]; + const Atom* atom1 = &ucell->atoms[T1]; - // select the elements of nlm with target_L - std::vector nlm_target(tlp1 * 4); - for (int iw = 0; iw < this->ucell->atoms[T0].nw; iw++) + auto all_indexes = paraV->get_indexes_row(iat1); + auto col_indexes = paraV->get_indexes_col(iat1); + // insert col_indexes into all_indexes to get universal set with no repeat elements + all_indexes.insert(all_indexes.end(), col_indexes.begin(), col_indexes.end()); + std::sort(all_indexes.begin(), all_indexes.end()); + all_indexes.erase(std::unique(all_indexes.begin(), all_indexes.end()), all_indexes.end()); + for (int iw1l = 0; iw1l < all_indexes.size(); iw1l += npol) { - const int L0 = this->ucell->atoms[T0].iw2l[iw]; - if (L0 == target_L) + const int iw1 = all_indexes[iw1l] / npol; + std::vector> nlm; + // nlm is a vector of vectors, but size of outer vector is only 1 here + // If we are calculating force, we need also to store the gradient + // and size of outer vector is then 4 + // inner loop : all projectors (L0,M0) + int L1 = atom1->iw2l[iw1]; + int N1 = atom1->iw2n[iw1]; + int m1 = atom1->iw2m[iw1]; + + // convert m (0,1,...2l) to M (-l, -l+1, ..., l-1, l) + int M1 = (m1 % 2 == 0) ? -m1 / 2 : (m1 + 1) / 2; + + ModuleBase::Vector3 dtau = tau0 - tau1; + intor_->snap(T1, L1, N1, M1, T0, dtau * this->ucell->lat0, 1 /*cal_deri*/, nlm); + + // select the elements of nlm with target_L + std::vector nlm_target(tlp1 * 4); + for (int iw = 0; iw < this->ucell->atoms[T0].nw; iw++) { - for (int m = 0; m < tlp1; m++) //-l, -l+1, ..., l-1, l + const int L0 = this->ucell->atoms[T0].iw2l[iw]; + if (L0 == target_L) { - for (int n = 0; n < 4; n++) // value, deri_x, deri_y, deri_z + for (int m = 0; m < tlp1; m++) //-l, -l+1, ..., l-1, l { - nlm_target[m + n * tlp1] = nlm[n][iw + m]; - // if(dtau.norm2 == 0.0) std::cout<<__FILE__<<__LINE__<<" "< occ(tlp1 * tlp1 * this->nspin, 0); - if(this->nspin ==2) - { - for (int i = 0; i < occ.size(); i++) + // first iteration to calculate occupation matrix + std::vector occ(tlp1 * tlp1 * this->nspin, 0); + if (this->nspin == 2) { - const int is = i / (tlp1 * tlp1); - const int ii = i % (tlp1 * tlp1); - occ[i] = this->dftu->locale[iat0][target_L][0][is].c[ii]; + for (int i = 0; i < occ.size(); i++) + { + const int is = i / (tlp1 * tlp1); + const int ii = i % (tlp1 * tlp1); + occ[i] = this->dftu->locale[iat0][target_L][0][is].c[ii]; + } } - } - else - { - for (int i = 0; i < occ.size(); i++) + else { - occ[i] = this->dftu->locale[iat0][target_L][0][0].c[i]; + for (int i = 0; i < occ.size(); i++) + { + occ[i] = this->dftu->locale[iat0][target_L][0][0].c[i]; + } } - } - // calculate VU - const double u_value = this->dftu->U[T0]; - std::vector VU(occ.size()); - double eu_tmp = 0; - this->cal_v_of_u(occ, tlp1, u_value, &VU[0], eu_tmp); - if(this->nspin == 4) - { - for (int i = 0; i < VU.size(); i++) + // calculate VU + const double u_value = this->dftu->U[T0]; + std::vector VU(occ.size()); + double eu_tmp = 0; + this->cal_v_of_u(occ, tlp1, u_value, &VU[0], eu_tmp); + if (this->nspin == 4) { - VU[i] /= 2.0; + for (int i = 0; i < VU.size(); i++) + { + VU[i] /= 2.0; + } } - } - // second iteration to calculate force and stress - // calculate Force for atom J - // DMR_{I,J,R'-R} * U*(1/2*delta(m, m')-occ(m, m')) - // \frac{\partial }{\partial \tau_J} for each pair of atoms - // calculate Stress for strain tensor \varepsilon_{\alpha\beta} - // -1/Omega * DMR_{I,J,R'-R} * [ \frac{\partial }{\partial \tau_{J,\alpha}}\tau_{J,\beta} - // U*(1/2*delta(m, m')-occ(m, m')) - // + U*(1/2*delta(m, m')-occ(m, m')) - // \frac{\partial }{\partial \tau_{J,\alpha}}\tau_{J,\beta}] for each pair of atoms - for (int ad1 = 0; ad1 < adjs.adj_num + 1; ++ad1) - { - const int T1 = adjs.ntype[ad1]; - const int I1 = adjs.natom[ad1]; - const int iat1 = ucell->itia2iat(T1, I1); - double* force_tmp1 = (cal_force) ? &force_local(iat1, 0) : nullptr; - double* force_tmp2 = (cal_force) ? &force_local(iat0, 0) : nullptr; - ModuleBase::Vector3& R_index1 = adjs.box[ad1]; - ModuleBase::Vector3 dis1 = adjs.adjacent_tau[ad1] - tau0; - for (int ad2 = 0; ad2 < adjs.adj_num + 1; ++ad2) + // second iteration to calculate force and stress + // calculate Force for atom J + // DMR_{I,J,R'-R} * U*(1/2*delta(m, m')-occ(m, m')) + // \frac{\partial }{\partial \tau_J} for each pair of atoms + // calculate Stress for strain tensor \varepsilon_{\alpha\beta} + // -1/Omega * DMR_{I,J,R'-R} * [ \frac{\partial }{\partial + // \tau_{J,\alpha}}\tau_{J,\beta} U*(1/2*delta(m, m')-occ(m, m')) + // + U*(1/2*delta(m, m')-occ(m, m')) + // \frac{\partial }{\partial \tau_{J,\alpha}}\tau_{J,\beta}] for each pair of + // atoms + for (int ad1 = 0; ad1 < adjs.adj_num + 1; ++ad1) { - const int T2 = adjs.ntype[ad2]; - const int I2 = adjs.natom[ad2]; - const int iat2 = ucell->itia2iat(T2, I2); - ModuleBase::Vector3& R_index2 = adjs.box[ad2]; - ModuleBase::Vector3 dis2 = adjs.adjacent_tau[ad2] - tau0; - ModuleBase::Vector3 R_vector(R_index2[0] - R_index1[0], - R_index2[1] - R_index1[1], - R_index2[2] - R_index1[2]); - const hamilt::BaseMatrix* tmp[this->nspin]; - tmp[0] = dmR_tmp[0]->find_matrix(iat1, iat2, R_vector[0], R_vector[1], R_vector[2]); - if (this->nspin == 2) - { - tmp[1] = dmR_tmp[1]->find_matrix(iat1, iat2, R_vector[0], R_vector[1], R_vector[2]); - } - // if not found , skip this pair of atoms - if (tmp[0] != nullptr) + const int T1 = adjs.ntype[ad1]; + const int I1 = adjs.natom[ad1]; + const int iat1 = ucell->itia2iat(T1, I1); + double* force_tmp1 = (cal_force) ? &force_local(iat1, 0) : nullptr; + double* force_tmp2 = (cal_force) ? &force_local(iat0, 0) : nullptr; + ModuleBase::Vector3& R_index1 = adjs.box[ad1]; + ModuleBase::Vector3 dis1 = adjs.adjacent_tau[ad1] - tau0; + for (int ad2 = 0; ad2 < adjs.adj_num + 1; ++ad2) { - // calculate force - if (cal_force) { - this->cal_force_IJR(iat1, - iat2, - paraV, - nlm_tot[ad1], - nlm_tot[ad2], - VU, - tmp, - this->nspin, - force_tmp1, - force_tmp2); + const int T2 = adjs.ntype[ad2]; + const int I2 = adjs.natom[ad2]; + const int iat2 = ucell->itia2iat(T2, I2); + ModuleBase::Vector3& R_index2 = adjs.box[ad2]; + ModuleBase::Vector3 dis2 = adjs.adjacent_tau[ad2] - tau0; + ModuleBase::Vector3 R_vector(R_index2[0] - R_index1[0], + R_index2[1] - R_index1[1], + R_index2[2] - R_index1[2]); + const hamilt::BaseMatrix* tmp[this->nspin]; + tmp[0] = dmR_tmp[0]->find_matrix(iat1, iat2, R_vector[0], R_vector[1], R_vector[2]); + if (this->nspin == 2) + { + tmp[1] = dmR_tmp[1]->find_matrix(iat1, iat2, R_vector[0], R_vector[1], R_vector[2]); } + // if not found , skip this pair of atoms + if (tmp[0] != nullptr) + { + // calculate force + if (cal_force) + { + this->cal_force_IJR(iat1, + iat2, + paraV, + nlm_tot[ad1], + nlm_tot[ad2], + VU, + tmp, + this->nspin, + force_tmp1, + force_tmp2); + } - // calculate stress - if (cal_stress) { - this->cal_stress_IJR(iat1, - iat2, - paraV, - nlm_tot[ad1], - nlm_tot[ad2], - VU, - tmp, - this->nspin, - dis1, - dis2, - stress_local.data()); + // calculate stress + if (cal_stress) + { + this->cal_stress_IJR(iat1, + iat2, + paraV, + nlm_tot[ad1], + nlm_tot[ad2], + VU, + tmp, + this->nspin, + dis1, + dis2, + stress_local.data()); + } } } } } - } - #pragma omp critical - { - if(cal_force) - { - force += force_local; - } - if(cal_stress) +#pragma omp critical { - for(int i = 0; i < 6; i++) + if (cal_force) + { + force += force_local; + } + if (cal_stress) { - stress_tmp[i] += stress_local[i]; + for (int i = 0; i < 6; i++) + { + stress_tmp[i] += stress_local[i]; + } } } } - } if (cal_force) { @@ -289,7 +292,6 @@ void DFTU>::cal_force_stress(const bool cal_force, ModuleBase::timer::tick("DFTU", "cal_force_stress"); } - template void DFTU>::cal_force_IJR(const int& iat1, const int& iat2, @@ -317,9 +319,9 @@ void DFTU>::cal_force_IJR(const int& iat1, // step_trace = 0 for NSPIN=1,2; ={0, 1, local_col, local_col+1} for NSPIN=4 std::vector step_trace(npol * npol, 0); - if (npol == 2) - { - step_trace[1] = 1; + if (npol == 2) + { + step_trace[1] = 1; step_trace[2] = col_indexes.size(); step_trace[3] = col_indexes.size() + 1; } @@ -328,8 +330,8 @@ void DFTU>::cal_force_IJR(const int& iat1, // calculate the local matrix for (int is = 0; is < nspin; is++) { - const int is0 = nspin==2 ? is : 0; - const int step_is = nspin==4 ? is : 0; + const int is0 = nspin == 2 ? is : 0; + const int step_is = nspin == 4 ? is : 0; const double* dm_pointer = dmR_pointer[is0]->get_pointer(); for (int iw1l = 0; iw1l < row_indexes.size(); iw1l += npol) { @@ -344,12 +346,12 @@ void DFTU>::cal_force_IJR(const int& iat1, { for (int m2 = 0; m2 < m_size; m2++) { - tmp[0] = vu_in[m1 * m_size + m2 + is * m_size2] * nlm1[m1 + m_size] - * nlm2[m2] * dm_pointer[step_trace[step_is]]; - tmp[1] = vu_in[m1 * m_size + m2 + is * m_size2] * nlm1[m1 + m_size * 2] - * nlm2[m2] * dm_pointer[step_trace[step_is]]; - tmp[2] = vu_in[m1 * m_size + m2 + is * m_size2] * nlm1[m1 + m_size * 3] - * nlm2[m2] * dm_pointer[step_trace[step_is]]; + tmp[0] = vu_in[m1 * m_size + m2 + is * m_size2] * nlm1[m1 + m_size] * nlm2[m2] + * dm_pointer[step_trace[step_is]]; + tmp[1] = vu_in[m1 * m_size + m2 + is * m_size2] * nlm1[m1 + m_size * 2] * nlm2[m2] + * dm_pointer[step_trace[step_is]]; + tmp[2] = vu_in[m1 * m_size + m2 + is * m_size2] * nlm1[m1 + m_size * 3] * nlm2[m2] + * dm_pointer[step_trace[step_is]]; // force1 = - VU * * // force2 = - VU * * } force1[0] += tmp[0]; @@ -395,9 +397,9 @@ void DFTU>::cal_stress_IJR(const int& iat1, // step_trace = 0 for NSPIN=1,2; ={0, 1, local_col, local_col+1} for NSPIN=4 std::vector step_trace(npol * npol, 0); - if (npol == 2) - { - step_trace[1] = 1; + if (npol == 2) + { + step_trace[1] = 1; step_trace[2] = col_indexes.size(); step_trace[3] = col_indexes.size() + 1; } @@ -405,8 +407,8 @@ void DFTU>::cal_stress_IJR(const int& iat1, // calculate the local matrix for (int is = 0; is < nspin; is++) { - const int is0 = nspin==2 ? is : 0; - const int step_is = nspin==4 ? is : 0; + const int is0 = nspin == 2 ? is : 0; + const int step_is = nspin == 4 ? is : 0; const double* dm_pointer = dmR_pointer[is0]->get_pointer(); for (int iw1l = 0; iw1l < row_indexes.size(); iw1l += npol) { @@ -424,18 +426,21 @@ void DFTU>::cal_stress_IJR(const int& iat1, double tmp = vu_in[m1 * m_size + m2 + is * m_size2] * dm_pointer[step_trace[step_is]]; // std::cout<<__FILE__<<__LINE__<<" "< #endif -#include "module_base/parallel_reduce.h" +#include "source_base/parallel_reduce.h" template hamilt::DFTU>::DFTU(HS_Matrix_K* hsk_in, @@ -52,14 +52,14 @@ void hamilt::DFTU>::initialize_HR(const Grid_Driver for (int iat0 = 0; iat0 < ucell->nat; iat0++) { auto tau0 = ucell->get_tau(iat0); - int T0=0; - int I0=0; + int T0 = 0; + int I0 = 0; ucell->iat2iait(iat0, &I0, &T0); const int target_L = this->dftu->orbital_corr[T0]; - if (target_L == -1) - { - continue; - } + if (target_L == -1) + { + continue; + } AdjacentAtomInfo adjs; GridD->Find_atom(*ucell, tau0, T0, I0, &adjs); @@ -92,10 +92,10 @@ template void hamilt::DFTU>::cal_nlm_all(const Parallel_Orbitals* paraV) { ModuleBase::TITLE("DFTU", "cal_nlm_all"); - if (this->precal_nlm_done) - { - return; - } + if (this->precal_nlm_done) + { + return; + } ModuleBase::timer::tick("DFTU", "cal_nlm_all"); nlm_tot.resize(this->ucell->nat); @@ -104,15 +104,15 @@ void hamilt::DFTU>::cal_nlm_all(const Parallel_Orbi for (int iat0 = 0; iat0 < ucell->nat; iat0++) { auto tau0 = ucell->get_tau(iat0); - int T0=0; - int I0=0; + int T0 = 0; + int I0 = 0; ucell->iat2iait(iat0, &I0, &T0); const int target_L = this->dftu->orbital_corr[T0]; - if (target_L == -1) - { - continue; - } - const int tlp1 = 2 * target_L + 1; + if (target_L == -1) + { + continue; + } + const int tlp1 = 2 * target_L + 1; AdjacentAtomInfo& adjs = this->adjs_all[atom_index++]; // calculate and save the table of two-center integrals @@ -184,11 +184,11 @@ void hamilt::DFTU>::contributeHR() else { // will update this->dftu->locale and this->dftu->EU - if (this->current_spin == 0) - { - this->dftu->EU = 0.0; - } - } + if (this->current_spin == 0) + { + this->dftu->EU = 0.0; + } + } ModuleBase::timer::tick("DFTU", "contributeHR"); const Parallel_Orbitals* paraV = this->hR->get_atom_pair(0).get_paraV(); @@ -204,10 +204,10 @@ void hamilt::DFTU>::contributeHR() int T0, I0; ucell->iat2iait(iat0, &I0, &T0); const int target_L = this->dftu->orbital_corr[T0]; - if (target_L == -1) - { - continue; - } + if (target_L == -1) + { + continue; + } const int tlp1 = 2 * target_L + 1; AdjacentAtomInfo& adjs = this->adjs_all[atom_index++]; @@ -251,10 +251,10 @@ void hamilt::DFTU>::contributeHR() // save occ to dftu for (int i = 0; i < occ.size(); i++) { - if (this->nspin == 1) - { - occ[i] *= 0.5; - } + if (this->nspin == 1) + { + occ[i] *= 0.5; + } this->dftu->locale[iat0][target_L][0][this->current_spin].c[i] = occ[i]; } } @@ -309,23 +309,23 @@ void hamilt::DFTU>::contributeHR() } // energy correction for NSPIN=1 - if (this->nspin == 1) - { - this->dftu->EU *= 2.0; - } - // for readin onsite_dm, set initialed_locale to false to avoid using readin locale in next iteration - if (this->current_spin == this->nspin - 1 || this->nspin == 4) - { - this->dftu->initialed_locale = false; - } + if (this->nspin == 1) + { + this->dftu->EU *= 2.0; + } + // for readin onsite_dm, set initialed_locale to false to avoid using readin locale in next iteration + if (this->current_spin == this->nspin - 1 || this->nspin == 4) + { + this->dftu->initialed_locale = false; + } // update this->current_spin: only nspin=2 iterate change it between 0 and 1 // the key point is only nspin=2 calculate spin-up and spin-down separately, // and won't calculate spin-up twice without spin-down - if (this->nspin == 2) - { - this->current_spin = 1 - this->current_spin; - } + if (this->nspin == 2) + { + this->current_spin = 1 - this->current_spin; + } ModuleBase::timer::tick("DFTU", "contributeHR"); } @@ -506,7 +506,8 @@ void hamilt::DFTU>::cal_v_of_u(const std::vector>::cal_v_of_u(const std::vector void DeltaSpin>::cal_force_stress(const bool cal_force, - const bool cal_stress, - const HContainer* dmR, - ModuleBase::matrix& force, - ModuleBase::matrix& stress) + const bool cal_stress, + const HContainer* dmR, + ModuleBase::matrix& force, + ModuleBase::matrix& stress) { ModuleBase::TITLE("DeltaSpin", "cal_force_stress"); @@ -30,184 +30,187 @@ void DeltaSpin>::cal_force_stress(const bool cal_force, { force.zero_out(); } - // 1. calculate for each pair of atoms - // loop over all on-site atoms - #pragma omp parallel +// 1. calculate for each pair of atoms +// loop over all on-site atoms +#pragma omp parallel { - std::vector stress_local(6, 0); - ModuleBase::matrix force_local(force.nr, force.nc); - #pragma omp for schedule(dynamic) - for (int iat0 = 0; iat0 < this->ucell->nat; iat0++) - { - if(!this->constraint_atom_list[iat0]) + std::vector stress_local(6, 0); + ModuleBase::matrix force_local(force.nr, force.nc); +#pragma omp for schedule(dynamic) + for (int iat0 = 0; iat0 < this->ucell->nat; iat0++) { - continue; - } - - // skip the atoms without plus-U - auto tau0 = ucell->get_tau(iat0); - int T0, I0; - ucell->iat2iait(iat0, &I0, &T0); - - // first step: find the adjacent atoms and filter the real adjacent atoms - AdjacentAtomInfo adjs; - this->gridD->Find_atom(*ucell, tau0, T0, I0, &adjs); - - std::vector is_adj(adjs.adj_num + 1, false); - for (int ad = 0; ad < adjs.adj_num + 1; ++ad) - { - const int T1 = adjs.ntype[ad]; - const int I1 = adjs.natom[ad]; - const int iat1 = ucell->itia2iat(T1, I1); - const ModuleBase::Vector3& R_index1 = adjs.box[ad]; - // choose the real adjacent atoms - // Note: the distance of atoms should less than the cutoff radius, - // When equal, the theoretical value of matrix element is zero, - // but the calculated value is not zero due to the numerical error, which would lead to result changes. - if (this->ucell->cal_dtau(iat0, iat1, R_index1).norm() * this->ucell->lat0 - < this->orb_cutoff_[T1] + PARAM.inp.onsite_radius) + if (!this->constraint_atom_list[iat0]) { - is_adj[ad] = true; + continue; } - } - filter_adjs(is_adj, adjs); - const int max_l_plus_1 = this->ucell->atoms[T0].nwl + 1; - const int length = max_l_plus_1 * max_l_plus_1; - std::vector>> nlm_iat0(adjs.adj_num + 1); - for (int ad = 0; ad < adjs.adj_num + 1; ++ad) - { - const int T1 = adjs.ntype[ad]; - const int I1 = adjs.natom[ad]; - const int iat1 = ucell->itia2iat(T1, I1); - const ModuleBase::Vector3& tau1 = adjs.adjacent_tau[ad]; - const Atom* atom1 = &ucell->atoms[T1]; + // skip the atoms without plus-U + auto tau0 = ucell->get_tau(iat0); + int T0, I0; + ucell->iat2iait(iat0, &I0, &T0); + + // first step: find the adjacent atoms and filter the real adjacent atoms + AdjacentAtomInfo adjs; + this->gridD->Find_atom(*ucell, tau0, T0, I0, &adjs); - auto all_indexes = paraV->get_indexes_row(iat1); - auto col_indexes = paraV->get_indexes_col(iat1); - // insert col_indexes into all_indexes to get universal set with no repeat elements - all_indexes.insert(all_indexes.end(), col_indexes.begin(), col_indexes.end()); - std::sort(all_indexes.begin(), all_indexes.end()); - all_indexes.erase(std::unique(all_indexes.begin(), all_indexes.end()), all_indexes.end()); - for (int iw1l = 0; iw1l < all_indexes.size(); iw1l += npol) + std::vector is_adj(adjs.adj_num + 1, false); + for (int ad = 0; ad < adjs.adj_num + 1; ++ad) { - const int iw1 = all_indexes[iw1l] / npol; - std::vector> nlm; - // nlm is a vector of vectors, but size of outer vector is only 1 here - // If we are calculating force, we need also to store the gradient - // and size of outer vector is then 4 - // inner loop : all projectors (L0,M0) - int L1 = atom1->iw2l[iw1]; - int N1 = atom1->iw2n[iw1]; - int m1 = atom1->iw2m[iw1]; + const int T1 = adjs.ntype[ad]; + const int I1 = adjs.natom[ad]; + const int iat1 = ucell->itia2iat(T1, I1); + const ModuleBase::Vector3& R_index1 = adjs.box[ad]; + // choose the real adjacent atoms + // Note: the distance of atoms should less than the cutoff radius, + // When equal, the theoretical value of matrix element is zero, + // but the calculated value is not zero due to the numerical error, which would lead to result changes. + if (this->ucell->cal_dtau(iat0, iat1, R_index1).norm() * this->ucell->lat0 + < this->orb_cutoff_[T1] + PARAM.inp.onsite_radius) + { + is_adj[ad] = true; + } + } + filter_adjs(is_adj, adjs); + const int max_l_plus_1 = this->ucell->atoms[T0].nwl + 1; + const int length = max_l_plus_1 * max_l_plus_1; + std::vector>> nlm_iat0(adjs.adj_num + 1); - // convert m (0,1,...2l) to M (-l, -l+1, ..., l-1, l) - int M1 = (m1 % 2 == 0) ? -m1 / 2 : (m1 + 1) / 2; + for (int ad = 0; ad < adjs.adj_num + 1; ++ad) + { + const int T1 = adjs.ntype[ad]; + const int I1 = adjs.natom[ad]; + const int iat1 = ucell->itia2iat(T1, I1); + const ModuleBase::Vector3& tau1 = adjs.adjacent_tau[ad]; + const Atom* atom1 = &ucell->atoms[T1]; - ModuleBase::Vector3 dtau = tau0 - tau1; - intor_->snap(T1, L1, N1, M1, T0, dtau * this->ucell->lat0, 1 /*cal_deri*/, nlm); - // select the elements of nlm with target_L - std::vector nlm_target(length * 4); - // select the elements of nlm with target_L (0, 1, 2, 3 ...) - int target_L = 0, index=0; - for(int iw =0;iw < this->ucell->atoms[T0].nw; iw++) + auto all_indexes = paraV->get_indexes_row(iat1); + auto col_indexes = paraV->get_indexes_col(iat1); + // insert col_indexes into all_indexes to get universal set with no repeat elements + all_indexes.insert(all_indexes.end(), col_indexes.begin(), col_indexes.end()); + std::sort(all_indexes.begin(), all_indexes.end()); + all_indexes.erase(std::unique(all_indexes.begin(), all_indexes.end()), all_indexes.end()); + for (int iw1l = 0; iw1l < all_indexes.size(); iw1l += npol) { - const int L0 = this->ucell->atoms[T0].iw2l[iw]; - // only the first zeta of each l-orbital is needed - if(L0 == target_L) + const int iw1 = all_indexes[iw1l] / npol; + std::vector> nlm; + // nlm is a vector of vectors, but size of outer vector is only 1 here + // If we are calculating force, we need also to store the gradient + // and size of outer vector is then 4 + // inner loop : all projectors (L0,M0) + int L1 = atom1->iw2l[iw1]; + int N1 = atom1->iw2n[iw1]; + int m1 = atom1->iw2m[iw1]; + + // convert m (0,1,...2l) to M (-l, -l+1, ..., l-1, l) + int M1 = (m1 % 2 == 0) ? -m1 / 2 : (m1 + 1) / 2; + + ModuleBase::Vector3 dtau = tau0 - tau1; + intor_->snap(T1, L1, N1, M1, T0, dtau * this->ucell->lat0, 1 /*cal_deri*/, nlm); + // select the elements of nlm with target_L + std::vector nlm_target(length * 4); + // select the elements of nlm with target_L (0, 1, 2, 3 ...) + int target_L = 0, index = 0; + for (int iw = 0; iw < this->ucell->atoms[T0].nw; iw++) { - for(int m = 0; m < 2*L0+1; m++) + const int L0 = this->ucell->atoms[T0].iw2l[iw]; + // only the first zeta of each l-orbital is needed + if (L0 == target_L) { - for (int n = 0; n < 4; n++) // value, deri_x, deri_y, deri_z + for (int m = 0; m < 2 * L0 + 1; m++) { - nlm_target[index + n * length] = nlm[n][iw + m]; + for (int n = 0; n < 4; n++) // value, deri_x, deri_y, deri_z + { + nlm_target[index + n * length] = nlm[n][iw + m]; + } + index++; } - index++; + target_L++; } - target_L++; } + nlm_iat0[ad].insert({all_indexes[iw1l], nlm_target}); } - nlm_iat0[ad].insert({all_indexes[iw1l], nlm_target}); } - } - // second iteration to calculate force and stress - for (int ad1 = 0; ad1 < adjs.adj_num + 1; ++ad1) - { - const int T1 = adjs.ntype[ad1]; - const int I1 = adjs.natom[ad1]; - const int iat1 = ucell->itia2iat(T1, I1); - double* force_tmp1 = (cal_force) ? &force_local(iat1, 0) : nullptr; - double* force_tmp2 = (cal_force) ? &force_local(iat0, 0) : nullptr; - ModuleBase::Vector3& R_index1 = adjs.box[ad1]; - ModuleBase::Vector3 dis1 = adjs.adjacent_tau[ad1] - tau0; - for (int ad2 = 0; ad2 < adjs.adj_num + 1; ++ad2) + // second iteration to calculate force and stress + for (int ad1 = 0; ad1 < adjs.adj_num + 1; ++ad1) { - const int T2 = adjs.ntype[ad2]; - const int I2 = adjs.natom[ad2]; - const int iat2 = ucell->itia2iat(T2, I2); - ModuleBase::Vector3& R_index2 = adjs.box[ad2]; - ModuleBase::Vector3 dis2 = adjs.adjacent_tau[ad2] - tau0; - ModuleBase::Vector3 R_vector(R_index2[0] - R_index1[0], - R_index2[1] - R_index1[1], - R_index2[2] - R_index1[2]); - const hamilt::BaseMatrix* tmp = dmR->find_matrix(iat1, iat2, R_vector[0], R_vector[1], R_vector[2]); - int row_size = paraV->get_row_size(); - int col_size = paraV->get_col_size(); - if(row_size == 0 || col_size == 0) - { - continue; - } - // if not found , skip this pair of atoms - if (tmp != nullptr) + const int T1 = adjs.ntype[ad1]; + const int I1 = adjs.natom[ad1]; + const int iat1 = ucell->itia2iat(T1, I1); + double* force_tmp1 = (cal_force) ? &force_local(iat1, 0) : nullptr; + double* force_tmp2 = (cal_force) ? &force_local(iat0, 0) : nullptr; + ModuleBase::Vector3& R_index1 = adjs.box[ad1]; + ModuleBase::Vector3 dis1 = adjs.adjacent_tau[ad1] - tau0; + for (int ad2 = 0; ad2 < adjs.adj_num + 1; ++ad2) { - // calculate force - if (cal_force) { - this->cal_force_IJR(iat1, - iat2, - paraV, - nlm_iat0[ad1], - nlm_iat0[ad2], - tmp, - lambda[iat0], - this->nspin, - force_tmp1, - force_tmp2); + const int T2 = adjs.ntype[ad2]; + const int I2 = adjs.natom[ad2]; + const int iat2 = ucell->itia2iat(T2, I2); + ModuleBase::Vector3& R_index2 = adjs.box[ad2]; + ModuleBase::Vector3 dis2 = adjs.adjacent_tau[ad2] - tau0; + ModuleBase::Vector3 R_vector(R_index2[0] - R_index1[0], + R_index2[1] - R_index1[1], + R_index2[2] - R_index1[2]); + const hamilt::BaseMatrix* tmp + = dmR->find_matrix(iat1, iat2, R_vector[0], R_vector[1], R_vector[2]); + int row_size = paraV->get_row_size(); + int col_size = paraV->get_col_size(); + if (row_size == 0 || col_size == 0) + { + continue; } + // if not found , skip this pair of atoms + if (tmp != nullptr) + { + // calculate force + if (cal_force) + { + this->cal_force_IJR(iat1, + iat2, + paraV, + nlm_iat0[ad1], + nlm_iat0[ad2], + tmp, + lambda[iat0], + this->nspin, + force_tmp1, + force_tmp2); + } - // calculate stress - if (cal_stress) { - this->cal_stress_IJR(iat1, - iat2, - paraV, - nlm_iat0[ad1], - nlm_iat0[ad2], - tmp, - lambda[iat0], - this->nspin, - dis1, - dis2, - stress_local.data()); + // calculate stress + if (cal_stress) + { + this->cal_stress_IJR(iat1, + iat2, + paraV, + nlm_iat0[ad1], + nlm_iat0[ad2], + tmp, + lambda[iat0], + this->nspin, + dis1, + dis2, + stress_local.data()); + } } } } } - } - #pragma omp critical - { - if(cal_force) - { - force += force_local; - } - if(cal_stress) +#pragma omp critical { - for(int i = 0; i < 6; i++) + if (cal_force) + { + force += force_local; + } + if (cal_stress) { - stress_tmp[i] += stress_local[i]; + for (int i = 0; i < 6; i++) + { + stress_tmp[i] += stress_local[i]; + } } } } - } if (cal_force) { @@ -246,15 +249,15 @@ void DeltaSpin>::cal_force_stress(const bool cal_force, template void DeltaSpin>::cal_force_IJR(const int& iat1, - const int& iat2, - const Parallel_Orbitals* paraV, - const std::unordered_map>& nlm1_all, - const std::unordered_map>& nlm2_all, - const hamilt::BaseMatrix* dmR_pointer, - const ModuleBase::Vector3& lambda, - const int nspin, - double* force1, - double* force2) + const int& iat2, + const Parallel_Orbitals* paraV, + const std::unordered_map>& nlm1_all, + const std::unordered_map>& nlm2_all, + const hamilt::BaseMatrix* dmR_pointer, + const ModuleBase::Vector3& lambda, + const int nspin, + double* force1, + double* force2) { // npol is the number of polarizations, // 1 for non-magnetic (one Hamiltonian matrix only has spin-up or spin-down), @@ -267,7 +270,8 @@ void DeltaSpin>::cal_force_IJR(const int& iat1, auto col_indexes = paraV->get_indexes_col(iat2); // step_trace = 0 for NSPIN=2; ={0, 1, local_col, local_col+1} for NSPIN=4 std::vector step_trace(nspin, 0); - if (nspin == 4) { + if (nspin == 4) + { step_trace[1] = 1; step_trace[2] = col_indexes.size(); step_trace[3] = col_indexes.size() + 1; @@ -276,7 +280,7 @@ void DeltaSpin>::cal_force_IJR(const int& iat1, // calculate the local matrix for (int is = 1; is < nspin; is++) { - const double lambda_tmp = nspin==2?lambda[2]:lambda[is-1]; + const double lambda_tmp = nspin == 2 ? lambda[2] : lambda[is - 1]; const double* dm_pointer = dmR_pointer->get_pointer(); for (int iw1l = 0; iw1l < row_indexes.size(); iw1l += npol) { @@ -290,11 +294,11 @@ void DeltaSpin>::cal_force_IJR(const int& iat1, const int length = nlm1.size() / 4; const int lmax = sqrt(length); int index = 0; - for(int l = 0; l>::cal_force_IJR(const int& iat1, template void DeltaSpin>::cal_stress_IJR(const int& iat1, - const int& iat2, - const Parallel_Orbitals* paraV, - const std::unordered_map>& nlm1_all, - const std::unordered_map>& nlm2_all, - const hamilt::BaseMatrix* dmR_pointer, - const ModuleBase::Vector3& lambda, - const int nspin, - const ModuleBase::Vector3& dis1, - const ModuleBase::Vector3& dis2, - double* stress) + const int& iat2, + const Parallel_Orbitals* paraV, + const std::unordered_map>& nlm1_all, + const std::unordered_map>& nlm2_all, + const hamilt::BaseMatrix* dmR_pointer, + const ModuleBase::Vector3& lambda, + const int nspin, + const ModuleBase::Vector3& dis1, + const ModuleBase::Vector3& dis2, + double* stress) { // npol is the number of polarizations, // 1 for non-magnetic (one Hamiltonian matrix only has spin-up or spin-down), @@ -339,7 +343,8 @@ void DeltaSpin>::cal_stress_IJR(const int& iat1, auto col_indexes = paraV->get_indexes_col(iat2); // step_trace = 0 for NSPIN=2; ={0, 1, local_col, local_col+1} for NSPIN=4 std::vector step_trace(nspin, 0); - if (nspin == 4) { + if (nspin == 4) + { step_trace[1] = 1; step_trace[2] = col_indexes.size(); step_trace[3] = col_indexes.size() + 1; @@ -347,7 +352,7 @@ void DeltaSpin>::cal_stress_IJR(const int& iat1, // calculate the local matrix for (int is = 1; is < nspin; is++) { - const double lambda_tmp = nspin==2?lambda[2]:lambda[is-1]; + const double lambda_tmp = nspin == 2 ? lambda[2] : lambda[is - 1]; const double* dm_pointer = dmR_pointer->get_pointer(); for (int iw1l = 0; iw1l < row_indexes.size(); iw1l += npol) { @@ -362,17 +367,20 @@ void DeltaSpin>::cal_stress_IJR(const int& iat1, const int lmax = sqrt(length); double tmp = lambda_tmp * dm_pointer[step_trace[is]]; int index = 0; - for(int l = 0; l hamilt::DeltaSpin>::DeltaSpin(HS_Matrix_K* hsk_in, @@ -24,7 +25,7 @@ hamilt::DeltaSpin>::DeltaSpin(HS_Matrix_K* hsk_ assert(this->ucell != nullptr); assert(this->gridD != nullptr); #endif - //set nspin + // set nspin this->nspin = PARAM.inp.nspin; this->spin_num = this->nspin == 2 ? 2 : 1; @@ -36,7 +37,7 @@ hamilt::DeltaSpin>::DeltaSpin(HS_Matrix_K* hsk_ template hamilt::DeltaSpin>::~DeltaSpin() { - for (auto& hr : this->pre_hr) + for (auto& hr: this->pre_hr) { if (hr != nullptr) { @@ -55,10 +56,10 @@ inline void cal_coeff_lambda(const std::vector& current_lambda, std::vec coefficients[1] = -current_lambda[0]; } inline void cal_coeff_lambda(const std::vector& current_lambda, std::vector>& coefficients) -{// {\lambda^{I,3}, \lambda^{I,1}+i\lambda^{I,2}, \lambda^{I,1}-i\lambda^{I,2}, -\lambda^{I,3}} +{ // {\lambda^{I,3}, \lambda^{I,1}+i\lambda^{I,2}, \lambda^{I,1}-i\lambda^{I,2}, -\lambda^{I,3}} coefficients[0] = std::complex(current_lambda[2], 0.0); - coefficients[1] = std::complex(current_lambda[0] , current_lambda[1]); - coefficients[2] = std::complex(current_lambda[0] , -1 * current_lambda[1]); + coefficients[1] = std::complex(current_lambda[0], current_lambda[1]); + coefficients[2] = std::complex(current_lambda[0], -1 * current_lambda[1]); coefficients[3] = std::complex(-1 * current_lambda[2], 0.0); } @@ -66,24 +67,24 @@ template void hamilt::DeltaSpin>::contributeHR() { // if lambda has not changed, calculate the HR^I = lambda^I\sum_{lm} - // if lambda has changed, calculate the dHR^I = dlambda^I\sum_{lm} + // if lambda has changed, calculate the dHR^I = dlambda^I\sum_{lm} spinconstrain::SpinConstrain& sc = spinconstrain::SpinConstrain::getScInstance(); - // there are three case for contributeHR + // there are three case for contributeHR // 1. HR has not been calculated, reset lambda_save and calculate HR = lambda * pre_hr // 2. HR has been calculated, but lambda has changed, calculate dHR = dlambda * pre_hr // 3. HR has been calculated, and lambda has not changed, do nothing - if(!this->hr_done) + if (!this->hr_done) { // set the lambda_save to zero if lambda loop is started this->lambda_save.assign(this->ucell->nat * 3, 0.0); } - else if(this->hr_done && !this->update_lambda_[this->current_spin]) + else if (this->hr_done && !this->update_lambda_[this->current_spin]) { return; } // calculate Hpre^I = \sum_{lm} - if(!this->initialized) + if (!this->initialized) { auto& constrain = sc.get_constrain(); this->cal_constraint_atom_list(constrain); @@ -91,59 +92,59 @@ void hamilt::DeltaSpin>::contributeHR() this->initialized = true; } auto& lambda = sc.get_sc_lambda(); - - for(int iat=0;iatucell->nat;iat++) + + for (int iat = 0; iat < this->ucell->nat; iat++) { - if(!this->constraint_atom_list[iat]) + if (!this->constraint_atom_list[iat]) { continue; } // calculate the delta lambda to update the real space Hamiltonian std::vector current_lambda; - if(this->nspin==4) + if (this->nspin == 4) { - current_lambda = {lambda[iat].x - this->lambda_save[iat*3], - lambda[iat].y - this->lambda_save[iat*3+1], - lambda[iat].z - this->lambda_save[iat*3+2]}; + current_lambda = {lambda[iat].x - this->lambda_save[iat * 3], + lambda[iat].y - this->lambda_save[iat * 3 + 1], + lambda[iat].z - this->lambda_save[iat * 3 + 2]}; } - else if(this->nspin==2) + else if (this->nspin == 2) { - current_lambda = {lambda[iat].z-this->lambda_save[iat*3+2], 0.0, 0.0}; + current_lambda = {lambda[iat].z - this->lambda_save[iat * 3 + 2], 0.0, 0.0}; } std::vector coefficients(this->nspin); cal_coeff_lambda(current_lambda, coefficients); // magnetic moment = \sum_{\mu\nu,R} dmR * pre_hr - for(int iap=0;iappre_hr[iat]->size_atom_pairs();iap++) + for (int iap = 0; iap < this->pre_hr[iat]->size_atom_pairs(); iap++) { hamilt::AtomPair& tmp = this->pre_hr[iat]->get_atom_pair(iap); int iat1 = tmp.get_atom_i(); int iat2 = tmp.get_atom_j(); int row_size = tmp.get_row_size(); int col_size = tmp.get_col_size(); - if(this->nspin==4) + if (this->nspin == 4) { this->pre_coeff_array(coefficients, row_size, col_size); } - for(int ir = 0;ir < tmp.get_R_size(); ++ir ) + for (int ir = 0; ir < tmp.get_R_size(); ++ir) { const ModuleBase::Vector3 r_index = tmp.get_R_index(ir); const TR* pre_hr_data = tmp.get_pointer(ir); TR* dhr_data = this->hR->find_matrix(iat1, iat2, r_index[0], r_index[1], r_index[2])->get_pointer(); // TR== double: axpy for dhr_data += current_lambda * pre_hr_data // TR!= double: call cal_lambda_hr_IJR - if (this->nspin==2) + if (this->nspin == 2) { - //BlasConnector::axpy(row_size*col_size, coefficients[this->current_spin], pre_hr_data, dhr_data); - for(int i=0;icurrent_spin], pre_hr_data, dhr_data); + for (int i = 0; i < tmp.get_size(); i++) { dhr_data[i] += pre_hr_data[i] * coefficients[this->current_spin]; } } else { - for(int i=0;itmp_coeff_array[i]; } @@ -154,15 +155,15 @@ void hamilt::DeltaSpin>::contributeHR() // save lambda to lambda_save or update the current_spin in NSPIN=2 this->update_lambda_[this->current_spin] = false; - if(this->current_spin == this->spin_num - 1) + if (this->current_spin == this->spin_num - 1) { - for(int i=0;iucell->nat;i++) + for (int i = 0; i < this->ucell->nat; i++) { - if(this->constraint_atom_list[i]) + if (this->constraint_atom_list[i]) { - for(int j=0;j<3;j++) - { - this->lambda_save[i*3+j] = lambda[i][j]; + for (int j = 0; j < 3; j++) + { + this->lambda_save[i * 3 + j] = lambda[i][j]; } } } @@ -172,34 +173,36 @@ void hamilt::DeltaSpin>::contributeHR() // cal_lambda_hr_IJR template -void hamilt::DeltaSpin>::pre_coeff_array( - const std::vector& coeff, const int row_size, const int col_size) +void hamilt::DeltaSpin>::pre_coeff_array(const std::vector& coeff, + const int row_size, + const int col_size) { - this->tmp_coeff_array.resize(row_size*col_size); - for(int irow=0;irowtmp_coeff_array.resize(row_size * col_size); + for (int irow = 0; irow < row_size; irow += 2) { - for(int icol=0;icoltmp_coeff_array[irow*col_size+icol] = coeff[0]; - this->tmp_coeff_array[irow*col_size+icol+1] = coeff[1]; - this->tmp_coeff_array[(irow+1)*col_size+icol] = coeff[2]; - this->tmp_coeff_array[(irow+1)*col_size+icol+1] = coeff[3]; + this->tmp_coeff_array[irow * col_size + icol] = coeff[0]; + this->tmp_coeff_array[irow * col_size + icol + 1] = coeff[1]; + this->tmp_coeff_array[(irow + 1) * col_size + icol] = coeff[2]; + this->tmp_coeff_array[(irow + 1) * col_size + icol + 1] = coeff[3]; } } } // cal_constraint_atom_list() template -void hamilt::DeltaSpin>::cal_constraint_atom_list(const std::vector>& constraints) +void hamilt::DeltaSpin>::cal_constraint_atom_list( + const std::vector>& constraints) { this->constraint_atom_list.clear(); this->constraint_atom_list.resize(this->ucell->nat, false); #ifdef __DEBUG assert(this->ucell->nat == constraints.size()); #endif - for(int iat=0;iatucell->nat;iat++) + for (int iat = 0; iat < this->ucell->nat; iat++) { - if(constraints[iat][0] + constraints[iat][1] + constraints[iat][2] == 0) + if (constraints[iat][0] + constraints[iat][1] + constraints[iat][2] == 0) { this->constraint_atom_list[iat] = false; } @@ -215,7 +218,7 @@ template void hamilt::DeltaSpin>::cal_pre_HR() { ModuleBase::TITLE("DeltaSpin", "cal_pre_HR"); - if(this->initialized) + if (this->initialized) { return; } @@ -226,13 +229,13 @@ void hamilt::DeltaSpin>::cal_pre_HR() const int npol = this->ucell->get_npol(); size_t memory_cost = 0; - for(int iat=0;iatucell->nat;iat++) + for (int iat = 0; iat < this->ucell->nat; iat++) { - if(!this->constraint_atom_list[iat]) + if (!this->constraint_atom_list[iat]) { continue; } - + auto tau0 = ucell->get_tau(iat); int T0, I0; this->ucell->iat2iait(iat, &I0, &T0); @@ -249,8 +252,8 @@ void hamilt::DeltaSpin>::cal_pre_HR() const int iat1 = ucell->itia2iat(T1, I1); const ModuleBase::Vector3& R_index1 = adjs.box[ad]; // choose the real adjacent atoms - // Note: the distance of atoms should less than the cutoff radius, - // When equal, the theoretical value of matrix element is zero, + // Note: the distance of atoms should less than the cutoff radius, + // When equal, the theoretical value of matrix element is zero, // but the calculated value is not zero due to the numerical error, which would lead to result changes. if (this->ucell->cal_dtau(iat, iat1, R_index1).norm() * this->ucell->lat0 < this->orb_cutoff_[T1] + PARAM.inp.onsite_radius) @@ -276,16 +279,11 @@ void hamilt::DeltaSpin>::cal_pre_HR() ModuleBase::Vector3& R_index2 = adjs.box[ad2]; int r_vector[3] = {R_index2.x - R_index1.x, R_index2.y - R_index1.y, R_index2.z - R_index1.z}; // keep the size of pre_hr for each atom less than this->hR - if(this->hR->find_matrix(iat1, iat2, r_vector[0], r_vector[1], r_vector[2]) == nullptr) + if (this->hR->find_matrix(iat1, iat2, r_vector[0], r_vector[1], r_vector[2]) == nullptr) { continue; } - hamilt::AtomPair tmp(iat1, - iat2, - r_vector[0], - r_vector[1], - r_vector[2], - paraV); + hamilt::AtomPair tmp(iat1, iat2, r_vector[0], r_vector[1], r_vector[2], paraV); this->pre_hr[iat]->insert_pair(tmp); } } @@ -294,7 +292,7 @@ void hamilt::DeltaSpin>::cal_pre_HR() // third step: calculate the overlap integrals const int max_l_plus_1 = this->ucell->atoms[T0].nwl + 1; std::vector>> nlm_iat0(adjs.adj_num + 1); - for(int ad = 0; ad < adjs.adj_num + 1; ++ad) + for (int ad = 0; ad < adjs.adj_num + 1; ++ad) { const int T1 = adjs.ntype[ad]; const int I1 = adjs.natom[ad]; @@ -313,9 +311,9 @@ void hamilt::DeltaSpin>::cal_pre_HR() const int iw1 = all_indexes[iw1l] / npol; // only first zeta orbitals in target L of atom iat0 are needed std::vector nlm_target(max_l_plus_1 * max_l_plus_1); - const int L1 = atom1->iw2l[ iw1 ]; - const int N1 = atom1->iw2n[ iw1 ]; - const int m1 = atom1->iw2m[ iw1 ]; + const int L1 = atom1->iw2l[iw1]; + const int N1 = atom1->iw2n[iw1]; + const int m1 = atom1->iw2m[iw1]; std::vector> nlm; // nlm is a vector of vectors, but size of outer vector is only 1 here // If we are calculating force, we need also to store the gradient @@ -328,16 +326,16 @@ void hamilt::DeltaSpin>::cal_pre_HR() intor_->snap(T1, L1, N1, M1, T0, dtau * this->ucell->lat0, 0 /*cal_deri*/, nlm); // select the elements of nlm with target_L (0, 1, 2, 3 ...) - int target_L = 0, index=0; - for(int iw =0;iw < this->ucell->atoms[T0].nw; iw++) + int target_L = 0, index = 0; + for (int iw = 0; iw < this->ucell->atoms[T0].nw; iw++) { const int L0 = this->ucell->atoms[T0].iw2l[iw]; // only the first zeta of each l-orbital is needed - if(L0 == target_L) + if (L0 == target_L) { - for(int m = 0; m < 2*L0+1; m++) + for (int m = 0; m < 2 * L0 + 1; m++) { - nlm_target[index] = nlm[0][iw+m]; + nlm_target[index] = nlm[0][iw + m]; index++; } target_L++; @@ -354,18 +352,19 @@ void hamilt::DeltaSpin>::cal_pre_HR() const int I1 = adjs.natom[ad1]; const int iat1 = ucell->itia2iat(T1, I1); ModuleBase::Vector3& R_index1 = adjs.box[ad1]; - const std::unordered_map>& nlm1 = nlm_iat0[ad1]; + const std::unordered_map>& nlm1 = nlm_iat0[ad1]; for (int ad2 = 0; ad2 < adjs.adj_num + 1; ++ad2) { const int T2 = adjs.ntype[ad2]; const int I2 = adjs.natom[ad2]; const int iat2 = ucell->itia2iat(T2, I2); - const std::unordered_map>& nlm2 = nlm_iat0[ad2]; + const std::unordered_map>& nlm2 = nlm_iat0[ad2]; ModuleBase::Vector3& R_index2 = adjs.box[ad2]; ModuleBase::Vector3 R_vector(R_index2[0] - R_index1[0], R_index2[1] - R_index1[1], R_index2[2] - R_index1[2]); - hamilt::BaseMatrix* tmp = this->pre_hr[iat]->find_matrix(iat1, iat2, R_vector[0], R_vector[1], R_vector[2]); + hamilt::BaseMatrix* tmp + = this->pre_hr[iat]->find_matrix(iat1, iat2, R_vector[0], R_vector[1], R_vector[2]); // if not found , skip this pair of atoms if (tmp != nullptr) { @@ -381,11 +380,12 @@ void hamilt::DeltaSpin>::cal_pre_HR() // cal_HR_IJR() template -void hamilt::DeltaSpin>::cal_HR_IJR(const int& iat1, - const int& iat2, - const std::unordered_map>& nlm1_all, - const std::unordered_map>& nlm2_all, - TR* data_pointer) +void hamilt::DeltaSpin>::cal_HR_IJR( + const int& iat1, + const int& iat2, + const std::unordered_map>& nlm1_all, + const std::unordered_map>& nlm2_all, + TR* data_pointer) { // npol is the number of polarizations, // 1 for non-magnetic (one Hamiltonian matrix only has spin-up or spin-down), @@ -397,7 +397,7 @@ void hamilt::DeltaSpin>::cal_HR_IJR(const int& iat1 auto row_indexes = this->paraV->get_indexes_row(iat1); auto col_indexes = this->paraV->get_indexes_col(iat2); // step_trace = 0 for NSPIN=1,2; ={0, 1, local_col, local_col+1} for NSPIN=4 - std::vector step_trace(npol*npol, 0); + std::vector step_trace(npol * npol, 0); for (int is = 0; is < npol; is++) { for (int is2 = 0; is2 < npol; is2++) @@ -421,7 +421,7 @@ void hamilt::DeltaSpin>::cal_HR_IJR(const int& iat1 { nlm_tmp += nlm1[m1] * nlm2[m1]; } - for (int is = 0; is < npol*npol; ++is) + for (int is = 0; is < npol * npol; ++is) { data_pointer[step_trace[is]] += nlm_tmp; } @@ -433,90 +433,89 @@ void hamilt::DeltaSpin>::cal_HR_IJR(const int& iat1 // cal_moment template -std::vector hamilt::DeltaSpin>::cal_moment(const HContainer* dmR, const std::vector>& constrain) +std::vector hamilt::DeltaSpin>::cal_moment( + const HContainer* dmR, + const std::vector>& constrain) { - const int mag_fold = this->nspin==4?3:1; + const int mag_fold = this->nspin == 4 ? 3 : 1; std::vector moment(this->ucell->nat * mag_fold, 0.0); - if(dmR == nullptr) + if (dmR == nullptr) { return moment; } if (!this->initialized) { - //spinconstrain::SpinConstrain& sc = spinconstrain::SpinConstrain::getScInstance(); - //auto& constrain = sc.get_constrain(); + // spinconstrain::SpinConstrain& sc = spinconstrain::SpinConstrain::getScInstance(); + // auto& constrain = sc.get_constrain(); this->cal_constraint_atom_list(constrain); this->cal_pre_HR(); this->initialized = true; } - for(int iat=0;iatucell->nat;iat++) + for (int iat = 0; iat < this->ucell->nat; iat++) { - if(!this->constraint_atom_list[iat]) + if (!this->constraint_atom_list[iat]) { continue; } // magnetic moment = \sum_{\mu\nu,R} dmR * pre_hr - for(int iap=0;iappre_hr[iat]->size_atom_pairs();iap++) + for (int iap = 0; iap < this->pre_hr[iat]->size_atom_pairs(); iap++) { hamilt::AtomPair& tmp = this->pre_hr[iat]->get_atom_pair(iap); int iat1 = tmp.get_atom_i(); int iat2 = tmp.get_atom_j(); int row_size = tmp.get_row_size(); int col_size = tmp.get_col_size(); - for(int ir = 0;ir < tmp.get_R_size(); ++ir ) + for (int ir = 0; ir < tmp.get_R_size(); ++ir) { const ModuleBase::Vector3 r_index = tmp.get_R_index(ir); double* dmr_data = dmR->find_matrix(iat1, iat2, r_index[0], r_index[1], r_index[2])->get_pointer(); const TR* hr_data = tmp.get_pointer(ir); - this->cal_moment_IJR(dmr_data, hr_data, row_size, col_size, &moment[iat*mag_fold]); + this->cal_moment_IJR(dmr_data, hr_data, row_size, col_size, &moment[iat * mag_fold]); } } } #ifdef __MPI // sum up the magnetic moments Parallel_Reduce::reduce_all(moment.data(), moment.size()); -#endif +#endif return moment; } // cal_moment_IJR template -void hamilt::DeltaSpin>::cal_moment_IJR( - const double* dmR, - const TR* hr, - const int row_size, - const int col_size, - double* moment -) +void hamilt::DeltaSpin>::cal_moment_IJR(const double* dmR, + const TR* hr, + const int row_size, + const int col_size, + double* moment) { // collinear spin case TR tmp_moment = TR(0); - for(int i=0;i +template <> void hamilt::DeltaSpin, std::complex>>::cal_moment_IJR( - const double* dmR, - const std::complex* hr, + const double* dmR, + const std::complex* hr, const int row_size, - const int col_size, - double* moment -) + const int col_size, + double* moment) { - const int step_trace[4] = {0, 1, col_size, col_size+1}; + const int step_trace[4] = {0, 1, col_size, col_size + 1}; int index = 0; std::vector> tmp_moment(3, std::complex(0.0, 0.0)); - for(int irow=0;irow @@ -45,14 +45,14 @@ void hamilt::EkineticNew>::initialize_HR(const Grid ModuleBase::TITLE("EkineticNew", "initialize_HR"); ModuleBase::timer::tick("EkineticNew", "initialize_HR"); - auto* paraV = this->hR->get_paraV();// get parallel orbitals from HR + auto* paraV = this->hR->get_paraV(); // get parallel orbitals from HR // TODO: if paraV is nullptr, AtomPair can not use paraV for constructor, I will repair it in the future. for (int iat1 = 0; iat1 < ucell->nat; iat1++) { auto tau1 = ucell->get_tau(iat1); - int T1=0; - int I1=0; + int T1 = 0; + int I1 = 0; ucell->iat2iait(iat1, &I1, &T1); AdjacentAtomInfo adjs; GridD->Find_atom(*ucell, tau1, T1, I1, &adjs); @@ -112,8 +112,8 @@ void hamilt::EkineticNew>::calculate_HR() for (int iat1 = 0; iat1 < this->ucell->nat; iat1++) { auto tau1 = ucell->get_tau(iat1); - int T1=0; - int I1=0; + int T1 = 0; + int I1 = 0; ucell->iat2iait(iat1, &I1, &T1); AdjacentAtomInfo& adjs = this->adjs_all[iat1]; for (int ad = 0; ad < adjs.adj_num + 1; ++ad) diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/meta_lcao.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/meta_lcao.cpp index de325a998f..d4aac2e423 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/meta_lcao.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/meta_lcao.cpp @@ -1,7 +1,8 @@ #include "meta_lcao.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" + #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" namespace hamilt { @@ -12,4 +13,4 @@ template class Meta, double>>; template class Meta, std::complex>>; -} \ No newline at end of file +} // namespace hamilt \ No newline at end of file diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/meta_lcao.h b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/meta_lcao.h index 9ab76b43c9..d22d2c7833 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/meta_lcao.h +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/meta_lcao.h @@ -1,9 +1,9 @@ #ifndef METALCAO_H #define METALCAO_H -#include "module_base/timer.h" #include "module_hamilt_lcao/module_gint/gint_gamma.h" #include "module_hamilt_lcao/module_gint/gint_k.h" #include "operator_lcao.h" +#include "source_base/timer.h" namespace hamilt { @@ -22,10 +22,9 @@ template class Meta> : public OperatorLCAO { public: - Meta>( - HS_Matrix_K* hsk_in, - const std::vector>& kvec_d_in, - HContainer* hR_in) + Meta>(HS_Matrix_K* hsk_in, + const std::vector>& kvec_d_in, + HContainer* hR_in) : OperatorLCAO(hsk_in, kvec_d_in, hR_in) { this->cal_type = calculation_type::lcao_gint; @@ -33,9 +32,11 @@ class Meta> : public OperatorLCAO ~Meta>(){}; - virtual void contributeHR() override{}//do nothing now + virtual void contributeHR() override + { + } // do nothing now - virtual void contributeHk(int ik) override{};//do nothing now + virtual void contributeHk(int ik) override{}; // do nothing now private: }; diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/nonlocal_force_stress.hpp b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/nonlocal_force_stress.hpp index d6999b7ae9..ba992f6982 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/nonlocal_force_stress.hpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/nonlocal_force_stress.hpp @@ -1,17 +1,17 @@ #pragma once #include "nonlocal_new.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" namespace hamilt { template void NonlocalNew>::cal_force_stress(const bool cal_force, - const bool cal_stress, - const HContainer* dmR, - ModuleBase::matrix& force, - ModuleBase::matrix& stress) + const bool cal_stress, + const HContainer* dmR, + ModuleBase::matrix& force, + ModuleBase::matrix& stress) { ModuleBase::TITLE("NonlocalNew", "cal_force_stress"); @@ -25,166 +25,168 @@ void NonlocalNew>::cal_force_stress(const bool cal_force, { force.zero_out(); } - // 1. calculate for each pair of atoms - // loop over all on-site atoms - #pragma omp parallel +// 1. calculate for each pair of atoms +// loop over all on-site atoms +#pragma omp parallel { - std::vector stress_local(6, 0); - ModuleBase::matrix force_local(force.nr, force.nc); - #pragma omp for schedule(dynamic) - for (int iat0 = 0; iat0 < this->ucell->nat; iat0++) - { - // skip the atoms without plus-U - auto tau0 = ucell->get_tau(iat0); - int I0 = 0; - int T0 = 0; - ucell->iat2iait(iat0, &I0, &T0); - - // first step: find the adjacent atoms and filter the real adjacent atoms - AdjacentAtomInfo adjs; - this->gridD->Find_atom(*ucell, tau0, T0, I0, &adjs); - - std::vector is_adj(adjs.adj_num + 1, false); - for (int ad = 0; ad < adjs.adj_num + 1; ++ad) + std::vector stress_local(6, 0); + ModuleBase::matrix force_local(force.nr, force.nc); +#pragma omp for schedule(dynamic) + for (int iat0 = 0; iat0 < this->ucell->nat; iat0++) { - const int T1 = adjs.ntype[ad]; - const int I1 = adjs.natom[ad]; - const int iat1 = ucell->itia2iat(T1, I1); - const ModuleBase::Vector3& R_index1 = adjs.box[ad]; - // choose the real adjacent atoms - // Note: the distance of atoms should less than the cutoff radius, - // When equal, the theoretical value of matrix element is zero, - // but the calculated value is not zero due to the numerical error, which would lead to result changes. - if (this->ucell->cal_dtau(iat0, iat1, R_index1).norm() * this->ucell->lat0 - < orb_cutoff_[T1] + this->ucell->infoNL.Beta[T0].get_rcut_max()) - { - is_adj[ad] = true; - } - } - filter_adjs(is_adj, adjs); + // skip the atoms without plus-U + auto tau0 = ucell->get_tau(iat0); + int I0 = 0; + int T0 = 0; + ucell->iat2iait(iat0, &I0, &T0); - std::vector>> nlm_iat0(adjs.adj_num + 1); - for (int ad = 0; ad < adjs.adj_num + 1; ++ad) - { - const int T1 = adjs.ntype[ad]; - const int I1 = adjs.natom[ad]; - const int iat1 = ucell->itia2iat(T1, I1); - const ModuleBase::Vector3& tau1 = adjs.adjacent_tau[ad]; - const Atom* atom1 = &ucell->atoms[T1]; + // first step: find the adjacent atoms and filter the real adjacent atoms + AdjacentAtomInfo adjs; + this->gridD->Find_atom(*ucell, tau0, T0, I0, &adjs); - auto all_indexes = paraV->get_indexes_row(iat1); - auto col_indexes = paraV->get_indexes_col(iat1); - // insert col_indexes into all_indexes to get universal set with no repeat elements - all_indexes.insert(all_indexes.end(), col_indexes.begin(), col_indexes.end()); - std::sort(all_indexes.begin(), all_indexes.end()); - all_indexes.erase(std::unique(all_indexes.begin(), all_indexes.end()), all_indexes.end()); - for (int iw1l = 0; iw1l < all_indexes.size(); iw1l += npol) + std::vector is_adj(adjs.adj_num + 1, false); + for (int ad = 0; ad < adjs.adj_num + 1; ++ad) { - const int iw1 = all_indexes[iw1l] / npol; - std::vector> nlm; - // nlm is a vector of vectors, but size of outer vector is only 1 here - // If we are calculating force, we need also to store the gradient - // and size of outer vector is then 4 - // inner loop : all projectors (L0,M0) - int L1 = atom1->iw2l[iw1]; - int N1 = atom1->iw2n[iw1]; - int m1 = atom1->iw2m[iw1]; + const int T1 = adjs.ntype[ad]; + const int I1 = adjs.natom[ad]; + const int iat1 = ucell->itia2iat(T1, I1); + const ModuleBase::Vector3& R_index1 = adjs.box[ad]; + // choose the real adjacent atoms + // Note: the distance of atoms should less than the cutoff radius, + // When equal, the theoretical value of matrix element is zero, + // but the calculated value is not zero due to the numerical error, which would lead to result changes. + if (this->ucell->cal_dtau(iat0, iat1, R_index1).norm() * this->ucell->lat0 + < orb_cutoff_[T1] + this->ucell->infoNL.Beta[T0].get_rcut_max()) + { + is_adj[ad] = true; + } + } + filter_adjs(is_adj, adjs); - // convert m (0,1,...2l) to M (-l, -l+1, ..., l-1, l) - int M1 = (m1 % 2 == 0) ? -m1 / 2 : (m1 + 1) / 2; + std::vector>> nlm_iat0(adjs.adj_num + 1); + for (int ad = 0; ad < adjs.adj_num + 1; ++ad) + { + const int T1 = adjs.ntype[ad]; + const int I1 = adjs.natom[ad]; + const int iat1 = ucell->itia2iat(T1, I1); + const ModuleBase::Vector3& tau1 = adjs.adjacent_tau[ad]; + const Atom* atom1 = &ucell->atoms[T1]; - ModuleBase::Vector3 dtau = tau0 - tau1; - intor_->snap(T1, L1, N1, M1, T0, dtau * this->ucell->lat0, true /*cal_deri*/, nlm); - // select the elements of nlm with target_L - const int length = nlm[0].size(); - std::vector nlm_target(length * 4); - // rearrange the nlm_target to store the gradient - for(int index =0;index < length; index++) + auto all_indexes = paraV->get_indexes_row(iat1); + auto col_indexes = paraV->get_indexes_col(iat1); + // insert col_indexes into all_indexes to get universal set with no repeat elements + all_indexes.insert(all_indexes.end(), col_indexes.begin(), col_indexes.end()); + std::sort(all_indexes.begin(), all_indexes.end()); + all_indexes.erase(std::unique(all_indexes.begin(), all_indexes.end()), all_indexes.end()); + for (int iw1l = 0; iw1l < all_indexes.size(); iw1l += npol) { - for (int n = 0; n < 4; n++) // value, deri_x, deri_y, deri_z + const int iw1 = all_indexes[iw1l] / npol; + std::vector> nlm; + // nlm is a vector of vectors, but size of outer vector is only 1 here + // If we are calculating force, we need also to store the gradient + // and size of outer vector is then 4 + // inner loop : all projectors (L0,M0) + int L1 = atom1->iw2l[iw1]; + int N1 = atom1->iw2n[iw1]; + int m1 = atom1->iw2m[iw1]; + + // convert m (0,1,...2l) to M (-l, -l+1, ..., l-1, l) + int M1 = (m1 % 2 == 0) ? -m1 / 2 : (m1 + 1) / 2; + + ModuleBase::Vector3 dtau = tau0 - tau1; + intor_->snap(T1, L1, N1, M1, T0, dtau * this->ucell->lat0, true /*cal_deri*/, nlm); + // select the elements of nlm with target_L + const int length = nlm[0].size(); + std::vector nlm_target(length * 4); + // rearrange the nlm_target to store the gradient + for (int index = 0; index < length; index++) { - nlm_target[index + n * length] = nlm[n][index]; + for (int n = 0; n < 4; n++) // value, deri_x, deri_y, deri_z + { + nlm_target[index + n * length] = nlm[n][index]; + } } + nlm_iat0[ad].insert({all_indexes[iw1l], nlm_target}); } - nlm_iat0[ad].insert({all_indexes[iw1l], nlm_target}); } - } - // second iteration to calculate force and stress - for (int ad1 = 0; ad1 < adjs.adj_num + 1; ++ad1) - { - const int T1 = adjs.ntype[ad1]; - const int I1 = adjs.natom[ad1]; - const int iat1 = ucell->itia2iat(T1, I1); - double* force_tmp1 = (cal_force) ? &force_local(iat1, 0) : nullptr; - double* force_tmp2 = (cal_force) ? &force_local(iat0, 0) : nullptr; - ModuleBase::Vector3& R_index1 = adjs.box[ad1]; - ModuleBase::Vector3 dis1 = adjs.adjacent_tau[ad1] - tau0; - for (int ad2 = 0; ad2 < adjs.adj_num + 1; ++ad2) + // second iteration to calculate force and stress + for (int ad1 = 0; ad1 < adjs.adj_num + 1; ++ad1) { - const int T2 = adjs.ntype[ad2]; - const int I2 = adjs.natom[ad2]; - const int iat2 = ucell->itia2iat(T2, I2); - ModuleBase::Vector3& R_index2 = adjs.box[ad2]; - ModuleBase::Vector3 dis2 = adjs.adjacent_tau[ad2] - tau0; - ModuleBase::Vector3 R_vector(R_index2[0] - R_index1[0], - R_index2[1] - R_index1[1], - R_index2[2] - R_index1[2]); - const hamilt::BaseMatrix* tmp = dmR->find_matrix(iat1, iat2, R_vector[0], R_vector[1], R_vector[2]); - int row_size = paraV->get_row_size(); - int col_size = paraV->get_col_size(); - if(row_size == 0 || col_size == 0) - { - continue; - } - // if not found , skip this pair of atoms - if (tmp != nullptr) + const int T1 = adjs.ntype[ad1]; + const int I1 = adjs.natom[ad1]; + const int iat1 = ucell->itia2iat(T1, I1); + double* force_tmp1 = (cal_force) ? &force_local(iat1, 0) : nullptr; + double* force_tmp2 = (cal_force) ? &force_local(iat0, 0) : nullptr; + ModuleBase::Vector3& R_index1 = adjs.box[ad1]; + ModuleBase::Vector3 dis1 = adjs.adjacent_tau[ad1] - tau0; + for (int ad2 = 0; ad2 < adjs.adj_num + 1; ++ad2) { - // calculate force - if (cal_force) { - this->cal_force_IJR(iat1, - iat2, - T0, - paraV, - nlm_iat0[ad1], - nlm_iat0[ad2], - tmp, - force_tmp1, - force_tmp2); + const int T2 = adjs.ntype[ad2]; + const int I2 = adjs.natom[ad2]; + const int iat2 = ucell->itia2iat(T2, I2); + ModuleBase::Vector3& R_index2 = adjs.box[ad2]; + ModuleBase::Vector3 dis2 = adjs.adjacent_tau[ad2] - tau0; + ModuleBase::Vector3 R_vector(R_index2[0] - R_index1[0], + R_index2[1] - R_index1[1], + R_index2[2] - R_index1[2]); + const hamilt::BaseMatrix* tmp + = dmR->find_matrix(iat1, iat2, R_vector[0], R_vector[1], R_vector[2]); + int row_size = paraV->get_row_size(); + int col_size = paraV->get_col_size(); + if (row_size == 0 || col_size == 0) + { + continue; } + // if not found , skip this pair of atoms + if (tmp != nullptr) + { + // calculate force + if (cal_force) + { + this->cal_force_IJR(iat1, + iat2, + T0, + paraV, + nlm_iat0[ad1], + nlm_iat0[ad2], + tmp, + force_tmp1, + force_tmp2); + } - // calculate stress - if (cal_stress) { - this->cal_stress_IJR(iat1, - iat2, - T0, - paraV, - nlm_iat0[ad1], - nlm_iat0[ad2], - tmp, - dis1, - dis2, - stress_local.data()); + // calculate stress + if (cal_stress) + { + this->cal_stress_IJR(iat1, + iat2, + T0, + paraV, + nlm_iat0[ad1], + nlm_iat0[ad2], + tmp, + dis1, + dis2, + stress_local.data()); + } } } } } - } - #pragma omp critical - { - if(cal_force) +#pragma omp critical { - force += force_local; - } - if(cal_stress) - { - for(int i = 0; i < 6; i++) + if (cal_force) + { + force += force_local; + } + if (cal_stress) { - stress_tmp[i] += stress_local[i]; + for (int i = 0; i < 6; i++) + { + stress_tmp[i] += stress_local[i]; + } } } - - } } if (cal_force) @@ -223,15 +225,16 @@ void NonlocalNew>::cal_force_stress(const bool cal_force, } template <> -void NonlocalNew, std::complex>>::cal_force_IJR(const int& iat1, - const int& iat2, - const int& T0, - const Parallel_Orbitals* paraV, - const std::unordered_map>& nlm1_all, - const std::unordered_map>& nlm2_all, - const hamilt::BaseMatrix>* dmR_pointer, - double* force1, - double* force2) +void NonlocalNew, std::complex>>::cal_force_IJR( + const int& iat1, + const int& iat2, + const int& T0, + const Parallel_Orbitals* paraV, + const std::unordered_map>& nlm1_all, + const std::unordered_map>& nlm2_all, + const hamilt::BaseMatrix>* dmR_pointer, + double* force1, + double* force2) { // npol is the number of polarizations, // 1 for non-magnetic (one Hamiltonian matrix only has spin-up or spin-down), @@ -244,7 +247,8 @@ void NonlocalNew, std::complex>>::cal_ auto col_indexes = paraV->get_indexes_col(iat2); // step_trace = 0 for NSPIN=2; ={0, 1, local_col, local_col+1} for NSPIN=4 std::vector step_trace(npol * npol, 0); - if (npol == 2) { + if (npol == 2) + { step_trace[1] = 1; step_trace[2] = col_indexes.size(); step_trace[3] = col_indexes.size() + 1; @@ -270,18 +274,17 @@ void NonlocalNew, std::complex>>::cal_ const int p1 = this->ucell->atoms[T0].ncpp.index1_soc[is][no]; const int p2 = this->ucell->atoms[T0].ncpp.index2_soc[is][no]; this->ucell->atoms[T0].ncpp.get_d(is, p1, p2, tmp_d); - nlm_tmp[is*3] += nlm1[p1 + length] * nlm2[p2] * (*tmp_d); - nlm_tmp[is*3+1] += nlm1[p1 + length * 2] * nlm2[p2] * (*tmp_d); - nlm_tmp[is*3+2] += nlm1[p1 + length * 3] * nlm2[p2] * (*tmp_d); + nlm_tmp[is * 3] += nlm1[p1 + length] * nlm2[p2] * (*tmp_d); + nlm_tmp[is * 3 + 1] += nlm1[p1 + length * 2] * nlm2[p2] * (*tmp_d); + nlm_tmp[is * 3 + 2] += nlm1[p1 + length * 3] * nlm2[p2] * (*tmp_d); } } // calculate the force, transfer nlm_tmp to pauli matrix - for(int i = 0; i < 3; i++) + for (int i = 0; i < 3; i++) { - double tmp = (dm_pointer[step_trace[0]] * nlm_tmp[i] - + dm_pointer[step_trace[1]] * nlm_tmp[i+3] - + dm_pointer[step_trace[2]] * nlm_tmp[i+6] - + dm_pointer[step_trace[3]] * nlm_tmp[i+9]).real(); + double tmp = (dm_pointer[step_trace[0]] * nlm_tmp[i] + dm_pointer[step_trace[1]] * nlm_tmp[i + 3] + + dm_pointer[step_trace[2]] * nlm_tmp[i + 6] + dm_pointer[step_trace[3]] * nlm_tmp[i + 9]) + .real(); force1[i] += tmp; force2[i] -= tmp; } @@ -292,16 +295,17 @@ void NonlocalNew, std::complex>>::cal_ } template <> -void NonlocalNew, std::complex>>::cal_stress_IJR(const int& iat1, - const int& iat2, - const int& T0, - const Parallel_Orbitals* paraV, - const std::unordered_map>& nlm1_all, - const std::unordered_map>& nlm2_all, - const hamilt::BaseMatrix>* dmR_pointer, - const ModuleBase::Vector3& dis1, - const ModuleBase::Vector3& dis2, - double* stress) +void NonlocalNew, std::complex>>::cal_stress_IJR( + const int& iat1, + const int& iat2, + const int& T0, + const Parallel_Orbitals* paraV, + const std::unordered_map>& nlm1_all, + const std::unordered_map>& nlm2_all, + const hamilt::BaseMatrix>* dmR_pointer, + const ModuleBase::Vector3& dis1, + const ModuleBase::Vector3& dis2, + double* stress) { // npol is the number of polarizations, // 1 for non-magnetic (one Hamiltonian matrix only has spin-up or spin-down), @@ -315,7 +319,8 @@ void NonlocalNew, std::complex>>::cal_ auto col_indexes = paraV->get_indexes_col(iat2); // step_trace = 0 for NSPIN=2; ={0, 1, local_col, local_col+1} for NSPIN=4 std::vector step_trace(npol2, 0); - if (npol == 2) { + if (npol == 2) + { step_trace[1] = 1; step_trace[2] = col_indexes.size(); step_trace[3] = col_indexes.size() + 1; @@ -341,21 +346,30 @@ void NonlocalNew, std::complex>>::cal_ const int p1 = this->ucell->atoms[T0].ncpp.index1_soc[is][no]; const int p2 = this->ucell->atoms[T0].ncpp.index2_soc[is][no]; this->ucell->atoms[T0].ncpp.get_d(is, p1, p2, tmp_d); - nlm_tmp[is*6] += (nlm1[p1 + length] * dis1.x * nlm2[p2] + nlm1[p1] * nlm2[p2 + length] * dis2.x) * (*tmp_d); - nlm_tmp[is*6+1] += (nlm1[p1 + length] * dis1.y * nlm2[p2] + nlm1[p1] * nlm2[p2 + length] * dis2.y) * (*tmp_d); - nlm_tmp[is*6+2] += (nlm1[p1 + length] * dis1.z * nlm2[p2] + nlm1[p1] * nlm2[p2 + length] * dis2.z) * (*tmp_d); - nlm_tmp[is*6+3] += (nlm1[p1 + length * 2] * dis1.y * nlm2[p2] + nlm1[p1] * nlm2[p2 + length * 2] * dis2.y) * (*tmp_d); - nlm_tmp[is*6+4] += (nlm1[p1 + length * 2] * dis1.z * nlm2[p2] + nlm1[p1] * nlm2[p2 + length * 2] * dis2.z) * (*tmp_d); - nlm_tmp[is*6+5] += (nlm1[p1 + length * 3] * dis1.z * nlm2[p2] + nlm1[p1] * nlm2[p2 + length * 3] * dis2.z) * (*tmp_d); + nlm_tmp[is * 6] + += (nlm1[p1 + length] * dis1.x * nlm2[p2] + nlm1[p1] * nlm2[p2 + length] * dis2.x) * (*tmp_d); + nlm_tmp[is * 6 + 1] + += (nlm1[p1 + length] * dis1.y * nlm2[p2] + nlm1[p1] * nlm2[p2 + length] * dis2.y) * (*tmp_d); + nlm_tmp[is * 6 + 2] + += (nlm1[p1 + length] * dis1.z * nlm2[p2] + nlm1[p1] * nlm2[p2 + length] * dis2.z) * (*tmp_d); + nlm_tmp[is * 6 + 3] + += (nlm1[p1 + length * 2] * dis1.y * nlm2[p2] + nlm1[p1] * nlm2[p2 + length * 2] * dis2.y) + * (*tmp_d); + nlm_tmp[is * 6 + 4] + += (nlm1[p1 + length * 2] * dis1.z * nlm2[p2] + nlm1[p1] * nlm2[p2 + length * 2] * dis2.z) + * (*tmp_d); + nlm_tmp[is * 6 + 5] + += (nlm1[p1 + length * 3] * dis1.z * nlm2[p2] + nlm1[p1] * nlm2[p2 + length * 3] * dis2.z) + * (*tmp_d); } } // calculate the force, transfer nlm_tmp to pauli matrix - for(int i = 0; i < 6; i++) + for (int i = 0; i < 6; i++) { - stress[i] += (dm_pointer[step_trace[0]] * nlm_tmp[i] - + dm_pointer[step_trace[1]] * nlm_tmp[i+6] - + dm_pointer[step_trace[2]] * nlm_tmp[i+12] - + dm_pointer[step_trace[3]] * nlm_tmp[i+18]).real(); + stress[i] + += (dm_pointer[step_trace[0]] * nlm_tmp[i] + dm_pointer[step_trace[1]] * nlm_tmp[i + 6] + + dm_pointer[step_trace[2]] * nlm_tmp[i + 12] + dm_pointer[step_trace[3]] * nlm_tmp[i + 18]) + .real(); } dm_pointer += npol; } @@ -365,14 +379,14 @@ void NonlocalNew, std::complex>>::cal_ template void NonlocalNew>::cal_force_IJR(const int& iat1, - const int& iat2, - const int& T0, - const Parallel_Orbitals* paraV, - const std::unordered_map>& nlm1_all, - const std::unordered_map>& nlm2_all, - const hamilt::BaseMatrix* dmR_pointer, - double* force1, - double* force2) + const int& iat2, + const int& T0, + const Parallel_Orbitals* paraV, + const std::unordered_map>& nlm1_all, + const std::unordered_map>& nlm2_all, + const hamilt::BaseMatrix* dmR_pointer, + double* force1, + double* force2) { // --------------------------------------------- // calculate the Nonlocal matrix for each pair of orbitals @@ -403,7 +417,7 @@ void NonlocalNew>::cal_force_IJR(const int& iat1, nlm_tmp[2] += nlm1[p1 + length * 3] * nlm2[p2] * (*tmp_d); } // calculate the force, transfer nlm_tmp to pauli matrix - for(int i = 0; i < 3; i++) + for (int i = 0; i < 3; i++) { force1[i] += dm_pointer[0] * nlm_tmp[i]; force2[i] -= dm_pointer[0] * nlm_tmp[i]; @@ -415,15 +429,15 @@ void NonlocalNew>::cal_force_IJR(const int& iat1, template void NonlocalNew>::cal_stress_IJR(const int& iat1, - const int& iat2, - const int& T0, - const Parallel_Orbitals* paraV, - const std::unordered_map>& nlm1_all, - const std::unordered_map>& nlm2_all, - const hamilt::BaseMatrix* dmR_pointer, - const ModuleBase::Vector3& dis1, - const ModuleBase::Vector3& dis2, - double* stress) + const int& iat2, + const int& T0, + const Parallel_Orbitals* paraV, + const std::unordered_map>& nlm1_all, + const std::unordered_map>& nlm2_all, + const hamilt::BaseMatrix* dmR_pointer, + const ModuleBase::Vector3& dis1, + const ModuleBase::Vector3& dis2, + double* stress) { // --------------------------------------------- // calculate the Nonlocal matrix for each pair of orbitals @@ -449,15 +463,21 @@ void NonlocalNew>::cal_stress_IJR(const int& iat1, const int p1 = this->ucell->atoms[T0].ncpp.index1_soc[0][no]; const int p2 = this->ucell->atoms[T0].ncpp.index2_soc[0][no]; this->ucell->atoms[T0].ncpp.get_d(0, p1, p2, tmp_d); - nlm_tmp[0] += (nlm1[p1 + length] * dis1.x * nlm2[p2] + nlm1[p1] * nlm2[p2 + length] * dis2.x) * (*tmp_d); - nlm_tmp[1] += (nlm1[p1 + length] * dis1.y * nlm2[p2] + nlm1[p1] * nlm2[p2 + length] * dis2.y) * (*tmp_d); - nlm_tmp[2] += (nlm1[p1 + length] * dis1.z * nlm2[p2] + nlm1[p1] * nlm2[p2 + length] * dis2.z) * (*tmp_d); - nlm_tmp[3] += (nlm1[p1 + length * 2] * dis1.y * nlm2[p2] + nlm1[p1] * nlm2[p2 + length * 2] * dis2.y) * (*tmp_d); - nlm_tmp[4] += (nlm1[p1 + length * 2] * dis1.z * nlm2[p2] + nlm1[p1] * nlm2[p2 + length * 2] * dis2.z) * (*tmp_d); - nlm_tmp[5] += (nlm1[p1 + length * 3] * dis1.z * nlm2[p2] + nlm1[p1] * nlm2[p2 + length * 3] * dis2.z) * (*tmp_d); + nlm_tmp[0] + += (nlm1[p1 + length] * dis1.x * nlm2[p2] + nlm1[p1] * nlm2[p2 + length] * dis2.x) * (*tmp_d); + nlm_tmp[1] + += (nlm1[p1 + length] * dis1.y * nlm2[p2] + nlm1[p1] * nlm2[p2 + length] * dis2.y) * (*tmp_d); + nlm_tmp[2] + += (nlm1[p1 + length] * dis1.z * nlm2[p2] + nlm1[p1] * nlm2[p2 + length] * dis2.z) * (*tmp_d); + nlm_tmp[3] += (nlm1[p1 + length * 2] * dis1.y * nlm2[p2] + nlm1[p1] * nlm2[p2 + length * 2] * dis2.y) + * (*tmp_d); + nlm_tmp[4] += (nlm1[p1 + length * 2] * dis1.z * nlm2[p2] + nlm1[p1] * nlm2[p2 + length * 2] * dis2.z) + * (*tmp_d); + nlm_tmp[5] += (nlm1[p1 + length * 3] * dis1.z * nlm2[p2] + nlm1[p1] * nlm2[p2 + length * 3] * dis2.z) + * (*tmp_d); } // calculate the force, transfer nlm_tmp to pauli matrix - for(int i = 0; i < 6; i++) + for (int i = 0; i < 6; i++) { stress[i] += dm_pointer[0] * nlm_tmp[i]; } diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/nonlocal_new.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/nonlocal_new.cpp index b8afc97987..10ae6b9329 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/nonlocal_new.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/nonlocal_new.cpp @@ -1,10 +1,10 @@ #include "nonlocal_new.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer_funcs.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" #ifdef _OPENMP #include #endif @@ -27,7 +27,7 @@ hamilt::NonlocalNew>::NonlocalNew( assert(this->ucell != nullptr); #endif // initialize HR to allocate sparse Nonlocal matrix memory - if(hR_in != nullptr) + if (hR_in != nullptr) { this->initialize_HR(GridD_in); } @@ -50,7 +50,7 @@ void hamilt::NonlocalNew>::initialize_HR(const Grid ModuleBase::TITLE("NonlocalNew", "initialize_HR"); ModuleBase::timer::tick("NonlocalNew", "initialize_HR"); - auto* paraV = this->hR->get_paraV();// get parallel orbitals from HR + auto* paraV = this->hR->get_paraV(); // get parallel orbitals from HR // TODO: if paraV is nullptr, AtomPair can not use paraV for constructor, I will repair it in the future. this->adjs_all.clear(); diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_dftu_lcao.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_dftu_lcao.cpp index 924dcf1764..c400c21076 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_dftu_lcao.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_dftu_lcao.cpp @@ -1,8 +1,9 @@ #include "op_dftu_lcao.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" + #include "module_hamilt_lcao/module_dftu/dftu.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" namespace hamilt { @@ -13,14 +14,14 @@ template class OperatorDFTU, double>>; template class OperatorDFTU, std::complex>>; -template +template void OperatorDFTU>::contributeHR() { - //no calculation of HR yet for DFTU operator + // no calculation of HR yet for DFTU operator return; } -template<> +template <> void OperatorDFTU>::contributeHk(int ik) { ModuleBase::TITLE("OperatorDFTU", "contributeHk"); @@ -38,7 +39,7 @@ void OperatorDFTU>::contributeHk(int ik) ModuleBase::timer::tick("OperatorDFTU", "contributeHk"); } -template<> +template <> void OperatorDFTU, double>>::contributeHk(int ik) { ModuleBase::TITLE("OperatorDFTU", "contributeHk"); @@ -56,7 +57,7 @@ void OperatorDFTU, double>>::contributeHk(int ModuleBase::timer::tick("OperatorDFTU", "contributeHk"); } -template<> +template <> void OperatorDFTU, std::complex>>::contributeHk(int ik) { ModuleBase::TITLE("OperatorDFTU", "contributeHk"); @@ -74,4 +75,4 @@ void OperatorDFTU, std::complex>>::con ModuleBase::timer::tick("OperatorDFTU", "contributeHk"); } -} \ No newline at end of file +} // namespace hamilt \ No newline at end of file diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_dftu_lcao.h b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_dftu_lcao.h index de40bce4b3..73590468b2 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_dftu_lcao.h +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_dftu_lcao.h @@ -1,7 +1,7 @@ #ifndef OPDFTULCAO_H #define OPDFTULCAO_H -#include "module_base/timer.h" #include "operator_lcao.h" +#include "source_base/timer.h" namespace hamilt { @@ -21,9 +21,9 @@ class OperatorDFTU> : public OperatorLCAO { public: OperatorDFTU>(HS_Matrix_K* hsk_in, - const std::vector>& kvec_d_in, - hamilt::HContainer* hR_in, - const std::vector& isk_in) + const std::vector>& kvec_d_in, + hamilt::HContainer* hR_in, + const std::vector& isk_in) : isk(isk_in), OperatorLCAO(hsk_in, kvec_d_in, hR_in) { this->cal_type = calculation_type::lcao_dftu; @@ -34,7 +34,6 @@ class OperatorDFTU> : public OperatorLCAO virtual void contributeHk(int ik) override; private: - bool HR_fixed_done = false; const std::vector& isk; diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_exx_lcao.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_exx_lcao.cpp index 4e7b2b553f..106ad91cf6 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_exx_lcao.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_exx_lcao.cpp @@ -1,40 +1,54 @@ #ifdef __EXX #include "op_exx_lcao.h" -#include "module_base/blacs_connector.h" + +#include "source_base/blacs_connector.h" namespace hamilt { - RI::Cell_Nearest init_cell_nearest(const UnitCell& ucell, const std::array& Rs_period) +RI::Cell_Nearest init_cell_nearest(const UnitCell& ucell, const std::array& Rs_period) +{ + RI::Cell_Nearest cell_nearest; + std::map> atoms_pos; + for (int iat = 0; iat < ucell.nat; ++iat) { - RI::Cell_Nearest cell_nearest; - std::map> atoms_pos; - for (int iat = 0; iat < ucell.nat; ++iat) { - atoms_pos[iat] = RI_Util::Vector3_to_array3( - ucell.atoms[ucell.iat2it[iat]] - .tau[ucell.iat2ia[iat]]); - } - const std::array, 3> latvec - = { RI_Util::Vector3_to_array3(ucell.a1), - RI_Util::Vector3_to_array3(ucell.a2), - RI_Util::Vector3_to_array3(ucell.a3) }; - cell_nearest.init(atoms_pos, latvec, Rs_period); - return cell_nearest; + atoms_pos[iat] = RI_Util::Vector3_to_array3(ucell.atoms[ucell.iat2it[iat]].tau[ucell.iat2ia[iat]]); } + const std::array, 3> latvec = {RI_Util::Vector3_to_array3(ucell.a1), + RI_Util::Vector3_to_array3(ucell.a2), + RI_Util::Vector3_to_array3(ucell.a3)}; + cell_nearest.init(atoms_pos, latvec, Rs_period); + return cell_nearest; +} -template<> +template <> void OperatorEXX>::add_loaded_Hexx(const int ik) { - BlasConnector::axpy(this->hR->get_paraV()->get_local_size(), 1.0, this->Hexxd_k_load[ik].data(), 1, this->hsk->get_hk(), 1); + BlasConnector::axpy(this->hR->get_paraV()->get_local_size(), + 1.0, + this->Hexxd_k_load[ik].data(), + 1, + this->hsk->get_hk(), + 1); } -template<> +template <> void OperatorEXX, double>>::add_loaded_Hexx(const int ik) { - BlasConnector::axpy(this->hR->get_paraV()->get_local_size(), 1.0, this->Hexxc_k_load[ik].data(), 1, this->hsk->get_hk(), 1); + BlasConnector::axpy(this->hR->get_paraV()->get_local_size(), + 1.0, + this->Hexxc_k_load[ik].data(), + 1, + this->hsk->get_hk(), + 1); } -template<> +template <> void OperatorEXX, std::complex>>::add_loaded_Hexx(const int ik) { - BlasConnector::axpy(this->hR->get_paraV()->get_local_size(), 1.0, this->Hexxc_k_load[ik].data(), 1, this->hsk->get_hk(), 1); + BlasConnector::axpy(this->hR->get_paraV()->get_local_size(), + 1.0, + this->Hexxc_k_load[ik].data(), + 1, + this->hsk->get_hk(), + 1); } } // namespace hamilt diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.cpp index b108dfcbb6..7be52aa2c2 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.cpp @@ -1,21 +1,22 @@ #include "operator_lcao.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer_funcs.h" -#include "source_hsolver/hsolver_lcao.h" - #include "module_parameter/parameter.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" +#include "source_hsolver/hsolver_lcao.h" #ifdef __ELPA #include "source_hsolver/diago_elpa.h" #include "source_hsolver/diago_elpa_native.h" #endif -namespace hamilt { +namespace hamilt +{ template <> -void OperatorLCAO::get_hs_pointers() { +void OperatorLCAO::get_hs_pointers() +{ ModuleBase::timer::tick("OperatorLCAO", "get_hs_pointers"); this->hmatrix_k = this->hsk->get_hk(); if ((this->new_e_iteration && ik == 0) || PARAM.inp.out_mat_hs[0]) @@ -36,21 +37,21 @@ void OperatorLCAO::get_hs_pointers() { ModuleBase::timer::tick("OperatorLCAO", "get_hs_pointers"); } -template<> +template <> void OperatorLCAO, double>::get_hs_pointers() { this->hmatrix_k = this->hsk->get_hk(); this->smatrix_k = this->hsk->get_sk(); } -template<> +template <> void OperatorLCAO, std::complex>::get_hs_pointers() { this->hmatrix_k = this->hsk->get_hk(); this->smatrix_k = this->hsk->get_sk(); } -template +template void OperatorLCAO::refresh_h() { // Set the matrix 'H' to zero. @@ -58,47 +59,54 @@ void OperatorLCAO::refresh_h() } template -void OperatorLCAO::set_hr_done(bool hr_done_in) { +void OperatorLCAO::set_hr_done(bool hr_done_in) +{ this->hr_done = hr_done_in; } -template +template void OperatorLCAO::set_current_spin(const int current_spin_in) { this->current_spin = current_spin_in; - if(this->next_op != nullptr) + if (this->next_op != nullptr) { dynamic_cast*>(this->next_op)->set_current_spin(current_spin_in); } - if(this->next_sub_op != nullptr) + if (this->next_sub_op != nullptr) { dynamic_cast*>(this->next_sub_op)->set_current_spin(current_spin_in); } } template -void OperatorLCAO::init(const int ik_in) { +void OperatorLCAO::init(const int ik_in) +{ ModuleBase::TITLE("OperatorLCAO", "init"); ModuleBase::timer::tick("OperatorLCAO", "init"); - if (this->is_first_node) { + if (this->is_first_node) + { // refresh HK this->refresh_h(); - if (!this->hr_done) { + if (!this->hr_done) + { // refresh HR this->hR->set_zero(); } } - switch (this->cal_type) { + switch (this->cal_type) + { case calculation_type::lcao_overlap: { // cal_type=lcao_overlap refer to overlap matrix operators, which are // only rely on stucture, and not changed during SCF - if (!this->hr_done) { + if (!this->hr_done) + { // update SR first // in cal_type=lcao_overlap, SR should be updated by each sub-chain // nodes OperatorLCAO* last = this; - while (last != nullptr) { + while (last != nullptr) + { last->contributeHR(); last = dynamic_cast*>(last->next_sub_op); } @@ -115,11 +123,13 @@ void OperatorLCAO::init(const int ik_in) { // rely on stucture, and not changed during SCF // update HR first - if (!this->hr_done) { + if (!this->hr_done) + { // in cal_type=lcao_fixed, HR should be updated by each sub-chain // nodes OperatorLCAO* last = this; - while (last != nullptr) { + while (last != nullptr) + { last->contributeHR(); last = dynamic_cast*>(last->next_sub_op); } @@ -136,9 +146,11 @@ void OperatorLCAO::init(const int ik_in) { // on stucture and potential based on real space grids and should be // updated each SCF steps - if (!this->hr_done) { + if (!this->hr_done) + { OperatorLCAO* last = this; - while (last != nullptr) { + while (last != nullptr) + { // update HR first // in cal_type=lcao_gint, HR should be updated by every // sub-node. @@ -156,7 +168,8 @@ void OperatorLCAO::init(const int ik_in) { #ifdef __MLALGO case calculation_type::lcao_deepks: { // update HR first - if (!this->hr_done) { + if (!this->hr_done) + { // in cal_type=lcao_deepks, HR should be updated this->contributeHR(); } @@ -167,45 +180,44 @@ void OperatorLCAO::init(const int ik_in) { break; } #endif - case calculation_type::lcao_dftu: + case calculation_type::lcao_dftu: { + // only HK should be updated when cal_type=lcao_dftu + // in cal_type=lcao_dftu, HK only need to update from one node + if (!this->hr_done) { - //only HK should be updated when cal_type=lcao_dftu - //in cal_type=lcao_dftu, HK only need to update from one node - if(!this->hr_done) - { - //in cal_type=lcao_deepks, HR should be updated - this->contributeHR(); - } - break; + // in cal_type=lcao_deepks, HR should be updated + this->contributeHR(); } - case calculation_type::lcao_sc_lambda: + break; + } + case calculation_type::lcao_sc_lambda: { + // update HR first + this->contributeHR(); + // in cal_type=lcao_sc_mag, + // this->contributeHk(ik_in); + break; + } + case calculation_type::lcao_exx: { + // update HR first + if (!this->hr_done) { - //update HR first this->contributeHR(); - //in cal_type=lcao_sc_mag, - //this->contributeHk(ik_in); - break; } - case calculation_type::lcao_exx: - { - //update HR first - if (!this->hr_done) - { - this->contributeHR(); - } - //update HK next - //in cal_type=lcao_exx, HK only need to update from one node - // this->contributeHk(ik_in); + // update HK next + // in cal_type=lcao_exx, HK only need to update from one node + // this->contributeHk(ik_in); break; } case calculation_type::lcao_tddft_velocity: { - if (!this->hr_done) { + if (!this->hr_done) + { // in cal_type=lcao_fixed, HR should be updated by each sub-chain // nodes OperatorLCAO* last = this; - while (last != nullptr) { + while (last != nullptr) + { last->contributeHR(); last = dynamic_cast*>(last->next_sub_op); } @@ -219,17 +231,19 @@ void OperatorLCAO::init(const int ik_in) { break; } } - if (this->next_op - != nullptr) { // it is not the last node, loop next init() function + if (this->next_op != nullptr) + { // it is not the last node, loop next init() function // pass HR status to next node and than set HR status of this node to // done - if (!this->hr_done) { - dynamic_cast*>(this->next_op)->hr_done - = this->hr_done; + if (!this->hr_done) + { + dynamic_cast*>(this->next_op)->hr_done = this->hr_done; } // call init() function of next node this->next_op->init(ik_in); - } else { // it is the last node, update HK with the current total HR + } + else + { // it is the last node, update HK with the current total HR OperatorLCAO::contributeHk(ik_in); } @@ -241,10 +255,11 @@ void OperatorLCAO::init(const int ik_in) { // contributeHk() template -void OperatorLCAO::contributeHk(int ik) { +void OperatorLCAO::contributeHk(int ik) +{ ModuleBase::TITLE("OperatorLCAO", "contributeHk"); ModuleBase::timer::tick("OperatorLCAO", "contributeHk"); - if(ModuleBase::GlobalFunc::IS_COLUMN_MAJOR_KS_SOLVER(PARAM.inp.ks_solver)) + if (ModuleBase::GlobalFunc::IS_COLUMN_MAJOR_KS_SOLVER(PARAM.inp.ks_solver)) { const int nrow = this->hsk->get_pv()->get_row_size(); hamilt::folding_HR(*this->hR, this->hsk->get_hk(), this->kvec_d[ik], nrow, 1); diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.h b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.h index f9ad63c942..ee9d0c7686 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.h +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.h @@ -1,26 +1,28 @@ #ifndef OPERATORLCAO_H #define OPERATORLCAO_H -#include "module_base/vector3.h" #include "module_hamilt_general/matrixblock.h" #include "module_hamilt_general/operator.h" -#include "module_hamilt_lcao/module_hcontainer/hcontainer.h" #include "module_hamilt_lcao/hamilt_lcaodft/hs_matrix_k.hpp" +#include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "source_base/vector3.h" -namespace hamilt { +namespace hamilt +{ template -class OperatorLCAO : public Operator { +class OperatorLCAO : public Operator +{ public: - - OperatorLCAO( - HS_Matrix_K* hsk_in, - const std::vector>& kvec_d_in, //! k-point vectors - HContainer* hR_in) //! H(R) matrix, R is the Bravis lattice vector - : hsk(hsk_in), kvec_d(kvec_d_in), hR(hR_in){} + OperatorLCAO(HS_Matrix_K* hsk_in, + const std::vector>& kvec_d_in, //! k-point vectors + HContainer* hR_in) //! H(R) matrix, R is the Bravis lattice vector + : hsk(hsk_in), kvec_d(kvec_d_in), hR(hR_in) + { + } virtual ~OperatorLCAO() { - if (this->allocated_smatrix) + if (this->allocated_smatrix) { delete[] this->smatrix_k; } @@ -44,34 +46,33 @@ class OperatorLCAO : public Operator { /* Function contributeHR() is defined in derived class, for constructing * */ - virtual void contributeHR() { return; } + virtual void contributeHR() + { + return; + } /* Function matrixHk() is used for get information of HK matrix and SK matrix for diagolization. Gamma_only case (TK = double), SK would not changed during one SCF loop, a template triangle matrix SK_temp is used for accelerating. General case (TK = std::complex), only pointers of HK and SK saved in OperatorLCAO */ - void matrixHk(MatrixBlock& hk_in, MatrixBlock& sk_in) + void matrixHk(MatrixBlock& hk_in, MatrixBlock& sk_in) { this->get_hs_pointers(); #ifdef __MPI hk_in = MatrixBlock{hmatrix_k, - (size_t)this->hsk->get_pv()->nrow, - (size_t)this->hsk->get_pv()->ncol, - this->hsk->get_pv()->desc}; + (size_t)this->hsk->get_pv()->nrow, + (size_t)this->hsk->get_pv()->ncol, + this->hsk->get_pv()->desc}; sk_in = MatrixBlock{smatrix_k, - (size_t)this->hsk->get_pv()->nrow, - (size_t)this->hsk->get_pv()->ncol, - this->hsk->get_pv()->desc}; + (size_t)this->hsk->get_pv()->nrow, + (size_t)this->hsk->get_pv()->ncol, + this->hsk->get_pv()->desc}; #else - hk_in = MatrixBlock{hmatrix_k, - (size_t)this->hsk->get_pv()->nrow, - (size_t)this->hsk->get_pv()->ncol, - nullptr}; - - sk_in = MatrixBlock{smatrix_k, - (size_t)this->hsk->get_pv()->nrow, - (size_t)this->hsk->get_pv()->ncol, - nullptr}; + hk_in + = MatrixBlock{hmatrix_k, (size_t)this->hsk->get_pv()->nrow, (size_t)this->hsk->get_pv()->ncol, nullptr}; + + sk_in + = MatrixBlock{smatrix_k, (size_t)this->hsk->get_pv()->nrow, (size_t)this->hsk->get_pv()->ncol, nullptr}; #endif } @@ -85,7 +86,10 @@ class OperatorLCAO : public Operator { * in sub-chain table not used in base class, only be override in fixed * Hamiltonian Operators (e.g. Ekinetic and Nonlocal) */ - virtual void set_HR_fixed(void*) { return; } + virtual void set_HR_fixed(void*) + { + return; + } /** * @brief reset the status of 'hr_done' (if H(R) is calculated) @@ -117,11 +121,10 @@ class OperatorLCAO : public Operator { bool hr_done = false; private: - void get_hs_pointers(); //! there are H and S matrix for each k point in reciprocal space - //! 'double' type for gamma_only case, + //! 'double' type for gamma_only case, //! 'complex' type for multi k-points case TK* hmatrix_k = nullptr; TK* smatrix_k = nullptr; diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/overlap_new.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/overlap_new.cpp index b7654aac65..105fe25e38 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/overlap_new.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/overlap_new.cpp @@ -1,11 +1,12 @@ #include "overlap_new.h" -#include "module_parameter/parameter.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer_funcs.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" + #include template @@ -41,8 +42,8 @@ void hamilt::OverlapNew>::initialize_SR(const Grid_ for (int iat1 = 0; iat1 < ucell->nat; iat1++) { auto tau1 = ucell->get_tau(iat1); - int T1=0; - int I1=0; + int T1 = 0; + int I1 = 0; ucell->iat2iait(iat1, &I1, &T1); AdjacentAtomInfo adjs; GridD->Find_atom(*ucell, tau1, T1, I1, &adjs); @@ -117,11 +118,11 @@ void hamilt::OverlapNew>::cal_SR_IJR(const int& iat // --------------------------------------------- // get info of orbitals of atom1 and atom2 from ucell // --------------------------------------------- - int T1=0; - int I1=0; + int T1 = 0; + int I1 = 0; this->ucell->iat2iait(iat1, &I1, &T1); - int T2=0; - int I2=0; + int T2 = 0; + int I2 = 0; this->ucell->iat2iait(iat2, &I2, &T2); Atom& atom1 = this->ucell->atoms[T1]; Atom& atom2 = this->ucell->atoms[T2]; @@ -198,7 +199,7 @@ void hamilt::OverlapNew>::contributeHk(int ik) } ModuleBase::TITLE("OverlapNew", "contributeHk"); ModuleBase::timer::tick("OverlapNew", "contributeHk"); - + //! set SK to zero and then calculate SK for each k vector this->hsk->set_zero_sk(); if (ModuleBase::GlobalFunc::IS_COLUMN_MAJOR_KS_SOLVER(PARAM.inp.ks_solver)) @@ -211,7 +212,7 @@ void hamilt::OverlapNew>::contributeHk(int ik) const int ncol = this->SR->get_atom_pair(0).get_paraV()->get_col_size(); hamilt::folding_HR(*this->SR, this->hsk->get_sk(), this->kvec_d[ik], ncol, 0); } - + // update kvec_d_old this->kvec_d_old = this->kvec_d[ik]; diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/td_ekinetic_lcao.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/td_ekinetic_lcao.cpp index 38246abadb..8ee2e59aed 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/td_ekinetic_lcao.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/td_ekinetic_lcao.cpp @@ -1,16 +1,16 @@ #include "td_ekinetic_lcao.h" -#include "module_parameter/parameter.h" -#include "module_base/global_variable.h" -#include "module_base/libm/libm.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_elecstate/module_pot/H_TDDFT_pw.h" #include "module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb11.h" #include "module_hamilt_lcao/hamilt_lcaodft/spar_hsr.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer_funcs.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/global_variable.h" +#include "source_base/libm/libm.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" namespace hamilt { @@ -44,7 +44,7 @@ TDEkinetic>::~TDEkinetic() // term A^2*S template -void TDEkinetic>::td_ekinetic_scalar(std::complex* Hloc,const TR& overlap, int nnr) +void TDEkinetic>::td_ekinetic_scalar(std::complex* Hloc, const TR& overlap, int nnr) { return; } @@ -69,7 +69,7 @@ void TDEkinetic>::td_ekinetic_grad(std::complex* Hl { // the correction term -iA dot ∇r //∇ refer to the integral ∫𝜙(𝑟)𝜕/𝜕𝑟𝜙(𝑟−𝑅)𝑑𝑟,but abacus only provide the integral of ∫𝜙(𝑟)𝜕/𝜕R𝜙(𝑟−𝑅)𝑑𝑟. An extra - //minus must be counted in. The final term is iA dot ∇R. From Hatree to Ry, it needs to be multiplied by 2.0 + // minus must be counted in. The final term is iA dot ∇R. From Hatree to Ry, it needs to be multiplied by 2.0 std::complex tmp = {0, grad_overlap * cart_At}; Hloc[nnr] += tmp * 2.0; return; @@ -111,7 +111,8 @@ void TDEkinetic>::calculate_HR() std::complex* tmp_c[3] = {nullptr, nullptr, nullptr}; for (int i = 0; i < 3; i++) { - tmp_c[i] = td_velocity.get_current_term_pointer(i)->find_matrix(iat1, iat2, R_index2)->get_pointer(); + tmp_c[i] + = td_velocity.get_current_term_pointer(i)->find_matrix(iat1, iat2, R_index2)->get_pointer(); } this->cal_HR_IJR(iat1, iat2, paraV, dtau, tmp->get_pointer(), tmp_c); } @@ -140,11 +141,11 @@ void TDEkinetic>::cal_HR_IJR(const int& iat1, // --------------------------------------------- // get info of orbitals of atom1 and atom2 from ucell // --------------------------------------------- - int T1=0; - int I1=0; + int T1 = 0; + int I1 = 0; this->ucell->iat2iait(iat1, &I1, &T1); - int T2=0; - int I2=0; + int T2 = 0; + int I2 = 0; this->ucell->iat2iait(iat2, &I2, &T2); Atom& atom1 = this->ucell->atoms[T1]; Atom& atom2 = this->ucell->atoms[T2]; @@ -226,11 +227,11 @@ void TDEkinetic>::cal_HR_IJR(const int& iat1, hr_mat_p += (npol - 1) * col_indexes.size(); if (current_mat_p != nullptr) { - for (int dir = 0; dir < 3; dir++) - { - current_mat_p[dir] += (npol - 1) * col_indexes.size(); - } - } + for (int dir = 0; dir < 3; dir++) + { + current_mat_p[dir] += (npol - 1) * col_indexes.size(); + } + } } } // init two center integrals and vector potential for td_ekintic term @@ -264,7 +265,7 @@ void TDEkinetic>::initialize_HR(const Grid_Driver* GridD) ModuleBase::TITLE("TDEkinetic", "initialize_HR"); ModuleBase::timer::tick("TDEkinetic", "initialize_HR"); - auto* paraV = this->hR->get_paraV();// get parallel orbitals from HR + auto* paraV = this->hR->get_paraV(); // get parallel orbitals from HR // TODO: if paraV is nullptr, AtomPair can not use paraV for constructor, I will repair it in the future. this->adjs_all.clear(); @@ -312,7 +313,7 @@ void TDEkinetic>::initialize_HR_tmp() ModuleBase::TITLE("TDEkinetic", "initialize_HR_tmp"); ModuleBase::timer::tick("TDEkinetic", "initialize_HR_tmp"); - auto* paraV = this->hR->get_paraV();// get parallel orbitals from HR + auto* paraV = this->hR->get_paraV(); // get parallel orbitals from HR // TODO: if paraV is nullptr, AtomPair can not use paraV for constructor, I will repair it in the future. for (int i = 0; i < this->hR->size_atom_pairs(); ++i) { @@ -395,7 +396,6 @@ void TDEkinetic, double>>::contributeHk(int ik if (spin_tot == 4) { - } else if (!output_hR_done && TD_Velocity::out_mat_R) { diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/td_ekinetic_lcao.h b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/td_ekinetic_lcao.h index 7f5881ac1f..d480f4b078 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/td_ekinetic_lcao.h +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/td_ekinetic_lcao.h @@ -1,14 +1,14 @@ #ifndef TDEKINETIC_H #define TDEKINETIC_H -#include "module_base/timer.h" #include "module_basis/module_nao/two_center_integrator.h" #include "module_cell/klist.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" #include "module_hamilt_lcao/module_tddft/td_velocity.h" #include "operator_lcao.h" -#include +#include "source_base/timer.h" +#include namespace hamilt { @@ -32,7 +32,7 @@ class TDEkinetic : public T /// - TR: data type of real space Hamiltonian template -class TDEkinetic> : public OperatorLCAO +class TDEkinetic> : public OperatorLCAO { public: TDEkinetic>(HS_Matrix_K* hsk_in, @@ -61,7 +61,7 @@ class TDEkinetic> : public OperatorLCAO /** * @brief initialize HR_tmp * Allocate the memory for HR_tmp with the same size as HR - */ + */ void initialize_HR_tmp(); /** @@ -86,11 +86,10 @@ class TDEkinetic> : public OperatorLCAO TD_Velocity td_velocity; private: - const UnitCell* ucell = nullptr; std::vector orb_cutoff_; - + HContainer* SR = nullptr; /// @brief Store real space hamiltonian. TD term should include imaginary part, diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/td_nonlocal_lcao.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/td_nonlocal_lcao.cpp index d833c5c358..e1f2f4e4af 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/td_nonlocal_lcao.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/td_nonlocal_lcao.cpp @@ -1,16 +1,16 @@ #include "td_nonlocal_lcao.h" -#include "module_parameter/parameter.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer_funcs.h" #include "module_hamilt_lcao/module_tddft/snap_psibeta_half_tddft.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" #ifdef _OPENMP -#include #include +#include #endif template @@ -146,9 +146,9 @@ void hamilt::TDNonlocal>::calculate_HR() nlm_tot[i].resize(nlm_dim); } - #pragma omp parallel +#pragma omp parallel { - #pragma omp for schedule(dynamic) +#pragma omp for schedule(dynamic) for (int ad = 0; ad < adjs.adj_num + 1; ++ad) { const int T1 = adjs.ntype[ad]; @@ -206,7 +206,7 @@ void hamilt::TDNonlocal>::calculate_HR() const int thread_id = omp_get_thread_num(); std::set ad_atom_set_thread; int i = 0; - for(const auto iat1 : ad_atom_set) + for (const auto iat1: ad_atom_set) { if (i % num_threads == thread_id) { @@ -229,7 +229,7 @@ void hamilt::TDNonlocal>::calculate_HR() continue; } #endif - + const ModuleBase::Vector3& R_index1 = adjs.box[ad1]; for (int ad2 = 0; ad2 < adjs.adj_num + 1; ++ad2) { @@ -251,8 +251,8 @@ void hamilt::TDNonlocal>::calculate_HR() for (int i = 0; i < 3; i++) { tmp_c[i] = TD_Velocity::td_vel_op->get_current_term_pointer(i) - ->find_matrix(iat1, iat2, R_vector[0], R_vector[1], R_vector[2]) - ->get_pointer(); + ->find_matrix(iat1, iat2, R_vector[0], R_vector[1], R_vector[2]) + ->get_pointer(); } this->cal_HR_IJR(iat1, iat2, @@ -397,7 +397,6 @@ void hamilt::TDNonlocal>::set_HR_fixed(void* hR_tmp this->allocated = false; } - // contributeHR() template void hamilt::TDNonlocal>::contributeHR() @@ -435,14 +434,12 @@ void hamilt::TDNonlocal>::contributeHR() return; } - template void hamilt::TDNonlocal>::contributeHk(int ik) { return; } - template <> void hamilt::TDNonlocal, double>>::contributeHk(int ik) { diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/veff_lcao.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/veff_lcao.cpp index 41fb87f222..88e2eef182 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/veff_lcao.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/veff_lcao.cpp @@ -1,14 +1,14 @@ #include "veff_lcao.h" -#include "module_base/timer.h" -#include "module_parameter/parameter.h" -#include "module_base/tool_title.h" -#include "module_hamilt_general/module_xc/xc_functional.h" + #include "module_cell/unitcell.h" +#include "module_hamilt_general/module_xc/xc_functional.h" #include "module_hamilt_lcao/module_gint/temp_gint/gint_interface.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" namespace hamilt { - // initialize_HR() template void Veff>::initialize_HR(const UnitCell* ucell_in, const Grid_Driver* GridD) @@ -17,7 +17,7 @@ void Veff>::initialize_HR(const UnitCell* ucell_in, const G ModuleBase::timer::tick("Veff", "initialize_HR"); this->nspin = PARAM.inp.nspin; - auto* paraV = this->hR->get_paraV();// get parallel orbitals from HR + auto* paraV = this->hR->get_paraV(); // get parallel orbitals from HR // TODO: if paraV is nullptr, AtomPair can not use paraV for constructor, I will repair it in the future. for (int iat1 = 0; iat1 < ucell_in->nat; iat1++) @@ -39,11 +39,10 @@ void Veff>::initialize_HR(const UnitCell* ucell_in, const G } const ModuleBase::Vector3& R_index2 = adjs.box[ad1]; // choose the real adjacent atoms - // Note: the distance of atoms should less than the cutoff radius, - // When equal, the theoretical value of matrix element is zero, + // Note: the distance of atoms should less than the cutoff radius, + // When equal, the theoretical value of matrix element is zero, // but the calculated value is not zero due to the numerical error, which would lead to result changes. - if (ucell_in->cal_dtau(iat1, iat2, R_index2).norm() * ucell_in->lat0 - < orb_cutoff_[T1] + orb_cutoff_[T2]) + if (ucell_in->cal_dtau(iat1, iat2, R_index2).norm() * ucell_in->lat0 < orb_cutoff_[T1] + orb_cutoff_[T2]) { hamilt::AtomPair tmp(iat1, iat2, R_index2, paraV); this->hR->insert_pair(tmp); @@ -56,7 +55,7 @@ void Veff>::initialize_HR(const UnitCell* ucell_in, const G ModuleBase::timer::tick("Veff", "initialize_HR"); } -template<> +template <> void Veff>::contributeHR() { ModuleBase::TITLE("Veff", "contributeHR"); @@ -69,20 +68,20 @@ void Veff>::contributeHR() double* vofk_eff1 = this->pot->get_effective_vofk(this->current_spin); #ifndef __NEW_GINT - if(XC_Functional::get_ked_flag()) + if (XC_Functional::get_ked_flag()) { Gint_inout inout(vr_eff1, vofk_eff1, Gint_Tools::job_type::vlocal_meta); - this->GG->cal_vlocal(&inout, this->new_e_iteration); + this->GG->cal_vlocal(&inout, this->new_e_iteration); } else { Gint_inout inout(vr_eff1, Gint_Tools::job_type::vlocal); - this->GG->cal_vlocal(&inout, this->new_e_iteration); + this->GG->cal_vlocal(&inout, this->new_e_iteration); } - this->GG->transfer_pvpR(this->hR,this->ucell); + this->GG->transfer_pvpR(this->hR, this->ucell); this->new_e_iteration = false; #else - if(XC_Functional::get_ked_flag()) + if (XC_Functional::get_ked_flag()) { ModuleGint::cal_gint_vl_metagga(vr_eff1, vofk_eff1, this->hR); } @@ -92,8 +91,8 @@ void Veff>::contributeHR() } #endif - if(this->nspin == 2) - { + if (this->nspin == 2) + { this->current_spin = 1 - this->current_spin; } @@ -101,7 +100,7 @@ void Veff>::contributeHR() return; } -template<> +template <> void Veff, double>>::contributeHR() { ModuleBase::TITLE("Veff", "contributeHR"); @@ -116,7 +115,7 @@ void Veff, double>>::contributeHR() #ifndef __NEW_GINT // if you change the place of the following code, // rememeber to delete the #include - if(XC_Functional::get_ked_flag()) + if (XC_Functional::get_ked_flag()) { Gint_inout inout(vr_eff1, vofk_eff1, 0, Gint_Tools::job_type::vlocal_meta); this->GK->cal_gint(&inout); @@ -128,9 +127,9 @@ void Veff, double>>::contributeHR() this->GK->cal_gint(&inout); } - this->GK->transfer_pvpR(this->hR,this->ucell,this->gd); + this->GK->transfer_pvpR(this->hR, this->ucell, this->gd); #else - if(XC_Functional::get_ked_flag()) + if (XC_Functional::get_ked_flag()) { ModuleGint::cal_gint_vl_metagga(vr_eff1, vofk_eff1, this->hR); } @@ -140,8 +139,8 @@ void Veff, double>>::contributeHR() } #endif - if(this->nspin == 2) - { + if (this->nspin == 2) + { this->current_spin = 1 - this->current_spin; } @@ -149,7 +148,7 @@ void Veff, double>>::contributeHR() return; } -template<> +template <> void Veff, std::complex>>::contributeHR() { ModuleBase::TITLE("Veff", "contributeHR"); @@ -161,12 +160,12 @@ void Veff, std::complex>>::contributeH for (int is = 0; is < 4; is++) { vr_eff1 = this->pot->get_effective_v(is); - if(XC_Functional::get_ked_flag()) + if (XC_Functional::get_ked_flag()) { vofk_eff1 = this->pot->get_effective_vofk(is); } - - if(XC_Functional::get_ked_flag()) + + if (XC_Functional::get_ked_flag()) { Gint_inout inout(vr_eff1, vofk_eff1, is, Gint_Tools::job_type::vlocal_meta); this->GK->cal_gint(&inout); @@ -177,24 +176,24 @@ void Veff, std::complex>>::contributeH this->GK->cal_gint(&inout); } } - this->GK->transfer_pvpR(this->hR,this->ucell,this->gd); + this->GK->transfer_pvpR(this->hR, this->ucell, this->gd); #else std::vector vr_eff(4, nullptr); std::vector vofk_eff(4, nullptr); for (int is = 0; is < 4; is++) { vr_eff[is] = this->pot->get_effective_v(is); - if(XC_Functional::get_ked_flag()) + if (XC_Functional::get_ked_flag()) { vofk_eff[is] = this->pot->get_effective_vofk(is); - if(is == 3) + if (is == 3) { ModuleGint::cal_gint_vl_metagga(vr_eff, vofk_eff, this->hR); } } else { - if(is == 3) + if (is == 3) { ModuleGint::cal_gint_vl(vr_eff, this->hR); } @@ -206,10 +205,10 @@ void Veff, std::complex>>::contributeH return; } -// definition of class template should in the end of file to avoid compiling warning +// definition of class template should in the end of file to avoid compiling warning template class Veff>; template class Veff, double>>; template class Veff, std::complex>>; -} \ No newline at end of file +} // namespace hamilt \ No newline at end of file diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/veff_lcao.h b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/veff_lcao.h index 23b1ec5c57..e292f3802b 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/veff_lcao.h +++ b/source/module_hamilt_lcao/hamilt_lcaodft/operator_lcao/veff_lcao.h @@ -1,12 +1,13 @@ #ifndef VEFFLCAO_H #define VEFFLCAO_H -#include "module_base/timer.h" +#include "module_cell/module_neighbor/sltk_grid_driver.h" +#include "module_cell/unitcell.h" #include "module_elecstate/module_pot/potential_new.h" #include "module_hamilt_lcao/module_gint/gint_gamma.h" #include "module_hamilt_lcao/module_gint/gint_k.h" #include "operator_lcao.h" -#include "module_cell/module_neighbor/sltk_grid_driver.h" -#include "module_cell/unitcell.h" +#include "source_base/timer.h" + #include namespace hamilt @@ -25,8 +26,8 @@ class Veff : public T /// @brief Effective potential class, used for calculating Hamiltonian with grid integration tools /// If user want to separate the contribution of V_{eff} into V_{H} and V_{XC} and V_{local pseudopotential} and so on, /// the user can separate the Potential class into different parts, and construct different Veff class for each part. -/// @tparam TK -/// @tparam TR +/// @tparam TK +/// @tparam TR template class Veff> : public OperatorLCAO { @@ -34,7 +35,7 @@ class Veff> : public OperatorLCAO /** * @brief Construct a new Veff object for multi-kpoint calculation * @param GK_in: the pointer of Gint_k object, used for grid integration - */ + */ Veff>(Gint_k* GK_in, HS_Matrix_K* hsk_in, const std::vector>& kvec_d_in, @@ -55,7 +56,7 @@ class Veff> : public OperatorLCAO /** * @brief Construct a new Veff object for Gamma-only calculation * @param GG_in: the pointer of Gint_Gamma object, used for grid integration - */ + */ Veff>(Gint_Gamma* GG_in, HS_Matrix_K* hsk_in, const std::vector>& kvec_d_in, @@ -78,35 +79,35 @@ class Veff> : public OperatorLCAO /** * @brief contributeHR() is used to calculate the HR matrix * - * the contribution of V_{eff} is calculated by the contribution of V_{H} and V_{XC} and V_{local pseudopotential} and so on. - * grid integration is used to calculate the contribution Hamiltonian of effective potential + * the contribution of V_{eff} is calculated by the contribution of V_{H} and V_{XC} and V_{local pseudopotential} + * and so on. grid integration is used to calculate the contribution Hamiltonian of effective potential */ virtual void contributeHR() override; - - const UnitCell* ucell; - const Grid_Driver* gd; -private: - // used for k-dependent grid integration. - Gint_k* GK = nullptr; + const UnitCell* ucell; + const Grid_Driver* gd; + + private: + // used for k-dependent grid integration. + Gint_k* GK = nullptr; - // used for gamma only algorithms. - Gint_Gamma* GG = nullptr; + // used for gamma only algorithms. + Gint_Gamma* GG = nullptr; - std::vector orb_cutoff_; + std::vector orb_cutoff_; - // Charge calculating method in LCAO base and contained grid base calculation: DM_R, DM, pvpR_reduced + // Charge calculating method in LCAO base and contained grid base calculation: DM_R, DM, pvpR_reduced - elecstate::Potential* pot = nullptr; + elecstate::Potential* pot = nullptr; - int nspin = 1; + int nspin = 1; - /** - * @brief initialize HR, search the nearest neighbor atoms - * HContainer is used to store the electronic kinetic matrix with specific atom-pairs - * the size of HR will be fixed after initialization - */ - void initialize_HR(const UnitCell* ucell_in, const Grid_Driver* GridD_in); + /** + * @brief initialize HR, search the nearest neighbor atoms + * HContainer is used to store the electronic kinetic matrix with specific atom-pairs + * the size of HR will be fixed after initialization + */ + void initialize_HR(const UnitCell* ucell_in, const Grid_Driver* GridD_in); }; } // namespace hamilt diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/pulay_force_stress_center2_template.hpp b/source/module_hamilt_lcao/hamilt_lcaodft/pulay_force_stress_center2_template.hpp index e0eedffaad..01d2e6d352 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/pulay_force_stress_center2_template.hpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/pulay_force_stress_center2_template.hpp @@ -1,128 +1,157 @@ #pragma once -#include "pulay_force_stress.h" -#include "module_base/timer.h" #include "module_parameter/parameter.h" +#include "pulay_force_stress.h" +#include "source_base/timer.h" namespace PulayForceStress { - // common kernel - template - inline void cal_pulay_fs( - ModuleBase::matrix& f, - ModuleBase::matrix& s, - const elecstate::DensityMatrix& dm, - const UnitCell& ucell, - const Parallel_Orbitals& pv, - const double** dHSx, - const double** dHSxy, - const double* dtau, - const bool& isforce, - const bool& isstress, - Record_adj* ra, - const double& factor_force, - const double& factor_stress, - Tfunc& stress_func) - { - ModuleBase::TITLE("Force_LCAO", "cal_pulay_fs_center2"); - ModuleBase::timer::tick("Force_LCAO", "cal_pulay_fs_center2"); +// common kernel +template +inline void cal_pulay_fs(ModuleBase::matrix& f, + ModuleBase::matrix& s, + const elecstate::DensityMatrix& dm, + const UnitCell& ucell, + const Parallel_Orbitals& pv, + const double** dHSx, + const double** dHSxy, + const double* dtau, + const bool& isforce, + const bool& isstress, + Record_adj* ra, + const double& factor_force, + const double& factor_stress, + Tfunc& stress_func) +{ + ModuleBase::TITLE("Force_LCAO", "cal_pulay_fs_center2"); + ModuleBase::timer::tick("Force_LCAO", "cal_pulay_fs_center2"); - const int nspin_DMR = (PARAM.inp.nspin == 2) ? 2 : 1; - int total_irr = 0; + const int nspin_DMR = (PARAM.inp.nspin == 2) ? 2 : 1; + int total_irr = 0; #ifdef _OPENMP #pragma omp parallel - { - int num_threads = omp_get_num_threads(); - ModuleBase::matrix local_s(3, 3); - int local_total_irr = 0; + { + int num_threads = omp_get_num_threads(); + ModuleBase::matrix local_s(3, 3); + int local_total_irr = 0; #else - ModuleBase::matrix& local_s = s; - int& local_total_irr = total_irr; + ModuleBase::matrix& local_s = s; + int& local_total_irr = total_irr; #endif #ifdef _OPENMP #pragma omp for schedule(dynamic) #endif - for (int iat = 0; iat < ucell.nat; iat++) + for (int iat = 0; iat < ucell.nat; iat++) + { + const int T1 = ucell.iat2it[iat]; + Atom* atom1 = &ucell.atoms[T1]; + const int I1 = ucell.iat2ia[iat]; + // get iat1 + int iat1 = ucell.itia2iat(T1, I1); + double* f_iat; + if (isforce) { - const int T1 = ucell.iat2it[iat]; - Atom* atom1 = &ucell.atoms[T1]; - const int I1 = ucell.iat2ia[iat]; - // get iat1 - int iat1 = ucell.itia2iat(T1, I1); - double* f_iat; - if (isforce) { f_iat = &f(iat, 0); } + f_iat = &f(iat, 0); + } #ifdef _OPENMP - // using local stack to avoid false sharing in multi-threaded case - double f_tmp[3] = { 0.0, 0.0, 0.0 }; - if (num_threads > 1) { f_iat = f_tmp; } + // using local stack to avoid false sharing in multi-threaded case + double f_tmp[3] = {0.0, 0.0, 0.0}; + if (num_threads > 1) + { + f_iat = f_tmp; + } #endif - int irr = pv.nlocstart[iat]; - const int start1 = ucell.itiaiw2iwt(T1, I1, 0); - for (int cb = 0; cb < ra->na_each[iat]; ++cb) + int irr = pv.nlocstart[iat]; + const int start1 = ucell.itiaiw2iwt(T1, I1, 0); + for (int cb = 0; cb < ra->na_each[iat]; ++cb) + { + const int T2 = ra->info[iat][cb][3]; + const int I2 = ra->info[iat][cb][4]; + const int start2 = ucell.itiaiw2iwt(T2, I2, 0); + Atom* atom2 = &ucell.atoms[T2]; + // get iat2 + int iat2 = ucell.itia2iat(T2, I2); + double Rx = ra->info[iat][cb][0]; + double Ry = ra->info[iat][cb][1]; + double Rz = ra->info[iat][cb][2]; + // get BaseMatrix + if (pv.get_row_size(iat1) <= 0 || pv.get_col_size(iat2) <= 0) { - const int T2 = ra->info[iat][cb][3]; - const int I2 = ra->info[iat][cb][4]; - const int start2 = ucell.itiaiw2iwt(T2, I2, 0); - Atom* atom2 = &ucell.atoms[T2]; - // get iat2 - int iat2 = ucell.itia2iat(T2, I2); - double Rx = ra->info[iat][cb][0]; - double Ry = ra->info[iat][cb][1]; - double Rz = ra->info[iat][cb][2]; - // get BaseMatrix - if (pv.get_row_size(iat1) <= 0 || pv.get_col_size(iat2) <= 0) { continue; } - std::vector*> tmp_matrix; - for (int is = 0; is < nspin_DMR; ++is) - { - tmp_matrix.push_back(dm.get_DMR_pointer(is + 1)->find_matrix(iat1, iat2, Rx, Ry, Rz)); - } - for (int mu = 0; mu < pv.get_row_size(iat1); ++mu) + continue; + } + std::vector*> tmp_matrix; + for (int is = 0; is < nspin_DMR; ++is) + { + tmp_matrix.push_back(dm.get_DMR_pointer(is + 1)->find_matrix(iat1, iat2, Rx, Ry, Rz)); + } + for (int mu = 0; mu < pv.get_row_size(iat1); ++mu) + { + for (int nu = 0; nu < pv.get_col_size(iat2); ++nu) { - for (int nu = 0; nu < pv.get_col_size(iat2); ++nu) + // the DMR should not be summed over spin, do the summation here + double dm2d1 = 0.0; + for (int is = 0; is < nspin_DMR; ++is) { - // the DMR should not be summed over spin, do the summation here - double dm2d1 = 0.0; - for (int is = 0; is < nspin_DMR; ++is) { dm2d1 += tmp_matrix[is]->get_value(mu, nu); } - double dm2d2 = 2.0 * dm2d1; - if (isforce) - { - const double dm2d2_f = dm2d2 * factor_force; - for (int i = 0; i < 3; ++i) { f_iat[i] += dm2d2_f * dHSx[i][irr]; } - } - if (isstress) + dm2d1 += tmp_matrix[is]->get_value(mu, nu); + } + double dm2d2 = 2.0 * dm2d1; + if (isforce) + { + const double dm2d2_f = dm2d2 * factor_force; + for (int i = 0; i < 3; ++i) { - const double dm2d1_s = dm2d1 * factor_stress; - stress_func(local_s, dm2d1_s, dHSx, dHSxy, dtau, irr); + f_iat[i] += dm2d2_f * dHSx[i][irr]; } - ++local_total_irr; - ++irr; } + if (isstress) + { + const double dm2d1_s = dm2d1 * factor_stress; + stress_func(local_s, dm2d1_s, dHSx, dHSxy, dtau, irr); + } + ++local_total_irr; + ++irr; } } + } #ifdef _OPENMP - if (isforce && num_threads > 1) { for (int i = 0; i < 3; ++i) { f(iat, i) += f_iat[i]; } } + if (isforce && num_threads > 1) + { + for (int i = 0; i < 3; ++i) + { + f(iat, i) += f_iat[i]; + } + } #endif - } // end iat + } // end iat #ifdef _OPENMP #pragma omp critical(cal_foverlap_k_reduce) + { + total_irr += local_total_irr; + if (isstress) { - total_irr += local_total_irr; - if (isstress) + for (int i = 0; i < 3; ++i) { - for (int i = 0; i < 3; ++i) { for (int j = i; j < 3; ++j) { s(i, j) += local_s(i, j); } } + for (int j = i; j < 3; ++j) + { + s(i, j) += local_s(i, j); + } } } } + } #endif - if (total_irr != pv.nnr) - { - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "wrong irr", total_irr); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "wrong pv.nnr", pv.nnr); - ModuleBase::WARNING_QUIT("Force_LCAO::cal_pulay_fs_center2", "irr!=pv.nnr"); - } - - if (isstress) { StressTools::stress_fill(ucell.lat0, ucell.omega, s); } + if (total_irr != pv.nnr) + { + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "wrong irr", total_irr); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "wrong pv.nnr", pv.nnr); + ModuleBase::WARNING_QUIT("Force_LCAO::cal_pulay_fs_center2", "irr!=pv.nnr"); + } - ModuleBase::timer::tick("Force_LCAO", "cal_pulay_fs_center2"); + if (isstress) + { + StressTools::stress_fill(ucell.lat0, ucell.omega, s); } + + ModuleBase::timer::tick("Force_LCAO", "cal_pulay_fs_center2"); } +} // namespace PulayForceStress diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/record_adj.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/record_adj.cpp index bd0a9bcfb7..c546e70b61 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/record_adj.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/record_adj.cpp @@ -1,9 +1,9 @@ #include "record_adj.h" -#include "module_base/timer.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" Record_adj::Record_adj() { } @@ -165,10 +165,10 @@ void Record_adj::for_2d(const UnitCell& ucell, } } } // end is_adj - } // end ad + } // end ad ++iat; } // end I1 - } // end T1 + } // end T1 } // xiaohui add "OUT_LEVEL", 2015-09-16 if (PARAM.inp.out_level != "m" && !gamma_only) @@ -274,7 +274,7 @@ void Record_adj::for_2d(const UnitCell& ucell, } // end ad // GlobalV::ofs_running << " nadj = " << cb << std::endl; } // end I1 - } // end T1 + } // end T1 #ifdef _OPENMP } #endif @@ -393,10 +393,10 @@ void Record_adj::for_grid(const UnitCell& ucell, ++na_each[ca]; } } // end judge 2 - } // end ad - } // end judge 1 - } // end I1 - } // end T1 + } // end ad + } // end judge 1 + } // end I1 + } // end T1 #ifdef _OPENMP #pragma omp for schedule(dynamic) diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/spar_u.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/spar_u.cpp index 4515ea185c..2ad8dffca3 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/spar_u.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/spar_u.cpp @@ -1,32 +1,33 @@ #include "spar_u.h" -#include "module_base/parallel_reduce.h" -#include "module_parameter/parameter.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/timer.h" + #include "module_hamilt_lcao/module_dftu/dftu.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" void sparse_format::cal_HR_dftu( - const Parallel_Orbitals &pv, - std::set> &all_R_coor, - std::map, std::map>> &SR_sparse, - std::map, std::map>> *HR_sparse, - const int ¤t_spin, - const double &sparse_thr) + const Parallel_Orbitals& pv, + std::set>& all_R_coor, + std::map, std::map>>& SR_sparse, + std::map, std::map>>* HR_sparse, + const int& current_spin, + const double& sparse_thr) { - ModuleBase::TITLE("sparse_format","cal_HR_dftu"); - ModuleBase::timer::tick("sparse_format","cal_HR_dftu"); + ModuleBase::TITLE("sparse_format", "cal_HR_dftu"); + ModuleBase::timer::tick("sparse_format", "cal_HR_dftu"); int total_R_num = all_R_coor.size(); - int *nonzero_num = new int[total_R_num](); + int* nonzero_num = new int[total_R_num](); ModuleBase::GlobalFunc::ZEROS(nonzero_num, total_R_num); int count = 0; - for (auto &R_coor : all_R_coor) + for (auto& R_coor: all_R_coor) { auto iter = SR_sparse.find(R_coor); if (iter != SR_sparse.end()) { - for (auto &row_loop : iter->second) + for (auto& row_loop: iter->second) { nonzero_num[count] += row_loop.second.size(); } @@ -36,16 +37,16 @@ void sparse_format::cal_HR_dftu( Parallel_Reduce::reduce_all(nonzero_num, total_R_num); - double *HR_tmp = new double[pv.nloc]; - double *SR_tmp = new double[pv.nloc]; + double* HR_tmp = new double[pv.nloc]; + double* SR_tmp = new double[pv.nloc]; - int ir=0; - int ic=0; - int iic=0; - auto &temp_HR_sparse = HR_sparse[current_spin]; + int ir = 0; + int ic = 0; + int iic = 0; + auto& temp_HR_sparse = HR_sparse[current_spin]; count = 0; - for (auto &R_coor : all_R_coor) + for (auto& R_coor: all_R_coor) { if (nonzero_num[count] != 0) { @@ -55,10 +56,10 @@ void sparse_format::cal_HR_dftu( auto iter = SR_sparse.find(R_coor); if (iter != SR_sparse.end()) { - for (auto &row_loop : iter->second) + for (auto& row_loop: iter->second) { ir = pv.global2local_row(row_loop.first); - for (auto &col_loop : row_loop.second) + for (auto& col_loop: row_loop.second) { ic = pv.global2local_col(col_loop.first); if (ModuleBase::GlobalFunc::IS_COLUMN_MAJOR_KS_SOLVER(PARAM.inp.ks_solver)) @@ -97,7 +98,7 @@ void sparse_format::cal_HR_dftu( if (std::abs(HR_tmp[iic]) > sparse_thr) { - double &value = temp_HR_sparse[R_coor][i][j]; + double& value = temp_HR_sparse[R_coor][i][j]; value += HR_tmp[iic]; if (std::abs(value) <= sparse_thr) { @@ -108,7 +109,6 @@ void sparse_format::cal_HR_dftu( } } } - } count++; @@ -121,33 +121,32 @@ void sparse_format::cal_HR_dftu( HR_tmp = nullptr; SR_tmp = nullptr; - ModuleBase::timer::tick("sparse_format","cal_HR_dftu_sparse"); + ModuleBase::timer::tick("sparse_format", "cal_HR_dftu_sparse"); return; } - void sparse_format::cal_HR_dftu_soc( - const Parallel_Orbitals &pv, - std::set> &all_R_coor, - std::map, std::map>>> &SR_soc_sparse, - std::map, std::map>>> &HR_soc_sparse, - const int ¤t_spin, - const double &sparse_thr) + const Parallel_Orbitals& pv, + std::set>& all_R_coor, + std::map, std::map>>>& SR_soc_sparse, + std::map, std::map>>>& HR_soc_sparse, + const int& current_spin, + const double& sparse_thr) { - ModuleBase::TITLE("sparse_format","cal_HR_dftu_soc"); - ModuleBase::timer::tick("sparse_format","cal_HR_dftu_soc"); + ModuleBase::TITLE("sparse_format", "cal_HR_dftu_soc"); + ModuleBase::timer::tick("sparse_format", "cal_HR_dftu_soc"); int total_R_num = all_R_coor.size(); - int *nonzero_num = new int[total_R_num](); + int* nonzero_num = new int[total_R_num](); ModuleBase::GlobalFunc::ZEROS(nonzero_num, total_R_num); int count = 0; - for (auto &R_coor : all_R_coor) + for (auto& R_coor: all_R_coor) { auto iter = SR_soc_sparse.find(R_coor); if (iter != SR_soc_sparse.end()) { - for (auto &row_loop : iter->second) + for (auto& row_loop: iter->second) { nonzero_num[count] += row_loop.second.size(); } @@ -157,15 +156,15 @@ void sparse_format::cal_HR_dftu_soc( Parallel_Reduce::reduce_all(nonzero_num, total_R_num); - std::complex *HR_soc_tmp = new std::complex[pv.nloc]; - std::complex *SR_soc_tmp = new std::complex[pv.nloc]; + std::complex* HR_soc_tmp = new std::complex[pv.nloc]; + std::complex* SR_soc_tmp = new std::complex[pv.nloc]; - int ir=0; - int ic=0; - int iic=0; + int ir = 0; + int ic = 0; + int iic = 0; count = 0; - for (auto &R_coor : all_R_coor) + for (auto& R_coor: all_R_coor) { if (nonzero_num[count] != 0) { @@ -175,10 +174,10 @@ void sparse_format::cal_HR_dftu_soc( auto iter = SR_soc_sparse.find(R_coor); if (iter != SR_soc_sparse.end()) { - for (auto &row_loop : iter->second) + for (auto& row_loop: iter->second) { ir = pv.global2local_row(row_loop.first); - for (auto &col_loop : row_loop.second) + for (auto& col_loop: row_loop.second) { ic = pv.global2local_col(col_loop.first); if (ModuleBase::GlobalFunc::IS_COLUMN_MAJOR_KS_SOLVER(PARAM.inp.ks_solver)) @@ -217,7 +216,7 @@ void sparse_format::cal_HR_dftu_soc( if (std::abs(HR_soc_tmp[iic]) > sparse_thr) { - std::complex &value = HR_soc_sparse[R_coor][i][j]; + std::complex& value = HR_soc_sparse[R_coor][i][j]; value += HR_soc_tmp[iic]; if (std::abs(value) <= sparse_thr) { @@ -228,7 +227,6 @@ void sparse_format::cal_HR_dftu_soc( } } } - } count++; @@ -241,7 +239,7 @@ void sparse_format::cal_HR_dftu_soc( HR_soc_tmp = nullptr; SR_soc_tmp = nullptr; - ModuleBase::timer::tick("sparse_format","calculat_HR_dftu_soc"); + ModuleBase::timer::tick("sparse_format", "calculat_HR_dftu_soc"); return; } diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/stress_tools.h b/source/module_hamilt_lcao/hamilt_lcaodft/stress_tools.h index 4ae6ed31ee..305870e3d7 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/stress_tools.h +++ b/source/module_hamilt_lcao/hamilt_lcaodft/stress_tools.h @@ -1,5 +1,5 @@ #pragma once -#include "module_base/matrix.h" +#include "source_base/matrix.h" // this namespace used to store global function for some stress operation namespace StressTools { diff --git a/source/module_hamilt_lcao/hamilt_lcaodft/wavefunc_in_pw.cpp b/source/module_hamilt_lcao/hamilt_lcaodft/wavefunc_in_pw.cpp index c35cdce462..b4b97fb704 100644 --- a/source/module_hamilt_lcao/hamilt_lcaodft/wavefunc_in_pw.cpp +++ b/source/module_hamilt_lcao/hamilt_lcaodft/wavefunc_in_pw.cpp @@ -1,193 +1,191 @@ #include "wavefunc_in_pw.h" + #include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_parameter/parameter.h" -#include // Peize Lin fix bug about strcmp 2016-08-02 -#include "module_base/math_integral.h" -#include "module_base/math_sphbes.h" -#include "module_base/math_polyint.h" -#include "module_base/math_ylmreal.h" #include "module_hamilt_pw/hamilt_pwdft/soc.h" +#include "module_parameter/parameter.h" +#include "source_base/math_integral.h" +#include "source_base/math_polyint.h" +#include "source_base/math_sphbes.h" +#include "source_base/math_ylmreal.h" + +#include // Peize Lin fix bug about strcmp 2016-08-02 -void Wavefunc_in_pw::make_table_q( - const UnitCell &ucell, - std::vector &fn, - ModuleBase::realArray &table_local) +void Wavefunc_in_pw::make_table_q(const UnitCell& ucell, + std::vector& fn, + ModuleBase::realArray& table_local) { - ModuleBase::TITLE("Wavefunc_in_pw","make_table_q"); - - if( fn.size() != static_cast(ucell.ntype) ) - { - ModuleBase::WARNING_QUIT("Wavefunc_in_pw::make_table_q","maybe NUMERICAL_ORBITAL is not read in, please check."); - } - - for(int it=0; it> word; - if (std::strcmp(word , "END") == 0) // Peize Lin fix bug about strcmp 2016-08-02 - { - break; - } - } - - ModuleBase::CHECK_NAME(in, "Mesh"); - in >> meshr; - int meshr_read = meshr; - if(meshr%2==0) - { - ++meshr; - } - GlobalV::ofs_running << " meshr=" << meshr; - - ModuleBase::CHECK_NAME(in, "dr"); - in >> dr; - GlobalV::ofs_running << " dr=" << dr; - - double* radial = new double[meshr]; - double *psi = new double[meshr]; - double* psir = new double[meshr]; - double* rab = new double[meshr]; - - ModuleBase::GlobalFunc::ZEROS(radial, meshr); - ModuleBase::GlobalFunc::ZEROS(psi, meshr); - ModuleBase::GlobalFunc::ZEROS(psir, meshr); - ModuleBase::GlobalFunc::ZEROS(rab, meshr); - for(int ir=0; ir> name1 >> name2 >> name3; - assert( name1 == "Type" ); - in >> tmp_it >> tmp_l >> tmp_n; - if( L == tmp_l && N == tmp_n ) - { - // meshr_read is different from meshr if meshr is even number. - for(int ir=0; ir> psi[ir]; - //psi[ir] = 1.0; //hahaha - psir[ir] = psi[ir] * radial[ir]; - } - find = true; - } - else - { - double no_use; - for(int ir=0; ir> no_use; - } - } - } - double* table = new double[PARAM.globalv.nqx]; - Wavefunc_in_pw::integral(ucell,meshr, psir, radial, rab, L, table); - for(int iq=0; iq(ucell.ntype)) + { + ModuleBase::WARNING_QUIT("Wavefunc_in_pw::make_table_q", + "maybe NUMERICAL_ORBITAL is not read in, please check."); + } + + for (int it = 0; it < ucell.ntype; it++) + { + std::ifstream in(fn[it].c_str()); + if (!in) + { + GlobalV::ofs_warning << " File name : " << fn[it] << std::endl; + ModuleBase::WARNING_QUIT("Wavefunc_in_pw::make_table_q", "Can not find file."); + } + else + { + std::stringstream ss; + ss << "Orbital of species " << ucell.atoms[it].label; + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, ss.str(), fn[it]); + } + in.close(); + } + + table_local.zero_out(); + for (int it = 0; it < ucell.ntype; it++) + { + int ic = 0; + for (int L = 0; L < ucell.atoms[it].nwl + 1; L++) + { + for (int N = 0; N < ucell.atoms[it].l_nchi[L]; N++) + { + GlobalV::ofs_running << " L=" << L << " N=" << N; + std::ifstream in(fn[it].c_str()); + if (!in) + { + GlobalV::ofs_warning << " File name : " << fn[it] << std::endl; + ModuleBase::WARNING_QUIT("Wavefunc_in_pw::make_table_q", "Can not find file."); + } + int meshr = 0; + double dr = 0.0; // only used in uniform grid + char word[80]; // pengfei Li add 15-1-31 + while (in.good()) + { + in >> word; + if (std::strcmp(word, "END") == 0) // Peize Lin fix bug about strcmp 2016-08-02 + { + break; + } + } + + ModuleBase::CHECK_NAME(in, "Mesh"); + in >> meshr; + int meshr_read = meshr; + if (meshr % 2 == 0) + { + ++meshr; + } + GlobalV::ofs_running << " meshr=" << meshr; + + ModuleBase::CHECK_NAME(in, "dr"); + in >> dr; + GlobalV::ofs_running << " dr=" << dr; + + double* radial = new double[meshr]; + double* psi = new double[meshr]; + double* psir = new double[meshr]; + double* rab = new double[meshr]; + + ModuleBase::GlobalFunc::ZEROS(radial, meshr); + ModuleBase::GlobalFunc::ZEROS(psi, meshr); + ModuleBase::GlobalFunc::ZEROS(psir, meshr); + ModuleBase::GlobalFunc::ZEROS(rab, meshr); + for (int ir = 0; ir < meshr; ir++) + { + rab[ir] = dr; + // plus one because we can't read in r = 0 term now. + radial[ir] = ir * dr; // mohan modify 2010-04-19 + } + GlobalV::ofs_running << " Rmax(Angstrom)=" << radial[meshr - 1] << std::endl; + + std::string name1; + std::string name2; + std::string name3; + int tmp_it = 0; + int tmp_l = 0; + int tmp_n = 0; + bool find = false; + + while (!find) + { + if (in.eof()) + { + GlobalV::ofs_warning << "\n Can't find l=" << L << " n=" << N << " orbital." << std::endl; + ModuleBase::WARNING_QUIT("Control_Overlap", "Read_PAO"); + } + in >> name1 >> name2 >> name3; + assert(name1 == "Type"); + in >> tmp_it >> tmp_l >> tmp_n; + if (L == tmp_l && N == tmp_n) + { + // meshr_read is different from meshr if meshr is even number. + for (int ir = 0; ir < meshr_read; ir++) + { + in >> psi[ir]; + // psi[ir] = 1.0; //hahaha + psir[ir] = psi[ir] * radial[ir]; + } + find = true; + } + else + { + double no_use; + for (int ir = 0; ir < meshr_read; ir++) + { + in >> no_use; + } + } + } + double* table = new double[PARAM.globalv.nqx]; + Wavefunc_in_pw::integral(ucell, meshr, psir, radial, rab, L, table); + for (int iq = 0; iq < PARAM.globalv.nqx; iq++) + { + // double energy_q = pow(iq * PARAM.globalv.dq,2); + table_local(it, ic, iq) = table[iq]; //* Wavefunc_in_pw::smearing(energy_q,150,0.666666); + } + delete[] table; + delete[] radial; + delete[] rab; + delete[] psi; + delete[] psir; + ++ic; + } // N + } // L + } // T + + if (GlobalV::MY_RANK == 0) + { + for (int it = 0; it < ucell.ntype; it++) + { + std::stringstream ss; + ss << PARAM.globalv.global_out_dir << ucell.atoms[it].label << "/LOCAL_G.dat"; + std::ofstream ofs(ss.str().c_str()); + for (int iq = 0; iq < PARAM.globalv.nqx; iq++) + { + int ic = 0; + double energy_q = pow((double)iq * PARAM.globalv.dq, 2); + ofs << energy_q; // unit (Ry) + for (int L = 0; L < ucell.atoms[it].nwl + 1; L++) + { + for (int N = 0; N < ucell.atoms[it].l_nchi[L]; N++) + { + ofs << " " << table_local(it, ic, iq); + ++ic; + } + } + ofs << std::endl; + } + ofs.close(); + } + } + + return; } -double Wavefunc_in_pw::smearing(const double &energy_x, - const double &ecut, - const double &beta) +double Wavefunc_in_pw::smearing(const double& energy_x, const double& ecut, const double& beta) { double w = 0.0; - const double beta_e = beta * ecut ; + const double beta_e = beta * ecut; - if (beta >= 1.0 || beta<0 ) + if (beta >= 1.0 || beta < 0) { ModuleBase::WARNING_QUIT("wavefunc_in_pw::smearing", "beta must between 0 ~ 1 "); } @@ -198,275 +196,296 @@ double Wavefunc_in_pw::smearing(const double &energy_x, } else if (energy_x >= beta_e && energy_x <= ecut) { - const double arg = ModuleBase::PI * (ecut - energy_x) * 0.5 / (1-beta) / ecut ; + const double arg = ModuleBase::PI * (ecut - energy_x) * 0.5 / (1 - beta) / ecut; // const double sin_arg = sin(arg); // gong 2009. 7. 12 , correct // w = sin_arg*sin_argi ; w = 0.5 * (1 - cos(2.0 * arg)); } else if (energy_x > ecut) { - w = 0.0 ; + w = 0.0; } - return w ; + return w; } - void Wavefunc_in_pw::integral(const UnitCell& ucell, - const int meshr, - const double *psir, - const double *r, - const double *rab, - const int &l, - double* table) + const int meshr, + const double* psir, + const double* r, + const double* rab, + const int& l, + double* table) { - const double pref = ModuleBase::FOUR_PI / sqrt(ucell.omega); - - double *inner_part = new double[meshr]; - for(int ir=0; ir=0); - const int npw = wfc_basis->npwk[ik]; - const int total_lm = ( ucell.lmax + 1) * ( ucell.lmax + 1); - ModuleBase::matrix ylm(total_lm, npw); - std::complex *aux = new std::complex[npw]; - double *chiaux = nullptr; - - ModuleBase::Vector3 *gk = new ModuleBase::Vector3[npw]; - for(int ig=0;iggetgpluskcar(ik, ig); - } - - ModuleBase::YlmReal::Ylm_Real(total_lm, npw, gk, ylm); - - //int index = 0; - double *flq = new double[npw]; - int iwall=0; - for (int it = 0;it < ucell.ntype;it++) - { - for (int ia = 0;ia < ucell.atoms[it].na;ia++) - { + ModuleBase::TITLE("Wavefunc_in_pw", "produce_local_basis_in_pw"); + assert(ik >= 0); + const int npw = wfc_basis->npwk[ik]; + const int total_lm = (ucell.lmax + 1) * (ucell.lmax + 1); + ModuleBase::matrix ylm(total_lm, npw); + std::complex* aux = new std::complex[npw]; + double* chiaux = nullptr; + + ModuleBase::Vector3* gk = new ModuleBase::Vector3[npw]; + for (int ig = 0; ig < npw; ig++) + { + gk[ig] = wfc_basis->getgpluskcar(ik, ig); + } + + ModuleBase::YlmReal::Ylm_Real(total_lm, npw, gk, ylm); + + // int index = 0; + double* flq = new double[npw]; + int iwall = 0; + for (int it = 0; it < ucell.ntype; it++) + { + for (int ia = 0; ia < ucell.atoms[it].na; ia++) + { std::complex* sk = sf.get_sk(ik, it, ia, wfc_basis); int ic = 0; - for(int L = 0; L < ucell.atoms[it].nwl+1; L++) - { - std::complex lphase = pow(ModuleBase::NEG_IMAG_UNIT, L); //mohan 2010-04-19 - for(int N=0; N < ucell.atoms[it].l_nchi[L]; N++) - { -// GlobalV::ofs_running << " it=" << it << " ia=" << ia << " L=" << L << " N=" << N << std::endl; - - for(int ig=0; ig lphase = pow(ModuleBase::NEG_IMAG_UNIT, L); // mohan 2010-04-19 + for (int N = 0; N < ucell.atoms[it].l_nchi[L]; N++) + { + // GlobalV::ofs_running << " it=" << it << " ia=" << ia << " L=" << L << " N=" << N << + //std::endl; + + for (int ig = 0; ig < npw; ig++) + { + flq[ig] = ModuleBase::PolyInt::Polynomial_Interpolation(table_local, + it, + ic, + PARAM.globalv.nqx, + PARAM.globalv.dq, + gk[ig].norm() * ucell.tpiba); + } + + if (PARAM.inp.nspin == 4) + { + /* for(int is_N = 0; is_N < 2; is_N++)*/ // for rotate base + for (int is_N = 0; is_N < 1; is_N++) + { + if (L == 0 && is_N == 1) + { + continue; + } + if (ucell.atoms[it].ncpp.has_so) + { + const double j = std::abs(double(L + is_N) - 0.5); + if (!(PARAM.globalv.domag || PARAM.globalv.domag_z)) + { // atomic_wfc_so + for (int m = 0; m < 2 * L + 1; m++) + { + std::cout << "iwall: " << iwall << std::endl; + const int lm = L * L + m; + for (int ig = 0; ig < npw; ig++) + { + // if(is_N==0) + psi(iwall, ig) = lphase * sk[ig] * ylm(lm, ig) * flq[ig]; + // else psi(iwall + 1, ig + wfc_basis->npwk_max) = lphase * sk[ig] * ylm(lm, ig) * flq[ig]; } iwall += 2; } - }//if - else - {//atomic_wfc_so_mag - double alpha, gamma; - std::complex fup,fdown; - //int nc; - //This routine creates two functions only in the case j=l+1/2 or exit in the other case - if(fabs(j-L+0.5)<1e-4) { continue; -} - delete[] chiaux; - chiaux = new double [npw]; - //Find the functions j= l- 1/2 - if(L==0) { - for(int ig=0;ig ucell.natomwfc) + } // if + else + { // atomic_wfc_so_mag + double alpha, gamma; + std::complex fup, fdown; + // int nc; + // This routine creates two functions only in the case j=l+1/2 or exit in the other + // case + if (fabs(j - L + 0.5) < 1e-4) + { + continue; + } + delete[] chiaux; + chiaux = new double[npw]; + // Find the functions j= l- 1/2 + if (L == 0) + { + for (int ig = 0; ig < npw; ig++) + { + chiaux[ig] = flq[ig]; + } + } + else + { + /*for(int ib = 0;ib < ucell.atoms[it].nchi;ib++) + { + if((ucell.atoms[it].lchi[ib] == + L)&&(fabs(ucell.atoms[it].jjj[ib]-L+0.5)<1e-4)) + { + nc=ib; + break; + } + }*/ + for (int ig = 0; ig < npw; ig++) + { // Average the two functions + chiaux[ig] = L + * ModuleBase::PolyInt::Polynomial_Interpolation( + table_local, + it, + ic, + PARAM.globalv.nqx, + PARAM.globalv.dq, + gk[ig].norm() * ucell.tpiba); + + chiaux[ig] += flq[ig] * (L + 1.0); + chiaux[ig] *= 1 / (2.0 * L + 1.0); + } + } + // and construct the starting wavefunctions as in the noncollinear case. + // alpha = ucell.magnet.angle1_[it]; + // gamma = -1 * ucell.magnet.angle2_[it] + 0.5 * ModuleBase::PI; + alpha = ucell.atoms[it].angle1[ia]; + gamma = -1 * ucell.atoms[it].angle2[ia] + 0.5 * ModuleBase::PI; + for (int m = 0; m < 2 * L + 1; m++) + { + const int lm = L * L + m; + + if (iwall + 2 * L + 1 > ucell.natomwfc) { ModuleBase::WARNING_QUIT("this->wf.atomic_wfc()", "error: too many wfcs"); } for (int ig = 0; ig < npw; ig++) { - aux[ig] = sk[ig] * ylm(lm,ig) * chiaux[ig]; + aux[ig] = sk[ig] * ylm(lm, ig) * chiaux[ig]; } - //rotate wfc as needed - //first rotation with angle alpha around (OX) - for(int ig = 0;ignpwk_max) = (cos(0.5 * gamma) - ModuleBase::IMAG_UNIT * sin(0.5 * gamma)) * fdown; // second rotation with angle gamma around(OZ) fup = cos(0.5 * (alpha + ModuleBase::PI)) * aux[ig]; - fdown = ModuleBase::IMAG_UNIT * sin(0.5 * (alpha + ModuleBase::PI))*aux[ig]; - psi(iwall+2*L+1,ig) = (cos(0.5*gamma) + ModuleBase::IMAG_UNIT*sin(0.5*gamma))*fup; + fdown + = ModuleBase::IMAG_UNIT * sin(0.5 * (alpha + ModuleBase::PI)) * aux[ig]; + psi(iwall + 2 * L + 1, ig) + = (cos(0.5 * gamma) + ModuleBase::IMAG_UNIT * sin(0.5 * gamma)) * fup; psi(iwall + 2 * L + 1, ig + wfc_basis->npwk_max) = (cos(0.5 * gamma) - ModuleBase::IMAG_UNIT * sin(0.5 * gamma)) * fdown; } iwall++; } - iwall += 2*L +1; - } // end else INPUT.starting_spin_angle || !PARAM.globalv.domag - } // end if ucell.atoms[it].has_so - else - {//atomic_wfc_nc - double alpha, gamman; - std::complex fup, fdown; - //alpha = ucell.magnet.angle1_[it]; - //gamman = -ucell.magnet.angle2_[it] + 0.5*ModuleBase::PI; - alpha = ucell.atoms[it].angle1[ia]; - gamman = -ucell.atoms[it].angle2[ia] + 0.5*ModuleBase::PI; - for(int m = 0;m<2*L+1;m++) - { - const int lm = L*L +m; - if (iwall + 2 * L + 1 > ucell.natomwfc) - { - ModuleBase::WARNING_QUIT("this->wf.atomic_wfc()", "error: too many wfcs"); - } + iwall += 2 * L + 1; + } // end else INPUT.starting_spin_angle || !PARAM.globalv.domag + } // end if ucell.atoms[it].has_so + else + { // atomic_wfc_nc + double alpha, gamman; + std::complex fup, fdown; + // alpha = ucell.magnet.angle1_[it]; + // gamman = -ucell.magnet.angle2_[it] + 0.5*ModuleBase::PI; + alpha = ucell.atoms[it].angle1[ia]; + gamman = -ucell.atoms[it].angle2[ia] + 0.5 * ModuleBase::PI; + for (int m = 0; m < 2 * L + 1; m++) + { + const int lm = L * L + m; + if (iwall + 2 * L + 1 > ucell.natomwfc) + { + ModuleBase::WARNING_QUIT("this->wf.atomic_wfc()", "error: too many wfcs"); + } for (int ig = 0; ig < npw; ig++) { - aux[ig] = sk[ig] * ylm(lm,ig) * flq[ig]; + aux[ig] = sk[ig] * ylm(lm, ig) * flq[ig]; } - //rotate function - //first, rotation with angle alpha around(OX) - for(int ig = 0;ignpwk_max) = (cos(0.5 * gamman) - ModuleBase::IMAG_UNIT * sin(0.5 * gamman)) * fdown; // second rotation with angle gamma around(OZ) fup = cos(0.5 * (alpha + ModuleBase::PI)) * aux[ig]; fdown = ModuleBase::IMAG_UNIT * sin(0.5 * (alpha + ModuleBase::PI)) * aux[ig]; - psi(iwall+2*L+1,ig) = (cos(0.5*gamman) + ModuleBase::IMAG_UNIT*sin(0.5*gamman))*fup; + psi(iwall + 2 * L + 1, ig) + = (cos(0.5 * gamman) + ModuleBase::IMAG_UNIT * sin(0.5 * gamman)) * fup; psi(iwall + 2 * L + 1, ig + wfc_basis->npwk_max) = (cos(0.5 * gamman) - ModuleBase::IMAG_UNIT * sin(0.5 * gamman)) * fdown; } // end ig iwall++; } // end m - iwall += 2*L+1; - } // end else ucell.atoms[it].has_so - } // end for is_N - } // end if PARAM.inp.noncolin - else - {//LSDA and nomagnet case - for(int m=0; m<2*L+1; m++) - { - const int lm = L*L+m; - for(int ig=0; ig &orbital_files, - ModuleBase::realArray &table_local); +void make_table_q(const UnitCell& ucell, std::vector& orbital_files, ModuleBase::realArray& table_local); - void integral( - const UnitCell& ucell, - const int meshr, // number of mesh points - const double *psir, - const double *r, - const double *rab, - const int &l, - double* table); - - //mohan add 2010-04-20 - double smearing( - const double &energy_x, - const double &ecut, - const double &beta); +void integral(const UnitCell& ucell, + const int meshr, // number of mesh points + const double* psir, + const double* r, + const double* rab, + const int& l, + double* table); - void produce_local_basis_in_pw(const UnitCell& ucell, - const int& ik, - const ModulePW::PW_Basis_K* wfc_basis, - const Structure_Factor& sf, - ModuleBase::ComplexMatrix& psi, - const ModuleBase::realArray& table_local); +// mohan add 2010-04-20 +double smearing(const double& energy_x, const double& ecut, const double& beta); -} +void produce_local_basis_in_pw(const UnitCell& ucell, + const int& ik, + const ModulePW::PW_Basis_K* wfc_basis, + const Structure_Factor& sf, + ModuleBase::ComplexMatrix& psi, + const ModuleBase::realArray& table_local); + +} // namespace Wavefunc_in_pw #endif diff --git a/source/module_hamilt_lcao/module_deepks/LCAO_deepks.h b/source/module_hamilt_lcao/module_deepks/LCAO_deepks.h index 9e7aec1301..e6a4b13ac9 100644 --- a/source/module_hamilt_lcao/module_deepks/LCAO_deepks.h +++ b/source/module_hamilt_lcao/module_deepks/LCAO_deepks.h @@ -16,15 +16,15 @@ #include "deepks_vdelta.h" #include "deepks_vdpre.h" #include "deepks_vdrpre.h" -#include "module_base/complexmatrix.h" -#include "module_base/intarray.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_basis/module_nao/two_center_integrator.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" #include "module_io/winput.h" +#include "source_base/complexmatrix.h" +#include "source_base/intarray.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" #include #include diff --git a/source/module_hamilt_lcao/module_deepks/LCAO_deepks_interface.cpp b/source/module_hamilt_lcao/module_deepks/LCAO_deepks_interface.cpp index bb916434d9..3fe5f048ae 100644 --- a/source/module_hamilt_lcao/module_deepks/LCAO_deepks_interface.cpp +++ b/source/module_hamilt_lcao/module_deepks/LCAO_deepks_interface.cpp @@ -2,12 +2,12 @@ #include "LCAO_deepks_interface.h" #include "LCAO_deepks_io.h" // mohan add 2024-07-22 -#include "module_base/global_variable.h" -#include "module_base/tool_title.h" #include "module_elecstate/cal_dm.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" #include "module_hamilt_lcao/module_hcontainer/output_hcontainer.h" #include "module_parameter/parameter.h" +#include "source_base/global_variable.h" +#include "source_base/tool_title.h" template LCAO_Deepks_Interface::LCAO_Deepks_Interface(std::shared_ptr> ld_in) : ld(ld_in) @@ -544,7 +544,7 @@ void LCAO_Deepks_Interface::out_deepks_labels(const double& etot, << " = " << std::setprecision(8) << e_delta_band * ModuleBase::Ry_to_eV << " eV" << std::endl; ofs_running << " E_delta_NN = " << std::setprecision(8) << E_delta << " Ry" << " = " << std::setprecision(8) << E_delta * ModuleBase::Ry_to_eV << " eV" << std::endl; - ofs_running << " -----------------------------------------------" << std::endl; + ofs_running << " -----------------------------------------------" << std::endl; } if (PARAM.inp.deepks_out_unittest) { diff --git a/source/module_hamilt_lcao/module_deepks/LCAO_deepks_interface.h b/source/module_hamilt_lcao/module_deepks/LCAO_deepks_interface.h index a5a87f2089..e0de9451a1 100644 --- a/source/module_hamilt_lcao/module_deepks/LCAO_deepks_interface.h +++ b/source/module_hamilt_lcao/module_deepks/LCAO_deepks_interface.h @@ -3,9 +3,9 @@ #ifdef __MLALGO #include "LCAO_deepks.h" -#include "module_base/complexmatrix.h" -#include "module_base/matrix.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" +#include "source_base/complexmatrix.h" +#include "source_base/matrix.h" #include diff --git a/source/module_hamilt_lcao/module_deepks/LCAO_deepks_io.cpp b/source/module_hamilt_lcao/module_deepks/LCAO_deepks_io.cpp index 6f6c28aa43..fd70c48a96 100644 --- a/source/module_hamilt_lcao/module_deepks/LCAO_deepks_io.cpp +++ b/source/module_hamilt_lcao/module_deepks/LCAO_deepks_io.cpp @@ -3,8 +3,8 @@ #ifdef __MLALGO #include "LCAO_deepks_io.h" -#include "module_base/tool_quit.h" #include "npy.hpp" +#include "source_base/tool_quit.h" #include diff --git a/source/module_hamilt_lcao/module_deepks/LCAO_deepks_io.h b/source/module_hamilt_lcao/module_deepks/LCAO_deepks_io.h index e8ab04adc4..19a686fae4 100644 --- a/source/module_hamilt_lcao/module_deepks/LCAO_deepks_io.h +++ b/source/module_hamilt_lcao/module_deepks/LCAO_deepks_io.h @@ -3,9 +3,9 @@ #ifdef __MLALGO -#include "module_base/complexmatrix.h" -#include "module_base/matrix.h" -#include "module_base/tool_title.h" +#include "source_base/complexmatrix.h" +#include "source_base/matrix.h" +#include "source_base/tool_title.h" #include #include diff --git a/source/module_hamilt_lcao/module_deepks/deepks_basic.cpp b/source/module_hamilt_lcao/module_deepks/deepks_basic.cpp index 48989c350e..1ad31eba88 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_basic.cpp +++ b/source/module_hamilt_lcao/module_deepks/deepks_basic.cpp @@ -5,9 +5,9 @@ #ifdef __MLALGO #include "deepks_basic.h" -#include "module_base/atom_in.h" -#include "module_base/timer.h" #include "module_parameter/parameter.h" +#include "source_base/atom_in.h" +#include "source_base/timer.h" // d(Descriptor) / d(projected density matrix) // Dimension is different for each inl, so there's a vector of tensors diff --git a/source/module_hamilt_lcao/module_deepks/deepks_basic.h b/source/module_hamilt_lcao/module_deepks/deepks_basic.h index 5b0deb521d..fc0be39587 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_basic.h +++ b/source/module_hamilt_lcao/module_deepks/deepks_basic.h @@ -3,9 +3,9 @@ #ifdef __MLALGO #include "LCAO_deepks_io.h" -#include "module_base/parallel_reduce.h" -#include "module_base/tool_title.h" #include "module_cell/unitcell.h" +#include "source_base/parallel_reduce.h" +#include "source_base/tool_title.h" #include #include diff --git a/source/module_hamilt_lcao/module_deepks/deepks_descriptor.cpp b/source/module_hamilt_lcao/module_deepks/deepks_descriptor.cpp index 02dbcdd5b3..dffbb09d85 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_descriptor.cpp +++ b/source/module_hamilt_lcao/module_deepks/deepks_descriptor.cpp @@ -8,12 +8,12 @@ #include "deepks_descriptor.h" #include "LCAO_deepks_io.h" // mohan add 2024-07-22 -#include "module_base/blas_connector.h" -#include "module_base/constants.h" -#include "module_base/libm/libm.h" -#include "module_base/parallel_reduce.h" #include "module_hamilt_lcao/module_hcontainer/atom_pair.h" #include "module_parameter/parameter.h" +#include "source_base/blas_connector.h" +#include "source_base/constants.h" +#include "source_base/libm/libm.h" +#include "source_base/parallel_reduce.h" void DeePKS_domain::cal_descriptor_equiv(const int nat, const int des_per_atom, diff --git a/source/module_hamilt_lcao/module_deepks/deepks_descriptor.h b/source/module_hamilt_lcao/module_deepks/deepks_descriptor.h index 67b6b05e20..050f893e8c 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_descriptor.h +++ b/source/module_hamilt_lcao/module_deepks/deepks_descriptor.h @@ -3,9 +3,9 @@ #ifdef __MLALGO -#include "module_base/intarray.h" -#include "module_base/timer.h" #include "module_cell/unitcell.h" +#include "source_base/intarray.h" +#include "source_base/timer.h" #include #include diff --git a/source/module_hamilt_lcao/module_deepks/deepks_force.cpp b/source/module_hamilt_lcao/module_deepks/deepks_force.cpp index 8c3e5e532c..7d0cd9b3f7 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_force.cpp +++ b/source/module_hamilt_lcao/module_deepks/deepks_force.cpp @@ -4,11 +4,11 @@ #include "deepks_force.h" #include "deepks_iterate.h" -#include "module_base/constants.h" -#include "module_base/libm/libm.h" -#include "module_base/timer.h" -#include "module_base/vector3.h" #include "module_hamilt_lcao/module_hcontainer/atom_pair.h" +#include "source_base/constants.h" +#include "source_base/libm/libm.h" +#include "source_base/timer.h" +#include "source_base/vector3.h" template void DeePKS_domain::cal_f_delta(const hamilt::HContainer* dmr, @@ -33,214 +33,214 @@ void DeePKS_domain::cal_f_delta(const hamilt::HContainer* dmr, const double Rcut_Alpha = orb.Alpha[0].getRcut(); #pragma omp parallel -{ - ModuleBase::matrix f_delta_local(f_delta.nr, f_delta.nc); - ModuleBase::matrix svnl_dalpha_local(svnl_dalpha.nr, svnl_dalpha.nc); -#pragma omp for schedule(dynamic) - for (int iat = 0; iat < ucell.nat; iat++) { - const int T0 = ucell.iat2it[iat]; - const int I0 = ucell.iat2ia[iat]; - Atom* atom0 = &ucell.atoms[T0]; - const ModuleBase::Vector3 tau0 = atom0->tau[I0]; - AdjacentAtomInfo adjs; - GridD.Find_atom(ucell, atom0->tau[I0], T0, I0, &adjs); - - for (int ad1 = 0; ad1 < adjs.adj_num + 1; ++ad1) + ModuleBase::matrix f_delta_local(f_delta.nr, f_delta.nc); + ModuleBase::matrix svnl_dalpha_local(svnl_dalpha.nr, svnl_dalpha.nc); +#pragma omp for schedule(dynamic) + for (int iat = 0; iat < ucell.nat; iat++) { - const int T1 = adjs.ntype[ad1]; - const int I1 = adjs.natom[ad1]; - const int ibt1 = ucell.itia2iat(T1, I1); - const ModuleBase::Vector3 tau1 = adjs.adjacent_tau[ad1]; - const Atom* atom1 = &ucell.atoms[T1]; - const int nw1_tot = atom1->nw * PARAM.globalv.npol; - const double Rcut_AO1 = orb.Phi[T1].getRcut(); - - ModuleBase::Vector3 dR1(adjs.box[ad1].x, adjs.box[ad1].y, adjs.box[ad1].z); + const int T0 = ucell.iat2it[iat]; + const int I0 = ucell.iat2ia[iat]; + Atom* atom0 = &ucell.atoms[T0]; + const ModuleBase::Vector3 tau0 = atom0->tau[I0]; + AdjacentAtomInfo adjs; + GridD.Find_atom(ucell, atom0->tau[I0], T0, I0, &adjs); - for (int ad2 = 0; ad2 < adjs.adj_num + 1; ad2++) + for (int ad1 = 0; ad1 < adjs.adj_num + 1; ++ad1) { - const int T2 = adjs.ntype[ad2]; - const int I2 = adjs.natom[ad2]; - const int ibt2 = ucell.itia2iat(T2, I2); - const ModuleBase::Vector3 tau2 = adjs.adjacent_tau[ad2]; - const Atom* atom2 = &ucell.atoms[T2]; - const int nw2_tot = atom2->nw * PARAM.globalv.npol; - ModuleBase::Vector3 dR2(adjs.box[ad2].x, adjs.box[ad2].y, adjs.box[ad2].z); + const int T1 = adjs.ntype[ad1]; + const int I1 = adjs.natom[ad1]; + const int ibt1 = ucell.itia2iat(T1, I1); + const ModuleBase::Vector3 tau1 = adjs.adjacent_tau[ad1]; + const Atom* atom1 = &ucell.atoms[T1]; + const int nw1_tot = atom1->nw * PARAM.globalv.npol; + const double Rcut_AO1 = orb.Phi[T1].getRcut(); - const double Rcut_AO2 = orb.Phi[T2].getRcut(); - const double dist1 = (tau1 - tau0).norm() * ucell.lat0; - const double dist2 = (tau2 - tau0).norm() * ucell.lat0; + ModuleBase::Vector3 dR1(adjs.box[ad1].x, adjs.box[ad1].y, adjs.box[ad1].z); - if (dist1 > Rcut_Alpha + Rcut_AO1 || dist2 > Rcut_Alpha + Rcut_AO2) + for (int ad2 = 0; ad2 < adjs.adj_num + 1; ad2++) { - continue; - } + const int T2 = adjs.ntype[ad2]; + const int I2 = adjs.natom[ad2]; + const int ibt2 = ucell.itia2iat(T2, I2); + const ModuleBase::Vector3 tau2 = adjs.adjacent_tau[ad2]; + const Atom* atom2 = &ucell.atoms[T2]; + const int nw2_tot = atom2->nw * PARAM.globalv.npol; + ModuleBase::Vector3 dR2(adjs.box[ad2].x, adjs.box[ad2].y, adjs.box[ad2].z); - double r1[3]{}; - double r2[3]{}; - if (isstress) - { - r1[0] = (tau1.x - tau0.x); - r1[1] = (tau1.y - tau0.y); - r1[2] = (tau1.z - tau0.z); - r2[0] = (tau2.x - tau0.x); - r2[1] = (tau2.y - tau0.y); - r2[2] = (tau2.z - tau0.z); - } + const double Rcut_AO2 = orb.Phi[T2].getRcut(); + const double dist1 = (tau1 - tau0).norm() * ucell.lat0; + const double dist2 = (tau2 - tau0).norm() * ucell.lat0; - auto row_indexes = pv.get_indexes_row(ibt1); - auto col_indexes = pv.get_indexes_col(ibt2); + if (dist1 > Rcut_Alpha + Rcut_AO1 || dist2 > Rcut_Alpha + Rcut_AO2) + { + continue; + } - if (row_indexes.size() * col_indexes.size() == 0) - { - continue; - } + double r1[3]{}; + double r2[3]{}; + if (isstress) + { + r1[0] = (tau1.x - tau0.x); + r1[1] = (tau1.y - tau0.y); + r1[2] = (tau1.z - tau0.z); + r2[0] = (tau2.x - tau0.x); + r2[1] = (tau2.y - tau0.y); + r2[2] = (tau2.z - tau0.z); + } - int dRx = 0; - int dRy = 0; - int dRz = 0; - if (std::is_same>::value) // for multi-k - { - dRx = dR1.x - dR2.x; - dRy = dR1.y - dR2.y; - dRz = dR1.z - dR2.z; - } - ModuleBase::Vector3 dR(dRx, dRy, dRz); - const double* dm_current = dmr->find_matrix(ibt1, ibt2, dR.x, dR.y, dR.z)->get_pointer(); + auto row_indexes = pv.get_indexes_row(ibt1); + auto col_indexes = pv.get_indexes_col(ibt2); - hamilt::BaseMatrix* overlap_1 = phialpha[0]->find_matrix(iat, ibt1, dR1); - hamilt::BaseMatrix* overlap_2 = phialpha[0]->find_matrix(iat, ibt2, dR2); - if (overlap_1 == nullptr || overlap_2 == nullptr) - { - continue; - } - std::vector*> grad_overlap_1(3); - std::vector*> grad_overlap_2(3); - for (int i = 0; i < 3; ++i) - { - grad_overlap_1[i] = phialpha[i + 1]->find_matrix(iat, ibt1, dR1); - grad_overlap_2[i] = phialpha[i + 1]->find_matrix(iat, ibt2, dR2); - } + if (row_indexes.size() * col_indexes.size() == 0) + { + continue; + } - assert(overlap_1->get_col_size() == overlap_2->get_col_size()); + int dRx = 0; + int dRy = 0; + int dRz = 0; + if (std::is_same>::value) // for multi-k + { + dRx = dR1.x - dR2.x; + dRy = dR1.y - dR2.y; + dRz = dR1.z - dR2.z; + } + ModuleBase::Vector3 dR(dRx, dRy, dRz); + const double* dm_current = dmr->find_matrix(ibt1, ibt2, dR.x, dR.y, dR.z)->get_pointer(); - for (int iw1 = 0; iw1 < row_indexes.size(); ++iw1) - { - for (int iw2 = 0; iw2 < col_indexes.size(); ++iw2) + hamilt::BaseMatrix* overlap_1 = phialpha[0]->find_matrix(iat, ibt1, dR1); + hamilt::BaseMatrix* overlap_2 = phialpha[0]->find_matrix(iat, ibt2, dR2); + if (overlap_1 == nullptr || overlap_2 == nullptr) + { + continue; + } + std::vector*> grad_overlap_1(3); + std::vector*> grad_overlap_2(3); + for (int i = 0; i < 3; ++i) { - double nlm[3] = {0, 0, 0}; - double nlm_t[3] = {0, 0, 0}; // for stress + grad_overlap_1[i] = phialpha[i + 1]->find_matrix(iat, ibt1, dR1); + grad_overlap_2[i] = phialpha[i + 1]->find_matrix(iat, ibt2, dR2); + } - if (!PARAM.inp.deepks_equiv) + assert(overlap_1->get_col_size() == overlap_2->get_col_size()); + + for (int iw1 = 0; iw1 < row_indexes.size(); ++iw1) + { + for (int iw2 = 0; iw2 < col_indexes.size(); ++iw2) { - int ib = 0; - for (int L0 = 0; L0 <= orb.Alpha[0].getLmax(); ++L0) + double nlm[3] = {0, 0, 0}; + double nlm_t[3] = {0, 0, 0}; // for stress + + if (!PARAM.inp.deepks_equiv) { - for (int N0 = 0; N0 < orb.Alpha[0].getNchi(L0); ++N0) + int ib = 0; + for (int L0 = 0; L0 <= orb.Alpha[0].getLmax(); ++L0) { - const int inl = inl_index[T0](I0, L0, N0); - const int nm = 2 * L0 + 1; - for (int m1 = 0; m1 < nm; ++m1) + for (int N0 = 0; N0 < orb.Alpha[0].getNchi(L0); ++N0) { - for (int m2 = 0; m2 < nm; ++m2) + const int inl = inl_index[T0](I0, L0, N0); + const int nm = 2 * L0 + 1; + for (int m1 = 0; m1 < nm; ++m1) { - for (int dim = 0; dim < 3; dim++) + for (int m2 = 0; m2 < nm; ++m2) { - nlm[dim] - += gedm[inl][m1 * nm + m2] - * overlap_1->get_value(row_indexes[iw1], ib + m1) - * grad_overlap_2[dim]->get_value(col_indexes[iw2], ib + m2); - if (isstress) + for (int dim = 0; dim < 3; dim++) { - nlm_t[dim] += gedm[inl][m1 * nm + m2] - * overlap_2->get_value(col_indexes[iw2], ib + m1) - * grad_overlap_1[dim]->get_value(row_indexes[iw1], - ib + m2); + nlm[dim] + += gedm[inl][m1 * nm + m2] + * overlap_1->get_value(row_indexes[iw1], ib + m1) + * grad_overlap_2[dim]->get_value(col_indexes[iw2], ib + m2); + if (isstress) + { + nlm_t[dim] += gedm[inl][m1 * nm + m2] + * overlap_2->get_value(col_indexes[iw2], ib + m1) + * grad_overlap_1[dim]->get_value(row_indexes[iw1], + ib + m2); + } } } } + ib += nm; } - ib += nm; } + assert(ib == overlap_1->get_col_size()); } - assert(ib == overlap_1->get_col_size()); - } - else - { - int nproj = 0; - for (int il = 0; il < lmaxd + 1; il++) - { - nproj += (2 * il + 1) * orb.Alpha[0].getNchi(il); - } - for (int iproj = 0; iproj < nproj; iproj++) + else { - for (int jproj = 0; jproj < nproj; jproj++) + int nproj = 0; + for (int il = 0; il < lmaxd + 1; il++) { - for (int dim = 0; dim < 3; dim++) + nproj += (2 * il + 1) * orb.Alpha[0].getNchi(il); + } + for (int iproj = 0; iproj < nproj; iproj++) + { + for (int jproj = 0; jproj < nproj; jproj++) { - nlm[dim] += gedm[iat][iproj * nproj + jproj] - * overlap_1->get_value(row_indexes[iw1], iproj) - * grad_overlap_2[dim]->get_value(col_indexes[iw2], jproj); - if (isstress) + for (int dim = 0; dim < 3; dim++) { - nlm_t[dim] += gedm[iat][iproj * nproj + jproj] - * overlap_2->get_value(col_indexes[iw2], iproj) - * grad_overlap_1[dim]->get_value(row_indexes[iw1], jproj); + nlm[dim] += gedm[iat][iproj * nproj + jproj] + * overlap_1->get_value(row_indexes[iw1], iproj) + * grad_overlap_2[dim]->get_value(col_indexes[iw2], jproj); + if (isstress) + { + nlm_t[dim] += gedm[iat][iproj * nproj + jproj] + * overlap_2->get_value(col_indexes[iw2], iproj) + * grad_overlap_1[dim]->get_value(row_indexes[iw1], jproj); + } } } } } - } - // HF term is minus, only one projector for each atom force. - f_delta_local(iat, 0) -= 2.0 * *dm_current * nlm[0]; - f_delta_local(iat, 1) -= 2.0 * *dm_current * nlm[1]; - f_delta_local(iat, 2) -= 2.0 * *dm_current * nlm[2]; + // HF term is minus, only one projector for each atom force. + f_delta_local(iat, 0) -= 2.0 * *dm_current * nlm[0]; + f_delta_local(iat, 1) -= 2.0 * *dm_current * nlm[1]; + f_delta_local(iat, 2) -= 2.0 * *dm_current * nlm[2]; - // Pulay term is plus, only one projector for each atom force. - f_delta_local(ibt2, 0) += 2.0 * *dm_current * nlm[0]; - f_delta_local(ibt2, 1) += 2.0 * *dm_current * nlm[1]; - f_delta_local(ibt2, 2) += 2.0 * *dm_current * nlm[2]; + // Pulay term is plus, only one projector for each atom force. + f_delta_local(ibt2, 0) += 2.0 * *dm_current * nlm[0]; + f_delta_local(ibt2, 1) += 2.0 * *dm_current * nlm[1]; + f_delta_local(ibt2, 2) += 2.0 * *dm_current * nlm[2]; - if (isstress) - { - for (int ipol = 0; ipol < 3; ipol++) + if (isstress) { - for (int jpol = ipol; jpol < 3; jpol++) + for (int ipol = 0; ipol < 3; ipol++) { - svnl_dalpha_local(ipol, jpol) - += *dm_current * (nlm[ipol] * r2[jpol] + nlm_t[ipol] * r1[jpol]); + for (int jpol = ipol; jpol < 3; jpol++) + { + svnl_dalpha_local(ipol, jpol) + += *dm_current * (nlm[ipol] * r2[jpol] + nlm_t[ipol] * r1[jpol]); + } } } - } - dm_current++; - } // iw2 - } // iw1 - } // ad2 - } // ad1 - } // iat - if (isstress) - { - for (int ipol = 0; ipol < 3; ipol++) + dm_current++; + } // iw2 + } // iw1 + } // ad2 + } // ad1 + } // iat + if (isstress) { - for (int jpol = ipol; jpol < 3; jpol++) + for (int ipol = 0; ipol < 3; ipol++) { - #pragma omp atomic - svnl_dalpha(ipol, jpol) += svnl_dalpha_local(ipol, jpol); + for (int jpol = ipol; jpol < 3; jpol++) + { +#pragma omp atomic + svnl_dalpha(ipol, jpol) += svnl_dalpha_local(ipol, jpol); + } } } + for (int iat = 0; iat < ucell.nat; iat++) + { +#pragma omp atomic + f_delta(iat, 0) += f_delta_local(iat, 0); +#pragma omp atomic + f_delta(iat, 1) += f_delta_local(iat, 1); +#pragma omp atomic + f_delta(iat, 2) += f_delta_local(iat, 2); + } } - for (int iat = 0; iat < ucell.nat; iat++) - { - #pragma omp atomic - f_delta(iat, 0) += f_delta_local(iat, 0); - #pragma omp atomic - f_delta(iat, 1) += f_delta_local(iat, 1); - #pragma omp atomic - f_delta(iat, 2) += f_delta_local(iat, 2); - } -} if (isstress) { diff --git a/source/module_hamilt_lcao/module_deepks/deepks_force.h b/source/module_hamilt_lcao/module_deepks/deepks_force.h index d0a24334db..c955ce1eca 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_force.h +++ b/source/module_hamilt_lcao/module_deepks/deepks_force.h @@ -3,14 +3,14 @@ #ifdef __MLALGO -#include "module_base/complexmatrix.h" -#include "module_base/intarray.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_basis/module_nao/two_center_integrator.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_elecstate/module_dm/density_matrix.h" +#include "source_base/complexmatrix.h" +#include "source_base/intarray.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" namespace DeePKS_domain { diff --git a/source/module_hamilt_lcao/module_deepks/deepks_fpre.cpp b/source/module_hamilt_lcao/module_deepks/deepks_fpre.cpp index ea08e66c97..7cecfcbb91 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_fpre.cpp +++ b/source/module_hamilt_lcao/module_deepks/deepks_fpre.cpp @@ -3,13 +3,13 @@ #include "deepks_fpre.h" #include "deepks_iterate.h" -#include "module_base/constants.h" -#include "module_base/libm/libm.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" -#include "module_base/vector3.h" #include "module_hamilt_lcao/module_hcontainer/atom_pair.h" #include "module_parameter/parameter.h" +#include "source_base/constants.h" +#include "source_base/libm/libm.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/vector3.h" /// this subroutine calculates the gradient of projected density matrices /// gdmx_m,m = d/dX sum_{mu,nu} rho_{mu,nu} @@ -55,8 +55,7 @@ void DeePKS_domain::cal_gdmx(const int lmaxd, const ModuleBase::Vector3& tau2, const int start2, const int nw2_tot, - ModuleBase::Vector3 dR2) - { + ModuleBase::Vector3 dR2) { auto row_indexes = pv.get_indexes_row(ibt1); auto col_indexes = pv.get_indexes_col(ibt2); if (row_indexes.size() * col_indexes.size() == 0) @@ -132,8 +131,7 @@ void DeePKS_domain::cal_gdmx(const int lmaxd, dm_current++; } // iw2 } // iw1 - } - ); + }); #ifdef __MPI Parallel_Reduce::reduce_all(gdmx.data_ptr(), 3 * ucell.nat * inlmax * nm * nm); diff --git a/source/module_hamilt_lcao/module_deepks/deepks_fpre.h b/source/module_hamilt_lcao/module_deepks/deepks_fpre.h index a2c324047a..1589c5c135 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_fpre.h +++ b/source/module_hamilt_lcao/module_deepks/deepks_fpre.h @@ -3,14 +3,14 @@ #ifdef __MLALGO -#include "module_base/complexmatrix.h" -#include "module_base/intarray.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_basis/module_nao/two_center_integrator.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "source_base/complexmatrix.h" +#include "source_base/intarray.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" #include #include diff --git a/source/module_hamilt_lcao/module_deepks/deepks_iterate.h b/source/module_hamilt_lcao/module_deepks/deepks_iterate.h index d41aa0b0b6..033617bfd1 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_iterate.h +++ b/source/module_hamilt_lcao/module_deepks/deepks_iterate.h @@ -5,15 +5,15 @@ #ifdef __MLALGO -#include "module_base/complexmatrix.h" -#include "module_base/intarray.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" -#include "module_base/vector3.h" #include "module_basis/module_ao/ORB_read.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_cell/unitcell.h" +#include "source_base/complexmatrix.h" +#include "source_base/intarray.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" +#include "source_base/vector3.h" #include diff --git a/source/module_hamilt_lcao/module_deepks/deepks_orbital.cpp b/source/module_hamilt_lcao/module_deepks/deepks_orbital.cpp index 8e3cf7f15f..1b58f4e21e 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_orbital.cpp +++ b/source/module_hamilt_lcao/module_deepks/deepks_orbital.cpp @@ -3,8 +3,8 @@ #ifdef __MLALGO #include "deepks_orbital.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" template void DeePKS_domain::cal_o_delta(const std::vector& dm_hl, @@ -48,7 +48,7 @@ void DeePKS_domain::cal_o_delta(const std::vector& dm_hl, } } Parallel_Reduce::reduce_all(o_delta_tmp); - + const double* o_delta_ptr = reinterpret_cast(&o_delta_tmp); o_delta(ik, 0) = o_delta_ptr[0]; // real part in complex case } diff --git a/source/module_hamilt_lcao/module_deepks/deepks_orbital.h b/source/module_hamilt_lcao/module_deepks/deepks_orbital.h index 5270d48489..03678d5dce 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_orbital.h +++ b/source/module_hamilt_lcao/module_deepks/deepks_orbital.h @@ -3,12 +3,12 @@ #ifdef __MLALGO -#include "module_base/complexmatrix.h" -#include "module_base/intarray.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_elecstate/module_dm/density_matrix.h" +#include "source_base/complexmatrix.h" +#include "source_base/intarray.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" namespace DeePKS_domain { diff --git a/source/module_hamilt_lcao/module_deepks/deepks_orbpre.cpp b/source/module_hamilt_lcao/module_deepks/deepks_orbpre.cpp index 0042c77b89..d0fe67b946 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_orbpre.cpp +++ b/source/module_hamilt_lcao/module_deepks/deepks_orbpre.cpp @@ -7,12 +7,12 @@ #include "deepks_orbpre.h" #include "LCAO_deepks_io.h" // mohan add 2024-07-22 -#include "module_base/blas_connector.h" -#include "module_base/constants.h" -#include "module_base/libm/libm.h" -#include "module_base/parallel_reduce.h" #include "module_hamilt_lcao/module_hcontainer/atom_pair.h" #include "module_parameter/parameter.h" +#include "source_base/blas_connector.h" +#include "source_base/constants.h" +#include "source_base/libm/libm.h" +#include "source_base/parallel_reduce.h" // calculates orbital_precalc[nks,NAt,NDscrpt] = gevdm * orbital_pdm; // orbital_pdm[nks,Inl,nm,nm] = dm_hl * overlap * overlap; diff --git a/source/module_hamilt_lcao/module_deepks/deepks_orbpre.h b/source/module_hamilt_lcao/module_deepks/deepks_orbpre.h index 6461a1723b..d8785c91d6 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_orbpre.h +++ b/source/module_hamilt_lcao/module_deepks/deepks_orbpre.h @@ -3,15 +3,15 @@ #ifdef __MLALGO -#include "module_base/complexmatrix.h" -#include "module_base/intarray.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_basis/module_nao/two_center_integrator.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_elecstate/module_dm/density_matrix.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "source_base/complexmatrix.h" +#include "source_base/intarray.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" #include #include diff --git a/source/module_hamilt_lcao/module_deepks/deepks_pdm.cpp b/source/module_hamilt_lcao/module_deepks/deepks_pdm.cpp index 13befa807f..7a62de72da 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_pdm.cpp +++ b/source/module_hamilt_lcao/module_deepks/deepks_pdm.cpp @@ -17,12 +17,12 @@ #include "deepks_iterate.h" #include "deepks_pdm.h" -#include "module_base/constants.h" -#include "module_base/libm/libm.h" -#include "module_base/timer.h" #include "module_hamilt_lcao/module_hcontainer/atom_pair.h" +#include "source_base/constants.h" +#include "source_base/libm/libm.h" +#include "source_base/timer.h" #ifdef __MPI -#include "module_base/parallel_reduce.h" +#include "source_base/parallel_reduce.h" #endif void DeePKS_domain::read_pdm(bool read_pdm_file, @@ -99,77 +99,76 @@ void DeePKS_domain::update_dmr(const std::vector>& k // save whether the pair with R has been calculated std::vector> calculated_pairs(0); - DeePKS_domain::iterate_ad2( - ucell, - GridD, - orb, - false, // no trace_alpha - [&](const int iat, - const ModuleBase::Vector3& tau0, - const int ibt1, - const ModuleBase::Vector3& tau1, - const int start1, - const int nw1_tot, - ModuleBase::Vector3 dR1, - const int ibt2, - const ModuleBase::Vector3& tau2, - const int start2, - const int nw2_tot, - ModuleBase::Vector3 dR2) - { - auto row_indexes = pv.get_indexes_row(ibt1); - auto col_indexes = pv.get_indexes_col(ibt2); - if (row_indexes.size() * col_indexes.size() == 0) - { - return; // to next loop - } - - hamilt::AtomPair dm_pair = dmr_deepks->get_atom_pair(ibt1, ibt2); - - int dRx = 0; - int dRy = 0; - int dRz = 0; - if (std::is_same>::value) - { - dRx = (dR1 - dR2).x; - dRy = (dR1 - dR2).y; - dRz = (dR1 - dR2).z; - } - ModuleBase::Vector3 dR(dRx, dRy, dRz); - - // avoid duplicate calculation - if (std::find(calculated_pairs.begin(), calculated_pairs.end(), - std::make_tuple(ibt1, ibt2, dR.x, dR.y, dR.z)) - != calculated_pairs.end()) - { - return; - } - calculated_pairs.push_back(std::make_tuple(ibt1, ibt2, dR.x, dR.y, dR.z)); - - dm_pair.find_R(dR); - hamilt::BaseMatrix* dmr_ptr = dm_pair.find_matrix(dR); - dmr_ptr->set_zero(); // must reset to zero to avoid accumulation! - - for (int ik = 0; ik < dmk.size(); ik++) - { - std::complex kphase = std::complex(1, 0); - if (std::is_same>::value) - { - const double arg = -(kvec_d[ik] * ModuleBase::Vector3(dR)) * ModuleBase::TWO_PI; - kphase = std::complex(cos(arg), sin(arg)); - } - TK* kphase_ptr = reinterpret_cast(&kphase); - if (ModuleBase::GlobalFunc::IS_COLUMN_MAJOR_KS_SOLVER(PARAM.inp.ks_solver)) - { - dm_pair.add_from_matrix(dmk[ik].data(), pv.get_row_size(), *kphase_ptr, 1); - } - else - { - dm_pair.add_from_matrix(dmk[ik].data(), pv.get_col_size(), *kphase_ptr, 0); - } - } - } - ); + DeePKS_domain::iterate_ad2(ucell, + GridD, + orb, + false, // no trace_alpha + [&](const int iat, + const ModuleBase::Vector3& tau0, + const int ibt1, + const ModuleBase::Vector3& tau1, + const int start1, + const int nw1_tot, + ModuleBase::Vector3 dR1, + const int ibt2, + const ModuleBase::Vector3& tau2, + const int start2, + const int nw2_tot, + ModuleBase::Vector3 dR2) { + auto row_indexes = pv.get_indexes_row(ibt1); + auto col_indexes = pv.get_indexes_col(ibt2); + if (row_indexes.size() * col_indexes.size() == 0) + { + return; // to next loop + } + + hamilt::AtomPair dm_pair = dmr_deepks->get_atom_pair(ibt1, ibt2); + + int dRx = 0; + int dRy = 0; + int dRz = 0; + if (std::is_same>::value) + { + dRx = (dR1 - dR2).x; + dRy = (dR1 - dR2).y; + dRz = (dR1 - dR2).z; + } + ModuleBase::Vector3 dR(dRx, dRy, dRz); + + // avoid duplicate calculation + if (std::find(calculated_pairs.begin(), + calculated_pairs.end(), + std::make_tuple(ibt1, ibt2, dR.x, dR.y, dR.z)) + != calculated_pairs.end()) + { + return; + } + calculated_pairs.push_back(std::make_tuple(ibt1, ibt2, dR.x, dR.y, dR.z)); + + dm_pair.find_R(dR); + hamilt::BaseMatrix* dmr_ptr = dm_pair.find_matrix(dR); + dmr_ptr->set_zero(); // must reset to zero to avoid accumulation! + + for (int ik = 0; ik < dmk.size(); ik++) + { + std::complex kphase = std::complex(1, 0); + if (std::is_same>::value) + { + const double arg + = -(kvec_d[ik] * ModuleBase::Vector3(dR)) * ModuleBase::TWO_PI; + kphase = std::complex(cos(arg), sin(arg)); + } + TK* kphase_ptr = reinterpret_cast(&kphase); + if (ModuleBase::GlobalFunc::IS_COLUMN_MAJOR_KS_SOLVER(PARAM.inp.ks_solver)) + { + dm_pair.add_from_matrix(dmk[ik].data(), pv.get_row_size(), *kphase_ptr, 1); + } + else + { + dm_pair.add_from_matrix(dmk[ik].data(), pv.get_col_size(), *kphase_ptr, 0); + } + } + }); return; } diff --git a/source/module_hamilt_lcao/module_deepks/deepks_pdm.h b/source/module_hamilt_lcao/module_deepks/deepks_pdm.h index 8aec2a3bab..a3de6acc3b 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_pdm.h +++ b/source/module_hamilt_lcao/module_deepks/deepks_pdm.h @@ -3,12 +3,12 @@ #ifdef __MLALGO -#include "module_base/complexmatrix.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_elecstate/module_dm/density_matrix.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "source_base/complexmatrix.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" #include #include diff --git a/source/module_hamilt_lcao/module_deepks/deepks_phialpha.cpp b/source/module_hamilt_lcao/module_deepks/deepks_phialpha.cpp index 316bc67291..362392f582 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_phialpha.cpp +++ b/source/module_hamilt_lcao/module_deepks/deepks_phialpha.cpp @@ -11,9 +11,9 @@ #include "deepks_phialpha.h" #include "deepks_iterate.h" -#include "module_base/timer.h" -#include "module_base/vector3.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" +#include "source_base/vector3.h" void DeePKS_domain::allocate_phialpha(const bool& cal_deri, const UnitCell& ucell, @@ -48,8 +48,7 @@ void DeePKS_domain::allocate_phialpha(const bool& cal_deri, const ModuleBase::Vector3& tau1, const int start, const int nw_tot, - ModuleBase::Vector3 dR) - { + ModuleBase::Vector3 dR) { // Create virtual atom_begin_row and atom_begin_col for the construction of atom pair // In DeePKS, phialpha is used to save data, so it is safe to do this int atom_begin_row[ucell.nat]; @@ -63,8 +62,7 @@ void DeePKS_domain::allocate_phialpha(const bool& cal_deri, // Notice: in AtomPair, the usage is set_size(ncol, nrow) pair.set_size(nw_alpha, nw_tot); phialpha[0]->insert_pair(pair); - } - ); + }); phialpha[0]->allocate(nullptr, true); // whether to calculate the derivative of phialpha @@ -109,8 +107,7 @@ void DeePKS_domain::build_phialpha(const bool& cal_deri, const ModuleBase::Vector3& tau1, const int start, const int nw_tot, - ModuleBase::Vector3 dR) - { + ModuleBase::Vector3 dR) { int R[3] = {dR.x, dR.y, dR.z}; const int T1 = ucell.iat2it[ibt]; const Atom* atom1 = &ucell.atoms[T1]; @@ -177,8 +174,7 @@ void DeePKS_domain::build_phialpha(const bool& cal_deri, } } } // end iw - } - ); + }); ModuleBase::timer::tick("DeePKS_domain", "build_phialpha"); return; diff --git a/source/module_hamilt_lcao/module_deepks/deepks_phialpha.h b/source/module_hamilt_lcao/module_deepks/deepks_phialpha.h index c466fdba27..faef70e580 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_phialpha.h +++ b/source/module_hamilt_lcao/module_deepks/deepks_phialpha.h @@ -3,13 +3,13 @@ #ifdef __MLALGO -#include "module_base/complexmatrix.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_basis/module_nao/two_center_integrator.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "source_base/complexmatrix.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" #include #include diff --git a/source/module_hamilt_lcao/module_deepks/deepks_spre.cpp b/source/module_hamilt_lcao/module_deepks/deepks_spre.cpp index 1865bca2d8..82509133c0 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_spre.cpp +++ b/source/module_hamilt_lcao/module_deepks/deepks_spre.cpp @@ -3,13 +3,13 @@ #include "deepks_spre.h" #include "deepks_iterate.h" -#include "module_base/constants.h" -#include "module_base/libm/libm.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" -#include "module_base/vector3.h" #include "module_hamilt_lcao/module_hcontainer/atom_pair.h" #include "module_parameter/parameter.h" +#include "source_base/constants.h" +#include "source_base/libm/libm.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/vector3.h" /// this subroutine calculates the gradient of PDM wrt strain tensor: /// gdmepsl = d/d\epsilon_{ab} * @@ -55,8 +55,7 @@ void DeePKS_domain::cal_gdmepsl(const int lmaxd, const ModuleBase::Vector3& tau2, const int start2, const int nw2_tot, - ModuleBase::Vector3 dR2) - { + ModuleBase::Vector3 dR2) { double r1[3] = {0, 0, 0}; double r2[3] = {0, 0, 0}; r1[0] = (tau1.x - tau0.x); @@ -143,8 +142,7 @@ void DeePKS_domain::cal_gdmepsl(const int lmaxd, dm_current++; } // iw2 } // iw1 - } - ); + }); #ifdef __MPI Parallel_Reduce::reduce_all(gdmepsl.data_ptr(), 6 * inlmax * nm * nm); diff --git a/source/module_hamilt_lcao/module_deepks/deepks_spre.h b/source/module_hamilt_lcao/module_deepks/deepks_spre.h index a95a041aca..3309954511 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_spre.h +++ b/source/module_hamilt_lcao/module_deepks/deepks_spre.h @@ -3,14 +3,14 @@ #ifdef __MLALGO -#include "module_base/complexmatrix.h" -#include "module_base/intarray.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_basis/module_nao/two_center_integrator.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "source_base/complexmatrix.h" +#include "source_base/intarray.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" #include #include diff --git a/source/module_hamilt_lcao/module_deepks/deepks_vdelta.cpp b/source/module_hamilt_lcao/module_deepks/deepks_vdelta.cpp index bdfb1454f8..60aa996ac9 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_vdelta.cpp +++ b/source/module_hamilt_lcao/module_deepks/deepks_vdelta.cpp @@ -11,11 +11,11 @@ #ifdef __MLALGO #include "deepks_vdelta.h" -#include "module_base/global_function.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" +#include "source_base/global_function.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" // calculating sum of correction band energies template diff --git a/source/module_hamilt_lcao/module_deepks/deepks_vdelta.h b/source/module_hamilt_lcao/module_deepks/deepks_vdelta.h index 8cfd71f444..e02d759b3a 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_vdelta.h +++ b/source/module_hamilt_lcao/module_deepks/deepks_vdelta.h @@ -2,9 +2,9 @@ #define DEEPKS_VDELTA_H #ifdef __MLALGO -#include "module_base/complexmatrix.h" -#include "module_base/matrix.h" #include "module_basis/module_ao/parallel_orbitals.h" +#include "source_base/complexmatrix.h" +#include "source_base/matrix.h" // break the circular dependency of HamiltLCAO namespace hamilt diff --git a/source/module_hamilt_lcao/module_deepks/deepks_vdpre.cpp b/source/module_hamilt_lcao/module_deepks/deepks_vdpre.cpp index a5942885ac..3a236c1f8f 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_vdpre.cpp +++ b/source/module_hamilt_lcao/module_deepks/deepks_vdpre.cpp @@ -10,12 +10,12 @@ #include "LCAO_deepks_io.h" // mohan add 2024-07-22 #include "deepks_iterate.h" -#include "module_base/blas_connector.h" -#include "module_base/constants.h" -#include "module_base/libm/libm.h" -#include "module_base/parallel_reduce.h" #include "module_hamilt_lcao/module_hcontainer/atom_pair.h" #include "module_parameter/parameter.h" +#include "source_base/blas_connector.h" +#include "source_base/constants.h" +#include "source_base/libm/libm.h" +#include "source_base/parallel_reduce.h" // calculates v_delta_precalc[nks,nlocal,nlocal,NAt,NDscrpt] = gevdm * v_delta_pdm; // v_delta_pdm[nks,nlocal,nlocal,Inl,nm,nm] = overlap * overlap; @@ -67,8 +67,7 @@ void DeePKS_domain::cal_v_delta_precalc(const int nlocal, const ModuleBase::Vector3& tau2, const int start2, const int nw2_tot, - ModuleBase::Vector3 dR2) - { + ModuleBase::Vector3 dR2) { const int T0 = ucell.iat2it[iat]; const int I0 = ucell.iat2ia[iat]; if (phialpha[0]->find_matrix(iat, ibt1, dR1.x, dR1.y, dR1.z) == nullptr @@ -130,8 +129,7 @@ void DeePKS_domain::cal_v_delta_precalc(const int nlocal, } // ik } // iw2 } // iw1 - } - ); + }); #ifdef __MPI const int size = nks * nlocal * nlocal * inlmax * (2 * lmaxd + 1) * (2 * lmaxd + 1); TK_tensor* data_tensor_ptr = v_delta_pdm.data_ptr(); @@ -196,65 +194,63 @@ void DeePKS_domain::prepare_phialpha(const int nlocal, auto accessor = phialpha_out.accessor::value, double, c10::complex>, 5>(); - DeePKS_domain::iterate_ad1( - ucell, - GridD, - orb, - false, // no trace_alpha - [&](const int iat, - const ModuleBase::Vector3& tau0, - const int ibt, - const ModuleBase::Vector3& tau, - const int start, - const int nw_tot, - ModuleBase::Vector3 dR) - { - if (phialpha[0]->find_matrix(iat, ibt, dR.x, dR.y, dR.z) == nullptr) - { - return; // to next loop - } + DeePKS_domain::iterate_ad1(ucell, + GridD, + orb, + false, // no trace_alpha + [&](const int iat, + const ModuleBase::Vector3& tau0, + const int ibt, + const ModuleBase::Vector3& tau, + const int start, + const int nw_tot, + ModuleBase::Vector3 dR) { + if (phialpha[0]->find_matrix(iat, ibt, dR.x, dR.y, dR.z) == nullptr) + { + return; // to next loop + } - // middle loop : all atomic basis on the adjacent atom ad - for (int iw1 = 0; iw1 < nw_tot; ++iw1) - { - const int iw1_all = start + iw1; - const int iw1_local = pv.global2local_row(iw1_all); - const int iw2_local = pv.global2local_col(iw1_all); - if (iw1_local < 0 || iw2_local < 0) - { - continue; - } - hamilt::BaseMatrix* overlap = phialpha[0]->find_matrix(iat, ibt, dR); + // middle loop : all atomic basis on the adjacent atom ad + for (int iw1 = 0; iw1 < nw_tot; ++iw1) + { + const int iw1_all = start + iw1; + const int iw1_local = pv.global2local_row(iw1_all); + const int iw2_local = pv.global2local_col(iw1_all); + if (iw1_local < 0 || iw2_local < 0) + { + continue; + } + hamilt::BaseMatrix* overlap = phialpha[0]->find_matrix(iat, ibt, dR); - for (int ik = 0; ik < nks; ik++) - { - std::complex kphase = std::complex(1.0, 0.0); - if (std::is_same>::value) - { - const double arg = -(kvec_d[ik] * ModuleBase::Vector3(dR)) * ModuleBase::TWO_PI; - kphase = std::complex(cos(arg), sin(arg)); - } - TK_tensor* kpase_ptr = reinterpret_cast(&kphase); - int ib = 0; - int nl = 0; - for (int L0 = 0; L0 <= orb.Alpha[0].getLmax(); ++L0) - { - for (int N0 = 0; N0 < orb.Alpha[0].getNchi(L0); ++N0) - { - const int nm = 2 * L0 + 1; - for (int m1 = 0; m1 < nm; ++m1) // nm = 1 for s, 3 for p, 5 for d - { - TK_tensor tmp = overlap->get_value(iw1, ib + m1) * *kpase_ptr; - accessor[iat][nl][ik][iw1_all][m1] += tmp; - } - ib += nm; - nl++; - } - } - } // end ik - } // end iw - } - ); + for (int ik = 0; ik < nks; ik++) + { + std::complex kphase = std::complex(1.0, 0.0); + if (std::is_same>::value) + { + const double arg = -(kvec_d[ik] * ModuleBase::Vector3(dR)) + * ModuleBase::TWO_PI; + kphase = std::complex(cos(arg), sin(arg)); + } + TK_tensor* kpase_ptr = reinterpret_cast(&kphase); + int ib = 0; + int nl = 0; + for (int L0 = 0; L0 <= orb.Alpha[0].getLmax(); ++L0) + { + for (int N0 = 0; N0 < orb.Alpha[0].getNchi(L0); ++N0) + { + const int nm = 2 * L0 + 1; + for (int m1 = 0; m1 < nm; ++m1) // nm = 1 for s, 3 for p, 5 for d + { + TK_tensor tmp = overlap->get_value(iw1, ib + m1) * *kpase_ptr; + accessor[iat][nl][ik][iw1_all][m1] += tmp; + } + ib += nm; + nl++; + } + } + } // end ik + } // end iw + }); #ifdef __MPI int size = nat * nlmax * nks * nlocal * mmax; diff --git a/source/module_hamilt_lcao/module_deepks/deepks_vdpre.h b/source/module_hamilt_lcao/module_deepks/deepks_vdpre.h index d9800c4eec..7b2f3e1418 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_vdpre.h +++ b/source/module_hamilt_lcao/module_deepks/deepks_vdpre.h @@ -3,14 +3,14 @@ #ifdef __MLALGO -#include "module_base/complexmatrix.h" -#include "module_base/intarray.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_basis/module_nao/two_center_integrator.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "source_base/complexmatrix.h" +#include "source_base/intarray.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" #include #include diff --git a/source/module_hamilt_lcao/module_deepks/deepks_vdrpre.cpp b/source/module_hamilt_lcao/module_deepks/deepks_vdrpre.cpp index 3dc97b72c2..69538e62ff 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_vdrpre.cpp +++ b/source/module_hamilt_lcao/module_deepks/deepks_vdrpre.cpp @@ -6,24 +6,24 @@ #include "LCAO_deepks_io.h" // mohan add 2024-07-22 #include "deepks_iterate.h" -#include "module_base/blas_connector.h" -#include "module_base/constants.h" -#include "module_base/libm/libm.h" -#include "module_base/parallel_reduce.h" #include "module_hamilt_lcao/module_hcontainer/atom_pair.h" #include "module_parameter/parameter.h" +#include "source_base/blas_connector.h" +#include "source_base/constants.h" +#include "source_base/libm/libm.h" +#include "source_base/parallel_reduce.h" void DeePKS_domain::prepare_phialpha_r(const int nlocal, - const int lmaxd, - const int inlmax, - const int nat, - const std::vector*> phialpha, - const UnitCell& ucell, - const LCAO_Orbitals& orb, - const Parallel_Orbitals& pv, - const Grid_Driver& GridD, - torch::Tensor& phialpha_r_out, - torch::Tensor& R_query) + const int lmaxd, + const int inlmax, + const int nat, + const std::vector*> phialpha, + const UnitCell& ucell, + const LCAO_Orbitals& orb, + const Parallel_Orbitals& pv, + const Grid_Driver& GridD, + torch::Tensor& phialpha_r_out, + torch::Tensor& R_query) { ModuleBase::TITLE("DeePKS_domain", "prepare_phialpha_r"); ModuleBase::timer::tick("DeePKS_domain", "prepare_phialpha_r"); @@ -41,55 +41,53 @@ void DeePKS_domain::prepare_phialpha_r(const int nlocal, phialpha[0]->loop_R(iR, R_accessor[iR][0], R_accessor[iR][1], R_accessor[iR][2]); } - DeePKS_domain::iterate_ad1( - ucell, - GridD, - orb, - false, // no trace_alpha - [&](const int iat, - const ModuleBase::Vector3& tau0, - const int ibt, - const ModuleBase::Vector3& tau, - const int start, - const int nw_tot, - ModuleBase::Vector3 dR) - { - if (phialpha[0]->find_matrix(iat, ibt, dR.x, dR.y, dR.z) == nullptr) - { - return; // to next loop - } + DeePKS_domain::iterate_ad1(ucell, + GridD, + orb, + false, // no trace_alpha + [&](const int iat, + const ModuleBase::Vector3& tau0, + const int ibt, + const ModuleBase::Vector3& tau, + const int start, + const int nw_tot, + ModuleBase::Vector3 dR) { + if (phialpha[0]->find_matrix(iat, ibt, dR.x, dR.y, dR.z) == nullptr) + { + return; // to next loop + } - // middle loop : all atomic basis on the adjacent atom ad - for (int iw1 = 0; iw1 < nw_tot; ++iw1) - { - const int iw1_all = start + iw1; - const int iw1_local = pv.global2local_row(iw1_all); - const int iw2_local = pv.global2local_col(iw1_all); - if (iw1_local < 0 || iw2_local < 0) - { - continue; - } - hamilt::BaseMatrix* overlap = phialpha[0]->find_matrix(iat, ibt, dR); - const int iR = phialpha[0]->find_R(dR); + // middle loop : all atomic basis on the adjacent atom ad + for (int iw1 = 0; iw1 < nw_tot; ++iw1) + { + const int iw1_all = start + iw1; + const int iw1_local = pv.global2local_row(iw1_all); + const int iw2_local = pv.global2local_col(iw1_all); + if (iw1_local < 0 || iw2_local < 0) + { + continue; + } + hamilt::BaseMatrix* overlap = phialpha[0]->find_matrix(iat, ibt, dR); + const int iR = phialpha[0]->find_R(dR); - int ib = 0; - int nl = 0; - for (int L0 = 0; L0 <= orb.Alpha[0].getLmax(); ++L0) - { - for (int N0 = 0; N0 < orb.Alpha[0].getNchi(L0); ++N0) - { - const int nm = 2 * L0 + 1; - for (int m1 = 0; m1 < nm; ++m1) // nm = 1 for s, 3 for p, 5 for d - { - accessor[iR][iat][nl][iw1_all][m1] += overlap->get_value(iw1, ib + m1); - } - ib += nm; - nl++; - } - } - } // end iw - } - ); + int ib = 0; + int nl = 0; + for (int L0 = 0; L0 <= orb.Alpha[0].getLmax(); ++L0) + { + for (int N0 = 0; N0 < orb.Alpha[0].getNchi(L0); ++N0) + { + const int nm = 2 * L0 + 1; + for (int m1 = 0; m1 < nm; ++m1) // nm = 1 for s, 3 for p, 5 for d + { + accessor[iR][iat][nl][iw1_all][m1] + += overlap->get_value(iw1, ib + m1); + } + ib += nm; + nl++; + } + } + } // end iw + }); #ifdef __MPI int size = size_R * nat * nlmax * nlocal * mmax; diff --git a/source/module_hamilt_lcao/module_deepks/deepks_vdrpre.h b/source/module_hamilt_lcao/module_deepks/deepks_vdrpre.h index 11a5daaf7a..e849688247 100644 --- a/source/module_hamilt_lcao/module_deepks/deepks_vdrpre.h +++ b/source/module_hamilt_lcao/module_deepks/deepks_vdrpre.h @@ -3,14 +3,14 @@ #ifdef __MLALGO -#include "module_base/complexmatrix.h" -#include "module_base/intarray.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_basis/module_nao/two_center_integrator.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "source_base/complexmatrix.h" +#include "source_base/intarray.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" #include #include diff --git a/source/module_hamilt_lcao/module_deepks/test/LCAO_deepks_test.h b/source/module_hamilt_lcao/module_deepks/test/LCAO_deepks_test.h index f1d99a0b09..3faa514555 100644 --- a/source/module_hamilt_lcao/module_deepks/test/LCAO_deepks_test.h +++ b/source/module_hamilt_lcao/module_deepks/test/LCAO_deepks_test.h @@ -1,10 +1,10 @@ #include "klist.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" #include "module_basis/module_ao/ORB_read.h" #include "module_cell/module_neighbor/sltk_atom_arrange.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_cell/unitcell.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" //#include "parallel_orbitals.h" #include "../LCAO_deepks.h" diff --git a/source/module_hamilt_lcao/module_deepks/test/LCAO_deepks_test_prep.cpp b/source/module_hamilt_lcao/module_deepks/test/LCAO_deepks_test_prep.cpp index d4924ece85..076544100c 100644 --- a/source/module_hamilt_lcao/module_deepks/test/LCAO_deepks_test_prep.cpp +++ b/source/module_hamilt_lcao/module_deepks/test/LCAO_deepks_test_prep.cpp @@ -1,5 +1,5 @@ #include "LCAO_deepks_test.h" -#include "module_base/global_variable.h" +#include "source_base/global_variable.h" #define private public #include "module_parameter/parameter.h" #undef private diff --git a/source/module_hamilt_lcao/module_deepks/test/Makefile b/source/module_hamilt_lcao/module_deepks/test/Makefile index 34553c1c72..099b23fda2 100644 --- a/source/module_hamilt_lcao/module_deepks/test/Makefile +++ b/source/module_hamilt_lcao/module_deepks/test/Makefile @@ -46,7 +46,7 @@ OPTS = ${INCLUDES} -Ofast -std=c++14 -march=native -xHost -m64 -qopenmp -Werror include Makefile.Objects VPATH=../../../source_main\ -:../../module_base\ +:../../source_base\ :../../module_io\ :../../module_hamilt_pw/hamilt_pwdft\ :../../module_basis/module_ao\ diff --git a/source/module_hamilt_lcao/module_deepks/test/klist.h b/source/module_hamilt_lcao/module_deepks/test/klist.h index e4fa22b0d7..2cf1e71cfd 100644 --- a/source/module_hamilt_lcao/module_deepks/test/klist.h +++ b/source/module_hamilt_lcao/module_deepks/test/klist.h @@ -1,72 +1,69 @@ -///klist : adapted from klist from module_hamilt_pw/hamilt_pwdft -///deals with k point sampling +/// klist : adapted from klist from module_hamilt_pw/hamilt_pwdft +/// deals with k point sampling + +#include "source_base/global_function.h" +#include "source_base/matrix3.h" +#include "source_base/memory.h" +#include "source_base/vector3.h" -#include "module_base/vector3.h" -#include "module_base/matrix3.h" -#include "module_base/memory.h" -#include "module_base/global_function.h" -#include #include +#include namespace Test_Deepks { class K_Vectors { -public: - - ModuleBase::Vector3 *kvec_c; // Cartesian coordinates of k points - std::vector> kvec_d; // Direct coordinates of k points + public: + ModuleBase::Vector3* kvec_c; // Cartesian coordinates of k points + std::vector> kvec_d; // Direct coordinates of k points - double *wk; // wk, weight of k points + double* wk; // wk, weight of k points - int *isk; // distinguish spin up and down k points + int* isk; // distinguish spin up and down k points - int nkstot; // total number of k points + int nkstot; // total number of k points - int nmp[3]; // Number of Monhorst-Pack + int nmp[3]; // Number of Monhorst-Pack K_Vectors(); ~K_Vectors(); - void set( - const std::string &k_file_name, - const int& nspin, - const ModuleBase::Matrix3 &reciprocal_vec, - const ModuleBase::Matrix3 &latvec, - bool &GAMMA_ONLY_LOCAL, - std::ofstream &ofs_running, - std::ofstream &ofs_warning); + void set(const std::string& k_file_name, + const int& nspin, + const ModuleBase::Matrix3& reciprocal_vec, + const ModuleBase::Matrix3& latvec, + bool& GAMMA_ONLY_LOCAL, + std::ofstream& ofs_running, + std::ofstream& ofs_warning); -private: + private: int nspin; bool kc_done; bool kd_done; - double koffset[3]; // used only in automatic k-points. - std::string k_kword; //LiuXh add 20180619 - int k_nkstot; //LiuXh add 20180619 + double koffset[3]; // used only in automatic k-points. + std::string k_kword; // LiuXh add 20180619 + int k_nkstot; // LiuXh add 20180619 // step 1 : generate kpoints - bool read_kpoints( - const std::string &fn, - bool &GAMMA_ONLY_LOCAL, - std::ofstream &ofs_warning, - std::ofstream &ofs_running); - void Monkhorst_Pack(const int *nmp_in,const double *koffset_in,const int tipo); - double Monkhorst_Pack_formula( const int &k_type, const double &offset, - const int& n, const int &dim); + bool read_kpoints(const std::string& fn, + bool& GAMMA_ONLY_LOCAL, + std::ofstream& ofs_warning, + std::ofstream& ofs_running); + void Monkhorst_Pack(const int* nmp_in, const double* koffset_in, const int tipo); + double Monkhorst_Pack_formula(const int& k_type, const double& offset, const int& n, const int& dim); // step 2 : set both kvec and kved; normalize weight - void set_both_kvec(const ModuleBase::Matrix3 &G,const ModuleBase::Matrix3 &Rm, std::ofstream &ofs_running); - void renew(const int &kpoint_number); - void normalize_wk( const int °spin ); + void set_both_kvec(const ModuleBase::Matrix3& G, const ModuleBase::Matrix3& Rm, std::ofstream& ofs_running); + void renew(const int& kpoint_number); + void normalize_wk(const int& degspin); // step 3 : *2 or *4 kpoints. // *2 for LSDA // *4 for non-collinear - void set_kup_and_kdw(std::ofstream &ofs_running); + void set_kup_and_kdw(std::ofstream& ofs_running); // step 4 // print k lists. - void print_klists(std::ofstream &fn_running); + void print_klists(std::ofstream& fn_running); }; -} +} // namespace Test_Deepks diff --git a/source/module_hamilt_lcao/module_deepks/test/parallel_orbitals.h b/source/module_hamilt_lcao/module_deepks/test/parallel_orbitals.h index b3a9148e06..d2a8097f45 100644 --- a/source/module_hamilt_lcao/module_deepks/test/parallel_orbitals.h +++ b/source/module_hamilt_lcao/module_deepks/test/parallel_orbitals.h @@ -1,25 +1,24 @@ -///adapted from parallel_orbitals from module_basis/module_ao -///deals with the parallelization of atomic basis +/// adapted from parallel_orbitals from module_basis/module_ao +/// deals with the parallelization of atomic basis -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/memory.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" namespace Test_Deepks { - class Parallel_Orbitals - { - public: - - Parallel_Orbitals(); - ~Parallel_Orbitals(); +class Parallel_Orbitals +{ + public: + Parallel_Orbitals(); + ~Parallel_Orbitals(); - int* global2local_row; - int* global2local_col; - void set_global2local(void); + int* global2local_row; + int* global2local_col; + void set_global2local(void); - int ncol; - int nrow; - int nloc; - }; -} + int ncol; + int nrow; + int nloc; +}; +} // namespace Test_Deepks diff --git a/source/module_hamilt_lcao/module_deltaspin/basic_funcs.cpp b/source/module_hamilt_lcao/module_deltaspin/basic_funcs.cpp index 0e47397e9d..f9bf57d46d 100644 --- a/source/module_hamilt_lcao/module_deltaspin/basic_funcs.cpp +++ b/source/module_hamilt_lcao/module_deltaspin/basic_funcs.cpp @@ -1,22 +1,23 @@ #include "basic_funcs.h" +#include "source_base/constants.h" +#include "source_base/formatter.h" + #include -#include "module_base/formatter.h" -#include "module_base/constants.h" double maxval_abs_2d(const std::vector>& array) { double max = 0; for (const auto& value: array) { - max = std::max(max, std::abs(value.x)); - max = std::max(max, std::abs(value.y)); - max = std::max(max, std::abs(value.z)); + max = std::max(max, std::abs(value.x)); + max = std::max(max, std::abs(value.y)); + max = std::max(max, std::abs(value.z)); } return max; } -std::pair maxloc_abs_2d(const std::vector>& array) +std::pair maxloc_abs_2d(const std::vector>& array) { double max = 0; int i_max = 0; @@ -42,7 +43,7 @@ T sum_2d(const std::vector>& array) ModuleBase::Vector3 sum; for (const auto& element: array) { - sum += element; + sum += element; } T final_sum = sum.x + sum.y + sum.z; return final_sum; @@ -85,7 +86,7 @@ void subtract_2d(const std::vector>& array_1, result.reserve(size); for (int i = 0; i < size; i++) { - result[i] = array_1[i] - array_2[i]; + result[i] = array_1[i] - array_2[i]; } } @@ -135,15 +136,28 @@ void where_fill_scalar_else_2d(const std::vector>& arra } } -void print_2d(const std::string info, const std::vector> &array, const int nspin, const double unit_convert, std::ostream& ofs) +void print_2d(const std::string info, + const std::vector>& array, + const int nspin, + const double unit_convert, + std::ostream& ofs) { ofs << info << std::endl; int iat = 0; - for (const auto &row : array) + for (const auto& row: array) { iat += 1; - if (nspin == 2) { ofs << FmtCore::format("ATOM %6d %20.10f\n", iat, row.z*unit_convert); - } else if (nspin == 4) { ofs << FmtCore::format("ATOM %6d %20.10f %20.10f %20.10f\n", iat, row.x*unit_convert, row.y*unit_convert, row.z*unit_convert); -} + if (nspin == 2) + { + ofs << FmtCore::format("ATOM %6d %20.10f\n", iat, row.z * unit_convert); + } + else if (nspin == 4) + { + ofs << FmtCore::format("ATOM %6d %20.10f %20.10f %20.10f\n", + iat, + row.x * unit_convert, + row.y * unit_convert, + row.z * unit_convert); + } } } \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_deltaspin/basic_funcs.h b/source/module_hamilt_lcao/module_deltaspin/basic_funcs.h index eb81a782cb..86c416f403 100644 --- a/source/module_hamilt_lcao/module_deltaspin/basic_funcs.h +++ b/source/module_hamilt_lcao/module_deltaspin/basic_funcs.h @@ -1,11 +1,11 @@ #ifndef BASIC_FUNCS_H #define BASIC_FUNCS_H +#include "source_base/vector3.h" + #include -#include #include - -#include "module_base/vector3.h" +#include /** * @brief Find the maximum absolute value in a 2D array. @@ -15,7 +15,7 @@ double maxval_abs_2d(const std::vector>& array); /** * @brief Find the maximum absolute value in a 2D array and its index. */ -std::pair maxloc_abs_2d(const std::vector>& array); +std::pair maxloc_abs_2d(const std::vector>& array); /** * @brief sum of all elements in a 2D array. @@ -64,6 +64,10 @@ void where_fill_scalar_else_2d(const std::vector>& arra const std::vector>& rest, std::vector>& result); -void print_2d(const std::string info, const std::vector> &array, const int nspin, const double unit_convert = 1.0, std::ostream& ofs = std::cout); +void print_2d(const std::string info, + const std::vector>& array, + const int nspin, + const double unit_convert = 1.0, + std::ostream& ofs = std::cout); #endif // BASIC_FUNCS_H \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_deltaspin/cal_mw.cpp b/source/module_hamilt_lcao/module_deltaspin/cal_mw.cpp index 25b2e4e879..a52e114d67 100644 --- a/source/module_hamilt_lcao/module_deltaspin/cal_mw.cpp +++ b/source/module_hamilt_lcao/module_deltaspin/cal_mw.cpp @@ -1,13 +1,13 @@ -#include - -#include "module_base/matrix.h" -#include "module_base/name_angular.h" -#include "module_base/scalapack_connector.h" -#include "module_base/tool_title.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/onsite_projector.h" -#include "spin_constrain.h" #include "module_parameter/parameter.h" +#include "source_base/matrix.h" +#include "source_base/name_angular.h" +#include "source_base/scalapack_connector.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" +#include "spin_constrain.h" + +#include #ifdef __LCAO #include "module_elecstate/elecstate_lcao.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" @@ -23,26 +23,29 @@ void spinconstrain::SpinConstrain>::cal_mi_lcao(const int& const hamilt::HContainer* dmr = static_cast>*>(this->pelec)->get_DM()->get_DMR_pointer(1); std::vector moments; - if(PARAM.inp.nspin==2) + if (PARAM.inp.nspin == 2) { static_cast>*>(this->pelec)->get_DM()->switch_dmr(2); - moments = static_cast, double>>*>(this->p_operator)->cal_moment(dmr, this->get_constrain()); + moments = static_cast, double>>*>(this->p_operator) + ->cal_moment(dmr, this->get_constrain()); static_cast>*>(this->pelec)->get_DM()->switch_dmr(0); - for(int iat=0;iatMi_.size();iat++) + for (int iat = 0; iat < this->Mi_.size(); iat++) { this->Mi_[iat].x = 0.0; this->Mi_[iat].y = 0.0; this->Mi_[iat].z = moments[iat]; } } - else if(PARAM.inp.nspin==4) + else if (PARAM.inp.nspin == 4) { - moments = static_cast, std::complex>>*>(this->p_operator)->cal_moment(dmr, this->get_constrain()); - for(int iat=0;iatMi_.size();iat++) + moments = static_cast, std::complex>>*>( + this->p_operator) + ->cal_moment(dmr, this->get_constrain()); + for (int iat = 0; iat < this->Mi_.size(); iat++) { - this->Mi_[iat].x = moments[iat*3]; - this->Mi_[iat].y = moments[iat*3+1]; - this->Mi_[iat].z = moments[iat*3+2]; + this->Mi_[iat].x = moments[iat * 3]; + this->Mi_[iat].y = moments[iat * 3 + 1]; + this->Mi_[iat].z = moments[iat * 3 + 2]; } } @@ -58,16 +61,17 @@ void spinconstrain::SpinConstrain>::cal_mi_pw() ModuleBase::timer::tick("spinconstrain::SpinConstrain", "cal_mi_pw"); this->zero_Mi(); - if(PARAM.inp.device == "cpu") + if (PARAM.inp.device == "cpu") { auto* onsite_p = projectors::OnsiteProjector::get_instance(); // loop over k-points to calculate Mi of \sum_{k,i,l,m} std::complex* psi_pointer = nullptr; - psi::Psi, base_device::DEVICE_CPU>* psi_t = static_cast, base_device::DEVICE_CPU>*>(this->psi); + psi::Psi, base_device::DEVICE_CPU>* psi_t + = static_cast, base_device::DEVICE_CPU>*>(this->psi); const int nbands = psi_t->get_nbands(); const int nks = psi_t->get_nk(); const int npol = psi_t->get_npol(); - for(int ik = 0; ik < nks; ik++) + for (int ik = 0; ik < nks; ik++) { psi_t->fix_k(ik); psi_pointer = psi_t->get_pointer(); @@ -78,17 +82,18 @@ void spinconstrain::SpinConstrain>::cal_mi_pw() // becp(nbands*npol , nkb) // mag = wg * \sum_{nh}becp * becp int nkb = onsite_p->get_tot_nproj(); - for(int ib = 0;ibpelec->wg(ik, ib); int begin_ih = 0; - for(int iat = 0; iat < this->Mi_.size(); iat++) + for (int iat = 0; iat < this->Mi_.size(); iat++) { - std::complex occ[4] = {ModuleBase::ZERO, ModuleBase::ZERO, ModuleBase::ZERO, ModuleBase::ZERO}; + std::complex occ[4] + = {ModuleBase::ZERO, ModuleBase::ZERO, ModuleBase::ZERO, ModuleBase::ZERO}; const int nh = onsite_p->get_nh(iat); - for(int ih = 0; ih < nh; ih++) + for (int ih = 0; ih < nh; ih++) { - const int index = ib*2*nkb + begin_ih + ih; + const int index = ib * 2 * nkb + begin_ih + ih; occ[0] += conj(becp[index]) * becp[index]; occ[1] += conj(becp[index]) * becp[index + nkb]; occ[2] += conj(becp[index + nkb]) * becp[index]; @@ -109,11 +114,12 @@ void spinconstrain::SpinConstrain>::cal_mi_pw() auto* onsite_p = projectors::OnsiteProjector::get_instance(); // loop over k-points to calculate Mi of \sum_{k,i,l,m} std::complex* psi_pointer = nullptr; - psi::Psi, base_device::DEVICE_GPU>* psi_t = static_cast, base_device::DEVICE_GPU>*>(this->psi); + psi::Psi, base_device::DEVICE_GPU>* psi_t + = static_cast, base_device::DEVICE_GPU>*>(this->psi); const int nbands = psi_t->get_nbands(); const int nks = psi_t->get_nk(); const int npol = psi_t->get_npol(); - for(int ik = 0; ik < nks; ik++) + for (int ik = 0; ik < nks; ik++) { psi_t->fix_k(ik); psi_pointer = psi_t->get_pointer(); @@ -124,17 +130,18 @@ void spinconstrain::SpinConstrain>::cal_mi_pw() // becp(nbands*npol , nkb) // mag = wg * \sum_{nh}becp * becp int nkb = onsite_p->get_size_becp() / nbands / npol; - for(int ib = 0;ibpelec->wg(ik, ib); int begin_ih = 0; - for(int iat = 0; iat < this->Mi_.size(); iat++) + for (int iat = 0; iat < this->Mi_.size(); iat++) { - std::complex occ[4] = {ModuleBase::ZERO, ModuleBase::ZERO, ModuleBase::ZERO, ModuleBase::ZERO}; + std::complex occ[4] + = {ModuleBase::ZERO, ModuleBase::ZERO, ModuleBase::ZERO, ModuleBase::ZERO}; const int nh = onsite_p->get_nh(iat); - for(int ih = 0; ih < nh; ih++) + for (int ih = 0; ih < nh; ih++) { - const int index = ib*2*nkb + begin_ih + ih; + const int index = ib * 2 * nkb + begin_ih + ih; occ[0] += conj(becp[index]) * becp[index]; occ[1] += conj(becp[index]) * becp[index + nkb]; occ[2] += conj(becp[index + nkb]) * becp[index]; @@ -151,21 +158,22 @@ void spinconstrain::SpinConstrain>::cal_mi_pw() } #endif // reduce mag from all k-pools - Parallel_Reduce::reduce_double_allpool(PARAM.inp.kpar, GlobalV::NPROC_IN_POOL, &(this->Mi_[0][0]), 3 * this->Mi_.size()); - + Parallel_Reduce::reduce_double_allpool(PARAM.inp.kpar, + GlobalV::NPROC_IN_POOL, + &(this->Mi_[0][0]), + 3 * this->Mi_.size()); + ModuleBase::timer::tick("spinconstrain::SpinConstrain", "cal_mi_pw"); } template <> -void spinconstrain::SpinConstrain>::set_operator( - hamilt::Operator>* op_in) +void spinconstrain::SpinConstrain>::set_operator(hamilt::Operator>* op_in) { this->p_operator = op_in; } template <> -void spinconstrain::SpinConstrain::set_operator( - hamilt::Operator* op_in) +void spinconstrain::SpinConstrain::set_operator(hamilt::Operator* op_in) { this->p_operator = op_in; } \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_deltaspin/cal_mw_from_lambda.cpp b/source/module_hamilt_lcao/module_deltaspin/cal_mw_from_lambda.cpp index 2721c30965..44e0628b14 100644 --- a/source/module_hamilt_lcao/module_deltaspin/cal_mw_from_lambda.cpp +++ b/source/module_hamilt_lcao/module_deltaspin/cal_mw_from_lambda.cpp @@ -1,15 +1,15 @@ -#include "module_base/timer.h" -#include "module_base/tool_title.h" -#include "source_hsolver/diago_iter_assist.h" -#include "module_parameter/parameter.h" -#include "spin_constrain.h" +#include "module_elecstate/elecstate_pw.h" +#include "module_elecstate/elecstate_tools.h" #include "module_hamilt_pw/hamilt_pwdft/onsite_projector.h" -#include "module_base/parallel_reduce.h" -#include "module_base/kernels/math_kernel_op.h" +#include "module_parameter/parameter.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" +#include "source_hsolver/diago_iter_assist.h" #include "source_hsolver/hsolver_lcao.h" #include "source_hsolver/hsolver_pw.h" -#include "module_elecstate/elecstate_pw.h" -#include "module_elecstate/elecstate_tools.h" +#include "spin_constrain.h" #ifdef __LCAO #include "module_elecstate/elecstate_lcao.h" @@ -19,18 +19,26 @@ #endif template <> -void spinconstrain::SpinConstrain>::calculate_delta_hcc(std::complex* h_tmp, const std::complex* becp_k, const ModuleBase::Vector3* delta_lambda, const int nbands, const int nkb, const int* nh_iat) +void spinconstrain::SpinConstrain>::calculate_delta_hcc( + std::complex* h_tmp, + const std::complex* becp_k, + const ModuleBase::Vector3* delta_lambda, + const int nbands, + const int nkb, + const int* nh_iat) { int sum = 0; int size_ps = nkb * 2 * nbands; std::complex* becp_cpu = nullptr; - if(PARAM.inp.device == "gpu") + if (PARAM.inp.device == "gpu") { #if ((defined __CUDA) || (defined __ROCM)) base_device::DEVICE_GPU* ctx = {}; base_device::DEVICE_CPU* cpu_ctx = {}; base_device::memory::resize_memory_op, base_device::DEVICE_CPU>()(becp_cpu, size_ps); - base_device::memory::synchronize_memory_op, base_device::DEVICE_CPU, base_device::DEVICE_GPU>()(becp_cpu, becp_k, size_ps); + base_device::memory::synchronize_memory_op, + base_device::DEVICE_CPU, + base_device::DEVICE_GPU>()(becp_cpu, becp_k, size_ps); #endif } else if (PARAM.inp.device == "cpu") @@ -43,35 +51,35 @@ void spinconstrain::SpinConstrain>::calculate_delta_hcc(std { const int nproj = nh_iat[iat]; const std::complex coefficients0(delta_lambda[iat][2], 0.0); - const std::complex coefficients1(delta_lambda[iat][0] , delta_lambda[iat][1]); - const std::complex coefficients2(delta_lambda[iat][0] , -1 * delta_lambda[iat][1]); + const std::complex coefficients1(delta_lambda[iat][0], delta_lambda[iat][1]); + const std::complex coefficients2(delta_lambda[iat][0], -1 * delta_lambda[iat][1]); const std::complex coefficients3(-1 * delta_lambda[iat][2], 0.0); // each atom has nproj, means this is with structure factor; // each projector (each atom) must multiply coefficient // with all the other projectors. - for (int ib = 0; ib < nbands * 2; ib+=2) + for (int ib = 0; ib < nbands * 2; ib += 2) { for (int ip = 0; ip < nproj; ip++) { const int becpind = ib * nkb + sum + ip; const std::complex becp1 = becp_cpu[becpind]; const std::complex becp2 = becp_cpu[becpind + nkb]; - ps[becpind] += coefficients0 * becp1 - + coefficients2 * becp2; - ps[becpind + nkb] += coefficients1 * becp1 - + coefficients3 * becp2; + ps[becpind] += coefficients0 * becp1 + coefficients2 * becp2; + ps[becpind + nkb] += coefficients1 * becp1 + coefficients3 * becp2; } // end ip - } // end ib + } // end ib sum += nproj; } // end iat std::complex* ps_pointer = nullptr; - if(PARAM.inp.device == "gpu") + if (PARAM.inp.device == "gpu") { #if ((defined __CUDA) || (defined __ROCM)) base_device::DEVICE_GPU* ctx = {}; base_device::DEVICE_CPU* cpu_ctx = {}; base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(ps_pointer, size_ps); - base_device::memory::synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_CPU>()(ps_pointer, ps.data(), size_ps); + base_device::memory::synchronize_memory_op, + base_device::DEVICE_GPU, + base_device::DEVICE_CPU>()(ps_pointer, ps.data(), size_ps); #endif } else if (PARAM.inp.device == "cpu") @@ -86,49 +94,46 @@ void spinconstrain::SpinConstrain>::calculate_delta_hcc(std { #if ((defined __CUDA) || (defined __ROCM)) base_device::DEVICE_GPU* ctx = {}; - ModuleBase::gemm_op, base_device::DEVICE_GPU>()( - transa, - transb, - nbands, - nbands, - npm, - &ModuleBase::ONE, - becp_k, - npm, - ps_pointer, - npm, - &ModuleBase::ONE, - h_tmp, - nbands - ); + ModuleBase::gemm_op, base_device::DEVICE_GPU>()(transa, + transb, + nbands, + nbands, + npm, + &ModuleBase::ONE, + becp_k, + npm, + ps_pointer, + npm, + &ModuleBase::ONE, + h_tmp, + nbands); base_device::memory::delete_memory_op, base_device::DEVICE_GPU>()(ps_pointer); delete[] becp_cpu; #endif - } else if (PARAM.inp.device == "cpu") { base_device::DEVICE_CPU* ctx = {}; - ModuleBase::gemm_op, base_device::DEVICE_CPU>()( - transa, - transb, - nbands, - nbands, - npm, - &ModuleBase::ONE, - becp_k, - npm, - ps_pointer, - npm, - &ModuleBase::ONE, - h_tmp, - nbands - ); + ModuleBase::gemm_op, base_device::DEVICE_CPU>()(transa, + transb, + nbands, + nbands, + npm, + &ModuleBase::ONE, + becp_k, + npm, + ps_pointer, + npm, + &ModuleBase::ONE, + h_tmp, + nbands); } } template <> -void spinconstrain::SpinConstrain>::cal_mw_from_lambda(int i_step, const ModuleBase::Vector3* delta_lambda) +void spinconstrain::SpinConstrain>::cal_mw_from_lambda( + int i_step, + const ModuleBase::Vector3* delta_lambda) { ModuleBase::TITLE("spinconstrain::SpinConstrain", "cal_mw_from_lambda"); ModuleBase::timer::tick("spinconstrain::SpinConstrain", "cal_mw_from_lambda"); @@ -137,7 +142,8 @@ void spinconstrain::SpinConstrain>::cal_mw_from_lambda(int if (PARAM.inp.basis_type == "lcao") { psi::Psi>* psi_t = static_cast>*>(this->psi); - hamilt::Hamilt>* hamilt_t = static_cast>*>(this->p_hamilt); + hamilt::Hamilt>* hamilt_t + = static_cast>*>(this->p_hamilt); hsolver::HSolverLCAO> hsolver_t(this->ParaV, PARAM.inp.ks_solver); if (PARAM.inp.nspin == 2) { @@ -159,7 +165,7 @@ void spinconstrain::SpinConstrain>::cal_mw_from_lambda(int this->pelec->f_en, this->pelec->nelec_spin, this->pelec->skip_weights); - elecstate::calEBand(this->pelec->ekb,this->pelec->wg,this->pelec->f_en); + elecstate::calEBand(this->pelec->ekb, this->pelec->wg, this->pelec->f_en); elecstate::ElecStateLCAO>* pelec_lcao = dynamic_cast>*>(this->pelec); elecstate::cal_dm_psi(this->ParaV, pelec_lcao->wg, *psi_t, *(pelec_lcao->get_DM())); @@ -175,15 +181,20 @@ void spinconstrain::SpinConstrain>::cal_mw_from_lambda(int if (PARAM.inp.device == "cpu") { psi::Psi>* psi_t = static_cast>*>(this->psi); - hamilt::Hamilt>* hamilt_t = static_cast>*>(this->p_hamilt); - hsolver::HSolver, base_device::DEVICE_CPU>* hsolver_t = static_cast, base_device::DEVICE_CPU>*>(this->phsol); - hsolver_t->solve(hamilt_t, psi_t[0], this->pelec, this->KS_SOLVER, true); + hamilt::Hamilt>* hamilt_t = + static_cast>*>(this->p_hamilt); hsolver::HSolver, + base_device::DEVICE_CPU>* hsolver_t = static_cast, + base_device::DEVICE_CPU>*>(this->phsol); hsolver_t->solve(hamilt_t, psi_t[0], this->pelec, this->KS_SOLVER, + true); } else { - psi::Psi, base_device::DEVICE_GPU>* psi_t = static_cast, base_device::DEVICE_GPU>*>(this->psi); - hamilt::Hamilt, base_device::DEVICE_GPU>* hamilt_t = static_cast, base_device::DEVICE_GPU>*>(this->p_hamilt); - hsolver::HSolver, base_device::DEVICE_GPU>* hsolver_t = static_cast, base_device::DEVICE_GPU>*>(this->phsol); + psi::Psi, base_device::DEVICE_GPU>* psi_t = + static_cast, base_device::DEVICE_GPU>*>(this->psi); + hamilt::Hamilt, base_device::DEVICE_GPU>* hamilt_t = + static_cast, base_device::DEVICE_GPU>*>(this->p_hamilt); + hsolver::HSolver, base_device::DEVICE_GPU>* hsolver_t = + static_cast, base_device::DEVICE_GPU>*>(this->phsol); hsolver_t->solve(hamilt_t, psi_t[0], this->pelec, this->KS_SOLVER, true); } this->pelec->calculate_weights(); @@ -202,7 +213,8 @@ void spinconstrain::SpinConstrain>::cal_mw_from_lambda(int if (PARAM.inp.device == "cpu") { psi::Psi>* psi_t = static_cast>*>(this->psi); - hamilt::Hamilt, base_device::DEVICE_CPU>* hamilt_t = static_cast, base_device::DEVICE_CPU>*>(this->p_hamilt); + hamilt::Hamilt, base_device::DEVICE_CPU>* hamilt_t + = static_cast, base_device::DEVICE_CPU>*>(this->p_hamilt); auto* onsite_p = projectors::OnsiteProjector::get_instance(); nbands = psi_t->get_nbands(); npol = psi_t->get_npol(); @@ -213,7 +225,7 @@ void spinconstrain::SpinConstrain>::cal_mw_from_lambda(int becp_tmp.resize(size_becp * nk); std::vector> h_tmp(nbands * nbands), s_tmp(nbands * nbands); int initial_hs = 0; - if(this->sub_h_save == nullptr) + if (this->sub_h_save == nullptr) { initial_hs = 1; this->sub_h_save = new std::complex[nbands * nbands * nk]; @@ -228,7 +240,7 @@ void spinconstrain::SpinConstrain>::cal_mw_from_lambda(int std::complex* h_k = this->sub_h_save + ik * nbands * nbands; std::complex* s_k = this->sub_s_save + ik * nbands * nbands; std::complex* becp_k = this->becp_save + ik * size_becp; - if(initial_hs) + if (initial_hs) { /// update H(k) for each k point hamilt_t->updateHk(ik); @@ -238,7 +250,8 @@ void spinconstrain::SpinConstrain>::cal_mw_from_lambda(int memcpy(h_tmp.data(), h_k, sizeof(std::complex) * nbands * nbands); memcpy(s_tmp.data(), s_k, sizeof(std::complex) * nbands * nbands); // update h_tmp by delta_lambda - if (i_step != -1) this->calculate_delta_hcc(h_tmp.data(), becp_k, delta_lambda, nbands, nkb, nh_iat); + if (i_step != -1) + this->calculate_delta_hcc(h_tmp.data(), becp_k, delta_lambda, nbands, nkb, nh_iat); hsolver::DiagoIterAssist>::diag_responce(h_tmp.data(), s_tmp.data(), @@ -254,8 +267,10 @@ void spinconstrain::SpinConstrain>::cal_mw_from_lambda(int { base_device::DEVICE_GPU* ctx = {}; base_device::DEVICE_CPU* cpu_ctx = {}; - psi::Psi, base_device::DEVICE_GPU>* psi_t = static_cast, base_device::DEVICE_GPU>*>(this->psi); - hamilt::Hamilt, base_device::DEVICE_GPU>* hamilt_t = static_cast, base_device::DEVICE_GPU>*>(this->p_hamilt); + psi::Psi, base_device::DEVICE_GPU>* psi_t + = static_cast, base_device::DEVICE_GPU>*>(this->psi); + hamilt::Hamilt, base_device::DEVICE_GPU>* hamilt_t + = static_cast, base_device::DEVICE_GPU>*>(this->p_hamilt); auto* onsite_p = projectors::OnsiteProjector::get_instance(); nbands = psi_t->get_nbands(); npol = psi_t->get_npol(); @@ -266,20 +281,29 @@ void spinconstrain::SpinConstrain>::cal_mw_from_lambda(int becp_tmp.resize(size_becp * nk); std::complex* h_tmp = nullptr; std::complex* s_tmp = nullptr; - base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(h_tmp, nbands * nbands); - base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(s_tmp, nbands * nbands); + base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(h_tmp, + nbands * nbands); + base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(s_tmp, + nbands * nbands); int initial_hs = 0; - if(this->sub_h_save == nullptr) + if (this->sub_h_save == nullptr) { initial_hs = 1; - - base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(this->sub_h_save, nbands * nbands * nk); - base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(this->sub_s_save, nbands * nbands * nk); - base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(this->becp_save, size_becp * nk); + + base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()( + this->sub_h_save, + nbands * nbands * nk); + base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()( + this->sub_s_save, + nbands * nbands * nk); + base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()( + this->becp_save, + size_becp * nk); } std::complex* becp_pointer = nullptr; // allocate memory for becp_pointer in GPU device - base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(becp_pointer, size_becp); + base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(becp_pointer, + size_becp); for (int ik = 0; ik < nk; ++ik) { psi_t->fix_k(ik); @@ -287,27 +311,45 @@ void spinconstrain::SpinConstrain>::cal_mw_from_lambda(int std::complex* h_k = this->sub_h_save + ik * nbands * nbands; std::complex* s_k = this->sub_s_save + ik * nbands * nbands; std::complex* becp_k = this->becp_save + ik * size_becp; - if(initial_hs) + if (initial_hs) { /// update H(k) for each k point hamilt_t->updateHk(ik); - hsolver::DiagoIterAssist, base_device::DEVICE_GPU>::cal_hs_subspace(hamilt_t, psi_t[0], h_k, s_k); - base_device::memory::synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_GPU>()(becp_k, onsite_p->get_becp(), size_becp); + hsolver::DiagoIterAssist, base_device::DEVICE_GPU>::cal_hs_subspace( + hamilt_t, + psi_t[0], + h_k, + s_k); + base_device::memory::synchronize_memory_op, + base_device::DEVICE_GPU, + base_device::DEVICE_GPU>()(becp_k, + onsite_p->get_becp(), + size_becp); } - base_device::memory::synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_GPU>()(h_tmp, h_k, nbands * nbands); - base_device::memory::synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_GPU>()(s_tmp, s_k, nbands * nbands); + base_device::memory::synchronize_memory_op, + base_device::DEVICE_GPU, + base_device::DEVICE_GPU>()(h_tmp, h_k, nbands * nbands); + base_device::memory::synchronize_memory_op, + base_device::DEVICE_GPU, + base_device::DEVICE_GPU>()(s_tmp, s_k, nbands * nbands); // update h_tmp by delta_lambda - if (i_step != -1) this->calculate_delta_hcc(h_tmp, becp_k, delta_lambda, nbands, nkb, nh_iat); + if (i_step != -1) + this->calculate_delta_hcc(h_tmp, becp_k, delta_lambda, nbands, nkb, nh_iat); - hsolver::DiagoIterAssist, base_device::DEVICE_GPU>::diag_responce(h_tmp, - s_tmp, - nbands, - becp_k, - becp_pointer, - nkb * npol, - &this->pelec->ekb(ik, 0)); + hsolver::DiagoIterAssist, base_device::DEVICE_GPU>::diag_responce( + h_tmp, + s_tmp, + nbands, + becp_k, + becp_pointer, + nkb * npol, + &this->pelec->ekb(ik, 0)); // copy becp_pointer from GPU to CPU - base_device::memory::synchronize_memory_op, base_device::DEVICE_CPU, base_device::DEVICE_GPU>()(&becp_tmp[ik * size_becp], becp_pointer, size_becp); + base_device::memory::synchronize_memory_op, + base_device::DEVICE_CPU, + base_device::DEVICE_GPU>()(&becp_tmp[ik * size_becp], + becp_pointer, + size_becp); } // free memory for becp_pointer in GPU device @@ -368,7 +410,9 @@ void spinconstrain::SpinConstrain>::cal_mw_from_lambda(int } template <> -void spinconstrain::SpinConstrain>::update_psi_charge(const ModuleBase::Vector3* delta_lambda, bool pw_solve) +void spinconstrain::SpinConstrain>::update_psi_charge( + const ModuleBase::Vector3* delta_lambda, + bool pw_solve) { ModuleBase::TITLE("spinconstrain::SpinConstrain", "update_psi_charge"); ModuleBase::timer::tick("spinconstrain::SpinConstrain", "update_psi_charge"); @@ -391,7 +435,8 @@ void spinconstrain::SpinConstrain>::update_psi_charge(const if (PARAM.inp.device == "cpu") { psi::Psi>* psi_t = static_cast>*>(this->psi); - hamilt::Hamilt, base_device::DEVICE_CPU>* hamilt_t = static_cast, base_device::DEVICE_CPU>*>(this->p_hamilt); + hamilt::Hamilt, base_device::DEVICE_CPU>* hamilt_t + = static_cast, base_device::DEVICE_CPU>*>(this->p_hamilt); auto* onsite_p = projectors::OnsiteProjector::get_instance(); nbands = psi_t->get_nbands(); npol = psi_t->get_npol(); @@ -415,10 +460,10 @@ void spinconstrain::SpinConstrain>::update_psi_charge(const memcpy(s_tmp.data(), s_k, sizeof(std::complex) * nbands * nbands); this->calculate_delta_hcc(h_tmp.data(), becp_k, delta_lambda, nbands, nkb, nh_iat); hsolver::DiagoIterAssist>::diag_subspace_psi(h_tmp.data(), - s_tmp.data(), - nbands, - psi_t[0], - &this->pelec->ekb(ik, 0)); + s_tmp.data(), + nbands, + psi_t[0], + &this->pelec->ekb(ik, 0)); } delete[] this->sub_h_save; @@ -428,32 +473,33 @@ void spinconstrain::SpinConstrain>::update_psi_charge(const this->sub_s_save = nullptr; this->becp_save = nullptr; - if(pw_solve) + if (pw_solve) { - hsolver::HSolverPW, base_device::DEVICE_CPU> hsolver_pw_obj(this->pw_wfc_, - PARAM.inp.calculation, - PARAM.inp.basis_type, - PARAM.inp.ks_solver, - false, - PARAM.globalv.use_uspp, - PARAM.inp.nspin, - hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::SCF_ITER, - hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::PW_DIAG_NMAX, - hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::PW_DIAG_THR, - hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::need_subspace); + hsolver::HSolverPW, base_device::DEVICE_CPU> hsolver_pw_obj( + this->pw_wfc_, + PARAM.inp.calculation, + PARAM.inp.basis_type, + PARAM.inp.ks_solver, + false, + PARAM.globalv.use_uspp, + PARAM.inp.nspin, + hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::SCF_ITER, + hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::PW_DIAG_NMAX, + hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::PW_DIAG_THR, + hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::need_subspace); hsolver_pw_obj.solve(hamilt_t, - psi_t[0], - this->pelec, - this->pelec->ekb.c, - GlobalV::RANK_IN_POOL, - GlobalV::NPROC_IN_POOL, - false, - this->tpiba, - this->get_nat()); + psi_t[0], + this->pelec, + this->pelec->ekb.c, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + false, + this->tpiba, + this->get_nat()); } else - {// update charge density only + { // update charge density only this->pelec->psiToRho(*psi_t); } } @@ -462,8 +508,10 @@ void spinconstrain::SpinConstrain>::update_psi_charge(const { base_device::DEVICE_GPU* ctx = {}; base_device::DEVICE_CPU* cpu_ctx = {}; - psi::Psi, base_device::DEVICE_GPU>* psi_t = static_cast, base_device::DEVICE_GPU>*>(this->psi); - hamilt::Hamilt, base_device::DEVICE_GPU>* hamilt_t = static_cast, base_device::DEVICE_GPU>*>(this->p_hamilt); + psi::Psi, base_device::DEVICE_GPU>* psi_t + = static_cast, base_device::DEVICE_GPU>*>(this->psi); + hamilt::Hamilt, base_device::DEVICE_GPU>* hamilt_t + = static_cast, base_device::DEVICE_GPU>*>(this->p_hamilt); auto* onsite_p = projectors::OnsiteProjector::get_instance(); nbands = psi_t->get_nbands(); npol = psi_t->get_npol(); @@ -474,8 +522,10 @@ void spinconstrain::SpinConstrain>::update_psi_charge(const std::complex* h_tmp = nullptr; std::complex* s_tmp = nullptr; - base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(h_tmp, nbands * nbands); - base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(s_tmp, nbands * nbands); + base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(h_tmp, + nbands * nbands); + base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(s_tmp, + nbands * nbands); assert(this->sub_h_save != nullptr); assert(this->sub_s_save != nullptr); assert(this->becp_save != nullptr); @@ -486,14 +536,19 @@ void spinconstrain::SpinConstrain>::update_psi_charge(const std::complex* becp_k = this->becp_save + ik * size_becp; psi_t->fix_k(ik); - base_device::memory::synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_GPU>()(h_tmp, h_k, nbands * nbands); - base_device::memory::synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_GPU>()(s_tmp, s_k, nbands * nbands); + base_device::memory::synchronize_memory_op, + base_device::DEVICE_GPU, + base_device::DEVICE_GPU>()(h_tmp, h_k, nbands * nbands); + base_device::memory::synchronize_memory_op, + base_device::DEVICE_GPU, + base_device::DEVICE_GPU>()(s_tmp, s_k, nbands * nbands); this->calculate_delta_hcc(h_tmp, becp_k, delta_lambda, nbands, nkb, nh_iat); - hsolver::DiagoIterAssist, base_device::DEVICE_GPU>::diag_subspace_psi(h_tmp, - s_tmp, - nbands, - psi_t[0], - &this->pelec->ekb(ik, 0)); + hsolver::DiagoIterAssist, base_device::DEVICE_GPU>::diag_subspace_psi( + h_tmp, + s_tmp, + nbands, + psi_t[0], + &this->pelec->ekb(ik, 0)); } base_device::memory::delete_memory_op, base_device::DEVICE_GPU>()(sub_h_save); @@ -503,37 +558,38 @@ void spinconstrain::SpinConstrain>::update_psi_charge(const this->sub_s_save = nullptr; this->becp_save = nullptr; - if(pw_solve) + if (pw_solve) { - hsolver::HSolverPW, base_device::DEVICE_GPU> hsolver_pw_obj(this->pw_wfc_, - PARAM.inp.calculation, - PARAM.inp.basis_type, - PARAM.inp.ks_solver, - false, - PARAM.globalv.use_uspp, - PARAM.inp.nspin, - hsolver::DiagoIterAssist, base_device::DEVICE_GPU>::SCF_ITER, - hsolver::DiagoIterAssist, base_device::DEVICE_GPU>::PW_DIAG_NMAX, - hsolver::DiagoIterAssist, base_device::DEVICE_GPU>::PW_DIAG_THR, - hsolver::DiagoIterAssist, base_device::DEVICE_GPU>::need_subspace); + hsolver::HSolverPW, base_device::DEVICE_GPU> hsolver_pw_obj( + this->pw_wfc_, + PARAM.inp.calculation, + PARAM.inp.basis_type, + PARAM.inp.ks_solver, + false, + PARAM.globalv.use_uspp, + PARAM.inp.nspin, + hsolver::DiagoIterAssist, base_device::DEVICE_GPU>::SCF_ITER, + hsolver::DiagoIterAssist, base_device::DEVICE_GPU>::PW_DIAG_NMAX, + hsolver::DiagoIterAssist, base_device::DEVICE_GPU>::PW_DIAG_THR, + hsolver::DiagoIterAssist, base_device::DEVICE_GPU>::need_subspace); hsolver_pw_obj.solve(hamilt_t, - psi_t[0], - this->pelec, - this->pelec->ekb.c, - GlobalV::RANK_IN_POOL, - GlobalV::NPROC_IN_POOL, - false, - this->tpiba, - this->get_nat()); + psi_t[0], + this->pelec, + this->pelec->ekb.c, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + false, + this->tpiba, + this->get_nat()); } else - {// update charge density only - reinterpret_cast, base_device::DEVICE_GPU>*>(this->pelec)->psiToRho(*psi_t); + { // update charge density only + reinterpret_cast, base_device::DEVICE_GPU>*>(this->pelec) + ->psiToRho(*psi_t); } - } -#endif +#endif } ModuleBase::timer::tick("spinconstrain::SpinConstrain", "update_psi_charge"); } diff --git a/source/module_hamilt_lcao/module_deltaspin/spin_constrain.cpp b/source/module_hamilt_lcao/module_deltaspin/spin_constrain.cpp index 30500ccca9..5dfaf65bd5 100644 --- a/source/module_hamilt_lcao/module_deltaspin/spin_constrain.cpp +++ b/source/module_hamilt_lcao/module_deltaspin/spin_constrain.cpp @@ -1,7 +1,7 @@ #include "spin_constrain.h" -#include "module_base/formatter.h" #include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/dspin_lcao.h" +#include "source_base/formatter.h" #include @@ -523,11 +523,11 @@ void SpinConstrain::print_Mi(std::ofstream& ofs_running) { const std::vector title = {"Total Magnetism (uB)", ""}; const std::vector fmts = {"%-26s", "%20.10f"}; - FmtTable table(/*titles=*/title, - /*nrows=*/nat, - /*formats=*/fmts, + FmtTable table(/*titles=*/title, + /*nrows=*/nat, + /*formats=*/fmts, /*indent=*/0, - /*align=*/{/*value*/FmtTable::Align::RIGHT, /*title*/FmtTable::Align::LEFT}); + /*align=*/{/*value*/ FmtTable::Align::RIGHT, /*title*/ FmtTable::Align::LEFT}); for (int iat = 0; iat < nat; ++iat) { mag_z[iat] = Mi_[iat].z; @@ -539,11 +539,11 @@ void SpinConstrain::print_Mi(std::ofstream& ofs_running) { const std::vector title = {"Total Magnetism (uB)", "", "", ""}; const std::vector fmts = {"%-26s", "%20.10f", "%20.10f", "%20.10f"}; - FmtTable table(/*titles=*/title, - /*nrows=*/nat, - /*formats=*/fmts, + FmtTable table(/*titles=*/title, + /*nrows=*/nat, + /*formats=*/fmts, /*indent=*/0, - /*align=*/{/*value*/FmtTable::Align::RIGHT, /*title*/FmtTable::Align::LEFT}); + /*align=*/{/*value*/ FmtTable::Align::RIGHT, /*title*/ FmtTable::Align::LEFT}); for (int iat = 0; iat < nat; ++iat) { mag_x[iat] = Mi_[iat].x; @@ -568,11 +568,11 @@ void SpinConstrain::print_Mag_Force(std::ofstream& ofs_running) { const std::vector title = {"Magnetic force (eV/uB)", ""}; const std::vector fmts = {"%-26s", "%20.10f"}; - FmtTable table(/*titles=*/title, - /*nrows=*/nat, - /*formats=*/fmts, + FmtTable table(/*titles=*/title, + /*nrows=*/nat, + /*formats=*/fmts, /*indent=*/0, - /*align=*/{/*value*/FmtTable::Align::RIGHT, /*title*/FmtTable::Align::LEFT}); + /*align=*/{/*value*/ FmtTable::Align::RIGHT, /*title*/ FmtTable::Align::LEFT}); for (int iat = 0; iat < nat; ++iat) { mag_force_z[iat] = lambda_[iat].z * ModuleBase::Ry_to_eV; @@ -584,11 +584,11 @@ void SpinConstrain::print_Mag_Force(std::ofstream& ofs_running) { const std::vector title = {"Magnetic force (eV/uB)", "", "", ""}; const std::vector fmts = {"%-26s", "%20.10f", "%20.10f", "%20.10f"}; - FmtTable table(/*titles=*/title, - /*nrows=*/nat, - /*formats=*/fmts, + FmtTable table(/*titles=*/title, + /*nrows=*/nat, + /*formats=*/fmts, /*indent=*/0, - /*align=*/{/*value*/FmtTable::Align::RIGHT, /*title*/FmtTable::Align::LEFT}); + /*align=*/{/*value*/ FmtTable::Align::RIGHT, /*title*/ FmtTable::Align::LEFT}); for (int iat = 0; iat < nat; ++iat) { mag_force_x[iat] = lambda_[iat].x * ModuleBase::Ry_to_eV; diff --git a/source/module_hamilt_lcao/module_deltaspin/spin_constrain.h b/source/module_hamilt_lcao/module_deltaspin/spin_constrain.h index 2e7cf6c8db..417c12a133 100644 --- a/source/module_hamilt_lcao/module_deltaspin/spin_constrain.h +++ b/source/module_hamilt_lcao/module_deltaspin/spin_constrain.h @@ -1,18 +1,18 @@ #ifndef SPIN_CONSTRAIN_H #define SPIN_CONSTRAIN_H -#include -#include - -#include "module_base/constants.h" -#include "module_base/tool_quit.h" -#include "module_base/tool_title.h" -#include "module_base/vector3.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_cell/klist.h" #include "module_cell/unitcell.h" -#include "module_hamilt_general/operator.h" #include "module_elecstate/elecstate.h" +#include "module_hamilt_general/operator.h" +#include "source_base/constants.h" +#include "source_base/tool_quit.h" +#include "source_base/tool_title.h" +#include "source_base/vector3.h" + +#include +#include namespace spinconstrain { @@ -22,87 +22,92 @@ struct ScAtomData; template class SpinConstrain { -public: + public: /** * pubic interface for spin-constrained DFT - */ + */ /// initialize spin-constrained DFT - void init_sc(double sc_thr_in, - int nsc_in, - int nsc_min_in, - double alpha_trial_in, - double sccut_in, - double sc_drop_thr_in, - const UnitCell& ucell, - Parallel_Orbitals* ParaV_in, - int nspin_in, - K_Vectors& kv_in, - void* p_hamilt_in, - void* psi_in, - elecstate::ElecState* pelec_in, - ModulePW::PW_Basis_K* pw_wfc_in = nullptr); + void init_sc(double sc_thr_in, + int nsc_in, + int nsc_min_in, + double alpha_trial_in, + double sccut_in, + double sc_drop_thr_in, + const UnitCell& ucell, + Parallel_Orbitals* ParaV_in, + int nspin_in, + K_Vectors& kv_in, + void* p_hamilt_in, + void* psi_in, + elecstate::ElecState* pelec_in, + ModulePW::PW_Basis_K* pw_wfc_in = nullptr); - /// @brief calculate the magnetization of each atom with real space projection method for LCAO base - /// @param step : the step number of the SCF calculation - /// @param print : print the magnetization of each atom if true - void cal_mi_lcao(const int& step, bool print = false); + /// @brief calculate the magnetization of each atom with real space projection method for LCAO base + /// @param step : the step number of the SCF calculation + /// @param print : print the magnetization of each atom if true + void cal_mi_lcao(const int& step, bool print = false); - void cal_mi_pw(); + void cal_mi_pw(); - void cal_mw_from_lambda(int i_step, const ModuleBase::Vector3* delta_lambda = nullptr); + void cal_mw_from_lambda(int i_step, const ModuleBase::Vector3* delta_lambda = nullptr); - /** - * @brief calculate the energy of \sum_i \lambda_i * Mi - * if this->is_mag_converged is true, then this function will calculate the energy and return the real value - * if this->is_mag_converged is false, then this function will return 0.0 - */ - double cal_escon(); + /** + * @brief calculate the energy of \sum_i \lambda_i * Mi + * if this->is_mag_converged is true, then this function will calculate the energy and return the real value + * if this->is_mag_converged is false, then this function will return 0.0 + */ + double cal_escon(); - double get_escon(); + double get_escon(); - void run_lambda_loop(int outer_step, bool rerun = true); + void run_lambda_loop(int outer_step, bool rerun = true); - /// @brief update the charge density for LCAO base with new lambda - /// update the charge density and psi for PW base with new lambda - void update_psi_charge(const ModuleBase::Vector3* delta_lambda, bool pw_solve = true); + /// @brief update the charge density for LCAO base with new lambda + /// update the charge density and psi for PW base with new lambda + void update_psi_charge(const ModuleBase::Vector3* delta_lambda, bool pw_solve = true); - void calculate_delta_hcc(std::complex* h_tmp, const std::complex* becp_k, const ModuleBase::Vector3* delta_lambda, const int nbands, const int nkb, const int* nh_iat); + void calculate_delta_hcc(std::complex* h_tmp, + const std::complex* becp_k, + const ModuleBase::Vector3* delta_lambda, + const int nbands, + const int nkb, + const int* nh_iat); - /// lambda loop helper functions - bool check_rms_stop(int outer_step, int i_step, double rms_error, double duration, double total_duration); + /// lambda loop helper functions + bool check_rms_stop(int outer_step, int i_step, double rms_error, double duration, double total_duration); - /// apply restriction - void check_restriction(const std::vector>& search, double& alpha_trial); + /// apply restriction + void check_restriction(const std::vector>& search, double& alpha_trial); - /// check gradient decay - bool check_gradient_decay(std::vector> new_spin, - std::vector> old_spin, - std::vector> new_delta_lambda, - std::vector> old_delta_lambda, - bool print = false); - /// @brief calculate alpha_opt - double cal_alpha_opt(std::vector> spin, - std::vector> spin_plus, - const double alpha_trial); - /// print header info - void print_header(); - /// print termination message - void print_termination(); + /// check gradient decay + bool check_gradient_decay(std::vector> new_spin, + std::vector> old_spin, + std::vector> new_delta_lambda, + std::vector> old_delta_lambda, + bool print = false); + /// @brief calculate alpha_opt + double cal_alpha_opt(std::vector> spin, + std::vector> spin_plus, + const double alpha_trial); + /// print header info + void print_header(); + /// print termination message + void print_termination(); - /// print mi - void print_Mi(std::ofstream& ofs_running); + /// print mi + void print_Mi(std::ofstream& ofs_running); - /// print magnetic force, defined as \frac{\delta{L}}/{\delta{Mi}} = -lambda[iat]) - void print_Mag_Force(std::ofstream& ofs_running); + /// print magnetic force, defined as \frac{\delta{L}}/{\delta{Mi}} = -lambda[iat]) + void print_Mag_Force(std::ofstream& ofs_running); - /// @brief use rerun to get higher precision in lambda_loop for PW base - bool higher_mag_prec = false; + /// @brief use rerun to get higher precision in lambda_loop for PW base + bool higher_mag_prec = false; -public: + public: /** * important outter class pointers used in spin-constrained DFT - */ - Parallel_Orbitals *ParaV = nullptr; + */ + Parallel_Orbitals* ParaV = nullptr; //-------------------------------------------------------------------------------- // pointers for solve Hamiltonian to get new Magnetization from Lambda void* p_hamilt = nullptr; @@ -117,7 +122,7 @@ class SpinConstrain public: /** * pubic methods for setting and getting spin-constrained DFT parameters - */ + */ /// Public method to access the Singleton instance static SpinConstrain& getScInstance(); /// Delete copy and move constructors and assign operators @@ -201,16 +206,13 @@ class SpinConstrain /// @brief set orbital parallel info void set_ParaV(Parallel_Orbitals* ParaV_in); /// @brief set parameters for solver - void set_solver_parameters(K_Vectors& kv_in, - void* p_hamilt_in, - void* psi_in, - elecstate::ElecState* pelec_in); + void set_solver_parameters(K_Vectors& kv_in, void* p_hamilt_in, void* psi_in, elecstate::ElecState* pelec_in); private: - SpinConstrain(){}; // Private constructor - ~SpinConstrain(){}; // Destructor - SpinConstrain& operator=(SpinConstrain const&) = delete; // Copy assign - SpinConstrain& operator=(SpinConstrain &&) = delete; // Move assign + SpinConstrain(){}; // Private constructor + ~SpinConstrain(){}; // Destructor + SpinConstrain& operator=(SpinConstrain const&) = delete; // Copy assign + SpinConstrain& operator=(SpinConstrain&&) = delete; // Move assign std::map> ScData; std::map ScDecayGrad; // in unit of uB^2/eV std::vector decay_grad_; // in unit of uB^2/Ry @@ -219,7 +221,7 @@ class SpinConstrain std::map> lnchiCounts; std::vector> lambda_; // in unit of Ry/uB in code, but in unit of meV/uB in input file std::vector> target_mag_; // in unit of uB - std::vector> Mi_; // in unit of uB + std::vector> Mi_; // in unit of uB std::vector atomLabels_; double escon_ = 0.0; int nspin_ = 0; @@ -234,7 +236,7 @@ class SpinConstrain double current_sc_thr_; std::vector> constrain_; bool debug = false; - double alpha_trial_; // in unit of Ry/uB^2 = 0.01 eV/uB^2 + double alpha_trial_; // in unit of Ry/uB^2 = 0.01 eV/uB^2 double restrict_current_; // in unit of Ry/uB = 3 eV/uB public: @@ -242,9 +244,16 @@ class SpinConstrain /// @param op_in the base pointer of operator, actual type should be DeltaSpin>* void set_operator(hamilt::Operator* op_in); /// @brief set is_Mi_converged - void set_mag_converged(bool is_Mi_converged_in){this->is_Mi_converged = is_Mi_converged_in;} + void set_mag_converged(bool is_Mi_converged_in) + { + this->is_Mi_converged = is_Mi_converged_in; + } /// @brief get is_Mi_converged - bool mag_converged() const {return this->is_Mi_converged;} + bool mag_converged() const + { + return this->is_Mi_converged; + } + private: /// operator for spin-constrained DFT, used for calculating current atomic magnetic moment hamilt::Operator* p_operator = nullptr; @@ -256,11 +265,11 @@ class SpinConstrain FPTYPE* becp_save; }; - /** * @brief struct for storing parameters of non-collinear spin-constrained DFT */ -struct ScAtomData { +struct ScAtomData +{ int index; std::vector lambda; std::vector target_mag; diff --git a/source/module_hamilt_lcao/module_deltaspin/test/prepare_unitcell.h b/source/module_hamilt_lcao/module_deltaspin/test/prepare_unitcell.h index 9f94cbfd86..45f8e587e5 100644 --- a/source/module_hamilt_lcao/module_deltaspin/test/prepare_unitcell.h +++ b/source/module_hamilt_lcao/module_deltaspin/test/prepare_unitcell.h @@ -1,84 +1,85 @@ #ifndef PREPARE_UNITCELL_H #define PREPARE_UNITCELL_H -#include -#include -#include "module_base/mathzone.h" +#include "source_base/mathzone.h" + +#include +#include class UcellTestPrepare { -public: - UcellTestPrepare()=default; - UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in); - UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in, - std::valarray mbl_in, - std::valarray velocity_in); - UcellTestPrepare(const UcellTestPrepare &utp); + public: + UcellTestPrepare() = default; + UcellTestPrepare(std::string latname_in, + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in); + UcellTestPrepare(std::string latname_in, + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in, + std::valarray mbl_in, + std::valarray velocity_in); + UcellTestPrepare(const UcellTestPrepare& utp); - std::string latname; - int lmaxmax; - bool init_vel; - bool selective_dynamics; - bool relax_new; - std::string fixed_axes; - double lat0; - std::valarray latvec; - std::vector elements; - std::vector pp_files; - std::vector pp_types; - std::vector orb_files; - std::valarray natom; - std::vector atomic_mass; - std::string coor_type; - std::valarray coordinates; - std::valarray mbl; - std::valarray velocity; - // ntype - int ntype; - int atomic_index; + std::string latname; + int lmaxmax; + bool init_vel; + bool selective_dynamics; + bool relax_new; + std::string fixed_axes; + double lat0; + std::valarray latvec; + std::vector elements; + std::vector pp_files; + std::vector pp_types; + std::vector orb_files; + std::valarray natom; + std::vector atomic_mass; + std::string coor_type; + std::valarray coordinates; + std::valarray mbl; + std::valarray velocity; + // ntype + int ntype; + int atomic_index; UnitCell* SetUcellInfo() { - //basic info - this->ntype = this->elements.size(); + // basic info + this->ntype = this->elements.size(); static UnitCell ucell; ucell.setup(this->latname, this->ntype, this->lmaxmax, this->init_vel, this->fixed_axes); delete[] ucell.orbital_fn; delete[] ucell.magnet.start_magnetization; // mag set here - ucell->atom_label.resize(ucell->ntype); - ucell->atom_mass.resize(ucell->ntype); - ucell->pseudo_fn.resize(ucell->ntype); - ucell->pseudo_type.resize(ucell->ntype); - + ucell->atom_label.resize(ucell->ntype); + ucell->atom_mass.resize(ucell->ntype); + ucell->pseudo_fn.resize(ucell->ntype); + ucell->pseudo_type.resize(ucell->ntype); + ucell.orbital_fn.resize(ucell.ntype); ucell.magnet.start_magnetization = new double[ucell.ntype]; // mag set here ucell.magnet.ux_[0] = 0.0; // ux_ set here @@ -132,11 +133,11 @@ class UcellTestPrepare ucell.atoms[it].nw = 0; ucell.atoms[it].nwl = 2; delete[] ucell.atoms[it].l_nchi; - ucell.atoms[it].l_nchi = new int[ ucell.atoms[it].nwl+1]; - for(int L=0; Lnatom[it]; // coordinates and related physical quantities @@ -197,88 +198,79 @@ class UcellTestPrepare }; UcellTestPrepare::UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in): - latname(latname_in), - lmaxmax(lmaxmax_in), - init_vel(init_vel_in), - selective_dynamics(selective_dynamics_in), - relax_new(relax_new_in), - fixed_axes(fixed_axes_in), - lat0(lat0_in), - latvec(latvec_in), - elements(elements_in), - pp_files(pp_files_in), - pp_types(pp_types_in), - orb_files(orb_files_in), - natom(natom_in), - atomic_mass(atomic_mass_in), - coor_type(coor_type_in), - coordinates(coordinates_in) + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in) + : latname(latname_in), lmaxmax(lmaxmax_in), init_vel(init_vel_in), selective_dynamics(selective_dynamics_in), + relax_new(relax_new_in), fixed_axes(fixed_axes_in), lat0(lat0_in), latvec(latvec_in), elements(elements_in), + pp_files(pp_files_in), pp_types(pp_types_in), orb_files(orb_files_in), natom(natom_in), + atomic_mass(atomic_mass_in), coor_type(coor_type_in), coordinates(coordinates_in) { - mbl = {0}; - velocity = {0}; + mbl = {0}; + velocity = {0}; } -UcellTestPrepare::UcellTestPrepare(const UcellTestPrepare &utp): - latname(utp.latname), - lmaxmax(utp.lmaxmax), - init_vel(utp.init_vel), - selective_dynamics(utp.selective_dynamics), - relax_new(utp.relax_new), - fixed_axes(utp.fixed_axes), - lat0(utp.lat0), - latvec(utp.latvec), - elements(utp.elements), - pp_files(utp.pp_files), - pp_types(utp.pp_types), - orb_files(utp.orb_files), - natom(utp.natom), - atomic_mass(utp.atomic_mass), - coor_type(utp.coor_type), - coordinates(utp.coordinates), - mbl(utp.mbl), - velocity(utp.velocity) // velocity assume the existence of mbl in print_stru_file() -{} - -std::map UcellTestLib +UcellTestPrepare::UcellTestPrepare(const UcellTestPrepare& utp) + : latname(utp.latname), lmaxmax(utp.lmaxmax), init_vel(utp.init_vel), selective_dynamics(utp.selective_dynamics), + relax_new(utp.relax_new), fixed_axes(utp.fixed_axes), lat0(utp.lat0), latvec(utp.latvec), elements(utp.elements), + pp_files(utp.pp_files), pp_types(utp.pp_types), orb_files(utp.orb_files), natom(utp.natom), + atomic_mass(utp.atomic_mass), coor_type(utp.coor_type), coordinates(utp.coordinates), mbl(utp.mbl), + velocity(utp.velocity) // velocity assume the existence of mbl in print_stru_file() { - {"SiO", UcellTestPrepare( - "fcc", //latname - 2, //lmaxmax - false, //init_vel - false, //selective_dyanmics - false, //relax_new - "volume", //fixed_axes - 10.2, //lat0 - {-0.5,0.0,0.5, //latvec - 0.0,0.5,0.5, - -0.5,0.5,0.0}, - {"O","Si"}, //elements - {"O.upf","Si.upf"}, //upf file - {"upf201","upf201"}, //upf types - {"O.orb","Si.orb"}, //orb file - {1,5}, //number of each elements - {16.0,28.0}, //atomic mass - "Cartesian", //coordination type - {0.0,0.0,0.0, //atomic coordinates - 0.1,0.0,0.0, //atomic coordinates - 0.2,0.0,0.0, //atomic coordinates - 0.3,0.0,0.0, //atomic coordinates - 0.4,0.0,0.0, //atomic coordinates - 0.25,0.25,0.25})} -}; +} + +std::map UcellTestLib{{"SiO", + UcellTestPrepare("fcc", // latname + 2, // lmaxmax + false, // init_vel + false, // selective_dyanmics + false, // relax_new + "volume", // fixed_axes + 10.2, // lat0 + {-0.5, + 0.0, + 0.5, // latvec + 0.0, + 0.5, + 0.5, + -0.5, + 0.5, + 0.0}, + {"O", "Si"}, // elements + {"O.upf", "Si.upf"}, // upf file + {"upf201", "upf201"}, // upf types + {"O.orb", "Si.orb"}, // orb file + {1, 5}, // number of each elements + {16.0, 28.0}, // atomic mass + "Cartesian", // coordination type + {0.0, + 0.0, + 0.0, // atomic coordinates + 0.1, + 0.0, + 0.0, // atomic coordinates + 0.2, + 0.0, + 0.0, // atomic coordinates + 0.3, + 0.0, + 0.0, // atomic coordinates + 0.4, + 0.0, + 0.0, // atomic coordinates + 0.25, + 0.25, + 0.25})}}; #endif diff --git a/source/module_hamilt_lcao/module_dftu/dftu.cpp b/source/module_hamilt_lcao/module_dftu/dftu.cpp index 751a9f05fd..e56dddd81d 100644 --- a/source/module_hamilt_lcao/module_dftu/dftu.cpp +++ b/source/module_hamilt_lcao/module_dftu/dftu.cpp @@ -1,15 +1,15 @@ #include "dftu.h" -#include "module_parameter/parameter.h" -#include "module_base/constants.h" -#include "module_base/global_function.h" -#include "module_base/inverse_matrix.h" -#include "module_base/memory.h" -#include "module_base/scalapack_connector.h" -#include "module_base/timer.h" #include "module_elecstate/magnetism.h" #include "module_elecstate/module_charge/charge.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" +#include "source_base/inverse_matrix.h" +#include "source_base/memory.h" +#include "source_base/scalapack_connector.h" +#include "source_base/timer.h" #include #include @@ -40,9 +40,10 @@ void DFTU::init(UnitCell& cell, // unitcell class const Parallel_Orbitals* pv, const int nks #ifdef __LCAO - , const LCAO_Orbitals* orb + , + const LCAO_Orbitals* orb #endif - ) +) { ModuleBase::TITLE("DFTU", "init"); @@ -53,9 +54,9 @@ void DFTU::init(UnitCell& cell, // unitcell class this->paraV = pv; -#ifdef __LCAO +#ifdef __LCAO ptr_orb_ = orb; - if(ptr_orb_ != nullptr) + if (ptr_orb_ != nullptr) { orb_cutoff_ = orb->cutoffs(); } @@ -66,7 +67,7 @@ void DFTU::init(UnitCell& cell, // unitcell class // global parameters, need to be removed in future const int npol = PARAM.globalv.npol; // number of polarization directions const int nlocal = PARAM.globalv.nlocal; // number of total local orbitals - const int nspin = PARAM.inp.nspin; // number of spins + const int nspin = PARAM.inp.nspin; // number of spins this->EU = 0.0; @@ -91,7 +92,7 @@ void DFTU::init(UnitCell& cell, // unitcell class locale[iat].resize(cell.atoms[it].nwl + 1); locale_save[iat].resize(cell.atoms[it].nwl + 1); - const int tlp1_npol = (this->orbital_corr[it]*2+1)*npol; + const int tlp1_npol = (this->orbital_corr[it] * 2 + 1) * npol; this->eff_pot_pw_index[iat] = pot_index; pot_index += tlp1_npol * tlp1_npol; @@ -196,7 +197,7 @@ void DFTU::init(UnitCell& cell, // unitcell class { std::stringstream sst; sst << "initial_onsite.dm"; - this->read_occup_m(cell,sst.str()); + this->read_occup_m(cell, sst.str()); #ifdef __MPI this->local_occup_bcast(cell); #endif @@ -210,7 +211,7 @@ void DFTU::init(UnitCell& cell, // unitcell class { std::stringstream sst; sst << PARAM.globalv.global_out_dir << "onsite.dm"; - this->read_occup_m(cell,sst.str()); + this->read_occup_m(cell, sst.str()); #ifdef __MPI this->local_occup_bcast(cell); #endif @@ -228,8 +229,7 @@ void DFTU::init(UnitCell& cell, // unitcell class #ifdef __LCAO -void DFTU::cal_energy_correction(const UnitCell& ucell, - const int istep) +void DFTU::cal_energy_correction(const UnitCell& ucell, const int istep) { ModuleBase::TITLE("DFTU", "cal_energy_correction"); ModuleBase::timer::tick("DFTU", "cal_energy_correction"); @@ -384,9 +384,10 @@ void DFTU::cal_energy_correction(const UnitCell& ucell, void DFTU::uramping_update() { // if uramping < 0.1, use the original U - if (this->uramping < 0.01) { + if (this->uramping < 0.01) + { return; -} + } // loop to change U for (int i = 0; i < this->U0.size(); i++) { @@ -452,7 +453,7 @@ void dftu_cal_occup_m(const int iter, const double& mixing_beta, hamilt::Hamilt* p_ham) { - GlobalC::dftu.cal_occup_m_gamma(iter, ucell ,dm, mixing_beta, p_ham); + GlobalC::dftu.cal_occup_m_gamma(iter, ucell, dm, mixing_beta, p_ham); } //! dftu occupation matrix for multiple k-points using dm(complex) @@ -464,7 +465,7 @@ void dftu_cal_occup_m(const int iter, const double& mixing_beta, hamilt::Hamilt>* p_ham) { - GlobalC::dftu.cal_occup_m_k(iter,ucell, dm, kv, mixing_beta, p_ham); + GlobalC::dftu.cal_occup_m_k(iter, ucell, dm, kv, mixing_beta, p_ham); } #endif diff --git a/source/module_hamilt_lcao/module_dftu/dftu_folding.cpp b/source/module_hamilt_lcao/module_dftu/dftu_folding.cpp index ee3b641384..ce1d9b3b3c 100644 --- a/source/module_hamilt_lcao/module_dftu/dftu_folding.cpp +++ b/source/module_hamilt_lcao/module_dftu/dftu_folding.cpp @@ -1,12 +1,12 @@ #ifdef __LCAO #include "dftu.h" -#include "module_base/timer.h" -#include "module_parameter/parameter.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer_funcs.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" namespace ModuleDFTU { @@ -27,18 +27,18 @@ void DFTU::fold_dSR_gamma(const UnitCell& ucell, ModuleBase::GlobalFunc::ZEROS(dSR_gamma, pv.nloc); double* dS_ptr = nullptr; - if(dim1 == 0) - { - dS_ptr = dsloc_x; - } - else if(dim1 == 1) - { - dS_ptr = dsloc_y; - } - else if (dim1 == 2) - { - dS_ptr = dsloc_z; - } + if (dim1 == 0) + { + dS_ptr = dsloc_x; + } + else if (dim1 == 1) + { + dS_ptr = dsloc_y; + } + else if (dim1 == 2) + { + dS_ptr = dsloc_z; + } int nnr = 0; ModuleBase::Vector3 tau1, tau2, dtau; @@ -63,10 +63,10 @@ void DFTU::fold_dSR_gamma(const UnitCell& ucell, double distance = dtau.norm() * ucell.lat0; double rcut = orb_cutoff_[T1] + orb_cutoff_[T2]; bool adj = false; - if (distance < rcut) - { - adj = true; - } + if (distance < rcut) + { + adj = true; + } else if (distance >= rcut) { for (int ad0 = 0; ad0 < gd->getAdjacentNum() + 1; ++ad0) @@ -97,30 +97,30 @@ void DFTU::fold_dSR_gamma(const UnitCell& ucell, const int jj0 = jj / PARAM.globalv.npol; const int iw1_all = start1 + jj0; const int mu = pv.global2local_row(iw1_all); - if (mu < 0) - { - continue; - } + if (mu < 0) + { + continue; + } for (int kk = 0; kk < atom2->nw * PARAM.globalv.npol; ++kk) { const int kk0 = kk / PARAM.globalv.npol; const int iw2_all = start2 + kk0; const int nu = pv.global2local_col(iw2_all); - if (nu < 0) - { - continue; - } + if (nu < 0) + { + continue; + } dSR_gamma[nu * pv.nrow + mu] += dS_ptr[nnr] * dh_r[nnr * 3 + dim2]; ++nnr; } // kk - } // jj - } // adj - } // ad - } // I1 - } // T1 + } // jj + } // adj + } // ad + } // I1 + } // T1 return; } @@ -236,19 +236,19 @@ void DFTU::folding_matrix_k(const UnitCell& ucell, // the index of orbitals in this processor const int iw1_all = start1 + ii; const int mu = pv.global2local_row(iw1_all); - if (mu < 0) - { - continue; - } + if (mu < 0) + { + continue; + } for (int jj = 0; jj < atom2->nw * PARAM.globalv.npol; jj++) { int iw2_all = start2 + jj; const int nu = pv.global2local_col(iw2_all); - if (nu < 0) - { - continue; - } + if (nu < 0) + { + continue; + } int iic; if (ModuleBase::GlobalFunc::IS_COLUMN_MAJOR_KS_SOLVER(PARAM.inp.ks_solver)) @@ -271,19 +271,18 @@ void DFTU::folding_matrix_k(const UnitCell& ucell, ++nnr; } // kk - } // jj - } // adj + } // jj + } // adj } // ad - } // I1 - } // T1 + } // I1 + } // T1 ModuleBase::timer::tick("DFTU", "folding_matrix_k"); return; } -void DFTU::folding_matrix_k_new(const int ik, - hamilt::Hamilt>* p_ham) +void DFTU::folding_matrix_k_new(const int ik, hamilt::Hamilt>* p_ham) { ModuleBase::TITLE("DFTU", "folding_matrix_k_new"); ModuleBase::timer::tick("DFTU", "folding_matrix_k_new"); @@ -295,22 +294,19 @@ void DFTU::folding_matrix_k_new(const int ik, } // get SR and fold to mat_k - if(PARAM.globalv.gamma_only_local) + if (PARAM.globalv.gamma_only_local) { - dynamic_cast*>(p_ham) - ->updateSk(ik, hk_type); + dynamic_cast*>(p_ham)->updateSk(ik, hk_type); } else { - if(PARAM.inp.nspin != 4) + if (PARAM.inp.nspin != 4) { - dynamic_cast, double>*>(p_ham) - ->updateSk(ik, hk_type); + dynamic_cast, double>*>(p_ham)->updateSk(ik, hk_type); } else { - dynamic_cast, std::complex>*>(p_ham) - ->updateSk(ik, hk_type); + dynamic_cast, std::complex>*>(p_ham)->updateSk(ik, hk_type); } } } diff --git a/source/module_hamilt_lcao/module_dftu/dftu_force.cpp b/source/module_hamilt_lcao/module_dftu/dftu_force.cpp index f4423f623d..06de356ae2 100644 --- a/source/module_hamilt_lcao/module_dftu/dftu_force.cpp +++ b/source/module_hamilt_lcao/module_dftu/dftu_force.cpp @@ -5,15 +5,15 @@ //========================================================== #ifdef __LCAO #include "dftu.h" -#include "module_base/constants.h" -#include "module_base/global_function.h" -#include "module_base/inverse_matrix.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" #include "module_elecstate/elecstate_lcao.h" #include "module_elecstate/magnetism.h" #include "module_elecstate/module_charge/charge.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" +#include "source_base/inverse_matrix.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" #include #include @@ -143,7 +143,7 @@ void DFTU::force_stress(const UnitCell& ucell, if (PARAM.inp.cal_force) { - this->cal_force_gamma(ucell,&rho_VU[0], pv, fsr.DSloc_x, fsr.DSloc_y, fsr.DSloc_z, force_dftu); + this->cal_force_gamma(ucell, &rho_VU[0], pv, fsr.DSloc_x, fsr.DSloc_y, fsr.DSloc_z, force_dftu); } if (PARAM.inp.cal_stress) diff --git a/source/module_hamilt_lcao/module_dftu/dftu_hamilt.cpp b/source/module_hamilt_lcao/module_dftu/dftu_hamilt.cpp index 90d781ae9c..2870987bba 100644 --- a/source/module_hamilt_lcao/module_dftu/dftu_hamilt.cpp +++ b/source/module_hamilt_lcao/module_dftu/dftu_hamilt.cpp @@ -1,14 +1,17 @@ #include "dftu.h" -#include "module_base/scalapack_connector.h" -#include "module_parameter/parameter.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/scalapack_connector.h" +#include "source_base/timer.h" namespace ModuleDFTU { #ifdef __LCAO -void DFTU::cal_eff_pot_mat_complex(const int ik, std::complex* eff_pot, const std::vector& isk, const std::complex* sk) +void DFTU::cal_eff_pot_mat_complex(const int ik, + std::complex* eff_pot, + const std::vector& isk, + const std::complex* sk) { ModuleBase::TITLE("DFTU", "cal_eff_pot_mat"); ModuleBase::timer::tick("DFTU", "cal_eff_pot_mat"); @@ -35,24 +38,43 @@ void DFTU::cal_eff_pot_mat_complex(const int ik, std::complex* eff_pot, this->cal_VU_pot_mat_complex(spin, true, &VU[0]); #ifdef __MPI - pzgemm_(&transN, &transN, - &PARAM.globalv.nlocal, &PARAM.globalv.nlocal, &PARAM.globalv.nlocal, - &half, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(VU), &one_int, &one_int, this->paraV->desc, - sk, &one_int, &one_int, this->paraV->desc, + pzgemm_(&transN, + &transN, + &PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &half, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(VU), + &one_int, + &one_int, + this->paraV->desc, + sk, + &one_int, + &one_int, + this->paraV->desc, &zero, - eff_pot, &one_int, &one_int, this->paraV->desc); + eff_pot, + &one_int, + &one_int, + this->paraV->desc); #endif for (int irc = 0; irc < this->paraV->nloc; irc++) VU[irc] = eff_pot[irc]; #ifdef __MPI - pztranc_(&PARAM.globalv.nlocal, &PARAM.globalv.nlocal, - &one, - &VU[0], &one_int, &one_int, this->paraV->desc, - &one, - eff_pot, &one_int, &one_int, this->paraV->desc); + pztranc_(&PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &one, + &VU[0], + &one_int, + &one_int, + this->paraV->desc, + &one, + eff_pot, + &one_int, + &one_int, + this->paraV->desc); #endif ModuleBase::timer::tick("DFTU", "cal_eff_pot_mat"); @@ -84,24 +106,43 @@ void DFTU::cal_eff_pot_mat_real(const int ik, double* eff_pot, const std::vector this->cal_VU_pot_mat_real(spin, 1, &VU[0]); #ifdef __MPI - pdgemm_(&transN, &transN, - &PARAM.globalv.nlocal, &PARAM.globalv.nlocal, &PARAM.globalv.nlocal, - &half, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(VU), &one_int, &one_int, this->paraV->desc, - sk, &one_int, &one_int, this->paraV->desc, + pdgemm_(&transN, + &transN, + &PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &half, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(VU), + &one_int, + &one_int, + this->paraV->desc, + sk, + &one_int, + &one_int, + this->paraV->desc, &beta, - eff_pot, &one_int, &one_int, this->paraV->desc); + eff_pot, + &one_int, + &one_int, + this->paraV->desc); #endif for (int irc = 0; irc < this->paraV->nloc; irc++) VU[irc] = eff_pot[irc]; #ifdef __MPI - pdtran_(&PARAM.globalv.nlocal, &PARAM.globalv.nlocal, - &one, - &VU[0], &one_int, &one_int, const_cast(this->paraV->desc), - &one, - eff_pot, &one_int, &one_int, const_cast(this->paraV->desc)); + pdtran_(&PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &one, + &VU[0], + &one_int, + &one_int, + const_cast(this->paraV->desc), + &one, + eff_pot, + &one_int, + &one_int, + const_cast(this->paraV->desc)); #endif ModuleBase::timer::tick("DFTU", "cal_eff_pot_mat"); @@ -118,21 +159,45 @@ void DFTU::cal_eff_pot_mat_R_double(const int ispin, double* SR, double* HR) this->cal_VU_pot_mat_real(ispin, 1, &VU[0]); #ifdef __MPI - pdgemm_(&transN, &transN, - &PARAM.globalv.nlocal, &PARAM.globalv.nlocal, &PARAM.globalv.nlocal, - &half, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(VU), &one_int, &one_int, this->paraV->desc, - SR, &one_int, &one_int, this->paraV->desc, + pdgemm_(&transN, + &transN, + &PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &half, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(VU), + &one_int, + &one_int, + this->paraV->desc, + SR, + &one_int, + &one_int, + this->paraV->desc, &beta, - HR, &one_int, &one_int, this->paraV->desc); + HR, + &one_int, + &one_int, + this->paraV->desc); - pdgemm_(&transN, &transN, - &PARAM.globalv.nlocal, &PARAM.globalv.nlocal, &PARAM.globalv.nlocal, - &half, - SR, &one_int, &one_int, this->paraV->desc, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(VU), &one_int, &one_int, this->paraV->desc, + pdgemm_(&transN, + &transN, + &PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &half, + SR, + &one_int, + &one_int, + this->paraV->desc, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(VU), + &one_int, + &one_int, + this->paraV->desc, &one, - HR, &one_int, &one_int, this->paraV->desc); + HR, + &one_int, + &one_int, + this->paraV->desc); #endif return; @@ -148,25 +213,49 @@ void DFTU::cal_eff_pot_mat_R_complex_double(const int ispin, std::complexcal_VU_pot_mat_complex(ispin, 1, &VU[0]); #ifdef __MPI - pzgemm_(&transN, &transN, - &PARAM.globalv.nlocal, &PARAM.globalv.nlocal, &PARAM.globalv.nlocal, - &half, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(VU), &one_int, &one_int, this->paraV->desc, - SR, &one_int, &one_int, this->paraV->desc, + pzgemm_(&transN, + &transN, + &PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &half, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(VU), + &one_int, + &one_int, + this->paraV->desc, + SR, + &one_int, + &one_int, + this->paraV->desc, &zero, - HR, &one_int, &one_int, this->paraV->desc); + HR, + &one_int, + &one_int, + this->paraV->desc); - pzgemm_(&transN, &transN, - &PARAM.globalv.nlocal, &PARAM.globalv.nlocal, &PARAM.globalv.nlocal, - &half, - SR, &one_int, &one_int, this->paraV->desc, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(VU), &one_int, &one_int, this->paraV->desc, + pzgemm_(&transN, + &transN, + &PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &half, + SR, + &one_int, + &one_int, + this->paraV->desc, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(VU), + &one_int, + &one_int, + this->paraV->desc, &one, - HR, &one_int, &one_int, this->paraV->desc); + HR, + &one_int, + &one_int, + this->paraV->desc); #endif return; } #endif -} \ No newline at end of file +} // namespace ModuleDFTU \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_dftu/dftu_io.cpp b/source/module_hamilt_lcao/module_dftu/dftu_io.cpp index 0a1c79b247..20ca97c623 100644 --- a/source/module_hamilt_lcao/module_dftu/dftu_io.cpp +++ b/source/module_hamilt_lcao/module_dftu/dftu_io.cpp @@ -1,12 +1,12 @@ #include "dftu.h" -#include "module_base/timer.h" -#include "module_parameter/parameter.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" namespace ModuleDFTU { -void DFTU::output(const UnitCell &ucell) +void DFTU::output(const UnitCell& ucell) { ModuleBase::TITLE("DFTU", "output"); @@ -22,9 +22,10 @@ void DFTU::output(const UnitCell &ucell) if (L >= orbital_corr[T] && orbital_corr[T] != -1) { - if (L != orbital_corr[T]) { + if (L != orbital_corr[T]) + { continue; -} + } if (!Yukawa) { @@ -35,9 +36,10 @@ void DFTU::output(const UnitCell &ucell) { for (int n = 0; n < N; n++) { - if (n != 0) { + if (n != 0) + { continue; -} + } double Ueff = (this->U_Yukawa[T][L][n] - this->J_Yukawa[T][L][n]) * ModuleBase::Ry_to_eV; GlobalV::ofs_running << "atom_type=" << T << " L=" << L << " chi=" << n << " U=" << this->U_Yukawa[T][L][n] * ModuleBase::Ry_to_eV << "eV " @@ -50,21 +52,24 @@ void DFTU::output(const UnitCell &ucell) } GlobalV::ofs_running << "Local occupation matrices" << std::endl; - this->write_occup_m(ucell,GlobalV::ofs_running, true); + this->write_occup_m(ucell, GlobalV::ofs_running, true); GlobalV::ofs_running << "//=======================================================//" << std::endl; - - //Write onsite.dm + + // Write onsite.dm std::ofstream ofdftu; - if(PARAM.inp.out_chg[0]){ - if(GlobalV::MY_RANK == 0){ - ofdftu.open(PARAM.globalv.global_out_dir + "onsite.dm"); - } + if (PARAM.inp.out_chg[0]) + { + if (GlobalV::MY_RANK == 0) + { + ofdftu.open(PARAM.globalv.global_out_dir + "onsite.dm"); + } + } + if (!ofdftu) + { + std::cout << "DFTU::write_occup_m. Can't create file onsite.dm!" << std::endl; + exit(0); } - if(!ofdftu){ - std::cout << "DFTU::write_occup_m. Can't create file onsite.dm!" << std::endl; - exit(0); - } - this->write_occup_m(ucell,ofdftu); + this->write_occup_m(ucell, ofdftu); ofdftu.close(); return; @@ -73,20 +78,21 @@ void DFTU::output(const UnitCell &ucell) // define the function calculate the eigenvalues of a matrix std::vector CalculateEigenvalues(std::vector>& A, int n); -void DFTU::write_occup_m(const UnitCell& ucell, - std::ofstream &ofs, - bool diag) +void DFTU::write_occup_m(const UnitCell& ucell, std::ofstream& ofs, bool diag) { ModuleBase::TITLE("DFTU", "write_occup_m"); - if(GlobalV::MY_RANK != 0) { return; -} + if (GlobalV::MY_RANK != 0) + { + return; + } for (int T = 0; T < ucell.ntype; T++) { - if (orbital_corr[T] == -1) { + if (orbital_corr[T] == -1) + { continue; -} + } const int NL = ucell.atoms[T].nwl + 1; const int LC = orbital_corr[T]; @@ -98,9 +104,10 @@ void DFTU::write_occup_m(const UnitCell& ucell, for (int l = 0; l < NL; l++) { - if (l != orbital_corr[T]) { + if (l != orbital_corr[T]) + { continue; -} + } const int N = ucell.atoms[T].l_nchi[l]; ofs << "L" @@ -109,9 +116,10 @@ void DFTU::write_occup_m(const UnitCell& ucell, for (int n = 0; n < N; n++) { // if(!Yukawa && n!=0) continue; - if (n != 0) { + if (n != 0) + { continue; -} + } ofs << "zeta" << " " << n << std::endl; @@ -121,7 +129,7 @@ void DFTU::write_occup_m(const UnitCell& ucell, double sum0[2]; for (int is = 0; is < 2; is++) { - if(diag)// diagonalization for local occupation matrix and print the eigenvalues + if (diag) // diagonalization for local occupation matrix and print the eigenvalues { std::vector> A(2 * l + 1, std::vector(2 * l + 1)); for (int m0 = 0; m0 < 2 * l + 1; m0++) @@ -133,16 +141,14 @@ void DFTU::write_occup_m(const UnitCell& ucell, } std::vector eigenvalues = CalculateEigenvalues(A, 2 * l + 1); sum0[is] = 0.0; - ofs<< "eigenvalues" + ofs << "eigenvalues" << " " << is << std::endl; for (int i = 0; i < 2 * l + 1; i++) { - ofs << std::setw(12) << std::setprecision(8) << std::fixed - << eigenvalues[i]; + ofs << std::setw(12) << std::setprecision(8) << std::fixed << eigenvalues[i]; sum0[is] += eigenvalues[i]; } - ofs << std::setw(12) << std::setprecision(8) << std::fixed - << sum0[is] << std::endl; + ofs << std::setw(12) << std::setprecision(8) << std::fixed << sum0[is] << std::endl; } ofs << "spin" << " " << is << std::endl; @@ -156,19 +162,20 @@ void DFTU::write_occup_m(const UnitCell& ucell, ofs << std::endl; } } - if(diag) + if (diag) { - ofs << std::setw(12) << std::setprecision(8) << std::fixed<< "atomic mag: "<> A(2 * l + 1, std::vector(2 * l + 1)); int index = 0; - for(int is=0;is<4;is++) + for (int is = 0; is < 4; is++) { for (int m0 = 0; m0 < 2 * l + 1; m0++) { @@ -180,56 +187,56 @@ void DFTU::write_occup_m(const UnitCell& ucell, } std::vector eigenvalues = CalculateEigenvalues(A, 2 * l + 1); sum0[is] = 0.0; - ofs<< "eigenvalues" + ofs << "eigenvalues" << " " << is << std::endl; for (int i = 0; i < 2 * l + 1; i++) { - ofs << std::setw(12) << std::setprecision(8) << std::fixed - << eigenvalues[i]; + ofs << std::setw(12) << std::setprecision(8) << std::fixed << eigenvalues[i]; sum0[is] += eigenvalues[i]; } - ofs << std::setw(12) << std::setprecision(8) << std::fixed - << sum0[is] << std::endl; + ofs << std::setw(12) << std::setprecision(8) << std::fixed << sum0[is] << std::endl; } - ofs << std::setw(12) << std::setprecision(8) << std::fixed<< "atomic mag: "<> word; - if (ifdftu.eof()) { + if (ifdftu.eof()) + { break; -} + } if (strcmp("atoms", word) == 0) { @@ -279,9 +287,10 @@ void DFTU::read_occup_m(const UnitCell& ucell, for (int l = 0; l < NL; l++) { - if (l != orbital_corr[T]) { + if (l != orbital_corr[T]) + { continue; -} + } ifdftu >> word; @@ -294,9 +303,10 @@ void DFTU::read_occup_m(const UnitCell& ucell, for (int n = 0; n < N; n++) { // if(!Yukawa && n!=0) continue; - if (n != 0) { + if (n != 0) + { continue; -} + } ifdftu >> word; if (strcmp("zeta", word) == 0) @@ -393,9 +403,10 @@ void DFTU::local_occup_bcast(const UnitCell& ucell) for (int T = 0; T < ucell.ntype; T++) { - if (orbital_corr[T] == -1) { + if (orbital_corr[T] == -1) + { continue; -} + } for (int I = 0; I < ucell.atoms[T].na; I++) { @@ -404,16 +415,18 @@ void DFTU::local_occup_bcast(const UnitCell& ucell) for (int l = 0; l <= ucell.atoms[T].nwl; l++) { - if (l != orbital_corr[T]) { + if (l != orbital_corr[T]) + { continue; -} + } for (int n = 0; n < ucell.atoms[T].l_nchi[l]; n++) { // if(!Yukawa && n!=0) continue; - if (n != 0) { + if (n != 0) + { continue; -} + } if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 2) { @@ -462,13 +475,18 @@ void DFTU::local_occup_bcast(const UnitCell& ucell) return; } -inline void JacobiRotate(std::vector>& A, int p, int q, int n) { - if (std::abs(A[p][q]) > 1e-10) { +inline void JacobiRotate(std::vector>& A, int p, int q, int n) +{ + if (std::abs(A[p][q]) > 1e-10) + { double r = (A[q][q] - A[p][p]) / (2.0 * A[p][q]); double t; - if (r >= 0) { + if (r >= 0) + { t = 1.0 / (r + sqrt(1.0 + r * r)); - } else { + } + else + { t = -1.0 / (-r + sqrt(1.0 + r * r)); } double c = 1.0 / sqrt(1.0 + t * t); @@ -478,8 +496,10 @@ inline void JacobiRotate(std::vector>& A, int p, int q, int A[q][q] += t * A[p][q]; A[p][q] = A[q][p] = 0.0; - for (int k = 0; k < n; k++) { - if (k != p && k != q) { + for (int k = 0; k < n; k++) + { + if (k != p && k != q) + { double Akp = c * A[k][p] - s * A[k][q]; double Akq = s * A[k][p] + c * A[k][q]; A[k][p] = A[p][k] = Akp; @@ -489,21 +509,28 @@ inline void JacobiRotate(std::vector>& A, int p, int q, int } } -inline std::vector CalculateEigenvalues(std::vector>& A, int n) { +inline std::vector CalculateEigenvalues(std::vector>& A, int n) +{ std::vector eigenvalues(n); - while (true) { + while (true) + { int p = 0, q = 1; - for (int i = 0; i < n; i++) { - for (int j = i + 1; j < n; j++) { - if (std::abs(A[i][j]) > std::abs(A[p][q])) { + for (int i = 0; i < n; i++) + { + for (int j = i + 1; j < n; j++) + { + if (std::abs(A[i][j]) > std::abs(A[p][q])) + { p = i; q = j; } } } - if (std::abs(A[p][q]) < 1e-10) { - for (int i = 0; i < n; i++) { + if (std::abs(A[p][q]) < 1e-10) + { + for (int i = 0; i < n; i++) + { eigenvalues[i] = A[i][i]; } break; diff --git a/source/module_hamilt_lcao/module_dftu/dftu_occup.cpp b/source/module_hamilt_lcao/module_dftu/dftu_occup.cpp index 0a2c80ddf4..6edda11f44 100644 --- a/source/module_hamilt_lcao/module_dftu/dftu_occup.cpp +++ b/source/module_hamilt_lcao/module_dftu/dftu_occup.cpp @@ -1,11 +1,11 @@ #include "dftu.h" -#include "module_base/timer.h" -#include "module_parameter/parameter.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" #ifdef __LCAO #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" #endif -#include "module_base/scalapack_connector.h" +#include "source_base/scalapack_connector.h" namespace ModuleDFTU { @@ -16,10 +16,10 @@ void DFTU::copy_locale(const UnitCell& ucell) for (int T = 0; T < ucell.ntype; T++) { - if (orbital_corr[T] == -1) - { - continue; - } + if (orbital_corr[T] == -1) + { + continue; + } for (int I = 0; I < ucell.atoms[T].na; I++) { @@ -54,10 +54,10 @@ void DFTU::zero_locale(const UnitCell& ucell) for (int T = 0; T < ucell.ntype; T++) { - if (orbital_corr[T] == -1) - { - continue; - } + if (orbital_corr[T] == -1) + { + continue; + } for (int I = 0; I < ucell.atoms[T].na; I++) { @@ -85,8 +85,7 @@ void DFTU::zero_locale(const UnitCell& ucell) ModuleBase::timer::tick("DFTU", "zero_locale"); } -void DFTU::mix_locale(const UnitCell& ucell, - const double& mixing_beta) +void DFTU::mix_locale(const UnitCell& ucell, const double& mixing_beta) { ModuleBase::TITLE("DFTU", "mix_locale"); ModuleBase::timer::tick("DFTU", "mix_locale"); @@ -95,10 +94,10 @@ void DFTU::mix_locale(const UnitCell& ucell, for (int T = 0; T < ucell.ntype; T++) { - if (orbital_corr[T] == -1) - { - continue; - } + if (orbital_corr[T] == -1) + { + continue; + } for (int I = 0; I < ucell.atoms[T].na; I++) { @@ -112,12 +111,12 @@ void DFTU::mix_locale(const UnitCell& ucell, { if (PARAM.inp.nspin == 4) { - locale[iat][l][n][0] = locale[iat][l][n][0]*beta + locale_save[iat][l][n][0]*(1.0-beta); + locale[iat][l][n][0] = locale[iat][l][n][0] * beta + locale_save[iat][l][n][0] * (1.0 - beta); } else if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 2) { - locale[iat][l][n][0] = locale[iat][l][n][0] * beta + locale_save[iat][l][n][0] * (1.0-beta); - locale[iat][l][n][1] = locale[iat][l][n][1] * beta + locale_save[iat][l][n][1] * (1.0-beta); + locale[iat][l][n][0] = locale[iat][l][n][0] * beta + locale_save[iat][l][n][0] * (1.0 - beta); + locale[iat][l][n][1] = locale[iat][l][n][1] * beta + locale_save[iat][l][n][1] * (1.0 - beta); } } } @@ -128,7 +127,7 @@ void DFTU::mix_locale(const UnitCell& ucell, #ifdef __LCAO -void DFTU::cal_occup_m_k(const int iter, +void DFTU::cal_occup_m_k(const int iter, const UnitCell& ucell, const std::vector>>& dm_k, const K_Vectors& kv, @@ -146,7 +145,7 @@ void DFTU::cal_occup_m_k(const int iter, const char transN = 'N'; const char transT = 'T'; const int one_int = 1; - const std::complex beta(0.0,0.0), alpha(1.0,0.0); + const std::complex beta(0.0, 0.0), alpha(1.0, 0.0); std::vector> srho(this->paraV->nloc); @@ -157,7 +156,7 @@ void DFTU::cal_occup_m_k(const int iter, std::complex* s_k_pointer = nullptr; - if(PARAM.inp.nspin != 4) + if (PARAM.inp.nspin != 4) { s_k_pointer = dynamic_cast, double>*>(p_ham)->getSk(); } @@ -168,25 +167,25 @@ void DFTU::cal_occup_m_k(const int iter, #ifdef __MPI ScalapackConnector::gemm(transN, - transT, - PARAM.globalv.nlocal, - PARAM.globalv.nlocal, - PARAM.globalv.nlocal, - alpha, - s_k_pointer, - one_int, - one_int, - &this->paraV->desc[0], - dm_k[ik].data(), - //dm_k[ik].c, - one_int, - one_int, - &this->paraV->desc[0], - beta, - srho.data(), - one_int, - one_int, - &this->paraV->desc[0]); + transT, + PARAM.globalv.nlocal, + PARAM.globalv.nlocal, + PARAM.globalv.nlocal, + alpha, + s_k_pointer, + one_int, + one_int, + &this->paraV->desc[0], + dm_k[ik].data(), + // dm_k[ik].c, + one_int, + one_int, + &this->paraV->desc[0], + beta, + srho.data(), + one_int, + one_int, + &this->paraV->desc[0]); /*pzgemm_(&transN, &transT, &PARAM.globalv.nlocal, @@ -215,10 +214,10 @@ void DFTU::cal_occup_m_k(const int iter, const int NL = ucell.atoms[it].nwl + 1; const int LC = orbital_corr[it]; - if (LC == -1) - { - continue; - } + if (LC == -1) + { + continue; + } for (int ia = 0; ia < ucell.atoms[it].na; ia++) { @@ -226,20 +225,20 @@ void DFTU::cal_occup_m_k(const int iter, for (int l = 0; l < NL; l++) { - if (l != orbital_corr[it]) - { - continue; - } + if (l != orbital_corr[it]) + { + continue; + } const int N = ucell.atoms[it].l_nchi[l]; for (int n = 0; n < N; n++) { // if(!Yukawa && n!=0) continue; - if (n != 0) - { - continue; - } + if (n != 0) + { + continue; + } // Calculate the local occupation number matrix for (int m0 = 0; m0 < 2 * l + 1; m0++) @@ -264,35 +263,35 @@ void DFTU::cal_occup_m_k(const int iter, const int m0_all = m0 + ipol0 * (2 * l + 1); const int m1_all = m1 + ipol1 * (2 * l + 1); - if ((nu >= 0) && (mu >= 0)) - { - locale[iat][l][n][spin](m0_all, m1_all) += (srho[irc]).real() / 4.0; - } + if ((nu >= 0) && (mu >= 0)) + { + locale[iat][l][n][spin](m0_all, m1_all) += (srho[irc]).real() / 4.0; + } - if ((nu_prime >= 0) && (mu_prime >= 0)) - { - locale[iat][l][n][spin](m0_all, m1_all) - += (std::conj(srho[irc_prime])).real() / 4.0; - } + if ((nu_prime >= 0) && (mu_prime >= 0)) + { + locale[iat][l][n][spin](m0_all, m1_all) + += (std::conj(srho[irc_prime])).real() / 4.0; + } } // ipol1 - } // m1 - } // ipol0 - } // m0 - } // end n - } // end l - } // end ia - } // end it - } // ik + } // m1 + } // ipol0 + } // m0 + } // end n + } // end l + } // end ia + } // end it + } // ik for (int it = 0; it < ucell.ntype; it++) { const int NL = ucell.atoms[it].nwl + 1; const int LC = orbital_corr[it]; - if (LC == -1) - { - continue; - } + if (LC == -1) + { + continue; + } for (int ia = 0; ia < ucell.atoms[it].na; ia++) { @@ -300,21 +299,21 @@ void DFTU::cal_occup_m_k(const int iter, for (int l = 0; l < NL; l++) { - if (l != orbital_corr[it]) - { - continue; - } + if (l != orbital_corr[it]) + { + continue; + } const int N = ucell.atoms[it].l_nchi[l]; for (int n = 0; n < N; n++) { // if(!Yukawa && n!=0) continue; - if (n != 0) - { - continue; - } - // set the local occupation mumber matrix of spin up and down zeros + if (n != 0) + { + continue; + } + // set the local occupation mumber matrix of spin up and down zeros #ifdef __MPI if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 4) @@ -370,13 +369,13 @@ void DFTU::cal_occup_m_k(const int iter, exit(0); } } // end n - } // end l - } // end ia - } // end it + } // end l + } // end ia + } // end it - if(mixing_dftu && initialed_locale) + if (mixing_dftu && initialed_locale) { - this->mix_locale(ucell,mixing_beta); + this->mix_locale(ucell, mixing_beta); } this->initialed_locale = true; @@ -385,9 +384,9 @@ void DFTU::cal_occup_m_k(const int iter, } void DFTU::cal_occup_m_gamma(const int iter, - const UnitCell &ucell, - const std::vector> &dm_gamma, - const double& mixing_beta, + const UnitCell& ucell, + const std::vector>& dm_gamma, + const double& mixing_beta, hamilt::Hamilt* p_ham) { ModuleBase::TITLE("DFTU", "cal_occup_m_gamma"); @@ -409,25 +408,25 @@ void DFTU::cal_occup_m_gamma(const int iter, #ifdef __MPI ScalapackConnector::gemm(transN, - transT, - PARAM.globalv.nlocal, - PARAM.globalv.nlocal, - PARAM.globalv.nlocal, - alpha, - s_gamma_pointer, - one_int, - one_int, - &this->paraV->desc[0], - dm_gamma[is].data(), - //dm_gamma[is].c, - one_int, - one_int, - &this->paraV->desc[0], - beta, - srho.data(), - one_int, - one_int, - &this->paraV->desc[0]); + transT, + PARAM.globalv.nlocal, + PARAM.globalv.nlocal, + PARAM.globalv.nlocal, + alpha, + s_gamma_pointer, + one_int, + one_int, + &this->paraV->desc[0], + dm_gamma[is].data(), + // dm_gamma[is].c, + one_int, + one_int, + &this->paraV->desc[0], + beta, + srho.data(), + one_int, + one_int, + &this->paraV->desc[0]); /*pdgemm_(&transN, &transT, &PARAM.globalv.nlocal, @@ -453,29 +452,29 @@ void DFTU::cal_occup_m_gamma(const int iter, for (int it = 0; it < ucell.ntype; it++) { const int NL = ucell.atoms[it].nwl + 1; - if (orbital_corr[it] == -1) - { - continue; - } - for (int ia = 0; ia < ucell.atoms[it].na; ia++) + if (orbital_corr[it] == -1) + { + continue; + } + for (int ia = 0; ia < ucell.atoms[it].na; ia++) { const int iat = ucell.itia2iat(it, ia); for (int l = 0; l < NL; l++) { - if (l != orbital_corr[it]) - { - continue; - } + if (l != orbital_corr[it]) + { + continue; + } const int N = ucell.atoms[it].l_nchi[l]; for (int n = 0; n < N; n++) { - if (n != 0) - { - continue; - } + if (n != 0) + { + continue; + } // Calculate the local occupation number matrix for (int m0 = 0; m0 < 2 * l + 1; m0++) @@ -547,14 +546,14 @@ void DFTU::cal_occup_m_gamma(const int iter, } } // end for(n) - } // L - } // ia - } // it - } // is + } // L + } // ia + } // it + } // is - if(mixing_dftu && initialed_locale) + if (mixing_dftu && initialed_locale) { - this->mix_locale(ucell,mixing_beta); + this->mix_locale(ucell, mixing_beta); } this->initialed_locale = true; diff --git a/source/module_hamilt_lcao/module_dftu/dftu_pw.cpp b/source/module_hamilt_lcao/module_dftu/dftu_pw.cpp index 0ae2588625..aac9551dcf 100644 --- a/source/module_hamilt_lcao/module_dftu/dftu_pw.cpp +++ b/source/module_hamilt_lcao/module_dftu/dftu_pw.cpp @@ -1,9 +1,8 @@ #include "dftu.h" #include "module_hamilt_pw/hamilt_pwdft/onsite_projector.h" -#include "module_base/parallel_reduce.h" #include "module_parameter/parameter.h" -#include "module_base/timer.h" - +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" namespace ModuleDFTU { @@ -12,35 +11,39 @@ DFTU* DFTU::get_instance() return &GlobalC::dftu; } /// calculate occupation matrix for DFT+U -void DFTU::cal_occ_pw(const int iter, const void* psi_in, const ModuleBase::matrix& wg_in, const UnitCell& cell, const double& mixing_beta) +void DFTU::cal_occ_pw(const int iter, + const void* psi_in, + const ModuleBase::matrix& wg_in, + const UnitCell& cell, + const double& mixing_beta) { ModuleBase::timer::tick("DFTU", "cal_occ_pw"); this->copy_locale(cell); this->zero_locale(cell); - if(PARAM.inp.device == "cpu") + if (PARAM.inp.device == "cpu") { auto* onsite_p = projectors::OnsiteProjector::get_instance(); const psi::Psi>* psi_p = (const psi::Psi>*)psi_in; // loop over k-points to calculate Mi of \sum_{k,i,l,m} const int nbands = psi_p->get_nbands(); - for(int ik = 0; ik < psi_p->get_nk(); ik++) + for (int ik = 0; ik < psi_p->get_nk(); ik++) { psi_p->fix_k(ik); onsite_p->tabulate_atomic(ik); - onsite_p->overlap_proj_psi(nbands*psi_p->get_npol(), psi_p->get_pointer()); + onsite_p->overlap_proj_psi(nbands * psi_p->get_npol(), psi_p->get_pointer()); const std::complex* becp = onsite_p->get_h_becp(); // becp(nbands*npol , nkb) // mag = wg * \sum_{nh}becp * becp int nkb = onsite_p->get_size_becp() / nbands / psi_p->get_npol(); int begin_ih = 0; - for(int iat = 0; iat < cell.nat; iat++) + for (int iat = 0; iat < cell.nat; iat++) { const int it = cell.iat2it[iat]; const int nh = onsite_p->get_nh(iat); const int target_l = this->orbital_corr[it]; - if(target_l == -1) + if (target_l == -1) { begin_ih += nh; continue; @@ -49,16 +52,16 @@ void DFTU::cal_occ_pw(const int iter, const void* psi_in, const ModuleBase::matr const int m_begin = target_l * target_l; const int tlp1 = 2 * target_l + 1; const int tlp1_2 = tlp1 * tlp1; - for(int ib = 0;ib occ[4]; occ[0] = weight * conj(becp[index_m1]) * becp[index_m2]; occ[1] = weight * conj(becp[index_m1]) * becp[index_m2 + nkb]; @@ -71,35 +74,36 @@ void DFTU::cal_occ_pw(const int iter, const void* psi_in, const ModuleBase::matr ind_m1m2++; } } - }// ib + } // ib begin_ih += nh; - }// iat - }// ik + } // iat + } // ik } #if defined(__CUDA) || defined(__ROCM) else { auto* onsite_p = projectors::OnsiteProjector::get_instance(); - const psi::Psi, base_device::DEVICE_GPU>* psi_p = (const psi::Psi, base_device::DEVICE_GPU>*)psi_in; + const psi::Psi, base_device::DEVICE_GPU>* psi_p + = (const psi::Psi, base_device::DEVICE_GPU>*)psi_in; // loop over k-points to calculate Mi of \sum_{k,i,l,m} const int nbands = psi_p->get_nbands(); - for(int ik = 0; ik < psi_p->get_nk(); ik++) + for (int ik = 0; ik < psi_p->get_nk(); ik++) { psi_p->fix_k(ik); onsite_p->tabulate_atomic(ik); - onsite_p->overlap_proj_psi(nbands*psi_p->get_npol(), psi_p->get_pointer()); + onsite_p->overlap_proj_psi(nbands * psi_p->get_npol(), psi_p->get_pointer()); const std::complex* becp = onsite_p->get_h_becp(); // becp(nbands*npol , nkb) // mag = wg * \sum_{nh}becp * becp int nkb = onsite_p->get_size_becp() / nbands / psi_p->get_npol(); int begin_ih = 0; - for(int iat = 0; iat < cell.nat; iat++) + for (int iat = 0; iat < cell.nat; iat++) { const int it = cell.iat2it[iat]; const int nh = onsite_p->get_nh(iat); const int target_l = this->orbital_corr[it]; - if(target_l == -1) + if (target_l == -1) { begin_ih += nh; continue; @@ -108,16 +112,16 @@ void DFTU::cal_occ_pw(const int iter, const void* psi_in, const ModuleBase::matr const int m_begin = target_l * target_l; const int tlp1 = 2 * target_l + 1; const int tlp1_2 = tlp1 * tlp1; - for(int ib = 0;ib occ[4]; occ[0] = weight * conj(becp[index_m1]) * becp[index_m2]; occ[1] = weight * conj(becp[index_m1]) * becp[index_m2 + nkb]; @@ -130,26 +134,29 @@ void DFTU::cal_occ_pw(const int iter, const void* psi_in, const ModuleBase::matr ind_m1m2++; } } - }// ib + } // ib begin_ih += nh; - }// iat - }// ik + } // iat + } // ik } #endif this->EU = 0.0; // reduce mag from all k-pools - for(int iat = 0; iat < cell.nat; iat++) + for (int iat = 0; iat < cell.nat; iat++) { const int it = cell.iat2it[iat]; const int target_l = this->orbital_corr[it]; - if(target_l == -1) + if (target_l == -1) { continue; } const int size = (2 * target_l + 1) * (2 * target_l + 1); - Parallel_Reduce::reduce_double_allpool(PARAM.inp.kpar, PARAM.globalv.nproc_in_pool, this->locale[iat][target_l][0][0].c, size * PARAM.inp.nspin); - //update effective potential + Parallel_Reduce::reduce_double_allpool(PARAM.inp.kpar, + PARAM.globalv.nproc_in_pool, + this->locale[iat][target_l][0][0].c, + size * PARAM.inp.nspin); + // update effective potential const double u_value = this->U[it]; std::complex* vu_iat = &(this->eff_pot_pw[this->eff_pot_pw_index[iat]]); const int m_size = 2 * target_l + 1; @@ -157,8 +164,10 @@ void DFTU::cal_occ_pw(const int iter, const void* psi_in, const ModuleBase::matr { for (int m2 = 0; m2 < m_size; m2++) { - vu_iat[m1 * m_size + m2] = u_value * (1.0 * (m1 == m2) - this->locale[iat][target_l][0][0].c[m2 * m_size + m1]); - this->EU += u_value * 0.25 * this->locale[iat][target_l][0][0].c[m2 * m_size + m1] * this->locale[iat][target_l][0][0].c[m1 * m_size + m2]; + vu_iat[m1 * m_size + m2] + = u_value * (1.0 * (m1 == m2) - this->locale[iat][target_l][0][0].c[m2 * m_size + m1]); + this->EU += u_value * 0.25 * this->locale[iat][target_l][0][0].c[m2 * m_size + m1] + * this->locale[iat][target_l][0][0].c[m1 * m_size + m2]; } } for (int is = 1; is < 4; ++is) @@ -168,12 +177,14 @@ void DFTU::cal_occ_pw(const int iter, const void* psi_in, const ModuleBase::matr { for (int m2 = 0; m2 < m_size; m2++) { - vu_iat[start + m1 * m_size + m2] = u_value * (0 - this->locale[iat][target_l][0][0].c[start + m2 * m_size + m1]); - this->EU += u_value * 0.25 * this->locale[iat][target_l][0][0].c[start + m2 * m_size + m1] * this->locale[iat][target_l][0][0].c[start + m1 * m_size + m2]; + vu_iat[start + m1 * m_size + m2] + = u_value * (0 - this->locale[iat][target_l][0][0].c[start + m2 * m_size + m1]); + this->EU += u_value * 0.25 * this->locale[iat][target_l][0][0].c[start + m2 * m_size + m1] + * this->locale[iat][target_l][0][0].c[start + m1 * m_size + m2]; } } } - // transfer from Pauli matrix representation to spin representation + // transfer from Pauli matrix representation to spin representation for (int m1 = 0; m1 < m_size; m1++) { for (int m2 = 0; m2 < m_size; m2++) @@ -196,7 +207,7 @@ void DFTU::cal_occ_pw(const int iter, const void* psi_in, const ModuleBase::matr } } - if(mixing_dftu && initialed_locale) + if (mixing_dftu && initialed_locale) { this->mix_locale(cell, mixing_beta); } @@ -206,7 +217,6 @@ void DFTU::cal_occ_pw(const int iter, const void* psi_in, const ModuleBase::matr /// calculate the local DFT+U effective potential matrix for PW base. void DFTU::cal_VU_pot_pw(const int spin) { - } } // namespace ModuleDFTU \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_dftu/dftu_tools.cpp b/source/module_hamilt_lcao/module_dftu/dftu_tools.cpp index e7d78704d7..93d9659ea8 100644 --- a/source/module_hamilt_lcao/module_dftu/dftu_tools.cpp +++ b/source/module_hamilt_lcao/module_dftu/dftu_tools.cpp @@ -1,7 +1,7 @@ #include "dftu.h" -#include "module_base/timer.h" -#include "module_parameter/parameter.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" namespace ModuleDFTU { @@ -14,7 +14,7 @@ void DFTU::cal_VU_pot_mat_complex(const int spin, const bool newlocale, std::com for (int it = 0; it < this->ucell->ntype; ++it) { - if (PARAM.inp.orbital_corr[it] == -1) + if (PARAM.inp.orbital_corr[it] == -1) { continue; } @@ -23,14 +23,14 @@ void DFTU::cal_VU_pot_mat_complex(const int spin, const bool newlocale, std::com const int iat = this->ucell->itia2iat(it, ia); for (int L = 0; L <= this->ucell->atoms[it].nwl; L++) { - if (L != PARAM.inp.orbital_corr[it]) + if (L != PARAM.inp.orbital_corr[it]) { continue; } for (int n = 0; n < this->ucell->atoms[it].l_nchi[L]; n++) { - if (n != 0) + if (n != 0) { continue; } @@ -40,7 +40,7 @@ void DFTU::cal_VU_pot_mat_complex(const int spin, const bool newlocale, std::com for (int ipol1 = 0; ipol1 < PARAM.globalv.npol; ipol1++) { const int mu = this->paraV->global2local_row(this->iatlnmipol2iwt[iat][L][n][m1][ipol1]); - if (mu < 0) + if (mu < 0) { continue; } @@ -51,7 +51,7 @@ void DFTU::cal_VU_pot_mat_complex(const int spin, const bool newlocale, std::com { const int nu = this->paraV->global2local_col(this->iatlnmipol2iwt[iat][L][n][m2][ipol2]); - if (nu < 0) + if (nu < 0) { continue; } @@ -60,13 +60,13 @@ void DFTU::cal_VU_pot_mat_complex(const int spin, const bool newlocale, std::com double val = get_onebody_eff_pot(it, iat, L, n, spin, m1_all, m2_all, newlocale); VU[nu * this->paraV->nrow + mu] = std::complex(val, 0.0); } // ipol2 - } // m2 - } // ipol1 - } // m1 - } // n - } // l - } // ia - } // it + } // m2 + } // ipol1 + } // m1 + } // n + } // l + } // ia + } // it return; } @@ -78,7 +78,7 @@ void DFTU::cal_VU_pot_mat_real(const int spin, const bool newlocale, double* VU) for (int it = 0; it < this->ucell->ntype; ++it) { - if (PARAM.inp.orbital_corr[it] == -1) + if (PARAM.inp.orbital_corr[it] == -1) { continue; } @@ -87,14 +87,14 @@ void DFTU::cal_VU_pot_mat_real(const int spin, const bool newlocale, double* VU) const int iat = this->ucell->itia2iat(it, ia); for (int L = 0; L <= this->ucell->atoms[it].nwl; L++) { - if (L != PARAM.inp.orbital_corr[it]) + if (L != PARAM.inp.orbital_corr[it]) { continue; } for (int n = 0; n < this->ucell->atoms[it].l_nchi[L]; n++) { - if (n != 0) + if (n != 0) { continue; } @@ -103,7 +103,7 @@ void DFTU::cal_VU_pot_mat_real(const int spin, const bool newlocale, double* VU) for (int ipol1 = 0; ipol1 < PARAM.globalv.npol; ipol1++) { const int mu = this->paraV->global2local_row(this->iatlnmipol2iwt[iat][L][n][m1][ipol1]); - if (mu < 0) + if (mu < 0) { continue; } @@ -113,7 +113,7 @@ void DFTU::cal_VU_pot_mat_real(const int spin, const bool newlocale, double* VU) { const int nu = this->paraV->global2local_col(this->iatlnmipol2iwt[iat][L][n][m2][ipol2]); - if (nu < 0) + if (nu < 0) { continue; } @@ -125,13 +125,13 @@ void DFTU::cal_VU_pot_mat_real(const int spin, const bool newlocale, double* VU) = this->get_onebody_eff_pot(it, iat, L, n, spin, m1_all, m2_all, newlocale); } // ipol2 - } // m2 - } // ipol1 - } // m1 - } // n - } // l - } // ia - } // it + } // m2 + } // ipol1 + } // m1 + } // n + } // l + } // ia + } // it return; } @@ -164,19 +164,24 @@ double DFTU::get_onebody_eff_pot(const int T, { if (Yukawa) { - if (m0 == m1) + if (m0 == m1) { VU = (this->U_Yukawa[T][L][N] - this->J_Yukawa[T][L][N]) * (0.5 - this->locale[iat][L][N][spin](m0, m1)); - } else { + } + else + { VU = -(this->U_Yukawa[T][L][N] - this->J_Yukawa[T][L][N]) * this->locale[iat][L][N][spin](m0, m1); } } else { - if (m0 == m1) { + if (m0 == m1) + { VU = (this->U[T]) * (0.5 - this->locale[iat][L][N][spin](m0, m1)); - } else { + } + else + { VU = -(this->U[T]) * this->locale[iat][L][N][spin](m0, m1); } } @@ -185,19 +190,25 @@ double DFTU::get_onebody_eff_pot(const int T, { if (Yukawa) { - if (m0 == m1) { + if (m0 == m1) + { VU = (this->U_Yukawa[T][L][N] - this->J_Yukawa[T][L][N]) * (0.5 - this->locale_save[iat][L][N][spin](m0, m1)); - } else { + } + else + { VU = -(this->U_Yukawa[T][L][N] - this->J_Yukawa[T][L][N]) * this->locale_save[iat][L][N][spin](m0, m1); } } else { - if (m0 == m1) { + if (m0 == m1) + { VU = (this->U[T]) * (0.5 - this->locale_save[iat][L][N][spin](m0, m1)); - } else { + } + else + { VU = -(this->U[T]) * this->locale_save[iat][L][N][spin](m0, m1); } } diff --git a/source/module_hamilt_lcao/module_dftu/dftu_yukawa.cpp b/source/module_hamilt_lcao/module_dftu/dftu_yukawa.cpp index 7845fe9963..0223ba488c 100644 --- a/source/module_hamilt_lcao/module_dftu/dftu_yukawa.cpp +++ b/source/module_hamilt_lcao/module_dftu/dftu_yukawa.cpp @@ -4,19 +4,19 @@ #include "module_parameter/parameter.h" // DATE : 2019-12-10 //========================================================== -#include "module_base/constants.h" -#include "module_base/global_function.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" #include "dftu.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" #include #include +#include +#include #include #include #include #include -#include -#include namespace ModuleDFTU { @@ -35,8 +35,10 @@ void DFTU::cal_yukawa_lambda(double** rho, const int& nrxx) double sum_rho_lambda = 0.0; for (int is = 0; is < PARAM.inp.nspin; is++) { - if(PARAM.inp.nspin == 4 && is > 0) { continue;// for non-collinear spin case, first spin contains the charge density -} + if (PARAM.inp.nspin == 4 && is > 0) + { + continue; // for non-collinear spin case, first spin contains the charge density + } for (int ir = 0; ir < nrxx; ir++) { double rho_ir = rho[is][ir]; @@ -63,9 +65,7 @@ void DFTU::cal_yukawa_lambda(double** rho, const int& nrxx) return; } -void DFTU::cal_slater_Fk(const UnitCell& ucell, - const int L, - const int T) +void DFTU::cal_slater_Fk(const UnitCell& ucell, const int L, const int T) { ModuleBase::TITLE("DFTU", "cal_slater_Fk"); @@ -116,9 +116,10 @@ void DFTU::cal_slater_Fk(const UnitCell& ucell, void DFTU::cal_slater_UJ(const UnitCell& ucell, double** rho, const int& nrxx) { ModuleBase::TITLE("DFTU", "cal_slater_UJ"); - if (!Yukawa) { + if (!Yukawa) + { return; -} + } this->cal_yukawa_lambda(rho, nrxx); @@ -146,16 +147,18 @@ void DFTU::cal_slater_UJ(const UnitCell& ucell, double** rho, const int& nrxx) if (L >= PARAM.inp.orbital_corr[T] && PARAM.inp.orbital_corr[T] != -1) { - if (L != PARAM.inp.orbital_corr[T]) { + if (L != PARAM.inp.orbital_corr[T]) + { continue; -} - this->cal_slater_Fk(ucell,L, T); + } + this->cal_slater_Fk(ucell, L, T); for (int n = 0; n < N; n++) { - if (n != 0) { + if (n != 0) + { continue; -} + } switch (L) { @@ -170,9 +173,10 @@ void DFTU::cal_slater_UJ(const UnitCell& ucell, double** rho, const int& nrxx) break; case 3: // f electrons - if (Yukawa) { + if (Yukawa) + { this->U_Yukawa[T][L][n] = this->Fk[T][L][n][0]; -} + } this->J_Yukawa[T][L][n] = (286.0 * this->Fk[T][L][n][1] + 195.0 * this->Fk[T][L][n][2] + 250.0 * this->Fk[T][L][n][3]) / 6435.0; @@ -185,9 +189,9 @@ void DFTU::cal_slater_UJ(const UnitCell& ucell, double** rho, const int& nrxx) // update current U with calculated U-J from Slater integrals this->U[T] = this->U_Yukawa[T][L][n] - this->J_Yukawa[T][L][n]; } // end n - } // end if - } // end L - } // end T + } // end if + } // end L + } // end T return; } @@ -196,7 +200,7 @@ double DFTU::spherical_Bessel(const int k, const double r, const double lambda) { ModuleBase::TITLE("DFTU", "spherical_Bessel"); - double val=0.0; + double val = 0.0; double x = r * lambda; if (k == 0) { @@ -251,7 +255,7 @@ double DFTU::spherical_Hankel(const int k, const double r, const double lambda) { ModuleBase::TITLE("DFTU", "spherical_Bessel"); - double val=0.0; + double val = 0.0; double x = r * lambda; if (k == 0) { diff --git a/source/module_hamilt_lcao/module_gint/cal_ddpsir_ylm.cpp b/source/module_hamilt_lcao/module_gint/cal_ddpsir_ylm.cpp index ea785361f1..d5605742fa 100644 --- a/source/module_hamilt_lcao/module_gint/cal_ddpsir_ylm.cpp +++ b/source/module_hamilt_lcao/module_gint/cal_ddpsir_ylm.cpp @@ -1,17 +1,23 @@ #include "gint_tools.h" -#include "module_base/timer.h" -#include "module_base/ylm.h" -namespace Gint_Tools{ +#include "source_base/timer.h" +#include "source_base/ylm.h" +namespace Gint_Tools +{ void cal_ddpsir_ylm( - const Grid_Technique& gt, const int bxyz, + const Grid_Technique& gt, + const int bxyz, const int na_grid, // number of atoms on this grid const int grid_index, // 1d index of FFT index (i,j,k) const double delta_r, // delta_r of the uniform FFT grid const int* const block_index, // block_index[na_grid+1], count total number of atomis orbitals const int* const block_size, // block_size[na_grid], number of columns of a band const bool* const* const cal_flag, // cal_flag[bxyz][na_grid], whether the atom-grid distance is larger than cutoff - double* const* const ddpsir_ylm_xx, double* const* const ddpsir_ylm_xy, double* const* const ddpsir_ylm_xz, - double* const* const ddpsir_ylm_yy, double* const* const ddpsir_ylm_yz, double* const* const ddpsir_ylm_zz) + double* const* const ddpsir_ylm_xx, + double* const* const ddpsir_ylm_xy, + double* const* const ddpsir_ylm_xz, + double* const* const ddpsir_ylm_yy, + double* const* const ddpsir_ylm_yz, + double* const* const ddpsir_ylm_zz) { ModuleBase::timer::tick("Gint_Tools", "cal_ddpsir_ylm"); const UnitCell& ucell = *gt.ucell; @@ -37,13 +43,13 @@ void cal_ddpsir_ylm( gt.meshball_positions[imcell][1] - gt.tau_in_bigcell[iat][1], gt.meshball_positions[imcell][2] - gt.tau_in_bigcell[iat][2]}; - for (int iw=0; iw< atom->nw; ++iw) + for (int iw = 0; iw < atom->nw; ++iw) { - if ( atom->iw2_new[iw] ) + if (atom->iw2_new[iw]) { - it_psi_uniform[iw]= gt.psi_u[it*gt.nwmax + iw].data(); - it_dpsi_uniform[iw] = gt.dpsi_u[it*gt.nwmax + iw].data(); - it_psi_nr_uniform[iw]= gt.psi_u[it*gt.nwmax + iw].size(); + it_psi_uniform[iw] = gt.psi_u[it * gt.nwmax + iw].data(); + it_dpsi_uniform[iw] = gt.dpsi_u[it * gt.nwmax + iw].data(); + it_psi_nr_uniform[iw] = gt.psi_u[it * gt.nwmax + iw].size(); } } @@ -66,9 +72,10 @@ void cal_ddpsir_ylm( } else { - const double dr[3] - = {// vectors between atom and grid - gt.meshcell_pos[ib][0] + mt[0], gt.meshcell_pos[ib][1] + mt[1], gt.meshcell_pos[ib][2] + mt[2]}; + const double dr[3] = {// vectors between atom and grid + gt.meshcell_pos[ib][0] + mt[0], + gt.meshcell_pos[ib][1] + mt[1], + gt.meshcell_pos[ib][2] + mt[2]}; double distance = std::sqrt(dr[0] * dr[0] + dr[1] * dr[1] + dr[2] * dr[2]); // for some unknown reason, the finite difference between dpsi and ddpsi @@ -109,12 +116,18 @@ void cal_ddpsir_ylm( dr1[1] = dr[1] + displ[i][1]; dr1[2] = dr[2] + displ[i][2]; - ModuleBase::Ylm::grad_rl_sph_harm(ucell.atoms[it].nwl, dr1[0], dr1[1], dr1[2], rly, grly.get_ptr_2D()); + ModuleBase::Ylm::grad_rl_sph_harm(ucell.atoms[it].nwl, + dr1[0], + dr1[1], + dr1[2], + rly, + grly.get_ptr_2D()); double distance1 = std::sqrt(dr1[0] * dr1[0] + dr1[1] * dr1[1] + dr1[2] * dr1[2]); - if (distance1 < 1e-9) { + if (distance1 < 1e-9) + { distance1 = 1e-9; -} + } const double position = distance1 / delta_r; @@ -139,7 +152,7 @@ void cal_ddpsir_ylm( auto dpsi_uniform = it_dpsi_uniform[iw]; // if ( iq[id] >= philn.nr_uniform-4) - if (iq >= it_psi_nr_uniform[iw]-4) + if (iq >= it_psi_nr_uniform[iw] - 4) { tmp = dtmp = 0.0; } @@ -206,13 +219,13 @@ void cal_ddpsir_ylm( // the analytical method for evaluating 2nd derivatives // it is not used currently { - // Add it here, but do not run it. If there is a need to run this code + // Add it here, but do not run it. If there is a need to run this code // in the future, include it in the previous initialization process. - for (int iw=0; iw< atom->nw; ++iw) + for (int iw = 0; iw < atom->nw; ++iw) { - if ( atom->iw2_new[iw] ) + if (atom->iw2_new[iw]) { - it_d2psi_uniform[iw] = gt.d2psi_u[it*gt.nwmax + iw].data(); + it_d2psi_uniform[iw] = gt.d2psi_u[it * gt.nwmax + iw].data(); } } // End of code addition section. @@ -244,7 +257,7 @@ void cal_ddpsir_ylm( auto ddpsi_uniform = it_d2psi_uniform[iw]; // if ( iq[id] >= philn.nr_uniform-4) - if (iq >= it_psi_nr_uniform[iw]-4) + if (iq >= it_psi_nr_uniform[iw] - 4) { tmp = dtmp = ddtmp = 0.0; } @@ -269,7 +282,7 @@ void cal_ddpsir_ylm( const int idx_lm = atom->iw2_ylm[iw]; const double rl = pow_int(distance, ll); - const double r_lp2 =rl * distance * distance; + const double r_lp2 = rl * distance * distance; // d/dr (R_l / r^l) const double tmpdphi = (dtmp - tmp * ll / distance) / rl; @@ -313,4 +326,4 @@ void cal_ddpsir_ylm( ModuleBase::timer::tick("Gint_Tools", "cal_ddpsir_ylm"); return; } -} \ No newline at end of file +} // namespace Gint_Tools \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_gint/cal_dpsir_ylm.cpp b/source/module_hamilt_lcao/module_gint/cal_dpsir_ylm.cpp index 494ffb85f5..253a6bba62 100644 --- a/source/module_hamilt_lcao/module_gint/cal_dpsir_ylm.cpp +++ b/source/module_hamilt_lcao/module_gint/cal_dpsir_ylm.cpp @@ -1,17 +1,21 @@ #include "gint_tools.h" -#include "module_base/timer.h" -#include "module_base/ylm.h" -#include "module_base/array_pool.h" -namespace Gint_Tools{ +#include "source_base/array_pool.h" +#include "source_base/timer.h" +#include "source_base/ylm.h" +namespace Gint_Tools +{ void cal_dpsir_ylm( - const Grid_Technique& gt, const int bxyz, + const Grid_Technique& gt, + const int bxyz, const int na_grid, // number of atoms on this grid const int grid_index, // 1d index of FFT index (i,j,k) const double delta_r, // delta_r of the uniform FFT grid const int* const block_index, // block_index[na_grid+1], count total number of atomis orbitals const int* const block_size, // block_size[na_grid], number of columns of a band const bool* const* const cal_flag, // cal_flag[bxyz][na_grid], whether the atom-grid distance is larger than cutoff - double* const* const psir_ylm, double* const* const dpsir_ylm_x, double* const* const dpsir_ylm_y, + double* const* const psir_ylm, + double* const* const dpsir_ylm_x, + double* const* const dpsir_ylm_y, double* const* const dpsir_ylm_z) { ModuleBase::timer::tick("Gint_Tools", "cal_dpsir_ylm"); @@ -37,13 +41,13 @@ void cal_dpsir_ylm( gt.meshball_positions[imcell][1] - gt.tau_in_bigcell[iat][1], gt.meshball_positions[imcell][2] - gt.tau_in_bigcell[iat][2]}; // preprocess index - for (int iw=0; iw< atom->nw; ++iw) + for (int iw = 0; iw < atom->nw; ++iw) { - if ( atom->iw2_new[iw] ) + if (atom->iw2_new[iw]) { - it_psi_uniform[iw]= gt.psi_u[it*gt.nwmax + iw].data(); - it_dpsi_uniform[iw] = gt.dpsi_u[it*gt.nwmax + iw].data(); - it_psi_nr_uniform[iw]= gt.psi_u[it*gt.nwmax + iw].size(); + it_psi_uniform[iw] = gt.psi_u[it * gt.nwmax + iw].data(); + it_dpsi_uniform[iw] = gt.dpsi_u[it * gt.nwmax + iw].data(); + it_psi_nr_uniform[iw] = gt.psi_u[it * gt.nwmax + iw].size(); } } @@ -62,15 +66,17 @@ void cal_dpsir_ylm( } else { - const double dr[3] - = {// vectors between atom and grid - gt.meshcell_pos[ib][0] + mt[0], gt.meshcell_pos[ib][1] + mt[1], gt.meshcell_pos[ib][2] + mt[2]}; + const double dr[3] = {// vectors between atom and grid + gt.meshcell_pos[ib][0] + mt[0], + gt.meshcell_pos[ib][1] + mt[1], + gt.meshcell_pos[ib][2] + mt[2]}; double distance = std::sqrt(dr[0] * dr[0] + dr[1] * dr[1] + dr[2] * dr[2]); ModuleBase::Ylm::grad_rl_sph_harm(ucell.atoms[it].nwl, dr[0], dr[1], dr[2], rly, grly.get_ptr_2D()); - if (distance < 1e-9) { + if (distance < 1e-9) + { distance = 1e-9; -} + } const double position = distance / delta_r; @@ -87,7 +93,7 @@ void cal_dpsir_ylm( for (int iw = 0; iw < atom->nw; ++iw) { - + // this is a new 'l', we need 1D orbital wave // function from interpolation method. if (atom->iw2_new[iw]) @@ -118,7 +124,7 @@ void cal_dpsir_ylm( const double rl = pow_int(distance, ll); const double tmprl = tmp / rl; - + // 3D wave functions p_psi[iw] = tmprl * rly[idx_lm]; @@ -135,4 +141,4 @@ void cal_dpsir_ylm( ModuleBase::timer::tick("Gint_Tools", "cal_dpsir_ylm"); return; } -} \ No newline at end of file +} // namespace Gint_Tools \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_gint/cal_psir_ylm.cpp b/source/module_hamilt_lcao/module_gint/cal_psir_ylm.cpp index 0eb9b16e6b..b742bc6269 100644 --- a/source/module_hamilt_lcao/module_gint/cal_psir_ylm.cpp +++ b/source/module_hamilt_lcao/module_gint/cal_psir_ylm.cpp @@ -1,7 +1,8 @@ #include "gint_tools.h" -#include "module_base/timer.h" -#include "module_base/ylm.h" -namespace Gint_Tools{ +#include "source_base/timer.h" +#include "source_base/ylm.h" +namespace Gint_Tools +{ void cal_psir_ylm( const Grid_Technique& gt, const int bxyz, @@ -13,7 +14,7 @@ void cal_psir_ylm( const bool* const* const cal_flag, double* const* const psir_ylm) // cal_flag[bxyz][na_grid], whether the atom-grid distance is larger than cutoff { -// ModuleBase::timer::tick("Gint_Tools", "cal_psir_ylm"); + // ModuleBase::timer::tick("Gint_Tools", "cal_psir_ylm"); std::vector ylma; const UnitCell& ucell = *gt.ucell; std::vector it_psi_uniform(gt.nwmax); @@ -36,8 +37,8 @@ void cal_psir_ylm( { if (atom->iw2_new[iw]) { - it_psi_uniform[iw]= gt.psi_u[it*gt.nwmax + iw].data(); - it_dpsi_uniform[iw] = gt.dpsi_u[it*gt.nwmax + iw].data(); + it_psi_uniform[iw] = gt.psi_u[it * gt.nwmax + iw].data(); + it_dpsi_uniform[iw] = gt.dpsi_u[it * gt.nwmax + iw].data(); } } @@ -75,7 +76,10 @@ void cal_psir_ylm( // spherical harmonic functions Ylm //------------------------------------------------------ // Ylm::get_ylm_real(this->nnn[it], this->dr[id], ylma); - ModuleBase::Ylm::sph_harm(ucell.atoms[it].nwl, dr[0] / distance, dr[1] / distance, dr[2] / distance, + ModuleBase::Ylm::sph_harm(ucell.atoms[it].nwl, + dr[0] / distance, + dr[1] / distance, + dr[2] / distance, ylma); // these parameters are related to interpolation // because once the distance from atom to grid point is known, @@ -107,7 +111,7 @@ void cal_psir_ylm( } // end distance<=(rcuts[it]-1.0e-15) } // end ib } // end id -// ModuleBase::timer::tick("Gint_Tools", "cal_psir_ylm"); + // ModuleBase::timer::tick("Gint_Tools", "cal_psir_ylm"); return; } -} +} // namespace Gint_Tools diff --git a/source/module_hamilt_lcao/module_gint/gint.cpp b/source/module_hamilt_lcao/module_gint/gint.cpp index 6ee4c238d1..ccce340cb4 100644 --- a/source/module_hamilt_lcao/module_gint/gint.cpp +++ b/source/module_hamilt_lcao/module_gint/gint.cpp @@ -7,11 +7,11 @@ #include "gint_vl_gpu.h" #endif -#include "module_base/memory.h" -#include "module_base/timer.h" #include "module_basis/module_ao/ORB_read.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer_funcs.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/memory.h" +#include "source_base/timer.h" #ifdef _OPENMP #include #endif @@ -20,16 +20,19 @@ #include #endif -Gint::~Gint() { +Gint::~Gint() +{ delete this->hRGint; delete this->hRGintCd; - // in gamma_only case, DMRGint.size()=0, + // in gamma_only case, DMRGint.size()=0, // in multi-k case, DMRGint.size()=nspin - for (int is = 0; is < this->DMRGint.size(); is++) { + for (int is = 0; is < this->DMRGint.size(); is++) + { delete this->DMRGint[is]; } - for(int is = 0; is < this->hRGint_tmp.size(); is++) { + for (int is = 0; is < this->hRGint_tmp.size(); is++) + { delete this->hRGint_tmp[is]; } #ifdef __MPI @@ -37,29 +40,37 @@ Gint::~Gint() { #endif } -void Gint::cal_gint(Gint_inout* inout) { +void Gint::cal_gint(Gint_inout* inout) +{ ModuleBase::TITLE("Gint_interface", "cal_gint"); ModuleBase::timer::tick("Gint_interface", "cal_gint"); // In multi-process environments, // some processes may not be allocated any data. - if (this->gridt->get_init_malloced() == false) { - ModuleBase::WARNING_QUIT("Gint_interface::cal_gint", - "gridt has not been allocated yet!"); + if (this->gridt->get_init_malloced() == false) + { + ModuleBase::WARNING_QUIT("Gint_interface::cal_gint", "gridt has not been allocated yet!"); } - if (this->gridt->max_atom > 0) { + if (this->gridt->max_atom > 0) + { #ifdef __CUDA if (PARAM.inp.device == "gpu" - && (inout->job == Gint_Tools::job_type::vlocal - || inout->job == Gint_Tools::job_type::rho - || inout->job == Gint_Tools::job_type::force)) { - if (inout->job == Gint_Tools::job_type::vlocal) { + && (inout->job == Gint_Tools::job_type::vlocal || inout->job == Gint_Tools::job_type::rho + || inout->job == Gint_Tools::job_type::force)) + { + if (inout->job == Gint_Tools::job_type::vlocal) + { gpu_vlocal_interface(inout); - } else if (inout->job == Gint_Tools::job_type::rho) { + } + else if (inout->job == Gint_Tools::job_type::rho) + { gpu_rho_interface(inout); - } else if (inout->job == Gint_Tools::job_type::force) { + } + else if (inout->job == Gint_Tools::job_type::force) + { gpu_force_interface(inout); } - } else + } + else #endif { #ifdef __MKL @@ -67,19 +78,32 @@ void Gint::cal_gint(Gint_inout* inout) { mkl_set_num_threads(mkl_threads); #endif { - if (inout->job == Gint_Tools::job_type::vlocal) { + if (inout->job == Gint_Tools::job_type::vlocal) + { gint_kernel_vlocal(inout); - } else if (inout->job == Gint_Tools::job_type::dvlocal) { + } + else if (inout->job == Gint_Tools::job_type::dvlocal) + { gint_kernel_dvlocal(inout); - } else if (inout->job == Gint_Tools::job_type::vlocal_meta) { + } + else if (inout->job == Gint_Tools::job_type::vlocal_meta) + { gint_kernel_vlocal_meta(inout); - } else if (inout->job == Gint_Tools::job_type::rho) { + } + else if (inout->job == Gint_Tools::job_type::rho) + { gint_kernel_rho(inout); - } else if (inout->job == Gint_Tools::job_type::tau) { + } + else if (inout->job == Gint_Tools::job_type::tau) + { gint_kernel_tau(inout); - } else if (inout->job == Gint_Tools::job_type::force) { + } + else if (inout->job == Gint_Tools::job_type::force) + { gint_kernel_force(inout); - } else if (inout->job == Gint_Tools::job_type::force_meta) { + } + else if (inout->job == Gint_Tools::job_type::force_meta) + { gint_kernel_force_meta(inout); } } @@ -103,7 +127,8 @@ void Gint::prep_grid(const Grid_Technique& gt, const int& nplane_in, const int& startz_current_in, const UnitCell* ucell_in, - const LCAO_Orbitals* orb_in) { + const LCAO_Orbitals* orb_in) +{ ModuleBase::TITLE(GlobalV::ofs_running, "Gint_k", "prep_grid"); this->gridt = > @@ -144,77 +169,86 @@ void Gint::initialize_pvpR(const UnitCell& ucell_in, const Grid_Driver* gd, cons int npol = 1; // there is the only resize code of DMRGint - if (this->DMRGint.size() == 0) { + if (this->DMRGint.size() == 0) + { this->DMRGint.resize(nspin); } hRGint_tmp.resize(nspin); - if (nspin != 4) { - if (this->hRGint != nullptr) { + if (nspin != 4) + { + if (this->hRGint != nullptr) + { delete this->hRGint; } this->hRGint = new hamilt::HContainer(ucell_in.nat); - } else { + } + else + { npol = 2; - if (this->hRGintCd != nullptr) { + if (this->hRGintCd != nullptr) + { delete this->hRGintCd; } - this->hRGintCd - = new hamilt::HContainer>(ucell_in.nat); - for (int is = 0; is < nspin; is++) { - if (this->DMRGint[is] != nullptr) { + this->hRGintCd = new hamilt::HContainer>(ucell_in.nat); + for (int is = 0; is < nspin; is++) + { + if (this->DMRGint[is] != nullptr) + { delete this->DMRGint[is]; } - if (this->hRGint_tmp[is] != nullptr) { + if (this->hRGint_tmp[is] != nullptr) + { delete this->hRGint_tmp[is]; } this->DMRGint[is] = new hamilt::HContainer(ucell_in.nat); this->hRGint_tmp[is] = new hamilt::HContainer(ucell_in.nat); } #ifdef __MPI - if (this->DMRGint_full != nullptr) { + if (this->DMRGint_full != nullptr) + { delete this->DMRGint_full; } this->DMRGint_full = new hamilt::HContainer(ucell_in.nat); #endif } - if (PARAM.globalv.gamma_only_local && nspin != 4) { + if (PARAM.globalv.gamma_only_local && nspin != 4) + { this->hRGint->fix_gamma(); } - if (npol == 1) { + if (npol == 1) + { this->hRGint->insert_ijrs(this->gridt->get_ijr_info(), ucell_in); this->hRGint->allocate(nullptr, true); - ModuleBase::Memory::record("Gint::hRGint", - this->hRGint->get_memory_size()); + ModuleBase::Memory::record("Gint::hRGint", this->hRGint->get_memory_size()); // initialize DMRGint with hRGint when NSPIN != 4 - for (int is = 0; is < this->DMRGint.size(); is++) { - if (this->DMRGint[is] != nullptr) { + for (int is = 0; is < this->DMRGint.size(); is++) + { + if (this->DMRGint[is] != nullptr) + { delete this->DMRGint[is]; } this->DMRGint[is] = new hamilt::HContainer(*this->hRGint); } - ModuleBase::Memory::record("Gint::DMRGint", - this->DMRGint[0]->get_memory_size() - * this->DMRGint.size()); - } else { + ModuleBase::Memory::record("Gint::DMRGint", this->DMRGint[0]->get_memory_size() * this->DMRGint.size()); + } + else + { this->hRGintCd->insert_ijrs(this->gridt->get_ijr_info(), ucell_in, npol); this->hRGintCd->allocate(nullptr, true); - for(int is = 0; is < nspin; is++) { + for (int is = 0; is < nspin; is++) + { this->hRGint_tmp[is]->insert_ijrs(this->gridt->get_ijr_info(), ucell_in); this->DMRGint[is]->insert_ijrs(this->gridt->get_ijr_info(), ucell_in); this->hRGint_tmp[is]->allocate(nullptr, true); this->DMRGint[is]->allocate(nullptr, true); } - ModuleBase::Memory::record("Gint::hRGint_tmp", - this->hRGint_tmp[0]->get_memory_size()*nspin); - ModuleBase::Memory::record("Gint::DMRGint", - this->DMRGint[0]->get_memory_size() - * this->DMRGint.size()*nspin); + ModuleBase::Memory::record("Gint::hRGint_tmp", this->hRGint_tmp[0]->get_memory_size() * nspin); + ModuleBase::Memory::record("Gint::DMRGint", this->DMRGint[0]->get_memory_size() * this->DMRGint.size() * nspin); #ifdef __MPI this->DMRGint_full->insert_ijrs(this->gridt->get_ijr_info(), ucell_in, npol); this->DMRGint_full->allocate(nullptr, true); - ModuleBase::Memory::record("Gint::DMRGint_full", - this->DMRGint_full->get_memory_size()); + ModuleBase::Memory::record("Gint::DMRGint_full", this->DMRGint_full->get_memory_size()); #endif } } @@ -223,13 +257,22 @@ void Gint::reset_DMRGint(const int& nspin) { if (this->hRGint) { - for (auto& d : this->DMRGint) { delete d; } + for (auto& d: this->DMRGint) + { + delete d; + } this->DMRGint.resize(nspin); this->DMRGint.shrink_to_fit(); - for (auto& d : this->DMRGint) { d = new hamilt::HContainer(*this->hRGint); } + for (auto& d: this->DMRGint) + { + d = new hamilt::HContainer(*this->hRGint); + } if (nspin == 4) { - for (auto& d : this->DMRGint) { d->allocate(nullptr, false); } + for (auto& d: this->DMRGint) + { + d->allocate(nullptr, false); + } #ifdef __MPI delete this->DMRGint_full; this->DMRGint_full = new hamilt::HContainer(*this->hRGint); @@ -239,7 +282,8 @@ void Gint::reset_DMRGint(const int& nspin) } } -void Gint::transfer_DM2DtoGrid(std::vector*> DM2D) { +void Gint::transfer_DM2DtoGrid(std::vector*> DM2D) +{ ModuleBase::TITLE("Gint", "transfer_DMR"); // To check whether input parameter DM2D has been initialized @@ -250,8 +294,10 @@ void Gint::transfer_DM2DtoGrid(std::vector*> DM2D) { #endif ModuleBase::timer::tick("Gint", "transfer_DMR"); - if (PARAM.inp.nspin != 4) { - for (int is = 0; is < this->DMRGint.size(); is++) { + if (PARAM.inp.nspin != 4) + { + for (int is = 0; is < this->DMRGint.size(); is++) + { #ifdef __MPI hamilt::transferParallels2Serials(*DM2D[is], DMRGint[is]); #else @@ -259,7 +305,8 @@ void Gint::transfer_DM2DtoGrid(std::vector*> DM2D) { this->DMRGint[is]->add(*DM2D[is]); #endif } - } else // NSPIN=4 case + } + else // NSPIN=4 case { #ifdef __MPI hamilt::transferParallels2Serials(*DM2D[0], this->DMRGint_full); @@ -267,25 +314,29 @@ void Gint::transfer_DM2DtoGrid(std::vector*> DM2D) { this->DMRGint_full = DM2D[0]; #endif std::vector tmp_pointer(4, nullptr); - for (int iap = 0; iap < this->DMRGint_full->size_atom_pairs(); ++iap) { + for (int iap = 0; iap < this->DMRGint_full->size_atom_pairs(); ++iap) + { auto& ap = this->DMRGint_full->get_atom_pair(iap); int iat1 = ap.get_atom_i(); int iat2 = ap.get_atom_j(); - for (int ir = 0; ir < ap.get_R_size(); ++ir) { + for (int ir = 0; ir < ap.get_R_size(); ++ir) + { const ModuleBase::Vector3 r_index = ap.get_R_index(ir); - for (int is = 0; is < 4; is++) { - tmp_pointer[is] = this->DMRGint[is] - ->find_matrix(iat1, iat2, r_index) - ->get_pointer(); + for (int is = 0; is < 4; is++) + { + tmp_pointer[is] = this->DMRGint[is]->find_matrix(iat1, iat2, r_index)->get_pointer(); } double* data_full = ap.get_pointer(ir); - for (int irow = 0; irow < ap.get_row_size(); irow += 2) { - for (int icol = 0; icol < ap.get_col_size(); icol += 2) { + for (int irow = 0; irow < ap.get_row_size(); irow += 2) + { + for (int icol = 0; icol < ap.get_col_size(); icol += 2) + { *(tmp_pointer[0])++ = data_full[icol]; *(tmp_pointer[1])++ = data_full[icol + 1]; } data_full += ap.get_col_size(); - for (int icol = 0; icol < ap.get_col_size(); icol += 2) { + for (int icol = 0; icol < ap.get_col_size(); icol += 2) + { *(tmp_pointer[2])++ = data_full[icol]; *(tmp_pointer[3])++ = data_full[icol + 1]; } diff --git a/source/module_hamilt_lcao/module_gint/gint_force_cpu_interface.cpp b/source/module_hamilt_lcao/module_gint/gint_force_cpu_interface.cpp index b024bca4d8..ef6679f7fb 100644 --- a/source/module_hamilt_lcao/module_gint/gint_force_cpu_interface.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_force_cpu_interface.cpp @@ -1,8 +1,9 @@ #include "gint.h" -#include "module_base/memory.h" -#include "module_base/timer.h" +#include "source_base/memory.h" +#include "source_base/timer.h" -void Gint::gint_kernel_force(Gint_inout* inout) { +void Gint::gint_kernel_force(Gint_inout* inout) +{ ModuleBase::TITLE("Gint_interface", "cal_gint_force"); ModuleBase::timer::tick("Gint_interface", "cal_gint_force"); const UnitCell& ucell = *this->ucell; @@ -11,122 +12,159 @@ void Gint::gint_kernel_force(Gint_inout* inout) { const double dv = ucell.omega / this->ncxyz; const double delta_r = this->gridt->dr_uniform; - -#pragma omp parallel -{ - ModuleBase::matrix* fvl_dphi_thread=inout->fvl_dphi; - ModuleBase::matrix* svl_dphi_thread=inout->svl_dphi; - if (inout->isforce) { - fvl_dphi_thread=new ModuleBase::matrix(*inout->fvl_dphi); - fvl_dphi_thread->zero_out(); - } - if (inout->isstress) { - svl_dphi_thread=new ModuleBase::matrix(*inout->svl_dphi); - svl_dphi_thread->zero_out(); - } - std::vector block_iw(max_size,0); - std::vector block_index(max_size+1,0); - std::vector block_size(max_size,0); - std::vector vldr3(this->bxyz,0.0); -#pragma omp for schedule(dynamic) - for (int grid_index = 0; grid_index < this->nbxx; grid_index++) { - const int na_grid = this->gridt->how_many_atoms[grid_index]; - if (na_grid == 0) { - continue; +#pragma omp parallel + { + ModuleBase::matrix* fvl_dphi_thread = inout->fvl_dphi; + ModuleBase::matrix* svl_dphi_thread = inout->svl_dphi; + if (inout->isforce) + { + fvl_dphi_thread = new ModuleBase::matrix(*inout->fvl_dphi); + fvl_dphi_thread->zero_out(); } - Gint_Tools::get_gint_vldr3(vldr3.data(), - inout->vl, - this->bxyz, - this->bx, - this->by, - this->bz, - this->nplane, - this->gridt->start_ind[grid_index], - ncyz, - dv); - //prepare block information - ModuleBase::Array_Pool cal_flag(this->bxyz,max_size); - Gint_Tools::get_block_info(*this->gridt, this->bxyz, na_grid, grid_index, - block_iw.data(), block_index.data(), block_size.data(), - cal_flag.get_ptr_2D()); - const int LD_pool = block_index[na_grid]; + if (inout->isstress) + { + svl_dphi_thread = new ModuleBase::matrix(*inout->svl_dphi); + svl_dphi_thread->zero_out(); + } + std::vector block_iw(max_size, 0); + std::vector block_index(max_size + 1, 0); + std::vector block_size(max_size, 0); + std::vector vldr3(this->bxyz, 0.0); +#pragma omp for schedule(dynamic) + for (int grid_index = 0; grid_index < this->nbxx; grid_index++) + { + const int na_grid = this->gridt->how_many_atoms[grid_index]; + if (na_grid == 0) + { + continue; + } + Gint_Tools::get_gint_vldr3(vldr3.data(), + inout->vl, + this->bxyz, + this->bx, + this->by, + this->bz, + this->nplane, + this->gridt->start_ind[grid_index], + ncyz, + dv); + // prepare block information + ModuleBase::Array_Pool cal_flag(this->bxyz, max_size); + Gint_Tools::get_block_info(*this->gridt, + this->bxyz, + na_grid, + grid_index, + block_iw.data(), + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D()); + const int LD_pool = block_index[na_grid]; - //evaluate psi and dpsi on grids - ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_x(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_y(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_z(this->bxyz, LD_pool); + // evaluate psi and dpsi on grids + ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_x(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_y(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_z(this->bxyz, LD_pool); - Gint_Tools::cal_dpsir_ylm(*this->gridt, this->bxyz, na_grid, grid_index, delta_r, - block_index.data(), block_size.data(), - cal_flag.get_ptr_2D(),psir_ylm.get_ptr_2D(), - dpsir_ylm_x.get_ptr_2D(), dpsir_ylm_y.get_ptr_2D(), dpsir_ylm_z.get_ptr_2D()); + Gint_Tools::cal_dpsir_ylm(*this->gridt, + this->bxyz, + na_grid, + grid_index, + delta_r, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + psir_ylm.get_ptr_2D(), + dpsir_ylm_x.get_ptr_2D(), + dpsir_ylm_y.get_ptr_2D(), + dpsir_ylm_z.get_ptr_2D()); - //calculating f_mu(r) = v(r)*psi_mu(r)*dv - const ModuleBase::Array_Pool psir_vlbr3 = - Gint_Tools::get_psir_vlbr3(this->bxyz, na_grid, LD_pool, block_index.data(), - cal_flag.get_ptr_2D(), vldr3.data(), psir_ylm.get_ptr_2D()); + // calculating f_mu(r) = v(r)*psi_mu(r)*dv + const ModuleBase::Array_Pool psir_vlbr3 = Gint_Tools::get_psir_vlbr3(this->bxyz, + na_grid, + LD_pool, + block_index.data(), + cal_flag.get_ptr_2D(), + vldr3.data(), + psir_ylm.get_ptr_2D()); - ModuleBase::Array_Pool psir_vlbr3_DM(this->bxyz, LD_pool); - ModuleBase::GlobalFunc::ZEROS(psir_vlbr3_DM.get_ptr_1D(), this->bxyz*LD_pool); + ModuleBase::Array_Pool psir_vlbr3_DM(this->bxyz, LD_pool); + ModuleBase::GlobalFunc::ZEROS(psir_vlbr3_DM.get_ptr_1D(), this->bxyz * LD_pool); - //calculating g_mu(r) = sum_nu rho_mu,nu f_nu(r) - Gint_Tools::mult_psi_DMR( - *this->gridt, - this->bxyz, - LD_pool, - grid_index, - na_grid, - block_index.data(), - block_size.data(), - cal_flag.get_ptr_2D(), - psir_vlbr3.get_ptr_2D(), - psir_vlbr3_DM.get_ptr_2D(), - this->DMRGint[inout->ispin], - false); + // calculating g_mu(r) = sum_nu rho_mu,nu f_nu(r) + Gint_Tools::mult_psi_DMR(*this->gridt, + this->bxyz, + LD_pool, + grid_index, + na_grid, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + psir_vlbr3.get_ptr_2D(), + psir_vlbr3_DM.get_ptr_2D(), + this->DMRGint[inout->ispin], + false); - if(inout->isforce) - { - //do integration to get force - this-> cal_meshball_force(grid_index, na_grid, block_size.data(), block_index.data(), - psir_vlbr3_DM.get_ptr_2D(), dpsir_ylm_x.get_ptr_2D(), - dpsir_ylm_y.get_ptr_2D(), dpsir_ylm_z.get_ptr_2D(), - fvl_dphi_thread); - } - if(inout->isstress) - { - //calculating g_mu(r)*(r-R) where R is the location of atom + if (inout->isforce) + { + // do integration to get force + this->cal_meshball_force(grid_index, + na_grid, + block_size.data(), + block_index.data(), + psir_vlbr3_DM.get_ptr_2D(), + dpsir_ylm_x.get_ptr_2D(), + dpsir_ylm_y.get_ptr_2D(), + dpsir_ylm_z.get_ptr_2D(), + fvl_dphi_thread); + } + if (inout->isstress) + { + // calculating g_mu(r)*(r-R) where R is the location of atom - // The array dpsirr contains derivatives of psir in the xx, xy, xz, yy, yz, zz directions, - // with each set of six numbers representing the derivatives in these respective directions. - ModuleBase::Array_Pool dpsirr_ylm(this->bxyz, LD_pool * 6); - Gint_Tools::cal_dpsirr_ylm(*this->gridt, this->bxyz, na_grid, grid_index, block_index.data(), - block_size.data(), cal_flag.get_ptr_2D(),dpsir_ylm_x.get_ptr_2D(), - dpsir_ylm_y.get_ptr_2D(),dpsir_ylm_z.get_ptr_2D(), - dpsirr_ylm.get_ptr_2D()); + // The array dpsirr contains derivatives of psir in the xx, xy, xz, yy, yz, zz directions, + // with each set of six numbers representing the derivatives in these respective directions. + ModuleBase::Array_Pool dpsirr_ylm(this->bxyz, LD_pool * 6); + Gint_Tools::cal_dpsirr_ylm(*this->gridt, + this->bxyz, + na_grid, + grid_index, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + dpsir_ylm_x.get_ptr_2D(), + dpsir_ylm_y.get_ptr_2D(), + dpsir_ylm_z.get_ptr_2D(), + dpsirr_ylm.get_ptr_2D()); - //do integration to get stress - this-> cal_meshball_stress(na_grid, block_index.data(), psir_vlbr3_DM.get_ptr_1D(), - dpsirr_ylm.get_ptr_1D(), svl_dphi_thread); + // do integration to get stress + this->cal_meshball_stress(na_grid, + block_index.data(), + psir_vlbr3_DM.get_ptr_1D(), + dpsirr_ylm.get_ptr_1D(), + svl_dphi_thread); + } } - } #pragma omp critical(gint) - { - if (inout->isforce) { - inout->fvl_dphi[0] += fvl_dphi_thread[0]; - delete fvl_dphi_thread; - } - if (inout->isstress) { - inout->svl_dphi[0] += svl_dphi_thread[0]; - delete svl_dphi_thread; + { + if (inout->isforce) + { + inout->fvl_dphi[0] += fvl_dphi_thread[0]; + delete fvl_dphi_thread; + } + if (inout->isstress) + { + inout->svl_dphi[0] += svl_dphi_thread[0]; + delete svl_dphi_thread; + } } } -} ModuleBase::TITLE("Gint_interface", "cal_gint_force"); ModuleBase::timer::tick("Gint_interface", "cal_gint_force"); } -void Gint::gint_kernel_force_meta(Gint_inout* inout) { +void Gint::gint_kernel_force_meta(Gint_inout* inout) +{ ModuleBase::TITLE("Gint_interface", "cal_gint_force_meta"); ModuleBase::timer::tick("Gint_interface", "cal_gint_force_meta"); const UnitCell& ucell = *this->ucell; @@ -135,179 +173,338 @@ void Gint::gint_kernel_force_meta(Gint_inout* inout) { const double dv = ucell.omega / this->ncxyz; const double delta_r = this->gridt->dr_uniform; - -#pragma omp parallel -{ - ModuleBase::matrix* fvl_dphi_thread=inout->fvl_dphi; - ModuleBase::matrix* svl_dphi_thread=inout->svl_dphi; - if (inout->isforce) { - fvl_dphi_thread=new ModuleBase::matrix(*inout->fvl_dphi); - fvl_dphi_thread->zero_out(); - } - if (inout->isstress) { - svl_dphi_thread=new ModuleBase::matrix(*inout->svl_dphi); - svl_dphi_thread->zero_out(); - } - std::vector block_iw(max_size,0); - std::vector block_index(max_size+1,0); - std::vector block_size(max_size,0); - std::vector vldr3(this->bxyz,0.0); - std::vector vkdr3(this->bxyz,0.0); -#pragma omp for schedule(dynamic) - for (int grid_index = 0; grid_index < this->nbxx; grid_index++) { - const int na_grid = this->gridt->how_many_atoms[grid_index]; - if (na_grid == 0) { - continue; +#pragma omp parallel + { + ModuleBase::matrix* fvl_dphi_thread = inout->fvl_dphi; + ModuleBase::matrix* svl_dphi_thread = inout->svl_dphi; + if (inout->isforce) + { + fvl_dphi_thread = new ModuleBase::matrix(*inout->fvl_dphi); + fvl_dphi_thread->zero_out(); } - Gint_Tools::get_gint_vldr3(vldr3.data(), - inout->vl, - this->bxyz, - this->bx, - this->by, - this->bz, - this->nplane, - this->gridt->start_ind[grid_index], - ncyz, - dv); + if (inout->isstress) + { + svl_dphi_thread = new ModuleBase::matrix(*inout->svl_dphi); + svl_dphi_thread->zero_out(); + } + std::vector block_iw(max_size, 0); + std::vector block_index(max_size + 1, 0); + std::vector block_size(max_size, 0); + std::vector vldr3(this->bxyz, 0.0); + std::vector vkdr3(this->bxyz, 0.0); +#pragma omp for schedule(dynamic) + for (int grid_index = 0; grid_index < this->nbxx; grid_index++) + { + const int na_grid = this->gridt->how_many_atoms[grid_index]; + if (na_grid == 0) + { + continue; + } + Gint_Tools::get_gint_vldr3(vldr3.data(), + inout->vl, + this->bxyz, + this->bx, + this->by, + this->bz, + this->nplane, + this->gridt->start_ind[grid_index], + ncyz, + dv); - Gint_Tools::get_gint_vldr3(vkdr3.data(), - inout->vofk, - this->bxyz, - this->bx, - this->by, - this->bz, - this->nplane, - this->gridt->start_ind[grid_index], - ncyz, - dv); - //prepare block information - ModuleBase::Array_Pool cal_flag(this->bxyz,max_size); - Gint_Tools::get_block_info(*this->gridt, this->bxyz, na_grid, grid_index, - block_iw.data(), block_index.data(), block_size.data(), cal_flag.get_ptr_2D()); - const int LD_pool = block_index[na_grid]; + Gint_Tools::get_gint_vldr3(vkdr3.data(), + inout->vofk, + this->bxyz, + this->bx, + this->by, + this->bz, + this->nplane, + this->gridt->start_ind[grid_index], + ncyz, + dv); + // prepare block information + ModuleBase::Array_Pool cal_flag(this->bxyz, max_size); + Gint_Tools::get_block_info(*this->gridt, + this->bxyz, + na_grid, + grid_index, + block_iw.data(), + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D()); + const int LD_pool = block_index[na_grid]; - //evaluate psi and dpsi on grids - ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_x(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_y(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_z(this->bxyz, LD_pool); - ModuleBase::Array_Pool ddpsir_ylm_xx(this->bxyz, LD_pool); - ModuleBase::Array_Pool ddpsir_ylm_xy(this->bxyz, LD_pool); - ModuleBase::Array_Pool ddpsir_ylm_xz(this->bxyz, LD_pool); - ModuleBase::Array_Pool ddpsir_ylm_yy(this->bxyz, LD_pool); - ModuleBase::Array_Pool ddpsir_ylm_yz(this->bxyz, LD_pool); - ModuleBase::Array_Pool ddpsir_ylm_zz(this->bxyz, LD_pool); + // evaluate psi and dpsi on grids + ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_x(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_y(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_z(this->bxyz, LD_pool); + ModuleBase::Array_Pool ddpsir_ylm_xx(this->bxyz, LD_pool); + ModuleBase::Array_Pool ddpsir_ylm_xy(this->bxyz, LD_pool); + ModuleBase::Array_Pool ddpsir_ylm_xz(this->bxyz, LD_pool); + ModuleBase::Array_Pool ddpsir_ylm_yy(this->bxyz, LD_pool); + ModuleBase::Array_Pool ddpsir_ylm_yz(this->bxyz, LD_pool); + ModuleBase::Array_Pool ddpsir_ylm_zz(this->bxyz, LD_pool); - //psi and gradient of psi - Gint_Tools::cal_dpsir_ylm(*this->gridt, this->bxyz, na_grid, grid_index, delta_r, block_index.data(), block_size.data(), cal_flag.get_ptr_2D(), - psir_ylm.get_ptr_2D(), dpsir_ylm_x.get_ptr_2D(), dpsir_ylm_y.get_ptr_2D(), dpsir_ylm_z.get_ptr_2D()); + // psi and gradient of psi + Gint_Tools::cal_dpsir_ylm(*this->gridt, + this->bxyz, + na_grid, + grid_index, + delta_r, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + psir_ylm.get_ptr_2D(), + dpsir_ylm_x.get_ptr_2D(), + dpsir_ylm_y.get_ptr_2D(), + dpsir_ylm_z.get_ptr_2D()); - //hessian of psi - Gint_Tools::cal_ddpsir_ylm(*this->gridt, this->bxyz, na_grid, grid_index, delta_r, block_index.data(), block_size.data(), cal_flag.get_ptr_2D(), - ddpsir_ylm_xx.get_ptr_2D(), ddpsir_ylm_xy.get_ptr_2D(), ddpsir_ylm_xz.get_ptr_2D(), - ddpsir_ylm_yy.get_ptr_2D(), ddpsir_ylm_yz.get_ptr_2D(), ddpsir_ylm_zz.get_ptr_2D()); + // hessian of psi + Gint_Tools::cal_ddpsir_ylm(*this->gridt, + this->bxyz, + na_grid, + grid_index, + delta_r, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + ddpsir_ylm_xx.get_ptr_2D(), + ddpsir_ylm_xy.get_ptr_2D(), + ddpsir_ylm_xz.get_ptr_2D(), + ddpsir_ylm_yy.get_ptr_2D(), + ddpsir_ylm_yz.get_ptr_2D(), + ddpsir_ylm_zz.get_ptr_2D()); - //calculating f_mu(r) = v(r)*psi_mu(r)*dv - const ModuleBase::Array_Pool psir_vlbr3 - = Gint_Tools::get_psir_vlbr3(this->bxyz, na_grid, LD_pool, block_index.data(), cal_flag.get_ptr_2D(), vldr3.data(), psir_ylm.get_ptr_2D()); - const ModuleBase::Array_Pool dpsir_x_vlbr3 - = Gint_Tools::get_psir_vlbr3(this->bxyz, na_grid, LD_pool, block_index.data(), cal_flag.get_ptr_2D(), vkdr3.data(), dpsir_ylm_x.get_ptr_2D()); - const ModuleBase::Array_Pool dpsir_y_vlbr3 - = Gint_Tools::get_psir_vlbr3(this->bxyz, na_grid, LD_pool, block_index.data(), cal_flag.get_ptr_2D(), vkdr3.data(), dpsir_ylm_y.get_ptr_2D()); - const ModuleBase::Array_Pool dpsir_z_vlbr3 - = Gint_Tools::get_psir_vlbr3(this->bxyz, na_grid, LD_pool, block_index.data(), cal_flag.get_ptr_2D(), vkdr3.data(), dpsir_ylm_z.get_ptr_2D()); + // calculating f_mu(r) = v(r)*psi_mu(r)*dv + const ModuleBase::Array_Pool psir_vlbr3 = Gint_Tools::get_psir_vlbr3(this->bxyz, + na_grid, + LD_pool, + block_index.data(), + cal_flag.get_ptr_2D(), + vldr3.data(), + psir_ylm.get_ptr_2D()); + const ModuleBase::Array_Pool dpsir_x_vlbr3 = Gint_Tools::get_psir_vlbr3(this->bxyz, + na_grid, + LD_pool, + block_index.data(), + cal_flag.get_ptr_2D(), + vkdr3.data(), + dpsir_ylm_x.get_ptr_2D()); + const ModuleBase::Array_Pool dpsir_y_vlbr3 = Gint_Tools::get_psir_vlbr3(this->bxyz, + na_grid, + LD_pool, + block_index.data(), + cal_flag.get_ptr_2D(), + vkdr3.data(), + dpsir_ylm_y.get_ptr_2D()); + const ModuleBase::Array_Pool dpsir_z_vlbr3 = Gint_Tools::get_psir_vlbr3(this->bxyz, + na_grid, + LD_pool, + block_index.data(), + cal_flag.get_ptr_2D(), + vkdr3.data(), + dpsir_ylm_z.get_ptr_2D()); - ModuleBase::Array_Pool psir_vlbr3_DM(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsirx_v_DM(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsiry_v_DM(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsirz_v_DM(this->bxyz, LD_pool); + ModuleBase::Array_Pool psir_vlbr3_DM(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsirx_v_DM(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsiry_v_DM(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsirz_v_DM(this->bxyz, LD_pool); - ModuleBase::GlobalFunc::ZEROS(psir_vlbr3_DM.get_ptr_1D(), this->bxyz*LD_pool); - ModuleBase::GlobalFunc::ZEROS(dpsirx_v_DM.get_ptr_1D(), this->bxyz*LD_pool); - ModuleBase::GlobalFunc::ZEROS(dpsiry_v_DM.get_ptr_1D(), this->bxyz*LD_pool); - ModuleBase::GlobalFunc::ZEROS(dpsirz_v_DM.get_ptr_1D(), this->bxyz*LD_pool); + ModuleBase::GlobalFunc::ZEROS(psir_vlbr3_DM.get_ptr_1D(), this->bxyz * LD_pool); + ModuleBase::GlobalFunc::ZEROS(dpsirx_v_DM.get_ptr_1D(), this->bxyz * LD_pool); + ModuleBase::GlobalFunc::ZEROS(dpsiry_v_DM.get_ptr_1D(), this->bxyz * LD_pool); + ModuleBase::GlobalFunc::ZEROS(dpsirz_v_DM.get_ptr_1D(), this->bxyz * LD_pool); - //calculating g_mu(r) = sum_nu rho_mu,nu f_nu(r) - Gint_Tools::mult_psi_DMR(*this->gridt, this->bxyz, LD_pool, grid_index, - na_grid, block_index.data(), block_size.data(), cal_flag.get_ptr_2D(), - psir_vlbr3.get_ptr_2D(), psir_vlbr3_DM.get_ptr_2D(), this->DMRGint[inout->ispin], false); + // calculating g_mu(r) = sum_nu rho_mu,nu f_nu(r) + Gint_Tools::mult_psi_DMR(*this->gridt, + this->bxyz, + LD_pool, + grid_index, + na_grid, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + psir_vlbr3.get_ptr_2D(), + psir_vlbr3_DM.get_ptr_2D(), + this->DMRGint[inout->ispin], + false); - Gint_Tools::mult_psi_DMR(*this->gridt, this->bxyz, LD_pool, grid_index, - na_grid, block_index.data(), block_size.data(), cal_flag.get_ptr_2D(), - dpsir_x_vlbr3.get_ptr_2D(), dpsirx_v_DM.get_ptr_2D(), this->DMRGint[inout->ispin], false); + Gint_Tools::mult_psi_DMR(*this->gridt, + this->bxyz, + LD_pool, + grid_index, + na_grid, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + dpsir_x_vlbr3.get_ptr_2D(), + dpsirx_v_DM.get_ptr_2D(), + this->DMRGint[inout->ispin], + false); - Gint_Tools::mult_psi_DMR(*this->gridt, this->bxyz, LD_pool, grid_index, - na_grid, block_index.data(), block_size.data(), cal_flag.get_ptr_2D(), - dpsir_y_vlbr3.get_ptr_2D(), dpsiry_v_DM.get_ptr_2D(), this->DMRGint[inout->ispin], false); + Gint_Tools::mult_psi_DMR(*this->gridt, + this->bxyz, + LD_pool, + grid_index, + na_grid, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + dpsir_y_vlbr3.get_ptr_2D(), + dpsiry_v_DM.get_ptr_2D(), + this->DMRGint[inout->ispin], + false); - Gint_Tools::mult_psi_DMR(*this->gridt, this->bxyz, LD_pool, grid_index, - na_grid, block_index.data(), block_size.data(), cal_flag.get_ptr_2D(), - dpsir_z_vlbr3.get_ptr_2D(), dpsirz_v_DM.get_ptr_2D(), this->DMRGint[inout->ispin], false); + Gint_Tools::mult_psi_DMR(*this->gridt, + this->bxyz, + LD_pool, + grid_index, + na_grid, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + dpsir_z_vlbr3.get_ptr_2D(), + dpsirz_v_DM.get_ptr_2D(), + this->DMRGint[inout->ispin], + false); - if(inout->isforce) - { - //do integration to get force - this-> cal_meshball_force(grid_index, na_grid, block_size.data(), block_index.data(), - psir_vlbr3_DM.get_ptr_2D(), dpsir_ylm_x.get_ptr_2D(), dpsir_ylm_y.get_ptr_2D(), dpsir_ylm_z.get_ptr_2D(), - fvl_dphi_thread); - - this-> cal_meshball_force(grid_index, na_grid, block_size.data(), block_index.data(), - dpsirx_v_DM.get_ptr_2D(), ddpsir_ylm_xx.get_ptr_2D(), ddpsir_ylm_xy.get_ptr_2D(), ddpsir_ylm_xz.get_ptr_2D(), - fvl_dphi_thread); - this-> cal_meshball_force(grid_index, na_grid, block_size.data(), block_index.data(), - dpsiry_v_DM.get_ptr_2D(), ddpsir_ylm_xy.get_ptr_2D(), ddpsir_ylm_yy.get_ptr_2D(), ddpsir_ylm_yz.get_ptr_2D(), - fvl_dphi_thread); - this-> cal_meshball_force(grid_index, na_grid, block_size.data(), block_index.data(), - dpsirz_v_DM.get_ptr_2D(), ddpsir_ylm_xz.get_ptr_2D(), ddpsir_ylm_yz.get_ptr_2D(), ddpsir_ylm_zz.get_ptr_2D(), - fvl_dphi_thread); - - } - if(inout->isstress) - { - //calculating g_mu(r)*(r-R) where R is the location of atom - ModuleBase::Array_Pool array(this->bxyz, LD_pool * 6); + if (inout->isforce) + { + // do integration to get force + this->cal_meshball_force(grid_index, + na_grid, + block_size.data(), + block_index.data(), + psir_vlbr3_DM.get_ptr_2D(), + dpsir_ylm_x.get_ptr_2D(), + dpsir_ylm_y.get_ptr_2D(), + dpsir_ylm_z.get_ptr_2D(), + fvl_dphi_thread); + + this->cal_meshball_force(grid_index, + na_grid, + block_size.data(), + block_index.data(), + dpsirx_v_DM.get_ptr_2D(), + ddpsir_ylm_xx.get_ptr_2D(), + ddpsir_ylm_xy.get_ptr_2D(), + ddpsir_ylm_xz.get_ptr_2D(), + fvl_dphi_thread); + this->cal_meshball_force(grid_index, + na_grid, + block_size.data(), + block_index.data(), + dpsiry_v_DM.get_ptr_2D(), + ddpsir_ylm_xy.get_ptr_2D(), + ddpsir_ylm_yy.get_ptr_2D(), + ddpsir_ylm_yz.get_ptr_2D(), + fvl_dphi_thread); + this->cal_meshball_force(grid_index, + na_grid, + block_size.data(), + block_index.data(), + dpsirz_v_DM.get_ptr_2D(), + ddpsir_ylm_xz.get_ptr_2D(), + ddpsir_ylm_yz.get_ptr_2D(), + ddpsir_ylm_zz.get_ptr_2D(), + fvl_dphi_thread); + } + if (inout->isstress) + { + // calculating g_mu(r)*(r-R) where R is the location of atom + ModuleBase::Array_Pool array(this->bxyz, LD_pool * 6); - //the vxc part - Gint_Tools::cal_dpsirr_ylm(*this->gridt, this->bxyz, na_grid, grid_index, block_index.data(), block_size.data(), cal_flag.get_ptr_2D(), - dpsir_ylm_x.get_ptr_2D(), dpsir_ylm_y.get_ptr_2D(), dpsir_ylm_z.get_ptr_2D(), array.get_ptr_2D()); - //do integration to get stress - this-> cal_meshball_stress(na_grid, block_index.data(), psir_vlbr3_DM.get_ptr_1D(), - array.get_ptr_1D(), svl_dphi_thread); + // the vxc part + Gint_Tools::cal_dpsirr_ylm(*this->gridt, + this->bxyz, + na_grid, + grid_index, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + dpsir_ylm_x.get_ptr_2D(), + dpsir_ylm_y.get_ptr_2D(), + dpsir_ylm_z.get_ptr_2D(), + array.get_ptr_2D()); + // do integration to get stress + this->cal_meshball_stress(na_grid, + block_index.data(), + psir_vlbr3_DM.get_ptr_1D(), + array.get_ptr_1D(), + svl_dphi_thread); - //partial x of vtau part - Gint_Tools::cal_dpsirr_ylm(*this->gridt, this->bxyz, na_grid, grid_index, block_index.data(), block_size.data(), cal_flag.get_ptr_2D(), - ddpsir_ylm_xx.get_ptr_2D(), ddpsir_ylm_xy.get_ptr_2D(), ddpsir_ylm_xz.get_ptr_2D(), array.get_ptr_2D()); - //do integration to get stress - this-> cal_meshball_stress(na_grid, block_index.data(), dpsirx_v_DM.get_ptr_1D(), - array.get_ptr_1D(), svl_dphi_thread); + // partial x of vtau part + Gint_Tools::cal_dpsirr_ylm(*this->gridt, + this->bxyz, + na_grid, + grid_index, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + ddpsir_ylm_xx.get_ptr_2D(), + ddpsir_ylm_xy.get_ptr_2D(), + ddpsir_ylm_xz.get_ptr_2D(), + array.get_ptr_2D()); + // do integration to get stress + this->cal_meshball_stress(na_grid, + block_index.data(), + dpsirx_v_DM.get_ptr_1D(), + array.get_ptr_1D(), + svl_dphi_thread); - //partial y of vtau part - Gint_Tools::cal_dpsirr_ylm(*this->gridt, this->bxyz, na_grid, grid_index, block_index.data(), block_size.data(), cal_flag.get_ptr_2D(), - ddpsir_ylm_xy.get_ptr_2D(), ddpsir_ylm_yy.get_ptr_2D(), ddpsir_ylm_yz.get_ptr_2D(), array.get_ptr_2D()); - //do integration to get stress - this-> cal_meshball_stress(na_grid, block_index.data(), dpsiry_v_DM.get_ptr_1D(), - array.get_ptr_1D(), svl_dphi_thread); + // partial y of vtau part + Gint_Tools::cal_dpsirr_ylm(*this->gridt, + this->bxyz, + na_grid, + grid_index, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + ddpsir_ylm_xy.get_ptr_2D(), + ddpsir_ylm_yy.get_ptr_2D(), + ddpsir_ylm_yz.get_ptr_2D(), + array.get_ptr_2D()); + // do integration to get stress + this->cal_meshball_stress(na_grid, + block_index.data(), + dpsiry_v_DM.get_ptr_1D(), + array.get_ptr_1D(), + svl_dphi_thread); - //partial z of vtau part - Gint_Tools::cal_dpsirr_ylm(*this->gridt, this->bxyz, na_grid, grid_index, block_index.data(), block_size.data(), cal_flag.get_ptr_2D(), - ddpsir_ylm_xz.get_ptr_2D(), ddpsir_ylm_yz.get_ptr_2D(), ddpsir_ylm_zz.get_ptr_2D(), array.get_ptr_2D()); - //do integration to get stress - this-> cal_meshball_stress(na_grid, block_index.data(), dpsirz_v_DM.get_ptr_1D(), - array.get_ptr_1D(), svl_dphi_thread); + // partial z of vtau part + Gint_Tools::cal_dpsirr_ylm(*this->gridt, + this->bxyz, + na_grid, + grid_index, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + ddpsir_ylm_xz.get_ptr_2D(), + ddpsir_ylm_yz.get_ptr_2D(), + ddpsir_ylm_zz.get_ptr_2D(), + array.get_ptr_2D()); + // do integration to get stress + this->cal_meshball_stress(na_grid, + block_index.data(), + dpsirz_v_DM.get_ptr_1D(), + array.get_ptr_1D(), + svl_dphi_thread); + } } - } #pragma omp critical(gint) - { - if (inout->isforce) { - inout->fvl_dphi[0] += fvl_dphi_thread[0]; - delete fvl_dphi_thread; - } - if (inout->isstress) { - inout->svl_dphi[0] += svl_dphi_thread[0]; - delete svl_dphi_thread; + { + if (inout->isforce) + { + inout->fvl_dphi[0] += fvl_dphi_thread[0]; + delete fvl_dphi_thread; + } + if (inout->isstress) + { + inout->svl_dphi[0] += svl_dphi_thread[0]; + delete svl_dphi_thread; + } } } -} ModuleBase::TITLE("Gint_interface", "cal_gint_force_meta"); ModuleBase::timer::tick("Gint_interface", "cal_gint_force_meta"); } diff --git a/source/module_hamilt_lcao/module_gint/gint_force_gpu.cu b/source/module_hamilt_lcao/module_gint/gint_force_gpu.cu index 9cb3e785c4..3b487aaa0d 100644 --- a/source/module_hamilt_lcao/module_gint/gint_force_gpu.cu +++ b/source/module_hamilt_lcao/module_gint/gint_force_gpu.cu @@ -3,10 +3,10 @@ #endif #include "gint_force_gpu.h" +#include "gint_tools.h" #include "kernels/cuda/cuda_tools.cuh" #include "kernels/cuda/gint_force.cuh" -#include "module_base/ylm.h" -#include "gint_tools.h" +#include "source_base/ylm.h" namespace GintKernel { @@ -23,16 +23,16 @@ namespace GintKernel * 7. Copy the results back to the host. */ void gint_fvl_gpu(const hamilt::HContainer* dm, - const double* vlocal, - double* force_in, - double* stress_in, - double dr, - const double* rcut, - const int isforce, - const int isstress, - const Grid_Technique& gridt, - const UnitCell& ucell) -{ + const double* vlocal, + double* force_in, + double* stress_in, + double dr, + const double* rcut, + const int isforce, + const int isstress, + const Grid_Technique& gridt, + const UnitCell& ucell) +{ checkCuda(cudaSetDevice(gridt.dev_id)); // checkCuda(cudaSetDeviceFlags(cudaDeviceScheduleBlockingSync)); @@ -46,7 +46,7 @@ void gint_fvl_gpu(const hamilt::HContainer* dm, const int max_atompair_per_z = max_atom * max_atom * nbzp; const double vfactor = ucell.omega / gridt.ncxyz; const int nczp = nbzp * gridt.bz; - const int nat=ucell.nat; + const int nat = ucell.nat; const int num_streams = gridt.nstreams; @@ -93,173 +93,165 @@ void gint_fvl_gpu(const hamilt::HContainer* dm, cudaMemcpyHostToDevice)); #ifdef _OPENMP -const int max_thread_num = std::min(omp_get_max_threads(), num_streams); + const int max_thread_num = std::min(omp_get_max_threads(), num_streams); #endif #pragma omp parallel num_threads(max_thread_num) -{ + { #ifdef _OPENMP - const int tid = omp_get_thread_num(); - const int num_threads = omp_get_num_threads(); - const int sid_start = tid * num_streams / num_threads; - const int thread_num_streams = tid == num_threads - 1 ? num_streams - sid_start : num_streams / num_threads; + const int tid = omp_get_thread_num(); + const int num_threads = omp_get_num_threads(); + const int sid_start = tid * num_streams / num_threads; + const int thread_num_streams = tid == num_threads - 1 ? num_streams - sid_start : num_streams / num_threads; #else - const int sid_start = 0; - const int thread_num_streams = num_streams; + const int sid_start = 0; + const int thread_num_streams = num_streams; #endif #pragma omp for collapse(2) schedule(dynamic) - for (int i = 0; i < gridt.nbx; i++) - { - for (int j = 0; j < gridt.nby; j++) + for (int i = 0; i < gridt.nbx; i++) { - // 20240620 Note that it must be set again here because - // cuda's device is not safe in a multi-threaded environment. - checkCuda(cudaSetDevice(gridt.dev_id)); + for (int j = 0; j < gridt.nby; j++) + { + // 20240620 Note that it must be set again here because + // cuda's device is not safe in a multi-threaded environment. + checkCuda(cudaSetDevice(gridt.dev_id)); - const int sid = (i * gridt.nby + j) % thread_num_streams + sid_start; - checkCuda(cudaEventSynchronize(events[sid])); + const int sid = (i * gridt.nby + j) % thread_num_streams + sid_start; + checkCuda(cudaEventSynchronize(events[sid])); - int max_m = 0; - int max_n = 0; - int atom_pair_num = 0; - int atoms_per_z = 0; - const int grid_index_ij = i * gridt.nby * nbzp + j * nbzp; + int max_m = 0; + int max_n = 0; + int atom_pair_num = 0; + int atoms_per_z = 0; + const int grid_index_ij = i * gridt.nby * nbzp + j * nbzp; - gtask_force(gridt, - ucell, - grid_index_ij, - nczp, - vfactor, - vlocal, - atoms_per_z, - atoms_num_info.get_host_pointer(sid), - iat_on_nbz.get_host_pointer(sid), - atoms_type.get_host_pointer(sid), - dr_part.get_host_pointer(sid), - vldr3.get_host_pointer(sid)); - - alloc_mult_force(dm, - gridt, - ucell, - grid_index_ij, - max_atom, - atoms_num_info.get_host_pointer(sid), - psi.get_device_pointer(sid), - psi_dm.get_device_pointer(sid), - dm_matrix.get_device_pointer(), - max_m, - max_n, - atom_pair_num, - gemm_m.get_host_pointer(sid), - gemm_n.get_host_pointer(sid), - gemm_k.get_host_pointer(sid), - gemm_lda.get_host_pointer(sid), - gemm_ldb.get_host_pointer(sid), - gemm_ldc.get_host_pointer(sid), - gemm_A.get_host_pointer(sid), - gemm_B.get_host_pointer(sid), - gemm_C.get_host_pointer(sid)); + gtask_force(gridt, + ucell, + grid_index_ij, + nczp, + vfactor, + vlocal, + atoms_per_z, + atoms_num_info.get_host_pointer(sid), + iat_on_nbz.get_host_pointer(sid), + atoms_type.get_host_pointer(sid), + dr_part.get_host_pointer(sid), + vldr3.get_host_pointer(sid)); - dr_part.copy_host_to_device_async(streams[sid], sid, 3 * atoms_per_z); - atoms_type.copy_host_to_device_async(streams[sid], sid, atoms_per_z); - iat_on_nbz.copy_host_to_device_async(streams[sid], sid, atoms_per_z); - vldr3.copy_host_to_device_async(streams[sid], sid); - atoms_num_info.copy_host_to_device_async(streams[sid], sid); - - gemm_m.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_n.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_k.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_lda.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_ldb.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_ldc.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_A.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_B.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_C.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - checkCuda(cudaEventRecord(events[sid], streams[sid])); + alloc_mult_force(dm, + gridt, + ucell, + grid_index_ij, + max_atom, + atoms_num_info.get_host_pointer(sid), + psi.get_device_pointer(sid), + psi_dm.get_device_pointer(sid), + dm_matrix.get_device_pointer(), + max_m, + max_n, + atom_pair_num, + gemm_m.get_host_pointer(sid), + gemm_n.get_host_pointer(sid), + gemm_k.get_host_pointer(sid), + gemm_lda.get_host_pointer(sid), + gemm_ldb.get_host_pointer(sid), + gemm_ldc.get_host_pointer(sid), + gemm_A.get_host_pointer(sid), + gemm_B.get_host_pointer(sid), + gemm_C.get_host_pointer(sid)); - psi.memset_device_async(streams[sid], sid, 0); - psi_dm.memset_device_async(streams[sid], sid, 0); - dpsi.memset_device_async(streams[sid], sid, 0); - d2psi.memset_device_async(streams[sid], sid, 0); + dr_part.copy_host_to_device_async(streams[sid], sid, 3 * atoms_per_z); + atoms_type.copy_host_to_device_async(streams[sid], sid, atoms_per_z); + iat_on_nbz.copy_host_to_device_async(streams[sid], sid, atoms_per_z); + vldr3.copy_host_to_device_async(streams[sid], sid); + atoms_num_info.copy_host_to_device_async(streams[sid], sid); - dim3 grid_psi(nbzp, gridt.bxyz); - dim3 block_psi(64); - get_psi_force<<>>( - gridt.ylmcoef_g, - dr, - bxyz, - nwmax, - max_atom, - gridt.atom_nwl_g, - gridt.atom_new_g, - gridt.atom_ylm_g, - gridt.atom_l_g, - gridt.atom_nw_g, - gridt.rcut_g, - gridt.nr_max, - gridt.psi_u_g, - gridt.mcell_pos_g, - dr_part.get_device_pointer(sid), - vldr3.get_device_pointer(sid), - atoms_type.get_device_pointer(sid), - atoms_num_info.get_device_pointer(sid), - psi.get_device_pointer(sid), - dpsi.get_device_pointer(sid), - d2psi.get_device_pointer(sid)); - checkCudaLastError(); + gemm_m.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_n.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_k.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_lda.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_ldb.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_ldc.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_A.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_B.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_C.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + checkCuda(cudaEventRecord(events[sid], streams[sid])); - gridt.fastest_matrix_mul(max_m, - max_n, - gemm_m.get_device_pointer(sid), - gemm_n.get_device_pointer(sid), - gemm_k.get_device_pointer(sid), - gemm_A.get_device_pointer(sid), - gemm_lda.get_device_pointer(sid), - gemm_B.get_device_pointer(sid), - gemm_ldb.get_device_pointer(sid), - gemm_C.get_device_pointer(sid), - gemm_ldc.get_device_pointer(sid), - atom_pair_num, - streams[sid], - nullptr); - - if (isforce){ - dim3 grid_force(nbzp); - dim3 block_force(64); - dot_product_force<<>>( - bxyz, - nwmax, - atoms_num_info.get_device_pointer(sid), - iat_on_nbz.get_device_pointer(sid), - dpsi.get_device_pointer(sid), - psi_dm.get_device_pointer(sid), - force.get_device_pointer(sid)); - checkCudaLastError(); - } + psi.memset_device_async(streams[sid], sid, 0); + psi_dm.memset_device_async(streams[sid], sid, 0); + dpsi.memset_device_async(streams[sid], sid, 0); + d2psi.memset_device_async(streams[sid], sid, 0); - if (isstress){ - dim3 grid_stress(nbzp); - dim3 block_stress(64); - dot_product_stress<<>>( - d2psi.get_device_pointer(sid), - psi_dm.get_device_pointer(sid), - atoms_per_z * nwmax * bxyz, - stress.get_device_pointer(sid)); + dim3 grid_psi(nbzp, gridt.bxyz); + dim3 block_psi(64); + get_psi_force<<>>(gridt.ylmcoef_g, + dr, + bxyz, + nwmax, + max_atom, + gridt.atom_nwl_g, + gridt.atom_new_g, + gridt.atom_ylm_g, + gridt.atom_l_g, + gridt.atom_nw_g, + gridt.rcut_g, + gridt.nr_max, + gridt.psi_u_g, + gridt.mcell_pos_g, + dr_part.get_device_pointer(sid), + vldr3.get_device_pointer(sid), + atoms_type.get_device_pointer(sid), + atoms_num_info.get_device_pointer(sid), + psi.get_device_pointer(sid), + dpsi.get_device_pointer(sid), + d2psi.get_device_pointer(sid)); checkCudaLastError(); + + gridt.fastest_matrix_mul(max_m, + max_n, + gemm_m.get_device_pointer(sid), + gemm_n.get_device_pointer(sid), + gemm_k.get_device_pointer(sid), + gemm_A.get_device_pointer(sid), + gemm_lda.get_device_pointer(sid), + gemm_B.get_device_pointer(sid), + gemm_ldb.get_device_pointer(sid), + gemm_C.get_device_pointer(sid), + gemm_ldc.get_device_pointer(sid), + atom_pair_num, + streams[sid], + nullptr); + + if (isforce) + { + dim3 grid_force(nbzp); + dim3 block_force(64); + dot_product_force<<>>( + bxyz, + nwmax, + atoms_num_info.get_device_pointer(sid), + iat_on_nbz.get_device_pointer(sid), + dpsi.get_device_pointer(sid), + psi_dm.get_device_pointer(sid), + force.get_device_pointer(sid)); + checkCudaLastError(); + } + + if (isstress) + { + dim3 grid_stress(nbzp); + dim3 block_stress(64); + dot_product_stress<<>>( + d2psi.get_device_pointer(sid), + psi_dm.get_device_pointer(sid), + atoms_per_z * nwmax * bxyz, + stress.get_device_pointer(sid)); + checkCudaLastError(); + } } } } -} - for(int i = 0; i < num_streams; i++) + for (int i = 0; i < num_streams; i++) { stress.copy_device_to_host_async(streams[i], i); force.copy_device_to_host_async(streams[i], i); @@ -271,7 +263,8 @@ const int max_thread_num = std::min(omp_get_max_threads(), num_streams); checkCuda(cudaEventDestroy(events[i])); } - if (isstress){ + if (isstress) + { for (int i = 0; i < num_streams; i++) { const int offset = 6 * i; @@ -281,7 +274,8 @@ const int max_thread_num = std::min(omp_get_max_threads(), num_streams); } } } - if (isforce){ + if (isforce) + { for (int i = 0; i < num_streams; i++) { const int offset = 3 * i * nat; diff --git a/source/module_hamilt_lcao/module_gint/gint_fvl.cpp b/source/module_hamilt_lcao/module_gint/gint_fvl.cpp index 379b4eb26c..c0b88e01a6 100644 --- a/source/module_hamilt_lcao/module_gint/gint_fvl.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_fvl.cpp @@ -1,76 +1,76 @@ #include "gint_k.h" -#include "module_base/timer.h" -#include "module_base/ylm.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/array_pool.h" +#include "source_base/array_pool.h" +#include "source_base/timer.h" +#include "source_base/ylm.h" // This function utilizes the cache more effectively than calling the ddot function, thus performing faster. void Gint::cal_meshball_force( const int grid_index, - const int na_grid, // how many atoms on this (i,j,k) grid - const int*const block_size, // block_size[na_grid], number of columns of a band - const int*const block_index, // block_index[na_grid+1], count total number of atomis orbitals - const double*const*const psir_vlbr3_DMR, // psir_vlbr3[this->bxyz][LD_pool] - const double*const*const dpsir_x, // psir_vlbr3[this->bxyz][LD_pool] - const double*const*const dpsir_y, // psir_vlbr3[this->bxyz][LD_pool] - const double*const*const dpsir_z, // psir_vlbr3[this->bxyz][LD_pool] - ModuleBase::matrix *force) + const int na_grid, // how many atoms on this (i,j,k) grid + const int* const block_size, // block_size[na_grid], number of columns of a band + const int* const block_index, // block_index[na_grid+1], count total number of atomis orbitals + const double* const* const psir_vlbr3_DMR, // psir_vlbr3[this->bxyz][LD_pool] + const double* const* const dpsir_x, // psir_vlbr3[this->bxyz][LD_pool] + const double* const* const dpsir_y, // psir_vlbr3[this->bxyz][LD_pool] + const double* const* const dpsir_z, // psir_vlbr3[this->bxyz][LD_pool] + ModuleBase::matrix* force) { - for(int ia1=0;ia1gridt->bcell_start[grid_index] + ia1; - const int iat=this->gridt->which_atom[mcell_index]; // index of atom - double rx = 0; - double ry = 0; - double rz = 0; - for(int ib=0; ibbxyz; ib++) + const int mcell_index = this->gridt->bcell_start[grid_index] + ia1; + const int iat = this->gridt->which_atom[mcell_index]; // index of atom + double rx = 0; + double ry = 0; + double rz = 0; + for (int ib = 0; ib < this->bxyz; ib++) { - for(int iw=0; iwbxyz; + double rxx = 0; + double rxy = 0; + double rxz = 0; + double ryy = 0; + double ryz = 0; + double rzz = 0; + const int size = block_index[na_grid] * this->bxyz; - for(int i=0; i #endif //========================================================= // ModuleBase::Integral On 3D Grids, different from Grid_Integral -// Feature : Matrix Elements Of Local Potential For +// Feature : Matrix Elements Of Local Potential For // Numerical Orbitals //========================================================= class Gint_Gamma : public Gint { - public: - + public: //! @brief move operator for the next ESolver to directly use its infomation - //! @param rhs + //! @param rhs //! @return *this Gint_Gamma& operator=(Gint_Gamma&& rhs); - //! in gint_gamma_vl.cpp + //! in gint_gamma_vl.cpp //! there is an additional step in calculating vlocal for gamma point //! namely the redistribution of Hamiltonian from grid to 2D block format //! hence we have an additional layer outside the unified interface void cal_vlocal(Gint_inout* inout, const bool new_e_iteration); - //! in gint_gamma_env.cpp - //! calcualte the electronic wave functions via grid integral - void cal_env(const double* wfc, double* rho,const UnitCell &ucell); + //! in gint_gamma_env.cpp + //! calcualte the electronic wave functions via grid integral + void cal_env(const double* wfc, double* rho, const UnitCell& ucell); //! transfer this->hRGint to Veff::hR - void transfer_pvpR(hamilt::HContainer* hR,const UnitCell* ucell); - -private: + void transfer_pvpR(hamilt::HContainer* hR, const UnitCell* ucell); + private: //! pointer to density matrix double*** DM = nullptr; - }; #endif diff --git a/source/module_hamilt_lcao/module_gint/gint_gamma_env.cpp b/source/module_hamilt_lcao/module_gint/gint_gamma_env.cpp index 222c604c73..9477507cc7 100644 --- a/source/module_hamilt_lcao/module_gint/gint_gamma_env.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_gamma_env.cpp @@ -1,21 +1,21 @@ #include "gint_gamma.h" #include "grid_technique.h" -#include "module_base/timer.h" -#include "module_base/ylm.h" -#include "module_base/array_pool.h" #include "module_basis/module_ao/ORB_read.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/array_pool.h" +#include "source_base/timer.h" +#include "source_base/ylm.h" -void Gint_Gamma::cal_env(const double* wfc, double* rho,const UnitCell& ucell) +void Gint_Gamma::cal_env(const double* wfc, double* rho, const UnitCell& ucell) { ModuleBase::TITLE("Grid_Integral", "cal_env"); // it's a uniform grid to save orbital values, so the delta_r is a constant. const double delta_r = this->gridt->dr_uniform; const int max_size = this->gridt->max_atom; - if (max_size <= 0){ - ModuleBase::WARNING_QUIT("Gint_Gamma::cal_env", - "the max_size is less than 0!"); + if (max_size <= 0) + { + ModuleBase::WARNING_QUIT("Gint_Gamma::cal_env", "the max_size is less than 0!"); } const int nbx = this->gridt->nbx; const int nby = this->gridt->nby; @@ -23,13 +23,13 @@ void Gint_Gamma::cal_env(const double* wfc, double* rho,const UnitCell& ucell) const int ncyz = this->ny * this->nplane; // mohan add 2012-03-25 const int bxyz = this->bxyz; - #pragma omp parallel +#pragma omp parallel { std::vector block_iw(max_size, 0); - std::vector block_index(max_size+1, 0); + std::vector block_index(max_size + 1, 0); std::vector block_size(max_size, 0); - std::vector vindex(bxyz,0); - #pragma omp for + std::vector vindex(bxyz, 0); +#pragma omp for for (int grid_index = 0; grid_index < this->nbxx; grid_index++) { @@ -48,7 +48,7 @@ void Gint_Gamma::cal_env(const double* wfc, double* rho,const UnitCell& ucell) block_index.data(), block_size.data(), cal_flag.get_ptr_2D()); - const int LD_pool = block_index[size]; + const int LD_pool = block_index[size]; // evaluate psi on grids ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); @@ -62,14 +62,14 @@ void Gint_Gamma::cal_env(const double* wfc, double* rho,const UnitCell& ucell) cal_flag.get_ptr_2D(), psir_ylm.get_ptr_2D()); - Gint_Tools::get_vindex(this->bxyz, - this->bx, - this->by, - this->bz, - this->nplane, - this->gridt->start_ind[grid_index], - ncyz, - vindex.data()); + Gint_Tools::get_vindex(this->bxyz, + this->bx, + this->by, + this->bz, + this->nplane, + this->gridt->start_ind[grid_index], + ncyz, + vindex.data()); for (int ia1 = 0; ia1 < size; ia1++) { diff --git a/source/module_hamilt_lcao/module_gint/gint_gamma_vl.cpp b/source/module_hamilt_lcao/module_gint/gint_gamma_vl.cpp index 5e92930e34..05c3c8fe06 100644 --- a/source/module_hamilt_lcao/module_gint/gint_gamma_vl.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_gamma_vl.cpp @@ -4,12 +4,12 @@ #include "gint_gamma.h" #include "gint_tools.h" #include "grid_technique.h" -#include "module_base/blas_connector.h" -#include "module_base/memory.h" -#include "module_base/timer.h" #include "module_basis/module_ao/ORB_read.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer_funcs.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/blas_connector.h" +#include "source_base/memory.h" +#include "source_base/timer.h" #ifdef _OPENMP #include diff --git a/source/module_hamilt_lcao/module_gint/gint_gpu_interface.cpp b/source/module_hamilt_lcao/module_gint/gint_gpu_interface.cpp index 9d6e6e0894..2a23d50123 100644 --- a/source/module_hamilt_lcao/module_gint/gint_gpu_interface.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_gpu_interface.cpp @@ -1,12 +1,13 @@ #include "gint.h" #include "gint_force_gpu.h" -#include "module_parameter/parameter.h" #include "gint_rho_gpu.h" #include "gint_vl_gpu.h" -#include "module_base/memory.h" -#include "module_base/timer.h" +#include "module_parameter/parameter.h" +#include "source_base/memory.h" +#include "source_base/timer.h" -void Gint::gpu_vlocal_interface(Gint_inout* inout) { +void Gint::gpu_vlocal_interface(Gint_inout* inout) +{ ModuleBase::TITLE("Gint_interface", "cal_gint_vlocal"); ModuleBase::timer::tick("Gint_interface", "cal_gint_vlocal"); @@ -14,24 +15,20 @@ void Gint::gpu_vlocal_interface(Gint_inout* inout) { const double dr = this->gridt->dr_uniform; double ylmcoef[100]; ModuleBase::GlobalFunc::ZEROS(ylmcoef, 100); - for (int i = 0; i < 100; i++) { + for (int i = 0; i < 100; i++) + { ylmcoef[i] = ModuleBase::Ylm::ylmcoef[i]; } hamilt::HContainer* hRGint_kernel = PARAM.inp.nspin != 4 ? this->hRGint : this->hRGint_tmp[inout->ispin]; - GintKernel::gint_vl_gpu(hRGint_kernel, - inout->vl, - ylmcoef, - dr, - this->gridt->rcuts.data(), - *this->gridt, - ucell); + GintKernel::gint_vl_gpu(hRGint_kernel, inout->vl, ylmcoef, dr, this->gridt->rcuts.data(), *this->gridt, ucell); ModuleBase::TITLE("Gint_interface", "cal_gint_vlocal"); ModuleBase::timer::tick("Gint_interface", "cal_gint_vlocal"); } -void Gint::gpu_rho_interface(Gint_inout* inout) { +void Gint::gpu_rho_interface(Gint_inout* inout) +{ ModuleBase::TITLE("Gint_interface", "cal_gint_rho"); ModuleBase::timer::tick("Gint_interface", "cal_gint_rho"); @@ -39,25 +36,28 @@ void Gint::gpu_rho_interface(Gint_inout* inout) { const double dr = this->gridt->dr_uniform; double ylmcoef[100]; ModuleBase::GlobalFunc::ZEROS(ylmcoef, 100); - for (int i = 0; i < 100; i++) { + for (int i = 0; i < 100; i++) + { ylmcoef[i] = ModuleBase::Ylm::ylmcoef[i]; } int nrxx = this->gridt->ncx * this->gridt->ncy * this->nplane; - for (int is = 0; is < PARAM.inp.nspin; ++is) { + for (int is = 0; is < PARAM.inp.nspin; ++is) + { ModuleBase::GlobalFunc::ZEROS(inout->rho[is], nrxx); GintKernel::gint_rho_gpu(this->DMRGint[is], - ylmcoef, - dr, - this->gridt->rcuts.data(), - *this->gridt, - ucell, - inout->rho[is]); + ylmcoef, + dr, + this->gridt->rcuts.data(), + *this->gridt, + ucell, + inout->rho[is]); } ModuleBase::TITLE("Gint_interface", "cal_gint_rho"); ModuleBase::timer::tick("Gint_interface", "cal_gint_rho"); } -void Gint::gpu_force_interface(Gint_inout* inout) { +void Gint::gpu_force_interface(Gint_inout* inout) +{ ModuleBase::TITLE("Gint_interface", "cal_gint_force"); ModuleBase::timer::tick("Gint_interface", "cal_gint_force"); @@ -65,7 +65,8 @@ void Gint::gpu_force_interface(Gint_inout* inout) { const double dr = this->gridt->dr_uniform; double ylmcoef[100]; ModuleBase::GlobalFunc::ZEROS(ylmcoef, 100); - for (int i = 0; i < 100; i++) { + for (int i = 0; i < 100; i++) + { ylmcoef[i] = ModuleBase::Ylm::ylmcoef[i]; } @@ -73,27 +74,31 @@ void Gint::gpu_force_interface(Gint_inout* inout) { int nat = ucell.nat; const int isforce = inout->isforce; const int isstress = inout->isstress; - if (isforce || isstress) { + if (isforce || isstress) + { std::vector force(nat * 3, 0.0); std::vector stress(6, 0.0); GintKernel::gint_fvl_gpu(this->DMRGint[inout->ispin], - inout->vl, - force.data(), - stress.data(), - dr, - this->gridt->rcuts.data(), - isforce, - isstress, - *this->gridt, - ucell); - if (inout->isforce) { - for (int iat = 0; iat < nat; iat++) { + inout->vl, + force.data(), + stress.data(), + dr, + this->gridt->rcuts.data(), + isforce, + isstress, + *this->gridt, + ucell); + if (inout->isforce) + { + for (int iat = 0; iat < nat; iat++) + { inout->fvl_dphi[0](iat, 0) += force[iat * 3]; inout->fvl_dphi[0](iat, 1) += force[iat * 3 + 1]; inout->fvl_dphi[0](iat, 2) += force[iat * 3 + 2]; } } - if (inout->isstress) { + if (inout->isstress) + { inout->svl_dphi[0](0, 0) += stress[0]; inout->svl_dphi[0](0, 1) += stress[1]; inout->svl_dphi[0](0, 2) += stress[2]; diff --git a/source/module_hamilt_lcao/module_gint/gint_k.h b/source/module_hamilt_lcao/module_gint/gint_k.h index 74ac0a744d..781916ea34 100644 --- a/source/module_hamilt_lcao/module_gint/gint_k.h +++ b/source/module_hamilt_lcao/module_gint/gint_k.h @@ -8,12 +8,13 @@ #include "module_hamilt_lcao/hamilt_lcaodft/LCAO_HS_arrays.hpp" // add by jingan for map<> in 2021-12-2, will be deleted in the future -#include "module_base/abfs-vector3_order.h" +#include "source_base/abfs-vector3_order.h" -class Gint_k : public Gint { +class Gint_k : public Gint +{ public: /// @brief move operator for the next ESolver to directly use its infomation - /// @param rhs + /// @param rhs /// @return *this Gint_k& operator=(Gint_k&& rhs); @@ -54,18 +55,14 @@ class Gint_k : public Gint { const int current_spin, const int dim, const double& sparse_threshold, - const std::map, - std::map>>& - pvdpR_sparseMatrix, + const std::map, std::map>>& pvdpR_sparseMatrix, LCAO_HS_Arrays& HS_Arrays, const Parallel_Orbitals* pv); void distribute_pvdpR_soc_sparseMatrix( const int dim, const double& sparse_threshold, - const std::map< - Abfs::Vector3_Order, - std::map>>>& + const std::map, std::map>>>& pvdpR_soc_sparseMatrix, LCAO_HS_Arrays& HS_Arrays, const Parallel_Orbitals* pv); diff --git a/source/module_hamilt_lcao/module_gint/gint_k_env.cpp b/source/module_hamilt_lcao/module_gint/gint_k_env.cpp index da212ce4f0..8dad7dd697 100644 --- a/source/module_hamilt_lcao/module_gint/gint_k_env.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_k_env.cpp @@ -1,12 +1,12 @@ #include "gint_k.h" #include "grid_technique.h" -#include "module_parameter/parameter.h" -#include "module_base/timer.h" -#include "module_base/ylm.h" #include "module_basis/module_ao/ORB_read.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/array_pool.h" -#include "module_base/vector3.h" +#include "module_parameter/parameter.h" +#include "source_base/array_pool.h" +#include "source_base/timer.h" +#include "source_base/vector3.h" +#include "source_base/ylm.h" void Gint_k::cal_env_k(int ik, const std::complex* psi_k, @@ -21,22 +21,22 @@ void Gint_k::cal_env_k(int ik, // it's a uniform grid to save orbital values, so the delta_r is a constant. const double delta_r = this->gridt->dr_uniform; const int max_size = this->gridt->max_atom; - if (max_size <= 0){ - ModuleBase::WARNING_QUIT("Gint_Gamma::cal_env", - "the max_size is less than 0!"); + if (max_size <= 0) + { + ModuleBase::WARNING_QUIT("Gint_Gamma::cal_env", "the max_size is less than 0!"); } const int nbx = this->gridt->nbx; const int nby = this->gridt->nby; const int nbz = this->gridt->nbzp; const int ncyz = this->ny * this->nplane; // mohan add 2012-03-25 - #pragma omp parallel +#pragma omp parallel { std::vector vindex(this->bxyz, 0); std::vector block_iw(max_size, 0); std::vector block_index(max_size + 1, 0); std::vector block_size(max_size, 0); - #pragma omp for +#pragma omp for for (int grid_index = 0; grid_index < this->nbxx; grid_index++) { @@ -70,13 +70,13 @@ void Gint_k::cal_env_k(int ik, psir_ylm.get_ptr_2D()); Gint_Tools::get_vindex(this->bxyz, - this->bx, - this->by, - this->bz, - this->nplane, - this->gridt->start_ind[grid_index], - ncyz, - vindex.data()); + this->bx, + this->by, + this->bz, + this->nplane, + this->gridt->start_ind[grid_index], + ncyz, + vindex.data()); for (int ia1 = 0; ia1 < size; ia1++) { @@ -131,7 +131,7 @@ void Gint_k::cal_env_k(int ik, } // cal_flag } // ib } // ia1 - } // i + } // i } ModuleBase::timer::tick("Gint_k", "cal_env_k"); return; diff --git a/source/module_hamilt_lcao/module_gint/gint_k_pvdpr.cpp b/source/module_hamilt_lcao/module_gint/gint_k_pvdpr.cpp index 6562c760a3..babc7ba5ca 100644 --- a/source/module_hamilt_lcao/module_gint/gint_k_pvdpr.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_k_pvdpr.cpp @@ -1,26 +1,26 @@ #include "gint_k.h" #include "grid_technique.h" -#include "module_parameter/parameter.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/memory.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" -#include "module_base/tool_threading.h" -#include "module_base/ylm.h" #include "module_basis/module_ao/ORB_read.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/tool_threading.h" +#include "source_base/ylm.h" void Gint_k::allocate_pvdpR(void) { - ModuleBase::TITLE("Gint_k","allocate_pvpR"); + ModuleBase::TITLE("Gint_k", "allocate_pvpR"); const int nspin = PARAM.inp.nspin; - assert(nspin>0); + assert(nspin > 0); - //xiaohui modify 2015-05-30 - // the number of matrix element is this->gridt->nnrg. - for(int is =0;is is this->gridt->nnrg. + for (int is = 0; is < nspin; is++) { this->pvdpRx_reduced.push_back(hamilt::HContainer(this->ucell->nat)); pvdpRx_reduced[is].insert_ijrs(this->gridt->get_ijr_info(), *this->ucell); @@ -39,10 +39,10 @@ void Gint_k::allocate_pvdpR(void) void Gint_k::destroy_pvdpR(void) { - ModuleBase::TITLE("Gint_k","destroy_pvpR"); + ModuleBase::TITLE("Gint_k", "destroy_pvpR"); const int nspin = PARAM.inp.nspin; - assert(nspin>0); + assert(nspin > 0); pvdpRx_reduced.clear(); pvdpRy_reduced.clear(); pvdpRz_reduced.clear(); diff --git a/source/module_hamilt_lcao/module_gint/gint_k_pvpr.cpp b/source/module_hamilt_lcao/module_gint/gint_k_pvpr.cpp index 9a6cca47f7..b9d6a28c65 100644 --- a/source/module_hamilt_lcao/module_gint/gint_k_pvpr.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_k_pvpr.cpp @@ -1,18 +1,18 @@ #include "gint_k.h" #include "grid_technique.h" -#include "module_parameter/parameter.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/libm/libm.h" -#include "module_base/memory.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" -#include "module_base/tool_threading.h" -#include "module_base/ylm.h" #include "module_basis/module_ao/ORB_read.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer_funcs.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/libm/libm.h" +#include "source_base/memory.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/tool_threading.h" +#include "source_base/ylm.h" #ifdef __MPI #include #endif @@ -38,7 +38,7 @@ void Gint_k::transfer_pvpR(hamilt::HContainer* hR, const UnitCell* ucell assert(upper_ap != nullptr); #endif for (int ir = 0; ir < ap.get_R_size(); ir++) - { + { auto R_index = ap.get_R_index(ir); auto upper_mat = upper_ap->find_matrix(-R_index); auto lower_mat = lower_ap->find_matrix(R_index); @@ -79,7 +79,7 @@ void Gint_k::transfer_pvpR(hamilt::HContainer>* hR, ModuleBase::timer::tick("Gint_k", "transfer_pvpR"); this->hRGintCd->set_zero(); - + for (int iap = 0; iap < this->hRGintCd->size_atom_pairs(); iap++) { auto* ap = &this->hRGintCd->get_atom_pair(iap); @@ -92,7 +92,7 @@ void Gint_k::transfer_pvpR(hamilt::HContainer>* hR, const hamilt::AtomPair* ap_nspin_0 = this->hRGint_tmp[0]->find_pair(iat1, iat2); const hamilt::AtomPair* ap_nspin_3 = this->hRGint_tmp[3]->find_pair(iat1, iat2); for (int ir = 0; ir < upper_ap->get_R_size(); ir++) - { + { const auto R_index = upper_ap->get_R_index(ir); auto upper_mat = upper_ap->find_matrix(R_index); auto mat_nspin_0 = ap_nspin_0->find_matrix(R_index); @@ -103,8 +103,10 @@ void Gint_k::transfer_pvpR(hamilt::HContainer>* hR, { for (int icol = 0; icol < mat_nspin_0->get_col_size(); ++icol) { - upper_mat->get_value(2*irow, 2*icol) = mat_nspin_0->get_value(irow, icol) + mat_nspin_3->get_value(irow, icol); - upper_mat->get_value(2*irow+1, 2*icol+1) = mat_nspin_0->get_value(irow, icol) - mat_nspin_3->get_value(irow, icol); + upper_mat->get_value(2 * irow, 2 * icol) + = mat_nspin_0->get_value(irow, icol) + mat_nspin_3->get_value(irow, icol); + upper_mat->get_value(2 * irow + 1, 2 * icol + 1) + = mat_nspin_0->get_value(irow, icol) - mat_nspin_3->get_value(irow, icol); } } @@ -118,8 +120,12 @@ void Gint_k::transfer_pvpR(hamilt::HContainer>* hR, { for (int icol = 0; icol < mat_nspin_1->get_col_size(); ++icol) { - upper_mat->get_value(2*irow, 2*icol+1) = mat_nspin_1->get_value(irow, icol) + std::complex(0.0, 1.0) * mat_nspin_2->get_value(irow, icol); - upper_mat->get_value(2*irow+1, 2*icol) = mat_nspin_1->get_value(irow, icol) - std::complex(0.0, 1.0) * mat_nspin_2->get_value(irow, icol); + upper_mat->get_value(2 * irow, 2 * icol + 1) + = mat_nspin_1->get_value(irow, icol) + + std::complex(0.0, 1.0) * mat_nspin_2->get_value(irow, icol); + upper_mat->get_value(2 * irow + 1, 2 * icol) + = mat_nspin_1->get_value(irow, icol) + - std::complex(0.0, 1.0) * mat_nspin_2->get_value(irow, icol); } } } diff --git a/source/module_hamilt_lcao/module_gint/gint_k_sparse1.cpp b/source/module_hamilt_lcao/module_gint/gint_k_sparse1.cpp index cb1c02f5cd..1a0e216ed8 100644 --- a/source/module_hamilt_lcao/module_gint/gint_k_sparse1.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_k_sparse1.cpp @@ -1,15 +1,15 @@ #include "gint_k.h" #include "grid_technique.h" -#include "module_parameter/parameter.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/memory.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" -#include "module_base/ylm.h" #include "module_basis/module_ao/ORB_read.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/ylm.h" void Gint_k::distribute_pvdpR_sparseMatrix( const int current_spin, @@ -358,10 +358,10 @@ void Gint_k::cal_dvlocal_R_sparseMatrix(const int& current_spin, { const ModuleBase::Vector3 R = ap.get_R_index(ir); Abfs::Vector3_Order dR(R.x, R.y, R.z); - std::vector pvdpRx; - std::vector pvdpRy; - std::vector pvdpRz; - for(int i = 0; i < PARAM.inp.nspin; i++) + std::vector pvdpRx; + std::vector pvdpRy; + std::vector pvdpRz; + for (int i = 0; i < PARAM.inp.nspin; i++) { pvdpRx.push_back(pvdpRx_reduced[i].get_atom_pair(iap).get_pointer(ir)); pvdpRy.push_back(pvdpRy_reduced[i].get_atom_pair(iap).get_pointer(ir)); @@ -384,61 +384,49 @@ void Gint_k::cal_dvlocal_R_sparseMatrix(const int& current_spin, if (iw % 2 == 0 && iw2 % 2 == 0) { // spin = 0; - temp_value_complex - = std::complex(1.0, 0.0) * pvdpRx[0][iw_nowg] - + std::complex(1.0, 0.0) * pvdpRx[3][iw_nowg]; + temp_value_complex = std::complex(1.0, 0.0) * pvdpRx[0][iw_nowg] + + std::complex(1.0, 0.0) * pvdpRx[3][iw_nowg]; if (std::abs(temp_value_complex) > sparse_threshold) { - pvdpRx_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] - = temp_value_complex; + pvdpRx_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] = temp_value_complex; } - temp_value_complex - = std::complex(1.0, 0.0) * pvdpRy[0][iw_nowg] - + std::complex(1.0, 0.0) * pvdpRy[3][iw_nowg]; + temp_value_complex = std::complex(1.0, 0.0) * pvdpRy[0][iw_nowg] + + std::complex(1.0, 0.0) * pvdpRy[3][iw_nowg]; if (std::abs(temp_value_complex) > sparse_threshold) { - pvdpRy_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] - = temp_value_complex; + pvdpRy_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] = temp_value_complex; } - temp_value_complex - = std::complex(1.0, 0.0) * pvdpRz[0][iw_nowg] - + std::complex(1.0, 0.0) * pvdpRz[3][iw_nowg]; + temp_value_complex = std::complex(1.0, 0.0) * pvdpRz[0][iw_nowg] + + std::complex(1.0, 0.0) * pvdpRz[3][iw_nowg]; if (std::abs(temp_value_complex) > sparse_threshold) { - pvdpRz_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] - = temp_value_complex; + pvdpRz_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] = temp_value_complex; } } else if (iw % 2 == 1 && iw2 % 2 == 1) { // spin = 3; - temp_value_complex - = std::complex(1.0, 0.0) * pvdpRx[0][iw_nowg] - - std::complex(1.0, 0.0) * pvdpRx[3][iw_nowg]; + temp_value_complex = std::complex(1.0, 0.0) * pvdpRx[0][iw_nowg] + - std::complex(1.0, 0.0) * pvdpRx[3][iw_nowg]; if (std::abs(temp_value_complex) > sparse_threshold) { - pvdpRx_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] - = temp_value_complex; + pvdpRx_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] = temp_value_complex; } - temp_value_complex - = std::complex(1.0, 0.0) * pvdpRy[0][iw_nowg] - - std::complex(1.0, 0.0) * pvdpRy[3][iw_nowg]; + temp_value_complex = std::complex(1.0, 0.0) * pvdpRy[0][iw_nowg] + - std::complex(1.0, 0.0) * pvdpRy[3][iw_nowg]; if (std::abs(temp_value_complex) > sparse_threshold) { - pvdpRy_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] - = temp_value_complex; + pvdpRy_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] = temp_value_complex; } - temp_value_complex - = std::complex(1.0, 0.0) * pvdpRz[0][iw_nowg] - - std::complex(1.0, 0.0) * pvdpRz[3][iw_nowg]; + temp_value_complex = std::complex(1.0, 0.0) * pvdpRz[0][iw_nowg] + - std::complex(1.0, 0.0) * pvdpRz[3][iw_nowg]; if (std::abs(temp_value_complex) > sparse_threshold) { - pvdpRz_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] - = temp_value_complex; + pvdpRz_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] = temp_value_complex; } } else if (iw % 2 == 0 && iw2 % 2 == 1) @@ -451,28 +439,22 @@ void Gint_k::cal_dvlocal_R_sparseMatrix(const int& current_spin, else { temp_value_complex - = pvdpRx[1][iw_nowg] - - std::complex(0.0, 1.0) * pvdpRx[2][iw_nowg]; + = pvdpRx[1][iw_nowg] - std::complex(0.0, 1.0) * pvdpRx[2][iw_nowg]; if (std::abs(temp_value_complex) > sparse_threshold) { - pvdpRx_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] - = temp_value_complex; + pvdpRx_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] = temp_value_complex; } temp_value_complex - = pvdpRy[1][iw_nowg] - - std::complex(0.0, 1.0) * pvdpRy[2][iw_nowg]; + = pvdpRy[1][iw_nowg] - std::complex(0.0, 1.0) * pvdpRy[2][iw_nowg]; if (std::abs(temp_value_complex) > sparse_threshold) { - pvdpRy_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] - = temp_value_complex; + pvdpRy_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] = temp_value_complex; } temp_value_complex - = pvdpRz[1][iw_nowg] - - std::complex(0.0, 1.0) * pvdpRz[2][iw_nowg]; + = pvdpRz[1][iw_nowg] - std::complex(0.0, 1.0) * pvdpRz[2][iw_nowg]; if (std::abs(temp_value_complex) > sparse_threshold) { - pvdpRz_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] - = temp_value_complex; + pvdpRz_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] = temp_value_complex; } } } @@ -486,28 +468,22 @@ void Gint_k::cal_dvlocal_R_sparseMatrix(const int& current_spin, else { temp_value_complex - = pvdpRx[1][iw_nowg] - + std::complex(0.0, 1.0) * pvdpRx[2][iw_nowg]; + = pvdpRx[1][iw_nowg] + std::complex(0.0, 1.0) * pvdpRx[2][iw_nowg]; if (std::abs(temp_value_complex) > sparse_threshold) { - pvdpRx_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] - = temp_value_complex; + pvdpRx_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] = temp_value_complex; } temp_value_complex - = pvdpRy[1][iw_nowg] - + std::complex(0.0, 1.0) * pvdpRy[2][iw_nowg]; + = pvdpRy[1][iw_nowg] + std::complex(0.0, 1.0) * pvdpRy[2][iw_nowg]; if (std::abs(temp_value_complex) > sparse_threshold) { - pvdpRy_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] - = temp_value_complex; + pvdpRy_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] = temp_value_complex; } temp_value_complex - = pvdpRz[1][iw_nowg] - + std::complex(0.0, 1.0) * pvdpRz[2][iw_nowg]; + = pvdpRz[1][iw_nowg] + std::complex(0.0, 1.0) * pvdpRz[2][iw_nowg]; if (std::abs(temp_value_complex) > sparse_threshold) { - pvdpRz_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] - = temp_value_complex; + pvdpRz_soc_sparseMatrix[dR][start1 + iw][start2 + iw2] = temp_value_complex; } } } diff --git a/source/module_hamilt_lcao/module_gint/gint_rho.cpp b/source/module_hamilt_lcao/module_gint/gint_rho.cpp index 17ca9d78c1..90b9cfe231 100644 --- a/source/module_hamilt_lcao/module_gint/gint_rho.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_rho.cpp @@ -1,21 +1,21 @@ #include "gint_k.h" #include "gint_tools.h" #include "grid_technique.h" -#include "module_base/blas_connector.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/timer.h" -#include "module_base/array_pool.h" -#include "module_base/ylm.h" #include "module_basis/module_ao/ORB_read.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/array_pool.h" +#include "source_base/blas_connector.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/timer.h" +#include "source_base/ylm.h" void Gint::cal_meshball_rho(const int na_grid, - const int*const block_index, - const int*const vindex, - const double*const*const psir_ylm, - const double*const*const psir_DMR, - double*const rho) + const int* const block_index, + const int* const vindex, + const double* const* const psir_ylm, + const double* const* const psir_DMR, + double* const rho) { const int inc = 1; // sum over mu to get density on grid diff --git a/source/module_hamilt_lcao/module_gint/gint_rho_cpu_interface.cpp b/source/module_hamilt_lcao/module_gint/gint_rho_cpu_interface.cpp index e3663145cc..4bcd9c4097 100644 --- a/source/module_hamilt_lcao/module_gint/gint_rho_cpu_interface.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_rho_cpu_interface.cpp @@ -1,9 +1,10 @@ #include "gint.h" -#include "module_base/memory.h" #include "module_parameter/parameter.h" -#include "module_base/timer.h" +#include "source_base/memory.h" +#include "source_base/timer.h" -void Gint::gint_kernel_rho(Gint_inout* inout) { +void Gint::gint_kernel_rho(Gint_inout* inout) +{ ModuleBase::TITLE("Gint_interface", "cal_gint_rho"); ModuleBase::timer::tick("Gint_interface", "cal_gint_rho"); const int max_size = this->gridt->max_atom; @@ -11,187 +12,232 @@ void Gint::gint_kernel_rho(Gint_inout* inout) { const double delta_r = this->gridt->dr_uniform; #pragma omp parallel -{ - std::vector block_iw(max_size, 0); - std::vector block_index(max_size+1, 0); - std::vector block_size(max_size, 0); - std::vector vindex(this->bxyz, 0); -#pragma omp for schedule(dynamic) - for (int grid_index = 0; grid_index < this->nbxx; grid_index++) { - const int na_grid = this->gridt->how_many_atoms[grid_index]; - if (na_grid == 0) { - continue; - } - Gint_Tools::get_vindex(this->bxyz, - this->bx, - this->by, - this->bz, - this->nplane, - this->gridt->start_ind[grid_index], - ncyz, - vindex.data()); - // prepare block information - ModuleBase::Array_Pool cal_flag(this->bxyz,max_size); - Gint_Tools::get_block_info(*this->gridt, - this->bxyz, - na_grid, - grid_index, - block_iw.data(), - block_index.data(), - block_size.data(), - cal_flag.get_ptr_2D()); + std::vector block_iw(max_size, 0); + std::vector block_index(max_size + 1, 0); + std::vector block_size(max_size, 0); + std::vector vindex(this->bxyz, 0); +#pragma omp for schedule(dynamic) + for (int grid_index = 0; grid_index < this->nbxx; grid_index++) + { + const int na_grid = this->gridt->how_many_atoms[grid_index]; + if (na_grid == 0) + { + continue; + } + Gint_Tools::get_vindex(this->bxyz, + this->bx, + this->by, + this->bz, + this->nplane, + this->gridt->start_ind[grid_index], + ncyz, + vindex.data()); + // prepare block information + ModuleBase::Array_Pool cal_flag(this->bxyz, max_size); + Gint_Tools::get_block_info(*this->gridt, + this->bxyz, + na_grid, + grid_index, + block_iw.data(), + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D()); - // evaluate psi on grids - const int LD_pool = block_index[na_grid]; - ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); - Gint_Tools::cal_psir_ylm(*this->gridt, - this->bxyz, - na_grid, - grid_index, - delta_r, - block_index.data(), - block_size.data(), - cal_flag.get_ptr_2D(), - psir_ylm.get_ptr_2D()); + // evaluate psi on grids + const int LD_pool = block_index[na_grid]; + ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); + Gint_Tools::cal_psir_ylm(*this->gridt, + this->bxyz, + na_grid, + grid_index, + delta_r, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + psir_ylm.get_ptr_2D()); - for (int is = 0; is < inout->nspin_rho; ++is) - { - // psir_ylm_new = psir_func(psir_ylm) - // psir_func==nullptr means psir_ylm_new=psir_ylm - const ModuleBase::Array_Pool &psir_ylm_1 = (!this->psir_func_1) ? psir_ylm : this->psir_func_1(psir_ylm, *this->gridt, grid_index, is, block_iw, block_size, block_index, cal_flag); - const ModuleBase::Array_Pool &psir_ylm_2 = (!this->psir_func_2) ? psir_ylm : this->psir_func_2(psir_ylm, *this->gridt, grid_index, is, block_iw, block_size, block_index, cal_flag); + for (int is = 0; is < inout->nspin_rho; ++is) + { + // psir_ylm_new = psir_func(psir_ylm) + // psir_func==nullptr means psir_ylm_new=psir_ylm + const ModuleBase::Array_Pool& psir_ylm_1 = (!this->psir_func_1) + ? psir_ylm + : this->psir_func_1(psir_ylm, + *this->gridt, + grid_index, + is, + block_iw, + block_size, + block_index, + cal_flag); + const ModuleBase::Array_Pool& psir_ylm_2 = (!this->psir_func_2) + ? psir_ylm + : this->psir_func_2(psir_ylm, + *this->gridt, + grid_index, + is, + block_iw, + block_size, + block_index, + cal_flag); - ModuleBase::Array_Pool psir_DM(this->bxyz, LD_pool); - ModuleBase::GlobalFunc::ZEROS(psir_DM.get_ptr_1D(), this->bxyz * LD_pool); + ModuleBase::Array_Pool psir_DM(this->bxyz, LD_pool); + ModuleBase::GlobalFunc::ZEROS(psir_DM.get_ptr_1D(), this->bxyz * LD_pool); - // calculating g_mu(r) = sum_nu rho_mu,nu psi_nu(r) - Gint_Tools::mult_psi_DMR(*this->gridt, - this->bxyz, - LD_pool, - grid_index, - na_grid, - block_index.data(), - block_size.data(), - cal_flag.get_ptr_2D(), - psir_ylm_1.get_ptr_2D(), - psir_DM.get_ptr_2D(), - this->DMRGint[is], - inout->if_symm); + // calculating g_mu(r) = sum_nu rho_mu,nu psi_nu(r) + Gint_Tools::mult_psi_DMR(*this->gridt, + this->bxyz, + LD_pool, + grid_index, + na_grid, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + psir_ylm_1.get_ptr_2D(), + psir_DM.get_ptr_2D(), + this->DMRGint[is], + inout->if_symm); - // do sum_mu g_mu(r)psi_mu(r) to get electron density on grid - this->cal_meshball_rho(na_grid, block_index.data(), vindex.data(), psir_ylm_2.get_ptr_2D(), psir_DM.get_ptr_2D(), inout->rho[is]); + // do sum_mu g_mu(r)psi_mu(r) to get electron density on grid + this->cal_meshball_rho(na_grid, + block_index.data(), + vindex.data(), + psir_ylm_2.get_ptr_2D(), + psir_DM.get_ptr_2D(), + inout->rho[is]); + } } } -} ModuleBase::TITLE("Gint_interface", "cal_gint_rho"); ModuleBase::timer::tick("Gint_interface", "cal_gint_rho"); } -void Gint::gint_kernel_tau(Gint_inout* inout) { +void Gint::gint_kernel_tau(Gint_inout* inout) +{ ModuleBase::TITLE("Gint_interface", "cal_gint_tau"); ModuleBase::timer::tick("Gint_interface", "cal_gint_tau"); const int max_size = this->gridt->max_atom; const int ncyz = this->ny * this->nplane; const double delta_r = this->gridt->dr_uniform; - #pragma omp parallel -{ - std::vector block_iw(max_size, 0); - std::vector block_index(max_size+1, 0); - std::vector block_size(max_size, 0); - std::vector vindex(bxyz, 0); -#pragma omp for schedule(dynamic) - for (int grid_index = 0; grid_index < this->nbxx; grid_index++) { - const int na_grid = this->gridt->how_many_atoms[grid_index]; - if (na_grid == 0) { - continue; - } - Gint_Tools::get_vindex(this->bxyz, - this->bx, - this->by, - this->bz, - this->nplane, - this->gridt->start_ind[grid_index], - ncyz, - vindex.data()); - //prepare block information - ModuleBase::Array_Pool cal_flag(this->bxyz,max_size); - Gint_Tools::get_block_info(*this->gridt, this->bxyz, na_grid, grid_index, - block_iw.data(), block_index.data(), block_size.data(), cal_flag.get_ptr_2D()); + std::vector block_iw(max_size, 0); + std::vector block_index(max_size + 1, 0); + std::vector block_size(max_size, 0); + std::vector vindex(bxyz, 0); +#pragma omp for schedule(dynamic) + for (int grid_index = 0; grid_index < this->nbxx; grid_index++) + { + const int na_grid = this->gridt->how_many_atoms[grid_index]; + if (na_grid == 0) + { + continue; + } + Gint_Tools::get_vindex(this->bxyz, + this->bx, + this->by, + this->bz, + this->nplane, + this->gridt->start_ind[grid_index], + ncyz, + vindex.data()); + // prepare block information + ModuleBase::Array_Pool cal_flag(this->bxyz, max_size); + Gint_Tools::get_block_info(*this->gridt, + this->bxyz, + na_grid, + grid_index, + block_iw.data(), + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D()); - //evaluate psi and dpsi on grids - const int LD_pool = block_index[na_grid]; - ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_x(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_y(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_z(this->bxyz, LD_pool); + // evaluate psi and dpsi on grids + const int LD_pool = block_index[na_grid]; + ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_x(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_y(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_z(this->bxyz, LD_pool); - Gint_Tools::cal_dpsir_ylm(*this->gridt, - this->bxyz, na_grid, grid_index, delta_r, - block_index.data(), block_size.data(), - cal_flag.get_ptr_2D(), - psir_ylm.get_ptr_2D(), - dpsir_ylm_x.get_ptr_2D(), - dpsir_ylm_y.get_ptr_2D(), - dpsir_ylm_z.get_ptr_2D()); + Gint_Tools::cal_dpsir_ylm(*this->gridt, + this->bxyz, + na_grid, + grid_index, + delta_r, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + psir_ylm.get_ptr_2D(), + dpsir_ylm_x.get_ptr_2D(), + dpsir_ylm_y.get_ptr_2D(), + dpsir_ylm_z.get_ptr_2D()); - for(int is=0; is dpsix_DM(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsiy_DM(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsiz_DM(this->bxyz, LD_pool); - ModuleBase::GlobalFunc::ZEROS(dpsix_DM.get_ptr_1D(), this->bxyz*LD_pool); - ModuleBase::GlobalFunc::ZEROS(dpsiy_DM.get_ptr_1D(), this->bxyz*LD_pool); - ModuleBase::GlobalFunc::ZEROS(dpsiz_DM.get_ptr_1D(), this->bxyz*LD_pool); + for (int is = 0; is < PARAM.inp.nspin; ++is) + { + ModuleBase::Array_Pool dpsix_DM(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsiy_DM(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsiz_DM(this->bxyz, LD_pool); + ModuleBase::GlobalFunc::ZEROS(dpsix_DM.get_ptr_1D(), this->bxyz * LD_pool); + ModuleBase::GlobalFunc::ZEROS(dpsiy_DM.get_ptr_1D(), this->bxyz * LD_pool); + ModuleBase::GlobalFunc::ZEROS(dpsiz_DM.get_ptr_1D(), this->bxyz * LD_pool); - //calculating g_i,mu(r) = sum_nu rho_mu,nu d/dx_i psi_nu(r), x_i=x,y,z - Gint_Tools::mult_psi_DMR( - *this->gridt, this->bxyz, - LD_pool, - grid_index, na_grid, - block_index.data(), block_size.data(), - cal_flag.get_ptr_2D(), - dpsir_ylm_x.get_ptr_2D(), - dpsix_DM.get_ptr_2D(), - this->DMRGint[is], - true); - Gint_Tools::mult_psi_DMR( - *this->gridt, this->bxyz, - LD_pool, - grid_index, na_grid, - block_index.data(), block_size.data(), - cal_flag.get_ptr_2D(), - dpsir_ylm_y.get_ptr_2D(), - dpsiy_DM.get_ptr_2D(), - this->DMRGint[is], - true); - Gint_Tools::mult_psi_DMR( - *this->gridt, this->bxyz, - LD_pool, - grid_index, na_grid, - block_index.data(), block_size.data(), - cal_flag.get_ptr_2D(), - dpsir_ylm_z.get_ptr_2D(), - dpsiz_DM.get_ptr_2D(), - this->DMRGint[is], - true); + // calculating g_i,mu(r) = sum_nu rho_mu,nu d/dx_i psi_nu(r), x_i=x,y,z + Gint_Tools::mult_psi_DMR(*this->gridt, + this->bxyz, + LD_pool, + grid_index, + na_grid, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + dpsir_ylm_x.get_ptr_2D(), + dpsix_DM.get_ptr_2D(), + this->DMRGint[is], + true); + Gint_Tools::mult_psi_DMR(*this->gridt, + this->bxyz, + LD_pool, + grid_index, + na_grid, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + dpsir_ylm_y.get_ptr_2D(), + dpsiy_DM.get_ptr_2D(), + this->DMRGint[is], + true); + Gint_Tools::mult_psi_DMR(*this->gridt, + this->bxyz, + LD_pool, + grid_index, + na_grid, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + dpsir_ylm_z.get_ptr_2D(), + dpsiz_DM.get_ptr_2D(), + this->DMRGint[is], + true); - //do sum_i,mu g_i,mu(r) * d/dx_i psi_mu(r) to get kinetic energy density on grid - if(inout->job==Gint_Tools::job_type::tau) - { - this->cal_meshball_tau( - na_grid, block_index.data(), - vindex.data(), - dpsir_ylm_x.get_ptr_2D(), dpsir_ylm_y.get_ptr_2D(), dpsir_ylm_z.get_ptr_2D(), - dpsix_DM.get_ptr_2D(), dpsiy_DM.get_ptr_2D(), dpsiz_DM.get_ptr_2D(), - inout->rho[is]); + // do sum_i,mu g_i,mu(r) * d/dx_i psi_mu(r) to get kinetic energy density on grid + if (inout->job == Gint_Tools::job_type::tau) + { + this->cal_meshball_tau(na_grid, + block_index.data(), + vindex.data(), + dpsir_ylm_x.get_ptr_2D(), + dpsir_ylm_y.get_ptr_2D(), + dpsir_ylm_z.get_ptr_2D(), + dpsix_DM.get_ptr_2D(), + dpsiy_DM.get_ptr_2D(), + dpsiz_DM.get_ptr_2D(), + inout->rho[is]); + } } } } -} ModuleBase::TITLE("Gint_interface", "cal_gint_tau"); ModuleBase::timer::tick("Gint_interface", "cal_gint_tau"); } diff --git a/source/module_hamilt_lcao/module_gint/gint_rho_gpu.cu b/source/module_hamilt_lcao/module_gint/gint_rho_gpu.cu index fc5fba03c2..43c556eb8f 100644 --- a/source/module_hamilt_lcao/module_gint/gint_rho_gpu.cu +++ b/source/module_hamilt_lcao/module_gint/gint_rho_gpu.cu @@ -1,8 +1,8 @@ -#include "kernels/cuda/cuda_tools.cuh" -#include "module_base/ylm.h" #include "gint_rho_gpu.h" #include "gint_tools.h" +#include "kernels/cuda/cuda_tools.cuh" #include "kernels/cuda/gint_rho.cuh" +#include "source_base/ylm.h" #ifdef _OPENMP #include @@ -12,18 +12,18 @@ namespace GintKernel { void gint_rho_gpu(const hamilt::HContainer* dm, - const double* ylmcoef_now, - const double dr, - const double* rcut, - const Grid_Technique& gridt, - const UnitCell& ucell, - double* rho) + const double* ylmcoef_now, + const double dr, + const double* rcut, + const Grid_Technique& gridt, + const UnitCell& ucell, + double* rho) { checkCuda(cudaSetDevice(gridt.dev_id)); // checkCuda(cudaSetDeviceFlags(cudaDeviceScheduleBlockingSync)); const int nbzp = gridt.nbzp; - const int nczp =nbzp * gridt.bz; + const int nczp = nbzp * gridt.bz; const int num_mcell_on_proc = nczp * gridt.ncx * gridt.ncy; const int lgd = gridt.lgd; const int max_atom = gridt.max_atom; @@ -60,7 +60,7 @@ void gint_rho_gpu(const hamilt::HContainer* dm, Cuda_Mem_Wrapper gemm_A(max_atompair_per_z, num_streams, true); Cuda_Mem_Wrapper gemm_B(max_atompair_per_z, num_streams, true); Cuda_Mem_Wrapper gemm_C(max_atompair_per_z, num_streams, true); - + Cuda_Mem_Wrapper rho_g(num_mcell_on_proc, 1, false); Cuda_Mem_Wrapper dot_product(nbzp * gridt.bxyz, num_streams, true); @@ -73,157 +73,152 @@ void gint_rho_gpu(const hamilt::HContainer* dm, // calculate the rho for every nbzp bigcells #ifdef _OPENMP -const int max_thread_num = std::min(omp_get_max_threads(), num_streams); + const int max_thread_num = std::min(omp_get_max_threads(), num_streams); #endif #pragma omp parallel num_threads(max_thread_num) -{ + { #ifdef _OPENMP - const int tid = omp_get_thread_num(); - const int num_threads = omp_get_num_threads(); - const int sid_start = tid * num_streams / num_threads; - const int thread_num_streams = tid == num_threads - 1 ? num_streams - sid_start : num_streams / num_threads; + const int tid = omp_get_thread_num(); + const int num_threads = omp_get_num_threads(); + const int sid_start = tid * num_streams / num_threads; + const int thread_num_streams = tid == num_threads - 1 ? num_streams - sid_start : num_streams / num_threads; #else - const int sid_start = 0; - const int thread_num_streams = num_streams; + const int sid_start = 0; + const int thread_num_streams = num_streams; #endif #pragma omp for collapse(2) schedule(dynamic) - for (int i = 0; i < gridt.nbx; i++) - { - for (int j = 0; j < gridt.nby; j++) + for (int i = 0; i < gridt.nbx; i++) { - // 20240620 Note that it must be set again here because - // cuda's device is not safe in a multi-threaded environment. - - checkCuda(cudaSetDevice(gridt.dev_id)); - - const int sid = (i * gridt.nby + j) % thread_num_streams + sid_start; - checkCuda(cudaEventSynchronize(events[sid])); - - int max_m = 0; - int max_n = 0; - int atom_pair_num = 0; - int atoms_per_z = 0; - const int grid_index_ij = i * gridt.nby * nbzp + j * nbzp; - - // generate GPU tasks, including the calculation of psir, matrix - // multiplication, and dot product - gtask_rho(gridt, - grid_index_ij, - ucell, - dr_part.get_host_pointer(sid), - atoms_type.get_host_pointer(sid), - atoms_num_info.get_host_pointer(sid), - atoms_per_z); - - alloc_mult_dot_rho( - dm, - gridt, - ucell, - grid_index_ij, - max_atom, - lgd, - nczp, - atoms_num_info.get_host_pointer(sid), - psi.get_device_pointer(sid), - psi_dm.get_device_pointer(sid), - dm_matrix.get_device_pointer(), - gemm_alpha.get_host_pointer(sid), - gemm_m.get_host_pointer(sid), - gemm_n.get_host_pointer(sid), - gemm_k.get_host_pointer(sid), - gemm_lda.get_host_pointer(sid), - gemm_ldb.get_host_pointer(sid), - gemm_ldc.get_host_pointer(sid), - gemm_A.get_host_pointer(sid), - gemm_B.get_host_pointer(sid), - gemm_C.get_host_pointer(sid), - max_m, - max_n, - atom_pair_num, - rho_g.get_device_pointer(), - dot_product.get_host_pointer(sid)); - - dr_part.copy_host_to_device_async(streams[sid], sid, atoms_per_z * 3); - atoms_type.copy_host_to_device_async(streams[sid], sid, atoms_per_z); - atoms_num_info.copy_host_to_device_async(streams[sid], sid); - - gemm_alpha.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_m.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_n.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_k.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_lda.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_ldb.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_ldc.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_A.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_B.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_C.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - dot_product.copy_host_to_device_async(streams[sid], sid); - checkCuda(cudaEventRecord(events[sid], streams[sid])); - - psi.memset_device_async(streams[sid], sid, 0); - psi_dm.memset_device_async(streams[sid], sid, 0); - - // Launching kernel to calculate psi - dim3 grid_psi(nbzp, gridt.bxyz); - dim3 block_psi(64); - get_psi<<>>( - gridt.ylmcoef_g, - dr, - gridt.bxyz, - ucell.nwmax, - max_atom, - gridt.atom_nwl_g, - gridt.atom_new_g, - gridt.atom_ylm_g, - gridt.atom_nw_g, - gridt.rcut_g, - gridt.nr_max, - gridt.psi_u_g, - gridt.mcell_pos_g, - dr_part.get_device_pointer(sid), - atoms_type.get_device_pointer(sid), - atoms_num_info.get_device_pointer(sid), - psi.get_device_pointer(sid)); - checkCudaLastError(); - - // Performing matrix multiplication alpha * mat_dm * mat_psir - gridt.fastest_matrix_mul(max_m, - max_n, - gemm_m.get_device_pointer(sid), - gemm_n.get_device_pointer(sid), - gemm_k.get_device_pointer(sid), - gemm_A.get_device_pointer(sid), - gemm_lda.get_device_pointer(sid), - gemm_B.get_device_pointer(sid), - gemm_ldb.get_device_pointer(sid), - gemm_C.get_device_pointer(sid), - gemm_ldc.get_device_pointer(sid), - atom_pair_num, - streams[sid], - gemm_alpha.get_device_pointer(sid)); - checkCudaLastError(); - - // Launching kernel to calculate dot product psir * psir_dm - // if warpSize is not eauql to 32, the psir_dot kernel should be modified - dim3 grid_dot(nbzp, gridt.bxyz); - dim3 block_dot(64); - psir_dot<<>>( - gridt.bxyz, - ucell.nwmax, - atoms_num_info.get_device_pointer(sid), - psi.get_device_pointer(sid), - psi_dm.get_device_pointer(sid), - dot_product.get_device_pointer(sid)); - checkCudaLastError(); + for (int j = 0; j < gridt.nby; j++) + { + // 20240620 Note that it must be set again here because + // cuda's device is not safe in a multi-threaded environment. + + checkCuda(cudaSetDevice(gridt.dev_id)); + + const int sid = (i * gridt.nby + j) % thread_num_streams + sid_start; + checkCuda(cudaEventSynchronize(events[sid])); + + int max_m = 0; + int max_n = 0; + int atom_pair_num = 0; + int atoms_per_z = 0; + const int grid_index_ij = i * gridt.nby * nbzp + j * nbzp; + + // generate GPU tasks, including the calculation of psir, matrix + // multiplication, and dot product + gtask_rho(gridt, + grid_index_ij, + ucell, + dr_part.get_host_pointer(sid), + atoms_type.get_host_pointer(sid), + atoms_num_info.get_host_pointer(sid), + atoms_per_z); + + alloc_mult_dot_rho(dm, + gridt, + ucell, + grid_index_ij, + max_atom, + lgd, + nczp, + atoms_num_info.get_host_pointer(sid), + psi.get_device_pointer(sid), + psi_dm.get_device_pointer(sid), + dm_matrix.get_device_pointer(), + gemm_alpha.get_host_pointer(sid), + gemm_m.get_host_pointer(sid), + gemm_n.get_host_pointer(sid), + gemm_k.get_host_pointer(sid), + gemm_lda.get_host_pointer(sid), + gemm_ldb.get_host_pointer(sid), + gemm_ldc.get_host_pointer(sid), + gemm_A.get_host_pointer(sid), + gemm_B.get_host_pointer(sid), + gemm_C.get_host_pointer(sid), + max_m, + max_n, + atom_pair_num, + rho_g.get_device_pointer(), + dot_product.get_host_pointer(sid)); + + dr_part.copy_host_to_device_async(streams[sid], sid, atoms_per_z * 3); + atoms_type.copy_host_to_device_async(streams[sid], sid, atoms_per_z); + atoms_num_info.copy_host_to_device_async(streams[sid], sid); + + gemm_alpha.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_m.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_n.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_k.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_lda.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_ldb.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_ldc.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_A.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_B.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_C.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + dot_product.copy_host_to_device_async(streams[sid], sid); + checkCuda(cudaEventRecord(events[sid], streams[sid])); + + psi.memset_device_async(streams[sid], sid, 0); + psi_dm.memset_device_async(streams[sid], sid, 0); + + // Launching kernel to calculate psi + dim3 grid_psi(nbzp, gridt.bxyz); + dim3 block_psi(64); + get_psi<<>>(gridt.ylmcoef_g, + dr, + gridt.bxyz, + ucell.nwmax, + max_atom, + gridt.atom_nwl_g, + gridt.atom_new_g, + gridt.atom_ylm_g, + gridt.atom_nw_g, + gridt.rcut_g, + gridt.nr_max, + gridt.psi_u_g, + gridt.mcell_pos_g, + dr_part.get_device_pointer(sid), + atoms_type.get_device_pointer(sid), + atoms_num_info.get_device_pointer(sid), + psi.get_device_pointer(sid)); + checkCudaLastError(); + + // Performing matrix multiplication alpha * mat_dm * mat_psir + gridt.fastest_matrix_mul(max_m, + max_n, + gemm_m.get_device_pointer(sid), + gemm_n.get_device_pointer(sid), + gemm_k.get_device_pointer(sid), + gemm_A.get_device_pointer(sid), + gemm_lda.get_device_pointer(sid), + gemm_B.get_device_pointer(sid), + gemm_ldb.get_device_pointer(sid), + gemm_C.get_device_pointer(sid), + gemm_ldc.get_device_pointer(sid), + atom_pair_num, + streams[sid], + gemm_alpha.get_device_pointer(sid)); + checkCudaLastError(); + + // Launching kernel to calculate dot product psir * psir_dm + // if warpSize is not eauql to 32, the psir_dot kernel should be modified + dim3 grid_dot(nbzp, gridt.bxyz); + dim3 block_dot(64); + psir_dot<<>>( + gridt.bxyz, + ucell.nwmax, + atoms_num_info.get_device_pointer(sid), + psi.get_device_pointer(sid), + psi_dm.get_device_pointer(sid), + dot_product.get_device_pointer(sid)); + checkCudaLastError(); + } } } -} // Copy rho from device to host - checkCuda(cudaMemcpy(rho, - rho_g.get_device_pointer(), - num_mcell_on_proc * sizeof(double), - cudaMemcpyDeviceToHost)); + checkCuda(cudaMemcpy(rho, rho_g.get_device_pointer(), num_mcell_on_proc * sizeof(double), cudaMemcpyDeviceToHost)); for (int i = 0; i < num_streams; i++) { diff --git a/source/module_hamilt_lcao/module_gint/gint_tau.cpp b/source/module_hamilt_lcao/module_gint/gint_tau.cpp index 09308c6f93..3350ded538 100644 --- a/source/module_hamilt_lcao/module_gint/gint_tau.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_tau.cpp @@ -1,38 +1,36 @@ -#include "module_base/global_function.h" -#include "module_base/global_variable.h" #include "gint_k.h" -#include "module_basis/module_ao/ORB_read.h" -#include "grid_technique.h" -#include "module_base/ylm.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/blas_connector.h" -#include "module_base/timer.h" -#include "module_base/array_pool.h" #include "gint_tools.h" -#include "module_base/memory.h" +#include "grid_technique.h" +#include "module_basis/module_ao/ORB_read.h" #include "module_hamilt_lcao/module_gint/grid_technique.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/array_pool.h" +#include "source_base/blas_connector.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" +#include "source_base/timer.h" +#include "source_base/ylm.h" - -void Gint::cal_meshball_tau( - const int na_grid, - int* block_index, - int* vindex, - double** dpsix, - double** dpsiy, - double** dpsiz, - double** dpsix_dm, - double** dpsiy_dm, - double** dpsiz_dm, - double* rho) -{ - const int inc = 1; - // sum over mu to get density on grid - for(int ib=0; ibbxyz; ++ib) - { - double rx=ddot_(&block_index[na_grid], dpsix[ib], &inc, dpsix_dm[ib], &inc); - double ry=ddot_(&block_index[na_grid], dpsiy[ib], &inc, dpsiy_dm[ib], &inc); - double rz=ddot_(&block_index[na_grid], dpsiz[ib], &inc, dpsiz_dm[ib], &inc); - const int grid = vindex[ib]; - rho[ grid ] += rx + ry + rz; - } +void Gint::cal_meshball_tau(const int na_grid, + int* block_index, + int* vindex, + double** dpsix, + double** dpsiy, + double** dpsiz, + double** dpsix_dm, + double** dpsiy_dm, + double** dpsiz_dm, + double* rho) +{ + const int inc = 1; + // sum over mu to get density on grid + for (int ib = 0; ib < this->bxyz; ++ib) + { + double rx = ddot_(&block_index[na_grid], dpsix[ib], &inc, dpsix_dm[ib], &inc); + double ry = ddot_(&block_index[na_grid], dpsiy[ib], &inc, dpsiy_dm[ib], &inc); + double rz = ddot_(&block_index[na_grid], dpsiz[ib], &inc, dpsiz_dm[ib], &inc); + const int grid = vindex[ib]; + rho[grid] += rx + ry + rz; + } } \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_gint/gint_tools.cpp b/source/module_hamilt_lcao/module_gint/gint_tools.cpp index 4979947505..6177bb08a3 100644 --- a/source/module_hamilt_lcao/module_gint/gint_tools.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_tools.cpp @@ -1,113 +1,126 @@ //========================================================= -//REFACTOR : Peize Lin, 2021.06.28 +// REFACTOR : Peize Lin, 2021.06.28 //========================================================= #include "gint_tools.h" -#include -#include // for std::pair - -#include "module_base/timer.h" -#include "module_base/ylm.h" -#include "module_base/array_pool.h" #include "module_basis/module_ao/ORB_read.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/array_pool.h" +#include "source_base/timer.h" +#include "source_base/ylm.h" + +#include +#include // for std::pair -namespace Gint_Tools{ -void get_vindex(const int bxyz, const int bx, const int by, const int bz, - const int nplane, const int start_ind, - const int ncyz,int* vindex) +namespace Gint_Tools +{ +void get_vindex(const int bxyz, + const int bx, + const int by, + const int bz, + const int nplane, + const int start_ind, + const int ncyz, + int* vindex) { int bindex = 0; - for(int ii=0; ii vindex(bxyz, 0); + Gint_Tools::get_vindex(bxyz, bx, by, bz, nplane, start_ind, ncyz, vindex.data()); + for (int ib = 0; ib < bxyz; ib++) + { + vldr3[ib] = vlocal[vindex[ib]] * dv; + } } - // here vindex refers to local potentials - - // extract the local potentials. - void get_gint_vldr3( - double* vldr3, - const double* const vlocal, // vlocal[ir] - const int bxyz, - const int bx, - const int by, - const int bz, - const int nplane, - const int start_ind, - const int ncyz, - const double dv) - { - // set the index for obtaining local potentials - std::vector vindex(bxyz,0); - Gint_Tools::get_vindex(bxyz, bx, by, bz, nplane, start_ind, ncyz,vindex.data()); - for(int ib=0; ib gt.rcuts[it] - 1.0e-10) { - cal_flag[ib][id] = false; - } else { - cal_flag[ib][id] = true; - } - } // end ib - } - } +void get_block_info(const Grid_Technique& gt, + const int bxyz, + const int na_grid, + const int grid_index, + int* block_iw, + int* block_index, + int* block_size, + bool** cal_flag) +{ + const UnitCell& ucell = *gt.ucell; + block_index[0] = 0; + for (int id = 0; id < na_grid; id++) + { + const int mcell_index = gt.bcell_start[grid_index] + id; + const int iat = gt.which_atom[mcell_index]; // index of atom + const int it = ucell.iat2it[iat]; // index of atom type + const int ia = ucell.iat2ia[iat]; // index of atoms within each type + const int start = ucell.itiaiw2iwt(it, ia, 0); // the index of the first wave function for atom (it,ia) + block_iw[id] = gt.trace_lo[start]; + block_index[id + 1] = block_index[id] + ucell.atoms[it].nw; + block_size[id] = ucell.atoms[it].nw; + const int imcell = gt.which_bigcell[mcell_index]; + const double mt[3] = {gt.meshball_positions[imcell][0] - gt.tau_in_bigcell[iat][0], + gt.meshball_positions[imcell][1] - gt.tau_in_bigcell[iat][1], + gt.meshball_positions[imcell][2] - gt.tau_in_bigcell[iat][2]}; + + for (int ib = 0; ib < bxyz; ib++) + { + // meshcell_pos: z is the fastest + const double dr[3] + = {gt.meshcell_pos[ib][0] + mt[0], gt.meshcell_pos[ib][1] + mt[1], gt.meshcell_pos[ib][2] + mt[2]}; + const double distance + = std::sqrt(dr[0] * dr[0] + dr[1] * dr[1] + dr[2] * dr[2]); // distance between atom and grid + + if (distance > gt.rcuts[it] - 1.0e-10) + { + cal_flag[ib][id] = false; + } + else + { + cal_flag[ib][id] = true; + } + } // end ib + } +} void cal_dpsirr_ylm( - const Grid_Technique& gt, const int bxyz, + const Grid_Technique& gt, + const int bxyz, const int na_grid, // number of atoms on this grid const int grid_index, // 1d index of FFT index (i,j,k) const int* const block_index, // block_index[na_grid+1], count total number of atomis orbitals const int* const block_size, // block_size[na_grid], number of columns of a band const bool* const* const cal_flag, // cal_flag[bxyz][na_grid], whether the atom-grid distance is larger than cutoff - double* const* const dpsir_ylm_x, double* const* const dpsir_ylm_y, double* const* const dpsir_ylm_z, + double* const* const dpsir_ylm_x, + double* const* const dpsir_ylm_y, + double* const* const dpsir_ylm_z, double* const* const dpsirr_ylm) { ModuleBase::timer::tick("Gint_Tools", "cal_dpsirr_ylm"); @@ -120,115 +133,110 @@ void cal_dpsirr_ylm( const int it = ucell.iat2it[iat]; Atom* atom = &ucell.atoms[it]; - const double mt[3]={ - gt.meshball_positions[imcell][0] - gt.tau_in_bigcell[iat][0], - gt.meshball_positions[imcell][1] - gt.tau_in_bigcell[iat][1], - gt.meshball_positions[imcell][2] - gt.tau_in_bigcell[iat][2]}; - - for(int ib=0; ibnw; ++iw) - { - p_dpsirr[iw * 6] = p_dpsi_x[iw]*dr[0]; - p_dpsirr[iw * 6 + 1] = p_dpsi_x[iw]*dr[1]; - p_dpsirr[iw * 6 + 2] = p_dpsi_x[iw]*dr[2]; - p_dpsirr[iw * 6 + 3] = p_dpsi_y[iw]*dr[1]; - p_dpsirr[iw * 6 + 4] = p_dpsi_y[iw]*dr[2]; - p_dpsirr[iw * 6 + 5] = p_dpsi_z[iw]*dr[2]; - }//iw - }//else - } - } - ModuleBase::timer::tick("Gint_Tools", "cal_dpsirr_ylm"); - return; - } - - // atomic basis sets - // psir_vlbr3[bxyz][LD_pool] - ModuleBase::Array_Pool get_psir_vlbr3( - const int bxyz, - const int na_grid, // how many atoms on this (i,j,k) grid - const int LD_pool, - const int*const block_index, // block_index[na_grid+1], count total number of atomis orbitals - const bool*const*const cal_flag, // cal_flag[bxyz][na_grid], whether the atom-grid distance is larger than cutoff - const double*const vldr3, // vldr3[bxyz] - const double*const*const psir_ylm) // psir_ylm[bxyz][LD_pool] - { - ModuleBase::Array_Pool psir_vlbr3(bxyz, LD_pool); - for(int ib=0; ib cal_info(const int bxyz, - const int ia1, - const int ia2, - const bool* const* const cal_flag) + const double mt[3] = {gt.meshball_positions[imcell][0] - gt.tau_in_bigcell[iat][0], + gt.meshball_positions[imcell][1] - gt.tau_in_bigcell[iat][1], + gt.meshball_positions[imcell][2] - gt.tau_in_bigcell[iat][2]}; + + for (int ib = 0; ib < bxyz; ib++) + { + double* const p_dpsi_x = &dpsir_ylm_x[ib][block_index[id]]; + double* const p_dpsi_y = &dpsir_ylm_y[ib][block_index[id]]; + double* const p_dpsi_z = &dpsir_ylm_z[ib][block_index[id]]; + double* const p_dpsirr = &dpsirr_ylm[ib][block_index[id] * 6]; + if (!cal_flag[ib][id]) + { + ModuleBase::GlobalFunc::ZEROS(p_dpsirr, block_size[id] * 6); + } + else + { + const double dr[3] = {// vectors between atom and grid + gt.meshcell_pos[ib][0] + mt[0], + gt.meshcell_pos[ib][1] + mt[1], + gt.meshcell_pos[ib][2] + mt[2]}; + + for (int iw = 0; iw < atom->nw; ++iw) + { + p_dpsirr[iw * 6] = p_dpsi_x[iw] * dr[0]; + p_dpsirr[iw * 6 + 1] = p_dpsi_x[iw] * dr[1]; + p_dpsirr[iw * 6 + 2] = p_dpsi_x[iw] * dr[2]; + p_dpsirr[iw * 6 + 3] = p_dpsi_y[iw] * dr[1]; + p_dpsirr[iw * 6 + 4] = p_dpsi_y[iw] * dr[2]; + p_dpsirr[iw * 6 + 5] = p_dpsi_z[iw] * dr[2]; + } // iw + } // else + } + } + ModuleBase::timer::tick("Gint_Tools", "cal_dpsirr_ylm"); + return; +} + +// atomic basis sets +// psir_vlbr3[bxyz][LD_pool] +ModuleBase::Array_Pool get_psir_vlbr3( + const int bxyz, + const int na_grid, // how many atoms on this (i,j,k) grid + const int LD_pool, + const int* const block_index, // block_index[na_grid+1], count total number of atomis orbitals + const bool* const* const cal_flag, // cal_flag[bxyz][na_grid], whether the atom-grid distance is larger than cutoff + const double* const vldr3, // vldr3[bxyz] + const double* const* const psir_ylm) // psir_ylm[bxyz][LD_pool] { - int ib_start = bxyz; - int ib_end = 0; - int ib_length = 0; - for(int ib=0; ib=0; --ib) - { - if(cal_flag[ib][ia1] && cal_flag[ib][ia2]) - { - ib_end = ib; - break; - } - } - } - - ib_length = ib_end - ib_start + 1; - return std::make_pair(ib_start, ib_length); + ModuleBase::Array_Pool psir_vlbr3(bxyz, LD_pool); + for (int ib = 0; ib < bxyz; ++ib) + { + for (int ia = 0; ia < na_grid; ++ia) + { + if (cal_flag[ib][ia]) + { + for (int i = block_index[ia]; i < block_index[ia + 1]; ++i) + { + psir_vlbr3[ib][i] = psir_ylm[ib][i] * vldr3[ib]; + } + } + else + { + for (int i = block_index[ia]; i < block_index[ia + 1]; ++i) + { + psir_vlbr3[ib][i] = 0; + } + } + } + } + return psir_vlbr3; +} + +std::pair cal_info(const int bxyz, const int ia1, const int ia2, const bool* const* const cal_flag) +{ + int ib_start = bxyz; + int ib_end = 0; + int ib_length = 0; + for (int ib = 0; ib < bxyz; ++ib) + { + if (cal_flag[ib][ia1] && cal_flag[ib][ia2]) + { + ib_start = ib; + break; + } + } + + if (ib_start == bxyz) + { + return std::make_pair(bxyz, 0); + } + else + { + for (int ib = bxyz - 1; ib >= 0; --ib) + { + if (cal_flag[ib][ia1] && cal_flag[ib][ia2]) + { + ib_end = ib; + break; + } + } + } + + ib_length = ib_end - ib_start + 1; + return std::make_pair(ib_start, ib_length); } } // namespace Gint_Tools diff --git a/source/module_hamilt_lcao/module_gint/gint_tools.h b/source/module_hamilt_lcao/module_gint/gint_tools.h index a2ea0a20c0..b22abb7e6e 100644 --- a/source/module_hamilt_lcao/module_gint/gint_tools.h +++ b/source/module_hamilt_lcao/module_gint/gint_tools.h @@ -6,7 +6,7 @@ #include "grid_technique.h" #include "module_elecstate/module_charge/charge.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" -#include "module_base/array_pool.h" +#include "source_base/array_pool.h" #include #include // for std::pair @@ -33,19 +33,19 @@ class Gint_inout { public: // input - double*** DM=nullptr; - const double* vl=nullptr; - const double* vofk=nullptr; - bool isforce=false; - bool isstress=false; - int ispin=0; - int nspin_rho=0; // usually, but not always, equal to global nspin + double*** DM = nullptr; + const double* vl = nullptr; + const double* vofk = nullptr; + bool isforce = false; + bool isstress = false; + int ispin = 0; + int nspin_rho = 0; // usually, but not always, equal to global nspin bool if_symm = false; // if true, use dsymv in gint_kernel_rho; if false, use dgemv. // output - double** rho=nullptr; - ModuleBase::matrix* fvl_dphi=nullptr; - ModuleBase::matrix* svl_dphi=nullptr; + double** rho = nullptr; + ModuleBase::matrix* fvl_dphi = nullptr; + ModuleBase::matrix* svl_dphi = nullptr; Gint_Tools::job_type job; // electron density and kin_r, multi-k @@ -161,16 +161,21 @@ inline double pow_int(const double base, const int exp) * @param bx number of big grids in x direction * @param by number of big grids in y direction * @param bz number of big grids in z direction - * @param nplane Currently using Z-axis 1D division, + * @param nplane Currently using Z-axis 1D division, * recording the number of the Z-axis process * (nbz in the current process). * @param start_ind start index of the grid in the 1D FFT grid * @param ncyz number of grids in yz plane - * @param vindex the index of the grid -*/ -void get_vindex(const int bxyz, const int bx, const int by, - const int bz, const int nplane, - const int start_ind,const int ncyz,int* vindex); + * @param vindex the index of the grid + */ +void get_vindex(const int bxyz, + const int bx, + const int by, + const int bz, + const int nplane, + const int start_ind, + const int ncyz, + int* vindex); /** * @brief Get the vldr3 form the grid index @@ -180,13 +185,13 @@ void get_vindex(const int bxyz, const int bx, const int by, * @param bx number of grids in x direction * @param by number of grids in y direction * @param bz number of grids in z direction - * @param nplane Currently using Z-axis 1D division, + * @param nplane Currently using Z-axis 1D division, * recording the number of the Z-axis process * (nbz in the current process). * @param start_ind start index of the grid in the 1D FFT grid * @param ncyz number of grids in yz plane * @param dv the volume of the grid -*/ + */ void get_gint_vldr3(double* vldr3, const double* const vlocal, const int bxyz, @@ -208,9 +213,15 @@ void get_gint_vldr3(double* vldr3, * @param block_index count total number of atomis orbitals * @param block_size count the number of atomis orbitals in each atom * @param cal_flag whether the atom-grid distance is larger than cutoff -*/ -void get_block_info(const Grid_Technique& gt, const int bxyz, const int na_grid, const int grid_index, - int* block_iw, int* block_index, int* block_size, bool** cal_flag); + */ +void get_block_info(const Grid_Technique& gt, + const int bxyz, + const int na_grid, + const int grid_index, + int* block_iw, + int* block_index, + int* block_size, + bool** cal_flag); void init_orb(double& dr_uniform, std::vector& rcuts, @@ -248,13 +259,16 @@ void cal_dpsir_ylm( // dpsir_ylm * (r-R), R is the atomic position void cal_dpsirr_ylm( - const Grid_Technique& gt, const int bxyz, + const Grid_Technique& gt, + const int bxyz, const int na_grid, // number of atoms on this grid const int grid_index, // 1d index of FFT index (i,j,k) const int* const block_index, // block_index[na_grid+1], count total number of atomis orbitals const int* const block_size, // block_size[na_grid], number of columns of a band const bool* const* const cal_flag, // cal_flag[bxyz][na_grid], whether the atom-grid distance is larger than cutoff - double* const* const dpsir_ylm_x, double* const* const dpsir_ylm_y, double* const* const dpsir_ylm_z, + double* const* const dpsir_ylm_x, + double* const* const dpsir_ylm_y, + double* const* const dpsir_ylm_z, double* const* const dpsir_ylm); void cal_ddpsir_ylm( @@ -284,28 +298,23 @@ ModuleBase::Array_Pool get_psir_vlbr3( const double* const* const psir_ylm); // psir_ylm[bxyz][LD_pool] // sum_nu,R rho_mu,nu(R) psi_nu, for multi-k and gamma point -void mult_psi_DMR( - const Grid_Technique& gt, - const int bxyz, - const int LD_pool, - const int &grid_index, - const int &na_grid, - const int*const block_index, - const int*const block_size, - const bool*const*const cal_flag, - const double*const*const psi, - double*const*const psi_DMR, - const hamilt::HContainer*const DM, - const bool if_symm); - +void mult_psi_DMR(const Grid_Technique& gt, + const int bxyz, + const int LD_pool, + const int& grid_index, + const int& na_grid, + const int* const block_index, + const int* const block_size, + const bool* const* const cal_flag, + const double* const* const psi, + double* const* const psi_DMR, + const hamilt::HContainer* const DM, + const bool if_symm); // pair.first is the first index of the meshcell which is inside atoms ia1 and ia2. // pair.second is the number of meshcells which should be calculated in the following gemm. // If no meshcell is inside both ia1 and ia2, return [bxyz, 0]. -std::pair cal_info(const int bxyz, - const int ia1, - const int ia2, - const bool* const* const cal_flag); - +std::pair cal_info(const int bxyz, const int ia1, const int ia2, const bool* const* const cal_flag); + } // namespace Gint_Tools #endif diff --git a/source/module_hamilt_lcao/module_gint/gint_vl.cpp b/source/module_hamilt_lcao/module_gint/gint_vl.cpp index 043f80225a..42e8e9f32e 100644 --- a/source/module_hamilt_lcao/module_gint/gint_vl.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_vl.cpp @@ -1,14 +1,14 @@ -#include "module_base/global_function.h" -#include "module_base/global_variable.h" #include "gint_k.h" -#include "module_basis/module_ao/ORB_read.h" #include "grid_technique.h" -#include "module_base/ylm.h" +#include "module_basis/module_ao/ORB_read.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/blas_connector.h" -#include "module_base/timer.h" -#include "module_base/array_pool.h" -#include "module_base/vector3.h" +#include "source_base/array_pool.h" +#include "source_base/blas_connector.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/timer.h" +#include "source_base/vector3.h" +#include "source_base/ylm.h" //#include #ifdef _OPENMP @@ -21,75 +21,88 @@ // this is a thread-safe function void Gint::cal_meshball_vlocal( - const int na_grid, // how many atoms on this (i,j,k) grid - const int LD_pool, - const int*const block_size, // block_size[na_grid], number of columns of a band - const int*const block_index, // block_index[na_grid+1], count total number of atomis orbitals - const int grid_index, // index of grid group, for tracing global atom index - const bool*const*const cal_flag, // cal_flag[this->bxyz][na_grid], whether the atom-grid distance is larger than cutoff - const double*const*const psir_ylm, // psir_ylm[this->bxyz][LD_pool] - const double*const*const psir_vlbr3, // psir_vlbr3[this->bxyz][LD_pool] - hamilt::HContainer* hR) // this->hRGint is the container of matrix element. + const int na_grid, // how many atoms on this (i,j,k) grid + const int LD_pool, + const int* const block_size, // block_size[na_grid], number of columns of a band + const int* const block_index, // block_index[na_grid+1], count total number of atomis orbitals + const int grid_index, // index of grid group, for tracing global atom index + const bool* const* const + cal_flag, // cal_flag[this->bxyz][na_grid], whether the atom-grid distance is larger than cutoff + const double* const* const psir_ylm, // psir_ylm[this->bxyz][LD_pool] + const double* const* const psir_vlbr3, // psir_vlbr3[this->bxyz][LD_pool] + hamilt::HContainer* hR) // this->hRGint is the container of matrix element. { - const char transa='N', transb='T'; - const double alpha=1, beta=1; + const char transa = 'N', transb = 'T'; + const double alpha = 1, beta = 1; const int lgd_now = this->gridt->lgd; - const int mcell_index = this->gridt->bcell_start[grid_index]; + const int mcell_index = this->gridt->bcell_start[grid_index]; std::vector hr_tmp; - for(int ia1=0; ia1gridt->which_atom[bcell1]; - const int id1 = this->gridt->which_unitcell[bcell1]; - const ModuleBase::Vector3 r1 = this->gridt->get_ucell_coords(id1); + for (int ia1 = 0; ia1 < na_grid; ++ia1) + { + const int bcell1 = mcell_index + ia1; + const int iat1 = this->gridt->which_atom[bcell1]; + const int id1 = this->gridt->which_unitcell[bcell1]; + const ModuleBase::Vector3 r1 = this->gridt->get_ucell_coords(id1); - for(int ia2=0; ia2gridt->which_atom[bcell2]; - const int id2 = this->gridt->which_unitcell[bcell2]; - const ModuleBase::Vector3 r2 = this->gridt->get_ucell_coords(id2); + for (int ia2 = 0; ia2 < na_grid; ++ia2) + { + const int bcell2 = mcell_index + ia2; + const int iat2 = this->gridt->which_atom[bcell2]; + const int id2 = this->gridt->which_unitcell[bcell2]; + const ModuleBase::Vector3 r2 = this->gridt->get_ucell_coords(id2); - if(iat1<=iat2) - { - int first_ib=0; - for(int ib=0; ibbxyz; ++ib) + if (iat1 <= iat2) + { + int first_ib = 0; + for (int ib = 0; ib < this->bxyz; ++ib) { - if(cal_flag[ib][ia1] && cal_flag[ib][ia2]) + if (cal_flag[ib][ia1] && cal_flag[ib][ia2]) { - first_ib=ib; + first_ib = ib; break; } } - int last_ib=0; - for(int ib=this->bxyz-1; ib>=0; --ib) + int last_ib = 0; + for (int ib = this->bxyz - 1; ib >= 0; --ib) { - if(cal_flag[ib][ia1] && cal_flag[ib][ia2]) + if (cal_flag[ib][ia1] && cal_flag[ib][ia2]) { - last_ib=ib+1; + last_ib = ib + 1; break; } } - const int ib_length = last_ib-first_ib; - if(ib_length<=0) { continue; } + const int ib_length = last_ib - first_ib; + if (ib_length <= 0) + { + continue; + } - const auto tmp_matrix = hR->find_matrix(iat1, iat2, r1-r2); - if (tmp_matrix == nullptr) - { - continue; - } - const int m = tmp_matrix->get_row_size(); - const int n = tmp_matrix->get_col_size(); + const auto tmp_matrix = hR->find_matrix(iat1, iat2, r1 - r2); + if (tmp_matrix == nullptr) + { + continue; + } + const int m = tmp_matrix->get_row_size(); + const int n = tmp_matrix->get_col_size(); hr_tmp.resize(m * n); - ModuleBase::GlobalFunc::ZEROS(hr_tmp.data(), m*n); + ModuleBase::GlobalFunc::ZEROS(hr_tmp.data(), m * n); - dgemm_(&transa, &transb, &n, &m, &ib_length, &alpha, - &psir_vlbr3[first_ib][block_index[ia2]], &LD_pool, - &psir_ylm[first_ib][block_index[ia1]], &LD_pool, - &beta, hr_tmp.data(), &n); + dgemm_(&transa, + &transb, + &n, + &m, + &ib_length, + &alpha, + &psir_vlbr3[first_ib][block_index[ia2]], + &LD_pool, + &psir_ylm[first_ib][block_index[ia1]], + &LD_pool, + &beta, + hr_tmp.data(), + &n); tmp_matrix->add_array_ts(hr_tmp.data()); - } - } - } + } + } + } } \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_gint/gint_vl_cpu_interface.cpp b/source/module_hamilt_lcao/module_gint/gint_vl_cpu_interface.cpp index 0eb684ad5f..d6d1244a2f 100644 --- a/source/module_hamilt_lcao/module_gint/gint_vl_cpu_interface.cpp +++ b/source/module_hamilt_lcao/module_gint/gint_vl_cpu_interface.cpp @@ -1,9 +1,10 @@ #include "gint.h" -#include "module_base/memory.h" #include "module_parameter/parameter.h" -#include "module_base/timer.h" +#include "source_base/memory.h" +#include "source_base/timer.h" -void Gint::gint_kernel_vlocal(Gint_inout* inout) { +void Gint::gint_kernel_vlocal(Gint_inout* inout) +{ ModuleBase::TITLE("Gint_interface", "cal_gint_vlocal"); ModuleBase::timer::tick("Gint_interface", "cal_gint_vlocal"); const UnitCell& ucell = *this->ucell; @@ -15,72 +16,111 @@ void Gint::gint_kernel_vlocal(Gint_inout* inout) { hamilt::HContainer* hRGint_kernel = PARAM.inp.nspin != 4 ? this->hRGint : this->hRGint_tmp[inout->ispin]; hRGint_kernel->set_zero(); -#pragma omp parallel - { /** - * @brief When in OpenMP, it points to a newly allocated memory, - */ - std::vector block_iw(max_size,0); - std::vector block_index(max_size+1,0); - std::vector block_size(max_size,0); - std::vector vldr3(this->bxyz,0.0); - #pragma omp for schedule(dynamic) - for (int grid_index = 0; grid_index < this->nbxx; grid_index++) { +#pragma omp parallel + { /** + * @brief When in OpenMP, it points to a newly allocated memory, + */ + std::vector block_iw(max_size, 0); + std::vector block_index(max_size + 1, 0); + std::vector block_size(max_size, 0); + std::vector vldr3(this->bxyz, 0.0); +#pragma omp for schedule(dynamic) + for (int grid_index = 0; grid_index < this->nbxx; grid_index++) + { const int na_grid = this->gridt->how_many_atoms[grid_index]; - if (na_grid == 0) { + if (na_grid == 0) + { continue; } /** * @brief Prepare block information - */ - ModuleBase::Array_Pool cal_flag(this->bxyz,max_size); + */ + ModuleBase::Array_Pool cal_flag(this->bxyz, max_size); Gint_Tools::get_gint_vldr3(vldr3.data(), - inout->vl, - this->bxyz, - this->bx, - this->by, - this->bz, - this->nplane, - this->gridt->start_ind[grid_index], - ncyz, - dv); + inout->vl, + this->bxyz, + this->bx, + this->by, + this->bz, + this->nplane, + this->gridt->start_ind[grid_index], + ncyz, + dv); - Gint_Tools::get_block_info(*this->gridt, this->bxyz, na_grid, grid_index, - block_iw.data(), block_index.data(), block_size.data(), cal_flag.get_ptr_2D()); + Gint_Tools::get_block_info(*this->gridt, + this->bxyz, + na_grid, + grid_index, + block_iw.data(), + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D()); - /** - * @brief Evaluate psi and dpsi on grids - */ - const int LD_pool = block_index[na_grid]; - ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); - Gint_Tools::cal_psir_ylm(*this->gridt, - this->bxyz, na_grid, grid_index, delta_r, - block_index.data(), block_size.data(), - cal_flag.get_ptr_2D(),psir_ylm.get_ptr_2D()); + /** + * @brief Evaluate psi and dpsi on grids + */ + const int LD_pool = block_index[na_grid]; + ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); + Gint_Tools::cal_psir_ylm(*this->gridt, + this->bxyz, + na_grid, + grid_index, + delta_r, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + psir_ylm.get_ptr_2D()); - // psir_ylm_new=psir_func(psir_ylm) - // psir_func==nullptr means psir_ylm_new=psir_ylm - const ModuleBase::Array_Pool &psir_ylm_1 = (!this->psir_func_1) ? psir_ylm : this->psir_func_1(psir_ylm, *this->gridt, grid_index, 0, block_iw, block_size, block_index, cal_flag); - const ModuleBase::Array_Pool &psir_ylm_2 = (!this->psir_func_2) ? psir_ylm : this->psir_func_2(psir_ylm, *this->gridt, grid_index, 0, block_iw, block_size, block_index, cal_flag); + // psir_ylm_new=psir_func(psir_ylm) + // psir_func==nullptr means psir_ylm_new=psir_ylm + const ModuleBase::Array_Pool& psir_ylm_1 = (!this->psir_func_1) ? psir_ylm + : this->psir_func_1(psir_ylm, + *this->gridt, + grid_index, + 0, + block_iw, + block_size, + block_index, + cal_flag); + const ModuleBase::Array_Pool& psir_ylm_2 = (!this->psir_func_2) ? psir_ylm + : this->psir_func_2(psir_ylm, + *this->gridt, + grid_index, + 0, + block_iw, + block_size, + block_index, + cal_flag); - //calculating f_mu(r) = v(r)*psi_mu(r)*dv - const ModuleBase::Array_Pool psir_vlbr3 = Gint_Tools::get_psir_vlbr3( - this->bxyz, na_grid, LD_pool, block_index.data(), - cal_flag.get_ptr_2D(), vldr3.data(), psir_ylm_1.get_ptr_2D()); + // calculating f_mu(r) = v(r)*psi_mu(r)*dv + const ModuleBase::Array_Pool psir_vlbr3 = Gint_Tools::get_psir_vlbr3(this->bxyz, + na_grid, + LD_pool, + block_index.data(), + cal_flag.get_ptr_2D(), + vldr3.data(), + psir_ylm_1.get_ptr_2D()); - //integrate (psi_mu*v(r)*dv) * psi_nu on grid - //and accumulates to the corresponding element in Hamiltonian - this->cal_meshball_vlocal( - na_grid, LD_pool, block_size.data(), block_index.data(), grid_index, - cal_flag.get_ptr_2D(),psir_ylm.get_ptr_2D(), psir_vlbr3.get_ptr_2D(), - hRGint_kernel); + // integrate (psi_mu*v(r)*dv) * psi_nu on grid + // and accumulates to the corresponding element in Hamiltonian + this->cal_meshball_vlocal(na_grid, + LD_pool, + block_size.data(), + block_index.data(), + grid_index, + cal_flag.get_ptr_2D(), + psir_ylm.get_ptr_2D(), + psir_vlbr3.get_ptr_2D(), + hRGint_kernel); } ModuleBase::TITLE("Gint_interface", "cal_gint_vlocal"); ModuleBase::timer::tick("Gint_interface", "cal_gint_vlocal"); } } -void Gint::gint_kernel_dvlocal(Gint_inout* inout) { +void Gint::gint_kernel_dvlocal(Gint_inout* inout) +{ ModuleBase::TITLE("Gint_interface", "cal_gint_dvlocal"); ModuleBase::timer::tick("Gint_interface", "cal_gint_dvlocal"); const UnitCell& ucell = *this->ucell; @@ -91,73 +131,115 @@ void Gint::gint_kernel_dvlocal(Gint_inout* inout) { const double dv = ucell.omega / this->ncxyz; const double delta_r = this->gridt->dr_uniform; - if (PARAM.globalv.gamma_only_local) { - ModuleBase::WARNING_QUIT("Gint_interface::cal_gint","dvlocal only for k point!"); + if (PARAM.globalv.gamma_only_local) + { + ModuleBase::WARNING_QUIT("Gint_interface::cal_gint", "dvlocal only for k point!"); } pvdpRx_reduced[inout->ispin].set_zero(); pvdpRy_reduced[inout->ispin].set_zero(); pvdpRz_reduced[inout->ispin].set_zero(); -#pragma omp parallel -{ - std::vector block_iw(max_size,0); - std::vector block_index(max_size+1,0); - std::vector block_size(max_size,0); - std::vector vldr3(this->bxyz,0.0); +#pragma omp parallel + { + std::vector block_iw(max_size, 0); + std::vector block_index(max_size + 1, 0); + std::vector block_size(max_size, 0); + std::vector vldr3(this->bxyz, 0.0); #pragma omp for schedule(dynamic) - for (int grid_index = 0; grid_index < this->nbxx; grid_index++) { - const int na_grid = this->gridt->how_many_atoms[grid_index]; - if (na_grid == 0) { - continue; - } - Gint_Tools::get_gint_vldr3(vldr3.data(), - inout->vl, - this->bxyz, - this->bx, - this->by, - this->bz, - this->nplane, - this->gridt->start_ind[grid_index], - ncyz, - dv); - //prepare block information - ModuleBase::Array_Pool cal_flag(this->bxyz,max_size); - Gint_Tools::get_block_info(*this->gridt, this->bxyz, na_grid, grid_index, - block_iw.data(), block_index.data(), block_size.data(), cal_flag.get_ptr_2D()); - - //evaluate psi and dpsi on grids - const int LD_pool = block_index[na_grid]; + for (int grid_index = 0; grid_index < this->nbxx; grid_index++) + { + const int na_grid = this->gridt->how_many_atoms[grid_index]; + if (na_grid == 0) + { + continue; + } + Gint_Tools::get_gint_vldr3(vldr3.data(), + inout->vl, + this->bxyz, + this->bx, + this->by, + this->bz, + this->nplane, + this->gridt->start_ind[grid_index], + ncyz, + dv); + // prepare block information + ModuleBase::Array_Pool cal_flag(this->bxyz, max_size); + Gint_Tools::get_block_info(*this->gridt, + this->bxyz, + na_grid, + grid_index, + block_iw.data(), + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D()); - ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_x(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_y(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_z(this->bxyz, LD_pool); - Gint_Tools::cal_dpsir_ylm(*this->gridt, this->bxyz, na_grid, grid_index, delta_r, - block_index.data(), block_size.data(), cal_flag.get_ptr_2D(),psir_ylm.get_ptr_2D(), - dpsir_ylm_x.get_ptr_2D(), dpsir_ylm_y.get_ptr_2D(), dpsir_ylm_z.get_ptr_2D()); + // evaluate psi and dpsi on grids + const int LD_pool = block_index[na_grid]; - //calculating f_mu(r) = v(r)*psi_mu(r)*dv - const ModuleBase::Array_Pool psir_vlbr3 = Gint_Tools::get_psir_vlbr3( - this->bxyz, na_grid, LD_pool, block_index.data(), cal_flag.get_ptr_2D(), vldr3.data(), psir_ylm.get_ptr_2D()); + ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_x(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_y(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_z(this->bxyz, LD_pool); + Gint_Tools::cal_dpsir_ylm(*this->gridt, + this->bxyz, + na_grid, + grid_index, + delta_r, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + psir_ylm.get_ptr_2D(), + dpsir_ylm_x.get_ptr_2D(), + dpsir_ylm_y.get_ptr_2D(), + dpsir_ylm_z.get_ptr_2D()); - //integrate (psi_mu*v(r)*dv) * psi_nu on grid - //and accumulates to the corresponding element in Hamiltonian - this->cal_meshball_vlocal(na_grid, LD_pool, block_size.data(), block_index.data(), - grid_index, cal_flag.get_ptr_2D(),psir_vlbr3.get_ptr_2D(), - dpsir_ylm_x.get_ptr_2D(), &this->pvdpRx_reduced[inout->ispin]); - this->cal_meshball_vlocal(na_grid, LD_pool, block_size.data(), block_index.data(), - grid_index, cal_flag.get_ptr_2D(),psir_vlbr3.get_ptr_2D(), - dpsir_ylm_y.get_ptr_2D(), &this->pvdpRy_reduced[inout->ispin]); - this->cal_meshball_vlocal(na_grid, LD_pool, block_size.data(), block_index.data(), - grid_index, cal_flag.get_ptr_2D(),psir_vlbr3.get_ptr_2D(), - dpsir_ylm_z.get_ptr_2D(), &this->pvdpRz_reduced[inout->ispin]); + // calculating f_mu(r) = v(r)*psi_mu(r)*dv + const ModuleBase::Array_Pool psir_vlbr3 = Gint_Tools::get_psir_vlbr3(this->bxyz, + na_grid, + LD_pool, + block_index.data(), + cal_flag.get_ptr_2D(), + vldr3.data(), + psir_ylm.get_ptr_2D()); + + // integrate (psi_mu*v(r)*dv) * psi_nu on grid + // and accumulates to the corresponding element in Hamiltonian + this->cal_meshball_vlocal(na_grid, + LD_pool, + block_size.data(), + block_index.data(), + grid_index, + cal_flag.get_ptr_2D(), + psir_vlbr3.get_ptr_2D(), + dpsir_ylm_x.get_ptr_2D(), + &this->pvdpRx_reduced[inout->ispin]); + this->cal_meshball_vlocal(na_grid, + LD_pool, + block_size.data(), + block_index.data(), + grid_index, + cal_flag.get_ptr_2D(), + psir_vlbr3.get_ptr_2D(), + dpsir_ylm_y.get_ptr_2D(), + &this->pvdpRy_reduced[inout->ispin]); + this->cal_meshball_vlocal(na_grid, + LD_pool, + block_size.data(), + block_index.data(), + grid_index, + cal_flag.get_ptr_2D(), + psir_vlbr3.get_ptr_2D(), + dpsir_ylm_z.get_ptr_2D(), + &this->pvdpRz_reduced[inout->ispin]); + } } -} ModuleBase::TITLE("Gint_interface", "cal_gint_dvlocal"); ModuleBase::timer::tick("Gint_interface", "cal_gint_dvlocal"); } -void Gint::gint_kernel_vlocal_meta(Gint_inout* inout) { +void Gint::gint_kernel_vlocal_meta(Gint_inout* inout) +{ ModuleBase::TITLE("Gint_interface", "cal_gint_vlocal_meta"); ModuleBase::timer::tick("Gint_interface", "cal_gint_vlocal_meta"); const UnitCell& ucell = *this->ucell; @@ -171,94 +253,148 @@ void Gint::gint_kernel_vlocal_meta(Gint_inout* inout) { const int nnrg = hRGint_kernel->get_nnr(); #pragma omp parallel -{ - // define HContainer here to reference. - //Under the condition of gamma_only, hRGint will be instantiated. - std::vector block_iw(max_size,0); - std::vector block_index(max_size+1,0); - std::vector block_size(max_size,0); - std::vector vldr3(this->bxyz,0.0); - std::vector vkdr3(this->bxyz,0.0); + { + // define HContainer here to reference. + // Under the condition of gamma_only, hRGint will be instantiated. + std::vector block_iw(max_size, 0); + std::vector block_index(max_size + 1, 0); + std::vector block_size(max_size, 0); + std::vector vldr3(this->bxyz, 0.0); + std::vector vkdr3(this->bxyz, 0.0); #pragma omp for schedule(dynamic) - for (int grid_index = 0; grid_index < this->nbxx; grid_index++) { - const int na_grid = this->gridt->how_many_atoms[grid_index]; - if (na_grid == 0) { - continue; - } - Gint_Tools::get_gint_vldr3(vldr3.data(), - inout->vl, - this->bxyz, - this->bx, - this->by, - this->bz, - this->nplane, - this->gridt->start_ind[grid_index], - ncyz, - dv); - Gint_Tools::get_gint_vldr3(vkdr3.data(), - inout->vofk, - this->bxyz, - this->bx, - this->by, - this->bz, - this->nplane, - this->gridt->start_ind[grid_index], - ncyz, - dv); - //prepare block information - ModuleBase::Array_Pool cal_flag(this->bxyz,max_size); - Gint_Tools::get_block_info(*this->gridt, this->bxyz, na_grid, grid_index, - block_iw.data(), block_index.data(), block_size.data(), cal_flag.get_ptr_2D()); + for (int grid_index = 0; grid_index < this->nbxx; grid_index++) + { + const int na_grid = this->gridt->how_many_atoms[grid_index]; + if (na_grid == 0) + { + continue; + } + Gint_Tools::get_gint_vldr3(vldr3.data(), + inout->vl, + this->bxyz, + this->bx, + this->by, + this->bz, + this->nplane, + this->gridt->start_ind[grid_index], + ncyz, + dv); + Gint_Tools::get_gint_vldr3(vkdr3.data(), + inout->vofk, + this->bxyz, + this->bx, + this->by, + this->bz, + this->nplane, + this->gridt->start_ind[grid_index], + ncyz, + dv); + // prepare block information + ModuleBase::Array_Pool cal_flag(this->bxyz, max_size); + Gint_Tools::get_block_info(*this->gridt, + this->bxyz, + na_grid, + grid_index, + block_iw.data(), + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D()); - //evaluate psi and dpsi on grids - const int LD_pool = block_index[na_grid]; - ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_x(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_y(this->bxyz, LD_pool); - ModuleBase::Array_Pool dpsir_ylm_z(this->bxyz, LD_pool); + // evaluate psi and dpsi on grids + const int LD_pool = block_index[na_grid]; + ModuleBase::Array_Pool psir_ylm(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_x(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_y(this->bxyz, LD_pool); + ModuleBase::Array_Pool dpsir_ylm_z(this->bxyz, LD_pool); - Gint_Tools::cal_dpsir_ylm(*this->gridt, - this->bxyz, na_grid, grid_index, delta_r, - block_index.data(), block_size.data(), - cal_flag.get_ptr_2D(), - psir_ylm.get_ptr_2D(), - dpsir_ylm_x.get_ptr_2D(), - dpsir_ylm_y.get_ptr_2D(), - dpsir_ylm_z.get_ptr_2D() - ); - - //calculating f_mu(r) = v(r)*psi_mu(r)*dv - const ModuleBase::Array_Pool psir_vlbr3 = Gint_Tools::get_psir_vlbr3( - this->bxyz, na_grid, LD_pool, block_index.data(), cal_flag.get_ptr_2D(), vldr3.data(), psir_ylm.get_ptr_2D()); + Gint_Tools::cal_dpsir_ylm(*this->gridt, + this->bxyz, + na_grid, + grid_index, + delta_r, + block_index.data(), + block_size.data(), + cal_flag.get_ptr_2D(), + psir_ylm.get_ptr_2D(), + dpsir_ylm_x.get_ptr_2D(), + dpsir_ylm_y.get_ptr_2D(), + dpsir_ylm_z.get_ptr_2D()); - //calculating df_mu(r) = vofk(r) * dpsi_mu(r) * dv - const ModuleBase::Array_Pool dpsix_vlbr3 = Gint_Tools::get_psir_vlbr3( - this->bxyz, na_grid, LD_pool, block_index.data(), cal_flag.get_ptr_2D(), vkdr3.data(), dpsir_ylm_x.get_ptr_2D()); - const ModuleBase::Array_Pool dpsiy_vlbr3 = Gint_Tools::get_psir_vlbr3( - this->bxyz, na_grid, LD_pool, block_index.data(), cal_flag.get_ptr_2D(), vkdr3.data(), dpsir_ylm_y.get_ptr_2D()); - const ModuleBase::Array_Pool dpsiz_vlbr3 = Gint_Tools::get_psir_vlbr3( - this->bxyz, na_grid, LD_pool, block_index.data(), cal_flag.get_ptr_2D(), vkdr3.data(), dpsir_ylm_z.get_ptr_2D()); + // calculating f_mu(r) = v(r)*psi_mu(r)*dv + const ModuleBase::Array_Pool psir_vlbr3 = Gint_Tools::get_psir_vlbr3(this->bxyz, + na_grid, + LD_pool, + block_index.data(), + cal_flag.get_ptr_2D(), + vldr3.data(), + psir_ylm.get_ptr_2D()); + // calculating df_mu(r) = vofk(r) * dpsi_mu(r) * dv + const ModuleBase::Array_Pool dpsix_vlbr3 = Gint_Tools::get_psir_vlbr3(this->bxyz, + na_grid, + LD_pool, + block_index.data(), + cal_flag.get_ptr_2D(), + vkdr3.data(), + dpsir_ylm_x.get_ptr_2D()); + const ModuleBase::Array_Pool dpsiy_vlbr3 = Gint_Tools::get_psir_vlbr3(this->bxyz, + na_grid, + LD_pool, + block_index.data(), + cal_flag.get_ptr_2D(), + vkdr3.data(), + dpsir_ylm_y.get_ptr_2D()); + const ModuleBase::Array_Pool dpsiz_vlbr3 = Gint_Tools::get_psir_vlbr3(this->bxyz, + na_grid, + LD_pool, + block_index.data(), + cal_flag.get_ptr_2D(), + vkdr3.data(), + dpsir_ylm_z.get_ptr_2D()); - //integrate (psi_mu*v(r)*dv) * psi_nu on grid - //and accumulates to the corresponding element in Hamiltonian - this->cal_meshball_vlocal( - na_grid, LD_pool, block_size.data(), block_index.data(), grid_index, cal_flag.get_ptr_2D(), - psir_ylm.get_ptr_2D(), psir_vlbr3.get_ptr_2D(), hRGint_kernel); - //integrate (d/dx_i psi_mu*vk(r)*dv) * (d/dx_i psi_nu) on grid (x_i=x,y,z) - //and accumulates to the corresponding element in Hamiltonian - this->cal_meshball_vlocal( - na_grid, LD_pool, block_size.data(), block_index.data(), grid_index, cal_flag.get_ptr_2D(), - dpsir_ylm_x.get_ptr_2D(), dpsix_vlbr3.get_ptr_2D(), hRGint_kernel); - this->cal_meshball_vlocal( - na_grid, LD_pool, block_size.data(), block_index.data(), grid_index, cal_flag.get_ptr_2D(), - dpsir_ylm_y.get_ptr_2D(), dpsiy_vlbr3.get_ptr_2D(), hRGint_kernel); - this->cal_meshball_vlocal( - na_grid, LD_pool, block_size.data(), block_index.data(), grid_index, cal_flag.get_ptr_2D(), - dpsir_ylm_z.get_ptr_2D(), dpsiz_vlbr3.get_ptr_2D(), hRGint_kernel); + // integrate (psi_mu*v(r)*dv) * psi_nu on grid + // and accumulates to the corresponding element in Hamiltonian + this->cal_meshball_vlocal(na_grid, + LD_pool, + block_size.data(), + block_index.data(), + grid_index, + cal_flag.get_ptr_2D(), + psir_ylm.get_ptr_2D(), + psir_vlbr3.get_ptr_2D(), + hRGint_kernel); + // integrate (d/dx_i psi_mu*vk(r)*dv) * (d/dx_i psi_nu) on grid (x_i=x,y,z) + // and accumulates to the corresponding element in Hamiltonian + this->cal_meshball_vlocal(na_grid, + LD_pool, + block_size.data(), + block_index.data(), + grid_index, + cal_flag.get_ptr_2D(), + dpsir_ylm_x.get_ptr_2D(), + dpsix_vlbr3.get_ptr_2D(), + hRGint_kernel); + this->cal_meshball_vlocal(na_grid, + LD_pool, + block_size.data(), + block_index.data(), + grid_index, + cal_flag.get_ptr_2D(), + dpsir_ylm_y.get_ptr_2D(), + dpsiy_vlbr3.get_ptr_2D(), + hRGint_kernel); + this->cal_meshball_vlocal(na_grid, + LD_pool, + block_size.data(), + block_index.data(), + grid_index, + cal_flag.get_ptr_2D(), + dpsir_ylm_z.get_ptr_2D(), + dpsiz_vlbr3.get_ptr_2D(), + hRGint_kernel); + } } -} ModuleBase::TITLE("Gint_interface", "cal_gint_vlocal_meta"); ModuleBase::timer::tick("Gint_interface", "cal_gint_vlocal_meta"); diff --git a/source/module_hamilt_lcao/module_gint/gint_vl_gpu.cu b/source/module_hamilt_lcao/module_gint/gint_vl_gpu.cu index c58896f34c..db4ba09f9c 100644 --- a/source/module_hamilt_lcao/module_gint/gint_vl_gpu.cu +++ b/source/module_hamilt_lcao/module_gint/gint_vl_gpu.cu @@ -2,10 +2,10 @@ #include #endif -#include "kernels/cuda/cuda_tools.cuh" -#include "module_base/ylm.h" #include "gint_vl_gpu.h" +#include "kernels/cuda/cuda_tools.cuh" #include "kernels/cuda/gint_vl.cuh" +#include "source_base/ylm.h" namespace GintKernel { @@ -75,139 +75,134 @@ void gint_vl_gpu(hamilt::HContainer* hRGint, Cuda_Mem_Wrapper gemm_C(max_atompair_per_z, num_streams, true); #ifdef _OPENMP -const int max_thread_num = std::min(omp_get_max_threads(), num_streams); + const int max_thread_num = std::min(omp_get_max_threads(), num_streams); #endif #pragma omp parallel num_threads(max_thread_num) -{ + { #ifdef _OPENMP - const int tid = omp_get_thread_num(); - const int num_threads = omp_get_num_threads(); - const int sid_start = tid * num_streams / num_threads; - const int thread_num_streams = tid == num_threads - 1 ? num_streams - sid_start : num_streams / num_threads; + const int tid = omp_get_thread_num(); + const int num_threads = omp_get_num_threads(); + const int sid_start = tid * num_streams / num_threads; + const int thread_num_streams = tid == num_threads - 1 ? num_streams - sid_start : num_streams / num_threads; #else - const int sid_start = 0; - const int thread_num_streams = num_streams; + const int sid_start = 0; + const int thread_num_streams = num_streams; #endif #pragma omp for collapse(2) schedule(dynamic) - for (int i = 0; i < gridt.nbx; i++) - { - for (int j = 0; j < gridt.nby; j++) + for (int i = 0; i < gridt.nbx; i++) { - // 20240620 Note that it must be set again here because - // cuda's device is not safe in a multi-threaded environment. - checkCuda(cudaSetDevice(gridt.dev_id)); - - const int sid = (i * gridt.nby + j) % thread_num_streams + sid_start; - checkCuda(cudaEventSynchronize(events[sid])); - int max_m = 0; - int max_n = 0; - int atom_pair_num = 0; - int atoms_per_z = 0; - const int grid_index_ij = i * gridt.nby * nbzp + j * nbzp; - - gtask_vlocal(gridt, - ucell, - grid_index_ij, - nczp, - vfactor, - vlocal, - atoms_per_z, - atoms_num_info.get_host_pointer(sid), - atoms_type.get_host_pointer(sid), - dr_part.get_host_pointer(sid), - vldr3.get_host_pointer(sid)); - - alloc_mult_vlocal(hRGint, - gridt, - ucell, - grid_index_ij, - max_atom, - psi.get_device_pointer(sid), - psi_vldr3.get_device_pointer(sid), - grid_vlocal_g.get_device_pointer(), - gemm_m.get_host_pointer(sid), - gemm_n.get_host_pointer(sid), - gemm_k.get_host_pointer(sid), - gemm_lda.get_host_pointer(sid), - gemm_ldb.get_host_pointer(sid), - gemm_ldc.get_host_pointer(sid), - gemm_A.get_host_pointer(sid), - gemm_B.get_host_pointer(sid), - gemm_C.get_host_pointer(sid), - atom_pair_num, - max_m, - max_n); - - dr_part.copy_host_to_device_async(streams[sid], sid, atoms_per_z * 3); - atoms_type.copy_host_to_device_async(streams[sid], sid, atoms_per_z); - vldr3.copy_host_to_device_async(streams[sid], sid); - atoms_num_info.copy_host_to_device_async(streams[sid], sid, 2 * nbzp); - - gemm_m.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_n.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_k.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_lda.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_ldb.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_ldc.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_A.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_B.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - gemm_C.copy_host_to_device_async(streams[sid], sid, atom_pair_num); - checkCuda(cudaEventRecord(events[sid], streams[sid])); - - psi.memset_device_async(streams[sid], sid, 0); - psi_vldr3.memset_device_async(streams[sid], sid, 0); - - dim3 grid_psi(nbzp, gridt.bxyz); - dim3 block_psi(64); - get_psi_and_vldr3<<>>( - gridt.ylmcoef_g, - dr, - gridt.bxyz, - ucell.nwmax, - max_atom, - gridt.atom_nwl_g, - gridt.atom_new_g, - gridt.atom_ylm_g, - gridt.atom_nw_g, - gridt.rcut_g, - gridt.nr_max, - gridt.psi_u_g, - gridt.mcell_pos_g, - dr_part.get_device_pointer(sid), - vldr3.get_device_pointer(sid), - atoms_type.get_device_pointer(sid), - atoms_num_info.get_device_pointer(sid), - psi.get_device_pointer(sid), - psi_vldr3.get_device_pointer(sid)); - checkCudaLastError(); - - gridt.fastest_matrix_mul(max_m, - max_n, - gemm_m.get_device_pointer(sid), - gemm_n.get_device_pointer(sid), - gemm_k.get_device_pointer(sid), - gemm_A.get_device_pointer(sid), - gemm_lda.get_device_pointer(sid), - gemm_B.get_device_pointer(sid), - gemm_ldb.get_device_pointer(sid), - gemm_C.get_device_pointer(sid), - gemm_ldc.get_device_pointer(sid), - atom_pair_num, - streams[sid], - nullptr); - checkCudaLastError(); + for (int j = 0; j < gridt.nby; j++) + { + // 20240620 Note that it must be set again here because + // cuda's device is not safe in a multi-threaded environment. + checkCuda(cudaSetDevice(gridt.dev_id)); + + const int sid = (i * gridt.nby + j) % thread_num_streams + sid_start; + checkCuda(cudaEventSynchronize(events[sid])); + int max_m = 0; + int max_n = 0; + int atom_pair_num = 0; + int atoms_per_z = 0; + const int grid_index_ij = i * gridt.nby * nbzp + j * nbzp; + + gtask_vlocal(gridt, + ucell, + grid_index_ij, + nczp, + vfactor, + vlocal, + atoms_per_z, + atoms_num_info.get_host_pointer(sid), + atoms_type.get_host_pointer(sid), + dr_part.get_host_pointer(sid), + vldr3.get_host_pointer(sid)); + + alloc_mult_vlocal(hRGint, + gridt, + ucell, + grid_index_ij, + max_atom, + psi.get_device_pointer(sid), + psi_vldr3.get_device_pointer(sid), + grid_vlocal_g.get_device_pointer(), + gemm_m.get_host_pointer(sid), + gemm_n.get_host_pointer(sid), + gemm_k.get_host_pointer(sid), + gemm_lda.get_host_pointer(sid), + gemm_ldb.get_host_pointer(sid), + gemm_ldc.get_host_pointer(sid), + gemm_A.get_host_pointer(sid), + gemm_B.get_host_pointer(sid), + gemm_C.get_host_pointer(sid), + atom_pair_num, + max_m, + max_n); + + dr_part.copy_host_to_device_async(streams[sid], sid, atoms_per_z * 3); + atoms_type.copy_host_to_device_async(streams[sid], sid, atoms_per_z); + vldr3.copy_host_to_device_async(streams[sid], sid); + atoms_num_info.copy_host_to_device_async(streams[sid], sid, 2 * nbzp); + + gemm_m.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_n.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_k.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_lda.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_ldb.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_ldc.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_A.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_B.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + gemm_C.copy_host_to_device_async(streams[sid], sid, atom_pair_num); + checkCuda(cudaEventRecord(events[sid], streams[sid])); + + psi.memset_device_async(streams[sid], sid, 0); + psi_vldr3.memset_device_async(streams[sid], sid, 0); + + dim3 grid_psi(nbzp, gridt.bxyz); + dim3 block_psi(64); + get_psi_and_vldr3<<>>(gridt.ylmcoef_g, + dr, + gridt.bxyz, + ucell.nwmax, + max_atom, + gridt.atom_nwl_g, + gridt.atom_new_g, + gridt.atom_ylm_g, + gridt.atom_nw_g, + gridt.rcut_g, + gridt.nr_max, + gridt.psi_u_g, + gridt.mcell_pos_g, + dr_part.get_device_pointer(sid), + vldr3.get_device_pointer(sid), + atoms_type.get_device_pointer(sid), + atoms_num_info.get_device_pointer(sid), + psi.get_device_pointer(sid), + psi_vldr3.get_device_pointer(sid)); + checkCudaLastError(); + + gridt.fastest_matrix_mul(max_m, + max_n, + gemm_m.get_device_pointer(sid), + gemm_n.get_device_pointer(sid), + gemm_k.get_device_pointer(sid), + gemm_A.get_device_pointer(sid), + gemm_lda.get_device_pointer(sid), + gemm_B.get_device_pointer(sid), + gemm_ldb.get_device_pointer(sid), + gemm_C.get_device_pointer(sid), + gemm_ldc.get_device_pointer(sid), + atom_pair_num, + streams[sid], + nullptr); + checkCudaLastError(); + } } } -} - checkCuda(cudaMemcpy( - hRGint->get_wrapper(), - grid_vlocal_g.get_device_pointer(), - nnrg * sizeof(double), - cudaMemcpyDeviceToHost)); + checkCuda(cudaMemcpy(hRGint->get_wrapper(), + grid_vlocal_g.get_device_pointer(), + nnrg * sizeof(double), + cudaMemcpyDeviceToHost)); for (int i = 0; i < num_streams; i++) { diff --git a/source/module_hamilt_lcao/module_gint/grid_bigcell.cpp b/source/module_hamilt_lcao/module_gint/grid_bigcell.cpp index 7f47218096..466fec3dab 100644 --- a/source/module_hamilt_lcao/module_gint/grid_bigcell.cpp +++ b/source/module_hamilt_lcao/module_gint/grid_bigcell.cpp @@ -1,11 +1,11 @@ #include "grid_bigcell.h" -#include "module_parameter/parameter.h" -#include "module_base/memory.h" -#include "module_base/timer.h" #include "module_basis/module_ao/ORB_read.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_cell/unitcell.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/memory.h" +#include "source_base/timer.h" Grid_BigCell::Grid_BigCell() { this->orbital_rmax = 0.0; @@ -25,339 +25,334 @@ Grid_BigCell::~Grid_BigCell() void Grid_BigCell::init_big_latvec(const UnitCell& ucell) { - ModuleBase::TITLE("Grid_BigCell","init_big_latvec"); - // initialize the mesh cell vectors. - assert(nbx>0); - assert(nby>0); - assert(nbz>=0); - - this->nat=ucell.nat; - //size of each big room (same shape with unitcell) - this->bigcell_vec1=std::vector(3,0.0); - this->bigcell_vec1[0]=ucell.a1.x / (double)nbx * ucell.lat0; - this->bigcell_vec1[1]=ucell.a1.y / (double)nbx * ucell.lat0; - this->bigcell_vec1[2]=ucell.a1.z / (double)nbx * ucell.lat0; - - this->bigcell_vec2=std::vector(3,0.0); - this->bigcell_vec2[0]=ucell.a2.x / (double)nby * ucell.lat0; - this->bigcell_vec2[1]=ucell.a2.y / (double)nby * ucell.lat0; - this->bigcell_vec2[2]=ucell.a2.z / (double)nby * ucell.lat0; - - this->bigcell_vec3=std::vector(3,0.0); - this->bigcell_vec3[0]=ucell.a3.x / (double)nbz * ucell.lat0; - this->bigcell_vec3[1]=ucell.a3.y / (double)nbz * ucell.lat0; - this->bigcell_vec3[2]=ucell.a3.z / (double)nbz * ucell.lat0; - - this->bigcell_latvec0.e11 = this->bigcell_vec1[0]; - this->bigcell_latvec0.e12 = this->bigcell_vec1[1]; - this->bigcell_latvec0.e13 = this->bigcell_vec1[2]; - - this->bigcell_latvec0.e21 = this->bigcell_vec2[0]; - this->bigcell_latvec0.e22 = this->bigcell_vec2[1]; - this->bigcell_latvec0.e23 = this->bigcell_vec2[2]; - - this->bigcell_latvec0.e31 = this->bigcell_vec3[0]; - this->bigcell_latvec0.e32 = this->bigcell_vec3[1]; - this->bigcell_latvec0.e33 = this->bigcell_vec3[2]; - - // why we need GT = bigcell_latvec0^(-1)? - // note that (i,j,k) is a grid point. - // (x,y,z) is the cartesian coordinates. - // because - // (x,y,z) = (i,j,k) * bigcell_latvec0 - // once we know (x,y,z) and bigcell_latvec0 - // we need to transform the formula to - // (x,y,z) * bigcell_latvec0^(-1) = (i,j,k) - this->bigcell_GT = this->bigcell_latvec0.Inverse(); - - if(PARAM.inp.test_gridt) - { - GlobalV::ofs_running << " the VECTORS of BIGCELL are (Bohr): " << std::endl; - GlobalV::ofs_running << " vec1( " - << std::setw(15) << bigcell_vec1[0] - << std::setw(15) << bigcell_vec1[1] - << std::setw(15) << bigcell_vec1[2] - << ")" << std::endl; - - GlobalV::ofs_running << " vec2( " - << std::setw(15) << bigcell_vec2[0] - << std::setw(15) << bigcell_vec2[1] - << std::setw(15) << bigcell_vec2[2] - << ")" << std::endl; - - GlobalV::ofs_running << " vec3( " - << std::setw(15) << bigcell_vec3[0] - << std::setw(15) << bigcell_vec3[1] - << std::setw(15) << bigcell_vec3[2] - << ")" << std::endl; - } - return; + ModuleBase::TITLE("Grid_BigCell", "init_big_latvec"); + // initialize the mesh cell vectors. + assert(nbx > 0); + assert(nby > 0); + assert(nbz >= 0); + + this->nat = ucell.nat; + // size of each big room (same shape with unitcell) + this->bigcell_vec1 = std::vector(3, 0.0); + this->bigcell_vec1[0] = ucell.a1.x / (double)nbx * ucell.lat0; + this->bigcell_vec1[1] = ucell.a1.y / (double)nbx * ucell.lat0; + this->bigcell_vec1[2] = ucell.a1.z / (double)nbx * ucell.lat0; + + this->bigcell_vec2 = std::vector(3, 0.0); + this->bigcell_vec2[0] = ucell.a2.x / (double)nby * ucell.lat0; + this->bigcell_vec2[1] = ucell.a2.y / (double)nby * ucell.lat0; + this->bigcell_vec2[2] = ucell.a2.z / (double)nby * ucell.lat0; + + this->bigcell_vec3 = std::vector(3, 0.0); + this->bigcell_vec3[0] = ucell.a3.x / (double)nbz * ucell.lat0; + this->bigcell_vec3[1] = ucell.a3.y / (double)nbz * ucell.lat0; + this->bigcell_vec3[2] = ucell.a3.z / (double)nbz * ucell.lat0; + + this->bigcell_latvec0.e11 = this->bigcell_vec1[0]; + this->bigcell_latvec0.e12 = this->bigcell_vec1[1]; + this->bigcell_latvec0.e13 = this->bigcell_vec1[2]; + + this->bigcell_latvec0.e21 = this->bigcell_vec2[0]; + this->bigcell_latvec0.e22 = this->bigcell_vec2[1]; + this->bigcell_latvec0.e23 = this->bigcell_vec2[2]; + + this->bigcell_latvec0.e31 = this->bigcell_vec3[0]; + this->bigcell_latvec0.e32 = this->bigcell_vec3[1]; + this->bigcell_latvec0.e33 = this->bigcell_vec3[2]; + + // why we need GT = bigcell_latvec0^(-1)? + // note that (i,j,k) is a grid point. + // (x,y,z) is the cartesian coordinates. + // because + // (x,y,z) = (i,j,k) * bigcell_latvec0 + // once we know (x,y,z) and bigcell_latvec0 + // we need to transform the formula to + // (x,y,z) * bigcell_latvec0^(-1) = (i,j,k) + this->bigcell_GT = this->bigcell_latvec0.Inverse(); + + if (PARAM.inp.test_gridt) + { + GlobalV::ofs_running << " the VECTORS of BIGCELL are (Bohr): " << std::endl; + GlobalV::ofs_running << " vec1( " << std::setw(15) << bigcell_vec1[0] << std::setw(15) << bigcell_vec1[1] + << std::setw(15) << bigcell_vec1[2] << ")" << std::endl; + + GlobalV::ofs_running << " vec2( " << std::setw(15) << bigcell_vec2[0] << std::setw(15) << bigcell_vec2[1] + << std::setw(15) << bigcell_vec2[2] << ")" << std::endl; + + GlobalV::ofs_running << " vec3( " << std::setw(15) << bigcell_vec3[0] << std::setw(15) << bigcell_vec3[1] + << std::setw(15) << bigcell_vec3[2] << ")" << std::endl; + } + return; } - -void Grid_BigCell::init_grid_expansion(const UnitCell& ucell,double* rcut) +void Grid_BigCell::init_grid_expansion(const UnitCell& ucell, double* rcut) { - ModuleBase::TITLE("Grid_BigCell","init_grid_expansion"); - - // calculate the max cutoff radius among all orbitals. - // then we will use this parameter to generate grid expansion. - - for(int T=0; Torbital_rmax = std::max( rcut[T], this->orbital_rmax); - } - if(PARAM.inp.test_gridt)ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"rmax of periodic grid (bohr)",orbital_rmax); - - // mohan fixed serious bug 2010-03-06 - // G = GT^T - // g1 = the norm of first std::vector of G - // g2 = the norm of second std::vector of G - // g3 = the norm of third std::vector of G - double g1 = sqrt(bigcell_GT.e11 * bigcell_GT.e11 - + bigcell_GT.e21 * bigcell_GT.e21 - + bigcell_GT.e31 * bigcell_GT.e31); - - double g2 = sqrt(bigcell_GT.e12 * bigcell_GT.e12 - + bigcell_GT.e22 * bigcell_GT.e22 - + bigcell_GT.e32 * bigcell_GT.e32); - - double g3 = sqrt(bigcell_GT.e13 * bigcell_GT.e13 - + bigcell_GT.e23 * bigcell_GT.e23 - + bigcell_GT.e33 * bigcell_GT.e33); - - // we assume the added bigcell can present even the atom - // is at the edge of the origin grid. - // mohan add +1, 2011-04-23 - this->dxe = static_cast( this->orbital_rmax * g1) +1; - this->dye = static_cast( this->orbital_rmax * g2) +1; - this->dze = static_cast( this->orbital_rmax * g3) +1; - //xiaohui add 'PARAM.inp.out_level' line, 2015-09-16 - if(PARAM.inp.out_level != "m") ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"extended fft grid",dxe,dye,dze); - - // calculate the dimension of expanded grid. - // +1 in order to cover the spillage atom on the right side. - assert(nbx>0); - assert(nby>0); - assert(nbz>=0); - - this->nxe = nbx + 2*dxe +1; - this->nye = nby + 2*dye +1; - this->nze = nbz + 2*dze +1; - this->nxyze = this->nxe * this->nye * this->nze; - - if(PARAM.inp.out_level != "m") ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"dimension of extened grid",nxe,nye,nze); - return; + ModuleBase::TITLE("Grid_BigCell", "init_grid_expansion"); + + // calculate the max cutoff radius among all orbitals. + // then we will use this parameter to generate grid expansion. + + for (int T = 0; T < ucell.ntype; T++) + { + this->orbital_rmax = std::max(rcut[T], this->orbital_rmax); + } + if (PARAM.inp.test_gridt) + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "rmax of periodic grid (bohr)", orbital_rmax); + + // mohan fixed serious bug 2010-03-06 + // G = GT^T + // g1 = the norm of first std::vector of G + // g2 = the norm of second std::vector of G + // g3 = the norm of third std::vector of G + double g1 + = sqrt(bigcell_GT.e11 * bigcell_GT.e11 + bigcell_GT.e21 * bigcell_GT.e21 + bigcell_GT.e31 * bigcell_GT.e31); + + double g2 + = sqrt(bigcell_GT.e12 * bigcell_GT.e12 + bigcell_GT.e22 * bigcell_GT.e22 + bigcell_GT.e32 * bigcell_GT.e32); + + double g3 + = sqrt(bigcell_GT.e13 * bigcell_GT.e13 + bigcell_GT.e23 * bigcell_GT.e23 + bigcell_GT.e33 * bigcell_GT.e33); + + // we assume the added bigcell can present even the atom + // is at the edge of the origin grid. + // mohan add +1, 2011-04-23 + this->dxe = static_cast(this->orbital_rmax * g1) + 1; + this->dye = static_cast(this->orbital_rmax * g2) + 1; + this->dze = static_cast(this->orbital_rmax * g3) + 1; + // xiaohui add 'PARAM.inp.out_level' line, 2015-09-16 + if (PARAM.inp.out_level != "m") + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "extended fft grid", dxe, dye, dze); + + // calculate the dimension of expanded grid. + // +1 in order to cover the spillage atom on the right side. + assert(nbx > 0); + assert(nby > 0); + assert(nbz >= 0); + + this->nxe = nbx + 2 * dxe + 1; + this->nye = nby + 2 * dye + 1; + this->nze = nbz + 2 * dze + 1; + this->nxyze = this->nxe * this->nye * this->nze; + + if (PARAM.inp.out_level != "m") + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "dimension of extened grid", nxe, nye, nze); + return; } - void Grid_BigCell::init_tau_in_bigcell(const UnitCell& ucell) { - ModuleBase::TITLE("Grid_BigCell","init_tau_in_bigcell"); - - // allcoate space for atom positions relative - // to meshcell. - this->tau_in_bigcell = std::vector>(ucell.nat,std::vector(3,0.0)); - ModuleBase::Memory::record("tau_in_bigcell", sizeof(double) * ucell.nat*3); - // allocate space, these arrays record which meshcell - // the atom is in. - this->index_atom = std::vector(ucell.nat, 0); - ModuleBase::Memory::record("index_atom", sizeof(double) * ucell.nat); - - // get the fraction number of (i,j,k) - ModuleBase::Vector3 fraction; - int iat=0; - int ii,jj,kk; - double delta[3]; - for(int it=0; itbigcell_GT; - - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - // mohan add 2012-07-03, - // this can make sure faction are always larger than 0. - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - fraction.x = ucell.atoms[it].taud[ia].x / (1.0/(double)nbx); - fraction.y = ucell.atoms[it].taud[ia].y / (1.0/(double)nby); - fraction.z = ucell.atoms[it].taud[ia].z / (1.0/(double)nbz); - - // never use the following, especially for k-algorithm, - // it may move the atom to a cell that it doesn't belong - // to - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - // mohan add 2012-06-07 - // fraction may be very very small, about -1.0e-15, - // and the fraction must > 0, so I use periodic boundary condition -// if( fraction.x < 0.0 ) fraction.x += nxe; -// if( fraction.y < 0.0 ) fraction.y += nye; -// if( fraction.z < 0.0 ) fraction.z += nze; - - - - if( fraction.x < 0 || fraction.y < 0 || fraction.z < 0) - { - std::cout << " Atom positions " << std::endl; - std::cout << ucell.atoms[it].tau[ia].x << " " ; - std::cout << ucell.atoms[it].tau[ia].y << " " ; - std::cout << ucell.atoms[it].tau[ia].z << " " ; - std::cout << " fraction " << std::endl; - std::cout << fraction.x << " "; - std::cout << fraction.y << " "; - std::cout << fraction.z << " "; - std::cout << std::endl; - ModuleBase::WARNING_QUIT("Grid_BigCell::init_tau_in_bigcell","fraction.x<0 || fraction.y<0 || fraction.z<0"); - } - - assert(fraction.x >= 0.0); - assert(fraction.y >= 0.0); - assert(fraction.z >= 0.0); - - // make clean which meshcell the atom is in. - ii = static_cast(fraction.x+1.0e-8); - jj = static_cast(fraction.y+1.0e-8); - kk = static_cast(fraction.z+1.0e-8); - - // calculate the index of each corresponding meshcell. - // Notice ! In fact, we need to minus ii,jj,kk by 1. - // to label the atom belong to which meshcell - // in a usual way: left, down corner. - // if we dont' do this, means the start position - // of atom is another tyep: right,up corner. - // which cause minus atom position in grid integration. - - // index_atom: atom 'iat' index in extended grid. - this->index_atom[iat] = (kk+dze) + (jj+dye) * this->nze + (ii+dxe) * this->nye * this->nze; - - /* - if(index_atom[iat]==3483935) - { - std::cout << "\n i=" << kk+dze << " j=" << jj+dye << " k=" << ii+dxe; - BLOCK_HERE("check index atom"); - } - */ - - // get the relative position in direct coordinate. - delta[0] = fraction.x - (double)ii; - delta[1] = fraction.y - (double)jj; - delta[2] = fraction.z - (double)kk; - - if( std::abs(delta[0]) < 1.0e-8) delta[0] = 0.0; - if( std::abs(delta[1]) < 1.0e-8) delta[1] = 0.0; - if( std::abs(delta[2]) < 1.0e-8) delta[2] = 0.0; - -// std::cout << " fraction=" << fraction.x << " " << fraction.y << " " << fraction.z << std::endl; -// std::cout << " delta=" << delta[0] << " " << delta[1] << " " << delta[2] << std::endl; - - // get the true relative cartesian coordinate of each atom to the coresponding - // meshcell. - for(int ic=0; ic<3; ic++) - { - this->tau_in_bigcell[iat][ic] = - delta[0] * this->bigcell_vec1[ic] + - delta[1] * this->bigcell_vec2[ic] + - delta[2] * this->bigcell_vec3[ic]; - } - - ++iat; - } - } - - return; + ModuleBase::TITLE("Grid_BigCell", "init_tau_in_bigcell"); + + // allcoate space for atom positions relative + // to meshcell. + this->tau_in_bigcell = std::vector>(ucell.nat, std::vector(3, 0.0)); + ModuleBase::Memory::record("tau_in_bigcell", sizeof(double) * ucell.nat * 3); + // allocate space, these arrays record which meshcell + // the atom is in. + this->index_atom = std::vector(ucell.nat, 0); + ModuleBase::Memory::record("index_atom", sizeof(double) * ucell.nat); + + // get the fraction number of (i,j,k) + ModuleBase::Vector3 fraction; + int iat = 0; + int ii, jj, kk; + double delta[3]; + for (int it = 0; it < ucell.ntype; it++) + { + for (int ia = 0; ia < ucell.atoms[it].na; ia++) + { + // direct positions of atoms calculated from cartesian coordinates. + // not used because the factrion may be <0 (although very small, such as + // -1.0e-15) mohan note 2012-07-03 + // fraction = ( ucell.atoms[it].tau[ia] * ucell.lat0 )* this->bigcell_GT; + + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // mohan add 2012-07-03, + // this can make sure faction are always larger than 0. + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + fraction.x = ucell.atoms[it].taud[ia].x / (1.0 / (double)nbx); + fraction.y = ucell.atoms[it].taud[ia].y / (1.0 / (double)nby); + fraction.z = ucell.atoms[it].taud[ia].z / (1.0 / (double)nbz); + + // never use the following, especially for k-algorithm, + // it may move the atom to a cell that it doesn't belong + // to + //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // mohan add 2012-06-07 + // fraction may be very very small, about -1.0e-15, + // and the fraction must > 0, so I use periodic boundary condition + // if( fraction.x < 0.0 ) fraction.x += nxe; + // if( fraction.y < 0.0 ) fraction.y += nye; + // if( fraction.z < 0.0 ) fraction.z += nze; + + if (fraction.x < 0 || fraction.y < 0 || fraction.z < 0) + { + std::cout << " Atom positions " << std::endl; + std::cout << ucell.atoms[it].tau[ia].x << " "; + std::cout << ucell.atoms[it].tau[ia].y << " "; + std::cout << ucell.atoms[it].tau[ia].z << " "; + std::cout << " fraction " << std::endl; + std::cout << fraction.x << " "; + std::cout << fraction.y << " "; + std::cout << fraction.z << " "; + std::cout << std::endl; + ModuleBase::WARNING_QUIT("Grid_BigCell::init_tau_in_bigcell", + "fraction.x<0 || fraction.y<0 || fraction.z<0"); + } + + assert(fraction.x >= 0.0); + assert(fraction.y >= 0.0); + assert(fraction.z >= 0.0); + + // make clean which meshcell the atom is in. + ii = static_cast(fraction.x + 1.0e-8); + jj = static_cast(fraction.y + 1.0e-8); + kk = static_cast(fraction.z + 1.0e-8); + + // calculate the index of each corresponding meshcell. + // Notice ! In fact, we need to minus ii,jj,kk by 1. + // to label the atom belong to which meshcell + // in a usual way: left, down corner. + // if we dont' do this, means the start position + // of atom is another tyep: right,up corner. + // which cause minus atom position in grid integration. + + // index_atom: atom 'iat' index in extended grid. + this->index_atom[iat] = (kk + dze) + (jj + dye) * this->nze + (ii + dxe) * this->nye * this->nze; + + /* + if(index_atom[iat]==3483935) + { + std::cout << "\n i=" << kk+dze << " j=" << jj+dye << " k=" << ii+dxe; + BLOCK_HERE("check index atom"); + } + */ + + // get the relative position in direct coordinate. + delta[0] = fraction.x - (double)ii; + delta[1] = fraction.y - (double)jj; + delta[2] = fraction.z - (double)kk; + + if (std::abs(delta[0]) < 1.0e-8) + delta[0] = 0.0; + if (std::abs(delta[1]) < 1.0e-8) + delta[1] = 0.0; + if (std::abs(delta[2]) < 1.0e-8) + delta[2] = 0.0; + + // std::cout << " fraction=" << fraction.x << " " << fraction.y << " " << fraction.z << std::endl; + // std::cout << " delta=" << delta[0] << " " << delta[1] << " " << delta[2] << std::endl; + + // get the true relative cartesian coordinate of each atom to the coresponding + // meshcell. + for (int ic = 0; ic < 3; ic++) + { + this->tau_in_bigcell[iat][ic] = delta[0] * this->bigcell_vec1[ic] + delta[1] * this->bigcell_vec2[ic] + + delta[2] * this->bigcell_vec3[ic]; + } + + ++iat; + } + } + + return; } // (3) // if f2normal == true, calculate the index2normal. -// if f2normal == false, calculate the index2cell. -void Grid_BigCell::grid_expansion_index(bool f2normal, int *target)const +// if f2normal == false, calculate the index2cell. +void Grid_BigCell::grid_expansion_index(bool f2normal, int* target) const { - ModuleBase::TITLE("Grid_BigCell","grid_expansion_index"); - ModuleBase::timer::tick("Grid_BigCell","grid_expansion_index"); - - int ii,jj,kk,in_ext,in_normal; - for(int i=0; inxe; i++) - { - for(int j=0; jnye; j++) - { - for(int k=0; knze; k++) - { - in_ext = k + j * this->nze + i * this->nye * this->nze; - - // range from [-dxe,ncx+dxe] - ii = i - this->dxe; - jj = j - this->dye; - kk = k - this->dze; - - //--------------------------------------------------- - // mohan add 2010-10-28 - // be careful of the box. - // it's useful only when k points are used in LCAO. - // for example, we construct a 2D supercell - // and using 32 * 32 FFT grid (bigcell ) to do - // grid integration, - // then the first cell (0,0) along x is [0,31) - // others are: - // cell index: (-2,0) , (-1,0) , (0,0), (0,1) - // fft index: [-64,-33], [-32,-1], [0,31], [32,63]. - // look at the formulas below, - // at first, we take grid_index2ucell1=(ii/nbx) - // but then we found it is wrong if ii < 0. - // for example, if ii is -31, the box is -1, - // so we add -1, the formula turns to ii/nbx-1, - // but if ii is -32, the box is -1-1 = -2, not correct. - // so we add 1 to ii, the box will be -31/32-1=-1, correct! - // the formula is (ii+1)/nbx-1, - // if ii is -1, the box is still -1, correct! - // if ii is -33, the box is -2, correct! - //--------------------------------------------------- - - int cel1, cel2, cel3; - - if(ii<0) cel1 = (ii+1) / nbx - 1; - else cel1 = ii / nbx; - if(jj<0) cel2 = (jj+1) / nby - 1; - else cel2 = jj / nby; - if(kk<0) cel3 = (kk+1) / nbz - 1; - else cel3 = kk / nbz; - - if(!f2normal) - { - // target: index2ucell - target[in_ext] = this->cal_Rindex(cel1, cel2, cel3); - } - else - { - // if ii < 0, we need to make ii > 0. - // so we add 10000 layers. It should be enough. - // ii, jj, kk shoudl -- ????????????? - ii = (ii + 10000 * nbx) % nbx; - jj = (jj + 10000 * nby) % nby; - kk = (kk + 10000 * nbz) % nbz; - - assert(ii>=0); - assert(jj>=0); - assert(kk>=0); - - assert( in_ext < nxyze); - - if(iinxe; i++) + { + for (int j = 0; j < this->nye; j++) + { + for (int k = 0; k < this->nze; k++) + { + in_ext = k + j * this->nze + i * this->nye * this->nze; + + // range from [-dxe,ncx+dxe] + ii = i - this->dxe; + jj = j - this->dye; + kk = k - this->dze; + + //--------------------------------------------------- + // mohan add 2010-10-28 + // be careful of the box. + // it's useful only when k points are used in LCAO. + // for example, we construct a 2D supercell + // and using 32 * 32 FFT grid (bigcell ) to do + // grid integration, + // then the first cell (0,0) along x is [0,31) + // others are: + // cell index: (-2,0) , (-1,0) , (0,0), (0,1) + // fft index: [-64,-33], [-32,-1], [0,31], [32,63]. + // look at the formulas below, + // at first, we take grid_index2ucell1=(ii/nbx) + // but then we found it is wrong if ii < 0. + // for example, if ii is -31, the box is -1, + // so we add -1, the formula turns to ii/nbx-1, + // but if ii is -32, the box is -1-1 = -2, not correct. + // so we add 1 to ii, the box will be -31/32-1=-1, correct! + // the formula is (ii+1)/nbx-1, + // if ii is -1, the box is still -1, correct! + // if ii is -33, the box is -2, correct! + //--------------------------------------------------- + + int cel1, cel2, cel3; + + if (ii < 0) + cel1 = (ii + 1) / nbx - 1; + else + cel1 = ii / nbx; + if (jj < 0) + cel2 = (jj + 1) / nby - 1; + else + cel2 = jj / nby; + if (kk < 0) + cel3 = (kk + 1) / nbz - 1; + else + cel3 = kk / nbz; + + if (!f2normal) + { + // target: index2ucell + target[in_ext] = this->cal_Rindex(cel1, cel2, cel3); + } + else + { + // if ii < 0, we need to make ii > 0. + // so we add 10000 layers. It should be enough. + // ii, jj, kk shoudl -- ????????????? + ii = (ii + 10000 * nbx) % nbx; + jj = (jj + 10000 * nby) % nby; + kk = (kk + 10000 * nbz) % nbz; + + assert(ii >= 0); + assert(jj >= 0); + assert(kk >= 0); + + assert(in_ext < nxyze); + + if (ii < nbx && jj < nby && kk < nbz) + { + in_normal = kk + jj * nbz + ii * nby * nbz; + + // target: index2normal + target[in_ext] = in_normal; + } + else + { + ModuleBase::WARNING_QUIT("Grid_BigCell::init_grid_expansion_index", "check ii,jj,kk!"); + } + } // f2 normal + } // k + } // j + } // i + ModuleBase::timer::tick("Grid_BigCell", "grid_expansion_index"); + return; } diff --git a/source/module_hamilt_lcao/module_gint/grid_bigcell.h b/source/module_hamilt_lcao/module_gint/grid_bigcell.h index 10f52a7419..97ddea4567 100644 --- a/source/module_hamilt_lcao/module_gint/grid_bigcell.h +++ b/source/module_hamilt_lcao/module_gint/grid_bigcell.h @@ -1,59 +1,59 @@ #ifndef GRID_BIGCELL_H #define GRID_BIGCELL_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/matrix3.h" #include "grid_meshcell.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/matrix3.h" -class Grid_BigCell: public Grid_MeshCell +class Grid_BigCell : public Grid_MeshCell { - public: - Grid_BigCell(); - ~Grid_BigCell(); - // number atoms and type. - int nat=0; - // save the relative cartesian position - // to bigcell of each atom. - std::vector> tau_in_bigcell; - - /// move operator for the next ESolver to directly use its infomation - Grid_BigCell& operator=(Grid_BigCell&& rhs) = default; - - protected: - // get the max radius of all orbitals - // which will use to generate grid expansion, - // and the meshball. - double orbital_rmax; - - // the added number of bigcelli each direction. - int dxe; - int dye; - int dze; - - // expansion grid dimension. - int nxe; - int nye; - int nze; - int nxyze; - - std::vector index_atom; - - // save the position of base vector of bigcell. - std::vector bigcell_vec1; - std::vector bigcell_vec2; - std::vector bigcell_vec3; - - ModuleBase::Matrix3 bigcell_latvec0; - ModuleBase::Matrix3 bigcell_GT; - - //--------------------------------- - void grid_expansion_index(bool f2normal, int *target)const; - //--------------------------------- - void init_big_latvec(const UnitCell &ucell); - //--------------------------------- - void init_tau_in_bigcell(const UnitCell& ucell); - //--------------------------------- - void init_grid_expansion(const UnitCell& ucell,double* rcut); + public: + Grid_BigCell(); + ~Grid_BigCell(); + // number atoms and type. + int nat = 0; + // save the relative cartesian position + // to bigcell of each atom. + std::vector> tau_in_bigcell; + + /// move operator for the next ESolver to directly use its infomation + Grid_BigCell& operator=(Grid_BigCell&& rhs) = default; + + protected: + // get the max radius of all orbitals + // which will use to generate grid expansion, + // and the meshball. + double orbital_rmax; + + // the added number of bigcelli each direction. + int dxe; + int dye; + int dze; + + // expansion grid dimension. + int nxe; + int nye; + int nze; + int nxyze; + + std::vector index_atom; + + // save the position of base vector of bigcell. + std::vector bigcell_vec1; + std::vector bigcell_vec2; + std::vector bigcell_vec3; + + ModuleBase::Matrix3 bigcell_latvec0; + ModuleBase::Matrix3 bigcell_GT; + + //--------------------------------- + void grid_expansion_index(bool f2normal, int* target) const; + //--------------------------------- + void init_big_latvec(const UnitCell& ucell); + //--------------------------------- + void init_tau_in_bigcell(const UnitCell& ucell); + //--------------------------------- + void init_grid_expansion(const UnitCell& ucell, double* rcut); }; #endif diff --git a/source/module_hamilt_lcao/module_gint/grid_meshball.cpp b/source/module_hamilt_lcao/module_gint/grid_meshball.cpp index 797581316d..ee1f248b7e 100644 --- a/source/module_hamilt_lcao/module_gint/grid_meshball.cpp +++ b/source/module_hamilt_lcao/module_gint/grid_meshball.cpp @@ -1,6 +1,7 @@ #include "grid_meshball.h" -#include "module_base/memory.h" + #include "module_parameter/parameter.h" +#include "source_base/memory.h" Grid_MeshBall::Grid_MeshBall() { @@ -11,132 +12,130 @@ Grid_MeshBall::~Grid_MeshBall() } void Grid_MeshBall::init_meshball() -{ - ModuleBase::TITLE("Grid_MeshBall","init_meshball"); +{ + ModuleBase::TITLE("Grid_MeshBall", "init_meshball"); // init meshball_radius, generally the value // is same as orbital_rmax, of course you can // incrase meshball_radius, but there will be // no atoms in the added bigcells. // (in case subcell are too many). - this->meshball_radius = this->orbital_rmax; - - // select a ball in a cubic. - double pos[3]; - double r2=0.0; - - //------------------------------------------------------------------ - // const double rcut2 = this->meshball_radius * this->meshball_radius; - // qianrui fix a bug and add 0.001 2022-4-30 - // Sometimes r2 is equal to rcut2, for example they are 36. - // However, r2 is either 35.99.. or 36.0..001, which makes count != this->meshball_ncells - // and segment fault. - // I do not know how to solve it and this may occurs in somewhere else in ABACUS. - // May some genius can give a better solution. - //------------------------------------------------------------------ - const double rcut2 = this->meshball_radius * this->meshball_radius + 0.001; - - //------------------------------------------------------------------- - // calculate twice, the first time find the number of mesh points, - // then allocate array and save each bigcell's cartesian coordinate. - // plus one because we need to cover atom spillage. - // meshball_ncells: How many cells in mesh ball. - //------------------------------------------------------------------- - this->meshball_ncells = 0; - for(int i=-dxe; ideal_with_atom_spillage( pos ); - //r2 = pos[0]*pos[0]+pos[1]*pos[1]+pos[2]*pos[2]; - - // calculate the distance. - if( r2 < rcut2 ) - { - ++meshball_ncells; - } - } - } - } - if(PARAM.inp.test_gridt) {ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "how many cells in meshball",this->meshball_ncells); -} + this->meshball_radius = this->orbital_rmax; + + // select a ball in a cubic. + double pos[3]; + double r2 = 0.0; + + //------------------------------------------------------------------ + // const double rcut2 = this->meshball_radius * this->meshball_radius; + // qianrui fix a bug and add 0.001 2022-4-30 + // Sometimes r2 is equal to rcut2, for example they are 36. + // However, r2 is either 35.99.. or 36.0..001, which makes count != this->meshball_ncells + // and segment fault. + // I do not know how to solve it and this may occurs in somewhere else in ABACUS. + // May some genius can give a better solution. + //------------------------------------------------------------------ + const double rcut2 = this->meshball_radius * this->meshball_radius + 0.001; + + //------------------------------------------------------------------- + // calculate twice, the first time find the number of mesh points, + // then allocate array and save each bigcell's cartesian coordinate. + // plus one because we need to cover atom spillage. + // meshball_ncells: How many cells in mesh ball. + //------------------------------------------------------------------- + this->meshball_ncells = 0; + for (int i = -dxe; i < dxe + 1; i++) // mohan fix bug 2009-10-21, range should be [-dxe,dxe] + { + for (int j = -dye; j < dye + 1; j++) + { + for (int k = -dze; k < dze + 1; k++) + { + // caclculate the std::vector away from 'zero point'. + for (int ip = 0; ip < 3; ip++) + { + pos[ip] = i * bigcell_vec1[ip] + j * bigcell_vec2[ip] + k * bigcell_vec3[ip]; + } + r2 = this->deal_with_atom_spillage(pos); + // r2 = pos[0]*pos[0]+pos[1]*pos[1]+pos[2]*pos[2]; + + // calculate the distance. + if (r2 < rcut2) + { + ++meshball_ncells; + } + } + } + } + if (PARAM.inp.test_gridt) + { + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "how many cells in meshball", this->meshball_ncells); + } - // prepare for the second calculation. - this->meshball_positions = std::vector>(meshball_ncells, std::vector(3, 0.0)); - ModuleBase::Memory::record("meshball_pos", sizeof(double) * meshball_ncells*3); + // prepare for the second calculation. + this->meshball_positions = std::vector>(meshball_ncells, std::vector(3, 0.0)); + ModuleBase::Memory::record("meshball_pos", sizeof(double) * meshball_ncells * 3); this->index_ball = std::vector(meshball_ncells); - ModuleBase::Memory::record("index_ball", sizeof(int) * meshball_ncells); - - // second time. - int count = 0; - for(int i=-dxe; idxe+1; i++) - { - for(int j=-dye; jdye+1; j++) - { - for(int k=-dze; kdze+1; k++) - { - // caclculate the std::vector away from 'zero point'. - // change to cartesian coordinates. - for(int ip=0; ip<3; ip++) - { - pos[ip] = i*bigcell_vec1[ip]+j*bigcell_vec2[ip]+k*bigcell_vec3[ip]; - } - r2 = this->deal_with_atom_spillage( pos ); - - // calculate the distance. - if( r2 < rcut2 ) - { - for(int ip=0; ip<3; ip++) - { - this->meshball_positions[count][ip] = pos[ip]; - } - - // record each position. - this->index_ball[count] = k + j * this->nze + i * this->nye * this->nze; - ++count; - } - } - } - } - - assert(count == this->meshball_ncells); - return; -} + ModuleBase::Memory::record("index_ball", sizeof(int) * meshball_ncells); -double Grid_MeshBall::deal_with_atom_spillage(const double *pos) -{ - double dx; - double r2 = 100000; - double *cell=new double[3]; - - for(int i=-1; i<=1; i++) - { - for(int j=-1; j<=1; j++) - { - for(int k=-1; k<=1; k++) - { - dx = 0.0; - for(int ip=0; ip<3; ip++) - { - // change to cartesian coordinates. - cell[ip] = i*this->bigcell_vec1[ip] + - j*this->bigcell_vec2[ip] + - k*this->bigcell_vec3[ip]; - dx += (cell[ip] - pos[ip]) * (cell[ip] - pos[ip]); - } - r2 = std::min(dx, r2); - } - } - } - delete[] cell; - return r2; + // second time. + int count = 0; + for (int i = -dxe; i < this->dxe + 1; i++) + { + for (int j = -dye; j < this->dye + 1; j++) + { + for (int k = -dze; k < this->dze + 1; k++) + { + // caclculate the std::vector away from 'zero point'. + // change to cartesian coordinates. + for (int ip = 0; ip < 3; ip++) + { + pos[ip] = i * bigcell_vec1[ip] + j * bigcell_vec2[ip] + k * bigcell_vec3[ip]; + } + r2 = this->deal_with_atom_spillage(pos); + + // calculate the distance. + if (r2 < rcut2) + { + for (int ip = 0; ip < 3; ip++) + { + this->meshball_positions[count][ip] = pos[ip]; + } + + // record each position. + this->index_ball[count] = k + j * this->nze + i * this->nye * this->nze; + ++count; + } + } + } + } + + assert(count == this->meshball_ncells); + return; } +double Grid_MeshBall::deal_with_atom_spillage(const double* pos) +{ + double dx; + double r2 = 100000; + double* cell = new double[3]; + for (int i = -1; i <= 1; i++) + { + for (int j = -1; j <= 1; j++) + { + for (int k = -1; k <= 1; k++) + { + dx = 0.0; + for (int ip = 0; ip < 3; ip++) + { + // change to cartesian coordinates. + cell[ip] = i * this->bigcell_vec1[ip] + j * this->bigcell_vec2[ip] + k * this->bigcell_vec3[ip]; + dx += (cell[ip] - pos[ip]) * (cell[ip] - pos[ip]); + } + r2 = std::min(dx, r2); + } + } + } + delete[] cell; + return r2; +} diff --git a/source/module_hamilt_lcao/module_gint/grid_meshcell.cpp b/source/module_hamilt_lcao/module_gint/grid_meshcell.cpp index c064c97436..04d9870479 100644 --- a/source/module_hamilt_lcao/module_gint/grid_meshcell.cpp +++ b/source/module_hamilt_lcao/module_gint/grid_meshcell.cpp @@ -1,8 +1,8 @@ #include "grid_meshcell.h" -#include "module_parameter/parameter.h" -#include "module_base/memory.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/memory.h" Grid_MeshCell::Grid_MeshCell() { @@ -12,20 +12,18 @@ Grid_MeshCell::~Grid_MeshCell() { } -void Grid_MeshCell::set_grid_dim( - const int &ncx_in, - const int &ncy_in, - const int &ncz_in, - const int &bx_in, - const int &by_in, - const int &bz_in, - const int &nbx_in, - const int &nby_in, - const int &nbz_in, - const int &nbxx_in, - const int &nbzp_start_in, - const int &nbzp_in - ) +void Grid_MeshCell::set_grid_dim(const int& ncx_in, + const int& ncy_in, + const int& ncz_in, + const int& bx_in, + const int& by_in, + const int& bz_in, + const int& nbx_in, + const int& nby_in, + const int& nbz_in, + const int& nbxx_in, + const int& nbzp_start_in, + const int& nbzp_in) { this->ncx = ncx_in; this->ncy = ncy_in; @@ -34,135 +32,129 @@ void Grid_MeshCell::set_grid_dim( this->bx = bx_in; this->by = by_in; this->bz = bz_in; - this->bxyz = bx*by*bz; + this->bxyz = bx * by * bz; this->nbx = nbx_in; this->nby = nby_in; this->nbz = nbz_in; - this->nbxyz = nbx*nby*nbz; + this->nbxyz = nbx * nby * nbz; this->nbxx = nbxx_in; this->nbzp_start = nbzp_start_in; this->nbzp = nbzp_in; - - //xiaohui add 'PARAM.inp.out_level' line, 2015-09-16 - if(PARAM.inp.out_level != "m") - { - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"real space grid",ncx,ncy,ncz); // real space uniform grid - } - - if(PARAM.inp.out_level != "m") - { - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"big cell numbers in grid",nbx,nby,nbz); // reduced by BIG_CELL - } - - if(PARAM.inp.out_level != "m") - { - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"meshcell numbers in big cell",bx,by,bz); // is small integer, typical number 2*2*2 - } + // xiaohui add 'PARAM.inp.out_level' line, 2015-09-16 + if (PARAM.inp.out_level != "m") + { + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "real space grid", ncx, ncy, ncz); // real space uniform grid + } + + if (PARAM.inp.out_level != "m") + { + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, + "big cell numbers in grid", + nbx, + nby, + nbz); // reduced by BIG_CELL + } + + if (PARAM.inp.out_level != "m") + { + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, + "meshcell numbers in big cell", + bx, + by, + bz); // is small integer, typical number 2*2*2 + } return; } - - // (1) -void Grid_MeshCell::init_latvec(const UnitCell &ucell) +void Grid_MeshCell::init_latvec(const UnitCell& ucell) { - ModuleBase::TITLE("Grid_MeshCell","init_latvec"); - // initialize the mesh cell vectors. - assert(ncx>0); - assert(ncy>0); - assert(ncz>0); - - //size of each room (same shape with unitcell) - this->meshcell_vec1=std::vector(3,0.0); - this->meshcell_vec1[0]=ucell.a1.x / (double)ncx * ucell.lat0; - this->meshcell_vec1[1]=ucell.a1.y / (double)ncx * ucell.lat0; - this->meshcell_vec1[2]=ucell.a1.z / (double)ncx * ucell.lat0; - - this->meshcell_vec2=std::vector(3,0.0); - this->meshcell_vec2[0]=ucell.a2.x / (double)ncy * ucell.lat0; - this->meshcell_vec2[1]=ucell.a2.y / (double)ncy * ucell.lat0; - this->meshcell_vec2[2]=ucell.a2.z / (double)ncy * ucell.lat0; - - this->meshcell_vec3=std::vector(3,0.0); - this->meshcell_vec3[0]=ucell.a3.x / (double)ncz * ucell.lat0; - this->meshcell_vec3[1]=ucell.a3.y / (double)ncz * ucell.lat0; - this->meshcell_vec3[2]=ucell.a3.z / (double)ncz * ucell.lat0; - - this->meshcell_latvec0.e11 = this->meshcell_vec1[0]; - this->meshcell_latvec0.e12 = this->meshcell_vec1[1]; - this->meshcell_latvec0.e13 = this->meshcell_vec1[2]; - - this->meshcell_latvec0.e21 = this->meshcell_vec2[0]; - this->meshcell_latvec0.e22 = this->meshcell_vec2[1]; - this->meshcell_latvec0.e23 = this->meshcell_vec2[2]; - - this->meshcell_latvec0.e31 = this->meshcell_vec3[0]; - this->meshcell_latvec0.e32 = this->meshcell_vec3[1]; - this->meshcell_latvec0.e33 = this->meshcell_vec3[2]; - - // why we need GT = meshcell_latvec0^(-1)? - // note that (i,j,k) is a grid point. - // (x,y,z) is the cartesian coordinates. - // because - // (x,y,z) = (i,j,k) * meshcell_latvec0 - // once we know (x,y,z) and meshcell_latvec0 - // we need to transform the formula to - // (x,y,z) * meshcell_latvec0^(-1) = (i,j,k) - this->meshcell_GT = this->meshcell_latvec0.Inverse(); - - if(PARAM.inp.test_gridt) - { - GlobalV::ofs_running << " the VECTORS of MESHCELL are (Bohr): " << std::endl; - GlobalV::ofs_running << " vec1( " - << std::setw(15) << meshcell_vec1[0] - << std::setw(15) << meshcell_vec1[1] - << std::setw(15) << meshcell_vec1[2] - << ")" << std::endl; - - GlobalV::ofs_running << " vec2( " - << std::setw(15) << meshcell_vec2[0] - << std::setw(15) << meshcell_vec2[1] - << std::setw(15) << meshcell_vec2[2] - << ")" << std::endl; - - GlobalV::ofs_running << " vec3( " - << std::setw(15) << meshcell_vec3[0] - << std::setw(15) << meshcell_vec3[1] - << std::setw(15) << meshcell_vec3[2] - << ")" << std::endl; - } - - return; + ModuleBase::TITLE("Grid_MeshCell", "init_latvec"); + // initialize the mesh cell vectors. + assert(ncx > 0); + assert(ncy > 0); + assert(ncz > 0); + + // size of each room (same shape with unitcell) + this->meshcell_vec1 = std::vector(3, 0.0); + this->meshcell_vec1[0] = ucell.a1.x / (double)ncx * ucell.lat0; + this->meshcell_vec1[1] = ucell.a1.y / (double)ncx * ucell.lat0; + this->meshcell_vec1[2] = ucell.a1.z / (double)ncx * ucell.lat0; + + this->meshcell_vec2 = std::vector(3, 0.0); + this->meshcell_vec2[0] = ucell.a2.x / (double)ncy * ucell.lat0; + this->meshcell_vec2[1] = ucell.a2.y / (double)ncy * ucell.lat0; + this->meshcell_vec2[2] = ucell.a2.z / (double)ncy * ucell.lat0; + + this->meshcell_vec3 = std::vector(3, 0.0); + this->meshcell_vec3[0] = ucell.a3.x / (double)ncz * ucell.lat0; + this->meshcell_vec3[1] = ucell.a3.y / (double)ncz * ucell.lat0; + this->meshcell_vec3[2] = ucell.a3.z / (double)ncz * ucell.lat0; + + this->meshcell_latvec0.e11 = this->meshcell_vec1[0]; + this->meshcell_latvec0.e12 = this->meshcell_vec1[1]; + this->meshcell_latvec0.e13 = this->meshcell_vec1[2]; + + this->meshcell_latvec0.e21 = this->meshcell_vec2[0]; + this->meshcell_latvec0.e22 = this->meshcell_vec2[1]; + this->meshcell_latvec0.e23 = this->meshcell_vec2[2]; + + this->meshcell_latvec0.e31 = this->meshcell_vec3[0]; + this->meshcell_latvec0.e32 = this->meshcell_vec3[1]; + this->meshcell_latvec0.e33 = this->meshcell_vec3[2]; + + // why we need GT = meshcell_latvec0^(-1)? + // note that (i,j,k) is a grid point. + // (x,y,z) is the cartesian coordinates. + // because + // (x,y,z) = (i,j,k) * meshcell_latvec0 + // once we know (x,y,z) and meshcell_latvec0 + // we need to transform the formula to + // (x,y,z) * meshcell_latvec0^(-1) = (i,j,k) + this->meshcell_GT = this->meshcell_latvec0.Inverse(); + + if (PARAM.inp.test_gridt) + { + GlobalV::ofs_running << " the VECTORS of MESHCELL are (Bohr): " << std::endl; + GlobalV::ofs_running << " vec1( " << std::setw(15) << meshcell_vec1[0] << std::setw(15) << meshcell_vec1[1] + << std::setw(15) << meshcell_vec1[2] << ")" << std::endl; + + GlobalV::ofs_running << " vec2( " << std::setw(15) << meshcell_vec2[0] << std::setw(15) << meshcell_vec2[1] + << std::setw(15) << meshcell_vec2[2] << ")" << std::endl; + + GlobalV::ofs_running << " vec3( " << std::setw(15) << meshcell_vec3[0] << std::setw(15) << meshcell_vec3[1] + << std::setw(15) << meshcell_vec3[2] << ")" << std::endl; + } + + return; } void Grid_MeshCell::init_meshcell_pos(void) { - assert(bx>0); - assert(by>0); - assert(bz>0); - assert(bxyz>0); - - meshcell_pos = std::vector>(bxyz,std::vector(3,0.0)); - ModuleBase::Memory::record("meshcell_pos", sizeof(double) * bxyz*3); - - int index=0; - for(int i=0; i 0); + assert(by > 0); + assert(bz > 0); + assert(bxyz > 0); + + meshcell_pos = std::vector>(bxyz, std::vector(3, 0.0)); + ModuleBase::Memory::record("meshcell_pos", sizeof(double) * bxyz * 3); + + int index = 0; + for (int i = 0; i < bx; i++) + { + for (int j = 0; j < by; j++) + { + for (int k = 0; k < bz; k++) + { + for (int p = 0; p < 3; p++) + { + meshcell_pos[index][p] = i * meshcell_vec1[p] + j * meshcell_vec2[p] + k * meshcell_vec3[p]; + } + ++index; + } + } + } + return; } - - diff --git a/source/module_hamilt_lcao/module_gint/grid_meshcell.h b/source/module_hamilt_lcao/module_gint/grid_meshcell.h index 67a1863ed0..78d542e60d 100644 --- a/source/module_hamilt_lcao/module_gint/grid_meshcell.h +++ b/source/module_hamilt_lcao/module_gint/grid_meshcell.h @@ -1,56 +1,53 @@ #ifndef GRID_MESHCELL_H #define GRID_MESHCELL_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/matrix3.h" #include "grid_meshk.h" #include "module_cell/unitcell.h" -class Grid_MeshCell: public Grid_MeshK +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/matrix3.h" +class Grid_MeshCell : public Grid_MeshK { - public: - Grid_MeshCell(); - ~Grid_MeshCell(); - - int ncx,ncy,ncz,ncxyz; - int bx=1,by=1,bz=1,bxyz=1; - int nbx,nby,nbz,nbxyz; - int nbxx; - int nbzp_start,nbzp; - // save the position of each meshcell. - std::vector> meshcell_pos; + public: + Grid_MeshCell(); + ~Grid_MeshCell(); - private: - // latvec0 and GT are not used in current code. - // these two variables may be removed in the future. - ModuleBase::Matrix3 meshcell_latvec0; - ModuleBase::Matrix3 meshcell_GT; - - protected: + int ncx, ncy, ncz, ncxyz; + int bx = 1, by = 1, bz = 1, bxyz = 1; + int nbx, nby, nbz, nbxyz; + int nbxx; + int nbzp_start, nbzp; + // save the position of each meshcell. + std::vector> meshcell_pos; - std::vector meshcell_vec1; - std::vector meshcell_vec2; - std::vector meshcell_vec3; + private: + // latvec0 and GT are not used in current code. + // these two variables may be removed in the future. + ModuleBase::Matrix3 meshcell_latvec0; + ModuleBase::Matrix3 meshcell_GT; + + protected: + std::vector meshcell_vec1; + std::vector meshcell_vec2; + std::vector meshcell_vec3; /// move operator for the next ESolver to directly use its infomation Grid_MeshCell& operator=(Grid_MeshCell&& rhs) = default; - void set_grid_dim( - const int &ncx_in, - const int &ncy_in, - const int &ncz_in, - const int &bx_in, - const int &by_in, - const int &bz_in, - const int &nbx_in, - const int &nby_in, - const int &nbz_in, - const int &nbxx_in, - const int &nbzp_start_in, - const int &nbzp_in); + void set_grid_dim(const int& ncx_in, + const int& ncy_in, + const int& ncz_in, + const int& bx_in, + const int& by_in, + const int& bz_in, + const int& nbx_in, + const int& nby_in, + const int& nbz_in, + const int& nbxx_in, + const int& nbzp_start_in, + const int& nbzp_in); - void init_latvec(const UnitCell &ucell); + void init_latvec(const UnitCell& ucell); void init_meshcell_pos(); - }; #endif diff --git a/source/module_hamilt_lcao/module_gint/grid_meshk.h b/source/module_hamilt_lcao/module_gint/grid_meshk.h index 22f27e1c78..5e31df1d27 100644 --- a/source/module_hamilt_lcao/module_gint/grid_meshk.h +++ b/source/module_hamilt_lcao/module_gint/grid_meshk.h @@ -1,48 +1,52 @@ #ifndef GRID_MESHK_H #define GRID_MESHK_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/vector3.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/vector3.h" class Grid_MeshK { - public: - Grid_MeshK(); - ~Grid_MeshK(); - - // calculate the index of unitcell. - int cal_Rindex(const int& u1, const int& u2, const int& u3)const; - - ModuleBase::Vector3 get_ucell_coords(const int& Rindex)const; - - /// move operator for the next ESolver to directly use its infomation - Grid_MeshK& operator=(Grid_MeshK&& rhs) = default; - - private: - // the max and the min unitcell. - int maxu1; - int maxu2; - int maxu3; - - int minu1; - int minu2; - int minu3; - - // the number of unitcells. - int nu1; - int nu2; - int nu3; - int nutot; - - // from 1D index to unitcell. - std::vector ucell_index2x; - std::vector ucell_index2y; - std::vector ucell_index2z; - - protected: - // calculate the extended unitcell. - void cal_extended_cell(const int &dxe, const int &dye, const int &dze, - const int& nbx, const int& nby, const int& nbz); + public: + Grid_MeshK(); + ~Grid_MeshK(); + + // calculate the index of unitcell. + int cal_Rindex(const int& u1, const int& u2, const int& u3) const; + + ModuleBase::Vector3 get_ucell_coords(const int& Rindex) const; + + /// move operator for the next ESolver to directly use its infomation + Grid_MeshK& operator=(Grid_MeshK&& rhs) = default; + + private: + // the max and the min unitcell. + int maxu1; + int maxu2; + int maxu3; + + int minu1; + int minu2; + int minu3; + + // the number of unitcells. + int nu1; + int nu2; + int nu3; + int nutot; + + // from 1D index to unitcell. + std::vector ucell_index2x; + std::vector ucell_index2y; + std::vector ucell_index2z; + + protected: + // calculate the extended unitcell. + void cal_extended_cell(const int& dxe, + const int& dye, + const int& dze, + const int& nbx, + const int& nby, + const int& nbz); }; #endif diff --git a/source/module_hamilt_lcao/module_gint/grid_technique.cpp b/source/module_hamilt_lcao/module_gint/grid_technique.cpp index c61b7cc702..860e80cd6f 100644 --- a/source/module_hamilt_lcao/module_gint/grid_technique.cpp +++ b/source/module_hamilt_lcao/module_gint/grid_technique.cpp @@ -1,29 +1,33 @@ #if ((defined __CUDA) /* || (defined __ROCM) */) -#include #include "module_parameter/parameter.h" + +#include #endif #include "grid_technique.h" -#include "module_parameter/parameter.h" -#include "module_base/memory.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" +#include "module_hamilt_lcao/module_gint/temp_gint/gint_helper.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/memory.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" #include "source_hsolver/kernels/cuda/helper_cuda.h" -#include "module_hamilt_lcao/module_gint/temp_gint/gint_helper.h" - -Grid_Technique::Grid_Technique() { +Grid_Technique::Grid_Technique() +{ #if ((defined __CUDA) /* || (defined __ROCM) */) - if (PARAM.inp.device == "gpu") { + if (PARAM.inp.device == "gpu") + { is_malloced = false; } #endif } -Grid_Technique::~Grid_Technique() { +Grid_Technique::~Grid_Technique() +{ #if ((defined __CUDA) /* || (defined __ROCM) */) - if (PARAM.inp.device == "gpu") { + if (PARAM.inp.device == "gpu") + { free_gpu_gint_variables(this->nat); } #endif @@ -60,10 +64,9 @@ void Grid_Technique::set_pbc_grid(const int& ncx_in, ModuleBase::TITLE("Grid_Technique", "init"); ModuleBase::timer::tick("Grid_Technique", "init"); - if (PARAM.inp.out_level != "m") { - GlobalV::ofs_running - << "\n SETUP EXTENDED REAL SPACE GRID FOR GRID INTEGRATION" - << std::endl; + if (PARAM.inp.out_level != "m") + { + GlobalV::ofs_running << "\n SETUP EXTENDED REAL SPACE GRID FOR GRID INTEGRATION" << std::endl; } this->init_malloced = true; @@ -105,12 +108,7 @@ void Grid_Technique::set_pbc_grid(const int& ncx_in, this->init_grid_expansion(ucell, this->rcuts.data()); // (3) calculate the extended grid. - this->cal_extended_cell(this->dxe, - this->dye, - this->dze, - this->nbx, - this->nby, - this->nbz); + this->cal_extended_cell(this->dxe, this->dye, this->dze, this->nbx, this->nby, this->nbz); this->init_tau_in_bigcell(ucell); @@ -121,7 +119,8 @@ void Grid_Technique::set_pbc_grid(const int& ncx_in, this->init_ijr_and_nnrg(ucell, gd); this->cal_trace_lo(ucell); #if ((defined __CUDA) /* || (defined __ROCM) */) - if (PARAM.inp.device == "gpu") { + if (PARAM.inp.device == "gpu") + { this->init_gpu_gint_variables(ucell, num_stream); } #endif @@ -130,8 +129,8 @@ void Grid_Technique::set_pbc_grid(const int& ncx_in, return; } -void Grid_Technique::get_startind(const int& ny, - const int& nplane) { +void Grid_Technique::get_startind(const int& ny, const int& nplane) +{ ModuleBase::TITLE("Grid_Technique", "get_startind"); assert(nbxx >= 0); @@ -141,7 +140,8 @@ void Grid_Technique::get_startind(const int& ny, this->start_ind = std::vector(nbxx, 0); ModuleBase::Memory::record("GT::start_ind", sizeof(int) * nbxx); - for (int i = 0; i < nbxx; i++) { + for (int i = 0; i < nbxx; i++) + { int ibx = 0; int iby = 0; int ibz = 0; @@ -169,9 +169,8 @@ void Grid_Technique::get_startind(const int& ny, // PLEASE update this 'init_atoms_on_grid' to make // it adapted to 'cuboid' shape of grid // mohan add 2021-04-06 -void Grid_Technique::init_atoms_on_grid(const int& ny, - const int& nplane, - const UnitCell& ucell) { +void Grid_Technique::init_atoms_on_grid(const int& ny, const int& nplane, const UnitCell& ucell) +{ ModuleBase::TITLE("Grid_Technique", "init_atoms_on_grid"); assert(nbxx >= 0); @@ -189,15 +188,13 @@ void Grid_Technique::init_atoms_on_grid(const int& ny, std::vector ind_bigcell = std::vector(nbxyz, 0); ModuleBase::Memory::record("GT::ind_bigcell", sizeof(int) * this->nxyze); std::vector bigcell_on_processor = std::vector(nbxyz, 0); - ModuleBase::Memory::record("GT::bigcell_on_processor", - sizeof(char) * this->nxyze); + ModuleBase::Memory::record("GT::bigcell_on_processor", sizeof(char) * this->nxyze); this->check_bigcell(ind_bigcell.data(), bigcell_on_processor.data()); // (3) Find the atoms using // when doing grid integration. this->in_this_processor = std::vector(ucell.nat, false); - ModuleBase::Memory::record("GT::in_this_processor", - sizeof(int) * this->nxyze); + ModuleBase::Memory::record("GT::in_this_processor", sizeof(int) * this->nxyze); // (4) init atoms on grid std::vector index2normal = std::vector(this->nxyze, 0); @@ -208,7 +205,7 @@ void Grid_Technique::init_atoms_on_grid(const int& ny, // each local grid point (ix,iy,iz) int nat_local = 0; this->total_atoms_on_grid = 0; - for (int iat = 0; iat < ucell.nat; iat++) + for (int iat = 0; iat < ucell.nat; iat++) { const int it = ucell.iat2it[iat]; const double rcut_square = this->rcuts[it] * this->rcuts[it]; @@ -220,22 +217,20 @@ void Grid_Technique::init_atoms_on_grid(const int& ny, #ifdef __DEBUG if (normal >= nbxyz) { - #pragma omp critical +#pragma omp critical { std::cout << " index_atom=" << index_atom[iat] << std::endl; std::cout << " index_ball=" << index_ball[im] << std::endl; std::cout << " normal=" << normal << std::endl; std::cout << " nbxyz=" << nbxyz << std::endl; - ModuleBase::WARNING_QUIT( - "Grid_Technique::init_atoms_on_grid", - "normal >= nbxyz"); + ModuleBase::WARNING_QUIT("Grid_Technique::init_atoms_on_grid", "normal >= nbxyz"); } } #endif assert(normal >= 0); const int bcell_idx_on_proc = ind_bigcell[normal]; if (!bigcell_on_processor[normal]) - { + { continue; } @@ -243,19 +238,19 @@ void Grid_Technique::init_atoms_on_grid(const int& ny, const double dr_x_part = this->meshball_positions[im][0] - this->tau_in_bigcell[iat][0]; const double dr_y_part = this->meshball_positions[im][1] - this->tau_in_bigcell[iat][1]; const double dr_z_part = this->meshball_positions[im][2] - this->tau_in_bigcell[iat][2]; - for(int imcell = 0; imcell < this -> bxyz; imcell++) + for (int imcell = 0; imcell < this->bxyz; imcell++) { const double dr_x = this->meshcell_pos[imcell][0] + dr_x_part; const double dr_y = this->meshcell_pos[imcell][1] + dr_y_part; const double dr_z = this->meshcell_pos[imcell][2] + dr_z_part; const double dist_square = dr_x * dr_x + dr_y * dr_y + dr_z * dr_z; - if(dist_square <= rcut_square) + if (dist_square <= rcut_square) { is_atom_on_bcell = true; break; } } - if(is_atom_on_bcell) + if (is_atom_on_bcell) { ++how_many_atoms[bcell_idx_on_proc]; ++this->total_atoms_on_grid; @@ -268,28 +263,31 @@ void Grid_Technique::init_atoms_on_grid(const int& ny, } } - if (PARAM.inp.test_gridt) { - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, - "Total_atoms_on_grid", - total_atoms_on_grid); -} + if (PARAM.inp.test_gridt) + { + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "Total_atoms_on_grid", total_atoms_on_grid); + } int stop = 0; - if (total_atoms_on_grid == 0) { + if (total_atoms_on_grid == 0) + { GlobalV::ofs_running << " No atoms on this sub-FFT-mesh." << std::endl; stop = 1; } Parallel_Reduce::reduce_all(stop); - if (stop) { - ModuleBase::WARNING("Grid_Technique::init_atoms_on_grid", - "No atom on this sub-FFT-mesh."); + if (stop) + { + ModuleBase::WARNING("Grid_Technique::init_atoms_on_grid", "No atom on this sub-FFT-mesh."); } // calculate the trach of local ia to global iat - if (nat_local > 0) { + if (nat_local > 0) + { this->trace_iat.resize(nat_local); - for (int iat = ucell.nat - 1; iat >= 0; iat--) { - if (this->in_this_processor[iat]) { + for (int iat = ucell.nat - 1; iat >= 0; iat--) + { + if (this->in_this_processor[iat]) + { this->trace_iat[--nat_local] = iat; } } @@ -302,8 +300,8 @@ void Grid_Technique::init_atoms_on_grid(const int& ny, return; } -void Grid_Technique::check_bigcell(int* ind_bigcell, - char* bigcell_on_processor) { +void Grid_Technique::check_bigcell(int* ind_bigcell, char* bigcell_on_processor) +{ // check if a given bigcell is treated on this processor const int zstart = nbzp_start; const int zend = nbzp + zstart; @@ -317,11 +315,15 @@ void Grid_Technique::check_bigcell(int* ind_bigcell, int ind = 0; bool flag = false; - for (int i = 0; i < nbxyz; i++) { + for (int i = 0; i < nbxyz; i++) + { int iz_now = i % nbz; - if (iz_now < zstart || iz_now >= zend) { + if (iz_now < zstart || iz_now >= zend) + { flag = false; - } else { + } + else + { flag = true; ix = i / nbyz; iy = (i - ix * nbyz) / nbz; @@ -337,13 +339,13 @@ void Grid_Technique::check_bigcell(int* ind_bigcell, return; } -void Grid_Technique::init_atoms_on_grid2(const int* index2normal, - const UnitCell& ucell) { +void Grid_Technique::init_atoms_on_grid2(const int* index2normal, const UnitCell& ucell) +{ ModuleBase::TITLE("Grid_Techinique", "init_atoms_on_grid2"); - if (total_atoms_on_grid == 0) { - ModuleBase::WARNING("Grid_Technique::init_atoms_on_grid2", - "no atom on this sub FFT grid."); + if (total_atoms_on_grid == 0) + { + ModuleBase::WARNING("Grid_Technique::init_atoms_on_grid2", "no atom on this sub FFT grid."); return; } @@ -361,16 +363,13 @@ void Grid_Technique::init_atoms_on_grid2(const int* index2normal, //-------------------------------------- assert(total_atoms_on_grid != 0); this->which_atom = std::vector(total_atoms_on_grid, 0); - ModuleBase::Memory::record("GT::which_atom", - sizeof(int) * total_atoms_on_grid); + ModuleBase::Memory::record("GT::which_atom", sizeof(int) * total_atoms_on_grid); this->which_bigcell = std::vector(total_atoms_on_grid, 0); - ModuleBase::Memory::record("GT::which_bigcell", - sizeof(int) * total_atoms_on_grid); + ModuleBase::Memory::record("GT::which_bigcell", sizeof(int) * total_atoms_on_grid); this->which_unitcell = std::vector(total_atoms_on_grid, 0); - ModuleBase::Memory::record("GT::which_unitcell", - sizeof(int) * total_atoms_on_grid); + ModuleBase::Memory::record("GT::which_unitcell", sizeof(int) * total_atoms_on_grid); // for each atom, first we need to locate which cell // the atom is in, then we search meshball aroung this @@ -378,9 +377,9 @@ void Grid_Technique::init_atoms_on_grid2(const int* index2normal, int count = 0; this->how_many_atoms = std::vector(nbxx, 0); ModuleBase::Memory::record("GT::how many atoms", sizeof(int) * nbxx); - std::vector coord_x(total_atoms_on_grid* bxyz, 0.0); + std::vector coord_x(total_atoms_on_grid * bxyz, 0.0); std::vector coords3(bxyz * 3, 0.0); - for(int iat = 0; iat < ucell.nat; iat++) + for (int iat = 0; iat < ucell.nat; iat++) { const int it = ucell.iat2it[iat]; const double rcut_square = this->rcuts[it] * this->rcuts[it]; @@ -396,57 +395,57 @@ void Grid_Technique::init_atoms_on_grid2(const int* index2normal, { continue; } - + bool is_atom_on_bcell = false; const double dr_x_part = this->meshball_positions[im][0] - this->tau_in_bigcell[iat][0]; const double dr_y_part = this->meshball_positions[im][1] - this->tau_in_bigcell[iat][1]; const double dr_z_part = this->meshball_positions[im][2] - this->tau_in_bigcell[iat][2]; - for(int imcell = 0; imcell < this -> bxyz; imcell++) + for (int imcell = 0; imcell < this->bxyz; imcell++) { const double dr_x = this->meshcell_pos[imcell][0] + dr_x_part; const double dr_y = this->meshcell_pos[imcell][1] + dr_y_part; const double dr_z = this->meshcell_pos[imcell][2] + dr_z_part; const double dist_square = dr_x * dr_x + dr_y * dr_y + dr_z * dr_z; - if(dist_square <= rcut_square) + if (dist_square <= rcut_square) { is_atom_on_bcell = true; break; } } - if(is_atom_on_bcell) - { - // it's not the normal order to calculate which_atom - // and which_bigcell, especailly in 1D array. - // Each grid's adjacent atom number is different, - // so, first we need to locate which grid, using - // bcell_start, then we need to count which adjacent atom. - // using how_many_atoms. - const int index = this->bcell_start[bcell_idx_on_proc] + this->how_many_atoms[bcell_idx_on_proc]; - - // we save which_atom and which_bigcell in 1D array, - // once you want to use this in grid integration, - // the only information you got is the 'normal' index, - // so you need to use bcell_start - // to get the 'mesh_index', then you can you this mesh_index - // to use which_atom or which_bigcell. - this->which_atom[index] = iat; - this->which_bigcell[index] = im; - this->which_unitcell[index] = index2ucell[extgrid]; - for(int imcell = 0; imcell < this -> bxyz; imcell++) + if (is_atom_on_bcell) { - const double dr_x = this->meshcell_pos[imcell][0] + dr_x_part; - coord_x[index * bxyz + imcell] = dr_x; - } + // it's not the normal order to calculate which_atom + // and which_bigcell, especailly in 1D array. + // Each grid's adjacent atom number is different, + // so, first we need to locate which grid, using + // bcell_start, then we need to count which adjacent atom. + // using how_many_atoms. + const int index = this->bcell_start[bcell_idx_on_proc] + this->how_many_atoms[bcell_idx_on_proc]; + + // we save which_atom and which_bigcell in 1D array, + // once you want to use this in grid integration, + // the only information you got is the 'normal' index, + // so you need to use bcell_start + // to get the 'mesh_index', then you can you this mesh_index + // to use which_atom or which_bigcell. + this->which_atom[index] = iat; + this->which_bigcell[index] = im; + this->which_unitcell[index] = index2ucell[extgrid]; + for (int imcell = 0; imcell < this->bxyz; imcell++) + { + const double dr_x = this->meshcell_pos[imcell][0] + dr_x_part; + coord_x[index * bxyz + imcell] = dr_x; + } - ++count; - ++how_many_atoms[bcell_idx_on_proc]; + ++count; + ++how_many_atoms[bcell_idx_on_proc]; } } } - for(int i = 0; i < this->bxyz; i++) + for (int i = 0; i < this->bxyz; i++) { - for(int j = 0; j < 3; j++) + for (int j = 0; j < 3; j++) { coords3[i * 3 + j] = this->meshcell_pos[i][j]; } @@ -455,19 +454,21 @@ void Grid_Technique::init_atoms_on_grid2(const int* index2normal, return; } -void Grid_Technique::cal_grid_integration_index() { +void Grid_Technique::cal_grid_integration_index() +{ // save the start this->bcell_start = std::vector(nbxx, 0); ModuleBase::Memory::record("GT::bcell_start", sizeof(int) * nbxx); - for (int i = 1; i < nbxx; i++) { - this->bcell_start[i] - = this->bcell_start[i - 1] + this->how_many_atoms[i - 1]; + for (int i = 1; i < nbxx; i++) + { + this->bcell_start[i] = this->bcell_start[i - 1] + this->how_many_atoms[i - 1]; } // calculate which grid has the largest number of atoms, // and how many atoms. this->max_atom = 0; - for (int i = 0; i < nbxx; i++) { + for (int i = 0; i < nbxx; i++) + { this->max_atom = std::max(this->max_atom, this->how_many_atoms[i]); } @@ -475,27 +476,27 @@ void Grid_Technique::cal_grid_integration_index() { int* all = new int[GlobalV::NPROC]; ModuleBase::GlobalFunc::ZEROS(all, GlobalV::NPROC); Parallel_Reduce::gather_int_all(max_atom, all); - if (GlobalV::MY_RANK == 0) { - GlobalV::ofs_warning << std::setw(15) << "Processor" << std::setw(15) - << "Atom" << std::endl; - for (int i = 0; i < GlobalV::NPROC; i++) { - GlobalV::ofs_warning << std::setw(15) << i + 1 << std::setw(15) - << all[i] << std::endl; + if (GlobalV::MY_RANK == 0) + { + GlobalV::ofs_warning << std::setw(15) << "Processor" << std::setw(15) << "Atom" << std::endl; + for (int i = 0; i < GlobalV::NPROC; i++) + { + GlobalV::ofs_warning << std::setw(15) << i + 1 << std::setw(15) << all[i] << std::endl; } } delete[] all; #endif - if (PARAM.inp.test_gridt) { - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, - "Max atom on bigcell", - max_atom); + if (PARAM.inp.test_gridt) + { + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "Max atom on bigcell", max_atom); } return; } // set 'lgd' variable -void Grid_Technique::cal_trace_lo(const UnitCell& ucell) { +void Grid_Technique::cal_trace_lo(const UnitCell& ucell) +{ ModuleBase::TITLE("Grid_Technique", "cal_trace_lo"); // save the atom information in trace_lo, // in fact the trace_lo dimension can be reduced @@ -509,42 +510,48 @@ void Grid_Technique::cal_trace_lo(const UnitCell& ucell) { int iw_all = 0; int iw_local = 0; - for (int it = 0; it < ucell.ntype; it++) { - for (int ia = 0; ia < ucell.atoms[it].na; ia++) { - if (this->in_this_processor[iat]) { + for (int it = 0; it < ucell.ntype; it++) + { + for (int ia = 0; ia < ucell.atoms[it].na; ia++) + { + if (this->in_this_processor[iat]) + { ++lnat; int nw0 = ucell.atoms[it].nw; - if (PARAM.inp.nspin - == 4) { // added by zhengdy-soc, need to be double in soc + if (PARAM.inp.nspin == 4) + { // added by zhengdy-soc, need to be double in soc nw0 *= 2; this->lgd += nw0; - } else { + } + else + { this->lgd += ucell.atoms[it].nw; } - for (int iw = 0; iw < nw0; iw++) { + for (int iw = 0; iw < nw0; iw++) + { this->trace_lo[iw_all] = iw_local; ++iw_local; ++iw_all; } - } else { + } + else + { // global index of atomic orbitals iw_all += ucell.atoms[it].nw; - if (PARAM.inp.nspin == 4) { + if (PARAM.inp.nspin == 4) + { iw_all += ucell.atoms[it].nw; -} + } } ++iat; } } - if (PARAM.inp.out_level != "m") { - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, - "Atom number in sub-FFT-grid", - lnat); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, - "Local orbitals number in sub-FFT-grid", - lgd); + if (PARAM.inp.out_level != "m") + { + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "Atom number in sub-FFT-grid", lnat); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "Local orbitals number in sub-FFT-grid", lgd); } assert(iw_local == lgd); @@ -561,65 +568,69 @@ void Grid_Technique::init_ijr_and_nnrg(const UnitCell& ucell, const Grid_Driver& // same, name as orb_index std::vector orb_index(ucell.nat + 1); orb_index[0] = 0; - for (int i = 1; i < orb_index.size(); i++) { + for (int i = 1; i < orb_index.size(); i++) + { int type = ucell.iat2it[i - 1]; orb_index[i] = orb_index[i - 1] + ucell.atoms[type].nw; } - for (int T1 = 0; T1 < ucell.ntype; ++T1) { - const Atom* atom1 = &(ucell.atoms[T1]); - for (int I1 = 0; I1 < atom1->na; ++I1) { - auto& tau1 = atom1->tau[I1]; - - gd.Find_atom(ucell, tau1, T1, I1); - - const int iat1 = ucell.itia2iat(T1, I1); - // whether this atom is in this processor. - if (this->in_this_processor[iat1]) { - for (int ad = 0; ad < gd.getAdjacentNum() + 1; ++ad) { - const int T2 = gd.getType(ad); - const int I2 = gd.getNatom(ad); - const int iat2 = ucell.itia2iat(T2, I2); - const Atom* atom2 = &(ucell.atoms[T2]); - - // NOTE: hRGint wil save total number of atom pairs, - // if only upper triangle is saved, the lower triangle will - // be lost in 2D-block parallelization. if the adjacent atom - // is in this processor. - if (this->in_this_processor[iat2]) { - ModuleBase::Vector3 dtau - = gd.getAdjacentTau(ad) - tau1; - double distance = dtau.norm() * ucell.lat0; - double rcut - = this->rcuts[T1] + this->rcuts[T2]; - - // if(distance < rcut) - // mohan reset this 2013-07-02 in Princeton - // we should make absolutely sure that the distance is - // smaller than rcuts[it] this should be consistant - // with LCAO_nnr::cal_nnrg function typical example : 7 - // Bohr cutoff Si orbital in 14 Bohr length of cell. - // distance = 7.0000000000000000 - // rcuts[it] = 7.0000000000000008 - if (distance < rcut - 1.0e-15) { - // calculate R index - auto& R_index = gd.getBox(ad); - // insert this atom-pair into this->hRGint - hamilt::AtomPair tmp_atom_pair( - iat1, - iat2, - R_index.x, - R_index.y, - R_index.z, - orb_index.data(), - orb_index.data(), - ucell.nat); - hRGint_tmp.insert_pair(tmp_atom_pair); - } + for (int T1 = 0; T1 < ucell.ntype; ++T1) + { + const Atom* atom1 = &(ucell.atoms[T1]); + for (int I1 = 0; I1 < atom1->na; ++I1) + { + auto& tau1 = atom1->tau[I1]; + + gd.Find_atom(ucell, tau1, T1, I1); + + const int iat1 = ucell.itia2iat(T1, I1); + // whether this atom is in this processor. + if (this->in_this_processor[iat1]) + { + for (int ad = 0; ad < gd.getAdjacentNum() + 1; ++ad) + { + const int T2 = gd.getType(ad); + const int I2 = gd.getNatom(ad); + const int iat2 = ucell.itia2iat(T2, I2); + const Atom* atom2 = &(ucell.atoms[T2]); + + // NOTE: hRGint wil save total number of atom pairs, + // if only upper triangle is saved, the lower triangle will + // be lost in 2D-block parallelization. if the adjacent atom + // is in this processor. + if (this->in_this_processor[iat2]) + { + ModuleBase::Vector3 dtau = gd.getAdjacentTau(ad) - tau1; + double distance = dtau.norm() * ucell.lat0; + double rcut = this->rcuts[T1] + this->rcuts[T2]; + + // if(distance < rcut) + // mohan reset this 2013-07-02 in Princeton + // we should make absolutely sure that the distance is + // smaller than rcuts[it] this should be consistant + // with LCAO_nnr::cal_nnrg function typical example : 7 + // Bohr cutoff Si orbital in 14 Bohr length of cell. + // distance = 7.0000000000000000 + // rcuts[it] = 7.0000000000000008 + if (distance < rcut - 1.0e-15) + { + // calculate R index + auto& R_index = gd.getBox(ad); + // insert this atom-pair into this->hRGint + hamilt::AtomPair tmp_atom_pair(iat1, + iat2, + R_index.x, + R_index.y, + R_index.z, + orb_index.data(), + orb_index.data(), + ucell.nat); + hRGint_tmp.insert_pair(tmp_atom_pair); } } } } + } } this->ijr_info = hRGint_tmp.get_ijr_info(); this->nnrg = hRGint_tmp.get_nnr(); @@ -628,31 +639,31 @@ void Grid_Technique::init_ijr_and_nnrg(const UnitCell& ucell, const Grid_Driver& #if ((defined __CUDA) /* || (defined __ROCM) */) -void Grid_Technique::init_gpu_gint_variables(const UnitCell& ucell, - const int num_stream) { +void Grid_Technique::init_gpu_gint_variables(const UnitCell& ucell, const int num_stream) +{ #ifdef __MPI dev_id = base_device::information::set_device_by_rank(); #endif - if (is_malloced) { + if (is_malloced) + { free_gpu_gint_variables(this->nat); } nstreams = num_stream; double ylmcoef[100]; ModuleBase::GlobalFunc::ZEROS(ylmcoef, 100); - for (int i = 0; i < 100; i++) { + for (int i = 0; i < 100; i++) + { ylmcoef[i] = ModuleBase::Ylm::ylmcoef[i]; } checkCudaErrors(cudaMalloc((void**)&ylmcoef_g, 100 * sizeof(double))); - checkCudaErrors(cudaMemcpy(ylmcoef_g, - ylmcoef, - 100 * sizeof(double), - cudaMemcpyHostToDevice)); + checkCudaErrors(cudaMemcpy(ylmcoef_g, ylmcoef, 100 * sizeof(double), cudaMemcpyHostToDevice)); double max_cut = *std::max_element(this->rcuts.begin(), this->rcuts.end()); int atom_nw_now[ucell.ntype]; int ucell_atom_nwl_now[ucell.ntype]; - for (int i = 0; i < ucell.ntype; i++) { + for (int i = 0; i < ucell.ntype; i++) + { atom_nw_now[i] = ucell.atoms[i].nw; ucell_atom_nwl_now[i] = ucell.atoms[i].nwl; } @@ -663,29 +674,29 @@ void Grid_Technique::init_gpu_gint_variables(const UnitCell& ucell, memset(psi_u_now, 0, ucell.ntype * ucell.nwmax * this->nr_max * 2 * sizeof(double)); bool* atom_iw2_new_now = (bool*)malloc(ucell.ntype * ucell.nwmax * sizeof(bool)); memset(atom_iw2_new_now, 0, ucell.ntype * ucell.nwmax * sizeof(bool)); - int* atom_iw2_ylm_now - = (int*)malloc(ucell.ntype * ucell.nwmax * sizeof(int)); + int* atom_iw2_ylm_now = (int*)malloc(ucell.ntype * ucell.nwmax * sizeof(int)); memset(atom_iw2_ylm_now, 0, ucell.ntype * ucell.nwmax * sizeof(int)); int* atom_iw2_l_now = (int*)malloc(ucell.ntype * ucell.nwmax * sizeof(int)); memset(atom_iw2_l_now, 0, ucell.ntype * ucell.nwmax * sizeof(int)); Atom* atomx; - for (int i = 0; i < ucell.ntype; i++) { + for (int i = 0; i < ucell.ntype; i++) + { atomx = &ucell.atoms[i]; - for (int j = 0; j < ucell.nwmax; j++) { - if (j < atomx->nw) { + for (int j = 0; j < ucell.nwmax; j++) + { + if (j < atomx->nw) + { atom_iw2_new_now[i * ucell.nwmax + j] = atomx->iw2_new[j]; atom_iw2_ylm_now[i * ucell.nwmax + j] = atomx->iw2_ylm[j]; atom_iw2_l_now[i * ucell.nwmax + j] = atomx->iw2l[j]; - for (int k = 0; k < this->nr_max; k++) { - int index_temp = (i * ucell.nwmax * this->nr_max - + j * this->nr_max + k) - * 2; - if (k < this->psi_u[i * this->nwmax + j].size()) { - psi_u_now[index_temp] - = this->psi_u[i * this->nwmax + j].data()[k]; - psi_u_now[index_temp + 1] - = this->dpsi_u[i * this->nwmax + j].data()[k]; + for (int k = 0; k < this->nr_max; k++) + { + int index_temp = (i * ucell.nwmax * this->nr_max + j * this->nr_max + k) * 2; + if (k < this->psi_u[i * this->nwmax + j].size()) + { + psi_u_now[index_temp] = this->psi_u[i * this->nwmax + j].data()[k]; + psi_u_now[index_temp + 1] = this->dpsi_u[i * this->nwmax + j].data()[k]; } } } @@ -693,10 +704,7 @@ void Grid_Technique::init_gpu_gint_variables(const UnitCell& ucell, } checkCudaErrors(cudaMalloc((void**)&atom_nw_g, ucell.ntype * sizeof(int))); - checkCudaErrors(cudaMemcpy(atom_nw_g, - atom_nw_now, - ucell.ntype * sizeof(int), - cudaMemcpyHostToDevice)); + checkCudaErrors(cudaMemcpy(atom_nw_g, atom_nw_now, ucell.ntype * sizeof(int), cudaMemcpyHostToDevice)); checkCudaErrors(cudaMalloc((void**)&atom_nwl_g, ucell.ntype * sizeof(int))); checkCudaErrors(cudaMemcpy(atom_nwl_g, ucell_atom_nwl_now, ucell.ntype * sizeof(int), cudaMemcpyHostToDevice)); @@ -707,40 +715,27 @@ void Grid_Technique::init_gpu_gint_variables(const UnitCell& ucell, ucell.ntype * ucell.nwmax * this->nr_max * sizeof(double) * 2, cudaMemcpyHostToDevice)); - checkCudaErrors(cudaMalloc((void**)&psi_u_g, - ucell.ntype * ucell.nwmax * nr_max * sizeof(double) * 2)); + checkCudaErrors(cudaMalloc((void**)&psi_u_g, ucell.ntype * ucell.nwmax * nr_max * sizeof(double) * 2)); checkCudaErrors(cudaMemcpy(psi_u_g, - psi_u_now, - ucell.ntype * ucell.nwmax * nr_max * sizeof(double) * 2, - cudaMemcpyHostToDevice)); - - checkCudaErrors(cudaMalloc((void**)&atom_new_g, - ucell.ntype * ucell.nwmax * sizeof(bool))); - checkCudaErrors(cudaMemcpy(atom_new_g, - atom_iw2_new_now, - ucell.ntype * ucell.nwmax * sizeof(bool), - cudaMemcpyHostToDevice)); - - checkCudaErrors(cudaMalloc((void**)&atom_ylm_g, - ucell.ntype * ucell.nwmax * sizeof(int))); - - checkCudaErrors(cudaMemcpy(atom_ylm_g, - atom_iw2_ylm_now, - ucell.ntype * ucell.nwmax * sizeof(int), - cudaMemcpyHostToDevice)); - - checkCudaErrors(cudaMalloc((void**)&atom_l_g, - ucell.ntype * ucell.nwmax * sizeof(int))); - checkCudaErrors(cudaMemcpy(atom_l_g, - atom_iw2_l_now, - ucell.ntype * ucell.nwmax * sizeof(int), - cudaMemcpyHostToDevice)); + psi_u_now, + ucell.ntype * ucell.nwmax * nr_max * sizeof(double) * 2, + cudaMemcpyHostToDevice)); + + checkCudaErrors(cudaMalloc((void**)&atom_new_g, ucell.ntype * ucell.nwmax * sizeof(bool))); + checkCudaErrors( + cudaMemcpy(atom_new_g, atom_iw2_new_now, ucell.ntype * ucell.nwmax * sizeof(bool), cudaMemcpyHostToDevice)); + + checkCudaErrors(cudaMalloc((void**)&atom_ylm_g, ucell.ntype * ucell.nwmax * sizeof(int))); + + checkCudaErrors( + cudaMemcpy(atom_ylm_g, atom_iw2_ylm_now, ucell.ntype * ucell.nwmax * sizeof(int), cudaMemcpyHostToDevice)); + + checkCudaErrors(cudaMalloc((void**)&atom_l_g, ucell.ntype * ucell.nwmax * sizeof(int))); + checkCudaErrors( + cudaMemcpy(atom_l_g, atom_iw2_l_now, ucell.ntype * ucell.nwmax * sizeof(int), cudaMemcpyHostToDevice)); checkCudaErrors(cudaMalloc((void**)&rcut_g, ucell.ntype * sizeof(double))); - checkCudaErrors(cudaMemcpy(rcut_g, - rcuts.data(), - ucell.ntype * sizeof(double), - cudaMemcpyHostToDevice)); + checkCudaErrors(cudaMemcpy(rcut_g, rcuts.data(), ucell.ntype * sizeof(double), cudaMemcpyHostToDevice)); std::vector mcell_pos(bxyz * 3, 0); for (int i = 0; i < bxyz; i++) { @@ -748,12 +743,8 @@ void Grid_Technique::init_gpu_gint_variables(const UnitCell& ucell, mcell_pos[3 * i + 1] = meshcell_pos[i][1]; mcell_pos[3 * i + 2] = meshcell_pos[i][2]; } - checkCudaErrors(cudaMalloc((void**)&mcell_pos_g, - bxyz * 3 * sizeof(double))); - checkCudaErrors(cudaMemcpy(mcell_pos_g, - mcell_pos.data(), - bxyz * 3 * sizeof(double), - cudaMemcpyHostToDevice)); + checkCudaErrors(cudaMalloc((void**)&mcell_pos_g, bxyz * 3 * sizeof(double))); + checkCudaErrors(cudaMemcpy(mcell_pos_g, mcell_pos.data(), bxyz * 3 * sizeof(double), cudaMemcpyHostToDevice)); gemm_algo_selector(bxyz, fastest_matrix_mul, ucell); @@ -764,8 +755,10 @@ void Grid_Technique::init_gpu_gint_variables(const UnitCell& ucell, free(atom_iw2_ylm_now); } -void Grid_Technique::free_gpu_gint_variables(int nat) { - if (!is_malloced) { +void Grid_Technique::free_gpu_gint_variables(int nat) +{ + if (!is_malloced) + { return; } diff --git a/source/module_hamilt_lcao/module_gint/gtask_force.cpp b/source/module_hamilt_lcao/module_gint/gtask_force.cpp index 186bf37257..380bf5bd92 100644 --- a/source/module_hamilt_lcao/module_gint/gtask_force.cpp +++ b/source/module_hamilt_lcao/module_gint/gtask_force.cpp @@ -1,9 +1,9 @@ -#include - #include "gint_force_gpu.h" -#include "module_base/ylm.h" #include "module_hamilt_lcao/module_gint/gint_tools.h" -#include "module_base/vector3.h" +#include "source_base/vector3.h" +#include "source_base/ylm.h" + +#include namespace GintKernel { @@ -35,12 +35,9 @@ void gtask_force(const Grid_Technique& gridt, const int iat = gridt.which_atom[mcell_index]; const int it_temp = ucell.iat2it[iat]; - dr_part[atoms_per_z * 3] = gridt.meshball_positions[imcell][0] - - gridt.tau_in_bigcell[iat][0]; - dr_part[atoms_per_z * 3 + 1] = gridt.meshball_positions[imcell][1] - - gridt.tau_in_bigcell[iat][1]; - dr_part[atoms_per_z * 3 + 2] = gridt.meshball_positions[imcell][2] - - gridt.tau_in_bigcell[iat][2]; + dr_part[atoms_per_z * 3] = gridt.meshball_positions[imcell][0] - gridt.tau_in_bigcell[iat][0]; + dr_part[atoms_per_z * 3 + 1] = gridt.meshball_positions[imcell][1] - gridt.tau_in_bigcell[iat][1]; + dr_part[atoms_per_z * 3 + 2] = gridt.meshball_positions[imcell][2] - gridt.tau_in_bigcell[iat][2]; atoms_type[atoms_per_z] = it_temp; iat_on_nbz[atoms_per_z] = iat; atoms_per_z++; @@ -54,10 +51,8 @@ void gtask_force(const Grid_Technique& gridt, { for (int bz_index = 0; bz_index < gridt.bz; bz_index++) { - int vindex_global = bx_index * gridt.ncy * nczp - + by_index * nczp + bz_index - + start_ind_grid; - vldr3[id]= vlocal_global_value[vindex_global] * vfactor; + int vindex_global = bx_index * gridt.ncy * nczp + by_index * nczp + bz_index + start_ind_grid; + vldr3[id] = vlocal_global_value[vindex_global] * vfactor; id++; } } @@ -70,7 +65,7 @@ void alloc_mult_force(const hamilt::HContainer* dm, const UnitCell& ucell, const int grid_index_ij, const int max_atom, - const int *atoms_num_info, + const int* atoms_num_info, double* const psi_g, double* const psi_dm_g, double* const dm_matrix_g, @@ -103,17 +98,17 @@ void alloc_mult_force(const hamilt::HContainer* dm, const int mcell_index1 = bcell_start_index + atom1; const int iat1 = gridt.which_atom[mcell_index1]; const int uc1 = gridt.which_unitcell[mcell_index1]; - const ModuleBase::Vector3 r1 = gridt.get_ucell_coords(uc1); + const ModuleBase::Vector3 r1 = gridt.get_ucell_coords(uc1); const int it1 = ucell.iat2it[iat1]; const int nw1 = ucell.atoms[it1].nw; - for (int atom2 = 0; atom2 < gridt.how_many_atoms[grid_index];atom2++) + for (int atom2 = 0; atom2 < gridt.how_many_atoms[grid_index]; atom2++) { const int mcell_index2 = bcell_start_index + atom2; const int iat2 = gridt.which_atom[mcell_index2]; const int uc2 = gridt.which_unitcell[mcell_index2]; const ModuleBase::Vector3 r2 = gridt.get_ucell_coords(uc2); - const int offset = dm->find_matrix_offset(iat1, iat2, r1-r2); + const int offset = dm->find_matrix_offset(iat1, iat2, r1 - r2); if (offset == -1) { continue; diff --git a/source/module_hamilt_lcao/module_gint/gtask_rho.cpp b/source/module_hamilt_lcao/module_gint/gtask_rho.cpp index 9a7e618b42..bcf39b4b3c 100644 --- a/source/module_hamilt_lcao/module_gint/gtask_rho.cpp +++ b/source/module_hamilt_lcao/module_gint/gtask_rho.cpp @@ -1,8 +1,8 @@ #include "gint_rho_gpu.h" -#include "module_base/ylm.h" #include "module_hamilt_lcao/module_gint/gint_tools.h" -#include "module_base/vector3.h" #include "omp.h" +#include "source_base/vector3.h" +#include "source_base/ylm.h" namespace GintKernel { @@ -12,7 +12,7 @@ void gtask_rho(const Grid_Technique& gridt, double* dr_part, uint8_t* atoms_type, int* atoms_num_info, - int& atoms_per_z) + int& atoms_per_z) { atoms_per_z = 0; for (int z_index = 0; z_index < gridt.nbzp; z_index++) @@ -29,12 +29,9 @@ void gtask_rho(const Grid_Technique& gridt, const int iat = gridt.which_atom[mcell_index]; const int it_temp = ucell.iat2it[iat]; - dr_part[atoms_per_z * 3] = gridt.meshball_positions[imcell][0] - - gridt.tau_in_bigcell[iat][0]; - dr_part[atoms_per_z * 3 + 1] = gridt.meshball_positions[imcell][1] - - gridt.tau_in_bigcell[iat][1]; - dr_part[atoms_per_z * 3 + 2] = gridt.meshball_positions[imcell][2] - - gridt.tau_in_bigcell[iat][2]; + dr_part[atoms_per_z * 3] = gridt.meshball_positions[imcell][0] - gridt.tau_in_bigcell[iat][0]; + dr_part[atoms_per_z * 3 + 1] = gridt.meshball_positions[imcell][1] - gridt.tau_in_bigcell[iat][1]; + dr_part[atoms_per_z * 3 + 2] = gridt.meshball_positions[imcell][2] - gridt.tau_in_bigcell[iat][2]; atoms_type[atoms_per_z] = it_temp; atoms_per_z++; } @@ -72,7 +69,7 @@ void alloc_mult_dot_rho(const hamilt::HContainer* dm, int dot_count = 0; max_m = 0; max_n = 0; - const int nwmax=ucell.nwmax; + const int nwmax = ucell.nwmax; // generate matrix multiplication tasks for (int z_index = 0; z_index < gridt.nbzp; z_index++) { @@ -90,14 +87,13 @@ void alloc_mult_dot_rho(const hamilt::HContainer* dm, const int it1 = ucell.iat2it[iat1]; const int nw1 = ucell.atoms[it1].nw; - for (int atom2 = atom1; atom2 < gridt.how_many_atoms[grid_index]; - atom2++) + for (int atom2 = atom1; atom2 < gridt.how_many_atoms[grid_index]; atom2++) { const int mcell_index2 = bcell_start_index + atom2; const int iat2 = gridt.which_atom[mcell_index2]; const int uc2 = gridt.which_unitcell[mcell_index2]; const ModuleBase::Vector3 r2 = gridt.get_ucell_coords(uc2); - const int offset = dm->find_matrix_offset(iat1, iat2, r1-r2); + const int offset = dm->find_matrix_offset(iat1, iat2, r1 - r2); if (offset == -1) { continue; @@ -136,13 +132,13 @@ void alloc_mult_dot_rho(const hamilt::HContainer* dm, // generate vec dot product tasks std::vector vindex(gridt.bxyz); Gint_Tools::get_vindex(gridt.bxyz, - gridt.bx, - gridt.by, - gridt.bz, - nczp, - gridt.start_ind[grid_index], - gridt.ncy * nczp, - vindex.data()); + gridt.bx, + gridt.by, + gridt.bz, + nczp, + gridt.start_ind[grid_index], + gridt.ncy * nczp, + vindex.data()); for (int i = 0; i < gridt.bxyz; i++) { dot_product[dot_count] = rho_g + vindex[i]; diff --git a/source/module_hamilt_lcao/module_gint/gtask_vl.cpp b/source/module_hamilt_lcao/module_gint/gtask_vl.cpp index ba09ea0949..21fc53c475 100644 --- a/source/module_hamilt_lcao/module_gint/gtask_vl.cpp +++ b/source/module_hamilt_lcao/module_gint/gtask_vl.cpp @@ -1,9 +1,9 @@ -#include - #include "gint_vl_gpu.h" -#include "module_base/ylm.h" #include "module_hamilt_lcao/module_gint/gint_tools.h" -#include "module_base/vector3.h" +#include "source_base/vector3.h" +#include "source_base/ylm.h" + +#include namespace GintKernel { @@ -34,12 +34,9 @@ void gtask_vlocal(const Grid_Technique& gridt, const int iat = gridt.which_atom[mcell_index]; const int it_temp = ucell.iat2it[iat]; - dr_part[atoms_per_z * 3] = gridt.meshball_positions[imcell][0] - - gridt.tau_in_bigcell[iat][0]; - dr_part[atoms_per_z * 3 + 1] = gridt.meshball_positions[imcell][1] - - gridt.tau_in_bigcell[iat][1]; - dr_part[atoms_per_z * 3 + 2] = gridt.meshball_positions[imcell][2] - - gridt.tau_in_bigcell[iat][2]; + dr_part[atoms_per_z * 3] = gridt.meshball_positions[imcell][0] - gridt.tau_in_bigcell[iat][0]; + dr_part[atoms_per_z * 3 + 1] = gridt.meshball_positions[imcell][1] - gridt.tau_in_bigcell[iat][1]; + dr_part[atoms_per_z * 3 + 2] = gridt.meshball_positions[imcell][2] - gridt.tau_in_bigcell[iat][2]; atoms_type[atoms_per_z] = it_temp; atoms_per_z++; } @@ -52,10 +49,8 @@ void gtask_vlocal(const Grid_Technique& gridt, { for (int bz_index = 0; bz_index < gridt.bz; bz_index++) { - int vindex_global = bx_index * gridt.ncy * nczp - + by_index * nczp + bz_index - + start_ind_grid; - vldr3[id]= vlocal_global_value[vindex_global] * vfactor; + int vindex_global = bx_index * gridt.ncy * nczp + by_index * nczp + bz_index + start_ind_grid; + vldr3[id] = vlocal_global_value[vindex_global] * vfactor; id++; } } @@ -106,7 +101,7 @@ void alloc_mult_vlocal(const hamilt::HContainer* hRGint, const int iat2 = gridt.which_atom[bcell_start_index + atom2]; const int uc2 = gridt.which_unitcell[bcell_start_index + atom2]; const ModuleBase::Vector3 r2 = gridt.get_ucell_coords(uc2); - int offset = hRGint->find_matrix_offset(iat1, iat2, r1-r2); + int offset = hRGint->find_matrix_offset(iat1, iat2, r1 - r2); if (offset == -1) { continue; @@ -115,18 +110,14 @@ void alloc_mult_vlocal(const hamilt::HContainer* hRGint, if (iat1 <= iat2) { - const int atom_pair_nw - = ucell.atoms[it1].nw * ucell.atoms[it2].nw; + const int atom_pair_nw = ucell.atoms[it1].nw * ucell.atoms[it2].nw; const int calc_index1 = vldr3_index + atom1 * nwmax * gridt.bxyz; const int calc_index2 = vldr3_index + atom2 * nwmax * gridt.bxyz; - mat_A[atom_pair_num] - = psi + calc_index1; - mat_B[atom_pair_num] - = psi_vldr3 + calc_index2; - mat_C[atom_pair_num] - = grid_vlocal_g + offset; + mat_A[atom_pair_num] = psi + calc_index1; + mat_B[atom_pair_num] = psi_vldr3 + calc_index2; + mat_C[atom_pair_num] = grid_vlocal_g + offset; mat_lda[atom_pair_num] = gridt.bxyz; mat_ldb[atom_pair_num] = gridt.bxyz; @@ -135,7 +126,7 @@ void alloc_mult_vlocal(const hamilt::HContainer* hRGint, mat_m[atom_pair_num] = ucell.atoms[it1].nw; mat_n[atom_pair_num] = ucell.atoms[it2].nw; mat_k[atom_pair_num] = gridt.bxyz; - + if (mat_m[atom_pair_num] > max_m) { max_m = mat_m[atom_pair_num]; diff --git a/source/module_hamilt_lcao/module_gint/init_orb.cpp b/source/module_hamilt_lcao/module_gint/init_orb.cpp index 7e90af608b..505d6835aa 100644 --- a/source/module_hamilt_lcao/module_gint/init_orb.cpp +++ b/source/module_hamilt_lcao/module_gint/init_orb.cpp @@ -1,62 +1,63 @@ #include "gint_tools.h" -#include "module_base/memory.h" #include "module_basis/module_ao/ORB_read.h" #include "module_cell/unitcell.h" +#include "source_base/memory.h" -namespace Gint_Tools{ +namespace Gint_Tools +{ -void init_orb(double& dr_uniform, - std::vector& rcuts, - UnitCell& ucell, - const LCAO_Orbitals& orb, - std::vector>& psi_u, - std::vector>& dpsi_u, - std::vector>& d2psi_u) +void init_orb(double& dr_uniform, + std::vector& rcuts, + UnitCell& ucell, + const LCAO_Orbitals& orb, + std::vector>& psi_u, + std::vector>& dpsi_u, + std::vector>& d2psi_u) { //! set the grid parameters - dr_uniform=orb.dr_uniform; - - assert(dr_uniform>0.0); - - const int nwmax=ucell.nwmax; - const int ntype=ucell.ntype; - - assert(nwmax>0); - assert(ntype>0); - - rcuts=std::vector(ntype); - ModuleBase::Memory::record("rcuts", sizeof(double)*ntype*3); - - for(int it=0; it 0.0); + + const int nwmax = ucell.nwmax; + const int ntype = ucell.ntype; + + assert(nwmax > 0); + assert(ntype > 0); + + rcuts = std::vector(ntype); + ModuleBase::Memory::record("rcuts", sizeof(double) * ntype * 3); + + for (int it = 0; it < ntype; it++) + { + rcuts[it] = orb.Phi[it].getRcut(); + } + const double max_cut = *std::max_element(rcuts.begin(), rcuts.end()); - const int nr_max = static_cast(1/dr_uniform * max_cut) + 10; - psi_u=std::vector>(ntype * nwmax); - dpsi_u=std::vector>(ntype * nwmax); - d2psi_u=std::vector>(ntype * nwmax); - ModuleBase::Memory::record("psi_u", sizeof(double)*nwmax*ntype*3); - + const int nr_max = static_cast(1 / dr_uniform * max_cut) + 10; + psi_u = std::vector>(ntype * nwmax); + dpsi_u = std::vector>(ntype * nwmax); + d2psi_u = std::vector>(ntype * nwmax); + ModuleBase::Memory::record("psi_u", sizeof(double) * nwmax * ntype * 3); + Atom* atomx = nullptr; const Numerical_Orbital_Lm* pointer = nullptr; - + for (int i = 0; i < ntype; i++) { atomx = &ucell.atoms[i]; for (int j = 0; j < nwmax; j++) { - const int k=i*nwmax+j; + const int k = i * nwmax + j; if (j < atomx->nw) { - pointer = &orb.Phi[i].PhiLN(atomx->iw2l[j],atomx->iw2n[j]); - psi_u[k]=pointer->psi_uniform; - dpsi_u[k]=pointer->dpsi_uniform; - d2psi_u[k]=pointer->ddpsi_uniform; + pointer = &orb.Phi[i].PhiLN(atomx->iw2l[j], atomx->iw2n[j]); + psi_u[k] = pointer->psi_uniform; + dpsi_u[k] = pointer->dpsi_uniform; + d2psi_u[k] = pointer->ddpsi_uniform; } } } -}// End of init_orb() +} // End of init_orb() -}// End of Gint_Tools +} // namespace Gint_Tools diff --git a/source/module_hamilt_lcao/module_gint/kernels/cuda/gemm_selector.cu b/source/module_hamilt_lcao/module_gint/kernels/cuda/gemm_selector.cu index cfad7440f3..ee8b1e2939 100644 --- a/source/module_hamilt_lcao/module_gint/kernels/cuda/gemm_selector.cu +++ b/source/module_hamilt_lcao/module_gint/kernels/cuda/gemm_selector.cu @@ -1,10 +1,10 @@ -#include - +#include "code_gen.cuh" +#include "cuda_tools.cuh" #include "gemm_selector.cuh" +#include "source_base/blas_connector.h" #include "vbatch_matrix_mul.cuh" -#include "cuda_tools.cuh" -#include "module_base/blas_connector.h" -#include "code_gen.cuh" + +#include /* * Here we have utilized a very straightforward and brute-force method to select @@ -13,11 +13,10 @@ * find the fastest parameter combination. This approach can lead to an increase * in compilation time. */ -void gemm_algo_selector(int matrix_k, matrix_multiple_func_type& fastest_algo,const UnitCell& ucell) +void gemm_algo_selector(int matrix_k, matrix_multiple_func_type& fastest_algo, const UnitCell& ucell) { int batchCount_per_type = 32; - int batchCount - = batchCount_per_type * ucell.ntype * ucell.ntype; + int batchCount = batchCount_per_type * ucell.ntype * ucell.ntype; Cuda_Mem_Wrapper m(batchCount); Cuda_Mem_Wrapper n(batchCount); @@ -63,27 +62,22 @@ void gemm_algo_selector(int matrix_k, matrix_multiple_func_type& fastest_algo,co ldb.get_host_pointer()[index] = matrix_k; ldc.get_host_pointer()[index] = ucell.atoms[l].nw; - A_array.get_host_pointer()[index] - = &A.get_device_pointer()[index * max_m * matrix_k]; - B_array.get_host_pointer()[index] - = &B.get_device_pointer()[index * max_n * matrix_k]; - C_array.get_host_pointer()[index] - = &C.get_device_pointer()[index * max_n - * max_m]; // test atom add - BlasConnector::gemm( - 'N', - 'T', - m.get_host_pointer()[index], - n.get_host_pointer()[index], - matrix_k, - 1.0, - &A.get_host_pointer()[index * max_m * matrix_k], - matrix_k, - &B.get_host_pointer()[index * max_n * matrix_k], - matrix_k, - 1.0, - &cpu_result[index * max_m * max_n], - n.get_host_pointer()[index]); + A_array.get_host_pointer()[index] = &A.get_device_pointer()[index * max_m * matrix_k]; + B_array.get_host_pointer()[index] = &B.get_device_pointer()[index * max_n * matrix_k]; + C_array.get_host_pointer()[index] = &C.get_device_pointer()[index * max_n * max_m]; // test atom add + BlasConnector::gemm('N', + 'T', + m.get_host_pointer()[index], + n.get_host_pointer()[index], + matrix_k, + 1.0, + &A.get_host_pointer()[index * max_m * matrix_k], + matrix_k, + &B.get_host_pointer()[index * max_n * matrix_k], + matrix_k, + 1.0, + &cpu_result[index * max_m * max_n], + n.get_host_pointer()[index]); index++; } } @@ -130,8 +124,7 @@ void gemm_algo_selector(int matrix_k, matrix_multiple_func_type& fastest_algo,co */ #include "code_gen.cpp" checkCuda(cudaStreamDestroy(temp_stream)); - std::cout << " gemm_algo_selector::Fastest time: " << fastest_time << " ms" - << std::endl; + std::cout << " gemm_algo_selector::Fastest time: " << fastest_time << " ms" << std::endl; // fastest_algo = vbatched_gemm_impl; delete[] cpu_result; diff --git a/source/module_hamilt_lcao/module_gint/kernels/cuda/gint_force.cu b/source/module_hamilt_lcao/module_gint/kernels/cuda/gint_force.cu index 4375af7eee..4df67b916f 100644 --- a/source/module_hamilt_lcao/module_gint/kernels/cuda/gint_force.cu +++ b/source/module_hamilt_lcao/module_gint/kernels/cuda/gint_force.cu @@ -1,13 +1,13 @@ -#include "sph.cuh" -#include "interp.cuh" -#include "gint_force.cuh" #include "cuda_tools.cuh" -#include "module_base/module_device/device.h" +#include "gint_force.cuh" +#include "interp.cuh" +#include "source_base/module_device/device.h" +#include "sph.cuh" // CUDA kernel to calculate psi and force namespace GintKernel { __inline__ __device__ double warpReduceSum(double val) -{ +{ val += __shfl_xor_sync(0xffffffff, val, 16, 32); val += __shfl_xor_sync(0xffffffff, val, 8, 32); val += __shfl_xor_sync(0xffffffff, val, 4, 32); @@ -16,7 +16,6 @@ __inline__ __device__ double warpReduceSum(double val) return val; } - __global__ void get_psi_force(double* ylmcoef, double delta_r, int bxyz, @@ -43,12 +42,12 @@ __global__ void get_psi_force(double* ylmcoef, const int num_atoms = atoms_num_info[2 * bcell_id]; const int pre_atoms = atoms_num_info[2 * bcell_id + 1]; const int mcell_id = blockIdx.y; - const double vldr3_value = vldr3[bcell_id*bxyz + mcell_id]; + const double vldr3_value = vldr3[bcell_id * bxyz + mcell_id]; const double mcell_pos_x = mcell_pos[3 * mcell_id]; const double mcell_pos_y = mcell_pos[3 * mcell_id + 1]; const double mcell_pos_z = mcell_pos[3 * mcell_id + 2]; - for(int atom_id = threadIdx.x; atom_id < num_atoms; atom_id += blockDim.x) + for (int atom_id = threadIdx.x; atom_id < num_atoms; atom_id += blockDim.x) { const int dr_start = 3 * (pre_atoms + atom_id); const double dr_x = dr_part[dr_start] + mcell_pos_x; @@ -56,7 +55,7 @@ __global__ void get_psi_force(double* ylmcoef, const double dr_z = dr_part[dr_start + 2] + mcell_pos_z; double dist = sqrt(dr_x * dr_x + dr_y * dr_y + dr_z * dr_z); const int atype = __ldg(atoms_type + pre_atoms + atom_id); - if(dist < rcut[atype]) + if (dist < rcut[atype]) { if (dist < 1.0E-9) { @@ -67,7 +66,7 @@ __global__ void get_psi_force(double* ylmcoef, double ylma[49]; double grly[49][3]; const int nwl = __ldg(ucell_atom_nwl + atype); - spherical_harmonics_d(dr, dist*dist, grly, nwl, ylma, ylmcoef); + spherical_harmonics_d(dr, dist * dist, grly, nwl, ylma, ylmcoef); int psi_idx = ((pre_atoms + atom_id) * bxyz + mcell_id) * nwmax; interp_f(dist, delta_r, @@ -91,11 +90,7 @@ __global__ void get_psi_force(double* ylmcoef, } } - -__global__ void dot_product_stress(const double* d2psi, - const double* psi_dm, - const int size, - double* stress) +__global__ void dot_product_stress(const double* d2psi, const double* psi_dm, const int size, double* stress) { __shared__ double cache[32 * 6]; const int tid = threadIdx.x; @@ -103,8 +98,8 @@ __global__ void dot_product_stress(const double* d2psi, const int warp_id = tid / 32; const int lane_id = tid % 32; double tmp[6] = {0.0}; - for(int id = threadIdx.x + blockIdx.x * blockDim.x; id < size; id += stride) - { + for (int id = threadIdx.x + blockIdx.x * blockDim.x; id < size; id += stride) + { const double psi_dm_2 = psi_dm[id] * 2; const int id_stress = id * 6; tmp[0] += d2psi[id_stress] * psi_dm_2; @@ -115,7 +110,7 @@ __global__ void dot_product_stress(const double* d2psi, tmp[5] += d2psi[id_stress + 5] * psi_dm_2; } - for(int i = 0; i<6; i++) + for (int i = 0; i < 6; i++) { tmp[i] = warpReduceSum(tmp[i]); } @@ -134,7 +129,7 @@ __global__ void dot_product_stress(const double* d2psi, tmp[i] = (tid < blockDim.x / 32) ? cache[tid * 6 + i] : 0; } - if(warp_id == 0) + if (warp_id == 0) { for (int i = 0; i < 6; i++) { @@ -151,11 +146,10 @@ __global__ void dot_product_stress(const double* d2psi, } } - __global__ void dot_product_force(const int bxyz, const int nwmax, - const int *atoms_num_info, - const int *iat_on_nbz, + const int* atoms_num_info, + const int* iat_on_nbz, const double* dpsi, const double* psi_dm, double* force) @@ -169,14 +163,14 @@ __global__ void dot_product_force(const int bxyz, const int atom_num = atoms_num_info[2 * bcell_id]; const int pre_atoms = atoms_num_info[2 * bcell_id + 1]; - for(int k = 0; k < atom_num; k++) + for (int k = 0; k < atom_num; k++) { const int atom_id = pre_atoms + k; const int offset = atom_id * vec_size; const int iat = iat_on_nbz[atom_id]; double force_iat[3] = {0.0}; - for(int i =tid; i < vec_size; i += blockDim.x) + for (int i = tid; i < vec_size; i += blockDim.x) { int psi_offset = offset + i; double psi_dm_2 = psi_dm[psi_offset] * 2; diff --git a/source/module_hamilt_lcao/module_gint/kernels/cuda/vbatch_matrix_mul.cuh b/source/module_hamilt_lcao/module_gint/kernels/cuda/vbatch_matrix_mul.cuh index 38a2c3c2b1..d6db80af1b 100644 --- a/source/module_hamilt_lcao/module_gint/kernels/cuda/vbatch_matrix_mul.cuh +++ b/source/module_hamilt_lcao/module_gint/kernels/cuda/vbatch_matrix_mul.cuh @@ -1,17 +1,16 @@ #ifndef VBATCH_MATRIX_MUL_CUH #define VBATCH_MATRIX_MUL_CUH +#include "cuda_tools.cuh" +#include "module_cell/unitcell.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/module_device/device.h" + #include // for assert #include #include // for CUDA_VERSION #include -#include // for fprintf and stderr - -#include "cuda_tools.cuh" #include -#include "module_cell/unitcell.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/module_device/device.h" - +#include // for fprintf and stderr #define sA(i, j) sA[(j)*slda + (i)] #define sB(i, j) sB[(j)*sldb + (i)] @@ -70,12 +69,10 @@ static __device__ void vbatched_gemm_device(int M, // bound is the correction to offs_d in order to not get out of memory bound // so bound could be negative value since offs_d could be out of bound T* offs_dA = A + blx * BLK_M * LDA + idyA * LDA + idxA; - int boundA - = (LDA * (M - 1) + K) - (blx * BLK_M * LDA + idyA * LDA + idxA) - 1; + int boundA = (LDA * (M - 1) + K) - (blx * BLK_M * LDA + idyA * LDA + idxA) - 1; T* offs_dB = B + bly * BLK_N * LDB + idyB * LDB + idxB; - int boundB - = (LDB * (N - 1) + K) - (bly * BLK_N * LDB + idyB * LDB + idxB) - 1; + int boundB = (LDB * (N - 1) + K) - (bly * BLK_N * LDB + idyB * LDB + idxB) - 1; int m, n, k, kk; @@ -401,19 +398,19 @@ template void vbatched_gemm_impl(int max_m, - int max_n, - int* m, - int* n, - int* k, - T** global_A_array, - int* global_lda, - T** global_B_array, - int* global_ldb, - T** global_C_array, - int* global_ldc, - int batchCount, - cudaStream_t stream, - T* alpha = nullptr) + int max_n, + int* m, + int* n, + int* k, + T** global_A_array, + int* global_lda, + T** global_B_array, + int* global_ldb, + T** global_C_array, + int* global_ldc, + int batchCount, + cudaStream_t stream, + T* alpha = nullptr) { // The positions of A and B have been swapped here. // This is because the original code is for column-major matrices. @@ -432,36 +429,24 @@ void vbatched_gemm_impl(int max_m, for (int i = 0; i < loop_num; ++i) { - dim3 dimGrid(ceildiv(max_n, BLK_M), - ceildiv(max_m, BLK_N), - max_batch_count); + dim3 dimGrid(ceildiv(max_n, BLK_M), ceildiv(max_m, BLK_N), max_batch_count); T* alpha_tmp = nullptr; if (alpha != nullptr) { alpha_tmp = alpha + i * max_batch_count; } - vbatched_gemm_kernel - <<>>( - n + i * max_batch_count, - m + i * max_batch_count, - k + i * max_batch_count, - global_B_array + i * max_batch_count, - global_ldb + i * max_batch_count, - global_A_array + i * max_batch_count, - global_lda + i * max_batch_count, - global_C_array + i * max_batch_count, - global_ldc + i * max_batch_count, - alpha_tmp); + vbatched_gemm_kernel + <<>>(n + i * max_batch_count, + m + i * max_batch_count, + k + i * max_batch_count, + global_B_array + i * max_batch_count, + global_ldb + i * max_batch_count, + global_A_array + i * max_batch_count, + global_lda + i * max_batch_count, + global_C_array + i * max_batch_count, + global_ldc + i * max_batch_count, + alpha_tmp); checkCudaLastError(); } if (remain_num > 0) @@ -472,27 +457,17 @@ void vbatched_gemm_impl(int max_m, { alpha_tmp = alpha + loop_num * max_batch_count; } - vbatched_gemm_kernel - <<>>( - n + loop_num * max_batch_count, - m + loop_num * max_batch_count, - k + loop_num * max_batch_count, - global_B_array + loop_num * max_batch_count, - global_ldb + loop_num * max_batch_count, - global_A_array + loop_num * max_batch_count, - global_lda + loop_num * max_batch_count, - global_C_array + loop_num * max_batch_count, - global_ldc + loop_num * max_batch_count, - alpha_tmp); + vbatched_gemm_kernel + <<>>(n + loop_num * max_batch_count, + m + loop_num * max_batch_count, + k + loop_num * max_batch_count, + global_B_array + loop_num * max_batch_count, + global_ldb + loop_num * max_batch_count, + global_A_array + loop_num * max_batch_count, + global_lda + loop_num * max_batch_count, + global_C_array + loop_num * max_batch_count, + global_ldc + loop_num * max_batch_count, + alpha_tmp); checkCudaLastError(); } } @@ -527,33 +502,23 @@ void gemm_time_measure(int max_m, double* d_global_C) { cudaEvent_t start, stop; - checkCuda( - cudaMemset(d_global_C, 0, batchCount * max_m * max_n * sizeof(double))); + checkCuda(cudaMemset(d_global_C, 0, batchCount * max_m * max_n * sizeof(double))); checkCuda(cudaEventCreate(&start)); checkCuda(cudaEventCreate(&stop)); checkCuda(cudaEventRecord(start, stream)); - vbatched_gemm_impl(max_m, - max_n, - m, - n, - k, - global_A_array, - global_lda, - global_B_array, - global_ldb, - global_C_array, - global_ldc, - batchCount, - stream); + vbatched_gemm_impl(max_m, + max_n, + m, + n, + k, + global_A_array, + global_lda, + global_B_array, + global_ldb, + global_C_array, + global_ldc, + batchCount, + stream); checkCuda(cudaEventRecord(stop, stream)); cudaError_t cuda_status = cudaGetLastError(); checkCuda(cudaStreamSynchronize(stream)); @@ -561,10 +526,7 @@ void gemm_time_measure(int max_m, checkCuda(cudaEventElapsedTime(&milliseconds, start, stop)); // WARNING !!!!! Here we assume that all m and n are the same - checkCuda(cudaMemcpy(h_global_C, - d_global_C, - batchCount * max_m * max_n * sizeof(double), - cudaMemcpyDeviceToHost)); + checkCuda(cudaMemcpy(h_global_C, d_global_C, batchCount * max_m * max_n * sizeof(double), cudaMemcpyDeviceToHost)); bool check_result = true; for (int i = 0; i < batchCount * max_m * max_n; ++i) { @@ -577,21 +539,11 @@ void gemm_time_measure(int max_m, if (milliseconds < fast_time && cuda_status == cudaSuccess && check_result) { fast_time = milliseconds; - fastest_algo = vbatched_gemm_impl; + fastest_algo = vbatched_gemm_impl; #ifdef __DEBUG std::cout << "found! fastest time: " << fast_time << std::endl; - std::cout << DIM_X << "," << DIM_Y << "," << BLK_M << "," << BLK_N - << "," << BLK_K << "," << DIM_XA << "," << DIM_YA << "," - << DIM_XB << "," << DIM_YB << std::endl; + std::cout << DIM_X << "," << DIM_Y << "," << BLK_M << "," << BLK_N << "," << BLK_K << "," << DIM_XA << "," + << DIM_YA << "," << DIM_XB << "," << DIM_YB << std::endl; #endif } } diff --git a/source/module_hamilt_lcao/module_gint/mult_psi_dmr.cpp b/source/module_hamilt_lcao/module_gint/mult_psi_dmr.cpp index efa51ec4a6..4d45d32d32 100644 --- a/source/module_hamilt_lcao/module_gint/mult_psi_dmr.cpp +++ b/source/module_hamilt_lcao/module_gint/mult_psi_dmr.cpp @@ -1,23 +1,23 @@ #include "gint_tools.h" -#include "module_base/timer.h" -#include "module_base/ylm.h" -#include "module_base/blas_connector.h" - -namespace Gint_Tools{ - -void mult_psi_DMR( - const Grid_Technique& gt, - const int bxyz, - const int LD_pool, - const int &grid_index, - const int &na_grid, - const int*const block_index, - const int*const block_size, - const bool*const*const cal_flag, - const double*const*const psi, - double*const*const psi_DMR, - const hamilt::HContainer*const DM, - const bool if_symm) +#include "source_base/blas_connector.h" +#include "source_base/timer.h" +#include "source_base/ylm.h" + +namespace Gint_Tools +{ + +void mult_psi_DMR(const Grid_Technique& gt, + const int bxyz, + const int LD_pool, + const int& grid_index, + const int& na_grid, + const int* const block_index, + const int* const block_size, + const bool* const* const cal_flag, + const double* const* const psi, + double* const* const psi_DMR, + const hamilt::HContainer* const DM, + const bool if_symm) { const UnitCell& ucell = *gt.ucell; @@ -43,26 +43,36 @@ void mult_psi_DMR( { //! ia2==ia1 const auto tmp_matrix = DM->find_matrix(iat1, iat1, 0, 0, 0); - + //! maybe checking "tmp_matrix == nullptr" is not necessary - if(tmp_matrix == nullptr) + if (tmp_matrix == nullptr) { continue; } - + const auto cal_info = Gint_Tools::cal_info(bxyz, ia1, ia1, cal_flag); const int ib_start = cal_info.first; const int ib_len = cal_info.second; - - if(ib_len == 0) + + if (ib_len == 0) { continue; } - + const auto tmp_matrix_ptr = tmp_matrix->get_pointer(); const int idx1 = block_index[ia1]; - BlasConnector::symm_cm(side, uplo, block_size[ia1], ib_len, alpha, tmp_matrix_ptr, block_size[ia1], - &psi[ib_start][idx1], LD_pool, beta, &psi_DMR[ib_start][idx1], LD_pool); + BlasConnector::symm_cm(side, + uplo, + block_size[ia1], + ib_len, + alpha, + tmp_matrix_ptr, + block_size[ia1], + &psi[ib_start][idx1], + LD_pool, + beta, + &psi_DMR[ib_start][idx1], + LD_pool); } //! get (j,beta,R2) @@ -78,28 +88,39 @@ void mult_psi_DMR( const ModuleBase::Vector3 r2 = gt.get_ucell_coords(id2); // get AtomPair - const auto tmp_matrix = DM->find_matrix(iat1, iat2, r1-r2); + const auto tmp_matrix = DM->find_matrix(iat1, iat2, r1 - r2); if (tmp_matrix == nullptr) { continue; } const auto tmp_matrix_ptr = tmp_matrix->get_pointer(); - + const auto cal_info = Gint_Tools::cal_info(bxyz, ia1, ia1, cal_flag); const int ib_start = cal_info.first; const int ib_len = cal_info.second; - if(ib_len == 0) + if (ib_len == 0) { continue; } const int idx1 = block_index[ia1]; const int idx2 = block_index[ia2]; - - dgemm_(&trans, &trans, &block_size[ia2], &ib_len, &block_size[ia1], &alpha1, tmp_matrix_ptr, &block_size[ia2], - &psi[ib_start][idx1], &LD_pool, &beta, &psi_DMR[ib_start][idx2], &LD_pool); - } // ia2 - } // ia1 -}// End of mult_psi_DMR + dgemm_(&trans, + &trans, + &block_size[ia2], + &ib_len, + &block_size[ia1], + &alpha1, + tmp_matrix_ptr, + &block_size[ia2], + &psi[ib_start][idx1], + &LD_pool, + &beta, + &psi_DMR[ib_start][idx2], + &LD_pool); + + } // ia2 + } // ia1 +} // End of mult_psi_DMR -}// End of Gint_Tools +} // namespace Gint_Tools diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_atom.cpp b/source/module_hamilt_lcao/module_gint/temp_gint/gint_atom.cpp index 91b30748dd..bd206fb33d 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_atom.cpp +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_atom.cpp @@ -1,7 +1,8 @@ -#include "module_base/ylm.h" -#include "module_base/array_pool.h" #include "gint_atom.h" + #include "gint_helper.h" +#include "source_base/array_pool.h" +#include "source_base/ylm.h" namespace ModuleGint { @@ -17,9 +18,9 @@ void GintAtom::set_phi(const std::vector& coords, const int stride, T* ph // store the pointer to reduce repeated address fetching std::vector p_psi_uniform(atom_->nw); std::vector p_dpsi_uniform(atom_->nw); - for(int iw = 0; iw < atom_->nw; iw++) + for (int iw = 0; iw < atom_->nw; iw++) { - if(atom_->iw2_new[iw]) + if (atom_->iw2_new[iw]) { int l = atom_->iw2l[iw]; int n = atom_->iw2n[iw]; @@ -32,14 +33,14 @@ void GintAtom::set_phi(const std::vector& coords, const int stride, T* ph // it's outside the loop to reduce the vector allocation overhead std::vector ylma; - for(int im = 0; im < num_mgrids; im++) + for (int im = 0; im < num_mgrids; im++) { const Vec3d& coord = coords[im]; // 1e-9 is to avoid division by zero const double dist = coord.norm() < 1e-9 ? 1e-9 : coord.norm(); - if(dist > orb_->getRcut()) - { + if (dist > orb_->getRcut()) + { // if the distance is larger than the cutoff radius, // the wave function values are all zeros ModuleBase::GlobalFunc::ZEROS(phi + im * stride, atom_->nw); @@ -47,9 +48,9 @@ void GintAtom::set_phi(const std::vector& coords, const int stride, T* ph else { // spherical harmonics - // TODO: vectorize the sph_harm function, + // TODO: vectorize the sph_harm function, // the vectorized function can be called once for all meshgrids in a biggrid - ModuleBase::Ylm::sph_harm(atom_->nwl, coord.x/dist, coord.y/dist, coord.z/dist, ylma); + ModuleBase::Ylm::sph_harm(atom_->nwl, coord.x / dist, coord.y / dist, coord.z / dist, ylma); // interpolation // these parameters are related to interpolation @@ -69,15 +70,15 @@ void GintAtom::set_phi(const std::vector& coords, const int stride, T* ph // I'm not sure if the variable name 'psi' is appropriate double psi = 0; - - for(int iw = 0; iw < atom_->nw; iw++) + + for (int iw = 0; iw < atom_->nw; iw++) { - if(atom_->iw2_new[iw]) + if (atom_->iw2_new[iw]) { auto psi_uniform = p_psi_uniform[iw]; auto dpsi_uniform = p_dpsi_uniform[iw]; - psi = c1 * psi_uniform[ip] + c2 * dpsi_uniform[ip] - + c3 * psi_uniform[ip + 1] + c4 * dpsi_uniform[ip + 1]; + psi = c1 * psi_uniform[ip] + c2 * dpsi_uniform[ip] + c3 * psi_uniform[ip + 1] + + c4 * dpsi_uniform[ip + 1]; } phi[im * stride + iw] = psi * ylma[atom_->iw2_ylm[iw]]; } @@ -86,12 +87,11 @@ void GintAtom::set_phi(const std::vector& coords, const int stride, T* ph } template -void GintAtom::set_phi_dphi( - const std::vector& coords, const int stride, - T* phi, T* dphi_x, T* dphi_y, T* dphi_z) const +void GintAtom::set_phi_dphi(const std::vector& coords, const int stride, T* phi, T* dphi_x, T* dphi_y, T* dphi_z) + const { const int num_mgrids = coords.size(); - + // orb_ does not have the member variable dr_uniform const double dr_uniform = orb_->PhiLN(0, 0).dr_uniform; @@ -99,9 +99,9 @@ void GintAtom::set_phi_dphi( std::vector p_psi_uniform(atom_->nw); std::vector p_dpsi_uniform(atom_->nw); std::vector phi_nr_uniform(atom_->nw); - for (int iw=0; iw< atom_->nw; ++iw) + for (int iw = 0; iw < atom_->nw; ++iw) { - if ( atom_->iw2_new[iw] ) + if (atom_->iw2_new[iw]) { int l = atom_->iw2l[iw]; int n = atom_->iw2n[iw]; @@ -110,22 +110,22 @@ void GintAtom::set_phi_dphi( phi_nr_uniform[iw] = orb_->PhiLN(l, n).nr_uniform; } } - + std::vector rly(std::pow(atom_->nwl + 1, 2)); // TODO: replace array_pool with std::vector ModuleBase::Array_Pool grly(std::pow(atom_->nwl + 1, 2), 3); - - for(int im = 0; im < num_mgrids; im++) + + for (int im = 0; im < num_mgrids; im++) { const Vec3d& coord = coords[im]; // 1e-9 is to avoid division by zero const double dist = coord.norm() < 1e-9 ? 1e-9 : coord.norm(); - if(dist > orb_->getRcut()) + if (dist > orb_->getRcut()) { // if the distance is larger than the cutoff radius, // the wave function values are all zeros - if(phi != nullptr) + if (phi != nullptr) { ModuleBase::GlobalFunc::ZEROS(phi + im * stride, atom_->nw); } @@ -136,7 +136,7 @@ void GintAtom::set_phi_dphi( else { // spherical harmonics - // TODO: vectorize the sph_harm function, + // TODO: vectorize the sph_harm function, // the vectorized function can be called once for all meshgrids in a biggrid ModuleBase::Ylm::grad_rl_sph_harm(atom_->nwl, coord.x, coord.y, coord.z, rly.data(), grly.get_ptr_2D()); @@ -151,16 +151,16 @@ void GintAtom::set_phi_dphi( const double x03 = x0 * x3 / 2; double tmp, dtmp; - for(int iw = 0; iw < atom_->nw; ++iw) + for (int iw = 0; iw < atom_->nw; ++iw) { // this is a new 'l', we need 1D orbital wave // function from interpolation method. - if(atom_->iw2_new[iw]) + if (atom_->iw2_new[iw]) { auto psi_uniform = p_psi_uniform[iw]; auto dpsi_uniform = p_dpsi_uniform[iw]; - if(ip >= phi_nr_uniform[iw] - 4) + if (ip >= phi_nr_uniform[iw] - 4) { tmp = dtmp = 0.0; } @@ -170,10 +170,10 @@ void GintAtom::set_phi_dphi( // wave functions tmp = x12 * (psi_uniform[ip] * x3 + psi_uniform[ip + 3] * x0) - + x03 * (psi_uniform[ip + 1] * x2 - psi_uniform[ip + 2] * x1); + + x03 * (psi_uniform[ip + 1] * x2 - psi_uniform[ip + 2] * x1); dtmp = x12 * (dpsi_uniform[ip] * x3 + dpsi_uniform[ip + 3] * x0) - + x03 * (dpsi_uniform[ip + 1] * x2 - dpsi_uniform[ip + 2] * x1); + + x03 * (dpsi_uniform[ip + 1] * x2 - dpsi_uniform[ip + 2] * x1); } } // new l is used. @@ -185,17 +185,17 @@ void GintAtom::set_phi_dphi( const double tmprl = tmp / rl; // 3D wave functions - if(phi != nullptr) + if (phi != nullptr) { phi[im * stride + iw] = tmprl * rly[idx_lm]; } - + // derivative of wave functions with respect to atom positions. const double tmpdphi_rly = (dtmp - tmp * ll / dist) / rl * rly[idx_lm] / dist; - dphi_x[im * stride + iw] = tmpdphi_rly * coord.x + tmprl * grly[idx_lm][0]; - dphi_y[im * stride + iw] = tmpdphi_rly * coord.y + tmprl * grly[idx_lm][1]; - dphi_z[im * stride + iw] = tmpdphi_rly * coord.z + tmprl * grly[idx_lm][2]; + dphi_x[im * stride + iw] = tmpdphi_rly * coord.x + tmprl * grly[idx_lm][0]; + dphi_y[im * stride + iw] = tmpdphi_rly * coord.y + tmprl * grly[idx_lm][1]; + dphi_z[im * stride + iw] = tmpdphi_rly * coord.z + tmprl * grly[idx_lm][2]; } } } @@ -204,5 +204,10 @@ void GintAtom::set_phi_dphi( // explicit instantiation template void GintAtom::set_phi(const std::vector& coords, const int stride, double* phi) const; template void GintAtom::set_phi(const std::vector& coords, const int stride, std::complex* phi) const; -template void GintAtom::set_phi_dphi(const std::vector& coords, const int stride, double* phi, double* dphi_x, double* dphi_y, double* dphi_z) const; -} \ No newline at end of file +template void GintAtom::set_phi_dphi(const std::vector& coords, + const int stride, + double* phi, + double* dphi_x, + double* dphi_y, + double* dphi_z) const; +} // namespace ModuleGint \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl.cpp b/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl.cpp index f97ccf0ed3..19814561d0 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl.cpp +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl.cpp @@ -1,7 +1,8 @@ -#include "module_base/global_function.h" #include "gint_fvl.h" + #include "gint_common.h" #include "phi_operator.h" +#include "source_base/global_function.h" namespace ModuleGint { @@ -35,20 +36,20 @@ void Gint_fvl::cal_fvl_svl_() std::vector dphi_z; ModuleBase::matrix* fvl_thread = nullptr; ModuleBase::matrix* svl_thread = nullptr; - if(isforce_) + if (isforce_) { fvl_thread = new ModuleBase::matrix(*fvl_); fvl_thread->zero_out(); } - if(isstress_) + if (isstress_) { svl_thread = new ModuleBase::matrix(*svl_); svl_thread->zero_out(); } #pragma omp for schedule(dynamic) - for(const auto& biggrid: gint_info_->get_biggrids()) + for (const auto& biggrid: gint_info_->get_biggrids()) { - if(biggrid->get_atoms().size() == 0) + if (biggrid->get_atoms().size() == 0) { continue; } @@ -65,11 +66,11 @@ void Gint_fvl::cal_fvl_svl_() { phi_op.phi_mul_vldr3(vr_eff_[is], dr3_, phi.data(), phi_vldr3.data()); phi_op.phi_mul_dm(phi_vldr3.data(), *dm_gint_vec_[is], false, phi_vldr3_dm.data()); - if(isforce_) + if (isforce_) { phi_op.phi_dot_dphi(phi_vldr3_dm.data(), dphi_x.data(), dphi_y.data(), dphi_z.data(), fvl_thread); } - if(isstress_) + if (isstress_) { phi_op.phi_dot_dphi_r(phi_vldr3_dm.data(), dphi_x.data(), dphi_y.data(), dphi_z.data(), svl_thread); } @@ -77,12 +78,12 @@ void Gint_fvl::cal_fvl_svl_() } #pragma omp critical { - if(isforce_) + if (isforce_) { fvl_[0] += fvl_thread[0]; delete fvl_thread; } - if(isstress_) + if (isstress_) { svl_[0] += svl_thread[0]; delete svl_thread; @@ -91,5 +92,4 @@ void Gint_fvl::cal_fvl_svl_() } } - -} \ No newline at end of file +} // namespace ModuleGint \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl.h b/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl.h index ae75eda62d..8dc7b45a08 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl.h +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl.h @@ -1,33 +1,32 @@ #pragma once -#include -#include -#include "module_hamilt_lcao/module_hcontainer/hcontainer.h" -#include "module_base/matrix.h" #include "gint.h" #include "gint_info.h" +#include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "source_base/matrix.h" + +#include +#include namespace ModuleGint { class Gint_fvl : public Gint { - public: - Gint_fvl( - const int nspin, - const std::vector& vr_eff, - const std::vector*>& dm_vec, - const bool isforce, - const bool isstress, - ModuleBase::matrix* fvl, - ModuleBase::matrix* svl) - : nspin_(nspin), vr_eff_(vr_eff), dm_vec_(dm_vec), - isforce_(isforce), isstress_(isstress), fvl_(fvl), svl_(svl), - dr3_(gint_info_->get_mgrid_volume()) {}; + public: + Gint_fvl(const int nspin, + const std::vector& vr_eff, + const std::vector*>& dm_vec, + const bool isforce, + const bool isstress, + ModuleBase::matrix* fvl, + ModuleBase::matrix* svl) + : nspin_(nspin), vr_eff_(vr_eff), dm_vec_(dm_vec), isforce_(isforce), isstress_(isstress), fvl_(fvl), svl_(svl), + dr3_(gint_info_->get_mgrid_volume()){}; void cal_gint() override; - private: + private: void init_dm_gint_(); void cal_fvl_svl_(); @@ -49,4 +48,4 @@ class Gint_fvl : public Gint double dr3_; }; -} \ No newline at end of file +} // namespace ModuleGint \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl_meta.cpp b/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl_meta.cpp index d493d954b7..5e3ae2ad52 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl_meta.cpp +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl_meta.cpp @@ -1,7 +1,8 @@ -#include "module_base/global_function.h" #include "gint_fvl_meta.h" + #include "gint_common.h" #include "phi_operator.h" +#include "source_base/global_function.h" namespace ModuleGint { @@ -47,20 +48,20 @@ void Gint_fvl_meta::cal_fvl_svl_() std::vector ddphi_zz; ModuleBase::matrix* fvl_thread = nullptr; ModuleBase::matrix* svl_thread = nullptr; - if(isforce_) + if (isforce_) { fvl_thread = new ModuleBase::matrix(*fvl_); fvl_thread->zero_out(); } - if(isstress_) + if (isstress_) { svl_thread = new ModuleBase::matrix(*svl_); svl_thread->zero_out(); } #pragma omp for schedule(dynamic) - for(const auto& biggrid: gint_info_->get_biggrids()) + for (const auto& biggrid: gint_info_->get_biggrids()) { - if(biggrid->get_atoms().size() == 0) + if (biggrid->get_atoms().size() == 0) { continue; } @@ -85,8 +86,12 @@ void Gint_fvl_meta::cal_fvl_svl_() ddphi_yz.resize(phi_len); ddphi_zz.resize(phi_len); phi_op.set_phi_dphi(phi.data(), dphi_x.data(), dphi_y.data(), dphi_z.data()); - phi_op.set_ddphi(ddphi_xx.data(), ddphi_xy.data(), ddphi_xz.data(), - ddphi_yy.data(), ddphi_yz.data(), ddphi_zz.data()); + phi_op.set_ddphi(ddphi_xx.data(), + ddphi_xy.data(), + ddphi_xz.data(), + ddphi_yy.data(), + ddphi_yz.data(), + ddphi_zz.data()); for (int is = 0; is < nspin_; is++) { phi_op.phi_mul_vldr3(vr_eff_[is], dr3_, phi.data(), phi_vldr3.data()); @@ -97,30 +102,54 @@ void Gint_fvl_meta::cal_fvl_svl_() phi_op.phi_mul_dm(dphi_x_vldr3.data(), *dm_gint_vec_[is], false, dphi_x_vldr3_dm.data()); phi_op.phi_mul_dm(dphi_y_vldr3.data(), *dm_gint_vec_[is], false, dphi_y_vldr3_dm.data()); phi_op.phi_mul_dm(dphi_z_vldr3.data(), *dm_gint_vec_[is], false, dphi_z_vldr3_dm.data()); - if(isforce_) + if (isforce_) { phi_op.phi_dot_dphi(phi_vldr3_dm.data(), dphi_x.data(), dphi_y.data(), dphi_z.data(), fvl_thread); - phi_op.phi_dot_dphi(dphi_x_vldr3_dm.data(), ddphi_xx.data(), ddphi_xy.data(), ddphi_xz.data(), fvl_thread); - phi_op.phi_dot_dphi(dphi_y_vldr3_dm.data(), ddphi_xy.data(), ddphi_yy.data(), ddphi_yz.data(), fvl_thread); - phi_op.phi_dot_dphi(dphi_z_vldr3_dm.data(), ddphi_xz.data(), ddphi_yz.data(), ddphi_zz.data(), fvl_thread); + phi_op.phi_dot_dphi(dphi_x_vldr3_dm.data(), + ddphi_xx.data(), + ddphi_xy.data(), + ddphi_xz.data(), + fvl_thread); + phi_op.phi_dot_dphi(dphi_y_vldr3_dm.data(), + ddphi_xy.data(), + ddphi_yy.data(), + ddphi_yz.data(), + fvl_thread); + phi_op.phi_dot_dphi(dphi_z_vldr3_dm.data(), + ddphi_xz.data(), + ddphi_yz.data(), + ddphi_zz.data(), + fvl_thread); } - if(isstress_) + if (isstress_) { phi_op.phi_dot_dphi_r(phi_vldr3_dm.data(), dphi_x.data(), dphi_y.data(), dphi_z.data(), svl_thread); - phi_op.phi_dot_dphi_r(dphi_x_vldr3_dm.data(), ddphi_xx.data(), ddphi_xy.data(), ddphi_xz.data(), svl_thread); - phi_op.phi_dot_dphi_r(dphi_y_vldr3_dm.data(), ddphi_xy.data(), ddphi_yy.data(), ddphi_yz.data(), svl_thread); - phi_op.phi_dot_dphi_r(dphi_z_vldr3_dm.data(), ddphi_xz.data(), ddphi_yz.data(), ddphi_zz.data(), svl_thread); + phi_op.phi_dot_dphi_r(dphi_x_vldr3_dm.data(), + ddphi_xx.data(), + ddphi_xy.data(), + ddphi_xz.data(), + svl_thread); + phi_op.phi_dot_dphi_r(dphi_y_vldr3_dm.data(), + ddphi_xy.data(), + ddphi_yy.data(), + ddphi_yz.data(), + svl_thread); + phi_op.phi_dot_dphi_r(dphi_z_vldr3_dm.data(), + ddphi_xz.data(), + ddphi_yz.data(), + ddphi_zz.data(), + svl_thread); } } } #pragma omp critical { - if(isforce_) + if (isforce_) { fvl_[0] += fvl_thread[0]; delete fvl_thread; } - if(isstress_) + if (isstress_) { svl_[0] += svl_thread[0]; delete svl_thread; diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl_meta.h b/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl_meta.h index 36c8e69822..f972544815 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl_meta.h +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_fvl_meta.h @@ -1,33 +1,32 @@ #pragma once -#include -#include -#include "module_hamilt_lcao/module_hcontainer/hcontainer.h" -#include "module_base/matrix.h" #include "gint.h" #include "gint_info.h" +#include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "source_base/matrix.h" + +#include +#include namespace ModuleGint { class Gint_fvl_meta : public Gint { - public: - Gint_fvl_meta( - const int nspin, - const std::vector& vr_eff, - const std::vector& vofk, - const std::vector*>& dm_vec, - const bool isforce, - const bool isstress, - ModuleBase::matrix* fvl, - ModuleBase::matrix* svl) - : nspin_(nspin), vr_eff_(vr_eff), vofk_(vofk), dm_vec_(dm_vec), - isforce_(isforce), isstress_(isstress), fvl_(fvl), svl_(svl), - dr3_(gint_info_->get_mgrid_volume()) {}; + public: + Gint_fvl_meta(const int nspin, + const std::vector& vr_eff, + const std::vector& vofk, + const std::vector*>& dm_vec, + const bool isforce, + const bool isstress, + ModuleBase::matrix* fvl, + ModuleBase::matrix* svl) + : nspin_(nspin), vr_eff_(vr_eff), vofk_(vofk), dm_vec_(dm_vec), isforce_(isforce), isstress_(isstress), + fvl_(fvl), svl_(svl), dr3_(gint_info_->get_mgrid_volume()){}; void cal_gint() override; - private: + private: void init_dm_gint_(); void cal_fvl_svl_(); diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_helper.h b/source/module_hamilt_lcao/module_gint/temp_gint/gint_helper.h index b1f72c5a11..ae0a64131c 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_helper.h +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_helper.h @@ -1,24 +1,28 @@ #pragma once -#include -#include #include "gint_type.h" -#include "module_base/timer.h" +#include "source_base/timer.h" + +#include +#include template -std::shared_ptr toConstSharedPtr(std::shared_ptr ptr) { +std::shared_ptr toConstSharedPtr(std::shared_ptr ptr) +{ return std::static_pointer_cast(ptr); } - -inline int index3Dto1D(const int id_x, const int id_y, const int id_z, - const int dim_x, const int dim_y, const int dim_z) +inline int index3Dto1D(const int id_x, + const int id_y, + const int id_z, + const int dim_x, + const int dim_y, + const int dim_z) { return id_z + id_y * dim_z + id_x * dim_y * dim_z; }; -inline Vec3i index1Dto3D(const int index_1d, - const int dim_x, const int dim_y, const int dim_z) +inline Vec3i index1Dto3D(const int index_1d, const int dim_x, const int dim_y, const int dim_z) { int id_x = index_1d / (dim_y * dim_z); int id_y = (index_1d - id_x * dim_y * dim_z) / dim_z; @@ -59,5 +63,5 @@ inline int floor_div(const int a, const int b) inline int ceil_div(const int a, const int b) { - return a / b + (a % b != 0 && (a ^ b) > 0); + return a / b + (a % b != 0 && (a ^ b) > 0); }; \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_info.cpp b/source/module_hamilt_lcao/module_gint/temp_gint/gint_info.cpp index 5283f37ab1..64312b9de5 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_info.cpp +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_info.cpp @@ -1,32 +1,55 @@ -#include -#include -#include "module_parameter/parameter.h" -#include "module_base/timer.h" #include "gint_info.h" + #include "gint_type.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" + +#include +#include namespace ModuleGint { -GintInfo::GintInfo( - int nbx, int nby, int nbz, - int nmx, int nmy, int nmz, - int startidx_bx, int startidx_by, int startidx_bz, - int nbx_local, int nby_local, int nbz_local, - const Numerical_Orbital* Phi, - const UnitCell& ucell, Grid_Driver& gd) +GintInfo::GintInfo(int nbx, + int nby, + int nbz, + int nmx, + int nmy, + int nmz, + int startidx_bx, + int startidx_by, + int startidx_bz, + int nbx_local, + int nby_local, + int nbz_local, + const Numerical_Orbital* Phi, + const UnitCell& ucell, + Grid_Driver& gd) : ucell_(&ucell) { // initialize the unitcell information - unitcell_info_ = std::make_shared(ucell_->a1 * ucell_->lat0, ucell_->a2 * ucell_->lat0, ucell_->a3 * ucell_->lat0, - nbx, nby, nbz, nmx, nmy, nmz); + unitcell_info_ = std::make_shared(ucell_->a1 * ucell_->lat0, + ucell_->a2 * ucell_->lat0, + ucell_->a3 * ucell_->lat0, + nbx, + nby, + nbz, + nmx, + nmy, + nmz); biggrid_info_ = unitcell_info_->get_bgrid_info(); meshgrid_info_ = biggrid_info_->get_mgrid_info(); // initialize the divide information - divide_info_ = std::make_shared(startidx_bx, startidx_by, startidx_bz, - nbx_local, nby_local, nbz_local, unitcell_info_, false); + divide_info_ = std::make_shared(startidx_bx, + startidx_by, + startidx_bz, + nbx_local, + nby_local, + nbz_local, + unitcell_info_, + false); // initialize the localcell information localcell_info_ = divide_info_->get_localcell_info(); @@ -53,7 +76,7 @@ template std::shared_ptr> GintInfo::get_hr(int npol) const { auto p_hr = std::make_shared>(ucell_->nat); - if(PARAM.inp.gamma_only) + if (PARAM.inp.gamma_only) { p_hr->fix_gamma(); } @@ -69,21 +92,21 @@ void GintInfo::init_atoms_(int ntype, const Atom* atoms, const Numerical_Orbital is_atom_in_proc_.resize(ucell_->nat, false); atoms_.resize(ucell_->nat); -// TODO: USE OPENMP TO PARALLELIZE THIS LOOP - for(int i = 0; i < ntype; i++) + // TODO: USE OPENMP TO PARALLELIZE THIS LOOP + for (int i = 0; i < ntype; i++) { const auto& atom = atoms[i]; - const auto *orb = &Phi[i]; + const auto* orb = &Phi[i]; // rcut extends to the maximum big grids in x, y, z directions Vec3i ext_bgrid = biggrid_info_->max_ext_bgrid_num(atom.Rcut); - for(int j = 0; j < atom.na; j++) + for (int j = 0; j < atom.na; j++) { Vec3d fraction; fraction.x = atom.taud[j].x * unitcell_info_->get_nbx(); - fraction.y = atom.taud[j].y * unitcell_info_->get_nby(); - fraction.z = atom.taud[j].z * unitcell_info_->get_nbz(); + fraction.y = atom.taud[j].y * unitcell_info_->get_nby(); + fraction.z = atom.taud[j].z * unitcell_info_->get_nbz(); const Vec3i atom_bgrid_idx(static_cast(fraction.x), static_cast(fraction.y), static_cast(fraction.z)); @@ -95,16 +118,17 @@ void GintInfo::init_atoms_(int ntype, const Atom* atoms, const Numerical_Orbital const Vec3i ucell_idx_atom = unitcell_info_->get_unitcell_idx(atom_bgrid_idx); auto& r_to_atom = atoms_[iat]; - for(int bgrid_x = atom_bgrid_idx.x - ext_bgrid.x; bgrid_x <= atom_bgrid_idx.x + ext_bgrid.x; bgrid_x++) + for (int bgrid_x = atom_bgrid_idx.x - ext_bgrid.x; bgrid_x <= atom_bgrid_idx.x + ext_bgrid.x; bgrid_x++) { - for(int bgrid_y = atom_bgrid_idx.y - ext_bgrid.y; bgrid_y <= atom_bgrid_idx.y + ext_bgrid.y; bgrid_y++) + for (int bgrid_y = atom_bgrid_idx.y - ext_bgrid.y; bgrid_y <= atom_bgrid_idx.y + ext_bgrid.y; bgrid_y++) { - for(int bgrid_z = atom_bgrid_idx.z - ext_bgrid.z; bgrid_z <= atom_bgrid_idx.z + ext_bgrid.z; bgrid_z++) + for (int bgrid_z = atom_bgrid_idx.z - ext_bgrid.z; bgrid_z <= atom_bgrid_idx.z + ext_bgrid.z; + bgrid_z++) { // get the extended biggrid idx of the affected biggrid const Vec3i ext_bgrid_idx(bgrid_x, bgrid_y, bgrid_z); const Vec3i normal_bgrid_idx = unitcell_info_->map_ext_idx_to_ucell(ext_bgrid_idx); - if(localcell_info_->is_bgrid_in_lcell(normal_bgrid_idx) == false) + if (localcell_info_->is_bgrid_in_lcell(normal_bgrid_idx) == false) { continue; } @@ -112,21 +136,23 @@ void GintInfo::init_atoms_(int ntype, const Atom* atoms, const Numerical_Orbital // get the unitcell idx of the big grid const Vec3i ucell_idx_bgrid = unitcell_info_->get_unitcell_idx(ext_bgrid_idx); - // The index of the unitcell containing the biggrid relative to the unitcell containing the atom. + // The index of the unitcell containing the biggrid relative to the unitcell containing the + // atom. const Vec3i ucell_idx_relative = ucell_idx_bgrid - ucell_idx_atom; auto it = r_to_atom.find(ucell_idx_relative); // if the gint_atom is not in the map, // it means this is the first time we find this atom may affect some biggrids, // add it to the r_to_atom map - if(it == r_to_atom.end()) + if (it == r_to_atom.end()) { Vec3i ext_atom_bgrid_idx(atom_bgrid_idx.x - ucell_idx_bgrid.x * unitcell_info_->get_nbx(), atom_bgrid_idx.y - ucell_idx_bgrid.y * unitcell_info_->get_nby(), atom_bgrid_idx.z - ucell_idx_bgrid.z * unitcell_info_->get_nbz()); - r_to_atom.insert(std::make_pair(ucell_idx_relative, + r_to_atom.insert(std::make_pair( + ucell_idx_relative, GintAtom(&atom, j, iat, ext_atom_bgrid_idx, ucell_idx_relative, tau_in_biggrid, orb))); } - if(biggrids_[bgrid_local_idx]->is_atom_on_bgrid(&r_to_atom.at(ucell_idx_relative))) + if (biggrids_[bgrid_local_idx]->is_atom_on_bgrid(&r_to_atom.at(ucell_idx_relative))) { biggrids_[bgrid_local_idx]->add_atom(&r_to_atom.at(ucell_idx_relative)); is_atom_in_proc_[iat] = true; @@ -147,61 +173,67 @@ void GintInfo::init_ijr_info_(const UnitCell& ucell, Grid_Driver& gd) // same, name as orb_index std::vector orb_index(ucell.nat + 1); orb_index[0] = 0; - for (int i = 1; i < orb_index.size(); i++) { + for (int i = 1; i < orb_index.size(); i++) + { int type = ucell.iat2it[i - 1]; orb_index[i] = orb_index[i - 1] + ucell.atoms[type].nw; } - for (int T1 = 0; T1 < ucell.ntype; ++T1) { - const Atom* atom1 = &(ucell.atoms[T1]); - for (int I1 = 0; I1 < atom1->na; ++I1) { - auto& tau1 = atom1->tau[I1]; - const int iat1 = ucell.itia2iat(T1, I1); - // whether this atom is in this processor. - if (this->is_atom_in_proc_[iat1]) { - gd.Find_atom(ucell, tau1, T1, I1); - for (int ad = 0; ad < gd.getAdjacentNum() + 1; ++ad) { - const int T2 = gd.getType(ad); - const int I2 = gd.getNatom(ad); - const int iat2 = ucell.itia2iat(T2, I2); - const Atom* atom2 = &(ucell.atoms[T2]); - - // NOTE: hr_gint wil save total number of atom pairs, - // if only upper triangle is saved, the lower triangle will - // be lost in 2D-block parallelization. if the adjacent atom - // is in this processor. - if (this->is_atom_in_proc_[iat2]) { - Vec3d dtau = gd.getAdjacentTau(ad) - tau1; - double distance = dtau.norm() * ucell.lat0; - double rcut = atom1->Rcut + atom2->Rcut; - - // if(distance < rcut) - // mohan reset this 2013-07-02 in Princeton - // we should make absolutely sure that the distance is - // smaller than rcuts[it] this should be consistant - // with LCAO_nnr::cal_nnrg function typical example : 7 - // Bohr cutoff Si orbital in 14 Bohr length of cell. - // distance = 7.0000000000000000 - // rcuts[it] = 7.0000000000000008 - if (distance < rcut - 1.0e-15) { - // calculate R index - auto& R_index = gd.getBox(ad); - // insert this atom-pair into this->hr_gint - hamilt::AtomPair tmp_atom_pair( - iat1, - iat2, - R_index.x, - R_index.y, - R_index.z, - orb_index.data(), - orb_index.data(), - ucell.nat); - hr_gint_local.insert_pair(tmp_atom_pair); - } + for (int T1 = 0; T1 < ucell.ntype; ++T1) + { + const Atom* atom1 = &(ucell.atoms[T1]); + for (int I1 = 0; I1 < atom1->na; ++I1) + { + auto& tau1 = atom1->tau[I1]; + const int iat1 = ucell.itia2iat(T1, I1); + // whether this atom is in this processor. + if (this->is_atom_in_proc_[iat1]) + { + gd.Find_atom(ucell, tau1, T1, I1); + for (int ad = 0; ad < gd.getAdjacentNum() + 1; ++ad) + { + const int T2 = gd.getType(ad); + const int I2 = gd.getNatom(ad); + const int iat2 = ucell.itia2iat(T2, I2); + const Atom* atom2 = &(ucell.atoms[T2]); + + // NOTE: hr_gint wil save total number of atom pairs, + // if only upper triangle is saved, the lower triangle will + // be lost in 2D-block parallelization. if the adjacent atom + // is in this processor. + if (this->is_atom_in_proc_[iat2]) + { + Vec3d dtau = gd.getAdjacentTau(ad) - tau1; + double distance = dtau.norm() * ucell.lat0; + double rcut = atom1->Rcut + atom2->Rcut; + + // if(distance < rcut) + // mohan reset this 2013-07-02 in Princeton + // we should make absolutely sure that the distance is + // smaller than rcuts[it] this should be consistant + // with LCAO_nnr::cal_nnrg function typical example : 7 + // Bohr cutoff Si orbital in 14 Bohr length of cell. + // distance = 7.0000000000000000 + // rcuts[it] = 7.0000000000000008 + if (distance < rcut - 1.0e-15) + { + // calculate R index + auto& R_index = gd.getBox(ad); + // insert this atom-pair into this->hr_gint + hamilt::AtomPair tmp_atom_pair(iat1, + iat2, + R_index.x, + R_index.y, + R_index.z, + orb_index.data(), + orb_index.data(), + ucell.nat); + hr_gint_local.insert_pair(tmp_atom_pair); } } } } + } } this->ijr_info_ = hr_gint_local.get_ijr_info(); return; @@ -209,4 +241,4 @@ void GintInfo::init_ijr_info_(const UnitCell& ucell, Grid_Driver& gd) template std::shared_ptr> GintInfo::get_hr(int npol) const; template std::shared_ptr>> GintInfo::get_hr>(int npol) const; -} \ No newline at end of file +} // namespace ModuleGint \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_interface.cpp b/source/module_hamilt_lcao/module_gint/temp_gint/gint_interface.cpp index 28b2770cdb..b63ac4f3f4 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_interface.cpp +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_interface.cpp @@ -1,20 +1,19 @@ #include "gint_interface.h" -#include "module_base/timer.h" -#include "gint_vl.h" -#include "gint_vl_metagga.h" -#include "gint_vl_nspin4.h" -#include "gint_vl_metagga_nspin4.h" + #include "gint_fvl.h" #include "gint_fvl_meta.h" #include "gint_rho.h" #include "gint_tau.h" +#include "gint_vl.h" +#include "gint_vl_metagga.h" +#include "gint_vl_metagga_nspin4.h" +#include "gint_vl_nspin4.h" +#include "source_base/timer.h" namespace ModuleGint { -void cal_gint_vl( - const double* vr_eff, - HContainer* hR) +void cal_gint_vl(const double* vr_eff, HContainer* hR) { ModuleBase::timer::tick("Gint", "cal_gint_vl"); Gint_vl gint_vl(vr_eff, hR); @@ -22,9 +21,7 @@ void cal_gint_vl( ModuleBase::timer::tick("Gint", "cal_gint_vl"); } -void cal_gint_vl( - std::vector vr_eff, - HContainer>* hR) +void cal_gint_vl(std::vector vr_eff, HContainer>* hR) { ModuleBase::timer::tick("Gint", "cal_gint_vl"); Gint_vl_nspin4 gint_vl_nspin4(vr_eff, hR); @@ -32,10 +29,7 @@ void cal_gint_vl( ModuleBase::timer::tick("Gint", "cal_gint_vl"); } -void cal_gint_vl_metagga( - const double* vr_eff, - const double* vfork, - HContainer* hR) +void cal_gint_vl_metagga(const double* vr_eff, const double* vfork, HContainer* hR) { ModuleBase::timer::tick("Gint", "cal_gint_vl_metagga"); Gint_vl_metagga gint_vl_metagga(vr_eff, vfork, hR); @@ -43,10 +37,9 @@ void cal_gint_vl_metagga( ModuleBase::timer::tick("Gint", "cal_gint_vl_metagga"); } -void cal_gint_vl_metagga( - std::vector vr_eff, - std::vector vofk, - HContainer>* hR) +void cal_gint_vl_metagga(std::vector vr_eff, + std::vector vofk, + HContainer>* hR) { ModuleBase::timer::tick("Gint", "cal_gint_vl_metagga"); Gint_vl_metagga_nspin4 gint_vl_metagga_nspin4(vr_eff, vofk, hR); @@ -54,10 +47,7 @@ void cal_gint_vl_metagga( ModuleBase::timer::tick("Gint", "cal_gint_vl_metagga"); } -void cal_gint_rho( - const std::vector*>& dm_vec, - const int nspin, - double **rho) +void cal_gint_rho(const std::vector*>& dm_vec, const int nspin, double** rho) { ModuleBase::timer::tick("Gint", "cal_gint_rho"); Gint_rho gint_rho(dm_vec, nspin, rho); @@ -65,10 +55,7 @@ void cal_gint_rho( ModuleBase::timer::tick("Gint", "cal_gint_rho"); } -void cal_gint_tau( - const std::vector*>& dm_vec, - const int nspin, - double** tau) +void cal_gint_tau(const std::vector*>& dm_vec, const int nspin, double** tau) { ModuleBase::timer::tick("Gint", "cal_gint_tau"); Gint_tau gint_tau(dm_vec, nspin, tau); @@ -76,14 +63,13 @@ void cal_gint_tau( ModuleBase::timer::tick("Gint", "cal_gint_tau"); } -void cal_gint_fvl( - const int nspin, - const std::vector& vr_eff, - const std::vector*>& dm_vec, - const bool isforce, - const bool isstress, - ModuleBase::matrix* fvl, - ModuleBase::matrix* svl) +void cal_gint_fvl(const int nspin, + const std::vector& vr_eff, + const std::vector*>& dm_vec, + const bool isforce, + const bool isstress, + ModuleBase::matrix* fvl, + ModuleBase::matrix* svl) { ModuleBase::timer::tick("Gint", "cal_gint_fvl"); Gint_fvl gint_fvl(nspin, vr_eff, dm_vec, isforce, isstress, fvl, svl); @@ -91,15 +77,14 @@ void cal_gint_fvl( ModuleBase::timer::tick("Gint", "cal_gint_fvl"); } -void cal_gint_fvl_meta( - const int nspin, - const std::vector& vr_eff, - const std::vector& vofk, - const std::vector*>& dm_vec, - const bool isforce, - const bool isstress, - ModuleBase::matrix* fvl, - ModuleBase::matrix* svl) +void cal_gint_fvl_meta(const int nspin, + const std::vector& vr_eff, + const std::vector& vofk, + const std::vector*>& dm_vec, + const bool isforce, + const bool isstress, + ModuleBase::matrix* fvl, + ModuleBase::matrix* svl) { ModuleBase::timer::tick("Gint", "cal_gint_fvl_meta"); Gint_fvl_meta gint_fvl_meta(nspin, vr_eff, vofk, dm_vec, isforce, isstress, fvl, svl); diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_rho.cpp b/source/module_hamilt_lcao/module_gint/temp_gint/gint_rho.cpp index fa645af9ef..22987ac70d 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_rho.cpp +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_rho.cpp @@ -1,7 +1,8 @@ -#include "module_base/global_function.h" #include "gint_rho.h" + #include "gint_common.h" #include "phi_operator.h" +#include "source_base/global_function.h" namespace ModuleGint { @@ -30,9 +31,9 @@ void Gint_rho::cal_rho_() std::vector phi; std::vector phi_dm; #pragma omp for schedule(dynamic) - for(const auto& biggrid: gint_info_->get_biggrids()) + for (const auto& biggrid: gint_info_->get_biggrids()) { - if(biggrid->get_atoms().size() == 0) + if (biggrid->get_atoms().size() == 0) { continue; } @@ -50,5 +51,4 @@ void Gint_rho::cal_rho_() } } - -} \ No newline at end of file +} // namespace ModuleGint \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_tau.cpp b/source/module_hamilt_lcao/module_gint/temp_gint/gint_tau.cpp index 94d1539d9d..d8873df6c7 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_tau.cpp +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_tau.cpp @@ -1,7 +1,8 @@ -#include "module_base/global_function.h" #include "gint_tau.h" + #include "gint_common.h" #include "phi_operator.h" +#include "source_base/global_function.h" namespace ModuleGint { @@ -34,9 +35,9 @@ void Gint_tau::cal_tau_() std::vector dphi_y_dm; std::vector dphi_z_dm; #pragma omp for schedule(dynamic) - for(const auto& biggrid: gint_info_->get_biggrids()) + for (const auto& biggrid: gint_info_->get_biggrids()) { - if(biggrid->get_atoms().size() == 0) + if (biggrid->get_atoms().size() == 0) { continue; } @@ -62,4 +63,4 @@ void Gint_tau::cal_tau_() } } -} \ No newline at end of file +} // namespace ModuleGint \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_type.h b/source/module_hamilt_lcao/module_gint/temp_gint/gint_type.h index c6e9369ad2..04a77f22c1 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_type.h +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_type.h @@ -1,8 +1,8 @@ #pragma once #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" -#include "module_base/vector3.h" -#include "module_base/matrix3.h" +#include "source_base/matrix3.h" +#include "source_base/vector3.h" using Matrix3 = ModuleBase::Matrix3; using Vec3d = ModuleBase::Vector3; diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl.cpp b/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl.cpp index 734e68bb57..0886c46454 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl.cpp +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl.cpp @@ -1,8 +1,9 @@ -#include "module_base/blas_connector.h" -#include "gint_common.h" #include "gint_vl.h" -#include "phi_operator.h" + +#include "gint_common.h" #include "gint_helper.h" +#include "phi_operator.h" +#include "source_base/blas_connector.h" namespace ModuleGint { @@ -34,9 +35,9 @@ void Gint_vl::cal_hr_gint_() std::vector phi; std::vector phi_vldr3; #pragma omp for schedule(dynamic) - for(const auto& biggrid: gint_info_->get_biggrids()) + for (const auto& biggrid: gint_info_->get_biggrids()) { - if(biggrid->get_atoms().empty()) + if (biggrid->get_atoms().empty()) { continue; } @@ -51,4 +52,4 @@ void Gint_vl::cal_hr_gint_() } } -} \ No newline at end of file +} // namespace ModuleGint \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl_metagga.cpp b/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl_metagga.cpp index 4c6d2ac535..5ae529e319 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl_metagga.cpp +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl_metagga.cpp @@ -1,8 +1,9 @@ -#include "module_base/blas_connector.h" -#include "gint_common.h" #include "gint_vl_metagga.h" -#include "phi_operator.h" + +#include "gint_common.h" #include "gint_helper.h" +#include "phi_operator.h" +#include "source_base/blas_connector.h" namespace ModuleGint { @@ -40,9 +41,9 @@ void Gint_vl_metagga::cal_hr_gint_() std::vector dphi_y_vldr3; std::vector dphi_z_vldr3; #pragma omp for schedule(dynamic) - for(const auto& biggrid: gint_info_->get_biggrids()) + for (const auto& biggrid: gint_info_->get_biggrids()) { - if(biggrid->get_atoms().size() == 0) + if (biggrid->get_atoms().size() == 0) { continue; } @@ -69,4 +70,4 @@ void Gint_vl_metagga::cal_hr_gint_() } } -} \ No newline at end of file +} // namespace ModuleGint \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl_metagga_nspin4.cpp b/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl_metagga_nspin4.cpp index 6f5a468254..5b26dc8959 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl_metagga_nspin4.cpp +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl_metagga_nspin4.cpp @@ -1,10 +1,11 @@ -#include "module_base/global_function.h" -#include "module_hamilt_lcao/module_hcontainer/hcontainer.h" -#include "module_base/blas_connector.h" -#include "gint_common.h" #include "gint_vl_metagga_nspin4.h" -#include "phi_operator.h" + +#include "gint_common.h" #include "gint_helper.h" +#include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "phi_operator.h" +#include "source_base/blas_connector.h" +#include "source_base/global_function.h" namespace ModuleGint { @@ -20,7 +21,7 @@ void Gint_vl_metagga_nspin4::cal_gint() void Gint_vl_metagga_nspin4::init_hr_gint_() { hr_gint_part_.resize(nspin_); - for(int i = 0; i < nspin_; i++) + for (int i = 0; i < nspin_; i++) { hr_gint_part_[i] = gint_info_->get_hr(); } @@ -42,9 +43,9 @@ void Gint_vl_metagga_nspin4::cal_hr_gint_() std::vector dphi_y_vldr3; std::vector dphi_z_vldr3; #pragma omp for schedule(dynamic) - for(const auto& biggrid: gint_info_->get_biggrids()) + for (const auto& biggrid: gint_info_->get_biggrids()) { - if(biggrid->get_atoms().size() == 0) + if (biggrid->get_atoms().size() == 0) { continue; } @@ -59,16 +60,28 @@ void Gint_vl_metagga_nspin4::cal_hr_gint_() dphi_y_vldr3.resize(phi_len); dphi_z_vldr3.resize(phi_len); phi_op.set_phi_dphi(phi.data(), dphi_x.data(), dphi_y.data(), dphi_z.data()); - for(int is = 0; is < nspin_; is++) + for (int is = 0; is < nspin_; is++) { phi_op.phi_mul_vldr3(vr_eff_[is], dr3_, phi.data(), phi_vldr3.data()); phi_op.phi_mul_vldr3(vofk_[is], dr3_, dphi_x.data(), dphi_x_vldr3.data()); phi_op.phi_mul_vldr3(vofk_[is], dr3_, dphi_y.data(), dphi_y_vldr3.data()); phi_op.phi_mul_vldr3(vofk_[is], dr3_, dphi_z.data(), dphi_z_vldr3.data()); - phi_op.phi_mul_phi(phi.data(), phi_vldr3.data(), *hr_gint_part_[is], PhiOperator::Triangular_Matrix::Upper); - phi_op.phi_mul_phi(dphi_x.data(), dphi_x_vldr3.data(), *hr_gint_part_[is], PhiOperator::Triangular_Matrix::Upper); - phi_op.phi_mul_phi(dphi_y.data(), dphi_y_vldr3.data(), *hr_gint_part_[is], PhiOperator::Triangular_Matrix::Upper); - phi_op.phi_mul_phi(dphi_z.data(), dphi_z_vldr3.data(), *hr_gint_part_[is], PhiOperator::Triangular_Matrix::Upper); + phi_op.phi_mul_phi(phi.data(), + phi_vldr3.data(), + *hr_gint_part_[is], + PhiOperator::Triangular_Matrix::Upper); + phi_op.phi_mul_phi(dphi_x.data(), + dphi_x_vldr3.data(), + *hr_gint_part_[is], + PhiOperator::Triangular_Matrix::Upper); + phi_op.phi_mul_phi(dphi_y.data(), + dphi_y_vldr3.data(), + *hr_gint_part_[is], + PhiOperator::Triangular_Matrix::Upper); + phi_op.phi_mul_phi(dphi_z.data(), + dphi_z_vldr3.data(), + *hr_gint_part_[is], + PhiOperator::Triangular_Matrix::Upper); } } } diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl_nspin4.cpp b/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl_nspin4.cpp index 698d207ec7..7f8d08a2bf 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl_nspin4.cpp +++ b/source/module_hamilt_lcao/module_gint/temp_gint/gint_vl_nspin4.cpp @@ -1,10 +1,11 @@ -#include "module_base/global_function.h" -#include "module_hamilt_lcao/module_hcontainer/hcontainer.h" -#include "module_base/blas_connector.h" -#include "gint_common.h" #include "gint_vl_nspin4.h" -#include "phi_operator.h" + +#include "gint_common.h" #include "gint_helper.h" +#include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "phi_operator.h" +#include "source_base/blas_connector.h" +#include "source_base/global_function.h" namespace ModuleGint { @@ -19,7 +20,7 @@ void Gint_vl_nspin4::cal_gint() void Gint_vl_nspin4::init_hr_gint_() { hr_gint_part_.resize(nspin_); - for(int i = 0; i < nspin_; i++) + for (int i = 0; i < nspin_; i++) { hr_gint_part_[i] = gint_info_->get_hr(); } @@ -35,9 +36,9 @@ void Gint_vl_nspin4::cal_hr_gint_() std::vector phi; std::vector phi_vldr3; #pragma omp for schedule(dynamic) - for(const auto& biggrid: gint_info_->get_biggrids()) + for (const auto& biggrid: gint_info_->get_biggrids()) { - if(biggrid->get_atoms().size() == 0) + if (biggrid->get_atoms().size() == 0) { continue; } @@ -46,10 +47,13 @@ void Gint_vl_nspin4::cal_hr_gint_() phi.resize(phi_len); phi_vldr3.resize(phi_len); phi_op.set_phi(phi.data()); - for(int is = 0; is < nspin_; is++) + for (int is = 0; is < nspin_; is++) { phi_op.phi_mul_vldr3(vr_eff_[is], dr3_, phi.data(), phi_vldr3.data()); - phi_op.phi_mul_phi(phi.data(), phi_vldr3.data(), *hr_gint_part_[is], PhiOperator::Triangular_Matrix::Upper); + phi_op.phi_mul_phi(phi.data(), + phi_vldr3.data(), + *hr_gint_part_[is], + PhiOperator::Triangular_Matrix::Upper); } } } diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/phi_operator.cpp b/source/module_hamilt_lcao/module_gint/temp_gint/phi_operator.cpp index 4a037d53be..92740bf15e 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/phi_operator.cpp +++ b/source/module_hamilt_lcao/module_gint/temp_gint/phi_operator.cpp @@ -1,6 +1,7 @@ #include "phi_operator.h" -#include "module_base/global_function.h" -#include "module_base/matrix.h" + +#include "source_base/global_function.h" +#include "source_base/matrix.h" namespace ModuleGint { @@ -19,11 +20,11 @@ void PhiOperator::set_bgrid(std::shared_ptr biggrid) const int atoms_num = biggrid_->get_atoms_num(); atoms_relative_coords_.resize(atoms_num); is_atom_on_mgrid_.resize(atoms_num); - for(int i = 0; i < atoms_num; ++i) + for (int i = 0; i < atoms_num; ++i) { biggrid_->set_atom_relative_coords(biggrid_->get_atom(i), atoms_relative_coords_[i]); is_atom_on_mgrid_[i].resize(rows_); - for(int j = 0; j < rows_; ++j) + for (int j = 0; j < rows_; ++j) { is_atom_on_mgrid_[i][j] = atoms_relative_coords_[i][j].norm() <= biggrid_->get_atom(i)->get_rcut(); } @@ -35,11 +36,11 @@ void PhiOperator::set_bgrid(std::shared_ptr biggrid) void PhiOperator::set_phi_dphi(double* phi, double* dphi_x, double* dphi_y, double* dphi_z) const { - for(int i = 0; i < biggrid_->get_atoms_num(); ++i) + for (int i = 0; i < biggrid_->get_atoms_num(); ++i) { const auto atom = biggrid_->get_atom(i); atom->set_phi_dphi(atoms_relative_coords_[i], cols_, phi, dphi_x, dphi_y, dphi_z); - if(phi != nullptr) + if (phi != nullptr) { phi += atom->get_nw(); } @@ -49,11 +50,14 @@ void PhiOperator::set_phi_dphi(double* phi, double* dphi_x, double* dphi_y, doub } } -void PhiOperator::set_ddphi( - double* ddphi_xx, double* ddphi_xy, double* ddphi_xz, - double* ddphi_yy, double* ddphi_yz, double* ddphi_zz) const +void PhiOperator::set_ddphi(double* ddphi_xx, + double* ddphi_xy, + double* ddphi_xz, + double* ddphi_yy, + double* ddphi_yz, + double* ddphi_zz) const { - for(int i = 0; i < biggrid_->get_atoms_num(); ++i) + for (int i = 0; i < biggrid_->get_atoms_num(); ++i) { const auto atom = biggrid_->get_atom(i); atom->set_ddphi(atoms_relative_coords_[i], cols_, ddphi_xx, ddphi_xy, ddphi_xz, ddphi_yy, ddphi_yz, ddphi_zz); @@ -66,22 +70,21 @@ void PhiOperator::set_ddphi( } } -void PhiOperator::phi_dot_dphi( - const double* phi, - const double* dphi_x, - const double* dphi_y, - const double* dphi_z, - ModuleBase::matrix *fvl) const +void PhiOperator::phi_dot_dphi(const double* phi, + const double* dphi_x, + const double* dphi_y, + const double* dphi_z, + ModuleBase::matrix* fvl) const { - for(int i = 0; i < biggrid_->get_atoms_num(); ++i) + for (int i = 0; i < biggrid_->get_atoms_num(); ++i) { const int iat = biggrid_->get_atom(i)->get_iat(); const int start_idx = atoms_startidx_[i]; const int phi_len = atoms_phi_len_[i]; double rx = 0, ry = 0, rz = 0; - for(int j = 0; j < biggrid_->get_mgrids_num(); ++j) + for (int j = 0; j < biggrid_->get_mgrids_num(); ++j) { - for(int k = 0; k < phi_len; ++k) + for (int k = 0; k < phi_len; ++k) { int idx = j * cols_ + start_idx + k; const double phi_val = phi[idx]; @@ -96,20 +99,19 @@ void PhiOperator::phi_dot_dphi( } } -void PhiOperator::phi_dot_dphi_r( - const double* phi, - const double* dphi_x, - const double* dphi_y, - const double* dphi_z, - ModuleBase::matrix *svl) const +void PhiOperator::phi_dot_dphi_r(const double* phi, + const double* dphi_x, + const double* dphi_y, + const double* dphi_z, + ModuleBase::matrix* svl) const { double sxx = 0, sxy = 0, sxz = 0, syy = 0, syz = 0, szz = 0; - for(int i = 0; i < biggrid_->get_mgrids_num(); ++i) + for (int i = 0; i < biggrid_->get_mgrids_num(); ++i) { - for(int j = 0; j < biggrid_->get_atoms_num(); ++j) + for (int j = 0; j < biggrid_->get_atoms_num(); ++j) { const int start_idx = atoms_startidx_[j]; - for(int k = 0; k < atoms_phi_len_[j]; ++k) + for (int k = 0; k < atoms_phi_len_[j]; ++k) { const int idx = i * cols_ + start_idx + k; const Vec3d& r3 = atoms_relative_coords_[j][i]; @@ -131,7 +133,6 @@ void PhiOperator::phi_dot_dphi_r( svl[0](2, 2) += szz * 2; } - //=============================== // private methods //=============================== @@ -141,24 +142,24 @@ void PhiOperator::init_atom_pair_start_end_idx_() atom_pair_start_end_idx_.resize(atoms_num * (atoms_num + 1) / 2); int mgrids_num = biggrid_->get_mgrids_num(); int atom_pair_idx = 0; - for(int i = 0; i < atoms_num; ++i) + for (int i = 0; i < atoms_num; ++i) { // only calculate the upper triangle matrix - for(int j = i; j < atoms_num; ++j) + for (int j = i; j < atoms_num; ++j) { int start_idx = mgrids_num; int end_idx = -1; - for(int mgrid_idx = 0; mgrid_idx < mgrids_num; ++mgrid_idx) + for (int mgrid_idx = 0; mgrid_idx < mgrids_num; ++mgrid_idx) { - if(is_atom_on_mgrid_[i][mgrid_idx] && is_atom_on_mgrid_[j][mgrid_idx]) + if (is_atom_on_mgrid_[i][mgrid_idx] && is_atom_on_mgrid_[j][mgrid_idx]) { start_idx = mgrid_idx; break; } } - for(int mgrid_idx = mgrids_num - 1; mgrid_idx >= 0; --mgrid_idx) + for (int mgrid_idx = mgrids_num - 1; mgrid_idx >= 0; --mgrid_idx) { - if(is_atom_on_mgrid_[i][mgrid_idx] && is_atom_on_mgrid_[j][mgrid_idx]) + if (is_atom_on_mgrid_[i][mgrid_idx] && is_atom_on_mgrid_[j][mgrid_idx]) { end_idx = mgrid_idx; break; diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/phi_operator.hpp b/source/module_hamilt_lcao/module_gint/temp_gint/phi_operator.hpp index 7c46c80fe5..db69f5bb52 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/phi_operator.hpp +++ b/source/module_hamilt_lcao/module_gint/temp_gint/phi_operator.hpp @@ -1,16 +1,16 @@ #pragma once #include "phi_operator.h" -#include "module_base/blas_connector.h" -#include "module_base/global_function.h" +#include "source_base/blas_connector.h" +#include "source_base/global_function.h" namespace ModuleGint { -template +template void PhiOperator::set_phi(T* phi) const { - for(int i = 0; i < biggrid_->get_atoms_num(); ++i) + for (int i = 0; i < biggrid_->get_atoms_num(); ++i) { const auto atom = biggrid_->get_atom(i); atom->set_phi(atoms_relative_coords_[i], cols_, phi); @@ -19,44 +19,49 @@ void PhiOperator::set_phi(T* phi) const } // phi_dm(ir,iwt_2) = \sum_{iwt_1} phi(ir,iwt_1) * dm(iwt_1,iwt_2) -template -void PhiOperator::phi_mul_dm( - const T*const phi, // phi(ir,iwt) - const HContainer& dm, // dm(iwt_1,iwt_2) - const bool is_symm, - T*const phi_dm) const // phi_dm(ir,iwt) +template +void PhiOperator::phi_mul_dm(const T* const phi, // phi(ir,iwt) + const HContainer& dm, // dm(iwt_1,iwt_2) + const bool is_symm, + T* const phi_dm) const // phi_dm(ir,iwt) { ModuleBase::GlobalFunc::ZEROS(phi_dm, rows_ * cols_); - for(int i = 0; i < biggrid_->get_atoms_num(); ++i) + for (int i = 0; i < biggrid_->get_atoms_num(); ++i) { const auto atom_i = biggrid_->get_atom(i); const auto r_i = atom_i->get_R(); - if(is_symm) + if (is_symm) { const auto dm_mat = dm.find_matrix(atom_i->get_iat(), atom_i->get_iat(), 0, 0, 0); constexpr T alpha = 1.0; constexpr T beta = 1.0; - BlasConnector::symm_cm( - 'L', 'U', - atoms_phi_len_[i], rows_, - alpha, dm_mat->get_pointer(), atoms_phi_len_[i], - &phi[0 * cols_ + atoms_startidx_[i]], cols_, - beta, &phi_dm[0 * cols_ + atoms_startidx_[i]], cols_); + BlasConnector::symm_cm('L', + 'U', + atoms_phi_len_[i], + rows_, + alpha, + dm_mat->get_pointer(), + atoms_phi_len_[i], + &phi[0 * cols_ + atoms_startidx_[i]], + cols_, + beta, + &phi_dm[0 * cols_ + atoms_startidx_[i]], + cols_); } const int start = is_symm ? i + 1 : 0; - for(int j = start; j < biggrid_->get_atoms_num(); ++j) + for (int j = start; j < biggrid_->get_atoms_num(); ++j) { const auto atom_j = biggrid_->get_atom(j); const auto r_j = atom_j->get_R(); // FIXME may be r = r_j - r_i - const auto dm_mat = dm.find_matrix(atom_i->get_iat(), atom_j->get_iat(), r_i-r_j); + const auto dm_mat = dm.find_matrix(atom_i->get_iat(), atom_j->get_iat(), r_i - r_j); // if dm_mat is nullptr, it means this atom pair does not affect any meshgrid in the unitcell - if(dm_mat == nullptr) + if (dm_mat == nullptr) { continue; } @@ -66,36 +71,42 @@ void PhiOperator::phi_mul_dm( const int len = end_idx - start_idx + 1; // if len<=0, it means this atom pair does not affect any meshgrid in this biggrid - if(len <= 0) + if (len <= 0) { continue; } const T alpha = is_symm ? 2.0 : 1.0; constexpr T beta = 1.0; - BlasConnector::gemm( - 'N', 'N', - len, atoms_phi_len_[j], atoms_phi_len_[i], - alpha, &phi[start_idx * cols_ + atoms_startidx_[i]], cols_, - dm_mat->get_pointer(), atoms_phi_len_[j], - beta, &phi_dm[start_idx * cols_ + atoms_startidx_[j]], cols_); + BlasConnector::gemm('N', + 'N', + len, + atoms_phi_len_[j], + atoms_phi_len_[i], + alpha, + &phi[start_idx * cols_ + atoms_startidx_[i]], + cols_, + dm_mat->get_pointer(), + atoms_phi_len_[j], + beta, + &phi_dm[start_idx * cols_ + atoms_startidx_[j]], + cols_); } } } // result(ir) = phi(ir) * vl(ir) -template -void PhiOperator::phi_mul_vldr3( - const T*const vl, // vl(ir) - const T dr3, - const T*const phi, // phi(ir,iwt) - T*const result) const // result(ir,iwt) +template +void PhiOperator::phi_mul_vldr3(const T* const vl, // vl(ir) + const T dr3, + const T* const phi, // phi(ir,iwt) + T* const result) const // result(ir,iwt) { int idx = 0; - for(int i = 0; i < biggrid_->get_mgrids_num(); i++) + for (int i = 0; i < biggrid_->get_mgrids_num(); i++) { T vldr3_mgrid = vl[meshgrids_local_idx_[i]] * dr3; - for(int j = 0; j < cols_; j++) + for (int j = 0; j < cols_; j++) { result[idx] = phi[idx] * vldr3_mgrid; idx++; @@ -105,22 +116,21 @@ void PhiOperator::phi_mul_vldr3( // hr(iwt_i,iwt_j) = \sum_{ir} phi_i(ir,iwt_i) * phi_i(ir,iwt_j) // this is a thread-safe function -template -void PhiOperator::phi_mul_phi( - const T*const phi_i, // phi_i(ir,iwt) - const T*const phi_j, // phi_j(ir,iwt) - HContainer& hr, // hr(iwt_i,iwt_j) - const Triangular_Matrix triangular_matrix) const +template +void PhiOperator::phi_mul_phi(const T* const phi_i, // phi_i(ir,iwt) + const T* const phi_j, // phi_j(ir,iwt) + HContainer& hr, // hr(iwt_i,iwt_j) + const Triangular_Matrix triangular_matrix) const { std::vector tmp_hr; - for(int i = 0; i < biggrid_->get_atoms_num(); ++i) + for (int i = 0; i < biggrid_->get_atoms_num(); ++i) { const auto atom_i = biggrid_->get_atom(i); const auto& r_i = atom_i->get_R(); const int iat_i = atom_i->get_iat(); const int n_i = atoms_phi_len_[i]; - for(int j = 0; j < biggrid_->get_atoms_num(); ++j) + for (int j = 0; j < biggrid_->get_atoms_num(); ++j) { const auto atom_j = biggrid_->get_atom(j); const auto& r_j = atom_j->get_R(); @@ -128,20 +138,20 @@ void PhiOperator::phi_mul_phi( const int n_j = atoms_phi_len_[j]; // only calculate the upper triangle matrix - if(triangular_matrix==Triangular_Matrix::Upper && iat_i>iat_j) + if (triangular_matrix == Triangular_Matrix::Upper && iat_i > iat_j) { continue; } // only calculate the upper triangle matrix - else if(triangular_matrix==Triangular_Matrix::Lower && iat_iadd_array_ts(tmp_hr.data()); } @@ -172,16 +190,15 @@ void PhiOperator::phi_mul_phi( } // rho(ir) = \sum_{iwt} \phi_i(ir,iwt) * \phi_j^*(ir,iwt) -template -void PhiOperator::phi_dot_phi( - const T*const phi_i, // phi_i(ir,iwt) - const T*const phi_j, // phi_j(ir,iwt) - T*const rho) const // rho(ir) +template +void PhiOperator::phi_dot_phi(const T* const phi_i, // phi_i(ir,iwt) + const T* const phi_j, // phi_j(ir,iwt) + T* const rho) const // rho(ir) { constexpr int inc = 1; - for(int i = 0; i < biggrid_->get_mgrids_num(); ++i) + for (int i = 0; i < biggrid_->get_mgrids_num(); ++i) { - rho[meshgrids_local_idx_[i]] += BlasConnector::dotc(cols_, phi_j+i*cols_, inc, phi_i+i*cols_, inc); + rho[meshgrids_local_idx_[i]] += BlasConnector::dotc(cols_, phi_j + i * cols_, inc, phi_i + i * cols_, inc); } } diff --git a/source/module_hamilt_lcao/module_gint/temp_gint/set_ddphi.cpp b/source/module_hamilt_lcao/module_gint/temp_gint/set_ddphi.cpp index dd0b77f18f..593233d5c6 100644 --- a/source/module_hamilt_lcao/module_gint/temp_gint/set_ddphi.cpp +++ b/source/module_hamilt_lcao/module_gint/temp_gint/set_ddphi.cpp @@ -1,20 +1,24 @@ -#include "module_base/array_pool.h" -#include "module_base/timer.h" -#include "module_base/ylm.h" #include "gint_atom.h" #include "gint_helper.h" +#include "source_base/array_pool.h" +#include "source_base/timer.h" +#include "source_base/ylm.h" namespace ModuleGint { template -void GintAtom::set_ddphi( - const std::vector& coords, const int stride, - T* ddphi_xx, T* ddphi_xy, T* ddphi_xz, - T* ddphi_yy, T* ddphi_yz, T* ddphi_zz) const +void GintAtom::set_ddphi(const std::vector& coords, + const int stride, + T* ddphi_xx, + T* ddphi_xy, + T* ddphi_xz, + T* ddphi_yy, + T* ddphi_yz, + T* ddphi_zz) const { ModuleBase::timer::tick("GintAtom", "set_ddphi"); - + const int num_mgrids = coords.size(); // orb_ does not have the member variable dr_uniform @@ -25,9 +29,9 @@ void GintAtom::set_ddphi( std::vector p_dpsi_uniform(atom_->nw); std::vector p_ddpsi_uniform(atom_->nw); std::vector phi_nr_uniform(atom_->nw); - for (int iw=0; iw< atom_->nw; ++iw) + for (int iw = 0; iw < atom_->nw; ++iw) { - if ( atom_->iw2_new[iw] ) + if (atom_->iw2_new[iw]) { int l = atom_->iw2l[iw]; int n = atom_->iw2n[iw]; @@ -41,7 +45,8 @@ void GintAtom::set_ddphi( std::vector rly(std::pow(atom_->nwl + 1, 2)); ModuleBase::Array_Pool grly(std::pow(atom_->nwl + 1, 2), 3); // TODO: A better data structure such as a 3D tensor can be used to store dphi - std::vector>> dphi(atom_->nw, std::vector>(6, std::vector(3))); + std::vector>> dphi(atom_->nw, + std::vector>(6, std::vector(3))); Vec3d coord1; ModuleBase::Array_Pool displ(6, 3); displ[0][0] = 0.0001; // in x direction @@ -51,13 +56,13 @@ void GintAtom::set_ddphi( displ[4][2] = 0.0001; // in z direction displ[5][2] = -0.0001; - for(int im = 0; im < num_mgrids; im++) + for (int im = 0; im < num_mgrids; im++) { const Vec3d& coord = coords[im]; // 1e-9 is to avoid division by zero const double dist = coord.norm() < 1e-9 ? 1e-9 : coord.norm(); - if(dist > orb_->getRcut()) + if (dist > orb_->getRcut()) { // if the distance is larger than the cutoff radius, // the wave function values are all zeros @@ -70,14 +75,19 @@ void GintAtom::set_ddphi( continue; } - for(int i = 0; i < 6; i++) + for (int i = 0; i < 6; i++) { coord1[0] = coord[0] + displ[i][0]; coord1[1] = coord[1] + displ[i][1]; coord1[2] = coord[2] + displ[i][2]; // sphereical harmonics - ModuleBase::Ylm::grad_rl_sph_harm(atom_->nwl, coord1[0], coord1[1], coord1[2], rly.data(), grly.get_ptr_2D()); + ModuleBase::Ylm::grad_rl_sph_harm(atom_->nwl, + coord1[0], + coord1[1], + coord1[2], + rly.data(), + grly.get_ptr_2D()); const double dist1 = coord1.norm() < 1e-9 ? 1e-9 : coord1.norm(); @@ -92,14 +102,14 @@ void GintAtom::set_ddphi( double tmp, dtmp; - for(int iw = 0; iw < atom_->nw; ++iw) + for (int iw = 0; iw < atom_->nw; ++iw) { - if(atom_->iw2_new[iw]) + if (atom_->iw2_new[iw]) { auto psi_uniform = p_psi_uniform[iw]; auto dpsi_uniform = p_dpsi_uniform[iw]; - if(ip >= phi_nr_uniform[iw] - 4) + if (ip >= phi_nr_uniform[iw] - 4) { tmp = dtmp = 0.0; } @@ -109,10 +119,10 @@ void GintAtom::set_ddphi( // wave functions tmp = x12 * (psi_uniform[ip] * x3 + psi_uniform[ip + 3] * x0) - + x03 * (psi_uniform[ip + 1] * x2 - psi_uniform[ip + 2] * x1); + + x03 * (psi_uniform[ip + 1] * x2 - psi_uniform[ip + 2] * x1); dtmp = x12 * (dpsi_uniform[ip] * x3 + dpsi_uniform[ip + 3] * x0) - + x03 * (dpsi_uniform[ip + 1] * x2 - dpsi_uniform[ip + 2] * x1); + + x03 * (dpsi_uniform[ip + 1] * x2 - dpsi_uniform[ip + 2] * x1); } } @@ -126,23 +136,20 @@ void GintAtom::set_ddphi( const double tmpdphi_rly = (dtmp - tmp * ll / dist1) / rl * rly[idx_lm] / dist1; const double tmprl = tmp / rl; - dphi[iw][i][0] = tmpdphi_rly * coord1[0] + tmprl * grly[idx_lm][0]; - dphi[iw][i][1] = tmpdphi_rly * coord1[1] + tmprl * grly[idx_lm][1]; - dphi[iw][i][2] = tmpdphi_rly * coord1[2] + tmprl * grly[idx_lm][2]; + dphi[iw][i][0] = tmpdphi_rly * coord1[0] + tmprl * grly[idx_lm][0]; + dphi[iw][i][1] = tmpdphi_rly * coord1[1] + tmprl * grly[idx_lm][1]; + dphi[iw][i][2] = tmpdphi_rly * coord1[2] + tmprl * grly[idx_lm][2]; } // end iw - } // end i + } // end i - for(int iw = 0; iw < atom_->nw; iw++) + for (int iw = 0; iw < atom_->nw; iw++) { int idx = im * stride + iw; ddphi_xx[idx] = (dphi[iw][0][0] - dphi[iw][1][0]) / 0.0002; - ddphi_xy[idx] - = ((dphi[iw][2][0] - dphi[iw][3][0]) + (dphi[iw][0][1] - dphi[iw][1][1])) / 0.0004; - ddphi_xz[idx] - = ((dphi[iw][4][0] - dphi[iw][5][0]) + (dphi[iw][0][2] - dphi[iw][1][2])) / 0.0004; + ddphi_xy[idx] = ((dphi[iw][2][0] - dphi[iw][3][0]) + (dphi[iw][0][1] - dphi[iw][1][1])) / 0.0004; + ddphi_xz[idx] = ((dphi[iw][4][0] - dphi[iw][5][0]) + (dphi[iw][0][2] - dphi[iw][1][2])) / 0.0004; ddphi_yy[idx] = (dphi[iw][2][1] - dphi[iw][3][1]) / 0.0002; - ddphi_yz[idx] - = ((dphi[iw][4][1] - dphi[iw][5][1]) + (dphi[iw][2][2] - dphi[iw][3][2])) / 0.0004; + ddphi_yz[idx] = ((dphi[iw][4][1] - dphi[iw][5][1]) + (dphi[iw][2][2] - dphi[iw][3][2])) / 0.0004; ddphi_zz[idx] = (dphi[iw][4][2] - dphi[iw][5][2]) / 0.0002; } @@ -150,7 +157,7 @@ void GintAtom::set_ddphi( // // the analytical method for evaluating 2nd derivatives // // it is not used currently // { - // // Add it here, but do not run it. If there is a need to run this code + // // Add it here, but do not run it. If there is a need to run this code // // in the future, include it in the previous initialization process. // for (int iw=0; iw< atom->nw; ++iw) // { @@ -257,8 +264,13 @@ void GintAtom::set_ddphi( } // explicit instantiation -template void GintAtom::set_ddphi(const std::vector& coords, const int stride, - double* ddphi_xx, double* ddphi_xy, double* ddphi_xz, - double* ddphi_yy, double* ddphi_yz, double* ddphi_zz) const; - -} \ No newline at end of file +template void GintAtom::set_ddphi(const std::vector& coords, + const int stride, + double* ddphi_xx, + double* ddphi_xy, + double* ddphi_xz, + double* ddphi_yy, + double* ddphi_yz, + double* ddphi_zz) const; + +} // namespace ModuleGint \ No newline at end of file diff --git a/source/module_hamilt_lcao/module_gint/test/test_sph.cu b/source/module_hamilt_lcao/module_gint/test/test_sph.cu index 3521e1d46c..922b27ee71 100644 --- a/source/module_hamilt_lcao/module_gint/test/test_sph.cu +++ b/source/module_hamilt_lcao/module_gint/test/test_sph.cu @@ -1,14 +1,14 @@ -#include #include "../kernels/cuda/sph.cuh" - -#include "float.h" #include "cuda_runtime.h" #include "device_functions.h" #include "device_launch_parameters.h" -#include "gtest/gtest.h" +#include "float.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "source_base/array_pool.h" #include "test_sph.h" -#include "module_base/array_pool.h" + +#include "gtest/gtest.h" +#include using namespace std; class gintTest : public ::testing::Test @@ -74,15 +74,16 @@ TEST_F(gintTest, test) std::vector ylma_cpu(49, 0.0); std::vector ylma_cpu_dpsir(49, 0.0); ModuleBase::Array_Pool ylma_cpu_ddpsir(49, 3); - - nwl=3; - for (int i=0;i<3;i++){ - dr[i]=i*1.0; + + nwl = 3; + for (int i = 0; i < 3; i++) + { + dr[i] = i * 1.0; distance += dr[i] * dr[i]; } - for (int i=0;i<100;i++) + for (int i = 0; i < 100; i++) { - ylmcoef[i]=i*0.1; + ylmcoef[i] = i * 0.1; } cudaMalloc((void**)&ylmcoef_g, 100 * sizeof(double)); @@ -106,19 +107,18 @@ TEST_F(gintTest, test) for (int i = 0; i < 49; i++) { ylma_ans[i] = ylma_cpu[i]; - if ((abs(ylma[i])!= 0) && (ylma_ans[i]==ylma_ans[i]) && (ylma[i]==ylma[i])) + if ((abs(ylma[i]) != 0) && (ylma_ans[i] == ylma_ans[i]) && (ylma[i] == ylma[i])) { EXPECT_LT(abs(ylma_ans[i] - ylma[i]) / abs(ylma[i]), 1e-15); } ylma_ans[i] = ylma_cpu_dpsir[i]; - if ((abs(dylma[i]) != 0) &&(ylma_ans[i]==ylma_ans[i]) && (dylma[i]==dylma[i])) + if ((abs(dylma[i]) != 0) && (ylma_ans[i] == ylma_ans[i]) && (dylma[i] == dylma[i])) { EXPECT_LT(abs(ylma_ans[i] - dylma[i]) / abs(dylma[i]), 1e-15); } } delete[] dr; delete[] ylmcoef; - } int main(int argc, char** argv) diff --git a/source/module_hamilt_lcao/module_hcontainer/atom_pair.cpp b/source/module_hamilt_lcao/module_hcontainer/atom_pair.cpp index 0a6d316272..7ec573cd11 100644 --- a/source/module_hamilt_lcao/module_hcontainer/atom_pair.cpp +++ b/source/module_hamilt_lcao/module_hcontainer/atom_pair.cpp @@ -1,7 +1,9 @@ #include "atom_pair.h" -#include + +#include "source_base/blas_connector.h" + #include -#include "module_base/blas_connector.h" +#include namespace hamilt { @@ -82,7 +84,7 @@ AtomPair::AtomPair(const int& atom_i_, template AtomPair::AtomPair(const int& atom_i_, const int& atom_j_, - const ModuleBase::Vector3 &R_index, + const ModuleBase::Vector3& R_index, const Parallel_Orbitals* paraV_, T* existed_matrix) : atom_i(atom_i_), atom_j(atom_j_), paraV(paraV_) @@ -181,24 +183,18 @@ AtomPair::AtomPair(const int& atom_i_, const int& atom_j_) : atom_i(atom_i_), // copy constructor template AtomPair::AtomPair(const AtomPair& other, T* data_pointer) - : R_index(other.R_index), - paraV(other.paraV), - current_R(other.current_R), - atom_i(other.atom_i), - atom_j(other.atom_j), - row_ap(other.row_ap), - col_ap(other.col_ap), - row_size(other.row_size), + : R_index(other.R_index), paraV(other.paraV), current_R(other.current_R), atom_i(other.atom_i), + atom_j(other.atom_j), row_ap(other.row_ap), col_ap(other.col_ap), row_size(other.row_size), col_size(other.col_size) { - if(data_pointer == nullptr) + if (data_pointer == nullptr) { this->values = other.values; } else { this->values.reserve(other.values.size()); - for(int value=0;value tmp(row_size, col_size, data_pointer); this->values.push_back(tmp); @@ -207,20 +203,20 @@ AtomPair::AtomPair(const AtomPair& other, T* data_pointer) } } -//allocate +// allocate template void AtomPair::allocate(T* data_array, bool is_zero) { - if(data_array == nullptr) + if (data_array == nullptr) { - for(int value=0;valuevalues.size();++value) + for (int value = 0; value < this->values.size(); ++value) { this->values[value].allocate(nullptr, is_zero); } } else { - for(int value=0;valuevalues.size();++value) + for (int value = 0; value < this->values.size(); ++value) { this->values[value].allocate(data_array, is_zero); data_array += this->get_size(); @@ -232,7 +228,7 @@ void AtomPair::allocate(T* data_array, bool is_zero) template void AtomPair::set_zero() { - for(auto& value : values) + for (auto& value: values) { value.set_zero(); } @@ -261,16 +257,9 @@ AtomPair& AtomPair::operator=(const AtomPair& other) // move constructor template AtomPair::AtomPair(AtomPair&& other) noexcept - : R_index(std::move(other.R_index)), - values(std::move(other.values)), - paraV(other.paraV), - current_R(other.current_R), - atom_i(other.atom_i), - atom_j(other.atom_j), - row_ap(other.row_ap), - col_ap(other.col_ap), - row_size(other.row_size), - col_size(other.col_size) + : R_index(std::move(other.R_index)), values(std::move(other.values)), paraV(other.paraV), + current_R(other.current_R), atom_i(other.atom_i), atom_j(other.atom_j), row_ap(other.row_ap), + col_ap(other.col_ap), row_size(other.row_size), col_size(other.col_size) { other.paraV = nullptr; } @@ -471,7 +460,7 @@ template const BaseMatrix* AtomPair::find_matrix(const int& rx_in, const int& ry_in, const int& rz_in) const { const int r_index = this->find_R(rx_in, ry_in, rz_in); - if(r_index == -1) + if (r_index == -1) { return nullptr; } @@ -486,7 +475,7 @@ template BaseMatrix* AtomPair::find_matrix(const int& rx_in, const int& ry_in, const int& rz_in) { const int r_index = this->find_R(rx_in, ry_in, rz_in); - if(r_index == -1) + if (r_index == -1) { return nullptr; } @@ -498,9 +487,10 @@ BaseMatrix* AtomPair::find_matrix(const int& rx_in, const int& ry_in, cons // find_matrix template -const BaseMatrix* AtomPair::find_matrix(const ModuleBase::Vector3& R_in) const { +const BaseMatrix* AtomPair::find_matrix(const ModuleBase::Vector3& R_in) const +{ const int r_index = this->find_R(R_in); - if(r_index == -1) + if (r_index == -1) { return nullptr; } @@ -511,9 +501,10 @@ const BaseMatrix* AtomPair::find_matrix(const ModuleBase::Vector3& R_ } template -BaseMatrix* AtomPair::find_matrix(const ModuleBase::Vector3& R_in){ +BaseMatrix* AtomPair::find_matrix(const ModuleBase::Vector3& R_in) +{ const int r_index = this->find_R(R_in); - if(r_index == -1) + if (r_index == -1) { return nullptr; } @@ -542,7 +533,7 @@ void AtomPair::merge(const AtomPair& other, bool skip_R) throw std::string("AtomPair::merge: atom pair not match"); } int rx = 0, ry = 0, rz = 0; - for (int i = 0; i < other.R_index.size(); i ++) + for (int i = 0; i < other.R_index.size(); i++) { if (!skip_R) { @@ -551,13 +542,13 @@ void AtomPair::merge(const AtomPair& other, bool skip_R) rz = other.R_index[i].z; } const BaseMatrix& matrix_tmp = other.get_HR_values(i); - //if not found, push_back this BaseMatrix to this->values + // if not found, push_back this BaseMatrix to this->values if (this->find_R(rx, ry, rz) == -1) { this->R_index.push_back(ModuleBase::Vector3(rx, ry, rz)); this->values.push_back(matrix_tmp); } - //if found but not allocated, skip this BaseMatrix values + // if found but not allocated, skip this BaseMatrix values else if (this->values[current_R].get_pointer() == nullptr || matrix_tmp.get_pointer() == nullptr) { continue; @@ -583,9 +574,9 @@ void AtomPair::merge_to_gamma() bool empty = true; for (int i = 0; i < this->values.size(); i++) { - if(this->values[i].get_pointer() != nullptr) + if (this->values[i].get_pointer() != nullptr) { - if(empty) + if (empty) { tmp.allocate(nullptr, true); empty = false; @@ -618,7 +609,7 @@ void AtomPair::add_to_matrix(std::complex* hk, for (int mu = 0; mu < this->row_size; mu++) { hk_real_pointer = (T*)hk_tmp; - hk_imag_pointer = hk_real_pointer+1; + hk_imag_pointer = hk_real_pointer + 1; BlasConnector::axpy(this->col_size, kphase.real(), hr_tmp, 1, hk_real_pointer, 2); BlasConnector::axpy(this->col_size, kphase.imag(), hr_tmp, 1, hk_imag_pointer, 2); hk_tmp += ld_hk; @@ -632,10 +623,10 @@ void AtomPair::add_to_matrix(std::complex* hk, for (int mu = 0; mu < this->row_size; mu++) { hk_real_pointer = (T*)hk_tmp; - hk_imag_pointer = hk_real_pointer+1; + hk_imag_pointer = hk_real_pointer + 1; BlasConnector::axpy(this->col_size, kphase.real(), hr_tmp, 1, hk_real_pointer, ld_hk_2); BlasConnector::axpy(this->col_size, kphase.imag(), hr_tmp, 1, hk_imag_pointer, ld_hk_2); - hk_tmp ++; + hk_tmp++; hr_tmp += this->col_size; } } @@ -682,9 +673,9 @@ void AtomPair::add_to_matrix(T* hk, const int ld_hk, const T& kphase, const i template void AtomPair::add_from_matrix(const std::complex* hk, - const int ld_hk, - const std::complex& kphase, - const int hk_type) + const int ld_hk, + const std::complex& kphase, + const int hk_type) { const BaseMatrix& matrix = values[current_R]; T* hr_tmp = matrix.get_pointer(); @@ -699,7 +690,7 @@ void AtomPair::add_from_matrix(const std::complex* hk, for (int mu = 0; mu < this->row_size; mu++) { hk_real_pointer = (T*)hk_tmp; - hk_imag_pointer = hk_real_pointer+1; + hk_imag_pointer = hk_real_pointer + 1; BlasConnector::axpy(this->col_size, kphase.real(), hk_real_pointer, 2, hr_tmp, 1); BlasConnector::axpy(this->col_size, -kphase.imag(), hk_imag_pointer, 2, hr_tmp, 1); hk_tmp += ld_hk; @@ -713,10 +704,10 @@ void AtomPair::add_from_matrix(const std::complex* hk, for (int mu = 0; mu < this->row_size; mu++) { hk_real_pointer = (T*)hk_tmp; - hk_imag_pointer = hk_real_pointer+1; + hk_imag_pointer = hk_real_pointer + 1; BlasConnector::axpy(this->col_size, kphase.real(), hk_real_pointer, ld_hk_2, hr_tmp, 1); BlasConnector::axpy(this->col_size, -kphase.imag(), hk_imag_pointer, ld_hk_2, hr_tmp, 1); - hk_tmp ++; + hk_tmp++; hr_tmp += this->col_size; } } @@ -786,8 +777,10 @@ void AtomPair::add_to_array(std::complex* array, const std::complex& kp template std::tuple, T*> AtomPair::get_matrix_values(int ir) const { - if(ir<0) ir = this->current_R; - return std::tuple, T*>({this->row_ap, this->row_size, this->col_ap, this->col_size}, this->values[ir].get_pointer()); + if (ir < 0) + ir = this->current_R; + return std::tuple, T*>({this->row_ap, this->row_size, this->col_ap, this->col_size}, + this->values[ir].get_pointer()); } // interface for get (rx, ry, rz) of index-th R-index in this->R_index, the return should be ModuleBase::Vector3 @@ -843,8 +836,8 @@ T& AtomPair::get_value(const int& row, const int& col) const template T* AtomPair::get_pointer(int ir) const { - if(ir<0) - { + if (ir < 0) + { ir = current_R; } #ifdef __DEBUG diff --git a/source/module_hamilt_lcao/module_hcontainer/atom_pair.h b/source/module_hamilt_lcao/module_hcontainer/atom_pair.h index f0593641f9..d5083e5442 100644 --- a/source/module_hamilt_lcao/module_hcontainer/atom_pair.h +++ b/source/module_hamilt_lcao/module_hcontainer/atom_pair.h @@ -3,13 +3,13 @@ // #include "module_cell/atom_spec.h" #include "base_matrix.h" -#include "module_base/vector3.h" #include "module_basis/module_ao/parallel_orbitals.h" +#include "source_base/vector3.h" -#include +#include #include #include -#include +#include namespace hamilt { @@ -68,10 +68,10 @@ class AtomPair // Only for 2d-block MPI parallel case // This constructor used for initialize a atom-pair local Hamiltonian with non-zero cell indexes, // which is used for constructing HR (real space Hamiltonian) objects. - AtomPair(const int& atom_i_, // atomic index of atom i, used to identify atom - const int& atom_j_, // atomic index of atom j, used to identify atom - const ModuleBase::Vector3& R_index, // xyz coordinates of cell - const Parallel_Orbitals* paraV_, // information for 2d-block parallel + AtomPair(const int& atom_i_, // atomic index of atom i, used to identify atom + const int& atom_j_, // atomic index of atom j, used to identify atom + const ModuleBase::Vector3& R_index, // xyz coordinates of cell + const Parallel_Orbitals* paraV_, // information for 2d-block parallel T* existed_array = nullptr // if nullptr, new memory will be allocated, otherwise this class is a data wrapper ); @@ -110,53 +110,65 @@ class AtomPair /** * @brief allocate memory for all the BaseMatrix - */ + */ void allocate(T* data_array = nullptr, bool if_zero = false); /** * @brief set values in every BaseMatrix to zero - */ + */ void set_zero(); /** * @brief get begin index of this AtomPair - */ - int get_begin_row() const { return this->row_ap; } - int get_begin_col() const { return this->col_ap; } + */ + int get_begin_row() const + { + return this->row_ap; + } + int get_begin_col() const + { + return this->col_ap; + } /** * @brief get col_size for this AtomPair - */ + */ int get_col_size() const; /** * @brief get row_size for this AtomPair - */ + */ int get_row_size() const; /** * @brief get atom_i and atom_j for this AtomPair - */ + */ int get_atom_i() const; int get_atom_j() const; /** * @brief set col_size and row_size - */ + */ void set_size(const int& col_size_in, const int& row_size_in); /** * @brief get size = col_size * row_size * @return int - */ - int get_size() const {return this->col_size * this->row_size;} + */ + int get_size() const + { + return this->col_size * this->row_size; + } /** * @brief get Parallel_Orbitals pointer of this AtomPair for checking 2d-block parallel * @return const Parallel_Orbitals* - */ + */ const Parallel_Orbitals* get_paraV() const; /** - * @brief set Parallel_Orbitals pointer of this AtomPair for checking 2d-block parallel -*/ - void set_paraV(const Parallel_Orbitals* paraV_in) { this->paraV = paraV_in; }; + * @brief set Parallel_Orbitals pointer of this AtomPair for checking 2d-block parallel + */ + void set_paraV(const Parallel_Orbitals* paraV_in) + { + this->paraV = paraV_in; + }; /// use atom_i and atom_j to identify the atom-pair bool identify(const AtomPair& other) const; @@ -168,7 +180,7 @@ class AtomPair * and if not found, it will throw a error message * for non-const AtomPair, it will return a BaseMatrix object, * and if not found, it will insert a new one and return it - * + * * @param rx_in x coordinate of cell * @param ry_in y coordinate of cell * @param rz_in z coordinate of cell @@ -176,18 +188,19 @@ class AtomPair */ BaseMatrix& get_HR_values(int rx_in, int ry_in, int rz_in); const BaseMatrix& get_HR_values(int rx_in, int ry_in, int rz_in) const; - + /** * @brief get target BaseMatrix of index of this->values * it will return a BaseMatrix object, * and if not found, it will throw a error message - * + * * @param index index of this->values * @return BaseMatrix& */ BaseMatrix& get_HR_values(const int& index) const; - // interface for get (rx, ry, rz) of index-th R-index in this->R_index, the return should be ModuleBase::Vector3 + // interface for get (rx, ry, rz) of index-th R-index in this->R_index, the return should be + // ModuleBase::Vector3 ModuleBase::Vector3 get_R_index(const int& index) const; // interface for get (rx, ry, rz) of current_R, the return should be ModuleBase::Vector3 ModuleBase::Vector3 get_R_index() const; @@ -212,13 +225,13 @@ class AtomPair * @return std::tuple, T*> * std::vector(4) contains (row_begin_index, row_size, col_begin_index, col_size) * T* is pointer of values[ir].value_begin, legal index is [0, row_size*col_size) - */ + */ std::tuple, T*> get_matrix_values(int ir = -1) const; /** * @brief get pointer of value from a submatrix - */ - T* get_pointer(int ir=-1) const; + */ + T* get_pointer(int ir = -1) const; // add another BaseMatrix to this->values with specific R index. void convert_add(const BaseMatrix& target, int rx_in, int ry_in, int rz_in); @@ -259,10 +272,10 @@ class AtomPair void add_to_matrix(T* hk, const int ld_hk, const T& kphase, const int hk_type = 0) const; void add_from_matrix(const std::complex* hk, - const int ld_hk, - const std::complex& kphase, - const int hk_type = 0); - + const int ld_hk, + const std::complex& kphase, + const int hk_type = 0); + void add_from_matrix(const T* hk, const int ld_hk, const T& kphase, const int hk_type = 0); /** @@ -296,7 +309,7 @@ class AtomPair /** * @brief get total memory size of AtomPair - */ + */ size_t get_memory_size() const; private: diff --git a/source/module_hamilt_lcao/module_hcontainer/base_matrix.cpp b/source/module_hamilt_lcao/module_hcontainer/base_matrix.cpp index ff5471bfb6..09a4c79215 100644 --- a/source/module_hamilt_lcao/module_hcontainer/base_matrix.cpp +++ b/source/module_hamilt_lcao/module_hcontainer/base_matrix.cpp @@ -1,9 +1,10 @@ #include "base_matrix.h" + +#include "source_base/global_function.h" + #include #include -#include "module_base/global_function.h" - namespace hamilt { @@ -68,19 +69,19 @@ template void BaseMatrix::allocate(T* data_array, bool if_zero) { #ifdef __DEBUG -assert(nrow_local*ncol_local>0); + assert(nrow_local * ncol_local > 0); #endif - if(data_array != nullptr && !this->allocated) + if (data_array != nullptr && !this->allocated) { this->value_begin = data_array; } - else if(data_array != nullptr && this->allocated) + else if (data_array != nullptr && this->allocated) { delete[] this->value_begin; this->value_begin = data_array; this->allocated = false; } - else if(data_array == nullptr && !this->allocated) + else if (data_array == nullptr && !this->allocated) { this->value_begin = new T[nrow_local * ncol_local]; this->allocated = true; @@ -89,7 +90,7 @@ assert(nrow_local*ncol_local>0); { // do nothing } - if(if_zero) + if (if_zero) { this->set_zero(); } @@ -100,7 +101,7 @@ template void BaseMatrix::set_zero() { #ifdef __DEBUG -assert(this->value_begin != nullptr); + assert(this->value_begin != nullptr); #endif ModuleBase::GlobalFunc::ZEROS(this->value_begin, nrow_local * ncol_local); } @@ -110,7 +111,7 @@ template void BaseMatrix::add_array(T* array) { #ifdef __DEBUG -assert(this->value_begin != nullptr); + assert(this->value_begin != nullptr); #endif // if allocated, add data from array into matrix // if whole matrix and 2d-block format, add data from array into matrix either @@ -183,7 +184,7 @@ template size_t BaseMatrix::get_memory_size() const { size_t memory_size = sizeof(*this); - if(this->allocated) + if (this->allocated) { memory_size += nrow_local * ncol_local * sizeof(T); } diff --git a/source/module_hamilt_lcao/module_hcontainer/func_folding.cpp b/source/module_hamilt_lcao/module_hcontainer/func_folding.cpp index 6d235b1d67..ef1af361d4 100644 --- a/source/module_hamilt_lcao/module_hcontainer/func_folding.cpp +++ b/source/module_hamilt_lcao/module_hcontainer/func_folding.cpp @@ -1,5 +1,5 @@ #include "hcontainer_funcs.h" -#include "module_base/libm/libm.h" +#include "source_base/libm/libm.h" namespace hamilt { @@ -10,8 +10,8 @@ namespace hamilt * @param kvec_d_in the k vector in Direct coordinate * @param hk_ld the leading dimension number of hk, ncol for row-major, nrow for column-major * @param hk_type the data-type of hk, 0 is row-major, 1 is column-major -*/ -template + */ +template void folding_HR(const hamilt::HContainer& hR, std::complex* hk, const ModuleBase::Vector3& kvec_d_in, @@ -32,7 +32,7 @@ void folding_HR(const hamilt::HContainer& hR, std::vector> hk_mat_tmp(row_size * col_size, 0); // copy hr to hk_tmp - for(int ir = 0; ir < tmp.get_R_size(); ++ir) + for (int ir = 0; ir < tmp.get_R_size(); ++ir) { const ModuleBase::Vector3 r_index = tmp.get_R_index(ir); TR* hr_mat = tmp.get_pointer(ir); @@ -43,8 +43,8 @@ void folding_HR(const hamilt::HContainer& hR, double sinp, cosp; ModuleBase::libm::sincos(arg, &sinp, &cosp); std::complex kphase = std::complex(cosp, sinp); - - for(int i = 0; i < row_size * col_size; ++i) + + for (int i = 0; i < row_size * col_size; ++i) { hk_mat_tmp[i] += kphase * hr_mat[i]; } @@ -54,20 +54,20 @@ void folding_HR(const hamilt::HContainer& hR, if (hk_type == 0) { std::complex* hk_mat = hk + tmp.get_begin_row() * hk_ld + tmp.get_begin_col(); - for(int irow = 0; irow < row_size; ++irow) + for (int irow = 0; irow < row_size; ++irow) { - for(int icol = 0; icol < col_size; ++icol) + for (int icol = 0; icol < col_size; ++icol) { hk_mat[irow * hk_ld + icol] += hk_mat_tmp[irow * col_size + icol]; } } } - else if(hk_type == 1) + else if (hk_type == 1) { std::complex* hk_mat = hk + tmp.get_begin_col() * hk_ld + tmp.get_begin_row(); - for(int icol = 0; icol < col_size; ++icol) + for (int icol = 0; icol < col_size; ++icol) { - for(int irow = 0; irow < row_size; ++irow) + for (int irow = 0; irow < row_size; ++irow) { hk_mat[icol * hk_ld + irow] += hk_mat_tmp[irow * col_size + icol]; } @@ -104,15 +104,15 @@ void folding_HR(const hamilt::HContainer& hR, // template instantiation template void folding_HR>(const hamilt::HContainer>& hR, - std::complex* hk, - const ModuleBase::Vector3& kvec_d_in, - const int ncol, - const int hk_type); + std::complex* hk, + const ModuleBase::Vector3& kvec_d_in, + const int ncol, + const int hk_type); template void folding_HR(const hamilt::HContainer& hR, - std::complex* hk, - const ModuleBase::Vector3& kvec_d_in, - const int ncol, - const int hk_type); + std::complex* hk, + const ModuleBase::Vector3& kvec_d_in, + const int ncol, + const int hk_type); // special case for double void folding_HR(const hamilt::HContainer& hR, double* hk, @@ -121,7 +121,7 @@ void folding_HR(const hamilt::HContainer& hR, const int hk_type) { // in ABACUS, this function works with gamma-only case. -// hR should be R=(0,0,0) only. +// hR should be R=(0,0,0) only. #ifdef _OPENMP #pragma omp parallel for #endif @@ -131,8 +131,8 @@ void folding_HR(const hamilt::HContainer& hR, // if TK==double, kphase is 1.0 double kphase = 1.0; - // Hk = HR - hR.get_atom_pair(i).add_to_matrix(hk, hk_ld , kphase, hk_type); + // Hk = HR + hR.get_atom_pair(i).add_to_matrix(hk, hk_ld, kphase, hk_type); } } diff --git a/source/module_hamilt_lcao/module_hcontainer/hcontainer.h b/source/module_hamilt_lcao/module_hcontainer/hcontainer.h index c823f06027..9717d84f95 100644 --- a/source/module_hamilt_lcao/module_hcontainer/hcontainer.h +++ b/source/module_hamilt_lcao/module_hcontainer/hcontainer.h @@ -2,8 +2,8 @@ #define W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_MODULE_HAMILT_LCAO_MODULE_HCONTAINER_HCONTAINER_H #include "atom_pair.h" -#include "module_base/vector3.h" #include "module_cell/unitcell.h" +#include "source_base/vector3.h" #include #include @@ -171,18 +171,22 @@ class HContainer HContainer(const Parallel_Orbitals* paraV, T* data_pointer = nullptr, const std::vector* ijr_info = nullptr); /** - * @brief set parallel orbital pointer to check parallel information - */ + * @brief set parallel orbital pointer to check parallel information + */ void set_paraV(const Parallel_Orbitals* paraV_in) { this->paraV = paraV_in; - for (auto& ap : atom_pairs) ap.set_paraV(paraV_in); + for (auto& ap: atom_pairs) + ap.set_paraV(paraV_in); }; /** - * @brief get parallel orbital pointer to check parallel information - * @return const Parallel_Orbitals* , if return is nullptr, it means HContainer is not in parallel mode - */ - const Parallel_Orbitals* get_paraV() const { return this->paraV; }; + * @brief get parallel orbital pointer to check parallel information + * @return const Parallel_Orbitals* , if return is nullptr, it means HContainer is not in parallel mode + */ + const Parallel_Orbitals* get_paraV() const + { + return this->paraV; + }; /** * @brief allocate memory for all matrix @@ -332,7 +336,6 @@ class HContainer */ size_t size_R_loop() const; - /** * @brief find index of R in tmp_R_index, used when current_R is fixed * @@ -418,8 +421,8 @@ class HContainer * HContainer has not been allocated after this function, * user should call allocate(...) to allocate memory. */ - void insert_ijrs(const std::vector* ijrs, const UnitCell& ucell, const int npol=1); - + void insert_ijrs(const std::vector* ijrs, const UnitCell& ucell, const int npol = 1); + /** * @brief return the wrapper_pointer */ diff --git a/source/module_hamilt_lcao/module_hcontainer/test/prepare_unitcell.h b/source/module_hamilt_lcao/module_hcontainer/test/prepare_unitcell.h index 84e0c9a4ec..1f2d4d91c5 100644 --- a/source/module_hamilt_lcao/module_hcontainer/test/prepare_unitcell.h +++ b/source/module_hamilt_lcao/module_hcontainer/test/prepare_unitcell.h @@ -1,86 +1,87 @@ #ifndef PREPARE_UNITCELL_H #define PREPARE_UNITCELL_H -#include -#include -#include "module_base/mathzone.h" +#include "source_base/mathzone.h" + +#include +#include class UcellTestPrepare { -public: - UcellTestPrepare()=default; - UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in); - UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in, - std::valarray mbl_in, - std::valarray velocity_in); - UcellTestPrepare(const UcellTestPrepare &utp); + public: + UcellTestPrepare() = default; + UcellTestPrepare(std::string latname_in, + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in); + UcellTestPrepare(std::string latname_in, + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in, + std::valarray mbl_in, + std::valarray velocity_in); + UcellTestPrepare(const UcellTestPrepare& utp); - std::string latname; - int lmaxmax; - bool init_vel; - bool selective_dynamics; - bool relax_new; - std::string fixed_axes; - double lat0; - std::valarray latvec; - std::vector elements; - std::vector pp_files; - std::vector pp_types; - std::vector orb_files; - std::valarray natom; - std::vector atomic_mass; - std::string coor_type; - std::valarray coordinates; - std::valarray mbl; - std::valarray velocity; - // ntype - int ntype; - int atomic_index; + std::string latname; + int lmaxmax; + bool init_vel; + bool selective_dynamics; + bool relax_new; + std::string fixed_axes; + double lat0; + std::valarray latvec; + std::vector elements; + std::vector pp_files; + std::vector pp_types; + std::vector orb_files; + std::valarray natom; + std::vector atomic_mass; + std::string coor_type; + std::valarray coordinates; + std::valarray mbl; + std::valarray velocity; + // ntype + int ntype; + int atomic_index; UnitCell* SetUcellInfo(const std::vector& nw, int& nlocal) { - //basic info - this->ntype = this->elements.size(); + // basic info + this->ntype = this->elements.size(); static UnitCell ucell; ucell.setup(this->latname, this->ntype, this->lmaxmax, this->init_vel, this->fixed_axes); delete[] ucell.magnet.start_mag; // mag set here ucell.atom_label.resize(ucell.ntype); - ucell.atom_mass.resize(ucell.ntype); - ucell.pseudo_fn.resize(ucell.ntype); - ucell.pseudo_type.resize(ucell.ntype); + ucell.atom_mass.resize(ucell.ntype); + ucell.pseudo_fn.resize(ucell.ntype); + ucell.pseudo_type.resize(ucell.ntype); ucell.orbital_fn.resize(ucell.ntype); ucell.magnet.start_mag = new double[ucell.ntype]; // mag set here - ucell.magnet.ux_[0] = 0.0; // ux_ set here + ucell.magnet.ux_[0] = 0.0; // ux_ set here ucell.magnet.ux_[1] = 0.0; ucell.magnet.ux_[2] = 0.0; for (int it = 0; it < ucell.ntype; ++it) @@ -263,122 +264,93 @@ class UcellTestPrepare }; UcellTestPrepare::UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in): - latname(latname_in), - lmaxmax(lmaxmax_in), - init_vel(init_vel_in), - selective_dynamics(selective_dynamics_in), - relax_new(relax_new_in), - fixed_axes(fixed_axes_in), - lat0(lat0_in), - latvec(latvec_in), - elements(elements_in), - pp_files(pp_files_in), - pp_types(pp_types_in), - orb_files(orb_files_in), - natom(natom_in), - atomic_mass(atomic_mass_in), - coor_type(coor_type_in), - coordinates(coordinates_in) + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in) + : latname(latname_in), lmaxmax(lmaxmax_in), init_vel(init_vel_in), selective_dynamics(selective_dynamics_in), + relax_new(relax_new_in), fixed_axes(fixed_axes_in), lat0(lat0_in), latvec(latvec_in), elements(elements_in), + pp_files(pp_files_in), pp_types(pp_types_in), orb_files(orb_files_in), natom(natom_in), + atomic_mass(atomic_mass_in), coor_type(coor_type_in), coordinates(coordinates_in) { - mbl = std::valarray(0.0, coordinates_in.size()); - velocity = std::valarray(0.0, coordinates_in.size()); + mbl = std::valarray(0.0, coordinates_in.size()); + velocity = std::valarray(0.0, coordinates_in.size()); } UcellTestPrepare::UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in, - std::valarray mbl_in, - std::valarray velocity_in): - latname(latname_in), - lmaxmax(lmaxmax_in), - init_vel(init_vel_in), - selective_dynamics(selective_dynamics_in), - relax_new(relax_new_in), - fixed_axes(fixed_axes_in), - lat0(lat0_in), - latvec(latvec_in), - elements(elements_in), - pp_files(pp_files_in), - pp_types(pp_types_in), - orb_files(orb_files_in), - natom(natom_in), - atomic_mass(atomic_mass_in), - coor_type(coor_type_in), - coordinates(coordinates_in), - mbl(mbl_in), - velocity(velocity_in) // velocity assume the existence of mbl in print_stru_file() -{} - -UcellTestPrepare::UcellTestPrepare(const UcellTestPrepare &utp): - latname(utp.latname), - lmaxmax(utp.lmaxmax), - init_vel(utp.init_vel), - selective_dynamics(utp.selective_dynamics), - relax_new(utp.relax_new), - fixed_axes(utp.fixed_axes), - lat0(utp.lat0), - latvec(utp.latvec), - elements(utp.elements), - pp_files(utp.pp_files), - pp_types(utp.pp_types), - orb_files(utp.orb_files), - natom(utp.natom), - atomic_mass(utp.atomic_mass), - coor_type(utp.coor_type), - coordinates(utp.coordinates), - mbl(utp.mbl), - velocity(utp.velocity) // velocity assume the existence of mbl in print_stru_file() -{} + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in, + std::valarray mbl_in, + std::valarray velocity_in) + : latname(latname_in), lmaxmax(lmaxmax_in), init_vel(init_vel_in), selective_dynamics(selective_dynamics_in), + relax_new(relax_new_in), fixed_axes(fixed_axes_in), lat0(lat0_in), latvec(latvec_in), elements(elements_in), + pp_files(pp_files_in), pp_types(pp_types_in), orb_files(orb_files_in), natom(natom_in), + atomic_mass(atomic_mass_in), coor_type(coor_type_in), coordinates(coordinates_in), mbl(mbl_in), + velocity(velocity_in) // velocity assume the existence of mbl in print_stru_file() +{ +} -std::map UcellTestLib +UcellTestPrepare::UcellTestPrepare(const UcellTestPrepare& utp) + : latname(utp.latname), lmaxmax(utp.lmaxmax), init_vel(utp.init_vel), selective_dynamics(utp.selective_dynamics), + relax_new(utp.relax_new), fixed_axes(utp.fixed_axes), lat0(utp.lat0), latvec(utp.latvec), elements(utp.elements), + pp_files(utp.pp_files), pp_types(utp.pp_types), orb_files(utp.orb_files), natom(utp.natom), + atomic_mass(utp.atomic_mass), coor_type(utp.coor_type), coordinates(utp.coordinates), mbl(utp.mbl), + velocity(utp.velocity) // velocity assume the existence of mbl in print_stru_file() { - {"Si", UcellTestPrepare( - "fcc", //latname - 2, //lmaxmax - true, //init_vel - true, //selective_dyanmics - true, //relax_new - "volume", //fixed_axes - 10.2, //lat0 - {-0.5,0.0,0.5, //latvec - 0.0,0.5,0.5, - -0.5,0.5,0.0}, - {"Si"}, //elements - {"Si.upf"}, //upf file - {"upf201"}, //upf types - {"Si.orb"}, //orb file - {2}, //number of each elements - {28.0}, //atomic mass - "Cartesian", //coordination type - {0.0,0.0,0.0, //atomic coordinates - 0.25,0.25,0.25})} -}; +} + +std::map UcellTestLib{{"Si", + UcellTestPrepare("fcc", // latname + 2, // lmaxmax + true, // init_vel + true, // selective_dyanmics + true, // relax_new + "volume", // fixed_axes + 10.2, // lat0 + {-0.5, + 0.0, + 0.5, // latvec + 0.0, + 0.5, + 0.5, + -0.5, + 0.5, + 0.0}, + {"Si"}, // elements + {"Si.upf"}, // upf file + {"upf201"}, // upf types + {"Si.orb"}, // orb file + {2}, // number of each elements + {28.0}, // atomic mass + "Cartesian", // coordination type + {0.0, + 0.0, + 0.0, // atomic coordinates + 0.25, + 0.25, + 0.25})}}; #endif diff --git a/source/module_hamilt_lcao/module_hcontainer/transfer.cpp b/source/module_hamilt_lcao/module_hcontainer/transfer.cpp index 0d984ab5c4..df6b72f401 100644 --- a/source/module_hamilt_lcao/module_hcontainer/transfer.cpp +++ b/source/module_hamilt_lcao/module_hcontainer/transfer.cpp @@ -1,13 +1,12 @@ #include "./transfer.h" -#include +#include "source_base/blas_connector.h" +#include "source_base/global_function.h" -#include "module_base/blas_connector.h" -#include "module_base/global_function.h" +#include #ifdef __MPI -#include - #include +#include namespace hamilt { @@ -275,7 +274,7 @@ void HTransPara::unpack_data(int irank, const T* values) } } #ifdef __DEBUG - //assert(value_data - values == this->data_size[irank]); + // assert(value_data - values == this->data_size[irank]); assert(ap_data - this->ap_indexes[irank].data() == this->ap_indexes[irank].size()); #endif } @@ -503,7 +502,8 @@ void HTransSerial::pack_data(int irank, T* values) { value_atoms[i] += size_begin; const int atom_i = i; - if(sparse_ap[i].size() == 0) continue; + if (sparse_ap[i].size() == 0) + continue; const int size_row = this->orb_indexes[irank][this->orb_row_indexes[irank][atom_i]]; for (int j = 0; j < sparse_ap[i].size(); ++j) { @@ -561,7 +561,7 @@ void HTransSerial::pack_data(int irank, T* values) } } #ifdef __DEBUG - //assert(value_data - values == this->size_values[irank]); + // assert(value_data - values == this->size_values[irank]); #endif return; } @@ -584,7 +584,8 @@ void HTransSerial::unpack_data(int irank, const T* values) { value_atoms[i] += size_begin; const int atom_i = i; - if(sparse_ap[i].size() == 0) continue; + if (sparse_ap[i].size() == 0) + continue; const int size_row = this->orb_indexes[irank][this->orb_row_indexes[irank][atom_i]]; for (int j = 0; j < sparse_ap[i].size(); ++j) { @@ -642,7 +643,7 @@ void HTransSerial::unpack_data(int irank, const T* values) } } #ifdef __DEBUG - //assert(value_data - values == this->size_values[irank]); + // assert(value_data - values == this->size_values[irank]); #endif return; } diff --git a/source/module_hamilt_lcao/module_hcontainer/transfer.h b/source/module_hamilt_lcao/module_hcontainer/transfer.h index 35c41e4350..95283ce811 100644 --- a/source/module_hamilt_lcao/module_hcontainer/transfer.h +++ b/source/module_hamilt_lcao/module_hcontainer/transfer.h @@ -1,12 +1,12 @@ #ifndef HCONTAINERTRANSFER_H #define HCONTAINERTRANSFER_H +#include "./hcontainer.h" +#include "source_base/vector3.h" + #include #include -#include "module_base/vector3.h" -#include "./hcontainer.h" - #ifdef __MPI namespace hamilt { diff --git a/source/module_hamilt_lcao/module_tddft/band_energy.cpp b/source/module_hamilt_lcao/module_tddft/band_energy.cpp index c148042be3..5aafe14d4c 100644 --- a/source/module_hamilt_lcao/module_tddft/band_energy.cpp +++ b/source/module_hamilt_lcao/module_tddft/band_energy.cpp @@ -1,9 +1,9 @@ #include "band_energy.h" #include "evolve_elec.h" -#include "module_base/lapack_connector.h" -#include "module_base/module_container/ATen/kernels/blas.h" -#include "module_base/scalapack_connector.h" +#include "source_base/lapack_connector.h" +#include "source_base/module_container/ATen/kernels/blas.h" +#include "source_base/scalapack_connector.h" #include #include @@ -146,7 +146,7 @@ void compute_ekb(const Parallel_Orbitals* pv, } } } // loop ipcol - } // loop iprow + } // loop iprow info = MPI_Allreduce(eii, ekb, nband, MPI_DOUBLE, MPI_SUM, pv->comm()); delete[] tmp1; @@ -284,7 +284,7 @@ void compute_ekb_tensor(const Parallel_Orbitals* pv, } } } // loop ipcol - } // loop iprow + } // loop iprow // Perform MPI reduction to compute ekb info = MPI_Allreduce(eii.data(), ekb.data(), nband, MPI_DOUBLE, MPI_SUM, pv->comm()); diff --git a/source/module_hamilt_lcao/module_tddft/band_energy.h b/source/module_hamilt_lcao/module_tddft/band_energy.h index 4e1ab9aa5b..1fd0942f13 100644 --- a/source/module_hamilt_lcao/module_tddft/band_energy.h +++ b/source/module_hamilt_lcao/module_tddft/band_energy.h @@ -6,8 +6,8 @@ #ifndef BANDENERGY_H #define BANDENERGY_H -#include "module_base/module_container/ATen/core/tensor.h" // ct::Tensor #include "module_basis/module_ao/parallel_orbitals.h" +#include "source_base/module_container/ATen/core/tensor.h" // ct::Tensor #include diff --git a/source/module_hamilt_lcao/module_tddft/evolve_elec.cpp b/source/module_hamilt_lcao/module_tddft/evolve_elec.cpp index 95b05872d2..81d7fb696d 100644 --- a/source/module_hamilt_lcao/module_tddft/evolve_elec.cpp +++ b/source/module_hamilt_lcao/module_tddft/evolve_elec.cpp @@ -1,12 +1,12 @@ #include "evolve_elec.h" #include "evolve_psi.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" #include "module_elecstate/module_charge/symmetry_rho.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" #include "module_hamilt_lcao/module_dftu/dftu.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" namespace module_tddft { diff --git a/source/module_hamilt_lcao/module_tddft/evolve_elec.h b/source/module_hamilt_lcao/module_tddft/evolve_elec.h index d33f10c547..dfe65a6334 100644 --- a/source/module_hamilt_lcao/module_tddft/evolve_elec.h +++ b/source/module_hamilt_lcao/module_tddft/evolve_elec.h @@ -1,17 +1,17 @@ #ifndef W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_MODULE_HAMILT_LCAO_MODULE_TDDFT_EVOLVE_ELEC_H #define W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_MODULE_HAMILT_LCAO_MODULE_TDDFT_EVOLVE_ELEC_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/module_container/ATen/core/tensor.h" // ct::Tensor -#include "module_base/module_container/ATen/core/tensor_map.h" // TensorMap -#include "module_base/module_device/device.h" // base_device -#include "module_base/module_device/memory_op.h" // memory operations -#include "module_base/scalapack_connector.h" // Cpxgemr2d -#include "source_esolver/esolver_ks_lcao.h" -#include "source_esolver/esolver_ks_lcao_tddft.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" #include "module_psi/psi.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/module_container/ATen/core/tensor.h" // ct::Tensor +#include "source_base/module_container/ATen/core/tensor_map.h" // TensorMap +#include "source_base/module_device/device.h" // base_device +#include "source_base/module_device/memory_op.h" // memory operations +#include "source_base/scalapack_connector.h" // Cpxgemr2d +#include "source_esolver/esolver_ks_lcao.h" +#include "source_esolver/esolver_ks_lcao_tddft.h" //----------------------------------------------------------- // mohan add 2021-02-09 diff --git a/source/module_hamilt_lcao/module_tddft/evolve_psi.cpp b/source/module_hamilt_lcao/module_tddft/evolve_psi.cpp index 8a44adea78..78e0b4d435 100644 --- a/source/module_hamilt_lcao/module_tddft/evolve_psi.cpp +++ b/source/module_hamilt_lcao/module_tddft/evolve_psi.cpp @@ -2,18 +2,18 @@ #include "band_energy.h" #include "middle_hamilt.h" -#include "module_base/lapack_connector.h" -#include "module_base/module_container/ATen/kernels/blas.h" // cuBLAS handle -#include "module_base/module_container/ATen/kernels/lapack.h" // cuSOLVER handle -#include "module_base/scalapack_connector.h" -#include "source_esolver/esolver_ks_lcao_tddft.h" // use gatherMatrix #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" #include "norm_psi.h" #include "propagator.h" -#include "upsi.h" #include "solve_propagation.h" +#include "source_base/lapack_connector.h" +#include "source_base/module_container/ATen/kernels/blas.h" // cuBLAS handle +#include "source_base/module_container/ATen/kernels/lapack.h" // cuSOLVER handle +#include "source_base/scalapack_connector.h" +#include "source_esolver/esolver_ks_lcao_tddft.h" // use gatherMatrix +#include "upsi.h" #include diff --git a/source/module_hamilt_lcao/module_tddft/evolve_psi.h b/source/module_hamilt_lcao/module_tddft/evolve_psi.h index 44f0db888a..6f4e63aebf 100644 --- a/source/module_hamilt_lcao/module_tddft/evolve_psi.h +++ b/source/module_hamilt_lcao/module_tddft/evolve_psi.h @@ -6,10 +6,10 @@ #ifndef ELEC_PSI_H #define ELEC_PSI_H -#include "module_base/module_container/ATen/core/tensor.h" // ct::Tensor -#include "module_base/module_container/ATen/core/tensor_map.h" // TensorMap #include "module_basis/module_ao/parallel_orbitals.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" +#include "source_base/module_container/ATen/core/tensor.h" // ct::Tensor +#include "source_base/module_container/ATen/core/tensor_map.h" // TensorMap namespace module_tddft { diff --git a/source/module_hamilt_lcao/module_tddft/middle_hamilt.cpp b/source/module_hamilt_lcao/module_tddft/middle_hamilt.cpp index 94b3dc3f5d..da72911335 100644 --- a/source/module_hamilt_lcao/module_tddft/middle_hamilt.cpp +++ b/source/module_hamilt_lcao/module_tddft/middle_hamilt.cpp @@ -1,9 +1,9 @@ #include "middle_hamilt.h" -#include "module_base/lapack_connector.h" -#include "module_base/module_container/ATen/kernels/blas.h" -#include "module_base/module_device/memory_op.h" // memory operations -#include "module_base/scalapack_connector.h" +#include "source_base/lapack_connector.h" +#include "source_base/module_container/ATen/kernels/blas.h" +#include "source_base/module_device/memory_op.h" // memory operations +#include "source_base/scalapack_connector.h" #include #include diff --git a/source/module_hamilt_lcao/module_tddft/middle_hamilt.h b/source/module_hamilt_lcao/module_tddft/middle_hamilt.h index 4b153e3166..8c61d8a452 100644 --- a/source/module_hamilt_lcao/module_tddft/middle_hamilt.h +++ b/source/module_hamilt_lcao/module_tddft/middle_hamilt.h @@ -6,8 +6,8 @@ #ifndef MIDDLE_HAMILT_H #define MIDDLE_HAMILT_H -#include "module_base/module_container/ATen/core/tensor.h" // ct::Tensor #include "module_basis/module_ao/parallel_orbitals.h" +#include "source_base/module_container/ATen/core/tensor.h" // ct::Tensor #include diff --git a/source/module_hamilt_lcao/module_tddft/norm_psi.cpp b/source/module_hamilt_lcao/module_tddft/norm_psi.cpp index bbd7ea8956..8465c9fb7f 100644 --- a/source/module_hamilt_lcao/module_tddft/norm_psi.cpp +++ b/source/module_hamilt_lcao/module_tddft/norm_psi.cpp @@ -1,8 +1,8 @@ #include "norm_psi.h" -#include "module_base/lapack_connector.h" -#include "module_base/module_container/ATen/kernels/blas.h" -#include "module_base/scalapack_connector.h" +#include "source_base/lapack_connector.h" +#include "source_base/module_container/ATen/kernels/blas.h" +#include "source_base/scalapack_connector.h" #include #include @@ -136,7 +136,7 @@ void norm_psi(const Parallel_Orbitals* pv, } } } // loop ipcol - } // loop iprow + } // loop iprow BlasConnector::copy(pv->nloc_wfc, psi_k, 1, tmp1, 1); @@ -344,7 +344,7 @@ void norm_psi_tensor(const Parallel_Orbitals* pv, } } } // loop ipcol - } // loop iprow + } // loop iprow // Copy psi_k to tmp1 (using deep copy) // tmp1.CopyFrom(psi_k); // Does not work because this will cause tmp1 and psi_k to share the same data diff --git a/source/module_hamilt_lcao/module_tddft/norm_psi.h b/source/module_hamilt_lcao/module_tddft/norm_psi.h index 6d3e455a3a..9ba34f3317 100644 --- a/source/module_hamilt_lcao/module_tddft/norm_psi.h +++ b/source/module_hamilt_lcao/module_tddft/norm_psi.h @@ -6,8 +6,8 @@ #ifndef NORM_PSI_H #define NORM_PSI_H -#include "module_base/module_container/ATen/core/tensor.h" // ct::Tensor #include "module_basis/module_ao/parallel_orbitals.h" +#include "source_base/module_container/ATen/core/tensor.h" // ct::Tensor #include diff --git a/source/module_hamilt_lcao/module_tddft/propagator.cpp b/source/module_hamilt_lcao/module_tddft/propagator.cpp index 154671176e..aa792cc106 100644 --- a/source/module_hamilt_lcao/module_tddft/propagator.cpp +++ b/source/module_hamilt_lcao/module_tddft/propagator.cpp @@ -1,12 +1,12 @@ #include "propagator.h" -#include "module_base/lapack_connector.h" -#include "module_base/module_container/ATen/kernels/blas.h" -#include "module_base/module_container/ATen/kernels/lapack.h" -#include "module_base/module_container/ATen/kernels/memory.h" // memory operations (Tensor) -#include "module_base/module_device/memory_op.h" // memory operations -#include "module_base/scalapack_connector.h" #include "module_parameter/parameter.h" +#include "source_base/lapack_connector.h" +#include "source_base/module_container/ATen/kernels/blas.h" +#include "source_base/module_container/ATen/kernels/lapack.h" +#include "source_base/module_container/ATen/kernels/memory.h" // memory operations (Tensor) +#include "source_base/module_device/memory_op.h" // memory operations +#include "source_base/scalapack_connector.h" #include #include diff --git a/source/module_hamilt_lcao/module_tddft/propagator.h b/source/module_hamilt_lcao/module_tddft/propagator.h index cb77300b4a..f684fd0cdc 100644 --- a/source/module_hamilt_lcao/module_tddft/propagator.h +++ b/source/module_hamilt_lcao/module_tddft/propagator.h @@ -6,9 +6,9 @@ #ifndef PROPAGATOR_H #define PROPAGATOR_H -#include "module_base/constants.h" -#include "module_base/module_container/ATen/core/tensor.h" // ct::Tensor #include "module_basis/module_ao/parallel_orbitals.h" +#include "source_base/constants.h" +#include "source_base/module_container/ATen/core/tensor.h" // ct::Tensor #include diff --git a/source/module_hamilt_lcao/module_tddft/propagator_cn2.cpp b/source/module_hamilt_lcao/module_tddft/propagator_cn2.cpp index d87cf3c593..a6d21294fc 100644 --- a/source/module_hamilt_lcao/module_tddft/propagator_cn2.cpp +++ b/source/module_hamilt_lcao/module_tddft/propagator_cn2.cpp @@ -1,11 +1,11 @@ -#include "module_base/lapack_connector.h" -#include "module_base/module_container/ATen/kernels/blas.h" -#include "module_base/module_container/ATen/kernels/lapack.h" -#include "module_base/module_container/ATen/kernels/memory.h" // memory operations (Tensor) -#include "module_base/module_device/memory_op.h" // memory operations -#include "module_base/scalapack_connector.h" #include "module_parameter/parameter.h" #include "propagator.h" +#include "source_base/lapack_connector.h" +#include "source_base/module_container/ATen/kernels/blas.h" +#include "source_base/module_container/ATen/kernels/lapack.h" +#include "source_base/module_container/ATen/kernels/memory.h" // memory operations (Tensor) +#include "source_base/module_device/memory_op.h" // memory operations +#include "source_base/scalapack_connector.h" #include #include diff --git a/source/module_hamilt_lcao/module_tddft/propagator_etrs.cpp b/source/module_hamilt_lcao/module_tddft/propagator_etrs.cpp index ad37264d59..8457aa7e93 100644 --- a/source/module_hamilt_lcao/module_tddft/propagator_etrs.cpp +++ b/source/module_hamilt_lcao/module_tddft/propagator_etrs.cpp @@ -1,11 +1,11 @@ -#include "module_base/lapack_connector.h" -#include "module_base/module_container/ATen/kernels/blas.h" -#include "module_base/module_container/ATen/kernels/lapack.h" -#include "module_base/module_container/ATen/kernels/memory.h" // memory operations (Tensor) -#include "module_base/module_device/memory_op.h" // memory operations -#include "module_base/scalapack_connector.h" #include "module_parameter/parameter.h" #include "propagator.h" +#include "source_base/lapack_connector.h" +#include "source_base/module_container/ATen/kernels/blas.h" +#include "source_base/module_container/ATen/kernels/lapack.h" +#include "source_base/module_container/ATen/kernels/memory.h" // memory operations (Tensor) +#include "source_base/module_device/memory_op.h" // memory operations +#include "source_base/scalapack_connector.h" #include #include diff --git a/source/module_hamilt_lcao/module_tddft/propagator_taylor.cpp b/source/module_hamilt_lcao/module_tddft/propagator_taylor.cpp index 58567a900a..238b5731ef 100644 --- a/source/module_hamilt_lcao/module_tddft/propagator_taylor.cpp +++ b/source/module_hamilt_lcao/module_tddft/propagator_taylor.cpp @@ -1,11 +1,11 @@ -#include "module_base/lapack_connector.h" -#include "module_base/module_container/ATen/kernels/blas.h" -#include "module_base/module_container/ATen/kernels/lapack.h" -#include "module_base/module_container/ATen/kernels/memory.h" // memory operations (Tensor) -#include "module_base/module_device/memory_op.h" // memory operations -#include "module_base/scalapack_connector.h" #include "module_parameter/parameter.h" #include "propagator.h" +#include "source_base/lapack_connector.h" +#include "source_base/module_container/ATen/kernels/blas.h" +#include "source_base/module_container/ATen/kernels/lapack.h" +#include "source_base/module_container/ATen/kernels/memory.h" // memory operations (Tensor) +#include "source_base/module_device/memory_op.h" // memory operations +#include "source_base/scalapack_connector.h" #include #include @@ -108,7 +108,7 @@ void Propagator::compute_propagator_taylor(const int nlocal, } } } // loop ipcol - } // loop iprow + } // loop iprow std::complex beta = {0.0, -0.5 * this->dt / tag}; // for ETRS tag=2 , for taylor tag=1 diff --git a/source/module_hamilt_lcao/module_tddft/snap_psibeta_half_tddft.cpp b/source/module_hamilt_lcao/module_tddft/snap_psibeta_half_tddft.cpp index b03e5a380d..1d87bfb5f1 100644 --- a/source/module_hamilt_lcao/module_tddft/snap_psibeta_half_tddft.cpp +++ b/source/module_hamilt_lcao/module_tddft/snap_psibeta_half_tddft.cpp @@ -1,10 +1,10 @@ #include "snap_psibeta_half_tddft.h" -#include "module_base/constants.h" -#include "module_base/math_integral.h" -#include "module_base/math_polyint.h" -#include "module_base/timer.h" -#include "module_base/ylm.h" +#include "source_base/constants.h" +#include "source_base/math_integral.h" +#include "source_base/math_polyint.h" +#include "source_base/timer.h" +#include "source_base/ylm.h" namespace module_tddft { @@ -163,7 +163,7 @@ void snap_psibeta_half_tddft(const LCAO_Orbitals& orb, const ModuleBase::Vector3 r_coor = r_ridial[ir] * r_angular_tmp; const ModuleBase::Vector3 tmp_r_coor = r_coor + dRa; const double tmp_r_coor_norm = tmp_r_coor.norm(); - if (tmp_r_coor_norm > Rcut1) + if (tmp_r_coor_norm > Rcut1) { continue; } @@ -182,13 +182,13 @@ void snap_psibeta_half_tddft(const LCAO_Orbitals& orb, const std::complex exp_iAr = std::exp(ModuleBase::IMAG_UNIT * phase); const ModuleBase::Vector3 tmp_r_coor_r_commu = r_coor + R0; - const double interp_v = ModuleBase::PolyInt::Polynomial_Interpolation(psi_1, - mesh_r1, dk_1, tmp_r_coor_norm); + const double interp_v + = ModuleBase::PolyInt::Polynomial_Interpolation(psi_1, mesh_r1, dk_1, tmp_r_coor_norm); for (int m0 = 0; m0 < 2 * L0 + 1; m0++) { - std::complex temp = exp_iAr * rly0[L0 * L0 + m0] * rly1[L1 * L1 + m1] - * interp_v * weights_angular; + std::complex temp + = exp_iAr * rly0[L0 * L0 + m0] * rly1[L1 * L1 + m1] * interp_v * weights_angular; result_angular[m0] += temp; if (calc_r) @@ -201,8 +201,8 @@ void snap_psibeta_half_tddft(const LCAO_Orbitals& orb, } int index_tmp = index; - const double temp = ModuleBase::PolyInt::Polynomial_Interpolation(beta_r, - mesh_r0, dk_0, r_ridial[ir]) * r_ridial[ir] * weights_ridial[ir]; + const double temp = ModuleBase::PolyInt::Polynomial_Interpolation(beta_r, mesh_r0, dk_0, r_ridial[ir]) + * r_ridial[ir] * weights_ridial[ir]; if (!calc_r) { @@ -228,13 +228,13 @@ void snap_psibeta_half_tddft(const LCAO_Orbitals& orb, index += 2 * L0 + 1; } - for(int dim = 0; dim < nlm.size(); dim++) + for (int dim = 0; dim < nlm.size(); dim++) { - for (auto &x : nlm[dim]) + for (auto& x: nlm[dim]) { // nlm[0] is // nlm[1 or 2 or 3] is , a = x, y, z - x = std::conj(x); + x = std::conj(x); } } diff --git a/source/module_hamilt_lcao/module_tddft/snap_psibeta_half_tddft.h b/source/module_hamilt_lcao/module_tddft/snap_psibeta_half_tddft.h index 04c8eb9760..5ce91c8fdd 100644 --- a/source/module_hamilt_lcao/module_tddft/snap_psibeta_half_tddft.h +++ b/source/module_hamilt_lcao/module_tddft/snap_psibeta_half_tddft.h @@ -1,30 +1,28 @@ #ifndef SNAP_PSIBETA_HALF_TDDFT #define SNAP_PSIBETA_HALF_TDDFT -#include -#include - -#include "module_base/vector3.h" #include "module_basis/module_ao/ORB_read.h" #include "module_cell/setup_nonlocal.h" +#include "source_base/vector3.h" + +#include +#include namespace module_tddft { - // calculate the tddft nonlocal potential term - void snap_psibeta_half_tddft( - const LCAO_Orbitals &orb, - const InfoNonlocal &infoNL_, - std::vector>> &nlm, - const ModuleBase::Vector3 &R1, - const int &T1, - const int &L1, - const int &m1, - const int &N1, - const ModuleBase::Vector3 &R0, // The projector. - const int &T0, - const ModuleBase::Vector3 &A, - const bool &calc_r - ); +// calculate the tddft nonlocal potential term +void snap_psibeta_half_tddft(const LCAO_Orbitals& orb, + const InfoNonlocal& infoNL_, + std::vector>>& nlm, + const ModuleBase::Vector3& R1, + const int& T1, + const int& L1, + const int& m1, + const int& N1, + const ModuleBase::Vector3& R0, // The projector. + const int& T0, + const ModuleBase::Vector3& A, + const bool& calc_r); } // namespace module_tddft diff --git a/source/module_hamilt_lcao/module_tddft/solve_propagation.cpp b/source/module_hamilt_lcao/module_tddft/solve_propagation.cpp index 45d8a1231a..e3a4d55fbb 100644 --- a/source/module_hamilt_lcao/module_tddft/solve_propagation.cpp +++ b/source/module_hamilt_lcao/module_tddft/solve_propagation.cpp @@ -1,21 +1,21 @@ #include "solve_propagation.h" -#include +#include "source_base/lapack_connector.h" +#include "source_base/scalapack_connector.h" -#include "module_base/lapack_connector.h" -#include "module_base/scalapack_connector.h" +#include namespace module_tddft { #ifdef __MPI void solve_propagation(const Parallel_Orbitals* pv, - const int nband, - const int nlocal, - const double dt, - const std::complex* Stmp, - const std::complex* Htmp, - const std::complex* psi_k_laststep, - std::complex* psi_k) + const int nband, + const int nlocal, + const double dt, + const std::complex* Stmp, + const std::complex* Htmp, + const std::complex* psi_k_laststep, + std::complex* psi_k) { // (1) init A,B and copy Htmp to A & B std::complex* operator_A = new std::complex[pv->nloc]; @@ -25,7 +25,7 @@ void solve_propagation(const Parallel_Orbitals* pv, std::complex* operator_B = new std::complex[pv->nloc]; ModuleBase::GlobalFunc::ZEROS(operator_B, pv->nloc); BlasConnector::copy(pv->nloc, Htmp, 1, operator_B, 1); - + // ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // (2) compute operator_A & operator_B by GEADD // operator_A = Stmp + i*para * Htmp; beta2 = para = 0.25 * dt @@ -34,78 +34,43 @@ void solve_propagation(const Parallel_Orbitals* pv, std::complex beta1 = {0.0, -0.25 * dt}; std::complex beta2 = {0.0, 0.25 * dt}; - ScalapackConnector::geadd('N', - nlocal, - nlocal, - alpha, - Stmp, - 1, - 1, - pv->desc, - beta2, - operator_A, - 1, - 1, - pv->desc); - ScalapackConnector::geadd('N', - nlocal, - nlocal, - alpha, - Stmp, - 1, - 1, - pv->desc, - beta1, - operator_B, - 1, - 1, - pv->desc); + ScalapackConnector::geadd('N', nlocal, nlocal, alpha, Stmp, 1, 1, pv->desc, beta2, operator_A, 1, 1, pv->desc); + ScalapackConnector::geadd('N', nlocal, nlocal, alpha, Stmp, 1, 1, pv->desc, beta1, operator_B, 1, 1, pv->desc); // ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // (3) b = operator_B @ psi_k_laststep std::complex* tmp_b = new std::complex[pv->nloc_wfc]; ScalapackConnector::gemm('N', - 'N', - nlocal, - nband, - nlocal, - 1.0, - operator_B, - 1, - 1, - pv->desc, - psi_k_laststep, - 1, - 1, - pv->desc_wfc, - 0.0, - tmp_b, - 1, - 1, - pv->desc_wfc); - //get ipiv + 'N', + nlocal, + nband, + nlocal, + 1.0, + operator_B, + 1, + 1, + pv->desc, + psi_k_laststep, + 1, + 1, + pv->desc_wfc, + 0.0, + tmp_b, + 1, + 1, + pv->desc_wfc); + // get ipiv int* ipiv = new int[pv->nloc]; int info = 0; // (4) solve Ac=b - ScalapackConnector::gesv(nlocal, - nband, - operator_A, - 1, - 1, - pv->desc, - ipiv, - tmp_b, - 1, - 1, - pv->desc_wfc, - &info); + ScalapackConnector::gesv(nlocal, nband, operator_A, 1, 1, pv->desc, ipiv, tmp_b, 1, 1, pv->desc_wfc, &info); - //copy solution to psi_k + // copy solution to psi_k BlasConnector::copy(pv->nloc_wfc, tmp_b, 1, psi_k, 1); - delete []tmp_b; - delete []ipiv; - delete []operator_A; - delete []operator_B; + delete[] tmp_b; + delete[] ipiv; + delete[] operator_A; + delete[] operator_B; } #endif // __MPI } // namespace module_tddft diff --git a/source/module_hamilt_lcao/module_tddft/td_current.cpp b/source/module_hamilt_lcao/module_tddft/td_current.cpp index 558ab304cc..aaef776815 100644 --- a/source/module_hamilt_lcao/module_tddft/td_current.cpp +++ b/source/module_hamilt_lcao/module_tddft/td_current.cpp @@ -1,8 +1,8 @@ #include "td_current.h" #ifdef __LCAO -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_hamilt_lcao/module_tddft/snap_psibeta_half_tddft.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" #ifdef _OPENMP #include #include diff --git a/source/module_hamilt_lcao/module_tddft/td_current.h b/source/module_hamilt_lcao/module_tddft/td_current.h index 2d4fa5c1b1..4f832640f0 100644 --- a/source/module_hamilt_lcao/module_tddft/td_current.h +++ b/source/module_hamilt_lcao/module_tddft/td_current.h @@ -1,16 +1,17 @@ #ifndef TD_CURRENT_H #define TD_CURRENT_H -#include #include "module_basis/module_ao/parallel_orbitals.h" +#include "module_basis/module_nao/two_center_integrator.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_cell/unitcell.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" -#include "module_basis/module_nao/two_center_integrator.h" +#include "source_base/vector3.h" #include "td_velocity.h" -#include "module_base/vector3.h" + +#include #ifdef __LCAO -//design to calculate current for length gauge +// design to calculate current for length gauge class TD_current { public: @@ -21,7 +22,7 @@ class TD_current const TwoCenterIntegrator* intor); ~TD_current(); - hamilt::HContainer>* get_current_term_pointer(const int& i)const + hamilt::HContainer>* get_current_term_pointer(const int& i) const { return this->current_term[i]; } @@ -37,9 +38,10 @@ class TD_current const LCAO_Orbitals& orb_; const Grid_Driver* Grid = nullptr; - /// @brief Store real space hamiltonian. TD term should include imaginary part, thus it has to be complex type. Only shared between TD operators. + /// @brief Store real space hamiltonian. TD term should include imaginary part, thus it has to be complex type. Only + /// shared between TD operators. std::vector>*> current_term = {nullptr, nullptr, nullptr}; - + const TwoCenterIntegrator* intor_ = nullptr; /** @@ -74,6 +76,5 @@ class TD_current ModuleBase::Vector3 cart_At; }; - #endif // __LCAO #endif // TD_CURRENT_H diff --git a/source/module_hamilt_lcao/module_tddft/td_velocity.h b/source/module_hamilt_lcao/module_tddft/td_velocity.h index 1fdc1dd5c4..87e0bcd3a5 100644 --- a/source/module_hamilt_lcao/module_tddft/td_velocity.h +++ b/source/module_hamilt_lcao/module_tddft/td_velocity.h @@ -1,8 +1,8 @@ #ifndef TD_VELOCITY_H #define TD_VELOCITY_H -#include "module_base/abfs-vector3_order.h" -#include "module_base/timer.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "source_base/abfs-vector3_order.h" +#include "source_base/timer.h" #include // Class to store TDDFT velocity gauge infos. diff --git a/source/module_hamilt_lcao/module_tddft/test/band_energy_test.cpp b/source/module_hamilt_lcao/module_tddft/test/band_energy_test.cpp index 706b50a603..5439a80ab1 100644 --- a/source/module_hamilt_lcao/module_tddft/test/band_energy_test.cpp +++ b/source/module_hamilt_lcao/module_tddft/test/band_energy_test.cpp @@ -1,13 +1,13 @@ #include "module_hamilt_lcao/module_tddft/band_energy.h" -#include -#include -#include - #include "module_basis/module_ao/parallel_orbitals.h" #include "module_hamilt_lcao/module_tddft/evolve_elec.h" #include "tddft_test.h" +#include +#include +#include + /************************************************ * unit test of functions in band_energy.h ***********************************************/ diff --git a/source/module_hamilt_lcao/module_tddft/test/middle_hamilt_test.cpp b/source/module_hamilt_lcao/module_tddft/test/middle_hamilt_test.cpp index 6ac920400a..2a863168e0 100644 --- a/source/module_hamilt_lcao/module_tddft/test/middle_hamilt_test.cpp +++ b/source/module_hamilt_lcao/module_tddft/test/middle_hamilt_test.cpp @@ -1,12 +1,12 @@ #include "module_hamilt_lcao/module_tddft/middle_hamilt.h" -#include "module_base/global_variable.h" // GlobalV::ofs_running #include "module_basis/module_ao/parallel_orbitals.h" +#include "source_base/global_variable.h" // GlobalV::ofs_running #include "tddft_test.h" #include -#include #include +#include /************************************************ * unit test of functions in middle_hamilt.h diff --git a/source/module_hamilt_lcao/module_tddft/test/norm_psi_test.cpp b/source/module_hamilt_lcao/module_tddft/test/norm_psi_test.cpp index e4b8852c95..eaf403de0b 100644 --- a/source/module_hamilt_lcao/module_tddft/test/norm_psi_test.cpp +++ b/source/module_hamilt_lcao/module_tddft/test/norm_psi_test.cpp @@ -1,12 +1,12 @@ #include "module_hamilt_lcao/module_tddft/norm_psi.h" -#include "module_base/global_variable.h" // GlobalV::ofs_running #include "module_basis/module_ao/parallel_orbitals.h" +#include "source_base/global_variable.h" // GlobalV::ofs_running #include "tddft_test.h" #include -#include #include +#include /************************************************ * unit test of functions in norm_psi.h diff --git a/source/module_hamilt_lcao/module_tddft/test/propagator_test1.cpp b/source/module_hamilt_lcao/module_tddft/test/propagator_test1.cpp index 0002ee4b44..d238cd2110 100644 --- a/source/module_hamilt_lcao/module_tddft/test/propagator_test1.cpp +++ b/source/module_hamilt_lcao/module_tddft/test/propagator_test1.cpp @@ -6,8 +6,8 @@ #include "module_parameter/parameter.h" #include "tddft_test.h" -#include #include +#include /************************************************ * unit test of functions in propagator.h diff --git a/source/module_hamilt_lcao/module_tddft/test/propagator_test2.cpp b/source/module_hamilt_lcao/module_tddft/test/propagator_test2.cpp index 7ff2416a6a..52a7d451ce 100644 --- a/source/module_hamilt_lcao/module_tddft/test/propagator_test2.cpp +++ b/source/module_hamilt_lcao/module_tddft/test/propagator_test2.cpp @@ -6,8 +6,8 @@ #include "module_parameter/parameter.h" #include "tddft_test.h" -#include #include +#include /************************************************ * unit test of functions in propagator.h diff --git a/source/module_hamilt_lcao/module_tddft/test/propagator_test3.cpp b/source/module_hamilt_lcao/module_tddft/test/propagator_test3.cpp index faabe0019d..9440e84b25 100644 --- a/source/module_hamilt_lcao/module_tddft/test/propagator_test3.cpp +++ b/source/module_hamilt_lcao/module_tddft/test/propagator_test3.cpp @@ -6,8 +6,8 @@ #include "module_parameter/parameter.h" #include "tddft_test.h" -#include #include +#include /************************************************ * unit test of functions in propagator.h diff --git a/source/module_hamilt_lcao/module_tddft/test/tddft_test.cpp b/source/module_hamilt_lcao/module_tddft/test/tddft_test.cpp index a55ad59681..087c7b4529 100644 --- a/source/module_hamilt_lcao/module_tddft/test/tddft_test.cpp +++ b/source/module_hamilt_lcao/module_tddft/test/tddft_test.cpp @@ -1,12 +1,12 @@ #include "tddft_test.h" +#include "module_basis/module_ao/parallel_orbitals.h" +#include "source_base/blacs_connector.h" +#include "source_base/scalapack_connector.h" + #include #include -#include "module_base/blacs_connector.h" -#include "module_base/scalapack_connector.h" -#include "module_basis/module_ao/parallel_orbitals.h" - /************************************************ * unit test of module_tddft ***********************************************/ diff --git a/source/module_hamilt_lcao/module_tddft/test/upsi_test1.cpp b/source/module_hamilt_lcao/module_tddft/test/upsi_test1.cpp index 6ffe45a3bd..eb8ff96ea2 100644 --- a/source/module_hamilt_lcao/module_tddft/test/upsi_test1.cpp +++ b/source/module_hamilt_lcao/module_tddft/test/upsi_test1.cpp @@ -1,11 +1,11 @@ -#include "module_base/global_variable.h" // GlobalV::ofs_running #include "module_basis/module_ao/parallel_orbitals.h" #include "module_hamilt_lcao/module_tddft/upsi.h" +#include "source_base/global_variable.h" // GlobalV::ofs_running #include "tddft_test.h" #include -#include #include +#include #define doublethreshold 1e-8 diff --git a/source/module_hamilt_lcao/module_tddft/test/upsi_test2.cpp b/source/module_hamilt_lcao/module_tddft/test/upsi_test2.cpp index 915b2a248b..a1a41ecbea 100644 --- a/source/module_hamilt_lcao/module_tddft/test/upsi_test2.cpp +++ b/source/module_hamilt_lcao/module_tddft/test/upsi_test2.cpp @@ -1,11 +1,11 @@ -#include "module_base/global_variable.h" // GlobalV::ofs_running #include "module_basis/module_ao/parallel_orbitals.h" #include "module_hamilt_lcao/module_tddft/upsi.h" +#include "source_base/global_variable.h" // GlobalV::ofs_running #include "tddft_test.h" #include -#include #include +#include #define doublethreshold 1e-8 diff --git a/source/module_hamilt_lcao/module_tddft/test/upsi_test3.cpp b/source/module_hamilt_lcao/module_tddft/test/upsi_test3.cpp index cf5e177b13..9707274cd6 100644 --- a/source/module_hamilt_lcao/module_tddft/test/upsi_test3.cpp +++ b/source/module_hamilt_lcao/module_tddft/test/upsi_test3.cpp @@ -1,11 +1,11 @@ -#include "module_base/global_variable.h" // GlobalV::ofs_running #include "module_basis/module_ao/parallel_orbitals.h" #include "module_hamilt_lcao/module_tddft/upsi.h" +#include "source_base/global_variable.h" // GlobalV::ofs_running #include "tddft_test.h" #include -#include #include +#include #define doublethreshold 1e-8 diff --git a/source/module_hamilt_lcao/module_tddft/upsi.cpp b/source/module_hamilt_lcao/module_tddft/upsi.cpp index cc9a2448a8..15d78f19e2 100644 --- a/source/module_hamilt_lcao/module_tddft/upsi.cpp +++ b/source/module_hamilt_lcao/module_tddft/upsi.cpp @@ -1,8 +1,8 @@ #include "upsi.h" -#include "module_base/lapack_connector.h" -#include "module_base/module_container/ATen/kernels/blas.h" -#include "module_base/scalapack_connector.h" +#include "source_base/lapack_connector.h" +#include "source_base/module_container/ATen/kernels/blas.h" +#include "source_base/scalapack_connector.h" #include #include diff --git a/source/module_hamilt_lcao/module_tddft/upsi.h b/source/module_hamilt_lcao/module_tddft/upsi.h index c687a18fed..b124993336 100644 --- a/source/module_hamilt_lcao/module_tddft/upsi.h +++ b/source/module_hamilt_lcao/module_tddft/upsi.h @@ -7,8 +7,8 @@ #ifndef UPSI_H #define UPSI_H -#include "module_base/module_container/ATen/core/tensor.h" // ct::Tensor #include "module_basis/module_ao/parallel_orbitals.h" +#include "source_base/module_container/ATen/core/tensor.h" // ct::Tensor #include diff --git a/source/module_hamilt_pw/hamilt_ofdft/kedf_lkt.cpp b/source/module_hamilt_pw/hamilt_ofdft/kedf_lkt.cpp index 733c10bc4c..77a2a00c56 100644 --- a/source/module_hamilt_pw/hamilt_ofdft/kedf_lkt.cpp +++ b/source/module_hamilt_pw/hamilt_ofdft/kedf_lkt.cpp @@ -1,9 +1,9 @@ #include "./kedf_lkt.h" #include "module_parameter/parameter.h" -#include +#include "source_base/parallel_reduce.h" -#include "module_base/parallel_reduce.h" +#include void KEDF_LKT::set_para(double dV, double lkt_a) { @@ -47,9 +47,10 @@ double KEDF_LKT::get_energy(const double* const* prho, ModulePW::PW_Basis* pw_rh Parallel_Reduce::reduce_all(this->lkt_energy); delete[] as; - for (int i = 0; i < 3; ++i) { + for (int i = 0; i < 3; ++i) + { delete[] nabla_rho[i]; -} + } delete[] nabla_rho; return energy; @@ -80,9 +81,10 @@ double KEDF_LKT::get_energy_density(const double* const* prho, int is, int ir, M energy_den = this->c_tf_ * std::pow(prho[is][ir], 5. / 3.) / std::cosh(as[ir]); delete[] as; - for (int i = 0; i < 3; ++i) { + for (int i = 0; i < 3; ++i) + { delete[] nabla_rho[i]; -} + } delete[] nabla_rho; return energy_den; @@ -114,9 +116,10 @@ void KEDF_LKT::tau_lkt(const double* const* prho, ModulePW::PW_Basis* pw_rho, do } delete[] as; - for (int i = 0; i < 3; ++i) { + for (int i = 0; i < 3; ++i) + { delete[] nabla_rho[i]; -} + } delete[] nabla_rho; } @@ -187,9 +190,10 @@ void KEDF_LKT::lkt_potential(const double* const* prho, ModulePW::PW_Basis* pw_r } delete[] as; - for (int i = 0; i < 3; ++i) { + for (int i = 0; i < 3; ++i) + { delete[] nabla_rho[i]; -} + } delete[] nabla_rho; delete[] nabla_term; @@ -262,9 +266,10 @@ void KEDF_LKT::get_stress(const double* const* prho, ModulePW::PW_Basis* pw_rho) } delete[] as; - for (int i = 0; i < 3; ++i) { + for (int i = 0; i < 3; ++i) + { delete[] nabla_rho[i]; -} + } delete[] nabla_rho; delete[] nabla_term; } diff --git a/source/module_hamilt_pw/hamilt_ofdft/kedf_lkt.h b/source/module_hamilt_pw/hamilt_ofdft/kedf_lkt.h index 6df93bfb33..dcfa5f92c4 100644 --- a/source/module_hamilt_pw/hamilt_ofdft/kedf_lkt.h +++ b/source/module_hamilt_pw/hamilt_ofdft/kedf_lkt.h @@ -1,14 +1,14 @@ #ifndef KEDF_LKT_H #define KEDF_LKT_H +#include "module_basis/module_pw/pw_basis.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" + #include #include -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" -#include "module_basis/module_pw/pw_basis.h" - /** * @brief A class which calculates the kinetic energy, potential, and stress with Luo-Karasiev-Trickey (LKT) KEDF. * See Luo K, Karasiev V V, Trickey S B. Physical Review B, 2018, 98(4): 041111. diff --git a/source/module_hamilt_pw/hamilt_ofdft/kedf_ml.cpp b/source/module_hamilt_pw/hamilt_ofdft/kedf_ml.cpp index e30555f75c..597958d087 100644 --- a/source/module_hamilt_pw/hamilt_ofdft/kedf_ml.cpp +++ b/source/module_hamilt_pw/hamilt_ofdft/kedf_ml.cpp @@ -2,45 +2,43 @@ #include "kedf_ml.h" -#include "npy.hpp" -#include "module_base/parallel_reduce.h" -#include "module_base/global_function.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" - -void KEDF_ML::set_para( - const int nx, - const double dV, - const double nelec, - const double tf_weight, - const double vw_weight, - const double chi_p, - const double chi_q, - const std::vector &chi_xi, - const std::vector &chi_pnl, - const std::vector &chi_qnl, - const int &nkernel, - const std::vector &kernel_type, - const std::vector &kernel_scaling, - const std::vector &yukawa_alpha, - const std::vector &kernel_file, - const bool &of_ml_gamma, - const bool &of_ml_p, - const bool &of_ml_q, - const bool &of_ml_tanhp, - const bool &of_ml_tanhq, - const std::vector &of_ml_gammanl, - const std::vector &of_ml_pnl, - const std::vector &of_ml_qnl, - const std::vector &of_ml_xi, - const std::vector &of_ml_tanhxi, - const std::vector &of_ml_tanhxi_nl, - const std::vector &of_ml_tanh_pnl, - const std::vector &of_ml_tanh_qnl, - const std::vector &of_ml_tanhp_nl, - const std::vector &of_ml_tanhq_nl, - const std::string device_inpt, - ModulePW::PW_Basis *pw_rho -) +#include "npy.hpp" +#include "source_base/global_function.h" +#include "source_base/parallel_reduce.h" + +void KEDF_ML::set_para(const int nx, + const double dV, + const double nelec, + const double tf_weight, + const double vw_weight, + const double chi_p, + const double chi_q, + const std::vector& chi_xi, + const std::vector& chi_pnl, + const std::vector& chi_qnl, + const int& nkernel, + const std::vector& kernel_type, + const std::vector& kernel_scaling, + const std::vector& yukawa_alpha, + const std::vector& kernel_file, + const bool& of_ml_gamma, + const bool& of_ml_p, + const bool& of_ml_q, + const bool& of_ml_tanhp, + const bool& of_ml_tanhq, + const std::vector& of_ml_gammanl, + const std::vector& of_ml_pnl, + const std::vector& of_ml_qnl, + const std::vector& of_ml_xi, + const std::vector& of_ml_tanhxi, + const std::vector& of_ml_tanhxi_nl, + const std::vector& of_ml_tanh_pnl, + const std::vector& of_ml_tanh_qnl, + const std::vector& of_ml_tanhp_nl, + const std::vector& of_ml_tanhq_nl, + const std::string device_inpt, + ModulePW::PW_Basis* pw_rho) { torch::set_default_dtype(caffe2::TypeMeta::fromScalarType(torch::kDouble)); auto output = torch::get_default_dtype(); @@ -53,23 +51,22 @@ void KEDF_ML::set_para( this->dV = dV; this->nkernel = nkernel; - this->init_data( - nkernel, - of_ml_gamma, - of_ml_p, - of_ml_q, - of_ml_tanhp, - of_ml_tanhq, - of_ml_gammanl, - of_ml_pnl, - of_ml_qnl, - of_ml_xi, - of_ml_tanhxi, - of_ml_tanhxi_nl, - of_ml_tanh_pnl, - of_ml_tanh_qnl, - of_ml_tanhp_nl, - of_ml_tanhq_nl); + this->init_data(nkernel, + of_ml_gamma, + of_ml_p, + of_ml_q, + of_ml_tanhp, + of_ml_tanhq, + of_ml_gammanl, + of_ml_pnl, + of_ml_qnl, + of_ml_xi, + of_ml_tanhxi, + of_ml_tanhxi_nl, + of_ml_tanh_pnl, + of_ml_tanh_qnl, + of_ml_tanhp_nl, + of_ml_tanhq_nl); std::cout << "ninput = " << ninput << std::endl; @@ -85,11 +82,15 @@ void KEDF_ML::set_para( torch::Tensor feg_inpt = torch::zeros(this->ninput, this->device_type); for (int i = 0; i < this->ninput; ++i) { - if (this->descriptor_type[i] == "gamma") feg_inpt[i] = 1.; + if (this->descriptor_type[i] == "gamma") + feg_inpt[i] = 1.; } - if (PARAM.inp.of_ml_feg == 1) - this->feg_net_F = torch::softplus(this->nn->forward(feg_inpt)).to(this->device_CPU).contiguous().data_ptr()[0]; + if (PARAM.inp.of_ml_feg == 1) + this->feg_net_F = torch::softplus(this->nn->forward(feg_inpt)) + .to(this->device_CPU) + .contiguous() + .data_ptr()[0]; else { this->feg_net_F = this->nn->forward(feg_inpt).to(this->device_CPU).contiguous().data_ptr()[0]; @@ -97,8 +98,8 @@ void KEDF_ML::set_para( std::cout << "feg_net_F = " << this->feg_net_F << std::endl; } - } - + } + if (PARAM.inp.of_kinetic == "ml" || PARAM.inp.of_ml_gene_data == 1) { this->cal_tool = new ModuleIO::Cal_MLKEDF_Descriptors; @@ -109,32 +110,46 @@ void KEDF_ML::set_para( this->chi_pnl = chi_pnl; this->chi_qnl = chi_qnl; - this->cal_tool->set_para(nx, nelec, tf_weight, vw_weight, chi_p, chi_q, - chi_xi, chi_pnl, chi_qnl, nkernel, kernel_type, kernel_scaling, yukawa_alpha, kernel_file, this->dV * pw_rho->nxyz, pw_rho); + this->cal_tool->set_para(nx, + nelec, + tf_weight, + vw_weight, + chi_p, + chi_q, + chi_xi, + chi_pnl, + chi_qnl, + nkernel, + kernel_type, + kernel_scaling, + yukawa_alpha, + kernel_file, + this->dV * pw_rho->nxyz, + pw_rho); } } /** * @brief Get the energy of ML KEDF * \f[ E_{ML} = c_{TF} * \int{F(\rho) \rho^{5/3} dr} \f] - * + * * @param prho charge density * @param pw_rho PW_Basis * @return the energy of ML KEDF */ -double KEDF_ML::get_energy(const double * const * prho, ModulePW::PW_Basis *pw_rho) +double KEDF_ML::get_energy(const double* const* prho, ModulePW::PW_Basis* pw_rho) { this->updateInput(prho, pw_rho); this->NN_forward(prho, pw_rho, false); - + torch::Tensor enhancement_cpu_tensor = this->nn->F.to(this->device_CPU).contiguous(); this->enhancement_cpu_ptr = enhancement_cpu_tensor.data_ptr(); double energy = 0.; for (int ir = 0; ir < this->nx; ++ir) { - energy += enhancement_cpu_ptr[ir] * std::pow(prho[0][ir], 5./3.); + energy += enhancement_cpu_ptr[ir] * std::pow(prho[0][ir], 5. / 3.); } std::cout << "energy" << energy << std::endl; energy *= this->dV * this->cTF; @@ -145,17 +160,17 @@ double KEDF_ML::get_energy(const double * const * prho, ModulePW::PW_Basis *pw_r /** * @brief Get the potential of ML KEDF, and add it into rpotential - * + * * @param prho charge density * @param pw_rho PW_Basis * @param rpotential rpotential => rpotential + V_{ML} */ -void KEDF_ML::ml_potential(const double * const * prho, ModulePW::PW_Basis *pw_rho, ModuleBase::matrix &rpotential) +void KEDF_ML::ml_potential(const double* const* prho, ModulePW::PW_Basis* pw_rho, ModuleBase::matrix& rpotential) { this->updateInput(prho, pw_rho); this->NN_forward(prho, pw_rho, true); - + torch::Tensor enhancement_cpu_tensor = this->nn->F.to(this->device_CPU).contiguous(); this->enhancement_cpu_ptr = enhancement_cpu_tensor.data_ptr(); torch::Tensor gradient_cpu_tensor = this->nn->inputs.grad().to(this->device_CPU).contiguous(); @@ -168,7 +183,7 @@ void KEDF_ML::ml_potential(const double * const * prho, ModulePW::PW_Basis *pw_r double energy = 0.; for (int ir = 0; ir < this->nx; ++ir) { - energy += enhancement_cpu_ptr[ir] * std::pow(prho[0][ir], 5./3.); + energy += enhancement_cpu_ptr[ir] * std::pow(prho[0][ir], 5. / 3.); } energy *= this->dV * this->cTF; this->ml_energy = energy; @@ -178,14 +193,18 @@ void KEDF_ML::ml_potential(const double * const * prho, ModulePW::PW_Basis *pw_r /** * @brief Generate training data for ML KEDF - * + * * @param prho charge density * @param wt KEDF_WT * @param tf KEDF_TF * @param pw_rho PW_Basis * @param veff effective potential */ -void KEDF_ML::generateTrainData(const double * const *prho, KEDF_WT &wt, KEDF_TF &tf, ModulePW::PW_Basis *pw_rho, const double *veff) +void KEDF_ML::generateTrainData(const double* const* prho, + KEDF_WT& wt, + KEDF_TF& tf, + ModulePW::PW_Basis* pw_rho, + const double* veff) { // this->cal_tool->generateTrainData_WT(prho, wt, tf, pw_rho, veff); // Will be fixed in next pr if (PARAM.inp.of_kinetic == "ml") @@ -193,7 +212,7 @@ void KEDF_ML::generateTrainData(const double * const *prho, KEDF_WT &wt, KEDF_TF this->updateInput(prho, pw_rho); this->NN_forward(prho, pw_rho, true); - + torch::Tensor enhancement_cpu_tensor = this->nn->F.to(this->device_CPU).contiguous(); this->enhancement_cpu_ptr = enhancement_cpu_tensor.data_ptr(); torch::Tensor gradient_cpu_tensor = this->nn->inputs.grad().to(this->device_CPU).contiguous(); @@ -211,24 +230,26 @@ void KEDF_ML::generateTrainData(const double * const *prho, KEDF_WT &wt, KEDF_TF /** * @brief For test - * + * * @param prho charge density * @param pw_rho PW_Basis */ -void KEDF_ML::localTest(const double * const *pprho, ModulePW::PW_Basis *pw_rho) +void KEDF_ML::localTest(const double* const* pprho, ModulePW::PW_Basis* pw_rho) { // for test ===================== - std::vector cshape = {(long unsigned) this->nx}; + std::vector cshape = {(long unsigned)this->nx}; bool fortran_order = false; std::vector temp_prho(this->nx); this->loadVector("dir_of_input_rho", temp_prho); - double ** prho = new double *[1]; + double** prho = new double*[1]; prho[0] = new double[this->nx]; - for (int ir = 0; ir < this->nx; ++ir) prho[0][ir] = temp_prho[ir]; - for (int ir = 0; ir < this->nx; ++ir) + for (int ir = 0; ir < this->nx; ++ir) + prho[0][ir] = temp_prho[ir]; + for (int ir = 0; ir < this->nx; ++ir) { - if (prho[0][ir] == 0.){ + if (prho[0][ir] == 0.) + { std::cout << "WARNING: rho = 0" << std::endl; } }; @@ -237,7 +258,7 @@ void KEDF_ML::localTest(const double * const *pprho, ModulePW::PW_Basis *pw_rho) this->updateInput(prho, pw_rho); this->NN_forward(prho, pw_rho, true); - + torch::Tensor enhancement_cpu_tensor = this->nn->F.to(this->device_CPU).contiguous(); this->enhancement_cpu_ptr = enhancement_cpu_tensor.data_ptr(); torch::Tensor gradient_cpu_tensor = this->nn->inputs.grad().to(this->device_CPU).contiguous(); @@ -255,7 +276,7 @@ void KEDF_ML::localTest(const double * const *pprho, ModulePW::PW_Basis *pw_rho) /** * @brief Set the device for ML KEDF - * + * * @param device_inpt "cpu" or "gpu" */ void KEDF_ML::set_device(std::string device_inpt) @@ -284,12 +305,12 @@ void KEDF_ML::set_device(std::string device_inpt) /** * @brief Interface to Neural Network forward - * + * * @param prho charge density * @param pw_rho PW_Basis * @param cal_grad whether to calculate the gradient */ -void KEDF_ML::NN_forward(const double * const * prho, ModulePW::PW_Basis *pw_rho, bool cal_grad) +void KEDF_ML::NN_forward(const double* const* prho, ModulePW::PW_Basis* pw_rho, bool cal_grad) { ModuleBase::timer::tick("KEDF_ML", "Forward"); @@ -298,10 +319,11 @@ void KEDF_ML::NN_forward(const double * const * prho, ModulePW::PW_Basis *pw_rho this->nn->set_data(this, this->descriptor_type, this->kernel_index, this->nn->inputs); this->nn->inputs.requires_grad_(true); - this->nn->F = this->nn->forward(this->nn->inputs); - if (this->nn->inputs.grad().numel()) + this->nn->F = this->nn->forward(this->nn->inputs); + if (this->nn->inputs.grad().numel()) { - this->nn->inputs.grad().zero_(); // In the first step, inputs.grad() returns an undefined Tensor, so that numel() = 0. + this->nn->inputs.grad() + .zero_(); // In the first step, inputs.grad() returns an undefined Tensor, so that numel() = 0. } if (PARAM.inp.of_ml_feg != 3) @@ -326,26 +348,26 @@ void KEDF_ML::NN_forward(const double * const * prho, ModulePW::PW_Basis *pw_rho } } -void KEDF_ML::loadVector(std::string filename, std::vector &data) +void KEDF_ML::loadVector(std::string filename, std::vector& data) { - std::vector cshape = {(long unsigned) this->cal_tool->nx}; + std::vector cshape = {(long unsigned)this->cal_tool->nx}; bool fortran_order = false; npy::LoadArrayFromNumpy(filename, cshape, fortran_order, data); } -void KEDF_ML::dumpVector(std::string filename, const std::vector &data) +void KEDF_ML::dumpVector(std::string filename, const std::vector& data) { - const long unsigned cshape[] = {(long unsigned) this->cal_tool->nx}; // shape + const long unsigned cshape[] = {(long unsigned)this->cal_tool->nx}; // shape npy::SaveArrayAsNumpy(filename, false, 1, cshape, data); } /** * @brief Dump the torch::Tensor into .npy file - * + * * @param data torch::Tensor * @param filename file name */ -void KEDF_ML::dumpTensor(std::string filename, const torch::Tensor &data) +void KEDF_ML::dumpTensor(std::string filename, const torch::Tensor& data) { std::cout << "Dumping " << filename << std::endl; torch::Tensor data_cpu = data.to(this->device_CPU).contiguous(); @@ -356,11 +378,11 @@ void KEDF_ML::dumpTensor(std::string filename, const torch::Tensor &data) /** * @brief Dump the matrix into .npy file - * + * * @param data matrix * @param filename file name */ -void KEDF_ML::dumpMatrix(std::string filename, const ModuleBase::matrix &data) +void KEDF_ML::dumpMatrix(std::string filename, const ModuleBase::matrix& data) { std::cout << "Dumping " << filename << std::endl; std::vector v(data.c, data.c + this->nx); @@ -370,16 +392,16 @@ void KEDF_ML::dumpMatrix(std::string filename, const ModuleBase::matrix &data) /** * @brief Update the desciptors for ML KEDF - * + * * @param prho charge density * @param pw_rho PW_Basis */ -void KEDF_ML::updateInput(const double * const * prho, ModulePW::PW_Basis *pw_rho) +void KEDF_ML::updateInput(const double* const* prho, ModulePW::PW_Basis* pw_rho) { ModuleBase::timer::tick("KEDF_ML", "updateInput"); // std::cout << "updata_input" << std::endl; if (this->gene_data_label["gamma"][0]) - { + { this->cal_tool->getGamma(prho, this->gamma); } if (this->gene_data_label["p"][0]) @@ -402,34 +424,44 @@ void KEDF_ML::updateInput(const double * const * prho, ModulePW::PW_Basis *pw_rh for (int ik = 0; ik < nkernel; ++ik) { - if (this->gene_data_label["gammanl"][ik]){ + if (this->gene_data_label["gammanl"][ik]) + { this->cal_tool->getGammanl(ik, this->gamma, pw_rho, this->gammanl[ik]); } - if (this->gene_data_label["pnl"][ik]){ + if (this->gene_data_label["pnl"][ik]) + { this->cal_tool->getPnl(ik, this->p, pw_rho, this->pnl[ik]); } - if (this->gene_data_label["qnl"][ik]){ + if (this->gene_data_label["qnl"][ik]) + { this->cal_tool->getQnl(ik, this->q, pw_rho, this->qnl[ik]); } - if (this->gene_data_label["xi"][ik]){ + if (this->gene_data_label["xi"][ik]) + { this->cal_tool->getXi(this->gamma, this->gammanl[ik], this->xi[ik]); } - if (this->gene_data_label["tanhxi"][ik]){ + if (this->gene_data_label["tanhxi"][ik]) + { this->cal_tool->getTanhXi(ik, this->gamma, this->gammanl[ik], this->tanhxi[ik]); } - if (this->gene_data_label["tanhxi_nl"][ik]){ + if (this->gene_data_label["tanhxi_nl"][ik]) + { this->cal_tool->getTanhXi_nl(ik, this->tanhxi[ik], pw_rho, this->tanhxi_nl[ik]); } - if (this->gene_data_label["tanh_pnl"][ik]){ + if (this->gene_data_label["tanh_pnl"][ik]) + { this->cal_tool->getTanh_Pnl(ik, this->pnl[ik], this->tanh_pnl[ik]); } - if (this->gene_data_label["tanh_qnl"][ik]){ + if (this->gene_data_label["tanh_qnl"][ik]) + { this->cal_tool->getTanh_Qnl(ik, this->qnl[ik], this->tanh_qnl[ik]); } - if (this->gene_data_label["tanhp_nl"][ik]){ + if (this->gene_data_label["tanhp_nl"][ik]) + { this->cal_tool->getTanhP_nl(ik, this->tanhp, pw_rho, this->tanhp_nl[ik]); } - if (this->gene_data_label["tanhq_nl"][ik]){ + if (this->gene_data_label["tanhq_nl"][ik]) + { this->cal_tool->getTanhQ_nl(ik, this->tanhq, pw_rho, this->tanhq_nl[ik]); } } @@ -438,11 +470,13 @@ void KEDF_ML::updateInput(const double * const * prho, ModulePW::PW_Basis *pw_rh /** * @brief Return the descriptors for ML KEDF - * - * @param parameter "gamma", "p", "q", "tanhp", "tanhq", "gammanl", "pnl", "qnl", "xi", "tanhxi", "tanhxi_nl", "tanh_pnl", "tanh_qnl", "tanhp_nl", "tanhq_nl" + * + * @param parameter "gamma", "p", "q", "tanhp", "tanhq", "gammanl", "pnl", "qnl", "xi", "tanhxi", "tanhxi_nl", + * "tanh_pnl", "tanh_qnl", "tanhp_nl", "tanhq_nl" * @param ikernel kernel index */ -torch::Tensor KEDF_ML::get_data(std::string parameter, const int ikernel){ +torch::Tensor KEDF_ML::get_data(std::string parameter, const int ikernel) +{ if (parameter == "gamma") { diff --git a/source/module_hamilt_pw/hamilt_ofdft/kedf_ml_pot.cpp b/source/module_hamilt_pw/hamilt_ofdft/kedf_ml_pot.cpp index 40d25a36a2..5f23f518df 100644 --- a/source/module_hamilt_pw/hamilt_ofdft/kedf_ml_pot.cpp +++ b/source/module_hamilt_pw/hamilt_ofdft/kedf_ml_pot.cpp @@ -1,79 +1,92 @@ #ifdef __MLALGO #include "kedf_ml.h" - -#include "module_base/parallel_reduce.h" -#include "module_base/global_function.h" +#include "source_base/global_function.h" +#include "source_base/parallel_reduce.h" /** * @brief Calculate the Pauli potential of ML KEDF - * + * * @param prho charge density * @param pw_rho PW_Basis * @param rpotential rpotential => rpotential + V_{ML} */ -void KEDF_ML::get_potential_(const double * const * prho, ModulePW::PW_Basis *pw_rho, ModuleBase::matrix &rpotential) +void KEDF_ML::get_potential_(const double* const* prho, ModulePW::PW_Basis* pw_rho, ModuleBase::matrix& rpotential) { // get potential ModuleBase::timer::tick("KEDF_ML", "Pauli Potential"); std::vector pauli_potential(this->nx, 0.); - if (this->ml_gammanl){ + if (this->ml_gammanl) + { this->potGammanlTerm(prho, pw_rho, pauli_potential); } - if (this->ml_xi){ + if (this->ml_xi) + { this->potXinlTerm(prho, pw_rho, pauli_potential); } - if (this->ml_tanhxi){ + if (this->ml_tanhxi) + { this->potTanhxinlTerm(prho, pw_rho, pauli_potential); } - if (this->ml_tanhxi_nl){ + if (this->ml_tanhxi_nl) + { this->potTanhxi_nlTerm(prho, pw_rho, pauli_potential); } - if (this->ml_p || this->ml_pnl){ + if (this->ml_p || this->ml_pnl) + { this->potPPnlTerm(prho, pw_rho, pauli_potential); } - if (this->ml_q || this->ml_qnl){ + if (this->ml_q || this->ml_qnl) + { this->potQQnlTerm(prho, pw_rho, pauli_potential); } - if (this->ml_tanh_pnl){ + if (this->ml_tanh_pnl) + { this->potTanhpTanh_pnlTerm(prho, pw_rho, pauli_potential); } - if (this->ml_tanh_qnl){ + if (this->ml_tanh_qnl) + { this->potTanhqTanh_qnlTerm(prho, pw_rho, pauli_potential); } - if ((this->ml_tanhp || this->ml_tanhp_nl) && !this->ml_tanh_pnl){ + if ((this->ml_tanhp || this->ml_tanhp_nl) && !this->ml_tanh_pnl) + { this->potTanhpTanhp_nlTerm(prho, pw_rho, pauli_potential); } - if ((this->ml_tanhq || this->ml_tanhq_nl) && !this->ml_tanh_qnl){ + if ((this->ml_tanhq || this->ml_tanhq_nl) && !this->ml_tanh_qnl) + { this->potTanhqTanhq_nlTerm(prho, pw_rho, pauli_potential); } for (int ir = 0; ir < this->nx; ++ir) { - pauli_potential[ir] += this->cTF * std::pow(prho[0][ir], 5./3.) / prho[0][ir] * - (5./3. * this->enhancement_cpu_ptr[ir] + this->potGammaTerm(ir) + this->potPTerm1(ir) + this->potQTerm1(ir) - + this->potXiTerm1(ir) + this->potTanhxiTerm1(ir) + this->potTanhpTerm1(ir) + this->potTanhqTerm1(ir)); + pauli_potential[ir] += this->cTF * std::pow(prho[0][ir], 5. / 3.) / prho[0][ir] + * (5. / 3. * this->enhancement_cpu_ptr[ir] + this->potGammaTerm(ir) + this->potPTerm1(ir) + + this->potQTerm1(ir) + this->potXiTerm1(ir) + this->potTanhxiTerm1(ir) + + this->potTanhpTerm1(ir) + this->potTanhqTerm1(ir)); rpotential(0, ir) += pauli_potential[ir]; } ModuleBase::timer::tick("KEDF_ML", "Pauli Potential"); } - double KEDF_ML::potGammaTerm(int ir) { - return (this->ml_gamma) ? 1./3. * gamma[ir] * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["gamma"][0]] : 0.; + return (this->ml_gamma) + ? 1. / 3. * gamma[ir] * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["gamma"][0]] + : 0.; } double KEDF_ML::potPTerm1(int ir) { - return (this->ml_p) ? - 8./3. * p[ir] * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["p"][0]] : 0.; + return (this->ml_p) ? -8. / 3. * p[ir] * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["p"][0]] + : 0.; } double KEDF_ML::potQTerm1(int ir) { - return (this->ml_q) ? - 5./3. * q[ir] * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["q"][0]] : 0.; + return (this->ml_q) ? -5. / 3. * q[ir] * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["q"][0]] + : 0.; } double KEDF_ML::potXiTerm1(int ir) @@ -83,7 +96,7 @@ double KEDF_ML::potXiTerm1(int ir) { int d2k = this->descriptor2kernel["xi"][ik]; int d2i = this->descriptor2index["xi"][ik]; - result += -1./3. * xi[d2k][ir] * this->gradient_cpu_ptr[ir * this->ninput + d2i]; + result += -1. / 3. * xi[d2k][ir] * this->gradient_cpu_ptr[ir * this->ninput + d2i]; } return result; } @@ -95,89 +108,95 @@ double KEDF_ML::potTanhxiTerm1(int ir) { int d2k = this->descriptor2kernel["tanhxi"][ik]; int d2i = this->descriptor2index["tanhxi"][ik]; - result += -1./3. * xi[d2k][ir] * this->cal_tool->dtanh(this->tanhxi[d2k][ir], this->chi_xi[d2k]) - * this->gradient_cpu_ptr[ir * this->ninput + d2i]; + result += -1. / 3. * xi[d2k][ir] * this->cal_tool->dtanh(this->tanhxi[d2k][ir], this->chi_xi[d2k]) + * this->gradient_cpu_ptr[ir * this->ninput + d2i]; } return result; } double KEDF_ML::potTanhpTerm1(int ir) { - return (this->ml_tanhp) ? - 8./3. * p[ir] * this->cal_tool->dtanh(this->tanhp[ir], this->chi_p) - * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["tanhp"][0]] : 0.; + return (this->ml_tanhp) ? -8. / 3. * p[ir] * this->cal_tool->dtanh(this->tanhp[ir], this->chi_p) + * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["tanhp"][0]] + : 0.; } double KEDF_ML::potTanhqTerm1(int ir) { - return (this->ml_tanhq) ? - 5./3. * q[ir] * this->cal_tool->dtanh(this->tanhq[ir], this->chi_q) - * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["tanhq"][0]] : 0.; + return (this->ml_tanhq) ? -5. / 3. * q[ir] * this->cal_tool->dtanh(this->tanhq[ir], this->chi_q) + * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["tanhq"][0]] + : 0.; } -void KEDF_ML::potGammanlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho, std::vector &rGammanlTerm) +void KEDF_ML::potGammanlTerm(const double* const* prho, ModulePW::PW_Basis* pw_rho, std::vector& rGammanlTerm) { - double *dFdgammanl = new double[this->nx]; + double* dFdgammanl = new double[this->nx]; for (int ik = 0; ik < this->descriptor2kernel["gammanl"].size(); ++ik) { int d2k = this->descriptor2kernel["gammanl"][ik]; int d2i = this->descriptor2index["gammanl"][ik]; for (int ir = 0; ir < this->nx; ++ir) { - dFdgammanl[ir] = this->cTF * std::pow(prho[0][ir], 5./3.) * this->gradient_cpu_ptr[ir * this->ninput + d2i]; + dFdgammanl[ir] + = this->cTF * std::pow(prho[0][ir], 5. / 3.) * this->gradient_cpu_ptr[ir * this->ninput + d2i]; } this->cal_tool->multiKernel(d2k, dFdgammanl, pw_rho, dFdgammanl); for (int ir = 0; ir < this->nx; ++ir) { - rGammanlTerm[ir] += 1./3. * this->gamma[ir] / prho[0][ir] * dFdgammanl[ir]; + rGammanlTerm[ir] += 1. / 3. * this->gamma[ir] / prho[0][ir] * dFdgammanl[ir]; } } delete[] dFdgammanl; } -void KEDF_ML::potXinlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho, std::vector &rXinlTerm) +void KEDF_ML::potXinlTerm(const double* const* prho, ModulePW::PW_Basis* pw_rho, std::vector& rXinlTerm) { - double *dFdxi = new double[this->nx]; + double* dFdxi = new double[this->nx]; for (int ik = 0; ik < this->descriptor2kernel["xi"].size(); ++ik) { int d2k = this->descriptor2kernel["xi"][ik]; int d2i = this->descriptor2index["xi"][ik]; for (int ir = 0; ir < this->nx; ++ir) { - dFdxi[ir] = this->cTF * std::pow(prho[0][ir], 4./3.) * this->gradient_cpu_ptr[ir * this->ninput + d2i]; + dFdxi[ir] = this->cTF * std::pow(prho[0][ir], 4. / 3.) * this->gradient_cpu_ptr[ir * this->ninput + d2i]; } this->cal_tool->multiKernel(d2k, dFdxi, pw_rho, dFdxi); for (int ir = 0; ir < this->nx; ++ir) { - rXinlTerm[ir] += 1./3. * std::pow(prho[0][ir], -2./3.) * dFdxi[ir]; + rXinlTerm[ir] += 1. / 3. * std::pow(prho[0][ir], -2. / 3.) * dFdxi[ir]; } } delete[] dFdxi; } -void KEDF_ML::potTanhxinlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho, std::vector &rTanhxinlTerm) +void KEDF_ML::potTanhxinlTerm(const double* const* prho, ModulePW::PW_Basis* pw_rho, std::vector& rTanhxinlTerm) { - double *dFdtanhxi = new double[this->nx]; + double* dFdtanhxi = new double[this->nx]; for (int ik = 0; ik < this->descriptor2kernel["tanhxi"].size(); ++ik) { int d2k = this->descriptor2kernel["tanhxi"][ik]; int d2i = this->descriptor2index["tanhxi"][ik]; for (int ir = 0; ir < this->nx; ++ir) { - dFdtanhxi[ir] = this->cTF * std::pow(prho[0][ir], 4./3.) * this->cal_tool->dtanh(this->tanhxi[d2k][ir], this->chi_xi[d2k]) - * this->gradient_cpu_ptr[ir * this->ninput + d2i]; + dFdtanhxi[ir] = this->cTF * std::pow(prho[0][ir], 4. / 3.) + * this->cal_tool->dtanh(this->tanhxi[d2k][ir], this->chi_xi[d2k]) + * this->gradient_cpu_ptr[ir * this->ninput + d2i]; } this->cal_tool->multiKernel(d2k, dFdtanhxi, pw_rho, dFdtanhxi); for (int ir = 0; ir < this->nx; ++ir) { - rTanhxinlTerm[ir] += 1./3. * std::pow(prho[0][ir], -2./3.) * dFdtanhxi[ir]; + rTanhxinlTerm[ir] += 1. / 3. * std::pow(prho[0][ir], -2. / 3.) * dFdtanhxi[ir]; } } delete[] dFdtanhxi; } -void KEDF_ML::potTanhxi_nlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho, std::vector &rTanhxi_nlTerm) +void KEDF_ML::potTanhxi_nlTerm(const double* const* prho, + ModulePW::PW_Basis* pw_rho, + std::vector& rTanhxi_nlTerm) { - double *dFdtanhxi_nl = new double[this->nx]; - double *dFdtanhxi_nl_nl = new double[this->nx]; + double* dFdtanhxi_nl = new double[this->nx]; + double* dFdtanhxi_nl_nl = new double[this->nx]; std::vector result(this->nx, 0.); for (int ik = 0; ik < this->descriptor2kernel["tanhxi_nl"].size(); ++ik) { @@ -185,12 +204,14 @@ void KEDF_ML::potTanhxi_nlTerm(const double * const *prho, ModulePW::PW_Basis *p int d2i = this->descriptor2index["tanhxi_nl"][ik]; for (int ir = 0; ir < this->nx; ++ir) { - dFdtanhxi_nl[ir] = this->cTF * std::pow(prho[0][ir], 5./3.) * this->gradient_cpu_ptr[ir * this->ninput + d2i]; + dFdtanhxi_nl[ir] + = this->cTF * std::pow(prho[0][ir], 5. / 3.) * this->gradient_cpu_ptr[ir * this->ninput + d2i]; } this->cal_tool->multiKernel(d2k, dFdtanhxi_nl, pw_rho, dFdtanhxi_nl); for (int ir = 0; ir < this->nx; ++ir) { - dFdtanhxi_nl[ir] *= this->cal_tool->dtanh(this->tanhxi[d2k][ir], this->chi_xi[d2k]) / std::pow(prho[0][ir], 1./3.); + dFdtanhxi_nl[ir] + *= this->cal_tool->dtanh(this->tanhxi[d2k][ir], this->chi_xi[d2k]) / std::pow(prho[0][ir], 1. / 3.); } this->cal_tool->multiKernel(d2k, dFdtanhxi_nl, pw_rho, dFdtanhxi_nl_nl); for (int ir = 0; ir < this->nx; ++ir) @@ -200,16 +221,16 @@ void KEDF_ML::potTanhxi_nlTerm(const double * const *prho, ModulePW::PW_Basis *p } for (int ir = 0; ir < this->nx; ++ir) { - rTanhxi_nlTerm[ir] += result[ir] * 1./3. * std::pow(prho[0][ir], -2./3.); + rTanhxi_nlTerm[ir] += result[ir] * 1. / 3. * std::pow(prho[0][ir], -2. / 3.); } delete[] dFdtanhxi_nl; delete[] dFdtanhxi_nl_nl; } // get contribution of p and pnl -void KEDF_ML::potPPnlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho, std::vector &rPPnlTerm) +void KEDF_ML::potPPnlTerm(const double* const* prho, ModulePW::PW_Basis* pw_rho, std::vector& rPPnlTerm) { - double *dFdpnl = new double[this->nx]; + double* dFdpnl = new double[this->nx]; std::vector dFdpnl_tot(this->nx, 0.); std::vector result(this->nx, 0.); for (int ik = 0; ik < this->descriptor2index["pnl"].size(); ++ik) @@ -219,7 +240,7 @@ void KEDF_ML::potPPnlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho for (int ir = 0; ir < this->nx; ++ir) { - dFdpnl[ir] = this->cTF * std::pow(prho[0][ir], 5./3.) * this->gradient_cpu_ptr[ir * this->ninput + d2i]; + dFdpnl[ir] = this->cTF * std::pow(prho[0][ir], 5. / 3.) * this->gradient_cpu_ptr[ir * this->ninput + d2i]; } this->cal_tool->multiKernel(d2k, dFdpnl, pw_rho, dFdpnl); for (int ir = 0; ir < this->nx; ++ir) @@ -229,16 +250,20 @@ void KEDF_ML::potPPnlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho } delete[] dFdpnl; - double ** tempP = new double*[3]; + double** tempP = new double*[3]; for (int i = 0; i < 3; ++i) { tempP[i] = new double[this->nx]; for (int ir = 0; ir < this->nx; ++ir) { - tempP[i][ir] = (this->ml_p)? - 3./20. * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["p"][0]] * nablaRho[i][ir] / prho[0][ir] * /*Ha2Ry*/ 2. : 0.; + tempP[i][ir] = (this->ml_p) + ? -3. / 20. * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["p"][0]] + * nablaRho[i][ir] / prho[0][ir] * /*Ha2Ry*/ 2. + : 0.; if (this->ml_pnl) { - tempP[i][ir] += - this->pqcoef * 2. * this->nablaRho[i][ir] / std::pow(prho[0][ir], 8./3.) * dFdpnl_tot[ir]; + tempP[i][ir] + += -this->pqcoef * 2. * this->nablaRho[i][ir] / std::pow(prho[0][ir], 8. / 3.) * dFdpnl_tot[ir]; } } } @@ -248,7 +273,7 @@ void KEDF_ML::potPPnlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho { for (int ir = 0; ir < this->nx; ++ir) { - result[ir] += -8./3. * this->p[ir]/prho[0][ir] * dFdpnl_tot[ir]; + result[ir] += -8. / 3. * this->p[ir] / prho[0][ir] * dFdpnl_tot[ir]; } } @@ -258,15 +283,15 @@ void KEDF_ML::potPPnlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho } for (int i = 0; i < 3; ++i) - { + { delete[] tempP[i]; } delete[] tempP; } -void KEDF_ML::potQQnlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho, std::vector &rQQnlTerm) +void KEDF_ML::potQQnlTerm(const double* const* prho, ModulePW::PW_Basis* pw_rho, std::vector& rQQnlTerm) { - double *dFdqnl = new double[this->nx]; + double* dFdqnl = new double[this->nx]; std::vector dFdqnl_tot(this->nx, 0.); std::vector result(this->nx, 0.); for (int ik = 0; ik < this->descriptor2index["qnl"].size(); ++ik) @@ -276,7 +301,7 @@ void KEDF_ML::potQQnlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho for (int ir = 0; ir < this->nx; ++ir) { - dFdqnl[ir] = this->cTF * std::pow(prho[0][ir], 5./3.) * this->gradient_cpu_ptr[ir * this->ninput + d2i]; + dFdqnl[ir] = this->cTF * std::pow(prho[0][ir], 5. / 3.) * this->gradient_cpu_ptr[ir * this->ninput + d2i]; } this->cal_tool->multiKernel(d2k, dFdqnl, pw_rho, dFdqnl); for (int ir = 0; ir < this->nx; ++ir) @@ -286,13 +311,15 @@ void KEDF_ML::potQQnlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho } delete[] dFdqnl; - double * tempQ = new double[this->nx]; + double* tempQ = new double[this->nx]; for (int ir = 0; ir < this->nx; ++ir) { - tempQ[ir] = (this->ml_q)? 3./40. * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["q"][0]] * /*Ha2Ry*/ 2. : 0.; + tempQ[ir] = (this->ml_q) ? 3. / 40. * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["q"][0]] + * /*Ha2Ry*/ 2. + : 0.; if (this->ml_qnl) { - tempQ[ir] += this->pqcoef / std::pow(prho[0][ir], 5./3.) * dFdqnl_tot[ir]; + tempQ[ir] += this->pqcoef / std::pow(prho[0][ir], 5. / 3.) * dFdqnl_tot[ir]; } } this->cal_tool->Laplacian(tempQ, pw_rho, result.data()); @@ -301,7 +328,7 @@ void KEDF_ML::potQQnlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho { for (int ir = 0; ir < this->nx; ++ir) { - result[ir] += -5./3. * this->q[ir] / prho[0][ir] * dFdqnl_tot[ir]; + result[ir] += -5. / 3. * this->q[ir] / prho[0][ir] * dFdqnl_tot[ir]; } } @@ -312,10 +339,12 @@ void KEDF_ML::potQQnlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho delete[] tempQ; } -void KEDF_ML::potTanhpTanh_pnlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho, std::vector &rTanhpTanh_pnlTerm) +void KEDF_ML::potTanhpTanh_pnlTerm(const double* const* prho, + ModulePW::PW_Basis* pw_rho, + std::vector& rTanhpTanh_pnlTerm) { // Note we assume that tanhp_nl and tanh_pnl will NOT be used together. - double *dFdpnl = new double[this->nx]; + double* dFdpnl = new double[this->nx]; std::vector dFdpnl_tot(this->nx, 0.); std::vector result(this->nx, 0.); for (int ik = 0; ik < this->descriptor2kernel["tanh_pnl"].size(); ++ik) @@ -325,7 +354,8 @@ void KEDF_ML::potTanhpTanh_pnlTerm(const double * const *prho, ModulePW::PW_Basi for (int ir = 0; ir < this->nx; ++ir) { - dFdpnl[ir] = this->cTF * std::pow(prho[0][ir], 5./3.) * this->cal_tool->dtanh(this->tanh_pnl[d2k][ir], this->chi_pnl[d2k]) + dFdpnl[ir] = this->cTF * std::pow(prho[0][ir], 5. / 3.) + * this->cal_tool->dtanh(this->tanh_pnl[d2k][ir], this->chi_pnl[d2k]) * this->gradient_cpu_ptr[ir * this->ninput + d2i]; } this->cal_tool->multiKernel(d2k, dFdpnl, pw_rho, dFdpnl); @@ -336,17 +366,21 @@ void KEDF_ML::potTanhpTanh_pnlTerm(const double * const *prho, ModulePW::PW_Basi } delete[] dFdpnl; - double ** tempP = new double*[3]; + double** tempP = new double*[3]; for (int i = 0; i < 3; ++i) { tempP[i] = new double[this->nx]; for (int ir = 0; ir < this->nx; ++ir) { - tempP[i][ir] = (this->ml_tanhp)? - 3./20. * this->cal_tool->dtanh(this->tanhp[ir], this->chi_p) - * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["tanhp"][0]] * nablaRho[i][ir] / prho[0][ir] * /*Ha2Ry*/ 2. : 0.; + tempP[i][ir] = (this->ml_tanhp) + ? -3. / 20. * this->cal_tool->dtanh(this->tanhp[ir], this->chi_p) + * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["tanhp"][0]] + * nablaRho[i][ir] / prho[0][ir] * /*Ha2Ry*/ 2. + : 0.; if (this->ml_tanh_pnl) { - tempP[i][ir] += - this->pqcoef * 2. * this->nablaRho[i][ir] / std::pow(prho[0][ir], 8./3.) * dFdpnl_tot[ir]; + tempP[i][ir] + += -this->pqcoef * 2. * this->nablaRho[i][ir] / std::pow(prho[0][ir], 8. / 3.) * dFdpnl_tot[ir]; } } } @@ -356,7 +390,7 @@ void KEDF_ML::potTanhpTanh_pnlTerm(const double * const *prho, ModulePW::PW_Basi { for (int ir = 0; ir < this->nx; ++ir) { - result[ir] += -8./3. * this->p[ir]/prho[0][ir] * dFdpnl_tot[ir]; + result[ir] += -8. / 3. * this->p[ir] / prho[0][ir] * dFdpnl_tot[ir]; } } @@ -364,17 +398,19 @@ void KEDF_ML::potTanhpTanh_pnlTerm(const double * const *prho, ModulePW::PW_Basi { rTanhpTanh_pnlTerm[ir] += result[ir]; } - for (int i = 0; i < 3; ++i) - { + for (int i = 0; i < 3; ++i) + { delete[] tempP[i]; } delete[] tempP; } -void KEDF_ML::potTanhqTanh_qnlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho, std::vector &rTanhqTanh_qnlTerm) +void KEDF_ML::potTanhqTanh_qnlTerm(const double* const* prho, + ModulePW::PW_Basis* pw_rho, + std::vector& rTanhqTanh_qnlTerm) { // Note we assume that tanhq_nl and tanh_qnl will NOT be used together. - double *dFdqnl = new double[this->nx]; + double* dFdqnl = new double[this->nx]; std::vector dFdqnl_tot(this->nx, 0.); std::vector result(this->nx, 0.); for (int ik = 0; ik < this->descriptor2kernel["tanh_qnl"].size(); ++ik) @@ -384,7 +420,8 @@ void KEDF_ML::potTanhqTanh_qnlTerm(const double * const *prho, ModulePW::PW_Basi for (int ir = 0; ir < this->nx; ++ir) { - dFdqnl[ir] = this->cTF * std::pow(prho[0][ir], 5./3.) * this->cal_tool->dtanh(this->tanh_qnl[d2k][ir], this->chi_qnl[d2k]) + dFdqnl[ir] = this->cTF * std::pow(prho[0][ir], 5. / 3.) + * this->cal_tool->dtanh(this->tanh_qnl[d2k][ir], this->chi_qnl[d2k]) * this->gradient_cpu_ptr[ir * this->ninput + d2i]; } this->cal_tool->multiKernel(d2k, dFdqnl, pw_rho, dFdqnl); @@ -395,14 +432,17 @@ void KEDF_ML::potTanhqTanh_qnlTerm(const double * const *prho, ModulePW::PW_Basi } delete[] dFdqnl; - double * tempQ = new double[this->nx]; + double* tempQ = new double[this->nx]; for (int ir = 0; ir < this->nx; ++ir) { - tempQ[ir] = (this->ml_tanhq)? 3./40. * this->cal_tool->dtanh(this->tanhq[ir], this->chi_q) - * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["tanhq"][0]] * /*Ha2Ry*/ 2. : 0.; + tempQ[ir] = (this->ml_tanhq) + ? 3. / 40. * this->cal_tool->dtanh(this->tanhq[ir], this->chi_q) + * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["tanhq"][0]] + * /*Ha2Ry*/ 2. + : 0.; if (this->ml_tanh_qnl) { - tempQ[ir] += this->pqcoef / std::pow(prho[0][ir], 5./3.) * dFdqnl_tot[ir]; + tempQ[ir] += this->pqcoef / std::pow(prho[0][ir], 5. / 3.) * dFdqnl_tot[ir]; } } this->cal_tool->Laplacian(tempQ, pw_rho, result.data()); @@ -411,7 +451,7 @@ void KEDF_ML::potTanhqTanh_qnlTerm(const double * const *prho, ModulePW::PW_Basi { for (int ir = 0; ir < this->nx; ++ir) { - result[ir] += -5./3. * this->q[ir] / prho[0][ir] * dFdqnl_tot[ir]; + result[ir] += -5. / 3. * this->q[ir] / prho[0][ir] * dFdqnl_tot[ir]; } } @@ -423,9 +463,11 @@ void KEDF_ML::potTanhqTanh_qnlTerm(const double * const *prho, ModulePW::PW_Basi } // Note we assume that tanhp_nl and tanh_pnl will NOT be used together. -void KEDF_ML::potTanhpTanhp_nlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho, std::vector &rTanhpTanhp_nlTerm) +void KEDF_ML::potTanhpTanhp_nlTerm(const double* const* prho, + ModulePW::PW_Basis* pw_rho, + std::vector& rTanhpTanhp_nlTerm) { - double *dFdpnl = new double[this->nx]; + double* dFdpnl = new double[this->nx]; std::vector dFdpnl_tot(this->nx, 0.); std::vector result(this->nx, 0.); for (int ik = 0; ik < this->descriptor2kernel["tanhp_nl"].size(); ++ik) @@ -435,8 +477,7 @@ void KEDF_ML::potTanhpTanhp_nlTerm(const double * const *prho, ModulePW::PW_Basi for (int ir = 0; ir < this->nx; ++ir) { - dFdpnl[ir] = this->cTF * std::pow(prho[0][ir], 5./3.) - * this->gradient_cpu_ptr[ir * this->ninput + d2i]; + dFdpnl[ir] = this->cTF * std::pow(prho[0][ir], 5. / 3.) * this->gradient_cpu_ptr[ir * this->ninput + d2i]; } this->cal_tool->multiKernel(d2k, dFdpnl, pw_rho, dFdpnl); for (int ir = 0; ir < this->nx; ++ir) @@ -446,17 +487,21 @@ void KEDF_ML::potTanhpTanhp_nlTerm(const double * const *prho, ModulePW::PW_Basi } delete[] dFdpnl; - double ** tempP = new double*[3]; + double** tempP = new double*[3]; for (int i = 0; i < 3; ++i) { tempP[i] = new double[this->nx]; for (int ir = 0; ir < this->nx; ++ir) { - tempP[i][ir] = (this->ml_tanhp)? - 3./20. * this->cal_tool->dtanh(this->tanhp[ir], this->chi_p) - * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["tanhp"][0]] * nablaRho[i][ir] / prho[0][ir] * /*Ha2Ry*/ 2. : 0.; + tempP[i][ir] = (this->ml_tanhp) + ? -3. / 20. * this->cal_tool->dtanh(this->tanhp[ir], this->chi_p) + * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["tanhp"][0]] + * nablaRho[i][ir] / prho[0][ir] * /*Ha2Ry*/ 2. + : 0.; if (this->ml_tanhp_nl) { - tempP[i][ir] += - this->pqcoef * 2. * this->nablaRho[i][ir] / std::pow(prho[0][ir], 8./3.) * dFdpnl_tot[ir]; + tempP[i][ir] + += -this->pqcoef * 2. * this->nablaRho[i][ir] / std::pow(prho[0][ir], 8. / 3.) * dFdpnl_tot[ir]; } } } @@ -466,7 +511,7 @@ void KEDF_ML::potTanhpTanhp_nlTerm(const double * const *prho, ModulePW::PW_Basi { for (int ir = 0; ir < this->nx; ++ir) { - result[ir] += -8./3. * this->p[ir]/prho[0][ir] * dFdpnl_tot[ir]; + result[ir] += -8. / 3. * this->p[ir] / prho[0][ir] * dFdpnl_tot[ir]; } } @@ -474,16 +519,18 @@ void KEDF_ML::potTanhpTanhp_nlTerm(const double * const *prho, ModulePW::PW_Basi { rTanhpTanhp_nlTerm[ir] += result[ir]; } - for (int i = 0; i < 3; ++i) - { + for (int i = 0; i < 3; ++i) + { delete[] tempP[i]; } delete[] tempP; } -void KEDF_ML::potTanhqTanhq_nlTerm(const double * const *prho, ModulePW::PW_Basis *pw_rho, std::vector &rTanhqTanhq_nlTerm) +void KEDF_ML::potTanhqTanhq_nlTerm(const double* const* prho, + ModulePW::PW_Basis* pw_rho, + std::vector& rTanhqTanhq_nlTerm) { - double *dFdqnl = new double[this->nx]; + double* dFdqnl = new double[this->nx]; std::vector dFdqnl_tot(this->nx, 0.); std::vector result(this->nx, 0.); for (int ik = 0; ik < this->descriptor2kernel["tanhq_nl"].size(); ++ik) @@ -493,8 +540,7 @@ void KEDF_ML::potTanhqTanhq_nlTerm(const double * const *prho, ModulePW::PW_Basi for (int ir = 0; ir < this->nx; ++ir) { - dFdqnl[ir] = this->cTF * std::pow(prho[0][ir], 5./3.) - * this->gradient_cpu_ptr[ir * this->ninput + d2i]; + dFdqnl[ir] = this->cTF * std::pow(prho[0][ir], 5. / 3.) * this->gradient_cpu_ptr[ir * this->ninput + d2i]; } this->cal_tool->multiKernel(d2k, dFdqnl, pw_rho, dFdqnl); for (int ir = 0; ir < this->nx; ++ir) @@ -504,15 +550,18 @@ void KEDF_ML::potTanhqTanhq_nlTerm(const double * const *prho, ModulePW::PW_Basi } delete[] dFdqnl; - double * tempQ = new double[this->nx]; + double* tempQ = new double[this->nx]; for (int ir = 0; ir < this->nx; ++ir) { - tempQ[ir] = (this->ml_tanhq)? 3./40. * this->cal_tool->dtanh(this->tanhq[ir], this->chi_q) - * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["tanhq"][0]] * /*Ha2Ry*/ 2. : 0.; + tempQ[ir] = (this->ml_tanhq) + ? 3. / 40. * this->cal_tool->dtanh(this->tanhq[ir], this->chi_q) + * this->gradient_cpu_ptr[ir * this->ninput + this->descriptor2index["tanhq"][0]] + * /*Ha2Ry*/ 2. + : 0.; if (this->ml_tanhq_nl) { dFdqnl_tot[ir] *= this->cal_tool->dtanh(this->tanhq[ir], this->chi_q); - tempQ[ir] += this->pqcoef / std::pow(prho[0][ir], 5./3.) * dFdqnl_tot[ir]; + tempQ[ir] += this->pqcoef / std::pow(prho[0][ir], 5. / 3.) * dFdqnl_tot[ir]; } } this->cal_tool->Laplacian(tempQ, pw_rho, result.data()); @@ -521,7 +570,7 @@ void KEDF_ML::potTanhqTanhq_nlTerm(const double * const *prho, ModulePW::PW_Basi { for (int ir = 0; ir < this->nx; ++ir) { - result[ir] += -5./3. * this->q[ir] / prho[0][ir] * dFdqnl_tot[ir]; + result[ir] += -5. / 3. * this->q[ir] / prho[0][ir] * dFdqnl_tot[ir]; } } diff --git a/source/module_hamilt_pw/hamilt_ofdft/kedf_tf.cpp b/source/module_hamilt_pw/hamilt_ofdft/kedf_tf.cpp index 97c0f65f2f..f0ca8a689c 100644 --- a/source/module_hamilt_pw/hamilt_ofdft/kedf_tf.cpp +++ b/source/module_hamilt_pw/hamilt_ofdft/kedf_tf.cpp @@ -1,9 +1,9 @@ #include "./kedf_tf.h" #include "module_parameter/parameter.h" -#include +#include "source_base/parallel_reduce.h" -#include "module_base/parallel_reduce.h" +#include void KEDF_TF::set_para(int nx, double dV, double tf_weight) { @@ -65,7 +65,7 @@ double KEDF_TF::get_energy_density(const double* const* prho, int is, int ir) /** * @brief Get the kinetic energy of TF KEDF, and add it onto rtau_tf * \f[ \tau_{TF} = c_{TF} * \prho^{5/3} \f] - * + * * @param prho charge density * @param rtau_tf rtau_tf => rtau_tf + tau_tf */ diff --git a/source/module_hamilt_pw/hamilt_ofdft/kedf_tf.h b/source/module_hamilt_pw/hamilt_ofdft/kedf_tf.h index b9c247cecc..8ce4f1a6b5 100644 --- a/source/module_hamilt_pw/hamilt_ofdft/kedf_tf.h +++ b/source/module_hamilt_pw/hamilt_ofdft/kedf_tf.h @@ -1,13 +1,13 @@ #ifndef KEDF_TF_H #define KEDF_TF_H +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" + #include #include -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" - /** * @brief A class which calculates the kinetic energy, potential, and stress with Thomas-Fermi (TF) KEDF. * See Fermi E. Rend. Accad. Naz. Lincei, 1927, 6(602-607): 5. diff --git a/source/module_hamilt_pw/hamilt_ofdft/kedf_vw.cpp b/source/module_hamilt_pw/hamilt_ofdft/kedf_vw.cpp index d22a499a88..17d06b7a4d 100644 --- a/source/module_hamilt_pw/hamilt_ofdft/kedf_vw.cpp +++ b/source/module_hamilt_pw/hamilt_ofdft/kedf_vw.cpp @@ -1,9 +1,9 @@ #include "./kedf_vw.h" #include "module_parameter/parameter.h" -#include +#include "source_base/parallel_reduce.h" -#include "module_base/parallel_reduce.h" +#include void KEDF_vW::set_para(double dV, double vw_weight) { @@ -33,9 +33,10 @@ double KEDF_vW::get_energy(double** pphi, ModulePW::PW_Basis* pw_rho) } double** LapPhi = new double*[PARAM.inp.nspin]; - for (int is = 0; is < PARAM.inp.nspin; ++is) { + for (int is = 0; is < PARAM.inp.nspin; ++is) + { LapPhi[is] = new double[pw_rho->nrxx]; -} + } this->laplacian_phi(tempPhi, LapPhi, pw_rho); double energy = 0.; // in Ry @@ -96,9 +97,10 @@ double KEDF_vW::get_energy_density(double** pphi, int is, int ir, ModulePW::PW_B } double** LapPhi = new double*[PARAM.inp.nspin]; - for (int is = 0; is < PARAM.inp.nspin; ++is) { + for (int is = 0; is < PARAM.inp.nspin; ++is) + { LapPhi[is] = new double[pw_rho->nrxx]; -} + } this->laplacian_phi(tempPhi, LapPhi, pw_rho); double energyDen = 0.; // in Ry @@ -118,7 +120,7 @@ double KEDF_vW::get_energy_density(double** pphi, int is, int ir, ModulePW::PW_B /** * @brief Get the positive definite energy density of vW KEDF * \f[ \tau_{vW} = |\nabla \phi|^2 / 2 \f] - * + * * @param pphi sqrt(rho) * @param pw_rho pw basis * @param rtau_vw rtau_vw => rtau_vw + tau_vw @@ -139,7 +141,7 @@ void KEDF_vW::tau_vw(const double* const* pphi, ModulePW::PW_Basis* pw_rho, doub std::vector> recip_nabla_phi(pw_rho->npw, 0.); pw_rho->real2recip(abs_phi.data(), recip_phi.data()); - + std::complex img(0.0, 1.0); for (int j = 0; j < 3; ++j) { @@ -186,9 +188,10 @@ void KEDF_vW::vw_potential(const double* const* pphi, ModulePW::PW_Basis* pw_rho // calculate the minus \nabla^2 sqrt(rho) double** LapPhi = new double*[PARAM.inp.nspin]; - for (int is = 0; is < PARAM.inp.nspin; ++is) { + for (int is = 0; is < PARAM.inp.nspin; ++is) + { LapPhi[is] = new double[pw_rho->nrxx]; -} + } this->laplacian_phi(tempPhi, LapPhi, pw_rho); // calculate potential diff --git a/source/module_hamilt_pw/hamilt_ofdft/kedf_vw.h b/source/module_hamilt_pw/hamilt_ofdft/kedf_vw.h index 7f5cd47c40..32d525a974 100644 --- a/source/module_hamilt_pw/hamilt_ofdft/kedf_vw.h +++ b/source/module_hamilt_pw/hamilt_ofdft/kedf_vw.h @@ -1,14 +1,14 @@ #ifndef KEDF_vW_H #define KEDF_vW_H +#include "module_basis/module_pw/pw_basis.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" + #include #include -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" -#include "module_basis/module_pw/pw_basis.h" - /** * @brief A class which calculates the kinetic energy, potential, and stress with von Weizsäcker (vW) KEDF. * See Weizsäcker C F. Zeitschrift für Physik, 1935, 96(7): 431-458. diff --git a/source/module_hamilt_pw/hamilt_ofdft/kedf_wt.cpp b/source/module_hamilt_pw/hamilt_ofdft/kedf_wt.cpp index 312d4a2890..6313f445e8 100644 --- a/source/module_hamilt_pw/hamilt_ofdft/kedf_wt.cpp +++ b/source/module_hamilt_pw/hamilt_ofdft/kedf_wt.cpp @@ -1,11 +1,11 @@ #include "./kedf_wt.h" #include "module_parameter/parameter.h" -#include +#include "source_base/global_variable.h" +#include "source_base/parallel_reduce.h" +#include "source_base/tool_quit.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_reduce.h" -#include "module_base/tool_quit.h" +#include /** * @brief Set the parameters of WT KEDF, and initialize kernel @@ -58,11 +58,14 @@ void KEDF_WT::set_para(double dV, delete[] this->kernel_; this->kernel_ = new double[pw_rho->npw]; - if (read_kernel) { + if (read_kernel) + { this->read_kernel(kernel_file, pw_rho); - } else { + } + else + { this->fill_kernel(tf_weight, vw_weight, pw_rho); -} + } } /** @@ -76,9 +79,10 @@ void KEDF_WT::set_para(double dV, double KEDF_WT::get_energy(const double* const* prho, ModulePW::PW_Basis* pw_rho) { double** kernelRhoBeta = new double*[PARAM.inp.nspin]; - for (int is = 0; is < PARAM.inp.nspin; ++is) { + for (int is = 0; is < PARAM.inp.nspin; ++is) + { kernelRhoBeta[is] = new double[pw_rho->nrxx]; -} + } this->multi_kernel(prho, kernelRhoBeta, this->beta_, pw_rho); double energy = 0.; // in Ry @@ -126,9 +130,10 @@ double KEDF_WT::get_energy(const double* const* prho, ModulePW::PW_Basis* pw_rho double KEDF_WT::get_energy_density(const double* const* prho, int is, int ir, ModulePW::PW_Basis* pw_rho) { double** kernelRhoBeta = new double*[PARAM.inp.nspin]; - for (int is = 0; is < PARAM.inp.nspin; ++is) { + for (int is = 0; is < PARAM.inp.nspin; ++is) + { kernelRhoBeta[is] = new double[pw_rho->nrxx]; -} + } this->multi_kernel(prho, kernelRhoBeta, this->beta_, pw_rho); double result = this->c_tf_ * std::pow(prho[is][ir], this->alpha_) * kernelRhoBeta[is][ir]; @@ -144,7 +149,7 @@ double KEDF_WT::get_energy_density(const double* const* prho, int is, int ir, Mo /** * @brief Get the kinetic energy of WT KEDF, and add it onto rtau_wt * \f[ \tau_{WT} = c_{TF} * \rho^\alpha * \int{W(r - r') * \rho^\beta dr'} \f] - * + * * @param prho charge density * @param pw_rho pw basis * @param rtau_wt rtau_wt => rtau_wt + tau_wt @@ -152,9 +157,10 @@ double KEDF_WT::get_energy_density(const double* const* prho, int is, int ir, Mo void KEDF_WT::tau_wt(const double* const* prho, ModulePW::PW_Basis* pw_rho, double* rtau_wt) { double** kernelRhoBeta = new double*[PARAM.inp.nspin]; - for (int is = 0; is < PARAM.inp.nspin; ++is) { + for (int is = 0; is < PARAM.inp.nspin; ++is) + { kernelRhoBeta[is] = new double[pw_rho->nrxx]; -} + } this->multi_kernel(prho, kernelRhoBeta, this->beta_, pw_rho); if (PARAM.inp.nspin == 1) @@ -191,15 +197,17 @@ void KEDF_WT::wt_potential(const double* const* prho, ModulePW::PW_Basis* pw_rho ModuleBase::timer::tick("KEDF_WT", "wt_potential"); double** kernelRhoBeta = new double*[PARAM.inp.nspin]; - for (int is = 0; is < PARAM.inp.nspin; ++is) { + for (int is = 0; is < PARAM.inp.nspin; ++is) + { kernelRhoBeta[is] = new double[pw_rho->nrxx]; -} + } this->multi_kernel(prho, kernelRhoBeta, this->beta_, pw_rho); double** kernelRhoAlpha = new double*[PARAM.inp.nspin]; - for (int is = 0; is < PARAM.inp.nspin; ++is) { + for (int is = 0; is < PARAM.inp.nspin; ++is) + { kernelRhoAlpha[is] = new double[pw_rho->nrxx]; -} + } this->multi_kernel(prho, kernelRhoAlpha, this->alpha_, pw_rho); for (int is = 0; is < PARAM.inp.nspin; ++is) @@ -311,9 +319,10 @@ void KEDF_WT::get_stress(const double* const* prho, ModulePW::PW_Basis* pw_rho, else { this->stress(a, b) += -diff * pw_rho->gcar[ip][a] * pw_rho->gcar[ip][b] / pw_rho->gg[ip]; - if (a == b) { + if (a == b) + { this->stress(a, b) += diff * coef; -} + } } } } @@ -391,23 +400,38 @@ double KEDF_WT::wt_kernel(double eta, double tf_weight, double vw_weight) { double eta2 = eta * eta; double invEta2 = 1. / eta2; - double LindG = 3. * (1. - vw_weight) * eta2 - -tf_weight-0.6 - + invEta2 * (-0.13714285714285712 - + invEta2 * (-6.39999999999999875E-2 - + invEta2 * (-3.77825602968460128E-2 - + invEta2 * (-2.51824061652633074E-2 - + invEta2 * (-1.80879839616166146E-2 - + invEta2 * (-1.36715733124818332E-2 - + invEta2 * (-1.07236045520990083E-2 - + invEta2 * (-8.65192783339199453E-3 - + invEta2 * (-7.1372762502456763E-3 - + invEta2 * (-5.9945117538835746E-3 - + invEta2 * (-5.10997527675418131E-3 - + invEta2 * (-4.41060829979912465E-3 - + invEta2 * (-3.84763737842981233E-3 - + invEta2 * (-3.38745061493813488E-3 - + invEta2 * (-3.00624946457977689E-3))))))))))))))); + double LindG + = 3. * (1. - vw_weight) * eta2 - tf_weight - 0.6 + + invEta2 + * (-0.13714285714285712 + + invEta2 + * (-6.39999999999999875E-2 + + invEta2 + * (-3.77825602968460128E-2 + + invEta2 + * (-2.51824061652633074E-2 + + invEta2 + * (-1.80879839616166146E-2 + + invEta2 + * (-1.36715733124818332E-2 + + invEta2 + * (-1.07236045520990083E-2 + + invEta2 + * (-8.65192783339199453E-3 + + invEta2 + * (-7.1372762502456763E-3 + + invEta2 + * (-5.9945117538835746E-3 + + invEta2 + * (-5.10997527675418131E-3 + + invEta2 + * (-4.41060829979912465E-3 + + invEta2 + * (-3.84763737842981233E-3 + + invEta2 + * (-3.38745061493813488E-3 + + invEta2 + * (-3.00624946457977689E-3))))))))))))))); return LindG; } else @@ -509,9 +533,10 @@ void KEDF_WT::read_kernel(std::string file_name, ModulePW::PW_Basis* pw_rho) std::ifstream ifs(file_name.c_str(), std::ios::in); GlobalV::ofs_running << "Read WT kernel from " << file_name << std::endl; - if (!ifs) { + if (!ifs) + { ModuleBase::WARNING_QUIT("kedf_wt.cpp", "The kernel file of WT KEDF not found"); -} + } int kineType = 0; double kF_in = 0.; @@ -546,11 +571,15 @@ void KEDF_WT::read_kernel(std::string file_name, ModulePW::PW_Basis* pw_rho) eta = sqrt(pw_rho->gg[ig]) * pw_rho->tpiba / this->tkf_; maxEta = std::max(eta, maxEta); - if (eta <= eta_in[0]) { + if (eta <= eta_in[0]) + { this->kernel_[ig] = w0_in[0]; - } else if (eta > maxEta_in) { + } + else if (eta > maxEta_in) + { this->kernel_[ig] = w0_in[nq_in - 1]; - } else + } + else { ind1 = 1; ind2 = nq_in; @@ -573,9 +602,10 @@ void KEDF_WT::read_kernel(std::string file_name, ModulePW::PW_Basis* pw_rho) } } - if (maxEta > maxEta_in) { + if (maxEta > maxEta_in) + { ModuleBase::WARNING("kedf_wt.cpp", "Please increase the maximal eta value in KEDF kernel file"); -} + } delete[] eta_in; delete[] w0_in; diff --git a/source/module_hamilt_pw/hamilt_ofdft/kedf_wt.h b/source/module_hamilt_pw/hamilt_ofdft/kedf_wt.h index a08f08c05e..88632c916b 100644 --- a/source/module_hamilt_pw/hamilt_ofdft/kedf_wt.h +++ b/source/module_hamilt_pw/hamilt_ofdft/kedf_wt.h @@ -1,14 +1,14 @@ #ifndef KEDF_WT_H #define KEDF_WT_H +#include "module_basis/module_pw/pw_basis.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/matrix.h" +#include "source_base/timer.h" + #include #include -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/matrix.h" -#include "module_base/timer.h" -#include "module_basis/module_pw/pw_basis.h" - /** * @brief A class which calculates the kinetic energy, potential, and stress with Wang-Teter (WT) KEDF. * See Wang L W, Teter M P. Physical Review B, 1992, 45(23): 13196. diff --git a/source/module_hamilt_pw/hamilt_ofdft/of_stress_pw.cpp b/source/module_hamilt_pw/hamilt_ofdft/of_stress_pw.cpp index 5f42c12624..4439139d86 100644 --- a/source/module_hamilt_pw/hamilt_ofdft/of_stress_pw.cpp +++ b/source/module_hamilt_pw/hamilt_ofdft/of_stress_pw.cpp @@ -1,9 +1,9 @@ #include "of_stress_pw.h" -#include "module_base/timer.h" #include "module_hamilt_general/module_vdw/vdw.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/output_log.h" +#include "source_base/timer.h" // Since the kinetic stress of OFDFT is calculated by kinetic functionals in esolver_of.cpp, here we regard it as an // input variable. @@ -63,20 +63,20 @@ void OF_Stress_PW::cal_stress(ModuleBase::matrix& sigmatot, } // hartree contribution - stress_har(ucell,sigmahar, this->rhopw, true, pelec->charge); + stress_har(ucell, sigmahar, this->rhopw, true, pelec->charge); // ewald contribution - stress_ewa(ucell,sigmaewa, this->rhopw, true); + stress_ewa(ucell, sigmaewa, this->rhopw, true); // xc contribution: add gradient corrections(non diagonal) for (int i = 0; i < 3; i++) { sigmaxc(i, i) = -(pelec->f_en.etxc - pelec->f_en.vtxc) / ucell.omega; } - stress_gga(ucell,sigmaxc, this->rhopw, pelec->charge); + stress_gga(ucell, sigmaxc, this->rhopw, pelec->charge); // local contribution - stress_loc(ucell,sigmaloc, this->rhopw, locpp.vloc, p_sf, true, pelec->charge); + stress_loc(ucell, sigmaloc, this->rhopw, locpp.vloc, p_sf, true, pelec->charge); // nlcc stress_cc(sigmaxcc, this->rhopw, ucell, p_sf, true, locpp.numeric, pelec->charge); diff --git a/source/module_hamilt_pw/hamilt_pwdft/VL_in_pw.cpp b/source/module_hamilt_pw/hamilt_pwdft/VL_in_pw.cpp index 0917deb22a..c2907f6221 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/VL_in_pw.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/VL_in_pw.cpp @@ -1,123 +1,119 @@ #include "VL_in_pw.h" -#include "module_parameter/parameter.h" -#include "module_base/libm/libm.h" -#include "module_base/math_integral.h" -#include "module_base/timer.h" + #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/libm/libm.h" +#include "source_base/math_integral.h" +#include "source_base/timer.h" pseudopot_cell_vl::pseudopot_cell_vl() { - numeric = nullptr; - zp = nullptr; + numeric = nullptr; + zp = nullptr; } pseudopot_cell_vl::~pseudopot_cell_vl() { - delete[] numeric; - delete[] zp; + delete[] numeric; + delete[] zp; } -void pseudopot_cell_vl::init_vloc(const UnitCell& ucell, - const ModulePW::PW_Basis* rho_basis) +void pseudopot_cell_vl::init_vloc(const UnitCell& ucell, const ModulePW::PW_Basis* rho_basis) { - ModuleBase::TITLE("pseudopot_cell_vl","init_vloc"); - - // This routine computes the fourier coefficient of the local - // potential vloc(ig,it) for each type of atom - ModuleBase::timer::tick("ppcell_vl","init_vloc"); - - double *vloc1d = new double[rho_basis->ngg]; - ModuleBase::GlobalFunc::ZEROS(vloc1d, rho_basis->ngg); - - this->allocate(ucell,rho_basis->ngg); - - for (int it = 0; it < ucell.ntype; it++) - { - const Atom* atom = &ucell.atoms[it]; - - ModuleBase::GlobalFunc::ZEROS(vloc1d, rho_basis->ngg); - - this->zp[it] = atom->ncpp.zv; - // compute V_loc(G) for a given type of atom - if(atom->coulomb_potential) - { - this->vloc_coulomb(ucell,this->zp[it], vloc1d, rho_basis); - } - else if(numeric[it]==true) - { - this->vloc_of_g( - atom->ncpp.msh, // after cutoff - atom->ncpp.rab.data(), - atom->ncpp.r.data(), - atom->ncpp.vloc_at.data(), // local potential in real space radial form. - this->zp[it], - vloc1d, - ucell, - rho_basis); - } - else - { - ModuleBase::WARNING_QUIT("init_vloc","not available now."); - } - - if(it>=0 && itvloc.nr && this->vloc.nc>=0) - { - ModuleBase::GlobalFunc::COPYARRAY(vloc1d, &this->vloc(it, 0), rho_basis->ngg); - } - } - - - delete[] vloc1d; - - this->print_vloc(ucell,rho_basis); - - ModuleBase::timer::tick("ppcell_vl","init_vloc"); - return; -} + ModuleBase::TITLE("pseudopot_cell_vl", "init_vloc"); + + // This routine computes the fourier coefficient of the local + // potential vloc(ig,it) for each type of atom + ModuleBase::timer::tick("ppcell_vl", "init_vloc"); + + double* vloc1d = new double[rho_basis->ngg]; + ModuleBase::GlobalFunc::ZEROS(vloc1d, rho_basis->ngg); + + this->allocate(ucell, rho_basis->ngg); + for (int it = 0; it < ucell.ntype; it++) + { + const Atom* atom = &ucell.atoms[it]; + + ModuleBase::GlobalFunc::ZEROS(vloc1d, rho_basis->ngg); + + this->zp[it] = atom->ncpp.zv; + // compute V_loc(G) for a given type of atom + if (atom->coulomb_potential) + { + this->vloc_coulomb(ucell, this->zp[it], vloc1d, rho_basis); + } + else if (numeric[it] == true) + { + this->vloc_of_g(atom->ncpp.msh, // after cutoff + atom->ncpp.rab.data(), + atom->ncpp.r.data(), + atom->ncpp.vloc_at.data(), // local potential in real space radial form. + this->zp[it], + vloc1d, + ucell, + rho_basis); + } + else + { + ModuleBase::WARNING_QUIT("init_vloc", "not available now."); + } + + if (it >= 0 && it < this->vloc.nr && this->vloc.nc >= 0) + { + ModuleBase::GlobalFunc::COPYARRAY(vloc1d, &this->vloc(it, 0), rho_basis->ngg); + } + } + + delete[] vloc1d; + + this->print_vloc(ucell, rho_basis); + + ModuleBase::timer::tick("ppcell_vl", "init_vloc"); + return; +} -void pseudopot_cell_vl::allocate(const UnitCell& ucell, - const int ngg) +void pseudopot_cell_vl::allocate(const UnitCell& ucell, const int ngg) { - if(PARAM.inp.test_pp>0) - { - ModuleBase::TITLE("pseudopot_cell_vl","allocate"); - } - - this->vloc.create(ucell.ntype, ngg); - - delete[] numeric; - this->numeric = new bool[ucell.ntype]; - ModuleBase::GlobalFunc::ZEROS(numeric, ucell.ntype); - - for (int it = 0; it < ucell.ntype; it++) - { - this->numeric[it] = true; - } - - // mohan change global variable 'npsx' to local variable, - // npsx( max number of different PPs) - // 2021-02-22 - int npsx = 50; - delete[] zp; - this->zp = new double[npsx]; - ModuleBase::GlobalFunc::ZEROS(zp, npsx); - - return; + if (PARAM.inp.test_pp > 0) + { + ModuleBase::TITLE("pseudopot_cell_vl", "allocate"); + } + + this->vloc.create(ucell.ntype, ngg); + + delete[] numeric; + this->numeric = new bool[ucell.ntype]; + ModuleBase::GlobalFunc::ZEROS(numeric, ucell.ntype); + + for (int it = 0; it < ucell.ntype; it++) + { + this->numeric[it] = true; + } + + // mohan change global variable 'npsx' to local variable, + // npsx( max number of different PPs) + // 2021-02-22 + int npsx = 50; + delete[] zp; + this->zp = new double[npsx]; + ModuleBase::GlobalFunc::ZEROS(zp, npsx); + + return; } void pseudopot_cell_vl::vloc_coulomb(const UnitCell& ucell, - const double& zp_in, - double* vloc_1d, - const ModulePW::PW_Basis* rho_basis) const + const double& zp_in, + double* vloc_1d, + const ModulePW::PW_Basis* rho_basis) const { int igl0 = 0; // start from |G|=0 or not. - if (rho_basis->gg_uniq[0] < 1.0e-8) + if (rho_basis->gg_uniq[0] < 1.0e-8) { igl0 = 1; - vloc_1d[0] = 0.0; + vloc_1d[0] = 0.0; } else { @@ -143,7 +139,6 @@ void pseudopot_cell_vl::vloc_coulomb(const UnitCell& ucell, ! !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ - // Here we always have numeric form, i.e. numeric=ture void pseudopot_cell_vl::vloc_of_g(const int& msh, const double* rab, @@ -151,129 +146,127 @@ void pseudopot_cell_vl::vloc_of_g(const int& msh, const double* vloc_at, const double& zp_in, double* vloc_1d, - const UnitCell& ucell, + const UnitCell& ucell, const ModulePW::PW_Basis* rho_basis) const { - //---------------------------------------------------------------- - // This routine computes the Fourier transform of the local - // part of the pseudopotential. Two types of local potentials - // are allowed: - - // a) The pseudopotential is in analytic form and its fourier - // transform is computed analytically - // b) The pseudopotential is in numeric form and its fourier - // transform is computed numerically - // - // The local pseudopotential of the US case is always in - // numerical form, expressed in Ry units. - // ---------------------------------------------------------------- - int igl0=0;// start from |G|=0 or not. - - // Pseudopotentials in numerical form (Vloc_at) contain the local part - // in order to perform the Fourier transform, a term erf(r)/r is - // subtracted in real space and added again in G space - - assert(msh>0); - - double *aux1 = new double[msh]; + //---------------------------------------------------------------- + // This routine computes the Fourier transform of the local + // part of the pseudopotential. Two types of local potentials + // are allowed: + + // a) The pseudopotential is in analytic form and its fourier + // transform is computed analytically + // b) The pseudopotential is in numeric form and its fourier + // transform is computed numerically + // + // The local pseudopotential of the US case is always in + // numerical form, expressed in Ry units. + // ---------------------------------------------------------------- + int igl0 = 0; // start from |G|=0 or not. + + // Pseudopotentials in numerical form (Vloc_at) contain the local part + // in order to perform the Fourier transform, a term erf(r)/r is + // subtracted in real space and added again in G space + + assert(msh > 0); + + double* aux1 = new double[msh]; // (1) - if(rho_basis->gg_uniq[0] < 1.0e-8) - { - double *aux = new double[msh]; - // first the g=0 term - for (int ir=0; ir0 terms, we first compute the part of the integrand func - // indipendent of |G| in real space - double fac = zp_in * ModuleBase::e2; - for (int ir = 0;ir < msh;ir++) - { - aux1 [ir] = r[ir] * vloc_at [ir] + fac * erf(r[ir]); - } - - // here we perform the integral, after multiplying for the |G| - // dependent part + if (rho_basis->gg_uniq[0] < 1.0e-8) + { + double* aux = new double[msh]; + // first the g=0 term + for (int ir = 0; ir < msh; ir++) + { + // This is the |G| = 0 component of the local + // potential giving rise to the so-called + // "alpha*Z" term in the energy. + aux[ir] = r[ir] * (r[ir] * vloc_at[ir] + zp_in * ModuleBase::e2); + // aux[ir] = r [ir] * (r [ir] * vloc_at [ir] ); + } + ModuleBase::Integral::Simpson_Integral(msh, aux, rab, vloc_1d[0]); + igl0 = 1; + delete[] aux; + } + else + { + igl0 = 0; + } + + // (2) here the |G|>0 terms, we first compute the part of the integrand func + // indipendent of |G| in real space + double fac = zp_in * ModuleBase::e2; + for (int ir = 0; ir < msh; ir++) + { + aux1[ir] = r[ir] * vloc_at[ir] + fac * erf(r[ir]); + } + + // here we perform the integral, after multiplying for the |G| + // dependent part #ifdef _OPENMP #pragma omp parallel -{ + { #endif - double *aux = new double[msh]; + double* aux = new double[msh]; #ifdef _OPENMP #pragma omp for #endif - for (int ig = igl0;ig < rho_basis->ngg;ig++) - { - double gx2= rho_basis->gg_uniq[ig] * ucell.tpiba2; - double gx = std::sqrt(gx2); - for (int ir = 0;ir < msh;ir++) - { - aux [ir] = aux1 [ir] * ModuleBase::libm::sin(gx * r [ir]) / gx; - } - ModuleBase::Integral::Simpson_Integral(msh, aux, rab, vloc_1d[ig] ); - // here we add the analytic fourier transform of the erf function - vloc_1d[ig] -= fac * ModuleBase::libm::exp(- gx2 * 0.25)/ gx2; - } // enddo - - const double d_fpi_omega = ModuleBase::FOUR_PI/ucell.omega;//mohan add 2008-06-04 + for (int ig = igl0; ig < rho_basis->ngg; ig++) + { + double gx2 = rho_basis->gg_uniq[ig] * ucell.tpiba2; + double gx = std::sqrt(gx2); + for (int ir = 0; ir < msh; ir++) + { + aux[ir] = aux1[ir] * ModuleBase::libm::sin(gx * r[ir]) / gx; + } + ModuleBase::Integral::Simpson_Integral(msh, aux, rab, vloc_1d[ig]); + // here we add the analytic fourier transform of the erf function + vloc_1d[ig] -= fac * ModuleBase::libm::exp(-gx2 * 0.25) / gx2; + } // enddo + + const double d_fpi_omega = ModuleBase::FOUR_PI / ucell.omega; // mohan add 2008-06-04 #ifdef _OPENMP #pragma omp for #endif - for (int ig = 0;ig < rho_basis->ngg; ig++) - { - vloc_1d[ig] *= d_fpi_omega; - } + for (int ig = 0; ig < rho_basis->ngg; ig++) + { + vloc_1d[ig] *= d_fpi_omega; + } - delete [] aux; + delete[] aux; #ifdef _OPENMP -} + } #endif - delete [] aux1; - return; + delete[] aux1; + return; } // end subroutine vloc_of_g - -void pseudopot_cell_vl::print_vloc(const UnitCell& ucell, - const ModulePW::PW_Basis* rho_basis) const +void pseudopot_cell_vl::print_vloc(const UnitCell& ucell, const ModulePW::PW_Basis* rho_basis) const { - if(GlobalV::MY_RANK!=0) - { - return; //mohan fix bug 2011-10-13 - } - - bool check_vl = PARAM.inp.out_element_info; - - if(check_vl) - { - for(int it=0; itngg;ig++) - { - ofs_vg << std::setw(15) << rho_basis->gg_uniq [ig] * ucell.tpiba2 - << std::setw(15) << this->vloc(it, ig) << std::endl; - } - ofs_vg.close(); - } - } - return; + if (GlobalV::MY_RANK != 0) + { + return; // mohan fix bug 2011-10-13 + } + + bool check_vl = PARAM.inp.out_element_info; + + if (check_vl) + { + for (int it = 0; it < ucell.ntype; it++) + { + std::stringstream ss; + ss << PARAM.globalv.global_out_dir << ucell.atoms[it].label << "/v_loc_g.dat"; + std::ofstream ofs_vg(ss.str().c_str()); + for (int ig = 0; ig < rho_basis->ngg; ig++) + { + ofs_vg << std::setw(15) << rho_basis->gg_uniq[ig] * ucell.tpiba2 << std::setw(15) << this->vloc(it, ig) + << std::endl; + } + ofs_vg.close(); + } + } + return; } diff --git a/source/module_hamilt_pw/hamilt_pwdft/VL_in_pw.h b/source/module_hamilt_pw/hamilt_pwdft/VL_in_pw.h index 5d439216bb..db99adb1ea 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/VL_in_pw.h +++ b/source/module_hamilt_pw/hamilt_pwdft/VL_in_pw.h @@ -1,46 +1,42 @@ -#ifndef VL_IN_PW_H -#define VL_IN_PW_H +#ifndef VL_IN_PW_H +#define VL_IN_PW_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/matrix.h" #include "module_basis/module_pw/pw_basis.h" #include "module_cell/unitcell.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/matrix.h" class pseudopot_cell_vl { -public: - - pseudopot_cell_vl(); - ~pseudopot_cell_vl(); + public: + pseudopot_cell_vl(); + ~pseudopot_cell_vl(); /** * @brief init local potential - * + * * @param rho_basis pw basis - * @return this->vloc + * @return this->vloc */ - void init_vloc(const UnitCell& ucell, - const ModulePW::PW_Basis* rho_basis); - - ModuleBase::matrix vloc; //(ntype,ngl),the local potential for each atom type(ntype,ngl) - bool *numeric; //[ntype], =true + void init_vloc(const UnitCell& ucell, const ModulePW::PW_Basis* rho_basis); -private: + ModuleBase::matrix vloc; //(ntype,ngl),the local potential for each atom type(ntype,ngl) + bool* numeric; //[ntype], =true - double *zp; // (npsx),the charge of the pseudopotential + private: + double* zp; // (npsx),the charge of the pseudopotential - void allocate(const UnitCell& ucell, - const int ngg); + void allocate(const UnitCell& ucell, const int ngg); /** * @brief compute the coulomb potential in reciprocal space * v(g) = -\frac{4pi}{V} * zp*e^2 / G^2 */ void vloc_coulomb(const UnitCell& ucell, - const double& zp, - double* vloc_1d, + const double& zp, + double* vloc_1d, const ModulePW::PW_Basis* rho_basis) const; - // generate vloc for a particular atom type. + // generate vloc for a particular atom type. void vloc_of_g(const int& msh, const double* rab, const double* r, @@ -50,8 +46,7 @@ class pseudopot_cell_vl const UnitCell& ucell, const ModulePW::PW_Basis* rho_basis) const; - void print_vloc(const UnitCell& ucell, - const ModulePW::PW_Basis* rho_basis) const; + void print_vloc(const UnitCell& ucell, const ModulePW::PW_Basis* rho_basis) const; }; -#endif // VL_IN_PW +#endif // VL_IN_PW diff --git a/source/module_hamilt_pw/hamilt_pwdft/VNL_grad_pw.cpp b/source/module_hamilt_pw/hamilt_pwdft/VNL_grad_pw.cpp index 856ca038f7..54cd792360 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/VNL_grad_pw.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/VNL_grad_pw.cpp @@ -1,186 +1,196 @@ #include "VNL_in_pw.h" -#include "module_base/math_sphbes.h" -#include "module_parameter/parameter.h" -#include "module_base/timer.h" -#include "module_base/math_ylmreal.h" -#include "module_base/math_integral.h" -#include "module_base/math_polyint.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" -void pseudopot_cell_vnl::initgradq_vnl(const UnitCell &cell) +#include "module_parameter/parameter.h" +#include "source_base/math_integral.h" +#include "source_base/math_polyint.h" +#include "source_base/math_sphbes.h" +#include "source_base/math_ylmreal.h" +#include "source_base/timer.h" +void pseudopot_cell_vnl::initgradq_vnl(const UnitCell& cell) { const int nbrx = 10; - const int nbrx_nc = 20; + const int nbrx_nc = 20; const int ntype = cell.ntype; - if(PARAM.inp.nspin!=4) - { - this->tab_dq.create(ntype, nbrx, PARAM.globalv.nqx); - } - else - { - this->tab_dq.create(ntype, nbrx_nc, PARAM.globalv.nqx); - } + if (PARAM.inp.nspin != 4) + { + this->tab_dq.create(ntype, nbrx, PARAM.globalv.nqx); + } + else + { + this->tab_dq.create(ntype, nbrx_nc, PARAM.globalv.nqx); + } gradvkb.create(3, nkb, this->wfcpw->npwk_max); const double pref = ModuleBase::FOUR_PI / sqrt(cell.omega); - for (int it = 0;it < ntype;it++) - { - const int nbeta = cell.atoms[it].ncpp.nbeta; - int kkbeta = cell.atoms[it].ncpp.kkbeta; - if ( (kkbeta%2 == 0) && kkbeta>0 ) - { - kkbeta--; - } - - double *djl = new double[kkbeta]; - double *aux = new double[kkbeta]; - - for (int ib = 0;ib < nbeta;ib++) - { - const int l = cell.atoms[it].ncpp.lll[ib]; - for (int iq=0; iqtab_dq(it, ib, iq) = vqint * pref; - } - } - delete[] aux; - delete[] djl; - } + for (int it = 0; it < ntype; it++) + { + const int nbeta = cell.atoms[it].ncpp.nbeta; + int kkbeta = cell.atoms[it].ncpp.kkbeta; + if ((kkbeta % 2 == 0) && kkbeta > 0) + { + kkbeta--; + } + + double* djl = new double[kkbeta]; + double* aux = new double[kkbeta]; + for (int ib = 0; ib < nbeta; ib++) + { + const int l = cell.atoms[it].ncpp.lll[ib]; + for (int iq = 0; iq < PARAM.globalv.nqx; iq++) + { + const double q = iq * PARAM.globalv.dq; + ModuleBase::Sphbes::dSpherical_Bessel_dx(kkbeta, cell.atoms[it].ncpp.r.data(), q, l, djl); + + for (int ir = 0; ir < kkbeta; ir++) + { + aux[ir] = cell.atoms[it].ncpp.betar(ib, ir) * djl[ir] * pow(cell.atoms[it].ncpp.r[ir], 2); + } + double vqint; + ModuleBase::Integral::Simpson_Integral(kkbeta, aux, cell.atoms[it].ncpp.rab.data(), vqint); + this->tab_dq(it, ib, iq) = vqint * pref; + } + } + delete[] aux; + delete[] djl; + } } -void pseudopot_cell_vnl::getgradq_vnl(const UnitCell& ucell, - const int ik) +void pseudopot_cell_vnl::getgradq_vnl(const UnitCell& ucell, const int ik) { - if(PARAM.inp.test_pp) ModuleBase::TITLE("pseudopot_cell_vnl","getvnl"); - ModuleBase::timer::tick("pp_cell_vnl","getvnl"); + if (PARAM.inp.test_pp) + ModuleBase::TITLE("pseudopot_cell_vnl", "getvnl"); + ModuleBase::timer::tick("pp_cell_vnl", "getvnl"); - if(lmaxkb < 0) - { - return; - } + if (lmaxkb < 0) + { + return; + } - const int npw = this->wfcpw->npwk[ik]; + const int npw = this->wfcpw->npwk[ik]; - // When the internal memory is large enough, it is better to make tmpgradvkb and tmpvkb be the number of pseudopot_cell_vnl - // We only need to initialize them once as long as the cell is unchanged. - ModuleBase::realArray tmpgradvkb(3, nhm, npw); + // When the internal memory is large enough, it is better to make tmpgradvkb and tmpvkb be the number of + // pseudopot_cell_vnl We only need to initialize them once as long as the cell is unchanged. + ModuleBase::realArray tmpgradvkb(3, nhm, npw); ModuleBase::matrix tmpvkb(nhm, npw); - double *vq = new double[npw]; - double *dvq = new double[npw]; - - const int x1= (lmaxkb + 1)*(lmaxkb + 1); - - ModuleBase::matrix ylm(x1, npw); - ModuleBase::matrix *dylm = new ModuleBase::matrix[3]{ModuleBase::matrix(x1,npw),ModuleBase::matrix(x1,npw),ModuleBase::matrix(x1,npw)}; - - ModuleBase::Vector3 *gk = new ModuleBase::Vector3[npw]; - for (int ig = 0;ig < npw;ig++) - { - gk[ig] = this->wfcpw->getgpluskcar(ik,ig); - } - - ModuleBase::YlmReal::grad_Ylm_Real(x1, npw, gk, ylm, dylm[0], dylm[1], dylm[2]); - - int jkb = 0; - for(int it = 0;it < ucell.ntype;it++) - { - // calculate beta in G-space using an interpolation table - const int nbeta = ucell.atoms[it].ncpp.nbeta; - const int nh = ucell.atoms[it].ncpp.nh; + double* vq = new double[npw]; + double* dvq = new double[npw]; + + const int x1 = (lmaxkb + 1) * (lmaxkb + 1); + + ModuleBase::matrix ylm(x1, npw); + ModuleBase::matrix* dylm = new ModuleBase::matrix[3]{ModuleBase::matrix(x1, npw), + ModuleBase::matrix(x1, npw), + ModuleBase::matrix(x1, npw)}; + + ModuleBase::Vector3* gk = new ModuleBase::Vector3[npw]; + for (int ig = 0; ig < npw; ig++) + { + gk[ig] = this->wfcpw->getgpluskcar(ik, ig); + } + + ModuleBase::YlmReal::grad_Ylm_Real(x1, npw, gk, ylm, dylm[0], dylm[1], dylm[2]); + + int jkb = 0; + for (int it = 0; it < ucell.ntype; it++) + { + // calculate beta in G-space using an interpolation table + const int nbeta = ucell.atoms[it].ncpp.nbeta; + const int nh = ucell.atoms[it].ncpp.nh; int nb0 = -1; - for( int ih = 0; ih < nh; ++ih) + for (int ih = 0; ih < nh; ++ih) { int nb = this->indv(it, ih); - if(nb != nb0) + if (nb != nb0) { - for (int ig = 0;ig < npw;++ig) - { - const double gnorm = gk[ig].norm() * ucell.tpiba; - vq [ig] = ModuleBase::PolyInt::Polynomial_Interpolation( - this->tab, it, nb, PARAM.globalv.nqx, PARAM.globalv.dq, gnorm ); - dvq[ig] =ModuleBase::PolyInt::Polynomial_Interpolation( - this->tab_dq, it, nb, PARAM.globalv.nqx, PARAM.globalv.dq, gnorm ); - } + for (int ig = 0; ig < npw; ++ig) + { + const double gnorm = gk[ig].norm() * ucell.tpiba; + vq[ig] = ModuleBase::PolyInt::Polynomial_Interpolation(this->tab, + it, + nb, + PARAM.globalv.nqx, + PARAM.globalv.dq, + gnorm); + dvq[ig] = ModuleBase::PolyInt::Polynomial_Interpolation(this->tab_dq, + it, + nb, + PARAM.globalv.nqx, + PARAM.globalv.dq, + gnorm); + } nb0 = nb; } - double lmmat[9] = {0, 0, 1, -1, 0, 0, 0, -1, 0}; - for(int id = 0; id < 3; ++id) + double lmmat[9] = {0, 0, 1, -1, 0, 0, 0, -1, 0}; + for (int id = 0; id < 3; ++id) { - const int lm = static_cast( nhtolm(it, ih) ); - for (int ig = 0;ig < npw;++ig) - { + const int lm = static_cast(nhtolm(it, ih)); + for (int ig = 0; ig < npw; ++ig) + { ModuleBase::Vector3 gg = gk[ig]; double ggnorm = gg.norm(); - if(ggnorm < 1e-8) - { - if(lm == 0 || lm > 3) - { - tmpgradvkb(id, ih, ig) = 0.0; - } - else//lm = 1,2,3; l = 1 - { - //q \to 0 : \nabla(f(q)Y(\hat{q})) = f(q)/q*sqrt(3/4/pi)*vec(-delta(lm,2), -delta(lm,3), delta(lm,1)) - // tmpgradvkb(id, ih, ig) = 0.0; - tmpgradvkb(id, ih, ig) = dvq[ig] * sqrt(3.0/4.0/M_PI) * lmmat[(lm-1)*3 + id]; - } - } - else - { + if (ggnorm < 1e-8) + { + if (lm == 0 || lm > 3) + { + tmpgradvkb(id, ih, ig) = 0.0; + } + else // lm = 1,2,3; l = 1 + { + // q \to 0 : \nabla(f(q)Y(\hat{q})) = f(q)/q*sqrt(3/4/pi)*vec(-delta(lm,2), -delta(lm,3), + // delta(lm,1)) + // tmpgradvkb(id, ih, ig) = 0.0; + tmpgradvkb(id, ih, ig) = dvq[ig] * sqrt(3.0 / 4.0 / M_PI) * lmmat[(lm - 1) * 3 + id]; + } + } + else + { tmpgradvkb(id, ih, ig) = ylm(lm, ig) * dvq[ig] * gg[id] / ggnorm + dylm[id](lm, ig) / this->wfcpw->tpiba * vq[ig]; // note: dylm/d(tpiba * gx) = 1/tpiba * dylm/dgx } - tmpvkb(ih, ig) = ylm(lm,ig) * vq[ig]; - } + tmpvkb(ih, ig) = ylm(lm, ig) * vq[ig]; + } } } - // vkb1 contains all betas including angular part for type nt - // now add the structure factor and factor (-i)^l - for (int ia=0; ia *sk = this->psf->get_sk(ik, it, ia, this->wfcpw); - - for (int ih = 0;ih < nh;++ih) - { - std::complex pref = pow( ModuleBase::NEG_IMAG_UNIT, nhtol(it, ih)); - std::complex* pvkb = &this->vkb(jkb, 0); - for (int id = 0; id < 3 ; ++id) - { - std::complex* pgvkb = &this->gradvkb(id, jkb, 0); - for (int ig = 0;ig < npw;++ig) - { - std::complex skig = sk[ig]; - pvkb[ig] = tmpvkb(ih, ig) * skig * pref; - // std::complex dskig = ModuleBase::NEG_IMAG_UNIT * (ucell.atoms[it].tau[ia][id] * this->wfcpw->lat0) * skig; - // pgvkb[ig] = tmpgradvkb(id, ih, ig) * skig * pref + tmpvkb(ih, ig) * dskig * pref; - // The second term will be eliminate when doing Dij or we can say (\nabla_q+\nabla_q')S(q'-q) = 0 - pgvkb[ig] = tmpgradvkb(id, ih, ig) * skig * pref; - } - } //end id - ++jkb; - } // end ih - - delete [] sk; - } // end ia - } // enddo - - delete [] gk; - delete [] vq; - delete [] dvq; - delete [] dylm; - - ModuleBase::timer::tick("pp_cell_vnl","getvnl"); - - return; + // vkb1 contains all betas including angular part for type nt + // now add the structure factor and factor (-i)^l + for (int ia = 0; ia < ucell.atoms[it].na; ia++) + { + std::complex* sk = this->psf->get_sk(ik, it, ia, this->wfcpw); + + for (int ih = 0; ih < nh; ++ih) + { + std::complex pref = pow(ModuleBase::NEG_IMAG_UNIT, nhtol(it, ih)); + std::complex* pvkb = &this->vkb(jkb, 0); + for (int id = 0; id < 3; ++id) + { + std::complex* pgvkb = &this->gradvkb(id, jkb, 0); + for (int ig = 0; ig < npw; ++ig) + { + std::complex skig = sk[ig]; + pvkb[ig] = tmpvkb(ih, ig) * skig * pref; + // std::complex dskig = ModuleBase::NEG_IMAG_UNIT * (ucell.atoms[it].tau[ia][id] * + // this->wfcpw->lat0) * skig; pgvkb[ig] = tmpgradvkb(id, ih, ig) * skig * pref + tmpvkb(ih, ig) + // * dskig * pref; The second term will be eliminate when doing Dij or we + // can say (\nabla_q+\nabla_q')S(q'-q) = 0 + pgvkb[ig] = tmpgradvkb(id, ih, ig) * skig * pref; + } + } // end id + ++jkb; + } // end ih + + delete[] sk; + } // end ia + } // enddo + + delete[] gk; + delete[] vq; + delete[] dvq; + delete[] dylm; + + ModuleBase::timer::tick("pp_cell_vnl", "getvnl"); + + return; } \ No newline at end of file diff --git a/source/module_hamilt_pw/hamilt_pwdft/VNL_in_pw.cpp b/source/module_hamilt_pw/hamilt_pwdft/VNL_in_pw.cpp index ee9b2bb659..880e50939d 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/VNL_in_pw.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/VNL_in_pw.cpp @@ -1,19 +1,18 @@ #include "VNL_in_pw.h" -#include "module_parameter/parameter.h" -#include "module_base/clebsch_gordan_coeff.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/math_integral.h" -#include "module_base/math_polyint.h" -#include "module_base/math_sphbes.h" -#include "module_base/math_ylmreal.h" -#include "module_base/memory.h" -#include "module_base/module_device/device.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/vnl_op.h" - +#include "module_parameter/parameter.h" +#include "source_base/clebsch_gordan_coeff.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/math_integral.h" +#include "source_base/math_polyint.h" +#include "source_base/math_sphbes.h" +#include "source_base/math_ylmreal.h" +#include "source_base/memory.h" +#include "source_base/module_device/device.h" +#include "source_base/timer.h" pseudopot_cell_vnl::pseudopot_cell_vnl() { @@ -27,9 +26,10 @@ pseudopot_cell_vnl::~pseudopot_cell_vnl() void pseudopot_cell_vnl::release_memory() { - if (this->nhm <= 0 || memory_released) { + if (this->nhm <= 0 || memory_released) + { return; -} + } if (this->use_gpu_) { delmem_sd_op()(this->s_deeq); @@ -95,8 +95,7 @@ void pseudopot_cell_vnl::init(const UnitCell& ucell, GlobalV::ofs_running << " " << ucell.atoms[it].label << " non-local projectors:" << std::endl; for (int ibeta = 0; ibeta < ucell.atoms[it].ncpp.nbeta; ibeta++) { - GlobalV::ofs_running << " projector " << ibeta + 1 << " L=" << ucell.atoms[it].ncpp.lll[ibeta] - << std::endl; + GlobalV::ofs_running << " projector " << ibeta + 1 << " L=" << ucell.atoms[it].ncpp.lll[ibeta] << std::endl; this->lmaxkb = std::max(this->lmaxkb, ucell.atoms[it].ncpp.lll[ibeta]); } } @@ -166,16 +165,12 @@ void pseudopot_cell_vnl::init(const UnitCell& ucell, { if (PARAM.globalv.has_float_data) { - resmem_sh_op()(s_deeq, - PARAM.inp.nspin * ucell.nat * this->nhm * this->nhm, - "VNL::s_deeq"); + resmem_sh_op()(s_deeq, PARAM.inp.nspin * ucell.nat * this->nhm * this->nhm, "VNL::s_deeq"); resmem_sh_op()(s_nhtol, ntype * this->nhm, "VNL::s_nhtol"); resmem_sh_op()(s_nhtolm, ntype * this->nhm, "VNL::s_nhtolm"); resmem_sh_op()(s_indv, ntype * this->nhm, "VNL::s_indv"); resmem_sh_op()(s_qq_nt, ntype * this->nhm * this->nhm, "VNL::s_qq_nt"); - resmem_ch_op()(c_deeq_nc, - PARAM.inp.nspin * ucell.nat * this->nhm * this->nhm, - "VNL::c_deeq_nc"); + resmem_ch_op()(c_deeq_nc, PARAM.inp.nspin * ucell.nat * this->nhm * this->nhm, "VNL::c_deeq_nc"); resmem_ch_op()(c_qq_so, ntype * 4 * this->nhm * this->nhm, "VNL::c_qq_so"); } if (PARAM.globalv.has_double_data) @@ -271,13 +266,14 @@ void pseudopot_cell_vnl::init(const UnitCell& ucell, resmem_sh_op()(s_tab, this->tab.getSize()); resmem_ch_op()(c_vkb, nkb * npwx); } - #ifdef __DSP - base_device::memory::resize_memory_op_mt, base_device::DEVICE_CPU>() - (this->z_vkb, this->vkb.size, "Nonlocal::ps"); - memcpy(this->z_vkb,this->vkb.c,this->vkb.size*16); - #else +#ifdef __DSP + base_device::memory::resize_memory_op_mt, base_device::DEVICE_CPU>()(this->z_vkb, + this->vkb.size, + "Nonlocal::ps"); + memcpy(this->z_vkb, this->vkb.c, this->vkb.size * 16); +#else this->z_vkb = this->vkb.c; - #endif +#endif this->d_tab = this->tab.ptr; // There's no need to delete double precision pointers while in a CPU environment. } @@ -291,12 +287,9 @@ void pseudopot_cell_vnl::init(const UnitCell& ucell, // with structure factor, for all atoms, in reciprocal space //---------------------------------------------------------- template -void pseudopot_cell_vnl::getvnl(Device* ctx, - const UnitCell& ucell, - const int& ik, - std::complex* vkb_in) const +void pseudopot_cell_vnl::getvnl(Device* ctx, const UnitCell& ucell, const int& ik, std::complex* vkb_in) const { - if (PARAM.inp.test_pp) + if (PARAM.inp.test_pp) { ModuleBase::TITLE("pseudopot_cell_vnl", "getvnl"); } @@ -448,9 +441,10 @@ void pseudopot_cell_vnl::init_vnl(UnitCell& cell, const ModulePW::PW_Basis* rho_ if (cell.atoms[it].ncpp.tvanp) { cell.atoms[it].ncpp.nqlc = std::min(cell.atoms[it].ncpp.nqlc, lmaxq); - if (cell.atoms[it].ncpp.nqlc < 0) { + if (cell.atoms[it].ncpp.nqlc < 0) + { cell.atoms[it].ncpp.nqlc = 0; -} + } } } @@ -567,15 +561,17 @@ void pseudopot_cell_vnl::init_vnl(UnitCell& cell, const ModulePW::PW_Basis* rho_ this->dvan_so(ijs, it, ip, ip2) = cell.atoms[it].ncpp.dion(ir, is) * soc.fcoef(it, is1, is2, ip, ip2); ++ijs; - if (ir != is) { + if (ir != is) + { soc.fcoef(it, is1, is2, ip, ip2) = std::complex(0.0, 0.0); -} + } } } } } } - else { + else + { for (int ip = 0; ip < Nprojectors; ip++) { for (int ip2 = 0; ip2 < Nprojectors; ip2++) @@ -596,7 +592,7 @@ void pseudopot_cell_vnl::init_vnl(UnitCell& cell, const ModulePW::PW_Basis* rho_ } } } -} + } } // e) It computes the coefficients c_{LM}^{nm} which relates the @@ -1177,9 +1173,10 @@ double pseudopot_cell_vnl::CG(int l1, int m1, int l2, int m2, int L, int M) // p void pseudopot_cell_vnl::init_vnl_alpha(const UnitCell& ucell) // pengfei Li 2018-3-23 { - if (PARAM.inp.test_pp) { + if (PARAM.inp.test_pp) + { ModuleBase::TITLE("pseudopot_cell_vnl", "init_vnl_alpha"); -} + } ModuleBase::timer::tick("ppcell_vnl", "init_vnl_alpha"); for (int it = 0; it < ucell.ntype; it++) @@ -1232,8 +1229,8 @@ void pseudopot_cell_vnl::init_vnl_alpha(const UnitCell& ucell) // pengfei Li 201 for (int ir = 0; ir < kkbeta; ir++) { - aux[ir] = ucell.atoms[it].ncpp.betar(ib, ir) * jl[ir] - * ucell.atoms[it].ncpp.r[ir] * ucell.atoms[it].ncpp.r[ir]; + aux[ir] = ucell.atoms[it].ncpp.betar(ib, ir) * jl[ir] * ucell.atoms[it].ncpp.r[ir] + * ucell.atoms[it].ncpp.r[ir]; } double vqint; ModuleBase::Integral::Simpson_Integral(kkbeta, aux, ucell.atoms[it].ncpp.rab.data(), vqint); @@ -1364,9 +1361,7 @@ void pseudopot_cell_vnl::cal_effective_D(const ModuleBase::matrix& veff, { if (PARAM.globalv.has_float_data) { - castmem_d2s_h2d_op()(this->s_deeq, - this->deeq.ptr, - PARAM.inp.nspin * cell.nat * this->nhm * this->nhm); + castmem_d2s_h2d_op()(this->s_deeq, this->deeq.ptr, PARAM.inp.nspin * cell.nat * this->nhm * this->nhm); castmem_z2c_h2d_op()(this->c_deeq_nc, this->deeq_nc.ptr, PARAM.inp.nspin * cell.nat * this->nhm * this->nhm); @@ -1377,17 +1372,13 @@ void pseudopot_cell_vnl::cal_effective_D(const ModuleBase::matrix& veff, this->deeq_nc.ptr, PARAM.inp.nspin * cell.nat * this->nhm * this->nhm); } - syncmem_d2d_h2d_op()(this->d_deeq, - this->deeq.ptr, - PARAM.inp.nspin * cell.nat * this->nhm * this->nhm); + syncmem_d2d_h2d_op()(this->d_deeq, this->deeq.ptr, PARAM.inp.nspin * cell.nat * this->nhm * this->nhm); } else { if (PARAM.globalv.has_float_data) { - castmem_d2s_h2h_op()(this->s_deeq, - this->deeq.ptr, - PARAM.inp.nspin * cell.nat * this->nhm * this->nhm); + castmem_d2s_h2h_op()(this->s_deeq, this->deeq.ptr, PARAM.inp.nspin * cell.nat * this->nhm * this->nhm); castmem_z2c_h2h_op()(this->c_deeq_nc, this->deeq_nc.ptr, PARAM.inp.nspin * cell.nat * this->nhm * this->nhm); @@ -1723,7 +1714,7 @@ template void pseudopot_cell_vnl::getvnl(base_de int const&, std::complex*) const; template void pseudopot_cell_vnl::getvnl(base_device::DEVICE_CPU*, - const UnitCell&, + const UnitCell&, int const&, std::complex*) const; #if defined(__CUDA) || defined(__ROCM) diff --git a/source/module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h b/source/module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h index 1e9fdaa762..515976e736 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h +++ b/source/module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h @@ -1,14 +1,14 @@ #ifndef VNL_IN_PW_H #define VNL_IN_PW_H -#include "module_base/complexarray.h" -#include "module_base/complexmatrix.h" -#include "module_base/intarray.h" -#include "module_base/realarray.h" #include "module_cell/unitcell.h" #include "module_hamilt_pw/hamilt_pwdft/soc.h" #include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" #include "module_psi/psi.h" +#include "source_base/complexarray.h" +#include "source_base/complexmatrix.h" +#include "source_base/intarray.h" +#include "source_base/realarray.h" #ifdef __LCAO #include "module_basis/module_ao/ORB_gaunt_table.h" #endif diff --git a/source/module_hamilt_pw/hamilt_pwdft/elecond.cpp b/source/module_hamilt_pw/hamilt_pwdft/elecond.cpp index 6e70c8d195..62670cb483 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/elecond.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/elecond.cpp @@ -1,12 +1,12 @@ #include "elecond.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/parallel_device.h" #include "module_elecstate/occupy.h" #include "module_io/binstream.h" #include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/parallel_device.h" #include @@ -84,7 +84,11 @@ void EleCond::KG(const int& smear_type, std::vector ct12(nt, 0); std::vector ct22(nt, 0); - hamilt::Velocity velop(this->p_wfcpw, this->p_kv->isk.data(), this->p_ppcell, this->p_ucell, nonlocal); + hamilt::Velocity velop(this->p_wfcpw, + this->p_kv->isk.data(), + this->p_ppcell, + this->p_ucell, + nonlocal); double decut = (wcut + fwhmin) / ModuleBase::Ry_to_eV; std::cout << "Recommended dt: " << 0.25 * M_PI / decut << " a.u." << std::endl; for (int ik = 0; ik < nk; ++ik) @@ -156,7 +160,7 @@ void EleCond::jjresponse_ks(const int ik, std::complex* pij_c = nullptr; std::vector> pij_h_; - if(std::is_same::value) + if (std::is_same::value) { pij_c = pij_d; } @@ -166,7 +170,7 @@ void EleCond::jjresponse_ks(const int ik, syncmem_complex_d2h_op()(pij_h_.data(), pij_d, nbands * nbands); pij_c = pij_h_.data(); } - + #ifdef __MPI Parallel_Common::reduce_data(pij_c, nbands * nbands, POOL_WORLD); #endif @@ -219,9 +223,10 @@ void EleCond::jjresponse_ks(const int ik, for (int jb = ib + 1; jb < nbands; ++jb, ++ijb) { double ej = enb[jb]; - if (ej - ei > decut) { + if (ej - ei > decut) + { continue; -} + } double fj = wg(ik, jb); double tmct = sin((ej - ei) * (it)*dt) * (fi - fj) * pij2[ijb]; tmct11 += tmct; diff --git a/source/module_hamilt_pw/hamilt_pwdft/elecond.h b/source/module_hamilt_pw/hamilt_pwdft/elecond.h index 8ccc0a1408..b243416caa 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/elecond.h +++ b/source/module_hamilt_pw/hamilt_pwdft/elecond.h @@ -1,21 +1,23 @@ #ifndef ELECOND_H #define ELECOND_H -#include "module_base/matrix.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/klist.h" #include "module_cell/unitcell.h" #include "module_elecstate/elecstate.h" #include "module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h" #include "module_hamilt_pw/hamilt_pwdft/operator_pw/velocity_pw.h" +#include "source_base/matrix.h" -template +template class EleCond { public: using resmem_complex_op = base_device::memory::resize_memory_op, Device>; using delmem_complex_op = base_device::memory::delete_memory_op, Device>; - using syncmem_complex_d2h_op = base_device::memory::synchronize_memory_op, base_device::DEVICE_CPU, Device>; + using syncmem_complex_d2h_op + = base_device::memory::synchronize_memory_op, base_device::DEVICE_CPU, Device>; + public: EleCond(UnitCell* p_ucell_in, K_Vectors* p_kv_in, diff --git a/source/module_hamilt_pw/hamilt_pwdft/forces.cpp b/source/module_hamilt_pw/hamilt_pwdft/forces.cpp index a722bc5449..8d8603bbf7 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/forces.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/forces.cpp @@ -1,26 +1,25 @@ #include "forces.h" -#include "module_parameter/parameter.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/output_log.h" +#include "module_parameter/parameter.h" // new -#include "module_base/complexmatrix.h" -#include "module_base/libm/libm.h" -#include "module_base/math_integral.h" -#include "module_base/mathzone.h" -#include "module_base/timer.h" -#include "module_base/tool_threading.h" #include "module_elecstate/module_pot/efield.h" #include "module_elecstate/module_pot/gatefield.h" #include "module_hamilt_general/module_ewald/H_Ewald_pw.h" #include "module_hamilt_general/module_surchem/surchem.h" #include "module_hamilt_general/module_vdw/vdw.h" +#include "source_base/complexmatrix.h" +#include "source_base/libm/libm.h" +#include "source_base/math_integral.h" +#include "source_base/mathzone.h" +#include "source_base/timer.h" +#include "source_base/tool_threading.h" #ifdef _OPENMP #include #endif - template void Forces::cal_force(UnitCell& ucell, ModuleBase::matrix& force, @@ -52,10 +51,10 @@ void Forces::cal_force(UnitCell& ucell, ModuleBase::matrix forceonsite(nat, 3); // Force due to local ionic potential - this->cal_force_loc(ucell,forcelc, rho_basis, locpp->vloc, chr); + this->cal_force_loc(ucell, forcelc, rho_basis, locpp->vloc, chr); // Ewald - this->cal_force_ew(ucell,forceion, rho_basis, p_sf); + this->cal_force_ew(ucell, forceion, rho_basis, p_sf); // Force due to nonlocal part of pseudopotential if (wfc_basis != nullptr) @@ -70,7 +69,7 @@ void Forces::cal_force(UnitCell& ucell, } // DFT+U and DeltaSpin - if(PARAM.inp.dft_plus_u || PARAM.inp.sc_mag_switch) + if (PARAM.inp.dft_plus_u || PARAM.inp.sc_mag_switch) { this->cal_force_onsite(forceonsite, wg, wfc_basis, ucell, psi_in); } @@ -168,7 +167,7 @@ void Forces::cal_force(UnitCell& ucell, force(iat, ipol) = force(iat, ipol) + forcesol(iat, ipol); } - if(PARAM.inp.dft_plus_u || PARAM.inp.sc_mag_switch) + if (PARAM.inp.dft_plus_u || PARAM.inp.sc_mag_switch) { force(iat, ipol) += forceonsite(iat, ipol); } @@ -292,19 +291,11 @@ void Forces::cal_force(UnitCell& ucell, } if (PARAM.inp.gate_flag) { - ModuleIO::print_force(GlobalV::ofs_running, - ucell, - "GATEFIELD FORCE (eV/Angstrom)", - force_gate, - false); + ModuleIO::print_force(GlobalV::ofs_running, ucell, "GATEFIELD FORCE (eV/Angstrom)", force_gate, false); } if (PARAM.inp.imp_sol) { - ModuleIO::print_force(GlobalV::ofs_running, - ucell, - "IMP_SOL FORCE (eV/Angstrom)", - forcesol, - false); + ModuleIO::print_force(GlobalV::ofs_running, ucell, "IMP_SOL FORCE (eV/Angstrom)", forcesol, false); } if (PARAM.inp.dft_plus_u || PARAM.inp.sc_mag_switch) { @@ -381,8 +372,7 @@ void Forces::cal_force_loc(const UnitCell& ucell, const double phase = ModuleBase::TWO_PI * (rho_basis->gcar[ig] * ucell.atoms[it].tau[ia]); double sinp, cosp; ModuleBase::libm::sincos(phase, &sinp, &cosp); - const double factor - = vloc(it, rho_basis->ig2igg[ig]) * (cosp * aux[ig].imag() + sinp * aux[ig].real()); + const double factor = vloc(it, rho_basis->ig2igg[ig]) * (cosp * aux[ig].imag() + sinp * aux[ig].real()); forcelc(iat, 0) += rho_basis->gcar[ig][0] * factor; forcelc(iat, 1) += rho_basis->gcar[ig][1] * factor; forcelc(iat, 2) += rho_basis->gcar[ig][2] * factor; @@ -596,8 +586,7 @@ void Forces::cal_force_ew(const UnitCell& ucell, { if (iat1 != iat2 && ucell.atoms[T2].na != 0 && ucell.atoms[T1].na != 0) { - ModuleBase::Vector3 d_tau - = ucell.atoms[T1].tau[I1] - ucell.atoms[T2].tau[I2]; + ModuleBase::Vector3 d_tau = ucell.atoms[T1].tau[I1] - ucell.atoms[T2].tau[I2]; H_Ewald_pw::rgen(d_tau, rmax, irr, ucell.latvec, ucell.G, r, r2, nrm); for (int n = 0; n < nrm; n++) @@ -606,8 +595,7 @@ void Forces::cal_force_ew(const UnitCell& ucell, double factor; { - factor = ucell.atoms[T1].ncpp.zv * ucell.atoms[T2].ncpp.zv - * ModuleBase::e2 / (rr * rr) + factor = ucell.atoms[T1].ncpp.zv * ucell.atoms[T2].ncpp.zv * ModuleBase::e2 / (rr * rr) * (erfc(sqa * rr) / rr + sq8a_2pi * ModuleBase::libm::exp(-alpha * rr * rr)) * ucell.lat0; } @@ -643,8 +631,6 @@ void Forces::cal_force_ew(const UnitCell& ucell, return; } - - template class Forces; #if ((defined __CUDA) || (defined __ROCM)) template class Forces; diff --git a/source/module_hamilt_pw/hamilt_pwdft/forces.h b/source/module_hamilt_pw/hamilt_pwdft/forces.h index 5e62291761..7c318a97f9 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/forces.h +++ b/source/module_hamilt_pw/hamilt_pwdft/forces.h @@ -1,18 +1,18 @@ #ifndef FORCES_H #define FORCES_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/matrix.h" -#include "module_base/module_device/memory_op.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/klist.h" #include "module_cell/module_symmetry/symmetry.h" #include "module_elecstate/elecstate.h" #include "module_hamilt_pw/hamilt_pwdft/VL_in_pw.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/force_op.h" -#include "module_base/kernels/math_kernel_op.h" #include "module_psi/psi.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/matrix.h" +#include "source_base/module_device/memory_op.h" #include "structure_factor.h" template @@ -57,8 +57,8 @@ class Forces const ModuleBase::matrix& vloc, const Charge* const chr); void cal_force_ew(const UnitCell& ucell, - ModuleBase::matrix& forceion, - const ModulePW::PW_Basis* const rho_basis, + ModuleBase::matrix& forceion, + const ModulePW::PW_Basis* const rho_basis, const Structure_Factor* p_sf); void cal_force_cc(ModuleBase::matrix& forcecc, const ModulePW::PW_Basis* const rho_basis, @@ -91,10 +91,10 @@ class Forces /// @param ucell_in , the unit cell /// @param psi_in , the wave function void cal_force_onsite(ModuleBase::matrix& force_onsite, - const ModuleBase::matrix& wg, - const ModulePW::PW_Basis_K* wfc_basis, - const UnitCell& ucell_in, - const psi::Psi, Device>* psi_in = nullptr); + const ModuleBase::matrix& wg, + const ModulePW::PW_Basis_K* wfc_basis, + const UnitCell& ucell_in, + const psi::Psi, Device>* psi_in = nullptr); void cal_force_scc(ModuleBase::matrix& forcescc, const ModulePW::PW_Basis* const rho_basis, const ModuleBase::matrix& v_current, @@ -117,17 +117,18 @@ class Forces int type, const UnitCell& ucell_in); // used in nonlinear core correction stress void deriv_drhoc_scc(const bool& numeric, - const int mesh, - const FPTYPE* r, - const FPTYPE* rab, - const FPTYPE* rhoc, - FPTYPE* drhocg, - const ModulePW::PW_Basis* const rho_basis, - const UnitCell& ucell_in); // used in nonlinear core correction stress + const int mesh, + const FPTYPE* r, + const FPTYPE* rab, + const FPTYPE* rhoc, + FPTYPE* drhocg, + const ModulePW::PW_Basis* const rho_basis, + const UnitCell& ucell_in); // used in nonlinear core correction stress protected: Device* ctx = {}; base_device::DEVICE_CPU* cpu_ctx = {}; base_device::AbacusDevice_t device = {}; + private: using gemm_op = ModuleBase::gemm_op, Device>; diff --git a/source/module_hamilt_pw/hamilt_pwdft/forces_cc.cpp b/source/module_hamilt_pw/hamilt_pwdft/forces_cc.cpp index eaf83816e3..58c14992ea 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/forces_cc.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/forces_cc.cpp @@ -1,14 +1,8 @@ #include "forces.h" -#include "stress_func.h" -#include "module_parameter/parameter.h" #include "module_io/output_log.h" +#include "module_parameter/parameter.h" +#include "stress_func.h" // new -#include "module_base/complexmatrix.h" -#include "module_base/libm/libm.h" -#include "module_base/math_integral.h" -#include "module_base/mathzone.h" -#include "module_base/timer.h" -#include "module_base/tool_threading.h" #include "module_elecstate/cal_ux.h" #include "module_elecstate/module_pot/efield.h" #include "module_elecstate/module_pot/gatefield.h" @@ -16,23 +10,27 @@ #include "module_hamilt_general/module_surchem/surchem.h" #include "module_hamilt_general/module_vdw/vdw.h" #include "module_hamilt_general/module_xc/xc_functional.h" +#include "source_base/complexmatrix.h" +#include "source_base/libm/libm.h" +#include "source_base/math_integral.h" +#include "source_base/mathzone.h" +#include "source_base/timer.h" +#include "source_base/tool_threading.h" #ifdef _OPENMP #include #endif - #ifdef USE_LIBXC #include "module_hamilt_general/module_xc/xc_functional_libxc.h" #endif - template void Forces::cal_force_cc(ModuleBase::matrix& forcecc, const ModulePW::PW_Basis* const rho_basis, const Charge* const chr, const bool* numeric, - UnitCell& ucell_in) + UnitCell& ucell_in) { ModuleBase::TITLE("Forces", "cal_force_cc"); // recalculate the exchange-correlation potential. @@ -58,8 +56,11 @@ void Forces::cal_force_cc(ModuleBase::matrix& forcecc, if (XC_Functional::get_ked_flag()) { #ifdef USE_LIBXC - const auto etxc_vtxc_v - = XC_Functional_Libxc::v_xc_meta(XC_Functional::get_func_id(), rho_basis->nrxx, ucell_in.omega, ucell_in.tpiba, chr); + const auto etxc_vtxc_v = XC_Functional_Libxc::v_xc_meta(XC_Functional::get_func_id(), + rho_basis->nrxx, + ucell_in.omega, + ucell_in.tpiba, + chr); // etxc = std::get<0>(etxc_vtxc_v); // vtxc = std::get<1>(etxc_vtxc_v); @@ -112,15 +113,14 @@ void Forces::cal_force_cc(ModuleBase::matrix& forcecc, std::vector gv_y(rho_basis->npw); std::vector gv_z(rho_basis->npw); std::vector rhocgigg_vec(rho_basis->npw); - double *gv_x_d = nullptr; - double *gv_y_d = nullptr; - double *gv_z_d = nullptr; - double *force_d = nullptr; - double *rhocgigg_vec_d = nullptr; + double* gv_x_d = nullptr; + double* gv_y_d = nullptr; + double* gv_z_d = nullptr; + double* force_d = nullptr; + double* rhocgigg_vec_d = nullptr; std::complex* psiv_d = nullptr; this->device = base_device::get_device_type(this->ctx); - #ifdef _OPENMP #pragma omp parallel for #endif @@ -131,20 +131,20 @@ void Forces::cal_force_cc(ModuleBase::matrix& forcecc, gv_z[ig] = rho_basis->gcar[ig].z; } - if(this->device == base_device::GpuDevice ) { - resmem_var_op()(gv_x_d, rho_basis->npw); + if (this->device == base_device::GpuDevice) + { + resmem_var_op()(gv_x_d, rho_basis->npw); resmem_var_op()(gv_y_d, rho_basis->npw); resmem_var_op()(gv_z_d, rho_basis->npw); resmem_var_op()(rhocgigg_vec_d, rho_basis->npw); resmem_complex_op()(psiv_d, rho_basis->nmaxgr); resmem_var_op()(force_d, 3); - syncmem_var_h2d_op()(gv_x_d, gv_x.data(), rho_basis->npw); + syncmem_var_h2d_op()(gv_x_d, gv_x.data(), rho_basis->npw); syncmem_var_h2d_op()(gv_y_d, gv_y.data(), rho_basis->npw); syncmem_var_h2d_op()(gv_z_d, gv_z.data(), rho_basis->npw); syncmem_complex_h2d_op()(psiv_d, psiv, rho_basis->nmaxgr); - } - + } for (int it = 0; it < ucell_in.ntype; ++it) { @@ -169,13 +169,14 @@ void Forces::cal_force_cc(ModuleBase::matrix& forcecc, #ifdef _OPENMP #pragma omp parallel for -#endif +#endif for (int ig = 0; ig < rho_basis->npw; ig++) { rhocgigg_vec[ig] = rhocg[rho_basis->ig2igg[ig]]; } - if(this->device == base_device::GpuDevice ) { + if (this->device == base_device::GpuDevice) + { syncmem_var_h2d_op()(rhocgigg_vec_d, rhocgigg_vec.data(), rho_basis->npw); } for (int ia = 0; ia < ucell_in.atoms[it].na; ++ia) @@ -185,19 +186,37 @@ void Forces::cal_force_cc(ModuleBase::matrix& forcecc, int iat = ucell_in.itia2iat(it, ia); double force[3] = {0, 0, 0}; - if(this->device == base_device::GpuDevice ) { + if (this->device == base_device::GpuDevice) + { syncmem_var_h2d_op()(force_d, force, 3); - hamilt::cal_force_npw_op()( - psiv_d, gv_x_d, gv_y_d, gv_z_d, rhocgigg_vec_d, force_d, pos.x, pos.y, pos.z, - rho_basis->npw, ucell_in.omega, ucell_in.tpiba - ); - syncmem_var_d2h_op()(force, force_d, 3); - - } else { - hamilt::cal_force_npw_op()( - psiv, gv_x.data(), gv_y.data(), gv_z.data(), rhocgigg_vec.data(), force, pos.x, pos.y, pos.z, - rho_basis->npw, ucell_in.omega, ucell_in.tpiba - ); + hamilt::cal_force_npw_op()(psiv_d, + gv_x_d, + gv_y_d, + gv_z_d, + rhocgigg_vec_d, + force_d, + pos.x, + pos.y, + pos.z, + rho_basis->npw, + ucell_in.omega, + ucell_in.tpiba); + syncmem_var_d2h_op()(force, force_d, 3); + } + else + { + hamilt::cal_force_npw_op()(psiv, + gv_x.data(), + gv_y.data(), + gv_z.data(), + rhocgigg_vec.data(), + force, + pos.x, + pos.y, + pos.z, + rho_basis->npw, + ucell_in.omega, + ucell_in.tpiba); } { @@ -206,7 +225,6 @@ void Forces::cal_force_cc(ModuleBase::matrix& forcecc, forcecc(iat, 2) += force[2]; } } - } } if (this->device == base_device::GpuDevice) @@ -220,116 +238,130 @@ void Forces::cal_force_cc(ModuleBase::matrix& forcecc, } delete[] rhocg; - delete[] psiv; // mohan fix bug 2012-03-22 + delete[] psiv; // mohan fix bug 2012-03-22 Parallel_Reduce::reduce_pool(forcecc.c, forcecc.nr * forcecc.nc); // qianrui fix a bug for kpar > 1 ModuleBase::timer::tick("Forces", "cal_force_cc"); return; } - - -template -void Forces::deriv_drhoc -( - const bool &numeric, - const int mesh, - const FPTYPE *r, - const FPTYPE *rab, - const FPTYPE *rhoc, - FPTYPE *drhocg, - const ModulePW::PW_Basis* const rho_basis, - int type, - const UnitCell& ucell_in -) +template +void Forces::deriv_drhoc(const bool& numeric, + const int mesh, + const FPTYPE* r, + const FPTYPE* rab, + const FPTYPE* rhoc, + FPTYPE* drhocg, + const ModulePW::PW_Basis* const rho_basis, + int type, + const UnitCell& ucell_in) { - int igl0; - double gx = 0, rhocg1 = 0; - //double *aux = new double[mesh]; - std::vector aux(mesh); - this->device = base_device::get_device_type(this->ctx); - // the modulus of g for a given shell - // the fourier transform - // auxiliary memory for integration - //double *gx_arr = new double[rho_basis->ngg]; - std::vector gx_arr(rho_basis->ngg); - double *gx_arr_d = nullptr; - // counter on radial mesh points - // counter on g shells - // lower limit for loop on ngl - - // - // G=0 term - // - if(type == 0){ - if (rho_basis->gg_uniq[0] < 1.0e-8) - { - drhocg [0] = 0.0; - igl0 = 1; - } - else - { - igl0 = 0; - } - } else { - if (rho_basis->gg_uniq[0] < 1.0e-8) - { - for (int ir = 0;ir < mesh; ir++) - { - aux [ir] = r [ir] * r [ir] * rhoc [ir]; - } - ModuleBase::Integral::Simpson_Integral(mesh, aux.data(), rab, rhocg1); - drhocg [0] = ModuleBase::FOUR_PI * rhocg1 / ucell_in.omega; - igl0 = 1; - } - else - { - igl0 = 0; - } - } - - - // - // G <> 0 term - //] + int igl0; + double gx = 0, rhocg1 = 0; + // double *aux = new double[mesh]; + std::vector aux(mesh); + this->device = base_device::get_device_type(this->ctx); + // the modulus of g for a given shell + // the fourier transform + // auxiliary memory for integration + // double *gx_arr = new double[rho_basis->ngg]; + std::vector gx_arr(rho_basis->ngg); + double* gx_arr_d = nullptr; + // counter on radial mesh points + // counter on g shells + // lower limit for loop on ngl + + // + // G=0 term + // + if (type == 0) + { + if (rho_basis->gg_uniq[0] < 1.0e-8) + { + drhocg[0] = 0.0; + igl0 = 1; + } + else + { + igl0 = 0; + } + } + else + { + if (rho_basis->gg_uniq[0] < 1.0e-8) + { + for (int ir = 0; ir < mesh; ir++) + { + aux[ir] = r[ir] * r[ir] * rhoc[ir]; + } + ModuleBase::Integral::Simpson_Integral(mesh, aux.data(), rab, rhocg1); + drhocg[0] = ModuleBase::FOUR_PI * rhocg1 / ucell_in.omega; + igl0 = 1; + } + else + { + igl0 = 0; + } + } + + // + // G <> 0 term + //] #ifdef _OPENMP #pragma omp parallel for #endif - for(int igl = igl0;igl< rho_basis->ngg;igl++) - { - gx_arr[igl] = sqrt(rho_basis->gg_uniq[igl] * ucell_in.tpiba2); - } - - double *r_d = nullptr; - double *rhoc_d = nullptr; - double *rab_d = nullptr; - double *aux_d = nullptr; - double *drhocg_d = nullptr; - if(this->device == base_device::GpuDevice ) { - resmem_var_op()(r_d, mesh); - resmem_var_op()(rhoc_d, mesh); - resmem_var_op()(rab_d, mesh); - - resmem_var_op()(aux_d, mesh); - resmem_var_op()(gx_arr_d, rho_basis->ngg); - resmem_var_op()(drhocg_d, rho_basis->ngg); - - syncmem_var_h2d_op()(gx_arr_d, gx_arr.data(), rho_basis->ngg); - syncmem_var_h2d_op()(r_d, r, mesh); - syncmem_var_h2d_op()(rab_d, rab, mesh); - syncmem_var_h2d_op()(rhoc_d, rhoc, mesh); - } - - if(this->device == base_device::GpuDevice) { - hamilt::cal_stress_drhoc_aux_op()( - r_d,rhoc_d,gx_arr_d+igl0,rab_d,drhocg_d+igl0,mesh,igl0,rho_basis->ngg-igl0,ucell_in.omega,type); - syncmem_var_d2h_op()(drhocg+igl0, drhocg_d+igl0, rho_basis->ngg-igl0); - - - - } else { - hamilt::cal_stress_drhoc_aux_op()( - r,rhoc,gx_arr.data()+igl0,rab,drhocg+igl0,mesh,igl0,rho_basis->ngg-igl0,ucell_in.omega,type); + for (int igl = igl0; igl < rho_basis->ngg; igl++) + { + gx_arr[igl] = sqrt(rho_basis->gg_uniq[igl] * ucell_in.tpiba2); + } + + double* r_d = nullptr; + double* rhoc_d = nullptr; + double* rab_d = nullptr; + double* aux_d = nullptr; + double* drhocg_d = nullptr; + if (this->device == base_device::GpuDevice) + { + resmem_var_op()(r_d, mesh); + resmem_var_op()(rhoc_d, mesh); + resmem_var_op()(rab_d, mesh); + + resmem_var_op()(aux_d, mesh); + resmem_var_op()(gx_arr_d, rho_basis->ngg); + resmem_var_op()(drhocg_d, rho_basis->ngg); + + syncmem_var_h2d_op()(gx_arr_d, gx_arr.data(), rho_basis->ngg); + syncmem_var_h2d_op()(r_d, r, mesh); + syncmem_var_h2d_op()(rab_d, rab, mesh); + syncmem_var_h2d_op()(rhoc_d, rhoc, mesh); + } + + if (this->device == base_device::GpuDevice) + { + hamilt::cal_stress_drhoc_aux_op()(r_d, + rhoc_d, + gx_arr_d + igl0, + rab_d, + drhocg_d + igl0, + mesh, + igl0, + rho_basis->ngg - igl0, + ucell_in.omega, + type); + syncmem_var_d2h_op()(drhocg + igl0, drhocg_d + igl0, rho_basis->ngg - igl0); + } + else + { + hamilt::cal_stress_drhoc_aux_op()(r, + rhoc, + gx_arr.data() + igl0, + rab, + drhocg + igl0, + mesh, + igl0, + rho_basis->ngg - igl0, + ucell_in.omega, + type); } delmem_var_op()(r_d); @@ -340,7 +372,6 @@ void Forces::deriv_drhoc return; } - template class Forces; #if ((defined __CUDA) || (defined __ROCM)) template class Forces; diff --git a/source/module_hamilt_pw/hamilt_pwdft/forces_nl.cpp b/source/module_hamilt_pw/hamilt_pwdft/forces_nl.cpp index bd615f0eef..86f9e95d84 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/forces_nl.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/forces_nl.cpp @@ -1,7 +1,7 @@ #include "forces.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_hamilt_pw/hamilt_pwdft/fs_nonlocal_tools.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" #ifdef _OPENMP #include @@ -49,13 +49,13 @@ void Forces::cal_force_nl(ModuleBase::matrix& forcenl, const int npm = nbands_occ; nl_tools.cal_vkb(ik, max_nbands); // calculate becp = for all beta functions - nl_tools.cal_becp(ik, npm, &psi_in[0](ik,0,0)); + nl_tools.cal_becp(ik, npm, &psi_in[0](ik, 0, 0)); nl_tools.reduce_pool_becp(max_nbands); for (int ipol = 0; ipol < 3; ipol++) { nl_tools.cal_vkb_deri_f(ik, max_nbands, ipol); // calculate dbecp = for all beta functions - nl_tools.cal_dbecp_f(ik, max_nbands, npm, ipol, &psi_in[0](ik,0,0)); + nl_tools.cal_dbecp_f(ik, max_nbands, npm, ipol, &psi_in[0](ik, 0, 0)); nl_tools.revert_vkb(ik, ipol); } // calculate the force_i = \sum_{n,k}f_{nk}\sum_I \sum_{lm,l'm'}D_{l,l'}^{I} becp * dbecp_i diff --git a/source/module_hamilt_pw/hamilt_pwdft/forces_onsite.cpp b/source/module_hamilt_pw/hamilt_pwdft/forces_onsite.cpp index 36f90f0001..bc2943a9e1 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/forces_onsite.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/forces_onsite.cpp @@ -1,21 +1,21 @@ #include "forces.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" -#include "module_hamilt_pw/hamilt_pwdft/onsite_projector.h" +#include "module_hamilt_lcao/module_deltaspin/spin_constrain.h" +#include "module_hamilt_lcao/module_dftu/dftu.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/force_op.h" +#include "module_hamilt_pw/hamilt_pwdft/onsite_projector.h" #include "module_parameter/parameter.h" -#include "module_hamilt_lcao/module_dftu/dftu.h" -#include "module_hamilt_lcao/module_deltaspin/spin_constrain.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" template void Forces::cal_force_onsite(ModuleBase::matrix& force_onsite, - const ModuleBase::matrix& wg, - const ModulePW::PW_Basis_K* wfc_basis, - const UnitCell& ucell_in, - const psi::Psi, Device>* psi_in) + const ModuleBase::matrix& wg, + const ModulePW::PW_Basis_K* wfc_basis, + const UnitCell& ucell_in, + const psi::Psi, Device>* psi_in) { ModuleBase::TITLE("Forces", "cal_force_onsite"); - if(psi_in == nullptr || wfc_basis == nullptr) + if (psi_in == nullptr || wfc_basis == nullptr) { return; } @@ -51,18 +51,25 @@ void Forces::cal_force_onsite(ModuleBase::matrix& force_onsite, } // calculate the force_i = \sum_{n,k}f_{nk}\sum_I \sum_{lm,l'm'}D_{l,l'}^{I} becp * dbecp_i // force for DFT+U - if(PARAM.inp.dft_plus_u) + if (PARAM.inp.dft_plus_u) { auto* dftu = ModuleDFTU::DFTU::get_instance(); - onsite_p->get_fs_tools()->cal_force_dftu(ik, npm, force, dftu->orbital_corr.data(), dftu->get_eff_pot_pw(0), dftu->get_size_eff_pot_pw(), wg.c); + onsite_p->get_fs_tools()->cal_force_dftu(ik, + npm, + force, + dftu->orbital_corr.data(), + dftu->get_eff_pot_pw(0), + dftu->get_size_eff_pot_pw(), + wg.c); } - if(PARAM.inp.sc_mag_switch) + if (PARAM.inp.sc_mag_switch) { - spinconstrain::SpinConstrain>& sc = spinconstrain::SpinConstrain>::getScInstance(); + spinconstrain::SpinConstrain>& sc + = spinconstrain::SpinConstrain>::getScInstance(); const std::vector>& lambda = sc.get_sc_lambda(); onsite_p->get_fs_tools()->cal_force_dspin(ik, npm, force, lambda.data(), wg.c); } - + } // end ik syncmem_var_d2h_op()(force_onsite.c, force, force_onsite.nr * force_onsite.nc); diff --git a/source/module_hamilt_pw/hamilt_pwdft/forces_scc.cpp b/source/module_hamilt_pw/hamilt_pwdft/forces_scc.cpp index 7928d38b22..3ea725b3c6 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/forces_scc.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/forces_scc.cpp @@ -2,36 +2,36 @@ #include "module_io/output_log.h" #include "stress_func.h" // new -#include "module_base/complexmatrix.h" -#include "module_base/libm/libm.h" -#include "module_base/math_integral.h" -#include "module_base/mathzone.h" -#include "module_base/timer.h" -#include "module_base/tool_threading.h" #include "module_elecstate/module_pot/efield.h" #include "module_elecstate/module_pot/gatefield.h" #include "module_hamilt_general/module_ewald/H_Ewald_pw.h" #include "module_hamilt_general/module_surchem/surchem.h" #include "module_hamilt_general/module_vdw/vdw.h" +#include "source_base/complexmatrix.h" +#include "source_base/libm/libm.h" +#include "source_base/math_integral.h" +#include "source_base/mathzone.h" +#include "source_base/timer.h" +#include "source_base/tool_threading.h" #ifdef _OPENMP #include #endif - - template void Forces::cal_force_scc(ModuleBase::matrix& forcescc, const ModulePW::PW_Basis* const rho_basis, const ModuleBase::matrix& vnew, const bool vnew_exist, const bool* numeric, - const UnitCell& ucell_in) { + const UnitCell& ucell_in) +{ ModuleBase::TITLE("Forces", "cal_force_scc"); ModuleBase::timer::tick("Forces", "cal_force_scc"); // for orbital free case - if (!vnew_exist) { + if (!vnew_exist) + { ModuleBase::timer::tick("Forces", "cal_force_scc"); return; } @@ -41,88 +41,93 @@ void Forces::cal_force_scc(ModuleBase::matrix& forcescc, const int nrxx = vnew.nc; const int nspin = vnew.nr; - if (nspin == 1 || nspin == 4) { + if (nspin == 1 || nspin == 4) + { #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for (int ir = 0; ir < nrxx; ir++) { + for (int ir = 0; ir < nrxx; ir++) + { psic[ir] = vnew(0, ir); } - } else { + } + else + { int isup = 0; int isdw = 1; #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for (int ir = 0; ir < nrxx; ir++) { + for (int ir = 0; ir < nrxx; ir++) + { psic[ir] = (vnew(isup, ir) + vnew(isdw, ir)) * 0.5; } } int ndm = 0; - for (int it = 0; it < ucell_in.ntype; it++) { - if (ndm < ucell_in.atoms[it].ncpp.msh) { + for (int it = 0; it < ucell_in.ntype; it++) + { + if (ndm < ucell_in.atoms[it].ncpp.msh) + { ndm = ucell_in.atoms[it].ncpp.msh; } } // work space - std::vector rhocgnt(rho_basis->ngg); + std::vector rhocgnt(rho_basis->ngg); ModuleBase::GlobalFunc::ZEROS(rhocgnt.data(), rho_basis->ngg); rho_basis->real2recip(psic.data(), psic.data()); int igg0 = 0; const int ig0 = rho_basis->ig_gge0; - if (rho_basis->gg_uniq[0] < 1.0e-8) { + if (rho_basis->gg_uniq[0] < 1.0e-8) + { igg0 = 1; -} + } double fact = 2.0; - for (int nt = 0; nt < ucell_in.ntype; nt++) { + for (int nt = 0; nt < ucell_in.ntype; nt++) + { // Here we compute the G.ne.0 term const int mesh = ucell_in.atoms[nt].ncpp.msh; this->deriv_drhoc_scc(numeric, - mesh, - ucell_in.atoms[nt].ncpp.r.data(), - ucell_in.atoms[nt].ncpp.rab.data(), - ucell_in.atoms[nt].ncpp.rho_at.data(), - rhocgnt.data(), - rho_basis, - ucell_in); + mesh, + ucell_in.atoms[nt].ncpp.r.data(), + ucell_in.atoms[nt].ncpp.rab.data(), + ucell_in.atoms[nt].ncpp.rho_at.data(), + rhocgnt.data(), + rho_basis, + ucell_in); int iat = 0; - for (int it = 0; it < ucell_in.ntype; it++) { - for (int ia = 0; ia < ucell_in.atoms[it].na; ia++) { - if (nt == it) { - const ModuleBase::Vector3 pos - = ucell_in.atoms[it].tau[ia]; - double &force0 = forcescc(iat, 0), - &force1 = forcescc(iat, 1), - &force2 = forcescc(iat, 2); + for (int it = 0; it < ucell_in.ntype; it++) + { + for (int ia = 0; ia < ucell_in.atoms[it].na; ia++) + { + if (nt == it) + { + const ModuleBase::Vector3 pos = ucell_in.atoms[it].tau[ia]; + double &force0 = forcescc(iat, 0), &force1 = forcescc(iat, 1), &force2 = forcescc(iat, 2); #ifdef _OPENMP #pragma omp parallel for reduction(+ : force0) reduction(+ : force1) reduction(+ : force2) #endif - for (int ig = 0; ig < rho_basis->npw; ++ig) { - if (ig == ig0) { + for (int ig = 0; ig < rho_basis->npw; ++ig) + { + if (ig == ig0) + { continue; -} - const ModuleBase::Vector3 gv - = rho_basis->gcar[ig]; - const double rhocgntigg - = rhocgnt[rho_basis->ig2igg[ig]]; + } + const ModuleBase::Vector3 gv = rho_basis->gcar[ig]; + const double rhocgntigg = rhocgnt[rho_basis->ig2igg[ig]]; const double arg = ModuleBase::TWO_PI * (gv * pos); double sinp, cosp; ModuleBase::libm::sincos(arg, &sinp, &cosp); - const std::complex cpm - = std::complex(sinp, cosp) * conj(psic[ig]); - - force0 += fact * rhocgntigg * ucell_in.tpiba - * gv.x * cpm.real(); - force1 += fact * rhocgntigg * ucell_in.tpiba - * gv.y * cpm.real(); - force2 += fact * rhocgntigg * ucell_in.tpiba - * gv.z * cpm.real(); + const std::complex cpm = std::complex(sinp, cosp) * conj(psic[ig]); + + force0 += fact * rhocgntigg * ucell_in.tpiba * gv.x * cpm.real(); + force1 += fact * rhocgntigg * ucell_in.tpiba * gv.y * cpm.real(); + force2 += fact * rhocgntigg * ucell_in.tpiba * gv.z * cpm.real(); } } iat++; @@ -130,23 +135,22 @@ void Forces::cal_force_scc(ModuleBase::matrix& forcescc, } } - Parallel_Reduce::reduce_pool(forcescc.c, forcescc.nr * forcescc.nc); ModuleBase::timer::tick("Forces", "cal_force_scc"); return; } - template void Forces::deriv_drhoc_scc(const bool& numeric, - const int mesh, - const FPTYPE* r, - const FPTYPE* rab, - const FPTYPE* rhoc, - FPTYPE* drhocg, - const ModulePW::PW_Basis* const rho_basis, - const UnitCell& ucell_in) { + const int mesh, + const FPTYPE* r, + const FPTYPE* rab, + const FPTYPE* rhoc, + FPTYPE* drhocg, + const ModulePW::PW_Basis* const rho_basis, + const UnitCell& ucell_in) +{ int igl0 = 0; double gx = 0; double rhocg1 = 0; @@ -154,7 +158,7 @@ void Forces::deriv_drhoc_scc(const bool& numeric, /// the modulus of g for a given shell /// the fourier transform /// auxiliary memory for integration - std::vector gx_arr(rho_basis->ngg); + std::vector gx_arr(rho_basis->ngg); double* gx_arr_d = nullptr; /// counter on radial mesh points /// counter on g shells @@ -163,13 +167,15 @@ void Forces::deriv_drhoc_scc(const bool& numeric, /// /// G=0 term /// - if (rho_basis->gg_uniq[0] < 1.0e-8) { + if (rho_basis->gg_uniq[0] < 1.0e-8) + { drhocg[0] = 0.0; igl0 = 1; - } else { + } + else + { igl0 = 0; } - /// /// G <> 0 term @@ -178,16 +184,18 @@ void Forces::deriv_drhoc_scc(const bool& numeric, #ifdef _OPENMP #pragma omp parallel for #endif - for (int igl = igl0; igl < rho_basis->ngg; igl++) { + for (int igl = igl0; igl < rho_basis->ngg; igl++) + { gx_arr[igl] = sqrt(rho_basis->gg_uniq[igl]) * ucell_in.tpiba; } - double *r_d = nullptr; - double *rhoc_d = nullptr; - double *rab_d = nullptr; - double *aux_d = nullptr; - double *drhocg_d = nullptr; - if (this->device == base_device::GpuDevice) { + double* r_d = nullptr; + double* rhoc_d = nullptr; + double* rab_d = nullptr; + double* aux_d = nullptr; + double* drhocg_d = nullptr; + if (this->device == base_device::GpuDevice) + { resmem_var_op()(r_d, mesh); resmem_var_op()(rhoc_d, mesh); resmem_var_op()(rab_d, mesh); @@ -196,24 +204,39 @@ void Forces::deriv_drhoc_scc(const bool& numeric, resmem_var_op()(gx_arr_d, rho_basis->ngg); resmem_var_op()(drhocg_d, rho_basis->ngg); - syncmem_var_h2d_op()(gx_arr_d, - gx_arr.data(), - rho_basis->ngg); + syncmem_var_h2d_op()(gx_arr_d, gx_arr.data(), rho_basis->ngg); syncmem_var_h2d_op()(r_d, r, mesh); syncmem_var_h2d_op()(rab_d, rab, mesh); syncmem_var_h2d_op()(rhoc_d, rhoc, mesh); } - if(this->device == base_device::GpuDevice) { - hamilt::cal_stress_drhoc_aux_op()( - r_d,rhoc_d,gx_arr_d+igl0,rab_d,drhocg_d+igl0,mesh,igl0,rho_basis->ngg-igl0,ucell_in.omega,2); - syncmem_var_d2h_op()(drhocg+igl0, drhocg_d+igl0, rho_basis->ngg-igl0); - - } else { - hamilt::cal_stress_drhoc_aux_op()( - r,rhoc,gx_arr.data()+igl0,rab,drhocg+igl0,mesh,igl0,rho_basis->ngg-igl0,ucell_in.omega,2); - - } + if (this->device == base_device::GpuDevice) + { + hamilt::cal_stress_drhoc_aux_op()(r_d, + rhoc_d, + gx_arr_d + igl0, + rab_d, + drhocg_d + igl0, + mesh, + igl0, + rho_basis->ngg - igl0, + ucell_in.omega, + 2); + syncmem_var_d2h_op()(drhocg + igl0, drhocg_d + igl0, rho_basis->ngg - igl0); + } + else + { + hamilt::cal_stress_drhoc_aux_op()(r, + rhoc, + gx_arr.data() + igl0, + rab, + drhocg + igl0, + mesh, + igl0, + rho_basis->ngg - igl0, + ucell_in.omega, + 2); + } delmem_var_op()(r_d); delmem_var_op()(rhoc_d); diff --git a/source/module_hamilt_pw/hamilt_pwdft/forces_us.cpp b/source/module_hamilt_pw/hamilt_pwdft/forces_us.cpp index efa8009e63..4fa89d0153 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/forces_us.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/forces_us.cpp @@ -1,9 +1,9 @@ #include "forces.h" -#include "module_base/libm/libm.h" -#include "module_parameter/parameter.h" -#include "module_base/math_ylmreal.h" -#include "module_base/timer.h" #include "module_elecstate/elecstate_pw.h" +#include "module_parameter/parameter.h" +#include "source_base/libm/libm.h" +#include "source_base/math_ylmreal.h" +#include "source_base/timer.h" // This routine computes the contribution to atomic forces due // to the dependence of the Q function on the atomic position. diff --git a/source/module_hamilt_pw/hamilt_pwdft/fs_kin_tools.cpp b/source/module_hamilt_pw/hamilt_pwdft/fs_kin_tools.cpp index 00049866f9..853ae34abd 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/fs_kin_tools.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/fs_kin_tools.cpp @@ -1,6 +1,6 @@ #include "fs_kin_tools.h" -#include "module_base/parallel_reduce.h" +#include "source_base/parallel_reduce.h" namespace hamilt { template diff --git a/source/module_hamilt_pw/hamilt_pwdft/fs_kin_tools.h b/source/module_hamilt_pw/hamilt_pwdft/fs_kin_tools.h index b6327cf47f..4005dbc019 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/fs_kin_tools.h +++ b/source/module_hamilt_pw/hamilt_pwdft/fs_kin_tools.h @@ -1,11 +1,11 @@ #ifndef FS_KIN_TOOLS_H #define FS_KIN_TOOLS_H -#include "module_base/module_device/device.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/klist.h" -#include "module_cell/unitcell.h" #include "module_cell/module_symmetry/symmetry.h" +#include "module_cell/unitcell.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/stress_op.h" +#include "source_base/module_device/device.h" #include namespace hamilt @@ -28,7 +28,7 @@ class FS_Kin_tools /** * @brief calculate stress tensor for kinetic energy * stress = \sum_{G,k,i} wk(k) * gk_l(G) * gk_m(G) * d_kfac(G) * occ_i*|ppsi_i(G)|^2 - * + * * @param ik k-point index * @param npm number of bands * @param occ if use the occupation of the bands @@ -57,7 +57,6 @@ class FS_Kin_tools const UnitCell& ucell_; const int nksbands_; - private: using resmem_var_op = base_device::memory::resize_memory_op; using setmem_var_op = base_device::memory::set_memory_op; diff --git a/source/module_hamilt_pw/hamilt_pwdft/fs_nonlocal_tools.cpp b/source/module_hamilt_pw/hamilt_pwdft/fs_nonlocal_tools.cpp index 95e5d337bc..15317818d8 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/fs_nonlocal_tools.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/fs_nonlocal_tools.cpp @@ -1,16 +1,15 @@ #include "fs_nonlocal_tools.h" -#include "module_base/math_polyint.h" -#include "module_base/math_ylmreal.h" -#include "module_base/memory.h" -#include "module_base/parallel_device.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/force_op.h" #include "module_parameter/parameter.h" #include "nonlocal_maths.hpp" - -#include "module_base/parallel_comm.h" // different MPI worlds (POOL_WORLD) +#include "source_base/math_polyint.h" +#include "source_base/math_ylmreal.h" +#include "source_base/memory.h" +#include "source_base/parallel_comm.h" // different MPI worlds (POOL_WORLD) +#include "source_base/parallel_device.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" namespace hamilt { @@ -563,7 +562,6 @@ void FS_Nonlocal_tools::cal_vkb_deri_f(const int& ik, const int& // calculate the vkb_deri for ipol with the memory of ppcell_vkb cal_vkb1_nl_op()(this->ctx, nkb, npw, npw, npw, ipol, coeff, vkb_ptr, gcar, vkb_deri_ptr); - } template @@ -760,7 +758,7 @@ void FS_Nonlocal_tools::cal_force(const int& ik, { d_wg_ik = d_wg + this->nbands * ik; } - + cal_force_nl_op()(this->ctx, nondiagonal, npm, diff --git a/source/module_hamilt_pw/hamilt_pwdft/fs_nonlocal_tools.h b/source/module_hamilt_pw/hamilt_pwdft/fs_nonlocal_tools.h index 64a76e700d..a99a037f40 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/fs_nonlocal_tools.h +++ b/source/module_hamilt_pw/hamilt_pwdft/fs_nonlocal_tools.h @@ -1,14 +1,14 @@ #ifndef W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_MODULE_HAMILT_PW_HAMILT_PWDFT_FS_NONLOCAL_TOOLS_H #define W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_MODULE_HAMILT_PW_HAMILT_PWDFT_FS_NONLOCAL_TOOLS_H -#include "module_base/module_device/device.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/klist.h" #include "module_cell/unitcell.h" #include "module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/stress_op.h" -#include "module_base/kernels/math_kernel_op.h" #include "module_psi/psi.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/device.h" #include @@ -41,26 +41,26 @@ class FS_Nonlocal_tools /** * @brief calculate the projectors |beta> - * + * */ void cal_vkb(const int& ik, const int& nbdall); /** * @brief calculate the becp = for all beta functions - * + * * @param ik the index of k point * @param npm the number of bands * @param ppsi the wave functions * @param nbd0 the start index of the bands */ void cal_becp(const int& ik, const int& npm, const std::complex* ppsi, const int& nbd0 = 0); - + /// @brief mpi_allreduce the becp in the pool void reduce_pool_becp(const int& npm); /** * @brief calculate vkb_deri - * + * * @param ik the index of k point * @param nbdall the number of all bands, it decides the size of vkb_deri * @param ipol the i index of the direction @@ -71,7 +71,7 @@ class FS_Nonlocal_tools /** * @brief calculate the dbecp_{ij} = for all beta functions * stress_{ij} = -1/omega \sum_{n,k}f_{nk} \sum_I \sum_{lm,l'm'}D_{l,l'}^{I} becp * dbecp_{ij} also calculated - * + * * @param ik the index of k point * @param npm the number of bands * @param ppsi the wave functions @@ -81,7 +81,7 @@ class FS_Nonlocal_tools /** * @brief calculate stress - * + * * @param ik the index of k point * @param npm the number of bands * @param occ if use the occupation of the bands @@ -98,17 +98,17 @@ class FS_Nonlocal_tools FPTYPE* stress, const int& nbd0 = 0); - /** - * @brief calculate vkb_deri - * - * @param ik the index of k point - * @param nbdall the number of all bands, it decides the size of vkb_deri - * @param ipol the index of the polar - */ - void cal_vkb_deri_f(const int& ik, const int& nbdall, const int& ipol); + /** + * @brief calculate vkb_deri + * + * @param ik the index of k point + * @param nbdall the number of all bands, it decides the size of vkb_deri + * @param ipol the index of the polar + */ + void cal_vkb_deri_f(const int& ik, const int& nbdall, const int& ipol); /** * @brief calculate the dbecp_i = for all beta functions - * + * * @param ik the index of k point * @param nbdall the number of all bands, which is the dimension of dbecp and becp * @param npm the number of bands @@ -116,10 +116,15 @@ class FS_Nonlocal_tools * @param ppsi the wave functions * @param nbd0 the start index of the bands */ - void cal_dbecp_f(const int& ik, const int& nbdall, const int& npm, const int& ipol, const std::complex* ppsi, const int& nbd0 = 0); + void cal_dbecp_f(const int& ik, + const int& nbdall, + const int& npm, + const int& ipol, + const std::complex* ppsi, + const int& nbd0 = 0); /** * @brief calculate the force^I_i = - \sum_{n,k}f_{nk} \sum_{lm,l'm'}D_{l,l'}^{I} becp * dbecp_i - * + * * @param ik the index of k point * @param npm the number of bands * @param nbdall the number of all bands, which is the dimension of dbecp and becp @@ -127,7 +132,12 @@ class FS_Nonlocal_tools * @param occ if use the occupation of the bands * @param force [out] the force */ - void cal_force(const int& ik, const int& nbdall, const int& npm, const bool& occ, FPTYPE* force, const int& nbd0 = 0); + void cal_force(const int& ik, + const int& nbdall, + const int& npm, + const bool& occ, + FPTYPE* force, + const int& nbd0 = 0); /// @brief revert the 0-value dvkbs for calculating the dbecp_i in the force calculation void revert_vkb(const int& ik, const int& ipol); diff --git a/source/module_hamilt_pw/hamilt_pwdft/global.h b/source/module_hamilt_pw/hamilt_pwdft/global.h index d6f6be697f..0f75708198 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/global.h +++ b/source/module_hamilt_pw/hamilt_pwdft/global.h @@ -1,12 +1,12 @@ #ifndef GLOBAL_H #define GLOBAL_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" #include "module_elecstate/module_charge/charge_mixing.h" #include "module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h" #include "module_io/restart.h" #include "module_relax/relax_driver.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" #ifdef __EXX #include "module_hamilt_general/module_xc/exx_info.h" #include "module_ri/exx_lip.h" @@ -88,8 +88,11 @@ static const char* _cufftGetErrorString(cufftResult_t error) cudaError_t status = (func); \ if (status != cudaSuccess) \ { \ - printf("In File %s : CUDA API failed at line %d with error: %s (%d)\n", __FILE__, __LINE__, \ - cudaGetErrorString(status), status); \ + printf("In File %s : CUDA API failed at line %d with error: %s (%d)\n", \ + __FILE__, \ + __LINE__, \ + cudaGetErrorString(status), \ + status); \ } \ } @@ -98,8 +101,11 @@ static const char* _cufftGetErrorString(cufftResult_t error) cublasStatus_t status = (func); \ if (status != CUBLAS_STATUS_SUCCESS) \ { \ - printf("In File %s : CUBLAS API failed at line %d with error: %s (%d)\n", __FILE__, __LINE__, \ - _cublasGetErrorString(status), status); \ + printf("In File %s : CUBLAS API failed at line %d with error: %s (%d)\n", \ + __FILE__, \ + __LINE__, \ + _cublasGetErrorString(status), \ + status); \ } \ } @@ -108,8 +114,11 @@ static const char* _cufftGetErrorString(cufftResult_t error) cusolverStatus_t status = (func); \ if (status != CUSOLVER_STATUS_SUCCESS) \ { \ - printf("In File %s : CUSOLVER API failed at line %d with error: %s (%d)\n", __FILE__, __LINE__, \ - _cusolverGetErrorString(status), status); \ + printf("In File %s : CUSOLVER API failed at line %d with error: %s (%d)\n", \ + __FILE__, \ + __LINE__, \ + _cusolverGetErrorString(status), \ + status); \ } \ } @@ -118,8 +127,11 @@ static const char* _cufftGetErrorString(cufftResult_t error) cufftResult_t status = (func); \ if (status != CUFFT_SUCCESS) \ { \ - printf("In File %s : CUFFT API failed at line %d with error: %s (%d)\n", __FILE__, __LINE__, \ - _cufftGetErrorString(status), status); \ + printf("In File %s : CUFFT API failed at line %d with error: %s (%d)\n", \ + __FILE__, \ + __LINE__, \ + _cufftGetErrorString(status), \ + status); \ } \ } #endif // __CUDA @@ -214,8 +226,11 @@ static const char* _hipfftGetErrorString(hipfftResult_t error) hipError_t status = (func); \ if (status != hipSuccess) \ { \ - printf("In File %s : HIP API failed at line %d with error: %s (%d)\n", __FILE__, __LINE__, \ - hipGetErrorString(status), status); \ + printf("In File %s : HIP API failed at line %d with error: %s (%d)\n", \ + __FILE__, \ + __LINE__, \ + hipGetErrorString(status), \ + status); \ } \ } @@ -224,8 +239,11 @@ static const char* _hipfftGetErrorString(hipfftResult_t error) hipblasStatus_t status = (func); \ if (status != HIPBLAS_STATUS_SUCCESS) \ { \ - printf("In File %s : HIPBLAS API failed at line %d with error: %s (%d)\n", __FILE__, __LINE__, \ - _hipblasGetErrorString(status), status); \ + printf("In File %s : HIPBLAS API failed at line %d with error: %s (%d)\n", \ + __FILE__, \ + __LINE__, \ + _hipblasGetErrorString(status), \ + status); \ } \ } @@ -244,8 +262,11 @@ static const char* _hipfftGetErrorString(hipfftResult_t error) hipfftResult_t status = (func); \ if (status != HIPFFT_SUCCESS) \ { \ - printf("In File %s : HIPFFT API failed at line %d with error: %s (%d)\n", __FILE__, __LINE__, \ - _hipfftGetErrorString(status), status); \ + printf("In File %s : HIPFFT API failed at line %d with error: %s (%d)\n", \ + __FILE__, \ + __LINE__, \ + _hipfftGetErrorString(status), \ + status); \ } \ } #endif // __ROCM @@ -256,7 +277,7 @@ static const char* _hipfftGetErrorString(hipfftResult_t error) namespace GlobalC { //#ifdef __EXX - extern Exx_Info exx_info; +extern Exx_Info exx_info; //#endif } // namespace GlobalC diff --git a/source/module_hamilt_pw/hamilt_pwdft/hamilt_pw.cpp b/source/module_hamilt_pw/hamilt_pwdft/hamilt_pw.cpp index 07087eb50a..323bc506c1 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/hamilt_pw.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/hamilt_pw.cpp @@ -1,19 +1,16 @@ #include "hamilt_pw.h" -#include "module_parameter/parameter.h" -#include "module_base/blas_connector.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" - -#include "operator_pw/veff_pw.h" +#include "module_parameter/parameter.h" #include "operator_pw/ekinetic_pw.h" #include "operator_pw/meta_pw.h" #include "operator_pw/nonlocal_pw.h" #include "operator_pw/onsite_proj_pw.h" #include "operator_pw/op_exx_pw.h" - - +#include "operator_pw/veff_pw.h" +#include "source_base/blas_connector.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" namespace hamilt { @@ -23,7 +20,8 @@ HamiltPW::HamiltPW(elecstate::Potential* pot_in, ModulePW::PW_Basis_K* wfc_basis, K_Vectors* pkv, pseudopot_cell_vnl* nlpp, - const UnitCell* ucell): ucell(ucell) + const UnitCell* ucell) + : ucell(ucell) { this->classname = "HamiltPW"; this->ppcell = nlpp; @@ -40,7 +38,7 @@ HamiltPW::HamiltPW(elecstate::Potential* pot_in, // Operator* ekinetic = new Ekinetic> Operator* ekinetic = new Ekinetic>(tpiba2, gk2, wfc_basis->nks, wfc_basis->npwk_max); - if(this->ops == nullptr) + if (this->ops == nullptr) { this->ops = ekinetic; } @@ -60,7 +58,7 @@ HamiltPW::HamiltPW(elecstate::Potential* pot_in, { pot_register_in.push_back("hartree"); } - //no variable can choose xc, maybe it is necessary + // no variable can choose xc, maybe it is necessary pot_register_in.push_back("xc"); if (PARAM.inp.imp_sol) { @@ -74,17 +72,17 @@ HamiltPW::HamiltPW(elecstate::Potential* pot_in, { pot_register_in.push_back("gatefield"); } - //only Potential is not empty, Veff and Meta are available - if(pot_register_in.size()>0) + // only Potential is not empty, Veff and Meta are available + if (pot_register_in.size() > 0) { - //register Potential by gathered operator + // register Potential by gathered operator pot_in->pot_register(pot_register_in); Operator* veff = new Veff>(isk, pot_in->get_veff_smooth_data(), pot_in->get_veff_smooth().nr, pot_in->get_veff_smooth().nc, wfc_basis); - if(this->ops == nullptr) + if (this->ops == nullptr) { this->ops = veff; } @@ -103,9 +101,8 @@ HamiltPW::HamiltPW(elecstate::Potential* pot_in, } if (PARAM.inp.vnl_in_h) { - Operator* nonlocal - = new Nonlocal>(isk, this->ppcell, ucell, wfc_basis); - if(this->ops == nullptr) + Operator* nonlocal = new Nonlocal>(isk, this->ppcell, ucell, wfc_basis); + if (this->ops == nullptr) { this->ops = nonlocal; } @@ -114,10 +111,10 @@ HamiltPW::HamiltPW(elecstate::Potential* pot_in, this->ops->add(nonlocal); } } - if(PARAM.inp.sc_mag_switch || PARAM.inp.dft_plus_u) + if (PARAM.inp.sc_mag_switch || PARAM.inp.dft_plus_u) { Operator* onsite_proj - = new OnsiteProj>(isk, ucell, PARAM.inp.sc_mag_switch, (PARAM.inp.dft_plus_u>0)); + = new OnsiteProj>(isk, ucell, PARAM.inp.sc_mag_switch, (PARAM.inp.dft_plus_u > 0)); this->ops->add(onsite_proj); } if (GlobalC::exx_info.info_global.cal_exx) @@ -136,96 +133,108 @@ HamiltPW::HamiltPW(elecstate::Potential* pot_in, return; } -template +template HamiltPW::~HamiltPW() { - if(this->ops!= nullptr) + if (this->ops != nullptr) { delete this->ops; } } -template +template void HamiltPW::updateHk(const int ik) { - ModuleBase::TITLE("HamiltPW","updateHk"); + ModuleBase::TITLE("HamiltPW", "updateHk"); this->ops->init(ik); - ModuleBase::TITLE("HamiltPW","updateHk"); + ModuleBase::TITLE("HamiltPW", "updateHk"); } -template -template -HamiltPW::HamiltPW(const HamiltPW *hamilt) +template +template +HamiltPW::HamiltPW(const HamiltPW* hamilt) { this->classname = hamilt->classname; this->ppcell = hamilt->ppcell; this->qq_nt = hamilt->qq_nt; this->qq_so = hamilt->qq_so; this->vkb = hamilt->vkb; - OperatorPW, Device_in> * node = - reinterpret_cast, Device_in> *>(hamilt->ops); + OperatorPW, Device_in>* node + = reinterpret_cast, Device_in>*>(hamilt->ops); - while(node != nullptr) { - if (node->classname == "Ekinetic") { - Operator* ekinetic = - new Ekinetic>( - reinterpret_cast>*>(node)); - if(this->ops == nullptr) { + while (node != nullptr) + { + if (node->classname == "Ekinetic") + { + Operator* ekinetic = new Ekinetic>( + reinterpret_cast>*>(node)); + if (this->ops == nullptr) + { this->ops = ekinetic; } - else { + else + { this->ops->add(ekinetic); } // this->ops = reinterpret_cast*>(node); } - else if (node->classname == "Nonlocal") { - Operator* nonlocal = - new Nonlocal>( - reinterpret_cast>*>(node)); - if(this->ops == nullptr) { + else if (node->classname == "Nonlocal") + { + Operator* nonlocal = new Nonlocal>( + reinterpret_cast>*>(node)); + if (this->ops == nullptr) + { this->ops = nonlocal; } - else { + else + { this->ops->add(nonlocal); } } - else if (node->classname == "Veff") { - Operator* veff = - new Veff>( - reinterpret_cast>*>(node)); - if(this->ops == nullptr) { + else if (node->classname == "Veff") + { + Operator* veff + = new Veff>(reinterpret_cast>*>(node)); + if (this->ops == nullptr) + { this->ops = veff; } - else { + else + { this->ops->add(veff); } } - else if (node->classname == "Meta") { - Operator* meta = - new Meta>( - reinterpret_cast>*>(node)); - if(this->ops == nullptr) { + else if (node->classname == "Meta") + { + Operator* meta + = new Meta>(reinterpret_cast>*>(node)); + if (this->ops == nullptr) + { this->ops = meta; } - else { + else + { this->ops->add(meta); } } - else if (node->classname == "OnsiteProj") { - Operator* onsite_proj = - new OnsiteProj>( - reinterpret_cast>*>(node)); - if(this->ops == nullptr) { + else if (node->classname == "OnsiteProj") + { + Operator* onsite_proj = new OnsiteProj>( + reinterpret_cast>*>(node)); + if (this->ops == nullptr) + { this->ops = onsite_proj; } - else { + else + { this->ops->add(onsite_proj); } } - else { + else + { ModuleBase::WARNING_QUIT("HamiltPW", "Unrecognized Operator type!"); } - node = reinterpret_cast, Device_in> *>(node->next_op); + node = reinterpret_cast, Device_in>*>(node->next_op); } } @@ -382,8 +391,8 @@ void HamiltPW::sPsi(const T* psi_in, // psi } } -template -void HamiltPW::set_exx_helper(Exx_Helper &exx_helper) +template +void HamiltPW::set_exx_helper(Exx_Helper& exx_helper) { auto op = this->ops; while (op != nullptr) @@ -392,7 +401,6 @@ void HamiltPW::set_exx_helper(Exx_Helper &exx_helper) { exx_helper.op_exx = reinterpret_cast*>(op); exx_helper.set_op(); - } op = op->next_op; } diff --git a/source/module_hamilt_pw/hamilt_pwdft/hamilt_pw.h b/source/module_hamilt_pw/hamilt_pwdft/hamilt_pw.h index fe5abdc4ef..0552e88251 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/hamilt_pw.h +++ b/source/module_hamilt_pw/hamilt_pwdft/hamilt_pw.h @@ -1,14 +1,14 @@ #ifndef HAMILTPW_H #define HAMILTPW_H -#include "module_base/macros.h" #include "module_cell/klist.h" #include "module_elecstate/module_pot/potential_new.h" -#include "source_esolver/esolver_ks_pw.h" #include "module_hamilt_general/hamilt.h" #include "module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h" -#include "module_base/kernels/math_kernel_op.h" #include "module_hamilt_pw/hamilt_pwdft/module_exx_helper/exx_helper.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/macros.h" +#include "source_esolver/esolver_ks_pw.h" namespace hamilt { @@ -17,13 +17,18 @@ template class HamiltPW : public Hamilt { private: - // Note GetTypeReal::type will - // return T if T is real type(float, double), + // Note GetTypeReal::type will + // return T if T is real type(float, double), // otherwise return the real type of T(complex, complex) using Real = typename GetTypeReal::type; + public: - HamiltPW(elecstate::Potential* pot_in, ModulePW::PW_Basis_K* wfc_basis, K_Vectors* p_kv, pseudopot_cell_vnl* nlpp,const UnitCell* ucell); - template + HamiltPW(elecstate::Potential* pot_in, + ModulePW::PW_Basis_K* wfc_basis, + K_Vectors* p_kv, + pseudopot_cell_vnl* nlpp, + const UnitCell* ucell); + template explicit HamiltPW(const HamiltPW* hamilt); ~HamiltPW(); @@ -39,7 +44,7 @@ class HamiltPW : public Hamilt void set_exx_helper(Exx_Helper& exx_helper_in); -protected: + protected: // used in sPhi, which are calculated in hPsi or sPhi const pseudopot_cell_vnl* ppcell = nullptr; const UnitCell* const ucell = nullptr; diff --git a/source/module_hamilt_pw/hamilt_pwdft/kernels/cuda/force_op.cu b/source/module_hamilt_pw/hamilt_pwdft/kernels/cuda/force_op.cu index 5d0656d105..ffe6b20f5d 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/kernels/cuda/force_op.cu +++ b/source/module_hamilt_pw/hamilt_pwdft/kernels/cuda/force_op.cu @@ -1,72 +1,71 @@ #include "module_hamilt_pw/hamilt_pwdft/kernels/force_op.h" // #include "module_psi/kernels/device.h" -#include "module_base/module_device/types.h" +#include "source_base/module_device/types.h" +#include #include - -#include #include -#include -#include +#include +#include #define THREADS_PER_BLOCK 256 -namespace hamilt { - +namespace hamilt +{ template -__global__ void cal_vkb1_nl( - const int npwx, - const int vkb_nc, - const int nbasis, - const int ipol, - const thrust::complex NEG_IMAG_UNIT, - const thrust::complex *vkb, - const FPTYPE *gcar, - thrust::complex *vkb1) +__global__ void cal_vkb1_nl(const int npwx, + const int vkb_nc, + const int nbasis, + const int ipol, + const thrust::complex NEG_IMAG_UNIT, + const thrust::complex* vkb, + const FPTYPE* gcar, + thrust::complex* vkb1) { - thrust::complex *pvkb1 = vkb1 + blockIdx.x * npwx; - const thrust::complex *pvkb = vkb + blockIdx.x * vkb_nc; - for (int ig = threadIdx.x; ig < nbasis; ig += blockDim.x) { + thrust::complex* pvkb1 = vkb1 + blockIdx.x * npwx; + const thrust::complex* pvkb = vkb + blockIdx.x * vkb_nc; + for (int ig = threadIdx.x; ig < nbasis; ig += blockDim.x) + { pvkb1[ig] = pvkb[ig] * NEG_IMAG_UNIT * gcar[ig * 3 + ipol]; } } template -__global__ void cal_force_nl( - const bool nondiagonal, - const int ntype, - const int spin, - const int deeq_2, - const int deeq_3, - const int deeq_4, - const int forcenl_nc, - const int nbands, - const int nkb, - const int *atom_nh, - const int *atom_na, - const FPTYPE tpiba, - const FPTYPE *d_wg, - const bool occ, - const FPTYPE* d_ekb, - const FPTYPE* qq_nt, - const FPTYPE *deeq, - const thrust::complex *becp, - const thrust::complex *dbecp, - FPTYPE *force) +__global__ void cal_force_nl(const bool nondiagonal, + const int ntype, + const int spin, + const int deeq_2, + const int deeq_3, + const int deeq_4, + const int forcenl_nc, + const int nbands, + const int nkb, + const int* atom_nh, + const int* atom_na, + const FPTYPE tpiba, + const FPTYPE* d_wg, + const bool occ, + const FPTYPE* d_ekb, + const FPTYPE* qq_nt, + const FPTYPE* deeq, + const thrust::complex* becp, + const thrust::complex* dbecp, + FPTYPE* force) { const int ib = blockIdx.x / ntype; const int it = blockIdx.x % ntype; int iat = 0, sum = 0; - for (int ii = 0; ii < it; ii++) { + for (int ii = 0; ii < it; ii++) + { iat += atom_na[ii]; sum += atom_na[ii] * atom_nh[ii]; } int nproj = atom_nh[it]; FPTYPE fac; - if(occ) + if (occ) { fac = d_wg[ib] * 2.0 * tpiba; } @@ -79,40 +78,46 @@ __global__ void cal_force_nl( { ekb_now = d_ekb[ib]; } - for (int ia = 0; ia < atom_na[it]; ia++) { - for (int ip = threadIdx.x; ip < nproj; ip += blockDim.x) { + for (int ia = 0; ia < atom_na[it]; ia++) + { + for (int ip = threadIdx.x; ip < nproj; ip += blockDim.x) + { FPTYPE ps_qq = 0; - if(ekb_now != 0) + if (ekb_now != 0) { - ps_qq = - ekb_now * qq_nt[it * deeq_3 * deeq_4 + ip * deeq_4 + ip]; + ps_qq = -ekb_now * qq_nt[it * deeq_3 * deeq_4 + ip * deeq_4 + ip]; } // FPTYPE ps = GlobalC::ppcell.deeq[spin, iat, ip, ip]; FPTYPE ps = deeq[((spin * deeq_2 + iat) * deeq_3 + ip) * deeq_4 + ip] + ps_qq; const int inkb = sum + ip; - //out<<"\n ps = "< -#include #include -#include - +#include #include +#include +#include #define THREADS_PER_BLOCK 256 #define FULL_MASK 0xffffffff #define WARP_SIZE 32 -namespace hamilt{ +namespace hamilt +{ template -__forceinline__ -__device__ -void warp_reduce(FPTYPE & val) { - for (int offset = 16; offset > 0; offset >>= 1) { +__forceinline__ __device__ void warp_reduce(FPTYPE& val) +{ + for (int offset = 16; offset > 0; offset >>= 1) + { val += __shfl_down_sync(FULL_MASK, val, offset); } } template -__device__ static inline -thrust::complex conj(thrust::complex& in) { +__device__ static inline thrust::complex conj(thrust::complex& in) +{ return thrust::conj(in); } template -__global__ void cal_stress_mgga( - const int spin, - const int nrxx, - const T w1, - const thrust::complex * gradwfc, - T * crosstaus) +__global__ void cal_stress_mgga(const int spin, + const int nrxx, + const T w1, + const thrust::complex* gradwfc, + T* crosstaus) { int idx = threadIdx.x + blockIdx.x * blockDim.x; - if (idx >= nrxx) { return; } + if (idx >= nrxx) + { + return; + } int ipol = 0; - for (int ix = 0; ix < 3; ix++) { - for (int iy = 0; iy < ix + 1; iy++) { + for (int ix = 0; ix < 3; ix++) + { + for (int iy = 0; iy < ix + 1; iy++) + { crosstaus[spin * nrxx * 6 + ipol * nrxx + idx] += 2.0 * w1 - * (gradwfc[ix * nrxx + idx].real() * gradwfc[iy*nrxx + idx].real() - + gradwfc[ix * nrxx + idx].imag() * gradwfc[iy*nrxx + idx].imag()); + * (gradwfc[ix * nrxx + idx].real() * gradwfc[iy * nrxx + idx].real() + + gradwfc[ix * nrxx + idx].imag() * gradwfc[iy * nrxx + idx].imag()); ipol += 1; } } } template -__global__ void cal_dbecp_noevc_nl( - const int ipol, - const int jpol, - const int npw, - const int npwx, - const int ik, - const FPTYPE tpiba, - const FPTYPE *gcar, - const FPTYPE *kvec_c, - thrust::complex *vkbi, - thrust::complex *vkbj, - thrust::complex *vkb, - thrust::complex *vkb1, - thrust::complex *vkb2, - thrust::complex *dbecp_noevc) +__global__ void cal_dbecp_noevc_nl(const int ipol, + const int jpol, + const int npw, + const int npwx, + const int ik, + const FPTYPE tpiba, + const FPTYPE* gcar, + const FPTYPE* kvec_c, + thrust::complex* vkbi, + thrust::complex* vkbj, + thrust::complex* vkb, + thrust::complex* vkb1, + thrust::complex* vkb2, + thrust::complex* dbecp_noevc) { int i = blockIdx.x; const thrust::complex* pvkb0i = vkbi + i * npwx; @@ -73,60 +76,60 @@ __global__ void cal_dbecp_noevc_nl( thrust::complex* pvkb = nullptr; thrust::complex* pdbecp_noevc = dbecp_noevc + i * npwx; // third term of dbecp_noevc - //std::complex* pvkb = &vkb2(i,0); - //std::complex* pdbecp_noevc = &dbecp_noevc(i, 0); + // std::complex* pvkb = &vkb2(i,0); + // std::complex* pdbecp_noevc = &dbecp_noevc(i, 0); FPTYPE qvec[3] = {0, 0, 0}; for (int ig = threadIdx.x; ig < npw; ig += blockDim.x) { pvkb = vkb1 + i * npwx; qvec[ipol] = gcar[(ik * npwx + ig) * 3 + ipol] + kvec_c[ik * 3 + ipol]; qvec[jpol] = gcar[(ik * npwx + ig) * 3 + jpol] + kvec_c[ik * 3 + jpol]; - pvkb[ig] += 0.5 * qvec[ipol] * pvkb0j[ig] + - 0.5 * qvec[jpol] * pvkb0i[ig]; + pvkb[ig] += 0.5 * qvec[ipol] * pvkb0j[ig] + 0.5 * qvec[jpol] * pvkb0i[ig]; pdbecp_noevc[ig] -= 2.0 * pvkb[ig]; - if (ipol == jpol) { + if (ipol == jpol) + { pvkb = vkb + i * npwx; pdbecp_noevc[ig] -= pvkb[ig]; } pvkb = vkb2 + i * npwx; - for (int ii = 0; ii < 3; ii++) { + for (int ii = 0; ii < 3; ii++) + { qvec[ii] = gcar[(ik * npwx + ig) * 3 + ii] + kvec_c[ik * 3 + ii]; } FPTYPE qvec_norm2 = qvec[0] * qvec[0] + qvec[1] * qvec[1] + qvec[2] * qvec[2]; FPTYPE qm1 = qvec_norm2 > 1e-16 ? 1.0 / sqrt(qvec_norm2) : 0; - pdbecp_noevc[ig] -= 2.0 * pvkb[ig] * qvec[ipol] * - qvec[jpol] * qm1 * tpiba; + pdbecp_noevc[ig] -= 2.0 * pvkb[ig] * qvec[ipol] * qvec[jpol] * qm1 * tpiba; } // end ig } template -__global__ void cal_stress_nl( - const bool nondiagonal, - const int ipol, - const int jpol, - const int nkb, - const int ntype, - const int spin, - const int deeq_2, - const int deeq_3, - const int deeq_4, - const int *atom_nh, - const int *atom_na, - const FPTYPE *d_wg, - const bool occ, - const FPTYPE* d_ekb, - const FPTYPE* qq_nt, - const FPTYPE *deeq, - const thrust::complex *becp, - const thrust::complex *dbecp, - FPTYPE *stress) +__global__ void cal_stress_nl(const bool nondiagonal, + const int ipol, + const int jpol, + const int nkb, + const int ntype, + const int spin, + const int deeq_2, + const int deeq_3, + const int deeq_4, + const int* atom_nh, + const int* atom_na, + const FPTYPE* d_wg, + const bool occ, + const FPTYPE* d_ekb, + const FPTYPE* qq_nt, + const FPTYPE* deeq, + const thrust::complex* becp, + const thrust::complex* dbecp, + FPTYPE* stress) { int ib = blockIdx.x / ntype; int it = blockIdx.x % ntype; int iat = 0; int sum = 0; - for (int ii = 0; ii < it; ii++) { + for (int ii = 0; ii < it; ii++) + { iat += atom_na[ii]; sum += atom_na[ii] * atom_nh[ii]; } @@ -149,9 +152,11 @@ __global__ void cal_stress_nl( const int nproj = atom_nh[it]; for (int ia = 0; ia < atom_na[it]; ia++) { - for (int ii = threadIdx.x; ii < nproj * nproj; ii += blockDim.x) { + for (int ii = threadIdx.x; ii < nproj * nproj; ii += blockDim.x) + { const int ip1 = ii / nproj, ip2 = ii % nproj; - if(!nondiagonal && ip1 != ip2) { + if (!nondiagonal && ip1 != ip2) + { continue; } FPTYPE ps_qq = 0; @@ -162,16 +167,17 @@ __global__ void cal_stress_nl( const FPTYPE ps = deeq[((spin * deeq_2 + iat) * deeq_3 + ip1) * deeq_4 + ip2] + ps_qq; const int inkb1 = sum + ip1; const int inkb2 = sum + ip2; - //out<<"\n ps = "< @@ -108,7 +108,7 @@ struct cal_stress_nl_op for (int ib = 0; ib < nbands_occ; ib++) { FPTYPE ekb_now = 0.0; - if(d_ekb != nullptr) + if (d_ekb != nullptr) { ekb_now = d_ekb[ib]; } @@ -133,9 +133,9 @@ struct cal_stress_nl_op fac = d_wg[0]; } FPTYPE ps_qq = 0; - if(ekb_now != 0) + if (ekb_now != 0) { - ps_qq = - ekb_now * qq_nt[it * deeq_3 * deeq_4 + ip1 * deeq_4 + ip2]; + ps_qq = -ekb_now * qq_nt[it * deeq_3 * deeq_4 + ip1 * deeq_4 + ip2]; } FPTYPE ps = deeq[((spin * deeq_2 + iat + ia) * deeq_3 + ip1) * deeq_4 + ip2] + ps_qq; const int inkb1 = sum + ia * nproj + ip1; @@ -192,7 +192,7 @@ struct cal_stress_nl_op for (int ib = 0; ib < nbands_occ; ib++) { FPTYPE ekb_now = 0.0; - if(d_ekb != nullptr) + if (d_ekb != nullptr) { ekb_now = d_ekb[ib]; } @@ -202,7 +202,7 @@ struct cal_stress_nl_op { for (int ip2 = 0; ip2 < nproj; ip2++) { - const int ib2 = ib*2; + const int ib2 = ib * 2; FPTYPE fac; if (occ) { @@ -213,22 +213,29 @@ struct cal_stress_nl_op fac = d_wg[0]; } std::complex ps_qq = 0; - if(ekb_now != 0) + if (ekb_now != 0) { - ps_qq = - ekb_now * qq_nt[it * deeq_3 * deeq_4 + ip1 * deeq_4 + ip2]; + ps_qq = -ekb_now * qq_nt[it * deeq_3 * deeq_4 + ip1 * deeq_4 + ip2]; } std::complex ps0 = deeq_nc[((iat + ia) * deeq_3 + ip1) * deeq_4 + ip2] + ps_qq; - std::complex ps1 = deeq_nc[((1 * deeq_2 + iat + ia) * deeq_3 + ip1) * deeq_4 + ip2]; - std::complex ps2 = deeq_nc[((2 * deeq_2 + iat + ia) * deeq_3 + ip1) * deeq_4 + ip2]; - std::complex ps3 = deeq_nc[((3 * deeq_2 + iat + ia) * deeq_3 + ip1) * deeq_4 + ip2] + ps_qq; + std::complex ps1 + = deeq_nc[((1 * deeq_2 + iat + ia) * deeq_3 + ip1) * deeq_4 + ip2]; + std::complex ps2 + = deeq_nc[((2 * deeq_2 + iat + ia) * deeq_3 + ip1) * deeq_4 + ip2]; + std::complex ps3 + = deeq_nc[((3 * deeq_2 + iat + ia) * deeq_3 + ip1) * deeq_4 + ip2] + ps_qq; const int inkb1 = sum + ia * nproj + ip1; const int inkb2 = sum + ia * nproj + ip2; // out<<"\n ps = "< dbb0 = conj(dbecp[ib2 * nkb + inkb1]) * becp[ib2 * nkb + inkb2]; - const std::complex dbb1 = conj(dbecp[ib2 * nkb + inkb1]) * becp[(ib2+1) * nkb + inkb2]; - const std::complex dbb2 = conj(dbecp[(ib2+1) * nkb + inkb1]) * becp[ib2 * nkb + inkb2]; - const std::complex dbb3 = conj(dbecp[(ib2+1) * nkb + inkb1]) * becp[(ib2+1) * nkb + inkb2]; + const std::complex dbb0 + = conj(dbecp[ib2 * nkb + inkb1]) * becp[ib2 * nkb + inkb2]; + const std::complex dbb1 + = conj(dbecp[ib2 * nkb + inkb1]) * becp[(ib2 + 1) * nkb + inkb2]; + const std::complex dbb2 + = conj(dbecp[(ib2 + 1) * nkb + inkb1]) * becp[ib2 * nkb + inkb2]; + const std::complex dbb3 + = conj(dbecp[(ib2 + 1) * nkb + inkb1]) * becp[(ib2 + 1) * nkb + inkb2]; local_stress -= fac * (ps0 * dbb0 + ps1 * dbb1 + ps2 * dbb2 + ps3 * dbb3).real(); } } // end ip @@ -264,7 +271,7 @@ struct cal_stress_nl_op { const int orbital_l = orbital_corr[it]; const int nproj = atom_nh[it]; - if(orbital_l == -1) + if (orbital_l == -1) { sum += nproj * atom_na[it]; continue; @@ -277,7 +284,7 @@ struct cal_stress_nl_op { for (int ib = 0; ib < nbands_occ; ib++) { - const int ib2 = ib*2; + const int ib2 = ib * 2; FPTYPE fac = d_wg[ik * wg_nc + ib]; for (int ip1 = ip_begin; ip1 < ip_end; ip1++) { @@ -288,7 +295,7 @@ struct cal_stress_nl_op { const int m2 = ip2 - ip_begin; std::complex ps[4]; - for(int i = 0; i < 4; i++) + for (int i = 0; i < 4; i++) { ps[i] = vu[(i * tlp1_2 + m1 * tlp1 + m2)]; } @@ -300,16 +307,16 @@ struct cal_stress_nl_op const std::complex dbb3 = conj(dbecp[nkb + inkb1]) * becp[nkb + inkb2]; local_stress -= fac * (ps[0] * dbb0 + ps[1] * dbb1 + ps[2] * dbb2 + ps[3] * dbb3).real(); } - } // end ip - }// ib - vu += 4 * tlp1_2;// step for vu - }// ia + } // end ip + } // ib + vu += 4 * tlp1_2; // step for vu + } // ia sum += atom_na[it] * nproj; iat += atom_na[it]; } // end it *stress += local_stress; }; - // kernel for DeltaSpin + // kernel for DeltaSpin void operator()(const base_device::DEVICE_CPU* ctx, const int& nkb, const int& nbands_occ, @@ -332,13 +339,13 @@ struct cal_stress_nl_op for (int ia = 0; ia < atom_na[it]; ia++) { int iat = iat0 + ia; - const std::complex coefficients0(lambda[iat*3+2], 0.0); - const std::complex coefficients1(lambda[iat*3] , lambda[iat*3+1]); - const std::complex coefficients2(lambda[iat*3] , -1 * lambda[iat*3+1]); - const std::complex coefficients3(-1 * lambda[iat*3+2], 0.0); + const std::complex coefficients0(lambda[iat * 3 + 2], 0.0); + const std::complex coefficients1(lambda[iat * 3], lambda[iat * 3 + 1]); + const std::complex coefficients2(lambda[iat * 3], -1 * lambda[iat * 3 + 1]); + const std::complex coefficients3(-1 * lambda[iat * 3 + 2], 0.0); for (int ib = 0; ib < nbands_occ; ib++) { - const int ib2 = ib*2; + const int ib2 = ib * 2; FPTYPE fac = d_wg[ik * wg_nc + ib]; for (int ip = 0; ip < nproj; ip++) { @@ -348,10 +355,13 @@ struct cal_stress_nl_op const std::complex dbb1 = conj(dbecp[inkb1]) * becp[nkb + inkb1]; const std::complex dbb2 = conj(dbecp[nkb + inkb1]) * becp[inkb1]; const std::complex dbb3 = conj(dbecp[nkb + inkb1]) * becp[nkb + inkb1]; - local_stress -= fac * (coefficients0 * dbb0 + coefficients1 * dbb1 + coefficients2 * dbb2 + coefficients3 * dbb3).real(); + local_stress -= fac + * (coefficients0 * dbb0 + coefficients1 * dbb1 + coefficients2 * dbb2 + + coefficients3 * dbb3) + .real(); } // end ip - }// ib - }// ia + } // ib + } // ia sum += atom_na[it] * nproj; iat0 += atom_na[it]; } // end it @@ -531,35 +541,29 @@ struct cal_vq_deri_op } }; - template -void Simpson_Integral -( - const int mesh, - FPTYPE * func, - const FPTYPE * rab, - FPTYPE &asum -) +void Simpson_Integral(const int mesh, FPTYPE* func, const FPTYPE* rab, FPTYPE& asum) { - assert(mesh&1); + assert(mesh & 1); asum = 0.00; - const size_t end = mesh-2; - for( size_t i=1; i!=end; i+=2 ) + const size_t end = mesh - 2; + for (size_t i = 1; i != end; i += 2) { - const double f1 = func[i]*rab[i]; - asum += f1 + f1 + func[i+1]*rab[i+1]; + const double f1 = func[i] * rab[i]; + asum += f1 + f1 + func[i + 1] * rab[i + 1]; } - const double f1 = func[mesh-2]*rab[mesh-2]; - asum += f1+f1; - asum += asum; - asum += func[0]*rab[0] + func[mesh-1]*rab[mesh-1]; - asum /= 3.0; + const double f1 = func[mesh - 2] * rab[mesh - 2]; + asum += f1 + f1; + asum += asum; + asum += func[0] * rab[0] + func[mesh - 1] * rab[mesh - 1]; + asum /= 3.0; return; -}// end subroutine simpson +} // end subroutine simpson template -struct cal_stress_drhoc_aux_op { +struct cal_stress_drhoc_aux_op +{ void operator()(const FPTYPE* r, const FPTYPE* rhoc, const FPTYPE* gx_arr, @@ -574,64 +578,74 @@ struct cal_stress_drhoc_aux_op { #ifdef _OPENMP #pragma omp parallel - { + { #endif #ifdef _OPENMP #pragma omp for #endif - for(int igl = 0;igl< ngg;igl++) - { - FPTYPE rhocg1 = 0; - //FPTYPE *aux = new FPTYPE[mesh]; - std::vector aux(mesh); - for( int ir = 0;ir< mesh; ir++) + for (int igl = 0; igl < ngg; igl++) { - if(type ==0 ){ - aux [ir] = r [ir] * rhoc [ir] * (r [ir] * cos (gx_arr[igl] * r [ir] ) / gx_arr[igl] - sin (gx_arr[igl] * r [ir] ) / pow(gx_arr[igl],2)); - } else if(type == 1) { - aux [ir] = ir!=0 ? std::sin(gx_arr[igl] * r[ir]) / (gx_arr[igl] * r[ir]) : 1.0; - aux [ir] = r[ir] * r[ir] * rhoc [ir] * aux [ir]; - } else if(type == 2) { - aux [ir] = r[ir] < 1.0e-8 ? rhoc [ir] : rhoc [ir] * sin(gx_arr[igl] * r[ir]) / (gx_arr[igl] * r[ir]); - } else if(type == 3) { - FPTYPE sinp, cosp; - sinp = std::sin(gx_arr[igl] * r[ir]); - cosp = std::cos(gx_arr[igl] * r[ir]); - aux[ir] = rhoc [ir] * (r [ir] * cosp / gx_arr[igl] - sinp / pow(gx_arr[igl],2)); + FPTYPE rhocg1 = 0; + // FPTYPE *aux = new FPTYPE[mesh]; + std::vector aux(mesh); + for (int ir = 0; ir < mesh; ir++) + { + if (type == 0) + { + aux[ir] = r[ir] * rhoc[ir] + * (r[ir] * cos(gx_arr[igl] * r[ir]) / gx_arr[igl] + - sin(gx_arr[igl] * r[ir]) / pow(gx_arr[igl], 2)); + } + else if (type == 1) + { + aux[ir] = ir != 0 ? std::sin(gx_arr[igl] * r[ir]) / (gx_arr[igl] * r[ir]) : 1.0; + aux[ir] = r[ir] * r[ir] * rhoc[ir] * aux[ir]; + } + else if (type == 2) + { + aux[ir] + = r[ir] < 1.0e-8 ? rhoc[ir] : rhoc[ir] * sin(gx_arr[igl] * r[ir]) / (gx_arr[igl] * r[ir]); + } + else if (type == 3) + { + FPTYPE sinp, cosp; + sinp = std::sin(gx_arr[igl] * r[ir]); + cosp = std::cos(gx_arr[igl] * r[ir]); + aux[ir] = rhoc[ir] * (r[ir] * cosp / gx_arr[igl] - sinp / pow(gx_arr[igl], 2)); + } + } // ir + Simpson_Integral(mesh, aux.data(), rab, rhocg1); + if (type == 0) + { + drhocg[igl] = ModuleBase::FOUR_PI / omega * rhocg1; + } + else if (type == 1) + { + drhocg[igl] = ModuleBase::FOUR_PI * rhocg1 / omega; + } + else if (type == 2) + { + drhocg[igl] = rhocg1; + } + else if (type == 3) + { + rhocg1 *= ModuleBase::FOUR_PI / omega / 2.0 / gx_arr[igl]; + FPTYPE g2a = (gx_arr[igl] * gx_arr[igl]) / 4.0; + rhocg1 += ModuleBase::FOUR_PI / omega * gx_arr[ngg] * ModuleBase::libm::exp(-g2a) * (g2a + 1) + / pow(gx_arr[igl] * gx_arr[igl], 2); + drhocg[igl] = rhocg1; } - }//ir - Simpson_Integral(mesh, aux.data(), rab, rhocg1); - if (type == 0) - { - drhocg[igl] = ModuleBase::FOUR_PI / omega * rhocg1; - } - else if (type == 1) - { - drhocg[igl] = ModuleBase::FOUR_PI * rhocg1 / omega; - } - else if (type == 2) - { - drhocg[igl] = rhocg1; - } - else if (type == 3) - { - rhocg1 *= ModuleBase::FOUR_PI / omega / 2.0 / gx_arr[igl]; - FPTYPE g2a = (gx_arr[igl]*gx_arr[igl]) / 4.0; - rhocg1 += ModuleBase::FOUR_PI / omega * gx_arr[ngg] * ModuleBase::libm::exp(-g2a) * (g2a + 1) - / pow(gx_arr[igl] * gx_arr[igl], 2); - drhocg [igl] = rhocg1; } - } #ifdef _OPENMP } #endif } }; - template -struct cal_force_npw_op { +struct cal_force_npw_op +{ void operator()(const std::complex* psiv, const FPTYPE* gv_x, const FPTYPE* gv_y, @@ -673,7 +687,8 @@ struct cal_force_npw_op { }; template -struct cal_multi_dot_op { +struct cal_multi_dot_op +{ FPTYPE operator()(const int& npw, const FPTYPE& fac, const FPTYPE* gk1, @@ -774,7 +789,6 @@ template struct cal_force_npw_op; template struct cal_multi_dot_op; template struct cal_multi_dot_op; - // template struct prepare_vkb_deri_ptr_op; // template struct prepare_vkb_deri_ptr_op; } // namespace hamilt diff --git a/source/module_hamilt_pw/hamilt_pwdft/kernels/stress_op.h b/source/module_hamilt_pw/hamilt_pwdft/kernels/stress_op.h index 7fecd96d75..c5a59cca8e 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/kernels/stress_op.h +++ b/source/module_hamilt_pw/hamilt_pwdft/kernels/stress_op.h @@ -1,11 +1,10 @@ #ifndef SRC_PW_STRESS_MULTI_DEVICE_H #define SRC_PW_STRESS_MULTI_DEVICE_H #include "module_parameter/parameter.h" - #include "module_psi/psi.h" #include -#include +#include namespace hamilt { @@ -227,40 +226,49 @@ struct cal_vq_deri_op FPTYPE* vq); }; - template -struct cal_stress_drhoc_aux_op{ - void operator()( - const FPTYPE* r, const FPTYPE* rhoc, - const FPTYPE *gx_arr, const FPTYPE *rab, FPTYPE *drhocg, - const int mesh, const int igl0, const int ngg, const double omega, - int type - ); +struct cal_stress_drhoc_aux_op +{ + void operator()(const FPTYPE* r, + const FPTYPE* rhoc, + const FPTYPE* gx_arr, + const FPTYPE* rab, + FPTYPE* drhocg, + const int mesh, + const int igl0, + const int ngg, + const double omega, + int type); }; template -struct cal_force_npw_op{ - void operator()(const std::complex *psiv, - const FPTYPE* gv_x, const FPTYPE* gv_y, const FPTYPE* gv_z, +struct cal_force_npw_op +{ + void operator()(const std::complex* psiv, + const FPTYPE* gv_x, + const FPTYPE* gv_y, + const FPTYPE* gv_z, const FPTYPE* rhocgigg_vec, FPTYPE* force, - const FPTYPE pos_x, const FPTYPE pos_y, const FPTYPE pos_xz, + const FPTYPE pos_x, + const FPTYPE pos_y, + const FPTYPE pos_xz, const int npw, - const FPTYPE omega, const FPTYPE tpiba - ); + const FPTYPE omega, + const FPTYPE tpiba); }; template -struct cal_multi_dot_op{ +struct cal_multi_dot_op +{ FPTYPE operator()(const int& npw, - const FPTYPE& fac, - const FPTYPE* gk1, - const FPTYPE* gk2, - const FPTYPE* d_kfac, - const std::complex* psi); + const FPTYPE& fac, + const FPTYPE* gk1, + const FPTYPE* gk2, + const FPTYPE* d_kfac, + const std::complex* psi); }; - #if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM template struct cal_dbecp_noevc_nl_op @@ -425,18 +433,19 @@ struct cal_vq_deri_op }; template -struct cal_multi_dot_op{ +struct cal_multi_dot_op +{ FPTYPE operator()(const int& npw, - const FPTYPE& fac, - const FPTYPE* gk1, - const FPTYPE* gk2, - const FPTYPE* d_kfac, - const std::complex* psi); + const FPTYPE& fac, + const FPTYPE* gk1, + const FPTYPE* gk2, + const FPTYPE* d_kfac, + const std::complex* psi); }; /** - * The operator is used to compute the auxiliary amount of stress /force - * in parallel on the GPU. They identify type with the type provided and + * The operator is used to compute the auxiliary amount of stress /force + * in parallel on the GPU. They identify type with the type provided and * select different calculation methods, * * The function is called by the module as follows @@ -446,51 +455,58 @@ struct cal_multi_dot_op{ * Type = 3 -> stress_loc * * Int the function aux is obtained by traversing the `ngg` and `mesh` firstly, - * and then aux is processed by Simpson integral method to obtain auxiliary + * and then aux is processed by Simpson integral method to obtain auxiliary * quantities drhocg. * - * In the GPU operator, temporary array space of mesh size is required in order - * not to apply Simpson interpolation (which causes GPU memory overflow). - * The Simpson integral is then reconstructed in the loop body of the mesh, - * using the Simpson integral computed in the loop, rather than executed once - * after the loop. After that, in order to reduce the if condition judgment brought - * by Simpson interpolation in the loop body, lambda expression is used to shift the + * In the GPU operator, temporary array space of mesh size is required in order + * not to apply Simpson interpolation (which causes GPU memory overflow). + * The Simpson integral is then reconstructed in the loop body of the mesh, + * using the Simpson integral computed in the loop, rather than executed once + * after the loop. After that, in order to reduce the if condition judgment brought + * by Simpson interpolation in the loop body, lambda expression is used to shift the * boundary condition out. */ template -struct cal_stress_drhoc_aux_op{ - void operator()( - const FPTYPE* r, const FPTYPE* rhoc, - const FPTYPE *gx_arr, const FPTYPE *rab, FPTYPE *drhocg, - const int mesh, const int igl0, const int ngg, const double omega, - int type - ); +struct cal_stress_drhoc_aux_op +{ + void operator()(const FPTYPE* r, + const FPTYPE* rhoc, + const FPTYPE* gx_arr, + const FPTYPE* rab, + FPTYPE* drhocg, + const int mesh, + const int igl0, + const int ngg, + const double omega, + int type); }; - /** - * This operator is used to compute the force force in three directions for each atom in force_cc + * This operator is used to compute the force force in three directions for each atom in force_cc * in parallel on GPU [0~3], which is: - * Force_p = (2* pi * tpiba * omega * rhocg[ig] * gv_p[ig] + * Force_p = (2* pi * tpiba * omega * rhocg[ig] * gv_p[ig] * * (gv_x[ig] * pos_x + gv_y[ig] * pos_y + gv_z[ig] * pos_z) * * complex(sinp, cosp) * psiv[ig]).real() * * The operator splits NPW into blocks on the GPU in parallel, and the block size is t_size = 1024. */ template -struct cal_force_npw_op{ - void operator()(const std::complex *psiv, - const FPTYPE* gv_x, const FPTYPE* gv_y, const FPTYPE* gv_z, +struct cal_force_npw_op +{ + void operator()(const std::complex* psiv, + const FPTYPE* gv_x, + const FPTYPE* gv_y, + const FPTYPE* gv_z, const FPTYPE* rhocgigg_vec, FPTYPE* force, - const FPTYPE pos_x, const FPTYPE pos_y, const FPTYPE pos_xz, + const FPTYPE pos_x, + const FPTYPE pos_y, + const FPTYPE pos_xz, const int npw, - const FPTYPE omega, const FPTYPE tpiba - ); + const FPTYPE omega, + const FPTYPE tpiba); }; - - #endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM template diff --git a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/ekinetic_op_test.cpp b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/ekinetic_op_test.cpp index 7c06dfc154..6a59fd01d0 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/ekinetic_op_test.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/ekinetic_op_test.cpp @@ -1,6 +1,6 @@ #include "module_hamilt_pw/hamilt_pwdft/kernels/ekinetic_op.h" -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/memory_op.h" #include #include @@ -15,38 +15,450 @@ class TestModuleHamiltEkinetic : public ::testing::Test const int band = 8; const double tpiba2 = 0.37945422533; - std::vector gk2 = { - 3, 0, 3, 8, 3, 4, 4, 3, 8, 8, 3, 4, 4, 3, 8, 8, 8, 8, 8, 4, 3, 8, 8, 8, 8, 3, 4 - }; + std::vector gk2 = {3, 0, 3, 8, 3, 4, 4, 3, 8, 8, 3, 4, 4, 3, 8, 8, 8, 8, 8, 4, 3, 8, 8, 8, 8, 3, 4}; - std::vector> psi = { - {0.140385,0}, {1.15637,0}, {0.140385,0}, {-0.00612284,-0}, {0.140385,0}, {0.0746255,0}, {0.0746255,0}, {0.140385,0}, {-0.00612284,-0}, {-0.00612284,-0}, {0.140385,0}, {0.0746255,0}, {0.0746255,0}, {0.140385,0}, {-0.00612284,-0}, {-0.00612284,-0}, {-0.00612284,-0}, {-0.00612284,-0}, {-0.00612284,-0}, {0.0746255,0}, {0.140385,0}, {-0.00612284,-0}, {-0.00612284,-0}, {-0.00612284,-0}, {-0.00612284,-0}, {0.140385,0}, {0.0746255,0}, - {-0,0.204435}, {0,-0}, {0,-0.204435}, {0,-0}, {0,-0.204435}, {0,-0.243733}, {-0,0.243733}, {-0,0.204435}, {0,-0}, {-0,0.0509928}, {-0,0.204435}, {0,-0}, {0,-0}, {0,-0.204435}, {0,-0.0509928}, {0,-0.0509928}, {-0,0.0509928}, {0,-0}, {0,-0}, {0,-0}, {0,-0.204435}, {0,-0.0509928}, {0,-0.0509928}, {-0,0.0509928}, {-0,0.0509928}, {-0,0.204435}, {0,-0}, - {-0,0.204435}, {-0,0}, {0,-0.204435}, {-0,0.0509928}, {-0,0.204435}, {-0,0}, {-0,0}, {0,-0.204435}, {0,-0.0509928}, {-0,0.0509928}, {-0,0.204435}, {-0,1.49244e-17}, {-0,0.243733}, {-0,0.204435}, {-0,3.12241e-18}, {-0,0.0509928}, {-0,3.12241e-18}, {-0,0.0509928}, {0,-0.0509928}, {-0,1.49244e-17}, {0,-0.204435}, {0,-0.0509928}, {-0,3.12241e-18}, {0,-0.0509928}, {-0,3.12241e-18}, {0,-0.204435}, {0,-0.243733}, - {0,-0.204435}, {-0,0}, {-0,0.204435}, {0,-0.0509928}, {0,-0.204435}, {-0,0}, {-0,0}, {-0,0.204435}, {-0,0.0509928}, {-0,0}, {-0,0.204435}, {-0,0.243733}, {-0,0}, {-0,0.204435}, {-0,0.0509928}, {-0,0}, {-0,0.0509928}, {-0,0.0509928}, {0,-0.0509928}, {0,-0.243733}, {0,-0.204435}, {-0,6.24482e-18}, {0,-0.0509928}, {-0,6.24482e-18}, {0,-0.0509928}, {0,-0.204435}, {-0,2.98487e-17}, - {8.59613e-18,0.140385}, {1.15637,0}, {8.59613e-18,-0.140385}, {-0.00612284,-0}, {8.59613e-18,-0.140385}, {-0.0746255,-9.13898e-18}, {-0.0746255,9.13898e-18}, {8.59613e-18,0.140385}, {-0.00612284,-0}, {-0.00612284,-0}, {8.59613e-18,-0.140385}, {-0.0746255,-9.13898e-18}, {-0.0746255,-9.13898e-18}, {-2.57884e-17,0.140385}, {-0.00612284,-1.49966e-18}, {-0.00612284,-1.49966e-18}, {-0.00612284,-0}, {-0.00612284,-1.49966e-18}, {-0.00612284,1.49966e-18}, {-0.0746255,9.13898e-18}, {8.59613e-18,0.140385}, {-0.00612284,-0}, {-0.00612284,-0}, {-0.00612284,1.49966e-18}, {-0.00612284,1.49966e-18}, {-2.57884e-17,-0.140385}, {-0.0746255,9.13898e-18}, - {-0.204435,1.2518e-17}, {0,-0}, {-0.204435,-1.2518e-17}, {0,-0}, {-0.204435,-1.2518e-17}, {-2.98487e-17,0.243733}, {-2.98487e-17,-0.243733}, {-0.204435,1.2518e-17}, {0,-0}, {-0,0.0509928}, {0.204435,1.2518e-17}, {-0,0}, {-0,0}, {0.204435,3.75541e-17}, {1.24896e-17,-0.0509928}, {1.24896e-17,-0.0509928}, {-0,0.0509928}, {0,-0}, {-0,-0}, {0,0}, {0.204435,-1.2518e-17}, {0,-0.0509928}, {0,-0.0509928}, {1.24896e-17,0.0509928}, {1.24896e-17,0.0509928}, {0.204435,-3.75541e-17}, {0,0}, - {-0.204435,1.2518e-17}, {-0,0}, {-0.204435,-1.2518e-17}, {-0,0.0509928}, {0.204435,1.2518e-17}, {0,-0}, {-0,-0}, {0.204435,-1.2518e-17}, {0,-0.0509928}, {-0,0.0509928}, {0.204435,1.2518e-17}, {1.82771e-33,-1.49244e-17}, {2.98487e-17,-0.243733}, {-0.204435,-3.75541e-17}, {-7.6477e-34,3.12241e-18}, {-1.24896e-17,0.0509928}, {-0,3.12241e-18}, {-1.24896e-17,0.0509928}, {-1.24896e-17,-0.0509928}, {-1.82771e-33,-1.49244e-17}, {0.204435,-1.2518e-17}, {0,-0.0509928}, {-0,3.12241e-18}, {-1.24896e-17,-0.0509928}, {7.6477e-34,3.12241e-18}, {-0.204435,3.75541e-17}, {2.98487e-17,0.243733}, - {0.204435,-1.2518e-17}, {-0,0}, {0.204435,1.2518e-17}, {0,-0.0509928}, {-0.204435,-1.2518e-17}, {0,-0}, {-0,-0}, {-0.204435,1.2518e-17}, {-0,0.0509928}, {-0,0}, {0.204435,1.2518e-17}, {2.98487e-17,-0.243733}, {0,-0}, {-0.204435,-3.75541e-17}, {-1.24896e-17,0.0509928}, {-0,0}, {-0,0.0509928}, {-1.24896e-17,0.0509928}, {-1.24896e-17,-0.0509928}, {2.98487e-17,0.243733}, {0.204435,-1.2518e-17}, {-0,6.24482e-18}, {0,-0.0509928}, {1.52954e-33,6.24482e-18}, {-1.24896e-17,-0.0509928}, {-0.204435,3.75541e-17}, {-3.65542e-33,-2.98487e-17} - }; + std::vector> psi = {{0.140385, 0}, + {1.15637, 0}, + {0.140385, 0}, + {-0.00612284, -0}, + {0.140385, 0}, + {0.0746255, 0}, + {0.0746255, 0}, + {0.140385, 0}, + {-0.00612284, -0}, + {-0.00612284, -0}, + {0.140385, 0}, + {0.0746255, 0}, + {0.0746255, 0}, + {0.140385, 0}, + {-0.00612284, -0}, + {-0.00612284, -0}, + {-0.00612284, -0}, + {-0.00612284, -0}, + {-0.00612284, -0}, + {0.0746255, 0}, + {0.140385, 0}, + {-0.00612284, -0}, + {-0.00612284, -0}, + {-0.00612284, -0}, + {-0.00612284, -0}, + {0.140385, 0}, + {0.0746255, 0}, + {-0, 0.204435}, + {0, -0}, + {0, -0.204435}, + {0, -0}, + {0, -0.204435}, + {0, -0.243733}, + {-0, 0.243733}, + {-0, 0.204435}, + {0, -0}, + {-0, 0.0509928}, + {-0, 0.204435}, + {0, -0}, + {0, -0}, + {0, -0.204435}, + {0, -0.0509928}, + {0, -0.0509928}, + {-0, 0.0509928}, + {0, -0}, + {0, -0}, + {0, -0}, + {0, -0.204435}, + {0, -0.0509928}, + {0, -0.0509928}, + {-0, 0.0509928}, + {-0, 0.0509928}, + {-0, 0.204435}, + {0, -0}, + {-0, 0.204435}, + {-0, 0}, + {0, -0.204435}, + {-0, 0.0509928}, + {-0, 0.204435}, + {-0, 0}, + {-0, 0}, + {0, -0.204435}, + {0, -0.0509928}, + {-0, 0.0509928}, + {-0, 0.204435}, + {-0, 1.49244e-17}, + {-0, 0.243733}, + {-0, 0.204435}, + {-0, 3.12241e-18}, + {-0, 0.0509928}, + {-0, 3.12241e-18}, + {-0, 0.0509928}, + {0, -0.0509928}, + {-0, 1.49244e-17}, + {0, -0.204435}, + {0, -0.0509928}, + {-0, 3.12241e-18}, + {0, -0.0509928}, + {-0, 3.12241e-18}, + {0, -0.204435}, + {0, -0.243733}, + {0, -0.204435}, + {-0, 0}, + {-0, 0.204435}, + {0, -0.0509928}, + {0, -0.204435}, + {-0, 0}, + {-0, 0}, + {-0, 0.204435}, + {-0, 0.0509928}, + {-0, 0}, + {-0, 0.204435}, + {-0, 0.243733}, + {-0, 0}, + {-0, 0.204435}, + {-0, 0.0509928}, + {-0, 0}, + {-0, 0.0509928}, + {-0, 0.0509928}, + {0, -0.0509928}, + {0, -0.243733}, + {0, -0.204435}, + {-0, 6.24482e-18}, + {0, -0.0509928}, + {-0, 6.24482e-18}, + {0, -0.0509928}, + {0, -0.204435}, + {-0, 2.98487e-17}, + {8.59613e-18, 0.140385}, + {1.15637, 0}, + {8.59613e-18, -0.140385}, + {-0.00612284, -0}, + {8.59613e-18, -0.140385}, + {-0.0746255, -9.13898e-18}, + {-0.0746255, 9.13898e-18}, + {8.59613e-18, 0.140385}, + {-0.00612284, -0}, + {-0.00612284, -0}, + {8.59613e-18, -0.140385}, + {-0.0746255, -9.13898e-18}, + {-0.0746255, -9.13898e-18}, + {-2.57884e-17, 0.140385}, + {-0.00612284, -1.49966e-18}, + {-0.00612284, -1.49966e-18}, + {-0.00612284, -0}, + {-0.00612284, -1.49966e-18}, + {-0.00612284, 1.49966e-18}, + {-0.0746255, 9.13898e-18}, + {8.59613e-18, 0.140385}, + {-0.00612284, -0}, + {-0.00612284, -0}, + {-0.00612284, 1.49966e-18}, + {-0.00612284, 1.49966e-18}, + {-2.57884e-17, -0.140385}, + {-0.0746255, 9.13898e-18}, + {-0.204435, 1.2518e-17}, + {0, -0}, + {-0.204435, -1.2518e-17}, + {0, -0}, + {-0.204435, -1.2518e-17}, + {-2.98487e-17, 0.243733}, + {-2.98487e-17, -0.243733}, + {-0.204435, 1.2518e-17}, + {0, -0}, + {-0, 0.0509928}, + {0.204435, 1.2518e-17}, + {-0, 0}, + {-0, 0}, + {0.204435, 3.75541e-17}, + {1.24896e-17, -0.0509928}, + {1.24896e-17, -0.0509928}, + {-0, 0.0509928}, + {0, -0}, + {-0, -0}, + {0, 0}, + {0.204435, -1.2518e-17}, + {0, -0.0509928}, + {0, -0.0509928}, + {1.24896e-17, 0.0509928}, + {1.24896e-17, 0.0509928}, + {0.204435, -3.75541e-17}, + {0, 0}, + {-0.204435, 1.2518e-17}, + {-0, 0}, + {-0.204435, -1.2518e-17}, + {-0, 0.0509928}, + {0.204435, 1.2518e-17}, + {0, -0}, + {-0, -0}, + {0.204435, -1.2518e-17}, + {0, -0.0509928}, + {-0, 0.0509928}, + {0.204435, 1.2518e-17}, + {1.82771e-33, -1.49244e-17}, + {2.98487e-17, -0.243733}, + {-0.204435, -3.75541e-17}, + {-7.6477e-34, 3.12241e-18}, + {-1.24896e-17, 0.0509928}, + {-0, 3.12241e-18}, + {-1.24896e-17, 0.0509928}, + {-1.24896e-17, -0.0509928}, + {-1.82771e-33, -1.49244e-17}, + {0.204435, -1.2518e-17}, + {0, -0.0509928}, + {-0, 3.12241e-18}, + {-1.24896e-17, -0.0509928}, + {7.6477e-34, 3.12241e-18}, + {-0.204435, 3.75541e-17}, + {2.98487e-17, 0.243733}, + {0.204435, -1.2518e-17}, + {-0, 0}, + {0.204435, 1.2518e-17}, + {0, -0.0509928}, + {-0.204435, -1.2518e-17}, + {0, -0}, + {-0, -0}, + {-0.204435, 1.2518e-17}, + {-0, 0.0509928}, + {-0, 0}, + {0.204435, 1.2518e-17}, + {2.98487e-17, -0.243733}, + {0, -0}, + {-0.204435, -3.75541e-17}, + {-1.24896e-17, 0.0509928}, + {-0, 0}, + {-0, 0.0509928}, + {-1.24896e-17, 0.0509928}, + {-1.24896e-17, -0.0509928}, + {2.98487e-17, 0.243733}, + {0.204435, -1.2518e-17}, + {-0, 6.24482e-18}, + {0, -0.0509928}, + {1.52954e-33, 6.24482e-18}, + {-1.24896e-17, -0.0509928}, + {-0.204435, 3.75541e-17}, + {-3.65542e-33, -2.98487e-17}}; - std::vector > expected_hpsi = { - {0.15981,0}, {0,0}, {0.15981,0}, {-0.0185867,0}, {0.15981,0}, {0.113268,0}, {0.113268,0}, {0.15981,0}, {-0.0185867,0}, {-0.0185867,0}, {0.15981,0}, {0.113268,0}, {0.113268,0}, {0.15981,0}, {-0.0185867,0}, {-0.0185867,0}, {-0.0185867,0}, {-0.0185867,0}, {-0.0185867,0}, {0.113268,0}, {0.15981,0}, {-0.0185867,0}, {-0.0185867,0}, {-0.0185867,0}, {-0.0185867,0}, {0.15981,0}, {0.113268,0}, - {0,0.232721}, {0,0}, {0,-0.232721}, {0,0}, {0,-0.232721}, {0,-0.369943}, {0,0.369943}, {0,0.232721}, {0,0}, {0,0.154796}, {0,0.232721}, {0,0}, {0,0}, {0,-0.232721}, {0,-0.154796}, {0,-0.154796}, {0,0.154796}, {0,0}, {0,0}, {0,0}, {0,-0.232721}, {0,-0.154796}, {0,-0.154796}, {0,0.154796}, {0,0.154796}, {0,0.232721}, {0,0}, - {0,0.232721}, {0,0}, {0,-0.232721}, {0,0.154796}, {0,0.232721}, {0,0}, {0,0}, {0,-0.232721}, {0,-0.154796}, {0,0.154796}, {0,0.232721}, {0,2.26525e-17}, {0,0.369943}, {0,0.232721}, {0,9.4785e-18}, {0,0.154796}, {0,9.4785e-18}, {0,0.154796}, {0,-0.154796}, {0,2.26525e-17}, {0,-0.232721}, {0,-0.154796}, {0,9.4785e-18}, {0,-0.154796}, {0,9.4785e-18}, {0,-0.232721}, {0,-0.369943}, - {0,-0.232721}, {0,0}, {0,0.232721}, {0,-0.154796}, {0,-0.232721}, {0,0}, {0,0}, {0,0.232721}, {0,0.154796}, {0,0}, {0,0.232721}, {0,0.369943}, {0,0}, {0,0.232721}, {0,0.154796}, {0,0}, {0,0.154796}, {0,0.154796}, {0,-0.154796}, {0,-0.369943}, {0,-0.232721}, {0,1.8957e-17}, {0,-0.154796}, {0,1.8957e-17}, {0,-0.154796}, {0,-0.232721}, {0,4.53049e-17}, - {9.78551e-18,0.15981}, {0,0}, {9.78551e-18,-0.15981}, {-0.0185867,0}, {9.78551e-18,-0.15981}, {-0.113268,-1.38713e-17}, {-0.113268,1.38713e-17}, {9.78551e-18,0.15981}, {-0.0185867,0}, {-0.0185867,0}, {9.78551e-18,-0.15981}, {-0.113268,-1.38713e-17}, {-0.113268,-1.38713e-17}, {-2.93565e-17,0.15981}, {-0.0185867,-4.55243e-18}, {-0.0185867,-4.55243e-18}, {-0.0185867,0}, {-0.0185867,-4.55243e-18}, {-0.0185867,4.55243e-18}, {-0.113268,1.38713e-17}, {9.78551e-18,0.15981}, {-0.0185867,0}, {-0.0185867,0}, {-0.0185867,4.55243e-18}, {-0.0185867,4.55243e-18}, {-2.93565e-17,-0.15981}, {-0.113268,1.38713e-17}, - {-0.232721,1.42501e-17}, {0,0}, {-0.232721,-1.42501e-17}, {0,0}, {-0.232721,-1.42501e-17}, {-4.53049e-17,0.369943}, {-4.53049e-17,-0.369943}, {-0.232721,1.42501e-17}, {0,0}, {0,0.154796}, {0.232721,1.42501e-17}, {0,0}, {0,0}, {0.232721,4.27502e-17}, {3.7914e-17,-0.154796}, {3.7914e-17,-0.154796}, {0,0.154796}, {0,0}, {0,0}, {0,0}, {0.232721,-1.42501e-17}, {0,-0.154796}, {0,-0.154796}, {3.7914e-17,0.154796}, {3.7914e-17,0.154796}, {0.232721,-4.27502e-17}, {0,0}, - {-0.232721,1.42501e-17}, {0,0}, {-0.232721,-1.42501e-17}, {0,0.154796}, {0.232721,1.42501e-17}, {0,0}, {0,0}, {0.232721,-1.42501e-17}, {0,-0.154796}, {0,0.154796}, {0.232721,1.42501e-17}, {2.77413e-33,-2.26525e-17}, {4.53049e-17,-0.369943}, {-0.232721,-4.27502e-17}, {-2.32156e-33,9.4785e-18}, {-3.7914e-17,0.154796}, {0,9.4785e-18}, {-3.7914e-17,0.154796}, {-3.7914e-17,-0.154796}, {-2.77413e-33,-2.26525e-17}, {0.232721,-1.42501e-17}, {0,-0.154796}, {0,9.4785e-18}, {-3.7914e-17,-0.154796}, {2.32156e-33,9.4785e-18}, {-0.232721,4.27502e-17}, {4.53049e-17,0.369943}, - {0.232721,-1.42501e-17}, {0,0}, {0.232721,1.42501e-17}, {0,-0.154796}, {-0.232721,-1.42501e-17}, {0,0}, {0,0}, {-0.232721,1.42501e-17}, {0,0.154796}, {0,0}, {0.232721,1.42501e-17}, {4.53049e-17,-0.369943}, {0,0}, {-0.232721,-4.27502e-17}, {-3.7914e-17,0.154796}, {0,0}, {0,0.154796}, {-3.7914e-17,0.154796}, {-3.7914e-17,-0.154796}, {4.53049e-17,0.369943}, {0.232721,-1.42501e-17}, {0,1.8957e-17}, {0,-0.154796}, {4.64312e-33,1.8957e-17}, {-3.7914e-17,-0.154796}, {-0.232721,4.27502e-17}, {-5.54825e-33,-4.53049e-17} - }; + std::vector> expected_hpsi = {{0.15981, 0}, + {0, 0}, + {0.15981, 0}, + {-0.0185867, 0}, + {0.15981, 0}, + {0.113268, 0}, + {0.113268, 0}, + {0.15981, 0}, + {-0.0185867, 0}, + {-0.0185867, 0}, + {0.15981, 0}, + {0.113268, 0}, + {0.113268, 0}, + {0.15981, 0}, + {-0.0185867, 0}, + {-0.0185867, 0}, + {-0.0185867, 0}, + {-0.0185867, 0}, + {-0.0185867, 0}, + {0.113268, 0}, + {0.15981, 0}, + {-0.0185867, 0}, + {-0.0185867, 0}, + {-0.0185867, 0}, + {-0.0185867, 0}, + {0.15981, 0}, + {0.113268, 0}, + {0, 0.232721}, + {0, 0}, + {0, -0.232721}, + {0, 0}, + {0, -0.232721}, + {0, -0.369943}, + {0, 0.369943}, + {0, 0.232721}, + {0, 0}, + {0, 0.154796}, + {0, 0.232721}, + {0, 0}, + {0, 0}, + {0, -0.232721}, + {0, -0.154796}, + {0, -0.154796}, + {0, 0.154796}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, -0.232721}, + {0, -0.154796}, + {0, -0.154796}, + {0, 0.154796}, + {0, 0.154796}, + {0, 0.232721}, + {0, 0}, + {0, 0.232721}, + {0, 0}, + {0, -0.232721}, + {0, 0.154796}, + {0, 0.232721}, + {0, 0}, + {0, 0}, + {0, -0.232721}, + {0, -0.154796}, + {0, 0.154796}, + {0, 0.232721}, + {0, 2.26525e-17}, + {0, 0.369943}, + {0, 0.232721}, + {0, 9.4785e-18}, + {0, 0.154796}, + {0, 9.4785e-18}, + {0, 0.154796}, + {0, -0.154796}, + {0, 2.26525e-17}, + {0, -0.232721}, + {0, -0.154796}, + {0, 9.4785e-18}, + {0, -0.154796}, + {0, 9.4785e-18}, + {0, -0.232721}, + {0, -0.369943}, + {0, -0.232721}, + {0, 0}, + {0, 0.232721}, + {0, -0.154796}, + {0, -0.232721}, + {0, 0}, + {0, 0}, + {0, 0.232721}, + {0, 0.154796}, + {0, 0}, + {0, 0.232721}, + {0, 0.369943}, + {0, 0}, + {0, 0.232721}, + {0, 0.154796}, + {0, 0}, + {0, 0.154796}, + {0, 0.154796}, + {0, -0.154796}, + {0, -0.369943}, + {0, -0.232721}, + {0, 1.8957e-17}, + {0, -0.154796}, + {0, 1.8957e-17}, + {0, -0.154796}, + {0, -0.232721}, + {0, 4.53049e-17}, + {9.78551e-18, 0.15981}, + {0, 0}, + {9.78551e-18, -0.15981}, + {-0.0185867, 0}, + {9.78551e-18, -0.15981}, + {-0.113268, -1.38713e-17}, + {-0.113268, 1.38713e-17}, + {9.78551e-18, 0.15981}, + {-0.0185867, 0}, + {-0.0185867, 0}, + {9.78551e-18, -0.15981}, + {-0.113268, -1.38713e-17}, + {-0.113268, -1.38713e-17}, + {-2.93565e-17, 0.15981}, + {-0.0185867, -4.55243e-18}, + {-0.0185867, -4.55243e-18}, + {-0.0185867, 0}, + {-0.0185867, -4.55243e-18}, + {-0.0185867, 4.55243e-18}, + {-0.113268, 1.38713e-17}, + {9.78551e-18, 0.15981}, + {-0.0185867, 0}, + {-0.0185867, 0}, + {-0.0185867, 4.55243e-18}, + {-0.0185867, 4.55243e-18}, + {-2.93565e-17, -0.15981}, + {-0.113268, 1.38713e-17}, + {-0.232721, 1.42501e-17}, + {0, 0}, + {-0.232721, -1.42501e-17}, + {0, 0}, + {-0.232721, -1.42501e-17}, + {-4.53049e-17, 0.369943}, + {-4.53049e-17, -0.369943}, + {-0.232721, 1.42501e-17}, + {0, 0}, + {0, 0.154796}, + {0.232721, 1.42501e-17}, + {0, 0}, + {0, 0}, + {0.232721, 4.27502e-17}, + {3.7914e-17, -0.154796}, + {3.7914e-17, -0.154796}, + {0, 0.154796}, + {0, 0}, + {0, 0}, + {0, 0}, + {0.232721, -1.42501e-17}, + {0, -0.154796}, + {0, -0.154796}, + {3.7914e-17, 0.154796}, + {3.7914e-17, 0.154796}, + {0.232721, -4.27502e-17}, + {0, 0}, + {-0.232721, 1.42501e-17}, + {0, 0}, + {-0.232721, -1.42501e-17}, + {0, 0.154796}, + {0.232721, 1.42501e-17}, + {0, 0}, + {0, 0}, + {0.232721, -1.42501e-17}, + {0, -0.154796}, + {0, 0.154796}, + {0.232721, 1.42501e-17}, + {2.77413e-33, -2.26525e-17}, + {4.53049e-17, -0.369943}, + {-0.232721, -4.27502e-17}, + {-2.32156e-33, 9.4785e-18}, + {-3.7914e-17, 0.154796}, + {0, 9.4785e-18}, + {-3.7914e-17, 0.154796}, + {-3.7914e-17, -0.154796}, + {-2.77413e-33, -2.26525e-17}, + {0.232721, -1.42501e-17}, + {0, -0.154796}, + {0, 9.4785e-18}, + {-3.7914e-17, -0.154796}, + {2.32156e-33, 9.4785e-18}, + {-0.232721, 4.27502e-17}, + {4.53049e-17, 0.369943}, + {0.232721, -1.42501e-17}, + {0, 0}, + {0.232721, 1.42501e-17}, + {0, -0.154796}, + {-0.232721, -1.42501e-17}, + {0, 0}, + {0, 0}, + {-0.232721, 1.42501e-17}, + {0, 0.154796}, + {0, 0}, + {0.232721, 1.42501e-17}, + {4.53049e-17, -0.369943}, + {0, 0}, + {-0.232721, -4.27502e-17}, + {-3.7914e-17, 0.154796}, + {0, 0}, + {0, 0.154796}, + {-3.7914e-17, 0.154796}, + {-3.7914e-17, -0.154796}, + {4.53049e-17, 0.369943}, + {0.232721, -1.42501e-17}, + {0, 1.8957e-17}, + {0, -0.154796}, + {4.64312e-33, 1.8957e-17}, + {-3.7914e-17, -0.154796}, + {-0.232721, 4.27502e-17}, + {-5.54825e-33, -4.53049e-17}}; const base_device::DEVICE_CPU* cpu_ctx = {}; const base_device::DEVICE_GPU* gpu_ctx = {}; - void SetUp() override { + void SetUp() override + { } - void TearDown() override { + void TearDown() override + { } using ekinetic_cpu_op = hamilt::ekinetic_pw_op; @@ -69,34 +481,36 @@ class TestModuleHamiltEkinetic : public ::testing::Test TEST_F(TestModuleHamiltEkinetic, ekinetic_pw_op_cpu) { - std::vector > hpsi(expected_hpsi.size(), std::complex(0.0, 0.0)); - ekinetic_cpu_op()(cpu_ctx, band, dim, dim, false, tpiba2, gk2.data(), hpsi.data(), psi.data()); - for (int ii = 0; ii < hpsi.size(); ii++) { - EXPECT_LT(std::abs(hpsi[ii] - expected_hpsi[ii]), 1e-6); - } + std::vector> hpsi(expected_hpsi.size(), std::complex(0.0, 0.0)); + ekinetic_cpu_op()(cpu_ctx, band, dim, dim, false, tpiba2, gk2.data(), hpsi.data(), psi.data()); + for (int ii = 0; ii < hpsi.size(); ii++) + { + EXPECT_LT(std::abs(hpsi[ii] - expected_hpsi[ii]), 1e-6); + } } #if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM TEST_F(TestModuleHamiltEkinetic, ekinetic_pw_op_gpu) { - double* gk2_dev = NULL; - std::complex* hpsi_dev = NULL, * psi_dev = NULL; - resize_memory_double_op()(gk2_dev, gk2.size()); - resize_memory_complex_double_op()(psi_dev, psi.size()); - std::vector > hpsi(expected_hpsi.size(), std::complex(0.0, 0.0)); - resize_memory_complex_double_op()(hpsi_dev, hpsi.size()); - syncmem_cd_h2d_op()(hpsi_dev, hpsi.data(), hpsi.size()); - syncmem_d_h2d_op()(gk2_dev, gk2.data(), gk2.size()); - syncmem_cd_h2d_op()(psi_dev, psi.data(), psi.size()); - // ekinetic_cpu_op()(cpu_ctx, band, dim, dim, tpiba2, gk2.data(), hpsi.data(), psi.data()); - ekinetic_gpu_op()(gpu_ctx, band, dim, dim, false, tpiba2, gk2_dev, hpsi_dev, psi_dev); - syncmem_cd_d2h_op()(hpsi.data(), hpsi_dev, hpsi.size()); + double* gk2_dev = NULL; + std::complex*hpsi_dev = NULL, *psi_dev = NULL; + resize_memory_double_op()(gk2_dev, gk2.size()); + resize_memory_complex_double_op()(psi_dev, psi.size()); + std::vector> hpsi(expected_hpsi.size(), std::complex(0.0, 0.0)); + resize_memory_complex_double_op()(hpsi_dev, hpsi.size()); + syncmem_cd_h2d_op()(hpsi_dev, hpsi.data(), hpsi.size()); + syncmem_d_h2d_op()(gk2_dev, gk2.data(), gk2.size()); + syncmem_cd_h2d_op()(psi_dev, psi.data(), psi.size()); + // ekinetic_cpu_op()(cpu_ctx, band, dim, dim, tpiba2, gk2.data(), hpsi.data(), psi.data()); + ekinetic_gpu_op()(gpu_ctx, band, dim, dim, false, tpiba2, gk2_dev, hpsi_dev, psi_dev); + syncmem_cd_d2h_op()(hpsi.data(), hpsi_dev, hpsi.size()); - for (int ii = 0; ii < hpsi.size(); ii++) { - EXPECT_LT(fabs(hpsi[ii] - expected_hpsi[ii]), 1e-6); - } - delete_memory_double_op()(gk2_dev); - delete_memory_complex_double_op()(psi_dev); - delete_memory_complex_double_op()(hpsi_dev); + for (int ii = 0; ii < hpsi.size(); ii++) + { + EXPECT_LT(fabs(hpsi[ii] - expected_hpsi[ii]), 1e-6); + } + delete_memory_double_op()(gk2_dev); + delete_memory_complex_double_op()(psi_dev); + delete_memory_complex_double_op()(hpsi_dev); } #endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM \ No newline at end of file diff --git a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/force_op_test.cpp b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/force_op_test.cpp index be237b64ba..5d86ebc8ac 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/force_op_test.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/force_op_test.cpp @@ -1,6 +1,6 @@ #include "module_hamilt_pw/hamilt_pwdft/kernels/force_op.h" -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/memory_op.h" #include #include diff --git a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/meta_op_test.cpp b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/meta_op_test.cpp index 85caa61f4b..ce850970a2 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/meta_op_test.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/meta_op_test.cpp @@ -1,6 +1,6 @@ #include "module_hamilt_pw/hamilt_pwdft/kernels/meta_op.h" -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/memory_op.h" #include #include @@ -8,16 +8,45 @@ class TestModuleHamiltMeta : public ::testing::Test { -protected: + protected: // xx = tf.random.uniform([100], minval=-4, maxval=4, dtype = tf.float64) const int ik = 0, pol = 0, npw = 15, npwx = 15; const double tpiba = 0.61599855952741045; const std::vector kvec_c = {0, 0, 0}; - const std::vector gcar = {1, -1, -1, 0, 0, 0, -1, 1, 1, 1, -1, 1, 0, 0, 2, 0, 0, -2, -1, 1, -1, 1, 1, -1, 0, 2, 0, 2, 0, 0, 1, 1, 1, 0, -2, 0, -1, -1, 1, -1, -1, -1, -2, 0, 0}; - - const std::vector > in = {{0.073755, 0.215648}, {-0.661877, 0.517527}, {0.0586699, -0.186777}, {0.00957812, -0.0832565}, {-0.0523913, -0.0184799}, {-0.0259417, -0.124468}, {-0.090873, -0.00766968}, {-0.0277014, -0.0220417}, {0.000145658, 0.00325686}, {-0.0254601, 0.018268}, {0.0251554, 0.0204952}, {-0.126029, -0.0193828}, {0.0681057, -0.108652}, {0.0164339, -0.130657}, {0.0972758, -0.0168042}}; - const std::vector > expected_out = {{-0.132839, 0.045433}, {-0, 0}, {-0.115054, -0.0361406}, {0.0512859, 0.00590011}, {0, -0}, {0, -0}, {-0.00472451, 0.0559777}, {0.0135776, -0.0170641}, {0, 0}, {-0.0225061, -0.0313667}, {-0.012625, 0.0154957}, {0, -0}, {-0.0669297, -0.041953}, {-0.0804844, -0.0101233}, {-0.0207027, -0.119844}}; + const std::vector gcar = {1, -1, -1, 0, 0, 0, -1, 1, 1, 1, -1, 1, 0, 0, 2, 0, 0, -2, -1, 1, -1, 1, 1, + -1, 0, 2, 0, 2, 0, 0, 1, 1, 1, 0, -2, 0, -1, -1, 1, -1, -1, -1, -2, 0, 0}; + + const std::vector> in = {{0.073755, 0.215648}, + {-0.661877, 0.517527}, + {0.0586699, -0.186777}, + {0.00957812, -0.0832565}, + {-0.0523913, -0.0184799}, + {-0.0259417, -0.124468}, + {-0.090873, -0.00766968}, + {-0.0277014, -0.0220417}, + {0.000145658, 0.00325686}, + {-0.0254601, 0.018268}, + {0.0251554, 0.0204952}, + {-0.126029, -0.0193828}, + {0.0681057, -0.108652}, + {0.0164339, -0.130657}, + {0.0972758, -0.0168042}}; + const std::vector> expected_out = {{-0.132839, 0.045433}, + {-0, 0}, + {-0.115054, -0.0361406}, + {0.0512859, 0.00590011}, + {0, -0}, + {0, -0}, + {-0.00472451, 0.0559777}, + {0.0135776, -0.0170641}, + {0, 0}, + {-0.0225061, -0.0313667}, + {-0.012625, 0.0154957}, + {0, -0}, + {-0.0669297, -0.041953}, + {-0.0804844, -0.0101233}, + {-0.0207027, -0.119844}}; const base_device::DEVICE_CPU* cpu_ctx = {}; const base_device::DEVICE_GPU* gpu_ctx = {}; @@ -37,29 +66,31 @@ class TestModuleHamiltMeta : public ::testing::Test using syncmem_var_h2d_op = base_device::memory::synchronize_memory_op; - void SetUp() override { + void SetUp() override + { } - void TearDown() override { + void TearDown() override + { } }; TEST_F(TestModuleHamiltMeta, meta_pw_op_cpu) { - std::vector> res(expected_out.size(), std::complex {0, 0}); + std::vector> res(expected_out.size(), std::complex{0, 0}); meta_cpu_op()(cpu_ctx, ik, pol, npw, npwx, tpiba, gcar.data(), kvec_c.data(), in.data(), res.data()); - for (int ii = 0; ii < res.size(); ii++) { + for (int ii = 0; ii < res.size(); ii++) + { EXPECT_LT(std::abs(res[ii] - expected_out[ii]), 6e-5); } } - #if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM TEST_F(TestModuleHamiltMeta, meta_pw_op_gpu) { - std::vector> res(expected_out.size(), std::complex {0, 0}); - double * d_gcar = nullptr, * d_kvec_c = nullptr; - std::complex* d_in = nullptr, * d_res = nullptr; + std::vector> res(expected_out.size(), std::complex{0, 0}); + double *d_gcar = nullptr, *d_kvec_c = nullptr; + std::complex*d_in = nullptr, *d_res = nullptr; resmem_var_op()(d_gcar, gcar.size()); resmem_var_op()(d_kvec_c, kvec_c.size()); resmem_complex_op()(d_in, in.size()); @@ -72,7 +103,8 @@ TEST_F(TestModuleHamiltMeta, meta_pw_op_gpu) meta_gpu_op()(gpu_ctx, ik, pol, npw, npwx, tpiba, d_gcar, d_kvec_c, d_in, d_res); syncmem_complex_d2h_op()(res.data(), d_res, res.size()); - for (int ii = 0; ii < res.size(); ii++) { + for (int ii = 0; ii < res.size(); ii++) + { EXPECT_LT(fabs(res[ii] - expected_out[ii]), 6e-5); } delmem_var_op()(d_gcar); diff --git a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/nonlocal_op_test.cpp b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/nonlocal_op_test.cpp index 47deaec255..0237a192bf 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/nonlocal_op_test.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/nonlocal_op_test.cpp @@ -1,6 +1,6 @@ #include "module_hamilt_pw/hamilt_pwdft/kernels/nonlocal_op.h" -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/memory_op.h" #include #include @@ -25,45 +25,835 @@ class TestModuleHamiltNonlocal : public ::testing::Test const int deeq_y = 4; const int deeq_z = 4; - std::vector deeq = { - 1.52389, 0, 0, 0, 0, 3.6833, 0, 0, 0, 0, 3.6833, 0, 0, 0, 0, 3.6833, 1.52389, 0, 0, 0, 0, 3.6833, 0, 0, 0, 0, 3.6833, 0, 0, 0, 0, 3.6833 - }; + std::vector deeq = {1.52389, 0, 0, 0, 0, 3.6833, 0, 0, 0, 0, 3.6833, 0, 0, 0, 0, 3.6833, + 1.52389, 0, 0, 0, 0, 3.6833, 0, 0, 0, 0, 3.6833, 0, 0, 0, 0, 3.6833}; std::vector> deeq_spin = { - {1.52389, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {1.52389, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {1.52389, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {1.52389, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0} - }; - - std::vector> expected_ps = { - {1.08811,0}, {0,2.11482e-17}, {0,4.22963e-17}, {0,-6.34445e-17}, {0.473301,2.11482e-17}, {-3.80667e-16,-5.28704e-18}, {-2.11482e-17,-2.11482e-17}, {4.22963e-17,2.64352e-17}, {1.50743e-33,1.75712e-17}, {0.93285,-5.71206e-17}, {0,-2.83751e-33}, {-3.83371e-17,1.41876e-33}, - {6.38951e-18,2.79541e-18}, {-0.0996506,1.91685e-17}, {1.2779e-17,5.11161e-17}, {2.87528e-17,3.83371e-17}, {-2.48283e-33,7.02847e-17}, {1.2779e-17,-2.83751e-33}, {0.93285,-5.71206e-17}, {-1.02232e-16,3.54689e-34}, {0,6.38951e-18}, {9.58427e-18,5.11161e-17}, {-0.0996506,-6.38951e-18}, - {-7.83714e-18,0}, {1.41876e-33,1.24596e-16}, {-5.11161e-17,1.41876e-33}, {-1.91685e-17,3.54689e-34}, {0.93285,-5.71206e-17}, {0,5.09164e-18}, {2.87528e-17,2.55581e-17}, {-7.78722e-18,0}, {-0.0996506,6.38951e-18}, {0.473301,-2.11482e-17}, {3.80667e-16,-5.28704e-18}, - {2.11482e-17,-2.11482e-17}, {-4.22963e-17,2.64352e-17}, {1.08811,-6.92094e-34}, {-2.95657e-33,-2.11482e-17}, {-1.31476e-33,4.22963e-17}, {3.35836e-34,1.26889e-16}, {-6.38951e-18,-3.99345e-18}, {-0.0996506,6.38951e-18}, {1.2779e-17,-4.47266e-17}, {2.87528e-17,-4.47266e-17}, - {-5.32034e-34,-6.38951e-18}, {0.93285,-5.71206e-17}, {-1.2779e-17,1.41876e-33}, {2.55581e-17,-5.67503e-33}, {0,-6.38951e-18}, {1.2779e-17,-4.47266e-17}, {-0.0996506,1.91685e-17}, {9.98362e-19,0}, {1.41876e-33,-1.91685e-17}, {0,-1.41876e-33}, {0.93285,-5.71206e-17}, - {1.02232e-16,7.80316e-33}, {-6.38951e-18,-3.5941e-18}, {2.87528e-17,-1.2779e-17}, {-5.34123e-18,0}, {-0.0996506,0}, {0,-3.51423e-17}, {1.2779e-17,-4.96565e-33}, {8.30637e-17,-2.12814e-33}, {0.93285,-5.71206e-17} - }; - - std::vector> expected_ps_spin = { - {0.898349, 0.898349}, {0, 0}, {5.5008e-17, 5.5008e-17}, {0.898349, 0.898349}, {-1.32417e-17, -2.0787e-17}, {0, 0}, {-4.47914e-17, -1.64852e-16}, {0, 0}, {-8.89752e-17, -1.23726e-16}, {0, 0}, {7.61637e-34, 3.27494e-34}, {-2.0787e-17, -1.32417e-17}, {-5.0317e-34, -4.81996e-33}, {-1.64852e-16, -4.47914e-17}, {-3.77607e-33, -2.16796e-33}, {-1.23726e-16, -8.89752e-17}, {0.333942, 0.333942}, {0, 0}, {2.04481e-17, 2.04481e-17}, {0.333942, 0.333942}, {3.56019e-17, 2.80084e-17}, {0, 0}, {-2.01942e-17, -1.04257e-17}, {0, 0}, {-4.20997e-17, 5.08557e-17}, {0, 0}, {3.512e-34, -2.09989e-33}, {2.14478e-17, 1.38544e-17}, {-1.69364e-34, 1.698e-33}, {-1.8653e-17, 6.97665e-18}, {3.70341e-34, 3.231e-33}, {-1.70411e-17, 5.44357e-17}, {-0.230744, 0.302671}, {0.622165, -0.255728}, {-0.21374, -0.0616951}, {-0.316678, -0.0312102}, {-0.237357, 0.643759}, {-0.0531013, 0.468}, {0.415893, 0.246569}, {-0.401426, -0.0965346}, {-0.44529, 0.114999}, {0.250482, 0.102919}, {0.440536, 0.449415}, {0.0284661, -0.109981}, {0.523275, -0.247933}, {-0.184478, 0.126704}, {-0.216067, -0.143467}, {0.353863, 0.348662}, {-0.328859, 0.308482}, {-0.0164594, -0.196908}, {-0.340233, 0.108988}, {-0.0564905, -0.243882}, {0.599485, 0.263851}, {0.250563, -0.1169}, {-0.114713, 0.914133}, {-0.0257248, 0.332045}, {1.34207e-18, -1.62305e-18}, {0, 0}, {7.6548e-35, 8.51989e-35}, {1.62305e-18, -1.34207e-18}, {-0.649674, 0.649674}, {0, 0}, {2.26919e-18, -1.70722e-18}, {0, 0}, {-6.09832e-18, 5.95782e-18}, {0, 0}, {-3.97811e-17, 3.97811e-17}, {-0.649674, 0.649674}, {8.56914e-34, -8.25718e-34}, {1.70722e-18, -2.26919e-18}, {-1.28019e-33, 5.55216e-34}, {-5.95782e-18, 6.09832e-18}, {1.28047e-17, -1.64288e-17}, {0, 0}, {4.02499e-34, 1.25146e-33}, {9.32896e-18, -2.23376e-17}, {0.0703638, -0.0703638}, {0, 0}, {-8.67574e-18, -1.45033e-17}, {0, 0}, {-2.25898e-17, -2.96005e-17}, {0, 0}, {4.30854e-18, -4.30854e-18}, {0.0703638, -0.0703638}, {-2.6325e-33, -1.18255e-33}, {-1.45033e-17, 4.10329e-18}, {-1.8853e-33, 2.16153e-34}, {-9.95127e-18, -2.28708e-17}, {-0.0573837, -0.0643268}, {-0.0371039, 0.0609584}, {0.00401883, -0.0107605}, {-0.202513, 0.151009}, {-0.0564302, 0.148095}, {-0.101392, -0.10415}, {-0.0218668, -0.0620697}, {0.0947394, -0.0684151}, {-0.0768246, -0.231909}, {-0.0514549, -0.0248385}, {-0.133934, -0.124877}, {0.129989, -0.0287355}, {0.0176577, -0.105658}, {0.124485, -0.107696}, {0.00311226, -0.179625}, {-0.0593093, -0.139317}, {0.0948213, 0.187728}, {0.0670226, -0.0727921}, {-0.0541868, -0.073592}, {-0.272545, -0.155377}, {0.0626124, -0.239634}, {-0.0776201, 0.0483137}, {0.29566, 0.075091}, {-0.0679552, -0.0295722}, {-4.75938e-18, 1.66955e-17}, {0, 0}, {-4.57566e-34, 5.60841e-35}, {-1.66955e-17, 4.75938e-18}, {-3.97984e-18, 4.40131e-18}, {0, 0}, {-0.649674, 0.649674}, {0, 0}, {-1.07074e-17, 4.8623e-17}, {0, 0}, {9.19305e-34, -1.2272e-33}, {-4.40131e-18, 3.97984e-18}, {-3.97811e-17, 3.97811e-17}, {-0.649674, 0.649674}, {-1.66811e-33, 1.62131e-33}, {-4.8623e-17, 1.07074e-17}, {-7.11118e-18, 1.63014e-18}, {0, 0}, {1.21261e-34, -2.80222e-34}, {-1.56462e-18, 1.20574e-17}, {-8.81623e-18, -7.55181e-18}, {0, 0}, {0.0703638, -0.0703638}, {0, 0}, {-5.07231e-18, 5.6436e-18}, {0, 0}, {-2.58571e-33, 1.00798e-33}, {-2.00524e-18, -2.07523e-17}, {4.30854e-18, -4.30854e-18}, {0.0703638, -0.0703638}, {-2.52107e-35, 7.26047e-34}, {-5.49379e-18, 1.24546e-17}, {0.00740483, -0.0735311}, {0.138605, -0.0772226}, {0.0747133, -0.0525776}, {0.00746346, -0.125709}, {0.0797641, 0.128052}, {0.0910954, -0.0610522}, {-0.108056, -0.128453}, {-0.0602172, 0.148445}, {0.103672, 0.0627013}, {0.118206, 0.0211509}, {0.097993, -0.125868}, {-0.0183113, -0.0938135}, {-0.11488, -0.0769668}, {-0.040742, 0.0389805}, {0.0618463, 0.170832}, {-0.186072, -0.146774}, {-0.0222281, 0.128044}, {-0.0523003, 0.215975}, {0.196863, -0.101591}, {-0.237618, 0.0389213}, {0.0748492, -0.188815}, {0.023035, 0.131075}, {-0.0338894, 0.192402}, {-0.132448, 0.28203}, {-1.06768e-17, -8.21079e-18}, {0, 0}, {5.32702e-34, 1.49293e-35}, {8.21079e-18, 1.06768e-17}, {-4.6991e-18, 4.55861e-18}, {0, 0}, {-8.94329e-17, 6.33129e-17}, {0, 0}, {-0.649674, 0.649674}, {0, 0}, {-5.57565e-34, -1.67412e-34}, {-4.55861e-18, 4.6991e-18}, {-1.67681e-33, 2.35499e-33}, {-6.33129e-17, 8.94329e-17}, {-3.97811e-17, 3.97811e-17}, {-0.649674, 0.649674}, {-7.763e-18, -4.88627e-18}, {0, 0}, {6.94449e-34, 3.77526e-34}, {-1.0925e-18, -5.36693e-18}, {1.39517e-17, 7.51237e-19}, {0, 0}, {2.17961e-18, 1.3598e-17}, {0, 0}, {0.0703638, -0.0703638}, {0, 0}, {-1.91639e-33, -1.69623e-34}, {1.03222e-18, 8.91728e-19}, {-3.59863e-34, 9.66394e-35}, {1.61764e-18, 7.77043e-18}, {4.30854e-18, -4.30854e-18}, {0.0703638, -0.0703638}, {0.0074578, -0.166046}, {0.148099, 0.142035}, {-0.178783, -0.0819175}, {0.201433, 0.154842}, {0.0254153, -0.10943}, {0.182133, 0.0993425}, {-0.0828282, -0.0432532}, {0.11018, 0.00196916}, {0.197299, -0.0709579}, {-0.222306, -0.00800548}, {-0.0608988, 0.0232307}, {-0.00826633, 0.035842}, {0.0199024, -0.331465}, {-0.170684, -0.00740501}, {-0.0712079, 0.228907}, {-0.167823, -0.0376773}, {-0.181003, 0.103005}, {0.118772, 0.031469}, {-0.00292941, -0.0360347}, {-0.0694756, 0.0819652}, {-0.0408032, -0.0608558}, {-0.0759721, -0.178142}, {-0.271596, 0.0341193}, {0.243051, 0.0773969}, {0.333942, 0.333942}, {0, 0}, {2.04481e-17, 2.04481e-17}, {0.333942, 0.333942}, {3.94022e-17, -2.70229e-17}, {0, 0}, {-7.47752e-19, -7.88598e-18}, {0, 0}, {-5.35976e-18, -8.10023e-18}, {0, 0}, {2.04996e-35, 9.85524e-34}, {4.29822e-17, -4.45911e-17}, {9.72757e-34, -1.77581e-33}, {1.09154e-17, -1.48346e-18}, {-2.1946e-34, -7.3193e-34}, {-3.64781e-18, -1.69721e-17}, {0.898349, 0.898349}, {0, 0}, {5.5008e-17, 5.5008e-17}, {0.898349, 0.898349}, {-1.385e-17, 3.23029e-17}, {0, 0}, {-5.16196e-17, -1.12652e-16}, {0, 0}, {-5.67823e-17, -9.26867e-17}, {0, 0}, {1.44467e-34, 1.41502e-33}, {-2.13952e-17, 2.39871e-17}, {-1.96765e-33, -4.17694e-33}, {-5.93175e-17, -6.26583e-17}, {-4.32457e-33, -4.10933e-33}, {-5.98063e-17, -1.42203e-16}, {-0.304815, 0.337978}, {0.333879, -0.0911541}, {-0.28295, 0.27365}, {-0.699364, 0.37403}, {0.0661855, 0.566246}, {-0.0685443, 0.173105}, {0.492138, -0.419708}, {-0.341971, 0.157495}, {-0.707468, -0.346845}, {0.395835, -0.196645}, {0.492577, -0.069174}, {-0.178373, 0.0119797}, {0.0796147, -0.592672}, {0.0211272, 0.0413917}, {0.428018, -0.047478}, {0.446912, 0.0309616}, {-0.192429, 0.164746}, {-0.076418, -0.259322}, {-0.400357, 0.047729}, {-0.277265, 0.125464}, {0.215864, -0.323063}, {-0.0713515, -0.0583378}, {-0.153737, 0.739445}, {-0.314828, 0.208236}, {2.89386e-17, 1.8813e-17}, {0, 0}, {4.85439e-34, -1.5119e-33}, {2.00347e-17, 2.85157e-17}, {0.0703638, -0.0703638}, {0, 0}, {1.72459e-17, 1.13446e-17}, {0, 0}, {5.38803e-18, 1.3677e-17}, {0, 0}, {4.30854e-18, -4.30854e-18}, {0.0703638, -0.0703638}, {9.27364e-34, 3.63145e-33}, {-7.89612e-18, 3.84426e-17}, {9.65652e-34, 2.85493e-33}, {-6.27252e-18, 2.72935e-17}, {1.40095e-17, 3.27952e-18}, {0, 0}, {2.57815e-34, 3.96825e-34}, {4.50658e-18, 6.35592e-18}, {-0.649674, 0.649674}, {0, 0}, {2.80935e-18, -4.24648e-18}, {0, 0}, {-1.30899e-17, 5.22984e-18}, {0, 0}, {-3.97811e-17, 3.97811e-17}, {-0.649674, 0.649674}, {-6.2223e-34, -2.93226e-34}, {3.22538e-18, -5.42784e-18}, {-6.38403e-35, 4.79563e-34}, {-1.21711e-17, 6.34832e-18}, {-0.0651089, 0.252252}, {-0.0310165, -0.0529542}, {-0.0548229, -0.0228264}, {-0.190507, -0.0450867}, {-0.0369112, 0.17003}, {-0.0976763, -0.12958}, {0.00941216, -0.102069}, {0.0289235, 0.103138}, {-0.134219, -0.0520054}, {0.104241, 0.0056989}, {0.0203017, 0.0600165}, {-0.0797669, 0.163464}, {0.211788, -0.0248343}, {-0.0154356, -0.0570675}, {-0.156286, -0.0379479}, {-0.151619, -0.187369}, {0.0860071, -0.0932265}, {-0.0149229, -0.0309086}, {-0.18319, 0.0817577}, {0.0376425, -0.084288}, {-0.19554, -0.0753742}, {-0.0792463, -0.00476987}, {0.0900378, -0.0243934}, {0.0487987, -0.0351105}, {4.94414e-18, 1.50637e-17}, {0, 0}, {-6.13583e-34, 3.3753e-34}, {-3.94757e-18, 1.08756e-17}, {3.69939e-18, -1.70776e-18}, {0, 0}, {0.0703638, -0.0703638}, {0, 0}, {4.07128e-18, 5.91969e-18}, {0, 0}, {4.65674e-34, 2.74254e-33}, {-2.06828e-17, 2.58692e-17}, {4.30854e-18, -4.30854e-18}, {0.0703638, -0.0703638}, {8.12949e-34, -6.61445e-34}, {3.20013e-19, 1.32547e-18}, {-2.35086e-17, -3.34351e-18}, {0, 0}, {-7.71643e-34, -9.57183e-36}, {-2.25153e-17, -8.7397e-18}, {-3.50471e-18, 2.15065e-18}, {0, 0}, {-0.649674, 0.649674}, {0, 0}, {2.87238e-18, -1.66997e-17}, {0, 0}, {2.66677e-34, -6.34502e-34}, {-2.32881e-18, 1.72918e-18}, {-3.97811e-17, 3.97811e-17}, {-0.649674, 0.649674}, {-1.05771e-33, 2.04402e-33}, {1.66923e-17, -7.67194e-18}, {0.00700547, 0.0796791}, {-0.111909, -0.11059}, {-0.0496604, -0.00280436}, {-0.0206468, -0.243382}, {0.188916, -0.0207421}, {-0.0601878, -0.102819}, {-0.123982, 0.0339939}, {0.132023, -0.169255}, {0.211826, 0.136737}, {-0.136536, -0.125222}, {0.0591417, 0.053948}, {0.131346, -0.0700752}, {0.169414, 0.00539238}, {-0.285759, -0.126328}, {0.180106, -0.0235219}, {0.0155764, -0.137379}, {0.0274904, -0.0186002}, {0.0302117, 0.0196978}, {-0.0955218, 0.0893471}, {0.0694461, -0.175027}, {0.195098, 0.15783}, {0.133154, -0.0101063}, {0.0597049, -0.121845}, {0.103684, 0.0637283}, {-8.81818e-18, 9.28744e-18}, {0, 0}, {-4.87482e-34, 6.61217e-34}, {-6.30375e-18, 5.97432e-18}, {-4.4846e-18, 2.56065e-18}, {0, 0}, {-6.664e-18, 1.44867e-18}, {0, 0}, {0.0703638, -0.0703638}, {0, 0}, {2.27154e-34, 2.41419e-33}, {-1.71231e-17, 1.51992e-17}, {8.3133e-34, -2.92137e-34}, {-1.02748e-17, -3.28604e-18}, {4.30854e-18, -4.30854e-18}, {0.0703638, -0.0703638}, {-1.64723e-17, -1.23978e-17}, {0, 0}, {-7.5577e-34, -2.20308e-34}, {-1.01641e-17, -1.58735e-17}, {-1.07795e-17, 3.69775e-18}, {0, 0}, {-1.3001e-17, 1.26552e-17}, {0, 0}, {-0.649674, 0.649674}, {0, 0}, {-2.88142e-34, 1.71831e-34}, {-1.0639e-17, 3.83824e-18}, {-3.64383e-33, 3.0053e-33}, {9.59339e-19, -1.33189e-17}, {-3.97811e-17, 3.97811e-17}, {-0.649674, 0.649674}, {-0.108101, 0.0759951}, {-0.0132256, -0.103687}, {0.0775753, 0.197664}, {-0.0268197, -0.217684}, {-0.0973845, 0.0133805}, {0.166886, -0.176922}, {-0.174082, 0.0368077}, {-0.146363, 0.0633013}, {0.101839, 0.00578492}, {0.28734, -0.0850284}, {0.0864538, 0.0798966}, {-0.134927, 0.294084}, {-0.306375, 0.0444565}, {0.177774, -0.112248}, {-0.0713049, 0.0285475}, {-0.0659292, 0.143305}, {0.127778, -0.00169064}, {-0.0844571, -0.0840331}, {0.0196931, -0.192129}, {-0.116802, 0.133512}, {-0.0707155, 0.00573431}, {0.0151778, 0.00127919}, {0.26952, -0.0982653}, {-0.108576, -0.168438} - }; - - std::vector > becp = { - {0.714037,0}, {4.0926e-34,4.77049e-18}, {-6.74075e-34,1.9082e-17}, {3.85186e-34,3.38271e-17}, {0.310588,-1.38778e-17}, {-1.73472e-18,-1.0842e-18}, {0,-1.73472e-18}, {-1.73472e-18,-9.75782e-19}, {0,1.38778e-17}, {0.253264,-1.5508e-17}, {3.46945e-18,-7.70372e-34}, {-1.38778e-17,3.85186e-34}, - {2.498e-16,-3.46945e-18}, {-0.0270547,1.73472e-18}, {3.46945e-18,-1.21431e-17}, {7.80626e-18,-3.46945e-18}, {0,2.77556e-17}, {0,-7.70372e-34}, {0.253264,-1.5508e-17}, {-5.20417e-18,9.62965e-35}, {1.38778e-17,-1.38778e-17}, {3.46945e-18,-1.21431e-17}, {-0.0270547,5.20417e-18}, - {-1.45012e-18,0}, {0,-4.16334e-17}, {-1.04083e-17,3.85186e-34}, {-2.77556e-17,9.62965e-35}, {0.253264,-1.5508e-17}, {-2.77556e-17,1.73472e-17}, {7.80626e-18,-1.21431e-17}, {2.71051e-19,0}, {-0.0270547,0}, {0.310588,1.38778e-17}, {1.73472e-18,7.58942e-19}, {0,1.73472e-18}, - {0,1.38236e-18}, {0.714037,-4.54164e-34}, {-1.44445e-34,-1.73472e-18}, {3.85186e-34,-5.20417e-18}, {0,-9.54098e-18}, {-2.498e-16,-3.46945e-18}, {-0.0270547,5.20417e-18}, {2.60209e-18,1.38778e-17}, {7.80626e-18,6.93889e-18}, {-1.94015e-33,-1.38778e-17}, {0.253264,-1.5508e-17}, - {0,-3.85186e-34}, {3.46945e-18,-1.34815e-33}, {-1.38778e-17,-1.38778e-17}, {3.46945e-18,1.38778e-17}, {-0.0270547,-1.73472e-18}, {-2.11419e-18,0}, {-8.62772e-34,2.77556e-17}, {-3.46945e-18,3.85186e-34}, {0.253264,-1.5508e-17}, {2.25514e-17,-5.77779e-34}, {2.77556e-17,1.73472e-17}, - {7.80626e-18,1.04083e-17}, {-2.12775e-18,0}, {-0.0270547,1.73472e-18}, {2.20382e-34,8.32667e-17}, {6.93889e-18,-1.54074e-33}, {2.77556e-17,2.11852e-33}, {0.253264,-1.5508e-17} - }; - - std::vector > becp_spin = { - {0.589512, 0.589512}, {3.64365e-19, -4.40651e-19}, {-1.29215e-18, 4.53274e-18}, {-2.89869e-18, -2.22919e-18}, {0.219139, 0.219139}, {7.8567e-18, 5.10765e-18}, {1.34231e-18, 4.08972e-18}, {-2.39409e-18, 2.5215e-18}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.60972e-17, 3.60972e-17}, {2.07824e-35, 2.31311e-35}, {-1.24227e-34, 1.52266e-35}, {1.44626e-34, 4.05323e-36}, {1.34184e-17, 1.34184e-17}, {1.31795e-34, -4.10474e-34}, {-1.66585e-34, 9.16378e-35}, {-1.32349e-34, 1.79517e-34}, {0.589512, 0.589512}, {4.40651e-19, -3.64365e-19}, {-4.53274e-18, 1.29215e-18}, {2.22919e-18, 2.89869e-18}, {0.219139, 0.219139}, {5.43932e-18, 7.74187e-18}, {-1.07175e-18, 2.95268e-18}, {-1.71144e-18, 1.622e-18}, {-8.68944e-18, -1.36408e-17}, {-0.176383, 0.176383}, {-1.08051e-18, 1.19494e-18}, {-1.27578e-18, 1.23764e-18}, {2.58564e-17, -1.77329e-17}, {0.0191034, -0.0191034}, {1.00437e-18, -4.63648e-19}, {-1.21755e-18, 6.95205e-19}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-2.93929e-17, -1.08179e-16}, {6.16074e-19, -4.63503e-19}, {-0.176383, 0.176383}, {-2.42806e-17, 1.71892e-17}, {-4.90688e-19, -5.17492e-18}, {4.68219e-18, 3.08002e-18}, {0.0191034, -0.0191034}, {-1.80924e-18, 3.93306e-19}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-5.83871e-17, -8.11913e-17}, {-1.65566e-18, 1.61752e-18}, {-2.90701e-18, 1.32009e-17}, {-0.176383, 0.176383}, {-3.51717e-18, -5.31551e-18}, {1.46283e-18, 3.71325e-18}, {1.10533e-18, 1.60717e-18}, {0.0191034, -0.0191034}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {4.998e-34, 2.14907e-34}, {-1.08004e-17, 1.08004e-17}, {2.49587e-34, -3.33179e-34}, {-1.51376e-34, -4.54515e-35}, {1.34522e-35, 6.46718e-34}, {1.16975e-18, -1.16975e-18}, {1.26428e-34, 7.44588e-34}, {6.16712e-35, 6.55441e-34}, {-1.36408e-17, -8.68944e-18}, {-0.176383, 0.176383}, {-1.19494e-18, 1.08051e-18}, {-1.23764e-18, 1.27578e-18}, {2.82057e-17, -2.92614e-17}, {0.0191034, -0.0191034}, {-5.61528e-18, 7.02336e-18}, {-4.64885e-18, 4.12651e-18}, {-3.30189e-34, -3.16294e-33}, {2.32648e-34, -2.24179e-34}, {-1.08004e-17, 1.08004e-17}, {-4.55245e-34, 6.39369e-34}, {6.3834e-34, -1.16532e-33}, {2.51775e-34, 9.85922e-34}, {1.16975e-18, -1.16975e-18}, {2.25702e-34, -7.93138e-35}, {-1.08179e-16, -2.93929e-17}, {4.63503e-19, -6.16074e-19}, {-0.176383, 0.176383}, {-1.71892e-17, 2.42806e-17}, {7.1629e-18, -9.73473e-19}, {-2.14376e-18, 1.0437e-17}, {0.0191034, -0.0191034}, {-2.78955e-18, -8.92146e-19}, {-2.47792e-33, -1.42266e-33}, {-3.47566e-34, 1.50739e-34}, {-4.52883e-34, 4.40179e-34}, {-1.08004e-17, 1.08004e-17}, {-1.44014e-34, -4.80305e-34}, {2.6217e-34, 7.751e-34}, {2.20712e-34, -1.79579e-34}, {1.16975e-18, -1.16975e-18}, {-8.11913e-17, -5.83871e-17}, {-1.61752e-18, 1.65566e-18}, {-1.32009e-17, 2.90701e-18}, {-0.176383, 0.176383}, {-2.39376e-18, -1.11374e-17}, {-1.70296e-18, 7.41007e-18}, {8.68822e-20, 3.59858e-19}, {0.0191034, -0.0191034}, {0.219139, 0.219139}, {3.47642e-18, -4.46033e-18}, {-1.93065e-18, 4.42575e-19}, {-2.10762e-18, -1.3266e-18}, {0.589512, 0.589512}, {3.80353e-18, 8.90376e-19}, {-6.38248e-18, -9.07748e-19}, {-4.47215e-18, -3.36594e-18}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {1.34184e-17, 1.34184e-17}, {1.09277e-34, 3.39765e-34}, {3.29217e-35, -7.60789e-35}, {1.8854e-34, 1.02497e-34}, {3.60972e-17, 3.60972e-17}, {6.99955e-35, 1.07736e-34}, {-2.09497e-34, -2.59871e-36}, {-2.05188e-34, -5.98125e-35}, {0.219139, 0.219139}, {2.53277e-18, -6.06456e-18}, {-4.24787e-19, 3.27352e-18}, {-2.96609e-19, -1.4571e-18}, {0.589512, 0.589512}, {1.22352e-18, 1.7256e-18}, {-6.1128e-18, -2.37279e-18}, {-2.7595e-18, -4.30959e-18}, {2.33626e-17, 1.83796e-17}, {0.0191034, -0.0191034}, {-2.39357e-18, -2.05028e-18}, {3.78783e-18, 2.03957e-19}, {-9.08858e-18, 2.11978e-17}, {-0.176383, 0.176383}, {-9.51513e-19, 5.83892e-19}, {-2.9266e-18, 1.00392e-18}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-1.32518e-17, -6.84152e-18}, {-2.35542e-18, -3.93758e-18}, {0.0191034, -0.0191034}, {5.91753e-19, 3.69179e-18}, {-3.38737e-17, -7.39245e-17}, {7.62727e-19, -1.1529e-18}, {-0.176383, 0.176383}, {-3.52972e-18, 3.43583e-18}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {-2.76266e-17, 3.33724e-17}, {-6.13303e-18, -8.03639e-18}, {-1.37711e-18, 1.53221e-18}, {0.0191034, -0.0191034}, {-3.72616e-17, -6.08227e-17}, {-3.55386e-18, 1.41988e-18}, {7.79838e-19, -4.53389e-18}, {-0.176383, 0.176383}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {2.30464e-34, -1.37798e-33}, {1.16975e-18, -1.16975e-18}, {-7.02008e-34, 2.73661e-34}, {-5.2029e-34, -4.60519e-35}, {9.4802e-35, 9.28562e-34}, {-1.08004e-17, 1.08004e-17}, {7.24015e-35, -1.72264e-34}, {-7.82293e-35, 4.66514e-35}, {1.40744e-17, 9.09148e-18}, {0.0191034, -0.0191034}, {-5.44414e-19, -5.63416e-18}, {2.80243e-19, 2.421e-19}, {-1.40399e-17, 1.57407e-17}, {-0.176383, 0.176383}, {-6.32261e-19, 4.69464e-19}, {-2.88845e-18, 1.04206e-18}, {-1.1114e-34, 1.11426e-33}, {-7.14712e-34, -3.21057e-34}, {1.16975e-18, -1.16975e-18}, {-9.77011e-35, 2.62371e-35}, {-1.2912e-33, -2.74098e-33}, {-1.68933e-34, -7.96096e-35}, {-1.08004e-17, 1.08004e-17}, {-9.89283e-34, 8.15924e-34}, {-1.22404e-17, 4.5782e-18}, {-3.93758e-18, 1.11402e-18}, {0.0191034, -0.0191034}, {4.39182e-19, 2.10964e-18}, {-3.89252e-17, -4.11175e-17}, {8.75675e-19, -1.47363e-18}, {-0.176383, 0.176383}, {2.60456e-19, -3.61601e-18}, {2.43024e-34, 2.12024e-33}, {-5.1185e-34, 5.86845e-35}, {-6.84459e-36, 1.97118e-34}, {1.16975e-18, -1.16975e-18}, {-2.83786e-33, -2.69662e-33}, {-1.73324e-35, 1.30199e-34}, {-2.87165e-34, 5.54942e-34}, {-1.08004e-17, 1.08004e-17}, {-1.11827e-17, 3.57217e-17}, {-2.70172e-18, -6.20931e-18}, {-1.49154e-18, 3.38136e-18}, {0.0191034, -0.0191034}, {-3.92459e-17, -9.33159e-17}, {-3.30441e-18, 1.72354e-18}, {4.53187e-18, -2.0829e-18}, {-0.176383, 0.176383}, {-0.151418, 0.198618}, {-0.0155794, -0.0174644}, {0.00201038, -0.0199633}, {0.00202476, -0.0450809}, {-0.200025, 0.221787}, {-0.0176768, 0.0684854}, {0.00190195, 0.0216325}, {-0.029349, 0.0206323}, {0.408276, -0.167813}, {-0.0100735, 0.0165499}, {0.0376307, -0.0209656}, {0.0402082, 0.0385619}, {0.219097, -0.0598169}, {-0.00842084, -0.0143768}, {-0.0303829, -0.0300247}, {-0.00359068, -0.0281506}, {-0.14026, -0.0404854}, {0.00109109, -0.00292143}, {0.0202843, -0.0142746}, {-0.0485386, -0.0222402}, {-0.185677, 0.179574}, {-0.0148842, -0.00619727}, {-0.0134826, -0.000761371}, {0.0210613, 0.0536649}, {-0.207809, -0.0204807}, {-0.0549812, 0.0409982}, {0.00202629, -0.0341294}, {0.0546881, 0.042039}, {-0.458935, 0.245445}, {-0.0517218, -0.0122408}, {-0.00560551, -0.0660771}, {-0.00728142, -0.0591003}, {-0.155758, 0.422446}, {-0.0153205, 0.040207}, {0.0216556, 0.0347654}, {0.00690013, -0.0297097}, {0.0434321, 0.371581}, {-0.0100212, 0.0461625}, {0.0512898, -0.00563137}, {-0.0264394, 0.00363274}, {-0.034846, 0.30711}, {-0.0275275, -0.0282763}, {0.024732, -0.0165754}, {0.0494484, 0.026971}, {-0.04498, 0.113595}, {-0.0265187, -0.0351804}, {-0.0163407, -0.0279149}, {0.0453088, -0.0480335}, {0.272916, 0.161803}, {-0.00593673, -0.0168516}, {-0.0293366, -0.0348744}, {-0.0224875, -0.011743}, {0.322949, -0.27542}, {0.00255536, -0.0277111}, {-0.0336606, 0.00922919}, {-0.0472624, 0.00999311}, {-0.263423, -0.0633477}, {0.0257213, -0.0185744}, {-0.0163487, 0.0403021}, {0.0299132, 0.000534618}, {-0.224408, 0.103351}, {0.00785259, 0.0280015}, {0.0358437, -0.0459518}, {-0.039737, 0.017186}, {-0.292207, 0.0754645}, {-0.0208575, -0.0629621}, {0.0281465, 0.0170231}, {0.0535657, -0.0192648}, {-0.464253, -0.227606}, {-0.0364398, -0.0141192}, {0.0575099, 0.0371234}, {0.0276488, 0.00157058}, {0.164371, 0.0675376}, {-0.0139698, -0.00674355}, {0.0320923, 0.00574237}, {-0.0603552, -0.00217345}, {0.259754, -0.129042}, {0.028301, 0.00154723}, {-0.0370689, -0.0339973}, {0.0780115, -0.0230848}, {0.289087, 0.294914}, {-0.0363624, -0.0339035}, {0.0266047, -0.0341726}, {-0.0165338, 0.00630703}, {0.323237, -0.0453932}, {0.00551181, 0.0162942}, {0.0160567, 0.0146466}, {0.0234718, 0.0216916}, {0.01868, -0.0721715}, {0.0352915, -0.00780156}, {-0.00497142, -0.0254699}, {-0.00224427, 0.00973094}, {-0.117051, 0.00786132}, {-0.0216563, 0.0443798}, {0.0356598, -0.0190251}, {-0.0366322, 0.0798423}, {0.343382, -0.162698}, {0.00479399, -0.0286857}, {-0.0311893, -0.0208961}, {0.0054034, -0.0899912}, {0.0522446, -0.388922}, {0.0574995, -0.00674239}, {0.0459952, 0.00146401}, {-0.0831795, 0.0120697}, {-0.121058, 0.0831456}, {0.0337971, -0.029239}, {-0.0110613, 0.010583}, {-0.0463398, -0.00201043}, {0.0138641, 0.027162}, {-0.0041907, -0.0154936}, {-0.0775822, -0.0342975}, {0.0482649, -0.0304748}, {-0.141787, -0.0941454}, {0.000844965, -0.0487674}, {0.016791, 0.0463802}, {-0.0193326, 0.0621471}, {0.280873, -0.0311559}, {-0.0424309, -0.0103027}, {0.0488979, -0.0063861}, {-0.0193589, 0.00775051}, {0.232211, 0.228798}, {-0.0161022, -0.037824}, {-0.0505177, -0.0398486}, {-0.045563, -0.0102292}, {0.293272, 0.0203175}, {-0.0411639, -0.0508697}, {0.00422893, -0.0372978}, {-0.0178995, 0.0389067}, {-0.215803, 0.202432}, {0.0257435, 0.0509673}, {-0.00603483, 0.0347632}, {-0.0491414, 0.0279653}, {-0.126275, 0.108109}, {0.0233505, -0.0253105}, {0.00746352, -0.00504986}, {0.0346911, -0.000459002}, {-0.010801, -0.129215}, {0.0181963, -0.0197627}, {-0.0141993, 0.0586362}, {0.0322462, 0.0085437}, {-0.0501468, -0.170172}, {-0.00405151, -0.00839154}, {0.00820234, 0.00534787}, {-0.0229297, -0.0228146}, {-0.223267, 0.0715199}, {-0.0147115, -0.0199799}, {0.0534475, -0.0275814}, {-0.000795322, -0.00978326}, {-0.262721, 0.0313206}, {-0.0497351, 0.0221968}, {-0.0259337, 0.0242573}, {0.00534659, -0.052162}, {-0.03707, -0.16004}, {-0.0739947, -0.042184}, {-0.0645123, 0.010567}, {-0.0188623, 0.0222532}, {-0.181946, 0.0823316}, {0.0102198, -0.0228838}, {0.0188543, -0.0475191}, {-0.0317113, 0.0362478}, {0.393393, 0.173144}, {0.016999, -0.0650595}, {0.0203212, -0.0512624}, {-0.0110779, -0.0165221}, {0.141654, -0.212}, {-0.0530882, -0.0204637}, {0.0529682, 0.0428501}, {-0.0191989, 0.00155684}, {0.164424, -0.0767119}, {-0.0210735, 0.013117}, {0.00625389, 0.0355862}, {-0.0206261, -0.0483646}, {-0.0468221, -0.0382823}, {-0.021515, -0.001295}, {0.0361506, -0.0027438}, {0.00412072, 0.000347295}, {-0.0752766, 0.59987}, {0.0802704, 0.0203869}, {-0.0092008, 0.0522364}, {-0.0737371, 0.00926323}, {-0.100885, 0.485237}, {0.0244448, -0.00662269}, {0.0162096, -0.0330803}, {0.0731735, -0.0266786}, {-0.0168811, 0.217894}, {-0.0184495, -0.00802871}, {-0.0359591, 0.0765698}, {0.0659872, 0.0210129}, {-0.206596, 0.136648}, {0.0132486, -0.00953235}, {0.0281496, 0.0173019}, {-0.0294779, -0.0457301} - }; + {1.52389, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, + {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {1.52389, 0}, {0, 0}, {0, 0}, {0, 0}, + {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, + {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, + {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, + {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, + {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, + {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, + {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, + {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {1.52389, 0}, {0, 0}, {0, 0}, {0, 0}, + {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, + {0, 0}, {3.6833, 0}, {1.52389, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, + {0, 0}, {0, 0}, {3.6833, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {3.6833, 0}}; + + std::vector> expected_ps = {{1.08811, 0}, + {0, 2.11482e-17}, + {0, 4.22963e-17}, + {0, -6.34445e-17}, + {0.473301, 2.11482e-17}, + {-3.80667e-16, -5.28704e-18}, + {-2.11482e-17, -2.11482e-17}, + {4.22963e-17, 2.64352e-17}, + {1.50743e-33, 1.75712e-17}, + {0.93285, -5.71206e-17}, + {0, -2.83751e-33}, + {-3.83371e-17, 1.41876e-33}, + {6.38951e-18, 2.79541e-18}, + {-0.0996506, 1.91685e-17}, + {1.2779e-17, 5.11161e-17}, + {2.87528e-17, 3.83371e-17}, + {-2.48283e-33, 7.02847e-17}, + {1.2779e-17, -2.83751e-33}, + {0.93285, -5.71206e-17}, + {-1.02232e-16, 3.54689e-34}, + {0, 6.38951e-18}, + {9.58427e-18, 5.11161e-17}, + {-0.0996506, -6.38951e-18}, + {-7.83714e-18, 0}, + {1.41876e-33, 1.24596e-16}, + {-5.11161e-17, 1.41876e-33}, + {-1.91685e-17, 3.54689e-34}, + {0.93285, -5.71206e-17}, + {0, 5.09164e-18}, + {2.87528e-17, 2.55581e-17}, + {-7.78722e-18, 0}, + {-0.0996506, 6.38951e-18}, + {0.473301, -2.11482e-17}, + {3.80667e-16, -5.28704e-18}, + {2.11482e-17, -2.11482e-17}, + {-4.22963e-17, 2.64352e-17}, + {1.08811, -6.92094e-34}, + {-2.95657e-33, -2.11482e-17}, + {-1.31476e-33, 4.22963e-17}, + {3.35836e-34, 1.26889e-16}, + {-6.38951e-18, -3.99345e-18}, + {-0.0996506, 6.38951e-18}, + {1.2779e-17, -4.47266e-17}, + {2.87528e-17, -4.47266e-17}, + {-5.32034e-34, -6.38951e-18}, + {0.93285, -5.71206e-17}, + {-1.2779e-17, 1.41876e-33}, + {2.55581e-17, -5.67503e-33}, + {0, -6.38951e-18}, + {1.2779e-17, -4.47266e-17}, + {-0.0996506, 1.91685e-17}, + {9.98362e-19, 0}, + {1.41876e-33, -1.91685e-17}, + {0, -1.41876e-33}, + {0.93285, -5.71206e-17}, + {1.02232e-16, 7.80316e-33}, + {-6.38951e-18, -3.5941e-18}, + {2.87528e-17, -1.2779e-17}, + {-5.34123e-18, 0}, + {-0.0996506, 0}, + {0, -3.51423e-17}, + {1.2779e-17, -4.96565e-33}, + {8.30637e-17, -2.12814e-33}, + {0.93285, -5.71206e-17}}; + + std::vector> expected_ps_spin = {{0.898349, 0.898349}, {0, 0}, + {5.5008e-17, 5.5008e-17}, {0.898349, 0.898349}, + {-1.32417e-17, -2.0787e-17}, {0, 0}, + {-4.47914e-17, -1.64852e-16}, {0, 0}, + {-8.89752e-17, -1.23726e-16}, {0, 0}, + {7.61637e-34, 3.27494e-34}, {-2.0787e-17, -1.32417e-17}, + {-5.0317e-34, -4.81996e-33}, {-1.64852e-16, -4.47914e-17}, + {-3.77607e-33, -2.16796e-33}, {-1.23726e-16, -8.89752e-17}, + {0.333942, 0.333942}, {0, 0}, + {2.04481e-17, 2.04481e-17}, {0.333942, 0.333942}, + {3.56019e-17, 2.80084e-17}, {0, 0}, + {-2.01942e-17, -1.04257e-17}, {0, 0}, + {-4.20997e-17, 5.08557e-17}, {0, 0}, + {3.512e-34, -2.09989e-33}, {2.14478e-17, 1.38544e-17}, + {-1.69364e-34, 1.698e-33}, {-1.8653e-17, 6.97665e-18}, + {3.70341e-34, 3.231e-33}, {-1.70411e-17, 5.44357e-17}, + {-0.230744, 0.302671}, {0.622165, -0.255728}, + {-0.21374, -0.0616951}, {-0.316678, -0.0312102}, + {-0.237357, 0.643759}, {-0.0531013, 0.468}, + {0.415893, 0.246569}, {-0.401426, -0.0965346}, + {-0.44529, 0.114999}, {0.250482, 0.102919}, + {0.440536, 0.449415}, {0.0284661, -0.109981}, + {0.523275, -0.247933}, {-0.184478, 0.126704}, + {-0.216067, -0.143467}, {0.353863, 0.348662}, + {-0.328859, 0.308482}, {-0.0164594, -0.196908}, + {-0.340233, 0.108988}, {-0.0564905, -0.243882}, + {0.599485, 0.263851}, {0.250563, -0.1169}, + {-0.114713, 0.914133}, {-0.0257248, 0.332045}, + {1.34207e-18, -1.62305e-18}, {0, 0}, + {7.6548e-35, 8.51989e-35}, {1.62305e-18, -1.34207e-18}, + {-0.649674, 0.649674}, {0, 0}, + {2.26919e-18, -1.70722e-18}, {0, 0}, + {-6.09832e-18, 5.95782e-18}, {0, 0}, + {-3.97811e-17, 3.97811e-17}, {-0.649674, 0.649674}, + {8.56914e-34, -8.25718e-34}, {1.70722e-18, -2.26919e-18}, + {-1.28019e-33, 5.55216e-34}, {-5.95782e-18, 6.09832e-18}, + {1.28047e-17, -1.64288e-17}, {0, 0}, + {4.02499e-34, 1.25146e-33}, {9.32896e-18, -2.23376e-17}, + {0.0703638, -0.0703638}, {0, 0}, + {-8.67574e-18, -1.45033e-17}, {0, 0}, + {-2.25898e-17, -2.96005e-17}, {0, 0}, + {4.30854e-18, -4.30854e-18}, {0.0703638, -0.0703638}, + {-2.6325e-33, -1.18255e-33}, {-1.45033e-17, 4.10329e-18}, + {-1.8853e-33, 2.16153e-34}, {-9.95127e-18, -2.28708e-17}, + {-0.0573837, -0.0643268}, {-0.0371039, 0.0609584}, + {0.00401883, -0.0107605}, {-0.202513, 0.151009}, + {-0.0564302, 0.148095}, {-0.101392, -0.10415}, + {-0.0218668, -0.0620697}, {0.0947394, -0.0684151}, + {-0.0768246, -0.231909}, {-0.0514549, -0.0248385}, + {-0.133934, -0.124877}, {0.129989, -0.0287355}, + {0.0176577, -0.105658}, {0.124485, -0.107696}, + {0.00311226, -0.179625}, {-0.0593093, -0.139317}, + {0.0948213, 0.187728}, {0.0670226, -0.0727921}, + {-0.0541868, -0.073592}, {-0.272545, -0.155377}, + {0.0626124, -0.239634}, {-0.0776201, 0.0483137}, + {0.29566, 0.075091}, {-0.0679552, -0.0295722}, + {-4.75938e-18, 1.66955e-17}, {0, 0}, + {-4.57566e-34, 5.60841e-35}, {-1.66955e-17, 4.75938e-18}, + {-3.97984e-18, 4.40131e-18}, {0, 0}, + {-0.649674, 0.649674}, {0, 0}, + {-1.07074e-17, 4.8623e-17}, {0, 0}, + {9.19305e-34, -1.2272e-33}, {-4.40131e-18, 3.97984e-18}, + {-3.97811e-17, 3.97811e-17}, {-0.649674, 0.649674}, + {-1.66811e-33, 1.62131e-33}, {-4.8623e-17, 1.07074e-17}, + {-7.11118e-18, 1.63014e-18}, {0, 0}, + {1.21261e-34, -2.80222e-34}, {-1.56462e-18, 1.20574e-17}, + {-8.81623e-18, -7.55181e-18}, {0, 0}, + {0.0703638, -0.0703638}, {0, 0}, + {-5.07231e-18, 5.6436e-18}, {0, 0}, + {-2.58571e-33, 1.00798e-33}, {-2.00524e-18, -2.07523e-17}, + {4.30854e-18, -4.30854e-18}, {0.0703638, -0.0703638}, + {-2.52107e-35, 7.26047e-34}, {-5.49379e-18, 1.24546e-17}, + {0.00740483, -0.0735311}, {0.138605, -0.0772226}, + {0.0747133, -0.0525776}, {0.00746346, -0.125709}, + {0.0797641, 0.128052}, {0.0910954, -0.0610522}, + {-0.108056, -0.128453}, {-0.0602172, 0.148445}, + {0.103672, 0.0627013}, {0.118206, 0.0211509}, + {0.097993, -0.125868}, {-0.0183113, -0.0938135}, + {-0.11488, -0.0769668}, {-0.040742, 0.0389805}, + {0.0618463, 0.170832}, {-0.186072, -0.146774}, + {-0.0222281, 0.128044}, {-0.0523003, 0.215975}, + {0.196863, -0.101591}, {-0.237618, 0.0389213}, + {0.0748492, -0.188815}, {0.023035, 0.131075}, + {-0.0338894, 0.192402}, {-0.132448, 0.28203}, + {-1.06768e-17, -8.21079e-18}, {0, 0}, + {5.32702e-34, 1.49293e-35}, {8.21079e-18, 1.06768e-17}, + {-4.6991e-18, 4.55861e-18}, {0, 0}, + {-8.94329e-17, 6.33129e-17}, {0, 0}, + {-0.649674, 0.649674}, {0, 0}, + {-5.57565e-34, -1.67412e-34}, {-4.55861e-18, 4.6991e-18}, + {-1.67681e-33, 2.35499e-33}, {-6.33129e-17, 8.94329e-17}, + {-3.97811e-17, 3.97811e-17}, {-0.649674, 0.649674}, + {-7.763e-18, -4.88627e-18}, {0, 0}, + {6.94449e-34, 3.77526e-34}, {-1.0925e-18, -5.36693e-18}, + {1.39517e-17, 7.51237e-19}, {0, 0}, + {2.17961e-18, 1.3598e-17}, {0, 0}, + {0.0703638, -0.0703638}, {0, 0}, + {-1.91639e-33, -1.69623e-34}, {1.03222e-18, 8.91728e-19}, + {-3.59863e-34, 9.66394e-35}, {1.61764e-18, 7.77043e-18}, + {4.30854e-18, -4.30854e-18}, {0.0703638, -0.0703638}, + {0.0074578, -0.166046}, {0.148099, 0.142035}, + {-0.178783, -0.0819175}, {0.201433, 0.154842}, + {0.0254153, -0.10943}, {0.182133, 0.0993425}, + {-0.0828282, -0.0432532}, {0.11018, 0.00196916}, + {0.197299, -0.0709579}, {-0.222306, -0.00800548}, + {-0.0608988, 0.0232307}, {-0.00826633, 0.035842}, + {0.0199024, -0.331465}, {-0.170684, -0.00740501}, + {-0.0712079, 0.228907}, {-0.167823, -0.0376773}, + {-0.181003, 0.103005}, {0.118772, 0.031469}, + {-0.00292941, -0.0360347}, {-0.0694756, 0.0819652}, + {-0.0408032, -0.0608558}, {-0.0759721, -0.178142}, + {-0.271596, 0.0341193}, {0.243051, 0.0773969}, + {0.333942, 0.333942}, {0, 0}, + {2.04481e-17, 2.04481e-17}, {0.333942, 0.333942}, + {3.94022e-17, -2.70229e-17}, {0, 0}, + {-7.47752e-19, -7.88598e-18}, {0, 0}, + {-5.35976e-18, -8.10023e-18}, {0, 0}, + {2.04996e-35, 9.85524e-34}, {4.29822e-17, -4.45911e-17}, + {9.72757e-34, -1.77581e-33}, {1.09154e-17, -1.48346e-18}, + {-2.1946e-34, -7.3193e-34}, {-3.64781e-18, -1.69721e-17}, + {0.898349, 0.898349}, {0, 0}, + {5.5008e-17, 5.5008e-17}, {0.898349, 0.898349}, + {-1.385e-17, 3.23029e-17}, {0, 0}, + {-5.16196e-17, -1.12652e-16}, {0, 0}, + {-5.67823e-17, -9.26867e-17}, {0, 0}, + {1.44467e-34, 1.41502e-33}, {-2.13952e-17, 2.39871e-17}, + {-1.96765e-33, -4.17694e-33}, {-5.93175e-17, -6.26583e-17}, + {-4.32457e-33, -4.10933e-33}, {-5.98063e-17, -1.42203e-16}, + {-0.304815, 0.337978}, {0.333879, -0.0911541}, + {-0.28295, 0.27365}, {-0.699364, 0.37403}, + {0.0661855, 0.566246}, {-0.0685443, 0.173105}, + {0.492138, -0.419708}, {-0.341971, 0.157495}, + {-0.707468, -0.346845}, {0.395835, -0.196645}, + {0.492577, -0.069174}, {-0.178373, 0.0119797}, + {0.0796147, -0.592672}, {0.0211272, 0.0413917}, + {0.428018, -0.047478}, {0.446912, 0.0309616}, + {-0.192429, 0.164746}, {-0.076418, -0.259322}, + {-0.400357, 0.047729}, {-0.277265, 0.125464}, + {0.215864, -0.323063}, {-0.0713515, -0.0583378}, + {-0.153737, 0.739445}, {-0.314828, 0.208236}, + {2.89386e-17, 1.8813e-17}, {0, 0}, + {4.85439e-34, -1.5119e-33}, {2.00347e-17, 2.85157e-17}, + {0.0703638, -0.0703638}, {0, 0}, + {1.72459e-17, 1.13446e-17}, {0, 0}, + {5.38803e-18, 1.3677e-17}, {0, 0}, + {4.30854e-18, -4.30854e-18}, {0.0703638, -0.0703638}, + {9.27364e-34, 3.63145e-33}, {-7.89612e-18, 3.84426e-17}, + {9.65652e-34, 2.85493e-33}, {-6.27252e-18, 2.72935e-17}, + {1.40095e-17, 3.27952e-18}, {0, 0}, + {2.57815e-34, 3.96825e-34}, {4.50658e-18, 6.35592e-18}, + {-0.649674, 0.649674}, {0, 0}, + {2.80935e-18, -4.24648e-18}, {0, 0}, + {-1.30899e-17, 5.22984e-18}, {0, 0}, + {-3.97811e-17, 3.97811e-17}, {-0.649674, 0.649674}, + {-6.2223e-34, -2.93226e-34}, {3.22538e-18, -5.42784e-18}, + {-6.38403e-35, 4.79563e-34}, {-1.21711e-17, 6.34832e-18}, + {-0.0651089, 0.252252}, {-0.0310165, -0.0529542}, + {-0.0548229, -0.0228264}, {-0.190507, -0.0450867}, + {-0.0369112, 0.17003}, {-0.0976763, -0.12958}, + {0.00941216, -0.102069}, {0.0289235, 0.103138}, + {-0.134219, -0.0520054}, {0.104241, 0.0056989}, + {0.0203017, 0.0600165}, {-0.0797669, 0.163464}, + {0.211788, -0.0248343}, {-0.0154356, -0.0570675}, + {-0.156286, -0.0379479}, {-0.151619, -0.187369}, + {0.0860071, -0.0932265}, {-0.0149229, -0.0309086}, + {-0.18319, 0.0817577}, {0.0376425, -0.084288}, + {-0.19554, -0.0753742}, {-0.0792463, -0.00476987}, + {0.0900378, -0.0243934}, {0.0487987, -0.0351105}, + {4.94414e-18, 1.50637e-17}, {0, 0}, + {-6.13583e-34, 3.3753e-34}, {-3.94757e-18, 1.08756e-17}, + {3.69939e-18, -1.70776e-18}, {0, 0}, + {0.0703638, -0.0703638}, {0, 0}, + {4.07128e-18, 5.91969e-18}, {0, 0}, + {4.65674e-34, 2.74254e-33}, {-2.06828e-17, 2.58692e-17}, + {4.30854e-18, -4.30854e-18}, {0.0703638, -0.0703638}, + {8.12949e-34, -6.61445e-34}, {3.20013e-19, 1.32547e-18}, + {-2.35086e-17, -3.34351e-18}, {0, 0}, + {-7.71643e-34, -9.57183e-36}, {-2.25153e-17, -8.7397e-18}, + {-3.50471e-18, 2.15065e-18}, {0, 0}, + {-0.649674, 0.649674}, {0, 0}, + {2.87238e-18, -1.66997e-17}, {0, 0}, + {2.66677e-34, -6.34502e-34}, {-2.32881e-18, 1.72918e-18}, + {-3.97811e-17, 3.97811e-17}, {-0.649674, 0.649674}, + {-1.05771e-33, 2.04402e-33}, {1.66923e-17, -7.67194e-18}, + {0.00700547, 0.0796791}, {-0.111909, -0.11059}, + {-0.0496604, -0.00280436}, {-0.0206468, -0.243382}, + {0.188916, -0.0207421}, {-0.0601878, -0.102819}, + {-0.123982, 0.0339939}, {0.132023, -0.169255}, + {0.211826, 0.136737}, {-0.136536, -0.125222}, + {0.0591417, 0.053948}, {0.131346, -0.0700752}, + {0.169414, 0.00539238}, {-0.285759, -0.126328}, + {0.180106, -0.0235219}, {0.0155764, -0.137379}, + {0.0274904, -0.0186002}, {0.0302117, 0.0196978}, + {-0.0955218, 0.0893471}, {0.0694461, -0.175027}, + {0.195098, 0.15783}, {0.133154, -0.0101063}, + {0.0597049, -0.121845}, {0.103684, 0.0637283}, + {-8.81818e-18, 9.28744e-18}, {0, 0}, + {-4.87482e-34, 6.61217e-34}, {-6.30375e-18, 5.97432e-18}, + {-4.4846e-18, 2.56065e-18}, {0, 0}, + {-6.664e-18, 1.44867e-18}, {0, 0}, + {0.0703638, -0.0703638}, {0, 0}, + {2.27154e-34, 2.41419e-33}, {-1.71231e-17, 1.51992e-17}, + {8.3133e-34, -2.92137e-34}, {-1.02748e-17, -3.28604e-18}, + {4.30854e-18, -4.30854e-18}, {0.0703638, -0.0703638}, + {-1.64723e-17, -1.23978e-17}, {0, 0}, + {-7.5577e-34, -2.20308e-34}, {-1.01641e-17, -1.58735e-17}, + {-1.07795e-17, 3.69775e-18}, {0, 0}, + {-1.3001e-17, 1.26552e-17}, {0, 0}, + {-0.649674, 0.649674}, {0, 0}, + {-2.88142e-34, 1.71831e-34}, {-1.0639e-17, 3.83824e-18}, + {-3.64383e-33, 3.0053e-33}, {9.59339e-19, -1.33189e-17}, + {-3.97811e-17, 3.97811e-17}, {-0.649674, 0.649674}, + {-0.108101, 0.0759951}, {-0.0132256, -0.103687}, + {0.0775753, 0.197664}, {-0.0268197, -0.217684}, + {-0.0973845, 0.0133805}, {0.166886, -0.176922}, + {-0.174082, 0.0368077}, {-0.146363, 0.0633013}, + {0.101839, 0.00578492}, {0.28734, -0.0850284}, + {0.0864538, 0.0798966}, {-0.134927, 0.294084}, + {-0.306375, 0.0444565}, {0.177774, -0.112248}, + {-0.0713049, 0.0285475}, {-0.0659292, 0.143305}, + {0.127778, -0.00169064}, {-0.0844571, -0.0840331}, + {0.0196931, -0.192129}, {-0.116802, 0.133512}, + {-0.0707155, 0.00573431}, {0.0151778, 0.00127919}, + {0.26952, -0.0982653}, {-0.108576, -0.168438}}; + + std::vector> becp = {{0.714037, 0}, + {4.0926e-34, 4.77049e-18}, + {-6.74075e-34, 1.9082e-17}, + {3.85186e-34, 3.38271e-17}, + {0.310588, -1.38778e-17}, + {-1.73472e-18, -1.0842e-18}, + {0, -1.73472e-18}, + {-1.73472e-18, -9.75782e-19}, + {0, 1.38778e-17}, + {0.253264, -1.5508e-17}, + {3.46945e-18, -7.70372e-34}, + {-1.38778e-17, 3.85186e-34}, + {2.498e-16, -3.46945e-18}, + {-0.0270547, 1.73472e-18}, + {3.46945e-18, -1.21431e-17}, + {7.80626e-18, -3.46945e-18}, + {0, 2.77556e-17}, + {0, -7.70372e-34}, + {0.253264, -1.5508e-17}, + {-5.20417e-18, 9.62965e-35}, + {1.38778e-17, -1.38778e-17}, + {3.46945e-18, -1.21431e-17}, + {-0.0270547, 5.20417e-18}, + {-1.45012e-18, 0}, + {0, -4.16334e-17}, + {-1.04083e-17, 3.85186e-34}, + {-2.77556e-17, 9.62965e-35}, + {0.253264, -1.5508e-17}, + {-2.77556e-17, 1.73472e-17}, + {7.80626e-18, -1.21431e-17}, + {2.71051e-19, 0}, + {-0.0270547, 0}, + {0.310588, 1.38778e-17}, + {1.73472e-18, 7.58942e-19}, + {0, 1.73472e-18}, + {0, 1.38236e-18}, + {0.714037, -4.54164e-34}, + {-1.44445e-34, -1.73472e-18}, + {3.85186e-34, -5.20417e-18}, + {0, -9.54098e-18}, + {-2.498e-16, -3.46945e-18}, + {-0.0270547, 5.20417e-18}, + {2.60209e-18, 1.38778e-17}, + {7.80626e-18, 6.93889e-18}, + {-1.94015e-33, -1.38778e-17}, + {0.253264, -1.5508e-17}, + {0, -3.85186e-34}, + {3.46945e-18, -1.34815e-33}, + {-1.38778e-17, -1.38778e-17}, + {3.46945e-18, 1.38778e-17}, + {-0.0270547, -1.73472e-18}, + {-2.11419e-18, 0}, + {-8.62772e-34, 2.77556e-17}, + {-3.46945e-18, 3.85186e-34}, + {0.253264, -1.5508e-17}, + {2.25514e-17, -5.77779e-34}, + {2.77556e-17, 1.73472e-17}, + {7.80626e-18, 1.04083e-17}, + {-2.12775e-18, 0}, + {-0.0270547, 1.73472e-18}, + {2.20382e-34, 8.32667e-17}, + {6.93889e-18, -1.54074e-33}, + {2.77556e-17, 2.11852e-33}, + {0.253264, -1.5508e-17}}; + + std::vector> becp_spin = {{0.589512, 0.589512}, + {3.64365e-19, -4.40651e-19}, + {-1.29215e-18, 4.53274e-18}, + {-2.89869e-18, -2.22919e-18}, + {0.219139, 0.219139}, + {7.8567e-18, 5.10765e-18}, + {1.34231e-18, 4.08972e-18}, + {-2.39409e-18, 2.5215e-18}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {3.60972e-17, 3.60972e-17}, + {2.07824e-35, 2.31311e-35}, + {-1.24227e-34, 1.52266e-35}, + {1.44626e-34, 4.05323e-36}, + {1.34184e-17, 1.34184e-17}, + {1.31795e-34, -4.10474e-34}, + {-1.66585e-34, 9.16378e-35}, + {-1.32349e-34, 1.79517e-34}, + {0.589512, 0.589512}, + {4.40651e-19, -3.64365e-19}, + {-4.53274e-18, 1.29215e-18}, + {2.22919e-18, 2.89869e-18}, + {0.219139, 0.219139}, + {5.43932e-18, 7.74187e-18}, + {-1.07175e-18, 2.95268e-18}, + {-1.71144e-18, 1.622e-18}, + {-8.68944e-18, -1.36408e-17}, + {-0.176383, 0.176383}, + {-1.08051e-18, 1.19494e-18}, + {-1.27578e-18, 1.23764e-18}, + {2.58564e-17, -1.77329e-17}, + {0.0191034, -0.0191034}, + {1.00437e-18, -4.63648e-19}, + {-1.21755e-18, 6.95205e-19}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-2.93929e-17, -1.08179e-16}, + {6.16074e-19, -4.63503e-19}, + {-0.176383, 0.176383}, + {-2.42806e-17, 1.71892e-17}, + {-4.90688e-19, -5.17492e-18}, + {4.68219e-18, 3.08002e-18}, + {0.0191034, -0.0191034}, + {-1.80924e-18, 3.93306e-19}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-5.83871e-17, -8.11913e-17}, + {-1.65566e-18, 1.61752e-18}, + {-2.90701e-18, 1.32009e-17}, + {-0.176383, 0.176383}, + {-3.51717e-18, -5.31551e-18}, + {1.46283e-18, 3.71325e-18}, + {1.10533e-18, 1.60717e-18}, + {0.0191034, -0.0191034}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {4.998e-34, 2.14907e-34}, + {-1.08004e-17, 1.08004e-17}, + {2.49587e-34, -3.33179e-34}, + {-1.51376e-34, -4.54515e-35}, + {1.34522e-35, 6.46718e-34}, + {1.16975e-18, -1.16975e-18}, + {1.26428e-34, 7.44588e-34}, + {6.16712e-35, 6.55441e-34}, + {-1.36408e-17, -8.68944e-18}, + {-0.176383, 0.176383}, + {-1.19494e-18, 1.08051e-18}, + {-1.23764e-18, 1.27578e-18}, + {2.82057e-17, -2.92614e-17}, + {0.0191034, -0.0191034}, + {-5.61528e-18, 7.02336e-18}, + {-4.64885e-18, 4.12651e-18}, + {-3.30189e-34, -3.16294e-33}, + {2.32648e-34, -2.24179e-34}, + {-1.08004e-17, 1.08004e-17}, + {-4.55245e-34, 6.39369e-34}, + {6.3834e-34, -1.16532e-33}, + {2.51775e-34, 9.85922e-34}, + {1.16975e-18, -1.16975e-18}, + {2.25702e-34, -7.93138e-35}, + {-1.08179e-16, -2.93929e-17}, + {4.63503e-19, -6.16074e-19}, + {-0.176383, 0.176383}, + {-1.71892e-17, 2.42806e-17}, + {7.1629e-18, -9.73473e-19}, + {-2.14376e-18, 1.0437e-17}, + {0.0191034, -0.0191034}, + {-2.78955e-18, -8.92146e-19}, + {-2.47792e-33, -1.42266e-33}, + {-3.47566e-34, 1.50739e-34}, + {-4.52883e-34, 4.40179e-34}, + {-1.08004e-17, 1.08004e-17}, + {-1.44014e-34, -4.80305e-34}, + {2.6217e-34, 7.751e-34}, + {2.20712e-34, -1.79579e-34}, + {1.16975e-18, -1.16975e-18}, + {-8.11913e-17, -5.83871e-17}, + {-1.61752e-18, 1.65566e-18}, + {-1.32009e-17, 2.90701e-18}, + {-0.176383, 0.176383}, + {-2.39376e-18, -1.11374e-17}, + {-1.70296e-18, 7.41007e-18}, + {8.68822e-20, 3.59858e-19}, + {0.0191034, -0.0191034}, + {0.219139, 0.219139}, + {3.47642e-18, -4.46033e-18}, + {-1.93065e-18, 4.42575e-19}, + {-2.10762e-18, -1.3266e-18}, + {0.589512, 0.589512}, + {3.80353e-18, 8.90376e-19}, + {-6.38248e-18, -9.07748e-19}, + {-4.47215e-18, -3.36594e-18}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {1.34184e-17, 1.34184e-17}, + {1.09277e-34, 3.39765e-34}, + {3.29217e-35, -7.60789e-35}, + {1.8854e-34, 1.02497e-34}, + {3.60972e-17, 3.60972e-17}, + {6.99955e-35, 1.07736e-34}, + {-2.09497e-34, -2.59871e-36}, + {-2.05188e-34, -5.98125e-35}, + {0.219139, 0.219139}, + {2.53277e-18, -6.06456e-18}, + {-4.24787e-19, 3.27352e-18}, + {-2.96609e-19, -1.4571e-18}, + {0.589512, 0.589512}, + {1.22352e-18, 1.7256e-18}, + {-6.1128e-18, -2.37279e-18}, + {-2.7595e-18, -4.30959e-18}, + {2.33626e-17, 1.83796e-17}, + {0.0191034, -0.0191034}, + {-2.39357e-18, -2.05028e-18}, + {3.78783e-18, 2.03957e-19}, + {-9.08858e-18, 2.11978e-17}, + {-0.176383, 0.176383}, + {-9.51513e-19, 5.83892e-19}, + {-2.9266e-18, 1.00392e-18}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-1.32518e-17, -6.84152e-18}, + {-2.35542e-18, -3.93758e-18}, + {0.0191034, -0.0191034}, + {5.91753e-19, 3.69179e-18}, + {-3.38737e-17, -7.39245e-17}, + {7.62727e-19, -1.1529e-18}, + {-0.176383, 0.176383}, + {-3.52972e-18, 3.43583e-18}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {-2.76266e-17, 3.33724e-17}, + {-6.13303e-18, -8.03639e-18}, + {-1.37711e-18, 1.53221e-18}, + {0.0191034, -0.0191034}, + {-3.72616e-17, -6.08227e-17}, + {-3.55386e-18, 1.41988e-18}, + {7.79838e-19, -4.53389e-18}, + {-0.176383, 0.176383}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {0, 0}, + {2.30464e-34, -1.37798e-33}, + {1.16975e-18, -1.16975e-18}, + {-7.02008e-34, 2.73661e-34}, + {-5.2029e-34, -4.60519e-35}, + {9.4802e-35, 9.28562e-34}, + {-1.08004e-17, 1.08004e-17}, + {7.24015e-35, -1.72264e-34}, + {-7.82293e-35, 4.66514e-35}, + {1.40744e-17, 9.09148e-18}, + {0.0191034, -0.0191034}, + {-5.44414e-19, -5.63416e-18}, + {2.80243e-19, 2.421e-19}, + {-1.40399e-17, 1.57407e-17}, + {-0.176383, 0.176383}, + {-6.32261e-19, 4.69464e-19}, + {-2.88845e-18, 1.04206e-18}, + {-1.1114e-34, 1.11426e-33}, + {-7.14712e-34, -3.21057e-34}, + {1.16975e-18, -1.16975e-18}, + {-9.77011e-35, 2.62371e-35}, + {-1.2912e-33, -2.74098e-33}, + {-1.68933e-34, -7.96096e-35}, + {-1.08004e-17, 1.08004e-17}, + {-9.89283e-34, 8.15924e-34}, + {-1.22404e-17, 4.5782e-18}, + {-3.93758e-18, 1.11402e-18}, + {0.0191034, -0.0191034}, + {4.39182e-19, 2.10964e-18}, + {-3.89252e-17, -4.11175e-17}, + {8.75675e-19, -1.47363e-18}, + {-0.176383, 0.176383}, + {2.60456e-19, -3.61601e-18}, + {2.43024e-34, 2.12024e-33}, + {-5.1185e-34, 5.86845e-35}, + {-6.84459e-36, 1.97118e-34}, + {1.16975e-18, -1.16975e-18}, + {-2.83786e-33, -2.69662e-33}, + {-1.73324e-35, 1.30199e-34}, + {-2.87165e-34, 5.54942e-34}, + {-1.08004e-17, 1.08004e-17}, + {-1.11827e-17, 3.57217e-17}, + {-2.70172e-18, -6.20931e-18}, + {-1.49154e-18, 3.38136e-18}, + {0.0191034, -0.0191034}, + {-3.92459e-17, -9.33159e-17}, + {-3.30441e-18, 1.72354e-18}, + {4.53187e-18, -2.0829e-18}, + {-0.176383, 0.176383}, + {-0.151418, 0.198618}, + {-0.0155794, -0.0174644}, + {0.00201038, -0.0199633}, + {0.00202476, -0.0450809}, + {-0.200025, 0.221787}, + {-0.0176768, 0.0684854}, + {0.00190195, 0.0216325}, + {-0.029349, 0.0206323}, + {0.408276, -0.167813}, + {-0.0100735, 0.0165499}, + {0.0376307, -0.0209656}, + {0.0402082, 0.0385619}, + {0.219097, -0.0598169}, + {-0.00842084, -0.0143768}, + {-0.0303829, -0.0300247}, + {-0.00359068, -0.0281506}, + {-0.14026, -0.0404854}, + {0.00109109, -0.00292143}, + {0.0202843, -0.0142746}, + {-0.0485386, -0.0222402}, + {-0.185677, 0.179574}, + {-0.0148842, -0.00619727}, + {-0.0134826, -0.000761371}, + {0.0210613, 0.0536649}, + {-0.207809, -0.0204807}, + {-0.0549812, 0.0409982}, + {0.00202629, -0.0341294}, + {0.0546881, 0.042039}, + {-0.458935, 0.245445}, + {-0.0517218, -0.0122408}, + {-0.00560551, -0.0660771}, + {-0.00728142, -0.0591003}, + {-0.155758, 0.422446}, + {-0.0153205, 0.040207}, + {0.0216556, 0.0347654}, + {0.00690013, -0.0297097}, + {0.0434321, 0.371581}, + {-0.0100212, 0.0461625}, + {0.0512898, -0.00563137}, + {-0.0264394, 0.00363274}, + {-0.034846, 0.30711}, + {-0.0275275, -0.0282763}, + {0.024732, -0.0165754}, + {0.0494484, 0.026971}, + {-0.04498, 0.113595}, + {-0.0265187, -0.0351804}, + {-0.0163407, -0.0279149}, + {0.0453088, -0.0480335}, + {0.272916, 0.161803}, + {-0.00593673, -0.0168516}, + {-0.0293366, -0.0348744}, + {-0.0224875, -0.011743}, + {0.322949, -0.27542}, + {0.00255536, -0.0277111}, + {-0.0336606, 0.00922919}, + {-0.0472624, 0.00999311}, + {-0.263423, -0.0633477}, + {0.0257213, -0.0185744}, + {-0.0163487, 0.0403021}, + {0.0299132, 0.000534618}, + {-0.224408, 0.103351}, + {0.00785259, 0.0280015}, + {0.0358437, -0.0459518}, + {-0.039737, 0.017186}, + {-0.292207, 0.0754645}, + {-0.0208575, -0.0629621}, + {0.0281465, 0.0170231}, + {0.0535657, -0.0192648}, + {-0.464253, -0.227606}, + {-0.0364398, -0.0141192}, + {0.0575099, 0.0371234}, + {0.0276488, 0.00157058}, + {0.164371, 0.0675376}, + {-0.0139698, -0.00674355}, + {0.0320923, 0.00574237}, + {-0.0603552, -0.00217345}, + {0.259754, -0.129042}, + {0.028301, 0.00154723}, + {-0.0370689, -0.0339973}, + {0.0780115, -0.0230848}, + {0.289087, 0.294914}, + {-0.0363624, -0.0339035}, + {0.0266047, -0.0341726}, + {-0.0165338, 0.00630703}, + {0.323237, -0.0453932}, + {0.00551181, 0.0162942}, + {0.0160567, 0.0146466}, + {0.0234718, 0.0216916}, + {0.01868, -0.0721715}, + {0.0352915, -0.00780156}, + {-0.00497142, -0.0254699}, + {-0.00224427, 0.00973094}, + {-0.117051, 0.00786132}, + {-0.0216563, 0.0443798}, + {0.0356598, -0.0190251}, + {-0.0366322, 0.0798423}, + {0.343382, -0.162698}, + {0.00479399, -0.0286857}, + {-0.0311893, -0.0208961}, + {0.0054034, -0.0899912}, + {0.0522446, -0.388922}, + {0.0574995, -0.00674239}, + {0.0459952, 0.00146401}, + {-0.0831795, 0.0120697}, + {-0.121058, 0.0831456}, + {0.0337971, -0.029239}, + {-0.0110613, 0.010583}, + {-0.0463398, -0.00201043}, + {0.0138641, 0.027162}, + {-0.0041907, -0.0154936}, + {-0.0775822, -0.0342975}, + {0.0482649, -0.0304748}, + {-0.141787, -0.0941454}, + {0.000844965, -0.0487674}, + {0.016791, 0.0463802}, + {-0.0193326, 0.0621471}, + {0.280873, -0.0311559}, + {-0.0424309, -0.0103027}, + {0.0488979, -0.0063861}, + {-0.0193589, 0.00775051}, + {0.232211, 0.228798}, + {-0.0161022, -0.037824}, + {-0.0505177, -0.0398486}, + {-0.045563, -0.0102292}, + {0.293272, 0.0203175}, + {-0.0411639, -0.0508697}, + {0.00422893, -0.0372978}, + {-0.0178995, 0.0389067}, + {-0.215803, 0.202432}, + {0.0257435, 0.0509673}, + {-0.00603483, 0.0347632}, + {-0.0491414, 0.0279653}, + {-0.126275, 0.108109}, + {0.0233505, -0.0253105}, + {0.00746352, -0.00504986}, + {0.0346911, -0.000459002}, + {-0.010801, -0.129215}, + {0.0181963, -0.0197627}, + {-0.0141993, 0.0586362}, + {0.0322462, 0.0085437}, + {-0.0501468, -0.170172}, + {-0.00405151, -0.00839154}, + {0.00820234, 0.00534787}, + {-0.0229297, -0.0228146}, + {-0.223267, 0.0715199}, + {-0.0147115, -0.0199799}, + {0.0534475, -0.0275814}, + {-0.000795322, -0.00978326}, + {-0.262721, 0.0313206}, + {-0.0497351, 0.0221968}, + {-0.0259337, 0.0242573}, + {0.00534659, -0.052162}, + {-0.03707, -0.16004}, + {-0.0739947, -0.042184}, + {-0.0645123, 0.010567}, + {-0.0188623, 0.0222532}, + {-0.181946, 0.0823316}, + {0.0102198, -0.0228838}, + {0.0188543, -0.0475191}, + {-0.0317113, 0.0362478}, + {0.393393, 0.173144}, + {0.016999, -0.0650595}, + {0.0203212, -0.0512624}, + {-0.0110779, -0.0165221}, + {0.141654, -0.212}, + {-0.0530882, -0.0204637}, + {0.0529682, 0.0428501}, + {-0.0191989, 0.00155684}, + {0.164424, -0.0767119}, + {-0.0210735, 0.013117}, + {0.00625389, 0.0355862}, + {-0.0206261, -0.0483646}, + {-0.0468221, -0.0382823}, + {-0.021515, -0.001295}, + {0.0361506, -0.0027438}, + {0.00412072, 0.000347295}, + {-0.0752766, 0.59987}, + {0.0802704, 0.0203869}, + {-0.0092008, 0.0522364}, + {-0.0737371, 0.00926323}, + {-0.100885, 0.485237}, + {0.0244448, -0.00662269}, + {0.0162096, -0.0330803}, + {0.0731735, -0.0266786}, + {-0.0168811, 0.217894}, + {-0.0184495, -0.00802871}, + {-0.0359591, 0.0765698}, + {0.0659872, 0.0210129}, + {-0.206596, 0.136648}, + {0.0132486, -0.00953235}, + {0.0281496, 0.0173019}, + {-0.0294779, -0.0457301}}; const base_device::DEVICE_CPU* cpu_ctx = {}; const base_device::DEVICE_GPU* gpu_ctx = {}; - void SetUp() override { + void SetUp() override + { } - void TearDown() override { + void TearDown() override + { } using nonlocal_cpu_op = hamilt::nonlocal_pw_op; @@ -86,99 +876,108 @@ class TestModuleHamiltNonlocal : public ::testing::Test TEST_F(TestModuleHamiltNonlocal, nonlocal_pw_op_cpu) { - sum = 0; iat = 0; - std::vector> ps(expected_ps.size(), std::complex(0.0, 0.0)); - nonlocal_cpu_op()( - cpu_ctx, - l1, l2, l3, - sum, iat, spin, nkb, - deeq_x, deeq_y, deeq_z, - deeq.data(), - ps.data(), becp.data()); - for (int ii = 0; ii < ps.size(); ii++) { - EXPECT_LT(std::abs(ps[ii] - expected_ps[ii]), 5 * 1e-6); - } - EXPECT_EQ(sum, expected_sum); - EXPECT_EQ(iat, expected_iat); + sum = 0; + iat = 0; + std::vector> ps(expected_ps.size(), std::complex(0.0, 0.0)); + nonlocal_cpu_op()(cpu_ctx, + l1, + l2, + l3, + sum, + iat, + spin, + nkb, + deeq_x, + deeq_y, + deeq_z, + deeq.data(), + ps.data(), + becp.data()); + for (int ii = 0; ii < ps.size(); ii++) + { + EXPECT_LT(std::abs(ps[ii] - expected_ps[ii]), 5 * 1e-6); + } + EXPECT_EQ(sum, expected_sum); + EXPECT_EQ(iat, expected_iat); } TEST_F(TestModuleHamiltNonlocal, nonlocal_pw_spin_op_cpu) { - sum = 0; iat = 0; - std::vector> ps(expected_ps_spin.size(), std::complex(0.0, 0.0)); - nonlocal_cpu_op()( - cpu_ctx, - l1, l2_spin, l3, - sum, iat, nkb, - deeq_x, deeq_y, deeq_z, - deeq_spin.data(), - ps.data(), becp_spin.data()); - for (int ii = 0; ii < ps.size(); ii++) { - EXPECT_LT(std::abs(ps[ii] - expected_ps_spin[ii]), 5 * 1e-6); - } - EXPECT_EQ(sum, expected_sum); - EXPECT_EQ(iat, expected_iat); + sum = 0; + iat = 0; + std::vector> ps(expected_ps_spin.size(), std::complex(0.0, 0.0)); + nonlocal_cpu_op()(cpu_ctx, + l1, + l2_spin, + l3, + sum, + iat, + nkb, + deeq_x, + deeq_y, + deeq_z, + deeq_spin.data(), + ps.data(), + becp_spin.data()); + for (int ii = 0; ii < ps.size(); ii++) + { + EXPECT_LT(std::abs(ps[ii] - expected_ps_spin[ii]), 5 * 1e-6); + } + EXPECT_EQ(sum, expected_sum); + EXPECT_EQ(iat, expected_iat); } #if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM TEST_F(TestModuleHamiltNonlocal, nonlocal_pw_op_gpu) { - sum = 0; iat = 0; - double* deeq_dev = NULL; - std::complex* ps_dev = NULL, * becp_dev = NULL; - std::vector> ps(expected_ps.size(), std::complex(0.0, 0.0)); - resize_memory_double_op()(deeq_dev, deeq.size()); - resize_memory_complex_double_op()(ps_dev, ps.size()); - resize_memory_complex_double_op()(becp_dev, becp.size()); - syncmem_d_h2d_op()(deeq_dev, deeq.data(), deeq.size()); - syncmem_cd_h2d_op()(ps_dev, ps.data(), ps.size()); - syncmem_cd_h2d_op()(becp_dev, becp.data(), becp.size()); - nonlocal_gpu_op()( - gpu_ctx, - l1, l2, l3, - sum, iat, spin, nkb, - deeq_x, deeq_y, deeq_z, - deeq_dev, - ps_dev, becp_dev); - - syncmem_cd_d2h_op()(ps.data(), ps_dev, ps.size()); - for (int ii = 0; ii < ps.size(); ii++) { - EXPECT_LT(fabs(ps[ii] - expected_ps[ii]), 5 * 1e-6); - } - EXPECT_EQ(sum, expected_sum); - EXPECT_EQ(iat, expected_iat); - delete_memory_double_op()(deeq_dev); - delete_memory_complex_double_op()(ps_dev); - delete_memory_complex_double_op()(becp_dev); + sum = 0; + iat = 0; + double* deeq_dev = NULL; + std::complex*ps_dev = NULL, *becp_dev = NULL; + std::vector> ps(expected_ps.size(), std::complex(0.0, 0.0)); + resize_memory_double_op()(deeq_dev, deeq.size()); + resize_memory_complex_double_op()(ps_dev, ps.size()); + resize_memory_complex_double_op()(becp_dev, becp.size()); + syncmem_d_h2d_op()(deeq_dev, deeq.data(), deeq.size()); + syncmem_cd_h2d_op()(ps_dev, ps.data(), ps.size()); + syncmem_cd_h2d_op()(becp_dev, becp.data(), becp.size()); + nonlocal_gpu_op()(gpu_ctx, l1, l2, l3, sum, iat, spin, nkb, deeq_x, deeq_y, deeq_z, deeq_dev, ps_dev, becp_dev); + + syncmem_cd_d2h_op()(ps.data(), ps_dev, ps.size()); + for (int ii = 0; ii < ps.size(); ii++) + { + EXPECT_LT(fabs(ps[ii] - expected_ps[ii]), 5 * 1e-6); + } + EXPECT_EQ(sum, expected_sum); + EXPECT_EQ(iat, expected_iat); + delete_memory_double_op()(deeq_dev); + delete_memory_complex_double_op()(ps_dev); + delete_memory_complex_double_op()(becp_dev); } TEST_F(TestModuleHamiltNonlocal, nonlocal_pw_spin_op_gpu) { - sum = 0; iat = 0; - std::complex* ps_dev = NULL, * becp_dev = NULL, * deeq_dev = NULL; - std::vector> ps(expected_ps.size(), std::complex(0.0, 0.0)); - resize_memory_complex_double_op()(deeq_dev, deeq_spin.size()); - resize_memory_complex_double_op()(ps_dev, ps.size()); - resize_memory_complex_double_op()(becp_dev, becp_spin.size()); - syncmem_cd_h2d_op()(deeq_dev, deeq_spin.data(), deeq_spin.size()); - syncmem_cd_h2d_op()(ps_dev, ps.data(), ps.size()); - syncmem_cd_h2d_op()(becp_dev, becp_spin.data(), becp_spin.size()); - nonlocal_gpu_op()( - gpu_ctx, - l1, l2_spin, l3, - sum, iat, nkb, - deeq_x, deeq_y, deeq_z, - deeq_dev, - ps_dev, becp_dev); - - syncmem_cd_d2h_op()(ps.data(), ps_dev, ps.size()); - for (int ii = 0; ii < ps.size(); ii++) { - EXPECT_LT(fabs(ps[ii] - expected_ps_spin[ii]), 5 * 1e-6); - } - EXPECT_EQ(sum, expected_sum); - EXPECT_EQ(iat, expected_iat); - delete_memory_complex_double_op()(deeq_dev); - delete_memory_complex_double_op()(ps_dev); - delete_memory_complex_double_op()(becp_dev); + sum = 0; + iat = 0; + std::complex*ps_dev = NULL, *becp_dev = NULL, *deeq_dev = NULL; + std::vector> ps(expected_ps.size(), std::complex(0.0, 0.0)); + resize_memory_complex_double_op()(deeq_dev, deeq_spin.size()); + resize_memory_complex_double_op()(ps_dev, ps.size()); + resize_memory_complex_double_op()(becp_dev, becp_spin.size()); + syncmem_cd_h2d_op()(deeq_dev, deeq_spin.data(), deeq_spin.size()); + syncmem_cd_h2d_op()(ps_dev, ps.data(), ps.size()); + syncmem_cd_h2d_op()(becp_dev, becp_spin.data(), becp_spin.size()); + nonlocal_gpu_op()(gpu_ctx, l1, l2_spin, l3, sum, iat, nkb, deeq_x, deeq_y, deeq_z, deeq_dev, ps_dev, becp_dev); + + syncmem_cd_d2h_op()(ps.data(), ps_dev, ps.size()); + for (int ii = 0; ii < ps.size(); ii++) + { + EXPECT_LT(fabs(ps[ii] - expected_ps_spin[ii]), 5 * 1e-6); + } + EXPECT_EQ(sum, expected_sum); + EXPECT_EQ(iat, expected_iat); + delete_memory_complex_double_op()(deeq_dev); + delete_memory_complex_double_op()(ps_dev); + delete_memory_complex_double_op()(becp_dev); } #endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM \ No newline at end of file diff --git a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/stress_op_test.cpp b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/stress_op_test.cpp index a3be95fce8..c9500d3f88 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/stress_op_test.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/stress_op_test.cpp @@ -1,6 +1,6 @@ #include "module_hamilt_pw/hamilt_pwdft/kernels/stress_op.h" -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/memory_op.h" #include #include @@ -12,16 +12,1732 @@ TEST(TestSrcPWStressMultiDevice, cal_dbecp_noevc_nl_op_cpu) const double tpiba = 0.61599855952741045; - std::vector gcar = {2.0000000000000000, -2.0000000000000000, -2.0000000000000000, 1.0000000000000000, -1.0000000000000000, -1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, -1.0000000000000000, 1.0000000000000000, 1.0000000000000000, -2.0000000000000000, 2.0000000000000000, 2.0000000000000000, 2.0000000000000000, -2.0000000000000000, 0.0000000000000000, 1.0000000000000000, -1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 2.0000000000000000, -1.0000000000000000, 1.0000000000000000, 3.0000000000000000, 2.0000000000000000, -2.0000000000000000, 2.0000000000000000, 1.0000000000000000, -1.0000000000000000, 3.0000000000000000, -1.0000000000000000, 1.0000000000000000, -3.0000000000000000, -2.0000000000000000, 2.0000000000000000, -2.0000000000000000, 1.0000000000000000, -1.0000000000000000, -3.0000000000000000, 0.0000000000000000, 0.0000000000000000, -2.0000000000000000, -1.0000000000000000, 1.0000000000000000, -1.0000000000000000, -2.0000000000000000, 2.0000000000000000, 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, -2.0000000000000000, 1.0000000000000000, 1.0000000000000000, -1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, -1.0000000000000000, 3.0000000000000000, 1.0000000000000000, 3.0000000000000000, -1.0000000000000000, -1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0000000000000000, 1.0000000000000000, 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 2.0000000000000000, 3.0000000000000000, -1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 2.0000000000000000, 1.0000000000000000, 1.0000000000000000, 3.0000000000000000, 1.0000000000000000, 1.0000000000000000, -3.0000000000000000, 0.0000000000000000, 2.0000000000000000, -2.0000000000000000, -1.0000000000000000, 3.0000000000000000, -1.0000000000000000, 2.0000000000000000, 2.0000000000000000, -2.0000000000000000, 1.0000000000000000, 3.0000000000000000, -1.0000000000000000, 3.0000000000000000, 1.0000000000000000, -1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 0.0000000000000000, 1.0000000000000000, 3.0000000000000000, 1.0000000000000000, 3.0000000000000000, 1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 2.0000000000000000, -1.0000000000000000, -3.0000000000000000, 1.0000000000000000, -2.0000000000000000, -2.0000000000000000, 2.0000000000000000, -2.0000000000000000, -2.0000000000000000, -2.0000000000000000, -3.0000000000000000, -1.0000000000000000, -1.0000000000000000, -1.0000000000000000, -3.0000000000000000, -1.0000000000000000, -2.0000000000000000, -2.0000000000000000, 0.0000000000000000, -3.0000000000000000, -1.0000000000000000, 1.0000000000000000, 1.0000000000000000, -3.0000000000000000, -1.0000000000000000, 0.0000000000000000, -2.0000000000000000, 0.0000000000000000, -1.0000000000000000, -1.0000000000000000, 1.0000000000000000, -2.0000000000000000, 0.0000000000000000, 2.0000000000000000, 1.0000000000000000, -3.0000000000000000, 1.0000000000000000, 0.0000000000000000, -2.0000000000000000, 2.0000000000000000, -1.0000000000000000, -1.0000000000000000, 3.0000000000000000, -1.0000000000000000, -1.0000000000000000, -3.0000000000000000, -2.0000000000000000, 0.0000000000000000, -2.0000000000000000, -3.0000000000000000, 1.0000000000000000, -1.0000000000000000, 0.0000000000000000, -2.0000000000000000, -2.0000000000000000, -1.0000000000000000, -1.0000000000000000, -1.0000000000000000, -2.0000000000000000, 0.0000000000000000, 0.0000000000000000, -3.0000000000000000, 1.0000000000000000, 1.0000000000000000}; + std::vector gcar + = {2.0000000000000000, -2.0000000000000000, -2.0000000000000000, 1.0000000000000000, -1.0000000000000000, + -1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, -1.0000000000000000, + 1.0000000000000000, 1.0000000000000000, -2.0000000000000000, 2.0000000000000000, 2.0000000000000000, + 2.0000000000000000, -2.0000000000000000, 0.0000000000000000, 1.0000000000000000, -1.0000000000000000, + 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 2.0000000000000000, -1.0000000000000000, + 1.0000000000000000, 3.0000000000000000, 2.0000000000000000, -2.0000000000000000, 2.0000000000000000, + 1.0000000000000000, -1.0000000000000000, 3.0000000000000000, -1.0000000000000000, 1.0000000000000000, + -3.0000000000000000, -2.0000000000000000, 2.0000000000000000, -2.0000000000000000, 1.0000000000000000, + -1.0000000000000000, -3.0000000000000000, 0.0000000000000000, 0.0000000000000000, -2.0000000000000000, + -1.0000000000000000, 1.0000000000000000, -1.0000000000000000, -2.0000000000000000, 2.0000000000000000, + 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, -2.0000000000000000, 1.0000000000000000, + 1.0000000000000000, -1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, + -1.0000000000000000, 3.0000000000000000, 1.0000000000000000, 3.0000000000000000, -1.0000000000000000, + -1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0000000000000000, 1.0000000000000000, + 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 2.0000000000000000, + 3.0000000000000000, -1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, + 2.0000000000000000, 1.0000000000000000, 1.0000000000000000, 3.0000000000000000, 1.0000000000000000, + 1.0000000000000000, -3.0000000000000000, 0.0000000000000000, 2.0000000000000000, -2.0000000000000000, + -1.0000000000000000, 3.0000000000000000, -1.0000000000000000, 2.0000000000000000, 2.0000000000000000, + -2.0000000000000000, 1.0000000000000000, 3.0000000000000000, -1.0000000000000000, 3.0000000000000000, + 1.0000000000000000, -1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 0.0000000000000000, + 1.0000000000000000, 3.0000000000000000, 1.0000000000000000, 3.0000000000000000, 1.0000000000000000, + 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 2.0000000000000000, -1.0000000000000000, + -3.0000000000000000, 1.0000000000000000, -2.0000000000000000, -2.0000000000000000, 2.0000000000000000, + -2.0000000000000000, -2.0000000000000000, -2.0000000000000000, -3.0000000000000000, -1.0000000000000000, + -1.0000000000000000, -1.0000000000000000, -3.0000000000000000, -1.0000000000000000, -2.0000000000000000, + -2.0000000000000000, 0.0000000000000000, -3.0000000000000000, -1.0000000000000000, 1.0000000000000000, + 1.0000000000000000, -3.0000000000000000, -1.0000000000000000, 0.0000000000000000, -2.0000000000000000, + 0.0000000000000000, -1.0000000000000000, -1.0000000000000000, 1.0000000000000000, -2.0000000000000000, + 0.0000000000000000, 2.0000000000000000, 1.0000000000000000, -3.0000000000000000, 1.0000000000000000, + 0.0000000000000000, -2.0000000000000000, 2.0000000000000000, -1.0000000000000000, -1.0000000000000000, + 3.0000000000000000, -1.0000000000000000, -1.0000000000000000, -3.0000000000000000, -2.0000000000000000, + 0.0000000000000000, -2.0000000000000000, -3.0000000000000000, 1.0000000000000000, -1.0000000000000000, + 0.0000000000000000, -2.0000000000000000, -2.0000000000000000, -1.0000000000000000, -1.0000000000000000, + -1.0000000000000000, -2.0000000000000000, 0.0000000000000000, 0.0000000000000000, -3.0000000000000000, + 1.0000000000000000, 1.0000000000000000}; std::vector kvec_c = {0.0000000000000000, 0.0000000000000000, 0.0000000000000000}; - std::vector> vkb = {{0.1959277889216247, 0.0000000000000000}, {0.3292263195311197, 0.0000000000000000}, {0.3833320420712772, -0.0000000000000000}, {0.3292263195311197, -0.0000000000000000}, {0.1959277889216247, -0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.3292263195311197, -0.0000000000000000}, {0.3121883316125419, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.1959277889216247, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.1959277889216247, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.3121883316125419, 0.0000000000000000}, {0.3292263195311197, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.3292263195311197, -0.0000000000000000}, {0.3121883316125419, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.3121883316125419, -0.0000000000000000}, {0.3292263195311197, -0.0000000000000000}, {0.2495383154917130, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.2495383154917130, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.1959277889216247, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.2495383154917130, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.1959277889216247, -0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.1959277889216247, 0.0000000000000000}, {0.1959277889216247, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.3121883316125419, 0.0000000000000000}, {0.3292263195311197, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.3292263195311197, 0.0000000000000000}, {0.3121883316125419, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.1588244263337111, 0.0000000000000000}, {0.2318163335599036, 0.0000000000000000}, {0.2916492898304017, 0.0000000000000000}, {0.2605982137021648, 0.0000000000000000}, {0.1588244263337111, 0.0000000000000000}, {0.2605982137021648, 0.0000000000000000}, {0.3602727707771828, 0.0000000000000000}, {0.3602727707771828, 0.0000000000000000}, {0.2605982137021648, 0.0000000000000000}, {0.2768133075187308, 0.0000000000000000}, {0.2117172164531642, 0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1191161929559753}, {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1007653341101891}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0839101408927066}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1007653341101891}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1007653341101891}, {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.1074700120541082}, {-0.0000000000000000, 0.1429603824496169}, {-0.0000000000000000, 0.1132688983356121}, {-0.0000000000000000, 0.0520569223767372}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1041138447534744}, {-0.0000000000000000, 0.0660471629375616}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0520569223767372}, {0.0000000000000000, -0.0680879572845678}, {0.0000000000000000, -0.0667352877462083}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.0839101408927066}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0839101408927066}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1007653341101892}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, -0.0439756238856228}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.0439756238856228}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1007653341101892}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1191161929559753}, {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.0716466747027388}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0566344491678060}, {0.0000000000000000, -0.1041138447534745}, {0.0000000000000000, -0.1074700120541082}, {-0.0000000000000000, 0.0520569223767372}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0660471629375617}, {0.0000000000000000, -0.1041138447534745}, {0.0000000000000000, -0.0953231401983950}, {0.0000000000000000, -0.1112254795770137}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.1319268716568682}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.1007653341101892}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.1191161929559753}, {0.0000000000000000, -0.0619166231573246}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.0619166231573246}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0537350060270541}, {0.0000000000000000, -0.0238267304082695}, {-0.0000000000000000, 0.0283172245839030}, {-0.0000000000000000, 0.0780853835651058}, {-0.0000000000000000, 0.0895583433784236}, {0.0000000000000000, -0.0780853835651058}, {0.0000000000000000, -0.0330235814687808}, {-0.0000000000000000, 0.0330235814687808}, {-0.0000000000000000, 0.0780853835651058}, {-0.0000000000000000, 0.0680879572845679}, {-0.0000000000000000, 0.0667352877462083}, {-0.1959277889216247, 0.0000000000000000}, {0.0000000000000000, 0.3292263195311197}, {0.3833320420712772, -0.0000000000000000}, {0.0000000000000000, -0.3292263195311197}, {-0.1959277889216247, -0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.0000000000000000, -0.3292263195311197}, {-0.3121883316125419, -0.0000000000000000}, {-0.0000000000000000, 0.2084900583919441}, {-0.1959277889216247, -0.0000000000000000}, {-0.0000000000000000, 0.2084900583919441}, {-0.0000000000000000, -0.2084900583919441}, {-0.1959277889216247, 0.0000000000000000}, {-0.0000000000000000, -0.2084900583919441}, {-0.3121883316125419, 0.0000000000000000}, {0.0000000000000000, 0.3292263195311197}, {0.2495383154917130, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.0000000000000000, -0.3292263195311197}, {-0.3121883316125419, -0.0000000000000000}, {-0.0000000000000000, 0.2084900583919441}, {0.0000000000000000, -0.2084900583919441}, {-0.3121883316125419, -0.0000000000000000}, {-0.0000000000000001, 0.3292263195311197}, {0.2495383154917130, 0.0000000000000001}, {-0.0000000000000000, 0.2084900583919441}, {0.2495383154917130, 0.0000000000000001}, {0.0000000000000001, -0.2084900583919441}, {0.0000000000000000, 0.2084900583919441}, {0.2495383154917130, 0.0000000000000000}, {0.0000000000000000, -0.2084900583919441}, {-0.1959277889216247, -0.0000000000000000}, {-0.0000000000000000, 0.2084900583919441}, {-0.0000000000000000, 0.2084900583919441}, {0.2495383154917130, 0.0000000000000001}, {0.0000000000000001, -0.2084900583919441}, {0.0000000000000001, -0.2084900583919441}, {-0.1959277889216247, -0.0000000000000001}, {-0.0000000000000000, -0.2084900583919441}, {-0.1959277889216247, 0.0000000000000000}, {-0.1959277889216247, 0.0000000000000001}, {0.0000000000000001, 0.2084900583919441}, {0.0000000000000001, 0.2084900583919441}, {0.2495383154917130, -0.0000000000000001}, {-0.0000000000000000, -0.2084900583919441}, {-0.0000000000000000, -0.2084900583919441}, {-0.3121883316125419, 0.0000000000000000}, {0.0000000000000000, 0.3292263195311197}, {0.2495383154917130, 0.0000000000000000}, {0.0000000000000000, 0.2084900583919441}, {0.2495383154917130, 0.0000000000000000}, {0.0000000000000000, -0.2084900583919441}, {0.0000000000000001, 0.2084900583919441}, {0.2495383154917130, -0.0000000000000001}, {-0.0000000000000000, -0.2084900583919441}, {0.2495383154917130, -0.0000000000000001}, {-0.0000000000000001, -0.3292263195311197}, {-0.3121883316125419, 0.0000000000000000}, {0.0000000000000000, 0.2084900583919441}, {0.1123058288786304, -0.1123058288786304}, {0.1639189014500104, -0.1639189014500105}, {-0.2062271905673179, -0.2062271905673178}, {-0.1842707640739018, 0.1842707640739018}, {0.1123058288786304, 0.1123058288786304}, {-0.1842707640739018, -0.1842707640739018}, {-0.2547513192934127, 0.2547513192934126}, {0.2547513192934126, 0.2547513192934127}, {0.1842707640739018, -0.1842707640739018}, {0.1059318666456010, -0.2557421491433081}, {0.1497066794479725, -0.1497066794479725}, {-0.0000000000000000, -0.0839101408927066}, {-0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0619166231573246, -0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, 0.0000000000000000}, {-0.0619166231573246, -0.0000000000000000}, {-0.0000000000000000, 0.1191161929559753}, {0.1319268716568682, 0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, {0.1319268716568682, 0.0000000000000000}, {0.1319268716568682, -0.0000000000000000}, {-0.0000000000000000, -0.0839101408927066}, {0.1319268716568682, -0.0000000000000000}, {-0.0000000000000000, -0.1191161929559753}, {-0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, {0.0619166231573246, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101891}, {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101891}, {-0.1319268716568682, -0.0000000000000000}, {-0.1319268716568682, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, {-0.0439756238856227, -0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, {-0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, -0.0839101408927066}, {-0.0439756238856227, 0.0000000000000000}, {-0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0439756238856227, 0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101891}, {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101891}, {-0.1319268716568682, -0.0000000000000000}, {-0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, 0.1007653341101891}, {0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, 0.1007653341101891}, {0.0619166231573246, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, {0.0759927742976599, 0.0759927742976599}, {0.1010882558711464, 0.1010882558711464}, {0.0800932061106409, -0.0800932061106410}, {-0.0368098028202926, -0.0368098028202926}, {0.0000000000000000, 0.0000000000000000}, {0.0736196056405852, -0.0736196056405852}, {-0.0467023967912827, -0.0467023967912827}, {0.0000000000000000, 0.0000000000000000}, {-0.0368098028202926, -0.0368098028202926}, {-0.0629050701457150, -0.0260561331963860}, {-0.0471889745097794, -0.0471889745097794}, {-0.0000000000000000, -0.0839101408927066}, {-0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0619166231573246, -0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.1007653341101892}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, {-0.0439756238856227, -0.0000000000000000}, {-0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, 0.0839101408927066}, {0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101892}, {-0.0000000000000000, 0.1007653341101892}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, {0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, -0.1191161929559753}, {-0.0619166231573246, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.1319268716568682, -0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, {0.0439756238856227, 0.0000000000000000}, {-0.0439756238856227, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, {-0.0439756238856227, -0.0000000000000000}, {-0.1319268716568682, -0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, {0.0439756238856227, 0.0000000000000000}, {0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, {-0.0439756238856228, 0.0000000000000000}, {0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, 0.0839101408927066}, {0.1319268716568682, -0.0000000000000000}, {0.0439756238856228, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, {-0.1319268716568682, 0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101892}, {-0.0439756238856227, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, {-0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, 0.1191161929559753}, {0.1319268716568682, 0.0000000000000000}, {-0.0506618495317733, -0.0506618495317733}, {0.0000000000000000, 0.0000000000000000}, {-0.0400466030553205, 0.0400466030553205}, {0.0736196056405853, 0.0736196056405852}, {0.0759927742976599, -0.0759927742976599}, {0.0368098028202926, -0.0368098028202926}, {-0.0000000000000000, -0.0000000000000000}, {0.0467023967912827, -0.0467023967912827}, {-0.0736196056405852, -0.0736196056405853}, {-0.0880670982040010, -0.0364785864749405}, {-0.0786482908496323, -0.0786482908496323}, {0.0000000000000000, 0.0839101408927066}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.1007653341101892}, {-0.0619166231573246, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, {0.0439756238856227, 0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, -0.0839101408927066}, {-0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0619166231573246, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.1191161929559753}, {-0.1319268716568682, -0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0619166231573246, -0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, {0.0439756238856227, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, {-0.0439756238856227, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, {0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, {-0.1319268716568682, -0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, {0.1319268716568682, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, {-0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, 0.0839101408927066}, {0.0439756238856227, -0.0000000000000000}, {0.1319268716568682, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, {-0.0439756238856227, 0.0000000000000000}, {-0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, 0.1191161929559753}, {0.0619166231573246, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101892}, {-0.0439756238856227, -0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, {-0.0619166231573246, 0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {-0.0439756238856227, 0.0000000000000000}, {0.0379963871488300, 0.0379963871488300}, {-0.0168480426451911, -0.0168480426451910}, {0.0200233015276602, -0.0200233015276602}, {-0.0552147042304389, -0.0552147042304389}, {-0.0633273119147166, 0.0633273119147166}, {-0.0552147042304389, 0.0552147042304389}, {0.0233511983956413, 0.0233511983956413}, {-0.0233511983956413, 0.0233511983956413}, {0.0552147042304389, 0.0552147042304389}, {0.0629050701457150, 0.0260561331963861}, {0.0471889745097794, 0.0471889745097794}}; - std::vector> vkb0i = {{0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0251913335271091}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0412777487684869}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487720041}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595607437938820}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0595607437938820}, {-0.0000000000000000, 0.0412777487720041}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595580964730781}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0503826670509438}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0503826670509438}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0595580964869841}, {-0.0000000000000000, 0.0412777487720041}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0503826670553068}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0503826670553068}, {-0.0000000000000000, 0.0412777487720041}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0079955679815631}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519636014}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0251913335299711}, {0.0000000000000000, -0.0119933519636014}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0251913335242470}, {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, -0.0000000000000000}, {0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0251913335271091}, {0.0119933519685976, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {0.0039977839895325, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0119933519685976, 0.0000000000000000}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0251913335271091}, {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0206388743877607, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, -0.0279700469621601}, {-0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0412777487720041, 0.0000000000000000}, {0.0000000000000000, -0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595607437938820}, {-0.0399778398965743, -0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, {-0.0399778398953252, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, {-0.0000000000000000, -0.0279700469645434}, {0.0399778398953252, -0.0000000000000000}, {-0.0000000000000000, -0.0595607437938820}, {-0.0412777487720041, 0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595580964730781}, {-0.0399778398965743, -0.0000000000000000}, {0.0079955679815631, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0412777487684869, -0.0000000000000000}, {-0.0000000000000000, 0.0503826670509438}, {-0.0079955679815631, -0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {0.0399778398953252, 0.0000000000000000}, {-0.0399778398953252, 0.0000000000000000}, {-0.0000000000000000, 0.0503826670509438}, {0.0399778398965743, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, {-0.0399778398965743, -0.0000000000000000}, {-0.0079955679815631, -0.0000000000000000}, {-0.0000000000000000, 0.0251913335271091}, {0.0399778398965743, 0.0000000000000000}, {0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, {0.0399778398878310, -0.0000000000000000}, {-0.0000000000000000, -0.0279700469645434}, {-0.0000000000000000, -0.0279700469645434}, {-0.0079955679815631, 0.0000000000000000}, {-0.0399778398878310, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, {0.0079955679815631, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, {-0.0000000000000000, -0.0595580964869841}, {-0.0412777487720041, 0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {-0.0399778398965743, 0.0000000000000000}, {-0.0000000000000000, 0.0503826670553068}, {0.0399778398953252, 0.0000000000000000}, {-0.0399778398953252, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, {0.0079955679815631, -0.0000000000000000}, {0.0000000000000000, 0.0503826670553068}, {0.0412777487720041, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, -0.0139850234834634}, {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0206388743912779, 0.0000000000000000}, {0.0000000000000000, -0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, -0.0000000000000000}, {-0.0000000000000000, -0.0139850234858467}, {0.0039977839895325, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0206388743912779, 0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0119933519636014, -0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0119933519636014, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {0.0119933519636014, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0251913335299711}, {-0.0119933519636014, -0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {-0.0119933519611033, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, 0.0139850234834634}, {0.0119933519685976, -0.0000000000000000}, {0.0119933519611033, -0.0000000000000000}, {-0.0000000000000000, -0.0251913335242470}, {-0.0119933519685976, 0.0000000000000000}, {0.0119933519636014, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0119933519636014, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, -0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; - std::vector> vkb0j = {{0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0251913335271091}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0412777487684869}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487720041}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595607437938820}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0595607437938820}, {-0.0000000000000000, 0.0412777487720041}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595580964730781}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0503826670509438}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0503826670509438}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0595580964869841}, {-0.0000000000000000, 0.0412777487720041}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0503826670553068}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0503826670553068}, {-0.0000000000000000, 0.0412777487720041}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0079955679815631}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519636014}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0251913335299711}, {0.0000000000000000, -0.0119933519636014}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0251913335242470}, {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, -0.0000000000000000}, {0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0251913335271091}, {0.0119933519685976, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {0.0039977839895325, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0119933519685976, 0.0000000000000000}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0251913335271091}, {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0206388743877607, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, -0.0279700469621601}, {-0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0412777487720041, 0.0000000000000000}, {0.0000000000000000, -0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595607437938820}, {-0.0399778398965743, -0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, {-0.0399778398953252, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, {-0.0000000000000000, -0.0279700469645434}, {0.0399778398953252, -0.0000000000000000}, {-0.0000000000000000, -0.0595607437938820}, {-0.0412777487720041, 0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595580964730781}, {-0.0399778398965743, -0.0000000000000000}, {0.0079955679815631, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0412777487684869, -0.0000000000000000}, {-0.0000000000000000, 0.0503826670509438}, {-0.0079955679815631, -0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {0.0399778398953252, 0.0000000000000000}, {-0.0399778398953252, 0.0000000000000000}, {-0.0000000000000000, 0.0503826670509438}, {0.0399778398965743, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, {-0.0399778398965743, -0.0000000000000000}, {-0.0079955679815631, -0.0000000000000000}, {-0.0000000000000000, 0.0251913335271091}, {0.0399778398965743, 0.0000000000000000}, {0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, {0.0399778398878310, -0.0000000000000000}, {-0.0000000000000000, -0.0279700469645434}, {-0.0000000000000000, -0.0279700469645434}, {-0.0079955679815631, 0.0000000000000000}, {-0.0399778398878310, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, {0.0079955679815631, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, {-0.0000000000000000, -0.0595580964869841}, {-0.0412777487720041, 0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {-0.0399778398965743, 0.0000000000000000}, {-0.0000000000000000, 0.0503826670553068}, {0.0399778398953252, 0.0000000000000000}, {-0.0399778398953252, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, {0.0079955679815631, -0.0000000000000000}, {0.0000000000000000, 0.0503826670553068}, {0.0412777487720041, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, -0.0139850234834634}, {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0206388743912779, 0.0000000000000000}, {0.0000000000000000, -0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, -0.0000000000000000}, {-0.0000000000000000, -0.0139850234858467}, {0.0039977839895325, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0206388743912779, 0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0119933519636014, -0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0119933519636014, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {0.0119933519636014, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0251913335299711}, {-0.0119933519636014, -0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {-0.0119933519611033, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, 0.0139850234834634}, {0.0119933519685976, -0.0000000000000000}, {0.0119933519611033, -0.0000000000000000}, {-0.0000000000000000, -0.0251913335242470}, {-0.0119933519685976, 0.0000000000000000}, {0.0119933519636014, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0119933519636014, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, -0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; - std::vector> vkb1 = {{0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; - std::vector> vkb2 = {{-0.1381930863244145, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {0.0000000086426771, -0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0661391041210523}, {-0.0000000000000000, 0.0016778554224101}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0661391041210523}, {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0661391041210523}, {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0016778554224101}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0016778554224101}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0661391041210523}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, -0.0447433475348149}, {-0.0000000000000000, 0.1119530873895942}, {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0171567560732830}, {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0661391041210523}, {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0016778554224101}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0661391041210523}, {0.0000000000000000, -0.0447433475348149}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, {0.0000000000000000, -0.0447433475348149}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.1381930863244145, -0.0000000000000000}, {-0.0000000000000000, -0.0972917790072033}, {0.0000000086426771, -0.0000000000000000}, {-0.0000000000000000, 0.0972917790072033}, {0.1381930863244145, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.0000000000000000, 0.0972917790072033}, {0.1089083477794440, 0.0000000000000000}, {0.0000000000000000, -0.1382542313485365}, {0.1381930863244145, 0.0000000000000000}, {0.0000000000000000, -0.1382542313485365}, {0.0000000000000000, 0.1382542313485365}, {0.1381930863244145, -0.0000000000000000}, {0.0000000000000000, 0.1382542313485365}, {0.1089083477794440, -0.0000000000000000}, {-0.0000000000000000, -0.0972917790072033}, {-0.1334606271797373, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.0000000000000000, 0.0972917790072033}, {0.1089083477794440, 0.0000000000000000}, {0.0000000000000000, -0.1382542313485365}, {-0.0000000000000000, 0.1382542313485365}, {0.1089083477794440, 0.0000000000000000}, {0.0000000000000000, -0.0972917790072033}, {-0.1334606271797373, -0.0000000000000000}, {0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, -0.0000000000000000}, {-0.0000000000000000, 0.1382542313485365}, {-0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, {-0.0000000000000000, 0.1382542313485365}, {0.1381930863244145, 0.0000000000000000}, {0.0000000000000000, -0.1382542313485365}, {0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, -0.0000000000000000}, {-0.0000000000000000, 0.1382542313485365}, {-0.0000000000000000, 0.1382542313485365}, {0.1381930863244145, 0.0000000000000001}, {0.0000000000000000, 0.1382542313485365}, {0.1381930863244145, -0.0000000000000000}, {0.1381930863244145, -0.0000000000000001}, {-0.0000000000000000, -0.1382542313485365}, {-0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, {0.0000000000000000, 0.1382542313485365}, {0.0000000000000000, 0.1382542313485365}, {0.1089083477794440, -0.0000000000000000}, {-0.0000000000000000, -0.0972917790072033}, {-0.1334606271797373, 0.0000000000000000}, {-0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, {-0.0000000000000000, 0.1382542313485365}, {-0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, {0.0000000000000000, 0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, {0.0000000000000000, 0.0972917790072033}, {0.1089083477794440, -0.0000000000000000}, {-0.0000000000000000, -0.1382542313485365}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0054385813505070}, {-0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0447433475348149, -0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, 0.0000000000000000}, {-0.0447433475348149, -0.0000000000000000}, {-0.0000000000000000, 0.0661391041210523}, {-0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, {-0.0016778554224101, -0.0000000000000000}, {-0.0016778554224101, 0.0000000000000000}, {0.0000000000000000, 0.0054385813505070}, {-0.0016778554224101, 0.0000000000000000}, {-0.0000000000000000, -0.0661391041210523}, {-0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, {0.0000000000000000, -0.0171567560732830}, {0.0016778554224101, 0.0000000000000000}, {0.0016778554224101, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, {0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, -0.0000000000000000}, {0.0005592851408034, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0005592851408034, -0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0171567560732830}, {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, -0.0171567560732830}, {0.0016778554224101, 0.0000000000000000}, {0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0171567560732830}, {0.0447433475348149, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0054385813505070}, {-0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0447433475348149, -0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0171567560732830}, {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, 0.0000000000000000}, {0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0171567560732830}, {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, {-0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, -0.0661391041210523}, {-0.0447433475348149, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0016778554224101, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, 0.0000000000000000}, {0.0016778554224101, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, {-0.0016778554224101, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, -0.0054385813505070}, {-0.0016778554224101, 0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, {0.0016778554224101, -0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0171567560732830}, {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, {0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, 0.0661391041210523}, {-0.0016778554224101, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, {0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, 0.1119530873895942}, {0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, -0.0171567560732830}, {-0.0447433475348149, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, {-0.0005592851408034, -0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0661391041210523}, {0.0016778554224101, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0447433475348149, -0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0016778554224101, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0016778554224101, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0016778554224101, -0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0016778554224101, -0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, -0.0054385813505070}, {-0.0005592851408034, 0.0000000000000000}, {-0.0016778554224101, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, {0.0005592851408034, -0.0000000000000000}, {0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, 0.0661391041210523}, {0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0016778554224101, 0.0000000000000000}, {0.0000000000000000, -0.0171567560732830}, {0.0005592851408034, 0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, {-0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; + std::vector> vkb + = {{0.1959277889216247, 0.0000000000000000}, {0.3292263195311197, 0.0000000000000000}, + {0.3833320420712772, -0.0000000000000000}, {0.3292263195311197, -0.0000000000000000}, + {0.1959277889216247, -0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.3292263195311197, -0.0000000000000000}, {0.3121883316125419, -0.0000000000000000}, + {0.2084900583919441, -0.0000000000000000}, {0.1959277889216247, -0.0000000000000000}, + {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, + {0.1959277889216247, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, + {0.3121883316125419, 0.0000000000000000}, {0.3292263195311197, 0.0000000000000000}, + {0.2495383154917130, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.3292263195311197, -0.0000000000000000}, {0.3121883316125419, -0.0000000000000000}, + {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, + {0.3121883316125419, -0.0000000000000000}, {0.3292263195311197, -0.0000000000000000}, + {0.2495383154917130, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, + {0.2495383154917130, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.1959277889216247, -0.0000000000000000}, + {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, + {0.2495383154917130, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, + {0.2084900583919441, -0.0000000000000000}, {0.1959277889216247, -0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.1959277889216247, 0.0000000000000000}, + {0.1959277889216247, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, + {0.3121883316125419, 0.0000000000000000}, {0.3292263195311197, 0.0000000000000000}, + {0.2495383154917130, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, + {0.2495383154917130, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.3292263195311197, 0.0000000000000000}, {0.3121883316125419, 0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.1588244263337111, 0.0000000000000000}, + {0.2318163335599036, 0.0000000000000000}, {0.2916492898304017, 0.0000000000000000}, + {0.2605982137021648, 0.0000000000000000}, {0.1588244263337111, 0.0000000000000000}, + {0.2605982137021648, 0.0000000000000000}, {0.3602727707771828, 0.0000000000000000}, + {0.3602727707771828, 0.0000000000000000}, {0.2605982137021648, 0.0000000000000000}, + {0.2768133075187308, 0.0000000000000000}, {0.2117172164531642, 0.0000000000000000}, + {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0619166231573246}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, + {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1191161929559753}, + {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.0839101408927066}, + {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.1319268716568682}, + {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.1319268716568682}, + {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.0619166231573246}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, + {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, + {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.1319268716568682}, + {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1007653341101891}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0839101408927066}, + {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0839101408927066}, + {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, + {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.1319268716568682}, + {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1007653341101891}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1007653341101891}, + {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.1074700120541082}, + {-0.0000000000000000, 0.1429603824496169}, {-0.0000000000000000, 0.1132688983356121}, + {-0.0000000000000000, 0.0520569223767372}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.1041138447534744}, {-0.0000000000000000, 0.0660471629375616}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0520569223767372}, + {0.0000000000000000, -0.0680879572845678}, {0.0000000000000000, -0.0667352877462083}, + {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0619166231573246}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, + {0.0000000000000000, -0.0839101408927066}, {-0.0000000000000000, 0.1007653341101892}, + {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, + {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, -0.0839101408927066}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, + {0.0000000000000000, -0.1007653341101892}, {-0.0000000000000000, 0.1007653341101892}, + {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.1319268716568682}, + {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.0619166231573246}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1319268716568682}, + {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1319268716568682}, + {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0839101408927066}, + {0.0000000000000000, -0.0439756238856228}, {0.0000000000000000, -0.0839101408927066}, + {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.1319268716568682}, + {0.0000000000000000, -0.0439756238856228}, {0.0000000000000000, -0.1007653341101892}, + {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, + {0.0000000000000000, -0.1007653341101892}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.1007653341101892}, + {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1191161929559753}, + {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.0716466747027388}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0566344491678060}, + {0.0000000000000000, -0.1041138447534745}, {0.0000000000000000, -0.1074700120541082}, + {-0.0000000000000000, 0.0520569223767372}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0660471629375617}, {0.0000000000000000, -0.1041138447534745}, + {0.0000000000000000, -0.0953231401983950}, {0.0000000000000000, -0.1112254795770137}, + {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0619166231573246}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0619166231573246}, + {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, -0.1007653341101892}, + {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.0839101408927066}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, -0.0439756238856227}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0619166231573246}, + {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.1191161929559753}, + {-0.0000000000000000, 0.1319268716568682}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0619166231573246}, + {-0.0000000000000000, 0.1007653341101892}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1007653341101892}, + {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0839101408927066}, + {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.1319268716568682}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, + {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.0839101408927066}, + {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.1007653341101892}, + {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.1319268716568682}, + {0.0000000000000000, -0.1191161929559753}, {0.0000000000000000, -0.0619166231573246}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.1319268716568682}, + {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.1007653341101892}, + {0.0000000000000000, -0.0619166231573246}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0537350060270541}, + {0.0000000000000000, -0.0238267304082695}, {-0.0000000000000000, 0.0283172245839030}, + {-0.0000000000000000, 0.0780853835651058}, {-0.0000000000000000, 0.0895583433784236}, + {0.0000000000000000, -0.0780853835651058}, {0.0000000000000000, -0.0330235814687808}, + {-0.0000000000000000, 0.0330235814687808}, {-0.0000000000000000, 0.0780853835651058}, + {-0.0000000000000000, 0.0680879572845679}, {-0.0000000000000000, 0.0667352877462083}, + {-0.1959277889216247, 0.0000000000000000}, {0.0000000000000000, 0.3292263195311197}, + {0.3833320420712772, -0.0000000000000000}, {0.0000000000000000, -0.3292263195311197}, + {-0.1959277889216247, -0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.0000000000000000, -0.3292263195311197}, {-0.3121883316125419, -0.0000000000000000}, + {-0.0000000000000000, 0.2084900583919441}, {-0.1959277889216247, -0.0000000000000000}, + {-0.0000000000000000, 0.2084900583919441}, {-0.0000000000000000, -0.2084900583919441}, + {-0.1959277889216247, 0.0000000000000000}, {-0.0000000000000000, -0.2084900583919441}, + {-0.3121883316125419, 0.0000000000000000}, {0.0000000000000000, 0.3292263195311197}, + {0.2495383154917130, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.0000000000000000, -0.3292263195311197}, {-0.3121883316125419, -0.0000000000000000}, + {-0.0000000000000000, 0.2084900583919441}, {0.0000000000000000, -0.2084900583919441}, + {-0.3121883316125419, -0.0000000000000000}, {-0.0000000000000001, 0.3292263195311197}, + {0.2495383154917130, 0.0000000000000001}, {-0.0000000000000000, 0.2084900583919441}, + {0.2495383154917130, 0.0000000000000001}, {0.0000000000000001, -0.2084900583919441}, + {0.0000000000000000, 0.2084900583919441}, {0.2495383154917130, 0.0000000000000000}, + {0.0000000000000000, -0.2084900583919441}, {-0.1959277889216247, -0.0000000000000000}, + {-0.0000000000000000, 0.2084900583919441}, {-0.0000000000000000, 0.2084900583919441}, + {0.2495383154917130, 0.0000000000000001}, {0.0000000000000001, -0.2084900583919441}, + {0.0000000000000001, -0.2084900583919441}, {-0.1959277889216247, -0.0000000000000001}, + {-0.0000000000000000, -0.2084900583919441}, {-0.1959277889216247, 0.0000000000000000}, + {-0.1959277889216247, 0.0000000000000001}, {0.0000000000000001, 0.2084900583919441}, + {0.0000000000000001, 0.2084900583919441}, {0.2495383154917130, -0.0000000000000001}, + {-0.0000000000000000, -0.2084900583919441}, {-0.0000000000000000, -0.2084900583919441}, + {-0.3121883316125419, 0.0000000000000000}, {0.0000000000000000, 0.3292263195311197}, + {0.2495383154917130, 0.0000000000000000}, {0.0000000000000000, 0.2084900583919441}, + {0.2495383154917130, 0.0000000000000000}, {0.0000000000000000, -0.2084900583919441}, + {0.0000000000000001, 0.2084900583919441}, {0.2495383154917130, -0.0000000000000001}, + {-0.0000000000000000, -0.2084900583919441}, {0.2495383154917130, -0.0000000000000001}, + {-0.0000000000000001, -0.3292263195311197}, {-0.3121883316125419, 0.0000000000000000}, + {0.0000000000000000, 0.2084900583919441}, {0.1123058288786304, -0.1123058288786304}, + {0.1639189014500104, -0.1639189014500105}, {-0.2062271905673179, -0.2062271905673178}, + {-0.1842707640739018, 0.1842707640739018}, {0.1123058288786304, 0.1123058288786304}, + {-0.1842707640739018, -0.1842707640739018}, {-0.2547513192934127, 0.2547513192934126}, + {0.2547513192934126, 0.2547513192934127}, {0.1842707640739018, -0.1842707640739018}, + {0.1059318666456010, -0.2557421491433081}, {0.1497066794479725, -0.1497066794479725}, + {-0.0000000000000000, -0.0839101408927066}, {-0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0619166231573246, -0.0000000000000000}, + {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, 0.0000000000000000}, + {-0.0619166231573246, -0.0000000000000000}, {-0.0000000000000000, 0.1191161929559753}, + {0.1319268716568682, 0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, + {0.1319268716568682, 0.0000000000000000}, {0.1319268716568682, -0.0000000000000000}, + {-0.0000000000000000, -0.0839101408927066}, {0.1319268716568682, -0.0000000000000000}, + {-0.0000000000000000, -0.1191161929559753}, {-0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, + {0.0619166231573246, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0439756238856227, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101891}, {0.0439756238856227, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101891}, {-0.1319268716568682, -0.0000000000000000}, + {-0.1319268716568682, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, + {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, + {-0.0439756238856227, -0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, + {-0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, + {-0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, 0.0839101408927066}, + {-0.0000000000000000, -0.0839101408927066}, {-0.0439756238856227, 0.0000000000000000}, + {-0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0439756238856227, 0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101891}, {0.0439756238856227, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101891}, {-0.1319268716568682, -0.0000000000000000}, + {-0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, 0.1007653341101891}, + {0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, 0.1007653341101891}, + {0.0619166231573246, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0439756238856227, 0.0000000000000000}, {0.0759927742976599, 0.0759927742976599}, + {0.1010882558711464, 0.1010882558711464}, {0.0800932061106409, -0.0800932061106410}, + {-0.0368098028202926, -0.0368098028202926}, {0.0000000000000000, 0.0000000000000000}, + {0.0736196056405852, -0.0736196056405852}, {-0.0467023967912827, -0.0467023967912827}, + {0.0000000000000000, 0.0000000000000000}, {-0.0368098028202926, -0.0368098028202926}, + {-0.0629050701457150, -0.0260561331963860}, {-0.0471889745097794, -0.0471889745097794}, + {-0.0000000000000000, -0.0839101408927066}, {-0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0619166231573246, -0.0000000000000000}, + {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.1007653341101892}, + {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, + {-0.0439756238856227, -0.0000000000000000}, {-0.0439756238856227, 0.0000000000000000}, + {0.0000000000000000, 0.0839101408927066}, {0.0439756238856227, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101892}, {-0.0000000000000000, 0.1007653341101892}, + {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0439756238856227, 0.0000000000000000}, {0.1319268716568682, 0.0000000000000000}, + {0.0000000000000000, -0.1191161929559753}, {-0.0619166231573246, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.1319268716568682, -0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101892}, {0.0439756238856227, 0.0000000000000000}, + {-0.0439756238856227, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, + {-0.0439756238856227, -0.0000000000000000}, {-0.1319268716568682, -0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101892}, {0.0439756238856227, 0.0000000000000000}, + {0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, + {-0.0439756238856228, 0.0000000000000000}, {0.0000000000000000, 0.0839101408927066}, + {0.0000000000000000, 0.0839101408927066}, {0.1319268716568682, -0.0000000000000000}, + {0.0439756238856228, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, + {-0.1319268716568682, 0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, + {-0.0000000000000000, -0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101892}, {-0.0439756238856227, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, + {0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, + {-0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, 0.1191161929559753}, + {0.1319268716568682, 0.0000000000000000}, {-0.0506618495317733, -0.0506618495317733}, + {0.0000000000000000, 0.0000000000000000}, {-0.0400466030553205, 0.0400466030553205}, + {0.0736196056405853, 0.0736196056405852}, {0.0759927742976599, -0.0759927742976599}, + {0.0368098028202926, -0.0368098028202926}, {-0.0000000000000000, -0.0000000000000000}, + {0.0467023967912827, -0.0467023967912827}, {-0.0736196056405852, -0.0736196056405853}, + {-0.0880670982040010, -0.0364785864749405}, {-0.0786482908496323, -0.0786482908496323}, + {0.0000000000000000, 0.0839101408927066}, {0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.1007653341101892}, + {-0.0619166231573246, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, + {0.0439756238856227, 0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, + {-0.0000000000000000, -0.0839101408927066}, {-0.0439756238856227, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0619166231573246, 0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0000000000000000}, + {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.1191161929559753}, + {-0.1319268716568682, -0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0619166231573246, -0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101892}, {0.0439756238856227, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, + {-0.0439756238856227, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, + {0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, + {-0.1319268716568682, -0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101892}, {0.1319268716568682, 0.0000000000000000}, + {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, + {-0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, 0.0839101408927066}, + {0.0000000000000000, 0.0839101408927066}, {0.0439756238856227, -0.0000000000000000}, + {0.1319268716568682, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, + {-0.0439756238856227, 0.0000000000000000}, {-0.1319268716568682, 0.0000000000000000}, + {0.0000000000000000, 0.1191161929559753}, {0.0619166231573246, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.1319268716568682, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101892}, {-0.0439756238856227, -0.0000000000000000}, + {0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, + {-0.0619166231573246, 0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, + {-0.0439756238856227, 0.0000000000000000}, {0.0379963871488300, 0.0379963871488300}, + {-0.0168480426451911, -0.0168480426451910}, {0.0200233015276602, -0.0200233015276602}, + {-0.0552147042304389, -0.0552147042304389}, {-0.0633273119147166, 0.0633273119147166}, + {-0.0552147042304389, 0.0552147042304389}, {0.0233511983956413, 0.0233511983956413}, + {-0.0233511983956413, 0.0233511983956413}, {0.0552147042304389, 0.0552147042304389}, + {0.0629050701457150, 0.0260561331963861}, {0.0471889745097794, 0.0471889745097794}}; + std::vector> vkb0i + = {{0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, + {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0119933519685976}, + {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, + {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, + {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0119933519685976}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, + {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, + {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0119933519685976}, + {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0039977839895325}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0251913335271091}, {-0.0000000000000000, 0.0039977839895325}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, + {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0251913335271091}, + {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0412777487684869}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487720041}, + {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, + {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595607437938820}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, + {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0399778398953252}, + {-0.0000000000000000, 0.0595607437938820}, {-0.0000000000000000, 0.0412777487720041}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, + {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595580964730781}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487684869}, + {-0.0000000000000000, 0.0503826670509438}, {-0.0000000000000000, 0.0079955679815631}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398953252}, + {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0503826670509438}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, + {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0279700469621601}, + {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0279700469645434}, + {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0079955679815631}, + {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0251913335242470}, + {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0595580964869841}, {-0.0000000000000000, 0.0412777487720041}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0503826670553068}, {-0.0000000000000000, 0.0399778398953252}, + {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0251913335242470}, + {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0503826670553068}, + {-0.0000000000000000, 0.0412777487720041}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0079955679815631}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, + {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, + {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0139850234834634}, + {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0039977839895325}, + {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0039977839895325}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, + {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0119933519636014}, {-0.0000000000000000, 0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0119933519636014}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0251913335299711}, {0.0000000000000000, -0.0119933519636014}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0251913335242470}, + {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0119933519636014}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0139850234834634}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, + {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, + {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, + {-0.0119933519685976, -0.0000000000000000}, {0.0119933519685976, -0.0000000000000000}, + {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, + {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0039977839895325, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {-0.0000000000000000, 0.0251913335271091}, {0.0119933519685976, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0039977839895325, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, + {0.0039977839895325, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, + {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, + {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, + {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0119933519685976, 0.0000000000000000}, {-0.0039977839895325, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0251913335271091}, {-0.0039977839895325, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0251913335271091}, + {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0206388743877607, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, -0.0279700469621601}, {-0.0412777487684869, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0412777487720041, 0.0000000000000000}, + {0.0000000000000000, -0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, + {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595607437938820}, + {-0.0399778398965743, -0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, + {-0.0399778398953252, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, + {-0.0000000000000000, -0.0279700469645434}, {0.0399778398953252, -0.0000000000000000}, + {-0.0000000000000000, -0.0595607437938820}, {-0.0412777487720041, 0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, + {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595580964730781}, + {-0.0399778398965743, -0.0000000000000000}, {0.0079955679815631, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0412777487684869, -0.0000000000000000}, + {-0.0000000000000000, 0.0503826670509438}, {-0.0079955679815631, -0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {0.0399778398953252, 0.0000000000000000}, + {-0.0399778398953252, 0.0000000000000000}, {-0.0000000000000000, 0.0503826670509438}, + {0.0399778398965743, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, + {-0.0399778398965743, -0.0000000000000000}, {-0.0079955679815631, -0.0000000000000000}, + {-0.0000000000000000, 0.0251913335271091}, {0.0399778398965743, 0.0000000000000000}, + {0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, + {0.0399778398878310, -0.0000000000000000}, {-0.0000000000000000, -0.0279700469645434}, + {-0.0000000000000000, -0.0279700469645434}, {-0.0079955679815631, 0.0000000000000000}, + {-0.0399778398878310, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, + {0.0079955679815631, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, + {-0.0000000000000000, -0.0595580964869841}, {-0.0412777487720041, 0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0399778398965743, 0.0000000000000000}, + {-0.0000000000000000, 0.0503826670553068}, {0.0399778398953252, 0.0000000000000000}, + {-0.0399778398953252, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, + {0.0079955679815631, -0.0000000000000000}, {0.0000000000000000, 0.0503826670553068}, + {0.0412777487720041, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, -0.0139850234834634}, {-0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0206388743912779, 0.0000000000000000}, + {0.0000000000000000, -0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, + {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0039977839895325, -0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, + {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, -0.0000000000000000}, + {-0.0000000000000000, -0.0139850234858467}, {0.0039977839895325, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0206388743912779, 0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, + {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0119933519636014, -0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, + {0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0119933519636014, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, + {0.0119933519636014, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, + {0.0000000000000000, -0.0251913335299711}, {-0.0119933519636014, -0.0000000000000000}, + {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, + {-0.0119933519611033, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, + {0.0000000000000000, 0.0139850234834634}, {0.0119933519685976, -0.0000000000000000}, + {0.0119933519611033, -0.0000000000000000}, {-0.0000000000000000, -0.0251913335242470}, + {-0.0119933519685976, 0.0000000000000000}, {0.0119933519636014, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0119933519636014, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, + {0.0039977839895325, -0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, + {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; + std::vector> vkb0j + = {{0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, + {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0119933519685976}, + {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, + {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, + {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0119933519685976}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, + {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, + {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0119933519685976}, + {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0039977839895325}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0251913335271091}, {-0.0000000000000000, 0.0039977839895325}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, + {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0251913335271091}, + {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0412777487684869}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487720041}, + {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, + {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595607437938820}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, + {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0399778398953252}, + {-0.0000000000000000, 0.0595607437938820}, {-0.0000000000000000, 0.0412777487720041}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, + {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595580964730781}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487684869}, + {-0.0000000000000000, 0.0503826670509438}, {-0.0000000000000000, 0.0079955679815631}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398953252}, + {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0503826670509438}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, + {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0279700469621601}, + {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0279700469645434}, + {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0079955679815631}, + {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0251913335242470}, + {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0595580964869841}, {-0.0000000000000000, 0.0412777487720041}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0503826670553068}, {-0.0000000000000000, 0.0399778398953252}, + {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0251913335242470}, + {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0503826670553068}, + {-0.0000000000000000, 0.0412777487720041}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0079955679815631}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, + {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, + {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0139850234834634}, + {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0039977839895325}, + {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0039977839895325}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, + {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0119933519636014}, {-0.0000000000000000, 0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0119933519636014}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0251913335299711}, {0.0000000000000000, -0.0119933519636014}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0251913335242470}, + {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0119933519636014}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0139850234834634}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, + {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, + {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, + {-0.0119933519685976, -0.0000000000000000}, {0.0119933519685976, -0.0000000000000000}, + {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, + {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0039977839895325, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {-0.0000000000000000, 0.0251913335271091}, {0.0119933519685976, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0039977839895325, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, + {0.0039977839895325, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, + {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, + {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, + {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0119933519685976, 0.0000000000000000}, {-0.0039977839895325, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0251913335271091}, {-0.0039977839895325, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0251913335271091}, + {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0206388743877607, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, -0.0279700469621601}, {-0.0412777487684869, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0412777487720041, 0.0000000000000000}, + {0.0000000000000000, -0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, + {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595607437938820}, + {-0.0399778398965743, -0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, + {-0.0399778398953252, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, + {-0.0000000000000000, -0.0279700469645434}, {0.0399778398953252, -0.0000000000000000}, + {-0.0000000000000000, -0.0595607437938820}, {-0.0412777487720041, 0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, + {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595580964730781}, + {-0.0399778398965743, -0.0000000000000000}, {0.0079955679815631, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0412777487684869, -0.0000000000000000}, + {-0.0000000000000000, 0.0503826670509438}, {-0.0079955679815631, -0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {0.0399778398953252, 0.0000000000000000}, + {-0.0399778398953252, 0.0000000000000000}, {-0.0000000000000000, 0.0503826670509438}, + {0.0399778398965743, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, + {-0.0399778398965743, -0.0000000000000000}, {-0.0079955679815631, -0.0000000000000000}, + {-0.0000000000000000, 0.0251913335271091}, {0.0399778398965743, 0.0000000000000000}, + {0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, + {0.0399778398878310, -0.0000000000000000}, {-0.0000000000000000, -0.0279700469645434}, + {-0.0000000000000000, -0.0279700469645434}, {-0.0079955679815631, 0.0000000000000000}, + {-0.0399778398878310, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, + {0.0079955679815631, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, + {-0.0000000000000000, -0.0595580964869841}, {-0.0412777487720041, 0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0399778398965743, 0.0000000000000000}, + {-0.0000000000000000, 0.0503826670553068}, {0.0399778398953252, 0.0000000000000000}, + {-0.0399778398953252, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, + {0.0079955679815631, -0.0000000000000000}, {0.0000000000000000, 0.0503826670553068}, + {0.0412777487720041, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, -0.0139850234834634}, {-0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0206388743912779, 0.0000000000000000}, + {0.0000000000000000, -0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, + {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0039977839895325, -0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, + {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, -0.0000000000000000}, + {-0.0000000000000000, -0.0139850234858467}, {0.0039977839895325, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0206388743912779, 0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, + {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0119933519636014, -0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, + {0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0119933519636014, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, + {0.0119933519636014, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, + {0.0000000000000000, -0.0251913335299711}, {-0.0119933519636014, -0.0000000000000000}, + {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, + {-0.0119933519611033, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, + {0.0000000000000000, 0.0139850234834634}, {0.0119933519685976, -0.0000000000000000}, + {0.0119933519611033, -0.0000000000000000}, {-0.0000000000000000, -0.0251913335242470}, + {-0.0119933519685976, 0.0000000000000000}, {0.0119933519636014, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0119933519636014, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, + {0.0039977839895325, -0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, + {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; + std::vector> vkb1 + = {{0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; + std::vector> vkb2 + = {{-0.1381930863244145, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, + {0.0000000086426771, -0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, + {-0.1381930863244145, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.0972917790072033, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1381930863244145, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1089083477794440, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, + {-0.1334606271797373, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.0972917790072033, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1089083477794440, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, + {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, + {-0.1381930863244145, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1089083477794440, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, + {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.0972917790072033, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0447433475348149}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, + {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0661391041210523}, + {-0.0000000000000000, 0.0016778554224101}, {-0.0000000000000000, 0.0054385813505070}, + {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0016778554224101}, + {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0016778554224101}, + {-0.0000000000000000, 0.0661391041210523}, {-0.0000000000000000, 0.0447433475348149}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, + {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, + {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, + {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0016778554224101}, + {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0171567560732830}, + {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, + {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, + {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, + {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, + {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, + {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, + {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0016778554224101}, + {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0171567560732830}, + {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0171567560732830}, + {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0447433475348149}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, + {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0171567560732830}, + {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, + {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0005592851408034}, + {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, -0.0005592851408034}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, + {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0171567560732830}, + {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0016778554224101}, + {-0.0000000000000000, 0.0661391041210523}, {-0.0000000000000000, 0.0447433475348149}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0016778554224101}, + {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, + {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0016778554224101}, + {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0054385813505070}, + {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, + {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0016778554224101}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, + {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0005592851408034}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, + {0.0000000000000000, -0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, + {-0.0000000000000000, 0.0016778554224101}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0661391041210523}, + {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, -0.0447433475348149}, + {-0.0000000000000000, 0.1119530873895942}, {-0.0000000000000000, 0.0447433475348149}, + {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0171567560732830}, + {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0005592851408034}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0447433475348149}, + {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0661391041210523}, + {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0005592851408034}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0447433475348149}, + {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0171567560732830}, + {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0054385813505070}, + {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0005592851408034}, + {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0016778554224101}, + {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, + {-0.0000000000000000, 0.0016778554224101}, {-0.0000000000000000, 0.0054385813505070}, + {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0005592851408034}, + {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0171567560732830}, + {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0016778554224101}, + {0.0000000000000000, -0.0661391041210523}, {0.0000000000000000, -0.0447433475348149}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0016778554224101}, + {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, + {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, + {0.0000000000000000, -0.0447433475348149}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.1381930863244145, -0.0000000000000000}, {-0.0000000000000000, -0.0972917790072033}, + {0.0000000086426771, -0.0000000000000000}, {-0.0000000000000000, 0.0972917790072033}, + {0.1381930863244145, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.0000000000000000, 0.0972917790072033}, {0.1089083477794440, 0.0000000000000000}, + {0.0000000000000000, -0.1382542313485365}, {0.1381930863244145, 0.0000000000000000}, + {0.0000000000000000, -0.1382542313485365}, {0.0000000000000000, 0.1382542313485365}, + {0.1381930863244145, -0.0000000000000000}, {0.0000000000000000, 0.1382542313485365}, + {0.1089083477794440, -0.0000000000000000}, {-0.0000000000000000, -0.0972917790072033}, + {-0.1334606271797373, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.0000000000000000, 0.0972917790072033}, {0.1089083477794440, 0.0000000000000000}, + {0.0000000000000000, -0.1382542313485365}, {-0.0000000000000000, 0.1382542313485365}, + {0.1089083477794440, 0.0000000000000000}, {0.0000000000000000, -0.0972917790072033}, + {-0.1334606271797373, -0.0000000000000000}, {0.0000000000000000, -0.1382542313485365}, + {-0.1334606271797373, -0.0000000000000000}, {-0.0000000000000000, 0.1382542313485365}, + {-0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, + {-0.0000000000000000, 0.1382542313485365}, {0.1381930863244145, 0.0000000000000000}, + {0.0000000000000000, -0.1382542313485365}, {0.0000000000000000, -0.1382542313485365}, + {-0.1334606271797373, -0.0000000000000000}, {-0.0000000000000000, 0.1382542313485365}, + {-0.0000000000000000, 0.1382542313485365}, {0.1381930863244145, 0.0000000000000001}, + {0.0000000000000000, 0.1382542313485365}, {0.1381930863244145, -0.0000000000000000}, + {0.1381930863244145, -0.0000000000000001}, {-0.0000000000000000, -0.1382542313485365}, + {-0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, + {0.0000000000000000, 0.1382542313485365}, {0.0000000000000000, 0.1382542313485365}, + {0.1089083477794440, -0.0000000000000000}, {-0.0000000000000000, -0.0972917790072033}, + {-0.1334606271797373, 0.0000000000000000}, {-0.0000000000000000, -0.1382542313485365}, + {-0.1334606271797373, 0.0000000000000000}, {-0.0000000000000000, 0.1382542313485365}, + {-0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, + {0.0000000000000000, 0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, + {0.0000000000000000, 0.0972917790072033}, {0.1089083477794440, -0.0000000000000000}, + {-0.0000000000000000, -0.1382542313485365}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0054385813505070}, {-0.0447433475348149, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0447433475348149, -0.0000000000000000}, + {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, 0.0000000000000000}, + {-0.0447433475348149, -0.0000000000000000}, {-0.0000000000000000, 0.0661391041210523}, + {-0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, + {-0.0016778554224101, -0.0000000000000000}, {-0.0016778554224101, 0.0000000000000000}, + {0.0000000000000000, 0.0054385813505070}, {-0.0016778554224101, 0.0000000000000000}, + {-0.0000000000000000, -0.0661391041210523}, {-0.0447433475348149, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, + {0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0005592851408034, -0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, + {0.0000000000000000, -0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, + {0.0000000000000000, -0.0171567560732830}, {0.0016778554224101, 0.0000000000000000}, + {0.0016778554224101, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, + {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, + {0.0005592851408034, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, + {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, + {0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, + {0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, -0.0000000000000000}, + {0.0005592851408034, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0005592851408034, -0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, + {0.0000000000000000, -0.0171567560732830}, {-0.0005592851408034, 0.0000000000000000}, + {0.0000000000000000, -0.0171567560732830}, {0.0016778554224101, 0.0000000000000000}, + {0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, 0.0171567560732830}, + {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0171567560732830}, + {0.0447433475348149, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0054385813505070}, {-0.0447433475348149, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0447433475348149, -0.0000000000000000}, + {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0171567560732830}, + {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, + {0.0005592851408034, 0.0000000000000000}, {0.0005592851408034, -0.0000000000000000}, + {-0.0000000000000000, -0.0054385813505070}, {-0.0005592851408034, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, + {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0171567560732830}, + {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0005592851408034, -0.0000000000000000}, {-0.0016778554224101, -0.0000000000000000}, + {0.0000000000000000, -0.0661391041210523}, {-0.0447433475348149, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0016778554224101, 0.0000000000000000}, + {-0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, + {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, + {0.0005592851408034, 0.0000000000000000}, {0.0016778554224101, 0.0000000000000000}, + {-0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, + {-0.0016778554224101, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, + {0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, + {-0.0000000000000000, -0.0054385813505070}, {-0.0016778554224101, 0.0000000000000000}, + {-0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, + {0.0016778554224101, -0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, + {-0.0000000000000000, -0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, + {0.0000000000000000, -0.0171567560732830}, {0.0005592851408034, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, + {-0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, + {0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, 0.0661391041210523}, + {-0.0016778554224101, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, -0.0054385813505070}, {0.0447433475348149, 0.0000000000000000}, + {-0.0000000000000000, 0.1119530873895942}, {0.0447433475348149, 0.0000000000000000}, + {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, -0.0171567560732830}, + {-0.0447433475348149, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, + {-0.0005592851408034, -0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, + {0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0447433475348149, 0.0000000000000000}, + {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0000000000000000}, + {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0661391041210523}, + {0.0016778554224101, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0447433475348149, -0.0000000000000000}, + {-0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, + {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, + {-0.0016778554224101, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, + {0.0016778554224101, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, + {-0.0000000000000000, 0.0171567560732830}, {-0.0016778554224101, -0.0000000000000000}, + {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, + {0.0016778554224101, -0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, + {-0.0000000000000000, -0.0054385813505070}, {-0.0005592851408034, 0.0000000000000000}, + {-0.0016778554224101, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, + {0.0005592851408034, -0.0000000000000000}, {0.0016778554224101, -0.0000000000000000}, + {0.0000000000000000, 0.0661391041210523}, {0.0447433475348149, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0016778554224101, 0.0000000000000000}, + {0.0000000000000000, -0.0171567560732830}, {0.0005592851408034, 0.0000000000000000}, + {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, + {-0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, + {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; - std::vector> expected_dbecpnoevc = {{0.0006640009738949, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {-0.3833320420712772, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {-0.3121883316125419, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.3121883316125419, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {-0.3121883316125419, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {-0.0438387902019509, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {-0.2495383154917130, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.2495383154917130, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.3121883316125419, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.2495383154917130, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {-0.2495383154917130, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {-0.0438387902019509, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, -0.0524645431317476}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0524645431317476}, {-0.0000000000000000, 0.0202331878248253}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0524645431317476}, {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.1073169096855986}, {-0.0000000000000000, 0.0202331878248253}, {-0.0000000000000000, 0.1073169096855986}, {0.0000000000000000, -0.1073169096855986}, {0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, -0.1073169096855986}, {0.0000000000000000, -0.1191161929559753}, {0.0000000000000000, -0.0524645431317476}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0298923367986682}, {0.0000000000000000, -0.0524645431317476}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0357723032285329}, {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0524645431317476}, {-0.0000000000000000, 0.1007653341101891}, {0.0000000000000000, -0.0298542620281862}, {-0.0000000000000000, 0.0298923367986682}, {-0.0000000000000000, 0.1073169096855986}, {0.0000000000000000, -0.1073169096855986}, {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.0357723032285329}, {0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, -0.0357723032285329}, {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0357723032285329}, {0.0000000000000000, -0.0298542620281862}, {-0.0000000000000000, 0.0202331878248253}, {-0.0000000000000000, 0.0357723032285329}, {-0.0000000000000000, 0.0202331878248253}, {0.0000000000000000, -0.0202331878248253}, {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, -0.0357723032285329}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0298542620281862}, {0.0000000000000000, -0.0357723032285329}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0524645431317476}, {-0.0000000000000000, 0.0298923367986682}, {-0.0000000000000000, 0.0357723032285329}, {-0.0000000000000000, 0.1007653341101891}, {-0.0000000000000000, 0.1073169096855986}, {0.0000000000000000, -0.1073169096855986}, {0.0000000000000000, -0.0298923367986682}, {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.0524645431317476}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.1880534696073192}, {0.0000000000000000, -0.1762977894442426}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1762977894512771}, {-0.0000000000000000, 0.1880534696168524}, {0.0000000000000000, -0.2314230050155408}, {0.0000000000000000, -0.1762977894442426}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1237235510007464}, {0.0000000000000000, -0.1880534696073192}, {0.0000000000000000, -0.1237235509982483}, {-0.0000000000000000, 0.1237235510007464}, {-0.0000000000000000, 0.1880534696168524}, {0.0000000000000000, -0.1237235509982483}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1762977894512771}, {-0.0000000000000000, 0.2314230050040926}, {0.0000000000000000, -0.2314230050040926}, {0.0000000000000000, -0.1762977894442426}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1237235510007464}, {0.0000000000000000, -0.1742909572395763}, {0.0000000000000000, -0.2820825644239818}, {0.0000000000000000, -0.1762977894442426}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.1742909572395763}, {0.0000000000000000, -0.2314230050040926}, {0.0000000000000000, -0.1237235509982483}, {0.0000000000000000, -0.1237235509982483}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1237235510007464}, {0.0000000000000000, -0.1880534696073192}, {0.0000000000000000, -0.1237235510007464}, {0.0000000000000000, -0.1742909572395763}, {0.0000000000000000, -0.2314230050155408}, {0.0000000000000000, -0.1237235510007464}, {0.0000000000000000, -0.1742909572395763}, {0.0000000000000000, -0.1880534696073192}, {-0.0000000000000000, 0.1237235509832599}, {-0.0000000000000000, 0.1880534696168524}, {-0.0000000000000000, 0.1880534696168524}, {-0.0000000000000000, 0.1742909572395764}, {-0.0000000000000000, 0.1237235509832599}, {-0.0000000000000000, 0.2314230050040927}, {-0.0000000000000000, 0.1742909572395764}, {0.0000000000000000, -0.1237235510007464}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1762977894512771}, {-0.0000000000000000, 0.2314230050040926}, {0.0000000000000000, -0.1237235510007464}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1237235509982484}, {-0.0000000000000000, 0.1237235509982484}, {-0.0000000000000000, 0.2314230050040926}, {-0.0000000000000000, 0.1742909572395763}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1762977894512771}, {-0.0000000000000000, 0.2820825644239818}, {-0.0000000000000000, 0.1742909572395763}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0202331878248252}, {-0.0000000000000000, 0.0524645431317475}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0524645431247131}, {0.0000000000000000, -0.0202331878152920}, {-0.0000000000000000, 0.0298923367872201}, {-0.0000000000000000, 0.0524645431317475}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0357723032285329}, {-0.0000000000000000, 0.0202331878248252}, {-0.0000000000000000, 0.0357723032285328}, {0.0000000000000000, -0.0357723032285329}, {0.0000000000000000, -0.0202331878152920}, {-0.0000000000000000, 0.0357723032285328}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0524645431247131}, {0.0000000000000000, -0.0298923368101164}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0524645431317475}, {0.0000000000000000, -0.1191161929559753}, {0.0000000000000000, -0.1073169096955909}, {0.0000000000000000, -0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0524645431317475}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0357723032285328}, {0.0000000000000000, -0.0357723032285328}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.1073169096955909}, {0.0000000000000000, -0.0202331878248252}, {0.0000000000000000, -0.1073169096955909}, {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, -0.0298923367872201}, {0.0000000000000000, -0.1073169096955909}, {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, -0.0202331878248252}, {-0.0000000000000000, 0.1073169097005870}, {-0.0000000000000000, 0.0202331878248252}, {-0.0000000000000000, 0.0202331878248252}, {0.0000000000000000, -0.0298542620281862}, {-0.0000000000000000, 0.1073169097005870}, {-0.0000000000000000, 0.0298923368101164}, {0.0000000000000000, -0.0298542620281862}, {-0.0000000000000000, 0.1073169096955909}, {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.0524645431317475}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1073169096955909}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0357723032285328}, {-0.0000000000000000, 0.0357723032285328}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0298542620281862}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0524645431317475}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0006640009738949, 0.0000000000000000}, {-0.0000000000000000, -0.2600232736846565}, {-0.3833320420712772, 0.0000000000000000}, {-0.0000000000000000, 0.2600232736846565}, {-0.0006640009738949, -0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.0000000000000000, 0.2600232736846565}, {0.3121883316125419, 0.0000000000000000}, {0.0000000000000000, -0.1571339884458217}, {-0.0006640009738949, -0.0000000000000000}, {0.0000000000000000, -0.1571339884458217}, {0.0000000000000000, 0.1571339884458217}, {-0.0006640009738949, 0.0000000000000000}, {0.0000000000000000, 0.1571339884458217}, {0.3121883316125419, -0.0000000000000000}, {-0.0000000000000000, -0.2600232736846565}, {-0.0170089259180780, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.0000000000000000, 0.2600232736846565}, {0.3121883316125419, 0.0000000000000000}, {0.0000000000000000, -0.1571339884458217}, {0.0000000000000000, -0.2537145711231581}, {0.0438387902019509, 0.0000000000000000}, {0.0000000000000000, -0.2600232736846565}, {-0.2495383154917130, -0.0000000000000001}, {-0.0000000000000000, 0.2537145711231581}, {-0.0170089259180780, -0.0000000000000000}, {-0.0000000000000000, 0.1571339884458217}, {-0.0000000000000000, -0.1571339884458217}, {-0.2495383154917130, 0.0000000000000000}, {-0.0000000000000000, 0.1571339884458217}, {-0.0006640009738949, -0.0000000000000000}, {0.0000000000000000, -0.1571339884458217}, {-0.0000000000000000, 0.2537145711231581}, {-0.0170089259180780, -0.0000000000000000}, {-0.0000000000000000, 0.1571339884458217}, {0.0000000000000001, -0.2537145711231581}, {-0.0006640009738949, -0.0000000000000000}, {0.0000000000000000, 0.1571339884458217}, {-0.0006640009738949, 0.0000000000000000}, {-0.0006640009738949, 0.0000000000000000}, {0.0000000000000001, 0.2537145711231581}, {-0.0000000000000000, -0.1571339884458217}, {-0.0170089259180780, 0.0000000000000000}, {-0.0000000000000000, -0.2537145711231581}, {0.0000000000000000, 0.1571339884458217}, {0.3121883316125419, -0.0000000000000000}, {-0.0000000000000000, -0.2600232736846565}, {-0.0170089259180780, 0.0000000000000000}, {-0.0000000000000000, -0.1571339884458217}, {-0.2495383154917130, 0.0000000000000000}, {-0.0000000000000000, 0.1571339884458217}, {-0.0000000000000000, -0.1571339884458217}, {-0.0170089259180780, 0.0000000000000000}, {-0.0000000000000000, -0.2537145711231581}, {-0.2495383154917130, 0.0000000000000001}, {0.0000000000000000, 0.2600232736846565}, {0.0438387902019509, -0.0000000000000000}, {0.0000000000000000, 0.2537145711231581}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0202331878248253}, {0.0524645431317476, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0524645431317476, 0.0000000000000000}, {0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, 0.0000000000000000}, {0.0524645431317476, 0.0000000000000000}, {0.0000000000000000, -0.1191161929559753}, {-0.1073169096855986, -0.0000000000000000}, {0.0000000000000000, -0.0202331878248253}, {-0.1073169096855986, -0.0000000000000000}, {-0.1073169096855986, 0.0000000000000000}, {0.0000000000000000, 0.0202331878248253}, {-0.1073169096855986, 0.0000000000000000}, {0.0000000000000000, 0.1191161929559753}, {0.0524645431317476, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0298923367986682}, {-0.0524645431317476, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0357723032285329, -0.0000000000000000}, {0.0298542620281862, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0524645431317476, -0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, {0.0298542620281862, 0.0000000000000000}, {-0.0000000000000000, 0.0298923367986682}, {0.1073169096855986, 0.0000000000000000}, {0.1073169096855986, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101891}, {-0.0357723032285329, -0.0000000000000000}, {-0.0000000000000000, 0.0202331878248253}, {0.0357723032285329, 0.0000000000000000}, {-0.0298542620281862, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0357723032285329, 0.0000000000000000}, {-0.0298542620281862, -0.0000000000000000}, {0.0000000000000000, -0.0202331878248253}, {0.0357723032285329, -0.0000000000000000}, {-0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, 0.0202331878248253}, {-0.0298542620281862, 0.0000000000000000}, {0.0357723032285329, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0298542620281862, 0.0000000000000000}, {-0.0357723032285329, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0524645431317476, 0.0000000000000000}, {-0.0000000000000000, 0.0298923367986682}, {-0.0357723032285329, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, {0.1073169096855986, 0.0000000000000000}, {0.1073169096855986, -0.0000000000000000}, {-0.0000000000000000, -0.0298923367986682}, {0.0298542620281862, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101891}, {-0.0524645431317476, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0298542620281862, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.1880534696073192}, {0.1762977894442426, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.1762977894512771, 0.0000000000000000}, {0.0000000000000000, -0.1880534696168524}, {0.0000000000000000, -0.2314230050155408}, {-0.1762977894442426, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.1237235510007464, -0.0000000000000000}, {-0.0000000000000000, 0.1880534696073192}, {0.1237235509982483, 0.0000000000000000}, {0.1237235510007464, -0.0000000000000000}, {-0.0000000000000000, -0.1880534696168524}, {-0.1237235509982483, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.1762977894512771, 0.0000000000000000}, {-0.0000000000000000, 0.2314230050040926}, {0.0000000000000000, -0.2314230050040926}, {-0.1762977894442426, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.1237235510007464, -0.0000000000000000}, {-0.1742909572395763, -0.0000000000000000}, {-0.0000000000000001, 0.2820825644239818}, {0.1762977894442426, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.1742909572395763, 0.0000000000000000}, {0.0000000000000001, -0.2314230050040926}, {-0.1237235509982483, -0.0000000000000000}, {0.1237235509982483, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.1237235510007464, 0.0000000000000000}, {-0.0000000000000000, 0.1880534696073192}, {0.1237235510007464, 0.0000000000000000}, {0.1742909572395763, 0.0000000000000000}, {0.0000000000000001, -0.2314230050155408}, {-0.1237235510007464, -0.0000000000000000}, {-0.1742909572395763, -0.0000000000000001}, {-0.0000000000000001, 0.1880534696073192}, {0.1237235509832599, -0.0000000000000000}, {-0.0000000000000000, -0.1880534696168524}, {-0.0000000000000001, -0.1880534696168524}, {-0.1742909572395764, 0.0000000000000000}, {-0.1237235509832599, 0.0000000000000000}, {0.0000000000000000, 0.2314230050040927}, {0.1742909572395764, -0.0000000000000000}, {-0.1237235510007464, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.1762977894512771, 0.0000000000000000}, {-0.0000000000000000, 0.2314230050040926}, {0.1237235510007464, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.1237235509982484, 0.0000000000000000}, {-0.1237235509982484, 0.0000000000000000}, {0.0000000000000000, 0.2314230050040926}, {0.1742909572395763, -0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {0.1762977894512771, -0.0000000000000000}, {-0.0000000000000000, -0.2820825644239818}, {-0.1742909572395763, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, -0.0202331878248252}, {-0.0524645431317475, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0524645431247131, -0.0000000000000000}, {-0.0000000000000000, 0.0202331878152920}, {-0.0000000000000000, 0.0298923367872201}, {0.0524645431317475, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0357723032285329, 0.0000000000000000}, {0.0000000000000000, -0.0202331878248252}, {-0.0357723032285328, -0.0000000000000000}, {-0.0357723032285329, 0.0000000000000000}, {0.0000000000000000, 0.0202331878152920}, {0.0357723032285328, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0524645431247131, 0.0000000000000000}, {0.0000000000000000, -0.0298923368101164}, {0.0000000000000000, 0.0000000000000000}, {-0.0524645431317475, -0.0000000000000000}, {-0.0000000000000000, 0.1191161929559753}, {0.1073169096955909, 0.0000000000000000}, {-0.0298542620281862, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0524645431317475, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101892}, {0.0298542620281862, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0357723032285328, -0.0000000000000000}, {0.0357723032285328, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101892}, {-0.1073169096955909, -0.0000000000000000}, {-0.0000000000000000, 0.0202331878248252}, {0.1073169096955909, 0.0000000000000000}, {-0.0298542620281862, -0.0000000000000000}, {0.0000000000000000, -0.0298923367872201}, {-0.1073169096955909, -0.0000000000000000}, {0.0298542620281862, 0.0000000000000000}, {-0.0000000000000000, 0.0202331878248252}, {0.1073169097005870, -0.0000000000000000}, {-0.0000000000000000, -0.0202331878248252}, {-0.0000000000000000, -0.0202331878248252}, {0.0298542620281862, -0.0000000000000000}, {-0.1073169097005870, 0.0000000000000000}, {0.0000000000000000, 0.0298923368101164}, {-0.0298542620281862, 0.0000000000000000}, {0.1073169096955909, -0.0000000000000000}, {-0.0000000000000000, -0.1191161929559753}, {-0.0524645431317475, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.1073169096955909, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, {0.0357723032285328, 0.0000000000000000}, {-0.0357723032285328, 0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {0.0298542620281862, -0.0000000000000000}, {0.0000000000000000, 0.1007653341101892}, {0.0524645431317475, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0298542620281862, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; + std::vector> expected_dbecpnoevc + = {{0.0006640009738949, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, + {-0.3833320420712772, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, + {0.0006640009738949, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, + {-0.2600232736846565, 0.0000000000000000}, {-0.3121883316125419, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, + {0.0006640009738949, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, + {-0.3121883316125419, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, + {-0.0170089259180780, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, + {-0.2600232736846565, 0.0000000000000000}, {-0.3121883316125419, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, + {-0.0438387902019509, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, + {-0.2495383154917130, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, + {-0.0170089259180780, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {-0.2495383154917130, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, + {-0.0170089259180780, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, + {0.2537145711231581, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, + {0.0006640009738949, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, + {0.2537145711231581, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, + {-0.3121883316125419, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, + {-0.0170089259180780, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, + {-0.2495383154917130, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, + {0.2537145711231581, 0.0000000000000000}, {-0.2495383154917130, 0.0000000000000000}, + {-0.2600232736846565, 0.0000000000000000}, {-0.0438387902019509, 0.0000000000000000}, + {0.2537145711231581, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, -0.0524645431317476}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0524645431317476}, + {-0.0000000000000000, 0.0202331878248253}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0524645431317476}, {-0.0000000000000000, 0.1191161929559753}, + {-0.0000000000000000, 0.1073169096855986}, {-0.0000000000000000, 0.0202331878248253}, + {-0.0000000000000000, 0.1073169096855986}, {0.0000000000000000, -0.1073169096855986}, + {0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, -0.1073169096855986}, + {0.0000000000000000, -0.1191161929559753}, {0.0000000000000000, -0.0524645431317476}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0298923367986682}, + {0.0000000000000000, -0.0524645431317476}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0357723032285329}, {-0.0000000000000000, 0.0298542620281862}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0524645431317476}, + {-0.0000000000000000, 0.1007653341101891}, {0.0000000000000000, -0.0298542620281862}, + {-0.0000000000000000, 0.0298923367986682}, {-0.0000000000000000, 0.1073169096855986}, + {0.0000000000000000, -0.1073169096855986}, {0.0000000000000000, -0.1007653341101891}, + {0.0000000000000000, -0.0357723032285329}, {0.0000000000000000, -0.0202331878248253}, + {0.0000000000000000, -0.0357723032285329}, {-0.0000000000000000, 0.0298542620281862}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0357723032285329}, + {0.0000000000000000, -0.0298542620281862}, {-0.0000000000000000, 0.0202331878248253}, + {-0.0000000000000000, 0.0357723032285329}, {-0.0000000000000000, 0.0202331878248253}, + {0.0000000000000000, -0.0202331878248253}, {-0.0000000000000000, 0.0298542620281862}, + {0.0000000000000000, -0.0357723032285329}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0298542620281862}, {0.0000000000000000, -0.0357723032285329}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0524645431317476}, + {-0.0000000000000000, 0.0298923367986682}, {-0.0000000000000000, 0.0357723032285329}, + {-0.0000000000000000, 0.1007653341101891}, {-0.0000000000000000, 0.1073169096855986}, + {0.0000000000000000, -0.1073169096855986}, {0.0000000000000000, -0.0298923367986682}, + {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, -0.1007653341101891}, + {0.0000000000000000, -0.0524645431317476}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.1880534696073192}, {0.0000000000000000, -0.1762977894442426}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1762977894512771}, + {-0.0000000000000000, 0.1880534696168524}, {0.0000000000000000, -0.2314230050155408}, + {0.0000000000000000, -0.1762977894442426}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.1237235510007464}, {0.0000000000000000, -0.1880534696073192}, + {0.0000000000000000, -0.1237235509982483}, {-0.0000000000000000, 0.1237235510007464}, + {-0.0000000000000000, 0.1880534696168524}, {0.0000000000000000, -0.1237235509982483}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1762977894512771}, + {-0.0000000000000000, 0.2314230050040926}, {0.0000000000000000, -0.2314230050040926}, + {0.0000000000000000, -0.1762977894442426}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.1237235510007464}, {0.0000000000000000, -0.1742909572395763}, + {0.0000000000000000, -0.2820825644239818}, {0.0000000000000000, -0.1762977894442426}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.1742909572395763}, + {0.0000000000000000, -0.2314230050040926}, {0.0000000000000000, -0.1237235509982483}, + {0.0000000000000000, -0.1237235509982483}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.1237235510007464}, {0.0000000000000000, -0.1880534696073192}, + {0.0000000000000000, -0.1237235510007464}, {0.0000000000000000, -0.1742909572395763}, + {0.0000000000000000, -0.2314230050155408}, {0.0000000000000000, -0.1237235510007464}, + {0.0000000000000000, -0.1742909572395763}, {0.0000000000000000, -0.1880534696073192}, + {-0.0000000000000000, 0.1237235509832599}, {-0.0000000000000000, 0.1880534696168524}, + {-0.0000000000000000, 0.1880534696168524}, {-0.0000000000000000, 0.1742909572395764}, + {-0.0000000000000000, 0.1237235509832599}, {-0.0000000000000000, 0.2314230050040927}, + {-0.0000000000000000, 0.1742909572395764}, {0.0000000000000000, -0.1237235510007464}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1762977894512771}, + {-0.0000000000000000, 0.2314230050040926}, {0.0000000000000000, -0.1237235510007464}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1237235509982484}, + {-0.0000000000000000, 0.1237235509982484}, {-0.0000000000000000, 0.2314230050040926}, + {-0.0000000000000000, 0.1742909572395763}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.1762977894512771}, {-0.0000000000000000, 0.2820825644239818}, + {-0.0000000000000000, 0.1742909572395763}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0202331878248252}, {-0.0000000000000000, 0.0524645431317475}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0524645431247131}, + {0.0000000000000000, -0.0202331878152920}, {-0.0000000000000000, 0.0298923367872201}, + {-0.0000000000000000, 0.0524645431317475}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0357723032285329}, {-0.0000000000000000, 0.0202331878248252}, + {-0.0000000000000000, 0.0357723032285328}, {0.0000000000000000, -0.0357723032285329}, + {0.0000000000000000, -0.0202331878152920}, {-0.0000000000000000, 0.0357723032285328}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0524645431247131}, + {0.0000000000000000, -0.0298923368101164}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0524645431317475}, {0.0000000000000000, -0.1191161929559753}, + {0.0000000000000000, -0.1073169096955909}, {0.0000000000000000, -0.0298542620281862}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0524645431317475}, + {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.0298542620281862}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0357723032285328}, + {0.0000000000000000, -0.0357723032285328}, {0.0000000000000000, -0.1007653341101892}, + {0.0000000000000000, -0.1073169096955909}, {0.0000000000000000, -0.0202331878248252}, + {0.0000000000000000, -0.1073169096955909}, {-0.0000000000000000, 0.0298542620281862}, + {0.0000000000000000, -0.0298923367872201}, {0.0000000000000000, -0.1073169096955909}, + {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, -0.0202331878248252}, + {-0.0000000000000000, 0.1073169097005870}, {-0.0000000000000000, 0.0202331878248252}, + {-0.0000000000000000, 0.0202331878248252}, {0.0000000000000000, -0.0298542620281862}, + {-0.0000000000000000, 0.1073169097005870}, {-0.0000000000000000, 0.0298923368101164}, + {0.0000000000000000, -0.0298542620281862}, {-0.0000000000000000, 0.1073169096955909}, + {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.0524645431317475}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1073169096955909}, + {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0357723032285328}, + {-0.0000000000000000, 0.0357723032285328}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0298542620281862}, {-0.0000000000000000, 0.1007653341101892}, + {-0.0000000000000000, 0.0524645431317475}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0006640009738949, 0.0000000000000000}, {-0.0000000000000000, -0.2600232736846565}, + {-0.3833320420712772, 0.0000000000000000}, {-0.0000000000000000, 0.2600232736846565}, + {-0.0006640009738949, -0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, + {-0.0000000000000000, 0.2600232736846565}, {0.3121883316125419, 0.0000000000000000}, + {0.0000000000000000, -0.1571339884458217}, {-0.0006640009738949, -0.0000000000000000}, + {0.0000000000000000, -0.1571339884458217}, {0.0000000000000000, 0.1571339884458217}, + {-0.0006640009738949, 0.0000000000000000}, {0.0000000000000000, 0.1571339884458217}, + {0.3121883316125419, -0.0000000000000000}, {-0.0000000000000000, -0.2600232736846565}, + {-0.0170089259180780, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, + {-0.0000000000000000, 0.2600232736846565}, {0.3121883316125419, 0.0000000000000000}, + {0.0000000000000000, -0.1571339884458217}, {0.0000000000000000, -0.2537145711231581}, + {0.0438387902019509, 0.0000000000000000}, {0.0000000000000000, -0.2600232736846565}, + {-0.2495383154917130, -0.0000000000000001}, {-0.0000000000000000, 0.2537145711231581}, + {-0.0170089259180780, -0.0000000000000000}, {-0.0000000000000000, 0.1571339884458217}, + {-0.0000000000000000, -0.1571339884458217}, {-0.2495383154917130, 0.0000000000000000}, + {-0.0000000000000000, 0.1571339884458217}, {-0.0006640009738949, -0.0000000000000000}, + {0.0000000000000000, -0.1571339884458217}, {-0.0000000000000000, 0.2537145711231581}, + {-0.0170089259180780, -0.0000000000000000}, {-0.0000000000000000, 0.1571339884458217}, + {0.0000000000000001, -0.2537145711231581}, {-0.0006640009738949, -0.0000000000000000}, + {0.0000000000000000, 0.1571339884458217}, {-0.0006640009738949, 0.0000000000000000}, + {-0.0006640009738949, 0.0000000000000000}, {0.0000000000000001, 0.2537145711231581}, + {-0.0000000000000000, -0.1571339884458217}, {-0.0170089259180780, 0.0000000000000000}, + {-0.0000000000000000, -0.2537145711231581}, {0.0000000000000000, 0.1571339884458217}, + {0.3121883316125419, -0.0000000000000000}, {-0.0000000000000000, -0.2600232736846565}, + {-0.0170089259180780, 0.0000000000000000}, {-0.0000000000000000, -0.1571339884458217}, + {-0.2495383154917130, 0.0000000000000000}, {-0.0000000000000000, 0.1571339884458217}, + {-0.0000000000000000, -0.1571339884458217}, {-0.0170089259180780, 0.0000000000000000}, + {-0.0000000000000000, -0.2537145711231581}, {-0.2495383154917130, 0.0000000000000001}, + {0.0000000000000000, 0.2600232736846565}, {0.0438387902019509, -0.0000000000000000}, + {0.0000000000000000, 0.2537145711231581}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0202331878248253}, {0.0524645431317476, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0524645431317476, 0.0000000000000000}, + {0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, 0.0000000000000000}, + {0.0524645431317476, 0.0000000000000000}, {0.0000000000000000, -0.1191161929559753}, + {-0.1073169096855986, -0.0000000000000000}, {0.0000000000000000, -0.0202331878248253}, + {-0.1073169096855986, -0.0000000000000000}, {-0.1073169096855986, 0.0000000000000000}, + {0.0000000000000000, 0.0202331878248253}, {-0.1073169096855986, 0.0000000000000000}, + {0.0000000000000000, 0.1191161929559753}, {0.0524645431317476, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0298923367986682}, + {-0.0524645431317476, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0357723032285329, -0.0000000000000000}, {0.0298542620281862, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0524645431317476, -0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101891}, {0.0298542620281862, 0.0000000000000000}, + {-0.0000000000000000, 0.0298923367986682}, {0.1073169096855986, 0.0000000000000000}, + {0.1073169096855986, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101891}, + {-0.0357723032285329, -0.0000000000000000}, {-0.0000000000000000, 0.0202331878248253}, + {0.0357723032285329, 0.0000000000000000}, {-0.0298542620281862, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0357723032285329, 0.0000000000000000}, + {-0.0298542620281862, -0.0000000000000000}, {0.0000000000000000, -0.0202331878248253}, + {0.0357723032285329, -0.0000000000000000}, {-0.0000000000000000, -0.0202331878248253}, + {0.0000000000000000, 0.0202331878248253}, {-0.0298542620281862, 0.0000000000000000}, + {0.0357723032285329, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0298542620281862, 0.0000000000000000}, {-0.0357723032285329, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0524645431317476, 0.0000000000000000}, + {-0.0000000000000000, 0.0298923367986682}, {-0.0357723032285329, 0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101891}, {0.1073169096855986, 0.0000000000000000}, + {0.1073169096855986, -0.0000000000000000}, {-0.0000000000000000, -0.0298923367986682}, + {0.0298542620281862, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101891}, + {-0.0524645431317476, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0298542620281862, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.1880534696073192}, {0.1762977894442426, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.1762977894512771, 0.0000000000000000}, + {0.0000000000000000, -0.1880534696168524}, {0.0000000000000000, -0.2314230050155408}, + {-0.1762977894442426, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.1237235510007464, -0.0000000000000000}, {-0.0000000000000000, 0.1880534696073192}, + {0.1237235509982483, 0.0000000000000000}, {0.1237235510007464, -0.0000000000000000}, + {-0.0000000000000000, -0.1880534696168524}, {-0.1237235509982483, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.1762977894512771, 0.0000000000000000}, + {-0.0000000000000000, 0.2314230050040926}, {0.0000000000000000, -0.2314230050040926}, + {-0.1762977894442426, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.1237235510007464, -0.0000000000000000}, {-0.1742909572395763, -0.0000000000000000}, + {-0.0000000000000001, 0.2820825644239818}, {0.1762977894442426, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.1742909572395763, 0.0000000000000000}, + {0.0000000000000001, -0.2314230050040926}, {-0.1237235509982483, -0.0000000000000000}, + {0.1237235509982483, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.1237235510007464, 0.0000000000000000}, {-0.0000000000000000, 0.1880534696073192}, + {0.1237235510007464, 0.0000000000000000}, {0.1742909572395763, 0.0000000000000000}, + {0.0000000000000001, -0.2314230050155408}, {-0.1237235510007464, -0.0000000000000000}, + {-0.1742909572395763, -0.0000000000000001}, {-0.0000000000000001, 0.1880534696073192}, + {0.1237235509832599, -0.0000000000000000}, {-0.0000000000000000, -0.1880534696168524}, + {-0.0000000000000001, -0.1880534696168524}, {-0.1742909572395764, 0.0000000000000000}, + {-0.1237235509832599, 0.0000000000000000}, {0.0000000000000000, 0.2314230050040927}, + {0.1742909572395764, -0.0000000000000000}, {-0.1237235510007464, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.1762977894512771, 0.0000000000000000}, + {-0.0000000000000000, 0.2314230050040926}, {0.1237235510007464, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.1237235509982484, 0.0000000000000000}, + {-0.1237235509982484, 0.0000000000000000}, {0.0000000000000000, 0.2314230050040926}, + {0.1742909572395763, -0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, + {0.1762977894512771, -0.0000000000000000}, {-0.0000000000000000, -0.2820825644239818}, + {-0.1742909572395763, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, -0.0202331878248252}, {-0.0524645431317475, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0524645431247131, -0.0000000000000000}, + {-0.0000000000000000, 0.0202331878152920}, {-0.0000000000000000, 0.0298923367872201}, + {0.0524645431317475, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0357723032285329, 0.0000000000000000}, {0.0000000000000000, -0.0202331878248252}, + {-0.0357723032285328, -0.0000000000000000}, {-0.0357723032285329, 0.0000000000000000}, + {0.0000000000000000, 0.0202331878152920}, {0.0357723032285328, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0524645431247131, 0.0000000000000000}, + {0.0000000000000000, -0.0298923368101164}, {0.0000000000000000, 0.0000000000000000}, + {-0.0524645431317475, -0.0000000000000000}, {-0.0000000000000000, 0.1191161929559753}, + {0.1073169096955909, 0.0000000000000000}, {-0.0298542620281862, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0524645431317475, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101892}, {0.0298542620281862, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0357723032285328, -0.0000000000000000}, + {0.0357723032285328, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101892}, + {-0.1073169096955909, -0.0000000000000000}, {-0.0000000000000000, 0.0202331878248252}, + {0.1073169096955909, 0.0000000000000000}, {-0.0298542620281862, -0.0000000000000000}, + {0.0000000000000000, -0.0298923367872201}, {-0.1073169096955909, -0.0000000000000000}, + {0.0298542620281862, 0.0000000000000000}, {-0.0000000000000000, 0.0202331878248252}, + {0.1073169097005870, -0.0000000000000000}, {-0.0000000000000000, -0.0202331878248252}, + {-0.0000000000000000, -0.0202331878248252}, {0.0298542620281862, -0.0000000000000000}, + {-0.1073169097005870, 0.0000000000000000}, {0.0000000000000000, 0.0298923368101164}, + {-0.0298542620281862, 0.0000000000000000}, {0.1073169096955909, -0.0000000000000000}, + {-0.0000000000000000, -0.1191161929559753}, {-0.0524645431317475, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.1073169096955909, 0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101892}, {0.0357723032285328, 0.0000000000000000}, + {-0.0357723032285328, 0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, + {0.0298542620281862, -0.0000000000000000}, {0.0000000000000000, 0.1007653341101892}, + {0.0524645431317475, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0298542620281862, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; std::vector> dbecp_noevc(expected_dbecpnoevc.size(), 0); hamilt::cal_dbecp_noevc_nl_op()(cpu_ctx, @@ -41,7 +1757,8 @@ TEST(TestSrcPWStressMultiDevice, cal_dbecp_noevc_nl_op_cpu) vkb2.data(), dbecp_noevc.data()); - for (int ii = 0; ii < dbecp_noevc.size(); ii++) { + for (int ii = 0; ii < dbecp_noevc.size(); ii++) + { EXPECT_LT(fabs(dbecp_noevc[ii] - expected_dbecpnoevc[ii]), 6e-5); } } @@ -49,16 +1766,28 @@ TEST(TestSrcPWStressMultiDevice, cal_dbecp_noevc_nl_op_cpu) TEST(TestSrcPWStressMultiDevice, cal_stress_nl_op_cpu) { bool multi_proj = false; - int ipol = 0, jpol = 0, nkb = 8, npw = 59, npwx = 70, ik = 0, - nbands_occ = 4, ntype = 1, spin = 0, wg_nc = 14, deeq_2 = 2, - deeq_3 = 4, deeq_4 = 4; + int ipol = 0, jpol = 0, nkb = 8, npw = 59, npwx = 70, ik = 0, nbands_occ = 4, ntype = 1, spin = 0, wg_nc = 14, + deeq_2 = 2, deeq_3 = 4, deeq_4 = 4; double tpiba = 0.61599855952741045; - std::vector atom_na {2}; - std::vector atom_nh {4}; + std::vector atom_na{2}; + std::vector atom_nh{4}; - std::vector wg = {0.0312500000000000, 0.0312500000000000, 0.0312500000000000, 0.0312500000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000}; + std::vector wg = {0.0312500000000000, + 0.0312500000000000, + 0.0312500000000000, + 0.0312500000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000}; std::vector ekb = {0.0000000000000000, 0.0000000000000000, 0.0000000000000000, @@ -81,11 +1810,138 @@ TEST(TestSrcPWStressMultiDevice, cal_stress_nl_op_cpu) 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998}; - std::vector deeq = {1.5238850117900000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998, 1.5238850117900000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998}; - std::vector expected_stress = {0.0756853725856800, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000}; + std::vector deeq + = {1.5238850117900000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, + 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, + 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, + 3.6833041305199998, 1.5238850117900000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, + 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, + 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, + 0.0000000000000000, 3.6833041305199998}; + std::vector expected_stress = {0.0756853725856800, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000}; - std::vector> becp = {{0.3822224563153840, 0.2843496698733989}, {0.0000000047405057, -0.0000000063622467}, {-0.0000000221885661, -0.0000000077445564}, {-0.0000000315900339, 0.0000000066031753}, {0.3822219882868894, 0.2843493245749873}, {-0.0000000025566157, -0.0000000037074709}, {-0.0000000112422185, -0.0000000038960692}, {-0.0000000274204417, -0.0000000050354909}, {0.0000000263174842, 0.0000000840706738}, {-0.1423432709137335, -0.1067865593040708}, {0.0994283275636497, -0.0296568132215046}, {-0.1130231022815482, 0.0114126493034118}, {0.0000000192710833, 0.0000000826930318}, {0.1423432909390048, 0.1067865978075706}, {-0.0994283312566920, 0.0296568283839560}, {0.1130231394751445, -0.0114126422350418}, {0.0000000249554797, -0.0000000163412887}, {0.0126173311750538, 0.0505025208030164}, {-0.0992900839174669, 0.1049613257754194}, {-0.1752338959031504, 0.0322947917215720}, {0.0000000314063438, -0.0000000107784857}, {-0.0126173544966048, -0.0505025251050050}, {0.0992901142513072, -0.1049613517795691}, {0.1752339295113088, -0.0322947599296606}, {0.0000000418723599, -0.0000000327967579}, {0.0499915139695752, -0.1358717339908930}, {-0.1207341770424313, -0.0954845098114184}, {-0.0053210967996738, 0.1032100190657011}, {0.0000000478743291, -0.0000000444823110}, {-0.0499915463025769, 0.1358718262641271}, {0.1207342829577684, 0.0954846088542195}, {0.0053210956935376, -0.1032100914804113}, {0.0000001068847889, 0.0000001181241550}, {0.0000001305452835, 0.0000001442724141}, {0.0000001594428453, 0.0000001762083066}, {0.0000001947364746, 0.0000002152126487}, {0.0000002378416024, 0.0000002628496293}, {0.0000002904868037, 0.0000003210294785}, {0.0000003547830455, 0.0000003920849856}, {0.0000004333082382, 0.0000004788649257}, {0.0000005292104672, 0.0000005848481251}, {0.0000006463340280, 0.0000007142827203}, {0.0000007893732947, 0.0000008723561666}, {0.0000009640605597, 0.0000010654027757}, {0.0000011773953314, 0.0000013011570524}, {0.0000014379242254, 0.0000015890629176}, {0.0000017560825876, 0.0000019406511204}, {0.0000021446114368, 0.0000023699998412}, {0.0000026190662889, 0.0000028942967740}, {0.0000031984380579, 0.0000035345249838}, {0.0000039059106450, 0.0000043162997065}, {0.0000047697852053, 0.0000052708891942}, {0.0000058246076273, 0.0000064364599272}, {0.0000071125437223, 0.0000078595952900}, {0.0000086850562956, 0.0000095971474833}, {0.0000106049500357, 0.0000117184953983}, {0.0000129488644412, 0.0000143082969262}, {0.0000158103123394, 0.0000174698432637}, {0.0000193033825817, 0.0000213291459321}, {0.0000235672509859, 0.0000260399152734}, {0.0000287716744541, 0.0000317896231345}, {0.0000351236805296, 0.0000388068835033}, {0.0000428757097852, 0.0000473704344239}, {0.0000523355228617, 0.0000578200643309}, {0.0000638782496584, 0.0000705698979552}, {0.0000779610371221, 0.0000861245435617}, {0.0000951408470466, 0.0001050987072471}, {0.0001160960690513, 0.0001282410045273}, {0.0001416527500887, 0.0001564628482636}, {0.0001728164043580, 0.0001908734692787}, {0.0002108105608012, 0.0002328223367531}, {0.0002571234347964, 0.0002839504948514}, {0.0003135643816117, 0.0003462526262419}, {0.0003823321079660, 0.0004221519981263}, {0.0004660969911826, 0.0005145908492938}, {0.0005681002892969, 0.0006271392433178}, {0.0006922735267517, 0.0007641259500957}, {0.0008433819139013, 0.0009307955291415}, {0.0010271963084076, 0.0011334964765463}, {0.0012506989528594, 0.0013799060603236}, {0.0015223290208384, 0.0016792982989649}, {0.0018522748607834, 0.0020428624165972}, {0.0022528207210042, 0.0024840800058399}, {0.0027387566255197, 0.0030191699939689}, {0.0033278608972953, 0.0036676112650506}, {0.0040414654826298, 0.0044527533271638}, {0.0049051146047016, 0.0054025255635577}, {0.0059493271489466, 0.0065502551556389}, {0.0072104723217411, 0.0079356023901138}, {0.0087317661390834, 0.0096056193626829}, {0.0105643927399804, 0.0116159335008867}, {0.0127687487363306, 0.0140320501542341}, {0.0154158000026934, 0.0169307578066049}, {0.0185885274643147, 0.0204016041438614}, {0.0223834202827117, 0.0245483898500704}, {0.0269119498674243, 0.0294905979689132}, {0.0323019245920026, 0.0353646381152225}, {0.0386985810007877, 0.0423247346918169}, {0.0462652106588671, 0.0505432246455199}, {0.0551830507360847, 0.0602099514549019}, {0.0656500796297109, 0.0715303472823672}, {0.0778782563065075, 0.0847216851955341}, {0.0920886255622899, 0.1000068617622328}, {0.1085035864733623, 0.1176049447506212}, {0.1273354987984115, 0.1377176056755487}, {0.1487707001614866, 0.1605104754331964}, {0.1729479548574285, 0.1860884492515057}, {0.1999303955871250, 0.2144640752215042}, {0.2296702125402119, 0.2455184586467886}, {0.2619657691442796, 0.2789546907877769}, {0.2964115783982629, 0.3142447715396228}, {0.3323427696050946, 0.3505724546933086}}; - std::vector> dbecp = {{-0.3968013160234298, -0.2951954285398501}, {-0.0000000018274627, 0.0000000034091255}, {0.0000000476300934, 0.0000000166257225}, {0.0000000180998023, -0.0000000023594926}, {-0.3968008898814409, -0.2951951140708620}, {0.0000000005567427, 0.0000000025512194}, {0.0000000229895970, 0.0000000079724392}, {0.0000000167415341, 0.0000000014413096}, {-0.0000000026174184, 0.0000000012487815}, {0.1230095511740903, 0.0922823199441691}, {-0.2437547660698587, 0.0727055552275573}, {0.0976717874244303, -0.0098625331883941}, {0.0000000045404125, 0.0000000024011674}, {-0.1230095219426823, -0.0922823070969898}, {0.2437547609009624, -0.0727055484521760}, {-0.0976717740137830, 0.0098625270185677}, {0.0000000049680599, -0.0000000002522028}, {-0.0109035928448508, -0.0436430333758879}, {0.2434158601277590, -0.2573192363956319}, {0.1514328173897781, -0.0279083540606013}, {-0.0000000031677542, -0.0000000031903892}, {0.0109036003822807, 0.0436430239877767}, {-0.2434158919387226, 0.2573193062054900}, {-0.1514327898988280, 0.0279083300282760}, {0.0000000060975568, -0.0000000048858413}, {-0.0432014349179432, 0.1174170187419732}, {0.2959873986513963, 0.2340862748684743}, {0.0045983634023068, -0.0891915655445241}, {-0.0000000099384690, 0.0000000050768091}, {0.0432014425090816, -0.1174170397799131}, {-0.2959876001950912, -0.2340864466551855}, {-0.0045983613371922, 0.0891915833111229}, {0.0000016655959835, 0.0000017510195859}, {0.0000018408257708, 0.0000019352395254}, {0.0000020344974885, 0.0000021388480224}, {0.0000022485533513, 0.0000023638874892}, {0.0000024851401929, 0.0000026126155658}, {0.0000027466327025, 0.0000028875282801}, {0.0000030356550337, 0.0000031913849538}, {0.0000033551087476, 0.0000035272367046}, {0.0000037082017763, 0.0000038984574394}, {0.0000040984814056, 0.0000043087762732}, {0.0000045298707477, 0.0000047623190661}, {0.0000050067058872, 0.0000052636459618}, {0.0000055337849138, 0.0000058178020289}, {0.0000061164112085, 0.0000064303654764}, {0.0000067604539039, 0.0000071075084013}, {0.0000074724020943, 0.0000078560559307}, {0.0000082594355244, 0.0000086835597465}, {0.0000091294975934, 0.0000095983747877}, {0.0000100913766411, 0.0000106097473689}, {0.0000111547974693, 0.0000117279070898}, {0.0000123305245859, 0.0000129641777091}, {0.0000136304715470, 0.0000143310953580}, {0.0000150678278004, 0.0000158425392021}, {0.0000166571982603, 0.0000175138769245}, {0.0000184147567372, 0.0000193621318143}, {0.0000203584206422, 0.0000214061634153}, {0.0000225080396905, 0.0000236668674923}, {0.0000248856156575, 0.0000261674071580}, {0.0000275155354747, 0.0000289334644421}, {0.0000304248457634, 0.0000319935224187}, {0.0000336435462405, 0.0000353791820137}, {0.0000372049283901, 0.0000391255195714}, {0.0000411459477057, 0.0000432714781975}, {0.0000455076526162, 0.0000478603236690}, {0.0000503356501508, 0.0000529401384310}, {0.0000556806447093, 0.0000585643969985}, {0.0000615990320267, 0.0000647925948627}, {0.0000681535873045, 0.0000716909738337}, {0.0000754142226143, 0.0000793333325486}, {0.0000834588617513, 0.0000878019601639}, {0.0000923744145238, 0.0000971886723857}, {0.0001022578998667, 0.0001075960100657}, {0.0001132177151285, 0.0001191385825089}, {0.0001253750821688, 0.0001319446346404}, {0.0001388656931299, 0.0001461577886013}, {0.0001538416116707, 0.0001619390752429}, {0.0001704734126210, 0.0001794692466348}, {0.0001889526839861, 0.0001989514226639}, {0.0002094948352964, 0.0002206141669598}, {0.0002323424532407, 0.0002447148917575}, {0.0002577688660120, 0.0002715440711772}, {0.0002860827366003, 0.0003014297283084}, {0.0003176328473230, 0.0003347429028048}, {0.0003528139319169, 0.0003719036523160}, {0.0003920733033433, 0.0004133883348634}, {0.0004359184355265, 0.0004597378235472}, {0.0004849257498879, 0.0005115667128724}, {0.0005397507675994, 0.0005695742010076}, {0.0006011395651476, 0.0006345564732465}, {0.0006699419202639, 0.0007074208158414}, {0.0007471264573715, 0.0007892012568016}, {0.0008337973421338, 0.0008810768845168}, {0.0009312133317734, 0.0009843916165643}, {0.0010408090615384, 0.0011006761144741}, {0.0011642174877366, 0.0012316721297047}, {0.0013032951060666, 0.0013793575565867}, {0.0014601478141137, 0.0015459723496944}, {0.0016371562939457, 0.0017340444045349}, {0.0018370013548900, 0.0019464124264495}, {0.0020626839266792, 0.0021862431396714}, {0.0023175384724405, 0.0024570389239040}, {0.0026052331032675, 0.0027626284949018}, {0.0029297492028134, 0.0031071332870231}, {0.0032953300104885, 0.0034948945386015}, {0.0037063829897922, 0.0039303453746640}, {0.0041673162235799, 0.0044178042896882}, {0.0046822795025145, 0.0049611566395348}, {0.0052547768360158, 0.0055633838800482}, {0.0058870982291137, 0.0062258836182806}, {0.0065795106541396, 0.0069475113366125}}; + std::vector> becp + = {{0.3822224563153840, 0.2843496698733989}, {0.0000000047405057, -0.0000000063622467}, + {-0.0000000221885661, -0.0000000077445564}, {-0.0000000315900339, 0.0000000066031753}, + {0.3822219882868894, 0.2843493245749873}, {-0.0000000025566157, -0.0000000037074709}, + {-0.0000000112422185, -0.0000000038960692}, {-0.0000000274204417, -0.0000000050354909}, + {0.0000000263174842, 0.0000000840706738}, {-0.1423432709137335, -0.1067865593040708}, + {0.0994283275636497, -0.0296568132215046}, {-0.1130231022815482, 0.0114126493034118}, + {0.0000000192710833, 0.0000000826930318}, {0.1423432909390048, 0.1067865978075706}, + {-0.0994283312566920, 0.0296568283839560}, {0.1130231394751445, -0.0114126422350418}, + {0.0000000249554797, -0.0000000163412887}, {0.0126173311750538, 0.0505025208030164}, + {-0.0992900839174669, 0.1049613257754194}, {-0.1752338959031504, 0.0322947917215720}, + {0.0000000314063438, -0.0000000107784857}, {-0.0126173544966048, -0.0505025251050050}, + {0.0992901142513072, -0.1049613517795691}, {0.1752339295113088, -0.0322947599296606}, + {0.0000000418723599, -0.0000000327967579}, {0.0499915139695752, -0.1358717339908930}, + {-0.1207341770424313, -0.0954845098114184}, {-0.0053210967996738, 0.1032100190657011}, + {0.0000000478743291, -0.0000000444823110}, {-0.0499915463025769, 0.1358718262641271}, + {0.1207342829577684, 0.0954846088542195}, {0.0053210956935376, -0.1032100914804113}, + {0.0000001068847889, 0.0000001181241550}, {0.0000001305452835, 0.0000001442724141}, + {0.0000001594428453, 0.0000001762083066}, {0.0000001947364746, 0.0000002152126487}, + {0.0000002378416024, 0.0000002628496293}, {0.0000002904868037, 0.0000003210294785}, + {0.0000003547830455, 0.0000003920849856}, {0.0000004333082382, 0.0000004788649257}, + {0.0000005292104672, 0.0000005848481251}, {0.0000006463340280, 0.0000007142827203}, + {0.0000007893732947, 0.0000008723561666}, {0.0000009640605597, 0.0000010654027757}, + {0.0000011773953314, 0.0000013011570524}, {0.0000014379242254, 0.0000015890629176}, + {0.0000017560825876, 0.0000019406511204}, {0.0000021446114368, 0.0000023699998412}, + {0.0000026190662889, 0.0000028942967740}, {0.0000031984380579, 0.0000035345249838}, + {0.0000039059106450, 0.0000043162997065}, {0.0000047697852053, 0.0000052708891942}, + {0.0000058246076273, 0.0000064364599272}, {0.0000071125437223, 0.0000078595952900}, + {0.0000086850562956, 0.0000095971474833}, {0.0000106049500357, 0.0000117184953983}, + {0.0000129488644412, 0.0000143082969262}, {0.0000158103123394, 0.0000174698432637}, + {0.0000193033825817, 0.0000213291459321}, {0.0000235672509859, 0.0000260399152734}, + {0.0000287716744541, 0.0000317896231345}, {0.0000351236805296, 0.0000388068835033}, + {0.0000428757097852, 0.0000473704344239}, {0.0000523355228617, 0.0000578200643309}, + {0.0000638782496584, 0.0000705698979552}, {0.0000779610371221, 0.0000861245435617}, + {0.0000951408470466, 0.0001050987072471}, {0.0001160960690513, 0.0001282410045273}, + {0.0001416527500887, 0.0001564628482636}, {0.0001728164043580, 0.0001908734692787}, + {0.0002108105608012, 0.0002328223367531}, {0.0002571234347964, 0.0002839504948514}, + {0.0003135643816117, 0.0003462526262419}, {0.0003823321079660, 0.0004221519981263}, + {0.0004660969911826, 0.0005145908492938}, {0.0005681002892969, 0.0006271392433178}, + {0.0006922735267517, 0.0007641259500957}, {0.0008433819139013, 0.0009307955291415}, + {0.0010271963084076, 0.0011334964765463}, {0.0012506989528594, 0.0013799060603236}, + {0.0015223290208384, 0.0016792982989649}, {0.0018522748607834, 0.0020428624165972}, + {0.0022528207210042, 0.0024840800058399}, {0.0027387566255197, 0.0030191699939689}, + {0.0033278608972953, 0.0036676112650506}, {0.0040414654826298, 0.0044527533271638}, + {0.0049051146047016, 0.0054025255635577}, {0.0059493271489466, 0.0065502551556389}, + {0.0072104723217411, 0.0079356023901138}, {0.0087317661390834, 0.0096056193626829}, + {0.0105643927399804, 0.0116159335008867}, {0.0127687487363306, 0.0140320501542341}, + {0.0154158000026934, 0.0169307578066049}, {0.0185885274643147, 0.0204016041438614}, + {0.0223834202827117, 0.0245483898500704}, {0.0269119498674243, 0.0294905979689132}, + {0.0323019245920026, 0.0353646381152225}, {0.0386985810007877, 0.0423247346918169}, + {0.0462652106588671, 0.0505432246455199}, {0.0551830507360847, 0.0602099514549019}, + {0.0656500796297109, 0.0715303472823672}, {0.0778782563065075, 0.0847216851955341}, + {0.0920886255622899, 0.1000068617622328}, {0.1085035864733623, 0.1176049447506212}, + {0.1273354987984115, 0.1377176056755487}, {0.1487707001614866, 0.1605104754331964}, + {0.1729479548574285, 0.1860884492515057}, {0.1999303955871250, 0.2144640752215042}, + {0.2296702125402119, 0.2455184586467886}, {0.2619657691442796, 0.2789546907877769}, + {0.2964115783982629, 0.3142447715396228}, {0.3323427696050946, 0.3505724546933086}}; + std::vector> dbecp + = {{-0.3968013160234298, -0.2951954285398501}, {-0.0000000018274627, 0.0000000034091255}, + {0.0000000476300934, 0.0000000166257225}, {0.0000000180998023, -0.0000000023594926}, + {-0.3968008898814409, -0.2951951140708620}, {0.0000000005567427, 0.0000000025512194}, + {0.0000000229895970, 0.0000000079724392}, {0.0000000167415341, 0.0000000014413096}, + {-0.0000000026174184, 0.0000000012487815}, {0.1230095511740903, 0.0922823199441691}, + {-0.2437547660698587, 0.0727055552275573}, {0.0976717874244303, -0.0098625331883941}, + {0.0000000045404125, 0.0000000024011674}, {-0.1230095219426823, -0.0922823070969898}, + {0.2437547609009624, -0.0727055484521760}, {-0.0976717740137830, 0.0098625270185677}, + {0.0000000049680599, -0.0000000002522028}, {-0.0109035928448508, -0.0436430333758879}, + {0.2434158601277590, -0.2573192363956319}, {0.1514328173897781, -0.0279083540606013}, + {-0.0000000031677542, -0.0000000031903892}, {0.0109036003822807, 0.0436430239877767}, + {-0.2434158919387226, 0.2573193062054900}, {-0.1514327898988280, 0.0279083300282760}, + {0.0000000060975568, -0.0000000048858413}, {-0.0432014349179432, 0.1174170187419732}, + {0.2959873986513963, 0.2340862748684743}, {0.0045983634023068, -0.0891915655445241}, + {-0.0000000099384690, 0.0000000050768091}, {0.0432014425090816, -0.1174170397799131}, + {-0.2959876001950912, -0.2340864466551855}, {-0.0045983613371922, 0.0891915833111229}, + {0.0000016655959835, 0.0000017510195859}, {0.0000018408257708, 0.0000019352395254}, + {0.0000020344974885, 0.0000021388480224}, {0.0000022485533513, 0.0000023638874892}, + {0.0000024851401929, 0.0000026126155658}, {0.0000027466327025, 0.0000028875282801}, + {0.0000030356550337, 0.0000031913849538}, {0.0000033551087476, 0.0000035272367046}, + {0.0000037082017763, 0.0000038984574394}, {0.0000040984814056, 0.0000043087762732}, + {0.0000045298707477, 0.0000047623190661}, {0.0000050067058872, 0.0000052636459618}, + {0.0000055337849138, 0.0000058178020289}, {0.0000061164112085, 0.0000064303654764}, + {0.0000067604539039, 0.0000071075084013}, {0.0000074724020943, 0.0000078560559307}, + {0.0000082594355244, 0.0000086835597465}, {0.0000091294975934, 0.0000095983747877}, + {0.0000100913766411, 0.0000106097473689}, {0.0000111547974693, 0.0000117279070898}, + {0.0000123305245859, 0.0000129641777091}, {0.0000136304715470, 0.0000143310953580}, + {0.0000150678278004, 0.0000158425392021}, {0.0000166571982603, 0.0000175138769245}, + {0.0000184147567372, 0.0000193621318143}, {0.0000203584206422, 0.0000214061634153}, + {0.0000225080396905, 0.0000236668674923}, {0.0000248856156575, 0.0000261674071580}, + {0.0000275155354747, 0.0000289334644421}, {0.0000304248457634, 0.0000319935224187}, + {0.0000336435462405, 0.0000353791820137}, {0.0000372049283901, 0.0000391255195714}, + {0.0000411459477057, 0.0000432714781975}, {0.0000455076526162, 0.0000478603236690}, + {0.0000503356501508, 0.0000529401384310}, {0.0000556806447093, 0.0000585643969985}, + {0.0000615990320267, 0.0000647925948627}, {0.0000681535873045, 0.0000716909738337}, + {0.0000754142226143, 0.0000793333325486}, {0.0000834588617513, 0.0000878019601639}, + {0.0000923744145238, 0.0000971886723857}, {0.0001022578998667, 0.0001075960100657}, + {0.0001132177151285, 0.0001191385825089}, {0.0001253750821688, 0.0001319446346404}, + {0.0001388656931299, 0.0001461577886013}, {0.0001538416116707, 0.0001619390752429}, + {0.0001704734126210, 0.0001794692466348}, {0.0001889526839861, 0.0001989514226639}, + {0.0002094948352964, 0.0002206141669598}, {0.0002323424532407, 0.0002447148917575}, + {0.0002577688660120, 0.0002715440711772}, {0.0002860827366003, 0.0003014297283084}, + {0.0003176328473230, 0.0003347429028048}, {0.0003528139319169, 0.0003719036523160}, + {0.0003920733033433, 0.0004133883348634}, {0.0004359184355265, 0.0004597378235472}, + {0.0004849257498879, 0.0005115667128724}, {0.0005397507675994, 0.0005695742010076}, + {0.0006011395651476, 0.0006345564732465}, {0.0006699419202639, 0.0007074208158414}, + {0.0007471264573715, 0.0007892012568016}, {0.0008337973421338, 0.0008810768845168}, + {0.0009312133317734, 0.0009843916165643}, {0.0010408090615384, 0.0011006761144741}, + {0.0011642174877366, 0.0012316721297047}, {0.0013032951060666, 0.0013793575565867}, + {0.0014601478141137, 0.0015459723496944}, {0.0016371562939457, 0.0017340444045349}, + {0.0018370013548900, 0.0019464124264495}, {0.0020626839266792, 0.0021862431396714}, + {0.0023175384724405, 0.0024570389239040}, {0.0026052331032675, 0.0027626284949018}, + {0.0029297492028134, 0.0031071332870231}, {0.0032953300104885, 0.0034948945386015}, + {0.0037063829897922, 0.0039303453746640}, {0.0041673162235799, 0.0044178042896882}, + {0.0046822795025145, 0.0049611566395348}, {0.0052547768360158, 0.0055633838800482}, + {0.0058870982291137, 0.0062258836182806}, {0.0065795106541396, 0.0069475113366125}}; std::vector stress(expected_stress.size(), 0); hamilt::cal_stress_nl_op()(cpu_ctx, @@ -110,7 +1966,8 @@ TEST(TestSrcPWStressMultiDevice, cal_stress_nl_op_cpu) dbecp.data(), stress.data()); - for (int ii = 0; ii < stress.size(); ii++) { + for (int ii = 0; ii < stress.size(); ii++) + { EXPECT_LT(fabs(stress[ii] - expected_stress[ii]), 6e-5); } } @@ -122,21 +1979,1737 @@ TEST(TestSrcPWStressMultiDevice, cal_dbecp_noevc_nl_op_gpu) const double tpiba = 0.61599855952741045; - std::vector gcar = {2.0000000000000000, -2.0000000000000000, -2.0000000000000000, 1.0000000000000000, -1.0000000000000000, -1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, -1.0000000000000000, 1.0000000000000000, 1.0000000000000000, -2.0000000000000000, 2.0000000000000000, 2.0000000000000000, 2.0000000000000000, -2.0000000000000000, 0.0000000000000000, 1.0000000000000000, -1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 2.0000000000000000, -1.0000000000000000, 1.0000000000000000, 3.0000000000000000, 2.0000000000000000, -2.0000000000000000, 2.0000000000000000, 1.0000000000000000, -1.0000000000000000, 3.0000000000000000, -1.0000000000000000, 1.0000000000000000, -3.0000000000000000, -2.0000000000000000, 2.0000000000000000, -2.0000000000000000, 1.0000000000000000, -1.0000000000000000, -3.0000000000000000, 0.0000000000000000, 0.0000000000000000, -2.0000000000000000, -1.0000000000000000, 1.0000000000000000, -1.0000000000000000, -2.0000000000000000, 2.0000000000000000, 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, -2.0000000000000000, 1.0000000000000000, 1.0000000000000000, -1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, -1.0000000000000000, 3.0000000000000000, 1.0000000000000000, 3.0000000000000000, -1.0000000000000000, -1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0000000000000000, 1.0000000000000000, 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 2.0000000000000000, 3.0000000000000000, -1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 2.0000000000000000, 1.0000000000000000, 1.0000000000000000, 3.0000000000000000, 1.0000000000000000, 1.0000000000000000, -3.0000000000000000, 0.0000000000000000, 2.0000000000000000, -2.0000000000000000, -1.0000000000000000, 3.0000000000000000, -1.0000000000000000, 2.0000000000000000, 2.0000000000000000, -2.0000000000000000, 1.0000000000000000, 3.0000000000000000, -1.0000000000000000, 3.0000000000000000, 1.0000000000000000, -1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 0.0000000000000000, 1.0000000000000000, 3.0000000000000000, 1.0000000000000000, 3.0000000000000000, 1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 2.0000000000000000, -1.0000000000000000, -3.0000000000000000, 1.0000000000000000, -2.0000000000000000, -2.0000000000000000, 2.0000000000000000, -2.0000000000000000, -2.0000000000000000, -2.0000000000000000, -3.0000000000000000, -1.0000000000000000, -1.0000000000000000, -1.0000000000000000, -3.0000000000000000, -1.0000000000000000, -2.0000000000000000, -2.0000000000000000, 0.0000000000000000, -3.0000000000000000, -1.0000000000000000, 1.0000000000000000, 1.0000000000000000, -3.0000000000000000, -1.0000000000000000, 0.0000000000000000, -2.0000000000000000, 0.0000000000000000, -1.0000000000000000, -1.0000000000000000, 1.0000000000000000, -2.0000000000000000, 0.0000000000000000, 2.0000000000000000, 1.0000000000000000, -3.0000000000000000, 1.0000000000000000, 0.0000000000000000, -2.0000000000000000, 2.0000000000000000, -1.0000000000000000, -1.0000000000000000, 3.0000000000000000, -1.0000000000000000, -1.0000000000000000, -3.0000000000000000, -2.0000000000000000, 0.0000000000000000, -2.0000000000000000, -3.0000000000000000, 1.0000000000000000, -1.0000000000000000, 0.0000000000000000, -2.0000000000000000, -2.0000000000000000, -1.0000000000000000, -1.0000000000000000, -1.0000000000000000, -2.0000000000000000, 0.0000000000000000, 0.0000000000000000, -3.0000000000000000, 1.0000000000000000, 1.0000000000000000}; + std::vector gcar + = {2.0000000000000000, -2.0000000000000000, -2.0000000000000000, 1.0000000000000000, -1.0000000000000000, + -1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, -1.0000000000000000, + 1.0000000000000000, 1.0000000000000000, -2.0000000000000000, 2.0000000000000000, 2.0000000000000000, + 2.0000000000000000, -2.0000000000000000, 0.0000000000000000, 1.0000000000000000, -1.0000000000000000, + 1.0000000000000000, 0.0000000000000000, 0.0000000000000000, 2.0000000000000000, -1.0000000000000000, + 1.0000000000000000, 3.0000000000000000, 2.0000000000000000, -2.0000000000000000, 2.0000000000000000, + 1.0000000000000000, -1.0000000000000000, 3.0000000000000000, -1.0000000000000000, 1.0000000000000000, + -3.0000000000000000, -2.0000000000000000, 2.0000000000000000, -2.0000000000000000, 1.0000000000000000, + -1.0000000000000000, -3.0000000000000000, 0.0000000000000000, 0.0000000000000000, -2.0000000000000000, + -1.0000000000000000, 1.0000000000000000, -1.0000000000000000, -2.0000000000000000, 2.0000000000000000, + 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, -2.0000000000000000, 1.0000000000000000, + 1.0000000000000000, -1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 0.0000000000000000, + -1.0000000000000000, 3.0000000000000000, 1.0000000000000000, 3.0000000000000000, -1.0000000000000000, + -1.0000000000000000, 2.0000000000000000, 0.0000000000000000, 0.0000000000000000, 1.0000000000000000, + 1.0000000000000000, 1.0000000000000000, 0.0000000000000000, 2.0000000000000000, 2.0000000000000000, + 3.0000000000000000, -1.0000000000000000, 1.0000000000000000, 2.0000000000000000, 0.0000000000000000, + 2.0000000000000000, 1.0000000000000000, 1.0000000000000000, 3.0000000000000000, 1.0000000000000000, + 1.0000000000000000, -3.0000000000000000, 0.0000000000000000, 2.0000000000000000, -2.0000000000000000, + -1.0000000000000000, 3.0000000000000000, -1.0000000000000000, 2.0000000000000000, 2.0000000000000000, + -2.0000000000000000, 1.0000000000000000, 3.0000000000000000, -1.0000000000000000, 3.0000000000000000, + 1.0000000000000000, -1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 0.0000000000000000, + 1.0000000000000000, 3.0000000000000000, 1.0000000000000000, 3.0000000000000000, 1.0000000000000000, + 1.0000000000000000, 2.0000000000000000, 2.0000000000000000, 2.0000000000000000, -1.0000000000000000, + -3.0000000000000000, 1.0000000000000000, -2.0000000000000000, -2.0000000000000000, 2.0000000000000000, + -2.0000000000000000, -2.0000000000000000, -2.0000000000000000, -3.0000000000000000, -1.0000000000000000, + -1.0000000000000000, -1.0000000000000000, -3.0000000000000000, -1.0000000000000000, -2.0000000000000000, + -2.0000000000000000, 0.0000000000000000, -3.0000000000000000, -1.0000000000000000, 1.0000000000000000, + 1.0000000000000000, -3.0000000000000000, -1.0000000000000000, 0.0000000000000000, -2.0000000000000000, + 0.0000000000000000, -1.0000000000000000, -1.0000000000000000, 1.0000000000000000, -2.0000000000000000, + 0.0000000000000000, 2.0000000000000000, 1.0000000000000000, -3.0000000000000000, 1.0000000000000000, + 0.0000000000000000, -2.0000000000000000, 2.0000000000000000, -1.0000000000000000, -1.0000000000000000, + 3.0000000000000000, -1.0000000000000000, -1.0000000000000000, -3.0000000000000000, -2.0000000000000000, + 0.0000000000000000, -2.0000000000000000, -3.0000000000000000, 1.0000000000000000, -1.0000000000000000, + 0.0000000000000000, -2.0000000000000000, -2.0000000000000000, -1.0000000000000000, -1.0000000000000000, + -1.0000000000000000, -2.0000000000000000, 0.0000000000000000, 0.0000000000000000, -3.0000000000000000, + 1.0000000000000000, 1.0000000000000000}; std::vector kvec_c = {0.0000000000000000}; - std::vector> vkb = {{0.1959277889216247, 0.0000000000000000}, {0.3292263195311197, 0.0000000000000000}, {0.3833320420712772, -0.0000000000000000}, {0.3292263195311197, -0.0000000000000000}, {0.1959277889216247, -0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.3292263195311197, -0.0000000000000000}, {0.3121883316125419, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.1959277889216247, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.1959277889216247, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.3121883316125419, 0.0000000000000000}, {0.3292263195311197, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.3292263195311197, -0.0000000000000000}, {0.3121883316125419, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.3121883316125419, -0.0000000000000000}, {0.3292263195311197, -0.0000000000000000}, {0.2495383154917130, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.2495383154917130, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.1959277889216247, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.2495383154917130, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, {0.1959277889216247, -0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.1959277889216247, 0.0000000000000000}, {0.1959277889216247, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.3121883316125419, 0.0000000000000000}, {0.3292263195311197, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.3292263195311197, 0.0000000000000000}, {0.3121883316125419, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, {0.1588244263337111, 0.0000000000000000}, {0.2318163335599036, 0.0000000000000000}, {0.2916492898304017, 0.0000000000000000}, {0.2605982137021648, 0.0000000000000000}, {0.1588244263337111, 0.0000000000000000}, {0.2605982137021648, 0.0000000000000000}, {0.3602727707771828, 0.0000000000000000}, {0.3602727707771828, 0.0000000000000000}, {0.2605982137021648, 0.0000000000000000}, {0.2768133075187308, 0.0000000000000000}, {0.2117172164531642, 0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1191161929559753}, {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1007653341101891}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0839101408927066}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1007653341101891}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1007653341101891}, {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.1074700120541082}, {-0.0000000000000000, 0.1429603824496169}, {-0.0000000000000000, 0.1132688983356121}, {-0.0000000000000000, 0.0520569223767372}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1041138447534744}, {-0.0000000000000000, 0.0660471629375616}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0520569223767372}, {0.0000000000000000, -0.0680879572845678}, {0.0000000000000000, -0.0667352877462083}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.0839101408927066}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0839101408927066}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1007653341101892}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, -0.0439756238856228}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.0439756238856228}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1007653341101892}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1191161929559753}, {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.0716466747027388}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0566344491678060}, {0.0000000000000000, -0.1041138447534745}, {0.0000000000000000, -0.1074700120541082}, {-0.0000000000000000, 0.0520569223767372}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0660471629375617}, {0.0000000000000000, -0.1041138447534745}, {0.0000000000000000, -0.0953231401983950}, {0.0000000000000000, -0.1112254795770137}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.1319268716568682}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.1007653341101892}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.1191161929559753}, {0.0000000000000000, -0.0619166231573246}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.0619166231573246}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0537350060270541}, {0.0000000000000000, -0.0238267304082695}, {-0.0000000000000000, 0.0283172245839030}, {-0.0000000000000000, 0.0780853835651058}, {-0.0000000000000000, 0.0895583433784236}, {0.0000000000000000, -0.0780853835651058}, {0.0000000000000000, -0.0330235814687808}, {-0.0000000000000000, 0.0330235814687808}, {-0.0000000000000000, 0.0780853835651058}, {-0.0000000000000000, 0.0680879572845679}, {-0.0000000000000000, 0.0667352877462083}, {-0.1959277889216247, 0.0000000000000000}, {0.0000000000000000, 0.3292263195311197}, {0.3833320420712772, -0.0000000000000000}, {0.0000000000000000, -0.3292263195311197}, {-0.1959277889216247, -0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.0000000000000000, -0.3292263195311197}, {-0.3121883316125419, -0.0000000000000000}, {-0.0000000000000000, 0.2084900583919441}, {-0.1959277889216247, -0.0000000000000000}, {-0.0000000000000000, 0.2084900583919441}, {-0.0000000000000000, -0.2084900583919441}, {-0.1959277889216247, 0.0000000000000000}, {-0.0000000000000000, -0.2084900583919441}, {-0.3121883316125419, 0.0000000000000000}, {0.0000000000000000, 0.3292263195311197}, {0.2495383154917130, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, {0.0000000000000000, -0.3292263195311197}, {-0.3121883316125419, -0.0000000000000000}, {-0.0000000000000000, 0.2084900583919441}, {0.0000000000000000, -0.2084900583919441}, {-0.3121883316125419, -0.0000000000000000}, {-0.0000000000000001, 0.3292263195311197}, {0.2495383154917130, 0.0000000000000001}, {-0.0000000000000000, 0.2084900583919441}, {0.2495383154917130, 0.0000000000000001}, {0.0000000000000001, -0.2084900583919441}, {0.0000000000000000, 0.2084900583919441}, {0.2495383154917130, 0.0000000000000000}, {0.0000000000000000, -0.2084900583919441}, {-0.1959277889216247, -0.0000000000000000}, {-0.0000000000000000, 0.2084900583919441}, {-0.0000000000000000, 0.2084900583919441}, {0.2495383154917130, 0.0000000000000001}, {0.0000000000000001, -0.2084900583919441}, {0.0000000000000001, -0.2084900583919441}, {-0.1959277889216247, -0.0000000000000001}, {-0.0000000000000000, -0.2084900583919441}, {-0.1959277889216247, 0.0000000000000000}, {-0.1959277889216247, 0.0000000000000001}, {0.0000000000000001, 0.2084900583919441}, {0.0000000000000001, 0.2084900583919441}, {0.2495383154917130, -0.0000000000000001}, {-0.0000000000000000, -0.2084900583919441}, {-0.0000000000000000, -0.2084900583919441}, {-0.3121883316125419, 0.0000000000000000}, {0.0000000000000000, 0.3292263195311197}, {0.2495383154917130, 0.0000000000000000}, {0.0000000000000000, 0.2084900583919441}, {0.2495383154917130, 0.0000000000000000}, {0.0000000000000000, -0.2084900583919441}, {0.0000000000000001, 0.2084900583919441}, {0.2495383154917130, -0.0000000000000001}, {-0.0000000000000000, -0.2084900583919441}, {0.2495383154917130, -0.0000000000000001}, {-0.0000000000000001, -0.3292263195311197}, {-0.3121883316125419, 0.0000000000000000}, {0.0000000000000000, 0.2084900583919441}, {0.1123058288786304, -0.1123058288786304}, {0.1639189014500104, -0.1639189014500105}, {-0.2062271905673179, -0.2062271905673178}, {-0.1842707640739018, 0.1842707640739018}, {0.1123058288786304, 0.1123058288786304}, {-0.1842707640739018, -0.1842707640739018}, {-0.2547513192934127, 0.2547513192934126}, {0.2547513192934126, 0.2547513192934127}, {0.1842707640739018, -0.1842707640739018}, {0.1059318666456010, -0.2557421491433081}, {0.1497066794479725, -0.1497066794479725}, {-0.0000000000000000, -0.0839101408927066}, {-0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0619166231573246, -0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, 0.0000000000000000}, {-0.0619166231573246, -0.0000000000000000}, {-0.0000000000000000, 0.1191161929559753}, {0.1319268716568682, 0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, {0.1319268716568682, 0.0000000000000000}, {0.1319268716568682, -0.0000000000000000}, {-0.0000000000000000, -0.0839101408927066}, {0.1319268716568682, -0.0000000000000000}, {-0.0000000000000000, -0.1191161929559753}, {-0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, {0.0619166231573246, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101891}, {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101891}, {-0.1319268716568682, -0.0000000000000000}, {-0.1319268716568682, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, {-0.0439756238856227, -0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, {-0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, -0.0839101408927066}, {-0.0439756238856227, 0.0000000000000000}, {-0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0439756238856227, 0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101891}, {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101891}, {-0.1319268716568682, -0.0000000000000000}, {-0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, 0.1007653341101891}, {0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, 0.1007653341101891}, {0.0619166231573246, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, {0.0759927742976599, 0.0759927742976599}, {0.1010882558711464, 0.1010882558711464}, {0.0800932061106409, -0.0800932061106410}, {-0.0368098028202926, -0.0368098028202926}, {0.0000000000000000, 0.0000000000000000}, {0.0736196056405852, -0.0736196056405852}, {-0.0467023967912827, -0.0467023967912827}, {0.0000000000000000, 0.0000000000000000}, {-0.0368098028202926, -0.0368098028202926}, {-0.0629050701457150, -0.0260561331963860}, {-0.0471889745097794, -0.0471889745097794}, {-0.0000000000000000, -0.0839101408927066}, {-0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0619166231573246, -0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.1007653341101892}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, {-0.0439756238856227, -0.0000000000000000}, {-0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, 0.0839101408927066}, {0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101892}, {-0.0000000000000000, 0.1007653341101892}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, {0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, -0.1191161929559753}, {-0.0619166231573246, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.1319268716568682, -0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, {0.0439756238856227, 0.0000000000000000}, {-0.0439756238856227, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, {-0.0439756238856227, -0.0000000000000000}, {-0.1319268716568682, -0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, {0.0439756238856227, 0.0000000000000000}, {0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, {-0.0439756238856228, 0.0000000000000000}, {0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, 0.0839101408927066}, {0.1319268716568682, -0.0000000000000000}, {0.0439756238856228, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, {-0.1319268716568682, 0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101892}, {-0.0439756238856227, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, {-0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, 0.1191161929559753}, {0.1319268716568682, 0.0000000000000000}, {-0.0506618495317733, -0.0506618495317733}, {0.0000000000000000, 0.0000000000000000}, {-0.0400466030553205, 0.0400466030553205}, {0.0736196056405853, 0.0736196056405852}, {0.0759927742976599, -0.0759927742976599}, {0.0368098028202926, -0.0368098028202926}, {-0.0000000000000000, -0.0000000000000000}, {0.0467023967912827, -0.0467023967912827}, {-0.0736196056405852, -0.0736196056405853}, {-0.0880670982040010, -0.0364785864749405}, {-0.0786482908496323, -0.0786482908496323}, {0.0000000000000000, 0.0839101408927066}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.1007653341101892}, {-0.0619166231573246, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, {0.0439756238856227, 0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, -0.0839101408927066}, {-0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0619166231573246, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.1191161929559753}, {-0.1319268716568682, -0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0619166231573246, -0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, {0.0439756238856227, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, {-0.0439756238856227, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, {0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, {-0.1319268716568682, -0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, {0.1319268716568682, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, {-0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, 0.0839101408927066}, {0.0439756238856227, -0.0000000000000000}, {0.1319268716568682, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, {-0.0439756238856227, 0.0000000000000000}, {-0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, 0.1191161929559753}, {0.0619166231573246, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101892}, {-0.0439756238856227, -0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, {-0.0619166231573246, 0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {-0.0439756238856227, 0.0000000000000000}, {0.0379963871488300, 0.0379963871488300}, {-0.0168480426451911, -0.0168480426451910}, {0.0200233015276602, -0.0200233015276602}, {-0.0552147042304389, -0.0552147042304389}, {-0.0633273119147166, 0.0633273119147166}, {-0.0552147042304389, 0.0552147042304389}, {0.0233511983956413, 0.0233511983956413}, {-0.0233511983956413, 0.0233511983956413}, {0.0552147042304389, 0.0552147042304389}, {0.0629050701457150, 0.0260561331963861}, {0.0471889745097794, 0.0471889745097794}}; - std::vector> vkb0i = {{0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0251913335271091}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0412777487684869}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487720041}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595607437938820}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0595607437938820}, {-0.0000000000000000, 0.0412777487720041}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595580964730781}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0503826670509438}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0503826670509438}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0595580964869841}, {-0.0000000000000000, 0.0412777487720041}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0503826670553068}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0503826670553068}, {-0.0000000000000000, 0.0412777487720041}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0079955679815631}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519636014}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0251913335299711}, {0.0000000000000000, -0.0119933519636014}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0251913335242470}, {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, -0.0000000000000000}, {0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0251913335271091}, {0.0119933519685976, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {0.0039977839895325, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0119933519685976, 0.0000000000000000}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0251913335271091}, {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0206388743877607, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, -0.0279700469621601}, {-0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0412777487720041, 0.0000000000000000}, {0.0000000000000000, -0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595607437938820}, {-0.0399778398965743, -0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, {-0.0399778398953252, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, {-0.0000000000000000, -0.0279700469645434}, {0.0399778398953252, -0.0000000000000000}, {-0.0000000000000000, -0.0595607437938820}, {-0.0412777487720041, 0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595580964730781}, {-0.0399778398965743, -0.0000000000000000}, {0.0079955679815631, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0412777487684869, -0.0000000000000000}, {-0.0000000000000000, 0.0503826670509438}, {-0.0079955679815631, -0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {0.0399778398953252, 0.0000000000000000}, {-0.0399778398953252, 0.0000000000000000}, {-0.0000000000000000, 0.0503826670509438}, {0.0399778398965743, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, {-0.0399778398965743, -0.0000000000000000}, {-0.0079955679815631, -0.0000000000000000}, {-0.0000000000000000, 0.0251913335271091}, {0.0399778398965743, 0.0000000000000000}, {0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, {0.0399778398878310, -0.0000000000000000}, {-0.0000000000000000, -0.0279700469645434}, {-0.0000000000000000, -0.0279700469645434}, {-0.0079955679815631, 0.0000000000000000}, {-0.0399778398878310, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, {0.0079955679815631, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, {-0.0000000000000000, -0.0595580964869841}, {-0.0412777487720041, 0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {-0.0399778398965743, 0.0000000000000000}, {-0.0000000000000000, 0.0503826670553068}, {0.0399778398953252, 0.0000000000000000}, {-0.0399778398953252, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, {0.0079955679815631, -0.0000000000000000}, {0.0000000000000000, 0.0503826670553068}, {0.0412777487720041, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, -0.0139850234834634}, {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0206388743912779, 0.0000000000000000}, {0.0000000000000000, -0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, -0.0000000000000000}, {-0.0000000000000000, -0.0139850234858467}, {0.0039977839895325, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0206388743912779, 0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0119933519636014, -0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0119933519636014, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {0.0119933519636014, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0251913335299711}, {-0.0119933519636014, -0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {-0.0119933519611033, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, 0.0139850234834634}, {0.0119933519685976, -0.0000000000000000}, {0.0119933519611033, -0.0000000000000000}, {-0.0000000000000000, -0.0251913335242470}, {-0.0119933519685976, 0.0000000000000000}, {0.0119933519636014, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0119933519636014, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, -0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; - std::vector> vkb0j = {{0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0251913335271091}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0412777487684869}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487720041}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595607437938820}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0595607437938820}, {-0.0000000000000000, 0.0412777487720041}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595580964730781}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0503826670509438}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0503826670509438}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0595580964869841}, {-0.0000000000000000, 0.0412777487720041}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0503826670553068}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0503826670553068}, {-0.0000000000000000, 0.0412777487720041}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0079955679815631}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519636014}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0251913335299711}, {0.0000000000000000, -0.0119933519636014}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0251913335242470}, {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, -0.0000000000000000}, {0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0251913335271091}, {0.0119933519685976, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {0.0039977839895325, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0119933519685976, 0.0000000000000000}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0251913335271091}, {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0206388743877607, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, -0.0279700469621601}, {-0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0412777487720041, 0.0000000000000000}, {0.0000000000000000, -0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595607437938820}, {-0.0399778398965743, -0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, {-0.0399778398953252, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, {-0.0000000000000000, -0.0279700469645434}, {0.0399778398953252, -0.0000000000000000}, {-0.0000000000000000, -0.0595607437938820}, {-0.0412777487720041, 0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595580964730781}, {-0.0399778398965743, -0.0000000000000000}, {0.0079955679815631, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0412777487684869, -0.0000000000000000}, {-0.0000000000000000, 0.0503826670509438}, {-0.0079955679815631, -0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {0.0399778398953252, 0.0000000000000000}, {-0.0399778398953252, 0.0000000000000000}, {-0.0000000000000000, 0.0503826670509438}, {0.0399778398965743, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, {-0.0399778398965743, -0.0000000000000000}, {-0.0079955679815631, -0.0000000000000000}, {-0.0000000000000000, 0.0251913335271091}, {0.0399778398965743, 0.0000000000000000}, {0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, {0.0399778398878310, -0.0000000000000000}, {-0.0000000000000000, -0.0279700469645434}, {-0.0000000000000000, -0.0279700469645434}, {-0.0079955679815631, 0.0000000000000000}, {-0.0399778398878310, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, {0.0079955679815631, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, {-0.0000000000000000, -0.0595580964869841}, {-0.0412777487720041, 0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {-0.0399778398965743, 0.0000000000000000}, {-0.0000000000000000, 0.0503826670553068}, {0.0399778398953252, 0.0000000000000000}, {-0.0399778398953252, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, {0.0079955679815631, -0.0000000000000000}, {0.0000000000000000, 0.0503826670553068}, {0.0412777487720041, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, -0.0139850234834634}, {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0206388743912779, 0.0000000000000000}, {0.0000000000000000, -0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, -0.0000000000000000}, {-0.0000000000000000, -0.0139850234858467}, {0.0039977839895325, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0206388743912779, 0.0000000000000000}, {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0119933519636014, -0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0119933519636014, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {0.0119933519636014, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0251913335299711}, {-0.0119933519636014, -0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, {-0.0119933519611033, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, 0.0139850234834634}, {0.0119933519685976, -0.0000000000000000}, {0.0119933519611033, -0.0000000000000000}, {-0.0000000000000000, -0.0251913335242470}, {-0.0119933519685976, 0.0000000000000000}, {0.0119933519636014, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0119933519636014, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, -0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; - std::vector> vkb1 = {{0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; - std::vector> vkb2 = {{-0.1381930863244145, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {0.0000000086426771, -0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0661391041210523}, {-0.0000000000000000, 0.0016778554224101}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0661391041210523}, {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0661391041210523}, {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0016778554224101}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0016778554224101}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0661391041210523}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, -0.0447433475348149}, {-0.0000000000000000, 0.1119530873895942}, {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0171567560732830}, {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0661391041210523}, {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0016778554224101}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0661391041210523}, {0.0000000000000000, -0.0447433475348149}, {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, {0.0000000000000000, -0.0447433475348149}, {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.1381930863244145, -0.0000000000000000}, {-0.0000000000000000, -0.0972917790072033}, {0.0000000086426771, -0.0000000000000000}, {-0.0000000000000000, 0.0972917790072033}, {0.1381930863244145, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.0000000000000000, 0.0972917790072033}, {0.1089083477794440, 0.0000000000000000}, {0.0000000000000000, -0.1382542313485365}, {0.1381930863244145, 0.0000000000000000}, {0.0000000000000000, -0.1382542313485365}, {0.0000000000000000, 0.1382542313485365}, {0.1381930863244145, -0.0000000000000000}, {0.0000000000000000, 0.1382542313485365}, {0.1089083477794440, -0.0000000000000000}, {-0.0000000000000000, -0.0972917790072033}, {-0.1334606271797373, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, {-0.0000000000000000, 0.0972917790072033}, {0.1089083477794440, 0.0000000000000000}, {0.0000000000000000, -0.1382542313485365}, {-0.0000000000000000, 0.1382542313485365}, {0.1089083477794440, 0.0000000000000000}, {0.0000000000000000, -0.0972917790072033}, {-0.1334606271797373, -0.0000000000000000}, {0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, -0.0000000000000000}, {-0.0000000000000000, 0.1382542313485365}, {-0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, {-0.0000000000000000, 0.1382542313485365}, {0.1381930863244145, 0.0000000000000000}, {0.0000000000000000, -0.1382542313485365}, {0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, -0.0000000000000000}, {-0.0000000000000000, 0.1382542313485365}, {-0.0000000000000000, 0.1382542313485365}, {0.1381930863244145, 0.0000000000000001}, {0.0000000000000000, 0.1382542313485365}, {0.1381930863244145, -0.0000000000000000}, {0.1381930863244145, -0.0000000000000001}, {-0.0000000000000000, -0.1382542313485365}, {-0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, {0.0000000000000000, 0.1382542313485365}, {0.0000000000000000, 0.1382542313485365}, {0.1089083477794440, -0.0000000000000000}, {-0.0000000000000000, -0.0972917790072033}, {-0.1334606271797373, 0.0000000000000000}, {-0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, {-0.0000000000000000, 0.1382542313485365}, {-0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, {0.0000000000000000, 0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, {0.0000000000000000, 0.0972917790072033}, {0.1089083477794440, -0.0000000000000000}, {-0.0000000000000000, -0.1382542313485365}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0054385813505070}, {-0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0447433475348149, -0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, 0.0000000000000000}, {-0.0447433475348149, -0.0000000000000000}, {-0.0000000000000000, 0.0661391041210523}, {-0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, {-0.0016778554224101, -0.0000000000000000}, {-0.0016778554224101, 0.0000000000000000}, {0.0000000000000000, 0.0054385813505070}, {-0.0016778554224101, 0.0000000000000000}, {-0.0000000000000000, -0.0661391041210523}, {-0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, {0.0000000000000000, -0.0171567560732830}, {0.0016778554224101, 0.0000000000000000}, {0.0016778554224101, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, {0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, -0.0000000000000000}, {0.0005592851408034, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0005592851408034, -0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0171567560732830}, {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, -0.0171567560732830}, {0.0016778554224101, 0.0000000000000000}, {0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0171567560732830}, {0.0447433475348149, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0054385813505070}, {-0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0447433475348149, -0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0171567560732830}, {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, 0.0000000000000000}, {0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0171567560732830}, {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, {-0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, -0.0661391041210523}, {-0.0447433475348149, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0016778554224101, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, 0.0000000000000000}, {0.0016778554224101, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, {-0.0016778554224101, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, -0.0054385813505070}, {-0.0016778554224101, 0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, {0.0016778554224101, -0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0171567560732830}, {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, {0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, 0.0661391041210523}, {-0.0016778554224101, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, {0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, 0.1119530873895942}, {0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, -0.0171567560732830}, {-0.0447433475348149, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, {-0.0005592851408034, -0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0661391041210523}, {0.0016778554224101, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0447433475348149, -0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0016778554224101, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0016778554224101, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, {-0.0016778554224101, -0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, {0.0016778554224101, -0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, -0.0054385813505070}, {-0.0005592851408034, 0.0000000000000000}, {-0.0016778554224101, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, {0.0005592851408034, -0.0000000000000000}, {0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, 0.0661391041210523}, {0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.0016778554224101, 0.0000000000000000}, {0.0000000000000000, -0.0171567560732830}, {0.0005592851408034, 0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, {-0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; + std::vector> vkb + = {{0.1959277889216247, 0.0000000000000000}, {0.3292263195311197, 0.0000000000000000}, + {0.3833320420712772, -0.0000000000000000}, {0.3292263195311197, -0.0000000000000000}, + {0.1959277889216247, -0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.3292263195311197, -0.0000000000000000}, {0.3121883316125419, -0.0000000000000000}, + {0.2084900583919441, -0.0000000000000000}, {0.1959277889216247, -0.0000000000000000}, + {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, + {0.1959277889216247, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, + {0.3121883316125419, 0.0000000000000000}, {0.3292263195311197, 0.0000000000000000}, + {0.2495383154917130, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.3292263195311197, -0.0000000000000000}, {0.3121883316125419, -0.0000000000000000}, + {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, + {0.3121883316125419, -0.0000000000000000}, {0.3292263195311197, -0.0000000000000000}, + {0.2495383154917130, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, + {0.2495383154917130, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.1959277889216247, -0.0000000000000000}, + {0.2084900583919441, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, + {0.2495383154917130, -0.0000000000000000}, {0.2084900583919441, -0.0000000000000000}, + {0.2084900583919441, -0.0000000000000000}, {0.1959277889216247, -0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.1959277889216247, 0.0000000000000000}, + {0.1959277889216247, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, + {0.3121883316125419, 0.0000000000000000}, {0.3292263195311197, 0.0000000000000000}, + {0.2495383154917130, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, + {0.2495383154917130, 0.0000000000000000}, {0.2084900583919441, 0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.3292263195311197, 0.0000000000000000}, {0.3121883316125419, 0.0000000000000000}, + {0.2084900583919441, 0.0000000000000000}, {0.1588244263337111, 0.0000000000000000}, + {0.2318163335599036, 0.0000000000000000}, {0.2916492898304017, 0.0000000000000000}, + {0.2605982137021648, 0.0000000000000000}, {0.1588244263337111, 0.0000000000000000}, + {0.2605982137021648, 0.0000000000000000}, {0.3602727707771828, 0.0000000000000000}, + {0.3602727707771828, 0.0000000000000000}, {0.2605982137021648, 0.0000000000000000}, + {0.2768133075187308, 0.0000000000000000}, {0.2117172164531642, 0.0000000000000000}, + {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0619166231573246}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, + {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1191161929559753}, + {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.0839101408927066}, + {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.1319268716568682}, + {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.1319268716568682}, + {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.0619166231573246}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, + {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, + {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.1319268716568682}, + {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1007653341101891}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0839101408927066}, + {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.0839101408927066}, + {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, + {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.1319268716568682}, + {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.1007653341101891}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1007653341101891}, + {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.1074700120541082}, + {-0.0000000000000000, 0.1429603824496169}, {-0.0000000000000000, 0.1132688983356121}, + {-0.0000000000000000, 0.0520569223767372}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.1041138447534744}, {-0.0000000000000000, 0.0660471629375616}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0520569223767372}, + {0.0000000000000000, -0.0680879572845678}, {0.0000000000000000, -0.0667352877462083}, + {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.0619166231573246}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, + {0.0000000000000000, -0.0839101408927066}, {-0.0000000000000000, 0.1007653341101892}, + {-0.0000000000000000, 0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, + {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, -0.0839101408927066}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, + {0.0000000000000000, -0.1007653341101892}, {-0.0000000000000000, 0.1007653341101892}, + {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.1319268716568682}, + {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.0619166231573246}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1319268716568682}, + {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1319268716568682}, + {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0839101408927066}, + {0.0000000000000000, -0.0439756238856228}, {0.0000000000000000, -0.0839101408927066}, + {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.1319268716568682}, + {0.0000000000000000, -0.0439756238856228}, {0.0000000000000000, -0.1007653341101892}, + {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0619166231573246}, + {0.0000000000000000, -0.1007653341101892}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.1007653341101892}, + {0.0000000000000000, -0.1319268716568682}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, -0.1191161929559753}, + {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.0716466747027388}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0566344491678060}, + {0.0000000000000000, -0.1041138447534745}, {0.0000000000000000, -0.1074700120541082}, + {-0.0000000000000000, 0.0520569223767372}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0660471629375617}, {0.0000000000000000, -0.1041138447534745}, + {0.0000000000000000, -0.0953231401983950}, {0.0000000000000000, -0.1112254795770137}, + {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0619166231573246}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0619166231573246}, + {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, -0.1007653341101892}, + {0.0000000000000000, -0.0619166231573246}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.0839101408927066}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, -0.0439756238856227}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0619166231573246}, + {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0619166231573246}, {-0.0000000000000000, 0.1191161929559753}, + {-0.0000000000000000, 0.1319268716568682}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0619166231573246}, + {-0.0000000000000000, 0.1007653341101892}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.1007653341101892}, + {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0839101408927066}, + {-0.0000000000000000, 0.1319268716568682}, {-0.0000000000000000, 0.0439756238856227}, + {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.1319268716568682}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0839101408927066}, + {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.0839101408927066}, + {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, -0.1319268716568682}, {0.0000000000000000, -0.1007653341101892}, + {0.0000000000000000, -0.0439756238856227}, {0.0000000000000000, -0.1319268716568682}, + {0.0000000000000000, -0.1191161929559753}, {0.0000000000000000, -0.0619166231573246}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.1319268716568682}, + {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.0439756238856227}, + {0.0000000000000000, -0.0439756238856227}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0439756238856227}, {0.0000000000000000, -0.1007653341101892}, + {0.0000000000000000, -0.0619166231573246}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0439756238856227}, {-0.0000000000000000, 0.0537350060270541}, + {0.0000000000000000, -0.0238267304082695}, {-0.0000000000000000, 0.0283172245839030}, + {-0.0000000000000000, 0.0780853835651058}, {-0.0000000000000000, 0.0895583433784236}, + {0.0000000000000000, -0.0780853835651058}, {0.0000000000000000, -0.0330235814687808}, + {-0.0000000000000000, 0.0330235814687808}, {-0.0000000000000000, 0.0780853835651058}, + {-0.0000000000000000, 0.0680879572845679}, {-0.0000000000000000, 0.0667352877462083}, + {-0.1959277889216247, 0.0000000000000000}, {0.0000000000000000, 0.3292263195311197}, + {0.3833320420712772, -0.0000000000000000}, {0.0000000000000000, -0.3292263195311197}, + {-0.1959277889216247, -0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.0000000000000000, -0.3292263195311197}, {-0.3121883316125419, -0.0000000000000000}, + {-0.0000000000000000, 0.2084900583919441}, {-0.1959277889216247, -0.0000000000000000}, + {-0.0000000000000000, 0.2084900583919441}, {-0.0000000000000000, -0.2084900583919441}, + {-0.1959277889216247, 0.0000000000000000}, {-0.0000000000000000, -0.2084900583919441}, + {-0.3121883316125419, 0.0000000000000000}, {0.0000000000000000, 0.3292263195311197}, + {0.2495383154917130, 0.0000000000000000}, {0.2495383154917130, 0.0000000000000000}, + {0.0000000000000000, -0.3292263195311197}, {-0.3121883316125419, -0.0000000000000000}, + {-0.0000000000000000, 0.2084900583919441}, {0.0000000000000000, -0.2084900583919441}, + {-0.3121883316125419, -0.0000000000000000}, {-0.0000000000000001, 0.3292263195311197}, + {0.2495383154917130, 0.0000000000000001}, {-0.0000000000000000, 0.2084900583919441}, + {0.2495383154917130, 0.0000000000000001}, {0.0000000000000001, -0.2084900583919441}, + {0.0000000000000000, 0.2084900583919441}, {0.2495383154917130, 0.0000000000000000}, + {0.0000000000000000, -0.2084900583919441}, {-0.1959277889216247, -0.0000000000000000}, + {-0.0000000000000000, 0.2084900583919441}, {-0.0000000000000000, 0.2084900583919441}, + {0.2495383154917130, 0.0000000000000001}, {0.0000000000000001, -0.2084900583919441}, + {0.0000000000000001, -0.2084900583919441}, {-0.1959277889216247, -0.0000000000000001}, + {-0.0000000000000000, -0.2084900583919441}, {-0.1959277889216247, 0.0000000000000000}, + {-0.1959277889216247, 0.0000000000000001}, {0.0000000000000001, 0.2084900583919441}, + {0.0000000000000001, 0.2084900583919441}, {0.2495383154917130, -0.0000000000000001}, + {-0.0000000000000000, -0.2084900583919441}, {-0.0000000000000000, -0.2084900583919441}, + {-0.3121883316125419, 0.0000000000000000}, {0.0000000000000000, 0.3292263195311197}, + {0.2495383154917130, 0.0000000000000000}, {0.0000000000000000, 0.2084900583919441}, + {0.2495383154917130, 0.0000000000000000}, {0.0000000000000000, -0.2084900583919441}, + {0.0000000000000001, 0.2084900583919441}, {0.2495383154917130, -0.0000000000000001}, + {-0.0000000000000000, -0.2084900583919441}, {0.2495383154917130, -0.0000000000000001}, + {-0.0000000000000001, -0.3292263195311197}, {-0.3121883316125419, 0.0000000000000000}, + {0.0000000000000000, 0.2084900583919441}, {0.1123058288786304, -0.1123058288786304}, + {0.1639189014500104, -0.1639189014500105}, {-0.2062271905673179, -0.2062271905673178}, + {-0.1842707640739018, 0.1842707640739018}, {0.1123058288786304, 0.1123058288786304}, + {-0.1842707640739018, -0.1842707640739018}, {-0.2547513192934127, 0.2547513192934126}, + {0.2547513192934126, 0.2547513192934127}, {0.1842707640739018, -0.1842707640739018}, + {0.1059318666456010, -0.2557421491433081}, {0.1497066794479725, -0.1497066794479725}, + {-0.0000000000000000, -0.0839101408927066}, {-0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0619166231573246, -0.0000000000000000}, + {-0.0000000000000000, 0.0839101408927066}, {0.0000000000000000, 0.0000000000000000}, + {-0.0619166231573246, -0.0000000000000000}, {-0.0000000000000000, 0.1191161929559753}, + {0.1319268716568682, 0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, + {0.1319268716568682, 0.0000000000000000}, {0.1319268716568682, -0.0000000000000000}, + {-0.0000000000000000, -0.0839101408927066}, {0.1319268716568682, -0.0000000000000000}, + {-0.0000000000000000, -0.1191161929559753}, {-0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, + {0.0619166231573246, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0439756238856227, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101891}, {0.0439756238856227, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101891}, {-0.1319268716568682, -0.0000000000000000}, + {-0.1319268716568682, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, + {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, + {-0.0439756238856227, -0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, + {-0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, + {-0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, 0.0839101408927066}, + {-0.0000000000000000, -0.0839101408927066}, {-0.0439756238856227, 0.0000000000000000}, + {-0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0439756238856227, 0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101891}, {0.0439756238856227, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101891}, {-0.1319268716568682, -0.0000000000000000}, + {-0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, 0.1007653341101891}, + {0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, 0.1007653341101891}, + {0.0619166231573246, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0439756238856227, 0.0000000000000000}, {0.0759927742976599, 0.0759927742976599}, + {0.1010882558711464, 0.1010882558711464}, {0.0800932061106409, -0.0800932061106410}, + {-0.0368098028202926, -0.0368098028202926}, {0.0000000000000000, 0.0000000000000000}, + {0.0736196056405852, -0.0736196056405852}, {-0.0467023967912827, -0.0467023967912827}, + {0.0000000000000000, 0.0000000000000000}, {-0.0368098028202926, -0.0368098028202926}, + {-0.0629050701457150, -0.0260561331963860}, {-0.0471889745097794, -0.0471889745097794}, + {-0.0000000000000000, -0.0839101408927066}, {-0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0619166231573246, -0.0000000000000000}, + {-0.0000000000000000, 0.0839101408927066}, {-0.0000000000000000, 0.1007653341101892}, + {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, + {-0.0439756238856227, -0.0000000000000000}, {-0.0439756238856227, 0.0000000000000000}, + {0.0000000000000000, 0.0839101408927066}, {0.0439756238856227, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101892}, {-0.0000000000000000, 0.1007653341101892}, + {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0439756238856227, 0.0000000000000000}, {0.1319268716568682, 0.0000000000000000}, + {0.0000000000000000, -0.1191161929559753}, {-0.0619166231573246, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.1319268716568682, -0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101892}, {0.0439756238856227, 0.0000000000000000}, + {-0.0439756238856227, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, + {-0.0439756238856227, -0.0000000000000000}, {-0.1319268716568682, -0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101892}, {0.0439756238856227, 0.0000000000000000}, + {0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, + {-0.0439756238856228, 0.0000000000000000}, {0.0000000000000000, 0.0839101408927066}, + {0.0000000000000000, 0.0839101408927066}, {0.1319268716568682, -0.0000000000000000}, + {0.0439756238856228, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, + {-0.1319268716568682, 0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, + {-0.0000000000000000, -0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101892}, {-0.0439756238856227, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, + {0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, + {-0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, 0.1191161929559753}, + {0.1319268716568682, 0.0000000000000000}, {-0.0506618495317733, -0.0506618495317733}, + {0.0000000000000000, 0.0000000000000000}, {-0.0400466030553205, 0.0400466030553205}, + {0.0736196056405853, 0.0736196056405852}, {0.0759927742976599, -0.0759927742976599}, + {0.0368098028202926, -0.0368098028202926}, {-0.0000000000000000, -0.0000000000000000}, + {0.0467023967912827, -0.0467023967912827}, {-0.0736196056405852, -0.0736196056405853}, + {-0.0880670982040010, -0.0364785864749405}, {-0.0786482908496323, -0.0786482908496323}, + {0.0000000000000000, 0.0839101408927066}, {0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0619166231573246, 0.0000000000000000}, + {0.0000000000000000, -0.0839101408927066}, {0.0000000000000000, -0.1007653341101892}, + {-0.0619166231573246, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, 0.0839101408927066}, + {0.0439756238856227, 0.0000000000000000}, {0.0439756238856227, -0.0000000000000000}, + {-0.0000000000000000, -0.0839101408927066}, {-0.0439756238856227, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0619166231573246, 0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0000000000000000}, + {0.0619166231573246, 0.0000000000000000}, {0.0000000000000000, -0.1191161929559753}, + {-0.1319268716568682, -0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0619166231573246, -0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101892}, {0.0439756238856227, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0439756238856227, 0.0000000000000000}, + {-0.0439756238856227, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, + {0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, + {-0.1319268716568682, -0.0000000000000000}, {-0.0439756238856227, -0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101892}, {0.1319268716568682, 0.0000000000000000}, + {0.0439756238856227, 0.0000000000000000}, {0.0000000000000000, -0.0839101408927066}, + {-0.1319268716568682, 0.0000000000000000}, {0.0000000000000000, 0.0839101408927066}, + {0.0000000000000000, 0.0839101408927066}, {0.0439756238856227, -0.0000000000000000}, + {0.1319268716568682, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, + {-0.0439756238856227, 0.0000000000000000}, {-0.1319268716568682, 0.0000000000000000}, + {0.0000000000000000, 0.1191161929559753}, {0.0619166231573246, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.1319268716568682, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101892}, {-0.0439756238856227, -0.0000000000000000}, + {0.0439756238856227, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0439756238856227, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101892}, + {-0.0619166231573246, 0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, + {-0.0439756238856227, 0.0000000000000000}, {0.0379963871488300, 0.0379963871488300}, + {-0.0168480426451911, -0.0168480426451910}, {0.0200233015276602, -0.0200233015276602}, + {-0.0552147042304389, -0.0552147042304389}, {-0.0633273119147166, 0.0633273119147166}, + {-0.0552147042304389, 0.0552147042304389}, {0.0233511983956413, 0.0233511983956413}, + {-0.0233511983956413, 0.0233511983956413}, {0.0552147042304389, 0.0552147042304389}, + {0.0629050701457150, 0.0260561331963861}, {0.0471889745097794, 0.0471889745097794}}; + std::vector> vkb0i + = {{0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, + {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0119933519685976}, + {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, + {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, + {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0119933519685976}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, + {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, + {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0119933519685976}, + {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0039977839895325}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0251913335271091}, {-0.0000000000000000, 0.0039977839895325}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, + {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0251913335271091}, + {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0412777487684869}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487720041}, + {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, + {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595607437938820}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, + {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0399778398953252}, + {-0.0000000000000000, 0.0595607437938820}, {-0.0000000000000000, 0.0412777487720041}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, + {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595580964730781}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487684869}, + {-0.0000000000000000, 0.0503826670509438}, {-0.0000000000000000, 0.0079955679815631}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398953252}, + {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0503826670509438}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, + {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0279700469621601}, + {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0279700469645434}, + {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0079955679815631}, + {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0251913335242470}, + {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0595580964869841}, {-0.0000000000000000, 0.0412777487720041}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0503826670553068}, {-0.0000000000000000, 0.0399778398953252}, + {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0251913335242470}, + {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0503826670553068}, + {-0.0000000000000000, 0.0412777487720041}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0079955679815631}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, + {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, + {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0139850234834634}, + {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0039977839895325}, + {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0039977839895325}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, + {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0119933519636014}, {-0.0000000000000000, 0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0119933519636014}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0251913335299711}, {0.0000000000000000, -0.0119933519636014}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0251913335242470}, + {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0119933519636014}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0139850234834634}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, + {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, + {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, + {-0.0119933519685976, -0.0000000000000000}, {0.0119933519685976, -0.0000000000000000}, + {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, + {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0039977839895325, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {-0.0000000000000000, 0.0251913335271091}, {0.0119933519685976, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0039977839895325, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, + {0.0039977839895325, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, + {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, + {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, + {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0119933519685976, 0.0000000000000000}, {-0.0039977839895325, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0251913335271091}, {-0.0039977839895325, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0251913335271091}, + {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0206388743877607, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, -0.0279700469621601}, {-0.0412777487684869, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0412777487720041, 0.0000000000000000}, + {0.0000000000000000, -0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, + {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595607437938820}, + {-0.0399778398965743, -0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, + {-0.0399778398953252, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, + {-0.0000000000000000, -0.0279700469645434}, {0.0399778398953252, -0.0000000000000000}, + {-0.0000000000000000, -0.0595607437938820}, {-0.0412777487720041, 0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, + {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595580964730781}, + {-0.0399778398965743, -0.0000000000000000}, {0.0079955679815631, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0412777487684869, -0.0000000000000000}, + {-0.0000000000000000, 0.0503826670509438}, {-0.0079955679815631, -0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {0.0399778398953252, 0.0000000000000000}, + {-0.0399778398953252, 0.0000000000000000}, {-0.0000000000000000, 0.0503826670509438}, + {0.0399778398965743, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, + {-0.0399778398965743, -0.0000000000000000}, {-0.0079955679815631, -0.0000000000000000}, + {-0.0000000000000000, 0.0251913335271091}, {0.0399778398965743, 0.0000000000000000}, + {0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, + {0.0399778398878310, -0.0000000000000000}, {-0.0000000000000000, -0.0279700469645434}, + {-0.0000000000000000, -0.0279700469645434}, {-0.0079955679815631, 0.0000000000000000}, + {-0.0399778398878310, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, + {0.0079955679815631, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, + {-0.0000000000000000, -0.0595580964869841}, {-0.0412777487720041, 0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0399778398965743, 0.0000000000000000}, + {-0.0000000000000000, 0.0503826670553068}, {0.0399778398953252, 0.0000000000000000}, + {-0.0399778398953252, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, + {0.0079955679815631, -0.0000000000000000}, {0.0000000000000000, 0.0503826670553068}, + {0.0412777487720041, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, -0.0139850234834634}, {-0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0206388743912779, 0.0000000000000000}, + {0.0000000000000000, -0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, + {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0039977839895325, -0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, + {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, -0.0000000000000000}, + {-0.0000000000000000, -0.0139850234858467}, {0.0039977839895325, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0206388743912779, 0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, + {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0119933519636014, -0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, + {0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0119933519636014, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, + {0.0119933519636014, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, + {0.0000000000000000, -0.0251913335299711}, {-0.0119933519636014, -0.0000000000000000}, + {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, + {-0.0119933519611033, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, + {0.0000000000000000, 0.0139850234834634}, {0.0119933519685976, -0.0000000000000000}, + {0.0119933519611033, -0.0000000000000000}, {-0.0000000000000000, -0.0251913335242470}, + {-0.0119933519685976, 0.0000000000000000}, {0.0119933519636014, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0119933519636014, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, + {0.0039977839895325, -0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, + {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; + std::vector> vkb0j + = {{0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, + {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0119933519685976}, + {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, + {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, + {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0119933519685976}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0039977839895325}, + {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0139850234834634}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0139850234834634}, + {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0119933519685976}, + {-0.0000000000000000, 0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0039977839895325}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0251913335271091}, {-0.0000000000000000, 0.0039977839895325}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0119933519685976}, + {-0.0000000000000000, 0.0119933519685976}, {-0.0000000000000000, 0.0251913335271091}, + {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0279700469621601}, {-0.0000000000000000, 0.0412777487684869}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487720041}, + {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, + {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595607437938820}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, + {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0399778398953252}, + {-0.0000000000000000, 0.0595607437938820}, {-0.0000000000000000, 0.0412777487720041}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, + {-0.0000000000000000, 0.0412777487684869}, {-0.0000000000000000, 0.0595580964730781}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0412777487684869}, + {-0.0000000000000000, 0.0503826670509438}, {-0.0000000000000000, 0.0079955679815631}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398953252}, + {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0503826670509438}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0279700469621601}, + {-0.0000000000000000, 0.0399778398965743}, {-0.0000000000000000, 0.0079955679815631}, + {-0.0000000000000000, 0.0251913335271091}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0279700469621601}, + {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0279700469645434}, + {-0.0000000000000000, 0.0279700469645434}, {-0.0000000000000000, 0.0079955679815631}, + {-0.0000000000000000, 0.0399778398878310}, {-0.0000000000000000, 0.0251913335242470}, + {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0595580964869841}, {-0.0000000000000000, 0.0412777487720041}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0399778398965743}, + {-0.0000000000000000, 0.0503826670553068}, {-0.0000000000000000, 0.0399778398953252}, + {-0.0000000000000000, 0.0399778398953252}, {-0.0000000000000000, 0.0251913335242470}, + {-0.0000000000000000, 0.0079955679815631}, {-0.0000000000000000, 0.0503826670553068}, + {-0.0000000000000000, 0.0412777487720041}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0079955679815631}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0139850234834634}, {-0.0000000000000000, 0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, + {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, + {-0.0000000000000000, 0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0139850234834634}, + {-0.0000000000000000, 0.0039977839895325}, {-0.0000000000000000, 0.0039977839895325}, + {-0.0000000000000000, 0.0139850234858467}, {-0.0000000000000000, 0.0039977839895325}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0206388743912779}, + {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0119933519636014}, {-0.0000000000000000, 0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519685976}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0119933519636014}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0119933519636014}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0251913335299711}, {0.0000000000000000, -0.0119933519636014}, + {0.0000000000000000, -0.0119933519685976}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0139850234834634}, + {0.0000000000000000, -0.0139850234834634}, {0.0000000000000000, -0.0119933519685976}, + {0.0000000000000000, -0.0119933519611033}, {0.0000000000000000, -0.0251913335242470}, + {0.0000000000000000, -0.0119933519685976}, {-0.0000000000000000, 0.0119933519636014}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0206388743877607}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0119933519636014}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0039977839895325}, + {0.0000000000000000, -0.0039977839895325}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0206388743877607}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0119933519685976}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0139850234834634}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, + {-0.0000000000000000, 0.0139850234834634}, {0.0000000000000000, 0.0000000000000000}, + {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, + {-0.0119933519685976, -0.0000000000000000}, {0.0119933519685976, -0.0000000000000000}, + {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0251913335271091}, + {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0039977839895325, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0206388743877607, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {-0.0000000000000000, 0.0251913335271091}, {0.0119933519685976, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0039977839895325, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, + {0.0039977839895325, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0039977839895325, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, + {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, + {-0.0000000000000000, -0.0139850234834634}, {-0.0119933519685976, 0.0000000000000000}, + {-0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0119933519685976, 0.0000000000000000}, {-0.0039977839895325, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0251913335271091}, {-0.0039977839895325, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0251913335271091}, + {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0206388743877607, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, -0.0279700469621601}, {-0.0412777487684869, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0412777487720041, 0.0000000000000000}, + {0.0000000000000000, -0.0279700469645434}, {-0.0000000000000000, 0.0251913335271091}, + {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595607437938820}, + {-0.0399778398965743, -0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, + {-0.0399778398953252, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, + {-0.0000000000000000, -0.0279700469645434}, {0.0399778398953252, -0.0000000000000000}, + {-0.0000000000000000, -0.0595607437938820}, {-0.0412777487720041, 0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0000000000000000, 0.0251913335242470}, + {0.0412777487684869, 0.0000000000000000}, {0.0000000000000000, -0.0595580964730781}, + {-0.0399778398965743, -0.0000000000000000}, {0.0079955679815631, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0412777487684869, -0.0000000000000000}, + {-0.0000000000000000, 0.0503826670509438}, {-0.0079955679815631, -0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {0.0399778398953252, 0.0000000000000000}, + {-0.0399778398953252, 0.0000000000000000}, {-0.0000000000000000, 0.0503826670509438}, + {0.0399778398965743, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, + {-0.0399778398965743, -0.0000000000000000}, {-0.0079955679815631, -0.0000000000000000}, + {-0.0000000000000000, 0.0251913335271091}, {0.0399778398965743, 0.0000000000000000}, + {0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, -0.0279700469621601}, + {0.0399778398878310, -0.0000000000000000}, {-0.0000000000000000, -0.0279700469645434}, + {-0.0000000000000000, -0.0279700469645434}, {-0.0079955679815631, 0.0000000000000000}, + {-0.0399778398878310, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, + {0.0079955679815631, -0.0000000000000000}, {0.0399778398965743, -0.0000000000000000}, + {-0.0000000000000000, -0.0595580964869841}, {-0.0412777487720041, 0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {-0.0399778398965743, 0.0000000000000000}, + {-0.0000000000000000, 0.0503826670553068}, {0.0399778398953252, 0.0000000000000000}, + {-0.0399778398953252, 0.0000000000000000}, {0.0000000000000000, 0.0251913335242470}, + {0.0079955679815631, -0.0000000000000000}, {0.0000000000000000, 0.0503826670553068}, + {0.0412777487720041, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0079955679815631, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, -0.0139850234834634}, {-0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0206388743912779, 0.0000000000000000}, + {0.0000000000000000, -0.0139850234858467}, {-0.0000000000000000, 0.0251913335299711}, + {0.0206388743877607, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0039977839895325, -0.0000000000000000}, {0.0000000000000000, -0.0139850234834634}, + {-0.0039977839895325, -0.0000000000000000}, {0.0039977839895325, -0.0000000000000000}, + {-0.0000000000000000, -0.0139850234858467}, {0.0039977839895325, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0206388743912779, 0.0000000000000000}, + {-0.0000000000000000, 0.0251913335242470}, {0.0000000000000000, 0.0000000000000000}, + {-0.0206388743877607, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0119933519636014, -0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0119933519685976, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, + {0.0039977839895325, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0119933519636014, 0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, + {0.0119933519636014, 0.0000000000000000}, {0.0119933519685976, 0.0000000000000000}, + {0.0000000000000000, -0.0251913335299711}, {-0.0119933519636014, -0.0000000000000000}, + {-0.0119933519685976, -0.0000000000000000}, {-0.0000000000000000, 0.0139850234834634}, + {-0.0119933519611033, 0.0000000000000000}, {0.0000000000000000, 0.0139850234834634}, + {0.0000000000000000, 0.0139850234834634}, {0.0119933519685976, -0.0000000000000000}, + {0.0119933519611033, -0.0000000000000000}, {-0.0000000000000000, -0.0251913335242470}, + {-0.0119933519685976, 0.0000000000000000}, {0.0119933519636014, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0206388743877607, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0119933519636014, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0039977839895325, -0.0000000000000000}, + {0.0039977839895325, -0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, + {0.0119933519685976, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0206388743877607, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0119933519685976, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; + std::vector> vkb1 + = {{0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; + std::vector> vkb2 + = {{-0.1381930863244145, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, + {0.0000000086426771, -0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, + {-0.1381930863244145, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.0972917790072033, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1381930863244145, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1089083477794440, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, + {-0.1334606271797373, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.0972917790072033, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1089083477794440, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, + {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1381930863244145, 0.0000000000000000}, + {-0.1381930863244145, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1089083477794440, 0.0000000000000000}, {-0.0972917790072033, 0.0000000000000000}, + {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1334606271797373, 0.0000000000000000}, {-0.1382542313485365, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.0972917790072033, 0.0000000000000000}, {-0.1089083477794440, 0.0000000000000000}, + {-0.1382542313485365, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0447433475348149}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, + {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0661391041210523}, + {-0.0000000000000000, 0.0016778554224101}, {-0.0000000000000000, 0.0054385813505070}, + {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0016778554224101}, + {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0016778554224101}, + {-0.0000000000000000, 0.0661391041210523}, {-0.0000000000000000, 0.0447433475348149}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, + {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, + {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, + {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0016778554224101}, + {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0171567560732830}, + {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, + {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, + {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, + {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, + {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, + {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, + {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0016778554224101}, + {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0171567560732830}, + {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0171567560732830}, + {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0447433475348149}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, + {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0171567560732830}, + {-0.0000000000000000, 0.0447433475348149}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, + {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0005592851408034}, + {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, -0.0005592851408034}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, + {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0171567560732830}, + {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0016778554224101}, + {-0.0000000000000000, 0.0661391041210523}, {-0.0000000000000000, 0.0447433475348149}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0016778554224101}, + {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, + {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0016778554224101}, + {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0054385813505070}, + {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, + {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0016778554224101}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, + {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0005592851408034}, + {-0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0447433475348149}, + {0.0000000000000000, -0.0171567560732830}, {0.0000000000000000, -0.0005592851408034}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0005592851408034}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, + {-0.0000000000000000, 0.0016778554224101}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, -0.0661391041210523}, + {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, -0.0447433475348149}, + {-0.0000000000000000, 0.1119530873895942}, {-0.0000000000000000, 0.0447433475348149}, + {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, -0.0171567560732830}, + {0.0000000000000000, -0.0447433475348149}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0054385813505070}, + {-0.0000000000000000, 0.0005592851408034}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0005592851408034}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0447433475348149}, + {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0447433475348149}, {-0.0000000000000000, 0.0661391041210523}, + {0.0000000000000000, -0.0016778554224101}, {-0.0000000000000000, 0.0005592851408034}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0447433475348149}, + {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0005592851408034}, + {0.0000000000000000, -0.0005592851408034}, {-0.0000000000000000, 0.0171567560732830}, + {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0054385813505070}, + {0.0000000000000000, -0.0016778554224101}, {0.0000000000000000, -0.0005592851408034}, + {-0.0000000000000000, 0.0171567560732830}, {0.0000000000000000, -0.0016778554224101}, + {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0054385813505070}, + {-0.0000000000000000, 0.0016778554224101}, {-0.0000000000000000, 0.0054385813505070}, + {-0.0000000000000000, 0.0054385813505070}, {-0.0000000000000000, 0.0005592851408034}, + {-0.0000000000000000, 0.0016778554224101}, {0.0000000000000000, -0.0171567560732830}, + {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0016778554224101}, + {0.0000000000000000, -0.0661391041210523}, {0.0000000000000000, -0.0447433475348149}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0016778554224101}, + {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0005592851408034}, + {-0.0000000000000000, 0.0005592851408034}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, -0.0171567560732830}, + {0.0000000000000000, -0.0447433475348149}, {-0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0005592851408034}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.1381930863244145, -0.0000000000000000}, {-0.0000000000000000, -0.0972917790072033}, + {0.0000000086426771, -0.0000000000000000}, {-0.0000000000000000, 0.0972917790072033}, + {0.1381930863244145, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.0000000000000000, 0.0972917790072033}, {0.1089083477794440, 0.0000000000000000}, + {0.0000000000000000, -0.1382542313485365}, {0.1381930863244145, 0.0000000000000000}, + {0.0000000000000000, -0.1382542313485365}, {0.0000000000000000, 0.1382542313485365}, + {0.1381930863244145, -0.0000000000000000}, {0.0000000000000000, 0.1382542313485365}, + {0.1089083477794440, -0.0000000000000000}, {-0.0000000000000000, -0.0972917790072033}, + {-0.1334606271797373, 0.0000000000000000}, {-0.1334606271797373, 0.0000000000000000}, + {-0.0000000000000000, 0.0972917790072033}, {0.1089083477794440, 0.0000000000000000}, + {0.0000000000000000, -0.1382542313485365}, {-0.0000000000000000, 0.1382542313485365}, + {0.1089083477794440, 0.0000000000000000}, {0.0000000000000000, -0.0972917790072033}, + {-0.1334606271797373, -0.0000000000000000}, {0.0000000000000000, -0.1382542313485365}, + {-0.1334606271797373, -0.0000000000000000}, {-0.0000000000000000, 0.1382542313485365}, + {-0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, + {-0.0000000000000000, 0.1382542313485365}, {0.1381930863244145, 0.0000000000000000}, + {0.0000000000000000, -0.1382542313485365}, {0.0000000000000000, -0.1382542313485365}, + {-0.1334606271797373, -0.0000000000000000}, {-0.0000000000000000, 0.1382542313485365}, + {-0.0000000000000000, 0.1382542313485365}, {0.1381930863244145, 0.0000000000000001}, + {0.0000000000000000, 0.1382542313485365}, {0.1381930863244145, -0.0000000000000000}, + {0.1381930863244145, -0.0000000000000001}, {-0.0000000000000000, -0.1382542313485365}, + {-0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, + {0.0000000000000000, 0.1382542313485365}, {0.0000000000000000, 0.1382542313485365}, + {0.1089083477794440, -0.0000000000000000}, {-0.0000000000000000, -0.0972917790072033}, + {-0.1334606271797373, 0.0000000000000000}, {-0.0000000000000000, -0.1382542313485365}, + {-0.1334606271797373, 0.0000000000000000}, {-0.0000000000000000, 0.1382542313485365}, + {-0.0000000000000000, -0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, + {0.0000000000000000, 0.1382542313485365}, {-0.1334606271797373, 0.0000000000000000}, + {0.0000000000000000, 0.0972917790072033}, {0.1089083477794440, -0.0000000000000000}, + {-0.0000000000000000, -0.1382542313485365}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0054385813505070}, {-0.0447433475348149, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0447433475348149, -0.0000000000000000}, + {0.0000000000000000, -0.0054385813505070}, {0.0000000000000000, 0.0000000000000000}, + {-0.0447433475348149, -0.0000000000000000}, {-0.0000000000000000, 0.0661391041210523}, + {-0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, + {-0.0016778554224101, -0.0000000000000000}, {-0.0016778554224101, 0.0000000000000000}, + {0.0000000000000000, 0.0054385813505070}, {-0.0016778554224101, 0.0000000000000000}, + {-0.0000000000000000, -0.0661391041210523}, {-0.0447433475348149, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, + {0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.0005592851408034, -0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, + {0.0000000000000000, -0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, + {0.0000000000000000, -0.0171567560732830}, {0.0016778554224101, 0.0000000000000000}, + {0.0016778554224101, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, + {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, + {0.0005592851408034, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, + {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, + {0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, + {0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, -0.0000000000000000}, + {0.0005592851408034, -0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.0005592851408034, -0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, + {0.0000000000000000, -0.0171567560732830}, {-0.0005592851408034, 0.0000000000000000}, + {0.0000000000000000, -0.0171567560732830}, {0.0016778554224101, 0.0000000000000000}, + {0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, 0.0171567560732830}, + {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0171567560732830}, + {0.0447433475348149, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0054385813505070}, {-0.0447433475348149, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0447433475348149, -0.0000000000000000}, + {0.0000000000000000, -0.0054385813505070}, {-0.0000000000000000, 0.0171567560732830}, + {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, + {0.0005592851408034, 0.0000000000000000}, {0.0005592851408034, -0.0000000000000000}, + {-0.0000000000000000, -0.0054385813505070}, {-0.0005592851408034, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, + {0.0000000000000000, -0.0171567560732830}, {-0.0000000000000000, 0.0171567560732830}, + {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {-0.0005592851408034, -0.0000000000000000}, {-0.0016778554224101, -0.0000000000000000}, + {0.0000000000000000, -0.0661391041210523}, {-0.0447433475348149, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0016778554224101, 0.0000000000000000}, + {-0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, + {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, + {0.0005592851408034, 0.0000000000000000}, {0.0016778554224101, 0.0000000000000000}, + {-0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, + {-0.0016778554224101, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, + {0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, + {-0.0000000000000000, -0.0054385813505070}, {-0.0016778554224101, 0.0000000000000000}, + {-0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, + {0.0016778554224101, -0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, + {-0.0000000000000000, -0.0000000000000000}, {0.0447433475348149, 0.0000000000000000}, + {0.0000000000000000, -0.0171567560732830}, {0.0005592851408034, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, + {-0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, + {0.0016778554224101, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, 0.0661391041210523}, + {-0.0016778554224101, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, -0.0054385813505070}, {0.0447433475348149, 0.0000000000000000}, + {-0.0000000000000000, 0.1119530873895942}, {0.0447433475348149, 0.0000000000000000}, + {-0.0000000000000000, 0.0054385813505070}, {0.0000000000000000, -0.0171567560732830}, + {-0.0447433475348149, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, -0.0054385813505070}, + {-0.0005592851408034, -0.0000000000000000}, {-0.0005592851408034, 0.0000000000000000}, + {0.0000000000000000, 0.0054385813505070}, {0.0005592851408034, -0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.0447433475348149, 0.0000000000000000}, + {-0.0000000000000000, 0.0171567560732830}, {-0.0000000000000000, 0.0000000000000000}, + {0.0447433475348149, 0.0000000000000000}, {0.0000000000000000, -0.0661391041210523}, + {0.0016778554224101, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0447433475348149, -0.0000000000000000}, + {-0.0000000000000000, 0.0171567560732830}, {-0.0005592851408034, -0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0005592851408034, -0.0000000000000000}, + {0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, 0.0171567560732830}, + {-0.0016778554224101, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, + {0.0016778554224101, 0.0000000000000000}, {0.0005592851408034, 0.0000000000000000}, + {-0.0000000000000000, 0.0171567560732830}, {-0.0016778554224101, -0.0000000000000000}, + {-0.0005592851408034, -0.0000000000000000}, {-0.0000000000000000, 0.0054385813505070}, + {0.0016778554224101, -0.0000000000000000}, {-0.0000000000000000, -0.0054385813505070}, + {-0.0000000000000000, -0.0054385813505070}, {-0.0005592851408034, 0.0000000000000000}, + {-0.0016778554224101, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, + {0.0005592851408034, -0.0000000000000000}, {0.0016778554224101, -0.0000000000000000}, + {0.0000000000000000, 0.0661391041210523}, {0.0447433475348149, 0.0000000000000000}, + {-0.0000000000000000, 0.0000000000000000}, {-0.0016778554224101, 0.0000000000000000}, + {0.0000000000000000, -0.0171567560732830}, {0.0005592851408034, 0.0000000000000000}, + {-0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0005592851408034, 0.0000000000000000}, {-0.0000000000000000, -0.0171567560732830}, + {-0.0447433475348149, 0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, + {0.0005592851408034, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; - std::vector> expected_dbecpnoevc = {{0.0006640009738949, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {-0.3833320420712772, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {-0.3121883316125419, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.3121883316125419, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {-0.3121883316125419, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {-0.0438387902019509, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {-0.2495383154917130, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.2495383154917130, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.3121883316125419, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.2495383154917130, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {-0.2495383154917130, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, {-0.0438387902019509, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, -0.0524645431317476}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0524645431317476}, {-0.0000000000000000, 0.0202331878248253}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0524645431317476}, {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.1073169096855986}, {-0.0000000000000000, 0.0202331878248253}, {-0.0000000000000000, 0.1073169096855986}, {0.0000000000000000, -0.1073169096855986}, {0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, -0.1073169096855986}, {0.0000000000000000, -0.1191161929559753}, {0.0000000000000000, -0.0524645431317476}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0298923367986682}, {0.0000000000000000, -0.0524645431317476}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0357723032285329}, {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0524645431317476}, {-0.0000000000000000, 0.1007653341101891}, {0.0000000000000000, -0.0298542620281862}, {-0.0000000000000000, 0.0298923367986682}, {-0.0000000000000000, 0.1073169096855986}, {0.0000000000000000, -0.1073169096855986}, {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.0357723032285329}, {0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, -0.0357723032285329}, {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0357723032285329}, {0.0000000000000000, -0.0298542620281862}, {-0.0000000000000000, 0.0202331878248253}, {-0.0000000000000000, 0.0357723032285329}, {-0.0000000000000000, 0.0202331878248253}, {0.0000000000000000, -0.0202331878248253}, {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, -0.0357723032285329}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0298542620281862}, {0.0000000000000000, -0.0357723032285329}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0524645431317476}, {-0.0000000000000000, 0.0298923367986682}, {-0.0000000000000000, 0.0357723032285329}, {-0.0000000000000000, 0.1007653341101891}, {-0.0000000000000000, 0.1073169096855986}, {0.0000000000000000, -0.1073169096855986}, {0.0000000000000000, -0.0298923367986682}, {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, -0.1007653341101891}, {0.0000000000000000, -0.0524645431317476}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.1880534696073192}, {0.0000000000000000, -0.1762977894442426}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1762977894512771}, {-0.0000000000000000, 0.1880534696168524}, {0.0000000000000000, -0.2314230050155408}, {0.0000000000000000, -0.1762977894442426}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1237235510007464}, {0.0000000000000000, -0.1880534696073192}, {0.0000000000000000, -0.1237235509982483}, {-0.0000000000000000, 0.1237235510007464}, {-0.0000000000000000, 0.1880534696168524}, {0.0000000000000000, -0.1237235509982483}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1762977894512771}, {-0.0000000000000000, 0.2314230050040926}, {0.0000000000000000, -0.2314230050040926}, {0.0000000000000000, -0.1762977894442426}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1237235510007464}, {0.0000000000000000, -0.1742909572395763}, {0.0000000000000000, -0.2820825644239818}, {0.0000000000000000, -0.1762977894442426}, {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.1742909572395763}, {0.0000000000000000, -0.2314230050040926}, {0.0000000000000000, -0.1237235509982483}, {0.0000000000000000, -0.1237235509982483}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1237235510007464}, {0.0000000000000000, -0.1880534696073192}, {0.0000000000000000, -0.1237235510007464}, {0.0000000000000000, -0.1742909572395763}, {0.0000000000000000, -0.2314230050155408}, {0.0000000000000000, -0.1237235510007464}, {0.0000000000000000, -0.1742909572395763}, {0.0000000000000000, -0.1880534696073192}, {-0.0000000000000000, 0.1237235509832599}, {-0.0000000000000000, 0.1880534696168524}, {-0.0000000000000000, 0.1880534696168524}, {-0.0000000000000000, 0.1742909572395764}, {-0.0000000000000000, 0.1237235509832599}, {-0.0000000000000000, 0.2314230050040927}, {-0.0000000000000000, 0.1742909572395764}, {0.0000000000000000, -0.1237235510007464}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1762977894512771}, {-0.0000000000000000, 0.2314230050040926}, {0.0000000000000000, -0.1237235510007464}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1237235509982484}, {-0.0000000000000000, 0.1237235509982484}, {-0.0000000000000000, 0.2314230050040926}, {-0.0000000000000000, 0.1742909572395763}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1762977894512771}, {-0.0000000000000000, 0.2820825644239818}, {-0.0000000000000000, 0.1742909572395763}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0202331878248252}, {-0.0000000000000000, 0.0524645431317475}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0524645431247131}, {0.0000000000000000, -0.0202331878152920}, {-0.0000000000000000, 0.0298923367872201}, {-0.0000000000000000, 0.0524645431317475}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0357723032285329}, {-0.0000000000000000, 0.0202331878248252}, {-0.0000000000000000, 0.0357723032285328}, {0.0000000000000000, -0.0357723032285329}, {0.0000000000000000, -0.0202331878152920}, {-0.0000000000000000, 0.0357723032285328}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0524645431247131}, {0.0000000000000000, -0.0298923368101164}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0524645431317475}, {0.0000000000000000, -0.1191161929559753}, {0.0000000000000000, -0.1073169096955909}, {0.0000000000000000, -0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0524645431317475}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0357723032285328}, {0.0000000000000000, -0.0357723032285328}, {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.1073169096955909}, {0.0000000000000000, -0.0202331878248252}, {0.0000000000000000, -0.1073169096955909}, {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, -0.0298923367872201}, {0.0000000000000000, -0.1073169096955909}, {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, -0.0202331878248252}, {-0.0000000000000000, 0.1073169097005870}, {-0.0000000000000000, 0.0202331878248252}, {-0.0000000000000000, 0.0202331878248252}, {0.0000000000000000, -0.0298542620281862}, {-0.0000000000000000, 0.1073169097005870}, {-0.0000000000000000, 0.0298923368101164}, {0.0000000000000000, -0.0298542620281862}, {-0.0000000000000000, 0.1073169096955909}, {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.0524645431317475}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1073169096955909}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0357723032285328}, {-0.0000000000000000, 0.0357723032285328}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0298542620281862}, {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0524645431317475}, {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0006640009738949, 0.0000000000000000}, {-0.0000000000000000, -0.2600232736846565}, {-0.3833320420712772, 0.0000000000000000}, {-0.0000000000000000, 0.2600232736846565}, {-0.0006640009738949, -0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.0000000000000000, 0.2600232736846565}, {0.3121883316125419, 0.0000000000000000}, {0.0000000000000000, -0.1571339884458217}, {-0.0006640009738949, -0.0000000000000000}, {0.0000000000000000, -0.1571339884458217}, {0.0000000000000000, 0.1571339884458217}, {-0.0006640009738949, 0.0000000000000000}, {0.0000000000000000, 0.1571339884458217}, {0.3121883316125419, -0.0000000000000000}, {-0.0000000000000000, -0.2600232736846565}, {-0.0170089259180780, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, {-0.0000000000000000, 0.2600232736846565}, {0.3121883316125419, 0.0000000000000000}, {0.0000000000000000, -0.1571339884458217}, {0.0000000000000000, -0.2537145711231581}, {0.0438387902019509, 0.0000000000000000}, {0.0000000000000000, -0.2600232736846565}, {-0.2495383154917130, -0.0000000000000001}, {-0.0000000000000000, 0.2537145711231581}, {-0.0170089259180780, -0.0000000000000000}, {-0.0000000000000000, 0.1571339884458217}, {-0.0000000000000000, -0.1571339884458217}, {-0.2495383154917130, 0.0000000000000000}, {-0.0000000000000000, 0.1571339884458217}, {-0.0006640009738949, -0.0000000000000000}, {0.0000000000000000, -0.1571339884458217}, {-0.0000000000000000, 0.2537145711231581}, {-0.0170089259180780, -0.0000000000000000}, {-0.0000000000000000, 0.1571339884458217}, {0.0000000000000001, -0.2537145711231581}, {-0.0006640009738949, -0.0000000000000000}, {0.0000000000000000, 0.1571339884458217}, {-0.0006640009738949, 0.0000000000000000}, {-0.0006640009738949, 0.0000000000000000}, {0.0000000000000001, 0.2537145711231581}, {-0.0000000000000000, -0.1571339884458217}, {-0.0170089259180780, 0.0000000000000000}, {-0.0000000000000000, -0.2537145711231581}, {0.0000000000000000, 0.1571339884458217}, {0.3121883316125419, -0.0000000000000000}, {-0.0000000000000000, -0.2600232736846565}, {-0.0170089259180780, 0.0000000000000000}, {-0.0000000000000000, -0.1571339884458217}, {-0.2495383154917130, 0.0000000000000000}, {-0.0000000000000000, 0.1571339884458217}, {-0.0000000000000000, -0.1571339884458217}, {-0.0170089259180780, 0.0000000000000000}, {-0.0000000000000000, -0.2537145711231581}, {-0.2495383154917130, 0.0000000000000001}, {0.0000000000000000, 0.2600232736846565}, {0.0438387902019509, -0.0000000000000000}, {0.0000000000000000, 0.2537145711231581}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0202331878248253}, {0.0524645431317476, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0524645431317476, 0.0000000000000000}, {0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, 0.0000000000000000}, {0.0524645431317476, 0.0000000000000000}, {0.0000000000000000, -0.1191161929559753}, {-0.1073169096855986, -0.0000000000000000}, {0.0000000000000000, -0.0202331878248253}, {-0.1073169096855986, -0.0000000000000000}, {-0.1073169096855986, 0.0000000000000000}, {0.0000000000000000, 0.0202331878248253}, {-0.1073169096855986, 0.0000000000000000}, {0.0000000000000000, 0.1191161929559753}, {0.0524645431317476, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0298923367986682}, {-0.0524645431317476, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0357723032285329, -0.0000000000000000}, {0.0298542620281862, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0524645431317476, -0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, {0.0298542620281862, 0.0000000000000000}, {-0.0000000000000000, 0.0298923367986682}, {0.1073169096855986, 0.0000000000000000}, {0.1073169096855986, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101891}, {-0.0357723032285329, -0.0000000000000000}, {-0.0000000000000000, 0.0202331878248253}, {0.0357723032285329, 0.0000000000000000}, {-0.0298542620281862, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0357723032285329, 0.0000000000000000}, {-0.0298542620281862, -0.0000000000000000}, {0.0000000000000000, -0.0202331878248253}, {0.0357723032285329, -0.0000000000000000}, {-0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, 0.0202331878248253}, {-0.0298542620281862, 0.0000000000000000}, {0.0357723032285329, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0298542620281862, 0.0000000000000000}, {-0.0357723032285329, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0524645431317476, 0.0000000000000000}, {-0.0000000000000000, 0.0298923367986682}, {-0.0357723032285329, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101891}, {0.1073169096855986, 0.0000000000000000}, {0.1073169096855986, -0.0000000000000000}, {-0.0000000000000000, -0.0298923367986682}, {0.0298542620281862, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101891}, {-0.0524645431317476, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0298542620281862, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.1880534696073192}, {0.1762977894442426, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.1762977894512771, 0.0000000000000000}, {0.0000000000000000, -0.1880534696168524}, {0.0000000000000000, -0.2314230050155408}, {-0.1762977894442426, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.1237235510007464, -0.0000000000000000}, {-0.0000000000000000, 0.1880534696073192}, {0.1237235509982483, 0.0000000000000000}, {0.1237235510007464, -0.0000000000000000}, {-0.0000000000000000, -0.1880534696168524}, {-0.1237235509982483, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.1762977894512771, 0.0000000000000000}, {-0.0000000000000000, 0.2314230050040926}, {0.0000000000000000, -0.2314230050040926}, {-0.1762977894442426, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, {-0.1237235510007464, -0.0000000000000000}, {-0.1742909572395763, -0.0000000000000000}, {-0.0000000000000001, 0.2820825644239818}, {0.1762977894442426, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.1742909572395763, 0.0000000000000000}, {0.0000000000000001, -0.2314230050040926}, {-0.1237235509982483, -0.0000000000000000}, {0.1237235509982483, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.1237235510007464, 0.0000000000000000}, {-0.0000000000000000, 0.1880534696073192}, {0.1237235510007464, 0.0000000000000000}, {0.1742909572395763, 0.0000000000000000}, {0.0000000000000001, -0.2314230050155408}, {-0.1237235510007464, -0.0000000000000000}, {-0.1742909572395763, -0.0000000000000001}, {-0.0000000000000001, 0.1880534696073192}, {0.1237235509832599, -0.0000000000000000}, {-0.0000000000000000, -0.1880534696168524}, {-0.0000000000000001, -0.1880534696168524}, {-0.1742909572395764, 0.0000000000000000}, {-0.1237235509832599, 0.0000000000000000}, {0.0000000000000000, 0.2314230050040927}, {0.1742909572395764, -0.0000000000000000}, {-0.1237235510007464, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.1762977894512771, 0.0000000000000000}, {-0.0000000000000000, 0.2314230050040926}, {0.1237235510007464, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {0.1237235509982484, 0.0000000000000000}, {-0.1237235509982484, 0.0000000000000000}, {0.0000000000000000, 0.2314230050040926}, {0.1742909572395763, -0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {0.1762977894512771, -0.0000000000000000}, {-0.0000000000000000, -0.2820825644239818}, {-0.1742909572395763, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, -0.0202331878248252}, {-0.0524645431317475, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0524645431247131, -0.0000000000000000}, {-0.0000000000000000, 0.0202331878152920}, {-0.0000000000000000, 0.0298923367872201}, {0.0524645431317475, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0357723032285329, 0.0000000000000000}, {0.0000000000000000, -0.0202331878248252}, {-0.0357723032285328, -0.0000000000000000}, {-0.0357723032285329, 0.0000000000000000}, {0.0000000000000000, 0.0202331878152920}, {0.0357723032285328, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0524645431247131, 0.0000000000000000}, {0.0000000000000000, -0.0298923368101164}, {0.0000000000000000, 0.0000000000000000}, {-0.0524645431317475, -0.0000000000000000}, {-0.0000000000000000, 0.1191161929559753}, {0.1073169096955909, 0.0000000000000000}, {-0.0298542620281862, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0524645431317475, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101892}, {0.0298542620281862, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0357723032285328, -0.0000000000000000}, {0.0357723032285328, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101892}, {-0.1073169096955909, -0.0000000000000000}, {-0.0000000000000000, 0.0202331878248252}, {0.1073169096955909, 0.0000000000000000}, {-0.0298542620281862, -0.0000000000000000}, {0.0000000000000000, -0.0298923367872201}, {-0.1073169096955909, -0.0000000000000000}, {0.0298542620281862, 0.0000000000000000}, {-0.0000000000000000, 0.0202331878248252}, {0.1073169097005870, -0.0000000000000000}, {-0.0000000000000000, -0.0202331878248252}, {-0.0000000000000000, -0.0202331878248252}, {0.0298542620281862, -0.0000000000000000}, {-0.1073169097005870, 0.0000000000000000}, {0.0000000000000000, 0.0298923368101164}, {-0.0298542620281862, 0.0000000000000000}, {0.1073169096955909, -0.0000000000000000}, {-0.0000000000000000, -0.1191161929559753}, {-0.0524645431317475, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, {-0.1073169096955909, 0.0000000000000000}, {-0.0000000000000000, 0.1007653341101892}, {0.0357723032285328, 0.0000000000000000}, {-0.0357723032285328, 0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, {0.0298542620281862, -0.0000000000000000}, {0.0000000000000000, 0.1007653341101892}, {0.0524645431317475, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {-0.0298542620281862, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; + std::vector> expected_dbecpnoevc + = {{0.0006640009738949, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, + {-0.3833320420712772, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, + {0.0006640009738949, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, + {-0.2600232736846565, 0.0000000000000000}, {-0.3121883316125419, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, + {0.0006640009738949, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, + {-0.3121883316125419, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, + {-0.0170089259180780, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, + {-0.2600232736846565, 0.0000000000000000}, {-0.3121883316125419, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, + {-0.0438387902019509, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, + {-0.2495383154917130, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, + {-0.0170089259180780, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {-0.2495383154917130, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, + {-0.0170089259180780, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, + {0.2537145711231581, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {0.0006640009738949, 0.0000000000000000}, + {0.0006640009738949, 0.0000000000000000}, {0.2537145711231581, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, + {0.2537145711231581, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, + {-0.3121883316125419, 0.0000000000000000}, {-0.2600232736846565, 0.0000000000000000}, + {-0.0170089259180780, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, + {-0.2495383154917130, 0.0000000000000000}, {-0.1571339884458217, 0.0000000000000000}, + {-0.1571339884458217, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, + {0.2537145711231581, 0.0000000000000000}, {-0.2495383154917130, 0.0000000000000000}, + {-0.2600232736846565, 0.0000000000000000}, {-0.0438387902019509, 0.0000000000000000}, + {0.2537145711231581, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, -0.0524645431317476}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0524645431317476}, + {-0.0000000000000000, 0.0202331878248253}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0524645431317476}, {-0.0000000000000000, 0.1191161929559753}, + {-0.0000000000000000, 0.1073169096855986}, {-0.0000000000000000, 0.0202331878248253}, + {-0.0000000000000000, 0.1073169096855986}, {0.0000000000000000, -0.1073169096855986}, + {0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, -0.1073169096855986}, + {0.0000000000000000, -0.1191161929559753}, {0.0000000000000000, -0.0524645431317476}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0298923367986682}, + {0.0000000000000000, -0.0524645431317476}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0357723032285329}, {-0.0000000000000000, 0.0298542620281862}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0524645431317476}, + {-0.0000000000000000, 0.1007653341101891}, {0.0000000000000000, -0.0298542620281862}, + {-0.0000000000000000, 0.0298923367986682}, {-0.0000000000000000, 0.1073169096855986}, + {0.0000000000000000, -0.1073169096855986}, {0.0000000000000000, -0.1007653341101891}, + {0.0000000000000000, -0.0357723032285329}, {0.0000000000000000, -0.0202331878248253}, + {0.0000000000000000, -0.0357723032285329}, {-0.0000000000000000, 0.0298542620281862}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0357723032285329}, + {0.0000000000000000, -0.0298542620281862}, {-0.0000000000000000, 0.0202331878248253}, + {-0.0000000000000000, 0.0357723032285329}, {-0.0000000000000000, 0.0202331878248253}, + {0.0000000000000000, -0.0202331878248253}, {-0.0000000000000000, 0.0298542620281862}, + {0.0000000000000000, -0.0357723032285329}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0298542620281862}, {0.0000000000000000, -0.0357723032285329}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.0524645431317476}, + {-0.0000000000000000, 0.0298923367986682}, {-0.0000000000000000, 0.0357723032285329}, + {-0.0000000000000000, 0.1007653341101891}, {-0.0000000000000000, 0.1073169096855986}, + {0.0000000000000000, -0.1073169096855986}, {0.0000000000000000, -0.0298923367986682}, + {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, -0.1007653341101891}, + {0.0000000000000000, -0.0524645431317476}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.1880534696073192}, {0.0000000000000000, -0.1762977894442426}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1762977894512771}, + {-0.0000000000000000, 0.1880534696168524}, {0.0000000000000000, -0.2314230050155408}, + {0.0000000000000000, -0.1762977894442426}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.1237235510007464}, {0.0000000000000000, -0.1880534696073192}, + {0.0000000000000000, -0.1237235509982483}, {-0.0000000000000000, 0.1237235510007464}, + {-0.0000000000000000, 0.1880534696168524}, {0.0000000000000000, -0.1237235509982483}, + {0.0000000000000000, 0.0000000000000000}, {-0.0000000000000000, 0.1762977894512771}, + {-0.0000000000000000, 0.2314230050040926}, {0.0000000000000000, -0.2314230050040926}, + {0.0000000000000000, -0.1762977894442426}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.1237235510007464}, {0.0000000000000000, -0.1742909572395763}, + {0.0000000000000000, -0.2820825644239818}, {0.0000000000000000, -0.1762977894442426}, + {0.0000000000000000, -0.0000000000000000}, {0.0000000000000000, -0.1742909572395763}, + {0.0000000000000000, -0.2314230050040926}, {0.0000000000000000, -0.1237235509982483}, + {0.0000000000000000, -0.1237235509982483}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.1237235510007464}, {0.0000000000000000, -0.1880534696073192}, + {0.0000000000000000, -0.1237235510007464}, {0.0000000000000000, -0.1742909572395763}, + {0.0000000000000000, -0.2314230050155408}, {0.0000000000000000, -0.1237235510007464}, + {0.0000000000000000, -0.1742909572395763}, {0.0000000000000000, -0.1880534696073192}, + {-0.0000000000000000, 0.1237235509832599}, {-0.0000000000000000, 0.1880534696168524}, + {-0.0000000000000000, 0.1880534696168524}, {-0.0000000000000000, 0.1742909572395764}, + {-0.0000000000000000, 0.1237235509832599}, {-0.0000000000000000, 0.2314230050040927}, + {-0.0000000000000000, 0.1742909572395764}, {0.0000000000000000, -0.1237235510007464}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1762977894512771}, + {-0.0000000000000000, 0.2314230050040926}, {0.0000000000000000, -0.1237235510007464}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1237235509982484}, + {-0.0000000000000000, 0.1237235509982484}, {-0.0000000000000000, 0.2314230050040926}, + {-0.0000000000000000, 0.1742909572395763}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.1762977894512771}, {-0.0000000000000000, 0.2820825644239818}, + {-0.0000000000000000, 0.1742909572395763}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, 0.0202331878248252}, {-0.0000000000000000, 0.0524645431317475}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0524645431247131}, + {0.0000000000000000, -0.0202331878152920}, {-0.0000000000000000, 0.0298923367872201}, + {-0.0000000000000000, 0.0524645431317475}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0357723032285329}, {-0.0000000000000000, 0.0202331878248252}, + {-0.0000000000000000, 0.0357723032285328}, {0.0000000000000000, -0.0357723032285329}, + {0.0000000000000000, -0.0202331878152920}, {-0.0000000000000000, 0.0357723032285328}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0524645431247131}, + {0.0000000000000000, -0.0298923368101164}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, -0.0524645431317475}, {0.0000000000000000, -0.1191161929559753}, + {0.0000000000000000, -0.1073169096955909}, {0.0000000000000000, -0.0298542620281862}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0524645431317475}, + {0.0000000000000000, -0.1007653341101892}, {0.0000000000000000, -0.0298542620281862}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0357723032285328}, + {0.0000000000000000, -0.0357723032285328}, {0.0000000000000000, -0.1007653341101892}, + {0.0000000000000000, -0.1073169096955909}, {0.0000000000000000, -0.0202331878248252}, + {0.0000000000000000, -0.1073169096955909}, {-0.0000000000000000, 0.0298542620281862}, + {0.0000000000000000, -0.0298923367872201}, {0.0000000000000000, -0.1073169096955909}, + {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, -0.0202331878248252}, + {-0.0000000000000000, 0.1073169097005870}, {-0.0000000000000000, 0.0202331878248252}, + {-0.0000000000000000, 0.0202331878248252}, {0.0000000000000000, -0.0298542620281862}, + {-0.0000000000000000, 0.1073169097005870}, {-0.0000000000000000, 0.0298923368101164}, + {0.0000000000000000, -0.0298542620281862}, {-0.0000000000000000, 0.1073169096955909}, + {-0.0000000000000000, 0.1191161929559753}, {-0.0000000000000000, 0.0524645431317475}, + {0.0000000000000000, -0.0000000000000000}, {-0.0000000000000000, 0.1073169096955909}, + {-0.0000000000000000, 0.1007653341101892}, {-0.0000000000000000, 0.0357723032285328}, + {-0.0000000000000000, 0.0357723032285328}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0298542620281862}, {-0.0000000000000000, 0.1007653341101892}, + {-0.0000000000000000, 0.0524645431317475}, {0.0000000000000000, -0.0000000000000000}, + {-0.0000000000000000, 0.0298542620281862}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0006640009738949, 0.0000000000000000}, {-0.0000000000000000, -0.2600232736846565}, + {-0.3833320420712772, 0.0000000000000000}, {-0.0000000000000000, 0.2600232736846565}, + {-0.0006640009738949, -0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, + {-0.0000000000000000, 0.2600232736846565}, {0.3121883316125419, 0.0000000000000000}, + {0.0000000000000000, -0.1571339884458217}, {-0.0006640009738949, -0.0000000000000000}, + {0.0000000000000000, -0.1571339884458217}, {0.0000000000000000, 0.1571339884458217}, + {-0.0006640009738949, 0.0000000000000000}, {0.0000000000000000, 0.1571339884458217}, + {0.3121883316125419, -0.0000000000000000}, {-0.0000000000000000, -0.2600232736846565}, + {-0.0170089259180780, 0.0000000000000000}, {-0.0170089259180780, 0.0000000000000000}, + {-0.0000000000000000, 0.2600232736846565}, {0.3121883316125419, 0.0000000000000000}, + {0.0000000000000000, -0.1571339884458217}, {0.0000000000000000, -0.2537145711231581}, + {0.0438387902019509, 0.0000000000000000}, {0.0000000000000000, -0.2600232736846565}, + {-0.2495383154917130, -0.0000000000000001}, {-0.0000000000000000, 0.2537145711231581}, + {-0.0170089259180780, -0.0000000000000000}, {-0.0000000000000000, 0.1571339884458217}, + {-0.0000000000000000, -0.1571339884458217}, {-0.2495383154917130, 0.0000000000000000}, + {-0.0000000000000000, 0.1571339884458217}, {-0.0006640009738949, -0.0000000000000000}, + {0.0000000000000000, -0.1571339884458217}, {-0.0000000000000000, 0.2537145711231581}, + {-0.0170089259180780, -0.0000000000000000}, {-0.0000000000000000, 0.1571339884458217}, + {0.0000000000000001, -0.2537145711231581}, {-0.0006640009738949, -0.0000000000000000}, + {0.0000000000000000, 0.1571339884458217}, {-0.0006640009738949, 0.0000000000000000}, + {-0.0006640009738949, 0.0000000000000000}, {0.0000000000000001, 0.2537145711231581}, + {-0.0000000000000000, -0.1571339884458217}, {-0.0170089259180780, 0.0000000000000000}, + {-0.0000000000000000, -0.2537145711231581}, {0.0000000000000000, 0.1571339884458217}, + {0.3121883316125419, -0.0000000000000000}, {-0.0000000000000000, -0.2600232736846565}, + {-0.0170089259180780, 0.0000000000000000}, {-0.0000000000000000, -0.1571339884458217}, + {-0.2495383154917130, 0.0000000000000000}, {-0.0000000000000000, 0.1571339884458217}, + {-0.0000000000000000, -0.1571339884458217}, {-0.0170089259180780, 0.0000000000000000}, + {-0.0000000000000000, -0.2537145711231581}, {-0.2495383154917130, 0.0000000000000001}, + {0.0000000000000000, 0.2600232736846565}, {0.0438387902019509, -0.0000000000000000}, + {0.0000000000000000, 0.2537145711231581}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0202331878248253}, {0.0524645431317476, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0524645431317476, 0.0000000000000000}, + {0.0000000000000000, -0.0202331878248253}, {0.0000000000000000, 0.0000000000000000}, + {0.0524645431317476, 0.0000000000000000}, {0.0000000000000000, -0.1191161929559753}, + {-0.1073169096855986, -0.0000000000000000}, {0.0000000000000000, -0.0202331878248253}, + {-0.1073169096855986, -0.0000000000000000}, {-0.1073169096855986, 0.0000000000000000}, + {0.0000000000000000, 0.0202331878248253}, {-0.1073169096855986, 0.0000000000000000}, + {0.0000000000000000, 0.1191161929559753}, {0.0524645431317476, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, -0.0298923367986682}, + {-0.0524645431317476, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0357723032285329, -0.0000000000000000}, {0.0298542620281862, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0524645431317476, -0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101891}, {0.0298542620281862, 0.0000000000000000}, + {-0.0000000000000000, 0.0298923367986682}, {0.1073169096855986, 0.0000000000000000}, + {0.1073169096855986, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101891}, + {-0.0357723032285329, -0.0000000000000000}, {-0.0000000000000000, 0.0202331878248253}, + {0.0357723032285329, 0.0000000000000000}, {-0.0298542620281862, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0357723032285329, 0.0000000000000000}, + {-0.0298542620281862, -0.0000000000000000}, {0.0000000000000000, -0.0202331878248253}, + {0.0357723032285329, -0.0000000000000000}, {-0.0000000000000000, -0.0202331878248253}, + {0.0000000000000000, 0.0202331878248253}, {-0.0298542620281862, 0.0000000000000000}, + {0.0357723032285329, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0298542620281862, 0.0000000000000000}, {-0.0357723032285329, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0524645431317476, 0.0000000000000000}, + {-0.0000000000000000, 0.0298923367986682}, {-0.0357723032285329, 0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101891}, {0.1073169096855986, 0.0000000000000000}, + {0.1073169096855986, -0.0000000000000000}, {-0.0000000000000000, -0.0298923367986682}, + {0.0298542620281862, -0.0000000000000000}, {-0.0000000000000000, -0.1007653341101891}, + {-0.0524645431317476, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0298542620281862, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.1880534696073192}, {0.1762977894442426, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.1762977894512771, 0.0000000000000000}, + {0.0000000000000000, -0.1880534696168524}, {0.0000000000000000, -0.2314230050155408}, + {-0.1762977894442426, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.1237235510007464, -0.0000000000000000}, {-0.0000000000000000, 0.1880534696073192}, + {0.1237235509982483, 0.0000000000000000}, {0.1237235510007464, -0.0000000000000000}, + {-0.0000000000000000, -0.1880534696168524}, {-0.1237235509982483, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.1762977894512771, 0.0000000000000000}, + {-0.0000000000000000, 0.2314230050040926}, {0.0000000000000000, -0.2314230050040926}, + {-0.1762977894442426, -0.0000000000000000}, {-0.0000000000000000, 0.0000000000000000}, + {-0.1237235510007464, -0.0000000000000000}, {-0.1742909572395763, -0.0000000000000000}, + {-0.0000000000000001, 0.2820825644239818}, {0.1762977894442426, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.1742909572395763, 0.0000000000000000}, + {0.0000000000000001, -0.2314230050040926}, {-0.1237235509982483, -0.0000000000000000}, + {0.1237235509982483, 0.0000000000000000}, {0.0000000000000000, -0.0000000000000000}, + {0.1237235510007464, 0.0000000000000000}, {-0.0000000000000000, 0.1880534696073192}, + {0.1237235510007464, 0.0000000000000000}, {0.1742909572395763, 0.0000000000000000}, + {0.0000000000000001, -0.2314230050155408}, {-0.1237235510007464, -0.0000000000000000}, + {-0.1742909572395763, -0.0000000000000001}, {-0.0000000000000001, 0.1880534696073192}, + {0.1237235509832599, -0.0000000000000000}, {-0.0000000000000000, -0.1880534696168524}, + {-0.0000000000000001, -0.1880534696168524}, {-0.1742909572395764, 0.0000000000000000}, + {-0.1237235509832599, 0.0000000000000000}, {0.0000000000000000, 0.2314230050040927}, + {0.1742909572395764, -0.0000000000000000}, {-0.1237235510007464, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.1762977894512771, 0.0000000000000000}, + {-0.0000000000000000, 0.2314230050040926}, {0.1237235510007464, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {0.1237235509982484, 0.0000000000000000}, + {-0.1237235509982484, 0.0000000000000000}, {0.0000000000000000, 0.2314230050040926}, + {0.1742909572395763, -0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, + {0.1762977894512771, -0.0000000000000000}, {-0.0000000000000000, -0.2820825644239818}, + {-0.1742909572395763, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0000000000000000, -0.0202331878248252}, {-0.0524645431317475, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0524645431247131, -0.0000000000000000}, + {-0.0000000000000000, 0.0202331878152920}, {-0.0000000000000000, 0.0298923367872201}, + {0.0524645431317475, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0357723032285329, 0.0000000000000000}, {0.0000000000000000, -0.0202331878248252}, + {-0.0357723032285328, -0.0000000000000000}, {-0.0357723032285329, 0.0000000000000000}, + {0.0000000000000000, 0.0202331878152920}, {0.0357723032285328, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0524645431247131, 0.0000000000000000}, + {0.0000000000000000, -0.0298923368101164}, {0.0000000000000000, 0.0000000000000000}, + {-0.0524645431317475, -0.0000000000000000}, {-0.0000000000000000, 0.1191161929559753}, + {0.1073169096955909, 0.0000000000000000}, {-0.0298542620281862, -0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0524645431317475, 0.0000000000000000}, + {0.0000000000000000, -0.1007653341101892}, {0.0298542620281862, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {-0.0357723032285328, -0.0000000000000000}, + {0.0357723032285328, 0.0000000000000000}, {0.0000000000000000, -0.1007653341101892}, + {-0.1073169096955909, -0.0000000000000000}, {-0.0000000000000000, 0.0202331878248252}, + {0.1073169096955909, 0.0000000000000000}, {-0.0298542620281862, -0.0000000000000000}, + {0.0000000000000000, -0.0298923367872201}, {-0.1073169096955909, -0.0000000000000000}, + {0.0298542620281862, 0.0000000000000000}, {-0.0000000000000000, 0.0202331878248252}, + {0.1073169097005870, -0.0000000000000000}, {-0.0000000000000000, -0.0202331878248252}, + {-0.0000000000000000, -0.0202331878248252}, {0.0298542620281862, -0.0000000000000000}, + {-0.1073169097005870, 0.0000000000000000}, {0.0000000000000000, 0.0298923368101164}, + {-0.0298542620281862, 0.0000000000000000}, {0.1073169096955909, -0.0000000000000000}, + {-0.0000000000000000, -0.1191161929559753}, {-0.0524645431317475, 0.0000000000000000}, + {0.0000000000000000, -0.0000000000000000}, {-0.1073169096955909, 0.0000000000000000}, + {-0.0000000000000000, 0.1007653341101892}, {0.0357723032285328, 0.0000000000000000}, + {-0.0357723032285328, 0.0000000000000000}, {-0.0000000000000000, -0.0000000000000000}, + {0.0298542620281862, -0.0000000000000000}, {0.0000000000000000, 0.1007653341101892}, + {0.0524645431317475, -0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {-0.0298542620281862, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}, + {0.0000000000000000, 0.0000000000000000}, {0.0000000000000000, 0.0000000000000000}}; std::vector> dbecp_noevc(expected_dbecpnoevc.size(), 0); - std::complex * d_vkb0i = nullptr, * d_vkb0j = nullptr, * d_vkb = nullptr, - * d_vkb1 = nullptr, * d_vkb2 = nullptr, * d_dbecp_noevc = nullptr; - double * d_gcar = nullptr, * d_kvec_c = nullptr; + std::complex*d_vkb0i = nullptr, *d_vkb0j = nullptr, *d_vkb = nullptr, *d_vkb1 = nullptr, *d_vkb2 = nullptr, + *d_dbecp_noevc = nullptr; + double *d_gcar = nullptr, *d_kvec_c = nullptr; resmem_zd_op()(d_vkb0i, vkb0i.size()); resmem_zd_op()(d_vkb0j, vkb0j.size()); resmem_zd_op()(d_vkb, vkb.size()); @@ -175,7 +3748,8 @@ TEST(TestSrcPWStressMultiDevice, cal_dbecp_noevc_nl_op_gpu) syncmem_z2z_d2h_op()(dbecp_noevc.data(), d_dbecp_noevc, dbecp_noevc.size()); - for (int ii = 0; ii < dbecp_noevc.size(); ii++) { + for (int ii = 0; ii < dbecp_noevc.size(); ii++) + { EXPECT_LT(fabs(dbecp_noevc[ii] - expected_dbecpnoevc[ii]), 6e-5); } @@ -193,16 +3767,28 @@ TEST(TestSrcPWStressMultiDevice, cal_dbecp_noevc_nl_op_gpu) TEST(TestSrcPWStressMultiDevice, cal_stress_nl_op_gpu) { bool multi_proj = false; - int ipol = 0, jpol = 0, nkb = 8, npw = 59, npwx = 70, ik = 0, - nbands_occ = 4, ntype = 1, spin = 0, wg_nc = 14, deeq_2 = 2, - deeq_3 = 4, deeq_4 = 4; + int ipol = 0, jpol = 0, nkb = 8, npw = 59, npwx = 70, ik = 0, nbands_occ = 4, ntype = 1, spin = 0, wg_nc = 14, + deeq_2 = 2, deeq_3 = 4, deeq_4 = 4; double tpiba = 0.61599855952741045; - std::vector atom_na {2}; - std::vector atom_nh {4}; + std::vector atom_na{2}; + std::vector atom_nh{4}; - std::vector wg = {0.0312500000000000, 0.0312500000000000, 0.0312500000000000, 0.0312500000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000}; + std::vector wg = {0.0312500000000000, + 0.0312500000000000, + 0.0312500000000000, + 0.0312500000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000}; std::vector ekb = {0.0000000000000000, 0.0000000000000000, 0.0000000000000000, @@ -225,17 +3811,144 @@ TEST(TestSrcPWStressMultiDevice, cal_stress_nl_op_gpu) 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998}; - std::vector deeq = {1.5238850117900000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998, 1.5238850117900000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 3.6833041305199998}; - std::vector expected_stress = {0.0756853725856800, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000}; + std::vector deeq + = {1.5238850117900000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, + 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, + 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, + 3.6833041305199998, 1.5238850117900000, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, + 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, + 0.0000000000000000, 3.6833041305199998, 0.0000000000000000, 0.0000000000000000, 0.0000000000000000, + 0.0000000000000000, 3.6833041305199998}; + std::vector expected_stress = {0.0756853725856800, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000, + 0.0000000000000000}; - std::vector> becp = {{0.3822224563153840, 0.2843496698733989}, {0.0000000047405057, -0.0000000063622467}, {-0.0000000221885661, -0.0000000077445564}, {-0.0000000315900339, 0.0000000066031753}, {0.3822219882868894, 0.2843493245749873}, {-0.0000000025566157, -0.0000000037074709}, {-0.0000000112422185, -0.0000000038960692}, {-0.0000000274204417, -0.0000000050354909}, {0.0000000263174842, 0.0000000840706738}, {-0.1423432709137335, -0.1067865593040708}, {0.0994283275636497, -0.0296568132215046}, {-0.1130231022815482, 0.0114126493034118}, {0.0000000192710833, 0.0000000826930318}, {0.1423432909390048, 0.1067865978075706}, {-0.0994283312566920, 0.0296568283839560}, {0.1130231394751445, -0.0114126422350418}, {0.0000000249554797, -0.0000000163412887}, {0.0126173311750538, 0.0505025208030164}, {-0.0992900839174669, 0.1049613257754194}, {-0.1752338959031504, 0.0322947917215720}, {0.0000000314063438, -0.0000000107784857}, {-0.0126173544966048, -0.0505025251050050}, {0.0992901142513072, -0.1049613517795691}, {0.1752339295113088, -0.0322947599296606}, {0.0000000418723599, -0.0000000327967579}, {0.0499915139695752, -0.1358717339908930}, {-0.1207341770424313, -0.0954845098114184}, {-0.0053210967996738, 0.1032100190657011}, {0.0000000478743291, -0.0000000444823110}, {-0.0499915463025769, 0.1358718262641271}, {0.1207342829577684, 0.0954846088542195}, {0.0053210956935376, -0.1032100914804113}, {0.0000001068847889, 0.0000001181241550}, {0.0000001305452835, 0.0000001442724141}, {0.0000001594428453, 0.0000001762083066}, {0.0000001947364746, 0.0000002152126487}, {0.0000002378416024, 0.0000002628496293}, {0.0000002904868037, 0.0000003210294785}, {0.0000003547830455, 0.0000003920849856}, {0.0000004333082382, 0.0000004788649257}, {0.0000005292104672, 0.0000005848481251}, {0.0000006463340280, 0.0000007142827203}, {0.0000007893732947, 0.0000008723561666}, {0.0000009640605597, 0.0000010654027757}, {0.0000011773953314, 0.0000013011570524}, {0.0000014379242254, 0.0000015890629176}, {0.0000017560825876, 0.0000019406511204}, {0.0000021446114368, 0.0000023699998412}, {0.0000026190662889, 0.0000028942967740}, {0.0000031984380579, 0.0000035345249838}, {0.0000039059106450, 0.0000043162997065}, {0.0000047697852053, 0.0000052708891942}, {0.0000058246076273, 0.0000064364599272}, {0.0000071125437223, 0.0000078595952900}, {0.0000086850562956, 0.0000095971474833}, {0.0000106049500357, 0.0000117184953983}, {0.0000129488644412, 0.0000143082969262}, {0.0000158103123394, 0.0000174698432637}, {0.0000193033825817, 0.0000213291459321}, {0.0000235672509859, 0.0000260399152734}, {0.0000287716744541, 0.0000317896231345}, {0.0000351236805296, 0.0000388068835033}, {0.0000428757097852, 0.0000473704344239}, {0.0000523355228617, 0.0000578200643309}, {0.0000638782496584, 0.0000705698979552}, {0.0000779610371221, 0.0000861245435617}, {0.0000951408470466, 0.0001050987072471}, {0.0001160960690513, 0.0001282410045273}, {0.0001416527500887, 0.0001564628482636}, {0.0001728164043580, 0.0001908734692787}, {0.0002108105608012, 0.0002328223367531}, {0.0002571234347964, 0.0002839504948514}, {0.0003135643816117, 0.0003462526262419}, {0.0003823321079660, 0.0004221519981263}, {0.0004660969911826, 0.0005145908492938}, {0.0005681002892969, 0.0006271392433178}, {0.0006922735267517, 0.0007641259500957}, {0.0008433819139013, 0.0009307955291415}, {0.0010271963084076, 0.0011334964765463}, {0.0012506989528594, 0.0013799060603236}, {0.0015223290208384, 0.0016792982989649}, {0.0018522748607834, 0.0020428624165972}, {0.0022528207210042, 0.0024840800058399}, {0.0027387566255197, 0.0030191699939689}, {0.0033278608972953, 0.0036676112650506}, {0.0040414654826298, 0.0044527533271638}, {0.0049051146047016, 0.0054025255635577}, {0.0059493271489466, 0.0065502551556389}, {0.0072104723217411, 0.0079356023901138}, {0.0087317661390834, 0.0096056193626829}, {0.0105643927399804, 0.0116159335008867}, {0.0127687487363306, 0.0140320501542341}, {0.0154158000026934, 0.0169307578066049}, {0.0185885274643147, 0.0204016041438614}, {0.0223834202827117, 0.0245483898500704}, {0.0269119498674243, 0.0294905979689132}, {0.0323019245920026, 0.0353646381152225}, {0.0386985810007877, 0.0423247346918169}, {0.0462652106588671, 0.0505432246455199}, {0.0551830507360847, 0.0602099514549019}, {0.0656500796297109, 0.0715303472823672}, {0.0778782563065075, 0.0847216851955341}, {0.0920886255622899, 0.1000068617622328}, {0.1085035864733623, 0.1176049447506212}, {0.1273354987984115, 0.1377176056755487}, {0.1487707001614866, 0.1605104754331964}, {0.1729479548574285, 0.1860884492515057}, {0.1999303955871250, 0.2144640752215042}, {0.2296702125402119, 0.2455184586467886}, {0.2619657691442796, 0.2789546907877769}, {0.2964115783982629, 0.3142447715396228}, {0.3323427696050946, 0.3505724546933086}}; - std::vector> dbecp = {{-0.3968013160234298, -0.2951954285398501}, {-0.0000000018274627, 0.0000000034091255}, {0.0000000476300934, 0.0000000166257225}, {0.0000000180998023, -0.0000000023594926}, {-0.3968008898814409, -0.2951951140708620}, {0.0000000005567427, 0.0000000025512194}, {0.0000000229895970, 0.0000000079724392}, {0.0000000167415341, 0.0000000014413096}, {-0.0000000026174184, 0.0000000012487815}, {0.1230095511740903, 0.0922823199441691}, {-0.2437547660698587, 0.0727055552275573}, {0.0976717874244303, -0.0098625331883941}, {0.0000000045404125, 0.0000000024011674}, {-0.1230095219426823, -0.0922823070969898}, {0.2437547609009624, -0.0727055484521760}, {-0.0976717740137830, 0.0098625270185677}, {0.0000000049680599, -0.0000000002522028}, {-0.0109035928448508, -0.0436430333758879}, {0.2434158601277590, -0.2573192363956319}, {0.1514328173897781, -0.0279083540606013}, {-0.0000000031677542, -0.0000000031903892}, {0.0109036003822807, 0.0436430239877767}, {-0.2434158919387226, 0.2573193062054900}, {-0.1514327898988280, 0.0279083300282760}, {0.0000000060975568, -0.0000000048858413}, {-0.0432014349179432, 0.1174170187419732}, {0.2959873986513963, 0.2340862748684743}, {0.0045983634023068, -0.0891915655445241}, {-0.0000000099384690, 0.0000000050768091}, {0.0432014425090816, -0.1174170397799131}, {-0.2959876001950912, -0.2340864466551855}, {-0.0045983613371922, 0.0891915833111229}, {0.0000016655959835, 0.0000017510195859}, {0.0000018408257708, 0.0000019352395254}, {0.0000020344974885, 0.0000021388480224}, {0.0000022485533513, 0.0000023638874892}, {0.0000024851401929, 0.0000026126155658}, {0.0000027466327025, 0.0000028875282801}, {0.0000030356550337, 0.0000031913849538}, {0.0000033551087476, 0.0000035272367046}, {0.0000037082017763, 0.0000038984574394}, {0.0000040984814056, 0.0000043087762732}, {0.0000045298707477, 0.0000047623190661}, {0.0000050067058872, 0.0000052636459618}, {0.0000055337849138, 0.0000058178020289}, {0.0000061164112085, 0.0000064303654764}, {0.0000067604539039, 0.0000071075084013}, {0.0000074724020943, 0.0000078560559307}, {0.0000082594355244, 0.0000086835597465}, {0.0000091294975934, 0.0000095983747877}, {0.0000100913766411, 0.0000106097473689}, {0.0000111547974693, 0.0000117279070898}, {0.0000123305245859, 0.0000129641777091}, {0.0000136304715470, 0.0000143310953580}, {0.0000150678278004, 0.0000158425392021}, {0.0000166571982603, 0.0000175138769245}, {0.0000184147567372, 0.0000193621318143}, {0.0000203584206422, 0.0000214061634153}, {0.0000225080396905, 0.0000236668674923}, {0.0000248856156575, 0.0000261674071580}, {0.0000275155354747, 0.0000289334644421}, {0.0000304248457634, 0.0000319935224187}, {0.0000336435462405, 0.0000353791820137}, {0.0000372049283901, 0.0000391255195714}, {0.0000411459477057, 0.0000432714781975}, {0.0000455076526162, 0.0000478603236690}, {0.0000503356501508, 0.0000529401384310}, {0.0000556806447093, 0.0000585643969985}, {0.0000615990320267, 0.0000647925948627}, {0.0000681535873045, 0.0000716909738337}, {0.0000754142226143, 0.0000793333325486}, {0.0000834588617513, 0.0000878019601639}, {0.0000923744145238, 0.0000971886723857}, {0.0001022578998667, 0.0001075960100657}, {0.0001132177151285, 0.0001191385825089}, {0.0001253750821688, 0.0001319446346404}, {0.0001388656931299, 0.0001461577886013}, {0.0001538416116707, 0.0001619390752429}, {0.0001704734126210, 0.0001794692466348}, {0.0001889526839861, 0.0001989514226639}, {0.0002094948352964, 0.0002206141669598}, {0.0002323424532407, 0.0002447148917575}, {0.0002577688660120, 0.0002715440711772}, {0.0002860827366003, 0.0003014297283084}, {0.0003176328473230, 0.0003347429028048}, {0.0003528139319169, 0.0003719036523160}, {0.0003920733033433, 0.0004133883348634}, {0.0004359184355265, 0.0004597378235472}, {0.0004849257498879, 0.0005115667128724}, {0.0005397507675994, 0.0005695742010076}, {0.0006011395651476, 0.0006345564732465}, {0.0006699419202639, 0.0007074208158414}, {0.0007471264573715, 0.0007892012568016}, {0.0008337973421338, 0.0008810768845168}, {0.0009312133317734, 0.0009843916165643}, {0.0010408090615384, 0.0011006761144741}, {0.0011642174877366, 0.0012316721297047}, {0.0013032951060666, 0.0013793575565867}, {0.0014601478141137, 0.0015459723496944}, {0.0016371562939457, 0.0017340444045349}, {0.0018370013548900, 0.0019464124264495}, {0.0020626839266792, 0.0021862431396714}, {0.0023175384724405, 0.0024570389239040}, {0.0026052331032675, 0.0027626284949018}, {0.0029297492028134, 0.0031071332870231}, {0.0032953300104885, 0.0034948945386015}, {0.0037063829897922, 0.0039303453746640}, {0.0041673162235799, 0.0044178042896882}, {0.0046822795025145, 0.0049611566395348}, {0.0052547768360158, 0.0055633838800482}, {0.0058870982291137, 0.0062258836182806}, {0.0065795106541396, 0.0069475113366125}}; + std::vector> becp + = {{0.3822224563153840, 0.2843496698733989}, {0.0000000047405057, -0.0000000063622467}, + {-0.0000000221885661, -0.0000000077445564}, {-0.0000000315900339, 0.0000000066031753}, + {0.3822219882868894, 0.2843493245749873}, {-0.0000000025566157, -0.0000000037074709}, + {-0.0000000112422185, -0.0000000038960692}, {-0.0000000274204417, -0.0000000050354909}, + {0.0000000263174842, 0.0000000840706738}, {-0.1423432709137335, -0.1067865593040708}, + {0.0994283275636497, -0.0296568132215046}, {-0.1130231022815482, 0.0114126493034118}, + {0.0000000192710833, 0.0000000826930318}, {0.1423432909390048, 0.1067865978075706}, + {-0.0994283312566920, 0.0296568283839560}, {0.1130231394751445, -0.0114126422350418}, + {0.0000000249554797, -0.0000000163412887}, {0.0126173311750538, 0.0505025208030164}, + {-0.0992900839174669, 0.1049613257754194}, {-0.1752338959031504, 0.0322947917215720}, + {0.0000000314063438, -0.0000000107784857}, {-0.0126173544966048, -0.0505025251050050}, + {0.0992901142513072, -0.1049613517795691}, {0.1752339295113088, -0.0322947599296606}, + {0.0000000418723599, -0.0000000327967579}, {0.0499915139695752, -0.1358717339908930}, + {-0.1207341770424313, -0.0954845098114184}, {-0.0053210967996738, 0.1032100190657011}, + {0.0000000478743291, -0.0000000444823110}, {-0.0499915463025769, 0.1358718262641271}, + {0.1207342829577684, 0.0954846088542195}, {0.0053210956935376, -0.1032100914804113}, + {0.0000001068847889, 0.0000001181241550}, {0.0000001305452835, 0.0000001442724141}, + {0.0000001594428453, 0.0000001762083066}, {0.0000001947364746, 0.0000002152126487}, + {0.0000002378416024, 0.0000002628496293}, {0.0000002904868037, 0.0000003210294785}, + {0.0000003547830455, 0.0000003920849856}, {0.0000004333082382, 0.0000004788649257}, + {0.0000005292104672, 0.0000005848481251}, {0.0000006463340280, 0.0000007142827203}, + {0.0000007893732947, 0.0000008723561666}, {0.0000009640605597, 0.0000010654027757}, + {0.0000011773953314, 0.0000013011570524}, {0.0000014379242254, 0.0000015890629176}, + {0.0000017560825876, 0.0000019406511204}, {0.0000021446114368, 0.0000023699998412}, + {0.0000026190662889, 0.0000028942967740}, {0.0000031984380579, 0.0000035345249838}, + {0.0000039059106450, 0.0000043162997065}, {0.0000047697852053, 0.0000052708891942}, + {0.0000058246076273, 0.0000064364599272}, {0.0000071125437223, 0.0000078595952900}, + {0.0000086850562956, 0.0000095971474833}, {0.0000106049500357, 0.0000117184953983}, + {0.0000129488644412, 0.0000143082969262}, {0.0000158103123394, 0.0000174698432637}, + {0.0000193033825817, 0.0000213291459321}, {0.0000235672509859, 0.0000260399152734}, + {0.0000287716744541, 0.0000317896231345}, {0.0000351236805296, 0.0000388068835033}, + {0.0000428757097852, 0.0000473704344239}, {0.0000523355228617, 0.0000578200643309}, + {0.0000638782496584, 0.0000705698979552}, {0.0000779610371221, 0.0000861245435617}, + {0.0000951408470466, 0.0001050987072471}, {0.0001160960690513, 0.0001282410045273}, + {0.0001416527500887, 0.0001564628482636}, {0.0001728164043580, 0.0001908734692787}, + {0.0002108105608012, 0.0002328223367531}, {0.0002571234347964, 0.0002839504948514}, + {0.0003135643816117, 0.0003462526262419}, {0.0003823321079660, 0.0004221519981263}, + {0.0004660969911826, 0.0005145908492938}, {0.0005681002892969, 0.0006271392433178}, + {0.0006922735267517, 0.0007641259500957}, {0.0008433819139013, 0.0009307955291415}, + {0.0010271963084076, 0.0011334964765463}, {0.0012506989528594, 0.0013799060603236}, + {0.0015223290208384, 0.0016792982989649}, {0.0018522748607834, 0.0020428624165972}, + {0.0022528207210042, 0.0024840800058399}, {0.0027387566255197, 0.0030191699939689}, + {0.0033278608972953, 0.0036676112650506}, {0.0040414654826298, 0.0044527533271638}, + {0.0049051146047016, 0.0054025255635577}, {0.0059493271489466, 0.0065502551556389}, + {0.0072104723217411, 0.0079356023901138}, {0.0087317661390834, 0.0096056193626829}, + {0.0105643927399804, 0.0116159335008867}, {0.0127687487363306, 0.0140320501542341}, + {0.0154158000026934, 0.0169307578066049}, {0.0185885274643147, 0.0204016041438614}, + {0.0223834202827117, 0.0245483898500704}, {0.0269119498674243, 0.0294905979689132}, + {0.0323019245920026, 0.0353646381152225}, {0.0386985810007877, 0.0423247346918169}, + {0.0462652106588671, 0.0505432246455199}, {0.0551830507360847, 0.0602099514549019}, + {0.0656500796297109, 0.0715303472823672}, {0.0778782563065075, 0.0847216851955341}, + {0.0920886255622899, 0.1000068617622328}, {0.1085035864733623, 0.1176049447506212}, + {0.1273354987984115, 0.1377176056755487}, {0.1487707001614866, 0.1605104754331964}, + {0.1729479548574285, 0.1860884492515057}, {0.1999303955871250, 0.2144640752215042}, + {0.2296702125402119, 0.2455184586467886}, {0.2619657691442796, 0.2789546907877769}, + {0.2964115783982629, 0.3142447715396228}, {0.3323427696050946, 0.3505724546933086}}; + std::vector> dbecp + = {{-0.3968013160234298, -0.2951954285398501}, {-0.0000000018274627, 0.0000000034091255}, + {0.0000000476300934, 0.0000000166257225}, {0.0000000180998023, -0.0000000023594926}, + {-0.3968008898814409, -0.2951951140708620}, {0.0000000005567427, 0.0000000025512194}, + {0.0000000229895970, 0.0000000079724392}, {0.0000000167415341, 0.0000000014413096}, + {-0.0000000026174184, 0.0000000012487815}, {0.1230095511740903, 0.0922823199441691}, + {-0.2437547660698587, 0.0727055552275573}, {0.0976717874244303, -0.0098625331883941}, + {0.0000000045404125, 0.0000000024011674}, {-0.1230095219426823, -0.0922823070969898}, + {0.2437547609009624, -0.0727055484521760}, {-0.0976717740137830, 0.0098625270185677}, + {0.0000000049680599, -0.0000000002522028}, {-0.0109035928448508, -0.0436430333758879}, + {0.2434158601277590, -0.2573192363956319}, {0.1514328173897781, -0.0279083540606013}, + {-0.0000000031677542, -0.0000000031903892}, {0.0109036003822807, 0.0436430239877767}, + {-0.2434158919387226, 0.2573193062054900}, {-0.1514327898988280, 0.0279083300282760}, + {0.0000000060975568, -0.0000000048858413}, {-0.0432014349179432, 0.1174170187419732}, + {0.2959873986513963, 0.2340862748684743}, {0.0045983634023068, -0.0891915655445241}, + {-0.0000000099384690, 0.0000000050768091}, {0.0432014425090816, -0.1174170397799131}, + {-0.2959876001950912, -0.2340864466551855}, {-0.0045983613371922, 0.0891915833111229}, + {0.0000016655959835, 0.0000017510195859}, {0.0000018408257708, 0.0000019352395254}, + {0.0000020344974885, 0.0000021388480224}, {0.0000022485533513, 0.0000023638874892}, + {0.0000024851401929, 0.0000026126155658}, {0.0000027466327025, 0.0000028875282801}, + {0.0000030356550337, 0.0000031913849538}, {0.0000033551087476, 0.0000035272367046}, + {0.0000037082017763, 0.0000038984574394}, {0.0000040984814056, 0.0000043087762732}, + {0.0000045298707477, 0.0000047623190661}, {0.0000050067058872, 0.0000052636459618}, + {0.0000055337849138, 0.0000058178020289}, {0.0000061164112085, 0.0000064303654764}, + {0.0000067604539039, 0.0000071075084013}, {0.0000074724020943, 0.0000078560559307}, + {0.0000082594355244, 0.0000086835597465}, {0.0000091294975934, 0.0000095983747877}, + {0.0000100913766411, 0.0000106097473689}, {0.0000111547974693, 0.0000117279070898}, + {0.0000123305245859, 0.0000129641777091}, {0.0000136304715470, 0.0000143310953580}, + {0.0000150678278004, 0.0000158425392021}, {0.0000166571982603, 0.0000175138769245}, + {0.0000184147567372, 0.0000193621318143}, {0.0000203584206422, 0.0000214061634153}, + {0.0000225080396905, 0.0000236668674923}, {0.0000248856156575, 0.0000261674071580}, + {0.0000275155354747, 0.0000289334644421}, {0.0000304248457634, 0.0000319935224187}, + {0.0000336435462405, 0.0000353791820137}, {0.0000372049283901, 0.0000391255195714}, + {0.0000411459477057, 0.0000432714781975}, {0.0000455076526162, 0.0000478603236690}, + {0.0000503356501508, 0.0000529401384310}, {0.0000556806447093, 0.0000585643969985}, + {0.0000615990320267, 0.0000647925948627}, {0.0000681535873045, 0.0000716909738337}, + {0.0000754142226143, 0.0000793333325486}, {0.0000834588617513, 0.0000878019601639}, + {0.0000923744145238, 0.0000971886723857}, {0.0001022578998667, 0.0001075960100657}, + {0.0001132177151285, 0.0001191385825089}, {0.0001253750821688, 0.0001319446346404}, + {0.0001388656931299, 0.0001461577886013}, {0.0001538416116707, 0.0001619390752429}, + {0.0001704734126210, 0.0001794692466348}, {0.0001889526839861, 0.0001989514226639}, + {0.0002094948352964, 0.0002206141669598}, {0.0002323424532407, 0.0002447148917575}, + {0.0002577688660120, 0.0002715440711772}, {0.0002860827366003, 0.0003014297283084}, + {0.0003176328473230, 0.0003347429028048}, {0.0003528139319169, 0.0003719036523160}, + {0.0003920733033433, 0.0004133883348634}, {0.0004359184355265, 0.0004597378235472}, + {0.0004849257498879, 0.0005115667128724}, {0.0005397507675994, 0.0005695742010076}, + {0.0006011395651476, 0.0006345564732465}, {0.0006699419202639, 0.0007074208158414}, + {0.0007471264573715, 0.0007892012568016}, {0.0008337973421338, 0.0008810768845168}, + {0.0009312133317734, 0.0009843916165643}, {0.0010408090615384, 0.0011006761144741}, + {0.0011642174877366, 0.0012316721297047}, {0.0013032951060666, 0.0013793575565867}, + {0.0014601478141137, 0.0015459723496944}, {0.0016371562939457, 0.0017340444045349}, + {0.0018370013548900, 0.0019464124264495}, {0.0020626839266792, 0.0021862431396714}, + {0.0023175384724405, 0.0024570389239040}, {0.0026052331032675, 0.0027626284949018}, + {0.0029297492028134, 0.0031071332870231}, {0.0032953300104885, 0.0034948945386015}, + {0.0037063829897922, 0.0039303453746640}, {0.0041673162235799, 0.0044178042896882}, + {0.0046822795025145, 0.0049611566395348}, {0.0052547768360158, 0.0055633838800482}, + {0.0058870982291137, 0.0062258836182806}, {0.0065795106541396, 0.0069475113366125}}; std::vector stress(expected_stress.size(), 0); - std::complex * d_becp = nullptr, * d_dbecp = nullptr; - double * d_wg = nullptr, * d_deeq = nullptr, * d_stress = nullptr; - double * d_ekb = nullptr, * d_qq_nt = nullptr; - int * d_atom_nh = nullptr, * d_atom_na = nullptr; + std::complex*d_becp = nullptr, *d_dbecp = nullptr; + double *d_wg = nullptr, *d_deeq = nullptr, *d_stress = nullptr; + double *d_ekb = nullptr, *d_qq_nt = nullptr; + int *d_atom_nh = nullptr, *d_atom_na = nullptr; resmem_zd_op()(d_becp, becp.size()); resmem_zd_op()(d_dbecp, dbecp.size()); syncmem_z2z_h2d_op()(d_becp, becp.data(), becp.size()); @@ -286,7 +3999,8 @@ TEST(TestSrcPWStressMultiDevice, cal_stress_nl_op_gpu) syncmem_d2d_d2h_op()(stress.data(), d_stress, stress.size()); - for (int ii = 0; ii < stress.size(); ii++) { + for (int ii = 0; ii < stress.size(); ii++) + { EXPECT_LT(fabs(stress[ii] - expected_stress[ii]), 6e-5); } diff --git a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/veff_op_test.cpp b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/veff_op_test.cpp index 56c96157fd..a389e32514 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/veff_op_test.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/veff_op_test.cpp @@ -1,6 +1,6 @@ #include "module_hamilt_pw/hamilt_pwdft/kernels/veff_op.h" -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/memory_op.h" #include #include @@ -12,23 +12,2290 @@ class TestModuleHamiltVeff : public ::testing::Test // xx = tf.random.uniform([100], minval=-4, maxval=4, dtype = tf.float64) const int size = 1728; - const std::vector in = {-13.9679, -9.92342, -3.673, -1.07388, -0.366571, -0.174409, -0.143041, -0.174409, -0.366571, -1.07388, -3.673, -9.92342, -9.92342, -5.06419, -1.6847, -0.691528, -0.476143, -0.499872, -0.499872, -0.476143, -0.691528, -1.6847, -5.06419, -9.92342, -3.673, -1.6847, -0.836931, -0.691528, -0.887204, -1.01474, -0.887204, -0.691528, -0.836931, -1.6847, -3.673, -5.02211, -1.07388, -0.691528, -0.691528, -1.07388, -1.58779, -1.58779, -1.07388, -0.691528, -0.691528, -1.07388, -1.58779, -1.58779, -0.366571, -0.476143, -0.887204, -1.58779, -2.04466, -1.58779, -0.887204, -0.476143, -0.366571, -0.480864, -0.537066, -0.480864, -0.174409, -0.499872, -1.01474, -1.58779, -1.58779, -1.01474, -0.499872, -0.174409, -0.0919512, -0.0594809, -0.0594809, -0.0919512, -0.143041, -0.499872, -0.887204, -1.07388, -0.887204, -0.499872, -0.143041, 0.0447824, 0.129747, 0.182295, 0.129747, 0.0447824, -0.174409, -0.476143, -0.691528, -0.691528, -0.476143, -0.174409, 0.0447824, 0.211284, 0.280896, 0.280896, 0.211284, 0.0447824, -0.366571, -0.691528, -0.836931, -0.691528, -0.366571, -0.0919512, 0.129747, 0.280896, 0.297358, 0.280896, 0.129747, -0.0919512, -1.07388, -1.6847, -1.6847, -1.07388, -0.480864, -0.0594809, 0.182295, 0.280896, 0.280896, 0.182295, -0.0594809, -0.480864, -3.673, -5.06419, -3.673, -1.58779, -0.537066, -0.0594809, 0.129747, 0.211284, 0.129747, -0.0594809, -0.537066, -1.58779, -9.92342, -9.92342, -5.02211, -1.58779, -0.480864, -0.0919512, 0.0447824, 0.0447824, -0.0919512, -0.480864, -1.58779, -5.02211, -9.92342, -5.06419, -1.6847, -0.691528, -0.476143, -0.499872, -0.499872, -0.476143, -0.691528, -1.6847, -5.06419, -9.92342, -5.06419, -2.14855, -0.973263, -0.836931, -1.10037, -1.27162, -1.10037, -0.836931, -0.973263, -2.14855, -5.06419, -7.02091, -1.6847, -0.973263, -0.973263, -1.6847, -2.70886, -2.70886, -1.6847, -0.973263, -0.973263, -1.6847, -2.70886, -2.70886, -0.691528, -0.836931, -1.6847, -3.673, -5.02211, -3.673, -1.6847, -0.836931, -0.691528, -0.887204, -1.01474, -0.887204, -0.476143, -1.10037, -2.70886, -5.02211, -5.02211, -2.70886, -1.10037, -0.476143, -0.303563, -0.311375, -0.311375, -0.303563, -0.499872, -1.27162, -2.70886, -3.673, -2.70886, -1.27162, -0.499872, -0.135076, -0.0191085, 0.0374759, -0.0191085, -0.135076, -0.499872, -1.10037, -1.6847, -1.6847, -1.10037, -0.499872, -0.0969657, 0.0969773, 0.199213, 0.199213, 0.0969773, -0.0969657, -0.476143, -0.836931, -0.973263, -0.836931, -0.476143, -0.135076, 0.0969773, 0.255664, 0.291167, 0.255664, 0.0969773, -0.135076, -0.691528, -0.973263, -0.973263, -0.691528, -0.303563, -0.0191085, 0.199213, 0.291167, 0.291167, 0.199213, -0.0191085, -0.303563, -1.6847, -2.14855, -1.6847, -0.887204, -0.311375, 0.0374759, 0.199213, 0.255664, 0.199213, 0.0374759, -0.311375, -0.887204, -5.06419, -5.06419, -2.70886, -1.01474, -0.311375, -0.0191085, 0.0969773, 0.0969773, -0.0191085, -0.311375, -1.01474, -2.70886, -9.92342, -7.02091, -2.70886, -0.887204, -0.303563, -0.135076, -0.0969657, -0.135076, -0.303563, -0.887204, -2.70886, -7.02091, -3.673, -1.6847, -0.836931, -0.691528, -0.887204, -1.01474, -0.887204, -0.691528, -0.836931, -1.6847, -3.673, -5.02211, -1.6847, -0.973263, -0.973263, -1.6847, -2.70886, -2.70886, -1.6847, -0.973263, -0.973263, -1.6847, -2.70886, -2.70886, -0.836931, -0.973263, -2.14855, -5.06419, -7.02091, -5.06419, -2.14855, -0.973263, -0.836931, -1.10037, -1.27162, -1.10037, -0.691528, -1.6847, -5.06419, -9.92342, -9.92342, -5.06419, -1.6847, -0.691528, -0.476143, -0.499872, -0.499872, -0.476143, -0.887204, -2.70886, -7.02091, -9.92342, -7.02091, -2.70886, -0.887204, -0.303563, -0.135076, -0.0969657, -0.135076, -0.303563, -1.01474, -2.70886, -5.06419, -5.06419, -2.70886, -1.01474, -0.311375, -0.0191085, 0.0969773, 0.0969773, -0.0191085, -0.311375, -0.887204, -1.6847, -2.14855, -1.6847, -0.887204, -0.311375, 0.0374759, 0.199213, 0.255664, 0.199213, 0.0374759, -0.311375, -0.691528, -0.973263, -0.973263, -0.691528, -0.303563, -0.0191085, 0.199213, 0.291167, 0.291167, 0.199213, -0.0191085, -0.303563, -0.836931, -0.973263, -0.836931, -0.476143, -0.135076, 0.0969773, 0.255664, 0.291167, 0.255664, 0.0969773, -0.135076, -0.476143, -1.6847, -1.6847, -1.10037, -0.499872, -0.0969657, 0.0969773, 0.199213, 0.199213, 0.0969773, -0.0969657, -0.499872, -1.10037, -3.673, -2.70886, -1.27162, -0.499872, -0.135076, -0.0191085, 0.0374759, -0.0191085, -0.135076, -0.499872, -1.27162, -2.70886, -5.02211, -2.70886, -1.10037, -0.476143, -0.303563, -0.311375, -0.311375, -0.303563, -0.476143, -1.10037, -2.70886, -5.02211, -1.07388, -0.691528, -0.691528, -1.07388, -1.58779, -1.58779, -1.07388, -0.691528, -0.691528, -1.07388, -1.58779, -1.58779, -0.691528, -0.836931, -1.6847, -3.673, -5.02211, -3.673, -1.6847, -0.836931, -0.691528, -0.887204, -1.01474, -0.887204, -0.691528, -1.6847, -5.06419, -9.92342, -9.92342, -5.06419, -1.6847, -0.691528, -0.476143, -0.499872, -0.499872, -0.476143, -1.07388, -3.673, -9.92342, -13.9679, -9.92342, -3.673, -1.07388, -0.366571, -0.174409, -0.143041, -0.174409, -0.366571, -1.58779, -5.02211, -9.92342, -9.92342, -5.02211, -1.58779, -0.480864, -0.0919512, 0.0447824, 0.0447824, -0.0919512, -0.480864, -1.58779, -3.673, -5.06419, -3.673, -1.58779, -0.537066, -0.0594809, 0.129747, 0.211284, 0.129747, -0.0594809, -0.537066, -1.07388, -1.6847, -1.6847, -1.07388, -0.480864, -0.0594809, 0.182295, 0.280896, 0.280896, 0.182295, -0.0594809, -0.480864, -0.691528, -0.836931, -0.691528, -0.366571, -0.0919512, 0.129747, 0.280896, 0.297358, 0.280896, 0.129747, -0.0919512, -0.366571, -0.691528, -0.691528, -0.476143, -0.174409, 0.0447824, 0.211284, 0.280896, 0.280896, 0.211284, 0.0447824, -0.174409, -0.476143, -1.07388, -0.887204, -0.499872, -0.143041, 0.0447824, 0.129747, 0.182295, 0.129747, 0.0447824, -0.143041, -0.499872, -0.887204, -1.58779, -1.01474, -0.499872, -0.174409, -0.0919512, -0.0594809, -0.0594809, -0.0919512, -0.174409, -0.499872, -1.01474, -1.58779, -1.58779, -0.887204, -0.476143, -0.366571, -0.480864, -0.537066, -0.480864, -0.366571, -0.476143, -0.887204, -1.58779, -2.04466, -0.366571, -0.476143, -0.887204, -1.58779, -2.04466, -1.58779, -0.887204, -0.476143, -0.366571, -0.480864, -0.537066, -0.480864, -0.476143, -1.10037, -2.70886, -5.02211, -5.02211, -2.70886, -1.10037, -0.476143, -0.303563, -0.311375, -0.311375, -0.303563, -0.887204, -2.70886, -7.02091, -9.92342, -7.02091, -2.70886, -0.887204, -0.303563, -0.135076, -0.0969657, -0.135076, -0.303563, -1.58779, -5.02211, -9.92342, -9.92342, -5.02211, -1.58779, -0.480864, -0.0919512, 0.0447824, 0.0447824, -0.0919512, -0.480864, -2.04466, -5.02211, -7.02091, -5.02211, -2.04466, -0.65989, -0.117171, 0.0983211, 0.199106, 0.0983211, -0.117171, -0.65989, -1.58779, -2.70886, -2.70886, -1.58779, -0.65989, -0.11226, 0.140075, 0.280147, 0.280147, 0.140075, -0.11226, -0.65989, -0.887204, -1.10037, -0.887204, -0.480864, -0.117171, 0.140075, 0.278419, 0.328987, 0.278419, 0.140075, -0.117171, -0.480864, -0.476143, -0.476143, -0.303563, -0.0919512, 0.0983211, 0.280147, 0.328987, 0.328987, 0.280147, 0.0983211, -0.0919512, -0.303563, -0.366571, -0.303563, -0.135076, 0.0447824, 0.199106, 0.280147, 0.278419, 0.280147, 0.199106, 0.0447824, -0.135076, -0.303563, -0.480864, -0.311375, -0.0969657, 0.0447824, 0.0983211, 0.140075, 0.140075, 0.0983211, 0.0447824, -0.0969657, -0.311375, -0.480864, -0.537066, -0.311375, -0.135076, -0.0919512, -0.117171, -0.11226, -0.117171, -0.0919512, -0.135076, -0.311375, -0.537066, -0.65989, -0.480864, -0.303563, -0.303563, -0.480864, -0.65989, -0.65989, -0.480864, -0.303563, -0.303563, -0.480864, -0.65989, -0.65989, -0.174409, -0.499872, -1.01474, -1.58779, -1.58779, -1.01474, -0.499872, -0.174409, -0.0919512, -0.0594809, -0.0594809, -0.0919512, -0.499872, -1.27162, -2.70886, -3.673, -2.70886, -1.27162, -0.499872, -0.135076, -0.0191085, 0.0374759, -0.0191085, -0.135076, -1.01474, -2.70886, -5.06419, -5.06419, -2.70886, -1.01474, -0.311375, -0.0191085, 0.0969773, 0.0969773, -0.0191085, -0.311375, -1.58779, -3.673, -5.06419, -3.673, -1.58779, -0.537066, -0.0594809, 0.129747, 0.211284, 0.129747, -0.0594809, -0.537066, -1.58779, -2.70886, -2.70886, -1.58779, -0.65989, -0.11226, 0.140075, 0.280147, 0.280147, 0.140075, -0.11226, -0.65989, -1.01474, -1.27162, -1.01474, -0.537066, -0.11226, 0.137908, 0.269108, 0.358109, 0.269108, 0.137908, -0.11226, -0.537066, -0.499872, -0.499872, -0.311375, -0.0594809, 0.140075, 0.269108, 0.356482, 0.356482, 0.269108, 0.140075, -0.0594809, -0.311375, -0.174409, -0.135076, -0.0191085, 0.129747, 0.280147, 0.358109, 0.356482, 0.358109, 0.280147, 0.129747, -0.0191085, -0.135076, -0.0919512, -0.0191085, 0.0969773, 0.211284, 0.280147, 0.269108, 0.269108, 0.280147, 0.211284, 0.0969773, -0.0191085, -0.0919512, -0.0594809, 0.0374759, 0.0969773, 0.129747, 0.140075, 0.137908, 0.140075, 0.129747, 0.0969773, 0.0374759, -0.0594809, -0.117171, -0.0594809, -0.0191085, -0.0191085, -0.0594809, -0.11226, -0.11226, -0.0594809, -0.0191085, -0.0191085, -0.0594809, -0.11226, -0.11226, -0.0919512, -0.135076, -0.311375, -0.537066, -0.65989, -0.537066, -0.311375, -0.135076, -0.0919512, -0.117171, -0.11226, -0.117171, -0.143041, -0.499872, -0.887204, -1.07388, -0.887204, -0.499872, -0.143041, 0.0447824, 0.129747, 0.182295, 0.129747, 0.0447824, -0.499872, -1.10037, -1.6847, -1.6847, -1.10037, -0.499872, -0.0969657, 0.0969773, 0.199213, 0.199213, 0.0969773, -0.0969657, -0.887204, -1.6847, -2.14855, -1.6847, -0.887204, -0.311375, 0.0374759, 0.199213, 0.255664, 0.199213, 0.0374759, -0.311375, -1.07388, -1.6847, -1.6847, -1.07388, -0.480864, -0.0594809, 0.182295, 0.280896, 0.280896, 0.182295, -0.0594809, -0.480864, -0.887204, -1.10037, -0.887204, -0.480864, -0.117171, 0.140075, 0.278419, 0.328987, 0.278419, 0.140075, -0.117171, -0.480864, -0.499872, -0.499872, -0.311375, -0.0594809, 0.140075, 0.269108, 0.356482, 0.356482, 0.269108, 0.140075, -0.0594809, -0.311375, -0.143041, -0.0969657, 0.0374759, 0.182295, 0.278419, 0.356482, 0.395427, 0.356482, 0.278419, 0.182295, 0.0374759, -0.0969657, 0.0447824, 0.0969773, 0.199213, 0.280896, 0.328987, 0.356482, 0.356482, 0.328987, 0.280896, 0.199213, 0.0969773, 0.0447824, 0.129747, 0.199213, 0.255664, 0.280896, 0.278419, 0.269108, 0.278419, 0.280896, 0.255664, 0.199213, 0.129747, 0.0983211, 0.182295, 0.199213, 0.199213, 0.182295, 0.140075, 0.140075, 0.182295, 0.199213, 0.199213, 0.182295, 0.140075, 0.140075, 0.129747, 0.0969773, 0.0374759, -0.0594809, -0.117171, -0.0594809, 0.0374759, 0.0969773, 0.129747, 0.140075, 0.137908, 0.140075, 0.0447824, -0.0969657, -0.311375, -0.480864, -0.480864, -0.311375, -0.0969657, 0.0447824, 0.0983211, 0.140075, 0.140075, 0.0983211, -0.174409, -0.476143, -0.691528, -0.691528, -0.476143, -0.174409, 0.0447824, 0.211284, 0.280896, 0.280896, 0.211284, 0.0447824, -0.476143, -0.836931, -0.973263, -0.836931, -0.476143, -0.135076, 0.0969773, 0.255664, 0.291167, 0.255664, 0.0969773, -0.135076, -0.691528, -0.973263, -0.973263, -0.691528, -0.303563, -0.0191085, 0.199213, 0.291167, 0.291167, 0.199213, -0.0191085, -0.303563, -0.691528, -0.836931, -0.691528, -0.366571, -0.0919512, 0.129747, 0.280896, 0.297358, 0.280896, 0.129747, -0.0919512, -0.366571, -0.476143, -0.476143, -0.303563, -0.0919512, 0.0983211, 0.280147, 0.328987, 0.328987, 0.280147, 0.0983211, -0.0919512, -0.303563, -0.174409, -0.135076, -0.0191085, 0.129747, 0.280147, 0.358109, 0.356482, 0.358109, 0.280147, 0.129747, -0.0191085, -0.135076, 0.0447824, 0.0969773, 0.199213, 0.280896, 0.328987, 0.356482, 0.356482, 0.328987, 0.280896, 0.199213, 0.0969773, 0.0447824, 0.211284, 0.255664, 0.291167, 0.297358, 0.328987, 0.358109, 0.328987, 0.297358, 0.291167, 0.255664, 0.211284, 0.199106, 0.280896, 0.291167, 0.291167, 0.280896, 0.280147, 0.280147, 0.280896, 0.291167, 0.291167, 0.280896, 0.280147, 0.280147, 0.280896, 0.255664, 0.199213, 0.129747, 0.0983211, 0.129747, 0.199213, 0.255664, 0.280896, 0.278419, 0.269108, 0.278419, 0.211284, 0.0969773, -0.0191085, -0.0919512, -0.0919512, -0.0191085, 0.0969773, 0.211284, 0.280147, 0.269108, 0.269108, 0.280147, 0.0447824, -0.135076, -0.303563, -0.366571, -0.303563, -0.135076, 0.0447824, 0.199106, 0.280147, 0.278419, 0.280147, 0.199106, -0.366571, -0.691528, -0.836931, -0.691528, -0.366571, -0.0919512, 0.129747, 0.280896, 0.297358, 0.280896, 0.129747, -0.0919512, -0.691528, -0.973263, -0.973263, -0.691528, -0.303563, -0.0191085, 0.199213, 0.291167, 0.291167, 0.199213, -0.0191085, -0.303563, -0.836931, -0.973263, -0.836931, -0.476143, -0.135076, 0.0969773, 0.255664, 0.291167, 0.255664, 0.0969773, -0.135076, -0.476143, -0.691528, -0.691528, -0.476143, -0.174409, 0.0447824, 0.211284, 0.280896, 0.280896, 0.211284, 0.0447824, -0.174409, -0.476143, -0.366571, -0.303563, -0.135076, 0.0447824, 0.199106, 0.280147, 0.278419, 0.280147, 0.199106, 0.0447824, -0.135076, -0.303563, -0.0919512, -0.0191085, 0.0969773, 0.211284, 0.280147, 0.269108, 0.269108, 0.280147, 0.211284, 0.0969773, -0.0191085, -0.0919512, 0.129747, 0.199213, 0.255664, 0.280896, 0.278419, 0.269108, 0.278419, 0.280896, 0.255664, 0.199213, 0.129747, 0.0983211, 0.280896, 0.291167, 0.291167, 0.280896, 0.280147, 0.280147, 0.280896, 0.291167, 0.291167, 0.280896, 0.280147, 0.280147, 0.297358, 0.291167, 0.255664, 0.211284, 0.199106, 0.211284, 0.255664, 0.291167, 0.297358, 0.328987, 0.358109, 0.328987, 0.280896, 0.199213, 0.0969773, 0.0447824, 0.0447824, 0.0969773, 0.199213, 0.280896, 0.328987, 0.356482, 0.356482, 0.328987, 0.129747, -0.0191085, -0.135076, -0.174409, -0.135076, -0.0191085, 0.129747, 0.280147, 0.358109, 0.356482, 0.358109, 0.280147, -0.0919512, -0.303563, -0.476143, -0.476143, -0.303563, -0.0919512, 0.0983211, 0.280147, 0.328987, 0.328987, 0.280147, 0.0983211, -1.07388, -1.6847, -1.6847, -1.07388, -0.480864, -0.0594809, 0.182295, 0.280896, 0.280896, 0.182295, -0.0594809, -0.480864, -1.6847, -2.14855, -1.6847, -0.887204, -0.311375, 0.0374759, 0.199213, 0.255664, 0.199213, 0.0374759, -0.311375, -0.887204, -1.6847, -1.6847, -1.10037, -0.499872, -0.0969657, 0.0969773, 0.199213, 0.199213, 0.0969773, -0.0969657, -0.499872, -1.10037, -1.07388, -0.887204, -0.499872, -0.143041, 0.0447824, 0.129747, 0.182295, 0.129747, 0.0447824, -0.143041, -0.499872, -0.887204, -0.480864, -0.311375, -0.0969657, 0.0447824, 0.0983211, 0.140075, 0.140075, 0.0983211, 0.0447824, -0.0969657, -0.311375, -0.480864, -0.0594809, 0.0374759, 0.0969773, 0.129747, 0.140075, 0.137908, 0.140075, 0.129747, 0.0969773, 0.0374759, -0.0594809, -0.117171, 0.182295, 0.199213, 0.199213, 0.182295, 0.140075, 0.140075, 0.182295, 0.199213, 0.199213, 0.182295, 0.140075, 0.140075, 0.280896, 0.255664, 0.199213, 0.129747, 0.0983211, 0.129747, 0.199213, 0.255664, 0.280896, 0.278419, 0.269108, 0.278419, 0.280896, 0.199213, 0.0969773, 0.0447824, 0.0447824, 0.0969773, 0.199213, 0.280896, 0.328987, 0.356482, 0.356482, 0.328987, 0.182295, 0.0374759, -0.0969657, -0.143041, -0.0969657, 0.0374759, 0.182295, 0.278419, 0.356482, 0.395427, 0.356482, 0.278419, -0.0594809, -0.311375, -0.499872, -0.499872, -0.311375, -0.0594809, 0.140075, 0.269108, 0.356482, 0.356482, 0.269108, 0.140075, -0.480864, -0.887204, -1.10037, -0.887204, -0.480864, -0.117171, 0.140075, 0.278419, 0.328987, 0.278419, 0.140075, -0.117171, -3.673, -5.06419, -3.673, -1.58779, -0.537066, -0.0594809, 0.129747, 0.211284, 0.129747, -0.0594809, -0.537066, -1.58779, -5.06419, -5.06419, -2.70886, -1.01474, -0.311375, -0.0191085, 0.0969773, 0.0969773, -0.0191085, -0.311375, -1.01474, -2.70886, -3.673, -2.70886, -1.27162, -0.499872, -0.135076, -0.0191085, 0.0374759, -0.0191085, -0.135076, -0.499872, -1.27162, -2.70886, -1.58779, -1.01474, -0.499872, -0.174409, -0.0919512, -0.0594809, -0.0594809, -0.0919512, -0.174409, -0.499872, -1.01474, -1.58779, -0.537066, -0.311375, -0.135076, -0.0919512, -0.117171, -0.11226, -0.117171, -0.0919512, -0.135076, -0.311375, -0.537066, -0.65989, -0.0594809, -0.0191085, -0.0191085, -0.0594809, -0.11226, -0.11226, -0.0594809, -0.0191085, -0.0191085, -0.0594809, -0.11226, -0.11226, 0.129747, 0.0969773, 0.0374759, -0.0594809, -0.117171, -0.0594809, 0.0374759, 0.0969773, 0.129747, 0.140075, 0.137908, 0.140075, 0.211284, 0.0969773, -0.0191085, -0.0919512, -0.0919512, -0.0191085, 0.0969773, 0.211284, 0.280147, 0.269108, 0.269108, 0.280147, 0.129747, -0.0191085, -0.135076, -0.174409, -0.135076, -0.0191085, 0.129747, 0.280147, 0.358109, 0.356482, 0.358109, 0.280147, -0.0594809, -0.311375, -0.499872, -0.499872, -0.311375, -0.0594809, 0.140075, 0.269108, 0.356482, 0.356482, 0.269108, 0.140075, -0.537066, -1.01474, -1.27162, -1.01474, -0.537066, -0.11226, 0.137908, 0.269108, 0.358109, 0.269108, 0.137908, -0.11226, -1.58779, -2.70886, -2.70886, -1.58779, -0.65989, -0.11226, 0.140075, 0.280147, 0.280147, 0.140075, -0.11226, -0.65989, -9.92342, -9.92342, -5.02211, -1.58779, -0.480864, -0.0919512, 0.0447824, 0.0447824, -0.0919512, -0.480864, -1.58779, -5.02211, -9.92342, -7.02091, -2.70886, -0.887204, -0.303563, -0.135076, -0.0969657, -0.135076, -0.303563, -0.887204, -2.70886, -7.02091, -5.02211, -2.70886, -1.10037, -0.476143, -0.303563, -0.311375, -0.311375, -0.303563, -0.476143, -1.10037, -2.70886, -5.02211, -1.58779, -0.887204, -0.476143, -0.366571, -0.480864, -0.537066, -0.480864, -0.366571, -0.476143, -0.887204, -1.58779, -2.04466, -0.480864, -0.303563, -0.303563, -0.480864, -0.65989, -0.65989, -0.480864, -0.303563, -0.303563, -0.480864, -0.65989, -0.65989, -0.0919512, -0.135076, -0.311375, -0.537066, -0.65989, -0.537066, -0.311375, -0.135076, -0.0919512, -0.117171, -0.11226, -0.117171, 0.0447824, -0.0969657, -0.311375, -0.480864, -0.480864, -0.311375, -0.0969657, 0.0447824, 0.0983211, 0.140075, 0.140075, 0.0983211, 0.0447824, -0.135076, -0.303563, -0.366571, -0.303563, -0.135076, 0.0447824, 0.199106, 0.280147, 0.278419, 0.280147, 0.199106, -0.0919512, -0.303563, -0.476143, -0.476143, -0.303563, -0.0919512, 0.0983211, 0.280147, 0.328987, 0.328987, 0.280147, 0.0983211, -0.480864, -0.887204, -1.10037, -0.887204, -0.480864, -0.117171, 0.140075, 0.278419, 0.328987, 0.278419, 0.140075, -0.117171, -1.58779, -2.70886, -2.70886, -1.58779, -0.65989, -0.11226, 0.140075, 0.280147, 0.280147, 0.140075, -0.11226, -0.65989, -5.02211, -7.02091, -5.02211, -2.04466, -0.65989, -0.117171, 0.0983211, 0.199106, 0.0983211, -0.117171, -0.65989, -2.04466}; + const std::vector in + = {-13.9679, -9.92342, -3.673, -1.07388, -0.366571, -0.174409, -0.143041, -0.174409, -0.366571, + -1.07388, -3.673, -9.92342, -9.92342, -5.06419, -1.6847, -0.691528, -0.476143, -0.499872, + -0.499872, -0.476143, -0.691528, -1.6847, -5.06419, -9.92342, -3.673, -1.6847, -0.836931, + -0.691528, -0.887204, -1.01474, -0.887204, -0.691528, -0.836931, -1.6847, -3.673, -5.02211, + -1.07388, -0.691528, -0.691528, -1.07388, -1.58779, -1.58779, -1.07388, -0.691528, -0.691528, + -1.07388, -1.58779, -1.58779, -0.366571, -0.476143, -0.887204, -1.58779, -2.04466, -1.58779, + -0.887204, -0.476143, -0.366571, -0.480864, -0.537066, -0.480864, -0.174409, -0.499872, -1.01474, + -1.58779, -1.58779, -1.01474, -0.499872, -0.174409, -0.0919512, -0.0594809, -0.0594809, -0.0919512, + -0.143041, -0.499872, -0.887204, -1.07388, -0.887204, -0.499872, -0.143041, 0.0447824, 0.129747, + 0.182295, 0.129747, 0.0447824, -0.174409, -0.476143, -0.691528, -0.691528, -0.476143, -0.174409, + 0.0447824, 0.211284, 0.280896, 0.280896, 0.211284, 0.0447824, -0.366571, -0.691528, -0.836931, + -0.691528, -0.366571, -0.0919512, 0.129747, 0.280896, 0.297358, 0.280896, 0.129747, -0.0919512, + -1.07388, -1.6847, -1.6847, -1.07388, -0.480864, -0.0594809, 0.182295, 0.280896, 0.280896, + 0.182295, -0.0594809, -0.480864, -3.673, -5.06419, -3.673, -1.58779, -0.537066, -0.0594809, + 0.129747, 0.211284, 0.129747, -0.0594809, -0.537066, -1.58779, -9.92342, -9.92342, -5.02211, + -1.58779, -0.480864, -0.0919512, 0.0447824, 0.0447824, -0.0919512, -0.480864, -1.58779, -5.02211, + -9.92342, -5.06419, -1.6847, -0.691528, -0.476143, -0.499872, -0.499872, -0.476143, -0.691528, + -1.6847, -5.06419, -9.92342, -5.06419, -2.14855, -0.973263, -0.836931, -1.10037, -1.27162, + -1.10037, -0.836931, -0.973263, -2.14855, -5.06419, -7.02091, -1.6847, -0.973263, -0.973263, + -1.6847, -2.70886, -2.70886, -1.6847, -0.973263, -0.973263, -1.6847, -2.70886, -2.70886, + -0.691528, -0.836931, -1.6847, -3.673, -5.02211, -3.673, -1.6847, -0.836931, -0.691528, + -0.887204, -1.01474, -0.887204, -0.476143, -1.10037, -2.70886, -5.02211, -5.02211, -2.70886, + -1.10037, -0.476143, -0.303563, -0.311375, -0.311375, -0.303563, -0.499872, -1.27162, -2.70886, + -3.673, -2.70886, -1.27162, -0.499872, -0.135076, -0.0191085, 0.0374759, -0.0191085, -0.135076, + -0.499872, -1.10037, -1.6847, -1.6847, -1.10037, -0.499872, -0.0969657, 0.0969773, 0.199213, + 0.199213, 0.0969773, -0.0969657, -0.476143, -0.836931, -0.973263, -0.836931, -0.476143, -0.135076, + 0.0969773, 0.255664, 0.291167, 0.255664, 0.0969773, -0.135076, -0.691528, -0.973263, -0.973263, + -0.691528, -0.303563, -0.0191085, 0.199213, 0.291167, 0.291167, 0.199213, -0.0191085, -0.303563, + -1.6847, -2.14855, -1.6847, -0.887204, -0.311375, 0.0374759, 0.199213, 0.255664, 0.199213, + 0.0374759, -0.311375, -0.887204, -5.06419, -5.06419, -2.70886, -1.01474, -0.311375, -0.0191085, + 0.0969773, 0.0969773, -0.0191085, -0.311375, -1.01474, -2.70886, -9.92342, -7.02091, -2.70886, + -0.887204, -0.303563, -0.135076, -0.0969657, -0.135076, -0.303563, -0.887204, -2.70886, -7.02091, + -3.673, -1.6847, -0.836931, -0.691528, -0.887204, -1.01474, -0.887204, -0.691528, -0.836931, + -1.6847, -3.673, -5.02211, -1.6847, -0.973263, -0.973263, -1.6847, -2.70886, -2.70886, + -1.6847, -0.973263, -0.973263, -1.6847, -2.70886, -2.70886, -0.836931, -0.973263, -2.14855, + -5.06419, -7.02091, -5.06419, -2.14855, -0.973263, -0.836931, -1.10037, -1.27162, -1.10037, + -0.691528, -1.6847, -5.06419, -9.92342, -9.92342, -5.06419, -1.6847, -0.691528, -0.476143, + -0.499872, -0.499872, -0.476143, -0.887204, -2.70886, -7.02091, -9.92342, -7.02091, -2.70886, + -0.887204, -0.303563, -0.135076, -0.0969657, -0.135076, -0.303563, -1.01474, -2.70886, -5.06419, + -5.06419, -2.70886, -1.01474, -0.311375, -0.0191085, 0.0969773, 0.0969773, -0.0191085, -0.311375, + -0.887204, -1.6847, -2.14855, -1.6847, -0.887204, -0.311375, 0.0374759, 0.199213, 0.255664, + 0.199213, 0.0374759, -0.311375, -0.691528, -0.973263, -0.973263, -0.691528, -0.303563, -0.0191085, + 0.199213, 0.291167, 0.291167, 0.199213, -0.0191085, -0.303563, -0.836931, -0.973263, -0.836931, + -0.476143, -0.135076, 0.0969773, 0.255664, 0.291167, 0.255664, 0.0969773, -0.135076, -0.476143, + -1.6847, -1.6847, -1.10037, -0.499872, -0.0969657, 0.0969773, 0.199213, 0.199213, 0.0969773, + -0.0969657, -0.499872, -1.10037, -3.673, -2.70886, -1.27162, -0.499872, -0.135076, -0.0191085, + 0.0374759, -0.0191085, -0.135076, -0.499872, -1.27162, -2.70886, -5.02211, -2.70886, -1.10037, + -0.476143, -0.303563, -0.311375, -0.311375, -0.303563, -0.476143, -1.10037, -2.70886, -5.02211, + -1.07388, -0.691528, -0.691528, -1.07388, -1.58779, -1.58779, -1.07388, -0.691528, -0.691528, + -1.07388, -1.58779, -1.58779, -0.691528, -0.836931, -1.6847, -3.673, -5.02211, -3.673, + -1.6847, -0.836931, -0.691528, -0.887204, -1.01474, -0.887204, -0.691528, -1.6847, -5.06419, + -9.92342, -9.92342, -5.06419, -1.6847, -0.691528, -0.476143, -0.499872, -0.499872, -0.476143, + -1.07388, -3.673, -9.92342, -13.9679, -9.92342, -3.673, -1.07388, -0.366571, -0.174409, + -0.143041, -0.174409, -0.366571, -1.58779, -5.02211, -9.92342, -9.92342, -5.02211, -1.58779, + -0.480864, -0.0919512, 0.0447824, 0.0447824, -0.0919512, -0.480864, -1.58779, -3.673, -5.06419, + -3.673, -1.58779, -0.537066, -0.0594809, 0.129747, 0.211284, 0.129747, -0.0594809, -0.537066, + -1.07388, -1.6847, -1.6847, -1.07388, -0.480864, -0.0594809, 0.182295, 0.280896, 0.280896, + 0.182295, -0.0594809, -0.480864, -0.691528, -0.836931, -0.691528, -0.366571, -0.0919512, 0.129747, + 0.280896, 0.297358, 0.280896, 0.129747, -0.0919512, -0.366571, -0.691528, -0.691528, -0.476143, + -0.174409, 0.0447824, 0.211284, 0.280896, 0.280896, 0.211284, 0.0447824, -0.174409, -0.476143, + -1.07388, -0.887204, -0.499872, -0.143041, 0.0447824, 0.129747, 0.182295, 0.129747, 0.0447824, + -0.143041, -0.499872, -0.887204, -1.58779, -1.01474, -0.499872, -0.174409, -0.0919512, -0.0594809, + -0.0594809, -0.0919512, -0.174409, -0.499872, -1.01474, -1.58779, -1.58779, -0.887204, -0.476143, + -0.366571, -0.480864, -0.537066, -0.480864, -0.366571, -0.476143, -0.887204, -1.58779, -2.04466, + -0.366571, -0.476143, -0.887204, -1.58779, -2.04466, -1.58779, -0.887204, -0.476143, -0.366571, + -0.480864, -0.537066, -0.480864, -0.476143, -1.10037, -2.70886, -5.02211, -5.02211, -2.70886, + -1.10037, -0.476143, -0.303563, -0.311375, -0.311375, -0.303563, -0.887204, -2.70886, -7.02091, + -9.92342, -7.02091, -2.70886, -0.887204, -0.303563, -0.135076, -0.0969657, -0.135076, -0.303563, + -1.58779, -5.02211, -9.92342, -9.92342, -5.02211, -1.58779, -0.480864, -0.0919512, 0.0447824, + 0.0447824, -0.0919512, -0.480864, -2.04466, -5.02211, -7.02091, -5.02211, -2.04466, -0.65989, + -0.117171, 0.0983211, 0.199106, 0.0983211, -0.117171, -0.65989, -1.58779, -2.70886, -2.70886, + -1.58779, -0.65989, -0.11226, 0.140075, 0.280147, 0.280147, 0.140075, -0.11226, -0.65989, + -0.887204, -1.10037, -0.887204, -0.480864, -0.117171, 0.140075, 0.278419, 0.328987, 0.278419, + 0.140075, -0.117171, -0.480864, -0.476143, -0.476143, -0.303563, -0.0919512, 0.0983211, 0.280147, + 0.328987, 0.328987, 0.280147, 0.0983211, -0.0919512, -0.303563, -0.366571, -0.303563, -0.135076, + 0.0447824, 0.199106, 0.280147, 0.278419, 0.280147, 0.199106, 0.0447824, -0.135076, -0.303563, + -0.480864, -0.311375, -0.0969657, 0.0447824, 0.0983211, 0.140075, 0.140075, 0.0983211, 0.0447824, + -0.0969657, -0.311375, -0.480864, -0.537066, -0.311375, -0.135076, -0.0919512, -0.117171, -0.11226, + -0.117171, -0.0919512, -0.135076, -0.311375, -0.537066, -0.65989, -0.480864, -0.303563, -0.303563, + -0.480864, -0.65989, -0.65989, -0.480864, -0.303563, -0.303563, -0.480864, -0.65989, -0.65989, + -0.174409, -0.499872, -1.01474, -1.58779, -1.58779, -1.01474, -0.499872, -0.174409, -0.0919512, + -0.0594809, -0.0594809, -0.0919512, -0.499872, -1.27162, -2.70886, -3.673, -2.70886, -1.27162, + -0.499872, -0.135076, -0.0191085, 0.0374759, -0.0191085, -0.135076, -1.01474, -2.70886, -5.06419, + -5.06419, -2.70886, -1.01474, -0.311375, -0.0191085, 0.0969773, 0.0969773, -0.0191085, -0.311375, + -1.58779, -3.673, -5.06419, -3.673, -1.58779, -0.537066, -0.0594809, 0.129747, 0.211284, + 0.129747, -0.0594809, -0.537066, -1.58779, -2.70886, -2.70886, -1.58779, -0.65989, -0.11226, + 0.140075, 0.280147, 0.280147, 0.140075, -0.11226, -0.65989, -1.01474, -1.27162, -1.01474, + -0.537066, -0.11226, 0.137908, 0.269108, 0.358109, 0.269108, 0.137908, -0.11226, -0.537066, + -0.499872, -0.499872, -0.311375, -0.0594809, 0.140075, 0.269108, 0.356482, 0.356482, 0.269108, + 0.140075, -0.0594809, -0.311375, -0.174409, -0.135076, -0.0191085, 0.129747, 0.280147, 0.358109, + 0.356482, 0.358109, 0.280147, 0.129747, -0.0191085, -0.135076, -0.0919512, -0.0191085, 0.0969773, + 0.211284, 0.280147, 0.269108, 0.269108, 0.280147, 0.211284, 0.0969773, -0.0191085, -0.0919512, + -0.0594809, 0.0374759, 0.0969773, 0.129747, 0.140075, 0.137908, 0.140075, 0.129747, 0.0969773, + 0.0374759, -0.0594809, -0.117171, -0.0594809, -0.0191085, -0.0191085, -0.0594809, -0.11226, -0.11226, + -0.0594809, -0.0191085, -0.0191085, -0.0594809, -0.11226, -0.11226, -0.0919512, -0.135076, -0.311375, + -0.537066, -0.65989, -0.537066, -0.311375, -0.135076, -0.0919512, -0.117171, -0.11226, -0.117171, + -0.143041, -0.499872, -0.887204, -1.07388, -0.887204, -0.499872, -0.143041, 0.0447824, 0.129747, + 0.182295, 0.129747, 0.0447824, -0.499872, -1.10037, -1.6847, -1.6847, -1.10037, -0.499872, + -0.0969657, 0.0969773, 0.199213, 0.199213, 0.0969773, -0.0969657, -0.887204, -1.6847, -2.14855, + -1.6847, -0.887204, -0.311375, 0.0374759, 0.199213, 0.255664, 0.199213, 0.0374759, -0.311375, + -1.07388, -1.6847, -1.6847, -1.07388, -0.480864, -0.0594809, 0.182295, 0.280896, 0.280896, + 0.182295, -0.0594809, -0.480864, -0.887204, -1.10037, -0.887204, -0.480864, -0.117171, 0.140075, + 0.278419, 0.328987, 0.278419, 0.140075, -0.117171, -0.480864, -0.499872, -0.499872, -0.311375, + -0.0594809, 0.140075, 0.269108, 0.356482, 0.356482, 0.269108, 0.140075, -0.0594809, -0.311375, + -0.143041, -0.0969657, 0.0374759, 0.182295, 0.278419, 0.356482, 0.395427, 0.356482, 0.278419, + 0.182295, 0.0374759, -0.0969657, 0.0447824, 0.0969773, 0.199213, 0.280896, 0.328987, 0.356482, + 0.356482, 0.328987, 0.280896, 0.199213, 0.0969773, 0.0447824, 0.129747, 0.199213, 0.255664, + 0.280896, 0.278419, 0.269108, 0.278419, 0.280896, 0.255664, 0.199213, 0.129747, 0.0983211, + 0.182295, 0.199213, 0.199213, 0.182295, 0.140075, 0.140075, 0.182295, 0.199213, 0.199213, + 0.182295, 0.140075, 0.140075, 0.129747, 0.0969773, 0.0374759, -0.0594809, -0.117171, -0.0594809, + 0.0374759, 0.0969773, 0.129747, 0.140075, 0.137908, 0.140075, 0.0447824, -0.0969657, -0.311375, + -0.480864, -0.480864, -0.311375, -0.0969657, 0.0447824, 0.0983211, 0.140075, 0.140075, 0.0983211, + -0.174409, -0.476143, -0.691528, -0.691528, -0.476143, -0.174409, 0.0447824, 0.211284, 0.280896, + 0.280896, 0.211284, 0.0447824, -0.476143, -0.836931, -0.973263, -0.836931, -0.476143, -0.135076, + 0.0969773, 0.255664, 0.291167, 0.255664, 0.0969773, -0.135076, -0.691528, -0.973263, -0.973263, + -0.691528, -0.303563, -0.0191085, 0.199213, 0.291167, 0.291167, 0.199213, -0.0191085, -0.303563, + -0.691528, -0.836931, -0.691528, -0.366571, -0.0919512, 0.129747, 0.280896, 0.297358, 0.280896, + 0.129747, -0.0919512, -0.366571, -0.476143, -0.476143, -0.303563, -0.0919512, 0.0983211, 0.280147, + 0.328987, 0.328987, 0.280147, 0.0983211, -0.0919512, -0.303563, -0.174409, -0.135076, -0.0191085, + 0.129747, 0.280147, 0.358109, 0.356482, 0.358109, 0.280147, 0.129747, -0.0191085, -0.135076, + 0.0447824, 0.0969773, 0.199213, 0.280896, 0.328987, 0.356482, 0.356482, 0.328987, 0.280896, + 0.199213, 0.0969773, 0.0447824, 0.211284, 0.255664, 0.291167, 0.297358, 0.328987, 0.358109, + 0.328987, 0.297358, 0.291167, 0.255664, 0.211284, 0.199106, 0.280896, 0.291167, 0.291167, + 0.280896, 0.280147, 0.280147, 0.280896, 0.291167, 0.291167, 0.280896, 0.280147, 0.280147, + 0.280896, 0.255664, 0.199213, 0.129747, 0.0983211, 0.129747, 0.199213, 0.255664, 0.280896, + 0.278419, 0.269108, 0.278419, 0.211284, 0.0969773, -0.0191085, -0.0919512, -0.0919512, -0.0191085, + 0.0969773, 0.211284, 0.280147, 0.269108, 0.269108, 0.280147, 0.0447824, -0.135076, -0.303563, + -0.366571, -0.303563, -0.135076, 0.0447824, 0.199106, 0.280147, 0.278419, 0.280147, 0.199106, + -0.366571, -0.691528, -0.836931, -0.691528, -0.366571, -0.0919512, 0.129747, 0.280896, 0.297358, + 0.280896, 0.129747, -0.0919512, -0.691528, -0.973263, -0.973263, -0.691528, -0.303563, -0.0191085, + 0.199213, 0.291167, 0.291167, 0.199213, -0.0191085, -0.303563, -0.836931, -0.973263, -0.836931, + -0.476143, -0.135076, 0.0969773, 0.255664, 0.291167, 0.255664, 0.0969773, -0.135076, -0.476143, + -0.691528, -0.691528, -0.476143, -0.174409, 0.0447824, 0.211284, 0.280896, 0.280896, 0.211284, + 0.0447824, -0.174409, -0.476143, -0.366571, -0.303563, -0.135076, 0.0447824, 0.199106, 0.280147, + 0.278419, 0.280147, 0.199106, 0.0447824, -0.135076, -0.303563, -0.0919512, -0.0191085, 0.0969773, + 0.211284, 0.280147, 0.269108, 0.269108, 0.280147, 0.211284, 0.0969773, -0.0191085, -0.0919512, + 0.129747, 0.199213, 0.255664, 0.280896, 0.278419, 0.269108, 0.278419, 0.280896, 0.255664, + 0.199213, 0.129747, 0.0983211, 0.280896, 0.291167, 0.291167, 0.280896, 0.280147, 0.280147, + 0.280896, 0.291167, 0.291167, 0.280896, 0.280147, 0.280147, 0.297358, 0.291167, 0.255664, + 0.211284, 0.199106, 0.211284, 0.255664, 0.291167, 0.297358, 0.328987, 0.358109, 0.328987, + 0.280896, 0.199213, 0.0969773, 0.0447824, 0.0447824, 0.0969773, 0.199213, 0.280896, 0.328987, + 0.356482, 0.356482, 0.328987, 0.129747, -0.0191085, -0.135076, -0.174409, -0.135076, -0.0191085, + 0.129747, 0.280147, 0.358109, 0.356482, 0.358109, 0.280147, -0.0919512, -0.303563, -0.476143, + -0.476143, -0.303563, -0.0919512, 0.0983211, 0.280147, 0.328987, 0.328987, 0.280147, 0.0983211, + -1.07388, -1.6847, -1.6847, -1.07388, -0.480864, -0.0594809, 0.182295, 0.280896, 0.280896, + 0.182295, -0.0594809, -0.480864, -1.6847, -2.14855, -1.6847, -0.887204, -0.311375, 0.0374759, + 0.199213, 0.255664, 0.199213, 0.0374759, -0.311375, -0.887204, -1.6847, -1.6847, -1.10037, + -0.499872, -0.0969657, 0.0969773, 0.199213, 0.199213, 0.0969773, -0.0969657, -0.499872, -1.10037, + -1.07388, -0.887204, -0.499872, -0.143041, 0.0447824, 0.129747, 0.182295, 0.129747, 0.0447824, + -0.143041, -0.499872, -0.887204, -0.480864, -0.311375, -0.0969657, 0.0447824, 0.0983211, 0.140075, + 0.140075, 0.0983211, 0.0447824, -0.0969657, -0.311375, -0.480864, -0.0594809, 0.0374759, 0.0969773, + 0.129747, 0.140075, 0.137908, 0.140075, 0.129747, 0.0969773, 0.0374759, -0.0594809, -0.117171, + 0.182295, 0.199213, 0.199213, 0.182295, 0.140075, 0.140075, 0.182295, 0.199213, 0.199213, + 0.182295, 0.140075, 0.140075, 0.280896, 0.255664, 0.199213, 0.129747, 0.0983211, 0.129747, + 0.199213, 0.255664, 0.280896, 0.278419, 0.269108, 0.278419, 0.280896, 0.199213, 0.0969773, + 0.0447824, 0.0447824, 0.0969773, 0.199213, 0.280896, 0.328987, 0.356482, 0.356482, 0.328987, + 0.182295, 0.0374759, -0.0969657, -0.143041, -0.0969657, 0.0374759, 0.182295, 0.278419, 0.356482, + 0.395427, 0.356482, 0.278419, -0.0594809, -0.311375, -0.499872, -0.499872, -0.311375, -0.0594809, + 0.140075, 0.269108, 0.356482, 0.356482, 0.269108, 0.140075, -0.480864, -0.887204, -1.10037, + -0.887204, -0.480864, -0.117171, 0.140075, 0.278419, 0.328987, 0.278419, 0.140075, -0.117171, + -3.673, -5.06419, -3.673, -1.58779, -0.537066, -0.0594809, 0.129747, 0.211284, 0.129747, + -0.0594809, -0.537066, -1.58779, -5.06419, -5.06419, -2.70886, -1.01474, -0.311375, -0.0191085, + 0.0969773, 0.0969773, -0.0191085, -0.311375, -1.01474, -2.70886, -3.673, -2.70886, -1.27162, + -0.499872, -0.135076, -0.0191085, 0.0374759, -0.0191085, -0.135076, -0.499872, -1.27162, -2.70886, + -1.58779, -1.01474, -0.499872, -0.174409, -0.0919512, -0.0594809, -0.0594809, -0.0919512, -0.174409, + -0.499872, -1.01474, -1.58779, -0.537066, -0.311375, -0.135076, -0.0919512, -0.117171, -0.11226, + -0.117171, -0.0919512, -0.135076, -0.311375, -0.537066, -0.65989, -0.0594809, -0.0191085, -0.0191085, + -0.0594809, -0.11226, -0.11226, -0.0594809, -0.0191085, -0.0191085, -0.0594809, -0.11226, -0.11226, + 0.129747, 0.0969773, 0.0374759, -0.0594809, -0.117171, -0.0594809, 0.0374759, 0.0969773, 0.129747, + 0.140075, 0.137908, 0.140075, 0.211284, 0.0969773, -0.0191085, -0.0919512, -0.0919512, -0.0191085, + 0.0969773, 0.211284, 0.280147, 0.269108, 0.269108, 0.280147, 0.129747, -0.0191085, -0.135076, + -0.174409, -0.135076, -0.0191085, 0.129747, 0.280147, 0.358109, 0.356482, 0.358109, 0.280147, + -0.0594809, -0.311375, -0.499872, -0.499872, -0.311375, -0.0594809, 0.140075, 0.269108, 0.356482, + 0.356482, 0.269108, 0.140075, -0.537066, -1.01474, -1.27162, -1.01474, -0.537066, -0.11226, + 0.137908, 0.269108, 0.358109, 0.269108, 0.137908, -0.11226, -1.58779, -2.70886, -2.70886, + -1.58779, -0.65989, -0.11226, 0.140075, 0.280147, 0.280147, 0.140075, -0.11226, -0.65989, + -9.92342, -9.92342, -5.02211, -1.58779, -0.480864, -0.0919512, 0.0447824, 0.0447824, -0.0919512, + -0.480864, -1.58779, -5.02211, -9.92342, -7.02091, -2.70886, -0.887204, -0.303563, -0.135076, + -0.0969657, -0.135076, -0.303563, -0.887204, -2.70886, -7.02091, -5.02211, -2.70886, -1.10037, + -0.476143, -0.303563, -0.311375, -0.311375, -0.303563, -0.476143, -1.10037, -2.70886, -5.02211, + -1.58779, -0.887204, -0.476143, -0.366571, -0.480864, -0.537066, -0.480864, -0.366571, -0.476143, + -0.887204, -1.58779, -2.04466, -0.480864, -0.303563, -0.303563, -0.480864, -0.65989, -0.65989, + -0.480864, -0.303563, -0.303563, -0.480864, -0.65989, -0.65989, -0.0919512, -0.135076, -0.311375, + -0.537066, -0.65989, -0.537066, -0.311375, -0.135076, -0.0919512, -0.117171, -0.11226, -0.117171, + 0.0447824, -0.0969657, -0.311375, -0.480864, -0.480864, -0.311375, -0.0969657, 0.0447824, 0.0983211, + 0.140075, 0.140075, 0.0983211, 0.0447824, -0.135076, -0.303563, -0.366571, -0.303563, -0.135076, + 0.0447824, 0.199106, 0.280147, 0.278419, 0.280147, 0.199106, -0.0919512, -0.303563, -0.476143, + -0.476143, -0.303563, -0.0919512, 0.0983211, 0.280147, 0.328987, 0.328987, 0.280147, 0.0983211, + -0.480864, -0.887204, -1.10037, -0.887204, -0.480864, -0.117171, 0.140075, 0.278419, 0.328987, + 0.278419, 0.140075, -0.117171, -1.58779, -2.70886, -2.70886, -1.58779, -0.65989, -0.11226, + 0.140075, 0.280147, 0.280147, 0.140075, -0.11226, -0.65989, -5.02211, -7.02091, -5.02211, + -2.04466, -0.65989, -0.117171, 0.0983211, 0.199106, 0.0983211, -0.117171, -0.65989, -2.04466}; - const std::vector > out = {{2.16277, 0}, {2.17701, 0}, {2.14383, 0}, {1.92793, 0}, {1.51507, 0}, {1.08798, 0}, {0.905261, 0}, {1.08798, 0}, {1.51507, 0}, {1.92793, 0}, {2.14383, 0}, {2.17701, 0}, {2.17701, 0}, {2.16623, 0}, {2.03322, 0}, {1.69928, 0}, {1.25388, 0}, {0.930725, 0}, {0.930725, 0}, {1.25388, 0}, {1.69928, 0}, {2.03322, 0}, {2.16623, 0}, {2.17701, 0}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 0}, {0.981652, 0}, {0.824264, 0}, {0.981652, 0}, {1.36223, 0}, {1.76522, 0}, {2.03322, 0}, {2.14383, 0}, {2.16623, 0}, {1.92793, 0}, {1.69928, 0}, {1.36223, 0}, {1.00712, 0}, {0.775362, 0}, {0.775362, 0}, {1.00712, 0}, {1.36223, 0}, {1.69928, 0}, {1.92793, 0}, {2.03322, 0}, {2.03322, 0}, {1.51507, 0}, {1.25388, 0}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, {0.775362, 0}, {0.981652, 0}, {1.25388, 0}, {1.51507, 0}, {1.69928, 0}, {1.76522, 0}, {1.69928, 0}, {1.08798, 0}, {0.930725, 0}, {0.824264, 0}, {0.775362, 0}, {0.775362, 0}, {0.824264, 0}, {0.930725, 0}, {1.08798, 0}, {1.25388, 0}, {1.36223, 0}, {1.36223, 0}, {1.25388, 0}, {0.905261, 0}, {0.930725, 0}, {0.981652, 0}, {1.00712, 0}, {0.981652, 0}, {0.930725, 0}, {0.905261, 0}, {0.930725, 0}, {0.981652, 0}, {1.00712, 0}, {0.981652, 0}, {0.930725, 0}, {1.08798, 0}, {1.25388, 0}, {1.36223, 0}, {1.36223, 0}, {1.25388, 0}, {1.08798, 0}, {0.930725, 0}, {0.824264, 0}, {0.775362, 0}, {0.775362, 0}, {0.824264, 0}, {0.930725, 0}, {1.51507, 0}, {1.69928, 0}, {1.76522, 0}, {1.69928, 0}, {1.51507, 0}, {1.25388, 0}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, {0.775362, 0}, {0.981652, 0}, {1.25388, 0}, {1.92793, 0}, {2.03322, 0}, {2.03322, 0}, {1.92793, 0}, {1.69928, 0}, {1.36223, 0}, {1.00712, 0}, {0.775362, 0}, {0.775362, 0}, {1.00712, 0}, {1.36223, 0}, {1.69928, 0}, {2.14383, 0}, {2.16623, 0}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 0}, {0.981652, 0}, {0.824264, 0}, {0.981652, 0}, {1.36223, 0}, {1.76522, 0}, {2.03322, 0}, {2.17701, 0}, {2.17701, 0}, {2.16623, 0}, {2.03322, 0}, {1.69928, 0}, {1.25388, 0}, {0.930725, 0}, {0.930725, 0}, {1.25388, 0}, {1.69928, 0}, {2.03322, 0}, {2.16623, 0}, {2.17701, 0}, {2.16623, 0}, {2.03322, 0}, {1.69928, 0}, {1.25388, 0}, {0.930725, 0}, {0.930725, 0}, {1.25388, 0}, {1.69928, 0}, {2.03322, 0}, {2.16623, 0}, {2.17701, 0}, {2.16623, 0}, {2.07555, 0}, {1.82256, 0}, {1.42048, 0}, {1.03162, 0}, {0.869317, 0}, {1.03162, 0}, {1.42048, 0}, {1.82256, 0}, {2.07555, 0}, {2.16623, 0}, {2.17945, 0}, {2.03322, 0}, {1.82256, 0}, {1.48405, 0}, {1.1084, 0}, {0.85665, 0}, {0.85665, 0}, {1.1084, 0}, {1.48405, 0}, {1.82256, 0}, {2.03322, 0}, {2.11997, 0}, {2.11997, 0}, {1.69928, 0}, {1.42048, 0}, {1.1084, 0}, {0.858837, 0}, {0.763031, 0}, {0.858837, 0}, {1.1084, 0}, {1.42048, 0}, {1.69928, 0}, {1.88226, 0}, {1.94478, 0}, {1.88226, 0}, {1.25388, 0}, {1.03162, 0}, {0.85665, 0}, {0.763031, 0}, {0.763031, 0}, {0.85665, 0}, {1.03162, 0}, {1.25388, 0}, {1.46388, 0}, {1.59252, 0}, {1.59252, 0}, {1.46388, 0}, {0.930725, 0}, {0.869317, 0}, {0.85665, 0}, {0.858837, 0}, {0.85665, 0}, {0.869317, 0}, {0.930725, 0}, {1.04306, 0}, {1.15758, 0}, {1.20632, 0}, {1.15758, 0}, {1.04306, 0}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, {1.1084, 0}, {1.03162, 0}, {0.930725, 0}, {0.864823, 0}, {0.851575, 0}, {0.862449, 0}, {0.862449, 0}, {0.851575, 0}, {0.864823, 0}, {1.25388, 0}, {1.42048, 0}, {1.48405, 0}, {1.42048, 0}, {1.25388, 0}, {1.04306, 0}, {0.851575, 0}, {0.72366, 0}, {0.679431, 0}, {0.72366, 0}, {0.851575, 0}, {1.04306, 0}, {1.69928, 0}, {1.82256, 0}, {1.82256, 0}, {1.69928, 0}, {1.46388, 0}, {1.15758, 0}, {0.862449, 0}, {0.679431, 0}, {0.679431, 0}, {0.862449, 0}, {1.15758, 0}, {1.46388, 0}, {2.03322, 0}, {2.07555, 0}, {2.03322, 0}, {1.88226, 0}, {1.59252, 0}, {1.20632, 0}, {0.862449, 0}, {0.72366, 0}, {0.862449, 0}, {1.20632, 0}, {1.59252, 0}, {1.88226, 0}, {2.16623, 0}, {2.16623, 0}, {2.11997, 0}, {1.94478, 0}, {1.59252, 0}, {1.15758, 0}, {0.851575, 0}, {0.851575, 0}, {1.15758, 0}, {1.59252, 0}, {1.94478, 0}, {2.11997, 0}, {2.17701, 0}, {2.17945, 0}, {2.11997, 0}, {1.88226, 0}, {1.46388, 0}, {1.04306, 0}, {0.864823, 0}, {1.04306, 0}, {1.46388, 0}, {1.88226, 0}, {2.11997, 0}, {2.17945, 0}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 0}, {0.981652, 0}, {0.824264, 0}, {0.981652, 0}, {1.36223, 0}, {1.76522, 0}, {2.03322, 0}, {2.14383, 0}, {2.16623, 0}, {2.03322, 0}, {1.82256, 0}, {1.48405, 0}, {1.1084, 0}, {0.85665, 0}, {0.85665, 0}, {1.1084, 0}, {1.48405, 0}, {1.82256, 0}, {2.03322, 0}, {2.11997, 0}, {2.11997, 0}, {1.76522, 0}, {1.48405, 0}, {1.16145, 0}, {0.899033, 0}, {0.797429, 0}, {0.899033, 0}, {1.16145, 0}, {1.48405, 0}, {1.76522, 0}, {1.94478, 0}, {2.00496, 0}, {1.94478, 0}, {1.36223, 0}, {1.1084, 0}, {0.899033, 0}, {0.782576, 0}, {0.782576, 0}, {0.899033, 0}, {1.1084, 0}, {1.36223, 0}, {1.59252, 0}, {1.7299, 0}, {1.7299, 0}, {1.59252, 0}, {0.981652, 0}, {0.85665, 0}, {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, {0.85665, 0}, {0.981652, 0}, {1.15758, 0}, {1.31866, 0}, {1.38444, 0}, {1.31866, 0}, {1.15758, 0}, {0.824264, 0}, {0.85665, 0}, {0.899033, 0}, {0.899033, 0}, {0.85665, 0}, {0.824264, 0}, {0.851575, 0}, {0.931265, 0}, {1.00096, 0}, {1.00096, 0}, {0.931265, 0}, {0.851575, 0}, {0.981652, 0}, {1.1084, 0}, {1.16145, 0}, {1.1084, 0}, {0.981652, 0}, {0.851575, 0}, {0.771224, 0}, {0.743927, 0}, {0.740598, 0}, {0.743927, 0}, {0.771224, 0}, {0.851575, 0}, {1.36223, 0}, {1.48405, 0}, {1.48405, 0}, {1.36223, 0}, {1.15758, 0}, {0.931265, 0}, {0.743927, 0}, {0.639427, 0}, {0.639427, 0}, {0.743927, 0}, {0.931265, 0}, {1.15758, 0}, {1.76522, 0}, {1.82256, 0}, {1.76522, 0}, {1.59252, 0}, {1.31866, 0}, {1.00096, 0}, {0.740598, 0}, {0.639427, 0}, {0.740598, 0}, {1.00096, 0}, {1.31866, 0}, {1.59252, 0}, {2.03322, 0}, {2.03322, 0}, {1.94478, 0}, {1.7299, 0}, {1.38444, 0}, {1.00096, 0}, {0.743927, 0}, {0.743927, 0}, {1.00096, 0}, {1.38444, 0}, {1.7299, 0}, {1.94478, 0}, {2.14383, 0}, {2.11997, 0}, {2.00496, 0}, {1.7299, 0}, {1.31866, 0}, {0.931265, 0}, {0.771224, 0}, {0.931265, 0}, {1.31866, 0}, {1.7299, 0}, {2.00496, 0}, {2.11997, 0}, {2.16623, 0}, {2.11997, 0}, {1.94478, 0}, {1.59252, 0}, {1.15758, 0}, {0.851575, 0}, {0.851575, 0}, {1.15758, 0}, {1.59252, 0}, {1.94478, 0}, {2.11997, 0}, {2.16623, 0}, {1.92793, 0}, {1.69928, 0}, {1.36223, 0}, {1.00712, 0}, {0.775362, 0}, {0.775362, 0}, {1.00712, 0}, {1.36223, 0}, {1.69928, 0}, {1.92793, 0}, {2.03322, 0}, {2.03322, 0}, {1.69928, 0}, {1.42048, 0}, {1.1084, 0}, {0.858837, 0}, {0.763031, 0}, {0.858837, 0}, {1.1084, 0}, {1.42048, 0}, {1.69928, 0}, {1.88226, 0}, {1.94478, 0}, {1.88226, 0}, {1.36223, 0}, {1.1084, 0}, {0.899033, 0}, {0.782576, 0}, {0.782576, 0}, {0.899033, 0}, {1.1084, 0}, {1.36223, 0}, {1.59252, 0}, {1.7299, 0}, {1.7299, 0}, {1.59252, 0}, {1.00712, 0}, {0.858837, 0}, {0.782576, 0}, {0.761485, 0}, {0.782576, 0}, {0.858837, 0}, {1.00712, 0}, {1.20632, 0}, {1.38444, 0}, {1.45645, 0}, {1.38444, 0}, {1.20632, 0}, {0.775362, 0}, {0.763031, 0}, {0.782576, 0}, {0.782576, 0}, {0.763031, 0}, {0.775362, 0}, {0.862449, 0}, {1.00096, 0}, {1.10759, 0}, {1.10759, 0}, {1.00096, 0}, {0.862449, 0}, {0.775362, 0}, {0.858837, 0}, {0.899033, 0}, {0.858837, 0}, {0.775362, 0}, {0.72366, 0}, {0.743927, 0}, {0.804389, 0}, {0.836162, 0}, {0.804389, 0}, {0.743927, 0}, {0.72366, 0}, {1.00712, 0}, {1.1084, 0}, {1.1084, 0}, {1.00712, 0}, {0.862449, 0}, {0.743927, 0}, {0.683306, 0}, {0.666068, 0}, {0.666068, 0}, {0.683306, 0}, {0.743927, 0}, {0.862449, 0}, {1.36223, 0}, {1.42048, 0}, {1.36223, 0}, {1.20632, 0}, {1.00096, 0}, {0.804389, 0}, {0.666068, 0}, {0.616617, 0}, {0.666068, 0}, {0.804389, 0}, {1.00096, 0}, {1.20632, 0}, {1.69928, 0}, {1.69928, 0}, {1.59252, 0}, {1.38444, 0}, {1.10759, 0}, {0.836162, 0}, {0.666068, 0}, {0.666068, 0}, {0.836162, 0}, {1.10759, 0}, {1.38444, 0}, {1.59252, 0}, {1.92793, 0}, {1.88226, 0}, {1.7299, 0}, {1.45645, 0}, {1.10759, 0}, {0.804389, 0}, {0.683306, 0}, {0.804389, 0}, {1.10759, 0}, {1.45645, 0}, {1.7299, 0}, {1.88226, 0}, {2.03322, 0}, {1.94478, 0}, {1.7299, 0}, {1.38444, 0}, {1.00096, 0}, {0.743927, 0}, {0.743927, 0}, {1.00096, 0}, {1.38444, 0}, {1.7299, 0}, {1.94478, 0}, {2.03322, 0}, {2.03322, 0}, {1.88226, 0}, {1.59252, 0}, {1.20632, 0}, {0.862449, 0}, {0.72366, 0}, {0.862449, 0}, {1.20632, 0}, {1.59252, 0}, {1.88226, 0}, {2.03322, 0}, {2.07555, 0}, {1.51507, 0}, {1.25388, 0}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, {0.775362, 0}, {0.981652, 0}, {1.25388, 0}, {1.51507, 0}, {1.69928, 0}, {1.76522, 0}, {1.69928, 0}, {1.25388, 0}, {1.03162, 0}, {0.85665, 0}, {0.763031, 0}, {0.763031, 0}, {0.85665, 0}, {1.03162, 0}, {1.25388, 0}, {1.46388, 0}, {1.59252, 0}, {1.59252, 0}, {1.46388, 0}, {0.981652, 0}, {0.85665, 0}, {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, {0.85665, 0}, {0.981652, 0}, {1.15758, 0}, {1.31866, 0}, {1.38444, 0}, {1.31866, 0}, {1.15758, 0}, {0.775362, 0}, {0.763031, 0}, {0.782576, 0}, {0.782576, 0}, {0.763031, 0}, {0.775362, 0}, {0.862449, 0}, {1.00096, 0}, {1.10759, 0}, {1.10759, 0}, {1.00096, 0}, {0.862449, 0}, {0.698375, 0}, {0.763031, 0}, {0.797429, 0}, {0.763031, 0}, {0.698375, 0}, {0.679431, 0}, {0.740598, 0}, {0.836162, 0}, {0.881874, 0}, {0.836162, 0}, {0.740598, 0}, {0.679431, 0}, {0.775362, 0}, {0.85665, 0}, {0.85665, 0}, {0.775362, 0}, {0.679431, 0}, {0.639427, 0}, {0.666068, 0}, {0.707352, 0}, {0.707352, 0}, {0.666068, 0}, {0.639427, 0}, {0.679431, 0}, {0.981652, 0}, {1.03162, 0}, {0.981652, 0}, {0.862449, 0}, {0.740598, 0}, {0.666068, 0}, {0.641509, 0}, {0.63886, 0}, {0.641509, 0}, {0.666068, 0}, {0.740598, 0}, {0.862449, 0}, {1.25388, 0}, {1.25388, 0}, {1.15758, 0}, {1.00096, 0}, {0.836162, 0}, {0.707352, 0}, {0.63886, 0}, {0.63886, 0}, {0.707352, 0}, {0.836162, 0}, {1.00096, 0}, {1.15758, 0}, {1.51507, 0}, {1.46388, 0}, {1.31866, 0}, {1.10759, 0}, {0.881874, 0}, {0.707352, 0}, {0.641509, 0}, {0.707352, 0}, {0.881874, 0}, {1.10759, 0}, {1.31866, 0}, {1.46388, 0}, {1.69928, 0}, {1.59252, 0}, {1.38444, 0}, {1.10759, 0}, {0.836162, 0}, {0.666068, 0}, {0.666068, 0}, {0.836162, 0}, {1.10759, 0}, {1.38444, 0}, {1.59252, 0}, {1.69928, 0}, {1.76522, 0}, {1.59252, 0}, {1.31866, 0}, {1.00096, 0}, {0.740598, 0}, {0.639427, 0}, {0.740598, 0}, {1.00096, 0}, {1.31866, 0}, {1.59252, 0}, {1.76522, 0}, {1.82256, 0}, {1.69928, 0}, {1.46388, 0}, {1.15758, 0}, {0.862449, 0}, {0.679431, 0}, {0.679431, 0}, {0.862449, 0}, {1.15758, 0}, {1.46388, 0}, {1.69928, 0}, {1.82256, 0}, {1.82256, 0}, {1.08798, 0}, {0.930725, 0}, {0.824264, 0}, {0.775362, 0}, {0.775362, 0}, {0.824264, 0}, {0.930725, 0}, {1.08798, 0}, {1.25388, 0}, {1.36223, 0}, {1.36223, 0}, {1.25388, 0}, {0.930725, 0}, {0.869317, 0}, {0.85665, 0}, {0.858837, 0}, {0.85665, 0}, {0.869317, 0}, {0.930725, 0}, {1.04306, 0}, {1.15758, 0}, {1.20632, 0}, {1.15758, 0}, {1.04306, 0}, {0.824264, 0}, {0.85665, 0}, {0.899033, 0}, {0.899033, 0}, {0.85665, 0}, {0.824264, 0}, {0.851575, 0}, {0.931265, 0}, {1.00096, 0}, {1.00096, 0}, {0.931265, 0}, {0.851575, 0}, {0.775362, 0}, {0.858837, 0}, {0.899033, 0}, {0.858837, 0}, {0.775362, 0}, {0.72366, 0}, {0.743927, 0}, {0.804389, 0}, {0.836162, 0}, {0.804389, 0}, {0.743927, 0}, {0.72366, 0}, {0.775362, 0}, {0.85665, 0}, {0.85665, 0}, {0.775362, 0}, {0.679431, 0}, {0.639427, 0}, {0.666068, 0}, {0.707352, 0}, {0.707352, 0}, {0.666068, 0}, {0.639427, 0}, {0.679431, 0}, {0.824264, 0}, {0.869317, 0}, {0.824264, 0}, {0.72366, 0}, {0.639427, 0}, {0.616617, 0}, {0.63886, 0}, {0.655231, 0}, {0.63886, 0}, {0.616617, 0}, {0.639427, 0}, {0.72366, 0}, {0.930725, 0}, {0.930725, 0}, {0.851575, 0}, {0.743927, 0}, {0.666068, 0}, {0.63886, 0}, {0.640151, 0}, {0.640151, 0}, {0.63886, 0}, {0.666068, 0}, {0.743927, 0}, {0.851575, 0}, {1.08798, 0}, {1.04306, 0}, {0.931265, 0}, {0.804389, 0}, {0.707352, 0}, {0.655231, 0}, {0.640151, 0}, {0.655231, 0}, {0.707352, 0}, {0.804389, 0}, {0.931265, 0}, {1.04306, 0}, {1.25388, 0}, {1.15758, 0}, {1.00096, 0}, {0.836162, 0}, {0.707352, 0}, {0.63886, 0}, {0.63886, 0}, {0.707352, 0}, {0.836162, 0}, {1.00096, 0}, {1.15758, 0}, {1.25388, 0}, {1.36223, 0}, {1.20632, 0}, {1.00096, 0}, {0.804389, 0}, {0.666068, 0}, {0.616617, 0}, {0.666068, 0}, {0.804389, 0}, {1.00096, 0}, {1.20632, 0}, {1.36223, 0}, {1.42048, 0}, {1.36223, 0}, {1.15758, 0}, {0.931265, 0}, {0.743927, 0}, {0.639427, 0}, {0.639427, 0}, {0.743927, 0}, {0.931265, 0}, {1.15758, 0}, {1.36223, 0}, {1.48405, 0}, {1.48405, 0}, {1.25388, 0}, {1.04306, 0}, {0.851575, 0}, {0.72366, 0}, {0.679431, 0}, {0.72366, 0}, {0.851575, 0}, {1.04306, 0}, {1.25388, 0}, {1.42048, 0}, {1.48405, 0}, {1.42048, 0}, {0.905261, 0}, {0.930725, 0}, {0.981652, 0}, {1.00712, 0}, {0.981652, 0}, {0.930725, 0}, {0.905261, 0}, {0.930725, 0}, {0.981652, 0}, {1.00712, 0}, {0.981652, 0}, {0.930725, 0}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, {1.1084, 0}, {1.03162, 0}, {0.930725, 0}, {0.864823, 0}, {0.851575, 0}, {0.862449, 0}, {0.862449, 0}, {0.851575, 0}, {0.864823, 0}, {0.981652, 0}, {1.1084, 0}, {1.16145, 0}, {1.1084, 0}, {0.981652, 0}, {0.851575, 0}, {0.771224, 0}, {0.743927, 0}, {0.740598, 0}, {0.743927, 0}, {0.771224, 0}, {0.851575, 0}, {1.00712, 0}, {1.1084, 0}, {1.1084, 0}, {1.00712, 0}, {0.862449, 0}, {0.743927, 0}, {0.683306, 0}, {0.666068, 0}, {0.666068, 0}, {0.683306, 0}, {0.743927, 0}, {0.862449, 0}, {0.981652, 0}, {1.03162, 0}, {0.981652, 0}, {0.862449, 0}, {0.740598, 0}, {0.666068, 0}, {0.641509, 0}, {0.63886, 0}, {0.641509, 0}, {0.666068, 0}, {0.740598, 0}, {0.862449, 0}, {0.930725, 0}, {0.930725, 0}, {0.851575, 0}, {0.743927, 0}, {0.666068, 0}, {0.63886, 0}, {0.640151, 0}, {0.640151, 0}, {0.63886, 0}, {0.666068, 0}, {0.743927, 0}, {0.851575, 0}, {0.905261, 0}, {0.864823, 0}, {0.771224, 0}, {0.683306, 0}, {0.641509, 0}, {0.640151, 0}, {0.645833, 0}, {0.640151, 0}, {0.641509, 0}, {0.683306, 0}, {0.771224, 0}, {0.864823, 0}, {0.930725, 0}, {0.851575, 0}, {0.743927, 0}, {0.666068, 0}, {0.63886, 0}, {0.640151, 0}, {0.640151, 0}, {0.63886, 0}, {0.666068, 0}, {0.743927, 0}, {0.851575, 0}, {0.930725, 0}, {0.981652, 0}, {0.862449, 0}, {0.740598, 0}, {0.666068, 0}, {0.641509, 0}, {0.63886, 0}, {0.641509, 0}, {0.666068, 0}, {0.740598, 0}, {0.862449, 0}, {0.981652, 0}, {1.03162, 0}, {1.00712, 0}, {0.862449, 0}, {0.743927, 0}, {0.683306, 0}, {0.666068, 0}, {0.666068, 0}, {0.683306, 0}, {0.743927, 0}, {0.862449, 0}, {1.00712, 0}, {1.1084, 0}, {1.1084, 0}, {0.981652, 0}, {0.851575, 0}, {0.771224, 0}, {0.743927, 0}, {0.740598, 0}, {0.743927, 0}, {0.771224, 0}, {0.851575, 0}, {0.981652, 0}, {1.1084, 0}, {1.16145, 0}, {1.1084, 0}, {0.930725, 0}, {0.864823, 0}, {0.851575, 0}, {0.862449, 0}, {0.862449, 0}, {0.851575, 0}, {0.864823, 0}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, {1.1084, 0}, {1.03162, 0}, {1.08798, 0}, {1.25388, 0}, {1.36223, 0}, {1.36223, 0}, {1.25388, 0}, {1.08798, 0}, {0.930725, 0}, {0.824264, 0}, {0.775362, 0}, {0.775362, 0}, {0.824264, 0}, {0.930725, 0}, {1.25388, 0}, {1.42048, 0}, {1.48405, 0}, {1.42048, 0}, {1.25388, 0}, {1.04306, 0}, {0.851575, 0}, {0.72366, 0}, {0.679431, 0}, {0.72366, 0}, {0.851575, 0}, {1.04306, 0}, {1.36223, 0}, {1.48405, 0}, {1.48405, 0}, {1.36223, 0}, {1.15758, 0}, {0.931265, 0}, {0.743927, 0}, {0.639427, 0}, {0.639427, 0}, {0.743927, 0}, {0.931265, 0}, {1.15758, 0}, {1.36223, 0}, {1.42048, 0}, {1.36223, 0}, {1.20632, 0}, {1.00096, 0}, {0.804389, 0}, {0.666068, 0}, {0.616617, 0}, {0.666068, 0}, {0.804389, 0}, {1.00096, 0}, {1.20632, 0}, {1.25388, 0}, {1.25388, 0}, {1.15758, 0}, {1.00096, 0}, {0.836162, 0}, {0.707352, 0}, {0.63886, 0}, {0.63886, 0}, {0.707352, 0}, {0.836162, 0}, {1.00096, 0}, {1.15758, 0}, {1.08798, 0}, {1.04306, 0}, {0.931265, 0}, {0.804389, 0}, {0.707352, 0}, {0.655231, 0}, {0.640151, 0}, {0.655231, 0}, {0.707352, 0}, {0.804389, 0}, {0.931265, 0}, {1.04306, 0}, {0.930725, 0}, {0.851575, 0}, {0.743927, 0}, {0.666068, 0}, {0.63886, 0}, {0.640151, 0}, {0.640151, 0}, {0.63886, 0}, {0.666068, 0}, {0.743927, 0}, {0.851575, 0}, {0.930725, 0}, {0.824264, 0}, {0.72366, 0}, {0.639427, 0}, {0.616617, 0}, {0.63886, 0}, {0.655231, 0}, {0.63886, 0}, {0.616617, 0}, {0.639427, 0}, {0.72366, 0}, {0.824264, 0}, {0.869317, 0}, {0.775362, 0}, {0.679431, 0}, {0.639427, 0}, {0.666068, 0}, {0.707352, 0}, {0.707352, 0}, {0.666068, 0}, {0.639427, 0}, {0.679431, 0}, {0.775362, 0}, {0.85665, 0}, {0.85665, 0}, {0.775362, 0}, {0.72366, 0}, {0.743927, 0}, {0.804389, 0}, {0.836162, 0}, {0.804389, 0}, {0.743927, 0}, {0.72366, 0}, {0.775362, 0}, {0.858837, 0}, {0.899033, 0}, {0.858837, 0}, {0.824264, 0}, {0.851575, 0}, {0.931265, 0}, {1.00096, 0}, {1.00096, 0}, {0.931265, 0}, {0.851575, 0}, {0.824264, 0}, {0.85665, 0}, {0.899033, 0}, {0.899033, 0}, {0.85665, 0}, {0.930725, 0}, {1.04306, 0}, {1.15758, 0}, {1.20632, 0}, {1.15758, 0}, {1.04306, 0}, {0.930725, 0}, {0.869317, 0}, {0.85665, 0}, {0.858837, 0}, {0.85665, 0}, {0.869317, 0}, {1.51507, 0}, {1.69928, 0}, {1.76522, 0}, {1.69928, 0}, {1.51507, 0}, {1.25388, 0}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, {0.775362, 0}, {0.981652, 0}, {1.25388, 0}, {1.69928, 0}, {1.82256, 0}, {1.82256, 0}, {1.69928, 0}, {1.46388, 0}, {1.15758, 0}, {0.862449, 0}, {0.679431, 0}, {0.679431, 0}, {0.862449, 0}, {1.15758, 0}, {1.46388, 0}, {1.76522, 0}, {1.82256, 0}, {1.76522, 0}, {1.59252, 0}, {1.31866, 0}, {1.00096, 0}, {0.740598, 0}, {0.639427, 0}, {0.740598, 0}, {1.00096, 0}, {1.31866, 0}, {1.59252, 0}, {1.69928, 0}, {1.69928, 0}, {1.59252, 0}, {1.38444, 0}, {1.10759, 0}, {0.836162, 0}, {0.666068, 0}, {0.666068, 0}, {0.836162, 0}, {1.10759, 0}, {1.38444, 0}, {1.59252, 0}, {1.51507, 0}, {1.46388, 0}, {1.31866, 0}, {1.10759, 0}, {0.881874, 0}, {0.707352, 0}, {0.641509, 0}, {0.707352, 0}, {0.881874, 0}, {1.10759, 0}, {1.31866, 0}, {1.46388, 0}, {1.25388, 0}, {1.15758, 0}, {1.00096, 0}, {0.836162, 0}, {0.707352, 0}, {0.63886, 0}, {0.63886, 0}, {0.707352, 0}, {0.836162, 0}, {1.00096, 0}, {1.15758, 0}, {1.25388, 0}, {0.981652, 0}, {0.862449, 0}, {0.740598, 0}, {0.666068, 0}, {0.641509, 0}, {0.63886, 0}, {0.641509, 0}, {0.666068, 0}, {0.740598, 0}, {0.862449, 0}, {0.981652, 0}, {1.03162, 0}, {0.775362, 0}, {0.679431, 0}, {0.639427, 0}, {0.666068, 0}, {0.707352, 0}, {0.707352, 0}, {0.666068, 0}, {0.639427, 0}, {0.679431, 0}, {0.775362, 0}, {0.85665, 0}, {0.85665, 0}, {0.698375, 0}, {0.679431, 0}, {0.740598, 0}, {0.836162, 0}, {0.881874, 0}, {0.836162, 0}, {0.740598, 0}, {0.679431, 0}, {0.698375, 0}, {0.763031, 0}, {0.797429, 0}, {0.763031, 0}, {0.775362, 0}, {0.862449, 0}, {1.00096, 0}, {1.10759, 0}, {1.10759, 0}, {1.00096, 0}, {0.862449, 0}, {0.775362, 0}, {0.763031, 0}, {0.782576, 0}, {0.782576, 0}, {0.763031, 0}, {0.981652, 0}, {1.15758, 0}, {1.31866, 0}, {1.38444, 0}, {1.31866, 0}, {1.15758, 0}, {0.981652, 0}, {0.85665, 0}, {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, {0.85665, 0}, {1.25388, 0}, {1.46388, 0}, {1.59252, 0}, {1.59252, 0}, {1.46388, 0}, {1.25388, 0}, {1.03162, 0}, {0.85665, 0}, {0.763031, 0}, {0.763031, 0}, {0.85665, 0}, {1.03162, 0}, {1.92793, 0}, {2.03322, 0}, {2.03322, 0}, {1.92793, 0}, {1.69928, 0}, {1.36223, 0}, {1.00712, 0}, {0.775362, 0}, {0.775362, 0}, {1.00712, 0}, {1.36223, 0}, {1.69928, 0}, {2.03322, 0}, {2.07555, 0}, {2.03322, 0}, {1.88226, 0}, {1.59252, 0}, {1.20632, 0}, {0.862449, 0}, {0.72366, 0}, {0.862449, 0}, {1.20632, 0}, {1.59252, 0}, {1.88226, 0}, {2.03322, 0}, {2.03322, 0}, {1.94478, 0}, {1.7299, 0}, {1.38444, 0}, {1.00096, 0}, {0.743927, 0}, {0.743927, 0}, {1.00096, 0}, {1.38444, 0}, {1.7299, 0}, {1.94478, 0}, {1.92793, 0}, {1.88226, 0}, {1.7299, 0}, {1.45645, 0}, {1.10759, 0}, {0.804389, 0}, {0.683306, 0}, {0.804389, 0}, {1.10759, 0}, {1.45645, 0}, {1.7299, 0}, {1.88226, 0}, {1.69928, 0}, {1.59252, 0}, {1.38444, 0}, {1.10759, 0}, {0.836162, 0}, {0.666068, 0}, {0.666068, 0}, {0.836162, 0}, {1.10759, 0}, {1.38444, 0}, {1.59252, 0}, {1.69928, 0}, {1.36223, 0}, {1.20632, 0}, {1.00096, 0}, {0.804389, 0}, {0.666068, 0}, {0.616617, 0}, {0.666068, 0}, {0.804389, 0}, {1.00096, 0}, {1.20632, 0}, {1.36223, 0}, {1.42048, 0}, {1.00712, 0}, {0.862449, 0}, {0.743927, 0}, {0.683306, 0}, {0.666068, 0}, {0.666068, 0}, {0.683306, 0}, {0.743927, 0}, {0.862449, 0}, {1.00712, 0}, {1.1084, 0}, {1.1084, 0}, {0.775362, 0}, {0.72366, 0}, {0.743927, 0}, {0.804389, 0}, {0.836162, 0}, {0.804389, 0}, {0.743927, 0}, {0.72366, 0}, {0.775362, 0}, {0.858837, 0}, {0.899033, 0}, {0.858837, 0}, {0.775362, 0}, {0.862449, 0}, {1.00096, 0}, {1.10759, 0}, {1.10759, 0}, {1.00096, 0}, {0.862449, 0}, {0.775362, 0}, {0.763031, 0}, {0.782576, 0}, {0.782576, 0}, {0.763031, 0}, {1.00712, 0}, {1.20632, 0}, {1.38444, 0}, {1.45645, 0}, {1.38444, 0}, {1.20632, 0}, {1.00712, 0}, {0.858837, 0}, {0.782576, 0}, {0.761485, 0}, {0.782576, 0}, {0.858837, 0}, {1.36223, 0}, {1.59252, 0}, {1.7299, 0}, {1.7299, 0}, {1.59252, 0}, {1.36223, 0}, {1.1084, 0}, {0.899033, 0}, {0.782576, 0}, {0.782576, 0}, {0.899033, 0}, {1.1084, 0}, {1.69928, 0}, {1.88226, 0}, {1.94478, 0}, {1.88226, 0}, {1.69928, 0}, {1.42048, 0}, {1.1084, 0}, {0.858837, 0}, {0.763031, 0}, {0.858837, 0}, {1.1084, 0}, {1.42048, 0}, {2.14383, 0}, {2.16623, 0}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 0}, {0.981652, 0}, {0.824264, 0}, {0.981652, 0}, {1.36223, 0}, {1.76522, 0}, {2.03322, 0}, {2.16623, 0}, {2.16623, 0}, {2.11997, 0}, {1.94478, 0}, {1.59252, 0}, {1.15758, 0}, {0.851575, 0}, {0.851575, 0}, {1.15758, 0}, {1.59252, 0}, {1.94478, 0}, {2.11997, 0}, {2.14383, 0}, {2.11997, 0}, {2.00496, 0}, {1.7299, 0}, {1.31866, 0}, {0.931265, 0}, {0.771224, 0}, {0.931265, 0}, {1.31866, 0}, {1.7299, 0}, {2.00496, 0}, {2.11997, 0}, {2.03322, 0}, {1.94478, 0}, {1.7299, 0}, {1.38444, 0}, {1.00096, 0}, {0.743927, 0}, {0.743927, 0}, {1.00096, 0}, {1.38444, 0}, {1.7299, 0}, {1.94478, 0}, {2.03322, 0}, {1.76522, 0}, {1.59252, 0}, {1.31866, 0}, {1.00096, 0}, {0.740598, 0}, {0.639427, 0}, {0.740598, 0}, {1.00096, 0}, {1.31866, 0}, {1.59252, 0}, {1.76522, 0}, {1.82256, 0}, {1.36223, 0}, {1.15758, 0}, {0.931265, 0}, {0.743927, 0}, {0.639427, 0}, {0.639427, 0}, {0.743927, 0}, {0.931265, 0}, {1.15758, 0}, {1.36223, 0}, {1.48405, 0}, {1.48405, 0}, {0.981652, 0}, {0.851575, 0}, {0.771224, 0}, {0.743927, 0}, {0.740598, 0}, {0.743927, 0}, {0.771224, 0}, {0.851575, 0}, {0.981652, 0}, {1.1084, 0}, {1.16145, 0}, {1.1084, 0}, {0.824264, 0}, {0.851575, 0}, {0.931265, 0}, {1.00096, 0}, {1.00096, 0}, {0.931265, 0}, {0.851575, 0}, {0.824264, 0}, {0.85665, 0}, {0.899033, 0}, {0.899033, 0}, {0.85665, 0}, {0.981652, 0}, {1.15758, 0}, {1.31866, 0}, {1.38444, 0}, {1.31866, 0}, {1.15758, 0}, {0.981652, 0}, {0.85665, 0}, {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, {0.85665, 0}, {1.36223, 0}, {1.59252, 0}, {1.7299, 0}, {1.7299, 0}, {1.59252, 0}, {1.36223, 0}, {1.1084, 0}, {0.899033, 0}, {0.782576, 0}, {0.782576, 0}, {0.899033, 0}, {1.1084, 0}, {1.76522, 0}, {1.94478, 0}, {2.00496, 0}, {1.94478, 0}, {1.76522, 0}, {1.48405, 0}, {1.16145, 0}, {0.899033, 0}, {0.797429, 0}, {0.899033, 0}, {1.16145, 0}, {1.48405, 0}, {2.03322, 0}, {2.11997, 0}, {2.11997, 0}, {2.03322, 0}, {1.82256, 0}, {1.48405, 0}, {1.1084, 0}, {0.85665, 0}, {0.85665, 0}, {1.1084, 0}, {1.48405, 0}, {1.82256, 0}, {2.17701, 0}, {2.17701, 0}, {2.16623, 0}, {2.03322, 0}, {1.69928, 0}, {1.25388, 0}, {0.930725, 0}, {0.930725, 0}, {1.25388, 0}, {1.69928, 0}, {2.03322, 0}, {2.16623, 0}, {2.17701, 0}, {2.17945, 0}, {2.11997, 0}, {1.88226, 0}, {1.46388, 0}, {1.04306, 0}, {0.864823, 0}, {1.04306, 0}, {1.46388, 0}, {1.88226, 0}, {2.11997, 0}, {2.17945, 0}, {2.16623, 0}, {2.11997, 0}, {1.94478, 0}, {1.59252, 0}, {1.15758, 0}, {0.851575, 0}, {0.851575, 0}, {1.15758, 0}, {1.59252, 0}, {1.94478, 0}, {2.11997, 0}, {2.16623, 0}, {2.03322, 0}, {1.88226, 0}, {1.59252, 0}, {1.20632, 0}, {0.862449, 0}, {0.72366, 0}, {0.862449, 0}, {1.20632, 0}, {1.59252, 0}, {1.88226, 0}, {2.03322, 0}, {2.07555, 0}, {1.69928, 0}, {1.46388, 0}, {1.15758, 0}, {0.862449, 0}, {0.679431, 0}, {0.679431, 0}, {0.862449, 0}, {1.15758, 0}, {1.46388, 0}, {1.69928, 0}, {1.82256, 0}, {1.82256, 0}, {1.25388, 0}, {1.04306, 0}, {0.851575, 0}, {0.72366, 0}, {0.679431, 0}, {0.72366, 0}, {0.851575, 0}, {1.04306, 0}, {1.25388, 0}, {1.42048, 0}, {1.48405, 0}, {1.42048, 0}, {0.930725, 0}, {0.864823, 0}, {0.851575, 0}, {0.862449, 0}, {0.862449, 0}, {0.851575, 0}, {0.864823, 0}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, {1.1084, 0}, {1.03162, 0}, {0.930725, 0}, {1.04306, 0}, {1.15758, 0}, {1.20632, 0}, {1.15758, 0}, {1.04306, 0}, {0.930725, 0}, {0.869317, 0}, {0.85665, 0}, {0.858837, 0}, {0.85665, 0}, {0.869317, 0}, {1.25388, 0}, {1.46388, 0}, {1.59252, 0}, {1.59252, 0}, {1.46388, 0}, {1.25388, 0}, {1.03162, 0}, {0.85665, 0}, {0.763031, 0}, {0.763031, 0}, {0.85665, 0}, {1.03162, 0}, {1.69928, 0}, {1.88226, 0}, {1.94478, 0}, {1.88226, 0}, {1.69928, 0}, {1.42048, 0}, {1.1084, 0}, {0.858837, 0}, {0.763031, 0}, {0.858837, 0}, {1.1084, 0}, {1.42048, 0}, {2.03322, 0}, {2.11997, 0}, {2.11997, 0}, {2.03322, 0}, {1.82256, 0}, {1.48405, 0}, {1.1084, 0}, {0.85665, 0}, {0.85665, 0}, {1.1084, 0}, {1.48405, 0}, {1.82256, 0}, {2.16623, 0}, {2.17945, 0}, {2.16623, 0}, {2.07555, 0}, {1.82256, 0}, {1.42048, 0}, {1.03162, 0}, {0.869317, 0}, {1.03162, 0}, {1.42048, 0}, {1.82256, 0}, {2.07555, 0}}; + const std::vector> out + = {{2.16277, 0}, {2.17701, 0}, {2.14383, 0}, {1.92793, 0}, {1.51507, 0}, {1.08798, 0}, {0.905261, 0}, + {1.08798, 0}, {1.51507, 0}, {1.92793, 0}, {2.14383, 0}, {2.17701, 0}, {2.17701, 0}, {2.16623, 0}, + {2.03322, 0}, {1.69928, 0}, {1.25388, 0}, {0.930725, 0}, {0.930725, 0}, {1.25388, 0}, {1.69928, 0}, + {2.03322, 0}, {2.16623, 0}, {2.17701, 0}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 0}, + {0.981652, 0}, {0.824264, 0}, {0.981652, 0}, {1.36223, 0}, {1.76522, 0}, {2.03322, 0}, {2.14383, 0}, + {2.16623, 0}, {1.92793, 0}, {1.69928, 0}, {1.36223, 0}, {1.00712, 0}, {0.775362, 0}, {0.775362, 0}, + {1.00712, 0}, {1.36223, 0}, {1.69928, 0}, {1.92793, 0}, {2.03322, 0}, {2.03322, 0}, {1.51507, 0}, + {1.25388, 0}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, {0.775362, 0}, {0.981652, 0}, {1.25388, 0}, + {1.51507, 0}, {1.69928, 0}, {1.76522, 0}, {1.69928, 0}, {1.08798, 0}, {0.930725, 0}, {0.824264, 0}, + {0.775362, 0}, {0.775362, 0}, {0.824264, 0}, {0.930725, 0}, {1.08798, 0}, {1.25388, 0}, {1.36223, 0}, + {1.36223, 0}, {1.25388, 0}, {0.905261, 0}, {0.930725, 0}, {0.981652, 0}, {1.00712, 0}, {0.981652, 0}, + {0.930725, 0}, {0.905261, 0}, {0.930725, 0}, {0.981652, 0}, {1.00712, 0}, {0.981652, 0}, {0.930725, 0}, + {1.08798, 0}, {1.25388, 0}, {1.36223, 0}, {1.36223, 0}, {1.25388, 0}, {1.08798, 0}, {0.930725, 0}, + {0.824264, 0}, {0.775362, 0}, {0.775362, 0}, {0.824264, 0}, {0.930725, 0}, {1.51507, 0}, {1.69928, 0}, + {1.76522, 0}, {1.69928, 0}, {1.51507, 0}, {1.25388, 0}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, + {0.775362, 0}, {0.981652, 0}, {1.25388, 0}, {1.92793, 0}, {2.03322, 0}, {2.03322, 0}, {1.92793, 0}, + {1.69928, 0}, {1.36223, 0}, {1.00712, 0}, {0.775362, 0}, {0.775362, 0}, {1.00712, 0}, {1.36223, 0}, + {1.69928, 0}, {2.14383, 0}, {2.16623, 0}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 0}, + {0.981652, 0}, {0.824264, 0}, {0.981652, 0}, {1.36223, 0}, {1.76522, 0}, {2.03322, 0}, {2.17701, 0}, + {2.17701, 0}, {2.16623, 0}, {2.03322, 0}, {1.69928, 0}, {1.25388, 0}, {0.930725, 0}, {0.930725, 0}, + {1.25388, 0}, {1.69928, 0}, {2.03322, 0}, {2.16623, 0}, {2.17701, 0}, {2.16623, 0}, {2.03322, 0}, + {1.69928, 0}, {1.25388, 0}, {0.930725, 0}, {0.930725, 0}, {1.25388, 0}, {1.69928, 0}, {2.03322, 0}, + {2.16623, 0}, {2.17701, 0}, {2.16623, 0}, {2.07555, 0}, {1.82256, 0}, {1.42048, 0}, {1.03162, 0}, + {0.869317, 0}, {1.03162, 0}, {1.42048, 0}, {1.82256, 0}, {2.07555, 0}, {2.16623, 0}, {2.17945, 0}, + {2.03322, 0}, {1.82256, 0}, {1.48405, 0}, {1.1084, 0}, {0.85665, 0}, {0.85665, 0}, {1.1084, 0}, + {1.48405, 0}, {1.82256, 0}, {2.03322, 0}, {2.11997, 0}, {2.11997, 0}, {1.69928, 0}, {1.42048, 0}, + {1.1084, 0}, {0.858837, 0}, {0.763031, 0}, {0.858837, 0}, {1.1084, 0}, {1.42048, 0}, {1.69928, 0}, + {1.88226, 0}, {1.94478, 0}, {1.88226, 0}, {1.25388, 0}, {1.03162, 0}, {0.85665, 0}, {0.763031, 0}, + {0.763031, 0}, {0.85665, 0}, {1.03162, 0}, {1.25388, 0}, {1.46388, 0}, {1.59252, 0}, {1.59252, 0}, + {1.46388, 0}, {0.930725, 0}, {0.869317, 0}, {0.85665, 0}, {0.858837, 0}, {0.85665, 0}, {0.869317, 0}, + {0.930725, 0}, {1.04306, 0}, {1.15758, 0}, {1.20632, 0}, {1.15758, 0}, {1.04306, 0}, {0.930725, 0}, + {1.03162, 0}, {1.1084, 0}, {1.1084, 0}, {1.03162, 0}, {0.930725, 0}, {0.864823, 0}, {0.851575, 0}, + {0.862449, 0}, {0.862449, 0}, {0.851575, 0}, {0.864823, 0}, {1.25388, 0}, {1.42048, 0}, {1.48405, 0}, + {1.42048, 0}, {1.25388, 0}, {1.04306, 0}, {0.851575, 0}, {0.72366, 0}, {0.679431, 0}, {0.72366, 0}, + {0.851575, 0}, {1.04306, 0}, {1.69928, 0}, {1.82256, 0}, {1.82256, 0}, {1.69928, 0}, {1.46388, 0}, + {1.15758, 0}, {0.862449, 0}, {0.679431, 0}, {0.679431, 0}, {0.862449, 0}, {1.15758, 0}, {1.46388, 0}, + {2.03322, 0}, {2.07555, 0}, {2.03322, 0}, {1.88226, 0}, {1.59252, 0}, {1.20632, 0}, {0.862449, 0}, + {0.72366, 0}, {0.862449, 0}, {1.20632, 0}, {1.59252, 0}, {1.88226, 0}, {2.16623, 0}, {2.16623, 0}, + {2.11997, 0}, {1.94478, 0}, {1.59252, 0}, {1.15758, 0}, {0.851575, 0}, {0.851575, 0}, {1.15758, 0}, + {1.59252, 0}, {1.94478, 0}, {2.11997, 0}, {2.17701, 0}, {2.17945, 0}, {2.11997, 0}, {1.88226, 0}, + {1.46388, 0}, {1.04306, 0}, {0.864823, 0}, {1.04306, 0}, {1.46388, 0}, {1.88226, 0}, {2.11997, 0}, + {2.17945, 0}, {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 0}, {0.981652, 0}, {0.824264, 0}, + {0.981652, 0}, {1.36223, 0}, {1.76522, 0}, {2.03322, 0}, {2.14383, 0}, {2.16623, 0}, {2.03322, 0}, + {1.82256, 0}, {1.48405, 0}, {1.1084, 0}, {0.85665, 0}, {0.85665, 0}, {1.1084, 0}, {1.48405, 0}, + {1.82256, 0}, {2.03322, 0}, {2.11997, 0}, {2.11997, 0}, {1.76522, 0}, {1.48405, 0}, {1.16145, 0}, + {0.899033, 0}, {0.797429, 0}, {0.899033, 0}, {1.16145, 0}, {1.48405, 0}, {1.76522, 0}, {1.94478, 0}, + {2.00496, 0}, {1.94478, 0}, {1.36223, 0}, {1.1084, 0}, {0.899033, 0}, {0.782576, 0}, {0.782576, 0}, + {0.899033, 0}, {1.1084, 0}, {1.36223, 0}, {1.59252, 0}, {1.7299, 0}, {1.7299, 0}, {1.59252, 0}, + {0.981652, 0}, {0.85665, 0}, {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, {0.85665, 0}, {0.981652, 0}, + {1.15758, 0}, {1.31866, 0}, {1.38444, 0}, {1.31866, 0}, {1.15758, 0}, {0.824264, 0}, {0.85665, 0}, + {0.899033, 0}, {0.899033, 0}, {0.85665, 0}, {0.824264, 0}, {0.851575, 0}, {0.931265, 0}, {1.00096, 0}, + {1.00096, 0}, {0.931265, 0}, {0.851575, 0}, {0.981652, 0}, {1.1084, 0}, {1.16145, 0}, {1.1084, 0}, + {0.981652, 0}, {0.851575, 0}, {0.771224, 0}, {0.743927, 0}, {0.740598, 0}, {0.743927, 0}, {0.771224, 0}, + {0.851575, 0}, {1.36223, 0}, {1.48405, 0}, {1.48405, 0}, {1.36223, 0}, {1.15758, 0}, {0.931265, 0}, + {0.743927, 0}, {0.639427, 0}, {0.639427, 0}, {0.743927, 0}, {0.931265, 0}, {1.15758, 0}, {1.76522, 0}, + {1.82256, 0}, {1.76522, 0}, {1.59252, 0}, {1.31866, 0}, {1.00096, 0}, {0.740598, 0}, {0.639427, 0}, + {0.740598, 0}, {1.00096, 0}, {1.31866, 0}, {1.59252, 0}, {2.03322, 0}, {2.03322, 0}, {1.94478, 0}, + {1.7299, 0}, {1.38444, 0}, {1.00096, 0}, {0.743927, 0}, {0.743927, 0}, {1.00096, 0}, {1.38444, 0}, + {1.7299, 0}, {1.94478, 0}, {2.14383, 0}, {2.11997, 0}, {2.00496, 0}, {1.7299, 0}, {1.31866, 0}, + {0.931265, 0}, {0.771224, 0}, {0.931265, 0}, {1.31866, 0}, {1.7299, 0}, {2.00496, 0}, {2.11997, 0}, + {2.16623, 0}, {2.11997, 0}, {1.94478, 0}, {1.59252, 0}, {1.15758, 0}, {0.851575, 0}, {0.851575, 0}, + {1.15758, 0}, {1.59252, 0}, {1.94478, 0}, {2.11997, 0}, {2.16623, 0}, {1.92793, 0}, {1.69928, 0}, + {1.36223, 0}, {1.00712, 0}, {0.775362, 0}, {0.775362, 0}, {1.00712, 0}, {1.36223, 0}, {1.69928, 0}, + {1.92793, 0}, {2.03322, 0}, {2.03322, 0}, {1.69928, 0}, {1.42048, 0}, {1.1084, 0}, {0.858837, 0}, + {0.763031, 0}, {0.858837, 0}, {1.1084, 0}, {1.42048, 0}, {1.69928, 0}, {1.88226, 0}, {1.94478, 0}, + {1.88226, 0}, {1.36223, 0}, {1.1084, 0}, {0.899033, 0}, {0.782576, 0}, {0.782576, 0}, {0.899033, 0}, + {1.1084, 0}, {1.36223, 0}, {1.59252, 0}, {1.7299, 0}, {1.7299, 0}, {1.59252, 0}, {1.00712, 0}, + {0.858837, 0}, {0.782576, 0}, {0.761485, 0}, {0.782576, 0}, {0.858837, 0}, {1.00712, 0}, {1.20632, 0}, + {1.38444, 0}, {1.45645, 0}, {1.38444, 0}, {1.20632, 0}, {0.775362, 0}, {0.763031, 0}, {0.782576, 0}, + {0.782576, 0}, {0.763031, 0}, {0.775362, 0}, {0.862449, 0}, {1.00096, 0}, {1.10759, 0}, {1.10759, 0}, + {1.00096, 0}, {0.862449, 0}, {0.775362, 0}, {0.858837, 0}, {0.899033, 0}, {0.858837, 0}, {0.775362, 0}, + {0.72366, 0}, {0.743927, 0}, {0.804389, 0}, {0.836162, 0}, {0.804389, 0}, {0.743927, 0}, {0.72366, 0}, + {1.00712, 0}, {1.1084, 0}, {1.1084, 0}, {1.00712, 0}, {0.862449, 0}, {0.743927, 0}, {0.683306, 0}, + {0.666068, 0}, {0.666068, 0}, {0.683306, 0}, {0.743927, 0}, {0.862449, 0}, {1.36223, 0}, {1.42048, 0}, + {1.36223, 0}, {1.20632, 0}, {1.00096, 0}, {0.804389, 0}, {0.666068, 0}, {0.616617, 0}, {0.666068, 0}, + {0.804389, 0}, {1.00096, 0}, {1.20632, 0}, {1.69928, 0}, {1.69928, 0}, {1.59252, 0}, {1.38444, 0}, + {1.10759, 0}, {0.836162, 0}, {0.666068, 0}, {0.666068, 0}, {0.836162, 0}, {1.10759, 0}, {1.38444, 0}, + {1.59252, 0}, {1.92793, 0}, {1.88226, 0}, {1.7299, 0}, {1.45645, 0}, {1.10759, 0}, {0.804389, 0}, + {0.683306, 0}, {0.804389, 0}, {1.10759, 0}, {1.45645, 0}, {1.7299, 0}, {1.88226, 0}, {2.03322, 0}, + {1.94478, 0}, {1.7299, 0}, {1.38444, 0}, {1.00096, 0}, {0.743927, 0}, {0.743927, 0}, {1.00096, 0}, + {1.38444, 0}, {1.7299, 0}, {1.94478, 0}, {2.03322, 0}, {2.03322, 0}, {1.88226, 0}, {1.59252, 0}, + {1.20632, 0}, {0.862449, 0}, {0.72366, 0}, {0.862449, 0}, {1.20632, 0}, {1.59252, 0}, {1.88226, 0}, + {2.03322, 0}, {2.07555, 0}, {1.51507, 0}, {1.25388, 0}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, + {0.775362, 0}, {0.981652, 0}, {1.25388, 0}, {1.51507, 0}, {1.69928, 0}, {1.76522, 0}, {1.69928, 0}, + {1.25388, 0}, {1.03162, 0}, {0.85665, 0}, {0.763031, 0}, {0.763031, 0}, {0.85665, 0}, {1.03162, 0}, + {1.25388, 0}, {1.46388, 0}, {1.59252, 0}, {1.59252, 0}, {1.46388, 0}, {0.981652, 0}, {0.85665, 0}, + {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, {0.85665, 0}, {0.981652, 0}, {1.15758, 0}, {1.31866, 0}, + {1.38444, 0}, {1.31866, 0}, {1.15758, 0}, {0.775362, 0}, {0.763031, 0}, {0.782576, 0}, {0.782576, 0}, + {0.763031, 0}, {0.775362, 0}, {0.862449, 0}, {1.00096, 0}, {1.10759, 0}, {1.10759, 0}, {1.00096, 0}, + {0.862449, 0}, {0.698375, 0}, {0.763031, 0}, {0.797429, 0}, {0.763031, 0}, {0.698375, 0}, {0.679431, 0}, + {0.740598, 0}, {0.836162, 0}, {0.881874, 0}, {0.836162, 0}, {0.740598, 0}, {0.679431, 0}, {0.775362, 0}, + {0.85665, 0}, {0.85665, 0}, {0.775362, 0}, {0.679431, 0}, {0.639427, 0}, {0.666068, 0}, {0.707352, 0}, + {0.707352, 0}, {0.666068, 0}, {0.639427, 0}, {0.679431, 0}, {0.981652, 0}, {1.03162, 0}, {0.981652, 0}, + {0.862449, 0}, {0.740598, 0}, {0.666068, 0}, {0.641509, 0}, {0.63886, 0}, {0.641509, 0}, {0.666068, 0}, + {0.740598, 0}, {0.862449, 0}, {1.25388, 0}, {1.25388, 0}, {1.15758, 0}, {1.00096, 0}, {0.836162, 0}, + {0.707352, 0}, {0.63886, 0}, {0.63886, 0}, {0.707352, 0}, {0.836162, 0}, {1.00096, 0}, {1.15758, 0}, + {1.51507, 0}, {1.46388, 0}, {1.31866, 0}, {1.10759, 0}, {0.881874, 0}, {0.707352, 0}, {0.641509, 0}, + {0.707352, 0}, {0.881874, 0}, {1.10759, 0}, {1.31866, 0}, {1.46388, 0}, {1.69928, 0}, {1.59252, 0}, + {1.38444, 0}, {1.10759, 0}, {0.836162, 0}, {0.666068, 0}, {0.666068, 0}, {0.836162, 0}, {1.10759, 0}, + {1.38444, 0}, {1.59252, 0}, {1.69928, 0}, {1.76522, 0}, {1.59252, 0}, {1.31866, 0}, {1.00096, 0}, + {0.740598, 0}, {0.639427, 0}, {0.740598, 0}, {1.00096, 0}, {1.31866, 0}, {1.59252, 0}, {1.76522, 0}, + {1.82256, 0}, {1.69928, 0}, {1.46388, 0}, {1.15758, 0}, {0.862449, 0}, {0.679431, 0}, {0.679431, 0}, + {0.862449, 0}, {1.15758, 0}, {1.46388, 0}, {1.69928, 0}, {1.82256, 0}, {1.82256, 0}, {1.08798, 0}, + {0.930725, 0}, {0.824264, 0}, {0.775362, 0}, {0.775362, 0}, {0.824264, 0}, {0.930725, 0}, {1.08798, 0}, + {1.25388, 0}, {1.36223, 0}, {1.36223, 0}, {1.25388, 0}, {0.930725, 0}, {0.869317, 0}, {0.85665, 0}, + {0.858837, 0}, {0.85665, 0}, {0.869317, 0}, {0.930725, 0}, {1.04306, 0}, {1.15758, 0}, {1.20632, 0}, + {1.15758, 0}, {1.04306, 0}, {0.824264, 0}, {0.85665, 0}, {0.899033, 0}, {0.899033, 0}, {0.85665, 0}, + {0.824264, 0}, {0.851575, 0}, {0.931265, 0}, {1.00096, 0}, {1.00096, 0}, {0.931265, 0}, {0.851575, 0}, + {0.775362, 0}, {0.858837, 0}, {0.899033, 0}, {0.858837, 0}, {0.775362, 0}, {0.72366, 0}, {0.743927, 0}, + {0.804389, 0}, {0.836162, 0}, {0.804389, 0}, {0.743927, 0}, {0.72366, 0}, {0.775362, 0}, {0.85665, 0}, + {0.85665, 0}, {0.775362, 0}, {0.679431, 0}, {0.639427, 0}, {0.666068, 0}, {0.707352, 0}, {0.707352, 0}, + {0.666068, 0}, {0.639427, 0}, {0.679431, 0}, {0.824264, 0}, {0.869317, 0}, {0.824264, 0}, {0.72366, 0}, + {0.639427, 0}, {0.616617, 0}, {0.63886, 0}, {0.655231, 0}, {0.63886, 0}, {0.616617, 0}, {0.639427, 0}, + {0.72366, 0}, {0.930725, 0}, {0.930725, 0}, {0.851575, 0}, {0.743927, 0}, {0.666068, 0}, {0.63886, 0}, + {0.640151, 0}, {0.640151, 0}, {0.63886, 0}, {0.666068, 0}, {0.743927, 0}, {0.851575, 0}, {1.08798, 0}, + {1.04306, 0}, {0.931265, 0}, {0.804389, 0}, {0.707352, 0}, {0.655231, 0}, {0.640151, 0}, {0.655231, 0}, + {0.707352, 0}, {0.804389, 0}, {0.931265, 0}, {1.04306, 0}, {1.25388, 0}, {1.15758, 0}, {1.00096, 0}, + {0.836162, 0}, {0.707352, 0}, {0.63886, 0}, {0.63886, 0}, {0.707352, 0}, {0.836162, 0}, {1.00096, 0}, + {1.15758, 0}, {1.25388, 0}, {1.36223, 0}, {1.20632, 0}, {1.00096, 0}, {0.804389, 0}, {0.666068, 0}, + {0.616617, 0}, {0.666068, 0}, {0.804389, 0}, {1.00096, 0}, {1.20632, 0}, {1.36223, 0}, {1.42048, 0}, + {1.36223, 0}, {1.15758, 0}, {0.931265, 0}, {0.743927, 0}, {0.639427, 0}, {0.639427, 0}, {0.743927, 0}, + {0.931265, 0}, {1.15758, 0}, {1.36223, 0}, {1.48405, 0}, {1.48405, 0}, {1.25388, 0}, {1.04306, 0}, + {0.851575, 0}, {0.72366, 0}, {0.679431, 0}, {0.72366, 0}, {0.851575, 0}, {1.04306, 0}, {1.25388, 0}, + {1.42048, 0}, {1.48405, 0}, {1.42048, 0}, {0.905261, 0}, {0.930725, 0}, {0.981652, 0}, {1.00712, 0}, + {0.981652, 0}, {0.930725, 0}, {0.905261, 0}, {0.930725, 0}, {0.981652, 0}, {1.00712, 0}, {0.981652, 0}, + {0.930725, 0}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, {1.1084, 0}, {1.03162, 0}, {0.930725, 0}, + {0.864823, 0}, {0.851575, 0}, {0.862449, 0}, {0.862449, 0}, {0.851575, 0}, {0.864823, 0}, {0.981652, 0}, + {1.1084, 0}, {1.16145, 0}, {1.1084, 0}, {0.981652, 0}, {0.851575, 0}, {0.771224, 0}, {0.743927, 0}, + {0.740598, 0}, {0.743927, 0}, {0.771224, 0}, {0.851575, 0}, {1.00712, 0}, {1.1084, 0}, {1.1084, 0}, + {1.00712, 0}, {0.862449, 0}, {0.743927, 0}, {0.683306, 0}, {0.666068, 0}, {0.666068, 0}, {0.683306, 0}, + {0.743927, 0}, {0.862449, 0}, {0.981652, 0}, {1.03162, 0}, {0.981652, 0}, {0.862449, 0}, {0.740598, 0}, + {0.666068, 0}, {0.641509, 0}, {0.63886, 0}, {0.641509, 0}, {0.666068, 0}, {0.740598, 0}, {0.862449, 0}, + {0.930725, 0}, {0.930725, 0}, {0.851575, 0}, {0.743927, 0}, {0.666068, 0}, {0.63886, 0}, {0.640151, 0}, + {0.640151, 0}, {0.63886, 0}, {0.666068, 0}, {0.743927, 0}, {0.851575, 0}, {0.905261, 0}, {0.864823, 0}, + {0.771224, 0}, {0.683306, 0}, {0.641509, 0}, {0.640151, 0}, {0.645833, 0}, {0.640151, 0}, {0.641509, 0}, + {0.683306, 0}, {0.771224, 0}, {0.864823, 0}, {0.930725, 0}, {0.851575, 0}, {0.743927, 0}, {0.666068, 0}, + {0.63886, 0}, {0.640151, 0}, {0.640151, 0}, {0.63886, 0}, {0.666068, 0}, {0.743927, 0}, {0.851575, 0}, + {0.930725, 0}, {0.981652, 0}, {0.862449, 0}, {0.740598, 0}, {0.666068, 0}, {0.641509, 0}, {0.63886, 0}, + {0.641509, 0}, {0.666068, 0}, {0.740598, 0}, {0.862449, 0}, {0.981652, 0}, {1.03162, 0}, {1.00712, 0}, + {0.862449, 0}, {0.743927, 0}, {0.683306, 0}, {0.666068, 0}, {0.666068, 0}, {0.683306, 0}, {0.743927, 0}, + {0.862449, 0}, {1.00712, 0}, {1.1084, 0}, {1.1084, 0}, {0.981652, 0}, {0.851575, 0}, {0.771224, 0}, + {0.743927, 0}, {0.740598, 0}, {0.743927, 0}, {0.771224, 0}, {0.851575, 0}, {0.981652, 0}, {1.1084, 0}, + {1.16145, 0}, {1.1084, 0}, {0.930725, 0}, {0.864823, 0}, {0.851575, 0}, {0.862449, 0}, {0.862449, 0}, + {0.851575, 0}, {0.864823, 0}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, {1.1084, 0}, {1.03162, 0}, + {1.08798, 0}, {1.25388, 0}, {1.36223, 0}, {1.36223, 0}, {1.25388, 0}, {1.08798, 0}, {0.930725, 0}, + {0.824264, 0}, {0.775362, 0}, {0.775362, 0}, {0.824264, 0}, {0.930725, 0}, {1.25388, 0}, {1.42048, 0}, + {1.48405, 0}, {1.42048, 0}, {1.25388, 0}, {1.04306, 0}, {0.851575, 0}, {0.72366, 0}, {0.679431, 0}, + {0.72366, 0}, {0.851575, 0}, {1.04306, 0}, {1.36223, 0}, {1.48405, 0}, {1.48405, 0}, {1.36223, 0}, + {1.15758, 0}, {0.931265, 0}, {0.743927, 0}, {0.639427, 0}, {0.639427, 0}, {0.743927, 0}, {0.931265, 0}, + {1.15758, 0}, {1.36223, 0}, {1.42048, 0}, {1.36223, 0}, {1.20632, 0}, {1.00096, 0}, {0.804389, 0}, + {0.666068, 0}, {0.616617, 0}, {0.666068, 0}, {0.804389, 0}, {1.00096, 0}, {1.20632, 0}, {1.25388, 0}, + {1.25388, 0}, {1.15758, 0}, {1.00096, 0}, {0.836162, 0}, {0.707352, 0}, {0.63886, 0}, {0.63886, 0}, + {0.707352, 0}, {0.836162, 0}, {1.00096, 0}, {1.15758, 0}, {1.08798, 0}, {1.04306, 0}, {0.931265, 0}, + {0.804389, 0}, {0.707352, 0}, {0.655231, 0}, {0.640151, 0}, {0.655231, 0}, {0.707352, 0}, {0.804389, 0}, + {0.931265, 0}, {1.04306, 0}, {0.930725, 0}, {0.851575, 0}, {0.743927, 0}, {0.666068, 0}, {0.63886, 0}, + {0.640151, 0}, {0.640151, 0}, {0.63886, 0}, {0.666068, 0}, {0.743927, 0}, {0.851575, 0}, {0.930725, 0}, + {0.824264, 0}, {0.72366, 0}, {0.639427, 0}, {0.616617, 0}, {0.63886, 0}, {0.655231, 0}, {0.63886, 0}, + {0.616617, 0}, {0.639427, 0}, {0.72366, 0}, {0.824264, 0}, {0.869317, 0}, {0.775362, 0}, {0.679431, 0}, + {0.639427, 0}, {0.666068, 0}, {0.707352, 0}, {0.707352, 0}, {0.666068, 0}, {0.639427, 0}, {0.679431, 0}, + {0.775362, 0}, {0.85665, 0}, {0.85665, 0}, {0.775362, 0}, {0.72366, 0}, {0.743927, 0}, {0.804389, 0}, + {0.836162, 0}, {0.804389, 0}, {0.743927, 0}, {0.72366, 0}, {0.775362, 0}, {0.858837, 0}, {0.899033, 0}, + {0.858837, 0}, {0.824264, 0}, {0.851575, 0}, {0.931265, 0}, {1.00096, 0}, {1.00096, 0}, {0.931265, 0}, + {0.851575, 0}, {0.824264, 0}, {0.85665, 0}, {0.899033, 0}, {0.899033, 0}, {0.85665, 0}, {0.930725, 0}, + {1.04306, 0}, {1.15758, 0}, {1.20632, 0}, {1.15758, 0}, {1.04306, 0}, {0.930725, 0}, {0.869317, 0}, + {0.85665, 0}, {0.858837, 0}, {0.85665, 0}, {0.869317, 0}, {1.51507, 0}, {1.69928, 0}, {1.76522, 0}, + {1.69928, 0}, {1.51507, 0}, {1.25388, 0}, {0.981652, 0}, {0.775362, 0}, {0.698375, 0}, {0.775362, 0}, + {0.981652, 0}, {1.25388, 0}, {1.69928, 0}, {1.82256, 0}, {1.82256, 0}, {1.69928, 0}, {1.46388, 0}, + {1.15758, 0}, {0.862449, 0}, {0.679431, 0}, {0.679431, 0}, {0.862449, 0}, {1.15758, 0}, {1.46388, 0}, + {1.76522, 0}, {1.82256, 0}, {1.76522, 0}, {1.59252, 0}, {1.31866, 0}, {1.00096, 0}, {0.740598, 0}, + {0.639427, 0}, {0.740598, 0}, {1.00096, 0}, {1.31866, 0}, {1.59252, 0}, {1.69928, 0}, {1.69928, 0}, + {1.59252, 0}, {1.38444, 0}, {1.10759, 0}, {0.836162, 0}, {0.666068, 0}, {0.666068, 0}, {0.836162, 0}, + {1.10759, 0}, {1.38444, 0}, {1.59252, 0}, {1.51507, 0}, {1.46388, 0}, {1.31866, 0}, {1.10759, 0}, + {0.881874, 0}, {0.707352, 0}, {0.641509, 0}, {0.707352, 0}, {0.881874, 0}, {1.10759, 0}, {1.31866, 0}, + {1.46388, 0}, {1.25388, 0}, {1.15758, 0}, {1.00096, 0}, {0.836162, 0}, {0.707352, 0}, {0.63886, 0}, + {0.63886, 0}, {0.707352, 0}, {0.836162, 0}, {1.00096, 0}, {1.15758, 0}, {1.25388, 0}, {0.981652, 0}, + {0.862449, 0}, {0.740598, 0}, {0.666068, 0}, {0.641509, 0}, {0.63886, 0}, {0.641509, 0}, {0.666068, 0}, + {0.740598, 0}, {0.862449, 0}, {0.981652, 0}, {1.03162, 0}, {0.775362, 0}, {0.679431, 0}, {0.639427, 0}, + {0.666068, 0}, {0.707352, 0}, {0.707352, 0}, {0.666068, 0}, {0.639427, 0}, {0.679431, 0}, {0.775362, 0}, + {0.85665, 0}, {0.85665, 0}, {0.698375, 0}, {0.679431, 0}, {0.740598, 0}, {0.836162, 0}, {0.881874, 0}, + {0.836162, 0}, {0.740598, 0}, {0.679431, 0}, {0.698375, 0}, {0.763031, 0}, {0.797429, 0}, {0.763031, 0}, + {0.775362, 0}, {0.862449, 0}, {1.00096, 0}, {1.10759, 0}, {1.10759, 0}, {1.00096, 0}, {0.862449, 0}, + {0.775362, 0}, {0.763031, 0}, {0.782576, 0}, {0.782576, 0}, {0.763031, 0}, {0.981652, 0}, {1.15758, 0}, + {1.31866, 0}, {1.38444, 0}, {1.31866, 0}, {1.15758, 0}, {0.981652, 0}, {0.85665, 0}, {0.797429, 0}, + {0.782576, 0}, {0.797429, 0}, {0.85665, 0}, {1.25388, 0}, {1.46388, 0}, {1.59252, 0}, {1.59252, 0}, + {1.46388, 0}, {1.25388, 0}, {1.03162, 0}, {0.85665, 0}, {0.763031, 0}, {0.763031, 0}, {0.85665, 0}, + {1.03162, 0}, {1.92793, 0}, {2.03322, 0}, {2.03322, 0}, {1.92793, 0}, {1.69928, 0}, {1.36223, 0}, + {1.00712, 0}, {0.775362, 0}, {0.775362, 0}, {1.00712, 0}, {1.36223, 0}, {1.69928, 0}, {2.03322, 0}, + {2.07555, 0}, {2.03322, 0}, {1.88226, 0}, {1.59252, 0}, {1.20632, 0}, {0.862449, 0}, {0.72366, 0}, + {0.862449, 0}, {1.20632, 0}, {1.59252, 0}, {1.88226, 0}, {2.03322, 0}, {2.03322, 0}, {1.94478, 0}, + {1.7299, 0}, {1.38444, 0}, {1.00096, 0}, {0.743927, 0}, {0.743927, 0}, {1.00096, 0}, {1.38444, 0}, + {1.7299, 0}, {1.94478, 0}, {1.92793, 0}, {1.88226, 0}, {1.7299, 0}, {1.45645, 0}, {1.10759, 0}, + {0.804389, 0}, {0.683306, 0}, {0.804389, 0}, {1.10759, 0}, {1.45645, 0}, {1.7299, 0}, {1.88226, 0}, + {1.69928, 0}, {1.59252, 0}, {1.38444, 0}, {1.10759, 0}, {0.836162, 0}, {0.666068, 0}, {0.666068, 0}, + {0.836162, 0}, {1.10759, 0}, {1.38444, 0}, {1.59252, 0}, {1.69928, 0}, {1.36223, 0}, {1.20632, 0}, + {1.00096, 0}, {0.804389, 0}, {0.666068, 0}, {0.616617, 0}, {0.666068, 0}, {0.804389, 0}, {1.00096, 0}, + {1.20632, 0}, {1.36223, 0}, {1.42048, 0}, {1.00712, 0}, {0.862449, 0}, {0.743927, 0}, {0.683306, 0}, + {0.666068, 0}, {0.666068, 0}, {0.683306, 0}, {0.743927, 0}, {0.862449, 0}, {1.00712, 0}, {1.1084, 0}, + {1.1084, 0}, {0.775362, 0}, {0.72366, 0}, {0.743927, 0}, {0.804389, 0}, {0.836162, 0}, {0.804389, 0}, + {0.743927, 0}, {0.72366, 0}, {0.775362, 0}, {0.858837, 0}, {0.899033, 0}, {0.858837, 0}, {0.775362, 0}, + {0.862449, 0}, {1.00096, 0}, {1.10759, 0}, {1.10759, 0}, {1.00096, 0}, {0.862449, 0}, {0.775362, 0}, + {0.763031, 0}, {0.782576, 0}, {0.782576, 0}, {0.763031, 0}, {1.00712, 0}, {1.20632, 0}, {1.38444, 0}, + {1.45645, 0}, {1.38444, 0}, {1.20632, 0}, {1.00712, 0}, {0.858837, 0}, {0.782576, 0}, {0.761485, 0}, + {0.782576, 0}, {0.858837, 0}, {1.36223, 0}, {1.59252, 0}, {1.7299, 0}, {1.7299, 0}, {1.59252, 0}, + {1.36223, 0}, {1.1084, 0}, {0.899033, 0}, {0.782576, 0}, {0.782576, 0}, {0.899033, 0}, {1.1084, 0}, + {1.69928, 0}, {1.88226, 0}, {1.94478, 0}, {1.88226, 0}, {1.69928, 0}, {1.42048, 0}, {1.1084, 0}, + {0.858837, 0}, {0.763031, 0}, {0.858837, 0}, {1.1084, 0}, {1.42048, 0}, {2.14383, 0}, {2.16623, 0}, + {2.14383, 0}, {2.03322, 0}, {1.76522, 0}, {1.36223, 0}, {0.981652, 0}, {0.824264, 0}, {0.981652, 0}, + {1.36223, 0}, {1.76522, 0}, {2.03322, 0}, {2.16623, 0}, {2.16623, 0}, {2.11997, 0}, {1.94478, 0}, + {1.59252, 0}, {1.15758, 0}, {0.851575, 0}, {0.851575, 0}, {1.15758, 0}, {1.59252, 0}, {1.94478, 0}, + {2.11997, 0}, {2.14383, 0}, {2.11997, 0}, {2.00496, 0}, {1.7299, 0}, {1.31866, 0}, {0.931265, 0}, + {0.771224, 0}, {0.931265, 0}, {1.31866, 0}, {1.7299, 0}, {2.00496, 0}, {2.11997, 0}, {2.03322, 0}, + {1.94478, 0}, {1.7299, 0}, {1.38444, 0}, {1.00096, 0}, {0.743927, 0}, {0.743927, 0}, {1.00096, 0}, + {1.38444, 0}, {1.7299, 0}, {1.94478, 0}, {2.03322, 0}, {1.76522, 0}, {1.59252, 0}, {1.31866, 0}, + {1.00096, 0}, {0.740598, 0}, {0.639427, 0}, {0.740598, 0}, {1.00096, 0}, {1.31866, 0}, {1.59252, 0}, + {1.76522, 0}, {1.82256, 0}, {1.36223, 0}, {1.15758, 0}, {0.931265, 0}, {0.743927, 0}, {0.639427, 0}, + {0.639427, 0}, {0.743927, 0}, {0.931265, 0}, {1.15758, 0}, {1.36223, 0}, {1.48405, 0}, {1.48405, 0}, + {0.981652, 0}, {0.851575, 0}, {0.771224, 0}, {0.743927, 0}, {0.740598, 0}, {0.743927, 0}, {0.771224, 0}, + {0.851575, 0}, {0.981652, 0}, {1.1084, 0}, {1.16145, 0}, {1.1084, 0}, {0.824264, 0}, {0.851575, 0}, + {0.931265, 0}, {1.00096, 0}, {1.00096, 0}, {0.931265, 0}, {0.851575, 0}, {0.824264, 0}, {0.85665, 0}, + {0.899033, 0}, {0.899033, 0}, {0.85665, 0}, {0.981652, 0}, {1.15758, 0}, {1.31866, 0}, {1.38444, 0}, + {1.31866, 0}, {1.15758, 0}, {0.981652, 0}, {0.85665, 0}, {0.797429, 0}, {0.782576, 0}, {0.797429, 0}, + {0.85665, 0}, {1.36223, 0}, {1.59252, 0}, {1.7299, 0}, {1.7299, 0}, {1.59252, 0}, {1.36223, 0}, + {1.1084, 0}, {0.899033, 0}, {0.782576, 0}, {0.782576, 0}, {0.899033, 0}, {1.1084, 0}, {1.76522, 0}, + {1.94478, 0}, {2.00496, 0}, {1.94478, 0}, {1.76522, 0}, {1.48405, 0}, {1.16145, 0}, {0.899033, 0}, + {0.797429, 0}, {0.899033, 0}, {1.16145, 0}, {1.48405, 0}, {2.03322, 0}, {2.11997, 0}, {2.11997, 0}, + {2.03322, 0}, {1.82256, 0}, {1.48405, 0}, {1.1084, 0}, {0.85665, 0}, {0.85665, 0}, {1.1084, 0}, + {1.48405, 0}, {1.82256, 0}, {2.17701, 0}, {2.17701, 0}, {2.16623, 0}, {2.03322, 0}, {1.69928, 0}, + {1.25388, 0}, {0.930725, 0}, {0.930725, 0}, {1.25388, 0}, {1.69928, 0}, {2.03322, 0}, {2.16623, 0}, + {2.17701, 0}, {2.17945, 0}, {2.11997, 0}, {1.88226, 0}, {1.46388, 0}, {1.04306, 0}, {0.864823, 0}, + {1.04306, 0}, {1.46388, 0}, {1.88226, 0}, {2.11997, 0}, {2.17945, 0}, {2.16623, 0}, {2.11997, 0}, + {1.94478, 0}, {1.59252, 0}, {1.15758, 0}, {0.851575, 0}, {0.851575, 0}, {1.15758, 0}, {1.59252, 0}, + {1.94478, 0}, {2.11997, 0}, {2.16623, 0}, {2.03322, 0}, {1.88226, 0}, {1.59252, 0}, {1.20632, 0}, + {0.862449, 0}, {0.72366, 0}, {0.862449, 0}, {1.20632, 0}, {1.59252, 0}, {1.88226, 0}, {2.03322, 0}, + {2.07555, 0}, {1.69928, 0}, {1.46388, 0}, {1.15758, 0}, {0.862449, 0}, {0.679431, 0}, {0.679431, 0}, + {0.862449, 0}, {1.15758, 0}, {1.46388, 0}, {1.69928, 0}, {1.82256, 0}, {1.82256, 0}, {1.25388, 0}, + {1.04306, 0}, {0.851575, 0}, {0.72366, 0}, {0.679431, 0}, {0.72366, 0}, {0.851575, 0}, {1.04306, 0}, + {1.25388, 0}, {1.42048, 0}, {1.48405, 0}, {1.42048, 0}, {0.930725, 0}, {0.864823, 0}, {0.851575, 0}, + {0.862449, 0}, {0.862449, 0}, {0.851575, 0}, {0.864823, 0}, {0.930725, 0}, {1.03162, 0}, {1.1084, 0}, + {1.1084, 0}, {1.03162, 0}, {0.930725, 0}, {1.04306, 0}, {1.15758, 0}, {1.20632, 0}, {1.15758, 0}, + {1.04306, 0}, {0.930725, 0}, {0.869317, 0}, {0.85665, 0}, {0.858837, 0}, {0.85665, 0}, {0.869317, 0}, + {1.25388, 0}, {1.46388, 0}, {1.59252, 0}, {1.59252, 0}, {1.46388, 0}, {1.25388, 0}, {1.03162, 0}, + {0.85665, 0}, {0.763031, 0}, {0.763031, 0}, {0.85665, 0}, {1.03162, 0}, {1.69928, 0}, {1.88226, 0}, + {1.94478, 0}, {1.88226, 0}, {1.69928, 0}, {1.42048, 0}, {1.1084, 0}, {0.858837, 0}, {0.763031, 0}, + {0.858837, 0}, {1.1084, 0}, {1.42048, 0}, {2.03322, 0}, {2.11997, 0}, {2.11997, 0}, {2.03322, 0}, + {1.82256, 0}, {1.48405, 0}, {1.1084, 0}, {0.85665, 0}, {0.85665, 0}, {1.1084, 0}, {1.48405, 0}, + {1.82256, 0}, {2.16623, 0}, {2.17945, 0}, {2.16623, 0}, {2.07555, 0}, {1.82256, 0}, {1.42048, 0}, + {1.03162, 0}, {0.869317, 0}, {1.03162, 0}, {1.42048, 0}, {1.82256, 0}, {2.07555, 0}}; - const std::vector > expected_out = {{-30.2094, -0}, {-21.6034, -0}, {-7.87427, -0}, {-2.07036, -0}, {-0.555382, -0}, {-0.189753, -0}, {-0.12949, -0}, {-0.189753, -0}, {-0.555382, -0}, {-2.07036, -0}, {-7.87427, -0}, {-21.6034, -0}, {-21.6034, -0}, {-10.9702, -0}, {-3.42536, -0}, {-1.1751, -0}, {-0.597029, -0}, {-0.465244, -0}, {-0.465244, -0}, {-0.597029, -0}, {-1.1751, -0}, {-3.42536, -0}, {-10.9702, -0}, {-21.6034, -0}, {-7.87427, -0}, {-3.42536, -0}, {-1.47737, -0}, {-0.942023, -0}, {-0.870926, -0}, {-0.83641, -0}, {-0.870926, -0}, {-0.942023, -0}, {-1.47737, -0}, {-3.42536, -0}, {-7.87427, -0}, {-10.879, -0}, {-2.07036, -0}, {-1.1751, -0}, {-0.942023, -0}, {-1.08152, -0}, {-1.23111, -0}, {-1.23111, -0}, {-1.08152, -0}, {-0.942023, -0}, {-1.1751, -0}, {-2.07036, -0}, {-3.22832, -0}, {-3.22832, -0}, {-0.555382, -0}, {-0.597029, -0}, {-0.870926, -0}, {-1.23111, -0}, {-1.42794, -0}, {-1.23111, -0}, {-0.870926, -0}, {-0.597029, -0}, {-0.555382, -0}, {-0.817121, -0}, {-0.948038, -0}, {-0.817121, -0}, {-0.189753, -0}, {-0.465244, -0}, {-0.83641, -0}, {-1.23111, -0}, {-1.23111, -0}, {-0.83641, -0}, {-0.465244, -0}, {-0.189753, -0}, {-0.115296, -0}, {-0.0810269, -0}, {-0.0810269, -0}, {-0.115296, -0}, {-0.12949, -0}, {-0.465244, -0}, {-0.870926, -0}, {-1.08152, -0}, {-0.870926, -0}, {-0.465244, -0}, {-0.12949, -0}, {0.0416801, 0}, {0.127366, 0}, {0.183592, 0}, {0.127366, 0}, {0.0416801, 0}, {-0.189753, -0}, {-0.597029, -0}, {-0.942023, -0}, {-0.942023, -0}, {-0.597029, -0}, {-0.189753, -0}, {0.0416801, 0}, {0.174154, 0}, {0.217796, 0}, {0.217796, 0}, {0.174154, 0}, {0.0416801, 0}, {-0.555382, -0}, {-1.1751, -0}, {-1.47737, -0}, {-1.1751, -0}, {-0.555382, -0}, {-0.115296, -0}, {0.127366, 0}, {0.217796, 0}, {0.207667, 0}, {0.217796, 0}, {0.127366, 0}, {-0.115296, -0}, {-2.07036, -0}, {-3.42536, -0}, {-3.42536, -0}, {-2.07036, -0}, {-0.817121, -0}, {-0.0810269, -0}, {0.183592, 0}, {0.217796, 0}, {0.217796, 0}, {0.183592, 0}, {-0.0810269, -0}, {-0.817121, -0}, {-7.87427, -0}, {-10.9702, -0}, {-7.87427, -0}, {-3.22832, -0}, {-0.948038, -0}, {-0.0810269, -0}, {0.127366, 0}, {0.174154, 0}, {0.127366, 0}, {-0.0810269, -0}, {-0.948038, -0}, {-3.22832, -0}, {-21.6034, -0}, {-21.6034, -0}, {-10.879, -0}, {-3.22832, -0}, {-0.817121, -0}, {-0.115296, -0}, {0.0416801, 0}, {0.0416801, 0}, {-0.115296, -0}, {-0.817121, -0}, {-3.22832, -0}, {-10.879, -0}, {-21.6034, -0}, {-10.9702, -0}, {-3.42536, -0}, {-1.1751, -0}, {-0.597029, -0}, {-0.465244, -0}, {-0.465244, -0}, {-0.597029, -0}, {-1.1751, -0}, {-3.42536, -0}, {-10.9702, -0}, {-21.6034, -0}, {-10.9702, -0}, {-4.45942, -0}, {-1.77383, -0}, {-1.18884, -0}, {-1.13517, -0}, {-1.10544, -0}, {-1.13517, -0}, {-1.18884, -0}, {-1.77383, -0}, {-4.45942, -0}, {-10.9702, -0}, {-15.3017, -0}, {-3.42536, -0}, {-1.77383, -0}, {-1.44437, -0}, {-1.86732, -0}, {-2.32054, -0}, {-2.32054, -0}, {-1.86732, -0}, {-1.44437, -0}, {-1.77383, -0}, {-3.42536, -0}, {-5.7427, -0}, {-5.7427, -0}, {-1.1751, -0}, {-1.18884, -0}, {-1.86732, -0}, {-3.15451, -0}, {-3.83202, -0}, {-3.15451, -0}, {-1.86732, -0}, {-1.18884, -0}, {-1.1751, -0}, {-1.66995, -0}, {-1.97344, -0}, {-1.66995, -0}, {-0.597029, -0}, {-1.13517, -0}, {-2.32054, -0}, {-3.83202, -0}, {-3.83202, -0}, {-2.32054, -0}, {-1.13517, -0}, {-0.597029, -0}, {-0.44438, -0}, {-0.495872, -0}, {-0.495872, -0}, {-0.44438, -0}, {-0.465244, -0}, {-1.10544, -0}, {-2.32054, -0}, {-3.15451, -0}, {-2.32054, -0}, {-1.10544, -0}, {-0.465244, -0}, {-0.140892, -0}, {-0.0221196, -0}, {0.045208, 0}, {-0.0221196, -0}, {-0.140892, -0}, {-0.465244, -0}, {-1.13517, -0}, {-1.86732, -0}, {-1.86732, -0}, {-1.13517, -0}, {-0.465244, -0}, {-0.0838582, -0}, {0.0825835, 0}, {0.171812, 0}, {0.171812, 0}, {0.0825835, 0}, {-0.0838582, -0}, {-0.597029, -0}, {-1.18884, -0}, {-1.44437, -0}, {-1.18884, -0}, {-0.597029, -0}, {-0.140892, -0}, {0.0825835, 0}, {0.185014, 0}, {0.197828, 0}, {0.185014, 0}, {0.0825835, 0}, {-0.140892, -0}, {-1.1751, -0}, {-1.77383, -0}, {-1.77383, -0}, {-1.1751, -0}, {-0.44438, -0}, {-0.0221196, -0}, {0.171812, 0}, {0.197828, 0}, {0.197828, 0}, {0.171812, 0}, {-0.0221196, -0}, {-0.44438, -0}, {-3.42536, -0}, {-4.45942, -0}, {-3.42536, -0}, {-1.66995, -0}, {-0.495872, -0}, {0.045208, 0}, {0.171812, 0}, {0.185014, 0}, {0.171812, 0}, {0.045208, 0}, {-0.495872, -0}, {-1.66995, -0}, {-10.9702, -0}, {-10.9702, -0}, {-5.7427, -0}, {-1.97344, -0}, {-0.495872, -0}, {-0.0221196, -0}, {0.0825835, 0}, {0.0825835, 0}, {-0.0221196, -0}, {-0.495872, -0}, {-1.97344, -0}, {-5.7427, -0}, {-21.6034, -0}, {-15.3017, -0}, {-5.7427, -0}, {-1.66995, -0}, {-0.44438, -0}, {-0.140892, -0}, {-0.0838582, -0}, {-0.140892, -0}, {-0.44438, -0}, {-1.66995, -0}, {-5.7427, -0}, {-15.3017, -0}, {-7.87427, -0}, {-3.42536, -0}, {-1.47737, -0}, {-0.942023, -0}, {-0.870926, -0}, {-0.83641, -0}, {-0.870926, -0}, {-0.942023, -0}, {-1.47737, -0}, {-3.42536, -0}, {-7.87427, -0}, {-10.879, -0}, {-3.42536, -0}, {-1.77383, -0}, {-1.44437, -0}, {-1.86732, -0}, {-2.32054, -0}, {-2.32054, -0}, {-1.86732, -0}, {-1.44437, -0}, {-1.77383, -0}, {-3.42536, -0}, {-5.7427, -0}, {-5.7427, -0}, {-1.47737, -0}, {-1.44437, -0}, {-2.49545, -0}, {-4.55287, -0}, {-5.59868, -0}, {-4.55287, -0}, {-2.49545, -0}, {-1.44437, -0}, {-1.47737, -0}, {-2.13999, -0}, {-2.54954, -0}, {-2.13999, -0}, {-0.942023, -0}, {-1.86732, -0}, {-4.55287, -0}, {-7.76583, -0}, {-7.76583, -0}, {-4.55287, -0}, {-1.86732, -0}, {-0.942023, -0}, {-0.758269, -0}, {-0.86473, -0}, {-0.86473, -0}, {-0.758269, -0}, {-0.870926, -0}, {-2.32054, -0}, {-5.59868, -0}, {-7.76583, -0}, {-5.59868, -0}, {-2.32054, -0}, {-0.870926, -0}, {-0.351398, -0}, {-0.178118, -0}, {-0.134243, -0}, {-0.178118, -0}, {-0.351398, -0}, {-0.83641, -0}, {-2.32054, -0}, {-4.55287, -0}, {-4.55287, -0}, {-2.32054, -0}, {-0.83641, -0}, {-0.265159, -0}, {-0.017795, -0}, {0.0970702, 0}, {0.0970702, 0}, {-0.017795, -0}, {-0.265159, -0}, {-0.870926, -0}, {-1.86732, -0}, {-2.49545, -0}, {-1.86732, -0}, {-0.870926, -0}, {-0.265159, -0}, {0.0289023, 0}, {0.1482, 0}, {0.189344, 0}, {0.1482, 0}, {0.0289023, 0}, {-0.265159, -0}, {-0.942023, -0}, {-1.44437, -0}, {-1.44437, -0}, {-0.942023, -0}, {-0.351398, -0}, {-0.017795, -0}, {0.1482, 0}, {0.18618, 0}, {0.18618, 0}, {0.1482, 0}, {-0.017795, -0}, {-0.351398, -0}, {-1.47737, -0}, {-1.77383, -0}, {-1.47737, -0}, {-0.758269, -0}, {-0.178118, -0}, {0.0970702, 0}, {0.189344, 0}, {0.18618, 0}, {0.189344, 0}, {0.0970702, 0}, {-0.178118, -0}, {-0.758269, -0}, {-3.42536, -0}, {-3.42536, -0}, {-2.13999, -0}, {-0.86473, -0}, {-0.134243, -0}, {0.0970702, 0}, {0.1482, 0}, {0.1482, 0}, {0.0970702, 0}, {-0.134243, -0}, {-0.86473, -0}, {-2.13999, -0}, {-7.87427, -0}, {-5.7427, -0}, {-2.54954, -0}, {-0.86473, -0}, {-0.178118, -0}, {-0.017795, -0}, {0.0289023, 0}, {-0.017795, -0}, {-0.178118, -0}, {-0.86473, -0}, {-2.54954, -0}, {-5.7427, -0}, {-10.879, -0}, {-5.7427, -0}, {-2.13999, -0}, {-0.758269, -0}, {-0.351398, -0}, {-0.265159, -0}, {-0.265159, -0}, {-0.351398, -0}, {-0.758269, -0}, {-2.13999, -0}, {-5.7427, -0}, {-10.879, -0}, {-2.07036, -0}, {-1.1751, -0}, {-0.942023, -0}, {-1.08152, -0}, {-1.23111, -0}, {-1.23111, -0}, {-1.08152, -0}, {-0.942023, -0}, {-1.1751, -0}, {-2.07036, -0}, {-3.22832, -0}, {-3.22832, -0}, {-1.1751, -0}, {-1.18884, -0}, {-1.86732, -0}, {-3.15451, -0}, {-3.83202, -0}, {-3.15451, -0}, {-1.86732, -0}, {-1.18884, -0}, {-1.1751, -0}, {-1.66995, -0}, {-1.97344, -0}, {-1.66995, -0}, {-0.942023, -0}, {-1.86732, -0}, {-4.55287, -0}, {-7.76583, -0}, {-7.76583, -0}, {-4.55287, -0}, {-1.86732, -0}, {-0.942023, -0}, {-0.758269, -0}, {-0.86473, -0}, {-0.86473, -0}, {-0.758269, -0}, {-1.08152, -0}, {-3.15451, -0}, {-7.76583, -0}, {-10.6364, -0}, {-7.76583, -0}, {-3.15451, -0}, {-1.08152, -0}, {-0.442202, -0}, {-0.241459, -0}, {-0.208333, -0}, {-0.241459, -0}, {-0.442202, -0}, {-1.23111, -0}, {-3.83202, -0}, {-7.76583, -0}, {-7.76583, -0}, {-3.83202, -0}, {-1.23111, -0}, {-0.414721, -0}, {-0.0920392, -0}, {0.0496005, 0}, {0.0496005, 0}, {-0.0920392, -0}, {-0.414721, -0}, {-1.23111, -0}, {-3.15451, -0}, {-4.55287, -0}, {-3.15451, -0}, {-1.23111, -0}, {-0.388653, -0}, {-0.0442494, -0}, {0.104367, 0}, {0.176668, 0}, {0.104367, 0}, {-0.0442494, -0}, {-0.388653, -0}, {-1.08152, -0}, {-1.86732, -0}, {-1.86732, -0}, {-1.08152, -0}, {-0.414721, -0}, {-0.0442494, -0}, {0.124563, 0}, {0.187096, 0}, {0.187096, 0}, {0.124563, 0}, {-0.0442494, -0}, {-0.414721, -0}, {-0.942023, -0}, {-1.18884, -0}, {-0.942023, -0}, {-0.442202, -0}, {-0.0920392, -0}, {0.104367, 0}, {0.187096, 0}, {0.183356, 0}, {0.187096, 0}, {0.104367, 0}, {-0.0920392, -0}, {-0.442202, -0}, {-1.1751, -0}, {-1.1751, -0}, {-0.758269, -0}, {-0.241459, -0}, {0.0496005, 0}, {0.176668, 0}, {0.187096, 0}, {0.187096, 0}, {0.176668, 0}, {0.0496005, 0}, {-0.241459, -0}, {-0.758269, -0}, {-2.07036, -0}, {-1.66995, -0}, {-0.86473, -0}, {-0.208333, -0}, {0.0496005, 0}, {0.104367, 0}, {0.124563, 0}, {0.104367, 0}, {0.0496005, 0}, {-0.208333, -0}, {-0.86473, -0}, {-1.66995, -0}, {-3.22832, -0}, {-1.97344, -0}, {-0.86473, -0}, {-0.241459, -0}, {-0.0920392, -0}, {-0.0442494, -0}, {-0.0442494, -0}, {-0.0920392, -0}, {-0.241459, -0}, {-0.86473, -0}, {-1.97344, -0}, {-3.22832, -0}, {-3.22832, -0}, {-1.66995, -0}, {-0.758269, -0}, {-0.442202, -0}, {-0.414721, -0}, {-0.388653, -0}, {-0.414721, -0}, {-0.442202, -0}, {-0.758269, -0}, {-1.66995, -0}, {-3.22832, -0}, {-4.24378, -0}, {-0.555382, -0}, {-0.597029, -0}, {-0.870926, -0}, {-1.23111, -0}, {-1.42794, -0}, {-1.23111, -0}, {-0.870926, -0}, {-0.597029, -0}, {-0.555382, -0}, {-0.817121, -0}, {-0.948038, -0}, {-0.817121, -0}, {-0.597029, -0}, {-1.13517, -0}, {-2.32054, -0}, {-3.83202, -0}, {-3.83202, -0}, {-2.32054, -0}, {-1.13517, -0}, {-0.597029, -0}, {-0.44438, -0}, {-0.495872, -0}, {-0.495872, -0}, {-0.44438, -0}, {-0.870926, -0}, {-2.32054, -0}, {-5.59868, -0}, {-7.76583, -0}, {-5.59868, -0}, {-2.32054, -0}, {-0.870926, -0}, {-0.351398, -0}, {-0.178118, -0}, {-0.134243, -0}, {-0.178118, -0}, {-0.351398, -0}, {-1.23111, -0}, {-3.83202, -0}, {-7.76583, -0}, {-7.76583, -0}, {-3.83202, -0}, {-1.23111, -0}, {-0.414721, -0}, {-0.0920392, -0}, {0.0496005, 0}, {0.0496005, 0}, {-0.0920392, -0}, {-0.414721, -0}, {-1.42794, -0}, {-3.83202, -0}, {-5.59868, -0}, {-3.83202, -0}, {-1.42794, -0}, {-0.44835, -0}, {-0.0867768, -0}, {0.0822124, 0}, {0.175586, 0}, {0.0822124, 0}, {-0.0867768, -0}, {-0.44835, -0}, {-1.23111, -0}, {-2.32054, -0}, {-2.32054, -0}, {-1.23111, -0}, {-0.44835, -0}, {-0.0717819, -0}, {0.0932992, 0}, {0.198163, 0}, {0.198163, 0}, {0.0932992, 0}, {-0.0717819, -0}, {-0.44835, -0}, {-0.870926, -0}, {-1.13517, -0}, {-0.870926, -0}, {-0.414721, -0}, {-0.0867768, -0}, {0.0932992, 0}, {0.178608, 0}, {0.210177, 0}, {0.178608, 0}, {0.0932992, 0}, {-0.0867768, -0}, {-0.414721, -0}, {-0.597029, -0}, {-0.597029, -0}, {-0.351398, -0}, {-0.0920392, -0}, {0.0822124, 0}, {0.198163, 0}, {0.210177, 0}, {0.210177, 0}, {0.198163, 0}, {0.0822124, 0}, {-0.0920392, -0}, {-0.351398, -0}, {-0.555382, -0}, {-0.44438, -0}, {-0.178118, -0}, {0.0496005, 0}, {0.175586, 0}, {0.198163, 0}, {0.178608, 0}, {0.198163, 0}, {0.175586, 0}, {0.0496005, 0}, {-0.178118, -0}, {-0.44438, -0}, {-0.817121, -0}, {-0.495872, -0}, {-0.134243, -0}, {0.0496005, 0}, {0.0822124, 0}, {0.0932992, 0}, {0.0932992, 0}, {0.0822124, 0}, {0.0496005, 0}, {-0.134243, -0}, {-0.495872, -0}, {-0.817121, -0}, {-0.948038, -0}, {-0.495872, -0}, {-0.178118, -0}, {-0.0920392, -0}, {-0.0867768, -0}, {-0.0717819, -0}, {-0.0867768, -0}, {-0.0920392, -0}, {-0.178118, -0}, {-0.495872, -0}, {-0.948038, -0}, {-1.20269, -0}, {-0.817121, -0}, {-0.44438, -0}, {-0.351398, -0}, {-0.414721, -0}, {-0.44835, -0}, {-0.44835, -0}, {-0.414721, -0}, {-0.351398, -0}, {-0.44438, -0}, {-0.817121, -0}, {-1.20269, -0}, {-1.20269, -0}, {-0.189753, -0}, {-0.465244, -0}, {-0.83641, -0}, {-1.23111, -0}, {-1.23111, -0}, {-0.83641, -0}, {-0.465244, -0}, {-0.189753, -0}, {-0.115296, -0}, {-0.0810269, -0}, {-0.0810269, -0}, {-0.115296, -0}, {-0.465244, -0}, {-1.10544, -0}, {-2.32054, -0}, {-3.15451, -0}, {-2.32054, -0}, {-1.10544, -0}, {-0.465244, -0}, {-0.140892, -0}, {-0.0221196, -0}, {0.045208, 0}, {-0.0221196, -0}, {-0.140892, -0}, {-0.83641, -0}, {-2.32054, -0}, {-4.55287, -0}, {-4.55287, -0}, {-2.32054, -0}, {-0.83641, -0}, {-0.265159, -0}, {-0.017795, -0}, {0.0970702, 0}, {0.0970702, 0}, {-0.017795, -0}, {-0.265159, -0}, {-1.23111, -0}, {-3.15451, -0}, {-4.55287, -0}, {-3.15451, -0}, {-1.23111, -0}, {-0.388653, -0}, {-0.0442494, -0}, {0.104367, 0}, {0.176668, 0}, {0.104367, 0}, {-0.0442494, -0}, {-0.388653, -0}, {-1.23111, -0}, {-2.32054, -0}, {-2.32054, -0}, {-1.23111, -0}, {-0.44835, -0}, {-0.0717819, -0}, {0.0932992, 0}, {0.198163, 0}, {0.198163, 0}, {0.0932992, 0}, {-0.0717819, -0}, {-0.44835, -0}, {-0.83641, -0}, {-1.10544, -0}, {-0.83641, -0}, {-0.388653, -0}, {-0.0717819, -0}, {0.0850364, 0}, {0.171922, 0}, {0.234644, 0}, {0.171922, 0}, {0.0850364, 0}, {-0.0717819, -0}, {-0.388653, -0}, {-0.465244, -0}, {-0.465244, -0}, {-0.265159, -0}, {-0.0442494, -0}, {0.0932992, 0}, {0.171922, 0}, {0.228202, 0}, {0.228202, 0}, {0.171922, 0}, {0.0932992, 0}, {-0.0442494, -0}, {-0.265159, -0}, {-0.189753, -0}, {-0.140892, -0}, {-0.017795, -0}, {0.104367, 0}, {0.198163, 0}, {0.234644, 0}, {0.228202, 0}, {0.234644, 0}, {0.198163, 0}, {0.104367, 0}, {-0.017795, -0}, {-0.140892, -0}, {-0.115296, -0}, {-0.0221196, -0}, {0.0970702, 0}, {0.176668, 0}, {0.198163, 0}, {0.171922, 0}, {0.171922, 0}, {0.198163, 0}, {0.176668, 0}, {0.0970702, 0}, {-0.0221196, -0}, {-0.115296, -0}, {-0.0810269, -0}, {0.045208, 0}, {0.0970702, 0}, {0.104367, 0}, {0.0932992, 0}, {0.0850364, 0}, {0.0932992, 0}, {0.104367, 0}, {0.0970702, 0}, {0.045208, 0}, {-0.0810269, -0}, {-0.16644, -0}, {-0.0810269, -0}, {-0.0221196, -0}, {-0.017795, -0}, {-0.0442494, -0}, {-0.0717819, -0}, {-0.0717819, -0}, {-0.0442494, -0}, {-0.017795, -0}, {-0.0221196, -0}, {-0.0810269, -0}, {-0.166599, -0}, {-0.166599, -0}, {-0.115296, -0}, {-0.140892, -0}, {-0.265159, -0}, {-0.388653, -0}, {-0.44835, -0}, {-0.388653, -0}, {-0.265159, -0}, {-0.140892, -0}, {-0.115296, -0}, {-0.16644, -0}, {-0.166599, -0}, {-0.16644, -0}, {-0.12949, -0}, {-0.465244, -0}, {-0.870926, -0}, {-1.08152, -0}, {-0.870926, -0}, {-0.465244, -0}, {-0.12949, -0}, {0.0416801, 0}, {0.127366, 0}, {0.183592, 0}, {0.127366, 0}, {0.0416801, 0}, {-0.465244, -0}, {-1.13517, -0}, {-1.86732, -0}, {-1.86732, -0}, {-1.13517, -0}, {-0.465244, -0}, {-0.0838582, -0}, {0.0825835, 0}, {0.171812, 0}, {0.171812, 0}, {0.0825835, 0}, {-0.0838582, -0}, {-0.870926, -0}, {-1.86732, -0}, {-2.49545, -0}, {-1.86732, -0}, {-0.870926, -0}, {-0.265159, -0}, {0.0289023, 0}, {0.1482, 0}, {0.189344, 0}, {0.1482, 0}, {0.0289023, 0}, {-0.265159, -0}, {-1.08152, -0}, {-1.86732, -0}, {-1.86732, -0}, {-1.08152, -0}, {-0.414721, -0}, {-0.0442494, -0}, {0.124563, 0}, {0.187096, 0}, {0.187096, 0}, {0.124563, 0}, {-0.0442494, -0}, {-0.414721, -0}, {-0.870926, -0}, {-1.13517, -0}, {-0.870926, -0}, {-0.414721, -0}, {-0.0867768, -0}, {0.0932992, 0}, {0.178608, 0}, {0.210177, 0}, {0.178608, 0}, {0.0932992, 0}, {-0.0867768, -0}, {-0.414721, -0}, {-0.465244, -0}, {-0.465244, -0}, {-0.265159, -0}, {-0.0442494, -0}, {0.0932992, 0}, {0.171922, 0}, {0.228202, 0}, {0.228202, 0}, {0.171922, 0}, {0.0932992, 0}, {-0.0442494, -0}, {-0.265159, -0}, {-0.12949, -0}, {-0.0838582, -0}, {0.0289023, 0}, {0.124563, 0}, {0.178608, 0}, {0.228202, 0}, {0.25538, 0}, {0.228202, 0}, {0.178608, 0}, {0.124563, 0}, {0.0289023, 0}, {-0.0838582, -0}, {0.0416801, 0}, {0.0825835, 0}, {0.1482, 0}, {0.187096, 0}, {0.210177, 0}, {0.228202, 0}, {0.228202, 0}, {0.210177, 0}, {0.187096, 0}, {0.1482, 0}, {0.0825835, 0}, {0.0416801, 0}, {0.127366, 0}, {0.171812, 0}, {0.189344, 0}, {0.187096, 0}, {0.178608, 0}, {0.171922, 0}, {0.178608, 0}, {0.187096, 0}, {0.189344, 0}, {0.171812, 0}, {0.127366, 0}, {0.10143, 0}, {0.183592, 0}, {0.171812, 0}, {0.1482, 0}, {0.124563, 0}, {0.0932992, 0}, {0.0932992, 0}, {0.124563, 0}, {0.1482, 0}, {0.171812, 0}, {0.183592, 0}, {0.155259, 0}, {0.155259, 0}, {0.127366, 0}, {0.0825835, 0}, {0.0289023, 0}, {-0.0442494, -0}, {-0.0867768, -0}, {-0.0442494, -0}, {0.0289023, 0}, {0.0825835, 0}, {0.127366, 0}, {0.155259, 0}, {0.160174, 0}, {0.155259, 0}, {0.0416801, 0}, {-0.0838582, -0}, {-0.265159, -0}, {-0.414721, -0}, {-0.414721, -0}, {-0.265159, -0}, {-0.0838582, -0}, {0.0416801, 0}, {0.10143, 0}, {0.155259, 0}, {0.155259, 0}, {0.10143, 0}, {-0.189753, -0}, {-0.597029, -0}, {-0.942023, -0}, {-0.942023, -0}, {-0.597029, -0}, {-0.189753, -0}, {0.0416801, 0}, {0.174154, 0}, {0.217796, 0}, {0.217796, 0}, {0.174154, 0}, {0.0416801, 0}, {-0.597029, -0}, {-1.18884, -0}, {-1.44437, -0}, {-1.18884, -0}, {-0.597029, -0}, {-0.140892, -0}, {0.0825835, 0}, {0.185014, 0}, {0.197828, 0}, {0.185014, 0}, {0.0825835, 0}, {-0.140892, -0}, {-0.942023, -0}, {-1.44437, -0}, {-1.44437, -0}, {-0.942023, -0}, {-0.351398, -0}, {-0.017795, -0}, {0.1482, 0}, {0.18618, 0}, {0.18618, 0}, {0.1482, 0}, {-0.017795, -0}, {-0.351398, -0}, {-0.942023, -0}, {-1.18884, -0}, {-0.942023, -0}, {-0.442202, -0}, {-0.0920392, -0}, {0.104367, 0}, {0.187096, 0}, {0.183356, 0}, {0.187096, 0}, {0.104367, 0}, {-0.0920392, -0}, {-0.442202, -0}, {-0.597029, -0}, {-0.597029, -0}, {-0.351398, -0}, {-0.0920392, -0}, {0.0822124, 0}, {0.198163, 0}, {0.210177, 0}, {0.210177, 0}, {0.198163, 0}, {0.0822124, 0}, {-0.0920392, -0}, {-0.351398, -0}, {-0.189753, -0}, {-0.140892, -0}, {-0.017795, -0}, {0.104367, 0}, {0.198163, 0}, {0.234644, 0}, {0.228202, 0}, {0.234644, 0}, {0.198163, 0}, {0.104367, 0}, {-0.017795, -0}, {-0.140892, -0}, {0.0416801, 0}, {0.0825835, 0}, {0.1482, 0}, {0.187096, 0}, {0.210177, 0}, {0.228202, 0}, {0.228202, 0}, {0.210177, 0}, {0.187096, 0}, {0.1482, 0}, {0.0825835, 0}, {0.0416801, 0}, {0.174154, 0}, {0.185014, 0}, {0.18618, 0}, {0.183356, 0}, {0.210177, 0}, {0.234644, 0}, {0.210177, 0}, {0.183356, 0}, {0.18618, 0}, {0.185014, 0}, {0.174154, 0}, {0.173086, 0}, {0.217796, 0}, {0.197828, 0}, {0.18618, 0}, {0.187096, 0}, {0.198163, 0}, {0.198163, 0}, {0.187096, 0}, {0.18618, 0}, {0.197828, 0}, {0.217796, 0}, {0.239988, 0}, {0.239988, 0}, {0.217796, 0}, {0.185014, 0}, {0.1482, 0}, {0.104367, 0}, {0.0822124, 0}, {0.104367, 0}, {0.1482, 0}, {0.185014, 0}, {0.217796, 0}, {0.239116, 0}, {0.241937, 0}, {0.239116, 0}, {0.174154, 0}, {0.0825835, 0}, {-0.017795, -0}, {-0.0920392, -0}, {-0.0920392, -0}, {-0.017795, -0}, {0.0825835, 0}, {0.174154, 0}, {0.239988, 0}, {0.241937, 0}, {0.241937, 0}, {0.239988, 0}, {0.0416801, 0}, {-0.140892, -0}, {-0.351398, -0}, {-0.442202, -0}, {-0.351398, -0}, {-0.140892, -0}, {0.0416801, 0}, {0.173086, 0}, {0.239988, 0}, {0.239116, 0}, {0.239988, 0}, {0.173086, 0}, {-0.555382, -0}, {-1.1751, -0}, {-1.47737, -0}, {-1.1751, -0}, {-0.555382, -0}, {-0.115296, -0}, {0.127366, 0}, {0.217796, 0}, {0.207667, 0}, {0.217796, 0}, {0.127366, 0}, {-0.115296, -0}, {-1.1751, -0}, {-1.77383, -0}, {-1.77383, -0}, {-1.1751, -0}, {-0.44438, -0}, {-0.0221196, -0}, {0.171812, 0}, {0.197828, 0}, {0.197828, 0}, {0.171812, 0}, {-0.0221196, -0}, {-0.44438, -0}, {-1.47737, -0}, {-1.77383, -0}, {-1.47737, -0}, {-0.758269, -0}, {-0.178118, -0}, {0.0970702, 0}, {0.189344, 0}, {0.18618, 0}, {0.189344, 0}, {0.0970702, 0}, {-0.178118, -0}, {-0.758269, -0}, {-1.1751, -0}, {-1.1751, -0}, {-0.758269, -0}, {-0.241459, -0}, {0.0496005, 0}, {0.176668, 0}, {0.187096, 0}, {0.187096, 0}, {0.176668, 0}, {0.0496005, 0}, {-0.241459, -0}, {-0.758269, -0}, {-0.555382, -0}, {-0.44438, -0}, {-0.178118, -0}, {0.0496005, 0}, {0.175586, 0}, {0.198163, 0}, {0.178608, 0}, {0.198163, 0}, {0.175586, 0}, {0.0496005, 0}, {-0.178118, -0}, {-0.44438, -0}, {-0.115296, -0}, {-0.0221196, -0}, {0.0970702, 0}, {0.176668, 0}, {0.198163, 0}, {0.171922, 0}, {0.171922, 0}, {0.198163, 0}, {0.176668, 0}, {0.0970702, 0}, {-0.0221196, -0}, {-0.115296, -0}, {0.127366, 0}, {0.171812, 0}, {0.189344, 0}, {0.187096, 0}, {0.178608, 0}, {0.171922, 0}, {0.178608, 0}, {0.187096, 0}, {0.189344, 0}, {0.171812, 0}, {0.127366, 0}, {0.10143, 0}, {0.217796, 0}, {0.197828, 0}, {0.18618, 0}, {0.187096, 0}, {0.198163, 0}, {0.198163, 0}, {0.187096, 0}, {0.18618, 0}, {0.197828, 0}, {0.217796, 0}, {0.239988, 0}, {0.239988, 0}, {0.207667, 0}, {0.197828, 0}, {0.189344, 0}, {0.176668, 0}, {0.175586, 0}, {0.176668, 0}, {0.189344, 0}, {0.197828, 0}, {0.207667, 0}, {0.251027, 0}, {0.285567, 0}, {0.251027, 0}, {0.217796, 0}, {0.171812, 0}, {0.0970702, 0}, {0.0496005, 0}, {0.0496005, 0}, {0.0970702, 0}, {0.171812, 0}, {0.217796, 0}, {0.251027, 0}, {0.278974, 0}, {0.278974, 0}, {0.251027, 0}, {0.127366, 0}, {-0.0221196, -0}, {-0.178118, -0}, {-0.241459, -0}, {-0.178118, -0}, {-0.0221196, -0}, {0.127366, 0}, {0.239988, 0}, {0.285567, 0}, {0.278974, 0}, {0.285567, 0}, {0.239988, 0}, {-0.115296, -0}, {-0.44438, -0}, {-0.758269, -0}, {-0.758269, -0}, {-0.44438, -0}, {-0.115296, -0}, {0.10143, 0}, {0.239988, 0}, {0.251027, 0}, {0.251027, 0}, {0.239988, 0}, {0.10143, 0}, {-2.07036, -0}, {-3.42536, -0}, {-3.42536, -0}, {-2.07036, -0}, {-0.817121, -0}, {-0.0810269, -0}, {0.183592, 0}, {0.217796, 0}, {0.217796, 0}, {0.183592, 0}, {-0.0810269, -0}, {-0.817121, -0}, {-3.42536, -0}, {-4.45942, -0}, {-3.42536, -0}, {-1.66995, -0}, {-0.495872, -0}, {0.045208, 0}, {0.171812, 0}, {0.185014, 0}, {0.171812, 0}, {0.045208, 0}, {-0.495872, -0}, {-1.66995, -0}, {-3.42536, -0}, {-3.42536, -0}, {-2.13999, -0}, {-0.86473, -0}, {-0.134243, -0}, {0.0970702, 0}, {0.1482, 0}, {0.1482, 0}, {0.0970702, 0}, {-0.134243, -0}, {-0.86473, -0}, {-2.13999, -0}, {-2.07036, -0}, {-1.66995, -0}, {-0.86473, -0}, {-0.208333, -0}, {0.0496005, 0}, {0.104367, 0}, {0.124563, 0}, {0.104367, 0}, {0.0496005, 0}, {-0.208333, -0}, {-0.86473, -0}, {-1.66995, -0}, {-0.817121, -0}, {-0.495872, -0}, {-0.134243, -0}, {0.0496005, 0}, {0.0822124, 0}, {0.0932992, 0}, {0.0932992, 0}, {0.0822124, 0}, {0.0496005, 0}, {-0.134243, -0}, {-0.495872, -0}, {-0.817121, -0}, {-0.0810269, -0}, {0.045208, 0}, {0.0970702, 0}, {0.104367, 0}, {0.0932992, 0}, {0.0850364, 0}, {0.0932992, 0}, {0.104367, 0}, {0.0970702, 0}, {0.045208, 0}, {-0.0810269, -0}, {-0.16644, -0}, {0.183592, 0}, {0.171812, 0}, {0.1482, 0}, {0.124563, 0}, {0.0932992, 0}, {0.0932992, 0}, {0.124563, 0}, {0.1482, 0}, {0.171812, 0}, {0.183592, 0}, {0.155259, 0}, {0.155259, 0}, {0.217796, 0}, {0.185014, 0}, {0.1482, 0}, {0.104367, 0}, {0.0822124, 0}, {0.104367, 0}, {0.1482, 0}, {0.185014, 0}, {0.217796, 0}, {0.239116, 0}, {0.241937, 0}, {0.239116, 0}, {0.217796, 0}, {0.171812, 0}, {0.0970702, 0}, {0.0496005, 0}, {0.0496005, 0}, {0.0970702, 0}, {0.171812, 0}, {0.217796, 0}, {0.251027, 0}, {0.278974, 0}, {0.278974, 0}, {0.251027, 0}, {0.183592, 0}, {0.045208, 0}, {-0.134243, -0}, {-0.208333, -0}, {-0.134243, -0}, {0.045208, 0}, {0.183592, 0}, {0.239116, 0}, {0.278974, 0}, {0.301112, 0}, {0.278974, 0}, {0.239116, 0}, {-0.0810269, -0}, {-0.495872, -0}, {-0.86473, -0}, {-0.86473, -0}, {-0.495872, -0}, {-0.0810269, -0}, {0.155259, 0}, {0.241937, 0}, {0.278974, 0}, {0.278974, 0}, {0.241937, 0}, {0.155259, 0}, {-0.817121, -0}, {-1.66995, -0}, {-2.13999, -0}, {-1.66995, -0}, {-0.817121, -0}, {-0.16644, -0}, {0.155259, 0}, {0.239116, 0}, {0.251027, 0}, {0.239116, 0}, {0.155259, 0}, {-0.16644, -0}, {-7.87427, -0}, {-10.9702, -0}, {-7.87427, -0}, {-3.22832, -0}, {-0.948038, -0}, {-0.0810269, -0}, {0.127366, 0}, {0.174154, 0}, {0.127366, 0}, {-0.0810269, -0}, {-0.948038, -0}, {-3.22832, -0}, {-10.9702, -0}, {-10.9702, -0}, {-5.7427, -0}, {-1.97344, -0}, {-0.495872, -0}, {-0.0221196, -0}, {0.0825835, 0}, {0.0825835, 0}, {-0.0221196, -0}, {-0.495872, -0}, {-1.97344, -0}, {-5.7427, -0}, {-7.87427, -0}, {-5.7427, -0}, {-2.54954, -0}, {-0.86473, -0}, {-0.178118, -0}, {-0.017795, -0}, {0.0289023, 0}, {-0.017795, -0}, {-0.178118, -0}, {-0.86473, -0}, {-2.54954, -0}, {-5.7427, -0}, {-3.22832, -0}, {-1.97344, -0}, {-0.86473, -0}, {-0.241459, -0}, {-0.0920392, -0}, {-0.0442494, -0}, {-0.0442494, -0}, {-0.0920392, -0}, {-0.241459, -0}, {-0.86473, -0}, {-1.97344, -0}, {-3.22832, -0}, {-0.948038, -0}, {-0.495872, -0}, {-0.178118, -0}, {-0.0920392, -0}, {-0.0867768, -0}, {-0.0717819, -0}, {-0.0867768, -0}, {-0.0920392, -0}, {-0.178118, -0}, {-0.495872, -0}, {-0.948038, -0}, {-1.20269, -0}, {-0.0810269, -0}, {-0.0221196, -0}, {-0.017795, -0}, {-0.0442494, -0}, {-0.0717819, -0}, {-0.0717819, -0}, {-0.0442494, -0}, {-0.017795, -0}, {-0.0221196, -0}, {-0.0810269, -0}, {-0.166599, -0}, {-0.166599, -0}, {0.127366, 0}, {0.0825835, 0}, {0.0289023, 0}, {-0.0442494, -0}, {-0.0867768, -0}, {-0.0442494, -0}, {0.0289023, 0}, {0.0825835, 0}, {0.127366, 0}, {0.155259, 0}, {0.160174, 0}, {0.155259, 0}, {0.174154, 0}, {0.0825835, 0}, {-0.017795, -0}, {-0.0920392, -0}, {-0.0920392, -0}, {-0.017795, -0}, {0.0825835, 0}, {0.174154, 0}, {0.239988, 0}, {0.241937, 0}, {0.241937, 0}, {0.239988, 0}, {0.127366, 0}, {-0.0221196, -0}, {-0.178118, -0}, {-0.241459, -0}, {-0.178118, -0}, {-0.0221196, -0}, {0.127366, 0}, {0.239988, 0}, {0.285567, 0}, {0.278974, 0}, {0.285567, 0}, {0.239988, 0}, {-0.0810269, -0}, {-0.495872, -0}, {-0.86473, -0}, {-0.86473, -0}, {-0.495872, -0}, {-0.0810269, -0}, {0.155259, 0}, {0.241937, 0}, {0.278974, 0}, {0.278974, 0}, {0.241937, 0}, {0.155259, 0}, {-0.948038, -0}, {-1.97344, -0}, {-2.54954, -0}, {-1.97344, -0}, {-0.948038, -0}, {-0.166599, -0}, {0.160174, 0}, {0.241937, 0}, {0.285567, 0}, {0.241937, 0}, {0.160174, 0}, {-0.166599, -0}, {-3.22832, -0}, {-5.7427, -0}, {-5.7427, -0}, {-3.22832, -0}, {-1.20269, -0}, {-0.166599, -0}, {0.155259, 0}, {0.239988, 0}, {0.239988, 0}, {0.155259, 0}, {-0.166599, -0}, {-1.20269, -0}, {-21.6034, -0}, {-21.6034, -0}, {-10.879, -0}, {-3.22832, -0}, {-0.817121, -0}, {-0.115296, -0}, {0.0416801, 0}, {0.0416801, 0}, {-0.115296, -0}, {-0.817121, -0}, {-3.22832, -0}, {-10.879, -0}, {-21.6034, -0}, {-15.3017, -0}, {-5.7427, -0}, {-1.66995, -0}, {-0.44438, -0}, {-0.140892, -0}, {-0.0838582, -0}, {-0.140892, -0}, {-0.44438, -0}, {-1.66995, -0}, {-5.7427, -0}, {-15.3017, -0}, {-10.879, -0}, {-5.7427, -0}, {-2.13999, -0}, {-0.758269, -0}, {-0.351398, -0}, {-0.265159, -0}, {-0.265159, -0}, {-0.351398, -0}, {-0.758269, -0}, {-2.13999, -0}, {-5.7427, -0}, {-10.879, -0}, {-3.22832, -0}, {-1.66995, -0}, {-0.758269, -0}, {-0.442202, -0}, {-0.414721, -0}, {-0.388653, -0}, {-0.414721, -0}, {-0.442202, -0}, {-0.758269, -0}, {-1.66995, -0}, {-3.22832, -0}, {-4.24378, -0}, {-0.817121, -0}, {-0.44438, -0}, {-0.351398, -0}, {-0.414721, -0}, {-0.44835, -0}, {-0.44835, -0}, {-0.414721, -0}, {-0.351398, -0}, {-0.44438, -0}, {-0.817121, -0}, {-1.20269, -0}, {-1.20269, -0}, {-0.115296, -0}, {-0.140892, -0}, {-0.265159, -0}, {-0.388653, -0}, {-0.44835, -0}, {-0.388653, -0}, {-0.265159, -0}, {-0.140892, -0}, {-0.115296, -0}, {-0.16644, -0}, {-0.166599, -0}, {-0.16644, -0}, {0.0416801, 0}, {-0.0838582, -0}, {-0.265159, -0}, {-0.414721, -0}, {-0.414721, -0}, {-0.265159, -0}, {-0.0838582, -0}, {0.0416801, 0}, {0.10143, 0}, {0.155259, 0}, {0.155259, 0}, {0.10143, 0}, {0.0416801, 0}, {-0.140892, -0}, {-0.351398, -0}, {-0.442202, -0}, {-0.351398, -0}, {-0.140892, -0}, {0.0416801, 0}, {0.173086, 0}, {0.239988, 0}, {0.239116, 0}, {0.239988, 0}, {0.173086, 0}, {-0.115296, -0}, {-0.44438, -0}, {-0.758269, -0}, {-0.758269, -0}, {-0.44438, -0}, {-0.115296, -0}, {0.10143, 0}, {0.239988, 0}, {0.251027, 0}, {0.251027, 0}, {0.239988, 0}, {0.10143, 0}, {-0.817121, -0}, {-1.66995, -0}, {-2.13999, -0}, {-1.66995, -0}, {-0.817121, -0}, {-0.16644, -0}, {0.155259, 0}, {0.239116, 0}, {0.251027, 0}, {0.239116, 0}, {0.155259, 0}, {-0.16644, -0}, {-3.22832, -0}, {-5.7427, -0}, {-5.7427, -0}, {-3.22832, -0}, {-1.20269, -0}, {-0.166599, -0}, {0.155259, 0}, {0.239988, 0}, {0.239988, 0}, {0.155259, 0}, {-0.166599, -0}, {-1.20269, -0}, {-10.879, -0}, {-15.3017, -0}, {-10.879, -0}, {-4.24378, -0}, {-1.20269, -0}, {-0.16644, -0}, {0.10143, 0}, {0.173086, 0}, {0.10143, 0}, {-0.16644, -0}, {-1.20269, -0}, {-4.24378, -0}}; + const std::vector> expected_out + = {{-30.2094, -0}, {-21.6034, -0}, {-7.87427, -0}, {-2.07036, -0}, {-0.555382, -0}, {-0.189753, -0}, + {-0.12949, -0}, {-0.189753, -0}, {-0.555382, -0}, {-2.07036, -0}, {-7.87427, -0}, {-21.6034, -0}, + {-21.6034, -0}, {-10.9702, -0}, {-3.42536, -0}, {-1.1751, -0}, {-0.597029, -0}, {-0.465244, -0}, + {-0.465244, -0}, {-0.597029, -0}, {-1.1751, -0}, {-3.42536, -0}, {-10.9702, -0}, {-21.6034, -0}, + {-7.87427, -0}, {-3.42536, -0}, {-1.47737, -0}, {-0.942023, -0}, {-0.870926, -0}, {-0.83641, -0}, + {-0.870926, -0}, {-0.942023, -0}, {-1.47737, -0}, {-3.42536, -0}, {-7.87427, -0}, {-10.879, -0}, + {-2.07036, -0}, {-1.1751, -0}, {-0.942023, -0}, {-1.08152, -0}, {-1.23111, -0}, {-1.23111, -0}, + {-1.08152, -0}, {-0.942023, -0}, {-1.1751, -0}, {-2.07036, -0}, {-3.22832, -0}, {-3.22832, -0}, + {-0.555382, -0}, {-0.597029, -0}, {-0.870926, -0}, {-1.23111, -0}, {-1.42794, -0}, {-1.23111, -0}, + {-0.870926, -0}, {-0.597029, -0}, {-0.555382, -0}, {-0.817121, -0}, {-0.948038, -0}, {-0.817121, -0}, + {-0.189753, -0}, {-0.465244, -0}, {-0.83641, -0}, {-1.23111, -0}, {-1.23111, -0}, {-0.83641, -0}, + {-0.465244, -0}, {-0.189753, -0}, {-0.115296, -0}, {-0.0810269, -0}, {-0.0810269, -0}, {-0.115296, -0}, + {-0.12949, -0}, {-0.465244, -0}, {-0.870926, -0}, {-1.08152, -0}, {-0.870926, -0}, {-0.465244, -0}, + {-0.12949, -0}, {0.0416801, 0}, {0.127366, 0}, {0.183592, 0}, {0.127366, 0}, {0.0416801, 0}, + {-0.189753, -0}, {-0.597029, -0}, {-0.942023, -0}, {-0.942023, -0}, {-0.597029, -0}, {-0.189753, -0}, + {0.0416801, 0}, {0.174154, 0}, {0.217796, 0}, {0.217796, 0}, {0.174154, 0}, {0.0416801, 0}, + {-0.555382, -0}, {-1.1751, -0}, {-1.47737, -0}, {-1.1751, -0}, {-0.555382, -0}, {-0.115296, -0}, + {0.127366, 0}, {0.217796, 0}, {0.207667, 0}, {0.217796, 0}, {0.127366, 0}, {-0.115296, -0}, + {-2.07036, -0}, {-3.42536, -0}, {-3.42536, -0}, {-2.07036, -0}, {-0.817121, -0}, {-0.0810269, -0}, + {0.183592, 0}, {0.217796, 0}, {0.217796, 0}, {0.183592, 0}, {-0.0810269, -0}, {-0.817121, -0}, + {-7.87427, -0}, {-10.9702, -0}, {-7.87427, -0}, {-3.22832, -0}, {-0.948038, -0}, {-0.0810269, -0}, + {0.127366, 0}, {0.174154, 0}, {0.127366, 0}, {-0.0810269, -0}, {-0.948038, -0}, {-3.22832, -0}, + {-21.6034, -0}, {-21.6034, -0}, {-10.879, -0}, {-3.22832, -0}, {-0.817121, -0}, {-0.115296, -0}, + {0.0416801, 0}, {0.0416801, 0}, {-0.115296, -0}, {-0.817121, -0}, {-3.22832, -0}, {-10.879, -0}, + {-21.6034, -0}, {-10.9702, -0}, {-3.42536, -0}, {-1.1751, -0}, {-0.597029, -0}, {-0.465244, -0}, + {-0.465244, -0}, {-0.597029, -0}, {-1.1751, -0}, {-3.42536, -0}, {-10.9702, -0}, {-21.6034, -0}, + {-10.9702, -0}, {-4.45942, -0}, {-1.77383, -0}, {-1.18884, -0}, {-1.13517, -0}, {-1.10544, -0}, + {-1.13517, -0}, {-1.18884, -0}, {-1.77383, -0}, {-4.45942, -0}, {-10.9702, -0}, {-15.3017, -0}, + {-3.42536, -0}, {-1.77383, -0}, {-1.44437, -0}, {-1.86732, -0}, {-2.32054, -0}, {-2.32054, -0}, + {-1.86732, -0}, {-1.44437, -0}, {-1.77383, -0}, {-3.42536, -0}, {-5.7427, -0}, {-5.7427, -0}, + {-1.1751, -0}, {-1.18884, -0}, {-1.86732, -0}, {-3.15451, -0}, {-3.83202, -0}, {-3.15451, -0}, + {-1.86732, -0}, {-1.18884, -0}, {-1.1751, -0}, {-1.66995, -0}, {-1.97344, -0}, {-1.66995, -0}, + {-0.597029, -0}, {-1.13517, -0}, {-2.32054, -0}, {-3.83202, -0}, {-3.83202, -0}, {-2.32054, -0}, + {-1.13517, -0}, {-0.597029, -0}, {-0.44438, -0}, {-0.495872, -0}, {-0.495872, -0}, {-0.44438, -0}, + {-0.465244, -0}, {-1.10544, -0}, {-2.32054, -0}, {-3.15451, -0}, {-2.32054, -0}, {-1.10544, -0}, + {-0.465244, -0}, {-0.140892, -0}, {-0.0221196, -0}, {0.045208, 0}, {-0.0221196, -0}, {-0.140892, -0}, + {-0.465244, -0}, {-1.13517, -0}, {-1.86732, -0}, {-1.86732, -0}, {-1.13517, -0}, {-0.465244, -0}, + {-0.0838582, -0}, {0.0825835, 0}, {0.171812, 0}, {0.171812, 0}, {0.0825835, 0}, {-0.0838582, -0}, + {-0.597029, -0}, {-1.18884, -0}, {-1.44437, -0}, {-1.18884, -0}, {-0.597029, -0}, {-0.140892, -0}, + {0.0825835, 0}, {0.185014, 0}, {0.197828, 0}, {0.185014, 0}, {0.0825835, 0}, {-0.140892, -0}, + {-1.1751, -0}, {-1.77383, -0}, {-1.77383, -0}, {-1.1751, -0}, {-0.44438, -0}, {-0.0221196, -0}, + {0.171812, 0}, {0.197828, 0}, {0.197828, 0}, {0.171812, 0}, {-0.0221196, -0}, {-0.44438, -0}, + {-3.42536, -0}, {-4.45942, -0}, {-3.42536, -0}, {-1.66995, -0}, {-0.495872, -0}, {0.045208, 0}, + {0.171812, 0}, {0.185014, 0}, {0.171812, 0}, {0.045208, 0}, {-0.495872, -0}, {-1.66995, -0}, + {-10.9702, -0}, {-10.9702, -0}, {-5.7427, -0}, {-1.97344, -0}, {-0.495872, -0}, {-0.0221196, -0}, + {0.0825835, 0}, {0.0825835, 0}, {-0.0221196, -0}, {-0.495872, -0}, {-1.97344, -0}, {-5.7427, -0}, + {-21.6034, -0}, {-15.3017, -0}, {-5.7427, -0}, {-1.66995, -0}, {-0.44438, -0}, {-0.140892, -0}, + {-0.0838582, -0}, {-0.140892, -0}, {-0.44438, -0}, {-1.66995, -0}, {-5.7427, -0}, {-15.3017, -0}, + {-7.87427, -0}, {-3.42536, -0}, {-1.47737, -0}, {-0.942023, -0}, {-0.870926, -0}, {-0.83641, -0}, + {-0.870926, -0}, {-0.942023, -0}, {-1.47737, -0}, {-3.42536, -0}, {-7.87427, -0}, {-10.879, -0}, + {-3.42536, -0}, {-1.77383, -0}, {-1.44437, -0}, {-1.86732, -0}, {-2.32054, -0}, {-2.32054, -0}, + {-1.86732, -0}, {-1.44437, -0}, {-1.77383, -0}, {-3.42536, -0}, {-5.7427, -0}, {-5.7427, -0}, + {-1.47737, -0}, {-1.44437, -0}, {-2.49545, -0}, {-4.55287, -0}, {-5.59868, -0}, {-4.55287, -0}, + {-2.49545, -0}, {-1.44437, -0}, {-1.47737, -0}, {-2.13999, -0}, {-2.54954, -0}, {-2.13999, -0}, + {-0.942023, -0}, {-1.86732, -0}, {-4.55287, -0}, {-7.76583, -0}, {-7.76583, -0}, {-4.55287, -0}, + {-1.86732, -0}, {-0.942023, -0}, {-0.758269, -0}, {-0.86473, -0}, {-0.86473, -0}, {-0.758269, -0}, + {-0.870926, -0}, {-2.32054, -0}, {-5.59868, -0}, {-7.76583, -0}, {-5.59868, -0}, {-2.32054, -0}, + {-0.870926, -0}, {-0.351398, -0}, {-0.178118, -0}, {-0.134243, -0}, {-0.178118, -0}, {-0.351398, -0}, + {-0.83641, -0}, {-2.32054, -0}, {-4.55287, -0}, {-4.55287, -0}, {-2.32054, -0}, {-0.83641, -0}, + {-0.265159, -0}, {-0.017795, -0}, {0.0970702, 0}, {0.0970702, 0}, {-0.017795, -0}, {-0.265159, -0}, + {-0.870926, -0}, {-1.86732, -0}, {-2.49545, -0}, {-1.86732, -0}, {-0.870926, -0}, {-0.265159, -0}, + {0.0289023, 0}, {0.1482, 0}, {0.189344, 0}, {0.1482, 0}, {0.0289023, 0}, {-0.265159, -0}, + {-0.942023, -0}, {-1.44437, -0}, {-1.44437, -0}, {-0.942023, -0}, {-0.351398, -0}, {-0.017795, -0}, + {0.1482, 0}, {0.18618, 0}, {0.18618, 0}, {0.1482, 0}, {-0.017795, -0}, {-0.351398, -0}, + {-1.47737, -0}, {-1.77383, -0}, {-1.47737, -0}, {-0.758269, -0}, {-0.178118, -0}, {0.0970702, 0}, + {0.189344, 0}, {0.18618, 0}, {0.189344, 0}, {0.0970702, 0}, {-0.178118, -0}, {-0.758269, -0}, + {-3.42536, -0}, {-3.42536, -0}, {-2.13999, -0}, {-0.86473, -0}, {-0.134243, -0}, {0.0970702, 0}, + {0.1482, 0}, {0.1482, 0}, {0.0970702, 0}, {-0.134243, -0}, {-0.86473, -0}, {-2.13999, -0}, + {-7.87427, -0}, {-5.7427, -0}, {-2.54954, -0}, {-0.86473, -0}, {-0.178118, -0}, {-0.017795, -0}, + {0.0289023, 0}, {-0.017795, -0}, {-0.178118, -0}, {-0.86473, -0}, {-2.54954, -0}, {-5.7427, -0}, + {-10.879, -0}, {-5.7427, -0}, {-2.13999, -0}, {-0.758269, -0}, {-0.351398, -0}, {-0.265159, -0}, + {-0.265159, -0}, {-0.351398, -0}, {-0.758269, -0}, {-2.13999, -0}, {-5.7427, -0}, {-10.879, -0}, + {-2.07036, -0}, {-1.1751, -0}, {-0.942023, -0}, {-1.08152, -0}, {-1.23111, -0}, {-1.23111, -0}, + {-1.08152, -0}, {-0.942023, -0}, {-1.1751, -0}, {-2.07036, -0}, {-3.22832, -0}, {-3.22832, -0}, + {-1.1751, -0}, {-1.18884, -0}, {-1.86732, -0}, {-3.15451, -0}, {-3.83202, -0}, {-3.15451, -0}, + {-1.86732, -0}, {-1.18884, -0}, {-1.1751, -0}, {-1.66995, -0}, {-1.97344, -0}, {-1.66995, -0}, + {-0.942023, -0}, {-1.86732, -0}, {-4.55287, -0}, {-7.76583, -0}, {-7.76583, -0}, {-4.55287, -0}, + {-1.86732, -0}, {-0.942023, -0}, {-0.758269, -0}, {-0.86473, -0}, {-0.86473, -0}, {-0.758269, -0}, + {-1.08152, -0}, {-3.15451, -0}, {-7.76583, -0}, {-10.6364, -0}, {-7.76583, -0}, {-3.15451, -0}, + {-1.08152, -0}, {-0.442202, -0}, {-0.241459, -0}, {-0.208333, -0}, {-0.241459, -0}, {-0.442202, -0}, + {-1.23111, -0}, {-3.83202, -0}, {-7.76583, -0}, {-7.76583, -0}, {-3.83202, -0}, {-1.23111, -0}, + {-0.414721, -0}, {-0.0920392, -0}, {0.0496005, 0}, {0.0496005, 0}, {-0.0920392, -0}, {-0.414721, -0}, + {-1.23111, -0}, {-3.15451, -0}, {-4.55287, -0}, {-3.15451, -0}, {-1.23111, -0}, {-0.388653, -0}, + {-0.0442494, -0}, {0.104367, 0}, {0.176668, 0}, {0.104367, 0}, {-0.0442494, -0}, {-0.388653, -0}, + {-1.08152, -0}, {-1.86732, -0}, {-1.86732, -0}, {-1.08152, -0}, {-0.414721, -0}, {-0.0442494, -0}, + {0.124563, 0}, {0.187096, 0}, {0.187096, 0}, {0.124563, 0}, {-0.0442494, -0}, {-0.414721, -0}, + {-0.942023, -0}, {-1.18884, -0}, {-0.942023, -0}, {-0.442202, -0}, {-0.0920392, -0}, {0.104367, 0}, + {0.187096, 0}, {0.183356, 0}, {0.187096, 0}, {0.104367, 0}, {-0.0920392, -0}, {-0.442202, -0}, + {-1.1751, -0}, {-1.1751, -0}, {-0.758269, -0}, {-0.241459, -0}, {0.0496005, 0}, {0.176668, 0}, + {0.187096, 0}, {0.187096, 0}, {0.176668, 0}, {0.0496005, 0}, {-0.241459, -0}, {-0.758269, -0}, + {-2.07036, -0}, {-1.66995, -0}, {-0.86473, -0}, {-0.208333, -0}, {0.0496005, 0}, {0.104367, 0}, + {0.124563, 0}, {0.104367, 0}, {0.0496005, 0}, {-0.208333, -0}, {-0.86473, -0}, {-1.66995, -0}, + {-3.22832, -0}, {-1.97344, -0}, {-0.86473, -0}, {-0.241459, -0}, {-0.0920392, -0}, {-0.0442494, -0}, + {-0.0442494, -0}, {-0.0920392, -0}, {-0.241459, -0}, {-0.86473, -0}, {-1.97344, -0}, {-3.22832, -0}, + {-3.22832, -0}, {-1.66995, -0}, {-0.758269, -0}, {-0.442202, -0}, {-0.414721, -0}, {-0.388653, -0}, + {-0.414721, -0}, {-0.442202, -0}, {-0.758269, -0}, {-1.66995, -0}, {-3.22832, -0}, {-4.24378, -0}, + {-0.555382, -0}, {-0.597029, -0}, {-0.870926, -0}, {-1.23111, -0}, {-1.42794, -0}, {-1.23111, -0}, + {-0.870926, -0}, {-0.597029, -0}, {-0.555382, -0}, {-0.817121, -0}, {-0.948038, -0}, {-0.817121, -0}, + {-0.597029, -0}, {-1.13517, -0}, {-2.32054, -0}, {-3.83202, -0}, {-3.83202, -0}, {-2.32054, -0}, + {-1.13517, -0}, {-0.597029, -0}, {-0.44438, -0}, {-0.495872, -0}, {-0.495872, -0}, {-0.44438, -0}, + {-0.870926, -0}, {-2.32054, -0}, {-5.59868, -0}, {-7.76583, -0}, {-5.59868, -0}, {-2.32054, -0}, + {-0.870926, -0}, {-0.351398, -0}, {-0.178118, -0}, {-0.134243, -0}, {-0.178118, -0}, {-0.351398, -0}, + {-1.23111, -0}, {-3.83202, -0}, {-7.76583, -0}, {-7.76583, -0}, {-3.83202, -0}, {-1.23111, -0}, + {-0.414721, -0}, {-0.0920392, -0}, {0.0496005, 0}, {0.0496005, 0}, {-0.0920392, -0}, {-0.414721, -0}, + {-1.42794, -0}, {-3.83202, -0}, {-5.59868, -0}, {-3.83202, -0}, {-1.42794, -0}, {-0.44835, -0}, + {-0.0867768, -0}, {0.0822124, 0}, {0.175586, 0}, {0.0822124, 0}, {-0.0867768, -0}, {-0.44835, -0}, + {-1.23111, -0}, {-2.32054, -0}, {-2.32054, -0}, {-1.23111, -0}, {-0.44835, -0}, {-0.0717819, -0}, + {0.0932992, 0}, {0.198163, 0}, {0.198163, 0}, {0.0932992, 0}, {-0.0717819, -0}, {-0.44835, -0}, + {-0.870926, -0}, {-1.13517, -0}, {-0.870926, -0}, {-0.414721, -0}, {-0.0867768, -0}, {0.0932992, 0}, + {0.178608, 0}, {0.210177, 0}, {0.178608, 0}, {0.0932992, 0}, {-0.0867768, -0}, {-0.414721, -0}, + {-0.597029, -0}, {-0.597029, -0}, {-0.351398, -0}, {-0.0920392, -0}, {0.0822124, 0}, {0.198163, 0}, + {0.210177, 0}, {0.210177, 0}, {0.198163, 0}, {0.0822124, 0}, {-0.0920392, -0}, {-0.351398, -0}, + {-0.555382, -0}, {-0.44438, -0}, {-0.178118, -0}, {0.0496005, 0}, {0.175586, 0}, {0.198163, 0}, + {0.178608, 0}, {0.198163, 0}, {0.175586, 0}, {0.0496005, 0}, {-0.178118, -0}, {-0.44438, -0}, + {-0.817121, -0}, {-0.495872, -0}, {-0.134243, -0}, {0.0496005, 0}, {0.0822124, 0}, {0.0932992, 0}, + {0.0932992, 0}, {0.0822124, 0}, {0.0496005, 0}, {-0.134243, -0}, {-0.495872, -0}, {-0.817121, -0}, + {-0.948038, -0}, {-0.495872, -0}, {-0.178118, -0}, {-0.0920392, -0}, {-0.0867768, -0}, {-0.0717819, -0}, + {-0.0867768, -0}, {-0.0920392, -0}, {-0.178118, -0}, {-0.495872, -0}, {-0.948038, -0}, {-1.20269, -0}, + {-0.817121, -0}, {-0.44438, -0}, {-0.351398, -0}, {-0.414721, -0}, {-0.44835, -0}, {-0.44835, -0}, + {-0.414721, -0}, {-0.351398, -0}, {-0.44438, -0}, {-0.817121, -0}, {-1.20269, -0}, {-1.20269, -0}, + {-0.189753, -0}, {-0.465244, -0}, {-0.83641, -0}, {-1.23111, -0}, {-1.23111, -0}, {-0.83641, -0}, + {-0.465244, -0}, {-0.189753, -0}, {-0.115296, -0}, {-0.0810269, -0}, {-0.0810269, -0}, {-0.115296, -0}, + {-0.465244, -0}, {-1.10544, -0}, {-2.32054, -0}, {-3.15451, -0}, {-2.32054, -0}, {-1.10544, -0}, + {-0.465244, -0}, {-0.140892, -0}, {-0.0221196, -0}, {0.045208, 0}, {-0.0221196, -0}, {-0.140892, -0}, + {-0.83641, -0}, {-2.32054, -0}, {-4.55287, -0}, {-4.55287, -0}, {-2.32054, -0}, {-0.83641, -0}, + {-0.265159, -0}, {-0.017795, -0}, {0.0970702, 0}, {0.0970702, 0}, {-0.017795, -0}, {-0.265159, -0}, + {-1.23111, -0}, {-3.15451, -0}, {-4.55287, -0}, {-3.15451, -0}, {-1.23111, -0}, {-0.388653, -0}, + {-0.0442494, -0}, {0.104367, 0}, {0.176668, 0}, {0.104367, 0}, {-0.0442494, -0}, {-0.388653, -0}, + {-1.23111, -0}, {-2.32054, -0}, {-2.32054, -0}, {-1.23111, -0}, {-0.44835, -0}, {-0.0717819, -0}, + {0.0932992, 0}, {0.198163, 0}, {0.198163, 0}, {0.0932992, 0}, {-0.0717819, -0}, {-0.44835, -0}, + {-0.83641, -0}, {-1.10544, -0}, {-0.83641, -0}, {-0.388653, -0}, {-0.0717819, -0}, {0.0850364, 0}, + {0.171922, 0}, {0.234644, 0}, {0.171922, 0}, {0.0850364, 0}, {-0.0717819, -0}, {-0.388653, -0}, + {-0.465244, -0}, {-0.465244, -0}, {-0.265159, -0}, {-0.0442494, -0}, {0.0932992, 0}, {0.171922, 0}, + {0.228202, 0}, {0.228202, 0}, {0.171922, 0}, {0.0932992, 0}, {-0.0442494, -0}, {-0.265159, -0}, + {-0.189753, -0}, {-0.140892, -0}, {-0.017795, -0}, {0.104367, 0}, {0.198163, 0}, {0.234644, 0}, + {0.228202, 0}, {0.234644, 0}, {0.198163, 0}, {0.104367, 0}, {-0.017795, -0}, {-0.140892, -0}, + {-0.115296, -0}, {-0.0221196, -0}, {0.0970702, 0}, {0.176668, 0}, {0.198163, 0}, {0.171922, 0}, + {0.171922, 0}, {0.198163, 0}, {0.176668, 0}, {0.0970702, 0}, {-0.0221196, -0}, {-0.115296, -0}, + {-0.0810269, -0}, {0.045208, 0}, {0.0970702, 0}, {0.104367, 0}, {0.0932992, 0}, {0.0850364, 0}, + {0.0932992, 0}, {0.104367, 0}, {0.0970702, 0}, {0.045208, 0}, {-0.0810269, -0}, {-0.16644, -0}, + {-0.0810269, -0}, {-0.0221196, -0}, {-0.017795, -0}, {-0.0442494, -0}, {-0.0717819, -0}, {-0.0717819, -0}, + {-0.0442494, -0}, {-0.017795, -0}, {-0.0221196, -0}, {-0.0810269, -0}, {-0.166599, -0}, {-0.166599, -0}, + {-0.115296, -0}, {-0.140892, -0}, {-0.265159, -0}, {-0.388653, -0}, {-0.44835, -0}, {-0.388653, -0}, + {-0.265159, -0}, {-0.140892, -0}, {-0.115296, -0}, {-0.16644, -0}, {-0.166599, -0}, {-0.16644, -0}, + {-0.12949, -0}, {-0.465244, -0}, {-0.870926, -0}, {-1.08152, -0}, {-0.870926, -0}, {-0.465244, -0}, + {-0.12949, -0}, {0.0416801, 0}, {0.127366, 0}, {0.183592, 0}, {0.127366, 0}, {0.0416801, 0}, + {-0.465244, -0}, {-1.13517, -0}, {-1.86732, -0}, {-1.86732, -0}, {-1.13517, -0}, {-0.465244, -0}, + {-0.0838582, -0}, {0.0825835, 0}, {0.171812, 0}, {0.171812, 0}, {0.0825835, 0}, {-0.0838582, -0}, + {-0.870926, -0}, {-1.86732, -0}, {-2.49545, -0}, {-1.86732, -0}, {-0.870926, -0}, {-0.265159, -0}, + {0.0289023, 0}, {0.1482, 0}, {0.189344, 0}, {0.1482, 0}, {0.0289023, 0}, {-0.265159, -0}, + {-1.08152, -0}, {-1.86732, -0}, {-1.86732, -0}, {-1.08152, -0}, {-0.414721, -0}, {-0.0442494, -0}, + {0.124563, 0}, {0.187096, 0}, {0.187096, 0}, {0.124563, 0}, {-0.0442494, -0}, {-0.414721, -0}, + {-0.870926, -0}, {-1.13517, -0}, {-0.870926, -0}, {-0.414721, -0}, {-0.0867768, -0}, {0.0932992, 0}, + {0.178608, 0}, {0.210177, 0}, {0.178608, 0}, {0.0932992, 0}, {-0.0867768, -0}, {-0.414721, -0}, + {-0.465244, -0}, {-0.465244, -0}, {-0.265159, -0}, {-0.0442494, -0}, {0.0932992, 0}, {0.171922, 0}, + {0.228202, 0}, {0.228202, 0}, {0.171922, 0}, {0.0932992, 0}, {-0.0442494, -0}, {-0.265159, -0}, + {-0.12949, -0}, {-0.0838582, -0}, {0.0289023, 0}, {0.124563, 0}, {0.178608, 0}, {0.228202, 0}, + {0.25538, 0}, {0.228202, 0}, {0.178608, 0}, {0.124563, 0}, {0.0289023, 0}, {-0.0838582, -0}, + {0.0416801, 0}, {0.0825835, 0}, {0.1482, 0}, {0.187096, 0}, {0.210177, 0}, {0.228202, 0}, + {0.228202, 0}, {0.210177, 0}, {0.187096, 0}, {0.1482, 0}, {0.0825835, 0}, {0.0416801, 0}, + {0.127366, 0}, {0.171812, 0}, {0.189344, 0}, {0.187096, 0}, {0.178608, 0}, {0.171922, 0}, + {0.178608, 0}, {0.187096, 0}, {0.189344, 0}, {0.171812, 0}, {0.127366, 0}, {0.10143, 0}, + {0.183592, 0}, {0.171812, 0}, {0.1482, 0}, {0.124563, 0}, {0.0932992, 0}, {0.0932992, 0}, + {0.124563, 0}, {0.1482, 0}, {0.171812, 0}, {0.183592, 0}, {0.155259, 0}, {0.155259, 0}, + {0.127366, 0}, {0.0825835, 0}, {0.0289023, 0}, {-0.0442494, -0}, {-0.0867768, -0}, {-0.0442494, -0}, + {0.0289023, 0}, {0.0825835, 0}, {0.127366, 0}, {0.155259, 0}, {0.160174, 0}, {0.155259, 0}, + {0.0416801, 0}, {-0.0838582, -0}, {-0.265159, -0}, {-0.414721, -0}, {-0.414721, -0}, {-0.265159, -0}, + {-0.0838582, -0}, {0.0416801, 0}, {0.10143, 0}, {0.155259, 0}, {0.155259, 0}, {0.10143, 0}, + {-0.189753, -0}, {-0.597029, -0}, {-0.942023, -0}, {-0.942023, -0}, {-0.597029, -0}, {-0.189753, -0}, + {0.0416801, 0}, {0.174154, 0}, {0.217796, 0}, {0.217796, 0}, {0.174154, 0}, {0.0416801, 0}, + {-0.597029, -0}, {-1.18884, -0}, {-1.44437, -0}, {-1.18884, -0}, {-0.597029, -0}, {-0.140892, -0}, + {0.0825835, 0}, {0.185014, 0}, {0.197828, 0}, {0.185014, 0}, {0.0825835, 0}, {-0.140892, -0}, + {-0.942023, -0}, {-1.44437, -0}, {-1.44437, -0}, {-0.942023, -0}, {-0.351398, -0}, {-0.017795, -0}, + {0.1482, 0}, {0.18618, 0}, {0.18618, 0}, {0.1482, 0}, {-0.017795, -0}, {-0.351398, -0}, + {-0.942023, -0}, {-1.18884, -0}, {-0.942023, -0}, {-0.442202, -0}, {-0.0920392, -0}, {0.104367, 0}, + {0.187096, 0}, {0.183356, 0}, {0.187096, 0}, {0.104367, 0}, {-0.0920392, -0}, {-0.442202, -0}, + {-0.597029, -0}, {-0.597029, -0}, {-0.351398, -0}, {-0.0920392, -0}, {0.0822124, 0}, {0.198163, 0}, + {0.210177, 0}, {0.210177, 0}, {0.198163, 0}, {0.0822124, 0}, {-0.0920392, -0}, {-0.351398, -0}, + {-0.189753, -0}, {-0.140892, -0}, {-0.017795, -0}, {0.104367, 0}, {0.198163, 0}, {0.234644, 0}, + {0.228202, 0}, {0.234644, 0}, {0.198163, 0}, {0.104367, 0}, {-0.017795, -0}, {-0.140892, -0}, + {0.0416801, 0}, {0.0825835, 0}, {0.1482, 0}, {0.187096, 0}, {0.210177, 0}, {0.228202, 0}, + {0.228202, 0}, {0.210177, 0}, {0.187096, 0}, {0.1482, 0}, {0.0825835, 0}, {0.0416801, 0}, + {0.174154, 0}, {0.185014, 0}, {0.18618, 0}, {0.183356, 0}, {0.210177, 0}, {0.234644, 0}, + {0.210177, 0}, {0.183356, 0}, {0.18618, 0}, {0.185014, 0}, {0.174154, 0}, {0.173086, 0}, + {0.217796, 0}, {0.197828, 0}, {0.18618, 0}, {0.187096, 0}, {0.198163, 0}, {0.198163, 0}, + {0.187096, 0}, {0.18618, 0}, {0.197828, 0}, {0.217796, 0}, {0.239988, 0}, {0.239988, 0}, + {0.217796, 0}, {0.185014, 0}, {0.1482, 0}, {0.104367, 0}, {0.0822124, 0}, {0.104367, 0}, + {0.1482, 0}, {0.185014, 0}, {0.217796, 0}, {0.239116, 0}, {0.241937, 0}, {0.239116, 0}, + {0.174154, 0}, {0.0825835, 0}, {-0.017795, -0}, {-0.0920392, -0}, {-0.0920392, -0}, {-0.017795, -0}, + {0.0825835, 0}, {0.174154, 0}, {0.239988, 0}, {0.241937, 0}, {0.241937, 0}, {0.239988, 0}, + {0.0416801, 0}, {-0.140892, -0}, {-0.351398, -0}, {-0.442202, -0}, {-0.351398, -0}, {-0.140892, -0}, + {0.0416801, 0}, {0.173086, 0}, {0.239988, 0}, {0.239116, 0}, {0.239988, 0}, {0.173086, 0}, + {-0.555382, -0}, {-1.1751, -0}, {-1.47737, -0}, {-1.1751, -0}, {-0.555382, -0}, {-0.115296, -0}, + {0.127366, 0}, {0.217796, 0}, {0.207667, 0}, {0.217796, 0}, {0.127366, 0}, {-0.115296, -0}, + {-1.1751, -0}, {-1.77383, -0}, {-1.77383, -0}, {-1.1751, -0}, {-0.44438, -0}, {-0.0221196, -0}, + {0.171812, 0}, {0.197828, 0}, {0.197828, 0}, {0.171812, 0}, {-0.0221196, -0}, {-0.44438, -0}, + {-1.47737, -0}, {-1.77383, -0}, {-1.47737, -0}, {-0.758269, -0}, {-0.178118, -0}, {0.0970702, 0}, + {0.189344, 0}, {0.18618, 0}, {0.189344, 0}, {0.0970702, 0}, {-0.178118, -0}, {-0.758269, -0}, + {-1.1751, -0}, {-1.1751, -0}, {-0.758269, -0}, {-0.241459, -0}, {0.0496005, 0}, {0.176668, 0}, + {0.187096, 0}, {0.187096, 0}, {0.176668, 0}, {0.0496005, 0}, {-0.241459, -0}, {-0.758269, -0}, + {-0.555382, -0}, {-0.44438, -0}, {-0.178118, -0}, {0.0496005, 0}, {0.175586, 0}, {0.198163, 0}, + {0.178608, 0}, {0.198163, 0}, {0.175586, 0}, {0.0496005, 0}, {-0.178118, -0}, {-0.44438, -0}, + {-0.115296, -0}, {-0.0221196, -0}, {0.0970702, 0}, {0.176668, 0}, {0.198163, 0}, {0.171922, 0}, + {0.171922, 0}, {0.198163, 0}, {0.176668, 0}, {0.0970702, 0}, {-0.0221196, -0}, {-0.115296, -0}, + {0.127366, 0}, {0.171812, 0}, {0.189344, 0}, {0.187096, 0}, {0.178608, 0}, {0.171922, 0}, + {0.178608, 0}, {0.187096, 0}, {0.189344, 0}, {0.171812, 0}, {0.127366, 0}, {0.10143, 0}, + {0.217796, 0}, {0.197828, 0}, {0.18618, 0}, {0.187096, 0}, {0.198163, 0}, {0.198163, 0}, + {0.187096, 0}, {0.18618, 0}, {0.197828, 0}, {0.217796, 0}, {0.239988, 0}, {0.239988, 0}, + {0.207667, 0}, {0.197828, 0}, {0.189344, 0}, {0.176668, 0}, {0.175586, 0}, {0.176668, 0}, + {0.189344, 0}, {0.197828, 0}, {0.207667, 0}, {0.251027, 0}, {0.285567, 0}, {0.251027, 0}, + {0.217796, 0}, {0.171812, 0}, {0.0970702, 0}, {0.0496005, 0}, {0.0496005, 0}, {0.0970702, 0}, + {0.171812, 0}, {0.217796, 0}, {0.251027, 0}, {0.278974, 0}, {0.278974, 0}, {0.251027, 0}, + {0.127366, 0}, {-0.0221196, -0}, {-0.178118, -0}, {-0.241459, -0}, {-0.178118, -0}, {-0.0221196, -0}, + {0.127366, 0}, {0.239988, 0}, {0.285567, 0}, {0.278974, 0}, {0.285567, 0}, {0.239988, 0}, + {-0.115296, -0}, {-0.44438, -0}, {-0.758269, -0}, {-0.758269, -0}, {-0.44438, -0}, {-0.115296, -0}, + {0.10143, 0}, {0.239988, 0}, {0.251027, 0}, {0.251027, 0}, {0.239988, 0}, {0.10143, 0}, + {-2.07036, -0}, {-3.42536, -0}, {-3.42536, -0}, {-2.07036, -0}, {-0.817121, -0}, {-0.0810269, -0}, + {0.183592, 0}, {0.217796, 0}, {0.217796, 0}, {0.183592, 0}, {-0.0810269, -0}, {-0.817121, -0}, + {-3.42536, -0}, {-4.45942, -0}, {-3.42536, -0}, {-1.66995, -0}, {-0.495872, -0}, {0.045208, 0}, + {0.171812, 0}, {0.185014, 0}, {0.171812, 0}, {0.045208, 0}, {-0.495872, -0}, {-1.66995, -0}, + {-3.42536, -0}, {-3.42536, -0}, {-2.13999, -0}, {-0.86473, -0}, {-0.134243, -0}, {0.0970702, 0}, + {0.1482, 0}, {0.1482, 0}, {0.0970702, 0}, {-0.134243, -0}, {-0.86473, -0}, {-2.13999, -0}, + {-2.07036, -0}, {-1.66995, -0}, {-0.86473, -0}, {-0.208333, -0}, {0.0496005, 0}, {0.104367, 0}, + {0.124563, 0}, {0.104367, 0}, {0.0496005, 0}, {-0.208333, -0}, {-0.86473, -0}, {-1.66995, -0}, + {-0.817121, -0}, {-0.495872, -0}, {-0.134243, -0}, {0.0496005, 0}, {0.0822124, 0}, {0.0932992, 0}, + {0.0932992, 0}, {0.0822124, 0}, {0.0496005, 0}, {-0.134243, -0}, {-0.495872, -0}, {-0.817121, -0}, + {-0.0810269, -0}, {0.045208, 0}, {0.0970702, 0}, {0.104367, 0}, {0.0932992, 0}, {0.0850364, 0}, + {0.0932992, 0}, {0.104367, 0}, {0.0970702, 0}, {0.045208, 0}, {-0.0810269, -0}, {-0.16644, -0}, + {0.183592, 0}, {0.171812, 0}, {0.1482, 0}, {0.124563, 0}, {0.0932992, 0}, {0.0932992, 0}, + {0.124563, 0}, {0.1482, 0}, {0.171812, 0}, {0.183592, 0}, {0.155259, 0}, {0.155259, 0}, + {0.217796, 0}, {0.185014, 0}, {0.1482, 0}, {0.104367, 0}, {0.0822124, 0}, {0.104367, 0}, + {0.1482, 0}, {0.185014, 0}, {0.217796, 0}, {0.239116, 0}, {0.241937, 0}, {0.239116, 0}, + {0.217796, 0}, {0.171812, 0}, {0.0970702, 0}, {0.0496005, 0}, {0.0496005, 0}, {0.0970702, 0}, + {0.171812, 0}, {0.217796, 0}, {0.251027, 0}, {0.278974, 0}, {0.278974, 0}, {0.251027, 0}, + {0.183592, 0}, {0.045208, 0}, {-0.134243, -0}, {-0.208333, -0}, {-0.134243, -0}, {0.045208, 0}, + {0.183592, 0}, {0.239116, 0}, {0.278974, 0}, {0.301112, 0}, {0.278974, 0}, {0.239116, 0}, + {-0.0810269, -0}, {-0.495872, -0}, {-0.86473, -0}, {-0.86473, -0}, {-0.495872, -0}, {-0.0810269, -0}, + {0.155259, 0}, {0.241937, 0}, {0.278974, 0}, {0.278974, 0}, {0.241937, 0}, {0.155259, 0}, + {-0.817121, -0}, {-1.66995, -0}, {-2.13999, -0}, {-1.66995, -0}, {-0.817121, -0}, {-0.16644, -0}, + {0.155259, 0}, {0.239116, 0}, {0.251027, 0}, {0.239116, 0}, {0.155259, 0}, {-0.16644, -0}, + {-7.87427, -0}, {-10.9702, -0}, {-7.87427, -0}, {-3.22832, -0}, {-0.948038, -0}, {-0.0810269, -0}, + {0.127366, 0}, {0.174154, 0}, {0.127366, 0}, {-0.0810269, -0}, {-0.948038, -0}, {-3.22832, -0}, + {-10.9702, -0}, {-10.9702, -0}, {-5.7427, -0}, {-1.97344, -0}, {-0.495872, -0}, {-0.0221196, -0}, + {0.0825835, 0}, {0.0825835, 0}, {-0.0221196, -0}, {-0.495872, -0}, {-1.97344, -0}, {-5.7427, -0}, + {-7.87427, -0}, {-5.7427, -0}, {-2.54954, -0}, {-0.86473, -0}, {-0.178118, -0}, {-0.017795, -0}, + {0.0289023, 0}, {-0.017795, -0}, {-0.178118, -0}, {-0.86473, -0}, {-2.54954, -0}, {-5.7427, -0}, + {-3.22832, -0}, {-1.97344, -0}, {-0.86473, -0}, {-0.241459, -0}, {-0.0920392, -0}, {-0.0442494, -0}, + {-0.0442494, -0}, {-0.0920392, -0}, {-0.241459, -0}, {-0.86473, -0}, {-1.97344, -0}, {-3.22832, -0}, + {-0.948038, -0}, {-0.495872, -0}, {-0.178118, -0}, {-0.0920392, -0}, {-0.0867768, -0}, {-0.0717819, -0}, + {-0.0867768, -0}, {-0.0920392, -0}, {-0.178118, -0}, {-0.495872, -0}, {-0.948038, -0}, {-1.20269, -0}, + {-0.0810269, -0}, {-0.0221196, -0}, {-0.017795, -0}, {-0.0442494, -0}, {-0.0717819, -0}, {-0.0717819, -0}, + {-0.0442494, -0}, {-0.017795, -0}, {-0.0221196, -0}, {-0.0810269, -0}, {-0.166599, -0}, {-0.166599, -0}, + {0.127366, 0}, {0.0825835, 0}, {0.0289023, 0}, {-0.0442494, -0}, {-0.0867768, -0}, {-0.0442494, -0}, + {0.0289023, 0}, {0.0825835, 0}, {0.127366, 0}, {0.155259, 0}, {0.160174, 0}, {0.155259, 0}, + {0.174154, 0}, {0.0825835, 0}, {-0.017795, -0}, {-0.0920392, -0}, {-0.0920392, -0}, {-0.017795, -0}, + {0.0825835, 0}, {0.174154, 0}, {0.239988, 0}, {0.241937, 0}, {0.241937, 0}, {0.239988, 0}, + {0.127366, 0}, {-0.0221196, -0}, {-0.178118, -0}, {-0.241459, -0}, {-0.178118, -0}, {-0.0221196, -0}, + {0.127366, 0}, {0.239988, 0}, {0.285567, 0}, {0.278974, 0}, {0.285567, 0}, {0.239988, 0}, + {-0.0810269, -0}, {-0.495872, -0}, {-0.86473, -0}, {-0.86473, -0}, {-0.495872, -0}, {-0.0810269, -0}, + {0.155259, 0}, {0.241937, 0}, {0.278974, 0}, {0.278974, 0}, {0.241937, 0}, {0.155259, 0}, + {-0.948038, -0}, {-1.97344, -0}, {-2.54954, -0}, {-1.97344, -0}, {-0.948038, -0}, {-0.166599, -0}, + {0.160174, 0}, {0.241937, 0}, {0.285567, 0}, {0.241937, 0}, {0.160174, 0}, {-0.166599, -0}, + {-3.22832, -0}, {-5.7427, -0}, {-5.7427, -0}, {-3.22832, -0}, {-1.20269, -0}, {-0.166599, -0}, + {0.155259, 0}, {0.239988, 0}, {0.239988, 0}, {0.155259, 0}, {-0.166599, -0}, {-1.20269, -0}, + {-21.6034, -0}, {-21.6034, -0}, {-10.879, -0}, {-3.22832, -0}, {-0.817121, -0}, {-0.115296, -0}, + {0.0416801, 0}, {0.0416801, 0}, {-0.115296, -0}, {-0.817121, -0}, {-3.22832, -0}, {-10.879, -0}, + {-21.6034, -0}, {-15.3017, -0}, {-5.7427, -0}, {-1.66995, -0}, {-0.44438, -0}, {-0.140892, -0}, + {-0.0838582, -0}, {-0.140892, -0}, {-0.44438, -0}, {-1.66995, -0}, {-5.7427, -0}, {-15.3017, -0}, + {-10.879, -0}, {-5.7427, -0}, {-2.13999, -0}, {-0.758269, -0}, {-0.351398, -0}, {-0.265159, -0}, + {-0.265159, -0}, {-0.351398, -0}, {-0.758269, -0}, {-2.13999, -0}, {-5.7427, -0}, {-10.879, -0}, + {-3.22832, -0}, {-1.66995, -0}, {-0.758269, -0}, {-0.442202, -0}, {-0.414721, -0}, {-0.388653, -0}, + {-0.414721, -0}, {-0.442202, -0}, {-0.758269, -0}, {-1.66995, -0}, {-3.22832, -0}, {-4.24378, -0}, + {-0.817121, -0}, {-0.44438, -0}, {-0.351398, -0}, {-0.414721, -0}, {-0.44835, -0}, {-0.44835, -0}, + {-0.414721, -0}, {-0.351398, -0}, {-0.44438, -0}, {-0.817121, -0}, {-1.20269, -0}, {-1.20269, -0}, + {-0.115296, -0}, {-0.140892, -0}, {-0.265159, -0}, {-0.388653, -0}, {-0.44835, -0}, {-0.388653, -0}, + {-0.265159, -0}, {-0.140892, -0}, {-0.115296, -0}, {-0.16644, -0}, {-0.166599, -0}, {-0.16644, -0}, + {0.0416801, 0}, {-0.0838582, -0}, {-0.265159, -0}, {-0.414721, -0}, {-0.414721, -0}, {-0.265159, -0}, + {-0.0838582, -0}, {0.0416801, 0}, {0.10143, 0}, {0.155259, 0}, {0.155259, 0}, {0.10143, 0}, + {0.0416801, 0}, {-0.140892, -0}, {-0.351398, -0}, {-0.442202, -0}, {-0.351398, -0}, {-0.140892, -0}, + {0.0416801, 0}, {0.173086, 0}, {0.239988, 0}, {0.239116, 0}, {0.239988, 0}, {0.173086, 0}, + {-0.115296, -0}, {-0.44438, -0}, {-0.758269, -0}, {-0.758269, -0}, {-0.44438, -0}, {-0.115296, -0}, + {0.10143, 0}, {0.239988, 0}, {0.251027, 0}, {0.251027, 0}, {0.239988, 0}, {0.10143, 0}, + {-0.817121, -0}, {-1.66995, -0}, {-2.13999, -0}, {-1.66995, -0}, {-0.817121, -0}, {-0.16644, -0}, + {0.155259, 0}, {0.239116, 0}, {0.251027, 0}, {0.239116, 0}, {0.155259, 0}, {-0.16644, -0}, + {-3.22832, -0}, {-5.7427, -0}, {-5.7427, -0}, {-3.22832, -0}, {-1.20269, -0}, {-0.166599, -0}, + {0.155259, 0}, {0.239988, 0}, {0.239988, 0}, {0.155259, 0}, {-0.166599, -0}, {-1.20269, -0}, + {-10.879, -0}, {-15.3017, -0}, {-10.879, -0}, {-4.24378, -0}, {-1.20269, -0}, {-0.16644, -0}, + {0.10143, 0}, {0.173086, 0}, {0.10143, 0}, {-0.16644, -0}, {-1.20269, -0}, {-4.24378, -0}}; - std::vector> expected_out_spin = { - {-21.3427, -21.3427}, {-15.3194, -15.3194}, {-5.63064, -5.63064}, {-1.51808, -1.51808}, {-0.427844, -0.427844}, {-0.156864, -0.156864}, {-0.109912, -0.109912}, {-0.156864, -0.156864}, {-0.427844, -0.427844}, {-1.51808, -1.51808}, {-5.63064, -5.63064}, {-15.3194, -15.3194}, {-15.3194, -15.3194}, {-7.81799, -7.81799}, {-2.4828, -2.4828}, {-0.875722, -0.875722}, {-0.452617, -0.452617}, {-0.351472, -0.351472}, {-0.351472, -0.351472}, {-0.452617, -0.452617}, {-0.875722, -0.875722}, {-2.4828, -2.4828}, {-7.81799, -7.81799}, {-15.3194, -15.3194}, {-5.63064, -5.63064}, {-2.4828, -2.4828}, {-1.0933, -1.0933}, {-0.702028, -0.702028}, {-0.64247, -0.64247}, {-0.614035, -0.614035}, {-0.64247, -0.64247}, {-0.702028, -0.702028}, {-1.0933, -1.0933}, {-2.4828, -2.4828}, {-5.63064, -5.63064}, {-7.75282, -7.75282}, {-1.51808, -1.51808}, {-0.875722, -0.875722}, {-0.702028, -0.702028}, {-0.793018, -0.793018}, {-0.892931, -0.892931}, {-0.892931, -0.892931}, {-0.793018, -0.793018}, {-0.702028, -0.702028}, {-0.875722, -0.875722}, {-1.51808, -1.51808}, {-2.34151, -2.34151}, {-2.34151, -2.34151}, {-0.427844, -0.427844}, {-0.452617, -0.452617}, {-0.64247, -0.64247}, {-0.892931, -0.892931}, {-1.03013, -1.03013}, {-0.892931, -0.892931}, {-0.64247, -0.64247}, {-0.452617, -0.452617}, {-0.427844, -0.427844}, {-0.618499, -0.618499}, {-0.713398, -0.713398}, {-0.618499, -0.618499}, {-0.156864, -0.156864}, {-0.351472, -0.351472}, {-0.614035, -0.614035}, {-0.892931, -0.892931}, {-0.892931, -0.892931}, {-0.614035, -0.614035}, {-0.351472, -0.351472}, {-0.156864, -0.156864}, {-0.105947, -0.105947}, {-0.0832459, -0.0832459}, {-0.0832459, -0.0832459}, {-0.105947, -0.105947}, {-0.109912, -0.109912}, {-0.351472, -0.351472}, {-0.64247, -0.64247}, {-0.793018, -0.793018}, {-0.64247, -0.64247}, {-0.351472, -0.351472}, {-0.109912, -0.109912}, {0.0132163, 0.0132163}, {0.0744409, 0.0744409}, {0.114396, 0.114396}, {0.0744409, 0.0744409}, {0.0132163, 0.0132163}, {-0.156864, -0.156864}, {-0.452617, -0.452617}, {-0.702028, -0.702028}, {-0.702028, -0.702028}, {-0.452617, -0.452617}, {-0.156864, -0.156864}, {0.0132163, 0.0132163}, {0.111154, 0.111154}, {0.143719, 0.143719}, {0.143719, 0.143719}, {0.111154, 0.111154}, {0.0132163, 0.0132163}, {-0.427844, -0.427844}, {-0.875722, -0.875722}, {-1.0933, -1.0933}, {-0.875722, -0.875722}, {-0.427844, -0.427844}, {-0.105947, -0.105947}, {0.0744409, 0.0744409}, {0.143719, 0.143719}, {0.137941, 0.137941}, {0.143719, 0.143719}, {0.0744409, 0.0744409}, {-0.105947, -0.105947}, {-1.51808, -1.51808}, {-2.4828, -2.4828}, {-2.4828, -2.4828}, {-1.51808, -1.51808}, {-0.618499, -0.618499}, {-0.0832459, -0.0832459}, {0.114396, 0.114396}, {0.143719, 0.143719}, {0.143719, 0.143719}, {0.114396, 0.114396}, {-0.0832459, -0.0832459}, {-0.618499, -0.618499}, {-5.63064, -5.63064}, {-7.81799, -7.81799}, {-5.63064, -5.63064}, {-2.34151, -2.34151}, {-0.713398, -0.713398}, {-0.0832459, -0.0832459}, {0.0744409, 0.0744409}, {0.111154, 0.111154}, {0.0744409, 0.0744409}, {-0.0832459, -0.0832459}, {-0.713398, -0.713398}, {-2.34151, -2.34151}, {-15.3194, -15.3194}, {-15.3194, -15.3194}, {-7.75282, -7.75282}, {-2.34151, -2.34151}, {-0.618499, -0.618499}, {-0.105947, -0.105947}, {0.0132163, 0.0132163}, {0.0132163, 0.0132163}, {-0.105947, -0.105947}, {-0.618499, -0.618499}, {-2.34151, -2.34151}, {-7.75282, -7.75282}, {-15.3194, -15.3194}, {-7.81799, -7.81799}, {-2.4828, -2.4828}, {-0.875722, -0.875722}, {-0.452617, -0.452617}, {-0.351472, -0.351472}, {-0.351472, -0.351472}, {-0.452617, -0.452617}, {-0.875722, -0.875722}, {-2.4828, -2.4828}, {-7.81799, -7.81799}, {-15.3194, -15.3194}, {-7.81799, -7.81799}, {-3.21636, -3.21636}, {-1.30653, -1.30653}, {-0.879784, -0.879784}, {-0.831788, -0.831788}, {-0.806318, -0.806318}, {-0.831788, -0.831788}, {-0.879784, -0.879784}, {-1.30653, -1.30653}, {-3.21636, -3.21636}, {-7.81799, -7.81799}, {-10.8749, -10.8749}, {-2.4828, -2.4828}, {-1.30653, -1.30653}, {-1.06387, -1.06387}, {-1.35349, -1.35349}, {-1.66622, -1.66622}, {-1.66622, -1.66622}, {-1.35349, -1.35349}, {-1.06387, -1.06387}, {-1.30653, -1.30653}, {-2.4828, -2.4828}, {-4.12343, -4.12343}, {-4.12343, -4.12343}, {-0.875722, -0.875722}, {-0.879784, -0.879784}, {-1.35349, -1.35349}, {-2.25569, -2.25569}, {-2.73085, -2.73085}, {-2.25569, -2.25569}, {-1.35349, -1.35349}, {-0.879784, -0.879784}, {-0.875722, -0.875722}, {-1.2319, -1.2319}, {-1.44876, -1.44876}, {-1.2319, -1.2319}, {-0.452617, -0.452617}, {-0.831788, -0.831788}, {-1.66622, -1.66622}, {-2.73085, -2.73085}, {-2.73085, -2.73085}, {-1.66622, -1.66622}, {-0.831788, -0.831788}, {-0.452617, -0.452617}, {-0.347014, -0.347014}, {-0.386005, -0.386005}, {-0.386005, -0.386005}, {-0.347014, -0.347014}, {-0.351472, -0.351472}, {-0.806318, -0.806318}, {-1.66622, -1.66622}, {-2.25569, -2.25569}, {-1.66622, -1.66622}, {-0.806318, -0.806318}, {-0.351472, -0.351472}, {-0.120705, -0.120705}, {-0.0369426, -0.0369426}, {0.0106435, 0.0106435}, {-0.0369426, -0.0369426}, {-0.120705, -0.120705}, {-0.351472, -0.351472}, {-0.831788, -0.831788}, {-1.35349, -1.35349}, {-1.35349, -1.35349}, {-0.831788, -0.831788}, {-0.351472, -0.351472}, {-0.0762117, -0.0762117}, {0.0443525, 0.0443525}, {0.108692, 0.108692}, {0.108692, 0.108692}, {0.0443525, 0.0443525}, {-0.0762117, -0.0762117}, {-0.452617, -0.452617}, {-0.879784, -0.879784}, {-1.06387, -1.06387}, {-0.879784, -0.879784}, {-0.452617, -0.452617}, {-0.120705, -0.120705}, {0.0443525, 0.0443525}, {0.120865, 0.120865}, {0.130971, 0.130971}, {0.120865, 0.120865}, {0.0443525, 0.0443525}, {-0.120705, -0.120705}, {-0.875722, -0.875722}, {-1.30653, -1.30653}, {-1.30653, -1.30653}, {-0.875722, -0.875722}, {-0.347014, -0.347014}, {-0.0369426, -0.0369426}, {0.108692, 0.108692}, {0.130971, 0.130971}, {0.130971, 0.130971}, {0.108692, 0.108692}, {-0.0369426, -0.0369426}, {-0.347014, -0.347014}, {-2.4828, -2.4828}, {-3.21636, -3.21636}, {-2.4828, -2.4828}, {-1.2319, -1.2319}, {-0.386005, -0.386005}, {0.0106435, 0.0106435}, {0.108692, 0.108692}, {0.120865, 0.120865}, {0.108692, 0.108692}, {0.0106435, 0.0106435}, {-0.386005, -0.386005}, {-1.2319, -1.2319}, {-7.81799, -7.81799}, {-7.81799, -7.81799}, {-4.12343, -4.12343}, {-1.44876, -1.44876}, {-0.386005, -0.386005}, {-0.0369426, -0.0369426}, {0.0443525, 0.0443525}, {0.0443525, 0.0443525}, {-0.0369426, -0.0369426}, {-0.386005, -0.386005}, {-1.44876, -1.44876}, {-4.12343, -4.12343}, {-15.3194, -15.3194}, {-10.8749, -10.8749}, {-4.12343, -4.12343}, {-1.2319, -1.2319}, {-0.347014, -0.347014}, {-0.120705, -0.120705}, {-0.0762117, -0.0762117}, {-0.120705, -0.120705}, {-0.347014, -0.347014}, {-1.2319, -1.2319}, {-4.12343, -4.12343}, {-10.8749, -10.8749}, {-5.63064, -5.63064}, {-2.4828, -2.4828}, {-1.0933, -1.0933}, {-0.702028, -0.702028}, {-0.64247, -0.64247}, {-0.614035, -0.614035}, {-0.64247, -0.64247}, {-0.702028, -0.702028}, {-1.0933, -1.0933}, {-2.4828, -2.4828}, {-5.63064, -5.63064}, {-7.75282, -7.75282}, {-2.4828, -2.4828}, {-1.30653, -1.30653}, {-1.06387, -1.06387}, {-1.35349, -1.35349}, {-1.66622, -1.66622}, {-1.66622, -1.66622}, {-1.35349, -1.35349}, {-1.06387, -1.06387}, {-1.30653, -1.30653}, {-2.4828, -2.4828}, {-4.12343, -4.12343}, {-4.12343, -4.12343}, {-1.0933, -1.0933}, {-1.06387, -1.06387}, {-1.79984, -1.79984}, {-3.24464, -3.24464}, {-3.97898, -3.97898}, {-3.24464, -3.24464}, {-1.79984, -1.79984}, {-1.06387, -1.06387}, {-1.0933, -1.0933}, {-1.56806, -1.56806}, {-1.85966, -1.85966}, {-1.56806, -1.56806}, {-0.702028, -0.702028}, {-1.35349, -1.35349}, {-3.24464, -3.24464}, {-5.5069, -5.5069}, {-5.5069, -5.5069}, {-3.24464, -3.24464}, {-1.35349, -1.35349}, {-0.702028, -0.702028}, {-0.574855, -0.574855}, {-0.653268, -0.653268}, {-0.653268, -0.653268}, {-0.574855, -0.574855}, {-0.64247, -0.64247}, {-1.66622, -1.66622}, {-3.97898, -3.97898}, {-5.5069, -5.5069}, {-3.97898, -3.97898}, {-1.66622, -1.66622}, {-0.64247, -0.64247}, {-0.274405, -0.274405}, {-0.152598, -0.152598}, {-0.122002, -0.122002}, {-0.152598, -0.152598}, {-0.274405, -0.274405}, {-0.614035, -0.614035}, {-1.66622, -1.66622}, {-3.24464, -3.24464}, {-3.24464, -3.24464}, {-1.66622, -1.66622}, {-0.614035, -0.614035}, {-0.20641, -0.20641}, {-0.02972, -0.02972}, {0.0521328, 0.0521328}, {0.0521328, 0.0521328}, {-0.02972, -0.02972}, {-0.20641, -0.20641}, {-0.64247, -0.64247}, {-1.35349, -1.35349}, {-1.79984, -1.79984}, {-1.35349, -1.35349}, {-0.64247, -0.64247}, {-0.20641, -0.20641}, {0.00680462, 0.00680462}, {0.0937547, 0.0937547}, {0.123694, 0.123694}, {0.0937547, 0.0937547}, {0.00680462, 0.00680462}, {-0.20641, -0.20641}, {-0.702028, -0.702028}, {-1.06387, -1.06387}, {-1.06387, -1.06387}, {-0.702028, -0.702028}, {-0.274405, -0.274405}, {-0.02972, -0.02972}, {0.0937547, 0.0937547}, {0.123259, 0.123259}, {0.123259, 0.123259}, {0.0937547, 0.0937547}, {-0.02972, -0.02972}, {-0.274405, -0.274405}, {-1.0933, -1.0933}, {-1.30653, -1.30653}, {-1.0933, -1.0933}, {-0.574855, -0.574855}, {-0.152598, -0.152598}, {0.0521328, 0.0521328}, {0.123694, 0.123694}, {0.123259, 0.123259}, {0.123694, 0.123694}, {0.0521328, 0.0521328}, {-0.152598, -0.152598}, {-0.574855, -0.574855}, {-2.4828, -2.4828}, {-2.4828, -2.4828}, {-1.56806, -1.56806}, {-0.653268, -0.653268}, {-0.122002, -0.122002}, {0.0521328, 0.0521328}, {0.0937547, 0.0937547}, {0.0937547, 0.0937547}, {0.0521328, 0.0521328}, {-0.122002, -0.122002}, {-0.653268, -0.653268}, {-1.56806, -1.56806}, {-5.63064, -5.63064}, {-4.12343, -4.12343}, {-1.85966, -1.85966}, {-0.653268, -0.653268}, {-0.152598, -0.152598}, {-0.02972, -0.02972}, {0.00680462, 0.00680462}, {-0.02972, -0.02972}, {-0.152598, -0.152598}, {-0.653268, -0.653268}, {-1.85966, -1.85966}, {-4.12343, -4.12343}, {-7.75282, -7.75282}, {-4.12343, -4.12343}, {-1.56806, -1.56806}, {-0.574855, -0.574855}, {-0.274405, -0.274405}, {-0.20641, -0.20641}, {-0.20641, -0.20641}, {-0.274405, -0.274405}, {-0.574855, -0.574855}, {-1.56806, -1.56806}, {-4.12343, -4.12343}, {-7.75282, -7.75282}, {-1.51808, -1.51808}, {-0.875722, -0.875722}, {-0.702028, -0.702028}, {-0.793018, -0.793018}, {-0.892931, -0.892931}, {-0.892931, -0.892931}, {-0.793018, -0.793018}, {-0.702028, -0.702028}, {-0.875722, -0.875722}, {-1.51808, -1.51808}, {-2.34151, -2.34151}, {-2.34151, -2.34151}, {-0.875722, -0.875722}, {-0.879784, -0.879784}, {-1.35349, -1.35349}, {-2.25569, -2.25569}, {-2.73085, -2.73085}, {-2.25569, -2.25569}, {-1.35349, -1.35349}, {-0.879784, -0.879784}, {-0.875722, -0.875722}, {-1.2319, -1.2319}, {-1.44876, -1.44876}, {-1.2319, -1.2319}, {-0.702028, -0.702028}, {-1.35349, -1.35349}, {-3.24464, -3.24464}, {-5.5069, -5.5069}, {-5.5069, -5.5069}, {-3.24464, -3.24464}, {-1.35349, -1.35349}, {-0.702028, -0.702028}, {-0.574855, -0.574855}, {-0.653268, -0.653268}, {-0.653268, -0.653268}, {-0.574855, -0.574855}, {-0.793018, -0.793018}, {-2.25569, -2.25569}, {-5.5069, -5.5069}, {-7.51452, -7.51452}, {-5.5069, -5.5069}, {-2.25569, -2.25569}, {-0.793018, -0.793018}, {-0.340655, -0.340655}, {-0.199608, -0.199608}, {-0.176834, -0.176834}, {-0.199608, -0.199608}, {-0.340655, -0.340655}, {-0.892931, -0.892931}, {-2.73085, -2.73085}, {-5.5069, -5.5069}, {-5.5069, -5.5069}, {-2.73085, -2.73085}, {-0.892931, -0.892931}, {-0.313913, -0.313913}, {-0.0845755, -0.0845755}, {0.0157278, 0.0157278}, {0.0157278, 0.0157278}, {-0.0845755, -0.0845755}, {-0.313913, -0.313913}, {-0.892931, -0.892931}, {-2.25569, -2.25569}, {-3.24464, -3.24464}, {-2.25569, -2.25569}, {-0.892931, -0.892931}, {-0.292461, -0.292461}, {-0.0454612, -0.0454612}, {0.0609987, 0.0609987}, {0.112758, 0.112758}, {0.0609987, 0.0609987}, {-0.0454612, -0.0454612}, {-0.292461, -0.292461}, {-0.793018, -0.793018}, {-1.35349, -1.35349}, {-1.35349, -1.35349}, {-0.793018, -0.793018}, {-0.313913, -0.313913}, {-0.0454612, -0.0454612}, {0.0776152, 0.0776152}, {0.123461, 0.123461}, {0.123461, 0.123461}, {0.0776152, 0.0776152}, {-0.0454612, -0.0454612}, {-0.313913, -0.313913}, {-0.702028, -0.702028}, {-0.879784, -0.879784}, {-0.702028, -0.702028}, {-0.340655, -0.340655}, {-0.0845755, -0.0845755}, {0.0609987, 0.0609987}, {0.123461, 0.123461}, {0.121793, 0.121793}, {0.123461, 0.123461}, {0.0609987, 0.0609987}, {-0.0845755, -0.0845755}, {-0.340655, -0.340655}, {-0.875722, -0.875722}, {-0.875722, -0.875722}, {-0.574855, -0.574855}, {-0.199608, -0.199608}, {0.0157278, 0.0157278}, {0.112758, 0.112758}, {0.123461, 0.123461}, {0.123461, 0.123461}, {0.112758, 0.112758}, {0.0157278, 0.0157278}, {-0.199608, -0.199608}, {-0.574855, -0.574855}, {-1.51808, -1.51808}, {-1.2319, -1.2319}, {-0.653268, -0.653268}, {-0.176834, -0.176834}, {0.0157278, 0.0157278}, {0.0609987, 0.0609987}, {0.0776152, 0.0776152}, {0.0609987, 0.0609987}, {0.0157278, 0.0157278}, {-0.176834, -0.176834}, {-0.653268, -0.653268}, {-1.2319, -1.2319}, {-2.34151, -2.34151}, {-1.44876, -1.44876}, {-0.653268, -0.653268}, {-0.199608, -0.199608}, {-0.0845755, -0.0845755}, {-0.0454612, -0.0454612}, {-0.0454612, -0.0454612}, {-0.0845755, -0.0845755}, {-0.199608, -0.199608}, {-0.653268, -0.653268}, {-1.44876, -1.44876}, {-2.34151, -2.34151}, {-2.34151, -2.34151}, {-1.2319, -1.2319}, {-0.574855, -0.574855}, {-0.340655, -0.340655}, {-0.313913, -0.313913}, {-0.292461, -0.292461}, {-0.313913, -0.313913}, {-0.340655, -0.340655}, {-0.574855, -0.574855}, {-1.2319, -1.2319}, {-2.34151, -2.34151}, {-3.06152, -3.06152}, {-0.427844, -0.427844}, {-0.452617, -0.452617}, {-0.64247, -0.64247}, {-0.892931, -0.892931}, {-1.03013, -1.03013}, {-0.892931, -0.892931}, {-0.64247, -0.64247}, {-0.452617, -0.452617}, {-0.427844, -0.427844}, {-0.618499, -0.618499}, {-0.713398, -0.713398}, {-0.618499, -0.618499}, {-0.452617, -0.452617}, {-0.831788, -0.831788}, {-1.66622, -1.66622}, {-2.73085, -2.73085}, {-2.73085, -2.73085}, {-1.66622, -1.66622}, {-0.831788, -0.831788}, {-0.452617, -0.452617}, {-0.347014, -0.347014}, {-0.386005, -0.386005}, {-0.386005, -0.386005}, {-0.347014, -0.347014}, {-0.64247, -0.64247}, {-1.66622, -1.66622}, {-3.97898, -3.97898}, {-5.5069, -5.5069}, {-3.97898, -3.97898}, {-1.66622, -1.66622}, {-0.64247, -0.64247}, {-0.274405, -0.274405}, {-0.152598, -0.152598}, {-0.122002, -0.122002}, {-0.152598, -0.152598}, {-0.274405, -0.274405}, {-0.892931, -0.892931}, {-2.73085, -2.73085}, {-5.5069, -5.5069}, {-5.5069, -5.5069}, {-2.73085, -2.73085}, {-0.892931, -0.892931}, {-0.313913, -0.313913}, {-0.0845755, -0.0845755}, {0.0157278, 0.0157278}, {0.0157278, 0.0157278}, {-0.0845755, -0.0845755}, {-0.313913, -0.313913}, {-1.03013, -1.03013}, {-2.73085, -2.73085}, {-3.97898, -3.97898}, {-2.73085, -2.73085}, {-1.03013, -1.03013}, {-0.334222, -0.334222}, {-0.0759324, -0.0759324}, {0.0444566, 0.0444566}, {0.110993, 0.110993}, {0.0444566, 0.0444566}, {-0.0759324, -0.0759324}, {-0.334222, -0.334222}, {-0.892931, -0.892931}, {-1.66622, -1.66622}, {-1.66622, -1.66622}, {-0.892931, -0.892931}, {-0.334222, -0.334222}, {-0.0634587, -0.0634587}, {0.0554104, 0.0554104}, {0.130616, 0.130616}, {0.130616, 0.130616}, {0.0554104, 0.0554104}, {-0.0634587, -0.0634587}, {-0.334222, -0.334222}, {-0.64247, -0.64247}, {-0.831788, -0.831788}, {-0.64247, -0.64247}, {-0.313913, -0.313913}, {-0.0759324, -0.0759324}, {0.0554104, 0.0554104}, {0.117799, 0.117799}, {0.140755, 0.140755}, {0.117799, 0.117799}, {0.0554104, 0.0554104}, {-0.0759324, -0.0759324}, {-0.313913, -0.313913}, {-0.452617, -0.452617}, {-0.452617, -0.452617}, {-0.274405, -0.274405}, {-0.0845755, -0.0845755}, {0.0444566, 0.0444566}, {0.130616, 0.130616}, {0.140755, 0.140755}, {0.140755, 0.140755}, {0.130616, 0.130616}, {0.0444566, 0.0444566}, {-0.0845755, -0.0845755}, {-0.274405, -0.274405}, {-0.427844, -0.427844}, {-0.347014, -0.347014}, {-0.152598, -0.152598}, {0.0157278, 0.0157278}, {0.110993, 0.110993}, {0.130616, 0.130616}, {0.117799, 0.117799}, {0.130616, 0.130616}, {0.110993, 0.110993}, {0.0157278, 0.0157278}, {-0.152598, -0.152598}, {-0.347014, -0.347014}, {-0.618499, -0.618499}, {-0.386005, -0.386005}, {-0.122002, -0.122002}, {0.0157278, 0.0157278}, {0.0444566, 0.0444566}, {0.0554104, 0.0554104}, {0.0554104, 0.0554104}, {0.0444566, 0.0444566}, {0.0157278, 0.0157278}, {-0.122002, -0.122002}, {-0.386005, -0.386005}, {-0.618499, -0.618499}, {-0.713398, -0.713398}, {-0.386005, -0.386005}, {-0.152598, -0.152598}, {-0.0845755, -0.0845755}, {-0.0759324, -0.0759324}, {-0.0634587, -0.0634587}, {-0.0759324, -0.0759324}, {-0.0845755, -0.0845755}, {-0.152598, -0.152598}, {-0.386005, -0.386005}, {-0.713398, -0.713398}, {-0.896542, -0.896542}, {-0.618499, -0.618499}, {-0.347014, -0.347014}, {-0.274405, -0.274405}, {-0.313913, -0.313913}, {-0.334222, -0.334222}, {-0.334222, -0.334222}, {-0.313913, -0.313913}, {-0.274405, -0.274405}, {-0.347014, -0.347014}, {-0.618499, -0.618499}, {-0.896542, -0.896542}, {-0.896542, -0.896542}, {-0.156864, -0.156864}, {-0.351472, -0.351472}, {-0.614035, -0.614035}, {-0.892931, -0.892931}, {-0.892931, -0.892931}, {-0.614035, -0.614035}, {-0.351472, -0.351472}, {-0.156864, -0.156864}, {-0.105947, -0.105947}, {-0.0832459, -0.0832459}, {-0.0832459, -0.0832459}, {-0.105947, -0.105947}, {-0.351472, -0.351472}, {-0.806318, -0.806318}, {-1.66622, -1.66622}, {-2.25569, -2.25569}, {-1.66622, -1.66622}, {-0.806318, -0.806318}, {-0.351472, -0.351472}, {-0.120705, -0.120705}, {-0.0369426, -0.0369426}, {0.0106435, 0.0106435}, {-0.0369426, -0.0369426}, {-0.120705, -0.120705}, {-0.614035, -0.614035}, {-1.66622, -1.66622}, {-3.24464, -3.24464}, {-3.24464, -3.24464}, {-1.66622, -1.66622}, {-0.614035, -0.614035}, {-0.20641, -0.20641}, {-0.02972, -0.02972}, {0.0521328, 0.0521328}, {0.0521328, 0.0521328}, {-0.02972, -0.02972}, {-0.20641, -0.20641}, {-0.892931, -0.892931}, {-2.25569, -2.25569}, {-3.24464, -3.24464}, {-2.25569, -2.25569}, {-0.892931, -0.892931}, {-0.292461, -0.292461}, {-0.0454612, -0.0454612}, {0.0609987, 0.0609987}, {0.112758, 0.112758}, {0.0609987, 0.0609987}, {-0.0454612, -0.0454612}, {-0.292461, -0.292461}, {-0.892931, -0.892931}, {-1.66622, -1.66622}, {-1.66622, -1.66622}, {-0.892931, -0.892931}, {-0.334222, -0.334222}, {-0.0634587, -0.0634587}, {0.0554104, 0.0554104}, {0.130616, 0.130616}, {0.130616, 0.130616}, {0.0554104, 0.0554104}, {-0.0634587, -0.0634587}, {-0.334222, -0.334222}, {-0.614035, -0.614035}, {-0.806318, -0.806318}, {-0.614035, -0.614035}, {-0.292461, -0.292461}, {-0.0634587, -0.0634587}, {0.0503, 0.0503}, {0.113086, 0.113086}, {0.158062, 0.158062}, {0.113086, 0.113086}, {0.0503, 0.0503}, {-0.0634587, -0.0634587}, {-0.292461, -0.292461}, {-0.351472, -0.351472}, {-0.351472, -0.351472}, {-0.20641, -0.20641}, {-0.0454612, -0.0454612}, {0.0554104, 0.0554104}, {0.113086, 0.113086}, {0.153851, 0.153851}, {0.153851, 0.153851}, {0.113086, 0.113086}, {0.0554104, 0.0554104}, {-0.0454612, -0.0454612}, {-0.20641, -0.20641}, {-0.156864, -0.156864}, {-0.120705, -0.120705}, {-0.02972, -0.02972}, {0.0609987, 0.0609987}, {0.130616, 0.130616}, {0.158062, 0.158062}, {0.153851, 0.153851}, {0.158062, 0.158062}, {0.130616, 0.130616}, {0.0609987, 0.0609987}, {-0.02972, -0.02972}, {-0.120705, -0.120705}, {-0.105947, -0.105947}, {-0.0369426, -0.0369426}, {0.0521328, 0.0521328}, {0.112758, 0.112758}, {0.130616, 0.130616}, {0.113086, 0.113086}, {0.113086, 0.113086}, {0.130616, 0.130616}, {0.112758, 0.112758}, {0.0521328, 0.0521328}, {-0.0369426, -0.0369426}, {-0.105947, -0.105947}, {-0.0832459, -0.0832459}, {0.0106435, 0.0106435}, {0.0521328, 0.0521328}, {0.0609987, 0.0609987}, {0.0554104, 0.0554104}, {0.0503, 0.0503}, {0.0554104, 0.0554104}, {0.0609987, 0.0609987}, {0.0521328, 0.0521328}, {0.0106435, 0.0106435}, {-0.0832459, -0.0832459}, {-0.14564, -0.14564}, {-0.0832459, -0.0832459}, {-0.0369426, -0.0369426}, {-0.02972, -0.02972}, {-0.0454612, -0.0454612}, {-0.0634587, -0.0634587}, {-0.0634587, -0.0634587}, {-0.0454612, -0.0454612}, {-0.02972, -0.02972}, {-0.0369426, -0.0369426}, {-0.0832459, -0.0832459}, {-0.147282, -0.147282}, {-0.147282, -0.147282}, {-0.105947, -0.105947}, {-0.120705, -0.120705}, {-0.20641, -0.20641}, {-0.292461, -0.292461}, {-0.334222, -0.334222}, {-0.292461, -0.292461}, {-0.20641, -0.20641}, {-0.120705, -0.120705}, {-0.105947, -0.105947}, {-0.14564, -0.14564}, {-0.147282, -0.147282}, {-0.14564, -0.14564}, {-0.109912, -0.109912}, {-0.351472, -0.351472}, {-0.64247, -0.64247}, {-0.793018, -0.793018}, {-0.64247, -0.64247}, {-0.351472, -0.351472}, {-0.109912, -0.109912}, {0.0132163, 0.0132163}, {0.0744409, 0.0744409}, {0.114396, 0.114396}, {0.0744409, 0.0744409}, {0.0132163, 0.0132163}, {-0.351472, -0.351472}, {-0.831788, -0.831788}, {-1.35349, -1.35349}, {-1.35349, -1.35349}, {-0.831788, -0.831788}, {-0.351472, -0.351472}, {-0.0762117, -0.0762117}, {0.0443525, 0.0443525}, {0.108692, 0.108692}, {0.108692, 0.108692}, {0.0443525, 0.0443525}, {-0.0762117, -0.0762117}, {-0.64247, -0.64247}, {-1.35349, -1.35349}, {-1.79984, -1.79984}, {-1.35349, -1.35349}, {-0.64247, -0.64247}, {-0.20641, -0.20641}, {0.00680462, 0.00680462}, {0.0937547, 0.0937547}, {0.123694, 0.123694}, {0.0937547, 0.0937547}, {0.00680462, 0.00680462}, {-0.20641, -0.20641}, {-0.793018, -0.793018}, {-1.35349, -1.35349}, {-1.35349, -1.35349}, {-0.793018, -0.793018}, {-0.313913, -0.313913}, {-0.0454612, -0.0454612}, {0.0776152, 0.0776152}, {0.123461, 0.123461}, {0.123461, 0.123461}, {0.0776152, 0.0776152}, {-0.0454612, -0.0454612}, {-0.313913, -0.313913}, {-0.64247, -0.64247}, {-0.831788, -0.831788}, {-0.64247, -0.64247}, {-0.313913, -0.313913}, {-0.0759324, -0.0759324}, {0.0554104, 0.0554104}, {0.117799, 0.117799}, {0.140755, 0.140755}, {0.117799, 0.117799}, {0.0554104, 0.0554104}, {-0.0759324, -0.0759324}, {-0.313913, -0.313913}, {-0.351472, -0.351472}, {-0.351472, -0.351472}, {-0.20641, -0.20641}, {-0.0454612, -0.0454612}, {0.0554104, 0.0554104}, {0.113086, 0.113086}, {0.153851, 0.153851}, {0.153851, 0.153851}, {0.113086, 0.113086}, {0.0554104, 0.0554104}, {-0.0454612, -0.0454612}, {-0.20641, -0.20641}, {-0.109912, -0.109912}, {-0.0762117, -0.0762117}, {0.00680462, 0.00680462}, {0.0776152, 0.0776152}, {0.117799, 0.117799}, {0.153851, 0.153851}, {0.173418, 0.173418}, {0.153851, 0.153851}, {0.117799, 0.117799}, {0.0776152, 0.0776152}, {0.00680462, 0.00680462}, {-0.0762117, -0.0762117}, {0.0132163, 0.0132163}, {0.0443525, 0.0443525}, {0.0937547, 0.0937547}, {0.123461, 0.123461}, {0.140755, 0.140755}, {0.153851, 0.153851}, {0.153851, 0.153851}, {0.140755, 0.140755}, {0.123461, 0.123461}, {0.0937547, 0.0937547}, {0.0443525, 0.0443525}, {0.0132163, 0.0132163}, {0.0744409, 0.0744409}, {0.108692, 0.108692}, {0.123694, 0.123694}, {0.123461, 0.123461}, {0.117799, 0.117799}, {0.113086, 0.113086}, {0.117799, 0.117799}, {0.123461, 0.123461}, {0.123694, 0.123694}, {0.108692, 0.108692}, {0.0744409, 0.0744409}, {0.0548487, 0.0548487}, {0.114396, 0.114396}, {0.108692, 0.108692}, {0.0937547, 0.0937547}, {0.0776152, 0.0776152}, {0.0554104, 0.0554104}, {0.0554104, 0.0554104}, {0.0776152, 0.0776152}, {0.0937547, 0.0937547}, {0.108692, 0.108692}, {0.114396, 0.114396}, {0.092208, 0.092208}, {0.092208, 0.092208}, {0.0744409, 0.0744409}, {0.0443525, 0.0443525}, {0.00680462, 0.00680462}, {-0.0454612, -0.0454612}, {-0.0759324, -0.0759324}, {-0.0454612, -0.0454612}, {0.00680462, 0.00680462}, {0.0443525, 0.0443525}, {0.0744409, 0.0744409}, {0.092208, 0.092208}, {0.0947446, 0.0947446}, {0.092208, 0.092208}, {0.0132163, 0.0132163}, {-0.0762117, -0.0762117}, {-0.20641, -0.20641}, {-0.313913, -0.313913}, {-0.313913, -0.313913}, {-0.20641, -0.20641}, {-0.0762117, -0.0762117}, {0.0132163, 0.0132163}, {0.0548487, 0.0548487}, {0.092208, 0.092208}, {0.092208, 0.092208}, {0.0548487, 0.0548487}, {-0.156864, -0.156864}, {-0.452617, -0.452617}, {-0.702028, -0.702028}, {-0.702028, -0.702028}, {-0.452617, -0.452617}, {-0.156864, -0.156864}, {0.0132163, 0.0132163}, {0.111154, 0.111154}, {0.143719, 0.143719}, {0.143719, 0.143719}, {0.111154, 0.111154}, {0.0132163, 0.0132163}, {-0.452617, -0.452617}, {-0.879784, -0.879784}, {-1.06387, -1.06387}, {-0.879784, -0.879784}, {-0.452617, -0.452617}, {-0.120705, -0.120705}, {0.0443525, 0.0443525}, {0.120865, 0.120865}, {0.130971, 0.130971}, {0.120865, 0.120865}, {0.0443525, 0.0443525}, {-0.120705, -0.120705}, {-0.702028, -0.702028}, {-1.06387, -1.06387}, {-1.06387, -1.06387}, {-0.702028, -0.702028}, {-0.274405, -0.274405}, {-0.02972, -0.02972}, {0.0937547, 0.0937547}, {0.123259, 0.123259}, {0.123259, 0.123259}, {0.0937547, 0.0937547}, {-0.02972, -0.02972}, {-0.274405, -0.274405}, {-0.702028, -0.702028}, {-0.879784, -0.879784}, {-0.702028, -0.702028}, {-0.340655, -0.340655}, {-0.0845755, -0.0845755}, {0.0609987, 0.0609987}, {0.123461, 0.123461}, {0.121793, 0.121793}, {0.123461, 0.123461}, {0.0609987, 0.0609987}, {-0.0845755, -0.0845755}, {-0.340655, -0.340655}, {-0.452617, -0.452617}, {-0.452617, -0.452617}, {-0.274405, -0.274405}, {-0.0845755, -0.0845755}, {0.0444566, 0.0444566}, {0.130616, 0.130616}, {0.140755, 0.140755}, {0.140755, 0.140755}, {0.130616, 0.130616}, {0.0444566, 0.0444566}, {-0.0845755, -0.0845755}, {-0.274405, -0.274405}, {-0.156864, -0.156864}, {-0.120705, -0.120705}, {-0.02972, -0.02972}, {0.0609987, 0.0609987}, {0.130616, 0.130616}, {0.158062, 0.158062}, {0.153851, 0.153851}, {0.158062, 0.158062}, {0.130616, 0.130616}, {0.0609987, 0.0609987}, {-0.02972, -0.02972}, {-0.120705, -0.120705}, {0.0132163, 0.0132163}, {0.0443525, 0.0443525}, {0.0937547, 0.0937547}, {0.123461, 0.123461}, {0.140755, 0.140755}, {0.153851, 0.153851}, {0.153851, 0.153851}, {0.140755, 0.140755}, {0.123461, 0.123461}, {0.0937547, 0.0937547}, {0.0443525, 0.0443525}, {0.0132163, 0.0132163}, {0.111154, 0.111154}, {0.120865, 0.120865}, {0.123259, 0.123259}, {0.121793, 0.121793}, {0.140755, 0.140755}, {0.158062, 0.158062}, {0.140755, 0.140755}, {0.121793, 0.121793}, {0.123259, 0.123259}, {0.120865, 0.120865}, {0.111154, 0.111154}, {0.109412, 0.109412}, {0.143719, 0.143719}, {0.130971, 0.130971}, {0.123259, 0.123259}, {0.123461, 0.123461}, {0.130616, 0.130616}, {0.130616, 0.130616}, {0.123461, 0.123461}, {0.123259, 0.123259}, {0.130971, 0.130971}, {0.143719, 0.143719}, {0.158184, 0.158184}, {0.158184, 0.158184}, {0.143719, 0.143719}, {0.120865, 0.120865}, {0.0937547, 0.0937547}, {0.0609987, 0.0609987}, {0.0444566, 0.0444566}, {0.0609987, 0.0609987}, {0.0937547, 0.0937547}, {0.120865, 0.120865}, {0.143719, 0.143719}, {0.157706, 0.157706}, {0.15914, 0.15914}, {0.157706, 0.157706}, {0.111154, 0.111154}, {0.0443525, 0.0443525}, {-0.02972, -0.02972}, {-0.0845755, -0.0845755}, {-0.0845755, -0.0845755}, {-0.02972, -0.02972}, {0.0443525, 0.0443525}, {0.111154, 0.111154}, {0.158184, 0.158184}, {0.15914, 0.15914}, {0.15914, 0.15914}, {0.158184, 0.158184}, {0.0132163, 0.0132163}, {-0.120705, -0.120705}, {-0.274405, -0.274405}, {-0.340655, -0.340655}, {-0.274405, -0.274405}, {-0.120705, -0.120705}, {0.0132163, 0.0132163}, {0.109412, 0.109412}, {0.158184, 0.158184}, {0.157706, 0.157706}, {0.158184, 0.158184}, {0.109412, 0.109412}, {-0.427844, -0.427844}, {-0.875722, -0.875722}, {-1.0933, -1.0933}, {-0.875722, -0.875722}, {-0.427844, -0.427844}, {-0.105947, -0.105947}, {0.0744409, 0.0744409}, {0.143719, 0.143719}, {0.137941, 0.137941}, {0.143719, 0.143719}, {0.0744409, 0.0744409}, {-0.105947, -0.105947}, {-0.875722, -0.875722}, {-1.30653, -1.30653}, {-1.30653, -1.30653}, {-0.875722, -0.875722}, {-0.347014, -0.347014}, {-0.0369426, -0.0369426}, {0.108692, 0.108692}, {0.130971, 0.130971}, {0.130971, 0.130971}, {0.108692, 0.108692}, {-0.0369426, -0.0369426}, {-0.347014, -0.347014}, {-1.0933, -1.0933}, {-1.30653, -1.30653}, {-1.0933, -1.0933}, {-0.574855, -0.574855}, {-0.152598, -0.152598}, {0.0521328, 0.0521328}, {0.123694, 0.123694}, {0.123259, 0.123259}, {0.123694, 0.123694}, {0.0521328, 0.0521328}, {-0.152598, -0.152598}, {-0.574855, -0.574855}, {-0.875722, -0.875722}, {-0.875722, -0.875722}, {-0.574855, -0.574855}, {-0.199608, -0.199608}, {0.0157278, 0.0157278}, {0.112758, 0.112758}, {0.123461, 0.123461}, {0.123461, 0.123461}, {0.112758, 0.112758}, {0.0157278, 0.0157278}, {-0.199608, -0.199608}, {-0.574855, -0.574855}, {-0.427844, -0.427844}, {-0.347014, -0.347014}, {-0.152598, -0.152598}, {0.0157278, 0.0157278}, {0.110993, 0.110993}, {0.130616, 0.130616}, {0.117799, 0.117799}, {0.130616, 0.130616}, {0.110993, 0.110993}, {0.0157278, 0.0157278}, {-0.152598, -0.152598}, {-0.347014, -0.347014}, {-0.105947, -0.105947}, {-0.0369426, -0.0369426}, {0.0521328, 0.0521328}, {0.112758, 0.112758}, {0.130616, 0.130616}, {0.113086, 0.113086}, {0.113086, 0.113086}, {0.130616, 0.130616}, {0.112758, 0.112758}, {0.0521328, 0.0521328}, {-0.0369426, -0.0369426}, {-0.105947, -0.105947}, {0.0744409, 0.0744409}, {0.108692, 0.108692}, {0.123694, 0.123694}, {0.123461, 0.123461}, {0.117799, 0.117799}, {0.113086, 0.113086}, {0.117799, 0.117799}, {0.123461, 0.123461}, {0.123694, 0.123694}, {0.108692, 0.108692}, {0.0744409, 0.0744409}, {0.0548487, 0.0548487}, {0.143719, 0.143719}, {0.130971, 0.130971}, {0.123259, 0.123259}, {0.123461, 0.123461}, {0.130616, 0.130616}, {0.130616, 0.130616}, {0.123461, 0.123461}, {0.123259, 0.123259}, {0.130971, 0.130971}, {0.143719, 0.143719}, {0.158184, 0.158184}, {0.158184, 0.158184}, {0.137941, 0.137941}, {0.130971, 0.130971}, {0.123694, 0.123694}, {0.112758, 0.112758}, {0.110993, 0.110993}, {0.112758, 0.112758}, {0.123694, 0.123694}, {0.130971, 0.130971}, {0.137941, 0.137941}, {0.168113, 0.168113}, {0.192364, 0.192364}, {0.168113, 0.168113}, {0.143719, 0.143719}, {0.108692, 0.108692}, {0.0521328, 0.0521328}, {0.0157278, 0.0157278}, {0.0157278, 0.0157278}, {0.0521328, 0.0521328}, {0.108692, 0.108692}, {0.143719, 0.143719}, {0.168113, 0.168113}, {0.188081, 0.188081}, {0.188081, 0.188081}, {0.168113, 0.168113}, {0.0744409, 0.0744409}, {-0.0369426, -0.0369426}, {-0.152598, -0.152598}, {-0.199608, -0.199608}, {-0.152598, -0.152598}, {-0.0369426, -0.0369426}, {0.0744409, 0.0744409}, {0.158184, 0.158184}, {0.192364, 0.192364}, {0.188081, 0.188081}, {0.192364, 0.192364}, {0.158184, 0.158184}, {-0.105947, -0.105947}, {-0.347014, -0.347014}, {-0.574855, -0.574855}, {-0.574855, -0.574855}, {-0.347014, -0.347014}, {-0.105947, -0.105947}, {0.0548487, 0.0548487}, {0.158184, 0.158184}, {0.168113, 0.168113}, {0.168113, 0.168113}, {0.158184, 0.158184}, {0.0548487, 0.0548487}, {-1.51808, -1.51808}, {-2.4828, -2.4828}, {-2.4828, -2.4828}, {-1.51808, -1.51808}, {-0.618499, -0.618499}, {-0.0832459, -0.0832459}, {0.114396, 0.114396}, {0.143719, 0.143719}, {0.143719, 0.143719}, {0.114396, 0.114396}, {-0.0832459, -0.0832459}, {-0.618499, -0.618499}, {-2.4828, -2.4828}, {-3.21636, -3.21636}, {-2.4828, -2.4828}, {-1.2319, -1.2319}, {-0.386005, -0.386005}, {0.0106435, 0.0106435}, {0.108692, 0.108692}, {0.120865, 0.120865}, {0.108692, 0.108692}, {0.0106435, 0.0106435}, {-0.386005, -0.386005}, {-1.2319, -1.2319}, {-2.4828, -2.4828}, {-2.4828, -2.4828}, {-1.56806, -1.56806}, {-0.653268, -0.653268}, {-0.122002, -0.122002}, {0.0521328, 0.0521328}, {0.0937547, 0.0937547}, {0.0937547, 0.0937547}, {0.0521328, 0.0521328}, {-0.122002, -0.122002}, {-0.653268, -0.653268}, {-1.56806, -1.56806}, {-1.51808, -1.51808}, {-1.2319, -1.2319}, {-0.653268, -0.653268}, {-0.176834, -0.176834}, {0.0157278, 0.0157278}, {0.0609987, 0.0609987}, {0.0776152, 0.0776152}, {0.0609987, 0.0609987}, {0.0157278, 0.0157278}, {-0.176834, -0.176834}, {-0.653268, -0.653268}, {-1.2319, -1.2319}, {-0.618499, -0.618499}, {-0.386005, -0.386005}, {-0.122002, -0.122002}, {0.0157278, 0.0157278}, {0.0444566, 0.0444566}, {0.0554104, 0.0554104}, {0.0554104, 0.0554104}, {0.0444566, 0.0444566}, {0.0157278, 0.0157278}, {-0.122002, -0.122002}, {-0.386005, -0.386005}, {-0.618499, -0.618499}, {-0.0832459, -0.0832459}, {0.0106435, 0.0106435}, {0.0521328, 0.0521328}, {0.0609987, 0.0609987}, {0.0554104, 0.0554104}, {0.0503, 0.0503}, {0.0554104, 0.0554104}, {0.0609987, 0.0609987}, {0.0521328, 0.0521328}, {0.0106435, 0.0106435}, {-0.0832459, -0.0832459}, {-0.14564, -0.14564}, {0.114396, 0.114396}, {0.108692, 0.108692}, {0.0937547, 0.0937547}, {0.0776152, 0.0776152}, {0.0554104, 0.0554104}, {0.0554104, 0.0554104}, {0.0776152, 0.0776152}, {0.0937547, 0.0937547}, {0.108692, 0.108692}, {0.114396, 0.114396}, {0.092208, 0.092208}, {0.092208, 0.092208}, {0.143719, 0.143719}, {0.120865, 0.120865}, {0.0937547, 0.0937547}, {0.0609987, 0.0609987}, {0.0444566, 0.0444566}, {0.0609987, 0.0609987}, {0.0937547, 0.0937547}, {0.120865, 0.120865}, {0.143719, 0.143719}, {0.157706, 0.157706}, {0.15914, 0.15914}, {0.157706, 0.157706}, {0.143719, 0.143719}, {0.108692, 0.108692}, {0.0521328, 0.0521328}, {0.0157278, 0.0157278}, {0.0157278, 0.0157278}, {0.0521328, 0.0521328}, {0.108692, 0.108692}, {0.143719, 0.143719}, {0.168113, 0.168113}, {0.188081, 0.188081}, {0.188081, 0.188081}, {0.168113, 0.168113}, {0.114396, 0.114396}, {0.0106435, 0.0106435}, {-0.122002, -0.122002}, {-0.176834, -0.176834}, {-0.122002, -0.122002}, {0.0106435, 0.0106435}, {0.114396, 0.114396}, {0.157706, 0.157706}, {0.188081, 0.188081}, {0.204473, 0.204473}, {0.188081, 0.188081}, {0.157706, 0.157706}, {-0.0832459, -0.0832459}, {-0.386005, -0.386005}, {-0.653268, -0.653268}, {-0.653268, -0.653268}, {-0.386005, -0.386005}, {-0.0832459, -0.0832459}, {0.092208, 0.092208}, {0.15914, 0.15914}, {0.188081, 0.188081}, {0.188081, 0.188081}, {0.15914, 0.15914}, {0.092208, 0.092208}, {-0.618499, -0.618499}, {-1.2319, -1.2319}, {-1.56806, -1.56806}, {-1.2319, -1.2319}, {-0.618499, -0.618499}, {-0.14564, -0.14564}, {0.092208, 0.092208}, {0.157706, 0.157706}, {0.168113, 0.168113}, {0.157706, 0.157706}, {0.092208, 0.092208}, {-0.14564, -0.14564}, {-5.63064, -5.63064}, {-7.81799, -7.81799}, {-5.63064, -5.63064}, {-2.34151, -2.34151}, {-0.713398, -0.713398}, {-0.0832459, -0.0832459}, {0.0744409, 0.0744409}, {0.111154, 0.111154}, {0.0744409, 0.0744409}, {-0.0832459, -0.0832459}, {-0.713398, -0.713398}, {-2.34151, -2.34151}, {-7.81799, -7.81799}, {-7.81799, -7.81799}, {-4.12343, -4.12343}, {-1.44876, -1.44876}, {-0.386005, -0.386005}, {-0.0369426, -0.0369426}, {0.0443525, 0.0443525}, {0.0443525, 0.0443525}, {-0.0369426, -0.0369426}, {-0.386005, -0.386005}, {-1.44876, -1.44876}, {-4.12343, -4.12343}, {-5.63064, -5.63064}, {-4.12343, -4.12343}, {-1.85966, -1.85966}, {-0.653268, -0.653268}, {-0.152598, -0.152598}, {-0.02972, -0.02972}, {0.00680462, 0.00680462}, {-0.02972, -0.02972}, {-0.152598, -0.152598}, {-0.653268, -0.653268}, {-1.85966, -1.85966}, {-4.12343, -4.12343}, {-2.34151, -2.34151}, {-1.44876, -1.44876}, {-0.653268, -0.653268}, {-0.199608, -0.199608}, {-0.0845755, -0.0845755}, {-0.0454612, -0.0454612}, {-0.0454612, -0.0454612}, {-0.0845755, -0.0845755}, {-0.199608, -0.199608}, {-0.653268, -0.653268}, {-1.44876, -1.44876}, {-2.34151, -2.34151}, {-0.713398, -0.713398}, {-0.386005, -0.386005}, {-0.152598, -0.152598}, {-0.0845755, -0.0845755}, {-0.0759324, -0.0759324}, {-0.0634587, -0.0634587}, {-0.0759324, -0.0759324}, {-0.0845755, -0.0845755}, {-0.152598, -0.152598}, {-0.386005, -0.386005}, {-0.713398, -0.713398}, {-0.896542, -0.896542}, {-0.0832459, -0.0832459}, {-0.0369426, -0.0369426}, {-0.02972, -0.02972}, {-0.0454612, -0.0454612}, {-0.0634587, -0.0634587}, {-0.0634587, -0.0634587}, {-0.0454612, -0.0454612}, {-0.02972, -0.02972}, {-0.0369426, -0.0369426}, {-0.0832459, -0.0832459}, {-0.147282, -0.147282}, {-0.147282, -0.147282}, {0.0744409, 0.0744409}, {0.0443525, 0.0443525}, {0.00680462, 0.00680462}, {-0.0454612, -0.0454612}, {-0.0759324, -0.0759324}, {-0.0454612, -0.0454612}, {0.00680462, 0.00680462}, {0.0443525, 0.0443525}, {0.0744409, 0.0744409}, {0.092208, 0.092208}, {0.0947446, 0.0947446}, {0.092208, 0.092208}, {0.111154, 0.111154}, {0.0443525, 0.0443525}, {-0.02972, -0.02972}, {-0.0845755, -0.0845755}, {-0.0845755, -0.0845755}, {-0.02972, -0.02972}, {0.0443525, 0.0443525}, {0.111154, 0.111154}, {0.158184, 0.158184}, {0.15914, 0.15914}, {0.15914, 0.15914}, {0.158184, 0.158184}, {0.0744409, 0.0744409}, {-0.0369426, -0.0369426}, {-0.152598, -0.152598}, {-0.199608, -0.199608}, {-0.152598, -0.152598}, {-0.0369426, -0.0369426}, {0.0744409, 0.0744409}, {0.158184, 0.158184}, {0.192364, 0.192364}, {0.188081, 0.188081}, {0.192364, 0.192364}, {0.158184, 0.158184}, {-0.0832459, -0.0832459}, {-0.386005, -0.386005}, {-0.653268, -0.653268}, {-0.653268, -0.653268}, {-0.386005, -0.386005}, {-0.0832459, -0.0832459}, {0.092208, 0.092208}, {0.15914, 0.15914}, {0.188081, 0.188081}, {0.188081, 0.188081}, {0.15914, 0.15914}, {0.092208, 0.092208}, {-0.713398, -0.713398}, {-1.44876, -1.44876}, {-1.85966, -1.85966}, {-1.44876, -1.44876}, {-0.713398, -0.713398}, {-0.147282, -0.147282}, {0.0947446, 0.0947446}, {0.15914, 0.15914}, {0.192364, 0.192364}, {0.15914, 0.15914}, {0.0947446, 0.0947446}, {-0.147282, -0.147282}, {-2.34151, -2.34151}, {-4.12343, -4.12343}, {-4.12343, -4.12343}, {-2.34151, -2.34151}, {-0.896542, -0.896542}, {-0.147282, -0.147282}, {0.092208, 0.092208}, {0.158184, 0.158184}, {0.158184, 0.158184}, {0.092208, 0.092208}, {-0.147282, -0.147282}, {-0.896542, -0.896542}, {-15.3194, -15.3194}, {-15.3194, -15.3194}, {-7.75282, -7.75282}, {-2.34151, -2.34151}, {-0.618499, -0.618499}, {-0.105947, -0.105947}, {0.0132163, 0.0132163}, {0.0132163, 0.0132163}, {-0.105947, -0.105947}, {-0.618499, -0.618499}, {-2.34151, -2.34151}, {-7.75282, -7.75282}, {-15.3194, -15.3194}, {-10.8749, -10.8749}, {-4.12343, -4.12343}, {-1.2319, -1.2319}, {-0.347014, -0.347014}, {-0.120705, -0.120705}, {-0.0762117, -0.0762117}, {-0.120705, -0.120705}, {-0.347014, -0.347014}, {-1.2319, -1.2319}, {-4.12343, -4.12343}, {-10.8749, -10.8749}, {-7.75282, -7.75282}, {-4.12343, -4.12343}, {-1.56806, -1.56806}, {-0.574855, -0.574855}, {-0.274405, -0.274405}, {-0.20641, -0.20641}, {-0.20641, -0.20641}, {-0.274405, -0.274405}, {-0.574855, -0.574855}, {-1.56806, -1.56806}, {-4.12343, -4.12343}, {-7.75282, -7.75282}, {-2.34151, -2.34151}, {-1.2319, -1.2319}, {-0.574855, -0.574855}, {-0.340655, -0.340655}, {-0.313913, -0.313913}, {-0.292461, -0.292461}, {-0.313913, -0.313913}, {-0.340655, -0.340655}, {-0.574855, -0.574855}, {-1.2319, -1.2319}, {-2.34151, -2.34151}, {-3.06152, -3.06152}, {-0.618499, -0.618499}, {-0.347014, -0.347014}, {-0.274405, -0.274405}, {-0.313913, -0.313913}, {-0.334222, -0.334222}, {-0.334222, -0.334222}, {-0.313913, -0.313913}, {-0.274405, -0.274405}, {-0.347014, -0.347014}, {-0.618499, -0.618499}, {-0.896542, -0.896542}, {-0.896542, -0.896542}, {-0.105947, -0.105947}, {-0.120705, -0.120705}, {-0.20641, -0.20641}, {-0.292461, -0.292461}, {-0.334222, -0.334222}, {-0.292461, -0.292461}, {-0.20641, -0.20641}, {-0.120705, -0.120705}, {-0.105947, -0.105947}, {-0.14564, -0.14564}, {-0.147282, -0.147282}, {-0.14564, -0.14564}, {0.0132163, 0.0132163}, {-0.0762117, -0.0762117}, {-0.20641, -0.20641}, {-0.313913, -0.313913}, {-0.313913, -0.313913}, {-0.20641, -0.20641}, {-0.0762117, -0.0762117}, {0.0132163, 0.0132163}, {0.0548487, 0.0548487}, {0.092208, 0.092208}, {0.092208, 0.092208}, {0.0548487, 0.0548487}, {0.0132163, 0.0132163}, {-0.120705, -0.120705}, {-0.274405, -0.274405}, {-0.340655, -0.340655}, {-0.274405, -0.274405}, {-0.120705, -0.120705}, {0.0132163, 0.0132163}, {0.109412, 0.109412}, {0.158184, 0.158184}, {0.157706, 0.157706}, {0.158184, 0.158184}, {0.109412, 0.109412}, {-0.105947, -0.105947}, {-0.347014, -0.347014}, {-0.574855, -0.574855}, {-0.574855, -0.574855}, {-0.347014, -0.347014}, {-0.105947, -0.105947}, {0.0548487, 0.0548487}, {0.158184, 0.158184}, {0.168113, 0.168113}, {0.168113, 0.168113}, {0.158184, 0.158184}, {0.0548487, 0.0548487}, {-0.618499, -0.618499}, {-1.2319, -1.2319}, {-1.56806, -1.56806}, {-1.2319, -1.2319}, {-0.618499, -0.618499}, {-0.14564, -0.14564}, {0.092208, 0.092208}, {0.157706, 0.157706}, {0.168113, 0.168113}, {0.157706, 0.157706}, {0.092208, 0.092208}, {-0.14564, -0.14564}, {-2.34151, -2.34151}, {-4.12343, -4.12343}, {-4.12343, -4.12343}, {-2.34151, -2.34151}, {-0.896542, -0.896542}, {-0.147282, -0.147282}, {0.092208, 0.092208}, {0.158184, 0.158184}, {0.158184, 0.158184}, {0.092208, 0.092208}, {-0.147282, -0.147282}, {-0.896542, -0.896542}, {-7.75282, -7.75282}, {-10.8749, -10.8749}, {-7.75282, -7.75282}, {-3.06152, -3.06152}, {-0.896542, -0.896542}, {-0.14564, -0.14564}, {0.0548487, 0.0548487}, {0.109412, 0.109412}, {0.0548487, 0.0548487}, {-0.14564, -0.14564}, {-0.896542, -0.896542}, {-3.06152, -3.06152} - }; + std::vector> expected_out_spin + = {{-21.3427, -21.3427}, {-15.3194, -15.3194}, {-5.63064, -5.63064}, {-1.51808, -1.51808}, + {-0.427844, -0.427844}, {-0.156864, -0.156864}, {-0.109912, -0.109912}, {-0.156864, -0.156864}, + {-0.427844, -0.427844}, {-1.51808, -1.51808}, {-5.63064, -5.63064}, {-15.3194, -15.3194}, + {-15.3194, -15.3194}, {-7.81799, -7.81799}, {-2.4828, -2.4828}, {-0.875722, -0.875722}, + {-0.452617, -0.452617}, {-0.351472, -0.351472}, {-0.351472, -0.351472}, {-0.452617, -0.452617}, + {-0.875722, -0.875722}, {-2.4828, -2.4828}, {-7.81799, -7.81799}, {-15.3194, -15.3194}, + {-5.63064, -5.63064}, {-2.4828, -2.4828}, {-1.0933, -1.0933}, {-0.702028, -0.702028}, + {-0.64247, -0.64247}, {-0.614035, -0.614035}, {-0.64247, -0.64247}, {-0.702028, -0.702028}, + {-1.0933, -1.0933}, {-2.4828, -2.4828}, {-5.63064, -5.63064}, {-7.75282, -7.75282}, + {-1.51808, -1.51808}, {-0.875722, -0.875722}, {-0.702028, -0.702028}, {-0.793018, -0.793018}, + {-0.892931, -0.892931}, {-0.892931, -0.892931}, {-0.793018, -0.793018}, {-0.702028, -0.702028}, + {-0.875722, -0.875722}, {-1.51808, -1.51808}, {-2.34151, -2.34151}, {-2.34151, -2.34151}, + {-0.427844, -0.427844}, {-0.452617, -0.452617}, {-0.64247, -0.64247}, {-0.892931, -0.892931}, + {-1.03013, -1.03013}, {-0.892931, -0.892931}, {-0.64247, -0.64247}, {-0.452617, -0.452617}, + {-0.427844, -0.427844}, {-0.618499, -0.618499}, {-0.713398, -0.713398}, {-0.618499, -0.618499}, + {-0.156864, -0.156864}, {-0.351472, -0.351472}, {-0.614035, -0.614035}, {-0.892931, -0.892931}, + {-0.892931, -0.892931}, {-0.614035, -0.614035}, {-0.351472, -0.351472}, {-0.156864, -0.156864}, + {-0.105947, -0.105947}, {-0.0832459, -0.0832459}, {-0.0832459, -0.0832459}, {-0.105947, -0.105947}, + {-0.109912, -0.109912}, {-0.351472, -0.351472}, {-0.64247, -0.64247}, {-0.793018, -0.793018}, + {-0.64247, -0.64247}, {-0.351472, -0.351472}, {-0.109912, -0.109912}, {0.0132163, 0.0132163}, + {0.0744409, 0.0744409}, {0.114396, 0.114396}, {0.0744409, 0.0744409}, {0.0132163, 0.0132163}, + {-0.156864, -0.156864}, {-0.452617, -0.452617}, {-0.702028, -0.702028}, {-0.702028, -0.702028}, + {-0.452617, -0.452617}, {-0.156864, -0.156864}, {0.0132163, 0.0132163}, {0.111154, 0.111154}, + {0.143719, 0.143719}, {0.143719, 0.143719}, {0.111154, 0.111154}, {0.0132163, 0.0132163}, + {-0.427844, -0.427844}, {-0.875722, -0.875722}, {-1.0933, -1.0933}, {-0.875722, -0.875722}, + {-0.427844, -0.427844}, {-0.105947, -0.105947}, {0.0744409, 0.0744409}, {0.143719, 0.143719}, + {0.137941, 0.137941}, {0.143719, 0.143719}, {0.0744409, 0.0744409}, {-0.105947, -0.105947}, + {-1.51808, -1.51808}, {-2.4828, -2.4828}, {-2.4828, -2.4828}, {-1.51808, -1.51808}, + {-0.618499, -0.618499}, {-0.0832459, -0.0832459}, {0.114396, 0.114396}, {0.143719, 0.143719}, + {0.143719, 0.143719}, {0.114396, 0.114396}, {-0.0832459, -0.0832459}, {-0.618499, -0.618499}, + {-5.63064, -5.63064}, {-7.81799, -7.81799}, {-5.63064, -5.63064}, {-2.34151, -2.34151}, + {-0.713398, -0.713398}, {-0.0832459, -0.0832459}, {0.0744409, 0.0744409}, {0.111154, 0.111154}, + {0.0744409, 0.0744409}, {-0.0832459, -0.0832459}, {-0.713398, -0.713398}, {-2.34151, -2.34151}, + {-15.3194, -15.3194}, {-15.3194, -15.3194}, {-7.75282, -7.75282}, {-2.34151, -2.34151}, + {-0.618499, -0.618499}, {-0.105947, -0.105947}, {0.0132163, 0.0132163}, {0.0132163, 0.0132163}, + {-0.105947, -0.105947}, {-0.618499, -0.618499}, {-2.34151, -2.34151}, {-7.75282, -7.75282}, + {-15.3194, -15.3194}, {-7.81799, -7.81799}, {-2.4828, -2.4828}, {-0.875722, -0.875722}, + {-0.452617, -0.452617}, {-0.351472, -0.351472}, {-0.351472, -0.351472}, {-0.452617, -0.452617}, + {-0.875722, -0.875722}, {-2.4828, -2.4828}, {-7.81799, -7.81799}, {-15.3194, -15.3194}, + {-7.81799, -7.81799}, {-3.21636, -3.21636}, {-1.30653, -1.30653}, {-0.879784, -0.879784}, + {-0.831788, -0.831788}, {-0.806318, -0.806318}, {-0.831788, -0.831788}, {-0.879784, -0.879784}, + {-1.30653, -1.30653}, {-3.21636, -3.21636}, {-7.81799, -7.81799}, {-10.8749, -10.8749}, + {-2.4828, -2.4828}, {-1.30653, -1.30653}, {-1.06387, -1.06387}, {-1.35349, -1.35349}, + {-1.66622, -1.66622}, {-1.66622, -1.66622}, {-1.35349, -1.35349}, {-1.06387, -1.06387}, + {-1.30653, -1.30653}, {-2.4828, -2.4828}, {-4.12343, -4.12343}, {-4.12343, -4.12343}, + {-0.875722, -0.875722}, {-0.879784, -0.879784}, {-1.35349, -1.35349}, {-2.25569, -2.25569}, + {-2.73085, -2.73085}, {-2.25569, -2.25569}, {-1.35349, -1.35349}, {-0.879784, -0.879784}, + {-0.875722, -0.875722}, {-1.2319, -1.2319}, {-1.44876, -1.44876}, {-1.2319, -1.2319}, + {-0.452617, -0.452617}, {-0.831788, -0.831788}, {-1.66622, -1.66622}, {-2.73085, -2.73085}, + {-2.73085, -2.73085}, {-1.66622, -1.66622}, {-0.831788, -0.831788}, {-0.452617, -0.452617}, + {-0.347014, -0.347014}, {-0.386005, -0.386005}, {-0.386005, -0.386005}, {-0.347014, -0.347014}, + {-0.351472, -0.351472}, {-0.806318, -0.806318}, {-1.66622, -1.66622}, {-2.25569, -2.25569}, + {-1.66622, -1.66622}, {-0.806318, -0.806318}, {-0.351472, -0.351472}, {-0.120705, -0.120705}, + {-0.0369426, -0.0369426}, {0.0106435, 0.0106435}, {-0.0369426, -0.0369426}, {-0.120705, -0.120705}, + {-0.351472, -0.351472}, {-0.831788, -0.831788}, {-1.35349, -1.35349}, {-1.35349, -1.35349}, + {-0.831788, -0.831788}, {-0.351472, -0.351472}, {-0.0762117, -0.0762117}, {0.0443525, 0.0443525}, + {0.108692, 0.108692}, {0.108692, 0.108692}, {0.0443525, 0.0443525}, {-0.0762117, -0.0762117}, + {-0.452617, -0.452617}, {-0.879784, -0.879784}, {-1.06387, -1.06387}, {-0.879784, -0.879784}, + {-0.452617, -0.452617}, {-0.120705, -0.120705}, {0.0443525, 0.0443525}, {0.120865, 0.120865}, + {0.130971, 0.130971}, {0.120865, 0.120865}, {0.0443525, 0.0443525}, {-0.120705, -0.120705}, + {-0.875722, -0.875722}, {-1.30653, -1.30653}, {-1.30653, -1.30653}, {-0.875722, -0.875722}, + {-0.347014, -0.347014}, {-0.0369426, -0.0369426}, {0.108692, 0.108692}, {0.130971, 0.130971}, + {0.130971, 0.130971}, {0.108692, 0.108692}, {-0.0369426, -0.0369426}, {-0.347014, -0.347014}, + {-2.4828, -2.4828}, {-3.21636, -3.21636}, {-2.4828, -2.4828}, {-1.2319, -1.2319}, + {-0.386005, -0.386005}, {0.0106435, 0.0106435}, {0.108692, 0.108692}, {0.120865, 0.120865}, + {0.108692, 0.108692}, {0.0106435, 0.0106435}, {-0.386005, -0.386005}, {-1.2319, -1.2319}, + {-7.81799, -7.81799}, {-7.81799, -7.81799}, {-4.12343, -4.12343}, {-1.44876, -1.44876}, + {-0.386005, -0.386005}, {-0.0369426, -0.0369426}, {0.0443525, 0.0443525}, {0.0443525, 0.0443525}, + {-0.0369426, -0.0369426}, {-0.386005, -0.386005}, {-1.44876, -1.44876}, {-4.12343, -4.12343}, + {-15.3194, -15.3194}, {-10.8749, -10.8749}, {-4.12343, -4.12343}, {-1.2319, -1.2319}, + {-0.347014, -0.347014}, {-0.120705, -0.120705}, {-0.0762117, -0.0762117}, {-0.120705, -0.120705}, + {-0.347014, -0.347014}, {-1.2319, -1.2319}, {-4.12343, -4.12343}, {-10.8749, -10.8749}, + {-5.63064, -5.63064}, {-2.4828, -2.4828}, {-1.0933, -1.0933}, {-0.702028, -0.702028}, + {-0.64247, -0.64247}, {-0.614035, -0.614035}, {-0.64247, -0.64247}, {-0.702028, -0.702028}, + {-1.0933, -1.0933}, {-2.4828, -2.4828}, {-5.63064, -5.63064}, {-7.75282, -7.75282}, + {-2.4828, -2.4828}, {-1.30653, -1.30653}, {-1.06387, -1.06387}, {-1.35349, -1.35349}, + {-1.66622, -1.66622}, {-1.66622, -1.66622}, {-1.35349, -1.35349}, {-1.06387, -1.06387}, + {-1.30653, -1.30653}, {-2.4828, -2.4828}, {-4.12343, -4.12343}, {-4.12343, -4.12343}, + {-1.0933, -1.0933}, {-1.06387, -1.06387}, {-1.79984, -1.79984}, {-3.24464, -3.24464}, + {-3.97898, -3.97898}, {-3.24464, -3.24464}, {-1.79984, -1.79984}, {-1.06387, -1.06387}, + {-1.0933, -1.0933}, {-1.56806, -1.56806}, {-1.85966, -1.85966}, {-1.56806, -1.56806}, + {-0.702028, -0.702028}, {-1.35349, -1.35349}, {-3.24464, -3.24464}, {-5.5069, -5.5069}, + {-5.5069, -5.5069}, {-3.24464, -3.24464}, {-1.35349, -1.35349}, {-0.702028, -0.702028}, + {-0.574855, -0.574855}, {-0.653268, -0.653268}, {-0.653268, -0.653268}, {-0.574855, -0.574855}, + {-0.64247, -0.64247}, {-1.66622, -1.66622}, {-3.97898, -3.97898}, {-5.5069, -5.5069}, + {-3.97898, -3.97898}, {-1.66622, -1.66622}, {-0.64247, -0.64247}, {-0.274405, -0.274405}, + {-0.152598, -0.152598}, {-0.122002, -0.122002}, {-0.152598, -0.152598}, {-0.274405, -0.274405}, + {-0.614035, -0.614035}, {-1.66622, -1.66622}, {-3.24464, -3.24464}, {-3.24464, -3.24464}, + {-1.66622, -1.66622}, {-0.614035, -0.614035}, {-0.20641, -0.20641}, {-0.02972, -0.02972}, + {0.0521328, 0.0521328}, {0.0521328, 0.0521328}, {-0.02972, -0.02972}, {-0.20641, -0.20641}, + {-0.64247, -0.64247}, {-1.35349, -1.35349}, {-1.79984, -1.79984}, {-1.35349, -1.35349}, + {-0.64247, -0.64247}, {-0.20641, -0.20641}, {0.00680462, 0.00680462}, {0.0937547, 0.0937547}, + {0.123694, 0.123694}, {0.0937547, 0.0937547}, {0.00680462, 0.00680462}, {-0.20641, -0.20641}, + {-0.702028, -0.702028}, {-1.06387, -1.06387}, {-1.06387, -1.06387}, {-0.702028, -0.702028}, + {-0.274405, -0.274405}, {-0.02972, -0.02972}, {0.0937547, 0.0937547}, {0.123259, 0.123259}, + {0.123259, 0.123259}, {0.0937547, 0.0937547}, {-0.02972, -0.02972}, {-0.274405, -0.274405}, + {-1.0933, -1.0933}, {-1.30653, -1.30653}, {-1.0933, -1.0933}, {-0.574855, -0.574855}, + {-0.152598, -0.152598}, {0.0521328, 0.0521328}, {0.123694, 0.123694}, {0.123259, 0.123259}, + {0.123694, 0.123694}, {0.0521328, 0.0521328}, {-0.152598, -0.152598}, {-0.574855, -0.574855}, + {-2.4828, -2.4828}, {-2.4828, -2.4828}, {-1.56806, -1.56806}, {-0.653268, -0.653268}, + {-0.122002, -0.122002}, {0.0521328, 0.0521328}, {0.0937547, 0.0937547}, {0.0937547, 0.0937547}, + {0.0521328, 0.0521328}, {-0.122002, -0.122002}, {-0.653268, -0.653268}, {-1.56806, -1.56806}, + {-5.63064, -5.63064}, {-4.12343, -4.12343}, {-1.85966, -1.85966}, {-0.653268, -0.653268}, + {-0.152598, -0.152598}, {-0.02972, -0.02972}, {0.00680462, 0.00680462}, {-0.02972, -0.02972}, + {-0.152598, -0.152598}, {-0.653268, -0.653268}, {-1.85966, -1.85966}, {-4.12343, -4.12343}, + {-7.75282, -7.75282}, {-4.12343, -4.12343}, {-1.56806, -1.56806}, {-0.574855, -0.574855}, + {-0.274405, -0.274405}, {-0.20641, -0.20641}, {-0.20641, -0.20641}, {-0.274405, -0.274405}, + {-0.574855, -0.574855}, {-1.56806, -1.56806}, {-4.12343, -4.12343}, {-7.75282, -7.75282}, + {-1.51808, -1.51808}, {-0.875722, -0.875722}, {-0.702028, -0.702028}, {-0.793018, -0.793018}, + {-0.892931, -0.892931}, {-0.892931, -0.892931}, {-0.793018, -0.793018}, {-0.702028, -0.702028}, + {-0.875722, -0.875722}, {-1.51808, -1.51808}, {-2.34151, -2.34151}, {-2.34151, -2.34151}, + {-0.875722, -0.875722}, {-0.879784, -0.879784}, {-1.35349, -1.35349}, {-2.25569, -2.25569}, + {-2.73085, -2.73085}, {-2.25569, -2.25569}, {-1.35349, -1.35349}, {-0.879784, -0.879784}, + {-0.875722, -0.875722}, {-1.2319, -1.2319}, {-1.44876, -1.44876}, {-1.2319, -1.2319}, + {-0.702028, -0.702028}, {-1.35349, -1.35349}, {-3.24464, -3.24464}, {-5.5069, -5.5069}, + {-5.5069, -5.5069}, {-3.24464, -3.24464}, {-1.35349, -1.35349}, {-0.702028, -0.702028}, + {-0.574855, -0.574855}, {-0.653268, -0.653268}, {-0.653268, -0.653268}, {-0.574855, -0.574855}, + {-0.793018, -0.793018}, {-2.25569, -2.25569}, {-5.5069, -5.5069}, {-7.51452, -7.51452}, + {-5.5069, -5.5069}, {-2.25569, -2.25569}, {-0.793018, -0.793018}, {-0.340655, -0.340655}, + {-0.199608, -0.199608}, {-0.176834, -0.176834}, {-0.199608, -0.199608}, {-0.340655, -0.340655}, + {-0.892931, -0.892931}, {-2.73085, -2.73085}, {-5.5069, -5.5069}, {-5.5069, -5.5069}, + {-2.73085, -2.73085}, {-0.892931, -0.892931}, {-0.313913, -0.313913}, {-0.0845755, -0.0845755}, + {0.0157278, 0.0157278}, {0.0157278, 0.0157278}, {-0.0845755, -0.0845755}, {-0.313913, -0.313913}, + {-0.892931, -0.892931}, {-2.25569, -2.25569}, {-3.24464, -3.24464}, {-2.25569, -2.25569}, + {-0.892931, -0.892931}, {-0.292461, -0.292461}, {-0.0454612, -0.0454612}, {0.0609987, 0.0609987}, + {0.112758, 0.112758}, {0.0609987, 0.0609987}, {-0.0454612, -0.0454612}, {-0.292461, -0.292461}, + {-0.793018, -0.793018}, {-1.35349, -1.35349}, {-1.35349, -1.35349}, {-0.793018, -0.793018}, + {-0.313913, -0.313913}, {-0.0454612, -0.0454612}, {0.0776152, 0.0776152}, {0.123461, 0.123461}, + {0.123461, 0.123461}, {0.0776152, 0.0776152}, {-0.0454612, -0.0454612}, {-0.313913, -0.313913}, + {-0.702028, -0.702028}, {-0.879784, -0.879784}, {-0.702028, -0.702028}, {-0.340655, -0.340655}, + {-0.0845755, -0.0845755}, {0.0609987, 0.0609987}, {0.123461, 0.123461}, {0.121793, 0.121793}, + {0.123461, 0.123461}, {0.0609987, 0.0609987}, {-0.0845755, -0.0845755}, {-0.340655, -0.340655}, + {-0.875722, -0.875722}, {-0.875722, -0.875722}, {-0.574855, -0.574855}, {-0.199608, -0.199608}, + {0.0157278, 0.0157278}, {0.112758, 0.112758}, {0.123461, 0.123461}, {0.123461, 0.123461}, + {0.112758, 0.112758}, {0.0157278, 0.0157278}, {-0.199608, -0.199608}, {-0.574855, -0.574855}, + {-1.51808, -1.51808}, {-1.2319, -1.2319}, {-0.653268, -0.653268}, {-0.176834, -0.176834}, + {0.0157278, 0.0157278}, {0.0609987, 0.0609987}, {0.0776152, 0.0776152}, {0.0609987, 0.0609987}, + {0.0157278, 0.0157278}, {-0.176834, -0.176834}, {-0.653268, -0.653268}, {-1.2319, -1.2319}, + {-2.34151, -2.34151}, {-1.44876, -1.44876}, {-0.653268, -0.653268}, {-0.199608, -0.199608}, + {-0.0845755, -0.0845755}, {-0.0454612, -0.0454612}, {-0.0454612, -0.0454612}, {-0.0845755, -0.0845755}, + {-0.199608, -0.199608}, {-0.653268, -0.653268}, {-1.44876, -1.44876}, {-2.34151, -2.34151}, + {-2.34151, -2.34151}, {-1.2319, -1.2319}, {-0.574855, -0.574855}, {-0.340655, -0.340655}, + {-0.313913, -0.313913}, {-0.292461, -0.292461}, {-0.313913, -0.313913}, {-0.340655, -0.340655}, + {-0.574855, -0.574855}, {-1.2319, -1.2319}, {-2.34151, -2.34151}, {-3.06152, -3.06152}, + {-0.427844, -0.427844}, {-0.452617, -0.452617}, {-0.64247, -0.64247}, {-0.892931, -0.892931}, + {-1.03013, -1.03013}, {-0.892931, -0.892931}, {-0.64247, -0.64247}, {-0.452617, -0.452617}, + {-0.427844, -0.427844}, {-0.618499, -0.618499}, {-0.713398, -0.713398}, {-0.618499, -0.618499}, + {-0.452617, -0.452617}, {-0.831788, -0.831788}, {-1.66622, -1.66622}, {-2.73085, -2.73085}, + {-2.73085, -2.73085}, {-1.66622, -1.66622}, {-0.831788, -0.831788}, {-0.452617, -0.452617}, + {-0.347014, -0.347014}, {-0.386005, -0.386005}, {-0.386005, -0.386005}, {-0.347014, -0.347014}, + {-0.64247, -0.64247}, {-1.66622, -1.66622}, {-3.97898, -3.97898}, {-5.5069, -5.5069}, + {-3.97898, -3.97898}, {-1.66622, -1.66622}, {-0.64247, -0.64247}, {-0.274405, -0.274405}, + {-0.152598, -0.152598}, {-0.122002, -0.122002}, {-0.152598, -0.152598}, {-0.274405, -0.274405}, + {-0.892931, -0.892931}, {-2.73085, -2.73085}, {-5.5069, -5.5069}, {-5.5069, -5.5069}, + {-2.73085, -2.73085}, {-0.892931, -0.892931}, {-0.313913, -0.313913}, {-0.0845755, -0.0845755}, + {0.0157278, 0.0157278}, {0.0157278, 0.0157278}, {-0.0845755, -0.0845755}, {-0.313913, -0.313913}, + {-1.03013, -1.03013}, {-2.73085, -2.73085}, {-3.97898, -3.97898}, {-2.73085, -2.73085}, + {-1.03013, -1.03013}, {-0.334222, -0.334222}, {-0.0759324, -0.0759324}, {0.0444566, 0.0444566}, + {0.110993, 0.110993}, {0.0444566, 0.0444566}, {-0.0759324, -0.0759324}, {-0.334222, -0.334222}, + {-0.892931, -0.892931}, {-1.66622, -1.66622}, {-1.66622, -1.66622}, {-0.892931, -0.892931}, + {-0.334222, -0.334222}, {-0.0634587, -0.0634587}, {0.0554104, 0.0554104}, {0.130616, 0.130616}, + {0.130616, 0.130616}, {0.0554104, 0.0554104}, {-0.0634587, -0.0634587}, {-0.334222, -0.334222}, + {-0.64247, -0.64247}, {-0.831788, -0.831788}, {-0.64247, -0.64247}, {-0.313913, -0.313913}, + {-0.0759324, -0.0759324}, {0.0554104, 0.0554104}, {0.117799, 0.117799}, {0.140755, 0.140755}, + {0.117799, 0.117799}, {0.0554104, 0.0554104}, {-0.0759324, -0.0759324}, {-0.313913, -0.313913}, + {-0.452617, -0.452617}, {-0.452617, -0.452617}, {-0.274405, -0.274405}, {-0.0845755, -0.0845755}, + {0.0444566, 0.0444566}, {0.130616, 0.130616}, {0.140755, 0.140755}, {0.140755, 0.140755}, + {0.130616, 0.130616}, {0.0444566, 0.0444566}, {-0.0845755, -0.0845755}, {-0.274405, -0.274405}, + {-0.427844, -0.427844}, {-0.347014, -0.347014}, {-0.152598, -0.152598}, {0.0157278, 0.0157278}, + {0.110993, 0.110993}, {0.130616, 0.130616}, {0.117799, 0.117799}, {0.130616, 0.130616}, + {0.110993, 0.110993}, {0.0157278, 0.0157278}, {-0.152598, -0.152598}, {-0.347014, -0.347014}, + {-0.618499, -0.618499}, {-0.386005, -0.386005}, {-0.122002, -0.122002}, {0.0157278, 0.0157278}, + {0.0444566, 0.0444566}, {0.0554104, 0.0554104}, {0.0554104, 0.0554104}, {0.0444566, 0.0444566}, + {0.0157278, 0.0157278}, {-0.122002, -0.122002}, {-0.386005, -0.386005}, {-0.618499, -0.618499}, + {-0.713398, -0.713398}, {-0.386005, -0.386005}, {-0.152598, -0.152598}, {-0.0845755, -0.0845755}, + {-0.0759324, -0.0759324}, {-0.0634587, -0.0634587}, {-0.0759324, -0.0759324}, {-0.0845755, -0.0845755}, + {-0.152598, -0.152598}, {-0.386005, -0.386005}, {-0.713398, -0.713398}, {-0.896542, -0.896542}, + {-0.618499, -0.618499}, {-0.347014, -0.347014}, {-0.274405, -0.274405}, {-0.313913, -0.313913}, + {-0.334222, -0.334222}, {-0.334222, -0.334222}, {-0.313913, -0.313913}, {-0.274405, -0.274405}, + {-0.347014, -0.347014}, {-0.618499, -0.618499}, {-0.896542, -0.896542}, {-0.896542, -0.896542}, + {-0.156864, -0.156864}, {-0.351472, -0.351472}, {-0.614035, -0.614035}, {-0.892931, -0.892931}, + {-0.892931, -0.892931}, {-0.614035, -0.614035}, {-0.351472, -0.351472}, {-0.156864, -0.156864}, + {-0.105947, -0.105947}, {-0.0832459, -0.0832459}, {-0.0832459, -0.0832459}, {-0.105947, -0.105947}, + {-0.351472, -0.351472}, {-0.806318, -0.806318}, {-1.66622, -1.66622}, {-2.25569, -2.25569}, + {-1.66622, -1.66622}, {-0.806318, -0.806318}, {-0.351472, -0.351472}, {-0.120705, -0.120705}, + {-0.0369426, -0.0369426}, {0.0106435, 0.0106435}, {-0.0369426, -0.0369426}, {-0.120705, -0.120705}, + {-0.614035, -0.614035}, {-1.66622, -1.66622}, {-3.24464, -3.24464}, {-3.24464, -3.24464}, + {-1.66622, -1.66622}, {-0.614035, -0.614035}, {-0.20641, -0.20641}, {-0.02972, -0.02972}, + {0.0521328, 0.0521328}, {0.0521328, 0.0521328}, {-0.02972, -0.02972}, {-0.20641, -0.20641}, + {-0.892931, -0.892931}, {-2.25569, -2.25569}, {-3.24464, -3.24464}, {-2.25569, -2.25569}, + {-0.892931, -0.892931}, {-0.292461, -0.292461}, {-0.0454612, -0.0454612}, {0.0609987, 0.0609987}, + {0.112758, 0.112758}, {0.0609987, 0.0609987}, {-0.0454612, -0.0454612}, {-0.292461, -0.292461}, + {-0.892931, -0.892931}, {-1.66622, -1.66622}, {-1.66622, -1.66622}, {-0.892931, -0.892931}, + {-0.334222, -0.334222}, {-0.0634587, -0.0634587}, {0.0554104, 0.0554104}, {0.130616, 0.130616}, + {0.130616, 0.130616}, {0.0554104, 0.0554104}, {-0.0634587, -0.0634587}, {-0.334222, -0.334222}, + {-0.614035, -0.614035}, {-0.806318, -0.806318}, {-0.614035, -0.614035}, {-0.292461, -0.292461}, + {-0.0634587, -0.0634587}, {0.0503, 0.0503}, {0.113086, 0.113086}, {0.158062, 0.158062}, + {0.113086, 0.113086}, {0.0503, 0.0503}, {-0.0634587, -0.0634587}, {-0.292461, -0.292461}, + {-0.351472, -0.351472}, {-0.351472, -0.351472}, {-0.20641, -0.20641}, {-0.0454612, -0.0454612}, + {0.0554104, 0.0554104}, {0.113086, 0.113086}, {0.153851, 0.153851}, {0.153851, 0.153851}, + {0.113086, 0.113086}, {0.0554104, 0.0554104}, {-0.0454612, -0.0454612}, {-0.20641, -0.20641}, + {-0.156864, -0.156864}, {-0.120705, -0.120705}, {-0.02972, -0.02972}, {0.0609987, 0.0609987}, + {0.130616, 0.130616}, {0.158062, 0.158062}, {0.153851, 0.153851}, {0.158062, 0.158062}, + {0.130616, 0.130616}, {0.0609987, 0.0609987}, {-0.02972, -0.02972}, {-0.120705, -0.120705}, + {-0.105947, -0.105947}, {-0.0369426, -0.0369426}, {0.0521328, 0.0521328}, {0.112758, 0.112758}, + {0.130616, 0.130616}, {0.113086, 0.113086}, {0.113086, 0.113086}, {0.130616, 0.130616}, + {0.112758, 0.112758}, {0.0521328, 0.0521328}, {-0.0369426, -0.0369426}, {-0.105947, -0.105947}, + {-0.0832459, -0.0832459}, {0.0106435, 0.0106435}, {0.0521328, 0.0521328}, {0.0609987, 0.0609987}, + {0.0554104, 0.0554104}, {0.0503, 0.0503}, {0.0554104, 0.0554104}, {0.0609987, 0.0609987}, + {0.0521328, 0.0521328}, {0.0106435, 0.0106435}, {-0.0832459, -0.0832459}, {-0.14564, -0.14564}, + {-0.0832459, -0.0832459}, {-0.0369426, -0.0369426}, {-0.02972, -0.02972}, {-0.0454612, -0.0454612}, + {-0.0634587, -0.0634587}, {-0.0634587, -0.0634587}, {-0.0454612, -0.0454612}, {-0.02972, -0.02972}, + {-0.0369426, -0.0369426}, {-0.0832459, -0.0832459}, {-0.147282, -0.147282}, {-0.147282, -0.147282}, + {-0.105947, -0.105947}, {-0.120705, -0.120705}, {-0.20641, -0.20641}, {-0.292461, -0.292461}, + {-0.334222, -0.334222}, {-0.292461, -0.292461}, {-0.20641, -0.20641}, {-0.120705, -0.120705}, + {-0.105947, -0.105947}, {-0.14564, -0.14564}, {-0.147282, -0.147282}, {-0.14564, -0.14564}, + {-0.109912, -0.109912}, {-0.351472, -0.351472}, {-0.64247, -0.64247}, {-0.793018, -0.793018}, + {-0.64247, -0.64247}, {-0.351472, -0.351472}, {-0.109912, -0.109912}, {0.0132163, 0.0132163}, + {0.0744409, 0.0744409}, {0.114396, 0.114396}, {0.0744409, 0.0744409}, {0.0132163, 0.0132163}, + {-0.351472, -0.351472}, {-0.831788, -0.831788}, {-1.35349, -1.35349}, {-1.35349, -1.35349}, + {-0.831788, -0.831788}, {-0.351472, -0.351472}, {-0.0762117, -0.0762117}, {0.0443525, 0.0443525}, + {0.108692, 0.108692}, {0.108692, 0.108692}, {0.0443525, 0.0443525}, {-0.0762117, -0.0762117}, + {-0.64247, -0.64247}, {-1.35349, -1.35349}, {-1.79984, -1.79984}, {-1.35349, -1.35349}, + {-0.64247, -0.64247}, {-0.20641, -0.20641}, {0.00680462, 0.00680462}, {0.0937547, 0.0937547}, + {0.123694, 0.123694}, {0.0937547, 0.0937547}, {0.00680462, 0.00680462}, {-0.20641, -0.20641}, + {-0.793018, -0.793018}, {-1.35349, -1.35349}, {-1.35349, -1.35349}, {-0.793018, -0.793018}, + {-0.313913, -0.313913}, {-0.0454612, -0.0454612}, {0.0776152, 0.0776152}, {0.123461, 0.123461}, + {0.123461, 0.123461}, {0.0776152, 0.0776152}, {-0.0454612, -0.0454612}, {-0.313913, -0.313913}, + {-0.64247, -0.64247}, {-0.831788, -0.831788}, {-0.64247, -0.64247}, {-0.313913, -0.313913}, + {-0.0759324, -0.0759324}, {0.0554104, 0.0554104}, {0.117799, 0.117799}, {0.140755, 0.140755}, + {0.117799, 0.117799}, {0.0554104, 0.0554104}, {-0.0759324, -0.0759324}, {-0.313913, -0.313913}, + {-0.351472, -0.351472}, {-0.351472, -0.351472}, {-0.20641, -0.20641}, {-0.0454612, -0.0454612}, + {0.0554104, 0.0554104}, {0.113086, 0.113086}, {0.153851, 0.153851}, {0.153851, 0.153851}, + {0.113086, 0.113086}, {0.0554104, 0.0554104}, {-0.0454612, -0.0454612}, {-0.20641, -0.20641}, + {-0.109912, -0.109912}, {-0.0762117, -0.0762117}, {0.00680462, 0.00680462}, {0.0776152, 0.0776152}, + {0.117799, 0.117799}, {0.153851, 0.153851}, {0.173418, 0.173418}, {0.153851, 0.153851}, + {0.117799, 0.117799}, {0.0776152, 0.0776152}, {0.00680462, 0.00680462}, {-0.0762117, -0.0762117}, + {0.0132163, 0.0132163}, {0.0443525, 0.0443525}, {0.0937547, 0.0937547}, {0.123461, 0.123461}, + {0.140755, 0.140755}, {0.153851, 0.153851}, {0.153851, 0.153851}, {0.140755, 0.140755}, + {0.123461, 0.123461}, {0.0937547, 0.0937547}, {0.0443525, 0.0443525}, {0.0132163, 0.0132163}, + {0.0744409, 0.0744409}, {0.108692, 0.108692}, {0.123694, 0.123694}, {0.123461, 0.123461}, + {0.117799, 0.117799}, {0.113086, 0.113086}, {0.117799, 0.117799}, {0.123461, 0.123461}, + {0.123694, 0.123694}, {0.108692, 0.108692}, {0.0744409, 0.0744409}, {0.0548487, 0.0548487}, + {0.114396, 0.114396}, {0.108692, 0.108692}, {0.0937547, 0.0937547}, {0.0776152, 0.0776152}, + {0.0554104, 0.0554104}, {0.0554104, 0.0554104}, {0.0776152, 0.0776152}, {0.0937547, 0.0937547}, + {0.108692, 0.108692}, {0.114396, 0.114396}, {0.092208, 0.092208}, {0.092208, 0.092208}, + {0.0744409, 0.0744409}, {0.0443525, 0.0443525}, {0.00680462, 0.00680462}, {-0.0454612, -0.0454612}, + {-0.0759324, -0.0759324}, {-0.0454612, -0.0454612}, {0.00680462, 0.00680462}, {0.0443525, 0.0443525}, + {0.0744409, 0.0744409}, {0.092208, 0.092208}, {0.0947446, 0.0947446}, {0.092208, 0.092208}, + {0.0132163, 0.0132163}, {-0.0762117, -0.0762117}, {-0.20641, -0.20641}, {-0.313913, -0.313913}, + {-0.313913, -0.313913}, {-0.20641, -0.20641}, {-0.0762117, -0.0762117}, {0.0132163, 0.0132163}, + {0.0548487, 0.0548487}, {0.092208, 0.092208}, {0.092208, 0.092208}, {0.0548487, 0.0548487}, + {-0.156864, -0.156864}, {-0.452617, -0.452617}, {-0.702028, -0.702028}, {-0.702028, -0.702028}, + {-0.452617, -0.452617}, {-0.156864, -0.156864}, {0.0132163, 0.0132163}, {0.111154, 0.111154}, + {0.143719, 0.143719}, {0.143719, 0.143719}, {0.111154, 0.111154}, {0.0132163, 0.0132163}, + {-0.452617, -0.452617}, {-0.879784, -0.879784}, {-1.06387, -1.06387}, {-0.879784, -0.879784}, + {-0.452617, -0.452617}, {-0.120705, -0.120705}, {0.0443525, 0.0443525}, {0.120865, 0.120865}, + {0.130971, 0.130971}, {0.120865, 0.120865}, {0.0443525, 0.0443525}, {-0.120705, -0.120705}, + {-0.702028, -0.702028}, {-1.06387, -1.06387}, {-1.06387, -1.06387}, {-0.702028, -0.702028}, + {-0.274405, -0.274405}, {-0.02972, -0.02972}, {0.0937547, 0.0937547}, {0.123259, 0.123259}, + {0.123259, 0.123259}, {0.0937547, 0.0937547}, {-0.02972, -0.02972}, {-0.274405, -0.274405}, + {-0.702028, -0.702028}, {-0.879784, -0.879784}, {-0.702028, -0.702028}, {-0.340655, -0.340655}, + {-0.0845755, -0.0845755}, {0.0609987, 0.0609987}, {0.123461, 0.123461}, {0.121793, 0.121793}, + {0.123461, 0.123461}, {0.0609987, 0.0609987}, {-0.0845755, -0.0845755}, {-0.340655, -0.340655}, + {-0.452617, -0.452617}, {-0.452617, -0.452617}, {-0.274405, -0.274405}, {-0.0845755, -0.0845755}, + {0.0444566, 0.0444566}, {0.130616, 0.130616}, {0.140755, 0.140755}, {0.140755, 0.140755}, + {0.130616, 0.130616}, {0.0444566, 0.0444566}, {-0.0845755, -0.0845755}, {-0.274405, -0.274405}, + {-0.156864, -0.156864}, {-0.120705, -0.120705}, {-0.02972, -0.02972}, {0.0609987, 0.0609987}, + {0.130616, 0.130616}, {0.158062, 0.158062}, {0.153851, 0.153851}, {0.158062, 0.158062}, + {0.130616, 0.130616}, {0.0609987, 0.0609987}, {-0.02972, -0.02972}, {-0.120705, -0.120705}, + {0.0132163, 0.0132163}, {0.0443525, 0.0443525}, {0.0937547, 0.0937547}, {0.123461, 0.123461}, + {0.140755, 0.140755}, {0.153851, 0.153851}, {0.153851, 0.153851}, {0.140755, 0.140755}, + {0.123461, 0.123461}, {0.0937547, 0.0937547}, {0.0443525, 0.0443525}, {0.0132163, 0.0132163}, + {0.111154, 0.111154}, {0.120865, 0.120865}, {0.123259, 0.123259}, {0.121793, 0.121793}, + {0.140755, 0.140755}, {0.158062, 0.158062}, {0.140755, 0.140755}, {0.121793, 0.121793}, + {0.123259, 0.123259}, {0.120865, 0.120865}, {0.111154, 0.111154}, {0.109412, 0.109412}, + {0.143719, 0.143719}, {0.130971, 0.130971}, {0.123259, 0.123259}, {0.123461, 0.123461}, + {0.130616, 0.130616}, {0.130616, 0.130616}, {0.123461, 0.123461}, {0.123259, 0.123259}, + {0.130971, 0.130971}, {0.143719, 0.143719}, {0.158184, 0.158184}, {0.158184, 0.158184}, + {0.143719, 0.143719}, {0.120865, 0.120865}, {0.0937547, 0.0937547}, {0.0609987, 0.0609987}, + {0.0444566, 0.0444566}, {0.0609987, 0.0609987}, {0.0937547, 0.0937547}, {0.120865, 0.120865}, + {0.143719, 0.143719}, {0.157706, 0.157706}, {0.15914, 0.15914}, {0.157706, 0.157706}, + {0.111154, 0.111154}, {0.0443525, 0.0443525}, {-0.02972, -0.02972}, {-0.0845755, -0.0845755}, + {-0.0845755, -0.0845755}, {-0.02972, -0.02972}, {0.0443525, 0.0443525}, {0.111154, 0.111154}, + {0.158184, 0.158184}, {0.15914, 0.15914}, {0.15914, 0.15914}, {0.158184, 0.158184}, + {0.0132163, 0.0132163}, {-0.120705, -0.120705}, {-0.274405, -0.274405}, {-0.340655, -0.340655}, + {-0.274405, -0.274405}, {-0.120705, -0.120705}, {0.0132163, 0.0132163}, {0.109412, 0.109412}, + {0.158184, 0.158184}, {0.157706, 0.157706}, {0.158184, 0.158184}, {0.109412, 0.109412}, + {-0.427844, -0.427844}, {-0.875722, -0.875722}, {-1.0933, -1.0933}, {-0.875722, -0.875722}, + {-0.427844, -0.427844}, {-0.105947, -0.105947}, {0.0744409, 0.0744409}, {0.143719, 0.143719}, + {0.137941, 0.137941}, {0.143719, 0.143719}, {0.0744409, 0.0744409}, {-0.105947, -0.105947}, + {-0.875722, -0.875722}, {-1.30653, -1.30653}, {-1.30653, -1.30653}, {-0.875722, -0.875722}, + {-0.347014, -0.347014}, {-0.0369426, -0.0369426}, {0.108692, 0.108692}, {0.130971, 0.130971}, + {0.130971, 0.130971}, {0.108692, 0.108692}, {-0.0369426, -0.0369426}, {-0.347014, -0.347014}, + {-1.0933, -1.0933}, {-1.30653, -1.30653}, {-1.0933, -1.0933}, {-0.574855, -0.574855}, + {-0.152598, -0.152598}, {0.0521328, 0.0521328}, {0.123694, 0.123694}, {0.123259, 0.123259}, + {0.123694, 0.123694}, {0.0521328, 0.0521328}, {-0.152598, -0.152598}, {-0.574855, -0.574855}, + {-0.875722, -0.875722}, {-0.875722, -0.875722}, {-0.574855, -0.574855}, {-0.199608, -0.199608}, + {0.0157278, 0.0157278}, {0.112758, 0.112758}, {0.123461, 0.123461}, {0.123461, 0.123461}, + {0.112758, 0.112758}, {0.0157278, 0.0157278}, {-0.199608, -0.199608}, {-0.574855, -0.574855}, + {-0.427844, -0.427844}, {-0.347014, -0.347014}, {-0.152598, -0.152598}, {0.0157278, 0.0157278}, + {0.110993, 0.110993}, {0.130616, 0.130616}, {0.117799, 0.117799}, {0.130616, 0.130616}, + {0.110993, 0.110993}, {0.0157278, 0.0157278}, {-0.152598, -0.152598}, {-0.347014, -0.347014}, + {-0.105947, -0.105947}, {-0.0369426, -0.0369426}, {0.0521328, 0.0521328}, {0.112758, 0.112758}, + {0.130616, 0.130616}, {0.113086, 0.113086}, {0.113086, 0.113086}, {0.130616, 0.130616}, + {0.112758, 0.112758}, {0.0521328, 0.0521328}, {-0.0369426, -0.0369426}, {-0.105947, -0.105947}, + {0.0744409, 0.0744409}, {0.108692, 0.108692}, {0.123694, 0.123694}, {0.123461, 0.123461}, + {0.117799, 0.117799}, {0.113086, 0.113086}, {0.117799, 0.117799}, {0.123461, 0.123461}, + {0.123694, 0.123694}, {0.108692, 0.108692}, {0.0744409, 0.0744409}, {0.0548487, 0.0548487}, + {0.143719, 0.143719}, {0.130971, 0.130971}, {0.123259, 0.123259}, {0.123461, 0.123461}, + {0.130616, 0.130616}, {0.130616, 0.130616}, {0.123461, 0.123461}, {0.123259, 0.123259}, + {0.130971, 0.130971}, {0.143719, 0.143719}, {0.158184, 0.158184}, {0.158184, 0.158184}, + {0.137941, 0.137941}, {0.130971, 0.130971}, {0.123694, 0.123694}, {0.112758, 0.112758}, + {0.110993, 0.110993}, {0.112758, 0.112758}, {0.123694, 0.123694}, {0.130971, 0.130971}, + {0.137941, 0.137941}, {0.168113, 0.168113}, {0.192364, 0.192364}, {0.168113, 0.168113}, + {0.143719, 0.143719}, {0.108692, 0.108692}, {0.0521328, 0.0521328}, {0.0157278, 0.0157278}, + {0.0157278, 0.0157278}, {0.0521328, 0.0521328}, {0.108692, 0.108692}, {0.143719, 0.143719}, + {0.168113, 0.168113}, {0.188081, 0.188081}, {0.188081, 0.188081}, {0.168113, 0.168113}, + {0.0744409, 0.0744409}, {-0.0369426, -0.0369426}, {-0.152598, -0.152598}, {-0.199608, -0.199608}, + {-0.152598, -0.152598}, {-0.0369426, -0.0369426}, {0.0744409, 0.0744409}, {0.158184, 0.158184}, + {0.192364, 0.192364}, {0.188081, 0.188081}, {0.192364, 0.192364}, {0.158184, 0.158184}, + {-0.105947, -0.105947}, {-0.347014, -0.347014}, {-0.574855, -0.574855}, {-0.574855, -0.574855}, + {-0.347014, -0.347014}, {-0.105947, -0.105947}, {0.0548487, 0.0548487}, {0.158184, 0.158184}, + {0.168113, 0.168113}, {0.168113, 0.168113}, {0.158184, 0.158184}, {0.0548487, 0.0548487}, + {-1.51808, -1.51808}, {-2.4828, -2.4828}, {-2.4828, -2.4828}, {-1.51808, -1.51808}, + {-0.618499, -0.618499}, {-0.0832459, -0.0832459}, {0.114396, 0.114396}, {0.143719, 0.143719}, + {0.143719, 0.143719}, {0.114396, 0.114396}, {-0.0832459, -0.0832459}, {-0.618499, -0.618499}, + {-2.4828, -2.4828}, {-3.21636, -3.21636}, {-2.4828, -2.4828}, {-1.2319, -1.2319}, + {-0.386005, -0.386005}, {0.0106435, 0.0106435}, {0.108692, 0.108692}, {0.120865, 0.120865}, + {0.108692, 0.108692}, {0.0106435, 0.0106435}, {-0.386005, -0.386005}, {-1.2319, -1.2319}, + {-2.4828, -2.4828}, {-2.4828, -2.4828}, {-1.56806, -1.56806}, {-0.653268, -0.653268}, + {-0.122002, -0.122002}, {0.0521328, 0.0521328}, {0.0937547, 0.0937547}, {0.0937547, 0.0937547}, + {0.0521328, 0.0521328}, {-0.122002, -0.122002}, {-0.653268, -0.653268}, {-1.56806, -1.56806}, + {-1.51808, -1.51808}, {-1.2319, -1.2319}, {-0.653268, -0.653268}, {-0.176834, -0.176834}, + {0.0157278, 0.0157278}, {0.0609987, 0.0609987}, {0.0776152, 0.0776152}, {0.0609987, 0.0609987}, + {0.0157278, 0.0157278}, {-0.176834, -0.176834}, {-0.653268, -0.653268}, {-1.2319, -1.2319}, + {-0.618499, -0.618499}, {-0.386005, -0.386005}, {-0.122002, -0.122002}, {0.0157278, 0.0157278}, + {0.0444566, 0.0444566}, {0.0554104, 0.0554104}, {0.0554104, 0.0554104}, {0.0444566, 0.0444566}, + {0.0157278, 0.0157278}, {-0.122002, -0.122002}, {-0.386005, -0.386005}, {-0.618499, -0.618499}, + {-0.0832459, -0.0832459}, {0.0106435, 0.0106435}, {0.0521328, 0.0521328}, {0.0609987, 0.0609987}, + {0.0554104, 0.0554104}, {0.0503, 0.0503}, {0.0554104, 0.0554104}, {0.0609987, 0.0609987}, + {0.0521328, 0.0521328}, {0.0106435, 0.0106435}, {-0.0832459, -0.0832459}, {-0.14564, -0.14564}, + {0.114396, 0.114396}, {0.108692, 0.108692}, {0.0937547, 0.0937547}, {0.0776152, 0.0776152}, + {0.0554104, 0.0554104}, {0.0554104, 0.0554104}, {0.0776152, 0.0776152}, {0.0937547, 0.0937547}, + {0.108692, 0.108692}, {0.114396, 0.114396}, {0.092208, 0.092208}, {0.092208, 0.092208}, + {0.143719, 0.143719}, {0.120865, 0.120865}, {0.0937547, 0.0937547}, {0.0609987, 0.0609987}, + {0.0444566, 0.0444566}, {0.0609987, 0.0609987}, {0.0937547, 0.0937547}, {0.120865, 0.120865}, + {0.143719, 0.143719}, {0.157706, 0.157706}, {0.15914, 0.15914}, {0.157706, 0.157706}, + {0.143719, 0.143719}, {0.108692, 0.108692}, {0.0521328, 0.0521328}, {0.0157278, 0.0157278}, + {0.0157278, 0.0157278}, {0.0521328, 0.0521328}, {0.108692, 0.108692}, {0.143719, 0.143719}, + {0.168113, 0.168113}, {0.188081, 0.188081}, {0.188081, 0.188081}, {0.168113, 0.168113}, + {0.114396, 0.114396}, {0.0106435, 0.0106435}, {-0.122002, -0.122002}, {-0.176834, -0.176834}, + {-0.122002, -0.122002}, {0.0106435, 0.0106435}, {0.114396, 0.114396}, {0.157706, 0.157706}, + {0.188081, 0.188081}, {0.204473, 0.204473}, {0.188081, 0.188081}, {0.157706, 0.157706}, + {-0.0832459, -0.0832459}, {-0.386005, -0.386005}, {-0.653268, -0.653268}, {-0.653268, -0.653268}, + {-0.386005, -0.386005}, {-0.0832459, -0.0832459}, {0.092208, 0.092208}, {0.15914, 0.15914}, + {0.188081, 0.188081}, {0.188081, 0.188081}, {0.15914, 0.15914}, {0.092208, 0.092208}, + {-0.618499, -0.618499}, {-1.2319, -1.2319}, {-1.56806, -1.56806}, {-1.2319, -1.2319}, + {-0.618499, -0.618499}, {-0.14564, -0.14564}, {0.092208, 0.092208}, {0.157706, 0.157706}, + {0.168113, 0.168113}, {0.157706, 0.157706}, {0.092208, 0.092208}, {-0.14564, -0.14564}, + {-5.63064, -5.63064}, {-7.81799, -7.81799}, {-5.63064, -5.63064}, {-2.34151, -2.34151}, + {-0.713398, -0.713398}, {-0.0832459, -0.0832459}, {0.0744409, 0.0744409}, {0.111154, 0.111154}, + {0.0744409, 0.0744409}, {-0.0832459, -0.0832459}, {-0.713398, -0.713398}, {-2.34151, -2.34151}, + {-7.81799, -7.81799}, {-7.81799, -7.81799}, {-4.12343, -4.12343}, {-1.44876, -1.44876}, + {-0.386005, -0.386005}, {-0.0369426, -0.0369426}, {0.0443525, 0.0443525}, {0.0443525, 0.0443525}, + {-0.0369426, -0.0369426}, {-0.386005, -0.386005}, {-1.44876, -1.44876}, {-4.12343, -4.12343}, + {-5.63064, -5.63064}, {-4.12343, -4.12343}, {-1.85966, -1.85966}, {-0.653268, -0.653268}, + {-0.152598, -0.152598}, {-0.02972, -0.02972}, {0.00680462, 0.00680462}, {-0.02972, -0.02972}, + {-0.152598, -0.152598}, {-0.653268, -0.653268}, {-1.85966, -1.85966}, {-4.12343, -4.12343}, + {-2.34151, -2.34151}, {-1.44876, -1.44876}, {-0.653268, -0.653268}, {-0.199608, -0.199608}, + {-0.0845755, -0.0845755}, {-0.0454612, -0.0454612}, {-0.0454612, -0.0454612}, {-0.0845755, -0.0845755}, + {-0.199608, -0.199608}, {-0.653268, -0.653268}, {-1.44876, -1.44876}, {-2.34151, -2.34151}, + {-0.713398, -0.713398}, {-0.386005, -0.386005}, {-0.152598, -0.152598}, {-0.0845755, -0.0845755}, + {-0.0759324, -0.0759324}, {-0.0634587, -0.0634587}, {-0.0759324, -0.0759324}, {-0.0845755, -0.0845755}, + {-0.152598, -0.152598}, {-0.386005, -0.386005}, {-0.713398, -0.713398}, {-0.896542, -0.896542}, + {-0.0832459, -0.0832459}, {-0.0369426, -0.0369426}, {-0.02972, -0.02972}, {-0.0454612, -0.0454612}, + {-0.0634587, -0.0634587}, {-0.0634587, -0.0634587}, {-0.0454612, -0.0454612}, {-0.02972, -0.02972}, + {-0.0369426, -0.0369426}, {-0.0832459, -0.0832459}, {-0.147282, -0.147282}, {-0.147282, -0.147282}, + {0.0744409, 0.0744409}, {0.0443525, 0.0443525}, {0.00680462, 0.00680462}, {-0.0454612, -0.0454612}, + {-0.0759324, -0.0759324}, {-0.0454612, -0.0454612}, {0.00680462, 0.00680462}, {0.0443525, 0.0443525}, + {0.0744409, 0.0744409}, {0.092208, 0.092208}, {0.0947446, 0.0947446}, {0.092208, 0.092208}, + {0.111154, 0.111154}, {0.0443525, 0.0443525}, {-0.02972, -0.02972}, {-0.0845755, -0.0845755}, + {-0.0845755, -0.0845755}, {-0.02972, -0.02972}, {0.0443525, 0.0443525}, {0.111154, 0.111154}, + {0.158184, 0.158184}, {0.15914, 0.15914}, {0.15914, 0.15914}, {0.158184, 0.158184}, + {0.0744409, 0.0744409}, {-0.0369426, -0.0369426}, {-0.152598, -0.152598}, {-0.199608, -0.199608}, + {-0.152598, -0.152598}, {-0.0369426, -0.0369426}, {0.0744409, 0.0744409}, {0.158184, 0.158184}, + {0.192364, 0.192364}, {0.188081, 0.188081}, {0.192364, 0.192364}, {0.158184, 0.158184}, + {-0.0832459, -0.0832459}, {-0.386005, -0.386005}, {-0.653268, -0.653268}, {-0.653268, -0.653268}, + {-0.386005, -0.386005}, {-0.0832459, -0.0832459}, {0.092208, 0.092208}, {0.15914, 0.15914}, + {0.188081, 0.188081}, {0.188081, 0.188081}, {0.15914, 0.15914}, {0.092208, 0.092208}, + {-0.713398, -0.713398}, {-1.44876, -1.44876}, {-1.85966, -1.85966}, {-1.44876, -1.44876}, + {-0.713398, -0.713398}, {-0.147282, -0.147282}, {0.0947446, 0.0947446}, {0.15914, 0.15914}, + {0.192364, 0.192364}, {0.15914, 0.15914}, {0.0947446, 0.0947446}, {-0.147282, -0.147282}, + {-2.34151, -2.34151}, {-4.12343, -4.12343}, {-4.12343, -4.12343}, {-2.34151, -2.34151}, + {-0.896542, -0.896542}, {-0.147282, -0.147282}, {0.092208, 0.092208}, {0.158184, 0.158184}, + {0.158184, 0.158184}, {0.092208, 0.092208}, {-0.147282, -0.147282}, {-0.896542, -0.896542}, + {-15.3194, -15.3194}, {-15.3194, -15.3194}, {-7.75282, -7.75282}, {-2.34151, -2.34151}, + {-0.618499, -0.618499}, {-0.105947, -0.105947}, {0.0132163, 0.0132163}, {0.0132163, 0.0132163}, + {-0.105947, -0.105947}, {-0.618499, -0.618499}, {-2.34151, -2.34151}, {-7.75282, -7.75282}, + {-15.3194, -15.3194}, {-10.8749, -10.8749}, {-4.12343, -4.12343}, {-1.2319, -1.2319}, + {-0.347014, -0.347014}, {-0.120705, -0.120705}, {-0.0762117, -0.0762117}, {-0.120705, -0.120705}, + {-0.347014, -0.347014}, {-1.2319, -1.2319}, {-4.12343, -4.12343}, {-10.8749, -10.8749}, + {-7.75282, -7.75282}, {-4.12343, -4.12343}, {-1.56806, -1.56806}, {-0.574855, -0.574855}, + {-0.274405, -0.274405}, {-0.20641, -0.20641}, {-0.20641, -0.20641}, {-0.274405, -0.274405}, + {-0.574855, -0.574855}, {-1.56806, -1.56806}, {-4.12343, -4.12343}, {-7.75282, -7.75282}, + {-2.34151, -2.34151}, {-1.2319, -1.2319}, {-0.574855, -0.574855}, {-0.340655, -0.340655}, + {-0.313913, -0.313913}, {-0.292461, -0.292461}, {-0.313913, -0.313913}, {-0.340655, -0.340655}, + {-0.574855, -0.574855}, {-1.2319, -1.2319}, {-2.34151, -2.34151}, {-3.06152, -3.06152}, + {-0.618499, -0.618499}, {-0.347014, -0.347014}, {-0.274405, -0.274405}, {-0.313913, -0.313913}, + {-0.334222, -0.334222}, {-0.334222, -0.334222}, {-0.313913, -0.313913}, {-0.274405, -0.274405}, + {-0.347014, -0.347014}, {-0.618499, -0.618499}, {-0.896542, -0.896542}, {-0.896542, -0.896542}, + {-0.105947, -0.105947}, {-0.120705, -0.120705}, {-0.20641, -0.20641}, {-0.292461, -0.292461}, + {-0.334222, -0.334222}, {-0.292461, -0.292461}, {-0.20641, -0.20641}, {-0.120705, -0.120705}, + {-0.105947, -0.105947}, {-0.14564, -0.14564}, {-0.147282, -0.147282}, {-0.14564, -0.14564}, + {0.0132163, 0.0132163}, {-0.0762117, -0.0762117}, {-0.20641, -0.20641}, {-0.313913, -0.313913}, + {-0.313913, -0.313913}, {-0.20641, -0.20641}, {-0.0762117, -0.0762117}, {0.0132163, 0.0132163}, + {0.0548487, 0.0548487}, {0.092208, 0.092208}, {0.092208, 0.092208}, {0.0548487, 0.0548487}, + {0.0132163, 0.0132163}, {-0.120705, -0.120705}, {-0.274405, -0.274405}, {-0.340655, -0.340655}, + {-0.274405, -0.274405}, {-0.120705, -0.120705}, {0.0132163, 0.0132163}, {0.109412, 0.109412}, + {0.158184, 0.158184}, {0.157706, 0.157706}, {0.158184, 0.158184}, {0.109412, 0.109412}, + {-0.105947, -0.105947}, {-0.347014, -0.347014}, {-0.574855, -0.574855}, {-0.574855, -0.574855}, + {-0.347014, -0.347014}, {-0.105947, -0.105947}, {0.0548487, 0.0548487}, {0.158184, 0.158184}, + {0.168113, 0.168113}, {0.168113, 0.168113}, {0.158184, 0.158184}, {0.0548487, 0.0548487}, + {-0.618499, -0.618499}, {-1.2319, -1.2319}, {-1.56806, -1.56806}, {-1.2319, -1.2319}, + {-0.618499, -0.618499}, {-0.14564, -0.14564}, {0.092208, 0.092208}, {0.157706, 0.157706}, + {0.168113, 0.168113}, {0.157706, 0.157706}, {0.092208, 0.092208}, {-0.14564, -0.14564}, + {-2.34151, -2.34151}, {-4.12343, -4.12343}, {-4.12343, -4.12343}, {-2.34151, -2.34151}, + {-0.896542, -0.896542}, {-0.147282, -0.147282}, {0.092208, 0.092208}, {0.158184, 0.158184}, + {0.158184, 0.158184}, {0.092208, 0.092208}, {-0.147282, -0.147282}, {-0.896542, -0.896542}, + {-7.75282, -7.75282}, {-10.8749, -10.8749}, {-7.75282, -7.75282}, {-3.06152, -3.06152}, + {-0.896542, -0.896542}, {-0.14564, -0.14564}, {0.0548487, 0.0548487}, {0.109412, 0.109412}, + {0.0548487, 0.0548487}, {-0.14564, -0.14564}, {-0.896542, -0.896542}, {-3.06152, -3.06152}}; - std::vector> out_spin = { - {1.52931, 1.52931}, {1.53938, 1.53938}, {1.51591, 1.51591}, {1.36325, 1.36325}, {1.07132, 1.07132}, {0.769316, 0.769316}, {0.640116, 0.640116}, {0.769316, 0.769316}, {1.07132, 1.07132}, {1.36325, 1.36325}, {1.51591, 1.51591}, {1.53938, 1.53938}, {1.53938, 1.53938}, {1.53175, 1.53175}, {1.4377, 1.4377}, {1.20157, 1.20157}, {0.88663, 0.88663}, {0.658122, 0.658122}, {0.658122, 0.658122}, {0.88663, 0.88663}, {1.20157, 1.20157}, {1.4377, 1.4377}, {1.53175, 1.53175}, {1.53938, 1.53938}, {1.51591, 1.51591}, {1.4377, 1.4377}, {1.2482, 1.2482}, {0.963245, 0.963245}, {0.694133, 0.694133}, {0.582843, 0.582843}, {0.694133, 0.694133}, {0.963245, 0.963245}, {1.2482, 1.2482}, {1.4377, 1.4377}, {1.51591, 1.51591}, {1.53175, 1.53175}, {1.36325, 1.36325}, {1.20157, 1.20157}, {0.963245, 0.963245}, {0.712138, 0.712138}, {0.548264, 0.548264}, {0.548264, 0.548264}, {0.712138, 0.712138}, {0.963245, 0.963245}, {1.20157, 1.20157}, {1.36325, 1.36325}, {1.4377, 1.4377}, {1.4377, 1.4377}, {1.07132, 1.07132}, {0.88663, 0.88663}, {0.694133, 0.694133}, {0.548264, 0.548264}, {0.493826, 0.493826}, {0.548264, 0.548264}, {0.694133, 0.694133}, {0.88663, 0.88663}, {1.07132, 1.07132}, {1.20157, 1.20157}, {1.2482, 1.2482}, {1.20157, 1.20157}, {0.769316, 0.769316}, {0.658122, 0.658122}, {0.582843, 0.582843}, {0.548264, 0.548264}, {0.548264, 0.548264}, {0.582843, 0.582843}, {0.658122, 0.658122}, {0.769316, 0.769316}, {0.88663, 0.88663}, {0.963245, 0.963245}, {0.963245, 0.963245}, {0.88663, 0.88663}, {0.640116, 0.640116}, {0.658122, 0.658122}, {0.694133, 0.694133}, {0.712138, 0.712138}, {0.694133, 0.694133}, {0.658122, 0.658122}, {0.640116, 0.640116}, {0.658122, 0.658122}, {0.694133, 0.694133}, {0.712138, 0.712138}, {0.694133, 0.694133}, {0.658122, 0.658122}, {0.769316, 0.769316}, {0.88663, 0.88663}, {0.963245, 0.963245}, {0.963245, 0.963245}, {0.88663, 0.88663}, {0.769316, 0.769316}, {0.658122, 0.658122}, {0.582843, 0.582843}, {0.548264, 0.548264}, {0.548264, 0.548264}, {0.582843, 0.582843}, {0.658122, 0.658122}, {1.07132, 1.07132}, {1.20157, 1.20157}, {1.2482, 1.2482}, {1.20157, 1.20157}, {1.07132, 1.07132}, {0.88663, 0.88663}, {0.694133, 0.694133}, {0.548264, 0.548264}, {0.493826, 0.493826}, {0.548264, 0.548264}, {0.694133, 0.694133}, {0.88663, 0.88663}, {1.36325, 1.36325}, {1.4377, 1.4377}, {1.4377, 1.4377}, {1.36325, 1.36325}, {1.20157, 1.20157}, {0.963245, 0.963245}, {0.712138, 0.712138}, {0.548264, 0.548264}, {0.548264, 0.548264}, {0.712138, 0.712138}, {0.963245, 0.963245}, {1.20157, 1.20157}, {1.51591, 1.51591}, {1.53175, 1.53175}, {1.51591, 1.51591}, {1.4377, 1.4377}, {1.2482, 1.2482}, {0.963245, 0.963245}, {0.694133, 0.694133}, {0.582843, 0.582843}, {0.694133, 0.694133}, {0.963245, 0.963245}, {1.2482, 1.2482}, {1.4377, 1.4377}, {1.53938, 1.53938}, {1.53938, 1.53938}, {1.53175, 1.53175}, {1.4377, 1.4377}, {1.20157, 1.20157}, {0.88663, 0.88663}, {0.658122, 0.658122}, {0.658122, 0.658122}, {0.88663, 0.88663}, {1.20157, 1.20157}, {1.4377, 1.4377}, {1.53175, 1.53175}, {1.53938, 1.53938}, {1.53175, 1.53175}, {1.4377, 1.4377}, {1.20157, 1.20157}, {0.88663, 0.88663}, {0.658122, 0.658122}, {0.658122, 0.658122}, {0.88663, 0.88663}, {1.20157, 1.20157}, {1.4377, 1.4377}, {1.53175, 1.53175}, {1.53938, 1.53938}, {1.53175, 1.53175}, {1.46763, 1.46763}, {1.28874, 1.28874}, {1.00443, 1.00443}, {0.729468, 0.729468}, {0.6147, 0.6147}, {0.729468, 0.729468}, {1.00443, 1.00443}, {1.28874, 1.28874}, {1.46763, 1.46763}, {1.53175, 1.53175}, {1.5411, 1.5411}, {1.4377, 1.4377}, {1.28874, 1.28874}, {1.04938, 1.04938}, {0.783757, 0.783757}, {0.605743, 0.605743}, {0.605743, 0.605743}, {0.783757, 0.783757}, {1.04938, 1.04938}, {1.28874, 1.28874}, {1.4377, 1.4377}, {1.49905, 1.49905}, {1.49905, 1.49905}, {1.20157, 1.20157}, {1.00443, 1.00443}, {0.783757, 0.783757}, {0.607289, 0.607289}, {0.539544, 0.539544}, {0.607289, 0.607289}, {0.783757, 0.783757}, {1.00443, 1.00443}, {1.20157, 1.20157}, {1.33096, 1.33096}, {1.37517, 1.37517}, {1.33096, 1.33096}, {0.88663, 0.88663}, {0.729468, 0.729468}, {0.605743, 0.605743}, {0.539544, 0.539544}, {0.539544, 0.539544}, {0.605743, 0.605743}, {0.729468, 0.729468}, {0.88663, 0.88663}, {1.03512, 1.03512}, {1.12608, 1.12608}, {1.12608, 1.12608}, {1.03512, 1.03512}, {0.658122, 0.658122}, {0.6147, 0.6147}, {0.605743, 0.605743}, {0.607289, 0.607289}, {0.605743, 0.605743}, {0.6147, 0.6147}, {0.658122, 0.658122}, {0.737555, 0.737555}, {0.818533, 0.818533}, {0.852998, 0.852998}, {0.818533, 0.818533}, {0.737555, 0.737555}, {0.658122, 0.658122}, {0.729468, 0.729468}, {0.783757, 0.783757}, {0.783757, 0.783757}, {0.729468, 0.729468}, {0.658122, 0.658122}, {0.611522, 0.611522}, {0.602155, 0.602155}, {0.609844, 0.609844}, {0.609844, 0.609844}, {0.602155, 0.602155}, {0.611522, 0.611522}, {0.88663, 0.88663}, {1.00443, 1.00443}, {1.04938, 1.04938}, {1.00443, 1.00443}, {0.88663, 0.88663}, {0.737555, 0.737555}, {0.602155, 0.602155}, {0.511705, 0.511705}, {0.480431, 0.480431}, {0.511705, 0.511705}, {0.602155, 0.602155}, {0.737555, 0.737555}, {1.20157, 1.20157}, {1.28874, 1.28874}, {1.28874, 1.28874}, {1.20157, 1.20157}, {1.03512, 1.03512}, {0.818533, 0.818533}, {0.609844, 0.609844}, {0.480431, 0.480431}, {0.480431, 0.480431}, {0.609844, 0.609844}, {0.818533, 0.818533}, {1.03512, 1.03512}, {1.4377, 1.4377}, {1.46763, 1.46763}, {1.4377, 1.4377}, {1.33096, 1.33096}, {1.12608, 1.12608}, {0.852998, 0.852998}, {0.609844, 0.609844}, {0.511705, 0.511705}, {0.609844, 0.609844}, {0.852998, 0.852998}, {1.12608, 1.12608}, {1.33096, 1.33096}, {1.53175, 1.53175}, {1.53175, 1.53175}, {1.49905, 1.49905}, {1.37517, 1.37517}, {1.12608, 1.12608}, {0.818533, 0.818533}, {0.602155, 0.602155}, {0.602155, 0.602155}, {0.818533, 0.818533}, {1.12608, 1.12608}, {1.37517, 1.37517}, {1.49905, 1.49905}, {1.53938, 1.53938}, {1.5411, 1.5411}, {1.49905, 1.49905}, {1.33096, 1.33096}, {1.03512, 1.03512}, {0.737555, 0.737555}, {0.611522, 0.611522}, {0.737555, 0.737555}, {1.03512, 1.03512}, {1.33096, 1.33096}, {1.49905, 1.49905}, {1.5411, 1.5411}, {1.51591, 1.51591}, {1.4377, 1.4377}, {1.2482, 1.2482}, {0.963245, 0.963245}, {0.694133, 0.694133}, {0.582843, 0.582843}, {0.694133, 0.694133}, {0.963245, 0.963245}, {1.2482, 1.2482}, {1.4377, 1.4377}, {1.51591, 1.51591}, {1.53175, 1.53175}, {1.4377, 1.4377}, {1.28874, 1.28874}, {1.04938, 1.04938}, {0.783757, 0.783757}, {0.605743, 0.605743}, {0.605743, 0.605743}, {0.783757, 0.783757}, {1.04938, 1.04938}, {1.28874, 1.28874}, {1.4377, 1.4377}, {1.49905, 1.49905}, {1.49905, 1.49905}, {1.2482, 1.2482}, {1.04938, 1.04938}, {0.821272, 0.821272}, {0.635712, 0.635712}, {0.563868, 0.563868}, {0.635712, 0.635712}, {0.821272, 0.821272}, {1.04938, 1.04938}, {1.2482, 1.2482}, {1.37517, 1.37517}, {1.41772, 1.41772}, {1.37517, 1.37517}, {0.963245, 0.963245}, {0.783757, 0.783757}, {0.635712, 0.635712}, {0.553365, 0.553365}, {0.553365, 0.553365}, {0.635712, 0.635712}, {0.783757, 0.783757}, {0.963245, 0.963245}, {1.12608, 1.12608}, {1.22322, 1.22322}, {1.22322, 1.22322}, {1.12608, 1.12608}, {0.694133, 0.694133}, {0.605743, 0.605743}, {0.563868, 0.563868}, {0.553365, 0.553365}, {0.563868, 0.563868}, {0.605743, 0.605743}, {0.694133, 0.694133}, {0.818533, 0.818533}, {0.932431, 0.932431}, {0.978945, 0.978945}, {0.932431, 0.932431}, {0.818533, 0.818533}, {0.582843, 0.582843}, {0.605743, 0.605743}, {0.635712, 0.635712}, {0.635712, 0.635712}, {0.605743, 0.605743}, {0.582843, 0.582843}, {0.602155, 0.602155}, {0.658503, 0.658503}, {0.707784, 0.707784}, {0.707784, 0.707784}, {0.658503, 0.658503}, {0.602155, 0.602155}, {0.694133, 0.694133}, {0.783757, 0.783757}, {0.821272, 0.821272}, {0.783757, 0.783757}, {0.694133, 0.694133}, {0.602155, 0.602155}, {0.545337, 0.545337}, {0.526036, 0.526036}, {0.523682, 0.523682}, {0.526036, 0.526036}, {0.545337, 0.545337}, {0.602155, 0.602155}, {0.963245, 0.963245}, {1.04938, 1.04938}, {1.04938, 1.04938}, {0.963245, 0.963245}, {0.818533, 0.818533}, {0.658503, 0.658503}, {0.526036, 0.526036}, {0.452143, 0.452143}, {0.452143, 0.452143}, {0.526036, 0.526036}, {0.658503, 0.658503}, {0.818533, 0.818533}, {1.2482, 1.2482}, {1.28874, 1.28874}, {1.2482, 1.2482}, {1.12608, 1.12608}, {0.932431, 0.932431}, {0.707784, 0.707784}, {0.523682, 0.523682}, {0.452143, 0.452143}, {0.523682, 0.523682}, {0.707784, 0.707784}, {0.932431, 0.932431}, {1.12608, 1.12608}, {1.4377, 1.4377}, {1.4377, 1.4377}, {1.37517, 1.37517}, {1.22322, 1.22322}, {0.978945, 0.978945}, {0.707784, 0.707784}, {0.526036, 0.526036}, {0.526036, 0.526036}, {0.707784, 0.707784}, {0.978945, 0.978945}, {1.22322, 1.22322}, {1.37517, 1.37517}, {1.51591, 1.51591}, {1.49905, 1.49905}, {1.41772, 1.41772}, {1.22322, 1.22322}, {0.932431, 0.932431}, {0.658503, 0.658503}, {0.545337, 0.545337}, {0.658503, 0.658503}, {0.932431, 0.932431}, {1.22322, 1.22322}, {1.41772, 1.41772}, {1.49905, 1.49905}, {1.53175, 1.53175}, {1.49905, 1.49905}, {1.37517, 1.37517}, {1.12608, 1.12608}, {0.818533, 0.818533}, {0.602155, 0.602155}, {0.602155, 0.602155}, {0.818533, 0.818533}, {1.12608, 1.12608}, {1.37517, 1.37517}, {1.49905, 1.49905}, {1.53175, 1.53175}, {1.36325, 1.36325}, {1.20157, 1.20157}, {0.963245, 0.963245}, {0.712138, 0.712138}, {0.548264, 0.548264}, {0.548264, 0.548264}, {0.712138, 0.712138}, {0.963245, 0.963245}, {1.20157, 1.20157}, {1.36325, 1.36325}, {1.4377, 1.4377}, {1.4377, 1.4377}, {1.20157, 1.20157}, {1.00443, 1.00443}, {0.783757, 0.783757}, {0.607289, 0.607289}, {0.539544, 0.539544}, {0.607289, 0.607289}, {0.783757, 0.783757}, {1.00443, 1.00443}, {1.20157, 1.20157}, {1.33096, 1.33096}, {1.37517, 1.37517}, {1.33096, 1.33096}, {0.963245, 0.963245}, {0.783757, 0.783757}, {0.635712, 0.635712}, {0.553365, 0.553365}, {0.553365, 0.553365}, {0.635712, 0.635712}, {0.783757, 0.783757}, {0.963245, 0.963245}, {1.12608, 1.12608}, {1.22322, 1.22322}, {1.22322, 1.22322}, {1.12608, 1.12608}, {0.712138, 0.712138}, {0.607289, 0.607289}, {0.553365, 0.553365}, {0.538451, 0.538451}, {0.553365, 0.553365}, {0.607289, 0.607289}, {0.712138, 0.712138}, {0.852998, 0.852998}, {0.978945, 0.978945}, {1.02987, 1.02987}, {0.978945, 0.978945}, {0.852998, 0.852998}, {0.548264, 0.548264}, {0.539544, 0.539544}, {0.553365, 0.553365}, {0.553365, 0.553365}, {0.539544, 0.539544}, {0.548264, 0.548264}, {0.609844, 0.609844}, {0.707784, 0.707784}, {0.783184, 0.783184}, {0.783184, 0.783184}, {0.707784, 0.707784}, {0.609844, 0.609844}, {0.548264, 0.548264}, {0.607289, 0.607289}, {0.635712, 0.635712}, {0.607289, 0.607289}, {0.548264, 0.548264}, {0.511705, 0.511705}, {0.526036, 0.526036}, {0.568789, 0.568789}, {0.591256, 0.591256}, {0.568789, 0.568789}, {0.526036, 0.526036}, {0.511705, 0.511705}, {0.712138, 0.712138}, {0.783757, 0.783757}, {0.783757, 0.783757}, {0.712138, 0.712138}, {0.609844, 0.609844}, {0.526036, 0.526036}, {0.483171, 0.483171}, {0.470981, 0.470981}, {0.470981, 0.470981}, {0.483171, 0.483171}, {0.526036, 0.526036}, {0.609844, 0.609844}, {0.963245, 0.963245}, {1.00443, 1.00443}, {0.963245, 0.963245}, {0.852998, 0.852998}, {0.707784, 0.707784}, {0.568789, 0.568789}, {0.470981, 0.470981}, {0.436014, 0.436014}, {0.470981, 0.470981}, {0.568789, 0.568789}, {0.707784, 0.707784}, {0.852998, 0.852998}, {1.20157, 1.20157}, {1.20157, 1.20157}, {1.12608, 1.12608}, {0.978945, 0.978945}, {0.783184, 0.783184}, {0.591256, 0.591256}, {0.470981, 0.470981}, {0.470981, 0.470981}, {0.591256, 0.591256}, {0.783184, 0.783184}, {0.978945, 0.978945}, {1.12608, 1.12608}, {1.36325, 1.36325}, {1.33096, 1.33096}, {1.22322, 1.22322}, {1.02987, 1.02987}, {0.783184, 0.783184}, {0.568789, 0.568789}, {0.483171, 0.483171}, {0.568789, 0.568789}, {0.783184, 0.783184}, {1.02987, 1.02987}, {1.22322, 1.22322}, {1.33096, 1.33096}, {1.4377, 1.4377}, {1.37517, 1.37517}, {1.22322, 1.22322}, {0.978945, 0.978945}, {0.707784, 0.707784}, {0.526036, 0.526036}, {0.526036, 0.526036}, {0.707784, 0.707784}, {0.978945, 0.978945}, {1.22322, 1.22322}, {1.37517, 1.37517}, {1.4377, 1.4377}, {1.4377, 1.4377}, {1.33096, 1.33096}, {1.12608, 1.12608}, {0.852998, 0.852998}, {0.609844, 0.609844}, {0.511705, 0.511705}, {0.609844, 0.609844}, {0.852998, 0.852998}, {1.12608, 1.12608}, {1.33096, 1.33096}, {1.4377, 1.4377}, {1.46763, 1.46763}, {1.07132, 1.07132}, {0.88663, 0.88663}, {0.694133, 0.694133}, {0.548264, 0.548264}, {0.493826, 0.493826}, {0.548264, 0.548264}, {0.694133, 0.694133}, {0.88663, 0.88663}, {1.07132, 1.07132}, {1.20157, 1.20157}, {1.2482, 1.2482}, {1.20157, 1.20157}, {0.88663, 0.88663}, {0.729468, 0.729468}, {0.605743, 0.605743}, {0.539544, 0.539544}, {0.539544, 0.539544}, {0.605743, 0.605743}, {0.729468, 0.729468}, {0.88663, 0.88663}, {1.03512, 1.03512}, {1.12608, 1.12608}, {1.12608, 1.12608}, {1.03512, 1.03512}, {0.694133, 0.694133}, {0.605743, 0.605743}, {0.563868, 0.563868}, {0.553365, 0.553365}, {0.563868, 0.563868}, {0.605743, 0.605743}, {0.694133, 0.694133}, {0.818533, 0.818533}, {0.932431, 0.932431}, {0.978945, 0.978945}, {0.932431, 0.932431}, {0.818533, 0.818533}, {0.548264, 0.548264}, {0.539544, 0.539544}, {0.553365, 0.553365}, {0.553365, 0.553365}, {0.539544, 0.539544}, {0.548264, 0.548264}, {0.609844, 0.609844}, {0.707784, 0.707784}, {0.783184, 0.783184}, {0.783184, 0.783184}, {0.707784, 0.707784}, {0.609844, 0.609844}, {0.493826, 0.493826}, {0.539544, 0.539544}, {0.563868, 0.563868}, {0.539544, 0.539544}, {0.493826, 0.493826}, {0.480431, 0.480431}, {0.523682, 0.523682}, {0.591256, 0.591256}, {0.623579, 0.623579}, {0.591256, 0.591256}, {0.523682, 0.523682}, {0.480431, 0.480431}, {0.548264, 0.548264}, {0.605743, 0.605743}, {0.605743, 0.605743}, {0.548264, 0.548264}, {0.480431, 0.480431}, {0.452143, 0.452143}, {0.470981, 0.470981}, {0.500173, 0.500173}, {0.500173, 0.500173}, {0.470981, 0.470981}, {0.452143, 0.452143}, {0.480431, 0.480431}, {0.694133, 0.694133}, {0.729468, 0.729468}, {0.694133, 0.694133}, {0.609844, 0.609844}, {0.523682, 0.523682}, {0.470981, 0.470981}, {0.453616, 0.453616}, {0.451742, 0.451742}, {0.453616, 0.453616}, {0.470981, 0.470981}, {0.523682, 0.523682}, {0.609844, 0.609844}, {0.88663, 0.88663}, {0.88663, 0.88663}, {0.818533, 0.818533}, {0.707784, 0.707784}, {0.591256, 0.591256}, {0.500173, 0.500173}, {0.451742, 0.451742}, {0.451742, 0.451742}, {0.500173, 0.500173}, {0.591256, 0.591256}, {0.707784, 0.707784}, {0.818533, 0.818533}, {1.07132, 1.07132}, {1.03512, 1.03512}, {0.932431, 0.932431}, {0.783184, 0.783184}, {0.623579, 0.623579}, {0.500173, 0.500173}, {0.453616, 0.453616}, {0.500173, 0.500173}, {0.623579, 0.623579}, {0.783184, 0.783184}, {0.932431, 0.932431}, {1.03512, 1.03512}, {1.20157, 1.20157}, {1.12608, 1.12608}, {0.978945, 0.978945}, {0.783184, 0.783184}, {0.591256, 0.591256}, {0.470981, 0.470981}, {0.470981, 0.470981}, {0.591256, 0.591256}, {0.783184, 0.783184}, {0.978945, 0.978945}, {1.12608, 1.12608}, {1.20157, 1.20157}, {1.2482, 1.2482}, {1.12608, 1.12608}, {0.932431, 0.932431}, {0.707784, 0.707784}, {0.523682, 0.523682}, {0.452143, 0.452143}, {0.523682, 0.523682}, {0.707784, 0.707784}, {0.932431, 0.932431}, {1.12608, 1.12608}, {1.2482, 1.2482}, {1.28874, 1.28874}, {1.20157, 1.20157}, {1.03512, 1.03512}, {0.818533, 0.818533}, {0.609844, 0.609844}, {0.480431, 0.480431}, {0.480431, 0.480431}, {0.609844, 0.609844}, {0.818533, 0.818533}, {1.03512, 1.03512}, {1.20157, 1.20157}, {1.28874, 1.28874}, {1.28874, 1.28874}, {0.769316, 0.769316}, {0.658122, 0.658122}, {0.582843, 0.582843}, {0.548264, 0.548264}, {0.548264, 0.548264}, {0.582843, 0.582843}, {0.658122, 0.658122}, {0.769316, 0.769316}, {0.88663, 0.88663}, {0.963245, 0.963245}, {0.963245, 0.963245}, {0.88663, 0.88663}, {0.658122, 0.658122}, {0.6147, 0.6147}, {0.605743, 0.605743}, {0.607289, 0.607289}, {0.605743, 0.605743}, {0.6147, 0.6147}, {0.658122, 0.658122}, {0.737555, 0.737555}, {0.818533, 0.818533}, {0.852998, 0.852998}, {0.818533, 0.818533}, {0.737555, 0.737555}, {0.582843, 0.582843}, {0.605743, 0.605743}, {0.635712, 0.635712}, {0.635712, 0.635712}, {0.605743, 0.605743}, {0.582843, 0.582843}, {0.602155, 0.602155}, {0.658503, 0.658503}, {0.707784, 0.707784}, {0.707784, 0.707784}, {0.658503, 0.658503}, {0.602155, 0.602155}, {0.548264, 0.548264}, {0.607289, 0.607289}, {0.635712, 0.635712}, {0.607289, 0.607289}, {0.548264, 0.548264}, {0.511705, 0.511705}, {0.526036, 0.526036}, {0.568789, 0.568789}, {0.591256, 0.591256}, {0.568789, 0.568789}, {0.526036, 0.526036}, {0.511705, 0.511705}, {0.548264, 0.548264}, {0.605743, 0.605743}, {0.605743, 0.605743}, {0.548264, 0.548264}, {0.480431, 0.480431}, {0.452143, 0.452143}, {0.470981, 0.470981}, {0.500173, 0.500173}, {0.500173, 0.500173}, {0.470981, 0.470981}, {0.452143, 0.452143}, {0.480431, 0.480431}, {0.582843, 0.582843}, {0.6147, 0.6147}, {0.582843, 0.582843}, {0.511705, 0.511705}, {0.452143, 0.452143}, {0.436014, 0.436014}, {0.451742, 0.451742}, {0.463318, 0.463318}, {0.451742, 0.451742}, {0.436014, 0.436014}, {0.452143, 0.452143}, {0.511705, 0.511705}, {0.658122, 0.658122}, {0.658122, 0.658122}, {0.602155, 0.602155}, {0.526036, 0.526036}, {0.470981, 0.470981}, {0.451742, 0.451742}, {0.452655, 0.452655}, {0.452655, 0.452655}, {0.451742, 0.451742}, {0.470981, 0.470981}, {0.526036, 0.526036}, {0.602155, 0.602155}, {0.769316, 0.769316}, {0.737555, 0.737555}, {0.658503, 0.658503}, {0.568789, 0.568789}, {0.500173, 0.500173}, {0.463318, 0.463318}, {0.452655, 0.452655}, {0.463318, 0.463318}, {0.500173, 0.500173}, {0.568789, 0.568789}, {0.658503, 0.658503}, {0.737555, 0.737555}, {0.88663, 0.88663}, {0.818533, 0.818533}, {0.707784, 0.707784}, {0.591256, 0.591256}, {0.500173, 0.500173}, {0.451742, 0.451742}, {0.451742, 0.451742}, {0.500173, 0.500173}, {0.591256, 0.591256}, {0.707784, 0.707784}, {0.818533, 0.818533}, {0.88663, 0.88663}, {0.963245, 0.963245}, {0.852998, 0.852998}, {0.707784, 0.707784}, {0.568789, 0.568789}, {0.470981, 0.470981}, {0.436014, 0.436014}, {0.470981, 0.470981}, {0.568789, 0.568789}, {0.707784, 0.707784}, {0.852998, 0.852998}, {0.963245, 0.963245}, {1.00443, 1.00443}, {0.963245, 0.963245}, {0.818533, 0.818533}, {0.658503, 0.658503}, {0.526036, 0.526036}, {0.452143, 0.452143}, {0.452143, 0.452143}, {0.526036, 0.526036}, {0.658503, 0.658503}, {0.818533, 0.818533}, {0.963245, 0.963245}, {1.04938, 1.04938}, {1.04938, 1.04938}, {0.88663, 0.88663}, {0.737555, 0.737555}, {0.602155, 0.602155}, {0.511705, 0.511705}, {0.480431, 0.480431}, {0.511705, 0.511705}, {0.602155, 0.602155}, {0.737555, 0.737555}, {0.88663, 0.88663}, {1.00443, 1.00443}, {1.04938, 1.04938}, {1.00443, 1.00443}, {0.640116, 0.640116}, {0.658122, 0.658122}, {0.694133, 0.694133}, {0.712138, 0.712138}, {0.694133, 0.694133}, {0.658122, 0.658122}, {0.640116, 0.640116}, {0.658122, 0.658122}, {0.694133, 0.694133}, {0.712138, 0.712138}, {0.694133, 0.694133}, {0.658122, 0.658122}, {0.658122, 0.658122}, {0.729468, 0.729468}, {0.783757, 0.783757}, {0.783757, 0.783757}, {0.729468, 0.729468}, {0.658122, 0.658122}, {0.611522, 0.611522}, {0.602155, 0.602155}, {0.609844, 0.609844}, {0.609844, 0.609844}, {0.602155, 0.602155}, {0.611522, 0.611522}, {0.694133, 0.694133}, {0.783757, 0.783757}, {0.821272, 0.821272}, {0.783757, 0.783757}, {0.694133, 0.694133}, {0.602155, 0.602155}, {0.545337, 0.545337}, {0.526036, 0.526036}, {0.523682, 0.523682}, {0.526036, 0.526036}, {0.545337, 0.545337}, {0.602155, 0.602155}, {0.712138, 0.712138}, {0.783757, 0.783757}, {0.783757, 0.783757}, {0.712138, 0.712138}, {0.609844, 0.609844}, {0.526036, 0.526036}, {0.483171, 0.483171}, {0.470981, 0.470981}, {0.470981, 0.470981}, {0.483171, 0.483171}, {0.526036, 0.526036}, {0.609844, 0.609844}, {0.694133, 0.694133}, {0.729468, 0.729468}, {0.694133, 0.694133}, {0.609844, 0.609844}, {0.523682, 0.523682}, {0.470981, 0.470981}, {0.453616, 0.453616}, {0.451742, 0.451742}, {0.453616, 0.453616}, {0.470981, 0.470981}, {0.523682, 0.523682}, {0.609844, 0.609844}, {0.658122, 0.658122}, {0.658122, 0.658122}, {0.602155, 0.602155}, {0.526036, 0.526036}, {0.470981, 0.470981}, {0.451742, 0.451742}, {0.452655, 0.452655}, {0.452655, 0.452655}, {0.451742, 0.451742}, {0.470981, 0.470981}, {0.526036, 0.526036}, {0.602155, 0.602155}, {0.640116, 0.640116}, {0.611522, 0.611522}, {0.545337, 0.545337}, {0.483171, 0.483171}, {0.453616, 0.453616}, {0.452655, 0.452655}, {0.456673, 0.456673}, {0.452655, 0.452655}, {0.453616, 0.453616}, {0.483171, 0.483171}, {0.545337, 0.545337}, {0.611522, 0.611522}, {0.658122, 0.658122}, {0.602155, 0.602155}, {0.526036, 0.526036}, {0.470981, 0.470981}, {0.451742, 0.451742}, {0.452655, 0.452655}, {0.452655, 0.452655}, {0.451742, 0.451742}, {0.470981, 0.470981}, {0.526036, 0.526036}, {0.602155, 0.602155}, {0.658122, 0.658122}, {0.694133, 0.694133}, {0.609844, 0.609844}, {0.523682, 0.523682}, {0.470981, 0.470981}, {0.453616, 0.453616}, {0.451742, 0.451742}, {0.453616, 0.453616}, {0.470981, 0.470981}, {0.523682, 0.523682}, {0.609844, 0.609844}, {0.694133, 0.694133}, {0.729468, 0.729468}, {0.712138, 0.712138}, {0.609844, 0.609844}, {0.526036, 0.526036}, {0.483171, 0.483171}, {0.470981, 0.470981}, {0.470981, 0.470981}, {0.483171, 0.483171}, {0.526036, 0.526036}, {0.609844, 0.609844}, {0.712138, 0.712138}, {0.783757, 0.783757}, {0.783757, 0.783757}, {0.694133, 0.694133}, {0.602155, 0.602155}, {0.545337, 0.545337}, {0.526036, 0.526036}, {0.523682, 0.523682}, {0.526036, 0.526036}, {0.545337, 0.545337}, {0.602155, 0.602155}, {0.694133, 0.694133}, {0.783757, 0.783757}, {0.821272, 0.821272}, {0.783757, 0.783757}, {0.658122, 0.658122}, {0.611522, 0.611522}, {0.602155, 0.602155}, {0.609844, 0.609844}, {0.609844, 0.609844}, {0.602155, 0.602155}, {0.611522, 0.611522}, {0.658122, 0.658122}, {0.729468, 0.729468}, {0.783757, 0.783757}, {0.783757, 0.783757}, {0.729468, 0.729468}, {0.769316, 0.769316}, {0.88663, 0.88663}, {0.963245, 0.963245}, {0.963245, 0.963245}, {0.88663, 0.88663}, {0.769316, 0.769316}, {0.658122, 0.658122}, {0.582843, 0.582843}, {0.548264, 0.548264}, {0.548264, 0.548264}, {0.582843, 0.582843}, {0.658122, 0.658122}, {0.88663, 0.88663}, {1.00443, 1.00443}, {1.04938, 1.04938}, {1.00443, 1.00443}, {0.88663, 0.88663}, {0.737555, 0.737555}, {0.602155, 0.602155}, {0.511705, 0.511705}, {0.480431, 0.480431}, {0.511705, 0.511705}, {0.602155, 0.602155}, {0.737555, 0.737555}, {0.963245, 0.963245}, {1.04938, 1.04938}, {1.04938, 1.04938}, {0.963245, 0.963245}, {0.818533, 0.818533}, {0.658503, 0.658503}, {0.526036, 0.526036}, {0.452143, 0.452143}, {0.452143, 0.452143}, {0.526036, 0.526036}, {0.658503, 0.658503}, {0.818533, 0.818533}, {0.963245, 0.963245}, {1.00443, 1.00443}, {0.963245, 0.963245}, {0.852998, 0.852998}, {0.707784, 0.707784}, {0.568789, 0.568789}, {0.470981, 0.470981}, {0.436014, 0.436014}, {0.470981, 0.470981}, {0.568789, 0.568789}, {0.707784, 0.707784}, {0.852998, 0.852998}, {0.88663, 0.88663}, {0.88663, 0.88663}, {0.818533, 0.818533}, {0.707784, 0.707784}, {0.591256, 0.591256}, {0.500173, 0.500173}, {0.451742, 0.451742}, {0.451742, 0.451742}, {0.500173, 0.500173}, {0.591256, 0.591256}, {0.707784, 0.707784}, {0.818533, 0.818533}, {0.769316, 0.769316}, {0.737555, 0.737555}, {0.658503, 0.658503}, {0.568789, 0.568789}, {0.500173, 0.500173}, {0.463318, 0.463318}, {0.452655, 0.452655}, {0.463318, 0.463318}, {0.500173, 0.500173}, {0.568789, 0.568789}, {0.658503, 0.658503}, {0.737555, 0.737555}, {0.658122, 0.658122}, {0.602155, 0.602155}, {0.526036, 0.526036}, {0.470981, 0.470981}, {0.451742, 0.451742}, {0.452655, 0.452655}, {0.452655, 0.452655}, {0.451742, 0.451742}, {0.470981, 0.470981}, {0.526036, 0.526036}, {0.602155, 0.602155}, {0.658122, 0.658122}, {0.582843, 0.582843}, {0.511705, 0.511705}, {0.452143, 0.452143}, {0.436014, 0.436014}, {0.451742, 0.451742}, {0.463318, 0.463318}, {0.451742, 0.451742}, {0.436014, 0.436014}, {0.452143, 0.452143}, {0.511705, 0.511705}, {0.582843, 0.582843}, {0.6147, 0.6147}, {0.548264, 0.548264}, {0.480431, 0.480431}, {0.452143, 0.452143}, {0.470981, 0.470981}, {0.500173, 0.500173}, {0.500173, 0.500173}, {0.470981, 0.470981}, {0.452143, 0.452143}, {0.480431, 0.480431}, {0.548264, 0.548264}, {0.605743, 0.605743}, {0.605743, 0.605743}, {0.548264, 0.548264}, {0.511705, 0.511705}, {0.526036, 0.526036}, {0.568789, 0.568789}, {0.591256, 0.591256}, {0.568789, 0.568789}, {0.526036, 0.526036}, {0.511705, 0.511705}, {0.548264, 0.548264}, {0.607289, 0.607289}, {0.635712, 0.635712}, {0.607289, 0.607289}, {0.582843, 0.582843}, {0.602155, 0.602155}, {0.658503, 0.658503}, {0.707784, 0.707784}, {0.707784, 0.707784}, {0.658503, 0.658503}, {0.602155, 0.602155}, {0.582843, 0.582843}, {0.605743, 0.605743}, {0.635712, 0.635712}, {0.635712, 0.635712}, {0.605743, 0.605743}, {0.658122, 0.658122}, {0.737555, 0.737555}, {0.818533, 0.818533}, {0.852998, 0.852998}, {0.818533, 0.818533}, {0.737555, 0.737555}, {0.658122, 0.658122}, {0.6147, 0.6147}, {0.605743, 0.605743}, {0.607289, 0.607289}, {0.605743, 0.605743}, {0.6147, 0.6147}, {1.07132, 1.07132}, {1.20157, 1.20157}, {1.2482, 1.2482}, {1.20157, 1.20157}, {1.07132, 1.07132}, {0.88663, 0.88663}, {0.694133, 0.694133}, {0.548264, 0.548264}, {0.493826, 0.493826}, {0.548264, 0.548264}, {0.694133, 0.694133}, {0.88663, 0.88663}, {1.20157, 1.20157}, {1.28874, 1.28874}, {1.28874, 1.28874}, {1.20157, 1.20157}, {1.03512, 1.03512}, {0.818533, 0.818533}, {0.609844, 0.609844}, {0.480431, 0.480431}, {0.480431, 0.480431}, {0.609844, 0.609844}, {0.818533, 0.818533}, {1.03512, 1.03512}, {1.2482, 1.2482}, {1.28874, 1.28874}, {1.2482, 1.2482}, {1.12608, 1.12608}, {0.932431, 0.932431}, {0.707784, 0.707784}, {0.523682, 0.523682}, {0.452143, 0.452143}, {0.523682, 0.523682}, {0.707784, 0.707784}, {0.932431, 0.932431}, {1.12608, 1.12608}, {1.20157, 1.20157}, {1.20157, 1.20157}, {1.12608, 1.12608}, {0.978945, 0.978945}, {0.783184, 0.783184}, {0.591256, 0.591256}, {0.470981, 0.470981}, {0.470981, 0.470981}, {0.591256, 0.591256}, {0.783184, 0.783184}, {0.978945, 0.978945}, {1.12608, 1.12608}, {1.07132, 1.07132}, {1.03512, 1.03512}, {0.932431, 0.932431}, {0.783184, 0.783184}, {0.623579, 0.623579}, {0.500173, 0.500173}, {0.453616, 0.453616}, {0.500173, 0.500173}, {0.623579, 0.623579}, {0.783184, 0.783184}, {0.932431, 0.932431}, {1.03512, 1.03512}, {0.88663, 0.88663}, {0.818533, 0.818533}, {0.707784, 0.707784}, {0.591256, 0.591256}, {0.500173, 0.500173}, {0.451742, 0.451742}, {0.451742, 0.451742}, {0.500173, 0.500173}, {0.591256, 0.591256}, {0.707784, 0.707784}, {0.818533, 0.818533}, {0.88663, 0.88663}, {0.694133, 0.694133}, {0.609844, 0.609844}, {0.523682, 0.523682}, {0.470981, 0.470981}, {0.453616, 0.453616}, {0.451742, 0.451742}, {0.453616, 0.453616}, {0.470981, 0.470981}, {0.523682, 0.523682}, {0.609844, 0.609844}, {0.694133, 0.694133}, {0.729468, 0.729468}, {0.548264, 0.548264}, {0.480431, 0.480431}, {0.452143, 0.452143}, {0.470981, 0.470981}, {0.500173, 0.500173}, {0.500173, 0.500173}, {0.470981, 0.470981}, {0.452143, 0.452143}, {0.480431, 0.480431}, {0.548264, 0.548264}, {0.605743, 0.605743}, {0.605743, 0.605743}, {0.493826, 0.493826}, {0.480431, 0.480431}, {0.523682, 0.523682}, {0.591256, 0.591256}, {0.623579, 0.623579}, {0.591256, 0.591256}, {0.523682, 0.523682}, {0.480431, 0.480431}, {0.493826, 0.493826}, {0.539544, 0.539544}, {0.563868, 0.563868}, {0.539544, 0.539544}, {0.548264, 0.548264}, {0.609844, 0.609844}, {0.707784, 0.707784}, {0.783184, 0.783184}, {0.783184, 0.783184}, {0.707784, 0.707784}, {0.609844, 0.609844}, {0.548264, 0.548264}, {0.539544, 0.539544}, {0.553365, 0.553365}, {0.553365, 0.553365}, {0.539544, 0.539544}, {0.694133, 0.694133}, {0.818533, 0.818533}, {0.932431, 0.932431}, {0.978945, 0.978945}, {0.932431, 0.932431}, {0.818533, 0.818533}, {0.694133, 0.694133}, {0.605743, 0.605743}, {0.563868, 0.563868}, {0.553365, 0.553365}, {0.563868, 0.563868}, {0.605743, 0.605743}, {0.88663, 0.88663}, {1.03512, 1.03512}, {1.12608, 1.12608}, {1.12608, 1.12608}, {1.03512, 1.03512}, {0.88663, 0.88663}, {0.729468, 0.729468}, {0.605743, 0.605743}, {0.539544, 0.539544}, {0.539544, 0.539544}, {0.605743, 0.605743}, {0.729468, 0.729468}, {1.36325, 1.36325}, {1.4377, 1.4377}, {1.4377, 1.4377}, {1.36325, 1.36325}, {1.20157, 1.20157}, {0.963245, 0.963245}, {0.712138, 0.712138}, {0.548264, 0.548264}, {0.548264, 0.548264}, {0.712138, 0.712138}, {0.963245, 0.963245}, {1.20157, 1.20157}, {1.4377, 1.4377}, {1.46763, 1.46763}, {1.4377, 1.4377}, {1.33096, 1.33096}, {1.12608, 1.12608}, {0.852998, 0.852998}, {0.609844, 0.609844}, {0.511705, 0.511705}, {0.609844, 0.609844}, {0.852998, 0.852998}, {1.12608, 1.12608}, {1.33096, 1.33096}, {1.4377, 1.4377}, {1.4377, 1.4377}, {1.37517, 1.37517}, {1.22322, 1.22322}, {0.978945, 0.978945}, {0.707784, 0.707784}, {0.526036, 0.526036}, {0.526036, 0.526036}, {0.707784, 0.707784}, {0.978945, 0.978945}, {1.22322, 1.22322}, {1.37517, 1.37517}, {1.36325, 1.36325}, {1.33096, 1.33096}, {1.22322, 1.22322}, {1.02987, 1.02987}, {0.783184, 0.783184}, {0.568789, 0.568789}, {0.483171, 0.483171}, {0.568789, 0.568789}, {0.783184, 0.783184}, {1.02987, 1.02987}, {1.22322, 1.22322}, {1.33096, 1.33096}, {1.20157, 1.20157}, {1.12608, 1.12608}, {0.978945, 0.978945}, {0.783184, 0.783184}, {0.591256, 0.591256}, {0.470981, 0.470981}, {0.470981, 0.470981}, {0.591256, 0.591256}, {0.783184, 0.783184}, {0.978945, 0.978945}, {1.12608, 1.12608}, {1.20157, 1.20157}, {0.963245, 0.963245}, {0.852998, 0.852998}, {0.707784, 0.707784}, {0.568789, 0.568789}, {0.470981, 0.470981}, {0.436014, 0.436014}, {0.470981, 0.470981}, {0.568789, 0.568789}, {0.707784, 0.707784}, {0.852998, 0.852998}, {0.963245, 0.963245}, {1.00443, 1.00443}, {0.712138, 0.712138}, {0.609844, 0.609844}, {0.526036, 0.526036}, {0.483171, 0.483171}, {0.470981, 0.470981}, {0.470981, 0.470981}, {0.483171, 0.483171}, {0.526036, 0.526036}, {0.609844, 0.609844}, {0.712138, 0.712138}, {0.783757, 0.783757}, {0.783757, 0.783757}, {0.548264, 0.548264}, {0.511705, 0.511705}, {0.526036, 0.526036}, {0.568789, 0.568789}, {0.591256, 0.591256}, {0.568789, 0.568789}, {0.526036, 0.526036}, {0.511705, 0.511705}, {0.548264, 0.548264}, {0.607289, 0.607289}, {0.635712, 0.635712}, {0.607289, 0.607289}, {0.548264, 0.548264}, {0.609844, 0.609844}, {0.707784, 0.707784}, {0.783184, 0.783184}, {0.783184, 0.783184}, {0.707784, 0.707784}, {0.609844, 0.609844}, {0.548264, 0.548264}, {0.539544, 0.539544}, {0.553365, 0.553365}, {0.553365, 0.553365}, {0.539544, 0.539544}, {0.712138, 0.712138}, {0.852998, 0.852998}, {0.978945, 0.978945}, {1.02987, 1.02987}, {0.978945, 0.978945}, {0.852998, 0.852998}, {0.712138, 0.712138}, {0.607289, 0.607289}, {0.553365, 0.553365}, {0.538451, 0.538451}, {0.553365, 0.553365}, {0.607289, 0.607289}, {0.963245, 0.963245}, {1.12608, 1.12608}, {1.22322, 1.22322}, {1.22322, 1.22322}, {1.12608, 1.12608}, {0.963245, 0.963245}, {0.783757, 0.783757}, {0.635712, 0.635712}, {0.553365, 0.553365}, {0.553365, 0.553365}, {0.635712, 0.635712}, {0.783757, 0.783757}, {1.20157, 1.20157}, {1.33096, 1.33096}, {1.37517, 1.37517}, {1.33096, 1.33096}, {1.20157, 1.20157}, {1.00443, 1.00443}, {0.783757, 0.783757}, {0.607289, 0.607289}, {0.539544, 0.539544}, {0.607289, 0.607289}, {0.783757, 0.783757}, {1.00443, 1.00443}, {1.51591, 1.51591}, {1.53175, 1.53175}, {1.51591, 1.51591}, {1.4377, 1.4377}, {1.2482, 1.2482}, {0.963245, 0.963245}, {0.694133, 0.694133}, {0.582843, 0.582843}, {0.694133, 0.694133}, {0.963245, 0.963245}, {1.2482, 1.2482}, {1.4377, 1.4377}, {1.53175, 1.53175}, {1.53175, 1.53175}, {1.49905, 1.49905}, {1.37517, 1.37517}, {1.12608, 1.12608}, {0.818533, 0.818533}, {0.602155, 0.602155}, {0.602155, 0.602155}, {0.818533, 0.818533}, {1.12608, 1.12608}, {1.37517, 1.37517}, {1.49905, 1.49905}, {1.51591, 1.51591}, {1.49905, 1.49905}, {1.41772, 1.41772}, {1.22322, 1.22322}, {0.932431, 0.932431}, {0.658503, 0.658503}, {0.545337, 0.545337}, {0.658503, 0.658503}, {0.932431, 0.932431}, {1.22322, 1.22322}, {1.41772, 1.41772}, {1.49905, 1.49905}, {1.4377, 1.4377}, {1.37517, 1.37517}, {1.22322, 1.22322}, {0.978945, 0.978945}, {0.707784, 0.707784}, {0.526036, 0.526036}, {0.526036, 0.526036}, {0.707784, 0.707784}, {0.978945, 0.978945}, {1.22322, 1.22322}, {1.37517, 1.37517}, {1.4377, 1.4377}, {1.2482, 1.2482}, {1.12608, 1.12608}, {0.932431, 0.932431}, {0.707784, 0.707784}, {0.523682, 0.523682}, {0.452143, 0.452143}, {0.523682, 0.523682}, {0.707784, 0.707784}, {0.932431, 0.932431}, {1.12608, 1.12608}, {1.2482, 1.2482}, {1.28874, 1.28874}, {0.963245, 0.963245}, {0.818533, 0.818533}, {0.658503, 0.658503}, {0.526036, 0.526036}, {0.452143, 0.452143}, {0.452143, 0.452143}, {0.526036, 0.526036}, {0.658503, 0.658503}, {0.818533, 0.818533}, {0.963245, 0.963245}, {1.04938, 1.04938}, {1.04938, 1.04938}, {0.694133, 0.694133}, {0.602155, 0.602155}, {0.545337, 0.545337}, {0.526036, 0.526036}, {0.523682, 0.523682}, {0.526036, 0.526036}, {0.545337, 0.545337}, {0.602155, 0.602155}, {0.694133, 0.694133}, {0.783757, 0.783757}, {0.821272, 0.821272}, {0.783757, 0.783757}, {0.582843, 0.582843}, {0.602155, 0.602155}, {0.658503, 0.658503}, {0.707784, 0.707784}, {0.707784, 0.707784}, {0.658503, 0.658503}, {0.602155, 0.602155}, {0.582843, 0.582843}, {0.605743, 0.605743}, {0.635712, 0.635712}, {0.635712, 0.635712}, {0.605743, 0.605743}, {0.694133, 0.694133}, {0.818533, 0.818533}, {0.932431, 0.932431}, {0.978945, 0.978945}, {0.932431, 0.932431}, {0.818533, 0.818533}, {0.694133, 0.694133}, {0.605743, 0.605743}, {0.563868, 0.563868}, {0.553365, 0.553365}, {0.563868, 0.563868}, {0.605743, 0.605743}, {0.963245, 0.963245}, {1.12608, 1.12608}, {1.22322, 1.22322}, {1.22322, 1.22322}, {1.12608, 1.12608}, {0.963245, 0.963245}, {0.783757, 0.783757}, {0.635712, 0.635712}, {0.553365, 0.553365}, {0.553365, 0.553365}, {0.635712, 0.635712}, {0.783757, 0.783757}, {1.2482, 1.2482}, {1.37517, 1.37517}, {1.41772, 1.41772}, {1.37517, 1.37517}, {1.2482, 1.2482}, {1.04938, 1.04938}, {0.821272, 0.821272}, {0.635712, 0.635712}, {0.563868, 0.563868}, {0.635712, 0.635712}, {0.821272, 0.821272}, {1.04938, 1.04938}, {1.4377, 1.4377}, {1.49905, 1.49905}, {1.49905, 1.49905}, {1.4377, 1.4377}, {1.28874, 1.28874}, {1.04938, 1.04938}, {0.783757, 0.783757}, {0.605743, 0.605743}, {0.605743, 0.605743}, {0.783757, 0.783757}, {1.04938, 1.04938}, {1.28874, 1.28874}, {1.53938, 1.53938}, {1.53938, 1.53938}, {1.53175, 1.53175}, {1.4377, 1.4377}, {1.20157, 1.20157}, {0.88663, 0.88663}, {0.658122, 0.658122}, {0.658122, 0.658122}, {0.88663, 0.88663}, {1.20157, 1.20157}, {1.4377, 1.4377}, {1.53175, 1.53175}, {1.53938, 1.53938}, {1.5411, 1.5411}, {1.49905, 1.49905}, {1.33096, 1.33096}, {1.03512, 1.03512}, {0.737555, 0.737555}, {0.611522, 0.611522}, {0.737555, 0.737555}, {1.03512, 1.03512}, {1.33096, 1.33096}, {1.49905, 1.49905}, {1.5411, 1.5411}, {1.53175, 1.53175}, {1.49905, 1.49905}, {1.37517, 1.37517}, {1.12608, 1.12608}, {0.818533, 0.818533}, {0.602155, 0.602155}, {0.602155, 0.602155}, {0.818533, 0.818533}, {1.12608, 1.12608}, {1.37517, 1.37517}, {1.49905, 1.49905}, {1.53175, 1.53175}, {1.4377, 1.4377}, {1.33096, 1.33096}, {1.12608, 1.12608}, {0.852998, 0.852998}, {0.609844, 0.609844}, {0.511705, 0.511705}, {0.609844, 0.609844}, {0.852998, 0.852998}, {1.12608, 1.12608}, {1.33096, 1.33096}, {1.4377, 1.4377}, {1.46763, 1.46763}, {1.20157, 1.20157}, {1.03512, 1.03512}, {0.818533, 0.818533}, {0.609844, 0.609844}, {0.480431, 0.480431}, {0.480431, 0.480431}, {0.609844, 0.609844}, {0.818533, 0.818533}, {1.03512, 1.03512}, {1.20157, 1.20157}, {1.28874, 1.28874}, {1.28874, 1.28874}, {0.88663, 0.88663}, {0.737555, 0.737555}, {0.602155, 0.602155}, {0.511705, 0.511705}, {0.480431, 0.480431}, {0.511705, 0.511705}, {0.602155, 0.602155}, {0.737555, 0.737555}, {0.88663, 0.88663}, {1.00443, 1.00443}, {1.04938, 1.04938}, {1.00443, 1.00443}, {0.658122, 0.658122}, {0.611522, 0.611522}, {0.602155, 0.602155}, {0.609844, 0.609844}, {0.609844, 0.609844}, {0.602155, 0.602155}, {0.611522, 0.611522}, {0.658122, 0.658122}, {0.729468, 0.729468}, {0.783757, 0.783757}, {0.783757, 0.783757}, {0.729468, 0.729468}, {0.658122, 0.658122}, {0.737555, 0.737555}, {0.818533, 0.818533}, {0.852998, 0.852998}, {0.818533, 0.818533}, {0.737555, 0.737555}, {0.658122, 0.658122}, {0.6147, 0.6147}, {0.605743, 0.605743}, {0.607289, 0.607289}, {0.605743, 0.605743}, {0.6147, 0.6147}, {0.88663, 0.88663}, {1.03512, 1.03512}, {1.12608, 1.12608}, {1.12608, 1.12608}, {1.03512, 1.03512}, {0.88663, 0.88663}, {0.729468, 0.729468}, {0.605743, 0.605743}, {0.539544, 0.539544}, {0.539544, 0.539544}, {0.605743, 0.605743}, {0.729468, 0.729468}, {1.20157, 1.20157}, {1.33096, 1.33096}, {1.37517, 1.37517}, {1.33096, 1.33096}, {1.20157, 1.20157}, {1.00443, 1.00443}, {0.783757, 0.783757}, {0.607289, 0.607289}, {0.539544, 0.539544}, {0.607289, 0.607289}, {0.783757, 0.783757}, {1.00443, 1.00443}, {1.4377, 1.4377}, {1.49905, 1.49905}, {1.49905, 1.49905}, {1.4377, 1.4377}, {1.28874, 1.28874}, {1.04938, 1.04938}, {0.783757, 0.783757}, {0.605743, 0.605743}, {0.605743, 0.605743}, {0.783757, 0.783757}, {1.04938, 1.04938}, {1.28874, 1.28874}, {1.53175, 1.53175}, {1.5411, 1.5411}, {1.53175, 1.53175}, {1.46763, 1.46763}, {1.28874, 1.28874}, {1.00443, 1.00443}, {0.729468, 0.729468}, {0.6147, 0.6147}, {0.729468, 0.729468}, {1.00443, 1.00443}, {1.28874, 1.28874}, {1.46763, 1.46763} - }; + std::vector> out_spin + = {{1.52931, 1.52931}, {1.53938, 1.53938}, {1.51591, 1.51591}, {1.36325, 1.36325}, {1.07132, 1.07132}, + {0.769316, 0.769316}, {0.640116, 0.640116}, {0.769316, 0.769316}, {1.07132, 1.07132}, {1.36325, 1.36325}, + {1.51591, 1.51591}, {1.53938, 1.53938}, {1.53938, 1.53938}, {1.53175, 1.53175}, {1.4377, 1.4377}, + {1.20157, 1.20157}, {0.88663, 0.88663}, {0.658122, 0.658122}, {0.658122, 0.658122}, {0.88663, 0.88663}, + {1.20157, 1.20157}, {1.4377, 1.4377}, {1.53175, 1.53175}, {1.53938, 1.53938}, {1.51591, 1.51591}, + {1.4377, 1.4377}, {1.2482, 1.2482}, {0.963245, 0.963245}, {0.694133, 0.694133}, {0.582843, 0.582843}, + {0.694133, 0.694133}, {0.963245, 0.963245}, {1.2482, 1.2482}, {1.4377, 1.4377}, {1.51591, 1.51591}, + {1.53175, 1.53175}, {1.36325, 1.36325}, {1.20157, 1.20157}, {0.963245, 0.963245}, {0.712138, 0.712138}, + {0.548264, 0.548264}, {0.548264, 0.548264}, {0.712138, 0.712138}, {0.963245, 0.963245}, {1.20157, 1.20157}, + {1.36325, 1.36325}, {1.4377, 1.4377}, {1.4377, 1.4377}, {1.07132, 1.07132}, {0.88663, 0.88663}, + {0.694133, 0.694133}, {0.548264, 0.548264}, {0.493826, 0.493826}, {0.548264, 0.548264}, {0.694133, 0.694133}, + {0.88663, 0.88663}, {1.07132, 1.07132}, {1.20157, 1.20157}, {1.2482, 1.2482}, {1.20157, 1.20157}, + {0.769316, 0.769316}, {0.658122, 0.658122}, {0.582843, 0.582843}, {0.548264, 0.548264}, {0.548264, 0.548264}, + {0.582843, 0.582843}, {0.658122, 0.658122}, {0.769316, 0.769316}, {0.88663, 0.88663}, {0.963245, 0.963245}, + {0.963245, 0.963245}, {0.88663, 0.88663}, {0.640116, 0.640116}, {0.658122, 0.658122}, {0.694133, 0.694133}, + {0.712138, 0.712138}, {0.694133, 0.694133}, {0.658122, 0.658122}, {0.640116, 0.640116}, {0.658122, 0.658122}, + {0.694133, 0.694133}, {0.712138, 0.712138}, {0.694133, 0.694133}, {0.658122, 0.658122}, {0.769316, 0.769316}, + {0.88663, 0.88663}, {0.963245, 0.963245}, {0.963245, 0.963245}, {0.88663, 0.88663}, {0.769316, 0.769316}, + {0.658122, 0.658122}, {0.582843, 0.582843}, {0.548264, 0.548264}, {0.548264, 0.548264}, {0.582843, 0.582843}, + {0.658122, 0.658122}, {1.07132, 1.07132}, {1.20157, 1.20157}, {1.2482, 1.2482}, {1.20157, 1.20157}, + {1.07132, 1.07132}, {0.88663, 0.88663}, {0.694133, 0.694133}, {0.548264, 0.548264}, {0.493826, 0.493826}, + {0.548264, 0.548264}, {0.694133, 0.694133}, {0.88663, 0.88663}, {1.36325, 1.36325}, {1.4377, 1.4377}, + {1.4377, 1.4377}, {1.36325, 1.36325}, {1.20157, 1.20157}, {0.963245, 0.963245}, {0.712138, 0.712138}, + {0.548264, 0.548264}, {0.548264, 0.548264}, {0.712138, 0.712138}, {0.963245, 0.963245}, {1.20157, 1.20157}, + {1.51591, 1.51591}, {1.53175, 1.53175}, {1.51591, 1.51591}, {1.4377, 1.4377}, {1.2482, 1.2482}, + {0.963245, 0.963245}, {0.694133, 0.694133}, {0.582843, 0.582843}, {0.694133, 0.694133}, {0.963245, 0.963245}, + {1.2482, 1.2482}, {1.4377, 1.4377}, {1.53938, 1.53938}, {1.53938, 1.53938}, {1.53175, 1.53175}, + {1.4377, 1.4377}, {1.20157, 1.20157}, {0.88663, 0.88663}, {0.658122, 0.658122}, {0.658122, 0.658122}, + {0.88663, 0.88663}, {1.20157, 1.20157}, {1.4377, 1.4377}, {1.53175, 1.53175}, {1.53938, 1.53938}, + {1.53175, 1.53175}, {1.4377, 1.4377}, {1.20157, 1.20157}, {0.88663, 0.88663}, {0.658122, 0.658122}, + {0.658122, 0.658122}, {0.88663, 0.88663}, {1.20157, 1.20157}, {1.4377, 1.4377}, {1.53175, 1.53175}, + {1.53938, 1.53938}, {1.53175, 1.53175}, {1.46763, 1.46763}, {1.28874, 1.28874}, {1.00443, 1.00443}, + {0.729468, 0.729468}, {0.6147, 0.6147}, {0.729468, 0.729468}, {1.00443, 1.00443}, {1.28874, 1.28874}, + {1.46763, 1.46763}, {1.53175, 1.53175}, {1.5411, 1.5411}, {1.4377, 1.4377}, {1.28874, 1.28874}, + {1.04938, 1.04938}, {0.783757, 0.783757}, {0.605743, 0.605743}, {0.605743, 0.605743}, {0.783757, 0.783757}, + {1.04938, 1.04938}, {1.28874, 1.28874}, {1.4377, 1.4377}, {1.49905, 1.49905}, {1.49905, 1.49905}, + {1.20157, 1.20157}, {1.00443, 1.00443}, {0.783757, 0.783757}, {0.607289, 0.607289}, {0.539544, 0.539544}, + {0.607289, 0.607289}, {0.783757, 0.783757}, {1.00443, 1.00443}, {1.20157, 1.20157}, {1.33096, 1.33096}, + {1.37517, 1.37517}, {1.33096, 1.33096}, {0.88663, 0.88663}, {0.729468, 0.729468}, {0.605743, 0.605743}, + {0.539544, 0.539544}, {0.539544, 0.539544}, {0.605743, 0.605743}, {0.729468, 0.729468}, {0.88663, 0.88663}, + {1.03512, 1.03512}, {1.12608, 1.12608}, {1.12608, 1.12608}, {1.03512, 1.03512}, {0.658122, 0.658122}, + {0.6147, 0.6147}, {0.605743, 0.605743}, {0.607289, 0.607289}, {0.605743, 0.605743}, {0.6147, 0.6147}, + {0.658122, 0.658122}, {0.737555, 0.737555}, {0.818533, 0.818533}, {0.852998, 0.852998}, {0.818533, 0.818533}, + {0.737555, 0.737555}, {0.658122, 0.658122}, {0.729468, 0.729468}, {0.783757, 0.783757}, {0.783757, 0.783757}, + {0.729468, 0.729468}, {0.658122, 0.658122}, {0.611522, 0.611522}, {0.602155, 0.602155}, {0.609844, 0.609844}, + {0.609844, 0.609844}, {0.602155, 0.602155}, {0.611522, 0.611522}, {0.88663, 0.88663}, {1.00443, 1.00443}, + {1.04938, 1.04938}, {1.00443, 1.00443}, {0.88663, 0.88663}, {0.737555, 0.737555}, {0.602155, 0.602155}, + {0.511705, 0.511705}, {0.480431, 0.480431}, {0.511705, 0.511705}, {0.602155, 0.602155}, {0.737555, 0.737555}, + {1.20157, 1.20157}, {1.28874, 1.28874}, {1.28874, 1.28874}, {1.20157, 1.20157}, {1.03512, 1.03512}, + {0.818533, 0.818533}, {0.609844, 0.609844}, {0.480431, 0.480431}, {0.480431, 0.480431}, {0.609844, 0.609844}, + {0.818533, 0.818533}, {1.03512, 1.03512}, {1.4377, 1.4377}, {1.46763, 1.46763}, {1.4377, 1.4377}, + {1.33096, 1.33096}, {1.12608, 1.12608}, {0.852998, 0.852998}, {0.609844, 0.609844}, {0.511705, 0.511705}, + {0.609844, 0.609844}, {0.852998, 0.852998}, {1.12608, 1.12608}, {1.33096, 1.33096}, {1.53175, 1.53175}, + {1.53175, 1.53175}, {1.49905, 1.49905}, {1.37517, 1.37517}, {1.12608, 1.12608}, {0.818533, 0.818533}, + {0.602155, 0.602155}, {0.602155, 0.602155}, {0.818533, 0.818533}, {1.12608, 1.12608}, {1.37517, 1.37517}, + {1.49905, 1.49905}, {1.53938, 1.53938}, {1.5411, 1.5411}, {1.49905, 1.49905}, {1.33096, 1.33096}, + {1.03512, 1.03512}, {0.737555, 0.737555}, {0.611522, 0.611522}, {0.737555, 0.737555}, {1.03512, 1.03512}, + {1.33096, 1.33096}, {1.49905, 1.49905}, {1.5411, 1.5411}, {1.51591, 1.51591}, {1.4377, 1.4377}, + {1.2482, 1.2482}, {0.963245, 0.963245}, {0.694133, 0.694133}, {0.582843, 0.582843}, {0.694133, 0.694133}, + {0.963245, 0.963245}, {1.2482, 1.2482}, {1.4377, 1.4377}, {1.51591, 1.51591}, {1.53175, 1.53175}, + {1.4377, 1.4377}, {1.28874, 1.28874}, {1.04938, 1.04938}, {0.783757, 0.783757}, {0.605743, 0.605743}, + {0.605743, 0.605743}, {0.783757, 0.783757}, {1.04938, 1.04938}, {1.28874, 1.28874}, {1.4377, 1.4377}, + {1.49905, 1.49905}, {1.49905, 1.49905}, {1.2482, 1.2482}, {1.04938, 1.04938}, {0.821272, 0.821272}, + {0.635712, 0.635712}, {0.563868, 0.563868}, {0.635712, 0.635712}, {0.821272, 0.821272}, {1.04938, 1.04938}, + {1.2482, 1.2482}, {1.37517, 1.37517}, {1.41772, 1.41772}, {1.37517, 1.37517}, {0.963245, 0.963245}, + {0.783757, 0.783757}, {0.635712, 0.635712}, {0.553365, 0.553365}, {0.553365, 0.553365}, {0.635712, 0.635712}, + {0.783757, 0.783757}, {0.963245, 0.963245}, {1.12608, 1.12608}, {1.22322, 1.22322}, {1.22322, 1.22322}, + {1.12608, 1.12608}, {0.694133, 0.694133}, {0.605743, 0.605743}, {0.563868, 0.563868}, {0.553365, 0.553365}, + {0.563868, 0.563868}, {0.605743, 0.605743}, {0.694133, 0.694133}, {0.818533, 0.818533}, {0.932431, 0.932431}, + {0.978945, 0.978945}, {0.932431, 0.932431}, {0.818533, 0.818533}, {0.582843, 0.582843}, {0.605743, 0.605743}, + {0.635712, 0.635712}, {0.635712, 0.635712}, {0.605743, 0.605743}, {0.582843, 0.582843}, {0.602155, 0.602155}, + {0.658503, 0.658503}, {0.707784, 0.707784}, {0.707784, 0.707784}, {0.658503, 0.658503}, {0.602155, 0.602155}, + {0.694133, 0.694133}, {0.783757, 0.783757}, {0.821272, 0.821272}, {0.783757, 0.783757}, {0.694133, 0.694133}, + {0.602155, 0.602155}, {0.545337, 0.545337}, {0.526036, 0.526036}, {0.523682, 0.523682}, {0.526036, 0.526036}, + {0.545337, 0.545337}, {0.602155, 0.602155}, {0.963245, 0.963245}, {1.04938, 1.04938}, {1.04938, 1.04938}, + {0.963245, 0.963245}, {0.818533, 0.818533}, {0.658503, 0.658503}, {0.526036, 0.526036}, {0.452143, 0.452143}, + {0.452143, 0.452143}, {0.526036, 0.526036}, {0.658503, 0.658503}, {0.818533, 0.818533}, {1.2482, 1.2482}, + {1.28874, 1.28874}, {1.2482, 1.2482}, {1.12608, 1.12608}, {0.932431, 0.932431}, {0.707784, 0.707784}, + {0.523682, 0.523682}, {0.452143, 0.452143}, {0.523682, 0.523682}, {0.707784, 0.707784}, {0.932431, 0.932431}, + {1.12608, 1.12608}, {1.4377, 1.4377}, {1.4377, 1.4377}, {1.37517, 1.37517}, {1.22322, 1.22322}, + {0.978945, 0.978945}, {0.707784, 0.707784}, {0.526036, 0.526036}, {0.526036, 0.526036}, {0.707784, 0.707784}, + {0.978945, 0.978945}, {1.22322, 1.22322}, {1.37517, 1.37517}, {1.51591, 1.51591}, {1.49905, 1.49905}, + {1.41772, 1.41772}, {1.22322, 1.22322}, {0.932431, 0.932431}, {0.658503, 0.658503}, {0.545337, 0.545337}, + {0.658503, 0.658503}, {0.932431, 0.932431}, {1.22322, 1.22322}, {1.41772, 1.41772}, {1.49905, 1.49905}, + {1.53175, 1.53175}, {1.49905, 1.49905}, {1.37517, 1.37517}, {1.12608, 1.12608}, {0.818533, 0.818533}, + {0.602155, 0.602155}, {0.602155, 0.602155}, {0.818533, 0.818533}, {1.12608, 1.12608}, {1.37517, 1.37517}, + {1.49905, 1.49905}, {1.53175, 1.53175}, {1.36325, 1.36325}, {1.20157, 1.20157}, {0.963245, 0.963245}, + {0.712138, 0.712138}, {0.548264, 0.548264}, {0.548264, 0.548264}, {0.712138, 0.712138}, {0.963245, 0.963245}, + {1.20157, 1.20157}, {1.36325, 1.36325}, {1.4377, 1.4377}, {1.4377, 1.4377}, {1.20157, 1.20157}, + {1.00443, 1.00443}, {0.783757, 0.783757}, {0.607289, 0.607289}, {0.539544, 0.539544}, {0.607289, 0.607289}, + {0.783757, 0.783757}, {1.00443, 1.00443}, {1.20157, 1.20157}, {1.33096, 1.33096}, {1.37517, 1.37517}, + {1.33096, 1.33096}, {0.963245, 0.963245}, {0.783757, 0.783757}, {0.635712, 0.635712}, {0.553365, 0.553365}, + {0.553365, 0.553365}, {0.635712, 0.635712}, {0.783757, 0.783757}, {0.963245, 0.963245}, {1.12608, 1.12608}, + {1.22322, 1.22322}, {1.22322, 1.22322}, {1.12608, 1.12608}, {0.712138, 0.712138}, {0.607289, 0.607289}, + {0.553365, 0.553365}, {0.538451, 0.538451}, {0.553365, 0.553365}, {0.607289, 0.607289}, {0.712138, 0.712138}, + {0.852998, 0.852998}, {0.978945, 0.978945}, {1.02987, 1.02987}, {0.978945, 0.978945}, {0.852998, 0.852998}, + {0.548264, 0.548264}, {0.539544, 0.539544}, {0.553365, 0.553365}, {0.553365, 0.553365}, {0.539544, 0.539544}, + {0.548264, 0.548264}, {0.609844, 0.609844}, {0.707784, 0.707784}, {0.783184, 0.783184}, {0.783184, 0.783184}, + {0.707784, 0.707784}, {0.609844, 0.609844}, {0.548264, 0.548264}, {0.607289, 0.607289}, {0.635712, 0.635712}, + {0.607289, 0.607289}, {0.548264, 0.548264}, {0.511705, 0.511705}, {0.526036, 0.526036}, {0.568789, 0.568789}, + {0.591256, 0.591256}, {0.568789, 0.568789}, {0.526036, 0.526036}, {0.511705, 0.511705}, {0.712138, 0.712138}, + {0.783757, 0.783757}, {0.783757, 0.783757}, {0.712138, 0.712138}, {0.609844, 0.609844}, {0.526036, 0.526036}, + {0.483171, 0.483171}, {0.470981, 0.470981}, {0.470981, 0.470981}, {0.483171, 0.483171}, {0.526036, 0.526036}, + {0.609844, 0.609844}, {0.963245, 0.963245}, {1.00443, 1.00443}, {0.963245, 0.963245}, {0.852998, 0.852998}, + {0.707784, 0.707784}, {0.568789, 0.568789}, {0.470981, 0.470981}, {0.436014, 0.436014}, {0.470981, 0.470981}, + {0.568789, 0.568789}, {0.707784, 0.707784}, {0.852998, 0.852998}, {1.20157, 1.20157}, {1.20157, 1.20157}, + {1.12608, 1.12608}, {0.978945, 0.978945}, {0.783184, 0.783184}, {0.591256, 0.591256}, {0.470981, 0.470981}, + {0.470981, 0.470981}, {0.591256, 0.591256}, {0.783184, 0.783184}, {0.978945, 0.978945}, {1.12608, 1.12608}, + {1.36325, 1.36325}, {1.33096, 1.33096}, {1.22322, 1.22322}, {1.02987, 1.02987}, {0.783184, 0.783184}, + {0.568789, 0.568789}, {0.483171, 0.483171}, {0.568789, 0.568789}, {0.783184, 0.783184}, {1.02987, 1.02987}, + {1.22322, 1.22322}, {1.33096, 1.33096}, {1.4377, 1.4377}, {1.37517, 1.37517}, {1.22322, 1.22322}, + {0.978945, 0.978945}, {0.707784, 0.707784}, {0.526036, 0.526036}, {0.526036, 0.526036}, {0.707784, 0.707784}, + {0.978945, 0.978945}, {1.22322, 1.22322}, {1.37517, 1.37517}, {1.4377, 1.4377}, {1.4377, 1.4377}, + {1.33096, 1.33096}, {1.12608, 1.12608}, {0.852998, 0.852998}, {0.609844, 0.609844}, {0.511705, 0.511705}, + {0.609844, 0.609844}, {0.852998, 0.852998}, {1.12608, 1.12608}, {1.33096, 1.33096}, {1.4377, 1.4377}, + {1.46763, 1.46763}, {1.07132, 1.07132}, {0.88663, 0.88663}, {0.694133, 0.694133}, {0.548264, 0.548264}, + {0.493826, 0.493826}, {0.548264, 0.548264}, {0.694133, 0.694133}, {0.88663, 0.88663}, {1.07132, 1.07132}, + {1.20157, 1.20157}, {1.2482, 1.2482}, {1.20157, 1.20157}, {0.88663, 0.88663}, {0.729468, 0.729468}, + {0.605743, 0.605743}, {0.539544, 0.539544}, {0.539544, 0.539544}, {0.605743, 0.605743}, {0.729468, 0.729468}, + {0.88663, 0.88663}, {1.03512, 1.03512}, {1.12608, 1.12608}, {1.12608, 1.12608}, {1.03512, 1.03512}, + {0.694133, 0.694133}, {0.605743, 0.605743}, {0.563868, 0.563868}, {0.553365, 0.553365}, {0.563868, 0.563868}, + {0.605743, 0.605743}, {0.694133, 0.694133}, {0.818533, 0.818533}, {0.932431, 0.932431}, {0.978945, 0.978945}, + {0.932431, 0.932431}, {0.818533, 0.818533}, {0.548264, 0.548264}, {0.539544, 0.539544}, {0.553365, 0.553365}, + {0.553365, 0.553365}, {0.539544, 0.539544}, {0.548264, 0.548264}, {0.609844, 0.609844}, {0.707784, 0.707784}, + {0.783184, 0.783184}, {0.783184, 0.783184}, {0.707784, 0.707784}, {0.609844, 0.609844}, {0.493826, 0.493826}, + {0.539544, 0.539544}, {0.563868, 0.563868}, {0.539544, 0.539544}, {0.493826, 0.493826}, {0.480431, 0.480431}, + {0.523682, 0.523682}, {0.591256, 0.591256}, {0.623579, 0.623579}, {0.591256, 0.591256}, {0.523682, 0.523682}, + {0.480431, 0.480431}, {0.548264, 0.548264}, {0.605743, 0.605743}, {0.605743, 0.605743}, {0.548264, 0.548264}, + {0.480431, 0.480431}, {0.452143, 0.452143}, {0.470981, 0.470981}, {0.500173, 0.500173}, {0.500173, 0.500173}, + {0.470981, 0.470981}, {0.452143, 0.452143}, {0.480431, 0.480431}, {0.694133, 0.694133}, {0.729468, 0.729468}, + {0.694133, 0.694133}, {0.609844, 0.609844}, {0.523682, 0.523682}, {0.470981, 0.470981}, {0.453616, 0.453616}, + {0.451742, 0.451742}, {0.453616, 0.453616}, {0.470981, 0.470981}, {0.523682, 0.523682}, {0.609844, 0.609844}, + {0.88663, 0.88663}, {0.88663, 0.88663}, {0.818533, 0.818533}, {0.707784, 0.707784}, {0.591256, 0.591256}, + {0.500173, 0.500173}, {0.451742, 0.451742}, {0.451742, 0.451742}, {0.500173, 0.500173}, {0.591256, 0.591256}, + {0.707784, 0.707784}, {0.818533, 0.818533}, {1.07132, 1.07132}, {1.03512, 1.03512}, {0.932431, 0.932431}, + {0.783184, 0.783184}, {0.623579, 0.623579}, {0.500173, 0.500173}, {0.453616, 0.453616}, {0.500173, 0.500173}, + {0.623579, 0.623579}, {0.783184, 0.783184}, {0.932431, 0.932431}, {1.03512, 1.03512}, {1.20157, 1.20157}, + {1.12608, 1.12608}, {0.978945, 0.978945}, {0.783184, 0.783184}, {0.591256, 0.591256}, {0.470981, 0.470981}, + {0.470981, 0.470981}, {0.591256, 0.591256}, {0.783184, 0.783184}, {0.978945, 0.978945}, {1.12608, 1.12608}, + {1.20157, 1.20157}, {1.2482, 1.2482}, {1.12608, 1.12608}, {0.932431, 0.932431}, {0.707784, 0.707784}, + {0.523682, 0.523682}, {0.452143, 0.452143}, {0.523682, 0.523682}, {0.707784, 0.707784}, {0.932431, 0.932431}, + {1.12608, 1.12608}, {1.2482, 1.2482}, {1.28874, 1.28874}, {1.20157, 1.20157}, {1.03512, 1.03512}, + {0.818533, 0.818533}, {0.609844, 0.609844}, {0.480431, 0.480431}, {0.480431, 0.480431}, {0.609844, 0.609844}, + {0.818533, 0.818533}, {1.03512, 1.03512}, {1.20157, 1.20157}, {1.28874, 1.28874}, {1.28874, 1.28874}, + {0.769316, 0.769316}, {0.658122, 0.658122}, {0.582843, 0.582843}, {0.548264, 0.548264}, {0.548264, 0.548264}, + {0.582843, 0.582843}, {0.658122, 0.658122}, {0.769316, 0.769316}, {0.88663, 0.88663}, {0.963245, 0.963245}, + {0.963245, 0.963245}, {0.88663, 0.88663}, {0.658122, 0.658122}, {0.6147, 0.6147}, {0.605743, 0.605743}, + {0.607289, 0.607289}, {0.605743, 0.605743}, {0.6147, 0.6147}, {0.658122, 0.658122}, {0.737555, 0.737555}, + {0.818533, 0.818533}, {0.852998, 0.852998}, {0.818533, 0.818533}, {0.737555, 0.737555}, {0.582843, 0.582843}, + {0.605743, 0.605743}, {0.635712, 0.635712}, {0.635712, 0.635712}, {0.605743, 0.605743}, {0.582843, 0.582843}, + {0.602155, 0.602155}, {0.658503, 0.658503}, {0.707784, 0.707784}, {0.707784, 0.707784}, {0.658503, 0.658503}, + {0.602155, 0.602155}, {0.548264, 0.548264}, {0.607289, 0.607289}, {0.635712, 0.635712}, {0.607289, 0.607289}, + {0.548264, 0.548264}, {0.511705, 0.511705}, {0.526036, 0.526036}, {0.568789, 0.568789}, {0.591256, 0.591256}, + {0.568789, 0.568789}, {0.526036, 0.526036}, {0.511705, 0.511705}, {0.548264, 0.548264}, {0.605743, 0.605743}, + {0.605743, 0.605743}, {0.548264, 0.548264}, {0.480431, 0.480431}, {0.452143, 0.452143}, {0.470981, 0.470981}, + {0.500173, 0.500173}, {0.500173, 0.500173}, {0.470981, 0.470981}, {0.452143, 0.452143}, {0.480431, 0.480431}, + {0.582843, 0.582843}, {0.6147, 0.6147}, {0.582843, 0.582843}, {0.511705, 0.511705}, {0.452143, 0.452143}, + {0.436014, 0.436014}, {0.451742, 0.451742}, {0.463318, 0.463318}, {0.451742, 0.451742}, {0.436014, 0.436014}, + {0.452143, 0.452143}, {0.511705, 0.511705}, {0.658122, 0.658122}, {0.658122, 0.658122}, {0.602155, 0.602155}, + {0.526036, 0.526036}, {0.470981, 0.470981}, {0.451742, 0.451742}, {0.452655, 0.452655}, {0.452655, 0.452655}, + {0.451742, 0.451742}, {0.470981, 0.470981}, {0.526036, 0.526036}, {0.602155, 0.602155}, {0.769316, 0.769316}, + {0.737555, 0.737555}, {0.658503, 0.658503}, {0.568789, 0.568789}, {0.500173, 0.500173}, {0.463318, 0.463318}, + {0.452655, 0.452655}, {0.463318, 0.463318}, {0.500173, 0.500173}, {0.568789, 0.568789}, {0.658503, 0.658503}, + {0.737555, 0.737555}, {0.88663, 0.88663}, {0.818533, 0.818533}, {0.707784, 0.707784}, {0.591256, 0.591256}, + {0.500173, 0.500173}, {0.451742, 0.451742}, {0.451742, 0.451742}, {0.500173, 0.500173}, {0.591256, 0.591256}, + {0.707784, 0.707784}, {0.818533, 0.818533}, {0.88663, 0.88663}, {0.963245, 0.963245}, {0.852998, 0.852998}, + {0.707784, 0.707784}, {0.568789, 0.568789}, {0.470981, 0.470981}, {0.436014, 0.436014}, {0.470981, 0.470981}, + {0.568789, 0.568789}, {0.707784, 0.707784}, {0.852998, 0.852998}, {0.963245, 0.963245}, {1.00443, 1.00443}, + {0.963245, 0.963245}, {0.818533, 0.818533}, {0.658503, 0.658503}, {0.526036, 0.526036}, {0.452143, 0.452143}, + {0.452143, 0.452143}, {0.526036, 0.526036}, {0.658503, 0.658503}, {0.818533, 0.818533}, {0.963245, 0.963245}, + {1.04938, 1.04938}, {1.04938, 1.04938}, {0.88663, 0.88663}, {0.737555, 0.737555}, {0.602155, 0.602155}, + {0.511705, 0.511705}, {0.480431, 0.480431}, {0.511705, 0.511705}, {0.602155, 0.602155}, {0.737555, 0.737555}, + {0.88663, 0.88663}, {1.00443, 1.00443}, {1.04938, 1.04938}, {1.00443, 1.00443}, {0.640116, 0.640116}, + {0.658122, 0.658122}, {0.694133, 0.694133}, {0.712138, 0.712138}, {0.694133, 0.694133}, {0.658122, 0.658122}, + {0.640116, 0.640116}, {0.658122, 0.658122}, {0.694133, 0.694133}, {0.712138, 0.712138}, {0.694133, 0.694133}, + {0.658122, 0.658122}, {0.658122, 0.658122}, {0.729468, 0.729468}, {0.783757, 0.783757}, {0.783757, 0.783757}, + {0.729468, 0.729468}, {0.658122, 0.658122}, {0.611522, 0.611522}, {0.602155, 0.602155}, {0.609844, 0.609844}, + {0.609844, 0.609844}, {0.602155, 0.602155}, {0.611522, 0.611522}, {0.694133, 0.694133}, {0.783757, 0.783757}, + {0.821272, 0.821272}, {0.783757, 0.783757}, {0.694133, 0.694133}, {0.602155, 0.602155}, {0.545337, 0.545337}, + {0.526036, 0.526036}, {0.523682, 0.523682}, {0.526036, 0.526036}, {0.545337, 0.545337}, {0.602155, 0.602155}, + {0.712138, 0.712138}, {0.783757, 0.783757}, {0.783757, 0.783757}, {0.712138, 0.712138}, {0.609844, 0.609844}, + {0.526036, 0.526036}, {0.483171, 0.483171}, {0.470981, 0.470981}, {0.470981, 0.470981}, {0.483171, 0.483171}, + {0.526036, 0.526036}, {0.609844, 0.609844}, {0.694133, 0.694133}, {0.729468, 0.729468}, {0.694133, 0.694133}, + {0.609844, 0.609844}, {0.523682, 0.523682}, {0.470981, 0.470981}, {0.453616, 0.453616}, {0.451742, 0.451742}, + {0.453616, 0.453616}, {0.470981, 0.470981}, {0.523682, 0.523682}, {0.609844, 0.609844}, {0.658122, 0.658122}, + {0.658122, 0.658122}, {0.602155, 0.602155}, {0.526036, 0.526036}, {0.470981, 0.470981}, {0.451742, 0.451742}, + {0.452655, 0.452655}, {0.452655, 0.452655}, {0.451742, 0.451742}, {0.470981, 0.470981}, {0.526036, 0.526036}, + {0.602155, 0.602155}, {0.640116, 0.640116}, {0.611522, 0.611522}, {0.545337, 0.545337}, {0.483171, 0.483171}, + {0.453616, 0.453616}, {0.452655, 0.452655}, {0.456673, 0.456673}, {0.452655, 0.452655}, {0.453616, 0.453616}, + {0.483171, 0.483171}, {0.545337, 0.545337}, {0.611522, 0.611522}, {0.658122, 0.658122}, {0.602155, 0.602155}, + {0.526036, 0.526036}, {0.470981, 0.470981}, {0.451742, 0.451742}, {0.452655, 0.452655}, {0.452655, 0.452655}, + {0.451742, 0.451742}, {0.470981, 0.470981}, {0.526036, 0.526036}, {0.602155, 0.602155}, {0.658122, 0.658122}, + {0.694133, 0.694133}, {0.609844, 0.609844}, {0.523682, 0.523682}, {0.470981, 0.470981}, {0.453616, 0.453616}, + {0.451742, 0.451742}, {0.453616, 0.453616}, {0.470981, 0.470981}, {0.523682, 0.523682}, {0.609844, 0.609844}, + {0.694133, 0.694133}, {0.729468, 0.729468}, {0.712138, 0.712138}, {0.609844, 0.609844}, {0.526036, 0.526036}, + {0.483171, 0.483171}, {0.470981, 0.470981}, {0.470981, 0.470981}, {0.483171, 0.483171}, {0.526036, 0.526036}, + {0.609844, 0.609844}, {0.712138, 0.712138}, {0.783757, 0.783757}, {0.783757, 0.783757}, {0.694133, 0.694133}, + {0.602155, 0.602155}, {0.545337, 0.545337}, {0.526036, 0.526036}, {0.523682, 0.523682}, {0.526036, 0.526036}, + {0.545337, 0.545337}, {0.602155, 0.602155}, {0.694133, 0.694133}, {0.783757, 0.783757}, {0.821272, 0.821272}, + {0.783757, 0.783757}, {0.658122, 0.658122}, {0.611522, 0.611522}, {0.602155, 0.602155}, {0.609844, 0.609844}, + {0.609844, 0.609844}, {0.602155, 0.602155}, {0.611522, 0.611522}, {0.658122, 0.658122}, {0.729468, 0.729468}, + {0.783757, 0.783757}, {0.783757, 0.783757}, {0.729468, 0.729468}, {0.769316, 0.769316}, {0.88663, 0.88663}, + {0.963245, 0.963245}, {0.963245, 0.963245}, {0.88663, 0.88663}, {0.769316, 0.769316}, {0.658122, 0.658122}, + {0.582843, 0.582843}, {0.548264, 0.548264}, {0.548264, 0.548264}, {0.582843, 0.582843}, {0.658122, 0.658122}, + {0.88663, 0.88663}, {1.00443, 1.00443}, {1.04938, 1.04938}, {1.00443, 1.00443}, {0.88663, 0.88663}, + {0.737555, 0.737555}, {0.602155, 0.602155}, {0.511705, 0.511705}, {0.480431, 0.480431}, {0.511705, 0.511705}, + {0.602155, 0.602155}, {0.737555, 0.737555}, {0.963245, 0.963245}, {1.04938, 1.04938}, {1.04938, 1.04938}, + {0.963245, 0.963245}, {0.818533, 0.818533}, {0.658503, 0.658503}, {0.526036, 0.526036}, {0.452143, 0.452143}, + {0.452143, 0.452143}, {0.526036, 0.526036}, {0.658503, 0.658503}, {0.818533, 0.818533}, {0.963245, 0.963245}, + {1.00443, 1.00443}, {0.963245, 0.963245}, {0.852998, 0.852998}, {0.707784, 0.707784}, {0.568789, 0.568789}, + {0.470981, 0.470981}, {0.436014, 0.436014}, {0.470981, 0.470981}, {0.568789, 0.568789}, {0.707784, 0.707784}, + {0.852998, 0.852998}, {0.88663, 0.88663}, {0.88663, 0.88663}, {0.818533, 0.818533}, {0.707784, 0.707784}, + {0.591256, 0.591256}, {0.500173, 0.500173}, {0.451742, 0.451742}, {0.451742, 0.451742}, {0.500173, 0.500173}, + {0.591256, 0.591256}, {0.707784, 0.707784}, {0.818533, 0.818533}, {0.769316, 0.769316}, {0.737555, 0.737555}, + {0.658503, 0.658503}, {0.568789, 0.568789}, {0.500173, 0.500173}, {0.463318, 0.463318}, {0.452655, 0.452655}, + {0.463318, 0.463318}, {0.500173, 0.500173}, {0.568789, 0.568789}, {0.658503, 0.658503}, {0.737555, 0.737555}, + {0.658122, 0.658122}, {0.602155, 0.602155}, {0.526036, 0.526036}, {0.470981, 0.470981}, {0.451742, 0.451742}, + {0.452655, 0.452655}, {0.452655, 0.452655}, {0.451742, 0.451742}, {0.470981, 0.470981}, {0.526036, 0.526036}, + {0.602155, 0.602155}, {0.658122, 0.658122}, {0.582843, 0.582843}, {0.511705, 0.511705}, {0.452143, 0.452143}, + {0.436014, 0.436014}, {0.451742, 0.451742}, {0.463318, 0.463318}, {0.451742, 0.451742}, {0.436014, 0.436014}, + {0.452143, 0.452143}, {0.511705, 0.511705}, {0.582843, 0.582843}, {0.6147, 0.6147}, {0.548264, 0.548264}, + {0.480431, 0.480431}, {0.452143, 0.452143}, {0.470981, 0.470981}, {0.500173, 0.500173}, {0.500173, 0.500173}, + {0.470981, 0.470981}, {0.452143, 0.452143}, {0.480431, 0.480431}, {0.548264, 0.548264}, {0.605743, 0.605743}, + {0.605743, 0.605743}, {0.548264, 0.548264}, {0.511705, 0.511705}, {0.526036, 0.526036}, {0.568789, 0.568789}, + {0.591256, 0.591256}, {0.568789, 0.568789}, {0.526036, 0.526036}, {0.511705, 0.511705}, {0.548264, 0.548264}, + {0.607289, 0.607289}, {0.635712, 0.635712}, {0.607289, 0.607289}, {0.582843, 0.582843}, {0.602155, 0.602155}, + {0.658503, 0.658503}, {0.707784, 0.707784}, {0.707784, 0.707784}, {0.658503, 0.658503}, {0.602155, 0.602155}, + {0.582843, 0.582843}, {0.605743, 0.605743}, {0.635712, 0.635712}, {0.635712, 0.635712}, {0.605743, 0.605743}, + {0.658122, 0.658122}, {0.737555, 0.737555}, {0.818533, 0.818533}, {0.852998, 0.852998}, {0.818533, 0.818533}, + {0.737555, 0.737555}, {0.658122, 0.658122}, {0.6147, 0.6147}, {0.605743, 0.605743}, {0.607289, 0.607289}, + {0.605743, 0.605743}, {0.6147, 0.6147}, {1.07132, 1.07132}, {1.20157, 1.20157}, {1.2482, 1.2482}, + {1.20157, 1.20157}, {1.07132, 1.07132}, {0.88663, 0.88663}, {0.694133, 0.694133}, {0.548264, 0.548264}, + {0.493826, 0.493826}, {0.548264, 0.548264}, {0.694133, 0.694133}, {0.88663, 0.88663}, {1.20157, 1.20157}, + {1.28874, 1.28874}, {1.28874, 1.28874}, {1.20157, 1.20157}, {1.03512, 1.03512}, {0.818533, 0.818533}, + {0.609844, 0.609844}, {0.480431, 0.480431}, {0.480431, 0.480431}, {0.609844, 0.609844}, {0.818533, 0.818533}, + {1.03512, 1.03512}, {1.2482, 1.2482}, {1.28874, 1.28874}, {1.2482, 1.2482}, {1.12608, 1.12608}, + {0.932431, 0.932431}, {0.707784, 0.707784}, {0.523682, 0.523682}, {0.452143, 0.452143}, {0.523682, 0.523682}, + {0.707784, 0.707784}, {0.932431, 0.932431}, {1.12608, 1.12608}, {1.20157, 1.20157}, {1.20157, 1.20157}, + {1.12608, 1.12608}, {0.978945, 0.978945}, {0.783184, 0.783184}, {0.591256, 0.591256}, {0.470981, 0.470981}, + {0.470981, 0.470981}, {0.591256, 0.591256}, {0.783184, 0.783184}, {0.978945, 0.978945}, {1.12608, 1.12608}, + {1.07132, 1.07132}, {1.03512, 1.03512}, {0.932431, 0.932431}, {0.783184, 0.783184}, {0.623579, 0.623579}, + {0.500173, 0.500173}, {0.453616, 0.453616}, {0.500173, 0.500173}, {0.623579, 0.623579}, {0.783184, 0.783184}, + {0.932431, 0.932431}, {1.03512, 1.03512}, {0.88663, 0.88663}, {0.818533, 0.818533}, {0.707784, 0.707784}, + {0.591256, 0.591256}, {0.500173, 0.500173}, {0.451742, 0.451742}, {0.451742, 0.451742}, {0.500173, 0.500173}, + {0.591256, 0.591256}, {0.707784, 0.707784}, {0.818533, 0.818533}, {0.88663, 0.88663}, {0.694133, 0.694133}, + {0.609844, 0.609844}, {0.523682, 0.523682}, {0.470981, 0.470981}, {0.453616, 0.453616}, {0.451742, 0.451742}, + {0.453616, 0.453616}, {0.470981, 0.470981}, {0.523682, 0.523682}, {0.609844, 0.609844}, {0.694133, 0.694133}, + {0.729468, 0.729468}, {0.548264, 0.548264}, {0.480431, 0.480431}, {0.452143, 0.452143}, {0.470981, 0.470981}, + {0.500173, 0.500173}, {0.500173, 0.500173}, {0.470981, 0.470981}, {0.452143, 0.452143}, {0.480431, 0.480431}, + {0.548264, 0.548264}, {0.605743, 0.605743}, {0.605743, 0.605743}, {0.493826, 0.493826}, {0.480431, 0.480431}, + {0.523682, 0.523682}, {0.591256, 0.591256}, {0.623579, 0.623579}, {0.591256, 0.591256}, {0.523682, 0.523682}, + {0.480431, 0.480431}, {0.493826, 0.493826}, {0.539544, 0.539544}, {0.563868, 0.563868}, {0.539544, 0.539544}, + {0.548264, 0.548264}, {0.609844, 0.609844}, {0.707784, 0.707784}, {0.783184, 0.783184}, {0.783184, 0.783184}, + {0.707784, 0.707784}, {0.609844, 0.609844}, {0.548264, 0.548264}, {0.539544, 0.539544}, {0.553365, 0.553365}, + {0.553365, 0.553365}, {0.539544, 0.539544}, {0.694133, 0.694133}, {0.818533, 0.818533}, {0.932431, 0.932431}, + {0.978945, 0.978945}, {0.932431, 0.932431}, {0.818533, 0.818533}, {0.694133, 0.694133}, {0.605743, 0.605743}, + {0.563868, 0.563868}, {0.553365, 0.553365}, {0.563868, 0.563868}, {0.605743, 0.605743}, {0.88663, 0.88663}, + {1.03512, 1.03512}, {1.12608, 1.12608}, {1.12608, 1.12608}, {1.03512, 1.03512}, {0.88663, 0.88663}, + {0.729468, 0.729468}, {0.605743, 0.605743}, {0.539544, 0.539544}, {0.539544, 0.539544}, {0.605743, 0.605743}, + {0.729468, 0.729468}, {1.36325, 1.36325}, {1.4377, 1.4377}, {1.4377, 1.4377}, {1.36325, 1.36325}, + {1.20157, 1.20157}, {0.963245, 0.963245}, {0.712138, 0.712138}, {0.548264, 0.548264}, {0.548264, 0.548264}, + {0.712138, 0.712138}, {0.963245, 0.963245}, {1.20157, 1.20157}, {1.4377, 1.4377}, {1.46763, 1.46763}, + {1.4377, 1.4377}, {1.33096, 1.33096}, {1.12608, 1.12608}, {0.852998, 0.852998}, {0.609844, 0.609844}, + {0.511705, 0.511705}, {0.609844, 0.609844}, {0.852998, 0.852998}, {1.12608, 1.12608}, {1.33096, 1.33096}, + {1.4377, 1.4377}, {1.4377, 1.4377}, {1.37517, 1.37517}, {1.22322, 1.22322}, {0.978945, 0.978945}, + {0.707784, 0.707784}, {0.526036, 0.526036}, {0.526036, 0.526036}, {0.707784, 0.707784}, {0.978945, 0.978945}, + {1.22322, 1.22322}, {1.37517, 1.37517}, {1.36325, 1.36325}, {1.33096, 1.33096}, {1.22322, 1.22322}, + {1.02987, 1.02987}, {0.783184, 0.783184}, {0.568789, 0.568789}, {0.483171, 0.483171}, {0.568789, 0.568789}, + {0.783184, 0.783184}, {1.02987, 1.02987}, {1.22322, 1.22322}, {1.33096, 1.33096}, {1.20157, 1.20157}, + {1.12608, 1.12608}, {0.978945, 0.978945}, {0.783184, 0.783184}, {0.591256, 0.591256}, {0.470981, 0.470981}, + {0.470981, 0.470981}, {0.591256, 0.591256}, {0.783184, 0.783184}, {0.978945, 0.978945}, {1.12608, 1.12608}, + {1.20157, 1.20157}, {0.963245, 0.963245}, {0.852998, 0.852998}, {0.707784, 0.707784}, {0.568789, 0.568789}, + {0.470981, 0.470981}, {0.436014, 0.436014}, {0.470981, 0.470981}, {0.568789, 0.568789}, {0.707784, 0.707784}, + {0.852998, 0.852998}, {0.963245, 0.963245}, {1.00443, 1.00443}, {0.712138, 0.712138}, {0.609844, 0.609844}, + {0.526036, 0.526036}, {0.483171, 0.483171}, {0.470981, 0.470981}, {0.470981, 0.470981}, {0.483171, 0.483171}, + {0.526036, 0.526036}, {0.609844, 0.609844}, {0.712138, 0.712138}, {0.783757, 0.783757}, {0.783757, 0.783757}, + {0.548264, 0.548264}, {0.511705, 0.511705}, {0.526036, 0.526036}, {0.568789, 0.568789}, {0.591256, 0.591256}, + {0.568789, 0.568789}, {0.526036, 0.526036}, {0.511705, 0.511705}, {0.548264, 0.548264}, {0.607289, 0.607289}, + {0.635712, 0.635712}, {0.607289, 0.607289}, {0.548264, 0.548264}, {0.609844, 0.609844}, {0.707784, 0.707784}, + {0.783184, 0.783184}, {0.783184, 0.783184}, {0.707784, 0.707784}, {0.609844, 0.609844}, {0.548264, 0.548264}, + {0.539544, 0.539544}, {0.553365, 0.553365}, {0.553365, 0.553365}, {0.539544, 0.539544}, {0.712138, 0.712138}, + {0.852998, 0.852998}, {0.978945, 0.978945}, {1.02987, 1.02987}, {0.978945, 0.978945}, {0.852998, 0.852998}, + {0.712138, 0.712138}, {0.607289, 0.607289}, {0.553365, 0.553365}, {0.538451, 0.538451}, {0.553365, 0.553365}, + {0.607289, 0.607289}, {0.963245, 0.963245}, {1.12608, 1.12608}, {1.22322, 1.22322}, {1.22322, 1.22322}, + {1.12608, 1.12608}, {0.963245, 0.963245}, {0.783757, 0.783757}, {0.635712, 0.635712}, {0.553365, 0.553365}, + {0.553365, 0.553365}, {0.635712, 0.635712}, {0.783757, 0.783757}, {1.20157, 1.20157}, {1.33096, 1.33096}, + {1.37517, 1.37517}, {1.33096, 1.33096}, {1.20157, 1.20157}, {1.00443, 1.00443}, {0.783757, 0.783757}, + {0.607289, 0.607289}, {0.539544, 0.539544}, {0.607289, 0.607289}, {0.783757, 0.783757}, {1.00443, 1.00443}, + {1.51591, 1.51591}, {1.53175, 1.53175}, {1.51591, 1.51591}, {1.4377, 1.4377}, {1.2482, 1.2482}, + {0.963245, 0.963245}, {0.694133, 0.694133}, {0.582843, 0.582843}, {0.694133, 0.694133}, {0.963245, 0.963245}, + {1.2482, 1.2482}, {1.4377, 1.4377}, {1.53175, 1.53175}, {1.53175, 1.53175}, {1.49905, 1.49905}, + {1.37517, 1.37517}, {1.12608, 1.12608}, {0.818533, 0.818533}, {0.602155, 0.602155}, {0.602155, 0.602155}, + {0.818533, 0.818533}, {1.12608, 1.12608}, {1.37517, 1.37517}, {1.49905, 1.49905}, {1.51591, 1.51591}, + {1.49905, 1.49905}, {1.41772, 1.41772}, {1.22322, 1.22322}, {0.932431, 0.932431}, {0.658503, 0.658503}, + {0.545337, 0.545337}, {0.658503, 0.658503}, {0.932431, 0.932431}, {1.22322, 1.22322}, {1.41772, 1.41772}, + {1.49905, 1.49905}, {1.4377, 1.4377}, {1.37517, 1.37517}, {1.22322, 1.22322}, {0.978945, 0.978945}, + {0.707784, 0.707784}, {0.526036, 0.526036}, {0.526036, 0.526036}, {0.707784, 0.707784}, {0.978945, 0.978945}, + {1.22322, 1.22322}, {1.37517, 1.37517}, {1.4377, 1.4377}, {1.2482, 1.2482}, {1.12608, 1.12608}, + {0.932431, 0.932431}, {0.707784, 0.707784}, {0.523682, 0.523682}, {0.452143, 0.452143}, {0.523682, 0.523682}, + {0.707784, 0.707784}, {0.932431, 0.932431}, {1.12608, 1.12608}, {1.2482, 1.2482}, {1.28874, 1.28874}, + {0.963245, 0.963245}, {0.818533, 0.818533}, {0.658503, 0.658503}, {0.526036, 0.526036}, {0.452143, 0.452143}, + {0.452143, 0.452143}, {0.526036, 0.526036}, {0.658503, 0.658503}, {0.818533, 0.818533}, {0.963245, 0.963245}, + {1.04938, 1.04938}, {1.04938, 1.04938}, {0.694133, 0.694133}, {0.602155, 0.602155}, {0.545337, 0.545337}, + {0.526036, 0.526036}, {0.523682, 0.523682}, {0.526036, 0.526036}, {0.545337, 0.545337}, {0.602155, 0.602155}, + {0.694133, 0.694133}, {0.783757, 0.783757}, {0.821272, 0.821272}, {0.783757, 0.783757}, {0.582843, 0.582843}, + {0.602155, 0.602155}, {0.658503, 0.658503}, {0.707784, 0.707784}, {0.707784, 0.707784}, {0.658503, 0.658503}, + {0.602155, 0.602155}, {0.582843, 0.582843}, {0.605743, 0.605743}, {0.635712, 0.635712}, {0.635712, 0.635712}, + {0.605743, 0.605743}, {0.694133, 0.694133}, {0.818533, 0.818533}, {0.932431, 0.932431}, {0.978945, 0.978945}, + {0.932431, 0.932431}, {0.818533, 0.818533}, {0.694133, 0.694133}, {0.605743, 0.605743}, {0.563868, 0.563868}, + {0.553365, 0.553365}, {0.563868, 0.563868}, {0.605743, 0.605743}, {0.963245, 0.963245}, {1.12608, 1.12608}, + {1.22322, 1.22322}, {1.22322, 1.22322}, {1.12608, 1.12608}, {0.963245, 0.963245}, {0.783757, 0.783757}, + {0.635712, 0.635712}, {0.553365, 0.553365}, {0.553365, 0.553365}, {0.635712, 0.635712}, {0.783757, 0.783757}, + {1.2482, 1.2482}, {1.37517, 1.37517}, {1.41772, 1.41772}, {1.37517, 1.37517}, {1.2482, 1.2482}, + {1.04938, 1.04938}, {0.821272, 0.821272}, {0.635712, 0.635712}, {0.563868, 0.563868}, {0.635712, 0.635712}, + {0.821272, 0.821272}, {1.04938, 1.04938}, {1.4377, 1.4377}, {1.49905, 1.49905}, {1.49905, 1.49905}, + {1.4377, 1.4377}, {1.28874, 1.28874}, {1.04938, 1.04938}, {0.783757, 0.783757}, {0.605743, 0.605743}, + {0.605743, 0.605743}, {0.783757, 0.783757}, {1.04938, 1.04938}, {1.28874, 1.28874}, {1.53938, 1.53938}, + {1.53938, 1.53938}, {1.53175, 1.53175}, {1.4377, 1.4377}, {1.20157, 1.20157}, {0.88663, 0.88663}, + {0.658122, 0.658122}, {0.658122, 0.658122}, {0.88663, 0.88663}, {1.20157, 1.20157}, {1.4377, 1.4377}, + {1.53175, 1.53175}, {1.53938, 1.53938}, {1.5411, 1.5411}, {1.49905, 1.49905}, {1.33096, 1.33096}, + {1.03512, 1.03512}, {0.737555, 0.737555}, {0.611522, 0.611522}, {0.737555, 0.737555}, {1.03512, 1.03512}, + {1.33096, 1.33096}, {1.49905, 1.49905}, {1.5411, 1.5411}, {1.53175, 1.53175}, {1.49905, 1.49905}, + {1.37517, 1.37517}, {1.12608, 1.12608}, {0.818533, 0.818533}, {0.602155, 0.602155}, {0.602155, 0.602155}, + {0.818533, 0.818533}, {1.12608, 1.12608}, {1.37517, 1.37517}, {1.49905, 1.49905}, {1.53175, 1.53175}, + {1.4377, 1.4377}, {1.33096, 1.33096}, {1.12608, 1.12608}, {0.852998, 0.852998}, {0.609844, 0.609844}, + {0.511705, 0.511705}, {0.609844, 0.609844}, {0.852998, 0.852998}, {1.12608, 1.12608}, {1.33096, 1.33096}, + {1.4377, 1.4377}, {1.46763, 1.46763}, {1.20157, 1.20157}, {1.03512, 1.03512}, {0.818533, 0.818533}, + {0.609844, 0.609844}, {0.480431, 0.480431}, {0.480431, 0.480431}, {0.609844, 0.609844}, {0.818533, 0.818533}, + {1.03512, 1.03512}, {1.20157, 1.20157}, {1.28874, 1.28874}, {1.28874, 1.28874}, {0.88663, 0.88663}, + {0.737555, 0.737555}, {0.602155, 0.602155}, {0.511705, 0.511705}, {0.480431, 0.480431}, {0.511705, 0.511705}, + {0.602155, 0.602155}, {0.737555, 0.737555}, {0.88663, 0.88663}, {1.00443, 1.00443}, {1.04938, 1.04938}, + {1.00443, 1.00443}, {0.658122, 0.658122}, {0.611522, 0.611522}, {0.602155, 0.602155}, {0.609844, 0.609844}, + {0.609844, 0.609844}, {0.602155, 0.602155}, {0.611522, 0.611522}, {0.658122, 0.658122}, {0.729468, 0.729468}, + {0.783757, 0.783757}, {0.783757, 0.783757}, {0.729468, 0.729468}, {0.658122, 0.658122}, {0.737555, 0.737555}, + {0.818533, 0.818533}, {0.852998, 0.852998}, {0.818533, 0.818533}, {0.737555, 0.737555}, {0.658122, 0.658122}, + {0.6147, 0.6147}, {0.605743, 0.605743}, {0.607289, 0.607289}, {0.605743, 0.605743}, {0.6147, 0.6147}, + {0.88663, 0.88663}, {1.03512, 1.03512}, {1.12608, 1.12608}, {1.12608, 1.12608}, {1.03512, 1.03512}, + {0.88663, 0.88663}, {0.729468, 0.729468}, {0.605743, 0.605743}, {0.539544, 0.539544}, {0.539544, 0.539544}, + {0.605743, 0.605743}, {0.729468, 0.729468}, {1.20157, 1.20157}, {1.33096, 1.33096}, {1.37517, 1.37517}, + {1.33096, 1.33096}, {1.20157, 1.20157}, {1.00443, 1.00443}, {0.783757, 0.783757}, {0.607289, 0.607289}, + {0.539544, 0.539544}, {0.607289, 0.607289}, {0.783757, 0.783757}, {1.00443, 1.00443}, {1.4377, 1.4377}, + {1.49905, 1.49905}, {1.49905, 1.49905}, {1.4377, 1.4377}, {1.28874, 1.28874}, {1.04938, 1.04938}, + {0.783757, 0.783757}, {0.605743, 0.605743}, {0.605743, 0.605743}, {0.783757, 0.783757}, {1.04938, 1.04938}, + {1.28874, 1.28874}, {1.53175, 1.53175}, {1.5411, 1.5411}, {1.53175, 1.53175}, {1.46763, 1.46763}, + {1.28874, 1.28874}, {1.00443, 1.00443}, {0.729468, 0.729468}, {0.6147, 0.6147}, {0.729468, 0.729468}, + {1.00443, 1.00443}, {1.28874, 1.28874}, {1.46763, 1.46763}}; - std::vector in_spin = { - -13.9672, -9.92124, -3.66971, -1.07073, -0.364006, -0.172121, -0.140822, -0.172121, -0.364006, -1.07073, -3.66971, -9.92124, -9.92124, -5.06104, -1.68134, -0.688584, -0.473447, -0.497191, -0.497191, -0.473447, -0.688584, -1.68134, -5.06104, -9.92124, -3.66971, -1.68134, -0.833845, -0.688584, -0.884169, -1.01167, -0.884169, -0.688584, -0.833845, -1.68134, -3.66971, -5.01899, -1.07073, -0.688584, -0.688584, -1.07073, -1.58454, -1.58454, -1.07073, -0.688584, -0.688584, -1.07073, -1.58454, -1.58454, -0.364006, -0.473447, -0.884169, -1.58454, -2.04137, -1.58454, -0.884169, -0.473447, -0.364006, -0.478208, -0.534359, -0.478208, -0.172121, -0.497191, -1.01167, -1.58454, -1.58454, -1.01167, -0.497191, -0.172121, -0.0898249, -0.0574045, -0.0574045, -0.0898249, -0.140822, -0.497191, -0.884169, -1.07073, -0.884169, -0.497191, -0.140822, 0.0466734, 0.131457, 0.183936, 0.131457, 0.0466734, -0.172121, -0.473447, -0.688584, -0.688584, -0.473447, -0.172121, 0.0466734, 0.212837, 0.282301, 0.282301, 0.212837, 0.0466734, -0.364006, -0.688584, -0.833845, -0.688584, -0.364006, -0.0898249, 0.131457, 0.282301, 0.298703, 0.282301, 0.131457, -0.0898249, -1.07073, -1.68134, -1.68134, -1.07073, -0.478208, -0.0574045, 0.183936, 0.282301, 0.282301, 0.183936, -0.0574045, -0.478208, -3.66971, -5.06104, -3.66971, -1.58454, -0.534359, -0.0574045, 0.131457, 0.212837, 0.131457, -0.0574045, -0.534359, -1.58454, -9.92124, -9.92124, -5.01899, -1.58454, -0.478208, -0.0898249, 0.0466734, 0.0466734, -0.0898249, -0.478208, -1.58454, -5.01899, -9.92124, -5.06104, -1.68134, -0.688584, -0.473447, -0.497191, -0.497191, -0.473447, -0.688584, -1.68134, -5.06104, -9.92124, -5.06104, -2.14513, -0.970043, -0.833845, -1.09721, -1.26843, -1.09721, -0.833845, -0.970043, -2.14513, -5.06104, -7.0181, -1.68134, -0.970043, -0.970043, -1.68134, -2.70553, -2.70553, -1.68134, -0.970043, -0.970043, -1.68134, -2.70553, -2.70553, -0.688584, -0.833845, -1.68134, -3.66971, -5.01899, -3.66971, -1.68134, -0.833845, -0.688584, -0.884169, -1.01167, -0.884169, -0.473447, -1.09721, -2.70553, -5.01899, -5.01899, -2.70553, -1.09721, -0.473447, -0.301091, -0.308926, -0.308926, -0.301091, -0.497191, -1.26843, -2.70553, -3.66971, -2.70553, -1.26843, -0.497191, -0.132863, -0.0171081, 0.0393914, -0.0171081, -0.132863, -0.497191, -1.09721, -1.68134, -1.68134, -1.09721, -0.497191, -0.0948296, 0.0987547, 0.2008, 0.2008, 0.0987547, -0.0948296, -0.473447, -0.833845, -0.970043, -0.833845, -0.473447, -0.132863, 0.0987547, 0.257126, 0.292556, 0.257126, 0.0987547, -0.132863, -0.688584, -0.970043, -0.970043, -0.688584, -0.301091, -0.0171081, 0.2008, 0.292556, 0.292556, 0.2008, -0.0171081, -0.301091, -1.68134, -2.14513, -1.68134, -0.884169, -0.308926, 0.0393914, 0.2008, 0.257126, 0.2008, 0.0393914, -0.308926, -0.884169, -5.06104, -5.06104, -2.70553, -1.01167, -0.308926, -0.0171081, 0.0987547, 0.0987547, -0.0171081, -0.308926, -1.01167, -2.70553, -9.92124, -7.0181, -2.70553, -0.884169, -0.301091, -0.132863, -0.0948296, -0.132863, -0.301091, -0.884169, -2.70553, -7.0181, -3.66971, -1.68134, -0.833845, -0.688584, -0.884169, -1.01167, -0.884169, -0.688584, -0.833845, -1.68134, -3.66971, -5.01899, -1.68134, -0.970043, -0.970043, -1.68134, -2.70553, -2.70553, -1.68134, -0.970043, -0.970043, -1.68134, -2.70553, -2.70553, -0.833845, -0.970043, -2.14513, -5.06104, -7.0181, -5.06104, -2.14513, -0.970043, -0.833845, -1.09721, -1.26843, -1.09721, -0.688584, -1.68134, -5.06104, -9.92124, -9.92124, -5.06104, -1.68134, -0.688584, -0.473447, -0.497191, -0.497191, -0.473447, -0.884169, -2.70553, -7.0181, -9.92124, -7.0181, -2.70553, -0.884169, -0.301091, -0.132863, -0.0948296, -0.132863, -0.301091, -1.01167, -2.70553, -5.06104, -5.06104, -2.70553, -1.01167, -0.308926, -0.0171081, 0.0987547, 0.0987547, -0.0171081, -0.308926, -0.884169, -1.68134, -2.14513, -1.68134, -0.884169, -0.308926, 0.0393914, 0.2008, 0.257126, 0.2008, 0.0393914, -0.308926, -0.688584, -0.970043, -0.970043, -0.688584, -0.301091, -0.0171081, 0.2008, 0.292556, 0.292556, 0.2008, -0.0171081, -0.301091, -0.833845, -0.970043, -0.833845, -0.473447, -0.132863, 0.0987547, 0.257126, 0.292556, 0.257126, 0.0987547, -0.132863, -0.473447, -1.68134, -1.68134, -1.09721, -0.497191, -0.0948296, 0.0987547, 0.2008, 0.2008, 0.0987547, -0.0948296, -0.497191, -1.09721, -3.66971, -2.70553, -1.26843, -0.497191, -0.132863, -0.0171081, 0.0393914, -0.0171081, -0.132863, -0.497191, -1.26843, -2.70553, -5.01899, -2.70553, -1.09721, -0.473447, -0.301091, -0.308926, -0.308926, -0.301091, -0.473447, -1.09721, -2.70553, -5.01899, -1.07073, -0.688584, -0.688584, -1.07073, -1.58454, -1.58454, -1.07073, -0.688584, -0.688584, -1.07073, -1.58454, -1.58454, -0.688584, -0.833845, -1.68134, -3.66971, -5.01899, -3.66971, -1.68134, -0.833845, -0.688584, -0.884169, -1.01167, -0.884169, -0.688584, -1.68134, -5.06104, -9.92124, -9.92124, -5.06104, -1.68134, -0.688584, -0.473447, -0.497191, -0.497191, -0.473447, -1.07073, -3.66971, -9.92124, -13.9672, -9.92124, -3.66971, -1.07073, -0.364006, -0.172121, -0.140822, -0.172121, -0.364006, -1.58454, -5.01899, -9.92124, -9.92124, -5.01899, -1.58454, -0.478208, -0.0898249, 0.0466734, 0.0466734, -0.0898249, -0.478208, -1.58454, -3.66971, -5.06104, -3.66971, -1.58454, -0.534359, -0.0574045, 0.131457, 0.212837, 0.131457, -0.0574045, -0.534359, -1.07073, -1.68134, -1.68134, -1.07073, -0.478208, -0.0574045, 0.183936, 0.282301, 0.282301, 0.183936, -0.0574045, -0.478208, -0.688584, -0.833845, -0.688584, -0.364006, -0.0898249, 0.131457, 0.282301, 0.298703, 0.282301, 0.131457, -0.0898249, -0.364006, -0.688584, -0.688584, -0.473447, -0.172121, 0.0466734, 0.212837, 0.282301, 0.282301, 0.212837, 0.0466734, -0.172121, -0.473447, -1.07073, -0.884169, -0.497191, -0.140822, 0.0466734, 0.131457, 0.183936, 0.131457, 0.0466734, -0.140822, -0.497191, -0.884169, -1.58454, -1.01167, -0.497191, -0.172121, -0.0898249, -0.0574045, -0.0574045, -0.0898249, -0.172121, -0.497191, -1.01167, -1.58454, -1.58454, -0.884169, -0.473447, -0.364006, -0.478208, -0.534359, -0.478208, -0.364006, -0.473447, -0.884169, -1.58454, -2.04137, -0.364006, -0.473447, -0.884169, -1.58454, -2.04137, -1.58454, -0.884169, -0.473447, -0.364006, -0.478208, -0.534359, -0.478208, -0.473447, -1.09721, -2.70553, -5.01899, -5.01899, -2.70553, -1.09721, -0.473447, -0.301091, -0.308926, -0.308926, -0.301091, -0.884169, -2.70553, -7.0181, -9.92124, -7.0181, -2.70553, -0.884169, -0.301091, -0.132863, -0.0948296, -0.132863, -0.301091, -1.58454, -5.01899, -9.92124, -9.92124, -5.01899, -1.58454, -0.478208, -0.0898249, 0.0466734, 0.0466734, -0.0898249, -0.478208, -2.04137, -5.01899, -7.0181, -5.01899, -2.04137, -0.657074, -0.115021, 0.100083, 0.200702, 0.100083, -0.115021, -0.657074, -1.58454, -2.70553, -2.70553, -1.58454, -0.657074, -0.110088, 0.141779, 0.281572, 0.281572, 0.141779, -0.110088, -0.657074, -0.884169, -1.09721, -0.884169, -0.478208, -0.115021, 0.141779, 0.279821, 0.330283, 0.279821, 0.141779, -0.115021, -0.478208, -0.473447, -0.473447, -0.301091, -0.0898249, 0.100083, 0.281572, 0.330283, 0.330283, 0.281572, 0.100083, -0.0898249, -0.301091, -0.364006, -0.301091, -0.132863, 0.0466734, 0.200702, 0.281572, 0.279821, 0.281572, 0.200702, 0.0466734, -0.132863, -0.301091, -0.478208, -0.308926, -0.0948296, 0.0466734, 0.100083, 0.141779, 0.141779, 0.100083, 0.0466734, -0.0948296, -0.308926, -0.478208, -0.534359, -0.308926, -0.132863, -0.0898249, -0.115021, -0.110088, -0.115021, -0.0898249, -0.132863, -0.308926, -0.534359, -0.657074, -0.478208, -0.301091, -0.301091, -0.478208, -0.657074, -0.657074, -0.478208, -0.301091, -0.301091, -0.478208, -0.657074, -0.657074, -0.172121, -0.497191, -1.01167, -1.58454, -1.58454, -1.01167, -0.497191, -0.172121, -0.0898249, -0.0574045, -0.0574045, -0.0898249, -0.497191, -1.26843, -2.70553, -3.66971, -2.70553, -1.26843, -0.497191, -0.132863, -0.0171081, 0.0393914, -0.0171081, -0.132863, -1.01167, -2.70553, -5.06104, -5.06104, -2.70553, -1.01167, -0.308926, -0.0171081, 0.0987547, 0.0987547, -0.0171081, -0.308926, -1.58454, -3.66971, -5.06104, -3.66971, -1.58454, -0.534359, -0.0574045, 0.131457, 0.212837, 0.131457, -0.0574045, -0.534359, -1.58454, -2.70553, -2.70553, -1.58454, -0.657074, -0.110088, 0.141779, 0.281572, 0.281572, 0.141779, -0.110088, -0.657074, -1.01167, -1.26843, -1.01167, -0.534359, -0.110088, 0.139622, 0.270514, 0.359369, 0.270514, 0.139622, -0.110088, -0.534359, -0.497191, -0.497191, -0.308926, -0.0574045, 0.141779, 0.270514, 0.357713, 0.357713, 0.270514, 0.141779, -0.0574045, -0.308926, -0.172121, -0.132863, -0.0171081, 0.131457, 0.281572, 0.359369, 0.357713, 0.359369, 0.281572, 0.131457, -0.0171081, -0.132863, -0.0898249, -0.0171081, 0.0987547, 0.212837, 0.281572, 0.270514, 0.270514, 0.281572, 0.212837, 0.0987547, -0.0171081, -0.0898249, -0.0574045, 0.0393914, 0.0987547, 0.131457, 0.141779, 0.139622, 0.141779, 0.131457, 0.0987547, 0.0393914, -0.0574045, -0.115021, -0.0574045, -0.0171081, -0.0171081, -0.0574045, -0.110088, -0.110088, -0.0574045, -0.0171081, -0.0171081, -0.0574045, -0.110088, -0.110088, -0.0898249, -0.132863, -0.308926, -0.534359, -0.657074, -0.534359, -0.308926, -0.132863, -0.0898249, -0.115021, -0.110088, -0.115021, -0.140822, -0.497191, -0.884169, -1.07073, -0.884169, -0.497191, -0.140822, 0.0466734, 0.131457, 0.183936, 0.131457, 0.0466734, -0.497191, -1.09721, -1.68134, -1.68134, -1.09721, -0.497191, -0.0948296, 0.0987547, 0.2008, 0.2008, 0.0987547, -0.0948296, -0.884169, -1.68134, -2.14513, -1.68134, -0.884169, -0.308926, 0.0393914, 0.2008, 0.257126, 0.2008, 0.0393914, -0.308926, -1.07073, -1.68134, -1.68134, -1.07073, -0.478208, -0.0574045, 0.183936, 0.282301, 0.282301, 0.183936, -0.0574045, -0.478208, -0.884169, -1.09721, -0.884169, -0.478208, -0.115021, 0.141779, 0.279821, 0.330283, 0.279821, 0.141779, -0.115021, -0.478208, -0.497191, -0.497191, -0.308926, -0.0574045, 0.141779, 0.270514, 0.357713, 0.357713, 0.270514, 0.141779, -0.0574045, -0.308926, -0.140822, -0.0948296, 0.0393914, 0.183936, 0.279821, 0.357713, 0.396585, 0.357713, 0.279821, 0.183936, 0.0393914, -0.0948296, 0.0466734, 0.0987547, 0.2008, 0.282301, 0.330283, 0.357713, 0.357713, 0.330283, 0.282301, 0.2008, 0.0987547, 0.0466734, 0.131457, 0.2008, 0.257126, 0.282301, 0.279821, 0.270514, 0.279821, 0.282301, 0.257126, 0.2008, 0.131457, 0.100083, 0.183936, 0.2008, 0.2008, 0.183936, 0.141779, 0.141779, 0.183936, 0.2008, 0.2008, 0.183936, 0.141779, 0.141779, 0.131457, 0.0987547, 0.0393914, -0.0574045, -0.115021, -0.0574045, 0.0393914, 0.0987547, 0.131457, 0.141779, 0.139622, 0.141779, 0.0466734, -0.0948296, -0.308926, -0.478208, -0.478208, -0.308926, -0.0948296, 0.0466734, 0.100083, 0.141779, 0.141779, 0.100083, -0.172121, -0.473447, -0.688584, -0.688584, -0.473447, -0.172121, 0.0466734, 0.212837, 0.282301, 0.282301, 0.212837, 0.0466734, -0.473447, -0.833845, -0.970043, -0.833845, -0.473447, -0.132863, 0.0987547, 0.257126, 0.292556, 0.257126, 0.0987547, -0.132863, -0.688584, -0.970043, -0.970043, -0.688584, -0.301091, -0.0171081, 0.2008, 0.292556, 0.292556, 0.2008, -0.0171081, -0.301091, -0.688584, -0.833845, -0.688584, -0.364006, -0.0898249, 0.131457, 0.282301, 0.298703, 0.282301, 0.131457, -0.0898249, -0.364006, -0.473447, -0.473447, -0.301091, -0.0898249, 0.100083, 0.281572, 0.330283, 0.330283, 0.281572, 0.100083, -0.0898249, -0.301091, -0.172121, -0.132863, -0.0171081, 0.131457, 0.281572, 0.359369, 0.357713, 0.359369, 0.281572, 0.131457, -0.0171081, -0.132863, 0.0466734, 0.0987547, 0.2008, 0.282301, 0.330283, 0.357713, 0.357713, 0.330283, 0.282301, 0.2008, 0.0987547, 0.0466734, 0.212837, 0.257126, 0.292556, 0.298703, 0.330283, 0.359369, 0.330283, 0.298703, 0.292556, 0.257126, 0.212837, 0.200702, 0.282301, 0.292556, 0.292556, 0.282301, 0.281572, 0.281572, 0.282301, 0.292556, 0.292556, 0.282301, 0.281572, 0.281572, 0.282301, 0.257126, 0.2008, 0.131457, 0.100083, 0.131457, 0.2008, 0.257126, 0.282301, 0.279821, 0.270514, 0.279821, 0.212837, 0.0987547, -0.0171081, -0.0898249, -0.0898249, -0.0171081, 0.0987547, 0.212837, 0.281572, 0.270514, 0.270514, 0.281572, 0.0466734, -0.132863, -0.301091, -0.364006, -0.301091, -0.132863, 0.0466734, 0.200702, 0.281572, 0.279821, 0.281572, 0.200702, -0.364006, -0.688584, -0.833845, -0.688584, -0.364006, -0.0898249, 0.131457, 0.282301, 0.298703, 0.282301, 0.131457, -0.0898249, -0.688584, -0.970043, -0.970043, -0.688584, -0.301091, -0.0171081, 0.2008, 0.292556, 0.292556, 0.2008, -0.0171081, -0.301091, -0.833845, -0.970043, -0.833845, -0.473447, -0.132863, 0.0987547, 0.257126, 0.292556, 0.257126, 0.0987547, -0.132863, -0.473447, -0.688584, -0.688584, -0.473447, -0.172121, 0.0466734, 0.212837, 0.282301, 0.282301, 0.212837, 0.0466734, -0.172121, -0.473447, -0.364006, -0.301091, -0.132863, 0.0466734, 0.200702, 0.281572, 0.279821, 0.281572, 0.200702, 0.0466734, -0.132863, -0.301091, -0.0898249, -0.0171081, 0.0987547, 0.212837, 0.281572, 0.270514, 0.270514, 0.281572, 0.212837, 0.0987547, -0.0171081, -0.0898249, 0.131457, 0.2008, 0.257126, 0.282301, 0.279821, 0.270514, 0.279821, 0.282301, 0.257126, 0.2008, 0.131457, 0.100083, 0.282301, 0.292556, 0.292556, 0.282301, 0.281572, 0.281572, 0.282301, 0.292556, 0.292556, 0.282301, 0.281572, 0.281572, 0.298703, 0.292556, 0.257126, 0.212837, 0.200702, 0.212837, 0.257126, 0.292556, 0.298703, 0.330283, 0.359369, 0.330283, 0.282301, 0.2008, 0.0987547, 0.0466734, 0.0466734, 0.0987547, 0.2008, 0.282301, 0.330283, 0.357713, 0.357713, 0.330283, 0.131457, -0.0171081, -0.132863, -0.172121, -0.132863, -0.0171081, 0.131457, 0.281572, 0.359369, 0.357713, 0.359369, 0.281572, -0.0898249, -0.301091, -0.473447, -0.473447, -0.301091, -0.0898249, 0.100083, 0.281572, 0.330283, 0.330283, 0.281572, 0.100083, -1.07073, -1.68134, -1.68134, -1.07073, -0.478208, -0.0574045, 0.183936, 0.282301, 0.282301, 0.183936, -0.0574045, -0.478208, -1.68134, -2.14513, -1.68134, -0.884169, -0.308926, 0.0393914, 0.2008, 0.257126, 0.2008, 0.0393914, -0.308926, -0.884169, -1.68134, -1.68134, -1.09721, -0.497191, -0.0948296, 0.0987547, 0.2008, 0.2008, 0.0987547, -0.0948296, -0.497191, -1.09721, -1.07073, -0.884169, -0.497191, -0.140822, 0.0466734, 0.131457, 0.183936, 0.131457, 0.0466734, -0.140822, -0.497191, -0.884169, -0.478208, -0.308926, -0.0948296, 0.0466734, 0.100083, 0.141779, 0.141779, 0.100083, 0.0466734, -0.0948296, -0.308926, -0.478208, -0.0574045, 0.0393914, 0.0987547, 0.131457, 0.141779, 0.139622, 0.141779, 0.131457, 0.0987547, 0.0393914, -0.0574045, -0.115021, 0.183936, 0.2008, 0.2008, 0.183936, 0.141779, 0.141779, 0.183936, 0.2008, 0.2008, 0.183936, 0.141779, 0.141779, 0.282301, 0.257126, 0.2008, 0.131457, 0.100083, 0.131457, 0.2008, 0.257126, 0.282301, 0.279821, 0.270514, 0.279821, 0.282301, 0.2008, 0.0987547, 0.0466734, 0.0466734, 0.0987547, 0.2008, 0.282301, 0.330283, 0.357713, 0.357713, 0.330283, 0.183936, 0.0393914, -0.0948296, -0.140822, -0.0948296, 0.0393914, 0.183936, 0.279821, 0.357713, 0.396585, 0.357713, 0.279821, -0.0574045, -0.308926, -0.497191, -0.497191, -0.308926, -0.0574045, 0.141779, 0.270514, 0.357713, 0.357713, 0.270514, 0.141779, -0.478208, -0.884169, -1.09721, -0.884169, -0.478208, -0.115021, 0.141779, 0.279821, 0.330283, 0.279821, 0.141779, -0.115021, -3.66971, -5.06104, -3.66971, -1.58454, -0.534359, -0.0574045, 0.131457, 0.212837, 0.131457, -0.0574045, -0.534359, -1.58454, -5.06104, -5.06104, -2.70553, -1.01167, -0.308926, -0.0171081, 0.0987547, 0.0987547, -0.0171081, -0.308926, -1.01167, -2.70553, -3.66971, -2.70553, -1.26843, -0.497191, -0.132863, -0.0171081, 0.0393914, -0.0171081, -0.132863, -0.497191, -1.26843, -2.70553, -1.58454, -1.01167, -0.497191, -0.172121, -0.0898249, -0.0574045, -0.0574045, -0.0898249, -0.172121, -0.497191, -1.01167, -1.58454, -0.534359, -0.308926, -0.132863, -0.0898249, -0.115021, -0.110088, -0.115021, -0.0898249, -0.132863, -0.308926, -0.534359, -0.657074, -0.0574045, -0.0171081, -0.0171081, -0.0574045, -0.110088, -0.110088, -0.0574045, -0.0171081, -0.0171081, -0.0574045, -0.110088, -0.110088, 0.131457, 0.0987547, 0.0393914, -0.0574045, -0.115021, -0.0574045, 0.0393914, 0.0987547, 0.131457, 0.141779, 0.139622, 0.141779, 0.212837, 0.0987547, -0.0171081, -0.0898249, -0.0898249, -0.0171081, 0.0987547, 0.212837, 0.281572, 0.270514, 0.270514, 0.281572, 0.131457, -0.0171081, -0.132863, -0.172121, -0.132863, -0.0171081, 0.131457, 0.281572, 0.359369, 0.357713, 0.359369, 0.281572, -0.0574045, -0.308926, -0.497191, -0.497191, -0.308926, -0.0574045, 0.141779, 0.270514, 0.357713, 0.357713, 0.270514, 0.141779, -0.534359, -1.01167, -1.26843, -1.01167, -0.534359, -0.110088, 0.139622, 0.270514, 0.359369, 0.270514, 0.139622, -0.110088, -1.58454, -2.70553, -2.70553, -1.58454, -0.657074, -0.110088, 0.141779, 0.281572, 0.281572, 0.141779, -0.110088, -0.657074, -9.92124, -9.92124, -5.01899, -1.58454, -0.478208, -0.0898249, 0.0466734, 0.0466734, -0.0898249, -0.478208, -1.58454, -5.01899, -9.92124, -7.0181, -2.70553, -0.884169, -0.301091, -0.132863, -0.0948296, -0.132863, -0.301091, -0.884169, -2.70553, -7.0181, -5.01899, -2.70553, -1.09721, -0.473447, -0.301091, -0.308926, -0.308926, -0.301091, -0.473447, -1.09721, -2.70553, -5.01899, -1.58454, -0.884169, -0.473447, -0.364006, -0.478208, -0.534359, -0.478208, -0.364006, -0.473447, -0.884169, -1.58454, -2.04137, -0.478208, -0.301091, -0.301091, -0.478208, -0.657074, -0.657074, -0.478208, -0.301091, -0.301091, -0.478208, -0.657074, -0.657074, -0.0898249, -0.132863, -0.308926, -0.534359, -0.657074, -0.534359, -0.308926, -0.132863, -0.0898249, -0.115021, -0.110088, -0.115021, 0.0466734, -0.0948296, -0.308926, -0.478208, -0.478208, -0.308926, -0.0948296, 0.0466734, 0.100083, 0.141779, 0.141779, 0.100083, 0.0466734, -0.132863, -0.301091, -0.364006, -0.301091, -0.132863, 0.0466734, 0.200702, 0.281572, 0.279821, 0.281572, 0.200702, -0.0898249, -0.301091, -0.473447, -0.473447, -0.301091, -0.0898249, 0.100083, 0.281572, 0.330283, 0.330283, 0.281572, 0.100083, -0.478208, -0.884169, -1.09721, -0.884169, -0.478208, -0.115021, 0.141779, 0.279821, 0.330283, 0.279821, 0.141779, -0.115021, -1.58454, -2.70553, -2.70553, -1.58454, -0.657074, -0.110088, 0.141779, 0.281572, 0.281572, 0.141779, -0.110088, -0.657074, -5.01899, -7.0181, -5.01899, -2.04137, -0.657074, -0.115021, 0.100083, 0.200702, 0.100083, -0.115021, -0.657074, -2.04137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0113952, -0.0304188, -0.0446396, -0.0428457, -0.0353564, -0.0317802, -0.0308838, -0.0317802, -0.0353564, -0.0428457, -0.0446396, -0.0304188, -0.0304188, -0.0429058, -0.0455848, -0.0402314, -0.0370432, -0.036863, -0.036863, -0.0370432, -0.0402314, -0.0455848, -0.0429058, -0.0304188, -0.0446396, -0.0455848, -0.0420578, -0.0402314, -0.0414021, -0.0418514, -0.0414021, -0.0402314, -0.0420578, -0.0455848, -0.0446396, -0.0424067, -0.0428457, -0.0402314, -0.0402314, -0.0428457, -0.0441109, -0.0441109, -0.0428457, -0.0402314, -0.0402314, -0.0428457, -0.0441109, -0.0441109, -0.0353564, -0.0370432, -0.0414021, -0.0441109, -0.0446622, -0.0441109, -0.0414021, -0.0370432, -0.0353564, -0.0365349, -0.0371837, -0.0365349, -0.0317802, -0.036863, -0.0418514, -0.0441109, -0.0441109, -0.0418514, -0.036863, -0.0317802, -0.0296686, -0.0290178, -0.0290178, -0.0296686, -0.0308838, -0.036863, -0.0414021, -0.0428457, -0.0414021, -0.036863, -0.0308838, -0.0265916, -0.0242138, -0.0232989, -0.0242138, -0.0265916, -0.0317802, -0.0370432, -0.0402314, -0.0402314, -0.0370432, -0.0317802, -0.0265916, -0.0221271, -0.0201655, -0.0201655, -0.0221271, -0.0265916, -0.0353564, -0.0402314, -0.0420578, -0.0402314, -0.0353564, -0.0296686, -0.0242138, -0.0201655, -0.0193712, -0.0201655, -0.0242138, -0.0296686, -0.0428457, -0.0455848, -0.0455848, -0.0428457, -0.0365349, -0.0290178, -0.0232989, -0.0201655, -0.0201655, -0.0232989, -0.0290178, -0.0365349, -0.0446396, -0.0429058, -0.0446396, -0.0441109, -0.0371837, -0.0290178, -0.0242138, -0.0221271, -0.0242138, -0.0290178, -0.0371837, -0.0441109, -0.0304188, -0.0304188, -0.0424067, -0.0441109, -0.0365349, -0.0296686, -0.0265916, -0.0265916, -0.0296686, -0.0365349, -0.0441109, -0.0424067, -0.0304188, -0.0429058, -0.0455848, -0.0402314, -0.0370432, -0.036863, -0.036863, -0.0370432, -0.0402314, -0.0455848, -0.0429058, -0.0304188, -0.0429058, -0.0464044, -0.043761, -0.0420578, -0.0430581, -0.0432904, -0.0430581, -0.0420578, -0.043761, -0.0464044, -0.0429058, -0.03848, -0.0455848, -0.043761, -0.043761, -0.0455848, -0.0451717, -0.0451717, -0.0455848, -0.043761, -0.043761, -0.0455848, -0.0451717, -0.0451717, -0.0402314, -0.0420578, -0.0455848, -0.0446396, -0.0424067, -0.0446396, -0.0455848, -0.0420578, -0.0402314, -0.0414021, -0.0418514, -0.0414021, -0.0370432, -0.0430581, -0.0451717, -0.0424067, -0.0424067, -0.0451717, -0.0430581, -0.0370432, -0.0341488, -0.0338586, -0.0338586, -0.0341488, -0.036863, -0.0432904, -0.0451717, -0.0446396, -0.0451717, -0.0432904, -0.036863, -0.0307931, -0.0280246, -0.0269136, -0.0280246, -0.0307931, -0.036863, -0.0430581, -0.0455848, -0.0455848, -0.0430581, -0.036863, -0.0297967, -0.0250984, -0.0225708, -0.0225708, -0.0250984, -0.0297967, -0.0370432, -0.0420578, -0.043761, -0.0420578, -0.0370432, -0.0307931, -0.0250984, -0.0209264, -0.0199443, -0.0209264, -0.0250984, -0.0307931, -0.0402314, -0.043761, -0.043761, -0.0402314, -0.0341488, -0.0280246, -0.0225708, -0.0199443, -0.0199443, -0.0225708, -0.0280246, -0.0341488, -0.0455848, -0.0464044, -0.0455848, -0.0414021, -0.0338586, -0.0269136, -0.0225708, -0.0209264, -0.0225708, -0.0269136, -0.0338586, -0.0414021, -0.0429058, -0.0429058, -0.0451717, -0.0418514, -0.0338586, -0.0280246, -0.0250984, -0.0250984, -0.0280246, -0.0338586, -0.0418514, -0.0451717, -0.0304188, -0.03848, -0.0451717, -0.0414021, -0.0341488, -0.0307931, -0.0297967, -0.0307931, -0.0341488, -0.0414021, -0.0451717, -0.03848, -0.0446396, -0.0455848, -0.0420578, -0.0402314, -0.0414021, -0.0418514, -0.0414021, -0.0402314, -0.0420578, -0.0455848, -0.0446396, -0.0424067, -0.0455848, -0.043761, -0.043761, -0.0455848, -0.0451717, -0.0451717, -0.0455848, -0.043761, -0.043761, -0.0455848, -0.0451717, -0.0451717, -0.0420578, -0.043761, -0.0464044, -0.0429058, -0.03848, -0.0429058, -0.0464044, -0.043761, -0.0420578, -0.0430581, -0.0432904, -0.0430581, -0.0402314, -0.0455848, -0.0429058, -0.0304188, -0.0304188, -0.0429058, -0.0455848, -0.0402314, -0.0370432, -0.036863, -0.036863, -0.0370432, -0.0414021, -0.0451717, -0.03848, -0.0304188, -0.03848, -0.0451717, -0.0414021, -0.0341488, -0.0307931, -0.0297967, -0.0307931, -0.0341488, -0.0418514, -0.0451717, -0.0429058, -0.0429058, -0.0451717, -0.0418514, -0.0338586, -0.0280246, -0.0250984, -0.0250984, -0.0280246, -0.0338586, -0.0414021, -0.0455848, -0.0464044, -0.0455848, -0.0414021, -0.0338586, -0.0269136, -0.0225708, -0.0209264, -0.0225708, -0.0269136, -0.0338586, -0.0402314, -0.043761, -0.043761, -0.0402314, -0.0341488, -0.0280246, -0.0225708, -0.0199443, -0.0199443, -0.0225708, -0.0280246, -0.0341488, -0.0420578, -0.043761, -0.0420578, -0.0370432, -0.0307931, -0.0250984, -0.0209264, -0.0199443, -0.0209264, -0.0250984, -0.0307931, -0.0370432, -0.0455848, -0.0455848, -0.0430581, -0.036863, -0.0297967, -0.0250984, -0.0225708, -0.0225708, -0.0250984, -0.0297967, -0.036863, -0.0430581, -0.0446396, -0.0451717, -0.0432904, -0.036863, -0.0307931, -0.0280246, -0.0269136, -0.0280246, -0.0307931, -0.036863, -0.0432904, -0.0451717, -0.0424067, -0.0451717, -0.0430581, -0.0370432, -0.0341488, -0.0338586, -0.0338586, -0.0341488, -0.0370432, -0.0430581, -0.0451717, -0.0424067, -0.0428457, -0.0402314, -0.0402314, -0.0428457, -0.0441109, -0.0441109, -0.0428457, -0.0402314, -0.0402314, -0.0428457, -0.0441109, -0.0441109, -0.0402314, -0.0420578, -0.0455848, -0.0446396, -0.0424067, -0.0446396, -0.0455848, -0.0420578, -0.0402314, -0.0414021, -0.0418514, -0.0414021, -0.0402314, -0.0455848, -0.0429058, -0.0304188, -0.0304188, -0.0429058, -0.0455848, -0.0402314, -0.0370432, -0.036863, -0.036863, -0.0370432, -0.0428457, -0.0446396, -0.0304188, 0.0113952, -0.0304188, -0.0446396, -0.0428457, -0.0353564, -0.0317802, -0.0308838, -0.0317802, -0.0353564, -0.0441109, -0.0424067, -0.0304188, -0.0304188, -0.0424067, -0.0441109, -0.0365349, -0.0296686, -0.0265916, -0.0265916, -0.0296686, -0.0365349, -0.0441109, -0.0446396, -0.0429058, -0.0446396, -0.0441109, -0.0371837, -0.0290178, -0.0242138, -0.0221271, -0.0242138, -0.0290178, -0.0371837, -0.0428457, -0.0455848, -0.0455848, -0.0428457, -0.0365349, -0.0290178, -0.0232989, -0.0201655, -0.0201655, -0.0232989, -0.0290178, -0.0365349, -0.0402314, -0.0420578, -0.0402314, -0.0353564, -0.0296686, -0.0242138, -0.0201655, -0.0193712, -0.0201655, -0.0242138, -0.0296686, -0.0353564, -0.0402314, -0.0402314, -0.0370432, -0.0317802, -0.0265916, -0.0221271, -0.0201655, -0.0201655, -0.0221271, -0.0265916, -0.0317802, -0.0370432, -0.0428457, -0.0414021, -0.036863, -0.0308838, -0.0265916, -0.0242138, -0.0232989, -0.0242138, -0.0265916, -0.0308838, -0.036863, -0.0414021, -0.0441109, -0.0418514, -0.036863, -0.0317802, -0.0296686, -0.0290178, -0.0290178, -0.0296686, -0.0317802, -0.036863, -0.0418514, -0.0441109, -0.0441109, -0.0414021, -0.0370432, -0.0353564, -0.0365349, -0.0371837, -0.0365349, -0.0353564, -0.0370432, -0.0414021, -0.0441109, -0.0446622, -0.0353564, -0.0370432, -0.0414021, -0.0441109, -0.0446622, -0.0441109, -0.0414021, -0.0370432, -0.0353564, -0.0365349, -0.0371837, -0.0365349, -0.0370432, -0.0430581, -0.0451717, -0.0424067, -0.0424067, -0.0451717, -0.0430581, -0.0370432, -0.0341488, -0.0338586, -0.0338586, -0.0341488, -0.0414021, -0.0451717, -0.03848, -0.0304188, -0.03848, -0.0451717, -0.0414021, -0.0341488, -0.0307931, -0.0297967, -0.0307931, -0.0341488, -0.0441109, -0.0424067, -0.0304188, -0.0304188, -0.0424067, -0.0441109, -0.0365349, -0.0296686, -0.0265916, -0.0265916, -0.0296686, -0.0365349, -0.0446622, -0.0424067, -0.03848, -0.0424067, -0.0446622, -0.0385981, -0.0299759, -0.0248928, -0.0227097, -0.0248928, -0.0299759, -0.0385981, -0.0441109, -0.0451717, -0.0451717, -0.0441109, -0.0385981, -0.030263, -0.0241298, -0.0204314, -0.0204314, -0.0241298, -0.030263, -0.0385981, -0.0414021, -0.0430581, -0.0414021, -0.0365349, -0.0299759, -0.0241298, -0.0201325, -0.0186994, -0.0201325, -0.0241298, -0.0299759, -0.0365349, -0.0370432, -0.0370432, -0.0341488, -0.0296686, -0.0248928, -0.0204314, -0.0186994, -0.0186994, -0.0204314, -0.0248928, -0.0296686, -0.0341488, -0.0353564, -0.0341488, -0.0307931, -0.0265916, -0.0227097, -0.0204314, -0.0201325, -0.0204314, -0.0227097, -0.0265916, -0.0307931, -0.0341488, -0.0365349, -0.0338586, -0.0297967, -0.0265916, -0.0248928, -0.0241298, -0.0241298, -0.0248928, -0.0265916, -0.0297967, -0.0338586, -0.0365349, -0.0371837, -0.0338586, -0.0307931, -0.0296686, -0.0299759, -0.030263, -0.0299759, -0.0296686, -0.0307931, -0.0338586, -0.0371837, -0.0385981, -0.0365349, -0.0341488, -0.0341488, -0.0365349, -0.0385981, -0.0385981, -0.0365349, -0.0341488, -0.0341488, -0.0365349, -0.0385981, -0.0385981, -0.0317802, -0.036863, -0.0418514, -0.0441109, -0.0441109, -0.0418514, -0.036863, -0.0317802, -0.0296686, -0.0290178, -0.0290178, -0.0296686, -0.036863, -0.0432904, -0.0451717, -0.0446396, -0.0451717, -0.0432904, -0.036863, -0.0307931, -0.0280246, -0.0269136, -0.0280246, -0.0307931, -0.0418514, -0.0451717, -0.0429058, -0.0429058, -0.0451717, -0.0418514, -0.0338586, -0.0280246, -0.0250984, -0.0250984, -0.0280246, -0.0338586, -0.0441109, -0.0446396, -0.0429058, -0.0446396, -0.0441109, -0.0371837, -0.0290178, -0.0242138, -0.0221271, -0.0242138, -0.0290178, -0.0371837, -0.0441109, -0.0451717, -0.0451717, -0.0441109, -0.0385981, -0.030263, -0.0241298, -0.0204314, -0.0204314, -0.0241298, -0.030263, -0.0385981, -0.0418514, -0.0432904, -0.0418514, -0.0371837, -0.030263, -0.0242585, -0.0201807, -0.0182172, -0.0201807, -0.0242585, -0.030263, -0.0371837, -0.036863, -0.036863, -0.0338586, -0.0290178, -0.0241298, -0.0201807, -0.0178263, -0.0178263, -0.0201807, -0.0241298, -0.0290178, -0.0338586, -0.0317802, -0.0307931, -0.0280246, -0.0242138, -0.0204314, -0.0182172, -0.0178263, -0.0182172, -0.0204314, -0.0242138, -0.0280246, -0.0307931, -0.0296686, -0.0280246, -0.0250984, -0.0221271, -0.0204314, -0.0201807, -0.0201807, -0.0204314, -0.0221271, -0.0250984, -0.0280246, -0.0296686, -0.0290178, -0.0269136, -0.0250984, -0.0242138, -0.0241298, -0.0242585, -0.0241298, -0.0242138, -0.0250984, -0.0269136, -0.0290178, -0.0299759, -0.0290178, -0.0280246, -0.0280246, -0.0290178, -0.030263, -0.030263, -0.0290178, -0.0280246, -0.0280246, -0.0290178, -0.030263, -0.030263, -0.0296686, -0.0307931, -0.0338586, -0.0371837, -0.0385981, -0.0371837, -0.0338586, -0.0307931, -0.0296686, -0.0299759, -0.030263, -0.0299759, -0.0308838, -0.036863, -0.0414021, -0.0428457, -0.0414021, -0.036863, -0.0308838, -0.0265916, -0.0242138, -0.0232989, -0.0242138, -0.0265916, -0.036863, -0.0430581, -0.0455848, -0.0455848, -0.0430581, -0.036863, -0.0297967, -0.0250984, -0.0225708, -0.0225708, -0.0250984, -0.0297967, -0.0414021, -0.0455848, -0.0464044, -0.0455848, -0.0414021, -0.0338586, -0.0269136, -0.0225708, -0.0209264, -0.0225708, -0.0269136, -0.0338586, -0.0428457, -0.0455848, -0.0455848, -0.0428457, -0.0365349, -0.0290178, -0.0232989, -0.0201655, -0.0201655, -0.0232989, -0.0290178, -0.0365349, -0.0414021, -0.0430581, -0.0414021, -0.0365349, -0.0299759, -0.0241298, -0.0201325, -0.0186994, -0.0201325, -0.0241298, -0.0299759, -0.0365349, -0.036863, -0.036863, -0.0338586, -0.0290178, -0.0241298, -0.0201807, -0.0178263, -0.0178263, -0.0201807, -0.0241298, -0.0290178, -0.0338586, -0.0308838, -0.0297967, -0.0269136, -0.0232989, -0.0201325, -0.0178263, -0.0168417, -0.0178263, -0.0201325, -0.0232989, -0.0269136, -0.0297967, -0.0265916, -0.0250984, -0.0225708, -0.0201655, -0.0186994, -0.0178263, -0.0178263, -0.0186994, -0.0201655, -0.0225708, -0.0250984, -0.0265916, -0.0242138, -0.0225708, -0.0209264, -0.0201655, -0.0201325, -0.0201807, -0.0201325, -0.0201655, -0.0209264, -0.0225708, -0.0242138, -0.0248928, -0.0232989, -0.0225708, -0.0225708, -0.0232989, -0.0241298, -0.0241298, -0.0232989, -0.0225708, -0.0225708, -0.0232989, -0.0241298, -0.0241298, -0.0242138, -0.0250984, -0.0269136, -0.0290178, -0.0299759, -0.0290178, -0.0269136, -0.0250984, -0.0242138, -0.0241298, -0.0242585, -0.0241298, -0.0265916, -0.0297967, -0.0338586, -0.0365349, -0.0365349, -0.0338586, -0.0297967, -0.0265916, -0.0248928, -0.0241298, -0.0241298, -0.0248928, -0.0317802, -0.0370432, -0.0402314, -0.0402314, -0.0370432, -0.0317802, -0.0265916, -0.0221271, -0.0201655, -0.0201655, -0.0221271, -0.0265916, -0.0370432, -0.0420578, -0.043761, -0.0420578, -0.0370432, -0.0307931, -0.0250984, -0.0209264, -0.0199443, -0.0209264, -0.0250984, -0.0307931, -0.0402314, -0.043761, -0.043761, -0.0402314, -0.0341488, -0.0280246, -0.0225708, -0.0199443, -0.0199443, -0.0225708, -0.0280246, -0.0341488, -0.0402314, -0.0420578, -0.0402314, -0.0353564, -0.0296686, -0.0242138, -0.0201655, -0.0193712, -0.0201655, -0.0242138, -0.0296686, -0.0353564, -0.0370432, -0.0370432, -0.0341488, -0.0296686, -0.0248928, -0.0204314, -0.0186994, -0.0186994, -0.0204314, -0.0248928, -0.0296686, -0.0341488, -0.0317802, -0.0307931, -0.0280246, -0.0242138, -0.0204314, -0.0182172, -0.0178263, -0.0182172, -0.0204314, -0.0242138, -0.0280246, -0.0307931, -0.0265916, -0.0250984, -0.0225708, -0.0201655, -0.0186994, -0.0178263, -0.0178263, -0.0186994, -0.0201655, -0.0225708, -0.0250984, -0.0265916, -0.0221271, -0.0209264, -0.0199443, -0.0193712, -0.0186994, -0.0182172, -0.0186994, -0.0193712, -0.0199443, -0.0209264, -0.0221271, -0.0227097, -0.0201655, -0.0199443, -0.0199443, -0.0201655, -0.0204314, -0.0204314, -0.0201655, -0.0199443, -0.0199443, -0.0201655, -0.0204314, -0.0204314, -0.0201655, -0.0209264, -0.0225708, -0.0242138, -0.0248928, -0.0242138, -0.0225708, -0.0209264, -0.0201655, -0.0201325, -0.0201807, -0.0201325, -0.0221271, -0.0250984, -0.0280246, -0.0296686, -0.0296686, -0.0280246, -0.0250984, -0.0221271, -0.0204314, -0.0201807, -0.0201807, -0.0204314, -0.0265916, -0.0307931, -0.0341488, -0.0353564, -0.0341488, -0.0307931, -0.0265916, -0.0227097, -0.0204314, -0.0201325, -0.0204314, -0.0227097, -0.0353564, -0.0402314, -0.0420578, -0.0402314, -0.0353564, -0.0296686, -0.0242138, -0.0201655, -0.0193712, -0.0201655, -0.0242138, -0.0296686, -0.0402314, -0.043761, -0.043761, -0.0402314, -0.0341488, -0.0280246, -0.0225708, -0.0199443, -0.0199443, -0.0225708, -0.0280246, -0.0341488, -0.0420578, -0.043761, -0.0420578, -0.0370432, -0.0307931, -0.0250984, -0.0209264, -0.0199443, -0.0209264, -0.0250984, -0.0307931, -0.0370432, -0.0402314, -0.0402314, -0.0370432, -0.0317802, -0.0265916, -0.0221271, -0.0201655, -0.0201655, -0.0221271, -0.0265916, -0.0317802, -0.0370432, -0.0353564, -0.0341488, -0.0307931, -0.0265916, -0.0227097, -0.0204314, -0.0201325, -0.0204314, -0.0227097, -0.0265916, -0.0307931, -0.0341488, -0.0296686, -0.0280246, -0.0250984, -0.0221271, -0.0204314, -0.0201807, -0.0201807, -0.0204314, -0.0221271, -0.0250984, -0.0280246, -0.0296686, -0.0242138, -0.0225708, -0.0209264, -0.0201655, -0.0201325, -0.0201807, -0.0201325, -0.0201655, -0.0209264, -0.0225708, -0.0242138, -0.0248928, -0.0201655, -0.0199443, -0.0199443, -0.0201655, -0.0204314, -0.0204314, -0.0201655, -0.0199443, -0.0199443, -0.0201655, -0.0204314, -0.0204314, -0.0193712, -0.0199443, -0.0209264, -0.0221271, -0.0227097, -0.0221271, -0.0209264, -0.0199443, -0.0193712, -0.0186994, -0.0182172, -0.0186994, -0.0201655, -0.0225708, -0.0250984, -0.0265916, -0.0265916, -0.0250984, -0.0225708, -0.0201655, -0.0186994, -0.0178263, -0.0178263, -0.0186994, -0.0242138, -0.0280246, -0.0307931, -0.0317802, -0.0307931, -0.0280246, -0.0242138, -0.0204314, -0.0182172, -0.0178263, -0.0182172, -0.0204314, -0.0296686, -0.0341488, -0.0370432, -0.0370432, -0.0341488, -0.0296686, -0.0248928, -0.0204314, -0.0186994, -0.0186994, -0.0204314, -0.0248928, -0.0428457, -0.0455848, -0.0455848, -0.0428457, -0.0365349, -0.0290178, -0.0232989, -0.0201655, -0.0201655, -0.0232989, -0.0290178, -0.0365349, -0.0455848, -0.0464044, -0.0455848, -0.0414021, -0.0338586, -0.0269136, -0.0225708, -0.0209264, -0.0225708, -0.0269136, -0.0338586, -0.0414021, -0.0455848, -0.0455848, -0.0430581, -0.036863, -0.0297967, -0.0250984, -0.0225708, -0.0225708, -0.0250984, -0.0297967, -0.036863, -0.0430581, -0.0428457, -0.0414021, -0.036863, -0.0308838, -0.0265916, -0.0242138, -0.0232989, -0.0242138, -0.0265916, -0.0308838, -0.036863, -0.0414021, -0.0365349, -0.0338586, -0.0297967, -0.0265916, -0.0248928, -0.0241298, -0.0241298, -0.0248928, -0.0265916, -0.0297967, -0.0338586, -0.0365349, -0.0290178, -0.0269136, -0.0250984, -0.0242138, -0.0241298, -0.0242585, -0.0241298, -0.0242138, -0.0250984, -0.0269136, -0.0290178, -0.0299759, -0.0232989, -0.0225708, -0.0225708, -0.0232989, -0.0241298, -0.0241298, -0.0232989, -0.0225708, -0.0225708, -0.0232989, -0.0241298, -0.0241298, -0.0201655, -0.0209264, -0.0225708, -0.0242138, -0.0248928, -0.0242138, -0.0225708, -0.0209264, -0.0201655, -0.0201325, -0.0201807, -0.0201325, -0.0201655, -0.0225708, -0.0250984, -0.0265916, -0.0265916, -0.0250984, -0.0225708, -0.0201655, -0.0186994, -0.0178263, -0.0178263, -0.0186994, -0.0232989, -0.0269136, -0.0297967, -0.0308838, -0.0297967, -0.0269136, -0.0232989, -0.0201325, -0.0178263, -0.0168417, -0.0178263, -0.0201325, -0.0290178, -0.0338586, -0.036863, -0.036863, -0.0338586, -0.0290178, -0.0241298, -0.0201807, -0.0178263, -0.0178263, -0.0201807, -0.0241298, -0.0365349, -0.0414021, -0.0430581, -0.0414021, -0.0365349, -0.0299759, -0.0241298, -0.0201325, -0.0186994, -0.0201325, -0.0241298, -0.0299759, -0.0446396, -0.0429058, -0.0446396, -0.0441109, -0.0371837, -0.0290178, -0.0242138, -0.0221271, -0.0242138, -0.0290178, -0.0371837, -0.0441109, -0.0429058, -0.0429058, -0.0451717, -0.0418514, -0.0338586, -0.0280246, -0.0250984, -0.0250984, -0.0280246, -0.0338586, -0.0418514, -0.0451717, -0.0446396, -0.0451717, -0.0432904, -0.036863, -0.0307931, -0.0280246, -0.0269136, -0.0280246, -0.0307931, -0.036863, -0.0432904, -0.0451717, -0.0441109, -0.0418514, -0.036863, -0.0317802, -0.0296686, -0.0290178, -0.0290178, -0.0296686, -0.0317802, -0.036863, -0.0418514, -0.0441109, -0.0371837, -0.0338586, -0.0307931, -0.0296686, -0.0299759, -0.030263, -0.0299759, -0.0296686, -0.0307931, -0.0338586, -0.0371837, -0.0385981, -0.0290178, -0.0280246, -0.0280246, -0.0290178, -0.030263, -0.030263, -0.0290178, -0.0280246, -0.0280246, -0.0290178, -0.030263, -0.030263, -0.0242138, -0.0250984, -0.0269136, -0.0290178, -0.0299759, -0.0290178, -0.0269136, -0.0250984, -0.0242138, -0.0241298, -0.0242585, -0.0241298, -0.0221271, -0.0250984, -0.0280246, -0.0296686, -0.0296686, -0.0280246, -0.0250984, -0.0221271, -0.0204314, -0.0201807, -0.0201807, -0.0204314, -0.0242138, -0.0280246, -0.0307931, -0.0317802, -0.0307931, -0.0280246, -0.0242138, -0.0204314, -0.0182172, -0.0178263, -0.0182172, -0.0204314, -0.0290178, -0.0338586, -0.036863, -0.036863, -0.0338586, -0.0290178, -0.0241298, -0.0201807, -0.0178263, -0.0178263, -0.0201807, -0.0241298, -0.0371837, -0.0418514, -0.0432904, -0.0418514, -0.0371837, -0.030263, -0.0242585, -0.0201807, -0.0182172, -0.0201807, -0.0242585, -0.030263, -0.0441109, -0.0451717, -0.0451717, -0.0441109, -0.0385981, -0.030263, -0.0241298, -0.0204314, -0.0204314, -0.0241298, -0.030263, -0.0385981, -0.0304188, -0.0304188, -0.0424067, -0.0441109, -0.0365349, -0.0296686, -0.0265916, -0.0265916, -0.0296686, -0.0365349, -0.0441109, -0.0424067, -0.0304188, -0.03848, -0.0451717, -0.0414021, -0.0341488, -0.0307931, -0.0297967, -0.0307931, -0.0341488, -0.0414021, -0.0451717, -0.03848, -0.0424067, -0.0451717, -0.0430581, -0.0370432, -0.0341488, -0.0338586, -0.0338586, -0.0341488, -0.0370432, -0.0430581, -0.0451717, -0.0424067, -0.0441109, -0.0414021, -0.0370432, -0.0353564, -0.0365349, -0.0371837, -0.0365349, -0.0353564, -0.0370432, -0.0414021, -0.0441109, -0.0446622, -0.0365349, -0.0341488, -0.0341488, -0.0365349, -0.0385981, -0.0385981, -0.0365349, -0.0341488, -0.0341488, -0.0365349, -0.0385981, -0.0385981, -0.0296686, -0.0307931, -0.0338586, -0.0371837, -0.0385981, -0.0371837, -0.0338586, -0.0307931, -0.0296686, -0.0299759, -0.030263, -0.0299759, -0.0265916, -0.0297967, -0.0338586, -0.0365349, -0.0365349, -0.0338586, -0.0297967, -0.0265916, -0.0248928, -0.0241298, -0.0241298, -0.0248928, -0.0265916, -0.0307931, -0.0341488, -0.0353564, -0.0341488, -0.0307931, -0.0265916, -0.0227097, -0.0204314, -0.0201325, -0.0204314, -0.0227097, -0.0296686, -0.0341488, -0.0370432, -0.0370432, -0.0341488, -0.0296686, -0.0248928, -0.0204314, -0.0186994, -0.0186994, -0.0204314, -0.0248928, -0.0365349, -0.0414021, -0.0430581, -0.0414021, -0.0365349, -0.0299759, -0.0241298, -0.0201325, -0.0186994, -0.0201325, -0.0241298, -0.0299759, -0.0441109, -0.0451717, -0.0451717, -0.0441109, -0.0385981, -0.030263, -0.0241298, -0.0204314, -0.0204314, -0.0241298, -0.030263, -0.0385981, -0.0424067, -0.03848, -0.0424067, -0.0446622, -0.0385981, -0.0299759, -0.0248928, -0.0227097, -0.0248928, -0.0299759, -0.0385981, -0.0446622 - }; + std::vector in_spin + = {-13.9672, -9.92124, -3.66971, -1.07073, -0.364006, -0.172121, -0.140822, -0.172121, -0.364006, + -1.07073, -3.66971, -9.92124, -9.92124, -5.06104, -1.68134, -0.688584, -0.473447, -0.497191, + -0.497191, -0.473447, -0.688584, -1.68134, -5.06104, -9.92124, -3.66971, -1.68134, -0.833845, + -0.688584, -0.884169, -1.01167, -0.884169, -0.688584, -0.833845, -1.68134, -3.66971, -5.01899, + -1.07073, -0.688584, -0.688584, -1.07073, -1.58454, -1.58454, -1.07073, -0.688584, -0.688584, + -1.07073, -1.58454, -1.58454, -0.364006, -0.473447, -0.884169, -1.58454, -2.04137, -1.58454, + -0.884169, -0.473447, -0.364006, -0.478208, -0.534359, -0.478208, -0.172121, -0.497191, -1.01167, + -1.58454, -1.58454, -1.01167, -0.497191, -0.172121, -0.0898249, -0.0574045, -0.0574045, -0.0898249, + -0.140822, -0.497191, -0.884169, -1.07073, -0.884169, -0.497191, -0.140822, 0.0466734, 0.131457, + 0.183936, 0.131457, 0.0466734, -0.172121, -0.473447, -0.688584, -0.688584, -0.473447, -0.172121, + 0.0466734, 0.212837, 0.282301, 0.282301, 0.212837, 0.0466734, -0.364006, -0.688584, -0.833845, + -0.688584, -0.364006, -0.0898249, 0.131457, 0.282301, 0.298703, 0.282301, 0.131457, -0.0898249, + -1.07073, -1.68134, -1.68134, -1.07073, -0.478208, -0.0574045, 0.183936, 0.282301, 0.282301, + 0.183936, -0.0574045, -0.478208, -3.66971, -5.06104, -3.66971, -1.58454, -0.534359, -0.0574045, + 0.131457, 0.212837, 0.131457, -0.0574045, -0.534359, -1.58454, -9.92124, -9.92124, -5.01899, + -1.58454, -0.478208, -0.0898249, 0.0466734, 0.0466734, -0.0898249, -0.478208, -1.58454, -5.01899, + -9.92124, -5.06104, -1.68134, -0.688584, -0.473447, -0.497191, -0.497191, -0.473447, -0.688584, + -1.68134, -5.06104, -9.92124, -5.06104, -2.14513, -0.970043, -0.833845, -1.09721, -1.26843, + -1.09721, -0.833845, -0.970043, -2.14513, -5.06104, -7.0181, -1.68134, -0.970043, -0.970043, + -1.68134, -2.70553, -2.70553, -1.68134, -0.970043, -0.970043, -1.68134, -2.70553, -2.70553, + -0.688584, -0.833845, -1.68134, -3.66971, -5.01899, -3.66971, -1.68134, -0.833845, -0.688584, + -0.884169, -1.01167, -0.884169, -0.473447, -1.09721, -2.70553, -5.01899, -5.01899, -2.70553, + -1.09721, -0.473447, -0.301091, -0.308926, -0.308926, -0.301091, -0.497191, -1.26843, -2.70553, + -3.66971, -2.70553, -1.26843, -0.497191, -0.132863, -0.0171081, 0.0393914, -0.0171081, -0.132863, + -0.497191, -1.09721, -1.68134, -1.68134, -1.09721, -0.497191, -0.0948296, 0.0987547, 0.2008, + 0.2008, 0.0987547, -0.0948296, -0.473447, -0.833845, -0.970043, -0.833845, -0.473447, -0.132863, + 0.0987547, 0.257126, 0.292556, 0.257126, 0.0987547, -0.132863, -0.688584, -0.970043, -0.970043, + -0.688584, -0.301091, -0.0171081, 0.2008, 0.292556, 0.292556, 0.2008, -0.0171081, -0.301091, + -1.68134, -2.14513, -1.68134, -0.884169, -0.308926, 0.0393914, 0.2008, 0.257126, 0.2008, + 0.0393914, -0.308926, -0.884169, -5.06104, -5.06104, -2.70553, -1.01167, -0.308926, -0.0171081, + 0.0987547, 0.0987547, -0.0171081, -0.308926, -1.01167, -2.70553, -9.92124, -7.0181, -2.70553, + -0.884169, -0.301091, -0.132863, -0.0948296, -0.132863, -0.301091, -0.884169, -2.70553, -7.0181, + -3.66971, -1.68134, -0.833845, -0.688584, -0.884169, -1.01167, -0.884169, -0.688584, -0.833845, + -1.68134, -3.66971, -5.01899, -1.68134, -0.970043, -0.970043, -1.68134, -2.70553, -2.70553, + -1.68134, -0.970043, -0.970043, -1.68134, -2.70553, -2.70553, -0.833845, -0.970043, -2.14513, + -5.06104, -7.0181, -5.06104, -2.14513, -0.970043, -0.833845, -1.09721, -1.26843, -1.09721, + -0.688584, -1.68134, -5.06104, -9.92124, -9.92124, -5.06104, -1.68134, -0.688584, -0.473447, + -0.497191, -0.497191, -0.473447, -0.884169, -2.70553, -7.0181, -9.92124, -7.0181, -2.70553, + -0.884169, -0.301091, -0.132863, -0.0948296, -0.132863, -0.301091, -1.01167, -2.70553, -5.06104, + -5.06104, -2.70553, -1.01167, -0.308926, -0.0171081, 0.0987547, 0.0987547, -0.0171081, -0.308926, + -0.884169, -1.68134, -2.14513, -1.68134, -0.884169, -0.308926, 0.0393914, 0.2008, 0.257126, + 0.2008, 0.0393914, -0.308926, -0.688584, -0.970043, -0.970043, -0.688584, -0.301091, -0.0171081, + 0.2008, 0.292556, 0.292556, 0.2008, -0.0171081, -0.301091, -0.833845, -0.970043, -0.833845, + -0.473447, -0.132863, 0.0987547, 0.257126, 0.292556, 0.257126, 0.0987547, -0.132863, -0.473447, + -1.68134, -1.68134, -1.09721, -0.497191, -0.0948296, 0.0987547, 0.2008, 0.2008, 0.0987547, + -0.0948296, -0.497191, -1.09721, -3.66971, -2.70553, -1.26843, -0.497191, -0.132863, -0.0171081, + 0.0393914, -0.0171081, -0.132863, -0.497191, -1.26843, -2.70553, -5.01899, -2.70553, -1.09721, + -0.473447, -0.301091, -0.308926, -0.308926, -0.301091, -0.473447, -1.09721, -2.70553, -5.01899, + -1.07073, -0.688584, -0.688584, -1.07073, -1.58454, -1.58454, -1.07073, -0.688584, -0.688584, + -1.07073, -1.58454, -1.58454, -0.688584, -0.833845, -1.68134, -3.66971, -5.01899, -3.66971, + -1.68134, -0.833845, -0.688584, -0.884169, -1.01167, -0.884169, -0.688584, -1.68134, -5.06104, + -9.92124, -9.92124, -5.06104, -1.68134, -0.688584, -0.473447, -0.497191, -0.497191, -0.473447, + -1.07073, -3.66971, -9.92124, -13.9672, -9.92124, -3.66971, -1.07073, -0.364006, -0.172121, + -0.140822, -0.172121, -0.364006, -1.58454, -5.01899, -9.92124, -9.92124, -5.01899, -1.58454, + -0.478208, -0.0898249, 0.0466734, 0.0466734, -0.0898249, -0.478208, -1.58454, -3.66971, -5.06104, + -3.66971, -1.58454, -0.534359, -0.0574045, 0.131457, 0.212837, 0.131457, -0.0574045, -0.534359, + -1.07073, -1.68134, -1.68134, -1.07073, -0.478208, -0.0574045, 0.183936, 0.282301, 0.282301, + 0.183936, -0.0574045, -0.478208, -0.688584, -0.833845, -0.688584, -0.364006, -0.0898249, 0.131457, + 0.282301, 0.298703, 0.282301, 0.131457, -0.0898249, -0.364006, -0.688584, -0.688584, -0.473447, + -0.172121, 0.0466734, 0.212837, 0.282301, 0.282301, 0.212837, 0.0466734, -0.172121, -0.473447, + -1.07073, -0.884169, -0.497191, -0.140822, 0.0466734, 0.131457, 0.183936, 0.131457, 0.0466734, + -0.140822, -0.497191, -0.884169, -1.58454, -1.01167, -0.497191, -0.172121, -0.0898249, -0.0574045, + -0.0574045, -0.0898249, -0.172121, -0.497191, -1.01167, -1.58454, -1.58454, -0.884169, -0.473447, + -0.364006, -0.478208, -0.534359, -0.478208, -0.364006, -0.473447, -0.884169, -1.58454, -2.04137, + -0.364006, -0.473447, -0.884169, -1.58454, -2.04137, -1.58454, -0.884169, -0.473447, -0.364006, + -0.478208, -0.534359, -0.478208, -0.473447, -1.09721, -2.70553, -5.01899, -5.01899, -2.70553, + -1.09721, -0.473447, -0.301091, -0.308926, -0.308926, -0.301091, -0.884169, -2.70553, -7.0181, + -9.92124, -7.0181, -2.70553, -0.884169, -0.301091, -0.132863, -0.0948296, -0.132863, -0.301091, + -1.58454, -5.01899, -9.92124, -9.92124, -5.01899, -1.58454, -0.478208, -0.0898249, 0.0466734, + 0.0466734, -0.0898249, -0.478208, -2.04137, -5.01899, -7.0181, -5.01899, -2.04137, -0.657074, + -0.115021, 0.100083, 0.200702, 0.100083, -0.115021, -0.657074, -1.58454, -2.70553, -2.70553, + -1.58454, -0.657074, -0.110088, 0.141779, 0.281572, 0.281572, 0.141779, -0.110088, -0.657074, + -0.884169, -1.09721, -0.884169, -0.478208, -0.115021, 0.141779, 0.279821, 0.330283, 0.279821, + 0.141779, -0.115021, -0.478208, -0.473447, -0.473447, -0.301091, -0.0898249, 0.100083, 0.281572, + 0.330283, 0.330283, 0.281572, 0.100083, -0.0898249, -0.301091, -0.364006, -0.301091, -0.132863, + 0.0466734, 0.200702, 0.281572, 0.279821, 0.281572, 0.200702, 0.0466734, -0.132863, -0.301091, + -0.478208, -0.308926, -0.0948296, 0.0466734, 0.100083, 0.141779, 0.141779, 0.100083, 0.0466734, + -0.0948296, -0.308926, -0.478208, -0.534359, -0.308926, -0.132863, -0.0898249, -0.115021, -0.110088, + -0.115021, -0.0898249, -0.132863, -0.308926, -0.534359, -0.657074, -0.478208, -0.301091, -0.301091, + -0.478208, -0.657074, -0.657074, -0.478208, -0.301091, -0.301091, -0.478208, -0.657074, -0.657074, + -0.172121, -0.497191, -1.01167, -1.58454, -1.58454, -1.01167, -0.497191, -0.172121, -0.0898249, + -0.0574045, -0.0574045, -0.0898249, -0.497191, -1.26843, -2.70553, -3.66971, -2.70553, -1.26843, + -0.497191, -0.132863, -0.0171081, 0.0393914, -0.0171081, -0.132863, -1.01167, -2.70553, -5.06104, + -5.06104, -2.70553, -1.01167, -0.308926, -0.0171081, 0.0987547, 0.0987547, -0.0171081, -0.308926, + -1.58454, -3.66971, -5.06104, -3.66971, -1.58454, -0.534359, -0.0574045, 0.131457, 0.212837, + 0.131457, -0.0574045, -0.534359, -1.58454, -2.70553, -2.70553, -1.58454, -0.657074, -0.110088, + 0.141779, 0.281572, 0.281572, 0.141779, -0.110088, -0.657074, -1.01167, -1.26843, -1.01167, + -0.534359, -0.110088, 0.139622, 0.270514, 0.359369, 0.270514, 0.139622, -0.110088, -0.534359, + -0.497191, -0.497191, -0.308926, -0.0574045, 0.141779, 0.270514, 0.357713, 0.357713, 0.270514, + 0.141779, -0.0574045, -0.308926, -0.172121, -0.132863, -0.0171081, 0.131457, 0.281572, 0.359369, + 0.357713, 0.359369, 0.281572, 0.131457, -0.0171081, -0.132863, -0.0898249, -0.0171081, 0.0987547, + 0.212837, 0.281572, 0.270514, 0.270514, 0.281572, 0.212837, 0.0987547, -0.0171081, -0.0898249, + -0.0574045, 0.0393914, 0.0987547, 0.131457, 0.141779, 0.139622, 0.141779, 0.131457, 0.0987547, + 0.0393914, -0.0574045, -0.115021, -0.0574045, -0.0171081, -0.0171081, -0.0574045, -0.110088, -0.110088, + -0.0574045, -0.0171081, -0.0171081, -0.0574045, -0.110088, -0.110088, -0.0898249, -0.132863, -0.308926, + -0.534359, -0.657074, -0.534359, -0.308926, -0.132863, -0.0898249, -0.115021, -0.110088, -0.115021, + -0.140822, -0.497191, -0.884169, -1.07073, -0.884169, -0.497191, -0.140822, 0.0466734, 0.131457, + 0.183936, 0.131457, 0.0466734, -0.497191, -1.09721, -1.68134, -1.68134, -1.09721, -0.497191, + -0.0948296, 0.0987547, 0.2008, 0.2008, 0.0987547, -0.0948296, -0.884169, -1.68134, -2.14513, + -1.68134, -0.884169, -0.308926, 0.0393914, 0.2008, 0.257126, 0.2008, 0.0393914, -0.308926, + -1.07073, -1.68134, -1.68134, -1.07073, -0.478208, -0.0574045, 0.183936, 0.282301, 0.282301, + 0.183936, -0.0574045, -0.478208, -0.884169, -1.09721, -0.884169, -0.478208, -0.115021, 0.141779, + 0.279821, 0.330283, 0.279821, 0.141779, -0.115021, -0.478208, -0.497191, -0.497191, -0.308926, + -0.0574045, 0.141779, 0.270514, 0.357713, 0.357713, 0.270514, 0.141779, -0.0574045, -0.308926, + -0.140822, -0.0948296, 0.0393914, 0.183936, 0.279821, 0.357713, 0.396585, 0.357713, 0.279821, + 0.183936, 0.0393914, -0.0948296, 0.0466734, 0.0987547, 0.2008, 0.282301, 0.330283, 0.357713, + 0.357713, 0.330283, 0.282301, 0.2008, 0.0987547, 0.0466734, 0.131457, 0.2008, 0.257126, + 0.282301, 0.279821, 0.270514, 0.279821, 0.282301, 0.257126, 0.2008, 0.131457, 0.100083, + 0.183936, 0.2008, 0.2008, 0.183936, 0.141779, 0.141779, 0.183936, 0.2008, 0.2008, + 0.183936, 0.141779, 0.141779, 0.131457, 0.0987547, 0.0393914, -0.0574045, -0.115021, -0.0574045, + 0.0393914, 0.0987547, 0.131457, 0.141779, 0.139622, 0.141779, 0.0466734, -0.0948296, -0.308926, + -0.478208, -0.478208, -0.308926, -0.0948296, 0.0466734, 0.100083, 0.141779, 0.141779, 0.100083, + -0.172121, -0.473447, -0.688584, -0.688584, -0.473447, -0.172121, 0.0466734, 0.212837, 0.282301, + 0.282301, 0.212837, 0.0466734, -0.473447, -0.833845, -0.970043, -0.833845, -0.473447, -0.132863, + 0.0987547, 0.257126, 0.292556, 0.257126, 0.0987547, -0.132863, -0.688584, -0.970043, -0.970043, + -0.688584, -0.301091, -0.0171081, 0.2008, 0.292556, 0.292556, 0.2008, -0.0171081, -0.301091, + -0.688584, -0.833845, -0.688584, -0.364006, -0.0898249, 0.131457, 0.282301, 0.298703, 0.282301, + 0.131457, -0.0898249, -0.364006, -0.473447, -0.473447, -0.301091, -0.0898249, 0.100083, 0.281572, + 0.330283, 0.330283, 0.281572, 0.100083, -0.0898249, -0.301091, -0.172121, -0.132863, -0.0171081, + 0.131457, 0.281572, 0.359369, 0.357713, 0.359369, 0.281572, 0.131457, -0.0171081, -0.132863, + 0.0466734, 0.0987547, 0.2008, 0.282301, 0.330283, 0.357713, 0.357713, 0.330283, 0.282301, + 0.2008, 0.0987547, 0.0466734, 0.212837, 0.257126, 0.292556, 0.298703, 0.330283, 0.359369, + 0.330283, 0.298703, 0.292556, 0.257126, 0.212837, 0.200702, 0.282301, 0.292556, 0.292556, + 0.282301, 0.281572, 0.281572, 0.282301, 0.292556, 0.292556, 0.282301, 0.281572, 0.281572, + 0.282301, 0.257126, 0.2008, 0.131457, 0.100083, 0.131457, 0.2008, 0.257126, 0.282301, + 0.279821, 0.270514, 0.279821, 0.212837, 0.0987547, -0.0171081, -0.0898249, -0.0898249, -0.0171081, + 0.0987547, 0.212837, 0.281572, 0.270514, 0.270514, 0.281572, 0.0466734, -0.132863, -0.301091, + -0.364006, -0.301091, -0.132863, 0.0466734, 0.200702, 0.281572, 0.279821, 0.281572, 0.200702, + -0.364006, -0.688584, -0.833845, -0.688584, -0.364006, -0.0898249, 0.131457, 0.282301, 0.298703, + 0.282301, 0.131457, -0.0898249, -0.688584, -0.970043, -0.970043, -0.688584, -0.301091, -0.0171081, + 0.2008, 0.292556, 0.292556, 0.2008, -0.0171081, -0.301091, -0.833845, -0.970043, -0.833845, + -0.473447, -0.132863, 0.0987547, 0.257126, 0.292556, 0.257126, 0.0987547, -0.132863, -0.473447, + -0.688584, -0.688584, -0.473447, -0.172121, 0.0466734, 0.212837, 0.282301, 0.282301, 0.212837, + 0.0466734, -0.172121, -0.473447, -0.364006, -0.301091, -0.132863, 0.0466734, 0.200702, 0.281572, + 0.279821, 0.281572, 0.200702, 0.0466734, -0.132863, -0.301091, -0.0898249, -0.0171081, 0.0987547, + 0.212837, 0.281572, 0.270514, 0.270514, 0.281572, 0.212837, 0.0987547, -0.0171081, -0.0898249, + 0.131457, 0.2008, 0.257126, 0.282301, 0.279821, 0.270514, 0.279821, 0.282301, 0.257126, + 0.2008, 0.131457, 0.100083, 0.282301, 0.292556, 0.292556, 0.282301, 0.281572, 0.281572, + 0.282301, 0.292556, 0.292556, 0.282301, 0.281572, 0.281572, 0.298703, 0.292556, 0.257126, + 0.212837, 0.200702, 0.212837, 0.257126, 0.292556, 0.298703, 0.330283, 0.359369, 0.330283, + 0.282301, 0.2008, 0.0987547, 0.0466734, 0.0466734, 0.0987547, 0.2008, 0.282301, 0.330283, + 0.357713, 0.357713, 0.330283, 0.131457, -0.0171081, -0.132863, -0.172121, -0.132863, -0.0171081, + 0.131457, 0.281572, 0.359369, 0.357713, 0.359369, 0.281572, -0.0898249, -0.301091, -0.473447, + -0.473447, -0.301091, -0.0898249, 0.100083, 0.281572, 0.330283, 0.330283, 0.281572, 0.100083, + -1.07073, -1.68134, -1.68134, -1.07073, -0.478208, -0.0574045, 0.183936, 0.282301, 0.282301, + 0.183936, -0.0574045, -0.478208, -1.68134, -2.14513, -1.68134, -0.884169, -0.308926, 0.0393914, + 0.2008, 0.257126, 0.2008, 0.0393914, -0.308926, -0.884169, -1.68134, -1.68134, -1.09721, + -0.497191, -0.0948296, 0.0987547, 0.2008, 0.2008, 0.0987547, -0.0948296, -0.497191, -1.09721, + -1.07073, -0.884169, -0.497191, -0.140822, 0.0466734, 0.131457, 0.183936, 0.131457, 0.0466734, + -0.140822, -0.497191, -0.884169, -0.478208, -0.308926, -0.0948296, 0.0466734, 0.100083, 0.141779, + 0.141779, 0.100083, 0.0466734, -0.0948296, -0.308926, -0.478208, -0.0574045, 0.0393914, 0.0987547, + 0.131457, 0.141779, 0.139622, 0.141779, 0.131457, 0.0987547, 0.0393914, -0.0574045, -0.115021, + 0.183936, 0.2008, 0.2008, 0.183936, 0.141779, 0.141779, 0.183936, 0.2008, 0.2008, + 0.183936, 0.141779, 0.141779, 0.282301, 0.257126, 0.2008, 0.131457, 0.100083, 0.131457, + 0.2008, 0.257126, 0.282301, 0.279821, 0.270514, 0.279821, 0.282301, 0.2008, 0.0987547, + 0.0466734, 0.0466734, 0.0987547, 0.2008, 0.282301, 0.330283, 0.357713, 0.357713, 0.330283, + 0.183936, 0.0393914, -0.0948296, -0.140822, -0.0948296, 0.0393914, 0.183936, 0.279821, 0.357713, + 0.396585, 0.357713, 0.279821, -0.0574045, -0.308926, -0.497191, -0.497191, -0.308926, -0.0574045, + 0.141779, 0.270514, 0.357713, 0.357713, 0.270514, 0.141779, -0.478208, -0.884169, -1.09721, + -0.884169, -0.478208, -0.115021, 0.141779, 0.279821, 0.330283, 0.279821, 0.141779, -0.115021, + -3.66971, -5.06104, -3.66971, -1.58454, -0.534359, -0.0574045, 0.131457, 0.212837, 0.131457, + -0.0574045, -0.534359, -1.58454, -5.06104, -5.06104, -2.70553, -1.01167, -0.308926, -0.0171081, + 0.0987547, 0.0987547, -0.0171081, -0.308926, -1.01167, -2.70553, -3.66971, -2.70553, -1.26843, + -0.497191, -0.132863, -0.0171081, 0.0393914, -0.0171081, -0.132863, -0.497191, -1.26843, -2.70553, + -1.58454, -1.01167, -0.497191, -0.172121, -0.0898249, -0.0574045, -0.0574045, -0.0898249, -0.172121, + -0.497191, -1.01167, -1.58454, -0.534359, -0.308926, -0.132863, -0.0898249, -0.115021, -0.110088, + -0.115021, -0.0898249, -0.132863, -0.308926, -0.534359, -0.657074, -0.0574045, -0.0171081, -0.0171081, + -0.0574045, -0.110088, -0.110088, -0.0574045, -0.0171081, -0.0171081, -0.0574045, -0.110088, -0.110088, + 0.131457, 0.0987547, 0.0393914, -0.0574045, -0.115021, -0.0574045, 0.0393914, 0.0987547, 0.131457, + 0.141779, 0.139622, 0.141779, 0.212837, 0.0987547, -0.0171081, -0.0898249, -0.0898249, -0.0171081, + 0.0987547, 0.212837, 0.281572, 0.270514, 0.270514, 0.281572, 0.131457, -0.0171081, -0.132863, + -0.172121, -0.132863, -0.0171081, 0.131457, 0.281572, 0.359369, 0.357713, 0.359369, 0.281572, + -0.0574045, -0.308926, -0.497191, -0.497191, -0.308926, -0.0574045, 0.141779, 0.270514, 0.357713, + 0.357713, 0.270514, 0.141779, -0.534359, -1.01167, -1.26843, -1.01167, -0.534359, -0.110088, + 0.139622, 0.270514, 0.359369, 0.270514, 0.139622, -0.110088, -1.58454, -2.70553, -2.70553, + -1.58454, -0.657074, -0.110088, 0.141779, 0.281572, 0.281572, 0.141779, -0.110088, -0.657074, + -9.92124, -9.92124, -5.01899, -1.58454, -0.478208, -0.0898249, 0.0466734, 0.0466734, -0.0898249, + -0.478208, -1.58454, -5.01899, -9.92124, -7.0181, -2.70553, -0.884169, -0.301091, -0.132863, + -0.0948296, -0.132863, -0.301091, -0.884169, -2.70553, -7.0181, -5.01899, -2.70553, -1.09721, + -0.473447, -0.301091, -0.308926, -0.308926, -0.301091, -0.473447, -1.09721, -2.70553, -5.01899, + -1.58454, -0.884169, -0.473447, -0.364006, -0.478208, -0.534359, -0.478208, -0.364006, -0.473447, + -0.884169, -1.58454, -2.04137, -0.478208, -0.301091, -0.301091, -0.478208, -0.657074, -0.657074, + -0.478208, -0.301091, -0.301091, -0.478208, -0.657074, -0.657074, -0.0898249, -0.132863, -0.308926, + -0.534359, -0.657074, -0.534359, -0.308926, -0.132863, -0.0898249, -0.115021, -0.110088, -0.115021, + 0.0466734, -0.0948296, -0.308926, -0.478208, -0.478208, -0.308926, -0.0948296, 0.0466734, 0.100083, + 0.141779, 0.141779, 0.100083, 0.0466734, -0.132863, -0.301091, -0.364006, -0.301091, -0.132863, + 0.0466734, 0.200702, 0.281572, 0.279821, 0.281572, 0.200702, -0.0898249, -0.301091, -0.473447, + -0.473447, -0.301091, -0.0898249, 0.100083, 0.281572, 0.330283, 0.330283, 0.281572, 0.100083, + -0.478208, -0.884169, -1.09721, -0.884169, -0.478208, -0.115021, 0.141779, 0.279821, 0.330283, + 0.279821, 0.141779, -0.115021, -1.58454, -2.70553, -2.70553, -1.58454, -0.657074, -0.110088, + 0.141779, 0.281572, 0.281572, 0.141779, -0.110088, -0.657074, -5.01899, -7.0181, -5.01899, + -2.04137, -0.657074, -0.115021, 0.100083, 0.200702, 0.100083, -0.115021, -0.657074, -2.04137, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0.0113952, -0.0304188, -0.0446396, -0.0428457, -0.0353564, -0.0317802, -0.0308838, -0.0317802, -0.0353564, + -0.0428457, -0.0446396, -0.0304188, -0.0304188, -0.0429058, -0.0455848, -0.0402314, -0.0370432, -0.036863, + -0.036863, -0.0370432, -0.0402314, -0.0455848, -0.0429058, -0.0304188, -0.0446396, -0.0455848, -0.0420578, + -0.0402314, -0.0414021, -0.0418514, -0.0414021, -0.0402314, -0.0420578, -0.0455848, -0.0446396, -0.0424067, + -0.0428457, -0.0402314, -0.0402314, -0.0428457, -0.0441109, -0.0441109, -0.0428457, -0.0402314, -0.0402314, + -0.0428457, -0.0441109, -0.0441109, -0.0353564, -0.0370432, -0.0414021, -0.0441109, -0.0446622, -0.0441109, + -0.0414021, -0.0370432, -0.0353564, -0.0365349, -0.0371837, -0.0365349, -0.0317802, -0.036863, -0.0418514, + -0.0441109, -0.0441109, -0.0418514, -0.036863, -0.0317802, -0.0296686, -0.0290178, -0.0290178, -0.0296686, + -0.0308838, -0.036863, -0.0414021, -0.0428457, -0.0414021, -0.036863, -0.0308838, -0.0265916, -0.0242138, + -0.0232989, -0.0242138, -0.0265916, -0.0317802, -0.0370432, -0.0402314, -0.0402314, -0.0370432, -0.0317802, + -0.0265916, -0.0221271, -0.0201655, -0.0201655, -0.0221271, -0.0265916, -0.0353564, -0.0402314, -0.0420578, + -0.0402314, -0.0353564, -0.0296686, -0.0242138, -0.0201655, -0.0193712, -0.0201655, -0.0242138, -0.0296686, + -0.0428457, -0.0455848, -0.0455848, -0.0428457, -0.0365349, -0.0290178, -0.0232989, -0.0201655, -0.0201655, + -0.0232989, -0.0290178, -0.0365349, -0.0446396, -0.0429058, -0.0446396, -0.0441109, -0.0371837, -0.0290178, + -0.0242138, -0.0221271, -0.0242138, -0.0290178, -0.0371837, -0.0441109, -0.0304188, -0.0304188, -0.0424067, + -0.0441109, -0.0365349, -0.0296686, -0.0265916, -0.0265916, -0.0296686, -0.0365349, -0.0441109, -0.0424067, + -0.0304188, -0.0429058, -0.0455848, -0.0402314, -0.0370432, -0.036863, -0.036863, -0.0370432, -0.0402314, + -0.0455848, -0.0429058, -0.0304188, -0.0429058, -0.0464044, -0.043761, -0.0420578, -0.0430581, -0.0432904, + -0.0430581, -0.0420578, -0.043761, -0.0464044, -0.0429058, -0.03848, -0.0455848, -0.043761, -0.043761, + -0.0455848, -0.0451717, -0.0451717, -0.0455848, -0.043761, -0.043761, -0.0455848, -0.0451717, -0.0451717, + -0.0402314, -0.0420578, -0.0455848, -0.0446396, -0.0424067, -0.0446396, -0.0455848, -0.0420578, -0.0402314, + -0.0414021, -0.0418514, -0.0414021, -0.0370432, -0.0430581, -0.0451717, -0.0424067, -0.0424067, -0.0451717, + -0.0430581, -0.0370432, -0.0341488, -0.0338586, -0.0338586, -0.0341488, -0.036863, -0.0432904, -0.0451717, + -0.0446396, -0.0451717, -0.0432904, -0.036863, -0.0307931, -0.0280246, -0.0269136, -0.0280246, -0.0307931, + -0.036863, -0.0430581, -0.0455848, -0.0455848, -0.0430581, -0.036863, -0.0297967, -0.0250984, -0.0225708, + -0.0225708, -0.0250984, -0.0297967, -0.0370432, -0.0420578, -0.043761, -0.0420578, -0.0370432, -0.0307931, + -0.0250984, -0.0209264, -0.0199443, -0.0209264, -0.0250984, -0.0307931, -0.0402314, -0.043761, -0.043761, + -0.0402314, -0.0341488, -0.0280246, -0.0225708, -0.0199443, -0.0199443, -0.0225708, -0.0280246, -0.0341488, + -0.0455848, -0.0464044, -0.0455848, -0.0414021, -0.0338586, -0.0269136, -0.0225708, -0.0209264, -0.0225708, + -0.0269136, -0.0338586, -0.0414021, -0.0429058, -0.0429058, -0.0451717, -0.0418514, -0.0338586, -0.0280246, + -0.0250984, -0.0250984, -0.0280246, -0.0338586, -0.0418514, -0.0451717, -0.0304188, -0.03848, -0.0451717, + -0.0414021, -0.0341488, -0.0307931, -0.0297967, -0.0307931, -0.0341488, -0.0414021, -0.0451717, -0.03848, + -0.0446396, -0.0455848, -0.0420578, -0.0402314, -0.0414021, -0.0418514, -0.0414021, -0.0402314, -0.0420578, + -0.0455848, -0.0446396, -0.0424067, -0.0455848, -0.043761, -0.043761, -0.0455848, -0.0451717, -0.0451717, + -0.0455848, -0.043761, -0.043761, -0.0455848, -0.0451717, -0.0451717, -0.0420578, -0.043761, -0.0464044, + -0.0429058, -0.03848, -0.0429058, -0.0464044, -0.043761, -0.0420578, -0.0430581, -0.0432904, -0.0430581, + -0.0402314, -0.0455848, -0.0429058, -0.0304188, -0.0304188, -0.0429058, -0.0455848, -0.0402314, -0.0370432, + -0.036863, -0.036863, -0.0370432, -0.0414021, -0.0451717, -0.03848, -0.0304188, -0.03848, -0.0451717, + -0.0414021, -0.0341488, -0.0307931, -0.0297967, -0.0307931, -0.0341488, -0.0418514, -0.0451717, -0.0429058, + -0.0429058, -0.0451717, -0.0418514, -0.0338586, -0.0280246, -0.0250984, -0.0250984, -0.0280246, -0.0338586, + -0.0414021, -0.0455848, -0.0464044, -0.0455848, -0.0414021, -0.0338586, -0.0269136, -0.0225708, -0.0209264, + -0.0225708, -0.0269136, -0.0338586, -0.0402314, -0.043761, -0.043761, -0.0402314, -0.0341488, -0.0280246, + -0.0225708, -0.0199443, -0.0199443, -0.0225708, -0.0280246, -0.0341488, -0.0420578, -0.043761, -0.0420578, + -0.0370432, -0.0307931, -0.0250984, -0.0209264, -0.0199443, -0.0209264, -0.0250984, -0.0307931, -0.0370432, + -0.0455848, -0.0455848, -0.0430581, -0.036863, -0.0297967, -0.0250984, -0.0225708, -0.0225708, -0.0250984, + -0.0297967, -0.036863, -0.0430581, -0.0446396, -0.0451717, -0.0432904, -0.036863, -0.0307931, -0.0280246, + -0.0269136, -0.0280246, -0.0307931, -0.036863, -0.0432904, -0.0451717, -0.0424067, -0.0451717, -0.0430581, + -0.0370432, -0.0341488, -0.0338586, -0.0338586, -0.0341488, -0.0370432, -0.0430581, -0.0451717, -0.0424067, + -0.0428457, -0.0402314, -0.0402314, -0.0428457, -0.0441109, -0.0441109, -0.0428457, -0.0402314, -0.0402314, + -0.0428457, -0.0441109, -0.0441109, -0.0402314, -0.0420578, -0.0455848, -0.0446396, -0.0424067, -0.0446396, + -0.0455848, -0.0420578, -0.0402314, -0.0414021, -0.0418514, -0.0414021, -0.0402314, -0.0455848, -0.0429058, + -0.0304188, -0.0304188, -0.0429058, -0.0455848, -0.0402314, -0.0370432, -0.036863, -0.036863, -0.0370432, + -0.0428457, -0.0446396, -0.0304188, 0.0113952, -0.0304188, -0.0446396, -0.0428457, -0.0353564, -0.0317802, + -0.0308838, -0.0317802, -0.0353564, -0.0441109, -0.0424067, -0.0304188, -0.0304188, -0.0424067, -0.0441109, + -0.0365349, -0.0296686, -0.0265916, -0.0265916, -0.0296686, -0.0365349, -0.0441109, -0.0446396, -0.0429058, + -0.0446396, -0.0441109, -0.0371837, -0.0290178, -0.0242138, -0.0221271, -0.0242138, -0.0290178, -0.0371837, + -0.0428457, -0.0455848, -0.0455848, -0.0428457, -0.0365349, -0.0290178, -0.0232989, -0.0201655, -0.0201655, + -0.0232989, -0.0290178, -0.0365349, -0.0402314, -0.0420578, -0.0402314, -0.0353564, -0.0296686, -0.0242138, + -0.0201655, -0.0193712, -0.0201655, -0.0242138, -0.0296686, -0.0353564, -0.0402314, -0.0402314, -0.0370432, + -0.0317802, -0.0265916, -0.0221271, -0.0201655, -0.0201655, -0.0221271, -0.0265916, -0.0317802, -0.0370432, + -0.0428457, -0.0414021, -0.036863, -0.0308838, -0.0265916, -0.0242138, -0.0232989, -0.0242138, -0.0265916, + -0.0308838, -0.036863, -0.0414021, -0.0441109, -0.0418514, -0.036863, -0.0317802, -0.0296686, -0.0290178, + -0.0290178, -0.0296686, -0.0317802, -0.036863, -0.0418514, -0.0441109, -0.0441109, -0.0414021, -0.0370432, + -0.0353564, -0.0365349, -0.0371837, -0.0365349, -0.0353564, -0.0370432, -0.0414021, -0.0441109, -0.0446622, + -0.0353564, -0.0370432, -0.0414021, -0.0441109, -0.0446622, -0.0441109, -0.0414021, -0.0370432, -0.0353564, + -0.0365349, -0.0371837, -0.0365349, -0.0370432, -0.0430581, -0.0451717, -0.0424067, -0.0424067, -0.0451717, + -0.0430581, -0.0370432, -0.0341488, -0.0338586, -0.0338586, -0.0341488, -0.0414021, -0.0451717, -0.03848, + -0.0304188, -0.03848, -0.0451717, -0.0414021, -0.0341488, -0.0307931, -0.0297967, -0.0307931, -0.0341488, + -0.0441109, -0.0424067, -0.0304188, -0.0304188, -0.0424067, -0.0441109, -0.0365349, -0.0296686, -0.0265916, + -0.0265916, -0.0296686, -0.0365349, -0.0446622, -0.0424067, -0.03848, -0.0424067, -0.0446622, -0.0385981, + -0.0299759, -0.0248928, -0.0227097, -0.0248928, -0.0299759, -0.0385981, -0.0441109, -0.0451717, -0.0451717, + -0.0441109, -0.0385981, -0.030263, -0.0241298, -0.0204314, -0.0204314, -0.0241298, -0.030263, -0.0385981, + -0.0414021, -0.0430581, -0.0414021, -0.0365349, -0.0299759, -0.0241298, -0.0201325, -0.0186994, -0.0201325, + -0.0241298, -0.0299759, -0.0365349, -0.0370432, -0.0370432, -0.0341488, -0.0296686, -0.0248928, -0.0204314, + -0.0186994, -0.0186994, -0.0204314, -0.0248928, -0.0296686, -0.0341488, -0.0353564, -0.0341488, -0.0307931, + -0.0265916, -0.0227097, -0.0204314, -0.0201325, -0.0204314, -0.0227097, -0.0265916, -0.0307931, -0.0341488, + -0.0365349, -0.0338586, -0.0297967, -0.0265916, -0.0248928, -0.0241298, -0.0241298, -0.0248928, -0.0265916, + -0.0297967, -0.0338586, -0.0365349, -0.0371837, -0.0338586, -0.0307931, -0.0296686, -0.0299759, -0.030263, + -0.0299759, -0.0296686, -0.0307931, -0.0338586, -0.0371837, -0.0385981, -0.0365349, -0.0341488, -0.0341488, + -0.0365349, -0.0385981, -0.0385981, -0.0365349, -0.0341488, -0.0341488, -0.0365349, -0.0385981, -0.0385981, + -0.0317802, -0.036863, -0.0418514, -0.0441109, -0.0441109, -0.0418514, -0.036863, -0.0317802, -0.0296686, + -0.0290178, -0.0290178, -0.0296686, -0.036863, -0.0432904, -0.0451717, -0.0446396, -0.0451717, -0.0432904, + -0.036863, -0.0307931, -0.0280246, -0.0269136, -0.0280246, -0.0307931, -0.0418514, -0.0451717, -0.0429058, + -0.0429058, -0.0451717, -0.0418514, -0.0338586, -0.0280246, -0.0250984, -0.0250984, -0.0280246, -0.0338586, + -0.0441109, -0.0446396, -0.0429058, -0.0446396, -0.0441109, -0.0371837, -0.0290178, -0.0242138, -0.0221271, + -0.0242138, -0.0290178, -0.0371837, -0.0441109, -0.0451717, -0.0451717, -0.0441109, -0.0385981, -0.030263, + -0.0241298, -0.0204314, -0.0204314, -0.0241298, -0.030263, -0.0385981, -0.0418514, -0.0432904, -0.0418514, + -0.0371837, -0.030263, -0.0242585, -0.0201807, -0.0182172, -0.0201807, -0.0242585, -0.030263, -0.0371837, + -0.036863, -0.036863, -0.0338586, -0.0290178, -0.0241298, -0.0201807, -0.0178263, -0.0178263, -0.0201807, + -0.0241298, -0.0290178, -0.0338586, -0.0317802, -0.0307931, -0.0280246, -0.0242138, -0.0204314, -0.0182172, + -0.0178263, -0.0182172, -0.0204314, -0.0242138, -0.0280246, -0.0307931, -0.0296686, -0.0280246, -0.0250984, + -0.0221271, -0.0204314, -0.0201807, -0.0201807, -0.0204314, -0.0221271, -0.0250984, -0.0280246, -0.0296686, + -0.0290178, -0.0269136, -0.0250984, -0.0242138, -0.0241298, -0.0242585, -0.0241298, -0.0242138, -0.0250984, + -0.0269136, -0.0290178, -0.0299759, -0.0290178, -0.0280246, -0.0280246, -0.0290178, -0.030263, -0.030263, + -0.0290178, -0.0280246, -0.0280246, -0.0290178, -0.030263, -0.030263, -0.0296686, -0.0307931, -0.0338586, + -0.0371837, -0.0385981, -0.0371837, -0.0338586, -0.0307931, -0.0296686, -0.0299759, -0.030263, -0.0299759, + -0.0308838, -0.036863, -0.0414021, -0.0428457, -0.0414021, -0.036863, -0.0308838, -0.0265916, -0.0242138, + -0.0232989, -0.0242138, -0.0265916, -0.036863, -0.0430581, -0.0455848, -0.0455848, -0.0430581, -0.036863, + -0.0297967, -0.0250984, -0.0225708, -0.0225708, -0.0250984, -0.0297967, -0.0414021, -0.0455848, -0.0464044, + -0.0455848, -0.0414021, -0.0338586, -0.0269136, -0.0225708, -0.0209264, -0.0225708, -0.0269136, -0.0338586, + -0.0428457, -0.0455848, -0.0455848, -0.0428457, -0.0365349, -0.0290178, -0.0232989, -0.0201655, -0.0201655, + -0.0232989, -0.0290178, -0.0365349, -0.0414021, -0.0430581, -0.0414021, -0.0365349, -0.0299759, -0.0241298, + -0.0201325, -0.0186994, -0.0201325, -0.0241298, -0.0299759, -0.0365349, -0.036863, -0.036863, -0.0338586, + -0.0290178, -0.0241298, -0.0201807, -0.0178263, -0.0178263, -0.0201807, -0.0241298, -0.0290178, -0.0338586, + -0.0308838, -0.0297967, -0.0269136, -0.0232989, -0.0201325, -0.0178263, -0.0168417, -0.0178263, -0.0201325, + -0.0232989, -0.0269136, -0.0297967, -0.0265916, -0.0250984, -0.0225708, -0.0201655, -0.0186994, -0.0178263, + -0.0178263, -0.0186994, -0.0201655, -0.0225708, -0.0250984, -0.0265916, -0.0242138, -0.0225708, -0.0209264, + -0.0201655, -0.0201325, -0.0201807, -0.0201325, -0.0201655, -0.0209264, -0.0225708, -0.0242138, -0.0248928, + -0.0232989, -0.0225708, -0.0225708, -0.0232989, -0.0241298, -0.0241298, -0.0232989, -0.0225708, -0.0225708, + -0.0232989, -0.0241298, -0.0241298, -0.0242138, -0.0250984, -0.0269136, -0.0290178, -0.0299759, -0.0290178, + -0.0269136, -0.0250984, -0.0242138, -0.0241298, -0.0242585, -0.0241298, -0.0265916, -0.0297967, -0.0338586, + -0.0365349, -0.0365349, -0.0338586, -0.0297967, -0.0265916, -0.0248928, -0.0241298, -0.0241298, -0.0248928, + -0.0317802, -0.0370432, -0.0402314, -0.0402314, -0.0370432, -0.0317802, -0.0265916, -0.0221271, -0.0201655, + -0.0201655, -0.0221271, -0.0265916, -0.0370432, -0.0420578, -0.043761, -0.0420578, -0.0370432, -0.0307931, + -0.0250984, -0.0209264, -0.0199443, -0.0209264, -0.0250984, -0.0307931, -0.0402314, -0.043761, -0.043761, + -0.0402314, -0.0341488, -0.0280246, -0.0225708, -0.0199443, -0.0199443, -0.0225708, -0.0280246, -0.0341488, + -0.0402314, -0.0420578, -0.0402314, -0.0353564, -0.0296686, -0.0242138, -0.0201655, -0.0193712, -0.0201655, + -0.0242138, -0.0296686, -0.0353564, -0.0370432, -0.0370432, -0.0341488, -0.0296686, -0.0248928, -0.0204314, + -0.0186994, -0.0186994, -0.0204314, -0.0248928, -0.0296686, -0.0341488, -0.0317802, -0.0307931, -0.0280246, + -0.0242138, -0.0204314, -0.0182172, -0.0178263, -0.0182172, -0.0204314, -0.0242138, -0.0280246, -0.0307931, + -0.0265916, -0.0250984, -0.0225708, -0.0201655, -0.0186994, -0.0178263, -0.0178263, -0.0186994, -0.0201655, + -0.0225708, -0.0250984, -0.0265916, -0.0221271, -0.0209264, -0.0199443, -0.0193712, -0.0186994, -0.0182172, + -0.0186994, -0.0193712, -0.0199443, -0.0209264, -0.0221271, -0.0227097, -0.0201655, -0.0199443, -0.0199443, + -0.0201655, -0.0204314, -0.0204314, -0.0201655, -0.0199443, -0.0199443, -0.0201655, -0.0204314, -0.0204314, + -0.0201655, -0.0209264, -0.0225708, -0.0242138, -0.0248928, -0.0242138, -0.0225708, -0.0209264, -0.0201655, + -0.0201325, -0.0201807, -0.0201325, -0.0221271, -0.0250984, -0.0280246, -0.0296686, -0.0296686, -0.0280246, + -0.0250984, -0.0221271, -0.0204314, -0.0201807, -0.0201807, -0.0204314, -0.0265916, -0.0307931, -0.0341488, + -0.0353564, -0.0341488, -0.0307931, -0.0265916, -0.0227097, -0.0204314, -0.0201325, -0.0204314, -0.0227097, + -0.0353564, -0.0402314, -0.0420578, -0.0402314, -0.0353564, -0.0296686, -0.0242138, -0.0201655, -0.0193712, + -0.0201655, -0.0242138, -0.0296686, -0.0402314, -0.043761, -0.043761, -0.0402314, -0.0341488, -0.0280246, + -0.0225708, -0.0199443, -0.0199443, -0.0225708, -0.0280246, -0.0341488, -0.0420578, -0.043761, -0.0420578, + -0.0370432, -0.0307931, -0.0250984, -0.0209264, -0.0199443, -0.0209264, -0.0250984, -0.0307931, -0.0370432, + -0.0402314, -0.0402314, -0.0370432, -0.0317802, -0.0265916, -0.0221271, -0.0201655, -0.0201655, -0.0221271, + -0.0265916, -0.0317802, -0.0370432, -0.0353564, -0.0341488, -0.0307931, -0.0265916, -0.0227097, -0.0204314, + -0.0201325, -0.0204314, -0.0227097, -0.0265916, -0.0307931, -0.0341488, -0.0296686, -0.0280246, -0.0250984, + -0.0221271, -0.0204314, -0.0201807, -0.0201807, -0.0204314, -0.0221271, -0.0250984, -0.0280246, -0.0296686, + -0.0242138, -0.0225708, -0.0209264, -0.0201655, -0.0201325, -0.0201807, -0.0201325, -0.0201655, -0.0209264, + -0.0225708, -0.0242138, -0.0248928, -0.0201655, -0.0199443, -0.0199443, -0.0201655, -0.0204314, -0.0204314, + -0.0201655, -0.0199443, -0.0199443, -0.0201655, -0.0204314, -0.0204314, -0.0193712, -0.0199443, -0.0209264, + -0.0221271, -0.0227097, -0.0221271, -0.0209264, -0.0199443, -0.0193712, -0.0186994, -0.0182172, -0.0186994, + -0.0201655, -0.0225708, -0.0250984, -0.0265916, -0.0265916, -0.0250984, -0.0225708, -0.0201655, -0.0186994, + -0.0178263, -0.0178263, -0.0186994, -0.0242138, -0.0280246, -0.0307931, -0.0317802, -0.0307931, -0.0280246, + -0.0242138, -0.0204314, -0.0182172, -0.0178263, -0.0182172, -0.0204314, -0.0296686, -0.0341488, -0.0370432, + -0.0370432, -0.0341488, -0.0296686, -0.0248928, -0.0204314, -0.0186994, -0.0186994, -0.0204314, -0.0248928, + -0.0428457, -0.0455848, -0.0455848, -0.0428457, -0.0365349, -0.0290178, -0.0232989, -0.0201655, -0.0201655, + -0.0232989, -0.0290178, -0.0365349, -0.0455848, -0.0464044, -0.0455848, -0.0414021, -0.0338586, -0.0269136, + -0.0225708, -0.0209264, -0.0225708, -0.0269136, -0.0338586, -0.0414021, -0.0455848, -0.0455848, -0.0430581, + -0.036863, -0.0297967, -0.0250984, -0.0225708, -0.0225708, -0.0250984, -0.0297967, -0.036863, -0.0430581, + -0.0428457, -0.0414021, -0.036863, -0.0308838, -0.0265916, -0.0242138, -0.0232989, -0.0242138, -0.0265916, + -0.0308838, -0.036863, -0.0414021, -0.0365349, -0.0338586, -0.0297967, -0.0265916, -0.0248928, -0.0241298, + -0.0241298, -0.0248928, -0.0265916, -0.0297967, -0.0338586, -0.0365349, -0.0290178, -0.0269136, -0.0250984, + -0.0242138, -0.0241298, -0.0242585, -0.0241298, -0.0242138, -0.0250984, -0.0269136, -0.0290178, -0.0299759, + -0.0232989, -0.0225708, -0.0225708, -0.0232989, -0.0241298, -0.0241298, -0.0232989, -0.0225708, -0.0225708, + -0.0232989, -0.0241298, -0.0241298, -0.0201655, -0.0209264, -0.0225708, -0.0242138, -0.0248928, -0.0242138, + -0.0225708, -0.0209264, -0.0201655, -0.0201325, -0.0201807, -0.0201325, -0.0201655, -0.0225708, -0.0250984, + -0.0265916, -0.0265916, -0.0250984, -0.0225708, -0.0201655, -0.0186994, -0.0178263, -0.0178263, -0.0186994, + -0.0232989, -0.0269136, -0.0297967, -0.0308838, -0.0297967, -0.0269136, -0.0232989, -0.0201325, -0.0178263, + -0.0168417, -0.0178263, -0.0201325, -0.0290178, -0.0338586, -0.036863, -0.036863, -0.0338586, -0.0290178, + -0.0241298, -0.0201807, -0.0178263, -0.0178263, -0.0201807, -0.0241298, -0.0365349, -0.0414021, -0.0430581, + -0.0414021, -0.0365349, -0.0299759, -0.0241298, -0.0201325, -0.0186994, -0.0201325, -0.0241298, -0.0299759, + -0.0446396, -0.0429058, -0.0446396, -0.0441109, -0.0371837, -0.0290178, -0.0242138, -0.0221271, -0.0242138, + -0.0290178, -0.0371837, -0.0441109, -0.0429058, -0.0429058, -0.0451717, -0.0418514, -0.0338586, -0.0280246, + -0.0250984, -0.0250984, -0.0280246, -0.0338586, -0.0418514, -0.0451717, -0.0446396, -0.0451717, -0.0432904, + -0.036863, -0.0307931, -0.0280246, -0.0269136, -0.0280246, -0.0307931, -0.036863, -0.0432904, -0.0451717, + -0.0441109, -0.0418514, -0.036863, -0.0317802, -0.0296686, -0.0290178, -0.0290178, -0.0296686, -0.0317802, + -0.036863, -0.0418514, -0.0441109, -0.0371837, -0.0338586, -0.0307931, -0.0296686, -0.0299759, -0.030263, + -0.0299759, -0.0296686, -0.0307931, -0.0338586, -0.0371837, -0.0385981, -0.0290178, -0.0280246, -0.0280246, + -0.0290178, -0.030263, -0.030263, -0.0290178, -0.0280246, -0.0280246, -0.0290178, -0.030263, -0.030263, + -0.0242138, -0.0250984, -0.0269136, -0.0290178, -0.0299759, -0.0290178, -0.0269136, -0.0250984, -0.0242138, + -0.0241298, -0.0242585, -0.0241298, -0.0221271, -0.0250984, -0.0280246, -0.0296686, -0.0296686, -0.0280246, + -0.0250984, -0.0221271, -0.0204314, -0.0201807, -0.0201807, -0.0204314, -0.0242138, -0.0280246, -0.0307931, + -0.0317802, -0.0307931, -0.0280246, -0.0242138, -0.0204314, -0.0182172, -0.0178263, -0.0182172, -0.0204314, + -0.0290178, -0.0338586, -0.036863, -0.036863, -0.0338586, -0.0290178, -0.0241298, -0.0201807, -0.0178263, + -0.0178263, -0.0201807, -0.0241298, -0.0371837, -0.0418514, -0.0432904, -0.0418514, -0.0371837, -0.030263, + -0.0242585, -0.0201807, -0.0182172, -0.0201807, -0.0242585, -0.030263, -0.0441109, -0.0451717, -0.0451717, + -0.0441109, -0.0385981, -0.030263, -0.0241298, -0.0204314, -0.0204314, -0.0241298, -0.030263, -0.0385981, + -0.0304188, -0.0304188, -0.0424067, -0.0441109, -0.0365349, -0.0296686, -0.0265916, -0.0265916, -0.0296686, + -0.0365349, -0.0441109, -0.0424067, -0.0304188, -0.03848, -0.0451717, -0.0414021, -0.0341488, -0.0307931, + -0.0297967, -0.0307931, -0.0341488, -0.0414021, -0.0451717, -0.03848, -0.0424067, -0.0451717, -0.0430581, + -0.0370432, -0.0341488, -0.0338586, -0.0338586, -0.0341488, -0.0370432, -0.0430581, -0.0451717, -0.0424067, + -0.0441109, -0.0414021, -0.0370432, -0.0353564, -0.0365349, -0.0371837, -0.0365349, -0.0353564, -0.0370432, + -0.0414021, -0.0441109, -0.0446622, -0.0365349, -0.0341488, -0.0341488, -0.0365349, -0.0385981, -0.0385981, + -0.0365349, -0.0341488, -0.0341488, -0.0365349, -0.0385981, -0.0385981, -0.0296686, -0.0307931, -0.0338586, + -0.0371837, -0.0385981, -0.0371837, -0.0338586, -0.0307931, -0.0296686, -0.0299759, -0.030263, -0.0299759, + -0.0265916, -0.0297967, -0.0338586, -0.0365349, -0.0365349, -0.0338586, -0.0297967, -0.0265916, -0.0248928, + -0.0241298, -0.0241298, -0.0248928, -0.0265916, -0.0307931, -0.0341488, -0.0353564, -0.0341488, -0.0307931, + -0.0265916, -0.0227097, -0.0204314, -0.0201325, -0.0204314, -0.0227097, -0.0296686, -0.0341488, -0.0370432, + -0.0370432, -0.0341488, -0.0296686, -0.0248928, -0.0204314, -0.0186994, -0.0186994, -0.0204314, -0.0248928, + -0.0365349, -0.0414021, -0.0430581, -0.0414021, -0.0365349, -0.0299759, -0.0241298, -0.0201325, -0.0186994, + -0.0201325, -0.0241298, -0.0299759, -0.0441109, -0.0451717, -0.0451717, -0.0441109, -0.0385981, -0.030263, + -0.0241298, -0.0204314, -0.0204314, -0.0241298, -0.030263, -0.0385981, -0.0424067, -0.03848, -0.0424067, + -0.0446622, -0.0385981, -0.0299759, -0.0248928, -0.0227097, -0.0248928, -0.0299759, -0.0385981, -0.0446622}; const base_device::DEVICE_CPU* cpu_ctx = {}; const base_device::DEVICE_GPU* gpu_ctx = {}; @@ -49,9 +2316,11 @@ class TestModuleHamiltVeff : public ::testing::Test using syncmem_double_h2d_op = base_device::memory::synchronize_memory_op; - void SetUp() override { + void SetUp() override + { } - void TearDown() override { + void TearDown() override + { } }; @@ -59,7 +2328,8 @@ TEST_F(TestModuleHamiltVeff, veff_pw_op_cpu) { std::vector> res = out; veff_cpu_op()(cpu_ctx, this->size, res.data(), in.data()); - for (int ii = 0; ii < res.size(); ii++) { + for (int ii = 0; ii < res.size(); ii++) + { EXPECT_LT(std::abs(res[ii] - expected_out[ii]), 6e-5); } } @@ -71,13 +2341,15 @@ TEST_F(TestModuleHamiltVeff, veff_pw_spin_op_cpu) std::vector> res = out_spin; std::vector> res1 = out1_spin; - const double * in_[4]; - for (int ii = 0; ii < 4; ii++) { + const double* in_[4]; + for (int ii = 0; ii < 4; ii++) + { in_[ii] = in_spin.data() + ii * this->size; } veff_cpu_op()(cpu_ctx, this->size, res.data(), res1.data(), in_); - for (int ii = 0; ii < res.size(); ii++) { + for (int ii = 0; ii < res.size(); ii++) + { EXPECT_LT(std::abs(res[ii] - expected_out_spin[ii]), 7.5e-5); EXPECT_LT(std::abs(res1[ii] - expected_out1_spin[ii]), 6e-5); } @@ -97,7 +2369,8 @@ TEST_F(TestModuleHamiltVeff, veff_pw_op_gpu) veff_gpu_op()(gpu_ctx, this->size, d_res, d_in); syncmem_complex_d2h_op()(res.data(), d_res, res.size()); - for (int ii = 0; ii < res.size(); ii++) { + for (int ii = 0; ii < res.size(); ii++) + { EXPECT_LT(fabs(res[ii] - expected_out[ii]), 6e-5); } delete_memory_double_op()(d_in); @@ -111,7 +2384,7 @@ TEST_F(TestModuleHamiltVeff, veff_pw_spin_op_gpu) std::vector> res = out_spin; std::vector> res1 = out1_spin; double* d_in = NULL; - std::complex* d_res = NULL, * d_res1 = NULL; + std::complex*d_res = NULL, *d_res1 = NULL; resize_memory_double_op()(d_in, in_spin.size()); resize_memory_complex_op()(d_res, res.size()); resize_memory_complex_op()(d_res1, res1.size()); @@ -119,8 +2392,9 @@ TEST_F(TestModuleHamiltVeff, veff_pw_spin_op_gpu) syncmem_complex_h2d_op()(d_res, res.data(), res.size()); syncmem_complex_h2d_op()(d_res1, res1.data(), res1.size()); - const double * in_[4]; - for (int ii = 0; ii < 4; ii++) { + const double* in_[4]; + for (int ii = 0; ii < 4; ii++) + { in_[ii] = d_in + ii * this->size; } @@ -128,7 +2402,8 @@ TEST_F(TestModuleHamiltVeff, veff_pw_spin_op_gpu) syncmem_complex_d2h_op()(res.data(), d_res, res.size()); syncmem_complex_d2h_op()(res1.data(), d_res1, res1.size()); - for (int ii = 0; ii < res.size(); ii++) { + for (int ii = 0; ii < res.size(); ii++) + { EXPECT_LT(fabs(res[ii] - expected_out_spin[ii]), 7.5e-5); EXPECT_LT(fabs(res1[ii] - expected_out1_spin[ii]), 6e-5); } diff --git a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/vnl_op_test.cpp b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/vnl_op_test.cpp index be5e6a8a68..fe1a1c804d 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/vnl_op_test.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/vnl_op_test.cpp @@ -1,6 +1,6 @@ #include "module_hamilt_pw/hamilt_pwdft/kernels/vnl_op.h" -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/memory_op.h" #include #include diff --git a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/wf_op_test.cpp b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/wf_op_test.cpp index 2463234c31..2a6f549652 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/kernels/test/wf_op_test.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/kernels/test/wf_op_test.cpp @@ -1,6 +1,6 @@ #include "module_hamilt_pw/hamilt_pwdft/kernels/wf_op.h" -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/memory_op.h" #include #include @@ -8,364 +8,365 @@ class TestSrcPWWfMultiDevice : public ::testing::Test { -protected: + protected: // xx = tf.random.uniform([100], minval=-4, maxval=4, dtype = tf.float64) - const base_device::DEVICE_CPU* cpu_ctx = {}; - const base_device::DEVICE_GPU* gpu_ctx = {}; + const base_device::DEVICE_CPU* cpu_ctx = {}; + const base_device::DEVICE_GPU* gpu_ctx = {}; - int ik = 0, ntype = 1, nx = 12, ny = 12, nz = 12, rho_nx = 12, rho_ny = 12, rho_nz = 12, npw = 59, npwx = 70, - fftny = 12, eigts1_nc = 25, eigts2_nc = 25, eigts3_nc = 25; + int ik = 0, ntype = 1, nx = 12, ny = 12, nz = 12, rho_nx = 12, rho_ny = 12, rho_nz = 12, npw = 59, npwx = 70, + fftny = 12, eigts1_nc = 25, eigts2_nc = 25, eigts3_nc = 25; - double TWO_PI = 6.2831853071795862; + double TWO_PI = 6.2831853071795862; - std::vector atom_na{2}; - std::vector igl2isz{ - 10, 11, 0, 1, 2, 23, 12, 13, 14, 24, 25, 71, - 60, 82, 83, 72, 73, 95, 84, 85, 86, 107, 96, 97, - 98, 108, 109, 110, 155, 144, 145, 156, 157, 168, 169, 170, - 181, 182, 323, 312, 358, 359, 370, 371, 360, 382, 383, 372, - 373, 395, 384, 385, 430, 431, 420, 442, 443, 432, 433, -1074790400, - 0, 0, 0, 1072693248, 0, 0, 0, -1074790400, 0, 1072693248, 10, 11, - 0, 1, 23, 12, 13, 70, 71, 60, 82, 83, 72, 73, - 95, 84, 85, 107, 96, 97, 98, 109, 155, 144, 145, 169, - 285, 286, 297, 298, 299, 310, 311, 322, 323, 312, 345, 346, - 347, 357, 358, 359, 348, 369, 370, 371, 360, 382, 383, 372, - 373, 395, 384, 385, 418, 419, 429, 430, 431, 420, 441, 442, - 443, 432, 433, -1074790400, 0, 0, 0, -1074790400, 10, 11, 0, 1, - 2, 23, 12, 13, 14, 24, 25, 70, 71, 60, 82, 83, - 72, 73, 95, 84, 85, 86, 107, 96, 97, 98, 108, 109, - 155, 144, 145, 156, 157, 168, 169, 298, 299, 310, 311, 322, - 323, 312, 346, 347, 357, 358, 359, 348, 369, 370, 371, 360, - 382, 383, 372, 373, 395, 384, 385, 418, 419, 429, 430, 431, - 420, 441, 442, 443, 432, 433, 10, 11, 0, 1, 23, 12, - 13, 58, 59, 69, 70, 71, 60, 81, 82, 83, 72, 73, - 94, 95, 84, 85, 107, 96, 97, 142, 143, 132, 154, 155, - 144, 145, 167, 156, 157, 168, 169, 215, 204, 345, 346, 357, - 358, 359, 370, 371, 382, 383, 372, 417, 418, 419, 429, 430, - 431, 420, 441, 442, 443, 432, 0, 1072693248, 0, 0, 0, 0, - 0, 0, 0, 1072693248, 11, 0, 1, 2, 23, 12, 13, 14, - 70, 71, 60, 61, 82, 83, 72, 73, 74, 95, 84, 85, - 86, 96, 97, 98, 109, 155, 144, 145, 169, 286, 287, 298, - 299, 310, 311, 300, 322, 323, 312, 313, 346, 347, 357, 358, - 359, 348, 370, 371, 360, 361, 382, 383, 372, 373, 374, 395, - 384, 385, 418, 419, 408, 430, 431, 420, 421, 442, 443, 432, - 433, 0, 10, 11, 0, 1, 2, 23, 12, 13, 14, 70, - 71, 60, 82, 83, 72, 73, 95, 84, 85, 86, 96, 97, - 98, 109, 155, 144, 145, 169, 286, 297, 298, 299, 310, 311, - 322, 323, 312, 345, 346, 347, 357, 358, 359, 348, 369, 370, - 371, 360, 361, 382, 383, 372, 373, 395, 384, 385, 418, 419, - 429, 430, 431, 420, 421, 442, 443, 432, 433, 0, 0, 0, - 10, 11, 0, 1, 23, 12, 13, 70, 71, 60, 82, 83, - 72, 73, 94, 95, 84, 85, 86, 107, 96, 97, 98, 108, - 109, 143, 132, 154, 155, 144, 145, 167, 156, 157, 168, 169, - 170, 181, 204, 323, 346, 357, 358, 359, 370, 371, 360, 382, - 383, 372, 373, 395, 384, 418, 419, 429, 430, 431, 420, 441, - 442, 443, 432, 433, 0, 1072693248, 0, 1072693248, 0, 0, 10, 11, - 0, 1, 2, 23, 12, 13, 14, 24, 25, 71, 60, 82, - 83, 72, 73, 95, 84, 85, 86, 96, 97, 98, 109, 110, - 155, 144, 145, 169, 286, 298, 299, 310, 311, 300, 322, 323, - 312, 313, 324, 346, 347, 357, 358, 359, 348, 370, 371, 360, - 361, 382, 383, 372, 373, 374, 395, 384, 385, 419, 430, 431, - 420, 421, 442, 443, 432, 433, 0, 1072693248}; - std::vector is2fftixy{0, 1, 2, 3, 9, 10, 11, 12, 13, 14, 15, 22, 23, 24, 25, 26, 27, 35, 36, - 37, 38, 39, 108, 117, 118, 119, 120, 121, 129, 130, 131, 132, 133, 134, 141, 142, 143}; + std::vector atom_na{2}; + std::vector igl2isz{ + 10, 11, 0, 1, 2, 23, 12, 13, 14, 24, 25, 71, + 60, 82, 83, 72, 73, 95, 84, 85, 86, 107, 96, 97, + 98, 108, 109, 110, 155, 144, 145, 156, 157, 168, 169, 170, + 181, 182, 323, 312, 358, 359, 370, 371, 360, 382, 383, 372, + 373, 395, 384, 385, 430, 431, 420, 442, 443, 432, 433, -1074790400, + 0, 0, 0, 1072693248, 0, 0, 0, -1074790400, 0, 1072693248, 10, 11, + 0, 1, 23, 12, 13, 70, 71, 60, 82, 83, 72, 73, + 95, 84, 85, 107, 96, 97, 98, 109, 155, 144, 145, 169, + 285, 286, 297, 298, 299, 310, 311, 322, 323, 312, 345, 346, + 347, 357, 358, 359, 348, 369, 370, 371, 360, 382, 383, 372, + 373, 395, 384, 385, 418, 419, 429, 430, 431, 420, 441, 442, + 443, 432, 433, -1074790400, 0, 0, 0, -1074790400, 10, 11, 0, 1, + 2, 23, 12, 13, 14, 24, 25, 70, 71, 60, 82, 83, + 72, 73, 95, 84, 85, 86, 107, 96, 97, 98, 108, 109, + 155, 144, 145, 156, 157, 168, 169, 298, 299, 310, 311, 322, + 323, 312, 346, 347, 357, 358, 359, 348, 369, 370, 371, 360, + 382, 383, 372, 373, 395, 384, 385, 418, 419, 429, 430, 431, + 420, 441, 442, 443, 432, 433, 10, 11, 0, 1, 23, 12, + 13, 58, 59, 69, 70, 71, 60, 81, 82, 83, 72, 73, + 94, 95, 84, 85, 107, 96, 97, 142, 143, 132, 154, 155, + 144, 145, 167, 156, 157, 168, 169, 215, 204, 345, 346, 357, + 358, 359, 370, 371, 382, 383, 372, 417, 418, 419, 429, 430, + 431, 420, 441, 442, 443, 432, 0, 1072693248, 0, 0, 0, 0, + 0, 0, 0, 1072693248, 11, 0, 1, 2, 23, 12, 13, 14, + 70, 71, 60, 61, 82, 83, 72, 73, 74, 95, 84, 85, + 86, 96, 97, 98, 109, 155, 144, 145, 169, 286, 287, 298, + 299, 310, 311, 300, 322, 323, 312, 313, 346, 347, 357, 358, + 359, 348, 370, 371, 360, 361, 382, 383, 372, 373, 374, 395, + 384, 385, 418, 419, 408, 430, 431, 420, 421, 442, 443, 432, + 433, 0, 10, 11, 0, 1, 2, 23, 12, 13, 14, 70, + 71, 60, 82, 83, 72, 73, 95, 84, 85, 86, 96, 97, + 98, 109, 155, 144, 145, 169, 286, 297, 298, 299, 310, 311, + 322, 323, 312, 345, 346, 347, 357, 358, 359, 348, 369, 370, + 371, 360, 361, 382, 383, 372, 373, 395, 384, 385, 418, 419, + 429, 430, 431, 420, 421, 442, 443, 432, 433, 0, 0, 0, + 10, 11, 0, 1, 23, 12, 13, 70, 71, 60, 82, 83, + 72, 73, 94, 95, 84, 85, 86, 107, 96, 97, 98, 108, + 109, 143, 132, 154, 155, 144, 145, 167, 156, 157, 168, 169, + 170, 181, 204, 323, 346, 357, 358, 359, 370, 371, 360, 382, + 383, 372, 373, 395, 384, 418, 419, 429, 430, 431, 420, 441, + 442, 443, 432, 433, 0, 1072693248, 0, 1072693248, 0, 0, 10, 11, + 0, 1, 2, 23, 12, 13, 14, 24, 25, 71, 60, 82, + 83, 72, 73, 95, 84, 85, 86, 96, 97, 98, 109, 110, + 155, 144, 145, 169, 286, 298, 299, 310, 311, 300, 322, 323, + 312, 313, 324, 346, 347, 357, 358, 359, 348, 370, 371, 360, + 361, 382, 383, 372, 373, 374, 395, 384, 385, 419, 430, 431, + 420, 421, 442, 443, 432, 433, 0, 1072693248}; + std::vector is2fftixy{0, 1, 2, 3, 9, 10, 11, 12, 13, 14, 15, 22, 23, 24, 25, 26, 27, 35, 36, + 37, 38, 39, 108, 117, 118, 119, 120, 121, 129, 130, 131, 132, 133, 134, 141, 142, 143}; - std::vector kvec_c = {0, 0, 0, 0.75, 0.75, 0.75, 0.5, 0.5}; - std::vector atom_tau = {0, 0, 0, 0.25, 0.25, 0.25}; + std::vector kvec_c = {0, 0, 0, 0.75, 0.75, 0.75, 0.5, 0.5}; + std::vector atom_tau = {0, 0, 0, 0.25, 0.25, 0.25}; - std::vector> eigts1 = {{1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -7.34788e-16}, - {-2.44991e-15, -1}, - {-1, 6.12323e-16}, - {5.51091e-16, 1}, - {1, -4.89859e-16}, - {-4.28626e-16, -1}, - {-1, 3.67394e-16}, - {3.06162e-16, 1}, - {1, -2.44929e-16}, - {-1.83697e-16, -1}, - {-1, 1.22465e-16}, - {6.12323e-17, 1}, - {1, -0}, - {6.12323e-17, -1}, - {-1, -1.22465e-16}, - {-1.83697e-16, 1}, - {1, 2.44929e-16}, - {3.06162e-16, -1}, - {-1, -3.67394e-16}, - {-4.28626e-16, 1}, - {1, 4.89859e-16}, - {5.51091e-16, -1}, - {-1, -6.12323e-16}, - {-2.44991e-15, 1}, - {1, 7.34788e-16}}; - std::vector> eigts2 = {{1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -7.34788e-16}, - {-2.44991e-15, -1}, - {-1, 6.12323e-16}, - {5.51091e-16, 1}, - {1, -4.89859e-16}, - {-4.28626e-16, -1}, - {-1, 3.67394e-16}, - {3.06162e-16, 1}, - {1, -2.44929e-16}, - {-1.83697e-16, -1}, - {-1, 1.22465e-16}, - {6.12323e-17, 1}, - {1, -0}, - {6.12323e-17, -1}, - {-1, -1.22465e-16}, - {-1.83697e-16, 1}, - {1, 2.44929e-16}, - {3.06162e-16, -1}, - {-1, -3.67394e-16}, - {-4.28626e-16, 1}, - {1, 4.89859e-16}, - {5.51091e-16, -1}, - {-1, -6.12323e-16}, - {-2.44991e-15, 1}, - {1, 7.34788e-16}}; - std::vector> eigts3 = {{1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -7.34788e-16}, - {-2.44991e-15, -1}, - {-1, 6.12323e-16}, - {5.51091e-16, 1}, - {1, -4.89859e-16}, - {-4.28626e-16, -1}, - {-1, 3.67394e-16}, - {3.06162e-16, 1}, - {1, -2.44929e-16}, - {-1.83697e-16, -1}, - {-1, 1.22465e-16}, - {6.12323e-17, 1}, - {1, -0}, - {6.12323e-17, -1}, - {-1, -1.22465e-16}, - {-1.83697e-16, 1}, - {1, 2.44929e-16}, - {3.06162e-16, -1}, - {-1, -3.67394e-16}, - {-4.28626e-16, 1}, - {1, 4.89859e-16}, - {5.51091e-16, -1}, - {-1, -6.12323e-16}, - {-2.44991e-15, 1}, - {1, 7.34788e-16}}; - std::vector> expected_sk = {{1, 0}, - {1, 0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, 0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, 0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, -0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {1, 0}, - {-1, 1.22465e-16}, - {6.12323e-17, 1}, - {1, -0}, - {6.12323e-17, -1}, - {-1, -1.22465e-16}, - {1, 0}, - {6.12323e-17, -1}, - {-1, -1.22465e-16}, - {-1.83697e-16, 1}, - {-1, -1.22465e-16}, - {-1.83697e-16, 1}, - {-1.83697e-16, -1}, - {-1, 1.22465e-16}, - {-1.83697e-16, -1}, - {-1, 1.22465e-16}, - {6.12323e-17, 1}, - {1, 0}, - {1, 0}, - {6.12323e-17, -1}, - {-1, -1.22465e-16}, - {-1.83697e-16, 1}, - {6.12323e-17, -1}, - {-1, -1.22465e-16}, - {-1.83697e-16, 1}, - {1, 2.44929e-16}, - {-1.83697e-16, 1}, - {1, 2.44929e-16}, - {3.06162e-16, -1}, - {6.12323e-17, 1}, - {1, 0}, - {6.12323e-17, -1}, - {-1, -1.22465e-16}, - {-1.83697e-16, 1}, - {-1.83697e-16, 1}, - {1, 2.44929e-16}, - {3.06162e-16, -1}, - {3.06162e-16, -1}, - {-1, -3.67394e-16}, - {-1.83697e-16, -1}, - {-1, 1.22465e-16}, - {-1, 3.67394e-16}, - {3.06162e-16, 1}, - {3.06162e-16, 1}, - {1, -2.44929e-16}, - {-1.83697e-16, -1}, - {-1.83697e-16, -1}, - {-1, 1.22465e-16}, - {6.12323e-17, 1}, - {1, 0}, - {6.12323e-17, 1}, - {1, 0}, - {6.12323e-17, -1}, - {3.06162e-16, 1}, - {1, -2.44929e-16}, - {-1.83697e-16, -1}, - {1, -2.44929e-16}, - {-1.83697e-16, -1}, - {-1, 1.22465e-16}, - {6.12323e-17, 1}}; + std::vector> eigts1 = {{1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -7.34788e-16}, + {-2.44991e-15, -1}, + {-1, 6.12323e-16}, + {5.51091e-16, 1}, + {1, -4.89859e-16}, + {-4.28626e-16, -1}, + {-1, 3.67394e-16}, + {3.06162e-16, 1}, + {1, -2.44929e-16}, + {-1.83697e-16, -1}, + {-1, 1.22465e-16}, + {6.12323e-17, 1}, + {1, -0}, + {6.12323e-17, -1}, + {-1, -1.22465e-16}, + {-1.83697e-16, 1}, + {1, 2.44929e-16}, + {3.06162e-16, -1}, + {-1, -3.67394e-16}, + {-4.28626e-16, 1}, + {1, 4.89859e-16}, + {5.51091e-16, -1}, + {-1, -6.12323e-16}, + {-2.44991e-15, 1}, + {1, 7.34788e-16}}; + std::vector> eigts2 = {{1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -7.34788e-16}, + {-2.44991e-15, -1}, + {-1, 6.12323e-16}, + {5.51091e-16, 1}, + {1, -4.89859e-16}, + {-4.28626e-16, -1}, + {-1, 3.67394e-16}, + {3.06162e-16, 1}, + {1, -2.44929e-16}, + {-1.83697e-16, -1}, + {-1, 1.22465e-16}, + {6.12323e-17, 1}, + {1, -0}, + {6.12323e-17, -1}, + {-1, -1.22465e-16}, + {-1.83697e-16, 1}, + {1, 2.44929e-16}, + {3.06162e-16, -1}, + {-1, -3.67394e-16}, + {-4.28626e-16, 1}, + {1, 4.89859e-16}, + {5.51091e-16, -1}, + {-1, -6.12323e-16}, + {-2.44991e-15, 1}, + {1, 7.34788e-16}}; + std::vector> eigts3 = {{1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -7.34788e-16}, + {-2.44991e-15, -1}, + {-1, 6.12323e-16}, + {5.51091e-16, 1}, + {1, -4.89859e-16}, + {-4.28626e-16, -1}, + {-1, 3.67394e-16}, + {3.06162e-16, 1}, + {1, -2.44929e-16}, + {-1.83697e-16, -1}, + {-1, 1.22465e-16}, + {6.12323e-17, 1}, + {1, -0}, + {6.12323e-17, -1}, + {-1, -1.22465e-16}, + {-1.83697e-16, 1}, + {1, 2.44929e-16}, + {3.06162e-16, -1}, + {-1, -3.67394e-16}, + {-4.28626e-16, 1}, + {1, 4.89859e-16}, + {5.51091e-16, -1}, + {-1, -6.12323e-16}, + {-2.44991e-15, 1}, + {1, 7.34788e-16}}; + std::vector> expected_sk = {{1, 0}, + {1, 0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, 0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, 0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, -0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {1, 0}, + {-1, 1.22465e-16}, + {6.12323e-17, 1}, + {1, -0}, + {6.12323e-17, -1}, + {-1, -1.22465e-16}, + {1, 0}, + {6.12323e-17, -1}, + {-1, -1.22465e-16}, + {-1.83697e-16, 1}, + {-1, -1.22465e-16}, + {-1.83697e-16, 1}, + {-1.83697e-16, -1}, + {-1, 1.22465e-16}, + {-1.83697e-16, -1}, + {-1, 1.22465e-16}, + {6.12323e-17, 1}, + {1, 0}, + {1, 0}, + {6.12323e-17, -1}, + {-1, -1.22465e-16}, + {-1.83697e-16, 1}, + {6.12323e-17, -1}, + {-1, -1.22465e-16}, + {-1.83697e-16, 1}, + {1, 2.44929e-16}, + {-1.83697e-16, 1}, + {1, 2.44929e-16}, + {3.06162e-16, -1}, + {6.12323e-17, 1}, + {1, 0}, + {6.12323e-17, -1}, + {-1, -1.22465e-16}, + {-1.83697e-16, 1}, + {-1.83697e-16, 1}, + {1, 2.44929e-16}, + {3.06162e-16, -1}, + {3.06162e-16, -1}, + {-1, -3.67394e-16}, + {-1.83697e-16, -1}, + {-1, 1.22465e-16}, + {-1, 3.67394e-16}, + {3.06162e-16, 1}, + {3.06162e-16, 1}, + {1, -2.44929e-16}, + {-1.83697e-16, -1}, + {-1.83697e-16, -1}, + {-1, 1.22465e-16}, + {6.12323e-17, 1}, + {1, 0}, + {6.12323e-17, 1}, + {1, 0}, + {6.12323e-17, -1}, + {3.06162e-16, 1}, + {1, -2.44929e-16}, + {-1.83697e-16, -1}, + {1, -2.44929e-16}, + {-1.83697e-16, -1}, + {-1, 1.22465e-16}, + {6.12323e-17, 1}}; - using delmem_complex_op = base_device::memory::delete_memory_op, base_device::DEVICE_GPU>; - using resmem_complex_op = base_device::memory::resize_memory_op, base_device::DEVICE_GPU>; - using syncmem_complex_h2d_op = base_device::memory:: - synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_CPU>; - using syncmem_complex_d2h_op = base_device::memory:: - synchronize_memory_op, base_device::DEVICE_CPU, base_device::DEVICE_GPU>; + using delmem_complex_op = base_device::memory::delete_memory_op, base_device::DEVICE_GPU>; + using resmem_complex_op = base_device::memory::resize_memory_op, base_device::DEVICE_GPU>; + using syncmem_complex_h2d_op = base_device::memory:: + synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_CPU>; + using syncmem_complex_d2h_op = base_device::memory:: + synchronize_memory_op, base_device::DEVICE_CPU, base_device::DEVICE_GPU>; - using delmem_var_op = base_device::memory::delete_memory_op; - using resmem_var_op = base_device::memory::resize_memory_op; - using syncmem_var_h2d_op - = base_device::memory::synchronize_memory_op; - using syncmem_var_d2h_op - = base_device::memory::synchronize_memory_op; + using delmem_var_op = base_device::memory::delete_memory_op; + using resmem_var_op = base_device::memory::resize_memory_op; + using syncmem_var_h2d_op + = base_device::memory::synchronize_memory_op; + using syncmem_var_d2h_op + = base_device::memory::synchronize_memory_op; - using delmem_int_op = base_device::memory::delete_memory_op; - using resmem_int_op = base_device::memory::resize_memory_op; - using syncmem_int_h2d_op - = base_device::memory::synchronize_memory_op; + using delmem_int_op = base_device::memory::delete_memory_op; + using resmem_int_op = base_device::memory::resize_memory_op; + using syncmem_int_h2d_op + = base_device::memory::synchronize_memory_op; - void SetUp() override - { - } - void TearDown() override { + void SetUp() override + { + } + void TearDown() override + { } }; @@ -398,19 +399,19 @@ TEST_F(TestSrcPWWfMultiDevice, cal_sk_op_cpu) eigts3.data(), sk.data()); - for (int ii = 0; ii < sk.size(); ii++) { + for (int ii = 0; ii < sk.size(); ii++) + { EXPECT_LT(fabs(sk[ii] - expected_sk[ii]), 6e-5); } } - #if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM TEST_F(TestSrcPWWfMultiDevice, cal_sk_op_gpu) { std::vector> sk(expected_sk.size(), 0); - int * d_atom_na = nullptr, * d_igl2isz = nullptr, * d_is2fftixy = nullptr; - double * d_kvec_c = nullptr, * d_atom_tau = nullptr; - std::complex * d_sk = nullptr, * d_eigts1 = nullptr, * d_eigts2 = nullptr, * d_eigts3 = nullptr; + int *d_atom_na = nullptr, *d_igl2isz = nullptr, *d_is2fftixy = nullptr; + double *d_kvec_c = nullptr, *d_atom_tau = nullptr; + std::complex*d_sk = nullptr, *d_eigts1 = nullptr, *d_eigts2 = nullptr, *d_eigts3 = nullptr; resmem_int_op()(d_atom_na, atom_na.size()); resmem_int_op()(d_igl2isz, igl2isz.size()); @@ -461,7 +462,8 @@ TEST_F(TestSrcPWWfMultiDevice, cal_sk_op_gpu) syncmem_complex_d2h_op()(sk.data(), d_sk, sk.size()); - for (int ii = 0; ii < sk.size(); ii++) { + for (int ii = 0; ii < sk.size(); ii++) + { EXPECT_LT(fabs(sk[ii] - expected_sk[ii]), 6e-5); } diff --git a/source/module_hamilt_pw/hamilt_pwdft/kernels/wf_op.cpp b/source/module_hamilt_pw/hamilt_pwdft/kernels/wf_op.cpp index 1faeff358a..59ce506e3e 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/kernels/wf_op.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/kernels/wf_op.cpp @@ -1,7 +1,9 @@ #include "module_hamilt_pw/hamilt_pwdft/kernels/wf_op.h" -#include "module_base/libm/libm.h" -namespace hamilt{ +#include "source_base/libm/libm.h" + +namespace hamilt +{ template struct cal_sk_op @@ -34,46 +36,50 @@ struct cal_sk_op { #ifdef _OPENMP #pragma omp parallel -{ + { #endif - int iat = 0; - for (int it = 0; it < ntype; it++) { - for (int ia = 0; ia < atom_na[it]; ia++) { - FPTYPE arg = 0.0; - for (int ii = 0; ii < 3; ii++) { - arg += kvec_c[ik * 3 + ii] * atom_tau[iat * 3 + ii]; - } - arg *= TWO_PI; - FPTYPE sinp, cosp; - ModuleBase::libm::sincos(arg, &sinp, &cosp); - const std::complex kphase = std::complex(cosp, -sinp); + int iat = 0; + for (int it = 0; it < ntype; it++) + { + for (int ia = 0; ia < atom_na[it]; ia++) + { + FPTYPE arg = 0.0; + for (int ii = 0; ii < 3; ii++) + { + arg += kvec_c[ik * 3 + ii] * atom_tau[iat * 3 + ii]; + } + arg *= TWO_PI; + FPTYPE sinp, cosp; + ModuleBase::libm::sincos(arg, &sinp, &cosp); + const std::complex kphase = std::complex(cosp, -sinp); #ifdef _OPENMP #pragma omp for #endif - for (int igl = 0; igl < npw; ++igl) { - const int isz = igl2isz[ik * npwx + igl]; - int iz = isz % nz; - const int is = isz / nz; - const int ixy = is2fftixy[is]; - int ix = ixy / fftny; - int iy = ixy % fftny; - if (ix >= int(nx / 2) + 1) - ix -= nx; - if (iy >= int(ny / 2) + 1) - iy -= ny; - if (iz >= int(nz / 2) + 1) - iz -= nz; - ix += rho_nx; - iy += rho_ny; - iz += rho_nz; - sk[iat * npw + igl] = kphase * eigts1[iat * eigts1_nc + ix] * eigts2[iat * eigts2_nc + iy] - * eigts3[iat * eigts3_nc + iz]; + for (int igl = 0; igl < npw; ++igl) + { + const int isz = igl2isz[ik * npwx + igl]; + int iz = isz % nz; + const int is = isz / nz; + const int ixy = is2fftixy[is]; + int ix = ixy / fftny; + int iy = ixy % fftny; + if (ix >= int(nx / 2) + 1) + ix -= nx; + if (iy >= int(ny / 2) + 1) + iy -= ny; + if (iz >= int(nz / 2) + 1) + iz -= nz; + ix += rho_nx; + iy += rho_ny; + iz += rho_nz; + sk[iat * npw + igl] = kphase * eigts1[iat * eigts1_nc + ix] * eigts2[iat * eigts2_nc + iy] + * eigts3[iat * eigts3_nc + iz]; + } + iat++; } - iat++; } - } #ifdef _OPENMP -} + } #endif } }; @@ -81,5 +87,4 @@ struct cal_sk_op template struct cal_sk_op; template struct cal_sk_op; -} // namespace hamilt - +} // namespace hamilt diff --git a/source/module_hamilt_pw/hamilt_pwdft/module_exx_helper/exx_helper.h b/source/module_hamilt_pw/hamilt_pwdft/module_exx_helper/exx_helper.h index 95d5cc2597..42d9e0a66a 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/module_exx_helper/exx_helper.h +++ b/source/module_hamilt_pw/hamilt_pwdft/module_exx_helper/exx_helper.h @@ -1,10 +1,10 @@ // // For EXX in PW. // -#include "module_psi/psi.h" -#include "module_base/matrix.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_hamilt_pw/hamilt_pwdft/operator_pw/op_exx_pw.h" +#include "module_psi/psi.h" +#include "source_base/matrix.h" #ifndef EXX_HELPER_H #define EXX_HELPER_H @@ -16,11 +16,17 @@ struct Exx_Helper public: Exx_Helper() = default; - OperatorEXX *op_exx = nullptr; + OperatorEXX* op_exx = nullptr; - void set_firstiter(bool flag = true) { first_iter = flag; } - void set_wg(const ModuleBase::matrix *wg_) { wg = wg_; } - void set_psi(psi::Psi *psi_); + void set_firstiter(bool flag = true) + { + first_iter = flag; + } + void set_wg(const ModuleBase::matrix* wg_) + { + wg = wg_; + } + void set_psi(psi::Psi* psi_); void set_op() { @@ -29,14 +35,13 @@ struct Exx_Helper op_exx->set_wg(wg); } - bool exx_after_converge(int &iter); + bool exx_after_converge(int& iter); - double cal_exx_energy(psi::Psi *psi_); + double cal_exx_energy(psi::Psi* psi_); private: bool first_iter = false; - psi::Psi *psi = nullptr; - const ModuleBase::matrix *wg = nullptr; - + psi::Psi* psi = nullptr; + const ModuleBase::matrix* wg = nullptr; }; #endif // EXX_HELPER_H diff --git a/source/module_hamilt_pw/hamilt_pwdft/nonlocal_maths.hpp b/source/module_hamilt_pw/hamilt_pwdft/nonlocal_maths.hpp index 292ad80d43..e7ac760511 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/nonlocal_maths.hpp +++ b/source/module_hamilt_pw/hamilt_pwdft/nonlocal_maths.hpp @@ -1,13 +1,13 @@ #ifndef HAMILTPW_NONLOCAL_MATHS_H #define HAMILTPW_NONLOCAL_MATHS_H -#include "module_base/module_device/device.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/klist.h" #include "module_cell/unitcell.h" #include "module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/stress_op.h" -#include "module_base/kernels/math_kernel_op.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/device.h" namespace hamilt { @@ -45,18 +45,18 @@ class Nonlocal_maths /** * @brief this function prepares all the q (G+k) information in one contiguous memory block * including the x, y and z components, its norm and the reciprocal of its norm - * + * * @param ik index of k point * @param pw_basis the plane wave basis * @return std::vector 1d contiguous memory block containing all the q information. The - * first 3*npw are data of x, y and z components, the next 2*npw are data of norm and 1/norm. + * first 3*npw are data of x, y and z components, the next 2*npw are data of norm and 1/norm. * This is beneficial for GPU memory access. */ std::vector cal_gk(int ik, const ModulePW::PW_Basis_K* pw_basis); /** * @brief calculate the real spherical harmonic functions on cpu (and optionally send to gpu, * if gpu is available) - * + * * @param lmax [in] maximum angular momentum to calculate * @param npw [in] number of G+k vectors * @param gk_in [in] the G+k vectors @@ -137,14 +137,15 @@ std::vector Nonlocal_maths::cal_gk(int ik, const ModuleP { // written in memory block from 0 to 3*npw. This is like a matrix with npw rows and 3 columns q = pw_basis->getgpluskcar(ik, ig); - gk[ig * 3] = q.x; + gk[ig * 3] = q.x; gk[ig * 3 + 1] = q.y; gk[ig * 3 + 2] = q.z; // the following written in memory block from 3*npw to 5*npw, the excess 2*npw is for norm and 1/norm // for memory consecutive consideration, there are blocks storing the norm and 1/norm. FPTYPE norm = sqrt(q.norm2()); gk[3 * npw + ig] = norm * this->ucell_->tpiba; // one line with length npw, storing the norm - gk[4 * npw + ig] = norm < 1e-8 ? 0.0 : 1.0 / norm * this->ucell_->tpiba; // one line with length npw, storing 1/norm + gk[4 * npw + ig] + = norm < 1e-8 ? 0.0 : 1.0 / norm * this->ucell_->tpiba; // one line with length npw, storing 1/norm } return gk; } @@ -210,7 +211,7 @@ template std::vector> Nonlocal_maths::cal_pref(int it, const int nh) { // nh is the total number of m-channels of the beta functions - // for example, if angular momentum of beta functions are 0, 0, 1, 1, 1, 1, the nh will be + // for example, if angular momentum of beta functions are 0, 0, 1, 1, 1, 1, the nh will be // 1 + 1 + 3 + 3 + 3 + 3 = 14 std::vector> pref(nh); for (int ih = 0; ih < nh; ih++) @@ -370,9 +371,9 @@ void Nonlocal_maths::cal_dvkb_index(const int nbeta, int l = nhtol[it * nhtol_nc + ih]; for (int m = 0; m < 2 * l + 1; m++) { - //std::cout << "in function cal_dvkb_index, nhtol(" << it << ", " << ih << ") = " << l << std::endl; + // std::cout << "in function cal_dvkb_index, nhtol(" << it << ", " << ih << ") = " << l << std::endl; int lm = l * l + m; - indexes[ih * 4] = lm; // the index of ylm matrix, for given l and m, together with ig to get value + indexes[ih * 4] = lm; // the index of ylm matrix, for given l and m, together with ig to get value indexes[ih * 4 + 1] = nb; // the iproj of present atom type indexes[ih * 4 + 2] = (ipol * x1 + lm); indexes[ih * 4 + 3] = (jpol * x1 + lm); diff --git a/source/module_hamilt_pw/hamilt_pwdft/onsite_proj_tools.cpp b/source/module_hamilt_pw/hamilt_pwdft/onsite_proj_tools.cpp index 7b88204eca..648f9ef0e2 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/onsite_proj_tools.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/onsite_proj_tools.cpp @@ -1,12 +1,12 @@ #include "onsite_proj_tools.h" -#include "module_base/math_polyint.h" -#include "module_base/math_ylmreal.h" -#include "module_base/memory.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/force_op.h" #include "nonlocal_maths.hpp" +#include "source_base/math_polyint.h" +#include "source_base/math_ylmreal.h" +#include "source_base/memory.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" #include @@ -820,7 +820,7 @@ void Onsite_Proj_tools::cal_force_dftu(int ik, syncmem_int_h2d_op()(orbital_corr_tmp, orbital_corr, this->ucell_->ntype); resmem_complex_op()(vu_tmp, size_vu); syncmem_complex_h2d_op()(vu_tmp, vu, size_vu); - syncmem_var_h2d_op()(d_wg, h_wg, this->nbands * (ik+1)); + syncmem_var_h2d_op()(d_wg, h_wg, this->nbands * (ik + 1)); } else #endif @@ -876,7 +876,7 @@ void Onsite_Proj_tools::cal_force_dspin(int ik, { resmem_var_op()(lambda_tmp, this->ucell_->nat * 3); syncmem_var_h2d_op()(lambda_tmp, lambda_array.data(), this->ucell_->nat * 3); - syncmem_var_h2d_op()(d_wg, h_wg, this->nbands * (ik+1)); + syncmem_var_h2d_op()(d_wg, h_wg, this->nbands * (ik + 1)); } else #endif @@ -928,7 +928,7 @@ void Onsite_Proj_tools::cal_stress_dftu(int ik, syncmem_int_h2d_op()(orbital_corr_tmp, orbital_corr, this->ucell_->ntype); resmem_complex_op()(vu_tmp, size_vu); syncmem_complex_h2d_op()(vu_tmp, vu, size_vu); - syncmem_var_h2d_op()(d_wg, h_wg, this->nbands * (ik+1)); + syncmem_var_h2d_op()(d_wg, h_wg, this->nbands * (ik + 1)); } else #endif @@ -980,7 +980,7 @@ void Onsite_Proj_tools::cal_stress_dspin(int ik, { resmem_var_op()(lambda_tmp, this->ucell_->nat * 3); syncmem_var_h2d_op()(lambda_tmp, lambda_array.data(), this->ucell_->nat * 3); - syncmem_var_h2d_op()(d_wg, h_wg, this->nbands * (ik+1)); + syncmem_var_h2d_op()(d_wg, h_wg, this->nbands * (ik + 1)); } else #endif diff --git a/source/module_hamilt_pw/hamilt_pwdft/onsite_proj_tools.h b/source/module_hamilt_pw/hamilt_pwdft/onsite_proj_tools.h index 0376a9709f..19100bda3f 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/onsite_proj_tools.h +++ b/source/module_hamilt_pw/hamilt_pwdft/onsite_proj_tools.h @@ -1,14 +1,14 @@ #ifndef MODULEHAMILTPW_ONSITEPROJTOOLS_H #define MODULEHAMILTPW_ONSITEPROJTOOLS_H -#include "module_base/module_device/device.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/klist.h" #include "module_cell/unitcell.h" #include "module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/stress_op.h" -#include "module_base/kernels/math_kernel_op.h" #include "module_psi/psi.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/device.h" #include @@ -40,9 +40,9 @@ class Onsite_Proj_tools const ModuleBase::matrix& ekb); // a more general constructor is in the following - Onsite_Proj_tools(const std::vector& nproj, // number of projectors for each atom type + Onsite_Proj_tools(const std::vector& nproj, // number of projectors for each atom type const std::vector& lproj, - const ModuleBase::realArray& tab, // radials' spherical bessel transform + const ModuleBase::realArray& tab, // radials' spherical bessel transform const ModuleBase::matrix& nhtol, std::complex* vkb_buf, const UnitCell* ucell_in, @@ -58,7 +58,10 @@ class Onsite_Proj_tools /** * @brief calculate the becp = for all beta functions */ - void cal_becp(int ik, int npm, std::complex* becp_in = nullptr, const std::complex* ppsi_in = nullptr); + void cal_becp(int ik, + int npm, + std::complex* becp_in = nullptr, + const std::complex* ppsi_in = nullptr); /** * @brief calculate the dbecp_{ij} = for all beta functions * stress_{ij} = -1/omega \sum_{n,k}f_{nk} \sum_I \sum_{lm,l'm'}D_{l,l'}^{I} becp * dbecp_{ij} also calculated @@ -69,20 +72,41 @@ class Onsite_Proj_tools */ void cal_dbecp_f(int ik, int npm, int ipol); - void cal_force_dftu(int ik, int npm, FPTYPE* force, const int* orbital_corr, const std::complex* vu, const int size_vu, const FPTYPE* h_wg); + void cal_force_dftu(int ik, + int npm, + FPTYPE* force, + const int* orbital_corr, + const std::complex* vu, + const int size_vu, + const FPTYPE* h_wg); void cal_force_dspin(int ik, int npm, FPTYPE* force, const ModuleBase::Vector3* lambda, const FPTYPE* h_wg); - void cal_stress_dftu(int ik, int npm, FPTYPE* stress, const int* orbital_corr, const std::complex* vu, const int size_vu, const FPTYPE* h_wg); - void cal_stress_dspin(int ik, int npm, FPTYPE* stress, const ModuleBase::Vector3* lambda, const FPTYPE* h_wg); - - - std::complex* get_becp() { return becp; } - std::complex* get_dbecp() { return dbecp; } + void cal_stress_dftu(int ik, + int npm, + FPTYPE* stress, + const int* orbital_corr, + const std::complex* vu, + const int size_vu, + const FPTYPE* h_wg); + void cal_stress_dspin(int ik, + int npm, + FPTYPE* stress, + const ModuleBase::Vector3* lambda, + const FPTYPE* h_wg); + + std::complex* get_becp() + { + return becp; + } + std::complex* get_dbecp() + { + return dbecp; + } private: /** * @brief allocate the memory for the variables */ - void allocate_memory(const ModuleBase::matrix& wg, + void allocate_memory(const ModuleBase::matrix& wg, const ModuleBase::matrix& ekb, const std::vector& nproj, const std::vector& nch); @@ -106,7 +130,7 @@ class Onsite_Proj_tools base_device::AbacusDevice_t device = {}; int nkb; int nbands; - int deeq_dims[4] = {0, 0, 0, 0}; // deeq can be something other than that in pseudopotentials + int deeq_dims[4] = {0, 0, 0, 0}; // deeq can be something other than that in pseudopotentials int deeq_nc_dims[4] = {0, 0, 0, 0}; int current_ik = -1; diff --git a/source/module_hamilt_pw/hamilt_pwdft/onsite_projector.cpp b/source/module_hamilt_pw/hamilt_pwdft/onsite_projector.cpp index 893268ae6d..930984b34c 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/onsite_projector.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/onsite_projector.cpp @@ -1,66 +1,67 @@ +#include "module_hamilt_pw/hamilt_pwdft/onsite_projector.h" + +#include "source_base/blas_connector.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/projgen.h" + +#include #include -#include #include -#include #include +#include #include -#include "module_hamilt_pw/hamilt_pwdft/onsite_projector.h" - -#include "module_base/projgen.h" -#include "module_base/blas_connector.h" -#include "module_base/kernels/math_kernel_op.h" #ifdef __MPI -#include "module_base/parallel_reduce.h" -#include "module_base/parallel_common.h" +#include "source_base/parallel_common.h" +#include "source_base/parallel_reduce.h" #endif #include "module_parameter/parameter.h" -#include "module_base/timer.h" -#include "module_base/formatter.h" +#include "source_base/formatter.h" +#include "source_base/timer.h" /** * =============================================================================================== - * + * * README - * + * * =============================================================================================== - * + * * This is a code demo for illustrating how to use unified radial projection in implementation of * Operators involving local radial projectors on PW-expanded wavefunctions. - * + * * Example usage: * ```c++ * // select the range of atoms that impose the operator in std::vector> it2ia like * // it2ia[it] = {ia1, ia2, ...} for each type - * // if all atoms in present kind is "selected", just set it2ia[it].resize(na) and call + * // if all atoms in present kind is "selected", just set it2ia[it].resize(na) and call * // std::iota(it2ia[it].begin(), it2ia[it].end(), 0) - * + * * std::vector> it2ia; // as if we have given its value... - * + * * // you should have the `orbital_dir` as the directory containing the orbital files, then those * // will be read by a static function `AtomicRadials::read_abacus_orb` to get the radial orbitals - * + * * // call `init_proj` to initialize the radial projector, this function only needs to be called * // once during the runtime. - * // its input... + * // its input... * // the `nproj`, is for specifying number of projectors of each atom type, can be zero, * // but cannot be the value larger than the number of zeta functions for the given angular momentum. * // the `lproj` is the angular momentum of the projectors, and `iproj` is the index of zeta function * // that each projector generated from. * // the `lproj` along with `iproj` can enable radial projectors in any number developer wants. - * + * * // the `onsite_r` is the onsite-radius for all valid projectors, it is used to generate the new * // radial function that more localized than the original one, which is expected to have enhanced * // projection efficiency. - * + * * std::vector rgrid; * std::vector> projs; * std::vector> it2iproj; * init_proj(orbital_dir, ucell, nproj, lproj, iproj, onsite_r, rgrid, projs, it2iproj); - * + * * // then call the function `cal_becp` to calculate the becp. HOWEVER, there are quantities that * // can be calculated in advance and reused in the following calculations. Please see the function * // implementation, especially the comments about CACHE 0, CACHE 1, CACHE 2..., etc. - * + * * // the input param of `cal_becp`... * // the `it2ia` has been explained above * // the `it2iproj` is the output of function `init_proj`, so you do not need to worry about it @@ -77,7 +78,7 @@ * // the `psi` is the wavefunction * // the `becp` is the output of the function, it is the becp * cal_becp(it2ia, it2iproj, rgrid, projs, lproj, nq, dq, ik, pw_basis, omega, tpiba, sf, psi, becp); - * + * * // About parallelization, presently, the function `AtomicRadials::read_abacus_orb` is actually parallelized * // by MPI, so after the reading of orbital, actually all processors have the same data. Therefore it is not * // needed to call functions like `Parallel_Reduce` or `Parallel_Bcast` to synchronize the data. @@ -85,29 +86,30 @@ * // be needed if the memory is not enough. */ -template +template projectors::OnsiteProjector* projectors::OnsiteProjector::get_instance() { static projectors::OnsiteProjector instance; return &instance; } -template -void projectors::OnsiteProjector::init(const std::string& orbital_dir, - const UnitCell* ucell_in, - const psi::Psi, Device>& psi, - const K_Vectors& kv, - const ModulePW::PW_Basis_K& pw_basis, // level1: the plane wave basis, need ik - Structure_Factor& sf, // level2: the structure factor calculator - const double onsite_radius, - const int nq, - const double dq, - const ModuleBase::matrix& wg, - const ModuleBase::matrix& ekb) +template +void projectors::OnsiteProjector::init( + const std::string& orbital_dir, + const UnitCell* ucell_in, + const psi::Psi, Device>& psi, + const K_Vectors& kv, + const ModulePW::PW_Basis_K& pw_basis, // level1: the plane wave basis, need ik + Structure_Factor& sf, // level2: the structure factor calculator + const double onsite_radius, + const int nq, + const double dq, + const ModuleBase::matrix& wg, + const ModuleBase::matrix& ekb) { this->device = base_device::get_device_type(this->ctx); - if(!this->initialed) + if (!this->initialed) { this->ucell = ucell_in; this->ntype = ucell_in->ntype; @@ -118,7 +120,7 @@ void projectors::OnsiteProjector::init(const std::string& orbital_dir std::vector orb_files(ntype); std::vector nproj(ntype); int sum_nproj = 0; - for(int it=0;itorbital_fn[it]; nproj[it] = ucell->atoms[it].nwl; @@ -126,9 +128,9 @@ void projectors::OnsiteProjector::init(const std::string& orbital_dir } this->lproj.resize(sum_nproj); int index = 0; - for(int it=0;itlproj[index++] = il; } @@ -139,35 +141,30 @@ void projectors::OnsiteProjector::init(const std::string& orbital_dir this->it2ia.resize(this->ntype); this->iat_nh.resize(this->ucell->nat); int iat = 0; - for(int it = 0; it < it2ia.size(); it++) + for (int it = 0; it < it2ia.size(); it++) { it2ia[it].resize(this->ucell->atoms[it].na); std::iota(it2ia[it].begin(), it2ia[it].end(), 0); - for(int ia = 0; ia < it2ia[it].size(); ia++) + for (int ia = 0; ia < it2ia[it].size(); ia++) { iat_nh[iat++] = nproj[it] * nproj[it]; } } - this->init_proj(PARAM.inp.orbital_dir, - orb_files, - nproj, - lproj, - iproj, - onsite_r); + this->init_proj(PARAM.inp.orbital_dir, orb_files, nproj, lproj, iproj, onsite_r); ModuleBase::timer::tick("OnsiteProj", "cubspl_tabulate"); // STAGE 0 - making the interpolation table - // CACHE 0 - if cache the irow2it, irow2iproj, irow2m, itiaiprojm2irow, can be reused for + // CACHE 0 - if cache the irow2it, irow2iproj, irow2m, itiaiprojm2irow, can be reused for // SCF, RELAX and CELL-RELAX calculation // [in] rgrid, projs, lproj, it2ia, it2iproj, nq, dq RadialProjection::RadialProjector::_build_backward_map(it2iproj, lproj, irow2it_, irow2iproj_, irow2m_); RadialProjection::RadialProjector::_build_forward_map(it2ia, it2iproj, lproj, itiaiprojm2irow_); - //rp_._build_sbt_tab(rgrid, projs, lproj, nq, dq); + // rp_._build_sbt_tab(rgrid, projs, lproj, nq, dq); rp_._build_sbt_tab(nproj, rgrid, projs, lproj, nq, dq, ucell_in->omega, psi.get_npol(), tab, nhtol); - // For being compatible with present cal_force and cal_stress framework + // For being compatible with present cal_force and cal_stress framework // uncomment the following code block if you want to use the Onsite_Proj_tools - if(this->tab_atomic_ == nullptr) + if (this->tab_atomic_ == nullptr) { this->tot_nproj = itiaiprojm2irow_.size(); this->npwx_ = this->pw_basis_->npwk_max; @@ -176,37 +173,46 @@ void projectors::OnsiteProjector::init(const std::string& orbital_dir } delete this->fs_tools; // it is okay to delete nullptr - this->fs_tools = new hamilt::Onsite_Proj_tools( - nproj, lproj, tab, nhtol, this->tab_atomic_, ucell_in, &psi, &kv, &pw_basis, &sf, wg, ekb); - + this->fs_tools = new hamilt::Onsite_Proj_tools(nproj, + lproj, + tab, + nhtol, + this->tab_atomic_, + ucell_in, + &psi, + &kv, + &pw_basis, + &sf, + wg, + ekb); + ModuleBase::timer::tick("OnsiteProj", "cubspl_tabulate"); this->initialed = true; } } -template +template projectors::OnsiteProjector::~OnsiteProjector() { - //delete[] becp; + // delete[] becp; delete fs_tools; delmem_complex_op()(this->tab_atomic_); - if(this->device == base_device::GpuDevice) + if (this->device == base_device::GpuDevice) { delmem_complex_h_op()(this->h_becp); } delmem_complex_op()(this->becp); - } - -template -void projectors::OnsiteProjector::init_proj(const std::string& orbital_dir, - const std::vector& orb_files, - const std::vector& nproj, // for each type, the number of projectors - const std::vector& lproj, // angular momentum of projectors within the type (l of zeta function) - const std::vector& iproj, // index of projectors within the type (izeta) - const std::vector& onsite_r) +template +void projectors::OnsiteProjector::init_proj( + const std::string& orbital_dir, + const std::vector& orb_files, + const std::vector& nproj, // for each type, the number of projectors + const std::vector& lproj, // angular momentum of projectors within the type (l of zeta function) + const std::vector& iproj, // index of projectors within the type (izeta) + const std::vector& onsite_r) { // extract the information from ucell const int ntype = nproj.size(); @@ -223,11 +229,11 @@ void projectors::OnsiteProjector::init_proj(const std::string& orbita int idx = 0; int nr = -1; double dr = -1.0; - for(int it = 0; it < ntype; ++it) + for (int it = 0; it < ntype; ++it) { const int nproj_it = nproj[it]; this->it2iproj[it].resize(nproj_it); - if(nproj_it == 0) + if (nproj_it == 0) { std::cout << "BECP_PW >> No projectors defined for type " << it << std::endl; continue; @@ -237,7 +243,7 @@ void projectors::OnsiteProjector::init_proj(const std::string& orbita double ecut = -1.0; int nr_ = -1; double dr_ = -1.0; - std::vector nzeta; // number of radials for each l + std::vector nzeta; // number of radials for each l std::vector> radials; // radials arranged in serial this->read_abacus_orb(ifs, elem, ecut, nr_, dr_, nzeta, radials); #ifdef __DEBUG @@ -246,10 +252,10 @@ void projectors::OnsiteProjector::init_proj(const std::string& orbita assert(nr_ != -1); assert(dr_ != -1.0); #endif - nr = std::max(nr, nr_); // the maximal nr + nr = std::max(nr, nr_); // the maximal nr assert(dr == -1.0 || dr == dr_); // the dr should be the same for all types dr = (dr == -1.0) ? dr_ : dr; - for(int ip = 0; ip < nproj_it; ++ip) + for (int ip = 0; ip < nproj_it; ++ip) { int l = lproj[idx]; int izeta = iproj[idx]; @@ -266,7 +272,7 @@ void projectors::OnsiteProjector::init_proj(const std::string& orbita } } // do zero padding - if(nr != -1) + if (nr != -1) { std::for_each(projs.begin(), projs.end(), [nr](std::vector& proj) { proj.resize(nr, 0.0); }); } @@ -276,7 +282,7 @@ void projectors::OnsiteProjector::init_proj(const std::string& orbita std::for_each(rgrid.begin(), rgrid.end(), [dr](double& r_i) { r_i *= dr; }); } -template +template void projectors::OnsiteProjector::tabulate_atomic(const int ik, const char grad) { ModuleBase::timer::tick("OnsiteProj", "tabulate_atomic"); @@ -320,10 +326,11 @@ void projectors::OnsiteProjector::tabulate_atomic(const int ik, const // const int irow_out = itiaiprojm2irow_.at(std::make_tuple(it, ia, iproj, m)); // for(int ig = 0; ig < this->npw_; ++ig) // { - // std::complex deriv = (grad == 'n')? 1.0: ModuleBase::NEG_IMAG_UNIT; // because sk is exp(-iqtau) - // deriv = (grad == 'n')? 1.0: (grad == 'x')? deriv * q[ig].x: (grad == 'y')? deriv * q[ig].y: deriv * q[ig].z; + // std::complex deriv = (grad == 'n')? 1.0: ModuleBase::NEG_IMAG_UNIT; // because sk is + // exp(-iqtau) deriv = (grad == 'n')? 1.0: (grad == 'x')? deriv * q[ig].x: (grad == 'y')? deriv * + // q[ig].y: deriv * q[ig].z; // // there must be something twisted in ABACUS - // // because the tab_ is , but the sk is exp(-iqtau). How can it get the + // // because the tab_ is , but the sk is exp(-iqtau). How can it get the // // correct result? // this->tab_atomic_[irow_out*this->npw_ + ig] = sk[ig] * tab_[irow*this->npw_ + ig] * deriv; // } @@ -337,46 +344,44 @@ void projectors::OnsiteProjector::tabulate_atomic(const int ik, const ModuleBase::timer::tick("OnsiteProj", "tabulate_atomic"); } -template -void projectors::OnsiteProjector::overlap_proj_psi( - const int npm, - const std::complex* ppsi) +template +void projectors::OnsiteProjector::overlap_proj_psi(const int npm, const std::complex* ppsi) { ModuleBase::timer::tick("OnsiteProj", "overlap"); // STAGE 3 - cal_becp // CACHE 3 - it is no use to cache becp, it will change in each SCF iteration // [in] psi, tab_atomic_, npw, becp, ik -// const char transa = 'C'; -// const char transb = 'N'; -// const int ldb = this->npwx_; -// const int ldc = this->tot_nproj; -// const std::complex alpha = 1.0; -// const std::complex beta = 0.0; -// if(this->becp == nullptr || this->size_becp < npm*ldc) -// { -// delete[] this->becp; -// this->becp = new std::complex[npm*ldc]; -// this->size_becp = npm*ldc; -// } -// setmem_complex_op()(ctx, this->becp, 0.0, this->size_becp); -// gemm_op()( -// this->ctx, -// transa, // const char transa -// transb, // const char transb -// ldc, // const int m -// npm, // const int n -// this->npw_, // const int k -// &alpha, // const std::complex alpha -// this->tab_atomic_, // const std::complex* a -// this->npw_, // const int lda -// ppsi, // const std::complex* b -// ldb, // const int ldb -// &beta, // const std::complex beta -// becp, // std::complex* c -// ldc); // const int ldc -// #ifdef __MPI -// Parallel_Reduce::reduce_pool(becp, size_becp); -// #endif + // const char transa = 'C'; + // const char transb = 'N'; + // const int ldb = this->npwx_; + // const int ldc = this->tot_nproj; + // const std::complex alpha = 1.0; + // const std::complex beta = 0.0; + // if(this->becp == nullptr || this->size_becp < npm*ldc) + // { + // delete[] this->becp; + // this->becp = new std::complex[npm*ldc]; + // this->size_becp = npm*ldc; + // } + // setmem_complex_op()(ctx, this->becp, 0.0, this->size_becp); + // gemm_op()( + // this->ctx, + // transa, // const char transa + // transb, // const char transb + // ldc, // const int m + // npm, // const int n + // this->npw_, // const int k + // &alpha, // const std::complex alpha + // this->tab_atomic_, // const std::complex* a + // this->npw_, // const int lda + // ppsi, // const std::complex* b + // ldb, // const int ldb + // &beta, // const std::complex beta + // becp, // std::complex* c + // ldc); // const int ldc + // #ifdef __MPI + // Parallel_Reduce::reduce_pool(becp, size_becp); + // #endif // notes on refactor for DCU calculation // the npm here is nbands(occ) * npol, for calling cal_becp, the npol should be divided. @@ -385,11 +390,11 @@ void projectors::OnsiteProjector::overlap_proj_psi( // std::cout << "at " << __FILE__ << ": " << __LINE__ << " output npm: " << npm << std::endl; // std::cout << "at " << __FILE__ << ": " << __LINE__ << " ik_: " << ik_ << std::endl; int npol = this->ucell->get_npol(); - if(this->becp == nullptr || this->size_becp < npm*this->tot_nproj) + if (this->becp == nullptr || this->size_becp < npm * this->tot_nproj) { - this->size_becp = npm*this->tot_nproj; + this->size_becp = npm * this->tot_nproj; resmem_complex_op()(this->becp, this->size_becp); - if(this->device == base_device::GpuDevice ) + if (this->device == base_device::GpuDevice) { resmem_complex_h_op()(this->h_becp, this->size_becp); } @@ -398,27 +403,30 @@ void projectors::OnsiteProjector::overlap_proj_psi( this->h_becp = this->becp; } } - this->fs_tools->cal_becp(ik_, npm/npol, this->becp, ppsi); // in cal_becp, npm should be the one not multiplied by npol - if(this->device == base_device::GpuDevice) + this->fs_tools->cal_becp(ik_, + npm / npol, + this->becp, + ppsi); // in cal_becp, npm should be the one not multiplied by npol + if (this->device == base_device::GpuDevice) { syncmem_complex_d2h_op()(h_becp, this->becp, this->size_becp); } ModuleBase::timer::tick("OnsiteProj", "overlap"); } -template +template void projectors::OnsiteProjector::read_abacus_orb(std::ifstream& ifs, - std::string& elem, - double& ecut, - int& nr, - double& dr, - std::vector& nzeta, - std::vector>& radials, - const int rank) + std::string& elem, + double& ecut, + int& nr, + double& dr, + std::vector& nzeta, + std::vector>& radials, + const int rank) { - nr = 0; // number of grid points - dr = 0; // grid spacing - int lmax = 0, nchi = 0; // number of radial functions + nr = 0; // number of grid points + dr = 0; // grid spacing + int lmax = 0, nchi = 0; // number of radial functions std::vector> radial_map_; // build a map from [l][izeta] to 1-d array index std::string tmp; // first read the header @@ -513,7 +521,7 @@ void projectors::OnsiteProjector::read_abacus_orb(std::ifstream& ifs, ifs >> radials[ichi][ir]; } } - // broadcast the radial functions + // broadcast the radial functions #ifdef __MPI Parallel_Common::bcast_int(ichi); // let other ranks know where to store the radial function Parallel_Common::bcast_double(radials[ichi].data(), nr); @@ -521,10 +529,9 @@ void projectors::OnsiteProjector::read_abacus_orb(std::ifstream& ifs, } } // end of read_abacus_orb -template -void projectors::OnsiteProjector::cal_occupations( - const psi::Psi, Device>* psi_in, - const ModuleBase::matrix& wg_in) +template +void projectors::OnsiteProjector::cal_occupations(const psi::Psi, Device>* psi_in, + const ModuleBase::matrix& wg_in) { ModuleBase::timer::tick("OnsiteProj", "cal_occupation"); this->tabulate_atomic(0); @@ -532,35 +539,33 @@ void projectors::OnsiteProjector::cal_occupations( // loop over k-points to calculate Mi of \sum_{k,i,l,m} const int nbands = psi_in->get_nbands(); - for(int ik = 0; ik < psi_in->get_nk(); ik++) + for (int ik = 0; ik < psi_in->get_nk(); ik++) { psi_in->fix_k(ik); - if(ik != 0) + if (ik != 0) { this->tabulate_atomic(ik); } // std::cout << __FILE__ << ":" << __LINE__ << " nbands = " << nbands << std::endl; - this->overlap_proj_psi( - nbands * psi_in->get_npol(), - psi_in->get_pointer()); + this->overlap_proj_psi(nbands * psi_in->get_npol(), psi_in->get_pointer()); const std::complex* becp_p = this->get_h_becp(); // becp(nbands*npol , nkb) // mag = wg * \sum_{nh}becp * becp int nkb = this->tot_nproj; - //nkb = 18; - //std::cout << "at " << __FILE__ << ": " << __LINE__ << " output nbands: " << nbands << std::endl; - //std::cout << "at " << __FILE__ << ": " << __LINE__ << " output nkb: " << nkb << std::endl; - for(int ib = 0;ibiat_nh.size(); iat++) + for (int iat = 0; iat < this->iat_nh.size(); iat++) { const int nh = this->get_nh(iat); - for(int ih = 0; ih < nh; ih++) + for (int ih = 0; ih < nh; ih++) { const int occ_index = (begin_ih + ih) * 4; - const int index = ib*2*nkb + begin_ih + ih; + const int index = ib * 2 * nkb + begin_ih + ih; occs[occ_index] += weight * conj(becp_p[index]) * becp_p[index]; occs[occ_index + 1] += weight * conj(becp_p[index]) * becp_p[index + nkb]; occs[occ_index + 2] += weight * conj(becp_p[index + nkb]) * becp_p[index]; @@ -572,56 +577,60 @@ void projectors::OnsiteProjector::cal_occupations( } // reduce mag from all k-pools const int npool = GlobalV::KPAR * PARAM.inp.bndpar; - Parallel_Reduce::reduce_double_allpool(npool, GlobalV::NPROC_IN_POOL, (double*)(&(occs[0])), occs.size()*2); + Parallel_Reduce::reduce_double_allpool(npool, GlobalV::NPROC_IN_POOL, (double*)(&(occs[0])), occs.size() * 2); // occ has been reduced and calculate mag // parameters for orbital charge output FmtCore fmt_of_chg("%15.4f"); FmtCore fmt_of_label("%-15s"); GlobalV::ofs_running << std::endl; - GlobalV::ofs_running << "-------------------------------------------------------------------------------------------" << std::endl; - GlobalV::ofs_running << "Orbital Charge Analysis Charge Mag(x) Mag(y) Mag(z)" << std::endl; - GlobalV::ofs_running << "-------------------------------------------------------------------------------------------" << std::endl; + GlobalV::ofs_running + << "-------------------------------------------------------------------------------------------" << std::endl; + GlobalV::ofs_running << "Orbital Charge Analysis Charge Mag(x) Mag(y) Mag(z)" + << std::endl; + GlobalV::ofs_running + << "-------------------------------------------------------------------------------------------" << std::endl; // parameters for orbital charge output // parameters for mag output std::vector mag_x(this->ucell->nat, 0.0); std::vector mag_y(this->ucell->nat, 0.0); - std::vector mag_z(this->ucell->nat,0.0); + std::vector mag_z(this->ucell->nat, 0.0); auto atomLabels = this->ucell->get_atomLabels(); const std::vector title = {"Total Magnetism (uB)", "", "", ""}; const std::vector fmts = {"%-26s", "%20.10f", "%20.10f", "%20.10f"}; const std::vector orb_names = {"s", "p", "d", "f", "g"}; - FmtTable table(/*titles=*/title, - /*nrows=*/this->ucell->nat, - /*formats=*/fmts, - /*indent=*/0, - /*align=*/{/*value*/FmtTable::Align::RIGHT, /*title*/FmtTable::Align::LEFT}); + FmtTable table(/*titles=*/title, + /*nrows=*/this->ucell->nat, + /*formats=*/fmts, + /*indent=*/0, + /*align=*/{/*value*/ FmtTable::Align::RIGHT, /*title*/ FmtTable::Align::LEFT}); // parameters for mag output int occ_index = 0; - for(int iat=0;iatucell->nat;iat++) + for (int iat = 0; iat < this->ucell->nat; iat++) { const int it = this->ucell->iat2it[iat]; std::string atom_label = atomLabels[it]; int ia = this->ucell->iat2ia[iat]; - GlobalV::ofs_running << FmtCore::format("%-20s", atom_label+std::to_string(ia+1)) << std::endl; + GlobalV::ofs_running << FmtCore::format("%-20s", atom_label + std::to_string(ia + 1)) << std::endl; std::vector sum(4, 0.0); int current_l = 1; std::vector charge_mag(4, 0.0); - for(int ih=0;ihiat_nh[iat];ih++) + for (int ih = 0; ih < this->iat_nh[iat]; ih++) { charge_mag[3] += (occs[occ_index] - occs[occ_index + 3]).real(); charge_mag[1] += (occs[occ_index + 1] + occs[occ_index + 2]).real(); charge_mag[2] += (occs[occ_index + 1] - occs[occ_index + 2]).imag(); charge_mag[0] += (occs[occ_index] + occs[occ_index + 3]).real(); - if(ih == current_l * current_l - 1) + if (ih == current_l * current_l - 1) { sum[0] += charge_mag[0]; sum[1] += charge_mag[1]; sum[2] += charge_mag[2]; sum[3] += charge_mag[3]; - GlobalV::ofs_running << FmtCore::format("%20s", orb_names[current_l-1]) - << fmt_of_chg.format(charge_mag[0]) << fmt_of_chg.format(charge_mag[1]) - << fmt_of_chg.format(charge_mag[2]) << fmt_of_chg.format(charge_mag[3]) << std::endl; + GlobalV::ofs_running << FmtCore::format("%20s", orb_names[current_l - 1]) + << fmt_of_chg.format(charge_mag[0]) << fmt_of_chg.format(charge_mag[1]) + << fmt_of_chg.format(charge_mag[2]) << fmt_of_chg.format(charge_mag[3]) + << std::endl; current_l++; charge_mag.assign(4, 0.0); } @@ -630,15 +639,16 @@ void projectors::OnsiteProjector::cal_occupations( mag_x[iat] = sum[1]; mag_y[iat] = sum[2]; mag_z[iat] = sum[3]; - GlobalV::ofs_running << FmtCore::format("%20s", std::string("Sum")) << "" - << fmt_of_chg.format(sum[0]) << fmt_of_chg.format(sum[1]) - << fmt_of_chg.format(sum[2]) << fmt_of_chg.format(sum[3]) << std::endl; + GlobalV::ofs_running << FmtCore::format("%20s", std::string("Sum")) << "" << fmt_of_chg.format(sum[0]) + << fmt_of_chg.format(sum[1]) << fmt_of_chg.format(sum[2]) << fmt_of_chg.format(sum[3]) + << std::endl; } - GlobalV::ofs_running << "-------------------------------------------------------------------------------------------" << std::endl; + GlobalV::ofs_running + << "-------------------------------------------------------------------------------------------" << std::endl; GlobalV::ofs_running << std::endl; table << atomLabels << mag_x << mag_y << mag_z; GlobalV::ofs_running << table.str() << std::endl; - + // print charge ModuleBase::timer::tick("OnsiteProj", "cal_occupation"); } diff --git a/source/module_hamilt_pw/hamilt_pwdft/onsite_projector.h b/source/module_hamilt_pw/hamilt_pwdft/onsite_projector.h index b34d8291de..86b59c280b 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/onsite_projector.h +++ b/source/module_hamilt_pw/hamilt_pwdft/onsite_projector.h @@ -1,159 +1,182 @@ #ifndef MODULEHAMILTPW_ONSITEPROJECTOR_H #define MODULEHAMILTPW_ONSITEPROJECTOR_H -#include "module_base/module_device/device.h" -#include "module_base/kernels/math_kernel_op.h" -#include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" #include "module_basis/module_pw/pw_basis_k.h" +#include "module_hamilt_pw/hamilt_pwdft/onsite_proj_tools.h" #include "module_hamilt_pw/hamilt_pwdft/radial_proj.h" +#include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" #include "module_psi/psi.h" -#include "module_hamilt_pw/hamilt_pwdft/onsite_proj_tools.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/device.h" +#include #include #include -#include namespace projectors { - template - class OnsiteProjector +template +class OnsiteProjector +{ + public: + /** + * @brief initialize the radial projector for real-space projection involving operators + * + * @param orbital_dir You know what it is + * @param orb_files You know what it is + * @param nproj # of projectors for each type defined in UnitCell, can be zero + * @param lproj angular momentum for each projector + * @param iproj index of zeta function that each projector generated from + * @param onsite_r onsite-radius for all valid projectors + * @param rgrid [out] the radial grid shared by all projectors + * @param projs [out] projectors indexed by `iproj` + * @param it2iproj [out] for each type, the projector index (across all types) + */ + void init_proj(const std::string& orbital_dir, + const std::vector& orb_files, + const std::vector& nproj, // for each type, the number of projectors + const std::vector& lproj, // angular momentum of projectors within the type (l of zeta function) + const std::vector& iproj, // index of projectors within the type (izeta) + const std::vector& onsite_r); // for each type, the projector index (across all types) + + /** + * @brief calculate the onsite projectors in reciprocal space(|G+K>) for all atoms + */ + void tabulate_atomic(const int ik, const char grad = 'n'); + + void overlap_proj_psi(const int npm, const std::complex* ppsi); + void read_abacus_orb(std::ifstream& ifs, + std::string& elem, + double& ecut, + int& nr, + double& dr, + std::vector& nzeta, + std::vector>& radials, + const int rank = 0); + /// @brief static access to this class instance + static OnsiteProjector* get_instance(); + void init(const std::string& orbital_dir, + const UnitCell* ucell_in, + const psi::Psi, Device>& psi, + const K_Vectors& kv, + const ModulePW::PW_Basis_K& pw_basis, // level1: the plane wave basis, need ik + Structure_Factor& sf, // level2: the structure factor calculator + const double onsite_radius, + const int nq, + const double dq, + const ModuleBase::matrix& wg, + const ModuleBase::matrix& ekb); + + /// @brief calculate and print the occupations of all lm orbitals + void cal_occupations(const psi::Psi, Device>* psi, const ModuleBase::matrix& wg_in); + + int get_size_becp() const + { + return size_becp; + } + std::complex* get_becp() const + { + return becp; + } + std::complex* get_h_becp() const + { + return h_becp; + } + std::complex* get_tab_atomic() const + { + return tab_atomic_; + } + int get_tot_nproj() const + { + return tot_nproj; + } + int get_npw() const + { + return npw_; + } + int get_npwx() const + { + return npwx_; + } + const int& get_nh(int iat) const + { + return iat_nh[iat]; + } + + hamilt::Onsite_Proj_tools* get_fs_tools() const { - public: - - /** - * @brief initialize the radial projector for real-space projection involving operators - * - * @param orbital_dir You know what it is - * @param orb_files You know what it is - * @param nproj # of projectors for each type defined in UnitCell, can be zero - * @param lproj angular momentum for each projector - * @param iproj index of zeta function that each projector generated from - * @param onsite_r onsite-radius for all valid projectors - * @param rgrid [out] the radial grid shared by all projectors - * @param projs [out] projectors indexed by `iproj` - * @param it2iproj [out] for each type, the projector index (across all types) - */ - void init_proj(const std::string& orbital_dir, - const std::vector& orb_files, - const std::vector& nproj, // for each type, the number of projectors - const std::vector& lproj, // angular momentum of projectors within the type (l of zeta function) - const std::vector& iproj, // index of projectors within the type (izeta) - const std::vector& onsite_r); // for each type, the projector index (across all types) - - /** - * @brief calculate the onsite projectors in reciprocal space(|G+K>) for all atoms - */ - void tabulate_atomic(const int ik, const char grad = 'n'); - - void overlap_proj_psi( - const int npm, - const std::complex* ppsi - ); - void read_abacus_orb(std::ifstream& ifs, - std::string& elem, - double& ecut, - int& nr, - double& dr, - std::vector& nzeta, - std::vector>& radials, - const int rank = 0); - /// @brief static access to this class instance - static OnsiteProjector* get_instance(); - void init(const std::string& orbital_dir, - const UnitCell* ucell_in, - const psi::Psi, Device>& psi, - const K_Vectors& kv, - const ModulePW::PW_Basis_K& pw_basis, // level1: the plane wave basis, need ik - Structure_Factor& sf, // level2: the structure factor calculator - const double onsite_radius, - const int nq, - const double dq, - const ModuleBase::matrix& wg, - const ModuleBase::matrix& ekb); - - /// @brief calculate and print the occupations of all lm orbitals - void cal_occupations(const psi::Psi, Device>* psi, const ModuleBase::matrix& wg_in); - - int get_size_becp() const { return size_becp; } - std::complex* get_becp() const { return becp; } - std::complex* get_h_becp() const { return h_becp; } - std::complex* get_tab_atomic() const { return tab_atomic_; } - int get_tot_nproj() const { return tot_nproj; } - int get_npw() const { return npw_; } - int get_npwx() const { return npwx_; } - const int& get_nh(int iat) const { return iat_nh[iat]; } - - hamilt::Onsite_Proj_tools* get_fs_tools() const { return fs_tools; } - - private: - OnsiteProjector(){}; - ~OnsiteProjector(); - - Device* ctx = {}; - base_device::DEVICE_CPU* cpu_ctx = {}; - base_device::AbacusDevice_t device = {}; - static OnsiteProjector *instance; - - hamilt::Onsite_Proj_tools* fs_tools = nullptr; - - std::complex* tab_atomic_ = nullptr; - std::complex* becp = nullptr; // nbands * nkb - // save becp in CPU memory, only used when Device is GPU - std::complex* h_becp; - - int size_becp = 0; - int size_vproj = 0; - int tot_nproj = 0; - int npw_ = 0; - int npwx_ = 0; - int ik_ = 0; - std::vector> it2ia; - std::vector rgrid; - std::vector> projs; - std::vector> it2iproj; - std::vector lproj; - std::vector iat_nh; - - const UnitCell* ucell = nullptr; - - const ModulePW::PW_Basis_K* pw_basis_ = nullptr; // level1: the plane wave basis, need ik - Structure_Factor* sf_ = nullptr; // level2: the structure factor calculator - int ntype = 0; - - RadialProjection::RadialProjector rp_; - std::vector irow2it_; - std::vector irow2iproj_; - std::vector irow2m_; - std::map, int> itiaiprojm2irow_; - - ModuleBase::realArray tab; - ModuleBase::matrix nhtol; - - bool initialed = false; - - /// @brief rename the operators for CPU/GPU device - using gemm_op = ModuleBase::gemm_op, Device>; - - using resmem_complex_op = base_device::memory::resize_memory_op, Device>; - using resmem_complex_h_op = base_device::memory::resize_memory_op, base_device::DEVICE_CPU>; - using setmem_complex_op = base_device::memory::set_memory_op, Device>; - using delmem_complex_op = base_device::memory::delete_memory_op, Device>; - using delmem_complex_h_op = base_device::memory::delete_memory_op, base_device::DEVICE_CPU>; - using syncmem_complex_h2d_op - = base_device::memory::synchronize_memory_op, Device, base_device::DEVICE_CPU>; - using syncmem_complex_d2h_op - = base_device::memory::synchronize_memory_op, base_device::DEVICE_CPU, Device>; - - using resmem_var_op = base_device::memory::resize_memory_op; - using resmem_var_h_op = base_device::memory::resize_memory_op; - using setmem_var_op = base_device::memory::set_memory_op; - using delmem_var_op = base_device::memory::delete_memory_op; - using delmem_var_h_op = base_device::memory::delete_memory_op; - using syncmem_var_h2d_op = base_device::memory::synchronize_memory_op; - using syncmem_var_d2h_op = base_device::memory::synchronize_memory_op; - - using resmem_int_op = base_device::memory::resize_memory_op; - using delmem_int_op = base_device::memory::delete_memory_op; - using syncmem_int_h2d_op = base_device::memory::synchronize_memory_op; - }; -}// namespace projectors + return fs_tools; + } + + private: + OnsiteProjector(){}; + ~OnsiteProjector(); + + Device* ctx = {}; + base_device::DEVICE_CPU* cpu_ctx = {}; + base_device::AbacusDevice_t device = {}; + static OnsiteProjector* instance; + + hamilt::Onsite_Proj_tools* fs_tools = nullptr; + + std::complex* tab_atomic_ = nullptr; + std::complex* becp = nullptr; // nbands * nkb + // save becp in CPU memory, only used when Device is GPU + std::complex* h_becp; + + int size_becp = 0; + int size_vproj = 0; + int tot_nproj = 0; + int npw_ = 0; + int npwx_ = 0; + int ik_ = 0; + std::vector> it2ia; + std::vector rgrid; + std::vector> projs; + std::vector> it2iproj; + std::vector lproj; + std::vector iat_nh; + + const UnitCell* ucell = nullptr; + + const ModulePW::PW_Basis_K* pw_basis_ = nullptr; // level1: the plane wave basis, need ik + Structure_Factor* sf_ = nullptr; // level2: the structure factor calculator + int ntype = 0; + + RadialProjection::RadialProjector rp_; + std::vector irow2it_; + std::vector irow2iproj_; + std::vector irow2m_; + std::map, int> itiaiprojm2irow_; + + ModuleBase::realArray tab; + ModuleBase::matrix nhtol; + + bool initialed = false; + + /// @brief rename the operators for CPU/GPU device + using gemm_op = ModuleBase::gemm_op, Device>; + + using resmem_complex_op = base_device::memory::resize_memory_op, Device>; + using resmem_complex_h_op = base_device::memory::resize_memory_op, base_device::DEVICE_CPU>; + using setmem_complex_op = base_device::memory::set_memory_op, Device>; + using delmem_complex_op = base_device::memory::delete_memory_op, Device>; + using delmem_complex_h_op = base_device::memory::delete_memory_op, base_device::DEVICE_CPU>; + using syncmem_complex_h2d_op + = base_device::memory::synchronize_memory_op, Device, base_device::DEVICE_CPU>; + using syncmem_complex_d2h_op + = base_device::memory::synchronize_memory_op, base_device::DEVICE_CPU, Device>; + + using resmem_var_op = base_device::memory::resize_memory_op; + using resmem_var_h_op = base_device::memory::resize_memory_op; + using setmem_var_op = base_device::memory::set_memory_op; + using delmem_var_op = base_device::memory::delete_memory_op; + using delmem_var_h_op = base_device::memory::delete_memory_op; + using syncmem_var_h2d_op = base_device::memory::synchronize_memory_op; + using syncmem_var_d2h_op = base_device::memory::synchronize_memory_op; + + using resmem_int_op = base_device::memory::resize_memory_op; + using delmem_int_op = base_device::memory::delete_memory_op; + using syncmem_int_h2d_op = base_device::memory::synchronize_memory_op; +}; +} // namespace projectors #endif // MODULEHAMILTPW_ONSITEPROJECTOR_H \ No newline at end of file diff --git a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/ekinetic_pw.cpp b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/ekinetic_pw.cpp index 65b6c5b3dc..6a2c3e2798 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/ekinetic_pw.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/ekinetic_pw.cpp @@ -1,67 +1,65 @@ #include "ekinetic_pw.h" -#include "module_base/timer.h" -#include "module_base/tool_quit.h" +#include "source_base/module_device/device.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" -#include "module_base/module_device/device.h" - - -namespace hamilt { +namespace hamilt +{ -template -Ekinetic>::Ekinetic( - Real tpiba2_in, - const Real* gk2_in, - const int gk2_row, - const int gk2_col) +template +Ekinetic>::Ekinetic(Real tpiba2_in, const Real* gk2_in, const int gk2_row, const int gk2_col) { - this->classname = "Ekinetic"; - this->cal_type = calculation_type::pw_ekinetic; - this->tpiba2 = tpiba2_in; - this->gk2 = gk2_in; - this->gk2_row = gk2_row; - this->gk2_col = gk2_col; - this->device = base_device::get_device_type(this->ctx); - if( this->tpiba2 < 1e-10 || this->gk2 == nullptr) { - ModuleBase::WARNING_QUIT("EkineticPW", "Constuctor of Operator::EkineticPW is failed, please check your code!"); - } + this->classname = "Ekinetic"; + this->cal_type = calculation_type::pw_ekinetic; + this->tpiba2 = tpiba2_in; + this->gk2 = gk2_in; + this->gk2_row = gk2_row; + this->gk2_col = gk2_col; + this->device = base_device::get_device_type(this->ctx); + if (this->tpiba2 < 1e-10 || this->gk2 == nullptr) + { + ModuleBase::WARNING_QUIT("EkineticPW", "Constuctor of Operator::EkineticPW is failed, please check your code!"); + } } -template -Ekinetic>::~Ekinetic() {} +template +Ekinetic>::~Ekinetic() +{ +} -template -void Ekinetic>::act( - const int nbands, - const int nbasis, - const int npol, - const T* tmpsi_in, - T* tmhpsi, - const int ngk_ik, - const bool is_first_node)const +template +void Ekinetic>::act(const int nbands, + const int nbasis, + const int npol, + const T* tmpsi_in, + T* tmhpsi, + const int ngk_ik, + const bool is_first_node) const { ModuleBase::timer::tick("Operator", "EkineticPW"); int max_npw = nbasis / npol; - const Real *gk2_ik = &(this->gk2[this->ik * this->gk2_col]); - // denghui added 20221019 - ekinetic_op()(this->ctx, nbands, ngk_ik, max_npw, is_first_node, tpiba2, gk2_ik, tmhpsi, tmpsi_in); - // for (int ib = 0; ib < nbands; ++ib) - // { - // for (int ig = 0; ig < ngk_ik; ++ig) - // { - // tmhpsi[ig] += gk2_ik[ig] * tpiba2 * tmpsi_in[ig]; - // } - // tmhpsi += max_npw; - // tmpsi_in += max_npw; - // } - ModuleBase::timer::tick("Operator", "EkineticPW"); + const Real* gk2_ik = &(this->gk2[this->ik * this->gk2_col]); + // denghui added 20221019 + ekinetic_op()(this->ctx, nbands, ngk_ik, max_npw, is_first_node, tpiba2, gk2_ik, tmhpsi, tmpsi_in); + // for (int ib = 0; ib < nbands; ++ib) + // { + // for (int ig = 0; ig < ngk_ik; ++ig) + // { + // tmhpsi[ig] += gk2_ik[ig] * tpiba2 * tmpsi_in[ig]; + // } + // tmhpsi += max_npw; + // tmpsi_in += max_npw; + // } + ModuleBase::timer::tick("Operator", "EkineticPW"); } // copy construct added by denghui at 20221105 -template -template -hamilt::Ekinetic>::Ekinetic(const Ekinetic> *ekinetic) { +template +template +hamilt::Ekinetic>::Ekinetic(const Ekinetic>* ekinetic) +{ this->classname = "Ekinetic"; this->cal_type = calculation_type::pw_ekinetic; this->ik = ekinetic->get_ik(); @@ -70,8 +68,10 @@ hamilt::Ekinetic>::Ekinetic(const Ekineticgk2_row = ekinetic->get_gk2_row(); this->gk2_col = ekinetic->get_gk2_col(); this->device = base_device::get_device_type(this->ctx); - if( this->tpiba2 < 1e-10 || this->gk2 == nullptr) { - ModuleBase::WARNING_QUIT("EkineticPW", "Copy Constuctor of Operator::EkineticPW is failed, please check your code!"); + if (this->tpiba2 < 1e-10 || this->gk2 == nullptr) + { + ModuleBase::WARNING_QUIT("EkineticPW", + "Copy Constuctor of Operator::EkineticPW is failed, please check your code!"); } } diff --git a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/ekinetic_pw.h b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/ekinetic_pw.h index 8061ae6e2d..b4f18456db 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/ekinetic_pw.h +++ b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/ekinetic_pw.h @@ -1,18 +1,22 @@ #ifndef EKINETICPW_H #define EKINETICPW_H -#include "operator_pw.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/ekinetic_op.h" +#include "operator_pw.h" -#include +#include -namespace hamilt { +namespace hamilt +{ // Not needed anymore #ifndef __EKINETICTEMPLATE #define __EKINETICTEMPLATE -template class Ekinetic : public T {}; +template +class Ekinetic : public T +{ +}; // template // class Ekinetic : public OperatorPW {}; @@ -20,40 +24,51 @@ template class Ekinetic : public T {}; // template // class Ekinetic : public OperatorPW -template +template class Ekinetic> : public OperatorPW { - private: + private: using Real = typename GetTypeReal::type; + public: - Ekinetic( - Real tpiba2_in, - const Real* gk2_in, - const int gk2_row, - const int gk2_col); + Ekinetic(Real tpiba2_in, const Real* gk2_in, const int gk2_row, const int gk2_col); - template + template explicit Ekinetic(const Ekinetic>* ekinetic); virtual ~Ekinetic(); virtual void act(const int nbands, - const int nbasis, - const int npol, - const T* tmpsi_in, - T* tmhpsi, - const int ngk_ik = 0, - const bool is_first_node = false)const override; + const int nbasis, + const int npol, + const T* tmpsi_in, + T* tmhpsi, + const int ngk_ik = 0, + const bool is_first_node = false) const override; // denghuilu added for copy construct at 20221105 - int get_gk2_row() const {return this->gk2_row;} - int get_gk2_col() const {return this->gk2_col;} - Real get_tpiba2() const {return this->tpiba2;} - const Real* get_gk2() const {return this->gk2;} - Device* get_ctx() const {return this->ctx;} + int get_gk2_row() const + { + return this->gk2_row; + } + int get_gk2_col() const + { + return this->gk2_col; + } + Real get_tpiba2() const + { + return this->tpiba2; + } + const Real* get_gk2() const + { + return this->gk2; + } + Device* get_ctx() const + { + return this->ctx; + } private: - Real tpiba2 = 0.0; const Real* gk2 = nullptr; int gk2_row = 0; diff --git a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/meta_pw.cpp b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/meta_pw.cpp index 817dba61ce..7451e04e52 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/meta_pw.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/meta_pw.cpp @@ -1,21 +1,22 @@ #include "meta_pw.h" -#include "module_base/timer.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_hamilt_general/module_xc/xc_functional.h" -#include "module_base/tool_quit.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" -namespace hamilt { +namespace hamilt +{ -template +template Meta>::Meta(Real tpiba_in, - const int* isk_in, - const Real* vk_in, - const int vk_row, - const int vk_col, - const ModulePW::PW_Basis_K* wfcpw_in) + const int* isk_in, + const Real* vk_in, + const int vk_row, + const int vk_col, + const ModulePW::PW_Basis_K* wfcpw_in) { - if(isk_in == nullptr || tpiba_in < 1e-10 || wfcpw_in == nullptr) + if (isk_in == nullptr || tpiba_in < 1e-10 || wfcpw_in == nullptr) { ModuleBase::WARNING_QUIT("MetaPW", "Constuctor of Operator::MetaPW is failed, please check your code!"); } @@ -28,24 +29,22 @@ Meta>::Meta(Real tpiba_in, this->vk_col = vk_col; this->wfcpw = wfcpw_in; resmem_complex_op()(this->porter, this->wfcpw->nmaxgr, "Meta::porter"); - } -template +template Meta>::~Meta() { delmem_complex_op()(this->porter); } -template -void Meta>::act( - const int nbands, - const int nbasis, - const int npol, - const T* tmpsi_in, - T* tmhpsi, - const int ngk_ik, - const bool is_first_node)const +template +void Meta>::act(const int nbands, + const int nbasis, + const int npol, + const T* tmpsi_in, + T* tmhpsi, + const int ngk_ik, + const bool is_first_node) const { if (XC_Functional::get_func_type() != 3) { @@ -53,28 +52,51 @@ void Meta>::act( } ModuleBase::timer::tick("Operator", "MetaPW"); - if(is_first_node) + if (is_first_node) { - setmem_complex_op()(tmhpsi, 0, nbasis*nbands/npol); + setmem_complex_op()(tmhpsi, 0, nbasis * nbands / npol); } const int current_spin = this->isk[this->ik]; int max_npw = nbasis / npol; - //npol == 2 case has not been considered + // npol == 2 case has not been considered for (int ib = 0; ib < nbands; ++ib) { for (int j = 0; j < 3; j++) { - meta_op()(this->ctx, this->ik, j, ngk_ik, this->wfcpw->npwk_max, this->tpiba, wfcpw->get_gcar_data(), wfcpw->get_kvec_c_data(), tmpsi_in, this->porter); + meta_op()(this->ctx, + this->ik, + j, + ngk_ik, + this->wfcpw->npwk_max, + this->tpiba, + wfcpw->get_gcar_data(), + wfcpw->get_kvec_c_data(), + tmpsi_in, + this->porter); wfcpw->recip_to_real(this->ctx, this->porter, this->porter, this->ik); - if(this->vk_col != 0) { - vector_mul_vector_op()(this->vk_col, this->porter, this->porter, this->vk + current_spin * this->vk_col); + if (this->vk_col != 0) + { + vector_mul_vector_op()(this->vk_col, + this->porter, + this->porter, + this->vk + current_spin * this->vk_col); } wfcpw->real_to_recip(this->ctx, this->porter, this->porter, this->ik); - meta_op()(this->ctx, this->ik, j, ngk_ik, this->wfcpw->npwk_max, this->tpiba, wfcpw->get_gcar_data(), wfcpw->get_kvec_c_data(), this->porter, tmhpsi, true); + meta_op()(this->ctx, + this->ik, + j, + ngk_ik, + this->wfcpw->npwk_max, + this->tpiba, + wfcpw->get_gcar_data(), + wfcpw->get_kvec_c_data(), + this->porter, + tmhpsi, + true); } // x,y,z directions tmhpsi += max_npw; @@ -83,9 +105,10 @@ void Meta>::act( ModuleBase::timer::tick("Operator", "MetaPW"); } -template -template -Meta>::Meta(const Meta> *meta) { +template +template +Meta>::Meta(const Meta>* meta) +{ this->classname = "Meta"; this->cal_type = calculation_type::pw_meta; this->ik = meta->get_ik(); @@ -95,7 +118,7 @@ Meta>::Meta(const Meta> *meta) this->vk_row = meta->get_vk_row(); this->vk_col = meta->get_vk_col(); this->wfcpw = meta->get_wfcpw(); - if(this->isk == nullptr || this->tpiba < 1e-10 || this->vk == nullptr || this->wfcpw == nullptr) + if (this->isk == nullptr || this->tpiba < 1e-10 || this->vk == nullptr || this->wfcpw == nullptr) { ModuleBase::WARNING_QUIT("MetaPW", "Constuctor of Operator::MetaPW is failed, please check your code!"); } diff --git a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/meta_pw.h b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/meta_pw.h index 133eed1f5b..b27834f8d9 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/meta_pw.h +++ b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/meta_pw.h @@ -1,67 +1,83 @@ #ifndef METAPW_H #define METAPW_H -#include "operator_pw.h" -#include "module_base/matrix.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/meta_op.h" -#include "module_base/kernels/math_kernel_op.h" +#include "operator_pw.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/matrix.h" -#include +#include -namespace hamilt { +namespace hamilt +{ #ifndef __METATEMPLATE #define __METATEMPLATE -template class Meta : public T {}; +template +class Meta : public T +{ +}; // template // class Meta : public OperatorPW {}; #endif -template +template class Meta> : public OperatorPW { private: using Real = typename GetTypeReal::type; - public: - Meta(Real tpiba2_in, - const int* isk_in, - const Real* vk_in, - const int vk_row, - const int vk_col, - const ModulePW::PW_Basis_K* wfcpw); - - template - explicit Meta(const Meta>* meta); - - virtual ~Meta(); - - virtual void act(const int nbands, - const int nbasis, - const int npol, - const T* tmpsi_in, - T* tmhpsi, - const int ngk_ik = 0, - const bool is_first_node = false)const override; - - // denghui added for copy constructor at 20221105 - Real get_tpiba() const - { - return this->tpiba; - } - const int * get_isk() const {return this->isk;} - const Real* get_vk() const {return this->vk;} - int get_vk_row() const {return this->vk_row;} - int get_vk_col() const {return this->vk_col;} + + public: + Meta(Real tpiba2_in, + const int* isk_in, + const Real* vk_in, + const int vk_row, + const int vk_col, + const ModulePW::PW_Basis_K* wfcpw); + + template + explicit Meta(const Meta>* meta); + + virtual ~Meta(); + + virtual void act(const int nbands, + const int nbasis, + const int npol, + const T* tmpsi_in, + T* tmhpsi, + const int ngk_ik = 0, + const bool is_first_node = false) const override; + + // denghui added for copy constructor at 20221105 + Real get_tpiba() const + { + return this->tpiba; + } + const int* get_isk() const + { + return this->isk; + } + const Real* get_vk() const + { + return this->vk; + } + int get_vk_row() const + { + return this->vk_row; + } + int get_vk_col() const + { + return this->vk_col; + } const ModulePW::PW_Basis_K* get_wfcpw() const { - return this->wfcpw; + return this->wfcpw; } - private: - + private: mutable int max_npw = 0; mutable int npol = 0; @@ -73,13 +89,13 @@ class Meta> : public OperatorPW const int* isk = nullptr; - const Real * vk = nullptr; + const Real* vk = nullptr; const ModulePW::PW_Basis_K* wfcpw = nullptr; Device* ctx = {}; base_device::DEVICE_CPU* cpu_ctx = {}; - T *porter = nullptr; + T* porter = nullptr; using meta_op = meta_pw_op; using vector_mul_vector_op = ModuleBase::vector_mul_vector_op; using resmem_complex_op = base_device::memory::resize_memory_op; diff --git a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/nonlocal_pw.cpp b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/nonlocal_pw.cpp index 66e5f04927..373de9c092 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/nonlocal_pw.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/nonlocal_pw.cpp @@ -1,21 +1,21 @@ #include "nonlocal_pw.h" #include "module_parameter/parameter.h" -#include "module_base/blas_connector.h" -#include "module_base/timer.h" -#include "module_base/parallel_reduce.h" -#include "module_base/tool_quit.h" +#include "source_base/blas_connector.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" +namespace hamilt +{ -namespace hamilt { - -template +template Nonlocal>::Nonlocal(const int* isk_in, - const pseudopot_cell_vnl* ppcell_in, - const UnitCell* ucell_in, - const ModulePW::PW_Basis_K* wfc_basis) + const pseudopot_cell_vnl* ppcell_in, + const UnitCell* ucell_in, + const ModulePW::PW_Basis_K* wfc_basis) { - if( isk_in == nullptr || ppcell_in == nullptr || ucell_in == nullptr) + if (isk_in == nullptr || ppcell_in == nullptr || ucell_in == nullptr) { ModuleBase::WARNING_QUIT("NonlocalPW", "Constuctor of Operator::NonlocalPW is failed, please check your code!"); } @@ -28,27 +28,27 @@ Nonlocal>::Nonlocal(const int* isk_in, this->deeq = this->ppcell->template get_deeq_data(); this->deeq_nc = this->ppcell->template get_deeq_nc_data(); this->vkb = this->ppcell->template get_vkb_data(); - } -template -Nonlocal>::~Nonlocal() { +template +Nonlocal>::~Nonlocal() +{ delmem_complex_op()(this->ps); delmem_complex_op()(this->becp); } -template +template void Nonlocal>::init(const int ik_in) { ModuleBase::timer::tick("Nonlocal", "getvnl"); this->ik = ik_in; // Calculate nonlocal pseudopotential vkb - if(this->ppcell->nkb > 0) //xiaohui add 2013-09-02. Attention... - { - this->ppcell->getvnl(this->ctx, *this->ucell, this->ik, this->vkb); - } + if (this->ppcell->nkb > 0) // xiaohui add 2013-09-02. Attention... + { + this->ppcell->getvnl(this->ctx, *this->ucell, this->ik, this->vkb); + } - if(this->next_op != nullptr) + if (this->next_op != nullptr) { this->next_op->init(ik_in); } @@ -59,8 +59,8 @@ void Nonlocal>::init(const int ik_in) //-------------------------------------------------------------------------- // this function sum up each non-local pseudopotential located on each atom, //-------------------------------------------------------------------------- -template -void Nonlocal>::add_nonlocal_pp(T *hpsi_in, const T *becp, const int m) const +template +void Nonlocal>::add_nonlocal_pp(T* hpsi_in, const T* becp, const int m) const { ModuleBase::timer::tick("Nonlocal", "add_nonlocal_pp"); @@ -69,7 +69,8 @@ void Nonlocal>::add_nonlocal_pp(T *hpsi_in, const T *becp, // T *ps = new T[nkb * m]; // ModuleBase::GlobalFunc::ZEROS(ps, m * nkb); - if (this->nkb_m < m * nkb) { + if (this->nkb_m < m * nkb) + { resmem_complex_op()(this->ps, nkb * m, "Nonlocal::ps"); this->nkb_m = m * nkb; } @@ -85,13 +86,20 @@ void Nonlocal>::add_nonlocal_pp(T *hpsi_in, const T *becp, const int nproj = this->ucell->atoms[it].ncpp.nh; // denghui replace 2022-10-20 // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - nonlocal_op()( - this->ctx, // device context - this->ucell->atoms[it].na, m, nproj, // four loop size - sum, iat, current_spin, nkb, // additional index params - this->ppcell->deeq.getBound2(), this->ppcell->deeq.getBound3(), this->ppcell->deeq.getBound4(), // realArray operator() - this->deeq, // array of data - this->ps, this->becp); // array of data + nonlocal_op()(this->ctx, // device context + this->ucell->atoms[it].na, + m, + nproj, // four loop size + sum, + iat, + current_spin, + nkb, // additional index params + this->ppcell->deeq.getBound2(), + this->ppcell->deeq.getBound3(), + this->ppcell->deeq.getBound4(), // realArray operator() + this->deeq, // array of data + this->ps, + this->becp); // array of data // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // for (int ia = 0; ia < this->ucell->atoms[it].na; ia++) // { @@ -121,13 +129,19 @@ void Nonlocal>::add_nonlocal_pp(T *hpsi_in, const T *becp, const int nproj = this->ucell->atoms[it].ncpp.nh; // added by denghui at 20221109 // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - nonlocal_op()( - this->ctx, // device context - this->ucell->atoms[it].na, m, nproj, // four loop size - sum, iat, nkb, // additional index params - this->ppcell->deeq_nc.getBound2(), this->ppcell->deeq_nc.getBound3(), this->ppcell->deeq_nc.getBound4(), // realArray operator() - this->deeq_nc, // array of data - this->ps, this->becp); // array of data + nonlocal_op()(this->ctx, // device context + this->ucell->atoms[it].na, + m, + nproj, // four loop size + sum, + iat, + nkb, // additional index params + this->ppcell->deeq_nc.getBound2(), + this->ppcell->deeq_nc.getBound3(), + this->ppcell->deeq_nc.getBound4(), // realArray operator() + this->deeq_nc, // array of data + this->ps, + this->becp); // array of data // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // for (int ia = 0; ia < this->ucell->atoms[it].na; ia++) // { @@ -167,62 +181,58 @@ void Nonlocal>::add_nonlocal_pp(T *hpsi_in, const T *becp, int inc = 1; // denghui replace 2022-10-20 // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - gemv_op()( - transa, - this->npw, - this->ppcell->nkb, - &this->one, - this->vkb, - this->ppcell->vkb.nc, - this->ps, - inc, - &this->one, - hpsi_in, - inc); + gemv_op()(transa, + this->npw, + this->ppcell->nkb, + &this->one, + this->vkb, + this->ppcell->vkb.nc, + this->ps, + inc, + &this->one, + hpsi_in, + inc); } else { int npm = m; - //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - // denghui replace 2022-10-20 - #ifdef __DSP - ModuleBase::gemm_op_mt() - #else - gemm_op() - #endif - ( - transa, - transb, - this->npw, - npm, - this->ppcell->nkb, - &this->one, - this->vkb, - this->ppcell->vkb.nc, - this->ps, - npm, - &this->one, - hpsi_in, - this->max_npw - ); +//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +// denghui replace 2022-10-20 +#ifdef __DSP + ModuleBase::gemm_op_mt() +#else + gemm_op() +#endif + (transa, + transb, + this->npw, + npm, + this->ppcell->nkb, + &this->one, + this->vkb, + this->ppcell->vkb.nc, + this->ps, + npm, + &this->one, + hpsi_in, + this->max_npw); } ModuleBase::timer::tick("Nonlocal", "add_nonlocal_pp"); } -template -void Nonlocal>::act( - const int nbands, - const int nbasis, - const int npol, - const T* tmpsi_in, - T* tmhpsi, - const int ngk_ik, - const bool is_first_node)const +template +void Nonlocal>::act(const int nbands, + const int nbasis, + const int npol, + const T* tmpsi_in, + T* tmhpsi, + const int ngk_ik, + const bool is_first_node) const { ModuleBase::timer::tick("Operator", "nonlocal_pw"); - if(is_first_node) + if (is_first_node) { - setmem_complex_op()(tmhpsi, 0, nbasis*nbands/npol); + setmem_complex_op()(tmhpsi, 0, nbasis * nbands / npol); } this->npw = ngk_ik; @@ -234,7 +244,7 @@ void Nonlocal>::act( //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // qianrui optimize 2021-3-31 int nkb = this->ppcell->nkb; - if (this->nkb_m < nbands * nkb) + if (this->nkb_m < nbands * nkb) { resmem_complex_op()(this->becp, nbands * nkb, "Nonlocal::becp"); } @@ -246,44 +256,41 @@ void Nonlocal>::act( int inc = 1; // denghui replace 2022-10-20 // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - gemv_op()( - transa, - this->npw, - nkb, - &this->one, - this->vkb, - this->ppcell->vkb.nc, - tmpsi_in, - inc, - &this->zero, - this->becp, - inc); + gemv_op()(transa, + this->npw, + nkb, + &this->one, + this->vkb, + this->ppcell->vkb.nc, + tmpsi_in, + inc, + &this->zero, + this->becp, + inc); } else { int npm = nbands; - //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - // denghui replace 2022-10-20 - #ifdef __DSP +//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< +// denghui replace 2022-10-20 +#ifdef __DSP ModuleBase::gemm_op_mt() - #else +#else gemm_op() - #endif - ( - transa, - transb, - nkb, - npm, - this->npw, - &this->one, - this->vkb, - this->ppcell->vkb.nc, - tmpsi_in, - max_npw, - &this->zero, - this->becp, - nkb - ); +#endif + (transa, + transb, + nkb, + npm, + this->npw, + &this->one, + this->vkb, + this->ppcell->vkb.nc, + tmpsi_in, + max_npw, + &this->zero, + this->becp, + nkb); } Parallel_Reduce::reduce_pool(becp, nkb * nbands); @@ -294,9 +301,9 @@ void Nonlocal>::act( ModuleBase::timer::tick("Operator", "nonlocal_pw"); } -template -template -hamilt::Nonlocal>::Nonlocal(const Nonlocal> *nonlocal) +template +template +hamilt::Nonlocal>::Nonlocal(const Nonlocal>* nonlocal) { this->classname = "Nonlocal"; this->cal_type = calculation_type::pw_nonlocal; @@ -307,7 +314,7 @@ hamilt::Nonlocal>::Nonlocal(const Nonlocaldeeq = this->ppcell->d_deeq; this->deeq_nc = this->ppcell->template get_deeq_nc_data(); this->vkb = this->ppcell->template get_vkb_data(); - if( this->isk == nullptr || this->ppcell == nullptr || this->ucell == nullptr) + if (this->isk == nullptr || this->ppcell == nullptr || this->ucell == nullptr) { ModuleBase::WARNING_QUIT("NonlocalPW", "Constuctor of Operator::NonlocalPW is failed, please check your code!"); } diff --git a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/nonlocal_pw.h b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/nonlocal_pw.h index 2ae106cb96..f1c13868c1 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/nonlocal_pw.h +++ b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/nonlocal_pw.h @@ -1,54 +1,66 @@ #ifndef NONLOCALPW_H #define NONLOCALPW_H -#include "operator_pw.h" - #include "module_cell/unitcell.h" -#include "module_hamilt_pw/hamilt_pwdft/kernels/nonlocal_op.h" -#include "module_base/kernels/math_kernel_op.h" - #include "module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h" +#include "module_hamilt_pw/hamilt_pwdft/kernels/nonlocal_op.h" +#include "operator_pw.h" +#include "source_base/kernels/math_kernel_op.h" -namespace hamilt { +namespace hamilt +{ #ifndef NONLOCALTEMPLATE_H #define NONLOCALTEMPLATE_H -template class Nonlocal : public T {}; +template +class Nonlocal : public T +{ +}; // template // class Nonlocal : public OperatorPW {}; #endif -template +template class Nonlocal> : public OperatorPW { private: using Real = typename GetTypeReal::type; + public: Nonlocal(const int* isk_in, const pseudopot_cell_vnl* ppcell_in, const UnitCell* ucell_in, const ModulePW::PW_Basis_K* wfc_basis); - template + template explicit Nonlocal(const Nonlocal>* nonlocal); virtual ~Nonlocal(); - virtual void init(const int ik_in)override; + virtual void init(const int ik_in) override; virtual void act(const int nbands, - const int nbasis, - const int npol, - const T* tmpsi_in, - T* tmhpsi, - const int ngk_ik = 0, - const bool is_first_node = false)const override; - - const int *get_isk() const {return this->isk;} - const pseudopot_cell_vnl *get_ppcell() const {return this->ppcell;} - const UnitCell *get_ucell() const {return this->ucell;} + const int nbasis, + const int npol, + const T* tmpsi_in, + T* tmhpsi, + const int ngk_ik = 0, + const bool is_first_node = false) const override; + + const int* get_isk() const + { + return this->isk; + } + const pseudopot_cell_vnl* get_ppcell() const + { + return this->ppcell; + } + const UnitCell* get_ucell() const + { + return this->ucell; + } T* get_vkb() const { return this->vkb; @@ -59,7 +71,7 @@ class Nonlocal> : public OperatorPW } private: - void add_nonlocal_pp(T *hpsi_in, const T *becp, const int m) const; + void add_nonlocal_pp(T* hpsi_in, const T* becp, const int m) const; mutable int max_npw = 0; @@ -77,25 +89,25 @@ class Nonlocal> : public OperatorPW const ModulePW::PW_Basis_K* wfcpw = nullptr; - mutable T *ps = nullptr; - mutable T *vkb = nullptr; - mutable T *becp = nullptr; + mutable T* ps = nullptr; + mutable T* vkb = nullptr; + mutable T* becp = nullptr; Device* ctx = {}; base_device::DEVICE_CPU* cpu_ctx = {}; - Real * deeq = nullptr; - T * deeq_nc = nullptr; + Real* deeq = nullptr; + T* deeq_nc = nullptr; // using nonlocal_op = nonlocal_pw_op; using gemv_op = ModuleBase::gemv_op; using gemm_op = ModuleBase::gemm_op; using nonlocal_op = nonlocal_pw_op; using setmem_complex_op = base_device::memory::set_memory_op; - #ifdef __DSP +#ifdef __DSP using resmem_complex_op = base_device::memory::resize_memory_op_mt; using delmem_complex_op = base_device::memory::delete_memory_op_mt; - #else +#else using resmem_complex_op = base_device::memory::resize_memory_op; using delmem_complex_op = base_device::memory::delete_memory_op; - #endif +#endif using syncmem_complex_h2d_op = base_device::memory::synchronize_memory_op; T one{1, 0}; diff --git a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/onsite_proj_pw.cpp b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/onsite_proj_pw.cpp index 24c5b11891..2919306582 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/onsite_proj_pw.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/onsite_proj_pw.cpp @@ -1,22 +1,22 @@ #include "onsite_proj_pw.h" -#include "module_base/blas_connector.h" -#include "module_base/timer.h" -#include "module_base/parallel_reduce.h" -#include "module_base/tool_quit.h" #include "module_hamilt_lcao/module_deltaspin/spin_constrain.h" #include "module_hamilt_lcao/module_dftu/dftu.h" -#include "module_hamilt_pw/hamilt_pwdft/onsite_projector.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/onsite_op.h" +#include "module_hamilt_pw/hamilt_pwdft/onsite_projector.h" +#include "source_base/blas_connector.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" +namespace hamilt +{ -namespace hamilt { - -template +template OnsiteProj>::OnsiteProj(const int* isk_in, - const UnitCell* ucell_in, - const bool cal_delta_spin, - const bool cal_dftu) + const UnitCell* ucell_in, + const bool cal_delta_spin, + const bool cal_dftu) { this->classname = "OnsiteProj"; this->cal_type = calculation_type::pw_onsite; @@ -26,17 +26,18 @@ OnsiteProj>::OnsiteProj(const int* isk_in, this->has_dftu = cal_dftu; } -template -OnsiteProj>::~OnsiteProj() { +template +OnsiteProj>::~OnsiteProj() +{ delmem_complex_op()(this->ps); - if(this->init_delta_spin) + if (this->init_delta_spin) { delmem_int_op()(this->ip_iat); delmem_complex_op()(this->lambda_coeff); } - if(this->has_dftu) + if (this->has_dftu) { - if(!init_delta_spin) + if (!init_delta_spin) { delmem_int_op()(this->ip_iat); } @@ -47,7 +48,7 @@ OnsiteProj>::~OnsiteProj() { } } -template +template void OnsiteProj>::init(const int ik_in) { ModuleBase::timer::tick("OnsiteProj", "getvnl"); @@ -57,7 +58,7 @@ void OnsiteProj>::init(const int ik_in) onsite_p->tabulate_atomic(ik_in); this->tnp = onsite_p->get_tot_nproj(); - if(this->next_op != nullptr) + if (this->next_op != nullptr) { this->next_op->init(ik_in); } @@ -68,78 +69,79 @@ void OnsiteProj>::init(const int ik_in) //-------------------------------------------------------------------------- // this function sum up each non-local pseudopotential located on each atom, //-------------------------------------------------------------------------- -template -void OnsiteProj>::add_onsite_proj(T *hpsi_in, const int npol, const int m) const +template +void OnsiteProj>::add_onsite_proj(T* hpsi_in, const int npol, const int m) const { ModuleBase::timer::tick("OnsiteProj", "add_onsite_proj"); auto* onsite_p = projectors::OnsiteProjector::get_instance(); // apply the operator to the wavefunction - //std::cout << "use of tab_atomic at " << __FILE__ << ": " << __LINE__ << std::endl; + // std::cout << "use of tab_atomic at " << __FILE__ << ": " << __LINE__ << std::endl; const std::complex* tab_atomic = onsite_p->get_tab_atomic(); const int npw = onsite_p->get_npw(); const int npwx = onsite_p->get_npwx(); char transa = 'N'; char transb = 'T'; int npm = m; - gemm_op()( - transa, - transb, - npw, - npm, - this->tnp, - &this->one, - tab_atomic, - npw, - this->ps, - npm, - &this->one, - hpsi_in, - npwx - ); + gemm_op()(transa, + transb, + npw, + npm, + this->tnp, + &this->one, + tab_atomic, + npw, + this->ps, + npm, + &this->one, + hpsi_in, + npwx); ModuleBase::timer::tick("OnsiteProj", "add_onsite_proj"); } -template -void OnsiteProj>::update_becp(const T *psi_in, const int npol, const int m) const +template +void OnsiteProj>::update_becp(const T* psi_in, const int npol, const int m) const { auto* onsite_p = projectors::OnsiteProjector::get_instance(); - // calculate + // calculate // std::cout << __FILE__ << ":" << __LINE__ << " nbands = " << m << std::endl; onsite_p->overlap_proj_psi(m, psi_in); } -template +template void OnsiteProj>::cal_ps_delta_spin(const int npol, const int m) const { - if(!this->has_delta_spin) return; + if (!this->has_delta_spin) + return; auto* onsite_p = projectors::OnsiteProjector::get_instance(); const std::complex* becp = onsite_p->get_becp(); - spinconstrain::SpinConstrain>& sc = spinconstrain::SpinConstrain>::getScInstance(); + spinconstrain::SpinConstrain>& sc + = spinconstrain::SpinConstrain>::getScInstance(); auto& constrain = sc.get_constrain(); auto& lambda = sc.get_sc_lambda(); // T *ps = new T[tnp * m]; // ModuleBase::GlobalFunc::ZEROS(ps, m * tnp); - if (this->nkb_m < m * tnp) { + if (this->nkb_m < m * tnp) + { resmem_complex_op()(this->ps, tnp * m, "OnsiteProj::ps"); this->nkb_m = m * tnp; } setmem_complex_op()(this->ps, 0, tnp * m); - if(!this->init_delta_spin) + if (!this->init_delta_spin) { this->init_delta_spin = true; - //prepare ip_iat and lambda_coeff + // prepare ip_iat and lambda_coeff resmem_int_op()(this->ip_iat, onsite_p->get_tot_nproj()); resmem_complex_op()(this->lambda_coeff, this->ucell->nat * 4); std::vector ip_iat0(onsite_p->get_tot_nproj()); int ip0 = 0; - for(int iat=0;iatucell->nat;iat++) + for (int iat = 0; iat < this->ucell->nat; iat++) { - for(int ip=0;ipget_nh(iat);ip++) + for (int ip = 0; ip < onsite_p->get_nh(iat); ip++) { ip_iat0[ip0++] = iat; } @@ -149,7 +151,7 @@ void OnsiteProj>::cal_ps_delta_spin(const int npol, const // prepare array of nh_iat and lambda_array to pass to the onsite_ps_op operator std::vector> tmp_lambda_coeff(this->ucell->nat * 4); - for(int iat=0;iatucell->nat;iat++) + for (int iat = 0; iat < this->ucell->nat; iat++) { tmp_lambda_coeff[iat * 4] = std::complex(lambda[iat][2], 0.0); tmp_lambda_coeff[iat * 4 + 1] = std::complex(lambda[iat][0], lambda[iat][1]); @@ -159,14 +161,14 @@ void OnsiteProj>::cal_ps_delta_spin(const int npol, const syncmem_complex_h2d_op()(this->lambda_coeff, tmp_lambda_coeff.data(), this->ucell->nat * 4); // TODO: code block above should be moved to the init function - hamilt::onsite_ps_op()( - this->ctx, // device context - m, - npol, - this->ip_iat, - tnp, - this->lambda_coeff, - this->ps, becp); + hamilt::onsite_ps_op()(this->ctx, // device context + m, + npol, + this->ip_iat, + tnp, + this->lambda_coeff, + this->ps, + becp); /*int sum = 0; if (npol == 1) @@ -209,10 +211,11 @@ void OnsiteProj>::cal_ps_delta_spin(const int npol, const }*/ } -template +template void OnsiteProj>::cal_ps_dftu(const int npol, const int m) const { - if(!this->has_dftu) return; + if (!this->has_dftu) + return; auto* onsite_p = projectors::OnsiteProjector::get_instance(); const std::complex* becp = onsite_p->get_becp(); @@ -221,19 +224,20 @@ void OnsiteProj>::cal_ps_dftu(const int npol, const int m) // T *ps = new T[tnp * m]; // ModuleBase::GlobalFunc::ZEROS(ps, m * tnp); - if (this->nkb_m < m * tnp) { + if (this->nkb_m < m * tnp) + { resmem_complex_op()(this->ps, tnp * m, "OnsiteProj::ps"); this->nkb_m = m * tnp; } - if(!this->has_delta_spin) + if (!this->has_delta_spin) { setmem_complex_op()(this->ps, 0, tnp * m); } - if(!this->init_dftu) + if (!this->init_dftu) { this->init_dftu = true; - //prepare orb_l_iat, ip_m, vu_begin_iat and vu_device + // prepare orb_l_iat, ip_m, vu_begin_iat and vu_device resmem_int_op()(this->orb_l_iat, this->ucell->nat); resmem_int_op()(this->ip_m, onsite_p->get_tot_nproj()); resmem_int_op()(this->vu_begin_iat, this->ucell->nat); @@ -245,15 +249,15 @@ void OnsiteProj>::cal_ps_dftu(const int npol, const int m) std::vector orb_l_iat0(this->ucell->nat); int ip0 = 0; int vu_begin = 0; - for(int iat=0;iatucell->nat;iat++) + for (int iat = 0; iat < this->ucell->nat; iat++) { const int it = this->ucell->iat2it[iat]; const int target_l = dftu->orbital_corr[it]; orb_l_iat0[iat] = target_l; const int nproj = onsite_p->get_nh(iat); - if(target_l == -1) + if (target_l == -1) { - for(int ip=0;ip>::cal_ps_dftu(const int npol, const int m) vu_begin_iat0[iat] = vu_begin; vu_begin += tlp1 * tlp1 * 4; const int m_begin = target_l * target_l; - const int m_end = (target_l + 1) * (target_l + 1); - for(int ip=0;ip= m_begin && ip < m_end) + if (ip >= m_begin && ip < m_end) { ip_m0[ip0++] = ip - m_begin; } @@ -292,17 +296,17 @@ void OnsiteProj>::cal_ps_dftu(const int npol, const int m) syncmem_complex_h2d_op()(this->vu_device, dftu->get_eff_pot_pw(0), dftu->get_size_eff_pot_pw()); - hamilt::onsite_ps_op()( - this->ctx, // device context - m, - npol, - this->orb_l_iat, - this->ip_iat, - this->ip_m, - this->vu_begin_iat, - tnp, - this->vu_device, - this->ps, becp); + hamilt::onsite_ps_op()(this->ctx, // device context + m, + npol, + this->orb_l_iat, + this->ip_iat, + this->ip_m, + this->vu_begin_iat, + tnp, + this->vu_device, + this->ps, + becp); /* int sum = 0; @@ -354,43 +358,64 @@ void OnsiteProj>::cal_ps_dftu(const int npol, const int m) }*/ } -template<> -void OnsiteProj, base_device::DEVICE_CPU>>::add_onsite_proj(std::complex *hpsi_in, const int npol, const int m) const -{} -template<> -void OnsiteProj, base_device::DEVICE_CPU>>::update_becp(const std::complex *psi_in, const int npol, const int m) const -{} -template<> -void OnsiteProj, base_device::DEVICE_CPU>>::cal_ps_delta_spin(const int npol, const int m) const -{} -template<> -void OnsiteProj, base_device::DEVICE_CPU>>::cal_ps_dftu(const int npol, const int m) const -{} +template <> +void OnsiteProj, base_device::DEVICE_CPU>>::add_onsite_proj(std::complex* hpsi_in, + const int npol, + const int m) const +{ +} +template <> +void OnsiteProj, base_device::DEVICE_CPU>>::update_becp( + const std::complex* psi_in, + const int npol, + const int m) const +{ +} +template <> +void OnsiteProj, base_device::DEVICE_CPU>>::cal_ps_delta_spin(const int npol, + const int m) const +{ +} +template <> +void OnsiteProj, base_device::DEVICE_CPU>>::cal_ps_dftu(const int npol, + const int m) const +{ +} #if ((defined __CUDA) || (defined __ROCM)) -template<> -void OnsiteProj, base_device::DEVICE_GPU>>::add_onsite_proj(std::complex *hpsi_in, const int npol, const int m) const -{} -template<> -void OnsiteProj, base_device::DEVICE_GPU>>::update_becp(const std::complex *psi_in, const int npol, const int m) const -{} -template<> -void OnsiteProj, base_device::DEVICE_GPU>>::cal_ps_delta_spin(const int npol, const int m) const -{} -template<> -void OnsiteProj, base_device::DEVICE_GPU>>::cal_ps_dftu(const int npol, const int m) const -{} +template <> +void OnsiteProj, base_device::DEVICE_GPU>>::add_onsite_proj(std::complex* hpsi_in, + const int npol, + const int m) const +{ +} +template <> +void OnsiteProj, base_device::DEVICE_GPU>>::update_becp( + const std::complex* psi_in, + const int npol, + const int m) const +{ +} +template <> +void OnsiteProj, base_device::DEVICE_GPU>>::cal_ps_delta_spin(const int npol, + const int m) const +{ +} +template <> +void OnsiteProj, base_device::DEVICE_GPU>>::cal_ps_dftu(const int npol, + const int m) const +{ +} #endif -template -void OnsiteProj>::act( - const int nbands, - const int nbasis, - const int npol, - const T* tmpsi_in, - T* tmhpsi, - const int ngk_ik, - const bool is_first_node)const +template +void OnsiteProj>::act(const int nbands, + const int nbasis, + const int npol, + const T* tmpsi_in, + T* tmhpsi, + const int ngk_ik, + const bool is_first_node) const { ModuleBase::timer::tick("Operator", "OnsiteProjPW"); this->update_becp(tmpsi_in, npol, nbands); @@ -400,13 +425,13 @@ void OnsiteProj>::act( ModuleBase::timer::tick("Operator", "OnsiteProjPW"); } -template -template -hamilt::OnsiteProj>::OnsiteProj(const OnsiteProj> *nonlocal) +template +template +hamilt::OnsiteProj>::OnsiteProj(const OnsiteProj>* nonlocal) { this->classname = "OnsiteProj"; this->cal_type = calculation_type::pw_nonlocal; - // FIXME: + // FIXME: } template class OnsiteProj, base_device::DEVICE_CPU>>; diff --git a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/onsite_proj_pw.h b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/onsite_proj_pw.h index b28657d0df..c0d5328e9d 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/onsite_proj_pw.h +++ b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/onsite_proj_pw.h @@ -1,56 +1,63 @@ #ifndef MODULEHAMILTPW_ONSITE_PROJ_PW_H #define MODULEHAMILTPW_ONSITE_PROJ_PW_H -#include "operator_pw.h" - #include "module_cell/unitcell.h" -#include "module_base/kernels/math_kernel_op.h" +#include "operator_pw.h" +#include "source_base/kernels/math_kernel_op.h" -namespace hamilt { +namespace hamilt +{ #ifndef ONSITETEMPLATE_H #define ONSITETEMPLATE_H -template class OnsiteProj : public T {}; +template +class OnsiteProj : public T +{ +}; // template // class OnsiteProj : public OperatorPW {}; #endif -template +template class OnsiteProj> : public OperatorPW { private: using Real = typename GetTypeReal::type; + public: - OnsiteProj(const int* isk_in, - const UnitCell* ucell_in, - const bool cal_delta_spin, - const bool cal_dftu); + OnsiteProj(const int* isk_in, const UnitCell* ucell_in, const bool cal_delta_spin, const bool cal_dftu); - template + template explicit OnsiteProj(const OnsiteProj>* onsite_proj); virtual ~OnsiteProj(); - virtual void init(const int ik_in)override; + virtual void init(const int ik_in) override; virtual void act(const int nbands, - const int nbasis, - const int npol, - const T* tmpsi_in, - T* tmhpsi, - const int ngk = 0, - const bool is_first_node = false)const override; - - const int *get_isk() const {return this->isk;} - const UnitCell *get_ucell() const {return this->ucell;} + const int nbasis, + const int npol, + const T* tmpsi_in, + T* tmhpsi, + const int ngk = 0, + const bool is_first_node = false) const override; + + const int* get_isk() const + { + return this->isk; + } + const UnitCell* get_ucell() const + { + return this->ucell; + } private: void cal_ps_delta_spin(const int npol, const int m) const; void cal_ps_dftu(const int npol, const int m) const; void update_becp(const T* psi_in, const int npol, const int m) const; - void add_onsite_proj(T *hpsi_in, const int npol, const int m) const; + void add_onsite_proj(T* hpsi_in, const int npol, const int m) const; const int* isk = nullptr; @@ -71,7 +78,7 @@ class OnsiteProj> : public OperatorPW mutable bool init_dftu = false; mutable bool init_delta_spin = false; - mutable T *ps = nullptr; + mutable T* ps = nullptr; int tnp = 0; Device* ctx = {}; base_device::DEVICE_CPU* cpu_ctx = {}; diff --git a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/op_exx_pw.cpp b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/op_exx_pw.cpp index 022d439fc5..db4c95d469 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/op_exx_pw.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/op_exx_pw.cpp @@ -1,11 +1,11 @@ -#include "module_base/constants.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" #include "module_cell/klist.h" #include "module_hamilt_general/operator.h" #include "module_psi/psi.h" -#include "module_base/tool_quit.h" +#include "source_base/constants.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" #include #include @@ -15,22 +15,22 @@ extern "C" { - void ztrtri_(char *uplo, char *diag, int *n, std::complex *a, int *lda, int *info); - void ctrtri_(char *uplo, char *diag, int *n, std::complex *a, int *lda, int *info); + void ztrtri_(char* uplo, char* diag, int* n, std::complex* a, int* lda, int* info); + void ctrtri_(char* uplo, char* diag, int* n, std::complex* a, int* lda, int* info); } -//extern "C" void zpotrf_(char* uplo, const int* n, std::complex* A, const int* lda, int* info); -//extern "C" void cpotrf_(char* uplo, const int* n, std::complex* A, const int* lda, int* info); +// extern "C" void zpotrf_(char* uplo, const int* n, std::complex* A, const int* lda, int* info); +// extern "C" void cpotrf_(char* uplo, const int* n, std::complex* A, const int* lda, int* info); -#include "op_exx_pw.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "op_exx_pw.h" namespace hamilt { template struct trtri_op { - void operator()(char *uplo, char *diag, int *n, T *a, int *lda, int *info) + void operator()(char* uplo, char* diag, int* n, T* a, int* lda, int* info) { std::cout << "trtri_op not implemented" << std::endl; } @@ -39,7 +39,7 @@ struct trtri_op template struct potrf_op { - void operator()(char *uplo, int *n, T *a, int *lda, int *info) + void operator()(char* uplo, int* n, T* a, int* lda, int* info) { std::cout << "potrf_op not implemented" << std::endl; } @@ -49,8 +49,8 @@ template OperatorEXXPW::OperatorEXXPW(const int* isk_in, const ModulePW::PW_Basis_K* wfcpw_in, const ModulePW::PW_Basis* rhopw_in, - K_Vectors *kv_in, - const UnitCell *ucell) + K_Vectors* kv_in, + const UnitCell* ucell) : isk(isk_in), wfcpw(wfcpw_in), rhopw(rhopw_in), kv(kv_in), ucell(ucell) { gamma_extrapolation = PARAM.inp.exx_gamma_extrapolation; @@ -89,7 +89,6 @@ OperatorEXXPW::OperatorEXXPW(const int* isk_in, Real tpiba2 = tpiba * tpiba; // calculate the exx_divergence exx_divergence(); - } template @@ -108,28 +107,27 @@ OperatorEXXPW::~OperatorEXXPW() delmem_complex_op()(h_psi_ace); delmem_complex_op()(psi_h_psi_ace); delmem_complex_op()(L_ace); - for (auto &Xi_ace: Xi_ace_k) + for (auto& Xi_ace: Xi_ace_k) { delmem_complex_op()(Xi_ace); } Xi_ace_k.clear(); - } template -inline bool is_finite(const T &val) +inline bool is_finite(const T& val) { return std::isfinite(val); } template <> -inline bool is_finite(const std::complex &val) +inline bool is_finite(const std::complex& val) { return std::isfinite(val.real()) && std::isfinite(val.imag()); } template <> -inline bool is_finite(const std::complex &val) +inline bool is_finite(const std::complex& val) { return std::isfinite(val.real()) && std::isfinite(val.imag()); } @@ -138,16 +136,17 @@ template void OperatorEXXPW::act(const int nbands, const int nbasis, const int npol, - const T *tmpsi_in, - T *tmhpsi, + const T* tmpsi_in, + T* tmhpsi, const int ngk_ik, const bool is_first_node) const { - if (first_iter) return; + if (first_iter) + return; if (is_first_node) { - setmem_complex_op()(tmhpsi, 0, nbasis*nbands/npol); + setmem_complex_op()(tmhpsi, 0, nbasis * nbands / npol); } if (PARAM.inp.exxace && GlobalC::exx_info.info_global.separate_loop) @@ -162,26 +161,26 @@ void OperatorEXXPW::act(const int nbands, template void OperatorEXXPW::act_op(const int nbands, - const int nbasis, - const int npol, - const T *tmpsi_in, - T *tmhpsi, - const int ngk_ik, - const bool is_first_node) const + const int nbasis, + const int npol, + const T* tmpsi_in, + T* tmhpsi, + const int ngk_ik, + const bool is_first_node) const { -// std::cout << "nbands: " << nbands -// << " nbasis: " << nbasis -// << " npol: " << npol -// << " ngk_ik: " << ngk_ik -// << " is_first_node: " << is_first_node -// << std::endl; + // std::cout << "nbands: " << nbands + // << " nbasis: " << nbasis + // << " npol: " << npol + // << " ngk_ik: " << ngk_ik + // << " is_first_node: " << is_first_node + // << std::endl; if (!potential_got) { get_potential(); potential_got = true; } -// set_psi(&p_exx_helper->psi); + // set_psi(&p_exx_helper->psi); ModuleBase::timer::tick("OperatorEXXPW", "act_op"); @@ -197,7 +196,7 @@ void OperatorEXXPW::act_op(const int nbands, // ik fixed here, select band n for (int n_iband = 0; n_iband < nbands; n_iband++) { - const T *psi_nk = tmpsi_in + n_iband * nbasis; + const T* psi_nk = tmpsi_in + n_iband * nbasis; // retrieve \psi_nk in real space wfcpw->recip_to_real(ctx, psi_nk, psi_nk_real, this->ik); @@ -206,7 +205,7 @@ void OperatorEXXPW::act_op(const int nbands, Real nqs = q_points.size(); for (int iq: q_points) { -// std::cout << "ik" << this->ik << " iq" << iq << std::endl; + // std::cout << "ik" << this->ik << " iq" << iq << std::endl; for (int m_iband = 0; m_iband < psi.get_nbands(); m_iband++) { // double wg_mqb_real = GlobalC::exx_helper.wg(iq, m_iband); @@ -219,22 +218,22 @@ void OperatorEXXPW::act_op(const int nbands, // if (has_real.find({iq, m_iband}) == has_real.end()) // { - const T* psi_mq = get_pw(m_iband, iq); - wfcpw->recip_to_real(ctx, psi_mq, psi_mq_real, iq); - // syncmem_complex_op()(this->ctx, this->ctx, psi_all_real + m_iband * wfcpw->nrxx, psi_mq_real, wfcpw->nrxx); - // has_real[{iq, m_iband}] = true; - // } - // else - // { - // // const T* psi_mq = get_pw(m_iband, iq); - // // wfcpw->recip_to_real(ctx, psi_mq, psi_mq_real, iq); - // syncmem_complex_op()(this->ctx, this->ctx, psi_mq_real, psi_all_real + m_iband * wfcpw->nrxx, wfcpw->nrxx); - // } - - // direct multiplication in real space, \psi_nk(r) * \psi_mq(r) - #ifdef _OPENMP - #pragma omp parallel for schedule(static) - #endif + const T* psi_mq = get_pw(m_iband, iq); + wfcpw->recip_to_real(ctx, psi_mq, psi_mq_real, iq); +// syncmem_complex_op()(this->ctx, this->ctx, psi_all_real + m_iband * wfcpw->nrxx, psi_mq_real, wfcpw->nrxx); +// has_real[{iq, m_iband}] = true; +// } +// else +// { +// // const T* psi_mq = get_pw(m_iband, iq); +// // wfcpw->recip_to_real(ctx, psi_mq, psi_mq_real, iq); +// syncmem_complex_op()(this->ctx, this->ctx, psi_mq_real, psi_all_real + m_iband * wfcpw->nrxx, wfcpw->nrxx); +// } + +// direct multiplication in real space, \psi_nk(r) * \psi_mq(r) +#ifdef _OPENMP +#pragma omp parallel for schedule(static) +#endif for (int ir = 0; ir < wfcpw->nrxx; ir++) { // assert(is_finite(psi_nk_real[ir])); @@ -243,7 +242,7 @@ void OperatorEXXPW::act_op(const int nbands, density_real[ir] = psi_nk_real[ir] * std::conj(psi_mq_real[ir]) / ucell_omega; // Phase e^(i(q-k)r) } // to be changed into kernel function - + // bring the density to recip space rhopw->real2recip(density_real, density_recip); @@ -253,10 +252,10 @@ void OperatorEXXPW::act_op(const int nbands, // bring the potential back to real space rhopw->recip2real(density_recip, density_real); - // get the h|psi_ik>(r), save in density_real - #ifdef _OPENMP - #pragma omp parallel for schedule(static) - #endif +// get the h|psi_ik>(r), save in density_real +#ifdef _OPENMP +#pragma omp parallel for schedule(static) +#endif for (int ir = 0; ir < wfcpw->nrxx; ir++) { // assert(is_finite(psi_mq_real[ir])); @@ -267,9 +266,9 @@ void OperatorEXXPW::act_op(const int nbands, T wk_iq = kv->wk[iq]; T wk_ik = kv->wk[this->ik]; - #ifdef _OPENMP - #pragma omp parallel for schedule(static) - #endif +#ifdef _OPENMP +#pragma omp parallel for schedule(static) +#endif for (int ir = 0; ir < wfcpw->nrxx; ir++) { h_psi_real[ir] += density_real[ir] * wg_mqb / wk_iq / nqs; @@ -285,32 +284,30 @@ void OperatorEXXPW::act_op(const int nbands, Real hybrid_alpha = GlobalC::exx_info.info_global.hybrid_alpha; wfcpw->real_to_recip(ctx, h_psi_real, h_psi_nk, this->ik, true, hybrid_alpha); setmem_complex_op()(h_psi_real, 0, rhopw->nrxx); - } ModuleBase::timer::tick("OperatorEXXPW", "act_op"); - } template void OperatorEXXPW::act_op_ace(const int nbands, const int nbasis, const int npol, - const T *tmpsi_in, - T *tmhpsi, + const T* tmpsi_in, + T* tmhpsi, const int ngk_ik, const bool is_first_node) const { ModuleBase::timer::tick("OperatorEXXPW", "act_op_ace"); -// std::cout << "act_op_ace" << std::endl; + // std::cout << "act_op_ace" << std::endl; // hpsi += -Xi^\dagger * Xi * psi T* Xi_ace = Xi_ace_k[this->ik]; int nbands_tot = psi.get_nbands(); int nbasis_max = psi.get_nbasis(); -// T* hpsi = nullptr; -// resmem_complex_op()(hpsi, nbands_tot * nbasis); -// setmem_complex_op()(hpsi, 0, nbands_tot * nbasis); + // T* hpsi = nullptr; + // resmem_complex_op()(hpsi, nbands_tot * nbasis); + // setmem_complex_op()(hpsi, 0, nbands_tot * nbasis); T* Xi_psi = nullptr; resmem_complex_op()(Xi_psi, nbands_tot * nbands); setmem_complex_op()(Xi_psi, 0, nbands_tot * nbands); @@ -330,8 +327,7 @@ void OperatorEXXPW::act_op_ace(const int nbands, nbasis, &intermediate_zero, Xi_psi, - nbands_tot - ); + nbands_tot); Parallel_Reduce::reduce_pool(Xi_psi, nbands_tot * nbands); @@ -348,29 +344,26 @@ void OperatorEXXPW::act_op_ace(const int nbands, nbands_tot, &intermediate_one, tmhpsi, - nbasis - ); - + nbasis); -// // negative sign, add to hpsi -// vec_add_vec_complex_op()(this->ctx, nbands * nbasis, tmhpsi, hpsi, -1, tmhpsi, 1); -// delmem_complex_op()(hpsi); + // // negative sign, add to hpsi + // vec_add_vec_complex_op()(this->ctx, nbands * nbasis, tmhpsi, hpsi, -1, tmhpsi, 1); + // delmem_complex_op()(hpsi); delmem_complex_op()(Xi_psi); ModuleBase::timer::tick("OperatorEXXPW", "act_op_ace"); - } template void OperatorEXXPW::construct_ace() const { ModuleBase::timer::tick("OperatorEXXPW", "construct_ace"); -// int nkb = p_exx_helper->psi.get_nbands() * p_exx_helper->psi.get_nk(); + // int nkb = p_exx_helper->psi.get_nbands() * p_exx_helper->psi.get_nk(); int nbands = psi.get_nbands(); int nbasis = psi.get_nbasis(); int nk = psi.get_nk(); int ik_save = this->ik; - int * ik_ = const_cast(&this->ik); + int* ik_ = const_cast(&this->ik); T intermediate_one = 1.0, intermediate_zero = 0.0; @@ -417,15 +410,7 @@ void OperatorEXXPW::construct_ace() const *ik_ = ik; - act_op( - nbands, - nbasis, - 1, - p_psi, - h_psi_ace, - nbasis, - false - ); + act_op(nbands, nbasis, 1, p_psi, h_psi_ace, nbasis, false); // psi_h_psi_ace = psi^\dagger * h_psi_ace // p_exx_helper->psi.fix_kb(0, 0); @@ -446,10 +431,10 @@ void OperatorEXXPW::construct_ace() const // reduction of psi_h_psi_ace, due to distributed memory Parallel_Reduce::reduce_pool(psi_h_psi_ace, nbands * nbands); - // L_ace = cholesky(-psi_h_psi_ace) - #ifdef _OPENMP - #pragma omp parallel for schedule(static) - #endif +// L_ace = cholesky(-psi_h_psi_ace) +#ifdef _OPENMP +#pragma omp parallel for schedule(static) +#endif for (int i = 0; i < nbands; i++) { for (int j = 0; j < nbands; j++) @@ -463,10 +448,10 @@ void OperatorEXXPW::construct_ace() const potrf_op()(&lo, &nbands, L_ace, &nbands, &info); - // expand for-loop - #ifdef _OPENMP - #pragma omp parallel for schedule(static) collapse(2) - #endif +// expand for-loop +#ifdef _OPENMP +#pragma omp parallel for schedule(static) collapse(2) +#endif for (int i = 0; i < nbands; i++) { for (int j = 0; j < nbands; j++) @@ -503,12 +488,10 @@ void OperatorEXXPW::construct_ace() const setmem_complex_op()(h_psi_ace, 0, nbands * nbasis); setmem_complex_op()(psi_h_psi_ace, 0, nbands * nbands); setmem_complex_op()(L_ace, 0, nbands * nbands); - } *ik_ = ik_save; ModuleBase::timer::tick("OperatorEXXPW", "construct_ace"); - } template @@ -526,7 +509,7 @@ std::vector OperatorEXXPW::get_q_points(const int ik) const { for (int iq = 0; iq < wfcpw->nks; iq++) { - if (PARAM.inp.nspin ==1 ) + if (PARAM.inp.nspin == 1) { q_points_ik.push_back(iq); } @@ -558,7 +541,7 @@ std::vector OperatorEXXPW::get_q_points(const int ik) const } template -void OperatorEXXPW::multiply_potential(T *density_recip, int ik, int iq) const +void OperatorEXXPW::multiply_potential(T* density_recip, int ik, int iq) const { ModuleBase::timer::tick("OperatorEXXPW", "multiply_potential"); int npw = rhopw->npw; @@ -566,21 +549,20 @@ void OperatorEXXPW::multiply_potential(T *density_recip, int ik, int int nk_fac = PARAM.inp.nspin == 2 ? 2 : 1; int nk = nks / nk_fac; - #ifdef _OPENMP - #pragma omp parallel for schedule(static) - #endif +#ifdef _OPENMP +#pragma omp parallel for schedule(static) +#endif for (int ig = 0; ig < npw; ig++) { int ig_kq = ik * nks * npw + iq * npw + ig; density_recip[ig] *= pot[ig_kq]; - } ModuleBase::timer::tick("OperatorEXXPW", "multiply_potential"); } template -const T *OperatorEXXPW::get_pw(const int m, const int iq) const +const T* OperatorEXXPW::get_pw(const int m, const int iq) const { // return pws[iq].get() + m * wfcpw->npwk[iq]; psi.fix_kb(iq, m); @@ -590,7 +572,7 @@ const T *OperatorEXXPW::get_pw(const int m, const int iq) const template template -OperatorEXXPW::OperatorEXXPW(const OperatorEXXPW *op) +OperatorEXXPW::OperatorEXXPW(const OperatorEXXPW* op) { // copy all the datas this->isk = op->isk; @@ -605,9 +587,7 @@ OperatorEXXPW::OperatorEXXPW(const OperatorEXXPW *op resmem_complex_op()(this->ctx, h_psi_real, rhopw->nrxx); resmem_complex_op()(this->ctx, density_recip, rhopw->npw); resmem_complex_op()(this->ctx, h_psi_recip, wfcpw->npwk_max); -// this->pws.resize(wfcpw->nks); - - + // this->pws.resize(wfcpw->nks); } template @@ -629,9 +609,9 @@ void OperatorEXXPW::get_potential() const const ModuleBase::Vector3 q_c = wfcpw->kvec_c[iq]; const ModuleBase::Vector3 q_d = wfcpw->kvec_d[iq]; - #ifdef _OPENMP - #pragma omp parallel for schedule(static) - #endif +#ifdef _OPENMP +#pragma omp parallel for schedule(static) +#endif for (int ig = 0; ig < rhopw->npw; ig++) { const ModuleBase::Vector3 g_d = rhopw->gdirect[ig]; @@ -640,18 +620,15 @@ void OperatorEXXPW::get_potential() const // 7/8 of the points in the grid are "activated" and 1/8 are disabled. // grid_factor is designed for the 7/8 of the grid to function like all of the points Real grid_factor = 1; - double extrapolate_grid = 8.0/7.0; + double extrapolate_grid = 8.0 / 7.0; if (gamma_extrapolation) { // if isint(kqg_d[0] * nqs_half1) && isint(kqg_d[1] * nqs_half2) && isint(kqg_d[2] * nqs_half3) - auto isint = [](double x) - { + auto isint = [](double x) { double epsilon = 1e-6; // this follows the isint judgement in q-e return std::abs(x - std::round(x)) < epsilon; }; - if (isint(kqg_d[0] * nqs_half1) && - isint(kqg_d[1] * nqs_half2) && - isint(kqg_d[2] * nqs_half3)) + if (isint(kqg_d[0] * nqs_half1) && isint(kqg_d[1] * nqs_half2) && isint(kqg_d[2] * nqs_half3)) { grid_factor = 0; } @@ -689,8 +666,8 @@ void OperatorEXXPW::get_potential() const else { // if (PARAM.inp.dft_functional == "hse") - if (GlobalC::exx_info.info_global.ccp_type == Conv_Coulomb_Pot_K::Ccp_Type::Erfc && - !gamma_extrapolation) + if (GlobalC::exx_info.info_global.ccp_type == Conv_Coulomb_Pot_K::Ccp_Type::Erfc + && !gamma_extrapolation) { pot[ig_kq] = exx_div - ModuleBase::PI * ModuleBase::e2 / hse_omega2; } @@ -731,7 +708,7 @@ void OperatorEXXPW::exx_divergence() const ModuleBase::Vector3 k_c = wfcpw->kvec_c[ik]; const ModuleBase::Vector3 k_d = wfcpw->kvec_d[ik]; #ifdef _OPENMP -#pragma omp parallel for reduction(+:div) +#pragma omp parallel for reduction(+ : div) #endif for (int ig = 0; ig < rhopw->npw; ig++) { @@ -742,17 +719,14 @@ void OperatorEXXPW::exx_divergence() // 7/8 of the points in the grid are "activated" and 1/8 are disabled. // grid_factor is designed for the 7/8 of the grid to function like all of the points Real grid_factor = 1; - double extrapolate_grid = 8.0/7.0; + double extrapolate_grid = 8.0 / 7.0; if (gamma_extrapolation) { - auto isint = [](double x) - { + auto isint = [](double x) { double epsilon = 1e-6; // this follows the isint judgement in q-e return std::abs(x - std::round(x)) < epsilon; }; - if (isint(q_d[0] * nqs_half1) && - isint(q_d[1] * nqs_half2) && - isint(q_d[2] * nqs_half3)) + if (isint(q_d[0] * nqs_half1) && isint(q_d[1] * nqs_half2) && isint(q_d[2] * nqs_half3)) { grid_factor = 0; } @@ -762,13 +736,14 @@ void OperatorEXXPW::exx_divergence() } } - if (qq <= 1e-8) continue; + if (qq <= 1e-8) + continue; // else if (PARAM.inp.dft_functional == "hse") else if (GlobalC::exx_info.info_global.ccp_type == Conv_Coulomb_Pot_K::Ccp_Type::Erfc) { double omega = GlobalC::exx_info.info_global.hse_omega; double omega2 = omega * omega; - div += std::exp(-alpha * qq) / qq * (1.0 - std::exp(-qq*tpiba2 / 4.0 / omega2)) * grid_factor; + div += std::exp(-alpha * qq) / qq * (1.0 - std::exp(-qq * tpiba2 / 4.0 / omega2)) * grid_factor; } else { @@ -792,11 +767,10 @@ void OperatorEXXPW::exx_divergence() { div -= alpha; } - } div *= ModuleBase::e2 * ModuleBase::FOUR_PI / tpiba2 / wfcpw->nks; -// std::cout << "div: " << div << std::endl; + // std::cout << "div: " << div << std::endl; // numerically value the mean value of F(q) in the reciprocal space // This means we need to calculate the average of F(q) in the first brillouin zone @@ -810,12 +784,12 @@ void OperatorEXXPW::exx_divergence() double omega = GlobalC::exx_info.info_global.hse_omega; double omega2 = omega * omega; #ifdef _OPENMP -#pragma omp parallel for reduction(+:aa) +#pragma omp parallel for reduction(+ : aa) #endif for (int i = 0; i < nqq; i++) { - double q = dq * (i+0.5); - aa -= exp(-alpha * q * q) * exp(-q*q / 4.0 / omega2) * dq; + double q = dq * (i + 0.5); + aa -= exp(-alpha * q * q) * exp(-q * q / 4.0 / omega2) * dq; } } aa *= 8 / ModuleBase::FOUR_PI; @@ -825,14 +799,14 @@ void OperatorEXXPW::exx_divergence() double omega = ucell->omega; div -= ModuleBase::e2 * omega * aa; exx_div = div * wfcpw->nks / nk_fac; -// exx_div = 0; -// std::cout << "EXX divergence: " << exx_div << std::endl; + // exx_div = 0; + // std::cout << "EXX divergence: " << exx_div << std::endl; return; } template -double OperatorEXXPW::cal_exx_energy(psi::Psi *psi_) const +double OperatorEXXPW::cal_exx_energy(psi::Psi* psi_) const { if (PARAM.inp.exxace && GlobalC::exx_info.info_global.separate_loop) { @@ -845,12 +819,12 @@ double OperatorEXXPW::cal_exx_energy(psi::Psi *psi_) const } template -double OperatorEXXPW::cal_exx_energy_ace(psi::Psi *ppsi_) const +double OperatorEXXPW::cal_exx_energy_ace(psi::Psi* ppsi_) const { double Eexx = 0; psi::Psi psi_ = *ppsi_; - int *ik_ = const_cast(&this->ik); + int* ik_ = const_cast(&this->ik); int ik_save = this->ik; for (int i = 0; i < wfcpw->nks; i++) { @@ -868,10 +842,7 @@ double OperatorEXXPW::cal_exx_energy_ace(psi::Psi *ppsi_) double wg_i_n = (*wg)(i, nband); // Eexx += dot(psi_i_n, h_psi_i_n) Eexx += dot_op()(psi_.get_nbasis(), psi_i_n, hpsi_i_n, false) * wg_i_n * 2; - } - - } Parallel_Reduce::reduce_pool(Eexx); @@ -880,7 +851,7 @@ double OperatorEXXPW::cal_exx_energy_ace(psi::Psi *ppsi_) } template -double OperatorEXXPW::cal_exx_energy_op(psi::Psi *ppsi_) const +double OperatorEXXPW::cal_exx_energy_op(psi::Psi* ppsi_) const { psi::Psi psi_ = *ppsi_; @@ -893,7 +864,8 @@ double OperatorEXXPW::cal_exx_energy_op(psi::Psi *ppsi_) c T* density_real = new T[wfcpw->nrxx]; T* density_recip = new T[rhopw->npw]; - if (wg == nullptr) return 0.0; + if (wg == nullptr) + return 0.0; const int nk_fac = PARAM.inp.nspin == 2 ? 2 : 1; double Eexx_ik_real = 0.0; for (int ik = 0; ik < wfcpw->nks; ik++) @@ -949,10 +921,10 @@ double OperatorEXXPW::cal_exx_energy_op(psi::Psi *ppsi_) c T omega_inv = 1.0 / ucell->omega; - // direct multiplication in real space, \psi_nk(r) * \psi_mq(r) - #ifdef _OPENMP - #pragma omp parallel for - #endif +// direct multiplication in real space, \psi_nk(r) * \psi_mq(r) +#ifdef _OPENMP +#pragma omp parallel for +#endif for (int ir = 0; ir < wfcpw->nrxx; ir++) { // assert(is_finite(psi_nk_real[ir])); @@ -964,17 +936,17 @@ double OperatorEXXPW::cal_exx_energy_op(psi::Psi *ppsi_) c // bring the density to recip space rhopw->real2recip(density_real, density_recip); - #ifdef _OPENMP - #pragma omp parallel for reduction(+:Eexx_ik_real) - #endif +#ifdef _OPENMP +#pragma omp parallel for reduction(+ : Eexx_ik_real) +#endif for (int ig = 0; ig < rhopw->npw; ig++) { int nks = wfcpw->nks; int npw = rhopw->npw; int nk = nks / nk_fac; Real Fac = pot[ik * nks * npw + iq * npw + ig]; - Eexx_ik_real += Fac * (density_recip[ig] * std::conj(density_recip[ig])).real() - * wg_iqb_real / nqs * wg_ikb_real / kv->wk[ik]; + Eexx_ik_real += Fac * (density_recip[ig] * std::conj(density_recip[ig])).real() * wg_iqb_real + / nqs * wg_ikb_real / kv->wk[ik]; } } // m_iband @@ -986,7 +958,8 @@ double OperatorEXXPW::cal_exx_energy_op(psi::Psi *ppsi_) c } // ik Eexx_ik_real *= 0.5 * ucell->omega; Parallel_Reduce::reduce_pool(Eexx_ik_real); - // std::cout << "omega = " << this_->pelec->omega << " tpiba = " << this_->pw_rho->tpiba2 << " exx_div = " << exx_div << std::endl; + // std::cout << "omega = " << this_->pelec->omega << " tpiba = " << this_->pw_rho->tpiba2 << " exx_div = " << + // exx_div << std::endl; delete[] psi_nk_real; delete[] psi_mq_real; @@ -1000,25 +973,43 @@ double OperatorEXXPW::cal_exx_energy_op(psi::Psi *ppsi_) c } template <> -void trtri_op, base_device::DEVICE_CPU>::operator()(char *uplo, char *diag, int *n, std::complex *a, int *lda, int *info) +void trtri_op, base_device::DEVICE_CPU>::operator()(char* uplo, + char* diag, + int* n, + std::complex* a, + int* lda, + int* info) { ctrtri_(uplo, diag, n, a, lda, info); } template <> -void trtri_op, base_device::DEVICE_CPU>::operator()(char *uplo, char *diag, int *n, std::complex *a, int *lda, int *info) +void trtri_op, base_device::DEVICE_CPU>::operator()(char* uplo, + char* diag, + int* n, + std::complex* a, + int* lda, + int* info) { ztrtri_(uplo, diag, n, a, lda, info); } template <> -void potrf_op, base_device::DEVICE_CPU>::operator()(char *uplo, int *n, std::complex *a, int *lda, int *info) +void potrf_op, base_device::DEVICE_CPU>::operator()(char* uplo, + int* n, + std::complex* a, + int* lda, + int* info) { cpotrf_(uplo, n, a, lda, info); } template <> -void potrf_op, base_device::DEVICE_CPU>::operator()(char *uplo, int *n, std::complex *a, int *lda, int *info) +void potrf_op, base_device::DEVICE_CPU>::operator()(char* uplo, + int* n, + std::complex* a, + int* lda, + int* info) { zpotrf_(uplo, n, a, lda, info); } diff --git a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/op_exx_pw.h b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/op_exx_pw.h index bbf5c46bf3..fbfcdcf9d1 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/op_exx_pw.h +++ b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/op_exx_pw.h @@ -1,15 +1,15 @@ #ifndef OPEXXPW_H #define OPEXXPW_H -#include "module_base/matrix.h" #include "module_basis/module_pw/pw_basis.h" +#include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/klist.h" #include "module_psi/psi.h" #include "operator_pw.h" -#include "module_basis/module_pw/pw_basis_k.h" -#include "module_base/macros.h" -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/blas_connector.h" +#include "source_base/blas_connector.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/macros.h" +#include "source_base/matrix.h" #include #include @@ -32,40 +32,46 @@ class OperatorEXXPW : public OperatorPW const UnitCell* ucell); template - explicit OperatorEXXPW(const OperatorEXXPW *op_exx); + explicit OperatorEXXPW(const OperatorEXXPW* op_exx); virtual ~OperatorEXXPW(); virtual void act(const int nbands, const int nbasis, const int npol, - const T *tmpsi_in, - T *tmhpsi, + const T* tmpsi_in, + T* tmhpsi, const int ngk_ik = 0, const bool is_first_node = false) const override; - double cal_exx_energy(psi::Psi *psi_) const; + double cal_exx_energy(psi::Psi* psi_) const; - void set_psi(psi::Psi &psi_in) const { psi = psi_in; } + void set_psi(psi::Psi& psi_in) const + { + psi = psi_in; + } - void set_wg(const ModuleBase::matrix *wg_in) { wg = wg_in; } + void set_wg(const ModuleBase::matrix* wg_in) + { + wg = wg_in; + } void construct_ace() const; bool first_iter = false; private: - const int *isk = nullptr; - const ModulePW::PW_Basis_K *wfcpw = nullptr; - const ModulePW::PW_Basis *rhopw = nullptr; - const UnitCell *ucell = nullptr; + const int* isk = nullptr; + const ModulePW::PW_Basis_K* wfcpw = nullptr; + const ModulePW::PW_Basis* rhopw = nullptr; + const UnitCell* ucell = nullptr; Real exx_div = 0; Real tpiba = 0; - + std::vector get_q_points(const int ik) const; - const T *get_pw(const int m, const int iq) const; + const T* get_pw(const int m, const int iq) const; - void multiply_potential(T *density_recip, int ik, int iq) const; + void multiply_potential(T* density_recip, int ik, int iq) const; void exx_divergence(); @@ -74,63 +80,63 @@ class OperatorEXXPW : public OperatorPW void act_op(const int nbands, const int nbasis, const int npol, - const T *tmpsi_in, - T *tmhpsi, + const T* tmpsi_in, + T* tmhpsi, const int ngk_ik = 0, const bool is_first_node = false) const; void act_op_ace(const int nbands, const int nbasis, const int npol, - const T *tmpsi_in, - T *tmhpsi, + const T* tmpsi_in, + T* tmhpsi, const int ngk_ik = 0, const bool is_first_node = false) const; - double cal_exx_energy_op(psi::Psi *psi_) const; + double cal_exx_energy_op(psi::Psi* psi_) const; - double cal_exx_energy_ace(psi::Psi *psi_) const; + double cal_exx_energy_ace(psi::Psi* psi_) const; mutable int cnt = 0; mutable bool potential_got = false; - + // pws -// mutable std::vector> pws; + // mutable std::vector> pws; // k vectors - K_Vectors *kv = nullptr; + K_Vectors* kv = nullptr; // psi mutable psi::Psi psi; const ModuleBase::matrix* wg; // real space memory - T *psi_nk_real = nullptr; - T *psi_mq_real = nullptr; - T *density_real = nullptr; - T *h_psi_real = nullptr; + T* psi_nk_real = nullptr; + T* psi_mq_real = nullptr; + T* density_real = nullptr; + T* h_psi_real = nullptr; // density recip space memory - T *density_recip = nullptr; + T* density_recip = nullptr; // h_psi recip space memory - T *h_psi_recip = nullptr; - Real *pot = nullptr; + T* h_psi_recip = nullptr; + Real* pot = nullptr; // Lin Lin's ACE memory, 10.1021/acs.jctc.6b00092 - mutable T* h_psi_ace = nullptr; // H \Psi, W in the paper + mutable T* h_psi_ace = nullptr; // H \Psi, W in the paper mutable T* psi_h_psi_ace = nullptr; // \Psi^{\dagger} H \Psi, M in the paper - mutable T* L_ace = nullptr; // cholesky(-M).L, L in the paper - mutable std::vector Xi_ace_k; // L^{-1} (H \Psi)^{\dagger}, \Xi in the paper -// mutable T* Xi_ace = nullptr; // L^{-1} (H \Psi)^{\dagger}, \Xi in the paper + mutable T* L_ace = nullptr; // cholesky(-M).L, L in the paper + mutable std::vector Xi_ace_k; // L^{-1} (H \Psi)^{\dagger}, \Xi in the paper + // mutable T* Xi_ace = nullptr; // L^{-1} (H \Psi)^{\dagger}, \Xi in the paper mutable std::map> q_points; // occupational number - const ModuleBase::matrix *p_wg; + const ModuleBase::matrix* p_wg; -// mutable bool update_psi = false; + // mutable bool update_psi = false; - Device *ctx = {}; + Device* ctx = {}; base_device::DEVICE_CPU* cpu_ctx = {}; base_device::AbacusDevice_t device = {}; @@ -145,7 +151,6 @@ class OperatorEXXPW : public OperatorPW using dot_op = ModuleBase::dot_real_op; bool gamma_extrapolation = true; - }; } // namespace hamilt diff --git a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/operator_pw.cpp b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/operator_pw.cpp index f377a7f96a..2b4f70ff8e 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/operator_pw.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/operator_pw.cpp @@ -1,17 +1,19 @@ -#include "module_base/timer.h" -#include "module_hamilt_general/operator.h" #include "module_hamilt_pw/hamilt_pwdft/operator_pw/operator_pw.h" +#include "module_hamilt_general/operator.h" +#include "source_base/timer.h" + using namespace hamilt; -template +template OperatorPW::~OperatorPW(){}; -namespace hamilt { +namespace hamilt +{ template class OperatorPW, base_device::DEVICE_CPU>; template class OperatorPW, base_device::DEVICE_CPU>; #if ((defined __CUDA) || (defined __ROCM)) template class OperatorPW, base_device::DEVICE_GPU>; template class OperatorPW, base_device::DEVICE_GPU>; #endif -} \ No newline at end of file +} // namespace hamilt \ No newline at end of file diff --git a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/veff_pw.cpp b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/veff_pw.cpp index c69f55cbb2..5f4d22172b 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/veff_pw.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/veff_pw.cpp @@ -1,18 +1,19 @@ #include "veff_pw.h" -#include "module_base/timer.h" -#include "module_base/tool_quit.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" -namespace hamilt { +namespace hamilt +{ -template +template Veff>::Veff(const int* isk_in, - const Real* veff_in, - const int veff_row, - const int veff_col, - const ModulePW::PW_Basis_K* wfcpw_in) + const Real* veff_in, + const int veff_row, + const int veff_col, + const ModulePW::PW_Basis_K* wfcpw_in) { - if (isk_in == nullptr || wfcpw_in == nullptr) + if (isk_in == nullptr || wfcpw_in == nullptr) { ModuleBase::WARNING_QUIT("VeffPW", "Constuctor of Operator::VeffPW is failed, please check your code!"); } @@ -21,40 +22,38 @@ Veff>::Veff(const int* isk_in, this->cal_type = calculation_type::pw_veff; this->isk = isk_in; this->veff = veff_in; - //note: "veff = nullptr" means that this core does not treat potential but still treats wf. + // note: "veff = nullptr" means that this core does not treat potential but still treats wf. this->veff_row = veff_row; this->veff_col = veff_col; this->wfcpw = wfcpw_in; resmem_complex_op()(this->porter, this->wfcpw->nmaxgr, "Veff::porter"); resmem_complex_op()(this->porter1, this->wfcpw->nmaxgr, "Veff::porter1"); - } -template +template Veff>::~Veff() { delmem_complex_op()(this->porter); delmem_complex_op()(this->porter1); } -template -void Veff>::act( - const int nbands, - const int nbasis, - const int npol, - const T* tmpsi_in, - T* tmhpsi, - const int ngk_ik, - const bool is_first_node)const +template +void Veff>::act(const int nbands, + const int nbasis, + const int npol, + const T* tmpsi_in, + T* tmhpsi, + const int ngk_ik, + const bool is_first_node) const { ModuleBase::timer::tick("Operator", "veff_pw"); - if(is_first_node) + if (is_first_node) { - setmem_complex_op()(tmhpsi, 0, nbasis*nbands/npol); + setmem_complex_op()(tmhpsi, 0, nbasis * nbands / npol); } int max_npw = nbasis / npol; const int current_spin = this->isk[this->ik]; - const int psi_offset= max_npw * npol; + const int psi_offset = max_npw * npol; #ifdef __DSP if (npol == 1) { @@ -68,12 +67,13 @@ void Veff>::act( this->veff + current_spin * this->veff_col, tmhpsi, true); - tmhpsi += psi_offset; + tmhpsi += psi_offset; tmpsi_in += psi_offset; } - }else if (npol == 2) + } + else if (npol == 2) { - const Real* current_veff[4]={nullptr}; + const Real* current_veff[4] = {nullptr}; for (int is = 0; is < 4; is++) { current_veff[is] = this->veff + is * this->veff_col; @@ -85,10 +85,12 @@ void Veff>::act( veff_op()(this->ctx, this->veff_col, this->porter, this->porter1, current_veff); wfcpw->real_to_recip(this->porter, tmhpsi, this->ik, true); wfcpw->real_to_recip(this->porter1, tmhpsi + max_npw, this->ik, true); - tmhpsi += psi_offset; + tmhpsi += psi_offset; tmpsi_in += psi_offset; } - }else{ + } + else + { ModuleBase::WARNING_QUIT("VeffPW", "npol should be 1 or 2 or veff_col equal to 0\n"); } #else @@ -102,13 +104,13 @@ void Veff>::act( // but the 3DFFT can not be skipped, it will cause hanging veff_op()(this->ctx, this->veff_col, this->porter, this->veff + current_spin * this->veff_col); wfcpw->real_to_recip(this->porter, tmhpsi, this->ik, true); - tmhpsi += psi_offset; + tmhpsi += psi_offset; tmpsi_in += psi_offset; } } else if (npol == 2) { - const Real* current_veff[4]={nullptr}; + const Real* current_veff[4] = {nullptr}; for (int is = 0; is < 4; is++) { current_veff[is] = this->veff + is * this->veff_col; @@ -122,19 +124,22 @@ void Veff>::act( // FFT back to G space. wfcpw->real_to_recip(this->porter, tmhpsi, this->ik, true); wfcpw->real_to_recip(this->porter1, tmhpsi + max_npw, this->ik, true); - tmhpsi += psi_offset; + tmhpsi += psi_offset; tmpsi_in += psi_offset; } - }else{ + } + else + { ModuleBase::WARNING_QUIT("VeffPW", "npol should be 1 or 2 or veff_col equal to 0\n"); } #endif ModuleBase::timer::tick("Operator", "veff_pw"); } -template -template -hamilt::Veff>::Veff(const Veff> *veff) { +template +template +hamilt::Veff>::Veff(const Veff>* veff) +{ this->classname = "Veff"; this->cal_type = calculation_type::pw_veff; this->ik = veff->get_ik(); @@ -145,7 +150,8 @@ hamilt::Veff>::Veff(const Veff resmem_complex_op()(this->porter, this->wfcpw->nmaxgr); resmem_complex_op()(this->porter1, this->wfcpw->nmaxgr); this->veff = veff->get_veff(); - if (this->isk == nullptr || this->veff == nullptr || this->wfcpw == nullptr) { + if (this->isk == nullptr || this->veff == nullptr || this->wfcpw == nullptr) + { ModuleBase::WARNING_QUIT("VeffPW", "Constuctor of Operator::VeffPW is failed, please check your code!"); } } diff --git a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/veff_pw.h b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/veff_pw.h index 5ec042282f..00cc02e655 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/veff_pw.h +++ b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/veff_pw.h @@ -1,29 +1,34 @@ #ifndef VEFFPW_H #define VEFFPW_H -#include "operator_pw.h" -#include "module_base/matrix.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/veff_op.h" +#include "operator_pw.h" +#include "source_base/matrix.h" -#include +#include -namespace hamilt { +namespace hamilt +{ #ifndef __VEFFTEMPLATE #define __VEFFTEMPLATE -template class Veff : public T {}; +template +class Veff : public T +{ +}; // template // class Veff : public OperatorPW {}; #endif -template +template class Veff> : public OperatorPW { private: using Real = typename GetTypeReal::type; + public: Veff(const int* isk_in, const Real* veff_in, @@ -31,31 +36,42 @@ class Veff> : public OperatorPW const int veff_col, const ModulePW::PW_Basis_K* wfcpw_in); - template + template explicit Veff(const Veff>* veff); virtual ~Veff(); virtual void act(const int nbands, - const int nbasis, - const int npol, - const T* tmpsi_in, - T* tmhpsi, - const int ngk_ik = 0, - const bool is_first_node = false)const override; + const int nbasis, + const int npol, + const T* tmpsi_in, + T* tmhpsi, + const int ngk_ik = 0, + const bool is_first_node = false) const override; // denghui added for copy constructor at 20221105 - const Real *get_veff() const {return this->veff;} - int get_veff_col() const {return this->veff_col;} - int get_veff_row() const { return this->veff_row; } - const int *get_isk() const {return isk;} + const Real* get_veff() const + { + return this->veff; + } + int get_veff_col() const + { + return this->veff_col; + } + int get_veff_row() const + { + return this->veff_row; + } + const int* get_isk() const + { + return isk; + } const ModulePW::PW_Basis_K* get_wfcpw() const { return this->wfcpw; } private: - const int* isk = nullptr; const ModulePW::PW_Basis_K* wfcpw = nullptr; @@ -66,8 +82,8 @@ class Veff> : public OperatorPW int veff_col = 0; int veff_row = 0; const Real *veff = nullptr, *h_veff = nullptr, *d_veff = nullptr; - T *porter = nullptr; - T *porter1 = nullptr; + T* porter = nullptr; + T* porter1 = nullptr; base_device::AbacusDevice_t device = {}; using veff_op = veff_pw_op; diff --git a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/velocity_pw.cpp b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/velocity_pw.cpp index 3998ef9b85..2e6e08f48b 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/operator_pw/velocity_pw.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/operator_pw/velocity_pw.cpp @@ -1,8 +1,8 @@ #include "velocity_pw.h" -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" namespace hamilt { @@ -51,7 +51,7 @@ void Velocity::init(const int ik_in) resmem_var_op()(gy_, npw); resmem_var_op()(gz_, npw); std::vector gtmp_ptr = {this->gx_, this->gy_, this->gz_}; - for(int i=0; i<3; ++i) + for (int i = 0; i < 3; ++i) { for (int ig = 0; ig < npw; ++ig) { @@ -93,7 +93,7 @@ void Velocity::act(const psi::Psi, Device>* const int npw = this->wfcpw->npwk[this->ik]; const int max_npw = this->wfcpw->npwk_max; const int npol = psi_in->get_npol(); - + std::vector gtmp_ptr = {this->gx_, this->gy_, this->gz_}; // ------------- // p @@ -123,8 +123,8 @@ void Velocity::act(const psi::Psi, Device>* // 1. <\beta|\psi> Complex* becp1_ = nullptr; ///<[Device, n_npwx * nkb] <\beta|\psi> Complex* becp2_ = nullptr; ///<[Device, n_npwx * 3*nkb] <\nabla\beta|\psi> - Complex* ps1_ = nullptr; ///<[Device, nkb * n_npwx] sum of becp1 - Complex* ps2_ = nullptr; ///<[Device, 3*nkb * n_npwx] sum of becp2 + Complex* ps1_ = nullptr; ///<[Device, nkb * n_npwx] sum of becp1 + Complex* ps2_ = nullptr; ///<[Device, 3*nkb * n_npwx] sum of becp2 resmem_complex_op()(ps1_, this->ppcell->nkb * n_npwx); resmem_complex_op()(ps2_, 3 * this->ppcell->nkb * n_npwx); resmem_complex_op()(becp1_, this->ppcell->nkb * n_npwx); @@ -184,14 +184,14 @@ void Velocity::act(const psi::Psi, Device>* Complex* ps1_cpu = nullptr; Complex* ps2_cpu = nullptr; std::vector tmp_space1, tmp_space2; - if(std::is_same::value) + if (std::is_same::value) { tmp_space1.resize(nkb * n_npwx + nkb3 * n_npwx); becp1_cpu = tmp_space1.data(); becp2_cpu = becp1_cpu + nkb * n_npwx; syncmem_complex_d2h_op()(becp1_cpu, becp1_, nkb * n_npwx); syncmem_complex_d2h_op()(becp2_cpu, becp2_, nkb3 * n_npwx); - + tmp_space2.resize(nkb * n_npwx + nkb3 * n_npwx, 0.0); ps1_cpu = tmp_space2.data(); ps2_cpu = ps1_cpu + nkb * n_npwx; @@ -246,7 +246,7 @@ void Velocity::act(const psi::Psi, Device>* ModuleBase::WARNING_QUIT("Velocity", "Velocity operator does not support the non-collinear case yet!"); } - if(std::is_same::value) + if (std::is_same::value) { syncmem_complex_h2d_op()(ps1_, ps1_cpu, nkb * n_npwx); syncmem_complex_h2d_op()(ps2_, ps2_cpu, nkb3 * n_npwx); diff --git a/source/module_hamilt_pw/hamilt_pwdft/parallel_grid.cpp b/source/module_hamilt_pw/hamilt_pwdft/parallel_grid.cpp index 6d0eac2c59..81c41cf4a3 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/parallel_grid.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/parallel_grid.cpp @@ -1,7 +1,7 @@ #include "parallel_grid.h" -#include "module_base/parallel_global.h" #include "module_parameter/parameter.h" +#include "source_base/parallel_global.h" Parallel_Grid::Parallel_Grid() { this->allocate = false; diff --git a/source/module_hamilt_pw/hamilt_pwdft/parallel_grid.h b/source/module_hamilt_pw/hamilt_pwdft/parallel_grid.h index 748a612cd0..78cce817a9 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/parallel_grid.h +++ b/source/module_hamilt_pw/hamilt_pwdft/parallel_grid.h @@ -1,34 +1,49 @@ #ifndef PARALLEL_GRID_H #define PARALLEL_GRID_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" class Parallel_Grid { - public: - - friend class Efield; - friend class Symmetry_rho; + public: + friend class Efield; + friend class Symmetry_rho; Parallel_Grid(); - Parallel_Grid(const int ncx_in, const int ncy_in, const int ncz_in, const int nczp_in, const int nrxx_in, const int nbz_in, const int bz_in) - :ncx(ncx_in), ncy(ncy_in), ncz(ncz_in), nczp(nczp_in), nrxx(nrxx_in), nbz(nbz_in), bz(bz_in), - ncxy(ncx_in* ncy_in), ncxyz(ncx_in* ncy_in* ncz_in) + Parallel_Grid(const int ncx_in, + const int ncy_in, + const int ncz_in, + const int nczp_in, + const int nrxx_in, + const int nbz_in, + const int bz_in) + : ncx(ncx_in), ncy(ncy_in), ncz(ncz_in), nczp(nczp_in), nrxx(nrxx_in), nbz(nbz_in), bz(bz_in), + ncxy(ncx_in * ncy_in), ncxyz(ncx_in * ncy_in * ncz_in) { assert(ncx > 0 && ncy > 0 && ncz > 0 && nczp >= 0 && nrxx > 0 && nbz > 0 && bz > 0); } ~Parallel_Grid(); - - void init(const int &ncx, const int &ncy, const int &ncz, - const int &nczp, const int &nrxx, const int &nbz, const int &bz); - void init_final_scf(const int &ncx, const int &ncy, const int &ncz, - const int &nczp, const int &nrxx, const int &nbz, const int &bz); //LiuXh add 20180606 + void init(const int& ncx, + const int& ncy, + const int& ncz, + const int& nczp, + const int& nrxx, + const int& nbz, + const int& bz); + + void init_final_scf(const int& ncx, + const int& ncy, + const int& ncz, + const int& nczp, + const int& nrxx, + const int& nbz, + const int& bz); // LiuXh add 20180606 -#ifdef __MPI +#ifdef __MPI void zpiece_to_all(double* zpiece, const int& iz, double* rho) const; - void zpiece_to_stogroup(double* zpiece, const int& iz, double* rho) const; //qainrui add for sto-dft 2021-7-21 + void zpiece_to_stogroup(double* zpiece, const int& iz, double* rho) const; // qainrui add for sto-dft 2021-7-21 /// @brief Broadcast data from root to all processors. The index order is [x][y][z]. void bcast(const double* const data_global, double* data_local, const int& rank) const; @@ -40,28 +55,27 @@ class Parallel_Grid const int& ny = this->ncy; const int& nz = this->ncz; - private: + private: + void z_distribution(void); - void z_distribution(void); - - int *nproc_in_pool = nullptr; - int **numz = nullptr; - int **startz = nullptr; - int **whichpro = nullptr; - int **whichpro_loc = nullptr; + int* nproc_in_pool = nullptr; + int** numz = nullptr; + int** startz = nullptr; + int** whichpro = nullptr; + int** whichpro_loc = nullptr; - int ncx=0; - int ncy=0; - int ncz=0; - int ncxy=0; - int ncxyz=0; - int nczp=0; // number of z-layers (xy-planes) in each processor - int nrxx=0; - int nbz=0; - int bz=0; + int ncx = 0; + int ncy = 0; + int ncz = 0; + int ncxy = 0; + int ncxyz = 0; + int nczp = 0; // number of z-layers (xy-planes) in each processor + int nrxx = 0; + int nbz = 0; + int bz = 0; bool allocate = false; - bool allocate_final_scf = false; //LiuXh add 20180619 + bool allocate_final_scf = false; // LiuXh add 20180619 }; #endif diff --git a/source/module_hamilt_pw/hamilt_pwdft/radial_proj.cpp b/source/module_hamilt_pw/hamilt_pwdft/radial_proj.cpp index 88cfeeadee..a564e672d0 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/radial_proj.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/radial_proj.cpp @@ -1,14 +1,16 @@ -#include +#include "module_hamilt_pw/hamilt_pwdft/radial_proj.h" + +#include "source_base/constants.h" +#include "source_base/math_ylmreal.h" +#include "source_base/matrix.h" +#include "source_base/spherical_bessel_transformer.h" +#include "source_base/timer.h" + #include #include -#include #include -#include "module_hamilt_pw/hamilt_pwdft/radial_proj.h" -#include "module_base/constants.h" -#include "module_base/matrix.h" -#include "module_base/math_ylmreal.h" -#include "module_base/spherical_bessel_transformer.h" -#include "module_base/timer.h" +#include +#include void RadialProjection::RadialProjector::_build_backward_map(const std::vector>& it2iproj, const std::vector& iproj2l, @@ -18,13 +20,13 @@ void RadialProjection::RadialProjector::_build_backward_map(const std::vector>& it2ia, - const std::vector>& it2iproj, - const std::vector& iproj2l, - std::map, int>& itiaiprojm2irow) +void RadialProjection::RadialProjector::_build_forward_map( + const std::vector>& it2ia, + const std::vector>& it2iproj, + const std::vector& iproj2l, + std::map, int>& itiaiprojm2irow) { const int ntype = it2ia.size(); int irow = 0; - for(int it = 0; it < ntype; it++) + for (int it = 0; it < ntype; it++) { const int nproj = it2iproj[it].size(); - for(auto& ia: it2ia[it]) // the index is from UnitCell, so it allows the case ia is not continuous + for (auto& ia: it2ia[it]) // the index is from UnitCell, so it allows the case ia is not continuous { - for(int iproj = 0; iproj < nproj; iproj++) + for (int iproj = 0; iproj < nproj; iproj++) { const int l = iproj2l[it2iproj[it][iproj]]; // what is the iproj of the i-th projector of it atomtype? - for(int m = -l; m <= l; m++) + for (int m = -l; m <= l; m++) { itiaiprojm2irow[std::make_tuple(it, ia, iproj, m)] = irow; irow++; @@ -88,22 +91,25 @@ void RadialProjection::RadialProjector::_build_sbt_tab(const int nr, assert(nrad == l.size()); std::vector qgrid(nq); std::iota(qgrid.begin(), qgrid.end(), 0); - std::transform(qgrid.begin(), qgrid.end(), qgrid.begin(), [dq](const double& q){return q*dq;}); + std::transform(qgrid.begin(), qgrid.end(), qgrid.begin(), [dq](const double& q) { return q * dq; }); - if(cubspl_.get()) { cubspl_.reset(); } // release the old one if it is not the first time - cubspl_ = std::unique_ptr(new ModuleBase::CubicSpline(nq, // int - qgrid.data())); // double* + if (cubspl_.get()) + { + cubspl_.reset(); + } // release the old one if it is not the first time + cubspl_ = std::unique_ptr(new ModuleBase::CubicSpline(nq, // int + qgrid.data())); // double* cubspl_->reserve(nrad); ModuleBase::SphericalBesselTransformer sbt_(true); // bool: enable cache std::vector _temp(nq); // the SphericalBesselTransformer's result is multiplied by one extra factor sqrt(2/pi), should remove it - // see module_base/spherical_bessel_transformer.h and module_base/spherical_bessel_transformer.cpp:328 - const double pref = std::sqrt(2.0/std::acos(-1.0)); - for(int i = 0; i < nrad; i++) + // see source_base/spherical_bessel_transformer.h and source_base/spherical_bessel_transformer.cpp:328 + const double pref = std::sqrt(2.0 / std::acos(-1.0)); + for (int i = 0; i < nrad; i++) { sbt_.direct(l[i], nr, r, radials[i], nq, qgrid.data(), _temp.data()); - std::for_each(_temp.begin(), _temp.end(), [pref](double& x){x = x/pref;}); + std::for_each(_temp.begin(), _temp.end(), [pref](double& x) { x = x / pref; }); cubspl_->add(_temp.data()); } ModuleBase::timer::tick("RadialProjection", "cubspl_tabulate_vq_each_radial"); @@ -118,9 +124,15 @@ void RadialProjection::RadialProjector::_build_sbt_tab(const std::vector ModuleBase::timer::tick("RadialProjection", "cubspl_tabulate_vq_each_radial"); const int nr = r.size(); const int nrad = radials.size(); - for(int i = 0; i < nrad; i++) { assert(radials[i].size() == nr); } + for (int i = 0; i < nrad; i++) + { + assert(radials[i].size() == nr); + } std::vector radptrs(radials.size()); - for(int i = 0; i < radials.size(); i++) { radptrs[i] = const_cast(radials[i].data()); } + for (int i = 0; i < radials.size(); i++) + { + radptrs[i] = const_cast(radials[i].data()); + } ModuleBase::timer::tick("RadialProjection", "cubspl_tabulate_vq_each_radial"); _build_sbt_tab(nr, r.data(), radptrs, l, nq, dq); } @@ -129,27 +141,27 @@ void RadialProjection::RadialProjector::_build_sbt_tab(const std::vector& n const std::vector& r, const std::vector>& radials, const std::vector& l, - const int nq, //< GlobalV::DQ - const double& dq, //< GlobalV::NQX + const int nq, //< GlobalV::DQ + const double& dq, //< GlobalV::NQX const double& omega, - const int npol, // for nspin 4 + const int npol, // for nspin 4 ModuleBase::realArray& tab, - ModuleBase::matrix& nhtol) // output table + ModuleBase::matrix& nhtol) // output table { int nprojmax = *std::max_element(nproj.begin(), nproj.end()); const int ntype = nproj.size(); - tab.create(ntype, nprojmax*npol, nq); + tab.create(ntype, nprojmax * npol, nq); tab.zero_out(); std::vector qgrid(nq); std::iota(qgrid.begin(), qgrid.end(), 0); - std::transform(qgrid.begin(), qgrid.end(), qgrid.begin(), [dq](const double& q){return q*dq;}); + std::transform(qgrid.begin(), qgrid.end(), qgrid.begin(), [dq](const double& q) { return q * dq; }); ModuleBase::SphericalBesselTransformer sbt_(true); // bool: enable cache int iproj = 0; int nchmax = 0; - const double pref = 4*M_PI/std::sqrt(omega) / std::sqrt(2.0/std::acos(-1.0)); + const double pref = 4 * M_PI / std::sqrt(omega) / std::sqrt(2.0 / std::acos(-1.0)); for (int it = 0; it < ntype; it++) { int nch = 0; @@ -157,22 +169,22 @@ void RadialProjection::RadialProjector::_build_sbt_tab(const std::vector& n for (int ip = 0; ip < nproj_it; ip++) { const int l_ = l[iproj]; - nch += 2*l_ + 1; + nch += 2 * l_ + 1; std::vector _temp(nq); sbt_.direct(l_, r.size(), r.data(), radials[iproj].data(), nq, qgrid.data(), _temp.data()); - std::for_each(_temp.begin(), _temp.end(), [pref](double& x){x = x*pref;}); + std::for_each(_temp.begin(), _temp.end(), [pref](double& x) { x = x * pref; }); for (int iq = 0; iq < nq; iq++) { tab(it, ip, iq) = _temp[iq]; - //std::cout << tab(it, ip, iq) << " "; + // std::cout << tab(it, ip, iq) << " "; } iproj++; } nchmax = std::max(nchmax, nch); } - //std::cout << std::endl; - //ModuleBase::WARNING_QUIT("RadialProjection", "The following code is not implemented yet."); - + // std::cout << std::endl; + // ModuleBase::WARNING_QUIT("RadialProjection", "The following code is not implemented yet."); + nhtol.create(ntype, nchmax); nhtol.zero_out(); iproj = 0; @@ -202,36 +214,42 @@ void RadialProjection::RadialProjector::sbtft(const std::vector qnorm(npw); - std::transform(qs.begin(), qs.end(), qnorm.begin(), [tpiba](const ModuleBase::Vector3& q){return tpiba*q.norm();}); - + std::transform(qs.begin(), qs.end(), qnorm.begin(), [tpiba](const ModuleBase::Vector3& q) { + return tpiba * q.norm(); + }); + std::vector Jlfq(npw); int iproj = 0; - for(int i = 0; i < nrad; i++) + for (int i = 0; i < nrad; i++) { const int l = l_[i]; // here is bug-prone // we define l as and r as . The former is int{p(r)exp(iqr)} and the latter is int{p(r)exp(-iqr)} // , in which we have use G+k=q notation. So once do Ylm expansion on exp(iqr), will get a pure imaginary // prefactor i^l. - std::complex pref = (type == 'l')? std::pow(ModuleBase::IMAG_UNIT, l) : std::pow(ModuleBase::NEG_IMAG_UNIT, l); - pref = pref * ModuleBase::FOUR_PI/std::sqrt(omega); + std::complex pref + = (type == 'l') ? std::pow(ModuleBase::IMAG_UNIT, l) : std::pow(ModuleBase::NEG_IMAG_UNIT, l); + pref = pref * ModuleBase::FOUR_PI / std::sqrt(omega); cubspl_->eval(npw, qnorm.data(), Jlfq.data(), nullptr, nullptr, i); - for(int m = -l; m <= l; m++) + for (int m = -l; m <= l; m++) { - for(int iq = 0; iq < npw; iq++) + for (int iq = 0; iq < npw; iq++) { - out[iproj*npw+iq] = pref * Jlfq[iq] * ylm_(l*l + l + m, iq); + out[iproj * npw + iq] = pref * Jlfq[iq] * ylm_(l * l + l + m, iq); } iproj++; } @@ -296,7 +314,7 @@ void RadialProjection::_mask_func(std::vector& mask) src += " 0.69250769E-04 0.55873673E-04 0.44461100E-04 0.34793983E-04"; src += " 0.26671449E-04 0.19909778E-04 0.14341381E-04 0.98138215E-05"; std::stringstream ss(src); - for(int i = 0; i < mask.size(); i++) + for (int i = 0; i < mask.size(); i++) { ss >> mask[i]; } @@ -313,8 +331,8 @@ void RadialProjection::_do_mask_on_radial(const int nr1, } /** - * Additional-bidirectional mapping for the projector. - * + * Additional-bidirectional mapping for the projector. + * * These two methods are commented out because of minimal-implementation consideration. */ diff --git a/source/module_hamilt_pw/hamilt_pwdft/radial_proj.h b/source/module_hamilt_pw/hamilt_pwdft/radial_proj.h index f1e35509e7..c63c076f0b 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/radial_proj.h +++ b/source/module_hamilt_pw/hamilt_pwdft/radial_proj.h @@ -3,7 +3,7 @@ /** * @file radial_projection.h - * + * * project any atom-centered function that has seperatable radial and angular parts * or any function can expanded with spherical harmonics onto the planewave basis, * although the latter will be somewhat cumbersome: @@ -11,245 +11,248 @@ * F(q) = sum_{l,m} i^l * 4*pi/sqrt(omega) * Jl[f_{lm}](q) * Ylm(q) */ +#include "module_basis/module_pw/pw_basis_k.h" +#include "module_cell/unitcell.h" +#include "module_psi/psi.h" +#include "source_base/cubic_spline.h" +#include "source_base/vector3.h" -#include "module_base/vector3.h" -#include "module_base/cubic_spline.h" -#include -#include +#include #include #include +#include #include -#include - -#include "module_cell/unitcell.h" -#include "module_psi/psi.h" -#include "module_basis/module_pw/pw_basis_k.h" +#include namespace RadialProjection { +/** + * @brief RadialProjector is for projecting a function who has seperatable radial + * and angular parts: + * f(r) = f(|r|) * Ylm(theta, phi) + * onto planewave basis. + * + * Usage: + * + * 1. classical way: reciprocal space integration + * ```c++ + * RadialProjector rp(false); + * const int nq = 1000; + * const double dq = 0.01; + * // given `r` is the real space grid and `radials` is the collection of radial + * // functions, `l` is the angular momentum quantum number for each radial function + * // then the interpolation table can be rapidly built by calling SphericalBesselTransformer + * // and CubicSpline modules. + * rp._build_sbt_tab(r, radials, l, nq, dq); + * // then the set of q will used to calculate the Fourier transform + * rp.sbtft(qs, out, 'r', omega, tpiba); + * // in `out`, there will be the Fourier transform of the radial functions organized + * // in the same way as the input `radials` and `qs`, as row and column respectively. + * // but one should note for each radials, there are 2*l+1 components now instead of + * // just one. + * + * // one may find it is not easy to maintain such a large table, so here, also provides + * // a tool function to map the 2D index to 1D index, and vice versa. With the angular + * // momentum used in function _build_sbt_tab, one can easily build a map from + * // [irad][im] to 1D index, and use two functions _irad_m_to_idx and _idx_to_irad_m + * // to convert between 1D index and [irad][m] (instead of im!). + * std::vector> map_; + * rp._build_sbtft_map(l, map_); + * ``` + * + * 2. SBFFT: small box fast-fourier-transform (not implemented yet) + */ +class RadialProjector +{ + public: /** - * @brief RadialProjector is for projecting a function who has seperatable radial - * and angular parts: - * f(r) = f(|r|) * Ylm(theta, phi) - * onto planewave basis. - * - * Usage: - * - * 1. classical way: reciprocal space integration + * Notation of following two functions: + * + * Given all the projectors are listed in a series, so the `iproj` is the index goes across + * all atomtypes, which means if for the first type, the iproj goes from 0 to 4, then the + * second atomtypes the iproj will start from 5, and so on... + * However, there is also another convention, like numerical atomic orbitals, developer always + * use "l" to index orbitals, here, in all output map, the `iproj` will start from 0, which + * means in output the `iproj` is local index. + * ----------------------------------------------------------------------------------------- + * First, the following lists should be prepared as early as possible, + * + * it2iproj: for given it, the index of atom type, return the list of index of projectors. + * + * iproj2l: for given iproj, the index of projectors, return the l of this projector. More + * simply explaning, it is just the list of angular momentum of projectors. + * + * it2ia: just a list that stolen information from UnitCell, for given it, the index of atom + * within the range of it. So this list is different from the it2iproj, iproj is the index + * across type but ia is the index within the type. So for each it2ia[it], the ia, in principle + * , always/can start from 0. + * + * One may question that does the indexing support one atom type with multiple projectors? The + * answer is YES. Combining the it2iproj and it2ia, one can even support PART of atoms of one + * type has multiple projectors. + * ----------------------------------------------------------------------------------------- + * Then the returned lists, + * + * irow2it: for given `irow`, the index of row, return the `it`: the index of atom type. + * + * irow2ia: for given `irow`, the index of row, return the `ia`: the index of atom within the range + * of `it`. + * + * irow2iproj: for given `irow`, the index of row, return the `iproj`, the index of projectors, + * note that this `iproj` is the local index. + * + * irow2m: for given irow, the index of row, return the m, the magnetic quantum number of this + * projector. + * + * One may complain that cannot get `l` from the `irow`, but the truth is, not exactly. One can + * get the `l` starting from `irow` by: * ```c++ - * RadialProjector rp(false); - * const int nq = 1000; - * const double dq = 0.01; - * // given `r` is the real space grid and `radials` is the collection of radial - * // functions, `l` is the angular momentum quantum number for each radial function - * // then the interpolation table can be rapidly built by calling SphericalBesselTransformer - * // and CubicSpline modules. - * rp._build_sbt_tab(r, radials, l, nq, dq); - * // then the set of q will used to calculate the Fourier transform - * rp.sbtft(qs, out, 'r', omega, tpiba); - * // in `out`, there will be the Fourier transform of the radial functions organized - * // in the same way as the input `radials` and `qs`, as row and column respectively. - * // but one should note for each radials, there are 2*l+1 components now instead of - * // just one. - * - * // one may find it is not easy to maintain such a large table, so here, also provides - * // a tool function to map the 2D index to 1D index, and vice versa. With the angular - * // momentum used in function _build_sbt_tab, one can easily build a map from - * // [irad][im] to 1D index, and use two functions _irad_m_to_idx and _idx_to_irad_m - * // to convert between 1D index and [irad][m] (instead of im!). - * std::vector> map_; - * rp._build_sbtft_map(l, map_); + * const int iproj = irow2iproj[irow]; + * const int it = irow2it[irow]; + * const int iproj_g = it2iproj[it][iproj]; + * const int l = iproj2l[iproj_g]; * ``` - * - * 2. SBFFT: small box fast-fourier-transform (not implemented yet) */ - class RadialProjector - { - public: - /** - * Notation of following two functions: - * - * Given all the projectors are listed in a series, so the `iproj` is the index goes across - * all atomtypes, which means if for the first type, the iproj goes from 0 to 4, then the - * second atomtypes the iproj will start from 5, and so on... - * However, there is also another convention, like numerical atomic orbitals, developer always - * use "l" to index orbitals, here, in all output map, the `iproj` will start from 0, which - * means in output the `iproj` is local index. - * ----------------------------------------------------------------------------------------- - * First, the following lists should be prepared as early as possible, - * - * it2iproj: for given it, the index of atom type, return the list of index of projectors. - * - * iproj2l: for given iproj, the index of projectors, return the l of this projector. More - * simply explaning, it is just the list of angular momentum of projectors. - * - * it2ia: just a list that stolen information from UnitCell, for given it, the index of atom - * within the range of it. So this list is different from the it2iproj, iproj is the index - * across type but ia is the index within the type. So for each it2ia[it], the ia, in principle - * , always/can start from 0. - * - * One may question that does the indexing support one atom type with multiple projectors? The - * answer is YES. Combining the it2iproj and it2ia, one can even support PART of atoms of one - * type has multiple projectors. - * ----------------------------------------------------------------------------------------- - * Then the returned lists, - * - * irow2it: for given `irow`, the index of row, return the `it`: the index of atom type. - * - * irow2ia: for given `irow`, the index of row, return the `ia`: the index of atom within the range - * of `it`. - * - * irow2iproj: for given `irow`, the index of row, return the `iproj`, the index of projectors, - * note that this `iproj` is the local index. - * - * irow2m: for given irow, the index of row, return the m, the magnetic quantum number of this - * projector. - * - * One may complain that cannot get `l` from the `irow`, but the truth is, not exactly. One can - * get the `l` starting from `irow` by: - * ```c++ - * const int iproj = irow2iproj[irow]; - * const int it = irow2it[irow]; - * const int iproj_g = it2iproj[it][iproj]; - * const int l = iproj2l[iproj_g]; - * ``` - */ - - static void _build_backward_map(const std::vector>& it2iproj, - const std::vector& iproj2l, - std::vector& irow2it, - std::vector& irow2iproj, - std::vector& irow2m); - static void _build_forward_map(const std::vector>& it2ia, - const std::vector>& it2iproj, - const std::vector& iproj2l, - std::map, int>& itiaiprojm2irow); - public: - /** - * @brief Construct a new Radial Projector object - * - * @param realspace if perform integration in real space rather than reciprocal space - * , default is false - * - * @attention Currectly only reciprocal space method is implemented - */ - RadialProjector(const bool realspace = false) {} - ~RadialProjector() {} - - // it is more feasible to build interpolation table. this function will tabulate - // for those functions. This function will write the in-build tab_, to place the - // values of Jl[f](q) for each q and l. - // Here I provide two versions of tabulate, one for the case may be capable to - // avoid the memory copy operation, and the other one is for the case of - // std::vector and std::vector>. - /** - * @brief make a interpolation table for the Spherical Bessel Transform of f(r) - * - * @param nr number of grid points, shared by all radial functions - * @param r radial grids, shared by all radial functions - * @param radials radial functions, each element is a radial function - * @param l angular momentum quantum number for each radial function - * @param nq number of q-points - * @param dq space between q-points - */ - void _build_sbt_tab(const int nr, - const double* r, - const std::vector& radials, - const std::vector& l, - const int nq, //< GlobalV::DQ - const double& dq); //< GlobalV::NQX - void _build_sbt_tab(const std::vector& r, - const std::vector>& radials, - const std::vector& l, - const int nq, //< GlobalV::DQ - const double& dq); //< GlobalV::NQX - // compatibility concern: for FS_Nonlocal_tools. Will not call sbtft so need omega - void _build_sbt_tab(const std::vector& nproj, - const std::vector& r, - const std::vector>& radials, - const std::vector& l, - const int nq, //< GlobalV::DQ - const double& dq, //< GlobalV::NQX - const double& omega, - const int npol, - ModuleBase::realArray& tab, - ModuleBase::matrix& nhtol); - /** - * @brief perform analytical version of the Fourier transform: - * F(q) = int(f(r)*exp(-iq.r) d^3r) - * = 4*pi/sqrt(omega) * (-i)^l * Jl[f](q) * Ylm(q) - * , where Ylm(q) is real spherical harmonic function, and Jl[f](q) is - * the Spherial Bessel Transform of f(r): - * Jl[f](q) = int(f(r)*j_l(q*r)*r^2 dr) - * , where j_l(q*r) is the spherical Bessel function of the first kind. - * . If use another notation, F(q) = , this is denoted as type - * "r" for ket |>, and "l" for bra <|. - */ - - void sbtft(const std::vector>& qs, - std::vector>& out, - const char type = 'r', // 'r' for ket |>, 'l' for bra <| - const double& omega = 1.0, - const double& tpiba = 1.0); // 'n' for no gradient, 'x', 'y', 'z' for gradient in x, y, z direction - - void sbfft(); // interface for SBFFT + static void _build_backward_map(const std::vector>& it2iproj, + const std::vector& iproj2l, + std::vector& irow2it, + std::vector& irow2iproj, + std::vector& irow2m); + static void _build_forward_map(const std::vector>& it2ia, + const std::vector>& it2iproj, + const std::vector& iproj2l, + std::map, int>& itiaiprojm2irow); - private: - std::unique_ptr cubspl_; - std::vector l_; - }; - - /** ==================================================================================== - * - * Small box Fast-Fourier-Transform (SBFFT) - * - * ==================================================================================== - * Small box FFT is a technique for quickly intergrating real-space localized functions - * , or say perform FFT in a small box defined by a "mask function" with relatively low - * time complexity, will be out-performing in system where number of atoms are larger - * than ten. For details please refer to the work: - * Mask-function real-space implementations of nonlocal pseudopotentials - * by Wang, L.-W., PHYSICAL REVIEW B, VOLUME64,201107(R) + public: + /** + * @brief Construct a new Radial Projector object * - * Following are the brief technical review of this technique. Given the function to - * be transformed w(r): - * 1. Generate the q-grid in range |q| < 2qmax - qc, in which the qmax is the one - * defined by ecutrho, and qc is the cutoff defined by ecutwfc. - * 2. With mask function m(r) generated, make division of w(r) by m(r). The real space - * cutoff (or the radius that w(r) vanishes), r0, must be smaller than the cutoff - * of m(r) to ensure the convergence of the division. Denote wm(r) = w(r)/m(r). - * 3. Make FT on wm(r) to get wm(q) - * 4. Make inverse FT with only the q-grid in range |q| < 2qmax - qc to get the - * wm'(r). - * 5. Perform real-space integration on function w'(r)*m(r)*exp(iqr). + * @param realspace if perform integration in real space rather than reciprocal space + * , default is false + * + * @attention Currectly only reciprocal space method is implemented */ + RadialProjector(const bool realspace = false) + { + } + ~RadialProjector() + { + } + // it is more feasible to build interpolation table. this function will tabulate + // for those functions. This function will write the in-build tab_, to place the + // values of Jl[f](q) for each q and l. + // Here I provide two versions of tabulate, one for the case may be capable to + // avoid the memory copy operation, and the other one is for the case of + // std::vector and std::vector>. /** - * @brief get the mask function for SBFFT - * - * @param mask mask function + * @brief make a interpolation table for the Spherical Bessel Transform of f(r) + * + * @param nr number of grid points, shared by all radial functions + * @param r radial grids, shared by all radial functions + * @param radials radial functions, each element is a radial function + * @param l angular momentum quantum number for each radial function + * @param nq number of q-points + * @param dq space between q-points */ - void _mask_func(std::vector& mask); - + void _build_sbt_tab(const int nr, + const double* r, + const std::vector& radials, + const std::vector& l, + const int nq, //< GlobalV::DQ + const double& dq); //< GlobalV::NQX + void _build_sbt_tab(const std::vector& r, + const std::vector>& radials, + const std::vector& l, + const int nq, //< GlobalV::DQ + const double& dq); //< GlobalV::NQX + // compatibility concern: for FS_Nonlocal_tools. Will not call sbtft so need omega + void _build_sbt_tab(const std::vector& nproj, + const std::vector& r, + const std::vector>& radials, + const std::vector& l, + const int nq, //< GlobalV::DQ + const double& dq, //< GlobalV::NQX + const double& omega, + const int npol, + ModuleBase::realArray& tab, + ModuleBase::matrix& nhtol); /** - * @brief do operation w(r)/m(r) on a radial function. The cutoff radius of w(r) - * is smaller than the cutoff radius of m(r). The m(r) has been rescaled so that - * r ranges from 0 to 1. - * - * @param nr1 number of grid points of function to operate - * @param r grid points of function to operate - * @param in function to operate - * @param nr2 number of grid points of mask function - * @param mask mask function - * @param out output value + * @brief perform analytical version of the Fourier transform: + * F(q) = int(f(r)*exp(-iq.r) d^3r) + * = 4*pi/sqrt(omega) * (-i)^l * Jl[f](q) * Ylm(q) + * , where Ylm(q) is real spherical harmonic function, and Jl[f](q) is + * the Spherial Bessel Transform of f(r): + * Jl[f](q) = int(f(r)*j_l(q*r)*r^2 dr) + * , where j_l(q*r) is the spherical Bessel function of the first kind. + * . If use another notation, F(q) = , this is denoted as type + * "r" for ket |>, and "l" for bra <|. */ - void _do_mask_on_radial(const int nr1, - const double* r, - const double* in, - const int nr2, - const double* mask, - double* out); -} + + void sbtft(const std::vector>& qs, + std::vector>& out, + const char type = 'r', // 'r' for ket |>, 'l' for bra <| + const double& omega = 1.0, + const double& tpiba = 1.0); // 'n' for no gradient, 'x', 'y', 'z' for gradient in x, y, z direction + + void sbfft(); // interface for SBFFT + + private: + std::unique_ptr cubspl_; + std::vector l_; +}; + +/** ==================================================================================== + * + * Small box Fast-Fourier-Transform (SBFFT) + * + * ==================================================================================== + * Small box FFT is a technique for quickly intergrating real-space localized functions + * , or say perform FFT in a small box defined by a "mask function" with relatively low + * time complexity, will be out-performing in system where number of atoms are larger + * than ten. For details please refer to the work: + * Mask-function real-space implementations of nonlocal pseudopotentials + * by Wang, L.-W., PHYSICAL REVIEW B, VOLUME64,201107(R) + * + * Following are the brief technical review of this technique. Given the function to + * be transformed w(r): + * 1. Generate the q-grid in range |q| < 2qmax - qc, in which the qmax is the one + * defined by ecutrho, and qc is the cutoff defined by ecutwfc. + * 2. With mask function m(r) generated, make division of w(r) by m(r). The real space + * cutoff (or the radius that w(r) vanishes), r0, must be smaller than the cutoff + * of m(r) to ensure the convergence of the division. Denote wm(r) = w(r)/m(r). + * 3. Make FT on wm(r) to get wm(q) + * 4. Make inverse FT with only the q-grid in range |q| < 2qmax - qc to get the + * wm'(r). + * 5. Perform real-space integration on function w'(r)*m(r)*exp(iqr). + */ + +/** + * @brief get the mask function for SBFFT + * + * @param mask mask function + */ +void _mask_func(std::vector& mask); + +/** + * @brief do operation w(r)/m(r) on a radial function. The cutoff radius of w(r) + * is smaller than the cutoff radius of m(r). The m(r) has been rescaled so that + * r ranges from 0 to 1. + * + * @param nr1 number of grid points of function to operate + * @param r grid points of function to operate + * @param in function to operate + * @param nr2 number of grid points of mask function + * @param mask mask function + * @param out output value + */ +void _do_mask_on_radial(const int nr1, + const double* r, + const double* in, + const int nr2, + const double* mask, + double* out); +} // namespace RadialProjection #endif // RADIAL_PROJECTION_H diff --git a/source/module_hamilt_pw/hamilt_pwdft/soc.h b/source/module_hamilt_pw/hamilt_pwdft/soc.h index f30bc94889..5ba9504ed9 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/soc.h +++ b/source/module_hamilt_pw/hamilt_pwdft/soc.h @@ -1,8 +1,8 @@ #ifndef SOC_H #define SOC_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" class Fcoef { @@ -15,18 +15,18 @@ class Fcoef int ind4 = 1; int ind5 = 1; - std::complex *p = nullptr; + std::complex* p = nullptr; - inline std::complex &operator()(const int &i1, const int &i2, const int &i3, const int &i4, const int &i5) + inline std::complex& operator()(const int& i1, const int& i2, const int& i3, const int& i4, const int& i5) { return p[ind2 * ind3 * ind4 * ind5 * i1 + ind3 * ind4 * ind5 * i2 + ind4 * ind5 * i3 + ind5 * i4 + i5]; } - inline const std::complex &operator()(const int &i1, - const int &i2, - const int &i3, - const int &i4, - const int &i5) const + inline const std::complex& operator()(const int& i1, + const int& i2, + const int& i3, + const int& i4, + const int& i5) const { return p[ind2 * ind3 * ind4 * ind5 * i1 + ind3 * ind4 * ind5 * i2 + ind4 * ind5 * i3 + ind5 * i4 + i5]; } @@ -57,28 +57,28 @@ class Soc void rot_ylm(const int lmax); // std::complex **rotylm; - const std::complex &rotylm(const int &i1, const int &i2) const + const std::complex& rotylm(const int& i1, const int& i2) const { return p_rot[l2plus1_ * i1 + i2]; } Fcoef fcoef; - void set_fcoef(const int &l1, - const int &l2, - const int &is1, - const int &is2, - const int &m1, - const int &m2, - const double &j1, - const double &j2, - const int &it, - const int &ip1, - const int &ip2); + void set_fcoef(const int& l1, + const int& l2, + const int& is1, + const int& is2, + const int& m1, + const int& m2, + const double& j1, + const double& j2, + const int& it, + const int& ip1, + const int& ip2); // int npol; private: int l_max_ = -1; // maximum orbital index, must initialized before set_fcoef int l2plus1_ = -1; - std::complex *p_rot = nullptr; + std::complex* p_rot = nullptr; }; #endif diff --git a/source/module_hamilt_pw/hamilt_pwdft/stress_func.h b/source/module_hamilt_pw/hamilt_pwdft/stress_func.h index 20f6a91937..e63674d6df 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/stress_func.h +++ b/source/module_hamilt_pw/hamilt_pwdft/stress_func.h @@ -1,21 +1,21 @@ #ifndef STRESS_FUNC_H #define STRESS_FUNC_H -#include "module_base/complexmatrix.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/matrix.h" -#include "module_base/parallel_reduce.h" -#include "module_base/realarray.h" -#include "module_base/vector3.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/klist.h" #include "module_elecstate/module_charge/charge.h" #include "module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/stress_op.h" #include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" -#include "module_base/kernels/math_kernel_op.h" #include "module_psi/psi.h" +#include "source_base/complexmatrix.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/matrix.h" +#include "source_base/parallel_reduce.h" +#include "source_base/realarray.h" +#include "source_base/vector3.h" //------------------------------------------------------------------- // mohan reconstruction note: 2021-02-07 @@ -117,7 +117,7 @@ class Stress_Func UnitCell& ucell, const Structure_Factor* p_sf, const bool is_pw, - const bool *numeric, + const bool* numeric, const Charge* const chr); // nonlinear core correction stress in PW or LCAO basis void deriv_drhoc(const bool& numeric, @@ -130,7 +130,7 @@ class Stress_Func FPTYPE* drhocg, ModulePW::PW_Basis* rho_basis, int type); // used in nonlinear core correction stress - + // 6) the stress from the exchange-correlation functional term void stress_gga(const UnitCell& ucell, ModuleBase::matrix& sigma, @@ -240,6 +240,7 @@ class Stress_Func Device* ctx = {}; base_device::DEVICE_CPU* cpu_ctx = {}; base_device::AbacusDevice_t device = {}; + private: using gemm_op = ModuleBase::gemm_op, Device>; using cal_stress_nl_op = hamilt::cal_stress_nl_op; diff --git a/source/module_hamilt_pw/hamilt_pwdft/stress_func_cc.cpp b/source/module_hamilt_pw/hamilt_pwdft/stress_func_cc.cpp index 32d5c2339d..fe98033769 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/stress_func_cc.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/stress_func_cc.cpp @@ -1,72 +1,74 @@ -#include "stress_func.h" +#include "module_elecstate/cal_ux.h" #include "module_hamilt_general/module_xc/xc_functional.h" -#include "module_parameter/parameter.h" -#include "module_base/math_integral.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_elecstate/cal_ux.h" +#include "module_parameter/parameter.h" +#include "source_base/math_integral.h" +#include "source_base/timer.h" +#include "stress_func.h" #ifdef USE_LIBXC #include "module_hamilt_general/module_xc/xc_functional_libxc.h" #endif - -//NLCC term, need to be tested +// NLCC term, need to be tested template void Stress_Func::stress_cc(ModuleBase::matrix& sigma, ModulePW::PW_Basis* rho_basis, - UnitCell& ucell, + UnitCell& ucell, const Structure_Factor* p_sf, const bool is_pw, - const bool *numeric, + const bool* numeric, const Charge* const chr) { - ModuleBase::TITLE("Stress","stress_cc"); - ModuleBase::timer::tick("Stress","stress_cc"); - - FPTYPE fact=1.0; + ModuleBase::TITLE("Stress", "stress_cc"); + ModuleBase::timer::tick("Stress", "stress_cc"); - if(is_pw&&PARAM.globalv.gamma_only_pw) - { - fact = 2.0; //is_pw:PW basis, gamma_only need to FPTYPE. - } + FPTYPE fact = 1.0; - FPTYPE sigmadiag; - FPTYPE* rhocg; + if (is_pw && PARAM.globalv.gamma_only_pw) + { + fact = 2.0; // is_pw:PW basis, gamma_only need to FPTYPE. + } - int judge=0; - for(int nt=0;ntnrxx, ucell.omega, ucell.tpiba, chr); + const auto etxc_vtxc_v = XC_Functional_Libxc::v_xc_meta(XC_Functional::get_func_id(), + rho_basis->nrxx, + ucell.omega, + ucell.tpiba, + chr); // etxc = std::get<0>(etxc_vtxc_v); // vtxc = std::get<1>(etxc_vtxc_v); vxc = std::get<2>(etxc_vtxc_v); #else - ModuleBase::WARNING_QUIT("cal_force_cc","to use mGGA, compile with LIBXC"); + ModuleBase::WARNING_QUIT("cal_force_cc", "to use mGGA, compile with LIBXC"); #endif - } - else - { - elecstate::cal_ux(ucell); + } + else + { + elecstate::cal_ux(ucell); const auto etxc_vtxc_v = XC_Functional::v_xc(rho_basis->nrxx, chr, &ucell); // etxc = std::get<0>(etxc_vtxc_v); // may delete? // vtxc = std::get<1>(etxc_vtxc_v); // may delete? @@ -75,259 +77,270 @@ void Stress_Func::stress_cc(ModuleBase::matrix& sigma, std::complex* psic = new std::complex[rho_basis->nmaxgr]; - if(PARAM.inp.nspin==1||PARAM.inp.nspin==4) - { + if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 4) + { #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ir=0;irnrxx;ir++) - { - // psic[ir] = vxc(0,ir); - psic[ir] = std::complex(vxc(0, ir), 0.0); - } - } - else - { + for (int ir = 0; ir < rho_basis->nrxx; ir++) + { + // psic[ir] = vxc(0,ir); + psic[ir] = std::complex(vxc(0, ir), 0.0); + } + } + else + { #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for(int ir=0;irnrxx;ir++) - { - psic[ir] = 0.5 * (vxc(0, ir) + vxc(1, ir)); - } - } - - // to G space - rho_basis->real2recip(psic, psic); - - //psic cantains now Vxc(G) - rhocg= new FPTYPE [rho_basis->ngg]; + for (int ir = 0; ir < rho_basis->nrxx; ir++) + { + psic[ir] = 0.5 * (vxc(0, ir) + vxc(1, ir)); + } + } - sigmadiag=0.0; - for(int nt=0;ntderiv_drhoc( - numeric, - ucell.omega, - ucell.tpiba2, - ucell.atoms[nt].ncpp.msh, - ucell.atoms[nt].ncpp.r.data(), - ucell.atoms[nt].ncpp.rab.data(), - ucell.atoms[nt].ncpp.rho_atc.data(), - rhocg, - rho_basis, - 1); + // to G space + rho_basis->real2recip(psic, psic); + // psic cantains now Vxc(G) + rhocg = new FPTYPE[rho_basis->ngg]; - //diagonal term + sigmadiag = 0.0; + for (int nt = 0; nt < ucell.ntype; nt++) + { + if (ucell.atoms[nt].ncpp.nlcc) + { + // drhoc(); + this->deriv_drhoc(numeric, + ucell.omega, + ucell.tpiba2, + ucell.atoms[nt].ncpp.msh, + ucell.atoms[nt].ncpp.r.data(), + ucell.atoms[nt].ncpp.rab.data(), + ucell.atoms[nt].ncpp.rho_atc.data(), + rhocg, + rho_basis, + 1); + + // diagonal term #ifdef _OPENMP -#pragma omp parallel for reduction(+:sigmadiag) schedule(static, 256) +#pragma omp parallel for reduction(+ : sigmadiag) schedule(static, 256) #endif - for(int ig = 0;ig< rho_basis->npw;ig++) - { + for (int ig = 0; ig < rho_basis->npw; ig++) + { std::complex local_sigmadiag; - if (rho_basis->ig_gge0 == ig) { + if (rho_basis->ig_gge0 == ig) + { local_sigmadiag = conj(psic[ig]) * p_sf->strucFac(nt, ig) * rhocg[rho_basis->ig2igg[ig]]; - } else { + } + else + { local_sigmadiag = conj(psic[ig]) * p_sf->strucFac(nt, ig) * rhocg[rho_basis->ig2igg[ig]] * fact; -} + } sigmadiag += local_sigmadiag.real(); } - this->deriv_drhoc ( - numeric, - ucell.omega, - ucell.tpiba2, - ucell.atoms[nt].ncpp.msh, - ucell.atoms[nt].ncpp.r.data(), - ucell.atoms[nt].ncpp.rab.data(), - ucell.atoms[nt].ncpp.rho_atc.data(), - rhocg, - rho_basis, - 0); - // non diagonal term (g=0 contribution missing) + this->deriv_drhoc(numeric, + ucell.omega, + ucell.tpiba2, + ucell.atoms[nt].ncpp.msh, + ucell.atoms[nt].ncpp.r.data(), + ucell.atoms[nt].ncpp.rab.data(), + ucell.atoms[nt].ncpp.rho_atc.data(), + rhocg, + rho_basis, + 0); + // non diagonal term (g=0 contribution missing) #ifdef _OPENMP #pragma omp parallel -{ - ModuleBase::matrix local_sigma(3, 3); - #pragma omp for + { + ModuleBase::matrix local_sigma(3, 3); +#pragma omp for #else - ModuleBase::matrix& local_sigma = sigma; + ModuleBase::matrix& local_sigma = sigma; #endif - for(int ig = 0;ig< rho_basis->npw;ig++) - { - const FPTYPE norm_g = sqrt(rho_basis->gg[ig]); - if(norm_g < 1e-4) { continue; -} - for (int l = 0; l < 3; l++) - { - for (int m = 0;m< 3;m++) - { - const std::complex t - = conj(psic[ig]) * p_sf->strucFac(nt, ig) * rhocg[rho_basis->ig2igg[ig]] - * ucell.tpiba * rho_basis->gcar[ig][l] * rho_basis->gcar[ig][m] / norm_g * fact; - // sigmacc [l][ m] += t.real(); - local_sigma(l,m) += t.real(); - }//end m - }//end l - }//end ng + for (int ig = 0; ig < rho_basis->npw; ig++) + { + const FPTYPE norm_g = sqrt(rho_basis->gg[ig]); + if (norm_g < 1e-4) + { + continue; + } + for (int l = 0; l < 3; l++) + { + for (int m = 0; m < 3; m++) + { + const std::complex t + = conj(psic[ig]) * p_sf->strucFac(nt, ig) * rhocg[rho_basis->ig2igg[ig]] * ucell.tpiba + * rho_basis->gcar[ig][l] * rho_basis->gcar[ig][m] / norm_g * fact; + // sigmacc [l][ m] += t.real(); + local_sigma(l, m) += t.real(); + } // end m + } // end l + } // end ng #ifdef _OPENMP - #pragma omp critical(stress_cc_reduce) - { - for(int l=0;l<3;l++) - { - for(int m=0;m<3;m++) - { - sigma(l,m) += local_sigma(l,m); - } - } - } -} +#pragma omp critical(stress_cc_reduce) + { + for (int l = 0; l < 3; l++) + { + for (int m = 0; m < 3; m++) + { + sigma(l, m) += local_sigma(l, m); + } + } + } + } #endif - }//end if - }//end nt + } // end if + } // end nt - for(int l = 0;l< 3;l++) - { - sigma(l,l) += sigmadiag; - } - for(int l = 0;l< 3;l++) - { - for (int m = 0;m< 3;m++) - { + for (int l = 0; l < 3; l++) + { + sigma(l, l) += sigmadiag; + } + for (int l = 0; l < 3; l++) + { + for (int m = 0; m < 3; m++) + { Parallel_Reduce::reduce_pool(sigma(l, m)); - } - } + } + } - delete[] rhocg; - delete[] psic; + delete[] rhocg; + delete[] psic; - ModuleBase::timer::tick("Stress","stress_cc"); - return; + ModuleBase::timer::tick("Stress", "stress_cc"); + return; } - -template -void Stress_Func::deriv_drhoc -( - const bool &numeric, - const double& omega, - const double& tpiba2, - const int mesh, - const FPTYPE *r, - const FPTYPE *rab, - const FPTYPE *rhoc, - FPTYPE *drhocg, - ModulePW::PW_Basis* rho_basis, - int type -) +template +void Stress_Func::deriv_drhoc(const bool& numeric, + const double& omega, + const double& tpiba2, + const int mesh, + const FPTYPE* r, + const FPTYPE* rab, + const FPTYPE* rhoc, + FPTYPE* drhocg, + ModulePW::PW_Basis* rho_basis, + int type) { - int igl0=0; - double gx = 0.0; + int igl0 = 0; + double gx = 0.0; double rhocg1 = 0.0; - std::vector aux(mesh); - this->device = base_device::get_device_type(this->ctx); - - // the modulus of g for a given shell - // the fourier transform - // auxiliary memory for integration - std::vector gx_arr(rho_basis->ngg); - double *gx_arr_d = nullptr; - - // counter on radial mesh points - // counter on g shells - // lower limit for loop on ngl - - // - // G=0 term - // - if(type == 0) - { - if (rho_basis->gg_uniq[0] < 1.0e-8) - { - drhocg [0] = 0.0; - igl0 = 1; - } - else - { - igl0 = 0; - } - } - else - { - if (rho_basis->gg_uniq[0] < 1.0e-8) - { - for (int ir = 0;ir < mesh; ir++) - { - aux [ir] = r [ir] * r [ir] * rhoc [ir]; - } - ModuleBase::Integral::Simpson_Integral(mesh, aux.data(), rab, rhocg1); - drhocg [0] = ModuleBase::FOUR_PI * rhocg1 / omega; - igl0 = 1; - } - else - { - igl0 = 0; - } - } - + std::vector aux(mesh); + this->device = base_device::get_device_type(this->ctx); + + // the modulus of g for a given shell + // the fourier transform + // auxiliary memory for integration + std::vector gx_arr(rho_basis->ngg); + double* gx_arr_d = nullptr; + + // counter on radial mesh points + // counter on g shells + // lower limit for loop on ngl + + // + // G=0 term + // + if (type == 0) + { + if (rho_basis->gg_uniq[0] < 1.0e-8) + { + drhocg[0] = 0.0; + igl0 = 1; + } + else + { + igl0 = 0; + } + } + else + { + if (rho_basis->gg_uniq[0] < 1.0e-8) + { + for (int ir = 0; ir < mesh; ir++) + { + aux[ir] = r[ir] * r[ir] * rhoc[ir]; + } + ModuleBase::Integral::Simpson_Integral(mesh, aux.data(), rab, rhocg1); + drhocg[0] = ModuleBase::FOUR_PI * rhocg1 / omega; + igl0 = 1; + } + else + { + igl0 = 0; + } + } - // - // G <> 0 term - // + // + // G <> 0 term + // #ifdef _OPENMP #pragma omp parallel for #endif - for(int igl = igl0;igl< rho_basis->ngg;igl++) - { - gx_arr[igl] = sqrt(rho_basis->gg_uniq[igl] * tpiba2); - } - - double *r_d = nullptr; - double *rhoc_d = nullptr; - double *rab_d = nullptr; - double *aux_d = nullptr; - double *drhocg_d = nullptr; - - if(this->device == base_device::GpuDevice) - { - resmem_var_op()(r_d, mesh); - resmem_var_op()(rhoc_d, mesh); - resmem_var_op()(rab_d, mesh); - - resmem_var_op()(aux_d, mesh); - resmem_var_op()(gx_arr_d, rho_basis->ngg); - resmem_var_op()(drhocg_d, rho_basis->ngg); - - syncmem_var_h2d_op()(gx_arr_d, gx_arr.data(), rho_basis->ngg); - syncmem_var_h2d_op()(r_d, r, mesh); - syncmem_var_h2d_op()(rab_d, rab, mesh); - syncmem_var_h2d_op()(rhoc_d, rhoc, mesh); - } + for (int igl = igl0; igl < rho_basis->ngg; igl++) + { + gx_arr[igl] = sqrt(rho_basis->gg_uniq[igl] * tpiba2); + } - if(this->device == base_device::GpuDevice) - { - hamilt::cal_stress_drhoc_aux_op()( - r_d,rhoc_d,gx_arr_d+igl0,rab_d,drhocg_d+igl0,mesh,igl0,rho_basis->ngg-igl0,omega,type); - syncmem_var_d2h_op()(drhocg+igl0, drhocg_d+igl0, rho_basis->ngg-igl0); + double* r_d = nullptr; + double* rhoc_d = nullptr; + double* rab_d = nullptr; + double* aux_d = nullptr; + double* drhocg_d = nullptr; - } - else - { - hamilt::cal_stress_drhoc_aux_op()( - r,rhoc,gx_arr.data()+igl0,rab,drhocg+igl0,mesh,igl0,rho_basis->ngg-igl0,omega,type); + if (this->device == base_device::GpuDevice) + { + resmem_var_op()(r_d, mesh); + resmem_var_op()(rhoc_d, mesh); + resmem_var_op()(rab_d, mesh); + + resmem_var_op()(aux_d, mesh); + resmem_var_op()(gx_arr_d, rho_basis->ngg); + resmem_var_op()(drhocg_d, rho_basis->ngg); + + syncmem_var_h2d_op()(gx_arr_d, gx_arr.data(), rho_basis->ngg); + syncmem_var_h2d_op()(r_d, r, mesh); + syncmem_var_h2d_op()(rab_d, rab, mesh); + syncmem_var_h2d_op()(rhoc_d, rhoc, mesh); + } - } - delmem_var_op()(r_d); + if (this->device == base_device::GpuDevice) + { + hamilt::cal_stress_drhoc_aux_op()(r_d, + rhoc_d, + gx_arr_d + igl0, + rab_d, + drhocg_d + igl0, + mesh, + igl0, + rho_basis->ngg - igl0, + omega, + type); + syncmem_var_d2h_op()(drhocg + igl0, drhocg_d + igl0, rho_basis->ngg - igl0); + } + else + { + hamilt::cal_stress_drhoc_aux_op()(r, + rhoc, + gx_arr.data() + igl0, + rab, + drhocg + igl0, + mesh, + igl0, + rho_basis->ngg - igl0, + omega, + type); + } + delmem_var_op()(r_d); delmem_var_op()(rhoc_d); delmem_var_op()(rab_d); delmem_var_op()(gx_arr_d); delmem_var_op()(drhocg_d); - return; + return; } template class Stress_Func; diff --git a/source/module_hamilt_pw/hamilt_pwdft/stress_func_ewa.cpp b/source/module_hamilt_pw/hamilt_pwdft/stress_func_ewa.cpp index 8cd845e313..6f5e6ee7bf 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/stress_func_ewa.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/stress_func_ewa.cpp @@ -1,237 +1,238 @@ -#include "stress_func.h" #include "module_hamilt_general/module_ewald/H_Ewald_pw.h" -#include "module_base/timer.h" -#include "module_base/tool_threading.h" -#include "module_base/libm/libm.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/libm/libm.h" +#include "source_base/timer.h" +#include "source_base/tool_threading.h" +#include "stress_func.h" #ifdef _OPENMP #include #endif -//calcualte the Ewald stress term in PW and LCAO -template +// calcualte the Ewald stress term in PW and LCAO +template void Stress_Func::stress_ewa(const UnitCell& ucell, - ModuleBase::matrix& sigma, - ModulePW::PW_Basis* rho_basis, - const bool is_pw) + ModuleBase::matrix& sigma, + ModulePW::PW_Basis* rho_basis, + const bool is_pw) { - ModuleBase::TITLE("Stress","stress_ewa"); - ModuleBase::timer::tick("Stress","stress_ewa"); - - FPTYPE charge=0; - for(int it=0; it < ucell.ntype; it++) - { - charge = charge + ucell.atoms[it].ncpp.zv * ucell.atoms[it].na; - } - //choose alpha in order to have convergence in the sum over G - //upperbound is a safe upper bound for the error ON THE ENERGY - - FPTYPE alpha=2.9; - FPTYPE upperbound=0.0; - - do{ - alpha-=0.1; - if(alpha==0.0) - { - ModuleBase::WARNING_QUIT("stres_ew", "optimal alpha not found"); - } - upperbound =ModuleBase::e2 * pow(charge,2) * - sqrt( 2 * alpha / (ModuleBase::TWO_PI)) - * erfc(sqrt(ucell.tpiba2 * rho_basis->ggecut / 4.0 / alpha)); - } - while(upperbound>1e-7); - - //G-space sum here - //Determine if this processor contains G=0 and set the constant term - FPTYPE sdewald=0.0; - const int ig0 = rho_basis->ig_gge0; - if( ig0 >= 0) - { - sdewald = (ModuleBase::TWO_PI) * ModuleBase::e2 / 4.0 / alpha * pow(charge/ucell.omega,2); + ModuleBase::TITLE("Stress", "stress_ewa"); + ModuleBase::timer::tick("Stress", "stress_ewa"); + + FPTYPE charge = 0; + for (int it = 0; it < ucell.ntype; it++) + { + charge = charge + ucell.atoms[it].ncpp.zv * ucell.atoms[it].na; + } + // choose alpha in order to have convergence in the sum over G + // upperbound is a safe upper bound for the error ON THE ENERGY + + FPTYPE alpha = 2.9; + FPTYPE upperbound = 0.0; + + do + { + alpha -= 0.1; + if (alpha == 0.0) + { + ModuleBase::WARNING_QUIT("stres_ew", "optimal alpha not found"); + } + upperbound = ModuleBase::e2 * pow(charge, 2) * sqrt(2 * alpha / (ModuleBase::TWO_PI)) + * erfc(sqrt(ucell.tpiba2 * rho_basis->ggecut / 4.0 / alpha)); + } while (upperbound > 1e-7); + + // G-space sum here + // Determine if this processor contains G=0 and set the constant term + FPTYPE sdewald = 0.0; + const int ig0 = rho_basis->ig_gge0; + if (ig0 >= 0) + { + sdewald = (ModuleBase::TWO_PI)*ModuleBase::e2 / 4.0 / alpha * pow(charge / ucell.omega, 2); } - else - { - sdewald = 0.0; + else + { + sdewald = 0.0; } - //sdewald is the diagonal term + // sdewald is the diagonal term - FPTYPE fact=1.0; - if (PARAM.globalv.gamma_only_pw && is_pw) - { - fact=2.0; - } -// else fact=1.0; + FPTYPE fact = 1.0; + if (PARAM.globalv.gamma_only_pw && is_pw) + { + fact = 2.0; + } + // else fact=1.0; #ifdef _OPENMP #pragma omp parallel -{ - int num_threads = omp_get_num_threads(); - int thread_id = omp_get_thread_num(); - ModuleBase::matrix local_sigma(3, 3); - FPTYPE local_sdewald = 0.0; + { + int num_threads = omp_get_num_threads(); + int thread_id = omp_get_thread_num(); + ModuleBase::matrix local_sigma(3, 3); + FPTYPE local_sdewald = 0.0; #else int num_threads = 1; int thread_id = 0; - ModuleBase::matrix& local_sigma = sigma; - FPTYPE& local_sdewald = sdewald; + ModuleBase::matrix& local_sigma = sigma; + FPTYPE& local_sdewald = sdewald; #endif - // Calculate ig range of this thread, avoid thread sync - int ig=0; - int ig_end=0; - ModuleBase::TASK_DIST_1D(num_threads, thread_id, rho_basis->npw, ig, ig_end); - ig_end = ig + ig_end; - - FPTYPE g2,g2a; - FPTYPE arg; - std::complex rhostar; - FPTYPE sewald; - - for(; ig < ig_end; ig++) - { - if(ig == ig0) - { - continue; - } - - g2 = rho_basis->gg[ig]* ucell.tpiba2; - g2a = g2 /4.0/alpha; - rhostar=std::complex(0.0,0.0); - - for(int it=0; it < ucell.ntype; it++) - { - for(int i=0; igcar[ig] * ucell.atoms[it].tau[i]) * (ModuleBase::TWO_PI); - FPTYPE sinp, cosp; - ModuleBase::libm::sincos(arg, &sinp, &cosp); - rhostar = rhostar + std::complex(ucell.atoms[it].ncpp.zv * cosp,ucell.atoms[it].ncpp.zv * sinp); - } - } - rhostar /= ucell.omega; - sewald = fact* (ModuleBase::TWO_PI) * ModuleBase::e2 * ModuleBase::libm::exp(-g2a) / g2 * pow(std::abs(rhostar),2); - local_sdewald -= sewald; - for(int l=0;l<3;l++) - { - for(int m=0;mgcar[ig][l] * rho_basis->gcar[ig][m] / g2 * (g2a + 1); - } - } - } - - //R-space sum here (only for the processor that contains G=0) - int mxr = 200; - int *irr=nullptr; - ModuleBase::Vector3 *r; - FPTYPE *r2=nullptr; - FPTYPE rr=0.0; - ModuleBase::Vector3 d_tau; - FPTYPE r0[3]; - FPTYPE rmax=0.0; - int nrm=0; - FPTYPE fac=0.0; - - if(ig0 >= 0) - { - r = new ModuleBase::Vector3[mxr]; - r2 = new FPTYPE[mxr]; - irr = new int[mxr]; - - FPTYPE sqa = sqrt(alpha); - FPTYPE sq8a_2pi = sqrt(8 * alpha / (ModuleBase::TWO_PI)); - rmax = 4.0/sqa/ucell.lat0; - - // collapse it, ia, jt, ja loop into a single loop - long long ijat; - long long ijat_end; - int it=0; - int i=0; - int jt=0; - int j=0; - - ModuleBase::TASK_DIST_1D(num_threads, thread_id, (long long)ucell.nat * ucell.nat, ijat, ijat_end); - ijat_end = ijat + ijat_end; - ucell.ijat2iaitjajt(ijat, &i, &it, &j, &jt); - - while (ijat < ijat_end) - { - if (ucell.atoms[it].na != 0 && ucell.atoms[jt].na != 0) - { - //calculate tau[na]-tau[nb] - d_tau = ucell.atoms[it].tau[i] - ucell.atoms[jt].tau[j]; - //generates nearest-neighbors shells - H_Ewald_pw::rgen(d_tau, rmax, irr, ucell.latvec, ucell.G, r, r2, nrm); - for(int nr=0; nrnpw, ig, ig_end); + ig_end = ig + ig_end; + + FPTYPE g2, g2a; + FPTYPE arg; + std::complex rhostar; + FPTYPE sewald; + + for (; ig < ig_end; ig++) + { + if (ig == ig0) + { + continue; + } + + g2 = rho_basis->gg[ig] * ucell.tpiba2; + g2a = g2 / 4.0 / alpha; + rhostar = std::complex(0.0, 0.0); + + for (int it = 0; it < ucell.ntype; it++) + { + for (int i = 0; i < ucell.atoms[it].na; i++) + { + arg = (rho_basis->gcar[ig] * ucell.atoms[it].tau[i]) * (ModuleBase::TWO_PI); + FPTYPE sinp, cosp; + ModuleBase::libm::sincos(arg, &sinp, &cosp); + rhostar = rhostar + + std::complex(ucell.atoms[it].ncpp.zv * cosp, ucell.atoms[it].ncpp.zv * sinp); + } + } + rhostar /= ucell.omega; + sewald = fact * (ModuleBase::TWO_PI)*ModuleBase::e2 * ModuleBase::libm::exp(-g2a) / g2 + * pow(std::abs(rhostar), 2); + local_sdewald -= sewald; + for (int l = 0; l < 3; l++) + { + for (int m = 0; m < l + 1; m++) + { + local_sigma(l, m) += sewald * ucell.tpiba2 * 2.0 * rho_basis->gcar[ig][l] * rho_basis->gcar[ig][m] + / g2 * (g2a + 1); + } + } + } + + // R-space sum here (only for the processor that contains G=0) + int mxr = 200; + int* irr = nullptr; + ModuleBase::Vector3* r; + FPTYPE* r2 = nullptr; + FPTYPE rr = 0.0; + ModuleBase::Vector3 d_tau; + FPTYPE r0[3]; + FPTYPE rmax = 0.0; + int nrm = 0; + FPTYPE fac = 0.0; + + if (ig0 >= 0) + { + r = new ModuleBase::Vector3[mxr]; + r2 = new FPTYPE[mxr]; + irr = new int[mxr]; + + FPTYPE sqa = sqrt(alpha); + FPTYPE sq8a_2pi = sqrt(8 * alpha / (ModuleBase::TWO_PI)); + rmax = 4.0 / sqa / ucell.lat0; + + // collapse it, ia, jt, ja loop into a single loop + long long ijat; + long long ijat_end; + int it = 0; + int i = 0; + int jt = 0; + int j = 0; + + ModuleBase::TASK_DIST_1D(num_threads, thread_id, (long long)ucell.nat * ucell.nat, ijat, ijat_end); + ijat_end = ijat + ijat_end; + ucell.ijat2iaitjajt(ijat, &i, &it, &j, &jt); + + while (ijat < ijat_end) + { + if (ucell.atoms[it].na != 0 && ucell.atoms[jt].na != 0) + { + // calculate tau[na]-tau[nb] + d_tau = ucell.atoms[it].tau[i] - ucell.atoms[jt].tau[j]; + // generates nearest-neighbors shells + H_Ewald_pw::rgen(d_tau, rmax, irr, ucell.latvec, ucell.G, r, r2, nrm); + for (int nr = 0; nr < nrm; nr++) + { + rr = sqrt(r2[nr]) * ucell.lat0; + fac = -ModuleBase::e2 / 2.0 / ucell.omega * pow(ucell.lat0, 2) * ucell.atoms[it].ncpp.zv + * ucell.atoms[jt].ncpp.zv / pow(rr, 3) + * (erfc(sqa * rr) + rr * sq8a_2pi * ModuleBase::libm::exp(-alpha * pow(rr, 2))); + + for (int l = 0; l < 3; l++) + { + for (int m = 0; m < l + 1; m++) + { + r0[0] = r[nr].x; + r0[1] = r[nr].y; + r0[2] = r[nr].z; + local_sigma(l, m) += fac * r0[l] * r0[m]; + } // end m + } // end l + } // end nr + } + + ++ijat; + ucell.step_jajtiait(&j, &jt, &i, &it); + } + + delete[] r; + delete[] r2; + delete[] irr; + } // end if #ifdef _OPENMP - #pragma omp critical(stress_ewa_reduce) - { - sdewald += local_sdewald; - for(int l=0;l<3;l++) - { - for(int m=0;m; diff --git a/source/module_hamilt_pw/hamilt_pwdft/stress_func_gga.cpp b/source/module_hamilt_pw/hamilt_pwdft/stress_func_gga.cpp index 8fd5dcd7e4..9dba7884f3 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/stress_func_gga.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/stress_func_gga.cpp @@ -1,63 +1,63 @@ -#include "stress_func.h" #include "module_hamilt_general/module_xc/xc_functional.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/timer.h" +#include "stress_func.h" -//calculate the GGA stress correction in PW and LCAO +// calculate the GGA stress correction in PW and LCAO template void Stress_Func::stress_gga(const UnitCell& ucell, - ModuleBase::matrix& sigma, + ModuleBase::matrix& sigma, ModulePW::PW_Basis* rho_basis, const Charge* const chr) { - ModuleBase::TITLE("Stress","stress_gga"); - ModuleBase::timer::tick("Stress","stress_gga"); - - int func_type = XC_Functional::get_func_type(); - if (func_type == 0 || func_type == 1) - { - ModuleBase::timer::tick("Stress","stress_gga"); - return; - } + ModuleBase::TITLE("Stress", "stress_gga"); + ModuleBase::timer::tick("Stress", "stress_gga"); + + int func_type = XC_Functional::get_func_type(); + if (func_type == 0 || func_type == 1) + { + ModuleBase::timer::tick("Stress", "stress_gga"); + return; + } - FPTYPE sigma_gradcorr[3][3]; - std::vector stress_gga; - FPTYPE dum1=0.0; - FPTYPE dum2=0.0; - ModuleBase::matrix dum3; - // call gradcorr to evaluate gradient correction to stress - // the first three terms are etxc, vtxc and v, which - // is not used here, so dummy variables are used. + FPTYPE sigma_gradcorr[3][3]; + std::vector stress_gga; + FPTYPE dum1 = 0.0; + FPTYPE dum2 = 0.0; + ModuleBase::matrix dum3; + // call gradcorr to evaluate gradient correction to stress + // the first three terms are etxc, vtxc and v, which + // is not used here, so dummy variables are used. XC_Functional::gradcorr(dum1, dum2, dum3, chr, rho_basis, &ucell, stress_gga, 1); - for(int l = 0;l< 3;l++) - { - for(int m = 0;m< l+1;m++) - { - int ind = l*3 + m; - sigma_gradcorr[l][m] = stress_gga [ind]; - sigma_gradcorr[m][l] = sigma_gradcorr[l][m]; - } - } + for (int l = 0; l < 3; l++) + { + for (int m = 0; m < l + 1; m++) + { + int ind = l * 3 + m; + sigma_gradcorr[l][m] = stress_gga[ind]; + sigma_gradcorr[m][l] = sigma_gradcorr[l][m]; + } + } - for(int l = 0;l<3;l++) - { - for(int m = 0;m<3;m++) - { + for (int l = 0; l < 3; l++) + { + for (int m = 0; m < 3; m++) + { Parallel_Reduce::reduce_pool(sigma_gradcorr[l][m]); - } - } - - for(int i=0;i<3;i++) - { - for(int j=0;j<3;j++) - { + } + } + + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) + { sigma(i, j) += sigma_gradcorr[i][j] / rho_basis->nxyz; } - } + } - ModuleBase::timer::tick("Stress","stress_gga"); - return; + ModuleBase::timer::tick("Stress", "stress_gga"); + return; } template class Stress_Func; diff --git a/source/module_hamilt_pw/hamilt_pwdft/stress_func_har.cpp b/source/module_hamilt_pw/hamilt_pwdft/stress_func_har.cpp index 44b5ea3b40..0fb310b4ff 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/stress_func_har.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/stress_func_har.cpp @@ -1,27 +1,27 @@ -#include "stress_func.h" #include "module_elecstate/module_pot/H_Hartree_pw.h" -#include "module_parameter/parameter.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" +#include "stress_func.h" -//calculate the Hartree part in PW or LCAO base -template +// calculate the Hartree part in PW or LCAO base +template void Stress_Func::stress_har(const UnitCell& ucell, - ModuleBase::matrix& sigma, - ModulePW::PW_Basis* rho_basis, - const bool is_pw, - const Charge* const chr) + ModuleBase::matrix& sigma, + ModulePW::PW_Basis* rho_basis, + const bool is_pw, + const Charge* const chr) { - ModuleBase::TITLE("Stress","stress_har"); - ModuleBase::timer::tick("Stress","stress_har"); + ModuleBase::TITLE("Stress", "stress_har"); + ModuleBase::timer::tick("Stress", "stress_har"); - assert(rho_basis->nmaxgr>0); + assert(rho_basis->nmaxgr > 0); - std::complex *aux = new std::complex[rho_basis->nmaxgr]; + std::complex* aux = new std::complex[rho_basis->nmaxgr]; - const int nspin_rho = (PARAM.inp.nspin == 2) ? 2 : 1; + const int nspin_rho = (PARAM.inp.nspin == 2) ? 2 : 1; - // Hartree potential VH(r) from n(r) + // Hartree potential VH(r) from n(r) /* blocking rho_basis->nrxx for data locality. @@ -33,126 +33,125 @@ void Stress_Func::stress_har(const UnitCell& ucell, #ifdef _OPENMP #pragma omp parallel for #endif - for (int irb = 0; irb < rho_basis->nrxx; irb += block_ir) - { - // calculate the actual task length of this block - int ir_end = std::min(irb + block_ir, rho_basis->nrxx); - - { // is = 0 - for (int ir = irb; ir < ir_end; ++ir) - { // initialize aux - aux[ir] = std::complex( chr->rho[0][ir], 0.0 ); - } - } - for (int is = 1; is < nspin_rho; is++) - { - for (int ir = irb; ir < ir_end; ++ir) - { // accumulate aux - aux[ir] += std::complex( chr->rho[is][ir], 0.0 ); - } - } - } - //============================= - // bring rho (aux) to G space - //============================= - rho_basis->real2recip(aux, aux); - + for (int irb = 0; irb < rho_basis->nrxx; irb += block_ir) + { + // calculate the actual task length of this block + int ir_end = std::min(irb + block_ir, rho_basis->nrxx); + + { // is = 0 + for (int ir = irb; ir < ir_end; ++ir) + { // initialize aux + aux[ir] = std::complex(chr->rho[0][ir], 0.0); + } + } + for (int is = 1; is < nspin_rho; is++) + { + for (int ir = irb; ir < ir_end; ++ir) + { // accumulate aux + aux[ir] += std::complex(chr->rho[is][ir], 0.0); + } + } + } + //============================= + // bring rho (aux) to G space + //============================= + rho_basis->real2recip(aux, aux); #ifndef _OPENMP - ModuleBase::matrix& local_sigma = sigma; + ModuleBase::matrix& local_sigma = sigma; #else #pragma omp parallel - { - ModuleBase::matrix local_sigma(3, 3); + { + ModuleBase::matrix local_sigma(3, 3); #pragma omp for #endif - for (int ig = 0 ; ig < rho_basis->npw ; ++ig) - { - const FPTYPE g2 = rho_basis->gg[ig]; - if(g2 < 1e-8) - { - continue; - } - - FPTYPE shart= ( conj( aux[ig] ) * aux[ig] ).real()/(ucell.tpiba2 * g2); - for(int l=0;l<3;l++) - { - for(int m=0;mgcar[ig][l] * rho_basis->gcar[ig][m] / g2; - } - } - } + for (int ig = 0; ig < rho_basis->npw; ++ig) + { + const FPTYPE g2 = rho_basis->gg[ig]; + if (g2 < 1e-8) + { + continue; + } + + FPTYPE shart = (conj(aux[ig]) * aux[ig]).real() / (ucell.tpiba2 * g2); + for (int l = 0; l < 3; l++) + { + for (int m = 0; m < l + 1; m++) + { + local_sigma(l, m) += shart * 2 * rho_basis->gcar[ig][l] * rho_basis->gcar[ig][m] / g2; + } + } + } #ifdef _OPENMP #pragma omp critical(stress_har_reduce) - { - for(int l=0;l<3;l++) - { - for(int m=0;m; diff --git a/source/module_hamilt_pw/hamilt_pwdft/stress_func_kin.cpp b/source/module_hamilt_pw/hamilt_pwdft/stress_func_kin.cpp index 0de21d6178..e71bf34b0e 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/stress_func_kin.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/stress_func_kin.cpp @@ -1,10 +1,10 @@ -#include "stress_func.h" +#include "module_hamilt_pw/hamilt_pwdft/fs_kin_tools.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" -#include "module_base/timer.h" -#include "module_hamilt_pw/hamilt_pwdft/fs_kin_tools.h" +#include "source_base/timer.h" +#include "stress_func.h" -//calculate the kinetic stress in PW base +// calculate the kinetic stress in PW base template void Stress_Func::stress_kin(ModuleBase::matrix& sigma, const ModuleBase::matrix& wg, @@ -14,12 +14,12 @@ void Stress_Func::stress_kin(ModuleBase::matrix& sigma, const UnitCell& ucell_in, const psi::Psi, Device>* psi_in) { - ModuleBase::TITLE("Stress","stress_kin"); - ModuleBase::timer::tick("Stress","stress_kin"); + ModuleBase::TITLE("Stress", "stress_kin"); + ModuleBase::timer::tick("Stress", "stress_kin"); - this->ucell = &ucell_in; + this->ucell = &ucell_in; - hamilt::FS_Kin_tools kin_tool(*this->ucell, p_kv, wfc_basis, wg); + hamilt::FS_Kin_tools kin_tool(*this->ucell, p_kv, wfc_basis, wg); for (int ik = 0; ik < wfc_basis->nks; ++ik) { int nbands_occ = wg.nc; @@ -36,9 +36,9 @@ void Stress_Func::stress_kin(ModuleBase::matrix& sigma, kin_tool.cal_stress_kin(ik, npm, true, &psi_in[0](ik, 0, 0)); } kin_tool.symmetrize_stress(p_symm, sigma); - - ModuleBase::timer::tick("Stress","stress_kin"); - return; + + ModuleBase::timer::tick("Stress", "stress_kin"); + return; } template class Stress_Func; diff --git a/source/module_hamilt_pw/hamilt_pwdft/stress_func_loc.cpp b/source/module_hamilt_pw/hamilt_pwdft/stress_func_loc.cpp index a24fe639d1..bb2f862390 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/stress_func_loc.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/stress_func_loc.cpp @@ -1,284 +1,296 @@ -#include "stress_func.h" -#include "module_base/math_integral.h" -#include "module_parameter/parameter.h" -#include "module_base/tool_threading.h" -#include "module_base/timer.h" -#include "module_base/libm/libm.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/libm/libm.h" +#include "source_base/math_integral.h" +#include "source_base/timer.h" +#include "source_base/tool_threading.h" +#include "stress_func.h" -//calculate local pseudopotential stress in PW or VL_dVL stress in LCAO +// calculate local pseudopotential stress in PW or VL_dVL stress in LCAO template void Stress_Func::stress_loc(const UnitCell& ucell, - ModuleBase::matrix& sigma, + ModuleBase::matrix& sigma, ModulePW::PW_Basis* rho_basis, - const ModuleBase::matrix& vloc, + const ModuleBase::matrix& vloc, const Structure_Factor* p_sf, const bool is_pw, const Charge* const chr) { - ModuleBase::TITLE("Stress","stress_loc"); - ModuleBase::timer::tick("Stress","stress_loc"); + ModuleBase::TITLE("Stress", "stress_loc"); + ModuleBase::timer::tick("Stress", "stress_loc"); - std::vector dvloc(rho_basis->npw); - FPTYPE evloc=0.0; - FPTYPE fact=1.0; + std::vector dvloc(rho_basis->npw); + FPTYPE evloc = 0.0; + FPTYPE fact = 1.0; - const int nspin_rho = (PARAM.inp.nspin == 2) ? 2 : 1; + const int nspin_rho = (PARAM.inp.nspin == 2) ? 2 : 1; - if (PARAM.inp.gamma_only && is_pw) - { - fact=2.0; - } + if (PARAM.inp.gamma_only && is_pw) + { + fact = 2.0; + } - std::vector> aux(rho_basis->nmaxgr); + std::vector> aux(rho_basis->nmaxgr); - /* - blocking rho_basis->nrxx for data locality. + /* + blocking rho_basis->nrxx for data locality. - By blocking aux with block size 1024, - we can keep the blocked aux in L1 cache when iterating PARAM.inp.nspin loop - performance will be better when number of atom is quite huge - */ - const int block_ir = 1024; + By blocking aux with block size 1024, + we can keep the blocked aux in L1 cache when iterating PARAM.inp.nspin loop + performance will be better when number of atom is quite huge + */ + const int block_ir = 1024; #ifdef _OPENMP #pragma omp parallel for #endif - for (int irb = 0; irb < rho_basis->nrxx; irb += block_ir) - { - // calculate the actual task length of this block - int ir_end = std::min(irb + block_ir, rho_basis->nrxx); - - for (int ir = irb; ir < ir_end; ++ir) - { - aux[ir] = std::complex(chr->rho[0][ir], 0.0 ); - } - - if(nspin_rho == 2) - { - for (int ir = irb; ir < ir_end; ++ir) - { - aux[ir] += std::complex(chr->rho[1][ir], 0.0 ); - } - } - } - rho_basis->real2recip(aux.data(),aux.data()); + for (int irb = 0; irb < rho_basis->nrxx; irb += block_ir) + { + // calculate the actual task length of this block + int ir_end = std::min(irb + block_ir, rho_basis->nrxx); + + for (int ir = irb; ir < ir_end; ++ir) + { + aux[ir] = std::complex(chr->rho[0][ir], 0.0); + } + + if (nspin_rho == 2) + { + for (int ir = irb; ir < ir_end; ++ir) + { + aux[ir] += std::complex(chr->rho[1][ir], 0.0); + } + } + } + rho_basis->real2recip(aux.data(), aux.data()); -// if(INPUT.gamma_only==1) fact=2.0; -// else fact=1.0; + // if(INPUT.gamma_only==1) fact=2.0; + // else fact=1.0; - if(is_pw) - { -#pragma omp parallel for collapse(2) reduction(+:evloc) - for (int it=0; itnpw; ig++) - { - if (rho_basis->ig_gge0 == ig) - { - evloc += vloc(it, rho_basis->ig2igg[ig]) - * (p_sf->strucFac(it, ig) * conj(aux[ig])).real(); - } - else - { - evloc += vloc(it, rho_basis->ig2igg[ig]) - * (p_sf->strucFac(it, ig) * conj(aux[ig]) * fact).real(); - } - } - } + if (is_pw) + { +#pragma omp parallel for collapse(2) reduction(+ : evloc) + for (int it = 0; it < ucell.ntype; it++) + { + for (int ig = 0; ig < rho_basis->npw; ig++) + { + if (rho_basis->ig_gge0 == ig) + { + evloc += vloc(it, rho_basis->ig2igg[ig]) * (p_sf->strucFac(it, ig) * conj(aux[ig])).real(); + } + else + { + evloc += vloc(it, rho_basis->ig2igg[ig]) * (p_sf->strucFac(it, ig) * conj(aux[ig]) * fact).real(); + } + } + } } - for (int it = 0; it < ucell.ntype; ++it) { const Atom* atom = &ucell.atoms[it]; - if(atom->coulomb_potential) - { - // special case: pseudopotential is coulomb 1/r potential - this->dvloc_coulomb (ucell,atom->ncpp.zv, dvloc.data(), rho_basis); - } - else - { - // normal case: dvloc contains dV_loc(G)/dG - this->dvloc_of_g ( atom->ncpp.msh, atom->ncpp.rab.data(), atom->ncpp.r.data(), - atom->ncpp.vloc_at.data(), atom->ncpp.zv, dvloc.data(), rho_basis, ucell); - } + if (atom->coulomb_potential) + { + // special case: pseudopotential is coulomb 1/r potential + this->dvloc_coulomb(ucell, atom->ncpp.zv, dvloc.data(), rho_basis); + } + else + { + // normal case: dvloc contains dV_loc(G)/dG + this->dvloc_of_g(atom->ncpp.msh, + atom->ncpp.rab.data(), + atom->ncpp.r.data(), + atom->ncpp.vloc_at.data(), + atom->ncpp.zv, + dvloc.data(), + rho_basis, + ucell); + } #ifndef _OPENMP - ModuleBase::matrix &local_sigma = sigma; + ModuleBase::matrix& local_sigma = sigma; #else #pragma omp parallel - { - ModuleBase::matrix local_sigma(3, 3); + { + ModuleBase::matrix local_sigma(3, 3); #pragma omp for #endif - for(int ig = 0;ig< rho_basis->npw;ig++) - { - for (int l = 0;l< 3;l++) - { - for (int m = 0; mstrucFac(it, ig)).real() * 2.0 - * dvloc[rho_basis->ig2igg[ig]] * ucell.tpiba2 - * rho_basis->gcar[ig][l] * rho_basis->gcar[ig][m] * fact; - } - } - } + for (int ig = 0; ig < rho_basis->npw; ig++) + { + for (int l = 0; l < 3; l++) + { + for (int m = 0; m < l + 1; m++) + { + local_sigma(l, m) = local_sigma(l, m) + + (conj(aux[ig]) * p_sf->strucFac(it, ig)).real() * 2.0 + * dvloc[rho_basis->ig2igg[ig]] * ucell.tpiba2 * rho_basis->gcar[ig][l] + * rho_basis->gcar[ig][m] * fact; + } + } + } #ifdef _OPENMP #pragma omp critical(stress_loc_reduce) - { - for(int l=0;l<3;l++) - { - for(int m=0;m -void Stress_Func::dvloc_of_g -( -const int& msh, -const FPTYPE* rab, -const FPTYPE* r, -const FPTYPE* vloc_at, -const FPTYPE& zp, -FPTYPE* dvloc, -ModulePW::PW_Basis* rho_basis, -const UnitCell& ucell_in -) +template +void Stress_Func::dvloc_of_g(const int& msh, + const FPTYPE* rab, + const FPTYPE* r, + const FPTYPE* vloc_at, + const FPTYPE& zp, + FPTYPE* dvloc, + ModulePW::PW_Basis* rho_basis, + const UnitCell& ucell_in) { - //---------------------------------------------------------------------- - // - // dvloc = D Vloc (g^2) / D g^2 = (1/2g) * D Vloc(g) / D g - // + //---------------------------------------------------------------------- + // + // dvloc = D Vloc (g^2) / D g^2 = (1/2g) * D Vloc(g) / D g + // - // - //FPTYPE dvloc[ngl]; - // the fourier transform dVloc/dG - // - + // + // FPTYPE dvloc[ngl]; + // the fourier transform dVloc/dG + // - int igl0; - this->device = base_device::get_device_type(this->ctx); + int igl0; + this->device = base_device::get_device_type(this->ctx); - std::vector gx_arr(rho_basis->ngg+1); + std::vector gx_arr(rho_basis->ngg + 1); double* gx_arr_d = nullptr; - // counter on erf functions or gaussians - // counter on g shells vectors - // first shell with g != 0 - - std::vector aux(msh); + // counter on erf functions or gaussians + // counter on g shells vectors + // first shell with g != 0 - // the G=0 component is not computed - if (rho_basis->gg_uniq[0] < 1.0e-8) - { - dvloc[0] = 0.0; - igl0 = 1; - } - else - { - igl0 = 0; - } + std::vector aux(msh); + + // the G=0 component is not computed + if (rho_basis->gg_uniq[0] < 1.0e-8) + { + dvloc[0] = 0.0; + igl0 = 1; + } + else + { + igl0 = 0; + } - // Pseudopotentials in numerical form (Vloc contains the local part) - // In order to perform the Fourier transform, a term erf(r)/r is - // subtracted in real space and added again in G space + // Pseudopotentials in numerical form (Vloc contains the local part) + // In order to perform the Fourier transform, a term erf(r)/r is + // subtracted in real space and added again in G space #ifdef _OPENMP #pragma omp parallel for #endif - for (int igl = igl0; igl < rho_basis->ngg; igl++) { + for (int igl = igl0; igl < rho_basis->ngg; igl++) + { gx_arr[igl] = sqrt(rho_basis->gg_uniq[igl]) * ucell_in.tpiba; } - gx_arr[rho_basis->ngg] = zp * ModuleBase::e2; - - // - // This is the part of the integrand function - // indipendent of |G| in real space - // - for(int i = 0;i< msh; i++) - { - aux[i] = r [i] * vloc_at [i] + zp * ModuleBase::e2 * erf(r[i]); - } - + gx_arr[rho_basis->ngg] = zp * ModuleBase::e2; + // + // This is the part of the integrand function + // indipendent of |G| in real space + // + for (int i = 0; i < msh; i++) + { + aux[i] = r[i] * vloc_at[i] + zp * ModuleBase::e2 * erf(r[i]); + } - double *r_d = nullptr; - double *rhoc_d = nullptr; - double *rab_d = nullptr; - double *aux_d = nullptr; - double *drhocg_d = nullptr; - if (this->device == base_device::GpuDevice) { + double* r_d = nullptr; + double* rhoc_d = nullptr; + double* rab_d = nullptr; + double* aux_d = nullptr; + double* drhocg_d = nullptr; + if (this->device == base_device::GpuDevice) + { resmem_var_op()(r_d, msh); resmem_var_op()(rhoc_d, msh); resmem_var_op()(rab_d, msh); resmem_var_op()(aux_d, msh); - resmem_var_op()(gx_arr_d, rho_basis->ngg+1); + resmem_var_op()(gx_arr_d, rho_basis->ngg + 1); resmem_var_op()(drhocg_d, rho_basis->ngg); - syncmem_var_h2d_op()(gx_arr_d, - gx_arr.data(), - rho_basis->ngg+1); + syncmem_var_h2d_op()(gx_arr_d, gx_arr.data(), rho_basis->ngg + 1); syncmem_var_h2d_op()(r_d, r, msh); syncmem_var_h2d_op()(rab_d, rab, msh); syncmem_var_h2d_op()(rhoc_d, aux.data(), msh); } + if (this->device == base_device::GpuDevice) + { + hamilt::cal_stress_drhoc_aux_op()(r_d, + rhoc_d, + gx_arr_d + igl0, + rab_d, + drhocg_d + igl0, + msh, + igl0, + rho_basis->ngg - igl0, + ucell_in.omega, + 3); + syncmem_var_d2h_op()(dvloc + igl0, drhocg_d + igl0, rho_basis->ngg - igl0); + } + else + { + hamilt::cal_stress_drhoc_aux_op()(r, + aux.data(), + gx_arr.data() + igl0, + rab, + dvloc + igl0, + msh, + igl0, + rho_basis->ngg - igl0, + ucell_in.omega, + 3); + } - - if(this->device == base_device::GpuDevice) { - hamilt::cal_stress_drhoc_aux_op()( - r_d,rhoc_d,gx_arr_d+igl0,rab_d,drhocg_d+igl0,msh,igl0,rho_basis->ngg-igl0,ucell_in.omega,3); - syncmem_var_d2h_op()(dvloc+igl0, drhocg_d+igl0, rho_basis->ngg-igl0); - - } else { - hamilt::cal_stress_drhoc_aux_op()( - r,aux.data(),gx_arr.data()+igl0,rab,dvloc+igl0,msh,igl0,rho_basis->ngg-igl0,ucell_in.omega,3); - } - - return; + return; } template -void Stress_Func::dvloc_coulomb(const UnitCell& ucell, - const FPTYPE& zp, - FPTYPE* dvloc, - ModulePW::PW_Basis* rho_basis) +void Stress_Func::dvloc_coulomb(const UnitCell& ucell, + const FPTYPE& zp, + FPTYPE* dvloc, + ModulePW::PW_Basis* rho_basis) { int igl0; - // start from |G|=0 or not. + // start from |G|=0 or not. if (rho_basis->gg_uniq[0] < 1.0e-8) { dvloc[0] = 0.0; @@ -293,8 +305,8 @@ void Stress_Func::dvloc_coulomb(const UnitCell& ucell, #endif for (int i = igl0; i < rho_basis->ngg; i++) { - dvloc[i] = ModuleBase::FOUR_PI * zp * ModuleBase::e2 / ucell.omega - / pow((ucell.tpiba2 * rho_basis->gg_uniq[i]), 2); + dvloc[i] + = ModuleBase::FOUR_PI * zp * ModuleBase::e2 / ucell.omega / pow((ucell.tpiba2 * rho_basis->gg_uniq[i]), 2); } return; diff --git a/source/module_hamilt_pw/hamilt_pwdft/stress_func_mgga.cpp b/source/module_hamilt_pw/hamilt_pwdft/stress_func_mgga.cpp index c528b0f417..242c9ab04f 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/stress_func_mgga.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/stress_func_mgga.cpp @@ -1,7 +1,7 @@ -#include "module_base/timer.h" #include "module_hamilt_general/module_xc/xc_functional.h" -#include "module_parameter/parameter.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" #include "stress_func.h" #include @@ -18,10 +18,10 @@ void Stress_Func::stress_mgga(const UnitCell& ucell, ModulePW::PW_Basis_K* wfc_basis, const psi::Psi, Device>* psi_in) { - if (PARAM.inp.nspin == 4) - { - ModuleBase::WARNING_QUIT("stress_mgga", "noncollinear stress + mGGA not implemented"); - } + if (PARAM.inp.nspin == 4) + { + ModuleBase::WARNING_QUIT("stress_mgga", "noncollinear stress + mGGA not implemented"); + } ModuleBase::timer::tick("Stress", "stress_mgga"); @@ -34,42 +34,39 @@ void Stress_Func::stress_mgga(const UnitCell& ucell, using ct_Device = typename ct::PsiToContainer::type; - auto gradwfc = ct::Tensor( - ct::DataTypeToEnum>::value, - ct::DeviceTypeToEnum::value, - {nrxx * 3}); + auto gradwfc = ct::Tensor(ct::DataTypeToEnum>::value, + ct::DeviceTypeToEnum::value, + {nrxx * 3}); - auto crosstaus = ct::Tensor( - ct::DataTypeToEnum::value, - ct::DeviceTypeToEnum::value, - {PARAM.inp.nspin, nrxx * 6}); - crosstaus.zero(); // Must be zeroed out + auto crosstaus = ct::Tensor(ct::DataTypeToEnum::value, + ct::DeviceTypeToEnum::value, + {PARAM.inp.nspin, nrxx * 6}); + crosstaus.zero(); // Must be zeroed out auto cal_stress_mgga_solver = hamilt::cal_stress_mgga_op, Device>(); for (int ik = 0; ik < p_kv->get_nks(); ik++) { - if (PARAM.inp.nspin == 2) - { - current_spin = p_kv->isk[ik]; - } + if (PARAM.inp.nspin == 2) + { + current_spin = p_kv->isk[ik]; + } const int npw = p_kv->ngk[ik]; for (int ibnd = 0; ibnd < PARAM.inp.nbands; ibnd++) { const FPTYPE w1 = wg(ik, ibnd) / ucell.omega; const std::complex* psi = &psi_in[0](ik, ibnd, 0); - XC_Functional::grad_wfc, Device>(ik, - ucell.tpiba, - wfc_basis, - psi, - gradwfc.data>()); + XC_Functional::grad_wfc, Device>(ik, + ucell.tpiba, + wfc_basis, + psi, + gradwfc.data>()); - cal_stress_mgga_solver( - current_spin, - nrxx, - w1, - gradwfc.data>(), - crosstaus.data()); + cal_stress_mgga_solver(current_spin, + nrxx, + w1, + gradwfc.data>(), + crosstaus.data()); } // band loop // delete[] psi; } // k loop @@ -85,9 +82,9 @@ void Stress_Func::stress_mgga(const UnitCell& ucell, } #endif - for(int ix = 0; ix < 3; ix++) + for (int ix = 0; ix < 3; ix++) { - for(int iy = 0; iy < 3; iy++) + for (int iy = 0; iy < 3; iy++) { sigma_mgga[ix][iy] = 0.0; } @@ -100,15 +97,14 @@ void Stress_Func::stress_mgga(const UnitCell& ucell, for (int iy = 0; iy < 3; iy++) { FPTYPE delta = 0.0; - if (ix == iy) - { - delta = 1.0; - } - for (int ir = 0; ir < nrxx; ir++) + if (ix == iy) + { + delta = 1.0; + } + for (int ir = 0; ir < nrxx; ir++) { - FPTYPE x = v_ofk(is, ir) * - (chr->kin_r[is][ir] * delta - + crosstaus_pack[is][ipol2xy[ix][iy] * nrxx + ir]); + FPTYPE x = v_ofk(is, ir) + * (chr->kin_r[is][ir] * delta + crosstaus_pack[is][ipol2xy[ix][iy] * nrxx + ir]); sigma_mgga[ix][iy] += x; } } diff --git a/source/module_hamilt_pw/hamilt_pwdft/stress_func_nl.cpp b/source/module_hamilt_pw/hamilt_pwdft/stress_func_nl.cpp index 41554e37ba..e823740d1d 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/stress_func_nl.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/stress_func_nl.cpp @@ -1,12 +1,12 @@ -#include "module_base/math_polyint.h" -#include "module_parameter/parameter.h" -#include "module_base/math_ylmreal.h" -#include "module_base/memory.h" -#include "module_base/module_device/device.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/fs_nonlocal_tools.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_hamilt_pw/hamilt_pwdft/nonlocal_maths.hpp" +#include "module_parameter/parameter.h" +#include "source_base/math_polyint.h" +#include "source_base/math_ylmreal.h" +#include "source_base/memory.h" +#include "source_base/module_device/device.h" +#include "source_base/timer.h" #include "stress_func.h" // calculate the nonlocal pseudopotential stress in PW template @@ -54,7 +54,7 @@ void Stress_Func::stress_nl(ModuleBase::matrix& sigma, nl_tools.cal_vkb(ik, max_nbands); // calculate becp = for all beta functions - nl_tools.cal_becp(ik, npm, &psi_in[0](ik,0,0)); + nl_tools.cal_becp(ik, npm, &psi_in[0](ik, 0, 0)); nl_tools.reduce_pool_becp(max_nbands); // calculate dbecp = for all beta functions // calculate stress = \sum * * D_{ij} @@ -63,7 +63,7 @@ void Stress_Func::stress_nl(ModuleBase::matrix& sigma, for (int jpol = 0; jpol <= ipol; jpol++) { nl_tools.cal_vkb_deri_s(ik, max_nbands, ipol, jpol); - nl_tools.cal_dbecp_s(ik, npm, &psi_in[0](ik,0,0)); + nl_tools.cal_dbecp_s(ik, npm, &psi_in[0](ik, 0, 0)); nl_tools.cal_stress(ik, npm, true, ipol, jpol, stress_device); } } @@ -108,10 +108,10 @@ void Stress_Func::get_dvnl1(ModuleBase::ComplexMatrix& vkb, Structure_Factor* p_sf, ModulePW::PW_Basis_K* wfc_basis) { - if (PARAM.inp.test_pp) - { - ModuleBase::TITLE("Stress", "get_dvnl1"); - } + if (PARAM.inp.test_pp) + { + ModuleBase::TITLE("Stress", "get_dvnl1"); + } const int npw = wfc_basis->npwk[ik]; const int lmaxkb = nlpp->lmaxkb; @@ -122,7 +122,7 @@ void Stress_Func::get_dvnl1(ModuleBase::ComplexMatrix& vkb, const int nhm = nlpp->nhm; - assert(npw>0); + assert(npw > 0); ModuleBase::matrix vkb1(nhm, npw); vkb1.zero_out(); @@ -147,25 +147,25 @@ void Stress_Func::get_dvnl1(ModuleBase::ComplexMatrix& vkb, int jkb = 0; for (int it = 0; it < this->ucell->ntype; it++) { - if (PARAM.inp.test_pp > 1) - { - ModuleBase::GlobalFunc::OUT("it", it); - } - // calculate beta in G-space using an interpolation table + if (PARAM.inp.test_pp > 1) + { + ModuleBase::GlobalFunc::OUT("it", it); + } + // calculate beta in G-space using an interpolation table const int nbeta = this->ucell->atoms[it].ncpp.nbeta; const int nh = this->ucell->atoms[it].ncpp.nh; - if (PARAM.inp.test_pp > 1) - { - ModuleBase::GlobalFunc::OUT("nbeta", nbeta); - } + if (PARAM.inp.test_pp > 1) + { + ModuleBase::GlobalFunc::OUT("nbeta", nbeta); + } for (int nb = 0; nb < nbeta; nb++) { - if (PARAM.inp.test_pp > 1) - { - ModuleBase::GlobalFunc::OUT("ib", nb); - } + if (PARAM.inp.test_pp > 1) + { + ModuleBase::GlobalFunc::OUT("ib", nb); + } #ifdef _OPENMP #pragma omp parallel for #endif @@ -179,7 +179,6 @@ void Stress_Func::get_dvnl1(ModuleBase::ComplexMatrix& vkb, PARAM.globalv.nqx, PARAM.globalv.dq, gnorm); - } // add spherical harmonic part @@ -227,17 +226,16 @@ void Stress_Func::get_dvnl1(ModuleBase::ComplexMatrix& vkb, return; } // end get_dvnl1 - template void Stress_Func::get_dvnl2(ModuleBase::ComplexMatrix& vkb, const int ik, Structure_Factor* p_sf, ModulePW::PW_Basis_K* wfc_basis) { - if (PARAM.inp.test_pp) - { - ModuleBase::TITLE("Stress", "get_dvnl2"); - } + if (PARAM.inp.test_pp) + { + ModuleBase::TITLE("Stress", "get_dvnl2"); + } // ModuleBase::timer::tick("Stress","get_dvnl2"); const int npw = wfc_basis->npwk[ik]; const int lmaxkb = nlpp->lmaxkb; @@ -248,7 +246,7 @@ void Stress_Func::get_dvnl2(ModuleBase::ComplexMatrix& vkb, const int nhm = nlpp->nhm; - assert(npw>0); + assert(npw > 0); ModuleBase::matrix vkb1(nhm, npw); FPTYPE* vq = new FPTYPE[npw]; @@ -271,25 +269,25 @@ void Stress_Func::get_dvnl2(ModuleBase::ComplexMatrix& vkb, int jkb = 0; for (int it = 0; it < this->ucell->ntype; it++) { - if (PARAM.inp.test_pp > 1) - { - ModuleBase::GlobalFunc::OUT("it", it); - } + if (PARAM.inp.test_pp > 1) + { + ModuleBase::GlobalFunc::OUT("it", it); + } // calculate beta in G-space using an interpolation table const int nbeta = this->ucell->atoms[it].ncpp.nbeta; const int nh = this->ucell->atoms[it].ncpp.nh; - if (PARAM.inp.test_pp > 1) - { - ModuleBase::GlobalFunc::OUT("nbeta", nbeta); - } + if (PARAM.inp.test_pp > 1) + { + ModuleBase::GlobalFunc::OUT("nbeta", nbeta); + } for (int nb = 0; nb < nbeta; nb++) { - if (PARAM.inp.test_pp > 1) - { - ModuleBase::GlobalFunc::OUT("ib", nb); - } + if (PARAM.inp.test_pp > 1) + { + ModuleBase::GlobalFunc::OUT("ib", nb); + } #ifdef _OPENMP #pragma omp parallel for #endif @@ -319,7 +317,7 @@ void Stress_Func::get_dvnl2(ModuleBase::ComplexMatrix& vkb, } } } // end ih - } // end nbeta + } // end nbeta // vkb1 contains all betas including angular part for type nt // now add the structure factor and factor (-i)^l @@ -341,7 +339,7 @@ void Stress_Func::get_dvnl2(ModuleBase::ComplexMatrix& vkb, jkb += nh; delete[] sk; } // end ia - } // enddo + } // enddo delete[] gk; delete[] vq; diff --git a/source/module_hamilt_pw/hamilt_pwdft/stress_func_onsite.cpp b/source/module_hamilt_pw/hamilt_pwdft/stress_func_onsite.cpp index b649d219b8..4777585fd8 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/stress_func_onsite.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/stress_func_onsite.cpp @@ -1,21 +1,21 @@ -#include "module_base/module_device/device.h" -#include "module_base/timer.h" +#include "module_hamilt_lcao/module_deltaspin/spin_constrain.h" +#include "module_hamilt_lcao/module_dftu/dftu.h" #include "module_hamilt_pw/hamilt_pwdft/onsite_projector.h" #include "module_parameter/parameter.h" -#include "module_hamilt_lcao/module_dftu/dftu.h" -#include "module_hamilt_lcao/module_deltaspin/spin_constrain.h" +#include "source_base/module_device/device.h" +#include "source_base/timer.h" #include "stress_func.h" // calculate the nonlocal pseudopotential stress in PW template void Stress_Func::stress_onsite(ModuleBase::matrix& sigma, - const ModuleBase::matrix& wg, - const ModulePW::PW_Basis_K* wfc_basis, - const UnitCell& ucell_in, - const psi::Psi, Device>* psi_in, - ModuleSymmetry::Symmetry* p_symm) + const ModuleBase::matrix& wg, + const ModulePW::PW_Basis_K* wfc_basis, + const UnitCell& ucell_in, + const psi::Psi, Device>* psi_in, + ModuleSymmetry::Symmetry* p_symm) { ModuleBase::TITLE("Stress", "stress_onsite"); - if(psi_in == nullptr || wfc_basis == nullptr) + if (psi_in == nullptr || wfc_basis == nullptr) { return; } @@ -54,21 +54,21 @@ void Stress_Func::stress_onsite(ModuleBase::matrix& sigma, { FPTYPE* stress_device_tmp = stress_device + (ipol * 3 + jpol); onsite_p->get_fs_tools()->cal_dbecp_s(ik, npm, ipol, jpol); - if(PARAM.inp.dft_plus_u) + if (PARAM.inp.dft_plus_u) { auto* dftu = ModuleDFTU::DFTU::get_instance(); - onsite_p->get_fs_tools()->cal_stress_dftu(ik, - npm, - stress_device_tmp, - dftu->orbital_corr.data(), - dftu->get_eff_pot_pw(0), - dftu->get_size_eff_pot_pw(), - wg.c); + onsite_p->get_fs_tools()->cal_stress_dftu(ik, + npm, + stress_device_tmp, + dftu->orbital_corr.data(), + dftu->get_eff_pot_pw(0), + dftu->get_size_eff_pot_pw(), + wg.c); } - if(PARAM.inp.sc_mag_switch) + if (PARAM.inp.sc_mag_switch) { - spinconstrain::SpinConstrain>& sc = - spinconstrain::SpinConstrain>::getScInstance(); + spinconstrain::SpinConstrain>& sc + = spinconstrain::SpinConstrain>::getScInstance(); const std::vector>& lambda = sc.get_sc_lambda(); onsite_p->get_fs_tools()->cal_stress_dspin(ik, npm, stress_device_tmp, lambda.data(), wg.c); } diff --git a/source/module_hamilt_pw/hamilt_pwdft/stress_func_us.cpp b/source/module_hamilt_pw/hamilt_pwdft/stress_func_us.cpp index 3273584050..89f19ac09f 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/stress_func_us.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/stress_func_us.cpp @@ -1,10 +1,10 @@ -#include "module_base/libm/libm.h" -#include "module_parameter/parameter.h" -#include "module_base/math_polyint.h" -#include "module_base/math_ylmreal.h" -#include "module_base/timer.h" #include "module_elecstate/elecstate_pw.h" #include "module_hamilt_pw/hamilt_pwdft/nonlocal_maths.hpp" +#include "module_parameter/parameter.h" +#include "source_base/libm/libm.h" +#include "source_base/math_polyint.h" +#include "source_base/math_ylmreal.h" +#include "source_base/timer.h" #include "stress_pw.h" // computes the part of the crystal stress which is due @@ -52,11 +52,7 @@ void Stress_PW::stress_us(ModuleBase::matrix& sigma, for (int ipol = 0; ipol < 3; ipol++) { double* gcar_ptr = reinterpret_cast(rho_basis->gcar); - hamilt::Nonlocal_maths::dylmr2(nlpp.lmaxq * nlpp.lmaxq, - npw, - gcar_ptr, - dylmk0.c, - ipol); + hamilt::Nonlocal_maths::dylmr2(nlpp.lmaxq * nlpp.lmaxq, npw, gcar_ptr, dylmk0.c, ipol); for (int it = 0; it < ucell.ntype; it++) { Atom* atom = &ucell.atoms[it]; @@ -202,10 +198,10 @@ void Stress_Func::dqvan2(const pseudopot_cell_vnl& nlpp, const ModuleBase::matrix& dylmk0, std::complex* dqg) { - if (PARAM.inp.test_pp) - { - ModuleBase::TITLE("Stress", "dqvan2"); - } + if (PARAM.inp.test_pp) + { + ModuleBase::TITLE("Stress", "dqvan2"); + } // computes the indices which correspond to ih,jh const int nb = nlpp.indv(itype, ih); diff --git a/source/module_hamilt_pw/hamilt_pwdft/stress_pw.cpp b/source/module_hamilt_pw/hamilt_pwdft/stress_pw.cpp index 98cb66b2dc..96cccd5fd1 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/stress_pw.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/stress_pw.cpp @@ -1,9 +1,9 @@ #include "stress_pw.h" -#include "module_base/timer.h" #include "module_hamilt_general/module_vdw/vdw.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/output_log.h" +#include "source_base/timer.h" template void Stress_PW::cal_stress(ModuleBase::matrix& sigmatot, @@ -128,7 +128,6 @@ void Stress_PW::cal_stress(ModuleBase::matrix& sigmatot, this->stress_exx(sigmaexx, this->pelec->wg, rho_basis, wfc_basis, p_kv, d_psi_in, ucell); } - for (int ipol = 0; ipol < 3; ipol++) { for (int jpol = 0; jpol < 3; jpol++) diff --git a/source/module_hamilt_pw/hamilt_pwdft/structure_factor.cpp b/source/module_hamilt_pw/hamilt_pwdft/structure_factor.cpp index c751b91cab..2800b7e8f0 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/structure_factor.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/structure_factor.cpp @@ -1,14 +1,14 @@ -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_parameter/parameter.h" #include "structure_factor.h" -#include "module_base/constants.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/math_bspline.h" -#include "module_base/memory.h" -#include "module_base/timer.h" -#include "module_base/libm/libm.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/libm/libm.h" +#include "source_base/math_bspline.h" +#include "source_base/memory.h" +#include "source_base/timer.h" #ifdef _OPENMP #include @@ -17,7 +17,7 @@ Structure_Factor::Structure_Factor() { // LCAO basis doesn't support GPU acceleration on this function currently. - if(PARAM.inp.basis_type == "pw") + if (PARAM.inp.basis_type == "pw") { this->device = PARAM.inp.device; } @@ -46,7 +46,7 @@ Structure_Factor::~Structure_Factor() // called in input.cpp void Structure_Factor::set(const ModulePW::PW_Basis* rho_basis_in, const int& nbspline_in) { - ModuleBase::TITLE("PW_Basis","set"); + ModuleBase::TITLE("PW_Basis", "set"); this->rho_basis = rho_basis_in; this->nbspline = nbspline_in; return; @@ -54,101 +54,113 @@ void Structure_Factor::set(const ModulePW::PW_Basis* rho_basis_in, const int& nb // Peize Lin optimize and add OpenMP 2021.04.01 // Calculate structure factor -void Structure_Factor::setup_structure_factor(const UnitCell* Ucell, const Parallel_Grid& pgrid, const ModulePW::PW_Basis* rho_basis) +void Structure_Factor::setup_structure_factor(const UnitCell* Ucell, + const Parallel_Grid& pgrid, + const ModulePW::PW_Basis* rho_basis) { - ModuleBase::TITLE("PW_Basis","setup_structure_factor"); - ModuleBase::timer::tick("PW_Basis","setup_struc_factor"); + ModuleBase::TITLE("PW_Basis", "setup_structure_factor"); + ModuleBase::timer::tick("PW_Basis", "setup_struc_factor"); const std::complex ci_tpi = ModuleBase::NEG_IMAG_UNIT * ModuleBase::TWO_PI; this->ucell = Ucell; this->strucFac.create(Ucell->ntype, rho_basis->npw); - ModuleBase::Memory::record("SF::strucFac", sizeof(std::complex) * Ucell->ntype*rho_basis->npw); + ModuleBase::Memory::record("SF::strucFac", sizeof(std::complex) * Ucell->ntype * rho_basis->npw); -// std::string outstr; -// outstr = PARAM.globalv.global_out_dir + "strucFac.dat"; -// std::ofstream ofs( outstr.c_str() ) ; + // std::string outstr; + // outstr = PARAM.globalv.global_out_dir + "strucFac.dat"; + // std::ofstream ofs( outstr.c_str() ) ; bool usebspline; - if(nbspline > 0) { usebspline = true; - } else { usebspline = false;} - - if(usebspline) + if (nbspline > 0) { - nbspline = int((nbspline+1)/2)*2; // nbspline must be a positive even number. + usebspline = true; + } + else + { + usebspline = false; + } + + if (usebspline) + { + nbspline = int((nbspline + 1) / 2) * 2; // nbspline must be a positive even number. this->bspline_sf(nbspline, Ucell, pgrid, rho_basis); } else { - for (int it=0; itntype; it++) + for (int it = 0; it < Ucell->ntype; it++) { - const int na = Ucell->atoms[it].na; - const ModuleBase::Vector3 * const tau = Ucell->atoms[it].tau.data(); + const int na = Ucell->atoms[it].na; + const ModuleBase::Vector3* const tau = Ucell->atoms[it].tau.data(); #ifdef _OPENMP - #pragma omp parallel for +#pragma omp parallel for #endif - for (int ig=0; ignpw; ig++) + for (int ig = 0; ig < rho_basis->npw; ig++) { - const ModuleBase::Vector3 gcar_ig = rho_basis->gcar[ig]; + const ModuleBase::Vector3 gcar_ig = rho_basis->gcar[ig]; std::complex sum_phase = ModuleBase::ZERO; - for (int ia=0; iastrucFac(it,ig) = sum_phase; + this->strucFac(it, ig) = sum_phase; } } } -// ofs.close(); + // ofs.close(); - int i,j; //ng; - this->eigts1.create(Ucell->nat, 2*rho_basis->nx + 1); - this->eigts2.create(Ucell->nat, 2*rho_basis->ny + 1); - this->eigts3.create(Ucell->nat, 2*rho_basis->nz + 1); + int i, j; // ng; + this->eigts1.create(Ucell->nat, 2 * rho_basis->nx + 1); + this->eigts2.create(Ucell->nat, 2 * rho_basis->ny + 1); + this->eigts3.create(Ucell->nat, 2 * rho_basis->nz + 1); - ModuleBase::Memory::record("SF::eigts123",sizeof(std::complex) * (Ucell->nat*2 * (rho_basis->nx + rho_basis->ny + rho_basis->nz) + 3)); + ModuleBase::Memory::record("SF::eigts123", + sizeof(std::complex) + * (Ucell->nat * 2 * (rho_basis->nx + rho_basis->ny + rho_basis->nz) + 3)); ModuleBase::Vector3 gtau; int inat = 0; for (i = 0; i < Ucell->ntype; i++) { - for (j = 0; j < Ucell->atoms[i].na;j++) + for (j = 0; j < Ucell->atoms[i].na; j++) { - gtau = Ucell->G * Ucell->atoms[i].tau[j]; //HLX: fixed on 10/13/2006 + gtau = Ucell->G * Ucell->atoms[i].tau[j]; // HLX: fixed on 10/13/2006 #ifdef _OPENMP #pragma omp parallel -{ - #pragma omp for schedule(static, 16) -#endif - for (int n1 = -rho_basis->nx; n1 <= rho_basis->nx;n1++) { - double arg = n1 * gtau.x; - this->eigts1(inat, n1 + rho_basis->nx) = ModuleBase::libm::exp( ci_tpi*arg ); - } +#pragma omp for schedule(static, 16) +#endif + for (int n1 = -rho_basis->nx; n1 <= rho_basis->nx; n1++) + { + double arg = n1 * gtau.x; + this->eigts1(inat, n1 + rho_basis->nx) = ModuleBase::libm::exp(ci_tpi * arg); + } #ifdef _OPENMP - #pragma omp for schedule(static, 16) +#pragma omp for schedule(static, 16) #endif - for (int n2 = -rho_basis->ny; n2 <= rho_basis->ny;n2++) - { - double arg = n2 * gtau.y; - this->eigts2(inat, n2 + rho_basis->ny) = ModuleBase::libm::exp( ci_tpi*arg ); - } + for (int n2 = -rho_basis->ny; n2 <= rho_basis->ny; n2++) + { + double arg = n2 * gtau.y; + this->eigts2(inat, n2 + rho_basis->ny) = ModuleBase::libm::exp(ci_tpi * arg); + } #ifdef _OPENMP - #pragma omp for schedule(static, 16) +#pragma omp for schedule(static, 16) #endif - for (int n3 = -rho_basis->nz; n3 <= rho_basis->nz;n3++) - { - double arg = n3 * gtau.z; - this->eigts3(inat, n3 + rho_basis->nz) = ModuleBase::libm::exp( ci_tpi*arg ); - } + for (int n3 = -rho_basis->nz; n3 <= rho_basis->nz; n3++) + { + double arg = n3 * gtau.z; + this->eigts3(inat, n3 + rho_basis->nz) = ModuleBase::libm::exp(ci_tpi * arg); + } #ifdef _OPENMP -} + } #endif inat++; } } - - if (device == "gpu") { - if (PARAM.globalv.has_float_data) { + + if (device == "gpu") + { + if (PARAM.globalv.has_float_data) + { resmem_cd_op()(this->c_eigts1, Ucell->nat * (2 * rho_basis->nx + 1)); resmem_cd_op()(this->c_eigts2, Ucell->nat * (2 * rho_basis->ny + 1)); resmem_cd_op()(this->c_eigts3, Ucell->nat * (2 * rho_basis->nz + 1)); @@ -163,8 +175,10 @@ void Structure_Factor::setup_structure_factor(const UnitCell* Ucell, const Paral syncmem_z2z_h2d_op()(this->z_eigts2, this->eigts2.c, Ucell->nat * (2 * rho_basis->ny + 1)); syncmem_z2z_h2d_op()(this->z_eigts3, this->eigts3.c, Ucell->nat * (2 * rho_basis->nz + 1)); } - else { - if (PARAM.globalv.has_float_data) { + else + { + if (PARAM.globalv.has_float_data) + { resmem_ch_op()(this->c_eigts1, Ucell->nat * (2 * rho_basis->nx + 1)); resmem_ch_op()(this->c_eigts2, Ucell->nat * (2 * rho_basis->ny + 1)); resmem_ch_op()(this->c_eigts3, Ucell->nat * (2 * rho_basis->nz + 1)); @@ -177,18 +191,18 @@ void Structure_Factor::setup_structure_factor(const UnitCell* Ucell, const Paral this->z_eigts3 = this->eigts3.c; // There's no need to delete double precision pointers while in a CPU environment. } - ModuleBase::timer::tick("PW_Basis","setup_struc_factor"); + ModuleBase::timer::tick("PW_Basis", "setup_struc_factor"); return; } // -//DESCRIPTION: +// DESCRIPTION: // Calculate structure factor with Cardinal B-spline interpolation // Ref: J. Chem. Phys. 103, 8577 (1995) // qianrui create 2021-9-17 -//INPUT LIST: +// INPUT LIST: // norder: the order of Cardinal B-spline base functions -//FURTHER OPTIMIZATION: +// FURTHER OPTIMIZATION: // 1. Use "r2c" fft // 2. Add parallel algorithm for fftw or na loop // @@ -197,24 +211,24 @@ void Structure_Factor::bspline_sf(const int norder, const Parallel_Grid& pgrid, const ModulePW::PW_Basis* rho_basis) { - double *r = new double [rho_basis->nxyz]; - double *tmpr = new double[rho_basis->nrxx]; - double *zpiece = new double[rho_basis->nxy]; - std::complex *b1 = new std::complex [rho_basis->nx]; - std::complex *b2 = new std::complex [rho_basis->ny]; - std::complex *b3 = new std::complex [rho_basis->nz]; + double* r = new double[rho_basis->nxyz]; + double* tmpr = new double[rho_basis->nrxx]; + double* zpiece = new double[rho_basis->nxy]; + std::complex* b1 = new std::complex[rho_basis->nx]; + std::complex* b2 = new std::complex[rho_basis->ny]; + std::complex* b3 = new std::complex[rho_basis->nz]; - for (int it=0; itntype; it++) + for (int it = 0; it < Ucell->ntype; it++) { - const int na = Ucell->atoms[it].na; - const ModuleBase::Vector3 * const taud = Ucell->atoms[it].taud.data(); - ModuleBase::GlobalFunc::ZEROS(r,rho_basis->nxyz); + const int na = Ucell->atoms[it].na; + const ModuleBase::Vector3* const taud = Ucell->atoms[it].taud.data(); + ModuleBase::GlobalFunc::ZEROS(r, rho_basis->nxyz); - //A parallel algorithm can be added in the future. + // A parallel algorithm can be added in the future. #ifdef _OPENMP - #pragma omp parallel for +#pragma omp parallel for #endif - for(int ia = 0 ; ia < na ; ++ia) + for (int ia = 0; ia < na; ++ia) { double gridx = taud[ia].x * rho_basis->nx; double gridy = taud[ia].y * rho_basis->ny; @@ -222,7 +236,7 @@ void Structure_Factor::bspline_sf(const int norder, double dx = gridx - floor(gridx); double dy = gridy - floor(gridy); double dz = gridz - floor(gridz); - //I'm not sure if there is a mod function for double data + // I'm not sure if there is a mod function for double data ModuleBase::Bspline bsx, bsy, bsz; bsx.init(norder, 1, 0); @@ -232,65 +246,63 @@ void Structure_Factor::bspline_sf(const int norder, bsy.getbspline(dy); bsz.getbspline(dz); - for(int iz = 0 ; iz <= norder ; ++iz) + for (int iz = 0; iz <= norder; ++iz) { - int icz = int(rho_basis->nz*10-iz+floor(gridz))%rho_basis->nz; - for(int iy = 0 ; iy <= norder ; ++iy) + int icz = int(rho_basis->nz * 10 - iz + floor(gridz)) % rho_basis->nz; + for (int iy = 0; iy <= norder; ++iy) { - int icy = int(rho_basis->ny*10-iy+floor(gridy))%rho_basis->ny; - for(int ix = 0 ; ix <= norder ; ++ix ) + int icy = int(rho_basis->ny * 10 - iy + floor(gridy)) % rho_basis->ny; + for (int ix = 0; ix <= norder; ++ix) { - int icx = int(rho_basis->nx*10-ix+floor(gridx))%rho_basis->nx; + int icx = int(rho_basis->nx * 10 - ix + floor(gridx)) % rho_basis->nx; #ifdef _OPENMP - #pragma omp atomic +#pragma omp atomic #endif - r[icz*rho_basis->ny*rho_basis->nx + icx*rho_basis->ny + icy] += bsz.bezier_ele(iz) - * bsy.bezier_ele(iy) - * bsx.bezier_ele(ix); + r[icz * rho_basis->ny * rho_basis->nx + icx * rho_basis->ny + icy] + += bsz.bezier_ele(iz) * bsy.bezier_ele(iy) * bsx.bezier_ele(ix); } } } } - - //distribute data to different processors for UFFT + + // distribute data to different processors for UFFT //--------------------------------------------------- - for(int iz = 0; iz < rho_basis->nz; iz++) - { - if(GlobalV::MY_RANK==0) - { + for (int iz = 0; iz < rho_basis->nz; iz++) + { + if (GlobalV::MY_RANK == 0) + { #ifdef _OPENMP - #pragma omp parallel for schedule(static, 512) +#pragma omp parallel for schedule(static, 512) #endif - for(int ir = 0; ir < rho_basis->nxy; ir++) - { - zpiece[ir] = r[iz*rho_basis->nxy + ir]; - } - } - - #ifdef __MPI - pgrid.zpiece_to_all(zpiece, iz, tmpr); - #endif - - } + for (int ir = 0; ir < rho_basis->nxy; ir++) + { + zpiece[ir] = r[iz * rho_basis->nxy + ir]; + } + } + +#ifdef __MPI + pgrid.zpiece_to_all(zpiece, iz, tmpr); +#endif + } //--------------------------------------------------- - //It should be optimized with r2c - rho_basis->real2recip(tmpr, &strucFac(it,0)); - this->bsplinecoef(b1,b2,b3,rho_basis->nx, rho_basis->ny, rho_basis->nz, norder); + // It should be optimized with r2c + rho_basis->real2recip(tmpr, &strucFac(it, 0)); + this->bsplinecoef(b1, b2, b3, rho_basis->nx, rho_basis->ny, rho_basis->nz, norder); #ifdef _OPENMP - #pragma omp parallel for schedule(static, 128) +#pragma omp parallel for schedule(static, 128) #endif - for(int ig = 0 ; ig < rho_basis->npw ; ++ig) + for (int ig = 0; ig < rho_basis->npw; ++ig) { - int idx = int(rho_basis->gdirect[ig].x+0.1+rho_basis->nx)%rho_basis->nx; - int idy = int(rho_basis->gdirect[ig].y+0.1+rho_basis->ny)%rho_basis->ny; - int idz = int(rho_basis->gdirect[ig].z+0.1+rho_basis->nz)%rho_basis->nz; - strucFac(it,ig) *= ( b1[idx] * b2[idy] * b3[idz] * double(rho_basis->nxyz) ); + int idx = int(rho_basis->gdirect[ig].x + 0.1 + rho_basis->nx) % rho_basis->nx; + int idy = int(rho_basis->gdirect[ig].y + 0.1 + rho_basis->ny) % rho_basis->ny; + int idz = int(rho_basis->gdirect[ig].z + 0.1 + rho_basis->nz) % rho_basis->nz; + strucFac(it, ig) *= (b1[idx] * b2[idy] * b3[idz] * double(rho_basis->nxyz)); } - } + } delete[] r; delete[] tmpr; - delete[] zpiece; + delete[] zpiece; delete[] b1; delete[] b2; delete[] b3; @@ -298,8 +310,13 @@ void Structure_Factor::bspline_sf(const int norder, return; } -void Structure_Factor:: bsplinecoef(std::complex *b1, std::complex *b2, std::complex *b3, - const int nx, const int ny, const int nz, const int norder) +void Structure_Factor::bsplinecoef(std::complex* b1, + std::complex* b2, + std::complex* b3, + const int nx, + const int ny, + const int nz, + const int norder) { const std::complex ci_tpi = ModuleBase::NEG_IMAG_UNIT * ModuleBase::TWO_PI; ModuleBase::Bspline bsp; @@ -307,76 +324,76 @@ void Structure_Factor:: bsplinecoef(std::complex *b1, std::complex fracx=0; - for(int io = 0 ; io < norder - 1 ; ++io) +#pragma omp for schedule(static, 16) +#endif + for (int ix = 0; ix < nx; ++ix) { - fracx += bsp.bezier_ele(io)*ModuleBase::libm::exp(ci_tpi*double(ix)/double(nx)*double(io)); + std::complex fracx = 0; + for (int io = 0; io < norder - 1; ++io) + { + fracx += bsp.bezier_ele(io) * ModuleBase::libm::exp(ci_tpi * double(ix) / double(nx) * double(io)); + } + b1[ix] = ModuleBase::libm::exp(ci_tpi * double(norder * ix) / double(nx)) / fracx; } - b1[ix] = ModuleBase::libm::exp(ci_tpi*double(norder*ix)/double(nx))/fracx; - } #ifdef _OPENMP - #pragma omp for schedule(static, 16) +#pragma omp for schedule(static, 16) #endif - for(int iy = 0 ; iy < ny ; ++iy) - { - std::complex fracy=0; - for(int io = 0 ; io < norder - 1 ; ++io) + for (int iy = 0; iy < ny; ++iy) { - fracy += bsp.bezier_ele(io)*ModuleBase::libm::exp(ci_tpi*double(iy)/double(ny)*double(io)); + std::complex fracy = 0; + for (int io = 0; io < norder - 1; ++io) + { + fracy += bsp.bezier_ele(io) * ModuleBase::libm::exp(ci_tpi * double(iy) / double(ny) * double(io)); + } + b2[iy] = ModuleBase::libm::exp(ci_tpi * double(norder * iy) / double(ny)) / fracy; } - b2[iy] = ModuleBase::libm::exp(ci_tpi*double(norder*iy)/double(ny))/fracy; - } #ifdef _OPENMP - #pragma omp for schedule(static, 16) +#pragma omp for schedule(static, 16) #endif - for(int iz = 0 ; iz < nz ; ++iz) - { - std::complex fracz=0; - for(int io = 0 ; io < norder - 1 ; ++io) + for (int iz = 0; iz < nz; ++iz) { - fracz += bsp.bezier_ele(io)*ModuleBase::libm::exp(ci_tpi*double(iz)/double(nz)*double(io)); + std::complex fracz = 0; + for (int io = 0; io < norder - 1; ++io) + { + fracz += bsp.bezier_ele(io) * ModuleBase::libm::exp(ci_tpi * double(iz) / double(nz) * double(io)); + } + b3[iz] = ModuleBase::libm::exp(ci_tpi * double(norder * iz) / double(nz)) / fracz; } - b3[iz] = ModuleBase::libm::exp(ci_tpi*double(norder*iz)/double(nz))/fracz; - } #ifdef _OPENMP -} + } #endif } template <> -std::complex * Structure_Factor::get_eigts1_data() const +std::complex* Structure_Factor::get_eigts1_data() const { return this->c_eigts1; } template <> -std::complex * Structure_Factor::get_eigts1_data() const +std::complex* Structure_Factor::get_eigts1_data() const { return this->z_eigts1; } template <> -std::complex * Structure_Factor::get_eigts2_data() const +std::complex* Structure_Factor::get_eigts2_data() const { return this->c_eigts2; } template <> -std::complex * Structure_Factor::get_eigts2_data() const +std::complex* Structure_Factor::get_eigts2_data() const { return this->z_eigts2; } template <> -std::complex * Structure_Factor::get_eigts3_data() const +std::complex* Structure_Factor::get_eigts3_data() const { return this->c_eigts3; } template <> -std::complex * Structure_Factor::get_eigts3_data() const +std::complex* Structure_Factor::get_eigts3_data() const { return this->z_eigts3; } \ No newline at end of file diff --git a/source/module_hamilt_pw/hamilt_pwdft/structure_factor.h b/source/module_hamilt_pw/hamilt_pwdft/structure_factor.h index 2f3e1931c8..7b8273e87f 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/structure_factor.h +++ b/source/module_hamilt_pw/hamilt_pwdft/structure_factor.h @@ -1,16 +1,16 @@ #ifndef PLANEWAVE_H #define PLANEWAVE_H -#include "module_base/complexmatrix.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/unitcell.h" #include "module_hamilt_pw/hamilt_pwdft/parallel_grid.h" #include "module_psi/psi.h" +#include "source_base/complexmatrix.h" class Structure_Factor { -public: + public: Structure_Factor(); ~Structure_Factor(); void set(const ModulePW::PW_Basis* rho_basis_in, const int& nbspline_in); @@ -19,33 +19,36 @@ class Structure_Factor // Part 4: G vectors in reciprocal FFT box //=============================================== public: - int nbspline=0; + int nbspline = 0; - // structure factor (ntype, ngmc) + // structure factor (ntype, ngmc) ModuleBase::ComplexMatrix strucFac; void setup_structure_factor(const UnitCell* Ucell, const Parallel_Grid& pgrid, const ModulePW::PW_Basis* rho_basis); // Calculate structure factors /// calculate structure factors through Cardinal B-spline interpolation - void bspline_sf( - const int, - const UnitCell* Ucell, - const Parallel_Grid& pgrid, - const ModulePW::PW_Basis* rho_basis); - void bsplinecoef(std::complex *b1, std::complex *b2, std::complex *b3, - const int nx, const int ny, const int nz, const int norder); - + void bspline_sf(const int, const UnitCell* Ucell, const Parallel_Grid& pgrid, const ModulePW::PW_Basis* rho_basis); + void bsplinecoef(std::complex* b1, + std::complex* b2, + std::complex* b3, + const int nx, + const int ny, + const int nz, + const int norder); -public: - // phase of e^{-iG*tau_s} - ModuleBase::ComplexMatrix eigts1; // dimension: [Ucell->nat, 2*this->ncx + 1] - ModuleBase::ComplexMatrix eigts2; // dimension: [Ucell->nat, 2*this->ncy + 1] + public: + // phase of e^{-iG*tau_s} + ModuleBase::ComplexMatrix eigts1; // dimension: [Ucell->nat, 2*this->ncx + 1] + ModuleBase::ComplexMatrix eigts2; // dimension: [Ucell->nat, 2*this->ncy + 1] ModuleBase::ComplexMatrix eigts3; // dimension: [Ucell->nat, 2*this->ncz + 1] - template std::complex * get_eigts1_data() const; - template std::complex * get_eigts2_data() const; - template std::complex * get_eigts3_data() const; + template + std::complex* get_eigts1_data() const; + template + std::complex* get_eigts2_data() const; + template + std::complex* get_eigts3_data() const; public: // sf with k points @@ -59,10 +62,10 @@ class Structure_Factor ModuleBase::Vector3 q); private: - const UnitCell* ucell=nullptr; - std::complex * c_eigts1 = nullptr, * c_eigts2 = nullptr, * c_eigts3 = nullptr; - std::complex * z_eigts1 = nullptr, * z_eigts2 = nullptr, * z_eigts3 = nullptr; + const UnitCell* ucell = nullptr; + std::complex*c_eigts1 = nullptr, *c_eigts2 = nullptr, *c_eigts3 = nullptr; + std::complex*z_eigts1 = nullptr, *z_eigts2 = nullptr, *z_eigts3 = nullptr; const ModulePW::PW_Basis* rho_basis = nullptr; std::string device = "cpu"; }; -#endif //PlaneWave class +#endif // PlaneWave class diff --git a/source/module_hamilt_pw/hamilt_pwdft/structure_factor_k.cpp b/source/module_hamilt_pw/hamilt_pwdft/structure_factor_k.cpp index bca92ac1cf..ab26283579 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/structure_factor_k.cpp +++ b/source/module_hamilt_pw/hamilt_pwdft/structure_factor_k.cpp @@ -1,8 +1,8 @@ -#include "module_base/memory.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_hamilt_pw/hamilt_pwdft/kernels/wf_op.h" -#include "module_base/module_device/device.h" +#include "source_base/memory.h" +#include "source_base/module_device/device.h" +#include "source_base/timer.h" #include "structure_factor.h" std::complex* Structure_Factor::get_sk(const int ik, const int it, @@ -13,7 +13,7 @@ std::complex* Structure_Factor::get_sk(const int ik, const double arg = (wfc_basis->kvec_c[ik] * ucell->atoms[it].tau[ia]) * ModuleBase::TWO_PI; const std::complex kphase = std::complex(cos(arg), -sin(arg)); const int npw = wfc_basis->npwk[ik]; - std::complex *sk = new std::complex[npw]; + std::complex* sk = new std::complex[npw]; const int nx = wfc_basis->nx, ny = wfc_basis->ny, nz = wfc_basis->nz; #ifdef _OPENMP #pragma omp parallel for @@ -26,15 +26,15 @@ std::complex* Structure_Factor::get_sk(const int ik, const int ixy = wfc_basis->is2fftixy[is]; int ix = ixy / wfc_basis->fftny; int iy = ixy % wfc_basis->fftny; - if (ix >= int(nx / 2) + 1) + if (ix >= int(nx / 2) + 1) { ix -= nx; } - if (iy >= int(ny / 2) + 1) + if (iy >= int(ny / 2) + 1) { iy -= ny; } - if (iz >= int(nz / 2) + 1) + if (iz >= int(nz / 2) + 1) { iz -= nz; } @@ -68,11 +68,11 @@ void Structure_Factor::get_sk(Device* ctx, using syncmem_var_op = base_device::memory::synchronize_memory_op; int iat = 0, _npw = wfc_basis->npwk[ik], eigts1_nc = this->eigts1.nc, eigts2_nc = this->eigts2.nc, - eigts3_nc = this->eigts3.nc; + eigts3_nc = this->eigts3.nc; int *igl2isz = nullptr, *is2fftixy = nullptr, *atom_na = nullptr, *h_atom_na = new int[ucell->ntype]; FPTYPE *atom_tau = nullptr, *h_atom_tau = new FPTYPE[ucell->nat * 3], *kvec = wfc_basis->get_kvec_c_data(); - std::complex *eigts1 = this->get_eigts1_data(), *eigts2 = this->get_eigts2_data(), - *eigts3 = this->get_eigts3_data(); + std::complex*eigts1 = this->get_eigts1_data(), *eigts2 = this->get_eigts2_data(), + *eigts3 = this->get_eigts3_data(); for (int it = 0; it < ucell->ntype; it++) { h_atom_na[it] = ucell->atoms[it].na; @@ -84,7 +84,7 @@ void Structure_Factor::get_sk(Device* ctx, { int it = ucell->iat2it[iat]; int ia = ucell->iat2ia[iat]; - auto *tau = reinterpret_cast(ucell->atoms[it].tau.data()); + auto* tau = reinterpret_cast(ucell->atoms[it].tau.data()); h_atom_tau[iat * 3 + 0] = static_cast(tau[ia * 3 + 0]); h_atom_tau[iat * 3 + 1] = static_cast(tau[ia * 3 + 1]); h_atom_tau[iat * 3 + 2] = static_cast(tau[ia * 3 + 2]); @@ -150,7 +150,7 @@ std::complex* Structure_Factor::get_skq(int ik, ModuleBase::Vector3 q) // pengfei 2016-11-23 { const int npw = wfc_basis->npwk[ik]; - std::complex *skq = new std::complex[npw]; + std::complex* skq = new std::complex[npw]; for (int ig = 0; ig < npw; ig++) { diff --git a/source/module_hamilt_pw/hamilt_pwdft/test/CMakeLists.txt b/source/module_hamilt_pw/hamilt_pwdft/test/CMakeLists.txt index 96f47a53f3..a9e185b3ef 100644 --- a/source/module_hamilt_pw/hamilt_pwdft/test/CMakeLists.txt +++ b/source/module_hamilt_pw/hamilt_pwdft/test/CMakeLists.txt @@ -7,19 +7,19 @@ AddTest( TARGET pwdft_soc LIBS parameter ${math_libs} SOURCES soc_test.cpp ../soc.cpp - ../../../module_base/global_variable.cpp - ../../../module_base/global_function.cpp - ../../../module_base/global_file.cpp - ../../../module_base/tool_quit.cpp - ../../../module_base/global_variable.cpp - ../../../module_base/global_file.cpp - ../../../module_base/memory.cpp - ../../../module_base/timer.cpp - ../../../module_base/blas_connector_base.cpp ../../../module_base/blas_connector_vector.cpp ../../../module_base/blas_connector_matrix.cpp - ../../../module_base/parallel_global.cpp - ../../../module_base/parallel_comm.cpp - ../../../module_base/parallel_common.cpp - ../../../module_base/parallel_reduce.cpp + ../../../source_base/global_variable.cpp + ../../../source_base/global_function.cpp + ../../../source_base/global_file.cpp + ../../../source_base/tool_quit.cpp + ../../../source_base/global_variable.cpp + ../../../source_base/global_file.cpp + ../../../source_base/memory.cpp + ../../../source_base/timer.cpp + ../../../source_base/blas_connector_base.cpp ../../../source_base/blas_connector_vector.cpp ../../../source_base/blas_connector_matrix.cpp + ../../../source_base/parallel_global.cpp + ../../../source_base/parallel_comm.cpp + ../../../source_base/parallel_common.cpp + ../../../source_base/parallel_reduce.cpp ) AddTest( diff --git a/source/module_hamilt_pw/hamilt_stodft/hamilt_sdft_pw.cpp b/source/module_hamilt_pw/hamilt_stodft/hamilt_sdft_pw.cpp index 4bf6033477..f54e6fc021 100644 --- a/source/module_hamilt_pw/hamilt_stodft/hamilt_sdft_pw.cpp +++ b/source/module_hamilt_pw/hamilt_stodft/hamilt_sdft_pw.cpp @@ -1,6 +1,7 @@ #include "hamilt_sdft_pw.h" -#include "module_base/timer.h" + #include "kernels/hpsi_norm_op.h" +#include "source_base/timer.h" namespace hamilt { @@ -14,7 +15,7 @@ HamiltSdftPW::HamiltSdftPW(elecstate::Potential* pot_in, const int& npol, Real* emin_in, Real* emax_in) - : HamiltPW(pot_in, wfc_basis, p_kv, nlpp,ucell), ngk(p_kv->ngk) + : HamiltPW(pot_in, wfc_basis, p_kv, nlpp, ucell), ngk(p_kv->ngk) { this->classname = "HamiltSdftPW"; this->npwk_max = wfc_basis->npwk_max; @@ -27,7 +28,7 @@ template void HamiltSdftPW::hPsi(const T* psi_in, T* hpsi, const int& nbands) { auto call_act = [&, this](const Operator* op, const bool& is_first_node) -> void { - op->act(nbands, this->npwk_max, this->npol, psi_in, hpsi, this->ngk[op->get_ik()], is_first_node); + op->act(nbands, this->npwk_max, this->npol, psi_in, hpsi, this->ngk[op->get_ik()], is_first_node); }; ModuleBase::timer::tick("HamiltSdftPW", "hPsi"); diff --git a/source/module_hamilt_pw/hamilt_stodft/kernels/hpsi_norm_op.cpp b/source/module_hamilt_pw/hamilt_stodft/kernels/hpsi_norm_op.cpp index b75da7900c..a2227cf767 100644 --- a/source/module_hamilt_pw/hamilt_stodft/kernels/hpsi_norm_op.cpp +++ b/source/module_hamilt_pw/hamilt_stodft/kernels/hpsi_norm_op.cpp @@ -1,6 +1,6 @@ #include "hpsi_norm_op.h" -#include "module_base/module_device/device.h" +#include "source_base/module_device/device.h" namespace hamilt { template diff --git a/source/module_hamilt_pw/hamilt_stodft/kernels/hpsi_norm_op.h b/source/module_hamilt_pw/hamilt_stodft/kernels/hpsi_norm_op.h index b422916ae8..2212c4ddb1 100644 --- a/source/module_hamilt_pw/hamilt_stodft/kernels/hpsi_norm_op.h +++ b/source/module_hamilt_pw/hamilt_stodft/kernels/hpsi_norm_op.h @@ -1,7 +1,8 @@ #ifndef HPSI_NORM_OP_H #define HPSI_NORM_OP_H +#include "source_base/module_device/device.h" + #include -#include "module_base/module_device/device.h" namespace hamilt { template diff --git a/source/module_hamilt_pw/hamilt_stodft/sto_che.cpp b/source/module_hamilt_pw/hamilt_stodft/sto_che.cpp index 9facef1ddf..4b90aba82c 100644 --- a/source/module_hamilt_pw/hamilt_stodft/sto_che.cpp +++ b/source/module_hamilt_pw/hamilt_stodft/sto_che.cpp @@ -1,8 +1,9 @@ #include "sto_che.h" -#include "module_base/blas_connector.h" -#include "module_base/module_device/device.h" -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/module_container/ATen/kernels/blas.h" + +#include "source_base/blas_connector.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_container/ATen/kernels/blas.h" +#include "source_base/module_device/device.h" template StoChe::~StoChe() diff --git a/source/module_hamilt_pw/hamilt_stodft/sto_che.h b/source/module_hamilt_pw/hamilt_stodft/sto_che.h index e57dfb5e78..c361bb5b91 100644 --- a/source/module_hamilt_pw/hamilt_stodft/sto_che.h +++ b/source/module_hamilt_pw/hamilt_stodft/sto_che.h @@ -1,8 +1,8 @@ #ifndef STO_CHE_H #define STO_CHE_H -#include "module_base/math_chebyshev.h" -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/module_container/ATen/kernels/blas.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/math_chebyshev.h" +#include "source_base/module_container/ATen/kernels/blas.h" template class StoChe @@ -56,9 +56,7 @@ REAL vTMv(const REAL* v, const REAL* M, const int n) REAL* dot_device = nullptr; base_device::memory::resize_memory_op()(dot_device, 1); container::kernels::blas_dot()(n, y, 1, v, 1, dot_device); - base_device::memory::synchronize_memory_op()(&result, - dot_device, - 1); + base_device::memory::synchronize_memory_op()(&result, dot_device, 1); base_device::memory::delete_memory_op()(y); base_device::memory::delete_memory_op()(dot_device); return result; diff --git a/source/module_hamilt_pw/hamilt_stodft/sto_dos.cpp b/source/module_hamilt_pw/hamilt_stodft/sto_dos.cpp index 55aee269fc..597248fc41 100644 --- a/source/module_hamilt_pw/hamilt_stodft/sto_dos.cpp +++ b/source/module_hamilt_pw/hamilt_stodft/sto_dos.cpp @@ -1,8 +1,8 @@ #include "sto_dos.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" #include "sto_tool.h" template Sto_DOS::~Sto_DOS() @@ -245,10 +245,9 @@ void Sto_DOS::caldos(const double sigmain, const double de, cons double maxerror = 0; double sum = 0; - ofsdos << ndos << " # number of points" << std::endl; - ofsdos << "#" << std::setw(19) << "energy(eV)" - << std::setw(20) << "dos(eV^-1)" << std::setw(20) << "sum" - << std::setw(20) << "error(eV^-1)" << std::endl; + ofsdos << ndos << " # number of points" << std::endl; + ofsdos << "#" << std::setw(19) << "energy(eV)" << std::setw(20) << "dos(eV^-1)" << std::setw(20) << "sum" + << std::setw(20) << "error(eV^-1)" << std::endl; for (int ie = 0; ie < ndos; ++ie) { double tmperror = 2.0 * std::abs(error[ie]); diff --git a/source/module_hamilt_pw/hamilt_stodft/sto_elecond.cpp b/source/module_hamilt_pw/hamilt_stodft/sto_elecond.cpp index 77c6b97685..de29edc4c0 100644 --- a/source/module_hamilt_pw/hamilt_stodft/sto_elecond.cpp +++ b/source/module_hamilt_pw/hamilt_stodft/sto_elecond.cpp @@ -1,13 +1,13 @@ #include "sto_elecond.h" -#include "module_base/complexmatrix.h" -#include "module_base/constants.h" -#include "module_base/memory.h" -#include "module_base/module_container/ATen/tensor.h" -#include "module_base/parallel_device.h" -#include "module_base/timer.h" -#include "module_base/vector3.h" #include "module_parameter/parameter.h" +#include "source_base/complexmatrix.h" +#include "source_base/constants.h" +#include "source_base/memory.h" +#include "source_base/module_container/ATen/tensor.h" +#include "source_base/parallel_device.h" +#include "source_base/timer.h" +#include "source_base/vector3.h" #include "sto_tool.h" #include @@ -35,9 +35,16 @@ Sto_EleCond::Sto_EleCond(UnitCell* p_ucell_in, this->stofunc.set_E_range(&stoche.emin_sto, &stoche.emax_sto); this->cond_dtbatch = PARAM.inp.cond_dtbatch; #ifdef __ENABLE_FLOAT_FFTW - if(!std::is_same::value) + if (!std::is_same::value) { - this->hamilt_sto_ = new hamilt::HamiltSdftPW, Device>(p_elec_in->pot, p_wfcpw_in, p_kv_in, p_ppcell_in, p_ucell_in, 1, &this->low_emin_, &this->low_emax_); + this->hamilt_sto_ = new hamilt::HamiltSdftPW, Device>(p_elec_in->pot, + p_wfcpw_in, + p_kv_in, + p_ppcell_in, + p_ucell_in, + 1, + &this->low_emin_, + &this->low_emax_); } #endif } @@ -198,8 +205,10 @@ void Sto_EleCond::cal_jmatrix(hamilt::HamiltSdftPW(gatherinfo_ks); info_gatherv* sto_npwx = static_cast(gatherinfo_sto); - rightchi_all = gatherchi_op()(rightchi, chi_all, npwx, sto_npwx->nrecv, sto_npwx->displs, perbands_sto); - righthchi_all = gatherchi_op()(right_hchi, hchi_all, npwx, sto_npwx->nrecv, sto_npwx->displs, perbands_sto); + rightchi_all + = gatherchi_op()(rightchi, chi_all, npwx, sto_npwx->nrecv, sto_npwx->displs, perbands_sto); + righthchi_all + = gatherchi_op()(right_hchi, hchi_all, npwx, sto_npwx->nrecv, sto_npwx->displs, perbands_sto); if (PARAM.inp.bndpar > 1 && rightfact != nullptr) { vec_rightf_all.resize(allbands_ks); @@ -403,7 +412,12 @@ void Sto_EleCond::cal_jmatrix(hamilt::HamiltSdftPW()(allbands_sto, j2mat, j2mat, half, j1mat, half * ei - mu); + ModuleBase::vector_add_vector_op()(allbands_sto, + j2mat, + j2mat, + half, + j1mat, + half * ei - mu); } else { @@ -413,7 +427,12 @@ void Sto_EleCond::cal_jmatrix(hamilt::HamiltSdftPW()(allbands_sto, j2mat, j2mat, half, j1mat, half * ei - mu); + ModuleBase::vector_add_vector_op()(allbands_sto, + j2mat, + j2mat, + half, + j1mat, + half * ei - mu); ModuleBase::scal_op()(allbands_sto, &jfac, j2mat, 1); ModuleBase::scal_op()(allbands_sto, &jfac, j1mat, 1); } @@ -431,7 +450,12 @@ void Sto_EleCond::cal_jmatrix(hamilt::HamiltSdftPW()(perbands_sto, j2mat, j2mat, half, j1mat, half * ei - mu); + ModuleBase::vector_add_vector_op()(perbands_sto, + j2mat, + j2mat, + half, + j1mat, + half * ei - mu); } else { @@ -441,7 +465,12 @@ void Sto_EleCond::cal_jmatrix(hamilt::HamiltSdftPW()(perbands_sto, j2mat, j2mat, half, j1mat, half * ei - mu); + ModuleBase::vector_add_vector_op()(perbands_sto, + j2mat, + j2mat, + half, + j1mat, + half * ei - mu); ModuleBase::scal_op()(perbands_sto, &jfac, j2mat, 1); ModuleBase::scal_op()(perbands_sto, &jfac, j1mat, 1); } @@ -551,7 +580,7 @@ void Sto_EleCond::sKG(const int& smear_type, this->low_emax_ = static_cast(*this->stofunc.Emax); lowfunc.set_E_range(&low_emin_, &low_emax_); hamilt::HamiltSdftPW* p_low_hamilt = nullptr; - if(hamilt_sto_ != nullptr) + if (hamilt_sto_ != nullptr) { p_low_hamilt = hamilt_sto_; } @@ -580,7 +609,7 @@ void Sto_EleCond::sKG(const int& smear_type, lcomplex* batchcoef_ = nullptr; lcomplex* batchmcoef_ = nullptr; ct::DeviceType device_type = ct::DeviceTypeToEnum::value; - ct::DataType t_type = ct::DataTypeToEnum::value; + ct::DataType t_type = ct::DataTypeToEnum::value; ct::Tensor batchcoef(t_type, device_type, {1}); ct::Tensor batchmcoef(t_type, device_type, {1}); if (nbatch > 1) @@ -591,10 +620,10 @@ void Sto_EleCond::sKG(const int& smear_type, // resmem_lcomplex_op()(batchmcoef_, cond_nche * nbatch); // std::complex* tmpmcoef = batchmcoef_ + (nbatch - 1) * cond_nche; batchcoef.resize({nbatch, cond_nche}); - lcomplex* tmpcoef = batchcoef[nbatch-1].data(); + lcomplex* tmpcoef = batchcoef[nbatch - 1].data(); batchmcoef.resize({nbatch, cond_nche}); - lcomplex* tmpmcoef = batchmcoef[nbatch-1].data(); - + lcomplex* tmpmcoef = batchmcoef[nbatch - 1].data(); + cpymem_lcomplex_op()(tmpcoef, chet.coef_complex, cond_nche); cpymem_lcomplex_op()(tmpmcoef, chemt.coef_complex, cond_nche); for (int ib = 0; ib < nbatch - 1; ++ib) @@ -614,8 +643,16 @@ void Sto_EleCond::sKG(const int& smear_type, // ik loop ModuleBase::timer::tick("Sto_EleCond", "kloop"); - hamilt::Velocity velop(this->p_wfcpw, this->p_kv->isk.data(), this->p_ppcell, this->p_ucell, nonlocal); - hamilt::Velocity low_velop(this->p_wfcpw, this->p_kv->isk.data(), this->p_ppcell, this->p_ucell, nonlocal); + hamilt::Velocity velop(this->p_wfcpw, + this->p_kv->isk.data(), + this->p_ppcell, + this->p_ucell, + nonlocal); + hamilt::Velocity low_velop(this->p_wfcpw, + this->p_kv->isk.data(), + this->p_ppcell, + this->p_ucell, + nonlocal); for (int ik = 0; ik < nk; ++ik) { velop.init(ik); @@ -627,7 +664,7 @@ void Sto_EleCond::sKG(const int& smear_type, this->p_hamilt->updateHk(ik); } p_low_hamilt->updateHk(ik); - + const int npw = this->p_kv->ngk[ik]; // get allbands_ks @@ -858,7 +895,8 @@ void Sto_EleCond::sKG(const int& smear_type, for (int ib = 0; ib < perbands_ks; ++ib) { double eigen = en[ib]; - const std::complex expmfactor = static_cast>(exp(ModuleBase::NEG_IMAG_UNIT * eigen * dt)); + const std::complex expmfactor + = static_cast>(exp(ModuleBase::NEG_IMAG_UNIT * eigen * dt)); expmtf_fact[ib] *= expmfactor; expmtmf_fact[ib] *= expmfactor; } @@ -905,7 +943,8 @@ void Sto_EleCond::sKG(const int& smear_type, chet.calpolyvec_complex(hchi_norm_low, stoexptsfchi, tmppolyexptsfchi, npw, npwx, perbands_sto); chet.calpolyvec_complex(hchi_norm_low, stoexptsmfchi, tmppolyexptsmfchi, npw, npwx, perbands_sto); chemt.calpolyvec_complex(hchi_norm_low, stoexpmtsfchi, tmppolyexpmtsfchi, npw, npwx, perbands_sto); - chemt.calpolyvec_complex(hchi_norm_low, stoexpmtsmfchi, tmppolyexpmtsmfchi, npw, npwx, perbands_sto); + chemt + .calpolyvec_complex(hchi_norm_low, stoexpmtsmfchi, tmppolyexpmtsmfchi, npw, npwx, perbands_sto); } // std::complex* tmpcoef = batchcoef.data() + (it - 1) % nbatch * cond_nche; @@ -1078,4 +1117,3 @@ template class Sto_EleCond; #if ((defined __CUDA) || (defined __ROCM)) template class Sto_EleCond; #endif - diff --git a/source/module_hamilt_pw/hamilt_stodft/sto_forces.cpp b/source/module_hamilt_pw/hamilt_stodft/sto_forces.cpp index cf127b029d..cbdc297226 100644 --- a/source/module_hamilt_pw/hamilt_stodft/sto_forces.cpp +++ b/source/module_hamilt_pw/hamilt_stodft/sto_forces.cpp @@ -1,20 +1,20 @@ #include "sto_forces.h" -#include "module_base/mathzone.h" #include "module_cell/module_symmetry/symmetry.h" #include "module_elecstate/elecstate.h" #include "module_elecstate/module_pot/efield.h" #include "module_elecstate/module_pot/gatefield.h" +#include "module_hamilt_pw/hamilt_pwdft/fs_nonlocal_tools.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/output_log.h" #include "module_parameter/parameter.h" -#include "module_hamilt_pw/hamilt_pwdft/fs_nonlocal_tools.h" +#include "source_base/mathzone.h" // new -#include "module_base/math_integral.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" #include "module_hamilt_general/module_xc/xc_functional.h" +#include "source_base/math_integral.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" template void Sto_Forces::cal_stoforce(ModuleBase::matrix& force, @@ -43,7 +43,7 @@ void Sto_Forces::cal_stoforce(ModuleBase::matrix& force, ModuleBase::matrix forcenl(this->nat, 3); ModuleBase::matrix forcescc(this->nat, 3); this->cal_force_loc(ucell, forcelc, rho_basis, locpp.vloc, chr); - this->cal_force_ew(ucell,forceion, rho_basis, p_sf); + this->cal_force_ew(ucell, forceion, rho_basis, p_sf); this->cal_sto_force_nl(forcenl, wg, pkv, wfc_basis, p_sf, nlpp, ucell, psi, stowf); this->cal_force_cc(forcecc, rho_basis, chr, locpp.numeric, ucell); this->cal_force_scc(forcescc, rho_basis, elec.vnew, elec.vnew_exist, locpp.numeric, ucell); @@ -174,11 +174,7 @@ void Sto_Forces::cal_stoforce(ModuleBase::matrix& force, } if (PARAM.inp.gate_flag) { - ModuleIO::print_force(GlobalV::ofs_running, - ucell, - "GATEFIELD FORCE (eV/Angstrom)", - force_gate, - false); + ModuleIO::print_force(GlobalV::ofs_running, ucell, "GATEFIELD FORCE (eV/Angstrom)", force_gate, false); } } ModuleIO::print_force(GlobalV::ofs_running, ucell, "TOTAL-FORCE (eV/Angstrom)", force, false); @@ -187,16 +183,15 @@ void Sto_Forces::cal_stoforce(ModuleBase::matrix& force, } template -void Sto_Forces::cal_sto_force_nl( - ModuleBase::matrix& forcenl, - const ModuleBase::matrix& wg, - K_Vectors* p_kv, - ModulePW::PW_Basis_K* wfc_basis, - const Structure_Factor* p_sf, - const pseudopot_cell_vnl& nlpp, - const UnitCell& ucell, - const psi::Psi, Device>& psi_in, - const Stochastic_WF, Device>& stowf) +void Sto_Forces::cal_sto_force_nl(ModuleBase::matrix& forcenl, + const ModuleBase::matrix& wg, + K_Vectors* p_kv, + ModulePW::PW_Basis_K* wfc_basis, + const Structure_Factor* p_sf, + const pseudopot_cell_vnl& nlpp, + const UnitCell& ucell, + const psi::Psi, Device>& psi_in, + const Stochastic_WF, Device>& stowf) { ModuleBase::TITLE("Sto_Forces", "cal_force_nl"); const int nkb = nlpp.nkb; @@ -215,14 +210,13 @@ void Sto_Forces::cal_sto_force_nl( nksbands = 0; } - // allocate memory for the force + // allocate memory for the force FPTYPE* force = nullptr; resmem_var_op()(force, ucell.nat * 3); base_device::memory::set_memory_op()(force, 0.0, ucell.nat * 3); hamilt::FS_Nonlocal_tools nl_tools(&nlpp, &ucell, p_kv, wfc_basis, p_sf, wg, nullptr); - for (int ik = 0; ik < wfc_basis->nks; ik++) { const int nstobands = nchip[ik]; @@ -255,7 +249,6 @@ void Sto_Forces::cal_sto_force_nl( // sum up forcenl from all processors Parallel_Reduce::reduce_all(forcenl.c, forcenl.nr * forcenl.nc); - ModuleBase::timer::tick("Sto_Forces", "cal_force_nl"); return; } diff --git a/source/module_hamilt_pw/hamilt_stodft/sto_iter.cpp b/source/module_hamilt_pw/hamilt_stodft/sto_iter.cpp index 47519d787f..69316521f5 100644 --- a/source/module_hamilt_pw/hamilt_stodft/sto_iter.cpp +++ b/source/module_hamilt_pw/hamilt_stodft/sto_iter.cpp @@ -1,16 +1,16 @@ #include "sto_iter.h" -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/para_gemm.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" -#include "module_base/tool_quit.h" -#include "module_base/tool_title.h" #include "module_elecstate/kernels/elecstate_op.h" #include "module_elecstate/occupy.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "source_hsolver/para_linear_transform.h" #include "module_parameter/parameter.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/para_gemm.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" +#include "source_base/tool_title.h" +#include "source_hsolver/para_linear_transform.h" template Stochastic_Iter::Stochastic_Iter() @@ -26,7 +26,12 @@ Stochastic_Iter::~Stochastic_Iter() } template -void Stochastic_Iter::dot(const int& n, const Real* x, const int& incx, const Real* y, const int& incy, Real& result) +void Stochastic_Iter::dot(const int& n, + const Real* x, + const int& incx, + const Real* y, + const int& incy, + Real& result) { Real* result_device = nullptr; resmem_var_op()(result_device, 1); @@ -75,7 +80,7 @@ void Stochastic_Iter::orthog(const int& ik, psi::Psi& psi, T* sum = nullptr; resmem_complex_op()(sum, nbands * nchipk); - if(PARAM.globalv.all_ks_run) + if (PARAM.globalv.all_ks_run) { // sum(b ModuleBase::PGemmCN pmmcn; @@ -409,7 +414,7 @@ void Stochastic_Iter::calPn(const int& ik, Stochastic_WF& { spolyv_cpu[i] += p_che->polytrace[i] * this->pkv->wk[ik]; } - if(ik == this->pkv->get_nks() - 1) + if (ik == this->pkv->get_nks() - 1) { syncmem_var_h2d_op()(spolyv, spolyv_cpu, norder); } @@ -425,8 +430,9 @@ void Stochastic_Iter::calPn(const int& ik, Stochastic_WF& const int M = npwx * nchip_ik * 2; // Do not use kv.ngk[ik] const int N = norder; const Real kweight = this->pkv->wk[ik]; - - ModuleBase::gemm_op()(trans, normal, N, N, M, &kweight, vec_all, LDA, vec_all, LDA, &one, spolyv, N); + + ModuleBase::gemm_op()(trans, normal, N, N, M, &kweight, vec_all, LDA, vec_all, LDA, &one, spolyv, N); // dgemm_(&trans, &normal, &N, &N, &M, &kweight, vec_all, &LDA, vec_all, &LDA, &one, spolyv, &N); } ModuleBase::timer::tick("Stochastic_Iter", "calPn"); @@ -469,7 +475,7 @@ double Stochastic_Iter::calne(elecstate::ElecState* pes) KS_ne /= GlobalV::NPROC_IN_POOL; #ifdef __MPI MPI_Allreduce(MPI_IN_PLACE, &KS_ne, 1, MPI_DOUBLE, MPI_SUM, INT_BGROUP); - if(PARAM.globalv.all_ks_run) + if (PARAM.globalv.all_ks_run) { MPI_Allreduce(MPI_IN_PLACE, &KS_ne, 1, MPI_DOUBLE, MPI_SUM, BP_WORLD); } @@ -497,9 +503,9 @@ void Stochastic_Iter::calHsqrtchi(Stochastic_WF& stowf) template void Stochastic_Iter::sum_stoeband(Stochastic_WF& stowf, - elecstate::ElecStatePW* pes, - hamilt::Hamilt* pHamilt, - ModulePW::PW_Basis_K* wfc_basis) + elecstate::ElecStatePW* pes, + hamilt::Hamilt* pHamilt, + ModulePW::PW_Basis_K* wfc_basis) { ModuleBase::TITLE("Stochastic_Iter", "sum_stoeband"); ModuleBase::timer::tick("Stochastic_Iter", "sum_stoeband"); @@ -536,7 +542,7 @@ void Stochastic_Iter::sum_stoeband(Stochastic_WF& stowf, pes->f_en.demet /= GlobalV::NPROC_IN_POOL; #ifdef __MPI MPI_Allreduce(MPI_IN_PLACE, &pes->f_en.demet, 1, MPI_DOUBLE, MPI_SUM, INT_BGROUP); - if(PARAM.globalv.all_ks_run) + if (PARAM.globalv.all_ks_run) { MPI_Allreduce(MPI_IN_PLACE, &pes->f_en.demet, 1, MPI_DOUBLE, MPI_SUM, BP_WORLD); } @@ -589,9 +595,9 @@ void Stochastic_Iter::sum_stoeband(Stochastic_WF& stowf, template void Stochastic_Iter::cal_storho(const UnitCell& ucell, - Stochastic_WF& stowf, - elecstate::ElecStatePW* pes, - ModulePW::PW_Basis_K* wfc_basis) + Stochastic_WF& stowf, + elecstate::ElecStatePW* pes, + ModulePW::PW_Basis_K* wfc_basis) { ModuleBase::TITLE("Stochastic_Iter", "cal_storho"); ModuleBase::timer::tick("Stochastic_Iter", "cal_storho"); @@ -609,7 +615,7 @@ void Stochastic_Iter::cal_storho(const UnitCell& ucell, { // If there are KS orbitals, we need to allocate another memory for sto_rho _tmprho.resize(nrxx * nspin); - for(int is = 0; is < nspin; ++is) + for (int is = 0; is < nspin; ++is) { sto_rho[is] = _tmprho.data() + is * nrxx; } @@ -622,9 +628,10 @@ void Stochastic_Iter::cal_storho(const UnitCell& ucell, } } - // pes->rho is a device memory, and when using cpu and double, we donot need to allocate memory for pes->rho - if (PARAM.inp.device != "gpu" && PARAM.inp.precision != "single") { - pes->rho = reinterpret_cast(sto_rho.data()); + // pes->rho is a device memory, and when using cpu and double, we donot need to allocate memory for pes->rho + if (PARAM.inp.device != "gpu" && PARAM.inp.precision != "single") + { + pes->rho = reinterpret_cast(sto_rho.data()); } for (int is = 0; is < nspin; is++) { @@ -652,8 +659,9 @@ void Stochastic_Iter::cal_storho(const UnitCell& ucell, tmpout += npwx; } } - if (PARAM.inp.device == "gpu" || PARAM.inp.precision == "single") { - for(int is = 0; is < nspin; ++is) + if (PARAM.inp.device == "gpu" || PARAM.inp.precision == "single") + { + for (int is = 0; is < nspin; ++is) { castmem_var_d2h_op()(sto_rho[is], pes->rho[is], nrxx); } @@ -661,12 +669,12 @@ void Stochastic_Iter::cal_storho(const UnitCell& ucell, else { // We need to set pes->rho back to the original value - pes->rho = reinterpret_cast(pes->charge->rho); + pes->rho = reinterpret_cast(pes->charge->rho); } delmem_complex_op()(porter); #ifdef __MPI - if(GlobalV::KPAR * PARAM.inp.bndpar > 1) + if (GlobalV::KPAR * PARAM.inp.bndpar > 1) { for (int is = 0; is < nspin; ++is) { @@ -680,7 +688,7 @@ void Stochastic_Iter::cal_storho(const UnitCell& ucell, #endif double sto_ne = 0; - for(int is = 0; is < nspin; ++is) + for (int is = 0; is < nspin; ++is) { #ifdef _OPENMP #pragma omp parallel for reduction(+ : sto_ne) diff --git a/source/module_hamilt_pw/hamilt_stodft/sto_iter.h b/source/module_hamilt_pw/hamilt_stodft/sto_iter.h index 9953cfcd3b..476092a6ff 100644 --- a/source/module_hamilt_pw/hamilt_stodft/sto_iter.h +++ b/source/module_hamilt_pw/hamilt_stodft/sto_iter.h @@ -1,10 +1,10 @@ #ifndef STO_ITER_H #define STO_ITER_H -#include "module_base/math_chebyshev.h" #include "module_elecstate/elecstate_pw.h" #include "module_hamilt_general/hamilt.h" #include "module_hamilt_pw/hamilt_stodft/hamilt_sdft_pw.h" #include "module_psi/psi.h" +#include "source_base/math_chebyshev.h" #include "sto_che.h" #include "sto_func.h" #include "sto_wf.h" @@ -22,6 +22,7 @@ class Stochastic_Iter { private: using Real = typename GetTypeReal::type; + public: // constructor and deconstructor Stochastic_Iter(); @@ -46,20 +47,20 @@ class Stochastic_Iter /** * @brief sum demet and eband energies for each k point and each band - * + * * @param stowf stochastic wave function * @param pes elecstate * @param pHamilt hamiltonian * @param wfc_basis wfc pw basis */ void sum_stoeband(Stochastic_WF& stowf, - elecstate::ElecStatePW* pes, - hamilt::Hamilt* pHamilt, - ModulePW::PW_Basis_K* wfc_basis); + elecstate::ElecStatePW* pes, + hamilt::Hamilt* pHamilt, + ModulePW::PW_Basis_K* wfc_basis); /** * @brief calculate the density - * + * * @param ucell reference to unit cell * @param stowf stochastic wave function * @param pes elecstate @@ -72,15 +73,15 @@ class Stochastic_Iter /** * @brief calculate total number of electrons - * + * * @param pes elecstate - * @return double + * @return double */ double calne(elecstate::ElecState* pes); /** * @brief solve ne(mu) = ne_target and get chemical potential mu - * + * * @param iter scf iteration index * @param pes elecstate */ @@ -88,7 +89,7 @@ class Stochastic_Iter /** * @brief orthogonalize stochastic wave functions with KS wave functions - * + * * @param ik k point index * @param psi KS wave functions * @param stowf stochastic wave functions @@ -97,7 +98,7 @@ class Stochastic_Iter /** * @brief check emax and emin - * + * * @param ik k point index * @param istep ion step index * @param iter scf iteration index @@ -107,7 +108,7 @@ class Stochastic_Iter /** * @brief check precision of Chebyshev expansion - * + * * @param ref reference value * @param thr threshold * @param info information @@ -121,15 +122,15 @@ class Stochastic_Iter double mu0; // chemical potential; unit in Ry bool change; - double targetne=0.0; + double targetne = 0.0; Real* spolyv = nullptr; //[Device] coefficients of Chebyshev expansion Real* spolyv_cpu = nullptr; //[CPU] coefficients of Chebyshev expansion public: int* nchip = nullptr; bool check = false; - double th_ne=0.0; - double KS_ne=0.0; + double th_ne = 0.0; + double KS_ne = 0.0; public: int method; // different methods 1: slow, less memory 2: fast, more memory @@ -141,14 +142,15 @@ class Stochastic_Iter void calTnchi_ik(const int& ik, Stochastic_WF& stowf); private: - K_Vectors* pkv=nullptr; + K_Vectors* pkv = nullptr; /** * @brief return cpu dot result * @param x [Device] * @param y [Device] * @param result [CPU] dot result */ - void dot(const int& n, const Real* x, const int& incx, const Real* y, const int& incy, Real& result); + void dot(const int& n, const Real* x, const int& incx, const Real* y, const int& incy, Real& result); + private: const Device* ctx = {}; const base_device::DEVICE_CPU* cpu_ctx = {}; diff --git a/source/module_hamilt_pw/hamilt_stodft/sto_stress_pw.cpp b/source/module_hamilt_pw/hamilt_stodft/sto_stress_pw.cpp index 033a94159d..6f28e295c7 100644 --- a/source/module_hamilt_pw/hamilt_stodft/sto_stress_pw.cpp +++ b/source/module_hamilt_pw/hamilt_stodft/sto_stress_pw.cpp @@ -1,12 +1,12 @@ #include "sto_stress_pw.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/fs_kin_tools.h" #include "module_hamilt_pw/hamilt_pwdft/fs_nonlocal_tools.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" #include "module_io/output_log.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" template void Sto_Stress_PW::cal_stress(ModuleBase::matrix& sigmatot, diff --git a/source/module_hamilt_pw/hamilt_stodft/sto_tool.cpp b/source/module_hamilt_pw/hamilt_stodft/sto_tool.cpp index 2f99ef0e81..c3024040f2 100644 --- a/source/module_hamilt_pw/hamilt_stodft/sto_tool.cpp +++ b/source/module_hamilt_pw/hamilt_stodft/sto_tool.cpp @@ -1,9 +1,9 @@ #include "sto_tool.h" -#include "module_base/math_chebyshev.h" -#include "module_base/parallel_device.h" -#include "module_base/timer.h" #include "module_parameter/parameter.h" +#include "source_base/math_chebyshev.h" +#include "source_base/parallel_device.h" +#include "source_base/timer.h" #ifdef __MPI #include "mpi.h" #endif @@ -55,7 +55,7 @@ void check_che_op::operator()(const int& nche_in, { if (nbands_sto == 0) { - std::vector> randchi(npw); + std::vector> randchi(npw); for (int ig = 0; ig < npw; ++ig) { FPTYPE rr = std::rand() / FPTYPE(RAND_MAX); diff --git a/source/module_hamilt_pw/hamilt_stodft/sto_tool.h b/source/module_hamilt_pw/hamilt_stodft/sto_tool.h index 0e9fe1d41d..0f6a21ef9a 100644 --- a/source/module_hamilt_pw/hamilt_stodft/sto_tool.h +++ b/source/module_hamilt_pw/hamilt_stodft/sto_tool.h @@ -3,8 +3,8 @@ #include "module_cell/klist.h" #include "module_hamilt_pw/hamilt_stodft/hamilt_sdft_pw.h" #include "module_hamilt_pw/hamilt_stodft/sto_wf.h" -#include "module_base/module_device/memory_op.h" #include "module_psi/psi.h" +#include "source_base/module_device/memory_op.h" /** * @brief Check if Emin and Emax are converged @@ -17,7 +17,8 @@ template struct check_che_op { - using syncmem_complex_h2d_op = base_device::memory::synchronize_memory_op, Device, base_device::DEVICE_CPU>; + using syncmem_complex_h2d_op + = base_device::memory::synchronize_memory_op, Device, base_device::DEVICE_CPU>; void operator()(const int& nche_in, const double& try_emin, const double& try_emax, diff --git a/source/module_hamilt_pw/hamilt_stodft/sto_wf.cpp b/source/module_hamilt_pw/hamilt_stodft/sto_wf.cpp index b00564f1ef..b37f8dee26 100644 --- a/source/module_hamilt_pw/hamilt_stodft/sto_wf.cpp +++ b/source/module_hamilt_pw/hamilt_stodft/sto_wf.cpp @@ -1,14 +1,14 @@ #include "sto_wf.h" -#include "module_base/memory.h" #include "module_parameter/parameter.h" +#include "source_base/memory.h" #include #include //---------Temporary------------------------------------ -#include "module_base/global_function.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/global_function.h" //------------------------------------------------------ template @@ -72,7 +72,8 @@ void Stochastic_WF::init_sto_orbitals(const int seed_in) } else { - srand((unsigned)std::abs(seed_in) + (GlobalV::MY_BNDGROUP * GlobalV::NPROC_IN_BNDGROUP + GlobalV::RANK_IN_BPGROUP) * 10000); + srand((unsigned)std::abs(seed_in) + + (GlobalV::MY_BNDGROUP * GlobalV::NPROC_IN_BNDGROUP + GlobalV::RANK_IN_BPGROUP) * 10000); } this->allocate_chi0(); @@ -374,9 +375,7 @@ void Stochastic_WF::sync_chi0() Device* ctx = {}; if (base_device::get_device_type(ctx) == base_device::GpuDevice) { - syncmem_h2d_op()(this->chi0->get_pointer(), - this->chi0_cpu->get_pointer(), - this->chi0_cpu->size()); + syncmem_h2d_op()(this->chi0->get_pointer(), this->chi0_cpu->get_pointer(), this->chi0_cpu->size()); } } diff --git a/source/module_io/berryphase.cpp b/source/module_io/berryphase.cpp index 9efda5a09e..4a4e1db5f3 100644 --- a/source/module_io/berryphase.cpp +++ b/source/module_io/berryphase.cpp @@ -1,8 +1,8 @@ #include "berryphase.h" -#include "module_parameter/parameter.h" #include "module_cell/klist.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" bool berryphase::berry_phase_flag = false; @@ -46,7 +46,7 @@ void berryphase::lcao_init(const UnitCell& ucell, const LCAO_Orbitals& orb) { ModuleBase::TITLE("berryphase", "lcao_init"); - lcao_method.init(ucell,grid_tech, kv.get_nkstot(), orb); + lcao_method.init(ucell, grid_tech, kv.get_nkstot(), orb); lcao_method.cal_R_number(ucell, gd); lcao_method.cal_orb_overlap(ucell); return; @@ -92,9 +92,9 @@ void berryphase::set_kpoints(const K_Vectors& kv, const int direction) for (int ix = 0; ix < mp_x; ix++) { k_index[string_index][ix] = ix + iy * mp_x + iz * mp_x * mp_y; - if (ix == (mp_x - 1)) { - k_index[string_index][ix + 1] - = k_index[string_index][0]; + if (ix == (mp_x - 1)) + { + k_index[string_index][ix + 1] = k_index[string_index][0]; } } } @@ -142,9 +142,9 @@ void berryphase::set_kpoints(const K_Vectors& kv, const int direction) for (int iy = 0; iy < mp_y; iy++) { k_index[string_index][iy] = ix + iy * mp_x + iz * mp_x * mp_y; - if (iy == (mp_y - 1)) { - k_index[string_index][iy + 1] - = k_index[string_index][0]; + if (iy == (mp_y - 1)) + { + k_index[string_index][iy + 1] = k_index[string_index][0]; } } } @@ -192,9 +192,9 @@ void berryphase::set_kpoints(const K_Vectors& kv, const int direction) for (int iz = 0; iz < mp_z; iz++) { k_index[string_index][iz] = ix + iy * mp_x + iz * mp_x * mp_y; - if (iz == (mp_z - 1)) { - k_index[string_index][iz + 1] - = k_index[string_index][0]; + if (iz == (mp_z - 1)) + { + k_index[string_index][iz + 1] = k_index[string_index][0]; } } } @@ -215,7 +215,7 @@ void berryphase::set_kpoints(const K_Vectors& kv, const int direction) } } -#include "../module_base/complexmatrix.h" +#include "../source_base/complexmatrix.h" double berryphase::stringPhase(const UnitCell& ucell, int index_str, int nbands, @@ -293,14 +293,10 @@ double berryphase::stringPhase(const UnitCell& ucell, } mat(nb, mb) = pw_method.unkdotp_soc_G0(rhopw, wfcpw, ik_1, ik_2, nb, mb, psi_in, G); - } else { - mat(nb, mb) = pw_method.unkdotp_soc_G(wfcpw, - ik_1, - ik_2, - nb, - mb, - npwx, - psi_in); + } + else + { + mat(nb, mb) = pw_method.unkdotp_soc_G(wfcpw, ik_1, ik_2, nb, mb, npwx, psi_in); } } @@ -314,9 +310,12 @@ double berryphase::stringPhase(const UnitCell& ucell, LapackConnector::zgetrf(nbands, nbands, mat, nbands, ipiv.data(), &info); for (int ib = 0; ib < nbands; ib++) { - if (ipiv[ib] != (ib + 1)) { + if (ipiv[ib] != (ib + 1)) + { det = -det * mat(ib, ib); - } else { + } + else + { det = det * mat(ib, ib); } } @@ -330,7 +329,7 @@ double berryphase::stringPhase(const UnitCell& ucell, { if (PARAM.inp.nspin != 4) { - zeta = zeta * lcao_method.det_berryphase(ucell,ik_1, ik_2, dk, nbands, *(this->paraV), psi_in, kv); + zeta = zeta * lcao_method.det_berryphase(ucell, ik_1, ik_2, dk, nbands, *(this->paraV), psi_in, kv); } else { @@ -365,14 +364,15 @@ void berryphase::Berry_Phase(const UnitCell& ucell, for (int istring = 0; istring < total_string; istring++) { wistring[istring] = 1.0 / total_string; - if (PARAM.inp.nspin == 2) { + if (PARAM.inp.nspin == 2) + { wistring[istring] = wistring[istring] * 2; } } for (int istring = 0; istring < total_string; istring++) { - phik[istring] = stringPhase(ucell,istring, nbands, npwx, psi_in, rhopw, wfcpw, kv); + phik[istring] = stringPhase(ucell, istring, nbands, npwx, psi_in, rhopw, wfcpw, kv); // transfer phase to complex number cphik[istring] = std::complex(cos(phik[istring]), sin(phik[istring])); cave = cave + std::complex(wistring[istring], 0.0) * cphik[istring]; @@ -407,7 +407,6 @@ void berryphase::Berry_Phase(const UnitCell& ucell, pdl_elec_tot = pdl_elec_tot - 1.0 * round(pdl_elec_tot / 1.0); mod_elec_tot = 1; } - } void berryphase::Macroscopic_polarization(const UnitCell& ucell, @@ -519,12 +518,14 @@ void berryphase::Macroscopic_polarization(const UnitCell& ucell, // calculate Macroscopic polarization modulus because berry phase int modulus = 0; - if ((!lodd) && (PARAM.inp.nspin == 1)) - { - modulus = 2; - } else { - modulus = 1; - } + if ((!lodd) && (PARAM.inp.nspin == 1)) + { + modulus = 2; + } + else + { + modulus = 1; + } // test by jingan // GlobalV::ofs_running << "ion polarization end" << std::endl; @@ -538,7 +539,7 @@ void berryphase::Macroscopic_polarization(const UnitCell& ucell, set_kpoints(kv, direction); double pdl_elec_tot = 0.0; int mod_elec_tot = 0; - Berry_Phase(ucell,occ_nbands, pdl_elec_tot, mod_elec_tot, npwx, psi_in, rhopw, wfcpw, kv); + Berry_Phase(ucell, occ_nbands, pdl_elec_tot, mod_elec_tot, npwx, psi_in, rhopw, wfcpw, kv); const double rmod = ucell.a1.norm() * ucell.lat0; const double unit1 = rmod; @@ -584,7 +585,7 @@ void berryphase::Macroscopic_polarization(const UnitCell& ucell, set_kpoints(kv, direction); double pdl_elec_tot = 0.0; int mod_elec_tot = 0; - Berry_Phase(ucell,occ_nbands, pdl_elec_tot, mod_elec_tot, npwx, psi_in, rhopw, wfcpw, kv); + Berry_Phase(ucell, occ_nbands, pdl_elec_tot, mod_elec_tot, npwx, psi_in, rhopw, wfcpw, kv); const double rmod = ucell.a2.norm() * ucell.lat0; const double unit1 = rmod; @@ -630,7 +631,7 @@ void berryphase::Macroscopic_polarization(const UnitCell& ucell, set_kpoints(kv, direction); double pdl_elec_tot = 0.0; int mod_elec_tot = 0; - Berry_Phase(ucell,occ_nbands, pdl_elec_tot, mod_elec_tot, npwx, psi_in, rhopw, wfcpw, kv); + Berry_Phase(ucell, occ_nbands, pdl_elec_tot, mod_elec_tot, npwx, psi_in, rhopw, wfcpw, kv); const double rmod = ucell.a3.norm() * ucell.lat0; const double unit1 = rmod; diff --git a/source/module_io/bessel_basis.cpp b/source/module_io/bessel_basis.cpp index 07a3619302..f0592c685f 100644 --- a/source/module_io/bessel_basis.cpp +++ b/source/module_io/bessel_basis.cpp @@ -1,44 +1,42 @@ #include "bessel_basis.h" -#include "module_parameter/parameter.h" -#include "module_base/math_integral.h" -#include "module_base/math_sphbes.h" -#include "module_base/parallel_common.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/math_integral.h" +#include "source_base/math_sphbes.h" +#include "source_base/parallel_common.h" +#include "source_base/timer.h" + #include Bessel_Basis::Bessel_Basis() { - Ecut_number = 0; - Dk = 0.0; + Ecut_number = 0; + Dk = 0.0; } Bessel_Basis::~Bessel_Basis() { } - // the function is called in numerical_basis. -void Bessel_Basis::init( - const bool start_from_file, - const double &ecutwfc, - const int &ntype, - const int &lmax_in, - const bool &smooth, - const double &sigma, - const double &rcut_in, - const double &tol_in, - const UnitCell& ucell, - const double &dk, - const double &dr - ) +void Bessel_Basis::init(const bool start_from_file, + const double& ecutwfc, + const int& ntype, + const int& lmax_in, + const bool& smooth, + const double& sigma, + const double& rcut_in, + const double& tol_in, + const UnitCell& ucell, + const double& dk, + const double& dr) { - ModuleBase::TITLE("Bessel_Basis", "init"); - this->Dk = dk; - this->ecut = ecutwfc; - this->rcut = rcut_in; - this->tolerence = tol_in; + ModuleBase::TITLE("Bessel_Basis", "init"); + this->Dk = dk; + this->ecut = ecutwfc; + this->rcut = rcut_in; + this->tolerence = tol_in; this->smooth = smooth; this->sigma = sigma; @@ -51,158 +49,152 @@ void Bessel_Basis::init( assert(this->Ecut_number > 0); //------------------ - // Making a table - //------------------ - - this->init_TableOne( smooth, sigma, ecutwfc, rcut, dr, Dk, lmax_in, Ecut_number, tolerence); - -//----------------------------------------------- -// for test. -//----------------------------------------------- -// GlobalV::ofs_running << "\n TableOne:"; -// for(int i=0; iallocate_C4(ntype, lmax_in, ucell.nmax, Ecut_number, ucell); - // check tolerence - this->readin_C4("INPUTs", ntype, ecut, rcut, Ecut_number, tolerence, ucell); + // Making a table + //------------------ + + this->init_TableOne(smooth, sigma, ecutwfc, rcut, dr, Dk, lmax_in, Ecut_number, tolerence); + + //----------------------------------------------- + // for test. + //----------------------------------------------- + // GlobalV::ofs_running << "\n TableOne:"; + // for(int i=0; iallocate_C4(ntype, lmax_in, ucell.nmax, Ecut_number, ucell); + // check tolerence + this->readin_C4("INPUTs", ntype, ecut, rcut, Ecut_number, tolerence, ucell); #ifdef __MPI - Parallel_Common::bcast_double( C4.ptr, C4.getSize() ); + Parallel_Common::bcast_double(C4.ptr, C4.getSize()); #endif - this->init_Faln(ntype, lmax_in, ucell.nmax, Ecut_number, ucell); - } + this->init_Faln(ntype, lmax_in, ucell.nmax, Ecut_number, ucell); + } - return; + return; } -double Bessel_Basis::Polynomial_Interpolation2 - (const int &l, const int &ie, const double &gnorm)const +double Bessel_Basis::Polynomial_Interpolation2(const int& l, const int& ie, const double& gnorm) const { - const double position = gnorm / this->Dk; - const int iq = static_cast(position); - /* - if(iq >= kmesh-4) - { - std::cout << "\n iq = " << iq; - std::cout << "\n kmesh = " << kmesh; - ModuleBase::QUIT(); - } - */ - assert(iq < kmesh-4); - const double x0 = position - static_cast(iq); - const double x1 = 1.0 - x0; - const double x2 = 2.0 - x0; - const double x3 = 3.0 - x0; - const double y= - this->TableOne(l, ie, iq) * x1 * x2 * x3 / 6.0 + - this->TableOne(l, ie, iq+1) * x0 * x2 * x3 / 2.0 - - this->TableOne(l, ie, iq+2) * x1 * x0 * x3 / 2.0 + - this->TableOne(l, ie, iq+3) * x1 * x2 * x0 / 6.0 ; - return y; + const double position = gnorm / this->Dk; + const int iq = static_cast(position); + /* + if(iq >= kmesh-4) + { + std::cout << "\n iq = " << iq; + std::cout << "\n kmesh = " << kmesh; + ModuleBase::QUIT(); + } + */ + assert(iq < kmesh - 4); + const double x0 = position - static_cast(iq); + const double x1 = 1.0 - x0; + const double x2 = 2.0 - x0; + const double x3 = 3.0 - x0; + const double y = this->TableOne(l, ie, iq) * x1 * x2 * x3 / 6.0 + this->TableOne(l, ie, iq + 1) * x0 * x2 * x3 / 2.0 + - this->TableOne(l, ie, iq + 2) * x1 * x0 * x3 / 2.0 + + this->TableOne(l, ie, iq + 3) * x1 * x2 * x0 / 6.0; + return y; } -double Bessel_Basis::Polynomial_Interpolation( - const int &it, const int &l, const int &ic, const double &gnorm)const +double Bessel_Basis::Polynomial_Interpolation(const int& it, const int& l, const int& ic, const double& gnorm) const { - const double position = gnorm / this->Dk; - const int iq = static_cast(position); - assert(iq < kmesh-4); - const double x0 = position - static_cast(iq); - const double x1 = 1.0 - x0; - const double x2 = 2.0 - x0; - const double x3 = 3.0 - x0; - const double y= - this->Faln(it, l, ic, iq) * x1 * x2 * x3 / 6.0 + - this->Faln(it, l, ic, iq+1) * x0 * x2 * x3 / 2.0 - - this->Faln(it, l, ic, iq+2) * x1 * x0 * x3 / 2.0 + - this->Faln(it, l, ic, iq+3) * x1 * x2 * x0 / 6.0 ; - return y; + const double position = gnorm / this->Dk; + const int iq = static_cast(position); + assert(iq < kmesh - 4); + const double x0 = position - static_cast(iq); + const double x1 = 1.0 - x0; + const double x2 = 2.0 - x0; + const double x3 = 3.0 - x0; + const double y = this->Faln(it, l, ic, iq) * x1 * x2 * x3 / 6.0 + this->Faln(it, l, ic, iq + 1) * x0 * x2 * x3 / 2.0 + - this->Faln(it, l, ic, iq + 2) * x1 * x0 * x3 / 2.0 + + this->Faln(it, l, ic, iq + 3) * x1 * x2 * x0 / 6.0; + return y; } -void Bessel_Basis::init_Faln( - const int &ntype, - const int &lmax, - const int &nmax, - const int &ecut_number, - const UnitCell& ucell) +void Bessel_Basis::init_Faln(const int& ntype, + const int& lmax, + const int& nmax, + const int& ecut_number, + const UnitCell& ucell) { - ModuleBase::TITLE("Bessel_Basis","init_Faln"); - ModuleBase::timer::tick("Spillage","init_Faln"); - assert( this->kmesh > 0); - - this->Faln.create(ntype, lmax+1, nmax, this->kmesh); - - this->nwfc = 0; - for(int it=0; itkmesh; ik++) - { - this->Faln(it, il, in, ik) += this->C4(it, il, in, ie) * this->TableOne(il, ie, ik); - } - } - nwfc+=2*il+1; - } - } - } - ModuleBase::GlobalFunc::OUT("nwfc = ",nwfc); - - ModuleBase::timer::tick("Spillage","init_Faln"); - return; + ModuleBase::TITLE("Bessel_Basis", "init_Faln"); + ModuleBase::timer::tick("Spillage", "init_Faln"); + assert(this->kmesh > 0); + + this->Faln.create(ntype, lmax + 1, nmax, this->kmesh); + + this->nwfc = 0; + for (int it = 0; it < ntype; it++) + { + for (int il = 0; il < ucell.atoms[it].nwl + 1; il++) + { + for (int in = 0; in < ucell.atoms[it].l_nchi[il]; in++) + { + for (int ie = 0; ie < ecut_number; ie++) + { + for (int ik = 0; ik < this->kmesh; ik++) + { + this->Faln(it, il, in, ik) += this->C4(it, il, in, ie) * this->TableOne(il, ie, ik); + } + } + nwfc += 2 * il + 1; + } + } + } + ModuleBase::GlobalFunc::OUT("nwfc = ", nwfc); + + ModuleBase::timer::tick("Spillage", "init_Faln"); + return; } // be called in Bessel_Basis::init() -void Bessel_Basis::init_TableOne( - const bool smooth_in, // mohan add 2009-08-28 - const double &sigma_in, // mohan add 2009-08-28 - const double &ecutwfc, - const double &rcut, - const double &dr, - const double &dk, - const int &lmax, - const int &ecut_number, - const double &tolerence) +void Bessel_Basis::init_TableOne(const bool smooth_in, // mohan add 2009-08-28 + const double& sigma_in, // mohan add 2009-08-28 + const double& ecutwfc, + const double& rcut, + const double& dr, + const double& dk, + const int& lmax, + const int& ecut_number, + const double& tolerence) { - ModuleBase::TITLE("Bessel_Basis","init_TableOne"); - ModuleBase::timer::tick("Spillage","TableONe"); - // check - assert(ecutwfc > 0.0); - assert(dr > 0.0); - assert(dk > 0.0); - - // init kmesh - this->kmesh = static_cast(sqrt(ecutwfc) / dk) +1 + 4; - if (kmesh % 2 == 0)++kmesh; - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "kmesh",kmesh); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "dk",dk); - - // init Table One - this->TableOne.create(lmax+1, ecut_number, kmesh); - - // init rmesh - int rmesh = static_cast( rcut / dr ) + 4; - if (rmesh % 2 == 0) ++rmesh; - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "rmesh",rmesh); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "dr",dr); - - // allocate rmesh and Jlk and eigenvalue of Jlq - // double *r = new double[rmesh]; - // double *rab = new double[rmesh]; - // double *jle = new double[rmesh]; - // double *jlk = new double[rmesh]; - // double *g = new double[rmesh]; // smooth function - // double *function = new double[rmesh]; - // double *en = new double[ecut_number]; + ModuleBase::TITLE("Bessel_Basis", "init_TableOne"); + ModuleBase::timer::tick("Spillage", "TableONe"); + // check + assert(ecutwfc > 0.0); + assert(dr > 0.0); + assert(dk > 0.0); + + // init kmesh + this->kmesh = static_cast(sqrt(ecutwfc) / dk) + 1 + 4; + if (kmesh % 2 == 0) + ++kmesh; + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "kmesh", kmesh); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "dk", dk); + + // init Table One + this->TableOne.create(lmax + 1, ecut_number, kmesh); + + // init rmesh + int rmesh = static_cast(rcut / dr) + 4; + if (rmesh % 2 == 0) + ++rmesh; + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "rmesh", rmesh); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "dr", dr); + + // allocate rmesh and Jlk and eigenvalue of Jlq + // double *r = new double[rmesh]; + // double *rab = new double[rmesh]; + // double *jle = new double[rmesh]; + // double *jlk = new double[rmesh]; + // double *g = new double[rmesh]; // smooth function + // double *function = new double[rmesh]; + // double *en = new double[ecut_number]; std::vector r(rmesh); std::vector rab(rmesh); std::vector jle(rmesh); @@ -211,276 +203,286 @@ void Bessel_Basis::init_TableOne( std::vector function(rmesh); std::vector en(ecut_number); - for(int ir=0; ir(ir) * dr; - rab[ir] = dr; - if(smooth_in) - { - g[ir] = 1.0 - std::exp(-( (r[ir]-rcut)*(r[ir]-rcut)/2.0/sigma_in/sigma_in ) ); - } - } - - //caoyu add 2021-3-10 - //=========output .orb format============= - std::stringstream ss; - ss << PARAM.globalv.global_out_dir << "jle.orb"; - std::ofstream ofs(ss.str().c_str()); - ofs << "---------------------------------------------------------------------------"<< std::endl; - ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Energy Cutoff(Ry)" << ecut << std::endl; - ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Radius Cutoff(a.u.)" << rcut << std::endl; - ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Lmax" << lmax << std::endl; - for (int l = 0; l < lmax + 1; l++) - { - switch (l) - { - case 0: - ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Number of Sorbitals-->" << ecut_number << std::endl; - break; - case 1: - ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Number of Porbitals-->" << ecut_number << std::endl; - break; - case 2: - ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Number of Dorbitals-->" << ecut_number << std::endl; - break; - case 3: - ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Number of Forbitals-->" << ecut_number << std::endl; - break; - default: - ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Number of Gorbitals-->" << ecut_number << std::endl; - } - } - ofs << "---------------------------------------------------------------------------"<< std::endl; - ofs << "SUMMARY END" << std::endl << std::endl; - ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Mesh" << rmesh << std::endl; - ofs << std::setiosflags(std::ios::left) << std::setw(28) << "dr" << dr << std::endl ; - //=========output .orb format============= - - // init eigenvalue of Jl - for(int l=0; lTableOne(l, ie, ik) ); - } - - }// end ie - }// end ; - - if (ofs) - { - ofs.close(); //caoyu add 2020-3-10 - } - - // delete[] en; - // delete[] jle; - // delete[] jlk; - // delete[] rab; - // delete[] g; - // delete[] r; - // delete[] function; - ModuleBase::timer::tick("Spillage","TableONe"); - return; + for (int ir = 0; ir < rmesh; ir++) + { + r[ir] = static_cast(ir) * dr; + rab[ir] = dr; + if (smooth_in) + { + g[ir] = 1.0 - std::exp(-((r[ir] - rcut) * (r[ir] - rcut) / 2.0 / sigma_in / sigma_in)); + } + } + + // caoyu add 2021-3-10 + //=========output .orb format============= + std::stringstream ss; + ss << PARAM.globalv.global_out_dir << "jle.orb"; + std::ofstream ofs(ss.str().c_str()); + ofs << "---------------------------------------------------------------------------" << std::endl; + ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Energy Cutoff(Ry)" << ecut << std::endl; + ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Radius Cutoff(a.u.)" << rcut << std::endl; + ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Lmax" << lmax << std::endl; + for (int l = 0; l < lmax + 1; l++) + { + switch (l) + { + case 0: + ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Number of Sorbitals-->" << ecut_number + << std::endl; + break; + case 1: + ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Number of Porbitals-->" << ecut_number + << std::endl; + break; + case 2: + ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Number of Dorbitals-->" << ecut_number + << std::endl; + break; + case 3: + ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Number of Forbitals-->" << ecut_number + << std::endl; + break; + default: + ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Number of Gorbitals-->" << ecut_number + << std::endl; + } + } + ofs << "---------------------------------------------------------------------------" << std::endl; + ofs << "SUMMARY END" << std::endl << std::endl; + ofs << std::setiosflags(std::ios::left) << std::setw(28) << "Mesh" << rmesh << std::endl; + ofs << std::setiosflags(std::ios::left) << std::setw(28) << "dr" << dr << std::endl; + //=========output .orb format============= + + // init eigenvalue of Jl + for (int l = 0; l < lmax + 1; l++) + { + ModuleBase::GlobalFunc::ZEROS(en.data(), ecut_number); + ModuleBase::GlobalFunc::ZEROS(jle.data(), rmesh); + ModuleBase::GlobalFunc::ZEROS(jlk.data(), rmesh); + + // calculate eigenvalue for l + ModuleBase::Sphbes::Spherical_Bessel_Roots(ecut_number, l, tolerence, en.data(), rcut); + // for (int ie=0; ieTableOne(l, ie, ik)); + } + + } // end ie + } // end ; + + if (ofs) + { + ofs.close(); // caoyu add 2020-3-10 + } + + // delete[] en; + // delete[] jle; + // delete[] jlk; + // delete[] rab; + // delete[] g; + // delete[] r; + // delete[] function; + ModuleBase::timer::tick("Spillage", "TableONe"); + return; } -void Bessel_Basis::readin_C4( - const std::string &name, - const int &ntype, - const int &ecut, - const int &rcut, - const int &ecut_number, - const double &tolerence, - const UnitCell& ucell) +void Bessel_Basis::readin_C4(const std::string& name, + const int& ntype, + const int& ecut, + const int& rcut, + const int& ecut_number, + const double& tolerence, + const UnitCell& ucell) { - ModuleBase::TITLE("Bessel_Basis","readin_C4"); - - if(GlobalV::MY_RANK != 0) return; - - std::ifstream ifs( name.c_str() ); - - if(!ifs) - { - GlobalV::ofs_warning << " File name : " << name << std::endl; - ModuleBase::WARNING_QUIT("Bessel_Basis::readin_C4","Can not find file."); - } - - if (ModuleBase::GlobalFunc::SCAN_BEGIN(ifs, "")) - { - // mohan modify 2009-11-29 - for (int it = 0; it < ntype; it++) - { - std::string filec4; - ifs >> filec4; - for(int il=0; il< ucell.atoms[it].nwl+1; il++) - { - for(int in=0; in< ucell.atoms[it].l_nchi[il]; in++) - { - //for tests - //std::cout << "\n" << std::setw(5) << it << std::setw(5) << il << std::setw(5) << in; - //std::cout << "\n file=" << filec4; - std::ifstream inc4( filec4.c_str() ); - - if(!inc4) - { - GlobalV::ofs_warning << " File name : " << filec4 << std::endl; - ModuleBase::WARNING_QUIT("Bessel_Basis::readin_C4","Can not find file."); - } - - if(ModuleBase::GlobalFunc::SCAN_BEGIN(inc4, "")) - { - double tmp_ecut; - double tmp_rcut; - double tmp_enumber; - double tmp_tolerence; - ModuleBase::GlobalFunc::READ_VALUE( inc4, tmp_ecut); - ModuleBase::GlobalFunc::READ_VALUE( inc4, tmp_rcut); - ModuleBase::GlobalFunc::READ_VALUE( inc4, tmp_enumber); - ModuleBase::GlobalFunc::READ_VALUE( inc4, tmp_tolerence); - assert( tmp_ecut == this->ecut ); - assert( tmp_rcut == this->rcut ); - assert( tmp_enumber == this->Ecut_number); - assert( tmp_tolerence == this->tolerence ); - } - - bool find = false; - if(ModuleBase::GlobalFunc::SCAN_BEGIN(inc4, "")) - { - int total_nchi = 0; - ModuleBase::GlobalFunc::READ_VALUE(inc4, total_nchi); - - for(int ichi=0; ichi> title1 >> title2 >> title3; - - int tmp_type=0, tmp_l=0, tmp_n=0; - inc4 >> tmp_type >> tmp_l >> tmp_n; - //std::cout << "\n Find T=" << tmp_type << " L=" << tmp_l << " N=" << tmp_n; - - if(tmp_l == il && tmp_n == in) - //if(tmp_type == it && tmp_l == il && tmp_n == in) // mohan modify 2009-11-29 - { - find = true; - for(int ie=0; ie> this->C4(it, il, in, ie); - // for tests - //std::cout << "\n" << std::setw(5) << ie << std::setw(25) << this->C4(it, il, in, ie); - } - } - else - { - double no_use_c4 = 0.0; - for(int ie=0; ie> no_use_c4; - } - } - if(find) break; - } - } - if(!find) - { - std::cout << "\n T=" << it << " L=" << il << " N=" << in; - ModuleBase::WARNING_QUIT("Bessel_Basis::readin_C4","Can't find needed c4!"); - } - inc4.close(); - } - } - } - ModuleBase::GlobalFunc::SCAN_END(ifs, ""); - } - ifs.close(); - return; + ModuleBase::TITLE("Bessel_Basis", "readin_C4"); + + if (GlobalV::MY_RANK != 0) + return; + + std::ifstream ifs(name.c_str()); + + if (!ifs) + { + GlobalV::ofs_warning << " File name : " << name << std::endl; + ModuleBase::WARNING_QUIT("Bessel_Basis::readin_C4", "Can not find file."); + } + + if (ModuleBase::GlobalFunc::SCAN_BEGIN(ifs, "")) + { + // mohan modify 2009-11-29 + for (int it = 0; it < ntype; it++) + { + std::string filec4; + ifs >> filec4; + for (int il = 0; il < ucell.atoms[it].nwl + 1; il++) + { + for (int in = 0; in < ucell.atoms[it].l_nchi[il]; in++) + { + // for tests + // std::cout << "\n" << std::setw(5) << it << std::setw(5) << il << std::setw(5) << in; + // std::cout << "\n file=" << filec4; + std::ifstream inc4(filec4.c_str()); + + if (!inc4) + { + GlobalV::ofs_warning << " File name : " << filec4 << std::endl; + ModuleBase::WARNING_QUIT("Bessel_Basis::readin_C4", "Can not find file."); + } + + if (ModuleBase::GlobalFunc::SCAN_BEGIN(inc4, "")) + { + double tmp_ecut; + double tmp_rcut; + double tmp_enumber; + double tmp_tolerence; + ModuleBase::GlobalFunc::READ_VALUE(inc4, tmp_ecut); + ModuleBase::GlobalFunc::READ_VALUE(inc4, tmp_rcut); + ModuleBase::GlobalFunc::READ_VALUE(inc4, tmp_enumber); + ModuleBase::GlobalFunc::READ_VALUE(inc4, tmp_tolerence); + assert(tmp_ecut == this->ecut); + assert(tmp_rcut == this->rcut); + assert(tmp_enumber == this->Ecut_number); + assert(tmp_tolerence == this->tolerence); + } + + bool find = false; + if (ModuleBase::GlobalFunc::SCAN_BEGIN(inc4, "")) + { + int total_nchi = 0; + ModuleBase::GlobalFunc::READ_VALUE(inc4, total_nchi); + + for (int ichi = 0; ichi < total_nchi; ichi++) + { + std::string title1, title2, title3; + inc4 >> title1 >> title2 >> title3; + + int tmp_type = 0, tmp_l = 0, tmp_n = 0; + inc4 >> tmp_type >> tmp_l >> tmp_n; + // std::cout << "\n Find T=" << tmp_type << " L=" << tmp_l << " N=" << tmp_n; + + if (tmp_l == il && tmp_n == in) + // if(tmp_type == it && tmp_l == il && tmp_n == in) // mohan modify 2009-11-29 + { + find = true; + for (int ie = 0; ie < ecut_number; ie++) + { + inc4 >> this->C4(it, il, in, ie); + // for tests + // std::cout << "\n" << std::setw(5) << ie << std::setw(25) << this->C4(it, il, in, + // ie); + } + } + else + { + double no_use_c4 = 0.0; + for (int ie = 0; ie < ecut_number; ie++) + { + inc4 >> no_use_c4; + } + } + if (find) + break; + } + } + if (!find) + { + std::cout << "\n T=" << it << " L=" << il << " N=" << in; + ModuleBase::WARNING_QUIT("Bessel_Basis::readin_C4", "Can't find needed c4!"); + } + inc4.close(); + } + } + } + ModuleBase::GlobalFunc::SCAN_END(ifs, ""); + } + ifs.close(); + return; } -void Bessel_Basis::allocate_C4( - const int &ntype, - const int &lmax, - const int &nmax, - const int &ecut_number, - const UnitCell& ucell) +void Bessel_Basis::allocate_C4(const int& ntype, + const int& lmax, + const int& nmax, + const int& ecut_number, + const UnitCell& ucell) { - ModuleBase::TITLE("Bessel_Basis","allocate_C4"); - - this->C4.create(ntype, lmax+1, nmax, ecut_number); - - for(int it=0; itC4(it, il, in, ie) = 1.0; - } - } - } - } - return; + ModuleBase::TITLE("Bessel_Basis", "allocate_C4"); + + this->C4.create(ntype, lmax + 1, nmax, ecut_number); + + for (int it = 0; it < ntype; it++) + { + for (int il = 0; il < ucell.atoms[it].nwl + 1; il++) + { + for (int in = 0; in < ucell.atoms[it].l_nchi[il]; in++) + { + for (int ie = 0; ie < ecut_number; ie++) + { + this->C4(it, il, in, ie) = 1.0; + } + } + } + } + return; } diff --git a/source/module_io/bessel_basis.h b/source/module_io/bessel_basis.h index cf4c609b6e..49fca0926c 100644 --- a/source/module_io/bessel_basis.h +++ b/source/module_io/bessel_basis.h @@ -5,11 +5,10 @@ //========================================================== #ifndef BESSEL_BASIS_H #define BESSEL_BASIS_H -#include "../module_base/global_function.h" -#include "../module_base/global_variable.h" -#include "../module_base/realarray.h" - #include "../module_cell/unitcell.h" +#include "../source_base/global_function.h" +#include "../source_base/global_variable.h" +#include "../source_base/realarray.h" //========================================================== // CLASS : @@ -17,174 +16,183 @@ //========================================================== class Bessel_Basis { -public: - Bessel_Basis(); - ~Bessel_Basis(); - - /// @brief Initialization of Bessel function related matrices. - /// @details Used for a specific group of C4 coefficients. 2021-01-04, mohan added a new input parameter lmax_in, if we only generate numerical atomic orbitals based on spherical Bessel functions, lmax_in = ucell.lmax. However, if we want to generate Spherical Bessel functions (SBF) for descriptor, then the lmax_in is controlled by user. - /// @note This function is called in module_io/numerical_basis.cpp and module_io/numerical_descriptor.cpp - /// @param start_from_file whether read C4 coefficients stored in external files - /// @param ecutwfc cutoff for numerical atomic orbitals - /// @param ntype atom types - /// @param lmax_in maximal angular momentum for numerical orbitals - /// @param smooth whether smooth SBFs when perform integration to calculate value of matrix element of TableOne. For details, see J. Phys.: Condens. Matter 22 (2010) 445501 - /// @param sigma stddev of Gaussian function for smoothing SBFs - /// @param rcut_in cutoff radius for SBFs - /// @param tol_in accurancy control for SBFs - /// @param dk kspace grid - /// @param dr realspace grid - /// @param ucell UnitCell class object, ucell.nmax will be used in this function - void init( - const bool start_from_file, - const double &ecutwfc, - const int &ntype, - const int &lmax_in, - const bool &smooth, - const double &sigma, - const double &rcut_in, - const double &tol_in, - const UnitCell& ucell, - const double &dk = 0.01, - const double &dr = 0.01 - ); - /// @brief return number of SBFs used for one `chi` (see details for more information) - /// @details atomic orbital is constructed always with not only one set of SBFs. For different sets, they are marked with different `chi`(s), similar with concept of contracted GTOs. For one `chi`, it is 'q' the summation index, and q is in SBFs like: j_l(q*r), where l is the order of SBF. - /// @return number of SBFs - const int& get_ecut_number() const { return Ecut_number;} - - /// @brief Cubic spline interpolation for matrix Faln - /// @param it atom type index - /// @param l angular momentum - /// @param ic chi index - /// @param gnorm norm of G+k vector - /// @return interpolated value - double Polynomial_Interpolation(const int &it, const int &l, const int &ic, const double &gnorm)const; - /// @brief Cubic spline interpolation for matrix TableOne - /// @param l angular momentum - /// @param ie q index (see explanation in note of function BesselBasis::get_ecut_number()) - /// @param gnorm norm of G+k vector - /// @return interpolated value - double Polynomial_Interpolation2(const int &l, const int &ie, const double &gnorm)const; - - - /// @brief get energy cutoff, which is used to truncate SBF Jlq. - /// @param - /// @return energy cutoff in Ry - const double &get_ecut() const {return ecut;} - /// @brief cutoff radius of radial SBF Jlq. - /// @param - /// @return cutoff radius in a.u. - const double &get_rcut() const {return rcut;} - - const double &get_tolerence() const {return tolerence;} - - - /// @brief check if SBFs are smoothed (mohan add 2009-08-28) - /// @attention in this case, the Jlq are not the true Jlq. - /// @param - /// @return boolean whether SBFs are smoothed - const bool &get_smooth() const {return smooth;} - /// @brief get sigma the stddev (standard deviation) used in smooth function (Gaussian function) - /// @param - /// @return stddev of smooth function - const double &get_sigma() const {return sigma;} - -private: - /// @brief the most important array to calculate spillage, has dimension (ntype, lmax+1, max_n, nk) - ModuleBase::realArray Faln; - - /// @brief Coefficients to be optimized! - ModuleBase::realArray C4; - - /// @brief matrix whose elements are int{dr r^2 j_l(qr)*j_l(kr)}, has dimension (lmax+1, nq, nk) - ModuleBase::realArray TableOne; - - /// @brief mesh of k vector, k is in j_l(k*r) - int kmesh=0; - /// @brief grid of k - double Dk; - /// @brief number of q vector, q is in j_l(q*r) - int Ecut_number; - /// @brief Cutoff radius (in a.u.) of SBFs, for any SBF j_l(qr), r>=rcut, j_l(q*r) = 0 (if not smoothed) - double rcut=0.0; - /// @brief energy cutoff for determining kmesh and number of SBFs - double ecut=0.0; - double tolerence=0.0; - /// @brief whether smooth SBFs around cutoff radius, resulting in non-zero values. For importance of smooth of SBFs, see J. Phys.: Condens. Matter 22 (2010) 445501, eqn 6. (mohan add 2009-01-18) - bool smooth=false; - /// @brief stddev of smooth function (Gaussian function, centered at rcut) - double sigma=0.0; - - /// @brief Allocate memory for C4 matrix and initialize all elements to one. - /// @param ntype number of atom types - /// @param lmax maximal angular momentum of localized orbitals - /// @param nmax maximal principal quantum number of localized orbitals - /// @param ecut_number number of SBFs - void allocate_C4( - const int &ntype, - const int &lmax, - const int &nmax, - const int &ecut_number, - const UnitCell& ucell - ); - - /// @brief Read C4 from external file. Presently an O(N^2) search algorithm is used. A HTML parser is needed in the future to improve performance. - /// @param name name of external file where C4-stored file information is contained - /// @param ntype number of atom types - /// @param ecut energy cutoff - /// @param rcut cutoff radius - /// @param ecut_number number of SBFs - /// @param tolerence accurancy of SBFs, here only used for consistency check - void readin_C4( - const std::string &name, - const int &ntype, - const int &ecut, - const int &rcut, - const int &ecut_number, - const double &tolerence, - const UnitCell& ucell - ); - - void init_TableOne(); - - /// @brief calculate F_{aln}(it, il, in, ik) = sum_{ie}{C4(it, il, in, ie)*TableOne(il, ie, ik)}, where TableOne is overlap integral between two spherical bessel functions (jle(r) and jlk(r)) - /// @param ntype number of atomtype - /// @param lmax maximal angular momentum - /// @param nmax maximal chi - /// @param ecut_number number of SBFs - void init_Faln( - const int &ntype, - const int &lmax, - const int &nmax, - const int &ecut_number, - const UnitCell& ucell - ); - - /// @brief number of localized wave functions - int nwfc=0; - - /// @brief calculate element value of TableOne matrix - /// @details (be called in Bessel_Basis::init(), used for outputing overlap Q matrix) initialize the table whose matrix element is the result of integral int{dr r^2 jle(r)*jlk(r)}, TableOne has three subscript (l, ie, ik), the first runs over orbitals' angular momentum and ie, ik run over ecut_number and kmesh SBFs - /// @param smooth_in whether jle(r) SBF is smoothed by a Gaussian function - /// @param sigma_in stddev for controlling smearing of Gaussian function for smoothing jle(r) - /// @param ecutwfc planewave kinetic energy cutoff for controlling kspace sampling - /// @param rcut cutoff radius of SBFs - /// @param dr realspace grid - /// @param dk kspace grid - /// @param lmax maximal angular momentum for SBFs - /// @param ecut_number number of SBFs - /// @param tolerence accurancy of SBFs - void init_TableOne( - const bool smooth_in, - const double &sigma_in, - const double &ecut, - const double &rcut, - const double &dr, - const double &dk, - const int &lmax, - const int &ecut_number, - const double &tolerence); + public: + Bessel_Basis(); + ~Bessel_Basis(); + + /// @brief Initialization of Bessel function related matrices. + /// @details Used for a specific group of C4 coefficients. 2021-01-04, mohan added a new input parameter lmax_in, if + /// we only generate numerical atomic orbitals based on spherical Bessel functions, lmax_in = ucell.lmax. However, + /// if we want to generate Spherical Bessel functions (SBF) for descriptor, then the lmax_in is controlled by user. + /// @note This function is called in module_io/numerical_basis.cpp and module_io/numerical_descriptor.cpp + /// @param start_from_file whether read C4 coefficients stored in external files + /// @param ecutwfc cutoff for numerical atomic orbitals + /// @param ntype atom types + /// @param lmax_in maximal angular momentum for numerical orbitals + /// @param smooth whether smooth SBFs when perform integration to calculate value of matrix element of TableOne. For + /// details, see J. Phys.: Condens. Matter 22 (2010) 445501 + /// @param sigma stddev of Gaussian function for smoothing SBFs + /// @param rcut_in cutoff radius for SBFs + /// @param tol_in accurancy control for SBFs + /// @param dk kspace grid + /// @param dr realspace grid + /// @param ucell UnitCell class object, ucell.nmax will be used in this function + void init(const bool start_from_file, + const double& ecutwfc, + const int& ntype, + const int& lmax_in, + const bool& smooth, + const double& sigma, + const double& rcut_in, + const double& tol_in, + const UnitCell& ucell, + const double& dk = 0.01, + const double& dr = 0.01); + /// @brief return number of SBFs used for one `chi` (see details for more information) + /// @details atomic orbital is constructed always with not only one set of SBFs. For different sets, they are marked + /// with different `chi`(s), similar with concept of contracted GTOs. For one `chi`, it is 'q' the summation index, + /// and q is in SBFs like: j_l(q*r), where l is the order of SBF. + /// @return number of SBFs + const int& get_ecut_number() const + { + return Ecut_number; + } + + /// @brief Cubic spline interpolation for matrix Faln + /// @param it atom type index + /// @param l angular momentum + /// @param ic chi index + /// @param gnorm norm of G+k vector + /// @return interpolated value + double Polynomial_Interpolation(const int& it, const int& l, const int& ic, const double& gnorm) const; + /// @brief Cubic spline interpolation for matrix TableOne + /// @param l angular momentum + /// @param ie q index (see explanation in note of function BesselBasis::get_ecut_number()) + /// @param gnorm norm of G+k vector + /// @return interpolated value + double Polynomial_Interpolation2(const int& l, const int& ie, const double& gnorm) const; + + /// @brief get energy cutoff, which is used to truncate SBF Jlq. + /// @param + /// @return energy cutoff in Ry + const double& get_ecut() const + { + return ecut; + } + /// @brief cutoff radius of radial SBF Jlq. + /// @param + /// @return cutoff radius in a.u. + const double& get_rcut() const + { + return rcut; + } + + const double& get_tolerence() const + { + return tolerence; + } + + /// @brief check if SBFs are smoothed (mohan add 2009-08-28) + /// @attention in this case, the Jlq are not the true Jlq. + /// @param + /// @return boolean whether SBFs are smoothed + const bool& get_smooth() const + { + return smooth; + } + /// @brief get sigma the stddev (standard deviation) used in smooth function (Gaussian function) + /// @param + /// @return stddev of smooth function + const double& get_sigma() const + { + return sigma; + } + + private: + /// @brief the most important array to calculate spillage, has dimension (ntype, lmax+1, max_n, nk) + ModuleBase::realArray Faln; + + /// @brief Coefficients to be optimized! + ModuleBase::realArray C4; + + /// @brief matrix whose elements are int{dr r^2 j_l(qr)*j_l(kr)}, has dimension (lmax+1, nq, nk) + ModuleBase::realArray TableOne; + + /// @brief mesh of k vector, k is in j_l(k*r) + int kmesh = 0; + /// @brief grid of k + double Dk; + /// @brief number of q vector, q is in j_l(q*r) + int Ecut_number; + /// @brief Cutoff radius (in a.u.) of SBFs, for any SBF j_l(qr), r>=rcut, j_l(q*r) = 0 (if not smoothed) + double rcut = 0.0; + /// @brief energy cutoff for determining kmesh and number of SBFs + double ecut = 0.0; + double tolerence = 0.0; + /// @brief whether smooth SBFs around cutoff radius, resulting in non-zero values. For importance of smooth of SBFs, + /// see J. Phys.: Condens. Matter 22 (2010) 445501, eqn 6. (mohan add 2009-01-18) + bool smooth = false; + /// @brief stddev of smooth function (Gaussian function, centered at rcut) + double sigma = 0.0; + + /// @brief Allocate memory for C4 matrix and initialize all elements to one. + /// @param ntype number of atom types + /// @param lmax maximal angular momentum of localized orbitals + /// @param nmax maximal principal quantum number of localized orbitals + /// @param ecut_number number of SBFs + void allocate_C4(const int& ntype, const int& lmax, const int& nmax, const int& ecut_number, const UnitCell& ucell); + + /// @brief Read C4 from external file. Presently an O(N^2) search algorithm is used. A HTML parser is needed in the + /// future to improve performance. + /// @param name name of external file where C4-stored file information is contained + /// @param ntype number of atom types + /// @param ecut energy cutoff + /// @param rcut cutoff radius + /// @param ecut_number number of SBFs + /// @param tolerence accurancy of SBFs, here only used for consistency check + void readin_C4(const std::string& name, + const int& ntype, + const int& ecut, + const int& rcut, + const int& ecut_number, + const double& tolerence, + const UnitCell& ucell); + + void init_TableOne(); + + /// @brief calculate F_{aln}(it, il, in, ik) = sum_{ie}{C4(it, il, in, ie)*TableOne(il, ie, ik)}, where TableOne is + /// overlap integral between two spherical bessel functions (jle(r) and jlk(r)) + /// @param ntype number of atomtype + /// @param lmax maximal angular momentum + /// @param nmax maximal chi + /// @param ecut_number number of SBFs + void init_Faln(const int& ntype, const int& lmax, const int& nmax, const int& ecut_number, const UnitCell& ucell); + + /// @brief number of localized wave functions + int nwfc = 0; + + /// @brief calculate element value of TableOne matrix + /// @details (be called in Bessel_Basis::init(), used for outputing overlap Q matrix) initialize the table whose + /// matrix element is the result of integral int{dr r^2 jle(r)*jlk(r)}, TableOne has three subscript (l, ie, ik), + /// the first runs over orbitals' angular momentum and ie, ik run over ecut_number and kmesh SBFs + /// @param smooth_in whether jle(r) SBF is smoothed by a Gaussian function + /// @param sigma_in stddev for controlling smearing of Gaussian function for smoothing jle(r) + /// @param ecutwfc planewave kinetic energy cutoff for controlling kspace sampling + /// @param rcut cutoff radius of SBFs + /// @param dr realspace grid + /// @param dk kspace grid + /// @param lmax maximal angular momentum for SBFs + /// @param ecut_number number of SBFs + /// @param tolerence accurancy of SBFs + void init_TableOne(const bool smooth_in, + const double& sigma_in, + const double& ecut, + const double& rcut, + const double& dr, + const double& dk, + const int& lmax, + const int& ecut_number, + const double& tolerence); }; #endif diff --git a/source/module_io/cal_dos.cpp b/source/module_io/cal_dos.cpp index e9cf1b64cc..79aa2913c3 100644 --- a/source/module_io/cal_dos.cpp +++ b/source/module_io/cal_dos.cpp @@ -1,50 +1,55 @@ #include "cal_dos.h" -#include "module_base/constants.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_reduce.h" #include "module_parameter/parameter.h" +#include "source_base/constants.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_reduce.h" void ModuleIO::prepare_dos(std::ofstream& ofs_running, - const elecstate::efermi &energy_fermi, - const ModuleBase::matrix& ekb, - const int nks, - const int nbands, - const double& dos_edelta_ev, - const double& dos_scale, - double &emax, - double &emin) + const elecstate::efermi& energy_fermi, + const ModuleBase::matrix& ekb, + const int nks, + const int nbands, + const double& dos_edelta_ev, + const double& dos_scale, + double& emax, + double& emin) { - ofs_running << " DOS CALCULATIONS BEGINS" << std::endl; - ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - ">>>>>>>>>>>>>>>>>>>>>>>>>" << std::endl; - ofs_running << " | " - " |" << std::endl; - ofs_running << " | DOS stands for Density of States. It represents the number of |" << std::endl; - ofs_running << " | available electronic states per unit energy range. |" << std::endl; - ofs_running << " | By analyzing the DOS, we can gain insights into how electrons are |" << std::endl; - ofs_running << " | distributed among different energy levels within the material. |" << std::endl; - ofs_running << " | " - " |" << std::endl; - ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - ">>>>>>>>>>>>>>>>>>>>>>>>>" << std::endl; + ofs_running << " DOS CALCULATIONS BEGINS" << std::endl; + ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + ">>>>>>>>>>>>>>>>>>>>>>>>>" + << std::endl; + ofs_running << " | " + " |" + << std::endl; + ofs_running << " | DOS stands for Density of States. It represents the number of |" << std::endl; + ofs_running << " | available electronic states per unit energy range. |" << std::endl; + ofs_running << " | By analyzing the DOS, we can gain insights into how electrons are |" << std::endl; + ofs_running << " | distributed among different energy levels within the material. |" << std::endl; + ofs_running << " | " + " |" + << std::endl; + ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + ">>>>>>>>>>>>>>>>>>>>>>>>>" + << std::endl; ofs_running << std::setprecision(6); - assert(nbands>0); + assert(nbands > 0); if (PARAM.globalv.two_fermi == false) { - ModuleBase::GlobalFunc::OUT(ofs_running, "Fermi energy (eV)", - energy_fermi.ef * ModuleBase::Ry_to_eV); + ModuleBase::GlobalFunc::OUT(ofs_running, "Fermi energy (eV)", energy_fermi.ef * ModuleBase::Ry_to_eV); } else { - ModuleBase::GlobalFunc::OUT(ofs_running, "Spin up, Fermi energy (Ry)", - energy_fermi.ef_up * ModuleBase::Ry_to_eV); - ModuleBase::GlobalFunc::OUT(ofs_running, "Spin dw, Fermi energy (Ry)", - energy_fermi.ef_dw * ModuleBase::Ry_to_eV); + ModuleBase::GlobalFunc::OUT(ofs_running, + "Spin up, Fermi energy (Ry)", + energy_fermi.ef_up * ModuleBase::Ry_to_eV); + ModuleBase::GlobalFunc::OUT(ofs_running, + "Spin dw, Fermi energy (Ry)", + energy_fermi.ef_dw * ModuleBase::Ry_to_eV); } // find energy range @@ -84,28 +89,27 @@ void ModuleIO::prepare_dos(std::ofstream& ofs_running, emin = emin - delta / 2.0; } - assert(dos_edelta_ev>0.0); + assert(dos_edelta_ev > 0.0); ModuleBase::GlobalFunc::OUT(ofs_running, "Minimal energy is (eV)", emin); ModuleBase::GlobalFunc::OUT(ofs_running, "Maximal energy is (eV)", emax); ModuleBase::GlobalFunc::OUT(ofs_running, "Energy interval (eV)", dos_edelta_ev); - } -bool ModuleIO::cal_dos(const int& is, // index for spin - const std::string& fn, // file name for DOS - const double& de_ev, // delta energy in ev - const double& emax_ev, // maximal energy in eV - const double& emin_ev, // minimal energy in ev. - const double& bcoeff, - const int& nks, // number of k points in this pool - const int& nkstot, // number of total kpoints - const std::vector& wk, // weight of k points - const std::vector& isk, // index of spin for each k-point - const int& nbands, // number of bands - const ModuleBase::matrix& ekb, // energy for each k point and each band - const ModuleBase::matrix& wg // weight of k-points and bands - ) +bool ModuleIO::cal_dos(const int& is, // index for spin + const std::string& fn, // file name for DOS + const double& de_ev, // delta energy in ev + const double& emax_ev, // maximal energy in eV + const double& emin_ev, // minimal energy in ev. + const double& bcoeff, + const int& nks, // number of k points in this pool + const int& nkstot, // number of total kpoints + const std::vector& wk, // weight of k points + const std::vector& isk, // index of spin for each k-point + const int& nbands, // number of bands + const ModuleBase::matrix& ekb, // energy for each k point and each band + const ModuleBase::matrix& wg // weight of k-points and bands +) { ModuleBase::TITLE("ModuleIO", "cal_dos"); @@ -141,7 +145,7 @@ bool ModuleIO::cal_dos(const int& is, // index for spin return false; } - const int npoints = static_cast(std::floor((emax_ev - emin_ev) / de_ev))+1; + const int npoints = static_cast(std::floor((emax_ev - emin_ev) / de_ev)) + 1; if (npoints <= 0) { @@ -152,14 +156,11 @@ bool ModuleIO::cal_dos(const int& is, // index for spin if (GlobalV::MY_RANK == 0) { ofs_dos << npoints << " # number of points" << std::endl; - ofs_dos << "#" << std::setw(14) << "energy" - << std::setw(15) << "elec_states" - << std::setw(15) << "sum_states" - << std::setw(15) << "states_smear" - << std::setw(15) << "sum_states" << std::endl; + ofs_dos << "#" << std::setw(14) << "energy" << std::setw(15) << "elec_states" << std::setw(15) << "sum_states" + << std::setw(15) << "states_smear" << std::setw(15) << "sum_states" << std::endl; } - std::vector e_mod(npoints, 0.0); + std::vector e_mod(npoints, 0.0); double sum = 0.0; double curr_energy = emin_ev; @@ -181,10 +182,9 @@ bool ModuleIO::cal_dos(const int& is, // index for spin for (int ib = 0; ib < nbands; ib++) { // compare et and e_old(curr_energy) in ev unit. - if (ekb(ik, ib) * ModuleBase::Ry_to_eV >= e_old - && ekb(ik, ib) * ModuleBase::Ry_to_eV < curr_energy) + if (ekb(ik, ib) * ModuleBase::Ry_to_eV >= e_old && ekb(ik, ib) * ModuleBase::Ry_to_eV < curr_energy) { - nstates += wk[ik] * nkstot; + nstates += wk[ik] * nkstot; } } } @@ -211,7 +211,7 @@ bool ModuleIO::cal_dos(const int& is, // index for spin dos_smear.resize(dos.size()); double b = sqrt(2.0) * bcoeff; - for (int i = 0; i < dos.size() ; i++) + for (int i = 0; i < dos.size(); i++) { double Gauss = 0.0; @@ -225,22 +225,19 @@ bool ModuleIO::cal_dos(const int& is, // index for spin } // mohan add 2025-06-08 - const double dos_thr = 1.0e-12; + const double dos_thr = 1.0e-12; double sum2 = 0.0; for (int i = 0; i < dos.size(); i++) { - if(dos_smear[i] -#include "module_base/matrix.h" #include "module_elecstate/fp_energy.h" +#include "source_base/matrix.h" + +#include namespace ModuleIO { - void prepare_dos(std::ofstream& ofs_running, - const elecstate::efermi &energy_fermi, - const ModuleBase::matrix& ekb, - const int nks, - const int nbands, - const double& dos_edelta_ev, - const double& dos_scale, - double &emax, - double &emin); - - bool cal_dos(const int &is, - const std::string &fn,// file address for DOS. - const double &de_ev, // delta energy in ev. - const double &emax_ev,// maximal energy in ev. - const double &emin_ev,// minimal energy in ev. - const double &bcoeff, - const int &nks,//number of k points - const int &nkstot, - const std::vector &wk,//weight of k points - const std::vector &isk, - const int &nbands,// number of bands - const ModuleBase::matrix &ekb, //store energy for each k point and each band - const ModuleBase::matrix &wg); //weight of (kpoint,bands)) +void prepare_dos(std::ofstream& ofs_running, + const elecstate::efermi& energy_fermi, + const ModuleBase::matrix& ekb, + const int nks, + const int nbands, + const double& dos_edelta_ev, + const double& dos_scale, + double& emax, + double& emin); +bool cal_dos(const int& is, + const std::string& fn, // file address for DOS. + const double& de_ev, // delta energy in ev. + const double& emax_ev, // maximal energy in ev. + const double& emin_ev, // minimal energy in ev. + const double& bcoeff, + const int& nks, // number of k points + const int& nkstot, + const std::vector& wk, // weight of k points + const std::vector& isk, + const int& nbands, // number of bands + const ModuleBase::matrix& ekb, // store energy for each k point and each band + const ModuleBase::matrix& wg); // weight of (kpoint,bands)) -} +} // namespace ModuleIO -#endif +#endif diff --git a/source/module_io/cal_mlkedf_descriptors.h b/source/module_io/cal_mlkedf_descriptors.h index 97bec5e310..fa30099cc6 100644 --- a/source/module_io/cal_mlkedf_descriptors.h +++ b/source/module_io/cal_mlkedf_descriptors.h @@ -1,10 +1,11 @@ #ifndef CAL_MLKEDF_DESCRIPTORS_H #define CAL_MLKEDF_DESCRIPTORS_H -#include -#include "module_base/global_function.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" +#include "source_base/global_function.h" + +#include namespace ModuleIO { @@ -17,68 +18,87 @@ namespace ModuleIO */ class Cal_MLKEDF_Descriptors { -public: - ~Cal_MLKEDF_Descriptors() {} + public: + ~Cal_MLKEDF_Descriptors() + { + } - void set_para( - const int &nx, - const double &nelec, - const double &tf_weight, - const double &vw_weight, - const double &chi_p, - const double &chi_q, - const std::vector &chi_xi, - const std::vector &chi_pnl, - const std::vector &chi_qnl, - const int &nkernel, - const std::vector &kernel_type, - const std::vector &kernel_scaling, - const std::vector &yukawa_alpha, - const std::vector &kernel_file, - const double &omega, - ModulePW::PW_Basis *pw_rho); + void set_para(const int& nx, + const double& nelec, + const double& tf_weight, + const double& vw_weight, + const double& chi_p, + const double& chi_q, + const std::vector& chi_xi, + const std::vector& chi_pnl, + const std::vector& chi_qnl, + const int& nkernel, + const std::vector& kernel_type, + const std::vector& kernel_scaling, + const std::vector& yukawa_alpha, + const std::vector& kernel_file, + const double& omega, + ModulePW::PW_Basis* pw_rho); // get input parameters - void getGamma(const double * const *prho, std::vector &rgamma); - void getP(const double * const *prho, ModulePW::PW_Basis *pw_rho, std::vector> &pnablaRho, std::vector &rp); - void getQ(const double * const *prho, ModulePW::PW_Basis *pw_rho, std::vector &rq); - void getGammanl(const int ikernel, std::vector &pgamma, ModulePW::PW_Basis *pw_rho, std::vector &rgammanl); - void getPnl(const int ikernel, std::vector &pp, ModulePW::PW_Basis *pw_rho, std::vector &rpnl); - void getQnl(const int ikernel, std::vector &pq, ModulePW::PW_Basis *pw_rho, std::vector &rqnl); + void getGamma(const double* const* prho, std::vector& rgamma); + void getP(const double* const* prho, + ModulePW::PW_Basis* pw_rho, + std::vector>& pnablaRho, + std::vector& rp); + void getQ(const double* const* prho, ModulePW::PW_Basis* pw_rho, std::vector& rq); + void getGammanl(const int ikernel, + std::vector& pgamma, + ModulePW::PW_Basis* pw_rho, + std::vector& rgammanl); + void getPnl(const int ikernel, std::vector& pp, ModulePW::PW_Basis* pw_rho, std::vector& rpnl); + void getQnl(const int ikernel, std::vector& pq, ModulePW::PW_Basis* pw_rho, std::vector& rqnl); // new parameters 2023-02-03 - void getXi(std::vector &pgamma, std::vector &pgammanl, std::vector &rxi); - void getTanhXi(const int ikernel, std::vector &pgamma, std::vector &pgammanl, std::vector &rtanhxi); - void getTanhP(std::vector &pp, std::vector &rtanhp); - void getTanhQ(std::vector &pq, std::vector &rtanhq); - void getTanh_Pnl(const int ikernel, std::vector &ppnl, std::vector &rtanh_pnl); - void getTanh_Qnl(const int ikernel, std::vector &pqnl, std::vector &rtanh_qnl); - void getTanhP_nl(const int ikernel, std::vector &ptanhp, ModulePW::PW_Basis *pw_rho, std::vector &rtanhp_nl); - void getTanhQ_nl(const int ikernel, std::vector &ptanhq, ModulePW::PW_Basis *pw_rho, std::vector &rtanhq_nl); + void getXi(std::vector& pgamma, std::vector& pgammanl, std::vector& rxi); + void getTanhXi(const int ikernel, + std::vector& pgamma, + std::vector& pgammanl, + std::vector& rtanhxi); + void getTanhP(std::vector& pp, std::vector& rtanhp); + void getTanhQ(std::vector& pq, std::vector& rtanhq); + void getTanh_Pnl(const int ikernel, std::vector& ppnl, std::vector& rtanh_pnl); + void getTanh_Qnl(const int ikernel, std::vector& pqnl, std::vector& rtanh_qnl); + void getTanhP_nl(const int ikernel, + std::vector& ptanhp, + ModulePW::PW_Basis* pw_rho, + std::vector& rtanhp_nl); + void getTanhQ_nl(const int ikernel, + std::vector& ptanhq, + ModulePW::PW_Basis* pw_rho, + std::vector& rtanhq_nl); // 2023-03-20 - void getTanhXi_nl(const int ikernel, std::vector &ptanhxi, ModulePW::PW_Basis *pw_rho, std::vector &rtanhxi_nl); + void getTanhXi_nl(const int ikernel, + std::vector& ptanhxi, + ModulePW::PW_Basis* pw_rho, + std::vector& rtanhxi_nl); - void getF_KS( - psi::Psi> *psi, - elecstate::ElecState *pelec, - ModulePW::PW_Basis_K *pw_psi, - ModulePW::PW_Basis *pw_rho, - UnitCell& ucell, - const std::vector> &nablaRho, - std::vector &rF, - std::vector &rpauli - ); + void getF_KS(psi::Psi>* psi, + elecstate::ElecState* pelec, + ModulePW::PW_Basis_K* pw_psi, + ModulePW::PW_Basis* pw_rho, + UnitCell& ucell, + const std::vector>& nablaRho, + std::vector& rF, + std::vector& rpauli); // get intermediate variables of V_Pauli - void getNablaRho(const double * const *prho, ModulePW::PW_Basis *pw_rho, std::vector> &rnablaRho); + void getNablaRho(const double* const* prho, + ModulePW::PW_Basis* pw_rho, + std::vector>& rnablaRho); // tools double MLkernel(double eta, double tf_weight, double vw_weight); double MLkernel_yukawa(double eta, double alpha); - void read_kernel(const std::string &fileName, const double& scaling, ModulePW::PW_Basis *pw_rho, double* kernel_); - void multiKernel(const int ikernel, double *pinput, ModulePW::PW_Basis *pw_rho, double *routput); - void Laplacian(double * pinput, ModulePW::PW_Basis *pw_rho, double * routput); - void divergence(double ** pinput, ModulePW::PW_Basis *pw_rho, double * routput); + void read_kernel(const std::string& fileName, const double& scaling, ModulePW::PW_Basis* pw_rho, double* kernel_); + void multiKernel(const int ikernel, double* pinput, ModulePW::PW_Basis* pw_rho, double* routput); + void Laplacian(double* pinput, ModulePW::PW_Basis* pw_rho, double* routput); + void divergence(double** pinput, ModulePW::PW_Basis* pw_rho, double* routput); - void tanh(std::vector &pinput, std::vector &routput, double chi=1.); - double dtanh(double tanhx, double chi=1.); + void tanh(std::vector& pinput, std::vector& routput, double chi = 1.); + double dtanh(double tanhx, double chi = 1.); // new parameters 2023-02-13 std::vector chi_xi = {1.0}; @@ -90,12 +110,14 @@ class Cal_MLKEDF_Descriptors int nx = 0; double dV = 0.; double rho0 = 0.; // average rho - double kF = 0.; // Fermi vector kF = (3 pi^2 rho0)^(1/3) - double tkF = 0.; // 2 * kF + double kF = 0.; // Fermi vector kF = (3 pi^2 rho0)^(1/3) + double tkF = 0.; // 2 * kF // double weightml = 1.; - const double cTF = 3.0/10.0 * std::pow(3*std::pow(M_PI, 2.0), 2.0/3.0) * 2; // 10/3*(3*pi^2)^{2/3}, multiply by 2 to convert unit from Hartree to Ry, finally in Ry*Bohr^(-2) - const double pqcoef = 1.0 / (4.0 * std::pow(3*std::pow(M_PI, 2.0), 2.0/3.0)); // coefficient of p and q - + const double cTF + = 3.0 / 10.0 * std::pow(3 * std::pow(M_PI, 2.0), 2.0 / 3.0) + * 2; // 10/3*(3*pi^2)^{2/3}, multiply by 2 to convert unit from Hartree to Ry, finally in Ry*Bohr^(-2) + const double pqcoef = 1.0 / (4.0 * std::pow(3 * std::pow(M_PI, 2.0), 2.0 / 3.0)); // coefficient of p and q + int nkernel = 1; std::vector kernel_type = {1}; std::vector kernel_scaling = {1.0}; diff --git a/source/module_io/cal_pLpR.cpp b/source/module_io/cal_pLpR.cpp index 095e6f48a7..1af71cd3d9 100644 --- a/source/module_io/cal_pLpR.cpp +++ b/source/module_io/cal_pLpR.cpp @@ -1,23 +1,25 @@ +#include "module_io/cal_pLpR.h" + +#include "module_basis/module_nao/two_center_integrator.h" +#include "module_cell/module_neighbor/sltk_atom_arrange.h" +#include "module_cell/module_neighbor/sltk_grid_driver.h" +#include "module_cell/unitcell.h" +#include "module_parameter/parameter.h" +#include "source_base/formatter.h" +#include "source_base/parallel_common.h" +#include "source_base/spherical_bessel_transformer.h" + #include -#include -#include -#include #include #include +#include #include -#include "module_cell/unitcell.h" -#include "module_base/spherical_bessel_transformer.h" -#include "module_basis/module_nao/two_center_integrator.h" -#include "module_cell/module_neighbor/sltk_grid_driver.h" -#include "module_cell/module_neighbor/sltk_atom_arrange.h" -#include "module_parameter/parameter.h" -#include "module_io/cal_pLpR.h" -#include "module_base/formatter.h" -#include "module_base/parallel_common.h" +#include +#include /** - * + * * FIXME: the following part will be transfered to TwoCenterIntegrator soon - * + * */ // L+|l, m> = sqrt((l-m)(l+m+1))|l, m+1>, return the sqrt((l-m)(l+m+1)) @@ -32,22 +34,36 @@ double _lminus_on_ylm(const int l, const int m) return std::sqrt((l + m) * (l - m + 1)); } -std::complex ModuleIO::cal_LzijR( - const std::unique_ptr& calculator, - const int it, const int ia, const int il, const int iz, const int mi, - const int jt, const int ja, const int jl, const int jz, const int mj, - const ModuleBase::Vector3& vR) +std::complex ModuleIO::cal_LzijR(const std::unique_ptr& calculator, + const int it, + const int ia, + const int il, + const int iz, + const int mi, + const int jt, + const int ja, + const int jl, + const int jz, + const int mj, + const ModuleBase::Vector3& vR) { double val_ = 0; calculator->calculate(it, il, iz, mi, jt, jl, jz, mj, vR, &val_); return std::complex(mi) * val_; } -std::complex ModuleIO::cal_LyijR( - const std::unique_ptr& calculator, - const int it, const int ia, const int il, const int iz, const int im, - const int jt, const int ja, const int jl, const int jz, const int jm, - const ModuleBase::Vector3& vR) +std::complex ModuleIO::cal_LyijR(const std::unique_ptr& calculator, + const int it, + const int ia, + const int il, + const int iz, + const int im, + const int jt, + const int ja, + const int jl, + const int jz, + const int jm, + const ModuleBase::Vector3& vR) { // Ly = -i/2 * (L+ - L-) const double plus_ = _lplus_on_ylm(jl, jm); @@ -66,12 +82,19 @@ std::complex ModuleIO::cal_LyijR( return std::complex(0, -0.5) * (val_plus - val_minus); } -std::complex ModuleIO::cal_LxijR( - const std::unique_ptr& calculator, - const int it, const int ia, const int il, const int iz, const int im, - const int jt, const int ja, const int jl, const int jz, const int jm, - const ModuleBase::Vector3& vR) -{ +std::complex ModuleIO::cal_LxijR(const std::unique_ptr& calculator, + const int it, + const int ia, + const int il, + const int iz, + const int im, + const int jt, + const int ja, + const int jl, + const int jz, + const int jm, + const ModuleBase::Vector3& vR) +{ // Lx = 1/2 * (L+ + L-) const double plus_ = _lplus_on_ylm(jl, jm); const double minus_ = _lminus_on_ylm(jl, jm); @@ -89,18 +112,17 @@ std::complex ModuleIO::cal_LxijR( return std::complex(0.5) * (val_plus + val_minus); } -ModuleIO::AngularMomentumCalculator::AngularMomentumCalculator( - const std::string& orbital_dir, - const UnitCell& ucell, - const double& search_radius, - const int tdestructor, - const int tgrid, - const int tatom, - const bool searchpbc, - std::ofstream* ptr_log, - const int rank) +ModuleIO::AngularMomentumCalculator::AngularMomentumCalculator(const std::string& orbital_dir, + const UnitCell& ucell, + const double& search_radius, + const int tdestructor, + const int tgrid, + const int tatom, + const bool searchpbc, + std::ofstream* ptr_log, + const int rank) { - + // ofs_running this->ofs_ = ptr_log; *ofs_ << "\n\n\n\n"; @@ -130,24 +152,24 @@ ModuleIO::AngularMomentumCalculator::AngularMomentumCalculator( #ifdef __MPI Parallel_Common::bcast_string(forb.data(), ntype_); #endif - + this->orb_ = std::unique_ptr(new RadialCollection); this->orb_->build(ucell.ntype, forb.data(), 'o'); - + ModuleBase::SphericalBesselTransformer sbt(true); this->orb_->set_transformer(sbt); - + const double rcut_max = orb_->rcut_max(); const int ngrid = int(rcut_max / 0.01) + 1; const double cutoff = 2.0 * rcut_max; this->orb_->set_uniform_grid(true, ngrid, cutoff, 'i', true); - + this->calculator_ = std::unique_ptr(new TwoCenterIntegrator); this->calculator_->tabulate(*orb_, *orb_, 'S', ngrid, cutoff); - + // Initialize Ylm coefficients ModuleBase::Ylm::set_coefficients(); - + // for neighbor list search double temp = -1.0; temp = atom_arrange::set_sr_NL(*ofs_, @@ -157,19 +179,13 @@ ModuleIO::AngularMomentumCalculator::AngularMomentumCalculator( PARAM.globalv.gamma_only_local); temp = std::max(temp, search_radius); this->neighbor_searcher_ = std::unique_ptr(new Grid_Driver(tdestructor, tgrid)); - atom_arrange::search(searchpbc, - *ofs_, - *neighbor_searcher_, - ucell, - temp, - tatom); + atom_arrange::search(searchpbc, *ofs_, *neighbor_searcher_, ucell, temp, tatom); } -void ModuleIO::AngularMomentumCalculator::kernel( - std::ofstream* ofs, - const UnitCell& ucell, - const char dir, - const int precision) +void ModuleIO::AngularMomentumCalculator::kernel(std::ofstream* ofs, + const UnitCell& ucell, + const char dir, + const int precision) { if (!ofs->is_open()) { @@ -186,8 +202,8 @@ void ModuleIO::AngularMomentumCalculator::kernel( // iz and jz are indexes of the zeta functions // im and jm are indexes of the magnetic quantum numbers. std::string fmtstr = "%4d%4d%4d%4d%4d%4d%4d%4d%4d%4d%4d%4d%4d"; - fmtstr += "%" + std::to_string(precision*2) + "." + std::to_string(precision) + "e"; - fmtstr += "%" + std::to_string(precision*2) + "." + std::to_string(precision) + "e\n"; + fmtstr += "%" + std::to_string(precision * 2) + "." + std::to_string(precision) + "e"; + fmtstr += "%" + std::to_string(precision * 2) + "." + std::to_string(precision) + "e\n"; FmtCore fmt(fmtstr); ModuleBase::Vector3 ri, rj, dr; @@ -223,25 +239,32 @@ void ModuleIO::AngularMomentumCalculator::kernel( std::complex val = 0; if (dir == 'x') { - val = cal_LxijR(calculator_, - it, ia, li, iz, mi, jt, ja, lj, jz, mj, dr); + val = cal_LxijR(calculator_, it, ia, li, iz, mi, jt, ja, lj, jz, mj, dr); } else if (dir == 'y') { - val = cal_LyijR(calculator_, - it, ia, li, iz, mi, jt, ja, lj, jz, mj, dr); + val = cal_LyijR(calculator_, it, ia, li, iz, mi, jt, ja, lj, jz, mj, dr); } else if (dir == 'z') { - val = cal_LzijR(calculator_, - it, ia, li, iz, mi, jt, ja, lj, jz, mj, dr); + val = cal_LzijR(calculator_, it, ia, li, iz, mi, jt, ja, lj, jz, mj, dr); } - *ofs << fmt.format( - it, ia, li, iz, mi, - iR.x, iR.y, iR.z, - jt, ja, lj, jz, mj, - val.real(), val.imag()); + *ofs << fmt.format(it, + ia, + li, + iz, + mi, + iR.x, + iR.y, + iR.z, + jt, + ja, + lj, + jz, + mj, + val.real(), + val.imag()); } } } @@ -253,12 +276,11 @@ void ModuleIO::AngularMomentumCalculator::kernel( } } -void ModuleIO::AngularMomentumCalculator::calculate( - const std::string& prefix, - const std::string& outdir, - const UnitCell& ucell, - const int precision, - const int rank) +void ModuleIO::AngularMomentumCalculator::calculate(const std::string& prefix, + const std::string& outdir, + const UnitCell& ucell, + const int precision, + const int rank) { if (rank != 0) { @@ -279,8 +301,8 @@ void ModuleIO::AngularMomentumCalculator::calculate( "# jz: zeta function index of the second atom\n" "# jm: magnetic quantum number of the second atom\n" "# : the value of the matrix element\n"; - - for (char d : dir) + + for (char d: dir) { std::string fn = outdir + prefix + "_L" + d + ".dat"; ofout.open(fn, std::ios::out); diff --git a/source/module_io/cal_pdos_gamma.cpp b/source/module_io/cal_pdos_gamma.cpp index 2a12c7f42a..4ca82c84ee 100644 --- a/source/module_io/cal_pdos_gamma.cpp +++ b/source/module_io/cal_pdos_gamma.cpp @@ -1,33 +1,32 @@ #include "cal_pdos_gamma.h" -#include "module_base/parallel_reduce.h" -#include "module_base/blas_connector.h" -#include "module_base/scalapack_connector.h" -#include "write_orb_info.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/blas_connector.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_reduce.h" +#include "source_base/scalapack_connector.h" +#include "write_orb_info.h" -void ModuleIO::cal_pdos( - const psi::Psi* psi, - hamilt::Hamilt* p_ham, - const Parallel_Orbitals& pv, - const UnitCell& ucell, - const K_Vectors& kv, - const int nspin0, - const int nbands, - const ModuleBase::matrix& ekb, - const double& emax, - const double& emin, - const double& dos_edelta_ev, - const double& bcoeff) +void ModuleIO::cal_pdos(const psi::Psi* psi, + hamilt::Hamilt* p_ham, + const Parallel_Orbitals& pv, + const UnitCell& ucell, + const K_Vectors& kv, + const int nspin0, + const int nbands, + const ModuleBase::matrix& ekb, + const double& emax, + const double& emin, + const double& dos_edelta_ev, + const double& bcoeff) { ModuleBase::TITLE("ModuleIO", "cal_pdos_gamma"); - assert(nspin0>0); - assert(emax>=emin); - assert(dos_edelta_ev>0.0); + assert(nspin0 > 0); + assert(emax >= emin); + assert(dos_edelta_ev > 0.0); const int npoints = static_cast(std::floor((emax - emin) / dos_edelta_ev)); const int nlocal = PARAM.globalv.nlocal; @@ -84,7 +83,7 @@ void ModuleIO::cal_pdos( const int one_int = 1; const double* sk = dynamic_cast*>(p_ham)->getSk(); - //const double* sk = nullptr; + // const double* sk = nullptr; #ifdef __MPI const char T_char = 'T'; @@ -142,146 +141,140 @@ void ModuleIO::cal_pdos( ModuleIO::write_orb_info(&ucell); } - delete[] pdos; + delete[] pdos; } - -void ModuleIO::print_tdos_gamma( - const ModuleBase::matrix* pdos, - const int nlocal, - const int npoints, - const double& emin, - const double& dos_edelta_ev) +void ModuleIO::print_tdos_gamma(const ModuleBase::matrix* pdos, + const int nlocal, + const int npoints, + const double& emin, + const double& dos_edelta_ev) { ModuleBase::TITLE("ModuleIO", "print_tdos_gamma"); // file name - std::stringstream ps; - ps << PARAM.globalv.global_out_dir << "TDOS.dat"; - std::ofstream ofs(ps.str().c_str()); - - if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 4) - { - for (int in = 0; in < npoints; ++in) - { - double dos1 = 0.0; - double en = emin + in * dos_edelta_ev; - for (int iw = 0; iw < nlocal; iw++) - { - dos1 += pdos[0](iw, in); - } - - ofs << std::setw(20) << en - << std::setw(20) << dos1 << std::endl; - } - } - else if (PARAM.inp.nspin == 2) - { - for (int in = 0; in < npoints; ++in) - { - double dos1 = 0.0; - double dos2 = 0.0; - double en = emin + in * dos_edelta_ev; - for (int iw = 0; iw < nlocal; iw++) - { - dos1 += pdos[0](iw, in); - dos2 += pdos[1](iw, in); - } - - ofs << std::setw(20) << en - << std::setw(20) << dos1 - << std::setw(20) << dos2 << std::endl; - } - } - ofs.close(); + std::stringstream ps; + ps << PARAM.globalv.global_out_dir << "TDOS.dat"; + std::ofstream ofs(ps.str().c_str()); + + if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 4) + { + for (int in = 0; in < npoints; ++in) + { + double dos1 = 0.0; + double en = emin + in * dos_edelta_ev; + for (int iw = 0; iw < nlocal; iw++) + { + dos1 += pdos[0](iw, in); + } + + ofs << std::setw(20) << en << std::setw(20) << dos1 << std::endl; + } + } + else if (PARAM.inp.nspin == 2) + { + for (int in = 0; in < npoints; ++in) + { + double dos1 = 0.0; + double dos2 = 0.0; + double en = emin + in * dos_edelta_ev; + for (int iw = 0; iw < nlocal; iw++) + { + dos1 += pdos[0](iw, in); + dos2 += pdos[1](iw, in); + } + + ofs << std::setw(20) << en << std::setw(20) << dos1 << std::setw(20) << dos2 << std::endl; + } + } + ofs.close(); } -void ModuleIO::print_pdos_gamma( - const UnitCell& ucell, - const ModuleBase::matrix* pdos, - const int nlocal, - const int npoints, - const double& emin, - const double& dos_edelta_ev) +void ModuleIO::print_pdos_gamma(const UnitCell& ucell, + const ModuleBase::matrix* pdos, + const int nlocal, + const int npoints, + const double& emin, + const double& dos_edelta_ev) { ModuleBase::TITLE("ModuleIO", "print_pdos_gamma"); - std::stringstream as; - as << PARAM.globalv.global_out_dir << "PDOS.dat"; - std::ofstream ofs(as.str().c_str()); - - ofs << "" << std::endl; - ofs << "" << PARAM.inp.nspin << "" << std::endl; - - if (PARAM.inp.nspin == 4) - { - ofs << "" << std::setw(2) << nlocal / 2 << "" << std::endl; - } - else - { - ofs << "" << std::setw(2) << nlocal << "" << std::endl; - } - ofs << "" << std::endl; - - for (int n = 0; n < npoints; ++n) - { - double y = 0.0; - double en = emin + n * dos_edelta_ev; - ofs << std::setw(20) << en << std::endl; - } - - ofs << "" << std::endl; - for (int i = 0; i < ucell.nat; i++) - { - int a = ucell.iat2ia[i]; - int t = ucell.iat2it[i]; - Atom* atom1 = &ucell.atoms[t]; - const int s0 = ucell.itiaiw2iwt(t, a, 0); - for (int j = 0; j < atom1->nw; ++j) - { - const int L1 = atom1->iw2l[j]; - const int N1 = atom1->iw2n[j]; - const int m1 = atom1->iw2m[j]; - const int w = ucell.itiaiw2iwt(t, a, j); - - ofs << "" << std::endl; - ofs << "" << std::endl; - if (PARAM.inp.nspin == 1) - { - for (int n = 0; n < npoints; ++n) - { - - ofs << std::setw(13) << pdos[0](w, n) << std::endl; - } - } - else if (PARAM.inp.nspin == 2) - { - for (int n = 0; n < npoints; ++n) - { - ofs << std::setw(20) << pdos[0](w, n) << std::setw(30) << pdos[1](w, n) << std::endl; - } - } - else if (PARAM.inp.nspin == 4) - { - int w0 = w - s0; - for (int n = 0; n < npoints; ++n) - { - ofs << std::setw(20) << pdos[0](s0 + 2 * w0, n) + pdos[0](s0 + 2 * w0 + 1, n) << std::endl; - } - } - - ofs << "" << std::endl; - ofs << "" << std::endl; - } - } - - ofs << "" << std::endl; - ofs.close(); + std::stringstream as; + as << PARAM.globalv.global_out_dir << "PDOS.dat"; + std::ofstream ofs(as.str().c_str()); + + ofs << "" << std::endl; + ofs << "" << PARAM.inp.nspin << "" << std::endl; + + if (PARAM.inp.nspin == 4) + { + ofs << "" << std::setw(2) << nlocal / 2 << "" << std::endl; + } + else + { + ofs << "" << std::setw(2) << nlocal << "" << std::endl; + } + ofs << "" << std::endl; + + for (int n = 0; n < npoints; ++n) + { + double y = 0.0; + double en = emin + n * dos_edelta_ev; + ofs << std::setw(20) << en << std::endl; + } + + ofs << "" << std::endl; + for (int i = 0; i < ucell.nat; i++) + { + int a = ucell.iat2ia[i]; + int t = ucell.iat2it[i]; + Atom* atom1 = &ucell.atoms[t]; + const int s0 = ucell.itiaiw2iwt(t, a, 0); + for (int j = 0; j < atom1->nw; ++j) + { + const int L1 = atom1->iw2l[j]; + const int N1 = atom1->iw2n[j]; + const int m1 = atom1->iw2m[j]; + const int w = ucell.itiaiw2iwt(t, a, j); + + ofs << "" << std::endl; + ofs << "" << std::endl; + if (PARAM.inp.nspin == 1) + { + for (int n = 0; n < npoints; ++n) + { + + ofs << std::setw(13) << pdos[0](w, n) << std::endl; + } + } + else if (PARAM.inp.nspin == 2) + { + for (int n = 0; n < npoints; ++n) + { + ofs << std::setw(20) << pdos[0](w, n) << std::setw(30) << pdos[1](w, n) << std::endl; + } + } + else if (PARAM.inp.nspin == 4) + { + int w0 = w - s0; + for (int n = 0; n < npoints; ++n) + { + ofs << std::setw(20) << pdos[0](s0 + 2 * w0, n) + pdos[0](s0 + 2 * w0 + 1, n) << std::endl; + } + } + + ofs << "" << std::endl; + ofs << "" << std::endl; + } + } + + ofs << "" << std::endl; + ofs.close(); } diff --git a/source/module_io/cal_pdos_gamma.h b/source/module_io/cal_pdos_gamma.h index 039f131614..dfab0542a2 100644 --- a/source/module_io/cal_pdos_gamma.h +++ b/source/module_io/cal_pdos_gamma.h @@ -1,44 +1,41 @@ #ifndef CAL_PDOS_GAMMA_H #define CAL_PDOS_GAMMA_H -#include "module_base/matrix.h" -#include "module_cell/klist.h" // use K_Vectors -#include "module_psi/psi.h" // use psi::Psi -#include "module_hamilt_general/hamilt.h" // use hamilt::Hamilt #include "module_basis/module_ao/parallel_orbitals.h" // use Parallel_Orbitals +#include "module_cell/klist.h" // use K_Vectors +#include "module_hamilt_general/hamilt.h" // use hamilt::Hamilt +#include "module_psi/psi.h" // use psi::Psi +#include "source_base/matrix.h" namespace ModuleIO { - void cal_pdos( - const psi::Psi* psi, - hamilt::Hamilt* p_ham, - const Parallel_Orbitals& pv, - const UnitCell& ucell, - const K_Vectors& kv, - const int nspin0, - const int nbands, - const ModuleBase::matrix& ekb, - const double& emax, - const double& emin, - const double& dos_edelta_ev, - const double& bcoeff); +void cal_pdos(const psi::Psi* psi, + hamilt::Hamilt* p_ham, + const Parallel_Orbitals& pv, + const UnitCell& ucell, + const K_Vectors& kv, + const int nspin0, + const int nbands, + const ModuleBase::matrix& ekb, + const double& emax, + const double& emin, + const double& dos_edelta_ev, + const double& bcoeff); - void print_tdos_gamma( - const ModuleBase::matrix* pdos, - const int nlocal, - const int npoints, - const double& emin, - const double& dos_edelta_ev); +void print_tdos_gamma(const ModuleBase::matrix* pdos, + const int nlocal, + const int npoints, + const double& emin, + const double& dos_edelta_ev); - void print_pdos_gamma( - const UnitCell& ucell, - const ModuleBase::matrix* pdos, - const int nlocal, - const int npoints, - const double& emin, - const double& dos_edelta_ev); +void print_pdos_gamma(const UnitCell& ucell, + const ModuleBase::matrix* pdos, + const int nlocal, + const int npoints, + const double& emin, + const double& dos_edelta_ev); -} +} // namespace ModuleIO -#endif +#endif diff --git a/source/module_io/cal_pdos_multik.cpp b/source/module_io/cal_pdos_multik.cpp index 81bcae899a..e20f41b06e 100644 --- a/source/module_io/cal_pdos_multik.cpp +++ b/source/module_io/cal_pdos_multik.cpp @@ -1,179 +1,173 @@ #include "cal_pdos_multik.h" -#include "module_base/parallel_reduce.h" -#include "module_base/blas_connector.h" -#include "module_base/scalapack_connector.h" -#include "write_orb_info.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/blas_connector.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_reduce.h" +#include "source_base/scalapack_connector.h" +#include "write_orb_info.h" -void ModuleIO::cal_pdos( - const psi::Psi>* psi, - hamilt::Hamilt>* p_ham, - const Parallel_Orbitals& pv, - const UnitCell& ucell, - const K_Vectors& kv, - const int nspin0, - const int nbands, - const ModuleBase::matrix& ekb, - const double& emax, - const double& emin, - const double& dos_edelta_ev, - const double& bcoeff) +void ModuleIO::cal_pdos(const psi::Psi>* psi, + hamilt::Hamilt>* p_ham, + const Parallel_Orbitals& pv, + const UnitCell& ucell, + const K_Vectors& kv, + const int nspin0, + const int nbands, + const ModuleBase::matrix& ekb, + const double& emax, + const double& emin, + const double& dos_edelta_ev, + const double& bcoeff) { ModuleBase::TITLE("ModuleIO", "cal_pdos_multik"); - assert(nspin0>0); - assert(emax>=emin); - assert(dos_edelta_ev>0.0); + assert(nspin0 > 0); + assert(emax >= emin); + assert(dos_edelta_ev > 0.0); const int npoints = static_cast(std::floor((emax - emin) / dos_edelta_ev)); const int nlocal = PARAM.globalv.nlocal; - ModuleBase::matrix* pdosk = new ModuleBase::matrix[nspin0]; + ModuleBase::matrix* pdosk = new ModuleBase::matrix[nspin0]; - for (int is = 0; is < nspin0; ++is) - { - pdosk[is].create(nlocal, npoints, true); - } + for (int is = 0; is < nspin0; ++is) + { + pdosk[is].create(nlocal, npoints, true); + } - ModuleBase::matrix* pdos = new ModuleBase::matrix[nspin0]; + ModuleBase::matrix* pdos = new ModuleBase::matrix[nspin0]; - for (int is = 0; is < nspin0; ++is) - { - pdos[is].create(nlocal, npoints, true); - } + for (int is = 0; is < nspin0; ++is) + { + pdos[is].create(nlocal, npoints, true); + } const double a = bcoeff; const double b = sqrt(ModuleBase::TWO_PI) * a; - std::complex* waveg = new std::complex[nlocal]; - - double* Gauss = new double[npoints](); - - for (int is = 0; is < nspin0; ++is) - { - std::vector mulk; - mulk.resize(1); - mulk[0].create(pv.ncol, pv.nrow); - - for (int ik = 0; ik < kv.get_nks(); ik++) - { - - if (is == kv.isk[ik]) - { - // calculate SK for current k point - const std::complex* sk = nullptr; - - // collumn-major matrix - const int hk_type = 1; - - if (PARAM.inp.nspin == 4) - { - dynamic_cast, std::complex>*>(p_ham) - ->updateSk(ik, hk_type); - sk = dynamic_cast, std::complex>*>(p_ham) - ->getSk(); - } - else - { - dynamic_cast, double>*>(p_ham) - ->updateSk(ik, hk_type); - sk = dynamic_cast, double>*>(p_ham) - ->getSk(); - } - - psi->fix_k(ik); - - psi::Psi> Dwfc(1, - psi->get_nbands(), - psi->get_nbasis(), - psi->get_nbasis(), - true); - - std::complex* p_dwfc = Dwfc.get_pointer(); - for (int index = 0; index < Dwfc.size(); ++index) - { - p_dwfc[index] = conj(psi->get_pointer()[index]); - } - - for (int i = 0; i < nbands; ++i) - { - - ModuleBase::GlobalFunc::ZEROS(waveg, nlocal); - - ModuleBase::GlobalFunc::ZEROS(Gauss, npoints); - for (int n = 0; n < npoints; ++n) - { - double en = emin + n * dos_edelta_ev; - double en0 = ekb(ik, i) * ModuleBase::Ry_to_eV; - double de = en - en0; - double de2 = 0.5 * de * de; - Gauss[n] = kv.wk[ik] * exp(-de2 / a / a) / b; - } - - const int nb = i + 1; + std::complex* waveg = new std::complex[nlocal]; + + double* Gauss = new double[npoints](); + + for (int is = 0; is < nspin0; ++is) + { + std::vector mulk; + mulk.resize(1); + mulk[0].create(pv.ncol, pv.nrow); + + for (int ik = 0; ik < kv.get_nks(); ik++) + { + + if (is == kv.isk[ik]) + { + // calculate SK for current k point + const std::complex* sk = nullptr; + + // collumn-major matrix + const int hk_type = 1; + + if (PARAM.inp.nspin == 4) + { + dynamic_cast, std::complex>*>(p_ham)->updateSk( + ik, + hk_type); + sk = dynamic_cast, std::complex>*>(p_ham) + ->getSk(); + } + else + { + dynamic_cast, double>*>(p_ham)->updateSk(ik, hk_type); + sk = dynamic_cast, double>*>(p_ham)->getSk(); + } + + psi->fix_k(ik); + + psi::Psi> Dwfc(1, psi->get_nbands(), psi->get_nbasis(), psi->get_nbasis(), true); + + std::complex* p_dwfc = Dwfc.get_pointer(); + for (int index = 0; index < Dwfc.size(); ++index) + { + p_dwfc[index] = conj(psi->get_pointer()[index]); + } + + for (int i = 0; i < nbands; ++i) + { + + ModuleBase::GlobalFunc::ZEROS(waveg, nlocal); + + ModuleBase::GlobalFunc::ZEROS(Gauss, npoints); + for (int n = 0; n < npoints; ++n) + { + double en = emin + n * dos_edelta_ev; + double en0 = ekb(ik, i) * ModuleBase::Ry_to_eV; + double de = en - en0; + double de2 = 0.5 * de * de; + Gauss[n] = kv.wk[ik] * exp(-de2 / a / a) / b; + } + + const int nb = i + 1; #ifdef __MPI - const double one_float[2] = {1.0, 0.0}; + const double one_float[2] = {1.0, 0.0}; const double zero_float[2] = {0.0, 0.0}; - const int one_int = 1; - const char T_char = 'T'; - pzgemv_(&T_char, - &PARAM.globalv.nlocal, - &PARAM.globalv.nlocal, - &one_float[0], - sk, - &one_int, - &one_int, - pv.desc, - p_dwfc, - &one_int, - &nb, - pv.desc, - &one_int, - &zero_float[0], - mulk[0].c, - &one_int, - &nb, - pv.desc, - &one_int); + const int one_int = 1; + const char T_char = 'T'; + pzgemv_(&T_char, + &PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &one_float[0], + sk, + &one_int, + &one_int, + pv.desc, + p_dwfc, + &one_int, + &nb, + pv.desc, + &one_int, + &zero_float[0], + mulk[0].c, + &one_int, + &nb, + pv.desc, + &one_int); #endif - for (int j = 0; j < PARAM.globalv.nlocal; ++j) - { + for (int j = 0; j < PARAM.globalv.nlocal; ++j) + { - if (pv.in_this_processor(j, i)) - { - const int ir = pv.global2local_row(j); - const int ic = pv.global2local_col(i); + if (pv.in_this_processor(j, i)) + { + const int ir = pv.global2local_row(j); + const int ic = pv.global2local_col(i); - waveg[j] = mulk[0](ic, ir) * psi[0](ic, ir); - const double x = waveg[j].real(); - BlasConnector::axpy(npoints, x, Gauss, 1, pdosk[is].c + j * pdosk[is].nc, 1); - } - } + waveg[j] = mulk[0](ic, ir) * psi[0](ic, ir); + const double x = waveg[j].real(); + BlasConnector::axpy(npoints, x, Gauss, 1, pdosk[is].c + j * pdosk[is].nc, 1); + } + } - } // ib + } // ib - } // if - } // ik + } // if + } // ik #ifdef __MPI // reduce the results into pdos[is].c const int num = PARAM.globalv.nlocal * npoints; - MPI_Reduce(pdosk[is].c, pdos[is].c, num, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); + MPI_Reduce(pdosk[is].c, pdos[is].c, num, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); #endif - } // is - delete[] pdosk; - delete[] waveg; - delete[] Gauss; + } // is + delete[] pdosk; + delete[] waveg; + delete[] Gauss; if (GlobalV::MY_RANK == 0) { - print_tdos_multik(pdos, nlocal, npoints, emin, dos_edelta_ev); + print_tdos_multik(pdos, nlocal, npoints, emin, dos_edelta_ev); print_pdos_multik(ucell, pdos, nlocal, npoints, emin, dos_edelta_ev); ModuleIO::write_orb_info(&ucell); @@ -182,137 +176,133 @@ void ModuleIO::cal_pdos( delete[] pdos; } - -void ModuleIO::print_tdos_multik( - const ModuleBase::matrix* pdos, - const int nlocal, - const int npoints, - const double& emin, - const double& dos_edelta_ev) +void ModuleIO::print_tdos_multik(const ModuleBase::matrix* pdos, + const int nlocal, + const int npoints, + const double& emin, + const double& dos_edelta_ev) { - std::stringstream ps; - ps << PARAM.globalv.global_out_dir << "TDOS.dat"; - std::ofstream ofs1(ps.str().c_str()); - - if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 4) - { - - for (int n = 0; n < npoints; ++n) - { - double y = 0.0; - double en = emin + n * dos_edelta_ev; - for (int i = 0; i < nlocal; i++) - { - y += pdos[0](i, n); - } - - ofs1 << std::setw(20) << en << std::setw(30) << y << std::endl; - } - } - else if (PARAM.inp.nspin == 2) - { - for (int n = 0; n < npoints; ++n) - { - double y = 0.0; - double z = 0.0; - double en = emin + n * dos_edelta_ev; - for (int i = 0; i < nlocal; i++) - { - y += pdos[0](i, n); - z += pdos[1](i, n); - } - - ofs1 << std::setw(20) << en << std::setw(30) << y << std::setw(30) << z << std::endl; - } - } - ofs1.close(); -} + std::stringstream ps; + ps << PARAM.globalv.global_out_dir << "TDOS.dat"; + std::ofstream ofs1(ps.str().c_str()); + + if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 4) + { + for (int n = 0; n < npoints; ++n) + { + double y = 0.0; + double en = emin + n * dos_edelta_ev; + for (int i = 0; i < nlocal; i++) + { + y += pdos[0](i, n); + } + + ofs1 << std::setw(20) << en << std::setw(30) << y << std::endl; + } + } + else if (PARAM.inp.nspin == 2) + { + for (int n = 0; n < npoints; ++n) + { + double y = 0.0; + double z = 0.0; + double en = emin + n * dos_edelta_ev; + for (int i = 0; i < nlocal; i++) + { + y += pdos[0](i, n); + z += pdos[1](i, n); + } + + ofs1 << std::setw(20) << en << std::setw(30) << y << std::setw(30) << z << std::endl; + } + } + ofs1.close(); +} -void ModuleIO::print_pdos_multik( - const UnitCell& ucell, - const ModuleBase::matrix* pdos, - const int nlocal, - const int npoints, - const double& emin, - const double& dos_edelta_ev) +void ModuleIO::print_pdos_multik(const UnitCell& ucell, + const ModuleBase::matrix* pdos, + const int nlocal, + const int npoints, + const double& emin, + const double& dos_edelta_ev) { ModuleBase::TITLE("ModuleIO", "print_pdos_multik"); - std::stringstream as; - as << PARAM.globalv.global_out_dir << "PDOS.dat"; - std::ofstream ofs2(as.str().c_str()); - - ofs2 << "" << std::endl; - ofs2 << "" << PARAM.inp.nspin << "" << std::endl; - if (PARAM.inp.nspin == 4) - { - ofs2 << "" << std::setw(2) << nlocal / 2 << "" << std::endl; - } - else - { - ofs2 << "" << std::setw(2) << nlocal << "" << std::endl; - } - ofs2 << "" << std::endl; - - for (int n = 0; n < npoints; ++n) - { - double y = 0.0; - double en = emin + n * dos_edelta_ev; - ofs2 << std::setw(20) << en << std::endl; - } - ofs2 << "" << std::endl; - for (int i = 0; i < ucell.nat; i++) - { - int a = ucell.iat2ia[i]; - int t = ucell.iat2it[i]; - Atom* atom1 = &ucell.atoms[t]; - const int s0 = ucell.itiaiw2iwt(t, a, 0); - for (int j = 0; j < atom1->nw; ++j) - { - const int L1 = atom1->iw2l[j]; - const int N1 = atom1->iw2n[j]; - const int m1 = atom1->iw2m[j]; - const int w = ucell.itiaiw2iwt(t, a, j); - - ofs2 << "" << std::endl; - ofs2 << "" << std::endl; - if (PARAM.inp.nspin == 1) - { - for (int n = 0; n < npoints; ++n) - { - ofs2 << std::setw(13) << pdos[0](w, n) << std::endl; - } - } - else if (PARAM.inp.nspin == 2) - { - for (int n = 0; n < npoints; ++n) - { - ofs2 << std::setw(20) << pdos[0](w, n) << std::setw(30) << pdos[1](w, n) << std::endl; - } - } - else if (PARAM.inp.nspin == 4) - { - int w0 = w - s0; - for (int n = 0; n < npoints; ++n) - { - ofs2 << std::setw(20) << pdos[0](s0 + 2 * w0, n) + pdos[0](s0 + 2 * w0 + 1, n) << std::endl; - } - } - - ofs2 << "" << std::endl; - ofs2 << "" << std::endl; - }// end j - }// end i - - ofs2 << "" << std::endl; - ofs2.close(); + std::stringstream as; + as << PARAM.globalv.global_out_dir << "PDOS.dat"; + std::ofstream ofs2(as.str().c_str()); + + ofs2 << "" << std::endl; + ofs2 << "" << PARAM.inp.nspin << "" << std::endl; + if (PARAM.inp.nspin == 4) + { + ofs2 << "" << std::setw(2) << nlocal / 2 << "" << std::endl; + } + else + { + ofs2 << "" << std::setw(2) << nlocal << "" << std::endl; + } + ofs2 << "" << std::endl; + + for (int n = 0; n < npoints; ++n) + { + double y = 0.0; + double en = emin + n * dos_edelta_ev; + ofs2 << std::setw(20) << en << std::endl; + } + ofs2 << "" << std::endl; + for (int i = 0; i < ucell.nat; i++) + { + int a = ucell.iat2ia[i]; + int t = ucell.iat2it[i]; + Atom* atom1 = &ucell.atoms[t]; + const int s0 = ucell.itiaiw2iwt(t, a, 0); + for (int j = 0; j < atom1->nw; ++j) + { + const int L1 = atom1->iw2l[j]; + const int N1 = atom1->iw2n[j]; + const int m1 = atom1->iw2m[j]; + const int w = ucell.itiaiw2iwt(t, a, j); + + ofs2 << "" << std::endl; + ofs2 << "" << std::endl; + if (PARAM.inp.nspin == 1) + { + for (int n = 0; n < npoints; ++n) + { + ofs2 << std::setw(13) << pdos[0](w, n) << std::endl; + } + } + else if (PARAM.inp.nspin == 2) + { + for (int n = 0; n < npoints; ++n) + { + ofs2 << std::setw(20) << pdos[0](w, n) << std::setw(30) << pdos[1](w, n) << std::endl; + } + } + else if (PARAM.inp.nspin == 4) + { + int w0 = w - s0; + for (int n = 0; n < npoints; ++n) + { + ofs2 << std::setw(20) << pdos[0](s0 + 2 * w0, n) + pdos[0](s0 + 2 * w0 + 1, n) << std::endl; + } + } + + ofs2 << "" << std::endl; + ofs2 << "" << std::endl; + } // end j + } // end i + + ofs2 << "" << std::endl; + ofs2.close(); } diff --git a/source/module_io/cal_pdos_multik.h b/source/module_io/cal_pdos_multik.h index d650efbb59..b16dcd07f6 100644 --- a/source/module_io/cal_pdos_multik.h +++ b/source/module_io/cal_pdos_multik.h @@ -1,45 +1,42 @@ #ifndef CAL_PDOS_MULTIK_H #define CAL_PDOS_MULTIK_H -#include "module_base/matrix.h" -#include "module_cell/klist.h" // use K_Vectors -#include "module_psi/psi.h" // use psi::Psi -#include "module_hamilt_general/hamilt.h" // use hamilt::Hamilt #include "module_basis/module_ao/parallel_orbitals.h" // use Parallel_Orbitals +#include "module_cell/klist.h" // use K_Vectors +#include "module_hamilt_general/hamilt.h" // use hamilt::Hamilt +#include "module_psi/psi.h" // use psi::Psi +#include "source_base/matrix.h" namespace ModuleIO { - // pdos for multi-k point - void cal_pdos( - const psi::Psi>* psi, - hamilt::Hamilt>* p_ham, - const Parallel_Orbitals& pv, - const UnitCell& ucell, - const K_Vectors& kv, - const int nspin0, - const int nbands, - const ModuleBase::matrix& ekb, - const double& emax, - const double& emin, - const double& dos_edelta_ev, - const double& bcoeff); +// pdos for multi-k point +void cal_pdos(const psi::Psi>* psi, + hamilt::Hamilt>* p_ham, + const Parallel_Orbitals& pv, + const UnitCell& ucell, + const K_Vectors& kv, + const int nspin0, + const int nbands, + const ModuleBase::matrix& ekb, + const double& emax, + const double& emin, + const double& dos_edelta_ev, + const double& bcoeff); - void print_tdos_multik( - const ModuleBase::matrix* pdos, - const int nlocal, - const int npoints, - const double& emin, - const double& dos_edelta_ev); +void print_tdos_multik(const ModuleBase::matrix* pdos, + const int nlocal, + const int npoints, + const double& emin, + const double& dos_edelta_ev); - void print_pdos_multik( - const UnitCell& ucell, - const ModuleBase::matrix* pdos, - const int nlocal, - const int npoints, - const double& emin, - const double& dos_edelta_ev); +void print_pdos_multik(const UnitCell& ucell, + const ModuleBase::matrix* pdos, + const int nlocal, + const int npoints, + const double& emin, + const double& dos_edelta_ev); -} +} // namespace ModuleIO -#endif +#endif diff --git a/source/module_io/cal_r_overlap_R.cpp b/source/module_io/cal_r_overlap_R.cpp index d2eea5e5a2..5b86c760ff 100644 --- a/source/module_io/cal_r_overlap_R.cpp +++ b/source/module_io/cal_r_overlap_R.cpp @@ -1,10 +1,10 @@ #include "cal_r_overlap_R.h" -#include "module_parameter/parameter.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" cal_r_overlap_R::cal_r_overlap_R() { @@ -14,8 +14,7 @@ cal_r_overlap_R::~cal_r_overlap_R() { } -void cal_r_overlap_R::initialize_orb_table(const UnitCell& ucell, - const LCAO_Orbitals& orb) +void cal_r_overlap_R::initialize_orb_table(const UnitCell& ucell, const LCAO_Orbitals& orb) { int Lmax_used = 0; int Lmax = 0; @@ -54,8 +53,7 @@ void cal_r_overlap_R::initialize_orb_table(const UnitCell& ucell, MGT.init_Gaunt(Lmax); } -void cal_r_overlap_R::construct_orbs_and_orb_r(const UnitCell& ucell, - const LCAO_Orbitals& orb) +void cal_r_overlap_R::construct_orbs_and_orb_r(const UnitCell& ucell, const LCAO_Orbitals& orb) { int orb_r_ntype = 0; int mat_Nr = orb.Phi[0].PhiLN(0, 0).getNr(); @@ -226,14 +224,14 @@ void cal_r_overlap_R::construct_orbs_and_orb_r(const UnitCell& ucell, } } -void cal_r_overlap_R::init(const UnitCell& ucell,const Parallel_Orbitals& pv, const LCAO_Orbitals& orb) +void cal_r_overlap_R::init(const UnitCell& ucell, const Parallel_Orbitals& pv, const LCAO_Orbitals& orb) { ModuleBase::TITLE("cal_r_overlap_R", "init"); ModuleBase::timer::tick("cal_r_overlap_R", "init"); this->ParaV = &pv; - initialize_orb_table(ucell,orb); - construct_orbs_and_orb_r(ucell,orb); + initialize_orb_table(ucell, orb); + construct_orbs_and_orb_r(ucell, orb); ModuleBase::timer::tick("cal_r_overlap_R", "init"); return; @@ -333,8 +331,7 @@ void cal_r_overlap_R::out_rR(const UnitCell& ucell, const Grid_Driver& gd, const int im2 = iw2im[orb_index_col]; ModuleBase::Vector3 r_distance - = (ucell.atoms[it2].tau[ia2] - ucell.atoms[it1].tau[ia1] + R_car) - * ucell.lat0; + = (ucell.atoms[it2].tau[ia2] - ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; double overlap_o = center2_orb11[it1][it2][iL1][iN1][iL2].at(iN2).cal_overlap(origin_point, r_distance, @@ -451,8 +448,7 @@ void cal_r_overlap_R::out_rR(const UnitCell& ucell, const Grid_Driver& gd, const std::stringstream ssr; if (PARAM.inp.calculation == "md" && !PARAM.inp.out_app_flag) { - ssr << PARAM.globalv.global_matrix_dir - << "rrg" << step << ".csr"; + ssr << PARAM.globalv.global_matrix_dir << "rrg" << step << ".csr"; } else { @@ -508,7 +504,9 @@ void cal_r_overlap_R::out_rR(const UnitCell& ucell, const Grid_Driver& gd, const return; } -void cal_r_overlap_R::out_rR_other(const UnitCell& ucell, const int& istep, const std::set>& output_R_coor) +void cal_r_overlap_R::out_rR_other(const UnitCell& ucell, + const int& istep, + const std::set>& output_R_coor) { ModuleBase::TITLE("cal_r_overlap_R", "out_rR_other"); ModuleBase::timer::tick("cal_r_overlap_R", "out_rR_other"); @@ -524,8 +522,7 @@ void cal_r_overlap_R::out_rR_other(const UnitCell& ucell, const int& istep, cons std::stringstream ssr; if (PARAM.inp.calculation == "md" && !PARAM.inp.out_app_flag) { - ssr << PARAM.globalv.global_matrix_dir - << "rrg" << step << ".csr"; + ssr << PARAM.globalv.global_matrix_dir << "rrg" << step << ".csr"; } else { @@ -609,8 +606,7 @@ void cal_r_overlap_R::out_rR_other(const UnitCell& ucell, const int& istep, cons int im2 = iw2im[orb_index_col]; ModuleBase::Vector3 r_distance - = (ucell.atoms[it2].tau[ia2] - ucell.atoms[it1].tau[ia1] + R_car) - * ucell.lat0; + = (ucell.atoms[it2].tau[ia2] - ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; double overlap_o = center2_orb11[it1][it2][iL1][iN1][iL2].at(iN2).cal_overlap(origin_point, r_distance, diff --git a/source/module_io/cal_r_overlap_R.h b/source/module_io/cal_r_overlap_R.h index a40ec30ed2..e183a9ce2a 100644 --- a/source/module_io/cal_r_overlap_R.h +++ b/source/module_io/cal_r_overlap_R.h @@ -1,10 +1,6 @@ #ifndef CAL_R_OVERLAP_R_H #define CAL_R_OVERLAP_R_H -#include "module_base/abfs-vector3_order.h" -#include "module_base/sph_bessel_recursive.h" -#include "module_base/vector3.h" -#include "module_base/ylm.h" #include "module_basis/module_ao/ORB_atomic_lm.h" #include "module_basis/module_ao/ORB_gaunt_table.h" #include "module_basis/module_ao/ORB_read.h" @@ -15,6 +11,10 @@ #include "module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb21.h" #include "module_hamilt_lcao/hamilt_lcaodft/center2_orb.h" #include "single_R_io.h" +#include "source_base/abfs-vector3_order.h" +#include "source_base/sph_bessel_recursive.h" +#include "source_base/vector3.h" +#include "source_base/ylm.h" #include #include @@ -32,13 +32,13 @@ class cal_r_overlap_R double sparse_threshold = 1e-10; bool binary = false; - void init(const UnitCell& ucell,const Parallel_Orbitals& pv, const LCAO_Orbitals& orb); + void init(const UnitCell& ucell, const Parallel_Orbitals& pv, const LCAO_Orbitals& orb); void out_rR(const UnitCell& ucell, const Grid_Driver& gd, const int& istep); void out_rR_other(const UnitCell& ucell, const int& istep, const std::set>& output_R_coor); private: void initialize_orb_table(const UnitCell& ucell, const LCAO_Orbitals& orb); - void construct_orbs_and_orb_r(const UnitCell& ucell,const LCAO_Orbitals& orb); + void construct_orbs_and_orb_r(const UnitCell& ucell, const LCAO_Orbitals& orb); std::vector iw2ia; std::vector iw2iL; diff --git a/source/module_io/cal_test.cpp b/source/module_io/cal_test.cpp index b41c38a2ba..3206ebb5c3 100644 --- a/source/module_io/cal_test.cpp +++ b/source/module_io/cal_test.cpp @@ -1,237 +1,228 @@ #include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/global_function.h" +#include "source_base/global_function.h" #define private public #include "module_parameter/parameter.h" #undef private -#include "module_base/global_variable.h" -#include "module_base/memory.h" #include "cal_test.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" -double Cal_Test::mporter=0.0; +double Cal_Test::mporter = 0.0; // about charge density -double Cal_Test::mrho=0.0; -double Cal_Test::mrho_save=0.0; -double Cal_Test::mrho_core=0.0; +double Cal_Test::mrho = 0.0; +double Cal_Test::mrho_save = 0.0; +double Cal_Test::mrho_core = 0.0; // about pulay mixing. -double Cal_Test::mRrho=0.0; -double Cal_Test::mdRrho=0.0; -double Cal_Test::mdrho=0.0; -double Cal_Test::mrho_save2=0.0; +double Cal_Test::mRrho = 0.0; +double Cal_Test::mdRrho = 0.0; +double Cal_Test::mdrho = 0.0; +double Cal_Test::mrho_save2 = 0.0; // about potential on FFT grid. -double Cal_Test::mvltot=0.0; -double Cal_Test::mvr=0.0; -double Cal_Test::mvrs=0.0; -double Cal_Test::mvrs1=0.0; -double Cal_Test::mvnew=0.0; +double Cal_Test::mvltot = 0.0; +double Cal_Test::mvr = 0.0; +double Cal_Test::mvrs = 0.0; +double Cal_Test::mvrs1 = 0.0; +double Cal_Test::mvnew = 0.0; // about charge in g space. -double Cal_Test::mrhog=0.0; -double Cal_Test::mrhog_save=0.0; -double Cal_Test::mrhog_core=0.0; +double Cal_Test::mrhog = 0.0; +double Cal_Test::mrhog_save = 0.0; +double Cal_Test::mrhog_core = 0.0; // others -double Cal_Test::mhs=0.0; -double Cal_Test::mwf=0.0; -double Cal_Test::mnonzero=0.0; -double Cal_Test::mspar_hsrho=0.0; +double Cal_Test::mhs = 0.0; +double Cal_Test::mwf = 0.0; +double Cal_Test::mnonzero = 0.0; +double Cal_Test::mspar_hsrho = 0.0; // plane waves -double Cal_Test::mgvec=0.0; -double Cal_Test::mig2fftw=0.0; -double Cal_Test::mig2fftc=0.0; -double Cal_Test::mgg=0.0; -double Cal_Test::mig123=0.0; -double Cal_Test::mstrucFac=0.0; -double Cal_Test::meigts123=0.0; +double Cal_Test::mgvec = 0.0; +double Cal_Test::mig2fftw = 0.0; +double Cal_Test::mig2fftc = 0.0; +double Cal_Test::mgg = 0.0; +double Cal_Test::mig123 = 0.0; +double Cal_Test::mstrucFac = 0.0; +double Cal_Test::meigts123 = 0.0; -double Cal_Test::mtot=0.0; +double Cal_Test::mtot = 0.0; void Cal_Test::test_memory(const int nat, - const int ntype, - const ModuleBase::Matrix3& GGT, - const ModulePW::PW_Basis* rhopw, - const ModulePW::PW_Basis_K* wfcpw, - const std::string chr_mixing_mode, - const int chr_mixing_ndim) + const int ntype, + const ModuleBase::Matrix3& GGT, + const ModulePW::PW_Basis* rhopw, + const ModulePW::PW_Basis_K* wfcpw, + const std::string chr_mixing_mode, + const int chr_mixing_ndim) { - ModuleBase::TITLE("Cal_Test","test_memory"); - - const int ngmw = Cal_Test::cal_np(GGT,wfcpw->ggecut, rhopw->nx, rhopw->ny, rhopw->nz); - const int ngmc = Cal_Test::cal_np(GGT,rhopw->ggecut, rhopw->nx, rhopw->ny, rhopw->nz); - -// const int ecut_wfc = INPUT.ecutwfc; -// const int ecut_chg = INPUT.ecutrho; - -// const int ngmw = Cal_Test::cal_np(ecut_wfc, rhopw->nx, rhopw->ny, rhopw->nz); -// const int ngmc = Cal_Test::cal_np(ecut_chg, rhopw->nx, rhopw->ny, rhopw->nz); - - std::cout << " number of atoms = " << nat << std::endl; - std::cout << " plane wave number for wave functions = " << ngmw << std::endl; - std::cout << " plane wave number for chage density = " << ngmc << std::endl; - - mporter = ModuleBase::Memory::calculate_mem ( rhopw->nxyz, "double"); - - mrho = mporter; - mrho_save = mrho; - mrho_core = mrho; - - // (2) memory for charge mixing - std::cout << " Mixing mode = " << chr_mixing_mode << std::endl; - if(chr_mixing_mode == "pulay") - { - std::cout << " Mixing dimension = " << chr_mixing_ndim << std::endl; - mRrho = chr_mixing_ndim * mrho; - mdRrho = (chr_mixing_ndim-1) * mrho; - mdrho = (chr_mixing_ndim-1) * mrho; - mrho_save2 = mrho; -// std::cout << " Memory for pulay mixing: " << mrho << " MB" << std::endl; - } - - mvltot = mrho; - mvr = mrho; - mvrs = mrho; - mvrs1 = mrho; - mvnew = mrho; - - mrhog = ModuleBase::Memory::calculate_mem( ngmc, "cdouble"); - mrhog_save = ModuleBase::Memory::calculate_mem( ngmc, "cdouble"); - mrhog_core = ModuleBase::Memory::calculate_mem( ngmc, "cdouble"); - - mhs = ModuleBase::Memory::calculate_mem( PARAM.globalv.nlocal*PARAM.globalv.nlocal, "double" ); - mwf = ModuleBase::Memory::calculate_mem( PARAM.globalv.nlocal*PARAM.inp.nbands, "double" ); - mnonzero = ModuleBase::Memory::calculate_mem( PARAM.globalv.nlocal*(PARAM.globalv.nlocal+1)/2, "bool"); -// mohan comment out 2021-02-11 -// mspar_hsrho = Memory::calculate_mem( Hnnz*3, "double"); - - mgvec = ModuleBase::Memory::calculate_mem( ngmc * 3 * 2, "double" ); - mig2fftw = ModuleBase::Memory::calculate_mem( ngmw , "int"); - mig2fftc = ModuleBase::Memory::calculate_mem( ngmc , "int"); - mgg = ModuleBase::Memory::calculate_mem( ngmc, "double"); - mig123 = ModuleBase::Memory::calculate_mem( ngmc*3, "int"); - mstrucFac = ModuleBase::Memory::calculate_mem( ntype*ngmc, "cdouble"); - meigts123 = ModuleBase::Memory::calculate_mem( nat * (2*rhopw->nx+1+2*rhopw->ny+1+2*rhopw->nz+1), "cdouble"); - - //(3) Memory for H,S matrix. - std::cout << " NLOCAL = " << PARAM.globalv.nlocal << std::endl; - std::cout << " NBANDS = " << PARAM.inp.nbands << std::endl; - - std::cout << " Memory for H,S matrix ( " - << PARAM.globalv.nlocal << ", " - << PARAM.globalv.nlocal << ") = " - << mhs << " MB" << std::endl; - - //(4) Memory for wave functions. - std::cout << " Memory for wave functions ( " - << PARAM.globalv.nlocal << ", " - << PARAM.inp.nbands << ") = " - << mwf << " MB" << std::endl; - - print_mem(1); -// print_mem(8); -// print_mem(16); - -// if(nat > 200) -// { -// print_mem(32); -// print_mem(64); -// } - - return; + ModuleBase::TITLE("Cal_Test", "test_memory"); + + const int ngmw = Cal_Test::cal_np(GGT, wfcpw->ggecut, rhopw->nx, rhopw->ny, rhopw->nz); + const int ngmc = Cal_Test::cal_np(GGT, rhopw->ggecut, rhopw->nx, rhopw->ny, rhopw->nz); + + // const int ecut_wfc = INPUT.ecutwfc; + // const int ecut_chg = INPUT.ecutrho; + + // const int ngmw = Cal_Test::cal_np(ecut_wfc, rhopw->nx, rhopw->ny, rhopw->nz); + // const int ngmc = Cal_Test::cal_np(ecut_chg, rhopw->nx, rhopw->ny, rhopw->nz); + + std::cout << " number of atoms = " << nat << std::endl; + std::cout << " plane wave number for wave functions = " << ngmw << std::endl; + std::cout << " plane wave number for chage density = " << ngmc << std::endl; + + mporter = ModuleBase::Memory::calculate_mem(rhopw->nxyz, "double"); + + mrho = mporter; + mrho_save = mrho; + mrho_core = mrho; + + // (2) memory for charge mixing + std::cout << " Mixing mode = " << chr_mixing_mode << std::endl; + if (chr_mixing_mode == "pulay") + { + std::cout << " Mixing dimension = " << chr_mixing_ndim << std::endl; + mRrho = chr_mixing_ndim * mrho; + mdRrho = (chr_mixing_ndim - 1) * mrho; + mdrho = (chr_mixing_ndim - 1) * mrho; + mrho_save2 = mrho; + // std::cout << " Memory for pulay mixing: " << mrho << " MB" << std::endl; + } + + mvltot = mrho; + mvr = mrho; + mvrs = mrho; + mvrs1 = mrho; + mvnew = mrho; + + mrhog = ModuleBase::Memory::calculate_mem(ngmc, "cdouble"); + mrhog_save = ModuleBase::Memory::calculate_mem(ngmc, "cdouble"); + mrhog_core = ModuleBase::Memory::calculate_mem(ngmc, "cdouble"); + + mhs = ModuleBase::Memory::calculate_mem(PARAM.globalv.nlocal * PARAM.globalv.nlocal, "double"); + mwf = ModuleBase::Memory::calculate_mem(PARAM.globalv.nlocal * PARAM.inp.nbands, "double"); + mnonzero = ModuleBase::Memory::calculate_mem(PARAM.globalv.nlocal * (PARAM.globalv.nlocal + 1) / 2, "bool"); + // mohan comment out 2021-02-11 + // mspar_hsrho = Memory::calculate_mem( Hnnz*3, "double"); + + mgvec = ModuleBase::Memory::calculate_mem(ngmc * 3 * 2, "double"); + mig2fftw = ModuleBase::Memory::calculate_mem(ngmw, "int"); + mig2fftc = ModuleBase::Memory::calculate_mem(ngmc, "int"); + mgg = ModuleBase::Memory::calculate_mem(ngmc, "double"); + mig123 = ModuleBase::Memory::calculate_mem(ngmc * 3, "int"); + mstrucFac = ModuleBase::Memory::calculate_mem(ntype * ngmc, "cdouble"); + meigts123 = ModuleBase::Memory::calculate_mem(nat * (2 * rhopw->nx + 1 + 2 * rhopw->ny + 1 + 2 * rhopw->nz + 1), + "cdouble"); + + //(3) Memory for H,S matrix. + std::cout << " NLOCAL = " << PARAM.globalv.nlocal << std::endl; + std::cout << " NBANDS = " << PARAM.inp.nbands << std::endl; + + std::cout << " Memory for H,S matrix ( " << PARAM.globalv.nlocal << ", " << PARAM.globalv.nlocal << ") = " << mhs + << " MB" << std::endl; + + //(4) Memory for wave functions. + std::cout << " Memory for wave functions ( " << PARAM.globalv.nlocal << ", " << PARAM.inp.nbands << ") = " << mwf + << " MB" << std::endl; + + print_mem(1); + // print_mem(8); + // print_mem(16); + + // if(nat > 200) + // { + // print_mem(32); + // print_mem(64); + // } + + return; } //! compute the number of plane waves -int Cal_Test::cal_np(const ModuleBase::Matrix3& GGT, - const double &ggcut, - const int &n1, - const int &n2, - const int &n3) +int Cal_Test::cal_np(const ModuleBase::Matrix3& GGT, const double& ggcut, const int& n1, const int& n2, const int& n3) { -/* - std::cout << "ggcut=" << ggcut << std::endl; - std::cout << "n1=" << n1 << std::endl; - std::cout << "n2=" << n2 << std::endl; - std::cout << "n3=" << n3 << std::endl; -*/ - - assert(n1>=0); - assert(n2>=0); - assert(n3>=0); - - int ibox[3]={0}; - - // set the center at origin point. - ibox[0] = int(n1 / 2.0) + 1; - ibox[1] = int(n2 / 2.0) + 1; - ibox[2] = int(n3 / 2.0) + 1; - // get the number of plane wave within 'gcut' - int ng = 0; - for (int i = -ibox[0]; i <= ibox[0]; i++) - { - for (int j = -ibox[1]; j <= ibox[1]; j++) - { - for (int k = -ibox[2]; k <= ibox[2]; k++) - { - ModuleBase::Vector3 f(i,j,k); - // g2= |f|^2 in the unit of (2Pi/lat0)^2 - double g2 = f * (GGT * f); - - // gcut is from input. - if (g2 <= ggcut) - { - ng++; - } - } - } - } - return ng; + /* + std::cout << "ggcut=" << ggcut << std::endl; + std::cout << "n1=" << n1 << std::endl; + std::cout << "n2=" << n2 << std::endl; + std::cout << "n3=" << n3 << std::endl; + */ + + assert(n1 >= 0); + assert(n2 >= 0); + assert(n3 >= 0); + + int ibox[3] = {0}; + + // set the center at origin point. + ibox[0] = int(n1 / 2.0) + 1; + ibox[1] = int(n2 / 2.0) + 1; + ibox[2] = int(n3 / 2.0) + 1; + // get the number of plane wave within 'gcut' + int ng = 0; + for (int i = -ibox[0]; i <= ibox[0]; i++) + { + for (int j = -ibox[1]; j <= ibox[1]; j++) + { + for (int k = -ibox[2]; k <= ibox[2]; k++) + { + ModuleBase::Vector3 f(i, j, k); + // g2= |f|^2 in the unit of (2Pi/lat0)^2 + double g2 = f * (GGT * f); + + // gcut is from input. + if (g2 <= ggcut) + { + ng++; + } + } + } + } + return ng; } -void Cal_Test::print_mem(const int &nproc) +void Cal_Test::print_mem(const int& nproc) { - std::cout << " ========================: " << std::endl; - mtot = 0.0; - - mtot += mporter + mrho + mrho_save + mrho_core + mRrho + - mdRrho + mdrho + mrho_save2 + mvltot + mvr + - mvrs + mvrs1 + mvnew + mrhog + mrhog_save + mrhog_core + - mgvec + mgg + mig2fftw + mig2fftc + mig123 + - mstrucFac + meigts123; - mtot += mwf + mhs; - - std::cout << " If you use " << nproc << " processors: " << std::endl; - std::cout << " MEMORY FOR porter : " << std::setw(15) << mporter/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR rho : " << std::setw(15) << mrho/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR rho_save : " << std::setw(15) << mrho_save/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR rho_core : " << std::setw(15) << mrho_core/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR Rrho : " << std::setw(15) << mRrho/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR dRrho : " << std::setw(15) << mdRrho/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR drho : " << std::setw(15) << mdrho/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR rho_save2 : " << std::setw(15) << mrho_save2/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR vltot : " << std::setw(15) << mvltot/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR vr : " << std::setw(15) << mvr/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR vrs : " << std::setw(15) << mvrs/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR vrs1 : " << std::setw(15) << mvrs1/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR vrnew : " << std::setw(15) << mvnew/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR rhog : " << std::setw(15) << mrhog/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR rhog_save : " << std::setw(15) << mrhog_save/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR rhog_core : " << std::setw(15) << mrhog_core/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR H, S matrix : " << std::setw(15) << mhs/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR wave function: " << std::setw(15) << mwf/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR spar H,S,rho : " << std::setw(15) << mspar_hsrho << " MB" << std::endl; - std::cout << " MEMORY FOR nonzero : " << std::setw(15) << mnonzero << " MB" << std::endl; - std::cout << " MEMORY FOR g vectors : " << std::setw(15) << mgvec/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR gg : " << std::setw(15) << mgg/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR fftw index : " << std::setw(15) << mig2fftw/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR fftc index : " << std::setw(15) << mig2fftc/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR ig123 : " << std::setw(15) << mig123/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR strucFac : " << std::setw(15) << mstrucFac/nproc << " MB" << std::endl; - std::cout << " MEMORY FOR eigts1,2,3 : " << std::setw(15) << meigts123/nproc << " MB" << std::endl; - std::cout << " TOTAL MEMORY : " << std::setw(15) << mtot/nproc << " MB" << std::endl; - - std::cout << " MEMORY FOR nonzero : " << std::setw(15) - << (double)PARAM.globalv.nlocal*(PARAM.globalv.nlocal+1)/1028/1028/2.0/nproc - << " MB" << std::endl; + std::cout << " ========================: " << std::endl; + mtot = 0.0; + + mtot += mporter + mrho + mrho_save + mrho_core + mRrho + mdRrho + mdrho + mrho_save2 + mvltot + mvr + mvrs + mvrs1 + + mvnew + mrhog + mrhog_save + mrhog_core + mgvec + mgg + mig2fftw + mig2fftc + mig123 + mstrucFac + + meigts123; + mtot += mwf + mhs; + + std::cout << " If you use " << nproc << " processors: " << std::endl; + std::cout << " MEMORY FOR porter : " << std::setw(15) << mporter / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR rho : " << std::setw(15) << mrho / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR rho_save : " << std::setw(15) << mrho_save / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR rho_core : " << std::setw(15) << mrho_core / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR Rrho : " << std::setw(15) << mRrho / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR dRrho : " << std::setw(15) << mdRrho / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR drho : " << std::setw(15) << mdrho / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR rho_save2 : " << std::setw(15) << mrho_save2 / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR vltot : " << std::setw(15) << mvltot / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR vr : " << std::setw(15) << mvr / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR vrs : " << std::setw(15) << mvrs / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR vrs1 : " << std::setw(15) << mvrs1 / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR vrnew : " << std::setw(15) << mvnew / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR rhog : " << std::setw(15) << mrhog / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR rhog_save : " << std::setw(15) << mrhog_save / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR rhog_core : " << std::setw(15) << mrhog_core / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR H, S matrix : " << std::setw(15) << mhs / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR wave function: " << std::setw(15) << mwf / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR spar H,S,rho : " << std::setw(15) << mspar_hsrho << " MB" << std::endl; + std::cout << " MEMORY FOR nonzero : " << std::setw(15) << mnonzero << " MB" << std::endl; + std::cout << " MEMORY FOR g vectors : " << std::setw(15) << mgvec / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR gg : " << std::setw(15) << mgg / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR fftw index : " << std::setw(15) << mig2fftw / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR fftc index : " << std::setw(15) << mig2fftc / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR ig123 : " << std::setw(15) << mig123 / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR strucFac : " << std::setw(15) << mstrucFac / nproc << " MB" << std::endl; + std::cout << " MEMORY FOR eigts1,2,3 : " << std::setw(15) << meigts123 / nproc << " MB" << std::endl; + std::cout << " TOTAL MEMORY : " << std::setw(15) << mtot / nproc << " MB" << std::endl; + + std::cout << " MEMORY FOR nonzero : " << std::setw(15) + << (double)PARAM.globalv.nlocal * (PARAM.globalv.nlocal + 1) / 1028 / 1028 / 2.0 / nproc << " MB" + << std::endl; } diff --git a/source/module_io/cif_io.cpp b/source/module_io/cif_io.cpp index 3f3e67a34a..8c8ffdf1a1 100644 --- a/source/module_io/cif_io.cpp +++ b/source/module_io/cif_io.cpp @@ -1,20 +1,28 @@ -#include -#include -#include -#include -#include "module_base/formatter.h" #include "module_io/cif_io.h" -#include + +#include "source_base/formatter.h" +#include "source_base/tool_quit.h" + +#include #include -#include "module_base/tool_quit.h" +#include +#include +#include +#include #ifdef __MPI -#include "module_base/parallel_common.h" +#include "source_base/parallel_common.h" #endif -double deg2rad(double deg) { return deg * M_PI / 180.0; } -double rad2deg(double rad) { return rad * 180.0 / M_PI; } +double deg2rad(double deg) +{ + return deg * M_PI / 180.0; +} +double rad2deg(double rad) +{ + return rad * 180.0 / M_PI; +} -void _build_chem_formula(const int natom, +void _build_chem_formula(const int natom, const std::string* atom_site_labels, std::string& sum, std::string& structural) @@ -79,13 +87,15 @@ void abc_angles_to_vec(const double* abc_angles, double* vec) vec[4] = b * std::sin(deg2rad(gamma)); vec[5] = 0.0; vec[6] = c * std::cos(deg2rad(beta)); - vec[7] = c * (std::cos(deg2rad(alpha)) - std::cos(deg2rad(beta)) * std::cos(deg2rad(gamma))) / std::sin(deg2rad(gamma)); + vec[7] = c * (std::cos(deg2rad(alpha)) - std::cos(deg2rad(beta)) * std::cos(deg2rad(gamma))) + / std::sin(deg2rad(gamma)); vec[8] = std::sqrt(c * c - vec[6] * vec[6] - vec[7] * vec[7]); } double vec_to_volume(const double* vec) { // vector's mixed product - return vec[0] * (vec[4] * vec[8] - vec[5] * vec[7]) - vec[1] * (vec[3] * vec[8] - vec[5] * vec[6]) + vec[2] * (vec[3] * vec[7] - vec[4] * vec[6]); + return vec[0] * (vec[4] * vec[8] - vec[5] * vec[7]) - vec[1] * (vec[3] * vec[8] - vec[5] * vec[6]) + + vec[2] * (vec[3] * vec[7] - vec[4] * vec[6]); } double abc_angles_to_volume(const double* abc_angles) { @@ -93,7 +103,7 @@ double abc_angles_to_volume(const double* abc_angles) abc_angles_to_vec(abc_angles, vec.data()); return vec_to_volume(vec.data()); } -std::vector _split_outside_enclose(const std::string& in, +std::vector _split_outside_enclose(const std::string& in, const std::string& delim, const std::vector& enclose) { @@ -195,7 +205,8 @@ std::map> _build_block_data(const std::vec std::vector values; // first drop all elements that does not startswith "_" before the first element that startswith "_" std::vector block_ = block; - auto it = std::find_if(block.begin(), block.end(), [](const std::string& s) { return FmtCore::startswith(s, "_"); }); + auto it + = std::find_if(block.begin(), block.end(), [](const std::string& s) { return FmtCore::startswith(s, "_"); }); if (it != block.begin()) { block_.erase(block_.begin(), it); @@ -230,12 +241,12 @@ std::map> _build_block_data(const std::vec out[keys[i][0]] = {values[i]}; } } - + return out; } -void bcast_cifmap(std::map>& map, // the map to be broadcasted - const int rank = 0) // source rank: from which rank to broadcast +void bcast_cifmap(std::map>& map, // the map to be broadcasted + const int rank = 0) // source rank: from which rank to broadcast { #ifdef __MPI int myrank; @@ -307,8 +318,8 @@ void ModuleIO::CifParser::_unpack_ucell(const UnitCell& ucell, for (int i = 0; i < natom; ++i) { atom_site_labels[i] = ucell.atoms[ucell.iat2it[i]].ncpp.psd; // the most standard label - atom_site_labels[i] = atom_site_labels[i].empty() ? ucell.atom_label[ucell.iat2it[i]]: atom_site_labels[i]; - atom_site_labels[i] = atom_site_labels[i].empty() ? ucell.atoms[ucell.iat2it[i]].label: atom_site_labels[i]; + atom_site_labels[i] = atom_site_labels[i].empty() ? ucell.atom_label[ucell.iat2it[i]] : atom_site_labels[i]; + atom_site_labels[i] = atom_site_labels[i].empty() ? ucell.atoms[ucell.iat2it[i]].label : atom_site_labels[i]; assert(!atom_site_labels[i].empty()); // ensure the label is not empty atom_site_fract_coords[3 * i] = ucell.atoms[ucell.iat2it[i]].taud[ucell.iat2ia[i]].x; atom_site_fract_coords[3 * i + 1] = ucell.atoms[ucell.iat2it[i]].taud[ucell.iat2ia[i]].y; @@ -370,7 +381,7 @@ void ModuleIO::CifParser::write(const std::string& fcif, ofs << " _atom_site_occupancy" << std::endl; std::vector occups(natom, 1.0); if (atom_site_occups != nullptr) - {// overwrite the default occupancies + { // overwrite the default occupancies std::copy(atom_site_occups, atom_site_occups + natom, occups.begin()); } // then output atomic information with format: %3s%4s%3d%12.8f%12.8f%12.8f%3d @@ -382,8 +393,13 @@ void ModuleIO::CifParser::write(const std::string& fcif, { const std::string label = atom_site_labels[i]; numbered_label = label + std::to_string(i); - cache = fmt.format(label, numbered_label, 1, - atom_site_fract_coords[j], atom_site_fract_coords[j + 1], atom_site_fract_coords[j + 2], occups[i]); + cache = fmt.format(label, + numbered_label, + 1, + atom_site_fract_coords[j], + atom_site_fract_coords[j + 1], + atom_site_fract_coords[j + 2], + occups[i]); ofs << cache << std::endl; j += 3; } @@ -410,15 +426,15 @@ void ModuleIO::CifParser::write(const std::string& fcif, } #endif const double* occups = atom_site_occups.empty() ? nullptr : atom_site_occups.data(); - write(fcif.c_str(), - abc_angles.data(), - atom_site_labels.size(), - atom_site_labels.data(), - atom_site_fract_coords.data(), - title, - data_tag, + write(fcif.c_str(), + abc_angles.data(), + atom_site_labels.size(), + atom_site_labels.data(), + atom_site_fract_coords.data(), + title, + data_tag, rank, - occups, + occups, cell_formula_units_z); } @@ -431,7 +447,7 @@ void ModuleIO::CifParser::write(const std::string& fcif, #ifdef __MPI int myrank; MPI_Comm_rank(MPI_COMM_WORLD, &myrank); - if (myrank != rank) // if present rank is not the rank assigned to write the cif file, then return + if (myrank != rank) // if present rank is not the rank assigned to write the cif file, then return { return; } @@ -447,16 +463,22 @@ void ModuleIO::CifParser::write(const std::string& fcif, std::copy(vecc.begin(), vecc.end(), vec.begin() + 6); std::vector abc_angles(6); vec_to_abc_angles(vec.data(), abc_angles.data()); - write(fcif.c_str(), abc_angles.data(), natom, atom_site_labels.data(), atom_site_fract_coords.data(), title, data_tag); + write(fcif.c_str(), + abc_angles.data(), + natom, + atom_site_labels.data(), + atom_site_fract_coords.data(), + title, + data_tag); } // reading cif is another hard (physically) and laborious work. The cif sometimes can be easily read line by line, // sometimes word by word. The structure of cif file is, except the line startswith "#", all other lines can be split -// by blocks leading by "loop_", then in each "loop_", there are contents can be split by those keywords that +// by blocks leading by "loop_", then in each "loop_", there are contents can be split by those keywords that // startswith "_". There is also another exception that, if there is no space between keywords, then their values will -// appear after all keywords are listed. In this case, all values actually form a table, which is needed to be +// appear after all keywords are listed. In this case, all values actually form a table, which is needed to be // furtherly formatted (rows are memory-contiguous). -// Thus the reading strategy are, +// Thus the reading strategy are, // 1. first split the file into blocks by "loop_" // 2. in each block, split with words starting with "_" // 3. scan the splited words @@ -473,38 +495,39 @@ void ModuleIO::CifParser::read(const std::string& fcif, if (myrank == rank) // only the rank assigned to read the cif file will read the file { #endif - std::ifstream ifs(fcif); - if (!ifs) - { - ModuleBase::WARNING_QUIT("ModuleIO::CifParser::read", "Cannot open file " + fcif); - } - std::string cache; // first read all lines into cache - while (ifs.good()) - { - std::string line; - std::getline(ifs, line); - if (FmtCore::startswith(FmtCore::strip(line), "#")) + std::ifstream ifs(fcif); + if (!ifs) { - out["comment"].push_back(line); + ModuleBase::WARNING_QUIT("ModuleIO::CifParser::read", "Cannot open file " + fcif); } - else if (FmtCore::startswith(FmtCore::strip(line), "data_")) + std::string cache; // first read all lines into cache + while (ifs.good()) { - out["data_tag"].push_back(line); + std::string line; + std::getline(ifs, line); + if (FmtCore::startswith(FmtCore::strip(line), "#")) + { + out["comment"].push_back(line); + } + else if (FmtCore::startswith(FmtCore::strip(line), "data_")) + { + out["data_tag"].push_back(line); + } + else + { + cache += line + " "; + } } - else + std::vector blocks = FmtCore::split(FmtCore::strip(cache), "loop_"); + blocks.erase(std::remove_if(blocks.begin(), blocks.end(), [](const std::string& s) { return s.empty(); }), + blocks.end()); + + for (auto& block: blocks) { - cache += line + " "; + std::vector words = _split_loop_block(block); + std::map> data = _build_block_data(words); + out.insert(data.begin(), data.end()); } - } - std::vector blocks = FmtCore::split(FmtCore::strip(cache), "loop_"); - blocks.erase(std::remove_if(blocks.begin(), blocks.end(), [](const std::string& s) { return s.empty(); }), blocks.end()); - - for (auto& block: blocks) - { - std::vector words = _split_loop_block(block); - std::map> data = _build_block_data(words); - out.insert(data.begin(), data.end()); - } #ifdef __MPI } bcast_cifmap(out, rank); diff --git a/source/module_io/csr_reader.cpp b/source/module_io/csr_reader.cpp index 9c5ce359c1..160cb78a61 100644 --- a/source/module_io/csr_reader.cpp +++ b/source/module_io/csr_reader.cpp @@ -1,6 +1,6 @@ #include "csr_reader.h" -#include "module_base/tool_quit.h" +#include "source_base/tool_quit.h" namespace ModuleIO { diff --git a/source/module_io/fR_overlap.cpp b/source/module_io/fR_overlap.cpp index 8f54ba8d97..7137a41ed7 100644 --- a/source/module_io/fR_overlap.cpp +++ b/source/module_io/fR_overlap.cpp @@ -1,15 +1,15 @@ #ifdef __LCAO #include "fR_overlap.h" + #include "module_basis/module_ao/ORB_read.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" -#include "module_base/math_integral.h" -#include "module_base/blas_connector.h" +#include "source_base/blas_connector.h" +#include "source_base/math_integral.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" template FR_overlap::FR_overlap() { - } template @@ -60,7 +60,7 @@ FR_overlap::~FR_overlap() { delete this->Leb_grid; } - + if (this->FR_container) { delete this->FR_container; @@ -137,7 +137,11 @@ void FR_overlap::calculate_FR() } template -void FR_overlap::cal_FR_IJR(const int& iat1, const int& iat2, const Parallel_Orbitals* paraV, const ModuleBase::Vector3& dtau, T* data_pointer) +void FR_overlap::cal_FR_IJR(const int& iat1, + const int& iat2, + const Parallel_Orbitals* paraV, + const ModuleBase::Vector3& dtau, + T* data_pointer) { // --------------------------------------------- // get info of orbitals of atom1 and atom2 from ucell @@ -182,7 +186,7 @@ void FR_overlap::cal_FR_IJR(const int& iat1, const int& iat2, const Parallel_ const int iw1 = row_indexes[iw1l] / npol; const int L1 = iw2l1[iw1]; const int N1 = iw2n1[iw1]; - + LN_pair1.insert(std::make_pair(L1, N1)); } @@ -191,7 +195,7 @@ void FR_overlap::cal_FR_IJR(const int& iat1, const int& iat2, const Parallel_ const int iw2 = col_indexes[iw2l] / npol; const int L2 = iw2l2[iw2]; const int N2 = iw2n2[iw2]; - + LN_pair2.insert(std::make_pair(L2, N2)); } @@ -200,17 +204,17 @@ void FR_overlap::cal_FR_IJR(const int& iat1, const int& iat2, const Parallel_ int row_num = static_cast(row_indexes.size() / npol); int col_num = static_cast(col_indexes.size() / npol); - T *grid_1 = new T[row_num*grid_num]; // matrix [row_num, grid_num] - T *grid_2 = new T[grid_num*col_num]; // matrix [grid_num, col_num] - ModuleBase::GlobalFunc::ZEROS(grid_1, row_num*grid_num); - ModuleBase::GlobalFunc::ZEROS(grid_2, grid_num*col_num); + T* grid_1 = new T[row_num * grid_num]; // matrix [row_num, grid_num] + T* grid_2 = new T[grid_num * col_num]; // matrix [grid_num, col_num] + ModuleBase::GlobalFunc::ZEROS(grid_1, row_num * grid_num); + ModuleBase::GlobalFunc::ZEROS(grid_2, grid_num * col_num); double xmin = 0.0; double xmax = Rcut1; - double *r_radial = new double[radial_grid_num]; - double *weights_radial = new double[radial_grid_num]; + double* r_radial = new double[radial_grid_num]; + double* weights_radial = new double[radial_grid_num]; ModuleBase::Integral::Gauss_Legendre_grid_and_weight(xmin, xmax, radial_grid_num, r_radial, weights_radial); - + int count = -1; for (int ir = 0; ir < radial_grid_num; ir++) { @@ -230,16 +234,18 @@ void FR_overlap::cal_FR_IJR(const int& iat1, const int& iat2, const Parallel_ tmp_r_unit = tmp_r_coor / tmp_r_coor_norm; } - if (tmp_r_coor_norm > Rcut2) { continue; -} + if (tmp_r_coor_norm > Rcut2) + { + continue; + } std::map, double> psi_value2 = psi_inter(T2, LN_pair2, tmp_r_coor_norm); std::vector rly1; - ModuleBase::Ylm::rl_sph_harm (maxL1, r_angular_tmp.x, r_angular_tmp.y, r_angular_tmp.z, rly1); + ModuleBase::Ylm::rl_sph_harm(maxL1, r_angular_tmp.x, r_angular_tmp.y, r_angular_tmp.z, rly1); std::vector rly2; - ModuleBase::Ylm::rl_sph_harm (maxL2, tmp_r_unit.x, tmp_r_unit.y, tmp_r_unit.z, rly2); + ModuleBase::Ylm::rl_sph_harm(maxL2, tmp_r_unit.x, tmp_r_unit.y, tmp_r_unit.z, rly2); double weights_angular = Leb_grid->get_weight()[ian]; @@ -252,7 +258,8 @@ void FR_overlap::cal_FR_IJR(const int& iat1, const int& iat2, const Parallel_ const int N1 = iw2n1[iw1]; const int m1 = iw2m1[iw1]; - grid_1[irow1*grid_num+count] = psi_value1[std::make_pair(L1, N1)] * rly1[L1*L1+m1] * r_radial[ir] * r_radial[ir] * weights_radial[ir]; + grid_1[irow1 * grid_num + count] = psi_value1[std::make_pair(L1, N1)] * rly1[L1 * L1 + m1] + * r_radial[ir] * r_radial[ir] * weights_radial[ir]; int icol2 = -1; for (int iw2l = 0; iw2l < col_indexes.size(); iw2l += npol) @@ -263,29 +270,38 @@ void FR_overlap::cal_FR_IJR(const int& iat1, const int& iat2, const Parallel_ const int N2 = iw2n2[iw2]; const int m2 = iw2m2[iw2]; - grid_2[count*col_num+icol2] = psi_value2[std::make_pair(L2, N2)] * rly2[L2*L2+m2] * weights_angular * fr(r_coor+tau_1); + grid_2[count * col_num + icol2] = psi_value2[std::make_pair(L2, N2)] * rly2[L2 * L2 + m2] + * weights_angular * fr(r_coor + tau_1); } - } - } } - T *matrix_mul = new T[row_num*col_num]; // matrix [row_num, col_num] - ModuleBase::GlobalFunc::ZEROS(matrix_mul, row_num*col_num); - - BlasConnector::gemm('N', 'N', row_num, col_num, grid_num, - 1, grid_1, grid_num, grid_2, col_num, - 0, matrix_mul, col_num); - - for(int ir = 0; ir < row_num; ir++) + T* matrix_mul = new T[row_num * col_num]; // matrix [row_num, col_num] + ModuleBase::GlobalFunc::ZEROS(matrix_mul, row_num * col_num); + + BlasConnector::gemm('N', + 'N', + row_num, + col_num, + grid_num, + 1, + grid_1, + grid_num, + grid_2, + col_num, + 0, + matrix_mul, + col_num); + + for (int ir = 0; ir < row_num; ir++) { - for(int ic = 0; ic < col_num; ic++) + for (int ic = 0; ic < col_num; ic++) { for (int ipol = 0; ipol < npol; ipol++) { - int index = (npol*ir+ipol)*col_num*npol + npol*ic + ipol; - data_pointer[index] = matrix_mul[ir*col_num+ic]; + int index = (npol * ir + ipol) * col_num * npol + npol * ic + ipol; + data_pointer[index] = matrix_mul[ir * col_num + ic]; } } } @@ -298,16 +314,18 @@ void FR_overlap::cal_FR_IJR(const int& iat1, const int& iat2, const Parallel_ } template -std::map, double> FR_overlap::psi_inter(const int &T1, const std::set> &LN_pair1, const double &r_norm) +std::map, double> FR_overlap::psi_inter(const int& T1, + const std::set>& LN_pair1, + const double& r_norm) { std::map, double> psi_value; - for (auto i : LN_pair1) + for (auto i: LN_pair1) { int L1 = i.first; int N1 = i.second; - const double *psi_r1 = ptr_orb_->Phi[T1].PhiLN(L1, N1).getPsi(); + const double* psi_r1 = ptr_orb_->Phi[T1].PhiLN(L1, N1).getPsi(); int mesh_r1 = ptr_orb_->Phi[T1].PhiLN(L1, N1).getNr(); double dr1 = ptr_orb_->Phi[T1].PhiLN(L1, N1).getRab(0); @@ -318,12 +336,10 @@ std::map, double> FR_overlap::psi_inter(const int &T1, co } template -double FR_overlap::Polynomial_Interpolation( - const double *psi_r, - const int &mesh_r, - const double &dr, - const double &x -) +double FR_overlap::Polynomial_Interpolation(const double* psi_r, + const int& mesh_r, + const double& dr, + const double& x) { const double position = x / dr; const int iq = static_cast(position); @@ -336,20 +352,20 @@ double FR_overlap::Polynomial_Interpolation( if (iq <= mesh_r - 4) { t1 = psi_r[iq]; - t2 = psi_r[iq+1]; - t3 = psi_r[iq+2]; - t4 = psi_r[iq+3]; + t2 = psi_r[iq + 1]; + t3 = psi_r[iq + 2]; + t4 = psi_r[iq + 3]; } else if (iq == mesh_r - 3) { t1 = psi_r[iq]; - t2 = psi_r[iq+1]; - t3 = psi_r[iq+2]; + t2 = psi_r[iq + 1]; + t3 = psi_r[iq + 2]; } else if (iq == mesh_r - 2) { t1 = psi_r[iq]; - t2 = psi_r[iq+1]; + t2 = psi_r[iq + 1]; } else if (iq == mesh_r - 1) { @@ -360,11 +376,8 @@ double FR_overlap::Polynomial_Interpolation( const double x1 = 1.0 - x0; const double x2 = 2.0 - x0; const double x3 = 3.0 - x0; - const double y = - t1 * x1 * x2 * x3 / 6.0 + - t2 * x0 * x2 * x3 / 2.0 - - t3 * x1 * x0 * x3 / 2.0 + - t4 * x1 * x2 * x0 / 6.0 ; + const double y + = t1 * x1 * x2 * x3 / 6.0 + t2 * x0 * x2 * x3 / 2.0 - t3 * x1 * x0 * x3 / 2.0 + t4 * x1 * x2 * x0 / 6.0; return y; } diff --git a/source/module_io/fR_overlap.h b/source/module_io/fR_overlap.h index c89d2a4bb0..6adae65cc3 100644 --- a/source/module_io/fR_overlap.h +++ b/source/module_io/fR_overlap.h @@ -1,19 +1,19 @@ #ifndef FR_OVERLAP_H #define FR_OVERLAP_H #ifdef __LCAO -#include -#include #include "module_basis/module_ao/parallel_orbitals.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_cell/unitcell.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" -#include "module_base/math_lebedev_laikov.h" +#include "source_base/math_lebedev_laikov.h" +#include +#include template class FR_overlap { -public: + public: using fr_ptr = std::function)>; FR_overlap(); @@ -39,27 +39,27 @@ class FR_overlap return this->FR_container; } -protected: - void initialize_FR(const Grid_Driver* GridD, const Parallel_Orbitals* paraV); + protected: + void initialize_FR(const Grid_Driver* GridD, const Parallel_Orbitals* paraV); - void cal_FR_IJR(const int& iat1, - const int& iat2, - const Parallel_Orbitals* paraV, - const ModuleBase::Vector3& dtau, - T* data_pointer); + void cal_FR_IJR(const int& iat1, + const int& iat2, + const Parallel_Orbitals* paraV, + const ModuleBase::Vector3& dtau, + T* data_pointer); - std::map, double> psi_inter(const int& T1, - const std::set>& LN_pair1, - const double& r_norm); + std::map, double> psi_inter(const int& T1, + const std::set>& LN_pair1, + const double& r_norm); - double Polynomial_Interpolation(const double* psi_r, const int& mesh_r, const double& dr, const double& x); + double Polynomial_Interpolation(const double* psi_r, const int& mesh_r, const double& dr, const double& x); - fr_ptr fr = nullptr; - const UnitCell* ucell = nullptr; - const LCAO_Orbitals* ptr_orb_ = nullptr; - int radial_grid_num = 140; - ModuleBase::Lebedev_laikov_grid* Leb_grid = nullptr; - hamilt::HContainer* FR_container = nullptr; + fr_ptr fr = nullptr; + const UnitCell* ucell = nullptr; + const LCAO_Orbitals* ptr_orb_ = nullptr; + int radial_grid_num = 140; + ModuleBase::Lebedev_laikov_grid* Leb_grid = nullptr; + hamilt::HContainer* FR_container = nullptr; }; #endif #endif diff --git a/source/module_io/file_reader.cpp b/source/module_io/file_reader.cpp index fd7a1e18b5..5f24150518 100644 --- a/source/module_io/file_reader.cpp +++ b/source/module_io/file_reader.cpp @@ -1,6 +1,6 @@ #include "file_reader.h" -#include "module_base/tool_quit.h" +#include "source_base/tool_quit.h" namespace ModuleIO { diff --git a/source/module_io/filename.cpp b/source/module_io/filename.cpp index 8c3d86fa9d..79c8f2e34c 100644 --- a/source/module_io/filename.cpp +++ b/source/module_io/filename.cpp @@ -1,84 +1,85 @@ -#include #include "filename.h" -#include "module_base/tool_quit.h" + +#include "source_base/tool_quit.h" + +#include namespace ModuleIO { -std::string filename_output( - const std::string &directory, - const std::string &property, - const std::string &basis, - const int ik_local, // the ik index within each pool - const std::vector &ik2iktot, - const int nspin, - const int nkstot, - const int out_type, - const bool out_app_flag, - const bool gamma_only, - const int istep) +std::string filename_output(const std::string& directory, + const std::string& property, + const std::string& basis, + const int ik_local, // the ik index within each pool + const std::vector& ik2iktot, + const int nspin, + const int nkstot, + const int out_type, + const bool out_app_flag, + const bool gamma_only, + const int istep) { // output filename = "{PARAM.globalv.global_out_dir}/property{s}{spin index} - // {k(optinal)}{k-point index}{g(optional)}{geometry index1}{_basis(nao|pw)} + // {k(optinal)}{k-point index}{g(optional)}{geometry index1}{_basis(nao|pw)} // + {".txt"/".dat"}" - std::set valid_properties = {"wf", "chg", "hk", "sk", "tk", "vxc"}; - if (valid_properties.find(property) == valid_properties.end()) - { - ModuleBase::WARNING_QUIT("ModuleIO::filename_output", "unknown property in filename function"); - } + std::set valid_properties = {"wf", "chg", "hk", "sk", "tk", "vxc"}; + if (valid_properties.find(property) == valid_properties.end()) + { + ModuleBase::WARNING_QUIT("ModuleIO::filename_output", "unknown property in filename function"); + } - std::set valid_basis = {"pw", "nao"}; - if (valid_basis.find(basis) == valid_basis.end()) - { - ModuleBase::WARNING_QUIT("ModuleIO::filename_output", "unknown basis in filename function"); - } + std::set valid_basis = {"pw", "nao"}; + if (valid_basis.find(basis) == valid_basis.end()) + { + ModuleBase::WARNING_QUIT("ModuleIO::filename_output", "unknown basis in filename function"); + } - assert(ik_local>=0); + assert(ik_local >= 0); // mohan update 2025.05.07, if KPAR>1, "<" works - assert(ik2iktot.size() <= nkstot); - assert(nspin>0); - - // spin index - int is0 = -1; - // ik0 is the k-point index, starting from 0 - int ik0 = ik2iktot[ik_local]; - - if(nspin == 1) - { - is0 = 1; - } - else if(nspin == 2) - { - const int half_k = nkstot/2; - if(ik0 >= half_k) - { - is0 = 2; - ik0 -= half_k; - } - else - { - is0 = 1; - } - } - else if(nspin==4) - { - is0 = 12; - } - - // spin part - std::string spin_block; + assert(ik2iktot.size() <= nkstot); + assert(nspin > 0); + + // spin index + int is0 = -1; + // ik0 is the k-point index, starting from 0 + int ik0 = ik2iktot[ik_local]; + + if (nspin == 1) + { + is0 = 1; + } + else if (nspin == 2) + { + const int half_k = nkstot / 2; + if (ik0 >= half_k) + { + is0 = 2; + ik0 -= half_k; + } + else + { + is0 = 1; + } + } + else if (nspin == 4) + { + is0 = 12; + } + + // spin part + std::string spin_block; spin_block = "s" + std::to_string(is0); // k-point part std::string kpoint_block; - if(gamma_only) + if (gamma_only) { // do nothing; } else { - kpoint_block = "k" + std::to_string(ik0+1); + kpoint_block = "k" + std::to_string(ik0 + 1); } std::string istep_block @@ -101,11 +102,9 @@ std::string filename_output( suffix_block = ".txt"; } - std::string fn_out - = directory + property + spin_block + kpoint_block - + istep_block + "_" + basis + suffix_block; + std::string fn_out = directory + property + spin_block + kpoint_block + istep_block + "_" + basis + suffix_block; return fn_out; } -} +} // namespace ModuleIO diff --git a/source/module_io/get_pchg_lcao.cpp b/source/module_io/get_pchg_lcao.cpp index 6768ef7300..199280d66e 100644 --- a/source/module_io/get_pchg_lcao.cpp +++ b/source/module_io/get_pchg_lcao.cpp @@ -1,16 +1,16 @@ #include "get_pchg_lcao.h" -#include "module_base/blas_connector.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_common.h" -#include "module_base/scalapack_connector.h" #include "module_elecstate/module_charge/symmetry_rho.h" #include "module_elecstate/module_dm/cal_dm_psi.h" #include "module_elecstate/module_dm/density_matrix.h" #include "module_hamilt_lcao/module_gint/gint.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/cube_io.h" +#include "source_base/blas_connector.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_common.h" +#include "source_base/scalapack_connector.h" IState_Charge::IState_Charge(psi::Psi* psi_gamma_in, const Parallel_Orbitals* ParaV_in) : psi_gamma(psi_gamma_in), ParaV(ParaV_in) @@ -55,8 +55,7 @@ void IState_Charge::begin(Gint_Gamma& gg, { ModuleBase::TITLE("IState_Charge", "begin"); - std::cout << " Calculate |psi(i)|^2 for selected electronic states (gamma only)." - << std::endl; + std::cout << " Calculate |psi(i)|^2 for selected electronic states (gamma only)." << std::endl; // Determine the mode based on the input parameters int mode = 0; @@ -101,7 +100,7 @@ void IState_Charge::begin(Gint_Gamma& gg, ModuleBase::GlobalFunc::ZEROS(rho[is], rhopw_nrxx); } - //std::cout << " Performing grid integral over real space grid for band " << ib + 1 << "..." << std::endl; + // std::cout << " Performing grid integral over real space grid for band " << ib + 1 << "..." << std::endl; DM.init_DMR(GridD_in, ucell_in); DM.cal_DMR(); @@ -120,7 +119,6 @@ void IState_Charge::begin(Gint_Gamma& gg, ModuleBase::GlobalFunc::DCOPY(rho[is], rho_save[is].data(), rhopw_nrxx); // Copy data } - for (int is = 0; is < nspin; ++is) { // ssc should be inside the inner loop to reset the string stream each time @@ -135,7 +133,7 @@ void IState_Charge::begin(Gint_Gamma& gg, ModuleIO::write_vdata_palgrid(pgrid, rho_save[is].data(), is, nspin, 0, ssc.str(), ef_spin, ucell_in); } - //std::cout << " Complete!" << std::endl; + // std::cout << " Complete!" << std::endl; } } @@ -252,7 +250,7 @@ void IState_Charge::begin(Gint_k& gk, { // ssc should be inside the inner loop to reset the string stream each time std::stringstream ssc; - ssc << global_out_dir << "pchgs" << is + 1 << "k" << ik+1 << "i" << ib + 1 << ".cube"; + ssc << global_out_dir << "pchgs" << is + 1 << "k" << ik + 1 << "i" << ib + 1 << ".cube"; double ef_spin = ef_all_spin[is]; ModuleIO::write_vdata_palgrid(pgrid, diff --git a/source/module_io/get_pchg_lcao.h b/source/module_io/get_pchg_lcao.h index 99b4a38d7a..2594f4ab01 100644 --- a/source/module_io/get_pchg_lcao.h +++ b/source/module_io/get_pchg_lcao.h @@ -9,8 +9,8 @@ #include "module_hamilt_pw/hamilt_pwdft/parallel_grid.h" #include "module_psi/psi.h" -#include -#include +#include +#include #include #include @@ -141,8 +141,8 @@ class IState_Charge #endif std::vector bands_picked_; - psi::Psi* psi_gamma=nullptr; - psi::Psi>* psi_k=nullptr; + psi::Psi* psi_gamma = nullptr; + psi::Psi>* psi_k = nullptr; const Parallel_Orbitals* ParaV; }; #endif diff --git a/source/module_io/get_pchg_pw.h b/source/module_io/get_pchg_pw.h index d0bb6caa9e..d4312d6aa7 100644 --- a/source/module_io/get_pchg_pw.h +++ b/source/module_io/get_pchg_pw.h @@ -2,8 +2,6 @@ #define GET_PCHG_PW_H #include "cube_io.h" -#include "module_base/module_device/device.h" -#include "module_base/tool_quit.h" #include "module_basis/module_pw/pw_basis.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/unitcell.h" @@ -12,6 +10,8 @@ #include "module_elecstate/module_charge/symmetry_rho.h" #include "module_hamilt_pw/hamilt_pwdft/parallel_grid.h" #include "module_psi/psi.h" +#include "source_base/module_device/device.h" +#include "source_base/tool_quit.h" #include #include @@ -135,8 +135,7 @@ void get_pchg_pw(const std::vector& out_pchg, } std::stringstream ssc; - ssc << global_out_dir << "pchgs" << spin_index + 1 << "k" << k_number << "i" << ib + 1 - << ".cube"; + ssc << global_out_dir << "pchgs" << spin_index + 1 << "k" << k_number << "i" << ib + 1 << ".cube"; ModuleIO::write_vdata_palgrid(pgrid, rho_band[spin_index].data(), @@ -213,8 +212,8 @@ void get_pchg_pw(const std::vector& out_pchg, ModuleIO::write_vdata_palgrid(pgrid, rho_band[is].data(), is, nspin, 0, ssc.str(), 0.0, ucell); } } // else if_separate_k is false - } // end of ib loop over nbands - } // end of ip loop over kpar + } // end of ib loop over nbands + } // end of ip loop over kpar } // get_pchg_pw } // namespace ModuleIO diff --git a/source/module_io/get_wf_lcao.cpp b/source/module_io/get_wf_lcao.cpp index 5403d7c019..1935df45aa 100644 --- a/source/module_io/get_wf_lcao.cpp +++ b/source/module_io/get_wf_lcao.cpp @@ -1,14 +1,14 @@ #include "get_wf_lcao.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/memory.h" -#include "module_base/timer.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/cube_io.h" #include "module_io/write_wfc_pw.h" #include "module_io/write_wfc_r.h" #include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" +#include "source_base/timer.h" Get_wf_lcao::Get_wf_lcao(const elecstate::ElecState* pes) { @@ -221,10 +221,21 @@ void Get_wf_lcao::begin(const UnitCell& ucell, } } - ModuleIO::write_wfc_pw(GlobalV::KPAR, GlobalV::MY_POOL, GlobalV::MY_RANK, - nbands, nspin, PARAM.globalv.npol, - GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, - out_wfc_pw, PARAM.inp.ecutwfc, global_out_dir,psi_g, kv, pw_wfc, GlobalV::ofs_running); + ModuleIO::write_wfc_pw(GlobalV::KPAR, + GlobalV::MY_POOL, + GlobalV::MY_RANK, + nbands, + nspin, + PARAM.globalv.npol, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + out_wfc_pw, + PARAM.inp.ecutwfc, + global_out_dir, + psi_g, + kv, + pw_wfc, + GlobalV::ofs_running); for (int is = 0; is < nspin; ++is) { @@ -372,10 +383,21 @@ void Get_wf_lcao::begin(const UnitCell& ucell, } } - ModuleIO::write_wfc_pw(GlobalV::KPAR, GlobalV::MY_POOL, GlobalV::MY_RANK, - nbands, nspin, PARAM.globalv.npol, - GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, - out_wf, PARAM.inp.ecutwfc, global_out_dir,psi_g, kv, pw_wfc, GlobalV::ofs_running); + ModuleIO::write_wfc_pw(GlobalV::KPAR, + GlobalV::MY_POOL, + GlobalV::MY_RANK, + nbands, + nspin, + PARAM.globalv.npol, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + out_wf, + PARAM.inp.ecutwfc, + global_out_dir, + psi_g, + kv, + pw_wfc, + GlobalV::ofs_running); std::cout << " Outputting real-space wave functions in cube format..." << std::endl; diff --git a/source/module_io/get_wf_pw.h b/source/module_io/get_wf_pw.h index edeb78fccf..7847193348 100644 --- a/source/module_io/get_wf_pw.h +++ b/source/module_io/get_wf_pw.h @@ -2,8 +2,6 @@ #define GET_WF_PW_H #include "cube_io.h" -#include "module_base/module_device/device.h" -#include "module_base/tool_quit.h" #include "module_basis/module_pw/pw_basis.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/unitcell.h" @@ -11,6 +9,8 @@ #include "module_elecstate/module_charge/symmetry_rho.h" #include "module_hamilt_pw/hamilt_pwdft/parallel_grid.h" #include "module_psi/psi.h" +#include "source_base/module_device/device.h" +#include "source_base/tool_quit.h" #include #include diff --git a/source/module_io/input_conv.cpp b/source/module_io/input_conv.cpp index 1ccaaf8f2b..2f16277b6e 100644 --- a/source/module_io/input_conv.cpp +++ b/source/module_io/input_conv.cpp @@ -1,7 +1,5 @@ #include "module_io/input_conv.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" #include "module_cell/module_symmetry/symmetry.h" #include "module_cell/unitcell.h" #include "module_elecstate/occupy.h" @@ -11,6 +9,8 @@ #include "module_parameter/parameter.h" #include "module_relax/ions_move_basic.h" #include "module_relax/lattice_change_basic.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" #include @@ -34,17 +34,18 @@ #include "source_hsolver/diago_elpa_native.h" #endif -#include "module_base/module_device/device.h" -#include "module_base/timer.h" #include "module_elecstate/elecstate_lcao.h" #include "module_elecstate/module_pot/efield.h" #include "module_elecstate/module_pot/gatefield.h" +#include "module_md/md_func.h" +#include "source_base/module_device/device.h" +#include "source_base/timer.h" #include "source_hsolver/hsolver_lcao.h" #include "source_hsolver/hsolver_pw.h" -#include "module_md/md_func.h" #ifdef __LCAO -std::vector Input_Conv::convert_units(std::string params, double c) { +std::vector Input_Conv::convert_units(std::string params, double c) +{ std::vector params_ori; std::vector params_out; parse_expression(params, params_ori); @@ -60,13 +61,17 @@ void Input_Conv::read_td_efield() if (PARAM.inp.esolver_type == "tddft" && elecstate::H_TDDFT_pw::stype == 1) { TD_Velocity::tddft_velocity = true; - } else { + } + else + { TD_Velocity::tddft_velocity = false; } if (PARAM.inp.out_mat_hs2 == 1) { TD_Velocity::out_mat_R = true; - } else { + } + else + { TD_Velocity::out_mat_R = false; } parse_expression(PARAM.inp.td_ttype, elecstate::H_TDDFT_pw::ttype); @@ -94,12 +99,15 @@ void Input_Conv::read_td_efield() elecstate::H_TDDFT_pw::gauss_amp = convert_units(PARAM.inp.td_gauss_amp, ModuleBase::BOHR_TO_A / ModuleBase::Ry_to_eV); // Ry/bohr // init ncut for velocity gauge integral - for (auto omega: elecstate::H_TDDFT_pw::gauss_omega) { - int ncut - = int(100.0 * omega * elecstate::H_TDDFT_pw::dt / ModuleBase::PI); - if (ncut % 2 == 0) { + for (auto omega: elecstate::H_TDDFT_pw::gauss_omega) + { + int ncut = int(100.0 * omega * elecstate::H_TDDFT_pw::dt / ModuleBase::PI); + if (ncut % 2 == 0) + { ncut += 2; - } else { + } + else + { ncut += 1; } if (elecstate::H_TDDFT_pw::stype == 0) @@ -116,12 +124,15 @@ void Input_Conv::read_td_efield() elecstate::H_TDDFT_pw::trape_amp = convert_units(PARAM.inp.td_trape_amp, ModuleBase::BOHR_TO_A / ModuleBase::Ry_to_eV); // Ry/bohr // init ncut for velocity gauge integral - for (auto omega: elecstate::H_TDDFT_pw::trape_omega) { - int ncut - = int(100.0 * omega * elecstate::H_TDDFT_pw::dt / ModuleBase::PI); - if (ncut % 2 == 0) { + for (auto omega: elecstate::H_TDDFT_pw::trape_omega) + { + int ncut = int(100.0 * omega * elecstate::H_TDDFT_pw::dt / ModuleBase::PI); + if (ncut % 2 == 0) + { ncut += 2; - } else { + } + else + { ncut += 1; } if (elecstate::H_TDDFT_pw::stype == 0) @@ -138,12 +149,15 @@ void Input_Conv::read_td_efield() elecstate::H_TDDFT_pw::trigo_amp = convert_units(PARAM.inp.td_trigo_amp, ModuleBase::BOHR_TO_A / ModuleBase::Ry_to_eV); // Ry/bohr // init ncut for velocity gauge integral - for (auto omega: elecstate::H_TDDFT_pw::trigo_omega1) { - int ncut - = int(100.0 * omega * elecstate::H_TDDFT_pw::dt / ModuleBase::PI); - if (ncut % 2 == 0) { + for (auto omega: elecstate::H_TDDFT_pw::trigo_omega1) + { + int ncut = int(100.0 * omega * elecstate::H_TDDFT_pw::dt / ModuleBase::PI); + if (ncut % 2 == 0) + { ncut += 2; - } else { + } + else + { ncut += 1; } if (elecstate::H_TDDFT_pw::stype == 0) @@ -171,10 +185,7 @@ void Input_Conv::Convert() ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "orbital_dir", PARAM.inp.orbital_dir); // GlobalV::global_pseudo_type = PARAM.inp.pseudo_type; - GlobalV::KPAR = PARAM.inp.kpar; - - #ifdef __LCAO Force_Stress_LCAO::force_invalid_threshold_ev = PARAM.inp.force_thr_ev2; @@ -191,7 +202,6 @@ void Input_Conv::Convert() Ions_Move_Basic::relax_method = PARAM.inp.relax_method; Lattice_Change_Basic::fixed_axes = PARAM.inp.fixed_axes; - Ions_Move_CG::RELAX_CG_THR = PARAM.inp.relax_cg_thr; // pengfei add 2013-09-09 ModuleSymmetry::Symmetry::symm_flag = std::stoi(PARAM.inp.symmetry); @@ -205,7 +215,6 @@ void Input_Conv::Convert() // diagonalization (5/5) //---------------------------------------------------------- - //---------------------------------------------------------- // iteration (1/3) //---------------------------------------------------------- @@ -254,8 +263,6 @@ void Input_Conv::Convert() read_td_efield(); #endif // __LCAO - - //---------------------------------------------------------- // about restart, // Peize Lin add 2020-04-04 //---------------------------------------------------------- @@ -268,21 +275,20 @@ void Input_Conv::Convert() tolower); GlobalC::restart.folder = PARAM.globalv.global_readin_dir + "restart/"; ModuleBase::GlobalFunc::MAKE_DIR(GlobalC::restart.folder); - if (dft_functional_lower == "hf" || dft_functional_lower == "pbe0" - || dft_functional_lower == "hse" - || dft_functional_lower == "opt_orb" - || dft_functional_lower == "scan0") { + if (dft_functional_lower == "hf" || dft_functional_lower == "pbe0" || dft_functional_lower == "hse" + || dft_functional_lower == "opt_orb" || dft_functional_lower == "scan0") + { GlobalC::restart.info_save.save_charge = true; GlobalC::restart.info_save.save_H = true; } - else if ( dft_functional_lower == "muller" || dft_functional_lower == "power" - || dft_functional_lower == "wp22" - || dft_functional_lower == "cwp22" ) // added by jghan, 2024-07-07 + else if (dft_functional_lower == "muller" || dft_functional_lower == "power" || dft_functional_lower == "wp22" + || dft_functional_lower == "cwp22") // added by jghan, 2024-07-07 { GlobalC::restart.info_save.save_charge = true; GlobalC::restart.info_save.save_H = true; } - else { + else + { GlobalC::restart.info_save.save_charge = true; } } @@ -294,69 +300,57 @@ void Input_Conv::Convert() dft_functional_lower.begin(), tolower); GlobalC::restart.folder = PARAM.globalv.global_readin_dir + "restart/"; - if (dft_functional_lower == "hf" || dft_functional_lower == "pbe0" - || dft_functional_lower == "hse" - || dft_functional_lower == "opt_orb" - || dft_functional_lower == "scan0") { + if (dft_functional_lower == "hf" || dft_functional_lower == "pbe0" || dft_functional_lower == "hse" + || dft_functional_lower == "opt_orb" || dft_functional_lower == "scan0") + { GlobalC::restart.info_load.load_charge = true; GlobalC::restart.info_load.load_H = true; } - else if ( dft_functional_lower == "muller" || dft_functional_lower == "power" - || dft_functional_lower == "wp22" - || dft_functional_lower == "cwp22" ) // added by jghan, 2024-07-07 + else if (dft_functional_lower == "muller" || dft_functional_lower == "power" || dft_functional_lower == "wp22" + || dft_functional_lower == "cwp22") // added by jghan, 2024-07-07 { GlobalC::restart.info_load.load_charge = true; GlobalC::restart.info_load.load_H = true; - } - else { + } + else + { GlobalC::restart.info_load.load_charge = true; } } -//---------------------------------------------------------- -// about exx, Peize Lin add 2018-06-20 -//---------------------------------------------------------- + //---------------------------------------------------------- + // about exx, Peize Lin add 2018-06-20 + //---------------------------------------------------------- std::string dft_functional_lower = PARAM.inp.dft_functional; std::transform(PARAM.inp.dft_functional.begin(), PARAM.inp.dft_functional.end(), dft_functional_lower.begin(), tolower); - if (dft_functional_lower == "hf" - || dft_functional_lower == "pbe0" || dft_functional_lower == "b3lyp" - || dft_functional_lower == "scan0" - || dft_functional_lower == "muller" || dft_functional_lower == "power") + if (dft_functional_lower == "hf" || dft_functional_lower == "pbe0" || dft_functional_lower == "b3lyp" + || dft_functional_lower == "scan0" || dft_functional_lower == "muller" || dft_functional_lower == "power") { GlobalC::exx_info.info_global.cal_exx = true; GlobalC::exx_info.info_global.ccp_type = Conv_Coulomb_Pot_K::Ccp_Type::Hf; - GlobalC::exx_info.info_global.coulomb_param[Conv_Coulomb_Pot_K::Coulomb_Type::Fock] = {{ - {"alpha", "1"}, - {"Rcut_type", "spencer"}, - {"lambda", std::to_string(PARAM.inp.exx_lambda)} }}; + GlobalC::exx_info.info_global.coulomb_param[Conv_Coulomb_Pot_K::Coulomb_Type::Fock] + = {{{"alpha", "1"}, {"Rcut_type", "spencer"}, {"lambda", std::to_string(PARAM.inp.exx_lambda)}}}; } - // use the error function erf(w|r-r'|), exx just has the short-range part - else if (dft_functional_lower == "hse" - || dft_functional_lower == "cwp22") + // use the error function erf(w|r-r'|), exx just has the short-range part + else if (dft_functional_lower == "hse" || dft_functional_lower == "cwp22") { GlobalC::exx_info.info_global.cal_exx = true; GlobalC::exx_info.info_global.ccp_type = Conv_Coulomb_Pot_K::Ccp_Type::Erfc; - GlobalC::exx_info.info_global.coulomb_param[Conv_Coulomb_Pot_K::Coulomb_Type::Erfc] = {{ - {"alpha", "1"}, - {"omega", std::to_string(PARAM.inp.exx_hse_omega)}, - {"Rcut_type", "limits"} }}; + GlobalC::exx_info.info_global.coulomb_param[Conv_Coulomb_Pot_K::Coulomb_Type::Erfc] + = {{{"alpha", "1"}, {"omega", std::to_string(PARAM.inp.exx_hse_omega)}, {"Rcut_type", "limits"}}}; } - // use the error function erf(w|r-r'|), exx just has the long-range part - else if ( dft_functional_lower == "wp22" ) + // use the error function erf(w|r-r'|), exx just has the long-range part + else if (dft_functional_lower == "wp22") { GlobalC::exx_info.info_global.cal_exx = true; GlobalC::exx_info.info_global.ccp_type = Conv_Coulomb_Pot_K::Ccp_Type::Erf; - GlobalC::exx_info.info_global.coulomb_param[Conv_Coulomb_Pot_K::Coulomb_Type::Fock] = {{ - {"alpha", "1"}, - {"Rcut_type", "spencer"}, - {"lambda", std::to_string(PARAM.inp.exx_lambda)} }}; - GlobalC::exx_info.info_global.coulomb_param[Conv_Coulomb_Pot_K::Coulomb_Type::Erfc] = {{ - {"alpha", "-1"}, - {"omega", std::to_string(PARAM.inp.exx_hse_omega)}, - {"Rcut_type", "limits"} }}; + GlobalC::exx_info.info_global.coulomb_param[Conv_Coulomb_Pot_K::Coulomb_Type::Fock] + = {{{"alpha", "1"}, {"Rcut_type", "spencer"}, {"lambda", std::to_string(PARAM.inp.exx_lambda)}}}; + GlobalC::exx_info.info_global.coulomb_param[Conv_Coulomb_Pot_K::Coulomb_Type::Erfc] + = {{{"alpha", "-1"}, {"omega", std::to_string(PARAM.inp.exx_hse_omega)}, {"Rcut_type", "limits"}}}; } #ifdef __EXX else if (dft_functional_lower == "opt_orb") @@ -366,16 +360,15 @@ void Input_Conv::Convert() } #endif else - { + { GlobalC::exx_info.info_global.cal_exx = false; } if (GlobalC::exx_info.info_global.cal_exx #ifdef __EXX - || Exx_Abfs::Jle::generate_matrix - || PARAM.inp.rpa + || Exx_Abfs::Jle::generate_matrix || PARAM.inp.rpa #endif - ) + ) { // EXX case, convert all EXX related variables GlobalC::exx_info.info_global.hybrid_alpha = std::stod(PARAM.inp.exx_hybrid_alpha); @@ -408,7 +401,8 @@ void Input_Conv::Convert() #endif // EXX does not support symmetry for nspin==4 - if (PARAM.inp.calculation != "nscf" && PARAM.inp.symmetry == "1" && PARAM.inp.nspin == 4 && PARAM.inp.basis_type == "lcao") + if (PARAM.inp.calculation != "nscf" && PARAM.inp.symmetry == "1" && PARAM.inp.nspin == 4 + && PARAM.inp.basis_type == "lcao") { ModuleSymmetry::Symmetry::symm_flag = -1; } @@ -485,9 +479,10 @@ void Input_Conv::Convert() if (PARAM.globalv.gamma_only_local) { elecstate::ElecStateLCAO::need_psi_grid = false; - } else if (!PARAM.globalv.gamma_only_local) { - elecstate::ElecStateLCAO>::need_psi_grid - = false; + } + else if (!PARAM.globalv.gamma_only_local) + { + elecstate::ElecStateLCAO>::need_psi_grid = false; } } if (PARAM.inp.calculation == "test_neighbour" && GlobalV::NPROC > 1) @@ -508,9 +503,9 @@ void Input_Conv::Convert() // mohan add 2021-02-16 berryphase::berry_phase_flag = PARAM.inp.berry_phase; -//----------------------------------------------- -// caoyu add for DeePKS -//----------------------------------------------- + //----------------------------------------------- + // caoyu add for DeePKS + //----------------------------------------------- //----------------------------------------------- // sunml add for implicit solvation model //----------------------------------------------- diff --git a/source/module_io/input_conv.h b/source/module_io/input_conv.h index bbb51df101..621b770b4d 100644 --- a/source/module_io/input_conv.h +++ b/source/module_io/input_conv.h @@ -5,18 +5,18 @@ #ifndef INPUT_CONVERT_H #define INPUT_CONVERT_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include +#include +#include #include #include #include #include -#include -#include #include #include -#include namespace Input_Conv { @@ -105,7 +105,7 @@ void parse_expression(const std::string& fn, std::vector& vec) int num = stoi(sub_str.substr(0, pos)); assert(num >= 0); T occ = stof(sub_str.substr(pos + 1, sub_str.size())); - + // Add the value to the vector `num` times for (size_t k = 0; k != num; k++) { diff --git a/source/module_io/io_dmk.cpp b/source/module_io/io_dmk.cpp index 69bbd7a4b3..20894e69ae 100644 --- a/source/module_io/io_dmk.cpp +++ b/source/module_io/io_dmk.cpp @@ -1,9 +1,9 @@ #include "module_io/io_dmk.h" -#include "module_base/parallel_common.h" -#include "module_base/scalapack_connector.h" -#include "module_base/timer.h" #include "module_parameter/parameter.h" +#include "source_base/parallel_common.h" +#include "source_base/scalapack_connector.h" +#include "source_base/timer.h" /* The format of the DMK file is as follows: @@ -64,8 +64,7 @@ std::string ModuleIO::dmk_gen_fname(const bool gamma_only, const int ispin, cons else { // mohan update 2025-05-25, the index of 'ik' should be the correct 'ik' without spin - return std::string("dm") + "s" + std::to_string(ispin + 1) - + "k" + std::to_string(ik + 1) + "_nao.txt"; + return std::string("dm") + "s" + std::to_string(ispin + 1) + "k" + std::to_string(ik + 1) + "_nao.txt"; } } @@ -140,8 +139,7 @@ void ModuleIO::dmk_readData(std::ifstream& ifs, std::complex& data) } else { - ModuleBase::WARNING_QUIT("ModuleIO::dmk_readData", - "Invalid complex number format: " + complex_str); + ModuleBase::WARNING_QUIT("ModuleIO::dmk_readData", "Invalid complex number format: " + complex_str); } } @@ -151,7 +149,7 @@ bool ModuleIO::read_dmk(const int nspin, const Parallel_2D& pv, const std::string& dmk_dir, std::vector>& dmk, - std::ofstream &ofs_running) + std::ofstream& ofs_running) { ModuleBase::TITLE("ModuleIO", "read_dmk"); ModuleBase::timer::tick("ModuleIO", "read_dmk"); @@ -190,15 +188,15 @@ bool ModuleIO::read_dmk(const int nspin, if (!ifs) { - ofs_running << " Cannot find density matrix file " << fn << " for k-point " << ik+1 << std::endl; + ofs_running << " Cannot find density matrix file " << fn << " for k-point " << ik + 1 << std::endl; ModuleBase::WARNING("ModuleIO::read_dmk", "Can't open density matrix (k) file < " + fn + " >."); read_success = false; break; } - else - { - ofs_running << " Read density matrix file " << fn << " for k-point " << ik+1 << std::endl; - } + else + { + ofs_running << " Read density matrix file " << fn << " for k-point " << ik + 1 << std::endl; + } // read the UnitCell dmk_read_ucell(ifs); @@ -334,22 +332,20 @@ void ModuleIO::write_dmk(const std::vector>& dmk, std::ofstream ofs(fn.c_str()); if (!ofs) - { - ModuleBase::WARNING("ModuleIO::write_dmk", "Can't create DENSITY MATRIX File < " + fn + " >."); - continue; - } - else - { -// std::cout << " Write the density matrix to file " << fn << std::endl; - } + { + ModuleBase::WARNING("ModuleIO::write_dmk", "Can't create DENSITY MATRIX File < " + fn + " >."); + continue; + } + else + { + // std::cout << " Write the density matrix to file " << fn << std::endl; + } // write the UnitCell information dmk_write_ucell(ofs, ucell); - ofs << "\n " << nspin; // nspin - ofs << "\n " << std::fixed << std::setprecision(5) << efs[ispin] - << " (fermi energy)"; + ofs << "\n " << std::fixed << std::setprecision(5) << efs[ispin] << " (fermi energy)"; ofs << "\n " << nlocal << " " << nlocal << std::endl; ofs << std::setprecision(precision); @@ -385,15 +381,15 @@ template bool ModuleIO::read_dmk(const int nspin, const int nk, const Parallel_2D& pv, const std::string& dmk_dir, - std::vector>& dmk, - std::ofstream &ofs); + std::vector>& dmk, + std::ofstream& ofs); template bool ModuleIO::read_dmk>(const int nspin, const int nk, const Parallel_2D& pv, const std::string& dmk_dir, - std::vector>>& dmk, - std::ofstream &ofs); + std::vector>>& dmk, + std::ofstream& ofs); template void ModuleIO::write_dmk(const std::vector>& dmk, const int precision, diff --git a/source/module_io/io_dmk.h b/source/module_io/io_dmk.h index df24e9c587..6f8d993999 100644 --- a/source/module_io/io_dmk.h +++ b/source/module_io/io_dmk.h @@ -1,13 +1,14 @@ #ifndef DM_IO_H #define DM_IO_H -#include "module_base/parallel_2d.h" #include "module_cell/unitcell.h" +#include "source_base/parallel_2d.h" #include #include -namespace ModuleIO { +namespace ModuleIO +{ /** * @brief Generates the filename for the DMK file based on the given parameters. @@ -61,9 +62,9 @@ template bool read_dmk(const int nspin, const int nk, const Parallel_2D& pv, - const std::string& dmk_dir, - std::vector>& dmk, - std::ofstream &ofs_running); + const std::string& dmk_dir, + std::vector>& dmk, + std::ofstream& ofs_running); /** * @brief Writes the DMK data to a file. diff --git a/source/module_io/io_npz.cpp b/source/module_io/io_npz.cpp index 0732445554..bcd7659f59 100644 --- a/source/module_io/io_npz.cpp +++ b/source/module_io/io_npz.cpp @@ -1,13 +1,14 @@ -//Deals with io of dm(r)/h(r) in npz format +// Deals with io of dm(r)/h(r) in npz format #include "io_npz.h" -#include "module_base/element_name.h" #include "module_parameter/parameter.h" +#include "source_base/element_name.h" #ifdef __MPI -#include #include "module_hamilt_lcao/module_hcontainer/hcontainer_funcs.h" + +#include #endif #ifdef __USECNPY @@ -28,21 +29,21 @@ void read_mat_npz(const Parallel_Orbitals* paraV, #ifdef __MPI - if(GlobalV::NPROC!=1) + if (GlobalV::NPROC != 1) { std::cout << "read_mat_npz is not supported in NPI mode yet" << std::endl; return; } - if(GlobalV::MY_RANK == 0) + if (GlobalV::MY_RANK == 0) { - //HR_serial = new hamilt::HContainer(&serialV); + // HR_serial = new hamilt::HContainer(&serialV); cnpy::npz_t my_npz = cnpy::npz_load(zipname); std::vector fnames; - //check consistency - // 1. lattice vectors + // check consistency + // 1. lattice vectors double* lattice_vector = my_npz["lattice_vectors"].data(); assert(std::abs(lattice_vector[0] - ucell.lat0 * ucell.a1.x) < 1e-6); assert(std::abs(lattice_vector[1] - ucell.lat0 * ucell.a1.y) < 1e-6); @@ -61,7 +62,7 @@ void read_mat_npz(const Parallel_Orbitals* paraV, const int it = ucell.iat2it[iat]; const int ia = ucell.iat2ia[iat]; - //get atomic number (copied from write_vdata_palgrid.cpp) + // get atomic number (copied from write_vdata_palgrid.cpp) std::string element = ""; element = ucell.atoms[it].label; std::string::iterator temp = element.begin(); @@ -72,22 +73,22 @@ void read_mat_npz(const Parallel_Orbitals* paraV, temp = element.erase(temp); } else - { - temp++; - } + { + temp++; + } } int z = 0; - for(int j=0; j!=ModuleBase::element_name.size(); j++) + for (int j = 0; j != ModuleBase::element_name.size(); j++) { if (element == ModuleBase::element_name[j]) { - z=j+1; + z = j + 1; break; } } - assert(atom_info[iat*5] == it); - assert(atom_info[iat*5+1] == z); + assert(atom_info[iat * 5] == it); + assert(atom_info[iat * 5 + 1] == z); // I will not be checking the coordinates for now in case the direct coordinates provided in the // npz file do not fall in the range [0,1); if a protocol is to be set in the future such that // this could be guaranteed, then the following lines could be uncommented @@ -99,35 +100,37 @@ void read_mat_npz(const Parallel_Orbitals* paraV, // 3. orbitals for (int it = 0; it < ucell.ntype; ++it) { - std::string filename="orbital_info_"+std::to_string(it); + std::string filename = "orbital_info_" + std::to_string(it); double* orbital_info = my_npz[filename].data(); for (int iw = 0; iw < ucell.atoms[it].nw; ++iw) { assert(orbital_info[iw * 3] == ucell.atoms[it].iw2n[iw]); assert(orbital_info[iw * 3 + 1] == ucell.atoms[it].iw2l[iw]); const int im = ucell.atoms[it].iw2m[iw]; - const int m = (im % 2 == 0) ? -im/2 : (im+1)/2; - assert(orbital_info[iw*3+2] == m); + const int m = (im % 2 == 0) ? -im / 2 : (im + 1) / 2; + assert(orbital_info[iw * 3 + 2] == m); } } - //starts reading the matrix - for(auto const& imap: my_npz) + // starts reading the matrix + for (auto const& imap: my_npz) fnames.push_back(imap.first); - for(int i = 0; i < fnames.size(); i ++) + for (int i = 0; i < fnames.size(); i++) { - if(fnames[i].find("mat_") == std::string::npos) continue; + if (fnames[i].find("mat_") == std::string::npos) + continue; std::vector tokens; std::string token; std::stringstream fname_tmp(fnames[i]); - char delimiter = '_'; - - while (std::getline(fname_tmp, token, delimiter)) { - tokens.push_back(token); + char delimiter = '_'; + + while (std::getline(fname_tmp, token, delimiter)) + { + tokens.push_back(token); } - + cnpy::NpyArray arr = my_npz[fnames[i]]; int iat1 = std::stoi(tokens[1]); @@ -142,37 +145,39 @@ void read_mat_npz(const Parallel_Orbitals* paraV, assert(arr.shape[0] == ucell.atoms[it1].nw); assert(arr.shape[1] == ucell.atoms[it2].nw); - //hamilt::AtomPair tmp(iat1,iat2,Rx,Ry,Rz,&serialV); - //HR_serial->insert_pair(tmp); - hamilt::AtomPair tmp(iat1,iat2,Rx,Ry,Rz,paraV); + // hamilt::AtomPair tmp(iat1,iat2,Rx,Ry,Rz,&serialV); + // HR_serial->insert_pair(tmp); + hamilt::AtomPair tmp(iat1, iat2, Rx, Ry, Rz, paraV); hR.insert_pair(tmp); // use symmetry : H_{mu,nu,R} = H_{nu,mu,-R} - if(Rx!=0 || Ry!=0 || Rz!=0) + if (Rx != 0 || Ry != 0 || Rz != 0) { - //hamilt::AtomPair tmp(iat2,iat1,-Rx,-Ry,-Rz,&serialV); - //HR_serial->insert_pair(tmp); - hamilt::AtomPair tmp(iat2,iat1,-Rx,-Ry,-Rz,paraV); + // hamilt::AtomPair tmp(iat2,iat1,-Rx,-Ry,-Rz,&serialV); + // HR_serial->insert_pair(tmp); + hamilt::AtomPair tmp(iat2, iat1, -Rx, -Ry, -Rz, paraV); hR.insert_pair(tmp); } } - //HR_serial->allocate(); + // HR_serial->allocate(); hR.allocate(); - for(int i = 0; i < fnames.size(); i ++) + for (int i = 0; i < fnames.size(); i++) { - if(fnames[i].find("mat_") == std::string::npos) continue; + if (fnames[i].find("mat_") == std::string::npos) + continue; std::vector tokens; std::string token; std::stringstream fname_tmp(fnames[i]); - char delimiter = '_'; - - while (std::getline(fname_tmp, token, delimiter)) { - tokens.push_back(token); + char delimiter = '_'; + + while (std::getline(fname_tmp, token, delimiter)) + { + tokens.push_back(token); } - + cnpy::NpyArray arr = my_npz[fnames[i]]; int iat1 = std::stoi(tokens[1]); @@ -188,133 +193,136 @@ void read_mat_npz(const Parallel_Orbitals* paraV, assert(arr.shape[1] == ucell.atoms[it2].nw); double* submat_read = arr.data(); - - //hamilt::BaseMatrix* submat = HR_serial->find_matrix(iat1,iat2,Rx,Ry,Rz); - hamilt::BaseMatrix* submat = hR.find_matrix(iat1,iat2,Rx,Ry,Rz); - for(int i = 0; i < arr.shape[0]; i ++) + // hamilt::BaseMatrix* submat = HR_serial->find_matrix(iat1,iat2,Rx,Ry,Rz); + hamilt::BaseMatrix* submat = hR.find_matrix(iat1, iat2, Rx, Ry, Rz); + + for (int i = 0; i < arr.shape[0]; i++) { - for(int j = 0; j < arr.shape[1]; j ++) + for (int j = 0; j < arr.shape[1]; j++) { - submat->add_element(i,j,submat_read[i*arr.shape[1]+j]); + submat->add_element(i, j, submat_read[i * arr.shape[1] + j]); } } - + // use symmetry : H_{mu,nu,R} = H_{nu,mu,-R} - if(Rx!=0 || Ry!=0 || Rz!=0) + if (Rx != 0 || Ry != 0 || Rz != 0) { - //hamilt::BaseMatrix* submat = HR_serial->find_matrix(iat2,iat1,-Rx,-Ry,-Rz); - hamilt::BaseMatrix* submat = hR.find_matrix(iat2,iat1,-Rx,-Ry,-Rz); - for(int i = 0; i < arr.shape[0]; i ++) + // hamilt::BaseMatrix* submat = HR_serial->find_matrix(iat2,iat1,-Rx,-Ry,-Rz); + hamilt::BaseMatrix* submat = hR.find_matrix(iat2, iat1, -Rx, -Ry, -Rz); + for (int i = 0; i < arr.shape[0]; i++) { - for(int j = 0; j < arr.shape[1]; j ++) + for (int j = 0; j < arr.shape[1]; j++) { - submat->add_element(j,i,submat_read[i*arr.shape[1]+j]); + submat->add_element(j, i, submat_read[i * arr.shape[1] + j]); } } } } - } #else - cnpy::npz_t my_npz = cnpy::npz_load(zipname); - std::vector fnames; + cnpy::npz_t my_npz = cnpy::npz_load(zipname); + std::vector fnames; - for(auto const& imap: my_npz) - fnames.push_back(imap.first); + for (auto const& imap: my_npz) + fnames.push_back(imap.first); + + for (int i = 0; i < fnames.size(); i++) + { + if (fnames[i].find("mat_") == std::string::npos) + continue; - for(int i = 0; i < fnames.size(); i ++) + std::vector tokens; + std::string token; + std::stringstream fname_tmp(fnames[i]); + char delimiter = '_'; + + while (std::getline(fname_tmp, token, delimiter)) { - if(fnames[i].find("mat_") == std::string::npos) continue; + tokens.push_back(token); + } - std::vector tokens; - std::string token; - std::stringstream fname_tmp(fnames[i]); - char delimiter = '_'; - - while (std::getline(fname_tmp, token, delimiter)) { - tokens.push_back(token); - } - - cnpy::NpyArray arr = my_npz[fnames[i]]; + cnpy::NpyArray arr = my_npz[fnames[i]]; - int iat1 = std::stoi(tokens[1]); - int iat2 = std::stoi(tokens[2]); - int Rx = std::stoi(tokens[3]); - int Ry = std::stoi(tokens[4]); - int Rz = std::stoi(tokens[5]); + int iat1 = std::stoi(tokens[1]); + int iat2 = std::stoi(tokens[2]); + int Rx = std::stoi(tokens[3]); + int Ry = std::stoi(tokens[4]); + int Rz = std::stoi(tokens[5]); - int it1 = ucell.iat2it[iat1]; - int it2 = ucell.iat2it[iat2]; + int it1 = ucell.iat2it[iat1]; + int it2 = ucell.iat2it[iat2]; - assert(arr.shape[0] == ucell.atoms[it1].nw); - assert(arr.shape[1] == ucell.atoms[it2].nw); + assert(arr.shape[0] == ucell.atoms[it1].nw); + assert(arr.shape[1] == ucell.atoms[it2].nw); - hamilt::AtomPair tmp(iat1,iat2,Rx,Ry,Rz,paraV); + hamilt::AtomPair tmp(iat1, iat2, Rx, Ry, Rz, paraV); + hR->insert_pair(tmp); + // use symmetry : H_{mu,nu,R} = H_{nu,mu,-R} + if (Rx != 0 || Ry != 0 || Rz != 0) + { + hamilt::AtomPair tmp(iat2, iat1, -Rx, -Ry, -Rz, paraV); hR->insert_pair(tmp); - // use symmetry : H_{mu,nu,R} = H_{nu,mu,-R} - if(Rx!=0 || Ry!=0 || Rz!=0) - { - hamilt::AtomPair tmp(iat2,iat1,-Rx,-Ry,-Rz,paraV); - hR->insert_pair(tmp); - } } + } + + hR->allocate(); + + for (int i = 0; i < fnames.size(); i++) + { + if (fnames[i].find("mat_") == std::string::npos) + continue; - hR->allocate(); + std::vector tokens; + std::string token; + std::stringstream fname_tmp(fnames[i]); + char delimiter = '_'; - for(int i = 0; i < fnames.size(); i ++) + while (std::getline(fname_tmp, token, delimiter)) { - if(fnames[i].find("mat_") == std::string::npos) continue; + tokens.push_back(token); + } - std::vector tokens; - std::string token; - std::stringstream fname_tmp(fnames[i]); - char delimiter = '_'; - - while (std::getline(fname_tmp, token, delimiter)) { - tokens.push_back(token); - } - - cnpy::NpyArray arr = my_npz[fnames[i]]; + cnpy::NpyArray arr = my_npz[fnames[i]]; - int iat1 = std::stoi(tokens[1]); - int iat2 = std::stoi(tokens[2]); - int Rx = std::stoi(tokens[3]); - int Ry = std::stoi(tokens[4]); - int Rz = std::stoi(tokens[5]); + int iat1 = std::stoi(tokens[1]); + int iat2 = std::stoi(tokens[2]); + int Rx = std::stoi(tokens[3]); + int Ry = std::stoi(tokens[4]); + int Rz = std::stoi(tokens[5]); - int it1 = ucell.iat2it[iat1]; - int it2 = ucell.iat2it[iat2]; + int it1 = ucell.iat2it[iat1]; + int it2 = ucell.iat2it[iat2]; - assert(arr.shape[0] == ucell.atoms[it1].nw); - assert(arr.shape[1] == ucell.atoms[it2].nw); + assert(arr.shape[0] == ucell.atoms[it1].nw); + assert(arr.shape[1] == ucell.atoms[it2].nw); - double* submat_read = arr.data(); - - hamilt::BaseMatrix* submat = hR->find_matrix(iat1,iat2,Rx,Ry,Rz); + double* submat_read = arr.data(); - for(int i = 0; i < arr.shape[0]; i ++) + hamilt::BaseMatrix* submat = hR->find_matrix(iat1, iat2, Rx, Ry, Rz); + + for (int i = 0; i < arr.shape[0]; i++) + { + for (int j = 0; j < arr.shape[1]; j++) { - for(int j = 0; j < arr.shape[1]; j ++) - { - submat->add_element(i,j,submat_read[i*arr.shape[1]+j]); - } + submat->add_element(i, j, submat_read[i * arr.shape[1] + j]); } - - // use symmetry : H_{mu,nu,R} = H_{nu,mu,-R} - if(Rx!=0 || Ry!=0 || Rz!=0) + } + + // use symmetry : H_{mu,nu,R} = H_{nu,mu,-R} + if (Rx != 0 || Ry != 0 || Rz != 0) + { + hamilt::BaseMatrix* submat = hR->find_matrix(iat2, iat1, -Rx, -Ry, -Rz); + for (int i = 0; i < arr.shape[0]; i++) { - hamilt::BaseMatrix* submat = hR->find_matrix(iat2,iat1,-Rx,-Ry,-Rz); - for(int i = 0; i < arr.shape[0]; i ++) + for (int j = 0; j < arr.shape[1]; j++) { - for(int j = 0; j < arr.shape[1]; j ++) - { - submat->add_element(j,i,submat_read[i*arr.shape[1]+j]); - } + submat->add_element(j, i, submat_read[i * arr.shape[1] + j]); } } } + } #endif @@ -328,10 +336,10 @@ void output_mat_npz(const UnitCell& ucell, std::string& zipname, const hamilt::H #ifdef __USECNPY std::string filename = ""; - if(GlobalV::MY_RANK == 0) + if (GlobalV::MY_RANK == 0) { - -// first block: lattice vectors + + // first block: lattice vectors filename = "lattice_vectors"; std::vector lattice_vectors; lattice_vectors.resize(9); @@ -345,9 +353,9 @@ void output_mat_npz(const UnitCell& ucell, std::string& zipname, const hamilt::H lattice_vectors[7] = ucell.lat0 * ucell.a3.y; lattice_vectors[8] = ucell.lat0 * ucell.a3.z; - cnpy::npz_save(zipname,filename,lattice_vectors); + cnpy::npz_save(zipname, filename, lattice_vectors); -// second block: atom info + // second block: atom info filename = "atom_info"; double* atom_info = new double[ucell.nat * 5]; for (int iat = 0; iat < ucell.nat; ++iat) @@ -355,7 +363,7 @@ void output_mat_npz(const UnitCell& ucell, std::string& zipname, const hamilt::H const int it = ucell.iat2it[iat]; const int ia = ucell.iat2ia[iat]; - //get atomic number (copied from write_vdata_palgrid.cpp) + // get atomic number (copied from write_vdata_palgrid.cpp) std::string element = ""; element = ucell.atoms[it].label; std::string::iterator temp = element.begin(); @@ -366,89 +374,90 @@ void output_mat_npz(const UnitCell& ucell, std::string& zipname, const hamilt::H temp = element.erase(temp); } else - { - temp++; - } + { + temp++; + } } int z = 0; - for(int j=0; j!=ModuleBase::element_name.size(); j++) + for (int j = 0; j != ModuleBase::element_name.size(); j++) { if (element == ModuleBase::element_name[j]) { - z=j+1; + z = j + 1; break; } } - atom_info[iat*5] = it; - atom_info[iat*5+1] = z; + atom_info[iat * 5] = it; + atom_info[iat * 5 + 1] = z; atom_info[iat * 5 + 2] = ucell.atoms[it].taud[ia].x; atom_info[iat * 5 + 3] = ucell.atoms[it].taud[ia].y; atom_info[iat * 5 + 4] = ucell.atoms[it].taud[ia].z; } std::vector shape = {(size_t)ucell.nat, 5}; - cnpy::npz_save(zipname,filename,atom_info,shape,"a"); + cnpy::npz_save(zipname, filename, atom_info, shape, "a"); delete[] atom_info; -//third block: orbital info + // third block: orbital info for (int it = 0; it < ucell.ntype; ++it) { - filename="orbital_info_"+std::to_string(it); + filename = "orbital_info_" + std::to_string(it); double* orbital_info = new double[ucell.atoms[it].nw * 3]; for (int iw = 0; iw < ucell.atoms[it].nw; ++iw) { orbital_info[iw * 3] = ucell.atoms[it].iw2n[iw]; orbital_info[iw * 3 + 1] = ucell.atoms[it].iw2l[iw]; const int im = ucell.atoms[it].iw2m[iw]; - const int m = (im % 2 == 0) ? -im/2 : (im+1)/2; - orbital_info[iw*3+2] = m; + const int m = (im % 2 == 0) ? -im / 2 : (im + 1) / 2; + orbital_info[iw * 3 + 2] = m; } shape = {(size_t)ucell.atoms[it].nw, 3}; - cnpy::npz_save(zipname,filename,orbital_info,shape,"a"); + cnpy::npz_save(zipname, filename, orbital_info, shape, "a"); } } -//fourth block: hr(i0,jR) +// fourth block: hr(i0,jR) #ifdef __MPI hamilt::HContainer* HR_serial; Parallel_Orbitals serialV; serialV.set_serial(PARAM.globalv.nlocal, PARAM.globalv.nlocal); serialV.set_atomic_trace(ucell.get_iat2iwt(), ucell.nat, PARAM.globalv.nlocal); - if(GlobalV::MY_RANK == 0) + if (GlobalV::MY_RANK == 0) { HR_serial = new hamilt::HContainer(&serialV); } hamilt::gatherParallels(hR, HR_serial, 0); - if(GlobalV::MY_RANK==0) + if (GlobalV::MY_RANK == 0) { - for(int iap=0;iap atom_j) continue; + if (atom_i > atom_j) + continue; int start_i = serialV.atom_begin_row[atom_i]; int start_j = serialV.atom_begin_col[atom_j]; int row_size = serialV.get_row_size(atom_i); int col_size = serialV.get_col_size(atom_j); - for(int iR=0;iR r_index = HR_serial[0].get_atom_pair(iap).get_R_index(iR); - filename = "mat_"+std::to_string(atom_i)+"_"+std::to_string(atom_j)+"_" - +std::to_string(r_index.x)+"_"+std::to_string(r_index.y)+"_"+std::to_string(r_index.z); - std::vector shape = {(size_t)row_size,(size_t)col_size}; - cnpy::npz_save(zipname,filename,matrix.get_pointer(),shape,"a"); + filename = "mat_" + std::to_string(atom_i) + "_" + std::to_string(atom_j) + "_" + + std::to_string(r_index.x) + "_" + std::to_string(r_index.y) + "_" + + std::to_string(r_index.z); + std::vector shape = {(size_t)row_size, (size_t)col_size}; + cnpy::npz_save(zipname, filename, matrix.get_pointer(), shape, "a"); } } - } #else auto row_indexes = paraV.get_indexes_row(); auto col_indexes = paraV.get_indexes_col(); - for(int iap=0;iap r_index = hR.get_atom_pair(iap).get_R_index(iR); - filename = "mat_"+std::to_string(atom_i)+"_"+std::to_string(atom_j)+"_" - +std::to_string(r_index.x)+"_"+std::to_string(r_index.y)+"_"+std::to_string(r_index.z); - std::vector shape = {(size_t)row_size,(size_t)col_size}; - cnpy::npz_save(zipname,filename,matrix.get_pointer(),shape,"a"); + filename = "mat_" + std::to_string(atom_i) + "_" + std::to_string(atom_j) + "_" + std::to_string(r_index.x) + + "_" + std::to_string(r_index.y) + "_" + std::to_string(r_index.z); + std::vector shape = {(size_t)row_size, (size_t)col_size}; + cnpy::npz_save(zipname, filename, matrix.get_pointer(), shape, "a"); } } #endif diff --git a/source/module_io/json_output/general_info.cpp b/source/module_io/json_output/general_info.cpp index c6285d9000..c57a9c5746 100644 --- a/source/module_io/json_output/general_info.cpp +++ b/source/module_io/json_output/general_info.cpp @@ -2,7 +2,7 @@ #include "../para_json.h" #include "abacusjson.h" -#include "module_base/parallel_global.h" +#include "source_base/parallel_global.h" #include "source_main/version.h" // Add json objects to gener_info diff --git a/source/module_io/json_output/output_info.h b/source/module_io/json_output/output_info.h index 0be4254922..b934a4a30d 100644 --- a/source/module_io/json_output/output_info.h +++ b/source/module_io/json_output/output_info.h @@ -1,36 +1,37 @@ #ifndef OUTPUT_INFO_H #define OUTPUT_INFO_H -#include "module_cell/module_symmetry/symmetry.h" #include "module_cell/atom_spec.h" +#include "module_cell/module_symmetry/symmetry.h" #include "module_cell/unitcell.h" -#include "module_base/matrix.h" - +#include "source_base/matrix.h" /** -* @brief In this part of the code to complete the output part of the json tree. -* @param ucell: ucell for reading json parameters -*/ + * @brief In this part of the code to complete the output part of the json tree. + * @param ucell: ucell for reading json parameters + */ namespace Json { #ifdef __RAPIDJSON - void init_output_array_obj(); +void init_output_array_obj(); - void add_output_cell_coo_stress_force( - const UnitCell *ucell, - const ModuleBase::matrix force, const double fac, - const ModuleBase::matrix stress, const double unit_transform - ); +void add_output_cell_coo_stress_force(const UnitCell* ucell, + const ModuleBase::matrix force, + const double fac, + const ModuleBase::matrix stress, + const double unit_transform); - void add_output_efermi_converge(const double efermi, const bool scf_converge ); - void add_output_energy(const double energy ); +void add_output_efermi_converge(const double efermi, const bool scf_converge); +void add_output_energy(const double energy); - void add_output_scf_mag( - const double total_mag, const double absolute_mag, - const double energy, const double ediff, const double drho,const double time - ); +void add_output_scf_mag(const double total_mag, + const double absolute_mag, + const double energy, + const double ediff, + const double drho, + const double time); #endif -} +} // namespace Json #endif \ No newline at end of file diff --git a/source/module_io/nscf_band.cpp b/source/module_io/nscf_band.cpp index e824b4ce84..17e51c4ac6 100644 --- a/source/module_io/nscf_band.cpp +++ b/source/module_io/nscf_band.cpp @@ -1,49 +1,54 @@ #include "nscf_band.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" -#include "module_base/formatter.h" + +#include "source_base/formatter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" #ifdef __MPI #include #endif -void ModuleIO::nscf_band( - const int &is, - const std::string &out_band_dir, - const int &nband, - const double &fermie, - const int &precision, - const ModuleBase::matrix& ekb, - const K_Vectors& kv) +void ModuleIO::nscf_band(const int& is, + const std::string& out_band_dir, + const int& nband, + const double& fermie, + const int& precision, + const ModuleBase::matrix& ekb, + const K_Vectors& kv) { - ModuleBase::TITLE("ModuleIO","nscf_band"); + ModuleBase::TITLE("ModuleIO", "nscf_band"); ModuleBase::timer::tick("ModuleIO", "nscf_band"); - GlobalV::ofs_running << "\n"; - GlobalV::ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - ">>>>>>>>>>>>>>>>>>>>>>>>>" << std::endl; - GlobalV::ofs_running << " | " - " |" << std::endl; - GlobalV::ofs_running << " | Print out the eigenvalues. " - " |" << std::endl; - GlobalV::ofs_running << " | " - " |" << std::endl; - GlobalV::ofs_running << " <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" - "<<<<<<<<<<<<<<<<<<<<<<<<<" << std::endl; - GlobalV::ofs_running << "\n"; + GlobalV::ofs_running << "\n"; + GlobalV::ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + ">>>>>>>>>>>>>>>>>>>>>>>>>" + << std::endl; + GlobalV::ofs_running << " | " + " |" + << std::endl; + GlobalV::ofs_running << " | Print out the eigenvalues. " + " |" + << std::endl; + GlobalV::ofs_running << " | " + " |" + << std::endl; + GlobalV::ofs_running << " <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" + "<<<<<<<<<<<<<<<<<<<<<<<<<" + << std::endl; + GlobalV::ofs_running << "\n"; - // number of k points without spin; - // nspin = 1,2, nkstot = nkstot_np * nspin; + // number of k points without spin; + // nspin = 1,2, nkstot = nkstot_np * nspin; // nspin = 4, nkstot = nkstot_np const int nkstot_np = kv.para_k.nkstot_np; const int nks_np = kv.para_k.nks_np; #ifdef __MPI - if(GlobalV::MY_RANK==0) + if (GlobalV::MY_RANK == 0) { - std::ofstream ofs(out_band_dir.c_str());//make the file clear!! + std::ofstream ofs(out_band_dir.c_str()); // make the file clear!! ofs.close(); } @@ -54,62 +59,63 @@ void ModuleIO::nscf_band( std::vector> kvec_c_global; kv.para_k.gatherkvec(kv.kvec_c, kvec_c_global); - for(int ik=0; ik0) + if (ik > 0) { - auto delta=kvec_c_global[ik]-kvec_c_global[ik-1]; - klength[ik] = klength[ik-1]; - klength[ik] += (kv.kl_segids[ik] == kv.kl_segids[ik-1]) ? delta.norm() : 0.0; + auto delta = kvec_c_global[ik] - kvec_c_global[ik - 1]; + klength[ik] = klength[ik - 1]; + klength[ik] += (kv.kl_segids[ik] == kv.kl_segids[ik - 1]) ? delta.norm() : 0.0; } //! first find if present kpoint in present pool - if ( GlobalV::MY_POOL == kv.para_k.whichpool[ik] ) + if (GlobalV::MY_POOL == kv.para_k.whichpool[ik]) { //! then get the local kpoint index, which starts definitly from 0 const int ik_now = ik - kv.para_k.startk_pool[GlobalV::MY_POOL]; //! if present kpoint corresponds the spin of the present one - assert( kv.isk[ik_now+is*nks_np] == is ); - if ( GlobalV::RANK_IN_POOL == 0) + assert(kv.isk[ik_now + is * nks_np] == is); + if (GlobalV::RANK_IN_POOL == 0) { std::ofstream ofs(out_band_dir.c_str(), std::ios::app); - ofs << FmtCore::format("%4d", ik+1); + ofs << FmtCore::format("%4d", ik + 1); int width = precision + 4; std::string fmtstr = " %." + std::to_string(precision) + "f"; ofs << FmtCore::format(fmtstr.c_str(), klength[ik]); - for(int ib = 0; ib < nband; ib++) + for (int ib = 0; ib < nband; ib++) { - ofs << FmtCore::format(fmtstr.c_str(), (ekb(ik_now+is*nks_np, ib)-fermie) * ModuleBase::Ry_to_eV); + ofs << FmtCore::format(fmtstr.c_str(), + (ekb(ik_now + is * nks_np, ib) - fermie) * ModuleBase::Ry_to_eV); } ofs << std::endl; - ofs.close(); + ofs.close(); } } MPI_Barrier(MPI_COMM_WORLD); } - + #else std::vector klength; klength.resize(nkstot_np); klength[0] = 0.0; std::ofstream ofs(out_band_dir.c_str()); - for(int ik=0;ik0) + if (ik > 0) { - auto delta=kv.kvec_c[ik]-kv.kvec_c[ik-1]; - klength[ik] = klength[ik-1]; - klength[ik] += (kv.kl_segids[ik] == kv.kl_segids[ik-1]) ? delta.norm() : 0.0; + auto delta = kv.kvec_c[ik] - kv.kvec_c[ik - 1]; + klength[ik] = klength[ik - 1]; + klength[ik] += (kv.kl_segids[ik] == kv.kl_segids[ik - 1]) ? delta.norm() : 0.0; } - if( kv.isk[ik] == is) + if (kv.isk[ik] == is) { - ofs << FmtCore::format("%4d", ik+1); + ofs << FmtCore::format("%4d", ik + 1); int width = precision + 4; std::string fmtstr = " %." + std::to_string(precision) + "f"; ofs << FmtCore::format(fmtstr.c_str(), klength[ik]); - for(int ibnd = 0; ibnd < nband; ibnd++) + for (int ibnd = 0; ibnd < nband; ibnd++) { - ofs << FmtCore::format(fmtstr.c_str(), (ekb(ik, ibnd)-fermie) * ModuleBase::Ry_to_eV); + ofs << FmtCore::format(fmtstr.c_str(), (ekb(ik, ibnd) - fermie) * ModuleBase::Ry_to_eV); } ofs << std::endl; } diff --git a/source/module_io/nscf_band.h b/source/module_io/nscf_band.h index d12b063f08..3b78903bc8 100644 --- a/source/module_io/nscf_band.h +++ b/source/module_io/nscf_band.h @@ -1,8 +1,8 @@ #ifndef NSCF_BAND_H #define NSCF_BAND_H -#include "module_base/matrix.h" #include "module_cell/klist.h" #include "module_cell/parallel_kpoints.h" +#include "source_base/matrix.h" namespace ModuleIO { @@ -24,6 +24,6 @@ void nscf_band(const int& is, const int& precision, const ModuleBase::matrix& ekb, const K_Vectors& kv); -} +} // namespace ModuleIO #endif diff --git a/source/module_io/nscf_fermi_surf.cpp b/source/module_io/nscf_fermi_surf.cpp index ab7be76d8d..869b793e14 100644 --- a/source/module_io/nscf_fermi_surf.cpp +++ b/source/module_io/nscf_fermi_surf.cpp @@ -1,93 +1,92 @@ #include "nscf_fermi_surf.h" -#include "module_base/global_function.h" + #include "module_parameter/parameter.h" -#include "module_base/global_variable.h" -#include "module_base/timer.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/timer.h" #ifdef __MPI #include #endif -void ModuleIO::nscf_fermi_surface(const std::string &out_band_dir, - const int &nband, - const double &ef, - const K_Vectors& kv, - const UnitCell& ucell, - const ModuleBase::matrix &ekb) +void ModuleIO::nscf_fermi_surface(const std::string& out_band_dir, + const int& nband, + const double& ef, + const K_Vectors& kv, + const UnitCell& ucell, + const ModuleBase::matrix& ekb) { - ModuleBase::TITLE("ModuleIO","nscf_fermi_surface"); - ModuleBase::timer::tick("ModuleIO", "nscf_fermi_surface"); + ModuleBase::TITLE("ModuleIO", "nscf_fermi_surface"); + ModuleBase::timer::tick("ModuleIO", "nscf_fermi_surface"); #ifdef __MPI - const int start = 1; - const int end = PARAM.inp.nbands; - - std::ofstream ofs; - if(GlobalV::MY_RANK==0) - { - ofs.open(out_band_dir.c_str()); - ofs << std::setprecision(6); - ofs.close(); - } + const int start = 1; + const int end = PARAM.inp.nbands; - for(int ik=0; ik @@ -49,8 +49,8 @@ Numerical_Basis::~Numerical_Basis() // { // // true stands for : start_from_file // this->bessel_basis.init(true, std::stod(PARAM.inp.bessel_nao_ecut), ucell.ntype, ucell.lmax, -// PARAM.inp.bessel_nao_smooth, PARAM.inp.bessel_nao_sigma, PARAM.globalv.bessel_nao_rcut, -// PARAM.inp.bessel_nao_tolerence, ucell); +// PARAM.inp.bessel_nao_smooth, PARAM.inp.bessel_nao_sigma, +// PARAM.globalv.bessel_nao_rcut, PARAM.inp.bessel_nao_tolerence, ucell); // this->mu_index = this->init_mu_index(ucell); // this->init_label = true; // } @@ -76,9 +76,15 @@ void Numerical_Basis::output_overlap(const psi::Psi>& psi, if (!this->init_label) { // false stands for : 'Faln' is not used. - this->bessel_basis.init(false, std::stod(PARAM.inp.bessel_nao_ecut), ucell.ntype, ucell.lmax, - PARAM.inp.bessel_nao_smooth, PARAM.inp.bessel_nao_sigma, bessel_nao_rcut, - PARAM.inp.bessel_nao_tolerence, ucell); + this->bessel_basis.init(false, + std::stod(PARAM.inp.bessel_nao_ecut), + ucell.ntype, + ucell.lmax, + PARAM.inp.bessel_nao_smooth, + PARAM.inp.bessel_nao_sigma, + bessel_nao_rcut, + PARAM.inp.bessel_nao_tolerence, + ucell); this->mu_index = this->init_mu_index(ucell); this->init_label = true; } @@ -114,7 +120,8 @@ void Numerical_Basis::output_overlap(const psi::Psi>& psi, ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "number of k points", kv.get_nks()); ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "number of bands", PARAM.inp.nbands); ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "number of local orbitals", PARAM.globalv.nlocal); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "number of eigenvalues of Jl(x)", + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, + "number of eigenvalues of Jl(x)", this->bessel_basis.get_ecut_number()); // CALCULATE THE OVERLAP MATRIX @@ -158,9 +165,13 @@ void Numerical_Basis::output_overlap(const psi::Psi>& psi, } } - overlap_Sq[ik] = NumericalBasis::cal_overlap_Sq( - type, ucell.lmaxmax, this->bessel_basis.get_ecut_number(), bessel_nao_rcut, tau_cart, - ucell.lat0 * ucell.latvec, NumericalBasis::indexgen(natom, lmax)); + overlap_Sq[ik] = NumericalBasis::cal_overlap_Sq(type, + ucell.lmaxmax, + this->bessel_basis.get_ecut_number(), + bessel_nao_rcut, + tau_cart, + ucell.lat0 * ucell.latvec, + NumericalBasis::indexgen(natom, lmax)); #endif ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "cal_overlap_Sq"); } @@ -179,50 +190,69 @@ void Numerical_Basis::output_overlap(const psi::Psi>& psi, Parallel_Reduce::reduce_pool(overlap_V.c, overlap_V.nr * overlap_V.nc); // Peize Lin add 2020.04.23 #endif // exception handling following, for FileNotOpenFailure - if (ofs.good()) { + if (ofs.good()) + { this->output_info(ofs, bessel_basis, kv, ucell); // header of orb_matrix* file - } else { + } + else + { ModuleBase::WARNING_QUIT("Numerical_Basis", "Failed to open file for writing the overlap matrix."); -} + } // because one stage of file io complete, re-check the file status. - if (ofs.good()) { + if (ofs.good()) + { this->output_k(ofs, kv); // ... - } else { + } + else + { ModuleBase::WARNING_QUIT("Numerical_Basis", "Failed to write k-points to file."); -} + } // because one stage of file io complete, re-check the file status. - if (ofs.good()) { + if (ofs.good()) + { this->output_overlap_Q(ofs, overlap_Q, kv); // ... - } else { + } + else + { ModuleBase::WARNING_QUIT("Numerical_Basis", "Failed to write overlap Q to file."); -} + } // because one stage of file io complete, re-check the file status. if (winput::out_spillage == 2) { // caution: this is the largest matrix to be output, always flush - if (ofs.good()) { + if (ofs.good()) + { this->output_overlap_Sq(ss.str(), ofs, overlap_Sq, kv); // ... - } else { + } + else + { ModuleBase::WARNING_QUIT("Numerical_Basis", "Failed to write overlap S to file."); -} + } } // because one stage of file io complete, re-check the file status. - if (ofs.good()) { + if (ofs.good()) + { this->output_overlap_V(ofs, overlap_V); // ... // Peize Lin add 2020.04.23 - } else { + } + else + { ModuleBase::WARNING_QUIT("Numerical_Basis", "Failed to write overlap V to file."); -} - if (GlobalV::MY_RANK == 0) { + } + if (GlobalV::MY_RANK == 0) + { ofs.close(); -} + } } return; } -ModuleBase::ComplexArray Numerical_Basis::cal_overlap_Q(const int& ik, const int& np, const ModulePW::PW_Basis_K* wfcpw, +ModuleBase::ComplexArray Numerical_Basis::cal_overlap_Q(const int& ik, + const int& np, + const ModulePW::PW_Basis_K* wfcpw, const psi::Psi>& psi, - const double derivative_order, const Structure_Factor& sf, + const double derivative_order, + const Structure_Factor& sf, const UnitCell& ucell) const { ModuleBase::TITLE("Numerical_Basis", "cal_overlap_Q"); @@ -298,8 +328,11 @@ ModuleBase::ComplexArray Numerical_Basis::cal_overlap_Q(const int& ik, const int return overlap_Q; } -ModuleBase::ComplexArray Numerical_Basis::cal_overlap_Sq(const int& ik, const int& np, const double derivative_order, - const Structure_Factor& sf, const ModulePW::PW_Basis_K* wfcpw, +ModuleBase::ComplexArray Numerical_Basis::cal_overlap_Sq(const int& ik, + const int& np, + const double derivative_order, + const Structure_Factor& sf, + const ModulePW::PW_Basis_K* wfcpw, const UnitCell& ucell) const { ModuleBase::TITLE("Numerical_Basis", "cal_overlap_Sq"); @@ -316,9 +349,10 @@ ModuleBase::ComplexArray Numerical_Basis::cal_overlap_Sq(const int& ik, const in = (4 * ModuleBase::PI) * (4 * ModuleBase::PI) / ucell.omega; // Peize Lin add normalization 2015-12-29 std::vector> gk(np); - for (int ig = 0; ig < np; ig++) { + for (int ig = 0; ig < np; ig++) + { gk[ig] = wfcpw->getgpluskcar(ik, ig) * ucell.tpiba; -} + } const std::vector gpow = Numerical_Basis::cal_gpow(gk, derivative_order); @@ -362,10 +396,11 @@ ModuleBase::ComplexArray Numerical_Basis::cal_overlap_Sq(const int& ik, const in const int iwt1 = this->mu_index[T1](I1, l1, ic1, m1); std::vector> about_ig1(np, std::complex(0.0, 0.0)); - for (int ig = 0; ig < np; ig++) { + for (int ig = 0; ig < np; ig++) + { about_ig1[ig] = conj(lphase1 * sk1[ig] * ylm(lm1, ig)) * gpow[ig]; // Peize Lin add for dpsi 2020.04.23 -} + } for (int m2 = 0; m2 < 2 * l2 + 1; m2++) // 2.6 { @@ -374,9 +409,10 @@ ModuleBase::ComplexArray Numerical_Basis::cal_overlap_Sq(const int& ik, const in std::vector> about_ig2(np, std::complex(0.0, 0.0)); - for (int ig = 0; ig < np; ++ig) { + for (int ig = 0; ig < np; ++ig) + { about_ig2[ig] = lphase2 * sk2[ig] * ylm(lm2, ig) * about_ig1[ig]; -} + } /* same as: for (int ig=0; ig>()); -} - - BlasConnector::gemm('N', 'T', enumber, enumber, np, 1.0, about_ig3_1.c, np, - about_ig3_2.c, np, 1.0, &overlap_Sq(iwt1, iwt2, 0, 0), + } + + BlasConnector::gemm('N', + 'T', + enumber, + enumber, + np, + 1.0, + about_ig3_1.c, + np, + about_ig3_2.c, + np, + 1.0, + &overlap_Sq(iwt1, iwt2, 0, 0), enumber); } } @@ -421,24 +470,28 @@ ModuleBase::ComplexArray Numerical_Basis::cal_overlap_Sq(const int& ik, const in // Peize Lin add for dpsi 2020.04.23 ModuleBase::matrix Numerical_Basis::cal_overlap_V(const ModulePW::PW_Basis_K* wfcpw, const psi::Psi>& psi, - const double derivative_order, const K_Vectors& kv, + const double derivative_order, + const K_Vectors& kv, const double tpiba) { ModuleBase::matrix overlap_V(kv.get_nks(), PARAM.inp.nbands); for (int ik = 0; ik < kv.get_nks(); ++ik) { std::vector> gk(kv.ngk[ik]); - for (int ig = 0; ig < gk.size(); ig++) { + for (int ig = 0; ig < gk.size(); ig++) + { gk[ig] = wfcpw->getgpluskcar(ik, ig) * tpiba; -} + } const std::vector gpow = Numerical_Basis::cal_gpow(gk, derivative_order); - for (int ib = 0; ib < PARAM.inp.nbands; ++ib) { - for (int ig = 0; ig < kv.ngk[ik]; ++ig) { + for (int ib = 0; ib < PARAM.inp.nbands; ++ib) + { + for (int ig = 0; ig < kv.ngk[ik]; ++ig) + { overlap_V(ik, ib) += norm(psi(ik, ib, ig)) * gpow[ig]; -} -} + } + } } return overlap_V; } @@ -485,9 +538,10 @@ std::vector Numerical_Basis::cal_gpow(const std::vector= thr) { + if (gk[ig].norm2() >= thr) + { gpow[ig] = std::pow(gk[ig].norm2(), derivative_order); -} + } } } return gpow; @@ -501,7 +555,9 @@ std::vector Numerical_Basis::init_mu_index(const UnitCell& int mu = 0; for (int it = 0; it < ucell.ntype; it++) { - mu_index_[it].create(ucell.atoms[it].na, ucell.atoms[it].nwl + 1, ucell.nmax, + mu_index_[it].create(ucell.atoms[it].na, + ucell.atoms[it].nwl + 1, + ucell.nmax, 2 * (ucell.atoms[it].nwl + 1) + 1); // m ==> 2*l+1 mu_index_[it].zero_out(); @@ -529,16 +585,19 @@ std::vector Numerical_Basis::init_mu_index(const UnitCell& return mu_index_; } -void Numerical_Basis::numerical_atomic_wfc(const int& ik, const ModulePW::PW_Basis_K* wfcpw, - ModuleBase::ComplexMatrix& psi, const Structure_Factor& sf, +void Numerical_Basis::numerical_atomic_wfc(const int& ik, + const ModulePW::PW_Basis_K* wfcpw, + ModuleBase::ComplexMatrix& psi, + const Structure_Factor& sf, const UnitCell& ucell) { ModuleBase::TITLE("Numerical_Basis", "numerical_atomic_wfc"); const int np = wfcpw->npwk[ik]; std::vector> gk(np); - for (int ig = 0; ig < np; ig++) { + for (int ig = 0; ig < np; ig++) + { gk[ig] = wfcpw->getgpluskcar(ik, ig); -} + } const int total_lm = (ucell.lmax + 1) * (ucell.lmax + 1); ModuleBase::matrix ylm(total_lm, np); @@ -581,7 +640,9 @@ void Numerical_Basis::numerical_atomic_wfc(const int& ik, const ModulePW::PW_Bas } } -void Numerical_Basis::output_info(std::ofstream& ofs, const Bessel_Basis& bessel_basis, const K_Vectors& kv, +void Numerical_Basis::output_info(std::ofstream& ofs, + const Bessel_Basis& bessel_basis, + const K_Vectors& kv, const UnitCell& ucell) { // only print out to the information by the first processor @@ -653,9 +714,10 @@ void Numerical_Basis::output_k(std::ofstream& ofs, const K_Vectors& kv) #ifdef __MPI // temprary restrict kpar=1 for NSPIN=2 case for generating_orbitals int pool = 0; - if (PARAM.inp.nspin != 2) { + if (PARAM.inp.nspin != 2) + { pool = kv.para_k.whichpool[ik]; -} + } const int iknow = ik - kv.para_k.startk_pool[GlobalV::MY_POOL]; if (GlobalV::RANK_IN_POOL == 0) { @@ -715,7 +777,8 @@ void Numerical_Basis::output_k(std::ofstream& ofs, const K_Vectors& kv) } } -void Numerical_Basis::output_overlap_Q(std::ofstream& ofs, const std::vector& overlap_Q, +void Numerical_Basis::output_overlap_Q(std::ofstream& ofs, + const std::vector& overlap_Q, const K_Vectors& kv) { // (3) @@ -740,11 +803,14 @@ void Numerical_Basis::output_overlap_Q(std::ofstream& ofs, const std::vector 0); - ModuleBase::ComplexArray overlap_Q_k(kv.get_nks(), overlap_Q[0].getBound1(), overlap_Q[0].getBound2(), + ModuleBase::ComplexArray overlap_Q_k(kv.get_nks(), + overlap_Q[0].getBound1(), + overlap_Q[0].getBound2(), overlap_Q[0].getBound3()); for (int ik = 0; ik < kv.get_nks(); ++ik) { - std::memcpy(overlap_Q_k.ptr + ik * overlap_Q[ik].getSize(), overlap_Q[ik].ptr, + std::memcpy(overlap_Q_k.ptr + ik * overlap_Q[ik].getSize(), + overlap_Q[ik].ptr, overlap_Q[ik].getSize() * sizeof(std::complex)); } @@ -763,9 +829,10 @@ void Numerical_Basis::output_overlap_Q(std::ofstream& ofs, const std::vector& overlap_Sq, const K_Vectors& kv) +void Numerical_Basis::output_overlap_Sq(const std::string& name, + std::ofstream& ofs, + const std::vector& overlap_Sq, + const K_Vectors& kv) { if (GlobalV::MY_RANK == 0) { @@ -794,9 +863,10 @@ void Numerical_Basis::output_overlap_Sq(const std::string& name, std::ofstream& // only half of nkstot should be output in "NSPIN == 2" case, k_up and k_down has same k infomation int ispin = 1; - if (PARAM.inp.nspin == 2) { + if (PARAM.inp.nspin == 2) + { ispin = 2; -} + } int nkstot = kv.get_nkstot() / ispin; int count = 0; for (int is = 0; is < ispin; is++) @@ -813,9 +883,10 @@ void Numerical_Basis::output_overlap_Sq(const std::string& name, std::ofstream& const int size = overlap_Sq[ik_now].getSize(); for (int i = 0; i < size; i++) { - if (count % 2 == 0) { + if (count % 2 == 0) + { ofs << std::endl; -} + } ofs << " " << overlap_Sq[ik_now].ptr[i].real() << " " << overlap_Sq[ik_now].ptr[i].imag(); ++count; } diff --git a/source/module_io/numerical_basis.h b/source/module_io/numerical_basis.h index 20547e6f41..27708d8431 100644 --- a/source/module_io/numerical_basis.h +++ b/source/module_io/numerical_basis.h @@ -5,20 +5,20 @@ //========================================================== #ifndef NUMERICAL_BASIS_H #define NUMERICAL_BASIS_H -#include - #include "bessel_basis.h" -#include "module_base/complexarray.h" -#include "module_base/complexmatrix.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/intarray.h" -#include "module_base/matrix.h" -#include "module_base/vector3.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/klist.h" #include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" #include "module_psi/psi.h" +#include "source_base/complexarray.h" +#include "source_base/complexmatrix.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/intarray.h" +#include "source_base/matrix.h" +#include "source_base/vector3.h" + +#include //========================================================== // CLASS : // NAME : Numerical_Basis @@ -26,14 +26,16 @@ class Numerical_Basis { public: - // this is not a good idea to construct the instance. Instead, there are many variables that CAN DEFINE the identity of this instance, - // these parameters should be provided in the constructor. For future refactor, I list them here: + // this is not a good idea to construct the instance. Instead, there are many variables that CAN DEFINE the identity + // of this instance, these parameters should be provided in the constructor. For future refactor, I list them here: // bessel_nao_*: including ecut, rcut, smearing, sigma, etc. - // a file name: for the function start_from_file_k, if starts from file, can construct a different instance, instead of using the same instance. + // a file name: for the function start_from_file_k, if starts from file, can construct a different instance, instead + // of using the same instance. Numerical_Basis(); ~Numerical_Basis(); - // void start_from_file_k(const int& ik, ModuleBase::ComplexMatrix& psi, const Structure_Factor& sf, const ModulePW::PW_Basis_K* wfcpw, const UnitCell& ucell); + // void start_from_file_k(const int& ik, ModuleBase::ComplexMatrix& psi, const Structure_Factor& sf, const + // ModulePW::PW_Basis_K* wfcpw, const UnitCell& ucell); void output_overlap(const psi::Psi>& psi, const Structure_Factor& sf, const K_Vectors& kv, @@ -78,18 +80,19 @@ class Numerical_Basis const double tpiba); // gk should be in the atomic unit (Bohr) - ModuleBase::realArray cal_flq(const std::vector> &gk, - const int ucell_lmax) const; + ModuleBase::realArray cal_flq(const std::vector>& gk, const int ucell_lmax) const; // Ylm does not depend on the magnitude so unit is not important - static ModuleBase::matrix cal_ylm(const std::vector> &gk, - const int ucell_lmax); + static ModuleBase::matrix cal_ylm(const std::vector>& gk, const int ucell_lmax); // gk and the returned gpow are both in the atomic unit (Bohr) - static std::vector cal_gpow(const std::vector> &gk, + static std::vector cal_gpow(const std::vector>& gk, const double derivative_order); - static void output_info(std::ofstream& ofs, const Bessel_Basis& bessel_basis, const K_Vectors& kv, const UnitCell& ucell); + static void output_info(std::ofstream& ofs, + const Bessel_Basis& bessel_basis, + const K_Vectors& kv, + const UnitCell& ucell); static void output_k(std::ofstream& ofs, const K_Vectors& kv); @@ -102,7 +105,7 @@ class Numerical_Basis const std::vector& overlap_Sq, const K_Vectors& kv); - static void output_overlap_V(std::ofstream &ofs, const ModuleBase::matrix &overlap_V); + static void output_overlap_V(std::ofstream& ofs, const ModuleBase::matrix& overlap_V); }; #endif diff --git a/source/module_io/numerical_basis_jyjy.cpp b/source/module_io/numerical_basis_jyjy.cpp index 8f504a9fab..1cb3bcfff3 100644 --- a/source/module_io/numerical_basis_jyjy.cpp +++ b/source/module_io/numerical_basis_jyjy.cpp @@ -1,8 +1,8 @@ #include "module_io/numerical_basis_jyjy.h" -#include "module_base/matrix3.h" -#include "module_base/vector3.h" #include "module_basis/module_nao/two_center_integrator.h" +#include "source_base/matrix3.h" +#include "source_base/vector3.h" namespace NumericalBasis { @@ -36,8 +36,12 @@ std::vector indexgen(const std::vector& natom, const std::vector>& R, const ModuleBase::Matrix3& latvec, +ModuleBase::ComplexArray cal_overlap_Sq(const char type, + const int lmax, + const int nbes, + const double rcut, + const std::vector>& R, + const ModuleBase::Matrix3& latvec, const std::vector& mu_index) { // allocate output array diff --git a/source/module_io/numerical_basis_jyjy.h b/source/module_io/numerical_basis_jyjy.h index f29deba5f4..53fa74c559 100644 --- a/source/module_io/numerical_basis_jyjy.h +++ b/source/module_io/numerical_basis_jyjy.h @@ -1,9 +1,9 @@ #ifndef NUMERICAL_BASIS_JYJY_H #define NUMERICAL_BASIS_JYJY_H -#include "module_base/complexarray.h" -#include "module_base/matrix3.h" -#include "module_base/vector3.h" +#include "source_base/complexarray.h" +#include "source_base/matrix3.h" +#include "source_base/vector3.h" #include #include @@ -26,7 +26,9 @@ std::vector> indexgen(const std::vector& nat * */ ModuleBase::ComplexArray cal_overlap_Sq(const char type, // 'S' or 'T' - const int lmax, const int nbes, const double rcut, + const int lmax, + const int nbes, + const double rcut, const std::vector>>& tau_cart, const ModuleBase::Matrix3& latvec, const std::vector>& mu_index); @@ -44,7 +46,8 @@ ModuleBase::ComplexArray cal_overlap_Sq(const char type, // 'S' or 'T' * */ std::vector> neighbor_vec(const ModuleBase::Vector3& d0, - const ModuleBase::Matrix3& latvec, const double r); + const ModuleBase::Matrix3& latvec, + const double r); } // namespace NumericalBasis diff --git a/source/module_io/numerical_descriptor.cpp b/source/module_io/numerical_descriptor.cpp index 16236c63ea..2b12ae50a7 100644 --- a/source/module_io/numerical_descriptor.cpp +++ b/source/module_io/numerical_descriptor.cpp @@ -1,177 +1,180 @@ #include "numerical_descriptor.h" + +#include "module_cell/module_symmetry/symmetry.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" -#include "module_cell/module_symmetry/symmetry.h" +#include "source_base/lapack_connector.h" +#include "source_base/math_ylmreal.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" #include "winput.h" -#include "module_base/math_ylmreal.h" -#include "module_base/lapack_connector.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" -Numerical_Descriptor::Numerical_Descriptor() +Numerical_Descriptor::Numerical_Descriptor() { - this->init_label = false; - this->lmax = -1; - this->nmax = -1; + this->init_label = false; + this->lmax = -1; + this->nmax = -1; this->nlocal = 0; this->mu_index = nullptr; } -Numerical_Descriptor::~Numerical_Descriptor() +Numerical_Descriptor::~Numerical_Descriptor() { - if(init_label==true) - { - delete[] mu_index; - } - return; + if (init_label == true) + { + delete[] mu_index; + } + return; } - -void Numerical_Descriptor::output_descriptor(const UnitCell& ucell, const psi::Psi> &psi, const int &lmax_in, const double &rcut_in, const double &tol_in, const int nks_in) +void Numerical_Descriptor::output_descriptor(const UnitCell& ucell, + const psi::Psi>& psi, + const int& lmax_in, + const double& rcut_in, + const double& tol_in, + const int nks_in) { - ModuleBase::TITLE("Numerical_Descriptor","output_descriptor"); - ModuleBase::GlobalFunc::NEW_PART("DeepKS descriptor: D_{Inl}"); + ModuleBase::TITLE("Numerical_Descriptor", "output_descriptor"); + ModuleBase::GlobalFunc::NEW_PART("DeepKS descriptor: D_{Inl}"); - //----------------------------------- - // 1. Initialize parameters - //----------------------------------- + //----------------------------------- + // 1. Initialize parameters + //----------------------------------- - //GlobalV::ofs_running << "D_{Inl}_m_m'=sum_{i}" << std::endl; - GlobalV::ofs_running << "input lmax = " << lmax_in << std::endl; - GlobalV::ofs_running << "input rcut = " << rcut_in << std::endl; - GlobalV::ofs_running << "input tolerence = " << tol_in << std::endl; - this->lmax = lmax_in; - assert(lmax>=0); + // GlobalV::ofs_running << "D_{Inl}_m_m'=sum_{i}" << std::endl; + GlobalV::ofs_running << "input lmax = " << lmax_in << std::endl; + GlobalV::ofs_running << "input rcut = " << rcut_in << std::endl; + GlobalV::ofs_running << "input tolerence = " << tol_in << std::endl; + this->lmax = lmax_in; + assert(lmax >= 0); const int nks = nks_in; - int ne = 0; - - // Peize Lin change 2022.12.15 + int ne = 0; + + // Peize Lin change 2022.12.15 // 0 stands for : 'Faln' is not used. - this->bessel_basis.init( - false, - std::stod(PARAM.inp.bessel_descriptor_ecut), - ucell.ntype, - this->lmax, - PARAM.inp.bessel_descriptor_smooth, - PARAM.inp.bessel_descriptor_sigma, - rcut_in, - tol_in, - ucell - ); - this->nmax = Numerical_Descriptor::bessel_basis.get_ecut_number(); + this->bessel_basis.init(false, + std::stod(PARAM.inp.bessel_descriptor_ecut), + ucell.ntype, + this->lmax, + PARAM.inp.bessel_descriptor_smooth, + PARAM.inp.bessel_descriptor_sigma, + rcut_in, + tol_in, + ucell); + this->nmax = Numerical_Descriptor::bessel_basis.get_ecut_number(); this->init_mu_index(ucell); this->init_label = true; - assert(nmax>0); + assert(nmax > 0); - // Currently we are not considering doing DeePKS in PW basis - // hence this subroutine is used only for generating projectors and save to jle.orb - // As a result, I will return here and the rest of the code is saved for future use - return; + // Currently we are not considering doing DeePKS in PW basis + // hence this subroutine is used only for generating projectors and save to jle.orb + // As a result, I will return here and the rest of the code is saved for future use + return; -/* - //----------------------------------- - // 2. Open the file - //----------------------------------- - std::ofstream ofs; - std::stringstream ss; - // the parameter 'winput::spillage_outdir' is read from INPUTw. - ss << winput::spillage_outdir << "/" << "descriptor.dat"; - if (GlobalV::MY_RANK==0) - { - ofs.open(ss.str().c_str()); - } + /* + //----------------------------------- + // 2. Open the file + //----------------------------------- + std::ofstream ofs; + std::stringstream ss; + // the parameter 'winput::spillage_outdir' is read from INPUTw. + ss << winput::spillage_outdir << "/" << "descriptor.dat"; + if (GlobalV::MY_RANK==0) + { + ofs.open(ss.str().c_str()); + } - //------------------------------------- - // 3. Initialize overlap_Q1 and Q2 - //------------------------------------- - // OVERLAP : < J_mu | Psi > - ModuleBase::realArray overlap_Q1(nks, PARAM.inp.nbands, this->nlocal ); - ModuleBase::realArray overlap_Q2(nks, PARAM.inp.nbands, this->nlocal ); + //------------------------------------- + // 3. Initialize overlap_Q1 and Q2 + //------------------------------------- + // OVERLAP : < J_mu | Psi > + ModuleBase::realArray overlap_Q1(nks, PARAM.inp.nbands, this->nlocal ); + ModuleBase::realArray overlap_Q2(nks, PARAM.inp.nbands, this->nlocal ); - ModuleBase::GlobalFunc::ZEROS(overlap_Q1.ptr, overlap_Q1.getSize() ); - ModuleBase::GlobalFunc::ZEROS(overlap_Q2.ptr, overlap_Q2.getSize() ); + ModuleBase::GlobalFunc::ZEROS(overlap_Q1.ptr, overlap_Q1.getSize() ); + ModuleBase::GlobalFunc::ZEROS(overlap_Q2.ptr, overlap_Q2.getSize() ); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"number of k points",overlap_Q1.getBound1()); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"number of bands",overlap_Q1.getBound2()); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"number of local orbitals",overlap_Q1.getBound3()); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"number of k points",overlap_Q1.getBound1()); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"number of bands",overlap_Q1.getBound2()); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"number of local orbitals",overlap_Q1.getBound3()); - //------------------------------------- - // 4. Compute overlap_Q1 and Q2 - //------------------------------------- - // nks now is the reduced k-points. - for (int ik=0; ikngk[ik]; - GlobalV::ofs_running << " --------------------------------------------------------" << std::endl; - GlobalV::ofs_running << " Print the overlap matrixs Q and S for this kpoint"; - GlobalV::ofs_running << "\n " << std::setw(8) << "ik" << std::setw(8) << "npw"; - GlobalV::ofs_running << "\n " << std::setw(8) << ik+1 << std::setw(8) << npw << std::endl; - GlobalV::ofs_running << " --------------------------------------------------------" << std::endl; - // search for all k-points. - psi.fix_k(ik); - this->jlq3d_overlap(overlap_Q1, overlap_Q2, ik, ik, npw, psi); - ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running,"jlq3d_overlap"); - } - -#ifdef __MPI - Parallel_Reduce::reduce_double_pool( overlap_Q1.ptr, overlap_Q1.getSize() ); - Parallel_Reduce::reduce_double_pool( overlap_Q2.ptr, overlap_Q2.getSize() ); -#endif - - // do not need to output here - //this->output_overlap_Q( ofs, overlap_Q1, overlap_Q2 ); - - - - //------------------------------------- - // 5. Generate descriptors for each atom - //------------------------------------- - - for (int it=0; itgenerate_descriptor(overlap_Q1, overlap_Q2, it ,ia, d, nd); - - ofs << ucell.atoms[it].label << " atom_index " << ia+1 << " n_descriptor " << nd << std::endl; - for(int id=0; id0 && id%8==0) ofs << std::endl; - // if(std::abs(d[id]>1.0e-9)) ofs << d[id] << " "; - // else ofs << "0 "; - ofs << d[id] << " "; - } - ofs << std::endl; - - delete[] d; - } - } - - - - if (GlobalV::MY_RANK==0) ofs.close(); - return; -*/ + //------------------------------------- + // 4. Compute overlap_Q1 and Q2 + //------------------------------------- + // nks now is the reduced k-points. + for (int ik=0; ikngk[ik]; + GlobalV::ofs_running << " --------------------------------------------------------" << std::endl; + GlobalV::ofs_running << " Print the overlap matrixs Q and S for this kpoint"; + GlobalV::ofs_running << "\n " << std::setw(8) << "ik" << std::setw(8) << "npw"; + GlobalV::ofs_running << "\n " << std::setw(8) << ik+1 << std::setw(8) << npw << std::endl; + GlobalV::ofs_running << " --------------------------------------------------------" << std::endl; + // search for all k-points. + psi.fix_k(ik); + this->jlq3d_overlap(overlap_Q1, overlap_Q2, ik, ik, npw, psi); + ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running,"jlq3d_overlap"); + } + + #ifdef __MPI + Parallel_Reduce::reduce_double_pool( overlap_Q1.ptr, overlap_Q1.getSize() ); + Parallel_Reduce::reduce_double_pool( overlap_Q2.ptr, overlap_Q2.getSize() ); + #endif + + // do not need to output here + //this->output_overlap_Q( ofs, overlap_Q1, overlap_Q2 ); + + + + //------------------------------------- + // 5. Generate descriptors for each atom + //------------------------------------- + + for (int it=0; itgenerate_descriptor(overlap_Q1, overlap_Q2, it ,ia, d, nd); + + ofs << ucell.atoms[it].label << " atom_index " << ia+1 << " n_descriptor " << nd << std::endl; + for(int id=0; id0 && id%8==0) ofs << std::endl; + // if(std::abs(d[id]>1.0e-9)) ofs << d[id] << " "; + // else ofs << "0 "; + ofs << d[id] << " "; + } + ofs << std::endl; + + delete[] d; + } + } + + + + if (GlobalV::MY_RANK==0) ofs.close(); + return; + */ } /* @@ -340,48 +343,43 @@ normalization 2015-12-29 for (int ie=0; ie < nmax; ie++) void Numerical_Descriptor::init_mu_index(const UnitCell& ucell) { - GlobalV::ofs_running << " Initialize the mu index for deepks" << std::endl; - GlobalV::ofs_running << " lmax = " << this->lmax << std::endl; - GlobalV::ofs_running << " nmax = " << this->nmax << std::endl; + GlobalV::ofs_running << " Initialize the mu index for deepks" << std::endl; + GlobalV::ofs_running << " lmax = " << this->lmax << std::endl; + GlobalV::ofs_running << " nmax = " << this->nmax << std::endl; Numerical_Descriptor::mu_index = new ModuleBase::IntArray[ucell.ntype]; - assert(lmax>=0); - assert(nmax>0); - - int mu=0; - for (int it=0; itmu_index[it].create( - ucell.atoms[it].na, - lmax+1, // l starts from 0 - nmax, - 2*lmax+1); // m ==> 2*l+1 - - GlobalV::ofs_running << "Type " << it+1 - << " number_of_atoms " << ucell.atoms[it].na - << " number_of_L " << lmax+1 - << " number_of_n " << nmax - << " number_of_m " << 2*lmax+1 << std::endl; - - for (int ia=0; iamu_index[it](ia,l,n,m) = mu; - mu++; - } - } - } - } - - } - - this->nlocal = mu; - GlobalV::ofs_running << " total number of atomic orbitals " << nlocal << std::endl; - - return; + assert(lmax >= 0); + assert(nmax > 0); + + int mu = 0; + for (int it = 0; it < ucell.ntype; ++it) + { + this->mu_index[it].create(ucell.atoms[it].na, + lmax + 1, // l starts from 0 + nmax, + 2 * lmax + 1); // m ==> 2*l+1 + + GlobalV::ofs_running << "Type " << it + 1 << " number_of_atoms " << ucell.atoms[it].na << " number_of_L " + << lmax + 1 << " number_of_n " << nmax << " number_of_m " << 2 * lmax + 1 << std::endl; + + for (int ia = 0; ia < ucell.atoms[it].na; ia++) + { + for (int l = 0; l < lmax + 1; l++) + { + for (int n = 0; n < nmax; n++) + { + for (int m = 0; m < 2 * l + 1; m++) + { + this->mu_index[it](ia, l, n, m) = mu; + mu++; + } + } + } + } + } + + this->nlocal = mu; + GlobalV::ofs_running << " total number of atomic orbitals " << nlocal << std::endl; + + return; } diff --git a/source/module_io/numerical_descriptor.h b/source/module_io/numerical_descriptor.h index 796d14706e..79f40416a6 100644 --- a/source/module_io/numerical_descriptor.h +++ b/source/module_io/numerical_descriptor.h @@ -4,43 +4,46 @@ //========================================================== #ifndef NUMERICAL_DESCRIPTOR_H #define NUMERICAL_DESCRIPTOR_H -#include "../module_base/global_function.h" -#include "../module_base/global_variable.h" -#include "../module_base/intarray.h" -#include "../module_base/complexmatrix.h" +#include "../source_base/complexmatrix.h" +#include "../source_base/global_function.h" +#include "../source_base/global_variable.h" +#include "../source_base/intarray.h" #include "bessel_basis.h" #include "module_psi/psi.h" //========================================================== // CLASS : -// NAME : Numerical_Descriptor +// NAME : Numerical_Descriptor //========================================================== class Numerical_Descriptor { - public: - Numerical_Descriptor(); - ~Numerical_Descriptor(); + public: + Numerical_Descriptor(); + ~Numerical_Descriptor(); - void output_descriptor(const UnitCell& ucell, const psi::Psi> &psi, const int &lmax_in, const double &rcut_in, const double &tol_in, const int nks); // mohan added 2021-01-03 + void output_descriptor(const UnitCell& ucell, + const psi::Psi>& psi, + const int& lmax_in, + const double& rcut_in, + const double& tol_in, + const int nks); // mohan added 2021-01-03 - private: + private: + bool init_label; - bool init_label; + int lmax; // lmax for descriptor + int nmax; // nmax for descriptor + int nlocal; // total number of atomic orbitals - int lmax; // lmax for descriptor - int nmax; // nmax for descriptor - int nlocal; // total number of atomic orbitals + Bessel_Basis bessel_basis; - Bessel_Basis bessel_basis; + ModuleBase::IntArray* mu_index; + void init_mu_index(const UnitCell& ucell); // mohan added 2021-01-03 - ModuleBase::IntArray *mu_index; - void init_mu_index(const UnitCell& ucell);//mohan added 2021-01-03 - - // void jlq3d_overlap(ModuleBase::realArray &overlap_Q1, ModuleBase::realArray &overlap_Q2, - // const int &ik_ibz, const int &ik, const int &np, const psi::Psi> &psi); - - // void generate_descriptor(ModuleBase::realArray &overlap_Q1, ModuleBase::realArray &overlap_Q2, - // const int &it, const int &ia, double *d, const int &nd); + // void jlq3d_overlap(ModuleBase::realArray &overlap_Q1, ModuleBase::realArray &overlap_Q2, + // const int &ik_ibz, const int &ik, const int &np, const psi::Psi> &psi); + // void generate_descriptor(ModuleBase::realArray &overlap_Q1, ModuleBase::realArray &overlap_Q2, + // const int &it, const int &ia, double *d, const int &nd); }; #endif diff --git a/source/module_io/orb_io.cpp b/source/module_io/orb_io.cpp index bb039a84d7..6b5d33cc4f 100644 --- a/source/module_io/orb_io.cpp +++ b/source/module_io/orb_io.cpp @@ -1,7 +1,8 @@ #include "module_io/orb_io.h" -#include "module_base/tool_quit.h" + +#include "source_base/tool_quit.h" #ifdef __MPI -#include "module_base/parallel_common.h" +#include "source_base/parallel_common.h" #endif void ModuleIO::read_abacus_orb(std::ifstream& ifs, @@ -13,9 +14,9 @@ void ModuleIO::read_abacus_orb(std::ifstream& ifs, std::vector>& radials, const int rank) { - nr = 0; // number of grid points - dr = 0; // grid spacing - int lmax = 0, nchi = 0; // number of radial functions + nr = 0; // number of grid points + dr = 0; // grid spacing + int lmax = 0, nchi = 0; // number of radial functions std::vector> radial_map_; // build a map from [l][izeta] to 1-d array index std::string tmp; // first read the header @@ -110,7 +111,7 @@ void ModuleIO::read_abacus_orb(std::ifstream& ifs, ifs >> radials[ichi][ir]; } } - // broadcast the radial functions + // broadcast the radial functions #ifdef __MPI Parallel_Common::bcast_int(ichi); // let other ranks know where to store the radial function Parallel_Common::bcast_double(radials[ichi].data(), nr); @@ -146,8 +147,8 @@ void ModuleIO::write_abacus_orb(std::ofstream& ofs, ofs << std::left << std::setw(28) << "Element" << elem << std::endl; ofs << std::left << std::setw(28) << "Energy Cutoff(Ry)" << ecut << std::endl; // rcut .1f, not scientific - ofs << std::left << std::setw(28) << "Radius Cutoff(a.u.)" - << std::fixed << std::setprecision(1) << dr * (nr - 1) << std::endl; + ofs << std::left << std::setw(28) << "Radius Cutoff(a.u.)" << std::fixed << std::setprecision(1) + << dr * (nr - 1) << std::endl; ofs << std::left << std::setw(28) << "Lmax" << lmax << std::endl; for (int l = 0; l != nzeta.size(); ++l) { @@ -168,20 +169,17 @@ void ModuleIO::write_abacus_orb(std::ofstream& ofs, { for (int izeta = 0; izeta < nzeta[l]; izeta++) { - ofs << std::right << std::setw(20) << "Type" - << std::right << std::setw(20) << "L" - << std::right << std::setw(20) << "N" << std::endl; - ofs << std::right << std::setw(20) << 0 - << std::right << std::setw(20) << l - << std::right << std::setw(20) << izeta; + ofs << std::right << std::setw(20) << "Type" << std::right << std::setw(20) << "L" << std::right + << std::setw(20) << "N" << std::endl; + ofs << std::right << std::setw(20) << 0 << std::right << std::setw(20) << l << std::right + << std::setw(20) << izeta; for (int i = 0; i < nr; i++) { if (i % 4 == 0) { ofs << std::endl; } - ofs << std::left << std::setw(22) << std::setprecision(14) - << std::scientific << radials[ichi][i]; + ofs << std::left << std::setw(22) << std::setprecision(14) << std::scientific << radials[ichi][i]; } ofs << std::endl; ichi++; diff --git a/source/module_io/output.h b/source/module_io/output.h index 55f8dfb7e7..c506bcc2ca 100644 --- a/source/module_io/output.h +++ b/source/module_io/output.h @@ -5,64 +5,72 @@ #ifndef OUTPUT_H #define OUTPUT_H -#include "../module_base/realarray.h" -#include "../module_base/matrix3.h" -#include "../module_base/complexmatrix.h" -#include "../module_base/matrix.h" +#include "../source_base/complexmatrix.h" +#include "../source_base/matrix.h" +#include "../source_base/matrix3.h" +#include "../source_base/realarray.h" class output { -public: + public: //============================ // Print realArray (3D or 4D) //============================ - static void printr3_d(std::ofstream &ofs,const std::string &s,const ModuleBase::realArray &u); - static void printr4_d(std::ofstream &ofs,const std::string &s,const ModuleBase::realArray &u); + static void printr3_d(std::ofstream& ofs, const std::string& s, const ModuleBase::realArray& u); + static void printr4_d(std::ofstream& ofs, const std::string& s, const ModuleBase::realArray& u); //=========================== // print matrix3 //=========================== - static void printM3(std::ofstream &ofs,const std::string& description, const ModuleBase::Matrix3 &m); - static void printM3(const std::string &description, const ModuleBase::Matrix3 &m); + static void printM3(std::ofstream& ofs, const std::string& description, const ModuleBase::Matrix3& m); + static void printM3(const std::string& description, const ModuleBase::Matrix3& m); //=============================== // print matrix //=============================== - static void printrm(std::ofstream &ofs,const std::string &s, const ModuleBase::matrix &m, const double &limit = 1.0e-15); - static void printrm(const std::string &s, const ModuleBase::matrix &m, const double &limit = 1.0e-15); - + static void printrm(std::ofstream& ofs, + const std::string& s, + const ModuleBase::matrix& m, + const double& limit = 1.0e-15); + static void printrm(const std::string& s, const ModuleBase::matrix& m, const double& limit = 1.0e-15); //=============================== // print ModuleBase::ComplexMatrix //=============================== - static void printcm(std::ofstream &ofs,const std::string &s, const ModuleBase::ComplexMatrix &m); - - static void printcm(const std::string &s, const ModuleBase::ComplexMatrix &m); + static void printcm(std::ofstream& ofs, const std::string& s, const ModuleBase::ComplexMatrix& m); - static void printcm_real(const std::string &s, const ModuleBase::ComplexMatrix &m,const double &limit = 1.0e-15); + static void printcm(const std::string& s, const ModuleBase::ComplexMatrix& m); - static void printcm_real_limit_hermit(const std::string &s, const ModuleBase::ComplexMatrix &m,const double &limit); + static void printcm_real(const std::string& s, const ModuleBase::ComplexMatrix& m, const double& limit = 1.0e-15); - static void printcm_imag(const std::string &s, const ModuleBase::ComplexMatrix &m,const double &limit = 1.0e-15); - static void printcm_norm(const std::string &s, const ModuleBase::ComplexMatrix &m, const double &limit); - static void printcm_norm(std::ofstream &ofs, const std::string &s, const ModuleBase::ComplexMatrix &m, const double &limit); + static void printcm_real_limit_hermit(const std::string& s, + const ModuleBase::ComplexMatrix& m, + const double& limit); + static void printcm_imag(const std::string& s, const ModuleBase::ComplexMatrix& m, const double& limit = 1.0e-15); + static void printcm_norm(const std::string& s, const ModuleBase::ComplexMatrix& m, const double& limit); + static void printcm_norm(std::ofstream& ofs, + const std::string& s, + const ModuleBase::ComplexMatrix& m, + const double& limit); //*************** // Template //*************** -public: - + public: template - static void printr1_d(std::ofstream &ofs, const std::string &s,T *u, int n1) + static void printr1_d(std::ofstream& ofs, const std::string& s, T* u, int n1) { - ofs<<"\n\n "< - static void printr1_d(const std::string &s, T *u,const int n1) + static void printr1_d(const std::string& s, T* u, const int n1) { std::cout << "\n " << s << " Dimension = " << n1; - if (n1 <= 0)return; - if (u == 0) return; - //std::cout.setf(ios::scientific, ios::floatfield); - for (int i = 0;i < n1;i++) + if (n1 <= 0) + return; + if (u == 0) + return; + // std::cout.setf(ios::scientific, ios::floatfield); + for (int i = 0; i < n1; i++) { - if (i % 8 == 0) std::cout << "\n"; + if (i % 8 == 0) + std::cout << "\n"; std::cout << std::setw(12) << u[i]; } - std::cout< - static void printV3(std::ofstream &ofs, const ModuleBase::Vector3 v) + static void printV3(std::ofstream& ofs, const ModuleBase::Vector3 v) { ofs << " "; ofs << std::setw(18) << v.x << std::setw(18) << v.y << std::setw(18) << v.z << std::endl; } template - static void printV3(const ModuleBase::Vector3 v) + static void printV3(const ModuleBase::Vector3 v) { std::cout << " "; std::cout << std::setw(18) << v.x << std::setw(18) << v.y << std::setw(18) << v.z << std::endl; } template - static void printv31_d(std::ofstream &ofs, const std::string &s, ModuleBase::Vector3 *u, int n1) + static void printv31_d(std::ofstream& ofs, const std::string& s, ModuleBase::Vector3* u, int n1) { ofs << " " << s << " Dimension = " << n1 << std::endl; - if (n1 <= 0)return; - if (u == 0) return; - for (int i = 0;i < n1;i++) + if (n1 <= 0) + return; + if (u == 0) + return; + for (int i = 0; i < n1; i++) { printV3(ofs, u[i]); } } template - static void printv31_d(const std::string &s, ModuleBase::Vector3 *u, int n1) + static void printv31_d(const std::string& s, ModuleBase::Vector3* u, int n1) { std::cout << "\n " << s << " dimension = " << n1; - if (n1 <= 0)return; - if (u == 0) return; - for (int i = 0;i < n1;i++) + if (n1 <= 0) + return; + if (u == 0) + return; + for (int i = 0; i < n1; i++) { printV3(u[i]); } } - }; #endif // OUTPUT_H diff --git a/source/module_io/output_log.cpp b/source/module_io/output_log.cpp index dd79f5bd6a..eb58c7ee38 100644 --- a/source/module_io/output_log.cpp +++ b/source/module_io/output_log.cpp @@ -1,11 +1,10 @@ #include "output_log.h" #include "module_parameter/parameter.h" -#include "module_base/constants.h" -#include "module_base/formatter.h" -#include "module_base/global_variable.h" - -#include "module_base/parallel_comm.h" +#include "source_base/constants.h" +#include "source_base/formatter.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_comm.h" #ifdef __MPI #include @@ -13,12 +12,13 @@ namespace ModuleIO { -void output_convergence_after_scf(const bool &convergence, double& energy, std::ofstream& ofs_running) +void output_convergence_after_scf(const bool& convergence, double& energy, std::ofstream& ofs_running) { if (convergence) { ofs_running << "\n charge density convergence is achieved" << std::endl; - ofs_running << " final etot is " << std::setprecision(11) << energy * ModuleBase::Ry_to_eV << " eV" << std::endl; + ofs_running << " final etot is " << std::setprecision(11) << energy * ModuleBase::Ry_to_eV << " eV" + << std::endl; } else { @@ -49,7 +49,7 @@ void output_after_relax(bool conv_ion, bool conv_esolver, std::ofstream& ofs_run } } -void output_efermi(const bool &convergence, double& efermi, std::ofstream& ofs_running) +void output_efermi(const bool& convergence, double& efermi, std::ofstream& ofs_running) { if (convergence && PARAM.inp.out_level != "m") { @@ -251,25 +251,27 @@ void print_force(std::ofstream& ofs_running, } } - - FmtTable fmt(/*titles=*/titles, - /*nrows=*/atom_label.size(), - /*formats=*/{"%8s", "%20.10f", "%20.10f", "%20.10f"}, + FmtTable fmt(/*titles=*/titles, + /*nrows=*/atom_label.size(), + /*formats=*/{"%8s", "%20.10f", "%20.10f", "%20.10f"}, 0, - {FmtTable::Align::RIGHT,FmtTable::Align::RIGHT}); + {FmtTable::Align::RIGHT, FmtTable::Align::RIGHT}); - fmt << atom_label << force_x << force_y << force_z; - table = fmt.str(); + fmt << atom_label << force_x << force_y << force_z; + table = fmt.str(); ofs_running << table << std::endl; - if (PARAM.inp.test_force) - { - std::cout << table << std::endl; - } + if (PARAM.inp.test_force) + { + std::cout << table << std::endl; + } } -void print_stress(const std::string& name, const ModuleBase::matrix& scs, - const bool screen, const bool ry, std::ofstream &ofs) +void print_stress(const std::string& name, + const ModuleBase::matrix& scs, + const bool screen, + const bool ry, + std::ofstream& ofs) { const double output_acc = 1.0e-8; double unit_transform = 1; @@ -306,28 +308,27 @@ void print_stress(const std::string& name, const ModuleBase::matrix& scs, double pressure = (scs(0, 0) + scs(1, 1) + scs(2, 2)) / 3.0 * unit_transform; - FmtTable fmt(/*titles=*/titles, - /*nrows=*/3, - /*formats=*/{"%20.10f", "%20.10f", "%20.10f"}, 0, - {FmtTable::Align::RIGHT,FmtTable::Align::RIGHT}); + FmtTable fmt(/*titles=*/titles, + /*nrows=*/3, + /*formats=*/{"%20.10f", "%20.10f", "%20.10f"}, + 0, + {FmtTable::Align::RIGHT, FmtTable::Align::RIGHT}); fmt << stress_x << stress_y << stress_z; table = fmt.str(); ofs << table; if (name == "TOTAL-STRESS") { - ofs << " TOTAL-PRESSURE (DO NOT INCLUDE KINETIC PART OF IONS): " << std::fixed - << std::setprecision(6) << pressure << unit - << std::endl; + ofs << " TOTAL-PRESSURE (DO NOT INCLUDE KINETIC PART OF IONS): " << std::fixed << std::setprecision(6) + << pressure << unit << std::endl; } if (screen) { std::cout << table; if (name == "TOTAL-STRESS") { - std::cout << " TOTAL-PRESSURE (DO NOT INCLUDE KINETIC PART OF IONS): " << std::fixed - << std::setprecision(6) << pressure << unit - << std::endl; + std::cout << " TOTAL-PRESSURE (DO NOT INCLUDE KINETIC PART OF IONS): " << std::fixed << std::setprecision(6) + << pressure << unit << std::endl; } } return; @@ -336,7 +337,7 @@ void print_stress(const std::string& name, const ModuleBase::matrix& scs, void write_head(std::ofstream& ofs, const int& istep, const int& iter, const std::string& basisname) { ofs << "\n " << basisname << " ALGORITHM --------------- ION=" << std::setw(4) << istep + 1 - << " ELEC=" << std::setw(4) << iter << "--------------------------------\n"; + << " ELEC=" << std::setw(4) << iter << "--------------------------------\n"; } -}// namespace ModuleIO +} // namespace ModuleIO diff --git a/source/module_io/output_log.h b/source/module_io/output_log.h index 5610864863..a62ec94ff0 100644 --- a/source/module_io/output_log.h +++ b/source/module_io/output_log.h @@ -1,11 +1,11 @@ #ifndef OUTPUT_LOG #define OUTPUT_LOG -#include - -#include "module_base/global_variable.h" -#include "module_base/matrix.h" #include "module_cell/unitcell.h" +#include "source_base/global_variable.h" +#include "source_base/matrix.h" + +#include namespace ModuleIO { @@ -14,7 +14,9 @@ namespace ModuleIO /// @param convergence if is convergence /// @param energy the total energy in Ry /// @param ofs_running the output stream -void output_convergence_after_scf(const bool&convergence, double& energy, std::ofstream& ofs_running = GlobalV::ofs_running); +void output_convergence_after_scf(const bool& convergence, + double& energy, + std::ofstream& ofs_running = GlobalV::ofs_running); /// @brief output after relaxation /// @param conv_ion if is convergence for ions @@ -26,7 +28,7 @@ void output_after_relax(bool conv_ion, bool conv_esolver, std::ofstream& ofs_run /// @param convergence if is convergence /// @param efermi /// @param ofs_running the output stream -void output_efermi(const bool &convergence, double& efermi, std::ofstream& ofs_running = GlobalV::ofs_running); +void output_efermi(const bool& convergence, double& efermi, std::ofstream& ofs_running = GlobalV::ofs_running); /// @brief calculate and output the vacuum level /// We first determine the vacuum direction, then get the vacuum position based on the minimum of charge density, @@ -64,11 +66,11 @@ void print_force(std::ofstream& ofs, /// @param name stress term name /// @param f stress components /// @param ry true if the unit of force is a.u. -void print_stress(const std::string& name, - const ModuleBase::matrix& scs, - const bool screen, - const bool ry, - std::ofstream &ofs); +void print_stress(const std::string& name, + const ModuleBase::matrix& scs, + const bool screen, + const bool ry, + std::ofstream& ofs); /// @brief write head for scf iteration /// @param ofs_running output stream diff --git a/source/module_io/output_mulliken.cpp b/source/module_io/output_mulliken.cpp index 8a31995b40..16b82b61ce 100644 --- a/source/module_io/output_mulliken.cpp +++ b/source/module_io/output_mulliken.cpp @@ -1,10 +1,10 @@ #include "module_io/output_mulliken.h" #include "module_parameter/parameter.h" -#include "module_base/formatter.h" -#include "module_base/name_angular.h" -#include "module_base/scalapack_connector.h" -#include "module_base/tool_quit.h" +#include "source_base/formatter.h" +#include "source_base/name_angular.h" +#include "source_base/scalapack_connector.h" +#include "source_base/tool_quit.h" #include @@ -440,11 +440,11 @@ void Output_Mulliken::print_atom_mag(const std::vector>& { const std::vector title = {"Total Magnetism (uB)", ""}; const std::vector fmts = {"%-26s", "%20.10f"}; - FmtTable table(/*titles=*/title, - /*nrows=*/nat, - /*formats=*/fmts, - /*indent=*/0, - /*align=*/{/*value*/FmtTable::Align::RIGHT, /*title*/FmtTable::Align::LEFT}); + FmtTable table(/*titles=*/title, + /*nrows=*/nat, + /*formats=*/fmts, + /*indent=*/0, + /*align=*/{/*value*/ FmtTable::Align::RIGHT, /*title*/ FmtTable::Align::LEFT}); for (int iat = 0; iat < nat; ++iat) { atom_label.push_back(this->cell_index_->get_atom_label(iat, true)); @@ -460,11 +460,11 @@ void Output_Mulliken::print_atom_mag(const std::vector>& std::vector azimuth(nat, 0.0); const std::vector title = {"Total Magnetism (uB)", "x", "y", "z"}; const std::vector fmts = {"%26s", "%20.10f", "%20.10f", "%20.10f"}; - FmtTable table(/*titles=*/title, - /*nrows=*/nat, - /*formats=*/fmts, - /*indent=*/0, - /*align=*/{/*value*/FmtTable::Align::RIGHT, /*title*/FmtTable::Align::RIGHT}); + FmtTable table(/*titles=*/title, + /*nrows=*/nat, + /*formats=*/fmts, + /*indent=*/0, + /*align=*/{/*value*/ FmtTable::Align::RIGHT, /*title*/ FmtTable::Align::RIGHT}); for (int iat = 0; iat < nat; ++iat) { atom_label.push_back(this->cell_index_->get_atom_label(iat, true)); @@ -478,13 +478,14 @@ void Output_Mulliken::print_atom_mag(const std::vector>& table << atom_label << mag_x << mag_y << mag_z; os << table.str() << std::endl; /// output mag in polar coordinates - const std::vector title_polar = {"Total Magnetism (uB)", "Magnitude (uB)", "Polar (degree)", "Azimuth (degree)"}; + const std::vector title_polar + = {"Total Magnetism (uB)", "Magnitude (uB)", "Polar (degree)", "Azimuth (degree)"}; const std::vector fmts_polar = {"%26s", "%20.10f", "%20.10f", "%20.10f"}; - FmtTable table_polar(/*titles=*/title_polar, - /*nrows=*/nat, - /*formats=*/fmts_polar, - /*indent=*/0, - /*align=*/{/*value*/FmtTable::Align::RIGHT, /*title*/FmtTable::Align::RIGHT}); + FmtTable table_polar(/*titles=*/title_polar, + /*nrows=*/nat, + /*formats=*/fmts_polar, + /*indent=*/0, + /*align=*/{/*value*/ FmtTable::Align::RIGHT, /*title*/ FmtTable::Align::RIGHT}); table_polar << atom_label << magnitude << polar << azimuth; os << table_polar.str() << std::endl; } diff --git a/source/module_io/output_mulliken.h b/source/module_io/output_mulliken.h index 42cbf38927..077032dc48 100644 --- a/source/module_io/output_mulliken.h +++ b/source/module_io/output_mulliken.h @@ -1,14 +1,14 @@ #ifndef OUTPUT_MULLIKEN_H #define OUTPUT_MULLIKEN_H -#include "module_base/complexmatrix.h" -#include "module_base/matrix.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_cell/cell_index.h" #include "module_elecstate/elecstate_lcao.h" +#include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/dspin_lcao.h" #include "module_io/output_dmk.h" #include "module_io/output_sk.h" -#include "module_base/formatter.h" -#include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/dspin_lcao.h" +#include "source_base/complexmatrix.h" +#include "source_base/formatter.h" +#include "source_base/matrix.h" #include #include @@ -133,33 +133,33 @@ void cal_mag(Parallel_Orbitals* pv, std::vector mag_y(ucell.nat, 0.0); std::vector mag_z(ucell.nat, 0.0); auto atomLabels = ucell.get_atomLabels(); - if(PARAM.inp.nspin == 2) + if (PARAM.inp.nspin == 2) { - auto sc_lambda - = new hamilt::DeltaSpin>(nullptr, - kv.kvec_d, - dynamic_cast*>(p_ham)->getHR(), - ucell, - &gd, - two_center_bundle.overlap_orb_onsite.get(), - orb.cutoffs()); - dynamic_cast*>(pelec)->get_DM()->switch_dmr(2); - moments = sc_lambda->cal_moment(dmr, constrain); - dynamic_cast*>(pelec)->get_DM()->switch_dmr(0); - delete sc_lambda; - //const std::vector title = {"Total Magnetism (uB)", ""}; - //const std::vector fmts = {"%-26s", "%20.10f"}; - //FmtTable table(title, ucell.nat, fmts, {FmtTable::Align::RIGHT, FmtTable::Align::LEFT}); - for(int iat=0;iat>( + nullptr, + kv.kvec_d, + dynamic_cast*>(p_ham)->getHR(), + ucell, + &gd, + two_center_bundle.overlap_orb_onsite.get(), + orb.cutoffs()); + dynamic_cast*>(pelec)->get_DM()->switch_dmr(2); + moments = sc_lambda->cal_moment(dmr, constrain); + dynamic_cast*>(pelec)->get_DM()->switch_dmr(0); + delete sc_lambda; + // const std::vector title = {"Total Magnetism (uB)", ""}; + // const std::vector fmts = {"%-26s", "%20.10f"}; + // FmtTable table(title, ucell.nat, fmts, {FmtTable::Align::RIGHT, FmtTable::Align::LEFT}); + for (int iat = 0; iat < ucell.nat; iat++) { atom_mag[iat][0] = 0.0; atom_mag[iat][1] = moments[iat]; - // mag_z[iat] = moments[iat]; + // mag_z[iat] = moments[iat]; } - //table << atomLabels << mag_z; - //GlobalV::ofs_running << table.str() << std::endl; + // table << atomLabels << mag_z; + // GlobalV::ofs_running << table.str() << std::endl; } - else if(PARAM.inp.nspin == 4) + else if (PARAM.inp.nspin == 4) { auto sc_lambda = new hamilt::DeltaSpin, std::complex>>( nullptr, @@ -171,21 +171,21 @@ void cal_mag(Parallel_Orbitals* pv, orb.cutoffs()); moments = sc_lambda->cal_moment(dmr, constrain); delete sc_lambda; - //const std::vector title = {"Total Magnetism (uB)", "", "", ""}; - //const std::vector fmts = {"%-26s", "%20.10f", "%20.10f", "%20.10f"}; - //FmtTable table(title, ucell.nat, fmts, {FmtTable::Align::RIGHT, FmtTable::Align::LEFT}); - for(int iat=0;iat title = {"Total Magnetism (uB)", "", "", ""}; + // const std::vector fmts = {"%-26s", "%20.10f", "%20.10f", "%20.10f"}; + // FmtTable table(title, ucell.nat, fmts, {FmtTable::Align::RIGHT, FmtTable::Align::LEFT}); + for (int iat = 0; iat < ucell.nat; iat++) { atom_mag[iat][0] = 0.0; - atom_mag[iat][1] = moments[iat*3]; - atom_mag[iat][2] = moments[iat*3+1]; - atom_mag[iat][3] = moments[iat*3+2]; - //mag_x[iat] = moments[iat*3]; - //mag_y[iat] = moments[iat*3+1]; - //mag_z[iat] = moments[iat*3+2]; + atom_mag[iat][1] = moments[iat * 3]; + atom_mag[iat][2] = moments[iat * 3 + 1]; + atom_mag[iat][3] = moments[iat * 3 + 2]; + // mag_x[iat] = moments[iat*3]; + // mag_y[iat] = moments[iat*3+1]; + // mag_z[iat] = moments[iat*3+2]; } - //table << atomLabels << mag_x << mag_y << mag_z; - //GlobalV::ofs_running << table.str() << std::endl; + // table << atomLabels << mag_x << mag_y << mag_z; + // GlobalV::ofs_running << table.str() << std::endl; } ucell.atom_mulliken = atom_mag; } diff --git a/source/module_io/output_sk.cpp b/source/module_io/output_sk.cpp index c3f2359d19..035186f90d 100644 --- a/source/module_io/output_sk.cpp +++ b/source/module_io/output_sk.cpp @@ -1,6 +1,6 @@ #include "output_sk.h" -#include "module_base/tool_quit.h" +#include "source_base/tool_quit.h" namespace ModuleIO { @@ -30,8 +30,7 @@ std::complex* Output_Sk>::get_Sk(int ik) } if (this->nspin_ == 4) { - dynamic_cast, std::complex>*>(this->p_hamilt_) - ->updateSk(ik, 1); + dynamic_cast, std::complex>*>(this->p_hamilt_)->updateSk(ik, 1); return dynamic_cast, std::complex>*>(this->p_hamilt_)->getSk(); } else diff --git a/source/module_io/para_json.cpp b/source/module_io/para_json.cpp index 8f0fdedf86..526567429e 100644 --- a/source/module_io/para_json.cpp +++ b/source/module_io/para_json.cpp @@ -1,7 +1,7 @@ #include "para_json.h" -#include "module_base/global_variable.h" +#include "source_base/global_variable.h" #include #include diff --git a/source/module_io/print_info.cpp b/source/module_io/print_info.cpp index bed4863c89..8519eff19f 100644 --- a/source/module_io/print_info.cpp +++ b/source/module_io/print_info.cpp @@ -1,8 +1,7 @@ #include "print_info.h" -#include "module_base/global_variable.h" #include "module_parameter/parameter.h" - +#include "source_base/global_variable.h" namespace ModuleIO { @@ -11,44 +10,42 @@ void setup_parameters(UnitCell& ucell, K_Vectors& kv) { ModuleBase::TITLE("ModuleIO", "setup_parameters"); - if(PARAM.inp.calculation=="scf" - || PARAM.inp.calculation=="relax" - || PARAM.inp.calculation=="cell-relax" - || PARAM.inp.calculation=="nscf" - || PARAM.inp.calculation=="get_pchg" - || PARAM.inp.calculation=="get_wf" - || PARAM.inp.calculation=="md") - { - std::cout << " ---------------------------------------------------------" << std::endl; - if(PARAM.inp.calculation=="scf") - { - std::cout << " Self-consistent calculations for electrons" << std::endl; - } - else if(PARAM.inp.calculation=="test") - { - std::cout << " Test run" << std::endl; - } - if(PARAM.inp.calculation=="relax") - { + if (PARAM.inp.calculation == "scf" || PARAM.inp.calculation == "relax" || PARAM.inp.calculation == "cell-relax" + || PARAM.inp.calculation == "nscf" || PARAM.inp.calculation == "get_pchg" || PARAM.inp.calculation == "get_wf" + || PARAM.inp.calculation == "md") + { + std::cout << " ---------------------------------------------------------" << std::endl; + if (PARAM.inp.calculation == "scf") + { + std::cout << " Self-consistent calculations for electrons" << std::endl; + } + else if (PARAM.inp.calculation == "test") + { + std::cout << " Test run" << std::endl; + } + if (PARAM.inp.calculation == "relax") + { std::cout << " Ion relaxation calculations" << std::endl; - } - if(PARAM.inp.calculation=="cell-relax") + } + if (PARAM.inp.calculation == "cell-relax") { std::cout << " Cell relaxation calculations" << std::endl; } - if(PARAM.inp.calculation=="md") - { - std::cout << " Molecular Dynamics simulations" << std::endl; + if (PARAM.inp.calculation == "md") + { + std::cout << " Molecular Dynamics simulations" << std::endl; - std::cout << " ---------------------------------------------------------" << std::endl; + std::cout << " ---------------------------------------------------------" << std::endl; if (PARAM.mdp.md_type == "fire") { - std::cout << " ENSEMBLE : " << "FIRE" << std::endl; + std::cout << " ENSEMBLE : " + << "FIRE" << std::endl; } else if (PARAM.mdp.md_type == "nve") { - std::cout << " ENSEMBLE : " << "NVE" << std::endl; + std::cout << " ENSEMBLE : " + << "NVE" << std::endl; } else if (PARAM.mdp.md_type == "nvt") { @@ -62,136 +59,132 @@ void setup_parameters(UnitCell& ucell, K_Vectors& kv) } else if (PARAM.mdp.md_type == "langevin") { - std::cout << " ENSEMBLE : " << "Langevin" << std::endl; + std::cout << " ENSEMBLE : " + << "Langevin" << std::endl; } else if (PARAM.mdp.md_type == "msst") { - std::cout << " ENSEMBLE : " << "MSST" << std::endl; + std::cout << " ENSEMBLE : " + << "MSST" << std::endl; } std::cout << " Time interval(fs) : " << PARAM.mdp.md_dt << std::endl; } std::cout << " ---------------------------------------------------------" << std::endl; + std::cout << " " << std::setw(8) << "SPIN" << std::setw(16) << "KPOINTS" << std::setw(12) << "PROCESSORS" + << std::setw(12) << "THREADS"; - std::cout << " " << std::setw(8) << "SPIN" - << std::setw(16) << "KPOINTS" - << std::setw(12) << "PROCESSORS" - << std::setw(12) << "THREADS"; - - const bool orbinfo = (PARAM.inp.basis_type=="lcao" || PARAM.inp.basis_type=="lcao_in_pw" - || (PARAM.inp.basis_type=="pw" && PARAM.inp.init_wfc.substr(0, 3) == "nao")); - if (orbinfo) { std::cout << std::setw(12) << "NBASE"; } - - std::cout << std::endl; - std::cout << " " << std::setw(8) << PARAM.inp.nspin; - - if(PARAM.globalv.gamma_only_local) - { - std::cout << std::setw(16) << "Gamma"; - } - else - { - std::cout << std::setw(16) << kv.get_nkstot(); - } - - std::cout << std::setw(12) << GlobalV::NPROC - << std::setw(12) << PARAM.globalv.nthread_per_proc * GlobalV::NPROC; - if (orbinfo) { std::cout << std::setw(12) << PARAM.globalv.nlocal; } - - std::cout << std::endl; - - - - - std::cout << " ---------------------------------------------------------" << std::endl; - if(PARAM.inp.basis_type == "lcao") - { - std::cout << " Use Systematically Improvable Atomic bases" << std::endl; - } - else if(PARAM.inp.basis_type == "lcao_in_pw") - { - std::cout << " Expand Atomic bases into plane waves" << std::endl; - } - else if(PARAM.inp.basis_type == "pw") - { - std::cout << " Use plane wave basis" << std::endl; - } - std::cout << " ---------------------------------------------------------" << std::endl; - + const bool orbinfo = (PARAM.inp.basis_type == "lcao" || PARAM.inp.basis_type == "lcao_in_pw" + || (PARAM.inp.basis_type == "pw" && PARAM.inp.init_wfc.substr(0, 3) == "nao")); + if (orbinfo) + { + std::cout << std::setw(12) << "NBASE"; + } + std::cout << std::endl; + std::cout << " " << std::setw(8) << PARAM.inp.nspin; - //---------------------------------- - // second part - //---------------------------------- + if (PARAM.globalv.gamma_only_local) + { + std::cout << std::setw(16) << "Gamma"; + } + else + { + std::cout << std::setw(16) << kv.get_nkstot(); + } - std::cout << " " << std::setw(8) << "ELEMENT"; + std::cout << std::setw(12) << GlobalV::NPROC << std::setw(12) + << PARAM.globalv.nthread_per_proc * GlobalV::NPROC; + if (orbinfo) + { + std::cout << std::setw(12) << PARAM.globalv.nlocal; + } - if (orbinfo) - { - std::cout << std::setw(16) << "ORBITALS"; - std::cout << std::setw(12) << "NBASE"; - } - std::cout << std::setw(12) << "NATOM"; + std::cout << std::endl; - std::cout << std::setw(12) << "XC"; - std::cout << std::endl; + std::cout << " ---------------------------------------------------------" << std::endl; + if (PARAM.inp.basis_type == "lcao") + { + std::cout << " Use Systematically Improvable Atomic bases" << std::endl; + } + else if (PARAM.inp.basis_type == "lcao_in_pw") + { + std::cout << " Expand Atomic bases into plane waves" << std::endl; + } + else if (PARAM.inp.basis_type == "pw") + { + std::cout << " Use plane wave basis" << std::endl; + } + std::cout << " ---------------------------------------------------------" << std::endl; + //---------------------------------- + // second part + //---------------------------------- - const std::string spectrum = "spdfghi"; - for(int it=0; itnx << " * " << pw_rho->ny << " * " << pw_rho->nz << std::endl; - std::cout << " UNIFORM GRID DIM(BIG): " << pw_big->nbx << " * " << pw_big->nby << " * " << pw_big->nbz - << std::endl; + std::cout << " UNIFORM GRID DIM(BIG): " << pw_big->nbx << " * " << pw_big->nby << " * " << pw_big->nbz << std::endl; if (PARAM.globalv.double_grid) { std::cout << " UNIFORM GRID (DENSE) : " << pw_rhod->nx << " * " << pw_rhod->ny << " * " << pw_rhod->nz @@ -393,43 +385,45 @@ void print_wfcfft(const Input_para& inp, ModulePW::PW_Basis_K& pw_wfc, std::ofst void print_screen(const int& stress_step, const int& force_step, const int& istep) { std::cout << " -------------------------------------------" << std::endl; - GlobalV::ofs_running << "\n -------------------------------------------" << std::endl; + GlobalV::ofs_running << "\n -------------------------------------------" << std::endl; - if(PARAM.inp.calculation=="scf") //add 4 lines 2015-09-06, xiaohui - { + if (PARAM.inp.calculation == "scf") // add 4 lines 2015-09-06, xiaohui + { std::cout << " SELF-CONSISTENT : " << std::endl; - GlobalV::ofs_running << " SELF-CONSISTENT" << std::endl; - } - else if(PARAM.inp.calculation=="nscf") //add 4 lines 2015-09-06, xiaohui - { + GlobalV::ofs_running << " SELF-CONSISTENT" << std::endl; + } + else if (PARAM.inp.calculation == "nscf") // add 4 lines 2015-09-06, xiaohui + { std::cout << " NONSELF-CONSISTENT : " << std::endl; - GlobalV::ofs_running << " NONSELF-CONSISTENT" << std::endl; - } - else if(PARAM.inp.calculation=="md") - { + GlobalV::ofs_running << " NONSELF-CONSISTENT" << std::endl; + } + else if (PARAM.inp.calculation == "md") + { std::cout << " STEP OF MOLECULAR DYNAMICS : " << unsigned(istep) << std::endl; - GlobalV::ofs_running << " STEP OF MOLECULAR DYNAMICS : " << unsigned(istep) << std::endl; - } - else - { - if(PARAM.inp.relax_new) - { - std::cout << " STEP OF RELAXATION : " << unsigned(istep) << std::endl; - GlobalV::ofs_running << " STEP OF RELAXATION : " << unsigned(istep) << std::endl; - } - else if(PARAM.inp.calculation=="relax") //pengfei 2014-10-13 - { - std::cout << " STEP OF ION RELAXATION : " << unsigned(istep) << std::endl; - GlobalV::ofs_running << " STEP OF ION RELAXATION : " << unsigned(istep) << std::endl; - } - else if(PARAM.inp.calculation=="cell-relax") - { - std::cout << " RELAX CELL : " << unsigned(stress_step) << std::endl; - std::cout << " RELAX IONS : " << unsigned(force_step) << " (in total: " << unsigned(istep) << ")" << std::endl; - GlobalV::ofs_running << " RELAX CELL : " << unsigned(stress_step) << std::endl; - GlobalV::ofs_running << " RELAX IONS : " << unsigned(force_step) << " (in total: " << unsigned(istep) << ")" << std::endl; - } - } + GlobalV::ofs_running << " STEP OF MOLECULAR DYNAMICS : " << unsigned(istep) << std::endl; + } + else + { + if (PARAM.inp.relax_new) + { + std::cout << " STEP OF RELAXATION : " << unsigned(istep) << std::endl; + GlobalV::ofs_running << " STEP OF RELAXATION : " << unsigned(istep) << std::endl; + } + else if (PARAM.inp.calculation == "relax") // pengfei 2014-10-13 + { + std::cout << " STEP OF ION RELAXATION : " << unsigned(istep) << std::endl; + GlobalV::ofs_running << " STEP OF ION RELAXATION : " << unsigned(istep) << std::endl; + } + else if (PARAM.inp.calculation == "cell-relax") + { + std::cout << " RELAX CELL : " << unsigned(stress_step) << std::endl; + std::cout << " RELAX IONS : " << unsigned(force_step) << " (in total: " << unsigned(istep) << ")" + << std::endl; + GlobalV::ofs_running << " RELAX CELL : " << unsigned(stress_step) << std::endl; + GlobalV::ofs_running << " RELAX IONS : " << unsigned(force_step) << " (in total: " << unsigned(istep) << ")" + << std::endl; + } + } std::cout << " -------------------------------------------" << std::endl; GlobalV::ofs_running << " -------------------------------------------" << std::endl; diff --git a/source/module_io/print_info.h b/source/module_io/print_info.h index a7bcb2a0cf..38a5f7a8f1 100644 --- a/source/module_io/print_info.h +++ b/source/module_io/print_info.h @@ -5,11 +5,11 @@ #ifndef PRINT_INFO #define PRINT_INFO -#include "module_base/timer.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/klist.h" #include "module_cell/unitcell.h" #include "module_parameter/input_parameter.h" +#include "source_base/timer.h" namespace ModuleIO { diff --git a/source/module_io/read_input.cpp b/source/module_io/read_input.cpp index 14d6438010..66e2c4488b 100644 --- a/source/module_io/read_input.cpp +++ b/source/module_io/read_input.cpp @@ -1,19 +1,20 @@ #include "read_input.h" +#include "source_base/formatter.h" +#include "source_base/global_file.h" +#include "source_base/global_function.h" +#include "source_base/module_device/device.h" +#include "source_base/tool_quit.h" +#include "source_base/tool_title.h" + #include +#include +#include #include #include #include #include -#include #include -#include -#include "module_base/formatter.h" -#include "module_base/global_file.h" -#include "module_base/global_function.h" -#include "module_base/tool_quit.h" -#include "module_base/tool_title.h" -#include "module_base/module_device/device.h" namespace ModuleIO { @@ -63,7 +64,7 @@ std::string to_dir(const std::string& str) { str_dir += "/"; } - + return str_dir; } @@ -89,7 +90,7 @@ bool ReadInput::check_mode = false; ReadInput::ReadInput(const int& rank) { this->rank = rank; - + // add items this->item_system(); this->item_elec_stru(); @@ -119,7 +120,7 @@ void ReadInput::read_parameters(Parameter& param, const std::string& filename_in // 2. check the number of atom types from STRU file // set the global directories - this->set_global_dir(param.inp, param.sys); + this->set_global_dir(param.inp, param.sys); if (this->check_ntype_flag && this->rank == 0) { check_ntype(param.globalv.global_in_stru, param.input.ntype); @@ -150,17 +151,14 @@ void ReadInput::read_parameters(Parameter& param, const std::string& filename_in } } - // 6. check and reset kpar. + // 6. check and reset kpar. // It must be after bcastfunc, and kpar and bndpar are synchronized // It must be before wirte_txt_input, because kpar is used in write_txt_input - if (param.inp.device == "gpu" && param.inp.basis_type == "pw") + if (param.inp.device == "gpu" && param.inp.basis_type == "pw") { param.input.kpar = base_device::information::get_device_kpar(param.inp.kpar, param.inp.bndpar); } - - - if (this->check_mode) { std::cout << "----------------------------------------------------------" << std::endl; @@ -182,7 +180,8 @@ void ReadInput::create_directory(const Parameter& param) //---------------------------------------------------------- bool out_dir = false; if (!param.input.out_app_flag - && (param.input.out_mat_hs2 || param.input.out_mat_r || param.input.out_mat_t || param.input.out_mat_dh || param.input.out_mat_ds)) + && (param.input.out_mat_hs2 || param.input.out_mat_r || param.input.out_mat_t || param.input.out_mat_dh + || param.input.out_mat_ds)) { out_dir = true; } @@ -257,7 +256,10 @@ void ReadInput::read_txt_input(Parameter& param, const std::string& filename) while (ifs.good()) { ifs >> word1; - if (ifs.eof()) { break; } + if (ifs.eof()) + { + break; + } word = FmtCore::lower(word1); auto it = std::find_if(input_lists.begin(), input_lists.end(), @@ -266,7 +268,7 @@ void ReadInput::read_txt_input(Parameter& param, const std::string& filename) { Input_Item* p_item = &(it->second); this->readvalue_items.push_back(p_item); - if(p_item->is_read()) + if (p_item->is_read()) { std::string warningstr = "The parameter " + p_item->label + " has been read twice."; ModuleBase::WARNING_QUIT("ReadInput", warningstr); @@ -317,7 +319,8 @@ void ReadInput::read_txt_input(Parameter& param, const std::string& filename) for (auto& input_item: this->input_lists) { Input_Item* resetvalue_item = &(input_item.second); - if (resetvalue_item->reset_value != nullptr) { + if (resetvalue_item->reset_value != nullptr) + { resetvalue_item->reset_value(*resetvalue_item, param); } } @@ -334,9 +337,10 @@ void ReadInput::write_txt_input(const Parameter& param, const std::string& filen for (auto& item: this->input_lists) { Input_Item* p_item = &(item.second); - if (p_item->get_final_value == nullptr) { + if (p_item->get_final_value == nullptr) + { continue; -} + } p_item->get_final_value(*p_item, param); if (p_item->label == "ks_solver") { @@ -503,16 +507,16 @@ std::string nofound_str(std::vector init_chgs, const std::string& s std::string warningstr = "The parameter "; warningstr.append(str); warningstr.append(" must be "); - for(int i = 0; i < init_chgs.size(); i++) + for (int i = 0; i < init_chgs.size(); i++) { warningstr.append("'"); warningstr.append(init_chgs[i]); warningstr.append("'"); - if(i < init_chgs.size() - 2) + if (i < init_chgs.size() - 2) { warningstr.append(", "); } - else if(i == init_chgs.size() - 2) + else if (i == init_chgs.size() - 2) { warningstr.append(" or "); } diff --git a/source/module_io/read_input_item_deepks.cpp b/source/module_io/read_input_item_deepks.cpp index c60976931a..8149e2beef 100644 --- a/source/module_io/read_input_item_deepks.cpp +++ b/source/module_io/read_input_item_deepks.cpp @@ -1,8 +1,8 @@ -#include "module_base/constants.h" -#include "module_base/tool_quit.h" #include "module_parameter/parameter.h" #include "read_input.h" #include "read_input_tool.h" +#include "source_base/constants.h" +#include "source_base/tool_quit.h" namespace ModuleIO { void ReadInput::item_deepks() @@ -63,23 +63,29 @@ void ReadInput::item_deepks() { if (para.input.deepks_band_range[0] >= para.input.deepks_band_range[1]) { - ModuleBase::WARNING_QUIT("ReadInput", "deepks_band_range[0] must be smaller than deepks_band_range[1] for deepks_bandgap = 1."); + ModuleBase::WARNING_QUIT( + "ReadInput", + "deepks_band_range[0] must be smaller than deepks_band_range[1] for deepks_bandgap = 1."); } } else if (para.input.deepks_bandgap == 2) { if (para.input.deepks_band_range[0] > para.input.deepks_band_range[1]) { - ModuleBase::WARNING_QUIT("ReadInput", "deepks_band_range[0] must be no more than deepks_band_range[1] for deepks_bandgap = 2."); + ModuleBase::WARNING_QUIT( + "ReadInput", + "deepks_band_range[0] must be no more than deepks_band_range[1] for deepks_bandgap = 2."); } } else { if (para.input.deepks_band_range[0] != -1 || para.input.deepks_band_range[1] != 0) { - ModuleBase::WARNING("ReadInput", "deepks_band_range is used for deepks_bandgap = 1/2. Ignore its setting for other cases."); + ModuleBase::WARNING( + "ReadInput", + "deepks_band_range is used for deepks_bandgap = 1/2. Ignore its setting for other cases."); } - } + } }; this->add_item(item); } diff --git a/source/module_io/read_input_item_elec_stru.cpp b/source/module_io/read_input_item_elec_stru.cpp index acae10a74a..63051117a3 100644 --- a/source/module_io/read_input_item_elec_stru.cpp +++ b/source/module_io/read_input_item_elec_stru.cpp @@ -1,7 +1,7 @@ -#include "module_base/global_function.h" -#include "module_base/tool_quit.h" #include "read_input.h" #include "read_input_tool.h" +#include "source_base/global_function.h" +#include "source_base/tool_quit.h" namespace ModuleIO { @@ -128,16 +128,16 @@ void ReadInput::item_elec_stru() #endif #ifndef __CUDA warningstr = "ks_solver is set to " + ks_solver + " but ABACUS is built with CPU only!\n" - + " Please rebuild ABACUS with GPU support or change the ks_solver."; + + " Please rebuild ABACUS with GPU support or change the ks_solver."; ModuleBase::WARNING_QUIT("ReadInput", warningstr); #endif - if( ks_solver == "cusolvermp") + if (ks_solver == "cusolvermp") { #ifndef __CUSOLVERMP - warningstr = "ks_solver is set to cusolvermp, but ABACUS is not built with cusolvermp support\n" - " Please rebuild ABACUS with cusolvermp support or change the ks_solver."; - ModuleBase::WARNING_QUIT("ReadInput", warningstr); -#endif + warningstr = "ks_solver is set to cusolvermp, but ABACUS is not built with cusolvermp support\n" + " Please rebuild ABACUS with cusolvermp support or change the ks_solver."; + ModuleBase::WARNING_QUIT("ReadInput", warningstr); +#endif } } else if (ks_solver == "pexsi") @@ -236,7 +236,8 @@ void ReadInput::item_elec_stru() item.check_value = [](const Input_Item&, const Parameter& para) { if (para.input.nspin == 1 && para.input.nupdown != 0.0) { - ModuleBase::WARNING_QUIT("ReadInput", "nupdown mustn't have a non-zero value for spin-unpolarized calculations."); + ModuleBase::WARNING_QUIT("ReadInput", + "nupdown mustn't have a non-zero value for spin-unpolarized calculations."); } }; sync_double(input.nupdown); @@ -260,7 +261,8 @@ void ReadInput::item_elec_stru() item.annotation = "placeholder for xcpnet exchange functional"; item.read_value = [](const Input_Item& item, Parameter& para) { para.input.xc_exch_ext.resize(item.get_size()); - std::transform(item.str_values.begin(), item.str_values.end(), + std::transform(item.str_values.begin(), + item.str_values.end(), para.input.xc_exch_ext.begin(), [](const std::string& str) { return std::stod(str); }); }; @@ -274,19 +276,15 @@ void ReadInput::item_elec_stru() const double libxc_id_dbl = para.input.xc_exch_ext[0]; if (std::abs(libxc_id_dbl - std::round(libxc_id_dbl)) > 1.0e-6) { - ModuleBase::WARNING_QUIT("ReadInput", - "The first parameter (libxc id) can never be a float number"); + ModuleBase::WARNING_QUIT("ReadInput", "The first parameter (libxc id) can never be a float number"); } // the first value is a positive integer if (libxc_id_dbl < 0) { - ModuleBase::WARNING_QUIT("ReadInput", - "The first parameter (libxc id) should be a positive integer"); + ModuleBase::WARNING_QUIT("ReadInput", "The first parameter (libxc id) should be a positive integer"); } }; - sync_doublevec(input.xc_exch_ext, - para.input.xc_exch_ext.size(), - 0.0); + sync_doublevec(input.xc_exch_ext, para.input.xc_exch_ext.size(), 0.0); this->add_item(item); } { @@ -294,7 +292,8 @@ void ReadInput::item_elec_stru() item.annotation = "placeholder for xcpnet exchange functional"; item.read_value = [](const Input_Item& item, Parameter& para) { para.input.xc_corr_ext.resize(item.get_size()); - std::transform(item.str_values.begin(), item.str_values.end(), + std::transform(item.str_values.begin(), + item.str_values.end(), para.input.xc_corr_ext.begin(), [](const std::string& str) { return std::stod(str); }); }; @@ -308,19 +307,15 @@ void ReadInput::item_elec_stru() const double libxc_id_dbl = para.input.xc_corr_ext[0]; if (std::abs(libxc_id_dbl - std::round(libxc_id_dbl)) > 1.0e-6) { - ModuleBase::WARNING_QUIT("ReadInput", - "The first parameter (libxc id) can never be a float number"); + ModuleBase::WARNING_QUIT("ReadInput", "The first parameter (libxc id) can never be a float number"); } // the first value is a positive integer if (libxc_id_dbl < 0) { - ModuleBase::WARNING_QUIT("ReadInput", - "The first parameter (libxc id) should be a positive integer"); + ModuleBase::WARNING_QUIT("ReadInput", "The first parameter (libxc id) should be a positive integer"); } }; - sync_doublevec(input.xc_corr_ext, - para.input.xc_corr_ext.size(), - 0.0); + sync_doublevec(input.xc_corr_ext, para.input.xc_corr_ext.size(), 0.0); this->add_item(item); } { @@ -386,16 +381,20 @@ void ReadInput::item_elec_stru() item.annotation = "whether to use k-point continuity for initializing wave functions"; read_sync_bool(input.use_k_continuity); item.check_value = [](const Input_Item& item, const Parameter& para) { - if (para.input.use_k_continuity && para.input.basis_type != "pw") { + if (para.input.use_k_continuity && para.input.basis_type != "pw") + { ModuleBase::WARNING_QUIT("ReadInput", "use_k_continuity only works for PW basis"); } - if (para.input.use_k_continuity && para.input.calculation == "nscf") { + if (para.input.use_k_continuity && para.input.calculation == "nscf") + { ModuleBase::WARNING_QUIT("ReadInput", "use_k_continuity cannot work for NSCF calculation"); } - if (para.input.use_k_continuity && para.input.nspin == 2) { + if (para.input.use_k_continuity && para.input.nspin == 2) + { ModuleBase::WARNING_QUIT("ReadInput", "use_k_continuity cannot work for spin-polarized calculation"); } - if (para.input.use_k_continuity && para.input.esolver_type == "sdft") { + if (para.input.use_k_continuity && para.input.esolver_type == "sdft") + { ModuleBase::WARNING_QUIT("ReadInput", "use_k_continuity cannot work for SDFT calculation"); } }; @@ -418,11 +417,17 @@ void ReadInput::item_elec_stru() item.annotation = "type of smearing_method: gauss; fd; fixed; mp; mp2; mv"; read_sync_string(input.smearing_method); item.check_value = [](const Input_Item& item, const Parameter& para) { - const std::vector methods = {"gauss", "gaussian", - "fd", "fermi-dirac", + const std::vector methods = {"gauss", + "gaussian", + "fd", + "fermi-dirac", "fixed", - "mp", "mp2", "mp3" - "marzari-vanderbilt", "cold", "mv"}; + "mp", + "mp2", + "mp3" + "marzari-vanderbilt", + "cold", + "mv"}; if (std::find(methods.begin(), methods.end(), para.input.smearing_method) == methods.end()) { const std::string warningstr = nofound_str(methods, "smearing_method"); @@ -492,13 +497,13 @@ void ReadInput::item_elec_stru() read_sync_double(input.mixing_restart); item.reset_value = [](const Input_Item& item, Parameter& para) { if (para.input.sc_mag_switch == 1) - {// for DeltaSpin calculation, the mixing_restart should be same as sc_scf_thr - if(para.input.sc_scf_thr != 10.0) + { // for DeltaSpin calculation, the mixing_restart should be same as sc_scf_thr + if (para.input.sc_scf_thr != 10.0) { para.input.mixing_restart = para.input.sc_scf_thr; } else - {// no mixing_restart until oscillation happen in PW base + { // no mixing_restart until oscillation happen in PW base para.input.mixing_restart = para.input.scf_thr / 10.0; } } @@ -575,13 +580,13 @@ void ReadInput::item_elec_stru() "set to 1, a fast algorithm is used"; read_sync_bool(input.gamma_only); item.reset_value = [](const Input_Item& item, Parameter& para) { - if (para.input.basis_type == "pw" && para.input.gamma_only) + if (para.input.basis_type == "pw" && para.input.gamma_only) { - para.input.gamma_only = false; + para.input.gamma_only = false; GlobalV::ofs_warning << " WARNING : gamma_only has not been implemented for pw yet" << std::endl; GlobalV::ofs_warning << "gamma_only is not supported in the pw model" << std::endl; GlobalV::ofs_warning << " the INPUT parameter gamma_only has been reset to 0" << std::endl; - GlobalV::ofs_warning << " and a new KPT is generated with gamma point as the only k point"<< std::endl; + GlobalV::ofs_warning << " and a new KPT is generated with gamma point as the only k point" << std::endl; GlobalV::ofs_warning << " Auto generating k-points file: " << para.input.kpoint_file << std::endl; std::ofstream ofs(para.input.kpoint_file.c_str()); ofs << "K_POINTS" << std::endl; @@ -594,7 +599,9 @@ void ReadInput::item_elec_stru() { if (para.input.nspin == 4) { - ModuleBase::WARNING_QUIT("NOTICE", "nspin=4 (soc or noncollinear-spin) does not support gamma\n only calculation"); + ModuleBase::WARNING_QUIT( + "NOTICE", + "nspin=4 (soc or noncollinear-spin) does not support gamma\n only calculation"); } } }; @@ -870,7 +877,7 @@ void ReadInput::item_elec_stru() } }; item.check_value = [](const Input_Item& item, const Parameter& para) { - for(auto rcut: para.input.bessel_nao_rcuts) + for (auto rcut: para.input.bessel_nao_rcuts) { if (rcut < 0) { diff --git a/source/module_io/read_input_item_exx_dftu.cpp b/source/module_io/read_input_item_exx_dftu.cpp index ea9a9c3927..c65479c0e7 100644 --- a/source/module_io/read_input_item_exx_dftu.cpp +++ b/source/module_io/read_input_item_exx_dftu.cpp @@ -1,7 +1,7 @@ -#include "module_base/constants.h" -#include "module_base/tool_quit.h" #include "read_input.h" #include "read_input_tool.h" +#include "source_base/constants.h" +#include "source_base/tool_quit.h" namespace ModuleIO { void ReadInput::item_exx() @@ -11,8 +11,7 @@ void ReadInput::item_exx() Input_Item item("exx_hybrid_alpha"); item.annotation = "fraction of Fock exchange in hybrid functionals"; read_sync_string(input.exx_hybrid_alpha); - item.reset_value = [](const Input_Item& item, Parameter& para) - { + item.reset_value = [](const Input_Item& item, Parameter& para) { if (para.input.exx_hybrid_alpha == "default") { std::string& dft_functional = para.input.dft_functional; @@ -28,8 +27,8 @@ void ReadInput::item_exx() para.input.exx_hybrid_alpha = "0.25"; } // added by jghan 2024-07-06 - else if (dft_functional_lower == "muller" || dft_functional_lower == "power" - || dft_functional_lower == "wp22" || dft_functional_lower == "cwp22") + else if (dft_functional_lower == "muller" || dft_functional_lower == "power" + || dft_functional_lower == "wp22" || dft_functional_lower == "cwp22") { para.input.exx_hybrid_alpha = "1"; } @@ -48,8 +47,8 @@ void ReadInput::item_exx() const double exx_hybrid_alpha_value = std::stod(para.input.exx_hybrid_alpha); if (exx_hybrid_alpha_value < 0 || exx_hybrid_alpha_value > 1) { - ModuleBase::WARNING_QUIT("ReadInput", - "The Hartree-Fock fraction (exx_hybrid_alpha) can only be in range [0, 1]"); + ModuleBase::WARNING_QUIT("ReadInput", + "The Hartree-Fock fraction (exx_hybrid_alpha) can only be in range [0, 1]"); } }; this->add_item(item); @@ -72,8 +71,7 @@ void ReadInput::item_exx() item.annotation = "the maximal electronic iteration number in the " "evaluation of Fock exchange"; read_sync_int(input.exx_hybrid_step); - item.check_value = [](const Input_Item& item, const Parameter& para) - { + item.check_value = [](const Input_Item& item, const Parameter& para) { if (para.input.exx_hybrid_step <= 0) { ModuleBase::WARNING_QUIT("ReadInput", "exx_hybrid_step must > 0"); @@ -101,7 +99,7 @@ void ReadInput::item_exx() read_sync_string(input.exx_real_number); item.reset_value = [](const Input_Item& item, Parameter& para) { if (para.input.exx_real_number == "default") - { // to run through here, the default value of para.input.exx_real_number should be "default" + { // to run through here, the default value of para.input.exx_real_number should be "default" if (para.input.gamma_only) { para.input.exx_real_number = "1"; @@ -194,7 +192,7 @@ void ReadInput::item_exx() read_sync_string(input.exx_ccp_rmesh_times); item.reset_value = [](const Input_Item& item, Parameter& para) { if (para.input.exx_ccp_rmesh_times == "default") - { // to run through here, the default value of para.input.exx_ccp_rmesh_times should be "default" + { // to run through here, the default value of para.input.exx_ccp_rmesh_times should be "default" std::string& dft_functional = para.input.dft_functional; std::string dft_functional_lower = dft_functional; std::transform(dft_functional.begin(), dft_functional.end(), dft_functional_lower.begin(), tolower); @@ -291,8 +289,11 @@ void ReadInput::item_exx() item.annotation = "whether to reduce real-space sector in Hexx calculation"; read_sync_bool(input.exx_symmetry_realspace); item.reset_value = [](const Input_Item& item, Parameter& para) { - if (para.input.symmetry != "1") { para.input.exx_symmetry_realspace = false; } - }; + if (para.input.symmetry != "1") + { + para.input.exx_symmetry_realspace = false; + } + }; this->add_item(item); } { @@ -348,7 +349,8 @@ void ReadInput::item_dftu() { if (input.basis_type == "pw" && input.nspin != 4) { - ModuleBase::WARNING_QUIT("ReadInput", "WRONG ARGUMENTS, only nspin2 with PW base is not supported now"); + ModuleBase::WARNING_QUIT("ReadInput", + "WRONG ARGUMENTS, only nspin2 with PW base is not supported now"); } } }; @@ -421,7 +423,8 @@ void ReadInput::item_dftu() item.reset_value = [](const Input_Item& item, Parameter& para) { if ((para.input.dft_plus_u == 1 || para.input.sc_mag_switch) && para.input.onsite_radius == 0.0) { - // autoset onsite_radius to 3.0 as default, this default value comes from the systematic atomic magnetism test + // autoset onsite_radius to 3.0 as default, this default value comes from the systematic atomic + // magnetism test para.input.onsite_radius = 3.0; } }; diff --git a/source/module_io/read_input_item_md.cpp b/source/module_io/read_input_item_md.cpp index 419a601e28..e1b955a8c4 100644 --- a/source/module_io/read_input_item_md.cpp +++ b/source/module_io/read_input_item_md.cpp @@ -1,6 +1,6 @@ -#include "module_base/tool_quit.h" #include "read_input.h" #include "read_input_tool.h" +#include "source_base/tool_quit.h" namespace ModuleIO { @@ -36,9 +36,10 @@ void ReadInput::item_md() Input_Item item("md_dt"); item.annotation = "time step"; item.check_value = [](const Input_Item& item, const Parameter& para) { - if (para.input.mdp.md_dt < 0) { + if (para.input.mdp.md_dt < 0) + { ModuleBase::WARNING_QUIT("ReadInput", "time interval of MD calculation should be positive"); -} + } }; read_sync_double(input.mdp.md_dt); this->add_item(item); @@ -144,9 +145,10 @@ void ReadInput::item_md() [](std::string str) { return std::stod(str); }); }; item.check_value = [](const Input_Item& item, const Parameter& para) { - if (!item.is_read()) { + if (!item.is_read()) + { return; -} + } size_t n_ljrcut = para.input.mdp.lj_rcut.size(); if (n_ljrcut != 1 && n_ljrcut != para.input.ntype * (para.input.ntype + 1) / 2) { @@ -175,9 +177,10 @@ void ReadInput::item_md() [](std::string str) { return std::stod(str); }); }; item.check_value = [](const Input_Item& item, const Parameter& para) { - if (!item.is_read()) { + if (!item.is_read()) + { return; -} + } size_t n_ljepsilon = para.input.mdp.lj_epsilon.size(); if (n_ljepsilon != para.input.ntype && n_ljepsilon != para.input.ntype * (para.input.ntype + 1) / 2) { @@ -199,9 +202,10 @@ void ReadInput::item_md() [](std::string str) { return std::stod(str); }); }; item.check_value = [](const Input_Item& item, const Parameter& para) { - if (!item.is_read()) { + if (!item.is_read()) + { return; -} + } size_t n_ljsigma = para.input.mdp.lj_sigma.size(); if (n_ljsigma != para.input.ntype && n_ljsigma != para.input.ntype * (para.input.ntype + 1) / 2) { @@ -364,9 +368,10 @@ void ReadInput::item_md() Input_Item item("md_plast"); item.annotation = "final target pressure"; item.reset_value = [](const Input_Item& item, Parameter& para) { - if (!item.is_read()) { // no md_plast in INPUT + if (!item.is_read()) + { // no md_plast in INPUT para.input.mdp.md_plast = para.input.mdp.md_pfirst; -} + } }; read_sync_double(input.mdp.md_plast); this->add_item(item); diff --git a/source/module_io/read_input_item_model.cpp b/source/module_io/read_input_item_model.cpp index 30549e5d6f..b940ed8dda 100644 --- a/source/module_io/read_input_item_model.cpp +++ b/source/module_io/read_input_item_model.cpp @@ -1,7 +1,7 @@ -#include "module_base/global_function.h" -#include "module_base/tool_quit.h" #include "read_input.h" #include "read_input_tool.h" +#include "source_base/global_function.h" +#include "source_base/tool_quit.h" namespace ModuleIO { void ReadInput::item_model() diff --git a/source/module_io/read_input_item_ofdft.cpp b/source/module_io/read_input_item_ofdft.cpp index 3ed59bdb61..fe0362f20a 100644 --- a/source/module_io/read_input_item_ofdft.cpp +++ b/source/module_io/read_input_item_ofdft.cpp @@ -1,8 +1,8 @@ -#include "module_base/global_function.h" -#include "module_base/tool_quit.h" #include "read_input.h" #include "read_input_tool.h" +#include "source_base/global_function.h" +#include "source_base/tool_quit.h" namespace ModuleIO { void ReadInput::item_ofdft() @@ -18,8 +18,8 @@ void ReadInput::item_ofdft() } #endif if (para.input.of_kinetic != "tf" && para.input.of_kinetic != "vw" && para.input.of_kinetic != "wt" - && para.input.of_kinetic != "lkt" && para.input.of_kinetic != "tf+" - && para.input.of_kinetic != "ml" && para.input.of_kinetic != "mpn" && para.input.of_kinetic != "cpn5") + && para.input.of_kinetic != "lkt" && para.input.of_kinetic != "tf+" && para.input.of_kinetic != "ml" + && para.input.of_kinetic != "mpn" && para.input.of_kinetic != "cpn5") { ModuleBase::WARNING_QUIT("ReadInput", "of_kinetic must be tf, vw, tf+, wt, lkt, ml, mpn, or cpn5"); } @@ -289,7 +289,7 @@ void ReadInput::item_ofdft() item.read_value = [](const Input_Item& item, Parameter& para) { size_t count = item.get_size(); for (int i = 0; i < count; i++) - { + { para.input.of_ml_kernel_file.push_back(item.str_values[i]); } }; @@ -350,27 +350,24 @@ void ReadInput::item_ofdft() { Input_Item item("of_ml_pnl"); item.annotation = "Descriptor: pnl = int{p(r') * w(r-r') dr'}"; - item.read_value = [](const Input_Item& item, Parameter& para) { - parse_expression(item.str_values, para.input.of_ml_pnl); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { parse_expression(item.str_values, para.input.of_ml_pnl); }; sync_intvec(input.of_ml_pnl, para.input.of_ml_pnl.size(), 0); this->add_item(item); } { Input_Item item("of_ml_qnl"); item.annotation = "Descriptor: qnl = int{q(r') * w(r-r') dr'}"; - item.read_value = [](const Input_Item& item, Parameter& para) { - parse_expression(item.str_values, para.input.of_ml_qnl); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { parse_expression(item.str_values, para.input.of_ml_qnl); }; sync_intvec(input.of_ml_qnl, para.input.of_ml_qnl.size(), 0); this->add_item(item); } { Input_Item item("of_ml_xi"); item.annotation = "Descriptor: xi = int{rho(r')^(1/3) * w(r-r') dr'} / rho^(1/3)"; - item.read_value = [](const Input_Item& item, Parameter& para) { - parse_expression(item.str_values, para.input.of_ml_xi); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { parse_expression(item.str_values, para.input.of_ml_xi); }; sync_intvec(input.of_ml_xi, para.input.of_ml_xi.size(), 0); this->add_item(item); } diff --git a/source/module_io/read_input_item_other.cpp b/source/module_io/read_input_item_other.cpp index f4077b3582..7ab4c05f79 100644 --- a/source/module_io/read_input_item_other.cpp +++ b/source/module_io/read_input_item_other.cpp @@ -1,7 +1,7 @@ -#include "module_base/global_function.h" -#include "module_base/tool_quit.h" #include "read_input.h" #include "read_input_tool.h" +#include "source_base/global_function.h" +#include "source_base/tool_quit.h" #include #include @@ -477,7 +477,8 @@ void ReadInput::item_others() } { Input_Item item("ri_hartree_benchmark"); - item.annotation = "whether to use the RI approximation for the Hartree term in LR-TDDFT for benchmark (with FHI-aims/ABACUS read-in style)"; + item.annotation = "whether to use the RI approximation for the Hartree term in LR-TDDFT for benchmark (with " + "FHI-aims/ABACUS read-in style)"; read_sync_string(input.ri_hartree_benchmark); this->add_item(item); } @@ -490,7 +491,7 @@ void ReadInput::item_others() { para.input.aims_nbasis.push_back(std::stod(item.str_values[i])); } - }; + }; sync_intvec(input.aims_nbasis, para.input.aims_nbasis.size(), 0); this->add_item(item); } @@ -508,17 +509,17 @@ void ReadInput::item_others() " used in exx-type functionals such as muller and power"; read_sync_double(input.rdmft_power_alpha); item.reset_value = [](const Input_Item& item, Parameter& para) { - if( para.input.dft_functional == "hf" || para.input.dft_functional == "pbe0" ) + if (para.input.dft_functional == "hf" || para.input.dft_functional == "pbe0") { para.input.rdmft_power_alpha = 1.0; } - else if( para.input.dft_functional == "muller" ) + else if (para.input.dft_functional == "muller") { para.input.rdmft_power_alpha = 0.5; } }; item.check_value = [](const Input_Item& item, const Parameter& para) { - if( (para.input.rdmft_power_alpha < 0) || (para.input.rdmft_power_alpha > 1) ) + if ((para.input.rdmft_power_alpha < 0) || (para.input.rdmft_power_alpha > 1)) { ModuleBase::WARNING_QUIT("ReadInput", "rdmft_power_alpha should be greater than 0.0 and less than 1.0"); } @@ -539,6 +540,5 @@ void ReadInput::item_others() read_sync_bool(input.exx_gamma_extrapolation); this->add_item(item); } - } } // namespace ModuleIO \ No newline at end of file diff --git a/source/module_io/read_input_item_output.cpp b/source/module_io/read_input_item_output.cpp index 3d2f15dc64..e61ef9c703 100644 --- a/source/module_io/read_input_item_output.cpp +++ b/source/module_io/read_input_item_output.cpp @@ -1,7 +1,7 @@ -#include "module_base/global_function.h" -#include "module_base/tool_quit.h" #include "read_input.h" #include "read_input_tool.h" +#include "source_base/global_function.h" +#include "source_base/tool_quit.h" namespace ModuleIO { void ReadInput::item_output() @@ -516,11 +516,14 @@ void ReadInput::item_output() } { Input_Item item("out_xc_r"); - item.annotation = "if >=0, output the derivatives of exchange correlation in realspace, second parameter controls the precision"; + item.annotation = "if >=0, output the derivatives of exchange correlation in realspace, second parameter " + "controls the precision"; item.read_value = [](const Input_Item& item, Parameter& para) { size_t count = item.get_size(); std::vector out_xc_r(count); // create a placeholder vector - std::transform(item.str_values.begin(), item.str_values.end(), out_xc_r.begin(), [](std::string s) { return std::stoi(s); }); + std::transform(item.str_values.begin(), item.str_values.end(), out_xc_r.begin(), [](std::string s) { + return std::stoi(s); + }); // assign non-negative values to para.input.out_xc_r std::copy(out_xc_r.begin(), out_xc_r.end(), para.input.out_xc_r.begin()); }; diff --git a/source/module_io/read_input_item_postprocess.cpp b/source/module_io/read_input_item_postprocess.cpp index a6ec81238d..ea063d0905 100644 --- a/source/module_io/read_input_item_postprocess.cpp +++ b/source/module_io/read_input_item_postprocess.cpp @@ -1,7 +1,7 @@ -#include "module_base/global_function.h" -#include "module_base/tool_quit.h" #include "read_input.h" #include "read_input_tool.h" +#include "source_base/global_function.h" +#include "source_base/tool_quit.h" namespace ModuleIO { void ReadInput::item_postprocess() diff --git a/source/module_io/read_input_item_relax.cpp b/source/module_io/read_input_item_relax.cpp index 80c012b6ff..6a7b7f9079 100644 --- a/source/module_io/read_input_item_relax.cpp +++ b/source/module_io/read_input_item_relax.cpp @@ -1,7 +1,7 @@ -#include "module_base/global_function.h" -#include "module_base/tool_quit.h" #include "read_input.h" #include "read_input_tool.h" +#include "source_base/global_function.h" +#include "source_base/tool_quit.h" namespace ModuleIO { @@ -12,8 +12,8 @@ void ReadInput::item_relax() item.annotation = "cg; bfgs; sd; cg; cg_bfgs;"; read_sync_string(input.relax_method); item.check_value = [](const Input_Item& item, const Parameter& para) { - const std::vector relax_methods = {"cg", "bfgs", "sd", "cg_bfgs","bfgs_trad","lbfgs"}; - if (std::find(relax_methods.begin(),relax_methods.end(), para.input.relax_method)==relax_methods.end()) + const std::vector relax_methods = {"cg", "bfgs", "sd", "cg_bfgs", "bfgs_trad", "lbfgs"}; + if (std::find(relax_methods.begin(), relax_methods.end(), para.input.relax_method) == relax_methods.end()) { const std::string warningstr = nofound_str(relax_methods, "relax_method"); ModuleBase::WARNING_QUIT("ReadInput", warningstr); diff --git a/source/module_io/read_input_item_sdft.cpp b/source/module_io/read_input_item_sdft.cpp index 2f532680b1..0e8e58886b 100644 --- a/source/module_io/read_input_item_sdft.cpp +++ b/source/module_io/read_input_item_sdft.cpp @@ -1,7 +1,7 @@ -#include "module_base/global_function.h" -#include "module_base/tool_quit.h" #include "read_input.h" #include "read_input_tool.h" +#include "source_base/global_function.h" +#include "source_base/tool_quit.h" namespace ModuleIO { diff --git a/source/module_io/read_input_item_system.cpp b/source/module_io/read_input_item_system.cpp index 797a94ee21..1dab742dfd 100644 --- a/source/module_io/read_input_item_system.cpp +++ b/source/module_io/read_input_item_system.cpp @@ -1,8 +1,8 @@ -#include "module_base/global_function.h" -#include "module_base/tool_quit.h" #include "read_input.h" #include "read_input_tool.h" -#include "module_base/module_device/device.h" +#include "source_base/global_function.h" +#include "source_base/module_device/device.h" +#include "source_base/tool_quit.h" #include #include @@ -110,7 +110,8 @@ void ReadInput::item_system() item.annotation = "the energy solver: ksdft, sdft, ofdft, tddft, lj, dp, ks-lr, lr"; read_sync_string(input.esolver_type); item.check_value = [](const Input_Item& item, const Parameter& para) { - const std::vector esolver_types = { "ksdft", "sdft", "ofdft", "tddft", "lj", "dp", "lr", "ks-lr" }; + const std::vector esolver_types + = {"ksdft", "sdft", "ofdft", "tddft", "lj", "dp", "lr", "ks-lr"}; if (std::find(esolver_types.begin(), esolver_types.end(), para.input.esolver_type) == esolver_types.end()) { const std::string warningstr = nofound_str(esolver_types, "esolver_type"); @@ -126,10 +127,10 @@ void ReadInput::item_system() }; item.reset_value = [](const Input_Item& item, Parameter& para) { if (para.input.esolver_type == "lr" && para.input.calculation == "scf") - { // for LR-only calculation based on the ground-state, set calculation to "nscf" + { // for LR-only calculation based on the ground-state, set calculation to "nscf" para.input.calculation = "nscf"; } - }; + }; this->add_item(item); } { @@ -216,7 +217,8 @@ void ReadInput::item_system() } para.input.cal_force = true; } - else if (std::find(not_use_force.begin(), not_use_force.end(), para.input.calculation) != not_use_force.end()) + else if (std::find(not_use_force.begin(), not_use_force.end(), para.input.calculation) + != not_use_force.end()) { if (para.input.cal_force) { @@ -339,9 +341,7 @@ void ReadInput::item_system() { Input_Item item("nx"); item.annotation = "number of points along x axis for FFT grid"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.nx = intvalue; - }; + item.read_value = [](const Input_Item& item, Parameter& para) { para.input.nx = intvalue; }; item.check_value = [](const Input_Item& item, const Parameter& para) { if (para.input.nx * para.input.ny * para.input.nz == 0 && para.input.nx != 0) { @@ -354,9 +354,7 @@ void ReadInput::item_system() { Input_Item item("ny"); item.annotation = "number of points along y axis for FFT grid"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.ny = intvalue; - }; + item.read_value = [](const Input_Item& item, Parameter& para) { para.input.ny = intvalue; }; item.check_value = [](const Input_Item& item, const Parameter& para) { if (para.input.nx * para.input.ny * para.input.nz == 0 && para.input.ny != 0) { @@ -369,9 +367,7 @@ void ReadInput::item_system() { Input_Item item("nz"); item.annotation = "number of points along z axis for FFT grid"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.nz = intvalue; - }; + item.read_value = [](const Input_Item& item, Parameter& para) { para.input.nz = intvalue; }; item.check_value = [](const Input_Item& item, const Parameter& para) { if (para.input.nx * para.input.ny * para.input.nz == 0 && para.input.nz != 0) { @@ -418,9 +414,10 @@ void ReadInput::item_system() } }; item.check_value = [](const Input_Item& item, const Parameter& para) { - if (!item.is_read()) { + if (!item.is_read()) + { return; -} + } if (para.input.ndx * para.input.ndy * para.input.ndz == 0 && para.input.ndy != 0) { ModuleBase::WARNING_QUIT("ReadInput", "ndx, ndy, ndz should be all set to non-zero"); @@ -443,9 +440,10 @@ void ReadInput::item_system() } }; item.check_value = [](const Input_Item& item, const Parameter& para) { - if (!item.is_read()) { + if (!item.is_read()) + { return; -} + } if (para.input.ndx * para.input.ndy * para.input.ndz == 0 && para.input.ndz != 0) { ModuleBase::WARNING_QUIT("ReadInput", "ndx, ndy, ndz should be all set to non-zero"); @@ -643,7 +641,7 @@ void ReadInput::item_system() Input_Item item("pseudo_dir"); item.annotation = "the directory containing pseudo files"; item.read_value = [](const Input_Item& item, Parameter& para) { - if(item.get_size() == 0) + if (item.get_size() == 0) { para.input.pseudo_dir = ""; } @@ -659,7 +657,7 @@ void ReadInput::item_system() Input_Item item("orbital_dir"); item.annotation = "the directory containing orbital files"; item.read_value = [](const Input_Item& item, Parameter& para) { - if(item.get_size() == 0) + if (item.get_size() == 0) { para.input.orbital_dir = ""; } @@ -788,8 +786,7 @@ void ReadInput::item_system() item.annotation = "the computing device for ABACUS"; read_sync_string(input.device); item.reset_value = [](const Input_Item& item, Parameter& para) { - para.input.device=base_device::information::get_device_flag( - para.inp.device, para.inp.basis_type); + para.input.device = base_device::information::get_device_flag(para.inp.device, para.inp.basis_type); }; item.check_value = [](const Input_Item& item, const Parameter& para) { std::vector avail_list = {"cpu", "gpu"}; diff --git a/source/module_io/read_input_item_tddft.cpp b/source/module_io/read_input_item_tddft.cpp index 9687af495d..2a943e9a2b 100644 --- a/source/module_io/read_input_item_tddft.cpp +++ b/source/module_io/read_input_item_tddft.cpp @@ -1,12 +1,12 @@ -#include "module_base/constants.h" -#include "module_base/tool_quit.h" #include "read_input.h" #include "read_input_tool.h" +#include "source_base/constants.h" +#include "source_base/tool_quit.h" namespace ModuleIO { void ReadInput::item_rt_tddft() -{ +{ // real time TDDFT { Input_Item item("td_force_dt"); @@ -77,9 +77,8 @@ void ReadInput::item_rt_tddft() { Input_Item item("td_ttype"); item.annotation = "type of electric field in time domain"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_ttype = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_ttype = longstring(item.str_values); }; sync_string(input.td_ttype); this->add_item(item); } @@ -110,162 +109,144 @@ void ReadInput::item_rt_tddft() { Input_Item item("td_gauss_freq"); item.annotation = "frequency (freq) of Gauss type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_gauss_freq = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_gauss_freq = longstring(item.str_values); }; sync_string(input.td_gauss_freq); this->add_item(item); } { Input_Item item("td_gauss_phase"); item.annotation = "phase of Gauss type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_gauss_phase = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_gauss_phase = longstring(item.str_values); }; sync_string(input.td_gauss_phase); this->add_item(item); } { Input_Item item("td_gauss_sigma"); item.annotation = "sigma of Gauss type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_gauss_sigma = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_gauss_sigma = longstring(item.str_values); }; sync_string(input.td_gauss_sigma); this->add_item(item); } { Input_Item item("td_gauss_t0"); item.annotation = "step number of time center (t0) of Gauss type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_gauss_t0 = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_gauss_t0 = longstring(item.str_values); }; sync_string(input.td_gauss_t0); this->add_item(item); } { Input_Item item("td_gauss_amp"); item.annotation = "amplitude of Gauss type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_gauss_amp = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_gauss_amp = longstring(item.str_values); }; sync_string(input.td_gauss_amp); this->add_item(item); } { Input_Item item("td_trape_freq"); item.annotation = "frequency of Trapezoid type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_trape_freq = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_trape_freq = longstring(item.str_values); }; sync_string(input.td_trape_freq); this->add_item(item); } { Input_Item item("td_trape_phase"); item.annotation = "phase of Trapezoid type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_trape_phase = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_trape_phase = longstring(item.str_values); }; sync_string(input.td_trape_phase); this->add_item(item); } { Input_Item item("td_trape_t1"); item.annotation = "t1 of Trapezoid type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_trape_t1 = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_trape_t1 = longstring(item.str_values); }; sync_string(input.td_trape_t1); this->add_item(item); } { Input_Item item("td_trape_t2"); item.annotation = "t2 of Trapezoid type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_trape_t2 = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_trape_t2 = longstring(item.str_values); }; sync_string(input.td_trape_t2); this->add_item(item); } { Input_Item item("td_trape_t3"); item.annotation = "t3 of Trapezoid type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_trape_t3 = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_trape_t3 = longstring(item.str_values); }; sync_string(input.td_trape_t3); this->add_item(item); } { Input_Item item("td_trape_amp"); item.annotation = "amplitude of Trapezoid type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_trape_amp = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_trape_amp = longstring(item.str_values); }; sync_string(input.td_trape_amp); this->add_item(item); } { Input_Item item("td_trigo_freq1"); item.annotation = "frequency 1 of Trigonometric type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_trigo_freq1 = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_trigo_freq1 = longstring(item.str_values); }; sync_string(input.td_trigo_freq1); this->add_item(item); } { Input_Item item("td_trigo_freq2"); item.annotation = "frequency 2 of Trigonometric type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_trigo_freq2 = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_trigo_freq2 = longstring(item.str_values); }; sync_string(input.td_trigo_freq2); this->add_item(item); } { Input_Item item("td_trigo_phase1"); item.annotation = "phase 1 of Trigonometric type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_trigo_phase1 = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_trigo_phase1 = longstring(item.str_values); }; sync_string(input.td_trigo_phase1); this->add_item(item); } { Input_Item item("td_trigo_phase2"); item.annotation = "phase 2 of Trigonometric type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_trigo_phase2 = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_trigo_phase2 = longstring(item.str_values); }; sync_string(input.td_trigo_phase2); this->add_item(item); } { Input_Item item("td_trigo_amp"); item.annotation = "amplitude of Trigonometric type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_trigo_amp = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_trigo_amp = longstring(item.str_values); }; sync_string(input.td_trigo_amp); this->add_item(item); } { Input_Item item("td_heavi_t0"); item.annotation = "t0 of Heaviside type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_heavi_t0 = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_heavi_t0 = longstring(item.str_values); }; sync_string(input.td_heavi_t0); this->add_item(item); } { Input_Item item("td_heavi_amp"); item.annotation = "amplitude of Heaviside type electric field"; - item.read_value = [](const Input_Item& item, Parameter& para) { - para.input.td_heavi_amp = longstring(item.str_values); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { para.input.td_heavi_amp = longstring(item.str_values); }; sync_string(input.td_heavi_amp); this->add_item(item); } @@ -278,11 +259,10 @@ void ReadInput::item_rt_tddft() { Input_Item item("ocp_set"); item.annotation = "set occupation"; - item.read_value = [](const Input_Item& item, Parameter& para) { - parse_expression(item.str_values, para.input.ocp_kb); - }; + item.read_value + = [](const Input_Item& item, Parameter& para) { parse_expression(item.str_values, para.input.ocp_kb); }; item.get_final_value = [](Input_Item& item, const Parameter& para) { - if(item.is_read()) + if (item.is_read()) { item.final_value.str(longstring(item.str_values)); } @@ -290,8 +270,6 @@ void ReadInput::item_rt_tddft() add_doublevec_bcast(input.ocp_kb, para.input.ocp_kb.size(), 0.0); this->add_item(item); } - - } void ReadInput::item_lr_tddft() { @@ -308,8 +286,11 @@ void ReadInput::item_lr_tddft() read_sync_int(input.nocc); item.reset_value = [](const Input_Item& item, Parameter& para) { const int nocc_default = std::max(static_cast(para.input.nelec + 1) / 2, para.input.nbands); - if (para.input.nocc <= 0 || para.input.nocc > nocc_default) { para.input.nocc = nocc_default; } - }; + if (para.input.nocc <= 0 || para.input.nocc > nocc_default) + { + para.input.nocc = nocc_default; + } + }; this->add_item(item); } { @@ -330,11 +311,17 @@ void ReadInput::item_lr_tddft() item.read_value = [](const Input_Item& item, Parameter& para) { size_t count = item.get_size(); auto& ifxc = para.input.lr_init_xc_kernel; - for (int i = 0; i < count; i++) { ifxc.push_back(item.str_values[i]); } - }; + for (int i = 0; i < count; i++) + { + ifxc.push_back(item.str_values[i]); + } + }; item.reset_value = [](const Input_Item& item, Parameter& para) { - if (para.input.lr_init_xc_kernel.empty()) { para.input.lr_init_xc_kernel.push_back("default"); } - }; + if (para.input.lr_init_xc_kernel.empty()) + { + para.input.lr_init_xc_kernel.push_back("default"); + } + }; sync_stringvec(input.lr_init_xc_kernel, para.input.lr_init_xc_kernel.size(), "default"); this->add_item(item); } @@ -371,7 +358,7 @@ void ReadInput::item_lr_tddft() { para.input.abs_wavelen_range.push_back(std::stod(item.str_values[i])); } - }; + }; sync_doublevec(input.abs_wavelen_range, 2, 0.0); this->add_item(item); } @@ -388,4 +375,4 @@ void ReadInput::item_lr_tddft() this->add_item(item); } } -} \ No newline at end of file +} // namespace ModuleIO \ No newline at end of file diff --git a/source/module_io/read_input_tool.h b/source/module_io/read_input_tool.h index 649b0044e5..06b8ce1b2d 100644 --- a/source/module_io/read_input_tool.h +++ b/source/module_io/read_input_tool.h @@ -1,8 +1,8 @@ +#include #include #include -#include #ifdef __MPI -#include "module_base/parallel_common.h" +#include "source_base/parallel_common.h" #endif #define strvalue item.str_values[0] @@ -191,12 +191,12 @@ void parse_expression(const std::vector& expressions, std::vector(std::stof(T_part)); - for(int i = 0 ; i < num; ++i) + for (int i = 0; i < num; ++i) { result.push_back(T_value); } } - // e.g. "2*3*3" + // e.g. "2*3*3" // If more than one '*' found, output an error message else { diff --git a/source/module_io/read_set_globalv.cpp b/source/module_io/read_set_globalv.cpp index 0a2ece4866..c3328fefd3 100644 --- a/source/module_io/read_set_globalv.cpp +++ b/source/module_io/read_set_globalv.cpp @@ -1,8 +1,8 @@ -#include "module_base/global_variable.h" -#include "module_base/tool_quit.h" #include "module_parameter/parameter.h" #include "read_input.h" #include "read_input_tool.h" +#include "source_base/global_variable.h" +#include "source_base/tool_quit.h" namespace ModuleIO { /// @note Here para.inp has been synchronized of all ranks. diff --git a/source/module_io/read_wf2rho_pw.cpp b/source/module_io/read_wf2rho_pw.cpp index c132d26fd6..614d9f09fb 100644 --- a/source/module_io/read_wf2rho_pw.cpp +++ b/source/module_io/read_wf2rho_pw.cpp @@ -1,55 +1,58 @@ #include "read_wf2rho_pw.h" -#include "read_wfc_pw.h" -#include "module_base/timer.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_elecstate/module_charge/symmetry_rho.h" -#include "module_parameter/parameter.h" #include "module_elecstate/kernels/elecstate_op.h" +#include "module_elecstate/module_charge/symmetry_rho.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/filename.h" - -void ModuleIO::read_wf2rho_pw( - const ModulePW::PW_Basis_K* pw_wfc, - ModuleSymmetry::Symmetry& symm, - Charge& chg, - const std::string &readin_dir, - const int kpar, - const int my_pool, - const int my_rank, - const int nproc_in_pool, - const int rank_in_pool, - const int nbands, - const int nspin, - const int npol, - const int nkstot, - const std::vector &ik2iktot, - const std::vector &isk, - std::ofstream &ofs_running) +#include "module_parameter/parameter.h" +#include "read_wfc_pw.h" +#include "source_base/timer.h" + +void ModuleIO::read_wf2rho_pw(const ModulePW::PW_Basis_K* pw_wfc, + ModuleSymmetry::Symmetry& symm, + Charge& chg, + const std::string& readin_dir, + const int kpar, + const int my_pool, + const int my_rank, + const int nproc_in_pool, + const int rank_in_pool, + const int nbands, + const int nspin, + const int npol, + const int nkstot, + const std::vector& ik2iktot, + const std::vector& isk, + std::ofstream& ofs_running) { ModuleBase::TITLE("ModuleIO", "read_wf2rho_pw"); ModuleBase::timer::tick("ModuleIO", "read_wf2rho_pw"); - ofs_running << " READING WAVE FUNCTIONS" << std::endl; - ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - ">>>>>>>>>>>>>>>>>>>>>>>>>" << std::endl; - ofs_running << " | " - " |" << std::endl; - ofs_running << " | Reading electronic wave functions in plane wave basis set and |" << std::endl; - ofs_running << " | evaluate charge density based on these wave functions |" << std::endl; - ofs_running << " | " - " |" << std::endl; - ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - ">>>>>>>>>>>>>>>>>>>>>>>>>" << std::endl; - - assert(kpar>=1); - assert(my_pool>=0); - assert(my_rank>=0); - assert(nbands>0); - assert(nspin>0); - assert(npol==1 || npol==2); + ofs_running << " READING WAVE FUNCTIONS" << std::endl; + ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + ">>>>>>>>>>>>>>>>>>>>>>>>>" + << std::endl; + ofs_running << " | " + " |" + << std::endl; + ofs_running << " | Reading electronic wave functions in plane wave basis set and |" << std::endl; + ofs_running << " | evaluate charge density based on these wave functions |" << std::endl; + ofs_running << " | " + " |" + << std::endl; + ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + ">>>>>>>>>>>>>>>>>>>>>>>>>" + << std::endl; + + assert(kpar >= 1); + assert(my_pool >= 0); + assert(my_rank >= 0); + assert(nbands > 0); + assert(nspin > 0); + assert(npol == 1 || npol == 2); const int nrxx = pw_wfc->nrxx; - assert(nrxx>=0); + assert(nrxx >= 0); for (int is = 0; is < nspin; ++is) { @@ -68,30 +71,30 @@ void ModuleIO::read_wf2rho_pw( std::string filename = readin_dir + "eig.txt"; std::ifstream ifs(filename); - if(!ifs) - { + if (!ifs) + { std::stringstream sss; sss << "Cannot find file " << filename; - ModuleBase::WARNING_QUIT("ModuleIO::read_wf2rho_pw", sss.str()); - } + ModuleBase::WARNING_QUIT("ModuleIO::read_wf2rho_pw", sss.str()); + } else { ofs_running << " Find file containing weights of wave function: " << filename << std::endl; } - std::string useless; - getline(ifs, useless); - getline(ifs, useless); - for (int ik_tot = 0; ik_tot < nkstot; ++ik_tot) - { - ifs >> useless; - getline(ifs, useless); - for (int ib = 0; ib < nbands; ++ib) - { - ifs >> useless >> useless >> wg_tmp(ik_tot, ib); - } - } - } + std::string useless; + getline(ifs, useless); + getline(ifs, useless); + for (int ik_tot = 0; ik_tot < nkstot; ++ik_tot) + { + ifs >> useless; + getline(ifs, useless); + for (int ib = 0; ib < nbands; ++ib) + { + ifs >> useless >> useless >> wg_tmp(ik_tot, ib); + } + } + } #ifdef __MPI MPI_Bcast(wg_tmp.c, nkstot * nbands, MPI_DOUBLE, 0, MPI_COMM_WORLD); @@ -113,14 +116,21 @@ void ModuleIO::read_wf2rho_pw( const bool gamma_only = false; const int istep = -1; - std::string fn = filename_output(readin_dir,"wf","pw",ik,ik2iktot,nspin,nkstot, - out_type,out_app_flag,gamma_only,istep); + std::string fn = filename_output(readin_dir, + "wf", + "pw", + ik, + ik2iktot, + nspin, + nkstot, + out_type, + out_app_flag, + gamma_only, + istep); ofs_running << " Reading wave function from file: " << fn << std::endl; - ModuleIO::read_wfc_pw(fn, pw_wfc, - rank_in_pool, nproc_in_pool, nbands, npol, - ik, ikstot, nkstot, wfc_tmp); + ModuleIO::read_wfc_pw(fn, pw_wfc, rank_in_pool, nproc_in_pool, nbands, npol, ik, ikstot, nkstot, wfc_tmp); if (nspin == 4) { @@ -158,9 +168,13 @@ void ModuleIO::read_wf2rho_pw( if (w1 != 0.0) { - base_device::DEVICE_CPU* ctx = nullptr; - elecstate::elecstate_pw_op()(ctx, is, nrxx, - w1, chg.rho, rho_tmp.data()); + base_device::DEVICE_CPU* ctx = nullptr; + elecstate::elecstate_pw_op()(ctx, + is, + nrxx, + w1, + chg.rho, + rho_tmp.data()); } } } @@ -174,7 +188,7 @@ void ModuleIO::read_wf2rho_pw( } #endif - // Since rho is calculated by psi^2, it is not symmetric. We need to rearrange it. + // Since rho is calculated by psi^2, it is not symmetric. We need to rearrange it. Symmetry_rho srho; for (int is = 0; is < nspin; is++) { diff --git a/source/module_io/read_wfc_lcao.cpp b/source/module_io/read_wfc_lcao.cpp index 00d6279023..9c3e73cc18 100644 --- a/source/module_io/read_wfc_lcao.cpp +++ b/source/module_io/read_wfc_lcao.cpp @@ -1,7 +1,7 @@ #include "module_io/read_wfc_lcao.h" -#include "module_base/formatter.h" -#include "module_base/tool_quit.h" +#include "source_base/formatter.h" +#include "source_base/tool_quit.h" #include #include @@ -9,28 +9,28 @@ #include #ifdef __MPI -#include "module_base/parallel_common.h" +#include "source_base/parallel_common.h" #endif /* template void ModuleIO::read_wfc_lcao(const std::string& file, - int& ik, - ModuleBase::Vector3& kvec_c, - int& nbands, - int& nbasis, - std::vector>& lowf, - std::vector& ekb, - std::vector& occ, - double& wk) //<[out] wavefunction coefficients + int& ik, + ModuleBase::Vector3& kvec_c, + int& nbands, + int& nbasis, + std::vector>& lowf, + std::vector& ekb, + std::vector& occ, + double& wk) //<[out] wavefunction coefficients { // assert the T must be double or float std::ifstream ifs(file.c_str()); - if (!ifs) - { - ModuleBase::WARNING_QUIT("ModuleIO::read_wfc_lcao", "open file failed: " + file); - } - // will use line-by-line parse + if (!ifs) + { + ModuleBase::WARNING_QUIT("ModuleIO::read_wfc_lcao", "open file failed: " + file); + } + // will use line-by-line parse std::string line; bool read_kvec = false; int iband = 0; @@ -137,7 +137,7 @@ void ModuleIO::read_wfc_lcao(const std::string& file, double& wk) { std::ifstream ifs(file.c_str()); - if (!ifs) + if (!ifs) { ModuleBase::WARNING_QUIT("ModuleIO::read_wfc_lcao", "open file failed: " + file); } @@ -266,10 +266,10 @@ void ModuleIO::restart_from_file(const std::string& out_dir, // hard-code the fi // check existence of file const std::string file = out_dir + "/" + file_prefix + std::to_string(ik + 1) + ".txt"; std::ifstream ifs(file); - if (!ifs) - { - ModuleBase::WARNING_QUIT("Module_IO::restart_from_file", "open file failed: " + file); - } + if (!ifs) + { + ModuleBase::WARNING_QUIT("Module_IO::restart_from_file", "open file failed: " + file); + } std::vector lowf_glb; std::vector lowf_loc_k; @@ -415,10 +415,10 @@ void ModuleIO::restart_from_file(const std::string& out_dir, // hard-code the fi // check existence of file const std::string file = out_dir + "/" + file_prefix + std::to_string(ik + 1) + ".txt"; const std::ifstream ifs(file); - if (!ifs) - { - ModuleBase::WARNING_QUIT("restart_from_file", "open file failed: " + file); - } + if (!ifs) + { + ModuleBase::WARNING_QUIT("restart_from_file", "open file failed: " + file); + } std::vector lowf_; std::vector ekb_; diff --git a/source/module_io/read_wfc_lcao.h b/source/module_io/read_wfc_lcao.h index 577b0fcff9..a5ab9d672b 100644 --- a/source/module_io/read_wfc_lcao.h +++ b/source/module_io/read_wfc_lcao.h @@ -1,14 +1,15 @@ #ifndef READ_WFC_LCAO_H #define READ_WFC_LCAO_H -#include "module_base/vector3.h" +#include "source_base/vector3.h" + #include #include #include #ifdef __MPI -#include "module_base/scalapack_connector.h" -#include "module_base/parallel_2d.h" +#include "source_base/parallel_2d.h" +#include "source_base/scalapack_connector.h" #endif /** @@ -25,7 +26,7 @@ namespace ModuleIO * @brief Read the wavefunction coefficients from the file (for complex wavefunction coefficients) * * @tparam T - * @param file [in] file name + * @param file [in] file name * @param ik [out] the index of k points * @param kvec_c [out] the k vector in Cartesian coordinates * @param nbands [out] the number of bands @@ -83,5 +84,5 @@ void restart_from_file(const std::string& out_dir, // hard-code the file name to std::vector& occ, std::vector>& kvec_c, std::vector& wk); */ -} +} // namespace ModuleIO #endif diff --git a/source/module_io/read_wfc_nao.cpp b/source/module_io/read_wfc_nao.cpp index 308b9e2a1b..015cd8162e 100644 --- a/source/module_io/read_wfc_nao.cpp +++ b/source/module_io/read_wfc_nao.cpp @@ -1,12 +1,11 @@ #include "read_wfc_nao.h" -#include "module_base/parallel_common.h" -#include "module_base/timer.h" +#include "module_io/filename.h" #include "module_io/write_wfc_nao.h" - +#include "source_base/parallel_common.h" +#include "source_base/scalapack_connector.h" +#include "source_base/timer.h" #include "write_wfc_nao.h" -#include "module_base/scalapack_connector.h" -#include "module_io/filename.h" void ModuleIO::read_wfc_nao_one_data(std::ifstream& ifs, double& data) { @@ -22,15 +21,14 @@ void ModuleIO::read_wfc_nao_one_data(std::ifstream& ifs, std::complex& d } template -bool ModuleIO::read_wfc_nao( - const std::string& global_readin_dir, - const Parallel_Orbitals& ParaV, - psi::Psi& psid, - elecstate::ElecState* const pelec, - const std::vector &ik2iktot, - const int nkstot, - const int nspin, - const int skip_band) +bool ModuleIO::read_wfc_nao(const std::string& global_readin_dir, + const Parallel_Orbitals& ParaV, + psi::Psi& psid, + elecstate::ElecState* const pelec, + const std::vector& ik2iktot, + const int nkstot, + const int nspin, + const int skip_band) { ModuleBase::TITLE("ModuleIO", "read_wfc_nao"); ModuleBase::timer::tick("ModuleIO", "read_wfc_nao"); @@ -43,8 +41,8 @@ bool ModuleIO::read_wfc_nao( int myrank = 0; int nbands = ParaV.get_wfc_global_nbands(); // the global number of bands int nlocal = ParaV.get_wfc_global_nbasis(); // the global number of basis functions - int nbands_local = ParaV.ncol_bands; // the number of bands in the local process - int nlocal_local = ParaV.nrow_bands; // the number of basis functions in the local process + int nbands_local = ParaV.ncol_bands; // the number of bands in the local process + int nlocal_local = ParaV.nrow_bands; // the number of basis functions in the local process if (gamma_only) { @@ -56,101 +54,98 @@ bool ModuleIO::read_wfc_nao( #ifdef __MPI MPI_Comm_rank(ParaV.comm(), &myrank); -#endif +#endif // lambda function to read one file - auto read_one_file = [&](const std::string& ss, - std::stringstream& error_message, - const int ik, - std::vector& ctot) - { - std::ifstream ifs; - ifs.open(ss.c_str()); - if (!ifs) - { - error_message << " Can't open file:" << ss << std::endl; - return false; - } - else - { - std::cout << " Read NAO wave functions from " << ss << std::endl; - } + auto read_one_file = + [&](const std::string& ss, std::stringstream& error_message, const int ik, std::vector& ctot) { + std::ifstream ifs; + ifs.open(ss.c_str()); + if (!ifs) + { + error_message << " Can't open file:" << ss << std::endl; + return false; + } + else + { + std::cout << " Read NAO wave functions from " << ss << std::endl; + } - if (!gamma_only) - { - int ik_file = 0; - double kx = 0.0; - double ky = 0.0; - double kz = 0.0; - ModuleBase::GlobalFunc::READ_VALUE(ifs, ik_file); - ifs >> kx >> ky >> kz; - if (ik_file != ik + 1) + if (!gamma_only) { - error_message << "The k index read in from file do not match the k index generated by ABACUS!\n"; - error_message << " read in k index=" << ik_file; - error_message << " ABACUS k index =" << ik+1 << std::endl; + int ik_file = 0; + double kx = 0.0; + double ky = 0.0; + double kz = 0.0; + ModuleBase::GlobalFunc::READ_VALUE(ifs, ik_file); + ifs >> kx >> ky >> kz; + if (ik_file != ik + 1) + { + error_message << "The k index read in from file do not match the k index generated by ABACUS!\n"; + error_message << " read in k index=" << ik_file; + error_message << " ABACUS k index =" << ik + 1 << std::endl; + ifs.close(); + return false; + } + } + int nbands_file = 0, nlocal_file = 0; + ModuleBase::GlobalFunc::READ_VALUE(ifs, nbands_file); + ModuleBase::GlobalFunc::READ_VALUE(ifs, nlocal_file); + if (nbands > nbands_file) + { + error_message + << "The number of bands to be read exceeds the number of bands in the file generated by ABACUS!\n"; + error_message << " nbands in the existing file=" << nbands_file; + error_message << " nbands to be read into ABACUS=" << nbands << std::endl; ifs.close(); return false; } - } - int nbands_file = 0, nlocal_file = 0; - ModuleBase::GlobalFunc::READ_VALUE(ifs, nbands_file); - ModuleBase::GlobalFunc::READ_VALUE(ifs, nlocal_file); - if (nbands > nbands_file) - { - error_message << "The number of bands to be read exceeds the number of bands in the file generated by ABACUS!\n"; - error_message << " nbands in the existing file=" << nbands_file; - error_message << " nbands to be read into ABACUS=" << nbands << std::endl; - ifs.close(); - return false; - } - if (nlocal != nlocal_file) - { - error_message << "The nlocal read in from file do not match the nlocal generated by ABACUS!\n"; - error_message << " read in nlocal=" << nlocal_file; - error_message << " ABACUS nlocal =" << nlocal << std::endl; - ifs.close(); - return false; - } - for (int i = 0; i < skip_band + nbands; i++) - { - // the first skip_bands useless bands are read into 0th band to be overwritten - const int ib_read = std::max(i - skip_band, 0); - int ib = 0; - ModuleBase::GlobalFunc::READ_VALUE(ifs, ib); - ModuleBase::GlobalFunc::READ_VALUE(ifs, pelec->ekb(ik, ib_read)); - ModuleBase::GlobalFunc::READ_VALUE(ifs, pelec->wg(ik, ib_read)); - if (i+1 != ib) + if (nlocal != nlocal_file) { - error_message << "The band index read in from file do not match the global parameter band index!\n"; - error_message << " read in band index=" << ib; - error_message << " band index=" << i+1 << std::endl; + error_message << "The nlocal read in from file do not match the nlocal generated by ABACUS!\n"; + error_message << " read in nlocal=" << nlocal_file; + error_message << " ABACUS nlocal =" << nlocal << std::endl; ifs.close(); return false; } - for (int j = 0; j < nlocal; j++) + for (int i = 0; i < skip_band + nbands; i++) { - read_wfc_nao_one_data(ifs, ctot[ib_read * nlocal + j]); + // the first skip_bands useless bands are read into 0th band to be overwritten + const int ib_read = std::max(i - skip_band, 0); + int ib = 0; + ModuleBase::GlobalFunc::READ_VALUE(ifs, ib); + ModuleBase::GlobalFunc::READ_VALUE(ifs, pelec->ekb(ik, ib_read)); + ModuleBase::GlobalFunc::READ_VALUE(ifs, pelec->wg(ik, ib_read)); + if (i + 1 != ib) + { + error_message << "The band index read in from file do not match the global parameter band index!\n"; + error_message << " read in band index=" << ib; + error_message << " band index=" << i + 1 << std::endl; + ifs.close(); + return false; + } + for (int j = 0; j < nlocal; j++) + { + read_wfc_nao_one_data(ifs, ctot[ib_read * nlocal + j]); + } } - } - ifs.close(); - return true; - }; // end read one file - + ifs.close(); + return true; + }; // end read one file std::string errors; - std::vector ctot; - if (myrank == 0) - { - ctot.resize(nbands * nlocal); - } - else - { - ctot.resize(0); - } - - for(int ik=0;ik ctot; + if (myrank == 0) + { + ctot.resize(nbands * nlocal); + } + else + { + ctot.resize(0); + } + + for (int ik = 0; ik < nk; ik++) { if (myrank == 0) { @@ -158,16 +153,25 @@ bool ModuleIO::read_wfc_nao( const int istep = -1; std::stringstream error_message; - std::string ss = ModuleIO::filename_output(global_readin_dir,"wf","nao", - ik,ik2iktot,nspin,nkstot,out_type,out_app_flag,gamma_only,istep); + std::string ss = ModuleIO::filename_output(global_readin_dir, + "wf", + "nao", + ik, + ik2iktot, + nspin, + nkstot, + out_type, + out_app_flag, + gamma_only, + istep); read_success = read_one_file(ss, error_message, ik, ctot); errors = error_message.str(); - } + } #ifdef __MPI Parallel_Common::bcast_bool(read_success); Parallel_Common::bcast_string(errors); -#endif +#endif if (!read_success) { std::cout << " Error in reading wave function files!\n"; @@ -193,27 +197,27 @@ bool ModuleIO::read_wfc_nao( Parallel_Common::bcast_double(&(pelec->ekb(ik, 0)), nbands); Parallel_Common::bcast_double(&(pelec->wg(ik, 0)), nbands); #else - BlasConnector::copy(nbands*nlocal, ctot.data(), 1, psid.get_pointer(), 1); + BlasConnector::copy(nbands * nlocal, ctot.data(), 1, psid.get_pointer(), 1); #endif - }// end of loop over k-points - - return true; + } // end of loop over k-points + + return true; }; template bool ModuleIO::read_wfc_nao(const std::string& global_readin_dir, - const Parallel_Orbitals& ParaV, - psi::Psi& psid, - elecstate::ElecState* const pelec, - const std::vector &ik2iktot, - const int nkstot, - const int nspin, - const int skip_band); + const Parallel_Orbitals& ParaV, + psi::Psi& psid, + elecstate::ElecState* const pelec, + const std::vector& ik2iktot, + const int nkstot, + const int nspin, + const int skip_band); template bool ModuleIO::read_wfc_nao>(const std::string& global_readin_dir, - const Parallel_Orbitals& ParaV, - psi::Psi>& psid, - elecstate::ElecState* const pelec, - const std::vector &ik2iktot, - const int nkstot, - const int nspin, - const int skip_band); + const Parallel_Orbitals& ParaV, + psi::Psi>& psid, + elecstate::ElecState* const pelec, + const std::vector& ik2iktot, + const int nkstot, + const int nspin, + const int skip_band); diff --git a/source/module_io/read_wfc_pw.cpp b/source/module_io/read_wfc_pw.cpp index 837023637c..9037301172 100644 --- a/source/module_io/read_wfc_pw.cpp +++ b/source/module_io/read_wfc_pw.cpp @@ -1,24 +1,24 @@ #include "read_wfc_pw.h" -#include "module_parameter/parameter.h" #include "binstream.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_common.h" -#include "module_base/parallel_global.h" -#include "module_base/timer.h" -#include "module_base/vector3.h" +#include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_common.h" +#include "source_base/parallel_global.h" +#include "source_base/timer.h" +#include "source_base/vector3.h" void ModuleIO::read_wfc_pw(const std::string& filename, - const ModulePW::PW_Basis_K* pw_wfc, - const int rank_in_pool, - const int nproc_in_pool, - const int nbands, - const int npol, - const int& ik, - const int& ikstot, - const int& nkstot, - ModuleBase::ComplexMatrix& wfc) + const ModulePW::PW_Basis_K* pw_wfc, + const int rank_in_pool, + const int nproc_in_pool, + const int nbands, + const int npol, + const int& ik, + const int& ikstot, + const int& nkstot, + ModuleBase::ComplexMatrix& wfc) { ModuleBase::TITLE("ModuleIO", "read_wfc_pw"); ModuleBase::timer::tick("ModuleIO", "read_wfc_pw"); @@ -78,7 +78,6 @@ void ModuleIO::read_wfc_pw(const std::string& filename, #endif int npwtot_npol = npwtot * npol; - // read in some information int ikstot_in = -1; int nkstot_in = -1; diff --git a/source/module_io/restart.cpp b/source/module_io/restart.cpp index fe8c143b05..72a70c5bea 100644 --- a/source/module_io/restart.cpp +++ b/source/module_io/restart.cpp @@ -1,40 +1,53 @@ #include "restart.h" -#include -#include +#include "source_base/global_function.h" +#include #include #include +#include -#include "module_base/global_function.h" - -void Restart::write_file1(const std::string &file_name, const void*const ptr, const size_t size) const +void Restart::write_file1(const std::string& file_name, const void* const ptr, const size_t size) const { - std::ofstream ofs(file_name, std::ofstream::binary|std::ofstream::trunc); - ofs.write(static_cast(ptr),size); + std::ofstream ofs(file_name, std::ofstream::binary | std::ofstream::trunc); + ofs.write(static_cast(ptr), size); } -void Restart::read_file1(const std::string &file_name, void*const ptr, const size_t size) const +void Restart::read_file1(const std::string& file_name, void* const ptr, const size_t size) const { - std::ifstream ifs(file_name, std::ifstream::binary); - ifs.read(static_cast(ptr),size); + std::ifstream ifs(file_name, std::ifstream::binary); + ifs.read(static_cast(ptr), size); } -bool Restart::write_file2(const std::string& file_name, const void* const ptr, const size_t size, const bool error_quit) const +bool Restart::write_file2(const std::string& file_name, + const void* const ptr, + const size_t size, + const bool error_quit) const { - const int file = open(file_name.c_str(), O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR); - if (-1 == file){ - if (error_quit){ - throw std::runtime_error("can't open restart save file. \nerrno=" + ModuleBase::GlobalFunc::TO_STRING(errno) + ".\n" + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } else { + const int file = open(file_name.c_str(), O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); + if (-1 == file) + { + if (error_quit) + { + throw std::runtime_error("can't open restart save file. \nerrno=" + ModuleBase::GlobalFunc::TO_STRING(errno) + + ".\n" + std::string(__FILE__) + " line " + std::to_string(__LINE__)); + } + else + { return false; } } auto error = write(file, ptr, size); - if (-1 == error) { - if (error_quit) { - throw std::runtime_error("can't write restart save file. \nerrno=" + ModuleBase::GlobalFunc::TO_STRING(errno) + ".\n" + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } else { + if (-1 == error) + { + if (error_quit) + { + throw std::runtime_error("can't write restart save file. \nerrno=" + + ModuleBase::GlobalFunc::TO_STRING(errno) + ".\n" + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } + else + { return false; } } @@ -44,19 +57,29 @@ bool Restart::write_file2(const std::string& file_name, const void* const ptr, c bool Restart::read_file2(const std::string& file_name, void* const ptr, const size_t size, const bool error_quit) const { - const int file = open(file_name.c_str(), O_RDONLY); - if (-1 == file) { - if (error_quit) { - throw std::runtime_error("can't open restart load file. \nerrno=" + ModuleBase::GlobalFunc::TO_STRING(errno) + ".\n" + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } else { + const int file = open(file_name.c_str(), O_RDONLY); + if (-1 == file) + { + if (error_quit) + { + throw std::runtime_error("can't open restart load file. \nerrno=" + ModuleBase::GlobalFunc::TO_STRING(errno) + + ".\n" + std::string(__FILE__) + " line " + std::to_string(__LINE__)); + } + else + { return false; } } auto error = read(file, ptr, size); - if (-1 == error) { - if (error_quit) { - throw std::runtime_error("can't read restart load file. \nerrno=" + ModuleBase::GlobalFunc::TO_STRING(errno) + ".\n" + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } else { + if (-1 == error) + { + if (error_quit) + { + throw std::runtime_error("can't read restart load file. \nerrno=" + ModuleBase::GlobalFunc::TO_STRING(errno) + + ".\n" + std::string(__FILE__) + " line " + std::to_string(__LINE__)); + } + else + { return false; } } diff --git a/source/module_io/restart.h b/source/module_io/restart.h index 16bae1fa0f..7fc7af8a66 100644 --- a/source/module_io/restart.h +++ b/source/module_io/restart.h @@ -1,58 +1,68 @@ #ifndef RESTART_H #define RESTART_H +#include "source_base/abfs-vector3_order.h" +#include "source_base/global_function.h" + #include -#include "module_base/global_function.h" -#include "module_base/abfs-vector3_order.h" #ifdef __EXX #include #endif class Restart { -public: - struct Info_Save - { - bool save_charge = false; - bool save_H = false; // save H means save Hexx now, will be changed in the future. - }; - Info_Save info_save; - - struct Info_Load - { - bool load_charge = false; - bool load_charge_finish = false; - bool load_H = false; - bool load_H_finish = false; - bool restart_exx = false; // to avoid the repeated load in MD/Relax - }; - Info_Load info_load; - - std::string folder; - - template - bool save_disk(const std::string label, const int index, const int size, T* data, const bool error_quit = true) const + public: + struct Info_Save + { + bool save_charge = false; + bool save_H = false; // save H means save Hexx now, will be changed in the future. + }; + Info_Save info_save; + + struct Info_Load + { + bool load_charge = false; + bool load_charge_finish = false; + bool load_H = false; + bool load_H_finish = false; + bool restart_exx = false; // to avoid the repeated load in MD/Relax + }; + Info_Load info_load; + + std::string folder; + + template + bool save_disk(const std::string label, const int index, const int size, T* data, const bool error_quit = true) + const { return write_file2(folder + label + "_" + ModuleBase::GlobalFunc::TO_STRING(GlobalV::MY_RANK) + "_" - + ModuleBase::GlobalFunc::TO_STRING(index), - data, - size * sizeof(T), - error_quit); + + ModuleBase::GlobalFunc::TO_STRING(index), + data, + size * sizeof(T), + error_quit); } - template - bool load_disk(const std::string label, const int index, const int size, T* data, const bool error_quit = true) const + template + bool load_disk(const std::string label, const int index, const int size, T* data, const bool error_quit = true) + const { return read_file2(folder + label + "_" + ModuleBase::GlobalFunc::TO_STRING(GlobalV::MY_RANK) + "_" - + ModuleBase::GlobalFunc::TO_STRING(index), - data, - size * sizeof(T), - error_quit); + + ModuleBase::GlobalFunc::TO_STRING(index), + data, + size * sizeof(T), + error_quit); } -private: - void write_file1(const std::string &file_name, const void*const ptr, const size_t size) const; - void read_file1(const std::string &file_name, void*const ptr, const size_t size) const; - bool write_file2(const std::string& file_name, const void* const ptr, const size_t size, const bool error_quit = true) const; - bool read_file2(const std::string& file_name, void* const ptr, const size_t size, const bool error_quit = true) const; + + private: + void write_file1(const std::string& file_name, const void* const ptr, const size_t size) const; + void read_file1(const std::string& file_name, void* const ptr, const size_t size) const; + bool write_file2(const std::string& file_name, + const void* const ptr, + const size_t size, + const bool error_quit = true) const; + bool read_file2(const std::string& file_name, + void* const ptr, + const size_t size, + const bool error_quit = true) const; }; #endif diff --git a/source/module_io/restart_exx_csr.h b/source/module_io/restart_exx_csr.h index 1eab69f4ef..85cfbe8abf 100644 --- a/source/module_io/restart_exx_csr.h +++ b/source/module_io/restart_exx_csr.h @@ -1,38 +1,42 @@ #pragma once -#include "module_base/abfs-vector3_order.h" #include "module_cell/unitcell.h" #include "module_ri/serialization_cereal.h" +#include "source_base/abfs-vector3_order.h" + #include #include namespace ModuleIO { - using TC = std::array; - using TAC = std::pair; +using TC = std::array; +using TAC = std::pair; - /// read Hexxs in CSR format - template - void read_Hexxs_csr(const std::string& file_name, const UnitCell& ucell, - const int nspin, const int nbasis, - std::vector>>>& Hexxs); +/// read Hexxs in CSR format +template +void read_Hexxs_csr(const std::string& file_name, + const UnitCell& ucell, + const int nspin, + const int nbasis, + std::vector>>>& Hexxs); - /// read Hexxs in cereal format - template - void read_Hexxs_cereal(const std::string& file_name, - std::vector>>>& Hexxs); +/// read Hexxs in cereal format +template +void read_Hexxs_cereal(const std::string& file_name, + std::vector>>>& Hexxs); - /// write Hexxs in CSR format - template - void write_Hexxs_csr(const std::string& file_name, const UnitCell& ucell, - const std::map>>& Hexxs); +/// write Hexxs in CSR format +template +void write_Hexxs_csr(const std::string& file_name, + const UnitCell& ucell, + const std::map>>& Hexxs); - /// calculate CSR sparse matrix from the global matrix stored with RI::Tensor - /// the return type is same as SR_sparse, HR_sparse, etc. - template - std::map, std::map>> - calculate_RI_Tensor_sparse(const double& sparse_threshold, - const std::vector>>>& Hexxs, - const UnitCell& ucell); -} +/// calculate CSR sparse matrix from the global matrix stored with RI::Tensor +/// the return type is same as SR_sparse, HR_sparse, etc. +template +std::map, std::map>> calculate_RI_Tensor_sparse( + const double& sparse_threshold, + const std::vector>>>& Hexxs, + const UnitCell& ucell); +} // namespace ModuleIO #include "module_io/restart_exx_csr.hpp" \ No newline at end of file diff --git a/source/module_io/rhog_io.cpp b/source/module_io/rhog_io.cpp index f01b78fdcb..af59109e13 100644 --- a/source/module_io/rhog_io.cpp +++ b/source/module_io/rhog_io.cpp @@ -1,11 +1,13 @@ +#include "rhog_io.h" + #include "binstream.h" -#include "module_base/global_function.h" #include "module_parameter/parameter.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_global.h" -#include "module_base/timer.h" -#include "module_base/vector3.h" -#include "rhog_io.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_global.h" +#include "source_base/timer.h" +#include "source_base/vector3.h" + #include #include @@ -88,8 +90,8 @@ bool ModuleIO::read_rhog(const std::string& filename, const ModulePW::PW_Basis* MPI_Bcast(b2, 3, MPI_DOUBLE, 0, POOL_WORLD); MPI_Bcast(b3, 3, MPI_DOUBLE, 0, POOL_WORLD); #endif - std::vector miller(npwtot_in * 3); - // once use ModuleBase::Vector3, it is highly bug-prone to assume the memory layout of the class. + std::vector miller(npwtot_in * 3); + // once use ModuleBase::Vector3, it is highly bug-prone to assume the memory layout of the class. // The x, y and z of Vector3 will not always to be contiguous. // Instead, a relatively safe choice is to use std::vector, the memory layout is assumed // to be npwtot_in rows and 3 columns. @@ -98,7 +100,7 @@ bool ModuleIO::read_rhog(const std::string& filename, const ModulePW::PW_Basis* ifs >> size; for (int i = 0; i < npwtot_in; ++i) // loop over rows... { - ifs >> miller[i*3] >> miller[i*3+1] >> miller[i*3+2]; + ifs >> miller[i * 3] >> miller[i * 3 + 1] >> miller[i * 3 + 2]; } ifs >> size; } @@ -199,10 +201,10 @@ bool ModuleIO::read_rhog(const std::string& filename, const ModulePW::PW_Basis* } bool ModuleIO::write_rhog(const std::string& fchg, - const bool gamma_only, // from INPUT + const bool gamma_only, // from INPUT const ModulePW::PW_Basis* pw_rho, // pw_rho in runtime - const int nspin, // GlobalV - const ModuleBase::Matrix3& GT, // from UnitCell, useful for calculating the miller + const int nspin, // GlobalV + const ModuleBase::Matrix3& GT, // from UnitCell, useful for calculating the miller std::complex** rhog, const int ipool, const int irank, @@ -210,7 +212,10 @@ bool ModuleIO::write_rhog(const std::string& fchg, { ModuleBase::TITLE("ModuleIO", "write_rhog"); ModuleBase::timer::tick("ModuleIO", "write_rhog"); - if (ipool != 0) { return true; } + if (ipool != 0) + { + return true; + } // only one pool writes the rhog, because rhog in all pools are identical. // for large-scale data, it is not wise to collect all distributed components to the @@ -224,7 +229,6 @@ bool ModuleIO::write_rhog(const std::string& fchg, // each time we iterate on ig, then find the rho_g over all the processes // for ig in npwtot, then find the local index of ig on processor, ig -> fftixy2ip -> igl - // write the header (by rank 0): gamma_only, ngm_g, nspin int size = 3; // because "reinterpret_cast" cannot drop the "const", so use intermediate variable @@ -234,36 +238,36 @@ bool ModuleIO::write_rhog(const std::string& fchg, std::ofstream ofs; #ifdef __MPI - MPI_Barrier(POOL_WORLD); + MPI_Barrier(POOL_WORLD); // this is still a global variable... should be moved into param // list as `const MPI_Comm& comm` if (irank == 0) { // printf(" CHGDEN >>> Writing header by rank %d...\n", irank); #endif - ofs.open(fchg, std::ios::binary); // open the file by all processors - if (!ofs) - { - ModuleBase::WARNING_QUIT("ModuleIO::write_rhog", "File I/O failure: cannot open file " + fchg); - return false; - } - ofs.write(reinterpret_cast(&size), sizeof(size)); - ofs.write(reinterpret_cast(&gam), sizeof(gam)); - ofs.write(reinterpret_cast(&ngm_g), sizeof(ngm_g)); - ofs.write(reinterpret_cast(&nsp), sizeof(nsp)); - ofs.write(reinterpret_cast(&size), sizeof(size)); - // write the lattice vectors, GT is the reciprocal lattice vectors, need 2pi? - std::vector b = {GT.e11, GT.e12, GT.e13, GT.e21, GT.e22, GT.e23, GT.e31, GT.e32, GT.e33}; - size = 9; - ofs.write(reinterpret_cast(&size), sizeof(size)); - for (int i = 0; i < 9; ++i) - { - ofs.write(reinterpret_cast(&b[i]), sizeof(b[i])); - } - ofs.write(reinterpret_cast(&size), sizeof(size)); - ofs.close(); + ofs.open(fchg, std::ios::binary); // open the file by all processors + if (!ofs) + { + ModuleBase::WARNING_QUIT("ModuleIO::write_rhog", "File I/O failure: cannot open file " + fchg); + return false; + } + ofs.write(reinterpret_cast(&size), sizeof(size)); + ofs.write(reinterpret_cast(&gam), sizeof(gam)); + ofs.write(reinterpret_cast(&ngm_g), sizeof(ngm_g)); + ofs.write(reinterpret_cast(&nsp), sizeof(nsp)); + ofs.write(reinterpret_cast(&size), sizeof(size)); + // write the lattice vectors, GT is the reciprocal lattice vectors, need 2pi? + std::vector b = {GT.e11, GT.e12, GT.e13, GT.e21, GT.e22, GT.e23, GT.e31, GT.e32, GT.e33}; + size = 9; + ofs.write(reinterpret_cast(&size), sizeof(size)); + for (int i = 0; i < 9; ++i) + { + ofs.write(reinterpret_cast(&b[i]), sizeof(b[i])); + } + ofs.write(reinterpret_cast(&size), sizeof(size)); + ofs.close(); #ifdef __MPI - // printf(" CHGDEN >>> Complete header writting by rank %d\n", irank); + // printf(" CHGDEN >>> Complete header writting by rank %d\n", irank); } MPI_Barrier(POOL_WORLD); // wait for rank 0 to finish writing the header // printf(" CHGDEN >>> rank %d ready for continue writing...\n", irank); @@ -274,9 +278,9 @@ bool ModuleIO::write_rhog(const std::string& fchg, // the dot product of the G-vectors and the reciprocal lattice vectors // parallelization needed considered here. Because the sequence of the G-vectors // is not important, we can write the G-vectors processer by processer - size = 3*ngm_g; + size = 3 * ngm_g; #ifdef __MPI - if(irank == 0) + if (irank == 0) { // printf(" CHGDEN >>> Writing header of Miller indices by rank %d...\n", irank); #endif @@ -289,16 +293,17 @@ bool ModuleIO::write_rhog(const std::string& fchg, MPI_Barrier(POOL_WORLD); // wait for rank 0 to finish writing the header of miller indices #endif #ifdef __MPI - for(int i = 0; i < nrank; ++i) // write the miller indices processer by processer + for (int i = 0; i < nrank; ++i) // write the miller indices processer by processer { - if(i == irank) + if (i == irank) { // printf(" CHGDEN >>> Writing Miller indices by rank %d...\n", irank); #endif ofs.open(fchg, std::ios::binary | std::ios::app); // open the file by processer i - for(int ig = 0; ig < pw_rho->npw; ++ig) + for (int ig = 0; ig < pw_rho->npw; ++ig) { - const ModuleBase::Vector3 g = pw_rho->gdirect[ig]; // g direct is (ix, iy, iz), miller index (integer), centered at (0, 0, 0) + const ModuleBase::Vector3 g + = pw_rho->gdirect[ig]; // g direct is (ix, iy, iz), miller index (integer), centered at (0, 0, 0) std::vector miller = {int(g.x), int(g.y), int(g.z)}; ofs.write(reinterpret_cast(&miller[0]), sizeof(miller[0])); ofs.write(reinterpret_cast(&miller[1]), sizeof(miller[1])); @@ -312,7 +317,7 @@ bool ModuleIO::write_rhog(const std::string& fchg, } #endif #ifdef __MPI - if(irank == 0) + if (irank == 0) { #endif ofs.open(fchg, std::ios::binary | std::ios::app); // open the file by rank 0 @@ -326,10 +331,10 @@ bool ModuleIO::write_rhog(const std::string& fchg, // write the rho(G) values std::complex sum_check; size = ngm_g; - for(int ispin = 0; ispin < nspin; ++ispin) + for (int ispin = 0; ispin < nspin; ++ispin) { #ifdef __MPI - if(irank == 0) + if (irank == 0) { // printf(" CHGDEN >>> Writing header of rho(G) values by rank %d...\n", irank); #endif @@ -342,15 +347,15 @@ bool ModuleIO::write_rhog(const std::string& fchg, MPI_Barrier(POOL_WORLD); // wait for rank 0 to finish writing the header of rho(G) #endif #ifdef __MPI - for(int i = 0; i < nrank; ++i) // write the rho(G) values processer by processer + for (int i = 0; i < nrank; ++i) // write the rho(G) values processer by processer { - if(i == irank) + if (i == irank) { // printf(" CHGDEN >>> Writing rho(G) values by rank %d...\n", irank); #endif ofs.open(fchg, std::ios::binary | std::ios::app); // open the file by processer i sum_check = 0.0; - for(int ig = 0; ig < pw_rho->npw; ++ig) + for (int ig = 0; ig < pw_rho->npw; ++ig) { sum_check += rhog[ispin][ig]; ofs.write(reinterpret_cast(&rhog[ispin][ig]), sizeof(rhog[ispin][ig])); @@ -365,7 +370,7 @@ bool ModuleIO::write_rhog(const std::string& fchg, #endif #ifdef __MPI - if(irank == 0) + if (irank == 0) { #endif ofs.open(fchg, std::ios::binary | std::ios::app); // open the file by rank 0 diff --git a/source/module_io/single_R_io.cpp b/source/module_io/single_R_io.cpp index d49651b479..0c47099728 100644 --- a/source/module_io/single_R_io.cpp +++ b/source/module_io/single_R_io.cpp @@ -1,8 +1,9 @@ #include "single_R_io.h" -#include "module_base/parallel_reduce.h" + #include "module_parameter/parameter.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_reduce.h" inline void write_data(std::ofstream& ofs, const double& data) { @@ -10,17 +11,17 @@ inline void write_data(std::ofstream& ofs, const double& data) } inline void write_data(std::ofstream& ofs, const std::complex& data) { - ofs << " (" << std::fixed << std::scientific << std::setprecision(8) << data.real() << "," - << std::fixed << std::scientific << std::setprecision(8) << data.imag() << ")"; + ofs << " (" << std::fixed << std::scientific << std::setprecision(8) << data.real() << "," << std::fixed + << std::scientific << std::setprecision(8) << data.imag() << ")"; } -template +template void ModuleIO::output_single_R(std::ofstream& ofs, - const std::map>& XR, - const double& sparse_threshold, - const bool& binary, - const Parallel_Orbitals& pv, - const bool& reduce) + const std::map>& XR, + const double& sparse_threshold, + const bool& binary, + const Parallel_Orbitals& pv, + const bool& reduce) { T* line = nullptr; std::vector indptr; @@ -45,7 +46,7 @@ void ModuleIO::output_single_R(std::ofstream& ofs, } line = new T[PARAM.globalv.nlocal]; - for(int row = 0; row < PARAM.globalv.nlocal; ++row) + for (int row = 0; row < PARAM.globalv.nlocal; ++row) { ModuleBase::GlobalFunc::ZEROS(line, PARAM.globalv.nlocal); @@ -54,17 +55,17 @@ void ModuleIO::output_single_R(std::ofstream& ofs, auto iter = XR.find(row); if (iter != XR.end()) { - for (auto &value : iter->second) + for (auto& value: iter->second) { line[value.first] = value.second; } } } - if (reduce) - { - Parallel_Reduce::reduce_all(line, PARAM.globalv.nlocal); - } + if (reduce) + { + Parallel_Reduce::reduce_all(line, PARAM.globalv.nlocal); + } if (!reduce || GlobalV::DRANK == 0) { @@ -76,7 +77,7 @@ void ModuleIO::output_single_R(std::ofstream& ofs, if (binary) { ofs.write(reinterpret_cast(&line[col]), sizeof(T)); - ofs_tem1.write(reinterpret_cast(&col), sizeof(int)); + ofs_tem1.write(reinterpret_cast(&col), sizeof(int)); } else { @@ -85,9 +86,7 @@ void ModuleIO::output_single_R(std::ofstream& ofs, } nonzeros_count++; - } - } nonzeros_count += indptr.back(); indptr.push_back(nonzeros_count); @@ -104,9 +103,9 @@ void ModuleIO::output_single_R(std::ofstream& ofs, ifs_tem1.open(tem1.str().c_str(), std::ios::binary); ofs << ifs_tem1.rdbuf(); ifs_tem1.close(); - for (auto &i : indptr) + for (auto& i: indptr) { - ofs.write(reinterpret_cast(&i), sizeof(int)); + ofs.write(reinterpret_cast(&i), sizeof(int)); } } else @@ -117,7 +116,7 @@ void ModuleIO::output_single_R(std::ofstream& ofs, ifs_tem1.open(tem1.str().c_str()); ofs << ifs_tem1.rdbuf(); ifs_tem1.close(); - for (auto &i : indptr) + for (auto& i: indptr) { ofs << " " << i; } @@ -129,13 +128,14 @@ void ModuleIO::output_single_R(std::ofstream& ofs, } template void ModuleIO::output_single_R(std::ofstream& ofs, - const std::map>& XR, - const double& sparse_threshold, - const bool& binary, - const Parallel_Orbitals& pv, - const bool& reduce); - -template void ModuleIO::output_single_R>(std::ofstream& ofs, + const std::map>& XR, + const double& sparse_threshold, + const bool& binary, + const Parallel_Orbitals& pv, + const bool& reduce); + +template void ModuleIO::output_single_R>( + std::ofstream& ofs, const std::map>>& XR, const double& sparse_threshold, const bool& binary, diff --git a/source/module_io/sparse_matrix.cpp b/source/module_io/sparse_matrix.cpp index 54a564ef98..52d594a838 100644 --- a/source/module_io/sparse_matrix.cpp +++ b/source/module_io/sparse_matrix.cpp @@ -1,10 +1,10 @@ #include "sparse_matrix.h" +#include "source_base/tool_quit.h" + #include #include -#include "module_base/tool_quit.h" - namespace ModuleIO { @@ -35,13 +35,13 @@ void SparseMatrix::printToCSR(std::ostream& ofs, int precision) csr_row_ptr.assign(_rows + 1, 0); // print the CSR values - for (const auto &element : elements) + for (const auto& element: elements) { ofs << " " << std::fixed << std::scientific << std::setprecision(precision) << element.second; } ofs << std::endl; // print the CSR column indices - for (const auto &element : elements) + for (const auto& element: elements) { ofs << " " << element.first.second; int row = element.first.first; diff --git a/source/module_io/td_current_io.cpp b/source/module_io/td_current_io.cpp index f50cde9caf..7e49ef50fc 100644 --- a/source/module_io/td_current_io.cpp +++ b/source/module_io/td_current_io.cpp @@ -1,12 +1,5 @@ #include "td_current_io.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/libm/libm.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" -#include "module_base/tool_threading.h" -#include "module_base/vector3.h" #include "module_elecstate/module_dm/cal_dm_psi.h" #include "module_elecstate/module_pot/H_TDDFT_pw.h" #include "module_hamilt_lcao/hamilt_lcaodft/LCAO_domain.h" @@ -14,6 +7,13 @@ #include "module_hamilt_lcao/module_tddft/td_velocity.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/libm/libm.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/tool_threading.h" +#include "source_base/vector3.h" #ifdef __LCAO @@ -157,12 +157,12 @@ void ModuleIO::write_current(const UnitCell& ucell, } // construct a DensityMatrix object - // Since the function cal_dm_psi do not suport DMR in complex type, + // Since the function cal_dm_psi do not suport DMR in complex type, // I replace it with two DMR in double type. // Should be refactored in the future. const int nspin0 = PARAM.inp.nspin; - const int nspin_dm = std::map({ {1,1},{2,2},{4,1} })[nspin0]; + const int nspin_dm = std::map({{1, 1}, {2, 2}, {4, 1}})[nspin0]; elecstate::DensityMatrix, double> DM_real(pv, nspin_dm, kv.kvec_d, kv.get_nks() / nspin_dm); elecstate::DensityMatrix, double> DM_imag(pv, nspin_dm, kv.kvec_d, kv.get_nks() / nspin_dm); @@ -279,9 +279,9 @@ void ModuleIO::write_current(const UnitCell& ucell, ++local_total_irr; ++irr; } // end kk - } // end jj - } // end cb - } // end iat + } // end jj + } // end cb + } // end iat #ifdef _OPENMP #pragma omp critical(cal_current_k_reduce) { @@ -313,7 +313,7 @@ void ModuleIO::write_current(const UnitCell& ucell, } // write end } // end nks - } // end is + } // end is if (GlobalV::MY_RANK == 0) { std::string filename = PARAM.globalv.global_out_dir + "current_total.dat"; diff --git a/source/module_io/test/CMakeLists.txt b/source/module_io/test/CMakeLists.txt index 67032896b3..a5cb4a23f5 100644 --- a/source/module_io/test/CMakeLists.txt +++ b/source/module_io/test/CMakeLists.txt @@ -74,11 +74,11 @@ AddTest( TARGET MODULE_IO_single_R_test LIBS parameter ${math_libs} SOURCES single_R_io_test.cpp ../single_R_io.cpp - ../../module_base/global_variable.cpp - ../../module_base/parallel_reduce.cpp - ../../module_base/parallel_common.cpp - ../../module_base/parallel_global.cpp - ../../module_base/parallel_comm.cpp + ../../source_base/global_variable.cpp + ../../source_base/parallel_reduce.cpp + ../../source_base/parallel_common.cpp + ../../source_base/parallel_global.cpp + ../../source_base/parallel_comm.cpp ) AddTest( diff --git a/source/module_io/test/cal_dos_test.cpp b/source/module_io/test/cal_dos_test.cpp index 96173c9c25..6680960eef 100644 --- a/source/module_io/test/cal_dos_test.cpp +++ b/source/module_io/test/cal_dos_test.cpp @@ -1,7 +1,9 @@ -#include "gtest/gtest.h" -#include "gmock/gmock.h" #include "module_io/cal_dos.h" -#include "module_base/global_variable.h" + +#include "source_base/global_variable.h" + +#include "gmock/gmock.h" +#include "gtest/gtest.h" #include #ifdef __MPI #include "mpi.h" @@ -19,150 +21,148 @@ * - density of states */ - class DosTest : public ::testing::Test { -protected: - std::string output; + protected: + std::string output; }; -TEST_F(DosTest,Dos) +TEST_F(DosTest, Dos) { - //is,fa,de_ev,emax_ev,emin_ev,bcoeff,nks,nkstot,nbands - DosPrepare dosp = DosPrepare(0,"doss1_pw.txt",0.005,18,-6,0.07,36,36,8); - dosp.set_isk(); - dosp.read_wk(); - dosp.read_istate_info(); - EXPECT_EQ(dosp.is,0); - ModuleIO::cal_dos(dosp.is, - dosp.fa, - dosp.de_ev, - dosp.emax_ev, - dosp.emin_ev, - dosp.bcoeff, - dosp.nks, - dosp.nkstot, - dosp.wk, - dosp.isk, - dosp.nbands, - dosp.ekb, - dosp.wg); + // is,fa,de_ev,emax_ev,emin_ev,bcoeff,nks,nkstot,nbands + DosPrepare dosp = DosPrepare(0, "doss1_pw.txt", 0.005, 18, -6, 0.07, 36, 36, 8); + dosp.set_isk(); + dosp.read_wk(); + dosp.read_istate_info(); + EXPECT_EQ(dosp.is, 0); + ModuleIO::cal_dos(dosp.is, + dosp.fa, + dosp.de_ev, + dosp.emax_ev, + dosp.emin_ev, + dosp.bcoeff, + dosp.nks, + dosp.nkstot, + dosp.wk, + dosp.isk, + dosp.nbands, + dosp.ekb, + dosp.wg); #ifdef __MPI - if(GlobalV::MY_RANK==0) - { + if (GlobalV::MY_RANK == 0) + { #endif - std::ifstream ifs; - ifs.open(dosp.fa.c_str()); - std::string str((std::istreambuf_iterator(ifs)),std::istreambuf_iterator()); - EXPECT_THAT(str, testing::HasSubstr("4801 # number of points")); - EXPECT_THAT(str, testing::HasSubstr(" -5.39 0.03125 0.03125 0.178099 0.0160702")); - EXPECT_THAT(str, testing::HasSubstr(" 3.07 0.1875 5.46875 1.07003 5.37765")); - ifs.close(); - remove("doss1_pw.txt"); + std::ifstream ifs; + ifs.open(dosp.fa.c_str()); + std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); + EXPECT_THAT(str, testing::HasSubstr("4801 # number of points")); + EXPECT_THAT(str, + testing::HasSubstr(" -5.39 0.03125 0.03125 0.178099 0.0160702")); + EXPECT_THAT(str, + testing::HasSubstr(" 3.07 0.1875 5.46875 1.07003 5.37765")); + ifs.close(); + remove("doss1_pw.txt"); #ifdef __MPI - } + } #endif } - - -TEST_F(DosTest,DosW1) +TEST_F(DosTest, DosW1) { - //is,fa,de_ev,emax_ev,emin_ev,bcoeff,nks,nkstot,nbands - DosPrepare dosp = DosPrepare(0,"doss1_pw.txt",-0.005,18,-6,0.07,36,36,8); - dosp.set_isk(); - dosp.read_wk(); - dosp.read_istate_info(); - EXPECT_EQ(dosp.is,0); - EXPECT_LE(dosp.de_ev,0); - GlobalV::ofs_warning.open("warning1.log"); - EXPECT_NO_THROW(ModuleIO::cal_dos(dosp.is, - dosp.fa, - dosp.de_ev, - dosp.emax_ev, - dosp.emin_ev, - dosp.bcoeff, - dosp.nks, - dosp.nkstot, - dosp.wk, - dosp.isk, - dosp.nbands, - dosp.ekb, - dosp.wg)); - GlobalV::ofs_warning.close(); + // is,fa,de_ev,emax_ev,emin_ev,bcoeff,nks,nkstot,nbands + DosPrepare dosp = DosPrepare(0, "doss1_pw.txt", -0.005, 18, -6, 0.07, 36, 36, 8); + dosp.set_isk(); + dosp.read_wk(); + dosp.read_istate_info(); + EXPECT_EQ(dosp.is, 0); + EXPECT_LE(dosp.de_ev, 0); + GlobalV::ofs_warning.open("warning1.log"); + EXPECT_NO_THROW(ModuleIO::cal_dos(dosp.is, + dosp.fa, + dosp.de_ev, + dosp.emax_ev, + dosp.emin_ev, + dosp.bcoeff, + dosp.nks, + dosp.nkstot, + dosp.wk, + dosp.isk, + dosp.nbands, + dosp.ekb, + dosp.wg)); + GlobalV::ofs_warning.close(); #ifdef __MPI - if(GlobalV::MY_RANK==0) - { + if (GlobalV::MY_RANK == 0) + { #endif - std::ifstream ifs; - ifs.open("warning1.log"); - std::string str((std::istreambuf_iterator(ifs)),std::istreambuf_iterator()); - EXPECT_THAT(str, testing::HasSubstr("ModuleIO::cal_dos warning : de <= 0")); - ifs.close(); - remove("warning1.log"); - remove("doss1_pw.txt"); + std::ifstream ifs; + ifs.open("warning1.log"); + std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); + EXPECT_THAT(str, testing::HasSubstr("ModuleIO::cal_dos warning : de <= 0")); + ifs.close(); + remove("warning1.log"); + remove("doss1_pw.txt"); #ifdef __MPI - } + } #endif } - -TEST_F(DosTest,DosW2) +TEST_F(DosTest, DosW2) { - //is,fa,de_ev,emax_ev,emin_ev,bcoeff,nks,nkstot,nbands - DosPrepare dosp = DosPrepare(0,"doss1_pw.txt",0.005,-6,18,0.07,36,36,8); - dosp.set_isk(); - dosp.read_wk(); - dosp.read_istate_info(); - EXPECT_EQ(dosp.is,0); - GlobalV::ofs_warning.open("warning2.log"); - EXPECT_NO_THROW(ModuleIO::cal_dos(dosp.is, - dosp.fa, - dosp.de_ev, - dosp.emax_ev, - dosp.emin_ev, - dosp.bcoeff, - dosp.nks, - dosp.nkstot, - dosp.wk, - dosp.isk, - dosp.nbands, - dosp.ekb, - dosp.wg)); - GlobalV::ofs_warning.close(); + // is,fa,de_ev,emax_ev,emin_ev,bcoeff,nks,nkstot,nbands + DosPrepare dosp = DosPrepare(0, "doss1_pw.txt", 0.005, -6, 18, 0.07, 36, 36, 8); + dosp.set_isk(); + dosp.read_wk(); + dosp.read_istate_info(); + EXPECT_EQ(dosp.is, 0); + GlobalV::ofs_warning.open("warning2.log"); + EXPECT_NO_THROW(ModuleIO::cal_dos(dosp.is, + dosp.fa, + dosp.de_ev, + dosp.emax_ev, + dosp.emin_ev, + dosp.bcoeff, + dosp.nks, + dosp.nkstot, + dosp.wk, + dosp.isk, + dosp.nbands, + dosp.ekb, + dosp.wg)); + GlobalV::ofs_warning.close(); #ifdef __MPI - if(GlobalV::MY_RANK==0) - { + if (GlobalV::MY_RANK == 0) + { #endif - std::ifstream ifs; - ifs.open("warning2.log"); - std::string str((std::istreambuf_iterator(ifs)),std::istreambuf_iterator()); - EXPECT_THAT(str, testing::HasSubstr("ModuleIO::cal_dos warning : emax_ev < emin_ev")); - ifs.close(); - remove("warning2.log"); - remove("doss1_pw.txt"); + std::ifstream ifs; + ifs.open("warning2.log"); + std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); + EXPECT_THAT(str, testing::HasSubstr("ModuleIO::cal_dos warning : emax_ev < emin_ev")); + ifs.close(); + remove("warning2.log"); + remove("doss1_pw.txt"); #ifdef __MPI - } + } #endif } #ifdef __MPI -int main(int argc, char **argv) +int main(int argc, char** argv) { - MPI_Init(&argc,&argv); + MPI_Init(&argc, &argv); - testing::InitGoogleTest(&argc,argv); - MPI_Comm_size(MPI_COMM_WORLD,&GlobalV::NPROC); - MPI_Comm_rank(MPI_COMM_WORLD,&GlobalV::MY_RANK); + testing::InitGoogleTest(&argc, argv); + MPI_Comm_size(MPI_COMM_WORLD, &GlobalV::NPROC); + MPI_Comm_rank(MPI_COMM_WORLD, &GlobalV::MY_RANK); // only test a certain one //::testing::GTEST_FLAG(filter) = "DosTest.DosW1"; - int result = RUN_ALL_TESTS(); + int result = RUN_ALL_TESTS(); - MPI_Finalize(); + MPI_Finalize(); - return result; + return result; } #endif diff --git a/source/module_io/test/cal_pLpR_test.cpp b/source/module_io/test/cal_pLpR_test.cpp index d9f9b92085..85429af974 100644 --- a/source/module_io/test/cal_pLpR_test.cpp +++ b/source/module_io/test/cal_pLpR_test.cpp @@ -1,20 +1,21 @@ -#include +#include "module_io/cal_pLpR.h" + +#include "module_basis/module_nao/radial_collection.h" +#include "module_basis/module_nao/two_center_integrator.h" +#include "source_base/spherical_bessel_transformer.h" +#include "source_base/ylm.h" + +#include #include +#include #include #include -#include - -#include "module_io/cal_pLpR.h" -#include "module_basis/module_nao/two_center_integrator.h" -#include "module_basis/module_nao/radial_collection.h" -#include "module_base/spherical_bessel_transformer.h" -#include "module_base/ylm.h" #define DOUBLETHRESHOLD 1e-12 class CalpLpRTest : public ::testing::Test { -protected: + protected: void SetUp() override { ModuleBase::SphericalBesselTransformer sbt(true); @@ -53,7 +54,7 @@ TEST_F(CalpLpRTest, CalLzijRTest) ModuleBase::Vector3 vR(0., 0., 0.); // home-cell int it = 0, ia = 0, il = 0, iz = 0, mi = 0; int jt = 0, ja = 0, jl = 0, jz = 0, mj = 0; // self, the first s - + // = 0: no magnetic moment out = ModuleIO::cal_LzijR(calculator_, it, ia, il, iz, mi, jt, ja, jl, jz, mj, vR); EXPECT_NEAR(out.real(), 0.0, DOUBLETHRESHOLD); @@ -64,22 +65,34 @@ TEST_F(CalpLpRTest, CalLzijRTest) EXPECT_NEAR(out.real(), 0.0, DOUBLETHRESHOLD); EXPECT_NEAR(out.imag(), 0.0, DOUBLETHRESHOLD); // = 0: orthogonal - il = 1; mi = -1; jl = 1; mj = 0; + il = 1; + mi = -1; + jl = 1; + mj = 0; out = ModuleIO::cal_LzijR(calculator_, it, ia, il, iz, mi, jt, ja, jl, jz, mj, vR); EXPECT_NEAR(out.real(), 0.0, DOUBLETHRESHOLD); EXPECT_NEAR(out.imag(), 0.0, DOUBLETHRESHOLD); // = 1: same - il = 1; mi = 1; jl = 1; mj = 1; + il = 1; + mi = 1; + jl = 1; + mj = 1; out = ModuleIO::cal_LzijR(calculator_, it, ia, il, iz, mi, jt, ja, jl, jz, mj, vR); EXPECT_NEAR(out.real(), 1.0, DOUBLETHRESHOLD); EXPECT_NEAR(out.imag(), 0.0, DOUBLETHRESHOLD); // = 0: orthogonal - il = 2; mi = -1; jl = 2; mj = 0; + il = 2; + mi = -1; + jl = 2; + mj = 0; out = ModuleIO::cal_LzijR(calculator_, it, ia, il, iz, mi, jt, ja, jl, jz, mj, vR); EXPECT_NEAR(out.real(), 0.0, DOUBLETHRESHOLD); EXPECT_NEAR(out.imag(), 0.0, DOUBLETHRESHOLD); // = 1: same - il = 2; mi = 1; jl = 2; mj = 1; + il = 2; + mi = 1; + jl = 2; + mj = 1; out = ModuleIO::cal_LzijR(calculator_, it, ia, il, iz, mi, jt, ja, jl, jz, mj, vR); EXPECT_NEAR(out.real(), 1.0, DOUBLETHRESHOLD); EXPECT_NEAR(out.imag(), 0.0, DOUBLETHRESHOLD); @@ -103,19 +116,28 @@ TEST_F(CalpLpRTest, CalLxijRTest) EXPECT_NEAR(out.real(), 0.0, DOUBLETHRESHOLD); EXPECT_NEAR(out.imag(), 0.0, DOUBLETHRESHOLD); // = 0.5: Lx|p(m=0)> = 1/2 (|p(m=-1)> + |p(m=1)>) - il = 1; im = -1; jl = 1; jm = 0; + il = 1; + im = -1; + jl = 1; + jm = 0; out = ModuleIO::cal_LxijR(calculator_, it, ia, il, iz, im, jt, ja, jl, jz, jm, vR); - EXPECT_NEAR(out.real(), 0.5*sqrt(2.0), DOUBLETHRESHOLD); + EXPECT_NEAR(out.real(), 0.5 * sqrt(2.0), DOUBLETHRESHOLD); EXPECT_NEAR(out.imag(), 0.0, DOUBLETHRESHOLD); // = 0: expectation value is 0 - il = 1; im = 1; jl = 1; jm = 1; + il = 1; + im = 1; + jl = 1; + jm = 1; out = ModuleIO::cal_LxijR(calculator_, it, ia, il, iz, im, jt, ja, jl, jz, jm, vR); EXPECT_NEAR(out.real(), 0.0, DOUBLETHRESHOLD); EXPECT_NEAR(out.imag(), 0.0, DOUBLETHRESHOLD); // = 0.5: Lx|d(m=0)> = 1/2 (|d(m=-1)> + |d(m=1)>) - il = 2; im = -1; jl = 2; jm = 0; + il = 2; + im = -1; + jl = 2; + jm = 0; out = ModuleIO::cal_LxijR(calculator_, it, ia, il, iz, im, jt, ja, jl, jz, jm, vR); - EXPECT_NEAR(out.real(), 0.5*sqrt(6.0), DOUBLETHRESHOLD); + EXPECT_NEAR(out.real(), 0.5 * sqrt(6.0), DOUBLETHRESHOLD); EXPECT_NEAR(out.imag(), 0.0, DOUBLETHRESHOLD); } @@ -137,23 +159,32 @@ TEST_F(CalpLpRTest, CalLyijRTest) EXPECT_NEAR(out.real(), 0.0, DOUBLETHRESHOLD); EXPECT_NEAR(out.imag(), 0.0, DOUBLETHRESHOLD); // = -i/2: Ly|p(m=0)> = -i/2 (|p(m=1)> - |p(m=-1)>) - il = 1; im = -1; jl = 1; jm = 0; + il = 1; + im = -1; + jl = 1; + jm = 0; out = ModuleIO::cal_LyijR(calculator_, it, ia, il, iz, im, jt, ja, jl, jz, jm, vR); EXPECT_NEAR(out.real(), 0.0, DOUBLETHRESHOLD); - EXPECT_NEAR(out.imag(), 0.5*sqrt(2.0), DOUBLETHRESHOLD); + EXPECT_NEAR(out.imag(), 0.5 * sqrt(2.0), DOUBLETHRESHOLD); // = 0: expectation value is 0 - il = 1; im = 1; jl = 1; jm = 1; + il = 1; + im = 1; + jl = 1; + jm = 1; out = ModuleIO::cal_LyijR(calculator_, it, ia, il, iz, im, jt, ja, jl, jz, jm, vR); EXPECT_NEAR(out.real(), 0.0, DOUBLETHRESHOLD); EXPECT_NEAR(out.imag(), 0.0, DOUBLETHRESHOLD); // = -i/2: Ly|d(m=0)> = -i/2 (|d(m=1)> - |d(m=-1)>) - il = 2; im = -1; jl = 2; jm = 0; + il = 2; + im = -1; + jl = 2; + jm = 0; out = ModuleIO::cal_LyijR(calculator_, it, ia, il, iz, im, jt, ja, jl, jz, jm, vR); EXPECT_NEAR(out.real(), 0.0, DOUBLETHRESHOLD); - EXPECT_NEAR(out.imag(), 0.5*sqrt(6.0), DOUBLETHRESHOLD); + EXPECT_NEAR(out.imag(), 0.5 * sqrt(6.0), DOUBLETHRESHOLD); } -int main(int argc, char **argv) +int main(int argc, char** argv) { #ifdef __MPI MPI_Init(&argc, &argv); diff --git a/source/module_io/test/cif_io_test.cpp b/source/module_io/test/cif_io_test.cpp index b8f3ae4b74..3b2989431b 100644 --- a/source/module_io/test/cif_io_test.cpp +++ b/source/module_io/test/cif_io_test.cpp @@ -1,9 +1,11 @@ -#include #include "module_io/cif_io.h" + +#include "source_base/formatter.h" + #include -#include -#include "module_base/formatter.h" #include +#include +#include #ifdef __MPI #include @@ -11,149 +13,149 @@ /** * this is the unittest for ABACUS i/o interface with Crystal Information File (CIF) format. - * + * * Intergrately, there are two examples, one easier, one more complicated. */ const std::string mp2516584 = "" -"# generated using pymatgen\n" -"data_C\n" -"_symmetry_space_group_name_H-M 'P 1'\n" -"_cell_length_a 2.46772428\n" -"_cell_length_b 2.46772428\n" -"_cell_length_c 8.68503800\n" -"_cell_angle_alpha 90.00000000\n" -"_cell_angle_beta 90.00000000\n" -"_cell_angle_gamma 120.00000758\n" -"_symmetry_Int_Tables_number 1\n" -"_chemical_formula_structural C\n" -"_chemical_formula_sum C4\n" -"_cell_volume 45.80317575\n" -"_cell_formula_units_Z 4\n" -"loop_\n" -" _symmetry_equiv_pos_site_id\n" -" _symmetry_equiv_pos_as_xyz\n" -" 1 'x, y, z'\n" -"loop_\n" -" _atom_site_type_symbol\n" -" _atom_site_label\n" -" _atom_site_symmetry_multiplicity\n" -" _atom_site_fract_x\n" -" _atom_site_fract_y\n" -" _atom_site_fract_z\n" -" _atom_site_occupancy\n" -" C C0 1 0.00000000 0.00000000 0.75000000 1\n" -" C C1 1 0.00000000 0.00000000 0.25000000 1\n" -" C C2 1 0.33333300 0.66666700 0.75000000 1\n" -" C C3 1 0.66666700 0.33333300 0.25000000 1\n"; + "# generated using pymatgen\n" + "data_C\n" + "_symmetry_space_group_name_H-M 'P 1'\n" + "_cell_length_a 2.46772428\n" + "_cell_length_b 2.46772428\n" + "_cell_length_c 8.68503800\n" + "_cell_angle_alpha 90.00000000\n" + "_cell_angle_beta 90.00000000\n" + "_cell_angle_gamma 120.00000758\n" + "_symmetry_Int_Tables_number 1\n" + "_chemical_formula_structural C\n" + "_chemical_formula_sum C4\n" + "_cell_volume 45.80317575\n" + "_cell_formula_units_Z 4\n" + "loop_\n" + " _symmetry_equiv_pos_site_id\n" + " _symmetry_equiv_pos_as_xyz\n" + " 1 'x, y, z'\n" + "loop_\n" + " _atom_site_type_symbol\n" + " _atom_site_label\n" + " _atom_site_symmetry_multiplicity\n" + " _atom_site_fract_x\n" + " _atom_site_fract_y\n" + " _atom_site_fract_z\n" + " _atom_site_occupancy\n" + " C C0 1 0.00000000 0.00000000 0.75000000 1\n" + " C C1 1 0.00000000 0.00000000 0.25000000 1\n" + " C C2 1 0.33333300 0.66666700 0.75000000 1\n" + " C C3 1 0.66666700 0.33333300 0.25000000 1\n"; const std::string cod1000065 = "" -"#------------------------------------------------------------------------------\n" -"#$Date: 2016-02-18 17:37:37 +0200 (Thu, 18 Feb 2016) $\n" -"#$Revision: 176729 $\n" -"#$URL: svn://www.crystallography.net/cod/cif/1/00/00/1000065.cif $\n" -"#------------------------------------------------------------------------------\n" -"#\n" -"# This file is available in the Crystallography Open Database (COD),\n" -"# http://www.crystallography.net/\n" -"#\n" -"# All data on this site have been placed in the public domain by the\n" -"# contributors.\n" -"#\n" -"data_1000065\n" -"loop_\n" -"_publ_author_name\n" -"'Nixon, D E'\n" -"'Parry, G S'\n" -"'Ubbelohde, A R'\n" -"_publ_section_title\n" -";\n" -"Order-disorder transformations in graphite nitrates\n" -";\n" -"_journal_coden_ASTM PRLAAZ\n" -"_journal_name_full\n" -";\n" -"Proceedings of the Royal Society of London, Series A: Mathematical and\n" -"Physical Sciences (76,1906-)\n" -";\n" -"_journal_page_first 324\n" -"_journal_page_last 339\n" -"_journal_paper_doi 10.1098/rspa.1966.0098\n" -"_journal_volume 291\n" -"_journal_year 1966\n" -"_chemical_formula_analytical 'C (H N O3)'\n" -"_chemical_formula_structural C\n" -"_chemical_formula_sum C\n" -"_chemical_name_common 'Graphite nitrate'\n" -"_chemical_name_systematic Carbon\n" -"_space_group_IT_number 166\n" -"_symmetry_cell_setting trigonal\n" -"_symmetry_space_group_name_Hall '-R 3 2\"'\n" -"_symmetry_space_group_name_H-M 'R -3 m :H'\n" -"_cell_angle_alpha 90\n" -"_cell_angle_beta 90\n" -"_cell_angle_gamma 120\n" -"_cell_formula_units_Z 12\n" -"_cell_length_a 2.46\n" -"_cell_length_b 2.46\n" -"_cell_length_c 33.45\n" -"_cell_volume 175.3\n" -"_cod_original_sg_symbol_H-M 'R -3 m H'\n" -"_cod_database_code 1000065\n" -"loop_\n" -"_symmetry_equiv_pos_as_xyz\n" -"x,y,z\n" -"-y,x-y,z\n" -"y-x,-x,z\n" -"-y,-x,z\n" -"x,x-y,z\n" -"y-x,y,z\n" -"-x,-y,-z\n" -"y,y-x,-z\n" -"x-y,x,-z\n" -"y,x,-z\n" -"-x,y-x,-z\n" -"x-y,-y,-z\n" -"1/3+x,2/3+y,2/3+z\n" -"2/3+x,1/3+y,1/3+z\n" -"1/3-y,2/3+x-y,2/3+z\n" -"2/3-y,1/3+x-y,1/3+z\n" -"1/3-x+y,2/3-x,2/3+z\n" -"2/3-x+y,1/3-x,1/3+z\n" -"1/3-y,2/3-x,2/3+z\n" -"2/3-y,1/3-x,1/3+z\n" -"1/3+x,2/3+x-y,2/3+z\n" -"2/3+x,1/3+x-y,1/3+z\n" -"1/3-x+y,2/3+y,2/3+z\n" -"2/3-x+y,1/3+y,1/3+z\n" -"1/3-x,2/3-y,2/3-z\n" -"2/3-x,1/3-y,1/3-z\n" -"1/3+y,2/3-x+y,2/3-z\n" -"2/3+y,1/3-x+y,1/3-z\n" -"1/3+x-y,2/3+x,2/3-z\n" -"2/3+x-y,1/3+x,1/3-z\n" -"1/3+y,2/3+x,2/3-z\n" -"2/3+y,1/3+x,1/3-z\n" -"1/3-x,2/3-x+y,2/3-z\n" -"2/3-x,1/3-x+y,1/3-z\n" -"1/3+x-y,2/3-y,2/3-z\n" -"2/3+x-y,1/3-y,1/3-z\n" -"loop_\n" -"_atom_site_label\n" -"_atom_site_type_symbol\n" -"_atom_site_symmetry_multiplicity\n" -"_atom_site_Wyckoff_symbol\n" -"_atom_site_fract_x\n" -"_atom_site_fract_y\n" -"_atom_site_fract_z\n" -"_atom_site_occupancy\n" -"_atom_site_attached_hydrogens\n" -"_atom_site_calc_flag\n" -"C1 C0 6 c 0. 0. 0.05 1. 0 d\n" -"C2 C0 6 c 0. 0. 0.283 1. 0 d\n" -"loop_\n" -"_atom_type_symbol\n" -"_atom_type_oxidation_number\n" -"C0 0.000\n"; + "#------------------------------------------------------------------------------\n" + "#$Date: 2016-02-18 17:37:37 +0200 (Thu, 18 Feb 2016) $\n" + "#$Revision: 176729 $\n" + "#$URL: svn://www.crystallography.net/cod/cif/1/00/00/1000065.cif $\n" + "#------------------------------------------------------------------------------\n" + "#\n" + "# This file is available in the Crystallography Open Database (COD),\n" + "# http://www.crystallography.net/\n" + "#\n" + "# All data on this site have been placed in the public domain by the\n" + "# contributors.\n" + "#\n" + "data_1000065\n" + "loop_\n" + "_publ_author_name\n" + "'Nixon, D E'\n" + "'Parry, G S'\n" + "'Ubbelohde, A R'\n" + "_publ_section_title\n" + ";\n" + "Order-disorder transformations in graphite nitrates\n" + ";\n" + "_journal_coden_ASTM PRLAAZ\n" + "_journal_name_full\n" + ";\n" + "Proceedings of the Royal Society of London, Series A: Mathematical and\n" + "Physical Sciences (76,1906-)\n" + ";\n" + "_journal_page_first 324\n" + "_journal_page_last 339\n" + "_journal_paper_doi 10.1098/rspa.1966.0098\n" + "_journal_volume 291\n" + "_journal_year 1966\n" + "_chemical_formula_analytical 'C (H N O3)'\n" + "_chemical_formula_structural C\n" + "_chemical_formula_sum C\n" + "_chemical_name_common 'Graphite nitrate'\n" + "_chemical_name_systematic Carbon\n" + "_space_group_IT_number 166\n" + "_symmetry_cell_setting trigonal\n" + "_symmetry_space_group_name_Hall '-R 3 2\"'\n" + "_symmetry_space_group_name_H-M 'R -3 m :H'\n" + "_cell_angle_alpha 90\n" + "_cell_angle_beta 90\n" + "_cell_angle_gamma 120\n" + "_cell_formula_units_Z 12\n" + "_cell_length_a 2.46\n" + "_cell_length_b 2.46\n" + "_cell_length_c 33.45\n" + "_cell_volume 175.3\n" + "_cod_original_sg_symbol_H-M 'R -3 m H'\n" + "_cod_database_code 1000065\n" + "loop_\n" + "_symmetry_equiv_pos_as_xyz\n" + "x,y,z\n" + "-y,x-y,z\n" + "y-x,-x,z\n" + "-y,-x,z\n" + "x,x-y,z\n" + "y-x,y,z\n" + "-x,-y,-z\n" + "y,y-x,-z\n" + "x-y,x,-z\n" + "y,x,-z\n" + "-x,y-x,-z\n" + "x-y,-y,-z\n" + "1/3+x,2/3+y,2/3+z\n" + "2/3+x,1/3+y,1/3+z\n" + "1/3-y,2/3+x-y,2/3+z\n" + "2/3-y,1/3+x-y,1/3+z\n" + "1/3-x+y,2/3-x,2/3+z\n" + "2/3-x+y,1/3-x,1/3+z\n" + "1/3-y,2/3-x,2/3+z\n" + "2/3-y,1/3-x,1/3+z\n" + "1/3+x,2/3+x-y,2/3+z\n" + "2/3+x,1/3+x-y,1/3+z\n" + "1/3-x+y,2/3+y,2/3+z\n" + "2/3-x+y,1/3+y,1/3+z\n" + "1/3-x,2/3-y,2/3-z\n" + "2/3-x,1/3-y,1/3-z\n" + "1/3+y,2/3-x+y,2/3-z\n" + "2/3+y,1/3-x+y,1/3-z\n" + "1/3+x-y,2/3+x,2/3-z\n" + "2/3+x-y,1/3+x,1/3-z\n" + "1/3+y,2/3+x,2/3-z\n" + "2/3+y,1/3+x,1/3-z\n" + "1/3-x,2/3-x+y,2/3-z\n" + "2/3-x,1/3-x+y,1/3-z\n" + "1/3+x-y,2/3-y,2/3-z\n" + "2/3+x-y,1/3-y,1/3-z\n" + "loop_\n" + "_atom_site_label\n" + "_atom_site_type_symbol\n" + "_atom_site_symmetry_multiplicity\n" + "_atom_site_Wyckoff_symbol\n" + "_atom_site_fract_x\n" + "_atom_site_fract_y\n" + "_atom_site_fract_z\n" + "_atom_site_occupancy\n" + "_atom_site_attached_hydrogens\n" + "_atom_site_calc_flag\n" + "C1 C0 6 c 0. 0. 0.05 1. 0 d\n" + "C2 C0 6 c 0. 0. 0.283 1. 0 d\n" + "loop_\n" + "_atom_type_symbol\n" + "_atom_type_oxidation_number\n" + "C0 0.000\n"; TEST(CifParserTest, ReadSimpleTest) { @@ -166,9 +168,9 @@ TEST(CifParserTest, ReadSimpleTest) if (rank == 0) { #endif - std::ofstream ofs("mp-2516584.cif"); - ofs << mp2516584; - ofs.close(); + std::ofstream ofs("mp-2516584.cif"); + ofs << mp2516584; + ofs.close(); #ifdef __MPI } MPI_Barrier(MPI_COMM_WORLD); // make sure the file is written @@ -181,7 +183,7 @@ TEST(CifParserTest, ReadSimpleTest) if (rank == 0) { #endif - std::remove("mp-2516584.cif"); + std::remove("mp-2516584.cif"); #ifdef __MPI } #endif @@ -242,9 +244,9 @@ TEST(CifParserTest, ReadMediumTest) if (rank == 0) { #endif - std::ofstream ofs("cod-1000065.cif"); - ofs << cod1000065; - ofs.close(); + std::ofstream ofs("cod-1000065.cif"); + ofs << cod1000065; + ofs.close(); #ifdef __MPI } MPI_Barrier(MPI_COMM_WORLD); // make sure the file is written @@ -257,7 +259,7 @@ TEST(CifParserTest, ReadMediumTest) if (rank == 0) { #endif - std::remove("cod-1000065.cif"); + std::remove("cod-1000065.cif"); #ifdef __MPI } #endif @@ -266,7 +268,9 @@ TEST(CifParserTest, ReadMediumTest) EXPECT_EQ(data["_publ_author_name"][0], "'Nixon, D E' 'Parry, G S' 'Ubbelohde, A R'"); EXPECT_EQ(data["_publ_section_title"][0], "; Order-disorder transformations in graphite nitrates ;"); EXPECT_EQ(data["_journal_coden_ASTM"][0], "PRLAAZ"); - EXPECT_EQ(data["_journal_name_full"][0], "; Proceedings of the Royal Society of London, Series A: Mathematical and Physical Sciences (76,1906-) ;"); + EXPECT_EQ( + data["_journal_name_full"][0], + "; Proceedings of the Royal Society of London, Series A: Mathematical and Physical Sciences (76,1906-) ;"); EXPECT_EQ(data["_journal_page_first"][0], "324"); EXPECT_EQ(data["_journal_page_last"][0], "339"); EXPECT_EQ(data["_journal_paper_doi"][0], "10.1098/rspa.1966.0098"); @@ -291,7 +295,13 @@ TEST(CifParserTest, ReadMediumTest) EXPECT_EQ(data["_cell_volume"][0], "175.3"); EXPECT_EQ(data["_cod_original_sg_symbol_H-M"][0], "'R -3 m H'"); EXPECT_EQ(data["_cod_database_code"][0], "1000065"); - EXPECT_EQ(data["_symmetry_equiv_pos_as_xyz"][0], "x,y,z -y,x-y,z y-x,-x,z -y,-x,z x,x-y,z y-x,y,z -x,-y,-z y,y-x,-z x-y,x,-z y,x,-z -x,y-x,-z x-y,-y,-z 1/3+x,2/3+y,2/3+z 2/3+x,1/3+y,1/3+z 1/3-y,2/3+x-y,2/3+z 2/3-y,1/3+x-y,1/3+z 1/3-x+y,2/3-x,2/3+z 2/3-x+y,1/3-x,1/3+z 1/3-y,2/3-x,2/3+z 2/3-y,1/3-x,1/3+z 1/3+x,2/3+x-y,2/3+z 2/3+x,1/3+x-y,1/3+z 1/3-x+y,2/3+y,2/3+z 2/3-x+y,1/3+y,1/3+z 1/3-x,2/3-y,2/3-z 2/3-x,1/3-y,1/3-z 1/3+y,2/3-x+y,2/3-z 2/3+y,1/3-x+y,1/3-z 1/3+x-y,2/3+x,2/3-z 2/3+x-y,1/3+x,1/3-z 1/3+y,2/3+x,2/3-z 2/3+y,1/3+x,1/3-z 1/3-x,2/3-x+y,2/3-z 2/3-x,1/3-x+y,1/3-z 1/3+x-y,2/3-y,2/3-z 2/3+x-y,1/3-y,1/3-z"); + EXPECT_EQ(data["_symmetry_equiv_pos_as_xyz"][0], + "x,y,z -y,x-y,z y-x,-x,z -y,-x,z x,x-y,z y-x,y,z -x,-y,-z y,y-x,-z x-y,x,-z y,x,-z -x,y-x,-z x-y,-y,-z " + "1/3+x,2/3+y,2/3+z 2/3+x,1/3+y,1/3+z 1/3-y,2/3+x-y,2/3+z 2/3-y,1/3+x-y,1/3+z 1/3-x+y,2/3-x,2/3+z " + "2/3-x+y,1/3-x,1/3+z 1/3-y,2/3-x,2/3+z 2/3-y,1/3-x,1/3+z 1/3+x,2/3+x-y,2/3+z 2/3+x,1/3+x-y,1/3+z " + "1/3-x+y,2/3+y,2/3+z 2/3-x+y,1/3+y,1/3+z 1/3-x,2/3-y,2/3-z 2/3-x,1/3-y,1/3-z 1/3+y,2/3-x+y,2/3-z " + "2/3+y,1/3-x+y,1/3-z 1/3+x-y,2/3+x,2/3-z 2/3+x-y,1/3+x,1/3-z 1/3+y,2/3+x,2/3-z 2/3+y,1/3+x,1/3-z " + "1/3-x,2/3-x+y,2/3-z 2/3-x,1/3-x+y,1/3-z 1/3+x-y,2/3-y,2/3-z 2/3+x-y,1/3-y,1/3-z"); EXPECT_EQ(data["_atom_site_label"][0], "C1"); EXPECT_EQ(data["_atom_site_type_symbol"][0], "C0"); EXPECT_EQ(data["_atom_site_symmetry_multiplicity"][0], "6"); @@ -327,14 +337,12 @@ TEST(CifParserTest, WriteTest) const std::vector abc_angles = {2.46637620, 2.46637620, 24.84784531, 90.0, 90.0, 120.0}; const int natom = 4; const std::vector atom_site_labels = {"C", "C", "C", "C"}; - const std::vector atom_site_fract = {0.0, 0.0, 0.75, - 0.0, 0.0, 0.25, - 0.333333, 0.666667, 0.75, - 0.666667, 0.333333, 0.25}; - ModuleIO::CifParser::write(fcif, - abc_angles.data(), - natom, - atom_site_labels.data(), + const std::vector atom_site_fract + = {0.0, 0.0, 0.75, 0.0, 0.0, 0.25, 0.333333, 0.666667, 0.75, 0.666667, 0.333333, 0.25}; + ModuleIO::CifParser::write(fcif, + abc_angles.data(), + natom, + atom_site_labels.data(), atom_site_fract.data(), "# Generated during unittest of function ModuleIO::CifParser::write", "data_test", @@ -350,7 +358,7 @@ TEST(CifParserTest, WriteTest) if (rank == 0) { #endif - std::remove(fcif.c_str()); + std::remove(fcif.c_str()); #ifdef __MPI } #endif @@ -400,7 +408,6 @@ TEST(CifParserTest, WriteTest) EXPECT_EQ(data["_atom_site_occupancy"][3], "1.0"); } - int main(int argc, char** argv) { #ifdef __MPI diff --git a/source/module_io/test/dos_test.h b/source/module_io/test/dos_test.h index f814c7d7ce..b363c81903 100644 --- a/source/module_io/test/dos_test.h +++ b/source/module_io/test/dos_test.h @@ -1,109 +1,110 @@ #ifndef DOS_TEST_H #define DOS_TEST_H -#include -#include -#include"module_base/constants.h" +#include "source_base/constants.h" + +#include +#include class DosPrepare { -public: - DosPrepare(int is_in, - std::string fa_in, - double de_ev_in, - double emax_ev_in, - double emin_ev_in, - double bcoeff_in, - int nks_in, - int nkstot_in, - int nbands_in): - is(is_in),fa(fa_in), - de_ev(de_ev_in),emax_ev(emax_ev_in), - emin_ev(emin_ev_in),bcoeff(bcoeff_in), - nks(nks_in),nkstot(nkstot_in),nbands(nbands_in){} + public: + DosPrepare(int is_in, + std::string fa_in, + double de_ev_in, + double emax_ev_in, + double emin_ev_in, + double bcoeff_in, + int nks_in, + int nkstot_in, + int nbands_in) + : is(is_in), fa(fa_in), de_ev(de_ev_in), emax_ev(emax_ev_in), emin_ev(emin_ev_in), bcoeff(bcoeff_in), + nks(nks_in), nkstot(nkstot_in), nbands(nbands_in) + { + } - int is; - std::string fa; - double de_ev; - double emax_ev; - double emin_ev; - double bcoeff; - int nks; - int nkstot; - int nbands; - std::vector isk; - std::vector wk; - ModuleBase::matrix ekb; - ModuleBase::matrix wg; + int is; + std::string fa; + double de_ev; + double emax_ev; + double emin_ev; + double bcoeff; + int nks; + int nkstot; + int nbands; + std::vector isk; + std::vector wk; + ModuleBase::matrix ekb; + ModuleBase::matrix wg; - void set_isk() - { - this->isk.reserve(nks); - for(int i=0;iisk.reserve(nks); + for (int i = 0; i < nks; i++) + { + isk[i] = 0; // spin-unpolarized case, only 1 spin + } + } - void read_wk() - { - this->wk.reserve(nks); - std::ifstream ifs; - std::string tmpstring; - int dummy; - double kx,ky,kz; - ifs.open("./support/kpoints"); - while(ifs.good()) - { - getline(ifs,tmpstring); - getline(ifs,tmpstring); - for(int ik=0; ik>dummy >>kx >>ky >>kz >>this->wk[ik]; - ifs.ignore(150,'\n'); - ifs.rdstate(); - } - } - ifs.close(); - for(int ik=0; ikwk.reserve(nks); + std::ifstream ifs; + std::string tmpstring; + int dummy; + double kx, ky, kz; + ifs.open("./support/kpoints"); + while (ifs.good()) + { + getline(ifs, tmpstring); + getline(ifs, tmpstring); + for (int ik = 0; ik < nks; ++ik) + { + ifs >> dummy >> kx >> ky >> kz >> this->wk[ik]; + ifs.ignore(150, '\n'); + ifs.rdstate(); + } + } + ifs.close(); + for (int ik = 0; ik < nks; ++ik) + { + wk[ik] *= 2.0; + } + } - void read_istate_info() - { - this->ekb.create(nks,nbands); - this->wg.create(nks,nbands); - std::ifstream ifs; - std::string tmpstring; - ifs.open("./support/istate.info"); - int dummy; - while(ifs.good()) - { - for(int ik=0; ik> dummy >> this->ekb(ik,ib) >> this->wg(ik,ib); - ifs.ignore(150,'\n'); - } - ifs.rdstate(); - } - } - ifs.close(); - this->ekb *= 1.0/ModuleBase::Ry_to_eV; - } + void read_istate_info() + { + this->ekb.create(nks, nbands); + this->wg.create(nks, nbands); + std::ifstream ifs; + std::string tmpstring; + ifs.open("./support/istate.info"); + int dummy; + while (ifs.good()) + { + for (int ik = 0; ik < nks; ++ik) + { + if (ik == 0) + { + getline(ifs, tmpstring); + } + else + { + getline(ifs, tmpstring); + getline(ifs, tmpstring); + getline(ifs, tmpstring); + } + for (int ib = 0; ib < nbands; ++ib) + { + ifs >> dummy >> this->ekb(ik, ib) >> this->wg(ik, ib); + ifs.ignore(150, '\n'); + } + ifs.rdstate(); + } + } + ifs.close(); + this->ekb *= 1.0 / ModuleBase::Ry_to_eV; + } }; #endif diff --git a/source/module_io/test/for_testing_klist.h b/source/module_io/test/for_testing_klist.h index 779bcb932b..f6f9c3dfd5 100644 --- a/source/module_io/test/for_testing_klist.h +++ b/source/module_io/test/for_testing_klist.h @@ -1,7 +1,6 @@ #ifndef FOR_TESTING_KLIST_H #define FOR_TESTING_KLIST_H -#include "module_base/parallel_global.h" #include "module_basis/module_ao/ORB_gaunt_table.h" #include "module_cell/atom_pseudo.h" #include "module_cell/atom_spec.h" @@ -15,27 +14,64 @@ #include "module_hamilt_pw/hamilt_pwdft/VNL_in_pw.h" #include "module_hamilt_pw/hamilt_pwdft/parallel_grid.h" #include "module_io/berryphase.h" +#include "source_base/parallel_global.h" -bool berryphase::berry_phase_flag=0; +bool berryphase::berry_phase_flag = 0; -pseudo::pseudo(){} -pseudo::~pseudo(){} -Atom::Atom(){} -Atom::~Atom(){} -Atom_pseudo::Atom_pseudo(){} -Atom_pseudo::~Atom_pseudo(){} -InfoNonlocal::InfoNonlocal(){} -InfoNonlocal::~InfoNonlocal(){} -UnitCell::UnitCell(){} -UnitCell::~UnitCell(){} -Magnetism::Magnetism(){} -Magnetism::~Magnetism(){} -ORB_gaunt_table::ORB_gaunt_table(){} -ORB_gaunt_table::~ORB_gaunt_table(){} -pseudopot_cell_vl::pseudopot_cell_vl(){} -pseudopot_cell_vl::~pseudopot_cell_vl(){} -pseudopot_cell_vnl::pseudopot_cell_vnl(){} -pseudopot_cell_vnl::~pseudopot_cell_vnl(){} +pseudo::pseudo() +{ +} +pseudo::~pseudo() +{ +} +Atom::Atom() +{ +} +Atom::~Atom() +{ +} +Atom_pseudo::Atom_pseudo() +{ +} +Atom_pseudo::~Atom_pseudo() +{ +} +InfoNonlocal::InfoNonlocal() +{ +} +InfoNonlocal::~InfoNonlocal() +{ +} +UnitCell::UnitCell() +{ +} +UnitCell::~UnitCell() +{ +} +Magnetism::Magnetism() +{ +} +Magnetism::~Magnetism() +{ +} +ORB_gaunt_table::ORB_gaunt_table() +{ +} +ORB_gaunt_table::~ORB_gaunt_table() +{ +} +pseudopot_cell_vl::pseudopot_cell_vl() +{ +} +pseudopot_cell_vl::~pseudopot_cell_vl() +{ +} +pseudopot_cell_vnl::pseudopot_cell_vnl() +{ +} +pseudopot_cell_vnl::~pseudopot_cell_vnl() +{ +} Soc::~Soc() { } @@ -43,6 +79,4 @@ Fcoef::~Fcoef() { } - - #endif diff --git a/source/module_io/test/io_dmk_test.cpp b/source/module_io/test/io_dmk_test.cpp index f7a4391b27..6e3f6fad73 100644 --- a/source/module_io/test/io_dmk_test.cpp +++ b/source/module_io/test/io_dmk_test.cpp @@ -3,29 +3,41 @@ #define private public #include "module_parameter/parameter.h" #undef private -#include "module_base/global_variable.h" #include "prepare_unitcell.h" +#include "source_base/global_variable.h" +#include "source_base/scalapack_connector.h" #include "gmock/gmock.h" #include "gtest/gtest.h" -#include "module_base/scalapack_connector.h" #ifdef __MPI #include "mpi.h" #endif #ifdef __LCAO -InfoNonlocal::InfoNonlocal() {} -InfoNonlocal::~InfoNonlocal() {} -LCAO_Orbitals::LCAO_Orbitals() {} -LCAO_Orbitals::~LCAO_Orbitals() {} +InfoNonlocal::InfoNonlocal() +{ +} +InfoNonlocal::~InfoNonlocal() +{ +} +LCAO_Orbitals::LCAO_Orbitals() +{ +} +LCAO_Orbitals::~LCAO_Orbitals() +{ +} #endif -Magnetism::Magnetism() { +Magnetism::Magnetism() +{ this->tot_mag = 0.0; this->abs_mag = 0.0; this->start_mag = nullptr; } -Magnetism::~Magnetism() { delete[] this->start_mag; } +Magnetism::~Magnetism() +{ + delete[] this->start_mag; +} /************************************************ * unit test of read_dmk and write_dmk @@ -44,15 +56,15 @@ Magnetism::~Magnetism() { delete[] this->start_mag; } void init_pv(int nlocal, Parallel_2D& pv) { #ifdef __MPI - pv.init(nlocal, nlocal, 1, MPI_COMM_WORLD); + pv.init(nlocal, nlocal, 1, MPI_COMM_WORLD); #else - pv.nrow = nlocal; - pv.ncol = nlocal; -#endif + pv.nrow = nlocal; + pv.ncol = nlocal; +#endif } template -void gen_dmk(std::vector>& dmk, std::vector& efs, int nspin, int nk, int nlocal, Parallel_2D& pv) +void gen_dmk(std::vector>& dmk, std::vector& efs, int nspin, int nk, int nlocal, Parallel_2D& pv) { int myrank = 0; #ifdef __MPI @@ -99,8 +111,8 @@ void gen_dmk(std::vector>& dmk, std::vector& efs, int ns } } - -TEST(DMKTest, GenFileName) { +TEST(DMKTest, GenFileName) +{ std::string fname = ModuleIO::dmk_gen_fname(true, 0, 0); EXPECT_EQ(fname, "dms1_nao.txt"); fname = ModuleIO::dmk_gen_fname(true, 1, 1); @@ -112,8 +124,8 @@ TEST(DMKTest, GenFileName) { EXPECT_EQ(fname, "dms2k2_nao.txt"); }; - -TEST(DMKTest,WriteDMK) { +TEST(DMKTest, WriteDMK) +{ UnitCell* ucell; UcellTestPrepare utp = UcellTestLib["Si"]; ucell = utp.SetUcellInfo(); @@ -141,124 +153,102 @@ TEST(DMKTest,WriteDMK) { { std::string fn = "dms1_nao.txt"; ifs.open(fn); - std::string str((std::istreambuf_iterator(ifs)), - std::istreambuf_iterator()); + std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); EXPECT_THAT(str, testing::HasSubstr("0.00000 (fermi energy)")); EXPECT_THAT(str, testing::HasSubstr("20 20")); - EXPECT_THAT( - str, - testing::HasSubstr("0.000e+00 1.000e-01 2.000e-01 3.000e-01 4.000e-01 " - "5.000e-01 6.000e-01 7.000e-01\n")); - EXPECT_THAT( - str, - testing::HasSubstr("8.000e-01 9.000e-01 1.000e+00 1.100e+00 1.200e+00 " - "1.300e+00 1.400e+00 1.500e+00\n")); - EXPECT_THAT( - str, - testing::HasSubstr("1.600e+00 1.700e+00 1.800e+00 1.900e+00\n")); + EXPECT_THAT(str, + testing::HasSubstr("0.000e+00 1.000e-01 2.000e-01 3.000e-01 4.000e-01 " + "5.000e-01 6.000e-01 7.000e-01\n")); + EXPECT_THAT(str, + testing::HasSubstr("8.000e-01 9.000e-01 1.000e+00 1.100e+00 1.200e+00 " + "1.300e+00 1.400e+00 1.500e+00\n")); + EXPECT_THAT(str, testing::HasSubstr("1.600e+00 1.700e+00 1.800e+00 1.900e+00\n")); ifs.close(); fn = "dms2_nao.txt"; ifs.open(fn); - str = std::string((std::istreambuf_iterator(ifs)), - std::istreambuf_iterator()); + str = std::string((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); EXPECT_THAT(str, testing::HasSubstr("0.10000 (fermi energy)")); EXPECT_THAT(str, testing::HasSubstr("20 20")); - EXPECT_THAT( - str, - testing::HasSubstr("1.000e+00 1.100e+00 1.200e+00 1.300e+00 1.400e+00 " - "1.500e+00 1.600e+00 1.700e+00\n")); - EXPECT_THAT( - str, - testing::HasSubstr("1.800e+00 1.900e+00 2.000e+00 2.100e+00 2.200e+00 " - "2.300e+00 2.400e+00 2.500e+00\n")); - EXPECT_THAT( - str, - testing::HasSubstr("2.600e+00 2.700e+00 2.800e+00 2.900e+00\n")); + EXPECT_THAT(str, + testing::HasSubstr("1.000e+00 1.100e+00 1.200e+00 1.300e+00 1.400e+00 " + "1.500e+00 1.600e+00 1.700e+00\n")); + EXPECT_THAT(str, + testing::HasSubstr("1.800e+00 1.900e+00 2.000e+00 2.100e+00 2.200e+00 " + "2.300e+00 2.400e+00 2.500e+00\n")); + EXPECT_THAT(str, testing::HasSubstr("2.600e+00 2.700e+00 2.800e+00 2.900e+00\n")); ifs.close(); fn = "dms1k1_nao.txt"; ifs.open(fn); - str = std::string((std::istreambuf_iterator(ifs)), - std::istreambuf_iterator()); + str = std::string((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); EXPECT_THAT(str, testing::HasSubstr("0.00000 (fermi energy)")); EXPECT_THAT(str, testing::HasSubstr("20 20")); - EXPECT_THAT( - str, - testing::HasSubstr("(0.000e+00,0.000e+00) (1.000e-01,1.000e+00) (2.000e-01,2.000e+00) " - "(3.000e-01,3.000e+00) (4.000e-01,4.000e+00) (5.000e-01,5.000e+00) " - "(6.000e-01,6.000e+00) (7.000e-01,7.000e+00)\n")); - EXPECT_THAT( - str, - testing::HasSubstr("(8.000e-01,8.000e+00) (9.000e-01,9.000e+00) (1.000e+00,1.000e+01) " - "(1.100e+00,1.100e+01) (1.200e+00,1.200e+01) (1.300e+00,1.300e+01) " - "(1.400e+00,1.400e+01) (1.500e+00,1.500e+01)\n")); - EXPECT_THAT( - str, - testing::HasSubstr("(1.600e+00,1.600e+01) (1.700e+00,1.700e+01) (1.800e+00,1.800e+01) (1.900e+00,1.900e+01)\n")); + EXPECT_THAT(str, + testing::HasSubstr("(0.000e+00,0.000e+00) (1.000e-01,1.000e+00) (2.000e-01,2.000e+00) " + "(3.000e-01,3.000e+00) (4.000e-01,4.000e+00) (5.000e-01,5.000e+00) " + "(6.000e-01,6.000e+00) (7.000e-01,7.000e+00)\n")); + EXPECT_THAT(str, + testing::HasSubstr("(8.000e-01,8.000e+00) (9.000e-01,9.000e+00) (1.000e+00,1.000e+01) " + "(1.100e+00,1.100e+01) (1.200e+00,1.200e+01) (1.300e+00,1.300e+01) " + "(1.400e+00,1.400e+01) (1.500e+00,1.500e+01)\n")); + EXPECT_THAT(str, + testing::HasSubstr( + "(1.600e+00,1.600e+01) (1.700e+00,1.700e+01) (1.800e+00,1.800e+01) (1.900e+00,1.900e+01)\n")); ifs.close(); fn = "dms1k2_nao.txt"; ifs.open(fn); - str = std::string((std::istreambuf_iterator(ifs)), - std::istreambuf_iterator()); + str = std::string((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); EXPECT_THAT(str, testing::HasSubstr("0.00000 (fermi energy)")); EXPECT_THAT(str, testing::HasSubstr("20 20")); - EXPECT_THAT( - str, - testing::HasSubstr("(1.000e+00,1.000e-01) (1.100e+00,1.100e+00) (1.200e+00,2.100e+00) " - "(1.300e+00,3.100e+00) (1.400e+00,4.100e+00) (1.500e+00,5.100e+00) " - "(1.600e+00,6.100e+00) (1.700e+00,7.100e+00)\n")); - EXPECT_THAT( - str, - testing::HasSubstr("(1.800e+00,8.100e+00) (1.900e+00,9.100e+00) (2.000e+00,1.010e+01) " - "(2.100e+00,1.110e+01) (2.200e+00,1.210e+01) (2.300e+00,1.310e+01) " - "(2.400e+00,1.410e+01) (2.500e+00,1.510e+01)\n")); - EXPECT_THAT( - str, - testing::HasSubstr("(2.600e+00,1.610e+01) (2.700e+00,1.710e+01) (2.800e+00,1.810e+01) (2.900e+00,1.910e+01)\n")); + EXPECT_THAT(str, + testing::HasSubstr("(1.000e+00,1.000e-01) (1.100e+00,1.100e+00) (1.200e+00,2.100e+00) " + "(1.300e+00,3.100e+00) (1.400e+00,4.100e+00) (1.500e+00,5.100e+00) " + "(1.600e+00,6.100e+00) (1.700e+00,7.100e+00)\n")); + EXPECT_THAT(str, + testing::HasSubstr("(1.800e+00,8.100e+00) (1.900e+00,9.100e+00) (2.000e+00,1.010e+01) " + "(2.100e+00,1.110e+01) (2.200e+00,1.210e+01) (2.300e+00,1.310e+01) " + "(2.400e+00,1.410e+01) (2.500e+00,1.510e+01)\n")); + EXPECT_THAT(str, + testing::HasSubstr( + "(2.600e+00,1.610e+01) (2.700e+00,1.710e+01) (2.800e+00,1.810e+01) (2.900e+00,1.910e+01)\n")); ifs.close(); fn = "dms2k1_nao.txt"; ifs.open(fn); - str = std::string((std::istreambuf_iterator(ifs)), - std::istreambuf_iterator()); + str = std::string((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); EXPECT_THAT(str, testing::HasSubstr("0.10000 (fermi energy)")); EXPECT_THAT(str, testing::HasSubstr("20 20")); - EXPECT_THAT( - str, - testing::HasSubstr("(2.000e+00,2.000e-01) (2.100e+00,1.200e+00) (2.200e+00,2.200e+00) " - "(2.300e+00,3.200e+00) (2.400e+00,4.200e+00) (2.500e+00,5.200e+00) " - "(2.600e+00,6.200e+00) (2.700e+00,7.200e+00)\n")); - EXPECT_THAT( - str, - testing::HasSubstr("(2.800e+00,8.200e+00) (2.900e+00,9.200e+00) (3.000e+00,1.020e+01) " - "(3.100e+00,1.120e+01) (3.200e+00,1.220e+01) (3.300e+00,1.320e+01) " - "(3.400e+00,1.420e+01) (3.500e+00,1.520e+01)\n")); - EXPECT_THAT( - str, - testing::HasSubstr("(3.600e+00,1.620e+01) (3.700e+00,1.720e+01) (3.800e+00,1.820e+01) (3.900e+00,1.920e+01)\n")); + EXPECT_THAT(str, + testing::HasSubstr("(2.000e+00,2.000e-01) (2.100e+00,1.200e+00) (2.200e+00,2.200e+00) " + "(2.300e+00,3.200e+00) (2.400e+00,4.200e+00) (2.500e+00,5.200e+00) " + "(2.600e+00,6.200e+00) (2.700e+00,7.200e+00)\n")); + EXPECT_THAT(str, + testing::HasSubstr("(2.800e+00,8.200e+00) (2.900e+00,9.200e+00) (3.000e+00,1.020e+01) " + "(3.100e+00,1.120e+01) (3.200e+00,1.220e+01) (3.300e+00,1.320e+01) " + "(3.400e+00,1.420e+01) (3.500e+00,1.520e+01)\n")); + EXPECT_THAT(str, + testing::HasSubstr( + "(3.600e+00,1.620e+01) (3.700e+00,1.720e+01) (3.800e+00,1.820e+01) (3.900e+00,1.920e+01)\n")); ifs.close(); fn = "dms2k2_nao.txt"; ifs.open(fn); - str = std::string((std::istreambuf_iterator(ifs)), - std::istreambuf_iterator()); + str = std::string((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); EXPECT_THAT(str, testing::HasSubstr("0.10000 (fermi energy)")); EXPECT_THAT(str, testing::HasSubstr("20 20")); - EXPECT_THAT( - str, - testing::HasSubstr("(3.000e+00,3.000e-01) (3.100e+00,1.300e+00) (3.200e+00,2.300e+00) " - "(3.300e+00,3.300e+00) (3.400e+00,4.300e+00) (3.500e+00,5.300e+00) " - "(3.600e+00,6.300e+00) (3.700e+00,7.300e+00)\n")); - EXPECT_THAT( - str, - testing::HasSubstr("(3.800e+00,8.300e+00) (3.900e+00,9.300e+00) (4.000e+00,1.030e+01) " - "(4.100e+00,1.130e+01) (4.200e+00,1.230e+01) (4.300e+00,1.330e+01) " - "(4.400e+00,1.430e+01) (4.500e+00,1.530e+01)\n")); - EXPECT_THAT( - str, - testing::HasSubstr("(4.600e+00,1.630e+01) (4.700e+00,1.730e+01) (4.800e+00,1.830e+01) (4.900e+00,1.930e+01)\n")); + EXPECT_THAT(str, + testing::HasSubstr("(3.000e+00,3.000e-01) (3.100e+00,1.300e+00) (3.200e+00,2.300e+00) " + "(3.300e+00,3.300e+00) (3.400e+00,4.300e+00) (3.500e+00,5.300e+00) " + "(3.600e+00,6.300e+00) (3.700e+00,7.300e+00)\n")); + EXPECT_THAT(str, + testing::HasSubstr("(3.800e+00,8.300e+00) (3.900e+00,9.300e+00) (4.000e+00,1.030e+01) " + "(4.100e+00,1.130e+01) (4.200e+00,1.230e+01) (4.300e+00,1.330e+01) " + "(4.400e+00,1.430e+01) (4.500e+00,1.530e+01)\n")); + EXPECT_THAT(str, + testing::HasSubstr( + "(4.600e+00,1.630e+01) (4.700e+00,1.730e+01) (4.800e+00,1.830e+01) (4.900e+00,1.930e+01)\n")); ifs.close(); remove("dms1_nao.txt"); remove("dms2_nao.txt"); @@ -270,12 +260,11 @@ TEST(DMKTest,WriteDMK) { delete ucell; // remove the generated files - }; - // no function in the main code calls read_dmk??? mohan note 2025-05-25 -TEST(DMKTest, ReadDMK) { +TEST(DMKTest, ReadDMK) +{ int nlocal = 26; std::vector> dmk; std::vector>> dmk_multik; @@ -305,7 +294,6 @@ TEST(DMKTest, ReadDMK) { remove("running_log.txt"); } - #ifdef __MPI int main(int argc, char** argv) { @@ -318,7 +306,8 @@ int main(int argc, char** argv) testing::InitGoogleTest(&argc, argv); ::testing::TestEventListeners& listeners = ::testing::UnitTest::GetInstance()->listeners(); - if (GlobalV::MY_RANK != 0) { + if (GlobalV::MY_RANK != 0) + { delete listeners.Release(listeners.default_result_printer()); } @@ -328,7 +317,7 @@ int main(int argc, char** argv) if (GlobalV::MY_RANK == 0 && result != 0) { std::cout << "ERROR:some tests are not passed" << std::endl; - } + } MPI_Finalize(); return result; diff --git a/source/module_io/test/numerical_basis_test.cpp b/source/module_io/test/numerical_basis_test.cpp index c0e30e30fa..16b99b2929 100644 --- a/source/module_io/test/numerical_basis_test.cpp +++ b/source/module_io/test/numerical_basis_test.cpp @@ -1,7 +1,7 @@ -#include "module_base/math_sphbes.h" -#include "module_base/matrix3.h" -#include "module_base/vector3.h" #include "module_io/numerical_basis_jyjy.h" +#include "source_base/math_sphbes.h" +#include "source_base/matrix3.h" +#include "source_base/vector3.h" #include "gtest/gtest.h" diff --git a/source/module_io/test/orb_io_test.cpp b/source/module_io/test/orb_io_test.cpp index a5c9e1df9f..33b28f9a8e 100644 --- a/source/module_io/test/orb_io_test.cpp +++ b/source/module_io/test/orb_io_test.cpp @@ -1,12 +1,13 @@ -#include #include "module_io/orb_io.h" +#include + #ifdef __MPI #include #endif -#include "module_base/constants.h" -#include "module_base/global_variable.h" +#include "source_base/constants.h" +#include "source_base/global_variable.h" class OrbIOTest : public testing::Test { @@ -52,7 +53,7 @@ TEST_F(OrbIOTest, ReadAbacusOrb) EXPECT_EQ(nzeta[2], 2); EXPECT_EQ(nzeta[3], 1); EXPECT_EQ(radials.size(), 9); // 4 + 2 + 2 + 1 - for(auto& radial: radials) + for (auto& radial: radials) { EXPECT_EQ(radial.size(), 1001); } diff --git a/source/module_io/test/outputlog_test.cpp b/source/module_io/test/outputlog_test.cpp index 786f6017df..19320e485c 100644 --- a/source/module_io/test/outputlog_test.cpp +++ b/source/module_io/test/outputlog_test.cpp @@ -3,14 +3,14 @@ #define private public #include "module_parameter/parameter.h" #undef private -#include +#include "module_io/output_log.h" +#include "source_base/constants.h" +#include "source_base/global_variable.h" + #include #include #include - -#include "module_base/constants.h" -#include "module_base/global_variable.h" -#include "module_io/output_log.h" +#include #ifdef __MPI #include "module_basis/module_pw/test/test_tool.h" @@ -20,10 +20,11 @@ * - Tested Functions: * - output_convergence_after_scf() * - output_efermi() -*/ + */ // Test the output_convergence_after_scf function -TEST(OutputConvergenceAfterSCFTest, TestConvergence) { +TEST(OutputConvergenceAfterSCFTest, TestConvergence) +{ bool convergence = true; double energy = 2.0; std::ofstream ofs_running("test_output_convergence.txt"); @@ -40,10 +41,11 @@ TEST(OutputConvergenceAfterSCFTest, TestConvergence) { " final etot is 27.211396 eV\n"; EXPECT_EQ(file_content, expected_content); - std::remove("test_output_convergence.txt"); + std::remove("test_output_convergence.txt"); } -TEST(OutputConvergenceAfterSCFTest, TestNotConvergence) { +TEST(OutputConvergenceAfterSCFTest, TestNotConvergence) +{ bool convergence = false; double energy = 2.0; std::ofstream ofs_running("test_output_convergence_noconvergence.txt"); @@ -67,7 +69,8 @@ TEST(OutputConvergenceAfterSCFTest, TestNotConvergence) { } // Test the output_efermi function -TEST(OutputEfermiTest, TestConvergence) { +TEST(OutputEfermiTest, TestConvergence) +{ bool convergence = true; double efermi = 1.0; std::ofstream ofs_running("test_output_efermi.txt"); @@ -113,7 +116,8 @@ TEST(OutputAfterRelaxTest, TestConvergence) std::remove("test_output_after_relax.txt"); } -TEST(OutputEfermiTest, TestNotConvergence) { +TEST(OutputEfermiTest, TestNotConvergence) +{ bool convergence = false; double efermi = 1.0; std::ofstream ofs_running("test_output_efermi_noconvergence.txt"); @@ -132,7 +136,8 @@ TEST(OutputEfermiTest, TestNotConvergence) { std::remove("test_output_efermi_noconvergence.txt"); } -TEST(OutputEfermiTest, TestMOutputLevel) { +TEST(OutputEfermiTest, TestMOutputLevel) +{ bool convergence = true; double efermi = 1.0; PARAM.input.out_level = "m"; // Setting output level to "m" @@ -275,12 +280,10 @@ TEST(PrintForce, PrintForce) testing::HasSubstr("-------------------------------------------------------------------------")); getline(ifs, output_str); - EXPECT_THAT(output_str, - testing::HasSubstr("Al1 25.7110532015 51.4221064030 77.1331596044")); + EXPECT_THAT(output_str, testing::HasSubstr("Al1 25.7110532015 51.4221064030 77.1331596044")); getline(ifs, output_str); - EXPECT_THAT(output_str, - testing::HasSubstr("Al2 0.0000000000 0.0000000000 0.0000000000")); + EXPECT_THAT(output_str, testing::HasSubstr("Al2 0.0000000000 0.0000000000 0.0000000000")); getline(ifs, output_str); EXPECT_THAT(output_str, @@ -303,7 +306,6 @@ TEST(PrintStress, PrintStress) stress(2, 1) = 0.0; stress(2, 2) = 0.0; - std::ofstream ofs("running_stress.txt"); ModuleIO::print_stress("TOTAL-STRESS", stress, true, false, ofs); ofs.close(); @@ -335,7 +337,8 @@ TEST(PrintStress, PrintStress) EXPECT_THAT(output_str, testing::HasSubstr("----------------------------------------------------------------")); getline(ifs, output_str); - EXPECT_THAT(output_str, testing::HasSubstr(" TOTAL-PRESSURE (DO NOT INCLUDE KINETIC PART OF IONS): 49035.075992 KBAR")); + EXPECT_THAT(output_str, + testing::HasSubstr(" TOTAL-PRESSURE (DO NOT INCLUDE KINETIC PART OF IONS): 49035.075992 KBAR")); ifs.close(); std::remove("running_stress.txt"); } diff --git a/source/module_io/test/prepare_unitcell.h b/source/module_io/test/prepare_unitcell.h index 8e43ec4223..f2076bf189 100644 --- a/source/module_io/test/prepare_unitcell.h +++ b/source/module_io/test/prepare_unitcell.h @@ -1,327 +1,304 @@ #ifndef PREPARE_UNITCELL_H #define PREPARE_UNITCELL_H -#include -#include -#include "module_base/mathzone.h" +#include "source_base/mathzone.h" + +#include +#include class UcellTestPrepare { -public: - UcellTestPrepare()=default; - UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in); - UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in, - std::valarray mbl_in, - std::valarray velocity_in); - UcellTestPrepare(const UcellTestPrepare &utp); + public: + UcellTestPrepare() = default; + UcellTestPrepare(std::string latname_in, + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in); + UcellTestPrepare(std::string latname_in, + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in, + std::valarray mbl_in, + std::valarray velocity_in); + UcellTestPrepare(const UcellTestPrepare& utp); + + std::string latname; + int lmaxmax; + bool init_vel; + bool selective_dynamics; + bool relax_new; + std::string fixed_axes; + double lat0; + std::valarray latvec; + std::vector elements; + std::vector pp_files; + std::vector pp_types; + std::vector orb_files; + std::valarray natom; + std::vector atomic_mass; + std::string coor_type; + std::valarray coordinates; + std::valarray mbl; + std::valarray velocity; + // ntype + int ntype; + int atomic_index; - std::string latname; - int lmaxmax; - bool init_vel; - bool selective_dynamics; - bool relax_new; - std::string fixed_axes; - double lat0; - std::valarray latvec; - std::vector elements; - std::vector pp_files; - std::vector pp_types; - std::vector orb_files; - std::valarray natom; - std::vector atomic_mass; - std::string coor_type; - std::valarray coordinates; - std::valarray mbl; - std::valarray velocity; - // ntype - int ntype; - int atomic_index; + UnitCell* SetUcellInfo() + { + // basic info + this->ntype = this->elements.size(); + UnitCell* ucell = new UnitCell; + ucell->setup(this->latname, this->ntype, this->lmaxmax, this->init_vel, this->fixed_axes); + delete[] ucell->magnet.start_mag; // mag set here + ucell->atom_label.resize(ucell->ntype); + ucell->atom_mass.resize(ucell->ntype); + ucell->pseudo_fn.resize(ucell->ntype); + ucell->pseudo_type.resize(ucell->ntype); - UnitCell* SetUcellInfo() - { - //basic info - this->ntype = this->elements.size(); - UnitCell* ucell = new UnitCell; - ucell->setup(this->latname, - this->ntype, - this->lmaxmax, - this->init_vel, - this->fixed_axes); - delete[] ucell->magnet.start_mag; //mag set here - ucell->atom_label.resize(ucell->ntype); - ucell->atom_mass.resize(ucell->ntype); - ucell->pseudo_fn.resize(ucell->ntype); - ucell->pseudo_type.resize(ucell->ntype); - - ucell->orbital_fn.resize(ucell->ntype); - ucell->magnet.start_mag = new double[ucell->ntype]; //mag set here - ucell->magnet.ux_[0] = 0.0; // ux_ set here - ucell->magnet.ux_[1] = 0.0; - ucell->magnet.ux_[2] = 0.0; - for(int it=0;itntype;++it) - { - ucell->atom_label[it] = this->elements[it]; - ucell->atom_mass[it] = this->atomic_mass[it]; - ucell->pseudo_fn[it] = this->pp_files[it]; - ucell->pseudo_type[it] = this->pp_types[it]; - ucell->orbital_fn[it] = this->orb_files[it]; - ucell->magnet.start_mag[it] = 0.0; //mag set here - } - //lattice info - ucell->lat0 = this->lat0; - ucell->lat0_angstrom = ucell->lat0 * 0.529177; - ucell->tpiba = ModuleBase::TWO_PI/ucell->lat0; - ucell->tpiba2 = ucell->tpiba * ucell->tpiba; - ucell->latvec.e11 = this->latvec[0]; - ucell->latvec.e12 = this->latvec[1]; - ucell->latvec.e13 = this->latvec[2]; - ucell->latvec.e21 = this->latvec[3]; - ucell->latvec.e22 = this->latvec[4]; - ucell->latvec.e23 = this->latvec[5]; - ucell->latvec.e31 = this->latvec[6]; - ucell->latvec.e32 = this->latvec[7]; - ucell->latvec.e33 = this->latvec[8]; - ucell->a1.x = ucell->latvec.e11; - ucell->a1.y = ucell->latvec.e12; - ucell->a1.z = ucell->latvec.e13; - ucell->a2.x = ucell->latvec.e21; - ucell->a2.y = ucell->latvec.e22; - ucell->a2.z = ucell->latvec.e23; - ucell->a3.x = ucell->latvec.e31; - ucell->a3.y = ucell->latvec.e32; - ucell->a3.z = ucell->latvec.e33; - ucell->GT = ucell->latvec.Inverse(); - ucell->G = ucell->GT.Transpose(); - ucell->GGT = ucell->G*ucell->GT; - ucell->invGGT = ucell->GGT.Inverse(); - ucell->omega = std::abs(ucell->latvec.Det())*(ucell->lat0)*(ucell->lat0)*(ucell->lat0); - //atomic info - ucell->Coordinate = this->coor_type; - ucell->atoms = new Atom[ucell->ntype]; - ucell->set_atom_flag = true; - this->atomic_index = 0; - for(int it=0;itntype;++it) - { - ucell->atoms[it].label = this->elements[it]; - ucell->atoms[it].nw = 0; - ucell->atoms[it].nwl = 2; - ucell->atoms[it].l_nchi.resize(ucell->atoms[it].nwl+1); - for(int L=0; Latoms[it].nwl+1; L++) - { - ucell->atoms[it].l_nchi[L] = 1; - ucell->atoms[it].nw += (2*L + 1) * ucell->atoms[it].l_nchi[L]; - } - ucell->atoms[it].na = this->natom[it]; - //coordinates and related physical quantities - ucell->atoms[it].tau.resize(ucell->atoms[it].na); - ucell->atoms[it].dis.resize(ucell->atoms[it].na); - ucell->atoms[it].taud.resize(ucell->atoms[it].na); - ucell->atoms[it].vel.resize(ucell->atoms[it].na); - ucell->atoms[it].mag.resize(ucell->atoms[it].na); - ucell->atoms[it].angle1.resize(ucell->atoms[it].na); - ucell->atoms[it].angle2.resize(ucell->atoms[it].na); - ucell->atoms[it].m_loc_.resize(ucell->atoms[it].na); - ucell->atoms[it].mbl.resize(ucell->atoms[it].na); - ucell->atoms[it].mass = ucell->atom_mass[it]; // mass set here - for(int ia=0; iaatoms[it].na; ++ia) - { - if (ucell->Coordinate == "Direct") - { - ucell->atoms[it].taud[ia].x = this->coordinates[this->atomic_index*3+0]; - ucell->atoms[it].taud[ia].y = this->coordinates[this->atomic_index*3+1]; - ucell->atoms[it].taud[ia].z = this->coordinates[this->atomic_index*3+2]; - ucell->atoms[it].tau[ia] = ucell->atoms[it].taud[ia]*ucell->latvec; - } - else if (ucell->Coordinate == "Cartesian") - { - ucell->atoms[it].tau[ia].x = this->coordinates[this->atomic_index*3+0]; - ucell->atoms[it].tau[ia].y = this->coordinates[this->atomic_index*3+1]; - ucell->atoms[it].tau[ia].z = this->coordinates[this->atomic_index*3+2]; - ModuleBase::Mathzone::Cartesian_to_Direct( - ucell->atoms[it].tau[ia].x, ucell->atoms[it].tau[ia].y, ucell->atoms[it].tau[ia].z, - ucell->latvec.e11, ucell->latvec.e12, ucell->latvec.e13, - ucell->latvec.e21, ucell->latvec.e22, ucell->latvec.e23, - ucell->latvec.e31, ucell->latvec.e32, ucell->latvec.e33, - ucell->atoms[it].taud[ia].x, ucell->atoms[it].taud[ia].y, ucell->atoms[it].taud[ia].z); - } - ucell->atoms[it].dis[ia].set(0, 0, 0); - if(this->init_vel) - { - ucell->atoms[it].vel[ia].x = this->velocity[this->atomic_index*3+0]; - ucell->atoms[it].vel[ia].y = this->velocity[this->atomic_index*3+1]; - ucell->atoms[it].vel[ia].z = this->velocity[this->atomic_index*3+2]; - } - else - { - ucell->atoms[it].vel[ia].set(0,0,0); - } - ucell->atoms[it].m_loc_[ia].set(0,0,0); - ucell->atoms[it].angle1[ia] = 0; - ucell->atoms[it].angle2[ia] = 0; - if(this->selective_dynamics) - { - ucell->atoms[it].mbl[ia].x = this->mbl[this->atomic_index*3+0]; - ucell->atoms[it].mbl[ia].y = this->mbl[this->atomic_index*3+1]; - ucell->atoms[it].mbl[ia].z = this->mbl[this->atomic_index*3+2]; - } - else - { - ucell->atoms[it].mbl[ia] = {1,1,1}; - } - ++(this->atomic_index); - } - } - ucell->nat = this->natom.sum(); - return ucell; - } + ucell->orbital_fn.resize(ucell->ntype); + ucell->magnet.start_mag = new double[ucell->ntype]; // mag set here + ucell->magnet.ux_[0] = 0.0; // ux_ set here + ucell->magnet.ux_[1] = 0.0; + ucell->magnet.ux_[2] = 0.0; + for (int it = 0; it < ucell->ntype; ++it) + { + ucell->atom_label[it] = this->elements[it]; + ucell->atom_mass[it] = this->atomic_mass[it]; + ucell->pseudo_fn[it] = this->pp_files[it]; + ucell->pseudo_type[it] = this->pp_types[it]; + ucell->orbital_fn[it] = this->orb_files[it]; + ucell->magnet.start_mag[it] = 0.0; // mag set here + } + // lattice info + ucell->lat0 = this->lat0; + ucell->lat0_angstrom = ucell->lat0 * 0.529177; + ucell->tpiba = ModuleBase::TWO_PI / ucell->lat0; + ucell->tpiba2 = ucell->tpiba * ucell->tpiba; + ucell->latvec.e11 = this->latvec[0]; + ucell->latvec.e12 = this->latvec[1]; + ucell->latvec.e13 = this->latvec[2]; + ucell->latvec.e21 = this->latvec[3]; + ucell->latvec.e22 = this->latvec[4]; + ucell->latvec.e23 = this->latvec[5]; + ucell->latvec.e31 = this->latvec[6]; + ucell->latvec.e32 = this->latvec[7]; + ucell->latvec.e33 = this->latvec[8]; + ucell->a1.x = ucell->latvec.e11; + ucell->a1.y = ucell->latvec.e12; + ucell->a1.z = ucell->latvec.e13; + ucell->a2.x = ucell->latvec.e21; + ucell->a2.y = ucell->latvec.e22; + ucell->a2.z = ucell->latvec.e23; + ucell->a3.x = ucell->latvec.e31; + ucell->a3.y = ucell->latvec.e32; + ucell->a3.z = ucell->latvec.e33; + ucell->GT = ucell->latvec.Inverse(); + ucell->G = ucell->GT.Transpose(); + ucell->GGT = ucell->G * ucell->GT; + ucell->invGGT = ucell->GGT.Inverse(); + ucell->omega = std::abs(ucell->latvec.Det()) * (ucell->lat0) * (ucell->lat0) * (ucell->lat0); + // atomic info + ucell->Coordinate = this->coor_type; + ucell->atoms = new Atom[ucell->ntype]; + ucell->set_atom_flag = true; + this->atomic_index = 0; + for (int it = 0; it < ucell->ntype; ++it) + { + ucell->atoms[it].label = this->elements[it]; + ucell->atoms[it].nw = 0; + ucell->atoms[it].nwl = 2; + ucell->atoms[it].l_nchi.resize(ucell->atoms[it].nwl + 1); + for (int L = 0; L < ucell->atoms[it].nwl + 1; L++) + { + ucell->atoms[it].l_nchi[L] = 1; + ucell->atoms[it].nw += (2 * L + 1) * ucell->atoms[it].l_nchi[L]; + } + ucell->atoms[it].na = this->natom[it]; + // coordinates and related physical quantities + ucell->atoms[it].tau.resize(ucell->atoms[it].na); + ucell->atoms[it].dis.resize(ucell->atoms[it].na); + ucell->atoms[it].taud.resize(ucell->atoms[it].na); + ucell->atoms[it].vel.resize(ucell->atoms[it].na); + ucell->atoms[it].mag.resize(ucell->atoms[it].na); + ucell->atoms[it].angle1.resize(ucell->atoms[it].na); + ucell->atoms[it].angle2.resize(ucell->atoms[it].na); + ucell->atoms[it].m_loc_.resize(ucell->atoms[it].na); + ucell->atoms[it].mbl.resize(ucell->atoms[it].na); + ucell->atoms[it].mass = ucell->atom_mass[it]; // mass set here + for (int ia = 0; ia < ucell->atoms[it].na; ++ia) + { + if (ucell->Coordinate == "Direct") + { + ucell->atoms[it].taud[ia].x = this->coordinates[this->atomic_index * 3 + 0]; + ucell->atoms[it].taud[ia].y = this->coordinates[this->atomic_index * 3 + 1]; + ucell->atoms[it].taud[ia].z = this->coordinates[this->atomic_index * 3 + 2]; + ucell->atoms[it].tau[ia] = ucell->atoms[it].taud[ia] * ucell->latvec; + } + else if (ucell->Coordinate == "Cartesian") + { + ucell->atoms[it].tau[ia].x = this->coordinates[this->atomic_index * 3 + 0]; + ucell->atoms[it].tau[ia].y = this->coordinates[this->atomic_index * 3 + 1]; + ucell->atoms[it].tau[ia].z = this->coordinates[this->atomic_index * 3 + 2]; + ModuleBase::Mathzone::Cartesian_to_Direct(ucell->atoms[it].tau[ia].x, + ucell->atoms[it].tau[ia].y, + ucell->atoms[it].tau[ia].z, + ucell->latvec.e11, + ucell->latvec.e12, + ucell->latvec.e13, + ucell->latvec.e21, + ucell->latvec.e22, + ucell->latvec.e23, + ucell->latvec.e31, + ucell->latvec.e32, + ucell->latvec.e33, + ucell->atoms[it].taud[ia].x, + ucell->atoms[it].taud[ia].y, + ucell->atoms[it].taud[ia].z); + } + ucell->atoms[it].dis[ia].set(0, 0, 0); + if (this->init_vel) + { + ucell->atoms[it].vel[ia].x = this->velocity[this->atomic_index * 3 + 0]; + ucell->atoms[it].vel[ia].y = this->velocity[this->atomic_index * 3 + 1]; + ucell->atoms[it].vel[ia].z = this->velocity[this->atomic_index * 3 + 2]; + } + else + { + ucell->atoms[it].vel[ia].set(0, 0, 0); + } + ucell->atoms[it].m_loc_[ia].set(0, 0, 0); + ucell->atoms[it].angle1[ia] = 0; + ucell->atoms[it].angle2[ia] = 0; + if (this->selective_dynamics) + { + ucell->atoms[it].mbl[ia].x = this->mbl[this->atomic_index * 3 + 0]; + ucell->atoms[it].mbl[ia].y = this->mbl[this->atomic_index * 3 + 1]; + ucell->atoms[it].mbl[ia].z = this->mbl[this->atomic_index * 3 + 2]; + } + else + { + ucell->atoms[it].mbl[ia] = {1, 1, 1}; + } + ++(this->atomic_index); + } + } + ucell->nat = this->natom.sum(); + return ucell; + } }; UcellTestPrepare::UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in): - latname(latname_in), - lmaxmax(lmaxmax_in), - init_vel(init_vel_in), - selective_dynamics(selective_dynamics_in), - relax_new(relax_new_in), - fixed_axes(fixed_axes_in), - lat0(lat0_in), - latvec(latvec_in), - elements(elements_in), - pp_files(pp_files_in), - pp_types(pp_types_in), - orb_files(orb_files_in), - natom(natom_in), - atomic_mass(atomic_mass_in), - coor_type(coor_type_in), - coordinates(coordinates_in) + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in) + : latname(latname_in), lmaxmax(lmaxmax_in), init_vel(init_vel_in), selective_dynamics(selective_dynamics_in), + relax_new(relax_new_in), fixed_axes(fixed_axes_in), lat0(lat0_in), latvec(latvec_in), elements(elements_in), + pp_files(pp_files_in), pp_types(pp_types_in), orb_files(orb_files_in), natom(natom_in), + atomic_mass(atomic_mass_in), coor_type(coor_type_in), coordinates(coordinates_in) { - mbl = std::valarray(0.0, coordinates_in.size()); - velocity = std::valarray(0.0, coordinates_in.size()); + mbl = std::valarray(0.0, coordinates_in.size()); + velocity = std::valarray(0.0, coordinates_in.size()); } UcellTestPrepare::UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in, - std::valarray mbl_in, - std::valarray velocity_in): - latname(latname_in), - lmaxmax(lmaxmax_in), - init_vel(init_vel_in), - selective_dynamics(selective_dynamics_in), - relax_new(relax_new_in), - fixed_axes(fixed_axes_in), - lat0(lat0_in), - latvec(latvec_in), - elements(elements_in), - pp_files(pp_files_in), - pp_types(pp_types_in), - orb_files(orb_files_in), - natom(natom_in), - atomic_mass(atomic_mass_in), - coor_type(coor_type_in), - coordinates(coordinates_in), - mbl(mbl_in), - velocity(velocity_in) // velocity assume the existence of mbl in print_stru_file() -{} - -UcellTestPrepare::UcellTestPrepare(const UcellTestPrepare &utp): - latname(utp.latname), - lmaxmax(utp.lmaxmax), - init_vel(utp.init_vel), - selective_dynamics(utp.selective_dynamics), - relax_new(utp.relax_new), - fixed_axes(utp.fixed_axes), - lat0(utp.lat0), - latvec(utp.latvec), - elements(utp.elements), - pp_files(utp.pp_files), - pp_types(utp.pp_types), - orb_files(utp.orb_files), - natom(utp.natom), - atomic_mass(utp.atomic_mass), - coor_type(utp.coor_type), - coordinates(utp.coordinates), - mbl(utp.mbl), - velocity(utp.velocity) // velocity assume the existence of mbl in print_stru_file() -{} + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in, + std::valarray mbl_in, + std::valarray velocity_in) + : latname(latname_in), lmaxmax(lmaxmax_in), init_vel(init_vel_in), selective_dynamics(selective_dynamics_in), + relax_new(relax_new_in), fixed_axes(fixed_axes_in), lat0(lat0_in), latvec(latvec_in), elements(elements_in), + pp_files(pp_files_in), pp_types(pp_types_in), orb_files(orb_files_in), natom(natom_in), + atomic_mass(atomic_mass_in), coor_type(coor_type_in), coordinates(coordinates_in), mbl(mbl_in), + velocity(velocity_in) // velocity assume the existence of mbl in print_stru_file() +{ +} -std::map UcellTestLib +UcellTestPrepare::UcellTestPrepare(const UcellTestPrepare& utp) + : latname(utp.latname), lmaxmax(utp.lmaxmax), init_vel(utp.init_vel), selective_dynamics(utp.selective_dynamics), + relax_new(utp.relax_new), fixed_axes(utp.fixed_axes), lat0(utp.lat0), latvec(utp.latvec), elements(utp.elements), + pp_files(utp.pp_files), pp_types(utp.pp_types), orb_files(utp.orb_files), natom(utp.natom), + atomic_mass(utp.atomic_mass), coor_type(utp.coor_type), coordinates(utp.coordinates), mbl(utp.mbl), + velocity(utp.velocity) // velocity assume the existence of mbl in print_stru_file() { - {"Si", UcellTestPrepare( - "fcc", //latname - 2, //lmaxmax - true, //init_vel - true, //selective_dyanmics - true, //relax_new - "volume", //fixed_axes - 10.2, //lat0 - {-0.5,0.0,0.5, //latvec - 0.0,0.5,0.5, - -0.5,0.5,0.0}, - {"Si"}, //elements - {"Si.upf"}, //upf file - {"upf201"}, //upf types - {"Si.orb"}, //orb file - {2}, //number of each elements - {28.0}, //atomic mass - "Cartesian", //coordination type - {0.0,0.0,0.0, //atomic coordinates - 0.25,0.25,0.25})} -}; +} + +std::map UcellTestLib{{"Si", + UcellTestPrepare("fcc", // latname + 2, // lmaxmax + true, // init_vel + true, // selective_dyanmics + true, // relax_new + "volume", // fixed_axes + 10.2, // lat0 + {-0.5, + 0.0, + 0.5, // latvec + 0.0, + 0.5, + 0.5, + -0.5, + 0.5, + 0.0}, + {"Si"}, // elements + {"Si.upf"}, // upf file + {"upf201"}, // upf types + {"Si.orb"}, // orb file + {2}, // number of each elements + {28.0}, // atomic mass + "Cartesian", // coordination type + {0.0, + 0.0, + 0.0, // atomic coordinates + 0.25, + 0.25, + 0.25})}}; #endif diff --git a/source/module_io/test/read_input_ptest.cpp b/source/module_io/test/read_input_ptest.cpp index 2ec4bdce1d..4883d43135 100644 --- a/source/module_io/test/read_input_ptest.cpp +++ b/source/module_io/test/read_input_ptest.cpp @@ -1,16 +1,16 @@ -#include -#include +#include "module_io/read_input.h" +#include "module_parameter/parameter.h" +#include "source_base/tool_quit.h" #include "gmock/gmock.h" #include "gtest/gtest.h" -#include "module_base/tool_quit.h" -#include "module_io/read_input.h" -#include "module_parameter/parameter.h" +#include +#include // #ifdef __MPI -#include "module_base/parallel_global.h" #include "module_basis/module_pw/test/test_tool.h" #include "mpi.h" +#include "source_base/parallel_global.h" // #endif /************************************************ * unit test of read_input_test.cpp @@ -26,7 +26,7 @@ class InputParaTest : public testing::Test { - protected: + protected: }; // #ifdef __MPI @@ -448,7 +448,8 @@ TEST_F(InputParaTest, ParaRead) // comment out this part of tests, since Parameter is in another directory now, mohan 2025-05-18 // besides, the following tests will cause strange error in MPI_Finalize() -// I tried the following modification, it worked well in my own environment, but not in the Github test, Xinyuan 2025-05-25 +// I tried the following modification, it worked well in my own environment, but not in the Github test, Xinyuan +// 2025-05-25 /* TEST_F(InputParaTest, Check) { diff --git a/source/module_io/test/read_wf2rho_pw_test.cpp b/source/module_io/test/read_wf2rho_pw_test.cpp index e8e0214236..1135335b66 100644 --- a/source/module_io/test/read_wf2rho_pw_test.cpp +++ b/source/module_io/test/read_wf2rho_pw_test.cpp @@ -10,16 +10,16 @@ #include "module_elecstate/module_charge/symmetry_rho.h" #include "module_hamilt_general/module_xc/xc_functional.h" #include "module_hamilt_pw/hamilt_pwdft/parallel_grid.h" +#include "module_io/filename.h" // mohan add 2025-05-17 #include "module_io/read_wf2rho_pw.h" #include "module_io/write_wfc_pw.h" -#include "module_io/filename.h" // mohan add 2025-05-17 #include "module_parameter/parameter.h" #include "module_psi/psi.h" #ifdef __MPI -#include "module_base/parallel_global.h" #include "module_basis/module_pw/test/test_tool.h" #include "mpi.h" +#include "source_base/parallel_global.h" #endif Parallel_Grid::Parallel_Grid() @@ -65,35 +65,35 @@ void Symmetry_rho::begin(const int& spin_now, void cal_ik2iktot(std::vector& ik2iktot, const int& nks, const int& nkstot) { - if(PARAM.inp.kpar==1) - { - for(int ik = 0; ik < nks; ++ik) - { - ik2iktot[ik] = ik; - } + if (PARAM.inp.kpar == 1) + { + for (int ik = 0; ik < nks; ++ik) + { + ik2iktot[ik] = ik; + } } - else if(PARAM.inp.kpar==2) + else if (PARAM.inp.kpar == 2) { - if(GlobalV::MY_POOL==0) - { - for(int ik = 0; ik < nks; ++ik) - { - ik2iktot[ik] = ik; - } - } - else if(GlobalV::MY_POOL==1) - { - for(int ik = 0; ik < nks; ++ik) - { - ik2iktot[ik] = ik+2; // only works for this test - } - } + if (GlobalV::MY_POOL == 0) + { + for (int ik = 0; ik < nks; ++ik) + { + ik2iktot[ik] = ik; + } + } + else if (GlobalV::MY_POOL == 1) + { + for (int ik = 0; ik < nks; ++ik) + { + ik2iktot[ik] = ik + 2; // only works for this test + } + } } } namespace GlobalC { - Parallel_Grid Pgrid; +Parallel_Grid Pgrid; } // namespace GlobalC /** @@ -195,20 +195,19 @@ TEST_F(ReadWfcRhoTest, ReadWfcRho) const int is = 0; // nspin is 1 for (int ik = 0; ik < nkstot; ++ik) - { - ofs << " spin=" << is+1 << " k-point=" - << ik + 1 << "/" << nkstot - << " Cartesian=" << kv->kvec_c[ik].x << " " << kv->kvec_c[ik].y - << " " << kv->kvec_c[ik].z << " (" << kv->ngk[ik] << " plane wave)" << std::endl; + { + ofs << " spin=" << is + 1 << " k-point=" << ik + 1 << "/" << nkstot << " Cartesian=" << kv->kvec_c[ik].x + << " " << kv->kvec_c[ik].y << " " << kv->kvec_c[ik].z << " (" << kv->ngk[ik] << " plane wave)" + << std::endl; ofs << std::setprecision(16); ofs << std::setiosflags(std::ios::showpoint); double ekb = -1.23456; // energy for (int ib = 0; ib < nbands; ib++) - { - ofs << " " << ib + 1 << " " << ekb << " " << wg(ik,ib) << std::endl; - } + { + ofs << " " << ib + 1 << " " << ekb << " " << wg(ik, ib) << std::endl; + } ofs << std::endl; } @@ -268,32 +267,52 @@ TEST_F(ReadWfcRhoTest, ReadWfcRho) #endif // for spin=1 or 2, npol=1 - const int npol=1; + const int npol = 1; // Write the wave functions to file - const std::string out_dir = "./"; + const std::string out_dir = "./"; // Read the wave functions to charge density std::stringstream ss; ss << "running_log" << GlobalV::MY_RANK << ".txt"; - std::ofstream running_log(ss.str().c_str()); + std::ofstream running_log(ss.str().c_str()); running_log << " rank=" << GlobalV::MY_RANK << std::endl; - const double ecutwfc = 20; // this is a fake number - ModuleIO::write_wfc_pw( - kpar, my_pool, my_rank, nbands, nspin, npol, - GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, - PARAM.input.out_wfc_pw, ecutwfc, out_dir, *psi, *kv, wfcpw, - running_log); - - ModuleIO::read_wf2rho_pw(wfcpw, symm, chg, - out_dir, kpar, my_pool, my_rank, - GlobalV::NPROC_IN_POOL, GlobalV::RANK_IN_POOL, - nbands, nspin, npol, - nkstot, kv->ik2iktot, kv->isk, running_log); + ModuleIO::write_wfc_pw(kpar, + my_pool, + my_rank, + nbands, + nspin, + npol, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + PARAM.input.out_wfc_pw, + ecutwfc, + out_dir, + *psi, + *kv, + wfcpw, + running_log); + + ModuleIO::read_wf2rho_pw(wfcpw, + symm, + chg, + out_dir, + kpar, + my_pool, + my_rank, + GlobalV::NPROC_IN_POOL, + GlobalV::RANK_IN_POOL, + nbands, + nspin, + npol, + nkstot, + kv->ik2iktot, + kv->isk, + running_log); // compare the charge density for (int ir = 0; ir < rhopw->nrxx; ++ir) @@ -301,24 +320,24 @@ TEST_F(ReadWfcRhoTest, ReadWfcRho) EXPECT_NEAR(chg.rho[0][ir], chg_ref.rho[0][ir], 1e-8); } - if (GlobalV::NPROC == 1) - { - EXPECT_NEAR(chg.rho[0][0], 8617.076357957576, 1e-8); - } - else if (GlobalV::NPROC == 4) - { - const std::vector ref = {8207.849135313403, 35.34776105132742, 8207.849135313403, 35.34776105132742}; - EXPECT_NEAR(chg.rho[0][0], ref[GlobalV::MY_RANK], 1e-8); - // for (int ip = 0; ip < GlobalV::NPROC; ++ip) - // { - // if (GlobalV::MY_RANK == ip) - // { - // std::cout.precision(16); - // std::cout << GlobalV::MY_RANK << " " << chg.rho[0][0] << std::endl; - // } - // MPI_Barrier(MPI_COMM_WORLD); - // } - } + if (GlobalV::NPROC == 1) + { + EXPECT_NEAR(chg.rho[0][0], 8617.076357957576, 1e-8); + } + else if (GlobalV::NPROC == 4) + { + const std::vector ref = {8207.849135313403, 35.34776105132742, 8207.849135313403, 35.34776105132742}; + EXPECT_NEAR(chg.rho[0][0], ref[GlobalV::MY_RANK], 1e-8); + // for (int ip = 0; ip < GlobalV::NPROC; ++ip) + // { + // if (GlobalV::MY_RANK == ip) + // { + // std::cout.precision(16); + // std::cout << GlobalV::MY_RANK << " " << chg.rho[0][0] << std::endl; + // } + // MPI_Barrier(MPI_COMM_WORLD); + // } + } delete[] chg.rho; delete[] chg._space_rho; @@ -335,11 +354,11 @@ TEST_F(ReadWfcRhoTest, ReadWfcRho) if (GlobalV::KPAR == 2) { remove("wfs1k3_pw.dat"); - remove("wfs1k4_pw.dat"); - remove("running_log1.txt"); - remove("running_log2.txt"); - remove("running_log3.txt"); - } + remove("wfs1k4_pw.dat"); + remove("running_log1.txt"); + remove("running_log2.txt"); + remove("running_log3.txt"); + } } } diff --git a/source/module_io/test/read_wfc_pw_test.cpp b/source/module_io/test/read_wfc_pw_test.cpp index 2c17de3a15..65652e8ecf 100644 --- a/source/module_io/test/read_wfc_pw_test.cpp +++ b/source/module_io/test/read_wfc_pw_test.cpp @@ -6,9 +6,9 @@ #include "gmock/gmock.h" #include "gtest/gtest.h" #ifdef __MPI -#include "module_base/parallel_global.h" #include "module_basis/module_pw/test/test_tool.h" #include "mpi.h" +#include "source_base/parallel_global.h" #endif /** @@ -30,12 +30,14 @@ class ReadWfcPwTest : public ::testing::Test } virtual void TearDown() { - if (wfcpw != nullptr) { + if (wfcpw != nullptr) + { delete wfcpw; -} - if (kvec_d != nullptr) { + } + if (kvec_d != nullptr) + { delete[] kvec_d; -} + } } }; @@ -58,10 +60,16 @@ TEST_F(ReadWfcPwTest, ReadWfcPw) const int ik = 0; const int ik_tot = 0; - ModuleIO::read_wfc_pw(filename, wfcpw, - GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, - PARAM.inp.nbands, PARAM.globalv.npol, - ik, ik_tot, nkstot, wfcatom); + ModuleIO::read_wfc_pw(filename, + wfcpw, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + PARAM.inp.nbands, + PARAM.globalv.npol, + ik, + ik_tot, + nkstot, + wfcatom); if (GlobalV::NPROC_IN_POOL == 1) { @@ -127,47 +135,65 @@ TEST_F(ReadWfcPwTest, NotFoundFile) ModuleBase::ComplexMatrix wfcatom(PARAM.input.nbands, wfcpw->npwk[0]); - if(GlobalV::RANK_IN_POOL == 0) - { - const int ik=0; - const int ik_tot=0; - - // dat file - std::string filename = "notfound.dat"; - testing::internal::CaptureStdout(); - EXPECT_EXIT( - ModuleIO::read_wfc_pw(filename, wfcpw, - GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, - PARAM.inp.nbands, PARAM.globalv.npol, - ik, ik_tot, nkstot, wfcatom), - ::testing::ExitedWithCode(1), ""); - std::string output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output,testing::HasSubstr("Can't open file notfound.dat")); - - // txt file - filename = "notfound.txt"; - testing::internal::CaptureStdout(); - EXPECT_EXIT( - ModuleIO::read_wfc_pw(filename, wfcpw, - GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, - PARAM.inp.nbands, PARAM.globalv.npol, - ik, ik_tot, nkstot, wfcatom), - ::testing::ExitedWithCode(1), ""); - output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output,testing::HasSubstr("Can't open file notfound.txt")); - - // other file - filename = "notfound"; - testing::internal::CaptureStdout(); - EXPECT_EXIT( - ModuleIO::read_wfc_pw(filename, wfcpw, - GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, - PARAM.inp.nbands, PARAM.globalv.npol, - ik, ik_tot, nkstot, wfcatom), - ::testing::ExitedWithCode(1), ""); - output = testing::internal::GetCapturedStdout(); - EXPECT_THAT(output,testing::HasSubstr("Unknown file type")); - } + if (GlobalV::RANK_IN_POOL == 0) + { + const int ik = 0; + const int ik_tot = 0; + + // dat file + std::string filename = "notfound.dat"; + testing::internal::CaptureStdout(); + EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, + wfcpw, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + PARAM.inp.nbands, + PARAM.globalv.npol, + ik, + ik_tot, + nkstot, + wfcatom), + ::testing::ExitedWithCode(1), + ""); + std::string output = testing::internal::GetCapturedStdout(); + EXPECT_THAT(output, testing::HasSubstr("Can't open file notfound.dat")); + + // txt file + filename = "notfound.txt"; + testing::internal::CaptureStdout(); + EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, + wfcpw, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + PARAM.inp.nbands, + PARAM.globalv.npol, + ik, + ik_tot, + nkstot, + wfcatom), + ::testing::ExitedWithCode(1), + ""); + output = testing::internal::GetCapturedStdout(); + EXPECT_THAT(output, testing::HasSubstr("Can't open file notfound.txt")); + + // other file + filename = "notfound"; + testing::internal::CaptureStdout(); + EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, + wfcpw, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + PARAM.inp.nbands, + PARAM.globalv.npol, + ik, + ik_tot, + nkstot, + wfcatom), + ::testing::ExitedWithCode(1), + ""); + output = testing::internal::GetCapturedStdout(); + EXPECT_THAT(output, testing::HasSubstr("Unknown file type")); + } } // Test the read_wfc_pw function when nbands is inconsistent @@ -190,22 +216,27 @@ TEST_F(ReadWfcPwTest, InconsistentBands) ModuleBase::ComplexMatrix wfcatom(PARAM.input.nbands, nbasis); testing::internal::CaptureStdout(); - const int ik = 0; - const int ik_tot = 0; - EXPECT_EXIT( - ModuleIO::read_wfc_pw(filename, wfcpw, - GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, - PARAM.inp.nbands, PARAM.globalv.npol, - ik, ik_tot, nkstot, wfcatom), - ::testing::ExitedWithCode(1), ""); + const int ik = 0; + const int ik_tot = 0; + EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, + wfcpw, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + PARAM.inp.nbands, + PARAM.globalv.npol, + ik, + ik_tot, + nkstot, + wfcatom), + ::testing::ExitedWithCode(1), + ""); std::string output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("nbands_in = 8")); EXPECT_THAT(output, testing::HasSubstr("nbands = 4")); - EXPECT_THAT( - output, - testing::HasSubstr( - "ikstot_in != ikstot || nkstot_in != nkstot || npwtot_in != npwtot || nbands_in != nbands")); + EXPECT_THAT(output, + testing::HasSubstr( + "ikstot_in != ikstot || nkstot_in != nkstot || npwtot_in != npwtot || nbands_in != nbands")); } } @@ -231,14 +262,20 @@ TEST_F(ReadWfcPwTest, InconsistentKvec) ModuleBase::ComplexMatrix wfcatom(PARAM.input.nbands, nbasis); testing::internal::CaptureStdout(); - const int ik=0; - const int ik_tot=0; - EXPECT_EXIT( - ModuleIO::read_wfc_pw(filename, wfcpw, - GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, - PARAM.inp.nbands, PARAM.globalv.npol, - ik, ik_tot, nkstot, wfcatom), - ::testing::ExitedWithCode(1), ""); + const int ik = 0; + const int ik_tot = 0; + EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, + wfcpw, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + PARAM.inp.nbands, + PARAM.globalv.npol, + ik, + ik_tot, + nkstot, + wfcatom), + ::testing::ExitedWithCode(1), + ""); std::string output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("kvec_in[0] = 0 0 0")); @@ -268,15 +305,21 @@ TEST_F(ReadWfcPwTest, InconsistentLat0) const int nbasis = wfcpw->npwk[0]; ModuleBase::ComplexMatrix wfcatom(PARAM.input.nbands, nbasis); testing::internal::CaptureStdout(); - - const int ik=0; - const int ik_tot=0; - EXPECT_EXIT( - ModuleIO::read_wfc_pw(filename, wfcpw, - GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, - PARAM.inp.nbands, PARAM.globalv.npol, - ik, ik_tot, nkstot, wfcatom), - ::testing::ExitedWithCode(1), ""); + + const int ik = 0; + const int ik_tot = 0; + EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, + wfcpw, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + PARAM.inp.nbands, + PARAM.globalv.npol, + ik, + ik_tot, + nkstot, + wfcatom), + ::testing::ExitedWithCode(1), + ""); std::string output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("lat0_in = 5.3233")); @@ -306,14 +349,20 @@ TEST_F(ReadWfcPwTest, InconsistentG) ModuleBase::ComplexMatrix wfcatom(PARAM.input.nbands, nbasis); testing::internal::CaptureStdout(); - const int ik=0; - const int ik_tot=0; - EXPECT_EXIT( - ModuleIO::read_wfc_pw(filename, wfcpw, - GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, - PARAM.inp.nbands, PARAM.globalv.npol, - ik, ik_tot, nkstot, wfcatom), - ::testing::ExitedWithCode(1), ""); + const int ik = 0; + const int ik_tot = 0; + EXPECT_EXIT(ModuleIO::read_wfc_pw(filename, + wfcpw, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + PARAM.inp.nbands, + PARAM.globalv.npol, + ik, + ik_tot, + nkstot, + wfcatom), + ::testing::ExitedWithCode(1), + ""); std::string output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("G_in[0] = -1 -1 1\nG_in[1] = 1 1 1\nG_in[2] = -1 1 -1\n")); diff --git a/source/module_io/test/single_R_io_test.cpp b/source/module_io/test/single_R_io_test.cpp index 7b142fa25f..9ba9728eca 100644 --- a/source/module_io/test/single_R_io_test.cpp +++ b/source/module_io/test/single_R_io_test.cpp @@ -1,11 +1,11 @@ -#include "gtest/gtest.h" #include "gmock/gmock.h" +#include "gtest/gtest.h" #define private public #include "module_parameter/parameter.h" #undef private -#include "module_io/single_R_io.h" -#include "module_base/global_variable.h" #include "module_basis/module_ao/parallel_orbitals.h" +#include "module_io/single_R_io.h" +#include "source_base/global_variable.h" /************************************************ * unit test of output_single_R ***********************************************/ @@ -29,14 +29,14 @@ void Parallel_2D::set_serial(const int M_A, const int N_A) this->global2local_row_[1] = 1; this->global2local_row_[2] = -1; this->global2local_row_[3] = 2; - this->global2local_row_[4] = -1; //Some rows have global2local_row_ < 0 + this->global2local_row_[4] = -1; // Some rows have global2local_row_ < 0 } TEST(ModuleIOTest, OutputSingleR) { // Create temporary output file std::stringstream ofs_filename; - GlobalV::DRANK=0; + GlobalV::DRANK = 0; ofs_filename << "test_output_single_R_" << GlobalV::DRANK << ".dat"; std::ofstream ofs(ofs_filename.str()); @@ -46,11 +46,8 @@ TEST(ModuleIOTest, OutputSingleR) Parallel_Orbitals pv; PARAM.sys.nlocal = 5; pv.set_serial(PARAM.sys.nlocal, PARAM.sys.nlocal); - std::map> XR = { - {0, {{1, 0.5}, {3, 0.3}}}, - {1, {{0, 0.2}, {2, 0.4}}}, - {3, {{1, 0.1}, {4, 0.7}}} - }; + std::map> XR + = {{0, {{1, 0.5}, {3, 0.3}}}, {1, {{0, 0.2}, {2, 0.4}}}, {3, {{1, 0.1}, {4, 0.7}}}}; // Call function under test ModuleIO::output_single_R(ofs, XR, sparse_threshold, binary, pv); @@ -59,20 +56,22 @@ TEST(ModuleIOTest, OutputSingleR) ofs.close(); std::ifstream ifs; ifs.open("test_output_single_R_0.dat"); - std::string str((std::istreambuf_iterator(ifs)),std::istreambuf_iterator()); - EXPECT_THAT(str, testing::HasSubstr("5.00000000e-01 3.00000000e-01 2.00000000e-01 4.00000000e-01 1.00000000e-01 7.00000000e-01")); + std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); + EXPECT_THAT(str, + testing::HasSubstr( + "5.00000000e-01 3.00000000e-01 2.00000000e-01 4.00000000e-01 1.00000000e-01 7.00000000e-01")); EXPECT_THAT(str, testing::HasSubstr("1 3 0 2 1 4")); EXPECT_THAT(str, testing::HasSubstr("0 2 4 4 6 6")); std::remove("test_output_single_R_0.dat"); } -int main(int argc, char **argv) +int main(int argc, char** argv) { #ifdef __MPI MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD,&GlobalV::NPROC); - MPI_Comm_rank(MPI_COMM_WORLD,&GlobalV::MY_RANK); + MPI_Comm_size(MPI_COMM_WORLD, &GlobalV::NPROC); + MPI_Comm_rank(MPI_COMM_WORLD, &GlobalV::MY_RANK); #endif testing::InitGoogleTest(&argc, argv); diff --git a/source/module_io/test/write_istate_info_test.cpp b/source/module_io/test/write_istate_info_test.cpp index e17fb2c72e..c2ac1e5648 100644 --- a/source/module_io/test/write_istate_info_test.cpp +++ b/source/module_io/test/write_istate_info_test.cpp @@ -1,4 +1,4 @@ -#include "module_base/global_variable.h" +#include "source_base/global_variable.h" #define private public #include "module_parameter/parameter.h" @@ -7,9 +7,9 @@ #include "gtest/gtest.h" #include #ifdef __MPI -#include "module_base/parallel_global.h" #include "module_cell/parallel_kpoints.h" #include "mpi.h" +#include "source_base/parallel_global.h" #endif #include "../write_istate_info.h" #include "for_testing_klist.h" @@ -43,7 +43,7 @@ class IstateInfoTest : public ::testing::Test TEST_F(IstateInfoTest, OutIstateInfoS1) { - // Global variables + // Global variables GlobalV::KPAR = 1; PARAM.input.nbands = 4; PARAM.sys.nbands_l = 4; @@ -65,17 +65,21 @@ TEST_F(IstateInfoTest, OutIstateInfoS1) const int nkstot_init = 10; kv->set_nkstot(nkstot_init); int nkstot = kv->get_nkstot(); - kv->para_k.kinfo(nkstot, GlobalV::KPAR, GlobalV::MY_POOL, GlobalV::RANK_IN_POOL, - GlobalV::NPROC_IN_POOL, PARAM.input.nspin); + kv->para_k.kinfo(nkstot, + GlobalV::KPAR, + GlobalV::MY_POOL, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + PARAM.input.nspin); kv->set_nks(kv->para_k.nks_pool[GlobalV::MY_POOL]); // The number of plane waves for each k point kv->ngk.resize(nkstot); kv->ik2iktot.resize(nkstot); - for(int i=0; ingk[i]=299; - kv->ik2iktot[i]=i; + kv->ngk[i] = 299; + kv->ik2iktot[i] = i; } // Initialize the number of bands @@ -84,7 +88,7 @@ TEST_F(IstateInfoTest, OutIstateInfoS1) // fill the eigenvalues ekb.fill_out(0.15); - + // fill the weights wg.fill_out(0.0); @@ -96,7 +100,7 @@ TEST_F(IstateInfoTest, OutIstateInfoS1) kd.set(0.01 * i, 0.01 * i, 0.01 * i); ++i; } - + // write eigenvalues and occupations ModuleIO::write_istate_info(ekb, wg, *kv); @@ -105,7 +109,8 @@ TEST_F(IstateInfoTest, OutIstateInfoS1) ifs.open("eig.txt"); std::string str((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); EXPECT_THAT(str, testing::HasSubstr("Electronic state energy (eV) and occupations")); - EXPECT_THAT(str, testing::HasSubstr("spin=1 k-point=1/10 Cartesian=0.0000000 0.0000000 0.0000000 (299 plane wave)")); + EXPECT_THAT(str, + testing::HasSubstr("spin=1 k-point=1/10 Cartesian=0.0000000 0.0000000 0.0000000 (299 plane wave)")); EXPECT_THAT(str, testing::HasSubstr("1 2.040854700000000 0.000000000000000")); ifs.close(); remove("eig.txt"); diff --git a/source/module_io/test/write_wfc_nao_test.cpp b/source/module_io/test/write_wfc_nao_test.cpp index 844b23883f..1848267887 100644 --- a/source/module_io/test/write_wfc_nao_test.cpp +++ b/source/module_io/test/write_wfc_nao_test.cpp @@ -1,12 +1,13 @@ #include "../write_wfc_nao.h" + #include "../filename.h" #define private public #include "module_parameter/parameter.h" #undef private #include "../binstream.h" -#include "module_base/global_variable.h" -#include "module_base/scalapack_connector.h" +#include "source_base/global_variable.h" +#include "source_base/scalapack_connector.h" #include "gmock/gmock.h" #include "gtest/gtest.h" @@ -30,12 +31,20 @@ TEST(GenWfcLcaoFnameTest, OutType1GammaOnlyOutAppFlagTrue) // if out_app_flag = true, then the 'g' label will not show up const int istep = 0; - std::string result = ModuleIO::filename_output( - directory, property, basis, ik, ik2iktot, nspin, - nkstot, out_type, out_app_flag, gamma_only, istep); + std::string result = ModuleIO::filename_output(directory, + property, + basis, + ik, + ik2iktot, + nspin, + nkstot, + out_type, + out_app_flag, + gamma_only, + istep); // output .txt file when out_type=1 - std::string expected_output = "wfs1_nao.txt"; + std::string expected_output = "wfs1_nao.txt"; EXPECT_EQ(result, expected_output); } @@ -46,7 +55,7 @@ TEST(GenWfcLcaoFnameTest, OutType2GammaOnlyOutAppFlagFalse) const std::string property = "wf"; const std::string basis = "nao"; const int ik = 1; - const std::vector ik2iktot = {0,1}; + const std::vector ik2iktot = {0, 1}; const int nspin = 2; const int nkstot = 2; const int out_type = 2; @@ -55,9 +64,17 @@ TEST(GenWfcLcaoFnameTest, OutType2GammaOnlyOutAppFlagFalse) // if out_app_flag = false, then the 'g' label appears const int istep = 2; - std::string result = ModuleIO::filename_output( - directory, property, basis, ik, ik2iktot, nspin, - nkstot, out_type, out_app_flag, gamma_only, istep); + std::string result = ModuleIO::filename_output(directory, + property, + basis, + ik, + ik2iktot, + nspin, + nkstot, + out_type, + out_app_flag, + gamma_only, + istep); // output .dat file when out_type=2 std::string expected_output = "wfs2g3_nao.dat"; @@ -70,7 +87,7 @@ TEST(GenWfcLcaoFnameTest, OutTypeInvalid) const std::string property = "wf"; const std::string basis = "nao"; const int ik = 2; - const std::vector ik2iktot = {0,1,2}; + const std::vector ik2iktot = {0, 1, 2}; const int nspin = 1; const int nkstot = 3; const int out_type = 3; @@ -81,9 +98,17 @@ TEST(GenWfcLcaoFnameTest, OutTypeInvalid) // catch the screen output testing::internal::CaptureStdout(); - std::string result = ModuleIO::filename_output( - directory, property, basis, ik, ik2iktot, nspin, - nkstot, out_type, out_app_flag, gamma_only, istep); + std::string result = ModuleIO::filename_output(directory, + property, + basis, + ik, + ik2iktot, + nspin, + nkstot, + out_type, + out_app_flag, + gamma_only, + istep); std::string output = testing::internal::GetCapturedStdout(); @@ -97,8 +122,8 @@ void read_bin(const std::string& name, std::vector& data) { std::ifstream ifs(name, std::ios::binary); ifs.seekg(0, std::ios::beg); - int nbands=0; - int nbasis=0; + int nbands = 0; + int nbasis = 0; if (std::is_same>::value) { ifs.ignore(sizeof(int)); @@ -139,7 +164,7 @@ class WriteWfcLcaoTest : public testing::Test int nbasis_local = 0; // mohan add 2025-05-11 - std::vector ik2iktot = {0,1}; + std::vector ik2iktot = {0, 1}; int nkstot = 2; bool out_app_flag = true; @@ -217,17 +242,24 @@ TEST_F(WriteWfcLcaoTest, WriteWfcLcao) psi::Psi my_psi(psi_local_double.data(), nk, nbands_local, nbasis_local, nbasis_local, true); - ModuleIO::write_wfc_nao(out_type, out_app_flag, my_psi, ekb, wg, kvec_c, - ik2iktot, nkstot, pv, nspin, istep); + ModuleIO::write_wfc_nao(out_type, out_app_flag, my_psi, ekb, wg, kvec_c, ik2iktot, nkstot, pv, nspin, istep); // check the output file if (GlobalV::MY_RANK == 0) { for (int ik = 0; ik < nk; ik++) - { - std::string fname = ModuleIO::filename_output( - directory, property, basis, ik, ik2iktot, nspin, - nkstot, out_type, out_app_flag, gamma_only, istep); + { + std::string fname = ModuleIO::filename_output(directory, + property, + basis, + ik, + ik2iktot, + nspin, + nkstot, + out_type, + out_app_flag, + gamma_only, + istep); std::ifstream file1(fname); EXPECT_TRUE(file1.good()); @@ -260,17 +292,24 @@ TEST_F(WriteWfcLcaoTest, WriteWfcLcaoComplex) psi::Psi> my_psi(psi_local_complex.data(), nk, nbands_local, nbasis_local, true); - ModuleIO::write_wfc_nao(out_type, out_app_flag, my_psi, ekb, wg, kvec_c, - ik2iktot, nkstot, pv, nspin, istep); + ModuleIO::write_wfc_nao(out_type, out_app_flag, my_psi, ekb, wg, kvec_c, ik2iktot, nkstot, pv, nspin, istep); // check the output file if (GlobalV::MY_RANK == 0) { for (int ik = 0; ik < nk; ik++) { - std::string fname = ModuleIO::filename_output( - directory, property, basis, ik, ik2iktot, nspin, - nkstot, out_type, out_app_flag, gamma_only, istep); + std::string fname = ModuleIO::filename_output(directory, + property, + basis, + ik, + ik2iktot, + nspin, + nkstot, + out_type, + out_app_flag, + gamma_only, + istep); std::ifstream file1(fname); EXPECT_TRUE(file1.good()); diff --git a/source/module_io/test_serial/CMakeLists.txt b/source/module_io/test_serial/CMakeLists.txt index 807a32c8f0..be54c7bf82 100644 --- a/source/module_io/test_serial/CMakeLists.txt +++ b/source/module_io/test_serial/CMakeLists.txt @@ -28,8 +28,8 @@ AddTest( TARGET MODULE_IO_read_input_serial LIBS parameter ${math_libs} io_input_serial SOURCES read_input_test.cpp - ../../module_base/test/tool_quit_no_exit.cpp - ../../module_base/module_device/device.cpp + ../../source_base/test/tool_quit_no_exit.cpp + ../../source_base/module_device/device.cpp ) AddTest( diff --git a/source/module_io/test_serial/io_system_variable_test.cpp b/source/module_io/test_serial/io_system_variable_test.cpp index 499399a69d..9756dca82a 100644 --- a/source/module_io/test_serial/io_system_variable_test.cpp +++ b/source/module_io/test_serial/io_system_variable_test.cpp @@ -1,11 +1,11 @@ +#include "source_base/tool_quit.h" + +#include "gmock/gmock.h" +#include "gtest/gtest.h" #include #include #include #include - -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "module_base/tool_quit.h" /************************************************ * unit test of read_input_test_item.cpp ***********************************************/ @@ -42,7 +42,7 @@ TEST_F(InputTest, Item_test) { readinput.check_ntype_flag = false; - { + { param.input.suffix = "test"; readinput.set_global_dir(param.inp, param.sys); @@ -51,14 +51,14 @@ TEST_F(InputTest, Item_test) EXPECT_EQ(param.sys.global_matrix_dir, "OUT.test/matrix/"); readinput.set_globalv(param.inp, param.sys); - + param.input.basis_type = "lcao"; param.input.gamma_only = true; param.input.esolver_type = "tddft"; param.input.nspin = 2; readinput.set_globalv(param.inp, param.sys); EXPECT_EQ(param.sys.gamma_only_local, 0); - + param.input.deepks_scf = true; param.input.deepks_out_labels = true; readinput.set_globalv(param.inp, param.sys); @@ -78,7 +78,5 @@ TEST_F(InputTest, Item_test) EXPECT_EQ(param.sys.domag, 0); EXPECT_EQ(param.sys.domag_z, 0); EXPECT_EQ(param.sys.npol, 1); - - } } \ No newline at end of file diff --git a/source/module_io/test_serial/prepare_unitcell.h b/source/module_io/test_serial/prepare_unitcell.h index 25005fcc50..f2076bf189 100644 --- a/source/module_io/test_serial/prepare_unitcell.h +++ b/source/module_io/test_serial/prepare_unitcell.h @@ -1,327 +1,304 @@ #ifndef PREPARE_UNITCELL_H #define PREPARE_UNITCELL_H -#include -#include -#include "module_base/mathzone.h" +#include "source_base/mathzone.h" + +#include +#include class UcellTestPrepare { -public: - UcellTestPrepare()=default; - UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in); - UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in, - std::valarray mbl_in, - std::valarray velocity_in); - UcellTestPrepare(const UcellTestPrepare &utp); + public: + UcellTestPrepare() = default; + UcellTestPrepare(std::string latname_in, + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in); + UcellTestPrepare(std::string latname_in, + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in, + std::valarray mbl_in, + std::valarray velocity_in); + UcellTestPrepare(const UcellTestPrepare& utp); + + std::string latname; + int lmaxmax; + bool init_vel; + bool selective_dynamics; + bool relax_new; + std::string fixed_axes; + double lat0; + std::valarray latvec; + std::vector elements; + std::vector pp_files; + std::vector pp_types; + std::vector orb_files; + std::valarray natom; + std::vector atomic_mass; + std::string coor_type; + std::valarray coordinates; + std::valarray mbl; + std::valarray velocity; + // ntype + int ntype; + int atomic_index; - std::string latname; - int lmaxmax; - bool init_vel; - bool selective_dynamics; - bool relax_new; - std::string fixed_axes; - double lat0; - std::valarray latvec; - std::vector elements; - std::vector pp_files; - std::vector pp_types; - std::vector orb_files; - std::valarray natom; - std::vector atomic_mass; - std::string coor_type; - std::valarray coordinates; - std::valarray mbl; - std::valarray velocity; - // ntype - int ntype; - int atomic_index; + UnitCell* SetUcellInfo() + { + // basic info + this->ntype = this->elements.size(); + UnitCell* ucell = new UnitCell; + ucell->setup(this->latname, this->ntype, this->lmaxmax, this->init_vel, this->fixed_axes); + delete[] ucell->magnet.start_mag; // mag set here + ucell->atom_label.resize(ucell->ntype); + ucell->atom_mass.resize(ucell->ntype); + ucell->pseudo_fn.resize(ucell->ntype); + ucell->pseudo_type.resize(ucell->ntype); - UnitCell* SetUcellInfo() - { - //basic info - this->ntype = this->elements.size(); - UnitCell* ucell = new UnitCell; - ucell->setup(this->latname, - this->ntype, - this->lmaxmax, - this->init_vel, - this->fixed_axes); - delete[] ucell->magnet.start_mag; //mag set here - ucell->atom_label.resize(ucell->ntype); - ucell->atom_mass.resize(ucell->ntype); - ucell->pseudo_fn.resize(ucell->ntype); - ucell->pseudo_type.resize(ucell->ntype); - - ucell->orbital_fn.resize(ucell->ntype); - ucell->magnet.start_mag = new double[ucell->ntype]; //mag set here - ucell->magnet.ux_[0] = 0.0; // ux_ set here - ucell->magnet.ux_[1] = 0.0; - ucell->magnet.ux_[2] = 0.0; - for(int it=0;itntype;++it) - { - ucell->atom_label[it] = this->elements[it]; - ucell->atom_mass[it] = this->atomic_mass[it]; - ucell->pseudo_fn[it] = this->pp_files[it]; - ucell->pseudo_type[it] = this->pp_types[it]; - ucell->orbital_fn[it] = this->orb_files[it]; - ucell->magnet.start_mag[it] = 0.0; //mag set here - } - //lattice info - ucell->lat0 = this->lat0; - ucell->lat0_angstrom = ucell->lat0 * 0.529177; - ucell->tpiba = ModuleBase::TWO_PI/ucell->lat0; - ucell->tpiba2 = ucell->tpiba * ucell->tpiba; - ucell->latvec.e11 = this->latvec[0]; - ucell->latvec.e12 = this->latvec[1]; - ucell->latvec.e13 = this->latvec[2]; - ucell->latvec.e21 = this->latvec[3]; - ucell->latvec.e22 = this->latvec[4]; - ucell->latvec.e23 = this->latvec[5]; - ucell->latvec.e31 = this->latvec[6]; - ucell->latvec.e32 = this->latvec[7]; - ucell->latvec.e33 = this->latvec[8]; - ucell->a1.x = ucell->latvec.e11; - ucell->a1.y = ucell->latvec.e12; - ucell->a1.z = ucell->latvec.e13; - ucell->a2.x = ucell->latvec.e21; - ucell->a2.y = ucell->latvec.e22; - ucell->a2.z = ucell->latvec.e23; - ucell->a3.x = ucell->latvec.e31; - ucell->a3.y = ucell->latvec.e32; - ucell->a3.z = ucell->latvec.e33; - ucell->GT = ucell->latvec.Inverse(); - ucell->G = ucell->GT.Transpose(); - ucell->GGT = ucell->G*ucell->GT; - ucell->invGGT = ucell->GGT.Inverse(); - ucell->omega = std::abs(ucell->latvec.Det())*(ucell->lat0)*(ucell->lat0)*(ucell->lat0); - //atomic info - ucell->Coordinate = this->coor_type; - ucell->atoms = new Atom[ucell->ntype]; - ucell->set_atom_flag = true; - this->atomic_index = 0; - for(int it=0;itntype;++it) - { - ucell->atoms[it].label = this->elements[it]; - ucell->atoms[it].nw = 0; - ucell->atoms[it].nwl = 2; - ucell->atoms[it].l_nchi.resize(ucell->atoms[it].nwl+1); - for(int L=0; Latoms[it].nwl+1; L++) - { - ucell->atoms[it].l_nchi[L] = 1; - ucell->atoms[it].nw += (2*L + 1) * ucell->atoms[it].l_nchi[L]; - } - ucell->atoms[it].na = this->natom[it]; - //coordinates and related physical quantities - ucell->atoms[it].tau.resize(ucell->atoms[it].na); - ucell->atoms[it].dis.resize(ucell->atoms[it].na); - ucell->atoms[it].taud.resize(ucell->atoms[it].na); - ucell->atoms[it].vel.resize(ucell->atoms[it].na); - ucell->atoms[it].mag.resize(ucell->atoms[it].na); - ucell->atoms[it].angle1.resize(ucell->atoms[it].na); - ucell->atoms[it].angle2.resize(ucell->atoms[it].na); - ucell->atoms[it].m_loc_.resize(ucell->atoms[it].na); - ucell->atoms[it].mbl.resize(ucell->atoms[it].na); - ucell->atoms[it].mass = ucell->atom_mass[it]; // mass set here - for(int ia=0; iaatoms[it].na; ++ia) - { - if (ucell->Coordinate == "Direct") - { - ucell->atoms[it].taud[ia].x = this->coordinates[this->atomic_index*3+0]; - ucell->atoms[it].taud[ia].y = this->coordinates[this->atomic_index*3+1]; - ucell->atoms[it].taud[ia].z = this->coordinates[this->atomic_index*3+2]; - ucell->atoms[it].tau[ia] = ucell->atoms[it].taud[ia]*ucell->latvec; - } - else if (ucell->Coordinate == "Cartesian") - { - ucell->atoms[it].tau[ia].x = this->coordinates[this->atomic_index*3+0]; - ucell->atoms[it].tau[ia].y = this->coordinates[this->atomic_index*3+1]; - ucell->atoms[it].tau[ia].z = this->coordinates[this->atomic_index*3+2]; - ModuleBase::Mathzone::Cartesian_to_Direct( - ucell->atoms[it].tau[ia].x, ucell->atoms[it].tau[ia].y, ucell->atoms[it].tau[ia].z, - ucell->latvec.e11, ucell->latvec.e12, ucell->latvec.e13, - ucell->latvec.e21, ucell->latvec.e22, ucell->latvec.e23, - ucell->latvec.e31, ucell->latvec.e32, ucell->latvec.e33, - ucell->atoms[it].taud[ia].x, ucell->atoms[it].taud[ia].y, ucell->atoms[it].taud[ia].z); - } + ucell->orbital_fn.resize(ucell->ntype); + ucell->magnet.start_mag = new double[ucell->ntype]; // mag set here + ucell->magnet.ux_[0] = 0.0; // ux_ set here + ucell->magnet.ux_[1] = 0.0; + ucell->magnet.ux_[2] = 0.0; + for (int it = 0; it < ucell->ntype; ++it) + { + ucell->atom_label[it] = this->elements[it]; + ucell->atom_mass[it] = this->atomic_mass[it]; + ucell->pseudo_fn[it] = this->pp_files[it]; + ucell->pseudo_type[it] = this->pp_types[it]; + ucell->orbital_fn[it] = this->orb_files[it]; + ucell->magnet.start_mag[it] = 0.0; // mag set here + } + // lattice info + ucell->lat0 = this->lat0; + ucell->lat0_angstrom = ucell->lat0 * 0.529177; + ucell->tpiba = ModuleBase::TWO_PI / ucell->lat0; + ucell->tpiba2 = ucell->tpiba * ucell->tpiba; + ucell->latvec.e11 = this->latvec[0]; + ucell->latvec.e12 = this->latvec[1]; + ucell->latvec.e13 = this->latvec[2]; + ucell->latvec.e21 = this->latvec[3]; + ucell->latvec.e22 = this->latvec[4]; + ucell->latvec.e23 = this->latvec[5]; + ucell->latvec.e31 = this->latvec[6]; + ucell->latvec.e32 = this->latvec[7]; + ucell->latvec.e33 = this->latvec[8]; + ucell->a1.x = ucell->latvec.e11; + ucell->a1.y = ucell->latvec.e12; + ucell->a1.z = ucell->latvec.e13; + ucell->a2.x = ucell->latvec.e21; + ucell->a2.y = ucell->latvec.e22; + ucell->a2.z = ucell->latvec.e23; + ucell->a3.x = ucell->latvec.e31; + ucell->a3.y = ucell->latvec.e32; + ucell->a3.z = ucell->latvec.e33; + ucell->GT = ucell->latvec.Inverse(); + ucell->G = ucell->GT.Transpose(); + ucell->GGT = ucell->G * ucell->GT; + ucell->invGGT = ucell->GGT.Inverse(); + ucell->omega = std::abs(ucell->latvec.Det()) * (ucell->lat0) * (ucell->lat0) * (ucell->lat0); + // atomic info + ucell->Coordinate = this->coor_type; + ucell->atoms = new Atom[ucell->ntype]; + ucell->set_atom_flag = true; + this->atomic_index = 0; + for (int it = 0; it < ucell->ntype; ++it) + { + ucell->atoms[it].label = this->elements[it]; + ucell->atoms[it].nw = 0; + ucell->atoms[it].nwl = 2; + ucell->atoms[it].l_nchi.resize(ucell->atoms[it].nwl + 1); + for (int L = 0; L < ucell->atoms[it].nwl + 1; L++) + { + ucell->atoms[it].l_nchi[L] = 1; + ucell->atoms[it].nw += (2 * L + 1) * ucell->atoms[it].l_nchi[L]; + } + ucell->atoms[it].na = this->natom[it]; + // coordinates and related physical quantities + ucell->atoms[it].tau.resize(ucell->atoms[it].na); + ucell->atoms[it].dis.resize(ucell->atoms[it].na); + ucell->atoms[it].taud.resize(ucell->atoms[it].na); + ucell->atoms[it].vel.resize(ucell->atoms[it].na); + ucell->atoms[it].mag.resize(ucell->atoms[it].na); + ucell->atoms[it].angle1.resize(ucell->atoms[it].na); + ucell->atoms[it].angle2.resize(ucell->atoms[it].na); + ucell->atoms[it].m_loc_.resize(ucell->atoms[it].na); + ucell->atoms[it].mbl.resize(ucell->atoms[it].na); + ucell->atoms[it].mass = ucell->atom_mass[it]; // mass set here + for (int ia = 0; ia < ucell->atoms[it].na; ++ia) + { + if (ucell->Coordinate == "Direct") + { + ucell->atoms[it].taud[ia].x = this->coordinates[this->atomic_index * 3 + 0]; + ucell->atoms[it].taud[ia].y = this->coordinates[this->atomic_index * 3 + 1]; + ucell->atoms[it].taud[ia].z = this->coordinates[this->atomic_index * 3 + 2]; + ucell->atoms[it].tau[ia] = ucell->atoms[it].taud[ia] * ucell->latvec; + } + else if (ucell->Coordinate == "Cartesian") + { + ucell->atoms[it].tau[ia].x = this->coordinates[this->atomic_index * 3 + 0]; + ucell->atoms[it].tau[ia].y = this->coordinates[this->atomic_index * 3 + 1]; + ucell->atoms[it].tau[ia].z = this->coordinates[this->atomic_index * 3 + 2]; + ModuleBase::Mathzone::Cartesian_to_Direct(ucell->atoms[it].tau[ia].x, + ucell->atoms[it].tau[ia].y, + ucell->atoms[it].tau[ia].z, + ucell->latvec.e11, + ucell->latvec.e12, + ucell->latvec.e13, + ucell->latvec.e21, + ucell->latvec.e22, + ucell->latvec.e23, + ucell->latvec.e31, + ucell->latvec.e32, + ucell->latvec.e33, + ucell->atoms[it].taud[ia].x, + ucell->atoms[it].taud[ia].y, + ucell->atoms[it].taud[ia].z); + } ucell->atoms[it].dis[ia].set(0, 0, 0); - if(this->init_vel) - { - ucell->atoms[it].vel[ia].x = this->velocity[this->atomic_index*3+0]; - ucell->atoms[it].vel[ia].y = this->velocity[this->atomic_index*3+1]; - ucell->atoms[it].vel[ia].z = this->velocity[this->atomic_index*3+2]; - } - else - { - ucell->atoms[it].vel[ia].set(0,0,0); - } - ucell->atoms[it].m_loc_[ia].set(0,0,0); - ucell->atoms[it].angle1[ia] = 0; - ucell->atoms[it].angle2[ia] = 0; - if(this->selective_dynamics) - { - ucell->atoms[it].mbl[ia].x = this->mbl[this->atomic_index*3+0]; - ucell->atoms[it].mbl[ia].y = this->mbl[this->atomic_index*3+1]; - ucell->atoms[it].mbl[ia].z = this->mbl[this->atomic_index*3+2]; - } - else - { - ucell->atoms[it].mbl[ia] = {1,1,1}; - } - ++(this->atomic_index); - } - } - ucell->nat = this->natom.sum(); - return ucell; - } + if (this->init_vel) + { + ucell->atoms[it].vel[ia].x = this->velocity[this->atomic_index * 3 + 0]; + ucell->atoms[it].vel[ia].y = this->velocity[this->atomic_index * 3 + 1]; + ucell->atoms[it].vel[ia].z = this->velocity[this->atomic_index * 3 + 2]; + } + else + { + ucell->atoms[it].vel[ia].set(0, 0, 0); + } + ucell->atoms[it].m_loc_[ia].set(0, 0, 0); + ucell->atoms[it].angle1[ia] = 0; + ucell->atoms[it].angle2[ia] = 0; + if (this->selective_dynamics) + { + ucell->atoms[it].mbl[ia].x = this->mbl[this->atomic_index * 3 + 0]; + ucell->atoms[it].mbl[ia].y = this->mbl[this->atomic_index * 3 + 1]; + ucell->atoms[it].mbl[ia].z = this->mbl[this->atomic_index * 3 + 2]; + } + else + { + ucell->atoms[it].mbl[ia] = {1, 1, 1}; + } + ++(this->atomic_index); + } + } + ucell->nat = this->natom.sum(); + return ucell; + } }; UcellTestPrepare::UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in): - latname(latname_in), - lmaxmax(lmaxmax_in), - init_vel(init_vel_in), - selective_dynamics(selective_dynamics_in), - relax_new(relax_new_in), - fixed_axes(fixed_axes_in), - lat0(lat0_in), - latvec(latvec_in), - elements(elements_in), - pp_files(pp_files_in), - pp_types(pp_types_in), - orb_files(orb_files_in), - natom(natom_in), - atomic_mass(atomic_mass_in), - coor_type(coor_type_in), - coordinates(coordinates_in) + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in) + : latname(latname_in), lmaxmax(lmaxmax_in), init_vel(init_vel_in), selective_dynamics(selective_dynamics_in), + relax_new(relax_new_in), fixed_axes(fixed_axes_in), lat0(lat0_in), latvec(latvec_in), elements(elements_in), + pp_files(pp_files_in), pp_types(pp_types_in), orb_files(orb_files_in), natom(natom_in), + atomic_mass(atomic_mass_in), coor_type(coor_type_in), coordinates(coordinates_in) { - mbl = std::valarray(0.0, coordinates_in.size()); - velocity = std::valarray(0.0, coordinates_in.size()); + mbl = std::valarray(0.0, coordinates_in.size()); + velocity = std::valarray(0.0, coordinates_in.size()); } UcellTestPrepare::UcellTestPrepare(std::string latname_in, - int lmaxmax_in, - bool init_vel_in, - bool selective_dynamics_in, - bool relax_new_in, - std::string fixed_axes_in, - double lat0_in, - std::valarray latvec_in, - std::vector elements_in, - std::vector pp_files_in, - std::vector pp_types_in, - std::vector orb_files_in, - std::valarray natom_in, - std::vector atomic_mass_in, - std::string coor_type_in, - std::valarray coordinates_in, - std::valarray mbl_in, - std::valarray velocity_in): - latname(latname_in), - lmaxmax(lmaxmax_in), - init_vel(init_vel_in), - selective_dynamics(selective_dynamics_in), - relax_new(relax_new_in), - fixed_axes(fixed_axes_in), - lat0(lat0_in), - latvec(latvec_in), - elements(elements_in), - pp_files(pp_files_in), - pp_types(pp_types_in), - orb_files(orb_files_in), - natom(natom_in), - atomic_mass(atomic_mass_in), - coor_type(coor_type_in), - coordinates(coordinates_in), - mbl(mbl_in), - velocity(velocity_in) // velocity assume the existence of mbl in print_stru_file() -{} - -UcellTestPrepare::UcellTestPrepare(const UcellTestPrepare &utp): - latname(utp.latname), - lmaxmax(utp.lmaxmax), - init_vel(utp.init_vel), - selective_dynamics(utp.selective_dynamics), - relax_new(utp.relax_new), - fixed_axes(utp.fixed_axes), - lat0(utp.lat0), - latvec(utp.latvec), - elements(utp.elements), - pp_files(utp.pp_files), - pp_types(utp.pp_types), - orb_files(utp.orb_files), - natom(utp.natom), - atomic_mass(utp.atomic_mass), - coor_type(utp.coor_type), - coordinates(utp.coordinates), - mbl(utp.mbl), - velocity(utp.velocity) // velocity assume the existence of mbl in print_stru_file() -{} + int lmaxmax_in, + bool init_vel_in, + bool selective_dynamics_in, + bool relax_new_in, + std::string fixed_axes_in, + double lat0_in, + std::valarray latvec_in, + std::vector elements_in, + std::vector pp_files_in, + std::vector pp_types_in, + std::vector orb_files_in, + std::valarray natom_in, + std::vector atomic_mass_in, + std::string coor_type_in, + std::valarray coordinates_in, + std::valarray mbl_in, + std::valarray velocity_in) + : latname(latname_in), lmaxmax(lmaxmax_in), init_vel(init_vel_in), selective_dynamics(selective_dynamics_in), + relax_new(relax_new_in), fixed_axes(fixed_axes_in), lat0(lat0_in), latvec(latvec_in), elements(elements_in), + pp_files(pp_files_in), pp_types(pp_types_in), orb_files(orb_files_in), natom(natom_in), + atomic_mass(atomic_mass_in), coor_type(coor_type_in), coordinates(coordinates_in), mbl(mbl_in), + velocity(velocity_in) // velocity assume the existence of mbl in print_stru_file() +{ +} -std::map UcellTestLib +UcellTestPrepare::UcellTestPrepare(const UcellTestPrepare& utp) + : latname(utp.latname), lmaxmax(utp.lmaxmax), init_vel(utp.init_vel), selective_dynamics(utp.selective_dynamics), + relax_new(utp.relax_new), fixed_axes(utp.fixed_axes), lat0(utp.lat0), latvec(utp.latvec), elements(utp.elements), + pp_files(utp.pp_files), pp_types(utp.pp_types), orb_files(utp.orb_files), natom(utp.natom), + atomic_mass(utp.atomic_mass), coor_type(utp.coor_type), coordinates(utp.coordinates), mbl(utp.mbl), + velocity(utp.velocity) // velocity assume the existence of mbl in print_stru_file() { - {"Si", UcellTestPrepare( - "fcc", //latname - 2, //lmaxmax - true, //init_vel - true, //selective_dyanmics - true, //relax_new - "volume", //fixed_axes - 10.2, //lat0 - {-0.5,0.0,0.5, //latvec - 0.0,0.5,0.5, - -0.5,0.5,0.0}, - {"Si"}, //elements - {"Si.upf"}, //upf file - {"upf201"}, //upf types - {"Si.orb"}, //orb file - {2}, //number of each elements - {28.0}, //atomic mass - "Cartesian", //coordination type - {0.0,0.0,0.0, //atomic coordinates - 0.25,0.25,0.25})} -}; +} + +std::map UcellTestLib{{"Si", + UcellTestPrepare("fcc", // latname + 2, // lmaxmax + true, // init_vel + true, // selective_dyanmics + true, // relax_new + "volume", // fixed_axes + 10.2, // lat0 + {-0.5, + 0.0, + 0.5, // latvec + 0.0, + 0.5, + 0.5, + -0.5, + 0.5, + 0.0}, + {"Si"}, // elements + {"Si.upf"}, // upf file + {"upf201"}, // upf types + {"Si.orb"}, // orb file + {2}, // number of each elements + {28.0}, // atomic mass + "Cartesian", // coordination type + {0.0, + 0.0, + 0.0, // atomic coordinates + 0.25, + 0.25, + 0.25})}}; #endif diff --git a/source/module_io/test_serial/read_input_item_test.cpp b/source/module_io/test_serial/read_input_item_test.cpp index 863b1d0a9d..8469616d3b 100644 --- a/source/module_io/test_serial/read_input_item_test.cpp +++ b/source/module_io/test_serial/read_input_item_test.cpp @@ -1,11 +1,11 @@ +#include "source_base/tool_quit.h" + +#include "gmock/gmock.h" +#include "gtest/gtest.h" #include #include #include #include - -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "module_base/tool_quit.h" /************************************************ * unit test of read_input_test_item.cpp ***********************************************/ @@ -772,7 +772,7 @@ TEST_F(InputTest, Item_test) output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("NOTICE")); } - { //relax_new + { // relax_new auto it = find_label("relax_new", readinput.input_lists); param.input.relax_new = true; param.input.relax_method = "cg"; @@ -911,7 +911,6 @@ TEST_F(InputTest, Item_test) EXPECT_EXIT(it->second.reset_value(it->second, param), ::testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("NOTICE")); - } { // out_mat_r auto it = find_label("out_mat_r", readinput.input_lists); @@ -1384,7 +1383,7 @@ TEST_F(InputTest, Item_test2) { // exx_symmetry_realspace auto it = find_label("exx_symmetry_realspace", readinput.input_lists); param.input.exx_symmetry_realspace = true; - param.input.symmetry="0"; + param.input.symmetry = "0"; it->second.reset_value(it->second, param); EXPECT_EQ(param.input.exx_symmetry_realspace, false); } @@ -1792,7 +1791,7 @@ TEST_F(InputTest, Item_test2) output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("NOTICE")); } - { // nocc + { // nocc auto it = find_label("nocc", readinput.input_lists); param.input.nocc = 5; param.input.nbands = 4; diff --git a/source/module_io/test_serial/read_input_test.cpp b/source/module_io/test_serial/read_input_test.cpp index d3c95d4149..50915593c0 100644 --- a/source/module_io/test_serial/read_input_test.cpp +++ b/source/module_io/test_serial/read_input_test.cpp @@ -1,7 +1,7 @@ #include "module_io/read_input.h" -#include "module_base/tool_quit.h" #include "module_parameter/parameter.h" +#include "source_base/tool_quit.h" #include "gmock/gmock.h" #include "gtest/gtest.h" diff --git a/source/module_io/test_serial/rho_io_test.cpp b/source/module_io/test_serial/rho_io_test.cpp index 339da2ae3f..cce8ad9cc9 100644 --- a/source/module_io/test_serial/rho_io_test.cpp +++ b/source/module_io/test_serial/rho_io_test.cpp @@ -1,11 +1,10 @@ +#include "module_hamilt_pw/hamilt_pwdft/parallel_grid.h" #include "module_io/cube_io.h" +#include "prepare_unitcell.h" +#include "source_base/global_variable.h" #include "gmock/gmock.h" #include "gtest/gtest.h" -#include "module_base/global_variable.h" -#include "module_io/cube_io.h" -#include "prepare_unitcell.h" -#include "module_hamilt_pw/hamilt_pwdft/parallel_grid.h" #ifdef __LCAO InfoNonlocal::InfoNonlocal() @@ -22,7 +21,6 @@ LCAO_Orbitals::~LCAO_Orbitals() } #endif - Magnetism::Magnetism() { this->tot_mag = 0.0; @@ -30,13 +28,13 @@ Magnetism::Magnetism() this->start_mag = nullptr; } - Magnetism::~Magnetism() { delete[] this->start_mag; } -Parallel_Grid::~Parallel_Grid() {} - +Parallel_Grid::~Parallel_Grid() +{ +} #define private public #include "module_parameter/parameter.h" @@ -112,7 +110,7 @@ TEST_F(RhoIOTest, Write) UcellTestPrepare utp = UcellTestLib["Si"]; ucell = utp.SetUcellInfo(); ucell->lat0 = 10.2; - ucell->latvec = { -0.5,0,0.5,0,0.5,0.5,-0.5,0.5,0 }; + ucell->latvec = {-0.5, 0, 0.5, 0, 0.5, 0.5, -0.5, 0.5, 0}; ucell->atoms[0].tau[0] = ModuleBase::Vector3(0.0, 0.0, 0.0); ucell->atoms[0].tau[1] = ModuleBase::Vector3(-0.75, 0.75, 0.75); ucell->atoms[0].ncpp.zv = 4; @@ -149,19 +147,18 @@ TEST_F(RhoIOTest, TrilinearInterpolate) // The old implementation is inconsistent: ifdef MPI, [x][y][z]; else, [z][x][y]. // Now we use [x][y][z] for both MPI and non-MPI, so here we need to chage the index order. - auto permute_xyz2zxy = [&](const double* const xyz, double* const zxy) -> void + auto permute_xyz2zxy = [&](const double* const xyz, double* const zxy) -> void { + for (int ix = 0; ix < nx; ix++) { - for (int ix = 0; ix < nx; ix++) + for (int iy = 0; iy < ny; iy++) { - for (int iy = 0; iy < ny; iy++) + for (int iz = 0; iz < nz; iz++) { - for (int iz = 0; iz < nz; iz++) - { - zxy[(iz * nx + ix) * ny + iy] = xyz[(ix * ny + iy) * nz + iz]; - } + zxy[(iz * nx + ix) * ny + iy] = xyz[(ix * ny + iy) * nz + iz]; } } - }; + } + }; const int nxyz = nx * ny * nz; std::vector data_xyz(nxyz); std::vector data(nxyz); // z > x > y @@ -172,7 +169,6 @@ TEST_F(RhoIOTest, TrilinearInterpolate) EXPECT_DOUBLE_EQ(data[100], 0.018931708073604996); } - struct CubeIOTest : public ::testing::Test { std::vector comment; @@ -193,17 +189,29 @@ struct CubeIOTest : public ::testing::Test const std::string fn = "./support/chgs1.cube"; }; - TEST_F(CubeIOTest, ReadCube) { - ModuleIO::read_cube(fn, comment, natom, origin, - nx_read, ny_read, nz_read, - dx, dy, dz, - atom_type, atom_charge, atom_pos, data_read); + ModuleIO::read_cube(fn, + comment, + natom, + origin, + nx_read, + ny_read, + nz_read, + dx, + dy, + dz, + atom_type, + atom_charge, + atom_pos, + data_read); EXPECT_EQ(comment[0], "STEP: 0 Cubefile created from ABACUS. Inner loop is z, followed by y and x"); EXPECT_EQ(comment[1], "1 (nspin) 0.461002 (fermi energy, in Ry)"); EXPECT_EQ(natom, 2); - for (auto& o : origin) { EXPECT_EQ(o, 0.0); } + for (auto& o: origin) + { + EXPECT_EQ(o, 0.0); + } EXPECT_EQ(nx_read, 36); EXPECT_EQ(ny_read, 36); EXPECT_EQ(nz_read, 36); @@ -213,8 +221,14 @@ TEST_F(CubeIOTest, ReadCube) EXPECT_EQ(atom_type.size(), natom); EXPECT_EQ(atom_charge.size(), natom); EXPECT_EQ(atom_pos.size(), natom); - for (auto& t : atom_type) { EXPECT_EQ(t, 14); } - for (auto& c : atom_charge) { EXPECT_DOUBLE_EQ(c, 4.0); } + for (auto& t: atom_type) + { + EXPECT_EQ(t, 14); + } + for (auto& c: atom_charge) + { + EXPECT_DOUBLE_EQ(c, 4.0); + } EXPECT_DOUBLE_EQ(atom_pos[1][1], 7.65); const int nxyz = nx_read * ny_read * nz_read; EXPECT_EQ(data_read.size(), nxyz); @@ -222,19 +236,38 @@ TEST_F(CubeIOTest, ReadCube) EXPECT_EQ(data_read[nxyz - 1], 1.33581335706e-02); } - TEST_F(CubeIOTest, WriteCube) { - ModuleIO::read_cube(fn, comment, natom, origin, - nx_read, ny_read, nz_read, - dx, dy, dz, - atom_type, atom_charge, atom_pos, data_read); - - ModuleIO::write_cube("test_write.cube", - comment, natom, origin, - nx_read, ny_read, nz_read, - dx, dy, dz, atom_type, - atom_charge, atom_pos, data_read, 11); - - EXPECT_EQ(system("diff -q test_write.cube ./support/chgs1.cube"), 0); + ModuleIO::read_cube(fn, + comment, + natom, + origin, + nx_read, + ny_read, + nz_read, + dx, + dy, + dz, + atom_type, + atom_charge, + atom_pos, + data_read); + + ModuleIO::write_cube("test_write.cube", + comment, + natom, + origin, + nx_read, + ny_read, + nz_read, + dx, + dy, + dz, + atom_type, + atom_charge, + atom_pos, + data_read, + 11); + + EXPECT_EQ(system("diff -q test_write.cube ./support/chgs1.cube"), 0); } diff --git a/source/module_io/to_qo.h b/source/module_io/to_qo.h index ecbcf5b287..c37768ae4e 100644 --- a/source/module_io/to_qo.h +++ b/source/module_io/to_qo.h @@ -1,12 +1,13 @@ #ifndef TOQO_H #define TOQO_H +#include "module_basis/module_nao/two_center_integrator.h" +#include "module_cell/unitcell.h" +#include "source_base/atom_in.h" +#include "source_base/vector3.h" + #include #include -#include "module_cell/unitcell.h" -#include "module_basis/module_nao/two_center_integrator.h" -#include "module_base/atom_in.h" -#include "module_base/vector3.h" /* Quasiatomic Orbital (QO) transformation and analysis @@ -39,211 +40,276 @@ */ class toQO { - public: - // constructor is identical with what INPUT needs to define a toQO task - // how user defines a QO task in INPUT, how it is constructed here, this - // is to ensure the self-containedness of the class, as much as possible - // to avoid introducing variables not from constructor or other under - // control functions. - toQO(const std::string& qo_basis, //< basis of QO, hydrogen or pswfc - const std::vector& strategies, //< strategies for each atom type, more details see manual - const double& qo_thr, //< threshold for QO - const std::vector& screening_coeffs); //< screening coefficients for pseudowavefunction or Slater screening - ~toQO(); + public: + // constructor is identical with what INPUT needs to define a toQO task + // how user defines a QO task in INPUT, how it is constructed here, this + // is to ensure the self-containedness of the class, as much as possible + // to avoid introducing variables not from constructor or other under + // control functions. + toQO(const std::string& qo_basis, //< basis of QO, hydrogen or pswfc + const std::vector& strategies, //< strategies for each atom type, more details see manual + const double& qo_thr, //< threshold for QO + const std::vector& + screening_coeffs); //< screening coefficients for pseudowavefunction or Slater screening + ~toQO(); + + // initialize function is to import program-related information, it is, + // more dynamic than constructor because this is actually an interface + // to states of rest of program, unlike constructor, actually defines + // the state of the class. + void initialize(const std::string& out_dir, //< directory of output files + const std::string& pseudo_dir, //< directory of pseudopotentials + const std::string& orbital_dir, //< directory of numerical atomic orbitals + const UnitCell* p_ucell, //< interface to the unitcell + const std::vector>& kvecs_d, //< kpoints + std::ofstream& ofs_running, //< output stream for running information + const int& rank, //< rank of present processor + const int& nranks); //< total number of processors + // import structure, including supercell and kvectors are read in this function + void read_structures(const UnitCell* p_ucell, //< interface to the unitcell + const std::vector>& kvecs_d, //< kpoints + const int& iproc, //< rank of present processor + const int& nprocs); //< total number of processors + + // Two-center integral + // QO is just one kind of representation, here it is representation from numerical + // atomic orbitals spanned space to atomic orbitals spanned space. Therefore two-center + // integral is the core of the whole transformation, it calculates the overlap between + // atomic orbitals and numerical atomic orbitals + // for |>: to build RadialCollection filled with AtomicRadials + void build_nao(const int ntype, //< number of atom types + const std::string orbital_dir, //< directory of numerical atomic orbitals + const std::string* const orbital_fn, //< filenames of numerical atomic orbitals + const int rank); //< rank of present processor + // for <|: to build RadialCollection filled with PswfcRadials or HydrogenRadials + void build_ao(const int ntype, //< number of atom types + const std::string pseudo_dir, //< directory of pseudopotentials + const std::string* const pspot_fn = nullptr, //< filenames of pseudopotentials + const std::vector screening_coeffs + = std::vector(), //< screening coefficients of pseudopotentials + const double qo_thr = 1e-10, //< threshold for QO + const std::ofstream& ofs = std::ofstream(), //< output stream for running information + const int rank = 0); //< rank of present processor + // for <|: to build RadialCollection filled with HydrogenRadials + void build_hydrogen(const int ntype, //< number of atom types + const double* const charges, //< charges of atoms + const bool slater_screening, //< whether use slater screening + const int* const nmax, //< maximum principle quantum number of atoms + const double qo_thr, //< threshold for QO + const int rank); //< rank of present processor + // for <|: to build RadialCollection filled with PswfcRadials + void build_pswfc(const int ntype, //< number of atom types + const std::string pseudo_dir, //< directory of pseudopotentials + const std::string* const pspot_fn, //< filenames of pseudopotentials + const double* const screening_coeffs, //< screening coefficients of pseudopotentials, appears like + //a factor (exp[-s*r]) scaling the pswfc + const double qo_thr, //< threshold for QO + const int rank); //< rank of present processor + void build_szv(); + // EXTERNAL EXPOSED FUNCTION, calculate all things in one shot + void calculate(); + // calculate = Sij(R) + void calculate_ovlpR(const int iR); //< iR index of supercell vector + // calculate = Sij(k) + void calculate_ovlpk(int ik); //< ik index of kpoint + // for overlap I/O + // S to file + template + void write_ovlp(const std::string& dir, //< directory of output files + const std::vector& matrix, //< matrix to write + const int& nrows, //< number of rows + const int& ncols, //< number of columns + const bool& is_R = false, //< whether it is in real space + const int& imat = 0); //< index of matrix + // S from file + void read_ovlp(const std::string& dir, //< directory of output files + const int& nrows, //< number of rows + const int& ncols, //< number of columns + const bool& is_R = false, //< whether it is in real space + const int& imat = 0); //< index of matrix + /// @brief build bidirectional map indexing for one single RadialCollection object, which is an axis of + /// two-center-integral table. + /// @details from (it,ia,l,zeta,m) to index and vice versa + void radialcollection_indexing( + const RadialCollection&, //< [in] instance of RadialCollection + const std::vector&, //< [in] number of atoms for each type + const bool&, //< [in] whether enable orbital filtering + std::map, int>&, //< [out] mapping from (it,ia,l,zeta,m) to index + std::map>&); //< [out] mapping from index to (it,ia,l,zeta,m) + /// @brief calculate vectors connecting all atom pairs that needed to calculate their overlap + ModuleBase::Vector3 cal_two_center_vector( + ModuleBase::Vector3 rij, //< vector connecting atom i and atom j + ModuleBase::Vector3 R); //< supercell vector + /// @brief when indexing, select where one orbital is really included in the two-center integral + bool orbital_filter_out(const int& itype, //< itype + const int& l, //< angular momentum + const int& izeta //< zeta + ); + + void deallocate_ovlp(const bool& is_R = false); //< deallocate memory for ovlp_ao_nao_R_ or ovlp_ao_nao_k_ + void allocate_ovlp(const bool& is_R = false); //< allocate memory for ovlp_ao_nao_R_ or ovlp_ao_nao_k_ + void zero_out_ovlps(const bool& is_R); //< zero out ovlp_ao_nao_R_ or ovlp_ao_nao_k_ + void append_ovlpR_eiRk(int ik, int iR); //< append S(R) to S(k), memory saving - // initialize function is to import program-related information, it is, - // more dynamic than constructor because this is actually an interface - // to states of rest of program, unlike constructor, actually defines - // the state of the class. - void initialize(const std::string& out_dir, //< directory of output files - const std::string& pseudo_dir, //< directory of pseudopotentials - const std::string& orbital_dir, //< directory of numerical atomic orbitals - const UnitCell* p_ucell, //< interface to the unitcell - const std::vector>& kvecs_d, //< kpoints - std::ofstream& ofs_running, //< output stream for running information - const int& rank, //< rank of present processor - const int& nranks); //< total number of processors - // import structure, including supercell and kvectors are read in this function - void read_structures(const UnitCell* p_ucell, //< interface to the unitcell - const std::vector>& kvecs_d, //< kpoints - const int& iproc, //< rank of present processor - const int& nprocs); //< total number of processors - - // Two-center integral - // QO is just one kind of representation, here it is representation from numerical - // atomic orbitals spanned space to atomic orbitals spanned space. Therefore two-center - // integral is the core of the whole transformation, it calculates the overlap between - // atomic orbitals and numerical atomic orbitals - // for |>: to build RadialCollection filled with AtomicRadials - void build_nao(const int ntype, //< number of atom types - const std::string orbital_dir, //< directory of numerical atomic orbitals - const std::string* const orbital_fn, //< filenames of numerical atomic orbitals - const int rank); //< rank of present processor - // for <|: to build RadialCollection filled with PswfcRadials or HydrogenRadials - void build_ao(const int ntype, //< number of atom types - const std::string pseudo_dir, //< directory of pseudopotentials - const std::string* const pspot_fn = nullptr, //< filenames of pseudopotentials - const std::vector screening_coeffs = std::vector(), //< screening coefficients of pseudopotentials - const double qo_thr = 1e-10, //< threshold for QO - const std::ofstream& ofs = std::ofstream(), //< output stream for running information - const int rank = 0); //< rank of present processor - // for <|: to build RadialCollection filled with HydrogenRadials - void build_hydrogen(const int ntype, //< number of atom types - const double* const charges, //< charges of atoms - const bool slater_screening, //< whether use slater screening - const int* const nmax, //< maximum principle quantum number of atoms - const double qo_thr, //< threshold for QO - const int rank); //< rank of present processor - // for <|: to build RadialCollection filled with PswfcRadials - void build_pswfc(const int ntype, //< number of atom types - const std::string pseudo_dir, //< directory of pseudopotentials - const std::string* const pspot_fn, //< filenames of pseudopotentials - const double* const screening_coeffs, //< screening coefficients of pseudopotentials, appears like a factor (exp[-s*r]) scaling the pswfc - const double qo_thr, //< threshold for QO - const int rank); //< rank of present processor - void build_szv(); - // EXTERNAL EXPOSED FUNCTION, calculate all things in one shot - void calculate(); - // calculate = Sij(R) - void calculate_ovlpR(const int iR); //< iR index of supercell vector - // calculate = Sij(k) - void calculate_ovlpk(int ik); //< ik index of kpoint - // for overlap I/O - // S to file - template - void write_ovlp(const std::string& dir, //< directory of output files - const std::vector& matrix, //< matrix to write - const int& nrows, //< number of rows - const int& ncols, //< number of columns - const bool& is_R = false, //< whether it is in real space - const int& imat = 0); //< index of matrix - // S from file - void read_ovlp(const std::string& dir, //< directory of output files - const int& nrows, //< number of rows - const int& ncols, //< number of columns - const bool& is_R = false, //< whether it is in real space - const int& imat = 0); //< index of matrix - /// @brief build bidirectional map indexing for one single RadialCollection object, which is an axis of two-center-integral table. - /// @details from (it,ia,l,zeta,m) to index and vice versa - void radialcollection_indexing(const RadialCollection&, //< [in] instance of RadialCollection - const std::vector&, //< [in] number of atoms for each type - const bool&, //< [in] whether enable orbital filtering - std::map,int>&, //< [out] mapping from (it,ia,l,zeta,m) to index - std::map>&); //< [out] mapping from index to (it,ia,l,zeta,m) - /// @brief calculate vectors connecting all atom pairs that needed to calculate their overlap - ModuleBase::Vector3 cal_two_center_vector(ModuleBase::Vector3 rij, //< vector connecting atom i and atom j - ModuleBase::Vector3 R); //< supercell vector - /// @brief when indexing, select where one orbital is really included in the two-center integral - bool orbital_filter_out(const int& itype, //< itype - const int& l, //< angular momentum - const int& izeta //< zeta - ); - - void deallocate_ovlp(const bool& is_R = false); //< deallocate memory for ovlp_ao_nao_R_ or ovlp_ao_nao_k_ - void allocate_ovlp(const bool& is_R = false); //< allocate memory for ovlp_ao_nao_R_ or ovlp_ao_nao_k_ - void zero_out_ovlps(const bool& is_R); //< zero out ovlp_ao_nao_R_ or ovlp_ao_nao_k_ - void append_ovlpR_eiRk(int ik, int iR); //< append S(R) to S(k), memory saving + // MPI related + static void bcast_stdvector_ofvector3int(std::vector>& vec, const int rank); + static void bcast_stdvector_ofvector3double(std::vector>& vec, const int rank); - // MPI related - static void bcast_stdvector_ofvector3int(std::vector>& vec, - const int rank); - static void bcast_stdvector_ofvector3double(std::vector>& vec, - const int rank); + // Neighboring list + /// @brief get all possible (n1n2n3) defining supercell and scatter if MPI enabled + void scan_supercell(const int& iproc, //< rank of present processor + const int& nprocs); //< total number of processors + /// @brief this is a basic functional for scanning (ijR) pair for one certain i, return Rs + /// @attention an algorithm loop over (i,)j,R, and return Rs + /// @return a vector collects (n1, n2, n3) for present atom + std::vector> scan_supercell_for_atom(int it, //< type of atom i + int ia, //< index of atom i + int start_it = 0, //< starting scan index of atom type + int start_ia = 0); //< starting scan index of atom + /// @brief core algorithm to scan supercells, find the maximal supercell according to present cutoff radius + /// @return a vector of (n1n2n3) defining supercell + std::vector rcut_to_supercell_index(double rcut, //< sum of cutoff radius of orbitals of atom i and atom j + ModuleBase::Vector3 a, //< cell vector a (in Bohr) + ModuleBase::Vector3 b, //< cell vector b (in Bohr) + ModuleBase::Vector3 c); //< cell vector c (in Bohr) + /// @brief get vector squared norm in supercell + /// @return (rij + n1R1 + n2R2 + n3R3)^2 + double norm2_rij_supercell(ModuleBase::Vector3 rij, //< vector connecting atom i and atom j in unitcell + int n1, //< supercell index 1 + int n2, //< supercell index 2 + int n3); //< supercell index 3 + /// @brief eliminate duplicate vectors in a vector of vector3 + template + void eliminate_duplicate_vector3(std::vector>& vector3s); + /// @brief write supercells information to file + void write_supercells(); - // Neighboring list - /// @brief get all possible (n1n2n3) defining supercell and scatter if MPI enabled - void scan_supercell(const int& iproc, //< rank of present processor - const int& nprocs); //< total number of processors - /// @brief this is a basic functional for scanning (ijR) pair for one certain i, return Rs - /// @attention an algorithm loop over (i,)j,R, and return Rs - /// @return a vector collects (n1, n2, n3) for present atom - std::vector> scan_supercell_for_atom(int it, //< type of atom i - int ia, //< index of atom i - int start_it = 0, //< starting scan index of atom type - int start_ia = 0); //< starting scan index of atom - /// @brief core algorithm to scan supercells, find the maximal supercell according to present cutoff radius - /// @return a vector of (n1n2n3) defining supercell - std::vector rcut_to_supercell_index(double rcut, //< sum of cutoff radius of orbitals of atom i and atom j - ModuleBase::Vector3 a, //< cell vector a (in Bohr) - ModuleBase::Vector3 b, //< cell vector b (in Bohr) - ModuleBase::Vector3 c); //< cell vector c (in Bohr) - /// @brief get vector squared norm in supercell - /// @return (rij + n1R1 + n2R2 + n3R3)^2 - double norm2_rij_supercell(ModuleBase::Vector3 rij, //< vector connecting atom i and atom j in unitcell - int n1, //< supercell index 1 - int n2, //< supercell index 2 - int n3); //< supercell index 3 - /// @brief eliminate duplicate vectors in a vector of vector3 - template - void eliminate_duplicate_vector3(std::vector>& vector3s); - /// @brief write supercells information to file - void write_supercells(); - - // getters - int ntype() const { return ntype_; } - int nks() const { return nks_; } - std::string qo_basis() const { return qo_basis_; } - std::vector strategies() const { return strategies_; } - std::string strategy(const int itype) const { return strategies_[itype]; } - UnitCell* p_ucell() const { return const_cast(p_ucell_); } - RadialCollection* p_nao() const { return nao_.get(); } - RadialCollection* p_ao() const { return ao_.get(); } - int nR() const { return nR_; } - int nchi() const { return nchi_; } - int nphi() const { return nphi_; } - std::vector> supercells() const { return supercells_; } - std::vector ovlpR() const { return ovlpR_; } - double ovlpR(const int i, const int j) const { return ovlpR_[i*nchi_+j]; } - std::vector> ovlpk() const { return ovlpk_; } - std::complex ovlpk(const int i, const int j) const { return ovlpk_[i*nchi_+j]; } - std::vector symbols() const { return symbols_; } - std::vector charges() const { return charges_; } - atom_in atom_database() const { return atom_database_; } - std::vector> kvecs_d() const { return kvecs_d_; } + // getters + int ntype() const + { + return ntype_; + } + int nks() const + { + return nks_; + } + std::string qo_basis() const + { + return qo_basis_; + } + std::vector strategies() const + { + return strategies_; + } + std::string strategy(const int itype) const + { + return strategies_[itype]; + } + UnitCell* p_ucell() const + { + return const_cast(p_ucell_); + } + RadialCollection* p_nao() const + { + return nao_.get(); + } + RadialCollection* p_ao() const + { + return ao_.get(); + } + int nR() const + { + return nR_; + } + int nchi() const + { + return nchi_; + } + int nphi() const + { + return nphi_; + } + std::vector> supercells() const + { + return supercells_; + } + std::vector ovlpR() const + { + return ovlpR_; + } + double ovlpR(const int i, const int j) const + { + return ovlpR_[i * nchi_ + j]; + } + std::vector> ovlpk() const + { + return ovlpk_; + } + std::complex ovlpk(const int i, const int j) const + { + return ovlpk_[i * nchi_ + j]; + } + std::vector symbols() const + { + return symbols_; + } + std::vector charges() const + { + return charges_; + } + atom_in atom_database() const + { + return atom_database_; + } + std::vector> kvecs_d() const + { + return kvecs_d_; + } - private: - // Variables defining QO task - std::string qo_basis_ = "hydrogen"; - std::vector strategies_; - double qo_thr_ = 1e-10; - std::vector screening_coeffs_; - // Variables defining I/O - std::string out_dir_; //< directory of output files - std::string pseudo_dir_; //< directory of pseudopotentials - std::string orbital_dir_; //< directory of numerical atomic orbitals - // Variables defining parallelism - int iproc_ = 0; - int nprocs_ = 1; - // variables defining structure - const UnitCell* p_ucell_ = nullptr; //< interface to the unitcell, its lifespan is not managed here - std::vector iRs_; //< indices of supercell vectors (local) - std::vector> supercells_; //< supercell vectors (global) - std::vector iks_; //< indices of kpoints (local) - std::vector> kvecs_d_; //< kpoints (global) - // Two center integral - std::unique_ptr nao_; //< numerical atomic orbitals - std::unique_ptr ao_; //< atomic orbitals - std::unique_ptr overlap_calculator_; //< two center integrator - std::vector ovlpR_; //< overlap between atomic orbitals and numerical atomic orbitals, in real space - std::vector> ovlpk_; //< overlap between atomic orbitals and numerical atomic orbitals, in k space - //< indices - std::map,int> index_ao_; //< mapping from (it,ia,l,zeta,m) to index - std::map> rindex_ao_; //< mapping from index to (it,ia,l,zeta,m) - std::map,int> index_nao_; //< mapping from (it,ia,l,zeta,m) to index - std::map> rindex_nao_; //< mapping from index to (it,ia,l,zeta,m) - // Variables defining dimensions or resource allocation - int nks_ = 0; //< number of kpoints for present processor, for S(k) - int nks_tot_ = 0; //< total number of kpoints - int nR_ = 0; //< number of supercell vectors on present processor, for S(R) - int nR_tot_ = 0; //< total number of supercell vectors - int nchi_ = 0; //< number of atomic orbitals, chi in \mathbf{S}^{\chi\phi}(\mathbf{k}) - int nphi_ = 0; //< number of numerical atomic orbitals, phi in \mathbf{S}^{\chi\phi}(\mathbf{k}) - // Variables defining atoms - atom_in atom_database_; //< atomic information database - int ntype_ = 0; //< number of atom types - std::vector na_; //< number of atoms for each type - std::vector symbols_; //< symbols of atoms - std::vector charges_; //< charges of atoms - std::vector nmax_; //< maximum principle quantum number of atoms + private: + // Variables defining QO task + std::string qo_basis_ = "hydrogen"; + std::vector strategies_; + double qo_thr_ = 1e-10; + std::vector screening_coeffs_; + // Variables defining I/O + std::string out_dir_; //< directory of output files + std::string pseudo_dir_; //< directory of pseudopotentials + std::string orbital_dir_; //< directory of numerical atomic orbitals + // Variables defining parallelism + int iproc_ = 0; + int nprocs_ = 1; + // variables defining structure + const UnitCell* p_ucell_ = nullptr; //< interface to the unitcell, its lifespan is not managed here + std::vector iRs_; //< indices of supercell vectors (local) + std::vector> supercells_; //< supercell vectors (global) + std::vector iks_; //< indices of kpoints (local) + std::vector> kvecs_d_; //< kpoints (global) + // Two center integral + std::unique_ptr nao_; //< numerical atomic orbitals + std::unique_ptr ao_; //< atomic orbitals + std::unique_ptr overlap_calculator_; //< two center integrator + std::vector ovlpR_; //< overlap between atomic orbitals and numerical atomic orbitals, in real space + std::vector> + ovlpk_; //< overlap between atomic orbitals and numerical atomic orbitals, in k space + //< indices + std::map, int> index_ao_; //< mapping from (it,ia,l,zeta,m) to index + std::map> rindex_ao_; //< mapping from index to (it,ia,l,zeta,m) + std::map, int> index_nao_; //< mapping from (it,ia,l,zeta,m) to index + std::map> rindex_nao_; //< mapping from index to (it,ia,l,zeta,m) + // Variables defining dimensions or resource allocation + int nks_ = 0; //< number of kpoints for present processor, for S(k) + int nks_tot_ = 0; //< total number of kpoints + int nR_ = 0; //< number of supercell vectors on present processor, for S(R) + int nR_tot_ = 0; //< total number of supercell vectors + int nchi_ = 0; //< number of atomic orbitals, chi in \mathbf{S}^{\chi\phi}(\mathbf{k}) + int nphi_ = 0; //< number of numerical atomic orbitals, phi in \mathbf{S}^{\chi\phi}(\mathbf{k}) + // Variables defining atoms + atom_in atom_database_; //< atomic information database + int ntype_ = 0; //< number of atom types + std::vector na_; //< number of atoms for each type + std::vector symbols_; //< symbols of atoms + std::vector charges_; //< charges of atoms + std::vector nmax_; //< maximum principle quantum number of atoms }; #endif // TOQO_H \ No newline at end of file diff --git a/source/module_io/to_qo_kernel.cpp b/source/module_io/to_qo_kernel.cpp index 0b4008bc09..66574ebc2e 100644 --- a/source/module_io/to_qo_kernel.cpp +++ b/source/module_io/to_qo_kernel.cpp @@ -1,9 +1,9 @@ -#include "module_base/libm/libm.h" -#include "module_base/ylm.h" #include "module_basis/module_nao/two_center_integrator.h" #include "module_io/to_qo.h" +#include "source_base/libm/libm.h" +#include "source_base/ylm.h" #ifdef __MPI -#include "module_base/parallel_common.h" +#include "source_base/parallel_common.h" #endif // how define QO task, how create QO instance toQO::toQO(const std::string& qo_basis, @@ -42,9 +42,10 @@ void toQO::initialize(const std::string& out_dir, init_info += "qo_basis: " + qo_basis_ + "\n"; init_info += "qo_thr: " + std::to_string(qo_thr_) + "\n"; init_info += "qo_strategies: "; - for (auto s: strategies_) { + for (auto s: strategies_) + { init_info += s + " "; -} + } init_info += "\n"; init_info += "Output directory: " + out_dir + "\n"; init_info += "Pseudopotential directory: " + pseudo_dir + "\n"; @@ -160,35 +161,52 @@ bool toQO::orbital_filter_out(const int& itype, const int& l, const int& izeta) // means for the first atom type, use s and p orbitals, for the second, use // s, p, d, and f orbitals // default is `all` for all types, and for each type, all orbitals are used - if (strategies_[itype] == "all") { + if (strategies_[itype] == "all") + { return false; - } else if (l >= l2symbol.size()) { + } + else if (l >= l2symbol.size()) + { return true; - } else if (strategies_[itype].find_first_of(l2symbol[l]) != std::string::npos) { + } + else if (strategies_[itype].find_first_of(l2symbol[l]) != std::string::npos) + { return false; - } else { + } + else + { return true; -} + } } else if (qo_basis_ == "szv") { // use two individual logic branch allows them have different orbital filtering logic, // although presently they are almost the same - if (izeta != 0) { + if (izeta != 0) + { return true; // filter out - } else if (strategies_[itype] == "all") { + } + else if (strategies_[itype] == "all") + { return false; // keep - } else if (l >= l2symbol.size()) { + } + else if (l >= l2symbol.size()) + { return true; // filter out - } else if (strategies_[itype].find_first_of(l2symbol[l]) != std::string::npos) { + } + else if (strategies_[itype].find_first_of(l2symbol[l]) != std::string::npos) + { return false; // keep - } else { + } + else + { return true; // filter out -} + } } - else { + else + { return false; -} + } } void toQO::build_hydrogen(const int ntype, @@ -287,9 +305,10 @@ void toQO::build_ao(const int ntype, qo_thr, /// qo_thr rank); /// rank } - else if (qo_basis_ == "szv") { + else if (qo_basis_ == "szv") + { build_szv(); -} + } if (rank == 0) { std::string ao_build_info = "toQO::build_ao: built atomic orbitals for calculating QO overlap integrals\n"; @@ -375,12 +394,14 @@ void toQO::calculate_ovlpk(int ik) MPI_Barrier(MPI_COMM_WORLD); #endif // ik == -1 corresponds to the case of those processes with less kpoints than others - if (ik != -1) { + if (ik != -1) + { read_ovlp(out_dir_, nchi_, nphi_, true, barrier_iR); -} - if (ik != -1) { + } + if (ik != -1) + { append_ovlpR_eiRk(ik, barrier_iR); -} + } } } @@ -397,9 +418,10 @@ void toQO::calculate() // while for zero_out overlap, it can be not so strictly synchronized zero_out_ovlps(false); calculate_ovlpk(ik); - if (ik != -1) { + if (ik != -1) + { write_ovlp>(out_dir_, ovlpk_, nchi_, nphi_, false, ik); -} + } } #ifdef __MPI // once the calculation of S(k) is finished, prone to delete all QO_ovlpR_*.dat files. But the most @@ -428,18 +450,22 @@ void toQO::append_ovlpR_eiRk(int ik, int iR) ModuleBase::libm::sincos(arg, &sinp, &cosp); std::complex phase = std::complex(cosp, sinp); // add all values of ovlpR_ to ovlpk_ with multiplication of phase - for (int i = 0; i < nchi_ * nphi_; i++) { + for (int i = 0; i < nchi_ * nphi_; i++) + { ovlpk_[i] += ovlpR_[i] * phase; -} + } } void toQO::allocate_ovlp(const bool& is_R) { - if (is_R) { + if (is_R) + { ovlpR_.resize(nchi_ * nphi_, 0.0); - } else { + } + else + { ovlpk_.resize(nchi_ * nphi_, std::complex(0.0, 0.0)); -} + } } void toQO::deallocate_ovlp(const bool& is_R) @@ -458,11 +484,14 @@ void toQO::deallocate_ovlp(const bool& is_R) void toQO::zero_out_ovlps(const bool& is_R) { - if (is_R) { + if (is_R) + { std::fill(ovlpR_.begin(), ovlpR_.end(), 0.0); - } else { + } + else + { std::fill(ovlpk_.begin(), ovlpk_.end(), std::complex(0.0, 0.0)); -} + } } void toQO::radialcollection_indexing(const RadialCollection& radcol, @@ -486,17 +515,19 @@ void toQO::radialcollection_indexing(const RadialCollection& radcol, for (int m_abs = 0; m_abs <= l; m_abs++) { ms.push_back(m_abs); - if (m_abs != 0) { + if (m_abs != 0) + { ms.push_back(-m_abs); -} + } } for (int izeta = 0; izeta < radcol.nzeta(itype, l); izeta++) { // usually, the orbital is distinguished by it, l and zeta, the ia and m are not // commonly used. - if (orbital_filter_out(itype, l, izeta) && with_filter) { + if (orbital_filter_out(itype, l, izeta) && with_filter) + { continue; -} + } for (int m: ms) { index_map[std::make_tuple(itype, iatom, l, izeta, m)] = index; @@ -567,14 +598,16 @@ std::complex str2complex(const std::string& str) { std::string real_str, imag_str; int i = 1; // skip '(' - while (str[i] != ',') { + while (str[i] != ',') + { real_str += str[i]; -} + } i++; i++; // skip ',' - while (str[i] != ')') { + while (str[i] != ')') + { imag_str += str[i]; -} + } i++; return std::complex(std::stod(real_str), std::stod(imag_str)); } @@ -601,22 +634,28 @@ void toQO::read_ovlp(const std::string& dir, const int& nrows, const int& ncols, double val; ifs >> val; inum++; - if (inum <= nchi_ * nphi_) { + if (inum <= nchi_ * nphi_) + { ovlpR_[inum - 1] = val; - } else { + } + else + { break; -} + } } else { std::string val_str; ifs >> val_str; inum++; - if (inum <= nchi_ * nphi_) { + if (inum <= nchi_ * nphi_) + { ovlpk_[inum - 1] = str2complex(val_str); - } else { + } + else + { break; -} + } } } } diff --git a/source/module_io/to_qo_mpi.cpp b/source/module_io/to_qo_mpi.cpp index 52c198ba92..8c378978db 100644 --- a/source/module_io/to_qo_mpi.cpp +++ b/source/module_io/to_qo_mpi.cpp @@ -1,18 +1,17 @@ #include "module_io/to_qo.h" #ifdef __MPI -#include "../module_base/parallel_common.h" +#include "../source_base/parallel_common.h" #endif -void toQO::bcast_stdvector_ofvector3int(std::vector>& vec, - const int rank) +void toQO::bcast_stdvector_ofvector3int(std::vector>& vec, const int rank) { - #ifdef __MPI +#ifdef __MPI int dim; std::vector vec_1d; - if(rank == 0) + if (rank == 0) { dim = vec.size(); - for(int i = 0; i < dim; i++) + for (int i = 0; i < dim; i++) { vec_1d.push_back(vec[i].x); vec_1d.push_back(vec[i].y); @@ -20,29 +19,32 @@ void toQO::bcast_stdvector_ofvector3int(std::vector>& v } } Parallel_Common::bcast_int(dim); - if(rank != 0) { vec_1d.resize(dim * 3); } + if (rank != 0) + { + vec_1d.resize(dim * 3); + } Parallel_Common::bcast_int(vec_1d.data(), dim * 3); - if(rank != 0) + if (rank != 0) { - vec.clear(); vec.resize(dim); - for(int i = 0; i < dim; i++) + vec.clear(); + vec.resize(dim); + for (int i = 0; i < dim; i++) { - vec[i] = ModuleBase::Vector3(vec_1d[i*3], vec_1d[i*3+1], vec_1d[i*3+2]); + vec[i] = ModuleBase::Vector3(vec_1d[i * 3], vec_1d[i * 3 + 1], vec_1d[i * 3 + 2]); } } - #endif +#endif } -void toQO::bcast_stdvector_ofvector3double(std::vector>& vec, - const int rank) +void toQO::bcast_stdvector_ofvector3double(std::vector>& vec, const int rank) { - #ifdef __MPI +#ifdef __MPI int dim; std::vector vec_1d; - if(rank == 0) + if (rank == 0) { dim = vec.size(); - for(int i = 0; i < dim; i++) + for (int i = 0; i < dim; i++) { vec_1d.push_back(vec[i].x); vec_1d.push_back(vec[i].y); @@ -50,15 +52,19 @@ void toQO::bcast_stdvector_ofvector3double(std::vector(vec_1d[i*3], vec_1d[i*3+1], vec_1d[i*3+2]); + vec[i] = ModuleBase::Vector3(vec_1d[i * 3], vec_1d[i * 3 + 1], vec_1d[i * 3 + 2]); } } - #endif +#endif } diff --git a/source/module_io/to_qo_structures.cpp b/source/module_io/to_qo_structures.cpp index db598672d2..67f0135510 100644 --- a/source/module_io/to_qo_structures.cpp +++ b/source/module_io/to_qo_structures.cpp @@ -1,8 +1,8 @@ #include "module_io/to_qo.h" #ifdef __MPI -#include "../module_base/parallel_common.h" +#include "../source_base/parallel_common.h" #endif -void toQO::read_structures(const UnitCell* p_ucell, +void toQO::read_structures(const UnitCell* p_ucell, const std::vector>& kvecs_d, const int& rank, const int& nranks) @@ -12,16 +12,18 @@ void toQO::read_structures(const UnitCell* p_ucell, // atom related properties ntype_ = p_ucell->ntype; - std::for_each(p_ucell->atoms, p_ucell->atoms + p_ucell->ntype, [this](Atom& atom){ + std::for_each(p_ucell->atoms, p_ucell->atoms + p_ucell->ntype, [this](Atom& atom) { symbols_.push_back(atom.ncpp.psd); na_.push_back(atom.na); }); nmax_.resize(ntype_); charges_.resize(ntype_); - for(int itype = 0; itype < ntype_; itype++) + for (int itype = 0; itype < ntype_; itype++) { std::cout << "type " << itype << " " << symbols_[itype] << " strategy: " << strategies_[itype] << std::endl; - nmax_[itype] = (strategies_[itype].substr(0, 6) != "energy")? atom_database_.principle_quantum_number[symbols_[itype]]: atom_database_.atom_Z[symbols_[itype]]; + nmax_[itype] = (strategies_[itype].substr(0, 6) != "energy") + ? atom_database_.principle_quantum_number[symbols_[itype]] + : atom_database_.atom_Z[symbols_[itype]]; charges_[itype] = atom_database_.atom_Z[symbols_[itype]]; } @@ -31,69 +33,76 @@ void toQO::read_structures(const UnitCell* p_ucell, nks_tot_ = nks_; iks_ = std::vector(nks_); - for(int i = 0; i < nks_; i++) iks_[i] = i; + for (int i = 0; i < nks_; i++) + iks_[i] = i; - // scatter k points to all ranks if MPI is enabled + // scatter k points to all ranks if MPI is enabled #ifdef __MPI // scatter kvecs_d_ to all ranks std::vector> nks_divided(nranks); // indiced by iproc, then list of indices of kvecs_d_ - if(rank == 0) + if (rank == 0) { int nks = nks_tot_; int nks_perrank = nks / nranks; int nks_remain = nks % nranks; - + int start_ik = 0; - for(int i = 0; i < nranks; i++) + for (int i = 0; i < nranks; i++) { int nks_this_rank = nks_perrank + int(i < nks_remain); std::vector nks_this_rank_indices; - for(int j = 0; j < nks_this_rank; j++) + for (int j = 0; j < nks_this_rank; j++) { nks_this_rank_indices.push_back(start_ik + j); } // for those ranks with less k points, pad with -1 - if((i >= nks_remain)&&(nks_remain > 0)) nks_this_rank_indices.push_back(-1); + if ((i >= nks_remain) && (nks_remain > 0)) + nks_this_rank_indices.push_back(-1); start_ik += nks_this_rank; nks_divided[i] = nks_this_rank_indices; } } - for(int i = 0; i < nranks; i++) + for (int i = 0; i < nranks; i++) { int nks_dim; - if(iproc_ == 0) nks_dim = nks_divided[i].size(); + if (iproc_ == 0) + nks_dim = nks_divided[i].size(); Parallel_Common::bcast_int(nks_dim); - if(iproc_ != 0) nks_divided[i].resize(nks_dim); + if (iproc_ != 0) + nks_divided[i].resize(nks_dim); Parallel_Common::bcast_int(nks_divided[i].data(), nks_dim); } - //bcast_stdvector_ofvector3double(kvecs_d_); // because kvecs_d is already broadcasted in the main program + // bcast_stdvector_ofvector3double(kvecs_d_); // because kvecs_d is already broadcasted in the main program iks_.clear(); - for(int i = 0; i < nks_divided[rank].size(); i++) + for (int i = 0; i < nks_divided[rank].size(); i++) { - if(nks_divided[rank][i] != -1) iks_.push_back(nks_divided[rank][i]); // we want it is explicitly -1 - else iks_.push_back(-1); + if (nks_divided[rank][i] != -1) + iks_.push_back(nks_divided[rank][i]); // we want it is explicitly -1 + else + iks_.push_back(-1); } nks_ = iks_.size(); - + // ensure all kpoints are successfully scattered MPI_Barrier(MPI_COMM_WORLD); #endif - if(rank == 0) printf("toQO KPOINTS parallelization: calculation of S(k) will be parallelized on %d processes\n", nranks); + if (rank == 0) + printf("toQO KPOINTS parallelization: calculation of S(k) will be parallelized on %d processes\n", nranks); #ifdef __MPI // the following information should be printed after the report of number of ranks // therefore barrier to wait rank0. MPI_Barrier(MPI_COMM_WORLD); - int last_ik_ = (iks_[nks_-1] == -1)? iks_[nks_-2]: iks_[nks_-1]; + int last_ik_ = (iks_[nks_ - 1] == -1) ? iks_[nks_ - 2] : iks_[nks_ - 1]; printf("KPOINTS distributed on process %d will calculate in range [%d, %d]\n", rank, iks_[0], last_ik_); #endif } template -void toQO::eliminate_duplicate_vector3(std::vector> &v) +void toQO::eliminate_duplicate_vector3(std::vector>& v) { std::vector> v_; // convert vector3 to vector - for(int i = 0; i < v.size(); i++) + for (int i = 0; i < v.size(); i++) { v_.push_back(std::vector{v[i].x, v[i].y, v[i].z}); } @@ -101,12 +110,12 @@ void toQO::eliminate_duplicate_vector3(std::vector> &v) v_.erase(std::unique(v_.begin(), v_.end()), v_.end()); v.clear(); v.resize(v_.size()); - for(int i = 0; i < v_.size(); i++) + for (int i = 0; i < v_.size(); i++) { v[i] = ModuleBase::Vector3(v_[i][0], v_[i][1], v_[i][2]); } } -template void toQO::eliminate_duplicate_vector3(std::vector> &v); +template void toQO::eliminate_duplicate_vector3(std::vector>& v); std::vector> toQO::scan_supercell_for_atom(int it, int ia, int start_it, int start_ia) { @@ -114,13 +123,16 @@ std::vector> toQO::scan_supercell_for_atom(int it, int // cutoff radius of numerical atomic orbital of atom itia double rcut_i = ao_->rcut_max(it); // lattice vectors - for(int itype = start_it; itype < p_ucell_->ntype; itype++) + for (int itype = start_it; itype < p_ucell_->ntype; itype++) { - for(int iatom = start_ia; iatom < p_ucell_->atoms[itype].na; iatom++) + for (int iatom = start_ia; iatom < p_ucell_->atoms[itype].na; iatom++) { double rcut_j = nao_->rcut_max(itype); - ModuleBase::Vector3 rij = p_ucell_->atoms[itype].tau[iatom] - p_ucell_->atoms[it].tau[ia]; // in unit lat0? - int n1 = 0; int n2 = 0; int n3 = 0; + ModuleBase::Vector3 rij + = p_ucell_->atoms[itype].tau[iatom] - p_ucell_->atoms[it].tau[ia]; // in unit lat0? + int n1 = 0; + int n2 = 0; + int n3 = 0; // calculate the sup of n1, n2, n3 // rcut_i, j in bohr! a1, a2 and a3 are in lat0, so multiply with lat0 // int n1max = int(std::ceil((rcut_i + rcut_j)/p_ucell_->a1.norm()/p_ucell_->lat0)); @@ -132,14 +144,14 @@ std::vector> toQO::scan_supercell_for_atom(int it, int double rcut_ij = rcut_i + rcut_j; std::vector n1n2n3_max = rcut_to_supercell_index(rcut_ij, a1_in_Bohr, a2_in_Bohr, a3_in_Bohr); // scan n1, n2, n3 - for(int n1 = -n1n2n3_max[0]; n1 <= n1n2n3_max[0]; n1++) + for (int n1 = -n1n2n3_max[0]; n1 <= n1n2n3_max[0]; n1++) { - for(int n2 = -n1n2n3_max[1]; n2 <= n1n2n3_max[1]; n2++) + for (int n2 = -n1n2n3_max[1]; n2 <= n1n2n3_max[1]; n2++) { - for(int n3 = -n1n2n3_max[2]; n3 <= n1n2n3_max[2]; n3++) + for (int n3 = -n1n2n3_max[2]; n3 <= n1n2n3_max[2]; n3++) { double f = norm2_rij_supercell(rij, n1, n2, n3); - if(f < std::pow(rcut_i + rcut_j, 2)) + if (f < std::pow(rcut_i + rcut_j, 2)) { n1n2n3.push_back(ModuleBase::Vector3(n1, n2, n3)); } @@ -160,17 +172,20 @@ double cosine_between_vector3(ModuleBase::Vector3 v1, ModuleBase::Vector return f; } -std::vector toQO::rcut_to_supercell_index(double rcut, ModuleBase::Vector3 a, ModuleBase::Vector3 b, ModuleBase::Vector3 c) +std::vector toQO::rcut_to_supercell_index(double rcut, + ModuleBase::Vector3 a, + ModuleBase::Vector3 b, + ModuleBase::Vector3 c) { - double fab = std::sqrt(1-std::pow(cosine_between_vector3(a, b), 2)); - double fac = std::sqrt(1-std::pow(cosine_between_vector3(a, c), 2)); - double fbc = std::sqrt(1-std::pow(cosine_between_vector3(b ,c), 2)); + double fab = std::sqrt(1 - std::pow(cosine_between_vector3(a, b), 2)); + double fac = std::sqrt(1 - std::pow(cosine_between_vector3(a, c), 2)); + double fbc = std::sqrt(1 - std::pow(cosine_between_vector3(b, c), 2)); double fa = std::min(fab, fac); double fb = std::min(fab, fbc); double fc = std::min(fac, fbc); - int n1max = int(std::ceil(rcut/a.norm()/fa)); - int n2max = int(std::ceil(rcut/b.norm()/fb)); - int n3max = int(std::ceil(rcut/c.norm()/fc)); + int n1max = int(std::ceil(rcut / a.norm() / fa)); + int n2max = int(std::ceil(rcut / b.norm() / fb)); + int n3max = int(std::ceil(rcut / c.norm() / fc)); std::vector n1n2n3 = {n1max, n2max, n3max}; return n1n2n3; } @@ -178,26 +193,26 @@ std::vector toQO::rcut_to_supercell_index(double rcut, ModuleBase::Vector3< double toQO::norm2_rij_supercell(ModuleBase::Vector3 rij, int n1, int n2, int n3) { double f = rij * rij; - f += n1*n1*(p_ucell_->a1*p_ucell_->a1); - f += n2*n2*(p_ucell_->a2*p_ucell_->a2); - f += n3*n3*(p_ucell_->a3*p_ucell_->a3); - f += 2*n1*n2*(p_ucell_->a1*p_ucell_->a2); - f += 2*n1*n3*(p_ucell_->a1*p_ucell_->a3); - f += 2*n2*n3*(p_ucell_->a2*p_ucell_->a3); - f += 2*n1*(p_ucell_->a1*rij); - f += 2*n2*(p_ucell_->a2*rij); - f += 2*n3*(p_ucell_->a3*rij); + f += n1 * n1 * (p_ucell_->a1 * p_ucell_->a1); + f += n2 * n2 * (p_ucell_->a2 * p_ucell_->a2); + f += n3 * n3 * (p_ucell_->a3 * p_ucell_->a3); + f += 2 * n1 * n2 * (p_ucell_->a1 * p_ucell_->a2); + f += 2 * n1 * n3 * (p_ucell_->a1 * p_ucell_->a3); + f += 2 * n2 * n3 * (p_ucell_->a2 * p_ucell_->a3); + f += 2 * n1 * (p_ucell_->a1 * rij); + f += 2 * n2 * (p_ucell_->a2 * rij); + f += 2 * n3 * (p_ucell_->a3 * rij); return f; } void toQO::scan_supercell(const int& rank, const int& nranks) { - if(rank == 0) + if (rank == 0) { std::vector> n1n2n3_overall; - for(int it = 0; it < p_ucell_->ntype; it++) + for (int it = 0; it < p_ucell_->ntype; it++) { - for(int ia = 0; ia < p_ucell_->atoms[it].na; ia++) + for (int ia = 0; ia < p_ucell_->atoms[it].na; ia++) { std::vector> n1n2n3 = scan_supercell_for_atom(it, ia); n1n2n3_overall.insert(n1n2n3_overall.end(), n1n2n3.begin(), n1n2n3.end()); @@ -209,9 +224,10 @@ void toQO::scan_supercell(const int& rank, const int& nranks) supercells_ = n1n2n3_overall; nR_ = supercells_.size(); nR_tot_ = nR_; - + iRs_ = std::vector(nR_); - for(int i = 0; i < nR_; i++) iRs_[i] = i; + for (int i = 0; i < nR_; i++) + iRs_[i] = i; write_supercells(); } @@ -221,8 +237,8 @@ void toQO::scan_supercell(const int& rank, const int& nranks) Parallel_Common::bcast_int(nR_tot_); bcast_stdvector_ofvector3int(supercells_, iproc_); // scatter - std::vector> nR_divided(nranks); // indiced by iproc, then list of indices of supercells_ - if(rank == 0) + std::vector> nR_divided(nranks); // indiced by iproc, then list of indices of supercells_ + if (rank == 0) { // divide nR into std::vector of std::vector, each std::vector is a chunk of indices of supercells_ int nRs = nR_; @@ -230,11 +246,11 @@ void toQO::scan_supercell(const int& rank, const int& nranks) int nRs_remain = nRs % nranks; int start_iR = 0; - for(int i = 0; i < nranks; i++) + for (int i = 0; i < nranks; i++) { int nR_this_rank = nRs_perrank + int(i < nRs_remain); std::vector nR_this_rank_indices; - for(int j = 0; j < nR_this_rank; j++) + for (int j = 0; j < nR_this_rank; j++) { nR_this_rank_indices.push_back(start_iR + j); } @@ -242,21 +258,25 @@ void toQO::scan_supercell(const int& rank, const int& nranks) nR_divided[i] = nR_this_rank_indices; } } - for(int i = 0; i < nranks; i++) + for (int i = 0; i < nranks; i++) { int nR_dim; - if(rank == 0) nR_dim = nR_divided[i].size(); + if (rank == 0) + nR_dim = nR_divided[i].size(); Parallel_Common::bcast_int(nR_dim); - if(rank != 0) nR_divided[i].resize(nR_dim); + if (rank != 0) + nR_divided[i].resize(nR_dim); Parallel_Common::bcast_int(nR_divided[i].data(), nR_dim); } iRs_.clear(); - for(int i = 0; i < nR_divided[rank].size(); i++) iRs_.push_back(nR_divided[rank][i]); + for (int i = 0; i < nR_divided[rank].size(); i++) + iRs_.push_back(nR_divided[rank][i]); nR_ = iRs_.size(); MPI_Barrier(MPI_COMM_WORLD); #endif - if(rank == 0) printf("toQO SUPERCELLS parallelization: calculation of S(R) will be parallelized on %d processes\n", nranks); + if (rank == 0) + printf("toQO SUPERCELLS parallelization: calculation of S(R) will be parallelized on %d processes\n", nranks); #ifdef __MPI MPI_Barrier(MPI_COMM_WORLD); int last_iR_ = nR_ - 1; @@ -264,35 +284,26 @@ void toQO::scan_supercell(const int& rank, const int& nranks) #endif } -ModuleBase::Vector3 toQO::cal_two_center_vector(ModuleBase::Vector3 rij, - ModuleBase::Vector3 R) +ModuleBase::Vector3 toQO::cal_two_center_vector(ModuleBase::Vector3 rij, ModuleBase::Vector3 R) { ModuleBase::Vector3 Rij; - Rij.x = rij.x + R.x * p_ucell_->a1.x - + R.y * p_ucell_->a2.x - + R.z * p_ucell_->a3.x; - Rij.y = rij.y + R.x * p_ucell_->a1.y - + R.y * p_ucell_->a2.y - + R.z * p_ucell_->a3.y; - Rij.z = rij.z + R.x * p_ucell_->a1.z - + R.y * p_ucell_->a2.z - + R.z * p_ucell_->a3.z; + Rij.x = rij.x + R.x * p_ucell_->a1.x + R.y * p_ucell_->a2.x + R.z * p_ucell_->a3.x; + Rij.y = rij.y + R.x * p_ucell_->a1.y + R.y * p_ucell_->a2.y + R.z * p_ucell_->a3.y; + Rij.z = rij.z + R.x * p_ucell_->a1.z + R.y * p_ucell_->a2.z + R.z * p_ucell_->a3.z; return Rij; } void toQO::write_supercells() { std::ofstream ofs(out_dir_ + "QO_supercells.dat"); - if(!ofs.is_open()) + if (!ofs.is_open()) { ModuleBase::WARNING_QUIT("toQO::write_supercells", "can not open file: QO_supercells.dat"); } - for(int i = 0; i < supercells_.size(); i++) + for (int i = 0; i < supercells_.size(); i++) { - ofs << std::setw(5) << std::right << supercells_[i].x << " " - << std::setw(5) << std::right << supercells_[i].y << " " - << std::setw(5) << std::right << supercells_[i].z << std::endl; + ofs << std::setw(5) << std::right << supercells_[i].x << " " << std::setw(5) << std::right << supercells_[i].y + << " " << std::setw(5) << std::right << supercells_[i].z << std::endl; } ofs.close(); } - diff --git a/source/module_io/to_wannier90.cpp b/source/module_io/to_wannier90.cpp index beec844526..2c9bd95ff2 100644 --- a/source/module_io/to_wannier90.cpp +++ b/source/module_io/to_wannier90.cpp @@ -1,11 +1,11 @@ #include "to_wannier90.h" -#include "module_parameter/parameter.h" -#include "module_base/math_integral.h" -#include "module_base/math_polyint.h" -#include "module_base/math_sphbes.h" -#include "module_base/math_ylmreal.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/math_integral.h" +#include "source_base/math_polyint.h" +#include "source_base/math_sphbes.h" +#include "source_base/math_ylmreal.h" toWannier90::toWannier90() { @@ -78,7 +78,7 @@ void toWannier90::read_nnkp(const UnitCell& ucell, const K_Vectors& kv) bool read_success = false; if (GlobalV::MY_RANK == 0) { - read_success = try_read_nnkp(ucell,kv); + read_success = try_read_nnkp(ucell, kv); } #ifdef __MPI @@ -87,7 +87,7 @@ void toWannier90::read_nnkp(const UnitCell& ucell, const K_Vectors& kv) if (GlobalV::MY_RANK != 0 && read_success) { - read_success = try_read_nnkp(ucell,kv); + read_success = try_read_nnkp(ucell, kv); } #ifdef __MPI @@ -426,8 +426,8 @@ bool toWannier90::try_read_nnkp(const UnitCell& ucell, const K_Vectors& kv) } else { - throw std::runtime_error("numkpt_nnkp uninitialized in " + std::string(__FILE__) - + " line " + std::to_string(__LINE__)); + throw std::runtime_error("numkpt_nnkp uninitialized in " + std::string(__FILE__) + " line " + + std::to_string(__LINE__)); } for (int ik = 0; ik < numkpt_nnkp; ik++) diff --git a/source/module_io/to_wannier90.h b/source/module_io/to_wannier90.h index 4d93bcb2f9..41f25432ef 100644 --- a/source/module_io/to_wannier90.h +++ b/source/module_io/to_wannier90.h @@ -1,39 +1,37 @@ #ifndef TOWannier90_H #define TOWannier90_H -#include +#include "module_cell/klist.h" +#include "module_hamilt_lcao/hamilt_lcaodft/wavefunc_in_pw.h" +#include "module_psi/psi.h" +#include "source_base/complexmatrix.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/lapack_connector.h" +#include "source_base/matrix.h" +#include "source_base/matrix3.h" +#include "source_base/parallel_common.h" +#include "source_base/parallel_reduce.h" + #include #include #include -#include +#include #include - -#include "module_base/complexmatrix.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/lapack_connector.h" -#include "module_base/matrix.h" -#include "module_base/matrix3.h" -#include "module_cell/klist.h" -#include "module_hamilt_lcao/hamilt_lcaodft/wavefunc_in_pw.h" -#include "module_psi/psi.h" -#include "module_base/parallel_common.h" -#include "module_base/parallel_reduce.h" +#include class toWannier90 { public: toWannier90(); - toWannier90( - const bool &out_wannier_mmn, - const bool &out_wannier_amn, - const bool &out_wannier_unk, - const bool &out_wannier_eig, - const bool &out_wannier_wvfn_formatted, - const std::string &nnkpfile, - const std::string &wannier_spin - ); + toWannier90(const bool& out_wannier_mmn, + const bool& out_wannier_amn, + const bool& out_wannier_unk, + const bool& out_wannier_eig, + const bool& out_wannier_wvfn_formatted, + const std::string& nnkpfile, + const std::string& wannier_spin); ~toWannier90(); void calculate(); @@ -48,26 +46,26 @@ class toWannier90 bool try_read_nnkp(const UnitCell& ucell, const K_Vectors& kv); // Parameters related to k point - int num_kpts=0; - int cal_num_kpts=0; + int num_kpts = 0; + int cal_num_kpts = 0; std::vector> nnlist; std::vector>> nncell; int nntot = 0; int start_k_index = 0; // Parameters related to trial orbitals - int num_wannier=0; // Number of Wannier orbits - ModuleBase::Vector3 *R_centre = nullptr; - int *L = nullptr; - int *m = nullptr; - int *rvalue = nullptr; - ModuleBase::Vector3 *z_axis = nullptr; - ModuleBase::Vector3 *x_axis = nullptr; - double *alfa = nullptr; - int *spin_eig = nullptr; // 'up' state is 1, 'down' state is -1 - ModuleBase::Vector3 *spin_qaxis = nullptr; // spin quantisation axis - std::complex *up_con = nullptr; - std::complex *dn_con = nullptr; + int num_wannier = 0; // Number of Wannier orbits + ModuleBase::Vector3* R_centre = nullptr; + int* L = nullptr; + int* m = nullptr; + int* rvalue = nullptr; + ModuleBase::Vector3* z_axis = nullptr; + ModuleBase::Vector3* x_axis = nullptr; + double* alfa = nullptr; + int* spin_eig = nullptr; // 'up' state is 1, 'down' state is -1 + ModuleBase::Vector3* spin_qaxis = nullptr; // spin quantisation axis + std::complex* up_con = nullptr; + std::complex* dn_con = nullptr; // Wannier control parameters bool out_wannier_mmn = true; @@ -85,10 +83,8 @@ class toWannier90 std::unordered_set exclude_bands; // bool *tag_cal_band = nullptr; int num_bands = 0; - int *cal_band_index = nullptr; + int* cal_band_index = nullptr; bool gamma_only_wannier = false; - - }; #endif diff --git a/source/module_io/to_wannier90_lcao.cpp b/source/module_io/to_wannier90_lcao.cpp index e55b19d8f5..f1333748fc 100644 --- a/source/module_io/to_wannier90_lcao.cpp +++ b/source/module_io/to_wannier90_lcao.cpp @@ -1,15 +1,15 @@ #include "to_wannier90_lcao.h" -#include "module_parameter/parameter.h" #include "fR_overlap.h" -#include "module_base/math_integral.h" -#include "module_base/math_polyint.h" -#include "module_base/math_sphbes.h" -#include "module_base/math_ylmreal.h" -#include "module_base/parallel_reduce.h" -#include "module_base/scalapack_connector.h" #include "module_hamilt_lcao/module_hcontainer/atom_pair.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/math_integral.h" +#include "source_base/math_polyint.h" +#include "source_base/math_sphbes.h" +#include "source_base/math_ylmreal.h" +#include "source_base/parallel_reduce.h" +#include "source_base/scalapack_connector.h" #include #include @@ -30,7 +30,7 @@ toWannier90_LCAO::toWannier90_LCAO(const bool& out_wannier_mmn, out_wannier_wvfn_formatted, nnkpfile, wannier_spin), - orb_(orb) + orb_(orb) { } @@ -47,7 +47,7 @@ void toWannier90_LCAO::calculate(const UnitCell& ucell, { this->ParaV = pv; - read_nnkp(ucell,kv); + read_nnkp(ucell, kv); if (PARAM.inp.nspin == 2) { @@ -116,7 +116,7 @@ void toWannier90_LCAO::calculate(const UnitCell& ucell, initialize_orb_table(ucell); produce_basis_orb(); set_R_coor(ucell, gd); - count_delta_k(ucell,kv); + count_delta_k(ucell, kv); } if (out_wannier_eig) @@ -143,12 +143,12 @@ void toWannier90_LCAO::calculate(const UnitCell& ucell, FR[i].calculate_FR(); } - cal_Mmn(ucell,kv, psi); + cal_Mmn(ucell, kv, psi); } if (out_wannier_amn) { - cal_Amn(ucell,kv, psi); + cal_Amn(ucell, kv, psi); } if (out_wannier_unk) @@ -182,7 +182,7 @@ void toWannier90_LCAO::cal_Mmn(const UnitCell& ucell, const K_Vectors& kv, const int cal_ik = ik + start_k_index; int cal_ikb = ikb + start_k_index; - unkdotkb(ucell,kv, psi, cal_ik, cal_ikb, phase_G, Mmn); + unkdotkb(ucell, kv, psi, cal_ik, cal_ikb, phase_G, Mmn); if (GlobalV::MY_RANK == 0) { @@ -206,9 +206,10 @@ void toWannier90_LCAO::cal_Mmn(const UnitCell& ucell, const K_Vectors& kv, const } } - if (GlobalV::MY_RANK == 0) { + if (GlobalV::MY_RANK == 0) + { mmn_file.close(); -} + } } void toWannier90_LCAO::cal_Amn(const UnitCell& ucell, const K_Vectors& kv, const psi::Psi>& psi) @@ -254,9 +255,10 @@ void toWannier90_LCAO::cal_Amn(const UnitCell& ucell, const K_Vectors& kv, const } } - if (GlobalV::MY_RANK == 0) { + if (GlobalV::MY_RANK == 0) + { Amn_file.close(); -} + } } void toWannier90_LCAO::out_unk(const psi::Psi>& psi) @@ -479,9 +481,10 @@ void toWannier90_LCAO::unkdotkb(const UnitCell& ucell, int count_m = -1; for (int m = 0; m < PARAM.inp.nbands; m++) { - if (exclude_bands.count(m)) { + if (exclude_bands.count(m)) + { continue; -} + } count_m++; int ir = this->ParaV->global2local_row(m); @@ -490,9 +493,10 @@ void toWannier90_LCAO::unkdotkb(const UnitCell& ucell, int count_n = -1; for (int n = 0; n < PARAM.inp.nbands; n++) { - if (exclude_bands.count(n)) { + if (exclude_bands.count(n)) + { continue; -} + } count_n++; int ic = this->ParaV->global2local_col(n); @@ -648,13 +652,15 @@ void toWannier90_LCAO::produce_trial_in_lcao() { int tmp_size = 0; - if (L[i] == -1 || L[i] == -2 || L[i] == -3) { + if (L[i] == -1 || L[i] == -2 || L[i] == -3) + { tmp_size = 2; -} + } - if (L[i] == -4 || L[i] == -5) { + if (L[i] == -4 || L[i] == -5) + { tmp_size = 3; -} + } A_orbs[i].resize(tmp_size); @@ -711,13 +717,15 @@ void toWannier90_LCAO::construct_overlap_table_project() { int tmp_size = 0; - if (L[wannier_index] == -1 || L[wannier_index] == -2 || L[wannier_index] == -3) { + if (L[wannier_index] == -1 || L[wannier_index] == -2 || L[wannier_index] == -3) + { tmp_size = 2; -} + } - if (L[wannier_index] == -4 || L[wannier_index] == -5) { + if (L[wannier_index] == -4 || L[wannier_index] == -5) + { tmp_size = 3; -} + } for (int tmp_L = 0; tmp_L < tmp_size; tmp_L++) { @@ -783,8 +791,7 @@ void toWannier90_LCAO::cal_orbA_overlap_R(const UnitCell& ucell) for (int iR = 0; iR < R_num; iR++) { ModuleBase::Vector3 R_car = R_coor_car[iR]; - ModuleBase::Vector3 orb_center - = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; + ModuleBase::Vector3 orb_center = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; ModuleBase::Vector3 project_orb_center = R_centre[wannier_index] * ucell.lat0; double overlap_o @@ -800,18 +807,19 @@ void toWannier90_LCAO::cal_orbA_overlap_R(const UnitCell& ucell) if (L[wannier_index] == -1) { double tmp_bs2 = 0; - if (m[wannier_index] == 0) { + if (m[wannier_index] == 0) + { tmp_bs2 = bs2; -} - if (m[wannier_index] == -1) { + } + if (m[wannier_index] == -1) + { tmp_bs2 = -bs2; -} + } for (int iR = 0; iR < R_num; iR++) { ModuleBase::Vector3 R_car = R_coor_car[iR]; - ModuleBase::Vector3 orb_center - = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; + ModuleBase::Vector3 orb_center = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; ModuleBase::Vector3 project_orb_center = R_centre[wannier_index] * ucell.lat0; double overlap_s = center2_orb11_A[iw2iorb[orb_index_row]][wannier_index].at(0).cal_overlap( @@ -833,17 +841,16 @@ void toWannier90_LCAO::cal_orbA_overlap_R(const UnitCell& ucell) if (m[wannier_index] == 0 || m[wannier_index] == 1) { double tmp_bs2 = bs2; - if (m[wannier_index] == -1) { + if (m[wannier_index] == -1) + { tmp_bs2 = -bs2; -} + } for (int iR = 0; iR < R_num; iR++) { ModuleBase::Vector3 R_car = R_coor_car[iR]; - ModuleBase::Vector3 orb_center - = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; - ModuleBase::Vector3 project_orb_center - = R_centre[wannier_index] * ucell.lat0; + ModuleBase::Vector3 orb_center = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; + ModuleBase::Vector3 project_orb_center = R_centre[wannier_index] * ucell.lat0; double overlap_s = center2_orb11_A[iw2iorb[orb_index_row]][wannier_index].at(0).cal_overlap( orb_center, @@ -865,10 +872,8 @@ void toWannier90_LCAO::cal_orbA_overlap_R(const UnitCell& ucell) for (int iR = 0; iR < R_num; iR++) { ModuleBase::Vector3 R_car = R_coor_car[iR]; - ModuleBase::Vector3 orb_center - = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; - ModuleBase::Vector3 project_orb_center - = R_centre[wannier_index] * ucell.lat0; + ModuleBase::Vector3 orb_center = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; + ModuleBase::Vector3 project_orb_center = R_centre[wannier_index] * ucell.lat0; double overlap_s = center2_orb11_A[iw2iorb[orb_index_row]][wannier_index].at(0).cal_overlap( orb_center, @@ -908,8 +913,7 @@ void toWannier90_LCAO::cal_orbA_overlap_R(const UnitCell& ucell) for (int iR = 0; iR < R_num; iR++) { ModuleBase::Vector3 R_car = R_coor_car[iR]; - ModuleBase::Vector3 orb_center - = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; + ModuleBase::Vector3 orb_center = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; ModuleBase::Vector3 project_orb_center = R_centre[wannier_index] * ucell.lat0; double overlap_s = center2_orb11_A[iw2iorb[orb_index_row]][wannier_index].at(0).cal_overlap( @@ -942,17 +946,16 @@ void toWannier90_LCAO::cal_orbA_overlap_R(const UnitCell& ucell) if (m[wannier_index] == 0 || m[wannier_index] == 1) { double tmp_bs2 = bs2; - if (m[wannier_index] == -1) { + if (m[wannier_index] == -1) + { tmp_bs2 = -bs2; -} + } for (int iR = 0; iR < R_num; iR++) { ModuleBase::Vector3 R_car = R_coor_car[iR]; - ModuleBase::Vector3 orb_center - = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; - ModuleBase::Vector3 project_orb_center - = R_centre[wannier_index] * ucell.lat0; + ModuleBase::Vector3 orb_center = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; + ModuleBase::Vector3 project_orb_center = R_centre[wannier_index] * ucell.lat0; double overlap_s = center2_orb11_A[iw2iorb[orb_index_row]][wannier_index].at(0).cal_overlap( orb_center, @@ -974,10 +977,8 @@ void toWannier90_LCAO::cal_orbA_overlap_R(const UnitCell& ucell) for (int iR = 0; iR < R_num; iR++) { ModuleBase::Vector3 R_car = R_coor_car[iR]; - ModuleBase::Vector3 orb_center - = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; - ModuleBase::Vector3 project_orb_center - = R_centre[wannier_index] * ucell.lat0; + ModuleBase::Vector3 orb_center = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; + ModuleBase::Vector3 project_orb_center = R_centre[wannier_index] * ucell.lat0; double overlap_s = center2_orb11_A[iw2iorb[orb_index_row]][wannier_index].at(0).cal_overlap( orb_center, @@ -993,17 +994,16 @@ void toWannier90_LCAO::cal_orbA_overlap_R(const UnitCell& ucell) else if (m[wannier_index] == 3 || m[wannier_index] == 4) { double m_pz = 1.0; - if (m[wannier_index] == 4) { + if (m[wannier_index] == 4) + { m_pz = -1.0; -} + } for (int iR = 0; iR < R_num; iR++) { ModuleBase::Vector3 R_car = R_coor_car[iR]; - ModuleBase::Vector3 orb_center - = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; - ModuleBase::Vector3 project_orb_center - = R_centre[wannier_index] * ucell.lat0; + ModuleBase::Vector3 orb_center = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; + ModuleBase::Vector3 project_orb_center = R_centre[wannier_index] * ucell.lat0; double overlap_pz = center2_orb11_A[iw2iorb[orb_index_row]][wannier_index] .at(1) @@ -1032,10 +1032,8 @@ void toWannier90_LCAO::cal_orbA_overlap_R(const UnitCell& ucell) for (int iR = 0; iR < R_num; iR++) { ModuleBase::Vector3 R_car = R_coor_car[iR]; - ModuleBase::Vector3 orb_center - = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; - ModuleBase::Vector3 project_orb_center - = R_centre[wannier_index] * ucell.lat0; + ModuleBase::Vector3 orb_center = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; + ModuleBase::Vector3 project_orb_center = R_centre[wannier_index] * ucell.lat0; double overlap_s = center2_orb11_A[iw2iorb[orb_index_row]][wannier_index].at(0).cal_overlap( orb_center, @@ -1069,10 +1067,8 @@ void toWannier90_LCAO::cal_orbA_overlap_R(const UnitCell& ucell) for (int iR = 0; iR < R_num; iR++) { ModuleBase::Vector3 R_car = R_coor_car[iR]; - ModuleBase::Vector3 orb_center - = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; - ModuleBase::Vector3 project_orb_center - = R_centre[wannier_index] * ucell.lat0; + ModuleBase::Vector3 orb_center = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; + ModuleBase::Vector3 project_orb_center = R_centre[wannier_index] * ucell.lat0; double overlap_s = center2_orb11_A[iw2iorb[orb_index_row]][wannier_index].at(0).cal_overlap( orb_center, @@ -1096,17 +1092,16 @@ void toWannier90_LCAO::cal_orbA_overlap_R(const UnitCell& ucell) { double tmp_pz = -1.0; - if (m[wannier_index] == 5) { + if (m[wannier_index] == 5) + { tmp_pz = 1.0; -} + } for (int iR = 0; iR < R_num; iR++) { ModuleBase::Vector3 R_car = R_coor_car[iR]; - ModuleBase::Vector3 orb_center - = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; - ModuleBase::Vector3 project_orb_center - = R_centre[wannier_index] * ucell.lat0; + ModuleBase::Vector3 orb_center = (ucell.atoms[it1].tau[ia1] + R_car) * ucell.lat0; + ModuleBase::Vector3 project_orb_center = R_centre[wannier_index] * ucell.lat0; double overlap_s = center2_orb11_A[iw2iorb[orb_index_row]][wannier_index].at(0).cal_overlap( orb_center, @@ -1143,9 +1138,10 @@ void toWannier90_LCAO::unkdotA(const K_Vectors& kv, { for (int ib = 0; ib < PARAM.inp.nbands; ib++) { - if (exclude_bands.count(ib)) { + if (exclude_bands.count(ib)) + { continue; -} + } index_band++; int ic = this->ParaV->global2local_col(ib); @@ -1175,9 +1171,10 @@ void toWannier90_LCAO::unkdotA(const K_Vectors& kv, { for (int ib = 0; ib < PARAM.inp.nbands; ib++) { - if (exclude_bands.count(ib)) { + if (exclude_bands.count(ib)) + { continue; -} + } index_band++; int ic = this->ParaV->global2local_col(ib); diff --git a/source/module_io/to_wannier90_lcao.h b/source/module_io/to_wannier90_lcao.h index 547d1ef21e..201b095f75 100644 --- a/source/module_io/to_wannier90_lcao.h +++ b/source/module_io/to_wannier90_lcao.h @@ -1,18 +1,6 @@ #ifndef TOWannier90_LCAO_H #define TOWannier90_LCAO_H -#include "module_base/abfs-vector3_order.h" -#include "module_base/complexmatrix.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/lapack_connector.h" -#include "module_base/matrix.h" -#include "module_base/matrix3.h" -#include "module_base/parallel_reduce.h" -#include "module_base/sph_bessel_recursive.h" -#include "module_base/timer.h" -#include "module_base/vector3.h" -#include "module_base/ylm.h" #include "module_basis/module_ao/ORB_atomic_lm.h" #include "module_basis/module_ao/ORB_gaunt_table.h" #include "module_basis/module_ao/ORB_read.h" @@ -26,6 +14,18 @@ #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_psi/psi.h" #include "single_R_io.h" +#include "source_base/abfs-vector3_order.h" +#include "source_base/complexmatrix.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/lapack_connector.h" +#include "source_base/matrix.h" +#include "source_base/matrix3.h" +#include "source_base/parallel_reduce.h" +#include "source_base/sph_bessel_recursive.h" +#include "source_base/timer.h" +#include "source_base/vector3.h" +#include "source_base/ylm.h" #include "to_wannier90.h" #include @@ -38,10 +38,10 @@ #ifdef __LCAO #include "fR_overlap.h" -#include "module_base/abfs-vector3_order.h" -#include "module_base/math_lebedev_laikov.h" #include "module_hamilt_lcao/module_gint/grid_technique.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "source_base/abfs-vector3_order.h" +#include "source_base/math_lebedev_laikov.h" class Coordinate_3D { @@ -75,8 +75,7 @@ class toWannier90_LCAO : public toWannier90 const bool& out_wannier_wvfn_formatted, const std::string& nnkpfile, const std::string& wannier_spin, - const LCAO_Orbitals& orb - ); + const LCAO_Orbitals& orb); ~toWannier90_LCAO(); void calculate(const UnitCell& ucell, diff --git a/source/module_io/to_wannier90_lcao_in_pw.cpp b/source/module_io/to_wannier90_lcao_in_pw.cpp index e067671465..57f4b75e26 100644 --- a/source/module_io/to_wannier90_lcao_in_pw.cpp +++ b/source/module_io/to_wannier90_lcao_in_pw.cpp @@ -1,44 +1,46 @@ #include "to_wannier90_lcao_in_pw.h" -#include "module_parameter/parameter.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/math_integral.h" -#include "module_base/math_polyint.h" -#include "module_base/math_sphbes.h" -#include "module_base/math_ylmreal.h" -#include "module_base/parallel_reduce.h" #include "binstream.h" - +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" #include "module_psi/psi_initializer_nao.h" +#include "source_base/math_integral.h" +#include "source_base/math_polyint.h" +#include "source_base/math_sphbes.h" +#include "source_base/math_ylmreal.h" +#include "source_base/parallel_reduce.h" #ifdef __LCAO -toWannier90_LCAO_IN_PW::toWannier90_LCAO_IN_PW( - const bool &out_wannier_mmn, - const bool &out_wannier_amn, - const bool &out_wannier_unk, - const bool &out_wannier_eig, - const bool &out_wannier_wvfn_formatted, - const std::string &nnkpfile, - const std::string &wannier_spin -):toWannier90_PW(out_wannier_mmn, out_wannier_amn, out_wannier_unk, out_wannier_eig, out_wannier_wvfn_formatted, nnkpfile, wannier_spin) +toWannier90_LCAO_IN_PW::toWannier90_LCAO_IN_PW(const bool& out_wannier_mmn, + const bool& out_wannier_amn, + const bool& out_wannier_unk, + const bool& out_wannier_eig, + const bool& out_wannier_wvfn_formatted, + const std::string& nnkpfile, + const std::string& wannier_spin) + : toWannier90_PW(out_wannier_mmn, + out_wannier_amn, + out_wannier_unk, + out_wannier_eig, + out_wannier_wvfn_formatted, + nnkpfile, + wannier_spin) { } toWannier90_LCAO_IN_PW::~toWannier90_LCAO_IN_PW() { delete psi_initer_; - delete psi; + delete psi; } -void toWannier90_LCAO_IN_PW::calculate( - UnitCell& ucell, - const ModuleBase::matrix& ekb, - const ModulePW::PW_Basis_K* wfcpw, - const ModulePW::PW_Basis_Big* bigpw, - const Structure_Factor& sf, - const K_Vectors& kv, - const psi::Psi>* psi, - const Parallel_Orbitals *pv -) +void toWannier90_LCAO_IN_PW::calculate(UnitCell& ucell, + const ModuleBase::matrix& ekb, + const ModulePW::PW_Basis_K* wfcpw, + const ModulePW::PW_Basis_Big* bigpw, + const Structure_Factor& sf, + const K_Vectors& kv, + const psi::Psi>* psi, + const Parallel_Orbitals* pv) { this->ParaV = pv; @@ -49,15 +51,15 @@ void toWannier90_LCAO_IN_PW::calculate( this->psi_initer_->initialize(sf_ptr, wfcpw_ptr, &ucell, &kv, 1, nullptr, GlobalV::MY_RANK); this->psi_initer_->tabulate(); delete this->psi; - const int nks_psi = (PARAM.inp.calculation == "nscf" && PARAM.inp.mem_saver == 1)? 1 : wfcpw->nks; - const int nks_psig = (PARAM.inp.basis_type == "pw")? 1 : nks_psi; + const int nks_psi = (PARAM.inp.calculation == "nscf" && PARAM.inp.mem_saver == 1) ? 1 : wfcpw->nks; + const int nks_psig = (PARAM.inp.basis_type == "pw") ? 1 : nks_psi; const int nbands_actual = this->psi_initer_->nbands_start(); - this->psi = new psi::Psi, base_device::DEVICE_CPU>(nks_psig, - nbands_actual, - wfcpw->npwk_max*PARAM.globalv.npol, + this->psi = new psi::Psi, base_device::DEVICE_CPU>(nks_psig, + nbands_actual, + wfcpw->npwk_max * PARAM.globalv.npol, kv.ngk, true); - read_nnkp(ucell,kv); + read_nnkp(ucell, kv); if (PARAM.inp.nspin == 2) { @@ -75,7 +77,7 @@ void toWannier90_LCAO_IN_PW::calculate( } } - psi::Psi> *unk_inLcao = get_unk_from_lcao(ucell,*psi, wfcpw, sf, kv); + psi::Psi>* unk_inLcao = get_unk_from_lcao(ucell, *psi, wfcpw, sf, kv); if (out_wannier_eig) { @@ -86,7 +88,7 @@ void toWannier90_LCAO_IN_PW::calculate( MPI_Barrier(MPI_COMM_WORLD); #endif - // To calculate the Mmn and Amn files, cal_band_index needs to be modified, + // To calculate the Mmn and Amn files, cal_band_index needs to be modified, // because the wave function unk_inLcao only stores the energy bands that need to be calculated. for (int ib = 0; ib < num_bands; ib++) { @@ -111,21 +113,16 @@ void toWannier90_LCAO_IN_PW::calculate( delete unk_inLcao; } -psi::Psi>* toWannier90_LCAO_IN_PW::get_unk_from_lcao( - const UnitCell& ucell, - const psi::Psi>& psi_in, - const ModulePW::PW_Basis_K* wfcpw, - const Structure_Factor& sf, - const K_Vectors& kv -) +psi::Psi>* toWannier90_LCAO_IN_PW::get_unk_from_lcao(const UnitCell& ucell, + const psi::Psi>& psi_in, + const ModulePW::PW_Basis_K* wfcpw, + const Structure_Factor& sf, + const K_Vectors& kv) { // init int npwx = wfcpw->npwk_max; - psi::Psi> *unk_inLcao = new psi::Psi>(num_kpts, - num_bands, - npwx*PARAM.globalv.npol, - kv.ngk, - true); + psi::Psi>* unk_inLcao + = new psi::Psi>(num_kpts, num_bands, npwx * PARAM.globalv.npol, kv.ngk, true); unk_inLcao->zero_out(); // Orbital projection to plane wave @@ -134,9 +131,9 @@ psi::Psi>* toWannier90_LCAO_IN_PW::get_unk_from_lcao( for (int ik = 0; ik < num_kpts; ik++) { int npw = kv.ngk[ik]; - ModuleBase::ComplexMatrix orbital_in_G(PARAM.globalv.nlocal, npwx*PARAM.globalv.npol); + ModuleBase::ComplexMatrix orbital_in_G(PARAM.globalv.nlocal, npwx * PARAM.globalv.npol); // Wavefunc_in_pw::produce_local_basis_in_pw(ik, wfcpw, sf, orbital_in_G, table_local); - //produce_local_basis_in_pw(ik, wfcpw, sf, orbital_in_G, table_local); + // produce_local_basis_in_pw(ik, wfcpw, sf, orbital_in_G, table_local); nao_G_expansion(ik, wfcpw, orbital_in_G); ModuleBase::ComplexMatrix lcao_wfc_global; @@ -150,7 +147,7 @@ psi::Psi>* toWannier90_LCAO_IN_PW::get_unk_from_lcao( { for (int iw = 0; iw < PARAM.globalv.nlocal; iw++) { - unk_inLcao[0](ik, ib, ig) += lcao_wfc_global(ib, iw) * orbital_in_G(iw, ig); + unk_inLcao[0](ik, ib, ig) += lcao_wfc_global(ib, iw) * orbital_in_G(iw, ig); } } @@ -187,15 +184,16 @@ psi::Psi>* toWannier90_LCAO_IN_PW::get_unk_from_lcao( int basis_num = PARAM.globalv.nlocal / 2; for (int iw = 0; iw < basis_num; iw++) { - unk_inLcao[0](ik, ib, ig) += lcao_wfc_global(ib, 2*iw) * orbital_in_G(iw, ig); - unk_inLcao[0](ik, ib, ig+npwx) += lcao_wfc_global(ib, 2*iw+1) * orbital_in_G(iw, ig); + unk_inLcao[0](ik, ib, ig) += lcao_wfc_global(ib, 2 * iw) * orbital_in_G(iw, ig); + unk_inLcao[0](ik, ib, ig + npwx) += lcao_wfc_global(ib, 2 * iw + 1) * orbital_in_G(iw, ig); } } std::complex anorm(0.0, 0.0); for (int ig = 0; ig < npw; ig++) { - anorm = anorm + conj(unk_inLcao[0](ik, ib, ig)) * unk_inLcao[0](ik, ib, ig) + conj(unk_inLcao[0](ik, ib, ig+npwx)) * unk_inLcao[0](ik, ib, ig+npwx); + anorm = anorm + conj(unk_inLcao[0](ik, ib, ig)) * unk_inLcao[0](ik, ib, ig) + + conj(unk_inLcao[0](ik, ib, ig + npwx)) * unk_inLcao[0](ik, ib, ig + npwx); } #ifdef __MPI @@ -205,11 +203,10 @@ psi::Psi>* toWannier90_LCAO_IN_PW::get_unk_from_lcao( for (int ig = 0; ig < npw; ig++) { unk_inLcao[0](ik, ib, ig) = unk_inLcao[0](ik, ib, ig) / sqrt(anorm); - unk_inLcao[0](ik, ib, ig+npwx) = unk_inLcao[0](ik, ib, ig+npwx) / sqrt(anorm); + unk_inLcao[0](ik, ib, ig + npwx) = unk_inLcao[0](ik, ib, ig + npwx) / sqrt(anorm); } } } - } #ifdef __MPI @@ -219,17 +216,15 @@ psi::Psi>* toWannier90_LCAO_IN_PW::get_unk_from_lcao( return unk_inLcao; } -void toWannier90_LCAO_IN_PW::nao_G_expansion( - const int& ik, - const ModulePW::PW_Basis_K* wfcpw, - ModuleBase::ComplexMatrix& psi -) +void toWannier90_LCAO_IN_PW::nao_G_expansion(const int& ik, + const ModulePW::PW_Basis_K* wfcpw, + ModuleBase::ComplexMatrix& psi) { int npwx = wfcpw->npwk_max; this->psi->fix_k(ik); this->psi_initer_->init_psig(this->psi->get_pointer(), ik); int nbands = PARAM.globalv.nlocal; - int nbasis = npwx*PARAM.globalv.npol; + int nbasis = npwx * PARAM.globalv.npol; for (int ib = 0; ib < nbands; ib++) { for (int ig = 0; ig < nbasis; ig++) @@ -239,11 +234,9 @@ void toWannier90_LCAO_IN_PW::nao_G_expansion( } } -void toWannier90_LCAO_IN_PW::get_lcao_wfc_global_ik( - const int ik, - const psi::Psi>& psi_in, - ModuleBase::ComplexMatrix &lcao_wfc_global -) +void toWannier90_LCAO_IN_PW::get_lcao_wfc_global_ik(const int ik, + const psi::Psi>& psi_in, + ModuleBase::ComplexMatrix& lcao_wfc_global) { lcao_wfc_global.create(num_bands, PARAM.globalv.nlocal); @@ -252,8 +245,10 @@ void toWannier90_LCAO_IN_PW::get_lcao_wfc_global_ik( int global_row_index = 0; for (int ib = 0; ib < PARAM.inp.nbands; ib++) { - if (exclude_bands.count(ib)) { continue; -} + if (exclude_bands.count(ib)) + { + continue; + } count_b++; int ic = this->ParaV->global2local_col(ib); @@ -271,6 +266,5 @@ void toWannier90_LCAO_IN_PW::get_lcao_wfc_global_ik( #ifdef __MPI Parallel_Reduce::reduce_all(lcao_wfc_global.c, lcao_wfc_global.size); #endif - } #endif diff --git a/source/module_io/to_wannier90_lcao_in_pw.h b/source/module_io/to_wannier90_lcao_in_pw.h index 16bccd20e3..efb3573f3f 100644 --- a/source/module_io/to_wannier90_lcao_in_pw.h +++ b/source/module_io/to_wannier90_lcao_in_pw.h @@ -1,17 +1,6 @@ #ifndef W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_MODULE_IO_TO_WANNIER90_LCAO_IN_PW_H #define W_ABACUS_DEVELOP_ABACUS_DEVELOP_SOURCE_MODULE_IO_TO_WANNIER90_LCAO_IN_PW_H -#include "module_base/abfs-vector3_order.h" -#include "module_base/complexmatrix.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/lapack_connector.h" -#include "module_base/matrix.h" -#include "module_base/matrix3.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" -#include "module_base/vector3.h" -#include "module_base/ylm.h" #include "module_basis/module_ao/ORB_atomic_lm.h" #include "module_basis/module_ao/ORB_gaunt_table.h" #include "module_basis/module_ao/ORB_read.h" @@ -20,6 +9,17 @@ #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_psi/psi.h" #include "single_R_io.h" +#include "source_base/abfs-vector3_order.h" +#include "source_base/complexmatrix.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/lapack_connector.h" +#include "source_base/matrix.h" +#include "source_base/matrix3.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "source_base/vector3.h" +#include "source_base/ylm.h" #include "to_wannier90.h" #include "to_wannier90_pw.h" diff --git a/source/module_io/to_wannier90_pw.cpp b/source/module_io/to_wannier90_pw.cpp index 1fa81a89aa..8adcc37899 100644 --- a/source/module_io/to_wannier90_pw.cpp +++ b/source/module_io/to_wannier90_pw.cpp @@ -1,42 +1,43 @@ #include "to_wannier90_pw.h" -#include "module_parameter/parameter.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/math_integral.h" -#include "module_base/math_polyint.h" -#include "module_base/math_sphbes.h" -#include "module_base/math_ylmreal.h" -#include "module_base/parallel_reduce.h" #include "binstream.h" - -toWannier90_PW::toWannier90_PW( - const bool &out_wannier_mmn, - const bool &out_wannier_amn, - const bool &out_wannier_unk, - const bool &out_wannier_eig, - const bool &out_wannier_wvfn_formatted, - const std::string &nnkpfile, - const std::string &wannier_spin -):toWannier90(out_wannier_mmn, out_wannier_amn, out_wannier_unk, out_wannier_eig, out_wannier_wvfn_formatted, nnkpfile, wannier_spin) +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/math_integral.h" +#include "source_base/math_polyint.h" +#include "source_base/math_sphbes.h" +#include "source_base/math_ylmreal.h" +#include "source_base/parallel_reduce.h" + +toWannier90_PW::toWannier90_PW(const bool& out_wannier_mmn, + const bool& out_wannier_amn, + const bool& out_wannier_unk, + const bool& out_wannier_eig, + const bool& out_wannier_wvfn_formatted, + const std::string& nnkpfile, + const std::string& wannier_spin) + : toWannier90(out_wannier_mmn, + out_wannier_amn, + out_wannier_unk, + out_wannier_eig, + out_wannier_wvfn_formatted, + nnkpfile, + wannier_spin) { - } toWannier90_PW::~toWannier90_PW() { - } -void toWannier90_PW::calculate( - const UnitCell& ucell, - const ModuleBase::matrix& ekb, - const ModulePW::PW_Basis_K* wfcpw, - const ModulePW::PW_Basis_Big* bigpw, - const K_Vectors& kv, - const psi::Psi>* psi -) +void toWannier90_PW::calculate(const UnitCell& ucell, + const ModuleBase::matrix& ekb, + const ModulePW::PW_Basis_K* wfcpw, + const ModulePW::PW_Basis_Big* bigpw, + const K_Vectors& kv, + const psi::Psi>* psi) { - read_nnkp(ucell,kv); + read_nnkp(ucell, kv); if (PARAM.inp.nspin == 2) { @@ -73,19 +74,14 @@ void toWannier90_PW::calculate( { out_unk(*psi, wfcpw, bigpw); } - } void toWannier90_PW::set_tpiba_omega(const double& tpiba, const double& omega) { this->tpiba = &tpiba; this->omega = ω - } -void toWannier90_PW::cal_Mmn( - const psi::Psi>& psi_pw, - const ModulePW::PW_Basis_K* wfcpw -) +void toWannier90_PW::cal_Mmn(const psi::Psi>& psi_pw, const ModulePW::PW_Basis_K* wfcpw) { std::ofstream mmn_file; @@ -120,28 +116,24 @@ void toWannier90_PW::cal_Mmn( { for (int m = 0; m < num_bands; m++) { - mmn_file << std::setw(18) << std::setprecision(12) << std::showpoint << std::fixed << Mmn(m, n).real() - << std::setw(18) << std::setprecision(12) << std::showpoint << std::fixed + mmn_file << std::setw(18) << std::setprecision(12) << std::showpoint << std::fixed + << Mmn(m, n).real() << std::setw(18) << std::setprecision(12) << std::showpoint + << std::fixed << Mmn(m, n).imag() // jingan test // << " " << std::setw(12) << std::setprecision(9) << std::abs(Mmn(m, n)) << std::endl; - } + } } } - } } - if (GlobalV::MY_RANK == 0) mmn_file.close(); - + if (GlobalV::MY_RANK == 0) + mmn_file.close(); } - -void toWannier90_PW::cal_Amn( - const psi::Psi>& psi_pw, - const ModulePW::PW_Basis_K* wfcpw -) +void toWannier90_PW::cal_Amn(const psi::Psi>& psi_pw, const ModulePW::PW_Basis_K* wfcpw) { std::vector radial_in_q; gen_radial_function_in_q(radial_in_q); @@ -170,26 +162,25 @@ void toWannier90_PW::cal_Amn( for (int ib_w = 0; ib_w < num_bands; ib_w++) { Amn_file << std::setw(5) << ib_w + 1 << std::setw(5) << iw + 1 << std::setw(5) - << ik + 1 - start_k_index << std::setw(18) << std::showpoint << std::fixed << std::setprecision(12) - << Amn(ib_w, iw).real() << std::setw(18) << std::showpoint << std::fixed << std::setprecision(12) - << Amn(ib_w, iw).imag() - // jingan test - //<< " " << std::setw(18) << std::setprecision(13) << std::abs(Amn(ib_w, iw)) - << std::endl; + << ik + 1 - start_k_index << std::setw(18) << std::showpoint << std::fixed + << std::setprecision(12) << Amn(ib_w, iw).real() << std::setw(18) << std::showpoint + << std::fixed << std::setprecision(12) + << Amn(ib_w, iw).imag() + // jingan test + //<< " " << std::setw(18) << std::setprecision(13) << std::abs(Amn(ib_w, iw)) + << std::endl; } } } } - if (GlobalV::MY_RANK == 0) Amn_file.close(); - + if (GlobalV::MY_RANK == 0) + Amn_file.close(); } -void toWannier90_PW::out_unk( - const psi::Psi>& psi_pw, - const ModulePW::PW_Basis_K* wfcpw, - const ModulePW::PW_Basis_Big* bigpw -) +void toWannier90_PW::out_unk(const psi::Psi>& psi_pw, + const ModulePW::PW_Basis_K* wfcpw, + const ModulePW::PW_Basis_Big* bigpw) { const bool wvfn_formatted = out_wannier_wvfn_formatted; @@ -197,20 +188,20 @@ void toWannier90_PW::out_unk( // which_ip: found iz belongs to which ip. std::vector which_ip(wfcpw->nz); ModuleBase::GlobalFunc::ZEROS(which_ip.data(), wfcpw->nz); - + for (int ip = 0; ip < GlobalV::NPROC_IN_POOL; ip++) { int iz = wfcpw->startz[ip]; for (int index = 0; index < wfcpw->numz[ip]; index++) { - which_ip[iz+index] = ip; + which_ip[iz + index] = ip; } } // only do in the first pool. std::complex* porter = new std::complex[wfcpw->nrxx]; int nxy = wfcpw->nx * wfcpw->ny; - std::complex *zpiece = new std::complex[nxy]; + std::complex* zpiece = new std::complex[nxy]; if (GlobalV::MY_POOL == 0) { @@ -218,23 +209,24 @@ void toWannier90_PW::out_unk( { std::ofstream unkfile; Binstream unkfile_b; - + if (GlobalV::RANK_IN_POOL == 0) { - + std::stringstream name; if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 4) { - name << PARAM.globalv.global_out_dir << "UNK" << std::setw(5) << std::setfill('0') << ik + 1 << ".1"; + name << PARAM.globalv.global_out_dir << "UNK" << std::setw(5) << std::setfill('0') << ik + 1 + << ".1"; } else if (PARAM.inp.nspin == 2) { if (wannier_spin == "up") name << PARAM.globalv.global_out_dir << "UNK" << std::setw(5) << std::setfill('0') - << ik + 1 - start_k_index << ".1"; + << ik + 1 - start_k_index << ".1"; else if (wannier_spin == "down") name << PARAM.globalv.global_out_dir << "UNK" << std::setw(5) << std::setfill('0') - << ik + 1 - start_k_index << ".2"; + << ik + 1 - start_k_index << ".2"; } if (wvfn_formatted) { @@ -306,10 +298,11 @@ void toWannier90_PW::out_unk( { for (int ix = 0; ix < wfcpw->nx; ix++) { - unkfile << std::setw(20) << std::setprecision(9) << std::setiosflags(std::ios::scientific) - << zpiece[ix * wfcpw->ny + iy].real() << std::setw(20) << std::setprecision(9) - << std::setiosflags(std::ios::scientific) << zpiece[ix * wfcpw->ny + iy].imag() - << std::endl; + unkfile << std::setw(20) << std::setprecision(9) + << std::setiosflags(std::ios::scientific) + << zpiece[ix * wfcpw->ny + iy].real() << std::setw(20) + << std::setprecision(9) << std::setiosflags(std::ios::scientific) + << zpiece[ix * wfcpw->ny + iy].imag() << std::endl; } } } @@ -319,7 +312,8 @@ void toWannier90_PW::out_unk( { for (int ix = 0; ix < wfcpw->nx; ix++) { - unkfile_b << zpiece[ix * wfcpw->ny + iy].real() << zpiece[ix * wfcpw->ny + iy].imag(); + unkfile_b << zpiece[ix * wfcpw->ny + iy].real() + << zpiece[ix * wfcpw->ny + iy].imag(); } } } @@ -350,18 +344,14 @@ void toWannier90_PW::out_unk( delete[] zpiece; #endif - } - -void toWannier90_PW::unkdotkb( - const psi::Psi>& psi_pw, - const ModulePW::PW_Basis_K* wfcpw, - const int& cal_ik, - const int& cal_ikb, - const ModuleBase::Vector3 G, - ModuleBase::ComplexMatrix &Mmn -) +void toWannier90_PW::unkdotkb(const psi::Psi>& psi_pw, + const ModulePW::PW_Basis_K* wfcpw, + const int& cal_ik, + const int& cal_ikb, + const ModuleBase::Vector3 G, + ModuleBase::ComplexMatrix& Mmn) { Mmn.create(num_bands, num_bands); @@ -422,7 +412,8 @@ void toWannier90_PW::unkdotkb( // Can be accelerated using lapack for (int ig = 0; ig < pwNumberMax; ig++) { - result_tem = result_tem + conj(psir_up[ig]) * psi_pw(cal_ikb, in, ig) + conj(psir_dn[ig]) * psi_pw(cal_ikb, in, ig+pwNumberMax); + result_tem = result_tem + conj(psir_up[ig]) * psi_pw(cal_ikb, in, ig) + + conj(psir_dn[ig]) * psi_pw(cal_ikb, in, ig + pwNumberMax); } #ifdef __MPI Parallel_Reduce::reduce_all(result_tem); @@ -433,12 +424,10 @@ void toWannier90_PW::unkdotkb( { // GlobalV::ofs_running << "gamma only test" << std::endl; } - } delete[] psir_up; delete[] psir_dn; - } else { @@ -478,28 +467,24 @@ void toWannier90_PW::unkdotkb( { // GlobalV::ofs_running << "gamma only test" << std::endl; } - } delete[] psir; - } delete[] phase; - } - } -void toWannier90_PW::gen_radial_function_in_q(std::vector &radial_in_q) +void toWannier90_PW::gen_radial_function_in_q(std::vector& radial_in_q) { // The radial function is Fourier transformed into the q-space. radial_in_q.resize(num_wannier); - double *r = new double[mesh_r]; - double *dr = new double[mesh_r]; - double *psi = new double[mesh_r]; - double *psir = new double[mesh_r]; + double* r = new double[mesh_r]; + double* dr = new double[mesh_r]; + double* psi = new double[mesh_r]; + double* psir = new double[mesh_r]; for (int wannier_index = 0; wannier_index < num_wannier; wannier_index++) { @@ -535,8 +520,8 @@ void toWannier90_PW::gen_radial_function_in_q(std::vector &r for (int ir = 0; ir < mesh_r; ir++) { psi[ir] = sqrt(4.0 / 27.0) * alfa32 - * (1.0 - 2.0 / 3.0 * alfa_new * r[ir] + 2.0 / 27.0 * pow(alfa_new, 2.0) * r[ir] * r[ir]) - * exp(-alfa_new * r[ir] * 1.0 / 3.0); + * (1.0 - 2.0 / 3.0 * alfa_new * r[ir] + 2.0 / 27.0 * pow(alfa_new, 2.0) * r[ir] * r[ir]) + * exp(-alfa_new * r[ir] * 1.0 / 3.0); } } @@ -545,7 +530,7 @@ void toWannier90_PW::gen_radial_function_in_q(std::vector &r psir[ir] = psi[ir] * r[ir]; } - auto &tmp_radial = radial_in_q[wannier_index]; + auto& tmp_radial = radial_in_q[wannier_index]; if (L[wannier_index] >= 0) { tmp_radial.create(1, PARAM.globalv.nqx); @@ -555,34 +540,32 @@ void toWannier90_PW::gen_radial_function_in_q(std::vector &r { int tmp_size = 0; - if (L[wannier_index] == -1 || L[wannier_index] == -2 || L[wannier_index] == -3) tmp_size = 2; + if (L[wannier_index] == -1 || L[wannier_index] == -2 || L[wannier_index] == -3) + tmp_size = 2; - if (L[wannier_index] == -4 || L[wannier_index] == -5) tmp_size = 3; + if (L[wannier_index] == -4 || L[wannier_index] == -5) + tmp_size = 3; tmp_radial.create(tmp_size, PARAM.globalv.nqx); for (int tmp_L = 0; tmp_L < tmp_size; tmp_L++) { - integral(mesh_r, psir, r, dr, tmp_L, tmp_radial.c+tmp_L*PARAM.globalv.nqx); + integral(mesh_r, psir, r, dr, tmp_L, tmp_radial.c + tmp_L * PARAM.globalv.nqx); } } - } delete[] r; delete[] dr; delete[] psi; delete[] psir; - } -void toWannier90_PW::produce_trial_in_pw( - const psi::Psi>& psi_pw, - const int& ik, - const ModulePW::PW_Basis_K* wfcpw, - const std::vector &radial_in_q, - ModuleBase::ComplexMatrix& trial_orbitals_k -) +void toWannier90_PW::produce_trial_in_pw(const psi::Psi>& psi_pw, + const int& ik, + const ModulePW::PW_Basis_K* wfcpw, + const std::vector& radial_in_q, + ModuleBase::ComplexMatrix& trial_orbitals_k) { const int npw = wfcpw->npwk[ik]; const int npwx = wfcpw->npwk_max; @@ -592,7 +575,7 @@ void toWannier90_PW::produce_trial_in_pw( const int total_lm = 16; ModuleBase::matrix ylm(total_lm, npw); - ModuleBase::Vector3 *gk = new ModuleBase::Vector3[npw]; + ModuleBase::Vector3* gk = new ModuleBase::Vector3[npw]; for (int ig = 0; ig < npw; ig++) { gk[ig] = wfcpw->getgpluskcar(ik, ig); @@ -600,9 +583,9 @@ void toWannier90_PW::produce_trial_in_pw( ModuleBase::YlmReal::Ylm_Real(total_lm, npw, gk, ylm); - // Keep it consistent with the definition of spherical harmonic functions in Wannier90 + // Keep it consistent with the definition of spherical harmonic functions in Wannier90 std::vector need_inv = {2, 3, 5, 6, 14, 15}; - for (auto index : need_inv) + for (auto index: need_inv) { for (int ig = 0; ig < npw; ig++) { @@ -616,12 +599,18 @@ void toWannier90_PW::produce_trial_in_pw( bs6 = 1.0 / sqrt(6.0); bs12 = 1.0 / sqrt(12.0); - std::complex *sf = new std::complex[npw]; + std::complex* sf = new std::complex[npw]; for (int wannier_index = 0; wannier_index < num_wannier; wannier_index++) { if (L[wannier_index] >= 0) { - get_trial_orbitals_lm_k(L[wannier_index], m[wannier_index], ylm, gk, npw, radial_in_q[wannier_index].c, trial_orbitals_k.c + wannier_index*npwx); + get_trial_orbitals_lm_k(L[wannier_index], + m[wannier_index], + ylm, + gk, + npw, + radial_in_q[wannier_index].c, + trial_orbitals_k.c + wannier_index * npwx); for (int ig = 0; ig < npw; ig++) { @@ -630,28 +619,29 @@ void toWannier90_PW::produce_trial_in_pw( trial_orbitals_k(wannier_index, ig) = sf[ig] * trial_orbitals_k(wannier_index, ig); } - } else { if (L[wannier_index] == -1) { double tmp_bs2 = 0; - if (m[wannier_index] == 0) tmp_bs2 = bs2; - if (m[wannier_index] == 1) tmp_bs2 = -bs2; + if (m[wannier_index] == 0) + tmp_bs2 = bs2; + if (m[wannier_index] == 1) + tmp_bs2 = -bs2; - std::complex *orb_s = new std::complex[npw]; - std::complex *orb_px = new std::complex[npw]; + std::complex* orb_s = new std::complex[npw]; + std::complex* orb_px = new std::complex[npw]; get_trial_orbitals_lm_k(0, 0, ylm, gk, npw, radial_in_q[wannier_index].c, orb_s); - get_trial_orbitals_lm_k(1, 1, ylm, gk, npw, radial_in_q[wannier_index].c+PARAM.globalv.nqx, orb_px); + get_trial_orbitals_lm_k(1, 1, ylm, gk, npw, radial_in_q[wannier_index].c + PARAM.globalv.nqx, orb_px); for (int ig = 0; ig < npw; ig++) { const double arg = (gk[ig] * R_centre[wannier_index]) * ModuleBase::TWO_PI; sf[ig] = std::complex(cos(arg), -sin(arg)); - trial_orbitals_k(wannier_index, ig) = sf[ig] * (bs2 * orb_s[ig] + tmp_bs2 * orb_px[ig]); + trial_orbitals_k(wannier_index, ig) = sf[ig] * (bs2 * orb_s[ig] + tmp_bs2 * orb_px[ig]); } delete[] orb_s; @@ -663,22 +653,36 @@ void toWannier90_PW::produce_trial_in_pw( if (m[wannier_index] == 0 || m[wannier_index] == 1) { double tmp_bs2 = bs2; - if (m[wannier_index] == 1) tmp_bs2 = -bs2; + if (m[wannier_index] == 1) + tmp_bs2 = -bs2; - std::complex *orb_s = new std::complex[npw]; - std::complex *orb_px = new std::complex[npw]; - std::complex *orb_py = new std::complex[npw]; + std::complex* orb_s = new std::complex[npw]; + std::complex* orb_px = new std::complex[npw]; + std::complex* orb_py = new std::complex[npw]; get_trial_orbitals_lm_k(0, 0, ylm, gk, npw, radial_in_q[wannier_index].c, orb_s); - get_trial_orbitals_lm_k(1, 1, ylm, gk, npw, radial_in_q[wannier_index].c+PARAM.globalv.nqx, orb_px); - get_trial_orbitals_lm_k(1, 2, ylm, gk, npw, radial_in_q[wannier_index].c+PARAM.globalv.nqx, orb_py); + get_trial_orbitals_lm_k(1, + 1, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + PARAM.globalv.nqx, + orb_px); + get_trial_orbitals_lm_k(1, + 2, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + PARAM.globalv.nqx, + orb_py); for (int ig = 0; ig < npw; ig++) { const double arg = (gk[ig] * R_centre[wannier_index]) * ModuleBase::TWO_PI; sf[ig] = std::complex(cos(arg), -sin(arg)); - trial_orbitals_k(wannier_index, ig) = sf[ig] * (bs3 * orb_s[ig] - bs6 * orb_px[ig] + tmp_bs2 * orb_py[ig]); + trial_orbitals_k(wannier_index, ig) + = sf[ig] * (bs3 * orb_s[ig] - bs6 * orb_px[ig] + tmp_bs2 * orb_py[ig]); } delete[] orb_s; @@ -687,10 +691,16 @@ void toWannier90_PW::produce_trial_in_pw( } else if (m[wannier_index] == 2) { - std::complex *orb_s = new std::complex[npw]; - std::complex *orb_px = new std::complex[npw]; + std::complex* orb_s = new std::complex[npw]; + std::complex* orb_px = new std::complex[npw]; get_trial_orbitals_lm_k(0, 0, ylm, gk, npw, radial_in_q[wannier_index].c, orb_s); - get_trial_orbitals_lm_k(1, 1, ylm, gk, npw, radial_in_q[wannier_index].c+PARAM.globalv.nqx, orb_px); + get_trial_orbitals_lm_k(1, + 1, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + PARAM.globalv.nqx, + orb_px); for (int ig = 0; ig < npw; ig++) { @@ -727,22 +737,23 @@ void toWannier90_PW::produce_trial_in_pw( m_py = -1.0; } - std::complex *orb_s = new std::complex[npw]; - std::complex *orb_px = new std::complex[npw]; - std::complex *orb_py = new std::complex[npw]; - std::complex *orb_pz = new std::complex[npw]; + std::complex* orb_s = new std::complex[npw]; + std::complex* orb_px = new std::complex[npw]; + std::complex* orb_py = new std::complex[npw]; + std::complex* orb_pz = new std::complex[npw]; get_trial_orbitals_lm_k(0, 0, ylm, gk, npw, radial_in_q[wannier_index].c, orb_s); - get_trial_orbitals_lm_k(1, 1, ylm, gk, npw, radial_in_q[wannier_index].c+PARAM.globalv.nqx, orb_px); - get_trial_orbitals_lm_k(1, 2, ylm, gk, npw, radial_in_q[wannier_index].c+PARAM.globalv.nqx, orb_py); - get_trial_orbitals_lm_k(1, 0, ylm, gk, npw, radial_in_q[wannier_index].c+PARAM.globalv.nqx, orb_pz); + get_trial_orbitals_lm_k(1, 1, ylm, gk, npw, radial_in_q[wannier_index].c + PARAM.globalv.nqx, orb_px); + get_trial_orbitals_lm_k(1, 2, ylm, gk, npw, radial_in_q[wannier_index].c + PARAM.globalv.nqx, orb_py); + get_trial_orbitals_lm_k(1, 0, ylm, gk, npw, radial_in_q[wannier_index].c + PARAM.globalv.nqx, orb_pz); for (int ig = 0; ig < npw; ig++) { const double arg = (gk[ig] * R_centre[wannier_index]) * ModuleBase::TWO_PI; sf[ig] = std::complex(cos(arg), -sin(arg)); - trial_orbitals_k(wannier_index, ig) = sf[ig] * 0.5 * (orb_s[ig] + m_px * orb_px[ig] + m_py * orb_py[ig] + m_pz * orb_pz[ig]); + trial_orbitals_k(wannier_index, ig) + = sf[ig] * 0.5 * (orb_s[ig] + m_px * orb_px[ig] + m_py * orb_py[ig] + m_pz * orb_pz[ig]); } delete[] orb_s; @@ -750,28 +761,42 @@ void toWannier90_PW::produce_trial_in_pw( delete[] orb_py; delete[] orb_pz; } - + if (L[wannier_index] == -4) { if (m[wannier_index] == 0 || m[wannier_index] == 1) { double tmp_bs2 = bs2; - if (m[wannier_index] == 1) tmp_bs2 = -bs2; + if (m[wannier_index] == 1) + tmp_bs2 = -bs2; - std::complex *orb_s = new std::complex[npw]; - std::complex *orb_px = new std::complex[npw]; - std::complex *orb_py = new std::complex[npw]; + std::complex* orb_s = new std::complex[npw]; + std::complex* orb_px = new std::complex[npw]; + std::complex* orb_py = new std::complex[npw]; get_trial_orbitals_lm_k(0, 0, ylm, gk, npw, radial_in_q[wannier_index].c, orb_s); - get_trial_orbitals_lm_k(1, 1, ylm, gk, npw, radial_in_q[wannier_index].c+PARAM.globalv.nqx, orb_px); - get_trial_orbitals_lm_k(1, 2, ylm, gk, npw, radial_in_q[wannier_index].c+PARAM.globalv.nqx, orb_py); + get_trial_orbitals_lm_k(1, + 1, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + PARAM.globalv.nqx, + orb_px); + get_trial_orbitals_lm_k(1, + 2, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + PARAM.globalv.nqx, + orb_py); for (int ig = 0; ig < npw; ig++) { const double arg = (gk[ig] * R_centre[wannier_index]) * ModuleBase::TWO_PI; sf[ig] = std::complex(cos(arg), -sin(arg)); - trial_orbitals_k(wannier_index, ig) = sf[ig] * (bs3 * orb_s[ig] - bs6 * orb_px[ig] + tmp_bs2 * orb_py[ig]); + trial_orbitals_k(wannier_index, ig) + = sf[ig] * (bs3 * orb_s[ig] - bs6 * orb_px[ig] + tmp_bs2 * orb_py[ig]); } delete[] orb_s; @@ -780,11 +805,17 @@ void toWannier90_PW::produce_trial_in_pw( } else if (m[wannier_index] == 2) { - std::complex *orb_s = new std::complex[npw]; - std::complex *orb_px = new std::complex[npw]; + std::complex* orb_s = new std::complex[npw]; + std::complex* orb_px = new std::complex[npw]; get_trial_orbitals_lm_k(0, 0, ylm, gk, npw, radial_in_q[wannier_index].c, orb_s); - get_trial_orbitals_lm_k(1, 1, ylm, gk, npw, radial_in_q[wannier_index].c+PARAM.globalv.nqx, orb_px); + get_trial_orbitals_lm_k(1, + 1, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + PARAM.globalv.nqx, + orb_px); for (int ig = 0; ig < npw; ig++) { @@ -795,18 +826,31 @@ void toWannier90_PW::produce_trial_in_pw( } delete[] orb_s; - delete[] orb_px; + delete[] orb_px; } else if (m[wannier_index] == 3 || m[wannier_index] == 4) { double m_pz = 1.0; - if (m[wannier_index] == 4) m_pz = -1.0; - - std::complex *orb_pz = new std::complex[npw]; - std::complex *orb_dz2 = new std::complex[npw]; - - get_trial_orbitals_lm_k(1, 0, ylm, gk, npw, radial_in_q[wannier_index].c+PARAM.globalv.nqx, orb_pz); - get_trial_orbitals_lm_k(2, 0, ylm, gk, npw, radial_in_q[wannier_index].c+2*PARAM.globalv.nqx, orb_dz2); + if (m[wannier_index] == 4) + m_pz = -1.0; + + std::complex* orb_pz = new std::complex[npw]; + std::complex* orb_dz2 = new std::complex[npw]; + + get_trial_orbitals_lm_k(1, + 0, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + PARAM.globalv.nqx, + orb_pz); + get_trial_orbitals_lm_k(2, + 0, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + 2 * PARAM.globalv.nqx, + orb_dz2); for (int ig = 0; ig < npw; ig++) { @@ -834,22 +878,42 @@ void toWannier90_PW::produce_trial_in_pw( tmp_bs2 = bs2; } - std::complex *orb_s = new std::complex[npw]; - std::complex *orb_px = new std::complex[npw]; - std::complex *orb_dz2 = new std::complex[npw]; - std::complex *orb_dx2_y2 = new std::complex[npw]; + std::complex* orb_s = new std::complex[npw]; + std::complex* orb_px = new std::complex[npw]; + std::complex* orb_dz2 = new std::complex[npw]; + std::complex* orb_dx2_y2 = new std::complex[npw]; get_trial_orbitals_lm_k(0, 0, ylm, gk, npw, radial_in_q[wannier_index].c, orb_s); - get_trial_orbitals_lm_k(1, 1, ylm, gk, npw, radial_in_q[wannier_index].c+PARAM.globalv.nqx, orb_px); - get_trial_orbitals_lm_k(2, 0, ylm, gk, npw, radial_in_q[wannier_index].c+2*PARAM.globalv.nqx, orb_dz2); - get_trial_orbitals_lm_k(2, 3, ylm, gk, npw, radial_in_q[wannier_index].c+2*PARAM.globalv.nqx, orb_dx2_y2); + get_trial_orbitals_lm_k(1, + 1, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + PARAM.globalv.nqx, + orb_px); + get_trial_orbitals_lm_k(2, + 0, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + 2 * PARAM.globalv.nqx, + orb_dz2); + get_trial_orbitals_lm_k(2, + 3, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + 2 * PARAM.globalv.nqx, + orb_dx2_y2); for (int ig = 0; ig < npw; ig++) { const double arg = (gk[ig] * R_centre[wannier_index]) * ModuleBase::TWO_PI; sf[ig] = std::complex(cos(arg), -sin(arg)); - trial_orbitals_k(wannier_index, ig) = sf[ig] * (bs6 * orb_s[ig] + tmp_bs2 * orb_px[ig] + tmp_bs12 * orb_dz2[ig] + tmp_d * orb_dx2_y2[ig]); + trial_orbitals_k(wannier_index, ig) = sf[ig] + * (bs6 * orb_s[ig] + tmp_bs2 * orb_px[ig] + + tmp_bs12 * orb_dz2[ig] + tmp_d * orb_dx2_y2[ig]); } delete[] orb_s; @@ -868,22 +932,42 @@ void toWannier90_PW::produce_trial_in_pw( tmp_bs2 = bs2; } - std::complex *orb_s = new std::complex[npw]; - std::complex *orb_py = new std::complex[npw]; - std::complex *orb_dz2 = new std::complex[npw]; - std::complex *orb_dx2_y2 = new std::complex[npw]; + std::complex* orb_s = new std::complex[npw]; + std::complex* orb_py = new std::complex[npw]; + std::complex* orb_dz2 = new std::complex[npw]; + std::complex* orb_dx2_y2 = new std::complex[npw]; get_trial_orbitals_lm_k(0, 0, ylm, gk, npw, radial_in_q[wannier_index].c, orb_s); - get_trial_orbitals_lm_k(1, 2, ylm, gk, npw, radial_in_q[wannier_index].c+PARAM.globalv.nqx, orb_py); - get_trial_orbitals_lm_k(2, 0, ylm, gk, npw, radial_in_q[wannier_index].c+2*PARAM.globalv.nqx, orb_dz2); - get_trial_orbitals_lm_k(2, 3, ylm, gk, npw, radial_in_q[wannier_index].c+2*PARAM.globalv.nqx, orb_dx2_y2); + get_trial_orbitals_lm_k(1, + 2, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + PARAM.globalv.nqx, + orb_py); + get_trial_orbitals_lm_k(2, + 0, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + 2 * PARAM.globalv.nqx, + orb_dz2); + get_trial_orbitals_lm_k(2, + 3, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + 2 * PARAM.globalv.nqx, + orb_dx2_y2); for (int ig = 0; ig < npw; ig++) { const double arg = (gk[ig] * R_centre[wannier_index]) * ModuleBase::TWO_PI; sf[ig] = std::complex(cos(arg), -sin(arg)); - trial_orbitals_k(wannier_index, ig) = sf[ig] * (bs6 * orb_s[ig] + tmp_bs2 * orb_py[ig] + tmp_bs12 * orb_dz2[ig] + tmp_d * orb_dx2_y2[ig]); + trial_orbitals_k(wannier_index, ig) = sf[ig] + * (bs6 * orb_s[ig] + tmp_bs2 * orb_py[ig] + + tmp_bs12 * orb_dz2[ig] + tmp_d * orb_dx2_y2[ig]); } delete[] orb_s; @@ -895,22 +979,36 @@ void toWannier90_PW::produce_trial_in_pw( { double tmp_pz = -1.0; - if (m[wannier_index] == 5) tmp_pz = 1.0; + if (m[wannier_index] == 5) + tmp_pz = 1.0; - std::complex *orb_s = new std::complex[npw]; - std::complex *orb_pz = new std::complex[npw]; - std::complex *orb_dz2 = new std::complex[npw]; + std::complex* orb_s = new std::complex[npw]; + std::complex* orb_pz = new std::complex[npw]; + std::complex* orb_dz2 = new std::complex[npw]; get_trial_orbitals_lm_k(0, 0, ylm, gk, npw, radial_in_q[wannier_index].c, orb_s); - get_trial_orbitals_lm_k(1, 0, ylm, gk, npw, radial_in_q[wannier_index].c+PARAM.globalv.nqx, orb_pz); - get_trial_orbitals_lm_k(2, 0, ylm, gk, npw, radial_in_q[wannier_index].c+2*PARAM.globalv.nqx, orb_dz2); + get_trial_orbitals_lm_k(1, + 0, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + PARAM.globalv.nqx, + orb_pz); + get_trial_orbitals_lm_k(2, + 0, + ylm, + gk, + npw, + radial_in_q[wannier_index].c + 2 * PARAM.globalv.nqx, + orb_dz2); for (int ig = 0; ig < npw; ig++) { const double arg = (gk[ig] * R_centre[wannier_index]) * ModuleBase::TWO_PI; sf[ig] = std::complex(cos(arg), -sin(arg)); - trial_orbitals_k(wannier_index, ig) = sf[ig] * (bs6 * orb_s[ig] + tmp_pz * bs2 * orb_pz[ig] + bs3 * orb_dz2[ig]); + trial_orbitals_k(wannier_index, ig) + = sf[ig] * (bs6 * orb_s[ig] + tmp_pz * bs2 * orb_pz[ig] + bs3 * orb_dz2[ig]); } delete[] orb_s; @@ -918,7 +1016,6 @@ void toWannier90_PW::produce_trial_in_pw( delete[] orb_dz2; } } - } } @@ -943,20 +1040,21 @@ void toWannier90_PW::produce_trial_in_pw( delete[] sf; } -void toWannier90_PW::get_trial_orbitals_lm_k( - const int &orbital_L, - const int &orbital_m, - const ModuleBase::matrix &ylm, - const ModuleBase::Vector3 *gk, - const int &npw, - double *radial_in_q_single, - std::complex *orbital_in_G_single -) +void toWannier90_PW::get_trial_orbitals_lm_k(const int& orbital_L, + const int& orbital_m, + const ModuleBase::matrix& ylm, + const ModuleBase::Vector3* gk, + const int& npw, + double* radial_in_q_single, + std::complex* orbital_in_G_single) { const double tpiba = *this->tpiba; for (int ig = 0; ig < npw; ig++) { - orbital_in_G_single[ig] = ModuleBase::PolyInt::Polynomial_Interpolation(radial_in_q_single, PARAM.globalv.nqx, PARAM.globalv.dq, gk[ig].norm() * tpiba); + orbital_in_G_single[ig] = ModuleBase::PolyInt::Polynomial_Interpolation(radial_in_q_single, + PARAM.globalv.nqx, + PARAM.globalv.dq, + gk[ig].norm() * tpiba); } std::complex lphase = pow(ModuleBase::NEG_IMAG_UNIT, orbital_L); @@ -969,18 +1067,16 @@ void toWannier90_PW::get_trial_orbitals_lm_k( return; } -void toWannier90_PW::integral( - const int meshr, - const double *psir, - const double *r, - const double *rab, - const int &l, - double *table -) +void toWannier90_PW::integral(const int meshr, + const double* psir, + const double* r, + const double* rab, + const int& l, + double* table) { const double pref = ModuleBase::FOUR_PI / sqrt(*this->omega); - double *inner_part = new double[meshr]; + double* inner_part = new double[meshr]; for (int ir = 0; ir < meshr; ir++) { inner_part[ir] = psir[ir] * psir[ir]; @@ -990,8 +1086,8 @@ void toWannier90_PW::integral( ModuleBase::Integral::Simpson_Integral(meshr, inner_part, rab, unit); delete[] inner_part; - double *aux = new double[meshr]; - double *vchi = new double[meshr]; + double* aux = new double[meshr]; + double* vchi = new double[meshr]; for (int iq = 0; iq < PARAM.globalv.nqx; iq++) { const double q = PARAM.globalv.dq * iq; @@ -1011,13 +1107,11 @@ void toWannier90_PW::integral( return; } -void toWannier90_PW::unkdotW_A( - const psi::Psi>& psi_pw, - const ModulePW::PW_Basis_K* wfcpw, - const int& ik, - const std::vector &radial_in_q, - ModuleBase::ComplexMatrix &Amn -) +void toWannier90_PW::unkdotW_A(const psi::Psi>& psi_pw, + const ModulePW::PW_Basis_K* wfcpw, + const int& ik, + const std::vector& radial_in_q, + ModuleBase::ComplexMatrix& Amn) { Amn.create(num_bands, num_wannier); @@ -1044,7 +1138,7 @@ void toWannier90_PW::unkdotW_A( for (int ig = 0; ig < npw; ig++) { Amn(ib_w, iw) += up_con[iw] * conj(psi_pw(ik, ib, ig)) * trial_orbitals(iw, ig) - + dn_con[iw] * conj(psi_pw(ik, ib, ig+npwx)) * trial_orbitals(iw, ig); + + dn_con[iw] * conj(psi_pw(ik, ib, ig + npwx)) * trial_orbitals(iw, ig); } } } @@ -1053,5 +1147,4 @@ void toWannier90_PW::unkdotW_A( #ifdef __MPI Parallel_Reduce::reduce_all(Amn.c, Amn.size); #endif - } diff --git a/source/module_io/to_wannier90_pw.h b/source/module_io/to_wannier90_pw.h index f7f5768ff2..7a7acf91ce 100644 --- a/source/module_io/to_wannier90_pw.h +++ b/source/module_io/to_wannier90_pw.h @@ -1,121 +1,97 @@ #ifndef TOWannier90_PW_H #define TOWannier90_PW_H -#include +#include "module_cell/klist.h" +#include "module_hamilt_lcao/hamilt_lcaodft/wavefunc_in_pw.h" +#include "module_psi/psi.h" +#include "source_base/complexmatrix.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/lapack_connector.h" +#include "source_base/matrix.h" +#include "source_base/matrix3.h" +#include "to_wannier90.h" + #include #include #include +#include #include -#include "to_wannier90.h" - -#include "module_base/complexmatrix.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/lapack_connector.h" -#include "module_base/matrix.h" -#include "module_base/matrix3.h" -#include "module_cell/klist.h" -#include "module_hamilt_lcao/hamilt_lcaodft/wavefunc_in_pw.h" -#include "module_psi/psi.h" - class toWannier90_PW : public toWannier90 { public: - toWannier90_PW( - const bool &out_wannier_mmn, - const bool &out_wannier_amn, - const bool &out_wannier_unk, - const bool &out_wannier_eig, - const bool &out_wannier_wvfn_formatted, - const std::string &nnkpfile, - const std::string &wannier_spin - ); + toWannier90_PW(const bool& out_wannier_mmn, + const bool& out_wannier_amn, + const bool& out_wannier_unk, + const bool& out_wannier_eig, + const bool& out_wannier_wvfn_formatted, + const std::string& nnkpfile, + const std::string& wannier_spin); ~toWannier90_PW(); - void calculate( - const UnitCell& ucell, - const ModuleBase::matrix& ekb, - const ModulePW::PW_Basis_K* wfcpw, - const ModulePW::PW_Basis_Big* bigpw, - const K_Vectors& kv, - const psi::Psi>* psi - ); + void calculate(const UnitCell& ucell, + const ModuleBase::matrix& ekb, + const ModulePW::PW_Basis_K* wfcpw, + const ModulePW::PW_Basis_Big* bigpw, + const K_Vectors& kv, + const psi::Psi>* psi); - void calculate( - const UnitCell& ucell, - const ModuleBase::matrix& ekb, - const ModulePW::PW_Basis_K* wfcpw, - const ModulePW::PW_Basis_Big* bigpw, - const K_Vectors& kv, - const psi::Psi* psi - ) + void calculate(const UnitCell& ucell, + const ModuleBase::matrix& ekb, + const ModulePW::PW_Basis_K* wfcpw, + const ModulePW::PW_Basis_Big* bigpw, + const K_Vectors& kv, + const psi::Psi* psi) { - throw std::logic_error("The wave function of toWannier90_PW is generally a std::complex type."); + throw std::logic_error("The wave function of toWannier90_PW is generally a std::complex type."); } void cal_Amn(const psi::Psi>& psi_pw, const ModulePW::PW_Basis_K* wfcpw); void cal_Mmn(const psi::Psi>& psi_pw, const ModulePW::PW_Basis_K* wfcpw); - void out_unk( - const psi::Psi>& psi_pw, - const ModulePW::PW_Basis_K* wfcpw, - const ModulePW::PW_Basis_Big* bigpw - ); + void out_unk(const psi::Psi>& psi_pw, + const ModulePW::PW_Basis_K* wfcpw, + const ModulePW::PW_Basis_Big* bigpw); void set_tpiba_omega(const double& tpiba, const double& omega); + protected: // Radial section of trial orbitals const int mesh_r = 333; const double dx = 0.025; const double x_min = -6.0; - double const *tpiba; - double const *omega; - - void unkdotkb( - const psi::Psi>& psi_pw, - const ModulePW::PW_Basis_K* wfcpw, - const int& ik, - const int& ikb, - const ModuleBase::Vector3 G, - ModuleBase::ComplexMatrix &Mmn - ); + double const* tpiba; + double const* omega; - void gen_radial_function_in_q(std::vector &radial_in_q); + void unkdotkb(const psi::Psi>& psi_pw, + const ModulePW::PW_Basis_K* wfcpw, + const int& ik, + const int& ikb, + const ModuleBase::Vector3 G, + ModuleBase::ComplexMatrix& Mmn); - void integral( - const int meshr, - const double *psir, - const double *r, - const double *rab, - const int &l, - double *table - ); + void gen_radial_function_in_q(std::vector& radial_in_q); - void produce_trial_in_pw( - const psi::Psi>& psi_pw, - const int& ik, - const ModulePW::PW_Basis_K* wfcpw, - const std::vector &radial_in_q, - ModuleBase::ComplexMatrix& trial_orbitals_k - ); + void integral(const int meshr, const double* psir, const double* r, const double* rab, const int& l, double* table); - void get_trial_orbitals_lm_k( - const int &orbital_L, - const int &orbital_m, - const ModuleBase::matrix &ylm, - const ModuleBase::Vector3 *gk, - const int &npw, - double *radial_in_q_single, - std::complex *orbital_in_G_single - ); + void produce_trial_in_pw(const psi::Psi>& psi_pw, + const int& ik, + const ModulePW::PW_Basis_K* wfcpw, + const std::vector& radial_in_q, + ModuleBase::ComplexMatrix& trial_orbitals_k); - void unkdotW_A( - const psi::Psi>& psi_pw, - const ModulePW::PW_Basis_K* wfcpw, - const int& ik, - const std::vector &radial_in_q, - ModuleBase::ComplexMatrix &Amn - ); + void get_trial_orbitals_lm_k(const int& orbital_L, + const int& orbital_m, + const ModuleBase::matrix& ylm, + const ModuleBase::Vector3* gk, + const int& npw, + double* radial_in_q_single, + std::complex* orbital_in_G_single); + void unkdotW_A(const psi::Psi>& psi_pw, + const ModulePW::PW_Basis_K* wfcpw, + const int& ik, + const std::vector& radial_in_q, + ModuleBase::ComplexMatrix& Amn); }; #endif diff --git a/source/module_io/unk_overlap_lcao.cpp b/source/module_io/unk_overlap_lcao.cpp index 3f1806ab44..f8784d3798 100644 --- a/source/module_io/unk_overlap_lcao.cpp +++ b/source/module_io/unk_overlap_lcao.cpp @@ -1,10 +1,10 @@ #include "unk_overlap_lcao.h" -#include "module_parameter/parameter.h" #include "ctime" -#include "module_base/scalapack_connector.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/scalapack_connector.h" unkOverlap_lcao::unkOverlap_lcao() { @@ -17,17 +17,13 @@ unkOverlap_lcao::~unkOverlap_lcao() { for (int iw = 0; iw < PARAM.globalv.nlocal; iw++) { - delete [] cal_tag[iw]; + delete[] cal_tag[iw]; } - delete [] cal_tag; + delete[] cal_tag; } - } -void unkOverlap_lcao::init(const UnitCell& ucell, - const Grid_Technique& gt, - const int nkstot, - const LCAO_Orbitals& orb) +void unkOverlap_lcao::init(const UnitCell& ucell, const Grid_Technique& gt, const int nkstot, const LCAO_Orbitals& orb) { int Lmax_used = 0; @@ -100,8 +96,8 @@ void unkOverlap_lcao::init(const UnitCell& ucell, #ifdef __MPI // parallel scheme - int nproc=0; - int myrank=0; + int nproc = 0; + int myrank = 0; MPI_Comm_size(MPI_COMM_WORLD, &nproc); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); const int total_term = PARAM.globalv.nlocal * PARAM.globalv.nlocal; @@ -155,12 +151,9 @@ void unkOverlap_lcao::init(const UnitCell& ucell, { for (int NB = 0; NB < orb.Phi[TB].getNchi(LB); ++NB) { - center2_orb11[TA][TB][LA][NA][LB].insert( - std::make_pair(NB, - Center2_Orb::Orb11(orb.Phi[TA].PhiLN(LA, NA), - orb.Phi[TB].PhiLN(LB, NB), - psb_, - MGT))); + center2_orb11[TA][TB][LA][NA][LB].insert(std::make_pair( + NB, + Center2_Orb::Orb11(orb.Phi[TA].PhiLN(LA, NA), orb.Phi[TB].PhiLN(LB, NB), psb_, MGT))); } } } @@ -194,51 +187,51 @@ void unkOverlap_lcao::init(const UnitCell& ucell, } } - for (auto& co1: center2_orb11) - { - for (auto& co2: co1.second) - { - for (auto& co3: co2.second) - { - for (auto& co4: co3.second) - { - for (auto& co5: co4.second) - { - for (auto& co6: co5.second) - { - co6.second.init_radial_table(); - } - } - } - } - } - } - - for (auto& co1: center2_orb21_r) - { - for (auto& co2: co1.second) - { - for (auto& co3: co2.second) - { - for (auto& co4: co3.second) - { - for (auto& co5: co4.second) - { - for (auto& co6: co5.second) - { - co6.second.init_radial_table(); - } - } - } - } - } - } - - rcut_orb_.resize(orb.get_ntype()); - for (int it = 0; it < orb.get_ntype(); ++it) - { - rcut_orb_[it] = orb.Phi[it].getRcut(); - } + for (auto& co1: center2_orb11) + { + for (auto& co2: co1.second) + { + for (auto& co3: co2.second) + { + for (auto& co4: co3.second) + { + for (auto& co5: co4.second) + { + for (auto& co6: co5.second) + { + co6.second.init_radial_table(); + } + } + } + } + } + } + + for (auto& co1: center2_orb21_r) + { + for (auto& co2: co1.second) + { + for (auto& co3: co2.second) + { + for (auto& co4: co3.second) + { + for (auto& co5: co4.second) + { + for (auto& co6: co5.second) + { + co6.second.init_radial_table(); + } + } + } + } + } + } + + rcut_orb_.resize(orb.get_ntype()); + for (int it = 0; it < orb.get_ntype(); ++it) + { + rcut_orb_[it] = orb.Phi[it].getRcut(); + } return; } @@ -270,7 +263,7 @@ int unkOverlap_lcao::iw2it(const UnitCell& ucell, int iw) return type; } -int unkOverlap_lcao::iw2ia(const UnitCell& ucell,int iw) +int unkOverlap_lcao::iw2ia(const UnitCell& ucell, int iw) { int ic = 0; int na = 0; @@ -324,7 +317,7 @@ int unkOverlap_lcao::iw2iL(const UnitCell& ucell, int iw) return iL; } -int unkOverlap_lcao::iw2iN(const UnitCell& ucell,int iw) +int unkOverlap_lcao::iw2iN(const UnitCell& ucell, int iw) { int ic, iN; ic = 0; @@ -415,8 +408,8 @@ void unkOverlap_lcao::cal_R_number(const UnitCell& ucell, const Grid_Driver& gd) if (distance < rcut - 1.0e-15) { // translate: the unit of R_car is ucell.lat0 - ModuleBase::Vector3 R_car = R_direct_x * ucell.a1 + R_direct_y * ucell.a2 - + R_direct_z * ucell.a3; + ModuleBase::Vector3 R_car + = R_direct_x * ucell.a1 + R_direct_y * ucell.a2 + R_direct_z * ucell.a3; for (int iw1 = 0; iw1 < atom1->nw; iw1++) { @@ -459,27 +452,26 @@ void unkOverlap_lcao::cal_orb_overlap(const UnitCell& ucell) // if ( !pv.in_this_processor(iw1,iw2) ) continue; // iw1 and iw2 never have overlap - if (orb1_orb2_R[iw1][iw2].empty()) - { - continue; - } - - int atomType1 = iw2it(ucell,iw1); - int ia1 = iw2ia(ucell,iw1); - int N1 = iw2iN(ucell,iw1); - int L1 = iw2iL(ucell,iw1); - int m1 = iw2im(ucell,iw1); - int atomType2 = iw2it(ucell,iw2); - int ia2 = iw2ia(ucell,iw2); - int N2 = iw2iN(ucell,iw2); - int L2 = iw2iL(ucell,iw2); - int m2 = iw2im(ucell,iw2); + if (orb1_orb2_R[iw1][iw2].empty()) + { + continue; + } + + int atomType1 = iw2it(ucell, iw1); + int ia1 = iw2ia(ucell, iw1); + int N1 = iw2iN(ucell, iw1); + int L1 = iw2iL(ucell, iw1); + int m1 = iw2im(ucell, iw1); + int atomType2 = iw2it(ucell, iw2); + int ia2 = iw2ia(ucell, iw2); + int N2 = iw2iN(ucell, iw2); + int L2 = iw2iL(ucell, iw2); + int m2 = iw2im(ucell, iw2); for (int iR = 0; iR < orb1_orb2_R[iw1][iw2].size(); iR++) { ModuleBase::Vector3 r_distance - = (ucell.atoms[atomType2].tau[ia2] - ucell.atoms[atomType1].tau[ia1] - + orb1_orb2_R[iw1][iw2][iR]) + = (ucell.atoms[atomType2].tau[ia2] - ucell.atoms[atomType1].tau[ia1] + orb1_orb2_R[iw1][iw2][iR]) * ucell.lat0; psi_psi[iw1][iw2].push_back( center2_orb11[atomType1][atomType2][L1][N1][L2].at(N2).cal_overlap(origin_point, @@ -523,8 +515,8 @@ void unkOverlap_lcao::prepare_midmatrix_pblas(const UnitCell& ucell, const Parallel_Orbitals& pv, const K_Vectors& kv) { - assert(pv.nloc>0); - + assert(pv.nloc > 0); + midmatrix = new std::complex[pv.nloc]; ModuleBase::GlobalFunc::ZEROS(midmatrix, pv.nloc); for (int iw_row = 0; iw_row < PARAM.globalv.nlocal; iw_row++) // global @@ -537,7 +529,7 @@ void unkOverlap_lcao::prepare_midmatrix_pblas(const UnitCell& ucell, if (ir >= 0 && ic >= 0) { int index = ic * pv.nrow + ir; - ModuleBase::Vector3 tau1 = ucell.atoms[iw2it(ucell,iw_row)].tau[iw2ia(ucell,iw_row)]; + ModuleBase::Vector3 tau1 = ucell.atoms[iw2it(ucell, iw_row)].tau[iw2ia(ucell, iw_row)]; for (int iR = 0; iR < orb1_orb2_R[iw_row][iw_col].size(); iR++) { double kRn = (kv.kvec_c[ik_R] * orb1_orb2_R[iw_row][iw_col][iR] - dk * tau1) * ModuleBase::TWO_PI; @@ -568,7 +560,7 @@ std::complex unkOverlap_lcao::det_berryphase(const UnitCell& ucell, ModuleBase::GlobalFunc::ZEROS(C_matrix, para_orb.nloc); ModuleBase::GlobalFunc::ZEROS(out_matrix, para_orb.nloc); - this->prepare_midmatrix_pblas(ucell,ik_L, ik_R, dk, midmatrix, para_orb, kv); + this->prepare_midmatrix_pblas(ucell, ik_L, ik_R, dk, midmatrix, para_orb, kv); char transa = 'C'; char transb = 'N'; @@ -617,7 +609,7 @@ std::complex unkOverlap_lcao::det_berryphase(const UnitCell& ucell, &one, para_orb.desc); - assert(para_orb.nrow>0); + assert(para_orb.nrow > 0); int* ipiv = new int[para_orb.nrow]; int info = 0; diff --git a/source/module_io/unk_overlap_lcao.h b/source/module_io/unk_overlap_lcao.h index 241ac3d775..3aa0302640 100644 --- a/source/module_io/unk_overlap_lcao.h +++ b/source/module_io/unk_overlap_lcao.h @@ -1,9 +1,6 @@ #ifndef UNKOVERLAP_LCAO #define UNKOVERLAP_LCAO -#include "module_base/sph_bessel_recursive.h" -#include "module_base/vector3.h" -#include "module_base/ylm.h" #include "module_basis/module_ao/ORB_atomic_lm.h" #include "module_basis/module_ao/ORB_gaunt_table.h" #include "module_basis/module_ao/ORB_read.h" @@ -13,6 +10,9 @@ #include "module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb21.h" #include "module_hamilt_lcao/hamilt_lcaodft/center2_orb.h" #include "module_hamilt_lcao/module_gint/grid_technique.h" +#include "source_base/sph_bessel_recursive.h" +#include "source_base/vector3.h" +#include "source_base/ylm.h" #include #include @@ -28,10 +28,10 @@ class unkOverlap_lcao std::vector>>> orb1_orb2_R; std::vector>> psi_psi; std::vector>>> psi_r_psi; - bool allocate_flag; // translate: Used to initialize the array - int** cal_tag=nullptr; // Used for parallel scheme + bool allocate_flag; // translate: Used to initialize the array + int** cal_tag = nullptr; // Used for parallel scheme - int kpoints_number=0; + int kpoints_number = 0; std::vector rcut_orb_; // real space cutoffs of LCAO orbitals' radial functions diff --git a/source/module_io/unk_overlap_pw.h b/source/module_io/unk_overlap_pw.h index 351532f892..678eed3c09 100644 --- a/source/module_io/unk_overlap_pw.h +++ b/source/module_io/unk_overlap_pw.h @@ -1,20 +1,20 @@ #ifndef UNKOVERLAP_PW #define UNKOVERLAP_PW +#include "module_basis/module_pw/pw_basis.h" +#include "module_basis/module_pw/pw_basis_k.h" +#include "module_psi/psi.h" +#include "source_base/complexmatrix.h" +#include "source_base/global_variable.h" +#include "source_base/lapack_connector.h" +#include "source_base/parallel_reduce.h" +#include "source_base/vector3.h" + #include #include #include #include -#include "module_base/complexmatrix.h" -#include "module_base/global_variable.h" -#include "module_base/lapack_connector.h" -#include "module_base/parallel_reduce.h" -#include "module_base/vector3.h" -#include "module_basis/module_pw/pw_basis.h" -#include "module_basis/module_pw/pw_basis_k.h" -#include "module_psi/psi.h" - class unkOverlap_pw { public: diff --git a/source/module_io/winput.cpp b/source/module_io/winput.cpp index 2b3a3f9d29..4d7fe30ce2 100644 --- a/source/module_io/winput.cpp +++ b/source/module_io/winput.cpp @@ -6,6 +6,7 @@ #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" + #include #include @@ -96,10 +97,10 @@ void winput::Read(const std::string& fn) { ModuleBase::TITLE("winput", "Read"); - if (GlobalV::MY_RANK != 0) - { - return; - } + if (GlobalV::MY_RANK != 0) + { + return; + } std::ifstream ifs(fn.c_str(), std::ios::in); if (!ifs) @@ -595,10 +596,10 @@ void winput::Check() void winput::Print(const std::string& fn) { - if (GlobalV::MY_RANK != 0) - { - return; - } + if (GlobalV::MY_RANK != 0) + { + return; + } std::ofstream ofs(fn.c_str()); ofs << std::setiosflags(std::ios::left); @@ -690,7 +691,7 @@ void winput::Print(const std::string& fn) return; } -#include "module_base/parallel_common.h" +#include "source_base/parallel_common.h" #ifdef __MPI void winput::Bcast() { diff --git a/source/module_io/write_HS.h b/source/module_io/write_HS.h index 1226f841a8..82703009ad 100644 --- a/source/module_io/write_HS.h +++ b/source/module_io/write_HS.h @@ -4,51 +4,49 @@ #include #include -//#include "module_base/global_function.h" -//#include "module_base/global_variable.h" +//#include "source_base/global_function.h" +//#include "source_base/global_variable.h" #include "module_basis/module_ao/parallel_orbitals.h" // use Parallel_Orbitals - // mohan add this file 2010-09-10 namespace ModuleIO { - template - void write_hsk( - const std::string &global_out_dir, - const int nspin, - const int nks, - const int nkstot, - const std::vector &ik2iktot, - const std::vector &isk, - hamilt::Hamilt* p_hamilt, - const Parallel_Orbitals &pv, - const bool gamma_only, - const bool out_app_flag, - const int istep, - std::ofstream &ofs_running); +template +void write_hsk(const std::string& global_out_dir, + const int nspin, + const int nks, + const int nkstot, + const std::vector& ik2iktot, + const std::vector& isk, + hamilt::Hamilt* p_hamilt, + const Parallel_Orbitals& pv, + const bool gamma_only, + const bool out_app_flag, + const int istep, + std::ofstream& ofs_running); - /// @brief save a square matrix, such as H(k) and S(k) - /// @param[in] istep : the step of the calculation - /// @param[in] mat : the local matrix - /// @param[in] bit : true for binary, false for decimal - /// @param[in] tri : true for upper triangle, false for full matrix - /// @param[in] app : true for append, false for overwrite - /// @param[in] file_name : the name of the output file - /// @param[in] pv : the 2d-block parallelization information - /// @param[in] drank : the rank of the current process - template - void save_mat(const int istep, - const T* mat, - const int dim, - const bool bit, - const int precision, - const bool tri, - const bool app, - const std::string& file_name, - const Parallel_2D& pv, - const int drank, - const bool reduce = true); +/// @brief save a square matrix, such as H(k) and S(k) +/// @param[in] istep : the step of the calculation +/// @param[in] mat : the local matrix +/// @param[in] bit : true for binary, false for decimal +/// @param[in] tri : true for upper triangle, false for full matrix +/// @param[in] app : true for append, false for overwrite +/// @param[in] file_name : the name of the output file +/// @param[in] pv : the 2d-block parallelization information +/// @param[in] drank : the rank of the current process +template +void save_mat(const int istep, + const T* mat, + const int dim, + const bool bit, + const int precision, + const bool tri, + const bool app, + const std::string& file_name, + const Parallel_2D& pv, + const int drank, + const bool reduce = true); -} +} // namespace ModuleIO #include "write_HS.hpp" #endif diff --git a/source/module_io/write_HS.hpp b/source/module_io/write_HS.hpp index 7be1d23c52..ff58d91ed8 100644 --- a/source/module_io/write_HS.hpp +++ b/source/module_io/write_HS.hpp @@ -1,119 +1,135 @@ -#include "write_HS.h" - -#include "module_parameter/parameter.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/filename.h" // use filename_output function - +#include "module_parameter/parameter.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" +#include "write_HS.h" template -void ModuleIO::write_hsk( - const std::string &global_out_dir, - const int nspin, - const int nks, - const int nkstot, - const std::vector &ik2iktot, - const std::vector &isk, - hamilt::Hamilt* p_hamilt, - const Parallel_Orbitals &pv, - const bool gamma_only, - const bool out_app_flag, - const int istep, - std::ofstream &ofs_running) +void ModuleIO::write_hsk(const std::string& global_out_dir, + const int nspin, + const int nks, + const int nkstot, + const std::vector& ik2iktot, + const std::vector& isk, + hamilt::Hamilt* p_hamilt, + const Parallel_Orbitals& pv, + const bool gamma_only, + const bool out_app_flag, + const int istep, + std::ofstream& ofs_running) { - ofs_running << "\n WRITE H(k) OR S(k) BEGINS" << std::endl; - ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - ">>>>>>>>>>>>>>>>>>>>>>>>>" << std::endl; - ofs_running << " | " - " |" << std::endl; - ofs_running << " | Write Hamiltonian matrix H(k) or overlap matrix S(k) in numerical |" << std::endl; - ofs_running << " | atomic orbitals at each k-point. |" << std::endl; - ofs_running << " | " - " |" << std::endl; - ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - ">>>>>>>>>>>>>>>>>>>>>>>>>" << std::endl; - - for (int ik = 0; ik < nks; ++ik) - { - p_hamilt->updateHk(ik); - bool bit = false; // LiuXh, 2017-03-21 - // if set bit = true, there would be error in soc-multi-core - // calculation, noted by zhengdy-soc - - hamilt::MatrixBlock h_mat; - hamilt::MatrixBlock s_mat; - - p_hamilt->matrix(h_mat, s_mat); - - const int out_label=1; // 1: .txt, 2: .dat - - std::string h_fn = ModuleIO::filename_output(global_out_dir, - "hk","nao",ik,ik2iktot,nspin,nkstot, - out_label,out_app_flag,gamma_only,istep); - - ModuleIO::save_mat(istep, - h_mat.p, - PARAM.globalv.nlocal, - bit, - PARAM.inp.out_mat_hs[1], - 1, - out_app_flag, - h_fn, - pv, - GlobalV::DRANK); + ofs_running << "\n WRITE H(k) OR S(k) BEGINS" << std::endl; + ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + ">>>>>>>>>>>>>>>>>>>>>>>>>" + << std::endl; + ofs_running << " | " + " |" + << std::endl; + ofs_running << " | Write Hamiltonian matrix H(k) or overlap matrix S(k) in numerical |" << std::endl; + ofs_running << " | atomic orbitals at each k-point. |" << std::endl; + ofs_running << " | " + " |" + << std::endl; + ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + ">>>>>>>>>>>>>>>>>>>>>>>>>" + << std::endl; + + for (int ik = 0; ik < nks; ++ik) + { + p_hamilt->updateHk(ik); + bool bit = false; // LiuXh, 2017-03-21 + // if set bit = true, there would be error in soc-multi-core + // calculation, noted by zhengdy-soc + + hamilt::MatrixBlock h_mat; + hamilt::MatrixBlock s_mat; + + p_hamilt->matrix(h_mat, s_mat); + + const int out_label = 1; // 1: .txt, 2: .dat + + std::string h_fn = ModuleIO::filename_output(global_out_dir, + "hk", + "nao", + ik, + ik2iktot, + nspin, + nkstot, + out_label, + out_app_flag, + gamma_only, + istep); + + ModuleIO::save_mat(istep, + h_mat.p, + PARAM.globalv.nlocal, + bit, + PARAM.inp.out_mat_hs[1], + 1, + out_app_flag, + h_fn, + pv, + GlobalV::DRANK); // mohan note 2025-06-02 // for overlap matrix, the two spin channels yield the same matrix // so we only need to print matrix from one spin channel. - const int current_spin = isk[ik]; - if(current_spin == 1) - { - continue; - } - - std::string s_fn = ModuleIO::filename_output(global_out_dir, - "sk","nao",ik,ik2iktot,nspin,nkstot, - out_label,out_app_flag,gamma_only,istep); - - ofs_running << " The output filename is " << s_fn << std::endl; + const int current_spin = isk[ik]; + if (current_spin == 1) + { + continue; + } - ModuleIO::save_mat(istep, - s_mat.p, - PARAM.globalv.nlocal, - bit, - PARAM.inp.out_mat_hs[1], - 1, - out_app_flag, - s_fn, - pv, - GlobalV::DRANK); - } // end ik + std::string s_fn = ModuleIO::filename_output(global_out_dir, + "sk", + "nao", + ik, + ik2iktot, + nspin, + nkstot, + out_label, + out_app_flag, + gamma_only, + istep); + + ofs_running << " The output filename is " << s_fn << std::endl; + + ModuleIO::save_mat(istep, + s_mat.p, + PARAM.globalv.nlocal, + bit, + PARAM.inp.out_mat_hs[1], + 1, + out_app_flag, + s_fn, + pv, + GlobalV::DRANK); + } // end ik } - // output a square matrix template void ModuleIO::save_mat(const int istep, - const T* mat, - const int dim, - const bool bit, - const int precision, - const bool tri, - const bool app, - const std::string& filename, - const Parallel_2D& pv, - const int drank, - const bool reduce) + const T* mat, + const int dim, + const bool bit, + const int precision, + const bool tri, + const bool app, + const std::string& filename, + const Parallel_2D& pv, + const int drank, + const bool reduce) { ModuleBase::TITLE("ModuleIO", "save_mat"); ModuleBase::timer::tick("ModuleIO", "save_mat"); // print out .dat file - if (bit) - { + if (bit) + { #ifdef __MPI FILE* g = nullptr; @@ -123,8 +139,8 @@ void ModuleIO::save_mat(const int istep, fwrite(&dim, sizeof(int), 1, g); } - int ir=0; - int ic=0; + int ir = 0; + int ic = 0; for (int i = 0; i < dim; ++i) { T* line = new T[tri ? dim - i : dim]; @@ -153,10 +169,10 @@ void ModuleIO::save_mat(const int istep, } } - if (reduce) - { - Parallel_Reduce::reduce_all(line, tri ? dim - i : dim); - } + if (reduce) + { + Parallel_Reduce::reduce_all(line, tri ? dim - i : dim); + } if (drank == 0) { @@ -170,10 +186,10 @@ void ModuleIO::save_mat(const int istep, MPI_Barrier(DIAG_WORLD); } - if (drank == 0) - { - fclose(g); - } + if (drank == 0) + { + fclose(g); + } #else FILE* g = fopen(filename.c_str(), "wb"); @@ -188,7 +204,7 @@ void ModuleIO::save_mat(const int istep, } fclose(g); #endif - } // end .dat file + } // end .dat file else // .txt file { std::ofstream g; @@ -196,19 +212,19 @@ void ModuleIO::save_mat(const int istep, #ifdef __MPI if (drank == 0) { - if (app && istep > 0) - { - g.open(filename.c_str(), std::ofstream::app); - } - else - { - g.open(filename.c_str()); - } - g << dim; - } + if (app && istep > 0) + { + g.open(filename.c_str(), std::ofstream::app); + } + else + { + g.open(filename.c_str()); + } + g << dim; + } - int ir=0; - int ic=0; + int ir = 0; + int ic = 0; for (int i = 0; i < dim; i++) { T* line = new T[tri ? dim - i : dim]; @@ -237,35 +253,35 @@ void ModuleIO::save_mat(const int istep, } } - if (reduce) - { - Parallel_Reduce::reduce_all(line, tri ? dim - i : dim); - } + if (reduce) + { + Parallel_Reduce::reduce_all(line, tri ? dim - i : dim); + } if (drank == 0) { - for (int j = (tri ? i : 0); j < dim; j++) - { - g << " " << line[tri ? j - i : j]; - } - g << std::endl; + for (int j = (tri ? i : 0); j < dim; j++) + { + g << " " << line[tri ? j - i : j]; + } + g << std::endl; } delete[] line; } - if (drank == 0) - { // Peize Lin delete ; at 2020.01.31 - g.close(); - } + if (drank == 0) + { // Peize Lin delete ; at 2020.01.31 + g.close(); + } #else - if (app) - { - std::ofstream g(filename.c_str(), std::ofstream::app); - } - else - { - std::ofstream g(filename.c_str()); - } + if (app) + { + std::ofstream g(filename.c_str(), std::ofstream::app); + } + else + { + std::ofstream g(filename.c_str()); + } g << dim; g << std::setprecision(precision); diff --git a/source/module_io/write_HS_R.cpp b/source/module_io/write_HS_R.cpp index 97a0fd4d3b..dae2776882 100644 --- a/source/module_io/write_HS_R.cpp +++ b/source/module_io/write_HS_R.cpp @@ -1,11 +1,11 @@ #include "write_HS_R.h" -#include "module_parameter/parameter.h" -#include "module_base/timer.h" #include "module_hamilt_lcao/hamilt_lcaodft/LCAO_HS_arrays.hpp" #include "module_hamilt_lcao/hamilt_lcaodft/spar_dh.h" #include "module_hamilt_lcao/hamilt_lcaodft/spar_hsr.h" #include "module_hamilt_lcao/hamilt_lcaodft/spar_st.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" #include "write_HS_sparse.h" // if 'binary=true', output binary file. @@ -28,69 +28,95 @@ void ModuleIO::output_HSR(const UnitCell& ucell, const std::string& HR_filename_up, const std::string HR_filename_down, const bool& binary, - const double& sparse_thr) + const double& sparse_thr) { ModuleBase::TITLE("ModuleIO", "output_HSR"); ModuleBase::timer::tick("ModuleIO", "output_HSR"); - GlobalV::ofs_running << "\n WRITE H(R) OR S(R) BEGINS" << std::endl; - GlobalV::ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - ">>>>>>>>>>>>>>>>>>>>>>>>>" << std::endl; - GlobalV::ofs_running << " | " - " |" << std::endl; - GlobalV::ofs_running << " | Write Hamiltonian matrix H(R) or overlap matrix S(R) in numerical |" << std::endl; - GlobalV::ofs_running << " | atomic orbitals, where R is the Bravis lattice vector. |" << std::endl; - GlobalV::ofs_running << " | " - " |" << std::endl; - GlobalV::ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - ">>>>>>>>>>>>>>>>>>>>>>>>>" << std::endl; - + GlobalV::ofs_running << "\n WRITE H(R) OR S(R) BEGINS" << std::endl; + GlobalV::ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + ">>>>>>>>>>>>>>>>>>>>>>>>>" + << std::endl; + GlobalV::ofs_running << " | " + " |" + << std::endl; + GlobalV::ofs_running << " | Write Hamiltonian matrix H(R) or overlap matrix S(R) in numerical |" << std::endl; + GlobalV::ofs_running << " | atomic orbitals, where R is the Bravis lattice vector. |" << std::endl; + GlobalV::ofs_running << " | " + " |" + << std::endl; + GlobalV::ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + ">>>>>>>>>>>>>>>>>>>>>>>>>" + << std::endl; const int nspin = PARAM.inp.nspin; - if (nspin == 1 || nspin == 4) { + if (nspin == 1 || nspin == 4) + { const int spin_now = 0; // jingan add 2021-6-4, modify 2021-12-2 - sparse_format::cal_HSR(ucell,pv, HS_Arrays, grid, spin_now, sparse_thr, kv.nmp, p_ham + sparse_format::cal_HSR(ucell, + pv, + HS_Arrays, + grid, + spin_now, + sparse_thr, + kv.nmp, + p_ham #ifdef __EXX - , Hexxd, Hexxc + , + Hexxd, + Hexxc #endif ); } - else if (nspin == 2) { + else if (nspin == 2) + { int spin_now = 1; // save HR of spin down first (the current spin always be down) - sparse_format::cal_HSR(ucell,pv, HS_Arrays, grid, spin_now, sparse_thr, kv.nmp, p_ham + sparse_format::cal_HSR(ucell, + pv, + HS_Arrays, + grid, + spin_now, + sparse_thr, + kv.nmp, + p_ham #ifdef __EXX - , Hexxd, Hexxc + , + Hexxd, + Hexxc #endif ); // cal HR of the spin up - if (PARAM.inp.vl_in_h) { + if (PARAM.inp.vl_in_h) + { const int ik = 0; p_ham->refresh(); p_ham->updateHk(ik); spin_now = 0; } - sparse_format::cal_HSR(ucell,pv, HS_Arrays, grid, spin_now, sparse_thr, kv.nmp, p_ham + sparse_format::cal_HSR(ucell, + pv, + HS_Arrays, + grid, + spin_now, + sparse_thr, + kv.nmp, + p_ham #ifdef __EXX - , Hexxd, Hexxc + , + Hexxd, + Hexxc #endif ); } - ModuleIO::save_HSR_sparse(istep, - pv, - HS_Arrays, - sparse_thr, - binary, - SR_filename, - HR_filename_up, - HR_filename_down); + ModuleIO::save_HSR_sparse(istep, pv, HS_Arrays, sparse_thr, binary, SR_filename, HR_filename_up, HR_filename_down); sparse_format::destroy_HS_R_sparse(HS_Arrays); @@ -99,34 +125,28 @@ void ModuleIO::output_HSR(const UnitCell& ucell, } void ModuleIO::output_dSR(const int& istep, - const UnitCell& ucell, - const Parallel_Orbitals& pv, - LCAO_HS_Arrays& HS_Arrays, - const Grid_Driver& grid, // mohan add 2024-04-06 - const TwoCenterBundle& two_center_bundle, - const LCAO_Orbitals& orb, - const K_Vectors& kv, - const bool& binary, - const double& sparse_thr) + const UnitCell& ucell, + const Parallel_Orbitals& pv, + LCAO_HS_Arrays& HS_Arrays, + const Grid_Driver& grid, // mohan add 2024-04-06 + const TwoCenterBundle& two_center_bundle, + const LCAO_Orbitals& orb, + const K_Vectors& kv, + const bool& binary, + const double& sparse_thr) { - ModuleBase::TITLE("ModuleIO", "output_dSR"); - ModuleBase::timer::tick("ModuleIO", "output_dSR"); + ModuleBase::TITLE("ModuleIO", "output_dSR"); + ModuleBase::timer::tick("ModuleIO", "output_dSR"); - sparse_format::cal_dS(ucell, - pv, - HS_Arrays, - grid, - two_center_bundle, - orb, - sparse_thr); + sparse_format::cal_dS(ucell, pv, HS_Arrays, grid, two_center_bundle, orb, sparse_thr); - // mohan update 2024-04-01 - ModuleIO::save_dH_sparse(istep, pv, HS_Arrays, sparse_thr, binary, "s"); + // mohan update 2024-04-01 + ModuleIO::save_dH_sparse(istep, pv, HS_Arrays, sparse_thr, binary, "s"); - sparse_format::destroy_dH_R_sparse(HS_Arrays); + sparse_format::destroy_dH_R_sparse(HS_Arrays); - ModuleBase::timer::tick("ModuleIO", "output_dSR"); - return; + ModuleBase::timer::tick("ModuleIO", "output_dSR"); + return; } void ModuleIO::output_dHR(const int& istep, @@ -149,50 +169,31 @@ void ModuleIO::output_dHR(const int& istep, const int nspin = PARAM.inp.nspin; - if (nspin == 1 || nspin == 4) - { - // mohan add 2024-04-01 - const int cspin = 0; - - sparse_format::cal_dH(ucell, - pv, - HS_Arrays, - grid, - two_center_bundle, - orb, - cspin, - sparse_thr, - gint_k); - } - else if (nspin == 2) - { - for (int cspin = 0; cspin < 2; cspin++) - { + if (nspin == 1 || nspin == 4) + { + // mohan add 2024-04-01 + const int cspin = 0; + + sparse_format::cal_dH(ucell, pv, HS_Arrays, grid, two_center_bundle, orb, cspin, sparse_thr, gint_k); + } + else if (nspin == 2) + { + for (int cspin = 0; cspin < 2; cspin++) + { // note: some MPI process will not have grids when MPI cores are too // many, v_eff in these processes are empty - const double* vr_eff1 - = v_eff.nc * v_eff.nr > 0 ? &(v_eff(cspin, 0)) : nullptr; - - if (!PARAM.globalv.gamma_only_local) - { - if (PARAM.inp.vl_in_h) - { - Gint_inout inout(vr_eff1, - cspin, - Gint_Tools::job_type::dvlocal); + const double* vr_eff1 = v_eff.nc * v_eff.nr > 0 ? &(v_eff(cspin, 0)) : nullptr; + + if (!PARAM.globalv.gamma_only_local) + { + if (PARAM.inp.vl_in_h) + { + Gint_inout inout(vr_eff1, cspin, Gint_Tools::job_type::dvlocal); gint_k.cal_gint(&inout); } } - sparse_format::cal_dH(ucell, - pv, - HS_Arrays, - grid, - two_center_bundle, - orb, - cspin, - sparse_thr, - gint_k); + sparse_format::cal_dH(ucell, pv, HS_Arrays, grid, two_center_bundle, orb, cspin, sparse_thr, gint_k); } } // mohan update 2024-04-01 @@ -218,19 +219,22 @@ void ModuleIO::output_SR(Parallel_Orbitals& pv, GlobalV::ofs_running << " OUTPUT S(R) BEGINS" << std::endl; GlobalV::ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - ">>>>>>>>>>>>>>>>>>>>>>>>>" << std::endl; + ">>>>>>>>>>>>>>>>>>>>>>>>>" + << std::endl; GlobalV::ofs_running << " | " - " |" << std::endl; + " |" + << std::endl; GlobalV::ofs_running << " | Print out the overlap matrix S(R) in the CSR format |" << std::endl; GlobalV::ofs_running << " | " - " |" << std::endl; + " |" + << std::endl; GlobalV::ofs_running << " >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" - ">>>>>>>>>>>>>>>>>>>>>>>>>" << std::endl; + ">>>>>>>>>>>>>>>>>>>>>>>>>" + << std::endl; std::cout << " The overlap file is saved in " << SR_filename << std::endl; GlobalV::ofs_running << " The overlap file is saved in " << SR_filename << std::endl; - LCAO_HS_Arrays HS_Arrays; sparse_format::cal_SR(pv, @@ -287,22 +291,16 @@ void ModuleIO::output_TR(const int istep, ModuleBase::timer::tick("ModuleIO", "output_TR"); std::stringstream sst; - if (PARAM.inp.calculation == "md" && !PARAM.inp.out_app_flag) - { - sst << PARAM.globalv.global_matrix_dir << istep << "_" << TR_filename; - } - else - { + if (PARAM.inp.calculation == "md" && !PARAM.inp.out_app_flag) + { + sst << PARAM.globalv.global_matrix_dir << istep << "_" << TR_filename; + } + else + { sst << PARAM.globalv.global_out_dir << TR_filename; } - sparse_format::cal_TR(ucell, - pv, - HS_Arrays, - grid, - two_center_bundle, - orb, - sparse_thr); + sparse_format::cal_TR(ucell, pv, HS_Arrays, grid, two_center_bundle, orb, sparse_thr); ModuleIO::save_sparse(HS_Arrays.TR_sparse, HS_Arrays.all_R_coor, diff --git a/source/module_io/write_HS_R.h b/source/module_io/write_HS_R.h index 37ab95562d..d0f9626e3e 100644 --- a/source/module_io/write_HS_R.h +++ b/source/module_io/write_HS_R.h @@ -1,75 +1,75 @@ #ifndef WRITE_HS_R_H #define WRITE_HS_R_H -#include "module_base/matrix.h" #include "module_basis/module_nao/two_center_bundle.h" #include "module_cell/klist.h" #include "module_hamilt_general/hamilt.h" #include "module_hamilt_lcao/module_gint/gint_k.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/matrix.h" namespace ModuleIO { - using TAC = std::pair>; - void output_HSR(const UnitCell& ucell, - const int& istep, - const ModuleBase::matrix& v_eff, - const Parallel_Orbitals& pv, - LCAO_HS_Arrays& HS_Arrays, - const Grid_Driver& grid, // mohan add 2024-04-06 - const K_Vectors& kv, - hamilt::Hamilt>* p_ham, +using TAC = std::pair>; +void output_HSR(const UnitCell& ucell, + const int& istep, + const ModuleBase::matrix& v_eff, + const Parallel_Orbitals& pv, + LCAO_HS_Arrays& HS_Arrays, + const Grid_Driver& grid, // mohan add 2024-04-06 + const K_Vectors& kv, + hamilt::Hamilt>* p_ham, #ifdef __EXX - const std::vector>>>* Hexxd = nullptr, - const std::vector>>>>* Hexxc = nullptr, + const std::vector>>>* Hexxd = nullptr, + const std::vector>>>>* Hexxc = nullptr, #endif - const std::string& SR_filename = "srs1_nao.csr", - const std::string& HR_filename_up = "hrs1_nao.csr", - const std::string HR_filename_down = "hrs2_nao.csr", - const bool& binary = false, - const double& sparse_threshold = 1e-10); // LiuXh add 2019-07-15, modify in 2021-12-3 + const std::string& SR_filename = "srs1_nao.csr", + const std::string& HR_filename_up = "hrs1_nao.csr", + const std::string HR_filename_down = "hrs2_nao.csr", + const bool& binary = false, + const double& sparse_threshold = 1e-10); // LiuXh add 2019-07-15, modify in 2021-12-3 - void output_dHR(const int& istep, - const ModuleBase::matrix& v_eff, - Gint_k& gint_k, // mohan add 2024-04-01 - const UnitCell& ucell, - const Parallel_Orbitals& pv, - LCAO_HS_Arrays& HS_Arrays, - const Grid_Driver& grid, // mohan add 2024-04-06 - const TwoCenterBundle& two_center_bundle, - const LCAO_Orbitals& orb, - const K_Vectors& kv, - const bool& binary = false, - const double& sparse_threshold = 1e-10); +void output_dHR(const int& istep, + const ModuleBase::matrix& v_eff, + Gint_k& gint_k, // mohan add 2024-04-01 + const UnitCell& ucell, + const Parallel_Orbitals& pv, + LCAO_HS_Arrays& HS_Arrays, + const Grid_Driver& grid, // mohan add 2024-04-06 + const TwoCenterBundle& two_center_bundle, + const LCAO_Orbitals& orb, + const K_Vectors& kv, + const bool& binary = false, + const double& sparse_threshold = 1e-10); - void output_dSR(const int& istep, - const UnitCell& ucell, - const Parallel_Orbitals& pv, - LCAO_HS_Arrays& HS_Arrays, - const Grid_Driver& grid, // mohan add 2024-04-06 - const TwoCenterBundle& two_center_bundle, - const LCAO_Orbitals& orb, - const K_Vectors& kv, - const bool& binary = false, - const double& sparse_thr = 1e-10); +void output_dSR(const int& istep, + const UnitCell& ucell, + const Parallel_Orbitals& pv, + LCAO_HS_Arrays& HS_Arrays, + const Grid_Driver& grid, // mohan add 2024-04-06 + const TwoCenterBundle& two_center_bundle, + const LCAO_Orbitals& orb, + const K_Vectors& kv, + const bool& binary = false, + const double& sparse_thr = 1e-10); - void output_TR(const int istep, - const UnitCell& ucell, - const Parallel_Orbitals& pv, - LCAO_HS_Arrays& HS_Arrays, - const Grid_Driver& grid, - const TwoCenterBundle& two_center_bundle, - const LCAO_Orbitals& orb, - const std::string& TR_filename = "trs1_nao.csr", - const bool& binary = false, - const double& sparse_threshold = 1e-10); +void output_TR(const int istep, + const UnitCell& ucell, + const Parallel_Orbitals& pv, + LCAO_HS_Arrays& HS_Arrays, + const Grid_Driver& grid, + const TwoCenterBundle& two_center_bundle, + const LCAO_Orbitals& orb, + const std::string& TR_filename = "trs1_nao.csr", + const bool& binary = false, + const double& sparse_threshold = 1e-10); - void output_SR(Parallel_Orbitals& pv, - const Grid_Driver& grid, - hamilt::Hamilt>* p_ham, - const std::string& SR_filename = "srs1_nao.csr", - const bool& binary = false, - const double& sparse_threshold = 1e-10); +void output_SR(Parallel_Orbitals& pv, + const Grid_Driver& grid, + hamilt::Hamilt>* p_ham, + const std::string& SR_filename = "srs1_nao.csr", + const bool& binary = false, + const double& sparse_threshold = 1e-10); } // namespace ModuleIO #endif diff --git a/source/module_io/write_HS_sparse.cpp b/source/module_io/write_HS_sparse.cpp index 4b105e0e7c..920c6b1173 100644 --- a/source/module_io/write_HS_sparse.cpp +++ b/source/module_io/write_HS_sparse.cpp @@ -1,11 +1,11 @@ #include "write_HS_sparse.h" -#include "module_parameter/parameter.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" #include "module_hamilt_lcao/module_tddft/td_velocity.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" #include "single_R_io.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" void ModuleIO::save_HSR_sparse(const int& istep, const Parallel_Orbitals& pv, @@ -14,7 +14,8 @@ void ModuleIO::save_HSR_sparse(const int& istep, const bool& binary, const std::string& SR_filename, const std::string& HR_filename_up, - const std::string& HR_filename_down = "") { + const std::string& HR_filename_down = "") +{ ModuleBase::TITLE("ModuleIO", "save_HSR_sparse"); ModuleBase::timer::tick("ModuleIO", "save_HSR_sparse"); @@ -35,59 +36,73 @@ void ModuleIO::save_HSR_sparse(const int& istep, ModuleBase::GlobalFunc::ZEROS(S_nonzero_num, total_R_num); int spin_loop = 1; - if (PARAM.inp.nspin == 2) { + if (PARAM.inp.nspin == 2) + { spin_loop = 2; } - for (int ispin = 0; ispin < spin_loop; ++ispin) { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { H_nonzero_num[ispin] = new int[total_R_num]; ModuleBase::GlobalFunc::ZEROS(H_nonzero_num[ispin], total_R_num); } int count = 0; - for (auto& R_coor: all_R_coor_ptr) { - if (PARAM.inp.nspin != 4) { - for (int ispin = 0; ispin < spin_loop; ++ispin) { - if (TD_Velocity::tddft_velocity) { - auto iter - = TD_Velocity::td_vel_op->HR_sparse_td_vel[ispin].find( - R_coor); - if (iter - != TD_Velocity::td_vel_op->HR_sparse_td_vel[ispin] - .end()) { - for (auto& row_loop: iter->second) { - H_nonzero_num[ispin][count] - += row_loop.second.size(); + for (auto& R_coor: all_R_coor_ptr) + { + if (PARAM.inp.nspin != 4) + { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { + if (TD_Velocity::tddft_velocity) + { + auto iter = TD_Velocity::td_vel_op->HR_sparse_td_vel[ispin].find(R_coor); + if (iter != TD_Velocity::td_vel_op->HR_sparse_td_vel[ispin].end()) + { + for (auto& row_loop: iter->second) + { + H_nonzero_num[ispin][count] += row_loop.second.size(); } } - } else { + } + else + { auto iter = HR_sparse_ptr[ispin].find(R_coor); - if (iter != HR_sparse_ptr[ispin].end()) { - for (auto& row_loop: iter->second) { - H_nonzero_num[ispin][count] - += row_loop.second.size(); + if (iter != HR_sparse_ptr[ispin].end()) + { + for (auto& row_loop: iter->second) + { + H_nonzero_num[ispin][count] += row_loop.second.size(); } } } } auto iter = SR_sparse_ptr.find(R_coor); - if (iter != SR_sparse_ptr.end()) { - for (auto& row_loop: iter->second) { + if (iter != SR_sparse_ptr.end()) + { + for (auto& row_loop: iter->second) + { S_nonzero_num[count] += row_loop.second.size(); } } - } else { + } + else + { auto iter = HR_soc_sparse_ptr.find(R_coor); - if (iter != HR_soc_sparse_ptr.end()) { - for (auto& row_loop: iter->second) { + if (iter != HR_soc_sparse_ptr.end()) + { + for (auto& row_loop: iter->second) + { H_nonzero_num[0][count] += row_loop.second.size(); } } iter = SR_soc_sparse_ptr.find(R_coor); - if (iter != SR_soc_sparse_ptr.end()) { - for (auto& row_loop: iter->second) { + if (iter != SR_soc_sparse_ptr.end()) + { + for (auto& row_loop: iter->second) + { S_nonzero_num[count] += row_loop.second.size(); } } @@ -97,20 +112,27 @@ void ModuleIO::save_HSR_sparse(const int& istep, } Parallel_Reduce::reduce_all(S_nonzero_num, total_R_num); - for (int ispin = 0; ispin < spin_loop; ++ispin) { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { Parallel_Reduce::reduce_all(H_nonzero_num[ispin], total_R_num); } - if (PARAM.inp.nspin == 2) { - for (int index = 0; index < total_R_num; ++index) { - if (H_nonzero_num[0][index] != 0 || H_nonzero_num[1][index] != 0 - || S_nonzero_num[index] != 0) { + if (PARAM.inp.nspin == 2) + { + for (int index = 0; index < total_R_num; ++index) + { + if (H_nonzero_num[0][index] != 0 || H_nonzero_num[1][index] != 0 || S_nonzero_num[index] != 0) + { output_R_number++; } } - } else { - for (int index = 0; index < total_R_num; ++index) { - if (H_nonzero_num[0][index] != 0 || S_nonzero_num[index] != 0) { + } + else + { + for (int index = 0; index < total_R_num; ++index) + { + if (H_nonzero_num[0][index] != 0 || S_nonzero_num[index] != 0) + { output_R_number++; } } @@ -118,11 +140,14 @@ void ModuleIO::save_HSR_sparse(const int& istep, std::stringstream ssh[2]; std::stringstream sss; - if (PARAM.inp.calculation == "md" && !PARAM.inp.out_app_flag) { + if (PARAM.inp.calculation == "md" && !PARAM.inp.out_app_flag) + { ssh[0] << PARAM.globalv.global_matrix_dir << step << "_" << HR_filename_up; ssh[1] << PARAM.globalv.global_matrix_dir << step << "_" << HR_filename_down; sss << PARAM.globalv.global_matrix_dir << step << "_" << SR_filename; - } else { + } + else + { ssh[0] << PARAM.globalv.global_out_dir << HR_filename_up; ssh[1] << PARAM.globalv.global_out_dir << HR_filename_down; sss << PARAM.globalv.global_out_dir << SR_filename; @@ -135,50 +160,61 @@ void ModuleIO::save_HSR_sparse(const int& istep, std::ofstream g1[2]; std::ofstream g2; - if (GlobalV::DRANK == 0) { - if (binary) { + if (GlobalV::DRANK == 0) + { + if (binary) + { int nlocal = PARAM.globalv.nlocal; - for (int ispin = 0; ispin < spin_loop; ++ispin) { - if (PARAM.inp.calculation == "md" && PARAM.inp.out_app_flag - && step) { - g1[ispin].open(ssh[ispin].str().c_str(), - std::ios::binary | std::ios::app); - } else { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { + if (PARAM.inp.calculation == "md" && PARAM.inp.out_app_flag && step) + { + g1[ispin].open(ssh[ispin].str().c_str(), std::ios::binary | std::ios::app); + } + else + { g1[ispin].open(ssh[ispin].str().c_str(), std::ios::binary); } g1[ispin].write(reinterpret_cast(&step), sizeof(int)); - g1[ispin].write(reinterpret_cast(&nlocal), - sizeof(int)); - g1[ispin].write(reinterpret_cast(&output_R_number), - sizeof(int)); + g1[ispin].write(reinterpret_cast(&nlocal), sizeof(int)); + g1[ispin].write(reinterpret_cast(&output_R_number), sizeof(int)); } - if (PARAM.inp.calculation == "md" && PARAM.inp.out_app_flag && step) { + if (PARAM.inp.calculation == "md" && PARAM.inp.out_app_flag && step) + { g2.open(sss.str().c_str(), std::ios::binary | std::ios::app); - } else { + } + else + { g2.open(sss.str().c_str(), std::ios::binary); } g2.write(reinterpret_cast(&step), sizeof(int)); g2.write(reinterpret_cast(&nlocal), sizeof(int)); g2.write(reinterpret_cast(&output_R_number), sizeof(int)); - } else { - for (int ispin = 0; ispin < spin_loop; ++ispin) { - if (PARAM.inp.calculation == "md" && PARAM.inp.out_app_flag - && step) { + } + else + { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { + if (PARAM.inp.calculation == "md" && PARAM.inp.out_app_flag && step) + { g1[ispin].open(ssh[ispin].str().c_str(), std::ios::app); - } else { + } + else + { g1[ispin].open(ssh[ispin].str().c_str()); } g1[ispin] << "STEP: " << step << std::endl; - g1[ispin] << "Matrix Dimension of H(R): " << PARAM.globalv.nlocal - << std::endl; - g1[ispin] << "Matrix number of H(R): " << output_R_number - << std::endl; + g1[ispin] << "Matrix Dimension of H(R): " << PARAM.globalv.nlocal << std::endl; + g1[ispin] << "Matrix number of H(R): " << output_R_number << std::endl; } - if (PARAM.inp.calculation == "md" && PARAM.inp.out_app_flag && step) { + if (PARAM.inp.calculation == "md" && PARAM.inp.out_app_flag && step) + { g2.open(sss.str().c_str(), std::ios::app); - } else { + } + else + { g2.open(sss.str().c_str()); } g2 << "STEP: " << step << std::endl; @@ -190,19 +226,24 @@ void ModuleIO::save_HSR_sparse(const int& istep, output_R_coor_ptr.clear(); count = 0; - for (auto& R_coor: all_R_coor_ptr) { + for (auto& R_coor: all_R_coor_ptr) + { int dRx = R_coor.x; int dRy = R_coor.y; int dRz = R_coor.z; - if (PARAM.inp.nspin == 2) { - if (H_nonzero_num[0][count] == 0 && H_nonzero_num[1][count] == 0 - && S_nonzero_num[count] == 0) { + if (PARAM.inp.nspin == 2) + { + if (H_nonzero_num[0][count] == 0 && H_nonzero_num[1][count] == 0 && S_nonzero_num[count] == 0) + { count++; continue; } - } else { - if (H_nonzero_num[0][count] == 0 && S_nonzero_num[count] == 0) { + } + else + { + if (H_nonzero_num[0][count] == 0 && S_nonzero_num[count] == 0) + { count++; continue; } @@ -210,34 +251,37 @@ void ModuleIO::save_HSR_sparse(const int& istep, output_R_coor_ptr.insert(R_coor); - if (GlobalV::DRANK == 0) { - if (binary) { - for (int ispin = 0; ispin < spin_loop; ++ispin) { + if (GlobalV::DRANK == 0) + { + if (binary) + { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { g1[ispin].write(reinterpret_cast(&dRx), sizeof(int)); g1[ispin].write(reinterpret_cast(&dRy), sizeof(int)); g1[ispin].write(reinterpret_cast(&dRz), sizeof(int)); - g1[ispin].write( - reinterpret_cast(&H_nonzero_num[ispin][count]), - sizeof(int)); + g1[ispin].write(reinterpret_cast(&H_nonzero_num[ispin][count]), sizeof(int)); } g2.write(reinterpret_cast(&dRx), sizeof(int)); g2.write(reinterpret_cast(&dRy), sizeof(int)); g2.write(reinterpret_cast(&dRz), sizeof(int)); - g2.write(reinterpret_cast(&S_nonzero_num[count]), - sizeof(int)); - } else { - for (int ispin = 0; ispin < spin_loop; ++ispin) { - g1[ispin] << dRx << " " << dRy << " " << dRz << " " - << H_nonzero_num[ispin][count] << std::endl; + g2.write(reinterpret_cast(&S_nonzero_num[count]), sizeof(int)); + } + else + { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { + g1[ispin] << dRx << " " << dRy << " " << dRz << " " << H_nonzero_num[ispin][count] << std::endl; } - g2 << dRx << " " << dRy << " " << dRz << " " - << S_nonzero_num[count] << std::endl; + g2 << dRx << " " << dRy << " " << dRz << " " << S_nonzero_num[count] << std::endl; } } - for (int ispin = 0; ispin < spin_loop; ++ispin) { - if (H_nonzero_num[ispin][count] == 0) { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { + if (H_nonzero_num[ispin][count] == 0) + { // if (GlobalV::DRANK == 0) // { // if (!binary) @@ -252,33 +296,33 @@ void ModuleIO::save_HSR_sparse(const int& istep, // g1[ispin] << std::endl; // } // } - } else { - if (PARAM.inp.nspin != 4) { - if (TD_Velocity::tddft_velocity) { - output_single_R(g1[ispin], - TD_Velocity::td_vel_op - ->HR_sparse_td_vel[ispin][R_coor], - sparse_thr, - binary, - pv); - } else { + } + else + { + if (PARAM.inp.nspin != 4) + { + if (TD_Velocity::tddft_velocity) + { output_single_R(g1[ispin], - HR_sparse_ptr[ispin][R_coor], + TD_Velocity::td_vel_op->HR_sparse_td_vel[ispin][R_coor], sparse_thr, binary, pv); } - } else { - output_single_R(g1[ispin], - HR_soc_sparse_ptr[R_coor], - sparse_thr, - binary, - pv); + else + { + output_single_R(g1[ispin], HR_sparse_ptr[ispin][R_coor], sparse_thr, binary, pv); + } + } + else + { + output_single_R(g1[ispin], HR_soc_sparse_ptr[R_coor], sparse_thr, binary, pv); } } } - if (S_nonzero_num[count] == 0) { + if (S_nonzero_num[count] == 0) + { // if (!binary) // { // if (GlobalV::DRANK == 0) @@ -292,33 +336,33 @@ void ModuleIO::save_HSR_sparse(const int& istep, // g2 << std::endl; // } // } - } else { - if (PARAM.inp.nspin != 4) { - output_single_R(g2, - SR_sparse_ptr[R_coor], - sparse_thr, - binary, - pv); - } else { - output_single_R(g2, - SR_soc_sparse_ptr[R_coor], - sparse_thr, - binary, - pv); + } + else + { + if (PARAM.inp.nspin != 4) + { + output_single_R(g2, SR_sparse_ptr[R_coor], sparse_thr, binary, pv); + } + else + { + output_single_R(g2, SR_soc_sparse_ptr[R_coor], sparse_thr, binary, pv); } } count++; } - if (GlobalV::DRANK == 0) { - for (int ispin = 0; ispin < spin_loop; ++ispin) { + if (GlobalV::DRANK == 0) + { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { g1[ispin].close(); } g2.close(); } - for (int ispin = 0; ispin < spin_loop; ++ispin) { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { delete[] H_nonzero_num[ispin]; H_nonzero_num[ispin] = nullptr; } @@ -334,7 +378,8 @@ void ModuleIO::save_dH_sparse(const int& istep, LCAO_HS_Arrays& HS_Arrays, const double& sparse_thr, const bool& binary, - const std::string& fileflag) { + const std::string& fileflag) +{ ModuleBase::TITLE("ModuleIO", "save_dH_sparse"); ModuleBase::timer::tick("ModuleIO", "save_dH_sparse"); @@ -355,11 +400,13 @@ void ModuleIO::save_dH_sparse(const int& istep, int step = istep; int spin_loop = 1; - if (PARAM.inp.nspin == 2) { + if (PARAM.inp.nspin == 2) + { spin_loop = 2; } - for (int ispin = 0; ispin < spin_loop; ++ispin) { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { dHx_nonzero_num[ispin] = new int[total_R_num]; ModuleBase::GlobalFunc::ZEROS(dHx_nonzero_num[ispin], total_R_num); dHy_nonzero_num[ispin] = new int[total_R_num]; @@ -369,34 +416,47 @@ void ModuleIO::save_dH_sparse(const int& istep, } int count = 0; - for (auto& R_coor: all_R_coor_ptr) { - if (PARAM.inp.nspin != 4) { - for (int ispin = 0; ispin < spin_loop; ++ispin) { + for (auto& R_coor: all_R_coor_ptr) + { + if (PARAM.inp.nspin != 4) + { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { auto iter1 = dHRx_sparse_ptr[ispin].find(R_coor); - if (iter1 != dHRx_sparse_ptr[ispin].end()) { - for (auto& row_loop: iter1->second) { + if (iter1 != dHRx_sparse_ptr[ispin].end()) + { + for (auto& row_loop: iter1->second) + { dHx_nonzero_num[ispin][count] += row_loop.second.size(); } } auto iter2 = dHRy_sparse_ptr[ispin].find(R_coor); - if (iter2 != dHRy_sparse_ptr[ispin].end()) { - for (auto& row_loop: iter2->second) { + if (iter2 != dHRy_sparse_ptr[ispin].end()) + { + for (auto& row_loop: iter2->second) + { dHy_nonzero_num[ispin][count] += row_loop.second.size(); } } auto iter3 = dHRz_sparse_ptr[ispin].find(R_coor); - if (iter3 != dHRz_sparse_ptr[ispin].end()) { - for (auto& row_loop: iter3->second) { + if (iter3 != dHRz_sparse_ptr[ispin].end()) + { + for (auto& row_loop: iter3->second) + { dHz_nonzero_num[ispin][count] += row_loop.second.size(); } } } - } else { + } + else + { auto iter = dHRx_soc_sparse_ptr.find(R_coor); - if (iter != dHRx_soc_sparse_ptr.end()) { - for (auto& row_loop: iter->second) { + if (iter != dHRx_soc_sparse_ptr.end()) + { + for (auto& row_loop: iter->second) + { dHx_nonzero_num[0][count] += row_loop.second.size(); } } @@ -405,26 +465,30 @@ void ModuleIO::save_dH_sparse(const int& istep, count++; } - for (int ispin = 0; ispin < spin_loop; ++ispin) { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { Parallel_Reduce::reduce_all(dHx_nonzero_num[ispin], total_R_num); Parallel_Reduce::reduce_all(dHy_nonzero_num[ispin], total_R_num); Parallel_Reduce::reduce_all(dHz_nonzero_num[ispin], total_R_num); } - if (PARAM.inp.nspin == 2) { - for (int index = 0; index < total_R_num; ++index) { - if (dHx_nonzero_num[0][index] != 0 || dHx_nonzero_num[1][index] != 0 - || dHy_nonzero_num[0][index] != 0 - || dHy_nonzero_num[1][index] != 0 - || dHz_nonzero_num[0][index] != 0 - || dHz_nonzero_num[1][index] != 0) { + if (PARAM.inp.nspin == 2) + { + for (int index = 0; index < total_R_num; ++index) + { + if (dHx_nonzero_num[0][index] != 0 || dHx_nonzero_num[1][index] != 0 || dHy_nonzero_num[0][index] != 0 + || dHy_nonzero_num[1][index] != 0 || dHz_nonzero_num[0][index] != 0 || dHz_nonzero_num[1][index] != 0) + { output_R_number++; } } - } else { - for (int index = 0; index < total_R_num; ++index) { - if (dHx_nonzero_num[0][index] != 0 || dHy_nonzero_num[0][index] != 0 - || dHz_nonzero_num[0][index] != 0) { + } + else + { + for (int index = 0; index < total_R_num; ++index) + { + if (dHx_nonzero_num[0][index] != 0 || dHy_nonzero_num[0][index] != 0 || dHz_nonzero_num[0][index] != 0) + { output_R_number++; } } @@ -433,101 +497,89 @@ void ModuleIO::save_dH_sparse(const int& istep, std::stringstream sshx[2]; std::stringstream sshy[2]; std::stringstream sshz[2]; - if (PARAM.inp.calculation == "md" && !PARAM.inp.out_app_flag) - { - sshx[0] << PARAM.globalv.global_matrix_dir - << "d"<(&step), sizeof(int)); - g1x[ispin].write(reinterpret_cast(&nlocal), - sizeof(int)); - g1x[ispin].write(reinterpret_cast(&output_R_number), - sizeof(int)); + g1x[ispin].write(reinterpret_cast(&nlocal), sizeof(int)); + g1x[ispin].write(reinterpret_cast(&output_R_number), sizeof(int)); g1y[ispin].write(reinterpret_cast(&step), sizeof(int)); - g1y[ispin].write(reinterpret_cast(&nlocal), - sizeof(int)); - g1y[ispin].write(reinterpret_cast(&output_R_number), - sizeof(int)); + g1y[ispin].write(reinterpret_cast(&nlocal), sizeof(int)); + g1y[ispin].write(reinterpret_cast(&output_R_number), sizeof(int)); g1z[ispin].write(reinterpret_cast(&step), sizeof(int)); - g1z[ispin].write(reinterpret_cast(&nlocal), - sizeof(int)); - g1z[ispin].write(reinterpret_cast(&output_R_number), - sizeof(int)); - } - } else { - for (int ispin = 0; ispin < spin_loop; ++ispin) { - if (PARAM.inp.calculation == "md" && PARAM.inp.out_app_flag - && step) { + g1z[ispin].write(reinterpret_cast(&nlocal), sizeof(int)); + g1z[ispin].write(reinterpret_cast(&output_R_number), sizeof(int)); + } + } + else + { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { + if (PARAM.inp.calculation == "md" && PARAM.inp.out_app_flag && step) + { g1x[ispin].open(sshx[ispin].str().c_str(), std::ios::app); g1y[ispin].open(sshy[ispin].str().c_str(), std::ios::app); g1z[ispin].open(sshz[ispin].str().c_str(), std::ios::app); - } else { + } + else + { g1x[ispin].open(sshx[ispin].str().c_str()); g1y[ispin].open(sshy[ispin].str().c_str()); g1z[ispin].open(sshz[ispin].str().c_str()); } g1x[ispin] << "STEP: " << step << std::endl; - g1x[ispin] << "Matrix Dimension of dHx(R): " << PARAM.globalv.nlocal - << std::endl; - g1x[ispin] << "Matrix number of dHx(R): " << output_R_number - << std::endl; + g1x[ispin] << "Matrix Dimension of dHx(R): " << PARAM.globalv.nlocal << std::endl; + g1x[ispin] << "Matrix number of dHx(R): " << output_R_number << std::endl; g1y[ispin] << "STEP: " << step << std::endl; - g1y[ispin] << "Matrix Dimension of dHy(R): " << PARAM.globalv.nlocal - << std::endl; - g1y[ispin] << "Matrix number of dHy(R): " << output_R_number - << std::endl; + g1y[ispin] << "Matrix Dimension of dHy(R): " << PARAM.globalv.nlocal << std::endl; + g1y[ispin] << "Matrix number of dHy(R): " << output_R_number << std::endl; g1z[ispin] << "STEP: " << step << std::endl; - g1z[ispin] << "Matrix Dimension of dHz(R): " << PARAM.globalv.nlocal - << std::endl; - g1z[ispin] << "Matrix number of dHz(R): " << output_R_number - << std::endl; + g1z[ispin] << "Matrix Dimension of dHz(R): " << PARAM.globalv.nlocal << std::endl; + g1z[ispin] << "Matrix number of dHz(R): " << output_R_number << std::endl; } } } @@ -535,23 +587,25 @@ void ModuleIO::save_dH_sparse(const int& istep, output_R_coor_ptr.clear(); count = 0; - for (auto& R_coor: all_R_coor_ptr) { + for (auto& R_coor: all_R_coor_ptr) + { int dRx = R_coor.x; int dRy = R_coor.y; int dRz = R_coor.z; - if (PARAM.inp.nspin == 2) { - if (dHx_nonzero_num[0][count] == 0 && dHx_nonzero_num[1][count] == 0 - && dHy_nonzero_num[0][count] == 0 - && dHy_nonzero_num[1][count] == 0 - && dHz_nonzero_num[0][count] == 0 - && dHz_nonzero_num[1][count] == 0) { + if (PARAM.inp.nspin == 2) + { + if (dHx_nonzero_num[0][count] == 0 && dHx_nonzero_num[1][count] == 0 && dHy_nonzero_num[0][count] == 0 + && dHy_nonzero_num[1][count] == 0 && dHz_nonzero_num[0][count] == 0 && dHz_nonzero_num[1][count] == 0) + { count++; continue; } - } else { - if (dHx_nonzero_num[0][count] == 0 && dHy_nonzero_num[0][count] == 0 - && dHz_nonzero_num[0][count] == 0) { + } + else + { + if (dHx_nonzero_num[0][count] == 0 && dHy_nonzero_num[0][count] == 0 && dHz_nonzero_num[0][count] == 0) + { count++; continue; } @@ -559,95 +613,72 @@ void ModuleIO::save_dH_sparse(const int& istep, output_R_coor_ptr.insert(R_coor); - if (GlobalV::DRANK == 0) { - if (binary) { - for (int ispin = 0; ispin < spin_loop; ++ispin) { - g1x[ispin].write(reinterpret_cast(&dRx), - sizeof(int)); - g1x[ispin].write(reinterpret_cast(&dRy), - sizeof(int)); - g1x[ispin].write(reinterpret_cast(&dRz), - sizeof(int)); - g1x[ispin].write( - reinterpret_cast(&dHx_nonzero_num[ispin][count]), - sizeof(int)); - - g1y[ispin].write(reinterpret_cast(&dRx), - sizeof(int)); - g1y[ispin].write(reinterpret_cast(&dRy), - sizeof(int)); - g1y[ispin].write(reinterpret_cast(&dRz), - sizeof(int)); - g1y[ispin].write( - reinterpret_cast(&dHy_nonzero_num[ispin][count]), - sizeof(int)); - - g1z[ispin].write(reinterpret_cast(&dRx), - sizeof(int)); - g1z[ispin].write(reinterpret_cast(&dRy), - sizeof(int)); - g1z[ispin].write(reinterpret_cast(&dRz), - sizeof(int)); - g1z[ispin].write( - reinterpret_cast(&dHz_nonzero_num[ispin][count]), - sizeof(int)); + if (GlobalV::DRANK == 0) + { + if (binary) + { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { + g1x[ispin].write(reinterpret_cast(&dRx), sizeof(int)); + g1x[ispin].write(reinterpret_cast(&dRy), sizeof(int)); + g1x[ispin].write(reinterpret_cast(&dRz), sizeof(int)); + g1x[ispin].write(reinterpret_cast(&dHx_nonzero_num[ispin][count]), sizeof(int)); + + g1y[ispin].write(reinterpret_cast(&dRx), sizeof(int)); + g1y[ispin].write(reinterpret_cast(&dRy), sizeof(int)); + g1y[ispin].write(reinterpret_cast(&dRz), sizeof(int)); + g1y[ispin].write(reinterpret_cast(&dHy_nonzero_num[ispin][count]), sizeof(int)); + + g1z[ispin].write(reinterpret_cast(&dRx), sizeof(int)); + g1z[ispin].write(reinterpret_cast(&dRy), sizeof(int)); + g1z[ispin].write(reinterpret_cast(&dRz), sizeof(int)); + g1z[ispin].write(reinterpret_cast(&dHz_nonzero_num[ispin][count]), sizeof(int)); } - } else { - for (int ispin = 0; ispin < spin_loop; ++ispin) { - g1x[ispin] << dRx << " " << dRy << " " << dRz << " " - << dHx_nonzero_num[ispin][count] << std::endl; - g1y[ispin] << dRx << " " << dRy << " " << dRz << " " - << dHy_nonzero_num[ispin][count] << std::endl; - g1z[ispin] << dRx << " " << dRy << " " << dRz << " " - << dHz_nonzero_num[ispin][count] << std::endl; + } + else + { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { + g1x[ispin] << dRx << " " << dRy << " " << dRz << " " << dHx_nonzero_num[ispin][count] << std::endl; + g1y[ispin] << dRx << " " << dRy << " " << dRz << " " << dHy_nonzero_num[ispin][count] << std::endl; + g1z[ispin] << dRx << " " << dRy << " " << dRz << " " << dHz_nonzero_num[ispin][count] << std::endl; } } } - for (int ispin = 0; ispin < spin_loop; ++ispin) { - if (dHx_nonzero_num[ispin][count] > 0) { - if (PARAM.inp.nspin != 4) { - output_single_R(g1x[ispin], - dHRx_sparse_ptr[ispin][R_coor], - sparse_thr, - binary, - pv); - } else { - output_single_R(g1x[ispin], - dHRx_soc_sparse_ptr[R_coor], - sparse_thr, - binary, - pv); + for (int ispin = 0; ispin < spin_loop; ++ispin) + { + if (dHx_nonzero_num[ispin][count] > 0) + { + if (PARAM.inp.nspin != 4) + { + output_single_R(g1x[ispin], dHRx_sparse_ptr[ispin][R_coor], sparse_thr, binary, pv); + } + else + { + output_single_R(g1x[ispin], dHRx_soc_sparse_ptr[R_coor], sparse_thr, binary, pv); } } - if (dHy_nonzero_num[ispin][count] > 0) { - if (PARAM.inp.nspin != 4) { - output_single_R(g1y[ispin], - dHRy_sparse_ptr[ispin][R_coor], - sparse_thr, - binary, - pv); - } else { - output_single_R(g1y[ispin], - dHRy_soc_sparse_ptr[R_coor], - sparse_thr, - binary, - pv); + if (dHy_nonzero_num[ispin][count] > 0) + { + if (PARAM.inp.nspin != 4) + { + output_single_R(g1y[ispin], dHRy_sparse_ptr[ispin][R_coor], sparse_thr, binary, pv); + } + else + { + output_single_R(g1y[ispin], dHRy_soc_sparse_ptr[R_coor], sparse_thr, binary, pv); } } - if (dHz_nonzero_num[ispin][count] > 0) { - if (PARAM.inp.nspin != 4) { - output_single_R(g1z[ispin], - dHRz_sparse_ptr[ispin][R_coor], - sparse_thr, - binary, - pv); - } else { - output_single_R(g1z[ispin], - dHRz_soc_sparse_ptr[R_coor], - sparse_thr, - binary, - pv); + if (dHz_nonzero_num[ispin][count] > 0) + { + if (PARAM.inp.nspin != 4) + { + output_single_R(g1z[ispin], dHRz_sparse_ptr[ispin][R_coor], sparse_thr, binary, pv); + } + else + { + output_single_R(g1z[ispin], dHRz_soc_sparse_ptr[R_coor], sparse_thr, binary, pv); } } } @@ -655,19 +686,24 @@ void ModuleIO::save_dH_sparse(const int& istep, count++; } - if (GlobalV::DRANK == 0) { - for (int ispin = 0; ispin < spin_loop; ++ispin) { + if (GlobalV::DRANK == 0) + { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { g1x[ispin].close(); } - for (int ispin = 0; ispin < spin_loop; ++ispin) { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { g1y[ispin].close(); } - for (int ispin = 0; ispin < spin_loop; ++ispin) { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { g1z[ispin].close(); } } - for (int ispin = 0; ispin < spin_loop; ++ispin) { + for (int ispin = 0; ispin < spin_loop; ++ispin) + { delete[] dHx_nonzero_num[ispin]; dHx_nonzero_num[ispin] = nullptr; delete[] dHy_nonzero_num[ispin]; @@ -681,39 +717,44 @@ void ModuleIO::save_dH_sparse(const int& istep, } template -void ModuleIO::save_sparse( - const std::map, - std::map>>& smat, - const std::set>& all_R_coor, - const double& sparse_thr, - const bool& binary, - const std::string& filename, - const Parallel_Orbitals& pv, - const std::string& label, - const int& istep, - const bool& reduce) { +void ModuleIO::save_sparse(const std::map, std::map>>& smat, + const std::set>& all_R_coor, + const double& sparse_thr, + const bool& binary, + const std::string& filename, + const Parallel_Orbitals& pv, + const std::string& label, + const int& istep, + const bool& reduce) +{ ModuleBase::TITLE("ModuleIO", "save_sparse"); ModuleBase::timer::tick("ModuleIO", "save_sparse"); int total_R_num = all_R_coor.size(); std::vector nonzero_num(total_R_num, 0); int count = 0; - for (auto& R_coor: all_R_coor) { + for (auto& R_coor: all_R_coor) + { auto iter = smat.find(R_coor); - if (iter != smat.end()) { - for (auto& row_loop: iter->second) { + if (iter != smat.end()) + { + for (auto& row_loop: iter->second) + { nonzero_num[count] += row_loop.second.size(); } } ++count; } - if (reduce) { + if (reduce) + { Parallel_Reduce::reduce_all(nonzero_num.data(), total_R_num); } int output_R_number = 0; - for (int index = 0; index < total_R_num; ++index) { - if (nonzero_num[index] != 0) { + for (int index = 0; index < total_R_num; ++index) + { + if (nonzero_num[index] != 0) + { ++output_R_number; } } @@ -721,54 +762,64 @@ void ModuleIO::save_sparse( std::stringstream sss; sss << filename; std::ofstream ofs; - if (!reduce || GlobalV::DRANK == 0) { - if (binary) { + if (!reduce || GlobalV::DRANK == 0) + { + if (binary) + { int nlocal = PARAM.globalv.nlocal; - if (PARAM.inp.calculation == "md" && PARAM.inp.out_app_flag - && istep) { + if (PARAM.inp.calculation == "md" && PARAM.inp.out_app_flag && istep) + { ofs.open(sss.str().c_str(), std::ios::binary | std::ios::app); - } else { + } + else + { ofs.open(sss.str().c_str(), std::ios::binary); } ofs.write(reinterpret_cast(0), sizeof(int)); ofs.write(reinterpret_cast(&nlocal), sizeof(int)); ofs.write(reinterpret_cast(&output_R_number), sizeof(int)); - } else { - if (PARAM.inp.calculation == "md" && PARAM.inp.out_app_flag - && istep) { + } + else + { + if (PARAM.inp.calculation == "md" && PARAM.inp.out_app_flag && istep) + { ofs.open(sss.str().c_str(), std::ios::app); - } else { + } + else + { ofs.open(sss.str().c_str()); } ofs << "STEP: " << std::max(istep, 0) << std::endl; - ofs << "Matrix Dimension of " + label + "(R): " << PARAM.globalv.nlocal - << std::endl; - ofs << "Matrix number of " + label + "(R): " << output_R_number - << std::endl; + ofs << "Matrix Dimension of " + label + "(R): " << PARAM.globalv.nlocal << std::endl; + ofs << "Matrix number of " + label + "(R): " << output_R_number << std::endl; } } count = 0; - for (auto& R_coor: all_R_coor) { + for (auto& R_coor: all_R_coor) + { int dRx = R_coor.x; int dRy = R_coor.y; int dRz = R_coor.z; - if (nonzero_num[count] == 0) { + if (nonzero_num[count] == 0) + { count++; continue; } - if (!reduce || GlobalV::DRANK == 0) { - if (binary) { + if (!reduce || GlobalV::DRANK == 0) + { + if (binary) + { ofs.write(reinterpret_cast(&dRx), sizeof(int)); ofs.write(reinterpret_cast(&dRy), sizeof(int)); ofs.write(reinterpret_cast(&dRz), sizeof(int)); - ofs.write(reinterpret_cast(&nonzero_num[count]), - sizeof(int)); - } else { - ofs << dRx << " " << dRy << " " << dRz << " " - << nonzero_num[count] << std::endl; + ofs.write(reinterpret_cast(&nonzero_num[count]), sizeof(int)); + } + else + { + ofs << dRx << " " << dRy << " " << dRz << " " << nonzero_num[count] << std::endl; } } @@ -783,7 +834,8 @@ void ModuleIO::save_sparse( } ++count; } - if (!reduce || GlobalV::DRANK == 0) { + if (!reduce || GlobalV::DRANK == 0) + { ofs.close(); } @@ -791,8 +843,7 @@ void ModuleIO::save_sparse( } template void ModuleIO::save_sparse( - const std::map, - std::map>>&, + const std::map, std::map>>&, const std::set>&, const double&, const bool&, @@ -803,8 +854,7 @@ template void ModuleIO::save_sparse( const bool&); template void ModuleIO::save_sparse>( - const std::map, - std::map>>>&, + const std::map, std::map>>>&, const std::set>&, const double&, const bool&, diff --git a/source/module_io/write_HS_sparse.h b/source/module_io/write_HS_sparse.h index b3e0a2a75c..eb52214a36 100644 --- a/source/module_io/write_HS_sparse.h +++ b/source/module_io/write_HS_sparse.h @@ -1,10 +1,10 @@ #ifndef WRITE_HS_SPARSE_H #define WRITE_HS_SPARSE_H -#include "module_base/global_function.h" -#include "module_base/global_variable.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_hamilt_lcao/hamilt_lcaodft/LCAO_HS_arrays.hpp" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" #include diff --git a/source/module_io/write_cube.cpp b/source/module_io/write_cube.cpp index acff92eac1..5003b42d40 100644 --- a/source/module_io/write_cube.cpp +++ b/source/module_io/write_cube.cpp @@ -1,8 +1,8 @@ -#include "module_base/element_name.h" -#include "module_base/parallel_comm.h" #include "module_hamilt_pw/hamilt_pwdft/parallel_grid.h" #include "module_io/cube_io.h" #include "module_parameter/parameter.h" +#include "source_base/element_name.h" +#include "source_base/parallel_comm.h" #include diff --git a/source/module_io/write_dipole.cpp b/source/module_io/write_dipole.cpp index e1a7c0fa4d..3566c09678 100644 --- a/source/module_io/write_dipole.cpp +++ b/source/module_io/write_dipole.cpp @@ -1,8 +1,8 @@ -#include "module_base/parallel_reduce.h" #include "module_elecstate/module_charge/charge.h" #include "module_hamilt_lcao/module_tddft/evolve_elec.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/dipole_io.h" +#include "source_base/parallel_reduce.h" // fuxiang add 2017-03-15 void ModuleIO::write_dipole(const UnitCell& ucell, diff --git a/source/module_io/write_dos_lcao.h b/source/module_io/write_dos_lcao.h index 406e0eb871..7b66c18902 100644 --- a/source/module_io/write_dos_lcao.h +++ b/source/module_io/write_dos_lcao.h @@ -1,35 +1,33 @@ #ifndef WRITE_DOS_LCAO_H #define WRITE_DOS_LCAO_H -#include "module_base/matrix.h" // use matrix -#include "module_cell/klist.h" // use K_Vectors -#include "module_psi/psi.h" // use psi::Psi -#include "module_hamilt_general/hamilt.h" // use hamilt::Hamilt #include "module_basis/module_ao/parallel_orbitals.h" // use Parallel_Orbitals -#include "module_elecstate/fp_energy.h" // use elecstate::efermi - +#include "module_cell/klist.h" // use K_Vectors +#include "module_elecstate/fp_energy.h" // use elecstate::efermi +#include "module_hamilt_general/hamilt.h" // use hamilt::Hamilt +#include "module_psi/psi.h" // use psi::Psi +#include "source_base/matrix.h" // use matrix namespace ModuleIO { - /// @brief calculate density of states(DOS), - /// partial density of states(PDOS), - /// and mulliken charge for LCAO base - template - void write_dos_lcao( - const psi::Psi* psi, // LCAO wave functions - hamilt::Hamilt* p_ham, // Hamiltonian - const Parallel_Orbitals &pv, // Parallel scheme for LCAO wave functions - const UnitCell& ucell, // Unit cell information - const K_Vectors& kv, // k-point information in Brillouin zone - const int nbands, // Number of bands - const elecstate::efermi &energy_fermi, // Fermi energy - const ModuleBase::matrix& ekb, // Eigenvalues per k-point and band - const ModuleBase::matrix& wg, // Weights of eigenvalues - const double& dos_edelta_ev, // Delta energy - const double& dos_scale, - const double& bcoeff, - const bool out_app_flag, - const int istep, - std::ofstream &ofs_running); -} +/// @brief calculate density of states(DOS), +/// partial density of states(PDOS), +/// and mulliken charge for LCAO base +template +void write_dos_lcao(const psi::Psi* psi, // LCAO wave functions + hamilt::Hamilt* p_ham, // Hamiltonian + const Parallel_Orbitals& pv, // Parallel scheme for LCAO wave functions + const UnitCell& ucell, // Unit cell information + const K_Vectors& kv, // k-point information in Brillouin zone + const int nbands, // Number of bands + const elecstate::efermi& energy_fermi, // Fermi energy + const ModuleBase::matrix& ekb, // Eigenvalues per k-point and band + const ModuleBase::matrix& wg, // Weights of eigenvalues + const double& dos_edelta_ev, // Delta energy + const double& dos_scale, + const double& bcoeff, + const bool out_app_flag, + const int istep, + std::ofstream& ofs_running); +} // namespace ModuleIO #endif diff --git a/source/module_io/write_dos_pw.cpp b/source/module_io/write_dos_pw.cpp index 76a9bc60de..a4f03a21d3 100644 --- a/source/module_io/write_dos_pw.cpp +++ b/source/module_io/write_dos_pw.cpp @@ -1,20 +1,20 @@ #include "write_dos_pw.h" + #include "cal_dos.h" -#include "nscf_fermi_surf.h" -#include "module_base/parallel_reduce.h" #include "module_parameter/parameter.h" +#include "nscf_fermi_surf.h" +#include "source_base/parallel_reduce.h" -void ModuleIO::write_dos_pw( - const UnitCell& ucell, - const ModuleBase::matrix& ekb, - const ModuleBase::matrix& wg, - const K_Vectors& kv, - const int nbands, - const elecstate::efermi &energy_fermi, - const double& dos_edelta_ev, - const double& dos_scale, - const double& bcoeff, - std::ofstream& ofs_running) +void ModuleIO::write_dos_pw(const UnitCell& ucell, + const ModuleBase::matrix& ekb, + const ModuleBase::matrix& wg, + const K_Vectors& kv, + const int nbands, + const elecstate::efermi& energy_fermi, + const double& dos_edelta_ev, + const double& dos_scale, + const double& bcoeff, + std::ofstream& ofs_running) { ModuleBase::TITLE("ModuleIO", "write_dos_pw"); @@ -23,15 +23,7 @@ void ModuleIO::write_dos_pw( double emax = 0.0; double emin = 0.0; - prepare_dos(ofs_running, - energy_fermi, - ekb, - kv.get_nks(), - nbands, - dos_edelta_ev, - dos_scale, - emax, - emin); + prepare_dos(ofs_running, energy_fermi, ekb, kv.get_nks(), nbands, dos_edelta_ev, dos_scale, emax, emin); for (int is = 0; is < nspin0; ++is) { @@ -44,28 +36,27 @@ void ModuleIO::write_dos_pw( ModuleBase::GlobalFunc::OUT(ofs_running, "DOS file", ss.str()); - ModuleIO::cal_dos(is, - ss.str(), - dos_edelta_ev, - emax, - emin, - bcoeff, - kv.get_nks(), - kv.get_nkstot(), - kv.wk, - kv.isk, - nbands, - ekb, - wg); - } - + ModuleIO::cal_dos(is, + ss.str(), + dos_edelta_ev, + emax, + emin, + bcoeff, + kv.get_nks(), + kv.get_nkstot(), + kv.wk, + kv.isk, + nbands, + ekb, + wg); + } if (PARAM.inp.out_dos == 2) { - ModuleBase::WARNING_QUIT("ModuleIO::write_dos_pw","PW basis do not support PDOS calculations yet."); + ModuleBase::WARNING_QUIT("ModuleIO::write_dos_pw", "PW basis do not support PDOS calculations yet."); } - if(PARAM.inp.out_dos == 3) + if (PARAM.inp.out_dos == 3) { for (int is = 0; is < nspin0; is++) { @@ -75,5 +66,5 @@ void ModuleIO::write_dos_pw( } } - ofs_running << " DOS CALCULATIONS ENDS." << std::endl; + ofs_running << " DOS CALCULATIONS ENDS." << std::endl; } diff --git a/source/module_io/write_dos_pw.h b/source/module_io/write_dos_pw.h index b57eb54024..12d4e919d3 100644 --- a/source/module_io/write_dos_pw.h +++ b/source/module_io/write_dos_pw.h @@ -1,24 +1,23 @@ #ifndef WRITE_DOS_PW_H #define WRITE_DOS_PW_H -#include "module_base/matrix.h" -#include "module_cell/unitcell.h" #include "module_cell/klist.h" +#include "module_cell/unitcell.h" #include "module_elecstate/fp_energy.h" +#include "source_base/matrix.h" namespace ModuleIO { - /// @brief calculate density of states(DOS) for PW base - void write_dos_pw( - const UnitCell& ucell, - const ModuleBase::matrix &ekb, - const ModuleBase::matrix &wg, - const K_Vectors& kv, - const int nbands, - const elecstate::efermi &energy_fermi, - const double &dos_edelta_ev, - const double &dos_scale, - const double &bcoeff, - std::ofstream& ofs_running); -} +/// @brief calculate density of states(DOS) for PW base +void write_dos_pw(const UnitCell& ucell, + const ModuleBase::matrix& ekb, + const ModuleBase::matrix& wg, + const K_Vectors& kv, + const int nbands, + const elecstate::efermi& energy_fermi, + const double& dos_edelta_ev, + const double& dos_scale, + const double& bcoeff, + std::ofstream& ofs_running); +} // namespace ModuleIO #endif diff --git a/source/module_io/write_elecstat_pot.cpp b/source/module_io/write_elecstat_pot.cpp index 714fe71f49..192a278aa5 100644 --- a/source/module_io/write_elecstat_pot.cpp +++ b/source/module_io/write_elecstat_pot.cpp @@ -1,12 +1,13 @@ -#include "module_base/element_name.h" -#include "module_base/timer.h" -#include "module_parameter/parameter.h" +#include "write_elecstat_pot.h" + #include "module_elecstate/module_pot/H_Hartree_pw.h" #include "module_elecstate/module_pot/efield.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/cube_io.h" #include "module_io/output_log.h" -#include "write_elecstat_pot.h" +#include "module_parameter/parameter.h" +#include "source_base/element_name.h" +#include "source_base/timer.h" namespace ModuleIO { @@ -44,7 +45,7 @@ void write_elecstat_pot( //! Dipole correction //========================================== ModuleBase::matrix v_efield; - if (efield>0 && dip_corr>0) + if (efield > 0 && dip_corr > 0) { v_efield.create(nspin, rho_basis->nrxx); v_efield = elecstate::Efield::add_efield(*ucell, @@ -62,11 +63,11 @@ void write_elecstat_pot( // the spin index is 0 v_elecstat[ir] = vh(0, ir) + v_eff[ir]; - if (efield>0 && dip_corr>0) + if (efield > 0 && dip_corr > 0) { v_elecstat[ir] += v_efield(0, ir); } - if(imp_sol == true) + if (imp_sol == true) { v_elecstat[ir] += solvent.delta_phi[ir]; } @@ -95,15 +96,15 @@ void write_elecstat_pot( int out_fermi = 0; ModuleIO::write_vdata_palgrid(*chr->pgrid, - v_elecstat.data(), - is, - nspin, - istep, - fn, - ef_tmp, - ucell, - precision, - out_fermi); + v_elecstat.data(), + is, + nspin, + istep, + fn, + ef_tmp, + ucell, + precision, + out_fermi); ModuleBase::timer::tick("ModuleIO", "write_elecstat_pot"); return; diff --git a/source/module_io/write_istate_info.cpp b/source/module_io/write_istate_info.cpp index d6894066ee..398d8e7de3 100644 --- a/source/module_io/write_istate_info.cpp +++ b/source/module_io/write_istate_info.cpp @@ -1,38 +1,38 @@ #include "write_istate_info.h" #include "module_parameter/parameter.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/timer.h" -#include "module_base/parallel_comm.h" // use POOL_WORLD +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_comm.h" // use POOL_WORLD +#include "source_base/timer.h" #ifdef __MPI #include // use MPI_Barrier #endif -void ModuleIO::write_istate_info(const ModuleBase::matrix &ekb,const ModuleBase::matrix &wg, const K_Vectors& kv) +void ModuleIO::write_istate_info(const ModuleBase::matrix& ekb, const ModuleBase::matrix& wg, const K_Vectors& kv) { - ModuleBase::TITLE("ModuleIO","write_istate_info"); - ModuleBase::timer::tick("ModuleIO", "write_istate_info"); + ModuleBase::TITLE("ModuleIO", "write_istate_info"); + ModuleBase::timer::tick("ModuleIO", "write_istate_info"); const int nspin = PARAM.inp.nspin; const int nks = kv.get_nks(); - const int nkstot = kv.get_nkstot(); + const int nkstot = kv.get_nkstot(); bool wrong = false; - for (int ik = 0; ik < nks; ++ik) - { - for (int ib = 0; ib < ekb.nc; ++ib) - { - if (std::abs(ekb(ik, ib)) > 1.0e10) - { - GlobalV::ofs_warning << " ik=" << ik + 1 << " ib=" << ib + 1 - << " " << ekb(ik, ib) << " Ry" << std::endl; - wrong = true; - } - } - } + for (int ik = 0; ik < nks; ++ik) + { + for (int ib = 0; ib < ekb.nc; ++ib) + { + if (std::abs(ekb(ik, ib)) > 1.0e10) + { + GlobalV::ofs_warning << " ik=" << ik + 1 << " ib=" << ib + 1 << " " << ekb(ik, ib) << " Ry" + << std::endl; + wrong = true; + } + } + } #ifdef __MPI MPI_Allreduce(MPI_IN_PLACE, &wrong, 1, MPI_C_BOOL, MPI_LOR, MPI_COMM_WORLD); @@ -46,7 +46,7 @@ void ModuleIO::write_istate_info(const ModuleBase::matrix &ekb,const ModuleBase: #ifdef __MPI MPI_Allreduce(MPI_IN_PLACE, ngk_tot.data(), nks, MPI_INT, MPI_SUM, POOL_WORLD); -#endif +#endif // file name to store eigenvalues std::string filename = PARAM.globalv.global_out_dir + "eig.txt"; @@ -85,17 +85,16 @@ void ModuleIO::write_istate_info(const ModuleBase::matrix &ekb,const ModuleBase: const int end_ik = nks_np * (is + 1); for (int ik = start_ik; ik < end_ik; ++ik) { - ofs_eig << " spin=" << is+1 << " k-point=" - << kv.ik2iktot[ik] + 1 - is * nkstot_np << "/" << nkstot_np - << " Cartesian=" << kv.kvec_c[ik].x << " " << kv.kvec_c[ik].y - << " " << kv.kvec_c[ik].z << " (" << ngk_tot[ik] << " plane wave)" << std::endl; + ofs_eig << " spin=" << is + 1 << " k-point=" << kv.ik2iktot[ik] + 1 - is * nkstot_np << "/" + << nkstot_np << " Cartesian=" << kv.kvec_c[ik].x << " " << kv.kvec_c[ik].y << " " + << kv.kvec_c[ik].z << " (" << ngk_tot[ik] << " plane wave)" << std::endl; ofs_eig << std::setprecision(16); ofs_eig << std::setiosflags(std::ios::showpoint); for (int ib = 0; ib < ekb.nc; ib++) { - ofs_eig << " " << ib + 1 << " " << ekb(ik, ib) * ModuleBase::Ry_to_eV - << " " << wg(ik, ib) << std::endl; + ofs_eig << " " << ib + 1 << " " << ekb(ik, ib) * ModuleBase::Ry_to_eV << " " << wg(ik, ib) + << std::endl; } ofs_eig << std::endl; } @@ -108,6 +107,6 @@ void ModuleIO::write_istate_info(const ModuleBase::matrix &ekb,const ModuleBase: #endif } - ModuleBase::timer::tick("ModuleIO", "write_istate_info"); - return; + ModuleBase::timer::tick("ModuleIO", "write_istate_info"); + return; } diff --git a/source/module_io/write_istate_info.h b/source/module_io/write_istate_info.h index 723f1efa93..760cc51077 100644 --- a/source/module_io/write_istate_info.h +++ b/source/module_io/write_istate_info.h @@ -1,14 +1,12 @@ #ifndef WRITE_ISTATE_INFO_H #define WRITE_ISTATE_INFO_H -#include "module_base/matrix.h" #include "module_cell/klist.h" #include "module_cell/parallel_kpoints.h" +#include "source_base/matrix.h" namespace ModuleIO { - void write_istate_info(const ModuleBase::matrix &ekb, - const ModuleBase::matrix &wg, - const K_Vectors& kv); +void write_istate_info(const ModuleBase::matrix& ekb, const ModuleBase::matrix& wg, const K_Vectors& kv); } #endif diff --git a/source/module_io/write_libxc_r.cpp b/source/module_io/write_libxc_r.cpp index 076a8d02c9..9517186c21 100644 --- a/source/module_io/write_libxc_r.cpp +++ b/source/module_io/write_libxc_r.cpp @@ -6,443 +6,488 @@ #ifdef USE_LIBXC #include "write_libxc_r.h" + +#include "module_basis/module_pw/pw_basis.h" +#include "module_basis/module_pw/pw_basis_big.h" +#include "module_elecstate/module_charge/charge.h" #include "module_hamilt_general/module_xc/xc_functional.h" #include "module_hamilt_general/module_xc/xc_functional_libxc.h" -#include "module_elecstate/module_charge/charge.h" -#include "module_basis/module_pw/pw_basis_big.h" -#include "module_basis/module_pw/pw_basis.h" #include "module_io/cube_io.h" -#include "module_base/global_variable.h" #include "module_parameter/parameter.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" +#include "source_base/global_variable.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" -#include #include -#include #include #include +#include +#include + -void ModuleIO::write_libxc_r( - const int order, - const std::vector &func_id, - const int &nrxx, // number of real-space grid - const double &omega, // volume of cell - const double tpiba, - const Charge &chr, - const ModulePW::PW_Basis_Big &pw_big, - const ModulePW::PW_Basis &pw_rhod) +void ModuleIO::write_libxc_r(const int order, + const std::vector& func_id, + const int& nrxx, // number of real-space grid + const double& omega, // volume of cell + const double tpiba, + const Charge& chr, + const ModulePW::PW_Basis_Big& pw_big, + const ModulePW::PW_Basis& pw_rhod) { - ModuleBase::TITLE("ModuleIO","write_libxc_r"); - ModuleBase::timer::tick("ModuleIO","write_libxc_r"); - - const int nspin = - (PARAM.inp.nspin == 1 || ( PARAM.inp.nspin ==4 && !PARAM.globalv.domag && !PARAM.globalv.domag_z)) - ? 1 : 2; - - //---------------------------------------------------------- - // xc_func_type is defined in Libxc package - // to understand the usage of xc_func_type, - // use can check on website, for example: - // https://www.tddft.org/programs/libxc/manual/libxc-5.1.x/ - //---------------------------------------------------------- - - std::vector funcs = XC_Functional_Libxc::init_func( func_id, (1==nspin) ? XC_UNPOLARIZED:XC_POLARIZED ); - - const bool is_gga = [&funcs]() - { - for( xc_func_type &func : funcs ) - { - switch( func.info->family ) - { - case XC_FAMILY_GGA: - case XC_FAMILY_HYB_GGA: - return true; - } - } - return false; - }(); - - // converting rho - std::vector rho; - std::vector amag; - if(1==nspin || 2==PARAM.inp.nspin) - { - rho = XC_Functional_Libxc::convert_rho(nspin, nrxx, &chr); - } - else - { - std::tuple,std::vector> rho_amag = XC_Functional_Libxc::convert_rho_amag_nspin4(nspin, nrxx, &chr); - rho = std::get<0>(std::move(rho_amag)); - amag = std::get<1>(std::move(rho_amag)); - } - - std::vector sigma; - if(is_gga) - { - const std::vector>> gdr = XC_Functional_Libxc::cal_gdr(nspin, nrxx, rho, tpiba, &chr); - sigma = XC_Functional_Libxc::convert_sigma(gdr); - } - - std::vector exc; - std::vector vrho; - std::vector vsigma; - std::vector v2rho2; - std::vector v2rhosigma; - std::vector v2sigma2; - std::vector v3rho3; - std::vector v3rho2sigma; - std::vector v3rhosigma2; - std::vector v3sigma3; - std::vector v4rho4; - std::vector v4rho3sigma; - std::vector v4rho2sigma2; - std::vector v4rhosigma3; - std::vector v4sigma4; - // attention: order 4321 don't break - switch( order ) - { - case 4: v4rho4.resize( nrxx * ((1==nspin)?1:5) ); - case 3: v3rho3.resize( nrxx * ((1==nspin)?1:4) ); - case 2: v2rho2.resize( nrxx * ((1==nspin)?1:3) ); - case 1: vrho .resize( nrxx * nspin ); - case 0: exc .resize( nrxx ); - break; - default: throw std::domain_error("order ="+std::to_string(order) - +" unfinished in "+std::string(__FILE__)+" line "+std::to_string(__LINE__)); - break; - } - if(is_gga) - { - switch( order ) - { - case 4: v4rho3sigma .resize( nrxx * ((1==nspin)?1:12) ); - v4rho2sigma2.resize( nrxx * ((1==nspin)?1:15) ); - v4rhosigma3 .resize( nrxx * ((1==nspin)?1:20) ); - v4sigma4 .resize( nrxx * ((1==nspin)?1:15) ); - case 3: v3rho2sigma .resize( nrxx * ((1==nspin)?1:9) ); - v3rhosigma2 .resize( nrxx * ((1==nspin)?1:12) ); - v3sigma3 .resize( nrxx * ((1==nspin)?1:10) ); - case 2: v2rhosigma .resize( nrxx * ((1==nspin)?1:6) ); - v2sigma2 .resize( nrxx * ((1==nspin)?1:6) ); - case 1: vsigma .resize( nrxx * ((1==nspin)?1:3) ); - case 0: break; - default: throw std::domain_error("order ="+std::to_string(order) - +" unfinished in "+std::string(__FILE__)+" line "+std::to_string(__LINE__)); - break; - } - } - - for( xc_func_type &func : funcs ) - { - // jiyy add for threshold - constexpr double rho_threshold = 1E-6; - constexpr double grho_threshold = 1E-10; - - xc_func_set_dens_threshold(&func, rho_threshold); - - // sgn for threshold mask - const std::vector sgn = XC_Functional_Libxc::cal_sgn(rho_threshold, grho_threshold, func, nspin, nrxx, rho, sigma); - - // call libxc function - // attention: order 432 don't break - switch( func.info->family ) - { - case XC_FAMILY_LDA: - { - switch( order ) - { - case 4: xc_lda_lxc ( &func, nrxx, rho.data(), v4rho4.data() ); - case 3: xc_lda_kxc ( &func, nrxx, rho.data(), v3rho3.data() ); - case 2: xc_lda_fxc ( &func, nrxx, rho.data(), v2rho2.data() ); - case 1: xc_lda_exc_vxc( &func, nrxx, rho.data(), exc.data(), vrho.data() ); - break; - case 0: xc_lda_exc ( &func, nrxx, rho.data(), exc.data() ); - break; - default: throw std::domain_error("order ="+std::to_string(order) - +" unfinished in "+std::string(__FILE__)+" line "+std::to_string(__LINE__)); - break; - } - break; - } - case XC_FAMILY_GGA: - case XC_FAMILY_HYB_GGA: - { - switch( order ) - { - case 4: xc_gga_lxc ( &func, nrxx, rho.data(), sigma.data(), v4rho4.data(), v4rho3sigma.data(), v4rho2sigma2.data(), v4rhosigma3.data(), v4sigma4.data() ); - case 3: xc_gga_kxc ( &func, nrxx, rho.data(), sigma.data(), v3rho3.data(), v3rho2sigma.data(), v3rhosigma2.data(), v3sigma3.data() ); - case 2: xc_gga_fxc ( &func, nrxx, rho.data(), sigma.data(), v2rho2.data(), v2rhosigma.data(), v2sigma2.data() ); - case 1: xc_gga_exc_vxc( &func, nrxx, rho.data(), sigma.data(), exc.data(), vrho.data(), vsigma.data() ); - break; - case 0: xc_gga_exc ( &func, nrxx, rho.data(), sigma.data(), exc.data() ); - break; - default: throw std::domain_error("order ="+std::to_string(order) - +" unfinished in "+std::string(__FILE__)+" line "+std::to_string(__LINE__)); - break; - } - break; - } - default: - { - throw std::domain_error("func.info->family ="+std::to_string(func.info->family) - +" unfinished in "+std::string(__FILE__)+" line "+std::to_string(__LINE__)); - break; - } - } // end switch( func.info->family ) - } // end for( xc_func_type &func : funcs ) - - auto write_data = [&pw_big, &pw_rhod]( - const std::string data_name, - const std::vector &data, - const int number_spin) - { - for(int is=0; is funcs + = XC_Functional_Libxc::init_func(func_id, (1 == nspin) ? XC_UNPOLARIZED : XC_POLARIZED); + + const bool is_gga = [&funcs]() { + for (xc_func_type& func: funcs) + { + switch (func.info->family) + { + case XC_FAMILY_GGA: + case XC_FAMILY_HYB_GGA: + return true; + } + } + return false; + }(); + + // converting rho + std::vector rho; + std::vector amag; + if (1 == nspin || 2 == PARAM.inp.nspin) + { + rho = XC_Functional_Libxc::convert_rho(nspin, nrxx, &chr); + } + else + { + std::tuple, std::vector> rho_amag + = XC_Functional_Libxc::convert_rho_amag_nspin4(nspin, nrxx, &chr); + rho = std::get<0>(std::move(rho_amag)); + amag = std::get<1>(std::move(rho_amag)); + } + + std::vector sigma; + if (is_gga) + { + const std::vector>> gdr + = XC_Functional_Libxc::cal_gdr(nspin, nrxx, rho, tpiba, &chr); + sigma = XC_Functional_Libxc::convert_sigma(gdr); + } + + std::vector exc; + std::vector vrho; + std::vector vsigma; + std::vector v2rho2; + std::vector v2rhosigma; + std::vector v2sigma2; + std::vector v3rho3; + std::vector v3rho2sigma; + std::vector v3rhosigma2; + std::vector v3sigma3; + std::vector v4rho4; + std::vector v4rho3sigma; + std::vector v4rho2sigma2; + std::vector v4rhosigma3; + std::vector v4sigma4; + // attention: order 4321 don't break + switch (order) + { + case 4: + v4rho4.resize(nrxx * ((1 == nspin) ? 1 : 5)); + case 3: + v3rho3.resize(nrxx * ((1 == nspin) ? 1 : 4)); + case 2: + v2rho2.resize(nrxx * ((1 == nspin) ? 1 : 3)); + case 1: + vrho.resize(nrxx * nspin); + case 0: + exc.resize(nrxx); + break; + default: + throw std::domain_error("order =" + std::to_string(order) + " unfinished in " + std::string(__FILE__) + " line " + + std::to_string(__LINE__)); + break; + } + if (is_gga) + { + switch (order) + { + case 4: + v4rho3sigma.resize(nrxx * ((1 == nspin) ? 1 : 12)); + v4rho2sigma2.resize(nrxx * ((1 == nspin) ? 1 : 15)); + v4rhosigma3.resize(nrxx * ((1 == nspin) ? 1 : 20)); + v4sigma4.resize(nrxx * ((1 == nspin) ? 1 : 15)); + case 3: + v3rho2sigma.resize(nrxx * ((1 == nspin) ? 1 : 9)); + v3rhosigma2.resize(nrxx * ((1 == nspin) ? 1 : 12)); + v3sigma3.resize(nrxx * ((1 == nspin) ? 1 : 10)); + case 2: + v2rhosigma.resize(nrxx * ((1 == nspin) ? 1 : 6)); + v2sigma2.resize(nrxx * ((1 == nspin) ? 1 : 6)); + case 1: + vsigma.resize(nrxx * ((1 == nspin) ? 1 : 3)); + case 0: + break; + default: + throw std::domain_error("order =" + std::to_string(order) + " unfinished in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + break; + } + } + + for (xc_func_type& func: funcs) + { + // jiyy add for threshold + constexpr double rho_threshold = 1E-6; + constexpr double grho_threshold = 1E-10; + + xc_func_set_dens_threshold(&func, rho_threshold); + + // sgn for threshold mask + const std::vector sgn + = XC_Functional_Libxc::cal_sgn(rho_threshold, grho_threshold, func, nspin, nrxx, rho, sigma); + + // call libxc function + // attention: order 432 don't break + switch (func.info->family) + { + case XC_FAMILY_LDA: { + switch (order) + { + case 4: + xc_lda_lxc(&func, nrxx, rho.data(), v4rho4.data()); + case 3: + xc_lda_kxc(&func, nrxx, rho.data(), v3rho3.data()); + case 2: + xc_lda_fxc(&func, nrxx, rho.data(), v2rho2.data()); + case 1: + xc_lda_exc_vxc(&func, nrxx, rho.data(), exc.data(), vrho.data()); + break; + case 0: + xc_lda_exc(&func, nrxx, rho.data(), exc.data()); + break; + default: + throw std::domain_error("order =" + std::to_string(order) + " unfinished in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + break; + } + break; + } + case XC_FAMILY_GGA: + case XC_FAMILY_HYB_GGA: { + switch (order) + { + case 4: + xc_gga_lxc(&func, + nrxx, + rho.data(), + sigma.data(), + v4rho4.data(), + v4rho3sigma.data(), + v4rho2sigma2.data(), + v4rhosigma3.data(), + v4sigma4.data()); + case 3: + xc_gga_kxc(&func, + nrxx, + rho.data(), + sigma.data(), + v3rho3.data(), + v3rho2sigma.data(), + v3rhosigma2.data(), + v3sigma3.data()); + case 2: + xc_gga_fxc(&func, nrxx, rho.data(), sigma.data(), v2rho2.data(), v2rhosigma.data(), v2sigma2.data()); + case 1: + xc_gga_exc_vxc(&func, nrxx, rho.data(), sigma.data(), exc.data(), vrho.data(), vsigma.data()); + break; + case 0: + xc_gga_exc(&func, nrxx, rho.data(), sigma.data(), exc.data()); + break; + default: + throw std::domain_error("order =" + std::to_string(order) + " unfinished in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + break; + } + break; + } + default: { + throw std::domain_error("func.info->family =" + std::to_string(func.info->family) + " unfinished in " + + std::string(__FILE__) + " line " + std::to_string(__LINE__)); + break; + } + } // end switch( func.info->family ) + } // end for( xc_func_type &func : funcs ) + + auto write_data + = [&pw_big, &pw_rhod](const std::string data_name, const std::vector& data, const int number_spin) { + for (int is = 0; is < number_spin; ++is) + { + std::ofstream ofs; + if (GlobalV::MY_RANK == 0) + { + const std::string file_name + = PARAM.globalv.global_out_dir + "xc_" + data_name + "_s" + std::to_string(is + 1) + ".cube"; + ofs.open(file_name); + + ofs.unsetf(std::ostream::fixed); + ofs << std::setprecision(PARAM.inp.out_xc_r[1]); + ofs << std::scientific; + } +#ifdef __MPI + ModuleIO::write_cube_core(ofs, + pw_big.bz, + pw_big.nbz, + pw_rhod.nplane * number_spin, + pw_rhod.startz_current, + data.data() + is, + pw_rhod.nx * pw_rhod.ny, + pw_rhod.nz, + number_spin, + pw_rhod.nz); +#else + if (nspin != 1) + { + throw std::invalid_argument("nspin=" + std::to_string(nspin) + + " is invalid for ModuleIO::write_cube_core without MPI. see " + + std + : string(__FILE__) + " line " + std::to_string(__LINE__)); + } + ModuleIO::write_cube_core(ofs, data.data() + is, pw_rhod.nx * pw_rhod.ny, pw_rhod.nz, pw_rhod.nz); +#endif + } + }; + + write_data("rho", rho, nspin); + + if (1 != nspin && 2 != PARAM.inp.nspin) + write_data("amag", amag, 1); + + if (is_gga) + write_data("sigma", sigma, (1 == nspin) ? 1 : 3); + + switch (order) + { + case 4: + write_data("v4rho4", v4rho4, (1 == nspin) ? 1 : 5); + case 3: + write_data("v3rho3", v3rho3, (1 == nspin) ? 1 : 4); + case 2: + write_data("v2rho2", v2rho2, (1 == nspin) ? 1 : 3); + case 1: + write_data("vrho", vrho, nspin); + case 0: + write_data("exc", exc, 1); + break; + default: + throw std::domain_error("order =" + std::to_string(order) + " unfinished in " + std::string(__FILE__) + " line " + + std::to_string(__LINE__)); + break; + } + if (is_gga) + { + switch (order) + { + case 4: + write_data("v4rho3sigma", v4rho3sigma, (1 == nspin) ? 1 : 12); + write_data("v4rho2sigma2", v4rho2sigma2, (1 == nspin) ? 1 : 15); + write_data("v4rhosigma3", v4rhosigma3, (1 == nspin) ? 1 : 20); + write_data("v4sigma4", v4sigma4, (1 == nspin) ? 1 : 15); + case 3: + write_data("v3rho2sigma", v3rho2sigma, (1 == nspin) ? 1 : 9); + write_data("v3rhosigma2", v3rhosigma2, (1 == nspin) ? 1 : 12); + write_data("v3sigma3", v3sigma3, (1 == nspin) ? 1 : 10); + case 2: + write_data("v2rhosigma", v2rhosigma, (1 == nspin) ? 1 : 6); + write_data("v2sigma2", v2sigma2, (1 == nspin) ? 1 : 6); + case 1: + write_data("vsigma", vsigma, (1 == nspin) ? 1 : 3); + case 0: + break; + default: + throw std::domain_error("order =" + std::to_string(order) + " unfinished in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + break; + } + } + + XC_Functional_Libxc::finish_func(funcs); + + ModuleBase::timer::tick("ModuleIO", "write_libxc_r"); +} #ifdef __MPI -void ModuleIO::write_cube_core( - std::ofstream &ofs_cube, - const int bz, - const int nbz, - const int nplane, - const int startz_current, - const double*const data, - const int nxy, - const int nz, - const int nld, - const int n_data_newline) +void ModuleIO::write_cube_core(std::ofstream& ofs_cube, + const int bz, + const int nbz, + const int nplane, + const int startz_current, + const double* const data, + const int nxy, + const int nz, + const int nld, + const int n_data_newline) { - ModuleBase::TITLE("ModuleIO", "write_cube_core"); - - const int my_rank = GlobalV::MY_RANK; - const int my_pool = GlobalV::MY_POOL; - const int rank_in_pool = GlobalV::RANK_IN_POOL; - const int nproc_in_pool = GlobalV::NPROC_IN_POOL; - - // only do in the first pool. - if (my_pool == 0) - { - /// for cube file - const int nxyz = nxy * nz; - std::vector data_cube(nxyz, 0.0); - - // num_z: how many planes on processor 'ip' - std::vector num_z(nproc_in_pool, 0); - for (int iz = 0; iz < nbz; iz++) - { - const int ip = iz % nproc_in_pool; - num_z[ip] += bz; - } - - // start_z: start position of z in - // processor ip. - std::vector start_z(nproc_in_pool, 0); - for (int ip = 1; ip < nproc_in_pool; ip++) - { - start_z[ip] = start_z[ip - 1] + num_z[ip - 1]; - } - - // which_ip: found iz belongs to which ip. - std::vector which_ip(nz, 0); - for (int iz = 0; iz < nz; iz++) - { - for (int ip = 0; ip < nproc_in_pool; ip++) - { - if (iz >= start_z[nproc_in_pool - 1]) - { - which_ip[iz] = nproc_in_pool - 1; - break; - } - else if (iz >= start_z[ip] && iz < start_z[ip + 1]) - { - which_ip[iz] = ip; - break; - } - } - } - - int count = 0; - std::vector zpiece(nxy, 0.0); - - // save the rho one z by one z. - for (int iz = 0; iz < nz; iz++) - { - zpiece.assign(nxy, 0.0); - - // tag must be different for different iz. - const int tag = iz; - MPI_Status ierror; - - // case 1: the first part of rho in processor 0. - if (which_ip[iz] == 0 && rank_in_pool == 0) - { - for (int ixy = 0; ixy < nxy; ixy++) - { - // mohan change to rho_save on 2012-02-10 - // because this can make our next restart calculation lead - // to the same scf_thr as the one saved. - zpiece[ixy] = data[ixy * nplane + (iz - startz_current) * nld]; - } - } - // case 2: > first part rho: send the rho to - // processor 0. - else if (which_ip[iz] == rank_in_pool) - { - for (int ixy = 0; ixy < nxy; ixy++) - { - zpiece[ixy] = data[ixy * nplane + (iz - startz_current) * nld]; - } - MPI_Send(zpiece.data(), nxy, MPI_DOUBLE, 0, tag, POOL_WORLD); - } - - // case 2: > first part rho: processor 0 receive the rho - // from other processors - else if (rank_in_pool == 0) - { - MPI_Recv(zpiece.data(), nxy, MPI_DOUBLE, which_ip[iz], tag, POOL_WORLD, &ierror); - } - - if (my_rank == 0) - { - /// for cube file - for (int ixy = 0; ixy < nxy; ixy++) - { - data_cube[ixy * nz + iz] = zpiece[ixy]; - } - /// for cube file - } - } // end iz - - // for cube file - if (my_rank == 0) - { - for (int ixy = 0; ixy < nxy; ixy++) - { - for (int iz = 0; iz < nz; iz++) - { - ofs_cube << " " << data_cube[ixy * nz + iz]; - if ((iz % n_data_newline == n_data_newline-1) && (iz != nz - 1)) - { - ofs_cube << "\n"; - } - } - ofs_cube << "\n"; - } - } - /// for cube file - } - MPI_Barrier(MPI_COMM_WORLD); + ModuleBase::TITLE("ModuleIO", "write_cube_core"); + + const int my_rank = GlobalV::MY_RANK; + const int my_pool = GlobalV::MY_POOL; + const int rank_in_pool = GlobalV::RANK_IN_POOL; + const int nproc_in_pool = GlobalV::NPROC_IN_POOL; + + // only do in the first pool. + if (my_pool == 0) + { + /// for cube file + const int nxyz = nxy * nz; + std::vector data_cube(nxyz, 0.0); + + // num_z: how many planes on processor 'ip' + std::vector num_z(nproc_in_pool, 0); + for (int iz = 0; iz < nbz; iz++) + { + const int ip = iz % nproc_in_pool; + num_z[ip] += bz; + } + + // start_z: start position of z in + // processor ip. + std::vector start_z(nproc_in_pool, 0); + for (int ip = 1; ip < nproc_in_pool; ip++) + { + start_z[ip] = start_z[ip - 1] + num_z[ip - 1]; + } + + // which_ip: found iz belongs to which ip. + std::vector which_ip(nz, 0); + for (int iz = 0; iz < nz; iz++) + { + for (int ip = 0; ip < nproc_in_pool; ip++) + { + if (iz >= start_z[nproc_in_pool - 1]) + { + which_ip[iz] = nproc_in_pool - 1; + break; + } + else if (iz >= start_z[ip] && iz < start_z[ip + 1]) + { + which_ip[iz] = ip; + break; + } + } + } + + int count = 0; + std::vector zpiece(nxy, 0.0); + + // save the rho one z by one z. + for (int iz = 0; iz < nz; iz++) + { + zpiece.assign(nxy, 0.0); + + // tag must be different for different iz. + const int tag = iz; + MPI_Status ierror; + + // case 1: the first part of rho in processor 0. + if (which_ip[iz] == 0 && rank_in_pool == 0) + { + for (int ixy = 0; ixy < nxy; ixy++) + { + // mohan change to rho_save on 2012-02-10 + // because this can make our next restart calculation lead + // to the same scf_thr as the one saved. + zpiece[ixy] = data[ixy * nplane + (iz - startz_current) * nld]; + } + } + // case 2: > first part rho: send the rho to + // processor 0. + else if (which_ip[iz] == rank_in_pool) + { + for (int ixy = 0; ixy < nxy; ixy++) + { + zpiece[ixy] = data[ixy * nplane + (iz - startz_current) * nld]; + } + MPI_Send(zpiece.data(), nxy, MPI_DOUBLE, 0, tag, POOL_WORLD); + } + + // case 2: > first part rho: processor 0 receive the rho + // from other processors + else if (rank_in_pool == 0) + { + MPI_Recv(zpiece.data(), nxy, MPI_DOUBLE, which_ip[iz], tag, POOL_WORLD, &ierror); + } + + if (my_rank == 0) + { + /// for cube file + for (int ixy = 0; ixy < nxy; ixy++) + { + data_cube[ixy * nz + iz] = zpiece[ixy]; + } + /// for cube file + } + } // end iz + + // for cube file + if (my_rank == 0) + { + for (int ixy = 0; ixy < nxy; ixy++) + { + for (int iz = 0; iz < nz; iz++) + { + ofs_cube << " " << data_cube[ixy * nz + iz]; + if ((iz % n_data_newline == n_data_newline - 1) && (iz != nz - 1)) + { + ofs_cube << "\n"; + } + } + ofs_cube << "\n"; + } + } + /// for cube file + } + MPI_Barrier(MPI_COMM_WORLD); } -#else // #ifdef __MPI +#else // #ifdef __MPI -void ModuleIO::write_cube_core( - std::ofstream &ofs_cube, - const double*const data, - const int nxy, - const int nz, - const int n_data_newline) +void ModuleIO::write_cube_core(std::ofstream& ofs_cube, + const double* const data, + const int nxy, + const int nz, + const int n_data_newline) { - ModuleBase::TITLE("ModuleIO", "write_cube_core"); - for (int ixy = 0; ixy < nxy; ixy++) - { - for (int iz = 0; iz < nz; iz++) - { - ofs_cube << " " << data[iz * nxy + ixy]; - // ++count_cube; - if ((iz % n_data_newline == n_data_newline-1) && (iz != nz - 1)) - { - ofs_cube << "\n"; - } - } - ofs_cube << "\n"; - } + ModuleBase::TITLE("ModuleIO", "write_cube_core"); + for (int ixy = 0; ixy < nxy; ixy++) + { + for (int iz = 0; iz < nz; iz++) + { + ofs_cube << " " << data[iz * nxy + ixy]; + // ++count_cube; + if ((iz % n_data_newline == n_data_newline - 1) && (iz != nz - 1)) + { + ofs_cube << "\n"; + } + } + ofs_cube << "\n"; + } } -#endif // #ifdef __MPI +#endif // #ifdef __MPI #endif // USE_LIBXC \ No newline at end of file diff --git a/source/module_io/write_orb_info.cpp b/source/module_io/write_orb_info.cpp index 399a6f426b..0fdab8bb18 100644 --- a/source/module_io/write_orb_info.cpp +++ b/source/module_io/write_orb_info.cpp @@ -1,20 +1,16 @@ #include "write_orb_info.h" -#include "module_parameter/parameter.h" -#include "module_base/name_angular.h" #include "module_cell/atom_spec.h" +#include "module_parameter/parameter.h" +#include "source_base/name_angular.h" void ModuleIO::write_orb_info(const UnitCell* ucell) { std::stringstream os; os << PARAM.globalv.global_out_dir << "Orbital"; std::ofstream out(os.str().c_str()); - out << std::setw(5) << "#io" - << std::setw(8) << "spec" - << std::setw(5) << "l" - << std::setw(5) << "m" - << std::setw(5) << "z" - << std::setw(5) << "sym" << std::endl; + out << std::setw(5) << "#io" << std::setw(8) << "spec" << std::setw(5) << "l" << std::setw(5) << "m" << std::setw(5) + << "z" << std::setw(5) << "sym" << std::endl; for (int i = 0; i < ucell->nat; i++) { @@ -25,18 +21,19 @@ void ModuleIO::write_orb_info(const UnitCell* ucell) const int L1 = atom1->iw2l[j]; const int N1 = atom1->iw2n[j]; const int m1 = atom1->iw2m[j]; - out << std::setw(5) << i << std::setw(8) << ucell->atoms[t].label << std::setw(5) << L1 - << std::setw(5) << m1 << std::setw(5) << N1 + 1 << std::setw(15) << ModuleBase::Name_Angular[L1][m1] - << std::endl; + out << std::setw(5) << i << std::setw(8) << ucell->atoms[t].label << std::setw(5) << L1 << std::setw(5) + << m1 << std::setw(5) << N1 + 1 << std::setw(15) << ModuleBase::Name_Angular[L1][m1] << std::endl; } } out << std::endl << std::endl; out << std::setw(5) << "#io" << std::setw(2) << "=" << std::setw(2) << "Orbital index in supercell" << std::endl; out << std::setw(5) << "#spec" << std::setw(2) << "=" << std::setw(2) << "Atomic species label" << std::endl; - out << std::setw(5) << "#l" << std::setw(2) << "=" << std::setw(2) << "Angular mumentum quantum number" << std::endl; + out << std::setw(5) << "#l" << std::setw(2) << "=" << std::setw(2) << "Angular mumentum quantum number" + << std::endl; out << std::setw(5) << "#m" << std::setw(2) << "=" << std::setw(2) << "Magnetic quantum number" << std::endl; out << std::setw(5) << "#z" << std::setw(2) << "=" << std::setw(2) << "Zeta index of orbital" << std::endl; - out << std::setw(5) << "#sym" << std::setw(2) << "=" << std::setw(2) << "Symmetry name of real orbital" << std::endl; + out << std::setw(5) << "#sym" << std::setw(2) << "=" << std::setw(2) << "Symmetry name of real orbital" + << std::endl; out.close(); return; diff --git a/source/module_io/write_pao.cpp b/source/module_io/write_pao.cpp index 5e1a30e79a..3afb0b2b38 100644 --- a/source/module_io/write_pao.cpp +++ b/source/module_io/write_pao.cpp @@ -1,6 +1,7 @@ #include "write_pao.h" -#include "module_base/global_variable.h" + #include "module_parameter/parameter.h" +#include "source_base/global_variable.h" #include namespace ModuleIO diff --git a/source/module_io/write_proj_band_lcao.cpp b/source/module_io/write_proj_band_lcao.cpp index c08c301477..6a015c2d1e 100644 --- a/source/module_io/write_proj_band_lcao.cpp +++ b/source/module_io/write_proj_band_lcao.cpp @@ -1,22 +1,21 @@ #include "write_proj_band_lcao.h" -#include "module_parameter/parameter.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/scalapack_connector.h" -#include "module_base/timer.h" #include "module_cell/module_neighbor/sltk_atom_arrange.h" -#include "write_orb_info.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" +#include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/scalapack_connector.h" +#include "source_base/timer.h" +#include "write_orb_info.h" -template<> -void ModuleIO::write_proj_band_lcao( - const psi::Psi* psi, - const Parallel_Orbitals &pv, - const elecstate::ElecState* pelec, - const K_Vectors& kv, - const UnitCell &ucell, - hamilt::Hamilt* p_ham) +template <> +void ModuleIO::write_proj_band_lcao(const psi::Psi* psi, + const Parallel_Orbitals& pv, + const elecstate::ElecState* pelec, + const K_Vectors& kv, + const UnitCell& ucell, + hamilt::Hamilt* p_ham) { ModuleBase::TITLE("ModuleIO", "write_proj_band_lcao"); ModuleBase::timer::tick("ModuleIO", "write_proj_band_lcao"); @@ -25,12 +24,12 @@ void ModuleIO::write_proj_band_lcao( const double* sk = dynamic_cast*>(p_ham)->getSk(); int nspin0 = 1; - if (PARAM.inp.nspin == 2) - { - nspin0 = 2; - } + if (PARAM.inp.nspin == 2) + { + nspin0 = 2; + } - int nks = 0; + int nks = 0; if (nspin0 == 1) { nks = kv.get_nkstot(); @@ -46,7 +45,6 @@ void ModuleIO::write_proj_band_lcao( weightk.create(nspin0, PARAM.inp.nbands * PARAM.globalv.nlocal, true); weight.create(nspin0, PARAM.inp.nbands * PARAM.globalv.nlocal, true); - for (int is = 0; is < nspin0; is++) { std::vector Mulk; @@ -63,24 +61,24 @@ void ModuleIO::write_proj_band_lcao( #ifdef __MPI const char T_char = 'T'; pdgemv_(&T_char, - &PARAM.globalv.nlocal, - &PARAM.globalv.nlocal, - &one_float, - sk, - &one_int, - &one_int, - pv.desc, - psi->get_pointer(), - &one_int, - &NB, - pv.desc, - &one_int, - &zero_float, - Mulk[0].c, - &one_int, - &NB, - pv.desc, - &one_int); + &PARAM.globalv.nlocal, + &PARAM.globalv.nlocal, + &one_float, + sk, + &one_int, + &one_int, + pv.desc, + psi->get_pointer(), + &one_int, + &NB, + pv.desc, + &one_int, + &zero_float, + Mulk[0].c, + &one_int, + &NB, + pv.desc, + &one_int); #endif for (int j = 0; j < PARAM.globalv.nlocal; ++j) { @@ -106,16 +104,20 @@ void ModuleIO::write_proj_band_lcao( out << "" << std::endl; out << "" << PARAM.inp.nspin << "" << std::endl; - if (PARAM.inp.nspin == 4) { + if (PARAM.inp.nspin == 4) + { out << "" << std::setw(2) << PARAM.globalv.nlocal / 2 << "" << std::endl; - } else { + } + else + { out << "" << std::setw(2) << PARAM.globalv.nlocal << "" << std::endl; -} + } out << "" << std::endl; - for (int ib = 0; ib < PARAM.inp.nbands; ib++) { + for (int ib = 0; ib < PARAM.inp.nbands; ib++) + { out << " " << (pelec->ekb(is * nks, ib)) * ModuleBase::Ry_to_eV; -} + } out << std::endl; out << "" << std::endl; @@ -144,21 +146,23 @@ void ModuleIO::write_proj_band_lcao( out << "" << std::endl; for (int ib = 0; ib < PARAM.inp.nbands; ib++) { - if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 2) { + if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 2) + { out << std::setw(13) << weight(is, ib * PARAM.globalv.nlocal + w); - } else if (PARAM.inp.nspin == 4) + } + else if (PARAM.inp.nspin == 4) { int w0 = w - s0; out << std::setw(13) << weight(is, ib * PARAM.globalv.nlocal + s0 + 2 * w0) - + weight(is, ib * PARAM.globalv.nlocal + s0 + 2 * w0 + 1); + + weight(is, ib * PARAM.globalv.nlocal + s0 + 2 * w0 + 1); } } out << std::endl; out << "" << std::endl; out << "" << std::endl; } // j - } // i + } // i out << "" << std::endl; out.close(); @@ -170,22 +174,22 @@ void ModuleIO::write_proj_band_lcao( return; } -template<> -void ModuleIO::write_proj_band_lcao( - const psi::Psi>* psi, - const Parallel_Orbitals &pv, - const elecstate::ElecState* pelec, - const K_Vectors& kv, - const UnitCell& ucell, - hamilt::Hamilt>* p_ham) +template <> +void ModuleIO::write_proj_band_lcao(const psi::Psi>* psi, + const Parallel_Orbitals& pv, + const elecstate::ElecState* pelec, + const K_Vectors& kv, + const UnitCell& ucell, + hamilt::Hamilt>* p_ham) { ModuleBase::TITLE("ModuleIO", "write_proj_band_lcao"); ModuleBase::timer::tick("ModuleIO", "write_proj_band_lcao"); int nspin0 = 1; - if (PARAM.inp.nspin == 2) { + if (PARAM.inp.nspin == 2) + { nspin0 = 2; -} + } int nks = 0; if (nspin0 == 1) { @@ -204,51 +208,49 @@ void ModuleIO::write_proj_band_lcao( for (int is = 0; is < nspin0; is++) { - std::vector Mulk; - Mulk.resize(1); - Mulk[0].create(pv.ncol, pv.nrow); + std::vector Mulk; + Mulk.resize(1); + Mulk[0].create(pv.ncol, pv.nrow); - for (int ik = 0; ik < kv.get_nks(); ik++) + for (int ik = 0; ik < kv.get_nks(); ik++) + { + if (is == kv.isk[ik]) { - if (is == kv.isk[ik]) + // calculate SK for current k point + const std::complex* sk = nullptr; + if (PARAM.inp.nspin == 4) { - // calculate SK for current k point - const std::complex* sk = nullptr; - if (PARAM.inp.nspin == 4) - { - dynamic_cast, std::complex>*>(p_ham)->updateSk(ik, 1); - sk = dynamic_cast, std::complex>*>(p_ham)->getSk(); - } - else - { - dynamic_cast, double>*>(p_ham)->updateSk(ik, 1); - sk = dynamic_cast, double>*>(p_ham)->getSk(); - } + dynamic_cast, std::complex>*>(p_ham)->updateSk(ik, + 1); + sk = dynamic_cast, std::complex>*>(p_ham) + ->getSk(); + } + else + { + dynamic_cast, double>*>(p_ham)->updateSk(ik, 1); + sk = dynamic_cast, double>*>(p_ham)->getSk(); + } - // calculate Mulk - psi->fix_k(ik); - psi::Psi> Dwfc(1, - psi->get_nbands(), - psi->get_nbasis(), - psi->get_nbasis(), - true); + // calculate Mulk + psi->fix_k(ik); + psi::Psi> Dwfc(1, psi->get_nbands(), psi->get_nbasis(), psi->get_nbasis(), true); - std::complex* p_dwfc = Dwfc.get_pointer(); - for (int index = 0; index < Dwfc.size(); ++index) - { - p_dwfc[index] = conj(psi->get_pointer()[index]); - } + std::complex* p_dwfc = Dwfc.get_pointer(); + for (int index = 0; index < Dwfc.size(); ++index) + { + p_dwfc[index] = conj(psi->get_pointer()[index]); + } - for (int i = 0; i < PARAM.inp.nbands; ++i) - { - const int NB = i + 1; + for (int i = 0; i < PARAM.inp.nbands; ++i) + { + const int NB = i + 1; - const double one_float[2] = { 1.0, 0.0 }; - const double zero_float[2] = { 0.0, 0.0 }; - const int one_int = 1; - const char T_char = 'T'; + const double one_float[2] = {1.0, 0.0}; + const double zero_float[2] = {0.0, 0.0}; + const int one_int = 1; + const char T_char = 'T'; #ifdef __MPI - pzgemv_(&T_char, + pzgemv_(&T_char, &PARAM.globalv.nlocal, &PARAM.globalv.nlocal, &one_float[0], @@ -268,23 +270,23 @@ void ModuleIO::write_proj_band_lcao( pv.desc, &one_int); #endif - for (int j = 0; j < PARAM.globalv.nlocal; ++j) - { + for (int j = 0; j < PARAM.globalv.nlocal; ++j) + { - if (pv.in_this_processor(j, i)) - { + if (pv.in_this_processor(j, i)) + { - const int ir = pv.global2local_row(j); - const int ic = pv.global2local_col(i); + const int ir = pv.global2local_row(j); + const int ic = pv.global2local_col(i); - weightk(ik, i * PARAM.globalv.nlocal + j) = Mulk[0](ic, ir) * psi[0](ic, ir); - } + weightk(ik, i * PARAM.globalv.nlocal + j) = Mulk[0](ic, ir) * psi[0](ic, ir); } + } - } // ib + } // ib - } // if - } // ik + } // if + } // ik #ifdef __MPI MPI_Reduce(weightk.real().c, weight.c, NUM, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); #endif @@ -310,13 +312,14 @@ void ModuleIO::write_proj_band_lcao( out << "" << std::endl; - for (int ik = 0; ik < nks; ik++) - { - for (int ib = 0; ib < PARAM.inp.nbands; ib++) { - out << " " << (pelec->ekb(ik + is * nks, ib)) * ModuleBase::Ry_to_eV; -} - out << std::endl; - } + for (int ik = 0; ik < nks; ik++) + { + for (int ib = 0; ib < PARAM.inp.nbands; ib++) + { + out << " " << (pelec->ekb(ik + is * nks, ib)) * ModuleBase::Ry_to_eV; + } + out << std::endl; + } out << "" << std::endl; for (int i = 0; i < ucell.nat; i++) @@ -342,32 +345,32 @@ void ModuleIO::write_proj_band_lcao( out << std::setw(2) << "z=\"" << std::setw(40) << N1 + 1 << "\"" << std::endl; out << ">" << std::endl; out << "" << std::endl; - for (int ik = 0; ik < nks; ik++) - { - for (int ib = 0; ib < PARAM.inp.nbands; ib++) - { - if (PARAM.inp.nspin == 1) - { - out << std::setw(13) << weight(ik, ib * PARAM.globalv.nlocal + w); - } - else if (PARAM.inp.nspin == 2) - { - out << std::setw(13) << weight(ik + nks * is, ib * PARAM.globalv.nlocal + w); - } - else if (PARAM.inp.nspin == 4) - { - int w0 = w - s0; - out << std::setw(13) - << weight(ik, ib * PARAM.globalv.nlocal + s0 + 2 * w0) - + weight(ik, ib * PARAM.globalv.nlocal + s0 + 2 * w0 + 1); - } - } - out << std::endl; - } + for (int ik = 0; ik < nks; ik++) + { + for (int ib = 0; ib < PARAM.inp.nbands; ib++) + { + if (PARAM.inp.nspin == 1) + { + out << std::setw(13) << weight(ik, ib * PARAM.globalv.nlocal + w); + } + else if (PARAM.inp.nspin == 2) + { + out << std::setw(13) << weight(ik + nks * is, ib * PARAM.globalv.nlocal + w); + } + else if (PARAM.inp.nspin == 4) + { + int w0 = w - s0; + out << std::setw(13) + << weight(ik, ib * PARAM.globalv.nlocal + s0 + 2 * w0) + + weight(ik, ib * PARAM.globalv.nlocal + s0 + 2 * w0 + 1); + } + } + out << std::endl; + } out << "" << std::endl; out << "" << std::endl; } // j - } // i + } // i out << "" << std::endl; out.close(); diff --git a/source/module_io/write_vxc.hpp b/source/module_io/write_vxc.hpp index db4a576f12..e445414b7c 100644 --- a/source/module_io/write_vxc.hpp +++ b/source/module_io/write_vxc.hpp @@ -1,14 +1,14 @@ #ifndef __WRITE_VXC_H_ #define __WRITE_VXC_H_ -#include "module_parameter/parameter.h" -#include "module_base/parallel_reduce.h" -#include "module_base/module_container/base/third_party/blas.h" -#include "module_base/scalapack_connector.h" #include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_dftu_lcao.h" #include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/veff_lcao.h" -#include "module_psi/psi.h" -#include "module_io/write_HS.h" #include "module_io/filename.h" // use filename_output function +#include "module_io/write_HS.h" +#include "module_parameter/parameter.h" +#include "module_psi/psi.h" +#include "source_base/module_container/base/third_party/blas.h" +#include "source_base/parallel_reduce.h" +#include "source_base/scalapack_connector.h" #ifndef TGINT_H #define TGINT_H @@ -43,11 +43,11 @@ inline void set_para2d_MO(const Parallel_Orbitals& pv, const int nbands, Paralle template inline std::vector cVc(T* V, - T* c, - const int nbasis, - const int nbands, - const Parallel_Orbitals& pv, - const Parallel_2D& p2d) + T* c, + const int nbasis, + const int nbands, + const Parallel_Orbitals& pv, + const Parallel_2D& p2d) { std::vector Vc(pv.nloc_wfc, 0.0); char transa = 'N'; @@ -56,24 +56,76 @@ inline std::vector cVc(T* V, const T beta = (T)0.0; #ifdef __MPI const int i1 = 1; - ScalapackConnector::gemm(transa, transb, - nbasis, nbands, nbasis, - alpha, V, i1, i1, pv.desc, - c, i1, i1, pv.desc_wfc, - beta, Vc.data(), i1, i1, pv.desc_wfc); + ScalapackConnector::gemm(transa, + transb, + nbasis, + nbands, + nbasis, + alpha, + V, + i1, + i1, + pv.desc, + c, + i1, + i1, + pv.desc_wfc, + beta, + Vc.data(), + i1, + i1, + pv.desc_wfc); #else - container::BlasConnector::gemm(transa, transb, nbasis, nbands, nbasis, alpha, V, nbasis, c, nbasis, beta, Vc.data(), nbasis); + container::BlasConnector::gemm(transa, + transb, + nbasis, + nbands, + nbasis, + alpha, + V, + nbasis, + c, + nbasis, + beta, + Vc.data(), + nbasis); #endif std::vector cVc(p2d.nloc, 0.0); transa = (std::is_same::value ? 'T' : 'C'); #ifdef __MPI - ScalapackConnector::gemm(transa, transb, - nbands, nbands, nbasis, - alpha, c, i1, i1, pv.desc_wfc, - Vc.data(), i1, i1, pv.desc_wfc, - beta, cVc.data(), i1, i1, p2d.desc); + ScalapackConnector::gemm(transa, + transb, + nbands, + nbands, + nbasis, + alpha, + c, + i1, + i1, + pv.desc_wfc, + Vc.data(), + i1, + i1, + pv.desc_wfc, + beta, + cVc.data(), + i1, + i1, + p2d.desc); #else - container::BlasConnector::gemm(transa, transb, nbands, nbands, nbasis, alpha, c, nbasis, Vc.data(), nbasis, beta, cVc.data(), nbasis); + container::BlasConnector::gemm(transa, + transb, + nbands, + nbands, + nbasis, + alpha, + c, + nbasis, + Vc.data(), + nbasis, + beta, + cVc.data(), + nbasis); #endif return cVc; } @@ -149,22 +201,25 @@ void set_gint_pointer>(Gint_Gamma& gint_gamma, #endif inline void write_orb_energy(const K_Vectors& kv, - const int nspin0, const int nbands, - const std::vector>& e_orb, - const std::string& term, const std::string& label, const bool app = false) + const int nspin0, + const int nbands, + const std::vector>& e_orb, + const std::string& term, + const std::string& label, + const bool app = false) { assert(e_orb.size() == kv.get_nks()); const int nk = kv.get_nks() / nspin0; std::ofstream ofs; ofs.open(PARAM.globalv.global_out_dir + term + "_" + (label == "" ? "out.dat" : label + "_out.dat"), - app ? std::ios::app : std::ios::out); + app ? std::ios::app : std::ios::out); ofs << nk << "\n" << nspin0 << "\n" << nbands << "\n"; ofs << std::scientific << std::setprecision(16); for (int ik = 0; ik < nk; ++ik) { for (int is = 0; is < nspin0; ++is) { - for (auto e : e_orb[is * nk + ik]) + for (auto e: e_orb[is * nk + ik]) { // Hartree and eV ofs << e / 2. << "\t" << e * ModuleBase::Ry_to_eV << "\n"; } @@ -218,9 +273,13 @@ void write_Vxc(const int nspin, // R (the number of hR: 1 for nspin=1, 4; 2 for nspin=2) int nspin0 = (nspin == 2) ? 2 : 1; std::vector> vxcs_R_ao(nspin0, hamilt::HContainer(ucell, pv)); - for (int is = 0; is < nspin0; ++is) { + for (int is = 0; is < nspin0; ++is) + { vxcs_R_ao[is].set_zero(); - if (std::is_same::value) { vxcs_R_ao[is].fix_gamma(); } + if (std::is_same::value) + { + vxcs_R_ao[is].fix_gamma(); + } } // k (size for each k-point) hamilt::HS_Matrix_K vxc_k_ao(pv, 1); // only hk is needed, sk is skipped @@ -235,18 +294,25 @@ void write_Vxc(const int nspin, for (int is = 0; is < nspin0; ++is) { vxcs_op_ao[is] = new hamilt::Veff>(gint, - &vxc_k_ao, kv.kvec_d, potxc, &vxcs_R_ao[is], &ucell, orb_cutoff, &gd, nspin); + &vxc_k_ao, + kv.kvec_d, + potxc, + &vxcs_R_ao[is], + &ucell, + orb_cutoff, + &gd, + nspin); vxcs_op_ao[is]->contributeHR(); } std::vector> e_orb_locxc; // orbital energy (local XC) std::vector> e_orb_tot; // orbital energy (total) #ifdef __EXX - hamilt::OperatorEXX> vexx_op_ao(&vxc_k_ao, - &vxcs_R_ao[0],ucell,/*for paraV*/ kv, Hexxd, Hexxc, hamilt::Add_Hexx_Type::k); + hamilt::OperatorEXX> + vexx_op_ao(&vxc_k_ao, &vxcs_R_ao[0], ucell, /*for paraV*/ kv, Hexxd, Hexxc, hamilt::Add_Hexx_Type::k); hamilt::HS_Matrix_K vexxonly_k_ao(pv, 1); // only hk is needed, sk is skipped - hamilt::OperatorEXX> vexxonly_op_ao(&vexxonly_k_ao, - &vxcs_R_ao[0],ucell,/*for paraV*/ kv, Hexxd, Hexxc, hamilt::Add_Hexx_Type::k); + hamilt::OperatorEXX> + vexxonly_op_ao(&vexxonly_k_ao, &vxcs_R_ao[0], ucell, /*for paraV*/ kv, Hexxd, Hexxc, hamilt::Add_Hexx_Type::k); std::vector> e_orb_exx; // orbital energy (EXX) #endif hamilt::OperatorDFTU> vdftu_op_ao(&vxc_k_ao, kv.kvec_d, nullptr, kv.isk); @@ -289,16 +355,23 @@ void write_Vxc(const int nspin, // write - // mohan add 2025-06-02 - const int istep = -1; - const int out_label = 1; // 1 means .txt while 2 means .dat - const bool out_app_flag = 0; + // mohan add 2025-06-02 + const int istep = -1; + const int out_label = 1; // 1 means .txt while 2 means .dat + const bool out_app_flag = 0; const bool gamma_only = PARAM.globalv.gamma_only_local; - std::string vxc_file = ModuleIO::filename_output( - PARAM.globalv.global_out_dir, - "vxc","nao",ik,kv.ik2iktot,nspin,kv.get_nkstot(), - out_label,out_app_flag,gamma_only,istep); + std::string vxc_file = ModuleIO::filename_output(PARAM.globalv.global_out_dir, + "vxc", + "nao", + ik, + kv.ik2iktot, + nspin, + kv.get_nkstot(), + out_label, + out_app_flag, + gamma_only, + istep); ModuleIO::save_mat(istep, vxc_tot_k_mo.data(), @@ -307,7 +380,7 @@ void write_Vxc(const int nspin, PARAM.inp.out_ndigits, true /*triangle*/, out_app_flag /*append*/, - vxc_file, + vxc_file, p2d, drank); // ======test======= diff --git a/source/module_io/write_vxc_lip.hpp b/source/module_io/write_vxc_lip.hpp index 9f146e6506..f5b89b915f 100644 --- a/source/module_io/write_vxc_lip.hpp +++ b/source/module_io/write_vxc_lip.hpp @@ -1,296 +1,356 @@ #ifndef __WRITE_VXC_LIP_H_ #define __WRITE_VXC_LIP_H_ -#include "module_parameter/parameter.h" -#include "module_base/parallel_reduce.h" -#include "module_base/module_container/base/third_party/blas.h" -#include "module_hamilt_pw/hamilt_pwdft/operator_pw/veff_pw.h" -#include "module_psi/psi.h" -#include "module_cell/unitcell.h" #include "module_cell/klist.h" +#include "module_cell/unitcell.h" #include "module_elecstate/module_pot/potential_new.h" -#include "module_io/write_HS.h" +#include "module_hamilt_pw/hamilt_pwdft/operator_pw/veff_pw.h" #include "module_io/filename.h" // use filename_output function +#include "module_io/write_HS.h" +#include "module_parameter/parameter.h" +#include "module_psi/psi.h" +#include "source_base/module_container/base/third_party/blas.h" +#include "source_base/parallel_reduce.h" + #include namespace ModuleIO { - template - using Real = typename GetTypeReal::type; +template +using Real = typename GetTypeReal::type; - template - inline FPTYPE get_real(const std::complex& c) - { - return c.real(); - } - template - inline FPTYPE get_real(const FPTYPE& d) - { - return d; - } +template +inline FPTYPE get_real(const std::complex& c) +{ + return c.real(); +} +template +inline FPTYPE get_real(const FPTYPE& d) +{ + return d; +} - template - std::vector cVc(T* const V, T* const c, int nbasis, int nbands) - { - std::vector Vc(nbasis * nbands, 0.0); - char transa = 'N'; - char transb = 'N'; - const T alpha(1.0, 0.0); - const T beta(0.0, 0.0); - container::BlasConnector::gemm(transa, transb, nbasis, nbands, nbasis, - alpha, V, nbasis, c, nbasis, beta, Vc.data(), nbasis); +template +std::vector cVc(T* const V, T* const c, int nbasis, int nbands) +{ + std::vector Vc(nbasis * nbands, 0.0); + char transa = 'N'; + char transb = 'N'; + const T alpha(1.0, 0.0); + const T beta(0.0, 0.0); + container::BlasConnector::gemm(transa, + transb, + nbasis, + nbands, + nbasis, + alpha, + V, + nbasis, + c, + nbasis, + beta, + Vc.data(), + nbasis); - std::vector cVc(nbands * nbands, 0.0); - transa = ((std::is_same::value || std::is_same::value) ? 'T' : 'C'); - container::BlasConnector::gemm(transa, transb, nbands, nbands, nbasis, - alpha, c, nbasis, Vc.data(), nbasis, beta, cVc.data(), nbands); - return cVc; - } + std::vector cVc(nbands * nbands, 0.0); + transa = ((std::is_same::value || std::is_same::value) ? 'T' : 'C'); + container::BlasConnector::gemm(transa, + transb, + nbands, + nbands, + nbasis, + alpha, + c, + nbasis, + Vc.data(), + nbasis, + beta, + cVc.data(), + nbands); + return cVc; +} - template - std::vector> psi_Hpsi(std::complex* const psi, - std::complex* const hpsi, const int nbasis, const int nbands) - { - using T = std::complex; - std::vector cVc(nbands * nbands, (T)0.0); - const T alpha(1.0, 0.0); - const T beta(0.0, 0.0); - container::BlasConnector::gemm('C', 'N', nbands, nbands, nbasis, alpha, - psi, nbasis, hpsi, nbasis, beta, cVc.data(), nbands); - return cVc; - } +template +std::vector> psi_Hpsi(std::complex* const psi, + std::complex* const hpsi, + const int nbasis, + const int nbands) +{ + using T = std::complex; + std::vector cVc(nbands * nbands, (T)0.0); + const T alpha(1.0, 0.0); + const T beta(0.0, 0.0); + container::BlasConnector::gemm('C', + 'N', + nbands, + nbands, + nbasis, + alpha, + psi, + nbasis, + hpsi, + nbasis, + beta, + cVc.data(), + nbands); + return cVc; +} - template - std::vector orbital_energy(const int ik, const int nbands, - const std::vector>& mat_mo) - { +template +std::vector orbital_energy(const int ik, const int nbands, const std::vector>& mat_mo) +{ #ifdef __DEBUG - assert(nbands >= 0); + assert(nbands >= 0); #endif - std::vector e(nbands, 0.0); - for (int i = 0; i < nbands; ++i) - { - e[i] = get_real(mat_mo[i * nbands + i]); - } - return e; + std::vector e(nbands, 0.0); + for (int i = 0; i < nbands; ++i) + { + e[i] = get_real(mat_mo[i * nbands + i]); } + return e; +} - template - FPTYPE all_band_energy(const int ik, const int nbands, - const std::vector>& mat_mo, const ModuleBase::matrix& wg) +template +FPTYPE all_band_energy(const int ik, + const int nbands, + const std::vector>& mat_mo, + const ModuleBase::matrix& wg) +{ + FPTYPE e = 0.0; + for (int i = 0; i < nbands; ++i) { - FPTYPE e = 0.0; - for (int i = 0; i < nbands; ++i) - { - e += get_real(mat_mo[i * nbands + i]) * (FPTYPE)wg(ik, i); - } - return e; + e += get_real(mat_mo[i * nbands + i]) * (FPTYPE)wg(ik, i); } + return e; +} - template - FPTYPE all_band_energy(const int ik, const std::vector& orbital_energy, - const ModuleBase::matrix& wg) +template +FPTYPE all_band_energy(const int ik, const std::vector& orbital_energy, const ModuleBase::matrix& wg) +{ + FPTYPE e = 0.0; + for (int i = 0; i < orbital_energy.size(); ++i) { - FPTYPE e = 0.0; - for (int i = 0; i < orbital_energy.size(); ++i) - { - e += orbital_energy[i] * (FPTYPE)wg(ik, i); - } - return e; + e += orbital_energy[i] * (FPTYPE)wg(ik, i); } + return e; +} - /// @brief write the Vxc matrix in KS orbital representation, usefull for GW calculation - /// including terms: local/semi-local XC and EXX - template - void write_Vxc(int nspin, - int naos, - int drank, - const psi::Psi>& psi_pw, - // const psi::Psi& psi_lcao, - const UnitCell& ucell, - Structure_Factor& sf, - surchem& solvent, - const ModulePW::PW_Basis_K& wfc_basis, - const ModulePW::PW_Basis& rho_basis, - const ModulePW::PW_Basis& rhod_basis, - const ModuleBase::matrix& vloc, - const Charge& chg, - const K_Vectors& kv, - const ModuleBase::matrix& wg +/// @brief write the Vxc matrix in KS orbital representation, usefull for GW calculation +/// including terms: local/semi-local XC and EXX +template +void write_Vxc(int nspin, + int naos, + int drank, + const psi::Psi>& psi_pw, + // const psi::Psi& psi_lcao, + const UnitCell& ucell, + Structure_Factor& sf, + surchem& solvent, + const ModulePW::PW_Basis_K& wfc_basis, + const ModulePW::PW_Basis& rho_basis, + const ModulePW::PW_Basis& rhod_basis, + const ModuleBase::matrix& vloc, + const Charge& chg, + const K_Vectors& kv, + const ModuleBase::matrix& wg #ifdef __EXX - , - const Exx_Lip>& exx_lip + , + const Exx_Lip>& exx_lip #endif - ) - { - using T = std::complex; - ModuleBase::TITLE("ModuleIO", "write_Vxc_LIP"); - int nbands = wg.nc; - // 1. real-space xc potential - // ModuleBase::matrix vr_xc(nspin, chg.nrxx); - double etxc = 0.0; - double vtxc = 0.0; - // elecstate::PotXC* potxc(&rho_basis, &etxc, vtxc, nullptr); - // potxc.cal_v_eff(&chg, &ucell, vr_xc); - elecstate::Potential* potxc - = new elecstate::Potential(&rhod_basis, &rho_basis, &ucell, &vloc, &sf, &solvent, &etxc, &vtxc); - std::vector compnents_list = { "xc" }; - - potxc->pot_register(compnents_list); - potxc->update_from_charge(&chg, &ucell); - // const ModuleBase::matrix vr_localxc = potxc->get_veff_smooth(); +) +{ + using T = std::complex; + ModuleBase::TITLE("ModuleIO", "write_Vxc_LIP"); + int nbands = wg.nc; + // 1. real-space xc potential + // ModuleBase::matrix vr_xc(nspin, chg.nrxx); + double etxc = 0.0; + double vtxc = 0.0; + // elecstate::PotXC* potxc(&rho_basis, &etxc, vtxc, nullptr); + // potxc.cal_v_eff(&chg, &ucell, vr_xc); + elecstate::Potential* potxc + = new elecstate::Potential(&rhod_basis, &rho_basis, &ucell, &vloc, &sf, &solvent, &etxc, &vtxc); + std::vector compnents_list = {"xc"}; - // 2. allocate xc operator - psi::Psi hpsi_localxc(psi_pw.get_nk(), psi_pw.get_nbands(), psi_pw.get_nbasis(), kv.ngk, true); - hpsi_localxc.zero_out(); - // std::cout << "hpsi.nk=" << hpsi_localxc.get_nk() << std::endl; - // std::cout << "hpsi.nbands=" << hpsi_localxc.get_nbands() << std::endl; - // std::cout << "hpsi.nbasis=" << hpsi_localxc.get_nbasis() << std::endl; - hamilt::Veff>* vxcs_op_pw; + potxc->pot_register(compnents_list); + potxc->update_from_charge(&chg, &ucell); + // const ModuleBase::matrix vr_localxc = potxc->get_veff_smooth(); + // 2. allocate xc operator + psi::Psi hpsi_localxc(psi_pw.get_nk(), psi_pw.get_nbands(), psi_pw.get_nbasis(), kv.ngk, true); + hpsi_localxc.zero_out(); + // std::cout << "hpsi.nk=" << hpsi_localxc.get_nk() << std::endl; + // std::cout << "hpsi.nbands=" << hpsi_localxc.get_nbands() << std::endl; + // std::cout << "hpsi.nbasis=" << hpsi_localxc.get_nbasis() << std::endl; + hamilt::Veff>* vxcs_op_pw; - std::vector> e_orb_locxc; // orbital energy (local XC) - std::vector> e_orb_tot; // orbital energy (total) - std::vector> e_orb_exx; // orbital energy (EXX) - Parallel_2D p2d_serial; - p2d_serial.set_serial(nbands, nbands); - // ======test======= - std::vector exx_energy(kv.get_nks()); - // ======test=======s - for (int ik = 0; ik < kv.get_nks(); ++ik) - { - // 2.1 local xc - vxcs_op_pw = new hamilt::Veff>(kv.isk.data(), - potxc->get_veff_smooth_data(), potxc->get_veff_smooth().nr, potxc->get_veff_smooth().nc, &wfc_basis); - vxcs_op_pw->init(ik); // set k-point index - psi_pw.fix_k(ik); - hpsi_localxc.fix_k(ik); + std::vector> e_orb_locxc; // orbital energy (local XC) + std::vector> e_orb_tot; // orbital energy (total) + std::vector> e_orb_exx; // orbital energy (EXX) + Parallel_2D p2d_serial; + p2d_serial.set_serial(nbands, nbands); + // ======test======= + std::vector exx_energy(kv.get_nks()); + // ======test=======s + for (int ik = 0; ik < kv.get_nks(); ++ik) + { + // 2.1 local xc + vxcs_op_pw = new hamilt::Veff>(kv.isk.data(), + potxc->get_veff_smooth_data(), + potxc->get_veff_smooth().nr, + potxc->get_veff_smooth().nc, + &wfc_basis); + vxcs_op_pw->init(ik); // set k-point index + psi_pw.fix_k(ik); + hpsi_localxc.fix_k(ik); #ifdef __DEBUG - assert(hpsi_localxc.get_current_nbas() == psi_pw.get_current_nbas()); - assert(hpsi_localxc.get_current_nbas() == hpsi_localxc.get_ngk(ik)); + assert(hpsi_localxc.get_current_nbas() == psi_pw.get_current_nbas()); + assert(hpsi_localxc.get_current_nbas() == hpsi_localxc.get_ngk(ik)); #endif - /// wrap psi and act band-by-band (the same result as act all bands at once) - // for (int ib = 0;ib < psi_pw.get_nbands();++ib) - // { - // std::cout<<"ib="< psi_single_band(&psi_pw(ik, ib, 0), 1, 1, psi_pw.get_current_nbas()); - // psi::Psi hpsi_single_band(&hpsi_localxc(ik, ib, 0), 1, 1, hpsi_localxc.get_current_nbas()); - // vxcs_op_pw->act(1, psi_pw.get_current_nbas(), psi_pw.npol, psi_single_band.get_pointer(), hpsi_single_band.get_pointer(), psi_pw.get_ngk(ik)); - // } - vxcs_op_pw->act(psi_pw.get_nbands(), psi_pw.get_nbasis(), psi_pw.get_npol(), &psi_pw(ik, 0, 0), &hpsi_localxc(ik, 0, 0), psi_pw.get_ngk(ik)); - delete vxcs_op_pw; - std::vector vxc_local_k_mo = psi_Hpsi(&psi_pw(ik, 0, 0), &hpsi_localxc(ik, 0, 0), psi_pw.get_nbasis(), psi_pw.get_nbands()); - Parallel_Reduce::reduce_pool(vxc_local_k_mo.data(), nbands * nbands); - e_orb_locxc.emplace_back(orbital_energy(ik, nbands, vxc_local_k_mo)); + /// wrap psi and act band-by-band (the same result as act all bands at once) + // for (int ib = 0;ib < psi_pw.get_nbands();++ib) + // { + // std::cout<<"ib="< psi_single_band(&psi_pw(ik, ib, 0), 1, 1, psi_pw.get_current_nbas()); + // psi::Psi hpsi_single_band(&hpsi_localxc(ik, ib, 0), 1, 1, hpsi_localxc.get_current_nbas()); + // vxcs_op_pw->act(1, psi_pw.get_current_nbas(), psi_pw.npol, psi_single_band.get_pointer(), + // hpsi_single_band.get_pointer(), psi_pw.get_ngk(ik)); + // } + vxcs_op_pw->act(psi_pw.get_nbands(), + psi_pw.get_nbasis(), + psi_pw.get_npol(), + &psi_pw(ik, 0, 0), + &hpsi_localxc(ik, 0, 0), + psi_pw.get_ngk(ik)); + delete vxcs_op_pw; + std::vector vxc_local_k_mo + = psi_Hpsi(&psi_pw(ik, 0, 0), &hpsi_localxc(ik, 0, 0), psi_pw.get_nbasis(), psi_pw.get_nbands()); + Parallel_Reduce::reduce_pool(vxc_local_k_mo.data(), nbands * nbands); + e_orb_locxc.emplace_back(orbital_energy(ik, nbands, vxc_local_k_mo)); - // 2.2 exx - std::vector vxc_tot_k_mo(std::move(vxc_local_k_mo)); - std::vector vexx_k_ao(naos * naos); -#if((defined __LCAO)&&(defined __EXX) && !(defined __CUDA)&& !(defined __ROCM)) - if (GlobalC::exx_info.info_global.cal_exx) + // 2.2 exx + std::vector vxc_tot_k_mo(std::move(vxc_local_k_mo)); + std::vector vexx_k_ao(naos * naos); +#if ((defined __LCAO) && (defined __EXX) && !(defined __CUDA) && !(defined __ROCM)) + if (GlobalC::exx_info.info_global.cal_exx) + { + for (int n = 0; n < naos; ++n) { - for (int n = 0; n < naos; ++n) - { - for (int m = 0; m < naos; ++m) - { - vexx_k_ao[n * naos + m] += (T)GlobalC::exx_info.info_global.hybrid_alpha - * exx_lip.get_exx_matrix()[ik][m][n]; - } - } - std::vector vexx_k_mo = cVc(vexx_k_ao.data(), &(exx_lip.get_hvec()(ik, 0, 0)), naos, nbands); - Parallel_Reduce::reduce_pool(vexx_k_mo.data(), nbands * nbands); - e_orb_exx.emplace_back(orbital_energy(ik, nbands, vexx_k_mo)); - // ======test======= - // std::cout << "exx_energy from matrix:" << all_band_energy(ik, nbands, vexx_k_mo, wg) << std::endl; - // std::cout << "exx_energy from orbitals: " << all_band_energy(ik, e_orb_exx.at(ik), wg) << std::endl; - // std::cout << "exx_energy from exx_lip: " << GlobalC::exx_info.info_global.hybrid_alpha * exx_lip.get_exx_energy() << std::endl; - // ======test======= - container::BlasConnector::axpy(nbands * nbands, 1.0, vexx_k_mo.data(), 1, vxc_tot_k_mo.data(), 1); + for (int m = 0; m < naos; ++m) + { + vexx_k_ao[n * naos + m] + += (T)GlobalC::exx_info.info_global.hybrid_alpha * exx_lip.get_exx_matrix()[ik][m][n]; + } } + std::vector vexx_k_mo = cVc(vexx_k_ao.data(), &(exx_lip.get_hvec()(ik, 0, 0)), naos, nbands); + Parallel_Reduce::reduce_pool(vexx_k_mo.data(), nbands * nbands); + e_orb_exx.emplace_back(orbital_energy(ik, nbands, vexx_k_mo)); + // ======test======= + // std::cout << "exx_energy from matrix:" << all_band_energy(ik, nbands, vexx_k_mo, wg) << std::endl; + // std::cout << "exx_energy from orbitals: " << all_band_energy(ik, e_orb_exx.at(ik), wg) << std::endl; + // std::cout << "exx_energy from exx_lip: " << GlobalC::exx_info.info_global.hybrid_alpha * + // exx_lip.get_exx_energy() << std::endl; + // ======test======= + container::BlasConnector::axpy(nbands * nbands, 1.0, vexx_k_mo.data(), 1, vxc_tot_k_mo.data(), 1); + } #endif - - /// add-up and write - // mohan add 2025-06-02 - const int istep = -1; - const int out_label = 1; // 1 means .txt while 2 means .dat - const bool out_app_flag = 0; - const bool gamma_only = PARAM.globalv.gamma_only_local; - std::string vxc_file = ModuleIO::filename_output( - PARAM.globalv.global_out_dir, - "vxc","nao",ik,kv.ik2iktot,nspin,kv.get_nkstot(), - out_label,out_app_flag,gamma_only,istep); - - ModuleIO::save_mat(istep, vxc_tot_k_mo.data(), nbands, - false, PARAM.inp.out_ndigits, true, - out_app_flag, vxc_file, - p2d_serial, drank, false); + /// add-up and write + // mohan add 2025-06-02 + const int istep = -1; + const int out_label = 1; // 1 means .txt while 2 means .dat + const bool out_app_flag = 0; + const bool gamma_only = PARAM.globalv.gamma_only_local; - e_orb_tot.emplace_back(orbital_energy(ik, nbands, vxc_tot_k_mo)); - } - //===== test total xc energy ======= - // std::cout << "xc energy =" << etxc << std::endl; - // std::cout << "vtxc=" << vtxc << std::endl; - // FPTYPE exc_by_orb = 0.0; - // for (int ik = 0;ik < e_orb_locxc.size();++ik) - // exc_by_orb += all_band_energy(ik, e_orb_locxc[ik], wg); - // std::cout << "xc all-bands energy by orbital =" << exc_by_orb << std::endl; - // /// calculate orbital energy by grid integration of vtxc*rho - // FPTYPE exc_by_rho = 0.0; - // for (int ir = 0;ir < potxc->get_veff_smooth().nc;++ir) - // exc_by_rho += potxc->get_veff_smooth()(0, ir) * chg.rho[0][ir]; - // Parallel_Reduce::reduce_all(exc_by_rho); - // exc_by_rho *= ((FPTYPE)ucell.omega * (FPTYPE)GlobalV::NPROC / (FPTYPE)potxc->get_veff_smooth().nc); - // std::cout << "xc all-bands energy by rho =" << exc_by_rho << std::endl; - //===== test total xc energy ======= - //===== test total exx energy ======= -// #if((defined __LCAO)&&(defined __EXX) && !(defined __CUDA)&& !(defined __ROCM)) -// if (GlobalC::exx_info.info_global.cal_exx) -// { -// FPTYPE exx_by_orb = 0.0; -// for (int ik = 0;ik < e_orb_exx.size();++ik) -// exx_by_orb += all_band_energy(ik, e_orb_exx[ik], wg); -// exx_by_orb /= 2; -// std::cout << "exx all-bands energy by orbital =" << exx_by_orb << std::endl; -// FPTYPE exx_from_lip = GlobalC::exx_info.info_global.hybrid_alpha * exx_lip.get_exx_energy(); -// std::cout << "exx all-bands energy from exx_lip =" << exx_from_lip << std::endl; -// } -// #endif - //===== test total exx energy ======= - // write the orbital energy for xc and exx in LibRPA format - const int nspin0 = (nspin == 2) ? 2 : 1; - auto write_orb_energy = [&kv, &nspin0, &nbands](const std::vector>& e_orb, - const std::string& label, - const bool app = false) { - assert(e_orb.size() == kv.get_nks()); - const int nk = kv.get_nks() / nspin0; - std::ofstream ofs; - ofs.open(PARAM.globalv.global_out_dir + "vxc_" + (label == "" ? "out.dat" : label + "_out.dat"), - app ? std::ios::app : std::ios::out); - ofs << nk << "\n" << nspin0 << "\n" << nbands << "\n"; - ofs << std::scientific << std::setprecision(16); - for (int ik = 0; ik < nk; ++ik) - { - for (int is = 0; is < nspin0; ++is) - { - for (auto e : e_orb[is * nk + ik]) - { // Hartree and eV - ofs << e / 2. << "\t" << e * (FPTYPE)ModuleBase::Ry_to_eV << "\n"; - } - } - } - }; + std::string vxc_file = ModuleIO::filename_output(PARAM.globalv.global_out_dir, + "vxc", + "nao", + ik, + kv.ik2iktot, + nspin, + kv.get_nkstot(), + out_label, + out_app_flag, + gamma_only, + istep); - if (GlobalV::MY_RANK == 0) + ModuleIO::save_mat(istep, + vxc_tot_k_mo.data(), + nbands, + false, + PARAM.inp.out_ndigits, + true, + out_app_flag, + vxc_file, + p2d_serial, + drank, + false); + + e_orb_tot.emplace_back(orbital_energy(ik, nbands, vxc_tot_k_mo)); + } + //===== test total xc energy ======= + // std::cout << "xc energy =" << etxc << std::endl; + // std::cout << "vtxc=" << vtxc << std::endl; + // FPTYPE exc_by_orb = 0.0; + // for (int ik = 0;ik < e_orb_locxc.size();++ik) + // exc_by_orb += all_band_energy(ik, e_orb_locxc[ik], wg); + // std::cout << "xc all-bands energy by orbital =" << exc_by_orb << std::endl; + // /// calculate orbital energy by grid integration of vtxc*rho + // FPTYPE exc_by_rho = 0.0; + // for (int ir = 0;ir < potxc->get_veff_smooth().nc;++ir) + // exc_by_rho += potxc->get_veff_smooth()(0, ir) * chg.rho[0][ir]; + // Parallel_Reduce::reduce_all(exc_by_rho); + // exc_by_rho *= ((FPTYPE)ucell.omega * (FPTYPE)GlobalV::NPROC / (FPTYPE)potxc->get_veff_smooth().nc); + // std::cout << "xc all-bands energy by rho =" << exc_by_rho << std::endl; + //===== test total xc energy ======= + //===== test total exx energy ======= + // #if((defined __LCAO)&&(defined __EXX) && !(defined __CUDA)&& !(defined __ROCM)) + // if (GlobalC::exx_info.info_global.cal_exx) + // { + // FPTYPE exx_by_orb = 0.0; + // for (int ik = 0;ik < e_orb_exx.size();++ik) + // exx_by_orb += all_band_energy(ik, e_orb_exx[ik], wg); + // exx_by_orb /= 2; + // std::cout << "exx all-bands energy by orbital =" << exx_by_orb << std::endl; + // FPTYPE exx_from_lip = GlobalC::exx_info.info_global.hybrid_alpha * exx_lip.get_exx_energy(); + // std::cout << "exx all-bands energy from exx_lip =" << exx_from_lip << std::endl; + // } + // #endif + //===== test total exx energy ======= + // write the orbital energy for xc and exx in LibRPA format + const int nspin0 = (nspin == 2) ? 2 : 1; + auto write_orb_energy = [&kv, &nspin0, &nbands](const std::vector>& e_orb, + const std::string& label, + const bool app = false) { + assert(e_orb.size() == kv.get_nks()); + const int nk = kv.get_nks() / nspin0; + std::ofstream ofs; + ofs.open(PARAM.globalv.global_out_dir + "vxc_" + (label == "" ? "out.dat" : label + "_out.dat"), + app ? std::ios::app : std::ios::out); + ofs << nk << "\n" << nspin0 << "\n" << nbands << "\n"; + ofs << std::scientific << std::setprecision(16); + for (int ik = 0; ik < nk; ++ik) { - write_orb_energy(e_orb_tot, ""); -#if((defined __LCAO)&&(defined __EXX) && !(defined __CUDA)&& !(defined __ROCM)) - if (GlobalC::exx_info.info_global.cal_exx) + for (int is = 0; is < nspin0; ++is) { - write_orb_energy(e_orb_locxc, "local"); - write_orb_energy(e_orb_exx, "exx"); + for (auto e: e_orb[is * nk + ik]) + { // Hartree and eV + ofs << e / 2. << "\t" << e * (FPTYPE)ModuleBase::Ry_to_eV << "\n"; + } } -#endif } + }; + + if (GlobalV::MY_RANK == 0) + { + write_orb_energy(e_orb_tot, ""); +#if ((defined __LCAO) && (defined __EXX) && !(defined __CUDA) && !(defined __ROCM)) + if (GlobalC::exx_info.info_global.cal_exx) + { + write_orb_energy(e_orb_locxc, "local"); + write_orb_energy(e_orb_exx, "exx"); + } +#endif } +} } // namespace ModuleIO #endif diff --git a/source/module_io/write_vxc_r.hpp b/source/module_io/write_vxc_r.hpp index 2986648415..560ce1c777 100644 --- a/source/module_io/write_vxc_r.hpp +++ b/source/module_io/write_vxc_r.hpp @@ -1,11 +1,11 @@ #ifndef __WRITE_VXC_R_H_ #define __WRITE_VXC_R_H_ -#include "module_parameter/parameter.h" -#include "module_base/scalapack_connector.h" #include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_dftu_lcao.h" #include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/veff_lcao.h" #include "module_hamilt_lcao/hamilt_lcaodft/spar_hsr.h" #include "module_io/write_HS_sparse.h" +#include "module_parameter/parameter.h" +#include "source_base/scalapack_connector.h" #ifdef __EXX #include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_exx_lcao.h" #include "module_ri/RI_2D_Comm.h" @@ -52,7 +52,8 @@ void set_gint_pointer>(Gint_Gamma& gint_gamma, } #endif -template std::set> get_R_range(const hamilt::HContainer& hR) +template +std::set> get_R_range(const hamilt::HContainer& hR) { std::set> all_R_coor; @@ -60,14 +61,14 @@ template std::set> get_R_range(const hami } template -std::map, std::map>> -cal_HR_sparse(const hamilt::HContainer& hR, +std::map, std::map>> cal_HR_sparse( + const hamilt::HContainer& hR, const int current_spin, const double sparse_thr); template <> -std::map, std::map>> -cal_HR_sparse(const hamilt::HContainer& hR, +std::map, std::map>> cal_HR_sparse( + const hamilt::HContainer& hR, const int current_spin, const double sparse_thr) { @@ -76,8 +77,8 @@ cal_HR_sparse(const hamilt::HContainer& hR, return target; } template <> -std::map, std::map>>> -cal_HR_sparse(const hamilt::HContainer>& hR, +std::map, std::map>>> cal_HR_sparse( + const hamilt::HContainer>& hR, const int current_spin, const double sparse_thr) { @@ -90,24 +91,24 @@ cal_HR_sparse(const hamilt::HContainer>& hR, /// including terms: local/semi-local XC, EXX, DFTU template void write_Vxc_R(const int nspin, - const Parallel_Orbitals* pv, - const UnitCell& ucell, - Structure_Factor& sf, - surchem& solvent, - const ModulePW::PW_Basis& rho_basis, - const ModulePW::PW_Basis& rhod_basis, - const ModuleBase::matrix& vloc, - const Charge& chg, - Gint_Gamma& gint_gamma, - Gint_k& gint_k, - const K_Vectors& kv, - const std::vector& orb_cutoff, - Grid_Driver& gd, + const Parallel_Orbitals* pv, + const UnitCell& ucell, + Structure_Factor& sf, + surchem& solvent, + const ModulePW::PW_Basis& rho_basis, + const ModulePW::PW_Basis& rhod_basis, + const ModuleBase::matrix& vloc, + const Charge& chg, + Gint_Gamma& gint_gamma, + Gint_k& gint_k, + const K_Vectors& kv, + const std::vector& orb_cutoff, + Grid_Driver& gd, #ifdef __EXX - const std::vector>>>* const Hexxd, - const std::vector>>>>* const Hexxc, + const std::vector>>>* const Hexxd, + const std::vector>>>>* const Hexxc, #endif -const double sparse_thr=1e-10) + const double sparse_thr = 1e-10) { ModuleBase::TITLE("ModuleIO", "write_Vxc_R"); // 1. real-space xc potential @@ -125,20 +126,23 @@ const double sparse_thr=1e-10) // 2. allocate H(R) // (the number of hR: 1 for nspin=1, 4; 2 for nspin=2) int nspin0 = (nspin == 2) ? 2 : 1; - std::vector> vxcs_R_ao(nspin0, hamilt::HContainer(ucell, pv)); // call move constructor + std::vector> vxcs_R_ao(nspin0, hamilt::HContainer(ucell, pv)); // call move constructor #ifdef __EXX - std::array Rs_period = { kv.nmp[0], kv.nmp[1], kv.nmp[2] }; + std::array Rs_period = {kv.nmp[0], kv.nmp[1], kv.nmp[2]}; const auto cell_nearest = hamilt::init_cell_nearest(ucell, Rs_period); #endif for (int is = 0; is < nspin0; ++is) { - if (std::is_same::value) { vxcs_R_ao[is].fix_gamma(); } + if (std::is_same::value) + { + vxcs_R_ao[is].fix_gamma(); + } #ifdef __EXX if (GlobalC::exx_info.info_global.cal_exx) { - GlobalC::exx_info.info_ri.real_number ? - hamilt::reallocate_hcontainer(*Hexxd, &vxcs_R_ao[is], &cell_nearest) : - hamilt::reallocate_hcontainer(*Hexxc, &vxcs_R_ao[is], &cell_nearest); + GlobalC::exx_info.info_ri.real_number + ? hamilt::reallocate_hcontainer(*Hexxd, &vxcs_R_ao[is], &cell_nearest) + : hamilt::reallocate_hcontainer(*Hexxc, &vxcs_R_ao[is], &cell_nearest); } #endif } @@ -151,14 +155,32 @@ const double sparse_thr=1e-10) for (int is = 0; is < nspin0; ++is) { vxcs_op_ao[is] = new hamilt::Veff>(gint, - &vxc_k_ao, kv.kvec_d, potxc, &vxcs_R_ao[is], &ucell, orb_cutoff, &gd, nspin); + &vxc_k_ao, + kv.kvec_d, + potxc, + &vxcs_R_ao[is], + &ucell, + orb_cutoff, + &gd, + nspin); vxcs_op_ao[is]->contributeHR(); #ifdef __EXX if (GlobalC::exx_info.info_global.cal_exx) { - GlobalC::exx_info.info_ri.real_number ? - RI_2D_Comm::add_HexxR(is, GlobalC::exx_info.info_global.hybrid_alpha, *Hexxd, *pv, ucell.get_npol(), vxcs_R_ao[is], &cell_nearest) : - RI_2D_Comm::add_HexxR(is, GlobalC::exx_info.info_global.hybrid_alpha, *Hexxc, *pv, ucell.get_npol(), vxcs_R_ao[is], &cell_nearest); + GlobalC::exx_info.info_ri.real_number ? RI_2D_Comm::add_HexxR(is, + GlobalC::exx_info.info_global.hybrid_alpha, + *Hexxd, + *pv, + ucell.get_npol(), + vxcs_R_ao[is], + &cell_nearest) + : RI_2D_Comm::add_HexxR(is, + GlobalC::exx_info.info_global.hybrid_alpha, + *Hexxc, + *pv, + ucell.get_npol(), + vxcs_R_ao[is], + &cell_nearest); } #endif } @@ -187,16 +209,15 @@ const double sparse_thr=1e-10) { std::set> all_R_coor = sparse_format::get_R_range(vxcs_R_ao[is]); const std::string filename = "Vxc_R_spin" + std::to_string(is); - ModuleIO::save_sparse( - cal_HR_sparse(vxcs_R_ao[is], is, sparse_thr), - all_R_coor, - sparse_thr, - false, //binary - PARAM.globalv.global_out_dir + filename + ".csr", - *pv, - filename, - -1, - true); //all-reduce + ModuleIO::save_sparse(cal_HR_sparse(vxcs_R_ao[is], is, sparse_thr), + all_R_coor, + sparse_thr, + false, // binary + PARAM.globalv.global_out_dir + filename + ".csr", + *pv, + filename, + -1, + true); // all-reduce } } } // namespace ModuleIO diff --git a/source/module_io/write_wfc_nao.cpp b/source/module_io/write_wfc_nao.cpp index 0857924d1a..d73a12f245 100644 --- a/source/module_io/write_wfc_nao.cpp +++ b/source/module_io/write_wfc_nao.cpp @@ -1,15 +1,15 @@ #include "write_wfc_nao.h" -#include "module_parameter/parameter.h" -#include "module_base/memory.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" -#include "module_base/parallel_2d.h" -#include "module_base/scalapack_connector.h" -#include "module_base/global_variable.h" -#include "module_base/global_function.h" #include "binstream.h" #include "filename.h" +#include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" +#include "source_base/parallel_2d.h" +#include "source_base/scalapack_connector.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" namespace ModuleIO { @@ -114,8 +114,8 @@ void wfc_nao_write2file_complex(const std::string& name, const bool& writeBinary, const bool& append_flag) { - ModuleBase::TITLE("ModuleIO","wfc_nao_write2file_complex"); - ModuleBase::timer::tick("ModuleIO","wfc_nao_write2file_complex"); + ModuleBase::TITLE("ModuleIO", "wfc_nao_write2file_complex"); + ModuleBase::timer::tick("ModuleIO", "wfc_nao_write2file_complex"); int nbands = ekb.nc; @@ -196,22 +196,22 @@ void wfc_nao_write2file_complex(const std::string& name, ofs.close(); } - ModuleBase::timer::tick("ModuleIO","wfc_nao_write2file_complex"); + ModuleBase::timer::tick("ModuleIO", "wfc_nao_write2file_complex"); return; } template void write_wfc_nao(const int out_type, - const bool out_app_flag, - const psi::Psi& psi, - const ModuleBase::matrix& ekb, - const ModuleBase::matrix& wg, - const std::vector>& kvec_c, - const std::vector &ik2iktot, - const int nkstot, - const Parallel_Orbitals& pv, - const int nspin, - const int istep) + const bool out_app_flag, + const psi::Psi& psi, + const ModuleBase::matrix& ekb, + const ModuleBase::matrix& wg, + const std::vector>& kvec_c, + const std::vector& ik2iktot, + const int nkstot, + const Parallel_Orbitals& pv, + const int nspin, + const int istep) { if (!out_type) { @@ -223,7 +223,7 @@ void write_wfc_nao(const int out_type, int nbands = 0; int nlocal = 0; - // If using MPI, the nbasis and nbands in psi is the value on local rank, + // If using MPI, the nbasis and nbands in psi is the value on local rank, // so get nlocal and nbands from pv->desc_wfc[2] and pv->desc_wfc[3] #ifdef __MPI MPI_Comm_rank(pv.comm(), &myid); @@ -244,8 +244,8 @@ void write_wfc_nao(const int out_type, for (int ik = 0; ik < psi.get_nk(); ik++) { psi.fix_k(ik); -#ifdef __MPI - pv_glb.set(nlocal, nbands, blk_glb, pv.blacs_ctxt); +#ifdef __MPI + pv_glb.set(nlocal, nbands, blk_glb, pv.blacs_ctxt); Cpxgemr2d(nlocal, nbands, psi.get_pointer(), @@ -262,15 +262,24 @@ void write_wfc_nao(const int out_type, { for (int i = 0; i < nlocal; i++) { - ctot[ib * nlocal + i] = psi(ib,i); + ctot[ib * nlocal + i] = psi(ib, i); } - } + } #endif if (myid == 0) { - std::string fn = filename_output(PARAM.globalv.global_out_dir,"wf","nao",ik,ik2iktot,nspin,nkstot, - out_type,out_app_flag,gamma_only,istep); + std::string fn = filename_output(PARAM.globalv.global_out_dir, + "wf", + "nao", + ik, + ik2iktot, + nspin, + nkstot, + out_type, + out_app_flag, + gamma_only, + istep); bool append_flag = (istep > 0 && out_app_flag); if (std::is_same::value) @@ -302,27 +311,27 @@ void write_wfc_nao(const int out_type, } template void write_wfc_nao(const int out_type, - const bool out_app_flag, - const psi::Psi& psi, - const ModuleBase::matrix& ekb, - const ModuleBase::matrix& wg, - const std::vector>& kvec_c, - const std::vector &ik2iktot, - const int nkstot, - const Parallel_Orbitals& pv, - const int nspin, - const int istep); + const bool out_app_flag, + const psi::Psi& psi, + const ModuleBase::matrix& ekb, + const ModuleBase::matrix& wg, + const std::vector>& kvec_c, + const std::vector& ik2iktot, + const int nkstot, + const Parallel_Orbitals& pv, + const int nspin, + const int istep); template void write_wfc_nao>(const int out_type, - const bool out_app_flag, - const psi::Psi>& psi, - const ModuleBase::matrix& ekb, - const ModuleBase::matrix& wg, - const std::vector>& kvec_c, - const std::vector &ik2iktot, - const int nkstot, - const Parallel_Orbitals& pv, - const int nspin, - const int istep); + const bool out_app_flag, + const psi::Psi>& psi, + const ModuleBase::matrix& ekb, + const ModuleBase::matrix& wg, + const std::vector>& kvec_c, + const std::vector& ik2iktot, + const int nkstot, + const Parallel_Orbitals& pv, + const int nspin, + const int istep); } // namespace ModuleIO diff --git a/source/module_io/write_wfc_nao.h b/source/module_io/write_wfc_nao.h index 4c8a5138ab..ec5cdc9533 100644 --- a/source/module_io/write_wfc_nao.h +++ b/source/module_io/write_wfc_nao.h @@ -1,15 +1,16 @@ #ifndef WRITE_WFC_NAO_H #define WRITE_WFC_NAO_H -#include "module_base/matrix.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_psi/psi.h" -#include "module_base/vector3.h" +#include "source_base/matrix.h" +#include "source_base/vector3.h" + #include namespace ModuleIO { - /** +/** * Writes the wavefunction coefficients for the LCAO method to a file. * Will loop all k-points by psi.get_nk(). * The nbands are determined by ekb.nc. @@ -25,16 +26,16 @@ namespace ModuleIO */ template void write_wfc_nao(const int out_type, - const bool out_app_flag, - const psi::Psi& psi, - const ModuleBase::matrix& ekb, - const ModuleBase::matrix& wg, - const std::vector>& kvec_c, - const std::vector &ik2iktot, - const int nkstot, - const Parallel_Orbitals& pv, - const int nspin, - const int istep=-1) ; + const bool out_app_flag, + const psi::Psi& psi, + const ModuleBase::matrix& ekb, + const ModuleBase::matrix& wg, + const std::vector>& kvec_c, + const std::vector& ik2iktot, + const int nkstot, + const Parallel_Orbitals& pv, + const int nspin, + const int istep = -1); void wfc_nao_write2file(const std::string& name, const double* ctot, @@ -54,5 +55,5 @@ void wfc_nao_write2file_complex(const std::string& name, const ModuleBase::matrix& wg, const bool& writeBinary = false, const bool& append_flag = false); -}// namespace ModuleIO +} // namespace ModuleIO #endif diff --git a/source/module_io/write_wfc_pw.cpp b/source/module_io/write_wfc_pw.cpp index 2f63f850e7..103cb5069c 100644 --- a/source/module_io/write_wfc_pw.cpp +++ b/source/module_io/write_wfc_pw.cpp @@ -5,86 +5,90 @@ #endif #include "binstream.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_global.h" -#include "module_base/tool_title.h" -#include "module_parameter/parameter.h" #include "module_io/filename.h" +#include "module_parameter/parameter.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_global.h" +#include "source_base/tool_title.h" -void ModuleIO::write_wfc_pw( - const int kpar, - const int my_pool, - const int my_rank, - const int nbands, - const int nspin, - const int npol, - const int rank_in_pool, - const int nproc_in_pool, - const int out_wfc_pw, - const double& ecutwfc, - const std::string& global_out_dir, - const psi::Psi>& psi, - const K_Vectors& kv, - const ModulePW::PW_Basis_K* wfcpw, - std::ofstream &ofs_running) +void ModuleIO::write_wfc_pw(const int kpar, + const int my_pool, + const int my_rank, + const int nbands, + const int nspin, + const int npol, + const int rank_in_pool, + const int nproc_in_pool, + const int out_wfc_pw, + const double& ecutwfc, + const std::string& global_out_dir, + const psi::Psi>& psi, + const K_Vectors& kv, + const ModulePW::PW_Basis_K* wfcpw, + std::ofstream& ofs_running) { ModuleBase::TITLE("ModuleIO", "write_wfc_pw"); - if(out_wfc_pw!=1 && out_wfc_pw!=2) - { - return; - } + if (out_wfc_pw != 1 && out_wfc_pw != 2) + { + return; + } const int nkstot = kv.get_nkstot(); const int nks = kv.get_nks(); - assert(nkstot>0); - assert(nks>0); + assert(nkstot > 0); + assert(nks > 0); bool out_app_flag = false; // need to modify later, mohan 2025-05-17 - bool gamma_only = false; // need to modify later, mohan 2025-05-17 - int istep = -1; // need to modify later, mohan 2025-05-17 + bool gamma_only = false; // need to modify later, mohan 2025-05-17 + int istep = -1; // need to modify later, mohan 2025-05-17 std::string* wfilename = new std::string[nks]; for (int ip = 0; ip < kpar; ip++) { - if (my_pool != ip) continue; + if (my_pool != ip) + continue; for (int ik_local = 0; ik_local < kv.get_nks(); ik_local++) { - std::string fn = filename_output(global_out_dir,"wf","pw", - ik_local,kv.ik2iktot,nspin,nkstot, - out_wfc_pw,out_app_flag,gamma_only,istep); + std::string fn = filename_output(global_out_dir, + "wf", + "pw", + ik_local, + kv.ik2iktot, + nspin, + nkstot, + out_wfc_pw, + out_app_flag, + gamma_only, + istep); - ofs_running << " Write G-space wave functions into file " - << fn << std::endl; + ofs_running << " Write G-space wave functions into file " << fn << std::endl; - wfilename[ik_local] = fn; - - if (rank_in_pool == 0) - { - if (out_wfc_pw == 1) - { - std::ofstream ofs(fn.c_str()); // clear all wavefunc files. - ofs.close(); - } - else if (out_wfc_pw == 2) - { - Binstream wfs(fn, "w"); - wfs.close(); - } - } - } - } + wfilename[ik_local] = fn; + if (rank_in_pool == 0) + { + if (out_wfc_pw == 1) + { + std::ofstream ofs(fn.c_str()); // clear all wavefunc files. + ofs.close(); + } + else if (out_wfc_pw == 2) + { + Binstream wfs(fn, "w"); + wfs.close(); + } + } + } + } #ifdef __MPI MPI_Barrier(MPI_COMM_WORLD); #endif - - #ifdef __MPI // out put the wave functions in plane wave basis. for (int ip = 0; ip < kpar; ip++) @@ -102,7 +106,7 @@ void ModuleIO::write_wfc_pw( #ifdef __MPI MPI_Allreduce(&kv.ngk[ik], &ikngtot, 1, MPI_INT, MPI_SUM, POOL_WORLD); #else - ikngtot = kv.ngk[ik]; + ikngtot = kv.ngk[ik]; #endif const int ikngtot_npol = ikngtot * npol; #ifdef __MPI @@ -128,8 +132,8 @@ void ModuleIO::write_wfc_pw( ofs2 << std::setw(10) << ikstot + 1 << std::setw(10) << nkstot << std::setw(10) << kv.kvec_c[ik].x << std::setw(10) << kv.kvec_c[ik].y << std::setw(10) << kv.kvec_c[ik].z << std::setw(10) << kv.wk[ik] << std::setw(10) << ikngtot - << std::setw(10) << nbands << std::setw(10) << ecutwfc - << std::setw(10) << wfcpw->lat0 << std::setw(10) << wfcpw->tpiba << std::endl; + << std::setw(10) << nbands << std::setw(10) << ecutwfc << std::setw(10) + << wfcpw->lat0 << std::setw(10) << wfcpw->tpiba << std::endl; ofs2 << "\n" << std::endl; ofs2 << std::setw(10) << wfcpw->G.e11 << std::setw(10) << wfcpw->G.e12 << std::setw(10) << wfcpw->G.e13 << std::endl; @@ -163,8 +167,8 @@ void ModuleIO::write_wfc_pw( if (id == 0) { wfs2 << int(72) << ikstot + 1 << nkstot << kv.kvec_c[ik].x << kv.kvec_c[ik].y - << kv.kvec_c[ik].z << kv.wk[ik] << ikngtot << nbands << ecutwfc - << wfcpw->lat0 << wfcpw->tpiba << 72; // 4 int + 7 double is 72B + << kv.kvec_c[ik].z << kv.wk[ik] << ikngtot << nbands << ecutwfc << wfcpw->lat0 + << wfcpw->tpiba << 72; // 4 int + 7 double is 72B wfs2 << 72 << wfcpw->G.e11 << wfcpw->G.e12 << wfcpw->G.e13 << wfcpw->G.e21 << wfcpw->G.e22 << wfcpw->G.e23 << wfcpw->G.e31 << wfcpw->G.e32 << wfcpw->G.e33 << 72; // 9 double is 72B @@ -203,7 +207,7 @@ void ModuleIO::write_wfc_pw( if (rank_in_pool == id) { #else - int id = 0; + int id = 0; #endif if (out_wfc_pw == 1) { @@ -257,7 +261,7 @@ void ModuleIO::write_wfc_pw( if (rank_in_pool == id) { #else - int id = 0; + int id = 0; #endif if (out_wfc_pw == 1) { @@ -294,7 +298,7 @@ void ModuleIO::write_wfc_pw( } #ifdef __MPI } // end if rank_in_pool - } // end id + } // end id #endif } // end if npol>1 diff --git a/source/module_io/write_wfc_r.cpp b/source/module_io/write_wfc_r.cpp index 0eb5c0a25e..a41e634b35 100644 --- a/source/module_io/write_wfc_r.cpp +++ b/source/module_io/write_wfc_r.cpp @@ -9,9 +9,9 @@ // Taoni add 2024-10-08 //====================== -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" #include "write_wfc_r.h" #include @@ -67,16 +67,15 @@ void write_psi_r_1(const UnitCell& ucell, wfc_imag[ir] = wfc_r[ir].imag(); } } - const std::string file_name_base = outdir + "wfc_realspace_" + - ModuleBase::GlobalFunc::TO_STRING(ik_out) + "_" + - ModuleBase::GlobalFunc::TO_STRING(ib); - const std::string file_name = square ? file_name_base : file_name_base + "_imag"; + const std::string file_name_base = outdir + "wfc_realspace_" + ModuleBase::GlobalFunc::TO_STRING(ik_out) + + "_" + ModuleBase::GlobalFunc::TO_STRING(ib); + const std::string file_name = square ? file_name_base : file_name_base + "_imag"; #ifdef __MPI // Use write_chg_r_1 to output the real and imaginary parts of the wave function to file mpi_requests.push_back({}); - write_chg_r_1(ucell,wfcpw, wfc_real, file_name, mpi_requests.back()); + write_chg_r_1(ucell, wfcpw, wfc_real, file_name, mpi_requests.back()); #else - write_chg_r_1(ucell,wfcpw, wfc_real, file_name); + write_chg_r_1(ucell, wfcpw, wfc_real, file_name); // if (!square) // write_chg_r_1(wfc_imag, file_name + "_imag", mpi_requests.back()); #endif @@ -118,10 +117,11 @@ void write_chg_r_1(const UnitCell& ucell, const ModulePW::PW_Basis_K* wfcpw, const std::vector& chg_r, const std::string& file_name - #ifdef __MPI - ,MPI_Request& mpi_request - #endif - ) +#ifdef __MPI + , + MPI_Request& mpi_request +#endif +) { ModuleBase::timer::tick("ModuleIO", "write_chg_r_1"); std::ofstream ofs; @@ -135,12 +135,9 @@ void write_chg_r_1(const UnitCell& ucell, ofs << "calculated by ABACUS" << std::endl; ofs << ucell.lat0_angstrom << std::endl; - ofs << ucell.latvec.e11 << " " << ucell.latvec.e12 << " " << ucell.latvec.e13 - << std::endl - << ucell.latvec.e21 << " " << ucell.latvec.e22 << " " << ucell.latvec.e23 - << std::endl - << ucell.latvec.e31 << " " << ucell.latvec.e32 << " " << ucell.latvec.e33 - << std::endl; + ofs << ucell.latvec.e11 << " " << ucell.latvec.e12 << " " << ucell.latvec.e13 << std::endl + << ucell.latvec.e21 << " " << ucell.latvec.e22 << " " << ucell.latvec.e23 << std::endl + << ucell.latvec.e31 << " " << ucell.latvec.e32 << " " << ucell.latvec.e33 << std::endl; for (int it = 0; it < ucell.ntype; ++it) { diff --git a/source/module_io/write_wfc_r.h b/source/module_io/write_wfc_r.h index 3ec5b1913f..c75c626941 100644 --- a/source/module_io/write_wfc_r.h +++ b/source/module_io/write_wfc_r.h @@ -5,21 +5,21 @@ #include "mpi.h" #endif -#include -#include -#include - -#include "module_base/complexmatrix.h" -#include "module_base/vector3.h" #include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/klist.h" #include "module_psi/psi.h" +#include "source_base/complexmatrix.h" +#include "source_base/vector3.h" + +#include +#include +#include namespace ModuleIO { - // write ||wfc_r|| for all k-points and all bands - // Input: wfc_g[ik](ib,ig) - // loop order is for(z){for(y){for(x)}} +// write ||wfc_r|| for all k-points and all bands +// Input: wfc_g[ik](ib,ig) +// loop order is for(z){for(y){for(x)}} void write_psi_r_1(const UnitCell& ucell, const psi::Psi>& wfc_g, const ModulePW::PW_Basis_K* wfcpw, @@ -39,10 +39,11 @@ void write_chg_r_1(const UnitCell& ucell, const ModulePW::PW_Basis_K* wfcpw, const std::vector& chg_r, const std::string& file_name - #ifdef __MPI - ,MPI_Request& mpi_request - #endif - ); -} +#ifdef __MPI + , + MPI_Request& mpi_request +#endif +); +} // namespace ModuleIO #endif diff --git a/source/module_lr/ao_to_mo_transformer/ao_to_mo.h b/source/module_lr/ao_to_mo_transformer/ao_to_mo.h index 23d42271d8..f6b7a56d98 100644 --- a/source/module_lr/ao_to_mo_transformer/ao_to_mo.h +++ b/source/module_lr/ao_to_mo_transformer/ao_to_mo.h @@ -1,46 +1,49 @@ #pragma once -#include #include "module_psi/psi.h" + +#include #include #ifdef __MPI -#include "module_base/parallel_2d.h" +#include "source_base/parallel_2d.h" #endif namespace LR { #ifndef MO_TYPE_H #define MO_TYPE_H - enum MO_TYPE { OO, VO, VV }; +enum MO_TYPE +{ + OO, + VO, + VV +}; #endif - template - void ao_to_mo_forloop_serial( - const std::vector& mat_ao, - const psi::Psi& coeff, - const int& nocc, - const int& nvirt, - T* const mat_mo, - const MO_TYPE type = VO); - template - void ao_to_mo_blas( - const std::vector& mat_ao, - const psi::Psi& coeff, - const int& nocc, - const int& nvirt, - T* const mat_mo, - const bool add_on = true, - const MO_TYPE type = VO); +template +void ao_to_mo_forloop_serial(const std::vector& mat_ao, + const psi::Psi& coeff, + const int& nocc, + const int& nvirt, + T* const mat_mo, + const MO_TYPE type = VO); +template +void ao_to_mo_blas(const std::vector& mat_ao, + const psi::Psi& coeff, + const int& nocc, + const int& nvirt, + T* const mat_mo, + const bool add_on = true, + const MO_TYPE type = VO); #ifdef __MPI - template - void ao_to_mo_pblas( - const std::vector& mat_ao, - const Parallel_2D& pmat_ao, - const psi::Psi& coeff, - const Parallel_2D& pcoeff, - const int& naos, - const int& nocc, - const int& nvirt, - const Parallel_2D& pmat_mo, - T* const mat_mo, - const bool add_on = true, - const MO_TYPE type = VO); +template +void ao_to_mo_pblas(const std::vector& mat_ao, + const Parallel_2D& pmat_ao, + const psi::Psi& coeff, + const Parallel_2D& pcoeff, + const int& naos, + const int& nocc, + const int& nvirt, + const Parallel_2D& pmat_mo, + T* const mat_mo, + const bool add_on = true, + const MO_TYPE type = VO); #endif -} \ No newline at end of file +} // namespace LR \ No newline at end of file diff --git a/source/module_lr/ao_to_mo_transformer/ao_to_mo_parallel.cpp b/source/module_lr/ao_to_mo_transformer/ao_to_mo_parallel.cpp index 2cadd4ac0c..c88d0d3ab1 100644 --- a/source/module_lr/ao_to_mo_transformer/ao_to_mo_parallel.cpp +++ b/source/module_lr/ao_to_mo_transformer/ao_to_mo_parallel.cpp @@ -1,127 +1,186 @@ #ifdef __MPI #include "ao_to_mo.h" -#include "module_base/scalapack_connector.h" -#include "module_base/tool_title.h" #include "module_lr/utils/lr_util.h" #include "module_lr/utils/lr_util_print.h" +#include "source_base/scalapack_connector.h" +#include "source_base/tool_title.h" namespace LR { - //output: col first, consistent with blas - // coeff: nao*nbands in para2d, nbands*nao in psi (row-para and constructed: nao) - // X: nvirt*nocc in para2d, nocc*nvirt in psi (row-para and constructed: nvirt) - template<> - void ao_to_mo_pblas( - const std::vector& mat_ao, - const Parallel_2D& pmat_ao, - const psi::Psi& coeff, - const Parallel_2D& pcoeff, - const int& naos, - const int& nocc, - const int& nvirt, - const Parallel_2D& pmat_mo, - double* mat_mo, - const bool add_on, - const MO_TYPE type) - { - ModuleBase::TITLE("hamilt_lrtd", "ao_to_mo_pblas"); - assert(pmat_ao.comm() == pcoeff.comm() && pmat_ao.comm() == pmat_mo.comm()); - assert(pmat_ao.blacs_ctxt == pcoeff.blacs_ctxt && pmat_ao.blacs_ctxt == pmat_mo.blacs_ctxt); - assert(pmat_mo.get_local_size() > 0); - - const int nks = mat_ao.size(); - const int i1 = 1; - const int ivirt = nocc + 1; - const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; - const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; - const int imo1 = type == MO_TYPE::VV ? ivirt : i1; - const int imo2 = type == MO_TYPE::OO ? i1 : ivirt; +// output: col first, consistent with blas +// coeff: nao*nbands in para2d, nbands*nao in psi (row-para and constructed: nao) +// X: nvirt*nocc in para2d, nocc*nvirt in psi (row-para and constructed: nvirt) +template <> +void ao_to_mo_pblas(const std::vector& mat_ao, + const Parallel_2D& pmat_ao, + const psi::Psi& coeff, + const Parallel_2D& pcoeff, + const int& naos, + const int& nocc, + const int& nvirt, + const Parallel_2D& pmat_mo, + double* mat_mo, + const bool add_on, + const MO_TYPE type) +{ + ModuleBase::TITLE("hamilt_lrtd", "ao_to_mo_pblas"); + assert(pmat_ao.comm() == pcoeff.comm() && pmat_ao.comm() == pmat_mo.comm()); + assert(pmat_ao.blacs_ctxt == pcoeff.blacs_ctxt && pmat_ao.blacs_ctxt == pmat_mo.blacs_ctxt); + assert(pmat_mo.get_local_size() > 0); - Parallel_2D pVc; // for intermediate Vc - LR_Util::setup_2d_division(pVc, pmat_ao.get_block_size(), naos, nmo1, pmat_ao.blacs_ctxt); - for (int isk = 0;isk < nks;++isk) - { - const int start = isk * pmat_mo.get_local_size(); - coeff.fix_k(isk); + const int nks = mat_ao.size(); + const int i1 = 1; + const int ivirt = nocc + 1; + const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; + const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; + const int imo1 = type == MO_TYPE::VV ? ivirt : i1; + const int imo2 = type == MO_TYPE::OO ? i1 : ivirt; - //Vc - container::Tensor Vc(DAT::DT_DOUBLE, DEV::CpuDevice, { pVc.get_col_size(), pVc.get_row_size() });//row is "inside"(memory contiguity) for pblas - Vc.zero(); + Parallel_2D pVc; // for intermediate Vc + LR_Util::setup_2d_division(pVc, pmat_ao.get_block_size(), naos, nmo1, pmat_ao.blacs_ctxt); + for (int isk = 0; isk < nks; ++isk) + { + const int start = isk * pmat_mo.get_local_size(); + coeff.fix_k(isk); - char transa = 'N'; - char transb = 'N'; - const double alpha = 1.0; - const double beta = add_on ? 1.0 : 0.0; - pdgemm_(&transa, &transb, &naos, &nmo1, &naos, - &alpha, mat_ao[isk].data(), &i1, &i1, pmat_ao.desc, - coeff.get_pointer(), &i1, &imo1, pcoeff.desc, - &beta, Vc.data(), &i1, &i1, pVc.desc); + // Vc + container::Tensor Vc(DAT::DT_DOUBLE, + DEV::CpuDevice, + {pVc.get_col_size(), pVc.get_row_size()}); // row is "inside"(memory contiguity) for pblas + Vc.zero(); - transa = 'T'; - // mat_mo = c ^ TVc - // descC puts M(nvirt) to row - pdgemm_(&transa, &transb, &nmo2, &nmo1, &naos, - &alpha, coeff.get_pointer(), &i1, &imo2, pcoeff.desc, - Vc.data(), &i1, &i1, pVc.desc, - &beta, mat_mo + start, &i1, &i1, pmat_mo.desc); + char transa = 'N'; + char transb = 'N'; + const double alpha = 1.0; + const double beta = add_on ? 1.0 : 0.0; + pdgemm_(&transa, + &transb, + &naos, + &nmo1, + &naos, + &alpha, + mat_ao[isk].data(), + &i1, + &i1, + pmat_ao.desc, + coeff.get_pointer(), + &i1, + &imo1, + pcoeff.desc, + &beta, + Vc.data(), + &i1, + &i1, + pVc.desc); - } + transa = 'T'; + // mat_mo = c ^ TVc + // descC puts M(nvirt) to row + pdgemm_(&transa, + &transb, + &nmo2, + &nmo1, + &naos, + &alpha, + coeff.get_pointer(), + &i1, + &imo2, + pcoeff.desc, + Vc.data(), + &i1, + &i1, + pVc.desc, + &beta, + mat_mo + start, + &i1, + &i1, + pmat_mo.desc); } +} - template<> - void ao_to_mo_pblas( - const std::vector& mat_ao, - const Parallel_2D& pmat_ao, - const psi::Psi>& coeff, - const Parallel_2D& pcoeff, - const int& naos, - const int& nocc, - const int& nvirt, - const Parallel_2D& pmat_mo, - std::complex* const mat_mo, - const bool add_on, - const MO_TYPE type) - { - ModuleBase::TITLE("hamilt_lrtd", "cal_AX_plas"); - assert(pmat_ao.comm() == pcoeff.comm() && pmat_ao.comm() == pmat_mo.comm()); - assert(pmat_ao.blacs_ctxt == pcoeff.blacs_ctxt && pmat_ao.blacs_ctxt == pmat_mo.blacs_ctxt); - assert(pmat_mo.get_local_size() > 0); +template <> +void ao_to_mo_pblas(const std::vector& mat_ao, + const Parallel_2D& pmat_ao, + const psi::Psi>& coeff, + const Parallel_2D& pcoeff, + const int& naos, + const int& nocc, + const int& nvirt, + const Parallel_2D& pmat_mo, + std::complex* const mat_mo, + const bool add_on, + const MO_TYPE type) +{ + ModuleBase::TITLE("hamilt_lrtd", "cal_AX_plas"); + assert(pmat_ao.comm() == pcoeff.comm() && pmat_ao.comm() == pmat_mo.comm()); + assert(pmat_ao.blacs_ctxt == pcoeff.blacs_ctxt && pmat_ao.blacs_ctxt == pmat_mo.blacs_ctxt); + assert(pmat_mo.get_local_size() > 0); - const int nks = mat_ao.size(); - const int i1 = 1; - const int ivirt = nocc + 1; - const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; - const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; - const int imo1 = type == MO_TYPE::VV ? ivirt : i1; - const int imo2 = type == MO_TYPE::OO ? i1 : ivirt; + const int nks = mat_ao.size(); + const int i1 = 1; + const int ivirt = nocc + 1; + const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; + const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; + const int imo1 = type == MO_TYPE::VV ? ivirt : i1; + const int imo2 = type == MO_TYPE::OO ? i1 : ivirt; - Parallel_2D pVc; // for intermediate Vc - LR_Util::setup_2d_division(pVc, pmat_ao.get_block_size(), naos, nmo1, pmat_ao.blacs_ctxt); - for (int isk = 0;isk < nks;++isk) - { - const int start = isk * pmat_mo.get_local_size(); - coeff.fix_k(isk); + Parallel_2D pVc; // for intermediate Vc + LR_Util::setup_2d_division(pVc, pmat_ao.get_block_size(), naos, nmo1, pmat_ao.blacs_ctxt); + for (int isk = 0; isk < nks; ++isk) + { + const int start = isk * pmat_mo.get_local_size(); + coeff.fix_k(isk); - //Vc - container::Tensor Vc(DAT::DT_COMPLEX_DOUBLE, DEV::CpuDevice, { pVc.get_col_size(), pVc.get_row_size() }); - Vc.zero(); + // Vc + container::Tensor Vc(DAT::DT_COMPLEX_DOUBLE, DEV::CpuDevice, {pVc.get_col_size(), pVc.get_row_size()}); + Vc.zero(); - char transa = 'N'; - char transb = 'N'; - const std::complex alpha(1.0, 0.0); - const std::complex beta = add_on ? std::complex(1.0, 0.0) : std::complex(0.0, 0.0); - pzgemm_(&transa, &transb, &naos, &nmo1, &naos, - &alpha, mat_ao[isk].data>(), &i1, &i1, pmat_ao.desc, - coeff.get_pointer(), &i1, &imo1, pcoeff.desc, - &beta, Vc.data>(), &i1, &i1, pVc.desc); + char transa = 'N'; + char transb = 'N'; + const std::complex alpha(1.0, 0.0); + const std::complex beta = add_on ? std::complex(1.0, 0.0) : std::complex(0.0, 0.0); + pzgemm_(&transa, + &transb, + &naos, + &nmo1, + &naos, + &alpha, + mat_ao[isk].data>(), + &i1, + &i1, + pmat_ao.desc, + coeff.get_pointer(), + &i1, + &imo1, + pcoeff.desc, + &beta, + Vc.data>(), + &i1, + &i1, + pVc.desc); - transa = 'C'; - // mat_mo = c ^ TVc - // descC puts M(nvirt) to row - pzgemm_(&transa, &transb, &nmo2, &nmo1, &naos, - &alpha, coeff.get_pointer(), &i1, &imo2, pcoeff.desc, - Vc.data>(), &i1, &i1, pVc.desc, - &beta, mat_mo + start, &i1, &i1, pmat_mo.desc); - } + transa = 'C'; + // mat_mo = c ^ TVc + // descC puts M(nvirt) to row + pzgemm_(&transa, + &transb, + &nmo2, + &nmo1, + &naos, + &alpha, + coeff.get_pointer(), + &i1, + &imo2, + pcoeff.desc, + Vc.data>(), + &i1, + &i1, + pVc.desc, + &beta, + mat_mo + start, + &i1, + &i1, + pmat_mo.desc); } } +} // namespace LR #endif diff --git a/source/module_lr/ao_to_mo_transformer/ao_to_mo_serial.cpp b/source/module_lr/ao_to_mo_transformer/ao_to_mo_serial.cpp index 04573381a7..4f6c878eb6 100644 --- a/source/module_lr/ao_to_mo_transformer/ao_to_mo_serial.cpp +++ b/source/module_lr/ao_to_mo_transformer/ao_to_mo_serial.cpp @@ -1,165 +1,204 @@ #include "ao_to_mo.h" -#include "module_base/blas_connector.h" -#include "module_base/tool_title.h" #include "module_lr/utils/lr_util.h" +#include "source_base/blas_connector.h" +#include "source_base/tool_title.h" namespace LR { - template<> - void ao_to_mo_forloop_serial( - const std::vector& mat_ao, - const psi::Psi& coeff, - const int& nocc, - const int& nvirt, - double* mat_mo, - const MO_TYPE type) - { - ModuleBase::TITLE("hamilt_lrtd", "ao_to_mo_forloop_serial"); - const int nks = mat_ao.size(); - const int naos = coeff.get_nbasis(); - const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; - const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; - const int imo1 = type == MO_TYPE::VV ? nocc : 0; - const int imo2 = type == MO_TYPE::OO ? 0 : nocc; +template <> +void ao_to_mo_forloop_serial(const std::vector& mat_ao, + const psi::Psi& coeff, + const int& nocc, + const int& nvirt, + double* mat_mo, + const MO_TYPE type) +{ + ModuleBase::TITLE("hamilt_lrtd", "ao_to_mo_forloop_serial"); + const int nks = mat_ao.size(); + const int naos = coeff.get_nbasis(); + const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; + const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; + const int imo1 = type == MO_TYPE::VV ? nocc : 0; + const int imo2 = type == MO_TYPE::OO ? 0 : nocc; - ModuleBase::GlobalFunc::ZEROS(mat_mo, nks * nmo1 * nmo2); + ModuleBase::GlobalFunc::ZEROS(mat_mo, nks * nmo1 * nmo2); - for (int isk = 0;isk < nks;++isk) + for (int isk = 0; isk < nks; ++isk) + { + coeff.fix_k(isk); + const int start = isk * nmo1 * nmo2; + for (int p = 0; p < nmo1; ++p) { - coeff.fix_k(isk); - const int start = isk * nmo1 * nmo2; - for (int p = 0;p < nmo1;++p) + for (int q = 0; q < nmo2; ++q) { - for (int q = 0;q < nmo2;++q) + for (int nu = 0; nu < naos; ++nu) { - for (int nu = 0;nu < naos;++nu) + for (int mu = 0; mu < naos; ++mu) { - for (int mu = 0;mu < naos;++mu) - { - mat_mo[start + p * nmo2 + q] += coeff(imo2 + q, mu) * mat_ao[isk].data()[nu * naos + mu] * coeff(imo1 + p, nu); - } + mat_mo[start + p * nmo2 + q] + += coeff(imo2 + q, mu) * mat_ao[isk].data()[nu * naos + mu] * coeff(imo1 + p, nu); } } } } } - template<> - void ao_to_mo_forloop_serial( - const std::vector& mat_ao, - const psi::Psi>& coeff, - const int& nocc, - const int& nvirt, - std::complex* const mat_mo, - const MO_TYPE type) - { - ModuleBase::TITLE("hamilt_lrtd", "ao_to_mo_forloop_serial"); - const int nks = mat_ao.size(); - const int naos = coeff.get_nbasis(); - const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; - const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; - const int imo1 = type == MO_TYPE::VV ? nocc : 0; - const int imo2 = type == MO_TYPE::OO ? 0 : nocc; +} +template <> +void ao_to_mo_forloop_serial(const std::vector& mat_ao, + const psi::Psi>& coeff, + const int& nocc, + const int& nvirt, + std::complex* const mat_mo, + const MO_TYPE type) +{ + ModuleBase::TITLE("hamilt_lrtd", "ao_to_mo_forloop_serial"); + const int nks = mat_ao.size(); + const int naos = coeff.get_nbasis(); + const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; + const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; + const int imo1 = type == MO_TYPE::VV ? nocc : 0; + const int imo2 = type == MO_TYPE::OO ? 0 : nocc; - ModuleBase::GlobalFunc::ZEROS(mat_mo, nks * nmo1 * nmo2); + ModuleBase::GlobalFunc::ZEROS(mat_mo, nks * nmo1 * nmo2); - for (int isk = 0;isk < nks;++isk) + for (int isk = 0; isk < nks; ++isk) + { + coeff.fix_k(isk); + const int start = isk * nmo1 * nmo2; + for (int p = 0; p < nmo1; ++p) { - coeff.fix_k(isk); - const int start = isk * nmo1 * nmo2; - for (int p = 0;p < nmo1;++p) + for (int q = 0; q < nmo2; ++q) { - for (int q = 0;q < nmo2;++q) + for (int nu = 0; nu < naos; ++nu) { - for (int nu = 0;nu < naos;++nu) + for (int mu = 0; mu < naos; ++mu) { - for (int mu = 0;mu < naos;++mu) - { - mat_mo[start + p * nmo2 + q] += std::conj(coeff(imo2 + q, mu)) * mat_ao[isk].data>()[nu * naos + mu] * coeff(imo1 + p, nu); - } + mat_mo[start + p * nmo2 + q] += std::conj(coeff(imo2 + q, mu)) + * mat_ao[isk].data>()[nu * naos + mu] + * coeff(imo1 + p, nu); } } } } } - template<> - void ao_to_mo_blas( - const std::vector& mat_ao, - const psi::Psi& coeff, - const int& nocc, - const int& nvirt, - double* mat_mo, - const bool add_on, - const MO_TYPE type) - { - ModuleBase::TITLE("hamilt_lrtd", "ao_to_mo_blas"); - const int nks = mat_ao.size(); - const int naos = coeff.get_nbasis(); - const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; - const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; - const int imo1 = type == MO_TYPE::VV ? nocc : 0; - const int imo2 = type == MO_TYPE::OO ? 0 : nocc; +} +template <> +void ao_to_mo_blas(const std::vector& mat_ao, + const psi::Psi& coeff, + const int& nocc, + const int& nvirt, + double* mat_mo, + const bool add_on, + const MO_TYPE type) +{ + ModuleBase::TITLE("hamilt_lrtd", "ao_to_mo_blas"); + const int nks = mat_ao.size(); + const int naos = coeff.get_nbasis(); + const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; + const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; + const int imo1 = type == MO_TYPE::VV ? nocc : 0; + const int imo2 = type == MO_TYPE::OO ? 0 : nocc; - for (int isk = 0;isk < nks;++isk) - { - coeff.fix_k(isk); - const int start = isk * nmo1 * nmo2; + for (int isk = 0; isk < nks; ++isk) + { + coeff.fix_k(isk); + const int start = isk * nmo1 * nmo2; - // Vc[naos*nocc] - container::Tensor Vc(DAT::DT_DOUBLE, DEV::CpuDevice, { nmo1, naos });// (Vc)^T - Vc.zero(); - char transa = 'N'; - char transb = 'N'; //coeff is col major - const double alpha = 1.0; - const double beta = add_on ? 1.0 : 0.0; - dgemm_(&transa, &transb, &naos, &nmo1, &naos, &alpha, - mat_ao[isk].data(), &naos, coeff.get_pointer(imo1), &naos, &beta, - Vc.data(), &naos); + // Vc[naos*nocc] + container::Tensor Vc(DAT::DT_DOUBLE, DEV::CpuDevice, {nmo1, naos}); // (Vc)^T + Vc.zero(); + char transa = 'N'; + char transb = 'N'; // coeff is col major + const double alpha = 1.0; + const double beta = add_on ? 1.0 : 0.0; + dgemm_(&transa, + &transb, + &naos, + &nmo1, + &naos, + &alpha, + mat_ao[isk].data(), + &naos, + coeff.get_pointer(imo1), + &naos, + &beta, + Vc.data(), + &naos); - transa = 'T'; - //mat_mo=coeff^TVc (nvirt major) - dgemm_(&transa, &transb, &nmo2, &nmo1, &naos, &alpha, - coeff.get_pointer(imo2), &naos, Vc.data(), &naos, &beta, - mat_mo + start, &nmo2); - } + transa = 'T'; + // mat_mo=coeff^TVc (nvirt major) + dgemm_(&transa, + &transb, + &nmo2, + &nmo1, + &naos, + &alpha, + coeff.get_pointer(imo2), + &naos, + Vc.data(), + &naos, + &beta, + mat_mo + start, + &nmo2); } - template<> - void ao_to_mo_blas( - const std::vector& mat_ao, - const psi::Psi>& coeff, - const int& nocc, - const int& nvirt, - std::complex* const mat_mo, - const bool add_on, - const MO_TYPE type) - { - ModuleBase::TITLE("hamilt_lrtd", "ao_to_mo_blas"); - const int nks = mat_ao.size(); - const int naos = coeff.get_nbasis(); - const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; - const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; - const int imo1 = type == MO_TYPE::VV ? nocc : 0; - const int imo2 = type == MO_TYPE::OO ? 0 : nocc; +} +template <> +void ao_to_mo_blas(const std::vector& mat_ao, + const psi::Psi>& coeff, + const int& nocc, + const int& nvirt, + std::complex* const mat_mo, + const bool add_on, + const MO_TYPE type) +{ + ModuleBase::TITLE("hamilt_lrtd", "ao_to_mo_blas"); + const int nks = mat_ao.size(); + const int naos = coeff.get_nbasis(); + const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; + const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; + const int imo1 = type == MO_TYPE::VV ? nocc : 0; + const int imo2 = type == MO_TYPE::OO ? 0 : nocc; - for (int isk = 0;isk < nks;++isk) - { - coeff.fix_k(isk); - const int start = isk * nmo1 * nmo2; + for (int isk = 0; isk < nks; ++isk) + { + coeff.fix_k(isk); + const int start = isk * nmo1 * nmo2; - // Vc[naos*nocc] (V is hermitian) - container::Tensor Vc(DAT::DT_COMPLEX_DOUBLE, DEV::CpuDevice, { nmo1, naos });// (Vc)^T - Vc.zero(); - char transa = 'N'; - char transb = 'N'; //coeff is col major - const std::complex alpha(1.0, 0.0); - const std::complex beta = add_on ? std::complex(1.0, 0.0) : std::complex(0.0, 0.0); - zgemm_(&transa, &transb, &naos, &nmo1, &naos, &alpha, - mat_ao[isk].data>(), &naos, coeff.get_pointer(imo1), &naos, &beta, - Vc.data>(), &naos); + // Vc[naos*nocc] (V is hermitian) + container::Tensor Vc(DAT::DT_COMPLEX_DOUBLE, DEV::CpuDevice, {nmo1, naos}); // (Vc)^T + Vc.zero(); + char transa = 'N'; + char transb = 'N'; // coeff is col major + const std::complex alpha(1.0, 0.0); + const std::complex beta = add_on ? std::complex(1.0, 0.0) : std::complex(0.0, 0.0); + zgemm_(&transa, + &transb, + &naos, + &nmo1, + &naos, + &alpha, + mat_ao[isk].data>(), + &naos, + coeff.get_pointer(imo1), + &naos, + &beta, + Vc.data>(), + &naos); - transa = 'C'; - //mat_mo=coeff^\dagger Vc (nvirt major) - zgemm_(&transa, &transb, &nmo2, &nmo1, &naos, &alpha, - coeff.get_pointer(imo2), &naos, Vc.data>(), &naos, &beta, - mat_mo + start, &nmo2); - } + transa = 'C'; + // mat_mo=coeff^\dagger Vc (nvirt major) + zgemm_(&transa, + &transb, + &nmo2, + &nmo1, + &naos, + &alpha, + coeff.get_pointer(imo2), + &naos, + Vc.data>(), + &naos, + &beta, + mat_mo + start, + &nmo2); } -} \ No newline at end of file +} +} // namespace LR \ No newline at end of file diff --git a/source/module_lr/dm_trans/dm_trans.h b/source/module_lr/dm_trans/dm_trans.h index a02f2999d0..30f1288795 100644 --- a/source/module_lr/dm_trans/dm_trans.h +++ b/source/module_lr/dm_trans/dm_trans.h @@ -1,52 +1,57 @@ #pragma once // use tensor or basematrix in the future -#include #include "module_psi/psi.h" + +#include #include #ifdef __MPI -#include "module_base/parallel_2d.h" +#include "source_base/parallel_2d.h" #endif namespace LR { #ifndef MO_TYPE_H #define MO_TYPE_H - enum MO_TYPE { OO, VO, VV }; +enum MO_TYPE +{ + OO, + VO, + VV +}; #endif #ifdef __MPI /// @brief calculate the 2d-block transition density matrix in AO basis using p?gemm /// \f[ \tilde{\rho}_{\mu_j\mu_b}=\sum_{jb}c_{j,\mu_j}X_{jb}c^*_{b,\mu_b} \f] - template - std::vector cal_dm_trans_pblas( - const T* const X_istate, - const Parallel_2D& px, - const psi::Psi& c, - const Parallel_2D& pc, - const int naos, - const int nocc, - const int nvirt, - const Parallel_2D& pmat, - const T factor = (T)1.0, - const MO_TYPE type = MO_TYPE::VO); +template +std::vector cal_dm_trans_pblas(const T* const X_istate, + const Parallel_2D& px, + const psi::Psi& c, + const Parallel_2D& pc, + const int naos, + const int nocc, + const int nvirt, + const Parallel_2D& pmat, + const T factor = (T)1.0, + const MO_TYPE type = MO_TYPE::VO); #endif - /// @brief calculate the 2d-block transition density matrix in AO basis using ?gemm - template - std::vector cal_dm_trans_blas( - const T* const X_istate, - const psi::Psi& c, - const int& nocc, const int& nvirt, - const T factor = (T)1.0, - const MO_TYPE type = MO_TYPE::VO); +/// @brief calculate the 2d-block transition density matrix in AO basis using ?gemm +template +std::vector cal_dm_trans_blas(const T* const X_istate, + const psi::Psi& c, + const int& nocc, + const int& nvirt, + const T factor = (T)1.0, + const MO_TYPE type = MO_TYPE::VO); - // for test - /// @brief calculate the 2d-block transition density matrix in AO basis using for loop (for test) - template - std::vector cal_dm_trans_forloop_serial( - const T* const X_istate, - const psi::Psi& c, - const int& nocc, const int& nvirt, - const T factor = (T)1.0, - const MO_TYPE type = MO_TYPE::VO); -} \ No newline at end of file +// for test +/// @brief calculate the 2d-block transition density matrix in AO basis using for loop (for test) +template +std::vector cal_dm_trans_forloop_serial(const T* const X_istate, + const psi::Psi& c, + const int& nocc, + const int& nvirt, + const T factor = (T)1.0, + const MO_TYPE type = MO_TYPE::VO); +} // namespace LR \ No newline at end of file diff --git a/source/module_lr/dm_trans/dm_trans_parallel.cpp b/source/module_lr/dm_trans/dm_trans_parallel.cpp index 861a8f8ceb..ccb8610cb4 100644 --- a/source/module_lr/dm_trans/dm_trans_parallel.cpp +++ b/source/module_lr/dm_trans/dm_trans_parallel.cpp @@ -1,25 +1,25 @@ #ifdef __MPI #include "dm_trans.h" -#include "module_base/scalapack_connector.h" -#include "module_base/tool_title.h" #include "module_lr/utils/lr_util.h" +#include "source_base/scalapack_connector.h" +#include "source_base/tool_title.h" namespace LR { - //output: col first, consistent with blas - // c: nao*nbands in para2d, nbands*nao in psi (row-para and constructed: nao) - // X: nvirt*nocc in para2d, nocc*nvirt in psi (row-para and constructed: nvirt) +// output: col first, consistent with blas +// c: nao*nbands in para2d, nbands*nao in psi (row-para and constructed: nao) +// X: nvirt*nocc in para2d, nocc*nvirt in psi (row-para and constructed: nvirt) template <> std::vector cal_dm_trans_pblas(const double* const X_istate, - const Parallel_2D& px, - const psi::Psi& c, - const Parallel_2D& pc, - const int naos, - const int nocc, - const int nvirt, - const Parallel_2D& pmat, - const double factor, - const MO_TYPE type) + const Parallel_2D& px, + const psi::Psi& c, + const Parallel_2D& pc, + const int naos, + const int nocc, + const int nvirt, + const Parallel_2D& pmat, + const double factor, + const MO_TYPE type) { ModuleBase::TITLE("hamilt_lrtd", "cal_dm_trans_pblas"); assert(px.comm() == pc.comm() && px.comm() == pmat.comm()); @@ -34,8 +34,9 @@ std::vector cal_dm_trans_pblas(const double* const X_istate, const int imo1 = type == MO_TYPE::VV ? ivirt : i1; const int imo2 = type == MO_TYPE::OO ? i1 : ivirt; - std::vector dm_trans(nks, - container::Tensor(DAT::DT_DOUBLE, DEV::CpuDevice, { pmat.get_col_size(), pmat.get_row_size() })); + std::vector dm_trans( + nks, + container::Tensor(DAT::DT_DOUBLE, DEV::CpuDevice, {pmat.get_col_size(), pmat.get_row_size()})); for (int isk = 0; isk < nks; ++isk) { c.fix_k(isk); @@ -53,30 +54,60 @@ std::vector cal_dm_trans_pblas(const double* const X_istate, DEV::CpuDevice, {pXc.get_col_size(), pXc.get_row_size()}); // row is "inside"(memory contiguity) for pblas Xc.zero(); - pdgemm_(&transa, &transb, &naos, &nmo2, &nmo1, - &alpha, c.get_pointer(), &i1, &imo1, pc.desc, - X_istate + x_start, &i1, &i1, px.desc, - &beta, Xc.data(), &i1, &i1, pXc.desc); + pdgemm_(&transa, + &transb, + &naos, + &nmo2, + &nmo1, + &alpha, + c.get_pointer(), + &i1, + &imo1, + pc.desc, + X_istate + x_start, + &i1, + &i1, + px.desc, + &beta, + Xc.data(), + &i1, + &i1, + pXc.desc); // 2. C_virt*[X*C_occ^T] - pdgemm_(&transa, &transb, &naos, &naos, &nmo2, - &factor, c.get_pointer(), &i1, &imo2, pc.desc, - Xc.data(), &i1, &i1, pXc.desc, - &beta, dm_trans[isk].data(), &i1, &i1, pmat.desc); + pdgemm_(&transa, + &transb, + &naos, + &naos, + &nmo2, + &factor, + c.get_pointer(), + &i1, + &imo2, + pc.desc, + Xc.data(), + &i1, + &i1, + pXc.desc, + &beta, + dm_trans[isk].data(), + &i1, + &i1, + pmat.desc); } return dm_trans; } template <> std::vector cal_dm_trans_pblas(const std::complex* const X_istate, - const Parallel_2D& px, - const psi::Psi>& c, - const Parallel_2D& pc, - const int naos, - const int nocc, - const int nvirt, - const Parallel_2D& pmat, - const std::complex factor, - const MO_TYPE type) + const Parallel_2D& px, + const psi::Psi>& c, + const Parallel_2D& pc, + const int naos, + const int nocc, + const int nvirt, + const Parallel_2D& pmat, + const std::complex factor, + const MO_TYPE type) { ModuleBase::TITLE("hamilt_lrtd", "cal_dm_trans_pblas"); assert(px.comm() == pc.comm() && px.comm() == pmat.comm()); @@ -90,7 +121,8 @@ std::vector cal_dm_trans_pblas(const std::complex* co const int imo1 = type == MO_TYPE::VV ? ivirt : i1; const int imo2 = type == MO_TYPE::OO ? i1 : ivirt; - std::vector dm_trans(nks, + std::vector dm_trans( + nks, container::Tensor(DAT::DT_COMPLEX_DOUBLE, DEV::CpuDevice, {pmat.get_col_size(), pmat.get_row_size()})); for (int isk = 0; isk < nks; ++isk) { @@ -130,19 +162,49 @@ std::vector cal_dm_trans_pblas(const std::complex* co Xc.zero(); const std::complex alpha(1.0, 0.0); const std::complex beta(0.0, 0.0); - pzgemm_(&transa, &transb, &nmo2, &naos, &nmo1, &alpha, - X_istate + x_start, &i1, &i1, px.desc, - c.get_pointer(), &i1, &imo1, pc.desc, - &beta, Xc.data>(), &i1, &i1, pXc.desc); + pzgemm_(&transa, + &transb, + &nmo2, + &naos, + &nmo1, + &alpha, + X_istate + x_start, + &i1, + &i1, + px.desc, + c.get_pointer(), + &i1, + &imo1, + pc.desc, + &beta, + Xc.data>(), + &i1, + &i1, + pXc.desc); // 2. [X*C_occ^\dagger]^TC_virt^T transa = transb = 'T'; - pzgemm_(&transa, &transb, &naos, &naos, &nmo2, - &factor, Xc.data>(), &i1, &i1, pXc.desc, - c.get_pointer(), &i1, &imo2, pc.desc, - &beta, dm_trans[isk].data>(), &i1, &i1, pmat.desc); + pzgemm_(&transa, + &transb, + &naos, + &naos, + &nmo2, + &factor, + Xc.data>(), + &i1, + &i1, + pXc.desc, + c.get_pointer(), + &i1, + &imo2, + pc.desc, + &beta, + dm_trans[isk].data>(), + &i1, + &i1, + pmat.desc); } return dm_trans; } -} +} // namespace LR #endif diff --git a/source/module_lr/dm_trans/dm_trans_serial.cpp b/source/module_lr/dm_trans/dm_trans_serial.cpp index cf3571bfc3..f4982db05f 100644 --- a/source/module_lr/dm_trans/dm_trans_serial.cpp +++ b/source/module_lr/dm_trans/dm_trans_serial.cpp @@ -1,181 +1,224 @@ #include "dm_trans.h" -#include "module_base/blas_connector.h" -#include "module_base/tool_title.h" -#include "module_base/global_function.h" #include "module_lr/utils/lr_util.h" +#include "source_base/blas_connector.h" +#include "source_base/global_function.h" +#include "source_base/tool_title.h" namespace LR { - template<> std::vector cal_dm_trans_forloop_serial( - const double* const X_istate, - const psi::Psi& c, - const int& nocc, - const int& nvirt, - const double factor, - const MO_TYPE type) - { - // cxc_out_test(X_istate, c); - ModuleBase::TITLE("hamilt_lrtd", "cal_dm_trans_forloop"); - const int nks = c.get_nk(); - const int imo1 = type == MO_TYPE::VV ? nocc : 0; - const int imo2 = type == MO_TYPE::OO ? 0 : nocc; - const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; - const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; +template <> +std::vector cal_dm_trans_forloop_serial(const double* const X_istate, + const psi::Psi& c, + const int& nocc, + const int& nvirt, + const double factor, + const MO_TYPE type) +{ + // cxc_out_test(X_istate, c); + ModuleBase::TITLE("hamilt_lrtd", "cal_dm_trans_forloop"); + const int nks = c.get_nk(); + const int imo1 = type == MO_TYPE::VV ? nocc : 0; + const int imo2 = type == MO_TYPE::OO ? 0 : nocc; + const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; + const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; - const int naos = c.get_nbasis(); - std::vector dm_trans(nks, container::Tensor(DAT::DT_DOUBLE, DEV::CpuDevice, { naos, naos })); - for (auto& dm : dm_trans)ModuleBase::GlobalFunc::ZEROS(dm.data(), naos * naos); - // loop for AOs - for (size_t isk = 0;isk < nks;++isk) + const int naos = c.get_nbasis(); + std::vector dm_trans(nks, container::Tensor(DAT::DT_DOUBLE, DEV::CpuDevice, {naos, naos})); + for (auto& dm: dm_trans) + ModuleBase::GlobalFunc::ZEROS(dm.data(), naos * naos); + // loop for AOs + for (size_t isk = 0; isk < nks; ++isk) + { + c.fix_k(isk); + const int x_start = isk * nmo1 * nmo2; + for (size_t mu = 0; mu < naos; ++mu) { - c.fix_k(isk); - const int x_start = isk * nmo1 * nmo2; - for (size_t mu = 0;mu < naos;++mu) + for (size_t nu = 0; nu < naos; ++nu) { - for (size_t nu = 0;nu < naos;++nu) + // loop for ks states + for (size_t p = 0; p < nmo1; ++p) { - // loop for ks states - for (size_t p = 0;p < nmo1;++p) - { - for (size_t q = 0; q < nmo2;++q) - dm_trans[isk].data()[mu * naos + nu] += c(imo1 + p, mu) * X_istate[x_start + p * nmo2 + q] * c(imo2 + q, nu) * factor; - } + for (size_t q = 0; q < nmo2; ++q) + dm_trans[isk].data()[mu * naos + nu] + += c(imo1 + p, mu) * X_istate[x_start + p * nmo2 + q] * c(imo2 + q, nu) * factor; } } } - return dm_trans; } + return dm_trans; +} - template<> std::vector cal_dm_trans_forloop_serial( - const std::complex* const X_istate, - const psi::Psi>& c, - const int& nocc, - const int& nvirt, - const std::complex factor, - const MO_TYPE type) +template <> +std::vector cal_dm_trans_forloop_serial(const std::complex* const X_istate, + const psi::Psi>& c, + const int& nocc, + const int& nvirt, + const std::complex factor, + const MO_TYPE type) +{ + // cxc_out_test(X_istate, c); + ModuleBase::TITLE("hamilt_lrtd", "cal_dm_trans_forloop"); + const int nks = c.get_nk(); + const int naos = c.get_nbasis(); + const int imo1 = type == MO_TYPE::VV ? nocc : 0; + const int imo2 = type == MO_TYPE::OO ? 0 : nocc; + const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; + const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; + std::vector dm_trans(nks, + container::Tensor(DAT::DT_COMPLEX_DOUBLE, DEV::CpuDevice, {naos, naos})); + for (auto& dm: dm_trans) + ModuleBase::GlobalFunc::ZEROS(dm.data>(), naos * naos); + // loop for AOs + for (size_t isk = 0; isk < nks; ++isk) { - // cxc_out_test(X_istate, c); - ModuleBase::TITLE("hamilt_lrtd", "cal_dm_trans_forloop"); - const int nks = c.get_nk(); - const int naos = c.get_nbasis(); - const int imo1 = type == MO_TYPE::VV ? nocc : 0; - const int imo2 = type == MO_TYPE::OO ? 0 : nocc; - const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; - const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; - std::vector dm_trans(nks, container::Tensor(DAT::DT_COMPLEX_DOUBLE, DEV::CpuDevice, { naos, naos })); - for (auto& dm : dm_trans)ModuleBase::GlobalFunc::ZEROS(dm.data>(), naos * naos); - // loop for AOs - for (size_t isk = 0;isk < nks;++isk) + c.fix_k(isk); + const int x_start = isk * nmo1 * nmo2; + for (size_t mu = 0; mu < naos; ++mu) { - c.fix_k(isk); - const int x_start = isk * nmo1 * nmo2; - for (size_t mu = 0;mu < naos;++mu) + for (size_t nu = 0; nu < naos; ++nu) { - for (size_t nu = 0;nu < naos;++nu) + // loop for ks states + for (size_t p = 0; p < nmo1; ++p) { - // loop for ks states - for (size_t p = 0;p < nmo1;++p) - { - for (size_t q = 0; q < nmo2;++q) - dm_trans[isk].data>()[nu * naos + mu] += - std::conj(c(imo1 + p, mu)) * X_istate[x_start + p * nmo2 + q] * c(imo2 + q, nu) * factor; - } + for (size_t q = 0; q < nmo2; ++q) + dm_trans[isk].data>()[nu * naos + mu] + += std::conj(c(imo1 + p, mu)) * X_istate[x_start + p * nmo2 + q] * c(imo2 + q, nu) * factor; } } } - return dm_trans; } + return dm_trans; +} - - template<> std::vector cal_dm_trans_blas( - const double* const X_istate, - const psi::Psi& c, - const int& nocc, - const int& nvirt, - const double factor, - const MO_TYPE type) +template <> +std::vector cal_dm_trans_blas(const double* const X_istate, + const psi::Psi& c, + const int& nocc, + const int& nvirt, + const double factor, + const MO_TYPE type) +{ + ModuleBase::TITLE("hamilt_lrtd", "cal_dm_trans_blas"); + const int nks = c.get_nk(); + const int naos = c.get_nbasis(); + const int imo1 = type == MO_TYPE::VV ? nocc : 0; + const int imo2 = type == MO_TYPE::OO ? 0 : nocc; + const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; + const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; + std::vector dm_trans(nks, container::Tensor(DAT::DT_DOUBLE, DEV::CpuDevice, {naos, naos})); + for (size_t isk = 0; isk < nks; ++isk) { - ModuleBase::TITLE("hamilt_lrtd", "cal_dm_trans_blas"); - const int nks = c.get_nk(); - const int naos = c.get_nbasis(); - const int imo1 = type == MO_TYPE::VV ? nocc : 0; - const int imo2 = type == MO_TYPE::OO ? 0 : nocc; - const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; - const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; - std::vector dm_trans(nks, container::Tensor(DAT::DT_DOUBLE, DEV::CpuDevice, { naos, naos })); - for (size_t isk = 0;isk < nks;++isk) - { - c.fix_k(isk); - const int x_start = isk * nmo1 * nmo2; - // 1. [X*C_occ^T]^T=C_occ*X^T - char transa = 'N'; - char transb = 'T'; - const double alpha = 1.0; - const double beta = 0.0; - container::Tensor Xc(DAT::DT_DOUBLE, DEV::CpuDevice, { nmo2, naos }); - dgemm_(&transa, &transb, &naos, &nmo2, &nmo1, &alpha, - c.get_pointer(imo1), &naos, X_istate + x_start, &nmo2, - &beta, Xc.data(), &naos); - // 2. C_virt*[X*C_occ^T] - dgemm_(&transa, &transb, &naos, &naos, &nmo2, &factor, - c.get_pointer(imo2), &naos, Xc.data(), &naos, &beta, - dm_trans[isk].data(), &naos); - } - return dm_trans; + c.fix_k(isk); + const int x_start = isk * nmo1 * nmo2; + // 1. [X*C_occ^T]^T=C_occ*X^T + char transa = 'N'; + char transb = 'T'; + const double alpha = 1.0; + const double beta = 0.0; + container::Tensor Xc(DAT::DT_DOUBLE, DEV::CpuDevice, {nmo2, naos}); + dgemm_(&transa, + &transb, + &naos, + &nmo2, + &nmo1, + &alpha, + c.get_pointer(imo1), + &naos, + X_istate + x_start, + &nmo2, + &beta, + Xc.data(), + &naos); + // 2. C_virt*[X*C_occ^T] + dgemm_(&transa, + &transb, + &naos, + &naos, + &nmo2, + &factor, + c.get_pointer(imo2), + &naos, + Xc.data(), + &naos, + &beta, + dm_trans[isk].data(), + &naos); } + return dm_trans; +} - - template<> std::vector cal_dm_trans_blas( - const std::complex* const X_istate, - const psi::Psi>& c, - const int& nocc, - const int& nvirt, - const std::complex factor, - const MO_TYPE type) +template <> +std::vector cal_dm_trans_blas(const std::complex* const X_istate, + const psi::Psi>& c, + const int& nocc, + const int& nvirt, + const std::complex factor, + const MO_TYPE type) +{ + ModuleBase::TITLE("hamilt_lrtd", "cal_dm_trans_blas"); + const int nks = c.get_nk(); + const int naos = c.get_nbasis(); + const int imo1 = type == MO_TYPE::VV ? nocc : 0; + const int imo2 = type == MO_TYPE::OO ? 0 : nocc; + const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; + const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; + std::vector dm_trans(nks, + container::Tensor(DAT::DT_COMPLEX_DOUBLE, DEV::CpuDevice, {naos, naos})); + for (size_t isk = 0; isk < nks; ++isk) { - ModuleBase::TITLE("hamilt_lrtd", "cal_dm_trans_blas"); - const int nks = c.get_nk(); - const int naos = c.get_nbasis(); - const int imo1 = type == MO_TYPE::VV ? nocc : 0; - const int imo2 = type == MO_TYPE::OO ? 0 : nocc; - const int nmo1 = type == MO_TYPE::VV ? nvirt : nocc; - const int nmo2 = type == MO_TYPE::OO ? nocc : nvirt; - std::vector dm_trans(nks, container::Tensor(DAT::DT_COMPLEX_DOUBLE, DEV::CpuDevice, { naos, naos })); - for (size_t isk = 0;isk < nks;++isk) - { - c.fix_k(isk); - const int x_start = isk * nmo1 * nmo2; + c.fix_k(isk); + const int x_start = isk * nmo1 * nmo2; - char transa = 'N'; - char transb = 'C'; - const std::complex alpha(1.0, 0.0); - const std::complex beta(0.0, 0.0); + char transa = 'N'; + char transb = 'C'; + const std::complex alpha(1.0, 0.0); + const std::complex beta(0.0, 0.0); - // ============== C_virt * X * C_occ^\dagger============= - // 1. [X*C_occ^\dagger]^\dagger=C_occ*X^\dagger - // container::Tensor Xc(DAT::DT_COMPLEX_DOUBLE, DEV::CpuDevice, { nvirt, naos }); - // zgemm_(&transa, &transb, &naos, &nvirt, &nocc, &alpha, - // c.get_pointer(), &naos, X_istate.get_pointer(), &nvirt, - // &beta, Xc.data>(), &naos); - // // 2. C_virt*[X*C_occ^\dagger] - // alpha = 1.0 / static_cast(nks); - // zgemm_(&transa, &transb, &naos, &naos, &nvirt, &alpha, - // c.get_pointer(nocc), &naos, Xc.data>(), &naos, &beta, - // dm_trans[isk].data>(), & naos); + // ============== C_virt * X * C_occ^\dagger============= + // 1. [X*C_occ^\dagger]^\dagger=C_occ*X^\dagger + // container::Tensor Xc(DAT::DT_COMPLEX_DOUBLE, DEV::CpuDevice, { nvirt, naos }); + // zgemm_(&transa, &transb, &naos, &nvirt, &nocc, &alpha, + // c.get_pointer(), &naos, X_istate.get_pointer(), &nvirt, + // &beta, Xc.data>(), &naos); + // // 2. C_virt*[X*C_occ^\dagger] + // alpha = 1.0 / static_cast(nks); + // zgemm_(&transa, &transb, &naos, &naos, &nvirt, &alpha, + // c.get_pointer(nocc), &naos, Xc.data>(), &naos, &beta, + // dm_trans[isk].data>(), & naos); - // ============== [C_virt * X * C_occ^\dagger]^T============= - // ============== = [C_occ^* * X^T * C_virt^T]^T============= - // 1. X*C_occ^\dagger - container::Tensor Xc(DAT::DT_COMPLEX_DOUBLE, DEV::CpuDevice, { naos, nmo2 }); - zgemm_(&transa, &transb, &nmo2, &naos, &nmo1, &alpha, - X_istate + x_start, &nmo2, c.get_pointer(imo1), &naos, - &beta, Xc.data>(), &nmo2); - // 2. [X*C_occ^\dagger]^TC_virt^T - transa = transb = 'T'; - zgemm_(&transa, &transb, &naos, &naos, &nmo2, &factor, - Xc.data>(), &nmo2, c.get_pointer(imo2), &naos, &beta, - dm_trans[isk].data>(), &naos); - } - return dm_trans; + // ============== [C_virt * X * C_occ^\dagger]^T============= + // ============== = [C_occ^* * X^T * C_virt^T]^T============= + // 1. X*C_occ^\dagger + container::Tensor Xc(DAT::DT_COMPLEX_DOUBLE, DEV::CpuDevice, {naos, nmo2}); + zgemm_(&transa, + &transb, + &nmo2, + &naos, + &nmo1, + &alpha, + X_istate + x_start, + &nmo2, + c.get_pointer(imo1), + &naos, + &beta, + Xc.data>(), + &nmo2); + // 2. [X*C_occ^\dagger]^TC_virt^T + transa = transb = 'T'; + zgemm_(&transa, + &transb, + &naos, + &naos, + &nmo2, + &factor, + Xc.data>(), + &nmo2, + c.get_pointer(imo2), + &naos, + &beta, + dm_trans[isk].data>(), + &naos); } - + return dm_trans; } + +} // namespace LR diff --git a/source/module_lr/dm_trans/dmr_complex.cpp b/source/module_lr/dm_trans/dmr_complex.cpp index d5dc550bb1..719e40cd81 100644 --- a/source/module_lr/dm_trans/dmr_complex.cpp +++ b/source/module_lr/dm_trans/dmr_complex.cpp @@ -1,85 +1,88 @@ #include "module_elecstate/module_dm/density_matrix.h" -#include "module_base/timer.h" #include "module_parameter/parameter.h" -#include "module_base/libm/libm.h" +#include "source_base/libm/libm.h" +#include "source_base/timer.h" namespace elecstate { - template<> - void DensityMatrix, std::complex>::cal_DMR(int ik_in) +template <> +void DensityMatrix, std::complex>::cal_DMR(int ik_in) +{ + ModuleBase::TITLE("DensityMatrix", "cal_DMR"); + ModuleBase::timer::tick("DensityMatrix", "cal_DMR"); + for (int is = 1; is <= this->_nspin; ++is) { - ModuleBase::TITLE("DensityMatrix", "cal_DMR"); - ModuleBase::timer::tick("DensityMatrix", "cal_DMR"); - for (int is = 1; is <= this->_nspin; ++is) - { - int ik_begin = this->_nk * (is - 1); // jump this->_nk for spin_down if nspin==2 - hamilt::HContainer>* tmp_DMR = this->_DMR[is - 1]; - // set zero since this function is called in every scf step - tmp_DMR->set_zero(); + int ik_begin = this->_nk * (is - 1); // jump this->_nk for spin_down if nspin==2 + hamilt::HContainer>* tmp_DMR = this->_DMR[is - 1]; + // set zero since this function is called in every scf step + tmp_DMR->set_zero(); #ifdef _OPENMP #pragma omp parallel for #endif - for (int i = 0; i < tmp_DMR->size_atom_pairs(); ++i) + for (int i = 0; i < tmp_DMR->size_atom_pairs(); ++i) + { + hamilt::AtomPair>& tmp_ap = tmp_DMR->get_atom_pair(i); + int iat1 = tmp_ap.get_atom_i(); + int iat2 = tmp_ap.get_atom_j(); + // get global indexes of whole matrix for each atom in this process + int row_ap = this->_paraV->atom_begin_row[iat1]; + int col_ap = this->_paraV->atom_begin_col[iat2]; + if (row_ap == -1 || col_ap == -1) + { + throw std::string("Atom-pair not belong this process"); + } + for (int ir = 0; ir < tmp_ap.get_R_size(); ++ir) { - hamilt::AtomPair>& tmp_ap = tmp_DMR->get_atom_pair(i); - int iat1 = tmp_ap.get_atom_i(); - int iat2 = tmp_ap.get_atom_j(); - // get global indexes of whole matrix for each atom in this process - int row_ap = this->_paraV->atom_begin_row[iat1]; - int col_ap = this->_paraV->atom_begin_col[iat2]; - if (row_ap == -1 || col_ap == -1) + const ModuleBase::Vector3 r_index = tmp_ap.get_R_index(ir); + hamilt::BaseMatrix>* tmp_matrix = tmp_ap.find_matrix(r_index); +#ifdef __DEBUG + if (tmp_matrix == nullptr) { - throw std::string("Atom-pair not belong this process"); + std::cout << "tmp_matrix is nullptr" << std::endl; + continue; } - for (int ir = 0; ir < tmp_ap.get_R_size(); ++ir) +#endif + // loop over k-points + if (PARAM.inp.nspin != 4) { - const ModuleBase::Vector3 r_index = tmp_ap.get_R_index(ir); - hamilt::BaseMatrix>* tmp_matrix = tmp_ap.find_matrix(r_index); -#ifdef __DEBUG - if (tmp_matrix == nullptr) + for (int ik = 0; ik < this->_nk; ++ik) { - std::cout << "tmp_matrix is nullptr" << std::endl; - continue; - } -#endif - // loop over k-points - if (PARAM.inp.nspin != 4) { - for (int ik = 0; ik < this->_nk; ++ik) + if (ik_in >= 0 && ik_in != ik) + continue; + // cal k_phase + // if TK==std::complex, kphase is e^{ikR} + const ModuleBase::Vector3 dR(r_index[0], r_index[1], r_index[2]); + const double arg = (this->_kvec_d[ik] * dR) * ModuleBase::TWO_PI; + double sinp, cosp; + ModuleBase::libm::sincos(arg, &sinp, &cosp); + std::complex kphase = std::complex(cosp, sinp); + // set DMR element + std::complex* tmp_DMR_pointer = tmp_matrix->get_pointer(); + std::complex* tmp_DMK_pointer = this->_DMK[ik + ik_begin].data(); + // jump DMK to fill DMR + // DMR is row-major, DMK is column-major + tmp_DMK_pointer += col_ap * this->_paraV->nrow + row_ap; + for (int mu = 0; mu < this->_paraV->get_row_size(iat1); ++mu) { - if (ik_in >= 0 && ik_in != ik) continue; - // cal k_phase - // if TK==std::complex, kphase is e^{ikR} - const ModuleBase::Vector3 dR(r_index[0], r_index[1], r_index[2]); - const double arg = (this->_kvec_d[ik] * dR) * ModuleBase::TWO_PI; - double sinp, cosp; - ModuleBase::libm::sincos(arg, &sinp, &cosp); - std::complex kphase = std::complex(cosp, sinp); - // set DMR element - std::complex* tmp_DMR_pointer = tmp_matrix->get_pointer(); - std::complex* tmp_DMK_pointer = this->_DMK[ik + ik_begin].data(); - // jump DMK to fill DMR - // DMR is row-major, DMK is column-major - tmp_DMK_pointer += col_ap * this->_paraV->nrow + row_ap; - for (int mu = 0; mu < this->_paraV->get_row_size(iat1); ++mu) - { - BlasConnector::axpy(this->_paraV->get_col_size(iat2), - kphase, - tmp_DMK_pointer, - this->_paraV->get_row_size(), - tmp_DMR_pointer, - 1); - tmp_DMK_pointer += 1; - tmp_DMR_pointer += this->_paraV->get_col_size(iat2); - } + BlasConnector::axpy(this->_paraV->get_col_size(iat2), + kphase, + tmp_DMK_pointer, + this->_paraV->get_row_size(), + tmp_DMR_pointer, + 1); + tmp_DMK_pointer += 1; + tmp_DMR_pointer += this->_paraV->get_col_size(iat2); } -} - // treat DMR as pauli matrix when NSPIN=4 - if (PARAM.inp.nspin == 4) { - throw std::runtime_error("complex DM(R) with NSPIN=4 is not implemented yet"); -} + } + } + // treat DMR as pauli matrix when NSPIN=4 + if (PARAM.inp.nspin == 4) + { + throw std::runtime_error("complex DM(R) with NSPIN=4 is not implemented yet"); } } } - ModuleBase::timer::tick("DensityMatrix", "cal_DMR"); } - // template class DensityMatrix, std::complex>; -} \ No newline at end of file + ModuleBase::timer::tick("DensityMatrix", "cal_DMR"); +} +// template class DensityMatrix, std::complex>; +} // namespace elecstate \ No newline at end of file diff --git a/source/module_lr/dm_trans/test/CMakeLists.txt b/source/module_lr/dm_trans/test/CMakeLists.txt index 6a3535b7ed..87c0e7c870 100644 --- a/source/module_lr/dm_trans/test/CMakeLists.txt +++ b/source/module_lr/dm_trans/test/CMakeLists.txt @@ -3,12 +3,12 @@ AddTest( TARGET dm_trans_test LIBS parameter psi base ${math_libs} device container SOURCES dm_trans_test.cpp ../../utils/lr_util.cpp ../dm_trans_parallel.cpp ../dm_trans_serial.cpp - # ../../../module_base/module_container/ATen/core/tensor.cpp - # ../../../module_base/module_container/ATen/core/tensor_shape.cpp - # ../../../module_base/module_container/ATen/core/tensor_buffer.cpp - # ../../../module_base/module_container/ATen/core/tensor_map.cpp - # ../../../module_base/module_container/ATen/core/tensor_types.cpp - # ../../../module_base/module_container/base/core/cpu_allocator.cpp - # ../../../module_base/module_container/base/core/refcount.cpp - # ../../../module_base/module_container/ATen/kernels/memory_impl.cpp + # ../../../source_base/module_container/ATen/core/tensor.cpp + # ../../../source_base/module_container/ATen/core/tensor_shape.cpp + # ../../../source_base/module_container/ATen/core/tensor_buffer.cpp + # ../../../source_base/module_container/ATen/core/tensor_map.cpp + # ../../../source_base/module_container/ATen/core/tensor_types.cpp + # ../../../source_base/module_container/base/core/cpu_allocator.cpp + # ../../../source_base/module_container/base/core/refcount.cpp + # ../../../source_base/module_container/ATen/kernels/memory_impl.cpp ) \ No newline at end of file diff --git a/source/module_lr/esolver_lrtd_lcao.cpp b/source/module_lr/esolver_lrtd_lcao.cpp index 88df295962..f2a5d32d66 100644 --- a/source/module_lr/esolver_lrtd_lcao.cpp +++ b/source/module_lr/esolver_lrtd_lcao.cpp @@ -1,62 +1,84 @@ #include "esolver_lrtd_lcao.h" -#include "utils/gint_move.hpp" -#include "utils/lr_util.h" + #include "hamilt_casida.h" #include "hamilt_ulr.hpp" -#include "module_lr/potentials/pot_hxc_lrtd.h" -#include "module_lr/hsolver_lrtd.hpp" -#include "module_lr/lr_spectrum.h" -#include +#include "module_cell/module_neighbor/sltk_atom_arrange.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" -#include "module_io/read_wfc_nao.h" #include "module_io/cube_io.h" #include "module_io/print_info.h" -#include "module_cell/module_neighbor/sltk_atom_arrange.h" +#include "module_io/read_wfc_nao.h" +#include "module_lr/hsolver_lrtd.hpp" +#include "module_lr/lr_spectrum.h" +#include "module_lr/operator_casida/operator_lr_diag.h" // for precondition +#include "module_lr/potentials/pot_hxc_lrtd.h" +#include "module_lr/ri_benchmark/ri_benchmark.h" #include "module_lr/utils/lr_util_print.h" -#include "module_base/scalapack_connector.h" #include "module_parameter/parameter.h" -#include "module_lr/ri_benchmark/ri_benchmark.h" -#include "module_lr/operator_casida/operator_lr_diag.h" // for precondition +#include "source_base/scalapack_connector.h" +#include "utils/gint_move.hpp" +#include "utils/lr_util.h" + +#include #ifdef __EXX -template<> +template <> void LR::ESolver_LR::move_exx_lri(std::shared_ptr>& exx_ks) { ModuleBase::TITLE("ESolver_LR", "move_exx_lri"); this->exx_lri = exx_ks; exx_ks = nullptr; } -template<> +template <> void LR::ESolver_LR>::move_exx_lri(std::shared_ptr>>& exx_ks) { ModuleBase::TITLE("ESolver_LR", "move_exx_lri"); this->exx_lri = exx_ks; exx_ks = nullptr; } -template<> +template <> void LR::ESolver_LR>::move_exx_lri(std::shared_ptr>& exx_ks) { throw std::runtime_error("ESolver_LR>::move_exx_lri: cannot move double to complex"); } -template<> +template <> void LR::ESolver_LR::move_exx_lri(std::shared_ptr>>& exx_ks) { throw std::runtime_error("ESolver_LR::move_exx_lri: cannot move complex to double"); } #endif -template<>void LR::ESolver_LR::set_gint() { this->gint_ = &this->gint_g_;this->gint_g_.gridt = &this->gt_; } -template<>void LR::ESolver_LR>::set_gint() { this->gint_ = &this->gint_k_; this->gint_k_.gridt = &this->gt_; } +template <> +void LR::ESolver_LR::set_gint() +{ + this->gint_ = &this->gint_g_; + this->gint_g_.gridt = &this->gt_; +} +template <> +void LR::ESolver_LR>::set_gint() +{ + this->gint_ = &this->gint_k_; + this->gint_k_.gridt = &this->gt_; +} inline int cal_nupdown_form_occ(const ModuleBase::matrix& wg) -{ // only for nspin=2 +{ // only for nspin=2 const int& nk = wg.nr / 2; - auto occ_sum_k = [&](const int& is, const int& ib)->double { double o = 0.0; for (int ik = 0;ik < nk;++ik) { o += wg(is * nk + ik, ib); } return o;}; + auto occ_sum_k = [&](const int& is, const int& ib) -> double { + double o = 0.0; + for (int ik = 0; ik < nk; ++ik) + { + o += wg(is * nk + ik, ib); + } + return o; + }; int nupdown = 0; - for (int ib = 0;ib < wg.nc;++ib) + for (int ib = 0; ib < wg.nc; ++ib) { const int nu = static_cast(std::lround(occ_sum_k(0, ib))); const int nd = static_cast(std::lround(occ_sum_k(1, ib))); - if ((nu + nd) == 0) { break; } + if ((nu + nd) == 0) + { + break; + } nupdown += nu - nd; } return nupdown; @@ -77,23 +99,26 @@ inline void setup_2center_table(TwoCenterBundle& two_center_bundle, LCAO_Orbital } } -template -void LR::ESolver_LR::parameter_check()const +template +void LR::ESolver_LR::parameter_check() const { - const std::set lr_solvers = { "dav", "lapack" , "spectrum", "dav_subspace", "cg" }; - const std::set xc_kernels = { "rpa", "lda", "pwlda", "pbe", "hf" , "hse" }; - if (lr_solvers.find(this->input.lr_solver) == lr_solvers.end()) { + const std::set lr_solvers = {"dav", "lapack", "spectrum", "dav_subspace", "cg"}; + const std::set xc_kernels = {"rpa", "lda", "pwlda", "pbe", "hf", "hse"}; + if (lr_solvers.find(this->input.lr_solver) == lr_solvers.end()) + { throw std::invalid_argument("ESolver_LR: unknown type of lr_solver"); -} - if (xc_kernels.find(this->xc_kernel) == xc_kernels.end()) { + } + if (xc_kernels.find(this->xc_kernel) == xc_kernels.end()) + { throw std::invalid_argument("ESolver_LR: unknown type of xc_kernel"); -} - if (this->nspin != 1 && this->nspin != 2) { + } + if (this->nspin != 1 && this->nspin != 2) + { throw std::invalid_argument("LR-TDDFT only supports nspin = 1 or 2 now"); -} + } } -template +template void LR::ESolver_LR::set_dimension() { this->nspin = PARAM.inp.nspin; @@ -103,14 +128,24 @@ void LR::ESolver_LR::set_dimension() // which determines the basis size of the excited states this->nocc_max = LR_Util::cal_nocc(LR_Util::cal_nelec(ucell)); this->nocc_in = std::max(1, std::min(input.nocc, this->nocc_max)); - this->nvirt_in = PARAM.inp.nbands - this->nocc_max; //nbands-nocc - if (input.nvirt > this->nvirt_in) { GlobalV::ofs_warning << "ESolver_LR: input nvirt is too large to cover by nbands, set nvirt = nbands - nocc = " << this->nvirt_in << std::endl; } - else if (input.nvirt > 0) { this->nvirt_in = input.nvirt; } + this->nvirt_in = PARAM.inp.nbands - this->nocc_max; // nbands-nocc + if (input.nvirt > this->nvirt_in) + { + GlobalV::ofs_warning << "ESolver_LR: input nvirt is too large to cover by nbands, set nvirt = nbands - nocc = " + << this->nvirt_in << std::endl; + } + else if (input.nvirt > 0) + { + this->nvirt_in = input.nvirt; + } this->nbands = this->nocc_in + this->nvirt_in; this->nk = this->kv.get_nks() / this->nspin; this->nocc.resize(nspin, nocc_in); this->nvirt.resize(nspin, nvirt_in); - for (int is = 0;is < nspin;++is) { this->npairs.push_back(nocc[is] * nvirt[is]); } + for (int is = 0; is < nspin; ++is) + { + this->npairs.push_back(nocc[is] * nvirt[is]); + } GlobalV::ofs_running << "Setting LR-TDDFT parameters: " << std::endl; GlobalV::ofs_running << "number of occupied bands: " << nocc_in << std::endl; GlobalV::ofs_running << "number of virtual bands: " << nvirt_in << std::endl; @@ -120,72 +155,75 @@ void LR::ESolver_LR::set_dimension() if (input.ri_hartree_benchmark == "aims" && !input.aims_nbasis.empty()) { // calculate total number of basis funcs, see https://en.cppreference.com/w/cpp/algorithm/inner_product - this->nbasis = std::inner_product(input.aims_nbasis.begin(), /* iterator1.begin */ - input.aims_nbasis.end(), /* iterator1.end */ - ucell.atoms, /* iterator2.begin */ - 0, /* init value */ - std::plus(), /* iter op1 */ + this->nbasis = std::inner_product(input.aims_nbasis.begin(), /* iterator1.begin */ + input.aims_nbasis.end(), /* iterator1.end */ + ucell.atoms, /* iterator2.begin */ + 0, /* init value */ + std::plus(), /* iter op1 */ [](const int& a, const Atom& b) { return a * b.na; }); /* iter op2 */ std::cout << "nbasis from aims: " << this->nbasis << std::endl; } } -template +template void LR::ESolver_LR::reset_dim_spin2() { - if (nspin != 2) - { - return; - } - if (nupdown == 0) - { - std::cout << " ** Assuming degenerate spin-up and spin-down states **" << std::endl; - } - else + if (nspin != 2) + { + return; + } + if (nupdown == 0) + { + std::cout << " ** Assuming degenerate spin-up and spin-down states **" << std::endl; + } + else { this->openshell = true; nupdown > 0 ? ((nocc[1] -= nupdown) && (nvirt[1] += nupdown)) : ((nocc[0] += nupdown) && (nvirt[0] -= nupdown)); - npairs = { nocc[0] * nvirt[0], nocc[1] * nvirt[1] }; + npairs = {nocc[0] * nvirt[0], nocc[1] * nvirt[1]}; std::cout << "** Solve the spin-up and spin-down states separately for open-shell system. **" << std::endl; } - for (int is : {0, 1}) - { - if (npairs[is] <= 0) - { - throw std::invalid_argument(std::string("ESolver_LR: npairs (nocc*nvirt) <= 0 for spin") + std::string(is == 0 ? "up" : "down")); - } - } - - if (nstates > (npairs[0] + npairs[1]) * nk) - { - throw std::invalid_argument("ESolver_LR: nstates > nocc*nvirt*nk"); - } - if (input.lr_unrestricted) - { - this->openshell = true; - } + for (int is: {0, 1}) + { + if (npairs[is] <= 0) + { + throw std::invalid_argument(std::string("ESolver_LR: npairs (nocc*nvirt) <= 0 for spin") + + std::string(is == 0 ? "up" : "down")); + } + } + + if (nstates > (npairs[0] + npairs[1]) * nk) + { + throw std::invalid_argument("ESolver_LR: nstates > nocc*nvirt*nk"); + } + if (input.lr_unrestricted) + { + this->openshell = true; + } } template LR::ESolver_LR::ESolver_LR(ModuleESolver::ESolver_KS_LCAO&& ks_sol, - const Input_para& inp, UnitCell& ucell) + const Input_para& inp, + UnitCell& ucell) : input(inp), ucell(ucell) #ifdef __EXX - , exx_info(GlobalC::exx_info) + , + exx_info(GlobalC::exx_info) #endif { ModuleBase::TITLE("ESolver_LR", "ESolver_LR(KS)"); - if (this->input.lr_solver == "spectrum") - { - throw std::invalid_argument("when lr_solver==spectrum, esolver_type must be `lr` to skip KS calculation."); - } + if (this->input.lr_solver == "spectrum") + { + throw std::invalid_argument("when lr_solver==spectrum, esolver_type must be `lr` to skip KS calculation."); + } this->gd = std::move(ks_sol.gd); // xc kernel this->xc_kernel = LR_Util::tolower(inp.xc_kernel); - //kv + // kv this->kv = std::move(ks_sol.kv); this->parameter_check(); @@ -199,38 +237,54 @@ LR::ESolver_LR::ESolver_LR(ModuleESolver::ESolver_KS_LCAO&& ks_sol this->paraMat_.atom_begin_col = std::move(ks_sol.pv.atom_begin_col); this->paraMat_.iat2iwt_ = ucell.get_iat2iwt(); - LR_Util::setup_2d_division(this->paraC_, 1, this->nbasis, this->nbands + LR_Util::setup_2d_division(this->paraC_, + 1, + this->nbasis, + this->nbands #ifdef __MPI - , this->paraMat_.blacs_ctxt + , + this->paraMat_.blacs_ctxt #endif ); - auto move_gs = [&, this]() -> void // move the ground state info - { - this->psi_ks = ks_sol.psi; - ks_sol.psi = nullptr; - //only need the eigenvalues. the 'elecstates' of excited states is different from ground state. - this->eig_ks = std::move(ks_sol.pelec->ekb); - }; + auto move_gs = [&, this]() -> void // move the ground state info + { + this->psi_ks = ks_sol.psi; + ks_sol.psi = nullptr; + // only need the eigenvalues. the 'elecstates' of excited states is different from ground state. + this->eig_ks = std::move(ks_sol.pelec->ekb); + }; #ifdef __MPI - if (this->nbands == PARAM.inp.nbands) - { - move_gs(); - } - else // copy the part of ground state info according to paraC_ - { - this->psi_ks = new psi::Psi(this->kv.get_nks(), - this->paraC_.get_col_size(), + if (this->nbands == PARAM.inp.nbands) + { + move_gs(); + } + else // copy the part of ground state info according to paraC_ + { + this->psi_ks = new psi::Psi(this->kv.get_nks(), + this->paraC_.get_col_size(), this->paraC_.get_row_size(), this->kv.ngk, true); this->eig_ks.create(this->kv.get_nks(), this->nbands); const int start_band = this->nocc_max - *std::max_element(nocc.begin(), nocc.end()); - for (int ik = 0;ik < this->kv.get_nks();++ik) + for (int ik = 0; ik < this->kv.get_nks(); ++ik) { - Cpxgemr2d(this->nbasis, this->nbands, &(*ks_sol.psi)(ik, 0, 0), 1, start_band + 1, ks_sol.pv.desc_wfc, - &(*this->psi_ks)(ik, 0, 0), 1, 1, this->paraC_.desc, this->paraC_.blacs_ctxt); - for (int ib = 0;ib < this->nbands;++ib) { this->eig_ks(ik, ib) = ks_sol.pelec->ekb(ik, start_band + ib); } + Cpxgemr2d(this->nbasis, + this->nbands, + &(*ks_sol.psi)(ik, 0, 0), + 1, + start_band + 1, + ks_sol.pv.desc_wfc, + &(*this->psi_ks)(ik, 0, 0), + 1, + 1, + this->paraC_.desc, + this->paraC_.blacs_ctxt); + for (int ib = 0; ib < this->nbands; ++ib) + { + this->eig_ks(ik, ib) = ks_sol.pelec->ekb(ik, start_band + ib); + } } } #else @@ -242,17 +296,17 @@ LR::ESolver_LR::ESolver_LR(ModuleESolver::ESolver_KS_LCAO&& ks_sol reset_dim_spin2(); } - //grid integration + // grid integration this->gt_ = std::move(ks_sol.GridT); - if (std::is_same::value) - { - this->gint_g_ = std::move(ks_sol.GG); - } - else - { - this->gint_k_ = std::move(ks_sol.GK); - } + if (std::is_same::value) + { + this->gint_g_ = std::move(ks_sol.GG); + } + else + { + this->gint_k_ = std::move(ks_sol.GK); + } this->set_gint(); this->gint_->reset_DMRGint(1); @@ -260,11 +314,11 @@ LR::ESolver_LR::ESolver_LR(ModuleESolver::ESolver_KS_LCAO&& ks_sol if (this->pw_rho_flag) { this->pw_rho_flag = true; - delete this->pw_rho; // newed in ESolver_FP::ESolver_FP + delete this->pw_rho; // newed in ESolver_FP::ESolver_FP } this->pw_rho = ks_sol.pw_rho; ks_sol.pw_rho = nullptr; - //init potential and calculate kernels using ground state charge + // init potential and calculate kernels using ground state charge init_pot(*ks_sol.pelec->charge); #ifdef __EXX @@ -272,18 +326,28 @@ LR::ESolver_LR::ESolver_LR(ModuleESolver::ESolver_KS_LCAO&& ks_sol { // if the same kernel is calculated in the esolver_ks, move it std::string dft_functional = LR_Util::tolower(input.dft_functional); - if (ks_sol.exd && std::is_same::value && xc_kernel == dft_functional) { + if (ks_sol.exd && std::is_same::value && xc_kernel == dft_functional) + { this->move_exx_lri(ks_sol.exd->exx_ptr); - } else if (ks_sol.exc && std::is_same>::value && xc_kernel == dft_functional) { + } + else if (ks_sol.exc && std::is_same>::value && xc_kernel == dft_functional) + { this->move_exx_lri(ks_sol.exc->exx_ptr); - } else // construct C, V from scratch + } + else // construct C, V from scratch { // set ccp_type according to the xc_kernel - if (xc_kernel == "hf") { exx_info.info_global.ccp_type = Conv_Coulomb_Pot_K::Ccp_Type::Hf; } - else if (xc_kernel == "hse") { exx_info.info_global.ccp_type = Conv_Coulomb_Pot_K::Ccp_Type::Erfc; } + if (xc_kernel == "hf") + { + exx_info.info_global.ccp_type = Conv_Coulomb_Pot_K::Ccp_Type::Hf; + } + else if (xc_kernel == "hse") + { + exx_info.info_global.ccp_type = Conv_Coulomb_Pot_K::Ccp_Type::Erfc; + } this->exx_lri = std::make_shared>(exx_info.info_ri); - this->exx_lri->init(MPI_COMM_WORLD, ucell,this->kv, ks_sol.orb_); - this->exx_lri->cal_exx_ions(ucell,input.out_ri_cv); + this->exx_lri->init(MPI_COMM_WORLD, ucell, this->kv, ks_sol.orb_); + this->exx_lri->cal_exx_ions(ucell, input.out_ri_cv); } } #endif @@ -296,9 +360,11 @@ LR::ESolver_LR::ESolver_LR(ModuleESolver::ESolver_KS_LCAO&& ks_sol } template -LR::ESolver_LR::ESolver_LR(const Input_para& inp, UnitCell& ucell) : input(inp), ucell(ucell) +LR::ESolver_LR::ESolver_LR(const Input_para& inp, UnitCell& ucell) + : input(inp), ucell(ucell) #ifdef __EXX -, exx_info(GlobalC::exx_info) + , + exx_info(GlobalC::exx_info) #endif { ModuleBase::TITLE("ESolver_LR", "ESolver_LR(from scratch)"); @@ -315,7 +381,8 @@ LR::ESolver_LR::ESolver_LR(const Input_para& inp, UnitCell& ucell) : inpu ucell.symm.analy_sys(ucell.lat, ucell.st, ucell.atoms, GlobalV::ofs_running); ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "SYMMETRY"); } - this->kv.set(ucell,ucell.symm, PARAM.inp.kpoint_file, PARAM.inp.nspin, ucell.G, ucell.latvec, GlobalV::ofs_running); + this->kv + .set(ucell, ucell.symm, PARAM.inp.kpoint_file, PARAM.inp.nspin, ucell.G, ucell.latvec, GlobalV::ofs_running); ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "INIT K-POINTS"); ModuleIO::setup_parameters(ucell, this->kv); @@ -338,7 +405,10 @@ LR::ESolver_LR::ESolver_LR(const Input_para& inp, UnitCell& ucell) : inpu #ifdef __MPI this->paraMat_.set_desc_wfc_Eij(this->nbasis, this->nbands, paraMat_.get_row_size()); int err = this->paraMat_.set_nloc_wfc_Eij(this->nbands, GlobalV::ofs_running, GlobalV::ofs_warning); - if (input.ri_hartree_benchmark != "aims") { this->paraMat_.set_atomic_trace(ucell.get_iat2iwt(), ucell.nat, this->nbasis); } + if (input.ri_hartree_benchmark != "aims") + { + this->paraMat_.set_atomic_trace(ucell.get_iat2iwt(), ucell.nat, this->nbasis); + } #else this->paraMat_.nrow_bands = this->nbasis; this->paraMat_.ncol_bands = this->nbands; @@ -349,7 +419,7 @@ LR::ESolver_LR::ESolver_LR(const Input_para& inp, UnitCell& ucell) : inpu // it need improvement to read only the bands needed this->psi_ks = new psi::Psi(this->kv.get_nks(), this->paraMat_.ncol_bands, - this->paraMat_.get_row_size(), + this->paraMat_.get_row_size(), this->kv.ngk, true); this->read_ks_wfc(); @@ -359,34 +429,41 @@ LR::ESolver_LR::ESolver_LR(const Input_para& inp, UnitCell& ucell) : inpu reset_dim_spin2(); } - LR_Util::setup_2d_division(this->paraC_, 1, this->nbasis, this->nbands + LR_Util::setup_2d_division(this->paraC_, + 1, + this->nbasis, + this->nbands #ifdef __MPI - , paraMat_.blacs_ctxt + , + paraMat_.blacs_ctxt #endif ); - //allocate 2-particle state and setup 2d division + // allocate 2-particle state and setup 2d division this->pelec = new elecstate::ElecState(); // read the ground state charge density and calculate xc kernel Pgrid.init(this->pw_rho->nx, - this->pw_rho->ny, - this->pw_rho->nz, - this->pw_rho->nplane, - this->pw_rho->nrxx, - pw_big->nbz, - pw_big->bz); + this->pw_rho->ny, + this->pw_rho->nz, + this->pw_rho->nplane, + this->pw_rho->nrxx, + pw_big->nbz, + pw_big->bz); Charge chg_gs; - if (input.ri_hartree_benchmark != "aims") { this->read_ks_chg(chg_gs); } + if (input.ri_hartree_benchmark != "aims") + { + this->read_ks_chg(chg_gs); + } this->init_pot(chg_gs); // search adjacent atoms and init Gint double search_radius = -1.0; search_radius = atom_arrange::set_sr_NL(GlobalV::ofs_running, - PARAM.inp.out_level, - orb.get_rcutmax_Phi(), - ucell.infoNL.get_rcutmax_Beta(), - PARAM.globalv.gamma_only_local); + PARAM.inp.out_level, + orb.get_rcutmax_Phi(), + ucell.infoNL.get_rcutmax_Beta(), + PARAM.globalv.gamma_only_local); atom_arrange::search(PARAM.globalv.search_pbc, GlobalV::ofs_running, this->gd, @@ -435,37 +512,43 @@ LR::ESolver_LR::ESolver_LR(const Input_para& inp, UnitCell& ucell) : inpu d2psi_u.shrink_to_fit(); this->gint_->prep_grid(this->gt_, - this->pw_big->nbx, - this->pw_big->nby, - this->pw_big->nbzp, - this->pw_big->nbzp_start, - this->pw_rho->nxyz, - this->pw_big->bx, - this->pw_big->by, - this->pw_big->bz, - this->pw_big->bxyz, - this->pw_big->nbxx, - this->pw_rho->ny, - this->pw_rho->nplane, - this->pw_rho->startz_current, - &ucell, - &orb); + this->pw_big->nbx, + this->pw_big->nby, + this->pw_big->nbzp, + this->pw_big->nbzp_start, + this->pw_rho->nxyz, + this->pw_big->bx, + this->pw_big->by, + this->pw_big->bz, + this->pw_big->bxyz, + this->pw_big->nbxx, + this->pw_rho->ny, + this->pw_rho->nplane, + this->pw_rho->startz_current, + &ucell, + &orb); this->gint_->initialize_pvpR(ucell, &this->gd, 1); // always use nspin=1 for transition density - // if EXX from scratch, init 2-center integral and calculate Cs, Vs + // if EXX from scratch, init 2-center integral and calculate Cs, Vs #ifdef __EXX if ((xc_kernel == "hf" || xc_kernel == "hse") && this->input.lr_solver != "spectrum") { // set ccp_type according to the xc_kernel - if (xc_kernel == "hf") { exx_info.info_global.ccp_type = Conv_Coulomb_Pot_K::Ccp_Type::Hf; } - else if (xc_kernel == "hse") { exx_info.info_global.ccp_type = Conv_Coulomb_Pot_K::Ccp_Type::Erfc; } + if (xc_kernel == "hf") + { + exx_info.info_global.ccp_type = Conv_Coulomb_Pot_K::Ccp_Type::Hf; + } + else if (xc_kernel == "hse") + { + exx_info.info_global.ccp_type = Conv_Coulomb_Pot_K::Ccp_Type::Erfc; + } this->exx_lri = std::make_shared>(exx_info.info_ri); - this->exx_lri->init(MPI_COMM_WORLD, ucell,this->kv, orb); - this->exx_lri->cal_exx_ions(ucell,input.out_ri_cv); + this->exx_lri->init(MPI_COMM_WORLD, ucell, this->kv, orb); + this->exx_lri->cal_exx_ions(ucell, input.out_ri_cv); } // else #endif - // ModuleBase::Ylm::set_coefficients() is deprecated + // ModuleBase::Ylm::set_coefficients() is deprecated } template @@ -473,28 +556,47 @@ void LR::ESolver_LR::runner(UnitCell& ucell, const int istep) { ModuleBase::TITLE("ESolver_LR", "runner"); ModuleBase::timer::tick("ESolver_LR", "runner"); - //allocate 2-particle state and setup 2d division + // allocate 2-particle state and setup 2d division this->setup_eigenvectors_X(); this->pelec->ekb.create(nspin, this->nstates); - auto efile = [&](const std::string& label)->std::string {return PARAM.globalv.global_out_dir + "Excitation_Energy_" + label + ".dat";}; - auto vfile = [&](const std::string& label)->std::string {return PARAM.globalv.global_out_dir + "Excitation_Amplitude_" + label + "_" + std::to_string(GlobalV::MY_RANK) + ".dat";}; + auto efile = [&](const std::string& label) -> std::string { + return PARAM.globalv.global_out_dir + "Excitation_Energy_" + label + ".dat"; + }; + auto vfile = [&](const std::string& label) -> std::string { + return PARAM.globalv.global_out_dir + "Excitation_Amplitude_" + label + "_" + std::to_string(GlobalV::MY_RANK) + + ".dat"; + }; if (this->input.lr_solver != "spectrum") { - auto write_states = [&](const std::string& label, const Real* e, const T* v, const int& dim, const int& nst, const int& prec = 8)->void + auto write_states = [&](const std::string& label, + const Real* e, + const T* v, + const int& dim, + const int& nst, + const int& prec = 8) -> void { + if (GlobalV::MY_RANK == 0) { - if (GlobalV::MY_RANK == 0) { assert(nst == LR_Util::write_value(efile(label), prec, e, nst)); } - assert(nst * dim == LR_Util::write_value(vfile(label), prec, v, nst, dim)); - }; + assert(nst == LR_Util::write_value(efile(label), prec, e, nst)); + } + assert(nst * dim == LR_Util::write_value(vfile(label), prec, v, nst, dim)); + }; std::vector precondition(this->input.lr_solver == "lapack" ? 0 : nloc_per_band, 1.0); // allocate and initialize A matrix and density matrix if (openshell) { - for (int is : {0, 1}) + for (int is: {0, 1}) { const int offset_is = is * this->paraX_[0].get_local_size(); - OperatorLRDiag pre_op(this->eig_ks.c + is * nk * (nocc[0] + nvirt[0]), this->paraX_[is], this->nk, this->nocc[is], this->nvirt[is]); - if (input.lr_solver != "lapack") { pre_op.act(1, offset_is, 1, precondition.data() + offset_is, precondition.data() + offset_is); } + OperatorLRDiag pre_op(this->eig_ks.c + is * nk * (nocc[0] + nvirt[0]), + this->paraX_[is], + this->nk, + this->nocc[is], + this->nvirt[is]); + if (input.lr_solver != "lapack") + { + pre_op.act(1, offset_is, 1, precondition.data() + offset_is, precondition.data() + offset_is); + } } std::cout << "Solving spin-conserving excitation for open-shell system." << std::endl; HamiltULR hulr(xc_kernel, @@ -517,15 +619,28 @@ void LR::ESolver_LR::runner(UnitCell& ucell, const int istep) this->paraX_, this->paraC_, this->paraMat_); - LR::HSolver::solve(hulr, this->X[0].template data(), nloc_per_band, nstates, this->pelec->ekb.c, this->input.lr_solver, this->input.lr_thr, precondition); - if (input.out_wfc_lr) { write_states("openshell", this->pelec->ekb.c, this->X[0].template data(), nloc_per_band, nstates); } + LR::HSolver::solve(hulr, + this->X[0].template data(), + nloc_per_band, + nstates, + this->pelec->ekb.c, + this->input.lr_solver, + this->input.lr_thr, + precondition); + if (input.out_wfc_lr) + { + write_states("openshell", this->pelec->ekb.c, this->X[0].template data(), nloc_per_band, nstates); + } } else { OperatorLRDiag pre_op(this->eig_ks.c, this->paraX_[0], this->nk, this->nocc[0], this->nvirt[0]); - if (input.lr_solver != "lapack") { pre_op.act(1, nloc_per_band, 1, precondition.data(), precondition.data()); } - auto spin_types = std::vector({ "singlet", "triplet" }); - for (int is = 0;is < nspin;++is) + if (input.lr_solver != "lapack") + { + pre_op.act(1, nloc_per_band, 1, precondition.data(), precondition.data()); + } + auto spin_types = std::vector({"singlet", "triplet"}); + for (int is = 0; is < nspin; ++is) { std::cout << " Calculating " << spin_types[is] << " excitations" << std::endl; HamiltLR hlr(xc_kernel, @@ -555,17 +670,26 @@ void LR::ESolver_LR::runner(UnitCell& ucell, const int istep) LR::HSolver::solve(hlr, this->X[is].template data(), nloc_per_band, nstates, this->pelec->ekb.c + is * nstates, this->input.lr_solver, this->input.lr_thr, precondition/*, !std::set({ "hf", "hse" }).count(this->xc_kernel)*/); //whether the kernel is Hermitian - if (input.out_wfc_lr) { write_states(spin_types[is], this->pelec->ekb.c + is * nstates, this->X[is].template data(), nloc_per_band, nstates); } + if (input.out_wfc_lr) + { + write_states(spin_types[is], + this->pelec->ekb.c + is * nstates, + this->X[is].template data(), + nloc_per_band, + nstates); + } } } } - else // read the eigenvalues + else // read the eigenvalues { - auto read_states = [&](const std::string& label, Real* e, T* v, const int& dim, const int& nst)->void + auto read_states = [&](const std::string& label, Real* e, T* v, const int& dim, const int& nst) -> void { + if (GlobalV::MY_RANK == 0) { - if (GlobalV::MY_RANK == 0) { assert(nst == LR_Util::read_value(efile(label), e, nst)); } - assert(nst * dim == LR_Util::read_value(vfile(label), v, nst, dim)); - }; + assert(nst == LR_Util::read_value(efile(label), e, nst)); + } + assert(nst * dim == LR_Util::read_value(vfile(label), v, nst, dim)); + }; std::cout << "reading the excitation amplitudes from file: \n"; if (openshell) { @@ -573,8 +697,15 @@ void LR::ESolver_LR::runner(UnitCell& ucell, const int istep) } else { - auto spin_types = std::vector({ "singlet", "triplet" }); - for (int is = 0;is < nspin;++is) { read_states(spin_types[is], this->pelec->ekb.c + is * nstates, this->X[is].template data(), nloc_per_band, nstates); } + auto spin_types = std::vector({"singlet", "triplet"}); + for (int is = 0; is < nspin; ++is) + { + read_states(spin_types[is], + this->pelec->ekb.c + is * nstates, + this->X[is].template data(), + nloc_per_band, + nstates); + } } } ModuleBase::timer::tick("ESolver_LR", "runner"); @@ -585,67 +716,102 @@ template void LR::ESolver_LR::after_all_runners(UnitCell& ucell) { ModuleBase::TITLE("ESolver_LR", "after_all_runners"); - if (input.ri_hartree_benchmark != "none") { return; } //no need to calculate the spectrum in the benchmark routine - //cal spectrum + if (input.ri_hartree_benchmark != "none") + { + return; + } // no need to calculate the spectrum in the benchmark routine + // cal spectrum std::vector freq(100); - std::vector abs_wavelen_range({ 20, 200 });//default range + std::vector abs_wavelen_range({20, 200}); // default range if (input.abs_wavelen_range.size() >= 2 && std::abs(input.abs_wavelen_range[1] - input.abs_wavelen_range[0]) > 0.02) { abs_wavelen_range = input.abs_wavelen_range; } double lambda_diff = std::abs(abs_wavelen_range[1] - abs_wavelen_range[0]); double lambda_min = std::min(abs_wavelen_range[1], abs_wavelen_range[0]); - for (int i = 0;i < freq.size();++i) { freq[i] = 91.126664 / (lambda_min + 0.01 * static_cast(i + 1) * lambda_diff); } - auto spin_types = (nspin == 2 && !openshell) ? std::vector({ "singlet", "triplet" }) : std::vector({ "updown" }); - for (int is = 0;is < this->X.size();++is) - { - LR_Spectrum spectrum(nspin, this->nbasis, this->nocc, this->nvirt, this->gint_, *this->pw_rho, *this->psi_ks, - this->ucell, this->kv, this->gd, this->orb_cutoff_, this->two_center_bundle_, - this->paraX_, this->paraC_, this->paraMat_, - &this->pelec->ekb.c[is * nstates], this->X[is].template data(), nstates, openshell, - LR_Util::tolower(input.abs_gauge)); + for (int i = 0; i < freq.size(); ++i) + { + freq[i] = 91.126664 / (lambda_min + 0.01 * static_cast(i + 1) * lambda_diff); + } + auto spin_types = (nspin == 2 && !openshell) ? std::vector({"singlet", "triplet"}) + : std::vector({"updown"}); + for (int is = 0; is < this->X.size(); ++is) + { + LR_Spectrum spectrum(nspin, + this->nbasis, + this->nocc, + this->nvirt, + this->gint_, + *this->pw_rho, + *this->psi_ks, + this->ucell, + this->kv, + this->gd, + this->orb_cutoff_, + this->two_center_bundle_, + this->paraX_, + this->paraC_, + this->paraMat_, + &this->pelec->ekb.c[is * nstates], + this->X[is].template data(), + nstates, + openshell, + LR_Util::tolower(input.abs_gauge)); spectrum.transition_analysis(spin_types[is]); - if (spin_types[is] != "triplet") // triplets has no transition dipole and no contribution to the spectrum + if (spin_types[is] != "triplet") // triplets has no transition dipole and no contribution to the spectrum { spectrum.optical_absorption_method1(freq, input.abs_broadening); - // =============================================== for test ==================================================== - // spectrum.optical_absorption_method2(freq, input.abs_broadening); - // spectrum.test_transition_dipoles_velocity_ks(eig_ks.c); + // =============================================== for test + // ==================================================== spectrum.optical_absorption_method2(freq, + // input.abs_broadening); spectrum.test_transition_dipoles_velocity_ks(eig_ks.c); // spectrum.write_transition_dipole(PARAM.globalv.global_out_dir + "dipole_velocity_ks.dat"); - // =============================================== for test ==================================================== + // =============================================== for test + // ==================================================== } } } -template +template void LR::ESolver_LR::setup_eigenvectors_X() { ModuleBase::TITLE("ESolver_LR", "setup_eigenvectors_X"); - for (int is = 0;is < nspin;++is) + for (int is = 0; is < nspin; ++is) { Parallel_2D px; - LR_Util::setup_2d_division(px, /*nb2d=*/1, this->nvirt[is], this->nocc[is] + LR_Util::setup_2d_division(px, + /*nb2d=*/1, + this->nvirt[is], + this->nocc[is] #ifdef __MPI - , this->paraC_.blacs_ctxt + , + this->paraC_.blacs_ctxt #endif - );//nvirt - row, nocc - col + ); // nvirt - row, nocc - col this->paraX_.emplace_back(std::move(px)); } - this->nloc_per_band = nk * (openshell ? paraX_[0].get_local_size() + paraX_[1].get_local_size() : paraX_[0].get_local_size()); + this->nloc_per_band + = nk * (openshell ? paraX_[0].get_local_size() + paraX_[1].get_local_size() : paraX_[0].get_local_size()); - this->X.resize(openshell ? 1 : nspin, LR_Util::newTensor({ nstates, nloc_per_band })); - for (auto& x : X) { x.zero(); } + this->X.resize(openshell ? 1 : nspin, LR_Util::newTensor({nstates, nloc_per_band})); + for (auto& x: X) + { + x.zero(); + } - auto spin_types = (nspin == 2 && !openshell) ? std::vector({ "singlet", "triplet" }) : std::vector({ "updown" }); + auto spin_types = (nspin == 2 && !openshell) ? std::vector({"singlet", "triplet"}) + : std::vector({"updown"}); // if spectrum-only, read the LR-eigenstates from file and return - if (this->input.lr_solver != "spectrum") { set_X_initial_guess(); } + if (this->input.lr_solver != "spectrum") + { + set_X_initial_guess(); + } } -template +template void LR::ESolver_LR::set_X_initial_guess() { // set the initial guess of X - for (int is = 0;is < this->nspin;++is) + for (int is = 0; is < this->nspin; ++is) { const int& no = this->nocc[is]; const int& nv = this->nvirt[is]; @@ -653,18 +819,28 @@ void LR::ESolver_LR::set_X_initial_guess() const Parallel_2D& px = this->paraX_[is]; // if (E_{lumo}-E_{homo-1} < E_{lumo+1}-E{homo}), mode = 0, else 1(smaller first) - bool ix_mode = false; //default - if (this->eig_ks.nc > no + 1 && no >= 2 && eig_ks(is, no) - eig_ks(is, no - 2) - 1e-5 > eig_ks(is, no + 1) - eig_ks(is, no - 1)) { ix_mode = true; } + bool ix_mode = false; // default + if (this->eig_ks.nc > no + 1 && no >= 2 + && eig_ks(is, no) - eig_ks(is, no - 2) - 1e-5 > eig_ks(is, no + 1) - eig_ks(is, no - 1)) + { + ix_mode = true; + } GlobalV::ofs_running << "setting the initial guess of X of spin" << is << std::endl; - if (no >= 2 && eig_ks.nc > no) { GlobalV::ofs_running << "E_{lumo}-E_{homo-1}=" << eig_ks(is, no) - eig_ks(is, no - 2) << std::endl; } - if (no >= 1 && eig_ks.nc > no + 1) { GlobalV::ofs_running << "E_{lumo+1}-E{homo}=" << eig_ks(is, no + 1) - eig_ks(is, no - 1) << std::endl; } + if (no >= 2 && eig_ks.nc > no) + { + GlobalV::ofs_running << "E_{lumo}-E_{homo-1}=" << eig_ks(is, no) - eig_ks(is, no - 2) << std::endl; + } + if (no >= 1 && eig_ks.nc > no + 1) + { + GlobalV::ofs_running << "E_{lumo+1}-E{homo}=" << eig_ks(is, no + 1) - eig_ks(is, no - 1) << std::endl; + } GlobalV::ofs_running << "mode of X-index: " << ix_mode << std::endl; /// global index map between (i,c) and ix ModuleBase::matrix ioiv2ix; std::vector> ix2ioiv; - std::pair>> indexmap = - LR_Util::set_ix_map_diagonal(ix_mode, no, nv); + std::pair>> indexmap + = LR_Util::set_ix_map_diagonal(ix_mode, no, nv); ioiv2ix = std::move(std::get<0>(indexmap)); ix2ioiv = std::move(std::get<1>(indexmap)); @@ -672,74 +848,115 @@ void LR::ESolver_LR::set_X_initial_guess() for (int ib = 0; ib < nstates; ++ib) { const int ipair = ib % np; - const int occ_global = std::get<0>(ix2ioiv[ipair]); // occ - const int virt_global = std::get<1>(ix2ioiv[ipair]); // virt + const int occ_global = std::get<0>(ix2ioiv[ipair]); // occ + const int virt_global = std::get<1>(ix2ioiv[ipair]); // virt const int ik = ib / np; - const int xstart_b = ib * nloc_per_band; //start index of band ib - const int xstart_bs = (openshell && is == 1) ? xstart_b + nk * paraX_[0].get_local_size() : xstart_b; // start index of band ib, spin is - const int is_in_x = openshell ? 0 : is; // if openshell, spin-up and spin-down are put together + const int xstart_b = ib * nloc_per_band; // start index of band ib + const int xstart_bs = (openshell && is == 1) ? xstart_b + nk * paraX_[0].get_local_size() + : xstart_b; // start index of band ib, spin is + const int is_in_x = openshell ? 0 : is; // if openshell, spin-up and spin-down are put together if (px.in_this_processor(virt_global, occ_global)) { const int xstart_pair = ik * px.get_local_size(); - const int ipair_loc = px.global2local_col(occ_global) * px.get_row_size() + px.global2local_row(virt_global); + const int ipair_loc + = px.global2local_col(occ_global) * px.get_row_size() + px.global2local_row(virt_global); X[is_in_x].data()[xstart_bs + xstart_pair + ipair_loc] = (static_cast(1.0) / static_cast(nk)); } } } } -template +template void LR::ESolver_LR::init_pot(const Charge& chg_gs) { this->pot.resize(nspin, nullptr); - if (this->input.ri_hartree_benchmark != "none") { return; } //no need to initialize potential for Hxc kernel in the RI-benchmark routine + if (this->input.ri_hartree_benchmark != "none") + { + return; + } // no need to initialize potential for Hxc kernel in the RI-benchmark routine switch (nspin) { using ST = PotHxcLR::SpinType; case 1: - this->pot[0] = std::make_shared(xc_kernel, *this->pw_rho, ucell, chg_gs, Pgrid, ST::S1, input.lr_init_xc_kernel); + this->pot[0] = std::make_shared(xc_kernel, + *this->pw_rho, + ucell, + chg_gs, + Pgrid, + ST::S1, + input.lr_init_xc_kernel); break; case 2: - this->pot[0] = std::make_shared(xc_kernel, *this->pw_rho, ucell, chg_gs, Pgrid, openshell ? ST::S2_updown : ST::S2_singlet, input.lr_init_xc_kernel); - this->pot[1] = std::make_shared(xc_kernel, *this->pw_rho, ucell, chg_gs, Pgrid, openshell ? ST::S2_updown : ST::S2_triplet, input.lr_init_xc_kernel); + this->pot[0] = std::make_shared(xc_kernel, + *this->pw_rho, + ucell, + chg_gs, + Pgrid, + openshell ? ST::S2_updown : ST::S2_singlet, + input.lr_init_xc_kernel); + this->pot[1] = std::make_shared(xc_kernel, + *this->pw_rho, + ucell, + chg_gs, + Pgrid, + openshell ? ST::S2_updown : ST::S2_triplet, + input.lr_init_xc_kernel); break; default: throw std::invalid_argument("ESolver_LR: nspin must be 1 or 2"); } } -template +template void LR::ESolver_LR::read_ks_wfc() { assert(this->psi_ks != nullptr); this->pelec->ekb.create(this->kv.get_nks(), this->nbands); this->pelec->wg.create(this->kv.get_nks(), this->nbands); - if (input.ri_hartree_benchmark == "aims") // for aims benchmark + if (input.ri_hartree_benchmark == "aims") // for aims benchmark { #ifdef __EXX int ncore = 0; - std::vector eig_ks_vec = RI_Benchmark::read_aims_ebands(PARAM.globalv.global_readin_dir + "band_out", nocc_in, nvirt_in, ncore); - std::cout << "ncore=" << ncore << ", nocc=" << nocc_in << ", nvirt=" << nvirt_in << ", nbands=" << this->nbands << std::endl; + std::vector eig_ks_vec + = RI_Benchmark::read_aims_ebands(PARAM.globalv.global_readin_dir + "band_out", + nocc_in, + nvirt_in, + ncore); + std::cout << "ncore=" << ncore << ", nocc=" << nocc_in << ", nvirt=" << nvirt_in << ", nbands=" << this->nbands + << std::endl; std::cout << "eig_ks_vec.size()=" << eig_ks_vec.size() << std::endl; - if(eig_ks_vec.size() != this->nbands) {ModuleBase::WARNING_QUIT("ESolver_LR", "read_aims_ebands failed.");}; - for (int i = 0;i < nbands;++i) { this->pelec->ekb(0, i) = eig_ks_vec[i]; } - RI_Benchmark::read_aims_eigenvectors(*this->psi_ks, PARAM.globalv.global_readin_dir + "KS_eigenvectors.out", ncore, nbands, nbasis); + if (eig_ks_vec.size() != this->nbands) + { + ModuleBase::WARNING_QUIT("ESolver_LR", "read_aims_ebands failed."); + }; + for (int i = 0; i < nbands; ++i) + { + this->pelec->ekb(0, i) = eig_ks_vec[i]; + } + RI_Benchmark::read_aims_eigenvectors(*this->psi_ks, + PARAM.globalv.global_readin_dir + "KS_eigenvectors.out", + ncore, + nbands, + nbasis); #else ModuleBase::WARNING_QUIT("ESolver_LR", "RI benchmark is only supported when compile with LibRI."); #endif } - else if (!ModuleIO::read_wfc_nao(PARAM.globalv.global_readin_dir, this->paraMat_, *this->psi_ks, - this->pelec, - this->pelec->klist->ik2iktot, - this->pelec->klist->get_nkstot(), - /*skip_bands=*/this->nocc_max - this->nocc_in)) { + else if (!ModuleIO::read_wfc_nao(PARAM.globalv.global_readin_dir, + this->paraMat_, + *this->psi_ks, + this->pelec, + this->pelec->klist->ik2iktot, + this->pelec->klist->get_nkstot(), + /*skip_bands=*/this->nocc_max - this->nocc_in)) + { ModuleBase::WARNING_QUIT("ESolver_LR", "read ground-state wavefunction failed."); } this->eig_ks = std::move(this->pelec->ekb); } -template +template void LR::ESolver_LR::read_ks_chg(Charge& chg_gs) { chg_gs.set_rhopw(this->pw_rho); @@ -752,18 +969,21 @@ void LR::ESolver_LR::read_ks_chg(Charge& chg_gs) GlobalV::ofs_running << ssc.str() << std::endl; double ef; if (ModuleIO::read_vdata_palgrid(Pgrid, - GlobalV::MY_RANK, - GlobalV::ofs_running, - ssc.str(), - chg_gs.rho[is], - ucell.nat)) { + GlobalV::MY_RANK, + GlobalV::ofs_running, + ssc.str(), + chg_gs.rho[is], + ucell.nat)) + { GlobalV::ofs_running << " Read in the charge density: " << ssc.str() << std::endl; - } else { // prenspin for nspin=4 is not supported currently + } + else + { // prenspin for nspin=4 is not supported currently ModuleBase::WARNING_QUIT( "init_rho", "!!! Couldn't find the charge file !!! The default directory \n of SPIN1_CHG.cube is OUT.suffix, " "or you must set read_file_dir \n to a specific directory. "); -} + } } } template class LR::ESolver_LR; diff --git a/source/module_lr/hsolver_lrtd.hpp b/source/module_lr/hsolver_lrtd.hpp index c04b7e385a..856bdfc16f 100644 --- a/source/module_lr/hsolver_lrtd.hpp +++ b/source/module_lr/hsolver_lrtd.hpp @@ -1,189 +1,211 @@ #pragma once +#include "module_lr/utils/lr_util.h" +#include "module_lr/utils/lr_util_print.h" #include "module_parameter/parameter.h" -#include "source_hsolver/diago_david.h" -#include "source_hsolver/diago_dav_subspace.h" +#include "source_base/module_container/ATen/core/tensor_map.h" #include "source_hsolver/diago_cg.h" +#include "source_hsolver/diago_dav_subspace.h" +#include "source_hsolver/diago_david.h" #include "source_hsolver/diago_iter_assist.h" -#include "source_hsolver/diago_cg.h" -#include "module_lr/utils/lr_util.h" -#include "module_lr/utils/lr_util_print.h" -#include "module_base/module_container/ATen/core/tensor_map.h" namespace LR { - template using Real = typename GetTypeReal::type; +template +using Real = typename GetTypeReal::type; - namespace HSolver +namespace HSolver +{ +template +inline void print_eigs(const std::vector& eigs, const std::string& label = "", const double factor = 1.0) +{ + std::cout << label << std::endl; + for (auto& e: eigs) { - template - inline void print_eigs(const std::vector& eigs, const std::string& label = "", const double factor = 1.0) - { - std::cout << label << std::endl; - for (auto& e : eigs) { std::cout << e * factor << " "; } - std::cout << std::endl; - } + std::cout << e * factor << " "; + } + std::cout << std::endl; +} - /// eigensolver for common Hamilt - template - void solve(const THamilt& hm, - T* psi, - const int& dim, ///< local leading dimension (or nbasis) - const int& nband, ///< nstates in LR-TDDFT, not (nocc+nvirt) - double* eig, - const std::string method, - const Real& diag_ethr, ///< threshold for diagonalization - const std::vector>& precondition, - const bool hermitian = true) - { - ModuleBase::TITLE("HSolverLR", "solve"); - const std::vector spin_types = { "singlet", "triplet" }; - // note: if not TDA, the eigenvalues will be complex - // then we will need a new constructor of DiagoDavid - - // 1. allocate eigenvalue - std::vector> eigenvalue(nband); //nstates - // 2. select the method +/// eigensolver for common Hamilt +template +void solve(const THamilt& hm, + T* psi, + const int& dim, ///< local leading dimension (or nbasis) + const int& nband, ///< nstates in LR-TDDFT, not (nocc+nvirt) + double* eig, + const std::string method, + const Real& diag_ethr, ///< threshold for diagonalization + const std::vector>& precondition, + const bool hermitian = true) +{ + ModuleBase::TITLE("HSolverLR", "solve"); + const std::vector spin_types = {"singlet", "triplet"}; + // note: if not TDA, the eigenvalues will be complex + // then we will need a new constructor of DiagoDavid + + // 1. allocate eigenvalue + std::vector> eigenvalue(nband); // nstates + // 2. select the method #ifdef __MPI - const hsolver::diag_comm_info comm_info = { POOL_WORLD, GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL }; + const hsolver::diag_comm_info comm_info = {POOL_WORLD, GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL}; #else - const hsolver::diag_comm_info comm_info = { GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL }; + const hsolver::diag_comm_info comm_info = {GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL}; #endif - if (method == "lapack") - { - std::vector Amat_full = hm.matrix(); - const int gdim = std::sqrt(Amat_full.size()); - eigenvalue.resize(gdim); - if (hermitian) { LR_Util::diag_lapack(gdim, Amat_full.data(), eigenvalue.data()); } - else - { - std::vector> eig_complex(gdim); - LR_Util::diag_lapack_nh(gdim, Amat_full.data(), eig_complex.data()); - print_eigs(eig_complex, "Right eigenvalues: of the non-Hermitian matrix: (Ry)"); - for (int i = 0; i < gdim; i++) { eigenvalue[i] = eig_complex[i].real(); } - } - // copy eigenvectors - hm.global2local(psi, Amat_full.data(), nband); - } - else + if (method == "lapack") + { + std::vector Amat_full = hm.matrix(); + const int gdim = std::sqrt(Amat_full.size()); + eigenvalue.resize(gdim); + if (hermitian) + { + LR_Util::diag_lapack(gdim, Amat_full.data(), eigenvalue.data()); + } + else + { + std::vector> eig_complex(gdim); + LR_Util::diag_lapack_nh(gdim, Amat_full.data(), eig_complex.data()); + print_eigs(eig_complex, "Right eigenvalues: of the non-Hermitian matrix: (Ry)"); + for (int i = 0; i < gdim; i++) { - // 3. set maxiter and funcs - const int maxiter = hsolver::DiagoIterAssist::PW_DIAG_NMAX; - - auto hpsi_func = [&hm](T* psi_in, T* hpsi, const int ld_psi, const int nvec) {hm.hPsi(psi_in, hpsi, ld_psi, nvec);}; - auto spsi_func = [&hm](const T* psi_in, T* spsi, const int ld_psi, const int nvec) - { std::memcpy(spsi, psi_in, sizeof(T) * ld_psi * nvec); }; - - if (method == "dav") - { - // Allow 5 tries at most. If ntry > ntry_max = 5, exit diag loop. - const int ntry_max = 5; - // In non-self consistent calculation, do until totally converged. Else allow 5 eigenvecs to be NOT - // converged. - const int notconv_max = ("nscf" == PARAM.inp.calculation) ? 0 : 5; - // do diag and add davidson iteration counts up to avg_iter - hsolver::DiagoDavid david(precondition.data(), - nband, - dim, - PARAM.inp.pw_diag_ndim, - false, - comm_info); - std::vector ethr_band(nband, diag_ethr); - hsolver::DiagoIterAssist::avg_iter += static_cast(david.diag(hpsi_func, spsi_func, - dim, psi, eigenvalue.data(), ethr_band, maxiter, ntry_max, 0)); - } - else if (method == "dav_subspace") //need refactor - { - hsolver::Diago_DavSubspace dav_subspace(precondition, - nband, - dim, - PARAM.inp.pw_diag_ndim, - diag_ethr, - maxiter, - false, //always do the subspace diag (check the implementation) - comm_info, - PARAM.inp.diag_subspace, - PARAM.inp.nb2d); - std::vector ethr_band(nband, diag_ethr); - hsolver::DiagoIterAssist::avg_iter - += static_cast(dav_subspace.diag( - hpsi_func, psi, - dim, - eigenvalue.data(), - ethr_band, - false /*scf*/)); - } - else if (method == "cg") - { - ////// `diagH_subspace` needs refactor: - ////// replace `Hamilt*` with `hpsi_func` - ////// or I cannot use `is_subspace=true` as my `HamiltLR` does not inherit `Hamilt`. - - // auto subspace_func = [&hm](const ct::Tensor& psi_in, ct::Tensor& psi_out) { - // const auto ndim = psi_in.shape().ndim(); - // REQUIRES_OK(ndim == 2, "dims of psi_in should be less than or equal to 2"); - // // Convert a Tensor object to a psi::Psi object - // auto psi_in_wrapper = psi::Psi(psi_in.data(), - // 1, - // psi_in.shape().dim_size(0), - // psi_in.shape().dim_size(1)); - // auto psi_out_wrapper = psi::Psi(psi_out.data(), - // 1, - // psi_out.shape().dim_size(0), - // psi_out.shape().dim_size(1)); - // auto eigen = ct::Tensor(ct::DataTypeToEnum>::value, - // ct::DeviceType::CpuDevice, - // ct::TensorShape({ psi_in.shape().dim_size(0) })); - // hsolver::DiagoIterAssist::diagH_subspace(hm, psi_in_wrapper, psi_out_wrapper, eigen.data>()); - // }; - - ////// why diago_cg depends on basis_type? - // hsolver::DiagoCG cg("lcao", "nscf", true, subspace_func, diag_ethr, maxiter, GlobalV::NPROC_IN_POOL); - - auto subspace_func = [](const ct::Tensor& psi_in, ct::Tensor& psi_out) {}; - hsolver::DiagoCG cg("lcao", "nscf", false, subspace_func, diag_ethr, maxiter, GlobalV::NPROC_IN_POOL); - - auto psi_tensor = ct::TensorMap(psi, ct::DataTypeToEnum::value, ct::DeviceType::CpuDevice, ct::TensorShape({ nband, dim })); - auto eigen_tensor = ct::TensorMap(eigenvalue.data(), ct::DataTypeToEnum>::value, ct::DeviceType::CpuDevice, ct::TensorShape({ nband })); - std::vector> precondition_(precondition); //since TensorMap does not support const pointer - auto precon_tensor = ct::TensorMap(precondition_.data(), ct::DataTypeToEnum>::value, ct::DeviceType::CpuDevice, ct::TensorShape({ dim })); - auto hpsi_func = [&hm](const ct::Tensor& psi_in, ct::Tensor& hpsi) {hm.hPsi(psi_in.data(), hpsi.data(), psi_in.shape().dim_size(0) /*nbasis_local*/, 1/*band-by-band*/);}; - auto spsi_func = [&hm](const ct::Tensor& psi_in, ct::Tensor& spsi) { - std::memcpy(spsi.data(), psi_in.data(), sizeof(T) * psi_in.NumElements()); - }; - - std::vector ethr_band(nband, diag_ethr); - cg.diag(hpsi_func, spsi_func, psi_tensor, eigen_tensor, ethr_band, precon_tensor); - } - else { throw std::runtime_error("HSolverLR::solve: method not implemented"); } + eigenvalue[i] = eig_complex[i].real(); } + } + // copy eigenvectors + hm.global2local(psi, Amat_full.data(), nband); + } + else + { + // 3. set maxiter and funcs + const int maxiter = hsolver::DiagoIterAssist::PW_DIAG_NMAX; + + auto hpsi_func + = [&hm](T* psi_in, T* hpsi, const int ld_psi, const int nvec) { hm.hPsi(psi_in, hpsi, ld_psi, nvec); }; + auto spsi_func = [&hm](const T* psi_in, T* spsi, const int ld_psi, const int nvec) { + std::memcpy(spsi, psi_in, sizeof(T) * ld_psi * nvec); + }; - // 5. copy eigenvalues - for (int ist = 0;ist < nband;++ist) { eig[ist] = eigenvalue[ist]; } - - // 6. output eigenvalues and eigenvectors - print_eigs(eigenvalue, "eigenvalues: (Ry)"); - print_eigs(eigenvalue, "eigenvalues: (eV)", ModuleBase::Ry_to_eV); - - // normalization is already satisfied - // std::cout << "check normalization of eigenvectors:" << std::endl; - // for (int ist = 0;ist < nband;++ist) - // { - // double norm2 = 0; - // for (int ik = 0;ik < psi.get_nk();++ik) - // { - // for (int ib = 0;ib < psi.get_nbasis();++ib) - // { - // norm2 += std::norm(psi(ist, ik, ib)); - // // std::cout << "norm2_now=" << norm2 << std::endl; - // } - // } - // std::cout << "state " << ist << ", norm2=" << norm2 << std::endl; - // } - - // output iters - std::cout << " Average iterative diagonalization steps: " << hsolver::DiagoIterAssist::avg_iter - << "; current threshold: " << hsolver::DiagoIterAssist::PW_DIAG_THR << std::endl; + if (method == "dav") + { + // Allow 5 tries at most. If ntry > ntry_max = 5, exit diag loop. + const int ntry_max = 5; + // In non-self consistent calculation, do until totally converged. Else allow 5 eigenvecs to be NOT + // converged. + const int notconv_max = ("nscf" == PARAM.inp.calculation) ? 0 : 5; + // do diag and add davidson iteration counts up to avg_iter + hsolver::DiagoDavid david(precondition.data(), nband, dim, PARAM.inp.pw_diag_ndim, false, comm_info); + std::vector ethr_band(nband, diag_ethr); + hsolver::DiagoIterAssist::avg_iter += static_cast( + david.diag(hpsi_func, spsi_func, dim, psi, eigenvalue.data(), ethr_band, maxiter, ntry_max, 0)); + } + else if (method == "dav_subspace") // need refactor + { + hsolver::Diago_DavSubspace dav_subspace(precondition, + nband, + dim, + PARAM.inp.pw_diag_ndim, + diag_ethr, + maxiter, + false, // always do the subspace diag (check the implementation) + comm_info, + PARAM.inp.diag_subspace, + PARAM.inp.nb2d); + std::vector ethr_band(nband, diag_ethr); + hsolver::DiagoIterAssist::avg_iter += static_cast( + dav_subspace.diag(hpsi_func, psi, dim, eigenvalue.data(), ethr_band, false /*scf*/)); + } + else if (method == "cg") + { + ////// `diagH_subspace` needs refactor: + ////// replace `Hamilt*` with `hpsi_func` + ////// or I cannot use `is_subspace=true` as my `HamiltLR` does not inherit `Hamilt`. + + // auto subspace_func = [&hm](const ct::Tensor& psi_in, ct::Tensor& psi_out) { + // const auto ndim = psi_in.shape().ndim(); + // REQUIRES_OK(ndim == 2, "dims of psi_in should be less than or equal to 2"); + // // Convert a Tensor object to a psi::Psi object + // auto psi_in_wrapper = psi::Psi(psi_in.data(), + // 1, + // psi_in.shape().dim_size(0), + // psi_in.shape().dim_size(1)); + // auto psi_out_wrapper = psi::Psi(psi_out.data(), + // 1, + // psi_out.shape().dim_size(0), + // psi_out.shape().dim_size(1)); + // auto eigen = ct::Tensor(ct::DataTypeToEnum>::value, + // ct::DeviceType::CpuDevice, + // ct::TensorShape({ psi_in.shape().dim_size(0) })); + // hsolver::DiagoIterAssist::diagH_subspace(hm, psi_in_wrapper, psi_out_wrapper, + // eigen.data>()); + // }; + + ////// why diago_cg depends on basis_type? + // hsolver::DiagoCG cg("lcao", "nscf", true, subspace_func, diag_ethr, maxiter, GlobalV::NPROC_IN_POOL); + + auto subspace_func = [](const ct::Tensor& psi_in, ct::Tensor& psi_out) {}; + hsolver::DiagoCG cg("lcao", "nscf", false, subspace_func, diag_ethr, maxiter, GlobalV::NPROC_IN_POOL); + + auto psi_tensor = ct::TensorMap(psi, + ct::DataTypeToEnum::value, + ct::DeviceType::CpuDevice, + ct::TensorShape({nband, dim})); + auto eigen_tensor = ct::TensorMap(eigenvalue.data(), + ct::DataTypeToEnum>::value, + ct::DeviceType::CpuDevice, + ct::TensorShape({nband})); + std::vector> precondition_(precondition); // since TensorMap does not support const pointer + auto precon_tensor = ct::TensorMap(precondition_.data(), + ct::DataTypeToEnum>::value, + ct::DeviceType::CpuDevice, + ct::TensorShape({dim})); + auto hpsi_func = [&hm](const ct::Tensor& psi_in, ct::Tensor& hpsi) { + hm.hPsi(psi_in.data(), + hpsi.data(), + psi_in.shape().dim_size(0) /*nbasis_local*/, + 1 /*band-by-band*/); + }; + auto spsi_func = [&hm](const ct::Tensor& psi_in, ct::Tensor& spsi) { + std::memcpy(spsi.data(), psi_in.data(), sizeof(T) * psi_in.NumElements()); + }; + + std::vector ethr_band(nband, diag_ethr); + cg.diag(hpsi_func, spsi_func, psi_tensor, eigen_tensor, ethr_band, precon_tensor); + } + else + { + throw std::runtime_error("HSolverLR::solve: method not implemented"); } } + + // 5. copy eigenvalues + for (int ist = 0; ist < nband; ++ist) + { + eig[ist] = eigenvalue[ist]; + } + + // 6. output eigenvalues and eigenvectors + print_eigs(eigenvalue, "eigenvalues: (Ry)"); + print_eigs(eigenvalue, "eigenvalues: (eV)", ModuleBase::Ry_to_eV); + + // normalization is already satisfied + // std::cout << "check normalization of eigenvectors:" << std::endl; + // for (int ist = 0;ist < nband;++ist) + // { + // double norm2 = 0; + // for (int ik = 0;ik < psi.get_nk();++ik) + // { + // for (int ib = 0;ib < psi.get_nbasis();++ib) + // { + // norm2 += std::norm(psi(ist, ik, ib)); + // // std::cout << "norm2_now=" << norm2 << std::endl; + // } + // } + // std::cout << "state " << ist << ", norm2=" << norm2 << std::endl; + // } + + // output iters + std::cout << " Average iterative diagonalization steps: " << hsolver::DiagoIterAssist::avg_iter + << "; current threshold: " << hsolver::DiagoIterAssist::PW_DIAG_THR << std::endl; } +} // namespace HSolver +} // namespace LR diff --git a/source/module_lr/lr_spectrum.cpp b/source/module_lr/lr_spectrum.cpp index d787718eff..c3be9c1a87 100644 --- a/source/module_lr/lr_spectrum.cpp +++ b/source/module_lr/lr_spectrum.cpp @@ -1,30 +1,44 @@ #include "lr_spectrum.h" -#include "module_lr/utils/lr_util.h" -#include "module_parameter/parameter.h" + #include "module_lr/dm_trans/dm_trans.h" -#include "module_base/parallel_reduce.h" #include "module_lr/utils/lr_util.h" #include "module_lr/utils/lr_util_hcontainer.h" #include "module_lr/utils/lr_util_print.h" +#include "module_parameter/parameter.h" +#include "source_base/parallel_reduce.h" template -elecstate::DensityMatrix LR::LR_Spectrum::cal_transition_density_matrix(const int istate, const T* X_in, const bool need_R) +elecstate::DensityMatrix LR::LR_Spectrum::cal_transition_density_matrix(const int istate, + const T* X_in, + const bool need_R) { const T* const X = X_in == nullptr ? this->X : X_in; - const int offset_b = istate * ldim; //start index of band istate + const int offset_b = istate * ldim; // start index of band istate elecstate::DensityMatrix DM_trans(&this->pmat, this->nspin_x, this->kv.kvec_d, this->nk); - for (int is = 0;is < this->nspin_x; ++is) + for (int is = 0; is < this->nspin_x; ++is) { const int offset_x = offset_b + is * nk * this->pX[0].get_local_size(); - //1. transition density + // 1. transition density #ifdef __MPI - std::vector dm_trans_2d = cal_dm_trans_pblas(X + offset_x, this->pX[is], psi_ks[is], this->pc, this->naos, this->nocc[is], this->nvirt[is], this->pmat, (T)1.0 / (T)nk); + std::vector dm_trans_2d = cal_dm_trans_pblas(X + offset_x, + this->pX[is], + psi_ks[is], + this->pc, + this->naos, + this->nocc[is], + this->nvirt[is], + this->pmat, + (T)1.0 / (T)nk); // if (this->tdm_sym) for (auto& t : dm_trans_2d) LR_Util::matsym(t.data(), naos, pmat); #else - std::vector dm_trans_2d = cal_dm_trans_blas(X + offset_x, this->psi_ks[is], this->nocc[is], this->nvirt[is], (T)1.0 / (T)nk); + std::vector dm_trans_2d + = cal_dm_trans_blas(X + offset_x, this->psi_ks[is], this->nocc[is], this->nvirt[is], (T)1.0 / (T)nk); // if (this->tdm_sym) for (auto& t : dm_trans_2d) LR_Util::matsym(t.data(), naos); #endif - for (int ik = 0;ik < this->nk;++ik) { DM_trans.set_DMK_pointer(ik + is * nk, dm_trans_2d[ik].data()); } + for (int ik = 0; ik < this->nk; ++ik) + { + DM_trans.set_DMK_pointer(ik + is * nk, dm_trans_2d[ik].data()); + } } if (need_R) { @@ -34,7 +48,7 @@ elecstate::DensityMatrix LR::LR_Spectrum::cal_transition_density_matrix return DM_trans; } -template +template void LR::LR_Spectrum::cal_gint_rho(double** rho, const int& nrxx) { ModuleBase::GlobalFunc::ZEROS(rho[0], nrxx); @@ -44,22 +58,24 @@ void LR::LR_Spectrum::cal_gint_rho(double** rho, const int& nrxx) inline void check_sum_rule(const double& osc_tot) { - if (std::abs(osc_tot - 1.0) > 1e-3) { + if (std::abs(osc_tot - 1.0) > 1e-3) + { GlobalV::ofs_running << "Warning: in LR_Spectrum::oscillator_strength, \ the sum rule is not satisfied, try more nstates if needed.\n \ - Total oscillator strength = " + std::to_string(osc_tot) + "\n"; -} + Total oscillator strength = " + + std::to_string(osc_tot) + "\n"; + } } -template<> +template <> ModuleBase::Vector3 LR::LR_Spectrum::cal_transition_dipole_istate_length(const int istate) { ModuleBase::Vector3 trans_dipole(0.0, 0.0, 0.0); // 1. transition density matrix const elecstate::DensityMatrix& DM_trans = this->cal_transition_density_matrix(istate); - for (int is = 0;is < this->nspin_x;++is) + for (int is = 0; is < this->nspin_x; ++is) { - this->gint->transfer_DM2DtoGrid({ DM_trans.get_DMR_vector().at(is) }); + this->gint->transfer_DM2DtoGrid({DM_trans.get_DMR_vector().at(is)}); // 2. transition density double** rho_trans; @@ -72,30 +88,37 @@ ModuleBase::Vector3 LR::LR_Spectrum::cal_transition_dipole_istat int i = ir / (rho_basis.ny * rho_basis.nplane); int j = ir / rho_basis.nplane - i * rho_basis.ny; int k = ir % rho_basis.nplane + rho_basis.startz_current; - ModuleBase::Vector3 rd(static_cast(i) / rho_basis.nx, static_cast(j) / rho_basis.ny, static_cast(k) / rho_basis.nz); //+1/2 better? - rd -= ModuleBase::Vector3(0.5, 0.5, 0.5); //shift to the center of the grid (need ?) + ModuleBase::Vector3 rd(static_cast(i) / rho_basis.nx, + static_cast(j) / rho_basis.ny, + static_cast(k) / rho_basis.nz); //+1/2 better? + rd -= ModuleBase::Vector3(0.5, 0.5, 0.5); // shift to the center of the grid (need ?) ModuleBase::Vector3 rc = rd * ucell.latvec * ucell.lat0; // real coordinate trans_dipole += rc * rho_trans[0][ir]; } LR_Util::_deallocate_2order_nested_ptr(rho_trans, 1); } - trans_dipole *= (ucell.omega / static_cast(gint->get_ncxyz())); // dv - trans_dipole *= static_cast(this->nk); // nk is divided inside DM_trans, now recover it - if (this->nspin_x == 1) { trans_dipole *= sqrt(2.0); } // *2 for 2 spins, /sqrt(2) for the halfed dimension of X in the normalizaiton + trans_dipole *= (ucell.omega / static_cast(gint->get_ncxyz())); // dv + trans_dipole *= static_cast(this->nk); // nk is divided inside DM_trans, now recover it + if (this->nspin_x == 1) + { + trans_dipole *= sqrt(2.0); + } // *2 for 2 spins, /sqrt(2) for the halfed dimension of X in the normalizaiton Parallel_Reduce::reduce_all(trans_dipole.x); Parallel_Reduce::reduce_all(trans_dipole.y); Parallel_Reduce::reduce_all(trans_dipole.z); return trans_dipole; } -template<> -ModuleBase::Vector3> LR::LR_Spectrum>::cal_transition_dipole_istate_length(const int istate) +template <> +ModuleBase::Vector3> LR::LR_Spectrum>::cal_transition_dipole_istate_length( + const int istate) { - //1. transition density matrix + // 1. transition density matrix ModuleBase::Vector3> trans_dipole(0.0, 0.0, 0.0); - const elecstate::DensityMatrix, std::complex>& DM_trans = this->cal_transition_density_matrix(istate); - for (int is = 0;is < this->nspin_x;++is) + const elecstate::DensityMatrix, std::complex>& DM_trans + = this->cal_transition_density_matrix(istate); + for (int is = 0; is < this->nspin_x; ++is) { // 2. transition density double** rho_trans_real; @@ -103,7 +126,10 @@ ModuleBase::Vector3> LR::LR_Spectrum>: LR_Util::_allocate_2order_nested_ptr(rho_trans_real, 1, this->rho_basis.nrxx); LR_Util::_allocate_2order_nested_ptr(rho_trans_imag, 1, this->rho_basis.nrxx); - elecstate::DensityMatrix, double> DM_trans_real_imag(&this->pmat, 1, this->kv.kvec_d, this->nk); + elecstate::DensityMatrix, double> DM_trans_real_imag(&this->pmat, + 1, + this->kv.kvec_d, + this->nk); LR_Util::initialize_DMR(DM_trans_real_imag, this->pmat, this->ucell, this->gd_, this->orb_cutoff_); // real part @@ -124,8 +150,10 @@ ModuleBase::Vector3> LR::LR_Spectrum>: int i = ir / (rho_basis.ny * rho_basis.nplane); int j = ir / rho_basis.nplane - i * rho_basis.ny; int k = ir % rho_basis.nplane + rho_basis.startz_current; - ModuleBase::Vector3 rd(static_cast(i) / rho_basis.nx, static_cast(j) / rho_basis.ny, static_cast(k) / rho_basis.nz); //+1/2 better? - rd -= ModuleBase::Vector3(0.5, 0.5, 0.5); //shift to the center of the grid (need ?) + ModuleBase::Vector3 rd(static_cast(i) / rho_basis.nx, + static_cast(j) / rho_basis.ny, + static_cast(k) / rho_basis.nz); //+1/2 better? + rd -= ModuleBase::Vector3(0.5, 0.5, 0.5); // shift to the center of the grid (need ?) ModuleBase::Vector3 rc = rd * ucell.latvec * ucell.lat0; // real coordinate ModuleBase::Vector3> rc_complex(rc.x, rc.y, rc.z); trans_dipole += rc_complex * std::complex(rho_trans_real[0][ir], rho_trans_imag[0][ir]); @@ -133,53 +161,59 @@ ModuleBase::Vector3> LR::LR_Spectrum>: LR_Util::_deallocate_2order_nested_ptr(rho_trans_real, 1); LR_Util::_deallocate_2order_nested_ptr(rho_trans_imag, 1); } - trans_dipole *= (ucell.omega / static_cast(gint->get_ncxyz())); // dv - trans_dipole *= static_cast(this->nk); // nk is divided inside DM_trans, now recover it - if (this->nspin_x == 1) { trans_dipole *= sqrt(2.0); } // *2 for 2 spins, /sqrt(2) for the halfed dimension of X in the normalizaiton + trans_dipole *= (ucell.omega / static_cast(gint->get_ncxyz())); // dv + trans_dipole *= static_cast(this->nk); // nk is divided inside DM_trans, now recover it + if (this->nspin_x == 1) + { + trans_dipole *= sqrt(2.0); + } // *2 for 2 spins, /sqrt(2) for the halfed dimension of X in the normalizaiton Parallel_Reduce::reduce_all(trans_dipole.x); Parallel_Reduce::reduce_all(trans_dipole.y); Parallel_Reduce::reduce_all(trans_dipole.z); return trans_dipole; } -template<> double LR::LR_Spectrum::cal_mean_squared_dipole(ModuleBase::Vector3 dipole) +template <> +double LR::LR_Spectrum::cal_mean_squared_dipole(ModuleBase::Vector3 dipole) { return dipole.norm2() / 3.; } -template<> double LR::LR_Spectrum>::cal_mean_squared_dipole(ModuleBase::Vector3> dipole) +template <> +double LR::LR_Spectrum>::cal_mean_squared_dipole(ModuleBase::Vector3> dipole) { - // return dipole.norm2().real() / 3.; // ModuleBase::Vector3::norm2 calculates x*x + y*y + z*z, but here we need x*x.conj() + y*y.conj() + z*z.conj() + // return dipole.norm2().real() / 3.; // ModuleBase::Vector3::norm2 calculates x*x + y*y + z*z, but here we + // need x*x.conj() + y*y.conj() + z*z.conj() return (std::norm(dipole.x) + std::norm(dipole.y) + std::norm(dipole.z)) / 3.; } -template +template void LR::LR_Spectrum::cal_transition_dipoles_length() { transition_dipole_.resize(nstate); this->mean_squared_transition_dipole_.resize(nstate); - for (int istate = 0;istate < nstate;++istate) + for (int istate = 0; istate < nstate; ++istate) { transition_dipole_[istate] = cal_transition_dipole_istate_length(istate); mean_squared_transition_dipole_[istate] = cal_mean_squared_dipole(transition_dipole_[istate]); } } -template +template void LR::LR_Spectrum::oscillator_strength() { ModuleBase::TITLE("LR::LR_Spectrum", "oscillator_strength"); - std::vector& osc = this->oscillator_strength_; // unit: Ry + std::vector& osc = this->oscillator_strength_; // unit: Ry osc.resize(nstate, 0.0); double osc_tot = 0.0; - for (int istate = 0;istate < nstate;++istate) + for (int istate = 0; istate < nstate; ++istate) { osc[istate] = this->mean_squared_transition_dipole_[istate] * this->eig[istate] * 2.; - osc_tot += osc[istate] / 2.; //Ry to Hartree (1/2) + osc_tot += osc[istate] / 2.; // Ry to Hartree (1/2) } check_sum_rule(osc_tot); } -template +template void LR::LR_Spectrum::optical_absorption_method1(const std::vector& freq, const double eta) { // ============test dipole================ @@ -196,26 +230,33 @@ void LR::LR_Spectrum::optical_absorption_method1(const std::vector& f std::vector& osc = this->oscillator_strength_; std::ofstream ofs(PARAM.globalv.global_out_dir + "absorption.dat"); - if (GlobalV::MY_RANK == 0) - { - ofs << "Frequency (eV) | wave length(nm) | Absorption (a.u.)" << std::endl; - } + if (GlobalV::MY_RANK == 0) + { + ofs << "Frequency (eV) | wave length(nm) | Absorption (a.u.)" << std::endl; + } double FourPI_div_c = ModuleBase::FOUR_PI / 137.036; - double fac = 4 * M_PI / ucell.omega * ModuleBase::e2 / this->nk; // e2 for Ry to Hartree in the denominator + double fac = 4 * M_PI / ucell.omega * ModuleBase::e2 / this->nk; // e2 for Ry to Hartree in the denominator - for (int f = 0;f < freq.size();++f) + for (int f = 0; f < freq.size(); ++f) { std::complex f_complex = std::complex(freq[f], eta); double abs = 0.0; - // for (int i = 0;i < osc.size();++i) { abs += (osc[i] / (f_complex * f_complex - eig[i] * eig[i])).imag() * freq[f] * FourPI_div_c; } - for (int i = 0;i < osc.size();++i) { abs += (osc[i] / (f_complex * f_complex - eig[i] * eig[i])).imag() * fac; } - if (GlobalV::MY_RANK == 0) { ofs << freq[f] * ModuleBase::Ry_to_eV << "\t" << 91.126664 / freq[f] << "\t" << std::abs(abs) << std::endl; } + // for (int i = 0;i < osc.size();++i) { abs += (osc[i] / (f_complex * f_complex - eig[i] * eig[i])).imag() * + // freq[f] * FourPI_div_c; } + for (int i = 0; i < osc.size(); ++i) + { + abs += (osc[i] / (f_complex * f_complex - eig[i] * eig[i])).imag() * fac; + } + if (GlobalV::MY_RANK == 0) + { + ofs << freq[f] * ModuleBase::Ry_to_eV << "\t" << 91.126664 / freq[f] << "\t" << std::abs(abs) << std::endl; + } } ofs.close(); } -template +template void LR::LR_Spectrum::transition_analysis(const std::string& spintype) { ModuleBase::TITLE("LR::LR_Spectrum", "transition_analysis"); @@ -223,49 +264,63 @@ void LR::LR_Spectrum::transition_analysis(const std::string& spintype) ofs << "==================================================================== " << std::endl; ofs << std::setw(40) << spintype << std::endl; ofs << "==================================================================== " << std::endl; - ofs << std::setw(8) << "State" << std::setw(30) << "Excitation Energy (Ry, eV)" << - std::setw(90) << "Transition dipole x, y, z (a.u.)" << std::setw(30) << "Oscillator strength(a.u.)" << std::endl; + ofs << std::setw(8) << "State" << std::setw(30) << "Excitation Energy (Ry, eV)" << std::setw(90) + << "Transition dipole x, y, z (a.u.)" << std::setw(30) << "Oscillator strength(a.u.)" << std::endl; ofs << "------------------------------------------------------------------------------------ " << std::endl; - for (int istate = 0;istate < nstate;++istate) - ofs << std::setw(8) << istate << std::setw(15) << std::setprecision(6) << eig[istate] << std::setw(15) << eig[istate] * ModuleBase::Ry_to_eV - << std::setprecision(4) << std::setw(30) << transition_dipole_[istate].x << std::setw(30) << transition_dipole_[istate].y << std::setw(30) << transition_dipole_[istate].z - << std::setprecision(6) << std::setw(30) << oscillator_strength_[istate] << std::endl; + for (int istate = 0; istate < nstate; ++istate) + ofs << std::setw(8) << istate << std::setw(15) << std::setprecision(6) << eig[istate] << std::setw(15) + << eig[istate] * ModuleBase::Ry_to_eV << std::setprecision(4) << std::setw(30) + << transition_dipole_[istate].x << std::setw(30) << transition_dipole_[istate].y << std::setw(30) + << transition_dipole_[istate].z << std::setprecision(6) << std::setw(30) << oscillator_strength_[istate] + << std::endl; ofs << "------------------------------------------------------------------------------------ " << std::endl; - ofs << std::setw(8) << "State" << std::setw(20) << "Occupied orbital" - << std::setw(20) << "Virtual orbital" << std::setw(30) << "Excitation amplitude" - << std::setw(30) << "Excitation rate" - << std::setw(10) << "k-point" << std::endl; + ofs << std::setw(8) << "State" << std::setw(20) << "Occupied orbital" << std::setw(20) << "Virtual orbital" + << std::setw(30) << "Excitation amplitude" << std::setw(30) << "Excitation rate" << std::setw(10) << "k-point" + << std::endl; ofs << "------------------------------------------------------------------------------------ " << std::endl; - for (int istate = 0;istate < nstate;++istate) + for (int istate = 0; istate < nstate; ++istate) { /// find the main contributions (> 0.5) const int loffset_b = istate * ldim; - std::vector X_full(gdim, T(0));// one-band, global - for (int is = 0;is < nspin_x;++is) + std::vector X_full(gdim, T(0)); // one-band, global + for (int is = 0; is < nspin_x; ++is) { const int loffset_bs = loffset_b + is * nk * pX[0].get_local_size(); const int goffset_s = is * nk * nocc[0] * nvirt[0]; - for (int ik = 0;ik < nk;++ik) + for (int ik = 0; ik < nk; ++ik) { const int loffset_x = loffset_bs + ik * pX[is].get_local_size(); const int goffset_x = goffset_s + ik * nocc[is] * nvirt[is]; #ifdef __MPI - LR_Util::gather_2d_to_full(this->pX[is], X + loffset_x, X_full.data() + goffset_x, false, nvirt[is], nocc[is]); + LR_Util::gather_2d_to_full(this->pX[is], + X + loffset_x, + X_full.data() + goffset_x, + false, + nvirt[is], + nocc[is]); #endif } } std::map> abs_order; - for (int i = 0;i < gdim;++i) { double abs = std::abs(X_full.at(i));if (abs > ana_thr) { abs_order[abs] = i; } } - if (abs_order.size() > 0) { - for (auto it = abs_order.cbegin();it != abs_order.cend();++it) + for (int i = 0; i < gdim; ++i) + { + double abs = std::abs(X_full.at(i)); + if (abs > ana_thr) + { + abs_order[abs] = i; + } + } + if (abs_order.size() > 0) + { + for (auto it = abs_order.cbegin(); it != abs_order.cend(); ++it) { auto pair_info = get_pair_info(it->second); const int& is = pair_info["ispin"]; const std::string s = nspin_x == 2 ? (is == 0 ? "a" : "b") : ""; - ofs << std::setw(8) << (it == abs_order.cbegin() ? std::to_string(istate) : " ") - << std::setw(20) << std::to_string(pair_info["iocc"] + 1) + s << std::setw(20) << std::to_string(pair_info["ivirt"] + nocc[is] + 1) + s// iocc and ivirt - << std::setw(30) << X_full.at(it->second) - << std::setw(30) << std::norm(X_full.at(it->second)) + ofs << std::setw(8) << (it == abs_order.cbegin() ? std::to_string(istate) : " ") << std::setw(20) + << std::to_string(pair_info["iocc"] + 1) + s << std::setw(20) + << std::to_string(pair_info["ivirt"] + nocc[is] + 1) + s // iocc and ivirt + << std::setw(30) << X_full.at(it->second) << std::setw(30) << std::norm(X_full.at(it->second)) << std::setw(10) << pair_info["ik"] + 1 << std::endl; } } @@ -273,30 +328,30 @@ void LR::LR_Spectrum::transition_analysis(const std::string& spintype) ofs << "==================================================================== " << std::endl; } -template +template std::map LR::LR_Spectrum::get_pair_info(const int i) { assert(i >= 0 && i < gdim); const int dim_spin0 = nk * nocc[0] * nvirt[0]; const int ispin = (nspin_x == 2 && i >= dim_spin0) ? 1 : 0; - const int ik = (i - ispin*dim_spin0) / (nocc[ispin] * nvirt[ispin]); - const int ipair = (i - ispin*dim_spin0) - ik * nocc[ispin] * nvirt[ispin]; + const int ik = (i - ispin * dim_spin0) / (nocc[ispin] * nvirt[ispin]); + const int ipair = (i - ispin * dim_spin0) - ik * nocc[ispin] * nvirt[ispin]; const int iocc = ipair / nvirt[ispin]; const int ivirt = ipair % nvirt[ispin]; - return { {"ispin", ispin}, {"ik", ik}, {"iocc", iocc}, {"ivirt", ivirt} }; + return {{"ispin", ispin}, {"ik", ik}, {"iocc", iocc}, {"ivirt", ivirt}}; } -template +template void LR::LR_Spectrum::write_transition_dipole(const std::string& filename) { std::ofstream ofs(filename); ofs << "Transition dipole moment (a.u.)" << std::endl; - ofs << std::setw(20) << "State" << std::setw(20) << "x" << std::setw(20) << "y" << std::setw(20) << "z" << std::setw(20) << "average" << std::endl; - for (int istate = 0;istate < nstate;++istate) + ofs << std::setw(20) << "State" << std::setw(20) << "x" << std::setw(20) << "y" << std::setw(20) << "z" + << std::setw(20) << "average" << std::endl; + for (int istate = 0; istate < nstate; ++istate) { ofs << std::setw(20) << istate << std::setw(20) << transition_dipole_[istate].x << std::setw(20) - << transition_dipole_[istate].y << std::setw(20) - << transition_dipole_[istate].z << std::setw(20) + << transition_dipole_[istate].y << std::setw(20) << transition_dipole_[istate].z << std::setw(20) << mean_squared_transition_dipole_[istate] << std::endl; } ofs.close(); diff --git a/source/module_lr/operator_casida/operator_lr_diag.h b/source/module_lr/operator_casida/operator_lr_diag.h index 3f28e2b9d8..78420618c2 100644 --- a/source/module_lr/operator_casida/operator_lr_diag.h +++ b/source/module_lr/operator_casida/operator_lr_diag.h @@ -1,62 +1,68 @@ #pragma once -#include "module_lr/utils/lr_util.h" -#include "module_base/kernels/math_kernel_op.h" #include "module_hamilt_general/operator.h" +#include "module_lr/utils/lr_util.h" +#include "source_base/kernels/math_kernel_op.h" #ifdef __MPI -#include "module_base/parallel_common.h" +#include "source_base/parallel_common.h" #endif namespace LR { - /// @brief Diag part of A operator: [AX]_iak = (e_ak - e_ik) X_iak - template - class OperatorLRDiag : public hamilt::Operator - { - public: - OperatorLRDiag(const double* eig_ks, const Parallel_2D& pX_in, const int& nk_in, const int& nocc_in, const int& nvirt_in) - : pX(pX_in), nk(nk_in), nocc(nocc_in), nvirt(nvirt_in) - { // calculate the difference of eigenvalues - ModuleBase::TITLE("OperatorLRDiag", "OperatorLRDiag"); - const int nbands = nocc + nvirt; - this->cal_type = hamilt::calculation_type::no; - this->eig_ks_diff.create(nk, pX.get_local_size(), false); - for (int ik = 0;ik < nk;++ik) +/// @brief Diag part of A operator: [AX]_iak = (e_ak - e_ik) X_iak +template +class OperatorLRDiag : public hamilt::Operator +{ + public: + OperatorLRDiag(const double* eig_ks, + const Parallel_2D& pX_in, + const int& nk_in, + const int& nocc_in, + const int& nvirt_in) + : pX(pX_in), nk(nk_in), nocc(nocc_in), nvirt(nvirt_in) + { // calculate the difference of eigenvalues + ModuleBase::TITLE("OperatorLRDiag", "OperatorLRDiag"); + const int nbands = nocc + nvirt; + this->cal_type = hamilt::calculation_type::no; + this->eig_ks_diff.create(nk, pX.get_local_size(), false); + for (int ik = 0; ik < nk; ++ik) + { + const int& istart = ik * nbands; + for (int io = 0; io < pX.get_col_size(); ++io) // nocc_local { - const int& istart = ik * nbands; - for (int io = 0;io < pX.get_col_size();++io) //nocc_local + for (int iv = 0; iv < pX.get_row_size(); ++iv) // nvirt_local { - for (int iv = 0;iv < pX.get_row_size();++iv) //nvirt_local - { - int io_g = pX.local2global_col(io); - int iv_g = pX.local2global_row(iv); - this->eig_ks_diff(ik, io * pX.get_row_size() + iv) = eig_ks[istart + nocc + iv_g] - eig_ks[istart + io_g]; - } + int io_g = pX.local2global_col(io); + int iv_g = pX.local2global_row(iv); + this->eig_ks_diff(ik, io * pX.get_row_size() + iv) + = eig_ks[istart + nocc + iv_g] - eig_ks[istart + io_g]; } } - }; - void init(const int ik_in) override {}; - - /// caution: put this operator at the head of the operator list, - /// because vector_mul_vector_op directly assign to (rather than add on) psi_out. - virtual void act(const int nbands, - const int nbasis, - const int npol, - const T* psi_in, - T* hpsi, - const int ngk_ik = 0, - const bool is_first_node = false)const override - { - ModuleBase::TITLE("OperatorLRDiag", "act"); - ModuleBase::vector_mul_vector_op()(nk * pX.get_local_size(), // local size of particle-hole basis - hpsi, - psi_in, - this->eig_ks_diff.c); } - private: - const Parallel_2D& pX; - ModuleBase::matrix eig_ks_diff; - const int& nk; - const int& nocc; - const int& nvirt; - Device* ctx = {}; }; -} \ No newline at end of file + void init(const int ik_in) override{}; + + /// caution: put this operator at the head of the operator list, + /// because vector_mul_vector_op directly assign to (rather than add on) psi_out. + virtual void act(const int nbands, + const int nbasis, + const int npol, + const T* psi_in, + T* hpsi, + const int ngk_ik = 0, + const bool is_first_node = false) const override + { + ModuleBase::TITLE("OperatorLRDiag", "act"); + ModuleBase::vector_mul_vector_op()(nk * pX.get_local_size(), // local size of particle-hole basis + hpsi, + psi_in, + this->eig_ks_diff.c); + } + + private: + const Parallel_2D& pX; + ModuleBase::matrix eig_ks_diff; + const int& nk; + const int& nocc; + const int& nvirt; + Device* ctx = {}; +}; +} // namespace LR \ No newline at end of file diff --git a/source/module_lr/operator_casida/operator_lr_hxc.cpp b/source/module_lr/operator_casida/operator_lr_hxc.cpp index ed55c7c0c7..47e29271d5 100644 --- a/source/module_lr/operator_casida/operator_lr_hxc.cpp +++ b/source/module_lr/operator_casida/operator_lr_hxc.cpp @@ -1,138 +1,163 @@ #include "operator_lr_hxc.h" -#include -#include "module_parameter/parameter.h" -#include "module_base/blas_connector.h" -#include "module_base/timer.h" + #include "module_lr/utils/lr_util.h" #include "module_lr/utils/lr_util_hcontainer.h" #include "module_lr/utils/lr_util_print.h" +#include "module_parameter/parameter.h" +#include "source_base/blas_connector.h" +#include "source_base/timer.h" + +#include // #include "module_hamilt_lcao/hamilt_lcaodft/DM_gamma_2d_to_grid.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer_funcs.h" -#include "module_lr/ao_to_mo_transformer/ao_to_mo.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_lr/ao_to_mo_transformer/ao_to_mo.h" -inline double conj(double a) { return a; } -inline std::complex conj(std::complex a) { return std::conj(a); } +inline double conj(double a) +{ + return a; +} +inline std::complex conj(std::complex a) +{ + return std::conj(a); +} namespace LR { - template - void OperatorLRHxc::act(const int nbands, const int nbasis, const int npol, const T* psi_in, T* hpsi, const int ngk_ik, const bool is_first_node)const +template +void OperatorLRHxc::act(const int nbands, + const int nbasis, + const int npol, + const T* psi_in, + T* hpsi, + const int ngk_ik, + const bool is_first_node) const +{ + ModuleBase::TITLE("OperatorLRHxc", "act"); + const int& sl = ispin_ks[0]; + const auto psil_ks = LR_Util::get_psi_spin(psi_ks, sl, nk); + const int& lgd = gint->gridt->lgd; + + this->DM_trans->cal_DMR(); // DM_trans->get_DMR_vector() is 2d-block parallized + // LR_Util::print_DMR(*DM_trans, ucell.nat, "DMR"); + + // ========================= begin grid calculation========================= + this->grid_calculation(nbands); // DM(R) to H(R) + // ========================= end grid calculation ========================= + + // V(R)->V(k) + std::vector v_hxc_2d(nk, LR_Util::newTensor({pmat.get_col_size(), pmat.get_row_size()})); + for (auto& v: v_hxc_2d) + v.zero(); + int nrow = ModuleBase::GlobalFunc::IS_COLUMN_MAJOR_KS_SOLVER(PARAM.inp.ks_solver) ? this->pmat.get_row_size() + : this->pmat.get_col_size(); + for (int ik = 0; ik < nk; ++ik) { - ModuleBase::TITLE("OperatorLRHxc", "act"); - const int& sl = ispin_ks[0]; - const auto psil_ks = LR_Util::get_psi_spin(psi_ks, sl, nk); - const int& lgd = gint->gridt->lgd; - - this->DM_trans->cal_DMR(); //DM_trans->get_DMR_vector() is 2d-block parallized - // LR_Util::print_DMR(*DM_trans, ucell.nat, "DMR"); - - // ========================= begin grid calculation========================= - this->grid_calculation(nbands); //DM(R) to H(R) - // ========================= end grid calculation ========================= - - // V(R)->V(k) - std::vector v_hxc_2d(nk, LR_Util::newTensor({ pmat.get_col_size(), pmat.get_row_size() })); - for (auto& v : v_hxc_2d) v.zero(); - int nrow = ModuleBase::GlobalFunc::IS_COLUMN_MAJOR_KS_SOLVER(PARAM.inp.ks_solver) ? this->pmat.get_row_size() : this->pmat.get_col_size(); - for (int ik = 0;ik < nk;++ik) { folding_HR(*this->hR, v_hxc_2d[ik].data(), this->kv.kvec_d[ik], nrow, 1); } // V(R) -> V(k) - // LR_Util::print_HR(*this->hR, this->ucell.nat, "4.VR"); - // if (this->first_print) - // for (int ik = 0;ik < nk;++ik) - // LR_Util::print_tensor(v_hxc_2d[ik], "4.V(k)[ik=" + std::to_string(ik) + "]", &this->pmat); - - // 5. [AX]^{Hxc}_{ai}=\sum_{\mu,\nu}c^*_{a,\mu,}V^{Hxc}_{\mu,\nu}c_{\nu,i} + folding_HR(*this->hR, v_hxc_2d[ik].data(), this->kv.kvec_d[ik], nrow, 1); + } // V(R) -> V(k) + // LR_Util::print_HR(*this->hR, this->ucell.nat, "4.VR"); + // if (this->first_print) + // for (int ik = 0;ik < nk;++ik) + // LR_Util::print_tensor(v_hxc_2d[ik], "4.V(k)[ik=" + std::to_string(ik) + "]", &this->pmat); + + // 5. [AX]^{Hxc}_{ai}=\sum_{\mu,\nu}c^*_{a,\mu,}V^{Hxc}_{\mu,\nu}c_{\nu,i} #ifdef __MPI - ao_to_mo_pblas(v_hxc_2d, this->pmat, psil_ks, this->pc, naos, nocc[sl], nvirt[sl], this->pX[sl], hpsi); + ao_to_mo_pblas(v_hxc_2d, this->pmat, psil_ks, this->pc, naos, nocc[sl], nvirt[sl], this->pX[sl], hpsi); #else - ao_to_mo_blas(v_hxc_2d, psil_ks, nocc[sl], nvirt[sl], hpsi); + ao_to_mo_blas(v_hxc_2d, psil_ks, nocc[sl], nvirt[sl], hpsi); #endif - } +} +template <> +void OperatorLRHxc::grid_calculation(const int& nbands) const +{ + ModuleBase::TITLE("OperatorLRHxc", "grid_calculation(real)"); + ModuleBase::timer::tick("OperatorLRHxc", "grid_calculation"); + this->gint->transfer_DM2DtoGrid(this->DM_trans->get_DMR_vector()); // 2d block to grid + + // 2. transition electron density + // \f[ \tilde{\rho}(r)=\sum_{\mu_j, \mu_b}\tilde{\rho}_{\mu_j,\mu_b}\phi_{\mu_b}(r)\phi_{\mu_j}(r) \f] + double** rho_trans; + const int& nrxx = this->pot.lock()->nrxx; + LR_Util::_allocate_2order_nested_ptr(rho_trans, + 1, + nrxx); // currently gint_kernel_rho uses PARAM.inp.nspin, it needs refactor + ModuleBase::GlobalFunc::ZEROS(rho_trans[0], nrxx); + Gint_inout inout_rho(rho_trans, Gint_Tools::job_type::rho, 1, false); + this->gint->cal_gint(&inout_rho); + + // 3. v_hxc = f_hxc * rho_trans + ModuleBase::matrix vr_hxc(1, nrxx); // grid + this->pot.lock()->cal_v_eff(rho_trans, ucell, vr_hxc, ispin_ks); + LR_Util::_deallocate_2order_nested_ptr(rho_trans, 1); + + // 4. V^{Hxc}_{\mu,\nu}=\int{dr} \phi_\mu(r) v_{Hxc}(r) \phi_\mu(r) + Gint_inout inout_vlocal(vr_hxc.c, 0, Gint_Tools::job_type::vlocal); + this->gint->get_hRGint()->set_zero(); + this->gint->cal_gint(&inout_vlocal); + this->hR->set_zero(); // clear hR for each bands + this->gint->transfer_pvpR(&*this->hR, &ucell); // grid to 2d block + ModuleBase::timer::tick("OperatorLRHxc", "grid_calculation"); +} + +template <> +void OperatorLRHxc, base_device::DEVICE_CPU>::grid_calculation(const int& nbands) const +{ + ModuleBase::TITLE("OperatorLRHxc", "grid_calculation(complex)"); + ModuleBase::timer::tick("OperatorLRHxc", "grid_calculation"); - template<> - void OperatorLRHxc::grid_calculation(const int& nbands) const - { - ModuleBase::TITLE("OperatorLRHxc", "grid_calculation(real)"); - ModuleBase::timer::tick("OperatorLRHxc", "grid_calculation"); - this->gint->transfer_DM2DtoGrid(this->DM_trans->get_DMR_vector()); // 2d block to grid + elecstate::DensityMatrix, double> DM_trans_real_imag(&pmat, + 1, + kv.kvec_d, + kv.get_nks() / nspin); + DM_trans_real_imag.init_DMR(*this->hR); + hamilt::HContainer HR_real_imag(ucell, &this->pmat); + LR_Util::initialize_HR, double>(HR_real_imag, ucell, gd, orb_cutoff_); + + auto dmR_to_hR = [&, this](const char& type) -> void { + LR_Util::get_DMR_real_imag_part(*this->DM_trans, DM_trans_real_imag, ucell.nat, type); + // if (this->first_print)LR_Util::print_DMR(DM_trans_real_imag, ucell.nat, "DMR(2d, real)"); + + this->gint->transfer_DM2DtoGrid(DM_trans_real_imag.get_DMR_vector()); + // LR_Util::print_HR(*this->gint->get_DMRGint()[0], this->ucell.nat, "DMR(grid, real)"); // 2. transition electron density - // \f[ \tilde{\rho}(r)=\sum_{\mu_j, \mu_b}\tilde{\rho}_{\mu_j,\mu_b}\phi_{\mu_b}(r)\phi_{\mu_j}(r) \f] double** rho_trans; const int& nrxx = this->pot.lock()->nrxx; - LR_Util::_allocate_2order_nested_ptr(rho_trans, 1, nrxx); // currently gint_kernel_rho uses PARAM.inp.nspin, it needs refactor + + LR_Util::_allocate_2order_nested_ptr(rho_trans, 1, nrxx); // nspin=1 for transition density ModuleBase::GlobalFunc::ZEROS(rho_trans[0], nrxx); Gint_inout inout_rho(rho_trans, Gint_Tools::job_type::rho, 1, false); this->gint->cal_gint(&inout_rho); + // print_grid_nonzero(rho_trans[0], nrxx, 10, "rho_trans"); // 3. v_hxc = f_hxc * rho_trans - ModuleBase::matrix vr_hxc(1, nrxx); //grid + ModuleBase::matrix vr_hxc(1, nrxx); // grid this->pot.lock()->cal_v_eff(rho_trans, ucell, vr_hxc, ispin_ks); + // print_grid_nonzero(vr_hxc.c, this->poticab->nrxx, 10, "vr_hxc"); + LR_Util::_deallocate_2order_nested_ptr(rho_trans, 1); // 4. V^{Hxc}_{\mu,\nu}=\int{dr} \phi_\mu(r) v_{Hxc}(r) \phi_\mu(r) Gint_inout inout_vlocal(vr_hxc.c, 0, Gint_Tools::job_type::vlocal); this->gint->get_hRGint()->set_zero(); this->gint->cal_gint(&inout_vlocal); - this->hR->set_zero(); // clear hR for each bands - this->gint->transfer_pvpR(&*this->hR, &ucell); //grid to 2d block - ModuleBase::timer::tick("OperatorLRHxc", "grid_calculation"); - } - template<> - void OperatorLRHxc, base_device::DEVICE_CPU>::grid_calculation(const int& nbands) const + // LR_Util::print_HR(*this->gint->get_hRGint(), this->ucell.nat, "VR(grid)"); + HR_real_imag.set_zero(); + this->gint->transfer_pvpR(&HR_real_imag, &ucell, &this->gd); + // LR_Util::print_HR(HR_real_imag, this->ucell.nat, "VR(real, 2d)"); + LR_Util::set_HR_real_imag_part(HR_real_imag, *this->hR, ucell.nat, type); + }; + this->hR->set_zero(); + dmR_to_hR('R'); // real + if (kv.get_nks() / this->nspin > 1) { - ModuleBase::TITLE("OperatorLRHxc", "grid_calculation(complex)"); - ModuleBase::timer::tick("OperatorLRHxc", "grid_calculation"); - - elecstate::DensityMatrix, double> DM_trans_real_imag(&pmat, 1, kv.kvec_d, kv.get_nks() / nspin); - DM_trans_real_imag.init_DMR(*this->hR); - hamilt::HContainer HR_real_imag(ucell, &this->pmat); - LR_Util::initialize_HR, double>(HR_real_imag, ucell, gd, orb_cutoff_); - - auto dmR_to_hR = [&, this](const char& type) -> void - { - LR_Util::get_DMR_real_imag_part(*this->DM_trans, DM_trans_real_imag, ucell.nat, type); - // if (this->first_print)LR_Util::print_DMR(DM_trans_real_imag, ucell.nat, "DMR(2d, real)"); - - this->gint->transfer_DM2DtoGrid(DM_trans_real_imag.get_DMR_vector()); - // LR_Util::print_HR(*this->gint->get_DMRGint()[0], this->ucell.nat, "DMR(grid, real)"); - - // 2. transition electron density - double** rho_trans; - const int& nrxx = this->pot.lock()->nrxx; - - LR_Util::_allocate_2order_nested_ptr(rho_trans, 1, nrxx); // nspin=1 for transition density - ModuleBase::GlobalFunc::ZEROS(rho_trans[0], nrxx); - Gint_inout inout_rho(rho_trans, Gint_Tools::job_type::rho, 1, false); - this->gint->cal_gint(&inout_rho); - // print_grid_nonzero(rho_trans[0], nrxx, 10, "rho_trans"); - - // 3. v_hxc = f_hxc * rho_trans - ModuleBase::matrix vr_hxc(1, nrxx); //grid - this->pot.lock()->cal_v_eff(rho_trans, ucell, vr_hxc, ispin_ks); - // print_grid_nonzero(vr_hxc.c, this->poticab->nrxx, 10, "vr_hxc"); - - LR_Util::_deallocate_2order_nested_ptr(rho_trans, 1); - - // 4. V^{Hxc}_{\mu,\nu}=\int{dr} \phi_\mu(r) v_{Hxc}(r) \phi_\mu(r) - Gint_inout inout_vlocal(vr_hxc.c, 0, Gint_Tools::job_type::vlocal); - this->gint->get_hRGint()->set_zero(); - this->gint->cal_gint(&inout_vlocal); - - // LR_Util::print_HR(*this->gint->get_hRGint(), this->ucell.nat, "VR(grid)"); - HR_real_imag.set_zero(); - this->gint->transfer_pvpR(&HR_real_imag, &ucell, &this->gd); - // LR_Util::print_HR(HR_real_imag, this->ucell.nat, "VR(real, 2d)"); - LR_Util::set_HR_real_imag_part(HR_real_imag, *this->hR, ucell.nat, type); - }; - this->hR->set_zero(); - dmR_to_hR('R'); //real - if (kv.get_nks() / this->nspin > 1) { dmR_to_hR('I'); } //imag for multi-k - ModuleBase::timer::tick("OperatorLRHxc", "grid_calculation"); - } - - template class OperatorLRHxc; - template class OperatorLRHxc>; -} \ No newline at end of file + dmR_to_hR('I'); + } // imag for multi-k + ModuleBase::timer::tick("OperatorLRHxc", "grid_calculation"); +} + +template class OperatorLRHxc; +template class OperatorLRHxc>; +} // namespace LR \ No newline at end of file diff --git a/source/module_lr/potentials/pot_hxc_lrtd.cpp b/source/module_lr/potentials/pot_hxc_lrtd.cpp index d5aa2628ff..b7e24a3cd7 100644 --- a/source/module_lr/potentials/pot_hxc_lrtd.cpp +++ b/source/module_lr/potentials/pot_hxc_lrtd.cpp @@ -1,298 +1,332 @@ #include "pot_hxc_lrtd.h" -#include "module_parameter/parameter.h" + #include "module_elecstate/module_pot/H_Hartree_pw.h" -#include "module_base/timer.h" #include "module_hamilt_general/module_xc/xc_functional.h" -#include +#include "module_hamilt_pw/hamilt_pwdft/global.h" // tmp, for pgrid #include "module_lr/utils/lr_util.h" #include "module_lr/utils/lr_util_xc.hpp" -#include "module_hamilt_pw/hamilt_pwdft/global.h" // tmp, for pgrid -#define FXC_PARA_TYPE const double* const rho, ModuleBase::matrix& v_eff, const std::vector& ispin_op = { 0,0 } +#include "module_parameter/parameter.h" +#include "source_base/timer.h" + +#include +#define FXC_PARA_TYPE const double *const rho, ModuleBase::matrix &v_eff, const std::vector&ispin_op = {0, 0} namespace LR { - // constructor for exchange-correlation kernel - PotHxcLR::PotHxcLR(const std::string& xc_kernel, const ModulePW::PW_Basis& rho_basis, const UnitCell& ucell, - const Charge& chg_gs/*ground state*/, const Parallel_Grid& pgrid, - const SpinType& st, const std::vector& lr_init_xc_kernel) - :xc_kernel_(xc_kernel), tpiba_(ucell.tpiba), spin_type_(st), rho_basis_(rho_basis), nrxx_(chg_gs.nrxx), - nspin_(PARAM.inp.nspin == 1 || (PARAM.inp.nspin == 4 && !PARAM.globalv.domag && !PARAM.globalv.domag_z) ? 1 : 2), - pot_hartree_(LR_Util::make_unique(&rho_basis)), - xc_kernel_components_(rho_basis, ucell, chg_gs, pgrid, nspin_, xc_kernel, lr_init_xc_kernel, (st == SpinType::S2_updown)), //call XC_Functional::set_func_type and libxc - xc_type_(XCType(XC_Functional::get_func_type())) +// constructor for exchange-correlation kernel +PotHxcLR::PotHxcLR(const std::string& xc_kernel, + const ModulePW::PW_Basis& rho_basis, + const UnitCell& ucell, + const Charge& chg_gs /*ground state*/, + const Parallel_Grid& pgrid, + const SpinType& st, + const std::vector& lr_init_xc_kernel) + : xc_kernel_(xc_kernel), tpiba_(ucell.tpiba), spin_type_(st), rho_basis_(rho_basis), nrxx_(chg_gs.nrxx), + nspin_(PARAM.inp.nspin == 1 || (PARAM.inp.nspin == 4 && !PARAM.globalv.domag && !PARAM.globalv.domag_z) ? 1 : 2), + pot_hartree_(LR_Util::make_unique(&rho_basis)), + xc_kernel_components_(rho_basis, + ucell, + chg_gs, + pgrid, + nspin_, + xc_kernel, + lr_init_xc_kernel, + (st == SpinType::S2_updown)), // call XC_Functional::set_func_type and libxc + xc_type_(XCType(XC_Functional::get_func_type())) +{ + if (std::set({"lda", "pwlda", "pbe", "hse"}).count(xc_kernel)) { - if (std::set({ "lda", "pwlda", "pbe", "hse" }).count(xc_kernel)) { this->set_integral_func(this->spin_type_, this->xc_type_); } + this->set_integral_func(this->spin_type_, this->xc_type_); } +} - void PotHxcLR::cal_v_eff(double** rho, const UnitCell& ucell, ModuleBase::matrix& v_eff, const std::vector& ispin_op) - { - ModuleBase::TITLE("PotHxcLR", "cal_v_eff"); - ModuleBase::timer::tick("PotHxcLR", "cal_v_eff"); - auto& fxc = this->xc_kernel_components_; +void PotHxcLR::cal_v_eff(double** rho, + const UnitCell& ucell, + ModuleBase::matrix& v_eff, + const std::vector& ispin_op) +{ + ModuleBase::TITLE("PotHxcLR", "cal_v_eff"); + ModuleBase::timer::tick("PotHxcLR", "cal_v_eff"); + auto& fxc = this->xc_kernel_components_; - // Hartree - switch (this->spin_type_) - { - case SpinType::S1: case SpinType::S2_updown: - v_eff += elecstate::H_Hartree_pw::v_hartree(ucell, const_cast(&this->rho_basis_), 1, rho); - break; - case SpinType::S2_singlet: - v_eff += 2 * elecstate::H_Hartree_pw::v_hartree(ucell, const_cast(&this->rho_basis_), 1, rho); - break; - default: - break; - } - // XC - if (this->xc_kernel_ == "rpa" || this->xc_kernel_ == "hf") { return; } // no xc + // Hartree + switch (this->spin_type_) + { + case SpinType::S1: + case SpinType::S2_updown: + v_eff += elecstate::H_Hartree_pw::v_hartree(ucell, const_cast(&this->rho_basis_), 1, rho); + break; + case SpinType::S2_singlet: + v_eff + += 2 + * elecstate::H_Hartree_pw::v_hartree(ucell, const_cast(&this->rho_basis_), 1, rho); + break; + default: + break; + } + // XC + if (this->xc_kernel_ == "rpa" || this->xc_kernel_ == "hf") + { + return; + } // no xc #ifdef USE_LIBXC - this->kernel_to_potential_[spin_type_](rho[0], v_eff, ispin_op); + this->kernel_to_potential_[spin_type_](rho[0], v_eff, ispin_op); #else - throw std::domain_error("GlobalV::XC_Functional::get_func_type() =" + std::to_string(XC_Functional::get_func_type()) - + " unfinished in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); + throw std::domain_error("GlobalV::XC_Functional::get_func_type() =" + std::to_string(XC_Functional::get_func_type()) + + " unfinished in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); #endif - ModuleBase::timer::tick("PotHxcLR", "cal_v_eff"); - } + ModuleBase::timer::tick("PotHxcLR", "cal_v_eff"); +} - void PotHxcLR::set_integral_func(const SpinType& s, const XCType& xc) +void PotHxcLR::set_integral_func(const SpinType& s, const XCType& xc) +{ + auto& funcs = this->kernel_to_potential_; + auto& fxc = this->xc_kernel_components_; + if (xc == XCType::LDA) { - auto& funcs = this->kernel_to_potential_; - auto& fxc = this->xc_kernel_components_; - if (xc == XCType::LDA) { switch (s) + switch (s) { case SpinType::S1: - funcs[s] = [this, &fxc](FXC_PARA_TYPE)->void + funcs[s] = [this, &fxc](FXC_PARA_TYPE) -> void { + for (int ir = 0; ir < nrxx; ++ir) { - for (int ir = 0;ir < nrxx;++ir) { v_eff(0, ir) += ModuleBase::e2 * fxc.v2rho2.at(ir) * rho[ir]; } - }; + v_eff(0, ir) += ModuleBase::e2 * fxc.v2rho2.at(ir) * rho[ir]; + } + }; break; case SpinType::S2_singlet: - funcs[s] = [this, &fxc](FXC_PARA_TYPE)->void + funcs[s] = [this, &fxc](FXC_PARA_TYPE) -> void { + for (int ir = 0; ir < nrxx; ++ir) { - for (int ir = 0;ir < nrxx;++ir) - { - const int irs0 = 3 * ir; - const int irs1 = irs0 + 1; - v_eff(0, ir) += ModuleBase::e2 * (fxc.v2rho2.at(irs0) + fxc.v2rho2.at(irs1)) * rho[ir]; - } - }; + const int irs0 = 3 * ir; + const int irs1 = irs0 + 1; + v_eff(0, ir) += ModuleBase::e2 * (fxc.v2rho2.at(irs0) + fxc.v2rho2.at(irs1)) * rho[ir]; + } + }; break; case SpinType::S2_triplet: - funcs[s] = [this, &fxc](FXC_PARA_TYPE)->void + funcs[s] = [this, &fxc](FXC_PARA_TYPE) -> void { + for (int ir = 0; ir < nrxx; ++ir) { - for (int ir = 0;ir < nrxx;++ir) - { - const int irs0 = 3 * ir; - const int irs1 = irs0 + 1; - v_eff(0, ir) += ModuleBase::e2 * (fxc.v2rho2.at(irs0) - fxc.v2rho2.at(irs1)) * rho[ir]; - } - }; + const int irs0 = 3 * ir; + const int irs1 = irs0 + 1; + v_eff(0, ir) += ModuleBase::e2 * (fxc.v2rho2.at(irs0) - fxc.v2rho2.at(irs1)) * rho[ir]; + } + }; break; case SpinType::S2_updown: - funcs[s] = [this, &fxc](FXC_PARA_TYPE)->void + funcs[s] = [this, &fxc](FXC_PARA_TYPE) -> void { + assert(ispin_op.size() >= 2); + const int is = ispin_op[0] + ispin_op[1]; + for (int ir = 0; ir < nrxx; ++ir) { - assert(ispin_op.size() >= 2); - const int is = ispin_op[0] + ispin_op[1]; - for (int ir = 0;ir < nrxx;++ir) { v_eff(0, ir) += ModuleBase::e2 * fxc.v2rho2.at(3 * ir + is) * rho[ir]; } - }; + v_eff(0, ir) += ModuleBase::e2 * fxc.v2rho2.at(3 * ir + is) * rho[ir]; + } + }; break; default: - throw std::domain_error("SpinType =" + std::to_string(static_cast(s)) - + " unfinished in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); + throw std::domain_error("SpinType =" + std::to_string(static_cast(s)) + " unfinished in " + + std::string(__FILE__) + " line " + std::to_string(__LINE__)); break; } - } else if (xc == XCType::GGA || xc == XCType::HYB_GGA) { switch (s) + } + else if (xc == XCType::GGA || xc == XCType::HYB_GGA) + { + switch (s) { case SpinType::S1: - funcs[s] = [this, &fxc](FXC_PARA_TYPE)->void - { - // test: output drho - // double thr = 1e-1; - // auto out_thr = [this, &thr](const double* v) { - // for (int ir = 0;ir < nrxx;++ir) if (std::abs(v[ir]) > thr) std::cout << v[ir] << " "; - // std::cout << std::endl;}; - // auto out_thr3 = [this, &thr](const std::vector>& v) { - // for (int ir = 0;ir < nrxx;++ir) if (std::abs(v.at(ir).x) > thr) std::cout << v.at(ir).x << " "; - // std::cout << std::endl; - // for (int ir = 0;ir < nrxx;++ir) if (std::abs(v.at(ir).y) > thr) std::cout << v.at(ir).y << " "; - // std::cout << std::endl; - // for (int ir = 0;ir < nrxx;++ir) if (std::abs(v.at(ir).z) > thr) std::cout << v.at(ir).z << " "; - // std::cout << std::endl;}; + funcs[s] = [this, &fxc](FXC_PARA_TYPE) -> void { + // test: output drho + // double thr = 1e-1; + // auto out_thr = [this, &thr](const double* v) { + // for (int ir = 0;ir < nrxx;++ir) if (std::abs(v[ir]) > thr) std::cout << v[ir] << " "; + // std::cout << std::endl;}; + // auto out_thr3 = [this, &thr](const std::vector>& v) { + // for (int ir = 0;ir < nrxx;++ir) if (std::abs(v.at(ir).x) > thr) std::cout << v.at(ir).x << " "; + // std::cout << std::endl; + // for (int ir = 0;ir < nrxx;++ir) if (std::abs(v.at(ir).y) > thr) std::cout << v.at(ir).y << " "; + // std::cout << std::endl; + // for (int ir = 0;ir < nrxx;++ir) if (std::abs(v.at(ir).z) > thr) std::cout << v.at(ir).z << " "; + // std::cout << std::endl;}; - std::vector> drho(nrxx); // transition density gradient - LR_Util::grad(rho, drho.data(), this->rho_basis_, this->tpiba_); + std::vector> drho(nrxx); // transition density gradient + LR_Util::grad(rho, drho.data(), this->rho_basis_, this->tpiba_); - std::vector vxc_tmp(nrxx, 0.0); + std::vector vxc_tmp(nrxx, 0.0); - //1. $\partial E/\partial\rho = 2f^{\rho\sigma}*\nabla\rho*\rho_1+4f^{\sigma\sigma}\nabla\rho(\nabla\rho\cdot\nabla\rho_1)+2v^\sigma\nabla\rho_1$ - std::vector> e_drho(nrxx); - for (int ir = 0;ir < nrxx;++ir) - { - e_drho[ir] = -(fxc.v2rhosigma_2drho.at(ir) * rho[ir] - + fxc.v2sigma2_4drho.at(ir) * (fxc.drho_gs.at(0).at(ir) * drho.at(ir)) - + drho.at(ir) * fxc.vsigma.at(ir) * 2.); - } - XC_Functional::grad_dot(e_drho.data(), vxc_tmp.data(), &this->rho_basis_, this->tpiba_); + // 1. $\partial E/\partial\rho = + // 2f^{\rho\sigma}*\nabla\rho*\rho_1+4f^{\sigma\sigma}\nabla\rho(\nabla\rho\cdot\nabla\rho_1)+2v^\sigma\nabla\rho_1$ + std::vector> e_drho(nrxx); + for (int ir = 0; ir < nrxx; ++ir) + { + e_drho[ir] = -(fxc.v2rhosigma_2drho.at(ir) * rho[ir] + + fxc.v2sigma2_4drho.at(ir) * (fxc.drho_gs.at(0).at(ir) * drho.at(ir)) + + drho.at(ir) * fxc.vsigma.at(ir) * 2.); + } + XC_Functional::grad_dot(e_drho.data(), vxc_tmp.data(), &this->rho_basis_, this->tpiba_); - // 2. $f^{\rho\rho}\rho_1+2f^{\rho\sigma}\nabla\rho\cdot\nabla\rho_1$ - for (int ir = 0;ir < nrxx;++ir) - { - vxc_tmp[ir] += (fxc.v2rho2.at(ir) * rho[ir] - + fxc.v2rhosigma_2drho.at(ir) * drho.at(ir)); - } - BlasConnector::axpy(nrxx, ModuleBase::e2, vxc_tmp.data(), 1, v_eff.c, 1); - }; + // 2. $f^{\rho\rho}\rho_1+2f^{\rho\sigma}\nabla\rho\cdot\nabla\rho_1$ + for (int ir = 0; ir < nrxx; ++ir) + { + vxc_tmp[ir] += (fxc.v2rho2.at(ir) * rho[ir] + fxc.v2rhosigma_2drho.at(ir) * drho.at(ir)); + } + BlasConnector::axpy(nrxx, ModuleBase::e2, vxc_tmp.data(), 1, v_eff.c, 1); + }; break; case SpinType::S2_singlet: - funcs[s] = [this, &fxc](FXC_PARA_TYPE)-> void - { - std::vector> drho(nrxx); // transition density gradient - LR_Util::grad(rho, drho.data(), this->rho_basis_, this->tpiba_); + funcs[s] = [this, &fxc](FXC_PARA_TYPE) -> void { + std::vector> drho(nrxx); // transition density gradient + LR_Util::grad(rho, drho.data(), this->rho_basis_, this->tpiba_); - std::vector vxc_tmp(nrxx, 0.0); + std::vector vxc_tmp(nrxx, 0.0); - // 1. the terms in grad_dot int f_uu - std::vector> gdot_terms(nrxx); - for (int ir = 0;ir < nrxx;++ir) - { - // gdot terms in f_uu - gdot_terms[ir] = -(rho[ir] * fxc.v2rhosigma_drho_singlet.at(ir) - + (fxc.drho_gs.at(0).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_singlet.at(ir) - + drho.at(ir) * (fxc.vsigma.at(ir * 3) * 2. + fxc.vsigma.at(ir * 3 + 1))); - } - XC_Functional::grad_dot(gdot_terms.data(), vxc_tmp.data(), &this->rho_basis_, this->tpiba_); + // 1. the terms in grad_dot int f_uu + std::vector> gdot_terms(nrxx); + for (int ir = 0; ir < nrxx; ++ir) + { + // gdot terms in f_uu + gdot_terms[ir] = -(rho[ir] * fxc.v2rhosigma_drho_singlet.at(ir) + + (fxc.drho_gs.at(0).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_singlet.at(ir) + + drho.at(ir) * (fxc.vsigma.at(ir * 3) * 2. + fxc.vsigma.at(ir * 3 + 1))); + } + XC_Functional::grad_dot(gdot_terms.data(), vxc_tmp.data(), &this->rho_basis_, this->tpiba_); - // 2. terms not in grad_dot - for (int ir = 0;ir < nrxx;++ir) - { - vxc_tmp[ir] += rho[ir] * (fxc.v2rho2.at(ir * 3) + fxc.v2rho2.at(ir * 3 + 1)) - + drho.at(ir) * fxc.v2rhosigma_drho_singlet.at(ir); - } - BlasConnector::axpy(nrxx, ModuleBase::e2, vxc_tmp.data(), 1, v_eff.c, 1); - }; + // 2. terms not in grad_dot + for (int ir = 0; ir < nrxx; ++ir) + { + vxc_tmp[ir] += rho[ir] * (fxc.v2rho2.at(ir * 3) + fxc.v2rho2.at(ir * 3 + 1)) + + drho.at(ir) * fxc.v2rhosigma_drho_singlet.at(ir); + } + BlasConnector::axpy(nrxx, ModuleBase::e2, vxc_tmp.data(), 1, v_eff.c, 1); + }; break; case SpinType::S2_triplet: - funcs[s] = [this, &fxc](FXC_PARA_TYPE)->void - { - std::vector> drho(nrxx); // transition density gradient - LR_Util::grad(rho, drho.data(), this->rho_basis_, this->tpiba_); + funcs[s] = [this, &fxc](FXC_PARA_TYPE) -> void { + std::vector> drho(nrxx); // transition density gradient + LR_Util::grad(rho, drho.data(), this->rho_basis_, this->tpiba_); - std::vector vxc_tmp(nrxx, 0.0); + std::vector vxc_tmp(nrxx, 0.0); - // 1. the terms in grad_dot int f_uu - std::vector> gdot_terms(nrxx); - for (int ir = 0;ir < nrxx;++ir) - { - // gdot terms in f_uu - gdot_terms[ir] = -(rho[ir] * fxc.v2rhosigma_drho_triplet.at(ir) - + (fxc.drho_gs.at(0).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_triplet.at(ir) - + drho.at(ir) * (fxc.vsigma.at(ir * 3) * 2. - fxc.vsigma.at(ir * 3 + 1))); - } - XC_Functional::grad_dot(gdot_terms.data(), vxc_tmp.data(), &this->rho_basis_, this->tpiba_); + // 1. the terms in grad_dot int f_uu + std::vector> gdot_terms(nrxx); + for (int ir = 0; ir < nrxx; ++ir) + { + // gdot terms in f_uu + gdot_terms[ir] = -(rho[ir] * fxc.v2rhosigma_drho_triplet.at(ir) + + (fxc.drho_gs.at(0).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_triplet.at(ir) + + drho.at(ir) * (fxc.vsigma.at(ir * 3) * 2. - fxc.vsigma.at(ir * 3 + 1))); + } + XC_Functional::grad_dot(gdot_terms.data(), vxc_tmp.data(), &this->rho_basis_, this->tpiba_); - // 2. terms not in grad_dot - for (int ir = 0;ir < nrxx;++ir) - { - vxc_tmp[ir] += rho[ir] * (fxc.v2rho2.at(ir * 3) - fxc.v2rho2.at(ir * 3 + 1)) - + drho.at(ir) * fxc.v2rhosigma_drho_triplet.at(ir); - } - BlasConnector::axpy(nrxx, ModuleBase::e2, vxc_tmp.data(), 1, v_eff.c, 1); - }; + // 2. terms not in grad_dot + for (int ir = 0; ir < nrxx; ++ir) + { + vxc_tmp[ir] += rho[ir] * (fxc.v2rho2.at(ir * 3) - fxc.v2rho2.at(ir * 3 + 1)) + + drho.at(ir) * fxc.v2rhosigma_drho_triplet.at(ir); + } + BlasConnector::axpy(nrxx, ModuleBase::e2, vxc_tmp.data(), 1, v_eff.c, 1); + }; break; case SpinType::S2_updown: - funcs[s] = [this, &fxc](FXC_PARA_TYPE)->void - { - assert(ispin_op.size() >= 2); - std::vector> drho(nrxx); // transition density gradient - LR_Util::grad(rho, drho.data(), this->rho_basis_, this->tpiba_); + funcs[s] = [this, &fxc](FXC_PARA_TYPE) -> void { + assert(ispin_op.size() >= 2); + std::vector> drho(nrxx); // transition density gradient + LR_Util::grad(rho, drho.data(), this->rho_basis_, this->tpiba_); - std::vector vxc_tmp(nrxx, 0.0); + std::vector vxc_tmp(nrxx, 0.0); - // 1. the terms in grad_dot int f_uu - std::vector> gdot_terms(nrxx); - switch (ispin_op[0] << 1 | ispin_op[1]) + // 1. the terms in grad_dot int f_uu + std::vector> gdot_terms(nrxx); + switch (ispin_op[0] << 1 | ispin_op[1]) + { + case 0: // (0,0) + for (int ir = 0; ir < nrxx; ++ir) + { + gdot_terms[ir] = -(rho[ir] * fxc.v2rhosigma_drho_uu.at(ir) + + (fxc.drho_gs.at(0).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_uu_u.at(ir) + + (fxc.drho_gs.at(1).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_uu_d.at(ir) + + drho.at(ir) * fxc.vsigma.at(ir * 3) * 2.); + } + break; + case 1: // (0,1) + for (int ir = 0; ir < nrxx; ++ir) + { + gdot_terms[ir] = -(rho[ir] * fxc.v2rhosigma_drho_du.at(ir) // rho_d, drho_u + + (fxc.drho_gs.at(0).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_ud_u.at(ir) + + (fxc.drho_gs.at(1).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_ud_d.at(ir) + + drho.at(ir) * fxc.vsigma.at(ir * 3 + 1)); + } + break; + case 2: // (1,0) + for (int ir = 0; ir < nrxx; ++ir) + { + gdot_terms[ir] = -(rho[ir] * fxc.v2rhosigma_drho_ud.at(ir) // rho_u, drho_d + + (fxc.drho_gs.at(0).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_du_u.at(ir) + + (fxc.drho_gs.at(1).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_du_d.at(ir) + + drho.at(ir) * fxc.vsigma.at(ir * 3 + 1)); + } + break; + case 3: // (1,1) + for (int ir = 0; ir < nrxx; ++ir) { - case 0: // (0,0) - for (int ir = 0;ir < nrxx;++ir) - { - gdot_terms[ir] = -(rho[ir] * fxc.v2rhosigma_drho_uu.at(ir) - + (fxc.drho_gs.at(0).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_uu_u.at(ir) - + (fxc.drho_gs.at(1).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_uu_d.at(ir) - + drho.at(ir) * fxc.vsigma.at(ir * 3) * 2.); - } - break; - case 1: // (0,1) - for (int ir = 0;ir < nrxx;++ir) - { - gdot_terms[ir] = -(rho[ir] * fxc.v2rhosigma_drho_du.at(ir) // rho_d, drho_u - + (fxc.drho_gs.at(0).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_ud_u.at(ir) - + (fxc.drho_gs.at(1).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_ud_d.at(ir) - + drho.at(ir) * fxc.vsigma.at(ir * 3 + 1)); - } - break; - case 2: // (1,0) - for (int ir = 0;ir < nrxx;++ir) - { - gdot_terms[ir] = -(rho[ir] * fxc.v2rhosigma_drho_ud.at(ir) // rho_u, drho_d - + (fxc.drho_gs.at(0).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_du_u.at(ir) - + (fxc.drho_gs.at(1).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_du_d.at(ir) - + drho.at(ir) * fxc.vsigma.at(ir * 3 + 1)); - } - break; - case 3: // (1,1) - for (int ir = 0;ir < nrxx;++ir) - { - gdot_terms[ir] = -(rho[ir] * fxc.v2rhosigma_drho_dd.at(ir) - + (fxc.drho_gs.at(0).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_dd_u.at(ir) - + (fxc.drho_gs.at(1).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_dd_d.at(ir) - + drho.at(ir) * fxc.vsigma.at(ir * 3 + 2) * 2.); - } - break; - default: - throw std::runtime_error("Invalid ispin_op"); + gdot_terms[ir] = -(rho[ir] * fxc.v2rhosigma_drho_dd.at(ir) + + (fxc.drho_gs.at(0).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_dd_u.at(ir) + + (fxc.drho_gs.at(1).at(ir) * drho.at(ir)) * fxc.v2sigma2_drho_dd_d.at(ir) + + drho.at(ir) * fxc.vsigma.at(ir * 3 + 2) * 2.); } - XC_Functional::grad_dot(gdot_terms.data(), vxc_tmp.data(), &this->rho_basis_, this->tpiba_); + break; + default: + throw std::runtime_error("Invalid ispin_op"); + } + XC_Functional::grad_dot(gdot_terms.data(), vxc_tmp.data(), &this->rho_basis_, this->tpiba_); - // 2. terms not in grad_dot - switch (ispin_op[0] << 1 | ispin_op[1]) + // 2. terms not in grad_dot + switch (ispin_op[0] << 1 | ispin_op[1]) + { + case 0: + for (int ir = 0; ir < nrxx; ++ir) + { + vxc_tmp[ir] += rho[ir] * fxc.v2rho2.at(ir * 3) + drho.at(ir) * fxc.v2rhosigma_drho_uu.at(ir); + } + break; + case 1: + for (int ir = 0; ir < nrxx; ++ir) { - case 0: - for (int ir = 0;ir < nrxx;++ir) - { - vxc_tmp[ir] += rho[ir] * fxc.v2rho2.at(ir * 3) + drho.at(ir) * fxc.v2rhosigma_drho_uu.at(ir); - } - break; - case 1: - for (int ir = 0;ir < nrxx;++ir) - { - vxc_tmp[ir] += rho[ir] * fxc.v2rho2.at(ir * 3 + 1) + drho.at(ir) * fxc.v2rhosigma_drho_ud.at(ir); - } - break; - case 2: - for (int ir = 0;ir < nrxx;++ir) - { - vxc_tmp[ir] += rho[ir] * fxc.v2rho2.at(ir * 3 + 1) + drho.at(ir) * fxc.v2rhosigma_drho_du.at(ir); - } - break; - case 3: - for (int ir = 0;ir < nrxx;++ir) - { - vxc_tmp[ir] += rho[ir] * fxc.v2rho2.at(ir * 3 + 2) + drho.at(ir) * fxc.v2rhosigma_drho_dd.at(ir); - } - break; - default: - throw std::runtime_error("Invalid ispin_op"); + vxc_tmp[ir] + += rho[ir] * fxc.v2rho2.at(ir * 3 + 1) + drho.at(ir) * fxc.v2rhosigma_drho_ud.at(ir); } - BlasConnector::axpy(nrxx, ModuleBase::e2, vxc_tmp.data(), 1, v_eff.c, 1); - }; + break; + case 2: + for (int ir = 0; ir < nrxx; ++ir) + { + vxc_tmp[ir] + += rho[ir] * fxc.v2rho2.at(ir * 3 + 1) + drho.at(ir) * fxc.v2rhosigma_drho_du.at(ir); + } + break; + case 3: + for (int ir = 0; ir < nrxx; ++ir) + { + vxc_tmp[ir] + += rho[ir] * fxc.v2rho2.at(ir * 3 + 2) + drho.at(ir) * fxc.v2rhosigma_drho_dd.at(ir); + } + break; + default: + throw std::runtime_error("Invalid ispin_op"); + } + BlasConnector::axpy(nrxx, ModuleBase::e2, vxc_tmp.data(), 1, v_eff.c, 1); + }; break; default: - throw std::domain_error("SpinType =" + std::to_string(static_cast(s)) + "for GGA or HYB_GGA is unfinished in " - + std::string(__FILE__) + " line " + std::to_string(__LINE__)); + throw std::domain_error("SpinType =" + std::to_string(static_cast(s)) + + "for GGA or HYB_GGA is unfinished in " + std::string(__FILE__) + " line " + + std::to_string(__LINE__)); break; } - } else - { - throw std::domain_error("GlobalV::XC_Functional::get_func_type() =" + std::to_string(XC_Functional::get_func_type()) - + " unfinished in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); - } } + else + { + throw std::domain_error("GlobalV::XC_Functional::get_func_type() =" + + std::to_string(XC_Functional::get_func_type()) + " unfinished in " + + std::string(__FILE__) + " line " + std::to_string(__LINE__)); + } +} } // namespace LR diff --git a/source/module_lr/potentials/xc_kernel.cpp b/source/module_lr/potentials/xc_kernel.cpp index 1c7bd09809..1c82fe5942 100644 --- a/source/module_lr/potentials/xc_kernel.cpp +++ b/source/module_lr/potentials/xc_kernel.cpp @@ -1,49 +1,63 @@ #include "xc_kernel.h" + #include "module_hamilt_general/module_xc/xc_functional.h" -#include "module_parameter/parameter.h" -#include "module_base/timer.h" +#include "module_io/cube_io.h" #include "module_lr/utils/lr_util.h" #include "module_lr/utils/lr_util_xc.hpp" -#include +#include "module_parameter/parameter.h" +#include "source_base/timer.h" + #include -#include "module_io/cube_io.h" +#include #ifdef USE_LIBXC -#include #include "module_hamilt_general/module_xc/xc_functional_libxc.h" + +#include #endif #ifdef _OPENMP #include #endif LR::KernelXC::KernelXC(const ModulePW::PW_Basis& rho_basis, - const UnitCell& ucell, - const Charge& chg_gs, - const Parallel_Grid& pgrid, - const int& nspin, - const std::string& kernel_name, - const std::vector& lr_init_xc_kernel, - const bool openshell) :rho_basis_(rho_basis), openshell_(openshell) + const UnitCell& ucell, + const Charge& chg_gs, + const Parallel_Grid& pgrid, + const int& nspin, + const std::string& kernel_name, + const std::vector& lr_init_xc_kernel, + const bool openshell) + : rho_basis_(rho_basis), openshell_(openshell) { - if (!std::set({ "lda", "pwlda", "pbe", "hse" }).count(kernel_name)) { return; } - XC_Functional::set_xc_type(kernel_name); // for hse, (1-alpha) and omega are set here + if (!std::set({"lda", "pwlda", "pbe", "hse"}).count(kernel_name)) + { + return; + } + XC_Functional::set_xc_type(kernel_name); // for hse, (1-alpha) and omega are set here const int& nrxx = rho_basis.nrxx; if (lr_init_xc_kernel[0] == "file") { - const std::set lda_xc = { "lda", "pwlda" }; + const std::set lda_xc = {"lda", "pwlda"}; assert(lda_xc.count(kernel_name)); - const int n_component = (1 == nspin) ? 1 : 3; // spin components of fxc: (uu, ud=du, dd) when nspin=2 + const int n_component = (1 == nspin) ? 1 : 3; // spin components of fxc: (uu, ud=du, dd) when nspin=2 this->v2rho2_.resize(n_component * nrxx); // read fxc adn add to xc_kernel_components assert(lr_init_xc_kernel.size() >= n_component + 1); - for (int is = 0;is < n_component;++is) + for (int is = 0; is < n_component; ++is) { double ef = 0.0; int prenspin = 1; std::vector v2rho2_tmp(nrxx); - ModuleIO::read_vdata_palgrid(pgrid, GlobalV::MY_RANK, GlobalV::ofs_running, lr_init_xc_kernel[is + 1], - v2rho2_tmp.data(), ucell.nat); - for (int ir = 0;ir < nrxx;++ir) { this->v2rho2_[ir * n_component + is] = v2rho2_tmp[ir]; } + ModuleIO::read_vdata_palgrid(pgrid, + GlobalV::MY_RANK, + GlobalV::ofs_running, + lr_init_xc_kernel[is + 1], + v2rho2_tmp.data(), + ucell.nat); + for (int ir = 0; ir < nrxx; ++ir) + { + this->v2rho2_[ir * n_component + is] = v2rho2_tmp[ir]; + } } return; } @@ -56,17 +70,24 @@ LR::KernelXC::KernelXC(const ModulePW::PW_Basis& rho_basis, LR_Util::_allocate_2order_nested_ptr(rho_for_fxc, nspin, nrxx); double ef = 0.0; int prenspin = 1; - for (int is = 0;is < nspin;++is) + for (int is = 0; is < nspin; ++is) { const std::string file = lr_init_xc_kernel[lr_init_xc_kernel.size() > nspin ? 1 + is : 1]; - ModuleIO::read_vdata_palgrid(pgrid, GlobalV::MY_RANK, GlobalV::ofs_running, file, - rho_for_fxc[is], ucell.nat); + ModuleIO::read_vdata_palgrid(pgrid, + GlobalV::MY_RANK, + GlobalV::ofs_running, + file, + rho_for_fxc[is], + ucell.nat); } this->f_xc_libxc(nspin, ucell.omega, ucell.tpiba, rho_for_fxc, chg_gs.rho_core); LR_Util::_deallocate_2order_nested_ptr(rho_for_fxc, nspin); } - else { this->f_xc_libxc(nspin, ucell.omega, ucell.tpiba, chg_gs.rho, chg_gs.rho_core); } -#else + else + { + this->f_xc_libxc(nspin, ucell.omega, ucell.tpiba, chg_gs.rho, chg_gs.rho_core); + } +#else ModuleBase::WARNING_QUIT("KernelXC", "to calculate xc-kernel in LR-TDDFT, compile with LIBXC"); #endif } @@ -77,7 +98,7 @@ inline void add_op(const T* const src1, const T* const src2, T* const dst, const #ifdef _OPENMP #pragma omp parallel for schedule(static, 4096) #endif - for (int i = 0;i < size;++i) + for (int i = 0; i < size; ++i) { dst[i] = src1[i] + src2[i]; } @@ -93,7 +114,7 @@ inline void add_assign_op(const std::vector& src, std::vector& dst) { add_op(src, dst, dst); } -template +template inline void cutoff_grid_data_spin2(std::vector& func, const std::vector& mask) { const int& nrxx = mask.size() / 2; @@ -102,17 +123,25 @@ inline void cutoff_grid_data_spin2(std::vector& func, const std::vecto #ifdef _OPENMP #pragma omp parallel for schedule(static, 4096) #endif - for (int ir = 0;ir < nrxx;++ir) + for (int ir = 0; ir < nrxx; ++ir) { const int& i2 = 2 * ir; const int& istart = n_component * ir; - std::for_each(func.begin() + istart, func.begin() + istart + n_component - 1, [&](Telement& f) { f *= mask[i2]; }); //spin-up - std::for_each(func.begin() + istart + 1, func.begin() + istart + n_component, [&](Telement& f) { f *= mask[i2 + 1]; }); //spin-down + std::for_each(func.begin() + istart, func.begin() + istart + n_component - 1, [&](Telement& f) { + f *= mask[i2]; + }); // spin-up + std::for_each(func.begin() + istart + 1, func.begin() + istart + n_component, [&](Telement& f) { + f *= mask[i2 + 1]; + }); // spin-down } } #ifdef USE_LIBXC -void LR::KernelXC::f_xc_libxc(const int& nspin, const double& omega, const double& tpiba, const double* const* const rho_gs, const double* const rho_core) +void LR::KernelXC::f_xc_libxc(const int& nspin, + const double& omega, + const double& tpiba, + const double* const* const rho_gs, + const double* const rho_core) { ModuleBase::TITLE("XC_Functional", "f_xc_libxc"); ModuleBase::timer::tick("XC_Functional", "f_xc_libxc"); @@ -120,32 +149,45 @@ void LR::KernelXC::f_xc_libxc(const int& nspin, const double& omega, const doubl assert(nspin == 1 || nspin == 2); - std::vector funcs = XC_Functional_Libxc::init_func( - XC_Functional::get_func_id(), - (1 == nspin) ? XC_UNPOLARIZED : XC_POLARIZED); + std::vector funcs + = XC_Functional_Libxc::init_func(XC_Functional::get_func_id(), (1 == nspin) ? XC_UNPOLARIZED : XC_POLARIZED); const int& nrxx = rho_basis_.nrxx; // converting rho (extract it as a subfuntion in the future) // ----------------------------------------------------------------------------------- - std::vector rho(nspin * nrxx); // r major / spin contigous + std::vector rho(nspin * nrxx); // r major / spin contigous #ifdef _OPENMP #pragma omp parallel for collapse(2) schedule(static, 1024) #endif - for (int is = 0; is < nspin; ++is) { for (int ir = 0; ir < nrxx; ++ir) { rho[ir * nspin + is] = rho_gs[is][ir]; } } + for (int is = 0; is < nspin; ++is) + { + for (int ir = 0; ir < nrxx; ++ir) + { + rho[ir * nspin + is] = rho_gs[is][ir]; + } + } if (rho_core) { const double fac = 1.0 / nspin; - for (int is = 0; is < nspin; ++is) { for (int ir = 0; ir < nrxx; ++ir) { rho[ir * nspin + is] += fac * rho_core[ir]; } } + for (int is = 0; is < nspin; ++is) + { + for (int ir = 0; ir < nrxx; ++ir) + { + rho[ir * nspin + is] += fac * rho_core[ir]; + } + } } // ----------------------------------------------------------------------------------- // for GGA - const bool is_gga = std::any_of(funcs.begin(), funcs.end(), [](const xc_func_type& f) { return f.info->family == XC_FAMILY_GGA || f.info->family == XC_FAMILY_HYB_GGA; }); + const bool is_gga = std::any_of(funcs.begin(), funcs.end(), [](const xc_func_type& f) { + return f.info->family == XC_FAMILY_GGA || f.info->family == XC_FAMILY_HYB_GGA; + }); - std::vector>> gradrho; // \nabla \rho - std::vector sigma; // |\nabla\rho|^2 - std::vector sgn; // sgn for threshold mask + std::vector>> gradrho; // \nabla \rho + std::vector sigma; // |\nabla\rho|^2 + std::vector sgn; // sgn for threshold mask if (is_gga) { // 0. set up sgn for threshold mask @@ -160,8 +202,10 @@ void LR::KernelXC::f_xc_libxc(const int& nspin, const double& omega, const doubl #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for (int ir = 0; ir < nrxx; ++ir) { rhor[ir] = rho[ir * nspin + is]; -} + for (int ir = 0; ir < nrxx; ++ir) + { + rhor[ir] = rho[ir * nspin + is]; + } gradrho[is].resize(nrxx); LR_Util::grad(rhor.data(), gradrho[is].data(), rho_basis_, tpiba); } @@ -172,9 +216,10 @@ void LR::KernelXC::f_xc_libxc(const int& nspin, const double& omega, const doubl #ifdef _OPENMP #pragma omp parallel for schedule(static, 1024) #endif - for (int ir = 0; ir < nrxx; ++ir) { + for (int ir = 0; ir < nrxx; ++ir) + { sigma[ir] = gradrho[0][ir] * gradrho[0][ir]; -} + } } else { @@ -192,24 +237,28 @@ void LR::KernelXC::f_xc_libxc(const int& nspin, const double& omega, const doubl // ----------------------------------------------------------------------------------- //==================== XC Kernels (f_xc)============================= this->vrho_.resize(nspin * nrxx, 0.); - this->v2rho2_.resize(((1 == nspin) ? 1 : 3) * nrxx, 0.);//(nrxx* ((1 == nspin) ? 1 : 3)): 00, 01, 11 + this->v2rho2_.resize(((1 == nspin) ? 1 : 3) * nrxx, 0.); //(nrxx* ((1 == nspin) ? 1 : 3)): 00, 01, 11 if (is_gga) { - this->vsigma_.resize(((1 == nspin) ? 1 : 3) * nrxx, 0.);//(nrxx*): 2 for rho * 3 for sigma: 00, 01, 02, 10, 11, 12 - this->v2rhosigma_.resize(((1 == nspin) ? 1 : 6) * nrxx, 0.); //(nrxx*): 2 for rho * 3 for sigma: 00, 01, 02, 10, 11, 12 - this->v2sigma2_.resize(((1 == nspin) ? 1 : 6) * nrxx, 0.); //(nrxx* ((1 == nspin) ? 1 : 6)): 00, 01, 02, 11, 12, 22 + this->vsigma_.resize(((1 == nspin) ? 1 : 3) * nrxx, + 0.); //(nrxx*): 2 for rho * 3 for sigma: 00, 01, 02, 10, 11, 12 + this->v2rhosigma_.resize(((1 == nspin) ? 1 : 6) * nrxx, + 0.); //(nrxx*): 2 for rho * 3 for sigma: 00, 01, 02, 10, 11, 12 + this->v2sigma2_.resize(((1 == nspin) ? 1 : 6) * nrxx, + 0.); //(nrxx* ((1 == nspin) ? 1 : 6)): 00, 01, 02, 11, 12, 22 } - //MetaGGA ... + // MetaGGA ... - for (xc_func_type& func : funcs) + for (xc_func_type& func: funcs) { const double rho_threshold = 1E-6; const double grho_threshold = 1E-10; xc_func_set_dens_threshold(&func, rho_threshold); - //cut off function - const std::vector sgn = XC_Functional_Libxc::cal_sgn(rho_threshold, grho_threshold, func, nspin, nrxx, rho, sigma); + // cut off function + const std::vector sgn + = XC_Functional_Libxc::cal_sgn(rho_threshold, grho_threshold, func, nspin, nrxx, rho, sigma); // Libxc interfaces overwrite (instead of add onto) the output arrays, so we need temporary copies std::vector vrho_tmp(this->vrho_.size()); @@ -224,13 +273,19 @@ void LR::KernelXC::f_xc_libxc(const int& nspin, const double& omega, const doubl xc_lda_fxc(&func, nrxx, rho.data(), v2rho2_tmp.data()); break; case XC_FAMILY_GGA: - case XC_FAMILY_HYB_GGA: - { + case XC_FAMILY_HYB_GGA: { xc_gga_vxc(&func, nrxx, rho.data(), sigma.data(), vrho_tmp.data(), vsigma_tmp.data()); - xc_gga_fxc(&func, nrxx, rho.data(), sigma.data(), v2rho2_tmp.data(), v2rhosigma_tmp.data(), v2sigma2_tmp.data()); - // std::cout << "max element of v2sigma2_tmp: " << *std::max_element(v2sigma2_tmp.begin(), v2sigma2_tmp.end()) << std::endl; - // std::cout << "rho corresponding to max element of v2sigma2_tmp: " << rho[(std::max_element(v2sigma2_tmp.begin(), v2sigma2_tmp.end()) - v2sigma2_tmp.begin()) / 6] << std::endl; - // cut off by sgn + xc_gga_fxc(&func, + nrxx, + rho.data(), + sigma.data(), + v2rho2_tmp.data(), + v2rhosigma_tmp.data(), + v2sigma2_tmp.data()); + // std::cout << "max element of v2sigma2_tmp: " << *std::max_element(v2sigma2_tmp.begin(), + // v2sigma2_tmp.end()) << std::endl; std::cout << "rho corresponding to max element of v2sigma2_tmp: " << + // rho[(std::max_element(v2sigma2_tmp.begin(), v2sigma2_tmp.end()) - v2sigma2_tmp.begin()) / 6] << + // std::endl; cut off by sgn cutoff_grid_data_spin2(vrho_tmp, sgn); cutoff_grid_data_spin2(vsigma_tmp, sgn); cutoff_grid_data_spin2(v2rho2_tmp, sgn); @@ -239,8 +294,8 @@ void LR::KernelXC::f_xc_libxc(const int& nspin, const double& omega, const doubl break; } default: - throw std::domain_error("func.info->family =" + std::to_string(func.info->family) - + " unfinished in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); + throw std::domain_error("func.info->family =" + std::to_string(func.info->family) + " unfinished in " + + std::string(__FILE__) + " line " + std::to_string(__LINE__)); break; } // add onto the total components @@ -288,7 +343,7 @@ void LR::KernelXC::f_xc_libxc(const int& nspin, const double& omega, const doubl this->v2sigma2_4drho_[i] = gradrho[0][i] * v2s2[i] * 4.; } } - else if (2 == nspin) //close-shell + else if (2 == nspin) // close-shell { if (!openshell_) { @@ -299,13 +354,19 @@ void LR::KernelXC::f_xc_libxc(const int& nspin, const double& omega, const doubl #ifdef _OPENMP #pragma omp parallel for schedule(static, 4096) #endif - for (int i = 0;i < nrxx;++i) + for (int i = 0; i < nrxx; ++i) { const int istart = i * 6; - this->v2rhosigma_drho_singlet_[i] = gradrho[0][i] * (v2rs[istart] + v2rs[istart + 1] + v2rs[istart + 2]) * 2.; - this->v2sigma2_drho_singlet_[i] = gradrho[0][i] * (v2s2[istart] * 2. + v2s2[istart + 1] * 3. + v2s2[istart + 2] * 2. + v2s2[istart + 3] + v2s2[istart + 4]) * 2.; + this->v2rhosigma_drho_singlet_[i] + = gradrho[0][i] * (v2rs[istart] + v2rs[istart + 1] + v2rs[istart + 2]) * 2.; + this->v2sigma2_drho_singlet_[i] = gradrho[0][i] + * (v2s2[istart] * 2. + v2s2[istart + 1] * 3. + + v2s2[istart + 2] * 2. + v2s2[istart + 3] + v2s2[istart + 4]) + * 2.; this->v2rhosigma_drho_triplet_[i] = gradrho[0][i] * (v2rs[istart] - v2rs[istart + 2]) * 2.; - this->v2sigma2_drho_triplet_[i] = gradrho[0][i] * (v2s2[istart] * 2. + v2s2[istart + 1] - v2s2[istart + 2] * 2. - v2s2[istart + 4]) * 2.; + this->v2sigma2_drho_triplet_[i] + = gradrho[0][i] + * (v2s2[istart] * 2. + v2s2[istart + 1] - v2s2[istart + 2] * 2. - v2s2[istart + 4]) * 2.; } } else @@ -325,38 +386,51 @@ void LR::KernelXC::f_xc_libxc(const int& nspin, const double& omega, const doubl #ifdef _OPENMP #pragma omp parallel for schedule(static, 4096) #endif - for (int i = 0;i < nrxx;++i) + for (int i = 0; i < nrxx; ++i) { const int istart = i * 6; this->v2rhosigma_drho_uu_[i] = gradrho[0][i] * v2rs[istart] * 2. + gradrho[1][i] * v2rs[istart + 1]; - this->v2rhosigma_drho_ud_[i] = gradrho[0][i] * v2rs[istart + 1] + gradrho[1][i] * v2rs[istart + 2] * 2.; - this->v2rhosigma_drho_du_[i] = gradrho[0][i] * v2rs[istart + 3] * 2. + gradrho[1][i] * v2rs[istart + 4]; - this->v2rhosigma_drho_dd_[i] = gradrho[0][i] * v2rs[istart + 4] + gradrho[1][i] * v2rs[istart + 5] * 2.; - this->v2sigma2_drho_uu_u_[i] = gradrho[0][i] * v2s2[istart] * 4. + gradrho[1][i] * v2s2[istart + 1] * 2.; - this->v2sigma2_drho_uu_d_[i] = gradrho[0][i] * v2s2[istart + 1] * 2. + gradrho[1][i] * v2s2[istart + 3]; - this->v2sigma2_drho_ud_u_[i] = gradrho[0][i] * v2s2[istart + 1] * 2. + gradrho[1][i] * v2s2[istart + 3]; - this->v2sigma2_drho_ud_d_[i] = gradrho[0][i] * v2s2[istart + 2] * 4. + gradrho[1][i] * v2s2[istart + 4] * 2.; - this->v2sigma2_drho_du_u_[i] = gradrho[1][i] * v2s2[istart + 2] * 4. + gradrho[0][i] * v2s2[istart + 1] * 2.; - this->v2sigma2_drho_du_d_[i] = gradrho[1][i] * v2s2[istart + 4] * 2. + gradrho[0][i] * v2s2[istart + 3]; - this->v2sigma2_drho_dd_u_[i] = gradrho[1][i] * v2s2[istart + 4] * 2. + gradrho[0][i] * v2s2[istart + 3]; - this->v2sigma2_drho_dd_d_[i] = gradrho[1][i] * v2s2[istart + 5] * 4. + gradrho[0][i] * v2s2[istart + 4] * 2.; + this->v2rhosigma_drho_ud_[i] + = gradrho[0][i] * v2rs[istart + 1] + gradrho[1][i] * v2rs[istart + 2] * 2.; + this->v2rhosigma_drho_du_[i] + = gradrho[0][i] * v2rs[istart + 3] * 2. + gradrho[1][i] * v2rs[istart + 4]; + this->v2rhosigma_drho_dd_[i] + = gradrho[0][i] * v2rs[istart + 4] + gradrho[1][i] * v2rs[istart + 5] * 2.; + this->v2sigma2_drho_uu_u_[i] + = gradrho[0][i] * v2s2[istart] * 4. + gradrho[1][i] * v2s2[istart + 1] * 2.; + this->v2sigma2_drho_uu_d_[i] + = gradrho[0][i] * v2s2[istart + 1] * 2. + gradrho[1][i] * v2s2[istart + 3]; + this->v2sigma2_drho_ud_u_[i] + = gradrho[0][i] * v2s2[istart + 1] * 2. + gradrho[1][i] * v2s2[istart + 3]; + this->v2sigma2_drho_ud_d_[i] + = gradrho[0][i] * v2s2[istart + 2] * 4. + gradrho[1][i] * v2s2[istart + 4] * 2.; + this->v2sigma2_drho_du_u_[i] + = gradrho[1][i] * v2s2[istart + 2] * 4. + gradrho[0][i] * v2s2[istart + 1] * 2.; + this->v2sigma2_drho_du_d_[i] + = gradrho[1][i] * v2s2[istart + 4] * 2. + gradrho[0][i] * v2s2[istart + 3]; + this->v2sigma2_drho_dd_u_[i] + = gradrho[1][i] * v2s2[istart + 4] * 2. + gradrho[0][i] * v2s2[istart + 3]; + this->v2sigma2_drho_dd_d_[i] + = gradrho[1][i] * v2s2[istart + 5] * 4. + gradrho[0][i] * v2s2[istart + 4] * 2.; } } } else { - throw std::domain_error("nspin =" + std::to_string(nspin) - + " unfinished in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); + throw std::domain_error("nspin =" + std::to_string(nspin) + " unfinished in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); } this->drho_gs_ = std::move(gradrho); } - if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 2) { + if (PARAM.inp.nspin == 1 || PARAM.inp.nspin == 2) + { return; - // else if (4 == PARAM.inp.nspin) - } else//NSPIN != 1,2,4 is not supported + // else if (4 == PARAM.inp.nspin) + } + else // NSPIN != 1,2,4 is not supported { - throw std::domain_error("PARAM.inp.nspin =" + std::to_string(PARAM.inp.nspin) - + " unfinished in " + std::string(__FILE__) + " line " + std::to_string(__LINE__)); + throw std::domain_error("PARAM.inp.nspin =" + std::to_string(PARAM.inp.nspin) + " unfinished in " + + std::string(__FILE__) + " line " + std::to_string(__LINE__)); } } #endif \ No newline at end of file diff --git a/source/module_lr/ri_benchmark/ri_benchmark.hpp b/source/module_lr/ri_benchmark/ri_benchmark.hpp index 82ab9249ac..2f2ad1e1d5 100644 --- a/source/module_lr/ri_benchmark/ri_benchmark.hpp +++ b/source/module_lr/ri_benchmark/ri_benchmark.hpp @@ -1,510 +1,674 @@ #pragma once #include "ri_benchmark.h" -#include "module_base/module_container/base/third_party/blas.h" +#include "source_base/module_container/base/third_party/blas.h" namespace RI_Benchmark { - // std::cout << "the size of Cs:" << std::endl; - // for (auto& it1: Cs) - // { - // for (auto& it2: it1.second) - // { - // std::cout << "iat1=" << it1.first << ", iat2= " << it2.first.first << std::endl; - // auto& ts = it2.second.shape; - // std::cout << "Tensor shape:" << ts[0] << " " << ts[1] << " " << ts[2] << std::endl; // abf, nw1, nw2 - // } - // } +// std::cout << "the size of Cs:" << std::endl; +// for (auto& it1: Cs) +// { +// for (auto& it2: it1.second) +// { +// std::cout << "iat1=" << it1.first << ", iat2= " << it2.first.first << std::endl; +// auto& ts = it2.second.shape; +// std::cout << "Tensor shape:" << ts[0] << " " << ts[1] << " " << ts[2] << std::endl; // abf, nw1, nw2 +// } +// } - template - inline int count_nao_from_Cs(const TLRI& Cs_ao) +template +inline int count_nao_from_Cs(const TLRI& Cs_ao) +{ + int naos = 0; + for (const auto& it2: Cs_ao.at(0)) { - int naos = 0; - for (const auto& it2 : Cs_ao.at(0)) - { - assert(it2.second.shape.size() == 3); - naos += it2.second.shape[2]; - } - return naos; + assert(it2.second.shape.size() == 3); + naos += it2.second.shape[2]; } + return naos; +} - /// @brief slice the psi from wfc_ks of all the k-points, some bands, some basis functions - /// @return - template - inline std::vector slice_psi(const psi::Psi& wfc_ks, - const int& ibstart, - const int& nb, - const int& iwstart, - const int& nw) - { - std::vector psi_slice(wfc_ks.get_nk() * nb * nw); - int i = 0; - for (int ik = 0; ik < wfc_ks.get_nk(); ++ik) - for (int ib = ibstart; ib < ibstart + nb; ++ib) - for (int iw = iwstart; iw < iwstart + nw; ++iw) - psi_slice[i++] = wfc_ks(ik, ib, iw); - assert(i == psi_slice.size()); - return psi_slice; - } +/// @brief slice the psi from wfc_ks of all the k-points, some bands, some basis functions +/// @return +template +inline std::vector slice_psi(const psi::Psi& wfc_ks, + const int& ibstart, + const int& nb, + const int& iwstart, + const int& nw) +{ + std::vector psi_slice(wfc_ks.get_nk() * nb * nw); + int i = 0; + for (int ik = 0; ik < wfc_ks.get_nk(); ++ik) + for (int ib = ibstart; ib < ibstart + nb; ++ib) + for (int iw = iwstart; iw < iwstart + nw; ++iw) + psi_slice[i++] = wfc_ks(ik, ib, iw); + assert(i == psi_slice.size()); + return psi_slice; +} - template - TLRI cal_Cs_mo(const UnitCell& ucell, - const TLRI& Cs_ao, - const psi::Psi& wfc_ks, - const int& nocc, - const int& nvirt, - const int& occ_first, - const bool& read_from_aims, - const std::vector& aims_nbasis) +template +TLRI cal_Cs_mo(const UnitCell& ucell, + const TLRI& Cs_ao, + const psi::Psi& wfc_ks, + const int& nocc, + const int& nvirt, + const int& occ_first, + const bool& read_from_aims, + const std::vector& aims_nbasis) +{ + // assert(wfc_ks.get_nk() == 1); // currently only gamma-only is supported + assert(nocc + nvirt <= wfc_ks.get_nbands()); + const bool use_aims_nbasis = (read_from_aims && !aims_nbasis.empty()); + TLRI Cs_mo; + int iw1 = 0; + for (auto& c1: Cs_ao) { - // assert(wfc_ks.get_nk() == 1); // currently only gamma-only is supported - assert(nocc + nvirt <= wfc_ks.get_nbands()); - const bool use_aims_nbasis = (read_from_aims && !aims_nbasis.empty()); - TLRI Cs_mo; - int iw1 = 0; - for (auto& c1 : Cs_ao) + const int& iat1 = c1.first; + const int& it1 = ucell.iat2it[iat1]; + const int& nw1 = (use_aims_nbasis ? aims_nbasis[it1] : ucell.atoms[it1].nw); + if (!use_aims_nbasis) { - const int& iat1 = c1.first; - const int& it1 = ucell.iat2it[iat1]; - const int& nw1 = (use_aims_nbasis ? aims_nbasis[it1] : ucell.atoms[it1].nw); - if (!use_aims_nbasis) { assert(iw1 == ucell.get_iat2iwt()[iat1]); } - int iw2 = 0; - for (auto& c2 : c1.second) + assert(iw1 == ucell.get_iat2iwt()[iat1]); + } + int iw2 = 0; + for (auto& c2: c1.second) + { + const int& iat2 = c2.first.first; + const int& it2 = ucell.iat2it[iat2]; + const int& nw2 = (use_aims_nbasis ? aims_nbasis[it2] : ucell.atoms[it2].nw); + if (!use_aims_nbasis) { - const int& iat2 = c2.first.first; - const int& it2 = ucell.iat2it[iat2]; - const int& nw2 = (use_aims_nbasis ? aims_nbasis[it2] : ucell.atoms[it2].nw); - if (!use_aims_nbasis) { assert(iw2 == ucell.get_iat2iwt()[iat2]); } + assert(iw2 == ucell.get_iat2iwt()[iat2]); + } - const auto& tensor_ao = c2.second; - const size_t& nabf = tensor_ao.shape[0]; - assert(tensor_ao.shape.size() == 3); // abf, nw1, nw2 + const auto& tensor_ao = c2.second; + const size_t& nabf = tensor_ao.shape[0]; + assert(tensor_ao.shape.size() == 3); // abf, nw1, nw2 - std::vector psi_a1 = occ_first ? slice_psi(wfc_ks, 0, nocc, iw1, nw1) //occ - : slice_psi(wfc_ks, nocc, nvirt, iw1, nw1); // virt - std::vector psi_a2 = occ_first ? slice_psi(wfc_ks, nocc, nvirt, iw2, nw2) //virt - : slice_psi(wfc_ks, 0, nocc, iw2, nw2); // occ + std::vector psi_a1 = occ_first ? slice_psi(wfc_ks, 0, nocc, iw1, nw1) // occ + : slice_psi(wfc_ks, nocc, nvirt, iw1, nw1); // virt + std::vector psi_a2 = occ_first ? slice_psi(wfc_ks, nocc, nvirt, iw2, nw2) // virt + : slice_psi(wfc_ks, 0, nocc, iw2, nw2); // occ - Cs_mo[c1.first][c2.first] = RI::Tensor({ nabf, (std::size_t)nocc, (std::size_t)nvirt }); - for (int iabf = 0; iabf < nabf; ++iabf) + Cs_mo[c1.first][c2.first] = RI::Tensor({nabf, (std::size_t)nocc, (std::size_t)nvirt}); + for (int iabf = 0; iabf < nabf; ++iabf) + { + const auto ptr = &tensor_ao(iabf, 0, 0); + std::vector tmp(nw1 * (occ_first ? nvirt : nocc)); + // caution: Cs are row-major (ia2 contiguous) + if (occ_first) { - const auto ptr = &tensor_ao(iabf, 0, 0); - std::vector tmp(nw1 * (occ_first ? nvirt : nocc)); - // caution: Cs are row-major (ia2 contiguous) - if (occ_first) - { - container::BlasConnector::gemm('T', 'N', nvirt, nw1, nw2, 1.0, psi_a2.data(), nw2, ptr, nw2, 0.0, tmp.data(), nvirt); - container::BlasConnector::gemm('N', 'N', nvirt, nocc, nw1, 1.0, tmp.data(), nvirt, psi_a1.data(), nw1, 0.0, &Cs_mo[c1.first][c2.first](iabf, 0, 0), nvirt); - } - else - { - container::BlasConnector::gemm('T', 'N', nw1, nocc, nw2, 1.0, ptr, nw2, psi_a2.data(), nw2, 0.0, tmp.data(), nw1); - container::BlasConnector::gemm('T', 'N', nvirt, nocc, nw1, 1.0, psi_a1.data(), nw1, tmp.data(), nw1, 0.0, &Cs_mo[c1.first][c2.first](iabf, 0, 0), nvirt); - } + container::BlasConnector::gemm('T', + 'N', + nvirt, + nw1, + nw2, + 1.0, + psi_a2.data(), + nw2, + ptr, + nw2, + 0.0, + tmp.data(), + nvirt); + container::BlasConnector::gemm('N', + 'N', + nvirt, + nocc, + nw1, + 1.0, + tmp.data(), + nvirt, + psi_a1.data(), + nw1, + 0.0, + &Cs_mo[c1.first][c2.first](iabf, 0, 0), + nvirt); + } + else + { + container::BlasConnector::gemm('T', + 'N', + nw1, + nocc, + nw2, + 1.0, + ptr, + nw2, + psi_a2.data(), + nw2, + 0.0, + tmp.data(), + nw1); + container::BlasConnector::gemm('T', + 'N', + nvirt, + nocc, + nw1, + 1.0, + psi_a1.data(), + nw1, + tmp.data(), + nw1, + 0.0, + &Cs_mo[c1.first][c2.first](iabf, 0, 0), + nvirt); } - iw2 += nw2; } - iw1 += nw1; + iw2 += nw2; } - return Cs_mo; + iw1 += nw1; } + return Cs_mo; +} - template - std::vector cal_Amat_full(const TLRI& Cs_a, - const TLRI& Cs_b, - const TLRI& Vs) - { - assert(Cs_a.size() > 0); - assert(Cs_b.size() > 0); - assert(Vs.size() > 0); - auto& Cs_shape = Cs_a.at(0).begin()->second.shape; - auto& Vs_shape = Vs.at(0).begin()->second.shape; - assert(Cs_shape.size() == 3); // abf, nocc, nvirt - assert(Cs_shape.size() == 3); // abf, nocc, nvirt - assert(Vs_shape.size() == 2); // abf, abf +template +std::vector cal_Amat_full(const TLRI& Cs_a, const TLRI& Cs_b, const TLRI& Vs) +{ + assert(Cs_a.size() > 0); + assert(Cs_b.size() > 0); + assert(Vs.size() > 0); + auto& Cs_shape = Cs_a.at(0).begin()->second.shape; + auto& Vs_shape = Vs.at(0).begin()->second.shape; + assert(Cs_shape.size() == 3); // abf, nocc, nvirt + assert(Cs_shape.size() == 3); // abf, nocc, nvirt + assert(Vs_shape.size() == 2); // abf, abf - const int& npairs = Cs_shape[1] * Cs_shape[2]; - std::vector Amat_full(npairs * npairs, 0.0); + const int& npairs = Cs_shape[1] * Cs_shape[2]; + std::vector Amat_full(npairs * npairs, 0.0); - for (auto& itv1 : Vs) + for (auto& itv1: Vs) + { + const int& iat1 = itv1.first; + for (auto& itv2: itv1.second) { - const int& iat1 = itv1.first; - for (auto& itv2 : itv1.second) + const int& iat2 = itv2.first.first; + const auto& tensor_v = itv2.second; // (nabf2, nabf1), T + for (auto& itca2: Cs_a.at(iat1)) { - const int& iat2 = itv2.first.first; - const auto& tensor_v = itv2.second; // (nabf2, nabf1), T - for (auto& itca2 : Cs_a.at(iat1)) + const int& iat3 = itca2.first.first; + const auto& tensor_ca = itca2.second; // (nvirt*nocc, nabf1), N + for (auto& itcb2: Cs_b.at(iat2)) { - const int& iat3 = itca2.first.first; - const auto& tensor_ca = itca2.second; // (nvirt*nocc, nabf1), N - for (auto& itcb2 : Cs_b.at(iat2)) - { - const int& iat4 = itcb2.first.first; - const auto& tensor_cb = itcb2.second; // (nvirt*nocc, nabf2), T - const int& nabf1 = tensor_v.shape[0]; - const int& nabf2 = tensor_v.shape[1]; - assert(tensor_ca.shape[0] == nabf1); //abf1 - assert(tensor_cb.shape[0] == nabf2); //abf2 - std::vector tmp(npairs * nabf1); - container::BlasConnector::gemm('T', 'T', nabf1, npairs, nabf2, 1.0, tensor_v.ptr(), nabf2, tensor_cb.ptr(), npairs, 0.0, tmp.data(), nabf1); - container::BlasConnector::gemm('N', 'N', npairs, npairs, nabf1, 2.0/*Hartree to Ry*/, tensor_ca.ptr(), npairs, tmp.data(), nabf1, 1.0, Amat_full.data(), npairs); - } + const int& iat4 = itcb2.first.first; + const auto& tensor_cb = itcb2.second; // (nvirt*nocc, nabf2), T + const int& nabf1 = tensor_v.shape[0]; + const int& nabf2 = tensor_v.shape[1]; + assert(tensor_ca.shape[0] == nabf1); // abf1 + assert(tensor_cb.shape[0] == nabf2); // abf2 + std::vector tmp(npairs * nabf1); + container::BlasConnector::gemm('T', + 'T', + nabf1, + npairs, + nabf2, + 1.0, + tensor_v.ptr(), + nabf2, + tensor_cb.ptr(), + npairs, + 0.0, + tmp.data(), + nabf1); + container::BlasConnector::gemm('N', + 'N', + npairs, + npairs, + nabf1, + 2.0 /*Hartree to Ry*/, + tensor_ca.ptr(), + npairs, + tmp.data(), + nabf1, + 1.0, + Amat_full.data(), + npairs); } } } - return Amat_full; } - template - TLRIX cal_CsX(const TLRI& Cs_mo, const TK* X) + return Amat_full; +} +template +TLRIX cal_CsX(const TLRI& Cs_mo, const TK* X) +{ + TLRIX CsX; + for (auto& it1: Cs_mo) { - TLRIX CsX; - for (auto& it1 : Cs_mo) + const int& iat1 = it1.first; + for (auto& it2: it1.second) { - const int& iat1 = it1.first; - for (auto& it2 : it1.second) - { - const int& iat2 = it2.first.first; - auto& tensor_c = it2.second; - const int& nabf = tensor_c.shape[0]; - const int& npairs = tensor_c.shape[1] * tensor_c.shape[2]; - std::vector CX(nabf); - for (int iabf = 0;iabf < nabf;++iabf) - CX[iabf] = container::BlasConnector::dot(npairs, &tensor_c(iabf, 0, 0), 1, X, 1); - CsX[iat1][it2.first] = CX; - } + const int& iat2 = it2.first.first; + auto& tensor_c = it2.second; + const int& nabf = tensor_c.shape[0]; + const int& npairs = tensor_c.shape[1] * tensor_c.shape[2]; + std::vector CX(nabf); + for (int iabf = 0; iabf < nabf; ++iabf) + CX[iabf] = container::BlasConnector::dot(npairs, &tensor_c(iabf, 0, 0), 1, X, 1); + CsX[iat1][it2.first] = CX; } - return CsX; } + return CsX; +} - template - TLRI cal_CV(const TLRI& Cs_a_mo, - const TLRI& Vs) +template +TLRI cal_CV(const TLRI& Cs_a_mo, const TLRI& Vs) +{ + TLRI CV; + for (auto& it1: Cs_a_mo) // the atom on which ABFs locate { - TLRI CV; - for (auto& it1 : Cs_a_mo) //the atom on which ABFs locate + const int& iat1 = it1.first; + for (auto& it2: it1.second) { - const int& iat1 = it1.first; - for (auto& it2 : it1.second) + const int& iat2 = it2.first.first; + // const auto& Rc=it2.first.second; + auto& tensor_c = it2.second; + const int& nabf1 = tensor_c.shape[0]; + const int& npairs = tensor_c.shape[1] * tensor_c.shape[2]; + for (auto& it3: Vs.at(iat1)) { - const int& iat2 = it2.first.first; - // const auto& Rc=it2.first.second; - auto& tensor_c = it2.second; - const int& nabf1 = tensor_c.shape[0]; - const int& npairs = tensor_c.shape[1] * tensor_c.shape[2]; - for (auto& it3 : Vs.at(iat1)) + const int& iat3 = it3.first.first; + // const auto& Rv=it3.first.second; + const auto& tensor_v = it3.second; + assert(nabf1 == tensor_v.shape[0]); + const size_t& nabf2 = tensor_v.shape[1]; + std::vector tmp(nabf2 * npairs); + // const auto& Rcv = (Rv - Rc) % period; + if (CV.count(iat2) && CV.at(iat2).count({iat3, {0, 0, 0}})) // add-up, sum over iat1 { - const int& iat3 = it3.first.first; - // const auto& Rv=it3.first.second; - const auto& tensor_v = it3.second; - assert(nabf1 == tensor_v.shape[0]); - const size_t& nabf2 = tensor_v.shape[1]; - std::vector tmp(nabf2 * npairs); - // const auto& Rcv = (Rv - Rc) % period; - if (CV.count(iat2) && CV.at(iat2).count({ iat3, {0, 0, 0} })) // add-up, sum over iat1 - { - auto& tensor_cv = CV.at(iat2).at({ iat3, {0, 0, 0} }); - container::BlasConnector::gemm('N', 'T', npairs, nabf2, nabf1, 1.0, tensor_c.ptr(), npairs, tensor_v.ptr(), nabf2, 1.0, tensor_cv.ptr(), npairs); - } - else - { - RI::Tensor tmp({ nabf2, tensor_c.shape[1], tensor_c.shape[2] }); // (nabf2, nocc, nvirt) - container::BlasConnector::gemm('N', 'T', npairs, nabf2, nabf1, 1.0, tensor_c.ptr(), npairs, tensor_v.ptr(), nabf2, 0.0, tmp.ptr(), npairs); - CV[iat2][{iat3, { 0, 0, 0 }}] = tmp; - } + auto& tensor_cv = CV.at(iat2).at({iat3, {0, 0, 0}}); + container::BlasConnector::gemm('N', + 'T', + npairs, + nabf2, + nabf1, + 1.0, + tensor_c.ptr(), + npairs, + tensor_v.ptr(), + nabf2, + 1.0, + tensor_cv.ptr(), + npairs); + } + else + { + RI::Tensor tmp({nabf2, tensor_c.shape[1], tensor_c.shape[2]}); // (nabf2, nocc, nvirt) + container::BlasConnector::gemm('N', + 'T', + npairs, + nabf2, + nabf1, + 1.0, + tensor_c.ptr(), + npairs, + tensor_v.ptr(), + nabf2, + 0.0, + tmp.ptr(), + npairs); + CV[iat2][{iat3, {0, 0, 0}}] = tmp; } } } - return CV; } - template - void cal_AX(const TLRI& Cs_a, - const TLRIX& Cs_bX, - const TLRI& Vs, - TK* AX, - const double& scale) + return CV; +} +template +void cal_AX(const TLRI& Cs_a, const TLRIX& Cs_bX, const TLRI& Vs, TK* AX, const double& scale) +{ + const int& npairs = Cs_a.at(0).begin()->second.shape[1] * Cs_a.at(0).begin()->second.shape[2]; + for (auto& itv1: Vs) { - const int& npairs = Cs_a.at(0).begin()->second.shape[1] * Cs_a.at(0).begin()->second.shape[2]; - for (auto& itv1 : Vs) + const int& iat1 = itv1.first; + for (auto& itv2: itv1.second) { - const int& iat1 = itv1.first; - for (auto& itv2 : itv1.second) + const int& iat2 = itv2.first.first; + const auto& tensor_v = itv2.second; // (nabf2, nabf1), T + for (auto& itca2: Cs_a.at(iat1)) { - const int& iat2 = itv2.first.first; - const auto& tensor_v = itv2.second; // (nabf2, nabf1), T - for (auto& itca2 : Cs_a.at(iat1)) + const int& iat3 = itca2.first.first; + const auto& tensor_ca = itca2.second; // (nvirt*nocc, nabf1), N + for (auto& itcb2: Cs_bX.at(iat2)) { - const int& iat3 = itca2.first.first; - const auto& tensor_ca = itca2.second; // (nvirt*nocc, nabf1), N - for (auto& itcb2 : Cs_bX.at(iat2)) - { - const int& iat4 = itcb2.first.first; - const auto& vector_cb = itcb2.second; // (nvirt*nocc, nabf2), T - const int& nabf1 = tensor_v.shape[0]; - const int& nabf2 = tensor_v.shape[1]; - assert(tensor_ca.shape[0] == nabf1); //abf1 - assert(vector_cb.size() == nabf2); //abf2 - std::vector tmp(nabf1); - container::BlasConnector::gemv('T', nabf1, nabf2, 1.0, tensor_v.ptr(), nabf2, vector_cb.data(), 1, 0.0, tmp.data(), 1); - container::BlasConnector::gemv('N', npairs, nabf1, scale/*Hartree to Ry; singlet*/, tensor_ca.ptr(), npairs, tmp.data(), 1, 1.0, AX, 1); - } + const int& iat4 = itcb2.first.first; + const auto& vector_cb = itcb2.second; // (nvirt*nocc, nabf2), T + const int& nabf1 = tensor_v.shape[0]; + const int& nabf2 = tensor_v.shape[1]; + assert(tensor_ca.shape[0] == nabf1); // abf1 + assert(vector_cb.size() == nabf2); // abf2 + std::vector tmp(nabf1); + container::BlasConnector::gemv('T', + nabf1, + nabf2, + 1.0, + tensor_v.ptr(), + nabf2, + vector_cb.data(), + 1, + 0.0, + tmp.data(), + 1); + container::BlasConnector::gemv('N', + npairs, + nabf1, + scale /*Hartree to Ry; singlet*/, + tensor_ca.ptr(), + npairs, + tmp.data(), + 1, + 1.0, + AX, + 1); } } } } +} - template - void cal_AX(const TLRI& CV, - const TLRIX& Cs_bX, - TK* AX, - const double& scale) +template +void cal_AX(const TLRI& CV, const TLRIX& Cs_bX, TK* AX, const double& scale) +{ + for (auto& it1: CV) { - for (auto& it1 : CV) + const int& iat1 = it1.first; + for (auto& it2: it1.second) { - const int& iat1 = it1.first; - for (auto& it2 : it1.second) + const int& iat2 = it2.first.first; + const auto& tensor_cv = it2.second; // (nabf, nocc, nvirt) + const int& npairs = tensor_cv.shape[1] * tensor_cv.shape[2]; + for (auto& it3: Cs_bX.at(iat2)) { - const int& iat2 = it2.first.first; - const auto& tensor_cv = it2.second; // (nabf, nocc, nvirt) - const int& npairs = tensor_cv.shape[1] * tensor_cv.shape[2]; - for (auto& it3 : Cs_bX.at(iat2)) - { - const int& iat3 = it3.first.first; - const auto& vector_cx = it3.second; // (nabf) - const int& nabf = tensor_cv.shape[0]; - assert(vector_cx.size() == nabf); //abf on at2 - container::BlasConnector::gemv('N', npairs, nabf, scale/*Hartree to Ry; singlet*/, tensor_cv.ptr(), npairs, vector_cx.data(), 1, 1.0, AX, 1); - } + const int& iat3 = it3.first.first; + const auto& vector_cx = it3.second; // (nabf) + const int& nabf = tensor_cv.shape[0]; + assert(vector_cx.size() == nabf); // abf on at2 + container::BlasConnector::gemv('N', + npairs, + nabf, + scale /*Hartree to Ry; singlet*/, + tensor_cv.ptr(), + npairs, + vector_cx.data(), + 1, + 1.0, + AX, + 1); } } } +} - template - std::vector read_aims_ebands(const std::string& file, const int nocc, const int nvirt, int& ncore) +template +std::vector read_aims_ebands(const std::string& file, const int nocc, const int nvirt, int& ncore) +{ + std::vector bands; + std::vector bands_final; + std::ifstream ifs; + ifs.open(file); + std::string tmp; + FPTYPE ene, occ; + for (int i = 0; i < 6; ++i) { - std::vector bands; - std::vector bands_final; - std::ifstream ifs; - ifs.open(file); - std::string tmp; - FPTYPE ene, occ; - for (int i = 0;i < 6;++i) { std::getline(ifs, tmp); } // skip the first 6 lines - int ivirt = 0; - while (ifs.peek() != EOF) { - ifs >> tmp >> occ >> ene >> tmp; - std::cout << "occ=" << occ << ", ene=" << ene << std::endl; - bands.push_back(ene * 2);//Hartree to Ry - if (occ < 0.1) { ++ivirt; } - if (ivirt == nvirt) { break; } + std::getline(ifs, tmp); + } // skip the first 6 lines + int ivirt = 0; + while (ifs.peek() != EOF) + { + ifs >> tmp >> occ >> ene >> tmp; + std::cout << "occ=" << occ << ", ene=" << ene << std::endl; + bands.push_back(ene * 2); // Hartree to Ry + if (occ < 0.1) + { + ++ivirt; } - ncore = bands.size() - nocc - nvirt; - std::cout << "bands_final:" << std::endl; - for (int i = ncore;i < bands.size();++i) + if (ivirt == nvirt) { - bands_final.push_back(bands[i]); - std::cout << bands[i] << " "; + break; } - std::cout << std::endl; - return bands_final; } - template - void read_aims_eigenvectors(psi::Psi& wfc_ks, const std::string& file, const int ncore, const int nbands, const int nbasis) + ncore = bands.size() - nocc - nvirt; + std::cout << "bands_final:" << std::endl; + for (int i = ncore; i < bands.size(); ++i) { - std::ifstream ifs; - ifs.open(file); - std::string tmp; - int nbands_last = 0; - while (ifs.peek() != EOF) + bands_final.push_back(bands[i]); + std::cout << bands[i] << " "; + } + std::cout << std::endl; + return bands_final; +} +template +void read_aims_eigenvectors(psi::Psi& wfc_ks, + const std::string& file, + const int ncore, + const int nbands, + const int nbasis) +{ + std::ifstream ifs; + ifs.open(file); + std::string tmp; + int nbands_last = 0; + while (ifs.peek() != EOF) + { + std::getline(ifs, tmp); // the first line + std::stringstream ss(tmp); + while (std::getline(ss, tmp, ' ')) + { + }; + int nbands_file = std::stoi(tmp); + for (int iw = 0; iw < nbasis; ++iw) { - std::getline(ifs, tmp); //the first line - std::stringstream ss(tmp); - while (std::getline(ss, tmp, ' ')) {}; - int nbands_file = std::stoi(tmp); - for (int iw = 0;iw < nbasis;++iw) + ifs >> tmp >> tmp >> tmp >> tmp >> tmp >> tmp; // useless cols + for (int ib = nbands_last; ib < nbands_file; ++ib) { - ifs >> tmp >> tmp >> tmp >> tmp >> tmp >> tmp; //useless cols - for (int ib = nbands_last; ib < nbands_file;++ib) + ifs >> tmp; + if (ib >= ncore && ib < ncore + nbands) { - ifs >> tmp; - if (ib >= ncore && ib < ncore + nbands) - { - for (int is = 0;is < wfc_ks.get_nk();++is) - { //only for gamma_only and spin degenerate - wfc_ks(is, ib - ncore, iw) = std::stod(tmp); - } + for (int is = 0; is < wfc_ks.get_nk(); ++is) + { // only for gamma_only and spin degenerate + wfc_ks(is, ib - ncore, iw) = std::stod(tmp); } } } - std::getline(ifs, tmp); // the interval line between two blocks - std::getline(ifs, tmp); // the interval line between two blocks - nbands_last = nbands_file; } - // output wfc - std::cout << "wfc_gs_read_from_aims:" << std::endl; - for (int ib = 0;ib < nbands;++ib) + std::getline(ifs, tmp); // the interval line between two blocks + std::getline(ifs, tmp); // the interval line between two blocks + nbands_last = nbands_file; + } + // output wfc + std::cout << "wfc_gs_read_from_aims:" << std::endl; + for (int ib = 0; ib < nbands; ++ib) + { + for (int iw = 0; iw < nbasis; ++iw) { - for (int iw = 0;iw < nbasis;++iw) - { - std::cout << wfc_ks(0, ib, iw) << " "; - } - std::cout << std::endl; + std::cout << wfc_ks(0, ib, iw) << " "; } + std::cout << std::endl; + } +} +template // only for blocking by atom pairs +TLRI read_coulomb_mat(const std::string& file, const TLRI& Cs) +{ // for gamma_only, V(q)=V(R=0) + std::ifstream ifs; + ifs.open(file); + size_t nks = 0, nabf = 0, istart = 0, jstart = 0, iend = 0, jend = 0; + std::string tmp; + ifs >> nks; // nkstot=1 + if (nks > 1) + { + std::cout << "Warning: nks>1 is not supported yet!" << std::endl; } - template < typename TR> // only for blocking by atom pairs - TLRI read_coulomb_mat(const std::string& file, const TLRI& Cs) - { //for gamma_only, V(q)=V(R=0) - std::ifstream ifs; - ifs.open(file); - size_t nks = 0, nabf = 0, istart = 0, jstart = 0, iend = 0, jend = 0; - std::string tmp; - ifs >> nks;// nkstot=1 - if (nks > 1) { std::cout << "Warning: nks>1 is not supported yet!" << std::endl; } - TLRI Vs; - const int nat = Cs.size(); - for (int iat1 = 0;iat1 < nat;++iat1) + TLRI Vs; + const int nat = Cs.size(); + for (int iat1 = 0; iat1 < nat; ++iat1) + { + const size_t nabf1 = Cs.at(iat1).at({0, {0, 0, 0}}).shape[0]; + for (int iat2 = 0; iat2 < nat; ++iat2) { - const size_t nabf1 = Cs.at(iat1).at({ 0, {0,0,0} }).shape[0]; - for (int iat2 = 0;iat2 < nat;++iat2) + if (iat1 > iat2) + { // coulomb_mat has only the upper triangle part + Vs[iat1][{iat2, {0, 0, 0}}] = Vs[iat2][{iat1, {0, 0, 0}}].transpose(); + continue; + } + const size_t nabf2 = Cs.at(iat2).at({0, {0, 0, 0}}).shape[0]; + ifs >> nabf >> istart >> iend >> jstart >> jend >> tmp /*ik*/ >> tmp /*wk*/; + assert(nabf1 == iend - istart + 1); + assert(nabf2 == jend - jstart + 1); + RI::Tensor t({nabf1, nabf2}); + for (int i = 0; i < nabf1; ++i) { - if (iat1 > iat2) - { // coulomb_mat has only the upper triangle part - Vs[iat1][{iat2, { 0,0,0 }}] = Vs[iat2][{iat1, { 0,0,0 }}].transpose(); - continue; - } - const size_t nabf2 = Cs.at(iat2).at({ 0, {0,0,0} }).shape[0]; - ifs >> nabf >> istart >> iend >> jstart >> jend >> tmp /*ik*/ >> tmp/*wk*/; - assert(nabf1 == iend - istart + 1); - assert(nabf2 == jend - jstart + 1); - RI::Tensor t({ nabf1, nabf2 }); - for (int i = 0;i < nabf1;++i) + for (int j = 0; j < nabf2; ++j) { - for (int j = 0;j < nabf2;++j) - { - // t(i, j) = Vq[(istart + i) * nabf + jstart + j]; - ifs >> t(i, j) >> tmp; - } + // t(i, j) = Vq[(istart + i) * nabf + jstart + j]; + ifs >> t(i, j) >> tmp; } - Vs[iat1][{iat2, { 0,0,0 }}] = t; } + Vs[iat1][{iat2, {0, 0, 0}}] = t; } - return Vs; } + return Vs; +} - template < typename TR> // any blocking - TLRI read_coulomb_mat_general(const std::string& file, const TLRI& Cs) - { //for gamma_only, V(q)=V(R=0) - std::ifstream ifs; - ifs.open(file); - size_t nks = 0, nabf = 0, istart = 0, jstart = 0, iend = 0, jend = 0; - std::string tmp; - ifs >> nks;// nkstot=1 - if (nks > 1) { std::cout << "Warning: nks>1 is not supported yet!" << std::endl; } - TLRI Vs; - std::vector Vq; - while (ifs.peek() != EOF) +template // any blocking +TLRI read_coulomb_mat_general(const std::string& file, const TLRI& Cs) +{ // for gamma_only, V(q)=V(R=0) + std::ifstream ifs; + ifs.open(file); + size_t nks = 0, nabf = 0, istart = 0, jstart = 0, iend = 0, jend = 0; + std::string tmp; + ifs >> nks; // nkstot=1 + if (nks > 1) + { + std::cout << "Warning: nks>1 is not supported yet!" << std::endl; + } + TLRI Vs; + std::vector Vq; + while (ifs.peek() != EOF) + { + ifs >> nabf >> istart >> iend >> jstart >> jend >> tmp /*ik*/ >> tmp /*wk*/; + if (ifs.peek() == EOF) + { + break; + } + if (Vq.empty()) + { + Vq.resize(nabf * nabf, 0.0); + } + for (int i = istart - 1; i < iend; ++i) { - ifs >> nabf >> istart >> iend >> jstart >> jend >> tmp /*ik*/ >> tmp/*wk*/; - if (ifs.peek() == EOF) { break; } - if (Vq.empty()) { Vq.resize(nabf * nabf, 0.0); } - for (int i = istart - 1;i < iend;++i) + for (int j = jstart - 1; j < jend; ++j) { - for (int j = jstart - 1;j < jend;++j) - { - ifs >> Vq[i * nabf + j] >> tmp; - } + ifs >> Vq[i * nabf + j] >> tmp; } } - const int nat = Cs.size(); - istart = 0; // - for (int iat1 = 0;iat1 < nat;++iat1) + } + const int nat = Cs.size(); + istart = 0; // + for (int iat1 = 0; iat1 < nat; ++iat1) + { + const size_t nabf1 = Cs.at(iat1).at({0, {0, 0, 0}}).shape[0]; + jstart = 0; + for (int iat2 = 0; iat2 < nat; ++iat2) { - const size_t nabf1 = Cs.at(iat1).at({ 0, {0,0,0} }).shape[0]; - jstart = 0; - for (int iat2 = 0;iat2 < nat;++iat2) + const size_t nabf2 = Cs.at(iat2).at({0, {0, 0, 0}}).shape[0]; + if (iat1 > iat2) + { // coulomb_mat has only the upper triangle part + Vs[iat1][{iat2, {0, 0, 0}}] = Vs[iat2][{iat1, {0, 0, 0}}].transpose(); + } + else { - const size_t nabf2 = Cs.at(iat2).at({ 0, {0,0,0} }).shape[0]; - if (iat1 > iat2) - { // coulomb_mat has only the upper triangle part - Vs[iat1][{iat2, { 0,0,0 }}] = Vs[iat2][{iat1, { 0,0,0 }}].transpose(); - } - else + RI::Tensor t({nabf1, nabf2}); + for (int i = 0; i < nabf1; ++i) { - RI::Tensor t({ nabf1, nabf2 }); - for (int i = 0;i < nabf1;++i) + for (int j = 0; j < nabf2; ++j) { - for (int j = 0;j < nabf2;++j) - { - t(i, j) = Vq[(istart + i) * nabf + jstart + j]; - } + t(i, j) = Vq[(istart + i) * nabf + jstart + j]; } - Vs[iat1][{iat2, { 0,0,0 }}] = t; } - jstart += nabf2; + Vs[iat1][{iat2, {0, 0, 0}}] = t; } - assert(jstart == nabf); - istart += nabf1; + jstart += nabf2; } - assert(istart == nabf); - return Vs; + assert(jstart == nabf); + istart += nabf1; } + assert(istart == nabf); + return Vs; +} - template < typename TR> - bool compare_Vs(const TLRI& Vs1, const TLRI& Vs2, const double thr) +template +bool compare_Vs(const TLRI& Vs1, const TLRI& Vs2, const double thr) +{ + for (auto& tmp1: Vs1) { - for (auto& tmp1 : Vs1) + const int& iat1 = tmp1.first; + for (auto& tmp2: tmp1.second) { - const int& iat1 = tmp1.first; - for (auto& tmp2 : tmp1.second) + const int& iat2 = tmp2.first.first; + const RI::Tensor& t1 = tmp2.second; + const RI::Tensor& t2 = Vs2.at(iat1).at({iat2, {0, 0, 0}}); + if (t1.shape[0] != t2.shape[0]) + { + return false; + } + if (t1.shape[1] != t2.shape[1]) { - const int& iat2 = tmp2.first.first; - const RI::Tensor& t1 = tmp2.second; - const RI::Tensor& t2 = Vs2.at(iat1).at({ iat2, {0,0,0} }); - if (t1.shape[0] != t2.shape[0]) { return false; } - if (t1.shape[1] != t2.shape[1]) { return false; } - for (int i = 0;i < t1.shape[0];++i) + return false; + } + for (int i = 0; i < t1.shape[0]; ++i) + { + for (int j = 0; j < t1.shape[1]; ++j) { - for (int j = 0;j < t1.shape[1];++j) + if (std::abs(t1(i, j) - t2(i, j)) > thr) { - if (std::abs(t1(i, j) - t2(i, j)) > thr) { std::cout << "element (" << i << ", " << j << ") are differernt: " << t1(i, j) << ", " << t2(i, j) << std::endl;return false; } + std::cout << "element (" << i << ", " << j << ") are differernt: " << t1(i, j) << ", " + << t2(i, j) << std::endl; + return false; } } } } - return true; } - template - std::vector> split_Ds(const std::vector>& Ds, const std::vector& aims_nbasis, const UnitCell& ucell) + return true; +} +template +std::vector> split_Ds(const std::vector>& Ds, + const std::vector& aims_nbasis, + const UnitCell& ucell) +{ + // Due to the hard-coded constructor of elecstate::DensityMatrix, singlet-triplet with nspin=2 cannot use DM_trans + // with size 1 if(Ds.size()>1) { throw std::runtime_error("split_Ds only supports gamma-only spin-1 Ds now."); } + std::vector> Ds_split; + for (const auto& D: Ds) { - // Due to the hard-coded constructor of elecstate::DensityMatrix, singlet-triplet with nspin=2 cannot use DM_trans with size 1 - // if(Ds.size()>1) { throw std::runtime_error("split_Ds only supports gamma-only spin-1 Ds now."); } - std::vector> Ds_split; - for (const auto& D : Ds) + TLRI D_split; + const int nbasis = std::sqrt(D.size()); + int iw1_start = 0; + for (int iat1 = 0; iat1 < ucell.nat; ++iat1) { - TLRI D_split; - const int nbasis = std::sqrt(D.size()); - int iw1_start = 0; - for (int iat1 = 0;iat1 < ucell.nat;++iat1) + const int& it1 = ucell.iat2it[iat1]; + const size_t& nw1 = aims_nbasis[it1]; + int iw2_start = 0; + for (int iat2 = 0; iat2 < ucell.nat; ++iat2) { - const int& it1 = ucell.iat2it[iat1]; - const size_t& nw1 = aims_nbasis[it1]; - int iw2_start = 0; - for (int iat2 = 0;iat2 < ucell.nat;++iat2) + const int& it2 = ucell.iat2it[iat2]; + const size_t& nw2 = aims_nbasis[it2]; + D_split[iat1][{iat2, {0, 0, 0}}] = RI::Tensor({nw1, nw2}); + for (int i = 0; i < nw1; ++i) { - const int& it2 = ucell.iat2it[iat2]; - const size_t& nw2 = aims_nbasis[it2]; - D_split[iat1][{iat2, { 0,0,0 }}] = RI::Tensor({ nw1, nw2 }); - for (int i = 0;i < nw1;++i) + for (int j = 0; j < nw2; ++j) { - for (int j = 0;j < nw2;++j) - { - D_split[iat1][{iat2, { 0,0,0 }}](i, j) = D[(iw1_start + i)*nbasis+(iw2_start + j)] * 0.5; // consistent with split_m2D_ktoR - } + D_split[iat1][{iat2, {0, 0, 0}}](i, j) + = D[(iw1_start + i) * nbasis + (iw2_start + j)] * 0.5; // consistent with split_m2D_ktoR } - iw2_start += nw2; } - assert(iw2_start == nbasis); - iw1_start += nw1; + iw2_start += nw2; } - assert(iw1_start == nbasis); - Ds_split.push_back(D_split); + assert(iw2_start == nbasis); + iw1_start += nw1; } - return Ds_split; + assert(iw1_start == nbasis); + Ds_split.push_back(D_split); } + return Ds_split; } +} // namespace RI_Benchmark diff --git a/source/module_lr/utils/lr_util.cpp b/source/module_lr/utils/lr_util.cpp index ceb9501e0a..2f32e896f0 100644 --- a/source/module_lr/utils/lr_util.cpp +++ b/source/module_lr/utils/lr_util.cpp @@ -1,195 +1,260 @@ -#include "module_base/constants.h" #include "lr_util.h" -#include "module_base/lapack_connector.h" -#include "module_base/scalapack_connector.h" + +#include "source_base/constants.h" +#include "source_base/lapack_connector.h" +#include "source_base/scalapack_connector.h" namespace LR_Util { - /// =================PHYSICS==================== - int cal_nocc(int nelec) { return nelec / ModuleBase::DEGSPIN + nelec % static_cast(ModuleBase::DEGSPIN); } +/// =================PHYSICS==================== +int cal_nocc(int nelec) +{ + return nelec / ModuleBase::DEGSPIN + nelec % static_cast(ModuleBase::DEGSPIN); +} - std::pair>> - set_ix_map_diagonal(bool mode, int nocc, int nvirt) +std::pair>> set_ix_map_diagonal(bool mode, int nocc, int nvirt) +{ + int npairs = nocc * nvirt; + ModuleBase::matrix ioiv2ix(nocc, nvirt, true); + std::vector> ix2ioiv(npairs); + int io = nocc - 1, iv = 0; // start:leftup + if (mode == 0) // leftdown->rightup { - int npairs = nocc * nvirt; - ModuleBase::matrix ioiv2ix(nocc, nvirt, true); - std::vector> ix2ioiv(npairs); - int io = nocc - 1, iv = 0; //start:leftup - if (mode == 0) // leftdown->rightup + for (int ix = 0; ix < npairs - 1; ++ix) { - for (int ix = 0;ix < npairs - 1;++ix) + // 1. set value + ioiv2ix(io, iv) = ix; + ix2ioiv[ix] = std::make_pair(io, iv); + // 2. move + if (io == nocc - 1 || iv == nvirt - 1) // rightup bound { - // 1. set value - ioiv2ix(io, iv) = ix; - ix2ioiv[ix] = std::make_pair(io, iv); - // 2. move - if (io == nocc - 1 || iv == nvirt - 1) // rightup bound - { - int io_next = std::max(nocc - iv - 1 - (nocc - io), 0); - iv -= (io - io_next) - 1; - io = io_next; - } - else { ++io;++iv; }//move rightup + int io_next = std::max(nocc - iv - 1 - (nocc - io), 0); + iv -= (io - io_next) - 1; + io = io_next; } + else + { + ++io; + ++iv; + } // move rightup } - else //rightup->leftdown + } + else // rightup->leftdown + { + for (int ix = 0; ix < npairs - 1; ++ix) { - for (int ix = 0;ix < npairs - 1;++ix) + // 1. set value + ioiv2ix(io, iv) = ix; + ix2ioiv[ix] = std::make_pair(io, iv); + // 2. move + if (io == 0 || iv == 0) // leftdown bound { - // 1. set value - ioiv2ix(io, iv) = ix; - ix2ioiv[ix] = std::make_pair(io, iv); - // 2. move - if (io == 0 || iv == 0) // leftdown bound - { - int iv_next = std::min(nocc - io + iv, nvirt - 1); - io += (iv_next - iv) - 1; - iv = iv_next; - } - else { --iv;--io; }//move leftdown + int iv_next = std::min(nocc - io + iv, nvirt - 1); + io += (iv_next - iv) - 1; + iv = iv_next; } + else + { + --iv; + --io; + } // move leftdown } - //final set: rightdown - assert(io == 0); - assert(iv == nvirt - 1); - ioiv2ix(io, iv) = npairs - 1; - ix2ioiv[npairs - 1] = std::make_pair(io, iv); - return std::make_pair(std::move(ioiv2ix), std::move(ix2ioiv)); } + // final set: rightdown + assert(io == 0); + assert(iv == nvirt - 1); + ioiv2ix(io, iv) = npairs - 1; + ix2ioiv[npairs - 1] = std::make_pair(io, iv); + return std::make_pair(std::move(ioiv2ix), std::move(ix2ioiv)); +} - /// =================ALGORITHM==================== +/// =================ALGORITHM==================== #ifdef __MPI - template<> - void matsym(const double* in, const int n, const Parallel_2D& pmat, double* out) - { - std::copy(in, in + pmat.get_local_size(), out); - const double alpha = 0.5, beta = 0.5; - const int i1 = 1; - pdtran_(&n, &n, &alpha, in, &i1, &i1, pmat.desc, &beta, out, &i1, &i1, pmat.desc); - } - template<> - void matsym(double* inout, const int n, const Parallel_2D& pmat) - { - std::vector tmp(pmat.get_local_size()); - std::copy(inout, inout + pmat.get_local_size(), tmp.begin()); - const double alpha = 0.5, beta = 0.5; - const int i1 = 1; - pdtran_(&n, &n, &alpha, tmp.data(), &i1, &i1, pmat.desc, &beta, inout, &i1, &i1, pmat.desc); - } - template<> - void matsym>(const std::complex* in, const int n, const Parallel_2D& pmat, std::complex* out) - { - std::copy(in, in + pmat.get_local_size(), out); - const std::complex alpha(0.5, 0.0), beta(0.5, 0.0); - const int i1 = 1; - pztranc_(&n, &n, &alpha, in, &i1, &i1, pmat.desc, &beta, out, &i1, &i1, pmat.desc); - } - template<> - void matsym>(std::complex* inout, const int n, const Parallel_2D& pmat) - { - std::vector> tmp(pmat.get_local_size()); - std::copy(inout, inout + pmat.get_local_size(), tmp.begin()); - const std::complex alpha(0.5, 0.0), beta(0.5, 0.0); - const int i1 = 1; - pztranc_(&n, &n, &alpha, tmp.data(), &i1, &i1, pmat.desc, &beta, inout, &i1, &i1, pmat.desc); - } +template <> +void matsym(const double* in, const int n, const Parallel_2D& pmat, double* out) +{ + std::copy(in, in + pmat.get_local_size(), out); + const double alpha = 0.5, beta = 0.5; + const int i1 = 1; + pdtran_(&n, &n, &alpha, in, &i1, &i1, pmat.desc, &beta, out, &i1, &i1, pmat.desc); +} +template <> +void matsym(double* inout, const int n, const Parallel_2D& pmat) +{ + std::vector tmp(pmat.get_local_size()); + std::copy(inout, inout + pmat.get_local_size(), tmp.begin()); + const double alpha = 0.5, beta = 0.5; + const int i1 = 1; + pdtran_(&n, &n, &alpha, tmp.data(), &i1, &i1, pmat.desc, &beta, inout, &i1, &i1, pmat.desc); +} +template <> +void matsym>(const std::complex* in, + const int n, + const Parallel_2D& pmat, + std::complex* out) +{ + std::copy(in, in + pmat.get_local_size(), out); + const std::complex alpha(0.5, 0.0), beta(0.5, 0.0); + const int i1 = 1; + pztranc_(&n, &n, &alpha, in, &i1, &i1, pmat.desc, &beta, out, &i1, &i1, pmat.desc); +} +template <> +void matsym>(std::complex* inout, const int n, const Parallel_2D& pmat) +{ + std::vector> tmp(pmat.get_local_size()); + std::copy(inout, inout + pmat.get_local_size(), tmp.begin()); + const std::complex alpha(0.5, 0.0), beta(0.5, 0.0); + const int i1 = 1; + pztranc_(&n, &n, &alpha, tmp.data(), &i1, &i1, pmat.desc, &beta, inout, &i1, &i1, pmat.desc); +} #endif - // for the first matrix in the commutator - void setup_2d_division(Parallel_2D& pv, int nb, int gr, int gc) - { - ModuleBase::TITLE("LR_Util", "setup_2d_division"); +// for the first matrix in the commutator +void setup_2d_division(Parallel_2D& pv, int nb, int gr, int gc) +{ + ModuleBase::TITLE("LR_Util", "setup_2d_division"); #ifdef __MPI - pv.init(gr, gc, nb, MPI_COMM_WORLD); + pv.init(gr, gc, nb, MPI_COMM_WORLD); #else - pv.set_serial(gr, gc); + pv.set_serial(gr, gc); #endif - } +} #ifdef __MPI - // for the other matrices in the commutator other than the first one - void setup_2d_division(Parallel_2D& pv, int nb, int gr, int gc, const int& blacs_ctxt_in) - { - ModuleBase::TITLE("LR_Util", "setup_2d_division"); - pv.set(gr, gc, nb, blacs_ctxt_in); - } +// for the other matrices in the commutator other than the first one +void setup_2d_division(Parallel_2D& pv, int nb, int gr, int gc, const int& blacs_ctxt_in) +{ + ModuleBase::TITLE("LR_Util", "setup_2d_division"); + pv.set(gr, gc, nb, blacs_ctxt_in); +} #endif - void diag_lapack(const int& n, double* mat, double* eig) +void diag_lapack(const int& n, double* mat, double* eig) +{ + ModuleBase::TITLE("LR_Util", "diag_lapack"); + int info = 0; + char jobz = 'V', uplo = 'U'; + double work_tmp; + const int minus_one = -1; + dsyev_(&jobz, &uplo, &n, mat, &n, eig, &work_tmp, &minus_one, &info); // get best lwork + const int lwork = work_tmp; + double* work2 = new double[lwork]; + dsyev_(&jobz, &uplo, &n, mat, &n, eig, work2, &lwork, &info); + if (info) { - ModuleBase::TITLE("LR_Util", "diag_lapack"); - int info = 0; - char jobz = 'V', uplo = 'U'; - double work_tmp; - const int minus_one = -1; - dsyev_(&jobz, &uplo, &n, mat, &n, eig, &work_tmp, &minus_one, &info); // get best lwork - const int lwork = work_tmp; - double* work2 = new double[lwork]; - dsyev_(&jobz, &uplo, &n, mat, &n, eig, work2, &lwork, &info); - if (info) { std::cout << "ERROR: Lapack solver, info=" << info << std::endl; } - delete[] work2; + std::cout << "ERROR: Lapack solver, info=" << info << std::endl; } + delete[] work2; +} - void diag_lapack(const int& n, std::complex* mat, double* eig) +void diag_lapack(const int& n, std::complex* mat, double* eig) +{ + ModuleBase::TITLE("LR_Util", "diag_lapack>"); + int lwork = 2 * n; + std::complex* work2 = new std::complex[lwork]; + double* rwork = new double[3 * n - 2]; + int info = 0; + char jobz = 'V', uplo = 'U'; + zheev_(&jobz, &uplo, &n, mat, &n, eig, work2, &lwork, rwork, &info); + if (info) { - ModuleBase::TITLE("LR_Util", "diag_lapack>"); - int lwork = 2 * n; - std::complex* work2 = new std::complex[lwork]; - double* rwork = new double[3 * n - 2]; - int info = 0; - char jobz = 'V', uplo = 'U'; - zheev_(&jobz, &uplo, &n, mat, &n, eig, work2, &lwork, rwork, &info); - if (info) { std::cout << "ERROR: Lapack solver, info=" << info << std::endl; } - delete[] rwork; - delete[] work2; + std::cout << "ERROR: Lapack solver, info=" << info << std::endl; } + delete[] rwork; + delete[] work2; +} - void diag_lapack_nh(const int& n, double* mat, std::complex* eig) +void diag_lapack_nh(const int& n, double* mat, std::complex* eig) +{ + ModuleBase::TITLE("LR_Util", "diag_lapack_nh"); + int info = 0; + char jobvl = 'N', jobvr = 'V'; // calculate right eigenvectors + double work_tmp; + const int minus_one = -1; + std::vector eig_real(n); + std::vector eig_imag(n); + const int ldvl = 1, ldvr = n; + std::vector vl(ldvl * n), vr(ldvr * n); + dgeev_(&jobvl, + &jobvr, + &n, + mat, + &n, + eig_real.data(), + eig_imag.data(), + vl.data(), + &ldvl, + vr.data(), + &ldvr, + &work_tmp, + &minus_one /*lwork*/, + &info); // get best lwork + const int lwork = work_tmp; + std::vector work2(lwork); + dgeev_(&jobvl, + &jobvr, + &n, + mat, + &n, + eig_real.data(), + eig_imag.data(), + vl.data(), + &ldvl, + vr.data(), + &ldvr, + work2.data(), + &lwork, + &info); + if (info) { - ModuleBase::TITLE("LR_Util", "diag_lapack_nh"); - int info = 0; - char jobvl = 'N', jobvr = 'V'; //calculate right eigenvectors - double work_tmp; - const int minus_one = -1; - std::vector eig_real(n); - std::vector eig_imag(n); - const int ldvl = 1, ldvr = n; - std::vector vl(ldvl * n), vr(ldvr * n); - dgeev_(&jobvl, &jobvr, &n, mat, &n, eig_real.data(), eig_imag.data(), - vl.data(), &ldvl, vr.data(), &ldvr, &work_tmp, &minus_one /*lwork*/, &info); // get best lwork - const int lwork = work_tmp; - std::vector work2(lwork); - dgeev_(&jobvl, &jobvr, &n, mat, &n, eig_real.data(), eig_imag.data(), - vl.data(), &ldvl, vr.data(), &ldvr, work2.data(), &lwork, &info); - if (info) { std::cout << "ERROR: Lapack solver dgeev, info=" << info << std::endl; } - for (int i = 0;i < n;++i) { eig[i] = std::complex(eig_real[i], eig_imag[i]); } + std::cout << "ERROR: Lapack solver dgeev, info=" << info << std::endl; } - - void diag_lapack_nh(const int& n, std::complex* mat, std::complex* eig) + for (int i = 0; i < n; ++i) { - ModuleBase::TITLE("LR_Util", "diag_lapack_nh>"); - int lwork = 2 * n; - std::vector> work2(lwork); - std::vector rwork(3 * n - 2); - int info = 0; - char jobvl = 'N', jobvr = 'V'; - const int ldvl = 1, ldvr = n; - std::vector> vl(ldvl * n), vr(ldvr * n); - zgeev_(&jobvl, &jobvr, &n, mat, &n, eig, - vl.data(), &ldvl, vr.data(), &ldvr, work2.data(), &lwork, rwork.data(), &info); - if (info) { std::cout << "ERROR: Lapack solver zgeev, info=" << info << std::endl; } + eig[i] = std::complex(eig_real[i], eig_imag[i]); } +} - std::string tolower(const std::string& str) - { - std::string str_lower = str; - std::transform(str_lower.begin(), str_lower.end(), str_lower.begin(), ::tolower); - return str_lower; - } - std::string toupper(const std::string& str) +void diag_lapack_nh(const int& n, std::complex* mat, std::complex* eig) +{ + ModuleBase::TITLE("LR_Util", "diag_lapack_nh>"); + int lwork = 2 * n; + std::vector> work2(lwork); + std::vector rwork(3 * n - 2); + int info = 0; + char jobvl = 'N', jobvr = 'V'; + const int ldvl = 1, ldvr = n; + std::vector> vl(ldvl * n), vr(ldvr * n); + zgeev_(&jobvl, + &jobvr, + &n, + mat, + &n, + eig, + vl.data(), + &ldvl, + vr.data(), + &ldvr, + work2.data(), + &lwork, + rwork.data(), + &info); + if (info) { - std::string str_upper = str; - std::transform(str_upper.begin(), str_upper.end(), str_upper.begin(), ::toupper); - return str_upper; + std::cout << "ERROR: Lapack solver zgeev, info=" << info << std::endl; } -} \ No newline at end of file +} + +std::string tolower(const std::string& str) +{ + std::string str_lower = str; + std::transform(str_lower.begin(), str_lower.end(), str_lower.begin(), ::tolower); + return str_lower; +} +std::string toupper(const std::string& str) +{ + std::string str_upper = str; + std::transform(str_upper.begin(), str_upper.end(), str_upper.begin(), ::toupper); + return str_upper; +} +} // namespace LR_Util \ No newline at end of file diff --git a/source/module_lr/utils/lr_util.h b/source/module_lr/utils/lr_util.h index 3dafe2dd0a..c6f6d53425 100644 --- a/source/module_lr/utils/lr_util.h +++ b/source/module_lr/utils/lr_util.h @@ -1,111 +1,134 @@ #pragma once -#include -#include -#include -#include "module_base/matrix.h" -#include "module_base/complexmatrix.h" -#include "module_base/parallel_2d.h" +#include "module_basis/module_pw/pw_basis.h" #include "module_psi/psi.h" +#include "source_base/complexmatrix.h" +#include "source_base/matrix.h" +#include "source_base/parallel_2d.h" + #include -#include "module_basis/module_pw/pw_basis.h" +#include +#include +#include using DAT = container::DataType; using DEV = container::DeviceType; #ifndef TO_COMPLEX_H #define TO_COMPLEX_H -template struct ToComplex; -template <> struct ToComplex { using type = std::complex; }; -template <> struct ToComplex> { using type = std::complex; }; -template <> struct ToComplex { using type = std::complex; }; -template <> struct ToComplex> { using type = std::complex; }; +template +struct ToComplex; +template <> +struct ToComplex +{ + using type = std::complex; +}; +template <> +struct ToComplex> +{ + using type = std::complex; +}; +template <> +struct ToComplex +{ + using type = std::complex; +}; +template <> +struct ToComplex> +{ + using type = std::complex; +}; #endif namespace LR_Util { - /// =====================PHYSICS==================== - - /// @brief calculate the number of electrons - /// @tparam TCell - /// @param ucell - template - int cal_nelec(const TCell& ucell); - - /// @brief calculate the number of occupied orbitals - /// @param nelec - int cal_nocc(int nelec); - - /// @brief set the index map: ix to (ic, iv) and vice versa - /// by diagonal traverse the c-v pairs - /// leftdown -> rightup for mode 0, rightup -> leftdown for mode 1 - /// @param mode 0: homo-1 -> lumo first; 1: homo -> lumo+1 first - /// @param nc number of occupied bands - /// @param nv number of virtual bands - /// @return [iciv2ix, ix2iciv] - std::pair>> - set_ix_map_diagonal(bool mode, int nc, int nv); - - // Operators to calculate xc kernel have been moved into lr_util_xc.hpp. - /// =================ALGORITHM==================== - - //====== newers and deleters======== - /// @brief delete 2d pointer - template - void _deallocate_2order_nested_ptr(T** p2, size_t size); - /// @brief new 2d pointer - template - void _allocate_2order_nested_ptr(T**& p2, size_t size1, size_t size2); - - template ct::Tensor newTensor(const ct::TensorShape& shape) - { - return ct::Tensor(ct::DataTypeToEnum::value, ct::DeviceTypeToEnum::value, shape); - } - - ///================ BLAS ====================== - /// calculate (A+A^T)/2 - template - void matsym(const T* in, const int n, T* out); - /// calculate (A+A^T)/2 (in-place version) - template - void matsym(T* inout, const int n); +/// =====================PHYSICS==================== + +/// @brief calculate the number of electrons +/// @tparam TCell +/// @param ucell +template +int cal_nelec(const TCell& ucell); + +/// @brief calculate the number of occupied orbitals +/// @param nelec +int cal_nocc(int nelec); + +/// @brief set the index map: ix to (ic, iv) and vice versa +/// by diagonal traverse the c-v pairs +/// leftdown -> rightup for mode 0, rightup -> leftdown for mode 1 +/// @param mode 0: homo-1 -> lumo first; 1: homo -> lumo+1 first +/// @param nc number of occupied bands +/// @param nv number of virtual bands +/// @return [iciv2ix, ix2iciv] +std::pair>> set_ix_map_diagonal(bool mode, int nc, int nv); + +// Operators to calculate xc kernel have been moved into lr_util_xc.hpp. +/// =================ALGORITHM==================== + +//====== newers and deleters======== +/// @brief delete 2d pointer +template +void _deallocate_2order_nested_ptr(T** p2, size_t size); +/// @brief new 2d pointer +template +void _allocate_2order_nested_ptr(T**& p2, size_t size1, size_t size2); + +template +ct::Tensor newTensor(const ct::TensorShape& shape) +{ + return ct::Tensor(ct::DataTypeToEnum::value, ct::DeviceTypeToEnum::value, shape); +} + +///================ BLAS ====================== +/// calculate (A+A^T)/2 +template +void matsym(const T* in, const int n, T* out); +/// calculate (A+A^T)/2 (in-place version) +template +void matsym(T* inout, const int n); #ifdef __MPI - template - void matsym(const T* in, const int n, const Parallel_2D& pmat, T* out); - template - void matsym(T* inout, const int n, const Parallel_2D& pmat); +template +void matsym(const T* in, const int n, const Parallel_2D& pmat, T* out); +template +void matsym(T* inout, const int n, const Parallel_2D& pmat); #endif - ///===================Psi wrapper================= - /// psi(nk=1, nbands=nb, nk * nbasis) -> psi(nb, nk, nbasis) without memory copy - template - psi::Psi k1_to_bfirst_wrapper(const psi::Psi& psi_kfirst, int nk_in, int nbasis_in); - /// psi(nb, nk, nbasis) -> psi(nk=1, nbands=nb, nk * nbasis) without memory copy - template - psi::Psi bfirst_to_k1_wrapper(const psi::Psi& psi_bfirst); +///===================Psi wrapper================= +/// psi(nk=1, nbands=nb, nk * nbasis) -> psi(nb, nk, nbasis) without memory copy +template +psi::Psi k1_to_bfirst_wrapper(const psi::Psi& psi_kfirst, int nk_in, int nbasis_in); +/// psi(nb, nk, nbasis) -> psi(nk=1, nbands=nb, nk * nbasis) without memory copy +template +psi::Psi bfirst_to_k1_wrapper(const psi::Psi& psi_bfirst); - ///=================2D-block Parallel=============== - // pack the process to setup 2d divion reusing blacs_ctxt of a new 2d-matrix - void setup_2d_division(Parallel_2D& pv, int nb, int gr, int gc); +///=================2D-block Parallel=============== +// pack the process to setup 2d divion reusing blacs_ctxt of a new 2d-matrix +void setup_2d_division(Parallel_2D& pv, int nb, int gr, int gc); #ifdef __MPI - // pack the process to setup 2d divion reusing blacs_ctxt of an existing 2d-matrix - void setup_2d_division(Parallel_2D& pv, int nb, int gr, int gc, const int& blacs_ctxt_in); - /// @brief gather 2d matrix to full matrix - /// the defination of row and col is consistent with setup_2d_division - template - void gather_2d_to_full(const Parallel_2D& pv, const T* submat, T* fullmat, bool col_first, int global_nrow, int global_ncol); +// pack the process to setup 2d divion reusing blacs_ctxt of an existing 2d-matrix +void setup_2d_division(Parallel_2D& pv, int nb, int gr, int gc, const int& blacs_ctxt_in); +/// @brief gather 2d matrix to full matrix +/// the defination of row and col is consistent with setup_2d_division +template +void gather_2d_to_full(const Parallel_2D& pv, + const T* submat, + T* fullmat, + bool col_first, + int global_nrow, + int global_ncol); #endif - ///=================diago-lapack==================== - /// @brief diagonalize a hermitian matrix - void diag_lapack(const int& n, double* mat, double* eig); - void diag_lapack(const int& n, std::complex* mat, double* eig); - /// @brief diagonalize a general matrix - void diag_lapack_nh(const int& n, double* mat, std::complex* eig); - void diag_lapack_nh(const int& n, std::complex* mat, std::complex* eig); - - ///=================string option==================== - std::string tolower(const std::string& str); - std::string toupper(const std::string& str); -} +///=================diago-lapack==================== +/// @brief diagonalize a hermitian matrix +void diag_lapack(const int& n, double* mat, double* eig); +void diag_lapack(const int& n, std::complex* mat, double* eig); +/// @brief diagonalize a general matrix +void diag_lapack_nh(const int& n, double* mat, std::complex* eig); +void diag_lapack_nh(const int& n, std::complex* mat, std::complex* eig); + +///=================string option==================== +std::string tolower(const std::string& str); +std::string toupper(const std::string& str); +} // namespace LR_Util #include "lr_util.hpp" diff --git a/source/module_lr/utils/lr_util.hpp b/source/module_lr/utils/lr_util.hpp index 5bbedf645f..a11106bdd8 100644 --- a/source/module_lr/utils/lr_util.hpp +++ b/source/module_lr/utils/lr_util.hpp @@ -1,179 +1,217 @@ #pragma once -#include #include "lr_util.h" -#include #include "module_cell/unitcell.h" -#include "module_base/constants.h" #include "module_hamilt_general/module_xc/xc_functional.h" +#include "source_base/constants.h" + +#include +#include namespace LR_Util { - /// =================PHYSICS==================== +/// =================PHYSICS==================== - template - int cal_nelec(const TCell& ucell) { - int nelec = 0; - for (int it = 0; it < ucell.ntype; ++it) { - nelec += ucell.atoms[it].ncpp.zv * ucell.atoms[it].na; -} - return nelec; - } - - /// =================ALGORITHM==================== - ///for lack of make_unique in c++11 - template - std::unique_ptr make_unique(Args &&... args) +template +int cal_nelec(const TCell& ucell) +{ + int nelec = 0; + for (int it = 0; it < ucell.ntype; ++it) { - return std::unique_ptr(new T(std::forward(args)...)); + nelec += ucell.atoms[it].ncpp.zv * ucell.atoms[it].na; } + return nelec; +} - //====== newers and deleters======== - /// @brief new 2d pointer - /// @tparam T - /// @param size1 - /// @param size2 - template - void _allocate_2order_nested_ptr(T**& p2, size_t size1, size_t size2) +/// =================ALGORITHM==================== +/// for lack of make_unique in c++11 +template +std::unique_ptr make_unique(Args&&... args) +{ + return std::unique_ptr(new T(std::forward(args)...)); +} + +//====== newers and deleters======== +/// @brief new 2d pointer +/// @tparam T +/// @param size1 +/// @param size2 +template +void _allocate_2order_nested_ptr(T**& p2, size_t size1, size_t size2) +{ + p2 = new T*[size1]; + for (size_t i = 0; i < size1; ++i) { - p2 = new T * [size1]; - for (size_t i = 0; i < size1; ++i) - { - p2[i] = new T[size2]; - } - }; + p2[i] = new T[size2]; + } +}; - /// @brief delete 2d pointer - /// @tparam T - /// @param p2 - /// @param size - template - void _deallocate_2order_nested_ptr(T** p2, size_t size) +/// @brief delete 2d pointer +/// @tparam T +/// @param p2 +/// @param size +template +void _deallocate_2order_nested_ptr(T** p2, size_t size) +{ + if (p2 != nullptr) { - if (p2 != nullptr) + for (size_t i = 0; i < size; ++i) { - for (size_t i = 0; i < size; ++i) + if (p2[i] != nullptr) { - if (p2[i] != nullptr) { delete[] p2[i]; } + delete[] p2[i]; } - delete[] p2; } - }; + delete[] p2; + } +}; - inline double get_conj(const double& x) +inline double get_conj(const double& x) +{ + return x; +} +inline std::complex get_conj(const std::complex& x) +{ + return std::conj(x); +} +template +void matsym(const T* in, const int n, T* out) +{ + for (int i = 0; i < n; ++i) { - return x; + out[i * n + i] = 0.5 * in[i * n + i] + 0.5 * get_conj(in[i * n + i]); } - inline std::complex get_conj(const std::complex& x) + for (int i = 0; i < n; ++i) { - return std::conj(x); + for (int j = i + 1; j < n; ++j) + { + out[i * n + j] = 0.5 * (in[i * n + j] + get_conj(in[j * n + i])); + out[j * n + i] = get_conj(out[i * n + j]); + } } - template - void matsym(const T* in, const int n, T* out) - { - for (int i = 0; i < n; ++i) { - out[i * n + i] = 0.5 * in[i * n + i] + 0.5 * get_conj(in[i * n + i]); -} - for (int i = 0;i < n;++i) { - for (int j = i + 1;j < n;++j) - { - out[i * n + j] = 0.5 * (in[i * n + j] + get_conj(in[j * n + i])); - out[j * n + i] = get_conj(out[i * n + j]); - } } - } - template - void matsym(T* inout, const int n) +template +void matsym(T* inout, const int n) +{ + for (int i = 0; i < n; ++i) { - for (int i = 0; i < n; ++i) { - inout[i * n + i] = 0.5 * (inout[i * n + i] + get_conj(inout[i * n + i])); -} - for (int i = 0;i < n;++i) { - for (int j = i + 1;j < n;++j) - { - inout[i * n + j] = 0.5 * (inout[i * n + j] + get_conj(inout[j * n + i])); - inout[j * n + i] = get_conj(inout[i * n + j]); - } -} + inout[i * n + i] = 0.5 * (inout[i * n + i] + get_conj(inout[i * n + i])); } - - /// get the Psi wrapper of the selected spin from the Psi object - template - psi::Psi get_psi_spin(const psi::Psi& psi_in, const int& is, const int& nk) + for (int i = 0; i < n; ++i) { - return psi::Psi(&psi_in(is * nk, 0, 0), - nk, - psi_in.get_nbands(), - psi_in.get_nbasis(), - true); + for (int j = i + 1; j < n; ++j) + { + inout[i * n + j] = 0.5 * (inout[i * n + j] + get_conj(inout[j * n + i])); + inout[j * n + i] = get_conj(inout[i * n + j]); + } } +} - /// psi(nk=1, nbands=nb, nk * nbasis) -> psi(nb, nk, nbasis) without memory copy - template - psi::Psi k1_to_bfirst_wrapper(const psi::Psi& psi_kfirst, int nk_in, int nbasis_in) - { - assert(psi_kfirst.get_nk() == 1); - assert(nk_in * nbasis_in == psi_kfirst.get_nbasis()); - - int ib_now = psi_kfirst.get_current_b(); - psi_kfirst.fix_b(0); // for get_pointer() to get the head pointer - psi::Psi psi_bfirst(psi_kfirst.get_pointer(), - nk_in, - psi_kfirst.get_nbands(), - nbasis_in, - nbasis_in, - false); - psi_kfirst.fix_b(ib_now); - return psi_bfirst; - } +/// get the Psi wrapper of the selected spin from the Psi object +template +psi::Psi get_psi_spin(const psi::Psi& psi_in, const int& is, const int& nk) +{ + return psi::Psi(&psi_in(is * nk, 0, 0), nk, psi_in.get_nbands(), psi_in.get_nbasis(), true); +} - /// psi(nb, nk, nbasis) -> psi(nk=1, nbands=nb, nk * nbasis) without memory copy - template - psi::Psi bfirst_to_k1_wrapper(const psi::Psi& psi_bfirst) - { - int ib_now = psi_bfirst.get_current_b(); - int ik_now = psi_bfirst.get_current_k(); +/// psi(nk=1, nbands=nb, nk * nbasis) -> psi(nb, nk, nbasis) without memory copy +template +psi::Psi k1_to_bfirst_wrapper(const psi::Psi& psi_kfirst, int nk_in, int nbasis_in) +{ + assert(psi_kfirst.get_nk() == 1); + assert(nk_in * nbasis_in == psi_kfirst.get_nbasis()); - psi_bfirst.fix_kb(0, 0); // for get_pointer() to get the head pointer - psi::Psi psi_kfirst(psi_bfirst.get_pointer(), - 1, - psi_bfirst.get_nbands(), - psi_bfirst.get_nk() * psi_bfirst.get_nbasis(), - psi_bfirst.get_nk() * psi_bfirst.get_nbasis(), - true); - psi_bfirst.fix_kb(ik_now, ib_now); - return psi_kfirst; - } + int ib_now = psi_kfirst.get_current_b(); + psi_kfirst.fix_b(0); // for get_pointer() to get the head pointer + psi::Psi psi_bfirst(psi_kfirst.get_pointer(), + nk_in, + psi_kfirst.get_nbands(), + nbasis_in, + nbasis_in, + false); + psi_kfirst.fix_b(ib_now); + return psi_bfirst; +} -#ifdef __MPI - template - void gather_2d_to_full(const Parallel_2D& pv, const T* submat, T* fullmat, bool col_first, int global_nrow, int global_ncol) - { - ModuleBase::TITLE("LR_Util", "gather_2d_to_full"); - auto get_mpi_datatype = []() -> MPI_Datatype { - if (std::is_same::value) { return MPI_INT; } - if (std::is_same::value) { return MPI_FLOAT; } - else if (std::is_same::value) { return MPI_DOUBLE; } - if (std::is_same>::value) { return MPI_COMPLEX; } - else if (std::is_same>::value) { return MPI_DOUBLE_COMPLEX; } - else { throw std::runtime_error("gather_2d_to_full: unsupported type"); } - }; +/// psi(nb, nk, nbasis) -> psi(nk=1, nbands=nb, nk * nbasis) without memory copy +template +psi::Psi bfirst_to_k1_wrapper(const psi::Psi& psi_bfirst) +{ + int ib_now = psi_bfirst.get_current_b(); + int ik_now = psi_bfirst.get_current_k(); - // zeros - for (int i = 0;i < global_nrow * global_ncol;++i) { fullmat[i] = 0.0; -} - //copy - for (int i = 0;i < pv.get_row_size();++i) { - for (int j = 0;j < pv.get_col_size();++j) { - if (col_first) { - fullmat[pv.local2global_row(i) * global_ncol + pv.local2global_col(j)] = submat[i * pv.get_col_size() + j]; - } else { - fullmat[pv.local2global_col(j) * global_nrow + pv.local2global_row(i)] = submat[j * pv.get_row_size() + i]; -} -} + psi_bfirst.fix_kb(0, 0); // for get_pointer() to get the head pointer + psi::Psi psi_kfirst(psi_bfirst.get_pointer(), + 1, + psi_bfirst.get_nbands(), + psi_bfirst.get_nk() * psi_bfirst.get_nbasis(), + psi_bfirst.get_nk() * psi_bfirst.get_nbasis(), + true); + psi_bfirst.fix_kb(ik_now, ib_now); + return psi_kfirst; } - //reduce to root - MPI_Allreduce(MPI_IN_PLACE, fullmat, global_nrow * global_ncol, get_mpi_datatype(), MPI_SUM, pv.comm()); +#ifdef __MPI +template +void gather_2d_to_full(const Parallel_2D& pv, + const T* submat, + T* fullmat, + bool col_first, + int global_nrow, + int global_ncol) +{ + ModuleBase::TITLE("LR_Util", "gather_2d_to_full"); + auto get_mpi_datatype = []() -> MPI_Datatype { + if (std::is_same::value) + { + return MPI_INT; + } + if (std::is_same::value) + { + return MPI_FLOAT; + } + else if (std::is_same::value) + { + return MPI_DOUBLE; + } + if (std::is_same>::value) + { + return MPI_COMPLEX; + } + else if (std::is_same>::value) + { + return MPI_DOUBLE_COMPLEX; + } + else + { + throw std::runtime_error("gather_2d_to_full: unsupported type"); + } }; + + // zeros + for (int i = 0; i < global_nrow * global_ncol; ++i) + { + fullmat[i] = 0.0; + } + // copy + for (int i = 0; i < pv.get_row_size(); ++i) + { + for (int j = 0; j < pv.get_col_size(); ++j) + { + if (col_first) + { + fullmat[pv.local2global_row(i) * global_ncol + pv.local2global_col(j)] + = submat[i * pv.get_col_size() + j]; + } + else + { + fullmat[pv.local2global_col(j) * global_nrow + pv.local2global_row(i)] + = submat[j * pv.get_row_size() + i]; + } + } + } + + // reduce to root + MPI_Allreduce(MPI_IN_PLACE, fullmat, global_nrow * global_ncol, get_mpi_datatype(), MPI_SUM, pv.comm()); +}; #endif -} +} // namespace LR_Util diff --git a/source/module_lr/utils/lr_util_hcontainer.h b/source/module_lr/utils/lr_util_hcontainer.h index 8937d9d733..76c16c512a 100644 --- a/source/module_lr/utils/lr_util_hcontainer.h +++ b/source/module_lr/utils/lr_util_hcontainer.h @@ -1,120 +1,143 @@ #pragma once #include "module_elecstate/module_dm/density_matrix.h" +#include "source_base/parallel_reduce.h" + #include -#include "module_base/parallel_reduce.h" namespace LR_Util { - template - void print_HR(const hamilt::HContainer& HR, const int& nat, const std::string& label, const double& threshold = 1e-10) - { - std::cout << label << "\n"; - for (int ia = 0;ia < nat;ia++) - for (int ja = 0;ja < nat;ja++) +template +void print_HR(const hamilt::HContainer& HR, + const int& nat, + const std::string& label, + const double& threshold = 1e-10) +{ + std::cout << label << "\n"; + for (int ia = 0; ia < nat; ia++) + for (int ja = 0; ja < nat; ja++) + { + auto ap = HR.find_pair(ia, ja); + for (int iR = 0; iR < ap->get_R_size(); ++iR) { - auto ap = HR.find_pair(ia, ja); - for (int iR = 0;iR < ap->get_R_size();++iR) + std::cout << "atom pair (" << ia << ", " << ja << "), " + << "R=(" << ap->get_R_index(iR)[0] << ", " << ap->get_R_index(iR)[1] << ", " + << ap->get_R_index(iR)[2] << "): \n"; + auto& mat = ap->get_HR_values(iR); + std::cout << "rowsize=" << ap->get_row_size() << ", colsize=" << ap->get_col_size() << "\n"; + for (int i = 0; i < ap->get_row_size(); ++i) { - std::cout << "atom pair (" << ia << ", " << ja << "), " - << "R=(" << ap->get_R_index(iR)[0] << ", " << ap->get_R_index(iR)[1] << ", " << ap->get_R_index(iR)[2] << "): \n"; - auto& mat = ap->get_HR_values(iR); - std::cout << "rowsize=" << ap->get_row_size() << ", colsize=" << ap->get_col_size() << "\n"; - for (int i = 0;i < ap->get_row_size();++i) + for (int j = 0; j < ap->get_col_size(); ++j) { - for (int j = 0;j < ap->get_col_size();++j) - { - auto& v = mat.get_value(i, j); - std::cout << (std::abs(v) > threshold ? v : 0) << " "; - } - std::cout << "\n"; + auto& v = mat.get_value(i, j); + std::cout << (std::abs(v) > threshold ? v : 0) << " "; } + std::cout << "\n"; } } - } - template - void print_DMR(const elecstate::DensityMatrix& DMR, const int& nat, const std::string& label, const double& threshold = 1e-10) - { - std::cout << label << "\n"; - int is = 0; - for (auto& dr : DMR.get_DMR_vector()) - print_HR(*dr, nat, "DMR[" + std::to_string(is++) + "]", threshold); - } - void get_DMR_real_imag_part(const elecstate::DensityMatrix, std::complex>& DMR, - elecstate::DensityMatrix, double>& DMR_real, - const int& nat, - const char& type = 'R'); - void set_HR_real_imag_part(const hamilt::HContainer& HR_real, - hamilt::HContainer>& HR, - const int& nat, - const char& type = 'R'); + } +} +template +void print_DMR(const elecstate::DensityMatrix& DMR, + const int& nat, + const std::string& label, + const double& threshold = 1e-10) +{ + std::cout << label << "\n"; + int is = 0; + for (auto& dr: DMR.get_DMR_vector()) + print_HR(*dr, nat, "DMR[" + std::to_string(is++) + "]", threshold); +} +void get_DMR_real_imag_part(const elecstate::DensityMatrix, std::complex>& DMR, + elecstate::DensityMatrix, double>& DMR_real, + const int& nat, + const char& type = 'R'); +void set_HR_real_imag_part(const hamilt::HContainer& HR_real, + hamilt::HContainer>& HR, + const int& nat, + const char& type = 'R'); - template - void initialize_HR(hamilt::HContainer& hR, - const UnitCell& ucell, - const Grid_Driver& gd, - const std::vector& orb_cutoff) +template +void initialize_HR(hamilt::HContainer& hR, + const UnitCell& ucell, + const Grid_Driver& gd, + const std::vector& orb_cutoff) +{ + const auto& pmat = *hR.get_paraV(); + for (int iat1 = 0; iat1 < ucell.nat; iat1++) { - const auto& pmat = *hR.get_paraV(); - for (int iat1 = 0; iat1 < ucell.nat; iat1++) + auto tau1 = ucell.get_tau(iat1); + int T1, I1; + ucell.iat2iait(iat1, &I1, &T1); + AdjacentAtomInfo adjs; + gd.Find_atom(ucell, tau1, T1, I1, &adjs); + for (int ad = 0; ad < adjs.adj_num + 1; ++ad) { - auto tau1 = ucell.get_tau(iat1); - int T1, I1; - ucell.iat2iait(iat1, &I1, &T1); - AdjacentAtomInfo adjs; - gd.Find_atom(ucell, tau1, T1, I1, &adjs); - for (int ad = 0; ad < adjs.adj_num + 1; ++ad) + const int T2 = adjs.ntype[ad]; + const int I2 = adjs.natom[ad]; + int iat2 = ucell.itia2iat(T2, I2); + if (pmat.get_row_size(iat1) <= 0 || pmat.get_col_size(iat2) <= 0) + { + continue; + } + const ModuleBase::Vector3& R_index = adjs.box[ad]; + if (ucell.cal_dtau(iat1, iat2, R_index).norm() * ucell.lat0 >= orb_cutoff[T1] + orb_cutoff[T2]) { - const int T2 = adjs.ntype[ad]; - const int I2 = adjs.natom[ad]; - int iat2 = ucell.itia2iat(T2, I2); - if (pmat.get_row_size(iat1) <= 0 || pmat.get_col_size(iat2) <= 0) { continue; } - const ModuleBase::Vector3& R_index = adjs.box[ad]; - if (ucell.cal_dtau(iat1, iat2, R_index).norm() * ucell.lat0 >= orb_cutoff[T1] + orb_cutoff[T2]) { continue; } - hamilt::AtomPair tmp(iat1, iat2, R_index.x, R_index.y, R_index.z, &pmat); - hR.insert_pair(tmp); + continue; } + hamilt::AtomPair tmp(iat1, iat2, R_index.x, R_index.y, R_index.z, &pmat); + hR.insert_pair(tmp); } - hR.allocate(nullptr, true); - // hR.set_paraV(&pmat); - if (std::is_same::value) { hR.fix_gamma(); } } - template - void initialize_DMR(elecstate::DensityMatrix& dm, - const Parallel_Orbitals& pmat, - const UnitCell& ucell, - const Grid_Driver& gd, - const std::vector& orb_cutoff) + hR.allocate(nullptr, true); + // hR.set_paraV(&pmat); + if (std::is_same::value) { - hamilt::HContainer hR_tmp(&pmat); - initialize_HR(hR_tmp, ucell, gd, orb_cutoff); - dm.init_DMR(hR_tmp); + hR.fix_gamma(); } +} +template +void initialize_DMR(elecstate::DensityMatrix& dm, + const Parallel_Orbitals& pmat, + const UnitCell& ucell, + const Grid_Driver& gd, + const std::vector& orb_cutoff) +{ + hamilt::HContainer hR_tmp(&pmat); + initialize_HR(hR_tmp, ucell, gd, orb_cutoff); + dm.init_DMR(hR_tmp); +} - /// $\sum_{uvR} H1_{uv}(R) H2_{uv}(R)$ - template - TR1 dot_R_matrix(const hamilt::HContainer& h1, const hamilt::HContainer& h2, const int& nat) +/// $\sum_{uvR} H1_{uv}(R) H2_{uv}(R)$ +template +TR1 dot_R_matrix(const hamilt::HContainer& h1, const hamilt::HContainer& h2, const int& nat) +{ + const auto& pmat = *h1.get_paraV(); + TR1 sum = 0; + // in case of the different order of atom pair and R-index in h1 and h2, we search by value instead of index + for (int iat1 = 0; iat1 < nat; ++iat1) { - const auto& pmat = *h1.get_paraV(); - TR1 sum = 0; - // in case of the different order of atom pair and R-index in h1 and h2, we search by value instead of index - for (int iat1 = 0;iat1 < nat;++iat1) + for (int iat2 = 0; iat2 < nat; ++iat2) { - for (int iat2 = 0;iat2 < nat;++iat2) + auto ap1 = h1.find_pair(iat1, iat2); + if (!ap1) { - auto ap1 = h1.find_pair(iat1, iat2); - if (!ap1) { continue; } - auto ap2 = h2.find_pair(iat1, iat2); - assert(ap2); - for (int iR = 0;iR < ap1->get_R_size();++iR) - { - const ModuleBase::Vector3& R = ap1->get_R_index(iR); - auto mat1 = ap1->get_HR_values(R.x, R.y, R.z); - auto mat2 = ap2->get_HR_values(R.x, R.y, R.z); - sum += std::inner_product(mat1.get_pointer(), mat1.get_pointer() + mat1.get_memory_size(), mat2.get_pointer(), (TR1)0.0); - } + continue; + } + auto ap2 = h2.find_pair(iat1, iat2); + assert(ap2); + for (int iR = 0; iR < ap1->get_R_size(); ++iR) + { + const ModuleBase::Vector3& R = ap1->get_R_index(iR); + auto mat1 = ap1->get_HR_values(R.x, R.y, R.z); + auto mat2 = ap2->get_HR_values(R.x, R.y, R.z); + sum += std::inner_product(mat1.get_pointer(), + mat1.get_pointer() + mat1.get_memory_size(), + mat2.get_pointer(), + (TR1)0.0); } } - Parallel_Reduce::reduce_all(sum); - return sum; } + Parallel_Reduce::reduce_all(sum); + return sum; +} -} \ No newline at end of file +} // namespace LR_Util \ No newline at end of file diff --git a/source/module_md/fire.cpp b/source/module_md/fire.cpp index 7c638d6f4a..db03deba1e 100644 --- a/source/module_md/fire.cpp +++ b/source/module_md/fire.cpp @@ -4,7 +4,7 @@ #ifdef __MPI #include "mpi.h" #endif -#include "module_base/timer.h" +#include "source_base/timer.h" FIRE::FIRE(const Parameter& param_in, UnitCell& unit_in) : MD_base(param_in, unit_in) { @@ -56,7 +56,6 @@ void FIRE::first_half(std::ofstream& ofs) return; } - void FIRE::second_half(void) { ModuleBase::TITLE("FIRE", "second_half"); @@ -71,20 +70,18 @@ void FIRE::second_half(void) return; } - void FIRE::print_md(std::ofstream& ofs, const bool& cal_stress) { MD_base::print_md(ofs, cal_stress); const double max_force = max * ModuleBase::Hartree_to_eV * ModuleBase::ANGSTROM_AU; - ofs << " LARGEST FORCE (eV/A) : " << max_force << std::endl; - std::cout << " LARGEST FORCE (eV/A) : " << max_force << std::endl; + ofs << " LARGEST FORCE (eV/A) : " << max_force << std::endl; + std::cout << " LARGEST FORCE (eV/A) : " << max_force << std::endl; return; } - void FIRE::write_restart(const std::string& global_out_dir) { if (!my_rank) @@ -108,7 +105,6 @@ void FIRE::write_restart(const std::string& global_out_dir) return; } - void FIRE::restart(const std::string& global_readin_dir) { bool ok = true; @@ -152,7 +148,6 @@ void FIRE::restart(const std::string& global_readin_dir) return; } - void FIRE::check_force(void) { max = 0; @@ -176,7 +171,6 @@ void FIRE::check_force(void) return; } - void FIRE::check_fire(void) { double P = 0.0; @@ -231,6 +225,6 @@ void FIRE::check_fire(void) alpha = alpha_start; } - + return; } diff --git a/source/module_md/langevin.cpp b/source/module_md/langevin.cpp index 5dcae66616..979ab82f06 100644 --- a/source/module_md/langevin.cpp +++ b/source/module_md/langevin.cpp @@ -1,17 +1,17 @@ #include "langevin.h" #include "md_func.h" -#include "module_base/parallel_common.h" -#include "module_base/timer.h" +#include "source_base/parallel_common.h" +#include "source_base/timer.h" Langevin::Langevin(const Parameter& param_in, UnitCell& unit_in) : MD_base(param_in, unit_in) { /// convert to a.u. unit - assert(ModuleBase::AU_to_FS!=0.0); + assert(ModuleBase::AU_to_FS != 0.0); md_damp = mdp.md_damp / ModuleBase::AU_to_FS; - assert(ucell.nat>0); + assert(ucell.nat > 0); total_force = new ModuleBase::Vector3[ucell.nat]; } @@ -21,7 +21,6 @@ Langevin::~Langevin() delete[] total_force; } - void Langevin::setup(ModuleESolver::ESolver* p_esolver, const std::string& global_readin_dir) { ModuleBase::TITLE("Langevin", "setup"); @@ -35,7 +34,6 @@ void Langevin::setup(ModuleESolver::ESolver* p_esolver, const std::string& globa return; } - void Langevin::first_half(std::ofstream& ofs) { ModuleBase::TITLE("Langevin", "first_half"); @@ -48,7 +46,6 @@ void Langevin::first_half(std::ofstream& ofs) return; } - void Langevin::second_half() { ModuleBase::TITLE("Langevin", "second_half"); @@ -61,28 +58,24 @@ void Langevin::second_half() return; } - void Langevin::print_md(std::ofstream& ofs, const bool& cal_stress) { MD_base::print_md(ofs, cal_stress); return; } - void Langevin::write_restart(const std::string& global_out_dir) { MD_base::write_restart(global_out_dir); return; } - void Langevin::restart(const std::string& global_readin_dir) { MD_base::restart(global_readin_dir); return; } - void Langevin::post_force() { if (my_rank == 0) diff --git a/source/module_md/md_func.cpp b/source/module_md/md_func.cpp index c8c971c5ab..e92bf7e457 100644 --- a/source/module_md/md_func.cpp +++ b/source/module_md/md_func.cpp @@ -1,19 +1,18 @@ #include "md_func.h" -#include "module_base/global_variable.h" -#include "module_base/timer.h" - +#include "source_base/global_variable.h" +#include "source_base/timer.h" namespace MD_func { double gaussrand() { - static double v1=0.0; - static double v2=0.0; - static double S=0.0; + static double v1 = 0.0; + static double v2 = 0.0; + static double S = 0.0; static int phase = 0; - double xx=0.0; + double xx = 0.0; if (phase == 0) { @@ -196,18 +195,18 @@ void init_vel(const UnitCell& unit_in, ModuleBase::Vector3 frozen; get_mass_mbl(unit_in, allmass, frozen, ionmbl); frozen_freedom = frozen.x + frozen.y + frozen.z; - if (frozen.x == 0) - { - ++frozen_freedom; - } - if (frozen.y == 0) - { - ++frozen_freedom; - } - if (frozen.z == 0) - { - ++frozen_freedom; - } + if (frozen.x == 0) + { + ++frozen_freedom; + } + if (frozen.y == 0) + { + ++frozen_freedom; + } + if (frozen.z == 0) + { + ++frozen_freedom; + } if (unit_in.init_vel) { @@ -286,7 +285,6 @@ void force_virial(ModuleESolver::ESolver* p_esolver, return; } - void print_stress(std::ofstream& ofs, const ModuleBase::matrix& virial, const ModuleBase::matrix& stress) { double stress_scalar = 0.0; @@ -302,20 +300,21 @@ void print_stress(std::ofstream& ofs, const ModuleBase::matrix& virial, const Mo ofs << " MD PRESSURE (ELECTRONS+IONS) : " << stress_scalar * unit_transform << " kbar" << std::endl; ofs << " ELECTRONIC PART OF STRESS: " << virial_scalar * unit_transform << " kbar" << std::endl; - ofs << " IONIC (KINETIC) PART OF STRESS: " << (stress_scalar - virial_scalar) * unit_transform << " kbar" << std::endl; + ofs << " IONIC (KINETIC) PART OF STRESS: " << (stress_scalar - virial_scalar) * unit_transform << " kbar" + << std::endl; // one should use 'print_stress' function in ../source/module_io/output_log.cpp -/* - ofs.unsetf(std::ios::fixed); - ofs << std::setprecision(8) << std::endl; - ModuleBase::GlobalFunc::NEW_PART("MD STRESS (kbar)"); - for (int i = 0; i < 3; i++) - { - ofs << std::setw(15) << stress(i, 0) * unit_transform << std::setw(15) << stress(i, 1) * unit_transform - << std::setw(15) << stress(i, 2) * unit_transform << std::endl; - } - ofs << std::setiosflags(std::ios::left); -*/ + /* + ofs.unsetf(std::ios::fixed); + ofs << std::setprecision(8) << std::endl; + ModuleBase::GlobalFunc::NEW_PART("MD STRESS (kbar)"); + for (int i = 0; i < 3; i++) + { + ofs << std::setw(15) << stress(i, 0) * unit_transform << std::setw(15) << stress(i, 1) * unit_transform + << std::setw(15) << stress(i, 2) * unit_transform << std::endl; + } + ofs << std::setiosflags(std::ios::left); + */ return; } @@ -425,15 +424,18 @@ void get_mass_mbl(const UnitCell& unit_in, { allmass[ion] = unit_in.atoms[it].mass / ModuleBase::AU_to_MASS; ionmbl[ion] = unit_in.atoms[it].mbl[i]; - if (ionmbl[ion].x == 0) { + if (ionmbl[ion].x == 0) + { ++frozen.x; -} - if (ionmbl[ion].y == 0) { + } + if (ionmbl[ion].y == 0) + { ++frozen.y; -} - if (ionmbl[ion].z == 0) { + } + if (ionmbl[ion].z == 0) + { ++frozen.z; -} + } ion++; } @@ -444,7 +446,7 @@ void get_mass_mbl(const UnitCell& unit_in, double target_temp(const int& istep, const int& nstep, const double& tfirst, const double& tlast) { - assert(nstep>0); + assert(nstep > 0); double delta = static_cast(istep) / nstep; return tfirst + delta * (tlast - tfirst); } @@ -488,7 +490,6 @@ void temp_vector(const int& natom, return; } - void current_md_info(const int& my_rank, const std::string& file_dir, int& md_step, double& temperature) { bool ok = true; diff --git a/source/module_md/msst.cpp b/source/module_md/msst.cpp index 3ff8c7c6f9..f7bd8fa12b 100644 --- a/source/module_md/msst.cpp +++ b/source/module_md/msst.cpp @@ -1,11 +1,11 @@ #include "msst.h" -#include "module_cell/update_cell.h" #include "md_func.h" +#include "module_cell/update_cell.h" #ifdef __MPI #include "mpi.h" #endif -#include "module_base/timer.h" +#include "source_base/timer.h" MSST::MSST(const Parameter& param_in, UnitCell& unit_in) : MD_base(param_in, unit_in) { @@ -13,7 +13,7 @@ MSST::MSST(const Parameter& param_in, UnitCell& unit_in) : MD_base(param_in, uni msst_vel = mdp.msst_vel * ModuleBase::ANGSTROM_AU * ModuleBase::AU_to_FS; msst_vis = mdp.msst_vis / ModuleBase::AU_to_MASS / ModuleBase::ANGSTROM_AU * ModuleBase::AU_to_FS; - assert(ucell.nat>0); + assert(ucell.nat > 0); old_v = new ModuleBase::Vector3[ucell.nat]; dilation.set(1, 1, 1); @@ -24,7 +24,7 @@ MSST::MSST(const Parameter& param_in, UnitCell& unit_in) : MD_base(param_in, uni totmass = 0; lag_pos = 0; vsum = 0; - + for (int i = 0; i < ucell.nat; ++i) { totmass += allmass[i]; @@ -158,7 +158,6 @@ void MSST::second_half() return; } - void MSST::print_md(std::ofstream& ofs, const bool& cal_stress) { MD_base::print_md(ofs, cal_stress); @@ -191,7 +190,6 @@ void MSST::write_restart(const std::string& global_out_dir) return; } - void MSST::restart(const std::string& global_readin_dir) { bool ok = true; @@ -252,14 +250,14 @@ void MSST::rescale(std::ofstream& ofs, const double& volume) { int sd = mdp.msst_direction; - assert(ucell.omega>0.0); + assert(ucell.omega > 0.0); dilation[sd] = volume / ucell.omega; ucell.latvec.e11 *= dilation[0]; ucell.latvec.e22 *= dilation[1]; ucell.latvec.e33 *= dilation[2]; - unitcell::setup_cell_after_vc(ucell,ofs); + unitcell::setup_cell_after_vc(ucell, ofs); /// rescale velocity for (int i = 0; i < ucell.nat; ++i) @@ -268,7 +266,6 @@ void MSST::rescale(std::ofstream& ofs, const double& volume) } } - void MSST::propagate_vel() { if (my_rank == 0) @@ -308,7 +305,6 @@ void MSST::propagate_vel() return; } - void MSST::propagate_voldot() { const int sd = mdp.msst_direction; diff --git a/source/module_md/nhchain.cpp b/source/module_md/nhchain.cpp index db4662f44c..f0f4f2117c 100644 --- a/source/module_md/nhchain.cpp +++ b/source/module_md/nhchain.cpp @@ -4,15 +4,15 @@ #ifdef __MPI #include "mpi.h" #endif -#include "module_base/timer.h" #include "module_cell/update_cell.h" +#include "source_base/timer.h" Nose_Hoover::Nose_Hoover(const Parameter& param_in, UnitCell& unit_in) : MD_base(param_in, unit_in) { const double unit_transform = ModuleBase::HARTREE_SI / pow(ModuleBase::BOHR_RADIUS_SI, 3) * 1.0e-8; md_tfreq = mdp.md_tfreq * ModuleBase::AU_to_FS; - assert(unit_transform>0.0); + assert(unit_transform > 0.0); md_pfirst = mdp.md_pfirst / unit_transform; md_plast = mdp.md_plast / unit_transform; @@ -89,7 +89,7 @@ Nose_Hoover::Nose_Hoover(const Parameter& param_in, UnitCell& unit_in) : MD_base tdof = 3 * ucell.nat - frozen_freedom_; - assert(mdp.md_tchain>0); + assert(mdp.md_tchain > 0); /// allocate thermostats coupled with particles mass_eta = new double[mdp.md_tchain]; @@ -271,7 +271,6 @@ void Nose_Hoover::first_half(std::ofstream& ofs) return; } - void Nose_Hoover::second_half() { ModuleBase::TITLE("Nose_Hoover", "second_half"); @@ -315,7 +314,6 @@ void Nose_Hoover::second_half() return; } - void Nose_Hoover::print_md(std::ofstream& ofs, const bool& cal_stress) { MD_base::print_md(ofs, cal_stress); @@ -809,7 +807,7 @@ void Nose_Hoover::update_volume(std::ofstream& ofs) } /// reset ucell and pos due to change of lattice - unitcell::setup_cell_after_vc(ucell,ofs); + unitcell::setup_cell_after_vc(ucell, ofs); } void Nose_Hoover::target_stress() diff --git a/source/module_md/run_md.cpp b/source/module_md/run_md.cpp index 5009c3dd67..9937dcaa5a 100644 --- a/source/module_md/run_md.cpp +++ b/source/module_md/run_md.cpp @@ -1,17 +1,17 @@ #include "run_md.h" -#include "module_parameter/parameter.h" #include "fire.h" #include "langevin.h" #include "md_func.h" -#include "module_base/global_file.h" -#include "module_base/timer.h" +#include "module_cell/print_cell.h" +#include "module_cell/update_cell.h" #include "module_io/print_info.h" +#include "module_parameter/parameter.h" #include "msst.h" #include "nhchain.h" +#include "source_base/global_file.h" +#include "source_base/timer.h" #include "verlet.h" -#include "module_cell/update_cell.h" -#include "module_cell/print_cell.h" namespace Run_MD { @@ -98,27 +98,27 @@ void md_line(UnitCell& unit_in, ModuleESolver::ESolver* p_esolver, const Paramet if ((mdrun->step_ + mdrun->step_rst_) % param_in.mdp.md_restartfreq == 0) { - unitcell::update_vel(mdrun->vel,unit_in.ntype,unit_in.nat,unit_in.atoms); + unitcell::update_vel(mdrun->vel, unit_in.ntype, unit_in.nat, unit_in.atoms); std::stringstream file; file << PARAM.globalv.global_stru_dir << "STRU_MD_" << mdrun->step_ + mdrun->step_rst_; // changelog 20240509 // because I move out the dependence on GlobalV from UnitCell::print_stru_file // so its parameter is calculated here - bool need_orb = PARAM.inp.basis_type=="pw"; - need_orb = need_orb && PARAM.inp.init_wfc.substr(0, 3)=="nao"; - need_orb = need_orb || PARAM.inp.basis_type=="lcao"; - need_orb = need_orb || PARAM.inp.basis_type=="lcao_in_pw"; + bool need_orb = PARAM.inp.basis_type == "pw"; + need_orb = need_orb && PARAM.inp.init_wfc.substr(0, 3) == "nao"; + need_orb = need_orb || PARAM.inp.basis_type == "lcao"; + need_orb = need_orb || PARAM.inp.basis_type == "lcao_in_pw"; unitcell::print_stru_file(unit_in, - unit_in.atoms, - unit_in.latvec, - file.str(), - PARAM.inp.nspin, - false, // Cartesian coordinates - PARAM.inp.calculation == "md", - PARAM.inp.out_mul, - need_orb, - PARAM.globalv.deepks_setorb, - GlobalV::MY_RANK); + unit_in.atoms, + unit_in.latvec, + file.str(), + PARAM.inp.nspin, + false, // Cartesian coordinates + PARAM.inp.calculation == "md", + PARAM.inp.out_mul, + need_orb, + PARAM.globalv.deepks_setorb, + GlobalV::MY_RANK); mdrun->write_restart(PARAM.globalv.global_out_dir); } diff --git a/source/module_md/test/CMakeLists.txt b/source/module_md/test/CMakeLists.txt index 70ba640b81..3224e2abde 100644 --- a/source/module_md/test/CMakeLists.txt +++ b/source/module_md/test/CMakeLists.txt @@ -19,27 +19,27 @@ list(APPEND depend_files ../../module_cell/read_pp_upf201.cpp ../../module_cell/read_pp_vwr.cpp ../../module_cell/read_pp_blps.cpp - ../../module_base/matrix3.cpp - ../../module_base/matrix.cpp - ../../module_base/timer.cpp - ../../module_base/blas_connector_base.cpp - ../../module_base/blas_connector_matrix.cpp - ../../module_base/blas_connector_vector.cpp - ../../module_base/memory.cpp - ../../module_base/global_variable.cpp - ../../module_base/global_function.cpp - ../../module_base/global_file.cpp - ../../module_base/tool_title.cpp - ../../module_base/tool_check.cpp - ../../module_base/tool_quit.cpp - ../../module_base/intarray.cpp - ../../module_base/realarray.cpp - ../../module_base/complexarray.cpp - ../../module_base/complexmatrix.cpp - ../../module_base/global_variable.cpp - ../../module_base/libm/branred.cpp - ../../module_base/libm/sincos.cpp - ../../module_base/math_integral.cpp + ../../source_base/matrix3.cpp + ../../source_base/matrix.cpp + ../../source_base/timer.cpp + ../../source_base/blas_connector_base.cpp + ../../source_base/blas_connector_matrix.cpp + ../../source_base/blas_connector_vector.cpp + ../../source_base/memory.cpp + ../../source_base/global_variable.cpp + ../../source_base/global_function.cpp + ../../source_base/global_file.cpp + ../../source_base/tool_title.cpp + ../../source_base/tool_check.cpp + ../../source_base/tool_quit.cpp + ../../source_base/intarray.cpp + ../../source_base/realarray.cpp + ../../source_base/complexarray.cpp + ../../source_base/complexmatrix.cpp + ../../source_base/global_variable.cpp + ../../source_base/libm/branred.cpp + ../../source_base/libm/sincos.cpp + ../../source_base/math_integral.cpp ../../module_cell/module_neighbor/sltk_atom_arrange.cpp ../../module_cell/module_neighbor/sltk_atom.cpp ../../module_cell/module_neighbor/sltk_grid.cpp @@ -49,9 +49,9 @@ list(APPEND depend_files ../../module_io/print_info.cpp ../../module_io/cif_io.cpp ../../source_esolver/esolver_lj.cpp - ../../module_base/parallel_reduce.cpp - ../../module_base/parallel_global.cpp - ../../module_base/parallel_comm.cpp + ../../source_base/parallel_reduce.cpp + ../../source_base/parallel_global.cpp + ../../source_base/parallel_comm.cpp ../../module_elecstate/read_pseudo.cpp ../../module_elecstate/cal_wfc.cpp ../../module_elecstate/cal_nelec_nband.cpp diff --git a/source/module_md/verlet.cpp b/source/module_md/verlet.cpp index 2eec7a0e20..930cc97852 100644 --- a/source/module_md/verlet.cpp +++ b/source/module_md/verlet.cpp @@ -1,7 +1,7 @@ #include "verlet.h" #include "md_func.h" -#include "module_base/timer.h" +#include "source_base/timer.h" Verlet::Verlet(const Parameter& param_in, UnitCell& unit_in) : MD_base(param_in, unit_in) { @@ -11,7 +11,6 @@ Verlet::~Verlet() { } - void Verlet::setup(ModuleESolver::ESolver* p_esolver, const std::string& global_readin_dir) { ModuleBase::TITLE("Verlet", "setup"); @@ -22,7 +21,6 @@ void Verlet::setup(ModuleESolver::ESolver* p_esolver, const std::string& global_ ModuleBase::timer::tick("Verlet", "setup"); } - void Verlet::first_half(std::ofstream& ofs) { ModuleBase::TITLE("Verlet", "first_half"); @@ -34,7 +32,6 @@ void Verlet::first_half(std::ofstream& ofs) ModuleBase::timer::tick("Verlet", "first_half"); } - void Verlet::second_half() { ModuleBase::TITLE("Verlet", "second_half"); @@ -46,7 +43,6 @@ void Verlet::second_half() ModuleBase::timer::tick("Verlet", "second_half"); } - void Verlet::apply_thermostat(void) { double t_target = 0.0; @@ -106,7 +102,6 @@ void Verlet::apply_thermostat(void) } } - void Verlet::thermalize(const int& nraise, const double& current_temp, const double& target_temp) { double fac = 0.0; @@ -125,21 +120,18 @@ void Verlet::thermalize(const int& nraise, const double& current_temp, const dou } } - void Verlet::print_md(std::ofstream& ofs, const bool& cal_stress) { MD_base::print_md(ofs, cal_stress); return; } - void Verlet::write_restart(const std::string& global_out_dir) { MD_base::write_restart(global_out_dir); return; } - void Verlet::restart(const std::string& global_readin_dir) { MD_base::restart(global_readin_dir); diff --git a/source/module_parameter/input_parameter.h b/source/module_parameter/input_parameter.h index 548e7da575..cf91c2157d 100644 --- a/source/module_parameter/input_parameter.h +++ b/source/module_parameter/input_parameter.h @@ -1,7 +1,7 @@ #ifndef INPUT_PARAMETER_H #define INPUT_PARAMETER_H #include "md_parameter.h" -#include "module_base/vector3.h" +#include "source_base/vector3.h" #include #include @@ -88,7 +88,7 @@ struct Input_para int pw_diag_ndim = 4; ///< dimension of workspace for Davidson diagonalization int diago_cg_prec = 1; ///< mohan add 2012-03-31 int diag_subspace = 0; // 0: Lapack, 1: elpa, 2: scalapack - bool use_k_continuity = false; ///< whether to use k-point continuity for initializing wave functions + bool use_k_continuity = false; ///< whether to use k-point continuity for initializing wave functions std::string smearing_method = "gauss"; ///< "gauss", ///< "mp","methfessel-paxton" @@ -115,7 +115,7 @@ struct Input_para double scf_thr = -1.0; ///< \sum |rhog_out - rhog_in |^2 double scf_ene_thr = -1.0; ///< energy threshold for scf convergence, in eV int scf_thr_type = -1; ///< type of the criterion of scf_thr, 1: reci drho, 2: real drho -// bool final_scf = false; ///< whether to do final scf + // bool final_scf = false; ///< whether to do final scf bool scf_os_stop = false; ///< whether to stop scf when oscillation is detected double scf_os_thr = -0.01; ///< drho threshold for oscillation int scf_os_ndim = 0; ///< number of old iterations used for oscillation detection @@ -261,17 +261,17 @@ struct Input_para //========================================================== // DeepKS -- added by caoyu and mohan //========================================================== - int deepks_out_labels = 0; ///< (need libnpy) prints energy and force labels and - ///< descriptors for training, wenfei 2022-1-12 - bool deepks_scf = false; ///< (need libnpy and libtorch) if set to true, a trained model - ///< would be needed to calculate V_delta and F_delta - int deepks_bandgap = 0; ///< for bandgap label. QO added 2021-12-15 + int deepks_out_labels = 0; ///< (need libnpy) prints energy and force labels and + ///< descriptors for training, wenfei 2022-1-12 + bool deepks_scf = false; ///< (need libnpy and libtorch) if set to true, a trained model + ///< would be needed to calculate V_delta and F_delta + int deepks_bandgap = 0; ///< for bandgap label. QO added 2021-12-15 std::vector deepks_band_range = {-1, 0}; ///< the range of bands to calculate bandgap - int deepks_v_delta = 0; ///< for v_delta label. xuan added - bool deepks_equiv = false; ///< whether to use equivariant version of DeePKS - bool deepks_out_unittest = false; ///< if set to true, prints intermediate quantities that shall - ///< be used for making unit test - std::string deepks_model = "None"; ///< needed when deepks_scf=1 + int deepks_v_delta = 0; ///< for v_delta label. xuan added + bool deepks_equiv = false; ///< whether to use equivariant version of DeePKS + bool deepks_out_unittest = false; ///< if set to true, prints intermediate quantities that shall + ///< be used for making unit test + std::string deepks_model = "None"; ///< needed when deepks_scf=1 int bessel_descriptor_lmax = 2; ///< lmax used in descriptor std::string bessel_descriptor_ecut = "default"; ///< energy cutoff for spherical bessel functions(Ry) @@ -390,20 +390,20 @@ struct Input_para ///< in an append manner during MD liuyu 2023-03-20 int out_ndigits = 8; ///< Assuming 8 digits precision is needed for matrices output bool out_mat_t = false; - bool out_element_info = false; ///< output information of all elements - bool out_mat_r = false; ///< jingan add 2019-8-14, output r(R) matrix. - int out_wfc_lcao = 0; ///< output the wave functions in local basis. - bool out_dipole = false; ///< output the dipole or not - bool out_efield = false; ///< output the efield or not - bool out_current = false; ///< output the current or not - bool out_current_k = false; ///< output tddft current for all k points - bool out_vecpot = false; ///< output the vector potential or not - bool restart_save = false; ///< restart //Peize Lin add 2020-04-04 - bool rpa = false; ///< rpa calculation - int nbands_istate = 5; ///< number of bands around fermi level for get_pchg calculation. - std::vector out_pchg = {}; ///< specify the bands to be calculated for partial charge - std::vector out_wfc_norm = {}; ///< specify the bands to be calculated for norm of wfc - std::vector out_wfc_re_im = {}; ///< specify the bands to be calculated for real and imaginary parts of wfc + bool out_element_info = false; ///< output information of all elements + bool out_mat_r = false; ///< jingan add 2019-8-14, output r(R) matrix. + int out_wfc_lcao = 0; ///< output the wave functions in local basis. + bool out_dipole = false; ///< output the dipole or not + bool out_efield = false; ///< output the efield or not + bool out_current = false; ///< output the current or not + bool out_current_k = false; ///< output tddft current for all k points + bool out_vecpot = false; ///< output the vector potential or not + bool restart_save = false; ///< restart //Peize Lin add 2020-04-04 + bool rpa = false; ///< rpa calculation + int nbands_istate = 5; ///< number of bands around fermi level for get_pchg calculation. + std::vector out_pchg = {}; ///< specify the bands to be calculated for partial charge + std::vector out_wfc_norm = {}; ///< specify the bands to be calculated for norm of wfc + std::vector out_wfc_re_im = {}; ///< specify the bands to be calculated for real and imaginary parts of wfc bool if_separate_k = false; ///< whether to write partial charge for all k-points to individual files or merge them std::vector out_elf = {0, 3}; ///< output the electron localization function (ELF). 0: no; 1: yes @@ -412,8 +412,8 @@ struct Input_para double dos_emax_ev = 15.0; double dos_edelta_ev = 0.01; double dos_scale = 0.01; - double dos_sigma = 0.07; ///< pengfei 2014-10-13 - int dos_nche = 100; ///< orders of Chebyshev expansions for dos + double dos_sigma = 0.07; ///< pengfei 2014-10-13 + int dos_nche = 100; ///< orders of Chebyshev expansions for dos std::vector stm_bias = {1.0, 0.1, 1}; ///< bias voltage for STM (start value, step, number) std::vector ldos_line = {0.0, @@ -653,36 +653,35 @@ struct Input_para // ============== #Parameters (22.EXX PW) ===================== // EXX for planewave basis, rhx0820 2025-03-10 bool exxace = true; // exxace, exact exchange for planewave basis, https://doi.org/10.1021/acs.jctc.6b00092 - bool exx_gamma_extrapolation = true; // gamma point extrapolation for exx, https://doi.org/10.1103/PhysRevB.79.205114 + bool exx_gamma_extrapolation + = true; // gamma point extrapolation for exx, https://doi.org/10.1103/PhysRevB.79.205114 // ==== #Parameters (23.XC external parameterization) ======== /* * the following two sets of parameters are for the XC parameterization. * The first element should be the LibXC id, to assign the analytical * form of the eXchange and Correlation part of the functional. - * + * * Starting from the second parameter, the parameters are the coefficients * of the functional. For example the M06-L functional, one should refer * to the source file (source code of LibXC) - * + * * src/mgga_x_m06l.c - * + * * the implementation can be found in the file - * + * * src/maple2c/mgga_exc/mgga_x_m06l.c. - * + * * There are 18 parameters for the exchange part, so the whole length of * the xc_exch_ext should be 19. (MGGA_X_M06L, id = 203) - * + * * Likewise, the correlation part can be found in corresponding files. - * + * * PBE functional is used as the default functional for XCPNet. */ // src/gga_x_pbe.c - std::vector xc_exch_ext = { - 101, 0.8040, 0.2195149727645171}; + std::vector xc_exch_ext = {101, 0.8040, 0.2195149727645171}; // src/gga_c_pbe.c - std::vector xc_corr_ext = { - 130, 0.06672455060314922, 0.031090690869654895034, 1.00000}; + std::vector xc_corr_ext = {130, 0.06672455060314922, 0.031090690869654895034, 1.00000}; }; #endif diff --git a/source/module_psi/psi.cpp b/source/module_psi/psi.cpp index 6fb18f3ee9..6ed35b9116 100644 --- a/source/module_psi/psi.cpp +++ b/source/module_psi/psi.cpp @@ -1,9 +1,9 @@ #include "psi.h" -#include "module_base/global_variable.h" -#include "module_base/module_device/device.h" -#include "module_base/tool_quit.h" #include "module_parameter/parameter.h" +#include "source_base/global_variable.h" +#include "source_base/module_device/device.h" +#include "source_base/tool_quit.h" #include #include @@ -171,7 +171,6 @@ Psi::Psi(const Psi& psi_in) this->psi_current = this->psi + psi_in.get_psi_bias(); } - // Constructor 2-2: template template @@ -203,9 +202,7 @@ Psi::Psi(const Psi& psi_in) - psi_in.get_psi_bias(), psi_in.size()); // synchronize the memory from CPU to GPU - base_device::memory::synchronize_memory_op()(this->psi, - arr, - psi_in.size()); + base_device::memory::synchronize_memory_op()(this->psi, arr, psi_in.size()); free(arr); } else @@ -229,7 +226,7 @@ void Psi::set_all_psi(const T* another_pointer, const std::size_t siz template Psi& Psi::operator=(const Psi& psi_in) { -// printf("%d\n", &psi_in); + // printf("%d\n", &psi_in); this->ngk = psi_in.ngk; this->nk = psi_in.get_nk(); this->nbands = psi_in.get_nbands(); @@ -240,9 +237,7 @@ Psi& Psi::operator=(const Psi& psi_in) // this function will copy psi_in.psi to this->psi no matter the device types of each other. this->resize(psi_in.get_nk(), psi_in.get_nbands(), psi_in.get_nbasis()); - base_device::memory::synchronize_memory_op()(this->psi, - psi_in.psi, - psi_in.size()); + base_device::memory::synchronize_memory_op()(this->psi, psi_in.psi, psi_in.size()); this->psi_bias = psi_in.get_psi_bias(); this->current_nbasis = psi_in.get_current_nbas(); this->psi_current = this->psi + psi_in.get_psi_bias(); diff --git a/source/module_psi/psi.h b/source/module_psi/psi.h index 6ba0a33720..17354ba2f8 100644 --- a/source/module_psi/psi.h +++ b/source/module_psi/psi.h @@ -1,8 +1,8 @@ #ifndef PSI_H #define PSI_H -#include "module_base/module_device/memory_op.h" -#include "module_base/module_device/types.h" +#include "source_base/module_device/memory_op.h" +#include "source_base/module_device/types.h" #include #include diff --git a/source/module_psi/psi_init.cpp b/source/module_psi/psi_init.cpp index 38c3b4c5d0..f911c82fc5 100644 --- a/source/module_psi/psi_init.cpp +++ b/source/module_psi/psi_init.cpp @@ -1,11 +1,5 @@ #include "psi_init.h" -#include "module_base/macros.h" -#include "module_base/memory.h" -#include "module_base/parallel_device.h" -#include "module_base/timer.h" -#include "module_base/tool_quit.h" -#include "source_hsolver/diago_iter_assist.h" #include "module_parameter/parameter.h" #include "module_psi/psi_initializer_atomic.h" #include "module_psi/psi_initializer_atomic_random.h" @@ -13,6 +7,12 @@ #include "module_psi/psi_initializer_nao.h" #include "module_psi/psi_initializer_nao_random.h" #include "module_psi/psi_initializer_random.h" +#include "source_base/macros.h" +#include "source_base/memory.h" +#include "source_base/parallel_device.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" +#include "source_hsolver/diago_iter_assist.h" namespace psi { @@ -133,7 +133,8 @@ void PSIInit::initialize_psi(Psi>* psi, // like (1, nbands, npwx), in which npwx is the maximal npw of all kpoints for (int ik = 0; ik < this->pw_wfc.nks; ik++) { - if(PARAM.inp.use_k_continuity && ik > 0) continue; + if (PARAM.inp.use_k_continuity && ik > 0) + continue; //! Fix the wavefunction to initialize at given kpoint psi->fix_k(ik); kspw_psi->fix_k(ik); @@ -148,7 +149,6 @@ void PSIInit::initialize_psi(Psi>* psi, { syncmem_h2d_op()(psi_device->get_pointer(), psi_cpu->get_pointer(), nbands_start * nbasis); } - if (this->ks_solver == "cg") { @@ -205,8 +205,13 @@ void PSIInit::initialize_psi(Psi>* psi, else { MPI_Status status; - Parallel_Common::recv_dev(kspw_psi->get_pointer(), nbands_l * nbasis, 0, 0, BP_WORLD, &status); - } + Parallel_Common::recv_dev(kspw_psi->get_pointer(), + nbands_l * nbasis, + 0, + 0, + BP_WORLD, + &status); + } } #endif } // end k-point loop diff --git a/source/module_psi/psi_initializer.cpp b/source/module_psi/psi_initializer.cpp index 03b25c0f79..0652232f91 100644 --- a/source/module_psi/psi_initializer.cpp +++ b/source/module_psi/psi_initializer.cpp @@ -1,15 +1,15 @@ #include "psi_initializer.h" -#include "module_base/memory.h" +#include "source_base/memory.h" // basic functions support -#include "module_base/timer.h" -#include "module_base/tool_quit.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" // three global variables definition -#include "module_base/global_variable.h" #include "module_parameter/parameter.h" +#include "source_base/global_variable.h" #ifdef __MPI -#include "module_base/parallel_reduce.h" +#include "source_base/parallel_reduce.h" #endif template diff --git a/source/module_psi/psi_initializer.h b/source/module_psi/psi_initializer.h index e54ff9d3ff..b0516b01b6 100644 --- a/source/module_psi/psi_initializer.h +++ b/source/module_psi/psi_initializer.h @@ -8,13 +8,13 @@ // smart pointer for auto-memory management #include // numerical algorithm support -#include "module_base/spherical_bessel_transformer.h" // for spherical bessel transform +#include "source_base/spherical_bessel_transformer.h" // for spherical bessel transform #ifdef __MPI #include #endif -#include "module_base/macros.h" -#include "module_base/parallel_global.h" #include "module_cell/klist.h" +#include "source_base/macros.h" +#include "source_base/parallel_global.h" #include /* diff --git a/source/module_psi/psi_initializer_atomic.cpp b/source/module_psi/psi_initializer_atomic.cpp index 224836806b..270c571c21 100644 --- a/source/module_psi/psi_initializer_atomic.cpp +++ b/source/module_psi/psi_initializer_atomic.cpp @@ -1,16 +1,17 @@ #include "psi_initializer_atomic.h" + #include "module_hamilt_pw/hamilt_pwdft/soc.h" // numerical algorithm support -#include "module_base/math_integral.h" // for numerical integration -#include "module_base/math_polyint.h" // for polynomial interpolation -#include "module_base/math_ylmreal.h" // for real spherical harmonics -#include "module_base/math_sphbes.h" // for spherical bessel functions +#include "source_base/math_integral.h" // for numerical integration +#include "source_base/math_polyint.h" // for polynomial interpolation +#include "source_base/math_sphbes.h" // for spherical bessel functions +#include "source_base/math_ylmreal.h" // for real spherical harmonics // basic functions support -#include "module_base/tool_quit.h" -#include "module_base/timer.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" // global variables definition -#include "module_base/global_variable.h" #include "module_parameter/parameter.h" +#include "source_base/global_variable.h" // io support #include "module_io/write_pao.h" @@ -29,7 +30,7 @@ template void psi_initializer_atomic::allocate_ps_table() { - // find correct dimension for ovlp_flzjlq + // find correct dimension for ovlp_flzjlq int dim1 = this->p_ucell_->ntype; int dim2 = 0; // dim2 should be the maximum number of pseudo atomic orbitals for (int it = 0; it < this->p_ucell_->ntype; it++) @@ -38,7 +39,9 @@ void psi_initializer_atomic::allocate_ps_table() } if (dim2 == 0) { - ModuleBase::WARNING_QUIT("psi_initializer_atomic::allocate_table", "there is not ANY pseudo atomic orbital read in present system, recommand other methods, quit."); + ModuleBase::WARNING_QUIT( + "psi_initializer_atomic::allocate_table", + "there is not ANY pseudo atomic orbital read in present system, recommand other methods, quit."); } int dim3 = PARAM.globalv.nqx; // allocate memory for ovlp_flzjlq @@ -51,15 +54,15 @@ void psi_initializer_atomic::initialize(const Structure_Factor* sf, / const ModulePW::PW_Basis_K* pw_wfc, //< planewave basis const UnitCell* p_ucell, //< unit cell const K_Vectors* p_kv_in, - const int& random_seed, //< random seed + const int& random_seed, //< random seed const pseudopot_cell_vnl* p_pspot_nl, const int& rank) { ModuleBase::timer::tick("psi_init_atomic", "initialize"); - if(p_pspot_nl == nullptr) + if (p_pspot_nl == nullptr) { - ModuleBase::WARNING_QUIT("psi_initializer_atomic::initialize", + ModuleBase::WARNING_QUIT("psi_initializer_atomic::initialize", "pseudopot_cell_vnl object cannot be nullptr for atomic, quit."); } // import @@ -80,41 +83,42 @@ template void psi_initializer_atomic::tabulate() { ModuleBase::timer::tick("psi_init_atomic", "tabulate"); - + GlobalV::ofs_running << "\n Make real space PAO into reciprocal space." << std::endl; ModuleIO::print_PAOs(*this->p_ucell_); // Find the type of atom that has most mesh points. int max_msh = 0; - for (int it=0; itp_ucell_->ntype; it++) + for (int it = 0; it < this->p_ucell_->ntype; it++) { max_msh = (this->p_ucell_->atoms[it].ncpp.msh > max_msh) ? this->p_ucell_->atoms[it].ncpp.msh : max_msh; } - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"max mesh points in Pseudopotential",max_msh); - + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "max mesh points in Pseudopotential", max_msh); + this->ovlp_pswfcjlq_.zero_out(); const int startq = 0; const double pref = ModuleBase::FOUR_PI / sqrt(this->p_ucell_->omega); std::vector aux(max_msh); std::vector vchi(max_msh); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"dq(describe PAO in reciprocal space)",PARAM.globalv.dq); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running,"max q",PARAM.globalv.nqx); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "dq(describe PAO in reciprocal space)", PARAM.globalv.dq); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "max q", PARAM.globalv.nqx); - for (int it=0; itp_ucell_->ntype; it++) + for (int it = 0; it < this->p_ucell_->ntype; it++) { - Atom* atom = &this->p_ucell_->atoms[it]; + Atom* atom = &this->p_ucell_->atoms[it]; - GlobalV::ofs_running<<"\n number of pseudo atomic orbitals for "<label<<" is "<< atom->ncpp.nchi << std::endl; + GlobalV::ofs_running << "\n number of pseudo atomic orbitals for " << atom->label << " is " << atom->ncpp.nchi + << std::endl; // QE uses atom->ncpp.mesh const int n_rgrid = (PARAM.inp.pseudo_mesh) ? atom->ncpp.mesh : atom->ncpp.msh; std::vector chi2(n_rgrid); - for (int ic = 0; ic < atom->ncpp.nchi ;ic++) + for (int ic = 0; ic < atom->ncpp.nchi; ic++) { // check the unit condition - for(int ir=0; irncpp.chi(ic, ir); chi2[ir] = chi * chi; @@ -170,7 +174,10 @@ void psi_initializer_atomic::tabulate() { norm_beta[ik] = atom->ncpp.betar(ib, ik) * atom->ncpp.chi(ic, ik); } - ModuleBase::Integral::Simpson_Integral(kkbeta, norm_beta.data(), atom->ncpp.rab.data(), work[ib]); + ModuleBase::Integral::Simpson_Integral(kkbeta, + norm_beta.data(), + atom->ncpp.rab.data(), + work[ib]); } else { @@ -222,14 +229,26 @@ void psi_initializer_atomic::tabulate() std::complex phase_factor(double arg, int mode) { - if(mode == 1) { return std::complex(cos(arg),0); } - else if (mode == -1) { return std::complex(0, sin(arg)); } - else if (mode == 0) { return std::complex(cos(arg), sin(arg)); } - else { return std::complex(1,0); } + if (mode == 1) + { + return std::complex(cos(arg), 0); + } + else if (mode == -1) + { + return std::complex(0, sin(arg)); + } + else if (mode == 0) + { + return std::complex(cos(arg), sin(arg)); + } + else + { + return std::complex(1, 0); + } } template -void psi_initializer_atomic::init_psig(T* psig, const int& ik) +void psi_initializer_atomic::init_psig(T* psig, const int& ik) { ModuleBase::timer::tick("psi_init_atomic", "init_psig"); const int npw = this->pw_wfc_->npwk[ik]; @@ -255,66 +274,74 @@ void psi_initializer_atomic::init_psig(T* psig, const int& ik) { for (int ia = 0; ia < this->p_ucell_->atoms[it].na; ia++) { -/* FOR EVERY ATOM */ + /* FOR EVERY ATOM */ // I think it is always a BAD idea to new one pointer in a function, then return it // it indicates the ownership of the pointer and behind memory is transferred to the caller // then one must manually delete it, makes new-delete not symmetric - std::complex *sk = this->sf_->get_sk(ik, it, ia, this->pw_wfc_); + std::complex* sk = this->sf_->get_sk(ik, it, ia, this->pw_wfc_); for (int ipswfc = 0; ipswfc < this->p_ucell_->atoms[it].ncpp.nchi; ipswfc++) { -/* FOR EVERY PSWFC OF ATOM */ + /* FOR EVERY PSWFC OF ATOM */ if (this->p_ucell_->atoms[it].ncpp.oc[ipswfc] >= 0.0) { -/* IF IS OCCUPIED, GET L */ + /* IF IS OCCUPIED, GET L */ const int l = this->p_ucell_->atoms[it].ncpp.lchi[ipswfc]; std::complex lphase = pow(ModuleBase::NEG_IMAG_UNIT, l); - for (int ig=0; igovlp_pswfcjlq_, it, ipswfc, - PARAM.globalv.nqx, PARAM.globalv.dq, gk[ig].norm() * this->p_ucell_->tpiba ); + ovlp_pswfcjlg[ig] + = ModuleBase::PolyInt::Polynomial_Interpolation(this->ovlp_pswfcjlq_, + it, + ipswfc, + PARAM.globalv.nqx, + PARAM.globalv.dq, + gk[ig].norm() * this->p_ucell_->tpiba); } -/* NSPIN == 4 */ - if(PARAM.inp.nspin == 4) + /* NSPIN == 4 */ + if (PARAM.inp.nspin == 4) { - if(this->p_ucell_->atoms[it].ncpp.has_so) + if (this->p_ucell_->atoms[it].ncpp.has_so) { - Soc soc; soc.rot_ylm(l + 1); + Soc soc; + soc.rot_ylm(l + 1); const double j = this->p_ucell_->atoms[it].ncpp.jchi[ipswfc]; - /* NOT NONCOLINEAR CASE, rotation matrix become identity */ - if (!(PARAM.globalv.domag||PARAM.globalv.domag_z)) + /* NOT NONCOLINEAR CASE, rotation matrix become identity */ + if (!(PARAM.globalv.domag || PARAM.globalv.domag_z)) { double cg_coeffs[2]; - for(int m = -l-1; m < l+1; m++) + for (int m = -l - 1; m < l + 1; m++) { cg_coeffs[0] = soc.spinor(l, j, m, 0); cg_coeffs[1] = soc.spinor(l, j, m, 1); if (fabs(cg_coeffs[0]) > 1e-8 || fabs(cg_coeffs[1]) > 1e-8) { - for(int is = 0; is < 2; is++) + for (int is = 0; is < 2; is++) { - if(fabs(cg_coeffs[is]) > 1e-8) + if (fabs(cg_coeffs[is]) > 1e-8) { - /* GET COMPLEX SPHERICAL HARMONIC FUNCTION */ - const int ind = this->p_pspot_nl_->lmaxkb + soc.sph_ind(l,j,m,is); // ind can be l+m, l+m+1, l+m-1 + /* GET COMPLEX SPHERICAL HARMONIC FUNCTION */ + const int ind + = this->p_pspot_nl_->lmaxkb + + soc.sph_ind(l, j, m, is); // ind can be l+m, l+m+1, l+m-1 std::fill(aux.begin(), aux.end(), std::complex(0.0, 0.0)); - for(int n1 = 0; n1 < 2*l+1; n1++) + for (int n1 = 0; n1 < 2 * l + 1; n1++) { - const int lm = l*l +n1; + const int lm = l * l + n1; std::complex umM = soc.rotylm(n1, ind); - if(std::abs(umM) > 1e-8) + if (std::abs(umM) > 1e-8) { - for(int ig = 0; ig < npw; ig++) + for (int ig = 0; ig < npw; ig++) { aux[ig] += umM * ylm(lm, ig); } } } - for(int ig = 0; ig < npw; ig++) + for (int ig = 0; ig < npw; ig++) { - psig[(2 * index + is) * npwk_max + ig] = this->template cast_to_T( - lphase * cg_coeffs[is] * sk[ig] * aux[ig] * ovlp_pswfcjlg[ig]); + psig[(2 * index + is) * npwk_max + ig] + = this->template cast_to_T(lphase * cg_coeffs[is] * sk[ig] + * aux[ig] * ovlp_pswfcjlg[ig]); } } else @@ -332,77 +359,84 @@ void psi_initializer_atomic::init_psig(T* psig, const int& ik) } else { - /* NONCONLINEAR CASE, will use [[cos(a/2)*exp(-ib/2), sin(a/2)*exp(ib/2)], [-sin(a/2)*exp(-ib/2), cos(a/2)*exp(ib/2)]] to rotate */ - int ipswfc_noncolin_soc=0; - /* J = L - 1/2 -> continue */ - /* J = L + 1/2 */ - if(fabs(j - l + 0.5) < 1e-4) - { - continue; - } - chiaux.clear(); - chiaux.resize(npw); - /* L == 0 */ - if(l == 0) - { - std::memcpy(chiaux.data(), ovlp_pswfcjlg.data(), npw * sizeof(double)); - } + /* NONCONLINEAR CASE, will use [[cos(a/2)*exp(-ib/2), sin(a/2)*exp(ib/2)], + * [-sin(a/2)*exp(-ib/2), cos(a/2)*exp(ib/2)]] to rotate */ + int ipswfc_noncolin_soc = 0; + /* J = L - 1/2 -> continue */ + /* J = L + 1/2 */ + if (fabs(j - l + 0.5) < 1e-4) + { + continue; + } + chiaux.clear(); + chiaux.resize(npw); + /* L == 0 */ + if (l == 0) + { + std::memcpy(chiaux.data(), ovlp_pswfcjlg.data(), npw * sizeof(double)); + } else { - /* L != 0, scan pswfcs that have the same L and satisfy J(pswfc) = L - 0.5 */ - for(int jpsiwfc = 0; jpsiwfc < this->p_ucell_->atoms[it].ncpp.nchi; jpsiwfc++) + /* L != 0, scan pswfcs that have the same L and satisfy J(pswfc) = L - 0.5 */ + for (int jpsiwfc = 0; jpsiwfc < this->p_ucell_->atoms[it].ncpp.nchi; jpsiwfc++) { - if( - (this->p_ucell_->atoms[it].ncpp.lchi[jpsiwfc] == l) - &&(fabs(this->p_ucell_->atoms[it].ncpp.jchi[jpsiwfc] - l + 0.5) < 1e-4)) + if ((this->p_ucell_->atoms[it].ncpp.lchi[jpsiwfc] == l) + && (fabs(this->p_ucell_->atoms[it].ncpp.jchi[jpsiwfc] - l + 0.5) < 1e-4)) { ipswfc_noncolin_soc = jpsiwfc; break; } } - for(int ig=0;ig and , a and b seem not necessarily to be equal */ - chiaux[ig] = l * - ModuleBase::PolyInt::Polynomial_Interpolation( - this->ovlp_pswfcjlq_, it, ipswfc_noncolin_soc, - PARAM.globalv.nqx, PARAM.globalv.dq, gk[ig].norm() * this->p_ucell_->tpiba); - chiaux[ig] += ovlp_pswfcjlg[ig] * (l + 1.0) ; - chiaux[ig] *= 1/(2.0*l+1.0); + /* average and , a and b seem not + * necessarily to be equal */ + chiaux[ig] = l + * ModuleBase::PolyInt::Polynomial_Interpolation( + this->ovlp_pswfcjlq_, + it, + ipswfc_noncolin_soc, + PARAM.globalv.nqx, + PARAM.globalv.dq, + gk[ig].norm() * this->p_ucell_->tpiba); + chiaux[ig] += ovlp_pswfcjlg[ig] * (l + 1.0); + chiaux[ig] *= 1 / (2.0 * l + 1.0); } } - /* ROTATE ACCORDING TO NONCOLINEAR */ + /* ROTATE ACCORDING TO NONCOLINEAR */ double alpha = this->p_ucell_->atoms[it].angle1[ia]; double gamma = -1 * this->p_ucell_->atoms[it].angle2[ia] + 0.5 * ModuleBase::PI; std::complex fup, fdw; - for(int m = 0; m < 2*l+1; m++) + for (int m = 0; m < 2 * l + 1; m++) { - const int lm = l*l +m; - if(index+2*l+1 > this->p_ucell_->natomwfc) + const int lm = l * l + m; + if (index + 2 * l + 1 > this->p_ucell_->natomwfc) { - std::cout<<__FILE__<<__LINE__<<" "<p_ucell_->natomwfc<::init_psig()","error: too many wfcs"); + std::cout << __FILE__ << __LINE__ << " " << index << " " + << this->p_ucell_->natomwfc << std::endl; + // ModuleBase::WARNING_QUIT("psi_initializer_atomic::init_psig()","error: too + // many wfcs"); } - for(int ig = 0;igtemplate cast_to_T(phase_factor(0.5 * gamma, 0) * fup); psig[(index * 2 + 1) * npwk_max + ig] = this->template cast_to_T(phase_factor(-0.5 * gamma, 0) * fdw); - //second rotation with angle gamma around(OZ) - fup = phase_factor(0.5*(alpha + ModuleBase::PI), 1)*aux[ig]; - fdw = phase_factor(0.5*(alpha + ModuleBase::PI), -1)*aux[ig]; + // second rotation with angle gamma around(OZ) + fup = phase_factor(0.5 * (alpha + ModuleBase::PI), 1) * aux[ig]; + fdw = phase_factor(0.5 * (alpha + ModuleBase::PI), -1) * aux[ig]; psig[(index + 2 * l + 1) * 2 * npwk_max + ig] = this->template cast_to_T(phase_factor(0.5 * gamma, 0) * fup); psig[((index + 2 * l + 1) * 2 + 1) * npwk_max + ig] @@ -410,33 +444,35 @@ void psi_initializer_atomic::init_psig(T* psig, const int& ik) } index++; } - index += 2*l +1; + index += 2 * l + 1; } } else - {//atomic_wfc_nc - double alpha=0.0; - double gamman=0.0; + { // atomic_wfc_nc + double alpha = 0.0; + double gamman = 0.0; std::complex fup, fdown; - //alpha = this->p_ucell_->magnet.angle1_[it]; - //gamman = -this->p_ucell_->magnet.angle2_[it] + 0.5*ModuleBase::PI; + // alpha = this->p_ucell_->magnet.angle1_[it]; + // gamman = -this->p_ucell_->magnet.angle2_[it] + 0.5*ModuleBase::PI; alpha = this->p_ucell_->atoms[it].angle1[ia]; gamman = -1 * this->p_ucell_->atoms[it].angle2[ia] + 0.5 * ModuleBase::PI; - for(int m = 0; m < 2*l+1; m++) + for (int m = 0; m < 2 * l + 1; m++) { - const int lm = l*l +m; - if(index+2*l+1 > this->p_ucell_->natomwfc) + const int lm = l * l + m; + if (index + 2 * l + 1 > this->p_ucell_->natomwfc) { - std::cout<<__FILE__<<__LINE__<<" "<p_ucell_->natomwfc<::init_psig()","error: too many wfcs"); + std::cout << __FILE__ << __LINE__ << " " << index << " " << this->p_ucell_->natomwfc + << std::endl; + // ModuleBase::WARNING_QUIT("psi_initializer_atomic::init_psig()","error: too + // many wfcs"); } - for(int ig = 0;ig::init_psig(T* psig, const int& ik) } index++; } - index += 2*l+1; + index += 2 * l + 1; } } else { - for (int m = 0; m < 2*l+1; m++) + for (int m = 0; m < 2 * l + 1; m++) { const int lm = l * l + m; for (int ig = 0; ig < npw; ig++) @@ -474,14 +510,14 @@ void psi_initializer_atomic::init_psig(T* psig, const int& ik) } } } - delete [] sk; + delete[] sk; } } - /* complement the rest of bands if there are */ - if(this->nbands_complem() > 0) - { - this->random_t(psig, index, this->nbands_start_, ik); - } + /* complement the rest of bands if there are */ + if (this->nbands_complem() > 0) + { + this->random_t(psig, index, this->nbands_start_, ik); + } ModuleBase::timer::tick("psi_init_atomic", "init_psig"); } diff --git a/source/module_psi/psi_initializer_atomic.h b/source/module_psi/psi_initializer_atomic.h index 402e63af59..38a76f8adf 100644 --- a/source/module_psi/psi_initializer_atomic.h +++ b/source/module_psi/psi_initializer_atomic.h @@ -1,7 +1,7 @@ #ifndef PSI_INITIALIZER_ATOMIC_H #define PSI_INITIALIZER_ATOMIC_H -#include "module_base/realarray.h" #include "psi_initializer.h" +#include "source_base/realarray.h" /* Psi (planewave based wavefunction) initializer: atomic diff --git a/source/module_psi/psi_initializer_file.cpp b/source/module_psi/psi_initializer_file.cpp index d1378e1cd7..cfc02a4bea 100644 --- a/source/module_psi/psi_initializer_file.cpp +++ b/source/module_psi/psi_initializer_file.cpp @@ -1,10 +1,10 @@ #include "psi_initializer_file.h" -#include "module_base/timer.h" #include "module_cell/klist.h" -#include "module_io/read_wfc_pw.h" #include "module_io/filename.h" +#include "module_io/read_wfc_pw.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" template void psi_initializer_file::initialize(const Structure_Factor* sf, @@ -31,19 +31,33 @@ void psi_initializer_file::init_psig(T* psig, const int& ik) int ik_tot = this->p_kv->ik2iktot[ik]; // mohan update, this is for plane wave, 2025-05-17 - const int out_type = 2; - const bool out_app_flag = false; - const bool gamma_only = false; - const int istep = -1; - - std::string fn = ModuleIO::filename_output(PARAM.globalv.global_readin_dir,"wf","pw", - ik,this->p_kv->ik2iktot,PARAM.inp.nspin,nkstot, - out_type,out_app_flag,gamma_only,istep); - - ModuleIO::read_wfc_pw(fn, this->pw_wfc_, - GlobalV::RANK_IN_POOL, GlobalV::NPROC_IN_POOL, - PARAM.inp.nbands, PARAM.globalv.npol, - ik, ik_tot, nkstot, wfcatom); + const int out_type = 2; + const bool out_app_flag = false; + const bool gamma_only = false; + const int istep = -1; + + std::string fn = ModuleIO::filename_output(PARAM.globalv.global_readin_dir, + "wf", + "pw", + ik, + this->p_kv->ik2iktot, + PARAM.inp.nspin, + nkstot, + out_type, + out_app_flag, + gamma_only, + istep); + + ModuleIO::read_wfc_pw(fn, + this->pw_wfc_, + GlobalV::RANK_IN_POOL, + GlobalV::NPROC_IN_POOL, + PARAM.inp.nbands, + PARAM.globalv.npol, + ik, + ik_tot, + nkstot, + wfcatom); assert(this->nbands_start_ <= wfcatom.nr); for (int ib = 0; ib < this->nbands_start_; ib++) diff --git a/source/module_psi/psi_initializer_nao.cpp b/source/module_psi/psi_initializer_nao.cpp index e88c759cba..8ad185a9e9 100644 --- a/source/module_psi/psi_initializer_nao.cpp +++ b/source/module_psi/psi_initializer_nao.cpp @@ -2,19 +2,19 @@ #include // numerical algorithm support -#include "module_base/math_integral.h" // for numerical integration +#include "source_base/math_integral.h" // for numerical integration // numerical algorithm support -#include "module_base/math_polyint.h" // for polynomial interpolation -#include "module_base/math_ylmreal.h" // for real spherical harmonics +#include "source_base/math_polyint.h" // for polynomial interpolation +#include "source_base/math_ylmreal.h" // for real spherical harmonics // basic functions support -#include "module_base/timer.h" -#include "module_base/tool_quit.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" // three global variables definition -#include "module_base/global_variable.h" +#include "source_base/global_variable.h" // parallel communication #ifdef __MPI -#include "module_base/parallel_common.h" -#include "module_base/parallel_reduce.h" +#include "source_base/parallel_common.h" +#include "source_base/parallel_reduce.h" #endif #include "module_io/orb_io.h" #include "module_parameter/parameter.h" @@ -345,8 +345,9 @@ void psi_initializer_nao::init_psig(T* psig, const int& ik) fdown = ModuleBase::IMAG_UNIT * sin(0.5 * (alpha + ModuleBase::PI)) * aux[ig]; psig[(ibasis + 2 * L + 1) * 2 * npwk_max + ig] = this->template cast_to_T( (cos(0.5 * gamma) + ModuleBase::IMAG_UNIT * sin(0.5 * gamma)) * fup); - psig[((ibasis + 2 * L + 1) * 2 + 1) * npwk_max + ig] = this->template cast_to_T( - (cos(0.5 * gamma) - ModuleBase::IMAG_UNIT * sin(0.5 * gamma)) * fdown); + psig[((ibasis + 2 * L + 1) * 2 + 1) * npwk_max + ig] + = this->template cast_to_T( + (cos(0.5 * gamma) - ModuleBase::IMAG_UNIT * sin(0.5 * gamma)) * fdown); } ibasis++; } @@ -363,7 +364,8 @@ void psi_initializer_nao::init_psig(T* psig, const int& ik) #pragma omp parallel for for (int ig = 0; ig < npw; ig++) { - psig[ibasis * npwk_max + ig] = this->template cast_to_T(lphase * sk[ig] * ylm(lm, ig) * Jlfq[ig]); + psig[ibasis * npwk_max + ig] + = this->template cast_to_T(lphase * sk[ig] * ylm(lm, ig) * Jlfq[ig]); } ++ibasis; } diff --git a/source/module_psi/psi_initializer_nao.h b/source/module_psi/psi_initializer_nao.h index c9ba087ed6..5a76a4521f 100644 --- a/source/module_psi/psi_initializer_nao.h +++ b/source/module_psi/psi_initializer_nao.h @@ -1,8 +1,8 @@ #ifndef PSI_INITIALIZER_NAO_H #define PSI_INITIALIZER_NAO_H -#include "module_base/cubic_spline.h" -#include "module_base/realarray.h" #include "psi_initializer.h" +#include "source_base/cubic_spline.h" +#include "source_base/realarray.h" #include /* diff --git a/source/module_psi/psi_initializer_random.cpp b/source/module_psi/psi_initializer_random.cpp index e781f32dfb..53c4acac90 100644 --- a/source/module_psi/psi_initializer_random.cpp +++ b/source/module_psi/psi_initializer_random.cpp @@ -2,10 +2,10 @@ #ifdef __MPI #include #endif -#include "module_base/parallel_global.h" -#include "module_base/timer.h" #include "module_cell/parallel_kpoints.h" #include "module_parameter/parameter.h" +#include "source_base/parallel_global.h" +#include "source_base/timer.h" template void psi_initializer_random::initialize(const Structure_Factor* sf, diff --git a/source/module_rdmft/rdmft.cpp b/source/module_rdmft/rdmft.cpp index 3649c0fa26..a78f590221 100644 --- a/source/module_rdmft/rdmft.cpp +++ b/source/module_rdmft/rdmft.cpp @@ -4,30 +4,26 @@ //========================================================== #include "rdmft.h" -#include "module_rdmft/rdmft_tools.h" -#include "module_base/timer.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/parallel_reduce.h" -#include "module_cell/module_symmetry/symmetry.h" +#include "module_cell/module_symmetry/symmetry.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_rdmft/rdmft_tools.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" -#include +#include #include #include #include +#include #include -#include - - namespace rdmft { - template RDMFT::RDMFT() { - } template @@ -82,16 +78,19 @@ void RDMFT::init(Gint_Gamma& GG_in, nspin = PARAM.inp.nspin; nbands_total = PARAM.inp.nbands; - nk_total = ModuleSymmetry::Symmetry::symm_flag == -1 ? kv->get_nkstot_full(): kv->get_nks(); + nk_total = ModuleSymmetry::Symmetry::symm_flag == -1 ? kv->get_nkstot_full() : kv->get_nks(); nk_total *= nspin; - only_exx_type = ( XC_func_rdmft == "hf" || XC_func_rdmft == "muller" || XC_func_rdmft == "power" ); + only_exx_type = (XC_func_rdmft == "hf" || XC_func_rdmft == "muller" || XC_func_rdmft == "power"); // create desc[] and something about MPI to Eij(nbands*nbands) #ifdef __MPI - para_Eij.set(nbands_total, nbands_total, ParaV->nb, ParaV->blacs_ctxt); // maybe in default, PARAM.inp.nb2d = 0, can't be used + para_Eij.set(nbands_total, + nbands_total, + ParaV->nb, + ParaV->blacs_ctxt); // maybe in default, PARAM.inp.nb2d = 0, can't be used #endif - // + // occ_number.create(nk_total, nbands_total); wg.create(nk_total, nbands_total); wk_fun_occNum.create(nk_total, nbands_total); @@ -103,8 +102,8 @@ void RDMFT::init(Gint_Gamma& GG_in, wfcHwfc_exx_XC.create(nk_total, nbands_total); wfcHwfc_dft_XC.create(nk_total, nbands_total); - // - wfc.resize(nk_total, ParaV->ncol_bands, ParaV->nrow); // test ParaV->nrow + // + wfc.resize(nk_total, ParaV->ncol_bands, ParaV->nrow); // test ParaV->nrow occNum_HamiltWfc.resize(nk_total, ParaV->ncol_bands, ParaV->nrow); H_wfc_TV.resize(nk_total, ParaV->ncol_bands, ParaV->nrow); H_wfc_hartree.resize(nk_total, ParaV->ncol_bands, ParaV->nrow); @@ -118,17 +117,16 @@ void RDMFT::init(Gint_Gamma& GG_in, hsk_dft_XC = new hamilt::HS_Matrix_K(ParaV, true); hsk_exx_XC = new hamilt::HS_Matrix_K(ParaV, true); - HK_XC.resize( ParaV->get_row_size()*ParaV->get_col_size() ); + HK_XC.resize(ParaV->get_row_size() * ParaV->get_col_size()); // HK_RDMFT_pass.resize(nk_total, ParaV->get_row_size(), ParaV->get_col_size()); // HK_XC_pass.resize(nk_total, ParaV->get_row_size(), ParaV->get_col_size()); + Eij_TV.resize(para_Eij.get_row_size() * para_Eij.get_col_size()); + Eij_hartree.resize(para_Eij.get_row_size() * para_Eij.get_col_size()); + Eij_XC.resize(para_Eij.get_row_size() * para_Eij.get_col_size()); + Eij_exx_XC.resize(para_Eij.get_row_size() * para_Eij.get_col_size()); - Eij_TV.resize( para_Eij.get_row_size()*para_Eij.get_col_size() ); - Eij_hartree.resize( para_Eij.get_row_size()*para_Eij.get_col_size() ); - Eij_XC.resize( para_Eij.get_row_size()*para_Eij.get_col_size() ); - Eij_exx_XC.resize( para_Eij.get_row_size()*para_Eij.get_col_size() ); - - // + // HR_TV = new hamilt::HContainer(*ucell, ParaV); HR_hartree = new hamilt::HContainer(*ucell, ParaV); HR_exx_XC = new hamilt::HContainer(*ucell, ParaV); @@ -142,50 +140,53 @@ void RDMFT::init(Gint_Gamma& GG_in, H_wfc_XC.zero_out(); H_wfc_exx_XC.zero_out(); H_wfc_dft_XC.zero_out(); - - HR_TV->set_zero(); // HR->set_zero() might be delete here, test on Gamma_only in the furure + + HR_TV->set_zero(); // HR->set_zero() might be delete here, test on Gamma_only in the furure HR_hartree->set_zero(); HR_exx_XC->set_zero(); HR_dft_XC->set_zero(); // HR_local->set_zero(); #ifdef __EXX - if( GlobalC::exx_info.info_global.cal_exx ) + if (GlobalC::exx_info.info_global.cal_exx) { - // if the irreducible k-points can change with symmetry during cell-relax, it should be moved back to update_ion() + // if the irreducible k-points can change with symmetry during cell-relax, it should be moved back to + // update_ion() exx_spacegroup_symmetry = (PARAM.inp.nspin < 4 && ModuleSymmetry::Symmetry::symm_flag == 1); if (exx_spacegroup_symmetry) { const std::array& period = RI_Util::get_Born_vonKarmen_period(*kv); - this->symrot_exx.find_irreducible_sector(ucell->symm, ucell->atoms, ucell->st, - RI_Util::get_Born_von_Karmen_cells(period), period, ucell->lat); + this->symrot_exx.find_irreducible_sector(ucell->symm, + ucell->atoms, + ucell->st, + RI_Util::get_Born_von_Karmen_cells(period), + period, + ucell->lat); this->symrot_exx.cal_Ms(*kv, *ucell, *ParaV); } if (GlobalC::exx_info.info_ri.real_number) { Vxc_fromRI_d = new Exx_LRI(GlobalC::exx_info.info_ri); - Vxc_fromRI_d->init(MPI_COMM_WORLD, ucell_in,*kv, *orb); + Vxc_fromRI_d->init(MPI_COMM_WORLD, ucell_in, *kv, *orb); } else { Vxc_fromRI_c = new Exx_LRI>(GlobalC::exx_info.info_ri); - Vxc_fromRI_c->init(MPI_COMM_WORLD, ucell_in,*kv, *orb); + Vxc_fromRI_c->init(MPI_COMM_WORLD, ucell_in, *kv, *orb); } } #endif - if( PARAM.inp.gamma_only ) + if (PARAM.inp.gamma_only) { HR_TV->fix_gamma(); HR_hartree->fix_gamma(); HR_exx_XC->fix_gamma(); HR_dft_XC->fix_gamma(); } - } - template void RDMFT::cal_Hk_Hpsi() { @@ -196,8 +197,8 @@ void RDMFT::cal_Hk_Hpsi() // std::cout << "\n\ntest V_exx_XC in rdmft.cpp: " << std::endl; // HK_XC_pass.reset(); - //calculate Hwfc, wfcHwfc for each potential - for(int ik=0; ikset_zero_hk(); hsk_hartree->set_zero_hk(); @@ -208,38 +209,40 @@ void RDMFT::cal_Hk_Hpsi() V_hartree->contributeHk(ik); // get H(k) * wfc - HkPsi( ParaV, hsk_TV->get_hk()[0], wfc(ik, 0, 0), H_wfc_TV(ik, 0, 0)); - HkPsi( ParaV, hsk_hartree->get_hk()[0], wfc(ik, 0, 0), H_wfc_hartree(ik, 0, 0)); + HkPsi(ParaV, hsk_TV->get_hk()[0], wfc(ik, 0, 0), H_wfc_TV(ik, 0, 0)); + HkPsi(ParaV, hsk_hartree->get_hk()[0], wfc(ik, 0, 0), H_wfc_hartree(ik, 0, 0)); // get wfc * H(k)_wfc - cal_bra_op_ket( ParaV, para_Eij, wfc(ik, 0, 0), H_wfc_TV(ik, 0, 0), Eij_TV ); - cal_bra_op_ket( ParaV, para_Eij, wfc(ik, 0, 0), H_wfc_hartree(ik, 0, 0), Eij_hartree ); - _diagonal_in_serial( para_Eij, Eij_TV, &(wfcHwfc_TV(ik, 0)) ); - _diagonal_in_serial( para_Eij, Eij_hartree, &(wfcHwfc_hartree(ik, 0)) ); + cal_bra_op_ket(ParaV, para_Eij, wfc(ik, 0, 0), H_wfc_TV(ik, 0, 0), Eij_TV); + cal_bra_op_ket(ParaV, para_Eij, wfc(ik, 0, 0), H_wfc_hartree(ik, 0, 0), Eij_hartree); + _diagonal_in_serial(para_Eij, Eij_TV, &(wfcHwfc_TV(ik, 0))); + _diagonal_in_serial(para_Eij, Eij_hartree, &(wfcHwfc_hartree(ik, 0))); #ifdef __EXX - if(GlobalC::exx_info.info_global.cal_exx) + if (GlobalC::exx_info.info_global.cal_exx) { hsk_exx_XC->set_zero_hk(); V_exx_XC->contributeHk(ik); - HkPsi( ParaV, hsk_exx_XC->get_hk()[0], wfc(ik, 0, 0), H_wfc_exx_XC(ik, 0, 0)); - cal_bra_op_ket( ParaV, para_Eij, wfc(ik, 0, 0), H_wfc_exx_XC(ik, 0, 0), Eij_exx_XC ); - _diagonal_in_serial( para_Eij, Eij_exx_XC, &(wfcHwfc_exx_XC(ik, 0)) ); - - for(int iloc=0; ilocget_hk()[iloc]; + HkPsi(ParaV, hsk_exx_XC->get_hk()[0], wfc(ik, 0, 0), H_wfc_exx_XC(ik, 0, 0)); + cal_bra_op_ket(ParaV, para_Eij, wfc(ik, 0, 0), H_wfc_exx_XC(ik, 0, 0), Eij_exx_XC); + _diagonal_in_serial(para_Eij, Eij_exx_XC, &(wfcHwfc_exx_XC(ik, 0))); + + for (int iloc = 0; iloc < HK_XC.size(); ++iloc) + HK_XC[iloc] += hsk_exx_XC->get_hk()[iloc]; } #endif - if( !only_exx_type ) + if (!only_exx_type) { hsk_dft_XC->set_zero_hk(); V_dft_XC->contributeHk(ik); - HkPsi( ParaV, hsk_dft_XC->get_hk()[0], wfc(ik, 0, 0), H_wfc_dft_XC(ik, 0, 0)); - cal_bra_op_ket( ParaV, para_Eij, wfc(ik, 0, 0), H_wfc_dft_XC(ik, 0, 0), Eij_XC ); - _diagonal_in_serial( para_Eij, Eij_XC, &(wfcHwfc_dft_XC(ik, 0)) ); - - for(int iloc=0; ilocget_hk()[iloc]; + HkPsi(ParaV, hsk_dft_XC->get_hk()[0], wfc(ik, 0, 0), H_wfc_dft_XC(ik, 0, 0)); + cal_bra_op_ket(ParaV, para_Eij, wfc(ik, 0, 0), H_wfc_dft_XC(ik, 0, 0), Eij_XC); + _diagonal_in_serial(para_Eij, Eij_XC, &(wfcHwfc_dft_XC(ik, 0))); + + for (int iloc = 0; iloc < HK_XC.size(); ++iloc) + HK_XC[iloc] += hsk_dft_XC->get_hk()[iloc]; } // // store HK_RDMFT @@ -254,17 +257,14 @@ void RDMFT::cal_Hk_Hpsi() // } // } - // using them to the gradient of Etotal is not correct when do hybrid calculation, it's correct just for exx-type functional - // HkPsi( ParaV, HK_XC[0], wfc(ik, 0, 0), H_wfc_XC(ik, 0, 0)); - // psiDotPsi( ParaV, para_Eij, wfc(ik, 0, 0), H_wfc_XC(ik, 0, 0), Eij_XC, &(wfcHwfc_XC(ik, 0)) ); - + // using them to the gradient of Etotal is not correct when do hybrid calculation, it's correct just for + // exx-type functional HkPsi( ParaV, HK_XC[0], wfc(ik, 0, 0), H_wfc_XC(ik, 0, 0)); psiDotPsi( ParaV, para_Eij, + // wfc(ik, 0, 0), H_wfc_XC(ik, 0, 0), Eij_XC, &(wfcHwfc_XC(ik, 0)) ); } // std::cout << "\n\nsum of XC_minus_XC: " << XC_minus_XC << "\n\n" << std::endl; - } - template double RDMFT::cal_E_grad_wfc_occ_num() { @@ -272,10 +272,27 @@ double RDMFT::cal_E_grad_wfc_occ_num() // !this would transfer the value of H_wfc_TV, H_wfc_hartree, H_wfc_XC --> occNum_H_wfc // get the gradient of energy with respect to the wfc, i.e., Wk_occNum_HamiltWfc - add_psi(ParaV, kv, occ_number, H_wfc_TV, H_wfc_hartree, H_wfc_dft_XC, H_wfc_exx_XC, occNum_HamiltWfc, XC_func_rdmft, alpha_power); + add_psi(ParaV, + kv, + occ_number, + H_wfc_TV, + H_wfc_hartree, + H_wfc_dft_XC, + H_wfc_exx_XC, + occNum_HamiltWfc, + XC_func_rdmft, + alpha_power); // get the gradient of energy with respect to the natural occupation numbers, i.e., Wk_occNum_wfcHamiltWfc - add_occNum(*kv, occ_number, wfcHwfc_TV, wfcHwfc_hartree, wfcHwfc_dft_XC, wfcHwfc_exx_XC, occNum_wfcHamiltWfc, XC_func_rdmft, alpha_power); + add_occNum(*kv, + occ_number, + wfcHwfc_TV, + wfcHwfc_hartree, + wfcHwfc_dft_XC, + wfcHwfc_exx_XC, + occNum_wfcHamiltWfc, + XC_func_rdmft, + alpha_power); // get the total energy // add_wfcHwfc(kv->wk, occ_number, wfcHwfc_TV, wfcHwfc_hartree, wfcHwfc_XC, Etotal_n_k, XC_func_rdmft, alpha_power); @@ -286,10 +303,8 @@ double RDMFT::cal_E_grad_wfc_occ_num() return E_RDMFT[3]; /****** get occNum_wfcHamiltWfc, occNum_HamiltWfc and Etotal ******/ - } - // cal_type = 2 just support XC-functional without exx template void RDMFT::cal_Energy(const int cal_type) @@ -305,7 +320,7 @@ void RDMFT::cal_Energy(const int cal_type) double E_exxType_rdmft = 0.0; // delete in the future - if( cal_type == 1 ) + if (cal_type == 1) { // for E_TV ModuleBase::matrix ETV_n_k(wg.nr, wg.nc, true); @@ -320,7 +335,7 @@ void RDMFT::cal_Energy(const int cal_type) // for Exc E_RDMFT[2] = 0.0; #ifdef __EXX - if( GlobalC::exx_info.info_global.cal_exx ) + if (GlobalC::exx_info.info_global.cal_exx) { ModuleBase::matrix Exc_n_k(wg.nr, wg.nc, true); // because we have got wk_fun_occNum, we can use symbol=1 realize it @@ -332,7 +347,8 @@ void RDMFT::cal_Energy(const int cal_type) #endif E_RDMFT[2] += etxc; - // add up the results obtained by all processors, or we can do reduce_all(wfcHwfc_) before add_wg() used for Etotal to replace it + // add up the results obtained by all processors, or we can do reduce_all(wfcHwfc_) before add_wg() used for + // Etotal to replace it Parallel_Reduce::reduce_all(E_RDMFT[0]); Parallel_Reduce::reduce_all(E_RDMFT[1]); @@ -343,7 +359,7 @@ void RDMFT::cal_Energy(const int cal_type) } else { - this->pelec->f_en.deband = this->pelec->cal_delta_eband(*ucell); + this->pelec->f_en.deband = this->pelec->cal_delta_eband(*ucell); E_descf = pelec->f_en.descf = 0.0; this->pelec->cal_energies(2); Etotal = this->pelec->f_en.etot; @@ -361,55 +377,52 @@ void RDMFT::cal_Energy(const int cal_type) // } } -// // print results -// std::cout << "\n\nfrom class RDMFT: \nXC_fun: " << XC_func_rdmft << std::endl; -// #ifdef __EXX -// if( GlobalC::exx_info.info_global.cal_exx ) std::cout << "alpha_power: " << alpha_power << std::endl; -// #endif -// std::cout << std::fixed << std::setprecision(10) -// << "******\nE(TV + Hartree + XC) by RDMFT: " << E_RDMFT[3] -// << "\n\nE_TV_RDMFT: " << E_RDMFT[0] -// << "\nE_hartree_RDMFT: " << E_RDMFT[1] -// << "\nExc_" << XC_func_rdmft << "_RDMFT: " << E_RDMFT[2] -// << "\nE_Ewald: " << E_Ewald -// << "\nE_entropy(-TS): " << E_entropy -// << "\nE_descf: " << E_descf -// << "\n\nEtotal_RDMFT: " << Etotal -// << "\n\nExc_ksdft: " << E_xc_KS -// << "\nE_exx_ksdft: " << E_exx_KS -// <<"\n******\n\n" << std::endl; - -// std::cout << "\netxc: " << etxc << "\nvtxc: " << vtxc << "\n"; -// std::cout << "\nE_deband_KS: " << E_deband_KS << "\nE_deband_harris_KS: " << E_deband_harris_KS << "\n\n" << std::endl; - - if( PARAM.inp.rdmft == true ) + // // print results + // std::cout << "\n\nfrom class RDMFT: \nXC_fun: " << XC_func_rdmft << std::endl; + // #ifdef __EXX + // if( GlobalC::exx_info.info_global.cal_exx ) std::cout << "alpha_power: " << alpha_power << std::endl; + // #endif + // std::cout << std::fixed << std::setprecision(10) + // << "******\nE(TV + Hartree + XC) by RDMFT: " << E_RDMFT[3] + // << "\n\nE_TV_RDMFT: " << E_RDMFT[0] + // << "\nE_hartree_RDMFT: " << E_RDMFT[1] + // << "\nExc_" << XC_func_rdmft << "_RDMFT: " << E_RDMFT[2] + // << "\nE_Ewald: " << E_Ewald + // << "\nE_entropy(-TS): " << E_entropy + // << "\nE_descf: " << E_descf + // << "\n\nEtotal_RDMFT: " << Etotal + // << "\n\nExc_ksdft: " << E_xc_KS + // << "\nE_exx_ksdft: " << E_exx_KS + // <<"\n******\n\n" << std::endl; + + // std::cout << "\netxc: " << etxc << "\nvtxc: " << vtxc << "\n"; + // std::cout << "\nE_deband_KS: " << E_deband_KS << "\nE_deband_harris_KS: " << E_deband_harris_KS << "\n\n" + // << std::endl; + + if (PARAM.inp.rdmft == true) { GlobalV::ofs_running << "\n\nfrom class RDMFT: \nXC_fun: " << XC_func_rdmft << std::endl; #ifdef __EXX - if( GlobalC::exx_info.info_global.cal_exx ) { GlobalV::ofs_running << "alpha_power: " << alpha_power << std::endl; -} + if (GlobalC::exx_info.info_global.cal_exx) + { + GlobalV::ofs_running << "alpha_power: " << alpha_power << std::endl; + } #endif // GlobalV::ofs_running << std::setprecision(12); // GlobalV::ofs_running << std::setiosflags(std::ios::right); GlobalV::ofs_running << std::fixed << std::setprecision(10) - << "\n******\nE(TV + Hartree + XC) by RDMFT: " << E_RDMFT[3] - << "\n\nE_TV_RDMFT: " << E_RDMFT[0] - << "\nE_hartree_RDMFT: " << E_RDMFT[1] - << "\nExc_" << XC_func_rdmft << "_RDMFT: " << E_RDMFT[2] - << "\nE_Ewald: " << E_Ewald - << "\nE_entropy(-TS): " << E_entropy - << "\nE_descf: " << E_descf - << "\n\nEtotal_RDMFT: " << Etotal - << "\n\nExc_ksdft: " << E_xc_KS - << "\nE_exx_ksdft: " << E_exx_KS - << "\nE_exxType_rdmft: " << E_exxType_rdmft - <<"\n******\n" << std::endl; + << "\n******\nE(TV + Hartree + XC) by RDMFT: " << E_RDMFT[3] + << "\n\nE_TV_RDMFT: " << E_RDMFT[0] << "\nE_hartree_RDMFT: " << E_RDMFT[1] << "\nExc_" + << XC_func_rdmft << "_RDMFT: " << E_RDMFT[2] << "\nE_Ewald: " << E_Ewald + << "\nE_entropy(-TS): " << E_entropy << "\nE_descf: " << E_descf + << "\n\nEtotal_RDMFT: " << Etotal << "\n\nExc_ksdft: " << E_xc_KS + << "\nE_exx_ksdft: " << E_exx_KS << "\nE_exxType_rdmft: " << E_exxType_rdmft + << "\n******\n" + << std::endl; } std::cout << std::defaultfloat; - } - template double RDMFT::run(ModuleBase::matrix& E_gradient_occNum, psi::Psi& E_gradient_wfc) { @@ -424,10 +437,13 @@ double RDMFT::run(ModuleBase::matrix& E_gradient_occNum, psi::Psi& E // this->cal_Energy(2); E_gradient_occNum = (occNum_wfcHamiltWfc); - + TK* pwfc = &occNum_HamiltWfc(0, 0, 0); TK* pwfc_out = &E_gradient_wfc(0, 0, 0); - for(int i=0; i; template class RDMFT, double>; template class RDMFT, std::complex>; -} - - +} // namespace rdmft diff --git a/source/module_rdmft/rdmft.h b/source/module_rdmft/rdmft.h index bc02480637..fae5a7f69a 100644 --- a/source/module_rdmft/rdmft.h +++ b/source/module_rdmft/rdmft.h @@ -5,22 +5,20 @@ #ifndef RDMFT_H #define RDMFT_H -#include "module_parameter/parameter.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_psi/psi.h" -#include "module_base/matrix.h" - -#include "module_base/parallel_2d.h" +#include "module_basis/module_ao/ORB_read.h" #include "module_basis/module_ao/parallel_orbitals.h" +#include "module_basis/module_nao/two_center_bundle.h" #include "module_cell/unitcell.h" +#include "module_hamilt_lcao/hamilt_lcaodft/hs_matrix_k.hpp" +#include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.h" #include "module_hamilt_lcao/module_gint/gint_gamma.h" #include "module_hamilt_lcao/module_gint/gint_k.h" -#include "module_basis/module_ao/ORB_read.h" -#include "module_basis/module_nao/two_center_bundle.h" - -#include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.h" #include "module_hamilt_lcao/module_hcontainer/hcontainer.h" -#include "module_hamilt_lcao/hamilt_lcaodft/hs_matrix_k.hpp" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "module_psi/psi.h" +#include "source_base/matrix.h" +#include "source_base/parallel_2d.h" #ifdef __EXX #include "module_ri/Exx_LRI.h" @@ -29,11 +27,11 @@ #include "module_ri/test_code/test_function.h" #endif +#include +#include #include #include -#include #include -#include //! Reduced Density Matrix Functional Theory (RDMFT) namespace rdmft @@ -46,7 +44,7 @@ class RDMFT public: RDMFT(); ~RDMFT(); - + const Parallel_Orbitals* ParaV = nullptr; Parallel_2D para_Eij; @@ -63,7 +61,7 @@ class RDMFT std::string XC_func_rdmft; //! 0.656 for soilds, 0.525 for dissociation of H2, 0.55~0.58 for HEG - double alpha_power = 0.656; + double alpha_power = 0.656; //! natrual occupation numbers and wavefunction ModuleBase::matrix occ_number; @@ -94,12 +92,18 @@ class RDMFT double alpha_power_in); //! update in ion-step and get V_TV - void update_ion(UnitCell& ucell_in, ModulePW::PW_Basis& rho_basis_in, - ModuleBase::matrix& vloc_in, ModuleBase::ComplexMatrix& sf_in); + void update_ion(UnitCell& ucell_in, + ModulePW::PW_Basis& rho_basis_in, + ModuleBase::matrix& vloc_in, + ModuleBase::ComplexMatrix& sf_in); //! update in elec-step - // Or we can use rdmft_solver.wfc/occ_number directly when optimizing, so that the update_elec() function does not require parameters. - void update_elec(UnitCell& ucell, const ModuleBase::matrix& occ_number_in, const psi::Psi& wfc_in, const Charge* charge_in = nullptr); + // Or we can use rdmft_solver.wfc/occ_number directly when optimizing, so that the update_elec() function does not + // require parameters. + void update_elec(UnitCell& ucell, + const ModuleBase::matrix& occ_number_in, + const psi::Psi& wfc_in, + const Charge* charge_in = nullptr); //! obtain the gradient of total energy with respect to occupation number and wfc double cal_E_grad_wfc_occ_num(); @@ -115,11 +119,9 @@ class RDMFT //! do all calculation after update occNum&wfc, get Etotal and the gradient of energy with respect to the occNum&wfc double run(ModuleBase::matrix& E_gradient_occNum, psi::Psi& E_gradient_wfc); - protected: - //! get the special density matrix DM_XC(nk*nbasis_local*nbasis_local) - void get_DM_XC(std::vector< std::vector >& DM_XC); + void get_DM_XC(std::vector>& DM_XC); void cal_V_TV(); @@ -130,11 +132,10 @@ class RDMFT //! get the total Hamilton in k-space void cal_Hk_Hpsi(); - + void update_charge(UnitCell& ucell); private: - //! Hamiltonian matrices in real space hamilt::HContainer* HR_TV = nullptr; hamilt::HContainer* HR_hartree = nullptr; @@ -149,7 +150,7 @@ class RDMFT hamilt::HS_Matrix_K* hsk_exx_XC = nullptr; std::vector HK_XC; - std::vector< std::vector > DM_XC_pass; + std::vector> DM_XC_pass; // ModuleDirectMin::ProdStiefelVariable HK_RDMFT_pass; // ModuleDirectMin::ProdStiefelVariable HK_XC_pass; @@ -188,7 +189,7 @@ class RDMFT double etxc = 0.0; double vtxc = 0.0; bool only_exx_type = false; - const int cal_E_type = 1; // cal_type = 2 just support XC-functional without exx + const int cal_E_type = 1; // cal_type = 2 just support XC-functional without exx /****** these parameters are passed in from outside, don't need delete ******/ // GK and GG are used for multi-k grid integration and gamma only algorithms respectively @@ -206,5 +207,5 @@ class RDMFT const TwoCenterBundle* two_center_bundle = nullptr; }; -} +} // namespace rdmft #endif diff --git a/source/module_rdmft/rdmft_tools.cpp b/source/module_rdmft/rdmft_tools.cpp index 5b43b0cbab..29ea246c55 100644 --- a/source/module_rdmft/rdmft_tools.cpp +++ b/source/module_rdmft/rdmft_tools.cpp @@ -3,34 +3,34 @@ // DATE : 2024-03-11 //========================================================== #include "module_rdmft/rdmft_tools.h" + #include "module_hamilt_pw/hamilt_pwdft/global.h" // used by class Veff_rdmft -#include "module_base/tool_title.h" -#include "module_base/timer.h" -#include "module_hamilt_general/module_xc/xc_functional.h" #include "module_elecstate/module_pot/H_Hartree_pw.h" #include "module_elecstate/module_pot/pot_local.h" #include "module_elecstate/module_pot/pot_xc.h" +#include "module_hamilt_general/module_xc/xc_functional.h" #include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" -#include +#include #include #include #include +#include #include -#include namespace rdmft { template <> -void conj_psi(psi::Psi& wfc) {} +void conj_psi(psi::Psi& wfc) +{ +} template <> -void HkPsi(const Parallel_Orbitals* ParaV, - const double& HK, - const double& wfc, - double& H_wfc) +void HkPsi(const Parallel_Orbitals* ParaV, const double& HK, const double& wfc, double& H_wfc) { const int one_int = 1; const double one_double = 1.0; @@ -42,19 +42,35 @@ void HkPsi(const Parallel_Orbitals* ParaV, const int nbasis = ParaV->desc[2]; const int nbands = ParaV->desc_wfc[3]; - //because wfc(bands, basis'), H(basis, basis'), we do wfc*H^T(in the perspective of cpp, not in fortran). And get H_wfc(bands, basis) is correct. - pdgemm_( &C_char, &N_char, &nbasis, &nbands, &nbasis, &one_double, &HK, &one_int, &one_int, ParaV->desc, - &wfc, &one_int, &one_int, ParaV->desc_wfc, &zero_double, &H_wfc, &one_int, &one_int, ParaV->desc_wfc ); + // because wfc(bands, basis'), H(basis, basis'), we do wfc*H^T(in the perspective of cpp, not in fortran). And get + // H_wfc(bands, basis) is correct. + pdgemm_(&C_char, + &N_char, + &nbasis, + &nbands, + &nbasis, + &one_double, + &HK, + &one_int, + &one_int, + ParaV->desc, + &wfc, + &one_int, + &one_int, + ParaV->desc_wfc, + &zero_double, + &H_wfc, + &one_int, + &one_int, + ParaV->desc_wfc); #endif - } - template <> -void cal_bra_op_ket(const Parallel_Orbitals* ParaV, +void cal_bra_op_ket(const Parallel_Orbitals* ParaV, const Parallel_2D& para_Eij_in, - const double& wfc, - const double& H_wfc, + const double& wfc, + const double& H_wfc, std::vector& Dmn) { const int one_int = 1; @@ -70,69 +86,84 @@ void cal_bra_op_ket(const Parallel_Orbitals* ParaV, const int nbasis = ParaV->desc[2]; const int nbands = ParaV->desc_wfc[3]; - pdgemm_( &T_char, &N_char, &nbands, &nbands, &nbasis, &one_double, &wfc, &one_int, &one_int, ParaV->desc_wfc, - &H_wfc, &one_int, &one_int, ParaV->desc_wfc, &zero_double, &Dmn[0], &one_int, &one_int, para_Eij_in.desc ); + pdgemm_(&T_char, + &N_char, + &nbands, + &nbands, + &nbasis, + &one_double, + &wfc, + &one_int, + &one_int, + ParaV->desc_wfc, + &H_wfc, + &one_int, + &one_int, + ParaV->desc_wfc, + &zero_double, + &Dmn[0], + &one_int, + &one_int, + para_Eij_in.desc); #endif } - // occNum_wfcHwfc = occNum*wfcHwfc + occNum_wfcHwfc -// When symbol = 0, 1, 2, 3, 4, occNum = occNum, 0.5*occNum, g(occNum), 0.5*g(occNum), d_g(occNum)/d_occNum respectively. Default symbol=0. -void occNum_Mul_wfcHwfc(const ModuleBase::matrix& occ_number, - const ModuleBase::matrix& wfcHwfc, - ModuleBase::matrix& occNum_wfcHwfc, - int symbol, - const std::string XC_func_rdmft, - const double alpha) +// When symbol = 0, 1, 2, 3, 4, occNum = occNum, 0.5*occNum, g(occNum), 0.5*g(occNum), d_g(occNum)/d_occNum +// respectively. Default symbol=0. +void occNum_Mul_wfcHwfc(const ModuleBase::matrix& occ_number, + const ModuleBase::matrix& wfcHwfc, + ModuleBase::matrix& occNum_wfcHwfc, + int symbol, + const std::string XC_func_rdmft, + const double alpha) { - for(int ir=0; ir; template class Veff_rdmft, double>; @@ -198,7 +251,7 @@ void Veff_rdmft::initialize_HR(const UnitCell* ucell_in, const Grid_Driv ModuleBase::timer::tick("Veff", "initialize_HR"); this->nspin = PARAM.inp.nspin; - auto* paraV = this->hR->get_paraV();// get parallel orbitals from HR + auto* paraV = this->hR->get_paraV(); // get parallel orbitals from HR // TODO: if paraV is nullptr, AtomPair can not use paraV for constructor, I will repair it in the future. for (int iat1 = 0; iat1 < ucell_in->nat; iat1++) @@ -221,11 +274,10 @@ void Veff_rdmft::initialize_HR(const UnitCell* ucell_in, const Grid_Driv } const ModuleBase::Vector3& R_index2 = adjs.box[ad1]; // choose the real adjacent atoms - // Note: the distance of atoms should less than the cutoff radius, - // When equal, the theoretical value of matrix element is zero, + // Note: the distance of atoms should less than the cutoff radius, + // When equal, the theoretical value of matrix element is zero, // but the calculated value is not zero due to the numerical error, which would lead to result changes. - if (ucell_in->cal_dtau(iat1, iat2, R_index2).norm() * ucell_in->lat0 - < orb_cutoff_[T1] + orb_cutoff_[T2]) + if (ucell_in->cal_dtau(iat1, iat2, R_index2).norm() * ucell_in->lat0 < orb_cutoff_[T1] + orb_cutoff_[T2]) { hamilt::AtomPair tmp(iat1, iat2, R_index2, paraV); this->hR->insert_pair(tmp); @@ -238,9 +290,8 @@ void Veff_rdmft::initialize_HR(const UnitCell* ucell_in, const Grid_Driv ModuleBase::timer::tick("Veff", "initialize_HR"); } - // this part of the code is copying from class Veff and do some modifications. -template +template void Veff_rdmft::contributeHR() { ModuleBase::TITLE("Veff", "contributeHR"); @@ -249,13 +300,13 @@ void Veff_rdmft::contributeHR() double* vr_eff_rdmft = nullptr; // calculate v_hartree(r) or v_local(r) or v_xc(r) - if( potential_ == "hartree" ) - { + if (potential_ == "hartree") + { ModuleBase::matrix v_matrix_hartree(this->nspin, charge_->nrxx); elecstate::PotHartree potH(rho_basis_); potH.cal_v_eff(charge_, ucell, v_matrix_hartree); - for(int is=0; isnspin; ++is) + for (int is = 0; is < this->nspin; ++is) { // use pointer to attach v(r) for current spin vr_eff_rdmft = &v_matrix_hartree(is, 0); @@ -265,12 +316,12 @@ void Veff_rdmft::contributeHR() this->GK->cal_gint(&inout); } } - else if( potential_ == "local" ) - { + else if (potential_ == "local") + { double vlocal_of_0 = 0.0; ModuleBase::matrix v_matrix_local(1, charge_->nrxx); elecstate::PotLocal potL(vloc_, sf_, rho_basis_, vlocal_of_0); - potL.cal_fixed_v( &v_matrix_local(0, 0) ); + potL.cal_fixed_v(&v_matrix_local(0, 0)); // use pointer to attach v(r) vr_eff_rdmft = &v_matrix_local(0, 0); @@ -279,7 +330,7 @@ void Veff_rdmft::contributeHR() Gint_inout inout(vr_eff_rdmft, 0, Gint_Tools::job_type::vlocal); this->GK->cal_gint(&inout); } - else if( potential_ == "xc" ) + else if (potential_ == "xc") { // meta-gga type has not been considered yet !!! @@ -290,7 +341,7 @@ void Veff_rdmft::contributeHR() potXC.cal_v_eff(charge_, ucell, v_matrix_XC); // if need meta-GGA, go to study veff_lcao.cpp and modify the code - for(int is=0; isnspin; ++is) + for (int is = 0; is < this->nspin; ++is) { // use pointer to attach v(r) for current spin vr_eff_rdmft = &v_matrix_XC(is, 0); @@ -307,11 +358,11 @@ void Veff_rdmft::contributeHR() // get HR for 2D-block parallel format // this->GK->transfer_pvpR(this->hR); - this->GK->transfer_pvpR(this->hR,this->ucell,this->gd); + this->GK->transfer_pvpR(this->hR, this->ucell, this->gd); - if(this->nspin == 2) - { - this->current_spin = 1 - this->current_spin; + if (this->nspin == 2) + { + this->current_spin = 1 - this->current_spin; } ModuleBase::timer::tick("Veff", "contributeHR"); @@ -320,7 +371,7 @@ void Veff_rdmft::contributeHR() // this part of the code is copying from class Veff and do some modifications. // special case of gamma-only -template<> +template <> void Veff_rdmft::contributeHR() { ModuleBase::TITLE("Veff", "contributeHR"); @@ -331,13 +382,13 @@ void Veff_rdmft::contributeHR() double* vr_eff_rdmft = nullptr; // calculate v_hartree(r) or V_local(r) or v_xc(r) - if( potential_ == "hartree" ) - { + if (potential_ == "hartree") + { ModuleBase::matrix v_matrix_hartree(this->nspin, charge_->nrxx); elecstate::PotHartree potH(rho_basis_); potH.cal_v_eff(charge_, ucell, v_matrix_hartree); - for(int is=0; isnspin; ++is) + for (int is = 0; is < this->nspin; ++is) { // use pointer to attach v(r) for current spin vr_eff_rdmft = &v_matrix_hartree(is, 0); @@ -347,12 +398,12 @@ void Veff_rdmft::contributeHR() this->GG->cal_gint(&inout); } } - else if( potential_ == "local" ) - { + else if (potential_ == "local") + { double vlocal_of_0 = 0.0; ModuleBase::matrix v_matrix_local(1, charge_->nrxx); elecstate::PotLocal potL(vloc_, sf_, rho_basis_, vlocal_of_0); - potL.cal_fixed_v( &v_matrix_local(0, 0) ); + potL.cal_fixed_v(&v_matrix_local(0, 0)); // use pointer to attach v(r) vr_eff_rdmft = &v_matrix_local(0, 0); @@ -363,9 +414,9 @@ void Veff_rdmft::contributeHR() // because in gamma_only, cal_gint would not set hRGint zero first // so must use cal_vlocal(), and in rdmft_test.h, calculate V_hartree->contributeHR() first - this->GG->cal_vlocal(&inout, false); // cal_gint ??? + this->GG->cal_vlocal(&inout, false); // cal_gint ??? } - else if( potential_ == "xc" ) + else if (potential_ == "xc") { // meta-gga type has not been considered yet !!! @@ -374,8 +425,8 @@ void Veff_rdmft::contributeHR() ModuleBase::matrix v_matrix_XC(this->nspin, charge_->nrxx); elecstate::PotXC potXC(rho_basis_, etxc, vtxc, &vofk); potXC.cal_v_eff(charge_, ucell, v_matrix_XC); - - for(int is=0; isnspin; ++is) + + for (int is = 0; is < this->nspin; ++is) { // use pointer to attach v(r) for current spin vr_eff_rdmft = &v_matrix_XC(is, 0); @@ -391,11 +442,11 @@ void Veff_rdmft::contributeHR() } // get HR for 2D-block parallel format - this->GG->transfer_pvpR(this->hR,this->ucell); + this->GG->transfer_pvpR(this->hR, this->ucell); this->new_e_iteration = false; - if(this->nspin == 2) + if (this->nspin == 2) { this->current_spin = 1 - this->current_spin; } @@ -403,7 +454,4 @@ void Veff_rdmft::contributeHR() return; } -} - - - +} // namespace rdmft diff --git a/source/module_rdmft/rdmft_tools.h b/source/module_rdmft/rdmft_tools.h index a18e436c47..354ac15c80 100644 --- a/source/module_rdmft/rdmft_tools.h +++ b/source/module_rdmft/rdmft_tools.h @@ -5,41 +5,37 @@ #ifndef RDMFT_TOOLS_H #define RDMFT_TOOLS_H -#include "module_psi/psi.h" -#include "module_base/matrix.h" +#include "module_basis/module_ao/parallel_orbitals.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_cell/unitcell.h" -#include "module_hamilt_lcao/module_gint/gint_gamma.h" -#include "module_hamilt_lcao/module_gint/gint_k.h" -#include "module_elecstate/module_pot/potential_new.h" -#include "module_base/blas_connector.h" -#include "module_base/scalapack_connector.h" -#include "module_base/parallel_2d.h" -#include "module_basis/module_ao/parallel_orbitals.h" -#include "module_base/parallel_reduce.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_elecstate/module_dm/cal_dm_psi.h" #include "module_elecstate/module_dm/density_matrix.h" - -#include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "module_elecstate/module_pot/potential_new.h" #include "module_hamilt_lcao/hamilt_lcaodft/hs_matrix_k.hpp" #include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.h" - +#include "module_hamilt_lcao/module_gint/gint_gamma.h" +#include "module_hamilt_lcao/module_gint/gint_k.h" +#include "module_hamilt_lcao/module_hcontainer/hcontainer.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_psi/psi.h" +#include "source_base/blas_connector.h" +#include "source_base/matrix.h" +#include "source_base/parallel_2d.h" +#include "source_base/parallel_reduce.h" +#include "source_base/scalapack_connector.h" #ifdef __EXX -#include "module_ri/RI_2D_Comm.h" #include "module_ri/Exx_LRI.h" +#include "module_ri/RI_2D_Comm.h" // there are some operator reload to print data in different formats #include "module_ri/test_code/test_function.h" #endif +#include +#include #include #include -#include #include -#include - - namespace rdmft { @@ -48,20 +44,19 @@ namespace rdmft // for the dft-xc-functional part of xc-functional, just use the default is right! Or don't use the function double occNum_func(double eta, int symbol = 0, const std::string XC_func_rdmft = "hf", const double alpha_power = 1.0); - template void conj_psi(psi::Psi& wfc) { TK* pwfc = &wfc(0, 0, 0); - for(int i=0; i void conj_psi(psi::Psi& wfc); - // wfc and H_wfc need to be k_firest and provide wfc(ik, 0, 0) and H_wfc(ik, 0, 0) //! implement matrix multiplication of Hk^dagger and psi template @@ -69,30 +64,50 @@ void HkPsi(const Parallel_Orbitals* ParaV, const TK& HK, const TK& wfc, TK& H_wf { const int one_int = 1; - //const double one_double = 1.0, zero_double = 0.0; + // const double one_double = 1.0, zero_double = 0.0; const std::complex one_complex = {1.0, 0.0}; const std::complex zero_complex = {0.0, 0.0}; const char N_char = 'N'; - const char C_char = 'C'; // Using 'C' is consistent with the formula + const char C_char = 'C'; // Using 'C' is consistent with the formula #ifdef __MPI const int nbasis = ParaV->desc[2]; const int nbands = ParaV->desc_wfc[3]; - //because wfc(bands, basis'), H(basis, basis'), we do wfc*H^T(in the perspective of cpp, not in fortran). And get H_wfc(bands, basis) is correct. - pzgemm_( &C_char, &N_char, &nbasis, &nbands, &nbasis, &one_complex, &HK, &one_int, &one_int, ParaV->desc, - &wfc, &one_int, &one_int, ParaV->desc_wfc, &zero_complex, &H_wfc, &one_int, &one_int, ParaV->desc_wfc ); + // because wfc(bands, basis'), H(basis, basis'), we do wfc*H^T(in the perspective of cpp, not in fortran). And get + // H_wfc(bands, basis) is correct. + pzgemm_(&C_char, + &N_char, + &nbasis, + &nbands, + &nbasis, + &one_complex, + &HK, + &one_int, + &one_int, + ParaV->desc, + &wfc, + &one_int, + &one_int, + ParaV->desc_wfc, + &zero_complex, + &H_wfc, + &one_int, + &one_int, + ParaV->desc_wfc); #endif } - template <> void HkPsi(const Parallel_Orbitals* ParaV, const double& HK, const double& wfc, double& H_wfc); - //! implement matrix multiplication of sum_mu conj(wfc(ik, m ,mu)) * op_wfc(ik, n, mu) template -void cal_bra_op_ket(const Parallel_Orbitals* ParaV, const Parallel_2D& para_Eij_in, const TK& wfc, const TK& H_wfc, std::vector& Dmn) +void cal_bra_op_ket(const Parallel_Orbitals* ParaV, + const Parallel_2D& para_Eij_in, + const TK& wfc, + const TK& H_wfc, + std::vector& Dmn) { const int one_int = 1; const std::complex one_complex = {1.0, 0.0}; @@ -107,16 +122,34 @@ void cal_bra_op_ket(const Parallel_Orbitals* ParaV, const Parallel_2D& para_Eij_ const int nbasis = ParaV->desc[2]; const int nbands = ParaV->desc_wfc[3]; - pzgemm_( &C_char, &N_char, &nbands, &nbands, &nbasis, &one_complex, &wfc, &one_int, &one_int, ParaV->desc_wfc, - &H_wfc, &one_int, &one_int, ParaV->desc_wfc, &zero_complex, &Dmn[0], &one_int, &one_int, para_Eij_in.desc ); + pzgemm_(&C_char, + &N_char, + &nbands, + &nbands, + &nbasis, + &one_complex, + &wfc, + &one_int, + &one_int, + ParaV->desc_wfc, + &H_wfc, + &one_int, + &one_int, + ParaV->desc_wfc, + &zero_complex, + &Dmn[0], + &one_int, + &one_int, + para_Eij_in.desc); #endif } - template <> -void cal_bra_op_ket(const Parallel_Orbitals* ParaV, const Parallel_2D& para_Eij_in, - const double& wfc, const double& H_wfc, std::vector& Dmn); - +void cal_bra_op_ket(const Parallel_Orbitals* ParaV, + const Parallel_2D& para_Eij_in, + const double& wfc, + const double& H_wfc, + std::vector& Dmn); //! for Dmn that conforms to the 2d-block rule, get its diagonal elements template @@ -125,26 +158,29 @@ void _diagonal_in_serial(const Parallel_2D& para_Eij_in, const std::vector& const int nrow_bands = para_Eij_in.get_row_size(); const int ncol_bands = para_Eij_in.get_col_size(); - for(int i=0; i -void occNum_MulPsi(const Parallel_Orbitals* ParaV, const ModuleBase::matrix& occ_number, psi::Psi& wfc, int symbol = 0, - const std::string XC_func_rdmft = "hf", const double alpha = 1.0) +void occNum_MulPsi(const Parallel_Orbitals* ParaV, + const ModuleBase::matrix& occ_number, + psi::Psi& wfc, + int symbol = 0, + const std::string XC_func_rdmft = "hf", + const double alpha = 1.0) { const int nk_local = wfc.get_nk(); const int nbands_local = wfc.get_nbands(); @@ -155,28 +191,29 @@ void occNum_MulPsi(const Parallel_Orbitals* ParaV, const ModuleBase::matrix& occ for (int ik = 0; ik < nk_local; ++ik) { - for (int ib_local = 0; ib_local < nbands_local; ++ib_local) // ib_local < nbands_local , some problem, ParaV->ncol_bands + for (int ib_local = 0; ib_local < nbands_local; + ++ib_local) // ib_local < nbands_local , some problem, ParaV->ncol_bands { - const double occNum_local = occNum_func( occ_number(ik, ParaV->local2global_col(ib_local)), symbol, XC_func_rdmft, alpha); + const double occNum_local + = occNum_func(occ_number(ik, ParaV->local2global_col(ib_local)), symbol, XC_func_rdmft, alpha); TK* wfc_pointer = &(wfc(ik, ib_local, 0)); BlasConnector::scal(nbasis_local, occNum_local, wfc_pointer, 1); } } } - //! add psi with eta and g(eta) template -void add_psi(const Parallel_Orbitals* ParaV, - const K_Vectors* kv, - const ModuleBase::matrix& occ_number, - psi::Psi& psi_TV, - psi::Psi& psi_hartree, - psi::Psi& psi_dft_XC, - psi::Psi& psi_exx_XC, - psi::Psi& occNum_Hpsi, - const std::string XC_func_rdmft = "hf", - const double alpha = 1.0) +void add_psi(const Parallel_Orbitals* ParaV, + const K_Vectors* kv, + const ModuleBase::matrix& occ_number, + psi::Psi& psi_TV, + psi::Psi& psi_hartree, + psi::Psi& psi_dft_XC, + psi::Psi& psi_exx_XC, + psi::Psi& occNum_Hpsi, + const std::string XC_func_rdmft = "hf", + const double alpha = 1.0) { const int nk = psi_TV.get_nk(); const int nbn_local = psi_TV.get_nbands(); @@ -189,70 +226,62 @@ void add_psi(const Parallel_Orbitals* ParaV, // const int nbasis = ParaV->desc[2]; // const int nbands = ParaV->desc_wfc[3]; - for(int ik=0; ikwk[ik], p_occNum_Hpsi, 1); } } - } /** * @brief occNum_wfcHwfc = occNum*wfcHwfc + occNum_wfcHwfc - * @param symbol: When symbol = 0, 1, 2, 3, 4, occNum = occNum, 0.5*occNum, g(occNum), 0.5*g(occNum), d_g(occNum)/d_occNum respectively. - * Default symbol=0. -*/ -void occNum_Mul_wfcHwfc(const ModuleBase::matrix& occ_number, - const ModuleBase::matrix& wfcHwfc, - ModuleBase::matrix& occNum_wfcHwfc, - int symbol = 0, - const std::string XC_func_rdmft = "hf", - const double alpha = 1.0); - + * @param symbol: When symbol = 0, 1, 2, 3, 4, occNum = occNum, 0.5*occNum, g(occNum), 0.5*g(occNum), + * d_g(occNum)/d_occNum respectively. Default symbol=0. + */ +void occNum_Mul_wfcHwfc(const ModuleBase::matrix& occ_number, + const ModuleBase::matrix& wfcHwfc, + ModuleBase::matrix& occNum_wfcHwfc, + int symbol = 0, + const std::string XC_func_rdmft = "hf", + const double alpha = 1.0); /** * @brief Default symbol = 0 for the gradient of Etotal with respect to occupancy, * symbol = 1 for the relevant calculation of Etotal -*/ -void add_occNum(const K_Vectors& kv, - const ModuleBase::matrix& occ_number, - const ModuleBase::matrix& wfcHwfc_TV_in, - const ModuleBase::matrix& wfcHwfc_hartree_in, - const ModuleBase::matrix& wfcHwfc_dft_XC_in, - const ModuleBase::matrix& wfcHwfc_exx_XC_in, - ModuleBase::matrix& occNum_wfcHwfc, - const std::string XC_func_rdmft = "hf", - const double alpha = 1.0); - + */ +void add_occNum(const K_Vectors& kv, + const ModuleBase::matrix& occ_number, + const ModuleBase::matrix& wfcHwfc_TV_in, + const ModuleBase::matrix& wfcHwfc_hartree_in, + const ModuleBase::matrix& wfcHwfc_dft_XC_in, + const ModuleBase::matrix& wfcHwfc_exx_XC_in, + ModuleBase::matrix& occNum_wfcHwfc, + const std::string XC_func_rdmft = "hf", + const double alpha = 1.0); //! do wk*g(occNum)*wfcHwfc and add for TV, hartree, XC. This function just use once, so it can be replace and delete -void add_wfcHwfc(const ModuleBase::matrix& wg, - const ModuleBase::matrix& wk_fun_occNum, - const ModuleBase::matrix& wfcHwfc_TV_in, - const ModuleBase::matrix& wfcHwfc_hartree_in, - const ModuleBase::matrix& wfcHwfc_XC_in, - ModuleBase::matrix& occNum_wfcHwfc, - const std::string XC_func_rdmft, - const double alpha); - +void add_wfcHwfc(const ModuleBase::matrix& wg, + const ModuleBase::matrix& wk_fun_occNum, + const ModuleBase::matrix& wfcHwfc_TV_in, + const ModuleBase::matrix& wfcHwfc_hartree_in, + const ModuleBase::matrix& wfcHwfc_XC_in, + ModuleBase::matrix& occNum_wfcHwfc, + const std::string XC_func_rdmft, + const double alpha); //! give certain occNum_wfcHwfc, get the corresponding energy double getEnergy(const ModuleBase::matrix& occNum_wfcHwfc); - - - - - //! this part of the code is copying from class Veff and do some modifications. template class Veff_rdmft : public hamilt::OperatorLCAO @@ -261,7 +290,7 @@ class Veff_rdmft : public hamilt::OperatorLCAO /** * @brief Construct a new Veff object for multi-kpoint calculation * @param GK_in: the pointer of Gint_k object, used for grid integration - */ + */ Veff_rdmft(Gint_k* GK_in, hamilt::HS_Matrix_K* hsk_in, const std::vector>& kvec_d_in, @@ -320,8 +349,8 @@ class Veff_rdmft : public hamilt::OperatorLCAO /** * @brief contributeHR() is used to calculate the HR matrix * - * the contribution of V_{eff} is calculated by the contribution of V_{H} and V_{XC} and V_{local pseudopotential} and so on. - * grid integration is used to calculate the contribution Hamiltonian of effective potential + * the contribution of V_{eff} is calculated by the contribution of V_{H} and V_{XC} and V_{local pseudopotential} + * and so on. grid integration is used to calculate the contribution Hamiltonian of effective potential */ virtual void contributeHR() override; @@ -367,9 +396,8 @@ class Veff_rdmft : public hamilt::OperatorLCAO double* etxc; double* vtxc; - }; -} +} // namespace rdmft #endif diff --git a/source/module_relax/bfgs.cpp b/source/module_relax/bfgs.cpp index 2b1be16e13..9871bd1856 100644 --- a/source/module_relax/bfgs.cpp +++ b/source/module_relax/bfgs.cpp @@ -1,103 +1,102 @@ #include "bfgs.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/matrix3.h" -#include "module_parameter/parameter.h" + #include "ions_move_basic.h" #include "module_cell/update_cell.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/matrix3.h" //! initialize H0、H、pos0、force0、force -void BFGS::allocate(const int _size) +void BFGS::allocate(const int _size) { - alpha=70;//default value in ase is 70 - maxstep=PARAM.inp.relax_bfgs_rmax; - size=_size; - sign =true; - H = std::vector>(3*size, std::vector(3*size, 0.0)); - - for (int i = 0; i < 3*size; ++i) + alpha = 70; // default value in ase is 70 + maxstep = PARAM.inp.relax_bfgs_rmax; + size = _size; + sign = true; + H = std::vector>(3 * size, std::vector(3 * size, 0.0)); + + for (int i = 0; i < 3 * size; ++i) { - H[i][i] = alpha; + H[i][i] = alpha; } - - pos = std::vector> (size, std::vector(3, 0.0)); - pos0 = std::vector(3*size, 0.0); - pos_taud = std::vector> (size, std::vector(3, 0.0)); - pos_taud0 = std::vector(3*size, 0.0); + + pos = std::vector>(size, std::vector(3, 0.0)); + pos0 = std::vector(3 * size, 0.0); + pos_taud = std::vector>(size, std::vector(3, 0.0)); + pos_taud0 = std::vector(3 * size, 0.0); dpos = std::vector>(size, std::vector(3, 0.0)); - force0 = std::vector(3*size, 0.0); + force0 = std::vector(3 * size, 0.0); force = std::vector>(size, std::vector(3, 0.0)); - steplength = std::vector(size, 0.0); + steplength = std::vector(size, 0.0); } - -void BFGS::relax_step(const ModuleBase::matrix& _force,UnitCell& ucell) +void BFGS::relax_step(const ModuleBase::matrix& _force, UnitCell& ucell) { - GetPos(ucell,pos); - GetPostaud(ucell,pos_taud); + GetPos(ucell, pos); + GetPostaud(ucell, pos_taud); ucell.ionic_position_updated = true; - for(int i = 0; i < _force.nr; i++) + for (int i = 0; i < _force.nr; i++) { - for(int j=0;j<_force.nc;j++) + for (int j = 0; j < _force.nc; j++) { - force[i][j]=_force(i,j)*ModuleBase::Ry_to_eV/ModuleBase::BOHR_TO_A; + force[i][j] = _force(i, j) * ModuleBase::Ry_to_eV / ModuleBase::BOHR_TO_A; } } - int k=0; - for(int i=0;iPrepareStep(force,pos,H,pos0,force0,steplength,dpos,ucell); - this->DetermineStep(steplength,dpos,maxstep); + + this->PrepareStep(force, pos, H, pos0, force0, steplength, dpos, ucell); + this->DetermineStep(steplength, dpos, maxstep); this->UpdatePos(ucell); - this->CalculateLargestGrad(_force,ucell); - this->IsRestrain(dpos); + this->CalculateLargestGrad(_force, ucell); + this->IsRestrain(dpos); } -void BFGS::GetPos(UnitCell& ucell,std::vector>& pos) +void BFGS::GetPos(UnitCell& ucell, std::vector>& pos) { - int k=0; - for(int i=0;i>& pos_taud) +void BFGS::GetPostaud(UnitCell& ucell, std::vector>& pos_taud) { - int k=0; - for(int i=0;i>& force, { std::vector changedforce = ReshapeMToV(force); std::vector changedpos = ReshapeMToV(pos); - this->Update(changedpos, changedforce,H,ucell); - + this->Update(changedpos, changedforce, H, ucell); + //! call dysev - std::vector omega(3*size); - std::vector work(3*size*3*size); - int lwork=3*size*3*size; - int info=0; + std::vector omega(3 * size); + std::vector work(3 * size * 3 * size); + int lwork = 3 * size * 3 * size; + int info = 0; std::vector H_flat; - - for(const auto& row : H) + + for (const auto& row: H) { H_flat.insert(H_flat.end(), row.begin(), row.end()); } - - int value=3*size; - int* ptr=&value; - dsyev_("V","U",ptr,H_flat.data(),ptr,omega.data(),work.data(),&lwork,&info); - std::vector> V(3*size, std::vector(3*size, 0.0)); - for(int i = 0; i < 3*size; i++) + + int value = 3 * size; + int* ptr = &value; + dsyev_("V", "U", ptr, H_flat.data(), ptr, omega.data(), work.data(), &lwork, &info); + std::vector> V(3 * size, std::vector(3 * size, 0.0)); + for (int i = 0; i < 3 * size; i++) { - for(int j = 0; j < 3*size; j++) + for (int j = 0; j < 3 * size; j++) { - V[j][i] = H_flat[3*size*i + j]; + V[j][i] = H_flat[3 * size * i + j]; } } - std::vector a=DotInMAndV2(V, changedforce); - for(int i = 0; i < a.size(); i++) + std::vector a = DotInMAndV2(V, changedforce); + for (int i = 0; i < a.size(); i++) { - a[i]/=std::abs(omega[i]); + a[i] /= std::abs(omega[i]); } std::vector tmpdpos = DotInMAndV1(V, a); dpos = ReshapeVToM(tmpdpos); - for(int i = 0; i < size; i++) + for (int i = 0; i < size; i++) { double k = 0; - for(int j = 0; j < 3; j++) + for (int j = 0; j < 3; j++) { k += dpos[i][j] * dpos[i][j]; } steplength[i] = sqrt(k); } pos0 = ReshapeMToV(pos); - pos_taud0=ReshapeMToV(pos_taud); + pos_taud0 = ReshapeMToV(pos_taud); force0 = ReshapeMToV(force); } -void BFGS::Update(std::vector& pos, +void BFGS::Update(std::vector& pos, std::vector& force, std::vector>& H, UnitCell& ucell) { - if(sign) + if (sign) { - sign=false; + sign = false; return; } - //std::vector dpos=this->VSubV(pos,pos0); - std::vector term=ReshapeMToV(pos_taud); + // std::vector dpos=this->VSubV(pos,pos0); + std::vector term = ReshapeMToV(pos_taud); std::vector dpos = VSubV(term, pos_taud0); - for(int i=0;i<3*size;i++) + for (int i = 0; i < 3 * size; i++) { double shortest_move = dpos[i]; - //dpos[i]/=ModuleBase::BOHR_TO_A; - //dpos[i]/=ucell.lat0; + // dpos[i]/=ModuleBase::BOHR_TO_A; + // dpos[i]/=ucell.lat0; for (int cell = -1; cell <= 1; ++cell) { const double now_move = dpos[i] + cell; @@ -184,69 +183,67 @@ void BFGS::Update(std::vector& pos, shortest_move = now_move; } } - //shortest_move=shortest_move*ModuleBase::BOHR_TO_A*ucell.lat0; - dpos[i]=shortest_move; + // shortest_move=shortest_move*ModuleBase::BOHR_TO_A*ucell.lat0; + dpos[i] = shortest_move; } - std::vector> c=ReshapeVToM(dpos); - for(int iat=0; iat> c = ReshapeVToM(dpos); + for (int iat = 0; iat < size; iat++) { - //Cartesian coordinate - //convert from Angstrom to unit of latvec (Bohr) + // Cartesian coordinate + // convert from Angstrom to unit of latvec (Bohr) - //convert unit + // convert unit ModuleBase::Vector3 move_ion_cart; - move_ion_cart.x = c[iat][0] *ModuleBase::BOHR_TO_A * ucell.lat0; + move_ion_cart.x = c[iat][0] * ModuleBase::BOHR_TO_A * ucell.lat0; move_ion_cart.y = c[iat][1] * ModuleBase::BOHR_TO_A * ucell.lat0; move_ion_cart.z = c[iat][2] * ModuleBase::BOHR_TO_A * ucell.lat0; - //convert pos - ModuleBase::Vector3 move_ion_dr = move_ion_cart* ucell.latvec; + // convert pos + ModuleBase::Vector3 move_ion_dr = move_ion_cart * ucell.latvec; int it = ucell.iat2it[iat]; int ia = ucell.iat2ia[iat]; Atom* atom = &ucell.atoms[it]; - if(atom->mbl[ia].x == 1) + if (atom->mbl[ia].x == 1) { dpos[iat * 3] = move_ion_dr.x; } - if(atom->mbl[ia].y == 1) + if (atom->mbl[ia].y == 1) { - dpos[iat * 3 + 1] = move_ion_dr.y ; + dpos[iat * 3 + 1] = move_ion_dr.y; } - if(atom->mbl[ia].z == 1) + if (atom->mbl[ia].z == 1) { - dpos[iat * 3 + 2] = move_ion_dr.z ; + dpos[iat * 3 + 2] = move_ion_dr.z; } } - if(*max_element(dpos.begin(), dpos.end()) < 1e-7) + if (*max_element(dpos.begin(), dpos.end()) < 1e-7) { return; - } + } std::vector dforce = VSubV(force, force0); double a = DotInVAndV(dpos, dforce); std::vector dg = DotInMAndV1(H, dpos); double b = DotInVAndV(dpos, dg); - std::vector> term1=OuterVAndV(dforce, dforce); - std::vector> term2=OuterVAndV(dg, dg); - std::vector> term3=MPlus(term1, a); - std::vector> term4=MPlus(term2, b); + std::vector> term1 = OuterVAndV(dforce, dforce); + std::vector> term2 = OuterVAndV(dg, dg); + std::vector> term3 = MPlus(term1, a); + std::vector> term4 = MPlus(term2, b); H = MSubM(H, term3); H = MSubM(H, term4); } -void BFGS::DetermineStep(std::vector& steplength, - std::vector>& dpos, - double& maxstep) +void BFGS::DetermineStep(std::vector& steplength, std::vector>& dpos, double& maxstep) { std::vector::iterator maxsteplength = max_element(steplength.begin(), steplength.end()); double a = *maxsteplength; - if(a >= maxstep) + if (a >= maxstep) { double scale = maxstep / a; - for(int i = 0; i < size; i++) + for (int i = 0; i < size; i++) { - for(int j=0;j<3;j++) + for (int j = 0; j < 3; j++) { - dpos[i][j]*=scale; + dpos[i][j] *= scale; } } } @@ -254,16 +251,16 @@ void BFGS::DetermineStep(std::vector& steplength, void BFGS::UpdatePos(UnitCell& ucell) { - double a[3*size]; - for(int i=0;iMAddM(pos, dpos);*/ } void BFGS::IsRestrain(std::vector>& dpos) { - Ions_Move_Basic::converged = Ions_Move_Basic::largest_grad - * ModuleBase::Ry_to_eV / 0.529177 grad= std::vector(3*size, 0.0); + std::vector grad = std::vector(3 * size, 0.0); int iat = 0; for (int it = 0; it < ucell.ntype; it++) { - Atom *atom = &ucell.atoms[it]; + Atom* atom = &ucell.atoms[it]; for (int ia = 0; ia < ucell.atoms[it].na; ia++) { for (int ik = 0; ik < 3; ++ik) @@ -331,7 +328,7 @@ void BFGS::CalculateLargestGrad(const ModuleBase::matrix& _force,UnitCell& ucell } } Ions_Move_Basic::largest_grad = 0.0; - for (int i = 0; i < 3*size; i++) + for (int i = 0; i < 3 * size; i++) { if (Ions_Move_Basic::largest_grad < std::abs(grad[i])) { @@ -341,9 +338,7 @@ void BFGS::CalculateLargestGrad(const ModuleBase::matrix& _force,UnitCell& ucell Ions_Move_Basic::largest_grad /= ucell.lat0; if (PARAM.inp.out_level == "ie") { - std::cout << " LARGEST GRAD (eV/A) : " << Ions_Move_Basic::largest_grad - * ModuleBase::Ry_to_eV / 0.5291772109 + std::cout << " LARGEST GRAD (eV/A) : " << Ions_Move_Basic::largest_grad * ModuleBase::Ry_to_eV / 0.5291772109 << std::endl; } - } diff --git a/source/module_relax/bfgs.h b/source/module_relax/bfgs.h index d1771dbca7..3ae64b6d74 100644 --- a/source/module_relax/bfgs.h +++ b/source/module_relax/bfgs.h @@ -1,47 +1,59 @@ #ifndef BFGS_H #define BFGS_H -#include -#include -#include -#include -#include"module_base/lapack_connector.h" -#include "module_base/matrix.h" -#include "module_base/matrix3.h" -#include "module_cell/unitcell.h" #include "matrix_methods.h" +#include "module_cell/unitcell.h" +#include "source_base/lapack_connector.h" +#include "source_base/matrix.h" +#include "source_base/matrix3.h" + +#include +#include +#include +#include class BFGS { -public: - std::vector steplength;//the length of atoms displacement - std::vector> H;//Hessian matrix - std::vector force0;//force in previous step + public: + std::vector steplength; // the length of atoms displacement + std::vector> H; // Hessian matrix + std::vector force0; // force in previous step std::vector> force; - std::vector pos0;//atom pos in previous step(cartesian coordinates) + std::vector pos0; // atom pos in previous step(cartesian coordinates) std::vector> pos; - std::vector pos_taud0;//atom pos in previous step(relative coordinates) + std::vector pos_taud0; // atom pos in previous step(relative coordinates) std::vector> pos_taud; std::vector> dpos; - void allocate(const int _size);//initialize parameters - void relax_step(const ModuleBase::matrix& _force,UnitCell& ucell);//a full iteration step - void PrepareStep(std::vector>& force,std::vector>& pos,std::vector>& H,std::vector& pos0,std::vector& force0,std::vector& steplength,std::vector>& dpos,UnitCell& ucell);//calculate the atomic displacement in one iteration step + void allocate(const int _size); // initialize parameters + void relax_step(const ModuleBase::matrix& _force, UnitCell& ucell); // a full iteration step + void PrepareStep(std::vector>& force, + std::vector>& pos, + std::vector>& H, + std::vector& pos0, + std::vector& force0, + std::vector& steplength, + std::vector>& dpos, + UnitCell& ucell); // calculate the atomic displacement in one iteration step + + private: + bool sign; // check if this is the first iteration + double alpha; // initialize H,diagonal element is alpha + double maxstep; // every movement smaller than maxstep + int size; // number of atoms -private: - bool sign;//check if this is the first iteration - double alpha;//initialize H,diagonal element is alpha - double maxstep;//every movement smaller than maxstep - int size;//number of atoms - - void IsRestrain(std::vector>& dpos);//check if converged - void CalculateLargestGrad(const ModuleBase::matrix& _force,UnitCell& ucell); - void GetPos(UnitCell& ucell,std::vector>& pos); - void GetPostaud(UnitCell& ucell,std::vector>& pos_taud); - void Update(std::vector& pos, std::vector& force,std::vector>& H,UnitCell& ucell);//update hessian matrix - void DetermineStep(std::vector& steplength,std::vector>& dpos,double& maxstep);//normalize large atomic displacements based on maxstep - void UpdatePos(UnitCell& ucell);//update ucell with the new coordinates - + void IsRestrain(std::vector>& dpos); // check if converged + void CalculateLargestGrad(const ModuleBase::matrix& _force, UnitCell& ucell); + void GetPos(UnitCell& ucell, std::vector>& pos); + void GetPostaud(UnitCell& ucell, std::vector>& pos_taud); + void Update(std::vector& pos, + std::vector& force, + std::vector>& H, + UnitCell& ucell); // update hessian matrix + void DetermineStep(std::vector& steplength, + std::vector>& dpos, + double& maxstep); // normalize large atomic displacements based on maxstep + void UpdatePos(UnitCell& ucell); // update ucell with the new coordinates }; #endif // BFGS_H diff --git a/source/module_relax/bfgs_basic.cpp b/source/module_relax/bfgs_basic.cpp index 90a2d39b1c..0ed9c130b5 100644 --- a/source/module_relax/bfgs_basic.cpp +++ b/source/module_relax/bfgs_basic.cpp @@ -1,10 +1,11 @@ #include "bfgs_basic.h" -#include "module_parameter/parameter.h" #include "ions_move_basic.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include +#include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" + +#include using namespace Ions_Move_Basic; double BFGS_Basic::relax_bfgs_w1 = -1.0; // default is 0.01 @@ -63,7 +64,7 @@ void BFGS_Basic::allocate_basic(void) return; } -void BFGS_Basic::update_inverse_hessian(const double &lat0) +void BFGS_Basic::update_inverse_hessian(const double& lat0) { // ModuleBase::TITLE("Ions_Move_BFGS","update_inverse_hessian"); assert(dim > 0); @@ -211,7 +212,7 @@ void BFGS_Basic::save_bfgs(void) // a new bfgs step is done // we have already done well in the previous direction // we should get a new direction in this case -void BFGS_Basic::new_step(const double &lat0) +void BFGS_Basic::new_step(const double& lat0) { ModuleBase::TITLE("BFGS_Basic", "new_step"); @@ -389,7 +390,7 @@ void BFGS_Basic::compute_trust_radius(void) return; } -double BFGS_Basic::check_move(const double &lat0, const double &pos, const double &pos_p) +double BFGS_Basic::check_move(const double& lat0, const double& pos, const double& pos_p) { // this must be careful. // unit is ucell.lat0. diff --git a/source/module_relax/bfgs_basic.h b/source/module_relax/bfgs_basic.h index 2e0a130a37..ade849277c 100644 --- a/source/module_relax/bfgs_basic.h +++ b/source/module_relax/bfgs_basic.h @@ -1,7 +1,7 @@ #ifndef BFGS_BASIC #define BFGS_BASIC -#include "module_base/matrix.h" +#include "source_base/matrix.h" // references // 1) Roger Fletcher, Practical Methods of Optimization, John Wiley and @@ -39,15 +39,15 @@ class BFGS_Basic static double relax_bfgs_w2; // fixed: parameters for Wolfe conditions. protected: - bool save_flag=false; - bool tr_min_hit=false; //.TRUE. if the trust_radius has already been set - // to the minimum value at the previous step + bool save_flag = false; + bool tr_min_hit = false; //.TRUE. if the trust_radius has already been set + // to the minimum value at the previous step // mohan add 2010-07-27 double check_move(const double& lat0, const double& pos, const double& pos_p); private: - bool wolfe_flag=false; + bool wolfe_flag = false; ModuleBase::matrix inv_hess; int bfgs_ndim; diff --git a/source/module_relax/ions_move_basic.cpp b/source/module_relax/ions_move_basic.cpp index a8dabe5743..f882d3edd4 100644 --- a/source/module_relax/ions_move_basic.cpp +++ b/source/module_relax/ions_move_basic.cpp @@ -1,10 +1,10 @@ #include "ions_move_basic.h" -#include "module_parameter/parameter.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_cell/update_cell.h" #include "module_cell/print_cell.h" +#include "module_cell/update_cell.h" +#include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" int Ions_Move_Basic::dim = 0; bool Ions_Move_Basic::converged = false; double Ions_Move_Basic::largest_grad = 0.0; @@ -25,7 +25,7 @@ double Ions_Move_Basic::best_xxx = 1.0; int Ions_Move_Basic::out_stru = 0; std::string Ions_Move_Basic::relax_method = "bfgs"; -void Ions_Move_Basic::setup_gradient(const UnitCell &ucell, const ModuleBase::matrix &force, double *pos, double *grad) +void Ions_Move_Basic::setup_gradient(const UnitCell& ucell, const ModuleBase::matrix& force, double* pos, double* grad) { ModuleBase::TITLE("Ions_Move_Basic", "setup_gradient"); @@ -44,7 +44,7 @@ void Ions_Move_Basic::setup_gradient(const UnitCell &ucell, const ModuleBase::ma int iat = 0; for (int it = 0; it < ucell.ntype; it++) { - Atom *atom = &ucell.atoms[it]; + Atom* atom = &ucell.atoms[it]; for (int ia = 0; ia < ucell.atoms[it].na; ia++) { for (int ik = 0; ik < 3; ++ik) @@ -62,7 +62,7 @@ void Ions_Move_Basic::setup_gradient(const UnitCell &ucell, const ModuleBase::ma return; } -void Ions_Move_Basic::move_atoms(UnitCell &ucell, double *move, double *pos) +void Ions_Move_Basic::move_atoms(UnitCell& ucell, double* move, double* pos) { ModuleBase::TITLE("Ions_Move_Basic", "move_atoms"); @@ -96,9 +96,10 @@ void Ions_Move_Basic::move_atoms(UnitCell &ucell, double *move, double *pos) const double move_threshold = 1.0e-10; const int total_freedom = ucell.nat * 3; - if (ModuleSymmetry::Symmetry::symm_flag && ucell.symm.all_mbl && ucell.symm.nrotk > 0) { + if (ModuleSymmetry::Symmetry::symm_flag && ucell.symm.all_mbl && ucell.symm.nrotk > 0) + { ucell.symm.symmetrize_vec3_nat(move); -} + } for (int i = 0; i < total_freedom; i++) { @@ -107,17 +108,17 @@ void Ions_Move_Basic::move_atoms(UnitCell &ucell, double *move, double *pos) pos[i] += move[i]; } } - unitcell::update_pos_tau(ucell.lat,pos,ucell.ntype,ucell.nat,ucell.atoms); + unitcell::update_pos_tau(ucell.lat, pos, ucell.ntype, ucell.nat, ucell.atoms); //-------------------------------------------- // Print out the structure file. //-------------------------------------------- - unitcell::print_tau(ucell.atoms,ucell.Coordinate,ucell.ntype,ucell.lat0,GlobalV::ofs_running); + unitcell::print_tau(ucell.atoms, ucell.Coordinate, ucell.ntype, ucell.lat0, GlobalV::ofs_running); return; } -void Ions_Move_Basic::check_converged(const UnitCell &ucell, const double *grad) +void Ions_Move_Basic::check_converged(const UnitCell& ucell, const double* grad) { ModuleBase::TITLE("Ions_Move_Basic", "check_converged"); assert(dim > 0); @@ -167,7 +168,7 @@ void Ions_Move_Basic::check_converged(const UnitCell &ucell, const double *grad) Ions_Move_Basic::converged = true; } // mohan update 2011-04-21 - else if (etot_diff < etot_thr && Ions_Move_Basic::largest_grad < PARAM.inp.force_thr ) + else if (etot_diff < etot_thr && Ions_Move_Basic::largest_grad < PARAM.inp.force_thr) { GlobalV::ofs_running << "\n Ion relaxation is converged!" << std::endl; GlobalV::ofs_running << "\n Energy difference (Ry) = " << etot_diff << std::endl; @@ -178,7 +179,7 @@ void Ions_Move_Basic::check_converged(const UnitCell &ucell, const double *grad) else { GlobalV::ofs_running << "\n Ion relaxation is not converged yet (threshold is " - << PARAM.inp.force_thr * ModuleBase::Ry_to_eV / 0.529177 << ")" << std::endl; + << PARAM.inp.force_thr * ModuleBase::Ry_to_eV / 0.529177 << ")" << std::endl; // std::cout << "\n etot_diff=" << etot_diff << " etot_thr=" << etot_thr //<< " largest_grad=" << largest_grad << " force_thr=" << PARAM.inp.force_thr << std::endl; Ions_Move_Basic::converged = false; @@ -187,7 +188,7 @@ void Ions_Move_Basic::check_converged(const UnitCell &ucell, const double *grad) return; } -void Ions_Move_Basic::terminate(const UnitCell &ucell) +void Ions_Move_Basic::terminate(const UnitCell& ucell) { ModuleBase::TITLE("Ions_Move_Basic", "terminate"); if (Ions_Move_Basic::converged) @@ -217,11 +218,11 @@ void Ions_Move_Basic::terminate(const UnitCell &ucell) //----------------------------------------------------------- // Print the structure. //----------------------------------------------------------- - unitcell::print_tau(ucell.atoms,ucell.Coordinate,ucell.ntype,ucell.lat0,GlobalV::ofs_running); + unitcell::print_tau(ucell.atoms, ucell.Coordinate, ucell.ntype, ucell.lat0, GlobalV::ofs_running); return; } -void Ions_Move_Basic::setup_etot(const double &energy_in, const bool judgement) +void Ions_Move_Basic::setup_etot(const double& energy_in, const bool judgement) { if (Ions_Move_Basic::istep == 1) { @@ -261,7 +262,7 @@ void Ions_Move_Basic::setup_etot(const double &energy_in, const bool judgement) return; } -double Ions_Move_Basic::dot_func(const double *a, const double *b, const int &dim_in) +double Ions_Move_Basic::dot_func(const double* a, const double* b, const int& dim_in) { double result = 0.0; for (int i = 0; i < dim_in; i++) diff --git a/source/module_relax/ions_move_basic.h b/source/module_relax/ions_move_basic.h index 9b70117c43..000cbcffa8 100644 --- a/source/module_relax/ions_move_basic.h +++ b/source/module_relax/ions_move_basic.h @@ -1,8 +1,8 @@ #ifndef IONS_MOVE_BASIC_H #define IONS_MOVE_BASIC_H -#include "module_base/matrix.h" #include "module_cell/unitcell.h" +#include "source_base/matrix.h" namespace Ions_Move_Basic { @@ -15,43 +15,43 @@ extern double ediff; // energy difference compared to last step, extern double etot; // total energy of this step, extern double etot_p; // total energy of last step, -extern double trust_radius; // trust radius now, -extern double trust_radius_old; // old trust radius, -extern double relax_bfgs_rmax; // max value of trust radius, -extern double relax_bfgs_rmin; // min value of trust radius, -extern double relax_bfgs_init; // initial value of trust radius, -extern double best_xxx; // the last step length of cg , we use it as bfgs`s initial step length +extern double trust_radius; // trust radius now, +extern double trust_radius_old; // old trust radius, +extern double relax_bfgs_rmax; // max value of trust radius, +extern double relax_bfgs_rmin; // min value of trust radius, +extern double relax_bfgs_init; // initial value of trust radius, +extern double best_xxx; // the last step length of cg , we use it as bfgs`s initial step length extern std::string relax_method; // relaxation method, -extern int out_stru; // output the structure or not +extern int out_stru; // output the structure or not // funny way to pass this parameter, but nevertheless //---------------------------------------------------------------------------- // setup the gradient, all the same for any geometry optimization methods. //---------------------------------------------------------------------------- -void setup_gradient(const UnitCell &ucell, const ModuleBase::matrix &force, double *pos, double *grad); +void setup_gradient(const UnitCell& ucell, const ModuleBase::matrix& force, double* pos, double* grad); //---------------------------------------------------------------------------- // move the atom positions, considering the periodic boundary condition. //---------------------------------------------------------------------------- -void move_atoms(UnitCell &ucell, double *move, double *pos); +void move_atoms(UnitCell& ucell, double* move, double* pos); //---------------------------------------------------------------------------- // check the converged conditions ( if largest gradient is smaller than // the threshold) //---------------------------------------------------------------------------- -void check_converged(const UnitCell &ucell, const double *grad); +void check_converged(const UnitCell& ucell, const double* grad); //---------------------------------------------------------------------------- // terminate the geometry optimization. //---------------------------------------------------------------------------- -void terminate(const UnitCell &ucell); +void terminate(const UnitCell& ucell); //---------------------------------------------------------------------------- // setup the total energy, keep the new energy or not. //---------------------------------------------------------------------------- -void setup_etot(const double &energy_in, const bool judgement); +void setup_etot(const double& energy_in, const bool judgement); -double dot_func(const double *a, const double *b, const int &dim); +double dot_func(const double* a, const double* b, const int& dim); //---------------------------------------------------------------------------- // third order interpolation scheme, diff --git a/source/module_relax/ions_move_bfgs.cpp b/source/module_relax/ions_move_bfgs.cpp index afce2c7588..5919b225e8 100644 --- a/source/module_relax/ions_move_bfgs.cpp +++ b/source/module_relax/ions_move_bfgs.cpp @@ -1,9 +1,9 @@ #include "ions_move_bfgs.h" -#include "module_parameter/parameter.h" #include "ions_move_basic.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" +#include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" //============= MAP OF BFGS =========================== // (1) start() -> BFGS_Basic::check_converged() @@ -23,9 +23,10 @@ Ions_Move_BFGS::~Ions_Move_BFGS(){}; void Ions_Move_BFGS::allocate() { ModuleBase::TITLE("Ions_Move_BFGS", "init"); - if (init_done) { + if (init_done) + { return; -} + } this->allocate_basic(); // initialize data members @@ -49,7 +50,8 @@ void Ions_Move_BFGS::start(UnitCell& ucell, const ModuleBase::matrix& force, con Ions_Move_Basic::setup_gradient(ucell, force, this->pos, this->grad); first_step = false; } - else{ + else + { std::vector pos_tmp(3 * ucell.nat); Ions_Move_Basic::setup_gradient(ucell, force, pos_tmp.data(), this->grad); } diff --git a/source/module_relax/ions_move_bfgs.h b/source/module_relax/ions_move_bfgs.h index 42a08a2593..84cfa35fb5 100644 --- a/source/module_relax/ions_move_bfgs.h +++ b/source/module_relax/ions_move_bfgs.h @@ -2,8 +2,8 @@ #define IONS_MOVE_BFGS_H #include "bfgs_basic.h" -#include "module_base/matrix.h" #include "module_cell/unitcell.h" +#include "source_base/matrix.h" class Ions_Move_BFGS : public BFGS_Basic { public: @@ -17,7 +17,8 @@ class Ions_Move_BFGS : public BFGS_Basic bool init_done; void bfgs_routine(const double& lat0); void restart_bfgs(const double& lat0); - bool first_step=true; // If it is the first step of the relaxation. The pos is only generated from ucell in the first step, and in the following steps, the pos is generated from the previous step. + bool first_step = true; // If it is the first step of the relaxation. The pos is only generated from ucell in the + // first step, and in the following steps, the pos is generated from the previous step. }; #endif diff --git a/source/module_relax/ions_move_cg.cpp b/source/module_relax/ions_move_cg.cpp index a311757d94..f0093ba53f 100644 --- a/source/module_relax/ions_move_cg.cpp +++ b/source/module_relax/ions_move_cg.cpp @@ -1,8 +1,8 @@ #include "ions_move_cg.h" #include "ions_move_basic.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" using namespace Ions_Move_Basic; double Ions_Move_CG::RELAX_CG_THR = -1.0; // default is 0.5 @@ -58,7 +58,7 @@ void Ions_Move_CG::allocate(void) this->e0 = 0.0; } -void Ions_Move_CG::start(UnitCell &ucell, const ModuleBase::matrix &force, const double &etot_in) +void Ions_Move_CG::start(UnitCell& ucell, const ModuleBase::matrix& force, const double& etot_in) { ModuleBase::TITLE("Ions_Move_CG", "start"); assert(dim > 0); @@ -75,7 +75,7 @@ void Ions_Move_CG::start(UnitCell &ucell, const ModuleBase::matrix &force, const static bool trial = false; // ncggrad is a parameter to control the cg method , every ten cg directions, - // we change the direction back to the steepest descent method + // we change the direction back to the steepest descent method static int ncggrad = 0; static double fa = 0.0; @@ -91,13 +91,12 @@ void Ions_Move_CG::start(UnitCell &ucell, const ModuleBase::matrix &force, const static int nbrent = 0; - // some arrays - double *pos = new double[dim]; - double *grad = new double[dim]; - double *cg_gradn = new double[dim]; - double *move = new double[dim]; - double *cg_grad = new double[dim]; + double* pos = new double[dim]; + double* grad = new double[dim]; + double* cg_gradn = new double[dim]; + double* move = new double[dim]; + double* cg_grad = new double[dim]; double best_x = 0.0; double fmin = 0.0; @@ -308,12 +307,12 @@ void Ions_Move_CG::start(UnitCell &ucell, const ModuleBase::matrix &force, const return; } -void Ions_Move_CG::setup_cg_grad(double *grad, - const double *grad0, - double *cg_grad, - const double *cg_grad0, - const int &ncggrad, - int &flag) +void Ions_Move_CG::setup_cg_grad(double* grad, + const double* grad0, + double* cg_grad, + const double* cg_grad0, + const int& ncggrad, + int& flag) { ModuleBase::TITLE("Ions_Move_CG", "setup_cg_grad"); assert(Ions_Move_Basic::istep > 0); @@ -368,12 +367,12 @@ void Ions_Move_CG::setup_cg_grad(double *grad, return; } -void Ions_Move_CG::third_order(const double &e0, - const double &e1, - const double &fa, - const double &fb, +void Ions_Move_CG::third_order(const double& e0, + const double& e1, + const double& fa, + const double& fb, const double x, - double &best_x) + double& best_x) { double k3, k2, k1; double dmoveh, dmove1, dmove2, dmove, ecal1, ecal2; @@ -409,14 +408,14 @@ void Ions_Move_CG::third_order(const double &e0, return; } -void Ions_Move_CG::Brent(double &fa, - double &fb, - double &fc, - double &xa, - double &xb, - double &xc, - double &best_x, - double &xpt) +void Ions_Move_CG::Brent(double& fa, + double& fb, + double& fc, + double& xa, + double& xb, + double& xc, + double& best_x, + double& xpt) { double dmove; double tmp; @@ -481,7 +480,7 @@ void Ions_Move_CG::Brent(double &fa, return; } -void Ions_Move_CG::f_cal(const double *g0, const double *g1, const int &dim, double &f_value) +void Ions_Move_CG::f_cal(const double* g0, const double* g1, const int& dim, double& f_value) { double hv0, hel; hel = 0; @@ -499,7 +498,7 @@ void Ions_Move_CG::f_cal(const double *g0, const double *g1, const int &dim, dou return; } -void Ions_Move_CG::setup_move(double *move, double *cg_gradn, const double &trust_radius) +void Ions_Move_CG::setup_move(double* move, double* cg_gradn, const double& trust_radius) { // movement using gradient and trust_radius. for (int i = 0; i < dim; ++i) diff --git a/source/module_relax/ions_move_cg.h b/source/module_relax/ions_move_cg.h index 59ed3b63c1..7017c7464c 100644 --- a/source/module_relax/ions_move_cg.h +++ b/source/module_relax/ions_move_cg.h @@ -1,8 +1,8 @@ #ifndef IONS_MOVE_CG_H #define IONS_MOVE_CG_H -#include "module_base/matrix.h" #include "module_cell/unitcell.h" +#include "source_base/matrix.h" class Ions_Move_CG { public: @@ -10,34 +10,34 @@ class Ions_Move_CG ~Ions_Move_CG(); void allocate(void); - void start(UnitCell &ucell, const ModuleBase::matrix &force, const double &etot); + void start(UnitCell& ucell, const ModuleBase::matrix& force, const double& etot); static double RELAX_CG_THR; - int sd_step=0; - int cg_step=0; + int sd_step = 0; + int cg_step = 0; private: - double *pos0; - double *grad0; - double *cg_grad0; - double *move0; - double e0=0.0; + double* pos0; + double* grad0; + double* cg_grad0; + double* move0; + double e0 = 0.0; // setup gradients. - void setup_cg_grad(double *grad, - const double *grad0, - double *cg_grad, - const double *cg_grad0, - const int &ncggrad, - int &flag); // LiuXh fix bug of lpf, 20180515 - void setup_move(double *move, double *cg_gradn, const double &trust_radius); - void Brent(double &fa, double &fb, double &fc, double &xa, double &xb, double &xc, double &best_x, double &xpt); - void f_cal(const double *g0, const double *g1, const int &dim, double &f_value); - void third_order(const double &e0, - const double &e1, - const double &fa, - const double &fb, + void setup_cg_grad(double* grad, + const double* grad0, + double* cg_grad, + const double* cg_grad0, + const int& ncggrad, + int& flag); // LiuXh fix bug of lpf, 20180515 + void setup_move(double* move, double* cg_gradn, const double& trust_radius); + void Brent(double& fa, double& fb, double& fc, double& xa, double& xb, double& xc, double& best_x, double& xpt); + void f_cal(const double* g0, const double* g1, const int& dim, double& f_value); + void third_order(const double& e0, + const double& e1, + const double& fa, + const double& fb, const double x, - double &best_x); + double& best_x); }; #endif diff --git a/source/module_relax/ions_move_methods.cpp b/source/module_relax/ions_move_methods.cpp index ddb25a59c0..9a92593ced 100644 --- a/source/module_relax/ions_move_methods.cpp +++ b/source/module_relax/ions_move_methods.cpp @@ -1,9 +1,8 @@ #include "ions_move_methods.h" #include "ions_move_basic.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" - +#include "source_base/global_function.h" +#include "source_base/global_variable.h" Ions_Move_Methods::Ions_Move_Methods() { @@ -12,7 +11,7 @@ Ions_Move_Methods::~Ions_Move_Methods() { } -void Ions_Move_Methods::allocate(const int &natom) +void Ions_Move_Methods::allocate(const int& natom) { Ions_Move_Basic::dim = natom * 3; @@ -33,13 +32,13 @@ void Ions_Move_Methods::allocate(const int &natom) this->cg.allocate(); this->bfgs.allocate(); // added by pengfei 13-8-8 } - else if(Ions_Move_Basic::relax_method == "bfgs_trad") + else if (Ions_Move_Basic::relax_method == "bfgs_trad") { - this->bfgs_trad.allocate(natom); + this->bfgs_trad.allocate(natom); } - else if(Ions_Move_Basic::relax_method == "lbfgs") + else if (Ions_Move_Basic::relax_method == "lbfgs") { - this->lbfgs.allocate(natom); + this->lbfgs.allocate(natom); } else { @@ -49,11 +48,11 @@ void Ions_Move_Methods::allocate(const int &natom) } // void Ions_Move_Methods::cal_movement(const int &istep, const ModuleBase::matrix &f, const double &etot) -void Ions_Move_Methods::cal_movement(const int &istep, - const int &force_step, - const ModuleBase::matrix &f, - const double &etot, - UnitCell &ucell) +void Ions_Move_Methods::cal_movement(const int& istep, + const int& force_step, + const ModuleBase::matrix& f, + const double& etot, + UnitCell& ucell) { ModuleBase::TITLE("Ions_Move_Methods", "init"); @@ -79,13 +78,13 @@ void Ions_Move_Methods::cal_movement(const int &istep, { cg.start(ucell, f, etot); // added by pengfei 13-8-10 } - else if(Ions_Move_Basic::relax_method == "bfgs_trad") + else if (Ions_Move_Basic::relax_method == "bfgs_trad") { - bfgs_trad.relax_step(f,ucell); + bfgs_trad.relax_step(f, ucell); } - else if(Ions_Move_Basic::relax_method == "lbfgs") + else if (Ions_Move_Basic::relax_method == "lbfgs") { - lbfgs.relax_step(f,ucell,etot); + lbfgs.relax_step(f, ucell, etot); } else { diff --git a/source/module_relax/ions_move_sd.cpp b/source/module_relax/ions_move_sd.cpp index 89e5f9e3cb..6b3bb919d4 100644 --- a/source/module_relax/ions_move_sd.cpp +++ b/source/module_relax/ions_move_sd.cpp @@ -1,10 +1,11 @@ #include "ions_move_sd.h" -#include "module_parameter/parameter.h" #include "ions_move_basic.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include +#include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" + +#include using namespace Ions_Move_Basic; @@ -58,9 +59,10 @@ void Ions_Move_SD::start(UnitCell& ucell, const ModuleBase::matrix& force, const printf("in cheak_converged"); printf("pos[0]: %f\n", pos[0]); energy_saved = etot_in; - for (int i = 0; i < dim; i++) { + for (int i = 0; i < dim; i++) + { pos_saved[i] = pos[i]; -} + } for (int i = 0; i < dim; i++) { grad_saved[i] = grad[i]; diff --git a/source/module_relax/ions_move_sd.h b/source/module_relax/ions_move_sd.h index 260a930610..09013ba2ac 100644 --- a/source/module_relax/ions_move_sd.h +++ b/source/module_relax/ions_move_sd.h @@ -1,8 +1,8 @@ #ifndef IONS_MOVE_SD_H #define IONS_MOVE_SD_H -#include "module_base/matrix.h" #include "module_cell/unitcell.h" +#include "source_base/matrix.h" class Ions_Move_SD { public: diff --git a/source/module_relax/lattice_change_basic.cpp b/source/module_relax/lattice_change_basic.cpp index c145d36ee8..1048bc5552 100644 --- a/source/module_relax/lattice_change_basic.cpp +++ b/source/module_relax/lattice_change_basic.cpp @@ -1,9 +1,9 @@ #include "lattice_change_basic.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_common.h" #include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_common.h" int Lattice_Change_Basic::dim = 0; bool Lattice_Change_Basic::converged = true; @@ -20,7 +20,7 @@ double Lattice_Change_Basic::etot_p = 0.0; double Lattice_Change_Basic::lattice_change_ini = 0.01; // default is 0.5 std::string Lattice_Change_Basic::fixed_axes = "None"; -void Lattice_Change_Basic::setup_gradient(const UnitCell &ucell, double *lat, double *grad, ModuleBase::matrix &stress) +void Lattice_Change_Basic::setup_gradient(const UnitCell& ucell, double* lat, double* grad, ModuleBase::matrix& stress) { ModuleBase::TITLE("Lattice_Change_Basic", "setup_gradient"); @@ -68,7 +68,7 @@ void Lattice_Change_Basic::setup_gradient(const UnitCell &ucell, double *lat, do return; } -void Lattice_Change_Basic::change_lattice(UnitCell &ucell, double *move, double *lat) +void Lattice_Change_Basic::change_lattice(UnitCell& ucell, double* move, double* lat) { ModuleBase::TITLE("Lattice_Change_Basic", "change_lattice"); @@ -86,15 +86,24 @@ void Lattice_Change_Basic::change_lattice(UnitCell &ucell, double *move, double if (ModuleSymmetry::Symmetry::symm_flag && ucell.symm.nrotk > 0) { ModuleBase::matrix move_mat_t(3, 3); - for (int i = 0;i < 3;++i) {for (int j = 0;j < 3;++j) {move_mat_t(j, i) = move[i * 3 + j] / ucell.lat0; //transpose -} -} - ModuleBase::matrix symm_move_mat_t = (move_mat_t * ucell.G.to_matrix());//symmetrize (latvec^{-1} * move_mat)^T + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + move_mat_t(j, i) = move[i * 3 + j] / ucell.lat0; // transpose + } + } + ModuleBase::matrix symm_move_mat_t = (move_mat_t * ucell.G.to_matrix()); // symmetrize (latvec^{-1} * + // move_mat)^T ucell.symm.symmetrize_mat3(symm_move_mat_t, ucell.lat); - move_mat_t = symm_move_mat_t * ucell.latvec.Transpose().to_matrix();//G^{-1}=latvec^T - for (int i = 0;i < 3;++i) {for (int j = 0;j < 3;++j) {move[i * 3 + j] = move_mat_t(j, i) * ucell.lat0;//transpose back -} -} + move_mat_t = symm_move_mat_t * ucell.latvec.Transpose().to_matrix(); // G^{-1}=latvec^T + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + move[i * 3 + j] = move_mat_t(j, i) * ucell.lat0; // transpose back + } + } } if (ucell.lc[0] != 0) @@ -160,7 +169,7 @@ void Lattice_Change_Basic::change_lattice(UnitCell &ucell, double *move, double return; } -void Lattice_Change_Basic::check_converged(const UnitCell &ucell, ModuleBase::matrix &stress, double *grad) +void Lattice_Change_Basic::check_converged(const UnitCell& ucell, ModuleBase::matrix& stress, double* grad) { ModuleBase::TITLE("Lattice_Change_Basic", "check_converged"); @@ -171,9 +180,10 @@ void Lattice_Change_Basic::check_converged(const UnitCell &ucell, ModuleBase::ma { for (int i = 0; i < 3; i++) { - if (stress_ii_max < std::abs(stress(i, i))) { + if (stress_ii_max < std::abs(stress(i, i))) + { stress_ii_max = std::abs(stress(i, i)); -} + } for (int j = 0; j < 3; j++) { if (Lattice_Change_Basic::largest_grad < std::abs(stress(i, j))) @@ -212,7 +222,7 @@ void Lattice_Change_Basic::check_converged(const UnitCell &ucell, ModuleBase::ma if (Lattice_Change_Basic::largest_grad < PARAM.inp.stress_thr && stress_ii_max < PARAM.inp.stress_thr) { GlobalV::ofs_running << "\n Lattice relaxation is converged!" << std::endl; - GlobalV::ofs_running << "\n Largest gradient in stress is " << largest_grad << " kbar." << std::endl; + GlobalV::ofs_running << "\n Largest gradient in stress is " << largest_grad << " kbar." << std::endl; GlobalV::ofs_running << " Threshold is " << PARAM.inp.stress_thr << " kbar." << std::endl; Lattice_Change_Basic::converged = true; ++Lattice_Change_Basic::update_iter; @@ -233,7 +243,7 @@ void Lattice_Change_Basic::check_converged(const UnitCell &ucell, ModuleBase::ma if (Lattice_Change_Basic::largest_grad < 10 * PARAM.inp.stress_thr) { GlobalV::ofs_running << "\n Lattice relaxation is converged!" << std::endl; - GlobalV::ofs_running << "\n Largest gradient in stress is " << largest_grad << " kbar." << std::endl; + GlobalV::ofs_running << "\n Largest gradient in stress is " << largest_grad << " kbar." << std::endl; GlobalV::ofs_running << " Threshold is " << PARAM.inp.stress_thr << " kbar." << std::endl; Lattice_Change_Basic::converged = true; ++Lattice_Change_Basic::update_iter; @@ -279,7 +289,7 @@ void Lattice_Change_Basic::terminate() return; } -void Lattice_Change_Basic::setup_etot(const double &energy_in, const bool judgement) +void Lattice_Change_Basic::setup_etot(const double& energy_in, const bool judgement) { if (Lattice_Change_Basic::stress_step == 1) { diff --git a/source/module_relax/lattice_change_basic.h b/source/module_relax/lattice_change_basic.h index 59666e3bbe..fa1349a1c7 100644 --- a/source/module_relax/lattice_change_basic.h +++ b/source/module_relax/lattice_change_basic.h @@ -1,8 +1,8 @@ #ifndef LATTICE_CHANGE_BASIC_H #define LATTICE_CHANGE_BASIC_H -#include "module_base/matrix.h" #include "module_cell/unitcell.h" +#include "source_base/matrix.h" namespace Lattice_Change_Basic { @@ -22,18 +22,18 @@ extern std::string fixed_axes; // convert from INPUT.fixed_axes //---------------------------------------------------------------------------- // setup the gradient, all the same for any geometry optimization methods. //---------------------------------------------------------------------------- -void setup_gradient(const UnitCell &ucell, double *lat, double *grad, ModuleBase::matrix &stress); +void setup_gradient(const UnitCell& ucell, double* lat, double* grad, ModuleBase::matrix& stress); //---------------------------------------------------------------------------- // move the atom positions, considering the periodic boundary condition. //---------------------------------------------------------------------------- -void change_lattice(UnitCell &ucell, double *move, double *lat); +void change_lattice(UnitCell& ucell, double* move, double* lat); //---------------------------------------------------------------------------- // check the converged conditions ( if largest gradient is smaller than // the threshold) //---------------------------------------------------------------------------- -void check_converged(const UnitCell &ucell, ModuleBase::matrix &stress, double *grad); +void check_converged(const UnitCell& ucell, ModuleBase::matrix& stress, double* grad); //---------------------------------------------------------------------------- // terminate the geometry optimization. @@ -43,6 +43,6 @@ void terminate(void); //---------------------------------------------------------------------------- // setup the total energy, keep the new energy or not. //---------------------------------------------------------------------------- -void setup_etot(const double &energy_in, const bool judgement); +void setup_etot(const double& energy_in, const bool judgement); } // namespace Lattice_Change_Basic #endif diff --git a/source/module_relax/lattice_change_cg.cpp b/source/module_relax/lattice_change_cg.cpp index 5d5af384b6..5f4bc0ac9b 100644 --- a/source/module_relax/lattice_change_cg.cpp +++ b/source/module_relax/lattice_change_cg.cpp @@ -1,8 +1,8 @@ #include "lattice_change_cg.h" #include "lattice_change_basic.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" // the 'dim' variable is defined in Lattice_Change_Basic using namespace Lattice_Change_Basic; @@ -61,7 +61,7 @@ void Lattice_Change_CG::allocate(void) this->e0 = 0.0; } -void Lattice_Change_CG::start(UnitCell &ucell, const ModuleBase::matrix &stress_in, const double &etot_in) +void Lattice_Change_CG::start(UnitCell& ucell, const ModuleBase::matrix& stress_in, const double& etot_in) { ModuleBase::TITLE("Lattice_Change_CG", "start"); @@ -69,7 +69,6 @@ void Lattice_Change_CG::start(UnitCell &ucell, const ModuleBase::matrix &stress_ assert(grad0 != 0); assert(cg_grad0 != 0); assert(move0 != 0); - // sd , trial are two parameters, when sd=trial=true, // a new direction begins, when sd = false trial =true @@ -78,11 +77,11 @@ void Lattice_Change_CG::start(UnitCell &ucell, const ModuleBase::matrix &stress_ // a cubic interpolation is used to make the third point, // when sa = trial = false, we use Brent to get the // minimum point in this direction. - static bool trial = false; + static bool trial = false; // ncggrad is a parameter to control the cg method, // every ten cg direction, we change the direction back to - // the steepest descent method + // the steepest descent method static int ncggrad = 0; static double fa = 0.0; @@ -99,11 +98,11 @@ void Lattice_Change_CG::start(UnitCell &ucell, const ModuleBase::matrix &stress_ static int nbrent = 0; - double *lat = new double[dim]; - double *grad = new double[dim]; - double *cg_gradn = new double[dim]; - double *move = new double[dim]; - double *cg_grad = new double[dim]; + double* lat = new double[dim]; + double* grad = new double[dim]; + double* cg_gradn = new double[dim]; + double* move = new double[dim]; + double* cg_grad = new double[dim]; double best_x = 0.0; double fmin = 0.0; @@ -312,12 +311,12 @@ void Lattice_Change_CG::start(UnitCell &ucell, const ModuleBase::matrix &stress_ return; } -void Lattice_Change_CG::setup_cg_grad(double *grad, - const double *grad0, - double *cg_grad, - const double *cg_grad0, - const int &ncggrad, - int &flag) +void Lattice_Change_CG::setup_cg_grad(double* grad, + const double* grad0, + double* cg_grad, + const double* cg_grad0, + const int& ncggrad, + int& flag) { ModuleBase::TITLE("Lattice_Change_CG", "setup_cg_grad"); assert(Lattice_Change_Basic::stress_step > 0); @@ -372,12 +371,12 @@ void Lattice_Change_CG::setup_cg_grad(double *grad, return; } -void Lattice_Change_CG::third_order(const double &e0, - const double &e1, - const double &fa, - const double &fb, +void Lattice_Change_CG::third_order(const double& e0, + const double& e1, + const double& fa, + const double& fb, const double x, - double &best_x) + double& best_x) { double k3, k2, k1; double dmoveh, dmove1, dmove2, dmove, ecal1, ecal2; @@ -413,14 +412,14 @@ void Lattice_Change_CG::third_order(const double &e0, return; } -void Lattice_Change_CG::Brent(double &fa, - double &fb, - double &fc, - double &xa, - double &xb, - double &xc, - double &best_x, - double &xpt) +void Lattice_Change_CG::Brent(double& fa, + double& fb, + double& fc, + double& xa, + double& xb, + double& xc, + double& best_x, + double& xpt) { double dmove; double tmp; @@ -485,7 +484,7 @@ void Lattice_Change_CG::Brent(double &fa, return; } -void Lattice_Change_CG::f_cal(const double *g0, const double *g1, const int &dim, double &f_value) +void Lattice_Change_CG::f_cal(const double* g0, const double* g1, const int& dim, double& f_value) { double hv0, hel; hel = 0; @@ -503,7 +502,7 @@ void Lattice_Change_CG::f_cal(const double *g0, const double *g1, const int &dim return; } -void Lattice_Change_CG::setup_move(double *move, double *cg_gradn, const double &trust_radius) +void Lattice_Change_CG::setup_move(double* move, double* cg_gradn, const double& trust_radius) { // movement using gradient and trust_radius. for (int i = 0; i < dim; ++i) diff --git a/source/module_relax/lattice_change_cg.h b/source/module_relax/lattice_change_cg.h index bbaa012919..41253dc86a 100644 --- a/source/module_relax/lattice_change_cg.h +++ b/source/module_relax/lattice_change_cg.h @@ -1,8 +1,8 @@ #ifndef LATTICE_CHANGE_CG_H #define LATTICE_CHANGE_CG_H -#include "module_base/matrix.h" #include "module_cell/unitcell.h" +#include "source_base/matrix.h" class Lattice_Change_CG { @@ -11,35 +11,35 @@ class Lattice_Change_CG ~Lattice_Change_CG(); void allocate(void); - void start(UnitCell &ucell, const ModuleBase::matrix &stress_in, const double &etot); + void start(UnitCell& ucell, const ModuleBase::matrix& stress_in, const double& etot); private: - double *lat0; - double *grad0; - double *cg_grad0; - double *move0; - double e0=0.0; + double* lat0; + double* grad0; + double* cg_grad0; + double* move0; + double e0 = 0.0; // setup gradients. - void setup_cg_grad(double *grad, - const double *grad0, - double *cg_grad, - const double *cg_grad0, - const int &ncggrad, - int &flag); + void setup_cg_grad(double* grad, + const double* grad0, + double* cg_grad, + const double* cg_grad0, + const int& ncggrad, + int& flag); - void setup_move(double *move, double *cg_gradn, const double &trust_radius); + void setup_move(double* move, double* cg_gradn, const double& trust_radius); - void Brent(double &fa, double &fb, double &fc, double &xa, double &xb, double &xc, double &best_x, double &xpt); + void Brent(double& fa, double& fb, double& fc, double& xa, double& xb, double& xc, double& best_x, double& xpt); - void f_cal(const double *g0, const double *g1, const int &dim, double &f_value); + void f_cal(const double* g0, const double* g1, const int& dim, double& f_value); - void third_order(const double &e0, - const double &e1, - const double &fa, - const double &fb, + void third_order(const double& e0, + const double& e1, + const double& fa, + const double& fb, const double x, - double &best_x); + double& best_x); }; #endif diff --git a/source/module_relax/lattice_change_methods.cpp b/source/module_relax/lattice_change_methods.cpp index 96c0911811..1a5affbade 100644 --- a/source/module_relax/lattice_change_methods.cpp +++ b/source/module_relax/lattice_change_methods.cpp @@ -1,6 +1,6 @@ #include "lattice_change_methods.h" -#include "module_base/global_function.h" +#include "source_base/global_function.h" Lattice_Change_Methods::Lattice_Change_Methods() { @@ -17,11 +17,11 @@ void Lattice_Change_Methods::allocate() return; } -void Lattice_Change_Methods::cal_lattice_change(const int &istep, - const int &stress_step, - const ModuleBase::matrix &stress, - const double &etot, - UnitCell &ucell) +void Lattice_Change_Methods::cal_lattice_change(const int& istep, + const int& stress_step, + const ModuleBase::matrix& stress, + const double& etot, + UnitCell& ucell) { ModuleBase::TITLE("Lattice_Change_Methods", "lattice_change_init"); Lattice_Change_Basic::istep = istep; diff --git a/source/module_relax/lbfgs.cpp b/source/module_relax/lbfgs.cpp index b88c13e333..f3d9622ca8 100644 --- a/source/module_relax/lbfgs.cpp +++ b/source/module_relax/lbfgs.cpp @@ -1,98 +1,99 @@ #include "lbfgs.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/matrix3.h" -#include "module_parameter/parameter.h" + #include "ions_move_basic.h" #include "module_cell/update_cell.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/matrix3.h" void LBFGS::allocate(const int _size) // initialize H0、H、pos0、force0、force { - alpha=70;//default value in ase is 70 - maxstep=PARAM.inp.relax_bfgs_rmax; - size=_size; - memory=100; - iteration=0; - H = std::vector>(3*size, std::vector(3*size, 0.0)); - H0=1/alpha; - pos = std::vector> (size, std::vector(3, 0.0)); - pos0 = std::vector(3*size, 0.0); - pos_taud = std::vector> (size, std::vector(3, 0.0)); - pos_taud0 = std::vector(3*size, 0.0); + alpha = 70; // default value in ase is 70 + maxstep = PARAM.inp.relax_bfgs_rmax; + size = _size; + memory = 100; + iteration = 0; + H = std::vector>(3 * size, std::vector(3 * size, 0.0)); + H0 = 1 / alpha; + pos = std::vector>(size, std::vector(3, 0.0)); + pos0 = std::vector(3 * size, 0.0); + pos_taud = std::vector>(size, std::vector(3, 0.0)); + pos_taud0 = std::vector(3 * size, 0.0); dpos = std::vector>(size, std::vector(3, 0.0)); - force0 = std::vector(3*size, 0.0); + force0 = std::vector(3 * size, 0.0); force = std::vector>(size, std::vector(3, 0.0)); steplength = std::vector(size, 0.0); - //l_search.init_line_search(); + // l_search.init_line_search(); } -void LBFGS::relax_step(const ModuleBase::matrix _force,UnitCell& ucell,const double &etot) +void LBFGS::relax_step(const ModuleBase::matrix _force, UnitCell& ucell, const double& etot) { - get_pos(ucell,pos); - get_pos_taud(ucell,pos_taud); - //solver=p_esolver; + get_pos(ucell, pos); + get_pos_taud(ucell, pos_taud); + // solver=p_esolver; ucell.ionic_position_updated = true; - for(int i = 0; i < _force.nr; i++) + for (int i = 0; i < _force.nr; i++) { - for(int j=0;j<_force.nc;j++) + for (int j = 0; j < _force.nc; j++) { - force[i][j]=_force(i,j)*ModuleBase::Ry_to_eV/ModuleBase::BOHR_TO_A; + force[i][j] = _force(i, j) * ModuleBase::Ry_to_eV / ModuleBase::BOHR_TO_A; } } - int k=0; - for(int i=0;iprepare_step(force,pos,H,pos0,force0,dpos,ucell,etot); - this->determine_step(steplength,dpos,maxstep); + this->prepare_step(force, pos, H, pos0, force0, dpos, ucell, etot); + this->determine_step(steplength, dpos, maxstep); this->update_pos(ucell); - this->calculate_largest_grad(_force,ucell); - this->is_restrain(dpos); + this->calculate_largest_grad(_force, ucell); + this->is_restrain(dpos); } -void LBFGS::get_pos(UnitCell& ucell,std::vector>& pos) +void LBFGS::get_pos(UnitCell& ucell, std::vector>& pos) { - int k=0; - for(int i=0;i>& pos_taud) +void LBFGS::get_pos_taud(UnitCell& ucell, std::vector>& pos_taud) { - int k=0; - for(int i=0;i>& force, std::vector& force0, std::vector>& dpos, UnitCell& ucell, - const double &etot) + const double& etot) { std::vector changedforce = ReshapeMToV(force); std::vector changedpos = ReshapeMToV(pos); - this->update(pos_taud,pos_taud0,changedforce,force0,ucell,iteration,memory,s,y,rho); - std::vector q=DotInVAndFloat(changedforce,-1); - int loopmax=std::min(memory,iteration); + this->update(pos_taud, pos_taud0, changedforce, force0, ucell, iteration, memory, s, y, rho); + std::vector q = DotInVAndFloat(changedforce, -1); + int loopmax = std::min(memory, iteration); std::vector a(loopmax); - for(int i=loopmax-1;i>=0;i--) + for (int i = loopmax - 1; i >= 0; i--) { - a[i]=rho[i]*DotInVAndV(s[i],q); - std::vector temp=DotInVAndFloat(y[i],a[i]); - q=VSubV(q,temp); + a[i] = rho[i] * DotInVAndV(s[i], q); + std::vector temp = DotInVAndFloat(y[i], a[i]); + q = VSubV(q, temp); } - std::vector z=DotInVAndFloat(q,H0); - for(int i=0;i z = DotInVAndFloat(q, H0); + for (int i = 0; i < loopmax; i++) { - double b=rho[i]*DotInVAndV(y[i],z); - std::vector temp=DotInVAndFloat(s[i],a[i]-b); - z=VAddV(z,temp); + double b = rho[i] * DotInVAndV(y[i], z); + std::vector temp = DotInVAndFloat(s[i], a[i] - b); + z = VAddV(z, temp); } - std::vector temp0=DotInVAndFloat(z,-1); - dpos=ReshapeVToM(temp0); - std::vector temp1=DotInVAndFloat(changedforce,-1); - std::vector> g=ReshapeVToM(temp1); - energy=etot; - //alpha_k=l_search.line_search(ucell,pos,g,energy,maxstep,size,dpos,pos,solver); - //std::vector temp2=DotInVAndFloat(temp0,alpha_k); - std::vector temp2=DotInVAndFloat(temp0,1); - dpos=ReshapeVToM(temp2); - for(int i = 0; i < size; i++) + std::vector temp0 = DotInVAndFloat(z, -1); + dpos = ReshapeVToM(temp0); + std::vector temp1 = DotInVAndFloat(changedforce, -1); + std::vector> g = ReshapeVToM(temp1); + energy = etot; + // alpha_k=l_search.line_search(ucell,pos,g,energy,maxstep,size,dpos,pos,solver); + // std::vector temp2=DotInVAndFloat(temp0,alpha_k); + std::vector temp2 = DotInVAndFloat(temp0, 1); + dpos = ReshapeVToM(temp2); + for (int i = 0; i < size; i++) { double k = 0; - for(int j = 0; j < 3; j++) + for (int j = 0; j < 3; j++) { k += dpos[i][j] * dpos[i][j]; } steplength[i] = sqrt(k); } - iteration+=1; + iteration += 1; pos0 = ReshapeMToV(pos); - pos_taud0=ReshapeMToV(pos_taud); + pos_taud0 = ReshapeMToV(pos_taud); force0 = changedforce; } -void LBFGS::update(std::vector>& pos_taud, - std::vector& pos_taud0, +void LBFGS::update(std::vector>& pos_taud, + std::vector& pos_taud0, std::vector& force, - std::vector& force0, + std::vector& force0, UnitCell& ucell, int iteration, int memory, @@ -158,11 +159,11 @@ void LBFGS::update(std::vector>& pos_taud, std::vector>& y, std::vector& rho) { - if(iteration>0) + if (iteration > 0) { - std::vector term=ReshapeMToV(pos_taud); - std::vector dpos =VSubV(term, pos_taud0); - for(int i=0;i<3*size;i++) + std::vector term = ReshapeMToV(pos_taud); + std::vector dpos = VSubV(term, pos_taud0); + for (int i = 0; i < 3 * size; i++) { double shortest_move = dpos[i]; for (int cell = -1; cell <= 1; ++cell) @@ -173,94 +174,95 @@ void LBFGS::update(std::vector>& pos_taud, shortest_move = now_move; } } - dpos[i]=shortest_move; + dpos[i] = shortest_move; } - std::vector> c=ReshapeVToM(dpos); - for(int iat=0; iat> c = ReshapeVToM(dpos); + for (int iat = 0; iat < size; iat++) { - //Cartesian coordinate - //convert from Angstrom to unit of latvec (Bohr) + // Cartesian coordinate + // convert from Angstrom to unit of latvec (Bohr) - //convert unit + // convert unit ModuleBase::Vector3 move_ion_cart; - move_ion_cart.x = c[iat][0] *ModuleBase::BOHR_TO_A * ucell.lat0; + move_ion_cart.x = c[iat][0] * ModuleBase::BOHR_TO_A * ucell.lat0; move_ion_cart.y = c[iat][1] * ModuleBase::BOHR_TO_A * ucell.lat0; move_ion_cart.z = c[iat][2] * ModuleBase::BOHR_TO_A * ucell.lat0; - //convert pos - ModuleBase::Vector3 move_ion_dr = move_ion_cart* ucell.latvec; + // convert pos + ModuleBase::Vector3 move_ion_dr = move_ion_cart * ucell.latvec; int it = ucell.iat2it[iat]; int ia = ucell.iat2ia[iat]; Atom* atom = &ucell.atoms[it]; - if(atom->mbl[ia].x == 1) + if (atom->mbl[ia].x == 1) { dpos[iat * 3] = move_ion_dr.x; } - if(atom->mbl[ia].y == 1) + if (atom->mbl[ia].y == 1) { - dpos[iat * 3 + 1] = move_ion_dr.y ; + dpos[iat * 3 + 1] = move_ion_dr.y; } - if(atom->mbl[ia].z == 1) + if (atom->mbl[ia].z == 1) { - dpos[iat * 3 + 2] = move_ion_dr.z ; + dpos[iat * 3 + 2] = move_ion_dr.z; } } - std::vector dforce =VSubV(force0, force); - double rho0=1.0/DotInVAndV(dpos,dforce); + std::vector dforce = VSubV(force0, force); + double rho0 = 1.0 / DotInVAndV(dpos, dforce); s.push_back(dpos); y.push_back(dforce); rho.push_back(rho0); } - if(iteration>memory) + if (iteration > memory) { s.erase(s.begin()); y.erase(y.begin()); rho.erase(rho.begin()); } } -void LBFGS::determine_step(std::vector& steplength,std::vector>& dpos,double& maxstep) +void LBFGS::determine_step(std::vector& steplength, std::vector>& dpos, double& maxstep) { std::vector::iterator maxsteplength = max_element(steplength.begin(), steplength.end()); double a = *maxsteplength; - if(a >= maxstep) + if (a >= maxstep) { double scale = maxstep / a; - for(int i = 0; i < size; i++) + for (int i = 0; i < size; i++) { - for(int j=0;j<3;j++) + for (int j = 0; j < 3; j++) { - dpos[i][j]*=scale; + dpos[i][j] *= scale; } } } } void LBFGS::update_pos(UnitCell& ucell) { - double a[3*size]; - for(int i=0;i>& dpos) { - Ions_Move_Basic::converged = Ions_Move_Basic::largest_grad * ModuleBase::Ry_to_eV / 0.529177 grad= std::vector(3*size, 0.0); + std::vector grad = std::vector(3 * size, 0.0); int iat = 0; for (int it = 0; it < ucell.ntype; it++) { - Atom *atom = &ucell.atoms[it]; + Atom* atom = &ucell.atoms[it]; for (int ia = 0; ia < ucell.atoms[it].na; ia++) { for (int ik = 0; ik < 3; ++ik) @@ -274,7 +276,7 @@ void LBFGS::calculate_largest_grad(const ModuleBase::matrix& _force,UnitCell& uc } } Ions_Move_Basic::largest_grad = 0.0; - for (int i = 0; i < 3*size; i++) + for (int i = 0; i < 3 * size; i++) { if (Ions_Move_Basic::largest_grad < std::abs(grad[i])) { @@ -287,6 +289,4 @@ void LBFGS::calculate_largest_grad(const ModuleBase::matrix& _force,UnitCell& uc std::cout << " LARGEST GRAD (eV/A) : " << Ions_Move_Basic::largest_grad * ModuleBase::Ry_to_eV / 0.5291772109 << std::endl; } - } - diff --git a/source/module_relax/lbfgs.h b/source/module_relax/lbfgs.h index 7295eb42e3..6dcab66128 100644 --- a/source/module_relax/lbfgs.h +++ b/source/module_relax/lbfgs.h @@ -1,16 +1,17 @@ #ifndef LBFGS_H #define LBFGS_H -#include -#include +#include "matrix_methods.h" +#include "source_base/lapack_connector.h" + #include #include -#include "module_base/lapack_connector.h" -#include "matrix_methods.h" +#include +#include //#include "line_search.h" -#include "module_base/matrix.h" -#include "module_base/matrix3.h" #include "module_cell/unitcell.h" +#include "source_base/matrix.h" +#include "source_base/matrix3.h" #include "source_esolver/esolver.h" #include "source_esolver/esolver_ks.h" @@ -20,7 +21,7 @@ */ class LBFGS { -public: + public: /** * @brief Initialize L-BFGS parameters * @param _size Number of atoms in system @@ -34,34 +35,32 @@ class LBFGS * @param etot Current total energy * @param p_esolver Structure solver */ - void relax_step(const ModuleBase::matrix _force, - UnitCell& ucell, - const double &etot); + void relax_step(const ModuleBase::matrix _force, UnitCell& ucell, const double& etot); -private: - //LineSearch l_search; - double alpha; ///< Initial Hessian diagonal element - double maxstep; ///< Maximum allowed step length - int size; ///< Number of atoms in system - int memory; ///< Number of previous steps to store - double H0; ///< Initial inverse Hessian approximation - int iteration; ///< Current iteration count - double energy; ///< Current system energy - double alpha_k; ///< Step size parameter + private: + // LineSearch l_search; + double alpha; ///< Initial Hessian diagonal element + double maxstep; ///< Maximum allowed step length + int size; ///< Number of atoms in system + int memory; ///< Number of previous steps to store + double H0; ///< Initial inverse Hessian approximation + int iteration; ///< Current iteration count + double energy; ///< Current system energy + double alpha_k; ///< Step size parameter - ModuleESolver::ESolver* solver; ///< Structure solver - std::vector> H; ///< Inverse Hessian approximation - std::vector force0; ///< Previous step forces - std::vector> force; ///< Force history - std::vector pos0; ///< Previous positions - std::vector> pos; ///< Position history - std::vector pos_taud0; ///< Previous fractional positions + ModuleESolver::ESolver* solver; ///< Structure solver + std::vector> H; ///< Inverse Hessian approximation + std::vector force0; ///< Previous step forces + std::vector> force; ///< Force history + std::vector pos0; ///< Previous positions + std::vector> pos; ///< Position history + std::vector pos_taud0; ///< Previous fractional positions std::vector> pos_taud; ///< Fractional position history - std::vector> dpos; ///< Position displacements - std::vector> s; ///< Position difference vectors - std::vector> y; ///< Force difference vectors - std::vector rho; ///< Scalar products for L-BFGS update - std::vector steplength; ///< Step lengths for each atom + std::vector> dpos; ///< Position displacements + std::vector> s; ///< Position difference vectors + std::vector> y; ///< Force difference vectors + std::vector rho; ///< Scalar products for L-BFGS update + std::vector steplength; ///< Step lengths for each atom /** * @brief Prepare optimization step parameters @@ -73,7 +72,7 @@ class LBFGS std::vector& force0, std::vector>& dpos, UnitCell& ucell, - const double &etot); + const double& etot); /** * @brief Judge if the cell is restrain @@ -86,24 +85,21 @@ class LBFGS * @param _force Current force matrix * @param ucell Unit cell being optimized */ - void calculate_largest_grad(const ModuleBase::matrix& _force, - UnitCell& ucell); + void calculate_largest_grad(const ModuleBase::matrix& _force, UnitCell& ucell); /** * @brief Extract atomic positions from unit cell * @param ucell Unit cell to read * @param pos Output position vector */ - void get_pos(UnitCell& ucell, - std::vector>& pos); + void get_pos(UnitCell& ucell, std::vector>& pos); /** * @brief Get fractional positions from unit cell * @param ucell Unit cell to read * @param pos_taud Output fractional positions */ - void get_pos_taud(UnitCell& ucell, - std::vector>& pos_taud); + void get_pos_taud(UnitCell& ucell, std::vector>& pos_taud); /** * @brief Update L-BFGS history buffers @@ -118,10 +114,10 @@ class LBFGS * @param y Force differences buffer * @param rho Scalar products buffer */ - void update(std::vector>& pos_taud, - std::vector& pos_taud0, + void update(std::vector>& pos_taud, + std::vector& pos_taud0, std::vector& force, - std::vector& force0, + std::vector& force0, UnitCell& ucell, int iteration, int memory, @@ -135,15 +131,13 @@ class LBFGS * @param dpos Position displacements * @param maxstep Maximum allowed step length */ - void determine_step(std::vector& steplength, - std::vector>& dpos, - double& maxstep); + void determine_step(std::vector& steplength, std::vector>& dpos, double& maxstep); /** * @brief Update atomic positions in unit cell * @param ucell Unit cell to update */ - void update_pos(UnitCell& ucell); + void update_pos(UnitCell& ucell); }; #endif \ No newline at end of file diff --git a/source/module_relax/relax_driver.cpp b/source/module_relax/relax_driver.cpp index 2a584cdf64..45f2679f22 100644 --- a/source/module_relax/relax_driver.cpp +++ b/source/module_relax/relax_driver.cpp @@ -1,6 +1,6 @@ #include "relax_driver.h" -#include "module_base/global_file.h" +#include "module_cell/print_cell.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" // use chr. #include "module_io/cif_io.h" #include "module_io/json_output/output_info.h" @@ -9,13 +9,13 @@ #include "module_io/read_exit_file.h" #include "module_io/write_wfc_r.h" #include "module_parameter/parameter.h" -#include "module_cell/print_cell.h" +#include "source_base/global_file.h" void Relax_Driver::relax_driver(ModuleESolver::ESolver* p_esolver, UnitCell& ucell) -{ +{ ModuleBase::TITLE("Ions", "opt_ions"); ModuleBase::timer::tick("Ions", "opt_ions"); - if (PARAM.inp.calculation == "relax" || PARAM.inp.calculation == "cell-relax" ) + if (PARAM.inp.calculation == "relax" || PARAM.inp.calculation == "cell-relax") { if (!PARAM.inp.relax_new) { @@ -36,8 +36,8 @@ void Relax_Driver::relax_driver(ModuleESolver::ESolver* p_esolver, UnitCell& uce time_t estart = time(nullptr); if (PARAM.inp.out_level == "ie" - && (PARAM.inp.calculation == "relax" || PARAM.inp.calculation == "cell-relax" || PARAM.inp.calculation == "scf" - || PARAM.inp.calculation == "nscf") + && (PARAM.inp.calculation == "relax" || PARAM.inp.calculation == "cell-relax" + || PARAM.inp.calculation == "scf" || PARAM.inp.calculation == "nscf") && (PARAM.inp.esolver_type != "lr")) { ModuleIO::print_screen(stress_step, force_step, istep); @@ -101,25 +101,9 @@ void Relax_Driver::relax_driver(ModuleESolver::ESolver* p_esolver, UnitCell& uce std::stringstream ss, ss1; ss << PARAM.globalv.global_out_dir << "STRU_ION_D"; unitcell::print_stru_file(ucell, - ucell.atoms, - ucell.latvec, - ss.str(), - PARAM.inp.nspin, - true, - PARAM.inp.calculation == "md", - PARAM.inp.out_mul, - need_orb, - PARAM.globalv.deepks_setorb, - GlobalV::MY_RANK); - - if (Ions_Move_Basic::out_stru) - { - ss1 << PARAM.globalv.global_out_dir << "STRU_ION"; - ss1 << istep << "_D"; - unitcell::print_stru_file(ucell, ucell.atoms, ucell.latvec, - ss1.str(), + ss.str(), PARAM.inp.nspin, true, PARAM.inp.calculation == "md", @@ -127,6 +111,22 @@ void Relax_Driver::relax_driver(ModuleESolver::ESolver* p_esolver, UnitCell& uce need_orb, PARAM.globalv.deepks_setorb, GlobalV::MY_RANK); + + if (Ions_Move_Basic::out_stru) + { + ss1 << PARAM.globalv.global_out_dir << "STRU_ION"; + ss1 << istep << "_D"; + unitcell::print_stru_file(ucell, + ucell.atoms, + ucell.latvec, + ss1.str(), + PARAM.inp.nspin, + true, + PARAM.inp.calculation == "md", + PARAM.inp.out_mul, + need_orb, + PARAM.globalv.deepks_setorb, + GlobalV::MY_RANK); ModuleIO::CifParser::write(PARAM.globalv.global_out_dir + "STRU_NOW.cif", ucell, "# Generated by ABACUS ModuleIO::CifParser", diff --git a/source/module_relax/relax_nsync.cpp b/source/module_relax/relax_nsync.cpp index 7b401bc9f3..5f84e6009a 100644 --- a/source/module_relax/relax_nsync.cpp +++ b/source/module_relax/relax_nsync.cpp @@ -1,9 +1,9 @@ #include "relax_nsync.h" -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_parameter/parameter.h" #include "module_cell/update_cell.h" +#include "module_parameter/parameter.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" void Relax_old::init_relax(const int& natom) { // Geometry optimization algorithm setup. @@ -42,9 +42,10 @@ bool Relax_old::relax_step(const int& istep, return true; } // choose what to do next - if (PARAM.inp.calculation != "cell-relax") { + if (PARAM.inp.calculation != "cell-relax") + { force_step = istep; -} + } if (this->if_do_relax(ucell)) { // do relax calculation and generate next structure @@ -70,7 +71,7 @@ bool Relax_old::relax_step(const int& istep, force_step = 1; stress_step++; ucell.cell_parameter_updated = true; - unitcell::setup_cell_after_vc(ucell,GlobalV::ofs_running); + unitcell::setup_cell_after_vc(ucell, GlobalV::ofs_running); ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "SETUP UNITCELL"); } return converged; @@ -96,9 +97,10 @@ bool Relax_old::if_do_relax(const UnitCell& ucell) return true; } } - else { + else + { return false; -} + } } bool Relax_old::if_do_cellrelax(const UnitCell& ucell) { @@ -121,9 +123,10 @@ bool Relax_old::if_do_cellrelax(const UnitCell& ucell) return true; } } - else { + else + { return false; -} + } } bool Relax_old::do_relax(const int& istep, const ModuleBase::matrix& ionic_force, diff --git a/source/module_relax/relax_sync.cpp b/source/module_relax/relax_sync.cpp index 0e42c746c0..c131a0119c 100644 --- a/source/module_relax/relax_sync.cpp +++ b/source/module_relax/relax_sync.cpp @@ -1,14 +1,13 @@ #include "relax_sync.h" - -#include "module_base/matrix3.h" -#include "module_base/parallel_common.h" -#include "module_base/tool_title.h" -#include "module_cell/update_cell.h" #include "module_cell/print_cell.h" +#include "module_cell/update_cell.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" #include "module_relax/ions_move_basic.h" +#include "source_base/matrix3.h" +#include "source_base/parallel_common.h" +#include "source_base/tool_title.h" #include @@ -634,10 +633,10 @@ void Relax::move_cell_ions(UnitCell& ucell, const bool is_new_dir) ucell.symm.symmetrize_vec3_nat(move_ion); } - unitcell::update_pos_taud(ucell.lat,move_ion,ucell.ntype,ucell.nat,ucell.atoms); + unitcell::update_pos_taud(ucell.lat, move_ion, ucell.ntype, ucell.nat, ucell.atoms); // Print the structure file. - unitcell::print_tau(ucell.atoms,ucell.Coordinate,ucell.ntype,ucell.lat0,GlobalV::ofs_running); + unitcell::print_tau(ucell.atoms, ucell.Coordinate, ucell.ntype, ucell.lat0, GlobalV::ofs_running); // ================================================================= // Step 4 : update G,GT and other stuff @@ -696,7 +695,7 @@ void Relax::move_cell_ions(UnitCell& ucell, const bool is_new_dir) // I do not want to change it if (if_cell_moves) { - unitcell::setup_cell_after_vc(ucell,GlobalV::ofs_running); + unitcell::setup_cell_after_vc(ucell, GlobalV::ofs_running); ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "SETUP UNITCELL"); } } diff --git a/source/module_relax/relax_sync.h b/source/module_relax/relax_sync.h index 11bd7fdf90..5bb60211e9 100644 --- a/source/module_relax/relax_sync.h +++ b/source/module_relax/relax_sync.h @@ -4,15 +4,15 @@ #define RELAX1_H #include "line_search.h" -#include "module_base/matrix.h" -#include "module_base/matrix3.h" #include "module_cell/unitcell.h" +#include "source_base/matrix.h" +#include "source_base/matrix3.h" class Relax { public: - Relax() {}; - ~Relax() {}; + Relax(){}; + ~Relax(){}; // prepare for relaxation void init_relax(const int nat_in); diff --git a/source/module_relax/test/CMakeLists.txt b/source/module_relax/test/CMakeLists.txt index 8948fe20e8..ab605957ca 100644 --- a/source/module_relax/test/CMakeLists.txt +++ b/source/module_relax/test/CMakeLists.txt @@ -9,16 +9,16 @@ install(DIRECTORY support DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) AddTest( TARGET relax_new_line_search LIBS parameter - SOURCES line_search_test.cpp ../line_search.cpp ../../module_base/global_variable.cpp ../../module_base/global_file.cpp ../../module_base/global_function.cpp ../../module_base/memory.cpp ../../module_base/timer.cpp ../../module_base/tool_quit.cpp + SOURCES line_search_test.cpp ../line_search.cpp ../../source_base/global_variable.cpp ../../source_base/global_file.cpp ../../source_base/global_function.cpp ../../source_base/memory.cpp ../../source_base/timer.cpp ../../source_base/tool_quit.cpp ) AddTest( TARGET relax_new_relax - SOURCES relax_test.cpp ../relax_sync.cpp ../line_search.cpp ../../module_base/tool_quit.cpp ../../module_base/global_variable.cpp ../../module_base/global_file.cpp ../../module_base/memory.cpp ../../module_base/timer.cpp - ../../module_base/matrix3.cpp ../../module_base/intarray.cpp ../../module_base/tool_title.cpp - ../../module_base/global_function.cpp ../../module_base/complexmatrix.cpp ../../module_base/matrix.cpp - ../../module_base/complexarray.cpp ../../module_base/tool_quit.cpp ../../module_base/realarray.cpp - ../../module_base/blas_connector_base.cpp ../../module_base/blas_connector_vector.cpp ../../module_base/blas_connector_matrix.cpp + SOURCES relax_test.cpp ../relax_sync.cpp ../line_search.cpp ../../source_base/tool_quit.cpp ../../source_base/global_variable.cpp ../../source_base/global_file.cpp ../../source_base/memory.cpp ../../source_base/timer.cpp + ../../source_base/matrix3.cpp ../../source_base/intarray.cpp ../../source_base/tool_title.cpp + ../../source_base/global_function.cpp ../../source_base/complexmatrix.cpp ../../source_base/matrix.cpp + ../../source_base/complexarray.cpp ../../source_base/tool_quit.cpp ../../source_base/realarray.cpp + ../../source_base/blas_connector_base.cpp ../../source_base/blas_connector_vector.cpp ../../source_base/blas_connector_matrix.cpp ../../module_cell/update_cell.cpp ../../module_cell/print_cell.cpp ../../module_cell/bcast_cell.cpp ../../module_io/output.cpp LIBS parameter ${math_libs} ) diff --git a/source/module_relax/test/bfgs_test.cpp b/source/module_relax/test/bfgs_test.cpp index bc06ed4bdf..bab812994c 100644 --- a/source/module_relax/test/bfgs_test.cpp +++ b/source/module_relax/test/bfgs_test.cpp @@ -1,74 +1,83 @@ -#include -#include "for_test.h" #include "module_relax/bfgs.h" + +#include "for_test.h" #include "module_cell/unitcell.h" -#include "module_base/matrix.h" #include "module_relax/ions_move_basic.h" #include "module_relax/matrix_methods.h" +#include "source_base/matrix.h" + +#include -class BFGSTest : public ::testing::Test { -protected: +class BFGSTest : public ::testing::Test +{ + protected: BFGS bfgs; UnitCell ucell; std::vector> force; - void SetUp() override { - int size = 10; + void SetUp() override + { + int size = 10; bfgs.allocate(size); ucell.ntype = 2; ucell.lat0 = 1.0; ucell.nat = 10; ucell.atoms = new Atom[ucell.ntype]; - for (int i = 0; i < ucell.ntype; i++) { - ucell.atoms[i].na = 5; + for (int i = 0; i < ucell.ntype; i++) + { + ucell.atoms[i].na = 5; ucell.atoms[i].tau = std::vector>(5); ucell.atoms[i].taud = std::vector>(5); ucell.atoms[i].mbl = std::vector>(5, {1, 1, 1}); } force = std::vector>(size, std::vector(3, 0.0)); - for (int i = 0; i < force.size(); ++i) { - for (int j = 0; j < 3; ++j) { - force[i][j] = -0.1 * (i + 1); + for (int i = 0; i < force.size(); ++i) + { + for (int j = 0; j < 3; ++j) + { + force[i][j] = -0.1 * (i + 1); } } } }; -TEST_F(BFGSTest, PrepareStep) { +TEST_F(BFGSTest, PrepareStep) +{ bfgs.PrepareStep(force, bfgs.pos, bfgs.H, bfgs.pos0, bfgs.force0, bfgs.steplength, bfgs.dpos, ucell); EXPECT_EQ(bfgs.steplength.size(), 10); - for (int i = 0; i < 10; ++i) { + for (int i = 0; i < 10; ++i) + { EXPECT_GT(bfgs.steplength[i], 0); } } - -TEST_F(BFGSTest, AllocateTest) { +TEST_F(BFGSTest, AllocateTest) +{ BFGS bfgs; int size = 5; bfgs.allocate(size); - EXPECT_EQ(bfgs.steplength.size(), size); - EXPECT_EQ(bfgs.force0.size(), 3*size); - EXPECT_EQ(bfgs.H.size(), 3*size); - for (const auto& row : bfgs.H) { - EXPECT_EQ(row.size(), 3*size); + EXPECT_EQ(bfgs.force0.size(), 3 * size); + EXPECT_EQ(bfgs.H.size(), 3 * size); + for (const auto& row: bfgs.H) + { + EXPECT_EQ(row.size(), 3 * size); } } -TEST_F(BFGSTest, FullStepTest) -{ - BFGS bfgs; - UnitCell ucell; - ModuleBase::matrix force(3, 3); - int size = 3; - bfgs.allocate(size); - force(0, 0)=-0.5; - force(1, 1)=-0.3; - force(2, 2)=0.1; - EXPECT_EQ(bfgs.force.size(), size); - EXPECT_EQ(bfgs.pos.size(), size); +TEST_F(BFGSTest, FullStepTest) +{ + BFGS bfgs; + UnitCell ucell; + ModuleBase::matrix force(3, 3); + int size = 3; + bfgs.allocate(size); + force(0, 0) = -0.5; + force(1, 1) = -0.3; + force(2, 2) = 0.1; + EXPECT_EQ(bfgs.force.size(), size); + EXPECT_EQ(bfgs.pos.size(), size); } \ No newline at end of file diff --git a/source/module_ri/ABFs_Construct-PCA.cpp b/source/module_ri/ABFs_Construct-PCA.cpp index 933b8c9804..d01b9762cd 100644 --- a/source/module_ri/ABFs_Construct-PCA.cpp +++ b/source/module_ri/ABFs_Construct-PCA.cpp @@ -1,12 +1,12 @@ #include "ABFs_Construct-PCA.h" -#include "exx_abfs-abfs_index.h" -#include "../module_base/lapack_connector.h" -#include "../module_base/global_function.h" -#include "../module_base/element_basis_index.h" -#include "../module_base/matrix.h" #include "../module_ri/Matrix_Orbs11.h" #include "../module_ri/Matrix_Orbs21.h" +#include "../source_base/element_basis_index.h" +#include "../source_base/global_function.h" +#include "../source_base/lapack_connector.h" +#include "../source_base/matrix.h" +#include "exx_abfs-abfs_index.h" #include #include @@ -15,152 +15,158 @@ namespace ABFs_Construct { namespace PCA { - void tensor_dsyev(const char jobz, const char uplo, RI::Tensor & a, double*const w, int & info) - { - // reference: dsyev in lapack_connector.h (for ModuleBase::matrix) - assert(a.shape.size() == 2); - assert(a.shape[0] == a.shape[1]); - const int nr = a.shape[0]; - const int nc = a.shape[1]; - - double work_tmp=0.0; - constexpr int minus_one = -1; - dsyev_(&jobz, &uplo, &nr, a.ptr(), &nc, w, &work_tmp, &minus_one, &info); // get best lwork - - const int lwork = work_tmp; - std::vector work(std::max(1, lwork)); - dsyev_(&jobz, &uplo, &nr, a.ptr(), &nc, w, work.data(), &lwork, &info); - } - - RI::Tensor get_sub_matrix( - const RI::Tensor & m, // size: (lcaos, lcaos, abfs) - const std::size_t & T, - const std::size_t & L, - const ModuleBase::Element_Basis_Index::Range & range, - const ModuleBase::Element_Basis_Index::IndexLNM & index ) - { - ModuleBase::TITLE("ABFs_Construct::PCA::get_sub_matrix"); - assert(m.shape.size() == 3); - RI::Tensor m_sub({ m.shape[0], m.shape[1], range[T][L].N }); - for (std::size_t ir=0; ir!=m.shape[0]; ++ir) { - for (std::size_t jr=0; jr!=m.shape[1]; ++jr) { - for (std::size_t N=0; N!=range[T][L].N; ++N) { - m_sub(ir, jr, N) = m(ir, jr, index[T][L][N][0]); -} -} -} - m_sub = m_sub.reshape({ m.shape[0] * m.shape[1], range[T][L].N }); - return m_sub; - } - - RI::Tensor get_column_mean0_matrix( const RI::Tensor & m ) - { - ModuleBase::TITLE("ABFs_Construct::PCA::get_column_mean0_matrix"); - RI::Tensor m_new( m.shape); - for( std::size_t ic=0; ic!=m.shape[1]; ++ic ) - { - double sum=0; - for( std::size_t ir=0; ir!=m.shape[0]; ++ir ) { - sum += m(ir,ic); -} - const double mean = sum/m.shape[0]; - for( std::size_t ir=0; ir!=m.shape[0]; ++ir ) { - m_new(ir,ic) = m(ir,ic) - mean; -} - } - return m_new; - } - - std::vector, RI::Tensor>>> cal_PCA( - const UnitCell &ucell, - const LCAO_Orbitals& orb, - const std::vector>> &lcaos, - const std::vector>> &abfs, - const double kmesh_times ) - { - ModuleBase::TITLE("ABFs_Construct::PCA::cal_PCA"); - - const ModuleBase::Element_Basis_Index::Range - range_lcaos = Exx_Abfs::Abfs_Index::construct_range( lcaos ); - const ModuleBase::Element_Basis_Index::IndexLNM - index_lcaos = ModuleBase::Element_Basis_Index::construct_index( range_lcaos ); - - const ModuleBase::Element_Basis_Index::Range - range_abfs = Exx_Abfs::Abfs_Index::construct_range( abfs ); - const ModuleBase::Element_Basis_Index::IndexLNM - index_abfs = ModuleBase::Element_Basis_Index::construct_index( range_abfs ); - - const int Lmax_bak = GlobalC::exx_info.info_ri.abfs_Lmax; - GlobalC::exx_info.info_ri.abfs_Lmax = std::numeric_limits::min(); - for( std::size_t T=0; T!=abfs.size(); ++T ) { - GlobalC::exx_info.info_ri.abfs_Lmax = std::max( GlobalC::exx_info.info_ri.abfs_Lmax, static_cast(abfs[T].size())-1 ); +void tensor_dsyev(const char jobz, const char uplo, RI::Tensor& a, double* const w, int& info) +{ + // reference: dsyev in lapack_connector.h (for ModuleBase::matrix) + assert(a.shape.size() == 2); + assert(a.shape[0] == a.shape[1]); + const int nr = a.shape[0]; + const int nc = a.shape[1]; + + double work_tmp = 0.0; + constexpr int minus_one = -1; + dsyev_(&jobz, &uplo, &nr, a.ptr(), &nc, w, &work_tmp, &minus_one, &info); // get best lwork + + const int lwork = work_tmp; + std::vector work(std::max(1, lwork)); + dsyev_(&jobz, &uplo, &nr, a.ptr(), &nc, w, work.data(), &lwork, &info); } - Matrix_Orbs21 m_abfslcaos_lcaos; - m_abfslcaos_lcaos.init( 1, ucell , orb, kmesh_times, 1 ); - m_abfslcaos_lcaos.init_radial( abfs, lcaos, lcaos ); +RI::Tensor get_sub_matrix(const RI::Tensor& m, // size: (lcaos, lcaos, abfs) + const std::size_t& T, + const std::size_t& L, + const ModuleBase::Element_Basis_Index::Range& range, + const ModuleBase::Element_Basis_Index::IndexLNM& index) +{ + ModuleBase::TITLE("ABFs_Construct::PCA::get_sub_matrix"); + assert(m.shape.size() == 3); + RI::Tensor m_sub({m.shape[0], m.shape[1], range[T][L].N}); + for (std::size_t ir = 0; ir != m.shape[0]; ++ir) + { + for (std::size_t jr = 0; jr != m.shape[1]; ++jr) + { + for (std::size_t N = 0; N != range[T][L].N; ++N) + { + m_sub(ir, jr, N) = m(ir, jr, index[T][L][N][0]); + } + } + } + m_sub = m_sub.reshape({m.shape[0] * m.shape[1], range[T][L].N}); + return m_sub; +} - std::map>> delta_R; - for( std::size_t it=0; it!=abfs.size(); ++it ) { - delta_R[it][it] = {0.0}; +RI::Tensor get_column_mean0_matrix(const RI::Tensor& m) +{ + ModuleBase::TITLE("ABFs_Construct::PCA::get_column_mean0_matrix"); + RI::Tensor m_new(m.shape); + for (std::size_t ic = 0; ic != m.shape[1]; ++ic) + { + double sum = 0; + for (std::size_t ir = 0; ir != m.shape[0]; ++ir) + { + sum += m(ir, ic); + } + const double mean = sum / m.shape[0]; + for (std::size_t ir = 0; ir != m.shape[0]; ++ir) + { + m_new(ir, ic) = m(ir, ic) - mean; + } + } + return m_new; } - m_abfslcaos_lcaos.init_radial_table(delta_R); - - GlobalC::exx_info.info_ri.abfs_Lmax = Lmax_bak; - - std::vector,RI::Tensor>>> eig(abfs.size()); - for( std::size_t T=0; T!=abfs.size(); ++T ) - { - const RI::Tensor A = m_abfslcaos_lcaos.cal_overlap_matrix( - T, - T, - ModuleBase::Vector3{0,0,0}, - ModuleBase::Vector3{0,0,0}, - index_abfs, - index_lcaos, - index_lcaos, - Matrix_Orbs21::Matrix_Order::A2BA1); - - eig[T].resize(abfs[T].size()); - for( std::size_t L=0; L!=abfs[T].size(); ++L ) - { - const RI::Tensor A_sub = get_sub_matrix( A, T, L, range_abfs, index_abfs ); - RI::Tensor mm = A_sub.transpose() * A_sub; - std::vector eig_value(mm.shape[0]); - - int info=1; - - tensor_dsyev('V', 'L', mm, eig_value.data(), info); - - if( info ) - { - std::cout << std::endl << "info_dsyev = " << info << std::endl; - auto tensor_print = [](RI::Tensor& m, std::ostream& os, const double threshold) - { - for (int ir = 0; ir != m.shape[0]; ++ir) - { - for (int ic = 0; ic != m.shape[1]; ++ic) - { - if (std::abs(m(ir, ic)) > threshold) { - os << m(ir, ic) << "\t"; - } else { - os << 0 << "\t"; + +std::vector, RI::Tensor>>> cal_PCA( + const UnitCell& ucell, + const LCAO_Orbitals& orb, + const std::vector>>& lcaos, + const std::vector>>& abfs, + const double kmesh_times) +{ + ModuleBase::TITLE("ABFs_Construct::PCA::cal_PCA"); + + const ModuleBase::Element_Basis_Index::Range range_lcaos = Exx_Abfs::Abfs_Index::construct_range(lcaos); + const ModuleBase::Element_Basis_Index::IndexLNM index_lcaos + = ModuleBase::Element_Basis_Index::construct_index(range_lcaos); + + const ModuleBase::Element_Basis_Index::Range range_abfs = Exx_Abfs::Abfs_Index::construct_range(abfs); + const ModuleBase::Element_Basis_Index::IndexLNM index_abfs + = ModuleBase::Element_Basis_Index::construct_index(range_abfs); + + const int Lmax_bak = GlobalC::exx_info.info_ri.abfs_Lmax; + GlobalC::exx_info.info_ri.abfs_Lmax = std::numeric_limits::min(); + for (std::size_t T = 0; T != abfs.size(); ++T) + { + GlobalC::exx_info.info_ri.abfs_Lmax + = std::max(GlobalC::exx_info.info_ri.abfs_Lmax, static_cast(abfs[T].size()) - 1); + } + + Matrix_Orbs21 m_abfslcaos_lcaos; + m_abfslcaos_lcaos.init(1, ucell, orb, kmesh_times, 1); + m_abfslcaos_lcaos.init_radial(abfs, lcaos, lcaos); + + std::map>> delta_R; + for (std::size_t it = 0; it != abfs.size(); ++it) + { + delta_R[it][it] = {0.0}; + } + m_abfslcaos_lcaos.init_radial_table(delta_R); + + GlobalC::exx_info.info_ri.abfs_Lmax = Lmax_bak; + + std::vector, RI::Tensor>>> eig(abfs.size()); + for (std::size_t T = 0; T != abfs.size(); ++T) + { + const RI::Tensor A = m_abfslcaos_lcaos.cal_overlap_matrix(T, + T, + ModuleBase::Vector3{0, 0, 0}, + ModuleBase::Vector3{0, 0, 0}, + index_abfs, + index_lcaos, + index_lcaos, + Matrix_Orbs21::Matrix_Order::A2BA1); + + eig[T].resize(abfs[T].size()); + for (std::size_t L = 0; L != abfs[T].size(); ++L) + { + const RI::Tensor A_sub = get_sub_matrix(A, T, L, range_abfs, index_abfs); + RI::Tensor mm = A_sub.transpose() * A_sub; + std::vector eig_value(mm.shape[0]); + + int info = 1; + + tensor_dsyev('V', 'L', mm, eig_value.data(), info); + + if (info) + { + std::cout << std::endl << "info_dsyev = " << info << std::endl; + auto tensor_print = [](RI::Tensor& m, std::ostream& os, const double threshold) { + for (int ir = 0; ir != m.shape[0]; ++ir) + { + for (int ic = 0; ic != m.shape[1]; ++ic) + { + if (std::abs(m(ir, ic)) > threshold) + { + os << m(ir, ic) << "\t"; + } + else + { + os << 0 << "\t"; + } + } + os << std::endl; + } + os << std::endl; + }; + tensor_print(mm, GlobalV::ofs_warning, 0.0); + std::cout << "in file " << __FILE__ << " line " << __LINE__ << std::endl; + ModuleBase::QUIT(); + } + eig[T][L] = std::make_pair(eig_value, mm); + } + } + + return eig; } - } - os << std::endl; - } - os << std::endl; - }; - tensor_print(mm, GlobalV::ofs_warning, 0.0); - std::cout<<"in file "<<__FILE__<<" line "<<__LINE__< +#include "module_exx_symmetry/symmetry_rotation.h" +#include "module_hamilt_general/module_xc/exx_info.h" +#include "source_base/matrix.h" -#include +#include #include -#include #include +#include #include +#include -#include "module_exx_symmetry/symmetry_rotation.h" - - class Parallel_Orbitals; +class Parallel_Orbitals; - template - class RPA_LRI; +template +class RPA_LRI; - template - class Exx_LRI_Interface; +template +class Exx_LRI_Interface; - namespace LR - { - template - class ESolver_LR; +namespace LR +{ +template +class ESolver_LR; - template - class OperatorLREXX; - } +template +class OperatorLREXX; +} // namespace LR -template +template class Exx_LRI { -private: - using TA = int; - using Tcell = int; - static constexpr std::size_t Ndim = 3; - using TC = std::array; - using TAC = std::pair; - using TatomR = std::array; // tmp - -public: - Exx_LRI(const Exx_Info::Exx_Info_RI& info_in) :info(info_in) {} - Exx_LRI operator=(const Exx_LRI&) = delete; - Exx_LRI operator=(Exx_LRI&&); - - void init( - const MPI_Comm &mpi_comm_in, - const UnitCell &ucell, - const K_Vectors &kv_in, - const LCAO_Orbitals& orb); - void cal_exx_ions(const UnitCell& ucell, const bool write_cv = false); - void cal_exx_elec( - const std::vector>>>& Ds, - const UnitCell& ucell, - const Parallel_Orbitals& pv, - const ModuleSymmetry::Symmetry_rotation* p_symrot = nullptr); - void cal_exx_force(const int& nat); - void cal_exx_stress(const double& omega, const double& lat0); - - void reset_Cs(const std::map>>& Cs_in) { this->exx_lri.set_Cs(Cs_in, this->info.C_threshold); } - void reset_Vs(const std::map>>& Vs_in) { this->exx_lri.set_Vs(Vs_in, this->info.V_threshold); } - //std::vector> get_abfs_nchis() const; - - std::vector< std::map>>> Hexxs; - double Eexx; - ModuleBase::matrix force_exx; - ModuleBase::matrix stress_exx; - - -private: - const Exx_Info::Exx_Info_RI &info; - MPI_Comm mpi_comm; - const K_Vectors *p_kv = nullptr; - std::vector orb_cutoff_; - - std::vector>> lcaos; - std::vector>> abfs; - std::vector>> abfs_ccp; - - LRI_CV cv; - RI::Exx exx_lri; - - void post_process_Hexx( std::map>> &Hexxs_io ) const; - double post_process_Eexx(const double& Eexx_in) const; - - friend class RPA_LRI; - friend class RPA_LRI, Tdata>; - friend class Exx_LRI_Interface; - friend class Exx_LRI_Interface, Tdata>; - friend class LR::ESolver_LR; - friend class LR::ESolver_LR, double>; - friend class LR::OperatorLREXX; - friend class LR::OperatorLREXX>; + private: + using TA = int; + using Tcell = int; + static constexpr std::size_t Ndim = 3; + using TC = std::array; + using TAC = std::pair; + using TatomR = std::array; // tmp + + public: + Exx_LRI(const Exx_Info::Exx_Info_RI& info_in) : info(info_in) + { + } + Exx_LRI operator=(const Exx_LRI&) = delete; + Exx_LRI operator=(Exx_LRI&&); + + void init(const MPI_Comm& mpi_comm_in, const UnitCell& ucell, const K_Vectors& kv_in, const LCAO_Orbitals& orb); + void cal_exx_ions(const UnitCell& ucell, const bool write_cv = false); + void cal_exx_elec(const std::vector>>>& Ds, + const UnitCell& ucell, + const Parallel_Orbitals& pv, + const ModuleSymmetry::Symmetry_rotation* p_symrot = nullptr); + void cal_exx_force(const int& nat); + void cal_exx_stress(const double& omega, const double& lat0); + + void reset_Cs(const std::map>>& Cs_in) + { + this->exx_lri.set_Cs(Cs_in, this->info.C_threshold); + } + void reset_Vs(const std::map>>& Vs_in) + { + this->exx_lri.set_Vs(Vs_in, this->info.V_threshold); + } + // std::vector> get_abfs_nchis() const; + + std::vector>>> Hexxs; + double Eexx; + ModuleBase::matrix force_exx; + ModuleBase::matrix stress_exx; + + private: + const Exx_Info::Exx_Info_RI& info; + MPI_Comm mpi_comm; + const K_Vectors* p_kv = nullptr; + std::vector orb_cutoff_; + + std::vector>> lcaos; + std::vector>> abfs; + std::vector>> abfs_ccp; + + LRI_CV cv; + RI::Exx exx_lri; + + void post_process_Hexx(std::map>>& Hexxs_io) const; + double post_process_Eexx(const double& Eexx_in) const; + + friend class RPA_LRI; + friend class RPA_LRI, Tdata>; + friend class Exx_LRI_Interface; + friend class Exx_LRI_Interface, Tdata>; + friend class LR::ESolver_LR; + friend class LR::ESolver_LR, double>; + friend class LR::OperatorLREXX; + friend class LR::OperatorLREXX>; }; #include "Exx_LRI.hpp" diff --git a/source/module_ri/Exx_LRI.hpp b/source/module_ri/Exx_LRI.hpp index 46663f0d75..434c652179 100644 --- a/source/module_ri/Exx_LRI.hpp +++ b/source/module_ri/Exx_LRI.hpp @@ -10,293 +10,325 @@ #include "Exx_LRI.h" #include "RI_2D_Comm.h" #include "RI_Util.h" +#include "module_basis/module_ao/parallel_orbitals.h" +#include "module_ri/Mix_DMk_2D.h" +#include "module_ri/conv_coulomb_pot_k.h" #include "module_ri/exx_abfs-construct_orbs.h" #include "module_ri/exx_abfs-io.h" -#include "module_ri/conv_coulomb_pot_k.h" -#include "module_base/tool_title.h" -#include "module_base/timer.h" #include "module_ri/serialization_cereal.h" -#include "module_ri/Mix_DMk_2D.h" -#include "module_basis/module_ao/parallel_orbitals.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" #include #include - #include #include -template -void Exx_LRI::init(const MPI_Comm &mpi_comm_in, - const UnitCell &ucell, - const K_Vectors &kv_in, - const LCAO_Orbitals& orb) +template +void Exx_LRI::init(const MPI_Comm& mpi_comm_in, + const UnitCell& ucell, + const K_Vectors& kv_in, + const LCAO_Orbitals& orb) { - ModuleBase::TITLE("Exx_LRI","init"); - ModuleBase::timer::tick("Exx_LRI", "init"); - - this->mpi_comm = mpi_comm_in; - this->p_kv = &kv_in; - this->orb_cutoff_ = orb.cutoffs(); - - this->lcaos = Exx_Abfs::Construct_Orbs::change_orbs( orb, this->info.kmesh_times ); - - const std::vector>> - abfs_same_atom = Exx_Abfs::Construct_Orbs::abfs_same_atom(ucell, orb, this->lcaos, this->info.kmesh_times, this->info.pca_threshold ); - if(this->info.files_abfs.empty()) - { this->abfs = abfs_same_atom;} - else - { this->abfs = Exx_Abfs::IO::construct_abfs( abfs_same_atom, orb, this->info.files_abfs, this->info.kmesh_times ); } - Exx_Abfs::Construct_Orbs::print_orbs_size(ucell, this->abfs, GlobalV::ofs_running); - - const std::unordered_map>> - coulomb_param_updated = RI_Util::update_coulomb_param(this->info.coulomb_param, ucell.omega, this->p_kv->get_nkstot_full()); - this->abfs_ccp = Conv_Coulomb_Pot_K::cal_orbs_ccp(this->abfs, coulomb_param_updated, this->info.ccp_rmesh_times); - - for( size_t T=0; T!=this->abfs.size(); ++T ) - { GlobalC::exx_info.info_ri.abfs_Lmax = std::max( GlobalC::exx_info.info_ri.abfs_Lmax, static_cast(this->abfs[T].size())-1 ); } - - this->cv.set_orbitals( - ucell, - orb, - this->lcaos, this->abfs, this->abfs_ccp, - this->info.kmesh_times, this->info.ccp_rmesh_times ); - - ModuleBase::timer::tick("Exx_LRI", "init"); + ModuleBase::TITLE("Exx_LRI", "init"); + ModuleBase::timer::tick("Exx_LRI", "init"); + + this->mpi_comm = mpi_comm_in; + this->p_kv = &kv_in; + this->orb_cutoff_ = orb.cutoffs(); + + this->lcaos = Exx_Abfs::Construct_Orbs::change_orbs(orb, this->info.kmesh_times); + + const std::vector>> abfs_same_atom + = Exx_Abfs::Construct_Orbs::abfs_same_atom(ucell, + orb, + this->lcaos, + this->info.kmesh_times, + this->info.pca_threshold); + if (this->info.files_abfs.empty()) + { + this->abfs = abfs_same_atom; + } + else + { + this->abfs = Exx_Abfs::IO::construct_abfs(abfs_same_atom, orb, this->info.files_abfs, this->info.kmesh_times); + } + Exx_Abfs::Construct_Orbs::print_orbs_size(ucell, this->abfs, GlobalV::ofs_running); + + const std::unordered_map>> + coulomb_param_updated + = RI_Util::update_coulomb_param(this->info.coulomb_param, ucell.omega, this->p_kv->get_nkstot_full()); + this->abfs_ccp = Conv_Coulomb_Pot_K::cal_orbs_ccp(this->abfs, coulomb_param_updated, this->info.ccp_rmesh_times); + + for (size_t T = 0; T != this->abfs.size(); ++T) + { + GlobalC::exx_info.info_ri.abfs_Lmax + = std::max(GlobalC::exx_info.info_ri.abfs_Lmax, static_cast(this->abfs[T].size()) - 1); + } + + this->cv.set_orbitals(ucell, + orb, + this->lcaos, + this->abfs, + this->abfs_ccp, + this->info.kmesh_times, + this->info.ccp_rmesh_times); + + ModuleBase::timer::tick("Exx_LRI", "init"); } -template -void Exx_LRI::cal_exx_ions(const UnitCell& ucell, - const bool write_cv) +template +void Exx_LRI::cal_exx_ions(const UnitCell& ucell, const bool write_cv) { - ModuleBase::TITLE("Exx_LRI","cal_exx_ions"); - ModuleBase::timer::tick("Exx_LRI", "cal_exx_ions"); - - // init_radial_table_ions( cal_atom_centres_core(atom_pairs_core_origin), atom_pairs_core_origin ); - - // this->m_abfsabfs.init_radial_table(Rradial); - // this->m_abfslcaos_lcaos.init_radial_table(Rradial); - - std::vector atoms(ucell.nat); - for(int iat=0; iat atoms_pos; - for(int iat=0; iat latvec - = {RI_Util::Vector3_to_array3(ucell.a1), - RI_Util::Vector3_to_array3(ucell.a2), - RI_Util::Vector3_to_array3(ucell.a3)}; - const std::array period = {this->p_kv->nmp[0], this->p_kv->nmp[1], this->p_kv->nmp[2]}; - - this->exx_lri.set_parallel(this->mpi_comm, atoms_pos, latvec, period); - - // std::max(3) for gamma_only, list_A2 should contain cell {-1,0,1}. In the future distribute will be neighbour. - const std::array period_Vs = LRI_CV_Tools::cal_latvec_range(1+this->info.ccp_rmesh_times, ucell, orb_cutoff_); - const std::pair, std::vector>>>> - list_As_Vs = RI::Distribute_Equally::distribute_atoms_periods(this->mpi_comm, atoms, period_Vs, 2, false); - - std::map>> - Vs = this->cv.cal_Vs(ucell, - list_As_Vs.first, list_As_Vs.second[0], - {{"writable_Vws",true}}); - this->cv.Vws = LRI_CV_Tools::get_CVws(ucell,Vs); - if (write_cv && GlobalV::MY_RANK == 0) - { LRI_CV_Tools::write_Vs_abf(Vs, PARAM.globalv.global_out_dir + "Vs"); } - this->exx_lri.set_Vs(std::move(Vs), this->info.V_threshold); - - if(PARAM.inp.cal_force || PARAM.inp.cal_stress) - { - std::array>>,3> - dVs = this->cv.cal_dVs(ucell, - list_As_Vs.first, list_As_Vs.second[0], - {{"writable_dVws",true}}); - this->cv.dVws = LRI_CV_Tools::get_dCVws(ucell,dVs); - this->exx_lri.set_dVs(std::move(dVs), this->info.V_grad_threshold); - if(PARAM.inp.cal_stress) - { - std::array>>,3>,3> dVRs = LRI_CV_Tools::cal_dMRs(ucell,dVs); - this->exx_lri.set_dVRs(std::move(dVRs), this->info.V_grad_R_threshold); - } - } - - const std::array period_Cs = LRI_CV_Tools::cal_latvec_range(2, ucell,orb_cutoff_); - const std::pair, std::vector>>>> - list_As_Cs = RI::Distribute_Equally::distribute_atoms_periods(this->mpi_comm, atoms, period_Cs, 2, false); - - std::pair>>, std::array>>,3>> - Cs_dCs = this->cv.cal_Cs_dCs( - ucell, - list_As_Cs.first, list_As_Cs.second[0], - {{"cal_dC",PARAM.inp.cal_force||PARAM.inp.cal_stress}, - {"writable_Cws",true}, {"writable_dCws",true}, {"writable_Vws",false}, {"writable_dVws",false}}); - std::map>> &Cs = std::get<0>(Cs_dCs); - this->cv.Cws = LRI_CV_Tools::get_CVws(ucell,Cs); - if (write_cv && GlobalV::MY_RANK == 0) - { LRI_CV_Tools::write_Cs_ao(Cs, PARAM.globalv.global_out_dir + "Cs"); } - this->exx_lri.set_Cs(std::move(Cs), this->info.C_threshold); - - if(PARAM.inp.cal_force || PARAM.inp.cal_stress) - { - std::array>>,3> &dCs = std::get<1>(Cs_dCs); - this->cv.dCws = LRI_CV_Tools::get_dCVws(ucell,dCs); - this->exx_lri.set_dCs(std::move(dCs), this->info.C_grad_threshold); - if(PARAM.inp.cal_stress) - { - std::array>>,3>,3> dCRs = LRI_CV_Tools::cal_dMRs(ucell,dCs); - this->exx_lri.set_dCRs(std::move(dCRs), this->info.C_grad_R_threshold); - } - } - ModuleBase::timer::tick("Exx_LRI", "cal_exx_ions"); + ModuleBase::TITLE("Exx_LRI", "cal_exx_ions"); + ModuleBase::timer::tick("Exx_LRI", "cal_exx_ions"); + + // init_radial_table_ions( cal_atom_centres_core(atom_pairs_core_origin), atom_pairs_core_origin ); + + // this->m_abfsabfs.init_radial_table(Rradial); + // this->m_abfslcaos_lcaos.init_radial_table(Rradial); + + std::vector atoms(ucell.nat); + for (int iat = 0; iat < ucell.nat; ++iat) + { + atoms[iat] = iat; + } + std::map atoms_pos; + for (int iat = 0; iat < ucell.nat; ++iat) + { + atoms_pos[iat] = RI_Util::Vector3_to_array3(ucell.atoms[ucell.iat2it[iat]].tau[ucell.iat2ia[iat]]); + } + const std::array latvec = {RI_Util::Vector3_to_array3(ucell.a1), + RI_Util::Vector3_to_array3(ucell.a2), + RI_Util::Vector3_to_array3(ucell.a3)}; + const std::array period = {this->p_kv->nmp[0], this->p_kv->nmp[1], this->p_kv->nmp[2]}; + + this->exx_lri.set_parallel(this->mpi_comm, atoms_pos, latvec, period); + + // std::max(3) for gamma_only, list_A2 should contain cell {-1,0,1}. In the future distribute will be neighbour. + const std::array period_Vs + = LRI_CV_Tools::cal_latvec_range(1 + this->info.ccp_rmesh_times, ucell, orb_cutoff_); + const std::pair, std::vector>>>> list_As_Vs + = RI::Distribute_Equally::distribute_atoms_periods(this->mpi_comm, atoms, period_Vs, 2, false); + + std::map>> Vs + = this->cv.cal_Vs(ucell, list_As_Vs.first, list_As_Vs.second[0], {{"writable_Vws", true}}); + this->cv.Vws = LRI_CV_Tools::get_CVws(ucell, Vs); + if (write_cv && GlobalV::MY_RANK == 0) + { + LRI_CV_Tools::write_Vs_abf(Vs, PARAM.globalv.global_out_dir + "Vs"); + } + this->exx_lri.set_Vs(std::move(Vs), this->info.V_threshold); + + if (PARAM.inp.cal_force || PARAM.inp.cal_stress) + { + std::array>>, 3> dVs + = this->cv.cal_dVs(ucell, list_As_Vs.first, list_As_Vs.second[0], {{"writable_dVws", true}}); + this->cv.dVws = LRI_CV_Tools::get_dCVws(ucell, dVs); + this->exx_lri.set_dVs(std::move(dVs), this->info.V_grad_threshold); + if (PARAM.inp.cal_stress) + { + std::array>>, 3>, 3> dVRs + = LRI_CV_Tools::cal_dMRs(ucell, dVs); + this->exx_lri.set_dVRs(std::move(dVRs), this->info.V_grad_R_threshold); + } + } + + const std::array period_Cs = LRI_CV_Tools::cal_latvec_range(2, ucell, orb_cutoff_); + const std::pair, std::vector>>>> list_As_Cs + = RI::Distribute_Equally::distribute_atoms_periods(this->mpi_comm, atoms, period_Cs, 2, false); + + std::pair>>, + std::array>>, 3>> + Cs_dCs = this->cv.cal_Cs_dCs(ucell, + list_As_Cs.first, + list_As_Cs.second[0], + {{"cal_dC", PARAM.inp.cal_force || PARAM.inp.cal_stress}, + {"writable_Cws", true}, + {"writable_dCws", true}, + {"writable_Vws", false}, + {"writable_dVws", false}}); + std::map>>& Cs = std::get<0>(Cs_dCs); + this->cv.Cws = LRI_CV_Tools::get_CVws(ucell, Cs); + if (write_cv && GlobalV::MY_RANK == 0) + { + LRI_CV_Tools::write_Cs_ao(Cs, PARAM.globalv.global_out_dir + "Cs"); + } + this->exx_lri.set_Cs(std::move(Cs), this->info.C_threshold); + + if (PARAM.inp.cal_force || PARAM.inp.cal_stress) + { + std::array>>, 3>& dCs = std::get<1>(Cs_dCs); + this->cv.dCws = LRI_CV_Tools::get_dCVws(ucell, dCs); + this->exx_lri.set_dCs(std::move(dCs), this->info.C_grad_threshold); + if (PARAM.inp.cal_stress) + { + std::array>>, 3>, 3> dCRs + = LRI_CV_Tools::cal_dMRs(ucell, dCs); + this->exx_lri.set_dCRs(std::move(dCRs), this->info.C_grad_R_threshold); + } + } + ModuleBase::timer::tick("Exx_LRI", "cal_exx_ions"); } -template +template void Exx_LRI::cal_exx_elec(const std::vector>>>& Ds, - const UnitCell& ucell, - const Parallel_Orbitals& pv, - const ModuleSymmetry::Symmetry_rotation* p_symrot) + const UnitCell& ucell, + const Parallel_Orbitals& pv, + const ModuleSymmetry::Symmetry_rotation* p_symrot) { - ModuleBase::TITLE("Exx_LRI","cal_exx_elec"); - ModuleBase::timer::tick("Exx_LRI", "cal_exx_elec"); - - const std::vector, std::set>> judge = RI_2D_Comm::get_2D_judge(ucell,pv); - - if(p_symrot) - { this->exx_lri.set_symmetry(true, p_symrot->get_irreducible_sector()); } - else - { this->exx_lri.set_symmetry(false, {}); } - - this->Hexxs.resize(PARAM.inp.nspin); - this->Eexx = 0; - for(int is=0; isexx_lri.set_Ds(Ds[is], this->info.dm_threshold, suffix); - this->exx_lri.cal_Hs({ "","",suffix }); - - if (!p_symrot) - { - this->Hexxs[is] = RI::Communicate_Tensors_Map_Judge::comm_map2_first( - this->mpi_comm, std::move(this->exx_lri.Hs), std::get<0>(judge[is]), std::get<1>(judge[is])); - } - else - { - // reduce but not repeat - auto Hs_a2D = this->exx_lri.post_2D.set_tensors_map2(this->exx_lri.Hs); - // rotate locally without repeat - Hs_a2D = p_symrot->restore_HR(ucell.symm, ucell.atoms, ucell.st, 'H', Hs_a2D); - // cal energy using full Hs without repeat - this->exx_lri.energy = this->exx_lri.post_2D.cal_energy( - this->exx_lri.post_2D.saves["Ds_" + suffix], - this->exx_lri.post_2D.set_tensors_map2(Hs_a2D)); - // get repeated full Hs for abacus - this->Hexxs[is] = RI::Communicate_Tensors_Map_Judge::comm_map2_first( - this->mpi_comm, std::move(Hs_a2D), std::get<0>(judge[is]), std::get<1>(judge[is])); - } - this->Eexx += std::real(this->exx_lri.energy); - post_process_Hexx(this->Hexxs[is]); - } - this->Eexx = post_process_Eexx(this->Eexx); - this->exx_lri.set_symmetry(false, {}); - ModuleBase::timer::tick("Exx_LRI", "cal_exx_elec"); + ModuleBase::TITLE("Exx_LRI", "cal_exx_elec"); + ModuleBase::timer::tick("Exx_LRI", "cal_exx_elec"); + + const std::vector, std::set>> judge = RI_2D_Comm::get_2D_judge(ucell, pv); + + if (p_symrot) + { + this->exx_lri.set_symmetry(true, p_symrot->get_irreducible_sector()); + } + else + { + this->exx_lri.set_symmetry(false, {}); + } + + this->Hexxs.resize(PARAM.inp.nspin); + this->Eexx = 0; + for (int is = 0; is < PARAM.inp.nspin; ++is) + { + const std::string suffix = ((PARAM.inp.cal_force || PARAM.inp.cal_stress) ? std::to_string(is) : ""); + + this->exx_lri.set_Ds(Ds[is], this->info.dm_threshold, suffix); + this->exx_lri.cal_Hs({"", "", suffix}); + + if (!p_symrot) + { + this->Hexxs[is] = RI::Communicate_Tensors_Map_Judge::comm_map2_first(this->mpi_comm, + std::move(this->exx_lri.Hs), + std::get<0>(judge[is]), + std::get<1>(judge[is])); + } + else + { + // reduce but not repeat + auto Hs_a2D = this->exx_lri.post_2D.set_tensors_map2(this->exx_lri.Hs); + // rotate locally without repeat + Hs_a2D = p_symrot->restore_HR(ucell.symm, ucell.atoms, ucell.st, 'H', Hs_a2D); + // cal energy using full Hs without repeat + this->exx_lri.energy = this->exx_lri.post_2D.cal_energy(this->exx_lri.post_2D.saves["Ds_" + suffix], + this->exx_lri.post_2D.set_tensors_map2(Hs_a2D)); + // get repeated full Hs for abacus + this->Hexxs[is] = RI::Communicate_Tensors_Map_Judge::comm_map2_first(this->mpi_comm, + std::move(Hs_a2D), + std::get<0>(judge[is]), + std::get<1>(judge[is])); + } + this->Eexx += std::real(this->exx_lri.energy); + post_process_Hexx(this->Hexxs[is]); + } + this->Eexx = post_process_Eexx(this->Eexx); + this->exx_lri.set_symmetry(false, {}); + ModuleBase::timer::tick("Exx_LRI", "cal_exx_elec"); } -template -void Exx_LRI::post_process_Hexx( std::map>> &Hexxs_io ) const +template +void Exx_LRI::post_process_Hexx(std::map>>& Hexxs_io) const { - ModuleBase::TITLE("Exx_LRI","post_process_Hexx"); - constexpr Tdata frac = -1 * 2; // why? Hartree to Ry? - const std::function&)> - multiply_frac = [&frac](RI::Tensor &t) - { t = t*frac; }; - RI::Map_Operator::for_each( Hexxs_io, multiply_frac ); + ModuleBase::TITLE("Exx_LRI", "post_process_Hexx"); + constexpr Tdata frac = -1 * 2; // why? Hartree to Ry? + const std::function&)> multiply_frac = [&frac](RI::Tensor& t) { t = t * frac; }; + RI::Map_Operator::for_each(Hexxs_io, multiply_frac); } -template +template double Exx_LRI::post_process_Eexx(const double& Eexx_in) const { - ModuleBase::TITLE("Exx_LRI","post_process_Eexx"); - const double SPIN_multiple = std::map{ {1,2}, {2,1}, {4,1} }.at(PARAM.inp.nspin); // why? - const double frac = -SPIN_multiple; - return frac * Eexx_in; + ModuleBase::TITLE("Exx_LRI", "post_process_Eexx"); + const double SPIN_multiple = std::map{{1, 2}, {2, 1}, {4, 1}}.at(PARAM.inp.nspin); // why? + const double frac = -SPIN_multiple; + return frac * Eexx_in; } /* post_process_old { - // D - const std::map SPIN_multiple = {{1,0.5}, {2,1}, {4,1}}; // ??? - DR *= SPIN_multiple.at(NSPIN); + // D + const std::map SPIN_multiple = {{1,0.5}, {2,1}, {4,1}}; // ??? + DR *= SPIN_multiple.at(NSPIN); - // H - HR *= -2; + // H + HR *= -2; - // E - const std::map SPIN_multiple = {{1,2}, {2,1}, {4,1}}; // ??? - energy *= SPIN_multiple.at(PARAM.inp.nspin); // ? - energy /= 2; // /2 for Ry + // E + const std::map SPIN_multiple = {{1,2}, {2,1}, {4,1}}; // ??? + energy *= SPIN_multiple.at(PARAM.inp.nspin); // ? + energy /= 2; // /2 for Ry } */ -template +template void Exx_LRI::cal_exx_force(const int& nat) { - ModuleBase::TITLE("Exx_LRI","cal_exx_force"); - ModuleBase::timer::tick("Exx_LRI", "cal_exx_force"); - - this->force_exx.create(nat, Ndim); - for(int is=0; isexx_lri.cal_force({"","",std::to_string(is),"",""}); - for(std::size_t idim=0; idimexx_lri.force[idim]) { - this->force_exx(force_item.first, idim) += std::real(force_item.second); - } } - } - - const double SPIN_multiple = std::map{{1,2}, {2,1}, {4,1}}.at(PARAM.inp.nspin); // why? - const double frac = -2 * SPIN_multiple; // why? - this->force_exx *= frac; - ModuleBase::timer::tick("Exx_LRI", "cal_exx_force"); + ModuleBase::TITLE("Exx_LRI", "cal_exx_force"); + ModuleBase::timer::tick("Exx_LRI", "cal_exx_force"); + + this->force_exx.create(nat, Ndim); + for (int is = 0; is < PARAM.inp.nspin; ++is) + { + this->exx_lri.cal_force({"", "", std::to_string(is), "", ""}); + for (std::size_t idim = 0; idim < Ndim; ++idim) + { + for (const auto& force_item: this->exx_lri.force[idim]) + { + this->force_exx(force_item.first, idim) += std::real(force_item.second); + } + } + } + + const double SPIN_multiple = std::map{{1, 2}, {2, 1}, {4, 1}}.at(PARAM.inp.nspin); // why? + const double frac = -2 * SPIN_multiple; // why? + this->force_exx *= frac; + ModuleBase::timer::tick("Exx_LRI", "cal_exx_force"); } - -template +template void Exx_LRI::cal_exx_stress(const double& omega, const double& lat0) { - ModuleBase::TITLE("Exx_LRI","cal_exx_stress"); - ModuleBase::timer::tick("Exx_LRI", "cal_exx_stress"); - - this->stress_exx.create(Ndim, Ndim); - for(int is=0; isexx_lri.cal_stress({"","",std::to_string(is),"",""}); - for(std::size_t idim0=0; idim0stress_exx(idim0,idim1) += std::real(this->exx_lri.stress(idim0,idim1)); - } } - } - - const double SPIN_multiple = std::map{{1,2}, {2,1}, {4,1}}.at(PARAM.inp.nspin); // why? - const double frac = 2 * SPIN_multiple / omega * lat0; // why? - this->stress_exx *= frac; - - ModuleBase::timer::tick("Exx_LRI", "cal_exx_stress"); + ModuleBase::TITLE("Exx_LRI", "cal_exx_stress"); + ModuleBase::timer::tick("Exx_LRI", "cal_exx_stress"); + + this->stress_exx.create(Ndim, Ndim); + for (int is = 0; is < PARAM.inp.nspin; ++is) + { + this->exx_lri.cal_stress({"", "", std::to_string(is), "", ""}); + for (std::size_t idim0 = 0; idim0 < Ndim; ++idim0) + { + for (std::size_t idim1 = 0; idim1 < Ndim; ++idim1) + { + this->stress_exx(idim0, idim1) += std::real(this->exx_lri.stress(idim0, idim1)); + } + } + } + + const double SPIN_multiple = std::map{{1, 2}, {2, 1}, {4, 1}}.at(PARAM.inp.nspin); // why? + const double frac = 2 * SPIN_multiple / omega * lat0; // why? + this->stress_exx *= frac; + + ModuleBase::timer::tick("Exx_LRI", "cal_exx_stress"); } /* template std::vector> Exx_LRI::get_abfs_nchis() const { - std::vector> abfs_nchis; - for (const auto& abfs_T : this->abfs) - { - std::vector abfs_nchi_T; - for (const auto& abfs_L : abfs_T) - { abfs_nchi_T.push_back(abfs_L.size()); } - abfs_nchis.push_back(abfs_nchi_T); - } - return abfs_nchis; + std::vector> abfs_nchis; + for (const auto& abfs_T : this->abfs) + { + std::vector abfs_nchi_T; + for (const auto& abfs_L : abfs_T) + { abfs_nchi_T.push_back(abfs_L.size()); } + abfs_nchis.push_back(abfs_nchi_T); + } + return abfs_nchis; } */ diff --git a/source/module_ri/Exx_LRI_interface.hpp b/source/module_ri/Exx_LRI_interface.hpp index a7ea139e2b..8ec5aa30cc 100644 --- a/source/module_ri/Exx_LRI_interface.hpp +++ b/source/module_ri/Exx_LRI_interface.hpp @@ -1,22 +1,20 @@ #ifndef EXX_LRI_INTERFACE_HPP #define EXX_LRI_INTERFACE_HPP -#include "module_parameter/parameter.h" - #include "Exx_LRI_interface.h" -#include "module_ri/exx_abfs-jle.h" -#include "module_ri/exx_opt_orb.h" +#include "module_elecstate/elecstate_lcao.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" #include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_exx_lcao.h" -#include "module_base/parallel_common.h" -#include "module_base/formatter.h" - #include "module_io/csr_reader.h" #include "module_io/write_HS_sparse.h" -#include "module_elecstate/elecstate_lcao.h" +#include "module_parameter/parameter.h" +#include "module_ri/exx_abfs-jle.h" +#include "module_ri/exx_opt_orb.h" +#include "source_base/formatter.h" +#include "source_base/parallel_common.h" -#include #include #include +#include /* template @@ -45,40 +43,43 @@ void Exx_LRI_Interface::read_Hexxs_cereal(const std::string& file_name } */ -template -void Exx_LRI_Interface::init(const MPI_Comm &mpi_comm, - const UnitCell &ucell, - const K_Vectors &kv, +template +void Exx_LRI_Interface::init(const MPI_Comm& mpi_comm, + const UnitCell& ucell, + const K_Vectors& kv, const LCAO_Orbitals& orb) { - ModuleBase::TITLE("Exx_LRI_Interface","init"); + ModuleBase::TITLE("Exx_LRI_Interface", "init"); this->exx_ptr->init(mpi_comm, ucell, kv, orb); this->flag_finish.init = true; } -template +template void Exx_LRI_Interface::cal_exx_ions(const UnitCell& ucell, const bool write_cv) { - ModuleBase::TITLE("Exx_LRI_Interface","cal_exx_ions"); - if(!this->flag_finish.init) - { throw std::runtime_error("Exx init unfinished when "+std::string(__FILE__)+" line "+std::to_string(__LINE__)); } + ModuleBase::TITLE("Exx_LRI_Interface", "cal_exx_ions"); + if (!this->flag_finish.init) + { + throw std::runtime_error("Exx init unfinished when " + std::string(__FILE__) + " line " + + std::to_string(__LINE__)); + } this->exx_ptr->cal_exx_ions(ucell, write_cv); this->flag_finish.ions = true; } -template +template void Exx_LRI_Interface::cal_exx_elec(const std::vector>>>& Ds, const UnitCell& ucell, const Parallel_Orbitals& pv, const ModuleSymmetry::Symmetry_rotation* p_symrot) { - ModuleBase::TITLE("Exx_LRI_Interface","cal_exx_elec"); - if(!this->flag_finish.init || !this->flag_finish.ions) - { - throw std::runtime_error("Exx init unfinished when " - +std::string(__FILE__)+" line "+std::to_string(__LINE__)); + ModuleBase::TITLE("Exx_LRI_Interface", "cal_exx_elec"); + if (!this->flag_finish.init || !this->flag_finish.ions) + { + throw std::runtime_error("Exx init unfinished when " + std::string(__FILE__) + " line " + + std::to_string(__LINE__)); } this->exx_ptr->cal_exx_elec(Ds, ucell, pv, p_symrot); @@ -86,18 +87,19 @@ void Exx_LRI_Interface::cal_exx_elec(const std::vectorflag_finish.elec = true; } -template +template void Exx_LRI_Interface::cal_exx_force(const int& nat) { - ModuleBase::TITLE("Exx_LRI_Interface","cal_exx_force"); - if(!this->flag_finish.init || !this->flag_finish.ions) - { - throw std::runtime_error("Exx init unfinished when "+std::string(__FILE__)+" line "+std::to_string(__LINE__)); + ModuleBase::TITLE("Exx_LRI_Interface", "cal_exx_force"); + if (!this->flag_finish.init || !this->flag_finish.ions) + { + throw std::runtime_error("Exx init unfinished when " + std::string(__FILE__) + " line " + + std::to_string(__LINE__)); } - if(!this->flag_finish.elec) - { - throw std::runtime_error("Exx Hamiltonian unfinished when "+std::string(__FILE__) - +" line "+std::to_string(__LINE__)); + if (!this->flag_finish.elec) + { + throw std::runtime_error("Exx Hamiltonian unfinished when " + std::string(__FILE__) + " line " + + std::to_string(__LINE__)); } this->exx_ptr->cal_exx_force(nat); @@ -105,19 +107,19 @@ void Exx_LRI_Interface::cal_exx_force(const int& nat) this->flag_finish.force = true; } -template +template void Exx_LRI_Interface::cal_exx_stress(const double& omega, const double& lat0) { - ModuleBase::TITLE("Exx_LRI_Interface","cal_exx_stress"); - if(!this->flag_finish.init || !this->flag_finish.ions) - { - throw std::runtime_error("Exx init unfinished when " - +std::string(__FILE__)+" line "+std::to_string(__LINE__)); + ModuleBase::TITLE("Exx_LRI_Interface", "cal_exx_stress"); + if (!this->flag_finish.init || !this->flag_finish.ions) + { + throw std::runtime_error("Exx init unfinished when " + std::string(__FILE__) + " line " + + std::to_string(__LINE__)); } - if(!this->flag_finish.elec) - { - throw std::runtime_error("Exx Hamiltonian unfinished when " - +std::string(__FILE__)+" line "+std::to_string(__LINE__)); + if (!this->flag_finish.elec) + { + throw std::runtime_error("Exx Hamiltonian unfinished when " + std::string(__FILE__) + " line " + + std::to_string(__LINE__)); } this->exx_ptr->cal_exx_stress(omega, lat0); @@ -125,46 +127,48 @@ void Exx_LRI_Interface::cal_exx_stress(const double& omega, const doub this->flag_finish.stress = true; } -template -void Exx_LRI_Interface::exx_before_all_runners( - const K_Vectors& kv, - const UnitCell& ucell, - const Parallel_2D& pv) +template +void Exx_LRI_Interface::exx_before_all_runners(const K_Vectors& kv, + const UnitCell& ucell, + const Parallel_2D& pv) { - ModuleBase::TITLE("Exx_LRI_Interface","exx_before_all_runners"); + ModuleBase::TITLE("Exx_LRI_Interface", "exx_before_all_runners"); // initialize the rotation matrix in AO representation this->exx_spacegroup_symmetry = (PARAM.inp.nspin < 4 && ModuleSymmetry::Symmetry::symm_flag == 1); if (this->exx_spacegroup_symmetry) { const std::array& period = RI_Util::get_Born_vonKarmen_period(kv); - this->symrot_.find_irreducible_sector( - ucell.symm, ucell.atoms, ucell.st, - RI_Util::get_Born_von_Karmen_cells(period), period, ucell.lat); + this->symrot_.find_irreducible_sector(ucell.symm, + ucell.atoms, + ucell.st, + RI_Util::get_Born_von_Karmen_cells(period), + period, + ucell.lat); // this->symrot_.set_Cs_rotation(this->exx_ptr->get_abfs_nchis()); this->symrot_.cal_Ms(kv, ucell, pv); } } -template +template void Exx_LRI_Interface::exx_beforescf(const int istep, const K_Vectors& kv, const Charge_Mixing& chgmix, const UnitCell& ucell, const LCAO_Orbitals& orb) { - ModuleBase::TITLE("Exx_LRI_Interface","exx_beforescf"); + ModuleBase::TITLE("Exx_LRI_Interface", "exx_beforescf"); #ifdef __MPI if (GlobalC::exx_info.info_global.cal_exx) { - if ((GlobalC::restart.info_load.load_H_finish && !GlobalC::restart.info_load.restart_exx) - || (istep > 0) + if ((GlobalC::restart.info_load.load_H_finish && !GlobalC::restart.info_load.restart_exx) || (istep > 0) || (PARAM.inp.init_wfc == "file")) { XC_Functional::set_xc_type(ucell.atoms[0].ncpp.xc_func); } else { - if (ucell.atoms[0].ncpp.xc_func == "HF" || ucell.atoms[0].ncpp.xc_func == "PBE0" || ucell.atoms[0].ncpp.xc_func == "HSE") + if (ucell.atoms[0].ncpp.xc_func == "HF" || ucell.atoms[0].ncpp.xc_func == "PBE0" + || ucell.atoms[0].ncpp.xc_func == "HSE") { XC_Functional::set_xc_type("pbe"); } @@ -173,105 +177,121 @@ void Exx_LRI_Interface::exx_beforescf(const int istep, XC_Functional::set_xc_type("scan"); } // added by jghan, 2024-07-07 - else if ( ucell.atoms[0].ncpp.xc_func == "MULLER" || ucell.atoms[0].ncpp.xc_func == "POWER" - || ucell.atoms[0].ncpp.xc_func == "WP22" || ucell.atoms[0].ncpp.xc_func == "CWP22" ) + else if (ucell.atoms[0].ncpp.xc_func == "MULLER" || ucell.atoms[0].ncpp.xc_func == "POWER" + || ucell.atoms[0].ncpp.xc_func == "WP22" || ucell.atoms[0].ncpp.xc_func == "CWP22") { XC_Functional::set_xc_type("pbe"); } } - this->cal_exx_ions(ucell,PARAM.inp.out_ri_cv); + this->cal_exx_ions(ucell, PARAM.inp.out_ri_cv); } if (Exx_Abfs::Jle::generate_matrix) { - //program should be stopped after this judgement + // program should be stopped after this judgement Exx_Opt_Orb exx_opt_orb; - exx_opt_orb.generate_matrix(kv, ucell,orb); + exx_opt_orb.generate_matrix(kv, ucell, orb); ModuleBase::timer::tick("ESolver_KS_LCAO", "beforescf"); return; } // set initial parameter for mix_DMk_2D - if(GlobalC::exx_info.info_global.cal_exx) + if (GlobalC::exx_info.info_global.cal_exx) { if (this->exx_spacegroup_symmetry) - {this->mix_DMk_2D.set_nks(kv.get_nkstot_full() * (PARAM.inp.nspin == 2 ? 2 : 1), PARAM.globalv.gamma_only_local);} + { + this->mix_DMk_2D.set_nks(kv.get_nkstot_full() * (PARAM.inp.nspin == 2 ? 2 : 1), + PARAM.globalv.gamma_only_local); + } else - {this->mix_DMk_2D.set_nks(kv.get_nks(), PARAM.globalv.gamma_only_local);} + { + this->mix_DMk_2D.set_nks(kv.get_nks(), PARAM.globalv.gamma_only_local); + } - if(GlobalC::exx_info.info_global.separate_loop) - { this->mix_DMk_2D.set_mixing(nullptr); } + if (GlobalC::exx_info.info_global.separate_loop) + { + this->mix_DMk_2D.set_mixing(nullptr); + } else - { this->mix_DMk_2D.set_mixing(chgmix.get_mixing()); } + { + this->mix_DMk_2D.set_mixing(chgmix.get_mixing()); + } // for exx two_level scf this->two_level_step = 0; } #endif // __MPI } -template +template void Exx_LRI_Interface::exx_eachiterinit(const int istep, const UnitCell& ucell, const elecstate::DensityMatrix& dm, const K_Vectors& kv, const int& iter) { - ModuleBase::TITLE("Exx_LRI_Interface","exx_eachiterinit"); + ModuleBase::TITLE("Exx_LRI_Interface", "exx_eachiterinit"); if (GlobalC::exx_info.info_global.cal_exx) { - if (!GlobalC::exx_info.info_global.separate_loop - && (this->two_level_step - || istep > 0 - || PARAM.inp.init_wfc == "file") // non separate loop case - || (GlobalC::exx_info.info_global.separate_loop - && PARAM.inp.init_wfc == "file" - && this->two_level_step == 0 - && iter == 1) - ) // the first iter in separate loop case + if (!GlobalC::exx_info.info_global.separate_loop + && (this->two_level_step || istep > 0 || PARAM.inp.init_wfc == "file") // non separate loop case + || (GlobalC::exx_info.info_global.separate_loop && PARAM.inp.init_wfc == "file" && this->two_level_step == 0 + && iter == 1)) // the first iter in separate loop case { const bool flag_restart = (iter == 1) ? true : false; - auto cal = [this, &ucell,&kv, &flag_restart](const elecstate::DensityMatrix& dm_in) - { + auto cal = [this, &ucell, &kv, &flag_restart](const elecstate::DensityMatrix& dm_in) { if (this->exx_spacegroup_symmetry) - { this->mix_DMk_2D.mix(symrot_.restore_dm(kv,dm_in.get_DMK_vector(), *dm_in.get_paraV_pointer()), flag_restart); } + { + this->mix_DMk_2D.mix(symrot_.restore_dm(kv, dm_in.get_DMK_vector(), *dm_in.get_paraV_pointer()), + flag_restart); + } else - { this->mix_DMk_2D.mix(dm_in.get_DMK_vector(), flag_restart); } - const std::vector>>> - Ds = PARAM.globalv.gamma_only_local - ? RI_2D_Comm::split_m2D_ktoR( - ucell, - *this->exx_ptr->p_kv, - this->mix_DMk_2D.get_DMk_gamma_out(), - *dm_in.get_paraV_pointer(), - PARAM.inp.nspin) - : RI_2D_Comm::split_m2D_ktoR( - ucell, - *this->exx_ptr->p_kv, - this->mix_DMk_2D.get_DMk_k_out(), - *dm_in.get_paraV_pointer(), - PARAM.inp.nspin, - this->exx_spacegroup_symmetry); + { + this->mix_DMk_2D.mix(dm_in.get_DMK_vector(), flag_restart); + } + const std::vector>>> Ds + = PARAM.globalv.gamma_only_local + ? RI_2D_Comm::split_m2D_ktoR(ucell, + *this->exx_ptr->p_kv, + this->mix_DMk_2D.get_DMk_gamma_out(), + *dm_in.get_paraV_pointer(), + PARAM.inp.nspin) + : RI_2D_Comm::split_m2D_ktoR(ucell, + *this->exx_ptr->p_kv, + this->mix_DMk_2D.get_DMk_k_out(), + *dm_in.get_paraV_pointer(), + PARAM.inp.nspin, + this->exx_spacegroup_symmetry); if (this->exx_spacegroup_symmetry && GlobalC::exx_info.info_global.exx_symmetry_realspace) - { this->cal_exx_elec(Ds, ucell,*dm_in.get_paraV_pointer(), &this->symrot_); } + { + this->cal_exx_elec(Ds, ucell, *dm_in.get_paraV_pointer(), &this->symrot_); + } else - { this->cal_exx_elec(Ds, ucell,*dm_in.get_paraV_pointer()); } + { + this->cal_exx_elec(Ds, ucell, *dm_in.get_paraV_pointer()); + } }; - if(istep > 0 && flag_restart) - { cal(*dm_last_step); } + if (istep > 0 && flag_restart) + { + cal(*dm_last_step); + } else - { cal(dm); } + { + cal(dm); + } } } } -template -void Exx_LRI_Interface::exx_hamilt2rho(elecstate::ElecState& elec, const Parallel_Orbitals& pv, const int iter) +template +void Exx_LRI_Interface::exx_hamilt2rho(elecstate::ElecState& elec, + const Parallel_Orbitals& pv, + const int iter) { - ModuleBase::TITLE("Exx_LRI_Interface","exx_hamilt2density"); + ModuleBase::TITLE("Exx_LRI_Interface", "exx_hamilt2density"); // Peize Lin add 2020.04.04 if (XC_Functional::get_func_type() == 4 || XC_Functional::get_func_type() == 5) { @@ -283,9 +303,15 @@ void Exx_LRI_Interface::exx_hamilt2rho(elecstate::ElecState& elec, con if (GlobalV::MY_RANK == 0) { try - { GlobalC::restart.load_disk("Eexx", 0, 1, &this->exx_ptr->Eexx); } + { + GlobalC::restart.load_disk("Eexx", 0, 1, &this->exx_ptr->Eexx); + } catch (const std::exception& e) - { std::cout << "WARNING: Cannot read Eexx from disk, the energy of the 1st loop will be wrong, sbut it does not influence the subsequent loops." << std::endl; } + { + std::cout << "WARNING: Cannot read Eexx from disk, the energy of the 1st loop will be wrong, sbut " + "it does not influence the subsequent loops." + << std::endl; + } } Parallel_Common::bcast_double(this->exx_ptr->Eexx); this->exx_ptr->Eexx /= GlobalC::exx_info.info_global.hybrid_alpha; @@ -298,7 +324,7 @@ void Exx_LRI_Interface::exx_hamilt2rho(elecstate::ElecState& elec, con } } -template +template void Exx_LRI_Interface::exx_iter_finish(const K_Vectors& kv, const UnitCell& ucell, hamilt::Hamilt& hamilt, @@ -309,7 +335,7 @@ void Exx_LRI_Interface::exx_iter_finish(const K_Vectors& kv, const int istep, bool& conv_esolver) { - ModuleBase::TITLE("Exx_LRI_Interface","exx_iter_finish"); + ModuleBase::TITLE("Exx_LRI_Interface", "exx_iter_finish"); if (GlobalC::restart.info_save.save_H && (this->two_level_step > 0 || istep > 0) && (!GlobalC::exx_info.info_global.separate_loop || iter == 1)) // to avoid saving the same value repeatedly { @@ -351,35 +377,33 @@ void Exx_LRI_Interface::exx_iter_finish(const K_Vectors& kv, chgmix.close_kerker_gg0(); } this->dm_last_step = dynamic_cast*>(&elec)->get_DM(); - conv_esolver = this->exx_after_converge( - ucell, - hamilt, - *dynamic_cast*>(&elec)->get_DM(), - kv, - PARAM.inp.nspin, - iter, - istep, - elec.f_en.etot, - scf_ene_thr); + conv_esolver = this->exx_after_converge(ucell, + hamilt, + *dynamic_cast*>(&elec)->get_DM(), + kv, + PARAM.inp.nspin, + iter, + istep, + elec.f_en.etot, + scf_ene_thr); } - //else if ( PARAM.inp.rdmft && two_level_step ) { conv_esolver = true; } // for RDMFT in the future to quit after the first iter of the exx-loop + // else if ( PARAM.inp.rdmft && two_level_step ) { conv_esolver = true; } // for RDMFT in the future to quit + // after the first iter of the exx-loop } -template -bool Exx_LRI_Interface::exx_after_converge( - const UnitCell& ucell, - hamilt::Hamilt& hamilt, - const elecstate::DensityMatrix& dm, - const K_Vectors& kv, - const int& nspin, - int& iter, - const int& istep, - const double& etot, - const double& scf_ene_thr) -{ // only called if (GlobalC::exx_info.info_global.cal_exx) - ModuleBase::TITLE("Exx_LRI_Interface","exx_after_converge"); - auto restart_reset = [this]() - { // avoid calling restart related procedure in the subsequent ion steps +template +bool Exx_LRI_Interface::exx_after_converge(const UnitCell& ucell, + hamilt::Hamilt& hamilt, + const elecstate::DensityMatrix& dm, + const K_Vectors& kv, + const int& nspin, + int& iter, + const int& istep, + const double& etot, + const double& scf_ene_thr) +{ // only called if (GlobalC::exx_info.info_global.cal_exx) + ModuleBase::TITLE("Exx_LRI_Interface", "exx_after_converge"); + auto restart_reset = [this]() { // avoid calling restart related procedure in the subsequent ion steps GlobalC::restart.info_load.restart_exx = true; this->exx_ptr->Eexx = 0; }; @@ -412,11 +436,13 @@ bool Exx_LRI_Interface::exx_after_converge( { // has separate_loop case const double ediff = std::abs(etot - etot_last_outer_loop) * ModuleBase::Ry_to_eV; if (two_level_step) - { std::cout << FmtCore::format(" deltaE (eV) from outer loop: %.8e \n", ediff); } + { + std::cout << FmtCore::format(" deltaE (eV) from outer loop: %.8e \n", ediff); + } // exx converged or get max exx steps if (this->two_level_step == GlobalC::exx_info.info_global.hybrid_step - || (iter == 1 && this->two_level_step != 0) // density convergence of outer loop - || (ediff < scf_ene_thr && this->two_level_step != 0)) //energy convergence of outer loop + || (iter == 1 && this->two_level_step != 0) // density convergence of outer loop + || (ediff < scf_ene_thr && this->two_level_step != 0)) // energy convergence of outer loop { restart_reset(); return true; @@ -426,40 +452,61 @@ bool Exx_LRI_Interface::exx_after_converge( this->etot_last_outer_loop = etot; // update exx and redo scf if (this->two_level_step == 0) - { XC_Functional::set_xc_type(ucell.atoms[0].ncpp.xc_func); } + { + XC_Functional::set_xc_type(ucell.atoms[0].ncpp.xc_func); + } std::cout << " Updating EXX " << std::flush; - timeval t_start; gettimeofday(&t_start, nullptr); + timeval t_start; + gettimeofday(&t_start, nullptr); // if init_wfc == "file", DM is calculated in the 1st iter of the 1st two-level step, so we mix it here const bool flag_restart = (this->two_level_step == 0 && PARAM.inp.init_wfc != "file") ? true : false; if (this->exx_spacegroup_symmetry) - {this->mix_DMk_2D.mix(symrot_.restore_dm(kv, dm.get_DMK_vector(), *dm.get_paraV_pointer()), flag_restart);} + { + this->mix_DMk_2D.mix(symrot_.restore_dm(kv, dm.get_DMK_vector(), *dm.get_paraV_pointer()), + flag_restart); + } else - {this->mix_DMk_2D.mix(dm.get_DMK_vector(), flag_restart);} + { + this->mix_DMk_2D.mix(dm.get_DMK_vector(), flag_restart); + } // GlobalC::exx_lcao.cal_exx_elec(p_esolver->LOC, p_esolver->LOWF.wfc_k_grid); - const std::vector>, RI::Tensor>>> - Ds = std::is_same::value //gamma_only_local - ? RI_2D_Comm::split_m2D_ktoR(ucell,*this->exx_ptr->p_kv, this->mix_DMk_2D.get_DMk_gamma_out(), *dm.get_paraV_pointer(), nspin) - : RI_2D_Comm::split_m2D_ktoR(ucell,*this->exx_ptr->p_kv, this->mix_DMk_2D.get_DMk_k_out(), *dm.get_paraV_pointer(), nspin, this->exx_spacegroup_symmetry); + const std::vector>, RI::Tensor>>> Ds + = std::is_same::value // gamma_only_local + ? RI_2D_Comm::split_m2D_ktoR(ucell, + *this->exx_ptr->p_kv, + this->mix_DMk_2D.get_DMk_gamma_out(), + *dm.get_paraV_pointer(), + nspin) + : RI_2D_Comm::split_m2D_ktoR(ucell, + *this->exx_ptr->p_kv, + this->mix_DMk_2D.get_DMk_k_out(), + *dm.get_paraV_pointer(), + nspin, + this->exx_spacegroup_symmetry); if (this->exx_spacegroup_symmetry && GlobalC::exx_info.info_global.exx_symmetry_realspace) - { this->cal_exx_elec(Ds, ucell, *dm.get_paraV_pointer(), &this->symrot_); } + { + this->cal_exx_elec(Ds, ucell, *dm.get_paraV_pointer(), &this->symrot_); + } else - { this->cal_exx_elec(Ds, ucell, *dm.get_paraV_pointer()); } // restore DM but not Hexx + { + this->cal_exx_elec(Ds, ucell, *dm.get_paraV_pointer()); + } // restore DM but not Hexx iter = 0; this->two_level_step++; - timeval t_end; gettimeofday(&t_end, nullptr); - std::cout << "and rerun SCF\t" - << std::setprecision(3) << std::setiosflags(std::ios::scientific) - << (double)(t_end.tv_sec-t_start.tv_sec) + (double)(t_end.tv_usec-t_start.tv_usec)/1000000.0 - << std::defaultfloat << " (s)" << std::endl; + timeval t_end; + gettimeofday(&t_end, nullptr); + std::cout << "and rerun SCF\t" << std::setprecision(3) << std::setiosflags(std::ios::scientific) + << (double)(t_end.tv_sec - t_start.tv_sec) + (double)(t_end.tv_usec - t_start.tv_usec) / 1000000.0 + << std::defaultfloat << " (s)" << std::endl; return false; } - } // if(GlobalC::exx_info.info_global.separate_loop) + } // if(GlobalC::exx_info.info_global.separate_loop) restart_reset(); return true; } diff --git a/source/module_ri/Inverse_Matrix.hpp b/source/module_ri/Inverse_Matrix.hpp index 2778a4a916..a2cefd449c 100644 --- a/source/module_ri/Inverse_Matrix.hpp +++ b/source/module_ri/Inverse_Matrix.hpp @@ -7,153 +7,153 @@ #define INVERSE_MATRIX_HPP #include "Inverse_Matrix.h" -#include "module_base/lapack_connector.h" +#include "source_base/lapack_connector.h" #include -template -void Inverse_Matrix::cal_inverse( const Method &method ) +template +void Inverse_Matrix::cal_inverse(const Method& method) { - switch(method) - { - case Method::potrf: using_potrf(); break; -// case Method::syev: using_syev(1E-6); break; - } + switch (method) + { + case Method::potrf: + using_potrf(); + break; + // case Method::syev: using_syev(1E-6); break; + } } -template +template void Inverse_Matrix::using_potrf() { - int info; - LapackConnector::potrf('U', A.shape[0], A.ptr(), A.shape[0], info); - if(info) - throw std::range_error("info="+std::to_string(info)+"\n"+std::string(__FILE__)+" line "+std::to_string(__LINE__)); - - LapackConnector::potri('U', A.shape[0], A.ptr(), A.shape[0], info); - if(info) - throw std::range_error("info="+std::to_string(info)+"\n"+std::string(__FILE__)+" line "+std::to_string(__LINE__)); - - copy_down_triangle(); + int info; + LapackConnector::potrf('U', A.shape[0], A.ptr(), A.shape[0], info); + if (info) + throw std::range_error("info=" + std::to_string(info) + "\n" + std::string(__FILE__) + " line " + + std::to_string(__LINE__)); + + LapackConnector::potri('U', A.shape[0], A.ptr(), A.shape[0], info); + if (info) + throw std::range_error("info=" + std::to_string(info) + "\n" + std::string(__FILE__) + " line " + + std::to_string(__LINE__)); + + copy_down_triangle(); } /* void Inverse_Matrix::using_syev( const double &threshold_condition_number ) { - std::vector eigen_value(A.nr); - LapackConnector::dsyev('V','U',A,eigen_value.data(),info); - - double eigen_value_max = 0; - for( const double &ie : eigen_value ) - eigen_value_max = std::max( ie, eigen_value_max ); - const double threshold = eigen_value_max * threshold_condition_number; - - ModuleBase::matrix eA( A.nr, A.nc ); - int ie=0; - for( int i=0; i!=A.nr; ++i ) - if( eigen_value[i] > threshold ) - { - BlasConnector::axpy( A.nc, sqrt(1.0/eigen_value[i]), A.c+i*A.nc,1, eA.c+ie*eA.nc,1 ); - ++ie; - } - BlasConnector::gemm( 'T','N', eA.nc,eA.nc,ie, 1, eA.c,eA.nc, eA.c,eA.nc, 0, A.c,A.nc ); + std::vector eigen_value(A.nr); + LapackConnector::dsyev('V','U',A,eigen_value.data(),info); + + double eigen_value_max = 0; + for( const double &ie : eigen_value ) + eigen_value_max = std::max( ie, eigen_value_max ); + const double threshold = eigen_value_max * threshold_condition_number; + + ModuleBase::matrix eA( A.nr, A.nc ); + int ie=0; + for( int i=0; i!=A.nr; ++i ) + if( eigen_value[i] > threshold ) + { + BlasConnector::axpy( A.nc, sqrt(1.0/eigen_value[i]), A.c+i*A.nc,1, eA.c+ie*eA.nc,1 ); + ++ie; + } + BlasConnector::gemm( 'T','N', eA.nc,eA.nc,ie, 1, eA.c,eA.nc, eA.c,eA.nc, 0, A.c,A.nc ); } */ -template -void Inverse_Matrix::input( const RI::Tensor &m ) +template +void Inverse_Matrix::input(const RI::Tensor& m) { - assert(m.shape.size()==2); - assert(m.shape[0]==m.shape[1]); - this->A = m.copy(); + assert(m.shape.size() == 2); + assert(m.shape[0] == m.shape[1]); + this->A = m.copy(); } - -template -void Inverse_Matrix::input(const std::vector>> &ms) +template +void Inverse_Matrix::input(const std::vector>>& ms) { - const size_t N0 = ms.size(); - assert(N0>0); - const size_t N1 = ms[0].size(); - assert(N1>0); - for(size_t Im0=0; Im0 n0(N0); - for(size_t Im0=0; Im0 n1(N1); - for(size_t Im1=0; Im1A = RI::Tensor({n_all, n_all}); - - std::vector n0_partial(N0+1); - std::partial_sum(n0.begin(), n0.end(), n0_partial.begin()+1); - std::vector n1_partial(N1+1); - std::partial_sum(n1.begin(), n1.end(), n1_partial.begin()+1); - - for(size_t Im0=0; Im0 &m_tmp = ms.at(Im0).at(Im1); - for(size_t im0=0; im0A(im0+n0_partial[Im0], im1+n1_partial[Im1]) = m_tmp(im0,im1); - } + const size_t N0 = ms.size(); + assert(N0 > 0); + const size_t N1 = ms[0].size(); + assert(N1 > 0); + for (size_t Im0 = 0; Im0 < N0; ++Im0) + assert(ms[Im0].size() == N1); + + for (size_t Im0 = 0; Im0 < N0; ++Im0) + for (size_t Im1 = 0; Im1 < N1; ++Im1) + assert(ms[Im0][Im1].shape.size() == 2); + + std::vector n0(N0); + for (size_t Im0 = 0; Im0 < N0; ++Im0) + n0[Im0] = ms[Im0][0].shape[0]; + std::vector n1(N1); + for (size_t Im1 = 0; Im1 < N1; ++Im1) + n1[Im1] = ms[0][Im1].shape[1]; + + for (size_t Im0 = 0; Im0 < N0; ++Im0) + for (size_t Im1 = 0; Im1 < N1; ++Im1) + assert((ms[Im0][Im1].shape[0] == n0[Im0]) && (ms[Im0][Im1].shape[1] == n1[Im1])); + + const size_t n_all = std::accumulate(n0.begin(), n0.end(), 0); + assert(n_all == std::accumulate(n1.begin(), n1.end(), 0)); + this->A = RI::Tensor({n_all, n_all}); + + std::vector n0_partial(N0 + 1); + std::partial_sum(n0.begin(), n0.end(), n0_partial.begin() + 1); + std::vector n1_partial(N1 + 1); + std::partial_sum(n1.begin(), n1.end(), n1_partial.begin() + 1); + + for (size_t Im0 = 0; Im0 < N0; ++Im0) + for (size_t Im1 = 0; Im1 < N1; ++Im1) + { + const RI::Tensor& m_tmp = ms.at(Im0).at(Im1); + for (size_t im0 = 0; im0 < m_tmp.shape[0]; ++im0) + for (size_t im1 = 0; im1 < m_tmp.shape[1]; ++im1) + this->A(im0 + n0_partial[Im0], im1 + n1_partial[Im1]) = m_tmp(im0, im1); + } } - -template +template RI::Tensor Inverse_Matrix::output() const { - return this->A.copy(); + return this->A.copy(); } - -template -std::vector>> -Inverse_Matrix::output(const std::vector &n0, const std::vector &n1) const +template +std::vector>> Inverse_Matrix::output(const std::vector& n0, + const std::vector& n1) const { - assert( std::accumulate(n0.begin(), n0.end(), 0) == this->A.shape[0] ); - assert( std::accumulate(n1.begin(), n1.end(), 0) == this->A.shape[1] ); - - const size_t N0 = n0.size(); - const size_t N1 = n1.size(); - - std::vector n0_partial(N0+1); - std::partial_sum(n0.begin(), n0.end(), n0_partial.begin()+1); - std::vector n1_partial(N1+1); - std::partial_sum(n1.begin(), n1.end(), n1_partial.begin()+1); - - std::vector>> ms(N0, std::vector>(N1)); - for(size_t Im0=0; Im0 &m_tmp = ms[Im0][Im1] = RI::Tensor({n0[Im0], n1[Im1]}); - for(size_t im0=0; im0A(im0+n0_partial[Im0], im1+n1_partial[Im1]); - } - return ms; + assert(std::accumulate(n0.begin(), n0.end(), 0) == this->A.shape[0]); + assert(std::accumulate(n1.begin(), n1.end(), 0) == this->A.shape[1]); + + const size_t N0 = n0.size(); + const size_t N1 = n1.size(); + + std::vector n0_partial(N0 + 1); + std::partial_sum(n0.begin(), n0.end(), n0_partial.begin() + 1); + std::vector n1_partial(N1 + 1); + std::partial_sum(n1.begin(), n1.end(), n1_partial.begin() + 1); + + std::vector>> ms(N0, std::vector>(N1)); + for (size_t Im0 = 0; Im0 < N0; ++Im0) + for (size_t Im1 = 0; Im1 < N1; ++Im1) + { + RI::Tensor& m_tmp = ms[Im0][Im1] = RI::Tensor({n0[Im0], n1[Im1]}); + for (size_t im0 = 0; im0 < n0[Im0]; ++im0) + for (size_t im1 = 0; im1 < n1[Im1]; ++im1) + m_tmp(im0, im1) = this->A(im0 + n0_partial[Im0], im1 + n1_partial[Im1]); + } + return ms; } - -template +template void Inverse_Matrix::copy_down_triangle() { - for( size_t i0=0; i0 #include - -#include -#include +#include #include +#include #include +#include -template + +template class LRI_CV { -private: - using TA = int; - using TC = std::array; - using TAC = std::pair; - using Tdata_real = RI::Global_Func::To_Real_t; - -public: - LRI_CV(); - ~LRI_CV(); - - void set_orbitals( - const UnitCell &ucell, - const LCAO_Orbitals& orb, - const std::vector>> &lcaos_in, - const std::vector>> &abfs_in, - const std::vector>> &abfs_ccp_in, - const double &kmesh_times, - const double &ccp_rmesh_times_in); - inline std::map>> - cal_Vs( - const UnitCell &ucell, - const std::vector &list_A0, - const std::vector &list_A1, - const std::map &flags); // "writable_Vws" - inline std::array>>,3> - cal_dVs( - const UnitCell &ucell, - const std::vector &list_A0, - const std::vector &list_A1, - const std::map &flags); // "writable_dVws" - std::pair>>, - std::array>>,3>> - cal_Cs_dCs( - const UnitCell &ucell, - const std::vector &list_A0, - const std::vector &list_A1, - const std::map &flags); // "cal_dC", "writable_Cws", "writable_dCws", "writable_Vws", "writable_dVws" - - size_t get_index_abfs_size(const size_t &iat){return this->index_abfs[iat].count_size; } - -private: + private: + using TA = int; + using TC = std::array; + using TAC = std::pair; + using Tdata_real = RI::Global_Func::To_Real_t; + + public: + LRI_CV(); + ~LRI_CV(); + + void set_orbitals(const UnitCell& ucell, + const LCAO_Orbitals& orb, + const std::vector>>& lcaos_in, + const std::vector>>& abfs_in, + const std::vector>>& abfs_ccp_in, + const double& kmesh_times, + const double& ccp_rmesh_times_in); + inline std::map>> cal_Vs( + const UnitCell& ucell, + const std::vector& list_A0, + const std::vector& list_A1, + const std::map& flags); // "writable_Vws" + inline std::array>>, 3> cal_dVs( + const UnitCell& ucell, + const std::vector& list_A0, + const std::vector& list_A1, + const std::map& flags); // "writable_dVws" + std::pair>>, + std::array>>, 3>> + cal_Cs_dCs(const UnitCell& ucell, + const std::vector& list_A0, + const std::vector& list_A1, + const std::map& + flags); // "cal_dC", "writable_Cws", "writable_dCws", "writable_Vws", "writable_dVws" + + size_t get_index_abfs_size(const size_t& iat) + { + return this->index_abfs[iat].count_size; + } + + private: std::vector orb_cutoff_; - std::vector>> lcaos; - std::vector>> abfs; - std::vector>> abfs_ccp; - ModuleBase::Element_Basis_Index::IndexLNM index_lcaos; - ModuleBase::Element_Basis_Index::IndexLNM index_abfs; - double ccp_rmesh_times; - -public: - std::map,RI::Tensor>>> Vws; - std::map,RI::Tensor>>> Cws; - std::map,std::array,3>>>> dVws; - std::map,std::array,3>>>> dCws; -private: - pthread_rwlock_t rwlock_Vw; - pthread_rwlock_t rwlock_Cw; - pthread_rwlock_t rwlock_dVw; - pthread_rwlock_t rwlock_dCw; - - Matrix_Orbs11 m_abfs_abfs; - Matrix_Orbs21 m_abfslcaos_lcaos; - - template - using T_func_DPcal_data = std::function &R, - const std::map &flags)>; - template - std::map> - cal_datas( - const UnitCell &ucell, - const std::vector &list_A0, - const std::vector &list_A1, - const std::map &flags, - const double &rmesh_times, - const T_func_DPcal_data &func_DPcal_data); - - inline RI::Tensor - DPcal_V( - const int it0, - const int it1, - const Abfs::Vector3_Order &R, - const std::map &flags); // "writable_Vws" - inline std::array,3> - DPcal_dV( - const int it0, - const int it1, - const Abfs::Vector3_Order &R, - const std::map &flags); // "writable_dVws" - std::pair, std::array,3>> - DPcal_C_dC( - const int it0, - const int it1, - const Abfs::Vector3_Order &R, - const std::map &flags); // "cal_dC", "writable_Cws", "writable_dCws", "writable_Vws", "writable_dVws" - - template - To11 DPcal_o11( - const int it0, - const int it1, - const Abfs::Vector3_Order &R, - const bool &flag_writable_o11ws, - pthread_rwlock_t &rwlock_o11, - std::map,To11>>> &o11ws, - const Tfunc &func_cal_o11); + std::vector>> lcaos; + std::vector>> abfs; + std::vector>> abfs_ccp; + ModuleBase::Element_Basis_Index::IndexLNM index_lcaos; + ModuleBase::Element_Basis_Index::IndexLNM index_abfs; + double ccp_rmesh_times; + + public: + std::map, RI::Tensor>>> Vws; + std::map, RI::Tensor>>> Cws; + std::map, std::array, 3>>>> dVws; + std::map, std::array, 3>>>> dCws; + + private: + pthread_rwlock_t rwlock_Vw; + pthread_rwlock_t rwlock_Cw; + pthread_rwlock_t rwlock_dVw; + pthread_rwlock_t rwlock_dCw; + + Matrix_Orbs11 m_abfs_abfs; + Matrix_Orbs21 m_abfslcaos_lcaos; + + template + using T_func_DPcal_data = std::function& R, + const std::map& flags)>; + template + std::map> cal_datas(const UnitCell& ucell, + const std::vector& list_A0, + const std::vector& list_A1, + const std::map& flags, + const double& rmesh_times, + const T_func_DPcal_data& func_DPcal_data); + + inline RI::Tensor DPcal_V(const int it0, + const int it1, + const Abfs::Vector3_Order& R, + const std::map& flags); // "writable_Vws" + inline std::array, 3> DPcal_dV(const int it0, + const int it1, + const Abfs::Vector3_Order& R, + const std::map& flags); // "writable_dVws" + std::pair, std::array, 3>> DPcal_C_dC( + const int it0, + const int it1, + const Abfs::Vector3_Order& R, + const std::map& + flags); // "cal_dC", "writable_Cws", "writable_dCws", "writable_Vws", "writable_dVws" + + template + To11 DPcal_o11(const int it0, + const int it1, + const Abfs::Vector3_Order& R, + const bool& flag_writable_o11ws, + pthread_rwlock_t& rwlock_o11, + std::map, To11>>>& o11ws, + const Tfunc& func_cal_o11); }; #include "LRI_CV.hpp" diff --git a/source/module_ri/LRI_CV.hpp b/source/module_ri/LRI_CV.hpp index 2e4dc71e64..b4a036417b 100644 --- a/source/module_ri/LRI_CV.hpp +++ b/source/module_ri/LRI_CV.hpp @@ -6,420 +6,444 @@ #ifndef LRI_CV_HPP #define LRI_CV_HPP +#include "../module_hamilt_pw/hamilt_pwdft/global.h" +#include "../source_base/timer.h" +#include "../source_base/tool_title.h" #include "LRI_CV.h" #include "LRI_CV_Tools.h" -#include "exx_abfs-abfs_index.h" #include "RI_Util.h" -#include "../module_base/tool_title.h" -#include "../module_base/timer.h" -#include "../module_hamilt_pw/hamilt_pwdft/global.h" +#include "exx_abfs-abfs_index.h" + #include #include -template + +template LRI_CV::LRI_CV() { - pthread_rwlock_init(&rwlock_Vw,NULL); - pthread_rwlock_init(&rwlock_Cw,NULL); - pthread_rwlock_init(&rwlock_dVw,NULL); - pthread_rwlock_init(&rwlock_dCw,NULL); + pthread_rwlock_init(&rwlock_Vw, NULL); + pthread_rwlock_init(&rwlock_Cw, NULL); + pthread_rwlock_init(&rwlock_dVw, NULL); + pthread_rwlock_init(&rwlock_dCw, NULL); } -template +template LRI_CV::~LRI_CV() { - pthread_rwlock_destroy(&rwlock_Vw); - pthread_rwlock_destroy(&rwlock_Cw); - pthread_rwlock_destroy(&rwlock_dVw); - pthread_rwlock_destroy(&rwlock_dCw); + pthread_rwlock_destroy(&rwlock_Vw); + pthread_rwlock_destroy(&rwlock_Cw); + pthread_rwlock_destroy(&rwlock_dVw); + pthread_rwlock_destroy(&rwlock_dCw); } - -template -void LRI_CV::set_orbitals( - const UnitCell &ucell, - const LCAO_Orbitals& orb, - const std::vector>> &lcaos_in, - const std::vector>> &abfs_in, - const std::vector>> &abfs_ccp_in, - const double &kmesh_times, - const double &ccp_rmesh_times_in) +template +void LRI_CV::set_orbitals(const UnitCell& ucell, + const LCAO_Orbitals& orb, + const std::vector>>& lcaos_in, + const std::vector>>& abfs_in, + const std::vector>>& abfs_ccp_in, + const double& kmesh_times, + const double& ccp_rmesh_times_in) { - ModuleBase::TITLE("LRI_CV", "set_orbitals"); - ModuleBase::timer::tick("LRI_CV", "set_orbitals"); + ModuleBase::TITLE("LRI_CV", "set_orbitals"); + ModuleBase::timer::tick("LRI_CV", "set_orbitals"); - this->orb_cutoff_ = orb.cutoffs(); - this->lcaos = lcaos_in; - this->abfs = abfs_in; - this->abfs_ccp = abfs_ccp_in; - this->ccp_rmesh_times = ccp_rmesh_times_in; + this->orb_cutoff_ = orb.cutoffs(); + this->lcaos = lcaos_in; + this->abfs = abfs_in; + this->abfs_ccp = abfs_ccp_in; + this->ccp_rmesh_times = ccp_rmesh_times_in; - const ModuleBase::Element_Basis_Index::Range - range_lcaos = Exx_Abfs::Abfs_Index::construct_range( lcaos ); - this->index_lcaos = ModuleBase::Element_Basis_Index::construct_index( range_lcaos ); + const ModuleBase::Element_Basis_Index::Range range_lcaos = Exx_Abfs::Abfs_Index::construct_range(lcaos); + this->index_lcaos = ModuleBase::Element_Basis_Index::construct_index(range_lcaos); - const ModuleBase::Element_Basis_Index::Range - range_abfs = Exx_Abfs::Abfs_Index::construct_range( abfs ); - this->index_abfs = ModuleBase::Element_Basis_Index::construct_index( range_abfs ); + const ModuleBase::Element_Basis_Index::Range range_abfs = Exx_Abfs::Abfs_Index::construct_range(abfs); + this->index_abfs = ModuleBase::Element_Basis_Index::construct_index(range_abfs); - this->m_abfs_abfs.init( 2, ucell,orb, kmesh_times, (1+this->ccp_rmesh_times)/2.0 ); - this->m_abfs_abfs.init_radial( this->abfs_ccp, this->abfs ); - this->m_abfs_abfs.init_radial_table(); + this->m_abfs_abfs.init(2, ucell, orb, kmesh_times, (1 + this->ccp_rmesh_times) / 2.0); + this->m_abfs_abfs.init_radial(this->abfs_ccp, this->abfs); + this->m_abfs_abfs.init_radial_table(); - this->m_abfslcaos_lcaos.init( 1, ucell , orb, kmesh_times, 1 ); - this->m_abfslcaos_lcaos.init_radial( this->abfs_ccp, this->lcaos, this->lcaos ); - this->m_abfslcaos_lcaos.init_radial_table(); + this->m_abfslcaos_lcaos.init(1, ucell, orb, kmesh_times, 1); + this->m_abfslcaos_lcaos.init_radial(this->abfs_ccp, this->lcaos, this->lcaos); + this->m_abfslcaos_lcaos.init_radial_table(); - ModuleBase::timer::tick("LRI_CV", "set_orbitals"); + ModuleBase::timer::tick("LRI_CV", "set_orbitals"); } - - -template template -auto LRI_CV::cal_datas( - const UnitCell &ucell, - const std::vector &list_A0, - const std::vector &list_A1, - const std::map &flags, - const double &rmesh_times, - const T_func_DPcal_data &func_DPcal_data) --> std::map> +template +template +auto LRI_CV::cal_datas(const UnitCell& ucell, + const std::vector& list_A0, + const std::vector& list_A1, + const std::map& flags, + const double& rmesh_times, + const T_func_DPcal_data& func_DPcal_data) -> std::map> { - ModuleBase::TITLE("LRI_CV","cal_datas"); - ModuleBase::timer::tick("LRI_CV", "cal_datas"); - - std::map> Datas; - #pragma omp parallel - for(size_t i0=0; i0 tau0 = ucell.atoms[it0].tau[ia0]; - const ModuleBase::Vector3 tau1 = ucell.atoms[it1].tau[ia1]; - const double Rcut = std::min( - orb_cutoff_[it0] * rmesh_times + orb_cutoff_[it1], - orb_cutoff_[it1] * rmesh_times + orb_cutoff_[it0]); - const Abfs::Vector3_Order R_delta = -tau0+tau1+(RI_Util::array3_to_Vector3(cell1)*ucell.latvec); - if( R_delta.norm()*ucell.lat0 < Rcut ) - { - const Tresult Data = func_DPcal_data(it0, it1, R_delta, flags); - // if(Data.norm(std::numeric_limits::max()) > threshold) - // { - #pragma omp critical(LRI_CV_cal_datas) - Datas[list_A0[i0]][list_A1[i1]] = Data; - // } - } - } - } - ModuleBase::timer::tick("LRI_CV", "cal_datas"); - return Datas; + ModuleBase::TITLE("LRI_CV", "cal_datas"); + ModuleBase::timer::tick("LRI_CV", "cal_datas"); + + std::map> Datas; +#pragma omp parallel + for (size_t i0 = 0; i0 < list_A0.size(); ++i0) + { +#pragma omp for schedule(dynamic) nowait + for (size_t i1 = 0; i1 < list_A1.size(); ++i1) + { + const TA iat0 = list_A0[i0]; + const TA iat1 = list_A1[i1].first; + const TC& cell1 = list_A1[i1].second; + const int it0 = ucell.iat2it[iat0]; + const int ia0 = ucell.iat2ia[iat0]; + const int it1 = ucell.iat2it[iat1]; + const int ia1 = ucell.iat2ia[iat1]; + const ModuleBase::Vector3 tau0 = ucell.atoms[it0].tau[ia0]; + const ModuleBase::Vector3 tau1 = ucell.atoms[it1].tau[ia1]; + const double Rcut = std::min(orb_cutoff_[it0] * rmesh_times + orb_cutoff_[it1], + orb_cutoff_[it1] * rmesh_times + orb_cutoff_[it0]); + const Abfs::Vector3_Order R_delta + = -tau0 + tau1 + (RI_Util::array3_to_Vector3(cell1) * ucell.latvec); + if (R_delta.norm() * ucell.lat0 < Rcut) + { + const Tresult Data = func_DPcal_data(it0, it1, R_delta, flags); + // if(Data.norm(std::numeric_limits::max()) > threshold) + // { +#pragma omp critical(LRI_CV_cal_datas) + Datas[list_A0[i0]][list_A1[i1]] = Data; + // } + } + } + } + ModuleBase::timer::tick("LRI_CV", "cal_datas"); + return Datas; } - -template -auto LRI_CV::cal_Vs( - const UnitCell &ucell, - const std::vector &list_A0, - const std::vector &list_A1, - const std::map &flags) // + "writable_Vws" --> std::map>> +template +auto LRI_CV::cal_Vs(const UnitCell& ucell, + const std::vector& list_A0, + const std::vector& list_A1, + const std::map& flags) // + "writable_Vws" + -> std::map>> { - ModuleBase::TITLE("LRI_CV","cal_Vs"); - const T_func_DPcal_data> - func_DPcal_V = std::bind( - &LRI_CV::DPcal_V, this, - std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4); - return this->cal_datas(ucell,list_A0, list_A1, flags, this->ccp_rmesh_times, func_DPcal_V); + ModuleBase::TITLE("LRI_CV", "cal_Vs"); + const T_func_DPcal_data> func_DPcal_V = std::bind(&LRI_CV::DPcal_V, + this, + std::placeholders::_1, + std::placeholders::_2, + std::placeholders::_3, + std::placeholders::_4); + return this->cal_datas(ucell, list_A0, list_A1, flags, this->ccp_rmesh_times, func_DPcal_V); } -template -auto LRI_CV::cal_dVs( - const UnitCell &ucell, - const std::vector &list_A0, - const std::vector &list_A1, - const std::map &flags) // + "writable_dVws" --> std::array>>,3> +template +auto LRI_CV::cal_dVs(const UnitCell& ucell, + const std::vector& list_A0, + const std::vector& list_A1, + const std::map& flags) // + "writable_dVws" + -> std::array>>, 3> { - ModuleBase::TITLE("LRI_CV","cal_dVs"); - const T_func_DPcal_data,3>> - func_DPcal_dV = std::bind( - &LRI_CV::DPcal_dV, this, - std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4); - return LRI_CV_Tools::change_order( - this->cal_datas(ucell,list_A0, list_A1, flags, this->ccp_rmesh_times, func_DPcal_dV)); + ModuleBase::TITLE("LRI_CV", "cal_dVs"); + const T_func_DPcal_data, 3>> func_DPcal_dV = std::bind(&LRI_CV::DPcal_dV, + this, + std::placeholders::_1, + std::placeholders::_2, + std::placeholders::_3, + std::placeholders::_4); + return LRI_CV_Tools::change_order( + this->cal_datas(ucell, list_A0, list_A1, flags, this->ccp_rmesh_times, func_DPcal_dV)); } -template -auto LRI_CV::cal_Cs_dCs( - const UnitCell &ucell, - const std::vector &list_A0, - const std::vector &list_A1, - const std::map &flags) // "cal_dC" + "writable_Cws", "writable_dCws", "writable_Vws", "writable_dVws" --> std::pair>>, std::array>>,3>> +template +auto LRI_CV::cal_Cs_dCs(const UnitCell& ucell, + const std::vector& list_A0, + const std::vector& list_A1, + const std::map& + flags) // "cal_dC" + "writable_Cws", "writable_dCws", "writable_Vws", "writable_dVws" + -> std::pair>>, + std::array>>, 3>> { - ModuleBase::TITLE("LRI_CV","cal_Cs_dCs"); - const T_func_DPcal_data, std::array,3>>> - func_DPcal_C_dC = std::bind( - &LRI_CV::DPcal_C_dC, this, - std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4); - std::map, std::array,3>>>> - Cs_dCs_tmp = this->cal_datas(ucell,list_A0, list_A1, flags, std::min(1.0,this->ccp_rmesh_times), func_DPcal_C_dC); - - std::map>> Cs; - std::array>>,3> dCs; - for(auto &Cs_dCs_A : Cs_dCs_tmp) - for(auto &Cs_dCs_B : Cs_dCs_A.second) - { - Cs[Cs_dCs_A.first][Cs_dCs_B.first] = std::move(std::get<0>(Cs_dCs_B.second)); - if(flags.at("cal_dC")) - for(int ix=0; ix<3; ++ix) - dCs[ix][Cs_dCs_A.first][Cs_dCs_B.first] = std::move(std::get<1>(Cs_dCs_B.second)[ix]); - } - return std::make_pair(Cs, dCs); + ModuleBase::TITLE("LRI_CV", "cal_Cs_dCs"); + const T_func_DPcal_data, std::array, 3>>> func_DPcal_C_dC + = std::bind(&LRI_CV::DPcal_C_dC, + this, + std::placeholders::_1, + std::placeholders::_2, + std::placeholders::_3, + std::placeholders::_4); + std::map, std::array, 3>>>> Cs_dCs_tmp + = this->cal_datas(ucell, list_A0, list_A1, flags, std::min(1.0, this->ccp_rmesh_times), func_DPcal_C_dC); + + std::map>> Cs; + std::array>>, 3> dCs; + for (auto& Cs_dCs_A: Cs_dCs_tmp) + for (auto& Cs_dCs_B: Cs_dCs_A.second) + { + Cs[Cs_dCs_A.first][Cs_dCs_B.first] = std::move(std::get<0>(Cs_dCs_B.second)); + if (flags.at("cal_dC")) + for (int ix = 0; ix < 3; ++ix) + dCs[ix][Cs_dCs_A.first][Cs_dCs_B.first] = std::move(std::get<1>(Cs_dCs_B.second)[ix]); + } + return std::make_pair(Cs, dCs); } - -template template -To11 LRI_CV::DPcal_o11( - const int it0, - const int it1, - const Abfs::Vector3_Order &R, - const bool &flag_writable_o11ws, - pthread_rwlock_t &rwlock_o11, - std::map,To11>>> &o11ws, - const Tfunc &func_cal_o11) +template +template +To11 LRI_CV::DPcal_o11(const int it0, + const int it1, + const Abfs::Vector3_Order& R, + const bool& flag_writable_o11ws, + pthread_rwlock_t& rwlock_o11, + std::map, To11>>>& o11ws, + const Tfunc& func_cal_o11) { - const Abfs::Vector3_Order Rm = -R; - pthread_rwlock_rdlock(&rwlock_o11); - const To11 o11_read = RI::Global_Func::find(o11ws, it0, it1, R); - pthread_rwlock_unlock(&rwlock_o11); - - if(LRI_CV_Tools::exist(o11_read)) - { - return o11_read; - } - else - { - pthread_rwlock_rdlock(&rwlock_o11); - const To11 o11_transform_read = RI::Global_Func::find(o11ws, it1, it0, Rm); - pthread_rwlock_unlock(&rwlock_o11); - - if(LRI_CV_Tools::exist(o11_transform_read)) - { - const To11 o11 = LRI_CV_Tools::transform_Rm(o11_transform_read); - if(flag_writable_o11ws) // such write may be deleted for memory saving with transform_Rm() every time - { - pthread_rwlock_wrlock(&rwlock_o11); - o11ws[it0][it1][R] = o11; - pthread_rwlock_unlock(&rwlock_o11); - } - return o11; - } - else - { - const To11 o11 = func_cal_o11( - it0, it1, ModuleBase::Vector3{0,0,0}, R, - this->index_abfs, this->index_abfs, - Matrix_Orbs11::Matrix_Order::AB); - if(flag_writable_o11ws) - { - pthread_rwlock_wrlock(&rwlock_o11); - o11ws[it0][it1][R] = o11; - pthread_rwlock_unlock(&rwlock_o11); - } - return o11; - } // end else (!exist(o11_transform_read)) - } // end else (!exist(o11_read)) + const Abfs::Vector3_Order Rm = -R; + pthread_rwlock_rdlock(&rwlock_o11); + const To11 o11_read = RI::Global_Func::find(o11ws, it0, it1, R); + pthread_rwlock_unlock(&rwlock_o11); + + if (LRI_CV_Tools::exist(o11_read)) + { + return o11_read; + } + else + { + pthread_rwlock_rdlock(&rwlock_o11); + const To11 o11_transform_read = RI::Global_Func::find(o11ws, it1, it0, Rm); + pthread_rwlock_unlock(&rwlock_o11); + + if (LRI_CV_Tools::exist(o11_transform_read)) + { + const To11 o11 = LRI_CV_Tools::transform_Rm(o11_transform_read); + if (flag_writable_o11ws) // such write may be deleted for memory saving with transform_Rm() every time + { + pthread_rwlock_wrlock(&rwlock_o11); + o11ws[it0][it1][R] = o11; + pthread_rwlock_unlock(&rwlock_o11); + } + return o11; + } + else + { + const To11 o11 = func_cal_o11(it0, + it1, + ModuleBase::Vector3{0, 0, 0}, + R, + this->index_abfs, + this->index_abfs, + Matrix_Orbs11::Matrix_Order::AB); + if (flag_writable_o11ws) + { + pthread_rwlock_wrlock(&rwlock_o11); + o11ws[it0][it1][R] = o11; + pthread_rwlock_unlock(&rwlock_o11); + } + return o11; + } // end else (!exist(o11_transform_read)) + } // end else (!exist(o11_read)) } -template -RI::Tensor -LRI_CV::DPcal_V( - const int it0, - const int it1, - const Abfs::Vector3_Order &R, - const std::map &flags) // "writable_Vws" +template +RI::Tensor LRI_CV::DPcal_V(const int it0, + const int it1, + const Abfs::Vector3_Order& R, + const std::map& flags) // "writable_Vws" { - const auto cal_overlap_matrix = std::bind( - &Matrix_Orbs11::cal_overlap_matrix, - &this->m_abfs_abfs, - std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, std::placeholders::_7); - return this->DPcal_o11(it0, it1, R, flags.at("writable_Vws"), this->rwlock_Vw, this->Vws, cal_overlap_matrix); + const auto cal_overlap_matrix = std::bind(&Matrix_Orbs11::cal_overlap_matrix, + &this->m_abfs_abfs, + std::placeholders::_1, + std::placeholders::_2, + std::placeholders::_3, + std::placeholders::_4, + std::placeholders::_5, + std::placeholders::_6, + std::placeholders::_7); + return this->DPcal_o11(it0, it1, R, flags.at("writable_Vws"), this->rwlock_Vw, this->Vws, cal_overlap_matrix); } -template -std::array, 3> -LRI_CV::DPcal_dV( - const int it0, - const int it1, - const Abfs::Vector3_Order &R, - const std::map &flags) // "writable_dVws" +template +std::array, 3> LRI_CV::DPcal_dV(const int it0, + const int it1, + const Abfs::Vector3_Order& R, + const std::map& flags) // "writable_dVws" { - if(ModuleBase::Vector3(0,0,0)==R) - { - assert(it0==it1); - const size_t size = this->index_abfs[it0].count_size; - const std::array, 3> dV = { RI::Tensor({size,size}), RI::Tensor({size,size}), RI::Tensor({size,size}) }; - if(flags.at("writable_dVws")) - { - pthread_rwlock_wrlock(&this->rwlock_dVw); - this->dVws[it0][it1][R] = dV; - pthread_rwlock_unlock(&this->rwlock_dVw); - } - return dV; - } - - const auto cal_grad_overlap_matrix = std::bind( - &Matrix_Orbs11::cal_grad_overlap_matrix, - &this->m_abfs_abfs, - std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, std::placeholders::_7); - return this->DPcal_o11(it0, it1, R, flags.at("writable_dVws"), this->rwlock_dVw, this->dVws, cal_grad_overlap_matrix); + if (ModuleBase::Vector3(0, 0, 0) == R) + { + assert(it0 == it1); + const size_t size = this->index_abfs[it0].count_size; + const std::array, 3> dV + = {RI::Tensor({size, size}), RI::Tensor({size, size}), RI::Tensor({size, size})}; + if (flags.at("writable_dVws")) + { + pthread_rwlock_wrlock(&this->rwlock_dVw); + this->dVws[it0][it1][R] = dV; + pthread_rwlock_unlock(&this->rwlock_dVw); + } + return dV; + } + + const auto cal_grad_overlap_matrix = std::bind(&Matrix_Orbs11::cal_grad_overlap_matrix, + &this->m_abfs_abfs, + std::placeholders::_1, + std::placeholders::_2, + std::placeholders::_3, + std::placeholders::_4, + std::placeholders::_5, + std::placeholders::_6, + std::placeholders::_7); + return this + ->DPcal_o11(it0, it1, R, flags.at("writable_dVws"), this->rwlock_dVw, this->dVws, cal_grad_overlap_matrix); } - -template -std::pair, std::array,3>> -LRI_CV::DPcal_C_dC( - const int it0, - const int it1, - const Abfs::Vector3_Order &R, - const std::map &flags) // "cal_dC", "writable_Cws", "writable_dCws" + "writable_Vws", "writable_dVws" +template +std::pair, std::array, 3>> LRI_CV::DPcal_C_dC( + const int it0, + const int it1, + const Abfs::Vector3_Order& R, + const std::map& + flags) // "cal_dC", "writable_Cws", "writable_dCws" + "writable_Vws", "writable_dVws" { - using namespace LRI_CV_Tools; - - const Abfs::Vector3_Order Rm = -R; - pthread_rwlock_rdlock(&this->rwlock_Cw); - const RI::Tensor C_read = RI::Global_Func::find(this->Cws, it0, it1, R); - pthread_rwlock_unlock(&this->rwlock_Cw); - pthread_rwlock_rdlock(&this->rwlock_dCw); - const std::array,3> dC_read = RI::Global_Func::find(this->dCws, it0, it1, R); - pthread_rwlock_unlock(&this->rwlock_dCw); - const bool flag_finish_dC = (!flags.at("cal_dC")) || LRI_CV_Tools::exist(dC_read); - - if(!C_read.empty() && flag_finish_dC) - { - return std::make_pair(C_read, dC_read); - } - else - { - if( (ModuleBase::Vector3(0,0,0)==R) && (it0==it1) ) - { - const RI::Tensor - A = this->m_abfslcaos_lcaos.template cal_overlap_matrix( - it0, it1, {0,0,0}, {0,0,0}, - this->index_abfs, this->index_lcaos, this->index_lcaos, - Matrix_Orbs21::Matrix_Order::A1A2B); - const RI::Tensor V = this->DPcal_V( it0, it0, {0,0,0}, {{"writable_Vws",true}}); - const RI::Tensor L = LRI_CV_Tools::cal_I(V); - - const RI::Tensor C = RI::Global_Func::convert(0.5) * LRI_CV_Tools::mul1(L,A); // Attention 0.5! - if(flags.at("writable_Cws")) - { - pthread_rwlock_wrlock(&this->rwlock_Cw); - this->Cws[it0][it1][{0,0,0}] = C; - pthread_rwlock_unlock(&this->rwlock_Cw); - } - - if(flag_finish_dC) - { - return std::make_pair(C, dC_read); - } - else - { - const RI::Shape_Vector sizes = {this->index_abfs[it0].count_size, - this->index_lcaos[it0].count_size, - this->index_lcaos[it0].count_size}; - const std::array,3> - dC({RI::Tensor({sizes}), RI::Tensor({sizes}), RI::Tensor({sizes})}); - if(flags.at("writable_dCws")) - { - pthread_rwlock_wrlock(&this->rwlock_dCw); - this->dCws[it0][it1][{0,0,0}] = dC; - pthread_rwlock_unlock(&this->rwlock_dCw); - } - return std::make_pair(C, dC); - } - } // end if( (ModuleBase::Vector3(0,0,0)==R) && (it0==it1) ) - else - { - const std::vector> - A = {this->m_abfslcaos_lcaos.template cal_overlap_matrix( - it0, it1, {0,0,0}, R, - this->index_abfs, this->index_lcaos, this->index_lcaos, - Matrix_Orbs21::Matrix_Order::A1A2B), - this->m_abfslcaos_lcaos.template cal_overlap_matrix( - it1, it0, {0,0,0}, Rm, - this->index_abfs, this->index_lcaos, this->index_lcaos, - Matrix_Orbs21::Matrix_Order::A1BA2)}; - - const std::vector>> - V = {{DPcal_V(it0, it0, {0,0,0}, {{"writable_Vws",true}}), - DPcal_V(it0, it1, R, flags)}, - {DPcal_V(it1, it0, Rm, flags), - DPcal_V(it1, it1, {0,0,0}, {{"writable_Vws",true}})}}; - - const std::vector>> - L = LRI_CV_Tools::cal_I(V); - - const std::vector> C = LRI_CV_Tools::mul2(L,A); - if(flags.at("writable_Cws")) - { - pthread_rwlock_wrlock(&this->rwlock_Cw); - this->Cws[it0][it1][R] = C[0]; - this->Cws[it1][it0][Rm] = LRI_CV_Tools::transpose12(C[1]); - pthread_rwlock_unlock(&this->rwlock_Cw); - } - - if(flag_finish_dC) - { - return std::make_pair(C[0], dC_read); - } - else - { - const std::vector,3>> - dA = {this->m_abfslcaos_lcaos.template cal_grad_overlap_matrix( - it0, it1, {0,0,0}, R, - this->index_abfs, this->index_lcaos, this->index_lcaos, - Matrix_Orbs21::Matrix_Order::A1A2B), - LRI_CV_Tools::negative( - this->m_abfslcaos_lcaos.template cal_grad_overlap_matrix( - it1, it0, {0,0,0}, Rm, - this->index_abfs, this->index_lcaos, this->index_lcaos, - Matrix_Orbs21::Matrix_Order::A1BA2))}; - - const std::array,3> dV_01 = DPcal_dV(it0, it1, R, flags); - const std::array,3> dV_10 = LRI_CV_Tools::negative(DPcal_dV(it1, it0, Rm, flags)); - - std::array>,3> // dC = L*(dA-dV*C) - dC_tmp = LRI_CV_Tools::mul2( - L, - LRI_CV_Tools::change_order( LRI_CV_Tools::minus( - dA, - std::vector,3>>{ - LRI_CV_Tools::mul1(dV_01, C[1]), - LRI_CV_Tools::mul1(dV_10, C[0])}))); - const std::vector,3>> - dC = LRI_CV_Tools::change_order(std::move(dC_tmp)); - if(flags.at("writable_dCws")) - { - pthread_rwlock_wrlock(&this->rwlock_dCw); - this->dCws[it0][it1][R] = dC[0]; - this->dCws[it1][it0][Rm] = LRI_CV_Tools::negative(LRI_CV_Tools::transpose12(dC[1])); - pthread_rwlock_unlock(&this->rwlock_dCw); - } - return std::make_pair(C[0], dC[0]); - } // end else (!flag_finish_dC) - } // end else ( (ModuleBase::Vector3(0,0,0)!=R) || (it0!=it1) ) - } // end else (!(C_read && flag_finish_dC)) + using namespace LRI_CV_Tools; + + const Abfs::Vector3_Order Rm = -R; + pthread_rwlock_rdlock(&this->rwlock_Cw); + const RI::Tensor C_read = RI::Global_Func::find(this->Cws, it0, it1, R); + pthread_rwlock_unlock(&this->rwlock_Cw); + pthread_rwlock_rdlock(&this->rwlock_dCw); + const std::array, 3> dC_read = RI::Global_Func::find(this->dCws, it0, it1, R); + pthread_rwlock_unlock(&this->rwlock_dCw); + const bool flag_finish_dC = (!flags.at("cal_dC")) || LRI_CV_Tools::exist(dC_read); + + if (!C_read.empty() && flag_finish_dC) + { + return std::make_pair(C_read, dC_read); + } + else + { + if ((ModuleBase::Vector3(0, 0, 0) == R) && (it0 == it1)) + { + const RI::Tensor A + = this->m_abfslcaos_lcaos.template cal_overlap_matrix(it0, + it1, + {0, 0, 0}, + {0, 0, 0}, + this->index_abfs, + this->index_lcaos, + this->index_lcaos, + Matrix_Orbs21::Matrix_Order::A1A2B); + const RI::Tensor V = this->DPcal_V(it0, it0, {0, 0, 0}, {{"writable_Vws", true}}); + const RI::Tensor L = LRI_CV_Tools::cal_I(V); + + const RI::Tensor C + = RI::Global_Func::convert(0.5) * LRI_CV_Tools::mul1(L, A); // Attention 0.5! + if (flags.at("writable_Cws")) + { + pthread_rwlock_wrlock(&this->rwlock_Cw); + this->Cws[it0][it1][{0, 0, 0}] = C; + pthread_rwlock_unlock(&this->rwlock_Cw); + } + + if (flag_finish_dC) + { + return std::make_pair(C, dC_read); + } + else + { + const RI::Shape_Vector sizes = {this->index_abfs[it0].count_size, + this->index_lcaos[it0].count_size, + this->index_lcaos[it0].count_size}; + const std::array, 3> dC( + {RI::Tensor({sizes}), RI::Tensor({sizes}), RI::Tensor({sizes})}); + if (flags.at("writable_dCws")) + { + pthread_rwlock_wrlock(&this->rwlock_dCw); + this->dCws[it0][it1][{0, 0, 0}] = dC; + pthread_rwlock_unlock(&this->rwlock_dCw); + } + return std::make_pair(C, dC); + } + } // end if( (ModuleBase::Vector3(0,0,0)==R) && (it0==it1) ) + else + { + const std::vector> A + = {this->m_abfslcaos_lcaos.template cal_overlap_matrix(it0, + it1, + {0, 0, 0}, + R, + this->index_abfs, + this->index_lcaos, + this->index_lcaos, + Matrix_Orbs21::Matrix_Order::A1A2B), + this->m_abfslcaos_lcaos.template cal_overlap_matrix(it1, + it0, + {0, 0, 0}, + Rm, + this->index_abfs, + this->index_lcaos, + this->index_lcaos, + Matrix_Orbs21::Matrix_Order::A1BA2)}; + + const std::vector>> V + = {{DPcal_V(it0, it0, {0, 0, 0}, {{"writable_Vws", true}}), DPcal_V(it0, it1, R, flags)}, + {DPcal_V(it1, it0, Rm, flags), DPcal_V(it1, it1, {0, 0, 0}, {{"writable_Vws", true}})}}; + + const std::vector>> L = LRI_CV_Tools::cal_I(V); + + const std::vector> C = LRI_CV_Tools::mul2(L, A); + if (flags.at("writable_Cws")) + { + pthread_rwlock_wrlock(&this->rwlock_Cw); + this->Cws[it0][it1][R] = C[0]; + this->Cws[it1][it0][Rm] = LRI_CV_Tools::transpose12(C[1]); + pthread_rwlock_unlock(&this->rwlock_Cw); + } + + if (flag_finish_dC) + { + return std::make_pair(C[0], dC_read); + } + else + { + const std::vector, 3>> dA = { + this->m_abfslcaos_lcaos.template cal_grad_overlap_matrix(it0, + it1, + {0, 0, 0}, + R, + this->index_abfs, + this->index_lcaos, + this->index_lcaos, + Matrix_Orbs21::Matrix_Order::A1A2B), + LRI_CV_Tools::negative(this->m_abfslcaos_lcaos.template cal_grad_overlap_matrix( + it1, + it0, + {0, 0, 0}, + Rm, + this->index_abfs, + this->index_lcaos, + this->index_lcaos, + Matrix_Orbs21::Matrix_Order::A1BA2))}; + + const std::array, 3> dV_01 = DPcal_dV(it0, it1, R, flags); + const std::array, 3> dV_10 = LRI_CV_Tools::negative(DPcal_dV(it1, it0, Rm, flags)); + + std::array>, 3> // dC = L*(dA-dV*C) + dC_tmp = LRI_CV_Tools::mul2( + L, + LRI_CV_Tools::change_order(LRI_CV_Tools::minus( + dA, + std::vector, 3>>{LRI_CV_Tools::mul1(dV_01, C[1]), + LRI_CV_Tools::mul1(dV_10, C[0])}))); + const std::vector, 3>> dC = LRI_CV_Tools::change_order(std::move(dC_tmp)); + if (flags.at("writable_dCws")) + { + pthread_rwlock_wrlock(&this->rwlock_dCw); + this->dCws[it0][it1][R] = dC[0]; + this->dCws[it1][it0][Rm] = LRI_CV_Tools::negative(LRI_CV_Tools::transpose12(dC[1])); + pthread_rwlock_unlock(&this->rwlock_dCw); + } + return std::make_pair(C[0], dC[0]); + } // end else (!flag_finish_dC) + } // end else ( (ModuleBase::Vector3(0,0,0)!=R) || (it0!=it1) ) + } // end else (!(C_read && flag_finish_dC)) } - #endif diff --git a/source/module_ri/LRI_CV_Tools.h b/source/module_ri/LRI_CV_Tools.h index c97f502516..a8bd1f6b92 100644 --- a/source/module_ri/LRI_CV_Tools.h +++ b/source/module_ri/LRI_CV_Tools.h @@ -6,114 +6,110 @@ #ifndef LRI_CV_TOOLS_H #define LRI_CV_TOOLS_H -#include "module_base/abfs-vector3_order.h" +#include "module_ri/abfs.h" +#include "source_base/abfs-vector3_order.h" #include - -#include #include -#include +#include #include +#include -#include "module_ri/abfs.h" namespace LRI_CV_Tools { - template extern RI::Tensor cal_I( const RI::Tensor &m ); - template extern std::vector>> cal_I( const std::vector>> &ms ); - - template inline RI::Tensor transform_Rm(const RI::Tensor &V ); - template inline std::array,3> transform_Rm(const std::array,3> &dV); - - //template inline bool exist(const T &V); - - //template - //extern Treturn mul1(const T1 &t1, const T2 &t2); - //template - //extern Treturn mul2(const T1 &mat, const T2 &vec); - - template inline bool exist(const RI::Tensor &V); - template inline bool exist(const std::array &dV); - - template - extern RI::Tensor mul1(const RI::Tensor &t1, const RI::Tensor &t2); - template - extern std::array mul1(const std::array &t1, const T &t2); - - template - extern std::vector> mul2(const std::vector>> &mat, - const std::vector> &vec); - template - extern std::array mul2(const T1 &t1, const std::array &t2); - - //template - //std::array operator-(const std::array &v1, const std::array &v2); - //template - //std::vector operator-(const std::vector &v1, const std::vector &v2); - template - extern std::vector> minus( - const std::vector> &v1, - const std::vector> &v2); - - template - extern std::array negative(const std::array &v_in); - - //template T transpose12(const T &c_in); - template RI::Tensor transpose12(const RI::Tensor &c_in); - template std::array transpose12(const std::array &c_in); - - template - extern std::array,N> - change_order( - std::vector> &&ds_in); - template - std::vector> - change_order( - std::array,N> &&ds_in); - template - extern std::array>,N> - change_order( - std::vector>> &&ds_in); - template - extern std::array>,N> - change_order( - std::map>> && ds_in); - - template - extern std::array cal_latvec_range(const double &rcut_times, - const UnitCell &ucell, - const std::vector& orb_cutoff); - - template - extern std::map,RI::Tensor>>> - get_CVws( - const UnitCell &ucell, - const std::map>,RI::Tensor>> &CVs); - template - extern std::map,std::array,3>>>> - get_dCVws( - const UnitCell &ucell, - const std::array>,RI::Tensor>>,3> &dCVs); - - template - extern std::array,RI::Tensor>>,3>,3> - cal_dMRs( - const UnitCell &ucell, - const std::array,RI::Tensor>>,3> &dMs); - - using TC = std::array; - using TAC = std::pair; - template - using TLRI = std::map>>; - template - TLRI read_Cs_ao(const std::string& file_path, const double& threshold = 1e-10); - template - void write_Cs_ao(const TLRI& Vs, const std::string& file_path); - template - TLRI read_Vs_abf(const std::string& file_path, const double& threshold = 1e-10); - template - void write_Vs_abf(const TLRI& Vs, const std::string& file_path); -} +template +extern RI::Tensor cal_I(const RI::Tensor& m); +template +extern std::vector>> cal_I(const std::vector>>& ms); + +template +inline RI::Tensor transform_Rm(const RI::Tensor& V); +template +inline std::array, 3> transform_Rm(const std::array, 3>& dV); + +// template inline bool exist(const T &V); + +// template +// extern Treturn mul1(const T1 &t1, const T2 &t2); +// template +// extern Treturn mul2(const T1 &mat, const T2 &vec); + +template +inline bool exist(const RI::Tensor& V); +template +inline bool exist(const std::array& dV); + +template +extern RI::Tensor mul1(const RI::Tensor& t1, const RI::Tensor& t2); +template +extern std::array mul1(const std::array& t1, const T& t2); + +template +extern std::vector> mul2(const std::vector>>& mat, + const std::vector>& vec); +template +extern std::array mul2(const T1& t1, const std::array& t2); + +// template +// std::array operator-(const std::array &v1, const std::array &v2); +// template +// std::vector operator-(const std::vector &v1, const std::vector &v2); +template +extern std::vector> minus(const std::vector>& v1, + const std::vector>& v2); + +template +extern std::array negative(const std::array& v_in); + +// template T transpose12(const T &c_in); +template +RI::Tensor transpose12(const RI::Tensor& c_in); +template +std::array transpose12(const std::array& c_in); + +template +extern std::array, N> change_order(std::vector>&& ds_in); +template +std::vector> change_order(std::array, N>&& ds_in); +template +extern std::array>, N> change_order(std::vector>>&& ds_in); +template +extern std::array>, N> change_order( + std::map>>&& ds_in); + +template +extern std::array cal_latvec_range(const double& rcut_times, + const UnitCell& ucell, + const std::vector& orb_cutoff); + +template +extern std::map, RI::Tensor>>> get_CVws( + const UnitCell& ucell, + const std::map>, RI::Tensor>>& CVs); +template +extern std::map, std::array, 3>>>> get_dCVws( + const UnitCell& ucell, + const std::array>, RI::Tensor>>, 3>& dCVs); + +template +extern std::array, RI::Tensor>>, 3>, 3> cal_dMRs( + const UnitCell& ucell, + const std::array, RI::Tensor>>, 3>& dMs); + +using TC = std::array; +using TAC = std::pair; +template +using TLRI = std::map>>; +template +TLRI read_Cs_ao(const std::string& file_path, const double& threshold = 1e-10); +template +void write_Cs_ao(const TLRI& Vs, const std::string& file_path); +template +TLRI read_Vs_abf(const std::string& file_path, const double& threshold = 1e-10); +template +void write_Vs_abf(const TLRI& Vs, const std::string& file_path); +} // namespace LRI_CV_Tools #include "LRI_CV_Tools.hpp" #include "write_ri_cv.hpp" diff --git a/source/module_ri/LRI_CV_Tools.hpp b/source/module_ri/LRI_CV_Tools.hpp index 39087e6641..7fcbdf41b7 100644 --- a/source/module_ri/LRI_CV_Tools.hpp +++ b/source/module_ri/LRI_CV_Tools.hpp @@ -6,359 +6,334 @@ #ifndef LRI_CV_TOOLS_HPP #define LRI_CV_TOOLS_HPP -#include "LRI_CV_Tools.h" -#include "Inverse_Matrix.h" -#include "../module_base/mathzone.h" #include "../module_hamilt_pw/hamilt_pwdft/global.h" +#include "../source_base/mathzone.h" +#include "Inverse_Matrix.h" +#include "LRI_CV_Tools.h" + -template -RI::Tensor -LRI_CV_Tools::cal_I( const RI::Tensor &m ) +template +RI::Tensor LRI_CV_Tools::cal_I(const RI::Tensor& m) { - Inverse_Matrix I; - I.input(m); - I.cal_inverse( Inverse_Matrix::Method::potrf ); - return I.output(); + Inverse_Matrix I; + I.input(m); + I.cal_inverse(Inverse_Matrix::Method::potrf); + return I.output(); } -template -std::vector>> -LRI_CV_Tools::cal_I( const std::vector>> &ms ) +template +std::vector>> LRI_CV_Tools::cal_I(const std::vector>>& ms) { - Inverse_Matrix I; - I.input(ms); - I.cal_inverse( Inverse_Matrix::Method::potrf ); - return I.output({ms[0][0].shape[0], ms[1][0].shape[0]}, {ms[0][0].shape[1], ms[0][1].shape[1]}); + Inverse_Matrix I; + I.input(ms); + I.cal_inverse(Inverse_Matrix::Method::potrf); + return I.output({ms[0][0].shape[0], ms[1][0].shape[0]}, {ms[0][0].shape[1], ms[0][1].shape[1]}); } - - -template -RI::Tensor LRI_CV_Tools::transform_Rm(const RI::Tensor &V) +template +RI::Tensor LRI_CV_Tools::transform_Rm(const RI::Tensor& V) { - return V.transpose(); + return V.transpose(); } -template -std::array,3> LRI_CV_Tools::transform_Rm(const std::array,3> &dV) +template +std::array, 3> LRI_CV_Tools::transform_Rm(const std::array, 3>& dV) { - return std::array,3>{-dV[0].transpose(), -dV[1].transpose(), -dV[2].transpose()}; + return std::array, 3>{-dV[0].transpose(), -dV[1].transpose(), -dV[2].transpose()}; } -template -bool LRI_CV_Tools::exist(const RI::Tensor &V) +template +bool LRI_CV_Tools::exist(const RI::Tensor& V) { - return !V.empty(); + return !V.empty(); } -template -bool LRI_CV_Tools::exist(const std::array &dV) +template +bool LRI_CV_Tools::exist(const std::array& dV) { - for(size_t i=0; i<3; ++i) - { - if(!dV[i].empty()) - return true; - } - return false; + for (size_t i = 0; i < 3; ++i) + { + if (!dV[i].empty()) + return true; + } + return false; } - -template -RI::Tensor LRI_CV_Tools::mul1( - const RI::Tensor &t1, - const RI::Tensor &t2) +template +RI::Tensor LRI_CV_Tools::mul1(const RI::Tensor& t1, const RI::Tensor& t2) { - const size_t sa0=t1.shape[0], sa1=t2.shape[0], sl0=t2.shape[1], sl1=t2.shape[2]; - return (t1 * t2.reshape({sa1,sl0*sl1})).reshape({sa0,sl0,sl1}); + const size_t sa0 = t1.shape[0], sa1 = t2.shape[0], sl0 = t2.shape[1], sl1 = t2.shape[2]; + return (t1 * t2.reshape({sa1, sl0 * sl1})).reshape({sa0, sl0, sl1}); } -template -std::array LRI_CV_Tools::mul1( - const std::array &t1, - const T &t2) +template +std::array LRI_CV_Tools::mul1(const std::array& t1, const T& t2) { - return std::array{ - mul1(t1[0],t2), mul1(t1[1],t2), mul1(t1[2],t2) }; + return std::array{mul1(t1[0], t2), mul1(t1[1], t2), mul1(t1[2], t2)}; } /* template std::array LRI_CV_Tools::mul1( - const T &t1, - const std::array &t2) + const T &t1, + const std::array &t2) { - return std::array{ - mul1(t1,t2[0]), mul1(t1,t2[1]), mul1(t1,t2[2]) }; + return std::array{ + mul1(t1,t2[0]), mul1(t1,t2[1]), mul1(t1,t2[2]) }; } */ -template -std::vector> LRI_CV_Tools::mul2( - const std::vector>> &mat, - const std::vector> &vec) +template +std::vector> LRI_CV_Tools::mul2(const std::vector>>& mat, + const std::vector>& vec) { - const size_t sa0=vec[0].shape[0], sa1=vec[1].shape[0], sl0=vec[0].shape[1], sl1=vec[0].shape[2]; - const RI::Tensor vec0=vec[0].reshape({sa0,sl0*sl1}), vec1=vec[1].reshape({sa1,sl0*sl1}); - return std::vector> - {( mat[0][0]*vec0 + mat[0][1]*vec1 ).reshape({sa0,sl0,sl1}), - ( mat[1][0]*vec0 + mat[1][1]*vec1 ).reshape({sa1,sl0,sl1})}; + const size_t sa0 = vec[0].shape[0], sa1 = vec[1].shape[0], sl0 = vec[0].shape[1], sl1 = vec[0].shape[2]; + const RI::Tensor vec0 = vec[0].reshape({sa0, sl0 * sl1}), vec1 = vec[1].reshape({sa1, sl0 * sl1}); + return std::vector>{(mat[0][0] * vec0 + mat[0][1] * vec1).reshape({sa0, sl0, sl1}), + (mat[1][0] * vec0 + mat[1][1] * vec1).reshape({sa1, sl0, sl1})}; } /* template std::array LRI_CV_Tools::mul2( - const std::array &t1, - const T2 &t2) + const std::array &t1, + const T2 &t2) { - return std::array{ - mul2(t1[0],t2), mul2(t1[1],t2), mul2(t1[2],t2) }; + return std::array{ + mul2(t1[0],t2), mul2(t1[1],t2), mul2(t1[2],t2) }; } */ -template -std::array LRI_CV_Tools::mul2( - const T1 &t1, - const std::array &t2) +template +std::array LRI_CV_Tools::mul2(const T1& t1, const std::array& t2) { - return std::array{ - mul2(t1,t2[0]), mul2(t1,t2[1]), mul2(t1,t2[2]) }; + return std::array{mul2(t1, t2[0]), mul2(t1, t2[1]), mul2(t1, t2[2])}; } /* template std::array LRI_CV_Tools::operator-(const std::array &v1, const std::array &v2) { - std::array v; - for(std::size_t i=0; i v; + for(std::size_t i=0; i std::vector LRI_CV_Tools::operator-(const std::vector &v1, const std::vector &v2) { - assert(v1.size()==v2.size()); - std::vector v(v1.size()); - for(std::size_t i=0; i v(v1.size()); + for(std::size_t i=0; i -std::vector> LRI_CV_Tools::minus( - const std::vector> &v1, - const std::vector> &v2) +template +std::vector> LRI_CV_Tools::minus(const std::vector>& v1, + const std::vector>& v2) { - assert(v1.size()==v2.size()); - std::vector> v(v1.size()); - for(std::size_t i=0; i> v(v1.size()); + for (std::size_t i = 0; i < v.size(); ++i) + for (std::size_t j = 0; j < N; ++j) + v[i][j] = v1[i][j] - v2[i][j]; + return v; } - -template -std::array LRI_CV_Tools::negative(const std::array &v_in) +template +std::array LRI_CV_Tools::negative(const std::array& v_in) { - std::array v_out; - for(std::size_t i=0; i v_out; + for (std::size_t i = 0; i < N; ++i) + v_out[i] = -v_in[i]; + return v_out; } - -template -RI::Tensor LRI_CV_Tools::transpose12(const RI::Tensor &c_in) +template +RI::Tensor LRI_CV_Tools::transpose12(const RI::Tensor& c_in) { - RI::Tensor c_out({c_in.shape[0], c_in.shape[2], c_in.shape[1]}); - for(size_t i0=0; i0 c_out({c_in.shape[0], c_in.shape[2], c_in.shape[1]}); + for (size_t i0 = 0; i0 < c_in.shape[0]; ++i0) + for (size_t i1 = 0; i1 < c_in.shape[1]; ++i1) + for (size_t i2 = 0; i2 < c_in.shape[2]; ++i2) + c_out(i0, i2, i1) = c_in(i0, i1, i2); + return c_out; } -template -std::array LRI_CV_Tools::transpose12(const std::array &c_in) +template +std::array LRI_CV_Tools::transpose12(const std::array& c_in) { - std::array c_out; - for(size_t i=0; i c_out; + for (size_t i = 0; i < N; ++i) + c_out[i] = transpose12(c_in[i]); + return c_out; } - -template -std::array,N> -LRI_CV_Tools::change_order(std::vector> &&ds_in) +template +std::array, N> LRI_CV_Tools::change_order(std::vector>&& ds_in) { - std::array,N> ds; - for(int ix=0; ix, N> ds; + for (int ix = 0; ix < N; ++ix) + { + ds[ix].resize(ds_in.size()); + for (int iv = 0; iv < ds_in.size(); ++iv) + ds[ix][iv] = std::move(ds_in[iv][ix]); + } + return ds; } -template -std::vector> -LRI_CV_Tools::change_order(std::array,N> &&ds_in) +template +std::vector> LRI_CV_Tools::change_order(std::array, N>&& ds_in) { - std::vector> ds(ds_in[0].size()); - for(int ix=0; ix> ds(ds_in[0].size()); + for (int ix = 0; ix < N; ++ix) + { + assert(ds.size() == ds_in[ix].size()); + for (int iv = 0; iv < ds.size(); ++iv) + ds[iv][ix] = std::move(ds_in[ix][iv]); + } + return ds; } -template -std::array>,N> -LRI_CV_Tools::change_order(std::vector>> &&ds_in) +template +std::array>, N> LRI_CV_Tools::change_order( + std::vector>>&& ds_in) { - std::array>,N> ds; - for(int ix=0; ix>, N> ds; + for (int ix = 0; ix < N; ++ix) + { + ds[ix].resize(ds_in.size()); + for (int i0 = 0; i0 < ds_in.size(); ++i0) + { + ds[ix][i0].resize(ds_in[i0].size()); + for (int i1 = 0; i1 < ds_in[i0].size(); ++i1) + ds[ix][i0][i1] = std::move(ds_in[i0][i1][ix]); + } + } + return ds; } -template -std::array>,N> -LRI_CV_Tools::change_order(std::map>> && ds_in) +template +std::array>, N> LRI_CV_Tools::change_order( + std::map>>&& ds_in) { - std::array>,N> ds; - for(auto &ds_A : ds_in) - for(auto &ds_B : ds_A.second) - for(int ix=0; ix>, N> ds; + for (auto& ds_A: ds_in) + for (auto& ds_B: ds_A.second) + for (int ix = 0; ix < N; ++ix) + ds[ix][ds_A.first][ds_B.first] = std::move(ds_B.second[ix]); + return ds; } - -template -std::array -LRI_CV_Tools::cal_latvec_range(const double &rcut_times, - const UnitCell &ucell, - const std::vector& orb_cutoff) +template +std::array LRI_CV_Tools::cal_latvec_range(const double& rcut_times, + const UnitCell& ucell, + const std::vector& orb_cutoff) { - double Rcut_max = 0; - for(int T=0; T proj = ModuleBase::Mathzone::latvec_projection( - std::array,3>{ucell.a1, ucell.a2, ucell.a3}); - const ModuleBase::Vector3 latvec_times = Rcut_max * rcut_times / (proj * ucell.lat0); + double Rcut_max = 0; + for (int T = 0; T < ucell.ntype; ++T) + Rcut_max = std::max(Rcut_max, orb_cutoff[T]); + const ModuleBase::Vector3 proj = ModuleBase::Mathzone::latvec_projection( + std::array, 3>{ucell.a1, ucell.a2, ucell.a3}); + const ModuleBase::Vector3 latvec_times = Rcut_max * rcut_times / (proj * ucell.lat0); const ModuleBase::Vector3 latvec_times_ceil = {static_cast(std::ceil(latvec_times.x)), static_cast(std::ceil(latvec_times.y)), static_cast(std::ceil(latvec_times.z))}; - const ModuleBase::Vector3 period = 2 * latvec_times_ceil + ModuleBase::Vector3{1,1,1}; - return std::array{period.x, period.y, period.z}; + const ModuleBase::Vector3 period = 2 * latvec_times_ceil + ModuleBase::Vector3{1, 1, 1}; + return std::array{period.x, period.y, period.z}; } -template -std::map,RI::Tensor>>> -LRI_CV_Tools::get_CVws( - const UnitCell &ucell, - const std::map>,RI::Tensor>> &CVs) +template +std::map, RI::Tensor>>> LRI_CV_Tools::get_CVws( + const UnitCell& ucell, + const std::map>, RI::Tensor>>& CVs) { - std::map,RI::Tensor>>> CVws; - for(const auto &CVs_A : CVs) - { - const TA iat0 = CVs_A.first; - const int it0 = ucell.iat2it[iat0]; - const int ia0 = ucell.iat2ia[iat0]; - const ModuleBase::Vector3 tau0 = ucell.atoms[it0].tau[ia0]; - for(const auto &CVs_B : CVs_A.second) - { - const TA iat1 = CVs_B.first.first; - const int it1 = ucell.iat2it[iat1]; - const int ia1 = ucell.iat2ia[iat1]; - const std::array &cell1 = CVs_B.first.second; - const ModuleBase::Vector3 tau1 = ucell.atoms[it1].tau[ia1]; - const Abfs::Vector3_Order R_delta = -tau0+tau1+(RI_Util::array3_to_Vector3(cell1)*ucell.latvec); - CVws[it0][it1][R_delta] = CVs_B.second; - } - } - return CVws; + std::map, RI::Tensor>>> CVws; + for (const auto& CVs_A: CVs) + { + const TA iat0 = CVs_A.first; + const int it0 = ucell.iat2it[iat0]; + const int ia0 = ucell.iat2ia[iat0]; + const ModuleBase::Vector3 tau0 = ucell.atoms[it0].tau[ia0]; + for (const auto& CVs_B: CVs_A.second) + { + const TA iat1 = CVs_B.first.first; + const int it1 = ucell.iat2it[iat1]; + const int ia1 = ucell.iat2ia[iat1]; + const std::array& cell1 = CVs_B.first.second; + const ModuleBase::Vector3 tau1 = ucell.atoms[it1].tau[ia1]; + const Abfs::Vector3_Order R_delta + = -tau0 + tau1 + (RI_Util::array3_to_Vector3(cell1) * ucell.latvec); + CVws[it0][it1][R_delta] = CVs_B.second; + } + } + return CVws; } -template -std::map,std::array,3>>>> -LRI_CV_Tools::get_dCVws( - const UnitCell &ucell, - const std::array>,RI::Tensor>>,3> &dCVs) +template +std::map, std::array, 3>>>> LRI_CV_Tools:: + get_dCVws(const UnitCell& ucell, + const std::array>, RI::Tensor>>, 3>& dCVs) { - std::map,std::array,3>>>> dCVws; - for(int ix=0; ix<3; ++ix) - { - for(const auto &dCVs_A : dCVs[ix]) - { - const TA iat0 = dCVs_A.first; - const int it0 = ucell.iat2it[iat0]; - const int ia0 = ucell.iat2ia[iat0]; - const ModuleBase::Vector3 tau0 = ucell.atoms[it0].tau[ia0]; - for(const auto &dCVs_B : dCVs_A.second) - { - const TA iat1 = dCVs_B.first.first; - const int it1 = ucell.iat2it[iat1]; - const int ia1 = ucell.iat2ia[iat1]; - const std::array &cell1 = dCVs_B.first.second; - const ModuleBase::Vector3 tau1 = ucell.atoms[it1].tau[ia1]; - const Abfs::Vector3_Order R_delta = -tau0+tau1+(RI_Util::array3_to_Vector3(cell1)*ucell.latvec); - dCVws[it0][it1][R_delta][ix] = dCVs_B.second; - } - } - } - return dCVws; + std::map, std::array, 3>>>> dCVws; + for (int ix = 0; ix < 3; ++ix) + { + for (const auto& dCVs_A: dCVs[ix]) + { + const TA iat0 = dCVs_A.first; + const int it0 = ucell.iat2it[iat0]; + const int ia0 = ucell.iat2ia[iat0]; + const ModuleBase::Vector3 tau0 = ucell.atoms[it0].tau[ia0]; + for (const auto& dCVs_B: dCVs_A.second) + { + const TA iat1 = dCVs_B.first.first; + const int it1 = ucell.iat2it[iat1]; + const int ia1 = ucell.iat2ia[iat1]; + const std::array& cell1 = dCVs_B.first.second; + const ModuleBase::Vector3 tau1 = ucell.atoms[it1].tau[ia1]; + const Abfs::Vector3_Order R_delta + = -tau0 + tau1 + (RI_Util::array3_to_Vector3(cell1) * ucell.latvec); + dCVws[it0][it1][R_delta][ix] = dCVs_B.second; + } + } + } + return dCVws; } - // dMRs[ipos0][ipos1] = \nabla_{ipos0} M R_{ipos1} -template -std::array,RI::Tensor>>,3>,3> -LRI_CV_Tools::cal_dMRs( - const UnitCell &ucell, - const std::array,RI::Tensor>>,3> &dMs) +template +std::array, RI::Tensor>>, 3>, 3> LRI_CV_Tools::cal_dMRs( + const UnitCell& ucell, + const std::array, RI::Tensor>>, 3>& dMs) { - auto get_R_delta = [&](const TA &iat0, const std::pair &A1) -> std::array - { - const TA iat1 = A1.first; - const TC &cell1 = A1.second; - const int it0 = ucell.iat2it[iat0]; - const int ia0 = ucell.iat2ia[iat0]; - const int it1 = ucell.iat2it[iat1]; - const int ia1 = ucell.iat2ia[iat1]; - const ModuleBase::Vector3 tau0 = ucell.atoms[it0].tau[ia0]; - const ModuleBase::Vector3 tau1 = ucell.atoms[it1].tau[ia1]; - const Abfs::Vector3_Order R_delta = -tau0+tau1+(RI_Util::array3_to_Vector3(cell1)*ucell.latvec); - return std::array{R_delta.x, R_delta.y, R_delta.z}; - }; - constexpr int Npos = 3; - std::array,RI::Tensor>>,Npos>,Npos> dMRs; - for(int ipos0=0; ipos0 A1 = dMs_B.first; - const RI::Tensor &dM = dMs_B.second; - const std::array R_delta = get_R_delta(iat0, A1); - dMRs[ipos0][ipos1][iat0][A1] = dM * R_delta[ipos1]; - } - } - } - } - return dMRs; + auto get_R_delta = [&](const TA& iat0, const std::pair& A1) -> std::array { + const TA iat1 = A1.first; + const TC& cell1 = A1.second; + const int it0 = ucell.iat2it[iat0]; + const int ia0 = ucell.iat2ia[iat0]; + const int it1 = ucell.iat2it[iat1]; + const int ia1 = ucell.iat2ia[iat1]; + const ModuleBase::Vector3 tau0 = ucell.atoms[it0].tau[ia0]; + const ModuleBase::Vector3 tau1 = ucell.atoms[it1].tau[ia1]; + const Abfs::Vector3_Order R_delta = -tau0 + tau1 + (RI_Util::array3_to_Vector3(cell1) * ucell.latvec); + return std::array{R_delta.x, R_delta.y, R_delta.z}; + }; + constexpr int Npos = 3; + std::array, RI::Tensor>>, Npos>, Npos> dMRs; + for (int ipos0 = 0; ipos0 < Npos; ++ipos0) + { + for (int ipos1 = 0; ipos1 < Npos; ++ipos1) + { + for (const auto& dMs_A: dMs[ipos0]) + { + const TA iat0 = dMs_A.first; + for (const auto& dMs_B: dMs_A.second) + { + const std::pair A1 = dMs_B.first; + const RI::Tensor& dM = dMs_B.second; + const std::array R_delta = get_R_delta(iat0, A1); + dMRs[ipos0][ipos1][iat0][A1] = dM * R_delta[ipos1]; + } + } + } + } + return dMRs; } #endif diff --git a/source/module_ri/Matrix_Orbs11.cpp b/source/module_ri/Matrix_Orbs11.cpp index 01572cbc8d..f39108d84c 100644 --- a/source/module_ri/Matrix_Orbs11.cpp +++ b/source/module_ri/Matrix_Orbs11.cpp @@ -5,14 +5,15 @@ #include "Matrix_Orbs11.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" -void Matrix_Orbs11::init(const int mode, + +void Matrix_Orbs11::init(const int mode, const UnitCell& ucell, - const LCAO_Orbitals& orb, - const double kmesh_times, + const LCAO_Orbitals& orb, + const double kmesh_times, const double rmesh_times) { ModuleBase::TITLE("Matrix_Orbs11", "init"); @@ -60,12 +61,18 @@ void Matrix_Orbs11::init_radial(const std::vectorMGT))); @@ -82,12 +89,18 @@ void Matrix_Orbs11::init_radial(const LCAO_Orbitals& orb_A, const LCAO_Orbitals& { ModuleBase::TITLE("Matrix_Orbs11", "init_radial"); ModuleBase::timer::tick("Matrix_Orbs11", "init_radial"); - for (size_t TA = 0; TA != orb_A.get_ntype(); ++TA) { - for (size_t TB = 0; TB != orb_B.get_ntype(); ++TB) { - for (int LA = 0; LA <= orb_A.Phi[TA].getLmax(); ++LA) { - for (size_t NA = 0; NA != orb_A.Phi[TA].getNchi(LA); ++NA) { - for (int LB = 0; LB <= orb_B.Phi[TB].getLmax(); ++LB) { - for (size_t NB = 0; NB != orb_B.Phi[TB].getNchi(LB); ++NB) { + for (size_t TA = 0; TA != orb_A.get_ntype(); ++TA) + { + for (size_t TB = 0; TB != orb_B.get_ntype(); ++TB) + { + for (int LA = 0; LA <= orb_A.Phi[TA].getLmax(); ++LA) + { + for (size_t NA = 0; NA != orb_A.Phi[TA].getNchi(LA); ++NA) + { + for (int LB = 0; LB <= orb_B.Phi[TB].getLmax(); ++LB) + { + for (size_t NB = 0; NB != orb_B.Phi[TB].getNchi(LB); ++NB) + { center2_orb11_s[TA][TB][LA][NA][LB].insert( std::make_pair(NB, Center2_Orb::Orb11(orb_A.Phi[TA].PhiLN(LA, NA), @@ -107,12 +120,18 @@ void Matrix_Orbs11::init_radial_table() { ModuleBase::TITLE("Matrix_Orbs11", "init_radial_table"); ModuleBase::timer::tick("Matrix_Orbs11", "init_radial_table"); - for (auto& coA: center2_orb11_s) { - for (auto& coB: coA.second) { - for (auto& coC: coB.second) { - for (auto& coD: coC.second) { - for (auto& coE: coD.second) { - for (auto& coF: coE.second) { + for (auto& coA: center2_orb11_s) + { + for (auto& coB: coA.second) + { + for (auto& coC: coB.second) + { + for (auto& coD: coC.second) + { + for (auto& coE: coD.second) + { + for (auto& coF: coE.second) + { coF.second.init_radial_table(); } } @@ -128,7 +147,8 @@ void Matrix_Orbs11::init_radial_table(const std::maplat0; - for (const auto& RsA: Rs) { + for (const auto& RsA: Rs) + { for (const auto& RsB: RsA.second) { if (auto* const center2_orb11_sAB = static_cast< @@ -140,14 +160,19 @@ void Matrix_Orbs11::init_radial_table(const std::map(position); - for (size_t i = 0; i != 4; ++i) { + for (size_t i = 0; i != 4; ++i) + { radials.insert(iq + i); } } - for (auto& coC: *center2_orb11_sAB) { - for (auto& coD: coC.second) { - for (auto& coE: coD.second) { - for (auto& coF: coE.second) { + for (auto& coC: *center2_orb11_sAB) + { + for (auto& coD: coC.second) + { + for (auto& coE: coD.second) + { + for (auto& coF: coE.second) + { coF.second.init_radial_table(radials); } } @@ -155,6 +180,6 @@ void Matrix_Orbs11::init_radial_table(const std::map #include #include #include + class Matrix_Orbs11 { public: @@ -63,7 +65,7 @@ class Matrix_Orbs11 template std::map>>>> cal_overlap_matrix_all( - const UnitCell &ucell, + const UnitCell& ucell, const ModuleBase::Element_Basis_Index::IndexLNM& index_r, const ModuleBase::Element_Basis_Index::IndexLNM& index_c) const; @@ -71,7 +73,7 @@ class Matrix_Orbs11 ModuleBase::Sph_Bessel_Recursive::D2* psb_ = nullptr; ORB_gaunt_table MGT; const double lcao_dr_ = 0.01; - double* lat0=nullptr; // restore ucell.lat0 + double* lat0 = nullptr; // restore ucell.lat0 std::maplat0 = &ucell.lat0; + this->lat0 = &ucell.lat0; for (int it = 0; it < ntype; it++) { lmax_orb = std::max(lmax_orb, orb.Phi[it].getLmax()); @@ -62,21 +63,21 @@ void Matrix_Orbs21::init_radial(const std::vectorlat0; - for (const auto& RsA: Rs) { + for (const auto& RsA: Rs) + { for (const auto& RsB: RsA.second) { if (auto* const center2_orb21_sAB = static_cast(position); - for (size_t i = 0; i != 4; ++i) + for (size_t i = 0; i != 4; ++i) { radials.insert(iq + i); } } - for (auto& coC: *center2_orb21_sAB) + for (auto& coC: *center2_orb21_sAB) { - for (auto& coD: coC.second) + for (auto& coD: coC.second) { - for (auto& coE: coD.second) + for (auto& coE: coD.second) { - for (auto& coF: coE.second) + for (auto& coF: coE.second) { - for (auto& coG: coF.second) + for (auto& coG: coF.second) { - for (auto& coH: coG.second) + for (auto& coH: coG.second) { coH.second.init_radial_table(radials); } diff --git a/source/module_ri/Matrix_Orbs21.h b/source/module_ri/Matrix_Orbs21.h index 1d2895b4b2..52b2104e24 100644 --- a/source/module_ri/Matrix_Orbs21.h +++ b/source/module_ri/Matrix_Orbs21.h @@ -6,17 +6,19 @@ #ifndef MATRIX_ORB21_H #define MATRIX_ORB21_H -#include "module_base/element_basis_index.h" -#include "module_base/vector3.h" #include "module_basis/module_ao/ORB_gaunt_table.h" #include "module_basis/module_ao/ORB_read.h" -#include "module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb21.h" #include "module_cell/unitcell.h" +#include "module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb21.h" +#include "source_base/element_basis_index.h" +#include "source_base/vector3.h" + #include #include #include #include + class Matrix_Orbs21 { public: diff --git a/source/module_ri/Matrix_Orbs22.cpp b/source/module_ri/Matrix_Orbs22.cpp index d2592d5ce5..0fc002ceae 100644 --- a/source/module_ri/Matrix_Orbs22.cpp +++ b/source/module_ri/Matrix_Orbs22.cpp @@ -5,21 +5,22 @@ #include "Matrix_Orbs22.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" -void Matrix_Orbs22::init(const int mode, - const UnitCell& ucell, - const LCAO_Orbitals& orb, - const double kmesh_times, - const double rmesh_times) + +void Matrix_Orbs22::init(const int mode, + const UnitCell& ucell, + const LCAO_Orbitals& orb, + const double kmesh_times, + const double rmesh_times) { ModuleBase::TITLE("Matrix_Orbs22", "init"); ModuleBase::timer::tick("Matrix_Orbs22", "init"); int Lmax_used, Lmax; - this->lat0 = &ucell.lat0; + this->lat0 = &ucell.lat0; const int ntype = orb.get_ntype(); int lmax_orb = -1, lmax_beta = -1; for (int it = 0; it < ntype; it++) diff --git a/source/module_ri/Matrix_Orbs22.h b/source/module_ri/Matrix_Orbs22.h index c3fa5331f8..65841452f9 100644 --- a/source/module_ri/Matrix_Orbs22.h +++ b/source/module_ri/Matrix_Orbs22.h @@ -6,18 +6,19 @@ #ifndef MATRIX_ORB22_H #define MATRIX_ORB22_H -#include "module_base/element_basis_index.h" -#include "module_base/vector3.h" #include "module_basis/module_ao/ORB_gaunt_table.h" #include "module_basis/module_ao/ORB_read.h" -#include "module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb22.h" #include "module_cell/unitcell.h" +#include "module_hamilt_lcao/hamilt_lcaodft/center2_orb-orb22.h" +#include "source_base/element_basis_index.h" +#include "source_base/vector3.h" #include #include #include #include + class Matrix_Orbs22 { public: @@ -93,7 +94,7 @@ class Matrix_Orbs22 template std::map>>>> cal_overlap_matrix_all( - const UnitCell &ucell, + const UnitCell& ucell, const ModuleBase::Element_Basis_Index::IndexLNM& index_A1, const ModuleBase::Element_Basis_Index::IndexLNM& index_A2, const ModuleBase::Element_Basis_Index::IndexLNM& index_B1, @@ -103,7 +104,7 @@ class Matrix_Orbs22 ModuleBase::Sph_Bessel_Recursive::D2* psb_ = nullptr; ORB_gaunt_table MGT; const double lcao_dr_ = 0.01; - double* lat0 = nullptr; // restore ucell.lat0 + double* lat0 = nullptr; // restore ucell.lat0 std::map< size_t, // TA std::mapgamma_only = gamma_only_in; if (this->gamma_only) - this->mix_DMk_gamma.resize(nks); - else - this->mix_DMk_k.resize(nks); - return *this; + this->mix_DMk_gamma.resize(nks); + else + this->mix_DMk_k.resize(nks); + return *this; } -Mix_DMk_2D &Mix_DMk_2D::set_mixing(Base_Mixing::Mixing* mixing_in) +Mix_DMk_2D& Mix_DMk_2D::set_mixing(Base_Mixing::Mixing* mixing_in) { - ModuleBase::TITLE("Mix_DMk_2D","set_mixing"); - if(this->gamma_only) - for (Mix_Matrix>& mix_one : this->mix_DMk_gamma) - mix_one.init(mixing_in); - else - for (Mix_Matrix>>& mix_one : this->mix_DMk_k) - mix_one.init(mixing_in); - return *this; + ModuleBase::TITLE("Mix_DMk_2D", "set_mixing"); + if (this->gamma_only) + for (Mix_Matrix>& mix_one: this->mix_DMk_gamma) + mix_one.init(mixing_in); + else + for (Mix_Matrix>>& mix_one: this->mix_DMk_k) + mix_one.init(mixing_in); + return *this; } -Mix_DMk_2D &Mix_DMk_2D::set_mixing_beta(const double mixing_beta) +Mix_DMk_2D& Mix_DMk_2D::set_mixing_beta(const double mixing_beta) { - ModuleBase::TITLE("Mix_DMk_2D","set_mixing_beta"); - if(this->gamma_only) - for (Mix_Matrix>& mix_one : this->mix_DMk_gamma) - mix_one.mixing_beta = mixing_beta; - else - for (Mix_Matrix>>& mix_one : this->mix_DMk_k) - mix_one.mixing_beta = mixing_beta; - return *this; + ModuleBase::TITLE("Mix_DMk_2D", "set_mixing_beta"); + if (this->gamma_only) + for (Mix_Matrix>& mix_one: this->mix_DMk_gamma) + mix_one.mixing_beta = mixing_beta; + else + for (Mix_Matrix>>& mix_one: this->mix_DMk_k) + mix_one.mixing_beta = mixing_beta; + return *this; } void Mix_DMk_2D::mix(const std::vector>& dm, const bool flag_restart) { - ModuleBase::TITLE("Mix_DMk_2D","mix"); - assert(this->mix_DMk_gamma.size() == dm.size()); - for(int ik=0; ikmix_DMk_gamma[ik].mix(dm[ik], flag_restart); + ModuleBase::TITLE("Mix_DMk_2D", "mix"); + assert(this->mix_DMk_gamma.size() == dm.size()); + for (int ik = 0; ik < dm.size(); ++ik) + this->mix_DMk_gamma[ik].mix(dm[ik], flag_restart); } void Mix_DMk_2D::mix(const std::vector>>& dm, const bool flag_restart) { - ModuleBase::TITLE("Mix_DMk_2D","mix"); - assert(this->mix_DMk_k.size() == dm.size()); - for(int ik=0; ikmix_DMk_k[ik].mix(dm[ik], flag_restart); + ModuleBase::TITLE("Mix_DMk_2D", "mix"); + assert(this->mix_DMk_k.size() == dm.size()); + for (int ik = 0; ik < dm.size(); ++ik) + this->mix_DMk_k[ik].mix(dm[ik], flag_restart); } std::vector*> Mix_DMk_2D::get_DMk_gamma_out() const { std::vector*> DMk_out(this->mix_DMk_gamma.size()); - for(int ik=0; ikmix_DMk_gamma.size(); ++ik) - DMk_out[ik] = &this->mix_DMk_gamma[ik].get_data_out(); - return DMk_out; + for (int ik = 0; ik < this->mix_DMk_gamma.size(); ++ik) + DMk_out[ik] = &this->mix_DMk_gamma[ik].get_data_out(); + return DMk_out; } std::vector>*> Mix_DMk_2D::get_DMk_k_out() const { std::vector>*> DMk_out(this->mix_DMk_k.size()); - for(int ik=0; ikmix_DMk_k.size(); ++ik) - DMk_out[ik] = &this->mix_DMk_k[ik].get_data_out(); - return DMk_out; + for (int ik = 0; ik < this->mix_DMk_k.size(); ++ik) + DMk_out[ik] = &this->mix_DMk_k[ik].get_data_out(); + return DMk_out; } \ No newline at end of file diff --git a/source/module_ri/Mix_DMk_2D.h b/source/module_ri/Mix_DMk_2D.h index 9d640fa7f1..b55d70193f 100644 --- a/source/module_ri/Mix_DMk_2D.h +++ b/source/module_ri/Mix_DMk_2D.h @@ -7,66 +7,67 @@ #define MIX_DMK_2D_H #include "Mix_Matrix.h" -#include "module_base/module_mixing/mixing.h" -#include "module_base/matrix.h" -#include "module_base/complexmatrix.h" +#include "source_base/complexmatrix.h" +#include "source_base/matrix.h" +#include "source_base/module_mixing/mixing.h" #include + class Mix_DMk_2D { -public: - /** - * @brief Sets the number of k-points and gamma_only flag. - * @param nks Number of k-points. - * @param gamma_only_in Flag indicating if only gamma point is mixed. - * @return Reference to the current object. - */ - Mix_DMk_2D &set_nks(const int nks, const bool gamma_only_in); + public: + /** + * @brief Sets the number of k-points and gamma_only flag. + * @param nks Number of k-points. + * @param gamma_only_in Flag indicating if only gamma point is mixed. + * @return Reference to the current object. + */ + Mix_DMk_2D& set_nks(const int nks, const bool gamma_only_in); - /** - * @brief Sets the mixing mode. - * @param Mixing Mixing pointer. - * @return Reference to the current object. - */ - Mix_DMk_2D &set_mixing(Base_Mixing::Mixing* mixing_in); + /** + * @brief Sets the mixing mode. + * @param Mixing Mixing pointer. + * @return Reference to the current object. + */ + Mix_DMk_2D& set_mixing(Base_Mixing::Mixing* mixing_in); - /** - * @brief Sets the mixing beta. - * @param mixing_beta Mixing beta. - * @return Reference to the current object. - */ - Mix_DMk_2D &set_mixing_beta(const double mixing_beta); + /** + * @brief Sets the mixing beta. + * @param mixing_beta Mixing beta. + * @return Reference to the current object. + */ + Mix_DMk_2D& set_mixing_beta(const double mixing_beta); - /** - * @brief Mixes the double density matrix. - * @param dm Double Density matrix. - * @param flag_restart Flag indicating whether restart mixing. - */ + /** + * @brief Mixes the double density matrix. + * @param dm Double Density matrix. + * @param flag_restart Flag indicating whether restart mixing. + */ void mix(const std::vector>& dm, const bool flag_restart); - /** - * @brief Mixes the complex density matrix. - * @param dm Complex density matrix. - * @param flag_restart Flag indicating whether restart mixing. - */ + /** + * @brief Mixes the complex density matrix. + * @param dm Complex density matrix. + * @param flag_restart Flag indicating whether restart mixing. + */ void mix(const std::vector>>& dm, const bool flag_restart); - /** - * @brief Returns the double density matrix. - * @return Double density matrices for each k-points. - */ + /** + * @brief Returns the double density matrix. + * @return Double density matrices for each k-points. + */ std::vector*> get_DMk_gamma_out() const; - /** - * @brief Returns the complex density matrix. - * @return Complex density matrices for each k-points. - */ + /** + * @brief Returns the complex density matrix. + * @return Complex density matrices for each k-points. + */ std::vector>*> get_DMk_k_out() const; -private: + private: std::vector>> mix_DMk_gamma; std::vector>>> mix_DMk_k; - bool gamma_only; + bool gamma_only; }; #endif \ No newline at end of file diff --git a/source/module_ri/Mix_Matrix.cpp b/source/module_ri/Mix_Matrix.cpp index 21d5b5e3c2..8f391cf563 100644 --- a/source/module_ri/Mix_Matrix.cpp +++ b/source/module_ri/Mix_Matrix.cpp @@ -7,36 +7,38 @@ #define MIX_DATA_HPP #include "Mix_Matrix.h" -#include "module_base/matrix.h" -#include "module_base/complexmatrix.h" -#include "module_base/tool_title.h" -template<> +#include "source_base/complexmatrix.h" +#include "source_base/matrix.h" +#include "source_base/tool_title.h" + + +template <> void Mix_Matrix::mix(const ModuleBase::matrix& data_in, const bool flag_restart) { - if(separate_loop) - { - this->mixing = new Base_Mixing::Plain_Mixing(this->mixing_beta); - } - - if(flag_restart) - { - this->data_out = data_in; - this->mixing->init_mixing_data(this->matrix_data, data_in.nc*data_in.nr, sizeof(*data_in.c)); - } - else - { - this->mixing->push_data(this->matrix_data, data_out.c, data_in.c, nullptr, false); - this->mixing->mix_data(this->matrix_data, data_out.c); - } - - if(separate_loop) - { - delete this->mixing; - this->mixing = nullptr; - } + if (separate_loop) + { + this->mixing = new Base_Mixing::Plain_Mixing(this->mixing_beta); + } + + if (flag_restart) + { + this->data_out = data_in; + this->mixing->init_mixing_data(this->matrix_data, data_in.nc * data_in.nr, sizeof(*data_in.c)); + } + else + { + this->mixing->push_data(this->matrix_data, data_out.c, data_in.c, nullptr, false); + this->mixing->mix_data(this->matrix_data, data_out.c); + } + + if (separate_loop) + { + delete this->mixing; + this->mixing = nullptr; + } } -template<> +template <> void Mix_Matrix::mix(const ModuleBase::ComplexMatrix& data_in, const bool flag_restart) { if (separate_loop) @@ -62,7 +64,7 @@ void Mix_Matrix::mix(const ModuleBase::ComplexMatrix& } } -template<> +template <> void Mix_Matrix>::mix(const std::vector& data_in, const bool flag_restart) { if (separate_loop) @@ -87,8 +89,9 @@ void Mix_Matrix>::mix(const std::vector& data_in, co this->mixing = nullptr; } } -template<> -void Mix_Matrix>>::mix(const std::vector>& data_in, const bool flag_restart) +template <> +void Mix_Matrix>>::mix(const std::vector>& data_in, + const bool flag_restart) { if (separate_loop) { @@ -127,7 +130,8 @@ void Mix_Matrix::mix(const ct::Tensor& data_in, const bool flag_rest if (flag_restart) { this->data_out = data_in; - this->mixing->init_mixing_data(this->matrix_data, data_in.NumElements(), sizeof(data_in.SizeOfType(data_in.data_type()))); + this->mixing->init_mixing_data(this->matrix_data, data_in.NumElements(), +sizeof(data_in.SizeOfType(data_in.data_type()))); } else { @@ -138,12 +142,10 @@ void Mix_Matrix::mix(const ct::Tensor& data_in, const bool flag_rest this->mixing->mix_data(this->matrix_data, data_out.data()); break; case ct::DataType::DT_COMPLEX_DOUBLE: - this->mixing->push_data(this->matrix_data, data_out.data>(), data_in.data>(), nullptr, false); - this->mixing->mix_data(this->matrix_data, data_out.data>()); - break; - default: - throw std::invalid_argument("Mix_Matrix: data type not supported"); - break; + this->mixing->push_data(this->matrix_data, data_out.data>(), +data_in.data>(), nullptr, false); this->mixing->mix_data(this->matrix_data, +data_out.data>()); break; default: throw std::invalid_argument("Mix_Matrix: data type not +supported"); break; } } diff --git a/source/module_ri/Mix_Matrix.h b/source/module_ri/Mix_Matrix.h index 820a6c47f2..cfb7014269 100644 --- a/source/module_ri/Mix_Matrix.h +++ b/source/module_ri/Mix_Matrix.h @@ -6,10 +6,11 @@ #ifndef MIX_MATRIX_H #define MIX_MATRIX_H +#include "source_base/module_mixing/mixing.h" +#include "source_base/module_mixing/plain_mixing.h" + #include -#include "module_base/module_mixing/mixing.h" -#include "module_base/module_mixing/plain_mixing.h" template class Mix_Matrix { diff --git a/source/module_ri/RI_2D_Comm.hpp b/source/module_ri/RI_2D_Comm.hpp index f40e6f59d4..0c9df5a971 100644 --- a/source/module_ri/RI_2D_Comm.hpp +++ b/source/module_ri/RI_2D_Comm.hpp @@ -8,269 +8,291 @@ #include "RI_2D_Comm.h" #include "RI_Util.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/tool_title.h" -#include "module_base/timer.h" #include "module_hamilt_lcao/hamilt_lcaodft/LCAO_domain.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" -#include +#include "source_base/timer.h" +#include "source_base/tool_title.h" +#include #include -#include #include +#include -inline RI::Tensor tensor_conj(const RI::Tensor& t) { return t; } +inline RI::Tensor tensor_conj(const RI::Tensor& t) +{ + return t; +} inline RI::Tensor> tensor_conj(const RI::Tensor>& t) { RI::Tensor> r(t.shape); - for (int i = 0; i < t.data->size(); ++i) { + for (int i = 0; i < t.data->size(); ++i) + { (*r.data)[i] = std::conj((*t.data)[i]); } return r; } -template +template auto RI_2D_Comm::split_m2D_ktoR(const UnitCell& ucell, - const K_Vectors & kv, - const std::vector&mks_2D, - const Parallel_2D & pv, - const int nspin, - const bool spgsym) --> std::vector>>> + const K_Vectors& kv, + const std::vector& mks_2D, + const Parallel_2D& pv, + const int nspin, + const bool spgsym) -> std::vector>>> { - ModuleBase::TITLE("RI_2D_Comm","split_m2D_ktoR"); - ModuleBase::timer::tick("RI_2D_Comm", "split_m2D_ktoR"); + ModuleBase::TITLE("RI_2D_Comm", "split_m2D_ktoR"); + ModuleBase::timer::tick("RI_2D_Comm", "split_m2D_ktoR"); - const TC period = RI_Util::get_Born_vonKarmen_period(kv); - const std::map nspin_k = {{1,1}, {2,2}, {4,1}}; - const double SPIN_multiple = std::map{ {1,0.5}, {2,1}, {4,1} }.at(nspin); // why? + const TC period = RI_Util::get_Born_vonKarmen_period(kv); + const std::map nspin_k = {{1, 1}, {2, 2}, {4, 1}}; + const double SPIN_multiple = std::map{{1, 0.5}, {2, 1}, {4, 1}}.at(nspin); // why? std::vector>>> mRs_a2D(nspin); for (int is_k = 0; is_k < nspin_k.at(nspin); ++is_k) - { - const std::vector ik_list = RI_2D_Comm::get_ik_list(kv, is_k); - for(const TC &cell : RI_Util::get_Born_von_Karmen_cells(period)) - { + { + const std::vector ik_list = RI_2D_Comm::get_ik_list(kv, is_k); + for (const TC& cell: RI_Util::get_Born_von_Karmen_cells(period)) + { RI::Tensor mR_2D; int ik_full = 0; - for (const int ik : ik_list) + for (const int ik: ik_list) { auto set_mR_2D = [&mR_2D](auto&& mk_frac) { - if (mR_2D.empty()) { + if (mR_2D.empty()) + { mR_2D = RI::Global_Func::convert(mk_frac); - } else { - mR_2D - = mR_2D + RI::Global_Func::convert(mk_frac); + } + else + { + mR_2D = mR_2D + RI::Global_Func::convert(mk_frac); } }; using Tdata_m = typename Tmatrix::value_type; if (!spgsym) { - RI::Tensor mk_2D = RI_Util::Vector_to_Tensor(*mks_2D[ik], pv.get_col_size(), pv.get_row_size()); + RI::Tensor mk_2D + = RI_Util::Vector_to_Tensor(*mks_2D[ik], pv.get_col_size(), pv.get_row_size()); const Tdata_m frac = SPIN_multiple - * RI::Global_Func::convert(std::exp( - -ModuleBase::TWO_PI * ModuleBase::IMAG_UNIT * (kv.kvec_c[ik] * (RI_Util::array3_to_Vector3(cell) * ucell.latvec)))); + * RI::Global_Func::convert(std::exp( + -ModuleBase::TWO_PI * ModuleBase::IMAG_UNIT + * (kv.kvec_c[ik] * (RI_Util::array3_to_Vector3(cell) * ucell.latvec)))); if (static_cast(std::round(SPIN_multiple * kv.wk[ik] * kv.get_nkstot_full())) == 2) - { set_mR_2D(mk_2D * (frac * 0.5) + tensor_conj(mk_2D * (frac * 0.5))); } - else { set_mR_2D(mk_2D * frac); } + { + set_mR_2D(mk_2D * (frac * 0.5) + tensor_conj(mk_2D * (frac * 0.5))); + } + else + { + set_mR_2D(mk_2D * frac); + } } else { // traverse kstar, ik means ik_ibz - for (auto& isym_kvd : kv.kstars[ik % ik_list.size()]) + for (auto& isym_kvd: kv.kstars[ik % ik_list.size()]) { - RI::Tensor mk_2D = RI_Util::Vector_to_Tensor(*mks_2D[ik_full + is_k * kv.get_nkstot_full()], pv.get_col_size(), pv.get_row_size()); - const Tdata_m frac = SPIN_multiple - * RI::Global_Func::convert(std::exp( - -ModuleBase::TWO_PI * ModuleBase::IMAG_UNIT * ((isym_kvd.second * ucell.G) * (RI_Util::array3_to_Vector3(cell) * ucell.latvec)))); + RI::Tensor mk_2D + = RI_Util::Vector_to_Tensor(*mks_2D[ik_full + is_k * kv.get_nkstot_full()], + pv.get_col_size(), + pv.get_row_size()); + const Tdata_m frac + = SPIN_multiple + * RI::Global_Func::convert(std::exp( + -ModuleBase::TWO_PI * ModuleBase::IMAG_UNIT + * ((isym_kvd.second * ucell.G) * (RI_Util::array3_to_Vector3(cell) * ucell.latvec)))); set_mR_2D(mk_2D * frac); ++ik_full; } } } - for(int iwt0_2D=0; iwt0_2D!=mR_2D.shape[0]; ++iwt0_2D) - { - const int iwt0 =ModuleBase::GlobalFunc::IS_COLUMN_MAJOR_KS_SOLVER(PARAM.inp.ks_solver) - ? pv.local2global_col(iwt0_2D) - : pv.local2global_row(iwt0_2D); - int iat0, iw0_b, is0_b; - std::tie(iat0,iw0_b,is0_b) = RI_2D_Comm::get_iat_iw_is_block(ucell,iwt0); - const int it0 = ucell.iat2it[iat0]; - for(int iwt1_2D=0; iwt1_2D!=mR_2D.shape[1]; ++iwt1_2D) - { - const int iwt1 =ModuleBase::GlobalFunc::IS_COLUMN_MAJOR_KS_SOLVER(PARAM.inp.ks_solver) - ? pv.local2global_row(iwt1_2D) - : pv.local2global_col(iwt1_2D); - int iat1, iw1_b, is1_b; - std::tie(iat1,iw1_b,is1_b) = RI_2D_Comm::get_iat_iw_is_block(ucell,iwt1); - const int it1 = ucell.iat2it[iat1]; + for (int iwt0_2D = 0; iwt0_2D != mR_2D.shape[0]; ++iwt0_2D) + { + const int iwt0 = ModuleBase::GlobalFunc::IS_COLUMN_MAJOR_KS_SOLVER(PARAM.inp.ks_solver) + ? pv.local2global_col(iwt0_2D) + : pv.local2global_row(iwt0_2D); + int iat0, iw0_b, is0_b; + std::tie(iat0, iw0_b, is0_b) = RI_2D_Comm::get_iat_iw_is_block(ucell, iwt0); + const int it0 = ucell.iat2it[iat0]; + for (int iwt1_2D = 0; iwt1_2D != mR_2D.shape[1]; ++iwt1_2D) + { + const int iwt1 = ModuleBase::GlobalFunc::IS_COLUMN_MAJOR_KS_SOLVER(PARAM.inp.ks_solver) + ? pv.local2global_row(iwt1_2D) + : pv.local2global_col(iwt1_2D); + int iat1, iw1_b, is1_b; + std::tie(iat1, iw1_b, is1_b) = RI_2D_Comm::get_iat_iw_is_block(ucell, iwt1); + const int it1 = ucell.iat2it[iat1]; - const int is_b = RI_2D_Comm::get_is_block(is_k, is0_b, is1_b); - RI::Tensor &mR_a2D = mRs_a2D[is_b][iat0][{iat1,cell}]; - if (mR_a2D.empty()) { + const int is_b = RI_2D_Comm::get_is_block(is_k, is0_b, is1_b); + RI::Tensor& mR_a2D = mRs_a2D[is_b][iat0][{iat1, cell}]; + if (mR_a2D.empty()) + { mR_a2D = RI::Tensor( - {static_cast(ucell.atoms[it0].nw), - static_cast( - ucell.atoms[it1].nw)}); + {static_cast(ucell.atoms[it0].nw), static_cast(ucell.atoms[it1].nw)}); } - mR_a2D(iw0_b,iw1_b) = mR_2D(iwt0_2D, iwt1_2D); - } - } + mR_a2D(iw0_b, iw1_b) = mR_2D(iwt0_2D, iwt1_2D); + } + } } } - ModuleBase::timer::tick("RI_2D_Comm", "split_m2D_ktoR"); - return mRs_a2D; + ModuleBase::timer::tick("RI_2D_Comm", "split_m2D_ktoR"); + return mRs_a2D; } - -template -void RI_2D_Comm::add_Hexx( - const UnitCell &ucell, - const K_Vectors &kv, - const int ik, - const double alpha, - const std::vector>>> &Hs, - const Parallel_Orbitals& pv, - TK* hk) +template +void RI_2D_Comm::add_Hexx(const UnitCell& ucell, + const K_Vectors& kv, + const int ik, + const double alpha, + const std::vector>>>& Hs, + const Parallel_Orbitals& pv, + TK* hk) { - ModuleBase::TITLE("RI_2D_Comm","add_Hexx"); - ModuleBase::timer::tick("RI_2D_Comm", "add_Hexx"); + ModuleBase::TITLE("RI_2D_Comm", "add_Hexx"); + ModuleBase::timer::tick("RI_2D_Comm", "add_Hexx"); - const std::map> is_list = {{1,{0}}, {2,{kv.isk[ik]}}, {4,{0,1,2,3}}}; - for(const int is_b : is_list.at(PARAM.inp.nspin)) - { - int is0_b, is1_b; - std::tie(is0_b,is1_b) = RI_2D_Comm::split_is_block(is_b); - for(const auto &Hs_tmpA : Hs[is_b]) - { - const TA &iat0 = Hs_tmpA.first; - for(const auto &Hs_tmpB : Hs_tmpA.second) - { - const TA &iat1 = Hs_tmpB.first.first; - const TC &cell1 = Hs_tmpB.first.second; - const std::complex frac = alpha - * std::exp( ModuleBase::TWO_PI*ModuleBase::IMAG_UNIT * (kv.kvec_c[ik] * (RI_Util::array3_to_Vector3(cell1)*ucell.latvec)) ); - const RI::Tensor &H = Hs_tmpB.second; - for(size_t iw0_b=0; iw0_b> is_list = {{1, {0}}, {2, {kv.isk[ik]}}, {4, {0, 1, 2, 3}}}; + for (const int is_b: is_list.at(PARAM.inp.nspin)) + { + int is0_b, is1_b; + std::tie(is0_b, is1_b) = RI_2D_Comm::split_is_block(is_b); + for (const auto& Hs_tmpA: Hs[is_b]) + { + const TA& iat0 = Hs_tmpA.first; + for (const auto& Hs_tmpB: Hs_tmpA.second) + { + const TA& iat1 = Hs_tmpB.first.first; + const TC& cell1 = Hs_tmpB.first.second; + const std::complex frac + = alpha + * std::exp(ModuleBase::TWO_PI * ModuleBase::IMAG_UNIT + * (kv.kvec_c[ik] * (RI_Util::array3_to_Vector3(cell1) * ucell.latvec))); + const RI::Tensor& H = Hs_tmpB.second; + for (size_t iw0_b = 0; iw0_b < H.shape[0]; ++iw0_b) + { + const int iwt0 = RI_2D_Comm::get_iwt(ucell, iat0, iw0_b, is0_b); + if (pv.global2local_row(iwt0) < 0) + { continue; } - for(size_t iw1_b=0; iw1_b(H(iw0_b, iw1_b)) * RI::Global_Func::convert(frac), pv, hk); - } - } - } - } - } - ModuleBase::timer::tick("RI_2D_Comm", "add_Hexx"); + LCAO_domain::set_mat2d(iwt0, + iwt1, + RI::Global_Func::convert(H(iw0_b, iw1_b)) + * RI::Global_Func::convert(frac), + pv, + hk); + } + } + } + } + } + ModuleBase::timer::tick("RI_2D_Comm", "add_Hexx"); } -std::tuple -RI_2D_Comm::get_iat_iw_is_block(const UnitCell& ucell,const int& iwt) +std::tuple RI_2D_Comm::get_iat_iw_is_block(const UnitCell& ucell, const int& iwt) { - const int iat = ucell.iwt2iat[iwt]; - const int iw = ucell.iwt2iw[iwt]; - switch(PARAM.inp.nspin) - { - case 1: case 2: - return std::make_tuple(iat, iw, 0); - case 4: - return std::make_tuple(iat, iw/2, iw%2); - default: - throw std::invalid_argument(std::string(__FILE__)+" line "+std::to_string(__LINE__)); - } + const int iat = ucell.iwt2iat[iwt]; + const int iw = ucell.iwt2iw[iwt]; + switch (PARAM.inp.nspin) + { + case 1: + case 2: + return std::make_tuple(iat, iw, 0); + case 4: + return std::make_tuple(iat, iw / 2, iw % 2); + default: + throw std::invalid_argument(std::string(__FILE__) + " line " + std::to_string(__LINE__)); + } } int RI_2D_Comm::get_is_block(const int is_k, const int is_row_b, const int is_col_b) { - switch(PARAM.inp.nspin) - { - case 1: return 0; - case 2: return is_k; - case 4: return is_row_b*2+is_col_b; - default: throw std::invalid_argument(std::string(__FILE__)+" line "+std::to_string(__LINE__)); - } + switch (PARAM.inp.nspin) + { + case 1: + return 0; + case 2: + return is_k; + case 4: + return is_row_b * 2 + is_col_b; + default: + throw std::invalid_argument(std::string(__FILE__) + " line " + std::to_string(__LINE__)); + } } -std::tuple -RI_2D_Comm::split_is_block(const int is_b) +std::tuple RI_2D_Comm::split_is_block(const int is_b) { - switch(PARAM.inp.nspin) - { - case 1: case 2: - return std::make_tuple(0, 0); - case 4: - return std::make_tuple(is_b/2, is_b%2); - default: - throw std::invalid_argument(std::string(__FILE__)+" line "+std::to_string(__LINE__)); - } + switch (PARAM.inp.nspin) + { + case 1: + case 2: + return std::make_tuple(0, 0); + case 4: + return std::make_tuple(is_b / 2, is_b % 2); + default: + throw std::invalid_argument(std::string(__FILE__) + " line " + std::to_string(__LINE__)); + } } - - -int RI_2D_Comm::get_iwt(const UnitCell& ucell, - const int iat, - const int iw_b, - const int is_b) +int RI_2D_Comm::get_iwt(const UnitCell& ucell, const int iat, const int iw_b, const int is_b) { - const int it = ucell.iat2it[iat]; - const int ia = ucell.iat2ia[iat]; - int iw=-1; - switch(PARAM.inp.nspin) - { - case 1: case 2: - iw = iw_b; break; - case 4: - iw = iw_b*2+is_b; break; - default: - throw std::invalid_argument(std::string(__FILE__)+" line "+std::to_string(__LINE__)); - } - const int iwt = ucell.itiaiw2iwt(it,ia,iw); - return iwt; + const int it = ucell.iat2it[iat]; + const int ia = ucell.iat2ia[iat]; + int iw = -1; + switch (PARAM.inp.nspin) + { + case 1: + case 2: + iw = iw_b; + break; + case 4: + iw = iw_b * 2 + is_b; + break; + default: + throw std::invalid_argument(std::string(__FILE__) + " line " + std::to_string(__LINE__)); + } + const int iwt = ucell.itiaiw2iwt(it, ia, iw); + return iwt; } -template -void RI_2D_Comm::add_HexxR( - const int current_spin, - const double alpha, - const std::vector>>>& Hs, - const Parallel_Orbitals& pv, - const int npol, - hamilt::HContainer& hR, - const RI::Cell_Nearest* const cell_nearest) +template +void RI_2D_Comm::add_HexxR(const int current_spin, + const double alpha, + const std::vector>>>& Hs, + const Parallel_Orbitals& pv, + const int npol, + hamilt::HContainer& hR, + const RI::Cell_Nearest* const cell_nearest) { ModuleBase::TITLE("RI_2D_Comm", "add_HexxR"); ModuleBase::timer::tick("RI_2D_Comm", "add_HexxR"); - const std::map> is_list = { {1,{0}}, {2,{current_spin}}, {4,{0,1,2,3}} }; - for (const int is_hs : is_list.at(PARAM.inp.nspin)) + const std::map> is_list = {{1, {0}}, {2, {current_spin}}, {4, {0, 1, 2, 3}}}; + for (const int is_hs: is_list.at(PARAM.inp.nspin)) { int is0_b = 0, is1_b = 0; std::tie(is0_b, is1_b) = RI_2D_Comm::split_is_block(is_hs); - for (const auto& Hs_tmpA : Hs[is_hs]) + for (const auto& Hs_tmpA: Hs[is_hs]) { const TA& iat0 = Hs_tmpA.first; - for (const auto& Hs_tmpB : Hs_tmpA.second) + for (const auto& Hs_tmpB: Hs_tmpA.second) { const TA& iat1 = Hs_tmpB.first.first; const TC& cell = Hs_tmpB.first.second; const Abfs::Vector3_Order R = RI_Util::array3_to_Vector3( - (cell_nearest ? - cell_nearest->get_cell_nearest_discrete(iat0, iat1, cell) - : cell)); + (cell_nearest ? cell_nearest->get_cell_nearest_discrete(iat0, iat1, cell) : cell)); hamilt::BaseMatrix* HlocR = hR.find_matrix(iat0, iat1, R.x, R.y, R.z); auto row_indexes = pv.get_indexes_row(iat0); auto col_indexes = pv.get_indexes_col(iat1); const RI::Tensor& HexxR = (Tdata)alpha * Hs_tmpB.second; - for (int lw0_b = 0;lw0_b < row_indexes.size();lw0_b += npol) // block + for (int lw0_b = 0; lw0_b < row_indexes.size(); lw0_b += npol) // block { const int& gw0 = row_indexes[lw0_b] / npol; const int& lw0 = (npol == 2) ? (lw0_b + is0_b) : lw0_b; - for (int lw1_b = 0;lw1_b < col_indexes.size();lw1_b += npol) + for (int lw1_b = 0; lw1_b < col_indexes.size(); lw1_b += npol) { const int& gw1 = col_indexes[lw1_b] / npol; const int& lw1 = (npol == 2) ? (lw1_b + is1_b) : lw1_b; diff --git a/source/module_ri/RI_Util.hpp b/source/module_ri/RI_Util.hpp index c08043fd00..64029a84cf 100644 --- a/source/module_ri/RI_Util.hpp +++ b/source/module_ri/RI_Util.hpp @@ -8,87 +8,85 @@ #include "RI_Util.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_base/global_function.h" +#include "source_base/global_function.h" namespace RI_Util { - inline std::array - get_Born_vonKarmen_period(const K_Vectors &kv) - { - return std::array{kv.nmp[0], kv.nmp[1], kv.nmp[2]}; - } +inline std::array get_Born_vonKarmen_period(const K_Vectors& kv) +{ + return std::array{kv.nmp[0], kv.nmp[1], kv.nmp[2]}; +} - template - std::vector> - get_Born_von_Karmen_cells( const std::array &Born_von_Karman_period ) - { - using namespace RI::Array_Operator; - std::vector> Born_von_Karman_cells; - for( int c=0; c{c} % Born_von_Karman_period ); - return Born_von_Karman_cells; - } +template +std::vector> get_Born_von_Karmen_cells(const std::array& Born_von_Karman_period) +{ + using namespace RI::Array_Operator; + std::vector> Born_von_Karman_cells; + for (int c = 0; c < Born_von_Karman_period[0]; ++c) + Born_von_Karman_cells.emplace_back(std::array{c} % Born_von_Karman_period); + return Born_von_Karman_cells; +} - template - std::vector> - get_Born_von_Karmen_cells( const std::array &Born_von_Karman_period ) - { - using namespace RI::Array_Operator; +template +std::vector> get_Born_von_Karmen_cells(const std::array& Born_von_Karman_period) +{ + using namespace RI::Array_Operator; - std::array sub_Born_von_Karman_period; - for(int i=0; i sub_Born_von_Karman_period; + for (int i = 0; i < Ndim - 1; ++i) + sub_Born_von_Karman_period[i] = Born_von_Karman_period[i]; - std::vector> Born_von_Karman_cells; - for( const std::array &sub_cell : get_Born_von_Karmen_cells(sub_Born_von_Karman_period) ) - for( Tcell c=0; c cell; - for(int i=0; i{c} % std::array{Born_von_Karman_period.back()})[0]; - Born_von_Karman_cells.emplace_back(std::move(cell)); - } - return Born_von_Karman_cells; - } + std::vector> Born_von_Karman_cells; + for (const std::array& sub_cell: get_Born_von_Karmen_cells(sub_Born_von_Karman_period)) + for (Tcell c = 0; c < Born_von_Karman_period.back(); ++c) + { + std::array cell; + for (int i = 0; i < Ndim - 1; ++i) + cell[i] = sub_cell[i]; + cell.back() = (std::array{c} % std::array{Born_von_Karman_period.back()})[0]; + Born_von_Karman_cells.emplace_back(std::move(cell)); + } + return Born_von_Karman_cells; +} - /* example for Ndim=3: - template - std::vector> - get_Born_von_Karmen_cells( const std::array &Born_von_Karman_period ) - { - using namespace Array_Operator; - std::vector> Born_von_Karman_cells; - for( int ix=0; ix{ix,iy,iz} % Born_von_Karman_period ); - return Born_von_Karman_cells; - } - */ +/* example for Ndim=3: +template +std::vector> +get_Born_von_Karmen_cells( const std::array &Born_von_Karman_period ) +{ + using namespace Array_Operator; + std::vector> Born_von_Karman_cells; + for( int ix=0; ix{ix,iy,iz} % Born_von_Karman_period ); + return Born_von_Karman_cells; +} +*/ - inline std::unordered_map>> - update_coulomb_param( - const std::unordered_map>> &coulomb_param, - const double volumn, - const int nkstot) - { - std::unordered_map>> coulomb_param_updated = coulomb_param; - for(auto ¶m_list : coulomb_param_updated) - { - for(auto ¶m : param_list.second) - { - if(param.at("Rcut_type") == "spencer") - { - // 4/3 * pi * Rcut^3 = V_{supercell} = V_{unitcell} * Nk - const int nspin0 = (PARAM.inp.nspin==2) ? 2 : 1; - const double Rcut = std::pow(0.75 * nkstot/nspin0 * volumn / (ModuleBase::PI), 1.0/3.0); - param["Rcut"] = ModuleBase::GlobalFunc::TO_STRING(Rcut); - } - } - } - return coulomb_param_updated; - } +inline std::unordered_map>> + update_coulomb_param(const std::unordered_map>>& coulomb_param, + const double volumn, + const int nkstot) +{ + std::unordered_map>> + coulomb_param_updated = coulomb_param; + for (auto& param_list: coulomb_param_updated) + { + for (auto& param: param_list.second) + { + if (param.at("Rcut_type") == "spencer") + { + // 4/3 * pi * Rcut^3 = V_{supercell} = V_{unitcell} * Nk + const int nspin0 = (PARAM.inp.nspin == 2) ? 2 : 1; + const double Rcut = std::pow(0.75 * nkstot / nspin0 * volumn / (ModuleBase::PI), 1.0 / 3.0); + param["Rcut"] = ModuleBase::GlobalFunc::TO_STRING(Rcut); + } + } + } + return coulomb_param_updated; } +} // namespace RI_Util #endif \ No newline at end of file diff --git a/source/module_ri/RPA_LRI.h b/source/module_ri/RPA_LRI.h index e194a8ea8d..2419f304d9 100644 --- a/source/module_ri/RPA_LRI.h +++ b/source/module_ri/RPA_LRI.h @@ -6,11 +6,11 @@ #ifndef RPA_LRI_H #define RPA_LRI_H -#include "source_esolver/esolver_ks_lcao.h" #include "LRI_CV.h" +#include "source_esolver/esolver_ks_lcao.h" // #include "module_xc/exx_info.h" // #include "module_basis/module_ao/ORB_atomic_lm.h" -#include "module_base/matrix.h" +#include "source_base/matrix.h" // #include "module_ri/Exx_LRI.h" // #include #include @@ -22,7 +22,8 @@ class Parallel_Orbitals; class K_Vectors; -template class RPA_LRI +template +class RPA_LRI { private: using TA = int; @@ -33,27 +34,27 @@ template class RPA_LRI using TatomR = std::array; // tmp public: - RPA_LRI(const Exx_Info::Exx_Info_RI &info_in) : info(info_in) + RPA_LRI(const Exx_Info::Exx_Info_RI& info_in) : info(info_in) { } ~RPA_LRI(){}; - void init(const MPI_Comm &mpi_comm_in, const K_Vectors &kv_in, const std::vector& orb_cutoff); - void cal_rpa_cv(const UnitCell &ucell); + void init(const MPI_Comm& mpi_comm_in, const K_Vectors& kv_in, const std::vector& orb_cutoff); + void cal_rpa_cv(const UnitCell& ucell); void cal_postSCF_exx(const elecstate::DensityMatrix& dm, - const MPI_Comm& mpi_comm_in, - const UnitCell& ucell, - const K_Vectors& kv, - const LCAO_Orbitals& orb); + const MPI_Comm& mpi_comm_in, + const UnitCell& ucell, + const K_Vectors& kv, + const LCAO_Orbitals& orb); void out_for_RPA(const UnitCell& ucell, - const Parallel_Orbitals& parav, - const psi::Psi& psi, - const elecstate::ElecState* pelec); + const Parallel_Orbitals& parav, + const psi::Psi& psi, + const elecstate::ElecState* pelec); void out_eigen_vector(const Parallel_Orbitals& parav, const psi::Psi& psi); void out_struc(const ModuleBase::Matrix3& latvec, const ModuleBase::Matrix3& G); - void out_bands(const elecstate::ElecState *pelec); + void out_bands(const elecstate::ElecState* pelec); - void out_Cs(const UnitCell &ucell); - void out_coulomb_k(const UnitCell &ucell); + void out_Cs(const UnitCell& ucell); + void out_coulomb_k(const UnitCell& ucell); // void print_matrix(char *desc, const ModuleBase::matrix &mat); // void print_complex_matrix(char *desc, const ModuleBase::ComplexMatrix &mat); // void init(const MPI_Comm &mpi_comm_in); @@ -62,8 +63,8 @@ template class RPA_LRI Tdata Erpa; private: - const Exx_Info::Exx_Info_RI &info; - const K_Vectors *p_kv=nullptr; + const Exx_Info::Exx_Info_RI& info; + const K_Vectors* p_kv = nullptr; MPI_Comm mpi_comm; std::vector orb_cutoff_; diff --git a/source/module_ri/abfs.h b/source/module_ri/abfs.h index b6e6694e11..e5a9a8b7ef 100644 --- a/source/module_ri/abfs.h +++ b/source/module_ri/abfs.h @@ -1,21 +1,21 @@ #ifndef ABFS_H -#define ABFS_H +#define ABFS_H -#include "../module_base/vector3.h" -#include "../module_base/matrix.h" +#include "../source_base/matrix.h" +#include "../source_base/vector3.h" #include "exx_abfs.h" -#include -#include #include #include #include +#include +#include class Abfs { -public: - - template class Vector3_Order; + public: + template + class Vector3_Order; }; -#endif // ABFS_H +#endif // ABFS_H diff --git a/source/module_ri/conv_coulomb_pot_k.cpp b/source/module_ri/conv_coulomb_pot_k.cpp index fb77e22d04..9e01881e4e 100644 --- a/source/module_ri/conv_coulomb_pot_k.cpp +++ b/source/module_ri/conv_coulomb_pot_k.cpp @@ -1,134 +1,163 @@ #include "conv_coulomb_pot_k.h" -#include "../module_base/constants.h" -#include "module_parameter/parameter.h" + #include "../module_basis/module_ao/ORB_atomic_lm.h" #include "../module_hamilt_pw/hamilt_pwdft/global.h" +#include "../source_base/constants.h" +#include "module_parameter/parameter.h" namespace Conv_Coulomb_Pot_K { - std::vector cal_psi_fock_limits( - const std::vector & psif) - { - std::vector psik2_ccp(psif.size()); - for( size_t ik=0; ik cal_psi_fock_spencer( - const std::vector &psif, - const std::vector &k_radial, - const double hf_Rcut) - { - std::vector psik2_ccp(psif.size()); - for (size_t ik = 0; ik < psif.size(); ++ik) - { psik2_ccp[ik] = ModuleBase::FOUR_PI * psif[ik] * (1 - std::cos(k_radial[ik] * hf_Rcut)); } - return psik2_ccp; - } - - - std::vector cal_psi_erfc_limits( - const std::vector & psif, - const std::vector & k_radial, - const double erfc_omega) - { - std::vector psik2_ccp(psif.size()); - for( size_t ik=0; ik cal_psi_fock_limits(const std::vector& psif) +{ + std::vector psik2_ccp(psif.size()); + for (size_t ik = 0; ik < psif.size(); ++ik) + { + psik2_ccp[ik] = ModuleBase::FOUR_PI * psif[ik]; + } + return psik2_ccp; +} +// rongshi add 2022-07-27 +// Sphere truction -- Spencer +std::vector cal_psi_fock_spencer(const std::vector& psif, + const std::vector& k_radial, + const double hf_Rcut) +{ + std::vector psik2_ccp(psif.size()); + for (size_t ik = 0; ik < psif.size(); ++ik) + { + psik2_ccp[ik] = ModuleBase::FOUR_PI * psif[ik] * (1 - std::cos(k_radial[ik] * hf_Rcut)); + } + return psik2_ccp; +} - template<> - Numerical_Orbital_Lm cal_orbs_ccp( - const Numerical_Orbital_Lm &orbs, - const std::unordered_map>> &coulomb_param, - const double rmesh_times) - { - std::vector psik2_ccp(orbs.get_psif().size(), 0.0); +std::vector cal_psi_erfc_limits(const std::vector& psif, + const std::vector& k_radial, + const double erfc_omega) +{ + std::vector psik2_ccp(psif.size()); + for (size_t ik = 0; ik < psif.size(); ++ik) + { + psik2_ccp[ik] = ModuleBase::FOUR_PI * psif[ik] + * (1 - std::exp(-(k_radial[ik] * k_radial[ik]) / (4 * erfc_omega * erfc_omega))); + } + return psik2_ccp; +} - for(const auto ¶m_list : coulomb_param) - { - switch(param_list.first) - { - case Conv_Coulomb_Pot_K::Coulomb_Type::Fock: - { - for(const auto ¶m : param_list.second) - { - if(param.at("Rcut_type") == "limits") - { psik2_ccp = psik2_ccp + std::stod(param.at("alpha")) * cal_psi_fock_limits( orbs.get_psif() ); } - else if(param.at("Rcut_type") == "spencer") - { psik2_ccp = psik2_ccp + std::stod(param.at("alpha")) * cal_psi_fock_spencer( orbs.get_psif(), orbs.get_k_radial(), std::stod(param.at("Rcut")) ); } - else - { throw std::invalid_argument( "Rcut_type = " + param.at("Rcut_type") + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__) ); } - } - break; - } - case Conv_Coulomb_Pot_K::Coulomb_Type::Erfc: - { - for(const auto ¶m : param_list.second) - { - if(param.at("Rcut_type") == "limits") - { psik2_ccp = psik2_ccp + std::stod(param.at("alpha")) * cal_psi_erfc_limits( orbs.get_psif(), orbs.get_k_radial(), std::stod(param.at("omega")) ); } - else - { throw std::invalid_argument( "Rcut_type = " + param.at("Rcut_type") + " in " + std::string(__FILE__) + " line " + std::to_string(__LINE__) ); } - } - break; - } - default: - { - throw std::invalid_argument( std::string(__FILE__) + " line " + std::to_string(__LINE__) ); - } - } - } +template <> +Numerical_Orbital_Lm cal_orbs_ccp( + const Numerical_Orbital_Lm& orbs, + const std::unordered_map>>& + coulomb_param, + const double rmesh_times) +{ + std::vector psik2_ccp(orbs.get_psif().size(), 0.0); - const double dr = orbs.get_rab().back(); - const int Nr = (static_cast(orbs.getNr()*rmesh_times)) | 1; + for (const auto& param_list: coulomb_param) + { + switch (param_list.first) + { + case Conv_Coulomb_Pot_K::Coulomb_Type::Fock: { + for (const auto& param: param_list.second) + { + if (param.at("Rcut_type") == "limits") + { + psik2_ccp = psik2_ccp + std::stod(param.at("alpha")) * cal_psi_fock_limits(orbs.get_psif()); + } + else if (param.at("Rcut_type") == "spencer") + { + psik2_ccp = psik2_ccp + + std::stod(param.at("alpha")) + * cal_psi_fock_spencer(orbs.get_psif(), + orbs.get_k_radial(), + std::stod(param.at("Rcut"))); + } + else + { + throw std::invalid_argument("Rcut_type = " + param.at("Rcut_type") + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } + } + break; + } + case Conv_Coulomb_Pot_K::Coulomb_Type::Erfc: { + for (const auto& param: param_list.second) + { + if (param.at("Rcut_type") == "limits") + { + psik2_ccp = psik2_ccp + + std::stod(param.at("alpha")) + * cal_psi_erfc_limits(orbs.get_psif(), + orbs.get_k_radial(), + std::stod(param.at("omega"))); + } + else + { + throw std::invalid_argument("Rcut_type = " + param.at("Rcut_type") + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } + } + break; + } + default: { + throw std::invalid_argument(std::string(__FILE__) + " line " + std::to_string(__LINE__)); + } + } + } - std::vector rab(Nr); - for( size_t ir=0; ir(orbs.getNr() * rmesh_times)) | 1; - std::vector r_radial(Nr); - for( size_t ir=0; ir rab(Nr); + for (size_t ir = 0; ir < std::min(orbs.getNr(), Nr); ++ir) + { + rab[ir] = orbs.getRab(ir); + } + for (size_t ir = orbs.getNr(); ir < Nr; ++ir) + { + rab[ir] = dr; + } - Numerical_Orbital_Lm orbs_ccp; - orbs_ccp.set_orbital_info( - orbs.getLabel(), - orbs.getType(), - orbs.getL(), - orbs.getChi(), - Nr, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(rab), - ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_radial), - Numerical_Orbital_Lm::Psi_Type::Psik2, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(psik2_ccp), - orbs.getNk(), - orbs.getDk(), - orbs.getDruniform(), - false, - true, PARAM.inp.cal_force); - return orbs_ccp; - } + std::vector r_radial(Nr); + for (size_t ir = 0; ir < std::min(orbs.getNr(), Nr); ++ir) + { + r_radial[ir] = orbs.getRadial(ir); + } + for (size_t ir = orbs.getNr(); ir < Nr; ++ir) + { + r_radial[ir] = orbs.get_r_radial().back() + (ir - orbs.getNr() + 1) * dr; + } - template<> - double get_rmesh_proportion( - const Numerical_Orbital_Lm &orbs, - const double psi_threshold) - { - for(int ir=orbs.getNr()-1; ir>=0; --ir) - { - if(std::abs(orbs.getPsi(ir))>=psi_threshold) - { return static_cast(ir)/orbs.getNr(); } - } - return 0.0; - } + Numerical_Orbital_Lm orbs_ccp; + orbs_ccp.set_orbital_info(orbs.getLabel(), + orbs.getType(), + orbs.getL(), + orbs.getChi(), + Nr, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(rab), + ModuleBase::GlobalFunc::VECTOR_TO_PTR(r_radial), + Numerical_Orbital_Lm::Psi_Type::Psik2, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(psik2_ccp), + orbs.getNk(), + orbs.getDk(), + orbs.getDruniform(), + false, + true, + PARAM.inp.cal_force); + return orbs_ccp; +} +template <> +double get_rmesh_proportion(const Numerical_Orbital_Lm& orbs, const double psi_threshold) +{ + for (int ir = orbs.getNr() - 1; ir >= 0; --ir) + { + if (std::abs(orbs.getPsi(ir)) >= psi_threshold) + { + return static_cast(ir) / orbs.getNr(); + } + } + return 0.0; } + +} // namespace Conv_Coulomb_Pot_K diff --git a/source/module_ri/exx_abfs-abfs_index.h b/source/module_ri/exx_abfs-abfs_index.h index 09cc493f2e..3b428001c3 100644 --- a/source/module_ri/exx_abfs-abfs_index.h +++ b/source/module_ri/exx_abfs-abfs_index.h @@ -1,19 +1,20 @@ #ifndef EXX_ABFS_ABFS_INDEX_H #define EXX_ABFS_ABFS_INDEX_H +#include "../module_basis/module_ao/ORB_atomic_lm.h" +#include "../source_base/element_basis_index.h" #include "exx_abfs.h" #include -#include "../module_base/element_basis_index.h" -#include "../module_basis/module_ao/ORB_atomic_lm.h" class LCAO_Orbitals; class Exx_Abfs::Abfs_Index { -public: - static ModuleBase::Element_Basis_Index::Range construct_range( const LCAO_Orbitals &orb ); - static ModuleBase::Element_Basis_Index::Range construct_range( const std::vector>> &orb ); + public: + static ModuleBase::Element_Basis_Index::Range construct_range(const LCAO_Orbitals& orb); + static ModuleBase::Element_Basis_Index::Range construct_range( + const std::vector>>& orb); }; -#endif // EXX_ABFS_ABFS_INDEX_H \ No newline at end of file +#endif // EXX_ABFS_ABFS_INDEX_H \ No newline at end of file diff --git a/source/module_ri/exx_abfs-construct_orbs.cpp b/source/module_ri/exx_abfs-construct_orbs.cpp index fe731d7dbd..dc8fd03346 100644 --- a/source/module_ri/exx_abfs-construct_orbs.cpp +++ b/source/module_ri/exx_abfs-construct_orbs.cpp @@ -1,503 +1,501 @@ #include "exx_abfs-construct_orbs.h" -#include "module_parameter/parameter.h" #include "ABFs_Construct-PCA.h" -#include "module_base/gram_schmidt_orth-inl.h" -#include "module_base/gram_schmidt_orth.h" #include "module_basis/module_ao/ORB_read.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" //for ucell +#include "module_hamilt_pw/hamilt_pwdft/global.h" //for ucell +#include "module_parameter/parameter.h" #include "module_ri/test_code/exx_abfs-construct_orbs-test.h" // Peize Lin test +#include "source_base/gram_schmidt_orth-inl.h" +#include "source_base/gram_schmidt_orth.h" std::vector>> Exx_Abfs::Construct_Orbs::change_orbs( - const LCAO_Orbitals &orbs_in, - const double kmesh_times ) + const LCAO_Orbitals& orbs_in, + const double kmesh_times) { - ModuleBase::TITLE("Exx_Abfs::Construct_Orbs::change_orbs"); - - std::vector>> orbs; - orbs.resize( orbs_in.get_ntype() ); - for (int T = 0; T < orbs_in.get_ntype() ; T++) - { - orbs[T].resize( orbs_in.Phi[T].getLmax()+1 ); - for (int L=0; L <= orbs_in.Phi[T].getLmax() ; L++) - { - orbs[T][L].resize( orbs_in.Phi[T].getNchi(L) ); - for (int N = 0; N < orbs_in.Phi[T].getNchi(L); ++N) - { - const auto &orb_origin = orbs_in.Phi[T].PhiLN(L,N); - orbs[T][L][N].set_orbital_info( - orb_origin.getLabel(), - orb_origin.getType(), - orb_origin.getL(), - orb_origin.getChi(), - orb_origin.getNr(), - orb_origin.getRab(), - orb_origin.getRadial(), - Numerical_Orbital_Lm::Psi_Type::Psi, - orb_origin.getPsi(), - static_cast(orb_origin.getNk() * kmesh_times) | 1, // Nk must be odd - orb_origin.getDk(), // Peize Lin change 2017-04-16 -// orb_origin.getDk() / kmesh_times, - orb_origin.getDruniform(), - false, - true, PARAM.inp.cal_force); - } - } - } - - for (int T = 0; T < orbs.size() ; T++) - { - for (int L=orbs[T].size()-1; L >= 0 ; L--) - { - if (orbs[T][L].size()>0) - break; - else - orbs[T].resize(L); - } - } - return orbs; + ModuleBase::TITLE("Exx_Abfs::Construct_Orbs::change_orbs"); + + std::vector>> orbs; + orbs.resize(orbs_in.get_ntype()); + for (int T = 0; T < orbs_in.get_ntype(); T++) + { + orbs[T].resize(orbs_in.Phi[T].getLmax() + 1); + for (int L = 0; L <= orbs_in.Phi[T].getLmax(); L++) + { + orbs[T][L].resize(orbs_in.Phi[T].getNchi(L)); + for (int N = 0; N < orbs_in.Phi[T].getNchi(L); ++N) + { + const auto& orb_origin = orbs_in.Phi[T].PhiLN(L, N); + orbs[T][L][N].set_orbital_info(orb_origin.getLabel(), + orb_origin.getType(), + orb_origin.getL(), + orb_origin.getChi(), + orb_origin.getNr(), + orb_origin.getRab(), + orb_origin.getRadial(), + Numerical_Orbital_Lm::Psi_Type::Psi, + orb_origin.getPsi(), + static_cast(orb_origin.getNk() * kmesh_times) | 1, // Nk must be odd + orb_origin.getDk(), // Peize Lin change 2017-04-16 + // orb_origin.getDk() / kmesh_times, + orb_origin.getDruniform(), + false, + true, + PARAM.inp.cal_force); + } + } + } + + for (int T = 0; T < orbs.size(); T++) + { + for (int L = orbs[T].size() - 1; L >= 0; L--) + { + if (orbs[T][L].size() > 0) + break; + else + orbs[T].resize(L); + } + } + return orbs; } std::vector>> Exx_Abfs::Construct_Orbs::change_orbs( - const std::vector>> &orbs_in, - const double kmesh_times ) + const std::vector>>& orbs_in, + const double kmesh_times) { - ModuleBase::TITLE("Exx_Abfs::Construct_Orbs::change_orbs"); - return orbital( get_psi(orbs_in), orbs_in, kmesh_times ); + ModuleBase::TITLE("Exx_Abfs::Construct_Orbs::change_orbs"); + return orbital(get_psi(orbs_in), orbs_in, kmesh_times); } // P = u/r * Y /* template std::vector>> Exx_Abfs::Construct_Orbs::abfs_same_atom( - const Orbs_Type &orbs, - const double kmesh_times, - const double norm_threshold ) + const Orbs_Type &orbs, + const double kmesh_times, + const double norm_threshold ) { - const std::vector>>> - abfs_same_atom_psir = psir_mult_psir( orbs ); - const std::vector>>> - abfs_same_atom_psir_orth = orth( abfs_same_atom_psir, orbs, norm_threshold ); - const std::vector>>> - abfs_same_atom_psi_orth = div_r( abfs_same_atom_psir_orth, orbs.get_r_radial ); - const std::vector>> - abfs_same_atom = orbital( abfs_same_atom_psi_orth, orbs, kmesh_times ); - return abfs_same_atom; + const std::vector>>> + abfs_same_atom_psir = psir_mult_psir( orbs ); + const std::vector>>> + abfs_same_atom_psir_orth = orth( abfs_same_atom_psir, orbs, norm_threshold ); + const std::vector>>> + abfs_same_atom_psi_orth = div_r( abfs_same_atom_psir_orth, orbs.get_r_radial ); + const std::vector>> + abfs_same_atom = orbital( abfs_same_atom_psi_orth, orbs, kmesh_times ); + return abfs_same_atom; } */ // P = f * Y std::vector>> Exx_Abfs::Construct_Orbs::abfs_same_atom( - const UnitCell &ucell, + const UnitCell& ucell, const LCAO_Orbitals& orb, - const std::vector>> &orbs, - const double kmesh_times_mot, - const double times_threshold ) + const std::vector>>& orbs, + const double kmesh_times_mot, + const double times_threshold) { - ModuleBase::TITLE("Exx_Abfs::Construct_Orbs::abfs_same_atom"); - - const std::vector>>> - abfs_same_atom_psi = psi_mult_psi( orbs ); - - const std::vector>>> - abfs_same_atom_orth_psi = orth( abfs_same_atom_psi, orbs ); - const std::vector>> - abfs_same_atom = orbital( abfs_same_atom_orth_psi, orbs, 1 ); - - #if TEST_EXX_LCAO==1 - print_orbs(abfs_same_atom_psi,"abfs_same_atom_psi.dat"); - print_orbs(abfs_same_atom_orth_psi,"abfs_same_atom_orth_psi.dat"); - #elif TEST_EXX_LCAO==-1 - #error "TEST_EXX_LCAO" - #endif - - const std::vector>>> - abfs_same_atom_pca_psi = pca(ucell,orb, abfs_same_atom, orbs, kmesh_times_mot, times_threshold ); - - #if TEST_EXX_LCAO==1 - print_orbs(abfs_same_atom_pca_psi,"abfs_same_atom_pca_psi.dat"); - #elif TEST_EXX_LCAO==-1 - #error "TEST_EXX_LCAO" - #endif - - const std::vector>> - abfs_same_atom_pca = orbital( abfs_same_atom_pca_psi, orbs, 1 ); - return abfs_same_atom_pca; + ModuleBase::TITLE("Exx_Abfs::Construct_Orbs::abfs_same_atom"); + + const std::vector>>> abfs_same_atom_psi = psi_mult_psi(orbs); + + const std::vector>>> abfs_same_atom_orth_psi + = orth(abfs_same_atom_psi, orbs); + const std::vector>> abfs_same_atom + = orbital(abfs_same_atom_orth_psi, orbs, 1); + +#if TEST_EXX_LCAO == 1 + print_orbs(abfs_same_atom_psi, "abfs_same_atom_psi.dat"); + print_orbs(abfs_same_atom_orth_psi, "abfs_same_atom_orth_psi.dat"); +#elif TEST_EXX_LCAO == -1 +#error "TEST_EXX_LCAO" +#endif + + const std::vector>>> abfs_same_atom_pca_psi + = pca(ucell, orb, abfs_same_atom, orbs, kmesh_times_mot, times_threshold); + +#if TEST_EXX_LCAO == 1 + print_orbs(abfs_same_atom_pca_psi, "abfs_same_atom_pca_psi.dat"); +#elif TEST_EXX_LCAO == -1 +#error "TEST_EXX_LCAO" +#endif + + const std::vector>> abfs_same_atom_pca + = orbital(abfs_same_atom_pca_psi, orbs, 1); + return abfs_same_atom_pca; } /* template<> std::vector>>> Exx_Abfs::Construct_Orbs::psi_mult_psi( - const LCAO_Orbitals &orbs ) + const LCAO_Orbitals &orbs ) { - std::vector>>> psi_mult_psi( orbs.get_ntype() ); - for( int T=0; T!=orbs.get_ntype(); ++T ) - { - psi_mult_psi[T].resize( 2*orbs.Phi[T].getLmax()+1 ); - for( int L1=0; L1<=orbs.Phi[T].getLmax(); ++L1 ) - { - for( int N1=0; N1!=orbs.Phi[T].getNchi(L1); ++N1 ) - { - for( int L2=L1; L2<=orbs.Phi[T].getLmax(); ++L2 ) - { - for( int N2=((L2==L1)?N1:0); N2!=orbs.Phi[T].getNchi(L2); ++N2 ) - { - assert( orbs.Phi[T].PhiLN(L1,N1).getNr()==orbs.Phi[T].PhiLN(L2,N2).getNr() ); - - std::vector mult_psir( orbs.Phi[T].PhiLN(L1,N1).getNr() ); - for( int ir=0; ir!=orbs.Phi[T].PhiLN(L1,N1).getNr(); ++ir) - { - mult_psir[ir] = orbs.Phi[T].PhiLN(L1,N1).getPsi(ir) * orbs.Phi[T].PhiLN(L2,N2).getPsi(ir) ; - } - for( int L_new=std::abs(L2-L1); L_new<=L1+L2; ++L_new ) - { - psi_mult_psi[T][L_new].push_back(mult_psir); - } - } - } - } - } - } - return psi_mult_psi; + std::vector>>> psi_mult_psi( orbs.get_ntype() ); + for( int T=0; T!=orbs.get_ntype(); ++T ) + { + psi_mult_psi[T].resize( 2*orbs.Phi[T].getLmax()+1 ); + for( int L1=0; L1<=orbs.Phi[T].getLmax(); ++L1 ) + { + for( int N1=0; N1!=orbs.Phi[T].getNchi(L1); ++N1 ) + { + for( int L2=L1; L2<=orbs.Phi[T].getLmax(); ++L2 ) + { + for( int N2=((L2==L1)?N1:0); N2!=orbs.Phi[T].getNchi(L2); ++N2 ) + { + assert( orbs.Phi[T].PhiLN(L1,N1).getNr()==orbs.Phi[T].PhiLN(L2,N2).getNr() ); + + std::vector mult_psir( orbs.Phi[T].PhiLN(L1,N1).getNr() ); + for( int ir=0; ir!=orbs.Phi[T].PhiLN(L1,N1).getNr(); ++ir) + { + mult_psir[ir] = orbs.Phi[T].PhiLN(L1,N1).getPsi(ir) * orbs.Phi[T].PhiLN(L2,N2).getPsi(ir) ; + } + for( int L_new=std::abs(L2-L1); L_new<=L1+L2; ++L_new ) + { + psi_mult_psi[T][L_new].push_back(mult_psir); + } + } + } + } + } + } + return psi_mult_psi; } */ std::vector>>> Exx_Abfs::Construct_Orbs::psi_mult_psi( - const std::vector>> &orbs ) + const std::vector>>& orbs) { - std::vector>>> psi_mult_psi( orbs.size() ); - for( int T=0; T!=orbs.size(); ++T ) - { - psi_mult_psi[T].resize( 2*orbs[T].size()-1 ); - for( int L1=0; L1!=orbs[T].size(); ++L1 ) - { - for( int N1=0; N1!=orbs[T][L1].size(); ++N1 ) - { - for( int L2=L1; L2!=orbs[T].size(); ++L2 ) - { - for( int N2=((L2==L1)?N1:0); N2!=orbs[T][L2].size(); ++N2 ) - { - assert( orbs[T][L1][N1].getNr()==orbs[T][L2][N2].getNr() ); - - std::vector mult_psir( orbs[T][L1][N1].getNr() ); - for( int ir=0; ir!=orbs[T][L1][N1].getNr(); ++ir) - { - mult_psir[ir] = orbs[T][L1][N1].getPsi(ir) * orbs[T][L2][N2].getPsi(ir) ; - } - for( int L_new=std::abs(L1-L2); L_new<=L1+L2; ++L_new ) - { - psi_mult_psi[T][L_new].push_back(mult_psir); - } - } - } - } - } - } - return psi_mult_psi; + std::vector>>> psi_mult_psi(orbs.size()); + for (int T = 0; T != orbs.size(); ++T) + { + psi_mult_psi[T].resize(2 * orbs[T].size() - 1); + for (int L1 = 0; L1 != orbs[T].size(); ++L1) + { + for (int N1 = 0; N1 != orbs[T][L1].size(); ++N1) + { + for (int L2 = L1; L2 != orbs[T].size(); ++L2) + { + for (int N2 = ((L2 == L1) ? N1 : 0); N2 != orbs[T][L2].size(); ++N2) + { + assert(orbs[T][L1][N1].getNr() == orbs[T][L2][N2].getNr()); + + std::vector mult_psir(orbs[T][L1][N1].getNr()); + for (int ir = 0; ir != orbs[T][L1][N1].getNr(); ++ir) + { + mult_psir[ir] = orbs[T][L1][N1].getPsi(ir) * orbs[T][L2][N2].getPsi(ir); + } + for (int L_new = std::abs(L1 - L2); L_new <= L1 + L2; ++L_new) + { + psi_mult_psi[T][L_new].push_back(mult_psir); + } + } + } + } + } + } + return psi_mult_psi; } /* template<> std::vector>>> Exx_Abfs::Construct_Orbs::psir_mult_psir( - const LCAO_Orbitals &orbs ) + const LCAO_Orbitals &orbs ) { - std::vector>>> psir_mult_psir( orbs.get_ntype() ); - for( int T=0; T!=orbs.get_ntype(); ++T ) - { - psir_mult_psir[T].resize( 2*orbs.Phi[T].getLmax()+1 ); - for( int L1=0; L1<=orbs.Phi[T].getLmax(); ++L1 ) - { - for( int N1=0; N1!=orbs.Phi[T].getNchi(L1); ++N1 ) - { - for( int L2=L1; L2<=orbs.Phi[T].getLmax(); ++L2 ) - { - for( int N2=((L2==L1)?N1:0); N2!=orbs.Phi[T].getNchi(L2); ++N2 ) - { - assert( orbs.Phi[T].PhiLN(L1,N1).getNr()==orbs.Phi[T].PhiLN(L2,N2).getNr() ); - - std::vector mult_psir( orbs.Phi[T].PhiLN(L1,N1).getNr() ); - for( int ir=0; ir!=orbs.Phi[T].PhiLN(L1,N1).getNr(); ++ir) - { - mult_psir[ir] = orbs.Phi[T].PhiLN(L1,N1).getPsi_r(ir) * orbs.Phi[T].PhiLN(L2,N2).getPsi_r(ir) ; - } - for( int L_new=std::abs(L1-L2); L_new<=L1+L2; ++L_new ) - { - psir_mult_psir[T][L_new].push_back(mult_psir); - } - } - } - } - } - } - return psir_mult_psir; + std::vector>>> psir_mult_psir( orbs.get_ntype() ); + for( int T=0; T!=orbs.get_ntype(); ++T ) + { + psir_mult_psir[T].resize( 2*orbs.Phi[T].getLmax()+1 ); + for( int L1=0; L1<=orbs.Phi[T].getLmax(); ++L1 ) + { + for( int N1=0; N1!=orbs.Phi[T].getNchi(L1); ++N1 ) + { + for( int L2=L1; L2<=orbs.Phi[T].getLmax(); ++L2 ) + { + for( int N2=((L2==L1)?N1:0); N2!=orbs.Phi[T].getNchi(L2); ++N2 ) + { + assert( orbs.Phi[T].PhiLN(L1,N1).getNr()==orbs.Phi[T].PhiLN(L2,N2).getNr() ); + + std::vector mult_psir( orbs.Phi[T].PhiLN(L1,N1).getNr() ); + for( int ir=0; ir!=orbs.Phi[T].PhiLN(L1,N1).getNr(); ++ir) + { + mult_psir[ir] = orbs.Phi[T].PhiLN(L1,N1).getPsi_r(ir) * +orbs.Phi[T].PhiLN(L2,N2).getPsi_r(ir) ; + } + for( int L_new=std::abs(L1-L2); L_new<=L1+L2; ++L_new ) + { + psir_mult_psir[T][L_new].push_back(mult_psir); + } + } + } + } + } + } + return psir_mult_psir; } */ std::vector>>> Exx_Abfs::Construct_Orbs::psir_mult_psir( - const std::vector>> &orbs ) + const std::vector>>& orbs) { - std::vector>>> psir_mult_psir( orbs.size() ); - for( int T=0; T!=orbs.size(); ++T ) - { - psir_mult_psir[T].resize( 2*orbs[T].size()-1 ); - for( int L1=0; L1!=orbs[T].size(); ++L1 ) - { - for( int N1=0; N1!=orbs[T][L1].size(); ++N1 ) - { - for( int L2=L1; L2!=orbs[T].size(); ++L2 ) - { - for( int N2=((L2==L1)?N1:0); N2!=orbs[T][L2].size(); ++N2 ) - { - assert( orbs[T][L1][N1].getNr()==orbs[T][L2][N2].getNr() ); - - std::vector mult_psir( orbs[T][L1][N1].getNr() ); - for( int ir=0; ir!=orbs[T][L1][N1].getNr(); ++ir) - { - mult_psir[ir] = orbs[T][L1][N1].getPsi_r(ir) * orbs[T][L2][N2].getPsi_r(ir) ; - } - for( int L_new=std::abs(L1-L2); L_new<=L1+L2; ++L_new ) - { - psir_mult_psir[T][L_new].push_back(mult_psir); - } - } - } - } - } - } - return psir_mult_psir; + std::vector>>> psir_mult_psir(orbs.size()); + for (int T = 0; T != orbs.size(); ++T) + { + psir_mult_psir[T].resize(2 * orbs[T].size() - 1); + for (int L1 = 0; L1 != orbs[T].size(); ++L1) + { + for (int N1 = 0; N1 != orbs[T][L1].size(); ++N1) + { + for (int L2 = L1; L2 != orbs[T].size(); ++L2) + { + for (int N2 = ((L2 == L1) ? N1 : 0); N2 != orbs[T][L2].size(); ++N2) + { + assert(orbs[T][L1][N1].getNr() == orbs[T][L2][N2].getNr()); + + std::vector mult_psir(orbs[T][L1][N1].getNr()); + for (int ir = 0; ir != orbs[T][L1][N1].getNr(); ++ir) + { + mult_psir[ir] = orbs[T][L1][N1].getPsi_r(ir) * orbs[T][L2][N2].getPsi_r(ir); + } + for (int L_new = std::abs(L1 - L2); L_new <= L1 + L2; ++L_new) + { + psir_mult_psir[T][L_new].push_back(mult_psir); + } + } + } + } + } + } + return psir_mult_psir; } std::vector>>> Exx_Abfs::Construct_Orbs::pca( - const UnitCell &ucell, + const UnitCell& ucell, const LCAO_Orbitals& orb, - const std::vector>> &abfs, - const std::vector>> &orbs, - const double kmesh_times_mot, - const double times_threshold ) + const std::vector>>& abfs, + const std::vector>>& orbs, + const double kmesh_times_mot, + const double times_threshold) { - if(times_threshold>1) - return std::vector>>>(abfs.size()); - - const std::vector,RI::Tensor>>> - eig = ABFs_Construct::PCA::cal_PCA(ucell, orb, orbs, abfs, kmesh_times_mot ); - - const std::vector>>> psis = get_psi( abfs ); - std::vector>>> psis_new( psis.size() ); - - for( size_t T=0; T!=eig.size(); ++T ) - { - double eig_value_max = 0; - for( size_t L=0; L!=eig[T].size(); ++L ) - for( size_t M=0; M!=eig[T][L].first.size(); ++M ) - { -//ofs< &eig_value = eig[T][L].first; - const RI::Tensor &eig_vec = eig[T][L].second; - for( size_t M=0; M!=eig_value.size(); ++M ) - { - if( eig_value[M] > eig_value_threshold ) - { - std::vector psi_new( psis[T][L][0].size() ); - for( size_t N=0; N!=psis[T][L].size(); ++N ) - for( size_t ir=0; ir!=psi_new.size(); ++ir ) - psi_new[ir] += eig_vec(M,N) * psis[T][L][N][ir]; - psis_new[T][L].push_back( psi_new ); - } - } - } - } - else - { - ModuleBase::WARNING(std::string(__FILE__), - "Element "+ModuleBase::GlobalFunc::TO_STRING(T)+" , all training data (lcao[i]*lcao[j]) are all the same. So PCA randomly choose an abf as the result."); - psis_new[T].resize( psis[T].size() ); - for( size_t L=0; L!=psis[T].size(); ++L ) - if( !psis[T][L].empty() ) - { - psis_new[T][L].push_back(psis[T][L][0]); - break; - } - } - } -//ofs.close(); - return psis_new; + if (times_threshold > 1) + return std::vector>>>(abfs.size()); + + const std::vector, RI::Tensor>>> eig + = ABFs_Construct::PCA::cal_PCA(ucell, orb, orbs, abfs, kmesh_times_mot); + + const std::vector>>> psis = get_psi(abfs); + std::vector>>> psis_new(psis.size()); + + for (size_t T = 0; T != eig.size(); ++T) + { + double eig_value_max = 0; + for (size_t L = 0; L != eig[T].size(); ++L) + for (size_t M = 0; M != eig[T][L].first.size(); ++M) + { + // ofs<& eig_value = eig[T][L].first; + const RI::Tensor& eig_vec = eig[T][L].second; + for (size_t M = 0; M != eig_value.size(); ++M) + { + if (eig_value[M] > eig_value_threshold) + { + std::vector psi_new(psis[T][L][0].size()); + for (size_t N = 0; N != psis[T][L].size(); ++N) + for (size_t ir = 0; ir != psi_new.size(); ++ir) + psi_new[ir] += eig_vec(M, N) * psis[T][L][N][ir]; + psis_new[T][L].push_back(psi_new); + } + } + } + } + else + { + ModuleBase::WARNING(std::string(__FILE__), + "Element " + ModuleBase::GlobalFunc::TO_STRING(T) + + " , all training data (lcao[i]*lcao[j]) are all the same. So PCA randomly choose " + "an abf as the result."); + psis_new[T].resize(psis[T].size()); + for (size_t L = 0; L != psis[T].size(); ++L) + if (!psis[T][L].empty()) + { + psis_new[T][L].push_back(psis[T][L][0]); + break; + } + } + } + // ofs.close(); + return psis_new; } - std::vector>>> Exx_Abfs::Construct_Orbs::orth( - const std::vector>>> &psis, - const std::vector>> &orbs, - const double norm_threshold ) + const std::vector>>>& psis, + const std::vector>>& orbs, + const double norm_threshold) { - std::vector>>> psis_orth( psis.size() ); - for( int T=0; T!=psis.size(); ++T ) - { - const Numerical_Orbital_Lm &orb = orbs[T][0][0]; - ModuleBase::Gram_Schmidt_Orth gso( - orb.get_rab(), - ModuleBase::Gram_Schmidt_Orth::Coordinate::Sphere ); - psis_orth[T].resize( psis[T].size() ); - for( int L=0; L!=psis[T].size(); ++L ) - { - psis_orth[T][L] = gso.cal_orth( psis[T][L], norm_threshold ); // Peize Lin test 2016-10-08 -// psis_orth[T][L] = gso.cal_orth( psis[T][L] ); // Peize Lin test 2016-10-08 - } - } - return psis_orth; + std::vector>>> psis_orth(psis.size()); + for (int T = 0; T != psis.size(); ++T) + { + const Numerical_Orbital_Lm& orb = orbs[T][0][0]; + ModuleBase::Gram_Schmidt_Orth gso( + orb.get_rab(), + ModuleBase::Gram_Schmidt_Orth::Coordinate::Sphere); + psis_orth[T].resize(psis[T].size()); + for (int L = 0; L != psis[T].size(); ++L) + { + psis_orth[T][L] = gso.cal_orth(psis[T][L], norm_threshold); // Peize Lin test 2016-10-08 + // psis_orth[T][L] = gso.cal_orth( psis[T][L] ); // Peize Lin test 2016-10-08 + } + } + return psis_orth; } std::vector>>> Exx_Abfs::Construct_Orbs::div_r( - const std::vector>>> &psirs, - const std::vector &r_radial ) + const std::vector>>>& psirs, + const std::vector& r_radial) { - std::vector>>> psis( psirs.size() ); - for( auto T=0; T!=psirs.size(); ++T ) - { - psis[T].resize( psirs[T].size() ); - for( auto L=0; L!=psirs[T].size(); ++L ) - { - psis[T][L].resize( psirs[T][L].size() ); - for( auto N=0; N!=psirs[T][L].size(); ++N ) - { - psis[T][L][N].resize( psirs[T][L][N].size() ); - psis[T][L][N][0] = 0; - for( auto ir=1; ir!=psirs[T][L][N].size(); ++ir ) - { - psis[T][L][N][ir] = psirs[T][L][N][ir] / r_radial[ir]; - } - } - } - } - return psis; + std::vector>>> psis(psirs.size()); + for (auto T = 0; T != psirs.size(); ++T) + { + psis[T].resize(psirs[T].size()); + for (auto L = 0; L != psirs[T].size(); ++L) + { + psis[T][L].resize(psirs[T][L].size()); + for (auto N = 0; N != psirs[T][L].size(); ++N) + { + psis[T][L][N].resize(psirs[T][L][N].size()); + psis[T][L][N][0] = 0; + for (auto ir = 1; ir != psirs[T][L][N].size(); ++ir) + { + psis[T][L][N][ir] = psirs[T][L][N][ir] / r_radial[ir]; + } + } + } + } + return psis; } std::vector>>> Exx_Abfs::Construct_Orbs::get_psi( - const std::vector>> &orbs ) + const std::vector>>& orbs) { - std::vector>>> orbs_psi( orbs.size() ); - for( int T=0; T!=orbs.size(); ++T ) - { - orbs_psi[T].resize( orbs[T].size() ); - for( int L=0; L!=orbs[T].size(); ++L ) - { - orbs_psi[T][L].resize( orbs[T][L].size() ); - for( int N=0; N!=orbs[T][L].size(); ++N ) - { - orbs_psi[T][L][N] = orbs[T][L][N].get_psi(); - } - } - } - return orbs_psi; + std::vector>>> orbs_psi(orbs.size()); + for (int T = 0; T != orbs.size(); ++T) + { + orbs_psi[T].resize(orbs[T].size()); + for (int L = 0; L != orbs[T].size(); ++L) + { + orbs_psi[T][L].resize(orbs[T][L].size()); + for (int N = 0; N != orbs[T][L].size(); ++N) + { + orbs_psi[T][L][N] = orbs[T][L][N].get_psi(); + } + } + } + return orbs_psi; } std::vector>> Exx_Abfs::Construct_Orbs::orbital( - const std::vector>>> &psis, - const std::vector>> &orbs_info, - const double kmesh_times) + const std::vector>>>& psis, + const std::vector>>& orbs_info, + const double kmesh_times) { - std::vector>> orbs_new( psis.size() ); - for( int T=0; T!=psis.size(); ++T ) - { - const Numerical_Orbital_Lm &orb_info = orbs_info[T][0][0]; - orbs_new[T].resize( psis[T].size() ); - for( int L=0; L!=psis[T].size(); ++L ) - { - orbs_new[T][L].resize( psis[T][L].size() ); - for( int N=0; N!=psis[T][L].size(); ++N ) - { - orbs_new[T][L][N].set_orbital_info( - orb_info.getLabel(), - T, - L, - N, - orb_info.getNr(), - orb_info.getRab(), - orb_info.getRadial(), - Numerical_Orbital_Lm::Psi_Type::Psi, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(psis[T][L][N]), - static_cast(orb_info.getNk() * kmesh_times) | 1, // Nk must be odd - orb_info.getDk(), // Peize Lin test 2017-04-16 -// orb_info.getDk() / kmesh_times, - orb_info.getDruniform(), - false, - true, PARAM.inp.cal_force); - } - } - } - return orbs_new; + std::vector>> orbs_new(psis.size()); + for (int T = 0; T != psis.size(); ++T) + { + const Numerical_Orbital_Lm& orb_info = orbs_info[T][0][0]; + orbs_new[T].resize(psis[T].size()); + for (int L = 0; L != psis[T].size(); ++L) + { + orbs_new[T][L].resize(psis[T][L].size()); + for (int N = 0; N != psis[T][L].size(); ++N) + { + orbs_new[T][L][N].set_orbital_info(orb_info.getLabel(), + T, + L, + N, + orb_info.getNr(), + orb_info.getRab(), + orb_info.getRadial(), + Numerical_Orbital_Lm::Psi_Type::Psi, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(psis[T][L][N]), + static_cast(orb_info.getNk() * kmesh_times) + | 1, // Nk must be odd + orb_info.getDk(), // Peize Lin test 2017-04-16 + // orb_info.getDk() / kmesh_times, + orb_info.getDruniform(), + false, + true, + PARAM.inp.cal_force); + } + } + } + return orbs_new; } /* std::vector>>> Exx_Abfs::Construct_Orbs::get_psi( - const LCAO_Orbitals &orbs ) + const LCAO_Orbitals &orbs ) { - std::vector>>> orbs_psi( orbs.get_ntype() ); - for( int T=0; T!=orbs.get_ntype(); ++T ) - { - orbs_psi[T].resize( orbs.Phi[T].getLmax()+1 ); - for( int L=0; L<=orbs.Phi[T].getLmax(); ++L ) - { - orbs_psi[T][L].resize( orbs.Phi[T].getNchi(L) ); - for( int N=0; N!=orbs.Phi[T].getNchi(L); ++N ) - { - orbs_psi[T][L][N] = orbs.Phi[T].PhiLN(L,N).get_psi(); - } - } - } - return orbs_psi; + std::vector>>> orbs_psi( orbs.get_ntype() ); + for( int T=0; T!=orbs.get_ntype(); ++T ) + { + orbs_psi[T].resize( orbs.Phi[T].getLmax()+1 ); + for( int L=0; L<=orbs.Phi[T].getLmax(); ++L ) + { + orbs_psi[T][L].resize( orbs.Phi[T].getNchi(L) ); + for( int N=0; N!=orbs.Phi[T].getNchi(L); ++N ) + { + orbs_psi[T][L][N] = orbs.Phi[T].PhiLN(L,N).get_psi(); + } + } + } + return orbs_psi; } */ /* template<> inline const Numerical_Orbital_Lm &Exx_Abfs::Construct_Orbs::get_orbital( - const LCAO_Orbitals &orbs, - const size_t T, const size_t L, const size_t N) + const LCAO_Orbitals &orbs, + const size_t T, const size_t L, const size_t N) { - return orbs.Phi[T].PhiLN(L,N); + return orbs.Phi[T].PhiLN(L,N); } */ /* template<> inline const Numerical_Orbital_Lm &Exx_Abfs::Construct_Orbs::get_orbital( - const std::vector>> &orbs, - const size_t T, const size_t L, const size_t N) + const std::vector>> &orbs, + const size_t T, const size_t L, const size_t N) { - return orbs[T][L][N]; + return orbs[T][L][N]; } */ -void Exx_Abfs::Construct_Orbs::print_orbs_size( - const UnitCell& ucell, - const std::vector>> &orbs, - std::ostream &os) +void Exx_Abfs::Construct_Orbs::print_orbs_size(const UnitCell& ucell, + const std::vector>>& orbs, + std::ostream& os) { - os<<" Auxiliary basis functions"< L_labels = {'s', 'p', 'd'}; - for(std::size_t T=0; T L_labels = {'s', 'p', 'd'}; + for (std::size_t T = 0; T < orbs.size(); ++T) + { + os << "\t\t" << ucell.atoms[T].label << "\t\t"; + for (std::size_t L = 0; L < orbs[T].size(); ++L) + { + const char L_label = L < L_labels.size() ? L_labels[L] : 'f' + (L - L_labels.size()); + os << orbs[T][L].size() << " " << L_label << "\t\t"; + } + os << std::endl; + } } diff --git a/source/module_ri/exx_abfs-io.cpp b/source/module_ri/exx_abfs-io.cpp index 938d2b0238..1f6ee78b9a 100644 --- a/source/module_ri/exx_abfs-io.cpp +++ b/source/module_ri/exx_abfs-io.cpp @@ -1,256 +1,252 @@ -#include -#include -#include "module_parameter/parameter.h" - #include "exx_abfs-io.h" -#include "exx_abfs-jle.h" -#include "exx_abfs-abfs_index.h" -#include "../module_hamilt_pw/hamilt_pwdft/global.h" + #include "../module_basis/module_ao/ORB_read.h" -#include "../module_base/global_function.h" -#include "../module_base/math_integral.h" // mohan add 2021-04-03 +#include "../module_hamilt_pw/hamilt_pwdft/global.h" +#include "../source_base/global_function.h" +#include "../source_base/math_integral.h" // mohan add 2021-04-03 +#include "exx_abfs-abfs_index.h" +#include "exx_abfs-jle.h" +#include "module_parameter/parameter.h" +#include +#include std::vector>> Exx_Abfs::IO::construct_abfs( - const LCAO_Orbitals &orbs, - const std::vector &files_abfs, - const double kmesh_times ) + const LCAO_Orbitals& orbs, + const std::vector& files_abfs, + const double kmesh_times) { - std::vector>> abfs( files_abfs.size() ); - for( size_t T=0; T!=files_abfs.size(); ++T ) - abfs[T] = construct_abfs_T( - files_abfs[T], - T, - static_cast(orbs.get_kmesh() * kmesh_times) | 1, // Nk must be odd -// orbs.get_dk() / kmesh_times, - orbs.get_dk(), // Peize Lin change 2017-04-16 - orbs.get_dr_uniform() ); - - return abfs; + std::vector>> abfs(files_abfs.size()); + for (size_t T = 0; T != files_abfs.size(); ++T) + abfs[T] = construct_abfs_T(files_abfs[T], + T, + static_cast(orbs.get_kmesh() * kmesh_times) | 1, // Nk must be odd + // orbs.get_dk() / kmesh_times, + orbs.get_dk(), // Peize Lin change 2017-04-16 + orbs.get_dr_uniform()); + + return abfs; } -std::vector>> Exx_Abfs::IO::construct_abfs( - const std::vector>> & abfs_pre, - const LCAO_Orbitals &orbs, - const std::vector &files_abfs, - const double kmesh_times ) +std::vector>> Exx_Abfs::IO::construct_abfs( + const std::vector>>& abfs_pre, + const LCAO_Orbitals& orbs, + const std::vector& files_abfs, + const double kmesh_times) { - std::vector>> - &&abfs = construct_abfs( orbs, files_abfs, kmesh_times ); - - assert( abfs.size() == abfs_pre.size() ); - for( size_t T=0; T!=abfs.size(); ++T ) - { - if( abfs[T].size() < abfs_pre[T].size() ) - abfs[T].resize( abfs_pre[T].size() ); - for( size_t L=0; L!=abfs_pre[T].size(); ++L ) - { - abfs[T][L].insert( abfs[T][L].begin(), abfs_pre[T][L].begin(), abfs_pre[T][L].end() ); - } - } - - return abfs; + std::vector>>&& abfs = construct_abfs(orbs, files_abfs, kmesh_times); + + assert(abfs.size() == abfs_pre.size()); + for (size_t T = 0; T != abfs.size(); ++T) + { + if (abfs[T].size() < abfs_pre[T].size()) + abfs[T].resize(abfs_pre[T].size()); + for (size_t L = 0; L != abfs_pre[T].size(); ++L) + { + abfs[T][L].insert(abfs[T][L].begin(), abfs_pre[T][L].begin(), abfs_pre[T][L].end()); + } + } + + return abfs; } -std::vector> Exx_Abfs::IO::construct_abfs_T( - const std::string & file_name, - const int &T, - const int &nk, - const double &dk, - const double &dr_uniform) +std::vector> Exx_Abfs::IO::construct_abfs_T(const std::string& file_name, + const int& T, + const int& nk, + const double& dk, + const double& dr_uniform) { - std::string label; - size_t L_size; - std::map N_size; - size_t meshr; - double dr; - std::map>> psis; - - /*---------------------- - 1.read abfs - ----------------------*/ - std::string word; - - std::ifstream ifs( file_name.c_str() ); - if(!ifs) - throw std::runtime_error(" Can't find the abfs ORBITAL file."); - - while( ifs.good() ) - { - ifs >> word; - - if( "Element"==word ) - { - ModuleBase::GlobalFunc::READ_VALUE( ifs, label ); - } - else if ( "Lmax"==word ) - { - ModuleBase::GlobalFunc::READ_VALUE( ifs, L_size ); - - if( L_size>=9 ) - { - std::stringstream ss; - ss<<"Lmax>=9 error in "<<__FILE__<<" line "<<__LINE__; - throw std::invalid_argument(ss.str()); - } - } - else if ( "Sorbital-->"==word ) - { - ModuleBase::GlobalFunc::READ_VALUE( ifs, N_size[0] ); - } - else if ( "Porbital-->"==word ) - { - ModuleBase::GlobalFunc::READ_VALUE( ifs, N_size[1] ); - } - else if ( "Dorbital-->"==word ) - { - ModuleBase::GlobalFunc::READ_VALUE( ifs, N_size[2] ); - } - else if ( "Forbital-->"==word ) - { - ModuleBase::GlobalFunc::READ_VALUE( ifs, N_size[3] ); - } - else if ( "Gorbital-->"==word ) - { - ModuleBase::GlobalFunc::READ_VALUE( ifs, N_size[4] ); - } - else if ( "Horbital-->"==word ) - { - ModuleBase::GlobalFunc::READ_VALUE( ifs, N_size[5] ); - } - else if ( "Iorbital-->"==word ) - { - ModuleBase::GlobalFunc::READ_VALUE( ifs, N_size[6] ); - } - else if ( "Jorbital-->"==word ) - { - ModuleBase::GlobalFunc::READ_VALUE( ifs, N_size[7] ); - } - else if ( "Korbital-->"==word ) - { - ModuleBase::GlobalFunc::READ_VALUE( ifs, N_size[8] ); - } - else if ( "END"==word ) - { - break; - } - } - - ModuleBase::CHECK_NAME(ifs, "Mesh"); - ifs >> meshr; - - ModuleBase::CHECK_NAME(ifs, "dr"); - ifs >> dr; + std::string label; + size_t L_size; + std::map N_size; + size_t meshr; + double dr; + std::map>> psis; + + /*---------------------- + 1.read abfs + ----------------------*/ + std::string word; + + std::ifstream ifs(file_name.c_str()); + if (!ifs) + throw std::runtime_error(" Can't find the abfs ORBITAL file."); + + while (ifs.good()) + { + ifs >> word; + + if ("Element" == word) + { + ModuleBase::GlobalFunc::READ_VALUE(ifs, label); + } + else if ("Lmax" == word) + { + ModuleBase::GlobalFunc::READ_VALUE(ifs, L_size); + + if (L_size >= 9) + { + std::stringstream ss; + ss << "Lmax>=9 error in " << __FILE__ << " line " << __LINE__; + throw std::invalid_argument(ss.str()); + } + } + else if ("Sorbital-->" == word) + { + ModuleBase::GlobalFunc::READ_VALUE(ifs, N_size[0]); + } + else if ("Porbital-->" == word) + { + ModuleBase::GlobalFunc::READ_VALUE(ifs, N_size[1]); + } + else if ("Dorbital-->" == word) + { + ModuleBase::GlobalFunc::READ_VALUE(ifs, N_size[2]); + } + else if ("Forbital-->" == word) + { + ModuleBase::GlobalFunc::READ_VALUE(ifs, N_size[3]); + } + else if ("Gorbital-->" == word) + { + ModuleBase::GlobalFunc::READ_VALUE(ifs, N_size[4]); + } + else if ("Horbital-->" == word) + { + ModuleBase::GlobalFunc::READ_VALUE(ifs, N_size[5]); + } + else if ("Iorbital-->" == word) + { + ModuleBase::GlobalFunc::READ_VALUE(ifs, N_size[6]); + } + else if ("Jorbital-->" == word) + { + ModuleBase::GlobalFunc::READ_VALUE(ifs, N_size[7]); + } + else if ("Korbital-->" == word) + { + ModuleBase::GlobalFunc::READ_VALUE(ifs, N_size[8]); + } + else if ("END" == word) + { + break; + } + } + + ModuleBase::CHECK_NAME(ifs, "Mesh"); + ifs >> meshr; + + ModuleBase::CHECK_NAME(ifs, "dr"); + ifs >> dr; + + while (ifs.good()) + { + ifs >> word; + if (word == "Type") + { + std::string s_L, s_N; + ifs >> s_L >> s_N; + + size_t T, L, N; + ifs >> T >> L >> N; + + psis[L][N].resize(meshr); + for (int ir = 0; ir != meshr; ir++) + { + ifs >> psis[L][N][ir]; + } + } + } + ifs.close(); - while(ifs.good()) - { - ifs >> word; - if(word=="Type") - { - std::string s_L, s_N; - ifs >> s_L >> s_N; - - size_t T,L,N; - ifs >> T >> L >> N; - - psis[L][N].resize(meshr); - for(int ir=0; ir!=meshr; ir++) - { - ifs >> psis[L][N][ir]; - } - } + /*---------------------- + 2.check L,N orbital + ----------------------*/ + for (size_t L = 0; L <= L_size; ++L) + if (N_size.find(L) == N_size.end()) + { + std::stringstream ss; + ss << "Can't find N of L=" << L << " in " << file_name; + throw std::domain_error(ss.str()); + } + for (size_t L = 0; L <= L_size; ++L) + for (size_t N = 0; N != N_size[L]; ++N) + if (psis.find(L) == psis.end() || psis[L].find(N) == psis[L].end()) + { + std::stringstream ss; + ss << "Can't find abf of L=" << L << " T=" << T << " in " << file_name; + throw std::domain_error(ss.str()); + } - } - ifs.close(); + /*---------------------- + 3.rab, radial + ----------------------*/ + if (meshr % 2 == 0) + ++meshr; - - /*---------------------- - 2.check L,N orbital - ----------------------*/ - for( size_t L=0; L<=L_size; ++L ) - if( N_size.find(L) == N_size.end() ) - { - std::stringstream ss; - ss<<"Can't find N of L="< rab(meshr); + std::vector radial(meshr); + for (int ir = 0; ir != meshr; ++ir) + { + rab[ir] = dr; + radial[ir] = ir * dr; // mohan 2010-04-19 + } - - /*---------------------- - 3.rab, radial - ----------------------*/ - if(meshr%2==0) ++meshr; - - std::vector rab(meshr); - std::vector radial(meshr); - for( int ir=0; ir!=meshr; ++ir ) - { - rab[ir] = dr; - radial[ir] = ir*dr; //mohan 2010-04-19 - } + /*---------------------- + 4.normalize psi + ----------------------*/ + for (size_t L = 0; L <= L_size; ++L) + { + for (size_t N = 0; N != N_size[L]; ++N) + { + std::vector psir(meshr); + std::vector inner(meshr); + psis[L][N].resize(meshr); + for (int ir = 0; ir != meshr; ++ir) + { + psir[ir] = psis[L][N][ir] * radial[ir]; + inner[ir] = psir[ir] * psir[ir]; + } + double unit = 0.0; + ModuleBase::Integral::Simpson_Integral(meshr, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(inner), + ModuleBase::GlobalFunc::VECTOR_TO_PTR(rab), + unit); + for (int ir = 0; ir != meshr; ++ir) + { + psis[L][N][ir] /= sqrt(unit); + } + } + } - - /*---------------------- - 4.normalize psi - ----------------------*/ - for( size_t L=0; L<=L_size; ++L ) - { - for( size_t N=0; N!=N_size[L]; ++N ) - { - std::vector psir(meshr); - std::vector inner(meshr); - psis[L][N].resize(meshr); - for( int ir=0; ir!=meshr; ++ir ) - { - psir[ir] = psis[L][N][ir] * radial[ir]; - inner[ir] = psir[ir] * psir[ir]; - } - double unit = 0.0; - ModuleBase::Integral::Simpson_Integral(meshr, ModuleBase::GlobalFunc::VECTOR_TO_PTR(inner), ModuleBase::GlobalFunc::VECTOR_TO_PTR(rab), unit); - for( int ir=0; ir!=meshr; ++ir ) - { - psis[L][N][ir] /= sqrt(unit); - } - } - } + /*---------------------- + 5.construct abfs + ----------------------*/ + std::vector> abfs_T; - - /*---------------------- - 5.construct abfs - ----------------------*/ - std::vector> abfs_T; + abfs_T.resize(L_size + 1); + for (size_t L = 0; L <= L_size; ++L) + { + abfs_T[L].resize(N_size[L]); + for (size_t N = 0; N != N_size[L]; ++N) + { + abfs_T[L][N].set_orbital_info(label, + T, // type + L, // angular momentum L + N, // number of orbitals of this L + meshr, // number of radial mesh + ModuleBase::GlobalFunc::VECTOR_TO_PTR(rab), + ModuleBase::GlobalFunc::VECTOR_TO_PTR(radial), // radial mesh value(a.u.) + Numerical_Orbital_Lm::Psi_Type::Psi, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(psis[L][N]), // radial wave function + nk, + dk, + dr_uniform, + false, + true, + PARAM.inp.cal_force); + } + } - abfs_T.resize(L_size+1); - for( size_t L=0; L<=L_size; ++L ) - { - abfs_T[L].resize(N_size[L]); - for( size_t N=0; N!=N_size[L]; ++N ) - { - abfs_T[L][N].set_orbital_info( - label, - T, //type - L, //angular momentum L - N, // number of orbitals of this L - meshr, // number of radial mesh - ModuleBase::GlobalFunc::VECTOR_TO_PTR(rab), - ModuleBase::GlobalFunc::VECTOR_TO_PTR(radial),// radial mesh value(a.u.) - Numerical_Orbital_Lm::Psi_Type::Psi, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(psis[L][N]), // radial wave function - nk, - dk, - dr_uniform, - false, - true, PARAM.inp.cal_force); - } - } - - return abfs_T; + return abfs_T; } diff --git a/source/module_ri/exx_abfs-io.h b/source/module_ri/exx_abfs-io.h index 15dd9303a3..a87f7e8c0e 100644 --- a/source/module_ri/exx_abfs-io.h +++ b/source/module_ri/exx_abfs-io.h @@ -1,14 +1,14 @@ #ifndef EXX_ABFS_IO_H #define EXX_ABFS_IO_H +#include "../module_basis/module_ao/ORB_atomic_lm.h" +#include "../source_base/element_basis_index.h" +#include "../source_base/matrix.h" #include "exx_abfs.h" +#include "module_cell/klist.h" #include #include -#include "../module_basis/module_ao/ORB_atomic_lm.h" -#include "../module_base/matrix.h" -#include "../module_base/element_basis_index.h" -#include "module_cell/klist.h" #ifdef __MPI #include "mpi.h" #endif @@ -17,26 +17,24 @@ class LCAO_Orbitals; class Exx_Abfs::IO { -public: - - static std::vector>> construct_abfs( - const LCAO_Orbitals &orbs, - const std::vector &files_abfs, - const double kmesh_times=1 ); // close dK, keep Kcut - - static std::vector>> construct_abfs( - const std::vector>> &abfs_pre, - const LCAO_Orbitals &orbs, - const std::vector &files_abfs, - const double kmesh_times=1 ); // close dK, keep Kcut + public: + static std::vector>> construct_abfs( + const LCAO_Orbitals& orbs, + const std::vector& files_abfs, + const double kmesh_times = 1); // close dK, keep Kcut + + static std::vector>> construct_abfs( + const std::vector>>& abfs_pre, + const LCAO_Orbitals& orbs, + const std::vector& files_abfs, + const double kmesh_times = 1); // close dK, keep Kcut -private: - static std::vector> construct_abfs_T( - const std::string & file_name, - const int &T, - const int &nk, - const double &dk, - const double &dr_uniform); + private: + static std::vector> construct_abfs_T(const std::string& file_name, + const int& T, + const int& nk, + const double& dk, + const double& dr_uniform); }; -#endif // EXX_ABFS_IO_H +#endif // EXX_ABFS_IO_H diff --git a/source/module_ri/exx_abfs-jle.cpp b/source/module_ri/exx_abfs-jle.cpp index f9086fe777..cc87bbf324 100644 --- a/source/module_ri/exx_abfs-jle.cpp +++ b/source/module_ri/exx_abfs-jle.cpp @@ -1,61 +1,62 @@ #include "exx_abfs-jle.h" -#include "module_parameter/parameter.h" -#include "../module_hamilt_pw/hamilt_pwdft/global.h" #include "../module_basis/module_ao/ORB_read.h" -#include "../module_base/global_function.h" -#include "../module_base/mathzone.h" -#include "../module_base/math_sphbes.h" // mohan add 2021-05-06 +#include "../module_hamilt_pw/hamilt_pwdft/global.h" +#include "../source_base/global_function.h" +#include "../source_base/math_sphbes.h" // mohan add 2021-05-06 +#include "../source_base/mathzone.h" +#include "module_parameter/parameter.h" bool Exx_Abfs::Jle::generate_matrix = false; int Exx_Abfs::Jle::Lmax = 2; double Exx_Abfs::Jle::Ecut_exx = 60; -double Exx_Abfs::Jle::tolerence = 1.0e-12; +double Exx_Abfs::Jle::tolerence = 1.0e-12; -void Exx_Abfs::Jle::init_jle(const double kmesh_times, - const UnitCell& ucell, - const LCAO_Orbitals& orb) +void Exx_Abfs::Jle::init_jle(const double kmesh_times, const UnitCell& ucell, const LCAO_Orbitals& orb) { - jle.resize( ucell.ntype ); + jle.resize(ucell.ntype); - for (int T = 0; T < ucell.ntype ; T++) - { - jle[T].resize( Lmax+1 ); - for (int L=0; L <= Lmax ; ++L) - { - const size_t ecut_number - = static_cast( sqrt( Ecut_exx ) * orb.Phi[T].getRcut() / ModuleBase::PI ); // Rydberg Unit. + for (int T = 0; T < ucell.ntype; T++) + { + jle[T].resize(Lmax + 1); + for (int L = 0; L <= Lmax; ++L) + { + const size_t ecut_number + = static_cast(sqrt(Ecut_exx) * orb.Phi[T].getRcut() / ModuleBase::PI); // Rydberg Unit. - jle[T][L].resize( ecut_number ); + jle[T][L].resize(ecut_number); - std::vector en(ecut_number, 0.0); - ModuleBase::Sphbes::Spherical_Bessel_Roots(ecut_number, L, tolerence, ModuleBase::GlobalFunc::VECTOR_TO_PTR(en), orb.Phi[T].getRcut()); + std::vector en(ecut_number, 0.0); + ModuleBase::Sphbes::Spherical_Bessel_Roots(ecut_number, + L, + tolerence, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(en), + orb.Phi[T].getRcut()); - for(size_t E=0; E!=ecut_number; ++E) - { - std::vector jle_r( orb.Phi[T].PhiLN(0,0).getNr() ); - ModuleBase::Sphbes::Spherical_Bessel( - orb.Phi[T].PhiLN(0,0).getNr(), - orb.Phi[T].PhiLN(0,0).getRadial(), - en[E], - L, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(jle_r)); - jle[T][L][E].set_orbital_info( - orb.Phi[T].PhiLN(0,0).getLabel(), - orb.Phi[T].PhiLN(0,0).getType(), - L, - E, // N? - orb.Phi[T].PhiLN(0,0).getNr(), - orb.Phi[T].PhiLN(0,0).getRab(), - orb.Phi[T].PhiLN(0,0).getRadial(), - Numerical_Orbital_Lm::Psi_Type::Psi, - ModuleBase::GlobalFunc::VECTOR_TO_PTR(jle_r), - static_cast(orb.Phi[T].PhiLN(0,0).getNk() * kmesh_times) | 1, - orb.Phi[T].PhiLN(0,0).getDk(), - orb.Phi[T].PhiLN(0,0).getDruniform(), - false, - true, PARAM.inp.cal_force); - } - } - } + for (size_t E = 0; E != ecut_number; ++E) + { + std::vector jle_r(orb.Phi[T].PhiLN(0, 0).getNr()); + ModuleBase::Sphbes::Spherical_Bessel(orb.Phi[T].PhiLN(0, 0).getNr(), + orb.Phi[T].PhiLN(0, 0).getRadial(), + en[E], + L, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(jle_r)); + jle[T][L][E].set_orbital_info(orb.Phi[T].PhiLN(0, 0).getLabel(), + orb.Phi[T].PhiLN(0, 0).getType(), + L, + E, // N? + orb.Phi[T].PhiLN(0, 0).getNr(), + orb.Phi[T].PhiLN(0, 0).getRab(), + orb.Phi[T].PhiLN(0, 0).getRadial(), + Numerical_Orbital_Lm::Psi_Type::Psi, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(jle_r), + static_cast(orb.Phi[T].PhiLN(0, 0).getNk() * kmesh_times) | 1, + orb.Phi[T].PhiLN(0, 0).getDk(), + orb.Phi[T].PhiLN(0, 0).getDruniform(), + false, + true, + PARAM.inp.cal_force); + } + } + } } diff --git a/source/module_ri/exx_abfs.h b/source/module_ri/exx_abfs.h index 845eb3d81b..9fe898f666 100644 --- a/source/module_ri/exx_abfs.h +++ b/source/module_ri/exx_abfs.h @@ -5,25 +5,24 @@ using std::vector; #include using std::map; -#include - #include "../module_basis/module_ao/ORB_atomic_lm.h" -#include "../module_base/element_basis_index.h" -#include "../module_base/matrix.h" -#include "../module_base/vector3.h" +#include "../source_base/element_basis_index.h" +#include "../source_base/matrix.h" +#include "../source_base/vector3.h" + +#include class Exx_Abfs { -public: - class Abfs_Index; - class Jle; - class IO; - class Construct_Orbs; - class PCA; - - int rmesh_times = 5; // Peize Lin test - int kmesh_times = 1; // Peize Lin test + public: + class Abfs_Index; + class Jle; + class IO; + class Construct_Orbs; + class PCA; + int rmesh_times = 5; // Peize Lin test + int kmesh_times = 1; // Peize Lin test }; #endif diff --git a/source/module_ri/exx_lip.h b/source/module_ri/exx_lip.h index 9f19560c10..4cb1065d08 100644 --- a/source/module_ri/exx_lip.h +++ b/source/module_ri/exx_lip.h @@ -6,30 +6,43 @@ #define EXX_LIP_H #include "module_hamilt_general/module_xc/exx_info.h" -#include "module_base/macros.h" -#include "module_base/matrix.h" +#include "source_base/macros.h" +#include "source_base/matrix.h" -#include #include +#include - class K_Vectors; - class UnitCell; - class Structure_Factor; - namespace elecstate{ class ElecState; } - namespace ModulePW{ class PW_Basis_K; } - namespace ModulePW{ class PW_Basis; } - namespace ModuleSymmetry{ class Symmetry; } - namespace psi - { - template - class PSIInit; - } +class K_Vectors; +class UnitCell; +class Structure_Factor; +namespace elecstate +{ +class ElecState; +} +namespace ModulePW +{ +class PW_Basis_K; +} +namespace ModulePW +{ +class PW_Basis; +} +namespace ModuleSymmetry +{ +class Symmetry; +} +namespace psi +{ +template +class PSIInit; +} -template +template class Exx_Lip { using Treal = typename GetTypeReal::type; -public: + + public: Exx_Lip(const Exx_Info::Exx_Info_Lip& info_in); ~Exx_Lip(); @@ -63,13 +76,12 @@ class Exx_Lip { memcpy(&(*this->k_pack->hvec_array)(ik, 0, 0), hvec, sizeof(T) * naos * nbands); } - psi::Psi get_hvec() const + psi::Psi get_hvec() const { return *this->k_pack->hvec_array; } -private: - + private: int gzero_rank_in_pool; // template @@ -77,14 +89,14 @@ class Exx_Lip { K_Vectors* kv_ptr = nullptr; // wavefunc* wf_ptr; - psi::Psi* kspw_psi_ptr = nullptr; ///< PW wavefunction - psi::Psi* psi_local = nullptr; ///< NAOs in PW + psi::Psi* kspw_psi_ptr = nullptr; ///< PW wavefunction + psi::Psi* psi_local = nullptr; ///< NAOs in PW ModuleBase::matrix wf_wg; /// @brief LCAO wavefunction, the eigenvectors from lapack diagonalization psi::Psi* hvec_array = nullptr; const elecstate::ElecState* pelec = nullptr; - } *k_pack = nullptr, * q_pack = nullptr; + }* k_pack = nullptr, *q_pack = nullptr; int iq_vecik; @@ -114,9 +126,10 @@ class Exx_Lip // const ModulePW::PW_Basis_K* wfc_basis, // const Structure_Factor& sf); - //2*pi*i + // 2*pi*i const T two_pi_i = Treal(ModuleBase::TWO_PI) * T(0.0, 1.0); -public: + + public: const ModulePW::PW_Basis* rho_basis = nullptr; const ModulePW::PW_Basis_K* wfc_basis = nullptr; diff --git a/source/module_ri/exx_lip.hpp b/source/module_ri/exx_lip.hpp index 5e26446df4..771a517aec 100644 --- a/source/module_ri/exx_lip.hpp +++ b/source/module_ri/exx_lip.hpp @@ -8,22 +8,21 @@ #define EXX_LIP_HPP #include "exx_lip.h" -#include "module_base/vector3.h" -#include "module_base/global_function.h" -#include "module_base/vector3.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_basis/module_pw/pw_basis_k.h" #include "module_cell/klist.h" +#include "module_cell/module_symmetry/symmetry.h" +#include "module_elecstate/elecstate.h" #include "module_hamilt_lcao/hamilt_lcaodft/wavefunc_in_pw.h" -#include "module_base/lapack_connector.h" -#include "module_base/parallel_global.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" #include "module_parameter/parameter.h" -#include "module_elecstate/elecstate.h" -#include "module_basis/module_pw/pw_basis_k.h" -#include "module_cell/module_symmetry/symmetry.h" #include "module_psi/psi_init.h" -#include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" -#include "module_base/tool_title.h" -#include "module_base/timer.h" +#include "source_base/global_function.h" +#include "source_base/lapack_connector.h" +#include "source_base/parallel_global.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" +#include "source_base/vector3.h" #include @@ -40,35 +39,48 @@ void Exx_Lip::cal_exx() this->phi_cal(this->k_pack, ik); this->judge_singularity(ik); - for (int iw_l = 0; iw_l < PARAM.globalv.nlocal; ++iw_l) { - for (int iw_r = 0; iw_r < PARAM.globalv.nlocal; ++iw_r) { + for (int iw_l = 0; iw_l < PARAM.globalv.nlocal; ++iw_l) + { + for (int iw_r = 0; iw_r < PARAM.globalv.nlocal; ++iw_r) + { this->sum1[iw_l * PARAM.globalv.nlocal + iw_r] = T(0.0); - } } + } + } if (Conv_Coulomb_Pot_K::Ccp_Type::Ccp == info.ccp_type || Conv_Coulomb_Pot_K::Ccp_Type::Hf == info.ccp_type) { this->sum2_factor = 0.0; - if (gzero_rank_in_pool == GlobalV::RANK_IN_POOL) { - for (int iw_l = 0; iw_l < PARAM.globalv.nlocal; ++iw_l) { - for (int iw_r = 0; iw_r < PARAM.globalv.nlocal; ++iw_r) { + if (gzero_rank_in_pool == GlobalV::RANK_IN_POOL) + { + for (int iw_l = 0; iw_l < PARAM.globalv.nlocal; ++iw_l) + { + for (int iw_r = 0; iw_r < PARAM.globalv.nlocal; ++iw_r) + { this->sum3[iw_l][iw_r] = T(0.0); - } } } + } + } + } } - for (int iq_tmp = this->iq_vecik; iq_tmp < this->iq_vecik + this->q_pack->kv_ptr->get_nks() / PARAM.inp.nspin; ++iq_tmp) // !!! k_point - // parallel incompleted.need to loop iq in other pool + for (int iq_tmp = this->iq_vecik; iq_tmp < this->iq_vecik + this->q_pack->kv_ptr->get_nks() / PARAM.inp.nspin; + ++iq_tmp) // !!! k_point + // parallel incompleted.need to loop iq in other pool { - const int iq = - (ik < (this->k_pack->kv_ptr->get_nks() / PARAM.inp.nspin)) - ? (iq_tmp % (this->q_pack->kv_ptr->get_nks() / PARAM.inp.nspin)) - : (iq_tmp % (this->q_pack->kv_ptr->get_nks() / PARAM.inp.nspin) + (this->q_pack->kv_ptr->get_nks() / PARAM.inp.nspin)); + const int iq = (ik < (this->k_pack->kv_ptr->get_nks() / PARAM.inp.nspin)) + ? (iq_tmp % (this->q_pack->kv_ptr->get_nks() / PARAM.inp.nspin)) + : (iq_tmp % (this->q_pack->kv_ptr->get_nks() / PARAM.inp.nspin) + + (this->q_pack->kv_ptr->get_nks() / PARAM.inp.nspin)); this->qkg2_exp(ik, iq); for (int ib = 0; ib < PARAM.inp.nbands; ++ib) { this->b_cal(ik, iq, ib); - if (Conv_Coulomb_Pot_K::Ccp_Type::Ccp == info.ccp_type || Conv_Coulomb_Pot_K::Ccp_Type::Hf == info.ccp_type) { - if (iq == this->iq_vecik) { + if (Conv_Coulomb_Pot_K::Ccp_Type::Ccp == info.ccp_type + || Conv_Coulomb_Pot_K::Ccp_Type::Hf == info.ccp_type) + { + if (iq == this->iq_vecik) + { this->sum3_cal(iq, ib); - } } + } + } this->b_sum(iq, ib); } } @@ -106,13 +118,19 @@ Exx_Lip::Exx_Lip(const Exx_Info::Exx_Info_Lip& info_in, int gzero_judge = -1; if (this->rho_basis->gg_uniq[0] < 1e-8) - { gzero_judge = GlobalV::RANK_IN_POOL; } - #ifdef __MPI + { + gzero_judge = GlobalV::RANK_IN_POOL; + } +#ifdef __MPI MPI_Allreduce(&gzero_judge, &gzero_rank_in_pool, 1, MPI_INT, MPI_MAX, POOL_WORLD); - #endif - this->k_pack->wf_wg.create(this->k_pack->kv_ptr->get_nks(),PARAM.inp.nbands); - - this->k_pack->hvec_array = new psi::Psi(this->k_pack->kv_ptr->get_nks(), PARAM.inp.nbands, PARAM.globalv.nlocal, kv_ptr_in->ngk, true); +#endif + this->k_pack->wf_wg.create(this->k_pack->kv_ptr->get_nks(), PARAM.inp.nbands); + + this->k_pack->hvec_array = new psi::Psi(this->k_pack->kv_ptr->get_nks(), + PARAM.inp.nbands, + PARAM.globalv.nlocal, + kv_ptr_in->ngk, + true); // this->k_pack->hvec_array = new ModuleBase::ComplexMatrix[this->k_pack->kv_ptr->get_nks()]; // for( int ik=0; ikk_pack->kv_ptr->get_nks(); ++ik) // { @@ -130,14 +148,18 @@ Exx_Lip::Exx_Lip(const Exx_Info::Exx_Info_Lip& info_in, this->phi.resize(PARAM.globalv.nlocal); for (int iw = 0; iw < PARAM.globalv.nlocal; ++iw) - { this->phi[iw].resize(this->rho_basis->nrxx); } + { + this->phi[iw].resize(this->rho_basis->nrxx); + } this->psi.resize(this->q_pack->kv_ptr->get_nks()); for (int iq = 0; iq < this->q_pack->kv_ptr->get_nks(); ++iq) { this->psi[iq].resize(PARAM.inp.nbands); for (int ib = 0; ib < PARAM.inp.nbands; ++ib) - { this->psi[iq][ib].resize(this->rho_basis->nrxx); } + { + this->psi[iq][ib].resize(this->rho_basis->nrxx); + } } this->recip_qkg2.resize(this->rho_basis->npw); @@ -153,7 +175,9 @@ Exx_Lip::Exx_Lip(const Exx_Info::Exx_Info_Lip& info_in, this->b0.resize(PARAM.globalv.nlocal); this->sum3.resize(PARAM.globalv.nlocal); for (int iw_l = 0; iw_l < PARAM.globalv.nlocal; ++iw_l) - { this->sum3[iw_l].resize(PARAM.globalv.nlocal); } + { + this->sum3[iw_l].resize(PARAM.globalv.nlocal); + } } } @@ -162,7 +186,9 @@ Exx_Lip::Exx_Lip(const Exx_Info::Exx_Info_Lip& info_in, { this->exx_matrix[ik].resize(PARAM.globalv.nlocal); for (int iw_l = 0; iw_l < PARAM.globalv.nlocal; ++iw_l) - { this->exx_matrix[ik][iw_l].resize(PARAM.globalv.nlocal); } + { + this->exx_matrix[ik][iw_l].resize(PARAM.globalv.nlocal); + } } ModuleBase::timer::tick("Exx_Lip", "init"); @@ -172,8 +198,12 @@ template Exx_Lip::~Exx_Lip() { if (this->k_pack) - { delete this->k_pack->hvec_array; this->k_pack->hvec_array = nullptr; } - delete this->k_pack; this->k_pack = nullptr; + { + delete this->k_pack->hvec_array; + this->k_pack->hvec_array = nullptr; + } + delete this->k_pack; + this->k_pack = nullptr; if (PARAM.inp.init_chg == "atomic") { @@ -181,10 +211,12 @@ Exx_Lip::~Exx_Lip() } else if (PARAM.inp.init_chg == "file") { - delete this->q_pack->kv_ptr; this->q_pack->kv_ptr = nullptr; + delete this->q_pack->kv_ptr; + this->q_pack->kv_ptr = nullptr; // delete this->q_pack->wf_ptr; this->q_pack->wf_ptr = nullptr; // delete[] this->q_pack->hvec_array; this->q_pack->hvec_array=nullptr; - delete this->q_pack; this->q_pack = nullptr; + delete this->q_pack; + this->q_pack = nullptr; } } @@ -193,16 +225,26 @@ void Exx_Lip::wf_wg_cal() { ModuleBase::TITLE("Exx_Lip", "wf_wg_cal"); ModuleBase::timer::tick("Exx_Lip", "wf_wg_cal"); - if (PARAM.inp.nspin == 1) { - for (int ik = 0; ik < this->k_pack->kv_ptr->get_nks(); ++ik) { - for (int ib = 0; ib < PARAM.inp.nbands; ++ib) { + if (PARAM.inp.nspin == 1) + { + for (int ik = 0; ik < this->k_pack->kv_ptr->get_nks(); ++ik) + { + for (int ib = 0; ib < PARAM.inp.nbands; ++ib) + { this->k_pack->wf_wg(ik, ib) = this->k_pack->pelec->wg(ik, ib) / 2; - } } } - else if (PARAM.inp.nspin == 2) { - for (int ik = 0; ik < this->k_pack->kv_ptr->get_nks(); ++ik) { - for (int ib = 0; ib < PARAM.inp.nbands; ++ib) { + } + } + } + else if (PARAM.inp.nspin == 2) + { + for (int ik = 0; ik < this->k_pack->kv_ptr->get_nks(); ++ik) + { + for (int ib = 0; ib < PARAM.inp.nbands; ++ib) + { this->k_pack->wf_wg(ik, ib) = this->k_pack->pelec->wg(ik, ib); - } } } + } + } + } ModuleBase::timer::tick("Exx_Lip", "wf_wg_cal"); } @@ -210,7 +252,7 @@ template void Exx_Lip::phi_cal(k_package* kq_pack, const int ikq) { ModuleBase::timer::tick("Exx_Lip", "phi_cal"); - std::vector porter (this->wfc_basis->nrxx); + std::vector porter(this->wfc_basis->nrxx); for (int iw = 0; iw < PARAM.globalv.nlocal; ++iw) { // this->wfc_basis->recip2real(&kq_pack->wf_ptr->wanf2[ikq](iw,0), porter.data(), ikq); @@ -222,7 +264,9 @@ void Exx_Lip::phi_cal(k_package* kq_pack, const int ikq) for (int iy = 0; iy < this->rho_basis->ny; ++iy) { const Treal phase_xy = phase_x + kq_pack->kv_ptr->kvec_d[ikq].y * iy / this->rho_basis->ny; - for (int iz = this->rho_basis->startz_current; iz < this->rho_basis->startz_current + this->rho_basis->nplane; ++iz) + for (int iz = this->rho_basis->startz_current; + iz < this->rho_basis->startz_current + this->rho_basis->nplane; + ++iz) { const Treal phase_xyz = phase_xy + kq_pack->kv_ptr->kvec_d[ikq].z * iz / this->rho_basis->nz; const T exp_tmp = std::exp(phase_xyz * this->two_pi_i); @@ -242,7 +286,7 @@ void Exx_Lip::psi_cal() ModuleBase::timer::tick("Exx_Lip", "psi_cal"); if (PARAM.inp.init_chg == "atomic") { - std::vector porter (this->wfc_basis->nrxx); + std::vector porter(this->wfc_basis->nrxx); for (int iq = 0; iq < this->q_pack->kv_ptr->get_nks(); ++iq) { for (int ib = 0; ib < PARAM.inp.nbands; ++ib) @@ -256,9 +300,12 @@ void Exx_Lip::psi_cal() for (int iy = 0; iy < this->rho_basis->ny; ++iy) { const Treal phase_xy = phase_x + this->q_pack->kv_ptr->kvec_d[iq].y * iy / this->rho_basis->ny; - for (int iz = this->rho_basis->startz_current; iz < this->rho_basis->startz_current + this->rho_basis->nplane; ++iz) + for (int iz = this->rho_basis->startz_current; + iz < this->rho_basis->startz_current + this->rho_basis->nplane; + ++iz) { - const Treal phase_xyz = phase_xy + this->q_pack->kv_ptr->kvec_d[iq].z * iz / this->rho_basis->nz; + const Treal phase_xyz + = phase_xy + this->q_pack->kv_ptr->kvec_d[iq].z * iz / this->rho_basis->nz; const T exp_tmp = std::exp(phase_xyz * this->two_pi_i); this->psi[iq][ib][ir] = porter[ir] * exp_tmp; ++ir; @@ -296,17 +343,17 @@ template void Exx_Lip::judge_singularity(const int ik) { ModuleBase::timer::tick("Exx_Lip", "judge_singularity"); - if (PARAM.inp.init_chg=="atomic") + if (PARAM.inp.init_chg == "atomic") { this->iq_vecik = ik; } - else if(PARAM.inp.init_chg=="file") + else if (PARAM.inp.init_chg == "file") { Treal min_q_minus_k(std::numeric_limits::max()); - for( int iq=0; iqq_pack->kv_ptr->get_nks(); ++iq) + for (int iq = 0; iq < this->q_pack->kv_ptr->get_nks(); ++iq) { const Treal q_minus_k((this->q_pack->kv_ptr->kvec_c[iq] - this->k_pack->kv_ptr->kvec_c[ik]).norm2()); - if(q_minus_k < min_q_minus_k) + if (q_minus_k < min_q_minus_k) { min_q_minus_k = q_minus_k; this->iq_vecik = iq; @@ -320,28 +367,39 @@ template void Exx_Lip::qkg2_exp(const int ik, const int iq) { ModuleBase::timer::tick("Exx_Lip", "qkg2_exp"); - for( int ig=0; igrho_basis->npw; ++ig) + for (int ig = 0; ig < this->rho_basis->npw; ++ig) { - const Treal qkg2 = ((this->q_pack->kv_ptr->kvec_c[iq] - this->k_pack->kv_ptr->kvec_c[ik] + this->rho_basis->gcar[ig]) * (ModuleBase::TWO_PI / this->ucell_ptr->lat0)).norm2(); + const Treal qkg2 + = ((this->q_pack->kv_ptr->kvec_c[iq] - this->k_pack->kv_ptr->kvec_c[ik] + this->rho_basis->gcar[ig]) + * (ModuleBase::TWO_PI / this->ucell_ptr->lat0)) + .norm2(); if (Conv_Coulomb_Pot_K::Ccp_Type::Ccp == info.ccp_type || Conv_Coulomb_Pot_K::Ccp_Type::Hf == info.ccp_type) { if (std::abs(qkg2) < 1e-10) - { this->recip_qkg2[ig] = 0.0; } // 0 to ignore bb/qkg2 when qkg2==0 + { + this->recip_qkg2[ig] = 0.0; + } // 0 to ignore bb/qkg2 when qkg2==0 else - { this->recip_qkg2[ig] = 1.0 / qkg2; } + { + this->recip_qkg2[ig] = 1.0 / qkg2; + } this->sum2_factor += this->recip_qkg2[ig] * std::exp(-info.lambda * qkg2); this->recip_qkg2[ig] = sqrt(this->recip_qkg2[ig]); } else if (Conv_Coulomb_Pot_K::Ccp_Type::Erfc == info.ccp_type) { if (std::abs(qkg2) < 1e-10) - { this->recip_qkg2[ig] = 1.0 / (2 * info.hse_omega); } + { + this->recip_qkg2[ig] = 1.0 / (2 * info.hse_omega); + } else - { this->recip_qkg2[ig] = sqrt((1 - std::exp(-qkg2 / (4 * info.hse_omega * info.hse_omega))) / qkg2); } + { + this->recip_qkg2[ig] = sqrt((1 - std::exp(-qkg2 / (4 * info.hse_omega * info.hse_omega))) / qkg2); + } } else { - throw( std::string(__FILE__) + " line " + std::to_string(__LINE__) ); + throw(std::string(__FILE__) + " line " + std::to_string(__LINE__)); } } ModuleBase::timer::tick("Exx_Lip", "qkg2_exp"); @@ -352,14 +410,16 @@ void Exx_Lip::b_cal(const int ik, const int iq, const int ib) { ModuleBase::timer::tick("Exx_Lip", "b_cal"); const ModuleBase::Vector3 q_minus_k = this->q_pack->kv_ptr->kvec_d[iq] - this->k_pack->kv_ptr->kvec_d[ik]; - std::vector mul_tmp(this->rho_basis->nrxx); - for( size_t ir=0,ix=0; ixrho_basis->nx; ++ix) + std::vector mul_tmp(this->rho_basis->nrxx); + for (size_t ir = 0, ix = 0; ix < this->rho_basis->nx; ++ix) { const Treal phase_x = q_minus_k.x * ix / this->rho_basis->nx; - for( size_t iy=0; iyrho_basis->ny; ++iy) + for (size_t iy = 0; iy < this->rho_basis->ny; ++iy) { const Treal phase_xy = phase_x + q_minus_k.y * iy / this->rho_basis->ny; - for( size_t iz=this->rho_basis->startz_current; izrho_basis->startz_current+this->rho_basis->nplane; ++iz) + for (size_t iz = this->rho_basis->startz_current; + iz < this->rho_basis->startz_current + this->rho_basis->nplane; + ++iz) { const Treal phase_xyz = phase_xy + q_minus_k.z * iz / this->rho_basis->nz; mul_tmp[ir] = std::exp(-phase_xyz * this->two_pi_i); @@ -369,50 +429,65 @@ void Exx_Lip::b_cal(const int ik, const int iq, const int ib) } } - std::vector porter (this->rho_basis->nrxx); - for(size_t iw=0; iw< PARAM.globalv.nlocal; ++iw) + std::vector porter(this->rho_basis->nrxx); + for (size_t iw = 0; iw < PARAM.globalv.nlocal; ++iw) { auto& phi_w = this->phi[iw]; - for( size_t ir=0; irrho_basis->nrxx; ++ir) + for (size_t ir = 0; ir < this->rho_basis->nrxx; ++ir) { - porter[ir] = conj(phi_w[ir]) * mul_tmp[ir] ; + porter[ir] = conj(phi_w[ir]) * mul_tmp[ir]; // porter[ir] = phi_w[ir] * psi_q_b[ir] *exp_tmp[ir] ; } T* const b_w = &this->b[iw * this->rho_basis->npw]; - this->rho_basis->real2recip( porter.data(), b_w); - if (Conv_Coulomb_Pot_K::Ccp_Type::Ccp == info.ccp_type || Conv_Coulomb_Pot_K::Ccp_Type::Hf == info.ccp_type) { - if ((iq == this->iq_vecik) && (gzero_rank_in_pool == GlobalV::RANK_IN_POOL)) { /// need to check while use k_point parallel + this->rho_basis->real2recip(porter.data(), b_w); + if (Conv_Coulomb_Pot_K::Ccp_Type::Ccp == info.ccp_type || Conv_Coulomb_Pot_K::Ccp_Type::Hf == info.ccp_type) + { + if ((iq == this->iq_vecik) && (gzero_rank_in_pool == GlobalV::RANK_IN_POOL)) + { /// need to check while use k_point parallel this->b0[iw] = b_w[this->rho_basis->ig_gge0]; - } } + } + } for (size_t ig = 0; ig < this->rho_basis->npw; ++ig) - { b_w[ig] *= this->recip_qkg2[ig]; } + { + b_w[ig] *= this->recip_qkg2[ig]; + } } ModuleBase::timer::tick("Exx_Lip", "b_cal"); } template -void Exx_Lip::sum3_cal(const int iq, const int ib) +void Exx_Lip::sum3_cal(const int iq, const int ib) { ModuleBase::timer::tick("Exx_Lip", "sum3_cal"); - if (gzero_rank_in_pool == GlobalV::RANK_IN_POOL) { - for (int iw_l = 0; iw_l < PARAM.globalv.nlocal; ++iw_l) { - for (int iw_r = 0; iw_r < PARAM.globalv.nlocal; ++iw_r) { + if (gzero_rank_in_pool == GlobalV::RANK_IN_POOL) + { + for (int iw_l = 0; iw_l < PARAM.globalv.nlocal; ++iw_l) + { + for (int iw_r = 0; iw_r < PARAM.globalv.nlocal; ++iw_r) + { this->sum3[iw_l][iw_r] += this->b0[iw_l] * conj(this->b0[iw_r]) * (Treal)this->q_pack->wf_wg(iq, ib); - } } } + } + } + } ModuleBase::timer::tick("Exx_Lip", "sum3_cal"); } template -void Exx_Lip::b_sum(const int iq, const int ib) // Peize Lin change 2019-04-14 +void Exx_Lip::b_sum(const int iq, const int ib) // Peize Lin change 2019-04-14 { ModuleBase::timer::tick("Exx_Lip", "b_sum"); // this->sum1[iw_l,iw_r] += \sum_{ig} this->b[iw_l,ig] * conj(this->b[iw_r,ig]) * this->q_pack->wf_wg(iq,ib) - LapackConnector::herk( - 'U','N', - PARAM.globalv.nlocal, this->rho_basis->npw, - (Treal)this->q_pack->wf_wg(iq, ib), this->b.data(), this->rho_basis->npw, - 1.0, this->sum1.data(), PARAM.globalv.nlocal); + LapackConnector::herk('U', + 'N', + PARAM.globalv.nlocal, + this->rho_basis->npw, + (Treal)this->q_pack->wf_wg(iq, ib), + this->b.data(), + this->rho_basis->npw, + 1.0, + this->sum1.data(), + PARAM.globalv.nlocal); // cblas_zherk( CblasRowMajor, CblasUpper, CblasNoTrans, // PARAM.globalv.nlocal, this->rho_basis->npw, // this->q_pack->wf_wg(iq,ib), static_cast(this->b), this->rho_basis->npw, @@ -427,26 +502,37 @@ void Exx_Lip::sum_all(const int ik) Treal sum2_factor_g = 0.0; const Treal fourpi_div_omega = 4 * (Treal)(ModuleBase::PI / this->ucell_ptr->omega); const Treal spin_fac = 2.0; - #ifdef __MPI +#ifdef __MPI if (Conv_Coulomb_Pot_K::Ccp_Type::Ccp == info.ccp_type || Conv_Coulomb_Pot_K::Ccp_Type::Hf == info.ccp_type) - { MPI_Reduce(&this->sum2_factor, &sum2_factor_g, 1, MPI_DOUBLE, MPI_SUM, gzero_rank_in_pool, POOL_WORLD); } - #endif - for (size_t iw_l = 1; iw_l < PARAM.globalv.nlocal; ++iw_l) { - for (size_t iw_r = 0; iw_r < iw_l; ++iw_r) { - this->sum1[iw_l * PARAM.globalv.nlocal + iw_r] = conj(this->sum1[iw_r * PARAM.globalv.nlocal + iw_l]); // Peize Lin add conj 2019-04-14 - } } + { + MPI_Reduce(&this->sum2_factor, &sum2_factor_g, 1, MPI_DOUBLE, MPI_SUM, gzero_rank_in_pool, POOL_WORLD); + } +#endif + for (size_t iw_l = 1; iw_l < PARAM.globalv.nlocal; ++iw_l) + { + for (size_t iw_r = 0; iw_r < iw_l; ++iw_r) + { + this->sum1[iw_l * PARAM.globalv.nlocal + iw_r] + = conj(this->sum1[iw_r * PARAM.globalv.nlocal + iw_l]); // Peize Lin add conj 2019-04-14 + } + } for (int iw_l = 0; iw_l < PARAM.globalv.nlocal; ++iw_l) { - for( int iw_r=0; iw_rexx_matrix[ik][iw_l][iw_r] = -fourpi_div_omega * this->sum1[iw_l * PARAM.globalv.nlocal + iw_r] * spin_fac; + this->exx_matrix[ik][iw_l][iw_r] + = -fourpi_div_omega * this->sum1[iw_l * PARAM.globalv.nlocal + iw_r] * spin_fac; if (Conv_Coulomb_Pot_K::Ccp_Type::Ccp == info.ccp_type || Conv_Coulomb_Pot_K::Ccp_Type::Hf == info.ccp_type) { if (gzero_rank_in_pool == GlobalV::RANK_IN_POOL) { - this->exx_matrix[ik][iw_l][iw_r] += spin_fac * (fourpi_div_omega * this->sum3[iw_l][iw_r] * sum2_factor_g); - this->exx_matrix[ik][iw_l][iw_r] += spin_fac * (-1 / (Treal)sqrt(info.lambda * ModuleBase::PI) * (Treal)(this->q_pack->kv_ptr->get_nks() / PARAM.inp.nspin) * this->sum3[iw_l][iw_r]); + this->exx_matrix[ik][iw_l][iw_r] + += spin_fac * (fourpi_div_omega * this->sum3[iw_l][iw_r] * sum2_factor_g); + this->exx_matrix[ik][iw_l][iw_r] + += spin_fac + * (-1 / (Treal)sqrt(info.lambda * ModuleBase::PI) + * (Treal)(this->q_pack->kv_ptr->get_nks() / PARAM.inp.nspin) * this->sum3[iw_l][iw_r]); } } } @@ -457,22 +543,39 @@ void Exx_Lip::sum_all(const int ik) template void Exx_Lip::exx_energy_cal() { - ModuleBase::TITLE("Exx_Lip","exx_energy_cal"); + ModuleBase::TITLE("Exx_Lip", "exx_energy_cal"); ModuleBase::timer::tick("Exx_Lip", "exx_energy_cal"); Treal exx_energy_tmp = 0.0; - for( int ik=0; ikk_pack->kv_ptr->get_nks(); ++ik) { - for( int iw_l=0; iw_lexx_matrix[ik][iw_l][iw_r] * conj((*this->k_pack->hvec_array)(ik, ib, iw_l)) * (*this->k_pack->hvec_array)(ik, ib, iw_r)).real() * this->k_pack->wf_wg(ik, ib); - } } } } - #ifdef __MPI - MPI_Allreduce( &exx_energy_tmp, &this->exx_energy, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); // !!! k_point parallel incompleted. different pools have different kv.set_nks(>) deadlock - #endif - this->exx_energy *= (PARAM.inp.nspin==1) ? 2 : 1; - this->exx_energy /= 2; // ETOT = E_band - 1/2 E_exx + for (int ik = 0; ik < this->k_pack->kv_ptr->get_nks(); ++ik) + { + for (int iw_l = 0; iw_l < PARAM.globalv.nlocal; ++iw_l) + { + for (int iw_r = 0; iw_r < PARAM.globalv.nlocal; ++iw_r) + { + for (int ib = 0; ib < PARAM.inp.nbands; ++ib) + { + exx_energy_tmp + += (this->exx_matrix[ik][iw_l][iw_r] * conj((*this->k_pack->hvec_array)(ik, ib, iw_l)) + * (*this->k_pack->hvec_array)(ik, ib, iw_r)) + .real() + * this->k_pack->wf_wg(ik, ib); + } + } + } + } +#ifdef __MPI + MPI_Allreduce( + &exx_energy_tmp, + &this->exx_energy, + 1, + MPI_DOUBLE, + MPI_SUM, + MPI_COMM_WORLD); // !!! k_point parallel incompleted. different pools have different kv.set_nks(>) deadlock +#endif + this->exx_energy *= (PARAM.inp.nspin == 1) ? 2 : 1; + this->exx_energy /= 2; // ETOT = E_band - 1/2 E_exx ModuleBase::timer::tick("Exx_Lip", "exx_energy_cal"); } @@ -482,43 +585,49 @@ void Exx_Lip::write_q_pack() const ModuleBase::timer::tick("Exx_Lip", "write_q_pack"); if (PARAM.inp.out_chg[0] == 0) - { return; } + { + return; + } if (!GlobalV::RANK_IN_POOL) { const std::string exx_q_pack = "exx_q_pack/"; - const std::string command_mkdir = "test -d " + PARAM.globalv.global_out_dir + exx_q_pack + " || mkdir " + PARAM.globalv.global_out_dir + exx_q_pack; - assert( system(command_mkdir.c_str()) == 0); + const std::string command_mkdir = "test -d " + PARAM.globalv.global_out_dir + exx_q_pack + " || mkdir " + + PARAM.globalv.global_out_dir + exx_q_pack; + assert(system(command_mkdir.c_str()) == 0); - const std::string command_kpoint = "test -f " + PARAM.globalv.global_out_dir + exx_q_pack + PARAM.inp.kpoint_file + " || cp " + PARAM.inp.kpoint_file + " " + PARAM.globalv.global_out_dir + exx_q_pack + PARAM.inp.kpoint_file; - assert( system(command_kpoint.c_str()) == 0); + const std::string command_kpoint = "test -f " + PARAM.globalv.global_out_dir + exx_q_pack + + PARAM.inp.kpoint_file + " || cp " + PARAM.inp.kpoint_file + " " + + PARAM.globalv.global_out_dir + exx_q_pack + PARAM.inp.kpoint_file; + assert(system(command_kpoint.c_str()) == 0); std::stringstream ss_wf_wg; ss_wf_wg << PARAM.globalv.global_out_dir << exx_q_pack << "wf_wg_" << GlobalV::MY_POOL; std::ofstream ofs_wf_wg(ss_wf_wg.str().c_str()); - for( int iq = 0; iq < this->q_pack->kv_ptr->get_nks(); ++iq) + for (int iq = 0; iq < this->q_pack->kv_ptr->get_nks(); ++iq) { - for( int ib=0; ibq_pack->wf_wg(iq,ib)<<"\t"; + ofs_wf_wg << this->q_pack->wf_wg(iq, ib) << "\t"; } - ofs_wf_wg<q_pack->kv_ptr->get_nks(); ++iq) + for (int iq = 0; iq < this->q_pack->kv_ptr->get_nks(); ++iq) { - for( int iw=0; iwq_pack->hvec_array)(iq, ib, iw).real() << " " << (*this->q_pack->hvec_array)(iq, ib, iw).imag() << " "; + ofs_hvec << (*this->q_pack->hvec_array)(iq, ib, iw).real() << " " + << (*this->q_pack->hvec_array)(iq, ib, iw).imag() << " "; } - ofs_hvec<q_pack = new k_package(); this->q_pack->kv_ptr = new K_Vectors(); const std::string exx_kpoint_card = PARAM.globalv.global_out_dir + exx_q_pack + PARAM.inp.kpoint_file; - this->q_pack->kv_ptr->set( symm, exx_kpoint_card, PARAM.inp.nspin, this->ucell_ptr->G, this->ucell_ptr->latvec, GlobalV::ofs_running ); - this->q_pack->wf_ptr = new wavefunc(); + this->q_pack->kv_ptr->set( symm, exx_kpoint_card, PARAM.inp.nspin, this->ucell_ptr->G, this->ucell_ptr->latvec, +GlobalV::ofs_running ); this->q_pack->wf_ptr = new wavefunc(); this->q_pack->wf_ptr->allocate(this->q_pack->kv_ptr->get_nkstot(), this->q_pack->kv_ptr->get_nks(), this->q_pack->kv_ptr->ngk.data(), this->wfc_basis->npwk_max); // mohan update 2021-02-25 - // this->q_pack->wf_ptr->init(this->q_pack->kv_ptr->get_nks(),this->q_pack->kv_ptr,this->ucell_ptr,old_pwptr,&ppcell,&GlobalC::ORB,&hm,&Pkpoints); + // +this->q_pack->wf_ptr->init(this->q_pack->kv_ptr->get_nks(),this->q_pack->kv_ptr,this->ucell_ptr,old_pwptr,&ppcell,&GlobalC::ORB,&hm,&Pkpoints); this->q_pack->wf_ptr->table_local.create(ucell.ntype, ucell.nmax_total, PARAM.globalv.nqx); - // this->q_pack->wf_ptr->table_local.create(this->q_pack->wf_ptr->this->ucell_ptr->ntype, this->q_pack->wf_ptr->this->ucell_ptr->nmax_total, PARAM.globalv.nqx); - #ifdef __LCAO + // this->q_pack->wf_ptr->table_local.create(this->q_pack->wf_ptr->this->ucell_ptr->ntype, +this->q_pack->wf_ptr->this->ucell_ptr->nmax_total, PARAM.globalv.nqx); #ifdef __LCAO Wavefunc_in_pw::make_table_q(GlobalC::ORB.orbital_file, this->q_pack->wf_ptr->table_local); - // Wavefunc_in_pw::make_table_q(this->q_pack->wf_ptr->ORB_ptr->orbital_file, this->q_pack->wf_ptr->table_local, this->q_pack->wf_ptr); - for(int iq=0; iqq_pack->kv_ptr->get_nks(); ++iq) + // Wavefunc_in_pw::make_table_q(this->q_pack->wf_ptr->ORB_ptr->orbital_file, this->q_pack->wf_ptr->table_local, +this->q_pack->wf_ptr); for(int iq=0; iqq_pack->kv_ptr->get_nks(); ++iq) { Wavefunc_in_pw::produce_local_basis_in_pw(iq, this->wfc_basis, sf, this->q_pack->wf_ptr->wanf2[iq], this->q_pack->wf_ptr->table_local); - // Wavefunc_in_pw::produce_local_basis_in_pw(iq, this->q_pack->wf_ptr->wanf2[iq], this->q_pack->wf_ptr->table_local, + // Wavefunc_in_pw::produce_local_basis_in_pw(iq, this->q_pack->wf_ptr->wanf2[iq], +this->q_pack->wf_ptr->table_local, // this->q_pack->wf_ptr); } #endif @@ -603,7 +714,8 @@ void Exx_Lip::read_q_pack(const ModuleSymmetry::Symmetry& symm, #ifdef __MPI for( int iq=0; iqq_pack->kv_ptr->get_nks(); ++iq) { - MPI_Bcast( this->q_pack->hvec_array[iq].c, PARAM.globalv.nlocal*PARAM.inp.nbands, MPI_DOUBLE_COMPLEX, 0, POOL_WORLD); + MPI_Bcast( this->q_pack->hvec_array[iq].c, PARAM.globalv.nlocal*PARAM.inp.nbands, MPI_DOUBLE_COMPLEX, 0, +POOL_WORLD); } #endif return; diff --git a/source/module_ri/exx_opt_orb.h b/source/module_ri/exx_opt_orb.h index 2b68dfa40a..83c63131ed 100644 --- a/source/module_ri/exx_opt_orb.h +++ b/source/module_ri/exx_opt_orb.h @@ -1,41 +1,47 @@ #ifndef EXX_OPT_ORB_H #define EXX_OPT_ORB_H -#include "../module_base/matrix.h" -#include "../module_base/element_basis_index.h" -#include "module_cell/klist.h" +#include "../source_base/element_basis_index.h" +#include "../source_base/matrix.h" #include "module_basis/module_ao/ORB_read.h" -#include +#include "module_cell/klist.h" + +#include #include #include -#include +#include class Exx_Opt_Orb { -public: - void generate_matrix(const K_Vectors &kv, const UnitCell& ucell, const LCAO_Orbitals& orb) const; -private: - std::vector>> cal_I( - const std::map>>>> &ms, - const size_t TA, const size_t IA, const size_t TB, const size_t IB ) const; - RI::Tensor cal_proj( - const RI::Tensor & m_big, - const std::vector> & m_left, - const std::vector>> & m_middle, - const std::vector> & m_right ) const; - void print_matrix( - const UnitCell& ucell, - const K_Vectors &kv, - const std::string& file_name, - const std::vector> &matrix_Q, - const std::vector>> &matrix_S, - const RI::Tensor &matrix_V, - const size_t TA, const size_t IA, const size_t TB, const size_t IB, - const std::vector& orb_cutoff, - const ModuleBase::Element_Basis_Index::Range &range_jles, - const ModuleBase::Element_Basis_Index::IndexLNM &index_jles) const; - std::map>> get_radial_R(const UnitCell& ucell) const; - - int kmesh_times = 4; + public: + void generate_matrix(const K_Vectors& kv, const UnitCell& ucell, const LCAO_Orbitals& orb) const; + + private: + std::vector>> cal_I( + const std::map>>>>& ms, + const size_t TA, + const size_t IA, + const size_t TB, + const size_t IB) const; + RI::Tensor cal_proj(const RI::Tensor& m_big, + const std::vector>& m_left, + const std::vector>>& m_middle, + const std::vector>& m_right) const; + void print_matrix(const UnitCell& ucell, + const K_Vectors& kv, + const std::string& file_name, + const std::vector>& matrix_Q, + const std::vector>>& matrix_S, + const RI::Tensor& matrix_V, + const size_t TA, + const size_t IA, + const size_t TB, + const size_t IB, + const std::vector& orb_cutoff, + const ModuleBase::Element_Basis_Index::Range& range_jles, + const ModuleBase::Element_Basis_Index::IndexLNM& index_jles) const; + std::map>> get_radial_R(const UnitCell& ucell) const; + + int kmesh_times = 4; }; #endif diff --git a/source/module_ri/module_exx_symmetry/irreducible_sector.h b/source/module_ri/module_exx_symmetry/irreducible_sector.h index 7a12b9a232..74a67a0774 100644 --- a/source/module_ri/module_exx_symmetry/irreducible_sector.h +++ b/source/module_ri/module_exx_symmetry/irreducible_sector.h @@ -1,134 +1,187 @@ #pragma once -#include +#include "module_cell/klist.h" +#include "module_cell/module_symmetry/symmetry.h" +#include "module_cell/unitcell.h" +#include "source_base/abfs-vector3_order.h" +#include "source_base/matrix3.h" + #include #include -#include "module_base/abfs-vector3_order.h" -#include "module_base/matrix3.h" -#include "module_cell/unitcell.h" -#include "module_cell/module_symmetry/symmetry.h" -#include "module_cell/klist.h" +#include namespace ModuleSymmetry { - using Tap = std::pair; - using TC = std::array; - using TapR = std::pair; - using TCdouble = Abfs::Vector3_Order; +using Tap = std::pair; +using TC = std::array; +using TapR = std::pair; +using TCdouble = Abfs::Vector3_Order; - class Irreducible_Sector +class Irreducible_Sector +{ + public: + struct ap_less_func { - public: - struct ap_less_func + bool operator()(const Tap& lhs, const Tap& rhs) const { - bool operator()(const Tap& lhs, const Tap& rhs) const + if (lhs.first < rhs.first) + { + return true; + } + else if (lhs.first > rhs.first) { - if (lhs.first < rhs.first) {return true; - } else if (lhs.first > rhs.first) {return false; - } else { return lhs.second < rhs.second; -} + return false; } - }; - struct apR_less_func + else + { + return lhs.second < rhs.second; + } + } + }; + struct apR_less_func + { + bool operator()(const TapR& lhs, const TapR& rhs) const { - bool operator()(const TapR& lhs, const TapR& rhs) const + if (lhs.first < rhs.first) + { + return true; + } + else if (lhs.first > rhs.first) { - if (lhs.first < rhs.first) {return true; - } else if (lhs.first > rhs.first) {return false; - } else { return lhs.second < rhs.second; -} + return false; } - }; - struct len_less_func + else + { + return lhs.second < rhs.second; + } + } + }; + struct len_less_func + { + int norm2(const TC& R) const + { + return R[0] * R[0] + R[1] * R[1] + R[2] * R[2]; + } + bool operator()(const TC& lhs, const TC& rhs) const { - int norm2(const TC& R)const + if (norm2(lhs) < norm2(rhs)) + { + return true; + } + else if (norm2(lhs) > norm2(rhs)) { - return R[0] * R[0] + R[1] * R[1] + R[2] * R[2]; + return false; } - bool operator()(const TC& lhs, const TC& rhs) const + else { - if (norm2(lhs) < norm2(rhs)) {return true; - } else if (norm2(lhs) > norm2(rhs)) {return false; - } else { return lhs < rhs; -} + return lhs < rhs; } - }; - - //-------------------------------------------------------------------------------- - /// The main function to find irreducible sector: {abR} - void find_irreducible_sector(const Symmetry& symm, const Atom* atoms, const Statistics& st, - const std::vector& Rs, const TC& period, const Lattice& lat); - const std::map>& get_irreducible_sector()const { return this->irreducible_sector_; } - // const std::map>> convirt_irreducible_sector() {}; - //-------------------------------------------------------------------------------- - - /// Perfoming {R|t} to atom position r in the R=0 lattice, we get Rr+t, which may get out of R=0 lattice, - /// whose image in R=0 lattice is r'=Rr+t-O. This function is to get O for each atom and each symmetry operation. - /// the range of direct position is [-0.5, 0.5). - TCdouble get_return_lattice(const Symmetry& symm, - const ModuleBase::Matrix3& gmatd, const TCdouble gtransd, - const TCdouble& posd_a1, const TCdouble& posd_a2)const; - - protected: - void cal_return_lattice_all(const Symmetry& symm, const Atom* atoms, const Statistics& st); - - //-------------------------------------------------------------------------------- - /// The sub functions to find irreducible sector: {abR} - - /// gauge='L' means H(R)=; gauge='R' means H(R)=<0|H|R> - /// gauge='L': R'=R+O_1-O_2; gauge='R': R'=R+O_2-O_1 - TC rotate_R(const Symmetry& symm, const int isym, const int iat1, const int iat2, const TC& R, const char gauge = 'R')const; - TapR rotate_apR_by_formula(const Symmetry& symm, const int isym, const TapR& iapR, const char gauge = 'R')const; - /// gauge='L': tau_a + R - tau_b; gauge='R': tau_a - tau_b - R (direct) - TCdouble get_aRb_direct(const Atom* atoms, const Statistics& st, const int iat1, const int iat2, const TC& R, const char gauge = 'R')const; - TCdouble get_aRb_direct(const Atom* atoms, const Statistics& st, const int iat1, const int iat2, const TCdouble& R, const char gauge = 'R')const; - - ModuleBase::Matrix3 direct_to_cartesian(const ModuleBase::Matrix3& d, const ModuleBase::Matrix3& latvec)const; - - // /// find the irreducible atom pairs - // /// algorithm 1: the way finding irreducible k-points - // void find_irreducible_atom_pairs(const Symmetry& symm); - // /// algorithm 2: taking out atom pairs from the initial set - // void find_irreducible_atom_pairs_set(const Symmetry& symm); - // /// double check between the two algorithms - // void test_irreducible_atom_pairs(const Symmetry& symm); - - void output_full_map_to_irreducible_sector(const int nat); - void output_sector_star(); - void write_irreducible_sector(); - - //-------------------------------------------------------------------------------- - /// The sub functions judge special symmetry - void gen_symmetry_BvK(const Symmetry& symm, const Atom* atoms, const Lattice& lat, const Statistics& st, const TC bvk_period); - /// whether in 2D plain or not for each symmetry operation - // std::vector in_plain(const ModuleSymmetry::Symmetry& symm, const ModuleBase::Matrix3& latvec)const; - //-------------------------------------------------------------------------------- - - //-------------------------------------------------------------------------------- - /// irreducible atom pairs: [n_iap][(isym, ap=(iat1, iat2))] - // std::vector> atompair_stars_; - - ///The index range of the orbital matrix to be calculated: irreducible R in irreducible atom pairs - // (including R in other atom pairs that cannot rotate into R_stars_[irreducebule_ap]) - std::map> irreducible_sector_; - - // //[natoms*natoms](R, (isym, irreducible_R)) - // std::vector>> full_map_to_irreducible_sector_; - // (abR) -> (isym, abR) - std::map, apR_less_func> full_map_to_irreducible_sector_; - - // all the {abR}s , where the isym=0 one in each star forms the irreducible sector. - // [irreducible sector size][isym, ((ab),R)] - std::map> sector_stars_; - - /// the direct lattice vector of {R|t}\tau-\tau' for each atoms and each symmetry operation. [natom][nsym] - std::vector> return_lattice_; - - std::vector invmap_; - - /// symmetry info for BvK supercell - std::vector isymbvk_to_isym_; - int bvk_nsym_; - - friend class Symmetry_rotation; + } }; -} \ No newline at end of file + + //-------------------------------------------------------------------------------- + /// The main function to find irreducible sector: {abR} + void find_irreducible_sector(const Symmetry& symm, + const Atom* atoms, + const Statistics& st, + const std::vector& Rs, + const TC& period, + const Lattice& lat); + const std::map>& get_irreducible_sector() const + { + return this->irreducible_sector_; + } + // const std::map>> convirt_irreducible_sector() {}; + //-------------------------------------------------------------------------------- + + /// Perfoming {R|t} to atom position r in the R=0 lattice, we get Rr+t, which may get out of R=0 lattice, + /// whose image in R=0 lattice is r'=Rr+t-O. This function is to get O for each atom and each symmetry operation. + /// the range of direct position is [-0.5, 0.5). + TCdouble get_return_lattice(const Symmetry& symm, + const ModuleBase::Matrix3& gmatd, + const TCdouble gtransd, + const TCdouble& posd_a1, + const TCdouble& posd_a2) const; + + protected: + void cal_return_lattice_all(const Symmetry& symm, const Atom* atoms, const Statistics& st); + + //-------------------------------------------------------------------------------- + /// The sub functions to find irreducible sector: {abR} + + /// gauge='L' means H(R)=; gauge='R' means H(R)=<0|H|R> + /// gauge='L': R'=R+O_1-O_2; gauge='R': R'=R+O_2-O_1 + TC rotate_R(const Symmetry& symm, + const int isym, + const int iat1, + const int iat2, + const TC& R, + const char gauge = 'R') const; + TapR rotate_apR_by_formula(const Symmetry& symm, const int isym, const TapR& iapR, const char gauge = 'R') const; + /// gauge='L': tau_a + R - tau_b; gauge='R': tau_a - tau_b - R (direct) + TCdouble get_aRb_direct(const Atom* atoms, + const Statistics& st, + const int iat1, + const int iat2, + const TC& R, + const char gauge = 'R') const; + TCdouble get_aRb_direct(const Atom* atoms, + const Statistics& st, + const int iat1, + const int iat2, + const TCdouble& R, + const char gauge = 'R') const; + + ModuleBase::Matrix3 direct_to_cartesian(const ModuleBase::Matrix3& d, const ModuleBase::Matrix3& latvec) const; + + // /// find the irreducible atom pairs + // /// algorithm 1: the way finding irreducible k-points + // void find_irreducible_atom_pairs(const Symmetry& symm); + // /// algorithm 2: taking out atom pairs from the initial set + // void find_irreducible_atom_pairs_set(const Symmetry& symm); + // /// double check between the two algorithms + // void test_irreducible_atom_pairs(const Symmetry& symm); + + void output_full_map_to_irreducible_sector(const int nat); + void output_sector_star(); + void write_irreducible_sector(); + + //-------------------------------------------------------------------------------- + /// The sub functions judge special symmetry + void gen_symmetry_BvK(const Symmetry& symm, + const Atom* atoms, + const Lattice& lat, + const Statistics& st, + const TC bvk_period); + /// whether in 2D plain or not for each symmetry operation + // std::vector in_plain(const ModuleSymmetry::Symmetry& symm, const ModuleBase::Matrix3& latvec)const; + //-------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------- + /// irreducible atom pairs: [n_iap][(isym, ap=(iat1, iat2))] + // std::vector> atompair_stars_; + + /// The index range of the orbital matrix to be calculated: irreducible R in irreducible atom pairs + // (including R in other atom pairs that cannot rotate into R_stars_[irreducebule_ap]) + std::map> irreducible_sector_; + + // //[natoms*natoms](R, (isym, irreducible_R)) + // std::vector>> full_map_to_irreducible_sector_; + // (abR) -> (isym, abR) + std::map, apR_less_func> full_map_to_irreducible_sector_; + + // all the {abR}s , where the isym=0 one in each star forms the irreducible sector. + // [irreducible sector size][isym, ((ab),R)] + std::map> sector_stars_; + + /// the direct lattice vector of {R|t}\tau-\tau' for each atoms and each symmetry operation. [natom][nsym] + std::vector> return_lattice_; + + std::vector invmap_; + + /// symmetry info for BvK supercell + std::vector isymbvk_to_isym_; + int bvk_nsym_; + + friend class Symmetry_rotation; +}; +} // namespace ModuleSymmetry \ No newline at end of file diff --git a/source/module_ri/module_exx_symmetry/symmetry_rotation.cpp b/source/module_ri/module_exx_symmetry/symmetry_rotation.cpp index 27cfc8e723..e85c9c374c 100644 --- a/source/module_ri/module_exx_symmetry/symmetry_rotation.cpp +++ b/source/module_ri/module_exx_symmetry/symmetry_rotation.cpp @@ -1,488 +1,663 @@ #include "symmetry_rotation.h" -#include "module_base/constants.h" -#include "module_parameter/parameter.h" -#include -#include "module_base/parallel_reduce.h" -#include "module_base/scalapack_connector.h" -#include "module_base/tool_title.h" -#include "module_base/timer.h" -#include "module_base/mathzone.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/constants.h" +#include "source_base/mathzone.h" +#include "source_base/parallel_reduce.h" +#include "source_base/scalapack_connector.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" + +#include namespace ModuleSymmetry { - void Symmetry_rotation::set_Cs_rotation(const std::vector>& abfs_l_nchi) +void Symmetry_rotation::set_Cs_rotation(const std::vector>& abfs_l_nchi) +{ + this->reduce_Cs_ = true; + this->abfs_l_nchi_ = abfs_l_nchi; + this->abfs_Lmax_ = 0; + for (auto& abfs_T: abfs_l_nchi) { - this->reduce_Cs_ = true; - this->abfs_l_nchi_ = abfs_l_nchi; - this->abfs_Lmax_ = 0; - for (auto& abfs_T : abfs_l_nchi) { this->abfs_Lmax_ = std::max(this->abfs_Lmax_, static_cast(abfs_T.size()) - 1); + this->abfs_Lmax_ = std::max(this->abfs_Lmax_, static_cast(abfs_T.size()) - 1); + } } +void Symmetry_rotation::cal_Ms(const K_Vectors& kv, + // const std::vector>& kstars, + const UnitCell& ucell, + const Parallel_2D& pv) +{ + ModuleBase::TITLE("Symmetry_rotation", "cal_Ms"); + ModuleBase::timer::tick("Symmetry_rotation", "cal_Ms"); + + this->nsym_ = ucell.symm.nrotk; + this->eps_ = ucell.symm.epsilon; + if (this->irs_.invmap_.empty()) + { + this->irs_.invmap_.resize(ucell.symm.nrotk); + ucell.symm.gmatrix_invmap(ucell.symm.gmatrix, ucell.symm.nrotk, this->irs_.invmap_.data()); } - void Symmetry_rotation::cal_Ms(const K_Vectors& kv, - //const std::vector>& kstars, - const UnitCell& ucell, const Parallel_2D& pv) + // 1. calculate the rotation matrix in real spherical harmonics representation for each symmetry operation: [T_l + // (isym)]_mm' + std::vector gmatc(nsym_); + for (int i = 0; i < nsym_; ++i) { - ModuleBase::TITLE("Symmetry_rotation", "cal_Ms"); - ModuleBase::timer::tick("Symmetry_rotation", "cal_Ms"); + gmatc[i] = this->irs_.direct_to_cartesian(ucell.symm.gmatrix[i], ucell.latvec); + } + this->cal_rotmat_Slm(gmatc.data(), reduce_Cs_ ? std::max(this->abfs_Lmax_, ucell.lmax) : ucell.lmax); - this->nsym_ = ucell.symm.nrotk; - this->eps_ = ucell.symm.epsilon; - if (this->irs_.invmap_.empty()) + // 2. calculate the rotation matrix in AO-representation for each ibz_kpoint and symmetry operation: M(k, isym) + auto restrict_kpt = [](const TCdouble& kvec, const double& symm_prec) -> TCdouble { // in (-0.5, 0.5] + TCdouble kvec_res; + kvec_res.x = fmod(kvec.x + 100.5 - 0.5 * symm_prec, 1) - 0.5 + 0.5 * symm_prec; + kvec_res.y = fmod(kvec.y + 100.5 - 0.5 * symm_prec, 1) - 0.5 + 0.5 * symm_prec; + kvec_res.z = fmod(kvec.z + 100.5 - 0.5 * symm_prec, 1) - 0.5 + 0.5 * symm_prec; + if (std::abs(kvec_res.x) < symm_prec) { - this->irs_.invmap_.resize(ucell.symm.nrotk); - ucell.symm.gmatrix_invmap(ucell.symm.gmatrix, ucell.symm.nrotk, this->irs_.invmap_.data()); + kvec_res.x = 0.0; } - // 1. calculate the rotation matrix in real spherical harmonics representation for each symmetry operation: [T_l (isym)]_mm' - std::vector gmatc(nsym_); - for (int i = 0;i < nsym_;++i) { gmatc[i] = this->irs_.direct_to_cartesian(ucell.symm.gmatrix[i], ucell.latvec); -} - this->cal_rotmat_Slm(gmatc.data(), reduce_Cs_ ? std::max(this->abfs_Lmax_, ucell.lmax) : ucell.lmax); - - // 2. calculate the rotation matrix in AO-representation for each ibz_kpoint and symmetry operation: M(k, isym) - auto restrict_kpt = [](const TCdouble& kvec, const double& symm_prec) -> TCdouble - {// in (-0.5, 0.5] - TCdouble kvec_res; - kvec_res.x = fmod(kvec.x + 100.5 - 0.5 * symm_prec, 1) - 0.5 + 0.5 * symm_prec; - kvec_res.y = fmod(kvec.y + 100.5 - 0.5 * symm_prec, 1) - 0.5 + 0.5 * symm_prec; - kvec_res.z = fmod(kvec.z + 100.5 - 0.5 * symm_prec, 1) - 0.5 + 0.5 * symm_prec; - if (std::abs(kvec_res.x) < symm_prec) { kvec_res.x = 0.0; -} - if (std::abs(kvec_res.y) < symm_prec) { kvec_res.y = 0.0; -} - if (std::abs(kvec_res.z) < symm_prec) { kvec_res.z = 0.0; -} - return kvec_res; - }; - int nks_ibz = kv.kstars.size(); // kv.nks = 2 * kv.nks_ibz when nspin=2 - this->Ms_.resize(nks_ibz); - for (int ik_ibz = 0;ik_ibz < nks_ibz;++ik_ibz) + if (std::abs(kvec_res.y) < symm_prec) { - // const TCdouble& kvec_d_ibz = restrict_kpt((*kstars[ik_ibz].begin()).second * ucell.symm.kgmatrix[(*kstars[ik_ibz].begin()).first], ucell.symm.epsilon); - for (auto& isym_kvd : kv.kstars[ik_ibz]) { - if (isym_kvd.first < nsym_) { - this->Ms_[ik_ibz][isym_kvd.first] = this->contruct_2d_rot_mat_ao(ucell.symm, ucell.atoms, ucell.st, kv.kvec_d[ik_ibz], isym_kvd.first, pv); -} -} + kvec_res.y = 0.0; + } + if (std::abs(kvec_res.z) < symm_prec) + { + kvec_res.z = 0.0; } + return kvec_res; + }; + int nks_ibz = kv.kstars.size(); // kv.nks = 2 * kv.nks_ibz when nspin=2 + this->Ms_.resize(nks_ibz); + for (int ik_ibz = 0; ik_ibz < nks_ibz; ++ik_ibz) + { + // const TCdouble& kvec_d_ibz = restrict_kpt((*kstars[ik_ibz].begin()).second * + // ucell.symm.kgmatrix[(*kstars[ik_ibz].begin()).first], ucell.symm.epsilon); + for (auto& isym_kvd: kv.kstars[ik_ibz]) + { + if (isym_kvd.first < nsym_) + { + this->Ms_[ik_ibz][isym_kvd.first] = this->contruct_2d_rot_mat_ao(ucell.symm, + ucell.atoms, + ucell.st, + kv.kvec_d[ik_ibz], + isym_kvd.first, + pv); + } + } + } - // output Ms of isym=1 - // std::ofstream ofs("Ms_kibz7_sym7.dat"); - // for (int i = 0;i < pv.get_row_size();++i) - // { - // for (int j = 0;j < pv.get_col_size();++j) - // { - // ofs << std::setprecision(10) << this->Ms_[7][7][j * pv.get_col_size() + i] << " "; - // } - // ofs << std::endl; - // } - // ofs << std::endl; - // ofs.close(); + // output Ms of isym=1 + // std::ofstream ofs("Ms_kibz7_sym7.dat"); + // for (int i = 0;i < pv.get_row_size();++i) + // { + // for (int j = 0;j < pv.get_col_size();++j) + // { + // ofs << std::setprecision(10) << this->Ms_[7][7][j * pv.get_col_size() + i] << " "; + // } + // ofs << std::endl; + // } + // ofs << std::endl; + // ofs.close(); - ModuleBase::timer::tick("Symmetry_rotation", "cal_Ms"); - } + ModuleBase::timer::tick("Symmetry_rotation", "cal_Ms"); +} - std::vector>> Symmetry_rotation::restore_dm(const K_Vectors& kv, - const std::vector>>& dm_k_ibz, const Parallel_2D& pv)const +std::vector>> Symmetry_rotation::restore_dm( + const K_Vectors& kv, + const std::vector>>& dm_k_ibz, + const Parallel_2D& pv) const +{ + ModuleBase::TITLE("Symmetry_rotation", "restore_dm"); + ModuleBase::timer::tick("Symmetry_rotation", "restore_dm"); + auto vec3_eq = [](const TCdouble& v1, const TCdouble& v2, const double& prec) -> bool { + return (std::abs(v1.x - v2.x) < prec) && (std::abs(v1.y - v2.y) < prec) && (std::abs(v1.z - v2.z) < prec); + }; + auto vec_conj + = [](const std::vector>& z, const double scal = 1.0) -> std::vector> { + std::vector> z_conj(z.size()); + for (int i = 0; i < z.size(); ++i) + { + z_conj[i] = std::conj(z[i]) * scal; + } + return z_conj; + }; + std::vector>> dm_k_full; + int nspin0 = PARAM.inp.nspin == 2 ? 2 : 1; + dm_k_full.reserve(kv.get_nkstot_full() * nspin0); // nkstot_full didn't doubled by spin + int nk = kv.get_nkstot() / nspin0; + for (int is = 0; is < nspin0; ++is) { - ModuleBase::TITLE("Symmetry_rotation", "restore_dm"); - ModuleBase::timer::tick("Symmetry_rotation", "restore_dm"); - auto vec3_eq = [](const TCdouble& v1, const TCdouble& v2, const double& prec) -> bool - { - return (std::abs(v1.x - v2.x) < prec) && (std::abs(v1.y - v2.y) < prec) && (std::abs(v1.z - v2.z) < prec); - }; - auto vec_conj = [](const std::vector>& z, const double scal = 1.0) -> std::vector> + for (int ik_ibz = 0; ik_ibz < nk; ++ik_ibz) + { + for (auto& isym_kvd: kv.kstars[ik_ibz]) { - std::vector> z_conj(z.size()); - for (int i = 0;i < z.size();++i) { z_conj[i] = std::conj(z[i]) * scal; } - return z_conj; - }; - std::vector>> dm_k_full; - int nspin0 = PARAM.inp.nspin == 2 ? 2 : 1; - dm_k_full.reserve(kv.get_nkstot_full() * nspin0); //nkstot_full didn't doubled by spin - int nk = kv.get_nkstot() / nspin0; - for (int is = 0;is < nspin0;++is) { - for (int ik_ibz = 0;ik_ibz < nk;++ik_ibz) { - for (auto& isym_kvd : kv.kstars[ik_ibz]) { - if (isym_kvd.first == 0) + if (isym_kvd.first == 0) + { + double factor = 1.0 / static_cast(kv.kstars[ik_ibz].size()); + std::vector> dm_scaled(pv.get_local_size()); + for (int i = 0; i < pv.get_local_size(); ++i) { - double factor = 1.0 / static_cast(kv.kstars[ik_ibz].size()); - std::vector> dm_scaled(pv.get_local_size()); - for (int i = 0;i < pv.get_local_size();++i) { dm_scaled[i] = factor * dm_k_ibz[ik_ibz + is * nk][i]; } - dm_k_full.push_back(dm_scaled); + dm_scaled[i] = factor * dm_k_ibz[ik_ibz + is * nk][i]; } - else if (vec3_eq(isym_kvd.second, -kv.kvec_d[ik_ibz], this->eps_) && this->TRS_first_) { - dm_k_full.push_back(vec_conj(dm_k_ibz[ik_ibz + is * nk], 1.0 / static_cast(kv.kstars[ik_ibz].size()))); - } else if (isym_kvd.first < nsym_) { //space group operations - dm_k_full.push_back(this->rot_matrix_ao(dm_k_ibz[ik_ibz + is * nk], ik_ibz, kv.kstars[ik_ibz].size(), isym_kvd.first, pv)); - } else { // TRS*spacegroup operations - dm_k_full.push_back(this->rot_matrix_ao(dm_k_ibz[ik_ibz + is * nk], ik_ibz, kv.kstars[ik_ibz].size(), isym_kvd.first - nsym_, pv, true)); -} -} -} -} - + dm_k_full.push_back(dm_scaled); + } + else if (vec3_eq(isym_kvd.second, -kv.kvec_d[ik_ibz], this->eps_) && this->TRS_first_) + { + dm_k_full.push_back( + vec_conj(dm_k_ibz[ik_ibz + is * nk], 1.0 / static_cast(kv.kstars[ik_ibz].size()))); + } + else if (isym_kvd.first < nsym_) + { // space group operations + dm_k_full.push_back(this->rot_matrix_ao(dm_k_ibz[ik_ibz + is * nk], + ik_ibz, + kv.kstars[ik_ibz].size(), + isym_kvd.first, + pv)); + } + else + { // TRS*spacegroup operations + dm_k_full.push_back(this->rot_matrix_ao(dm_k_ibz[ik_ibz + is * nk], + ik_ibz, + kv.kstars[ik_ibz].size(), + isym_kvd.first - nsym_, + pv, + true)); + } + } + } + } - // test for output -/* - std::ofstream ofs("DM.dat"); - int ik = 0; - for (int ikibz = 0;ikibz < kv.get_nkstot() / nspin0;++ikibz) - for (auto& isym_kvd : kv.kstars[ikibz]) - { - ofs << "isym=" << isym_kvd.first << std::endl; - ofs << " k = " << isym_kvd.second.x << " " << isym_kvd.second.y << " " << isym_kvd.second.z << std::endl; - ofs << "DM(k):" << std::endl; - for (int i = 0;i < pv.get_row_size();++i) + // test for output + /* + std::ofstream ofs("DM.dat"); + int ik = 0; + for (int ikibz = 0;ikibz < kv.get_nkstot() / nspin0;++ikibz) + for (auto& isym_kvd : kv.kstars[ikibz]) { - for (int j = 0;j < pv.get_col_size();++j) + ofs << "isym=" << isym_kvd.first << std::endl; + ofs << " k = " << isym_kvd.second.x << " " << isym_kvd.second.y << " " << isym_kvd.second.z << + std::endl; ofs << "DM(k):" << std::endl; for (int i = 0;i < pv.get_row_size();++i) { - ofs << dm_k_full[ik][j * pv.get_row_size() + i] << " "; + for (int j = 0;j < pv.get_col_size();++j) + { + ofs << dm_k_full[ik][j * pv.get_row_size() + i] << " "; + } + ofs << std::endl; } + ++ik; ofs << std::endl; } - ++ik; - ofs << std::endl; - } - ofs.close(); -*/ - ModuleBase::timer::tick("Symmetry_rotation", "restore_dm"); - return dm_k_full; - } - std::vector> Symmetry_rotation::restore_dm(const K_Vectors& kv, - const std::vector>& dm_k_ibz, const Parallel_2D& pv)const - { - return dm_k_ibz;// do nothing for gamma_only - } + ofs.close(); + */ + ModuleBase::timer::tick("Symmetry_rotation", "restore_dm"); + return dm_k_full; +} +std::vector> Symmetry_rotation::restore_dm(const K_Vectors& kv, + const std::vector>& dm_k_ibz, + const Parallel_2D& pv) const +{ + return dm_k_ibz; // do nothing for gamma_only +} - // calculate Wigner D matrix - double Symmetry_rotation::wigner_d(const double beta, const int l, const int m1, const int m2) const +// calculate Wigner D matrix +double Symmetry_rotation::wigner_d(const double beta, const int l, const int m1, const int m2) const +{ + auto factorial = [](int n) -> int { + int result = 1; + for (int i = 1; i <= n; ++i) + { + result *= i; + } + return result; + }; + double result = 0.0; + for (int i = std::max(0, m2 - m1); i <= std::min(l - m1, l + m2); ++i) { - auto factorial = [](int n) -> int { - int result = 1; - for (int i = 1;i <= n;++i) { result *= i; + result += std::pow(-1, i) + * std::sqrt(factorial(l + m1) * factorial(l - m1) * factorial(l + m2) * factorial(l - m2)) + * std::pow(std::cos(beta / 2), 2 * l + m2 - m1 - 2 * i) + * std::pow(-std::sin(beta / 2), m1 - m2 + 2 * i) + / (factorial(i) * factorial(l - m1 - i) * factorial(l + m2 - i) * factorial(i - m2 + m1)); + } + return result; } - return result; - }; - double result = 0.0; - for (int i = std::max(0, m2 - m1);i <= std::min(l - m1, l + m2);++i) { - result += std::pow(-1, i) * std::sqrt(factorial(l + m1) * factorial(l - m1) * factorial(l + m2) * factorial(l - m2)) - * std::pow(std::cos(beta / 2), 2 * l + m2 - m1 - 2 * i) * std::pow(-std::sin(beta / 2), m1 - m2 + 2 * i) - / (factorial(i) * factorial(l - m1 - i) * factorial(l + m2 - i) * factorial(i - m2 + m1)); + +std::complex Symmetry_rotation::wigner_D(const TCdouble& euler_angle, + const int l, + const int m1, + const int m2, + const bool inv) const +{ + std::complex prefac(inv ? std::pow(-1, l) : 1, 0); + return std::exp(-ModuleBase::IMAG_UNIT * static_cast(m1) * euler_angle.x) + * std::exp(-ModuleBase::IMAG_UNIT * static_cast(m2) * euler_angle.z) + * wigner_d(euler_angle.y, l, m1, m2) * prefac; } - return result; - } - std::complex Symmetry_rotation::wigner_D(const TCdouble& euler_angle, const int l, const int m1, const int m2, const bool inv) const +// c^l_{m1, m2}= +std::complex Symmetry_rotation::ovlp_Ylm_Slm(const int l, const int m1, const int m2) const +{ + if (m1 == m2) { - std::complex prefac(inv ? std::pow(-1, l) : 1, 0); - return std::exp(-ModuleBase::IMAG_UNIT * static_cast(m1) * euler_angle.x) - * std::exp(-ModuleBase::IMAG_UNIT * static_cast(m2) * euler_angle.z) - * wigner_d(euler_angle.y, l, m1, m2) * prefac; + if (m1 == 0) + { + return 1.0; + } + if (m1 > 0) + { + return 1 / std::sqrt(2); + } + if (m1 < 0) + { + return std::pow(-1, m1) * ModuleBase::IMAG_UNIT / std::sqrt(2); + } } - - // c^l_{m1, m2}= - std::complex Symmetry_rotation::ovlp_Ylm_Slm(const int l, const int m1, const int m2) const + else if (m1 == -m2) { - if (m1 == m2) + if (m1 > 0) { - if (m1 == 0) { return 1.0; -} - if (m1 > 0) { return 1 / std::sqrt(2); -} - if (m1 < 0) { return std::pow(-1, m1) * ModuleBase::IMAG_UNIT / std::sqrt(2); -} + return -ModuleBase::IMAG_UNIT / std::sqrt(2); } - else if (m1 == -m2) + if (m1 < 0) { - if (m1 > 0) { return -ModuleBase::IMAG_UNIT / std::sqrt(2); -} - if (m1 < 0) { return std::pow(-1, m1) / std::sqrt(2); -} + return std::pow(-1, m1) / std::sqrt(2); } - return 0.0; } + return 0.0; +} - // reference: https://github.com/minyez/abf_trans/blob/f9e68e68069a94610d89e077bfe6e8ffac0b097d/src/rotate.cpp#L118 - // because the atom position here is row vector, the original gmatrix(eular angle) is transposed. - // gmatc: the rotation matrix under the basis of cartesian coordinates - // gmatc should be a rotation matrix, i.e. det(gmatc)=1 - TCdouble Symmetry_rotation::get_euler_angle(const ModuleBase::Matrix3& gmatc) const +// reference: https://github.com/minyez/abf_trans/blob/f9e68e68069a94610d89e077bfe6e8ffac0b097d/src/rotate.cpp#L118 +// because the atom position here is row vector, the original gmatrix(eular angle) is transposed. +// gmatc: the rotation matrix under the basis of cartesian coordinates +// gmatc should be a rotation matrix, i.e. det(gmatc)=1 +TCdouble Symmetry_rotation::get_euler_angle(const ModuleBase::Matrix3& gmatc) const +{ + double threshold = this->eps_; + double alpha, beta, gamma; + if (std::fabs(gmatc.e32) > threshold || std::fabs(gmatc.e31) > threshold) // sin(beta) is not zero { - double threshold = this->eps_; - double alpha, beta, gamma; - if (std::fabs(gmatc.e32) > threshold || std::fabs(gmatc.e31) > threshold) // sin(beta) is not zero + // use the 2-angle elements to get alpha and gamma + alpha = std::atan2(gmatc.e32, gmatc.e31); + if (alpha < 0) { - // use the 2-angle elements to get alpha and gamma - alpha = std::atan2(gmatc.e32, gmatc.e31); - if (alpha < 0) { alpha += 2 * ModuleBase::PI; -} - gamma = std::atan2(gmatc.e23, -gmatc.e13); - if (gamma < 0) { gamma += 2 * ModuleBase::PI; -} - // use the larger one of 2-angle elements to calculate beta - if (std::fabs(gmatc.e32) > std::fabs(gmatc.e31)) { - beta = std::atan2(gmatc.e32 / std::sin(alpha), gmatc.e33); - } else { - beta = std::atan2(gmatc.e31 / std::cos(alpha), gmatc.e33); -} + alpha += 2 * ModuleBase::PI; + } + gamma = std::atan2(gmatc.e23, -gmatc.e13); + if (gamma < 0) + { + gamma += 2 * ModuleBase::PI; + } + // use the larger one of 2-angle elements to calculate beta + if (std::fabs(gmatc.e32) > std::fabs(gmatc.e31)) + { + beta = std::atan2(gmatc.e32 / std::sin(alpha), gmatc.e33); } else - {//sin(beta)=0, beta = 0 or pi, only (alpha+gamma) or (alpha-gamma) is important. now assign this to alpha. - alpha = std::atan2(gmatc.e12, gmatc.e11); - if (alpha < 0) { alpha += 2 * ModuleBase::PI; + { + beta = std::atan2(gmatc.e31 / std::cos(alpha), gmatc.e33); + } + } + else + { // sin(beta)=0, beta = 0 or pi, only (alpha+gamma) or (alpha-gamma) is important. now assign this to alpha. + alpha = std::atan2(gmatc.e12, gmatc.e11); + if (alpha < 0) + { + alpha += 2 * ModuleBase::PI; + } + // if beta=0, gmatc.e11=cos(alpha+gamma), gmatc.e21=sin(alpha+gamma) + // if beta=pi, gmatc.e11=cos(pi+alpha-gamma), gmatc.e21=sin(pi+alpha-gamma) + if (gmatc.e33 > 0) + { + beta = 0; + gamma = 0; // alpha+gamma=alpha => gamma=0 + } + else + { + beta = ModuleBase::PI; + gamma = ModuleBase::PI; // pi+alpha-gamma=alpha => gamma=pi + } + } + return TCdouble(alpha, beta, gamma); +} + +// in: the real value of m in range {-l, -l+1, ..., 0, ..., l-1, l} +// out: the index of the orbital in a fixed {n, l}, i.e. the index in array [0, 1, -1, 2, -2, ...] +inline int m2im(int m) +{ + return (m > 0 ? 2 * m - 1 : -2 * m); } - // if beta=0, gmatc.e11=cos(alpha+gamma), gmatc.e21=sin(alpha+gamma) - // if beta=pi, gmatc.e11=cos(pi+alpha-gamma), gmatc.e21=sin(pi+alpha-gamma) - if (gmatc.e33 > 0) + +/// T_mm' = [c^\dagger D c]_mm' +void Symmetry_rotation::cal_rotmat_Slm(const ModuleBase::Matrix3* gmatc, const int lmax) +{ + auto set_integer = [](RI::Tensor>& mat) -> void { + double zero_thres = 1e-10; + for (int i = 0; i < mat.shape[0]; ++i) + { + for (int j = 0; j < mat.shape[1]; ++j) { - beta = 0; - gamma = 0; //alpha+gamma=alpha => gamma=0 + if (std::abs(mat(i, j).real() - std::round(mat(i, j).real())) < zero_thres) + { + mat(i, j).real(std::round(mat(i, j).real())); + } + if (std::abs(mat(i, j).imag() - std::round(mat(i, j).imag())) < zero_thres) + { + mat(i, j).imag(std::round(mat(i, j).imag())); + } } - else + } + }; + this->rotmat_Slm_.resize(nsym_); + // c matrix is independent on isym + std::vector>> c_mm(lmax + 1); + for (int l = 0; l <= lmax; ++l) + { + c_mm[l] = RI::Tensor>({size_t(2 * l + 1), size_t(2 * l + 1)}); + } + for (int l = 0; l <= lmax; ++l) + { + for (int m1 = -l; m1 <= l; ++m1) + { + for (int m2 = -l; m2 <= l; ++m2) { - beta = ModuleBase::PI; - gamma = ModuleBase::PI;// pi+alpha-gamma=alpha => gamma=pi + c_mm[l](m2im(m1), m2im(m2)) = ovlp_Ylm_Slm(l, m1, m2); } } - return TCdouble(alpha, beta, gamma); } - // in: the real value of m in range {-l, -l+1, ..., 0, ..., l-1, l} - // out: the index of the orbital in a fixed {n, l}, i.e. the index in array [0, 1, -1, 2, -2, ...] - inline int m2im(int m) + for (int isym = 0; isym < nsym_; ++isym) { - return (m > 0 ? 2 * m - 1 : -2 * m); - } + // if R is a reflection operation, calculate D^l(R)=(-1)^l*D^l(IR), so the euler angle of (IR) is needed. + TCdouble euler_angle = get_euler_angle( + gmatc[isym].Det() > 0 ? gmatc[isym] : gmatc[isym] * ModuleBase::Matrix3(-1, 0, 0, 0, -1, 0, 0, 0, -1)); - /// T_mm' = [c^\dagger D c]_mm' - void Symmetry_rotation::cal_rotmat_Slm(const ModuleBase::Matrix3* gmatc, const int lmax) - { - auto set_integer = [](RI::Tensor>& mat) -> void + this->rotmat_Slm_[isym].resize(lmax + 1); + for (int l = 0; l <= lmax; ++l) + { // wigner D matrix + RI::Tensor> D_mm({size_t(2 * l + 1), size_t(2 * l + 1)}); + for (int m1 = -l; m1 <= l; ++m1) { - double zero_thres = 1e-10; - for (int i = 0;i < mat.shape[0];++i) { - for (int j = 0;j < mat.shape[1];++j) + for (int m2 = -l; m2 <= l; ++m2) + { + D_mm(m2im(m1), m2im(m2)) = wigner_D(euler_angle, l, m1, m2, (gmatc[isym].Det() < 0)); + } + } + this->rotmat_Slm_[isym][l] = c_mm[l].dagger() * D_mm * c_mm[l]; + // set_integer(this->rotmat_Slm_[isym][l]); + } + } + /* + std::vector euler_angles_test(nsym_); + for (int isym = 0;isym < nsym_;++isym) euler_angles_test[isym] = + get_euler_angle(gmatc[isym].Det() > 0 ? gmatc[isym] : gmatc[isym] * ModuleBase::Matrix3(-1, 0, 0, 0, -1, + 0, 0, 0, -1)); + + auto test_Tmm = [&]()-> void + { + std::ofstream ofs("Tlm.dat"); + for (int isym = 0;isym < nsym_;++isym) { - if (std::abs(mat(i, j).real() - std::round(mat(i, j).real())) < zero_thres) { mat(i, j).real(std::round(mat(i, j).real())); -} - if (std::abs(mat(i, j).imag() - std::round(mat(i, j).imag())) < zero_thres) { mat(i, j).imag(std::round(mat(i, j).imag())); -} + ofs << "isym=" << isym << std::endl; + ofs << "gmatrix_cart=" << std::endl; + ofs << gmatc[isym].e11 << " " << gmatc[isym].e12 << " " << gmatc[isym].e13 << std::endl; + ofs << gmatc[isym].e21 << " " << gmatc[isym].e22 << " " << gmatc[isym].e23 << std::endl; + ofs << gmatc[isym].e31 << " " << gmatc[isym].e32 << " " << gmatc[isym].e33 << std::endl; + ofs << "gmatrix_direct=" << std::endl; + ofs << ucell.symm.gmatrix[isym].e11 << " " << ucell.symm.gmatrix[isym].e12 << " " << + ucell.symm.gmatrix[isym].e13 << std::endl; ofs << ucell.symm.gmatrix[isym].e21 << " " << + ucell.symm.gmatrix[isym].e22 << " " << ucell.symm.gmatrix[isym].e23 << std::endl; ofs << + ucell.symm.gmatrix[isym].e31 << " " << ucell.symm.gmatrix[isym].e32 << " " << ucell.symm.gmatrix[isym].e33 << + std::endl; ofs << "kgmatrix_direct=" << std::endl; ofs << ucell.symm.kgmatrix[isym].e11 << " " << + ucell.symm.kgmatrix[isym].e12 << " " << ucell.symm.kgmatrix[isym].e13 << std::endl; ofs << + ucell.symm.kgmatrix[isym].e21 << " " << ucell.symm.kgmatrix[isym].e22 << " " << ucell.symm.kgmatrix[isym].e23 << + std::endl; ofs << ucell.symm.kgmatrix[isym].e31 << " " << ucell.symm.kgmatrix[isym].e32 << " " << + ucell.symm.kgmatrix[isym].e33 << std::endl; ofs << "euler_angle/pi: " << euler_angles_test[isym].x / + ModuleBase::PI << " " + << euler_angles_test[isym].y / ModuleBase::PI << " " << euler_angles_test[isym].z / + ModuleBase::PI << std::endl; for (int l = 0;l <= lmax;++l) for (int i = 0;i < 2 * l + 1;++i) + { + for (int j = 0;j < 2 * l + 1;++j) ofs << this->rotmat_Slm_[isym][l](i, j) << " "; + ofs << std::endl; + } } -} - }; - this->rotmat_Slm_.resize(nsym_); - // c matrix is independent on isym - std::vector>> c_mm(lmax + 1); - for (int l = 0;l <= lmax;++l) { - c_mm[l] = RI::Tensor>({ size_t(2 * l + 1), size_t(2 * l + 1) }); -} - for (int l = 0;l <= lmax;++l) { - for (int m1 = -l;m1 <= l;++m1) { - for (int m2 = -l;m2 <= l;++m2) { - c_mm[l](m2im(m1), m2im(m2)) = ovlp_Ylm_Slm(l, m1, m2); -} -} + ofs.close(); + }; + test_Tmm(); + */ } - for (int isym = 0;isym < nsym_;++isym) - { - // if R is a reflection operation, calculate D^l(R)=(-1)^l*D^l(IR), so the euler angle of (IR) is needed. - TCdouble euler_angle = get_euler_angle(gmatc[isym].Det() > 0 ? - gmatc[isym] : gmatc[isym] * ModuleBase::Matrix3(-1, 0, 0, 0, -1, 0, 0, 0, -1)); - - this->rotmat_Slm_[isym].resize(lmax + 1); - for (int l = 0;l <= lmax;++l) - {// wigner D matrix - RI::Tensor> D_mm({ size_t(2 * l + 1), size_t(2 * l + 1) }); - for (int m1 = -l;m1 <= l;++m1) { - for (int m2 = -l;m2 <= l;++m2) { - D_mm(m2im(m1), m2im(m2)) = wigner_D(euler_angle, l, m1, m2, (gmatc[isym].Det() < 0)); -} -} - this->rotmat_Slm_[isym][l] = c_mm[l].dagger() * D_mm * c_mm[l]; - // set_integer(this->rotmat_Slm_[isym][l]); +void Symmetry_rotation::set_block_to_mat2d(const int starti, + const int startj, + const RI::Tensor>& block, + std::vector>& obj_mat, + const Parallel_2D& pv, + const bool trans) const +{ // caution: ComplaxMatrix is row-major(col-continuous), but obj_mat is col-major(row-continuous) + for (int j = 0; j < block.shape[0]; ++j) + { // outside dimension + for (int i = 0; i < block.shape[1]; ++i) + { // inside dimension + if (pv.in_this_processor(starti + i, startj + j)) + { + int index = pv.global2local_col(startj + j) * pv.get_row_size() + pv.global2local_row(starti + i); + obj_mat[index] = trans ? block(i, j) : block(j, i); } } - /* - std::vector euler_angles_test(nsym_); - for (int isym = 0;isym < nsym_;++isym) euler_angles_test[isym] = - get_euler_angle(gmatc[isym].Det() > 0 ? gmatc[isym] : gmatc[isym] * ModuleBase::Matrix3(-1, 0, 0, 0, -1, 0, 0, 0, -1)); - - auto test_Tmm = [&]()-> void - { - std::ofstream ofs("Tlm.dat"); - for (int isym = 0;isym < nsym_;++isym) - { - ofs << "isym=" << isym << std::endl; - ofs << "gmatrix_cart=" << std::endl; - ofs << gmatc[isym].e11 << " " << gmatc[isym].e12 << " " << gmatc[isym].e13 << std::endl; - ofs << gmatc[isym].e21 << " " << gmatc[isym].e22 << " " << gmatc[isym].e23 << std::endl; - ofs << gmatc[isym].e31 << " " << gmatc[isym].e32 << " " << gmatc[isym].e33 << std::endl; - ofs << "gmatrix_direct=" << std::endl; - ofs << ucell.symm.gmatrix[isym].e11 << " " << ucell.symm.gmatrix[isym].e12 << " " << ucell.symm.gmatrix[isym].e13 << std::endl; - ofs << ucell.symm.gmatrix[isym].e21 << " " << ucell.symm.gmatrix[isym].e22 << " " << ucell.symm.gmatrix[isym].e23 << std::endl; - ofs << ucell.symm.gmatrix[isym].e31 << " " << ucell.symm.gmatrix[isym].e32 << " " << ucell.symm.gmatrix[isym].e33 << std::endl; - ofs << "kgmatrix_direct=" << std::endl; - ofs << ucell.symm.kgmatrix[isym].e11 << " " << ucell.symm.kgmatrix[isym].e12 << " " << ucell.symm.kgmatrix[isym].e13 << std::endl; - ofs << ucell.symm.kgmatrix[isym].e21 << " " << ucell.symm.kgmatrix[isym].e22 << " " << ucell.symm.kgmatrix[isym].e23 << std::endl; - ofs << ucell.symm.kgmatrix[isym].e31 << " " << ucell.symm.kgmatrix[isym].e32 << " " << ucell.symm.kgmatrix[isym].e33 << std::endl; - ofs << "euler_angle/pi: " << euler_angles_test[isym].x / ModuleBase::PI << " " - << euler_angles_test[isym].y / ModuleBase::PI << " " << euler_angles_test[isym].z / ModuleBase::PI << std::endl; - for (int l = 0;l <= lmax;++l) - for (int i = 0;i < 2 * l + 1;++i) - { - for (int j = 0;j < 2 * l + 1;++j) ofs << this->rotmat_Slm_[isym][l](i, j) << " "; - ofs << std::endl; - } - } - ofs.close(); - }; - test_Tmm(); - */ } - - void Symmetry_rotation::set_block_to_mat2d(const int starti, const int startj, const RI::Tensor>& block, - std::vector>& obj_mat, const Parallel_2D& pv, const bool trans) const - { // caution: ComplaxMatrix is row-major(col-continuous), but obj_mat is col-major(row-continuous) - for (int j = 0;j < block.shape[0];++j) {//outside dimension - for (int i = 0;i < block.shape[1];++i) { //inside dimension - if (pv.in_this_processor(starti + i, startj + j)) - { - int index = pv.global2local_col(startj + j) * pv.get_row_size() + pv.global2local_row(starti + i); - obj_mat[index] = trans ? block(i, j) : block(j, i); - } } -} - } - void Symmetry_rotation::set_block_to_mat2d(const int starti, const int startj, const RI::Tensor>& block, - std::vector& obj_mat, const Parallel_2D& pv, const bool trans) const - { // caution: ComplaxMatrix is row-major(col-continuous), but obj_mat is col-major(row-continuous) - for (int j = 0;j < block.shape[0];++j) {//outside dimension - for (int i = 0;i < block.shape[1];++i) { //inside dimension - if (pv.in_this_processor(starti + i, startj + j)) - { - int index = pv.global2local_col(startj + j) * pv.get_row_size() + pv.global2local_row(starti + i); - obj_mat[index] = trans ? block(i, j).real() : block(j, i).real(); - } -} -} +void Symmetry_rotation::set_block_to_mat2d(const int starti, + const int startj, + const RI::Tensor>& block, + std::vector& obj_mat, + const Parallel_2D& pv, + const bool trans) const +{ // caution: ComplaxMatrix is row-major(col-continuous), but obj_mat is col-major(row-continuous) + for (int j = 0; j < block.shape[0]; ++j) + { // outside dimension + for (int i = 0; i < block.shape[1]; ++i) + { // inside dimension + if (pv.in_this_processor(starti + i, startj + j)) + { + int index = pv.global2local_col(startj + j) * pv.get_row_size() + pv.global2local_row(starti + i); + obj_mat[index] = trans ? block(i, j).real() : block(j, i).real(); + } + } } +} - // 2d-block parallized rotation matrix in AO-representation, denoted as M. - // finally we will use D(k)=M(R, k)^\dagger*D(Rk)*M(R, k) to D(k) from D(Rk) in cal_Ms. - std::vector> Symmetry_rotation::contruct_2d_rot_mat_ao(const Symmetry& symm, const Atom* atoms, const Statistics& cell_st, - const TCdouble& kvec_d_ibz, int isym, const Parallel_2D& pv) const +// 2d-block parallized rotation matrix in AO-representation, denoted as M. +// finally we will use D(k)=M(R, k)^\dagger*D(Rk)*M(R, k) to D(k) from D(Rk) in cal_Ms. +std::vector> Symmetry_rotation::contruct_2d_rot_mat_ao(const Symmetry& symm, + const Atom* atoms, + const Statistics& cell_st, + const TCdouble& kvec_d_ibz, + int isym, + const Parallel_2D& pv) const +{ + std::vector> M_isym(pv.get_local_size(), 0.0); + for (int iat1 = 0; iat1 < cell_st.nat; ++iat1) { - std::vector> M_isym(pv.get_local_size(), 0.0); - for (int iat1 = 0;iat1 < cell_st.nat;++iat1) + int it = cell_st.iat2it[iat1]; // it1=it2 + int ia1 = cell_st.iat2ia[iat1]; + int iat2 = symm.get_rotated_atom(isym, iat1); // iat2=rot(iat1) + int ia2 = cell_st.iat2ia[iat2]; + // cal phase factor from return lattice: exp(-ik_ibz*O) + double arg = 2 * ModuleBase::PI * kvec_d_ibz * this->irs_.return_lattice_[iat1][isym]; + std::complex phase_factor = std::complex(std::cos(arg), std::sin(arg)); + int iw1start = atoms[it].stapos_wf + ia1 * atoms[it].nw; + int iw2start = atoms[it].stapos_wf + ia2 * atoms[it].nw; + int iw = 0; + while (iw < atoms[it].nw) { - int it = cell_st.iat2it[iat1]; // it1=it2 - int ia1 = cell_st.iat2ia[iat1]; - int iat2 = symm.get_rotated_atom(isym, iat1); //iat2=rot(iat1) - int ia2 = cell_st.iat2ia[iat2]; - // cal phase factor from return lattice: exp(-ik_ibz*O) - double arg = 2 * ModuleBase::PI * kvec_d_ibz * this->irs_.return_lattice_[iat1][isym]; - std::complexphase_factor = std::complex(std::cos(arg), std::sin(arg)); - int iw1start = atoms[it].stapos_wf + ia1 * atoms[it].nw; - int iw2start = atoms[it].stapos_wf + ia2 * atoms[it].nw; - int iw = 0; - while (iw < atoms[it].nw) - { - int l = atoms[it].iw2l[iw]; - int nm = 2 * l + 1; - //caution: the order of m in orbitals may be different from increasing - set_block_to_mat2d(iw2start + iw, iw1start + iw, - phase_factor * this->rotmat_Slm_[isym][l], M_isym, pv, true); - iw += nm; - } + int l = atoms[it].iw2l[iw]; + int nm = 2 * l + 1; + // caution: the order of m in orbitals may be different from increasing + set_block_to_mat2d(iw2start + iw, + iw1start + iw, + phase_factor * this->rotmat_Slm_[isym][l], + M_isym, + pv, + true); + iw += nm; } - return M_isym; } + return M_isym; +} - // void cal_Ms (kstar), maybe use map to stare Ms +// void cal_Ms (kstar), maybe use map to stare Ms - // D(k) = M^T(R, k) D(k_ibz) M^*(R, k), if D(k) is col-maj - // D^T(k) = M^\dagger(R, k) D^T(k_ibz) M(R, k), if D(k) is row-maj - // Ds from RI_2D_Comm are row-maj - // the link ik_ibz-isym-ik can be found in kstars. - std::vector> Symmetry_rotation::rot_matrix_ao(const std::vector>& DMkibz, - const int ik_ibz, const int kstar_size, const int isym, const Parallel_2D& pv, const bool TRS_conj) const +// D(k) = M^T(R, k) D(k_ibz) M^*(R, k), if D(k) is col-maj +// D^T(k) = M^\dagger(R, k) D^T(k_ibz) M(R, k), if D(k) is row-maj +// Ds from RI_2D_Comm are row-maj +// the link ik_ibz-isym-ik can be found in kstars. +std::vector> Symmetry_rotation::rot_matrix_ao(const std::vector>& DMkibz, + const int ik_ibz, + const int kstar_size, + const int isym, + const Parallel_2D& pv, + const bool TRS_conj) const +{ + std::vector> DMk(pv.nloc, 0.0); + std::vector> DMkibz_M(pv.nloc, 0.0); // intermediate result + const char dagger = 'C'; + const char transpose = 'T'; + const char notrans = 'N'; + std::complex alpha(1.0, 0.0); + const std::complex beta(0.0, 0.0); + const int nbasis = PARAM.globalv.nlocal; + const int i1 = 1; + if (TRS_conj) { - std::vector> DMk(pv.nloc, 0.0); - std::vector> DMkibz_M(pv.nloc, 0.0); // intermediate result - const char dagger = 'C'; - const char transpose = 'T'; - const char notrans = 'N'; - std::complex alpha(1.0, 0.0); - const std::complex beta(0.0, 0.0); - const int nbasis = PARAM.globalv.nlocal; - const int i1 = 1; - if (TRS_conj) - { - // D^T* = M^T [M^T (D^T)^T]^\dagger - pzgemm_(&transpose, &transpose, &nbasis, &nbasis, &nbasis, - &alpha, this->Ms_[ik_ibz].at(isym).data(), &i1, &i1, pv.desc, DMkibz.data(), &i1, &i1, pv.desc, - &beta, DMkibz_M.data(), &i1, &i1, pv.desc); - alpha.real(1.0 / static_cast(kstar_size)); - pzgemm_(&transpose, &dagger, &nbasis, &nbasis, &nbasis, - &alpha, this->Ms_[ik_ibz].at(isym).data(), &i1, &i1, pv.desc, DMkibz_M.data(), &i1, &i1, pv.desc, - &beta, DMk.data(), &i1, &i1, pv.desc); - } - else - { - // D^T = M^\daggger D^T M - pzgemm_(&dagger, ¬rans, &nbasis, &nbasis, &nbasis, - &alpha, this->Ms_[ik_ibz].at(isym).data(), &i1, &i1, pv.desc, DMkibz.data(), &i1, &i1, pv.desc, - &beta, DMkibz_M.data(), &i1, &i1, pv.desc); - alpha.real(1.0 / static_cast(kstar_size)); - pzgemm_(¬rans, ¬rans, &nbasis, &nbasis, &nbasis, - &alpha, DMkibz_M.data(), &i1, &i1, pv.desc, this->Ms_[ik_ibz].at(isym).data(), &i1, &i1, pv.desc, - &beta, DMk.data(), &i1, &i1, pv.desc); - } - return DMk; + // D^T* = M^T [M^T (D^T)^T]^\dagger + pzgemm_(&transpose, + &transpose, + &nbasis, + &nbasis, + &nbasis, + &alpha, + this->Ms_[ik_ibz].at(isym).data(), + &i1, + &i1, + pv.desc, + DMkibz.data(), + &i1, + &i1, + pv.desc, + &beta, + DMkibz_M.data(), + &i1, + &i1, + pv.desc); + alpha.real(1.0 / static_cast(kstar_size)); + pzgemm_(&transpose, + &dagger, + &nbasis, + &nbasis, + &nbasis, + &alpha, + this->Ms_[ik_ibz].at(isym).data(), + &i1, + &i1, + pv.desc, + DMkibz_M.data(), + &i1, + &i1, + pv.desc, + &beta, + DMk.data(), + &i1, + &i1, + pv.desc); } + else + { + // D^T = M^\daggger D^T M + pzgemm_(&dagger, + ¬rans, + &nbasis, + &nbasis, + &nbasis, + &alpha, + this->Ms_[ik_ibz].at(isym).data(), + &i1, + &i1, + pv.desc, + DMkibz.data(), + &i1, + &i1, + pv.desc, + &beta, + DMkibz_M.data(), + &i1, + &i1, + pv.desc); + alpha.real(1.0 / static_cast(kstar_size)); + pzgemm_(¬rans, + ¬rans, + &nbasis, + &nbasis, + &nbasis, + &alpha, + DMkibz_M.data(), + &i1, + &i1, + pv.desc, + this->Ms_[ik_ibz].at(isym).data(), + &i1, + &i1, + pv.desc, + &beta, + DMk.data(), + &i1, + &i1, + pv.desc); + } + return DMk; +} - std::vector Symmetry_rotation::get_Rs_from_adjacent_list(const UnitCell& ucell, - const Grid_Driver& gd, - const Parallel_Orbitals& pv) const +std::vector Symmetry_rotation::get_Rs_from_adjacent_list(const UnitCell& ucell, + const Grid_Driver& gd, + const Parallel_Orbitals& pv) const +{ + // find the union set of Rs for all the atom pairs + std::set Rs_set; + for (int iat1 = 0; iat1 < ucell.nat; ++iat1) { - // find the union set of Rs for all the atom pairs - std::set Rs_set; - for (int iat1 = 0;iat1 < ucell.nat;++iat1) + auto tau1 = ucell.get_tau(iat1); + int it1 = ucell.iat2it[iat1], ia1 = ucell.iat2ia[iat1]; + AdjacentAtomInfo adjs; + gd.Find_atom(ucell, tau1, it1, ia1, &adjs); + for (int ad = 0; ad < adjs.adj_num + 1; ++ad) { - auto tau1 = ucell.get_tau(iat1); - int it1 = ucell.iat2it[iat1], ia1 = ucell.iat2ia[iat1]; - AdjacentAtomInfo adjs; - gd.Find_atom(ucell, tau1, it1, ia1, &adjs); - for (int ad = 0; ad < adjs.adj_num + 1; ++ad) + const int it2 = adjs.ntype[ad]; + const int ia2 = adjs.natom[ad]; + int iat2 = ucell.itia2iat(it2, ia2); + if (pv.get_row_size(iat1) && pv.get_col_size(iat2)) { - const int it2 = adjs.ntype[ad]; - const int ia2 = adjs.natom[ad]; - int iat2 = ucell.itia2iat(it2, ia2); - if (pv.get_row_size(iat1) && pv.get_col_size(iat2)) + const ModuleBase::Vector3& R_index = adjs.box[ad]; + if (ucell.cal_dtau(iat1, iat2, R_index).norm() * ucell.lat0 + < ucell.atoms[it1].Rcut + ucell.atoms[it2].Rcut) { - const ModuleBase::Vector3& R_index = adjs.box[ad]; - if (ucell.cal_dtau(iat1, iat2, R_index).norm() * ucell.lat0 - < ucell.atoms[it1].Rcut + ucell.atoms[it2].Rcut) { - Rs_set.insert({ R_index.x, R_index.y, R_index.z }); -} + Rs_set.insert({R_index.x, R_index.y, R_index.z}); } } } - // set to vector - std::vector Rs(Rs_set.size()); - for (auto& R : Rs_set) { Rs.push_back(R); -} - return Rs; } - - std::vector Symmetry_rotation::get_Rs_from_BvK(const K_Vectors& kv) const + // set to vector + std::vector Rs(Rs_set.size()); + for (auto& R: Rs_set) { - const TC& period = RI_Util::get_Born_vonKarmen_period(kv); - return RI_Util::get_Born_von_Karmen_cells(period); + Rs.push_back(R); } + return Rs; +} + +std::vector Symmetry_rotation::get_Rs_from_BvK(const K_Vectors& kv) const +{ + const TC& period = RI_Util::get_Born_vonKarmen_period(kv); + return RI_Util::get_Born_von_Karmen_cells(period); +} -} \ No newline at end of file +} // namespace ModuleSymmetry \ No newline at end of file diff --git a/source/module_ri/module_exx_symmetry/symmetry_rotation_R.hpp b/source/module_ri/module_exx_symmetry/symmetry_rotation_R.hpp index 12d88d1a17..ab14785c4d 100644 --- a/source/module_ri/module_exx_symmetry/symmetry_rotation_R.hpp +++ b/source/module_ri/module_exx_symmetry/symmetry_rotation_R.hpp @@ -1,314 +1,376 @@ -#include "symmetry_rotation.h" #include "module_ri/RI_Util.h" -#include "module_base/blas_connector.h" -#include "module_base/timer.h" -#include +#include "source_base/blas_connector.h" +#include "source_base/timer.h" +#include "symmetry_rotation.h" + #include #include +#include namespace ModuleSymmetry { - template - inline void print_tensor(const RI::Tensor& t, const std::string& name, const double& threshold = 0.0) +template +inline void print_tensor(const RI::Tensor& t, const std::string& name, const double& threshold = 0.0) +{ + GlobalV::ofs_running << name << ":\n"; + for (int i = 0; i < t.shape[0]; ++i) { - GlobalV::ofs_running << name << ":\n"; - for (int i = 0;i < t.shape[0];++i) + for (int j = 0; j < t.shape[1]; ++j) { - for (int j = 0;j < t.shape[1];++j) { - GlobalV::ofs_running << ((std::abs(t(i, j)) > threshold) ? t(i, j) : static_cast(0)) << " "; -} - GlobalV::ofs_running << std::endl; + GlobalV::ofs_running << ((std::abs(t(i, j)) > threshold) ? t(i, j) : static_cast(0)) << " "; } + GlobalV::ofs_running << std::endl; } - template - inline void print_tensor3(const RI::Tensor& t, const std::string& name, const double& threshold = 0.0) +} +template +inline void print_tensor3(const RI::Tensor& t, const std::string& name, const double& threshold = 0.0) +{ + GlobalV::ofs_running << name << ":\n"; + for (int a = 0; a < t.shape[0]; ++a) { - GlobalV::ofs_running << name << ":\n"; - for (int a = 0;a < t.shape[0];++a) + GlobalV::ofs_running << "abf: " << a << '\n'; + for (int i = 0; i < t.shape[1]; ++i) { - GlobalV::ofs_running << "abf: " << a << '\n'; - for (int i = 0;i < t.shape[1];++i) + for (int j = 0; j < t.shape[2]; ++j) { - for (int j = 0;j < t.shape[2];++j) { - GlobalV::ofs_running << ((std::abs(t(a, i, j)) > threshold) ? t(a, i, j) : static_cast(0)) << " "; -} - GlobalV::ofs_running << std::endl; + GlobalV::ofs_running << ((std::abs(t(a, i, j)) > threshold) ? t(a, i, j) : static_cast(0)) + << " "; } GlobalV::ofs_running << std::endl; } + GlobalV::ofs_running << std::endl; } +} - template - std::map, RI::Tensor>> Symmetry_rotation::restore_HR( - const Symmetry& symm, const Atom* atoms, const Statistics& st, const char mode, - const std::map, RI::Tensor>>& HR_irreducible) const +template +std::map, RI::Tensor>> Symmetry_rotation::restore_HR( + const Symmetry& symm, + const Atom* atoms, + const Statistics& st, + const char mode, + const std::map, RI::Tensor>>& HR_irreducible) const +{ + ModuleBase::TITLE("Symmetry_rotation", "restore_HR"); + ModuleBase::timer::tick("Symmetry_rotation", "restore_HR"); + std::map, RI::Tensor>> HR_full; + // irreducile-to-full map ver. + for (auto& tmp1: HR_irreducible) { - ModuleBase::TITLE("Symmetry_rotation", "restore_HR"); - ModuleBase::timer::tick("Symmetry_rotation", "restore_HR"); - std::map, RI::Tensor>> HR_full; - // irreducile-to-full map ver. - for (auto& tmp1 : HR_irreducible) + const int& irap1 = tmp1.first; + for (auto& tmp2: tmp1.second) { - const int& irap1 = tmp1.first; - for (auto& tmp2 : tmp1.second) + const int& irap2 = tmp2.first.first; + const Tap& irap = {irap1, irap2}; + const TC& irR = tmp2.first.second; + const TapR& irapR = {irap, irR}; + if (this->irs_.sector_stars_.find(irapR) != this->irs_.sector_stars_.end()) { - const int& irap2 = tmp2.first.first; - const Tap& irap = { irap1, irap2 }; - const TC& irR = tmp2.first.second; - const TapR& irapR = { irap, irR }; - if (this->irs_.sector_stars_.find(irapR) != this->irs_.sector_stars_.end()) + for (auto& isym_apR: this->irs_.sector_stars_.at(irapR)) { - for (auto& isym_apR : this->irs_.sector_stars_.at(irapR)) - { - const int& isym = isym_apR.first; - const TapR& apR = isym_apR.second; - const int& ap1 = apR.first.first; - const int& ap2 = apR.first.second; - const TC& R = apR.second; - HR_full[ap1][{ap2, R}] = rotate_atompair_serial(tmp2.second, isym, atoms[st.iat2it[irap1]], atoms[st.iat2it[irap2]], mode); - } + const int& isym = isym_apR.first; + const TapR& apR = isym_apR.second; + const int& ap1 = apR.first.first; + const int& ap2 = apR.first.second; + const TC& R = apR.second; + HR_full[ap1][{ap2, R}] = rotate_atompair_serial(tmp2.second, + isym, + atoms[st.iat2it[irap1]], + atoms[st.iat2it[irap2]], + mode); } - else { std::cout << "Warning: not found: irreducible atom pair =(" << irap1 << "," << irap2 << "), irR=(" << irR[0] << "," << irR[1] << "," << irR[2] << ")\n";} + } + else + { + std::cout << "Warning: not found: irreducible atom pair =(" << irap1 << "," << irap2 << "), irR=(" + << irR[0] << "," << irR[1] << "," << irR[2] << ")\n"; } } - // full-to-irreducible map ver. (problematic in parallel) - // openmp slows down this for loop, why? - // for (auto& apR_isym_irapR : this->irs_.full_map_to_irreducible_sector_) - // { - // const Tap& ap = apR_isym_irapR.first.first; - // const TC& R = apR_isym_irapR.first.second; - // const int& isym = apR_isym_irapR.second.first; - // const Tap& irap = apR_isym_irapR.second.second.first; - // const TC& irR = apR_isym_irapR.second.second.second; - // // rotate the matrix and pack data - // // H_12(R)=T^\dagger(V)H_1'2'(VR+O_1-O_2)T(V) - // if (HR_irreducible.find(irap.first) != HR_irreducible.end() && HR_irreducible.at(irap.first).find({ irap.second, irR }) != HR_irreducible.at(irap.first).end()) - // HR_full[ap.first][{ap.second, R}] = rotate_atompair_serial(HR_irreducible.at(irap.first).at({ irap.second, irR }), - // isym, atoms[st.iat2it[irap.first]], atoms[st.iat2it[irap.second]], mode); - // else - // std::cout << "not found: current atom pair =(" << ap.first << "," << ap.second << "), R=(" << R[0] << "," << R[1] << "," << R[2] << "), irreducible atom pair =(" << irap.first << "," << irap.second << "), irR=(" << irR[0] << "," << irR[1] << "," << irR[2] << ")\n"; - // } - // // test: output HR_irreducile - // for (auto& tmp1 : HR_irreducible) - // { - // const int& a1 = tmp1.first; - // for (auto& tmp2 : tmp1.second) - // { - // const int& a2 = tmp2.first.first; - // const TC& R = tmp2.first.second; - // print_tensor(tmp2.second, "HR_irreducible (" + std::to_string(a1) + ", " + std::to_string(a2) + "), R=(" + std::to_string(R[0]) + " " + std::to_string(R[1]) + " " + std::to_string(R[2]) + ")"); - // } - // } - // // test: output HR - // for (auto& tmp1 : HR_full) - // { - // const int& a1 = tmp1.first; - // for (auto& tmp2 : tmp1.second) - // { - // const int& a2 = tmp2.first.first; - // const TC& R = tmp2.first.second; - // print_tensor(tmp2.second, "HR_full (" + std::to_string(a1) + ", " + std::to_string(a2) + "), R=(" + std::to_string(R[0]) + " " + std::to_string(R[1]) + " " + std::to_string(R[2]) + ")"); - // } - // } - ModuleBase::timer::tick("Symmetry_rotation", "restore_HR"); - return HR_full; } - - template - inline void set_block(const int starti, const int startj, const RI::Tensor>& block, - RI::Tensor& obj_tensor) - { // no changing row/col order - for (int i = 0;i < block.shape[0];++i) { - for (int j = 0;j < block.shape[1];++j) { - obj_tensor(starti + i, startj + j) = RI::Global_Func::convert(block(i, j)); -} + // full-to-irreducible map ver. (problematic in parallel) + // openmp slows down this for loop, why? + // for (auto& apR_isym_irapR : this->irs_.full_map_to_irreducible_sector_) + // { + // const Tap& ap = apR_isym_irapR.first.first; + // const TC& R = apR_isym_irapR.first.second; + // const int& isym = apR_isym_irapR.second.first; + // const Tap& irap = apR_isym_irapR.second.second.first; + // const TC& irR = apR_isym_irapR.second.second.second; + // // rotate the matrix and pack data + // // H_12(R)=T^\dagger(V)H_1'2'(VR+O_1-O_2)T(V) + // if (HR_irreducible.find(irap.first) != HR_irreducible.end() && HR_irreducible.at(irap.first).find({ + // irap.second, irR }) != HR_irreducible.at(irap.first).end()) + // HR_full[ap.first][{ap.second, R}] = rotate_atompair_serial(HR_irreducible.at(irap.first).at({ + // irap.second, irR }), + // isym, atoms[st.iat2it[irap.first]], atoms[st.iat2it[irap.second]], mode); + // else + // std::cout << "not found: current atom pair =(" << ap.first << "," << ap.second << "), R=(" << R[0] << "," + // << R[1] << "," << R[2] << "), irreducible atom pair =(" << irap.first << "," << irap.second << "), irR=(" + // << irR[0] << "," << irR[1] << "," << irR[2] << ")\n"; + // } + // // test: output HR_irreducile + // for (auto& tmp1 : HR_irreducible) + // { + // const int& a1 = tmp1.first; + // for (auto& tmp2 : tmp1.second) + // { + // const int& a2 = tmp2.first.first; + // const TC& R = tmp2.first.second; + // print_tensor(tmp2.second, "HR_irreducible (" + std::to_string(a1) + ", " + std::to_string(a2) + "), R=(" + // + std::to_string(R[0]) + " " + std::to_string(R[1]) + " " + std::to_string(R[2]) + ")"); + // } + // } + // // test: output HR + // for (auto& tmp1 : HR_full) + // { + // const int& a1 = tmp1.first; + // for (auto& tmp2 : tmp1.second) + // { + // const int& a2 = tmp2.first.first; + // const TC& R = tmp2.first.second; + // print_tensor(tmp2.second, "HR_full (" + std::to_string(a1) + ", " + std::to_string(a2) + "), R=(" + + // std::to_string(R[0]) + " " + std::to_string(R[1]) + " " + std::to_string(R[2]) + ")"); + // } + // } + ModuleBase::timer::tick("Symmetry_rotation", "restore_HR"); + return HR_full; } - } - template - RI::Tensor Symmetry_rotation::set_rotation_matrix(const Atom& a, const int& isym)const +template +inline void set_block(const int starti, + const int startj, + const RI::Tensor>& block, + RI::Tensor& obj_tensor) +{ // no changing row/col order + for (int i = 0; i < block.shape[0]; ++i) { - RI::Tensor T({ static_cast(a.nw), static_cast(a.nw) }); // check if zero - int iw = 0; - while (iw < a.nw) + for (int j = 0; j < block.shape[1]; ++j) { - int l = a.iw2l[iw]; - int nm = 2 * l + 1; - set_block(iw, iw, this->rotmat_Slm_[isym][l], T); - iw += nm; + obj_tensor(starti + i, startj + j) = RI::Global_Func::convert(block(i, j)); } - return T; } - template - RI::Tensor Symmetry_rotation::rotate_atompair_serial(const RI::Tensor& A, const int isym, - const Atom& a1, const Atom& a2, const char mode, const bool output)const - { // due to col-contiguous, actually what we know is T^T and H^T (or D^T), - // and what we calculate is(H'^T = T ^ T * H ^ T * T^*) or (D'^T = T ^ \dagger * D ^ T * T) - assert(mode == 'H' || mode == 'D'); - bool sametype = (a1.label == a2.label); - assert(A.shape[0] == a1.nw);//col - assert(A.shape[1] == a2.nw);//row - // contrut T matrix - const RI::Tensor& T1 = this->set_rotation_matrix(a1, isym); - const RI::Tensor& T2 = sametype ? T1 : this->set_rotation_matrix(a2, isym); - // rotate - RI::TensorTAT(A.shape); - (mode == 'H') ? RI::Sym::T1_HR_T2(TAT.ptr(), A.ptr(), T1, T2) : RI::Sym::T1_DR_T2(TAT.ptr(), A.ptr(), T1, T2); - if (output) - { - print_tensor(A, "A"); - print_tensor(T1, "T1"); - print_tensor(T2, "T2"); - print_tensor(TAT, "TAT"); - } - return TAT; +} + +template +RI::Tensor Symmetry_rotation::set_rotation_matrix(const Atom& a, const int& isym) const +{ + RI::Tensor T({static_cast(a.nw), static_cast(a.nw)}); // check if zero + int iw = 0; + while (iw < a.nw) + { + int l = a.iw2l[iw]; + int nm = 2 * l + 1; + set_block(iw, iw, this->rotmat_Slm_[isym][l], T); + iw += nm; } - template - void Symmetry_rotation::rotate_atompair_serial(Tdata* TAT, const Tdata* A, - const int& nw1, const int& nw2, const int isym, - const Atom& a1, const Atom& a2, const char mode)const - { // due to col-contiguous, actually what we know is T^T and H^T (or D^T), - // and what we calculate is(H'^T = T ^ T * H ^ T * T^*) or (D'^T = T ^ \dagger * D ^ T * T) - assert(mode == 'H' || mode == 'D'); - bool sametype = (a1.label == a2.label); - assert(nw1 == a1.nw);//col - assert(nw2 == a2.nw);//row - // contrut T matrix - const RI::Tensor& T1 = this->set_rotation_matrix(a1, isym); - const RI::Tensor& T2 = sametype ? T1 : this->set_rotation_matrix(a2, isym); - // rotate - (mode == 'H') ? RI::Sym::T1_HR_T2(TAT, A, T1, T2) : RI::Sym::T1_DR_T2(TAT, A, T1, T2); + return T; +} +template +RI::Tensor Symmetry_rotation::rotate_atompair_serial(const RI::Tensor& A, + const int isym, + const Atom& a1, + const Atom& a2, + const char mode, + const bool output) const +{ // due to col-contiguous, actually what we know is T^T and H^T (or D^T), + // and what we calculate is(H'^T = T ^ T * H ^ T * T^*) or (D'^T = T ^ \dagger * D ^ T * T) + assert(mode == 'H' || mode == 'D'); + bool sametype = (a1.label == a2.label); + assert(A.shape[0] == a1.nw); // col + assert(A.shape[1] == a2.nw); // row + // contrut T matrix + const RI::Tensor& T1 = this->set_rotation_matrix(a1, isym); + const RI::Tensor& T2 = sametype ? T1 : this->set_rotation_matrix(a2, isym); + // rotate + RI::Tensor TAT(A.shape); + (mode == 'H') ? RI::Sym::T1_HR_T2(TAT.ptr(), A.ptr(), T1, T2) : RI::Sym::T1_DR_T2(TAT.ptr(), A.ptr(), T1, T2); + if (output) + { + print_tensor(A, "A"); + print_tensor(T1, "T1"); + print_tensor(T2, "T2"); + print_tensor(TAT, "TAT"); } + return TAT; +} +template +void Symmetry_rotation::rotate_atompair_serial(Tdata* TAT, + const Tdata* A, + const int& nw1, + const int& nw2, + const int isym, + const Atom& a1, + const Atom& a2, + const char mode) const +{ // due to col-contiguous, actually what we know is T^T and H^T (or D^T), + // and what we calculate is(H'^T = T ^ T * H ^ T * T^*) or (D'^T = T ^ \dagger * D ^ T * T) + assert(mode == 'H' || mode == 'D'); + bool sametype = (a1.label == a2.label); + assert(nw1 == a1.nw); // col + assert(nw2 == a2.nw); // row + // contrut T matrix + const RI::Tensor& T1 = this->set_rotation_matrix(a1, isym); + const RI::Tensor& T2 = sametype ? T1 : this->set_rotation_matrix(a2, isym); + // rotate + (mode == 'H') ? RI::Sym::T1_HR_T2(TAT, A, T1, T2) : RI::Sym::T1_DR_T2(TAT, A, T1, T2); +} - - template - RI::Tensor Symmetry_rotation::set_rotation_matrix_abf(const int& type, const int& isym)const +template +RI::Tensor Symmetry_rotation::set_rotation_matrix_abf(const int& type, const int& isym) const +{ + int nabfs = 0; + for (int l = 0; l < this->abfs_l_nchi_[type].size(); ++l) { - int nabfs = 0; - for (int l = 0;l < this->abfs_l_nchi_[type].size();++l) {nabfs += this->abfs_l_nchi_[type][l] * (2 * l + 1); -} - RI::Tensor T({ static_cast(nabfs), static_cast(nabfs) }); // check if zero - int iw = 0; - for (int L = 0;L < this->abfs_l_nchi_[type].size();++L) + nabfs += this->abfs_l_nchi_[type][l] * (2 * l + 1); + } + RI::Tensor T({static_cast(nabfs), static_cast(nabfs)}); // check if zero + int iw = 0; + for (int L = 0; L < this->abfs_l_nchi_[type].size(); ++L) + { + int nm = 2 * L + 1; + for (int N = 0; N < this->abfs_l_nchi_[type][L]; ++N) { - int nm = 2 * L + 1; - for (int N = 0;N < this->abfs_l_nchi_[type][L];++N) - { - set_block(iw, iw, this->rotmat_Slm_[isym][L], T); - iw += nm; - // std::cout << "L=" << L << ", N=" << N << ", iw=" << iw << "\n"; - } + set_block(iw, iw, this->rotmat_Slm_[isym][L], T); + iw += nm; + // std::cout << "L=" << L << ", N=" << N << ", iw=" << iw << "\n"; } - assert(iw == nabfs); - return T; } + assert(iw == nabfs); + return T; +} - template - RI::Tensor Symmetry_rotation::rotate_singleC_serial(const RI::Tensor& C, - const int isym, const Atom& a1, const Atom& a2, const int& type1, bool output)const +template +RI::Tensor Symmetry_rotation::rotate_singleC_serial(const RI::Tensor& C, + const int isym, + const Atom& a1, + const Atom& a2, + const int& type1, + bool output) const +{ + assert(this->reduce_Cs_); + RI::Tensor Cout(C.shape); + assert(C.shape.size() == 3); + const int& slice_size = C.shape[1] * C.shape[2]; + // step 1: multiply 2 AOs' rotation matrices + for (int iabf = 0; iabf < C.shape[0]; ++iabf) { - assert(this->reduce_Cs_); - RI::Tensor Cout(C.shape); - assert(C.shape.size() == 3); - const int& slice_size = C.shape[1] * C.shape[2]; - // step 1: multiply 2 AOs' rotation matrices - for (int iabf = 0;iabf < C.shape[0];++iabf) { - this->rotate_atompair_serial(Cout.ptr() + iabf * slice_size, C.ptr() + iabf * slice_size, - a1.nw, a2.nw, isym, a1, a2, 'H'); -} - // step 2: multiply the ABFs' rotation matrix from the left - const RI::Tensor& Tabfs = this->set_rotation_matrix_abf(type1, isym); - RI::Sym::T1_HR(Cout.ptr(), Cout.ptr(), Tabfs, slice_size); - return Cout; + this->rotate_atompair_serial(Cout.ptr() + iabf * slice_size, + C.ptr() + iabf * slice_size, + a1.nw, + a2.nw, + isym, + a1, + a2, + 'H'); } + // step 2: multiply the ABFs' rotation matrix from the left + const RI::Tensor& Tabfs = this->set_rotation_matrix_abf(type1, isym); + RI::Sym::T1_HR(Cout.ptr(), Cout.ptr(), Tabfs, slice_size); + return Cout; +} - template - void Symmetry_rotation::print_HR(const std::map, RI::Tensor>>& HR, const std::string name, const double& threshold) +template +void Symmetry_rotation::print_HR(const std::map, RI::Tensor>>& HR, + const std::string name, + const double& threshold) +{ + for (auto& HR_ia1: HR) { - for (auto& HR_ia1 : HR) + int iat1 = HR_ia1.first; + for (auto& HR_ia12R: HR_ia1.second) { - int iat1 = HR_ia1.first; - for (auto& HR_ia12R : HR_ia1.second) - { - int iat2 = HR_ia12R.first.first; - TC R = HR_ia12R.first.second; - const RI::Tensor& HR_tensor = HR_ia12R.second; - std::cout << "atom pair (" << iat1 << ", " << iat2 << "), R=(" << R[0] << "," << R[1] << "," << R[2] << "), "; - print_tensor(HR_tensor, name, threshold); - } + int iat2 = HR_ia12R.first.first; + TC R = HR_ia12R.first.second; + const RI::Tensor& HR_tensor = HR_ia12R.second; + std::cout << "atom pair (" << iat1 << ", " << iat2 << "), R=(" << R[0] << "," << R[1] << "," << R[2] + << "), "; + print_tensor(HR_tensor, name, threshold); } } +} - template - void Symmetry_rotation::test_HR_rotation(const Symmetry& symm, const Atom* atoms, const Statistics& st, const char mode, - const std::map, RI::Tensor>>& HR_full) - { - ModuleBase::TITLE("Symmetry_rotation", "test_HR_rotation"); +template +void Symmetry_rotation::test_HR_rotation(const Symmetry& symm, + const Atom* atoms, + const Statistics& st, + const char mode, + const std::map, RI::Tensor>>& HR_full) +{ + ModuleBase::TITLE("Symmetry_rotation", "test_HR_rotation"); - // 1. pick out H(R) in the irreducible sector from full H(R) - std::map, RI::Tensor>> HR_irreducible; - for (auto& irap_Rs : this->irs_.irreducible_sector_) + // 1. pick out H(R) in the irreducible sector from full H(R) + std::map, RI::Tensor>> HR_irreducible; + for (auto& irap_Rs: this->irs_.irreducible_sector_) + { + const Tap& irap = irap_Rs.first; + for (auto& irR: irap_Rs.second) { - const Tap& irap = irap_Rs.first; - for (auto& irR : irap_Rs.second) - { - const std::pair a2_irR = { irap.second, irR }; - HR_irreducible[irap.first][a2_irR] = (HR_full.at(irap.first).count(a2_irR) != 0) ? - HR_full.at(irap.first).at(a2_irR) - : RI::Tensor(HR_full.at(irap.first).begin()->second.shape); - } + const std::pair a2_irR = {irap.second, irR}; + HR_irreducible[irap.first][a2_irR] = (HR_full.at(irap.first).count(a2_irR) != 0) + ? HR_full.at(irap.first).at(a2_irR) + : RI::Tensor(HR_full.at(irap.first).begin()->second.shape); } - // 2. rotate - std::map, RI::Tensor>> HR_rotated = restore_HR(symm, atoms, st, mode, HR_irreducible); - // 3. compare - for (auto& HR_ia1 : HR_rotated) + } + // 2. rotate + std::map, RI::Tensor>> HR_rotated + = restore_HR(symm, atoms, st, mode, HR_irreducible); + // 3. compare + for (auto& HR_ia1: HR_rotated) + { + int iat1 = HR_ia1.first; + for (auto& HR_ia12R: HR_ia1.second) { - int iat1 = HR_ia1.first; - for (auto& HR_ia12R : HR_ia1.second) + int iat2 = HR_ia12R.first.first; + TC R = HR_ia12R.first.second; + const RI::Tensor& HR_rot = HR_ia12R.second; + if (HR_full.at(iat1).count({iat2, R}) == 0) // rot back but not found { - int iat2 = HR_ia12R.first.first; - TC R = HR_ia12R.first.second; - const RI::Tensor& HR_rot = HR_ia12R.second; - if (HR_full.at(iat1).count({ iat2, R }) == 0)// rot back but not found - { - std::cout << "R_rot not found in atom pair (" << iat1 << ", " << iat2 << "): R=(" << R[0] << "," << R[1] << "," << R[2] << "):\n"; - continue; - } - const RI::Tensor& HR_ref = HR_full.at(iat1).at({ iat2, R }); - assert(HR_rot.shape[0] == HR_ref.shape[0]); - assert(HR_rot.shape[1] == HR_ref.shape[1]); - // output - std::cout << "atom pair (" << iat1 << ", " << iat2 << "), R=(" << R[0] << "," << R[1] << "," << R[2] << "):\n"; - print_tensor(HR_rot, std::string("R_rot").insert(0, 1, mode)); - print_tensor(HR_ref, std::string("R_ref").insert(0, 1, mode)); + std::cout << "R_rot not found in atom pair (" << iat1 << ", " << iat2 << "): R=(" << R[0] << "," + << R[1] << "," << R[2] << "):\n"; + continue; } + const RI::Tensor& HR_ref = HR_full.at(iat1).at({iat2, R}); + assert(HR_rot.shape[0] == HR_ref.shape[0]); + assert(HR_rot.shape[1] == HR_ref.shape[1]); + // output + std::cout << "atom pair (" << iat1 << ", " << iat2 << "), R=(" << R[0] << "," << R[1] << "," << R[2] + << "):\n"; + print_tensor(HR_rot, std::string("R_rot").insert(0, 1, mode)); + print_tensor(HR_ref, std::string("R_ref").insert(0, 1, mode)); } } +} - template - void Symmetry_rotation::test_Cs_rotation(const Symmetry& symm, const Atom* atoms, const Statistics& st, - const std::map, RI::Tensor>>& Cs_full)const +template +void Symmetry_rotation::test_Cs_rotation( + const Symmetry& symm, + const Atom* atoms, + const Statistics& st, + const std::map, RI::Tensor>>& Cs_full) const +{ + for (auto& sector_pair: this->irs_.full_map_to_irreducible_sector_) { - for (auto& sector_pair : this->irs_.full_map_to_irreducible_sector_) + const TapR& apR = sector_pair.first; + const int& isym = sector_pair.second.first; + const TapR& irapR = sector_pair.second.second; + // if (apR.first != irapR.first || apR.second != irapR.second) + if (apR.first != irapR.first) { - const TapR& apR = sector_pair.first; - const int& isym = sector_pair.second.first; - const TapR& irapR = sector_pair.second.second; - // if (apR.first != irapR.first || apR.second != irapR.second) - if (apR.first != irapR.first) - { - std::cout << "irapR=(" << irapR.first.first << "," << irapR.first.second << "), (" << irapR.second[0] << "," << irapR.second[1] << "," << irapR.second[2] << "):\n"; - std::cout << "apR=(" << apR.first.first << "," << apR.first.second << "), (" << apR.second[0] << "," << apR.second[1] << "," << apR.second[2] << "):\n"; - const RI::Tensor& Cs_ir = Cs_full.at(irapR.first.first).at({ irapR.first.second,irapR.second }); - const RI::Tensor& Cs_ref = Cs_full.at(apR.first.first).at({ apR.first.second,apR.second }); - const RI::Tensor& Cs_rot = this->rotate_singleC_serial(Cs_ir, isym, - atoms[st.iat2it[irapR.first.first]], atoms[st.iat2it[irapR.first.second]], irapR.first.first); - print_tensor3(Cs_rot, "Cs_rot"); - print_tensor3(Cs_ref, "Cs_ref"); - print_tensor3(Cs_ir, "Cs_irreducible"); - exit(0); - } + std::cout << "irapR=(" << irapR.first.first << "," << irapR.first.second << "), (" << irapR.second[0] << "," + << irapR.second[1] << "," << irapR.second[2] << "):\n"; + std::cout << "apR=(" << apR.first.first << "," << apR.first.second << "), (" << apR.second[0] << "," + << apR.second[1] << "," << apR.second[2] << "):\n"; + const RI::Tensor& Cs_ir = Cs_full.at(irapR.first.first).at({irapR.first.second, irapR.second}); + const RI::Tensor& Cs_ref = Cs_full.at(apR.first.first).at({apR.first.second, apR.second}); + const RI::Tensor& Cs_rot = this->rotate_singleC_serial(Cs_ir, + isym, + atoms[st.iat2it[irapR.first.first]], + atoms[st.iat2it[irapR.first.second]], + irapR.first.first); + print_tensor3(Cs_rot, "Cs_rot"); + print_tensor3(Cs_ref, "Cs_ref"); + print_tensor3(Cs_ir, "Cs_irreducible"); + exit(0); } - } +} -} \ No newline at end of file +} // namespace ModuleSymmetry \ No newline at end of file diff --git a/source/module_ri/module_exx_symmetry/symmetry_rotation_R_hcontainer.hpp b/source/module_ri/module_exx_symmetry/symmetry_rotation_R_hcontainer.hpp index 3aef195160..f7f48ecbe8 100644 --- a/source/module_ri/module_exx_symmetry/symmetry_rotation_R_hcontainer.hpp +++ b/source/module_ri/module_exx_symmetry/symmetry_rotation_R_hcontainer.hpp @@ -1,234 +1,312 @@ +#include "source_base/blas_connector.h" +#include "source_base/parallel_reduce.h" #include "symmetry_rotation.h" -#include "module_base/blas_connector.h" -#include "module_base/parallel_reduce.h" namespace ModuleSymmetry { - template - inline void print_global(const TR* tlocal, const int nr, const int nc, const std::string name) +template +inline void print_global(const TR* tlocal, const int nr, const int nc, const std::string name) +{ + GlobalV::ofs_running << name << std::endl; + for (int i = 0; i < nr; ++i) { - GlobalV::ofs_running << name << std::endl; - for (int i = 0;i < nr;++i) - { - for (int j = 0;j < nc;++j) GlobalV::ofs_running << tlocal[j + i * nc] << " "; - GlobalV::ofs_running << "\n"; - } + for (int j = 0; j < nc; ++j) + GlobalV::ofs_running << tlocal[j + i * nc] << " "; + GlobalV::ofs_running << "\n"; } - template - inline void print_local(const Parallel_Orbitals& pv, const TR* tlocal, const std::string name) +} +template +inline void print_local(const Parallel_Orbitals& pv, const TR* tlocal, const std::string name) +{ + GlobalV::ofs_running << name << std::endl; + for (int i = 0; i < pv.get_row_size(); ++i) { - GlobalV::ofs_running << name << std::endl; - for (int i = 0;i < pv.get_row_size();++i) - { - for (int j = 0;j < pv.get_col_size();++j) GlobalV::ofs_running << tlocal[j + i * pv.get_col_size()] << " "; - GlobalV::ofs_running << "\n"; - } + for (int j = 0; j < pv.get_col_size(); ++j) + GlobalV::ofs_running << tlocal[j + i * pv.get_col_size()] << " "; + GlobalV::ofs_running << "\n"; } - template - inline void print_atompair_local(const Parallel_Orbitals& pv, const int iat1, const int iat2, const TR* tlocal, const std::string name) +} +template +inline void print_atompair_local(const Parallel_Orbitals& pv, + const int iat1, + const int iat2, + const TR* tlocal, + const std::string name) +{ + GlobalV::ofs_running << name << std::endl; + for (int i = 0; i < pv.get_row_size(iat1); ++i) { - GlobalV::ofs_running << name << std::endl; - for (int i = 0;i < pv.get_row_size(iat1);++i) - { - for (int j = 0;j < pv.get_col_size(iat2);++j) GlobalV::ofs_running << tlocal[j + i * pv.get_col_size(iat2)] << " "; - GlobalV::ofs_running << "\n"; - } + for (int j = 0; j < pv.get_col_size(iat2); ++j) + GlobalV::ofs_running << tlocal[j + i * pv.get_col_size(iat2)] << " "; + GlobalV::ofs_running << "\n"; } +} - template // HContainer type - void Symmetry_rotation::restore_HR( - const Symmetry& symm, const Atom* atoms, const Statistics& st, const char mode, - const hamilt::HContainer& HR_irreduceble, - hamilt::HContainer& HR_rotated)const +template // HContainer type +void Symmetry_rotation::restore_HR(const Symmetry& symm, + const Atom* atoms, + const Statistics& st, + const char mode, + const hamilt::HContainer& HR_irreduceble, + hamilt::HContainer& HR_rotated) const +{ + ModuleBase::TITLE("Symmetry_rotation", "restore_HR"); + ModuleBase::timer::tick("Symmetry_rotation", "restore_HR"); + for (auto& apR_isym_irapR: this->irs_.full_map_to_irreducible_sector_) { - ModuleBase::TITLE("Symmetry_rotation", "restore_HR"); - ModuleBase::timer::tick("Symmetry_rotation", "restore_HR"); - for (auto& apR_isym_irapR : this->irs_.full_map_to_irreducible_sector_) - { - const Tap& ap = apR_isym_irapR.first.first; - const TC& R = apR_isym_irapR.first.second; - const int& isym = apR_isym_irapR.second.first; - const Tap& irap = apR_isym_irapR.second.second.first; - const TC& irR = apR_isym_irapR.second.second.second; - assert(irR == this->irs_.rotate_R(symm, isym, ap.first, ap.second, R)); - // get in and out pointer from HContainer - const hamilt::AtomPair& irap_hc = HR_irreduceble.get_atom_pair(irap.first, irap.second); - const int irR_hc = irap_hc.find_R(irR[0], irR[1], irR[2]); - if (irR_hc < 0) continue; - const TR* irijR_ptr = irap_hc.get_pointer(irR_hc); - const hamilt::AtomPair& ap_hc = HR_rotated.get_atom_pair(ap.first, ap.second); - const int R_hc = ap_hc.find_R(R[0], R[1], R[2]); - if (R_hc < 0) continue; - TR* ijR_ptr = ap_hc.get_pointer(R_hc); - rotate_atompair_parallel(irijR_ptr, isym, atoms, st, irap, ap, mode, *irap_hc.get_paraV(), ijR_ptr); - } - ModuleBase::timer::tick("Symmetry_rotation", "restore_HR"); + const Tap& ap = apR_isym_irapR.first.first; + const TC& R = apR_isym_irapR.first.second; + const int& isym = apR_isym_irapR.second.first; + const Tap& irap = apR_isym_irapR.second.second.first; + const TC& irR = apR_isym_irapR.second.second.second; + assert(irR == this->irs_.rotate_R(symm, isym, ap.first, ap.second, R)); + // get in and out pointer from HContainer + const hamilt::AtomPair& irap_hc = HR_irreduceble.get_atom_pair(irap.first, irap.second); + const int irR_hc = irap_hc.find_R(irR[0], irR[1], irR[2]); + if (irR_hc < 0) + continue; + const TR* irijR_ptr = irap_hc.get_pointer(irR_hc); + const hamilt::AtomPair& ap_hc = HR_rotated.get_atom_pair(ap.first, ap.second); + const int R_hc = ap_hc.find_R(R[0], R[1], R[2]); + if (R_hc < 0) + continue; + TR* ijR_ptr = ap_hc.get_pointer(R_hc); + rotate_atompair_parallel(irijR_ptr, isym, atoms, st, irap, ap, mode, *irap_hc.get_paraV(), ijR_ptr); } + ModuleBase::timer::tick("Symmetry_rotation", "restore_HR"); +} - inline void set_block(const int starti, const int startj, const int nr, const ModuleBase::ComplexMatrix& block, double* obj) - { // row-major (col-contiguous) - for (int i = 0;i < block.nr;++i) - for (int j = 0;j < block.nc;++j) - obj[starti + i + (startj + j) * nr] = block(j, i).real(); - }; - inline void set_block(const int starti, const int startj, const int nr, const ModuleBase::ComplexMatrix& block, std::complex* obj) - { // row-major (col-contiguous) - for (int i = 0;i < block.nr;++i) - for (int j = 0;j < block.nc;++j) - obj[starti + i + (startj + j) * nr] = block(j, i); +inline void set_block(const int starti, + const int startj, + const int nr, + const ModuleBase::ComplexMatrix& block, + double* obj) +{ // row-major (col-contiguous) + for (int i = 0; i < block.nr; ++i) + for (int j = 0; j < block.nc; ++j) + obj[starti + i + (startj + j) * nr] = block(j, i).real(); +}; +inline void set_block(const int starti, + const int startj, + const int nr, + const ModuleBase::ComplexMatrix& block, + std::complex* obj) +{ // row-major (col-contiguous) + for (int i = 0; i < block.nr; ++i) + for (int j = 0; j < block.nc; ++j) + obj[starti + i + (startj + j) * nr] = block(j, i); +}; +template +void Symmetry_rotation::rotate_atompair_parallel(const TR* Alocal_in, + const int isym, + const Atom* atoms, + const Statistics& st, + const Tap& ap_in, + const Tap& ap_out, + const char mode, + const Parallel_Orbitals& pv, + TR* Alocal_out, + const bool output) const +{ + // all the matrices are row-major (col-contiguous) + int iat1 = ap_in.first, iat2 = ap_in.second; + int it1 = st.iat2it[iat1], it2 = st.iat2it[iat2]; + int ia1 = st.iat2ia[iat1], ia2 = st.iat2ia[iat2]; + // contruct T matrix + std::vector T1, T2; + auto set_rotation_matrix = [&](const int& it, const int& ia, std::vector& T) -> int { + T.resize(atoms[it].nw * atoms[it].nw, 0.0); + const int iwstart = atoms[it].stapos_wf + ia * atoms[it].nw; + int iw = 0; + while (iw < atoms[it].nw) + { + int l = atoms[it].iw2l[iw]; + int nm = 2 * l + 1; + // this->set_block_to_mat2d(iwstart, iwstart, this->rotmat_Slm_[isym][l], T_full_2d, pv); + set_block(iw, iw, atoms[it].nw, this->rotmat_Slm_[isym][l], T.data()); + iw += nm; + } + return iwstart; }; - template - void Symmetry_rotation::rotate_atompair_parallel(const TR* Alocal_in, const int isym, const Atom* atoms, const Statistics& st, - const Tap& ap_in, const Tap& ap_out, const char mode, const Parallel_Orbitals& pv, TR* Alocal_out, const bool output)const - { - // all the matrices are row-major (col-contiguous) - int iat1 = ap_in.first, iat2 = ap_in.second; - int it1 = st.iat2it[iat1], it2 = st.iat2it[iat2]; - int ia1 = st.iat2ia[iat1], ia2 = st.iat2ia[iat2]; - // contruct T matrix - std::vector T1, T2; - auto set_rotation_matrix = [&](const int& it, const int& ia, std::vector& T)->int - { - T.resize(atoms[it].nw * atoms[it].nw, 0.0); - const int iwstart = atoms[it].stapos_wf + ia * atoms[it].nw; - int iw = 0; - while (iw < atoms[it].nw) - { - int l = atoms[it].iw2l[iw]; - int nm = 2 * l + 1; - // this->set_block_to_mat2d(iwstart, iwstart, this->rotmat_Slm_[isym][l], T_full_2d, pv); - set_block(iw, iw, atoms[it].nw, this->rotmat_Slm_[isym][l], T.data()); - iw += nm; - } - return iwstart; - }; - int iw1start = set_rotation_matrix(it1, ia1, T1); - int iw2start = set_rotation_matrix(it2, ia2, T2); + int iw1start = set_rotation_matrix(it1, ia1, T1); + int iw2start = set_rotation_matrix(it2, ia2, T2); - // copy Aocal_in to a global atom-pair matrix - std::vector A(atoms[it1].nw * atoms[it2].nw, 0.0); + // copy Aocal_in to a global atom-pair matrix + std::vector A(atoms[it1].nw * atoms[it2].nw, 0.0); - int abr1 = pv.atom_begin_row[iat1], abc2 = pv.atom_begin_col[iat2]; - if (abr1 >= 0 && abc2 >= 0) - { // "pv.local2global_row(i) - iw1start": global index in current atom pair - for (int j = 0;j < pv.get_col_size(iat2);++j) - for (int i = 0;i < pv.get_row_size(iat1);++i) - A[(pv.local2global_row(i + abr1) - iw1start) * atoms[it2].nw + (pv.local2global_col(j + abc2) - iw2start)] + int abr1 = pv.atom_begin_row[iat1], abc2 = pv.atom_begin_col[iat2]; + if (abr1 >= 0 && abc2 >= 0) + { // "pv.local2global_row(i) - iw1start": global index in current atom pair + for (int j = 0; j < pv.get_col_size(iat2); ++j) + for (int i = 0; i < pv.get_row_size(iat1); ++i) + A[(pv.local2global_row(i + abr1) - iw1start) * atoms[it2].nw + + (pv.local2global_col(j + abc2) - iw2start)] = Alocal_in[j + i * pv.get_col_size(iat2)]; - } - if (output) print_global(A.data(), atoms[it1].nw, atoms[it2].nw, "A before allreduce"); - Parallel_Reduce::reduce_all(A.data(), A.size()); - - // rotate - const char notrans = 'N', transpose = 'T', dagger = 'C'; - // const std::complex alpha(1.0, 0.0), beta(0.0, 0.0); - std::vector AT2(atoms[it1].nw * atoms[it2].nw, 0.0); - std::vector TAT(atoms[it1].nw * atoms[it2].nw, 0.0); - if (mode == 'H') - { // H'=T1^\dagger * H * T2 - BlasConnector::gemm(notrans, notrans, atoms[it1].nw, atoms[it2].nw, atoms[it2].nw, - 1.0, A.data(), atoms[it2].nw, T2.data(), atoms[it2].nw, 0.0, AT2.data(), atoms[it2].nw); - BlasConnector::gemm(dagger, notrans, atoms[it1].nw, atoms[it2].nw, atoms[it1].nw, - 1.0, T1.data(), atoms[it1].nw, AT2.data(), atoms[it2].nw, 0.0, TAT.data(), atoms[it2].nw); - } - else if (mode == 'D') - { // D' = T1^T * D * T2^* = T1^T * [T2^\dagger * D^T]^T - BlasConnector::gemm(dagger, transpose, atoms[it2].nw, atoms[it1].nw, atoms[it2].nw, - 1.0, T2.data(), atoms[it2].nw, A.data(), atoms[it2].nw, 0.0, AT2.data(), atoms[it1].nw); - BlasConnector::gemm(transpose, transpose, atoms[it1].nw, atoms[it2].nw, atoms[it1].nw, - 1.0, T1.data(), atoms[it1].nw, AT2.data(), atoms[it1].nw, 0.0, TAT.data(), atoms[it2].nw); - } - else throw std::invalid_argument("Symmetry_rotation::rotate_atompair_tensor: invalid mode."); - - if (output) - { - print_global(A.data(), atoms[it1].nw, atoms[it2].nw, "A"); - print_global(T1.data(), atoms[it1].nw, atoms[it1].nw, "T1"); - print_global(TAT.data(), atoms[it1].nw, atoms[it2].nw, "TAT"); - print_atompair_local(pv, iat1, iat2, Alocal_out, "Alocal_out"); - } + } + if (output) + print_global(A.data(), atoms[it1].nw, atoms[it2].nw, "A before allreduce"); + Parallel_Reduce::reduce_all(A.data(), A.size()); - // copy back to Alocal_out - iat1 = ap_out.first, iat2 = ap_out.second; - it1 = st.iat2it[iat1], it2 = st.iat2it[iat2]; - ia1 = st.iat2ia[iat1], ia2 = st.iat2ia[iat2]; - abr1 = pv.atom_begin_row[iat1], abc2 = pv.atom_begin_col[iat2]; - iw1start = atoms[it1].stapos_wf + ia1 * atoms[it1].nw; - iw2start = atoms[it2].stapos_wf + ia2 * atoms[it2].nw; - if (abr1 >= 0 && abc2 >= 0) - {// ap_in index for TAT but ap_out index for Alocal_out - for (int j = 0;j < pv.get_col_size(iat2);++j) - for (int i = 0;i < pv.get_row_size(iat1);++i) - Alocal_out[j + i * pv.get_col_size(iat2)] - = TAT[(pv.local2global_row(i + abr1) - iw1start) * atoms[it2].nw + (pv.local2global_col(j + abc2) - iw2start)]; - } + // rotate + const char notrans = 'N', transpose = 'T', dagger = 'C'; + // const std::complex alpha(1.0, 0.0), beta(0.0, 0.0); + std::vector AT2(atoms[it1].nw * atoms[it2].nw, 0.0); + std::vector TAT(atoms[it1].nw * atoms[it2].nw, 0.0); + if (mode == 'H') + { // H'=T1^\dagger * H * T2 + BlasConnector::gemm(notrans, + notrans, + atoms[it1].nw, + atoms[it2].nw, + atoms[it2].nw, + 1.0, + A.data(), + atoms[it2].nw, + T2.data(), + atoms[it2].nw, + 0.0, + AT2.data(), + atoms[it2].nw); + BlasConnector::gemm(dagger, + notrans, + atoms[it1].nw, + atoms[it2].nw, + atoms[it1].nw, + 1.0, + T1.data(), + atoms[it1].nw, + AT2.data(), + atoms[it2].nw, + 0.0, + TAT.data(), + atoms[it2].nw); + } + else if (mode == 'D') + { // D' = T1^T * D * T2^* = T1^T * [T2^\dagger * D^T]^T + BlasConnector::gemm(dagger, + transpose, + atoms[it2].nw, + atoms[it1].nw, + atoms[it2].nw, + 1.0, + T2.data(), + atoms[it2].nw, + A.data(), + atoms[it2].nw, + 0.0, + AT2.data(), + atoms[it1].nw); + BlasConnector::gemm(transpose, + transpose, + atoms[it1].nw, + atoms[it2].nw, + atoms[it1].nw, + 1.0, + T1.data(), + atoms[it1].nw, + AT2.data(), + atoms[it1].nw, + 0.0, + TAT.data(), + atoms[it2].nw); } + else + throw std::invalid_argument("Symmetry_rotation::rotate_atompair_tensor: invalid mode."); - template - void Symmetry_rotation::test_HR_rotation(const Symmetry& symm, const Atom* atoms, const Statistics& st, - const char mode, const hamilt::HContainer& HR_full) + if (output) { - ModuleBase::TITLE("Symmetry_rotation", "test_HR_rotation"); - auto get_irreducible_ijR_info = [&HR_full, this]() -> std::vector - { - std::vector irreducible_ijR_info; - irreducible_ijR_info.push_back(this->irs_.irreducible_sector_.size()); - for (auto& irap_irR : this->irs_.irreducible_sector_) - { - const int iat1 = irap_irR.first.first, iat2 = irap_irR.first.second; - irreducible_ijR_info.insert(irreducible_ijR_info.end(), { iat1, iat2, 0 }); - int nR = 0; - for (auto& R : irap_irR.second) - if (HR_full.get_atom_pair(iat1, iat2).find_R(R[0], R[1], R[2]) >= 0) - { - irreducible_ijR_info.insert(irreducible_ijR_info.end(), R.begin(), R.end()); - ++nR; - } - irreducible_ijR_info[irreducible_ijR_info.size() - 3 * nR - 1] = nR; - } - return irreducible_ijR_info; - }; + print_global(A.data(), atoms[it1].nw, atoms[it2].nw, "A"); + print_global(T1.data(), atoms[it1].nw, atoms[it1].nw, "T1"); + print_global(TAT.data(), atoms[it1].nw, atoms[it2].nw, "TAT"); + print_atompair_local(pv, iat1, iat2, Alocal_out, "Alocal_out"); + } + + // copy back to Alocal_out + iat1 = ap_out.first, iat2 = ap_out.second; + it1 = st.iat2it[iat1], it2 = st.iat2it[iat2]; + ia1 = st.iat2ia[iat1], ia2 = st.iat2ia[iat2]; + abr1 = pv.atom_begin_row[iat1], abc2 = pv.atom_begin_col[iat2]; + iw1start = atoms[it1].stapos_wf + ia1 * atoms[it1].nw; + iw2start = atoms[it2].stapos_wf + ia2 * atoms[it2].nw; + if (abr1 >= 0 && abc2 >= 0) + { // ap_in index for TAT but ap_out index for Alocal_out + for (int j = 0; j < pv.get_col_size(iat2); ++j) + for (int i = 0; i < pv.get_row_size(iat1); ++i) + Alocal_out[j + i * pv.get_col_size(iat2)] + = TAT[(pv.local2global_row(i + abr1) - iw1start) * atoms[it2].nw + + (pv.local2global_col(j + abc2) - iw2start)]; + } +} - const Parallel_Orbitals* pv = HR_full.get_atom_pair(0, 0).get_paraV(); - // 1. pick out H(R) in the irreducible sector from full H(R) - const std::vector& irreducible_ijR_info = get_irreducible_ijR_info(); - hamilt::HContainer HR_irreducible(pv, nullptr, &irreducible_ijR_info); - HR_irreducible.set_zero(); - for (auto& irap_irR : this->irs_.irreducible_sector_) +template +void Symmetry_rotation::test_HR_rotation(const Symmetry& symm, + const Atom* atoms, + const Statistics& st, + const char mode, + const hamilt::HContainer& HR_full) +{ + ModuleBase::TITLE("Symmetry_rotation", "test_HR_rotation"); + auto get_irreducible_ijR_info = [&HR_full, this]() -> std::vector { + std::vector irreducible_ijR_info; + irreducible_ijR_info.push_back(this->irs_.irreducible_sector_.size()); + for (auto& irap_irR: this->irs_.irreducible_sector_) { const int iat1 = irap_irR.first.first, iat2 = irap_irR.first.second; - const hamilt::AtomPair& irap = HR_irreducible.get_atom_pair(iat1, iat2); - const hamilt::AtomPair& ap_full = HR_full.get_atom_pair(iat1, iat2); - for (auto& R : irap_irR.second) - if (irap.find_R(R[0], R[1], R[2]) >= 0) - { // out-of-range R can be added to irreducible sector to be calculated, but not in this test for lack of reference - TR* irptr = irap.get_HR_values(R[0], R[1], R[2]).get_pointer(); - TR* ptr = ap_full.get_HR_values(R[0], R[1], R[2]).get_pointer(); - std::copy(ptr, ptr + pv->get_row_size(iat1) * pv->get_col_size(iat2), irptr); + irreducible_ijR_info.insert(irreducible_ijR_info.end(), {iat1, iat2, 0}); + int nR = 0; + for (auto& R: irap_irR.second) + if (HR_full.get_atom_pair(iat1, iat2).find_R(R[0], R[1], R[2]) >= 0) + { + irreducible_ijR_info.insert(irreducible_ijR_info.end(), R.begin(), R.end()); + ++nR; } + irreducible_ijR_info[irreducible_ijR_info.size() - 3 * nR - 1] = nR; } + return irreducible_ijR_info; + }; + + const Parallel_Orbitals* pv = HR_full.get_atom_pair(0, 0).get_paraV(); + // 1. pick out H(R) in the irreducible sector from full H(R) + const std::vector& irreducible_ijR_info = get_irreducible_ijR_info(); + hamilt::HContainer HR_irreducible(pv, nullptr, &irreducible_ijR_info); + HR_irreducible.set_zero(); + for (auto& irap_irR: this->irs_.irreducible_sector_) + { + const int iat1 = irap_irR.first.first, iat2 = irap_irR.first.second; + const hamilt::AtomPair& irap = HR_irreducible.get_atom_pair(iat1, iat2); + const hamilt::AtomPair& ap_full = HR_full.get_atom_pair(iat1, iat2); + for (auto& R: irap_irR.second) + if (irap.find_R(R[0], R[1], R[2]) >= 0) + { // out-of-range R can be added to irreducible sector to be calculated, but not in this test for lack of + // reference + TR* irptr = irap.get_HR_values(R[0], R[1], R[2]).get_pointer(); + TR* ptr = ap_full.get_HR_values(R[0], R[1], R[2]).get_pointer(); + std::copy(ptr, ptr + pv->get_row_size(iat1) * pv->get_col_size(iat2), irptr); + } + } - //2. rotate - hamilt::HContainer HR_rotated(HR_full); - HR_rotated.set_zero(); - this->restore_HR(symm, atoms, st, mode, HR_irreducible, HR_rotated); - //3. compare - for (int iat1 = 0;iat1 < st.nat;++iat1) + // 2. rotate + hamilt::HContainer HR_rotated(HR_full); + HR_rotated.set_zero(); + this->restore_HR(symm, atoms, st, mode, HR_irreducible, HR_rotated); + // 3. compare + for (int iat1 = 0; iat1 < st.nat; ++iat1) + { + for (int iat2 = 0; iat2 < st.nat; ++iat2) { - for (int iat2 = 0;iat2 < st.nat;++iat2) + const hamilt::AtomPair& ap_full = HR_full.get_atom_pair(iat1, iat2); + const hamilt::AtomPair& ap_rotated = HR_rotated.get_atom_pair(iat1, iat2); + assert(ap_full.get_R_size() == ap_rotated.get_R_size()); + for (int irR = 0; irR < ap_full.get_R_size(); ++irR) { - const hamilt::AtomPair& ap_full = HR_full.get_atom_pair(iat1, iat2); - const hamilt::AtomPair& ap_rotated = HR_rotated.get_atom_pair(iat1, iat2); - assert(ap_full.get_R_size() == ap_rotated.get_R_size()); - for (int irR = 0;irR < ap_full.get_R_size();++irR) - { - const TR* full_ptr = ap_full.get_pointer(irR); - int* R = ap_full.get_R_index(irR); - const TR* rotated_ptr = ap_rotated.get_HR_values(R[0], R[1], R[2]).get_pointer(); - GlobalV::ofs_running << "atom pair: (" << iat1 << ", " << iat2 << "), R: (" << R[0] << " " << R[1] << " " << R[2] << ")\n"; - print_atompair_local(*pv, iat1, iat2, rotated_ptr, std::string("R_rot").insert(0, 1, mode)); - print_atompair_local(*pv, iat1, iat2, full_ptr, std::string("R_ref").insert(0, 1, mode)); - } + const TR* full_ptr = ap_full.get_pointer(irR); + int* R = ap_full.get_R_index(irR); + const TR* rotated_ptr = ap_rotated.get_HR_values(R[0], R[1], R[2]).get_pointer(); + GlobalV::ofs_running << "atom pair: (" << iat1 << ", " << iat2 << "), R: (" << R[0] << " " << R[1] + << " " << R[2] << ")\n"; + print_atompair_local(*pv, iat1, iat2, rotated_ptr, std::string("R_rot").insert(0, 1, mode)); + print_atompair_local(*pv, iat1, iat2, full_ptr, std::string("R_ref").insert(0, 1, mode)); } } } -} \ No newline at end of file +} +} // namespace ModuleSymmetry \ No newline at end of file diff --git a/source/module_ri/serialization_boost.h b/source/module_ri/serialization_boost.h index 7d830b4b0e..01aecaf534 100644 --- a/source/module_ri/serialization_boost.h +++ b/source/module_ri/serialization_boost.h @@ -1,93 +1,91 @@ #ifndef SERIALIZATION_BOOST_H #define SERIALIZATION_BOOST_H -#include -#include -#include -#include +#include "../source_base/abfs-vector3_order.h" +#include "../source_base/matrix.h" +#include "../source_base/matrix_wrapper.h" +#include "../source_base/vector3.h" -#include -#include +#include +#include +#include +#include #include +#include #include - -#include "../module_base/vector3.h" -#include "../module_base/abfs-vector3_order.h" -#include "../module_base/matrix.h" -#include "../module_base/matrix_wrapper.h" +#include namespace boost { - namespace serialization - { - // ModuleBase::Vector3 Peize Lin add 2018-07-01 - template - inline void serialize(Archive & ar, ModuleBase::Vector3 & v, const unsigned int version) - { - ar & v.x; - ar & v.y; - ar & v.z; - } - - // Abfs::Vector3_Order Peize Lin add 2018-07-01 - template - inline void serialize(Archive & ar, Abfs::Vector3_Order & v, const unsigned int version) - { - ar & v.x; - ar & v.y; - ar & v.z; - } +namespace serialization +{ +// ModuleBase::Vector3 Peize Lin add 2018-07-01 +template +inline void serialize(Archive& ar, ModuleBase::Vector3& v, const unsigned int version) +{ + ar& v.x; + ar& v.y; + ar& v.z; +} - // matrix Peize Lin add 2018-07-01 - template - inline void save( Archive & ar, const ModuleBase::matrix & m, const unsigned int /*file_version*/ ) - { - const collection_size_type nr(m.nr), nc(m.nc); - ar << BOOST_SERIALIZATION_NVP(nr) << BOOST_SERIALIZATION_NVP(nc); - if( nr && nc ) - ar << serialization::make_array( m.c, nr*nc ); - } - template - inline void load( Archive & ar, ModuleBase::matrix &m, const unsigned int /*file_version*/ ) - { - collection_size_type nr, nc; - ar >> BOOST_SERIALIZATION_NVP(nr) >> BOOST_SERIALIZATION_NVP(nc); - m.create(nr,nc,false); - if( nr && nc ) - ar >> serialization::make_array( m.c, nr*nc ); - } - template - inline void serialize( Archive & ar, ModuleBase::matrix & m, const unsigned int file_version ) - { - boost::serialization::split_free(ar, m, file_version); - } +// Abfs::Vector3_Order Peize Lin add 2018-07-01 +template +inline void serialize(Archive& ar, Abfs::Vector3_Order& v, const unsigned int version) +{ + ar& v.x; + ar& v.y; + ar& v.z; +} - // MatrixWrapper Peize Lin add 2018-07-31 - template - inline void save( Archive & ar, const ModuleBase::Matrix_Wrapper & m, const unsigned int /*file_version*/ ) - { - const collection_size_type nr(m.nr), nc(m.nc); - ar << BOOST_SERIALIZATION_NVP(nr) << BOOST_SERIALIZATION_NVP(nc); - if( nr && nc ) - ar << serialization::make_array( m.c, nr*nc ); - } - template - inline void load( Archive & ar, ModuleBase::Matrix_Wrapper &m, const unsigned int /*file_version*/ ) - { - collection_size_type nr, nc; - ar >> BOOST_SERIALIZATION_NVP(nr) >> BOOST_SERIALIZATION_NVP(nc); - m.create(nr,nc,false); - if( nr && nc ) - ar >> serialization::make_array( m.c, nr*nc ); - } - template - inline void serialize( Archive & ar, ModuleBase::Matrix_Wrapper & m, const unsigned int file_version ) - { - boost::serialization::split_free(ar, m, file_version); - } - } +// matrix Peize Lin add 2018-07-01 +template +inline void save(Archive& ar, const ModuleBase::matrix& m, const unsigned int /*file_version*/) +{ + const collection_size_type nr(m.nr), nc(m.nc); + ar << BOOST_SERIALIZATION_NVP(nr) << BOOST_SERIALIZATION_NVP(nc); + if (nr && nc) + ar << serialization::make_array(m.c, nr * nc); +} +template +inline void load(Archive& ar, ModuleBase::matrix& m, const unsigned int /*file_version*/) +{ + collection_size_type nr, nc; + ar >> BOOST_SERIALIZATION_NVP(nr) >> BOOST_SERIALIZATION_NVP(nc); + m.create(nr, nc, false); + if (nr && nc) + ar >> serialization::make_array(m.c, nr * nc); +} +template +inline void serialize(Archive& ar, ModuleBase::matrix& m, const unsigned int file_version) +{ + boost::serialization::split_free(ar, m, file_version); } +// MatrixWrapper Peize Lin add 2018-07-31 +template +inline void save(Archive& ar, const ModuleBase::Matrix_Wrapper& m, const unsigned int /*file_version*/) +{ + const collection_size_type nr(m.nr), nc(m.nc); + ar << BOOST_SERIALIZATION_NVP(nr) << BOOST_SERIALIZATION_NVP(nc); + if (nr && nc) + ar << serialization::make_array(m.c, nr * nc); +} +template +inline void load(Archive& ar, ModuleBase::Matrix_Wrapper& m, const unsigned int /*file_version*/) +{ + collection_size_type nr, nc; + ar >> BOOST_SERIALIZATION_NVP(nr) >> BOOST_SERIALIZATION_NVP(nc); + m.create(nr, nc, false); + if (nr && nc) + ar >> serialization::make_array(m.c, nr * nc); +} +template +inline void serialize(Archive& ar, ModuleBase::Matrix_Wrapper& m, const unsigned int file_version) +{ + boost::serialization::split_free(ar, m, file_version); +} +} // namespace serialization +} // namespace boost #include diff --git a/source/module_ri/serialization_cereal.h b/source/module_ri/serialization_cereal.h index 6690b738f6..354615fd35 100644 --- a/source/module_ri/serialization_cereal.h +++ b/source/module_ri/serialization_cereal.h @@ -1,74 +1,89 @@ #ifndef SERIALIZATION_CEREAL_H #define SERIALIZATION_CEREAL_H +#include "../source_base/abfs-vector3_order.h" +#include "../source_base/matrix.h" +#include "../source_base/vector3.h" + #include #include -#include +#include #include #include #include -#include - -#include "../module_base/vector3.h" -#include "../module_base/abfs-vector3_order.h" -#include "../module_base/matrix.h" - - +#include -template void serialize( Archive & ar, Abfs::Vector3_Order & v ){ ar(v.x); ar(v.y); ar(v.z); } +template +void serialize(Archive& ar, Abfs::Vector3_Order& v) +{ + ar(v.x); + ar(v.y); + ar(v.z); +} namespace ModuleBase { - template void serialize( Archive & ar, Vector3 & v ){ ar(v.x); ar(v.y); ar(v.z); } +template +void serialize(Archive& ar, Vector3& v) +{ + ar(v.x); + ar(v.y); + ar(v.z); +} - template void save( Archive & ar, const matrix & m ) - { - ar(m.nr); ar(m.nc); - ar(cereal::binary_data(m.c, m.nr*m.nc*sizeof(double))); - } - template void load( Archive & ar, matrix & m ) - { - int nr, nc; - ar(nr); ar(nc); - m.create(nr,nc); - ar(cereal::binary_data(m.c, m.nr*m.nc*sizeof(double))); - } +template +void save(Archive& ar, const matrix& m) +{ + ar(m.nr); + ar(m.nc); + ar(cereal::binary_data(m.c, m.nr * m.nc * sizeof(double))); +} +template +void load(Archive& ar, matrix& m) +{ + int nr, nc; + ar(nr); + ar(nc); + m.create(nr, nc); + ar(cereal::binary_data(m.c, m.nr * m.nc * sizeof(double))); } +} // namespace ModuleBase #include #include namespace ModuleBase { - template - void bcast_data_cereal(T &data, const MPI_Comm &mpi_comm, const int &rank_bcast) - { - int my_rank; MPI_Comm_rank( mpi_comm, &my_rank ); - if(my_rank==rank_bcast) - { - std::stringstream ss; - { - cereal::BinaryOutputArchive ar(ss); - ar(data); - } - const int size = ss.str().size(); - MPI_Bcast( const_cast(&size), 1, MPI_INT, rank_bcast, mpi_comm ); - MPI_Bcast( const_cast(ss.str().c_str()), size, MPI_CHAR, rank_bcast, mpi_comm ); - } - else - { - int size; - MPI_Bcast( &size, 1, MPI_INT, rank_bcast, mpi_comm ); - std::vector c(size); - MPI_Bcast( c.data(), size, MPI_CHAR, rank_bcast, mpi_comm ); - std::stringstream ss; - ss.rdbuf()->pubsetbuf(c.data(),size); - { - cereal::BinaryInputArchive ar(ss); - ar(data); - } - } - } +template +void bcast_data_cereal(T& data, const MPI_Comm& mpi_comm, const int& rank_bcast) +{ + int my_rank; + MPI_Comm_rank(mpi_comm, &my_rank); + if (my_rank == rank_bcast) + { + std::stringstream ss; + { + cereal::BinaryOutputArchive ar(ss); + ar(data); + } + const int size = ss.str().size(); + MPI_Bcast(const_cast(&size), 1, MPI_INT, rank_bcast, mpi_comm); + MPI_Bcast(const_cast(ss.str().c_str()), size, MPI_CHAR, rank_bcast, mpi_comm); + } + else + { + int size; + MPI_Bcast(&size, 1, MPI_INT, rank_bcast, mpi_comm); + std::vector c(size); + MPI_Bcast(c.data(), size, MPI_CHAR, rank_bcast, mpi_comm); + std::stringstream ss; + ss.rdbuf()->pubsetbuf(c.data(), size); + { + cereal::BinaryInputArchive ar(ss); + ar(data); + } + } } +} // namespace ModuleBase #endif diff --git a/source/module_ri/test/dm_mixing_test.cpp b/source/module_ri/test/dm_mixing_test.cpp index 9831f5101d..cba07756cf 100644 --- a/source/module_ri/test/dm_mixing_test.cpp +++ b/source/module_ri/test/dm_mixing_test.cpp @@ -1,8 +1,9 @@ -#include "gmock/gmock.h" -#include "gtest/gtest.h" -#include "module_base/module_mixing/broyden_mixing.h" #include "module_ri/Mix_DMk_2D.h" #include "module_ri/Mix_Matrix.h" +#include "source_base/module_mixing/broyden_mixing.h" + +#include "gmock/gmock.h" +#include "gtest/gtest.h" /************************************************ * unit test of charge_mixing.cpp & Mix_DMk_2D.cpp @@ -66,9 +67,9 @@ class DM_Mixing_Test : public ::testing::Test { for (int j = 0; j < nc; ++j) { - mix_complexdata_vector[0][i * nc + j] = std::complex{ double(i), double(j) }; - mix_complexdata_vector[1][i * nc + j] = std::complex{ double(i), double(j) + 0.2 }; - mix_complexdata_vector[2][i * nc + j] = std::complex{ double(i) + 0.8, double(j) }; + mix_complexdata_vector[0][i * nc + j] = std::complex{double(i), double(j)}; + mix_complexdata_vector[1][i * nc + j] = std::complex{double(i), double(j) + 0.2}; + mix_complexdata_vector[2][i * nc + j] = std::complex{double(i) + 0.8, double(j)}; } } }; @@ -123,10 +124,12 @@ TEST_F(DM_Mixing_Test, Mix_Matrix) { for (int j = 0; j < nc; ++j) { - EXPECT_DOUBLE_EQ(data_out_vector[i * nc + j], (1 - mixing_beta) * mix_data_vector[0][i * nc + j] + mixing_beta * mix_data_vector[1][i * nc + j]); + EXPECT_DOUBLE_EQ(data_out_vector[i * nc + j], + (1 - mixing_beta) * mix_data_vector[0][i * nc + j] + + mixing_beta * mix_data_vector[1][i * nc + j]); } } - //vector> + // vector> Mix_Matrix>> mix_vector_complex; mix_vector_complex.init(nullptr); mix_vector_complex.mixing_beta = mixing_beta; @@ -140,15 +143,21 @@ TEST_F(DM_Mixing_Test, Mix_Matrix) { for (int j = 0; j < nc; ++j) { - EXPECT_DOUBLE_EQ(data_out_vector_complex[i * nc + j].real(), ((1 - mixing_beta) * mix_complexdata_vector[0][i * nc + j] + mixing_beta * mix_complexdata_vector[1][i * nc + j]).real()); - EXPECT_DOUBLE_EQ(data_out_vector_complex[i * nc + j].imag(), ((1 - mixing_beta) * mix_complexdata_vector[0][i * nc + j] + mixing_beta * mix_complexdata_vector[1][i * nc + j]).imag()); + EXPECT_DOUBLE_EQ(data_out_vector_complex[i * nc + j].real(), + ((1 - mixing_beta) * mix_complexdata_vector[0][i * nc + j] + + mixing_beta * mix_complexdata_vector[1][i * nc + j]) + .real()); + EXPECT_DOUBLE_EQ(data_out_vector_complex[i * nc + j].imag(), + ((1 - mixing_beta) * mix_complexdata_vector[0][i * nc + j] + + mixing_beta * mix_complexdata_vector[1][i * nc + j]) + .imag()); } } // Broyden mix Mix_Matrix mix_complexmatrix; mix_complexmatrix.init(mixing); - mixing->coef = { 1.1, -0.1 }; + mixing->coef = {1.1, -0.1}; for (int istep = 0; istep < 3; ++istep) { mix_complexmatrix.mix(mix_complexdata[istep], (istep == 0)); @@ -171,7 +180,7 @@ TEST_F(DM_Mixing_Test, Mix_Matrix) TEST_F(DM_Mixing_Test, Mix_DMk_2D) { - //Gamma only + // Gamma only Mix_DMk_2D mix_dmk_gamma; mix_dmk_gamma.set_nks(1, true); mix_dmk_gamma.set_mixing(nullptr); @@ -190,7 +199,9 @@ TEST_F(DM_Mixing_Test, Mix_DMk_2D) { for (int j = 0; j < nc; ++j) { - EXPECT_DOUBLE_EQ(dm_gamma_out[0][0][i * nc + j], (1 - mixing_beta) * mix_data_vector[0][i * nc + j] + mixing_beta * mix_data_vector[1][i * nc + j]); + EXPECT_DOUBLE_EQ(dm_gamma_out[0][0][i * nc + j], + (1 - mixing_beta) * mix_data_vector[0][i * nc + j] + + mixing_beta * mix_data_vector[1][i * nc + j]); } } @@ -213,8 +224,8 @@ TEST_F(DM_Mixing_Test, Mix_DMk_2D) { for (int j = 0; j < nc; ++j) { - std::complex first_step_result - = (1 - mixing_beta) * mix_complexdata_vector[0][i * nc + j] + mixing_beta * mix_complexdata_vector[1][i * nc + j]; + std::complex first_step_result = (1 - mixing_beta) * mix_complexdata_vector[0][i * nc + j] + + mixing_beta * mix_complexdata_vector[1][i * nc + j]; EXPECT_DOUBLE_EQ(dm_out[0][0][i * nc + j].real(), first_step_result.real()); EXPECT_DOUBLE_EQ(dm_out[0][0][i * nc + j].imag(), first_step_result.imag()); } diff --git a/source/module_ri/test_code/element_basis_index-unittest.cpp b/source/module_ri/test_code/element_basis_index-unittest.cpp index 0fbf2f21ee..4991089e09 100644 --- a/source/module_ri/test_code/element_basis_index-unittest.cpp +++ b/source/module_ri/test_code/element_basis_index-unittest.cpp @@ -3,88 +3,89 @@ // DATE : 2016-06-02 //========================================================== -#include "module_base/element_basis_index.h" +#include "source_base/element_basis_index.h" + #include "element_basis_index-test.h" ModuleBase::Element_Basis_Index::Range construct_range() { - ModuleBase::Element_Basis_Index::Range range; - range.resize(2); - - range[0].resize(3); - range[0][0].N = range[0][1].N = 2; - range[0][2].N = 1; - - range[1].resize(2); - range[1][0].N = 3; - range[1][1].N = 2; - - for( size_t T=0; T!=range.size(); ++T ) - for( size_t L=0; L!=range[T].size(); ++L ) - range[T][L].M=2*L+1; - - return range; + ModuleBase::Element_Basis_Index::Range range; + range.resize(2); + + range[0].resize(3); + range[0][0].N = range[0][1].N = 2; + range[0][2].N = 1; + + range[1].resize(2); + range[1][0].N = 3; + range[1][1].N = 2; + + for (size_t T = 0; T != range.size(); ++T) + for (size_t L = 0; L != range[T].size(); ++L) + range[T][L].M = 2 * L + 1; + + return range; } int main() { - const ModuleBase::Element_Basis_Index::Range range = construct_range(); - std::cout<<"range:"< +#include #endif -#include "module_base/scalapack-connector.h" -#include "module_base/global_function.h" +#include "source_base/global_function.h" +#include "source_base/scalapack-connector.h" void test_pblas() { - MPI_Init(NULL,NULL); - int comm_sz; MPI_Comm_size( MPI_COMM_WORLD, &comm_sz ); - int my_rank; MPI_Comm_rank( MPI_COMM_WORLD, &my_rank ); + MPI_Init(NULL, NULL); + int comm_sz; + MPI_Comm_size(MPI_COMM_WORLD, &comm_sz); + int my_rank; + MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); - auto ofs_error_code = []() - { - std::cout<<"MPI_SUCCESS "< descv(9); - ScalapackConnector::descinit(ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv), m, n, mb, nb, irsrc, icsrc, ictxt, mlld, info); - return descv; - }; -// return init_desc; -// }; + auto ofs_pro = [&]() { + std::ofstream ofs("ofs_" + ModuleBase::GlobalFunc::TO_STRING(my_rank)); + ofs << comm_sz << "\t" << dim[0] << "\t" << dim[1] << "\t" << nprow << "\t" << npcol << "\t" << myprow << "\t" + << mypcol << "\t" << std::endl; + ofs.close(); + }; + ofs_pro(); - auto ofs_matrix = [&](const std::vector& v) - { - std::ofstream ofs("matrix_"+ModuleBase::GlobalFunc::TO_STRING(my_rank)); - for(const double i : v ) - ofs< &descv) - { - std::ofstream ofs("desc_"+ModuleBase::GlobalFunc::TO_STRING(my_rank)); - for(int i=0; i<9; ++i) - ofs< descv_5321_32 = init_ictxt('R',true)(5,3,2,1,0,0); - int *desc_5321_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5321_32); - - std::vector descv_5521_32 = init_ictxt('R',true)(5,5,2,1,0,0); - int *desc_5521_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5521_32); - - std::vector descv_5522_32 = init_ictxt('R',true)(5,5,2,2,0,0); - int *desc_5522_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5522_32); - - std::vector descv_5511_32 = init_ictxt('R',true)(5,5,1,1,0,0); - int *desc_5511_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5511_32); - ofs_desc(descv_5511_32); -*/ - std::vector descv_5321_32 = init_desc(5,3,2,1,0,0); - int *desc_5321_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5321_32); - - std::vector descv_5521_32 = init_desc(5,5,2,1,0,0); - int *desc_5521_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5521_32); - - std::vector descv_5522_32 = init_desc(5,5,2,2,0,0); - int *desc_5522_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5522_32); - - std::vector descv_5511_32 = init_desc(5,5,1,1,0,0); - int *desc_5511_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5511_32); - - /* - auto init_matrix_A5624_32 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{0,1,2,3,6,7,8,9}; - case 1: return std::vector{4,5,10,11}; - case 2: return std::vector{12,13,14,15,18,19,20,21}; - case 3: return std::vector{16,17,22,23}; - case 4: return std::vector{24,25,26,27}; - case 5: return std::vector{28,29}; - } - }; - auto init_matrix_I21 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,0,0,0,0,0}; - case 1: return std::vector{0,0,0,1,0,0}; - case 2: return std::vector{0,1,0,0,0,0}; - case 3: return std::vector{0,0,0,0,1,0}; - case 4: return std::vector{0,0,1,0,0,0}; - case 5: return std::vector{0,0,0,0,0,1}; - } - }; - auto init_matrix_I11 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,0,0,0,0,0}; - case 1: return std::vector{0,0,0,0,1,0}; - case 2: return std::vector{0,0,0,0,0,1}; - case 3: return std::vector{1,0,0,0,0,0}; - case 4: return std::vector{0,1,0,0,0,0}; - case 5: return std::vector{0,0,0,0,0,1}; - } - }; - auto init_matrix_I4411 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,0,0,1}; - case 1: return std::vector{0,0,0,0}; - case 2: return std::vector{0,0,0,0}; - case 3: return std::vector{1,0,0,1}; - } - }; - auto init_matrix_I4422 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,0,0,1}; - case 1: return std::vector{0,0,0,0}; - case 2: return std::vector{0,0,0,0}; - case 3: return std::vector{1,0,0,1}; - } - }; - auto init_matrix_I5522 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,0,0,0,1,0,0,0,1}; - case 1: return std::vector{0,0,0,0,0,0}; - case 2: return std::vector{0,0,0,0,0,0}; - case 3: return std::vector{1,0,0,1}; - } - }; - auto init_matrix_I5511_32 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,0,0,0,0}; - case 1: return std::vector{0,0,0,1}; - case 2: return std::vector{0,0,0,0,0,1}; - case 3: return std::vector{1,0,0,0}; - case 4: return std::vector{0,1,0}; - case 5: return std::vector{0,0}; - } - }; - auto init_matrix_I5521_32 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,0,0,0,0,0}; - case 1: return std::vector{0,0,1,0}; - case 2: return std::vector{0,1,0,0,0,0}; - case 3: return std::vector{0,0,0,1}; - case 4: return std::vector{0,0,1}; - case 5: return std::vector{0,0}; - } - }; - auto init_matrix_I5522_32 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,0,0,0,1,0}; - case 1: return std::vector{0,0,0,0}; - case 2: return std::vector{0,0,0,0,0,0}; - case 3: return std::vector{1,0,0,1}; - case 4: return std::vector{0,0,1}; - case 5: return std::vector{0,0}; - } - }; - auto init_matrix_I3321_11 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,0,0,0,1,0,0,0,1}; - } - }; - auto init_matrix_I3321_21 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,0,0,0,0,1}; - case 1: return std::vector{0,1,0}; - } - }; - auto init_matrix_A5522_32 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,2,5,6,7,10}; - case 1: return std::vector{3,4,8,9}; - case 2: return std::vector{11,12,15,16,17,20}; - case 3: return std::vector{13,14,18,19}; - case 4: return std::vector{21,22,25}; - case 5: return std::vector{23,24}; - } - }; - */ - auto init_matrix_I3311_32 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,0}; - case 1: return std::vector{0}; - case 2: return std::vector{0,0}; - case 3: return std::vector{1}; - case 4: return std::vector{0,1}; - case 5: return std::vector{0}; - } - }; - auto init_matrix_I5511_32 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,0,0,0,0,0}; - case 1: return std::vector{0,0,0,1}; - case 2: return std::vector{0,0,0,0,0,1}; - case 3: return std::vector{1,0,0,0}; - case 4: return std::vector{0,1,0}; - case 5: return std::vector{0,0}; - } - }; - auto init_matrix_I5521_32 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,0,0,0,0,0}; - case 1: return std::vector{0,1,0,0}; - case 2: return std::vector{0,0,1,0,0,0}; - case 3: return std::vector{0,0,0,1}; - case 4: return std::vector{0,0,1}; - case 5: return std::vector{0,0}; - } - }; - auto init_matrix_I5522_32 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,0,0,1,0,0}; - case 1: return std::vector{0,0,0,0}; - case 2: return std::vector{0,0,0,0,0,0}; - case 3: return std::vector{1,0,0,1}; - case 4: return std::vector{0,0,1}; - case 5: return std::vector{0,0}; - } - }; - auto init_matrix_A5321_32 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,6,3,8}; - case 1: return std::vector{2,7}; - case 2: return std::vector{11,16,13,18}; - case 3: return std::vector{12,17}; - case 4: return std::vector{21,23}; - case 5: return std::vector{22}; - } - }; - auto init_matrix_A5521_32 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,6,3,8,5,10}; - case 1: return std::vector{2,7,4,9}; - case 2: return std::vector{11,16,13,18,15,20}; - case 3: return std::vector{12,17,14,19}; - case 4: return std::vector{21,23,25}; - case 5: return std::vector{22,24}; - } - }; - auto init_matrix_A5522_32 = [&]() - { - switch(my_rank) - { - case 0: return std::vector{1,6,2,7,5,10}; - case 1: return std::vector{3,8,4,9}; - case 2: return std::vector{11,16,12,17,15,20}; - case 3: return std::vector{13,18,14,19}; - case 4: return std::vector{21,22,25}; - case 5: return std::vector{23,24}; - } - }; + auto init_desc = [&](const int m, const int n, const int mb, const int nb, const int irsrc, const int icsrc) { + const int mlld = ScalapackConnector::numroc(m, mb, myprow, irsrc, nprow); + const int nlld = ScalapackConnector::numroc(n, nb, mypcol, icsrc, npcol); + int info = 0; + std::vector descv(9); + ScalapackConnector::descinit(ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv), + m, + n, + mb, + nb, + irsrc, + icsrc, + ictxt, + mlld, + info); + return descv; + }; + // return init_desc; + // }; - std::vector mA5321_32 = init_matrix_A5321_32(); - std::vector mA5522_32 = init_matrix_A5522_32(); - std::vector mI3311_32 = init_matrix_I3311_32(); - std::vector mI5511_32 = init_matrix_I5511_32(); - std::vector mI5521_32 = init_matrix_I5521_32(); - std::vector mC(100); - ScalapackConnector::pgemm( 'T','N', 3,5,5, 1, ModuleBase::GlobalFunc::VECTOR_TO_PTR(mA5321_32),1,1,desc_5321_32, ModuleBase::GlobalFunc::VECTOR_TO_PTR(mI5511_32),1,1,desc_5511_32, 0, ModuleBase::GlobalFunc::VECTOR_TO_PTR(mC),1,1,desc_5522_32 ); - - auto check_matrix = [&](const std::vector &v1, const std::vector &v2) - { - const size_t len = min(v1.size(),v2.size()); - for(int i=0; i& v) { + std::ofstream ofs("matrix_" + ModuleBase::GlobalFunc::TO_STRING(my_rank)); + for (const double i: v) + ofs << i << std::endl; + ofs.close(); + }; + auto ofs_desc = [&](const std::vector& descv) { + std::ofstream ofs("desc_" + ModuleBase::GlobalFunc::TO_STRING(my_rank)); + for (int i = 0; i < 9; ++i) + ofs << descv[i] << "\t"; + ofs << std::endl; + ofs.close(); + }; - MPI_Finalize(); + /* + std::vector descv_5321_32 = init_ictxt('R',true)(5,3,2,1,0,0); + int *desc_5321_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5321_32); + + std::vector descv_5521_32 = init_ictxt('R',true)(5,5,2,1,0,0); + int *desc_5521_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5521_32); + + std::vector descv_5522_32 = init_ictxt('R',true)(5,5,2,2,0,0); + int *desc_5522_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5522_32); + + std::vector descv_5511_32 = init_ictxt('R',true)(5,5,1,1,0,0); + int *desc_5511_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5511_32); + ofs_desc(descv_5511_32); + */ + std::vector descv_5321_32 = init_desc(5, 3, 2, 1, 0, 0); + int* desc_5321_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5321_32); + + std::vector descv_5521_32 = init_desc(5, 5, 2, 1, 0, 0); + int* desc_5521_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5521_32); + + std::vector descv_5522_32 = init_desc(5, 5, 2, 2, 0, 0); + int* desc_5522_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5522_32); + + std::vector descv_5511_32 = init_desc(5, 5, 1, 1, 0, 0); + int* desc_5511_32 = ModuleBase::GlobalFunc::VECTOR_TO_PTR(descv_5511_32); + + /* + auto init_matrix_A5624_32 = [&]() + { + switch(my_rank) + { + case 0: return std::vector{0,1,2,3,6,7,8,9}; + case 1: return std::vector{4,5,10,11}; + case 2: return std::vector{12,13,14,15,18,19,20,21}; + case 3: return std::vector{16,17,22,23}; + case 4: return std::vector{24,25,26,27}; + case 5: return std::vector{28,29}; + } + }; + auto init_matrix_I21 = [&]() + { + switch(my_rank) + { + case 0: return std::vector{1,0,0,0,0,0}; + case 1: return std::vector{0,0,0,1,0,0}; + case 2: return std::vector{0,1,0,0,0,0}; + case 3: return std::vector{0,0,0,0,1,0}; + case 4: return std::vector{0,0,1,0,0,0}; + case 5: return std::vector{0,0,0,0,0,1}; + } + }; + auto init_matrix_I11 = [&]() + { + switch(my_rank) + { + case 0: return std::vector{1,0,0,0,0,0}; + case 1: return std::vector{0,0,0,0,1,0}; + case 2: return std::vector{0,0,0,0,0,1}; + case 3: return std::vector{1,0,0,0,0,0}; + case 4: return std::vector{0,1,0,0,0,0}; + case 5: return std::vector{0,0,0,0,0,1}; + } + }; + auto init_matrix_I4411 = [&]() + { + switch(my_rank) + { + case 0: return std::vector{1,0,0,1}; + case 1: return std::vector{0,0,0,0}; + case 2: return std::vector{0,0,0,0}; + case 3: return std::vector{1,0,0,1}; + } + }; + auto init_matrix_I4422 = [&]() + { + switch(my_rank) + { + case 0: return std::vector{1,0,0,1}; + case 1: return std::vector{0,0,0,0}; + case 2: return std::vector{0,0,0,0}; + case 3: return std::vector{1,0,0,1}; + } + }; + auto init_matrix_I5522 = [&]() + { + switch(my_rank) + { + case 0: return std::vector{1,0,0,0,1,0,0,0,1}; + case 1: return std::vector{0,0,0,0,0,0}; + case 2: return std::vector{0,0,0,0,0,0}; + case 3: return std::vector{1,0,0,1}; + } + }; + auto init_matrix_I5511_32 = [&]() + { + switch(my_rank) + { + case 0: return std::vector{1,0,0,0,0}; + case 1: return std::vector{0,0,0,1}; + case 2: return std::vector{0,0,0,0,0,1}; + case 3: return std::vector{1,0,0,0}; + case 4: return std::vector{0,1,0}; + case 5: return std::vector{0,0}; + } + }; + auto init_matrix_I5521_32 = [&]() + { + switch(my_rank) + { + case 0: return std::vector{1,0,0,0,0,0}; + case 1: return std::vector{0,0,1,0}; + case 2: return std::vector{0,1,0,0,0,0}; + case 3: return std::vector{0,0,0,1}; + case 4: return std::vector{0,0,1}; + case 5: return std::vector{0,0}; + } + }; + auto init_matrix_I5522_32 = [&]() + { + switch(my_rank) + { + case 0: return std::vector{1,0,0,0,1,0}; + case 1: return std::vector{0,0,0,0}; + case 2: return std::vector{0,0,0,0,0,0}; + case 3: return std::vector{1,0,0,1}; + case 4: return std::vector{0,0,1}; + case 5: return std::vector{0,0}; + } + }; + auto init_matrix_I3321_11 = [&]() + { + switch(my_rank) + { + case 0: return std::vector{1,0,0,0,1,0,0,0,1}; + } + }; + auto init_matrix_I3321_21 = [&]() + { + switch(my_rank) + { + case 0: return std::vector{1,0,0,0,0,1}; + case 1: return std::vector{0,1,0}; + } + }; + auto init_matrix_A5522_32 = [&]() + { + switch(my_rank) + { + case 0: return std::vector{1,2,5,6,7,10}; + case 1: return std::vector{3,4,8,9}; + case 2: return std::vector{11,12,15,16,17,20}; + case 3: return std::vector{13,14,18,19}; + case 4: return std::vector{21,22,25}; + case 5: return std::vector{23,24}; + } + }; + */ + auto init_matrix_I3311_32 = [&]() { + switch (my_rank) + { + case 0: + return std::vector{1, 0}; + case 1: + return std::vector{0}; + case 2: + return std::vector{0, 0}; + case 3: + return std::vector{1}; + case 4: + return std::vector{0, 1}; + case 5: + return std::vector{0}; + } + }; + auto init_matrix_I5511_32 = [&]() { + switch (my_rank) + { + case 0: + return std::vector{1, 0, 0, 0, 0, 0}; + case 1: + return std::vector{0, 0, 0, 1}; + case 2: + return std::vector{0, 0, 0, 0, 0, 1}; + case 3: + return std::vector{1, 0, 0, 0}; + case 4: + return std::vector{0, 1, 0}; + case 5: + return std::vector{0, 0}; + } + }; + auto init_matrix_I5521_32 = [&]() { + switch (my_rank) + { + case 0: + return std::vector{1, 0, 0, 0, 0, 0}; + case 1: + return std::vector{0, 1, 0, 0}; + case 2: + return std::vector{0, 0, 1, 0, 0, 0}; + case 3: + return std::vector{0, 0, 0, 1}; + case 4: + return std::vector{0, 0, 1}; + case 5: + return std::vector{0, 0}; + } + }; + auto init_matrix_I5522_32 = [&]() { + switch (my_rank) + { + case 0: + return std::vector{1, 0, 0, 1, 0, 0}; + case 1: + return std::vector{0, 0, 0, 0}; + case 2: + return std::vector{0, 0, 0, 0, 0, 0}; + case 3: + return std::vector{1, 0, 0, 1}; + case 4: + return std::vector{0, 0, 1}; + case 5: + return std::vector{0, 0}; + } + }; + auto init_matrix_A5321_32 = [&]() { + switch (my_rank) + { + case 0: + return std::vector{1, 6, 3, 8}; + case 1: + return std::vector{2, 7}; + case 2: + return std::vector{11, 16, 13, 18}; + case 3: + return std::vector{12, 17}; + case 4: + return std::vector{21, 23}; + case 5: + return std::vector{22}; + } + }; + auto init_matrix_A5521_32 = [&]() { + switch (my_rank) + { + case 0: + return std::vector{1, 6, 3, 8, 5, 10}; + case 1: + return std::vector{2, 7, 4, 9}; + case 2: + return std::vector{11, 16, 13, 18, 15, 20}; + case 3: + return std::vector{12, 17, 14, 19}; + case 4: + return std::vector{21, 23, 25}; + case 5: + return std::vector{22, 24}; + } + }; + auto init_matrix_A5522_32 = [&]() { + switch (my_rank) + { + case 0: + return std::vector{1, 6, 2, 7, 5, 10}; + case 1: + return std::vector{3, 8, 4, 9}; + case 2: + return std::vector{11, 16, 12, 17, 15, 20}; + case 3: + return std::vector{13, 18, 14, 19}; + case 4: + return std::vector{21, 22, 25}; + case 5: + return std::vector{23, 24}; + } + }; + + std::vector mA5321_32 = init_matrix_A5321_32(); + std::vector mA5522_32 = init_matrix_A5522_32(); + std::vector mI3311_32 = init_matrix_I3311_32(); + std::vector mI5511_32 = init_matrix_I5511_32(); + std::vector mI5521_32 = init_matrix_I5521_32(); + std::vector mC(100); + ScalapackConnector::pgemm('T', + 'N', + 3, + 5, + 5, + 1, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(mA5321_32), + 1, + 1, + desc_5321_32, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(mI5511_32), + 1, + 1, + desc_5511_32, + 0, + ModuleBase::GlobalFunc::VECTOR_TO_PTR(mC), + 1, + 1, + desc_5522_32); + + auto check_matrix = [&](const std::vector& v1, const std::vector& v2) { + const size_t len = min(v1.size(), v2.size()); + for (int i = 0; i < len; ++i) + if (v1[i] != v2[i]) + std::cout << my_rank << std::endl; + }; + check_matrix(mA5522_32, mC); + ofs_matrix(mC); + + MPI_Finalize(); } diff --git a/source/module_base/CMakeLists.txt b/source/source_base/CMakeLists.txt similarity index 100% rename from source/module_base/CMakeLists.txt rename to source/source_base/CMakeLists.txt diff --git a/source/module_base/abfs-vector3_order.cpp b/source/source_base/abfs-vector3_order.cpp similarity index 100% rename from source/module_base/abfs-vector3_order.cpp rename to source/source_base/abfs-vector3_order.cpp diff --git a/source/module_base/abfs-vector3_order.h b/source/source_base/abfs-vector3_order.h similarity index 100% rename from source/module_base/abfs-vector3_order.h rename to source/source_base/abfs-vector3_order.h diff --git a/source/module_base/array_pool.h b/source/source_base/array_pool.h similarity index 100% rename from source/module_base/array_pool.h rename to source/source_base/array_pool.h diff --git a/source/source_base/assoc_laguerre.cpp b/source/source_base/assoc_laguerre.cpp new file mode 100644 index 0000000000..8aff8e7243 --- /dev/null +++ b/source/source_base/assoc_laguerre.cpp @@ -0,0 +1,137 @@ +#include "source_base/assoc_laguerre.h" + +#include "source_base/global_function.h" +//#include // use cmath the factorial function +#include +Assoc_Laguerre::Assoc_Laguerre() +{ +} + +Assoc_Laguerre::~Assoc_Laguerre() +{ +} + +void Assoc_Laguerre::generate(const int& n, const int& l, const double ns, double* const& s, double* L) +{ + for (int i = 0; i < ns; i++) + { + L[i] = this->value(n, l, s[i]); + } +} + +void Assoc_Laguerre::generate(const int& n, const int& l, std::vector& x, std::vector& y) +{ + for (int i = 0; i < x.size(); i++) + { + y[i] = this->value(n, l, x[i]); + } +} + +double Assoc_Laguerre::laguerre(const int& n, const double x) +{ + if (n == 0) + { + return 1; + } + else if (n == 1) + { + return -x + 1; + } + else if (n == 2) + { + return 0.5 * x * x - 2 * x + 1; + } + else if (n == 3) + { + return -x * x * x / 6.0 + 3.0 * x * x / 2.0 - 3.0 * x + 1; + } + else if (n >= 4) + { + double n_ = static_cast(n); + double first = (2 * n_ - 1 - x) / n_ * Assoc_Laguerre::laguerre(n - 1, x); + double second = (n_ - 1) / n_ * Assoc_Laguerre::laguerre(n - 2, x); + return first - second; + } + else + { + ModuleBase::WARNING_QUIT("Assoc_Laguerre::laguerre", "n is out of range"); + return 0; + } +} + +double Assoc_Laguerre::associate_laguerre(const int& n, const double x, const int& a) +{ + // formula from https://en.wikipedia.org/wiki/Laguerre_polynomials + double n_ = static_cast(n); + double a_ = static_cast(a); + if (n == 0) + { + return 1; + } + else if (n == 1) + { + return -x + 1 + a_; + } + else if (n == 2) + { + return 0.5 * (x * x - 2 * (a_ + 2) * x + (a_ + 1) * (a_ + 2)); + } + else if (n == 3) + { + return -x * x * x / 6.0 + (a_ + 3) * x * x / 2.0 - (a_ + 2) * (a_ + 3) * x / 2.0 + + (a_ + 1) * (a_ + 2) * (a_ + 3) / 6.0; + } + else if (n >= 4) + { + double first = (2 * n_ - 1 + a_ - x) / n_ * this->associate_laguerre(n - 1, x, a); + double second = (n_ + a_ - 1) / n_ * this->associate_laguerre(n - 2, x, a); + return first - second; + } + else + { + ModuleBase::WARNING_QUIT("Assoc_Laguerre::associate_laguerre", "n is out of range"); + return 0; + } +} + +int Assoc_Laguerre::factorial(const int& n) +{ + if (n == 0) + { + return 1; + } + else if (n > 0) + { + return n * this->factorial(n - 1); + } + else + { + ModuleBase::WARNING_QUIT("Assoc_Laguerre::factorial", "n is out of range"); + return 0; + } +} + +double Assoc_Laguerre::value(const int& n, const int& l, const double& s) +{ + int k_ = 2 * l + 1; + int n_ = n - l - 1; + if (k_ < 0) + { + ModuleBase::WARNING_QUIT("Assoc_Laguerre::value", "k is out of range"); + return 0; + } + if (n_ < 0) + { + ModuleBase::WARNING_QUIT("Assoc_Laguerre::value", "n is out of range"); + return 0; + } + double L = 0; + for (int iq = 0; iq <= n_; iq++) + { + L += std::pow(-s, iq) * static_cast(this->factorial(n_ + k_)) + / static_cast(this->factorial(n_ - iq)) / static_cast(this->factorial(k_ + iq)) + / static_cast(this->factorial(iq)); + } + // L = std::tr1::assoc_laguerre(n_, k_, s); // use standard library + return L; +} \ No newline at end of file diff --git a/source/module_base/assoc_laguerre.h b/source/source_base/assoc_laguerre.h similarity index 100% rename from source/module_base/assoc_laguerre.h rename to source/source_base/assoc_laguerre.h diff --git a/source/module_base/atom_in.h b/source/source_base/atom_in.h similarity index 100% rename from source/module_base/atom_in.h rename to source/source_base/atom_in.h diff --git a/source/module_base/blacs_connector.h b/source/source_base/blacs_connector.h similarity index 100% rename from source/module_base/blacs_connector.h rename to source/source_base/blacs_connector.h diff --git a/source/source_base/blas_connector.h b/source/source_base/blas_connector.h new file mode 100644 index 0000000000..ec744fcc79 --- /dev/null +++ b/source/source_base/blas_connector.h @@ -0,0 +1,901 @@ +#ifndef BLAS_CONNECTOR_H +#define BLAS_CONNECTOR_H + +#include "macros.h" +#include "source_base/module_device/types.h" + +#include + +// These still need to be linked in the header file +// Because quite a lot of code will directly use the original cblas kernels. + +extern "C" +{ + // level 1: std::vector-std::vector operations, O(n) data and O(n) work. + + // Peize Lin add ?scal 2016-08-04, to compute x=a*x + void sscal_(const int* N, const float* alpha, float* X, const int* incX); + void dscal_(const int* N, const double* alpha, double* X, const int* incX); + void cscal_(const int* N, const std::complex* alpha, std::complex* X, const int* incX); + void zscal_(const int* N, const std::complex* alpha, std::complex* X, const int* incX); + + // Peize Lin add ?axpy 2016-08-04, to compute y=a*x+y + void saxpy_(const int* N, const float* alpha, const float* X, const int* incX, float* Y, const int* incY); + void daxpy_(const int* N, const double* alpha, const double* X, const int* incX, double* Y, const int* incY); + void caxpy_(const int* N, + const std::complex* alpha, + const std::complex* X, + const int* incX, + std::complex* Y, + const int* incY); + void zaxpy_(const int* N, + const std::complex* alpha, + const std::complex* X, + const int* incX, + std::complex* Y, + const int* incY); + + void dcopy_(long const* n, const double* a, int const* incx, double* b, int const* incy); + void zcopy_(long const* n, + const std::complex* a, + int const* incx, + std::complex* b, + int const* incy); + + // reason for passing results as argument instead of returning it: + // see https://www.numbercrunch.de/blog/2014/07/lost-in-translation/ + // void zdotc_(std::complex *result, const int *n, const std::complex *zx, + // const int *incx, const std::complex *zy, const int *incy); + // Peize Lin add ?dot 2017-10-27, to compute d=x*y + float sdot_(const int* N, const float* X, const int* incX, const float* Y, const int* incY); + double ddot_(const int* N, const double* X, const int* incX, const double* Y, const int* incY); + + // Peize Lin add ?nrm2 2018-06-12, to compute out = ||x||_2 = \sqrt{ \sum_i x_i**2 } + float snrm2_(const int* n, const float* X, const int* incX); + double dnrm2_(const int* n, const double* X, const int* incX); + double dznrm2_(const int* n, const std::complex* X, const int* incX); + + // symmetric rank-k update + void dsyrk_(const char* uplo, + const char* trans, + const int* n, + const int* k, + const double* alpha, + const double* a, + const int* lda, + const double* beta, + double* c, + const int* ldc); + + // level 2: matrix-std::vector operations, O(n^2) data and O(n^2) work. + void sgemv_(const char* const transa, + const int* const m, + const int* const n, + const float* const alpha, + const float* const a, + const int* const lda, + const float* const x, + const int* const incx, + const float* const beta, + float* const y, + const int* const incy); + void dgemv_(const char* const transa, + const int* const m, + const int* const n, + const double* const alpha, + const double* const a, + const int* const lda, + const double* const x, + const int* const incx, + const double* const beta, + double* const y, + const int* const incy); + + void cgemv_(const char* trans, + const int* m, + const int* n, + const std::complex* alpha, + const std::complex* a, + const int* lda, + const std::complex* x, + const int* incx, + const std::complex* beta, + std::complex* y, + const int* incy); + + void zgemv_(const char* trans, + const int* m, + const int* n, + const std::complex* alpha, + const std::complex* a, + const int* lda, + const std::complex* x, + const int* incx, + const std::complex* beta, + std::complex* y, + const int* incy); + + void dsymv_(const char* uplo, + const int* n, + const double* alpha, + const double* a, + const int* lda, + const double* x, + const int* incx, + const double* beta, + double* y, + const int* incy); + + // A := alpha x * y.T + A + void dger_(const int* m, + const int* n, + const double* alpha, + const double* x, + const int* incx, + const double* y, + const int* incy, + double* a, + const int* lda); + void zgerc_(const int* m, + const int* n, + const std::complex* alpha, + const std::complex* x, + const int* incx, + const std::complex* y, + const int* incy, + std::complex* a, + const int* lda); + + // level 3: matrix-matrix operations, O(n^2) data and O(n^3) work. + + // Peize Lin add ?gemm 2017-10-27, to compute C = a * A.? * B.? + b * C + // A is general + void sgemm_(const char* transa, + const char* transb, + const int* m, + const int* n, + const int* k, + const float* alpha, + const float* a, + const int* lda, + const float* b, + const int* ldb, + const float* beta, + float* c, + const int* ldc); + void dgemm_(const char* transa, + const char* transb, + const int* m, + const int* n, + const int* k, + const double* alpha, + const double* a, + const int* lda, + const double* b, + const int* ldb, + const double* beta, + double* c, + const int* ldc); + void cgemm_(const char* transa, + const char* transb, + const int* m, + const int* n, + const int* k, + const std::complex* alpha, + const std::complex* a, + const int* lda, + const std::complex* b, + const int* ldb, + const std::complex* beta, + std::complex* c, + const int* ldc); + void zgemm_(const char* transa, + const char* transb, + const int* m, + const int* n, + const int* k, + const std::complex* alpha, + const std::complex* a, + const int* lda, + const std::complex* b, + const int* ldb, + const std::complex* beta, + std::complex* c, + const int* ldc); + + // A is symmetric. C = a * A.? * B.? + b * C + void ssymm_(const char* side, + const char* uplo, + const int* m, + const int* n, + const float* alpha, + const float* a, + const int* lda, + const float* b, + const int* ldb, + const float* beta, + float* c, + const int* ldc); + void dsymm_(const char* side, + const char* uplo, + const int* m, + const int* n, + const double* alpha, + const double* a, + const int* lda, + const double* b, + const int* ldb, + const double* beta, + double* c, + const int* ldc); + void csymm_(const char* side, + const char* uplo, + const int* m, + const int* n, + const std::complex* alpha, + const std::complex* a, + const int* lda, + const std::complex* b, + const int* ldb, + const std::complex* beta, + std::complex* c, + const int* ldc); + void zsymm_(const char* side, + const char* uplo, + const int* m, + const int* n, + const std::complex* alpha, + const std::complex* a, + const int* lda, + const std::complex* b, + const int* ldb, + const std::complex* beta, + std::complex* c, + const int* ldc); + + // A is hermitian. C = a * A.? * B.? + b * C + void chemm_(char* side, + char* uplo, + int* m, + int* n, + std::complex* alpha, + std::complex* a, + int* lda, + std::complex* b, + int* ldb, + std::complex* beta, + std::complex* c, + int* ldc); + void zhemm_(char* side, + char* uplo, + int* m, + int* n, + std::complex* alpha, + std::complex* a, + int* lda, + std::complex* b, + int* ldb, + std::complex* beta, + std::complex* c, + int* ldc); + + // solving triangular matrix with multiple right hand sides + void dtrsm_(char* side, + char* uplo, + char* transa, + char* diag, + int* m, + int* n, + double* alpha, + double* a, + int* lda, + double* b, + int* ldb); + void ztrsm_(char* side, + char* uplo, + char* transa, + char* diag, + int* m, + int* n, + std::complex* alpha, + std::complex* a, + int* lda, + std::complex* b, + int* ldb); +} + +// Class BlasConnector provide the connector to fortran lapack routine. +// The entire function in this class are static and inline function. +// Usage example: BlasConnector::functionname(parameter list). +class BlasConnector +{ + public: + // Peize Lin add 2016-08-04 + // y=a*x+y + static void axpy(const int n, + const float alpha, + const float* X, + const int incX, + float* Y, + const int incY, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void axpy(const int n, + const double alpha, + const double* X, + const int incX, + double* Y, + const int incY, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void axpy(const int n, + const std::complex alpha, + const std::complex* X, + const int incX, + std::complex* Y, + const int incY, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void axpy(const int n, + const std::complex alpha, + const std::complex* X, + const int incX, + std::complex* Y, + const int incY, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + // Peize Lin add 2016-08-04 + // x=a*x + static void scal(const int n, + const float alpha, + float* X, + const int incX, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void scal(const int n, + const double alpha, + double* X, + const int incX, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void scal(const int n, + const std::complex alpha, + std::complex* X, + const int incX, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void scal(const int n, + const std::complex alpha, + std::complex* X, + const int incX, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + // Peize Lin add 2017-10-27 + // d=x*y + static float dot(const int n, + const float* const X, + const int incX, + const float* const Y, + const int incY, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static double dot(const int n, + const double* const X, + const int incX, + const double* const Y, + const int incY, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + // d=x*y + static float dotu(const int n, + const float* const X, + const int incX, + const float* const Y, + const int incY, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static double dotu(const int n, + const double* const X, + const int incX, + const double* const Y, + const int incY, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static std::complex dotu(const int n, + const std::complex* const X, + const int incX, + const std::complex* const Y, + const int incY, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static std::complex dotu(const int n, + const std::complex* const X, + const int incX, + const std::complex* const Y, + const int incY, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + // d=x.conj()*y + static float dotc(const int n, + const float* const X, + const int incX, + const float* const Y, + const int incY, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static double dotc(const int n, + const double* const X, + const int incX, + const double* const Y, + const int incY, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static std::complex dotc(const int n, + const std::complex* const X, + const int incX, + const std::complex* const Y, + const int incY, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static std::complex dotc(const int n, + const std::complex* const X, + const int incX, + const std::complex* const Y, + const int incY, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + // Peize Lin add 2017-10-27, fix bug trans 2019-01-17 + // C = a * A.? * B.? + b * C + // Row Major by default + static void gemm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const float alpha, + const float* a, + const int lda, + const float* b, + const int ldb, + const float beta, + float* c, + const int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void gemm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const double alpha, + const double* a, + const int lda, + const double* b, + const int ldb, + const double beta, + double* c, + const int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void gemm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const std::complex alpha, + const std::complex* a, + const int lda, + const std::complex* b, + const int ldb, + const std::complex beta, + std::complex* c, + const int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void gemm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const std::complex alpha, + const std::complex* a, + const int lda, + const std::complex* b, + const int ldb, + const std::complex beta, + std::complex* c, + const int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + // Col-Major if you need to use it + + static void gemm_cm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const float alpha, + const float* a, + const int lda, + const float* b, + const int ldb, + const float beta, + float* c, + const int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void gemm_cm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const double alpha, + const double* a, + const int lda, + const double* b, + const int ldb, + const double beta, + double* c, + const int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void gemm_cm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const std::complex alpha, + const std::complex* a, + const int lda, + const std::complex* b, + const int ldb, + const std::complex beta, + std::complex* c, + const int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void gemm_cm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const std::complex alpha, + const std::complex* a, + const int lda, + const std::complex* b, + const int ldb, + const std::complex beta, + std::complex* c, + const int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + // side=='L': C = a * A * B + b * C. + // side=='R': C = a * B * A + b * C. + // A == A^T + // Because you cannot pack symm or hemm into a row-major kernel by exchanging parameters, so only col-major + // functions are provided. + static void symm_cm(const char side, + const char uplo, + const int m, + const int n, + const float alpha, + const float* a, + const int lda, + const float* b, + const int ldb, + const float beta, + float* c, + const int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void symm_cm(const char side, + const char uplo, + const int m, + const int n, + const double alpha, + const double* a, + const int lda, + const double* b, + const int ldb, + const double beta, + double* c, + const int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void symm_cm(const char side, + const char uplo, + const int m, + const int n, + const std::complex alpha, + const std::complex* a, + const int lda, + const std::complex* b, + const int ldb, + const std::complex beta, + std::complex* c, + const int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void symm_cm(const char side, + const char uplo, + const int m, + const int n, + const std::complex alpha, + const std::complex* a, + const int lda, + const std::complex* b, + const int ldb, + const std::complex beta, + std::complex* c, + const int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + // side=='L': C = a * A * B + b * C. + // side=='R': C = a * B * A + b * C. + // A == A^H + static void hemm_cm(const char side, + const char uplo, + const int m, + const int n, + const float alpha, + const float* a, + const int lda, + const float* b, + const int ldb, + const float beta, + float* c, + const int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void hemm_cm(const char side, + const char uplo, + const int m, + const int n, + const double alpha, + const double* a, + const int lda, + const double* b, + const int ldb, + const double beta, + double* c, + const int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void hemm_cm(char side, + char uplo, + int m, + int n, + std::complex alpha, + std::complex* a, + int lda, + std::complex* b, + int ldb, + std::complex beta, + std::complex* c, + int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void hemm_cm(char side, + char uplo, + int m, + int n, + std::complex alpha, + std::complex* a, + int lda, + std::complex* b, + int ldb, + std::complex beta, + std::complex* c, + int ldc, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + // y = A*x + beta*y + static void gemv(const char trans, + const int m, + const int n, + const float alpha, + const float* A, + const int lda, + const float* X, + const int incx, + const float beta, + float* Y, + const int incy, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void gemv(const char trans, + const int m, + const int n, + const double alpha, + const double* A, + const int lda, + const double* X, + const int incx, + const double beta, + double* Y, + const int incy, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void gemv(const char trans, + const int m, + const int n, + const std::complex alpha, + const std::complex* A, + const int lda, + const std::complex* X, + const int incx, + const std::complex beta, + std::complex* Y, + const int incy, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void gemv(const char trans, + const int m, + const int n, + const std::complex alpha, + const std::complex* A, + const int lda, + const std::complex* X, + const int incx, + const std::complex beta, + std::complex* Y, + const int incy, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + // Peize Lin add 2018-06-12 + // out = ||x||_2 + static float nrm2(const int n, + const float* X, + const int, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static double nrm2(const int n, + const double* X, + const int incX, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static double nrm2(const int n, + const std::complex* X, + const int incX, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + // copies a into b + static void copy(const long n, + const double* a, + const int incx, + double* b, + const int incy, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void copy(const long n, + const std::complex* a, + const int incx, + std::complex* b, + const int incy, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + // There is some other operators needed, so implemented manually here + template + static void vector_mul_vector(const int& dim, + T* result, + const T* vector1, + const T* vector2, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + template + static void vector_div_vector(const int& dim, + T* result, + const T* vector1, + const T* vector2, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + // y = alpha * x + beta * y + static void vector_add_vector(const int& dim, + float* result, + const float* vector1, + const float constant1, + const float* vector2, + const float constant2, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void vector_add_vector(const int& dim, + double* result, + const double* vector1, + const double constant1, + const double* vector2, + const double constant2, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void vector_add_vector(const int& dim, + std::complex* result, + const std::complex* vector1, + const float constant1, + const std::complex* vector2, + const float constant2, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); + + static void vector_add_vector(const int& dim, + std::complex* result, + const std::complex* vector1, + const double constant1, + const std::complex* vector2, + const double constant2, + base_device::AbacusDevice_t device_type = base_device::AbacusDevice_t::CpuDevice); +}; + +#ifdef __CUDA + +#include "cublas_v2.h" + +#include + +// If you want to use cublas, you need these functions to create and destroy the cublas/hipblas handle. +// You also need to use these functions to translate the transpose parameter into cublas/hipblas datatype. + +namespace BlasUtils +{ + +static cublasHandle_t cublas_handle = nullptr; + +void createGpuBlasHandle(); // Create a cublas/hipblas handle. + +void destoryBLAShandle(); // Destroy the cublas/hipblas handle. Do this when the software is about to end. + +cublasOperation_t judge_trans(bool is_complex, + const char& trans, + const char* name); // Translate a normal transpose parameter to a cublas/hipblas type. + +cublasSideMode_t judge_side(const char& trans); // Translate a normal side parameter to a cublas/hipblas type. + +cublasFillMode_t judge_fill(const char& trans); // Translate a normal fill parameter to a cublas/hipblas type. + +} // namespace BlasUtils + +#endif + +// If GATHER_INFO is defined, the original function is replaced with a "i" suffix, +// preventing changes on the original code. +// The real function call is at gather_math_lib_info.cpp +#ifdef GATHER_INFO + +#define zgemm_ zgemm_i +void zgemm_i(const char* transa, + const char* transb, + const int* m, + const int* n, + const int* k, + const std::complex* alpha, + const std::complex* a, + const int* lda, + const std::complex* b, + const int* ldb, + const std::complex* beta, + std::complex* c, + const int* ldc); + +#define zaxpy_ zaxpy_i +void zaxpy_i(const int* N, + const std::complex* alpha, + const std::complex* X, + const int* incX, + std::complex* Y, + const int* incY); + +/* +#define zgemv_ zgemv_i + +void zgemv_i(const char *trans, + const int *m, + const int *n, + const std::complex *alpha, + const std::complex *a, + const int *lda, + const std::complex *x, + const int *incx, + const std::complex *beta, + std::complex *y, + const int *incy); +*/ + +#endif // GATHER_INFO +#endif // BLAS_CONNECTOR_H diff --git a/source/source_base/blas_connector_base.cpp b/source/source_base/blas_connector_base.cpp new file mode 100644 index 0000000000..e48afa2a35 --- /dev/null +++ b/source/source_base/blas_connector_base.cpp @@ -0,0 +1,81 @@ +#include "blas_connector.h" +#include "macros.h" + +#ifdef __CUDA +#include "cublas_v2.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/memory_op.h" + +#include +#include + +namespace BlasUtils +{ + +void createGpuBlasHandle() +{ + if (cublas_handle == nullptr) + { + cublasErrcheck(cublasCreate(&cublas_handle)); + } +} + +void destoryBLAShandle() +{ + if (cublas_handle != nullptr) + { + cublasErrcheck(cublasDestroy(cublas_handle)); + cublas_handle = nullptr; + } +} + +cublasOperation_t judge_trans(bool is_complex, const char& trans, const char* name) +{ + if (trans == 'N') + { + return CUBLAS_OP_N; + } + else if (trans == 'T') + { + return CUBLAS_OP_T; + } + else if (is_complex && trans == 'C') + { + return CUBLAS_OP_C; + } + return CUBLAS_OP_N; +} + +cublasSideMode_t judge_side(const char& trans) +{ + if (trans == 'L') + { + return CUBLAS_SIDE_LEFT; + } + else if (trans == 'R') + { + return CUBLAS_SIDE_RIGHT; + } + return CUBLAS_SIDE_LEFT; +} + +cublasFillMode_t judge_fill(const char& trans) +{ + if (trans == 'F') + { + return CUBLAS_FILL_MODE_FULL; + } + else if (trans == 'U') + { + return CUBLAS_FILL_MODE_UPPER; + } + else if (trans == 'D') + { + return CUBLAS_FILL_MODE_LOWER; + } + return CUBLAS_FILL_MODE_FULL; +} + +} // namespace BlasUtils + +#endif \ No newline at end of file diff --git a/source/source_base/blas_connector_matrix.cpp b/source/source_base/blas_connector_matrix.cpp new file mode 100644 index 0000000000..67ae3309f1 --- /dev/null +++ b/source/source_base/blas_connector_matrix.cpp @@ -0,0 +1,829 @@ +#include "blas_connector.h" +#include "macros.h" + +#ifdef __DSP +#include "source_base/global_variable.h" +#include "source_base/kernels/dsp/dsp_connector.h" +#endif + +#ifdef __CUDA +#include "cublas_v2.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/memory_op.h" + +#include +#include +#endif + +// C = a * A.? * B.? + b * C +// Row-Major part +void BlasConnector::gemm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const float alpha, + const float* a, + const int lda, + const float* b, + const int ldb, + const float beta, + float* c, + const int ldc, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + sgemm_(&transb, &transa, &n, &m, &k, &alpha, b, &ldb, a, &lda, &beta, c, &ldc); + } +#ifdef __DSP + else if (device_type == base_device::AbacusDevice_t::DspDevice) + { + mtfunc::sgemm_mth_(&transb, &transa, &n, &m, &k, &alpha, b, &ldb, a, &lda, &beta, c, &ldc, GlobalV::MY_RANK); + } +#endif +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); + cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); + cublasErrcheck( + cublasSgemm(BlasUtils::cublas_handle, cutransA, cutransB, n, m, k, &alpha, b, ldb, a, lda, &beta, c, ldc)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::gemm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const double alpha, + const double* a, + const int lda, + const double* b, + const int ldb, + const double beta, + double* c, + const int ldc, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + dgemm_(&transb, &transa, &n, &m, &k, &alpha, b, &ldb, a, &lda, &beta, c, &ldc); + } +#ifdef __DSP + else if (device_type == base_device::AbacusDevice_t::DspDevice) + { + mtfunc::dgemm_mth_(&transb, &transa, &n, &m, &k, &alpha, b, &ldb, a, &lda, &beta, c, &ldc, GlobalV::MY_RANK); + } +#endif + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { +#ifdef __CUDA + cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); + cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); + cublasErrcheck( + cublasDgemm(BlasUtils::cublas_handle, cutransA, cutransB, n, m, k, &alpha, b, ldb, a, lda, &beta, c, ldc)); +#endif + } + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::gemm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const std::complex alpha, + const std::complex* a, + const int lda, + const std::complex* b, + const int ldb, + const std::complex beta, + std::complex* c, + const int ldc, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + cgemm_(&transb, &transa, &n, &m, &k, &alpha, b, &ldb, a, &lda, &beta, c, &ldc); + } +#ifdef __DSP + else if (device_type == base_device::AbacusDevice_t::DspDevice) + { + mtfunc::cgemm_mth_(&transb, &transa, &n, &m, &k, &alpha, b, &ldb, a, &lda, &beta, c, &ldc, GlobalV::MY_RANK); + } +#endif + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { +#ifdef __CUDA + cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); + cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); + cublasErrcheck(cublasCgemm(BlasUtils::cublas_handle, + cutransA, + cutransB, + n, + m, + k, + (float2*)&alpha, + (float2*)b, + ldb, + (float2*)a, + lda, + (float2*)&beta, + (float2*)c, + ldc)); +#endif + } + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::gemm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const std::complex alpha, + const std::complex* a, + const int lda, + const std::complex* b, + const int ldb, + const std::complex beta, + std::complex* c, + const int ldc, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + zgemm_(&transb, &transa, &n, &m, &k, &alpha, b, &ldb, a, &lda, &beta, c, &ldc); + } +#ifdef __DSP + else if (device_type == base_device::AbacusDevice_t::DspDevice) + { + mtfunc::zgemm_mth_(&transb, &transa, &n, &m, &k, &alpha, b, &ldb, a, &lda, &beta, c, &ldc, GlobalV::MY_RANK); + } +#endif + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { +#ifdef __CUDA + cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); + cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); + cublasErrcheck(cublasZgemm(BlasUtils::cublas_handle, + cutransA, + cutransB, + n, + m, + k, + (double2*)&alpha, + (double2*)b, + ldb, + (double2*)a, + lda, + (double2*)&beta, + (double2*)c, + ldc)); +#endif + } + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +// Col-Major part +void BlasConnector::gemm_cm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const float alpha, + const float* a, + const int lda, + const float* b, + const int ldb, + const float beta, + float* c, + const int ldc, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + sgemm_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); + } +#ifdef __DSP + else if (device_type == base_device::AbacusDevice_t::DspDevice) + { + mtfunc::sgemm_mth_(&transb, &transa, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc, GlobalV::MY_RANK); + } +#endif +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); + cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); + cublasErrcheck( + cublasSgemm(BlasUtils::cublas_handle, cutransA, cutransB, m, n, k, &alpha, a, lda, b, ldb, &beta, c, ldc)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::gemm_cm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const double alpha, + const double* a, + const int lda, + const double* b, + const int ldb, + const double beta, + double* c, + const int ldc, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + dgemm_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); + } +#ifdef __DSP + else if (device_type == base_device::AbacusDevice_t::DspDevice) + { + mtfunc::dgemm_mth_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc, GlobalV::MY_RANK); + } +#endif +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); + cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); + cublasErrcheck( + cublasDgemm(BlasUtils::cublas_handle, cutransA, cutransB, m, n, k, &alpha, a, lda, b, ldb, &beta, c, ldc)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::gemm_cm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const std::complex alpha, + const std::complex* a, + const int lda, + const std::complex* b, + const int ldb, + const std::complex beta, + std::complex* c, + const int ldc, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + cgemm_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); + } +#ifdef __DSP + else if (device_type == base_device::AbacusDevice_t::DspDevice) + { + mtfunc::cgemm_mth_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc, GlobalV::MY_RANK); + } +#endif +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); + cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); + cublasErrcheck(cublasCgemm(BlasUtils::cublas_handle, + cutransA, + cutransB, + m, + n, + k, + (float2*)&alpha, + (float2*)a, + lda, + (float2*)b, + ldb, + (float2*)&beta, + (float2*)c, + ldc)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::gemm_cm(const char transa, + const char transb, + const int m, + const int n, + const int k, + const std::complex alpha, + const std::complex* a, + const int lda, + const std::complex* b, + const int ldb, + const std::complex beta, + std::complex* c, + const int ldc, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + zgemm_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); + } +#ifdef __DSP + else if (device_type == base_device::AbacusDevice_t::DspDevice) + { + mtfunc::zgemm_mth_(&transa, &transb, &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc, GlobalV::MY_RANK); + } +#endif +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasOperation_t cutransA = BlasUtils::judge_trans(false, transa, "gemm_op"); + cublasOperation_t cutransB = BlasUtils::judge_trans(false, transb, "gemm_op"); + cublasErrcheck(cublasZgemm(BlasUtils::cublas_handle, + cutransA, + cutransB, + m, + n, + k, + (double2*)&alpha, + (double2*)a, + lda, + (double2*)b, + ldb, + (double2*)&beta, + (double2*)c, + ldc)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +// Symm and Hemm part. Only col-major is supported. + +void BlasConnector::symm_cm(const char side, + const char uplo, + const int m, + const int n, + const float alpha, + const float* a, + const int lda, + const float* b, + const int ldb, + const float beta, + float* c, + const int ldc, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + ssymm_(&side, &uplo, &m, &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasSideMode_t sideMode = BlasUtils::judge_side(side); + cublasFillMode_t fillMode = BlasUtils::judge_fill(uplo); + cublasErrcheck( + cublasSsymm(BlasUtils::cublas_handle, sideMode, fillMode, m, n, &alpha, a, lda, b, ldb, &beta, c, ldc)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::symm_cm(const char side, + const char uplo, + const int m, + const int n, + const double alpha, + const double* a, + const int lda, + const double* b, + const int ldb, + const double beta, + double* c, + const int ldc, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + dsymm_(&side, &uplo, &m, &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasSideMode_t sideMode = BlasUtils::judge_side(side); + cublasFillMode_t fillMode = BlasUtils::judge_fill(uplo); + cublasErrcheck( + cublasDsymm(BlasUtils::cublas_handle, sideMode, fillMode, m, n, &alpha, a, lda, b, ldb, &beta, c, ldc)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::symm_cm(const char side, + const char uplo, + const int m, + const int n, + const std::complex alpha, + const std::complex* a, + const int lda, + const std::complex* b, + const int ldb, + const std::complex beta, + std::complex* c, + const int ldc, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + csymm_(&side, &uplo, &m, &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasSideMode_t sideMode = BlasUtils::judge_side(side); + cublasFillMode_t fillMode = BlasUtils::judge_fill(uplo); + cublasErrcheck(cublasCsymm(BlasUtils::cublas_handle, + sideMode, + fillMode, + m, + n, + (float2*)&alpha, + (float2*)a, + lda, + (float2*)b, + ldb, + (float2*)&beta, + (float2*)c, + ldc)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::symm_cm(const char side, + const char uplo, + const int m, + const int n, + const std::complex alpha, + const std::complex* a, + const int lda, + const std::complex* b, + const int ldb, + const std::complex beta, + std::complex* c, + const int ldc, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + zsymm_(&side, &uplo, &m, &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasSideMode_t sideMode = BlasUtils::judge_side(side); + cublasFillMode_t fillMode = BlasUtils::judge_fill(uplo); + cublasErrcheck(cublasZsymm(BlasUtils::cublas_handle, + sideMode, + fillMode, + m, + n, + (double2*)&alpha, + (double2*)a, + lda, + (double2*)b, + ldb, + (double2*)&beta, + (double2*)c, + ldc)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::hemm_cm(const char side, + const char uplo, + const int m, + const int n, + const float alpha, + const float* a, + const int lda, + const float* b, + const int ldb, + const float beta, + float* c, + const int ldc, + base_device::AbacusDevice_t device_type) +{ + symm_cm(side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc, device_type); +} + +void BlasConnector::hemm_cm(const char side, + const char uplo, + const int m, + const int n, + const double alpha, + const double* a, + const int lda, + const double* b, + const int ldb, + const double beta, + double* c, + const int ldc, + base_device::AbacusDevice_t device_type) +{ + symm_cm(side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc, device_type); +} + +void BlasConnector::hemm_cm(char side, + char uplo, + int m, + int n, + std::complex alpha, + std::complex* a, + int lda, + std::complex* b, + int ldb, + std::complex beta, + std::complex* c, + int ldc, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + chemm_(&side, &uplo, &m, &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasSideMode_t sideMode = BlasUtils::judge_side(side); + cublasFillMode_t fillMode = BlasUtils::judge_fill(uplo); + cublasErrcheck(cublasChemm(BlasUtils::cublas_handle, + sideMode, + fillMode, + m, + n, + (float2*)&alpha, + (float2*)a, + lda, + (float2*)b, + ldb, + (float2*)&beta, + (float2*)c, + ldc)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::hemm_cm(char side, + char uplo, + int m, + int n, + std::complex alpha, + std::complex* a, + int lda, + std::complex* b, + int ldb, + std::complex beta, + std::complex* c, + int ldc, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + zhemm_(&side, &uplo, &m, &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasSideMode_t sideMode = BlasUtils::judge_side(side); + cublasFillMode_t fillMode = BlasUtils::judge_fill(uplo); + cublasErrcheck(cublasZhemm(BlasUtils::cublas_handle, + sideMode, + fillMode, + m, + n, + (double2*)&alpha, + (double2*)a, + lda, + (double2*)b, + ldb, + (double2*)&beta, + (double2*)c, + ldc)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::gemv(const char trans, + const int m, + const int n, + const float alpha, + const float* A, + const int lda, + const float* X, + const int incx, + const float beta, + float* Y, + const int incy, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + sgemv_(&trans, &m, &n, &alpha, A, &lda, X, &incx, &beta, Y, &incy); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasOperation_t cutransA = BlasUtils::judge_trans(false, trans, "gemv_op"); + cublasErrcheck(cublasSgemv(BlasUtils::cublas_handle, cutransA, m, n, &alpha, A, lda, X, incx, &beta, Y, incy)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::gemv(const char trans, + const int m, + const int n, + const double alpha, + const double* A, + const int lda, + const double* X, + const int incx, + const double beta, + double* Y, + const int incy, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + dgemv_(&trans, &m, &n, &alpha, A, &lda, X, &incx, &beta, Y, &incy); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasOperation_t cutransA = BlasUtils::judge_trans(false, trans, "gemv_op"); + cublasErrcheck(cublasDgemv(BlasUtils::cublas_handle, cutransA, m, n, &alpha, A, lda, X, incx, &beta, Y, incy)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::gemv(const char trans, + const int m, + const int n, + const std::complex alpha, + const std::complex* A, + const int lda, + const std::complex* X, + const int incx, + const std::complex beta, + std::complex* Y, + const int incy, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + cgemv_(&trans, &m, &n, &alpha, A, &lda, X, &incx, &beta, Y, &incy); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cuFloatComplex alpha_cu = make_cuFloatComplex(alpha.real(), alpha.imag()); + cuFloatComplex beta_cu = make_cuFloatComplex(beta.real(), beta.imag()); + cublasOperation_t cutransA = BlasUtils::judge_trans(true, trans, "gemv_op"); + cublasErrcheck(cublasCgemv(BlasUtils::cublas_handle, + cutransA, + m, + n, + &alpha_cu, + (cuFloatComplex*)A, + lda, + (cuFloatComplex*)X, + incx, + &beta_cu, + (cuFloatComplex*)Y, + incy)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::gemv(const char trans, + const int m, + const int n, + const std::complex alpha, + const std::complex* A, + const int lda, + const std::complex* X, + const int incx, + const std::complex beta, + std::complex* Y, + const int incy, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + zgemv_(&trans, &m, &n, &alpha, A, &lda, X, &incx, &beta, Y, &incy); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cuDoubleComplex alpha_cu = make_cuDoubleComplex(alpha.real(), alpha.imag()); + cuDoubleComplex beta_cu = make_cuDoubleComplex(beta.real(), beta.imag()); + cublasOperation_t cutransA = BlasUtils::judge_trans(true, trans, "gemv_op"); + cublasErrcheck(cublasZgemv(BlasUtils::cublas_handle, + cutransA, + m, + n, + &alpha_cu, + (cuDoubleComplex*)A, + lda, + (cuDoubleComplex*)X, + incx, + &beta_cu, + (cuDoubleComplex*)Y, + incy)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} \ No newline at end of file diff --git a/source/source_base/blas_connector_vector.cpp b/source/source_base/blas_connector_vector.cpp new file mode 100644 index 0000000000..7dd6b6d9ab --- /dev/null +++ b/source/source_base/blas_connector_vector.cpp @@ -0,0 +1,719 @@ +#include "blas_connector.h" +#include "macros.h" + +#ifdef __DSP +#include "source_base/global_variable.h" +#include "source_base/kernels/dsp/dsp_connector.h" +#endif + +#ifdef __CUDA +#include "cublas_v2.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/memory_op.h" + +#include +#include +#endif + +void BlasConnector::axpy(const int n, + const float alpha, + const float* X, + const int incX, + float* Y, + const int incY, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + saxpy_(&n, &alpha, X, &incX, Y, &incY); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasErrcheck(cublasSaxpy(BlasUtils::cublas_handle, n, &alpha, X, incX, Y, incY)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::axpy(const int n, + const double alpha, + const double* X, + const int incX, + double* Y, + const int incY, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + daxpy_(&n, &alpha, X, &incX, Y, &incY); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasErrcheck(cublasDaxpy(BlasUtils::cublas_handle, n, &alpha, X, incX, Y, incY)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::axpy(const int n, + const std::complex alpha, + const std::complex* X, + const int incX, + std::complex* Y, + const int incY, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + caxpy_(&n, &alpha, X, &incX, Y, &incY); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasErrcheck(cublasCaxpy(BlasUtils::cublas_handle, n, (float2*)&alpha, (float2*)X, incX, (float2*)Y, incY)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::axpy(const int n, + const std::complex alpha, + const std::complex* X, + const int incX, + std::complex* Y, + const int incY, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + zaxpy_(&n, &alpha, X, &incX, Y, &incY); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasErrcheck( + cublasZaxpy(BlasUtils::cublas_handle, n, (double2*)&alpha, (double2*)X, incX, (double2*)Y, incY)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +// x=a*x +void BlasConnector::scal(const int n, + const float alpha, + float* X, + const int incX, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + sscal_(&n, &alpha, X, &incX); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasErrcheck(cublasSscal(BlasUtils::cublas_handle, n, &alpha, X, incX)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::scal(const int n, + const double alpha, + double* X, + const int incX, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + dscal_(&n, &alpha, X, &incX); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasErrcheck(cublasDscal(BlasUtils::cublas_handle, n, &alpha, X, incX)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::scal(const int n, + const std::complex alpha, + std::complex* X, + const int incX, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + cscal_(&n, &alpha, X, &incX); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasErrcheck(cublasCscal(BlasUtils::cublas_handle, n, (float2*)&alpha, (float2*)X, incX)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::scal(const int n, + const std::complex alpha, + std::complex* X, + const int incX, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + zscal_(&n, &alpha, X, &incX); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + cublasErrcheck(cublasZscal(BlasUtils::cublas_handle, n, (double2*)&alpha, (double2*)X, incX)); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +// d=x*y +float BlasConnector::dot(const int n, + const float* const X, + const int incX, + const float* const Y, + const int incY, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + return sdot_(&n, X, &incX, Y, &incY); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + float result = 0.0; + cublasErrcheck(cublasSdot(BlasUtils::cublas_handle, n, X, incX, Y, incY, &result)); + return result; + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +double BlasConnector::dot(const int n, + const double* const X, + const int incX, + const double* const Y, + const int incY, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + return ddot_(&n, X, &incX, Y, &incY); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + double result = 0.0; + cublasErrcheck(cublasDdot(BlasUtils::cublas_handle, n, X, incX, Y, incY, &result)); + return result; + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +// d=x*y +float BlasConnector::dotu(const int n, + const float* const X, + const int incX, + const float* const Y, + const int incY, + base_device::AbacusDevice_t device_type) +{ + return BlasConnector::dot(n, X, incX, Y, incY, device_type); +} + +double BlasConnector::dotu(const int n, + const double* const X, + const int incX, + const double* const Y, + const int incY, + base_device::AbacusDevice_t device_type) +{ + return BlasConnector::dot(n, X, incX, Y, incY, device_type); +} + +std::complex BlasConnector::dotu(const int n, + const std::complex* const X, + const int incX, + const std::complex* const Y, + const int incY, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + const int incX2 = 2 * incX; + const int incY2 = 2 * incY; + const float* const x = reinterpret_cast(X); + const float* const y = reinterpret_cast(Y); + // Re(result)=Re(x)*Re(y)-Im(x)*Im(y) + // Im(result)=Re(x)*Im(y)+Im(x)*Re(y) + return std::complex( + BlasConnector::dot(n, x, incX2, y, incY2, device_type) - dot(n, x + 1, incX2, y + 1, incY2, device_type), + BlasConnector::dot(n, x, incX2, y + 1, incY2, device_type) + dot(n, x + 1, incX2, y, incY2, device_type)); + } + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +std::complex BlasConnector::dotu(const int n, + const std::complex* const X, + const int incX, + const std::complex* const Y, + const int incY, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + const int incX2 = 2 * incX; + const int incY2 = 2 * incY; + const double* const x = reinterpret_cast(X); + const double* const y = reinterpret_cast(Y); + // Re(result)=Re(x)*Re(y)-Im(x)*Im(y) + // Im(result)=Re(x)*Im(y)+Im(x)*Re(y) + return std::complex( + BlasConnector::dot(n, x, incX2, y, incY2, device_type) - dot(n, x + 1, incX2, y + 1, incY2, device_type), + BlasConnector::dot(n, x, incX2, y + 1, incY2, device_type) + dot(n, x + 1, incX2, y, incY2, device_type)); + } + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +// d = x.conj() * Vy +float BlasConnector::dotc(const int n, + const float* const X, + const int incX, + const float* const Y, + const int incY, + base_device::AbacusDevice_t device_type) +{ + return BlasConnector::dot(n, X, incX, Y, incY, device_type); +} + +double BlasConnector::dotc(const int n, + const double* const X, + const int incX, + const double* const Y, + const int incY, + base_device::AbacusDevice_t device_type) +{ + return BlasConnector::dot(n, X, incX, Y, incY, device_type); +} + +std::complex BlasConnector::dotc(const int n, + const std::complex* const X, + const int incX, + const std::complex* const Y, + const int incY, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + const int incX2 = 2 * incX; + const int incY2 = 2 * incY; + const float* const x = reinterpret_cast(X); + const float* const y = reinterpret_cast(Y); + // Re(result)=Re(X)*Re(Y)+Im(X)*Im(Y) + // Im(result)=Re(X)*Im(Y)-Im(X)*Re(Y) + return std::complex( + BlasConnector::dot(n, x, incX2, y, incY2, device_type) + dot(n, x + 1, incX2, y + 1, incY2, device_type), + BlasConnector::dot(n, x, incX2, y + 1, incY2, device_type) - dot(n, x + 1, incX2, y, incY2, device_type)); + } + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +std::complex BlasConnector::dotc(const int n, + const std::complex* const X, + const int incX, + const std::complex* const Y, + const int incY, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + const int incX2 = 2 * incX; + const int incY2 = 2 * incY; + const double* const x = reinterpret_cast(X); + const double* const y = reinterpret_cast(Y); + // Re(result)=Re(X)*Re(Y)+Im(X)*Im(Y) + // Im(result)=Re(X)*Im(Y)-Im(X)*Re(Y) + return std::complex( + BlasConnector::dot(n, x, incX2, y, incY2, device_type) + dot(n, x + 1, incX2, y + 1, incY2, device_type), + BlasConnector::dot(n, x, incX2, y + 1, incY2, device_type) - dot(n, x + 1, incX2, y, incY2, device_type)); + } + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +// out = ||x||_2 +float BlasConnector::nrm2(const int n, const float* X, const int incX, base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + return snrm2_(&n, X, &incX); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + float result = 0.0; + cublasErrcheck(cublasSnrm2(BlasUtils::cublas_handle, n, X, incX, &result)); + return result; + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +double BlasConnector::nrm2(const int n, const double* X, const int incX, base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + return dnrm2_(&n, X, &incX); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + double result = 0.0; + cublasErrcheck(cublasDnrm2(BlasUtils::cublas_handle, n, X, incX, &result)); + return result; + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +double BlasConnector::nrm2(const int n, + const std::complex* X, + const int incX, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + return dznrm2_(&n, X, &incX); + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + double result = 0.0; + cublasErrcheck(cublasDznrm2(BlasUtils::cublas_handle, n, (double2*)X, incX, &result)); + return result; + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +// copies a into b +void BlasConnector::copy(const long n, + const double* a, + const int incx, + double* b, + const int incy, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + dcopy_(&n, a, &incx, b, &incy); + } + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void BlasConnector::copy(const long n, + const std::complex* a, + const int incx, + std::complex* b, + const int incy, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { + zcopy_(&n, a, &incx, b, &incy); + } + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +template +void vector_mul_vector(const int& dim, + T* result, + const T* vector1, + const T* vector2, + base_device::AbacusDevice_t device_type) +{ + using Real = typename GetTypeReal::type; + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { +#ifdef _OPENMP +#pragma omp parallel for schedule(static, 4096 / sizeof(Real)) +#endif + for (int i = 0; i < dim; i++) + { + result[i] = vector1[i] * vector2[i]; + } + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + ModuleBase::vector_mul_vector_op()(dim, result, vector1, vector2); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +template +void vector_div_vector(const int& dim, + T* result, + const T* vector1, + const T* vector2, + base_device::AbacusDevice_t device_type) +{ + using Real = typename GetTypeReal::type; + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { +#ifdef _OPENMP +#pragma omp parallel for schedule(static, 4096 / sizeof(Real)) +#endif + for (int i = 0; i < dim; i++) + { + result[i] = vector1[i] / vector2[i]; + } + } +#ifdef __CUDA + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { + ModuleBase::vector_div_vector_op()(dim, result, vector1, vector2); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void vector_add_vector(const int& dim, + float* result, + const float* vector1, + const float constant1, + const float* vector2, + const float constant2, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::CpuDevice) + { +#ifdef _OPENMP +#pragma omp parallel for schedule(static, 8192 / sizeof(float)) +#endif + for (int i = 0; i < dim; i++) + { + result[i] = vector1[i] * constant1 + vector2[i] * constant2; + } + } +#ifdef __CUDA + else if (device_type == base_device::GpuDevice) + { + ModuleBase::vector_add_vector_op()(dim, + result, + vector1, + constant1, + vector2, + constant2); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void vector_add_vector(const int& dim, + double* result, + const double* vector1, + const double constant1, + const double* vector2, + const double constant2, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::CpuDevice) + { +#ifdef _OPENMP +#pragma omp parallel for schedule(static, 8192 / sizeof(double)) +#endif + for (int i = 0; i < dim; i++) + { + result[i] = vector1[i] * constant1 + vector2[i] * constant2; + } + } +#ifdef __CUDA + else if (device_type == base_device::GpuDevice) + { + ModuleBase::vector_add_vector_op()(dim, + result, + vector1, + constant1, + vector2, + constant2); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void vector_add_vector(const int& dim, + std::complex* result, + const std::complex* vector1, + const float constant1, + const std::complex* vector2, + const float constant2, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::CpuDevice) + { +#ifdef _OPENMP +#pragma omp parallel for schedule(static, 8192 / sizeof(std::complex )) +#endif + for (int i = 0; i < dim; i++) + { + result[i] = vector1[i] * constant1 + vector2[i] * constant2; + } + } +#ifdef __CUDA + else if (device_type == base_device::GpuDevice) + { + ModuleBase::vector_add_vector_op, base_device::DEVICE_GPU>()(dim, + result, + vector1, + constant1, + vector2, + constant2); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} + +void vector_add_vector(const int& dim, + std::complex* result, + const std::complex* vector1, + const double constant1, + const std::complex* vector2, + const double constant2, + base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::CpuDevice) + { +#ifdef _OPENMP +#pragma omp parallel for schedule(static, 8192 / sizeof(std::complex )) +#endif + for (int i = 0; i < dim; i++) + { + result[i] = vector1[i] * constant1 + vector2[i] * constant2; + } + } +#ifdef __CUDA + else if (device_type == base_device::GpuDevice) + { + ModuleBase::vector_add_vector_op, base_device::DEVICE_GPU>()(dim, + result, + vector1, + constant1, + vector2, + constant2); + } +#endif + else + { + throw std::invalid_argument("device_type = " + std::to_string(device_type) + " in " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } +} \ No newline at end of file diff --git a/source/module_base/clebsch_gordan_coeff.cpp b/source/source_base/clebsch_gordan_coeff.cpp similarity index 96% rename from source/module_base/clebsch_gordan_coeff.cpp rename to source/source_base/clebsch_gordan_coeff.cpp index 095fa7e792..7a62b4dba1 100644 --- a/source/module_base/clebsch_gordan_coeff.cpp +++ b/source/source_base/clebsch_gordan_coeff.cpp @@ -1,8 +1,8 @@ #include "clebsch_gordan_coeff.h" -#include "module_base/constants.h" -#include "module_base/inverse_matrix.h" -#include "module_base/math_ylmreal.h" +#include "source_base/constants.h" +#include "source_base/inverse_matrix.h" +#include "source_base/math_ylmreal.h" namespace ModuleBase { diff --git a/source/module_base/clebsch_gordan_coeff.h b/source/source_base/clebsch_gordan_coeff.h similarity index 93% rename from source/module_base/clebsch_gordan_coeff.h rename to source/source_base/clebsch_gordan_coeff.h index 6f6633bc91..9e29ae5c97 100644 --- a/source/module_base/clebsch_gordan_coeff.h +++ b/source/source_base/clebsch_gordan_coeff.h @@ -1,10 +1,10 @@ #ifndef CLEBSCH_GORDAN_H #define CLEBSCH_GORDAN_H -#include "module_base/intarray.h" -#include "module_base/matrix.h" -#include "module_base/realarray.h" -#include "module_base/vector3.h" +#include "source_base/intarray.h" +#include "source_base/matrix.h" +#include "source_base/realarray.h" +#include "source_base/vector3.h" namespace ModuleBase { diff --git a/source/module_base/complexarray.cpp b/source/source_base/complexarray.cpp similarity index 100% rename from source/module_base/complexarray.cpp rename to source/source_base/complexarray.cpp diff --git a/source/module_base/complexarray.h b/source/source_base/complexarray.h similarity index 100% rename from source/module_base/complexarray.h rename to source/source_base/complexarray.h diff --git a/source/module_base/complexmatrix.cpp b/source/source_base/complexmatrix.cpp similarity index 100% rename from source/module_base/complexmatrix.cpp rename to source/source_base/complexmatrix.cpp diff --git a/source/module_base/complexmatrix.h b/source/source_base/complexmatrix.h similarity index 100% rename from source/module_base/complexmatrix.h rename to source/source_base/complexmatrix.h diff --git a/source/module_base/constants.h b/source/source_base/constants.h similarity index 100% rename from source/module_base/constants.h rename to source/source_base/constants.h diff --git a/source/module_base/container_operator.h b/source/source_base/container_operator.h similarity index 100% rename from source/module_base/container_operator.h rename to source/source_base/container_operator.h diff --git a/source/module_base/cubic_spline.cpp b/source/source_base/cubic_spline.cpp similarity index 100% rename from source/module_base/cubic_spline.cpp rename to source/source_base/cubic_spline.cpp diff --git a/source/module_base/cubic_spline.h b/source/source_base/cubic_spline.h similarity index 100% rename from source/module_base/cubic_spline.h rename to source/source_base/cubic_spline.h diff --git a/source/module_base/element_basis_index.cpp b/source/source_base/element_basis_index.cpp similarity index 100% rename from source/module_base/element_basis_index.cpp rename to source/source_base/element_basis_index.cpp diff --git a/source/module_base/element_basis_index.h b/source/source_base/element_basis_index.h similarity index 100% rename from source/module_base/element_basis_index.h rename to source/source_base/element_basis_index.h diff --git a/source/module_base/element_covalent_radius.h b/source/source_base/element_covalent_radius.h similarity index 100% rename from source/module_base/element_covalent_radius.h rename to source/source_base/element_covalent_radius.h diff --git a/source/module_base/element_elec_config.h b/source/source_base/element_elec_config.h similarity index 100% rename from source/module_base/element_elec_config.h rename to source/source_base/element_elec_config.h diff --git a/source/module_base/element_name.h b/source/source_base/element_name.h similarity index 100% rename from source/module_base/element_name.h rename to source/source_base/element_name.h diff --git a/source/module_base/export.cpp b/source/source_base/export.cpp similarity index 100% rename from source/module_base/export.cpp rename to source/source_base/export.cpp diff --git a/source/module_base/export.h b/source/source_base/export.h similarity index 100% rename from source/module_base/export.h rename to source/source_base/export.h diff --git a/source/module_base/formatter.h b/source/source_base/formatter.h similarity index 61% rename from source/module_base/formatter.h rename to source/source_base/formatter.h index 5935cd9eea..504f657720 100644 --- a/source/module_base/formatter.h +++ b/source/source_base/formatter.h @@ -8,36 +8,39 @@ #ifndef FORMATTER_H #define FORMATTER_H -#include +#include "source_base/ndarray.h" + +#include #include +#include +#include #include #include -#include -#include -#include "module_base/ndarray.h" /** - * @brief - * - * In C++20, the std::format library is introduced. However, it is not supported under restriction of ABACUS development that not later than C++11. Plus in ABACUS the formatting-output demands is not quite general but more specific, therefore, a simple alternative is proposed here. - * To use: + * @brief + * + * In C++20, the std::format library is introduced. However, it is not supported under restriction of ABACUS development + * that not later than C++11. Plus in ABACUS the formatting-output demands is not quite general but more specific, + * therefore, a simple alternative is proposed here. To use: * 1. Use the static function format() to format data like `FmtCore::format("%d", 1);` * 2. Use the class FmtCore to format data like `FmtCore fmt("%d"); fmt.format(1);`. - * The first way is more flexible while the second way is more efficient. The format string can be reset by reset() function. If empty, the format string is empty, otherwise it will be updated. + * The first way is more flexible while the second way is more efficient. The format string can be reset by reset() + * function. If empty, the format string is empty, otherwise it will be updated. */ class FmtCore { -public: - FmtCore(const std::string& fmt): fmt_(fmt) {}; - ~FmtCore() {}; + public: + FmtCore(const std::string& fmt) : fmt_(fmt){}; + ~FmtCore(){}; /** * @brief static function to format data - * + * * @tparam Ts datatype of the data * @param fmt format string * @param args data to format - * @return std::string + * @return std::string */ - template + template static inline std::string format(const char* fmt, const Ts&... args) { const int size = snprintf(nullptr, 0, fmt, FmtCore::filter(args)...) + 1; @@ -48,25 +51,34 @@ class FmtCore } /** * @brief std::string overload of the varadic template function - * - * @param fmt - * @param arg - * @return std::string + * + * @param fmt + * @param arg + * @return std::string */ - template - std::string format(const Ts&... args) { return FmtCore::format(fmt_.c_str(), args...); } + template + std::string format(const Ts&... args) + { + return FmtCore::format(fmt_.c_str(), args...); + } /** * @brief reset the format string (std::string overloads) - * - * @param fmt + * + * @param fmt */ - void reset(const std::string& fmt = "") { fmt_ = fmt; } + void reset(const std::string& fmt = "") + { + fmt_ = fmt; + } /** * @brief get the format string - * - * @return std::string + * + * @return std::string */ - const std::string& fmt() { return fmt_; } + const std::string& fmt() + { + return fmt_; + } /** * Python-style string functions will be implemented here as toolbox */ @@ -74,13 +86,13 @@ class FmtCore * @brief split a string with a delimiter, return uncollapse vector * @param in string to split * @param delim delimiter - * @return std::vector - */ + * @return std::vector + */ static std::vector split(const std::string& in, const std::string& delim) { std::vector dst; std::string::size_type beg = 0, end; - while((end = in.find(delim, beg)) != std::string::npos) + while ((end = in.find(delim, beg)) != std::string::npos) { dst.push_back(in.substr(beg, end - beg)); beg = end + delim.size(); @@ -90,15 +102,15 @@ class FmtCore } /** * @brief split a string with a delimiter, return only non-empty elements - * + * * @param in string to split - * @return std::vector + * @return std::vector */ static std::vector split(const std::string& in) { std::vector dst; std::string::size_type beg = 0, end = 0; - while((beg = in.find_first_not_of(" ", end)) != std::string::npos) + while ((beg = in.find_first_not_of(" ", end)) != std::string::npos) { end = in.find_first_of(" ", beg); dst.push_back(in.substr(beg, end - beg)); @@ -116,11 +128,12 @@ class FmtCore static std::string strip(const std::string& in, const std::string& chars = " ") { std::string::size_type beg = in.find_first_not_of(chars); - return (beg == std::string::npos)? "": in.substr(beg, in.find_last_not_of(chars) - beg + 1); + return (beg == std::string::npos) ? "" : in.substr(beg, in.find_last_not_of(chars) - beg + 1); } static std::string center(const std::string& in, const size_t& width, const char& fillchar = ' ') { - if (in.size() >= width) { + if (in.size() >= width) + { return in; } const size_t nwhitespaces = width - in.size(); @@ -132,7 +145,7 @@ class FmtCore { std::string dst = in; std::string::size_type pos = dst.find(old); - while(pos != std::string::npos) + while (pos != std::string::npos) { dst.replace(pos, old.size(), new_); pos = dst.find(old, pos + new_.size()); @@ -141,8 +154,12 @@ class FmtCore } static std::string join(const std::string& delim, const std::vector& src) { - return (src.empty())? "": std::accumulate(src.begin() + 1, src.end(), src[0], - [&delim](const std::string& acc, const std::string& s) { return acc + delim + s; }); + return (src.empty()) ? "" + : std::accumulate( + src.begin() + 1, + src.end(), + src[0], + [&delim](const std::string& acc, const std::string& s) { return acc + delim + s; }); } static std::string upper(const std::string& in) @@ -159,108 +176,148 @@ class FmtCore return dst; } -private: + private: std::string fmt_; - template - static typename std::enable_if::value, const char*>::type filter(const T& s) { return s.c_str(); } - template - static typename std::enable_if::value, const T&>::type filter(const T& s) { return s; } + template + static typename std::enable_if::value, const char*>::type filter(const T& s) + { + return s.c_str(); + } + template + static typename std::enable_if::value, const T&>::type filter(const T& s) + { + return s; + } }; class FmtTable { -public: - enum class Align{LEFT, RIGHT, CENTER}; -private: + public: + enum class Align + { + LEFT, + RIGHT, + CENTER + }; + + private: typedef FmtCore core; - struct Alignments{ - Alignments(const Align& val = Align::RIGHT, const Align& title = Align::CENTER): val_(val), title_(title) {}; + struct Alignments + { + Alignments(const Align& val = Align::RIGHT, const Align& title = Align::CENTER) : val_(val), title_(title){}; Align val_, title_; // value and title alignments } aligns_; - struct Frames{ - Frames(char up = '-', char mid = '-', char dw = '-', char l = ' ', char r = ' '): up_(up), mid_(mid), dw_(dw), l_(l), r_(r) {}; - char up_, mid_ , dw_, l_, r_; // up, middle, down, left, right frames. up: the frame above title, middle: the one between title and data - } frames_; // down: the frame below data, left: the frame at left, right: the frame at right - struct Delimiters{ - Delimiters(char h = '-', char v = ' '): h_(h), v_(v) {}; + struct Frames + { + Frames(char up = '-', char mid = '-', char dw = '-', char l = ' ', char r = ' ') + : up_(up), mid_(mid), dw_(dw), l_(l), r_(r){}; + char up_, mid_, dw_, l_, r_; // up, middle, down, left, right frames. up: the frame above title, middle: the one + // between title and data + } frames_; // down: the frame below data, left: the frame at left, right: the frame at right + struct Delimiters + { + Delimiters(char h = '-', char v = ' ') : h_(h), v_(v){}; char h_, v_; // horizontal and vertical delimiters } delimiters_; -public: + + public: /** * @brief Construct a new Fmt Table object - * + * * @param titles titles, its size should be the same as the number of columns * @param nrows number of rows * @param fmts format strings for each column, its size should be the same as the number of columns * @param indent indent for each column, default is 0 - * @param aligns Alignments instance, for alignment of values and titles, e.g. {Align::LEFT, Align::RIGHT} for left alignment of values and right alignment of titles - * @param frames Frames instance, can be constructed with initializer_list like {'-', '-', '-', ' ', ' '}, for up, middle, down, left and right frames - * @param delimiters Delimiters instance, can be constructed with initializer_list like {'-', ' '}, for horizontal and vertical delimiters + * @param aligns Alignments instance, for alignment of values and titles, e.g. {Align::LEFT, Align::RIGHT} for left + * alignment of values and right alignment of titles + * @param frames Frames instance, can be constructed with initializer_list like {'-', '-', '-', ' ', ' '}, for + * up, middle, down, left and right frames + * @param delimiters Delimiters instance, can be constructed with initializer_list like {'-', ' '}, for + * horizontal and vertical delimiters */ - FmtTable(const std::vector& titles, - const size_t nrows, + FmtTable(const std::vector& titles, + const size_t nrows, const std::vector& fmts, const size_t indent = 0, const Alignments& aligns = {}, const Frames& frames = {}, - const Delimiters& delimiters = {}): - titles_(titles), data_(nrows, titles.size()), // data - fmts_(fmts), indent_(indent), aligns_(aligns), frames_(frames), delimiters_(delimiters) // styles - { assert(titles.size() == fmts.size()||titles.size() == 0); }; - ~FmtTable() {}; + const Delimiters& delimiters = {}) + : titles_(titles), data_(nrows, titles.size()), // data + fmts_(fmts), indent_(indent), aligns_(aligns), frames_(frames), delimiters_(delimiters) // styles + { + assert(titles.size() == fmts.size() || titles.size() == 0); + }; + ~FmtTable(){}; /** * @brief import data from std::vector - * + * * @tparam T datatype of the data * @param src source data * @return FmtTable& itself */ - template + template FmtTable& operator<<(const std::vector& src) { // create a copy of source data, then format std::vector data(src.size()); - for(size_t i = 0UL; i < src.size(); i++) { data[i] = core::format(fmts_[j_].c_str(), src[i]); } + for (size_t i = 0UL; i < src.size(); i++) + { + data[i] = core::format(fmts_[j_].c_str(), src[i]); + } set_value(0, j_, 'v', data); j_ = (j_ + 1) % titles_.size(); return *this; } /** * @brief Set the value object - * + * * @tparam T datatype of the data * @param i row index * @param j col index * @param value value to set */ - template - void set_value(const size_t& i, const size_t& j, const T& value) { data_(i, j) = core::format(fmts_[j].c_str(), value); } + template + void set_value(const size_t& i, const size_t& j, const T& value) + { + data_(i, j) = core::format(fmts_[j].c_str(), value); + } /** * @brief adjust the width of each column - * + * * @param col col to relax, organized as std::vector * @param title title of the column * @param vlyot value layout, can be Align::LEFT, Align::RIGHT, Align::CENTER * @param tlyot title layout, can be Align::LEFT, Align::RIGHT, Align::CENTER * @return std::vector newly relaxed column */ - std::vector relax_col_width(const std::vector& col, - const std::string& title = "", - const Align valign = Align::RIGHT, // because enum type would be the smallest integral type, so it is safe to pass by value - const Align talign = Align::CENTER) + std::vector relax_col_width( + const std::vector& col, + const std::string& title = "", + const Align valign + = Align::RIGHT, // because enum type would be the smallest integral type, so it is safe to pass by value + const Align talign = Align::CENTER) { size_t max_width = title.size(); - for(const std::string& s : col) { max_width = std::max(max_width, s.size()); } + for (const std::string& s: col) + { + max_width = std::max(max_width, s.size()); + } std::vector new_col(col.size() + 1); // the first is column title - for(size_t i = 0; i < col.size() + 1; i++) + for (size_t i = 0; i < col.size() + 1; i++) { - new_col[i] = (i == 0)? FmtCore::strip(title): FmtCore::strip(col[i - 1]); + new_col[i] = (i == 0) ? FmtCore::strip(title) : FmtCore::strip(col[i - 1]); const size_t nwhitespaces = max_width - new_col[i].size(); - switch((i == 0)? talign: valign) + switch ((i == 0) ? talign : valign) { - case Align::RIGHT: new_col[i] = std::string(nwhitespaces, ' ') + new_col[i]; break; - case Align::LEFT: new_col[i] += std::string(nwhitespaces, ' '); break; - case Align::CENTER: new_col[i] = FmtCore::center(new_col[i], max_width); break; + case Align::RIGHT: + new_col[i] = std::string(nwhitespaces, ' ') + new_col[i]; + break; + case Align::LEFT: + new_col[i] += std::string(nwhitespaces, ' '); + break; + case Align::CENTER: + new_col[i] = FmtCore::center(new_col[i], max_width); + break; } } return new_col; @@ -268,25 +325,29 @@ class FmtTable /** * @brief concatenate titles into a string - * + * * @param titles titles to concatenate - * @return std::string + * @return std::string */ std::string concat_title(const std::vector& titles) const { std::string dst = ""; // first sum width of all titles - size_t width = std::accumulate(titles.begin(), titles.end(), 0, [](const size_t& acc, const std::string& s) { return acc + s.size(); }); + size_t width = std::accumulate(titles.begin(), titles.end(), 0, [](const size_t& acc, const std::string& s) { + return acc + s.size(); + }); // add width of delimiters width += titles.size() - 1; // add width of left and right frames width += 2; dst += std::string(indent_, ' ') + std::string(width, frames_.up_) + "\n"; // first line: the upper frame - dst += std::string(indent_, ' ') + std::string(1, frames_.l_); // second line: the left frame + titles + right frame - for(size_t i = 0; i < titles.size(); i++) + dst += std::string(indent_, ' ') + + std::string(1, frames_.l_); // second line: the left frame + titles + right frame + for (size_t i = 0; i < titles.size(); i++) { dst += titles[i]; - if (i != titles.size() - 1) { + if (i != titles.size() - 1) + { dst += delimiters_.v_; } } @@ -296,41 +357,46 @@ class FmtTable } /** * @brief concatenate a row into a string - * + * * @param row row to concatenate * @param pos position, can be 't' for top, 'b' for bottom, 'n' for normal - * @return std::string + * @return std::string */ std::string concat_row(const std::vector& row, const char& pos) const { std::string dst = ""; // first sum width of all elements of the row - size_t width = std::accumulate(row.begin(), row.end(), 0, [](const size_t& acc, const std::string& s) { return acc + s.size(); }); + size_t width = std::accumulate(row.begin(), row.end(), 0, [](const size_t& acc, const std::string& s) { + return acc + s.size(); + }); // for the delimiters width += row.size() - 1; // for the left and right frame width += 2; - if (pos == 't') { // 't' for top + if (pos == 't') + { // 't' for top dst += std::string(indent_, ' ') + std::string(width, frames_.up_) + "\n"; } dst += std::string(indent_, ' ') + std::string(1, frames_.l_); - for(size_t i = 0; i < row.size(); i++) + for (size_t i = 0; i < row.size(); i++) { dst += row[i]; - if (i != row.size() - 1) { + if (i != row.size() - 1) + { dst += delimiters_.v_; } } dst += std::string(1, frames_.r_) + "\n"; - if (pos == 'b') { // 'b' for bottom + if (pos == 'b') + { // 'b' for bottom dst += std::string(indent_, ' ') + std::string(width, frames_.dw_) + "\n"; // the last line } return dst; } /** * @brief to get the table as a string - * - * @return std::string + * + * @return std::string */ std::string str() { @@ -339,17 +405,20 @@ class FmtTable const size_t ncols = data_.shape()[1]; // if not all titles are empty, then with_title boolean will be true bool with_title = false; - for (auto& title: titles_) { - if (!title.empty()) { + for (auto& title: titles_) + { + if (!title.empty()) + { with_title = true; break; } } // first to relax each column - for(size_t j = 0UL; j < ncols; j++) + for (size_t j = 0UL; j < ncols; j++) { std::vector col(nrows); - for (size_t i = 0UL; i < nrows; i++) { + for (size_t i = 0UL; i < nrows; i++) + { col[i] = data_(i, j); } col = relax_col_width(col, titles_[j], aligns_.val_, aligns_.title_); @@ -358,42 +427,53 @@ class FmtTable set_value(0UL, j, 'v', col_new); } // then print titles - if (with_title) { + if (with_title) + { dst += concat_title(titles_); } // then print contents - for(size_t i = 0UL; i < nrows; i++) + for (size_t i = 0UL; i < nrows; i++) { std::vector row(ncols); - for (size_t j = 0; j < ncols; j++) { + for (size_t j = 0; j < ncols; j++) + { row[j] = data_(i, j); } - dst += concat_row(row, ((i == 0UL)&&!with_title)? 't': (i == nrows - 1)? 'b': 'n'); + dst += concat_row(row, ((i == 0UL) && !with_title) ? 't' : (i == nrows - 1) ? 'b' : 'n'); } return dst; } - void str(const std::string& s) {}; + void str(const std::string& s){}; // reuse - void iter_set(const size_t val) { j_ = val; } -private: + void iter_set(const size_t val) + { + j_ = val; + } + + private: /** * @brief Set the value object from std::vector - * + * * @tparam T datatype of the data * @param i row index * @param j column index * @param dir direction, if 'v' then vertical, if 'h' then horizontal * @param src source data */ - template + template void set_value(const size_t& i, const size_t& j, const char& dir, const std::vector& src) { - if (dir == 'v') { - for (size_t k = 0UL; k < src.size(); k++) { + if (dir == 'v') + { + for (size_t k = 0UL; k < src.size(); k++) + { data_(i + k, j) = src[k]; } - } else if (dir == 'h') { - for (size_t k = 0UL; k < src.size(); k++) { + } + else if (dir == 'h') + { + for (size_t k = 0UL; k < src.size(); k++) + { data_(j, i + k) = src[k]; } } @@ -402,9 +482,9 @@ class FmtTable size_t j_ = 0; std::vector titles_; - NDArray data_; // data + NDArray data_; // data std::vector fmts_; // format strings for each column - size_t indent_ = 0; // indent for each column + size_t indent_ = 0; // indent for each column }; #endif \ No newline at end of file diff --git a/source/source_base/gather_math_lib_info.cpp b/source/source_base/gather_math_lib_info.cpp new file mode 100644 index 0000000000..e4938d7865 --- /dev/null +++ b/source/source_base/gather_math_lib_info.cpp @@ -0,0 +1,102 @@ +// This file defines the math lib wrapper for output information before executing computations. + +/* +When INFO is defined in cmake configure, a macro of GATHER_INFO will be defined. +This macro will be used to output information before executing computations. +Results will output to OUT/math_info.log, see ModuleBase::Global_File::make_dir_out . +*/ + +#include +#undef GATHER_INFO +#include "source_base/blas_connector.h" +#include "source_base/lapack_connector.h" + +#include + +void zgemm_i(const char* transa, + const char* transb, + const int* m, + const int* n, + const int* k, + const std::complex* alpha, + const std::complex* a, + const int* lda, + const std::complex* b, + const int* ldb, + const std::complex* beta, + std::complex* c, + const int* ldc) +{ + GlobalV::ofs_info.unsetf(std::ios_base::floatfield); + GlobalV::ofs_info << "zgemm " << *transa << " " << *transb << " " << *m << " " << *n << " " << *k << " " << *alpha + << " " << *lda << " " << *ldb << " " << *beta << " " << *ldc << std::endl; + zgemm_(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc); +} + +void zaxpy_i(const int* N, + const std::complex* alpha, + const std::complex* X, + const int* incX, + std::complex* Y, + const int* incY) +{ + // std::cout << "zaxpy " << *N << std::endl; + // alpha is a coefficient + // incX, incY is always 1 + zaxpy_(N, alpha, X, incX, Y, incY); +} + +void zhegvx_i(const int* itype, + const char* jobz, + const char* range, + const char* uplo, + const int* n, + std::complex* a, + const int* lda, + std::complex* b, + const int* ldb, + const double* vl, + const double* vu, + const int* il, + const int* iu, + const double* abstol, + const int* m, + double* w, + std::complex* z, + const int* ldz, + std::complex* work, + const int* lwork, + double* rwork, + int* iwork, + int* ifail, + int* info) +{ + GlobalV::ofs_info.unsetf(std::ios_base::floatfield); + GlobalV::ofs_info << "zhegvx " << *itype << " " << *jobz << " " << *range << " " << *uplo << " " << *n << " " + << *lda << " " << *ldb << " " << *vl << " " << *vu << " " << *il << " " << *iu << " " << *abstol + << " " << *m << " " << *lwork << " " << *info << std::endl; + zhegvx_(itype, + jobz, + range, + uplo, + n, + a, + lda, + b, + ldb, + vl, + vu, + il, + iu, + abstol, + m, + w, + z, + ldz, + work, + lwork, + rwork, + iwork, + ifail, + info); +} diff --git a/source/source_base/global_file.cpp b/source/source_base/global_file.cpp new file mode 100644 index 0000000000..2e17170fcb --- /dev/null +++ b/source/source_base/global_file.cpp @@ -0,0 +1,327 @@ +//========================================================== +// AUTHOR : mohan + +// DATE : 2008-11-10 +//========================================================== +#include "global_file.h" + +#ifdef __MPI +#include +#endif +#include "global_function.h" +#include "global_variable.h" +#include "module_parameter/parameter.h" +#include "source_base/parallel_common.h" +#include "source_base/parallel_reduce.h" + +#include +#include + +//---------------------------------------------------------- +// EXPLAIN : Be Called in input.cpp +//---------------------------------------------------------- +namespace ModuleBase +{ +void ModuleBase::Global_File::make_dir_out(const std::string& suffix, + const std::string& calculation, + const bool& out_dir, + const int rank, + const bool& restart, + const bool out_alllog) +{ + //---------------------------------------------------------- + // USE STL FUNCTION + // NAME : system + //---------------------------------------------------------- + +#ifdef __MPI + MPI_Barrier(MPI_COMM_WORLD); +#endif + int make_dir = 0; + // mohan update 2011-05-03 + std::string command0 = "test -d " + PARAM.globalv.global_out_dir + " || mkdir " + PARAM.globalv.global_out_dir; + + int times = 0; + while (times < GlobalV::NPROC) + { + if (rank == times) + { + if (system(command0.c_str()) == 0) + { + std::cout << " MAKE THE DIR : " << PARAM.globalv.global_out_dir << std::endl; + make_dir = 1; + } + else + { + std::cout << " PROC " << rank << " Please delete the file named by OUT.suffix !!! " << std::endl; + make_dir = 0; + } + } +#ifdef __MPI + Parallel_Reduce::reduce_all(make_dir); +#endif + if (make_dir > 0) + { + break; + } + ++times; + } + +#ifdef __MPI + if (make_dir == 0) + { + std::cout << " CAN NOT MAKE THE OUT DIR......." << std::endl; + ModuleBase::QUIT(); + } + MPI_Barrier(MPI_COMM_WORLD); +#endif + + if (calculation == "md") + { + int make_dir_stru = 0; + std::string command1 + = "test -d " + PARAM.globalv.global_stru_dir + " || mkdir " + PARAM.globalv.global_stru_dir; + + times = 0; + while (times < GlobalV::NPROC) + { + if (rank == times) + { + if (system(command1.c_str()) == 0) + { + std::cout << " MAKE THE STRU DIR : " << PARAM.globalv.global_stru_dir << std::endl; + make_dir_stru = 1; + } + else + { + std::cout << " PROC " << rank << " CAN NOT MAKE THE STRU DIR !!! " << std::endl; + make_dir_stru = 0; + } + } +#ifdef __MPI + Parallel_Reduce::reduce_all(make_dir_stru); +#endif + if (make_dir_stru > 0) + { + break; + } + ++times; + } + +#ifdef __MPI + if (make_dir_stru == 0) + { + std::cout << " CAN NOT MAKE THE STRU DIR......." << std::endl; + ModuleBase::QUIT(); + } + MPI_Barrier(MPI_COMM_WORLD); +#endif + } + + // make dir for HS matrix output in md calculation + if ((out_dir) && calculation == "md") + { + int make_dir_matrix = 0; + std::string command1 + = "test -d " + PARAM.globalv.global_matrix_dir + " || mkdir " + PARAM.globalv.global_matrix_dir; + + times = 0; + while (times < GlobalV::NPROC) + { + if (rank == times) + { + if (system(command1.c_str()) == 0) + { + std::cout << " MAKE THE MATRIX DIR : " << PARAM.globalv.global_stru_dir << std::endl; + make_dir_matrix = 1; + } + else + { + std::cout << " PROC " << rank << " CAN NOT MAKE THE MATRIX DIR !!! " << std::endl; + make_dir_matrix = 0; + } + } +#ifdef __MPI + Parallel_Reduce::reduce_all(make_dir_matrix); +#endif + if (make_dir_matrix > 0) + { + break; + } + ++times; + } + +#ifdef __MPI + if (make_dir_matrix == 0) + { + std::cout << " CAN NOT MAKE THE MATRIX DIR......." << std::endl; + ModuleBase::QUIT(); + } + MPI_Barrier(MPI_COMM_WORLD); +#endif + } + + if (PARAM.inp.of_ml_gene_data == 1) + { + int make_dir_descrip = 0; + std::string command1 = "test -d " + PARAM.globalv.global_mlkedf_descriptor_dir + " || mkdir " + + PARAM.globalv.global_mlkedf_descriptor_dir; + + times = 0; + while (times < GlobalV::NPROC) + { + if (rank == times) + { + if (system(command1.c_str()) == 0) + { + std::cout << " MAKE THE MLKEDF DESCRIPTOR DIR : " << PARAM.globalv.global_mlkedf_descriptor_dir + << std::endl; + make_dir_descrip = 1; + } + else + { + std::cout << " PROC " << rank << " CAN NOT MAKE THE MLKEDF DESCRIPTOR DIR !!! " << std::endl; + make_dir_descrip = 0; + } + } +#ifdef __MPI + Parallel_Reduce::reduce_all(make_dir_descrip); +#endif + if (make_dir_descrip > 0) + { + break; + } + ++times; + } + +#ifdef __MPI + if (make_dir_descrip == 0) + { + std::cout << " CAN NOT MAKE THE MLKEDF DESCRIPTOR DIR......." << std::endl; + ModuleBase::QUIT(); + } + MPI_Barrier(MPI_COMM_WORLD); +#endif + } + + // mohan add 2010-09-12 + if (out_alllog) + { + open_log(GlobalV::ofs_running, PARAM.globalv.log_file, calculation, restart); +#if defined(__CUDA) || defined(__ROCM) + open_log(GlobalV::ofs_device, "device" + std::to_string(rank) + ".log", calculation, restart); +#endif + } + else + { + if (rank == 0) + { + open_log(GlobalV::ofs_running, PARAM.globalv.log_file, calculation, restart); +#if defined(__CUDA) || defined(__ROCM) + open_log(GlobalV::ofs_device, "device.log", calculation, restart); +#endif + } + } + + if (rank == 0) + { + open_log(GlobalV::ofs_warning, "warning.log", calculation, restart); + } + +#ifdef GATHER_INFO + open_log(GlobalV::ofs_info, "math_info_" + std::to_string(rank) + ".log", calculation, restart); +#endif + + return; +} + +void ModuleBase::Global_File::make_dir_atom(const std::string& label) +{ + //---------------------------------------------------------- + // EXPLAIN : generate atom dir for each type of atom + //---------------------------------------------------------- + std::stringstream ss; + ss << PARAM.globalv.global_out_dir << label << "/"; + ModuleBase::GlobalFunc::MAKE_DIR(ss.str()); + return; +} + +void ModuleBase::Global_File::open_log(std::ofstream& ofs, + const std::string& fn, + const std::string& calculation, + const bool& restart) +{ + //---------------------------------------------------------- + // USE GLOBAL VARIABLE : + // PARAM.globalv.global_out_dir : (default dir to store "*.log" file) + //---------------------------------------------------------- + std::stringstream ss; + ss << PARAM.globalv.global_out_dir << fn; + + if (calculation == "md" && restart) + { + ofs.open(ss.str(), std::ios::app); + } + else + { + ofs.open(ss.str()); + } + // ofs << " WELCOME TO MESIA PROGRAM." << std::endl; + // ofs << " OPEN "<<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><" << std::endl; GlobalV::ofs_running << "\n " << words << std::endl; @@ -48,7 +48,7 @@ void NEW_PART(const std::string &words) // GLOBAL FUNCTION : // NAME : OUT( output date for checking ) //========================================================== -void OUT(std::ofstream &ofs, const std::string &name) +void OUT(std::ofstream& ofs, const std::string& name) { ofs << "\n" << std::setw(18) << name << std::endl; return; @@ -58,7 +58,7 @@ void OUT(std::ofstream &ofs, const std::string &name) // GLOBAL FUNCTION : // NAME : MAKE_DIR( make dir ,using system function) //========================================================== -void MAKE_DIR(const std::string &fn) +void MAKE_DIR(const std::string& fn) { // ModuleBase::TITLE("global_function","MAKE_DIR"); if (GlobalV::MY_RANK == 0) @@ -76,7 +76,7 @@ void MAKE_DIR(const std::string &fn) return; } -void DONE(std::ofstream &ofs, const std::string &description, const bool only_rank0) +void DONE(std::ofstream& ofs, const std::string& description, const bool only_rank0) { if (only_rank0) { @@ -104,11 +104,7 @@ void DONE(std::ofstream &ofs, const std::string &description, const bool only_ra return; } - -bool SCAN_BEGIN(std::ifstream &ifs, - const std::string &TargetName, - const bool restart, - const bool ifwarn) +bool SCAN_BEGIN(std::ifstream& ifs, const std::string& TargetName, const bool restart, const bool ifwarn) { std::string SearchName; bool find = false; @@ -134,11 +130,7 @@ bool SCAN_BEGIN(std::ifstream &ifs, return find; } - -bool SCAN_LINE_BEGIN(std::ifstream &ifs, - const std::string &TargetName, - const bool restart, - const bool ifwarn) +bool SCAN_LINE_BEGIN(std::ifstream& ifs, const std::string& TargetName, const bool restart, const bool ifwarn) { bool find = false; if (restart) @@ -149,28 +141,28 @@ bool SCAN_LINE_BEGIN(std::ifstream &ifs, ifs.rdstate(); std::string line; - while (std::getline(ifs,line)) + while (std::getline(ifs, line)) { //! obtain the first character, should not be # size_t first_char_pos = line.find_first_not_of(" \t"); - if (first_char_pos != std::string::npos && line[first_char_pos] == '#') + if (first_char_pos != std::string::npos && line[first_char_pos] == '#') { continue; - } + } //! search in each line std::istringstream iss(line); std::string SearchName; while (iss >> SearchName) - { - if (SearchName == TargetName) - { - find = true; - //std::cout << " search name = " << SearchName << std::endl; - return find; - } - } - } + { + if (SearchName == TargetName) + { + find = true; + // std::cout << " search name = " << SearchName << std::endl; + return find; + } + } + } if (!find && ifwarn) { @@ -179,7 +171,7 @@ bool SCAN_LINE_BEGIN(std::ifstream &ifs, return find; } -void SCAN_END(std::ifstream &ifs, const std::string &TargetName, const bool ifwarn) +void SCAN_END(std::ifstream& ifs, const std::string& TargetName, const bool ifwarn) { std::string SearchName; ifs >> SearchName; @@ -190,7 +182,7 @@ void SCAN_END(std::ifstream &ifs, const std::string &TargetName, const bool ifwa return; } -void BLOCK_HERE(const std::string &description) +void BLOCK_HERE(const std::string& description) { // return; std::cout << "\n********************************************"; @@ -221,21 +213,21 @@ void BLOCK_HERE(const std::string &description) } } -void OUT_TIME(const std::string &name, time_t &start, time_t &end) +void OUT_TIME(const std::string& name, time_t& start, time_t& end) { double mini = difftime(end, start) / 60.0; if (mini > 0.1) { - if(GlobalV::ofs_warning) - { - GlobalV::ofs_warning << std::setprecision(2); - GlobalV::ofs_warning << " -------------------------------------------------------" << std::endl; - GlobalV::ofs_warning << " NAME < " << name << " > = " << std::endl; - GlobalV::ofs_warning << " -> " << ctime(&start) << " -> " << ctime(&end); - GlobalV::ofs_warning << " TIME = " << mini << " [Minutes]" << std::endl; - GlobalV::ofs_warning << " -------------------------------------------------------" << std::endl; - GlobalV::ofs_warning << std::setprecision(6); - } + if (GlobalV::ofs_warning) + { + GlobalV::ofs_warning << std::setprecision(2); + GlobalV::ofs_warning << " -------------------------------------------------------" << std::endl; + GlobalV::ofs_warning << " NAME < " << name << " > = " << std::endl; + GlobalV::ofs_warning << " -> " << ctime(&start) << " -> " << ctime(&end); + GlobalV::ofs_warning << " TIME = " << mini << " [Minutes]" << std::endl; + GlobalV::ofs_warning << " -------------------------------------------------------" << std::endl; + GlobalV::ofs_warning << std::setprecision(6); + } } } @@ -255,7 +247,8 @@ size_t MemAvailable() mem_sum += std::stol(size); ++i; } - if (i == 3) return mem_sum; + if (i == 3) + return mem_sum; } throw std::runtime_error("read /proc/meminfo error in " + TO_STRING(__FILE__) + " line " + TO_STRING(__LINE__)); } diff --git a/source/module_base/global_function.h b/source/source_base/global_function.h similarity index 100% rename from source/module_base/global_function.h rename to source/source_base/global_function.h diff --git a/source/module_base/global_function_ddotreal.cpp b/source/source_base/global_function_ddotreal.cpp similarity index 97% rename from source/module_base/global_function_ddotreal.cpp rename to source/source_base/global_function_ddotreal.cpp index 1a401191f5..5f2c20f79a 100644 --- a/source/module_base/global_function_ddotreal.cpp +++ b/source/source_base/global_function_ddotreal.cpp @@ -1,6 +1,6 @@ #include "blas_connector.h" #include "global_function.h" -#include "module_base/parallel_reduce.h" +#include "source_base/parallel_reduce.h" namespace ModuleBase { diff --git a/source/module_base/global_variable.cpp b/source/source_base/global_variable.cpp similarity index 100% rename from source/module_base/global_variable.cpp rename to source/source_base/global_variable.cpp diff --git a/source/module_base/global_variable.h b/source/source_base/global_variable.h similarity index 100% rename from source/module_base/global_variable.h rename to source/source_base/global_variable.h diff --git a/source/module_base/gram_schmidt_orth-inl.h b/source/source_base/gram_schmidt_orth-inl.h similarity index 100% rename from source/module_base/gram_schmidt_orth-inl.h rename to source/source_base/gram_schmidt_orth-inl.h diff --git a/source/module_base/gram_schmidt_orth.h b/source/source_base/gram_schmidt_orth.h similarity index 100% rename from source/module_base/gram_schmidt_orth.h rename to source/source_base/gram_schmidt_orth.h diff --git a/source/module_base/grid/batch.cpp b/source/source_base/grid/batch.cpp similarity index 75% rename from source/module_base/grid/batch.cpp rename to source/source_base/grid/batch.cpp index 832323e62a..c85d5ecc8f 100644 --- a/source/module_base/grid/batch.cpp +++ b/source/source_base/grid/batch.cpp @@ -1,13 +1,14 @@ -#include "module_base/grid/batch.h" +#include "source_base/grid/batch.h" + +#include "source_base/blas_connector.h" +#include "source_base/lapack_connector.h" #include #include #include -#include "module_base/blas_connector.h" -#include "module_base/lapack_connector.h" - -namespace { +namespace +{ /** * @brief Divide a set of points into two subsets by the "MaxMin" algorithm. @@ -38,30 +39,34 @@ namespace { * @return The number of points in the first subset within idx. * */ -int _maxmin_divide(const double* grid, int* idx, int m) { +int _maxmin_divide(const double* grid, int* idx, int m) +{ assert(m > 1); - if (m == 2) { + if (m == 2) + { return 1; } std::vector centroid(3, 0.0); - for (int i = 0; i < m; ++i) { + for (int i = 0; i < m; ++i) + { int j = idx[i]; - centroid[0] += grid[3*j ]; - centroid[1] += grid[3*j + 1]; - centroid[2] += grid[3*j + 2]; + centroid[0] += grid[3 * j]; + centroid[1] += grid[3 * j + 1]; + centroid[2] += grid[3 * j + 2]; } centroid[0] /= m; centroid[1] /= m; centroid[2] /= m; // positions w.r.t. the centroid - std::vector R(3*m, 0.0); - for (int i = 0; i < m; ++i) { + std::vector R(3 * m, 0.0); + for (int i = 0; i < m; ++i) + { int j = idx[i]; - R[3*i ] = grid[3*j ] - centroid[0]; - R[3*i + 1] = grid[3*j + 1] - centroid[1]; - R[3*i + 2] = grid[3*j + 2] - centroid[2]; + R[3 * i] = grid[3 * j] - centroid[0]; + R[3 * i + 1] = grid[3 * j + 1] - centroid[1]; + R[3 * i + 2] = grid[3 * j + 2] - centroid[2]; } // The normal vector of the cut plane is taken to be the eigenvector @@ -81,11 +86,12 @@ int _maxmin_divide(const double* grid, int* idx, int m) { std::vector dist(m); dgemv_("T", &i3, &m, &d1, R.data(), &i3, n, &i1, &d0, dist.data(), &i1); - int *head = idx; + int* head = idx; std::reverse_iterator tail(idx + m), rend(idx); auto is_negative = [&dist, &idx](int& j) { return dist[&j - idx] < 0; }; - while ( ( head = std::find_if(head, idx + m, is_negative) ) < - ( tail = std::find_if_not(tail, rend, is_negative) ).base() ) { + while ((head = std::find_if(head, idx + m, is_negative)) + < (tail = std::find_if_not(tail, rend, is_negative)).base()) + { std::swap(*head, *tail); std::swap(dist[head - idx], dist[tail.base() - idx - 1]); ++head; @@ -97,14 +103,10 @@ int _maxmin_divide(const double* grid, int* idx, int m) { } // end of anonymous namespace - -std::vector Grid::Batch::maxmin( - const double* grid, - int* idx, - int m, - int m_thr -) { - if (m <= m_thr) { +std::vector Grid::Batch::maxmin(const double* grid, int* idx, int m, int m_thr) +{ + if (m <= m_thr) + { return std::vector{0}; } @@ -112,12 +114,8 @@ std::vector Grid::Batch::maxmin( std::vector left = maxmin(grid, idx, m_left, m_thr); std::vector right = maxmin(grid, idx + m_left, m - m_left, m_thr); - std::for_each(right.begin(), right.end(), - [m_left](int& x) { x += m_left; } - ); + std::for_each(right.begin(), right.end(), [m_left](int& x) { x += m_left; }); left.insert(left.end(), right.begin(), right.end()); return left; } - - diff --git a/source/module_base/grid/batch.h b/source/source_base/grid/batch.h similarity index 100% rename from source/module_base/grid/batch.h rename to source/source_base/grid/batch.h diff --git a/source/source_base/grid/delley.cpp b/source/source_base/grid/delley.cpp new file mode 100644 index 0000000000..425330ae73 --- /dev/null +++ b/source/source_base/grid/delley.cpp @@ -0,0 +1,376 @@ +#include "source_base/grid/delley.h" + +#include +#include +#include +#include + +namespace +{ + +struct DelleyTable +{ + const int lmax_; + const int ngrid_; + const int ntype_[6]; + const std::vector data_; +}; + +// Delley's table from the original article +const std::vector delley_table + = {{17, + 110, + {1, 1, 0, 3, 1, 0}, + { + 0.00000000000000000, + 0.00000000000000000, + 0.0038282704949371616, + 0.57735026918962576, + 0.57735026918962576, + 0.0097937375124875125, + 0.18511563534473617, + 0.18511563534473617, + 0.0082117372831911110, + 0.39568947305594191, + 0.39568947305594191, + 0.0095954713360709628, + 0.69042104838229218, + 0.21595729184584883, + 0.0099428148911781033, + 0.47836902881215020, + 0.00000000000000000, + 0.0096949963616630283, + }}, + {23, + 194, + {1, 1, 1, 4, 1, 1}, + { + 0.00000000000000000, 0.00000000000000000, 0.0017823404472446112, 0.57735026918962576, + 0.57735026918962576, 0.0055733831788487380, 0.70710678118654752, 0.00000000000000000, + 0.0057169059499771019, 0.44469331787174373, 0.44469331787174373, 0.0055187714672736137, + 0.28924656275754386, 0.28924656275754386, 0.0051582377118053831, 0.67129734426952263, + 0.31419699418258608, 0.0056087040825879968, 0.12993354476500669, 0.12993354476500669, + 0.0041067770281693941, 0.34577021976112827, 0.00000000000000000, 0.0050518460646148085, + 0.52511857244364202, 0.15904171053835295, 0.0055302489162330937, + }}, + {29, + 302, + {1, 1, 0, 6, 2, 2}, + { + 0.00000000000000000, 0.00000000000000000, 0.0008545911725128148, 0.57735026918962576, + 0.57735026918962576, 0.0035991192850255715, 0.70117664160895449, 0.12923867271051493, + 0.0036500458076772554, 0.65663294102196118, 0.37103417838482119, 0.0036048226014198817, + 0.47290541325810046, 0.47290541325810046, 0.0035767296617433671, 0.35156403455701051, + 0.35156403455701051, 0.0034497884243058833, 0.22196452362941784, 0.22196452362941784, + 0.0031089531224136753, 0.09618308522614784, 0.09618308522614784, 0.0023521014136891644, + 0.57189558918789607, 0.00000000000000000, 0.0036008209322164603, 0.26441528870606625, + 0.00000000000000000, 0.0029823449631718039, 0.54486773725807738, 0.25100347517704651, + 0.0035715405542733871, 0.41277240831685310, 0.12335485325833274, 0.0033923122050061702, + }}, + {35, + 434, + {1, 1, 1, 7, 2, 4}, + { + 0.00000000000000000, 0.00000000000000000, 0.0005265897968224436, 0.57735026918962576, + 0.57735026918962576, 0.0025123174189273072, 0.70710678118654752, 0.00000000000600000, + 0.0025482199720026072, 0.69093463075091106, 0.21264682470755207, 0.0025304038011863550, + 0.64566647074242561, 0.40771266489776951, 0.0025132671745975644, 0.49143426377847465, + 0.49143426377847465, 0.0025017251684029361, 0.39272597633680022, 0.39272597633680022, + 0.0024453734373129800, 0.28612890103076384, 0.28612890103076384, 0.0023026947822274158, + 0.17748360546091578, 0.17748360546091578, 0.0020142790209185282, 0.07568084367178018, + 0.07568084367178018, 0.0014624956215946138, 0.21027252285730696, 0.00000000000000000, + 0.0019109512821795323, 0.47159869115131592, 0.00000000000000000, 0.0024174423756389808, + 0.33443631453434549, 0.09921769636429237, 0.0022366077604378487, 0.45023303825826254, + 0.20548236964030437, 0.0024169300443247753, 0.55501523610768072, 0.31042840351665415, + 0.0024966440545530860, 0.59051570489252711, 0.10680182607580483, 0.0025122368545634951, + }}, + {41, + 590, + {1, 1, 0, 8, 4, 6}, + { + 0.00000000000000000, 0.00000000000000000, 0.0001009005753378758, 0.57735026918962576, + 0.57735026918962576, 0.0018514016873890461, 0.70404760433146996, 0.09291900596883211, + 0.0018686219518306975, 0.68084561988024238, 0.26999719217017240, 0.0018648696345606001, + 0.63723669159418917, 0.43342680786054810, 0.0018497643975168892, 0.50447558060926046, + 0.50447558060926046, 0.0018450277740822388, 0.42175447334398773, 0.42175447334398773, + 0.0018164174988262214, 0.33201962086729379, 0.33201962086729379, 0.0017449464690023229, + 0.23917494336556047, 0.23917494336556047, 0.0016278016126848035, 0.14024070738935403, + 0.14024070738935403, 0.0015576827519901693, 0.09161634328605240, 0.00000000000000000, + 0.0012680968886048433, 0.20326292518419433, 0.00000000000000000, 0.0011183965414769017, + 0.39364042372978295, 0.00000000000000000, 0.0017287035120530033, 0.61262355812929648, + 0.00000000000000000, 0.0018551905629473527, 0.28114771623428322, 0.08959875911893791, + 0.0014697353123693616, 0.38175470908581117, 0.17327600238498666, 0.0016819651914742022, + 0.47452376478986998, 0.26422260656245780, 0.0017876372876796954, 0.56127905075920534, + 0.35189965873835832, 0.0018400735685528423, 0.50324791996964975, 0.08886791018186295, + 0.0018072536817113700, 0.59768324320748616, 0.18154345643517542, 0.0018527289739424312, + }}, + {47, + 770, + {1, 1, 1, 9, 4, 9}, + { + 0.00000000000000000, 0.00000000000000000, 0.0011685335608691628, 0.57735026918962576, + 0.57735026918962576, 0.0014121215930643264, 0.70710678118654752, 0.00000000000000000, + 0.0014468645950992776, 0.11441365123336336, 0.11441365123336336, 0.0010478418864629224, + 0.19944675708548970, 0.19944675708548970, 0.0012392547584848484, 0.28401278368259530, + 0.28401278368259530, 0.0013259295792415379, 0.36646411416548296, 0.36646411416548296, + 0.0013756097758625958, 0.44356118052513995, 0.44356118052513995, 0.0013999348863558624, + 0.51435709575333968, 0.51435709575333968, 0.0014096221218822673, 0.63052081196671812, + 0.45264446462279973, 0.0014108746499638577, 0.67164784337293865, 0.31269529735024947, + 0.0014134887639034478, 0.69812332010174177, 0.15889512220405632, 0.0014366946685816802, + 0.12047667931264991, 0.00000000000000000, 0.0010901543574180667, 0.30940302315480606, + 0.00000000000000000, 0.0001869137844803852, 0.34884276430183016, 0.00000000000000000, + 0.0011284267652336505, 0.53224214285417946, 0.00000000000000000, 0.0013844558026568455, + 0.23249923409267532, 0.06616159933437003, 0.0011853923885095502, 0.32477344409682044, + 0.14568618765136356, 0.0012949021664637693, 0.41056989039349425, 0.22832839132127622, + 0.0013525857420363760, 0.49213658085114203, 0.30714431901543855, 0.0013925025908786082, + 0.56548849812588755, 0.38271180625074657, 0.0014073257894372725, 0.43713473693946563, + 0.07970715187939190, 0.0013128954307755017, 0.52320749473197761, 0.15892620239864833, + 0.0013784632898490457, 0.60283033994386521, 0.23667220253873893, 0.0014125450609821936, + 0.62037164721742807, 0.07982328826030880, 0.0014289835314095131, + }}, + {53, + 974, + {1, 1, 0, 12, 4, 12}, + { + 0.00000000000000000, 0.00000000800000000, 0.0001438294190527431, 0.57735026918962576, + 0.57735026918962576, 0.0011257722882870041, 0.04292963545341347, 0.04292963545341347, + 0.0004948029341949241, 0.10514268540864042, 0.10514268540864042, 0.0007357990109125470, + 0.17500248676230874, 0.17500248676230874, 0.0008889132771304384, 0.24776533796502568, + 0.24776533796502568, 0.0009888347838921435, 0.32065671239559574, 0.32065671239559574, + 0.0010532996817094706, 0.39165207498499835, 0.39165207498499835, 0.0010927788070145785, + 0.45908258741876237, 0.45908258741876237, 0.0011143893940632272, 0.52145638884158605, + 0.52145638884158605, 0.0011237247880515553, 0.62531702446541989, 0.46685890569574328, + 0.0011252393252438136, 0.66379267445231699, 0.34461365423743822, 0.0011261532718159050, + 0.69104103984983007, 0.21195415185018465, 0.0011302869311238408, 0.70529070074577603, + 0.07162440144995566, 0.0011349865343639549, 0.12366867626579899, 0.00000000000000000, + 0.0006823367927109931, 0.29407771144683870, 0.00000000000000000, 0.0009454158160447096, + 0.46977538492076491, 0.00000000000000000, 0.0010744299753856791, 0.63345632411395669, + 0.00000000000000000, 0.0011293000865691317, 0.20291287527775228, 0.05974048614181342, + 0.0008436884500901954, 0.46026219424840539, 0.13757604084736365, 0.0010752557204488846, + 0.50306739996620357, 0.33910165263362857, 0.0011085772368644620, 0.28176064224421343, + 0.12716751914398195, 0.0009566475323783357, 0.43315612917201574, 0.26931207404135125, + 0.0010806632507173907, 0.62561673585808142, 0.14197864526019183, 0.0011267971311962946, + 0.37983952168591567, 0.06709284600738255, 0.0010225687153580612, 0.55175054214235205, + 0.07057738183256172, 0.0011089602677131075, 0.60296191561591869, 0.27838884778821546, + 0.0011227906534357658, 0.35896063295890958, 0.19795789389174069, 0.0010324018471174598, + 0.53486664381354765, 0.20873070611032740, 0.0011072493822838539, 0.56749975460743735, + 0.40551221378728359, 0.0011217800485199721, + }}, + {59, + 1202, + {1, 1, 1, 13, 4, 16}, + { + 0.00006000000000000, 0.00000000000000000, 0.0001105189233267572, 0.57735026918962576, + 0.57735026918962576, 0.0009133159786443561, 0.70710678118654752, 0.00000000000000000, + 0.0009205232738090741, 0.03712636449657089, 0.03712636449657089, 0.0003690421898017899, + 0.09140060412262223, 0.09140060412262223, 0.0005603990928680660, 0.15310778524699062, + 0.15310778524699062, 0.0006865297629282609, 0.21809288916606116, 0.21809288916606116, + 0.0007720338551145630, 0.28398745322001746, 0.28398745322001746, 0.0008301545958894795, + 0.34911776009637644, 0.34911776009637644, 0.0008686692550179628, 0.41214314614443092, + 0.41214314614443092, 0.0008927076285846890, 0.47189936271491266, 0.47189936271491266, + 0.0009060820238568219, 0.52731454528423366, 0.52731454528423366, 0.0009119777254940867, + 0.62094753324440192, 0.47838093807695216, 0.0009128720138604181, 0.65697227118572905, + 0.36983086645942597, 0.0009130714935691735, 0.68417883090701434, 0.25258395570071777, + 0.0009152873784554116, 0.70126043301236308, 0.12832618665972300, 0.0009187436274321654, + 0.10723822154781661, 0.00000000000000000, 0.0005176977312965694, 0.25820689594969680, + 0.00006000000000000, 0.0007331143682101417, 0.41727529553067168, 0.00000000000000000, + 0.0008463232836379928, 0.57003669117925033, 0.00000000000000000, 0.0009031122694253992, + 0.17717740226153253, 0.05210639477011284, 0.0006485778453163257, 0.24757164634262876, + 0.11156409571564867, 0.0007435030910982369, 0.31736152466119767, 0.17465516775786261, + 0.0008101731497468018, 0.38542911506692237, 0.23902784793817240, 0.0008556299257311812, + 0.45074225931570644, 0.30294669735289819, 0.0008850282341265444, 0.51235184864198708, + 0.36498322605976536, 0.0009022692938426915, 0.56937024984684411, 0.42386447815223403, + 0.0009105760258970126, 0.33546162890664885, 0.05905888853235508, 0.0007998527891839054, + 0.40902684270853572, 0.12172350510959870, 0.0008483389574594331, 0.47853206759224352, + 0.18575051945473351, 0.0008811048182425720, 0.54343035696939004, 0.24941121623622365, + 0.0009010091677105086, 0.60311616930963100, 0.31122759471496082, 0.0009107813579482705, + 0.49322211848512846, 0.06266250624154169, 0.0008803208679738260, 0.56321230207620997, + 0.12677748006842827, 0.0009021342299040653, 0.62698055090243917, 0.19060182227792370, + 0.0009131578003189435, 0.63942796347491023, 0.06424549224220589, 0.0009158016174693465, + }}}; // end of the definition of "delley_table" + +// size of each group of points with octahedral symmetry +// 6: (1, 0, 0) x sign x permutation (vertices) +// 8: (sqrt(1/3), sqrt(1/3), sqrt(1/3)) x sign (face centers) +// 12: (sqrt(2)/2, sqrt(2)/2, 0) x sign x permutation (edge centers) +// 24a: (u, u, sqrt(1-2u^2)) x sign x permutation +// 24b: (u, 0, sqrt(1-u^2)) x sign x permutation +// 48: (u, v, sqrt(1-u^2-v^2)) x sign x permutation +const int group_size[] = {6, 8, 12, 24, 24, 48}; + +using Fill_t = std::function; + +// functors that fill the grid group-wise +const std::vector fill = { + // (1, 0, 0) x sign x permutation (vertices) + [](double* grid, double, double) { + for (int i = 0; i < 3; ++i) + { + for (double one: {-1.0, 1.0}) + { + grid[i] = one; + grid[(i + 1) % 3] = 0.0; + grid[(i + 2) % 3] = 0.0; + std::advance(grid, 3); + } + } + }, + + // (sqrt(1/3), sqrt(1/3), sqrt(1/3)) x sign (face centers) + [](double* grid, double, double) { + const double a = std::sqrt(3) / 3.0; + for (int xsign: {-1, 1}) + { + for (int ysign: {-1, 1}) + { + for (int zsign: {-1, 1}) + { + grid[0] = xsign * a; + grid[1] = ysign * a; + grid[2] = zsign * a; + std::advance(grid, 3); + } + } + } + }, + + // (sqrt(2)/2, sqrt(2)/2, 0) x sign x permutation (edge centers) + [](double* grid, double, double) { + const double a = std::sqrt(2) / 2.0; + for (int i = 0; i < 3; ++i) + { + for (int sign1: {-1, 1}) + { + for (int sign2: {-1, 1}) + { + grid[i] = 0; + grid[(i + 1) % 3] = sign1 * a; + grid[(i + 2) % 3] = sign2 * a; + std::advance(grid, 3); + } + } + } + }, + + // (u, u, sqrt(1-2u^2)) x sign x permutation + [](double* grid, double x, double y) { + double u = x == y ? x : std::sqrt(1.0 - x * x - y * y); + double v = std::sqrt(1.0 - 2.0 * u * u); + for (int i = 0; i < 3; ++i) + { + for (int sign1: {-1, 1}) + { + for (int sign2: {-1, 1}) + { + for (int sign3: {-1, 1}) + { + grid[i] = sign1 * u; + grid[(i + 1) % 3] = sign2 * u; + grid[(i + 2) % 3] = sign3 * v; + std::advance(grid, 3); + } + } + } + } + }, + + // (u, 0, sqrt(1-u^2)) x sign x permutation + [](double* grid, double x, double y) { + double u = x > 0 ? x : y; + double v = std::sqrt(1.0 - u * u); + for (int i0 = 0; i0 < 3; ++i0) + { + for (int iu0: {1, 2}) + { + for (int sign_u: {-1, 1}) + { + for (int sign_v: {-1, 1}) + { + grid[i0] = 0; + grid[(i0 + iu0) % 3] = sign_u * u; + grid[(i0 - iu0 + 3) % 3] = sign_v * v; + std::advance(grid, 3); + } + } + } + } + }, + + // (u, v, sqrt(1-u^2-v^2)) x sign x permutation + [](double* grid, double x, double y) { + double r = x; + double s = y; + double t = std::sqrt(1.0 - r * r - s * s); + for (int ir = 0; ir < 3; ++ir) + { + for (int irs: {1, 2}) + { + for (int sign_r: {-1, 1}) + { + for (int sign_s: {-1, 1}) + { + for (int sign_t: {-1, 1}) + { + grid[ir] = sign_r * r; + grid[(ir + irs) % 3] = sign_s * s; + grid[(ir - irs + 3) % 3] = sign_t * t; + std::advance(grid, 3); + } + } + } + } + } + }, +}; // end of the definition of "fill" + +const DelleyTable* _find_delley(int& lmax) +{ + // NOTE: this function assumes elements in "delley_table" are + // arranged such that their members "lmax_" are in ascending order. + auto tab = std::find_if(delley_table.begin(), delley_table.end(), [lmax](const DelleyTable& t) { + return t.lmax_ >= lmax; + }); + return tab == delley_table.end() ? nullptr : (lmax = tab->lmax_, &(*tab)); +} + +void _delley(const DelleyTable* tab, double* grid, double* weight) +{ + assert(tab); + const double* ptr = &tab->data_[0]; + for (int itype = 0; itype < 6; ++itype) + { + int stride = group_size[itype]; + for (int i = 0; i < tab->ntype_[itype]; ++i, ptr += 3, grid += 3 * stride, weight += stride) + { + fill[itype](grid, ptr[0], ptr[1]); + std::fill(weight, weight + stride, ptr[2]); + } + } +} + +} // end of anonymous namespace + +int Grid::Angular::ngrid_delley(int& lmax) +{ + auto tab = _find_delley(lmax); + return tab ? tab->ngrid_ : -1; +} + +int Grid::Angular::delley(int& lmax, double* grid, double* weight) +{ + auto tab = _find_delley(lmax); + return tab ? _delley(tab, grid, weight), 0 : -1; +} + +int Grid::Angular::delley(int& lmax, std::vector& grid, std::vector& weight) +{ + auto tab = _find_delley(lmax); + if (!tab) + { + return -1; + } + grid.resize(3 * tab->ngrid_); + weight.resize(tab->ngrid_); + _delley(tab, grid.data(), weight.data()); + return 0; +} diff --git a/source/module_base/grid/delley.h b/source/source_base/grid/delley.h similarity index 100% rename from source/module_base/grid/delley.h rename to source/source_base/grid/delley.h diff --git a/source/module_base/grid/partition.cpp b/source/source_base/grid/partition.cpp similarity index 69% rename from source/module_base/grid/partition.cpp rename to source/source_base/grid/partition.cpp index 20ce3edb26..05d682d31b 100644 --- a/source/module_base/grid/partition.cpp +++ b/source/source_base/grid/partition.cpp @@ -1,33 +1,32 @@ -#include "module_base/grid/partition.h" -#include "module_base/constants.h" +#include "source_base/grid/partition.h" +#include "source_base/constants.h" + +#include +#include #include #include #include -#include #include -#include -namespace Grid { -namespace Partition { +namespace Grid +{ +namespace Partition +{ const double stratmann_a = 0.64; -double w_becke( - int nR0, - const double* drR, - const double* dRR, - int nR, - const int* iR, - int c -) { +double w_becke(int nR0, const double* drR, const double* dRR, int nR, const int* iR, int c) +{ assert(nR > 0 && nR0 >= nR); std::vector P(nR, 1.0); - for (int i = 0; i < nR; ++i) { + for (int i = 0; i < nR; ++i) + { int I = iR[i]; - for (int j = i + 1; j < nR; ++j) { + for (int j = i + 1; j < nR; ++j) + { int J = iR[j]; - double mu = (drR[I] - drR[J]) / dRR[I*nR0 + J]; + double mu = (drR[I] - drR[J]) / dRR[I * nR0 + J]; double s = s_becke(mu); P[I] *= s; P[J] *= (1.0 - s); // s(-mu) = 1 - s(mu) @@ -36,9 +35,9 @@ double w_becke( return P[c] / std::accumulate(P.begin(), P.end(), 0.0); } - -double s_becke(double mu) { - /* +double s_becke(double mu) +{ + /* * Becke's iterated polynomials (3rd order) * * s(mu) = 0.5 * (1 - p(p(p(mu)))) @@ -46,29 +45,23 @@ double s_becke(double mu) { * p(x) = 0.5 * x * (3 - x^2) * */ - double p = 0.5 * mu * (3.0 - mu*mu); - p = 0.5 * p * (3.0 - p*p); - p = 0.5 * p * (3.0 - p*p); + double p = 0.5 * mu * (3.0 - mu * mu); + p = 0.5 * p * (3.0 - p * p); + p = 0.5 * p * (3.0 - p * p); return 0.5 * (1.0 - p); } - -double w_stratmann( - int nR0, - const double* drR, - const double* dRR, - const double* drR_thr, - int nR, - int* iR, - int c -) { +double w_stratmann(int nR0, const double* drR, const double* dRR, const double* drR_thr, int nR, int* iR, int c) +{ assert(nR > 0 && nR0 >= nR); int I = iR[c], J = 0; // If r falls within the exclusive zone of a center, return immediately. - for (int j = 0; j < nR; ++j) { + for (int j = 0; j < nR; ++j) + { J = iR[j]; - if (drR[J] <= drR_thr[J]) { + if (drR[J] <= drR_thr[J]) + { return static_cast(I == J); } } @@ -82,15 +75,16 @@ double w_stratmann( std::swap(iR[0], iR[c]); std::vector P(nR); - for (int j = 1; j < nR; ++j) { + for (int j = 1; j < nR; ++j) + { J = iR[j]; - double mu = (drR[I] - drR[J]) / dRR[I*nR0 + J]; + double mu = (drR[I] - drR[J]) / dRR[I * nR0 + J]; P[j] = s_stratmann(mu); } - P[0] = std::accumulate(P.begin() + 1, P.end(), 1.0, - std::multiplies()); + P[0] = std::accumulate(P.begin() + 1, P.end(), 1.0, std::multiplies()); - if (P[0] == 0.0 || P[0] == 1.0) { + if (P[0] == 0.0 || P[0] == 1.0) + { std::swap(iR[0], iR[c]); // restore the original order return P[0]; } @@ -99,11 +93,13 @@ double w_stratmann( // have to be calculated in order to get the normalized weight. std::for_each(P.begin() + 1, P.end(), [](double& s) { s = 1.0 - s; }); - for (int i = 1; i < nR; ++i) { + for (int i = 1; i < nR; ++i) + { I = iR[i]; - for (int j = i + 1; j < nR; ++j) { + for (int j = i + 1; j < nR; ++j) + { J = iR[j]; - double mu = (drR[I] - drR[J]) / dRR[I*nR0 + J]; + double mu = (drR[I] - drR[J]) / dRR[I * nR0 + J]; double s = s_stratmann(mu); P[i] *= s; P[j] *= (1.0 - s); // s(-mu) = 1 - s(mu) @@ -114,8 +110,8 @@ double w_stratmann( return P[0] / std::accumulate(P.begin(), P.end(), 0.0); } - -double s_stratmann(double mu) { +double s_stratmann(double mu) +{ /* * Stratmann's piecewise cell function * @@ -137,6 +133,5 @@ double s_stratmann(double mu) { return 0.5 * (1.0 - g); } - } // end of namespace Partition } // end of namespace Grid diff --git a/source/module_base/grid/partition.h b/source/source_base/grid/partition.h similarity index 100% rename from source/module_base/grid/partition.h rename to source/source_base/grid/partition.h diff --git a/source/source_base/grid/radial.cpp b/source/source_base/grid/radial.cpp new file mode 100644 index 0000000000..f67f67ee2d --- /dev/null +++ b/source/source_base/grid/radial.cpp @@ -0,0 +1,67 @@ +#include "source_base/grid/radial.h" + +#include + +namespace Grid +{ +namespace Radial +{ + +void baker(int nbase, double R, double* r, double* w, int mult) +{ + int n = (nbase + 1) * mult - 1; + double r0 = -R / std::log((2.0 * nbase + 1.0) / ((nbase + 1) * (nbase + 1))); + for (int i = 1; i <= n; ++i) + { + r[i - 1] = -r0 * std::log(1.0 - static_cast(i) * i / ((n + 1) * (n + 1))); + w[i - 1] = 2.0 * i * r0 * r[i - 1] * r[i - 1] / ((n + 1 + i) * (n + 1 - i)); + } +} + +void baker(int nbase, double R, std::vector& r, std::vector& w, int mult) +{ + int n = (nbase + 1) * mult - 1; + r.resize(n); + w.resize(n); + baker(nbase, R, r.data(), w.data(), mult); +} + +void murray(int n, double R, double* r, double* w) +{ + for (int i = 1; i <= n; ++i) + { + double x = static_cast(i) / (n + 1); + r[i - 1] = std::pow(x / (1.0 - x), 2) * R; + w[i - 1] = 2.0 / (n + 1) * std::pow(R, 3) * std::pow(x, 5) / std::pow(1.0 - x, 7); + } +} + +void treutler_m4(int n, double R, double* r, double* w, double alpha) +{ + const double pi = std::acos(-1.0); + const double inv_ln2 = 1.0 / std::log(2.0); + + for (int i = 1; i <= n; ++i) + { + double x = std::cos(i * pi / (n + 1)); + double beta = std::sqrt((1.0 + x) / (1.0 - x)); + double gamma = std::log((1.0 - x) / 2.0); + double delta = std::pow(1.0 + x, alpha); + r[i - 1] = -R * inv_ln2 * delta * gamma; + w[i - 1] = pi / (n + 1) * std::pow(delta * R * inv_ln2, 3) * gamma * gamma * (beta - alpha / beta * gamma); + } +} + +void mura(int n, double R, double* r, double* w) +{ + for (int i = 1; i <= n; ++i) + { + double x = static_cast(i) / (n + 1); + double alpha = 1.0 - x * x * x; + r[i - 1] = -R * std::log(alpha); + w[i - 1] = 3.0 * R * std::pow(x * r[i - 1], 2) / ((n + 1) * alpha); + } +} + +} // end of namespace Radial +} // end of namespace Grid diff --git a/source/module_base/grid/radial.h b/source/source_base/grid/radial.h similarity index 100% rename from source/module_base/grid/radial.h rename to source/source_base/grid/radial.h diff --git a/source/module_base/grid/test/CMakeLists.txt b/source/source_base/grid/test/CMakeLists.txt similarity index 100% rename from source/module_base/grid/test/CMakeLists.txt rename to source/source_base/grid/test/CMakeLists.txt diff --git a/source/module_base/grid/test/test_batch.cpp b/source/source_base/grid/test/test_batch.cpp similarity index 60% rename from source/module_base/grid/test/test_batch.cpp rename to source/source_base/grid/test/test_batch.cpp index 74324bc47b..2fdc903079 100644 --- a/source/module_base/grid/test/test_batch.cpp +++ b/source/source_base/grid/test/test_batch.cpp @@ -1,4 +1,4 @@ -#include "module_base/grid/batch.h" +#include "source_base/grid/batch.h" #include "gtest/gtest.h" #include @@ -11,11 +11,9 @@ using namespace Grid::Batch; - -class BatchTest: public ::testing::Test +class BatchTest : public ::testing::Test { -protected: - + protected: std::vector grid_; std::vector idx_; @@ -33,7 +31,6 @@ class BatchTest: public ::testing::Test // plane are equivalent in terms of the maxmin optimization problem. // This means eigenvectors are arbitrary in this case. - // parameters for a random cluster const int n_grid_rand_ = 1000; const int n_batch_rand_ = 200; @@ -43,16 +40,14 @@ class BatchTest: public ::testing::Test const double zc_ = 2.0; }; - -void gen_random( - int ngrid, - double xc, - double yc, - double zc, - double width, - std::vector& grid, - std::vector& idx -) { +void gen_random(int ngrid, + double xc, + double yc, + double zc, + double width, + std::vector& grid, + std::vector& idx) +{ // Generates a set of points centered around (xc, yc, zc). @@ -61,10 +56,11 @@ void gen_random( std::uniform_real_distribution dis(-width, width); grid.resize(3 * ngrid); - for (int i = 0; i < ngrid; ++i) { - grid[3*i ] = xc + dis(gen); - grid[3*i + 1] = yc + dis(gen); - grid[3*i + 2] = zc + dis(gen); + for (int i = 0; i < ngrid; ++i) + { + grid[3 * i] = xc + dis(gen); + grid[3 * i + 1] = yc + dis(gen); + grid[3 * i + 2] = zc + dis(gen); } idx.resize(ngrid); @@ -72,16 +68,14 @@ void gen_random( std::shuffle(idx.begin(), idx.end(), gen); } - -void gen_octant( - int n_each, - double offset_x, - double offset_y, - double offset_z, - double width, - std::vector& grid, - std::vector& idx -) { +void gen_octant(int n_each, + double offset_x, + double offset_y, + double offset_z, + double width, + std::vector& grid, + std::vector& idx) +{ // Generates a set of points consisting of 8 well-separated, equal-sized // clusters located in individual octants. @@ -93,13 +87,17 @@ void gen_octant( int ngrid = 8 * n_each; grid.resize(3 * ngrid); int I = 0; - for (int sign_x : {-1, 1}) { - for (int sign_y : {-1, 1}) { - for (int sign_z : {-1, 1}) { - for (int i = 0; i < n_each; ++i, ++I) { - grid[3*I ] = sign_x * offset_x + dis(gen); - grid[3*I + 1] = sign_y * offset_y + dis(gen); - grid[3*I + 2] = sign_z * offset_z + dis(gen); + for (int sign_x: {-1, 1}) + { + for (int sign_y: {-1, 1}) + { + for (int sign_z: {-1, 1}) + { + for (int i = 0; i < n_each; ++i, ++I) + { + grid[3 * I] = sign_x * offset_x + dis(gen); + grid[3 * I + 1] = sign_y * offset_y + dis(gen); + grid[3 * I + 2] = sign_z * offset_z + dis(gen); } } } @@ -110,46 +108,43 @@ void gen_octant( std::shuffle(idx.begin(), idx.end(), gen); } - -bool is_same_octant(int ngrid, const double* grid) { - if (ngrid == 0) { +bool is_same_octant(int ngrid, const double* grid) +{ + if (ngrid == 0) + { return true; } const bool is_positive_x = grid[0] > 0; const bool is_positive_y = grid[1] > 0; const bool is_positive_z = grid[2] > 0; const double* end = grid + 3 * ngrid; - for (; grid != end; grid += 3) { - if ( is_positive_x != (grid[0] > 0) || - is_positive_y != (grid[1] > 0) || - is_positive_z != (grid[2] > 0) ) { + for (; grid != end; grid += 3) + { + if (is_positive_x != (grid[0] > 0) || is_positive_y != (grid[1] > 0) || is_positive_z != (grid[2] > 0)) + { return false; } } return true; } - -bool good_batch_size( - const std::vector& idx, - const std::vector& delim, - int n_batch_thr -) { +bool good_batch_size(const std::vector& idx, const std::vector& delim, int n_batch_thr) +{ // checks if the sizes of batches are within the specified limit bool flag = (delim[0] == 0); size_t i = 1; - while (flag && i < delim.size()) { - int sz_batch = delim[i] - delim[i-1]; + while (flag && i < delim.size()) + { + int sz_batch = delim[i] - delim[i - 1]; flag = flag && (sz_batch > 0) && (sz_batch <= n_batch_thr); ++i; } - return flag && ( ((int)idx.size() - delim.back()) < n_batch_thr ); + return flag && (((int)idx.size() - delim.back()) < n_batch_thr); } - TEST_F(BatchTest, MaxMinRandom) { // This test verifies that the sizes of batches produced by maxmin @@ -157,58 +152,56 @@ TEST_F(BatchTest, MaxMinRandom) gen_random(n_grid_rand_, xc_, yc_, zc_, width_rand_, grid_, idx_); - std::vector delim = - maxmin(grid_.data(), idx_.data(), idx_.size(), n_batch_rand_); + std::vector delim = maxmin(grid_.data(), idx_.data(), idx_.size(), n_batch_rand_); EXPECT_TRUE(good_batch_size(idx_, delim, n_batch_rand_)); // write grid, idx & delim to file - //FILE* fp = fopen("grid.dat", "w"); - //for (size_t i = 0; i < grid_.size() / 3; ++i) { + // FILE* fp = fopen("grid.dat", "w"); + // for (size_t i = 0; i < grid_.size() / 3; ++i) { // std::fprintf(fp, "% 12.6f % 12.6f % 12.6f\n", // grid_[3*i], grid_[3*i + 1], grid_[3*i + 2]); //} - //fclose(fp); - - //fp = fopen("idx.dat", "w"); - //for (size_t i = 0; i < idx_.size(); ++i) { - // std::fprintf(fp, "%d\n", idx_[i]); - //} - //fclose(fp); - - //fp = fopen("delim.dat", "w"); - //for (size_t i = 0; i < delim.size(); ++i) { - // std::fprintf(fp, "%d\n", delim[i]); - //} - //fclose(fp); + // fclose(fp); + + // fp = fopen("idx.dat", "w"); + // for (size_t i = 0; i < idx_.size(); ++i) { + // std::fprintf(fp, "%d\n", idx_[i]); + // } + // fclose(fp); + + // fp = fopen("delim.dat", "w"); + // for (size_t i = 0; i < delim.size(); ++i) { + // std::fprintf(fp, "%d\n", delim[i]); + // } + // fclose(fp); } - TEST_F(BatchTest, MaxMinOctant) { // This test applies maxmin to a set of points consisting of 8 // well-separated, equal-sized clusters located in individual octants. // The resulting batches should be able to recover this structure. - gen_octant(n_batch_oct_, offset_x_, offset_y_, offset_z_, width_oct_, - grid_, idx_); + gen_octant(n_batch_oct_, offset_x_, offset_y_, offset_z_, width_oct_, grid_, idx_); - std::vector delim = - maxmin(grid_.data(), idx_.data(), idx_.size(), n_batch_oct_); + std::vector delim = maxmin(grid_.data(), idx_.data(), idx_.size(), n_batch_oct_); EXPECT_EQ(delim.size(), 8); std::vector grid_batch(3 * n_batch_oct_); - for (int i = 0; i < 8; ++i) { + for (int i = 0; i < 8; ++i) + { EXPECT_EQ(delim[i], i * n_batch_oct_); // collect points within the present batch - for (int j = 0; j < n_batch_oct_; ++j) { + for (int j = 0; j < n_batch_oct_; ++j) + { int ig = idx_[delim[i] + j]; - grid_batch[3*j ] = grid_[3*ig ]; - grid_batch[3*j + 1] = grid_[3*ig + 1]; - grid_batch[3*j + 2] = grid_[3*ig + 2]; + grid_batch[3 * j] = grid_[3 * ig]; + grid_batch[3 * j + 1] = grid_[3 * ig + 1]; + grid_batch[3 * j + 2] = grid_[3 * ig + 2]; } // verify that points in a batch reside in the same octant @@ -216,7 +209,6 @@ TEST_F(BatchTest, MaxMinOctant) } } - int main(int argc, char** argv) { #ifdef __MPI diff --git a/source/module_base/grid/test/test_delley.cpp b/source/source_base/grid/test/test_delley.cpp similarity index 70% rename from source/module_base/grid/test/test_delley.cpp rename to source/source_base/grid/test/test_delley.cpp index 2aa9b38df0..1e814287bc 100644 --- a/source/module_base/grid/test/test_delley.cpp +++ b/source/source_base/grid/test/test_delley.cpp @@ -1,5 +1,5 @@ -#include "module_base/grid/delley.h" -#include "module_base/ylm.h" +#include "source_base/grid/delley.h" +#include "source_base/ylm.h" #include "gtest/gtest.h" #include @@ -10,42 +10,49 @@ using namespace Grid::Angular; // mock the function to prevent unnecessary dependency -namespace ModuleBase { -void WARNING_QUIT(const std::string&, const std::string&) {} +namespace ModuleBase +{ +void WARNING_QUIT(const std::string&, const std::string&) +{ } +} // namespace ModuleBase -class DelleyTest: public ::testing::Test { -protected: +class DelleyTest : public ::testing::Test +{ + protected: void randgen(int lmax, std::vector& coef); const double tol = 1e-12; }; - -void DelleyTest::randgen(int lmax, std::vector& coef) { +void DelleyTest::randgen(int lmax, std::vector& coef) +{ coef.resize((lmax + 1) * (lmax + 1)); // fill coef with uniformly distributed random numbers std::random_device rd; std::mt19937 gen(rd()); std::uniform_real_distribution dis(0.0, 1.0); - for (size_t i = 0; i < coef.size(); ++i) { + for (size_t i = 0; i < coef.size(); ++i) + { coef[i] = dis(gen); } // normalize the coefficients double fac = 0.0; - for (size_t i = 0; i < coef.size(); ++i) { + for (size_t i = 0; i < coef.size(); ++i) + { fac += coef[i] * coef[i]; } fac = 1.0 / std::sqrt(fac); - for (size_t i = 0; i < coef.size(); ++i) { + for (size_t i = 0; i < coef.size(); ++i) + { coef[i] *= fac; } } - -TEST_F(DelleyTest, NumGrid) { +TEST_F(DelleyTest, NumGrid) +{ int lmax = 5; int ngrid = ngrid_delley(lmax); EXPECT_EQ(lmax, 17); @@ -72,9 +79,9 @@ TEST_F(DelleyTest, NumGrid) { EXPECT_EQ(ngrid, -1); } - -TEST_F(DelleyTest, Accuracy) { - /* +TEST_F(DelleyTest, Accuracy) +{ + /* * Given * * f = c[0]*Y00 + c[1]*Y10 + c[2]*Y11 + ..., @@ -90,18 +97,20 @@ TEST_F(DelleyTest, Accuracy) { */ std::vector grid, weight, coef; - for (int grid_lmax = 17; grid_lmax < 60; grid_lmax +=6) { + for (int grid_lmax = 17; grid_lmax < 60; grid_lmax += 6) + { delley(grid_lmax, grid, weight); int func_lmax = grid_lmax / 2; randgen(func_lmax, coef); double val = 0.0; std::vector ylm_real; - for (size_t i = 0; i < weight.size(); i++) { - ModuleBase::Ylm::sph_harm(func_lmax, - grid[3*i], grid[3*i+1], grid[3*i+2], ylm_real); + for (size_t i = 0; i < weight.size(); i++) + { + ModuleBase::Ylm::sph_harm(func_lmax, grid[3 * i], grid[3 * i + 1], grid[3 * i + 2], ylm_real); double tmp = 0.0; - for (size_t j = 0; j < coef.size(); ++j) { + for (size_t j = 0; j < coef.size(); ++j) + { tmp += coef[j] * ylm_real[j]; } val += weight[i] * tmp * tmp; @@ -109,18 +118,18 @@ TEST_F(DelleyTest, Accuracy) { val *= 4.0 * std::acos(-1.0); double val_ref = 0.0; - for (size_t i = 0; i < coef.size(); ++i) { + for (size_t i = 0; i < coef.size(); ++i) + { val_ref += coef[i] * coef[i]; } double abs_diff = std::abs(val - val_ref); EXPECT_LT(abs_diff, tol); - //printf("order = %2i val_ref = %8.5f abs_diff = %8.5e\n", - // grid_lmax, val_ref, abs_diff); + // printf("order = %2i val_ref = %8.5f abs_diff = %8.5e\n", + // grid_lmax, val_ref, abs_diff); } } - int main(int argc, char** argv) { #ifdef __MPI diff --git a/source/module_base/grid/test/test_partition.cpp b/source/source_base/grid/test/test_partition.cpp similarity index 54% rename from source/module_base/grid/test/test_partition.cpp rename to source/source_base/grid/test/test_partition.cpp index 057f4c43da..0c853dcba3 100644 --- a/source/module_base/grid/test/test_partition.cpp +++ b/source/source_base/grid/test/test_partition.cpp @@ -1,15 +1,15 @@ -#include "module_base/grid/partition.h" -#include "module_base/grid/radial.h" -#include "module_base/grid/delley.h" -#include "module_base/constants.h" +#include "source_base/constants.h" +#include "source_base/grid/delley.h" +#include "source_base/grid/partition.h" +#include "source_base/grid/radial.h" #include "gtest/gtest.h" -#include +#include #include -#include #include +#include +#include #include -#include #ifdef __MPI #include @@ -22,121 +22,122 @@ using iclock = std::chrono::high_resolution_clock; iclock::time_point start; std::chrono::duration dur; -double norm(const Vec3& v) { - return std::sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); +double norm(const Vec3& v) +{ + return std::sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); } -Vec3 operator-(const Vec3& v1, const Vec3& v2) { +Vec3 operator-(const Vec3& v1, const Vec3& v2) +{ return {v1[0] - v2[0], v1[1] - v2[1], v1[2] - v2[2]}; } -Vec3 operator+(const Vec3& v1, const Vec3& v2) { +Vec3 operator+(const Vec3& v1, const Vec3& v2) +{ return {v1[0] + v2[0], v1[1] + v2[1], v1[2] + v2[2]}; } // |r|^n * exp(-a*|r|^2) -double func_core(const Vec3& r, double a, double n) { +double func_core(const Vec3& r, double a, double n) +{ double rabs = norm(r); return std::pow(rabs, n) * std::exp(-a * rabs * rabs); } // func_core integrated over all space -double ref_core(double a, double n) { +double ref_core(double a, double n) +{ double p = 0.5 * (n + 3); return 2.0 * PI * std::pow(a, -p) * std::tgamma(p); } // the test function is a combination of several func_core -double func( - const Vec3& r, - const std::vector& R, - const std::vector& a, - const std::vector& n -) { +double func(const Vec3& r, const std::vector& R, const std::vector& a, const std::vector& n) +{ double val = 0.0; - for (size_t i = 0; i < R.size(); i++) { + for (size_t i = 0; i < R.size(); i++) + { val += func_core(r - R[i], a[i], n[i]); } return val; } -double ref(const std::vector& a, const std::vector& n) { +double ref(const std::vector& a, const std::vector& n) +{ double val = 0.0; - for (size_t i = 0; i < a.size(); i++) { + for (size_t i = 0; i < a.size(); i++) + { val += ref_core(a[i], n[i]); } return val; } // A Param object specifies a test function -struct Param { +struct Param +{ std::vector R; std::vector a; std::vector n; }; std::vector test_params = { - { - { - {0.0, 0.0, 0.0}, - {0.0, 0.0, 2.0}, - }, - {0.5, 2.0}, - {0, 0} - }, - { - { - {0.0, 0.0, 0.0}, - {0.0, 0.0, 2.0}, - {0.0, 3.0, 0.0}, - }, - {0.5, 2.0, 1.5}, - {1, 2, 0.5} - }, - { - { - {0.0, 0.0, 0.0}, - {0.0, 0.0, 3.0}, - {0.0, 3.0, 0.0}, - {9.0, 0.0, 0.0}, - }, - {1.0, 2.0, 1.5, 2.0}, - {2.5, 2, 0.5, 1} - }, - { - { - {0.0, 0.0, 0.0}, - {0.0, 0.0, 3.0}, - {0.0, 3.0, 0.0}, - {9.0, 0.0, 0.0}, - {1.0, 1.0, 1.0}, - {2.0, 2.0, 2.0}, - {3.0, 3.0, 3.0}, - {4.0, 4.0, 4.0}, - {5.0, 5.0, 5.0}, - {6.0, 6.0, 6.0}, - }, - {1.0, 2.0, 1.5, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0}, - {2.5, 2.0, 0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0} - }, + {{ + {0.0, 0.0, 0.0}, + {0.0, 0.0, 2.0}, + }, + {0.5, 2.0}, + {0, 0}}, + {{ + {0.0, 0.0, 0.0}, + {0.0, 0.0, 2.0}, + {0.0, 3.0, 0.0}, + }, + {0.5, 2.0, 1.5}, + {1, 2, 0.5}}, + {{ + {0.0, 0.0, 0.0}, + {0.0, 0.0, 3.0}, + {0.0, 3.0, 0.0}, + {9.0, 0.0, 0.0}, + }, + {1.0, 2.0, 1.5, 2.0}, + {2.5, 2, 0.5, 1}}, + {{ + {0.0, 0.0, 0.0}, + {0.0, 0.0, 3.0}, + {0.0, 3.0, 0.0}, + {9.0, 0.0, 0.0}, + {1.0, 1.0, 1.0}, + {2.0, 2.0, 2.0}, + {3.0, 3.0, 3.0}, + {4.0, 4.0, 4.0}, + {5.0, 5.0, 5.0}, + {6.0, 6.0, 6.0}, + }, + {1.0, 2.0, 1.5, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0}, + {2.5, 2.0, 0.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}}, }; -std::vector dist_R_R(const std::vector& R) { +std::vector dist_R_R(const std::vector& R) +{ // tabulate dRR[I,J] = || R[I] - R[J] || size_t nR = R.size(); - std::vector dRR(nR*nR, 0.0); - for (size_t I = 0; I < nR; I++) { - for (size_t J = I + 1; J < nR; J++) { + std::vector dRR(nR * nR, 0.0); + for (size_t I = 0; I < nR; I++) + { + for (size_t J = I + 1; J < nR; J++) + { double d = norm(R[I] - R[J]); - dRR[I*nR + J] = d; - dRR[J*nR + I] = d; + dRR[I * nR + J] = d; + dRR[J * nR + I] = d; } } return dRR; } -class PartitionTest: public ::testing::Test { -protected: +class PartitionTest : public ::testing::Test +{ + protected: PartitionTest(); // grid & weight for one-center integration @@ -146,7 +147,8 @@ class PartitionTest: public ::testing::Test { const double tol = 1e-5; }; -PartitionTest::PartitionTest() { +PartitionTest::PartitionTest() +{ // angular grid & weight std::vector r_ang, w_ang; int lmax = 25; @@ -161,25 +163,28 @@ PartitionTest::PartitionTest() { // complete grid & weight for one-center integration size_t ngrid = w_rad.size() * w_ang.size(); - r.resize(3*ngrid); + r.resize(3 * ngrid); w.resize(ngrid); size_t ir = 0; - for (size_t i = 0; i < w_rad.size(); i++) { - for (size_t j = 0; j < w_ang.size(); j++) { - r[3*ir] = r_rad[i] * r_ang[3*j]; - r[3*ir+1] = r_rad[i] * r_ang[3*j+1]; - r[3*ir+2] = r_rad[i] * r_ang[3*j+2]; + for (size_t i = 0; i < w_rad.size(); i++) + { + for (size_t j = 0; j < w_ang.size(); j++) + { + r[3 * ir] = r_rad[i] * r_ang[3 * j]; + r[3 * ir + 1] = r_rad[i] * r_ang[3 * j + 1]; + r[3 * ir + 2] = r_rad[i] * r_ang[3 * j + 2]; w[ir] = w_rad[i] * w_ang[j] * 4.0 * PI; ++ir; } } } - -TEST_F(PartitionTest, Becke) { +TEST_F(PartitionTest, Becke) +{ dur = dur.zero(); - for (const Param& param : test_params) { + for (const Param& param: test_params) + { double val = 0.0; double val_ref = ref(param.a, param.n); @@ -195,22 +200,22 @@ TEST_F(PartitionTest, Becke) { std::mt19937 g(rd()); std::shuffle(iR.begin(), iR.end(), g); - for (size_t I = 0; I < nR; ++I) { // for each center - for (size_t i = 0; i < w.size(); i++) { - Vec3 ri = Vec3{r[3*i], r[3*i+1], r[3*i+2]} + param.R[I]; + for (size_t I = 0; I < nR; ++I) + { // for each center + for (size_t i = 0; i < w.size(); i++) + { + Vec3 ri = Vec3{r[3 * i], r[3 * i + 1], r[3 * i + 2]} + param.R[I]; // tabulate || r - R[J] || std::vector drR(nR); - for (size_t J = 0; J < nR; ++J) { + for (size_t J = 0; J < nR; ++J) + { drR[J] = norm(ri - param.R[J]); } // partition weight for this grid point start = iclock::now(); - double w_part = Grid::Partition::w_becke( - drR.size(), drR.data(), dRR.data(), - iR.size(), iR.data(), I - ); + double w_part = Grid::Partition::w_becke(drR.size(), drR.data(), dRR.data(), iR.size(), iR.data(), I); dur += iclock::now() - start; val += w_part * w[i] * func(ri, param.R, param.a, param.n); @@ -222,11 +227,12 @@ TEST_F(PartitionTest, Becke) { printf("time elapsed = %8.3e seconds\n", dur.count()); } - -TEST_F(PartitionTest, Stratmann) { +TEST_F(PartitionTest, Stratmann) +{ dur = dur.zero(); - for (const Param& param : test_params) { + for (const Param& param: test_params) + { double val = 0.0; double val_ref = ref(param.a, param.n); @@ -240,32 +246,41 @@ TEST_F(PartitionTest, Stratmann) { // radii of exclusive zone std::vector drR_thr(nR); - for (size_t I = 0; I < nR; ++I) { + for (size_t I = 0; I < nR; ++I) + { double dRRmin = 1e100; - for (size_t J = 0; J < nR; ++J) { - if (J != I) { - dRRmin = std::min(dRRmin, dRR[I*nR + J]); + for (size_t J = 0; J < nR; ++J) + { + if (J != I) + { + dRRmin = std::min(dRRmin, dRR[I * nR + J]); } } drR_thr[I] = 0.5 * (1.0 - Grid::Partition::stratmann_a) * dRRmin; } - for (size_t I = 0; I < nR; ++I) { // for each center - for (size_t i = 0; i < w.size(); i++) { - Vec3 ri = Vec3{r[3*i], r[3*i+1], r[3*i+2]} + param.R[I]; + for (size_t I = 0; I < nR; ++I) + { // for each center + for (size_t i = 0; i < w.size(); i++) + { + Vec3 ri = Vec3{r[3 * i], r[3 * i + 1], r[3 * i + 2]} + param.R[I]; // tabulate || r - R[J] || std::vector drR(nR); - for (size_t J = 0; J < nR; ++J) { + for (size_t J = 0; J < nR; ++J) + { drR[J] = norm(ri - param.R[J]); } // partition weight for this grid point start = iclock::now(); - double w_part = Grid::Partition::w_stratmann( - drR.size(), drR.data(), dRR.data(), drR_thr.data(), - iR.size(), iR.data(), I - ); + double w_part = Grid::Partition::w_stratmann(drR.size(), + drR.data(), + dRR.data(), + drR_thr.data(), + iR.size(), + iR.data(), + I); dur += iclock::now() - start; val += w_part * w[i] * func(ri, param.R, param.a, param.n); @@ -277,7 +292,6 @@ TEST_F(PartitionTest, Stratmann) { printf("time elapsed = %8.3e seconds\n", dur.count()); } - int main(int argc, char** argv) { #ifdef __MPI diff --git a/source/module_base/grid/test/test_radial.cpp b/source/source_base/grid/test/test_radial.cpp similarity index 69% rename from source/module_base/grid/test/test_radial.cpp rename to source/source_base/grid/test/test_radial.cpp index 6cdd4c4841..3a1bd6c342 100644 --- a/source/module_base/grid/test/test_radial.cpp +++ b/source/source_base/grid/test/test_radial.cpp @@ -1,4 +1,4 @@ -#include "module_base/grid/radial.h" +#include "source_base/grid/radial.h" #include "gtest/gtest.h" #include @@ -28,37 +28,26 @@ const double pi = std::acos(-1.0); // / 0 // std::vector> test_func_ref = { - { - [](double r) { - return std::exp(-0.3 * r * r) + std::exp(-3.0 * r * r); - }, - 0.25 * std::sqrt(pi) * (std::pow(0.3, -1.5) + std::pow(3.0, -1.5)) - }, - { - [](double r) { - return r * (std::exp(-0.3 * r * r) + std::exp(-3.0 * r * r)); - }, - 0.5 / (0.3 * 0.3) + 0.5 / (3.0 * 3.0) - }, - { - [](double r) { - return r * r * (std::exp(-0.3 * r * r) + std::exp(-3.0 * r * r)); - }, - 0.375 * std::sqrt(pi) * (std::pow(0.3, -2.5) + std::pow(3.0, -2.5)) - }, + {[](double r) { return std::exp(-0.3 * r * r) + std::exp(-3.0 * r * r); }, + 0.25 * std::sqrt(pi) * (std::pow(0.3, -1.5) + std::pow(3.0, -1.5))}, + {[](double r) { return r * (std::exp(-0.3 * r * r) + std::exp(-3.0 * r * r)); }, + 0.5 / (0.3 * 0.3) + 0.5 / (3.0 * 3.0)}, + {[](double r) { return r * r * (std::exp(-0.3 * r * r) + std::exp(-3.0 * r * r)); }, + 0.375 * std::sqrt(pi) * (std::pow(0.3, -2.5) + std::pow(3.0, -2.5))}, }; - -double quadrature(const Func_t& f, int n, double* r, double* w) { +double quadrature(const Func_t& f, int n, double* r, double* w) +{ double res = 0.0; - for (int i = 0; i < n; i++) { + for (int i = 0; i < n; i++) + { res += w[i] * f(r[i]); } return res; } - -TEST(RadialTest, Baker) { +TEST(RadialTest, Baker) +{ // R should be large enough to cover the range of the function. // For mult = 1, R is the cutoff radius; for mult > 1, there // are (mult - 1) grid points extend beyond R. @@ -70,55 +59,59 @@ TEST(RadialTest, Baker) { EXPECT_EQ(r.size(), (nbase + 1) * mult - 1); - for (auto& t : test_func_ref) { + for (auto& t: test_func_ref) + { double res = quadrature(t.first, r.size(), r.data(), w.data()); EXPECT_NEAR(res, t.second, 1.0e-6); } } - -TEST(RadialTest, Murray) { +TEST(RadialTest, Murray) +{ int n = 40; double R = 7.0; std::vector r(n), w(n); murray(n, R, r.data(), w.data()); - for (auto& t : test_func_ref) { + for (auto& t: test_func_ref) + { double res = quadrature(t.first, r.size(), r.data(), w.data()); EXPECT_NEAR(res, t.second, 1.0e-6); } } - -TEST(RadialTest, Treutler) { +TEST(RadialTest, Treutler) +{ int n = 40; double R = 7.0; std::vector r(n), w(n); - for (auto alpha : {0.0, 0.6, 1.0}) { + for (auto alpha: {0.0, 0.6, 1.0}) + { treutler_m4(n, R, r.data(), w.data(), alpha); - for (auto& t : test_func_ref) { + for (auto& t: test_func_ref) + { double res = quadrature(t.first, r.size(), r.data(), w.data()); EXPECT_NEAR(res, t.second, 1.0e-6); } } } - -TEST(RadialTest, Mura) { +TEST(RadialTest, Mura) +{ int n = 40; double R = 7.0; std::vector r(n), w(n); mura(n, R, r.data(), w.data()); - for (auto& t : test_func_ref) { + for (auto& t: test_func_ref) + { double res = quadrature(t.first, r.size(), r.data(), w.data()); EXPECT_NEAR(res, t.second, 1.0e-6); } } - int main(int argc, char** argv) { #ifdef __MPI diff --git a/source/module_base/intarray.cpp b/source/source_base/intarray.cpp similarity index 100% rename from source/module_base/intarray.cpp rename to source/source_base/intarray.cpp diff --git a/source/module_base/intarray.h b/source/source_base/intarray.h similarity index 100% rename from source/module_base/intarray.h rename to source/source_base/intarray.h diff --git a/source/module_base/inverse_matrix.cpp b/source/source_base/inverse_matrix.cpp similarity index 100% rename from source/module_base/inverse_matrix.cpp rename to source/source_base/inverse_matrix.cpp diff --git a/source/module_base/inverse_matrix.h b/source/source_base/inverse_matrix.h similarity index 100% rename from source/module_base/inverse_matrix.h rename to source/source_base/inverse_matrix.h diff --git a/source/module_base/kernels/cuda/math_kernel_op.cu b/source/source_base/kernels/cuda/math_kernel_op.cu similarity index 75% rename from source/module_base/kernels/cuda/math_kernel_op.cu rename to source/source_base/kernels/cuda/math_kernel_op.cu index 3a42767925..18c1eeac11 100644 --- a/source/module_base/kernels/cuda/math_kernel_op.cu +++ b/source/source_base/kernels/cuda/math_kernel_op.cu @@ -1,47 +1,57 @@ -#include "module_base/module_device/memory_op.h" -#include "module_base/kernels/math_kernel_op.h" #include "module_psi/psi.h" -#include "module_base/tool_quit.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/memory_op.h" +#include "source_base/tool_quit.h" #include #include #include #include #include -namespace ModuleBase { +namespace ModuleBase +{ template -struct GetTypeThrust { +struct GetTypeThrust +{ using type = T; }; template <> -struct GetTypeThrust> { +struct GetTypeThrust> +{ using type = thrust::complex; /**< The return type specialization for std::complex. */ }; template <> -struct GetTypeThrust> { +struct GetTypeThrust> +{ using type = thrust::complex; /**< The return type specialization for std::complex. */ }; static cublasHandle_t cublas_handle = nullptr; -void xdot_wrapper(const int &n, const float * x, const int &incx, const float * y, const int &incy, float &result) { +void xdot_wrapper(const int& n, const float* x, const int& incx, const float* y, const int& incy, float& result) +{ cublasErrcheck(cublasSdot(cublas_handle, n, x, incx, y, incy, &result)); } -void xdot_wrapper(const int &n, const double * x, const int &incx, const double * y, const int &incy, double &result) { +void xdot_wrapper(const int& n, const double* x, const int& incx, const double* y, const int& incy, double& result) +{ cublasErrcheck(cublasDdot(cublas_handle, n, x, incx, y, incy, &result)); } -void createGpuBlasHandle(){ - if (cublas_handle == nullptr) { +void createGpuBlasHandle() +{ + if (cublas_handle == nullptr) + { cublasErrcheck(cublasCreate(&cublas_handle)); } } -void destoryBLAShandle(){ - if (cublas_handle != nullptr) { +void destoryBLAShandle() +{ + if (cublas_handle != nullptr) + { cublasErrcheck(cublasDestroy(cublas_handle)); cublas_handle = nullptr; } @@ -103,13 +113,8 @@ void axpy_op, base_device::DEVICE_GPU>::operator()(const in cublasErrcheck(cublasZaxpy(cublas_handle, N, (double2*)alpha, (double2*)X, incX, (double2*)Y, incY)); } - template -__global__ void matrix_transpose_kernel( - const int row, - const int col, - const T* in, - T* out) +__global__ void matrix_transpose_kernel(const int row, const int col, const T* in, T* out) { int i = blockIdx.x * blockDim.x + threadIdx.x; if (i < row) @@ -139,15 +144,15 @@ cublasOperation_t judge_trans_op(bool is_complex, const char& trans, const char* { return CUBLAS_OP_N; } - else if(trans == 'T') + else if (trans == 'T') { return CUBLAS_OP_T; } - else if(is_complex && trans == 'C') + else if (is_complex && trans == 'C') { return CUBLAS_OP_C; } - else + else { ModuleBase::WARNING_QUIT(name, std::string("Unknown trans type ") + trans + std::string(" !")); } @@ -186,7 +191,18 @@ void gemv_op, base_device::DEVICE_GPU>::operator()(const cha cublasOperation_t cutrans = judge_trans_op(true, trans, "gemv_op"); cuFloatComplex alpha = make_cuFloatComplex(alpha_in->real(), alpha_in->imag()); cuFloatComplex beta = make_cuFloatComplex(beta_in->real(), beta_in->imag()); - cublasErrcheck(cublasCgemv(cublas_handle, cutrans, m, n, &alpha, (cuFloatComplex*)A, lda, (cuFloatComplex*)X, incx, &beta, (cuFloatComplex*)Y, incx)); + cublasErrcheck(cublasCgemv(cublas_handle, + cutrans, + m, + n, + &alpha, + (cuFloatComplex*)A, + lda, + (cuFloatComplex*)X, + incx, + &beta, + (cuFloatComplex*)Y, + incx)); } template <> @@ -207,7 +223,18 @@ void gemv_op, base_device::DEVICE_GPU>::operator()(const ch cuDoubleComplex beta = make_cuDoubleComplex(beta_in->real(), beta_in->imag()); // icpc and nvcc have some compatible problems // We must use cuDoubleComplex instead of converting std::complex* to cuDoubleComplex* - cublasErrcheck(cublasZgemv(cublas_handle, cutrans, m, n, &alpha, (cuDoubleComplex*)A, lda, (cuDoubleComplex*)X, incx, &beta, (cuDoubleComplex*)Y, incx)); + cublasErrcheck(cublasZgemv(cublas_handle, + cutrans, + m, + n, + &alpha, + (cuDoubleComplex*)A, + lda, + (cuDoubleComplex*)X, + incx, + &beta, + (cuDoubleComplex*)Y, + incx)); } template <> @@ -266,7 +293,20 @@ void gemm_op, base_device::DEVICE_GPU>::operator()(const cha { cublasOperation_t cutransA = judge_trans_op(true, transa, "gemm_op"); cublasOperation_t cutransB = judge_trans_op(true, transb, "gemm_op"); - cublasErrcheck(cublasCgemm(cublas_handle, cutransA, cutransB, m, n ,k, (float2*)alpha, (float2*)a , lda, (float2*)b, ldb, (float2*)beta, (float2*)c, ldc)); + cublasErrcheck(cublasCgemm(cublas_handle, + cutransA, + cutransB, + m, + n, + k, + (float2*)alpha, + (float2*)a, + lda, + (float2*)b, + ldb, + (float2*)beta, + (float2*)c, + ldc)); } template <> @@ -286,7 +326,20 @@ void gemm_op, base_device::DEVICE_GPU>::operator()(const ch { cublasOperation_t cutransA = judge_trans_op(true, transa, "gemm_op"); cublasOperation_t cutransB = judge_trans_op(true, transb, "gemm_op"); - cublasErrcheck(cublasZgemm(cublas_handle, cutransA, cutransB, m, n ,k, (double2*)alpha, (double2*)a , lda, (double2*)b, ldb, (double2*)beta, (double2*)c, ldc)); + cublasErrcheck(cublasZgemm(cublas_handle, + cutransA, + cutransB, + m, + n, + k, + (double2*)alpha, + (double2*)a, + lda, + (double2*)b, + ldb, + (double2*)beta, + (double2*)c, + ldc)); } template <> @@ -303,13 +356,25 @@ void matrixTranspose_op::operator()(const int& double ONE = 1.0, ZERO = 0.0; // use 'geam' API todo transpose. - cublasErrcheck(cublasDgeam(cublas_handle, CUBLAS_OP_T, CUBLAS_OP_N, col, row, &ONE, input_matrix, col, &ZERO, input_matrix, col, device_temp, col)); + cublasErrcheck(cublasDgeam(cublas_handle, + CUBLAS_OP_T, + CUBLAS_OP_N, + col, + row, + &ONE, + input_matrix, + col, + &ZERO, + input_matrix, + col, + device_temp, + col)); } else { int thread = 1024; int block = (row + col + thread - 1) / thread; - matrix_transpose_kernel <<>> (row, col, input_matrix, device_temp); + matrix_transpose_kernel<<>>(row, col, input_matrix, device_temp); cudaCheckOnDebug(); } @@ -340,14 +405,26 @@ void matrixTranspose_op, base_device::DEVICE_GPU>::operator( ZERO.x = ZERO.y = 0.0; // use 'geam' API todo transpose. - cublasErrcheck(cublasCgeam(cublas_handle, CUBLAS_OP_T, CUBLAS_OP_N, col, row, - reinterpret_cast(&ONE), (float2*)input_matrix, col, - reinterpret_cast(&ZERO), (float2*)input_matrix, col, (float2*)device_temp, col)); - } else + cublasErrcheck(cublasCgeam(cublas_handle, + CUBLAS_OP_T, + CUBLAS_OP_N, + col, + row, + reinterpret_cast(&ONE), + (float2*)input_matrix, + col, + reinterpret_cast(&ZERO), + (float2*)input_matrix, + col, + (float2*)device_temp, + col)); + } + else { int thread = 1024; int block = (row + col + thread - 1) / thread; - matrix_transpose_kernel> <<>> (row, col, (thrust::complex*)input_matrix, (thrust::complex*)device_temp); + matrix_transpose_kernel> + <<>>(row, col, (thrust::complex*)input_matrix, (thrust::complex*)device_temp); cudaCheckOnDebug(); } @@ -360,7 +437,6 @@ void matrixTranspose_op, base_device::DEVICE_GPU>::operator( base_device::memory::delete_memory_op, base_device::DEVICE_GPU>()(device_temp); cudaCheckOnDebug(); - } template <> @@ -381,12 +457,28 @@ void matrixTranspose_op, base_device::DEVICE_GPU>::operator ZERO.x = ZERO.y = 0.0; // use 'geam' API todo transpose. - cublasErrcheck(cublasZgeam(cublas_handle, CUBLAS_OP_T, CUBLAS_OP_N, col, row, &ONE, (double2*)input_matrix, col, &ZERO, (double2*)input_matrix, col, (double2*)device_temp, col)); - } else + cublasErrcheck(cublasZgeam(cublas_handle, + CUBLAS_OP_T, + CUBLAS_OP_N, + col, + row, + &ONE, + (double2*)input_matrix, + col, + &ZERO, + (double2*)input_matrix, + col, + (double2*)device_temp, + col)); + } + else { int thread = 1024; int block = (row + col + thread - 1) / thread; - matrix_transpose_kernel> <<>> (row, col, (thrust::complex*)input_matrix, (thrust::complex*)device_temp); + matrix_transpose_kernel><<>>(row, + col, + (thrust::complex*)input_matrix, + (thrust::complex*)device_temp); cudaCheckOnDebug(); } @@ -407,7 +499,7 @@ void matrixCopy::operator()(const int& n1, { const dim3 blockSize(16, 16); const dim3 gridSize((n1 + blockSize.x - 1) / blockSize.x, (n2 + blockSize.y - 1) / blockSize.y); - matrix_copy_kernel <<>> (n1, n2, A, LDA, B, LDB); + matrix_copy_kernel<<>>(n1, n2, A, LDA, B, LDB); cudaCheckOnDebug(); } template <> @@ -420,9 +512,14 @@ void matrixCopy, base_device::DEVICE_GPU>::operator()(const { const dim3 blockSize(16, 16); const dim3 gridSize((n1 + blockSize.x - 1) / blockSize.x, (n2 + blockSize.y - 1) / blockSize.y); - matrix_copy_kernel> <<>> (n1, n2, reinterpret_cast*>(A), LDA, reinterpret_cast*>(B), LDB); + matrix_copy_kernel> + <<>>(n1, + n2, + reinterpret_cast*>(A), + LDA, + reinterpret_cast*>(B), + LDB); cudaCheckOnDebug(); - } template <> void matrixCopy, base_device::DEVICE_GPU>::operator()(const int& n1, @@ -434,14 +531,19 @@ void matrixCopy, base_device::DEVICE_GPU>::operator()(const { const dim3 blockSize(16, 16); const dim3 gridSize((n1 + blockSize.x - 1) / blockSize.x, (n2 + blockSize.y - 1) / blockSize.y); - matrix_copy_kernel> <<>> (n1, n2, reinterpret_cast*>(A), LDA, reinterpret_cast*>(B), LDB); + matrix_copy_kernel> + <<>>(n1, + n2, + reinterpret_cast*>(A), + LDA, + reinterpret_cast*>(B), + LDB); cudaCheckOnDebug(); } - // Explicitly instantiate functors for the types of functor registered. template struct matrixCopy, base_device::DEVICE_GPU>; template struct matrixCopy; template struct matrixCopy, base_device::DEVICE_GPU>; -} // namespace ModuleBase +} // namespace ModuleBase diff --git a/source/module_base/kernels/cuda/math_kernel_op_vec.cu b/source/source_base/kernels/cuda/math_kernel_op_vec.cu similarity index 91% rename from source/module_base/kernels/cuda/math_kernel_op_vec.cu rename to source/source_base/kernels/cuda/math_kernel_op_vec.cu index 182d4c54d9..3301f97a5b 100644 --- a/source/module_base/kernels/cuda/math_kernel_op_vec.cu +++ b/source/source_base/kernels/cuda/math_kernel_op_vec.cu @@ -1,21 +1,23 @@ -#include "module_base/kernels/math_kernel_op.h" +#include "source_base/kernels/math_kernel_op.h" #include #include template <> -struct GetTypeReal> { +struct GetTypeReal> +{ using type = float; /**< The return type specialization for std::complex. */ }; template <> -struct GetTypeReal> { +struct GetTypeReal> +{ using type = double; /**< The return type specialization for std::complex. */ }; namespace ModuleBase { const int thread_per_block = 256; -void xdot_wrapper(const int &n, const float * x, const int &incx, const float * y, const int &incy, float &result); -void xdot_wrapper(const int &n, const double * x, const int &incx, const double * y, const int &incy, double &result); +void xdot_wrapper(const int& n, const float* x, const int& incx, const float* y, const int& incy, float& result); +void xdot_wrapper(const int& n, const double* x, const int& incx, const double* y, const int& incy, double& result); // Define the CUDA kernel: template @@ -54,9 +56,9 @@ __global__ void vector_mul_vector_kernel(const int size, template __global__ void vector_div_constant_kernel(const int size, - T* result, - const T* vector, - const typename GetTypeReal::type constant) + T* result, + const T* vector, + const typename GetTypeReal::type constant) { int i = blockIdx.x * blockDim.x + threadIdx.x; if (i < size) @@ -143,9 +145,9 @@ void vector_mul_real_op, base_device::DEVICE_GPU>::operator // vector operator: result[i] = vector[i] / constant template <> void vector_div_constant_op::operator()(const int& dim, - double* result, - const double* vector, - const double constant) + double* result, + const double* vector, + const double constant) { // In small cases, 1024 threads per block will only utilize 17 blocks, much less than 40 int thread = thread_per_block; @@ -157,9 +159,9 @@ void vector_div_constant_op::operator()(const i template inline void vector_div_constant_wrapper(const int& dim, - std::complex* result, - const std::complex* vector, - const FPTYPE constant) + std::complex* result, + const std::complex* vector, + const FPTYPE constant) { thrust::complex* result_tmp = reinterpret_cast*>(result); const thrust::complex* vector_tmp = reinterpret_cast*>(vector); @@ -173,18 +175,19 @@ inline void vector_div_constant_wrapper(const int& dim, template <> void vector_div_constant_op, base_device::DEVICE_GPU>::operator()(const int& dim, - std::complex* result, - const std::complex* vector, - const float constant) + std::complex* result, + const std::complex* vector, + const float constant) { vector_div_constant_wrapper(dim, result, vector, constant); } template <> -void vector_div_constant_op, base_device::DEVICE_GPU>::operator()(const int& dim, - std::complex* result, - const std::complex* vector, - const double constant) +void vector_div_constant_op, base_device::DEVICE_GPU>::operator()( + const int& dim, + std::complex* result, + const std::complex* vector, + const double constant) { vector_div_constant_wrapper(dim, result, vector, constant); } @@ -288,11 +291,11 @@ void vector_div_vector_op, base_device::DEVICE_GPU>::operat // vector operator: result[i] = vector1[i] * constant1 + vector2[i] * constant2 template void vector_add_vector_op::operator()(const int& dim, - T* result, - const T* vector1, - const Real constant1, - const T* vector2, - const Real constant2) + T* result, + const T* vector1, + const Real constant1, + const T* vector2, + const Real constant2) { using Type = typename GetTypeThrust::type; using Real = typename GetTypeReal::type; diff --git a/source/module_base/kernels/cuda/math_ylm_op.cu b/source/source_base/kernels/cuda/math_ylm_op.cu similarity index 61% rename from source/module_base/kernels/cuda/math_ylm_op.cu rename to source/source_base/kernels/cuda/math_ylm_op.cu index 390f22b93b..a0305e1e74 100644 --- a/source/module_base/kernels/cuda/math_ylm_op.cu +++ b/source/source_base/kernels/cuda/math_ylm_op.cu @@ -1,24 +1,25 @@ -#include -#include "module_base/kernels/math_ylm_op.h" +#include "source_base/kernels/math_ylm_op.h" #include +#include -namespace ModuleBase { +namespace ModuleBase +{ #define THREADS_PER_BLOCK 256 template -__device__ __inline__ -FPTYPE __fact(const int n) { +__device__ __inline__ FPTYPE __fact(const int n) +{ FPTYPE f = 1.0; - for (int i = n; i > 1; i--) { + for (int i = n; i > 1; i--) + { f *= i; } return f; } -__device__ __inline__ -int __semi_fact(const int n) +__device__ __inline__ int __semi_fact(const int n) { int semif = 1; for (int i = n; i > 2; i -= 2) @@ -29,26 +30,29 @@ int __semi_fact(const int n) } template -__global__ void cal_ylm_real( - const int ng, - const int lmax, - const FPTYPE SQRT2, - const FPTYPE PI, - const FPTYPE PI_HALF, - const FPTYPE FOUR_PI, - const FPTYPE SQRT_INVERSE_FOUR_PI, - const FPTYPE *g, - FPTYPE * p, - FPTYPE * ylm) +__global__ void cal_ylm_real(const int ng, + const int lmax, + const FPTYPE SQRT2, + const FPTYPE PI, + const FPTYPE PI_HALF, + const FPTYPE FOUR_PI, + const FPTYPE SQRT_INVERSE_FOUR_PI, + const FPTYPE* g, + FPTYPE* p, + FPTYPE* ylm) { int ig = blockIdx.x * blockDim.x + threadIdx.x; - if (ig >= ng) {return;} + if (ig >= ng) + { + return; + } FPTYPE cost = 0.0, phi = 0.0; //---------------------------------------------------------- // EXPLAIN : if lmax = 1,only use Y00 , output result. //---------------------------------------------------------- - if (lmax == 0) { + if (lmax == 0) + { ylm[0 * ng + ig] = SQRT_INVERSE_FOUR_PI; return; } @@ -57,47 +61,55 @@ __global__ void cal_ylm_real( // NAME : cost = cos(theta),theta and phi are polar angles // NAME : phi //---------------------------------------------------------- - const FPTYPE gmod = sqrt(g[ig * 3 + 0] * g[ig * 3 + 0] + g[ig * 3 + 1] * g[ig * 3 + 1] + g[ig * 3 + 2] * g[ig * 3 + 2]); + const FPTYPE gmod + = sqrt(g[ig * 3 + 0] * g[ig * 3 + 0] + g[ig * 3 + 1] * g[ig * 3 + 1] + g[ig * 3 + 2] * g[ig * 3 + 2]); cost = gmod < 1.0e-9 ? 0.0 : g[ig * 3 + 2] / gmod; // beware the arc tan, it is defined modulo pi - if (g[ig * 3 + 0] > 1.0e-9) { + if (g[ig * 3 + 0] > 1.0e-9) + { phi = atan(g[ig * 3 + 1] / g[ig * 3 + 0]); } - else if (g[ig * 3 + 0] < -1.e-9) { + else if (g[ig * 3 + 0] < -1.e-9) + { phi = atan(g[ig * 3 + 1] / g[ig * 3 + 0]) + PI; } - else { - phi = PI_HALF * ((g[ig * 3 + 1] >= 0.0) ? 1.0 : -1.0); //HLX: modified on 10/13/2006 - } // end if + else + { + phi = PI_HALF * ((g[ig * 3 + 1] >= 0.0) ? 1.0 : -1.0); // HLX: modified on 10/13/2006 + } // end if //========================================================== // NAME : p(Legendre Polynomials) (0 <= m <= l) //========================================================== int lm = -1; - for (int l = 0; l <= lmax; l++) { + for (int l = 0; l <= lmax; l++) + { const FPTYPE c = sqrt((2 * l + 1) / FOUR_PI); - if (l == 0) { + if (l == 0) + { p[0 * (lmax + 1) * ng + 0 * ng + ig] = 1.0; } - else if (l == 1) { + else if (l == 1) + { p[0 * (lmax + 1) * ng + 1 * ng + ig] = cost; FPTYPE var = (1.0 - cost * cost) > 0.0 ? (1.0 - cost * cost) : 0.0; p[1 * (lmax + 1) * ng + 1 * ng + ig] = -sqrt(var); } - else { - const int l1 = l - 1, - l2 = l - 2, - l3 = 2 * l - 1; + else + { + const int l1 = l - 1, l2 = l - 2, l3 = 2 * l - 1; // recursion on l for P(:,l,m) - for (int m = 0; m <= l2; m++) { // do m = 0, l - 2//mohan modify 2007-10-13 - p[m * (lmax + 1) * ng + l * ng + ig] = - (cost * l3 * p[m * (lmax + 1) * ng + l1 * ng + ig] - - (l1 + m) * p[m * (lmax + 1) * ng + l2 * ng + ig]) / (l - m); + for (int m = 0; m <= l2; m++) + { // do m = 0, l - 2//mohan modify 2007-10-13 + p[m * (lmax + 1) * ng + l * ng + ig] = (cost * l3 * p[m * (lmax + 1) * ng + l1 * ng + ig] + - (l1 + m) * p[m * (lmax + 1) * ng + l2 * ng + ig]) + / (l - m); } // end do - p[l1 * (lmax + 1) * ng + l * ng + ig] = - cost * l3 * p[l1 * (lmax + 1) * ng + l1 * ng + ig]; + p[l1 * (lmax + 1) * ng + l * ng + ig] = cost * l3 * p[l1 * (lmax + 1) * ng + l1 * ng + ig]; FPTYPE x2 = (1.0 - cost * cost) > 0.0 ? (1.0 - cost * cost) : 0.0; - p[l * (lmax + 1) * ng + l * ng + ig] = __semi_fact(l3) * pow(x2, static_cast(l) / 2.0);//mohan modify 2007-10-13 - if (l % 2 == 1) { + p[l * (lmax + 1) * ng + l * ng + ig] + = __semi_fact(l3) * pow(x2, static_cast(l) / 2.0); // mohan modify 2007-10-13 + if (l % 2 == 1) + { p[l * (lmax + 1) * ng + l * ng + ig] *= -1; } } // end if @@ -106,11 +118,10 @@ __global__ void cal_ylm_real( ++lm; ylm[lm * ng + ig] = c * p[0 * (lmax + 1) * ng + l * ng + ig]; - for (int m = 1; m <= l; m++) { + for (int m = 1; m <= l; m++) + { // Y_lm, m > 0 - const FPTYPE same = - c * sqrt(__fact(l - m) / - __fact(l + m)) * SQRT2; + const FPTYPE same = c * sqrt(__fact(l - m) / __fact(l + m)) * SQRT2; ++lm; ylm[lm * ng + ig] = same * p[m * (lmax + 1) * ng + l * ng + ig] * cos(m * phi); @@ -119,7 +130,7 @@ __global__ void cal_ylm_real( ++lm; ylm[lm * ng + ig] = same * p[m * (lmax + 1) * ng + l * ng + ig] * sin(m * phi); } - }// end do + } // end do } template @@ -136,17 +147,8 @@ void cal_ylm_real_op::operator()(const base_dev FPTYPE* ylm) { int block = (ng + THREADS_PER_BLOCK - 1) / THREADS_PER_BLOCK; - cal_ylm_real<<>>( - ng, - lmax, - SQRT2, - PI, - PI_HALF, - FOUR_PI, - SQRT_INVERSE_FOUR_PI, - g, - p, - ylm); + cal_ylm_real + <<>>(ng, lmax, SQRT2, PI, PI_HALF, FOUR_PI, SQRT_INVERSE_FOUR_PI, g, p, ylm); cudaCheckOnDebug(); } @@ -154,4 +156,4 @@ void cal_ylm_real_op::operator()(const base_dev template struct cal_ylm_real_op; template struct cal_ylm_real_op; -} // namespace ModuleBase +} // namespace ModuleBase diff --git a/source/module_base/kernels/dsp/dsp_connector.cpp b/source/source_base/kernels/dsp/dsp_connector.cpp similarity index 100% rename from source/module_base/kernels/dsp/dsp_connector.cpp rename to source/source_base/kernels/dsp/dsp_connector.cpp diff --git a/source/module_base/kernels/dsp/dsp_connector.h b/source/source_base/kernels/dsp/dsp_connector.h similarity index 98% rename from source/module_base/kernels/dsp/dsp_connector.h rename to source/source_base/kernels/dsp/dsp_connector.h index ef7eb0bdc8..34ccbaec4b 100644 --- a/source/module_base/kernels/dsp/dsp_connector.h +++ b/source/source_base/kernels/dsp/dsp_connector.h @@ -2,8 +2,8 @@ #define DSP_CONNECTOR_H #ifdef __DSP -#include "module_base/module_device/device.h" -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/device.h" +#include "source_base/module_device/memory_op.h" #include "source_hsolver/diag_comm_info.h" namespace mtfunc diff --git a/source/module_base/kernels/math_kernel_op.cpp b/source/source_base/kernels/math_kernel_op.cpp similarity index 86% rename from source/module_base/kernels/math_kernel_op.cpp rename to source/source_base/kernels/math_kernel_op.cpp index 9c4ccdc42b..e1752ebc6f 100644 --- a/source/module_base/kernels/math_kernel_op.cpp +++ b/source/source_base/kernels/math_kernel_op.cpp @@ -1,4 +1,4 @@ -#include "module_base/kernels/math_kernel_op.h" +#include "source_base/kernels/math_kernel_op.h" #include #include @@ -64,7 +64,20 @@ struct gemm_op_mt T* c, const int& ldc) { - BlasConnector::gemm(transb, transa, n, m, k, *alpha, b, ldb, a, lda, *beta, c, ldc, base_device::AbacusDevice_t::DspDevice); + BlasConnector::gemm(transb, + transa, + n, + m, + k, + *alpha, + b, + ldb, + a, + lda, + *beta, + c, + ldc, + base_device::AbacusDevice_t::DspDevice); } }; #endif @@ -72,10 +85,7 @@ struct gemm_op_mt template struct matrixTranspose_op { - void operator()(const int& row, - const int& col, - const T* input_matrix, - T* output_matrix) + void operator()(const int& row, const int& col, const T* input_matrix, T* output_matrix) { T* temp = nullptr; base_device::memory::resize_memory_op()(temp, row * col, "MTransOp"); @@ -140,4 +150,4 @@ template struct matrixTranspose_op; template struct gemm_op_mt, base_device::DEVICE_CPU>; template struct gemm_op_mt, base_device::DEVICE_CPU>; #endif -} // namespace hsolver \ No newline at end of file +} // namespace ModuleBase \ No newline at end of file diff --git a/source/source_base/kernels/math_kernel_op.h b/source/source_base/kernels/math_kernel_op.h new file mode 100644 index 0000000000..6ad04b7217 --- /dev/null +++ b/source/source_base/kernels/math_kernel_op.h @@ -0,0 +1,513 @@ +// TODO: This is a temperary location for these functions. +// And will be moved to a global module(module base) later. +#ifndef MODULE_HSOLVER_MATH_KERNEL_H +#define MODULE_HSOLVER_MATH_KERNEL_H + +#include "source_base/blas_connector.h" +#include "source_base/macros.h" +#include "source_base/module_device/memory_op.h" +#include "source_base/module_device/types.h" +#include "source_base/parallel_reduce.h" + +#if defined(__CUDA) || defined(__UT_USE_CUDA) +#include "cublas_v2.h" + +#include +#endif //__CUDA || __UT_USE_CUDA + +namespace ModuleBase +{ + +//--------------------------------------------------------------------------------- +//-----------------------------0. Tool Functions----------------------------------- +//--------------------------------------------------------------------------------- +inline std::complex set_real_tocomplex(const std::complex& x) +{ + return {x.real(), 0.0}; +} + +inline std::complex set_real_tocomplex(const std::complex& x) +{ + return {x.real(), 0.0}; +} + +inline double set_real_tocomplex(const double& x) +{ + return x; +} + +inline float set_real_tocomplex(const float& x) +{ + return x; +} + +inline std::complex get_conj(const std::complex& x) +{ + return {x.real(), -x.imag()}; +} + +inline std::complex get_conj(const std::complex& x) +{ + return {x.real(), -x.imag()}; +} + +inline double get_conj(const double& x) +{ + return x; +} + +inline float get_conj(const float& x) +{ + return x; +} + +//--------------------------------------------------------------------------------- +//-----------------------------1. Vector Operations-------------------------------- +//--------------------------------------------------------------------------------- +template +struct scal_op +{ + /// @brief x = alpha * x, where alpha and x are complex numbers + /// + /// Input Parameters + /// \param N : array size + /// \param alpha : input constant + /// \param X : input array + /// \param incx : computing strip of array X + /// + /// Output Parameters + /// \param X : output array + void operator()(const int& N, const std::complex* alpha, std::complex* X, const int& incx); +}; + +template +struct vector_mul_real_op +{ + using Real = typename GetTypeReal::type; + /// @brief result[i] = vector[i] * constant, where vector is complex number and constant is real number。 + /// It is different from the scal_op, which is used to multiply a complex number by a complex number. + /// + /// Input Parameters + /// \param dim : array size + /// \param vector : input array + /// \param constant : input constant + /// + /// Output Parameters + /// \param result : output array + /// \note Use mulitple instead of divide. It is faster. + void operator()(const int dim, T* result, const T* vector, const Real constant); +}; + +// vector operator: result[i] = vector1[i](complex) * vector2[i](not complex) +template +struct vector_mul_vector_op +{ + using Real = typename GetTypeReal::type; + /// @brief result[i] = vector1[i](complex) * vector2[i](not complex) + /// + /// Input Parameters + /// \param dim : array size + /// \param vector1 : input array A + /// \param vector2 : input array B + /// \param add : flag to control whether to add the result to the output array + /// + /// Output Parameters + /// \param result : output array + void operator()(const int& dim, T* result, const T* vector1, const Real* vector2, const bool& add = false); +}; + +// vector operator: result[i] = vector[i] / constant +template +struct vector_div_constant_op +{ + using Real = typename GetTypeReal::type; + /// @brief result[i] = vector[i] / constant + /// + /// Input Parameters + /// \param dim : array size + /// \param vector : input array + /// \param constant : input constant + /// + /// Output Parameters + /// \param result : output array + void operator()(const int& dim, T* result, const T* vector, const Real constant); +}; + +// vector operator: result[i] = vector1[i](complex) / vector2[i](not complex) +template +struct vector_div_vector_op +{ + using Real = typename GetTypeReal::type; + /// @brief result[i] = vector1[i](complex) / vector2[i](not complex) + /// + /// Input Parameters + /// \param dim : array size + /// \param vector1 : input array A + /// \param vector2 : input array B + /// + /// Output Parameters + /// \param result : output array + void operator()(const int& dim, T* result, const T* vector1, const Real* vector2); +}; + +// compute Y = alpha * X + Y +template +struct axpy_op +{ + /// @brief Y = alpha * X + Y + /// + /// Input Parameters + /// \param N : array size + /// \param alpha : input constant alpha + /// \param X : input array X + /// \param incX : computing strip of X + /// \param Y : computing strip of Y + /// \param incY : computing strip of Y + /// + /// Output Parameters + /// \param Y : output array Y + void operator()(const int& N, const T* alpha, const T* X, const int& incX, T* Y, const int& incY); +}; + +// vector operator: result[i] = vector1[i] * constant1 + vector2[i] * constant2 +template +struct vector_add_vector_op +{ + using Real = typename GetTypeReal::type; + /// @brief result[i] = vector1[i] * constant1 + vector2[i] * constant2 + /// + /// Input Parameters + /// \param dim : array size + /// \param vector1 : input array A + /// \param constant1 : input constant a + /// \param vector2 : input array B + /// \param constant2 : input constant b + /// + /// Output Parameters + /// \param result : output array + void operator()(const int& dim, + T* result, + const T* vector1, + const Real constant1, + const T* vector2, + const Real constant2); +}; + +template +struct dot_real_op +{ + using Real = typename GetTypeReal::type; + /// @brief dot_real_op computes the dot product of the given complex + /// arrays(treated as float arrays). And there's may have MPI communications + /// while enabling planewave parallization strategy. + /// + /// Input Parameters + /// \param dim : array size + /// \param psi_L : input array A + /// \param psi_R : input array B + /// \param reduce : flag to control whether to perform the MPI communications + /// + /// \return + /// FPTYPE : dot product result + Real operator()(const int& dim, const T* psi_L, const T* psi_R, const bool reduce = true); +}; + +//--------------------------------------------------------------------------------- +//-----------------------------2. Matrix Operations-------------------------------- +//--------------------------------------------------------------------------------- + +// compute y = alpha * op(A) * x + beta * y +template +struct gemv_op +{ + /// @brief y = alpha * op(A) * x + beta * y + /// + /// Input Parameters + /// \param trans : whether to transpose A + /// \param m : first dimension of matrix + /// \param n : second dimension of matrix + /// \param alpha : input constant alpha + /// \param A : input matrix A + /// \param lda : leading dimention of A + /// \param X : input array X + /// \param incx : computing strip of X + /// \param beta : input constant beta + /// \param Y : input array Y + /// \param incy : computing strip of Y + /// + /// Output Parameters + /// \param Y : output array Y + void operator()(const char& trans, + const int& m, + const int& n, + const T* alpha, + const T* A, + const int& lda, + const T* X, + const int& incx, + const T* beta, + T* Y, + const int& incy); +}; + +// compute C = alpha * op(A) * op(B) + beta * C +template +struct gemm_op +{ + /// @brief C = alpha * op(A) * op(B) + beta * C + /// + /// Input Parameters + /// \param transa : whether to transpose matrix A + /// \param transb : whether to transpose matrix B + /// \param m : first dimension of matrix mulplication + /// \param n : second dimension of matrix mulplication + /// \param k : third dimension of matrix mulplication + /// \param alpha : input constant alpha + /// \param a : input matrix A + /// \param lda : leading dimention of A + /// \param b : input matrix B + /// \param ldb : leading dimention of A + /// \param beta : input constant beta + /// \param c : input matrix C + /// \param ldc : leading dimention of C + /// + /// Output Parameters + /// \param c : output matrix C + void operator()(const char& transa, + const char& transb, + const int& m, + const int& n, + const int& k, + const T* alpha, + const T* a, + const int& lda, + const T* b, + const int& ldb, + const T* beta, + T* c, + const int& ldc); +}; + +#ifdef __DSP +// compute C = alpha * op(A) * op(B) + beta * C on DSP Hardware +template +struct gemm_op_mt +{ + /// @brief C = alpha * op(A) * op(B) + beta * C + /// + /// Input Parameters + /// \param transa : whether to transpose matrix A + /// \param transb : whether to transpose matrix B + /// \param m : first dimension of matrix mulplication + /// \param n : second dimension of matrix mulplication + /// \param k : third dimension of matrix mulplication + /// \param alpha : input constant alpha + /// \param a : input matrix A + /// \param lda : leading dimention of A + /// \param b : input matrix B + /// \param ldb : leading dimention of A + /// \param beta : input constant beta + /// \param c : input matrix C + /// \param ldc : leading dimention of C + /// + /// Output Parameters + /// \param c : output matrix C + void operator()(const char& transa, + const char& transb, + const int& m, + const int& n, + const int& k, + const T* alpha, + const T* a, + const int& lda, + const T* b, + const int& ldb, + const T* beta, + T* c, + const int& ldc); +}; +#endif + +template +struct matrixTranspose_op +{ + /// @brief transpose the input matrix + /// + /// Input Parameters + /// \param row : first dimension of matrix + /// \param col : second dimension of matrix + /// \param input_matrix : input matrix + /// + /// Output Parameters + /// \param output_matrix : output matrix + void operator()(const int& row, const int& col, const T* input_matrix, T* output_matrix); +}; + +template +struct matrixCopy +{ + /// @brief copy matrix A to B, they can have different leading dimensions + /// + /// Input Parameters + /// \param n1 : first dimension of matrix + /// \param n2 : second dimension of matrix + /// \param A : input matrix A + /// \param LDA : leading dimension of A + /// \param LDB : leading dimension of B + /// + /// Output Parameters + /// \param B : output matrix B + void operator()(const int& n1, const int& n2, const T* A, const int& LDA, T* B, const int& LDB); +}; + +template +struct apply_eigenvalues_op +{ + using Real = typename GetTypeReal::type; + + void operator()(const Device* d, + const int& nbase, + const int& nbase_x, + const int& notconv, + T* result, + const T* vectors, + const Real* eigenvalues); +}; + +template +struct precondition_op +{ + using Real = typename GetTypeReal::type; + void operator()(const Device* d, + const int& dim, + T* psi_iter, + const int& nbase, + const int& notconv, + const Real* precondition, + const Real* eigenvalues); +}; + +template +struct normalize_op +{ + using Real = typename GetTypeReal::type; + void operator()(const Device* d, + const int& dim, + T* psi_iter, + const int& nbase, + const int& notconv, + Real* psi_norm = nullptr); +}; + +template +struct normalize_op +{ + using Real = typename GetTypeReal::type; + void operator()(const base_device::DEVICE_GPU* d, + const int& dim, + T* psi_iter, + const int& nbase, + const int& notconv, + Real* psi_norm); +}; + +#if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM +// Partially specialize functor for base_device::GpuDevice. +template +struct dot_real_op +{ + using Real = typename GetTypeReal::type; + Real operator()(const int& dim, const T* psi_L, const T* psi_R, const bool reduce = true); +}; + +// vector operator: result[i] = vector[i] / constant +template +struct vector_mul_real_op +{ + using Real = typename GetTypeReal::type; + void operator()(const int dim, T* result, const T* vector, const Real constant); +}; + +// vector operator: result[i] = vector1[i](complex) * vector2[i](not complex) +template +struct vector_mul_vector_op +{ + using Real = typename GetTypeReal::type; + void operator()(const int& dim, T* result, const T* vector1, const Real* vector2, const bool& add = false); +}; + +// vector operator: result[i] = vector[i] / constant +template +struct vector_div_constant_op +{ + using Real = typename GetTypeReal::type; + void operator()(const int& dim, T* result, const T* vector, const Real constant); +}; + +// vector operator: result[i] = vector1[i](complex) / vector2[i](not complex) +template +struct vector_div_vector_op +{ + using Real = typename GetTypeReal::type; + void operator()(const int& dim, T* result, const T* vector1, const Real* vector2); +}; + +// vector operator: result[i] = vector1[i] * constant1 + vector2[i] * constant2 +template +struct vector_add_vector_op +{ + using Real = typename GetTypeReal::type; + void operator()(const int& dim, + T* result, + const T* vector1, + const Real constant1, + const T* vector2, + const Real constant2); +}; + +template +struct matrixCopy +{ + void operator()(const int& n1, + const int& n2, + const T* A, // input + const int& LDA, + T* B, // output + const int& LDB); +}; + +void createGpuBlasHandle(); +void destoryBLAShandle(); + +// vector operator: result[i] = -lambda[i] * vector[i] +template +struct apply_eigenvalues_op +{ + using Real = typename GetTypeReal::type; + + void operator()(const base_device::DEVICE_GPU* d, + const int& nbase, + const int& nbase_x, + const int& notconv, + T* result, + const T* vectors, + const Real* eigenvalues); +}; + +template +struct precondition_op +{ + using Real = typename GetTypeReal::type; + void operator()(const base_device::DEVICE_GPU* d, + const int& dim, + T* psi_iter, + const int& nbase, + const int& notconv, + const Real* precondition, + const Real* eigenvalues); +}; + +#endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM +} // namespace ModuleBase + +#endif // MODULE_HSOLVER_MATH_KERNEL_H \ No newline at end of file diff --git a/source/module_base/kernels/math_kernel_op_vec.cpp b/source/source_base/kernels/math_kernel_op_vec.cpp similarity index 93% rename from source/module_base/kernels/math_kernel_op_vec.cpp rename to source/source_base/kernels/math_kernel_op_vec.cpp index 605f97ff19..800f299093 100644 --- a/source/module_base/kernels/math_kernel_op_vec.cpp +++ b/source/source_base/kernels/math_kernel_op_vec.cpp @@ -1,4 +1,4 @@ -#include "module_base/kernels/math_kernel_op.h" +#include "source_base/kernels/math_kernel_op.h" namespace ModuleBase { @@ -6,10 +6,7 @@ namespace ModuleBase template struct scal_op { - void operator()(const int& N, - const std::complex* alpha, - std::complex* X, - const int& incx) + void operator()(const int& N, const std::complex* alpha, std::complex* X, const int& incx) { BlasConnector::scal(N, *alpha, X, incx); } @@ -95,18 +92,12 @@ struct vector_div_vector_op template struct axpy_op { - void operator()(const int& dim, - const T* alpha, - const T* X, - const int& incX, - T* Y, - const int& incY) + void operator()(const int& dim, const T* alpha, const T* X, const int& incX, T* Y, const int& incY) { BlasConnector::axpy(dim, *alpha, X, incX, Y, incY); } }; - template struct vector_add_vector_op { @@ -128,8 +119,6 @@ struct vector_add_vector_op } }; - - template struct dot_real_op { diff --git a/source/module_base/kernels/math_ylm_op.cpp b/source/source_base/kernels/math_ylm_op.cpp similarity index 62% rename from source/module_base/kernels/math_ylm_op.cpp rename to source/source_base/kernels/math_ylm_op.cpp index 0846801797..cee1d36021 100644 --- a/source/module_base/kernels/math_ylm_op.cpp +++ b/source/source_base/kernels/math_ylm_op.cpp @@ -1,20 +1,22 @@ -#include "module_base/kernels/math_ylm_op.h" -#include "module_base/libm/libm.h" +#include "source_base/kernels/math_ylm_op.h" -namespace ModuleBase { +#include "source_base/libm/libm.h" + +namespace ModuleBase +{ template -__inline__ -FPTYPE __fact(const int n) { +__inline__ FPTYPE __fact(const int n) +{ FPTYPE f = 1.0; - for (int i = n; i > 1; i--) { + for (int i = n; i > 1; i--) + { f *= i; } return f; } -__inline__ -int __semi_fact(const int n) +__inline__ int __semi_fact(const int n) { int semif = 1; for (int i = n; i > 2; i -= 2) @@ -42,11 +44,13 @@ struct cal_ylm_real_op #ifdef _OPENMP #pragma omp parallel for #endif - for (int ig = 0; ig < ng; ig++) { + for (int ig = 0; ig < ng; ig++) + { //---------------------------------------------------------- // EXPLAIN : if lmax = 1,only use Y00 , output result. //---------------------------------------------------------- - if (lmax == 0) { + if (lmax == 0) + { ylm[0 * ng + ig] = SQRT_INVERSE_FOUR_PI; continue; } @@ -55,47 +59,55 @@ struct cal_ylm_real_op // NAME : cost = cos(theta),theta and phi are polar angles // NAME : phi //---------------------------------------------------------- - const FPTYPE gmod = sqrt(g[ig * 3 + 0] * g[ig * 3 + 0] + g[ig * 3 + 1] * g[ig * 3 + 1] + g[ig * 3 + 2] * g[ig * 3 + 2]); + const FPTYPE gmod + = sqrt(g[ig * 3 + 0] * g[ig * 3 + 0] + g[ig * 3 + 1] * g[ig * 3 + 1] + g[ig * 3 + 2] * g[ig * 3 + 2]); FPTYPE cost = gmod < 1.0e-9 ? 0.0 : g[ig * 3 + 2] / gmod; FPTYPE phi; // beware the arc tan, it is defined modulo pi - if (g[ig * 3 + 0] > 1.0e-9) { + if (g[ig * 3 + 0] > 1.0e-9) + { phi = atan(g[ig * 3 + 1] / g[ig * 3 + 0]); } - else if (g[ig * 3 + 0] < -1.e-9) { + else if (g[ig * 3 + 0] < -1.e-9) + { phi = atan(g[ig * 3 + 1] / g[ig * 3 + 0]) + PI; } - else { - phi = PI_HALF * ((g[ig * 3 + 1] >= 0.0) ? 1.0 : -1.0); //HLX: modified on 10/13/2006 - } // end if + else + { + phi = PI_HALF * ((g[ig * 3 + 1] >= 0.0) ? 1.0 : -1.0); // HLX: modified on 10/13/2006 + } // end if //========================================================== // NAME : p(Legendre Polynomials) (0 <= m <= l) //========================================================== int lm = -1; - for (int l = 0; l <= lmax; l++) { + for (int l = 0; l <= lmax; l++) + { const FPTYPE c = sqrt((2 * l + 1) / FOUR_PI); - if (l == 0) { + if (l == 0) + { p[0 * (lmax + 1) * ng + 0 * ng + ig] = 1.0; } - else if (l == 1) { + else if (l == 1) + { p[0 * (lmax + 1) * ng + 1 * ng + ig] = cost; p[1 * (lmax + 1) * ng + 1 * ng + ig] = -sqrt(std::max(0.0, 1.0 - cost * cost)); } - else { - const int l1 = l - 1, - l2 = l - 2, - l3 = 2 * l - 1; + else + { + const int l1 = l - 1, l2 = l - 2, l3 = 2 * l - 1; // recursion on l for P(:,l,m) - for (int m = 0; m <= l2; m++) { // do m = 0, l - 2//mohan modify 2007-10-13 - p[m * (lmax + 1) * ng + l * ng + ig] = - (cost * l3 * p[m * (lmax + 1) * ng + l1 * ng + ig] - - (l1 + m) * p[m * (lmax + 1) * ng + l2 * ng + ig]) / (l - m); + for (int m = 0; m <= l2; m++) + { // do m = 0, l - 2//mohan modify 2007-10-13 + p[m * (lmax + 1) * ng + l * ng + ig] = (cost * l3 * p[m * (lmax + 1) * ng + l1 * ng + ig] + - (l1 + m) * p[m * (lmax + 1) * ng + l2 * ng + ig]) + / (l - m); } // end do - p[l1 * (lmax + 1) * ng + l * ng + ig] = - cost * l3 * p[l1 * (lmax + 1) * ng + l1 * ng + ig]; + p[l1 * (lmax + 1) * ng + l * ng + ig] = cost * l3 * p[l1 * (lmax + 1) * ng + l1 * ng + ig]; FPTYPE x2 = std::max(0.0, 1.0 - cost * cost); - p[l * (lmax + 1) * ng + l * ng + ig] = __semi_fact(l3) * pow(x2, static_cast(l) / 2.0);//mohan modify 2007-10-13 - if (l % 2 == 1) { + p[l * (lmax + 1) * ng + l * ng + ig] + = __semi_fact(l3) * pow(x2, static_cast(l) / 2.0); // mohan modify 2007-10-13 + if (l % 2 == 1) + { p[l * (lmax + 1) * ng + l * ng + ig] *= -1; } } // end if @@ -104,11 +116,10 @@ struct cal_ylm_real_op ++lm; ylm[lm * ng + ig] = c * p[0 * (lmax + 1) * ng + l * ng + ig]; - for (int m = 1; m <= l; m++) { + for (int m = 1; m <= l; m++) + { // Y_lm, m > 0 - const FPTYPE same = - c * sqrt(__fact(l - m) / - __fact(l + m)) * SQRT2; + const FPTYPE same = c * sqrt(__fact(l - m) / __fact(l + m)) * SQRT2; FPTYPE sinp, cosp; ModuleBase::libm::sincos(m * phi, &sinp, &cosp); ++lm; @@ -118,7 +129,7 @@ struct cal_ylm_real_op ++lm; ylm[lm * ng + ig] = same * p[m * (lmax + 1) * ng + l * ng + ig] * sinp; } - }// end do + } // end do } } }; @@ -126,5 +137,4 @@ struct cal_ylm_real_op template struct cal_ylm_real_op; template struct cal_ylm_real_op; -} // namespace ModuleBase - +} // namespace ModuleBase diff --git a/source/module_base/kernels/math_ylm_op.h b/source/source_base/kernels/math_ylm_op.h similarity index 100% rename from source/module_base/kernels/math_ylm_op.h rename to source/source_base/kernels/math_ylm_op.h diff --git a/source/module_base/kernels/rocm/math_kernel_op.hip.cu b/source/source_base/kernels/rocm/math_kernel_op.hip.cu similarity index 72% rename from source/module_base/kernels/rocm/math_kernel_op.hip.cu rename to source/source_base/kernels/rocm/math_kernel_op.hip.cu index 1211b76b6d..eee7390dcd 100644 --- a/source/module_base/kernels/rocm/math_kernel_op.hip.cu +++ b/source/source_base/kernels/rocm/math_kernel_op.hip.cu @@ -1,56 +1,68 @@ -#include "module_base/module_device/memory_op.h" -#include "module_base/kernels/math_kernel_op.h" #include "module_psi/psi.h" -#include "module_base/tool_quit.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/memory_op.h" +#include "source_base/tool_quit.h" #include #include #include #include template <> -struct GetTypeReal> { +struct GetTypeReal> +{ using type = float; /**< The return type specialization for std::complex. */ }; template <> -struct GetTypeReal> { +struct GetTypeReal> +{ using type = double; /**< The return type specialization for std::complex. */ }; -namespace ModuleBase { +namespace ModuleBase +{ template -struct GetTypeThrust { +struct GetTypeThrust +{ using type = T; }; template <> -struct GetTypeThrust> { +struct GetTypeThrust> +{ using type = thrust::complex; /**< The return type specialization for std::complex. */ }; template <> -struct GetTypeThrust> { +struct GetTypeThrust> +{ using type = thrust::complex; /**< The return type specialization for std::complex. */ }; static hipblasHandle_t cublas_handle = nullptr; -void xdot_wrapper(const int &n, const float * x, const int &incx, const float * y, const int &incy, float &result) { +void xdot_wrapper(const int& n, const float* x, const int& incx, const float* y, const int& incy, float& result) +{ hipblasErrcheck(hipblasSdot(cublas_handle, n, x, incx, y, incy, &result)); } -void xdot_wrapper(const int &n, const double * x, const int &incx, const double * y, const int &incy, double &result) { +void xdot_wrapper(const int& n, const double* x, const int& incx, const double* y, const int& incy, double& result) +{ hipblasErrcheck(hipblasDdot(cublas_handle, n, x, incx, y, incy, &result)); } -void createGpuBlasHandle(){ - if (cublas_handle == nullptr) { +void createGpuBlasHandle() +{ + if (cublas_handle == nullptr) + { hipblasErrcheck(hipblasCreate(&cublas_handle)); } } -void destoryBLAShandle(){ - if (cublas_handle != nullptr) { +void destoryBLAShandle() +{ + if (cublas_handle != nullptr) + { hipblasErrcheck(hipblasDestroy(cublas_handle)); cublas_handle = nullptr; } @@ -115,12 +127,7 @@ void axpy_op, base_device::DEVICE_GPU>::operator()(const in } template -__launch_bounds__(1024) -__global__ void matrix_transpose_kernel( - const int row, - const int col, - const T* in, - T* out) +__launch_bounds__(1024) __global__ void matrix_transpose_kernel(const int row, const int col, const T* in, T* out) { int i = blockIdx.x * blockDim.x + threadIdx.x; if (i < row) @@ -151,15 +158,15 @@ hipblasOperation_t judge_trans_op(bool is_complex, const char& trans, const char { return HIPBLAS_OP_N; } - else if(trans == 'T') + else if (trans == 'T') { return HIPBLAS_OP_T; } - else if(is_complex && trans == 'C') + else if (is_complex && trans == 'C') { return HIPBLAS_OP_C; } - else + else { ModuleBase::WARNING_QUIT(name, std::string("Unknown trans type ") + trans + std::string(" !")); } @@ -196,7 +203,18 @@ void gemv_op, base_device::DEVICE_GPU>::operator()(const cha const int& incy) { hipblasOperation_t cutrans = judge_trans_op(true, trans, "gemv_op"); - hipblasErrcheck(hipblasCgemv(cublas_handle, cutrans, m, n, (hipblasComplex*)alpha, (hipblasComplex*)A, lda, (hipblasComplex*)X, incx, (hipblasComplex*)beta, (hipblasComplex*)Y, incx)); + hipblasErrcheck(hipblasCgemv(cublas_handle, + cutrans, + m, + n, + (hipblasComplex*)alpha, + (hipblasComplex*)A, + lda, + (hipblasComplex*)X, + incx, + (hipblasComplex*)beta, + (hipblasComplex*)Y, + incx)); } template <> @@ -213,7 +231,18 @@ void gemv_op, base_device::DEVICE_GPU>::operator()(const ch const int& incy) { hipblasOperation_t cutrans = judge_trans_op(true, trans, "gemv_op"); - hipblasErrcheck(hipblasZgemv(cublas_handle, cutrans, m, n, (hipblasDoubleComplex*)alpha, (hipblasDoubleComplex*)A, lda, (hipblasDoubleComplex*)X, incx, (hipblasDoubleComplex*)beta, (hipblasDoubleComplex*)Y, incx)); + hipblasErrcheck(hipblasZgemv(cublas_handle, + cutrans, + m, + n, + (hipblasDoubleComplex*)alpha, + (hipblasDoubleComplex*)A, + lda, + (hipblasDoubleComplex*)X, + incx, + (hipblasDoubleComplex*)beta, + (hipblasDoubleComplex*)Y, + incx)); } template <> @@ -273,7 +302,20 @@ void gemm_op, base_device::DEVICE_GPU>::operator()(const cha { hipblasOperation_t cutransA = judge_trans_op(true, transa, "gemm_op"); hipblasOperation_t cutransB = judge_trans_op(true, transb, "gemm_op"); - hipblasErrcheck(hipblasCgemm(cublas_handle, cutransA, cutransB, m, n ,k, (hipblasComplex*)alpha, (hipblasComplex*)a , lda, (hipblasComplex*)b, ldb, (hipblasComplex*)beta, (hipblasComplex*)c, ldc)); + hipblasErrcheck(hipblasCgemm(cublas_handle, + cutransA, + cutransB, + m, + n, + k, + (hipblasComplex*)alpha, + (hipblasComplex*)a, + lda, + (hipblasComplex*)b, + ldb, + (hipblasComplex*)beta, + (hipblasComplex*)c, + ldc)); } template <> @@ -293,7 +335,20 @@ void gemm_op, base_device::DEVICE_GPU>::operator()(const ch { hipblasOperation_t cutransA = judge_trans_op(true, transa, "gemm_op"); hipblasOperation_t cutransB = judge_trans_op(true, transb, "gemm_op"); - hipblasErrcheck(hipblasZgemm(cublas_handle, cutransA, cutransB, m, n ,k, (hipblasDoubleComplex*)alpha, (hipblasDoubleComplex*)a , lda, (hipblasDoubleComplex*)b, ldb, (hipblasDoubleComplex*)beta, (hipblasDoubleComplex*)c, ldc)); + hipblasErrcheck(hipblasZgemm(cublas_handle, + cutransA, + cutransB, + m, + n, + k, + (hipblasDoubleComplex*)alpha, + (hipblasDoubleComplex*)a, + lda, + (hipblasDoubleComplex*)b, + ldb, + (hipblasDoubleComplex*)beta, + (hipblasDoubleComplex*)c, + ldc)); } template <> @@ -309,13 +364,33 @@ void matrixTranspose_op::operator()(const int& { double ONE = 1.0, ZERO = 0.0; // use 'geam' API todo transpose. - hipblasErrcheck(hipblasDgeam(cublas_handle, HIPBLAS_OP_T, HIPBLAS_OP_N, col, row, &ONE, input_matrix, col, &ZERO, input_matrix, col, device_temp, col)); + hipblasErrcheck(hipblasDgeam(cublas_handle, + HIPBLAS_OP_T, + HIPBLAS_OP_N, + col, + row, + &ONE, + input_matrix, + col, + &ZERO, + input_matrix, + col, + device_temp, + col)); } else { int thread = 1024; int block = (row + col + thread - 1) / thread; - hipLaunchKernelGGL(HIP_KERNEL_NAME(matrix_transpose_kernel), dim3(block), dim3(thread), 0, 0, row, col, input_matrix, device_temp); + hipLaunchKernelGGL(HIP_KERNEL_NAME(matrix_transpose_kernel), + dim3(block), + dim3(thread), + 0, + 0, + row, + col, + input_matrix, + device_temp); hipCheckOnDebug(); } @@ -345,14 +420,33 @@ void matrixTranspose_op, base_device::DEVICE_GPU>::operator( ZERO.x = ZERO.y = 0.0; // use 'geam' API todo transpose. - hipblasErrcheck(hipblasCgeam(cublas_handle, HIPBLAS_OP_T, HIPBLAS_OP_N, col, row, - reinterpret_cast(&ONE), (hipblasComplex*)input_matrix, col, - reinterpret_cast(&ZERO), (hipblasComplex*)input_matrix, col, (hipblasComplex*)device_temp, col)); - } else + hipblasErrcheck(hipblasCgeam(cublas_handle, + HIPBLAS_OP_T, + HIPBLAS_OP_N, + col, + row, + reinterpret_cast(&ONE), + (hipblasComplex*)input_matrix, + col, + reinterpret_cast(&ZERO), + (hipblasComplex*)input_matrix, + col, + (hipblasComplex*)device_temp, + col)); + } + else { int thread = 1024; int block = (row + col + thread - 1) / thread; - hipLaunchKernelGGL(HIP_KERNEL_NAME(matrix_transpose_kernel>), dim3(block), dim3(thread), 0, 0, row, col, (thrust::complex*)input_matrix, (thrust::complex*)device_temp); + hipLaunchKernelGGL(HIP_KERNEL_NAME(matrix_transpose_kernel>), + dim3(block), + dim3(thread), + 0, + 0, + row, + col, + (thrust::complex*)input_matrix, + (thrust::complex*)device_temp); hipCheckOnDebug(); } @@ -378,12 +472,33 @@ void matrixTranspose_op, base_device::DEVICE_GPU>::operator { hipblasDoubleComplex ONE{1.0, 0.0}, ZERO{0.0, 0.0}; // use 'geam' API todo transpose. - hipblasErrcheck(hipblasZgeam(cublas_handle, HIPBLAS_OP_T, HIPBLAS_OP_N, col, row, &ONE, (hipblasDoubleComplex*)input_matrix, col, &ZERO, (hipblasDoubleComplex*)input_matrix, col, (hipblasDoubleComplex*)device_temp, col)); - } else + hipblasErrcheck(hipblasZgeam(cublas_handle, + HIPBLAS_OP_T, + HIPBLAS_OP_N, + col, + row, + &ONE, + (hipblasDoubleComplex*)input_matrix, + col, + &ZERO, + (hipblasDoubleComplex*)input_matrix, + col, + (hipblasDoubleComplex*)device_temp, + col)); + } + else { int thread = 1024; int block = (row + col + thread - 1) / thread; - hipLaunchKernelGGL(HIP_KERNEL_NAME(matrix_transpose_kernel>), dim3(block), dim3(thread), 0, 0, row, col, (thrust::complex*)input_matrix, (thrust::complex*)device_temp); + hipLaunchKernelGGL(HIP_KERNEL_NAME(matrix_transpose_kernel>), + dim3(block), + dim3(thread), + 0, + 0, + row, + col, + (thrust::complex*)input_matrix, + (thrust::complex*)device_temp); hipCheckOnDebug(); } @@ -419,7 +534,17 @@ void matrixCopy, base_device::DEVICE_GPU>::operator()(const const dim3 blockSize(16, 16); const dim3 gridSize((n1 + blockSize.x - 1) / blockSize.x, (n2 + blockSize.y - 1) / blockSize.y); - hipLaunchKernelGGL(HIP_KERNEL_NAME(matrix_copy_kernel>), gridSize, blockSize, 0, 0, n1, n2, reinterpret_cast*>(A), LDA, reinterpret_cast*>(B), LDB); + hipLaunchKernelGGL(HIP_KERNEL_NAME(matrix_copy_kernel>), + gridSize, + blockSize, + 0, + 0, + n1, + n2, + reinterpret_cast*>(A), + LDA, + reinterpret_cast*>(B), + LDB); hipCheckOnDebug(); } template <> @@ -433,14 +558,22 @@ void matrixCopy, base_device::DEVICE_GPU>::operator()(const const dim3 blockSize(16, 16); const dim3 gridSize((n1 + blockSize.x - 1) / blockSize.x, (n2 + blockSize.y - 1) / blockSize.y); - hipLaunchKernelGGL(HIP_KERNEL_NAME(matrix_copy_kernel>), gridSize, blockSize, 0, 0, n1, n2, reinterpret_cast*>(A), LDA, reinterpret_cast*>(B), LDB); + hipLaunchKernelGGL(HIP_KERNEL_NAME(matrix_copy_kernel>), + gridSize, + blockSize, + 0, + 0, + n1, + n2, + reinterpret_cast*>(A), + LDA, + reinterpret_cast*>(B), + LDB); hipCheckOnDebug(); } - - // Explicitly instantiate functors for the types of functor registered. template struct matrixCopy; template struct matrixCopy, base_device::DEVICE_GPU>; template struct matrixCopy, base_device::DEVICE_GPU>; -} // namespace ModuleBase +} // namespace ModuleBase diff --git a/source/module_base/kernels/rocm/math_kernel_op_vec.hip.cu b/source/source_base/kernels/rocm/math_kernel_op_vec.hip.cu similarity index 92% rename from source/module_base/kernels/rocm/math_kernel_op_vec.hip.cu rename to source/source_base/kernels/rocm/math_kernel_op_vec.hip.cu index 9e05160c54..b52ec119c1 100644 --- a/source/module_base/kernels/rocm/math_kernel_op_vec.hip.cu +++ b/source/source_base/kernels/rocm/math_kernel_op_vec.hip.cu @@ -1,19 +1,21 @@ -#include "module_base/kernels/math_kernel_op.h" +#include "source_base/kernels/math_kernel_op.h" #include #include template <> -struct GetTypeReal> { +struct GetTypeReal> +{ using type = float; /**< The return type specialization for std::complex. */ }; template <> -struct GetTypeReal> { +struct GetTypeReal> +{ using type = double; /**< The return type specialization for std::complex. */ }; namespace ModuleBase { -void xdot_wrapper(const int &n, const float * x, const int &incx, const float * y, const int &incy, float &result); -void xdot_wrapper(const int &n, const double * x, const int &incx, const double * y, const int &incy, double &result); +void xdot_wrapper(const int& n, const float* x, const int& incx, const float* y, const int& incy, float& result); +void xdot_wrapper(const int& n, const double* x, const int& incx, const double* y, const int& incy, double& result); // Define the CUDA kernel: template @@ -52,9 +54,9 @@ __launch_bounds__(1024) __global__ void vector_mul_vector_kernel(const int size, template __launch_bounds__(1024) __global__ void vector_div_constant_kernel(const int size, - T* result, - const T* vector, - const typename GetTypeReal::type constant) + T* result, + const T* vector, + const typename GetTypeReal::type constant) { int i = blockIdx.x * blockDim.x + threadIdx.x; if (i < size) @@ -158,9 +160,9 @@ void vector_mul_real_op, base_device::DEVICE_GPU>::operator // vector operator: result[i] = vector[i] / constant template <> void vector_div_constant_op::operator()(const int& dim, - double* result, - const double* vector, - const double constant) + double* result, + const double* vector, + const double constant) { int thread = 1024; int block = (dim + thread - 1) / thread; @@ -179,9 +181,9 @@ void vector_div_constant_op::operator()(const i template inline void vector_div_constant_wrapper(const int& dim, - std::complex* result, - const std::complex* vector, - const FPTYPE constant) + std::complex* result, + const std::complex* vector, + const FPTYPE constant) { thrust::complex* result_tmp = reinterpret_cast*>(result); const thrust::complex* vector_tmp = reinterpret_cast*>(vector); @@ -202,18 +204,19 @@ inline void vector_div_constant_wrapper(const int& dim, template <> void vector_div_constant_op, base_device::DEVICE_GPU>::operator()(const int& dim, - std::complex* result, - const std::complex* vector, - const float constant) + std::complex* result, + const std::complex* vector, + const float constant) { vector_div_constant_wrapper(dim, result, vector, constant); } template <> -void vector_div_constant_op, base_device::DEVICE_GPU>::operator()(const int& dim, - std::complex* result, - const std::complex* vector, - const double constant) +void vector_div_constant_op, base_device::DEVICE_GPU>::operator()( + const int& dim, + std::complex* result, + const std::complex* vector, + const double constant) { vector_div_constant_wrapper(dim, result, vector, constant); } @@ -352,11 +355,11 @@ void vector_div_vector_op, base_device::DEVICE_GPU>::operat // vector operator: result[i] = vector1[i] * constant1 + vector2[i] * constant2 template void vector_add_vector_op::operator()(const int& dim, - T* result, - const T* vector1, - const Real constant1, - const T* vector2, - const Real constant2) + T* result, + const T* vector1, + const Real constant1, + const T* vector2, + const Real constant2) { using Type = typename GetTypeThrust::type; using Real = typename GetTypeReal::type; diff --git a/source/module_base/kernels/rocm/math_ylm_op.hip.cu b/source/source_base/kernels/rocm/math_ylm_op.hip.cu similarity index 57% rename from source/module_base/kernels/rocm/math_ylm_op.hip.cu rename to source/source_base/kernels/rocm/math_ylm_op.hip.cu index 8cfdac4a39..946c87374a 100644 --- a/source/module_base/kernels/rocm/math_ylm_op.hip.cu +++ b/source/source_base/kernels/rocm/math_ylm_op.hip.cu @@ -1,24 +1,25 @@ -#include "module_base/kernels/math_ylm_op.h" +#include "source_base/kernels/math_ylm_op.h" -#include #include +#include -namespace ModuleBase { +namespace ModuleBase +{ #define THREADS_PER_BLOCK 256 template -__device__ __inline__ -FPTYPE __fact(const int n) { +__device__ __inline__ FPTYPE __fact(const int n) +{ FPTYPE f = 1.0; - for (int i = n; i > 1; i--) { + for (int i = n; i > 1; i--) + { f *= i; } return f; } -__device__ __inline__ -int __semi_fact(const int n) +__device__ __inline__ int __semi_fact(const int n) { int semif = 1; for (int i = n; i > 2; i -= 2) @@ -29,26 +30,29 @@ int __semi_fact(const int n) } template -__global__ void cal_ylm_real( - const int ng, - const int lmax, - const FPTYPE SQRT2, - const FPTYPE PI, - const FPTYPE PI_HALF, - const FPTYPE FOUR_PI, - const FPTYPE SQRT_INVERSE_FOUR_PI, - const FPTYPE *g, - FPTYPE * p, - FPTYPE * ylm) +__global__ void cal_ylm_real(const int ng, + const int lmax, + const FPTYPE SQRT2, + const FPTYPE PI, + const FPTYPE PI_HALF, + const FPTYPE FOUR_PI, + const FPTYPE SQRT_INVERSE_FOUR_PI, + const FPTYPE* g, + FPTYPE* p, + FPTYPE* ylm) { int ig = blockIdx.x * blockDim.x + threadIdx.x; - if (ig >= ng) {return;} + if (ig >= ng) + { + return; + } FPTYPE cost = 0.0, phi = 0.0; //---------------------------------------------------------- // EXPLAIN : if lmax = 1,only use Y00 , output result. //---------------------------------------------------------- - if (lmax == 0) { + if (lmax == 0) + { ylm[0 * ng + ig] = SQRT_INVERSE_FOUR_PI; return; } @@ -57,47 +61,55 @@ __global__ void cal_ylm_real( // NAME : cost = cos(theta),theta and phi are polar angles // NAME : phi //---------------------------------------------------------- - const FPTYPE gmod = sqrt(g[ig * 3 + 0] * g[ig * 3 + 0] + g[ig * 3 + 1] * g[ig * 3 + 1] + g[ig * 3 + 2] * g[ig * 3 + 2]); + const FPTYPE gmod + = sqrt(g[ig * 3 + 0] * g[ig * 3 + 0] + g[ig * 3 + 1] * g[ig * 3 + 1] + g[ig * 3 + 2] * g[ig * 3 + 2]); cost = gmod < 1.0e-9 ? 0.0 : g[ig * 3 + 2] / gmod; // beware the arc tan, it is defined modulo pi - if (g[ig * 3 + 0] > 1.0e-9) { + if (g[ig * 3 + 0] > 1.0e-9) + { phi = atan(g[ig * 3 + 1] / g[ig * 3 + 0]); } - else if (g[ig * 3 + 0] < -1.e-9) { + else if (g[ig * 3 + 0] < -1.e-9) + { phi = atan(g[ig * 3 + 1] / g[ig * 3 + 0]) + PI; } - else { - phi = PI_HALF * ((g[ig * 3 + 1] >= 0.0) ? 1.0 : -1.0); //HLX: modified on 10/13/2006 - } // end if + else + { + phi = PI_HALF * ((g[ig * 3 + 1] >= 0.0) ? 1.0 : -1.0); // HLX: modified on 10/13/2006 + } // end if //========================================================== // NAME : p(Legendre Polynomials) (0 <= m <= l) //========================================================== int lm = -1; - for (int l = 0; l <= lmax; l++) { + for (int l = 0; l <= lmax; l++) + { const FPTYPE c = sqrt((2 * l + 1) / FOUR_PI); - if (l == 0) { + if (l == 0) + { p[0 * (lmax + 1) * ng + 0 * ng + ig] = 1.0; } - else if (l == 1) { + else if (l == 1) + { p[0 * (lmax + 1) * ng + 1 * ng + ig] = cost; FPTYPE var = (1.0 - cost * cost) > 0.0 ? (1.0 - cost * cost) : 0.0; p[1 * (lmax + 1) * ng + 1 * ng + ig] = -sqrt(var); } - else { - const int l1 = l - 1, - l2 = l - 2, - l3 = 2 * l - 1; + else + { + const int l1 = l - 1, l2 = l - 2, l3 = 2 * l - 1; // recursion on l for P(:,l,m) - for (int m = 0; m <= l2; m++) { // do m = 0, l - 2//mohan modify 2007-10-13 - p[m * (lmax + 1) * ng + l * ng + ig] = - (cost * l3 * p[m * (lmax + 1) * ng + l1 * ng + ig] - - (l1 + m) * p[m * (lmax + 1) * ng + l2 * ng + ig]) / (l - m); + for (int m = 0; m <= l2; m++) + { // do m = 0, l - 2//mohan modify 2007-10-13 + p[m * (lmax + 1) * ng + l * ng + ig] = (cost * l3 * p[m * (lmax + 1) * ng + l1 * ng + ig] + - (l1 + m) * p[m * (lmax + 1) * ng + l2 * ng + ig]) + / (l - m); } // end do - p[l1 * (lmax + 1) * ng + l * ng + ig] = - cost * l3 * p[l1 * (lmax + 1) * ng + l1 * ng + ig]; + p[l1 * (lmax + 1) * ng + l * ng + ig] = cost * l3 * p[l1 * (lmax + 1) * ng + l1 * ng + ig]; FPTYPE x2 = (1.0 - cost * cost) > 0.0 ? (1.0 - cost * cost) : 0.0; - p[l * (lmax + 1) * ng + l * ng + ig] = __semi_fact(l3) * pow(x2, static_cast(l) / 2.0);//mohan modify 2007-10-13 - if (l % 2 == 1) { + p[l * (lmax + 1) * ng + l * ng + ig] + = __semi_fact(l3) * pow(x2, static_cast(l) / 2.0); // mohan modify 2007-10-13 + if (l % 2 == 1) + { p[l * (lmax + 1) * ng + l * ng + ig] *= -1; } } // end if @@ -106,11 +118,10 @@ __global__ void cal_ylm_real( ++lm; ylm[lm * ng + ig] = c * p[0 * (lmax + 1) * ng + l * ng + ig]; - for (int m = 1; m <= l; m++) { + for (int m = 1; m <= l; m++) + { // Y_lm, m > 0 - const FPTYPE same = - c * sqrt(__fact(l - m) / - __fact(l + m)) * SQRT2; + const FPTYPE same = c * sqrt(__fact(l - m) / __fact(l + m)) * SQRT2; ++lm; ylm[lm * ng + ig] = same * p[m * (lmax + 1) * ng + l * ng + ig] * cos(m * phi); @@ -119,7 +130,7 @@ __global__ void cal_ylm_real( ++lm; ylm[lm * ng + ig] = same * p[m * (lmax + 1) * ng + l * ng + ig] * sin(m * phi); } - }// end do + } // end do } template @@ -136,17 +147,21 @@ void cal_ylm_real_op::operator()(const base_dev FPTYPE* ylm) { int block = (ng + THREADS_PER_BLOCK - 1) / THREADS_PER_BLOCK; - hipLaunchKernelGGL(HIP_KERNEL_NAME(cal_ylm_real), dim3(block), dim3(THREADS_PER_BLOCK), 0, 0, - ng, - lmax, - SQRT2, - PI, - PI_HALF, - FOUR_PI, - SQRT_INVERSE_FOUR_PI, - g, - p, - ylm); + hipLaunchKernelGGL(HIP_KERNEL_NAME(cal_ylm_real), + dim3(block), + dim3(THREADS_PER_BLOCK), + 0, + 0, + ng, + lmax, + SQRT2, + PI, + PI_HALF, + FOUR_PI, + SQRT_INVERSE_FOUR_PI, + g, + p, + ylm); hipCheckOnDebug(); } @@ -154,4 +169,4 @@ void cal_ylm_real_op::operator()(const base_dev template struct cal_ylm_real_op; template struct cal_ylm_real_op; -} // namespace ModuleBase +} // namespace ModuleBase diff --git a/source/module_base/kernels/test/CMakeLists.txt b/source/source_base/kernels/test/CMakeLists.txt similarity index 100% rename from source/module_base/kernels/test/CMakeLists.txt rename to source/source_base/kernels/test/CMakeLists.txt diff --git a/source/module_base/kernels/test/math_kernel_test.cpp b/source/source_base/kernels/test/math_kernel_test.cpp similarity index 83% rename from source/module_base/kernels/test/math_kernel_test.cpp rename to source/source_base/kernels/test/math_kernel_test.cpp index 38a7b6f9d9..975022ed0e 100644 --- a/source/module_base/kernels/test/math_kernel_test.cpp +++ b/source/source_base/kernels/test/math_kernel_test.cpp @@ -1,7 +1,7 @@ -#include "module_base/blas_connector.h" -#include "module_base/constants.h" -#include "module_base/module_device/memory_op.h" -#include "module_base/kernels/math_kernel_op.h" +#include "source_base/blas_connector.h" +#include "source_base/constants.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/memory_op.h" #include #include @@ -12,30 +12,30 @@ class TestModuleHsolverMathKernel : public ::testing::Test protected: // xx = tf.random.uniform([100], minval=-4, maxval=4, dtype = tf.float64) std::vector> psi_L = {{-0.65412617, -0.74208893}, - {-2.21731157, 0.42540039}, - {3.36373004, -2.51647562}, - {-2.985111, -0.53251562}, - {0.37908265, 0.81605825}, - {1.66281318, 2.71761869}, - {2.2010268, 0.65498149}, - {1.51153638, 0.71501482}, - {0.53546578, 1.4564317}, - {-2.36701143, 1.23009056}, - {3.41302551, -2.3175205}, - {-0.27628221, -1.35701656}}; + {-2.21731157, 0.42540039}, + {3.36373004, -2.51647562}, + {-2.985111, -0.53251562}, + {0.37908265, 0.81605825}, + {1.66281318, 2.71761869}, + {2.2010268, 0.65498149}, + {1.51153638, 0.71501482}, + {0.53546578, 1.4564317}, + {-2.36701143, 1.23009056}, + {3.41302551, -2.3175205}, + {-0.27628221, -1.35701656}}; std::vector> psi_R = {{-1.67837557e-01, -1.70017454e-01}, - {-2.92128115e-02, 2.82765887e-01}, - {-8.71641062e-02, -1.15934278e-01}, - {3.36269232e+00, -1.44692661e-02}, - {-3.81342874e-03, -1.58276988e-01}, - {2.33504238e-01, -1.93195840e-03}, - {2.45520665e-01, 6.46854620e-01}, - {1.58255340e+00, 2.70915699e+00}, - {-1.66142311e-01, 6.27839507e-02}, - {2.17077193e+00, 4.87104731e-01}, - {1.41257916e+00, 5.45282609e-01}, - {-1.29333636e-01, -5.04228492e-03}}; + {-2.92128115e-02, 2.82765887e-01}, + {-8.71641062e-02, -1.15934278e-01}, + {3.36269232e+00, -1.44692661e-02}, + {-3.81342874e-03, -1.58276988e-01}, + {2.33504238e-01, -1.93195840e-03}, + {2.45520665e-01, 6.46854620e-01}, + {1.58255340e+00, 2.70915699e+00}, + {-1.66142311e-01, 6.27839507e-02}, + {2.17077193e+00, 4.87104731e-01}, + {1.41257916e+00, 5.45282609e-01}, + {-1.29333636e-01, -5.04228492e-03}}; const int dim = psi_L.size(); @@ -75,8 +75,7 @@ class TestModuleHsolverMathKernel : public ::testing::Test using vector_mul_real_op_cpu = ModuleBase::vector_mul_real_op, base_device::DEVICE_CPU>; using vector_mul_vector_op_cpu = ModuleBase::vector_mul_vector_op, base_device::DEVICE_CPU>; using vector_div_vector_op_cpu = ModuleBase::vector_div_vector_op, base_device::DEVICE_CPU>; - using vector_add_vector_op_cpu - = ModuleBase::vector_add_vector_op, base_device::DEVICE_CPU>; + using vector_add_vector_op_cpu = ModuleBase::vector_add_vector_op, base_device::DEVICE_CPU>; using axpy_op_cpu = ModuleBase::axpy_op, base_device::DEVICE_CPU>; using scal_op_cpu = ModuleBase::scal_op; using gemv_op_cpu = ModuleBase::gemv_op, base_device::DEVICE_CPU>; @@ -84,54 +83,53 @@ class TestModuleHsolverMathKernel : public ::testing::Test using vector_mul_real_op_gpu = ModuleBase::vector_mul_real_op, base_device::DEVICE_GPU>; using vector_mul_vector_op_gpu = ModuleBase::vector_mul_vector_op, base_device::DEVICE_GPU>; using vector_div_vector_op_gpu = ModuleBase::vector_div_vector_op, base_device::DEVICE_GPU>; - using vector_add_vector_op_gpu - = ModuleBase::vector_add_vector_op, base_device::DEVICE_GPU>; + using vector_add_vector_op_gpu = ModuleBase::vector_add_vector_op, base_device::DEVICE_GPU>; using axpy_op_gpu = ModuleBase::axpy_op, base_device::DEVICE_GPU>; using scal_op_gpu = ModuleBase::scal_op; using gemv_op_gpu = ModuleBase::gemv_op, base_device::DEVICE_GPU>; // haozhihan add std::vector> L = {{-0.65412617, -0.74208893}, - {-2.21731157, 0.42540039}, - {3.36373004, -2.51647562}, - {-2.985111, -0.53251562}, - {0.37908265, 0.81605825}, - {1.66281318, 2.71761869}, - {2.2010268, 0.65498149}, - {1.51153638, 0.71501482}, - {0.53546578, 1.4564317}, - {-2.36701143, 1.23009056}, - {3.41302551, -2.3175205}, - {-0.27628221, -1.35701656}}; + {-2.21731157, 0.42540039}, + {3.36373004, -2.51647562}, + {-2.985111, -0.53251562}, + {0.37908265, 0.81605825}, + {1.66281318, 2.71761869}, + {2.2010268, 0.65498149}, + {1.51153638, 0.71501482}, + {0.53546578, 1.4564317}, + {-2.36701143, 1.23009056}, + {3.41302551, -2.3175205}, + {-0.27628221, -1.35701656}}; std::vector> R = {{-1.67837557e-01, -1.70017454e-01}, - {-2.92128115e-02, 2.82765887e-01}, - {-8.71641062e-02, -1.15934278e-01}, - {3.36269232e+00, -1.44692661e-02}, - {-3.81342874e-03, -1.58276988e-01}, - {2.33504238e-01, -1.93195840e-03}, - {2.45520665e-01, 6.46854620e-01}, - {1.58255340e+00, 2.70915699e+00}, - {-1.66142311e-01, 6.27839507e-02}, - {2.17077193e+00, 4.87104731e-01}, - {1.41257916e+00, 5.45282609e-01}, - {-1.29333636e-01, -5.04228492e-03}}; + {-2.92128115e-02, 2.82765887e-01}, + {-8.71641062e-02, -1.15934278e-01}, + {3.36269232e+00, -1.44692661e-02}, + {-3.81342874e-03, -1.58276988e-01}, + {2.33504238e-01, -1.93195840e-03}, + {2.45520665e-01, 6.46854620e-01}, + {1.58255340e+00, 2.70915699e+00}, + {-1.66142311e-01, 6.27839507e-02}, + {2.17077193e+00, 4.87104731e-01}, + {1.41257916e+00, 5.45282609e-01}, + {-1.29333636e-01, -5.04228492e-03}}; // (1) for test vector_mul_real_op const std::vector> input = L; const double constant = 5.5; const std::vector> output_vector_mul_real_op = {{-0.11893203, -0.13492526}, - {-0.40314756, 0.07734553}, - {0.61158728, -0.45754102}, - {-0.54274745, -0.09682102}, - {0.06892412, 0.14837423}, - {0.30232967, 0.49411249}, - {0.40018669, 0.11908754}, - {0.27482480, 0.13000269}, - {0.09735741, 0.26480576}, - {-0.43036571, 0.22365283}, - {0.62055009, -0.42136736}, - {-0.05023313, -0.24673028}}; + {-0.40314756, 0.07734553}, + {0.61158728, -0.45754102}, + {-0.54274745, -0.09682102}, + {0.06892412, 0.14837423}, + {0.30232967, 0.49411249}, + {0.40018669, 0.11908754}, + {0.27482480, 0.13000269}, + {0.09735741, 0.26480576}, + {-0.43036571, 0.22365283}, + {0.62055009, -0.42136736}, + {-0.05023313, -0.24673028}}; // (2) for test vector_mul_vector_op & vector_div_vector_op const std::vector input_double = { @@ -179,19 +177,18 @@ class TestModuleHsolverMathKernel : public ::testing::Test const double constant2 = 4.4; const std::vector> input1 = L; const std::vector> input2 = R; - const std::vector> output_vector_add_vector_op - = {{-5.05571797, -5.64586374}, - {-14.76279273, 4.05181248}, - {21.81709620, -17.11884992}, - {-4.90588639, -3.57826786}, - {2.48516640, 4.68956570}, - {12.00198564, 17.92778274}, - {15.60706781, 7.16903816}, - {16.93937507, 16.63938857}, - {2.80304798, 9.88869860}, - {-6.07087895, 10.26185851}, - {28.74131667, -12.89639182}, - {-2.39253058, -8.97849535}}; + const std::vector> output_vector_add_vector_op = {{-5.05571797, -5.64586374}, + {-14.76279273, 4.05181248}, + {21.81709620, -17.11884992}, + {-4.90588639, -3.57826786}, + {2.48516640, 4.68956570}, + {12.00198564, 17.92778274}, + {15.60706781, 7.16903816}, + {16.93937507, 16.63938857}, + {2.80304798, 9.88869860}, + {-6.07087895, 10.26185851}, + {28.74131667, -12.89639182}, + {-2.39253058, -8.97849535}}; // (4) for test axpy_op (compute Y = alpha * X + Y ) const std::complex alpha_axpy{-1.5, -2.5}; @@ -297,12 +294,7 @@ TEST_F(TestModuleHsolverMathKernel, vector_div_vector_op_cpu) TEST_F(TestModuleHsolverMathKernel, vector_add_vector_op_cpu) { std::vector> output(input.size()); - vector_add_vector_op_cpu()(dim, - output.data(), - input1.data(), - constant1, - input2.data(), - constant2); + vector_add_vector_op_cpu()(dim, output.data(), input1.data(), constant1, input2.data(), constant2); for (int i = 0; i < input.size(); i++) { EXPECT_LT(fabs(output[i].imag() - output_vector_add_vector_op[i].imag()), 1e-8); @@ -332,17 +324,7 @@ TEST_F(TestModuleHsolverMathKernel, scal_op_cpu) TEST_F(TestModuleHsolverMathKernel, gemv_op_cpu) { - gemv_op_cpu()('C', - 2, - 3, - &ModuleBase::ONE, - A_gemv.data(), - 2, - X_gemv.data(), - 1, - &ModuleBase::ONE, - Y_gemv.data(), - 1); + gemv_op_cpu()('C', 2, 3, &ModuleBase::ONE, A_gemv.data(), 2, X_gemv.data(), 1, &ModuleBase::ONE, Y_gemv.data(), 1); char trans = 'C'; int inc = 1; int row = 2; @@ -498,12 +480,7 @@ TEST_F(TestModuleHsolverMathKernel, vector_add_vector_op_gpu) synchronize_memory_op()(input2_dev, input2.data(), input.size()); // run - vector_add_vector_op_gpu()(dim, - output_dev, - input1_dev, - constant1, - input2_dev, - constant2); + vector_add_vector_op_gpu()(dim, output_dev, input1_dev, constant1, input2_dev, constant2); // syn the output data in GPU to CPU synchronize_memory_op_gpu()(output.data(), output_dev, output.size()); @@ -652,17 +629,15 @@ TEST_F(TestModuleHsolverMathKernel, matrixCopy_op_gpu) std::complex* device_A = nullptr; base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(device_A, A.size()); - base_device::memory:: - synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_CPU>()(device_A, - A.data(), - A.size()); + base_device::memory::synchronize_memory_op, + base_device::DEVICE_GPU, + base_device::DEVICE_CPU>()(device_A, A.data(), A.size()); std::complex* device_B = nullptr; base_device::memory::resize_memory_op, base_device::DEVICE_GPU>()(device_B, B.size()); - base_device::memory:: - synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_CPU>()(device_B, - B.data(), - B.size()); + base_device::memory::synchronize_memory_op, + base_device::DEVICE_GPU, + base_device::DEVICE_CPU>()(device_B, B.data(), B.size()); // run ModuleBase::matrixCopy, base_device::DEVICE_GPU>()(n, LDA, device_A, LDA, device_B, LDB); diff --git a/source/source_base/kernels/test/math_ylm_op_test.cpp b/source/source_base/kernels/test/math_ylm_op_test.cpp new file mode 100644 index 0000000000..3ba7e775e8 --- /dev/null +++ b/source/source_base/kernels/test/math_ylm_op_test.cpp @@ -0,0 +1,343 @@ +#include "source_base/kernels/math_ylm_op.h" + +#include "source_base/module_device/memory_op.h" + +#include +#include +#include + +class TestModuleBaseMathMultiDevice : public ::testing::Test +{ + protected: + // xx = tf.random.uniform([100], minval=-4, maxval=4, dtype = tf.float64) + + const base_device::DEVICE_CPU* cpu_ctx = {}; + const base_device::DEVICE_GPU* gpu_ctx = {}; + + int ng = 59, lmax = 1; + + double SQRT2 = 1.4142135623730951, PI = 3.1415926535897931, PI_HALF = 1.5707963267948966, + FOUR_PI = 12.566370614359172, SQRT_INVERSE_FOUR_PI = 0.28209479177387814; + + std::vector g + = {2, -2, -2, 1, -1, -1, 0, 0, 0, -1, 1, 1, -2, 2, 2, 2, -2, 0, 1, -1, 1, 0, 0, 2, -1, 1, + 3, 2, -2, 2, 1, -1, 3, -1, 1, -3, -2, 2, -2, 1, -1, -3, 0, 0, -2, -1, 1, -1, -2, 2, 0, 2, + 0, -2, 1, 1, -1, 0, 2, 0, -1, 3, 1, 3, -1, -1, 2, 0, 0, 1, 1, 1, 0, 2, 2, 3, -1, 1, + 2, 0, 2, 1, 1, 3, 1, 1, -3, 0, 2, -2, -1, 3, -1, 2, 2, -2, 1, 3, -1, 3, 1, -1, 2, 2, + 0, 1, 3, 1, 3, 1, 1, 2, 2, 2, -1, -3, 1, -2, -2, 2, -2, -2, -2, -3, -1, -1, -1, -3, -1, -2, + -2, 0, -3, -1, 1, 1, -3, -1, 0, -2, 0, -1, -1, 1, -2, 0, 2, 1, -3, 1, 0, -2, 2, -1, -1, 3, + -1, -1, -3, -2, 0, -2, -3, 1, -1, 0, -2, -2, -1, -1, -1, -2, 0, 0, -3, 1, 1}; + std::vector expected_ylm = {0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + 0.282095, + -0.282095, + -0.282095, + 0, + 0.282095, + 0.282095, + 0, + 0.282095, + 0.488603, + 0.441958, + 0.282095, + 0.441958, + -0.441958, + -0.282095, + -0.441958, + -0.488603, + -0.282095, + 0, + -0.345494, + -0.282095, + 0, + 0.147319, + -0.147319, + 0, + 0.282095, + 0.345494, + 0.147319, + 0.345494, + 0.441958, + -0.441958, + -0.345494, + -0.147319, + -0.282095, + -0.147319, + -0.147319, + 0, + 0.147319, + 0.147319, + 0.282095, + 0.147319, + 0.282095, + -0.282095, + -0.147319, + -0.147319, + 0, + 0.147319, + -0.147319, + 0, + 0.282095, + 0.345494, + 0.147319, + 0.345494, + 0.441958, + -0.441958, + -0.345494, + -0.147319, + -0.345494, + -0.282095, + 0, + 0.147319, + -0.282095, + -0.282095, + -2.99183e-17, + 0.282095, + 0.282095, + -0.345494, + -0.282095, + -0, + 0.147319, + -0.282095, + -0.147319, + 0.147319, + 0.282095, + -0.147319, + -0, + 0.282095, + 0.345494, + -0.345494, + -0.282095, + -2.99183e-17, + 0.147319, + -0.441958, + -0.488603, + -0.282095, + -2.11554e-17, + -0.441958, + -0.345494, + -0.147319, + -0.147319, + -2.11554e-17, + 0.147319, + -0.282095, + -0.147319, + -0.441958, + -0.345494, + -0.147319, + -0.441958, + -0.282095, + 0.147319, + 0.282095, + 0.282095, + 0.441958, + 0.147319, + 0.345494, + 0.441958, + -0.147319, + -2.99183e-17, + 0.282095, + 0.345494, + -0.147319, + -2.11554e-17, + 0.147319, + 0.147319, + 0.345494, + 0.441958, + -2.11554e-17, + 0.282095, + 0.488603, + 0.441958, + 0.282095, + 0.282095, + -0.488603, + -0.282095, + -0.282095, + 0.345494, + 0.282095, + -0, + -0.147319, + 0.282095, + 0.147319, + -0.147319, + -0.282095, + 0.147319, + -0, + -0.282095, + -0.345494, + -0, + -0.282095, + -0.488603, + -0.441958, + 0.147319, + -0, + -0.282095, + -0.345494, + 0.147319, + -0, + -0.147319, + -0.147319, + -0.345494, + -0.441958, + -0.282095, + -0.441958, + -0.147319, + -0.345494, + -0.441958, + -0.147319, + -0.282095, + 0.441958, + 0.282095, + 0.282095, + 0.147319, + 0.441958, + 0.345494, + 0.147319, + 0.441958, + 0.488603, + 0.282095, + -4.23108e-17, + 0.441958, + 0.345494, + 0.147319, + 0.147319, + -4.23108e-17, + -0.147319, + 0.345494, + 0.282095, + -5.98366e-17, + -0.147319}; + + using delmem_var_op = base_device::memory::delete_memory_op; + using resmem_var_op = base_device::memory::resize_memory_op; + using syncmem_var_h2d_op + = base_device::memory::synchronize_memory_op; + using syncmem_var_d2h_op + = base_device::memory::synchronize_memory_op; + + void SetUp() override + { + } + void TearDown() override + { + } +}; + +TEST_F(TestModuleBaseMathMultiDevice, cal_ylm_real_op_cpu) +{ + std::vector p((lmax + 1) * (lmax + 1) * ng, 0.0); + std::vector ylm(expected_ylm.size(), 0.0); + ModuleBase::cal_ylm_real_op()(cpu_ctx, + ng, + lmax, + SQRT2, + PI, + PI_HALF, + FOUR_PI, + SQRT_INVERSE_FOUR_PI, + g.data(), + p.data(), + ylm.data()); + + for (int ii = 0; ii < ylm.size(); ii++) + { + EXPECT_LT(fabs(ylm[ii] - expected_ylm[ii]), 6e-5); + } +} + +#if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM +TEST_F(TestModuleBaseMathMultiDevice, cal_ylm_real_op_gpu) +{ + std::vector p((lmax + 1) * (lmax + 1) * ng, 0.0); + std::vector ylm(expected_ylm.size(), 0.0); + double *d_ylm = nullptr, *d_g = nullptr, *d_p = nullptr; + + resmem_var_op()(d_g, g.size()); + resmem_var_op()(d_p, p.size()); + resmem_var_op()(d_ylm, ylm.size()); + + syncmem_var_h2d_op()(d_g, g.data(), g.size()); + syncmem_var_h2d_op()(d_p, p.data(), p.size()); + syncmem_var_h2d_op()(d_ylm, ylm.data(), ylm.size()); + + ModuleBase::cal_ylm_real_op()(gpu_ctx, + ng, + lmax, + SQRT2, + PI, + PI_HALF, + FOUR_PI, + SQRT_INVERSE_FOUR_PI, + d_g, + d_p, + d_ylm); + + syncmem_var_d2h_op()(ylm.data(), d_ylm, ylm.size()); + + for (int ii = 0; ii < ylm.size(); ii++) + { + EXPECT_LT(fabs(ylm[ii] - expected_ylm[ii]), 6e-5); + } + + delmem_var_op()(d_g); + delmem_var_op()(d_p); + delmem_var_op()(d_ylm); +} + +#endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM \ No newline at end of file diff --git a/source/module_base/lapack_connector.h b/source/source_base/lapack_connector.h similarity index 100% rename from source/module_base/lapack_connector.h rename to source/source_base/lapack_connector.h diff --git a/source/module_base/lapack_wrapper.h b/source/source_base/lapack_wrapper.h similarity index 100% rename from source/module_base/lapack_wrapper.h rename to source/source_base/lapack_wrapper.h diff --git a/source/module_base/libm/LICENCE b/source/source_base/libm/LICENCE similarity index 100% rename from source/module_base/libm/LICENCE rename to source/source_base/libm/LICENCE diff --git a/source/module_base/libm/README.md b/source/source_base/libm/README.md similarity index 100% rename from source/module_base/libm/README.md rename to source/source_base/libm/README.md diff --git a/source/module_base/libm/branred.cpp b/source/source_base/libm/branred.cpp similarity index 100% rename from source/module_base/libm/branred.cpp rename to source/source_base/libm/branred.cpp diff --git a/source/module_base/libm/cexp.cpp b/source/source_base/libm/cexp.cpp similarity index 100% rename from source/module_base/libm/cexp.cpp rename to source/source_base/libm/cexp.cpp diff --git a/source/module_base/libm/exp.cpp b/source/source_base/libm/exp.cpp similarity index 100% rename from source/module_base/libm/exp.cpp rename to source/source_base/libm/exp.cpp diff --git a/source/module_base/libm/libm.h b/source/source_base/libm/libm.h similarity index 100% rename from source/module_base/libm/libm.h rename to source/source_base/libm/libm.h diff --git a/source/module_base/libm/sincos.cpp b/source/source_base/libm/sincos.cpp similarity index 100% rename from source/module_base/libm/sincos.cpp rename to source/source_base/libm/sincos.cpp diff --git a/source/module_base/libm/test/CMakeLists.txt b/source/source_base/libm/test/CMakeLists.txt similarity index 100% rename from source/module_base/libm/test/CMakeLists.txt rename to source/source_base/libm/test/CMakeLists.txt diff --git a/source/module_base/libm/test/libm_test.cpp b/source/source_base/libm/test/libm_test.cpp similarity index 100% rename from source/module_base/libm/test/libm_test.cpp rename to source/source_base/libm/test/libm_test.cpp diff --git a/source/module_base/macros.h b/source/source_base/macros.h similarity index 100% rename from source/module_base/macros.h rename to source/source_base/macros.h diff --git a/source/module_base/main.cpp b/source/source_base/main.cpp similarity index 100% rename from source/module_base/main.cpp rename to source/source_base/main.cpp diff --git a/source/module_base/math_bspline.cpp b/source/source_base/math_bspline.cpp similarity index 100% rename from source/module_base/math_bspline.cpp rename to source/source_base/math_bspline.cpp diff --git a/source/module_base/math_bspline.h b/source/source_base/math_bspline.h similarity index 100% rename from source/module_base/math_bspline.h rename to source/source_base/math_bspline.h diff --git a/source/module_base/math_chebyshev.cpp b/source/source_base/math_chebyshev.cpp similarity index 99% rename from source/module_base/math_chebyshev.cpp rename to source/source_base/math_chebyshev.cpp index 60bb560f05..c9dc449f46 100644 --- a/source/module_base/math_chebyshev.cpp +++ b/source/source_base/math_chebyshev.cpp @@ -3,7 +3,7 @@ #include "blas_connector.h" #include "constants.h" #include "global_function.h" -#include "module_base/module_container/ATen/kernels/blas.h" +#include "source_base/module_container/ATen/kernels/blas.h" #include "tool_quit.h" #include @@ -641,11 +641,11 @@ void Chebyshev::recurs_complex( { container::kernels::blas_scal, ct_Device>()(N, &two, arraynp1 + ib * LDA, 1); container::kernels::blas_axpy, ct_Device>()(N, - &invone, - arrayn_1 + ib * LDA, - 1, - arraynp1 + ib * LDA, - 1); + &invone, + arrayn_1 + ib * LDA, + 1, + arraynp1 + ib * LDA, + 1); // for (int i = 0; i < N; ++i) // { diff --git a/source/module_base/math_chebyshev.h b/source/source_base/math_chebyshev.h similarity index 94% rename from source/module_base/math_chebyshev.h rename to source/source_base/math_chebyshev.h index 122f2021e9..875330325a 100644 --- a/source/module_base/math_chebyshev.h +++ b/source/source_base/math_chebyshev.h @@ -1,9 +1,9 @@ #ifndef STO_CHEBYCHEV_H #define STO_CHEBYCHEV_H #include "fftw3.h" -#include "module_base/module_device/device.h" -#include "module_base/module_device/memory_op.h" -#include "module_base/module_container/ATen/core/tensor_types.h" +#include "source_base/module_container/ATen/core/tensor_types.h" +#include "source_base/module_device/device.h" +#include "source_base/module_device/memory_op.h" #include #include @@ -209,8 +209,8 @@ class Chebyshev REAL* coefr_cpu = nullptr; //[CPU] expansion coefficient of each order std::complex* coefc_cpu = nullptr; //[CPU] expansion coefficient of each order - FFTW fftw; // use for fftw - REAL* polytrace; //[CPU] w_n = \sum_i v^+ * T_n(A) * v, only + FFTW fftw; // use for fftw + REAL* polytrace; //[CPU] w_n = \sum_i v^+ * T_n(A) * v, only bool getcoef_real; // coef_real has been calculated bool getcoef_complex; // coef_complex has been calculated @@ -223,19 +223,21 @@ class Chebyshev const int N, const int LDA = 1, const int m = 1); - + private: Device* ctx = {}; base_device::DEVICE_CPU* cpu_ctx = {}; using ct_Device = typename container::PsiToContainer::type; - using resmem_complex_op = base_device::memory::resize_memory_op, Device>; + using resmem_complex_op = base_device::memory::resize_memory_op, Device>; using resmem_var_op = base_device::memory::resize_memory_op; using delmem_complex_op = base_device::memory::delete_memory_op, Device>; using delmem_var_op = base_device::memory::delete_memory_op; using syncmem_var_h2d_op = base_device::memory::synchronize_memory_op; using syncmem_var_d2h_op = base_device::memory::synchronize_memory_op; - using syncmem_complex_h2d_op = base_device::memory::synchronize_memory_op, Device, base_device::DEVICE_CPU>; - using syncmem_complex_d2h_op = base_device::memory::synchronize_memory_op, base_device::DEVICE_CPU, Device>; + using syncmem_complex_h2d_op + = base_device::memory::synchronize_memory_op, Device, base_device::DEVICE_CPU>; + using syncmem_complex_d2h_op + = base_device::memory::synchronize_memory_op, base_device::DEVICE_CPU, Device>; using memcpy_var_op = base_device::memory::synchronize_memory_op; using memcpy_complex_op = base_device::memory::synchronize_memory_op, Device, Device>; using setmem_complex_op = base_device::memory::set_memory_op, Device>; diff --git a/source/module_base/math_erf_complex.cpp b/source/source_base/math_erf_complex.cpp similarity index 100% rename from source/module_base/math_erf_complex.cpp rename to source/source_base/math_erf_complex.cpp diff --git a/source/module_base/math_erf_complex.h b/source/source_base/math_erf_complex.h similarity index 100% rename from source/module_base/math_erf_complex.h rename to source/source_base/math_erf_complex.h diff --git a/source/module_base/math_integral.cpp b/source/source_base/math_integral.cpp similarity index 100% rename from source/module_base/math_integral.cpp rename to source/source_base/math_integral.cpp diff --git a/source/module_base/math_integral.h b/source/source_base/math_integral.h similarity index 100% rename from source/module_base/math_integral.h rename to source/source_base/math_integral.h diff --git a/source/module_base/math_lebedev_laikov.cpp b/source/source_base/math_lebedev_laikov.cpp similarity index 100% rename from source/module_base/math_lebedev_laikov.cpp rename to source/source_base/math_lebedev_laikov.cpp diff --git a/source/module_base/math_lebedev_laikov.h b/source/source_base/math_lebedev_laikov.h similarity index 100% rename from source/module_base/math_lebedev_laikov.h rename to source/source_base/math_lebedev_laikov.h diff --git a/source/module_base/math_polyint.cpp b/source/source_base/math_polyint.cpp similarity index 100% rename from source/module_base/math_polyint.cpp rename to source/source_base/math_polyint.cpp diff --git a/source/module_base/math_polyint.h b/source/source_base/math_polyint.h similarity index 100% rename from source/module_base/math_polyint.h rename to source/source_base/math_polyint.h diff --git a/source/module_base/math_sphbes.cpp b/source/source_base/math_sphbes.cpp similarity index 100% rename from source/module_base/math_sphbes.cpp rename to source/source_base/math_sphbes.cpp diff --git a/source/module_base/math_sphbes.h b/source/source_base/math_sphbes.h similarity index 100% rename from source/module_base/math_sphbes.h rename to source/source_base/math_sphbes.h diff --git a/source/source_base/math_ylmreal.cpp b/source/source_base/math_ylmreal.cpp new file mode 100644 index 0000000000..cfbe19f098 --- /dev/null +++ b/source/source_base/math_ylmreal.cpp @@ -0,0 +1,707 @@ +#include "math_ylmreal.h" + +#include "constants.h" +#include "realarray.h" +#include "source_base/array_pool.h" +#include "source_base/kernels/math_ylm_op.h" +#include "source_base/libm/libm.h" +#include "source_base/module_device/memory_op.h" +#include "timer.h" +#include "tool_quit.h" +#include "ylm.h" + +#include +#include + +namespace ModuleBase +{ + +YlmReal::YlmReal() +{ +} +YlmReal::~YlmReal() +{ +} + +void YlmReal::rlylm(const int lmax, + const double& x, + const double& y, + const double& z, // g_cartesian_vec(x,y,z) + double* rly // output +) +{ + ModuleBase::timer::tick("YlmReal", "rlylm"); + + assert(lmax >= 0); + + // get xy_dependence + assert(lmax <= 19); + + double Am[20]; + double Bm[20]; + + // mohan add 2021-05-07 + for (int i = 0; i < 20; ++i) + { + Am[i] = 0.0; + Bm[i] = 0.0; + } + + // ZEROS(Am, 20); + // ZEROS(Bm, 20); + + double x2, x3, x4, x5; + double y2, y3, y4, y5; + + x2 = x * x; + x3 = x2 * x; + x4 = x3 * x; + x5 = x4 * x; + + y2 = y * y; + y3 = y2 * y; + y4 = y3 * y; + y5 = y4 * y; + + // x-y dependence + // Am + // Bm + for (int im = 0; im < lmax + 1; im++) + { + if (im == 0) + { + Am[0] = 1.0; + Bm[0] = 0.0; + } + else if (im == 1) + { + Am[1] = x; + Bm[1] = y; + } + else if (im == 2) + { + Am[2] = x2 - y2; + Bm[2] = 2.0 * x * y; + } + else if (im == 3) + { + Am[3] = x3 - 3.0 * x * y2; + Bm[3] = 3.0 * x2 * y - y3; + } + else if (im == 4) + { + Am[4] = x4 - 6.0 * x2 * y2 + y4; + Bm[4] = 4.0 * (x3 * y - x * y3); + } + else if (im == 5) + { + Am[5] = x5 - 10.0 * x3 * y2 + 5.0 * x * y4; + Bm[5] = 5.0 * x4 * y - 10.0 * x2 * y3 + y5; + } + else + { + for (int ip = 0; ip <= im; ip++) + { + double aux = Fact(im) / Fact(ip) / Fact(im - ip); + Am[im] += aux * pow(x, ip) * pow(y, im - ip) * cos((im - ip) * ModuleBase::PI / 2.0); + Bm[im] += aux * pow(x, ip) * pow(y, im - ip) * sin((im - ip) * ModuleBase::PI / 2.0); + } + } + } + + // z dependence + double zdep[20][20]; + + for (int il = 0; il < 20; il++) + { + for (int jl = 0; jl < 20; jl++) + { + zdep[il][jl] = 0.0; // mohan add 2021-05-07 + } + // ZEROS(zdep[il], 20); + } + + double z2 = z * z; + double z3 = z2 * z; + double z4 = z3 * z; + // double z5 = z4 * z; + + double r = sqrt(x * x + y * y + z * z); + double r2 = r * r; + double r3 = r2 * r; + double r4 = r3 * r; + + for (int il = 0; il < lmax + 1; il++) + { + if (il == 0) + { + zdep[0][0] = 1.0; + } + else if (il == 1) + { + zdep[1][0] = z; + zdep[1][1] = 1.0; + } + else if (il == 2) + { + zdep[2][0] = 0.5 * (3.0 * z2 - r2); + zdep[2][1] = sqrt(3.0) * z; + zdep[2][2] = sqrt(3.0) * 0.5; + } + else if (il == 3) + { + zdep[3][0] = 2.5 * z3 - 1.5 * z * r2; + zdep[3][1] = 0.25 * sqrt(6.0) * (5.0 * z2 - r2); + zdep[3][2] = 0.5 * sqrt(15.0) * z; + zdep[3][3] = 0.25 * sqrt(10.0); + } + else if (il == 4) + { + zdep[4][0] = 0.125 * (35.0 * z4 - 30.0 * r2 * z2 + 3.0 * r4); + zdep[4][1] = sqrt(10.0) * 0.25 * z * (7.0 * z2 - 3.0 * r2); + zdep[4][2] = sqrt(5.0) * 0.25 * (7.0 * z2 - r2); + zdep[4][3] = sqrt(70.0) * 0.25 * z; + zdep[4][4] = sqrt(35.0) * 0.125; + } + else if (il == 5) + { + zdep[5][0] = 0.125 * z * (63.0 * z4 - 70.0 * z2 * r2 + 15.0 * r4); + zdep[5][1] = 0.125 * sqrt(15.0) * (21.0 * z4 - 14.0 * z2 * r2 + r4); + zdep[5][2] = 0.25 * sqrt(105.0) * z * (3.0 * z2 - r2); + zdep[5][3] = 0.0625 * sqrt(70.0) * (9.0 * z2 - r2); + zdep[5][4] = 0.375 * sqrt(35.0) * z; + zdep[5][5] = 0.1875 * sqrt(14.0); + } + else + { + for (int im = 0; im <= il; im++) + { + int kmax = static_cast((il - im) / 2); + for (int ik = 0; ik <= kmax; ik++) + { + int twok = 2 * ik; + + double gamma; + double aux0, aux1, aux2, aux3; + + aux0 = pow(-1.0, ik) * pow(2.0, -il); + aux1 = Fact(il) / Fact(ik) / Fact(il - ik); + aux2 = Fact(2 * il - twok) / Fact(il) / Fact(il - twok); + aux3 = Fact(il - twok) / Fact(il - twok - im); + + gamma = aux0 * aux1 * aux2 * aux3; + + assert(il - twok - im >= 0); + zdep[il][im] += pow(r, twok) * pow(z, il - twok - im) * gamma; + } + + if (im >= 1) + { + zdep[il][im] *= sqrt(2 * Fact(il - im) / Fact(il + im)); + } + } + } + } + + // calc + int ic = 0; + + // special case for r=0 + double rpi = r; + const double tiny = 1.0E-10; + if (rpi < tiny) + rpi += tiny; + + for (int il = 0; il <= lmax; il++) + { + double fac = sqrt((2.0 * il + 1.0) / ModuleBase::FOUR_PI); + + double rl = pow(rpi, il); + + // m=0 + rly[ic] = Am[0] * zdep[il][0] * fac / rl; + + ic++; + + // m ! = 0 + for (int im = 1; im <= il; im++) + { + // m>0 + rly[ic] = Am[im] * zdep[il][im] * pow(-1.0, im) * fac / rl; + + ic++; + + // m<0 + rly[ic] = Bm[im] * zdep[il][im] * pow(-1.0, im) * fac / rl; + + ic++; + } + } + + ModuleBase::timer::tick("YlmReal", "rlylm"); + return; +} + +void YlmReal::Ylm_Real2(const int lmax2, // lmax2 = (lmax+1)^2 + const int ng, // + const ModuleBase::Vector3* g, // g_cartesian_vec(x,y,z) + matrix& ylm // output +) +{ + if (ng < 1 || lmax2 < 1) + { + ModuleBase::WARNING("YLM_REAL", "ng<1 or lmax2<1"); + return; + } + + //---------------------------------------------------------- + // EXPLAIN : find out lmax + //---------------------------------------------------------- + bool out_of_range = true; + int lmax = 0; + for (int l = 0; l < 30; l++) + { + if ((l + 1) * (l + 1) == lmax2) + { + lmax = l; + out_of_range = false; + break; + } + } + if (out_of_range) + { + ModuleBase::WARNING_QUIT("YLM_REAL", "l>30 or l<0"); + } + + //---------------------------------------------------------- + // Start CALC + //---------------------------------------------------------- + std::vector rly(lmax2); + + for (int ig = 0; ig < ng; ig++) + { + rlylm(lmax, g[ig].x, g[ig].y, g[ig].z, rly.data()); + + for (int lm = 0; lm < lmax2; lm++) + { + ylm(lm, ig) = rly[lm]; + } + } + + return; +} + +//========================================================== +// MEMBER FUNCTION : +// NAME : YLM_REAL(Real spherical harmonics ylm(G) up to l=lmax +// Use Numerical recursive algorithm as given in Numerical Recipes +//========================================================== +// from ylmr2.f90 + +template +void YlmReal::Ylm_Real(Device* ctx, const int lmax2, const int ng, const FPTYPE* g, FPTYPE* ylm) +{ + using resmem_var_op = base_device::memory::resize_memory_op; + using delmem_var_op = base_device::memory::delete_memory_op; + using cal_ylm_real_op = ModuleBase::cal_ylm_real_op; + + if (ng < 1 || lmax2 < 1) + { + ModuleBase::WARNING("YLM_REAL", "ng<1 or lmax2<1"); + return; + } + + //---------------------------------------------------------- + // EXPLAIN : find out lmax + //---------------------------------------------------------- + bool out_of_range = true; + int lmax = 0; + for (int l = 0; l < 30; l++) + { + if ((l + 1) * (l + 1) == lmax2) + { + lmax = l; + out_of_range = false; + break; + } + } + if (out_of_range) + { + ModuleBase::WARNING_QUIT("YLM_REAL", "l>30 or l<0"); + } + FPTYPE *p = nullptr, *phi = nullptr, *cost = nullptr; + resmem_var_op()(p, (lmax + 1) * (lmax + 1) * ng, "YlmReal::Ylm_Real"); + + cal_ylm_real_op()(ctx, + ng, + lmax, + ModuleBase::SQRT2, + ModuleBase::PI, + ModuleBase::PI_HALF, + ModuleBase::FOUR_PI, + ModuleBase::SQRT_INVERSE_FOUR_PI, + g, + p, + ylm); + + delmem_var_op()(p); + delmem_var_op()(phi); + delmem_var_op()(cost); +} // end subroutine ylmr2 + +//========================================================== +// MEMBER FUNCTION : +// NAME : YLM_REAL(Real spherical harmonics ylm(G) up to l=lmax +// Use Numerical recursive algorithm as given in Numerical Recipes +//========================================================== +// from ylmr2.f90 +void YlmReal::Ylm_Real(const int lmax2, // lmax2 = (lmax+1)^2 + const int ng, // + const ModuleBase::Vector3* g, // g_cartesian_vec(x,y,z) + matrix& ylm // output +) +{ + + if (ng < 1 || lmax2 < 1) + { + ModuleBase::WARNING("YLM_REAL", "ng<1 or lmax2<1"); + return; + } + + //---------------------------------------------------------- + // EXPLAIN : find out lmax + //---------------------------------------------------------- + bool out_of_range = true; + int lmax = 0; + for (int l = 0; l < 30; l++) + { + if ((l + 1) * (l + 1) == lmax2) + { + lmax = l; + out_of_range = false; + break; + } + } + if (out_of_range) + { + ModuleBase::WARNING_QUIT("YLM_REAL", "l>30 or l<0"); + } + + //---------------------------------------------------------- + // EXPLAIN : if lmax = 1,only use Y00 , output result. + //---------------------------------------------------------- + if (lmax == 0) + { +#ifdef _OPENMP +#pragma omp parallel for +#endif + for (int i = 0; i < ng; i++) + { + ylm(0, i) = ModuleBase::SQRT_INVERSE_FOUR_PI; + } + return; + } + + //---------------------------------------------------------- + // LOCAL VARIABLES : + // NAME : cost = cos(theta),theta and phi are polar angles + // NAME : phi + //---------------------------------------------------------- + std::vector cost(ng); + std::vector phi(ng); + +#ifdef _OPENMP +#pragma omp parallel for +#endif + for (int ig = 0; ig < ng; ig++) + { + const double gmod = g[ig].norm(); + if (gmod < 1.0e-9) + { + cost[ig] = 0.0; + } + else + { + cost[ig] = g[ig].z / gmod; + } // endif + + // beware the arc tan, it is defined modulo pi + if (g[ig].x > 1.0e-9) + { + phi[ig] = atan(g[ig].y / g[ig].x); + } + else if (g[ig].x < -1.e-9) + { + phi[ig] = atan(g[ig].y / g[ig].x) + ModuleBase::PI; + } + else + { + phi[ig] = ModuleBase::PI_HALF * ((g[ig].y >= 0.0) ? 1.0 : -1.0); // HLX: modified on 10/13/2006 + } // end if + } // enddo + + //========================================================== + // NAME : p(Legendre Polynomials) (0 <= m <= l) + //========================================================== + ModuleBase::realArray p(lmax + 1, lmax + 1, ng); + int lm = -1; + for (int l = 0; l <= lmax; l++) + { + const double c = sqrt((2 * l + 1) / ModuleBase::FOUR_PI); + if (l == 0) + { +#ifdef _OPENMP +#pragma omp parallel for +#endif + for (int i = 0; i < ng; i++) + { + p(0, 0, i) = 1.0; + } + } + else if (l == 1) + { +#ifdef _OPENMP +#pragma omp parallel for +#endif + for (int i = 0; i < ng; i++) + { + p(0, 1, i) = cost[i]; + auto x1 = 1.0 - cost[i] * cost[i]; + x1 = std::max(0.0, x1); + p(1, 1, i) = -sqrt(x1); + } + } + else + { + const int l1 = l - 1; + const int l2 = l - 2; + const int l3 = 2 * l - 1; + // recursion on l for P(:,l,m) +#ifdef _OPENMP +#pragma omp parallel for collapse(2) +#endif + for (int m = 0; m <= l2; m++) // do m = 0, l - 2//mohan modify 2007-10-13 + { + for (int i = 0; i < ng; i++) + { + p(m, l, i) = (cost[i] * l3 * p(m, l1, i) - (l1 + m) * p(m, l2, i)) / (l - m); + } + } // end do +#ifdef _OPENMP +#pragma omp parallel for +#endif + for (int i = 0; i < ng; i++) + { + p(l1, l, i) = cost[i] * l3 * p(l1, l1, i); + auto x2 = 1.0 - cost[i] * cost[i]; + x2 = std::max(0.0, x2); + p(l, l, i) = Semi_Fact(l3) * pow(x2, static_cast(l) / 2.0); // mohan modify 2007-10-13 + if (l % 2 == 1) + { + p(l, l, i) = -p(l, l, i); + } + } + } // end if + + // Y_lm, m = 0 + ++lm; +#ifdef _OPENMP +#pragma omp parallel for +#endif + for (int i = 0; i < ng; i++) + { + ylm(lm, i) = c * p(0, l, i); + } + + for (int m = 1; m <= l; m++) + { + // Y_lm, m > 0 + const double same + = c * sqrt(static_cast(Fact(l - m)) / static_cast(Fact(l + m))) * ModuleBase::SQRT2; + + ++lm; +#ifdef _OPENMP +#pragma omp parallel for +#endif + for (int i = 0; i < ng; i++) + { + double sinp, cosp; + ModuleBase::libm::sincos(m * phi[i], &sinp, &cosp); + ylm(lm, i) = same * p(m, l, i) * cosp; + ylm(lm + 1, i) = same * p(m, l, i) * sinp; + } + + // Y_lm, m < 0 + ++lm; + + /* + * mohan test bug 2009-03-03 + * + if(l==9 && m==8) + { + if(my_rank==0) + { + std::ofstream ofs("Log2.txt"); + for(int ig=0; ig* g, + matrix& ylm, + matrix& dylmx, + matrix& dylmy, + matrix& dylmz) +{ + ModuleBase::Ylm::set_coefficients(); + const int lmax = int(sqrt(double(lmax2)) + 0.1) - 1; + std::vector tmpylm((lmax2 + 1) * (lmax2 + 1)); + Array_Pool tmpgylm((lmax2 + 1) * (lmax2 + 1), 3); + + for (int ig = 0; ig < ng; ig++) + { + ModuleBase::Vector3 gg = g[ig]; + double gmod = gg.norm(); + if (gmod < 1.0e-9) + { + for (int lm = 0; lm < lmax2; ++lm) + { + if (lm == 0) + ylm(lm, ig) = ModuleBase::SQRT_INVERSE_FOUR_PI; + else + ylm(lm, ig) = 0; + dylmx(lm, ig) = dylmy(lm, ig) = dylmz(lm, ig) = 0; + } + } + else + { + Ylm::grad_rl_sph_harm(lmax2, gg.x, gg.y, gg.z, tmpylm.data(), tmpgylm.get_ptr_2D()); + int lm = 0; + for (int il = 0; il <= lmax; ++il) + { + for (int im = 0; im < 2 * il + 1; ++im, ++lm) + { + double rlylm = tmpylm[lm]; + ylm(lm, ig) = rlylm / pow(gmod, il); + dylmx(lm, ig) = (tmpgylm[lm][0] - il * rlylm * gg.x / pow(gmod, 2)) / pow(gmod, il); + dylmy(lm, ig) = (tmpgylm[lm][1] - il * rlylm * gg.y / pow(gmod, 2)) / pow(gmod, il); + dylmz(lm, ig) = (tmpgylm[lm][2] - il * rlylm * gg.z / pow(gmod, 2)) / pow(gmod, il); + } + } + } + } + return; +} + +//========================================================== +// MEMBER FUNCTION : +// NAME : Fact ( n! ) +// NAME : Semi_Fact ( n!! ) +//========================================================== +long double YlmReal::Fact(const int n) +{ + long double f = 1; + for (int i = n; i > 1; i--) + { + f *= i; + } + return f; +} + +int YlmReal::Semi_Fact(const int n) +{ + int semif = 1; + for (int i = n; i > 2; i -= 2) + { + semif *= i; + } + return semif; +} + +template void YlmReal::Ylm_Real(base_device::DEVICE_CPU*, + int, + int, + const float*, + float*); +template void YlmReal::Ylm_Real(base_device::DEVICE_CPU*, + int, + int, + const double*, + double*); +#if ((defined __CUDA) || (defined __ROCM)) +template void YlmReal::Ylm_Real(base_device::DEVICE_GPU*, + int, + int, + const float*, + float*); +template void YlmReal::Ylm_Real(base_device::DEVICE_GPU*, + int, + int, + const double*, + double*); +#endif +} // namespace ModuleBase diff --git a/source/module_base/math_ylmreal.h b/source/source_base/math_ylmreal.h similarity index 100% rename from source/module_base/math_ylmreal.h rename to source/source_base/math_ylmreal.h diff --git a/source/module_base/mathzone.h b/source/source_base/mathzone.h similarity index 100% rename from source/module_base/mathzone.h rename to source/source_base/mathzone.h diff --git a/source/module_base/mathzone_add1.cpp b/source/source_base/mathzone_add1.cpp similarity index 100% rename from source/module_base/mathzone_add1.cpp rename to source/source_base/mathzone_add1.cpp diff --git a/source/module_base/mathzone_add1.h b/source/source_base/mathzone_add1.h similarity index 100% rename from source/module_base/mathzone_add1.h rename to source/source_base/mathzone_add1.h diff --git a/source/module_base/matrix-inl.h b/source/source_base/matrix-inl.h similarity index 100% rename from source/module_base/matrix-inl.h rename to source/source_base/matrix-inl.h diff --git a/source/module_base/matrix.cpp b/source/source_base/matrix.cpp similarity index 100% rename from source/module_base/matrix.cpp rename to source/source_base/matrix.cpp diff --git a/source/module_base/matrix.h b/source/source_base/matrix.h similarity index 100% rename from source/module_base/matrix.h rename to source/source_base/matrix.h diff --git a/source/module_base/matrix3.cpp b/source/source_base/matrix3.cpp similarity index 100% rename from source/module_base/matrix3.cpp rename to source/source_base/matrix3.cpp diff --git a/source/module_base/matrix3.h b/source/source_base/matrix3.h similarity index 100% rename from source/module_base/matrix3.h rename to source/source_base/matrix3.h diff --git a/source/module_base/matrix_wrapper.h b/source/source_base/matrix_wrapper.h similarity index 100% rename from source/module_base/matrix_wrapper.h rename to source/source_base/matrix_wrapper.h diff --git a/source/module_base/matrix_wrapper_tianhe2.h b/source/source_base/matrix_wrapper_tianhe2.h similarity index 100% rename from source/module_base/matrix_wrapper_tianhe2.h rename to source/source_base/matrix_wrapper_tianhe2.h diff --git a/source/module_base/mcd.c b/source/source_base/mcd.c similarity index 100% rename from source/module_base/mcd.c rename to source/source_base/mcd.c diff --git a/source/module_base/mcd.h b/source/source_base/mcd.h similarity index 100% rename from source/module_base/mcd.h rename to source/source_base/mcd.h diff --git a/source/source_base/memory.cpp b/source/source_base/memory.cpp new file mode 100644 index 0000000000..b0d4d73905 --- /dev/null +++ b/source/source_base/memory.cpp @@ -0,0 +1,481 @@ +//========================================================== +// AUTHOR : mohan +// DATE : 2008-11-18 +//========================================================== +#include "memory.h" + +#include "global_variable.h" +#include "source_base/parallel_reduce.h" + +#include + +namespace ModuleBase +{ +// 8 bit = 1 Byte +// 1024 Byte = 1 KB +// 1024 KB = 1 MB +// 1024 MB = 1 GB +double Memory::total = 0.0; +int Memory::complex_matrix_memory = 2 * sizeof(double); // 16 byte +int Memory::double_memory = sizeof(double); // 8 byte +int Memory::int_memory = sizeof(int); // 4.0 Byte +int Memory::bool_memory = sizeof(bool); // 1.0 Byte +int Memory::float_memory = sizeof(float); // 4.0 Byte +int Memory::short_memory = sizeof(short); // 2.0 Byte + +int Memory::n_memory = 1000; +int Memory::n_now = 0; +bool Memory::init_flag = false; + +#if defined(__CUDA) || defined(__ROCM) + +double Memory::total_gpu = 0.0; +int Memory::n_now_gpu = 0; +bool Memory::init_flag_gpu = false; + +std::string* Memory::name_gpu; +std::string* Memory::class_name_gpu; +double* Memory::consume_gpu; + +#endif + +std::string* Memory::name; +std::string* Memory::class_name; +double* Memory::consume; + +Memory::Memory() +{ +} + +Memory::~Memory() +{ +} + +double Memory::calculate_mem(const long& n_in, const std::string& type) +{ + double n = static_cast(n_in); + double mem = 0.0; + + double factor = 1.0 / 1024.0 / 1024.0; + double complex_matrix_mem = complex_matrix_memory * factor; + double double_mem = double_memory * factor; + double int_mem = int_memory * factor; + double bool_mem = bool_memory * factor; + double float_mem = float_memory * factor; + double short_mem = short_memory * factor; + + if (type == "ModuleBase::ComplexMatrix" || type == "complexmatrix" || type == "cdouble") + { + mem = complex_matrix_mem; + } + else if (type == "real" || type == "double") + { + mem = double_mem; + } + else if (type == "int") + { + mem = int_mem; + } + else if (type == "bool") + { + mem = bool_mem; + } + else if (type == "short") + { + mem = short_mem; + } + else if (type == "float") + { + mem = float_mem; + } + else if (type == "AtomLink") + { + mem = int_mem * 2 + double_mem * 3; + } + else if (type == "ModuleBase::Vector3") + { + mem = 3 * double_mem; + } + else + { + std::cout << "not this type in memory storage : " << type << std::endl; + } + total += n * mem; + return n * mem; +} + +double Memory::record(const std::string& class_name_in, + const std::string& name_in, + const long& n_in, + const std::string& type, + const bool accumulate) +{ + if (!Memory::init_flag) + { + name = new std::string[n_memory]; + class_name = new std::string[n_memory]; + consume = new double[n_memory]; + for (int i = 0; i < n_memory; i++) + { + consume[i] = 0.0; + } + Memory::init_flag = true; + } + + int find = 0; + for (find = 0; find < n_now; find++) + { + if (name_in == name[find]) + { + break; + } + } + + // find == n_now : found a new record. + if (find == n_now) + { + n_now++; + name[find] = name_in; + class_name[find] = class_name_in; + } + if (n_now >= n_memory) + { + std::cout << " Error! Too many memories required."; + return 0.0; + } + + consume[find] = Memory::calculate_mem(n_in, type); + + if (consume[find] > 5) + { + print(find); + } + return consume[find]; +} + +void Memory::record(const std::string& name_in, const size_t& n_in, const bool accumulate) +{ + if (!Memory::init_flag) + { + name = new std::string[n_memory]; + class_name = new std::string[n_memory]; + consume = new double[n_memory]; + for (int i = 0; i < n_memory; i++) + { + consume[i] = 0.0; + } + Memory::init_flag = true; + } + + int find = 0; + for (find = 0; find < n_now; find++) + { + if (name_in == name[find]) + { + break; + } + } + + // find == n_now : found a new record. + if (find == n_now) + { + n_now++; + name[find] = name_in; + class_name[find] = ""; + } + if (n_now >= n_memory) + { + std::cout << " Error! Too many memories has been recorded."; + return; + } + + const double factor = 1.0 / 1024.0 / 1024.0; + double size_mb = n_in * factor; + + if (accumulate) + { + consume[find] += size_mb; + Memory::total += size_mb; + } + else + { + if (consume[find] < size_mb) + { + Memory::total += size_mb - consume[find]; + consume[find] = size_mb; + if (consume[find] > 5) + { + print(find); + } + } + } + + return; +} + +#if defined(__CUDA) || defined(__ROCM) + +double Memory::record_gpu(const std::string& class_name_in, + const std::string& name_in, + const long& n_in, + const std::string& type, + const bool accumulate) +{ + if (!Memory::init_flag_gpu) + { + name_gpu = new std::string[n_memory]; + class_name_gpu = new std::string[n_memory]; + consume_gpu = new double[n_memory]; + for (int i = 0; i < n_memory; i++) + { + consume_gpu[i] = 0.0; + } + Memory::init_flag_gpu = true; + } + + int find = 0; + for (find = 0; find < n_now_gpu; find++) + { + if (name_in == name_gpu[find]) + { + break; + } + } + + // find == n_now : found a new record. + if (find == n_now_gpu) + { + n_now_gpu++; + name_gpu[find] = name_in; + class_name_gpu[find] = class_name_in; + } + if (n_now_gpu >= n_memory) + { + std::cout << " Error! Too many gpu memories required."; + return 0.0; + } + + consume_gpu[find] = Memory::calculate_mem(n_in, type); + + if (consume_gpu[find] > 5) + { + print(find); + } + return consume_gpu[find]; +} + +void Memory::record_gpu(const std::string& name_in, const size_t& n_in, const bool accumulate) +{ + if (!Memory::init_flag_gpu) + { + name_gpu = new std::string[n_memory]; + class_name_gpu = new std::string[n_memory]; + consume_gpu = new double[n_memory]; + for (int i = 0; i < n_memory; i++) + { + consume_gpu[i] = 0.0; + } + Memory::init_flag_gpu = true; + } + + int find = 0; + for (find = 0; find < n_now_gpu; find++) + { + if (name_in == name_gpu[find]) + { + break; + } + } + + // find == n_now : found a new record. + if (find == n_now_gpu) + { + n_now_gpu++; + name_gpu[find] = name_in; + class_name_gpu[find] = ""; + } + if (n_now_gpu >= n_memory) + { + std::cout << " Error! Too many gpu memories has been recorded."; + return; + } + + const double factor = 1.0 / 1024.0 / 1024.0; + double size_mb = n_in * factor; + + if (accumulate) + { + consume_gpu[find] += size_mb; + Memory::total_gpu += size_mb; + } + else + { + if (consume_gpu[find] < size_mb) + { + Memory::total_gpu += size_mb - consume_gpu[find]; + consume_gpu[find] = size_mb; + if (consume_gpu[find] > 5) + { + print(find); + } + } + } + return; +} + +#endif + +void Memory::print(const int find) +{ + GlobalV::ofs_running << "\n Warning_Memory_Consuming allocated: " + << " " << name[find] << " " << consume[find] << " MB" << std::endl; + return; +} + +void Memory::finish(std::ofstream& ofs) +{ + print_all(ofs); + if (init_flag) + { + delete[] name; + delete[] class_name; + delete[] consume; + init_flag = false; + } +#if defined(__CUDA) || defined(__ROCM) + if (init_flag_gpu) + { + delete[] name_gpu; + delete[] class_name_gpu; + delete[] consume_gpu; + init_flag_gpu = false; + } +#endif + return; +} + +void Memory::print_all(std::ofstream& ofs) +{ + if (!init_flag) + { + return; + } + + const double small = 1.0; // unit is MB +#ifdef __MPI + Parallel_Reduce::reduce_all(Memory::total); +#if defined(__CUDA) || defined(__ROCM) + Parallel_Reduce::reduce_all(Memory::total_gpu); +#endif +#endif + ofs << "\n NAME-------------------------|MEMORY(MB)------------------" << std::endl; + ofs << std::right; + ofs << std::setw(30) << "total" << std::setw(15) << std::setprecision(4) << Memory::total << std::endl; + + assert(n_memory > 0); + + bool* print_flag = new bool[n_memory]; + + for (int i = 0; i < n_memory; i++) + { + print_flag[i] = false; + } + + for (int i = 0; i < n_memory; i++) + { +#ifdef __MPI + Parallel_Reduce::reduce_all(consume[i]); +#endif + } + + for (int i = 0; i < n_memory; i++) // Xiaoyang fix memory record sum bug 2023/10/25 + { + int k = 0; + double tmp = -1.0; + for (int j = 0; j < n_memory; j++) + { + if (print_flag[j]) + { + continue; + } + else if (tmp < consume[j]) + { + k = j; + tmp = consume[j]; + } + } + print_flag[k] = true; + if (consume[k] < small) + { + continue; + } + else + { + ofs << std::setw(30) << name[k] << std::setw(15) << consume[k] << std::endl; + } + } + +#if defined(__CUDA) || defined(__ROCM) + if (!init_flag_gpu) + { + delete[] print_flag; + return; + } + + ofs << "\n NAME-------------------------|GPU MEMORY(MB)--------------" << std::endl; + ofs << std::setw(30) << "total" << std::setw(15) << std::setprecision(4) << Memory::total_gpu << std::endl; + + assert(n_memory > 0); + + bool* print_flag_gpu = new bool[n_memory]; + + for (int i = 0; i < n_memory; i++) + { + print_flag_gpu[i] = false; + } + + for (int i = 0; i < n_memory; i++) + { +#ifdef __MPI + Parallel_Reduce::reduce_all(consume_gpu[i]); +#endif + } + + for (int i = 0; i < n_memory; i++) // Xiaoyang fix memory record sum bug 2023/10/25 + { + int k = 0; + double tmp = -1.0; + for (int j = 0; j < n_memory; j++) + { + if (print_flag_gpu[j]) + { + continue; + } + else if (tmp < consume_gpu[j]) + { + k = j; + tmp = consume_gpu[j]; + } + } + print_flag_gpu[k] = true; + if (consume_gpu[k] < small) + { + continue; + } + else + { + ofs << std::setw(30) << name_gpu[k] << std::setw(15) << consume_gpu[k] << std::endl; + } + } + + delete[] print_flag_gpu; +#endif + + ofs << " ------------- < 1.0 MB has been ignored ----------------" << std::endl; + ofs << " ----------------------------------------------------------" << std::endl; + + delete[] print_flag; // mohan fix by valgrind at 2012-04-02 + return; +} + +} // namespace ModuleBase diff --git a/source/module_base/memory.h b/source/source_base/memory.h similarity index 100% rename from source/module_base/memory.h rename to source/source_base/memory.h diff --git a/source/module_base/module_container/ATen/core/CMakeLists.txt b/source/source_base/module_container/ATen/core/CMakeLists.txt similarity index 100% rename from source/module_base/module_container/ATen/core/CMakeLists.txt rename to source/source_base/module_container/ATen/core/CMakeLists.txt diff --git a/source/module_base/module_container/ATen/core/tensor.cpp b/source/source_base/module_container/ATen/core/tensor.cpp similarity index 100% rename from source/module_base/module_container/ATen/core/tensor.cpp rename to source/source_base/module_container/ATen/core/tensor.cpp diff --git a/source/module_base/module_container/ATen/core/tensor.h b/source/source_base/module_container/ATen/core/tensor.h similarity index 100% rename from source/module_base/module_container/ATen/core/tensor.h rename to source/source_base/module_container/ATen/core/tensor.h diff --git a/source/module_base/module_container/ATen/core/tensor_accessor.h b/source/source_base/module_container/ATen/core/tensor_accessor.h similarity index 100% rename from source/module_base/module_container/ATen/core/tensor_accessor.h rename to source/source_base/module_container/ATen/core/tensor_accessor.h diff --git a/source/module_base/module_container/ATen/core/tensor_buffer.cpp b/source/source_base/module_container/ATen/core/tensor_buffer.cpp similarity index 100% rename from source/module_base/module_container/ATen/core/tensor_buffer.cpp rename to source/source_base/module_container/ATen/core/tensor_buffer.cpp diff --git a/source/module_base/module_container/ATen/core/tensor_buffer.h b/source/source_base/module_container/ATen/core/tensor_buffer.h similarity index 100% rename from source/module_base/module_container/ATen/core/tensor_buffer.h rename to source/source_base/module_container/ATen/core/tensor_buffer.h diff --git a/source/module_base/module_container/ATen/core/tensor_map.cpp b/source/source_base/module_container/ATen/core/tensor_map.cpp similarity index 100% rename from source/module_base/module_container/ATen/core/tensor_map.cpp rename to source/source_base/module_container/ATen/core/tensor_map.cpp diff --git a/source/module_base/module_container/ATen/core/tensor_map.h b/source/source_base/module_container/ATen/core/tensor_map.h similarity index 100% rename from source/module_base/module_container/ATen/core/tensor_map.h rename to source/source_base/module_container/ATen/core/tensor_map.h diff --git a/source/module_base/module_container/ATen/core/tensor_shape.cpp b/source/source_base/module_container/ATen/core/tensor_shape.cpp similarity index 100% rename from source/module_base/module_container/ATen/core/tensor_shape.cpp rename to source/source_base/module_container/ATen/core/tensor_shape.cpp diff --git a/source/module_base/module_container/ATen/core/tensor_shape.h b/source/source_base/module_container/ATen/core/tensor_shape.h similarity index 100% rename from source/module_base/module_container/ATen/core/tensor_shape.h rename to source/source_base/module_container/ATen/core/tensor_shape.h diff --git a/source/module_base/module_container/ATen/core/tensor_types.cpp b/source/source_base/module_container/ATen/core/tensor_types.cpp similarity index 100% rename from source/module_base/module_container/ATen/core/tensor_types.cpp rename to source/source_base/module_container/ATen/core/tensor_types.cpp diff --git a/source/module_base/module_container/ATen/core/tensor_types.h b/source/source_base/module_container/ATen/core/tensor_types.h similarity index 79% rename from source/module_base/module_container/ATen/core/tensor_types.h rename to source/source_base/module_container/ATen/core/tensor_types.h index b60080f2ba..fe6b26ee26 100644 --- a/source/module_base/module_container/ATen/core/tensor_types.h +++ b/source/source_base/module_container/ATen/core/tensor_types.h @@ -5,20 +5,20 @@ #ifndef ATEN_CORE_TENSOR_TYPES_H_ #define ATEN_CORE_TENSOR_TYPES_H_ -#include -#include -#include -#include +#include "source_base/module_device/types.h" + +#include #include -#include +#include #include #include +#include +#include #include -#include +#include #include -#include - -#include "module_base/module_device/types.h" +#include +#include #if defined(__CUDACC__) #include @@ -26,17 +26,22 @@ #include #endif // defined(__CUDACC__) || defined(__HIPCC__) -namespace container { +namespace container +{ template -static inline bool element_compare(T& a, T& b) { - if (Accuracy <= 4) { +static inline bool element_compare(T& a, T& b) +{ + if (Accuracy <= 4) + { return (a == b) || (std::norm(a - b) < 1e-7); - } - else if (Accuracy <= 8) { + } + else if (Accuracy <= 8) + { return (a == b) || (std::norm(a - b) < 1e-15); - } - else { + } + else + { return (a == b); } } @@ -47,33 +52,39 @@ The DataType enum lists the supported data types for tensors. Each data type is identified by a unique value. The DT_INVALID value is reserved for invalid data types. */ -enum class DataType { - DT_INVALID = 0, ///< Invalid data type */ - DT_FLOAT = 1, ///< Single-precision floating point */ - DT_DOUBLE = 2, ///< Double-precision floating point */ - DT_INT = 3, ///< 32-bit integer */ - DT_INT64 = 4, ///< 64-bit integer */ - DT_COMPLEX = 5, ///< 32-bit complex */ +enum class DataType +{ + DT_INVALID = 0, ///< Invalid data type */ + DT_FLOAT = 1, ///< Single-precision floating point */ + DT_DOUBLE = 2, ///< Double-precision floating point */ + DT_INT = 3, ///< 32-bit integer */ + DT_INT64 = 4, ///< 64-bit integer */ + DT_COMPLEX = 5, ///< 32-bit complex */ DT_COMPLEX_DOUBLE = 6, /**< 64-bit complex */ -// ... other data types + // ... other data types }; /** *@struct DEVICE_CPU, DEVICE_GPU *@brief A tag type for identifying CPU and GPU devices. -*/ + */ struct DEVICE_CPU; struct DEVICE_GPU; -struct DEVICE_CPU {}; -struct DEVICE_GPU {}; +struct DEVICE_CPU +{ +}; +struct DEVICE_GPU +{ +}; /** * @brief The type of memory used by an allocator. */ -enum class DeviceType { - UnKnown = 0, ///< Memory type is unknown. - CpuDevice = 1, ///< Memory type is CPU. - GpuDevice = 2, ///< Memory type is GPU(CUDA or ROCm). +enum class DeviceType +{ + UnKnown = 0, ///< Memory type is unknown. + CpuDevice = 1, ///< Memory type is CPU. + GpuDevice = 2, ///< Memory type is GPU(CUDA or ROCm). }; /** @@ -85,7 +96,8 @@ enum class DeviceType { * @tparam T The input type for which the return type needs to be determined. */ template -struct GetTypeReal { +struct GetTypeReal +{ using type = T; /**< The return type based on the input type. */ }; @@ -95,7 +107,8 @@ struct GetTypeReal { * This specialization sets the return type to be float when the input type is std::complex. */ template <> -struct GetTypeReal> { +struct GetTypeReal> +{ using type = float; /**< The return type specialization for std::complex. */ }; @@ -105,12 +118,14 @@ struct GetTypeReal> { * This specialization sets the return type to be double when the input type is std::complex. */ template <> -struct GetTypeReal> { +struct GetTypeReal> +{ using type = double; /**< The return type specialization for std::complex. */ }; -template -struct PsiToContainer { +template +struct PsiToContainer +{ using type = T; /**< The return type based on the input type. */ }; @@ -126,22 +141,24 @@ struct PsiToContainer using type = container::DEVICE_GPU; /**< The return type specialization for std::complex. */ }; -template -struct ContainerToPsi { +template +struct ContainerToPsi +{ using type = T; /**< The return type based on the input type. */ }; template <> -struct ContainerToPsi { +struct ContainerToPsi +{ using type = base_device::DEVICE_CPU; /**< The return type specialization for std::complex. */ }; template <> -struct ContainerToPsi { +struct ContainerToPsi +{ using type = base_device::DEVICE_GPU; /**< The return type specialization for std::complex. */ }; - /** * @brief Template struct for mapping a Device Type to its corresponding enum value. * @@ -155,16 +172,19 @@ struct ContainerToPsi { * DataTypeToEnum::value; // Returns DataType::DT_FLOAT */ template -struct DeviceTypeToEnum { +struct DeviceTypeToEnum +{ static constexpr DeviceType value = {}; }; // Specializations of DeviceTypeToEnum for supported devices. template <> -struct DeviceTypeToEnum { +struct DeviceTypeToEnum +{ static constexpr DeviceType value = DeviceType::CpuDevice; }; template <> -struct DeviceTypeToEnum { +struct DeviceTypeToEnum +{ static constexpr DeviceType value = DeviceType::GpuDevice; }; template <> @@ -191,43 +211,52 @@ struct DeviceTypeToEnum * DataTypeToEnum::value; // Returns DataType::DT_FLOAT */ template -struct DataTypeToEnum { +struct DataTypeToEnum +{ static constexpr DataType value = {}; }; // Specializations of DataTypeToEnum for supported types. template <> -struct DataTypeToEnum { +struct DataTypeToEnum +{ static constexpr DataType value = DataType::DT_INT; }; template <> -struct DataTypeToEnum { +struct DataTypeToEnum +{ static constexpr DataType value = DataType::DT_FLOAT; }; template <> -struct DataTypeToEnum { +struct DataTypeToEnum +{ static constexpr DataType value = DataType::DT_DOUBLE; }; template <> -struct DataTypeToEnum { +struct DataTypeToEnum +{ static constexpr DataType value = DataType::DT_INT64; }; template <> -struct DataTypeToEnum> { +struct DataTypeToEnum> +{ static constexpr DataType value = DataType::DT_COMPLEX; }; template <> -struct DataTypeToEnum> { +struct DataTypeToEnum> +{ static constexpr DataType value = DataType::DT_COMPLEX_DOUBLE; }; #if defined(__CUDACC__) || defined(__HIPCC__) template <> -struct DataTypeToEnum> { +struct DataTypeToEnum> +{ static constexpr DataType value = DataType::DT_COMPLEX; }; template <> -struct DataTypeToEnum> { +struct DataTypeToEnum> +{ static constexpr DataType value = DataType::DT_COMPLEX_DOUBLE; }; #endif // defined(__CUDACC__) || defined(__HIPCC__) diff --git a/source/module_base/module_container/ATen/core/tensor_utils.h b/source/source_base/module_container/ATen/core/tensor_utils.h similarity index 100% rename from source/module_base/module_container/ATen/core/tensor_utils.h rename to source/source_base/module_container/ATen/core/tensor_utils.h diff --git a/source/module_base/module_container/ATen/kernels/CMakeLists.txt b/source/source_base/module_container/ATen/kernels/CMakeLists.txt similarity index 100% rename from source/module_base/module_container/ATen/kernels/CMakeLists.txt rename to source/source_base/module_container/ATen/kernels/CMakeLists.txt diff --git a/source/module_base/module_container/ATen/kernels/blas.cpp b/source/source_base/module_container/ATen/kernels/blas.cpp similarity index 100% rename from source/module_base/module_container/ATen/kernels/blas.cpp rename to source/source_base/module_container/ATen/kernels/blas.cpp diff --git a/source/module_base/module_container/ATen/kernels/blas.h b/source/source_base/module_container/ATen/kernels/blas.h similarity index 100% rename from source/module_base/module_container/ATen/kernels/blas.h rename to source/source_base/module_container/ATen/kernels/blas.h diff --git a/source/module_base/module_container/ATen/kernels/cuda/blas.cu b/source/source_base/module_container/ATen/kernels/cuda/blas.cu similarity index 100% rename from source/module_base/module_container/ATen/kernels/cuda/blas.cu rename to source/source_base/module_container/ATen/kernels/cuda/blas.cu diff --git a/source/module_base/module_container/ATen/kernels/cuda/lapack.cu b/source/source_base/module_container/ATen/kernels/cuda/lapack.cu similarity index 100% rename from source/module_base/module_container/ATen/kernels/cuda/lapack.cu rename to source/source_base/module_container/ATen/kernels/cuda/lapack.cu diff --git a/source/module_base/module_container/ATen/kernels/cuda/linalg.cu b/source/source_base/module_container/ATen/kernels/cuda/linalg.cu similarity index 100% rename from source/module_base/module_container/ATen/kernels/cuda/linalg.cu rename to source/source_base/module_container/ATen/kernels/cuda/linalg.cu diff --git a/source/module_base/module_container/ATen/kernels/cuda/memory.cu b/source/source_base/module_container/ATen/kernels/cuda/memory.cu similarity index 100% rename from source/module_base/module_container/ATen/kernels/cuda/memory.cu rename to source/source_base/module_container/ATen/kernels/cuda/memory.cu diff --git a/source/module_base/module_container/ATen/kernels/lapack.cpp b/source/source_base/module_container/ATen/kernels/lapack.cpp similarity index 100% rename from source/module_base/module_container/ATen/kernels/lapack.cpp rename to source/source_base/module_container/ATen/kernels/lapack.cpp diff --git a/source/module_base/module_container/ATen/kernels/lapack.h b/source/source_base/module_container/ATen/kernels/lapack.h similarity index 100% rename from source/module_base/module_container/ATen/kernels/lapack.h rename to source/source_base/module_container/ATen/kernels/lapack.h diff --git a/source/module_base/module_container/ATen/kernels/linalg.cpp b/source/source_base/module_container/ATen/kernels/linalg.cpp similarity index 100% rename from source/module_base/module_container/ATen/kernels/linalg.cpp rename to source/source_base/module_container/ATen/kernels/linalg.cpp diff --git a/source/module_base/module_container/ATen/kernels/linalg.h b/source/source_base/module_container/ATen/kernels/linalg.h similarity index 100% rename from source/module_base/module_container/ATen/kernels/linalg.h rename to source/source_base/module_container/ATen/kernels/linalg.h diff --git a/source/module_base/module_container/ATen/kernels/memory.h b/source/source_base/module_container/ATen/kernels/memory.h similarity index 100% rename from source/module_base/module_container/ATen/kernels/memory.h rename to source/source_base/module_container/ATen/kernels/memory.h diff --git a/source/module_base/module_container/ATen/kernels/memory_impl.cpp b/source/source_base/module_container/ATen/kernels/memory_impl.cpp similarity index 100% rename from source/module_base/module_container/ATen/kernels/memory_impl.cpp rename to source/source_base/module_container/ATen/kernels/memory_impl.cpp diff --git a/source/module_base/module_container/ATen/kernels/rocm/blas.hip.cu b/source/source_base/module_container/ATen/kernels/rocm/blas.hip.cu similarity index 100% rename from source/module_base/module_container/ATen/kernels/rocm/blas.hip.cu rename to source/source_base/module_container/ATen/kernels/rocm/blas.hip.cu diff --git a/source/module_base/module_container/ATen/kernels/rocm/lapack.hip.cu b/source/source_base/module_container/ATen/kernels/rocm/lapack.hip.cu similarity index 100% rename from source/module_base/module_container/ATen/kernels/rocm/lapack.hip.cu rename to source/source_base/module_container/ATen/kernels/rocm/lapack.hip.cu diff --git a/source/module_base/module_container/ATen/kernels/rocm/linalg.hip.cu b/source/source_base/module_container/ATen/kernels/rocm/linalg.hip.cu similarity index 100% rename from source/module_base/module_container/ATen/kernels/rocm/linalg.hip.cu rename to source/source_base/module_container/ATen/kernels/rocm/linalg.hip.cu diff --git a/source/module_base/module_container/ATen/kernels/rocm/memory.hip.cu b/source/source_base/module_container/ATen/kernels/rocm/memory.hip.cu similarity index 100% rename from source/module_base/module_container/ATen/kernels/rocm/memory.hip.cu rename to source/source_base/module_container/ATen/kernels/rocm/memory.hip.cu diff --git a/source/module_base/module_container/ATen/kernels/test/CMakeLists.txt b/source/source_base/module_container/ATen/kernels/test/CMakeLists.txt similarity index 100% rename from source/module_base/module_container/ATen/kernels/test/CMakeLists.txt rename to source/source_base/module_container/ATen/kernels/test/CMakeLists.txt diff --git a/source/module_base/module_container/ATen/kernels/test/blas_test.cpp b/source/source_base/module_container/ATen/kernels/test/blas_test.cpp similarity index 100% rename from source/module_base/module_container/ATen/kernels/test/blas_test.cpp rename to source/source_base/module_container/ATen/kernels/test/blas_test.cpp diff --git a/source/module_base/module_container/ATen/kernels/test/lapack_test.cpp b/source/source_base/module_container/ATen/kernels/test/lapack_test.cpp similarity index 100% rename from source/module_base/module_container/ATen/kernels/test/lapack_test.cpp rename to source/source_base/module_container/ATen/kernels/test/lapack_test.cpp diff --git a/source/module_base/module_container/ATen/kernels/test/linalg_test.cpp b/source/source_base/module_container/ATen/kernels/test/linalg_test.cpp similarity index 100% rename from source/module_base/module_container/ATen/kernels/test/linalg_test.cpp rename to source/source_base/module_container/ATen/kernels/test/linalg_test.cpp diff --git a/source/module_base/module_container/ATen/kernels/test/memory_test.cpp b/source/source_base/module_container/ATen/kernels/test/memory_test.cpp similarity index 100% rename from source/module_base/module_container/ATen/kernels/test/memory_test.cpp rename to source/source_base/module_container/ATen/kernels/test/memory_test.cpp diff --git a/source/module_base/module_container/ATen/ops/CMakeLists.txt b/source/source_base/module_container/ATen/ops/CMakeLists.txt similarity index 100% rename from source/module_base/module_container/ATen/ops/CMakeLists.txt rename to source/source_base/module_container/ATen/ops/CMakeLists.txt diff --git a/source/module_base/module_container/ATen/ops/einsum_op.cpp b/source/source_base/module_container/ATen/ops/einsum_op.cpp similarity index 100% rename from source/module_base/module_container/ATen/ops/einsum_op.cpp rename to source/source_base/module_container/ATen/ops/einsum_op.cpp diff --git a/source/module_base/module_container/ATen/ops/einsum_op.h b/source/source_base/module_container/ATen/ops/einsum_op.h similarity index 100% rename from source/module_base/module_container/ATen/ops/einsum_op.h rename to source/source_base/module_container/ATen/ops/einsum_op.h diff --git a/source/module_base/module_container/ATen/ops/linalg_op.cpp b/source/source_base/module_container/ATen/ops/linalg_op.cpp similarity index 100% rename from source/module_base/module_container/ATen/ops/linalg_op.cpp rename to source/source_base/module_container/ATen/ops/linalg_op.cpp diff --git a/source/module_base/module_container/ATen/ops/linalg_op.h b/source/source_base/module_container/ATen/ops/linalg_op.h similarity index 100% rename from source/module_base/module_container/ATen/ops/linalg_op.h rename to source/source_base/module_container/ATen/ops/linalg_op.h diff --git a/source/module_base/module_container/ATen/ops/test/CMakeLists.txt b/source/source_base/module_container/ATen/ops/test/CMakeLists.txt similarity index 100% rename from source/module_base/module_container/ATen/ops/test/CMakeLists.txt rename to source/source_base/module_container/ATen/ops/test/CMakeLists.txt diff --git a/source/module_base/module_container/ATen/ops/test/einsum_op_test.cpp b/source/source_base/module_container/ATen/ops/test/einsum_op_test.cpp similarity index 100% rename from source/module_base/module_container/ATen/ops/test/einsum_op_test.cpp rename to source/source_base/module_container/ATen/ops/test/einsum_op_test.cpp diff --git a/source/module_base/module_container/ATen/ops/test/linalg_op_test.cpp b/source/source_base/module_container/ATen/ops/test/linalg_op_test.cpp similarity index 100% rename from source/module_base/module_container/ATen/ops/test/linalg_op_test.cpp rename to source/source_base/module_container/ATen/ops/test/linalg_op_test.cpp diff --git a/source/module_base/module_container/ATen/tensor.h b/source/source_base/module_container/ATen/tensor.h similarity index 100% rename from source/module_base/module_container/ATen/tensor.h rename to source/source_base/module_container/ATen/tensor.h diff --git a/source/module_base/module_container/CMakeLists.txt b/source/source_base/module_container/CMakeLists.txt similarity index 100% rename from source/module_base/module_container/CMakeLists.txt rename to source/source_base/module_container/CMakeLists.txt diff --git a/source/module_base/module_container/base/core/CMakeLists.txt b/source/source_base/module_container/base/core/CMakeLists.txt similarity index 100% rename from source/module_base/module_container/base/core/CMakeLists.txt rename to source/source_base/module_container/base/core/CMakeLists.txt diff --git a/source/module_base/module_container/base/core/allocator.h b/source/source_base/module_container/base/core/allocator.h similarity index 100% rename from source/module_base/module_container/base/core/allocator.h rename to source/source_base/module_container/base/core/allocator.h diff --git a/source/module_base/module_container/base/core/bfc_allocator.h b/source/source_base/module_container/base/core/bfc_allocator.h similarity index 100% rename from source/module_base/module_container/base/core/bfc_allocator.h rename to source/source_base/module_container/base/core/bfc_allocator.h diff --git a/source/module_base/module_container/base/core/cpu_allocator.cpp b/source/source_base/module_container/base/core/cpu_allocator.cpp similarity index 100% rename from source/module_base/module_container/base/core/cpu_allocator.cpp rename to source/source_base/module_container/base/core/cpu_allocator.cpp diff --git a/source/module_base/module_container/base/core/cpu_allocator.h b/source/source_base/module_container/base/core/cpu_allocator.h similarity index 100% rename from source/module_base/module_container/base/core/cpu_allocator.h rename to source/source_base/module_container/base/core/cpu_allocator.h diff --git a/source/module_base/module_container/base/core/gpu_allocator.cpp b/source/source_base/module_container/base/core/gpu_allocator.cpp similarity index 100% rename from source/module_base/module_container/base/core/gpu_allocator.cpp rename to source/source_base/module_container/base/core/gpu_allocator.cpp diff --git a/source/module_base/module_container/base/core/gpu_allocator.h b/source/source_base/module_container/base/core/gpu_allocator.h similarity index 100% rename from source/module_base/module_container/base/core/gpu_allocator.h rename to source/source_base/module_container/base/core/gpu_allocator.h diff --git a/source/module_base/module_container/base/core/refcount.cpp b/source/source_base/module_container/base/core/refcount.cpp similarity index 100% rename from source/module_base/module_container/base/core/refcount.cpp rename to source/source_base/module_container/base/core/refcount.cpp diff --git a/source/module_base/module_container/base/core/refcount.h b/source/source_base/module_container/base/core/refcount.h similarity index 100% rename from source/module_base/module_container/base/core/refcount.h rename to source/source_base/module_container/base/core/refcount.h diff --git a/source/module_base/module_container/base/macros/cuda.h b/source/source_base/module_container/base/macros/cuda.h similarity index 100% rename from source/module_base/module_container/base/macros/cuda.h rename to source/source_base/module_container/base/macros/cuda.h diff --git a/source/module_base/module_container/base/macros/macros.h b/source/source_base/module_container/base/macros/macros.h similarity index 100% rename from source/module_base/module_container/base/macros/macros.h rename to source/source_base/module_container/base/macros/macros.h diff --git a/source/module_base/module_container/base/macros/rocm.h b/source/source_base/module_container/base/macros/rocm.h similarity index 100% rename from source/module_base/module_container/base/macros/rocm.h rename to source/source_base/module_container/base/macros/rocm.h diff --git a/source/module_base/module_container/base/third_party/blas.h b/source/source_base/module_container/base/third_party/blas.h similarity index 100% rename from source/module_base/module_container/base/third_party/blas.h rename to source/source_base/module_container/base/third_party/blas.h diff --git a/source/module_base/module_container/base/third_party/cublas.h b/source/source_base/module_container/base/third_party/cublas.h similarity index 100% rename from source/module_base/module_container/base/third_party/cublas.h rename to source/source_base/module_container/base/third_party/cublas.h diff --git a/source/module_base/module_container/base/third_party/cusolver.h b/source/source_base/module_container/base/third_party/cusolver.h similarity index 100% rename from source/module_base/module_container/base/third_party/cusolver.h rename to source/source_base/module_container/base/third_party/cusolver.h diff --git a/source/module_base/module_container/base/third_party/hipblas.h b/source/source_base/module_container/base/third_party/hipblas.h similarity index 100% rename from source/module_base/module_container/base/third_party/hipblas.h rename to source/source_base/module_container/base/third_party/hipblas.h diff --git a/source/module_base/module_container/base/third_party/hipsolver.h b/source/source_base/module_container/base/third_party/hipsolver.h similarity index 100% rename from source/module_base/module_container/base/third_party/hipsolver.h rename to source/source_base/module_container/base/third_party/hipsolver.h diff --git a/source/module_base/module_container/base/third_party/lapack.h b/source/source_base/module_container/base/third_party/lapack.h similarity index 100% rename from source/module_base/module_container/base/third_party/lapack.h rename to source/source_base/module_container/base/third_party/lapack.h diff --git a/source/module_base/module_container/base/utils/array_ref.h b/source/source_base/module_container/base/utils/array_ref.h similarity index 100% rename from source/module_base/module_container/base/utils/array_ref.h rename to source/source_base/module_container/base/utils/array_ref.h diff --git a/source/module_base/module_container/base/utils/gtest.h b/source/source_base/module_container/base/utils/gtest.h similarity index 100% rename from source/module_base/module_container/base/utils/gtest.h rename to source/source_base/module_container/base/utils/gtest.h diff --git a/source/module_base/module_container/base/utils/logging.h b/source/source_base/module_container/base/utils/logging.h similarity index 100% rename from source/module_base/module_container/base/utils/logging.h rename to source/source_base/module_container/base/utils/logging.h diff --git a/source/module_base/module_container/test/CMakeLists.txt b/source/source_base/module_container/test/CMakeLists.txt similarity index 100% rename from source/module_base/module_container/test/CMakeLists.txt rename to source/source_base/module_container/test/CMakeLists.txt diff --git a/source/module_base/module_container/test/allocator_test.cpp b/source/source_base/module_container/test/allocator_test.cpp similarity index 100% rename from source/module_base/module_container/test/allocator_test.cpp rename to source/source_base/module_container/test/allocator_test.cpp diff --git a/source/module_base/module_container/test/tensor_accessor_test.cpp b/source/source_base/module_container/test/tensor_accessor_test.cpp similarity index 100% rename from source/module_base/module_container/test/tensor_accessor_test.cpp rename to source/source_base/module_container/test/tensor_accessor_test.cpp diff --git a/source/module_base/module_container/test/tensor_buffer_test.cpp b/source/source_base/module_container/test/tensor_buffer_test.cpp similarity index 100% rename from source/module_base/module_container/test/tensor_buffer_test.cpp rename to source/source_base/module_container/test/tensor_buffer_test.cpp diff --git a/source/module_base/module_container/test/tensor_map_test.cpp b/source/source_base/module_container/test/tensor_map_test.cpp similarity index 100% rename from source/module_base/module_container/test/tensor_map_test.cpp rename to source/source_base/module_container/test/tensor_map_test.cpp diff --git a/source/module_base/module_container/test/tensor_shape_test.cpp b/source/source_base/module_container/test/tensor_shape_test.cpp similarity index 100% rename from source/module_base/module_container/test/tensor_shape_test.cpp rename to source/source_base/module_container/test/tensor_shape_test.cpp diff --git a/source/module_base/module_container/test/tensor_test.cpp b/source/source_base/module_container/test/tensor_test.cpp similarity index 100% rename from source/module_base/module_container/test/tensor_test.cpp rename to source/source_base/module_container/test/tensor_test.cpp diff --git a/source/module_base/module_container/test/tensor_utils_test.cpp b/source/source_base/module_container/test/tensor_utils_test.cpp similarity index 100% rename from source/module_base/module_container/test/tensor_utils_test.cpp rename to source/source_base/module_container/test/tensor_utils_test.cpp diff --git a/source/module_base/module_device/CMakeLists.txt b/source/source_base/module_device/CMakeLists.txt similarity index 100% rename from source/module_base/module_device/CMakeLists.txt rename to source/source_base/module_device/CMakeLists.txt diff --git a/source/module_base/module_device/cuda/memory_op.cu b/source/source_base/module_device/cuda/memory_op.cu similarity index 88% rename from source/module_base/module_device/cuda/memory_op.cu rename to source/source_base/module_device/cuda/memory_op.cu index c4f9efdb42..f47ff2139a 100644 --- a/source/module_base/module_device/cuda/memory_op.cu +++ b/source/source_base/module_device/cuda/memory_op.cu @@ -1,11 +1,10 @@ -#include "module_base/module_device/memory_op.h" -#include "module_base/memory.h" +#include "source_base/memory.h" +#include "source_base/module_device/memory_op.h" #include +#include #include #include - -#include #include #define THREADS_PER_BLOCK 256 @@ -78,36 +77,31 @@ void resize_memory_op::operator()(FPTYPE*& arr, } template -void set_memory_op::operator()(FPTYPE* arr, - const int var, - const size_t size) +void set_memory_op::operator()(FPTYPE* arr, const int var, const size_t size) { cudaErrcheck(cudaMemset(arr, var, sizeof(FPTYPE) * size)); } template -void synchronize_memory_op::operator()( - FPTYPE* arr_out, - const FPTYPE* arr_in, - const size_t size) +void synchronize_memory_op::operator()(FPTYPE* arr_out, + const FPTYPE* arr_in, + const size_t size) { cudaErrcheck(cudaMemcpy(arr_out, arr_in, sizeof(FPTYPE) * size, cudaMemcpyDeviceToHost)); } template -void synchronize_memory_op::operator()( - FPTYPE* arr_out, - const FPTYPE* arr_in, - const size_t size) +void synchronize_memory_op::operator()(FPTYPE* arr_out, + const FPTYPE* arr_in, + const size_t size) { cudaErrcheck(cudaMemcpy(arr_out, arr_in, sizeof(FPTYPE) * size, cudaMemcpyHostToDevice)); } template -void synchronize_memory_op::operator()( - FPTYPE* arr_out, - const FPTYPE* arr_in, - const size_t size) +void synchronize_memory_op::operator()(FPTYPE* arr_out, + const FPTYPE* arr_in, + const size_t size) { cudaErrcheck(cudaMemcpy(arr_out, arr_in, sizeof(FPTYPE) * size, cudaMemcpyDeviceToDevice)); } @@ -115,9 +109,7 @@ void synchronize_memory_op struct cast_memory_op { - void operator()(FPTYPE_out* arr_out, - const FPTYPE_in* arr_in, - const size_t size) + void operator()(FPTYPE_out* arr_out, const FPTYPE_in* arr_in, const size_t size) { if (size == 0) { @@ -131,22 +123,26 @@ struct cast_memory_op -struct cast_memory_op { - void operator()(FPTYPE_out* arr_out, - const FPTYPE_in* arr_in, - const size_t size) { +struct cast_memory_op +{ + void operator()(FPTYPE_out* arr_out, const FPTYPE_in* arr_in, const size_t size) + { - if (size == 0) {return;} + if (size == 0) + { + return; + } // No need to cast the memory if the data types are the same. if (std::is_same::value) { - synchronize_memory_op()(arr_out, - reinterpret_cast(arr_in), - size); + synchronize_memory_op()( + arr_out, + reinterpret_cast(arr_in), + size); return; } - FPTYPE_in * arr = nullptr; - cudaErrcheck(cudaMalloc((void **)&arr, sizeof(FPTYPE_in) * size)); + FPTYPE_in* arr = nullptr; + cudaErrcheck(cudaMalloc((void**)&arr, sizeof(FPTYPE_in) * size)); cudaErrcheck(cudaMemcpy(arr, arr_in, sizeof(FPTYPE_in) * size, cudaMemcpyHostToDevice)); const int block = (size + THREADS_PER_BLOCK - 1) / THREADS_PER_BLOCK; cast_memory<<>>(arr_out, arr, size); @@ -156,22 +152,27 @@ struct cast_memory_op -struct cast_memory_op { - void operator()(FPTYPE_out* arr_out, - const FPTYPE_in* arr_in, - const size_t size) { - if (size == 0) {return;} +struct cast_memory_op +{ + void operator()(FPTYPE_out* arr_out, const FPTYPE_in* arr_in, const size_t size) + { + if (size == 0) + { + return; + } // No need to cast the memory if the data types are the same. if (std::is_same::value) { - synchronize_memory_op()(arr_out, - reinterpret_cast(arr_in), - size); + synchronize_memory_op()( + arr_out, + reinterpret_cast(arr_in), + size); return; } - auto * arr = (FPTYPE_in*) malloc(sizeof(FPTYPE_in) * size); + auto* arr = (FPTYPE_in*)malloc(sizeof(FPTYPE_in) * size); cudaErrcheck(cudaMemcpy(arr, arr_in, sizeof(FPTYPE_in) * size, cudaMemcpyDeviceToHost)); - for (int ii = 0; ii < size; ii++) { + for (int ii = 0; ii < size; ii++) + { arr_out[ii] = static_cast(arr[ii]); } free(arr); diff --git a/source/source_base/module_device/device.cpp b/source/source_base/module_device/device.cpp new file mode 100644 index 0000000000..d188be8a8f --- /dev/null +++ b/source/source_base/module_device/device.cpp @@ -0,0 +1,776 @@ + +#include "device.h" + +#include "source_base/tool_quit.h" + +#include +#include +#include +#ifdef __MPI +#include "mpi.h" +#endif + +#if defined(__CUDA) +#include +#endif + +#if defined(__ROCM) +#include +#endif + +namespace base_device +{ + +// for device +template <> +base_device::AbacusDevice_t get_device_type(const base_device::DEVICE_CPU* dev) +{ + return base_device::CpuDevice; +} +template <> +base_device::AbacusDevice_t get_device_type(const base_device::DEVICE_GPU* dev) +{ + return base_device::GpuDevice; +} + +// for precision +template <> +std::string get_current_precision(const float* var) +{ + return "single"; +} +template <> +std::string get_current_precision(const double* var) +{ + return "double"; +} +template <> +std::string get_current_precision(const std::complex* var) +{ + return "single"; +} +template <> +std::string get_current_precision(const std::complex* var) +{ + return "double"; +} + +namespace information +{ + +#if __MPI +int stringCmp(const void* a, const void* b) +{ + char* m = (char*)a; + char* n = (char*)b; + int i, sum = 0; + + for (i = 0; i < MPI_MAX_PROCESSOR_NAME; i++) + { + if (m[i] == n[i]) + { + continue; + } + else + { + sum = m[i] - n[i]; + break; + } + } + return sum; +} +int get_node_rank() +{ + char host_name[MPI_MAX_PROCESSOR_NAME]; + memset(host_name, '\0', sizeof(char) * MPI_MAX_PROCESSOR_NAME); + char(*host_names)[MPI_MAX_PROCESSOR_NAME]; + int n, namelen, color, rank, nprocs, myrank; + size_t bytes; + MPI_Comm nodeComm; + + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &nprocs); + MPI_Get_processor_name(host_name, &namelen); + + bytes = nprocs * sizeof(char[MPI_MAX_PROCESSOR_NAME]); + host_names = (char(*)[MPI_MAX_PROCESSOR_NAME])malloc(bytes); + for (int ii = 0; ii < nprocs; ii++) + { + memset(host_names[ii], '\0', sizeof(char) * MPI_MAX_PROCESSOR_NAME); + } + + strcpy(host_names[rank], host_name); + + for (n = 0; n < nprocs; n++) + { + MPI_Bcast(&(host_names[n]), MPI_MAX_PROCESSOR_NAME, MPI_CHAR, n, MPI_COMM_WORLD); + } + qsort(host_names, nprocs, sizeof(char[MPI_MAX_PROCESSOR_NAME]), stringCmp); + + color = 0; + for (n = 0; n < nprocs - 1; n++) + { + if (strcmp(host_name, host_names[n]) == 0) + { + break; + } + if (strcmp(host_names[n], host_names[n + 1])) + { + color++; + } + } + + MPI_Comm_split(MPI_COMM_WORLD, color, 0, &nodeComm); + MPI_Comm_rank(nodeComm, &myrank); + + MPI_Barrier(MPI_COMM_WORLD); + int looprank = myrank; + // printf (" Assigning device %d to process on node %s rank %d, + // OK\n",looprank, host_name, rank ); + free(host_names); + return looprank; +} + +int get_node_rank_with_mpi_shared(const MPI_Comm mpi_comm) +{ + // 20240530 zhanghaochong + // The main difference between this function and the above is that it does not + // use hostname, but uses MPI's built-in function to achieve similar + // functions. + MPI_Comm localComm; + int localMpiRank; + MPI_Comm_split_type(mpi_comm, MPI_COMM_TYPE_SHARED, 0, MPI_INFO_NULL, &localComm); + MPI_Comm_rank(localComm, &localMpiRank); + MPI_Comm_free(&localComm); + return localMpiRank; +} +#if defined(__CUDA) + +int set_device_by_rank(const MPI_Comm mpi_comm) +{ + int localMpiRank = get_node_rank_with_mpi_shared(mpi_comm); + int device_num = -1; + + cudaGetDeviceCount(&device_num); + if (device_num <= 0) + { + ModuleBase::WARNING_QUIT("device", "can not find gpu device!"); + } + // warning: this is not a good way to assign devices, user should assign One + // process per GPU + int local_device_id = localMpiRank % device_num; + int ret = cudaSetDevice(local_device_id); + if (ret != cudaSuccess) + { + ModuleBase::WARNING_QUIT("device", "cudaSetDevice failed!"); + } + return local_device_id; +} +#endif + +#endif + +std::string get_device_flag(const std::string& device, const std::string& basis_type) +{ + if (device == "cpu") + { + return "cpu"; // no extra checks required + } + std::string error_message; + if (device != "auto" and device != "gpu") + { + error_message += "Parameter \"device\" can only be set to \"cpu\" or \"gpu\"!"; + ModuleBase::WARNING_QUIT("device", error_message); + } + + // Get available GPU count + int device_count = -1; +#if ((defined __CUDA) || (defined __ROCM)) +#if defined(__CUDA) + cudaGetDeviceCount(&device_count); +#elif defined(__ROCM) + hipGetDeviceCount(&device_count); +/***auto start_time = std::chrono::high_resolution_clock::now(); +std::cout << "Starting hipGetDeviceCount.." << std::endl; +auto end_time = std::chrono::high_resolution_clock::now(); +auto duration = std::chrono::duration_cast>(end_time - start_time); +std::cout << "hipGetDeviceCount took " << duration.count() << "seconds" << std::endl;***/ +#endif + if (device_count <= 0) + { + error_message += "Cannot find GPU on this computer!\n"; + } +#else // CPU only + error_message += "ABACUS is built with CPU support only. Please rebuild with GPU support.\n"; +#endif + + if (basis_type == "lcao_in_pw") + { + error_message += "The GPU currently does not support the basis type \"lcao_in_pw\"!"; + } + if (error_message.empty()) + { + return "gpu"; // possibly automatically set to GPU + } + else if (device == "gpu") + { + ModuleBase::WARNING_QUIT("device", error_message); + } + else + { + return "cpu"; + } +} + +int get_device_kpar(const int& kpar, const int& bndpar) +{ +#if __MPI && (__CUDA || __ROCM) + int temp_nproc = 0; + int new_kpar = kpar; + MPI_Comm_size(MPI_COMM_WORLD, &temp_nproc); + if (temp_nproc != kpar * bndpar) + { + new_kpar = temp_nproc / bndpar; + ModuleBase::WARNING("Input_conv", "kpar is not compatible with the number of processors, auto set kpar value."); + } + + // get the CPU rank of current node + int node_rank = base_device::information::get_node_rank(); + + int device_num = -1; +#if defined(__CUDA) + cudaGetDeviceCount(&device_num); // get the number of GPU devices of current node + cudaSetDevice(node_rank % device_num); // band the CPU processor to the devices +#elif defined(__ROCM) + hipGetDeviceCount(&device_num); + hipSetDevice(node_rank % device_num); +#endif + return new_kpar; +#endif + return kpar; +} + +std::string get_device_info(std::string device_flag) +{ + std::string device_info = "Unknown"; + +#if defined(__CUDA) + if (device_flag == "gpu") + { + int dev = 0; + cudaDeviceProp deviceProp; + cudaErrcheck(cudaGetDeviceProperties(&deviceProp, dev)); + device_info = deviceProp.name; + } +#elif defined(__ROCM) + if (device_flag == "gpu") + { + int dev = 0; + hipDeviceProp_t deviceProp; + hipErrcheck(hipGetDeviceProperties(&deviceProp, dev)); + device_info = deviceProp.name; + } +#endif + if (device_flag == "cpu") + { + std::ifstream cpuinfo("/proc/cpuinfo"); + std::string line = "", cpu_name = ""; + + while (std::getline(cpuinfo, line)) + { + if (line.find("model name") != std::string::npos) + { + // Extract the CPU name from the line + size_t colonPos = line.find(":"); + if (colonPos != std::string::npos) + { + cpu_name = line.substr(colonPos + 2); // Skip the colon and space + break; // Stop after the first match + } + } + } + if (cpu_name != "") + { + device_info = cpu_name; + } + cpuinfo.close(); + } + return device_info; +} + +#if defined(__CUDA) + +static bool is_init = false; + +template <> +void print_device_info(const base_device::DEVICE_GPU* ctx, std::ofstream& ofs_device) +{ + if (is_init) + { + return; + } + int deviceCount = 0; + cudaError_t error_id = cudaGetDeviceCount(&deviceCount); + if (error_id != cudaSuccess) + { + ofs_device << "cudaGetDeviceCount returned " << static_cast(error_id) << "\n-> " + << cudaGetErrorString(error_id) << std::endl; + ModuleBase::WARNING_QUIT("device", "GPU returned is without cudaSuccess"); + } + // This function call returns 0 if there are no CUDA capable devices. + if (deviceCount == 0) + { + ofs_device << "There are no available device(s) that support CUDA\n"; + } + else + { + ofs_device << "Detected " << deviceCount << " CUDA Capable device(s)\n"; + } + int dev = 0, driverVersion = 0, runtimeVersion = 0; + cudaErrcheck(cudaSetDevice(dev)); + cudaDeviceProp deviceProp; + cudaErrcheck(cudaGetDeviceProperties(&deviceProp, dev)); + ofs_device << "\nDevice " << dev << ":\t " << deviceProp.name << std::endl; + // Console log + cudaErrcheck(cudaDriverGetVersion(&driverVersion)); + cudaErrcheck(cudaRuntimeGetVersion(&runtimeVersion)); + char msg[1024]; + sprintf(msg, + " CUDA Driver Version / Runtime Version %d.%d / %d.%d\n", + driverVersion / 1000, + (driverVersion % 100) / 10, + runtimeVersion / 1000, + (runtimeVersion % 100) / 10); + ofs_device << msg << std::endl; + sprintf(msg, " CUDA Capability Major/Minor version number: %d.%d\n", deviceProp.major, deviceProp.minor); + ofs_device << msg << std::endl; + sprintf(msg, + " GPU Max Clock rate: %.0f MHz (%0.2f " + "GHz)\n", + deviceProp.clockRate * 1e-3f, + deviceProp.clockRate * 1e-6f); + ofs_device << msg << std::endl; + // This is supported in CUDA 5.0 (runtime API device properties) + sprintf(msg, " Memory Clock rate: %.0f Mhz\n", deviceProp.memoryClockRate * 1e-3f); + ofs_device << msg << std::endl; + + sprintf(msg, " Memory Bus Width: %d-bit\n", deviceProp.memoryBusWidth); + ofs_device << msg << std::endl; + sprintf(msg, + " Maximum Texture Dimension Size (x,y,z) 1D=(%d), 2D=(%d, " + "%d), 3D=(%d, %d, %d)\n", + deviceProp.maxTexture1D, + deviceProp.maxTexture2D[0], + deviceProp.maxTexture2D[1], + deviceProp.maxTexture3D[0], + deviceProp.maxTexture3D[1], + deviceProp.maxTexture3D[2]); + ofs_device << msg << std::endl; + + sprintf(msg, + " Maximum Layered 1D Texture Size, (num) layers 1D=(%d), %d layers\n", + deviceProp.maxTexture1DLayered[0], + deviceProp.maxTexture1DLayered[1]); + ofs_device << msg << std::endl; + sprintf(msg, + " Maximum Layered 2D Texture Size, (num) layers 2D=(%d, %d), %d " + "layers\n", + deviceProp.maxTexture2DLayered[0], + deviceProp.maxTexture2DLayered[1], + deviceProp.maxTexture2DLayered[2]); + ofs_device << msg << std::endl; + sprintf(msg, " Total amount of constant memory: %zu bytes\n", deviceProp.totalConstMem); + ofs_device << msg << std::endl; + sprintf(msg, " Total amount of shared memory per block: %zu bytes\n", deviceProp.sharedMemPerBlock); + ofs_device << msg << std::endl; + sprintf(msg, " Total shared memory per multiprocessor: %zu bytes\n", deviceProp.sharedMemPerMultiprocessor); + ofs_device << msg << std::endl; + sprintf(msg, " Total number of registers available per block: %d\n", deviceProp.regsPerBlock); + ofs_device << msg << std::endl; + sprintf(msg, " Warp size: %d\n", deviceProp.warpSize); + ofs_device << msg << std::endl; + sprintf(msg, " Maximum number of threads per multiprocessor: %d\n", deviceProp.maxThreadsPerMultiProcessor); + ofs_device << msg << std::endl; + sprintf(msg, " Maximum number of threads per block: %d\n", deviceProp.maxThreadsPerBlock); + ofs_device << msg << std::endl; + sprintf(msg, + " Max dimension size of a thread block (x,y,z): (%d, %d, %d)\n", + deviceProp.maxThreadsDim[0], + deviceProp.maxThreadsDim[1], + deviceProp.maxThreadsDim[2]); + ofs_device << msg << std::endl; + sprintf(msg, + " Max dimension size of a grid size (x,y,z): (%d, %d, %d)\n", + deviceProp.maxGridSize[0], + deviceProp.maxGridSize[1], + deviceProp.maxGridSize[2]); + ofs_device << msg << std::endl; + sprintf(msg, " Maximum memory pitch: %zu bytes\n", deviceProp.memPitch); + ofs_device << msg << std::endl; + sprintf(msg, " Texture alignment: %zu bytes\n", deviceProp.textureAlignment); + ofs_device << msg << std::endl; + sprintf(msg, + " Concurrent copy and kernel execution: %s with %d copy " + "engine(s)\n", + (deviceProp.deviceOverlap ? "Yes" : "No"), + deviceProp.asyncEngineCount); + ofs_device << msg << std::endl; + sprintf(msg, + " Run time limit on kernels: %s\n", + deviceProp.kernelExecTimeoutEnabled ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, " Integrated GPU sharing Host Memory: %s\n", deviceProp.integrated ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, " Support host page-locked memory mapping: %s\n", deviceProp.canMapHostMemory ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, " Alignment requirement for Surfaces: %s\n", deviceProp.surfaceAlignment ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, + " Device has ECC support: %s\n", + deviceProp.ECCEnabled ? "Enabled" : "Disabled"); + ofs_device << msg << std::endl; + sprintf(msg, " Device supports Unified Addressing (UVA): %s\n", deviceProp.unifiedAddressing ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, " Device supports Managed Memory: %s\n", deviceProp.managedMemory ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, + " Device supports Compute Preemption: %s\n", + deviceProp.computePreemptionSupported ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, " Supports Cooperative Kernel Launch: %s\n", deviceProp.cooperativeLaunch ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, + " Supports MultiDevice Co-op Kernel Launch: %s\n", + deviceProp.cooperativeMultiDeviceLaunch ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, + " Device PCI Domain ID / Bus ID / location ID: %d / %d / %d\n", + deviceProp.pciDomainID, + deviceProp.pciBusID, + deviceProp.pciDeviceID); + ofs_device << msg << std::endl; + const char* sComputeMode[] = {"Default (multiple host threads can use ::cudaSetDevice() with device " + "simultaneously)", + "Exclusive (only one host thread in one process is able to use " + "::cudaSetDevice() with this device)", + "Prohibited (no host thread can use ::cudaSetDevice() with this " + "device)", + "Exclusive Process (many threads in one process is able to use " + "::cudaSetDevice() with this device)", + "Unknown", + NULL}; + sprintf(msg, " Compute Mode:\n"); + ofs_device << msg << std::endl; + ofs_device << " " << sComputeMode[deviceProp.computeMode] << std::endl << std::endl; + + // If there are 2 or more GPUs, query to determine whether RDMA is supported + if (deviceCount >= 2) + { + cudaDeviceProp prop[64]; + int gpuid[64]; // we want to find the first two GPUs that can support P2P + int gpu_p2p_count = 0; + + for (int i = 0; i < deviceCount; i++) + { + cudaErrcheck(cudaGetDeviceProperties(&prop[i], i)); + + // Only boards based on Fermi or later can support P2P + if (prop[i].major >= 2) + { + // This is an array of P2P capable GPUs + gpuid[gpu_p2p_count++] = i; + } + } + + // Show all the combinations of support P2P GPUs + int can_access_peer; + + if (gpu_p2p_count >= 2) + { + for (int i = 0; i < gpu_p2p_count; i++) + { + for (int j = 0; j < gpu_p2p_count; j++) + { + if (gpuid[i] == gpuid[j]) + { + continue; + } + cudaErrcheck(cudaDeviceCanAccessPeer(&can_access_peer, gpuid[i], gpuid[j])); + sprintf(msg, + "> Peer access from %s (GPU%d) -> %s (GPU%d) : %s\n", + prop[gpuid[i]].name, + gpuid[i], + prop[gpuid[j]].name, + gpuid[j], + can_access_peer ? "Yes" : "No"); + ofs_device << msg << std::endl; + } + } + } + } + + // csv masterlog info + // ***************************** + // exe and CUDA driver name + std::string sProfileString = "deviceQuery, CUDA Driver = CUDART"; + char cTemp[16]; + + // driver version + sProfileString += ", CUDA Driver Version = "; + + snprintf(cTemp, sizeof(cTemp), "%d.%d", driverVersion / 1000, (driverVersion % 100) / 10); + sProfileString += cTemp; + + // Runtime version + sProfileString += ", CUDA Runtime Version = "; + snprintf(cTemp, sizeof(cTemp), "%d.%d", runtimeVersion / 1000, (runtimeVersion % 100) / 10); + sProfileString += cTemp; + + // Device count + sProfileString += ", NumDevs = "; + snprintf(cTemp, sizeof(cTemp), "%d", deviceCount); + sProfileString += cTemp; + sProfileString += "\n"; + + ofs_device << sProfileString.c_str() << std::endl; + is_init = true; + ofs_device << "End of device informations." << std::endl << std::endl; +} + +template <> +void record_device_memory(const base_device::DEVICE_GPU* ctx, + std::ofstream& ofs_device, + std::string str, + size_t size) +{ + ofs_device << "Allocate " << static_cast(size) / 8 / 1024 / 1024 << " \tMB device memory\t" + << "from " << str << std::endl + << std::endl; +} + +#elif defined(__ROCM) + +static bool is_init = false; + +template <> +void print_device_info(const base_device::DEVICE_GPU* ctx, std::ofstream& ofs_device) +{ + if (is_init) + { + return; + } + int deviceCount = 0; + hipError_t error_id = hipGetDeviceCount(&deviceCount); + if (error_id != hipSuccess) + { + ofs_device << "hipGetDeviceCount returned " << static_cast(error_id) << "\n-> " + << hipGetErrorString(error_id) << std::endl; + ModuleBase::WARNING_QUIT("device", "GPU returned is without hipSuccess"); + } + // This function call returns 0 if there are no CUDA capable devices. + if (deviceCount == 0) + { + ofs_device << "There are no available device(s) that support CUDA\n"; + } + else + { + ofs_device << "Detected " << deviceCount << " CUDA Capable device(s)\n"; + } + int dev = 0, driverVersion = 0, runtimeVersion = 0; + hipErrcheck(hipSetDevice(dev)); + hipDeviceProp_t deviceProp; + hipErrcheck(hipGetDeviceProperties(&deviceProp, dev)); + ofs_device << "\nDevice " << dev << ":\t " << deviceProp.name << std::endl; + // Console log + hipErrcheck(hipDriverGetVersion(&driverVersion)); + hipErrcheck(hipRuntimeGetVersion(&runtimeVersion)); + char msg[1024]; + sprintf(msg, + " CUDA Driver Version / Runtime Version %d.%d / %d.%d\n", + driverVersion / 1000, + (driverVersion % 100) / 10, + runtimeVersion / 1000, + (runtimeVersion % 100) / 10); + ofs_device << msg << std::endl; + sprintf(msg, " CUDA Capability Major/Minor version number: %d.%d\n", deviceProp.major, deviceProp.minor); + ofs_device << msg << std::endl; + sprintf(msg, + " GPU Max Clock rate: %.0f MHz (%0.2f " + "GHz)\n", + deviceProp.clockRate * 1e-3f, + deviceProp.clockRate * 1e-6f); + ofs_device << msg << std::endl; + // This is supported in CUDA 5.0 (runtime API device properties) + sprintf(msg, " Memory Clock rate: %.0f Mhz\n", deviceProp.memoryClockRate * 1e-3f); + ofs_device << msg << std::endl; + + sprintf(msg, " Memory Bus Width: %d-bit\n", deviceProp.memoryBusWidth); + ofs_device << msg << std::endl; + sprintf(msg, + " Maximum Texture Dimension Size (x,y,z) 1D=(%d), 2D=(%d, " + "%d), 3D=(%d, %d, %d)\n", + deviceProp.maxTexture1D, + deviceProp.maxTexture2D[0], + deviceProp.maxTexture2D[1], + deviceProp.maxTexture3D[0], + deviceProp.maxTexture3D[1], + deviceProp.maxTexture3D[2]); + ofs_device << msg << std::endl; + + sprintf(msg, " Total amount of constant memory: %zu bytes\n", deviceProp.totalConstMem); + ofs_device << msg << std::endl; + sprintf(msg, " Total amount of shared memory per block: %zu bytes\n", deviceProp.sharedMemPerBlock); + ofs_device << msg << std::endl; + sprintf(msg, " Total number of registers available per block: %d\n", deviceProp.regsPerBlock); + ofs_device << msg << std::endl; + sprintf(msg, " Warp size: %d\n", deviceProp.warpSize); + ofs_device << msg << std::endl; + sprintf(msg, " Maximum number of threads per multiprocessor: %d\n", deviceProp.maxThreadsPerMultiProcessor); + ofs_device << msg << std::endl; + sprintf(msg, " Maximum number of threads per block: %d\n", deviceProp.maxThreadsPerBlock); + ofs_device << msg << std::endl; + sprintf(msg, + " Max dimension size of a thread block (x,y,z): (%d, %d, %d)\n", + deviceProp.maxThreadsDim[0], + deviceProp.maxThreadsDim[1], + deviceProp.maxThreadsDim[2]); + ofs_device << msg << std::endl; + sprintf(msg, + " Max dimension size of a grid size (x,y,z): (%d, %d, %d)\n", + deviceProp.maxGridSize[0], + deviceProp.maxGridSize[1], + deviceProp.maxGridSize[2]); + ofs_device << msg << std::endl; + sprintf(msg, " Maximum memory pitch: %zu bytes\n", deviceProp.memPitch); + ofs_device << msg << std::endl; + sprintf(msg, " Texture alignment: %zu bytes\n", deviceProp.textureAlignment); + ofs_device << msg << std::endl; + sprintf(msg, + " Run time limit on kernels: %s\n", + deviceProp.kernelExecTimeoutEnabled ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, " Integrated GPU sharing Host Memory: %s\n", deviceProp.integrated ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, " Support host page-locked memory mapping: %s\n", deviceProp.canMapHostMemory ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, + " Device has ECC support: %s\n", + deviceProp.ECCEnabled ? "Enabled" : "Disabled"); + ofs_device << msg << std::endl; + sprintf(msg, " Device supports Managed Memory: %s\n", deviceProp.managedMemory ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, " Supports Cooperative Kernel Launch: %s\n", deviceProp.cooperativeLaunch ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, + " Supports MultiDevice Co-op Kernel Launch: %s\n", + deviceProp.cooperativeMultiDeviceLaunch ? "Yes" : "No"); + ofs_device << msg << std::endl; + sprintf(msg, + " Device PCI Domain ID / Bus ID / location ID: %d / %d / %d\n", + deviceProp.pciDomainID, + deviceProp.pciBusID, + deviceProp.pciDeviceID); + ofs_device << msg << std::endl; + const char* sComputeMode[] = {"Default (multiple host threads can use ::hipSetDevice() with device " + "simultaneously)", + "Exclusive (only one host thread in one process is able to use " + "::hipSetDevice() with this device)", + "Prohibited (no host thread can use ::hipSetDevice() with this " + "device)", + "Exclusive Process (many threads in one process is able to use " + "::hipSetDevice() with this device)", + "Unknown", + NULL}; + sprintf(msg, " Compute Mode:\n"); + ofs_device << msg << std::endl; + ofs_device << " " << sComputeMode[deviceProp.computeMode] << std::endl << std::endl; + + // If there are 2 or more GPUs, query to determine whether RDMA is supported + if (deviceCount >= 2) + { + hipDeviceProp_t prop[64]; + int gpuid[64]; // we want to find the first two GPUs that can support P2P + int gpu_p2p_count = 0; + + for (int i = 0; i < deviceCount; i++) + { + hipErrcheck(hipGetDeviceProperties(&prop[i], i)); + + // Only boards based on Fermi or later can support P2P + if (prop[i].major >= 2) + { + // This is an array of P2P capable GPUs + gpuid[gpu_p2p_count++] = i; + } + } + + // Show all the combinations of support P2P GPUs + int can_access_peer; + + if (gpu_p2p_count >= 2) + { + for (int i = 0; i < gpu_p2p_count; i++) + { + for (int j = 0; j < gpu_p2p_count; j++) + { + if (gpuid[i] == gpuid[j]) + { + continue; + } + hipErrcheck(hipDeviceCanAccessPeer(&can_access_peer, gpuid[i], gpuid[j])); + sprintf(msg, + "> Peer access from %s (GPU%d) -> %s (GPU%d) : %s\n", + prop[gpuid[i]].name, + gpuid[i], + prop[gpuid[j]].name, + gpuid[j], + can_access_peer ? "Yes" : "No"); + ofs_device << msg << std::endl; + } + } + } + } + + // csv masterlog info + // ***************************** + // exe and CUDA driver name + std::string sProfileString = "deviceQuery, CUDA Driver = CUDART"; + char cTemp[16]; + + // driver version + sProfileString += ", CUDA Driver Version = "; + + snprintf(cTemp, sizeof(cTemp), "%d.%d", driverVersion / 1000, (driverVersion % 100) / 10); + sProfileString += cTemp; + + // Runtime version + sProfileString += ", CUDA Runtime Version = "; + snprintf(cTemp, sizeof(cTemp), "%d.%d", runtimeVersion / 1000, (runtimeVersion % 100) / 10); + sProfileString += cTemp; + + // Device count + sProfileString += ", NumDevs = "; + snprintf(cTemp, sizeof(cTemp), "%d", deviceCount); + sProfileString += cTemp; + sProfileString += "\n"; + + ofs_device << sProfileString.c_str() << std::endl; + is_init = true; + ofs_device << "End of device informations." << std::endl << std::endl; +} + +template <> +void record_device_memory(const base_device::DEVICE_GPU* ctx, + std::ofstream& ofs_device, + std::string str, + size_t size) +{ + ofs_device << "Allocate " << static_cast(size) / 8 / 1024 / 1024 << " \tMB device memory\t" + << "from " << str << std::endl + << std::endl; +} + +#endif + +} // end of namespace information +} // end of namespace base_device diff --git a/source/module_base/module_device/device.h b/source/source_base/module_device/device.h similarity index 100% rename from source/module_base/module_device/device.h rename to source/source_base/module_device/device.h diff --git a/source/module_base/module_device/memory_op.cpp b/source/source_base/module_device/memory_op.cpp similarity index 87% rename from source/module_base/module_device/memory_op.cpp rename to source/source_base/module_device/memory_op.cpp index 9af0ce5a79..315b06601f 100644 --- a/source/module_base/module_device/memory_op.cpp +++ b/source/source_base/module_device/memory_op.cpp @@ -1,10 +1,10 @@ #include "memory_op.h" -#include "module_base/memory.h" -#include "module_base/tool_threading.h" +#include "source_base/memory.h" +#include "source_base/tool_threading.h" #ifdef __DSP -#include "module_base/kernels/dsp/dsp_connector.h" -#include "module_base/global_variable.h" +#include "source_base/global_variable.h" +#include "source_base/kernels/dsp/dsp_connector.h" #endif #include @@ -58,9 +58,7 @@ struct set_memory_op template struct synchronize_memory_op { - void operator()(FPTYPE* arr_out, - const FPTYPE* arr_in, - const size_t size) + void operator()(FPTYPE* arr_out, const FPTYPE* arr_in, const size_t size) { ModuleBase::OMP_PARALLEL([&](int num_thread, int thread_id) { int beg = 0, len = 0; @@ -73,9 +71,7 @@ struct synchronize_memory_op struct cast_memory_op { - void operator()(FPTYPE_out* arr_out, - const FPTYPE_in* arr_in, - const size_t size) + void operator()(FPTYPE_out* arr_out, const FPTYPE_in* arr_in, const size_t size) { #ifdef _OPENMP #pragma omp parallel for schedule(static, 4096 / sizeof(FPTYPE_out)) @@ -152,9 +148,7 @@ template struct delete_memory_op*, base_device::DEVICE_CPU> template struct resize_memory_op { - void operator()(FPTYPE*& arr, - const size_t size, - const char* record_in = nullptr) + void operator()(FPTYPE*& arr, const size_t size, const char* record_in = nullptr) { } }; @@ -170,9 +164,7 @@ struct set_memory_op template struct synchronize_memory_op { - void operator()(FPTYPE* arr_out, - const FPTYPE* arr_in, - const size_t size) + void operator()(FPTYPE* arr_out, const FPTYPE* arr_in, const size_t size) { } }; @@ -180,9 +172,7 @@ struct synchronize_memory_op struct synchronize_memory_op { - void operator()(FPTYPE* arr_out, - const FPTYPE* arr_in, - const size_t size) + void operator()(FPTYPE* arr_out, const FPTYPE* arr_in, const size_t size) { } }; @@ -190,9 +180,7 @@ struct synchronize_memory_op struct synchronize_memory_op { - void operator()(FPTYPE* arr_out, - const FPTYPE* arr_in, - const size_t size) + void operator()(FPTYPE* arr_out, const FPTYPE* arr_in, const size_t size) { } }; @@ -200,9 +188,7 @@ struct synchronize_memory_op struct cast_memory_op { - void operator()(FPTYPE_out* arr_out, - const FPTYPE_in* arr_in, - const size_t size) + void operator()(FPTYPE_out* arr_out, const FPTYPE_in* arr_in, const size_t size) { } }; @@ -210,9 +196,7 @@ struct cast_memory_op struct cast_memory_op { - void operator()(FPTYPE_out* arr_out, - const FPTYPE_in* arr_in, - const size_t size) + void operator()(FPTYPE_out* arr_out, const FPTYPE_in* arr_in, const size_t size) { } }; @@ -220,9 +204,7 @@ struct cast_memory_op struct cast_memory_op { - void operator()(FPTYPE_out* arr_out, - const FPTYPE_in* arr_in, - const size_t size) + void operator()(FPTYPE_out* arr_out, const FPTYPE_in* arr_in, const size_t size) { } }; @@ -369,7 +351,6 @@ struct delete_memory_op_mt } }; - template struct resize_memory_op_mt; template struct resize_memory_op_mt; template struct resize_memory_op_mt; @@ -386,53 +367,83 @@ template struct delete_memory_op_mt, base_device::DEVICE_CP template void resize_memory(FPTYPE* arr, const size_t size, base_device::AbacusDevice_t device_type) { - if (device_type == base_device::AbacusDevice_t::CpuDevice){ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { resize_memory_op()(arr, size); } - else if (device_type == base_device::AbacusDevice_t::GpuDevice){ + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { resize_memory_op()(arr, size); } } template -void set_memory(FPTYPE* arr, const int var, const size_t size, base_device::AbacusDevice_t device_type){ - if (device_type == base_device::AbacusDevice_t::CpuDevice){ +void set_memory(FPTYPE* arr, const int var, const size_t size, base_device::AbacusDevice_t device_type) +{ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { set_memory_op()(arr, var, size); } - else if (device_type == base_device::AbacusDevice_t::GpuDevice){ + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { set_memory_op()(arr, var, size); } } template -void synchronize_memory(FPTYPE* arr_out, const FPTYPE* arr_in, const size_t size, base_device::AbacusDevice_t device_type_out, base_device::AbacusDevice_t device_type_in){ - if (device_type_out == base_device::AbacusDevice_t::CpuDevice || device_type_in == base_device::AbacusDevice_t::CpuDevice){ +void synchronize_memory(FPTYPE* arr_out, + const FPTYPE* arr_in, + const size_t size, + base_device::AbacusDevice_t device_type_out, + base_device::AbacusDevice_t device_type_in) +{ + if (device_type_out == base_device::AbacusDevice_t::CpuDevice + || device_type_in == base_device::AbacusDevice_t::CpuDevice) + { synchronize_memory_op()(arr_out, arr_in, size); } - else if (device_type_out == base_device::AbacusDevice_t::CpuDevice || device_type_in == base_device::AbacusDevice_t::GpuDevice){ + else if (device_type_out == base_device::AbacusDevice_t::CpuDevice + || device_type_in == base_device::AbacusDevice_t::GpuDevice) + { synchronize_memory_op()(arr_out, arr_in, size); } - else if (device_type_out == base_device::AbacusDevice_t::GpuDevice || device_type_in == base_device::AbacusDevice_t::CpuDevice){ + else if (device_type_out == base_device::AbacusDevice_t::GpuDevice + || device_type_in == base_device::AbacusDevice_t::CpuDevice) + { synchronize_memory_op()(arr_out, arr_in, size); } - else if (device_type_out == base_device::AbacusDevice_t::GpuDevice || device_type_in == base_device::AbacusDevice_t::GpuDevice){ + else if (device_type_out == base_device::AbacusDevice_t::GpuDevice + || device_type_in == base_device::AbacusDevice_t::GpuDevice) + { synchronize_memory_op()(arr_out, arr_in, size); } } template -void cast_memory(FPTYPE_out* arr_out, const FPTYPE_in* arr_in, const size_t size, base_device::AbacusDevice_t device_type_out, base_device::AbacusDevice_t device_type_in) +void cast_memory(FPTYPE_out* arr_out, + const FPTYPE_in* arr_in, + const size_t size, + base_device::AbacusDevice_t device_type_out, + base_device::AbacusDevice_t device_type_in) { - if (device_type_out == base_device::AbacusDevice_t::CpuDevice || device_type_in == base_device::AbacusDevice_t::CpuDevice){ + if (device_type_out == base_device::AbacusDevice_t::CpuDevice + || device_type_in == base_device::AbacusDevice_t::CpuDevice) + { cast_memory_op()(arr_out, arr_in, size); } - else if (device_type_out == base_device::AbacusDevice_t::CpuDevice || device_type_in == base_device::AbacusDevice_t::GpuDevice){ + else if (device_type_out == base_device::AbacusDevice_t::CpuDevice + || device_type_in == base_device::AbacusDevice_t::GpuDevice) + { cast_memory_op()(arr_out, arr_in, size); } - else if (device_type_out == base_device::AbacusDevice_t::GpuDevice || device_type_in == base_device::AbacusDevice_t::CpuDevice){ + else if (device_type_out == base_device::AbacusDevice_t::GpuDevice + || device_type_in == base_device::AbacusDevice_t::CpuDevice) + { cast_memory_op()(arr_out, arr_in, size); } - else if (device_type_out == base_device::AbacusDevice_t::GpuDevice || device_type_in == base_device::AbacusDevice_t::GpuDevice){ + else if (device_type_out == base_device::AbacusDevice_t::GpuDevice + || device_type_in == base_device::AbacusDevice_t::GpuDevice) + { cast_memory_op()(arr_out, arr_in, size); } } @@ -440,10 +451,12 @@ void cast_memory(FPTYPE_out* arr_out, const FPTYPE_in* arr_in, const size_t size template void delete_memory(FPTYPE* arr, base_device::AbacusDevice_t device_type) { - if (device_type == base_device::AbacusDevice_t::CpuDevice){ + if (device_type == base_device::AbacusDevice_t::CpuDevice) + { delete_memory_op()(arr); } - else if (device_type == base_device::AbacusDevice_t::GpuDevice){ + else if (device_type == base_device::AbacusDevice_t::GpuDevice) + { delete_memory_op()(arr); } } diff --git a/source/module_base/module_device/memory_op.h b/source/source_base/module_device/memory_op.h similarity index 100% rename from source/module_base/module_device/memory_op.h rename to source/source_base/module_device/memory_op.h diff --git a/source/module_base/module_device/rocm/memory_op.hip.cu b/source/source_base/module_device/rocm/memory_op.hip.cu similarity index 87% rename from source/module_base/module_device/rocm/memory_op.hip.cu rename to source/source_base/module_device/rocm/memory_op.hip.cu index 287a5990c0..b3971cd024 100644 --- a/source/module_base/module_device/rocm/memory_op.hip.cu +++ b/source/source_base/module_device/rocm/memory_op.hip.cu @@ -1,10 +1,9 @@ -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/memory_op.h" #include +#include #include #include - -#include #include #define THREADS_PER_BLOCK 256 @@ -51,47 +50,45 @@ void resize_memory_op::operator()(FPTYPE*& arr, } template -void set_memory_op::operator()(FPTYPE* arr, - const int var, - const size_t size) +void set_memory_op::operator()(FPTYPE* arr, const int var, const size_t size) { hipErrcheck(hipMemset(arr, var, sizeof(FPTYPE) * size)); } template -void synchronize_memory_op::operator()( - FPTYPE* arr_out, - const FPTYPE* arr_in, - const size_t size) +void synchronize_memory_op::operator()(FPTYPE* arr_out, + const FPTYPE* arr_in, + const size_t size) { hipErrcheck(hipMemcpy(arr_out, arr_in, sizeof(FPTYPE) * size, hipMemcpyDeviceToHost)); } template -void synchronize_memory_op::operator()( - FPTYPE* arr_out, - const FPTYPE* arr_in, - const size_t size) +void synchronize_memory_op::operator()(FPTYPE* arr_out, + const FPTYPE* arr_in, + const size_t size) { hipErrcheck(hipMemcpy(arr_out, arr_in, sizeof(FPTYPE) * size, hipMemcpyHostToDevice)); } template -void synchronize_memory_op::operator()( - FPTYPE* arr_out, - const FPTYPE* arr_in, - const size_t size) +void synchronize_memory_op::operator()(FPTYPE* arr_out, + const FPTYPE* arr_in, + const size_t size) { hipErrcheck(hipMemcpy(arr_out, arr_in, sizeof(FPTYPE) * size, hipMemcpyDeviceToDevice)); } template -struct cast_memory_op { - void operator()(FPTYPE_out* arr_out, - const FPTYPE_in* arr_in, - const size_t size) { +struct cast_memory_op +{ + void operator()(FPTYPE_out* arr_out, const FPTYPE_in* arr_in, const size_t size) + { - if (size == 0) {return;} + if (size == 0) + { + return; + } const int block = (size + THREADS_PER_BLOCK - 1) / THREADS_PER_BLOCK; hipLaunchKernelGGL(cast_memory, dim3(block), dim3(THREADS_PER_BLOCK), 0, 0, arr_out, arr_in, size); hipCheckOnDebug(); @@ -99,22 +96,26 @@ struct cast_memory_op -struct cast_memory_op { - void operator()(FPTYPE_out* arr_out, - const FPTYPE_in* arr_in, - const size_t size) { +struct cast_memory_op +{ + void operator()(FPTYPE_out* arr_out, const FPTYPE_in* arr_in, const size_t size) + { - if (size == 0) {return;} + if (size == 0) + { + return; + } // No need to cast the memory if the data types are the same. if (std::is_same::value) { - synchronize_memory_op()(arr_out, - reinterpret_cast(arr_in), - size); + synchronize_memory_op()( + arr_out, + reinterpret_cast(arr_in), + size); return; } - FPTYPE_in * arr = nullptr; - hipErrcheck(hipMalloc((void **)&arr, sizeof(FPTYPE_in) * size)); + FPTYPE_in* arr = nullptr; + hipErrcheck(hipMalloc((void**)&arr, sizeof(FPTYPE_in) * size)); hipErrcheck(hipMemcpy(arr, arr_in, sizeof(FPTYPE_in) * size, hipMemcpyHostToDevice)); const int block = (size + THREADS_PER_BLOCK - 1) / THREADS_PER_BLOCK; hipLaunchKernelGGL(cast_memory, dim3(block), dim3(THREADS_PER_BLOCK), 0, 0, arr_out, arr, size); @@ -124,23 +125,28 @@ struct cast_memory_op -struct cast_memory_op { - void operator()(FPTYPE_out* arr_out, - const FPTYPE_in* arr_in, - const size_t size) { +struct cast_memory_op +{ + void operator()(FPTYPE_out* arr_out, const FPTYPE_in* arr_in, const size_t size) + { - if (size == 0) {return;} + if (size == 0) + { + return; + } // No need to cast the memory if the data types are the same. if (std::is_same::value) { - synchronize_memory_op()(arr_out, - reinterpret_cast(arr_in), - size); + synchronize_memory_op()( + arr_out, + reinterpret_cast(arr_in), + size); return; } - auto * arr = (FPTYPE_in*) malloc(sizeof(FPTYPE_in) * size); + auto* arr = (FPTYPE_in*)malloc(sizeof(FPTYPE_in) * size); hipErrcheck(hipMemcpy(arr, arr_in, sizeof(FPTYPE_in) * size, hipMemcpyDeviceToHost)); - for (int ii = 0; ii < size; ii++) { + for (int ii = 0; ii < size; ii++) + { arr_out[ii] = static_cast(arr[ii]); } free(arr); diff --git a/source/module_base/module_device/test/CMakeLists.txt b/source/source_base/module_device/test/CMakeLists.txt similarity index 100% rename from source/module_base/module_device/test/CMakeLists.txt rename to source/source_base/module_device/test/CMakeLists.txt diff --git a/source/module_base/module_device/test/device_test.cpp b/source/source_base/module_device/test/device_test.cpp similarity index 94% rename from source/module_base/module_device/test/device_test.cpp rename to source/source_base/module_device/test/device_test.cpp index e14392999e..02d485c8ef 100644 --- a/source/module_base/module_device/test/device_test.cpp +++ b/source/source_base/module_device/test/device_test.cpp @@ -1,4 +1,4 @@ -#include "module_base/module_device/device.h" +#include "source_base/module_device/device.h" #include #include diff --git a/source/module_base/module_device/test/memory_test.cpp b/source/source_base/module_device/test/memory_test.cpp similarity index 93% rename from source/module_base/module_device/test/memory_test.cpp rename to source/source_base/module_device/test/memory_test.cpp index 39c5c25d52..7325f5cd81 100644 --- a/source/module_base/module_device/test/memory_test.cpp +++ b/source/source_base/module_device/test/memory_test.cpp @@ -1,4 +1,4 @@ -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/memory_op.h" #include #include @@ -57,8 +57,8 @@ class TestModulePsiMemory : public ::testing::Test = base_device::memory::resize_memory_op, base_device::DEVICE_CPU>; using synchronize_memory_double_cpu_to_cpu_op = base_device::memory::synchronize_memory_op; - using synchronize_memory_complex_double_cpu_to_cpu_op - = base_device::memory::synchronize_memory_op, base_device::DEVICE_CPU, base_device::DEVICE_CPU>; + using synchronize_memory_complex_double_cpu_to_cpu_op = base_device::memory:: + synchronize_memory_op, base_device::DEVICE_CPU, base_device::DEVICE_CPU>; using delete_memory_double_cpu_op = base_device::memory::delete_memory_op; using delete_memory_complex_double_cpu_op = base_device::memory::delete_memory_op, base_device::DEVICE_CPU>; @@ -76,12 +76,12 @@ class TestModulePsiMemory : public ::testing::Test = base_device::memory::synchronize_memory_op; using synchronize_memory_double_gpu_to_gpu_op = base_device::memory::synchronize_memory_op; - using synchronize_memory_complex_double_cpu_to_gpu_op - = base_device::memory::synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_CPU>; - using synchronize_memory_complex_double_gpu_to_cpu_op - = base_device::memory::synchronize_memory_op, base_device::DEVICE_CPU, base_device::DEVICE_GPU>; - using synchronize_memory_complex_double_gpu_to_gpu_op - = base_device::memory::synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_GPU>; + using synchronize_memory_complex_double_cpu_to_gpu_op = base_device::memory:: + synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_CPU>; + using synchronize_memory_complex_double_gpu_to_cpu_op = base_device::memory:: + synchronize_memory_op, base_device::DEVICE_CPU, base_device::DEVICE_GPU>; + using synchronize_memory_complex_double_gpu_to_gpu_op = base_device::memory:: + synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_GPU>; using delete_memory_double_gpu_op = base_device::memory::delete_memory_op; using delete_memory_complex_double_gpu_op = base_device::memory::delete_memory_op, base_device::DEVICE_GPU>; @@ -287,9 +287,7 @@ TEST_F(TestModulePsiMemory, synchronize_memory_op_complex_double_cpu_to_gpu) thrust::device_ptr> dz_xx = thrust::device_malloc>(z_xx.size()); std::vector> hvz_xx(z_xx.size(), 0); thrust::copy(hvz_xx.begin(), hvz_xx.end(), dz_xx); - synchronize_memory_complex_double_cpu_to_gpu_op()(thrust::raw_pointer_cast(dz_xx), - z_xx.data(), - z_xx.size()); + synchronize_memory_complex_double_cpu_to_gpu_op()(thrust::raw_pointer_cast(dz_xx), z_xx.data(), z_xx.size()); thrust::host_vector> hz_xx(z_xx.size()); thrust::copy(dz_xx, dz_xx + z_xx.size(), hz_xx.begin()); diff --git a/source/module_base/module_device/types.h b/source/source_base/module_device/types.h similarity index 100% rename from source/module_base/module_device/types.h rename to source/source_base/module_device/types.h diff --git a/source/module_base/module_mixing/broyden_mixing.cpp b/source/source_base/module_mixing/broyden_mixing.cpp similarity index 85% rename from source/module_base/module_mixing/broyden_mixing.cpp rename to source/source_base/module_mixing/broyden_mixing.cpp index 0d769ede0e..90ddcae037 100644 --- a/source/module_base/module_mixing/broyden_mixing.cpp +++ b/source/source_base/module_mixing/broyden_mixing.cpp @@ -1,10 +1,10 @@ #include "broyden_mixing.h" -#include "module_base/lapack_connector.h" -#include "module_base/memory.h" -#include "module_base/module_container/base/third_party/blas.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" +#include "source_base/lapack_connector.h" +#include "source_base/memory.h" +#include "source_base/module_container/base/third_party/blas.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" namespace Base_Mixing { template void Broyden_Mixing::tem_push_data(Mixing_Data& mdata, @@ -107,14 +107,14 @@ void Broyden_Mixing::tem_cal_coef(const Mixing_Data& mdata, std::function(dF); FPTYPE* FP_F = static_cast(F); @@ -142,8 +142,8 @@ void Broyden_Mixing::tem_cal_coef(const Mixing_Data& mdata, std::function +#include "source_base/module_container/ATen/tensor.h" -#include "module_base/module_container/ATen/tensor.h" +#include namespace Base_Mixing { @@ -52,7 +52,7 @@ class Mixing_Data ++this->ndim_history; FPTYPE* FP_startdata = static_cast(this->data) + this->start * this->length; #ifdef _OPENMP -#pragma omp parallel for schedule(static, 4096/sizeof(FPTYPE)) +#pragma omp parallel for schedule(static, 4096 / sizeof(FPTYPE)) #endif for (std::size_t i = 0; i < length; ++i) { diff --git a/source/module_base/module_mixing/plain_mixing.cpp b/source/source_base/module_mixing/plain_mixing.cpp similarity index 97% rename from source/module_base/module_mixing/plain_mixing.cpp rename to source/source_base/module_mixing/plain_mixing.cpp index 025cc67b1e..81bdd659ef 100644 --- a/source/module_base/module_mixing/plain_mixing.cpp +++ b/source/source_base/module_mixing/plain_mixing.cpp @@ -1,8 +1,8 @@ #include "plain_mixing.h" -#include "module_base/memory.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" +#include "source_base/memory.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" namespace Base_Mixing { template void Plain_Mixing::tem_push_data(Mixing_Data& mdata, diff --git a/source/module_base/module_mixing/plain_mixing.h b/source/source_base/module_mixing/plain_mixing.h similarity index 100% rename from source/module_base/module_mixing/plain_mixing.h rename to source/source_base/module_mixing/plain_mixing.h diff --git a/source/module_base/module_mixing/pulay_mixing.cpp b/source/source_base/module_mixing/pulay_mixing.cpp similarity index 97% rename from source/module_base/module_mixing/pulay_mixing.cpp rename to source/source_base/module_mixing/pulay_mixing.cpp index 9c9c10a7bd..5caa6b7299 100644 --- a/source/module_base/module_mixing/pulay_mixing.cpp +++ b/source/source_base/module_mixing/pulay_mixing.cpp @@ -1,9 +1,9 @@ #include "pulay_mixing.h" -#include "module_base/lapack_connector.h" -#include "module_base/memory.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" +#include "source_base/lapack_connector.h" +#include "source_base/memory.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" namespace Base_Mixing { template void Pulay_Mixing::tem_push_data(Mixing_Data& mdata, diff --git a/source/module_base/module_mixing/pulay_mixing.h b/source/source_base/module_mixing/pulay_mixing.h similarity index 99% rename from source/module_base/module_mixing/pulay_mixing.h rename to source/source_base/module_mixing/pulay_mixing.h index 0e6c6de595..c336959dc9 100644 --- a/source/module_base/module_mixing/pulay_mixing.h +++ b/source/source_base/module_mixing/pulay_mixing.h @@ -1,7 +1,7 @@ #ifndef PULAY_MIXING_H_ #define PULAY_MIXING_H_ #include "mixing.h" -#include "module_base/matrix.h" +#include "source_base/matrix.h" namespace Base_Mixing { diff --git a/source/module_base/module_mixing/test/CMakeLists.txt b/source/source_base/module_mixing/test/CMakeLists.txt similarity index 100% rename from source/module_base/module_mixing/test/CMakeLists.txt rename to source/source_base/module_mixing/test/CMakeLists.txt diff --git a/source/module_base/module_mixing/test/mixing_test.cpp b/source/source_base/module_mixing/test/mixing_test.cpp similarity index 100% rename from source/module_base/module_mixing/test/mixing_test.cpp rename to source/source_base/module_mixing/test/mixing_test.cpp diff --git a/source/module_base/mymath.cpp b/source/source_base/mymath.cpp similarity index 100% rename from source/module_base/mymath.cpp rename to source/source_base/mymath.cpp diff --git a/source/module_base/mymath.h b/source/source_base/mymath.h similarity index 100% rename from source/module_base/mymath.h rename to source/source_base/mymath.h diff --git a/source/module_base/name_angular.h b/source/source_base/name_angular.h similarity index 100% rename from source/module_base/name_angular.h rename to source/source_base/name_angular.h diff --git a/source/module_base/ndarray.h b/source/source_base/ndarray.h similarity index 57% rename from source/module_base/ndarray.h rename to source/source_base/ndarray.h index 585af603b8..ca5d7a6c8a 100644 --- a/source/module_base/ndarray.h +++ b/source/source_base/ndarray.h @@ -1,32 +1,38 @@ /** * @file NDArray.h * @author your name (you@domain.com) - * @brief under the restriction of C++11, a simple alternative to std::vector + std::mdspan. In module_base/module_container/ATen/tensor.h, tensor class provides a cross-device container, but std::string is not supported. Therefore, this class is to provide a general (but CPU-only) container for multi-dimensional data. It can easily convert to ontainer::Tensor. + * @brief under the restriction of C++11, a simple alternative to std::vector + std::mdspan. In + * source_base/module_container/ATen/tensor.h, tensor class provides a cross-device container, but std::string is not + * supported. Therefore, this class is to provide a general (but CPU-only) container for multi-dimensional data. It can + * easily convert to ontainer::Tensor. * @version 0.1 * @date 2024-04-24 - * + * * @copyright Copyright (c) 2024 - * + * */ #ifndef NDARRAY_H #define NDARRAY_H -#include +#include #include #include -#include -#include #include +#include +#include // for heterogeneous computing, we can use ATen::Tensor //#include "./module_container/ATen/tensor.h" /** - * @brief under the restriction of C++11, a simple alternative to std::vector + std::mdspan. In module_base/module_container/ATen/tensor.h, tensor class provides a cross-device container, but std::string is not supported. Therefore, this class is to provide a general (but CPU-only) container for multi-dimensional data. It can easily convert to container::Tensor. - * - * @tparam T + * @brief under the restriction of C++11, a simple alternative to std::vector + std::mdspan. In + * source_base/module_container/ATen/tensor.h, tensor class provides a cross-device container, but std::string is not + * supported. Therefore, this class is to provide a general (but CPU-only) container for multi-dimensional data. It can + * easily convert to container::Tensor. + * + * @tparam T */ -template +template class NDArray { // align with STL container implementation, there are several functions compulsory to be implemented @@ -37,33 +43,52 @@ class NDArray // element access: [], at, front, back, data // modifiers: clear, insert, erase, push_back, pop_back, resize, swap // allocator: get_allocator -public: + public: // constructors /** * @brief Construct a new NDArray object - * + * */ - NDArray()= delete; + NDArray() = delete; // initializer_list constructor - NDArray(std::initializer_list il) : shape_(il), data_(std::accumulate(shape_.begin(), shape_.end(), 1, std::multiplies())) {} - NDArray(std::initializer_list il) : shape_(il.begin(), il.end()), data_(std::accumulate(shape_.begin(), shape_.end(), 1, std::multiplies())) {} + NDArray(std::initializer_list il) + : shape_(il), data_(std::accumulate(shape_.begin(), shape_.end(), 1, std::multiplies())) + { + } + NDArray(std::initializer_list il) + : shape_(il.begin(), il.end()), + data_(std::accumulate(shape_.begin(), shape_.end(), 1, std::multiplies())) + { + } // variadic template constructor, (delegate constructor) - template NDArray(const size_t idx, Args... args) : NDArray({idx, static_cast(args)...}) {} - template NDArray(const int& idx, Args... args) : NDArray({idx, static_cast(args)...}) {} // not happy with this because size_t can have larger range + template + NDArray(const size_t idx, Args... args) : NDArray({idx, static_cast(args)...}) + { + } + template + NDArray(const int& idx, Args... args) : NDArray({idx, static_cast(args)...}) + { + } // not happy with this because size_t can have larger range // copy constructor - NDArray(const NDArray& other) : data_(other.data_), shape_(other.shape_) {} + NDArray(const NDArray& other) : data_(other.data_), shape_(other.shape_) + { + } // move constructor - NDArray(NDArray&& other) : data_(std::move(other.data_)), shape_(std::move(other.shape_)) {} + NDArray(NDArray&& other) : data_(std::move(other.data_)), shape_(std::move(other.shape_)) + { + } // destructor - ~NDArray() {} + ~NDArray() + { + } // operators /** * @brief = operator, copy assignment - * - * @param other - * @return NDArray& + * + * @param other + * @return NDArray& */ NDArray& operator=(const NDArray& other) { @@ -76,7 +101,7 @@ class NDArray } /** * @brief = operator, move assignment - */ + */ NDArray& operator=(NDArray&& other) { if (this != &other) @@ -89,75 +114,139 @@ class NDArray /** * @brief == operator - * - * @param other + * + * @param other * @return true if the data and shape are the same * @return false otherwise */ - bool operator==(const NDArray& other) const { return data_ == other.data_ && shape_ == other.shape_; } + bool operator==(const NDArray& other) const + { + return data_ == other.data_ && shape_ == other.shape_; + } /** * @brief != operator - * - * @param other + * + * @param other * @return true if the data and shape are different * @return false otherwise */ - bool operator!=(const NDArray& other) const { return !(*this == other); } + bool operator!=(const NDArray& other) const + { + return !(*this == other); + } // other operators are not generally supported // element access /** * @brief at function - * - * @tparam Args + * + * @tparam Args * @param args indices of the element * @return T& or const T& */ - template T& at(const size_t idx, Args... args) { return data_[index(idx, args...)]; } - template const T& at(const size_t idx, Args... args) const { return data_[index(idx, args...)]; } + template + T& at(const size_t idx, Args... args) + { + return data_[index(idx, args...)]; + } + template + const T& at(const size_t idx, Args... args) const + { + return data_[index(idx, args...)]; + } /** * @brief [] operator - * - * @tparam Args + * + * @tparam Args * @param args indices of the element * @return T& or const T& */ - template T& operator()(const size_t idx, Args... args) { return data_[index(idx, args...)]; } - template const T& operator()(const size_t idx, Args... args) const { return data_[index(idx, args...)]; } + template + T& operator()(const size_t idx, Args... args) + { + return data_[index(idx, args...)]; + } + template + const T& operator()(const size_t idx, Args... args) const + { + return data_[index(idx, args...)]; + } // front - T& front() { return data_.front(); } - const T& front() const { return data_.front(); } + T& front() + { + return data_.front(); + } + const T& front() const + { + return data_.front(); + } // back - T& back() { return data_.back(); } - const T& back() const { return data_.back(); } + T& back() + { + return data_.back(); + } + const T& back() const + { + return data_.back(); + } // data - T* data() { return data_.data(); } - const T* data() const { return data_.data(); } + T* data() + { + return data_.data(); + } + const T* data() const + { + return data_.data(); + } // iterators // iterators on the whole data - T* begin() { return data_.data(); } - T* end() { return data_.data() + data_.size(); } - const T* cbegin() const { return data_.data(); } - const T* cend() const { return data_.data() + data_.size(); } + T* begin() + { + return data_.data(); + } + T* end() + { + return data_.data() + data_.size(); + } + const T* cbegin() const + { + return data_.data(); + } + const T* cend() const + { + return data_.data() + data_.size(); + } // iterators on different dimensions - + // capacity // size - size_t size() const { return data_.size(); } - size_t size(const size_t& dim) const { return shape_.at(dim); } + size_t size() const + { + return data_.size(); + } + size_t size(const size_t& dim) const + { + return shape_.at(dim); + } // empty - bool empty() const { return data_.empty(); } + bool empty() const + { + return data_.empty(); + } // multi-dimensional specific // shape - const std::vector& shape() const { return shape_; } + const std::vector& shape() const + { + return shape_; + } // reshape - template + template void reshape(Args... args) { // DEVELP WARNING: what if arg = -2? :) // save args into a vector - //std::vector dims = {static_cast(args)...}; + // std::vector dims = {static_cast(args)...}; std::vector dims = {args...}; // assert number of -1 in dims is at most 1 // -1 is not type-safe!!! @@ -187,15 +276,16 @@ class NDArray // interface to ATen::Tensor, but constraint to int, double, float, std::complex, std::complex /** - * @brief SFINAE (Substitution Failure Is Not An Error) to_tensor function, only if T is int, double, float, std::complex, std::complex, otherwise there is no such function - * + * @brief SFINAE (Substitution Failure Is Not An Error) to_tensor function, only if T is int, double, float, + * std::complex, std::complex, otherwise there is no such function + * * @return container::Tensor, only if T is int, double, float, std::complex, std::complex */ // std::enable_if< - // std::is_same::value - // || std::is_same::value - // || std::is_same::value - // || std::is_same>::value + // std::is_same::value + // || std::is_same::value + // || std::is_same::value + // || std::is_same>::value // || std::is_same>::value, container::Tensor // >::type to_tensor() const // { @@ -204,7 +294,7 @@ class NDArray // std::memcpy(result.data(), data_.data(), data_.size() * sizeof(T)); // return result; // } - template + template size_t index(const size_t idx, Args... args) const { assert(sizeof...(args) == shape_.size() - 1); // assert the indices are the same as the shape @@ -217,7 +307,8 @@ class NDArray assert(index < data_.size()); // assert the index is within the data return index; } -private: + + private: std::vector shape_; // for GPU-compatible data container, will be replaced by raw pointer std::vector data_; diff --git a/source/module_base/opt_CG.cpp b/source/source_base/opt_CG.cpp similarity index 100% rename from source/module_base/opt_CG.cpp rename to source/source_base/opt_CG.cpp diff --git a/source/module_base/opt_CG.h b/source/source_base/opt_CG.h similarity index 98% rename from source/module_base/opt_CG.h rename to source/source_base/opt_CG.h index 32707d6ca7..1203aa317f 100644 --- a/source/module_base/opt_CG.h +++ b/source/source_base/opt_CG.h @@ -1,12 +1,11 @@ #ifndef OPT_CG_H #define OPT_CG_H -#include +#include "global_function.h" +#include "source_base/parallel_reduce.h" #include - -#include "global_function.h" -#include "module_base/parallel_reduce.h" +#include namespace ModuleBase { diff --git a/source/module_base/opt_DCsrch.cpp b/source/source_base/opt_DCsrch.cpp similarity index 100% rename from source/module_base/opt_DCsrch.cpp rename to source/source_base/opt_DCsrch.cpp diff --git a/source/module_base/opt_DCsrch.h b/source/source_base/opt_DCsrch.h similarity index 100% rename from source/module_base/opt_DCsrch.h rename to source/source_base/opt_DCsrch.h diff --git a/source/module_base/opt_TN.hpp b/source/source_base/opt_TN.hpp similarity index 100% rename from source/module_base/opt_TN.hpp rename to source/source_base/opt_TN.hpp diff --git a/source/module_base/para_gemm.cpp b/source/source_base/para_gemm.cpp similarity index 99% rename from source/module_base/para_gemm.cpp rename to source/source_base/para_gemm.cpp index abfacf5154..3f8f286caa 100644 --- a/source/module_base/para_gemm.cpp +++ b/source/source_base/para_gemm.cpp @@ -2,7 +2,7 @@ #include "kernels/math_kernel_op.h" #include "parallel_device.h" -#include "module_base/timer.h" +#include "source_base/timer.h" namespace ModuleBase { template @@ -69,7 +69,7 @@ void PGemmCN::set_dimension( break; } - if(col_nproc > 1) + if (col_nproc > 1) { requests.resize(col_nproc); if (this->divideCrow) @@ -203,8 +203,7 @@ void PGemmCN::multiply_col(const T alpha, const T* A, const T* B, con } } - - //init pointers + // init pointers T* C_local = C; if (this->gatherC) { diff --git a/source/module_base/para_gemm.h b/source/source_base/para_gemm.h similarity index 92% rename from source/module_base/para_gemm.h rename to source/source_base/para_gemm.h index a0e01d2734..baecbb9b28 100644 --- a/source/module_base/para_gemm.h +++ b/source/source_base/para_gemm.h @@ -1,7 +1,7 @@ #ifndef PARA_GEMM_H #define PARA_GEMM_H -#include "module_base/module_device/device.h" -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/device.h" +#include "source_base/module_device/memory_op.h" #include #ifdef __MPI @@ -101,17 +101,15 @@ class PGemmCN #ifdef __MPI private: - std::vector isend_tmp_; ///< temperory memory for sending data - std::vector A_tmp_; ///< temperory memory for A - std::vector B_tmp_; ///< temperory memory for B - std::vector C_tmp_; ///< temperory memory for C + std::vector isend_tmp_; ///< temperory memory for sending data + std::vector A_tmp_; ///< temperory memory for A + std::vector B_tmp_; ///< temperory memory for B + std::vector C_tmp_; ///< temperory memory for C std::vector C_global_tmp_; ///< temperory memory for C_global T* C_local_tmp_ = nullptr; ///< temperory memory for C_local T* A_tmp_device_ = nullptr; ///< temperory memory for A T* B_tmp_device_ = nullptr; ///< temperory memory for B #endif - - }; } // namespace ModuleBase #endif \ No newline at end of file diff --git a/source/module_base/parallel_2d.cpp b/source/source_base/parallel_2d.cpp similarity index 98% rename from source/module_base/parallel_2d.cpp rename to source/source_base/parallel_2d.cpp index 3791a1218b..ef01a0566d 100644 --- a/source/module_base/parallel_2d.cpp +++ b/source/source_base/parallel_2d.cpp @@ -1,6 +1,6 @@ #include "parallel_2d.h" -#include "module_base/scalapack_connector.h" +#include "source_base/scalapack_connector.h" #include #include diff --git a/source/module_base/parallel_2d.h b/source/source_base/parallel_2d.h similarity index 98% rename from source/module_base/parallel_2d.h rename to source/source_base/parallel_2d.h index 2f8bc8b132..f28408ddbe 100644 --- a/source/module_base/parallel_2d.h +++ b/source/source_base/parallel_2d.h @@ -1,11 +1,11 @@ #ifndef _PARALLEL_2D_H_ #define _PARALLEL_2D_H_ +#include "source_base/blacs_connector.h" + #include #include -#include "module_base/blacs_connector.h" - /// @brief This class packs the basic information of /// 2D-block-cyclic parallel distribution of an arbitrary matrix. class Parallel_2D diff --git a/source/module_base/parallel_comm.cpp b/source/source_base/parallel_comm.cpp similarity index 100% rename from source/module_base/parallel_comm.cpp rename to source/source_base/parallel_comm.cpp diff --git a/source/module_base/parallel_comm.h b/source/source_base/parallel_comm.h similarity index 100% rename from source/module_base/parallel_comm.h rename to source/source_base/parallel_comm.h diff --git a/source/module_base/parallel_common.cpp b/source/source_base/parallel_common.cpp similarity index 100% rename from source/module_base/parallel_common.cpp rename to source/source_base/parallel_common.cpp diff --git a/source/module_base/parallel_common.h b/source/source_base/parallel_common.h similarity index 100% rename from source/module_base/parallel_common.h rename to source/source_base/parallel_common.h diff --git a/source/module_base/parallel_device.cpp b/source/source_base/parallel_device.cpp similarity index 100% rename from source/module_base/parallel_device.cpp rename to source/source_base/parallel_device.cpp diff --git a/source/module_base/parallel_device.h b/source/source_base/parallel_device.h similarity index 80% rename from source/module_base/parallel_device.h rename to source/source_base/parallel_device.h index 3ecc2f6aae..161ca71807 100644 --- a/source/module_base/parallel_device.h +++ b/source/source_base/parallel_device.h @@ -2,8 +2,9 @@ #define __PARALLEL_DEVICE_H__ #ifdef __MPI #include "mpi.h" -#include "module_base/module_device/device.h" -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/device.h" +#include "source_base/module_device/memory_op.h" + #include namespace Parallel_Common { @@ -27,13 +28,33 @@ void reduce_data(std::complex* object, const int& n, const MPI_Comm& com void reduce_data(std::complex* object, const int& n, const MPI_Comm& comm); void reduce_data(double* object, const int& n, const MPI_Comm& comm); void reduce_data(float* object, const int& n, const MPI_Comm& comm); -void gatherv_data(const double* sendbuf, int sendcount, double* recvbuf, const int* recvcounts, const int* displs, MPI_Comm& comm); -void gatherv_data(const std::complex* sendbuf, int sendcount, std::complex* recvbuf, const int* recvcounts, const int* displs, MPI_Comm& comm); -void gatherv_data(const float* sendbuf, int sendcount, float* recvbuf, const int* recvcounts, const int* displs, MPI_Comm& comm); -void gatherv_data(const std::complex* sendbuf, int sendcount, std::complex* recvbuf, const int* recvcounts, const int* displs, MPI_Comm& comm); +void gatherv_data(const double* sendbuf, + int sendcount, + double* recvbuf, + const int* recvcounts, + const int* displs, + MPI_Comm& comm); +void gatherv_data(const std::complex* sendbuf, + int sendcount, + std::complex* recvbuf, + const int* recvcounts, + const int* displs, + MPI_Comm& comm); +void gatherv_data(const float* sendbuf, + int sendcount, + float* recvbuf, + const int* recvcounts, + const int* displs, + MPI_Comm& comm); +void gatherv_data(const std::complex* sendbuf, + int sendcount, + std::complex* recvbuf, + const int* recvcounts, + const int* displs, + MPI_Comm& comm); #ifndef __CUDA_MPI -template +template struct object_cpu_point { bool alloc = false; @@ -46,7 +67,7 @@ struct object_cpu_point /** * @brief send data in Device - * + * */ template void send_dev(const T* object, int count, int dest, int tag, MPI_Comm& comm, T* tmp_space = nullptr) @@ -54,7 +75,7 @@ void send_dev(const T* object, int count, int dest, int tag, MPI_Comm& comm, T* #ifdef __CUDA_MPI send_data(object, count, dest, tag, comm); #else - object_cpu_point o; + object_cpu_point o; T* object_cpu = o.get(object, count, tmp_space); o.sync_d2h(object_cpu, object, count); send_data(object_cpu, count, dest, tag, comm); @@ -66,7 +87,7 @@ void send_dev(const T* object, int count, int dest, int tag, MPI_Comm& comm, T* /** * @brief isend data in Device * @note before the date in send_space is recieved, it should not be modified - * + * */ template void isend_dev(const T* object, int count, int dest, int tag, MPI_Comm& comm, MPI_Request* request, T* send_space) @@ -74,7 +95,7 @@ void isend_dev(const T* object, int count, int dest, int tag, MPI_Comm& comm, MP #ifdef __CUDA_MPI isend_data(object, count, dest, tag, comm, request); #else - object_cpu_point o; + object_cpu_point o; T* object_cpu = o.get(object, count, send_space); o.sync_d2h(object_cpu, object, count); isend_data(object_cpu, count, dest, tag, comm, request); @@ -85,7 +106,7 @@ void isend_dev(const T* object, int count, int dest, int tag, MPI_Comm& comm, MP /** * @brief recv data in Device - * + * */ template void recv_dev(T* object, int count, int source, int tag, MPI_Comm& comm, MPI_Status* status, T* tmp_space = nullptr) @@ -93,7 +114,7 @@ void recv_dev(T* object, int count, int source, int tag, MPI_Comm& comm, MPI_Sta #ifdef __CUDA_MPI recv_data(object, count, source, tag, comm, status); #else - object_cpu_point o; + object_cpu_point o; T* object_cpu = o.get(object, count, tmp_space); recv_data(object_cpu, count, source, tag, comm, status); o.sync_h2d(object, object_cpu, count); @@ -104,9 +125,9 @@ void recv_dev(T* object, int count, int source, int tag, MPI_Comm& comm, MPI_Sta /** * @brief bcast data in Device - * + * * @tparam T: float, double, std::complex, std::complex - * @tparam Device + * @tparam Device * @param ctx Device ctx * @param object complex arrays in Device * @param n the size of complex arrays @@ -119,7 +140,7 @@ void bcast_dev(T* object, const int& n, const MPI_Comm& comm, T* tmp_space = nul #ifdef __CUDA_MPI bcast_data(object, n, comm); #else - object_cpu_point o; + object_cpu_point o; T* object_cpu = o.get(object, n, tmp_space); o.sync_d2h(object_cpu, object, n); bcast_data(object_cpu, n, comm); @@ -135,7 +156,7 @@ void reduce_dev(T* object, const int& n, const MPI_Comm& comm, T* tmp_space = nu #ifdef __CUDA_MPI reduce_data(object, n, comm); #else - object_cpu_point o; + object_cpu_point o; T* object_cpu = o.get(object, n, tmp_space); o.sync_d2h(object_cpu, object, n); reduce_data(object_cpu, n, comm); @@ -158,7 +179,7 @@ void gatherv_dev(const T* sendbuf, #ifdef __CUDA_MPI gatherv_data(sendbuf, sendcount, recvbuf, recvcounts, displs, comm); #else - object_cpu_point o1, o2; + object_cpu_point o1, o2; int size = 0; MPI_Comm_size(comm, &size); int gather_space = displs[size - 1] + recvcounts[size - 1]; @@ -173,8 +194,7 @@ void gatherv_dev(const T* sendbuf, return; } -} - +} // namespace Parallel_Common #endif #endif \ No newline at end of file diff --git a/source/module_base/parallel_global.cpp b/source/source_base/parallel_global.cpp similarity index 94% rename from source/module_base/parallel_global.cpp rename to source/source_base/parallel_global.cpp index ab76b0c872..edec689096 100644 --- a/source/module_base/parallel_global.cpp +++ b/source/source_base/parallel_global.cpp @@ -11,11 +11,11 @@ #include #endif -#include "module_base/global_function.h" -#include "module_base/parallel_common.h" -#include "module_base/parallel_reduce.h" #include "module_parameter/parameter.h" -// #include "module_base/tool_quit.h" +#include "source_base/global_function.h" +#include "source_base/parallel_common.h" +#include "source_base/parallel_reduce.h" +// #include "source_base/tool_quit.h" #include "source_main/version.h" #include @@ -88,11 +88,7 @@ void Parallel_Global::split_grid_world(const int diag_np, const int& nproc, cons } // changed from read_mpi_parameters in 2024-1018 -void Parallel_Global::read_pal_param(int argc, - char** argv, - int& NPROC, - int& NTHREAD_PER_PROC, - int& MY_RANK) +void Parallel_Global::read_pal_param(int argc, char** argv, int& NPROC, int& NTHREAD_PER_PROC, int& MY_RANK) { #ifdef __MPI #ifdef _OPENMP @@ -157,9 +153,10 @@ void Parallel_Global::read_pal_param(int argc, // the user may take their own risk by set the OMP_NUM_THREADS env var. if (std::getenv("OMP_NUM_THREADS") == nullptr) { - // usage of WARNING_QUIT need module_base/tool_quit.cpp + // usage of WARNING_QUIT need source_base/tool_quit.cpp // lead to undefined error in unit_test building - // ModuleBase::WARNING_QUIT( "Parallel_Global::read_pal_param","OMP_NUM_THREADS setting is invalid. Please set it to a proper value."); + // ModuleBase::WARNING_QUIT( "Parallel_Global::read_pal_param","OMP_NUM_THREADS setting is invalid. Please + // set it to a proper value."); std::cerr << "ERROR: OMP_NUM_THREADS setting is invalid. Please set it to a proper value." << std::endl; exit(1); } @@ -326,10 +323,10 @@ void Parallel_Global::divide_pools(const int& NPROC, // note: the order of k-point parallelization and band parallelization is important // The order will not change the behavior of KP_WORLD or BP_WORLD, and MY_POOL // and MY_BNDGROUP will be the same as well. - if(BNDPAR > 1 && NPROC %(BNDPAR * KPAR) != 0) + if (BNDPAR > 1 && NPROC % (BNDPAR * KPAR) != 0) { - std::cout << "Error: When BNDPAR = " << BNDPAR << " > 1, number of processes (" << NPROC << ") must be divisible by the number of groups (" - << BNDPAR * KPAR << ")." << std::endl; + std::cout << "Error: When BNDPAR = " << BNDPAR << " > 1, number of processes (" << NPROC + << ") must be divisible by the number of groups (" << BNDPAR * KPAR << ")." << std::endl; exit(1); } // k-point parallelization @@ -339,7 +336,7 @@ void Parallel_Global::divide_pools(const int& NPROC, // band parallelization MPICommGroup bndpar_group(kpar_group.group_comm); bndpar_group.divide_group_comm(BNDPAR, true); - + // Set parallel index. // In previous versions, the order of k-point parallelization and band parallelization is reversed. // So we need to keep some variables for compatibility. @@ -347,7 +344,7 @@ void Parallel_Global::divide_pools(const int& NPROC, RANK_IN_POOL = bndpar_group.rank_in_group; MY_POOL = kpar_group.my_group; MPI_Comm_dup(bndpar_group.group_comm, &POOL_WORLD); - if(kpar_group.inter_comm != MPI_COMM_NULL) + if (kpar_group.inter_comm != MPI_COMM_NULL) { MPI_Comm_dup(kpar_group.inter_comm, &KP_WORLD); } @@ -355,8 +352,8 @@ void Parallel_Global::divide_pools(const int& NPROC, { KP_WORLD = MPI_COMM_NULL; } - - if(BNDPAR > 1) + + if (BNDPAR > 1) { NPROC_IN_BNDGROUP = kpar_group.ngroups * bndpar_group.nprocs_in_group; RANK_IN_BPGROUP = kpar_group.my_group * bndpar_group.nprocs_in_group + bndpar_group.rank_in_group; @@ -405,7 +402,7 @@ void Parallel_Global::divide_mpi_groups(const int& procs, exit(1); } - if(rank < extra_procs * (procs_in_group + 1)) + if (rank < extra_procs * (procs_in_group + 1)) { // The first extra_procs groups have procs_in_group + 1 processes. procs_in_group++; diff --git a/source/module_base/parallel_global.h b/source/source_base/parallel_global.h similarity index 100% rename from source/module_base/parallel_global.h rename to source/source_base/parallel_global.h diff --git a/source/module_base/parallel_reduce.cpp b/source/source_base/parallel_reduce.cpp similarity index 100% rename from source/module_base/parallel_reduce.cpp rename to source/source_base/parallel_reduce.cpp diff --git a/source/module_base/parallel_reduce.h b/source/source_base/parallel_reduce.h similarity index 100% rename from source/module_base/parallel_reduce.h rename to source/source_base/parallel_reduce.h diff --git a/source/module_base/projgen.cpp b/source/source_base/projgen.cpp similarity index 98% rename from source/module_base/projgen.cpp rename to source/source_base/projgen.cpp index dc8d880019..aa3509a47f 100644 --- a/source/module_base/projgen.cpp +++ b/source/source_base/projgen.cpp @@ -1,15 +1,15 @@ #include "projgen.h" +#include "source_base/cubic_spline.h" +#include "source_base/math_integral.h" +#include "source_base/math_sphbes.h" + #include #include #include #include #include -#include "module_base/cubic_spline.h" -#include "module_base/math_integral.h" -#include "module_base/math_sphbes.h" - using namespace ModuleBase; void projgen(const int l, diff --git a/source/module_base/projgen.h b/source/source_base/projgen.h similarity index 100% rename from source/module_base/projgen.h rename to source/source_base/projgen.h diff --git a/source/module_base/random.h b/source/source_base/random.h similarity index 100% rename from source/module_base/random.h rename to source/source_base/random.h diff --git a/source/module_base/realarray.cpp b/source/source_base/realarray.cpp similarity index 100% rename from source/module_base/realarray.cpp rename to source/source_base/realarray.cpp diff --git a/source/module_base/realarray.h b/source/source_base/realarray.h similarity index 100% rename from source/module_base/realarray.h rename to source/source_base/realarray.h diff --git a/source/module_base/scalapack_connector.h b/source/source_base/scalapack_connector.h similarity index 100% rename from source/module_base/scalapack_connector.h rename to source/source_base/scalapack_connector.h diff --git a/source/module_base/sph_bessel_recursive-d1.cpp b/source/source_base/sph_bessel_recursive-d1.cpp similarity index 100% rename from source/module_base/sph_bessel_recursive-d1.cpp rename to source/source_base/sph_bessel_recursive-d1.cpp diff --git a/source/module_base/sph_bessel_recursive-d2.cpp b/source/source_base/sph_bessel_recursive-d2.cpp similarity index 100% rename from source/module_base/sph_bessel_recursive-d2.cpp rename to source/source_base/sph_bessel_recursive-d2.cpp diff --git a/source/module_base/sph_bessel_recursive.h b/source/source_base/sph_bessel_recursive.h similarity index 100% rename from source/module_base/sph_bessel_recursive.h rename to source/source_base/sph_bessel_recursive.h diff --git a/source/module_base/spherical_bessel_transformer.cpp b/source/source_base/spherical_bessel_transformer.cpp similarity index 67% rename from source/module_base/spherical_bessel_transformer.cpp rename to source/source_base/spherical_bessel_transformer.cpp index 3fa6cb2a32..093b3d051b 100644 --- a/source/module_base/spherical_bessel_transformer.cpp +++ b/source/source_base/spherical_bessel_transformer.cpp @@ -1,14 +1,14 @@ -#include "module_base/spherical_bessel_transformer.h" +#include "source_base/spherical_bessel_transformer.h" + +#include "source_base/math_integral.h" +#include "source_base/math_sphbes.h" -#include #include -#include -#include #include +#include #include - -#include "module_base/math_integral.h" -#include "module_base/math_sphbes.h" +#include +#include namespace ModuleBase { @@ -19,10 +19,12 @@ namespace ModuleBase class SphericalBesselTransformer::Impl { -public: - + public: Impl(const bool cache_enabled = false); - ~Impl() { _rfft_clear(); }; + ~Impl() + { + _rfft_clear(); + }; Impl(Impl const&) = delete; Impl(Impl&&) = delete; @@ -31,26 +33,22 @@ class SphericalBesselTransformer::Impl Impl& operator=(Impl&&) = delete; // see the interface class for details - void radrfft( - const int l, - const int ngrid, - const double cutoff, - const double* const in, - double* const out, - const int p = 0 - ); + void radrfft(const int l, + const int ngrid, + const double cutoff, + const double* const in, + double* const out, + const int p = 0); // see the interface class for details - void direct( - const int l, - const int ngrid_in, - const double* const grid_in, - const double* const in, - const int ngrid_out, - const double* const grid_out, - double* const out, - const int p = 0 - ); + void direct(const int l, + const int ngrid_in, + const double* const grid_in, + const double* const in, + const int ngrid_out, + const double* const grid_out, + double* const out, + const int p = 0); // total heap usage (in bytes) from the FFTW buffer and tabulated jl size_t heap_usage() const; @@ -58,9 +56,7 @@ class SphericalBesselTransformer::Impl // clear the FFTW plan & buffer as well as the tabulated jl void clear(); - -private: - + private: //***************************************************************** // FFT-based algorithm //***************************************************************** @@ -87,7 +83,6 @@ class SphericalBesselTransformer::Impl /// clear the FFTW plan and buffer void _rfft_clear(); - //***************************************************************** // numerical integration //***************************************************************** @@ -107,39 +102,33 @@ class SphericalBesselTransformer::Impl std::vector jl_; /// tabulate spherical Bessel function on the mesh grid - void _tabulate( - const int l, - const int ngrid_in, - const double* const grid_in, - const int ngrid_out, - const double* const grid_out - ); + void _tabulate(const int l, + const int ngrid_in, + const double* const grid_in, + const int ngrid_out, + const double* const grid_out); /// clear the tabulated jl void _table_clear(); }; // class SphericalBesselTransformer::Impl +SphericalBesselTransformer::Impl::Impl(const bool cache_enabled) + : // NOTE: For the current usage of this class, the performance gain + // by using FFTW_MEASURE instead of FFTW_ESTIMATE usually does not + // worth the extra overhead, and may cause a timeout of the integrated + // test. This might need more investigation and change in the future. + // fftw_plan_flag_(cache_enabled ? FFTW_MEASURE : FFTW_ESTIMATE), + fftw_plan_flag_(FFTW_ESTIMATE), cache_enabled_(cache_enabled) +{ +} -SphericalBesselTransformer::Impl::Impl(const bool cache_enabled): - // NOTE: For the current usage of this class, the performance gain - // by using FFTW_MEASURE instead of FFTW_ESTIMATE usually does not - // worth the extra overhead, and may cause a timeout of the integrated - // test. This might need more investigation and change in the future. - //fftw_plan_flag_(cache_enabled ? FFTW_MEASURE : FFTW_ESTIMATE), - fftw_plan_flag_(FFTW_ESTIMATE), - cache_enabled_(cache_enabled) -{} - - -void SphericalBesselTransformer::Impl::radrfft( - const int l, - const int ngrid, - const double cutoff, - const double* const in, - double* const out, - const int p -) +void SphericalBesselTransformer::Impl::radrfft(const int l, + const int ngrid, + const double cutoff, + const double* const in, + double* const out, + const int p) { /* * An l-th order spherical Bessel transform F(x) -> G(y) can be expressed @@ -201,8 +190,8 @@ void SphericalBesselTransformer::Impl::radrfft( // c(1,0) = 0 c(1,0) = 1 // c(1,1) = -1 c(1,1) = 0 // - std::vector> c((l+1) * (l+2) / 2); // cos->real; sin->imag - auto idx = [](int ll, int m) { return (ll+1)*ll/2 + m; }; + std::vector> c((l + 1) * (l + 2) / 2); // cos->real; sin->imag + auto idx = [](int ll, int m) { return (ll + 1) * ll / 2 + m; }; c[idx(0, 0)] = {0, 1}; if (l > 0) @@ -215,9 +204,9 @@ void SphericalBesselTransformer::Impl::radrfft( { for (int m = 0; m < ll; ++m) { - c[idx(ll,m)] = (2*ll-1.0) * c[idx(ll-1, m)] - (m >= 2 ? c[idx(ll-2, m-2)] : 0); + c[idx(ll, m)] = (2 * ll - 1.0) * c[idx(ll - 1, m)] - (m >= 2 ? c[idx(ll - 2, m - 2)] : 0); } - c[idx(ll,ll)] = - c[idx(ll-2, ll-2)]; + c[idx(ll, ll)] = -c[idx(ll - 2, ll - 2)]; } _rfft_prepare(2 * n); @@ -228,7 +217,7 @@ void SphericalBesselTransformer::Impl::radrfft( { // m even --> sin; f[2*n-i] = -f[i]; out += -imag(rfft(f)) / y^(l+1-m) // m odd --> cos; f[2*n-i] = +f[i]; out += +real(rfft(f)) / y^(l+1-m) - const double coef = reinterpret_cast(c[idx(l,m)])[is_imag]; + const double coef = reinterpret_cast(c[idx(l, m)])[is_imag]; f_[0] = f_[n] = 0.0; for (int i = 1; i != n; ++i) @@ -243,7 +232,7 @@ void SphericalBesselTransformer::Impl::radrfft( // out[0] is handled later by direct integration for (int j = 1; j <= n; ++j) { - tmp[j] = (tmp[j] + sign * f_[2*j + is_imag]) / (j * dy); + tmp[j] = (tmp[j] + sign * f_[2 * j + is_imag]) / (j * dy); } is_imag = !is_imag; @@ -256,23 +245,21 @@ void SphericalBesselTransformer::Impl::radrfft( { for (int i = 0; i <= n; ++i) { - tmp[0] += 2.0 * pref * in[i] * std::pow(i*dx, 2-p); // p <= 2 is required here + tmp[0] += 2.0 * pref * in[i] * std::pow(i * dx, 2 - p); // p <= 2 is required here } } // FFT-based method does not yield accurate results for small y at high l // use numerical integration in this case - const int n_direct = (l == 0) ? 0 : static_cast(ngrid * std::pow(1e-8, 1.0/l)); + const int n_direct = (l == 0) ? 0 : static_cast(ngrid * std::pow(1e-8, 1.0 / l)); if (n_direct > 0) { std::vector buffer(ngrid + n_direct); double* grid_in = buffer.data(); double* grid_out = grid_in + ngrid; - std::for_each(grid_in, grid_in + ngrid, - [&](double& x) { x = (&x - grid_in) * dx; }); - std::for_each(grid_out, grid_out + n_direct, - [&](double& y) { y = ((&y - grid_out) + 1) * dy; }); + std::for_each(grid_in, grid_in + ngrid, [&](double& x) { x = (&x - grid_in) * dx; }); + std::for_each(grid_out, grid_out + n_direct, [&](double& y) { y = ((&y - grid_out) + 1) * dy; }); direct(l, ngrid, grid_in, in, n_direct, grid_out, &tmp[1], p); } @@ -285,17 +272,14 @@ void SphericalBesselTransformer::Impl::radrfft( } } - -void SphericalBesselTransformer::Impl::direct( - const int l, - const int ngrid_in, - const double* const grid_in, - const double* const in, - const int ngrid_out, - const double* const grid_out, - double* const out, - const int p -) +void SphericalBesselTransformer::Impl::direct(const int l, + const int ngrid_in, + const double* const grid_in, + const double* const in, + const int ngrid_out, + const double* const grid_out, + double* const out, + const int p) { assert(p <= 2); assert(ngrid_in > 1 && ngrid_out > 0); @@ -305,14 +289,13 @@ void SphericalBesselTransformer::Impl::direct( std::vector buffer(3 * ngrid_in); double* rab = buffer.data(); - double* tmp = rab + ngrid_in; // integrand without the jl part + double* tmp = rab + ngrid_in; // integrand without the jl part double* integrand = tmp + ngrid_in; // integrand std::adjacent_difference(grid_in, grid_in + ngrid_in, rab); std::copy(in, in + ngrid_in, tmp); - std::for_each(tmp, tmp + ngrid_in, - [&](double& x) { x *= std::pow(grid_in[&x - tmp], 2 - p); }); + std::for_each(tmp, tmp + ngrid_in, [&](double& x) { x *= std::pow(grid_in[&x - tmp], 2 - p); }); // compute spherical Bessel function on the grid and store the results in jl_ // (will be cleared at the end of this function if cache is disabled) @@ -334,7 +317,6 @@ void SphericalBesselTransformer::Impl::direct( } } - void SphericalBesselTransformer::Impl::_rfft_prepare(const int n) { if (n != sz_planned_) @@ -343,7 +325,7 @@ void SphericalBesselTransformer::Impl::_rfft_prepare(const int n) { fftw_free(f_); } - f_ = fftw_alloc_real(sizeof(double) * 2 * (n/2 + 1)); + f_ = fftw_alloc_real(sizeof(double) * 2 * (n / 2 + 1)); // see FFTW documentation "one-dimensional DFTs of real data" if (rfft_plan_) @@ -357,20 +339,15 @@ void SphericalBesselTransformer::Impl::_rfft_prepare(const int n) } } - -void SphericalBesselTransformer::Impl::_tabulate( - const int l, - const int ngrid_in, - const double* const grid_in, - const int ngrid_out, - const double* const grid_out -) +void SphericalBesselTransformer::Impl::_tabulate(const int l, + const int ngrid_in, + const double* const grid_in, + const int ngrid_out, + const double* const grid_out) { - const bool is_cached = - cache_enabled_ && l == l_ - && ngrid_in <= grid_in_.size() && ngrid_out <= grid_out_.size() - && std::equal(grid_in, grid_in + ngrid_in, grid_in_.begin()) - && std::equal(grid_out, grid_out + ngrid_out, grid_out_.begin()); + const bool is_cached = cache_enabled_ && l == l_ && ngrid_in <= grid_in_.size() && ngrid_out <= grid_out_.size() + && std::equal(grid_in, grid_in + ngrid_in, grid_in_.begin()) + && std::equal(grid_out, grid_out + ngrid_out, grid_out_.begin()); if (is_cached) { @@ -388,7 +365,6 @@ void SphericalBesselTransformer::Impl::_tabulate( } } - void SphericalBesselTransformer::Impl::_rfft_clear() { if (rfft_plan_) @@ -406,7 +382,6 @@ void SphericalBesselTransformer::Impl::_rfft_clear() sz_planned_ = 0; } - void SphericalBesselTransformer::Impl::_table_clear() { std::vector().swap(grid_in_); @@ -414,67 +389,54 @@ void SphericalBesselTransformer::Impl::_table_clear() std::vector().swap(jl_); } - size_t SphericalBesselTransformer::Impl::heap_usage() const { - return (grid_in_.capacity() + grid_out_.capacity() + jl_.capacity() - + sz_planned_) * sizeof(double); + return (grid_in_.capacity() + grid_out_.capacity() + jl_.capacity() + sz_planned_) * sizeof(double); } - void SphericalBesselTransformer::Impl::clear() { _rfft_clear(); _table_clear(); } - //********************************************************************** // Interface //********************************************************************** -SphericalBesselTransformer::SphericalBesselTransformer(const bool cache_enabled) - : impl_(new Impl(cache_enabled)) -{} - - -void SphericalBesselTransformer::radrfft( - const int l, - const int ngrid, - const double cutoff, - const double* const in, - double* const out, - const int p -) const +SphericalBesselTransformer::SphericalBesselTransformer(const bool cache_enabled) : impl_(new Impl(cache_enabled)) { - impl_->radrfft(l, ngrid, cutoff, in, out, p); } +void SphericalBesselTransformer::radrfft(const int l, + const int ngrid, + const double cutoff, + const double* const in, + double* const out, + const int p) const +{ + impl_->radrfft(l, ngrid, cutoff, in, out, p); +} -void SphericalBesselTransformer::direct( - const int l, - const int ngrid_in, - const double* const grid_in, - const double* const in, - const int ngrid_out, - const double* const grid_out, - double* const out, - const int p -) const +void SphericalBesselTransformer::direct(const int l, + const int ngrid_in, + const double* const grid_in, + const double* const in, + const int ngrid_out, + const double* const grid_out, + double* const out, + const int p) const { impl_->direct(l, ngrid_in, grid_in, in, ngrid_out, grid_out, out, p); } - size_t SphericalBesselTransformer::heap_usage() const { return impl_->heap_usage(); } - void SphericalBesselTransformer::clear() { impl_->clear(); } - } // namespace ModuleBase diff --git a/source/module_base/spherical_bessel_transformer.h b/source/source_base/spherical_bessel_transformer.h similarity index 100% rename from source/module_base/spherical_bessel_transformer.h rename to source/source_base/spherical_bessel_transformer.h diff --git a/source/module_base/test/CMakeLists.txt b/source/source_base/test/CMakeLists.txt similarity index 100% rename from source/module_base/test/CMakeLists.txt rename to source/source_base/test/CMakeLists.txt diff --git a/source/source_base/test/abfs-vector3_order_test.cpp b/source/source_base/test/abfs-vector3_order_test.cpp new file mode 100644 index 0000000000..5a755a6616 --- /dev/null +++ b/source/source_base/test/abfs-vector3_order_test.cpp @@ -0,0 +1,28 @@ +#include "source_base/abfs-vector3_order.h" + +#include "module_ri/abfs.h" +#include "source_base/vector3.h" + +#include "gtest/gtest.h" + +/************************************************ + * unit test of functions in class Abfs::vector3_order + ***********************************************/ + +/** + * - Tested Function + * - Two constructor functions of Vector3_Order + * - overloaded operator of < + */ + +TEST(AbfsVector3Order, Vector3Order) +{ + ModuleBase::Vector3 vd31(10., 10., 10.); + Abfs::Vector3_Order vdo31(vd31); + Abfs::Vector3_Order vdo32(10.0, 10.0, 10.0); + EXPECT_FALSE(vdo31 < vdo32); + ModuleBase::Vector3 vi31(2, 2, 2); + Abfs::Vector3_Order vio31(vi31); + Abfs::Vector3_Order vio32(2, 2, 2); + EXPECT_FALSE(vio31 < vio32); +} diff --git a/source/module_base/test/assoc_laguerre_test.cpp b/source/source_base/test/assoc_laguerre_test.cpp similarity index 75% rename from source/module_base/test/assoc_laguerre_test.cpp rename to source/source_base/test/assoc_laguerre_test.cpp index 142a0a87fc..a4db35d17c 100644 --- a/source/module_base/test/assoc_laguerre_test.cpp +++ b/source/source_base/test/assoc_laguerre_test.cpp @@ -1,29 +1,30 @@ +#include "source_base/assoc_laguerre.h" + #include -#include -#include "module_base/assoc_laguerre.h" #include // use standard library version for reference value +#include /* Unittest for associated Laguerre polynomials */ class AssocLaguerreTest : public ::testing::Test { - protected: - AssocLaguerreTest() - { - } + protected: + AssocLaguerreTest() + { + } - ~AssocLaguerreTest() - { - } + ~AssocLaguerreTest() + { + } - void SetUp() - { - } + void SetUp() + { + } - void TearDown() - { - } + void TearDown() + { + } }; TEST_F(AssocLaguerreTest, LaguerreTest) @@ -34,67 +35,67 @@ TEST_F(AssocLaguerreTest, LaguerreTest) int n = 0; std::vector xs = {0.0, 1.0, 2.0, 3.0}; std::vector ref_ys; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { ref_ys.push_back(1.0); } - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.laguerre(n, xs[i]), ref_ys[i], 1e-6); } // 1-st order Laguerre polynomial n = 1; ref_ys = {1.0, 0.0, -1.0, -2.0}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.laguerre(n, xs[i]), ref_ys[i], 1e-6); } // 2-nd order Laguerre polynomial n = 2; ref_ys = {1.0, -0.5, -1.0, -0.5}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.laguerre(n, xs[i]), ref_ys[i], 1e-6); } // 3-rd order Laguerre polynomial n = 3; ref_ys = {1.0, -0.6666666666666666, -0.33333333333333337, 1.0}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.laguerre(n, xs[i]), ref_ys[i], 1e-6); } // 4-th order Laguerre polynomial n = 4; ref_ys = {1.0, -0.625, 0.33333333333333337, 1.375}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.laguerre(n, xs[i]), ref_ys[i], 1e-6); } // 5-th order Laguerre polynomial n = 5; ref_ys = {1.0, -0.4666666666666667, 0.7333333333333334, 0.8500000000000001}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.laguerre(n, xs[i]), ref_ys[i], 1e-6); } // 6-th order Laguerre polynomial n = 6; ref_ys = {1.0, -0.2569444444444444, 0.8222222222222224, -0.012499999999999956}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.laguerre(n, xs[i]), ref_ys[i], 1e-6); } // 7-th order Laguerre polynomial n = 7; ref_ys = {1.0, -0.04047619047619044, 0.6634920634920637, -0.7464285714285714}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.laguerre(n, xs[i]), ref_ys[i], 1e-6); } // 8-th order Laguerre polynomial n = 8; ref_ys = {1.0, 0.1539930555555556, 0.3587301587301589, -1.1087053571428571}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.laguerre(n, xs[i]), ref_ys[i], 1e-6); } @@ -110,7 +111,7 @@ TEST_F(AssocLaguerreTest, AssociateLaguerreTest) int k = 0; std::vector xs = {0.0, 1.0, 2.0, 3.0}; std::vector ref_ys = {1.0, 0.1539930555555556, 0.3587301587301589, -1.1087053571428571}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.associate_laguerre(n, xs[i], k), ref_ys[i], 1e-6); } @@ -119,7 +120,7 @@ TEST_F(AssocLaguerreTest, AssociateLaguerreTest) k = 1; xs = {0.0, 1.0, 2.0, 3.0}; ref_ys = {9.0, -1.4017609126984123, 1.5777777777777775, -0.14263392857142831}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.associate_laguerre(n, xs[i], k), ref_ys[i], 1e-6); } @@ -128,7 +129,7 @@ TEST_F(AssocLaguerreTest, AssociateLaguerreTest) k = 2; xs = {0.0, 1.0, 2.0, 3.0}; ref_ys = {45.0, -4.189459325396824, 0.7523809523809523, 3.1359374999999994}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.associate_laguerre(n, xs[i], k), ref_ys[i], 1e-6); } @@ -137,7 +138,7 @@ TEST_F(AssocLaguerreTest, AssociateLaguerreTest) k = 3; xs = {0.0, 1.0, 2.0, 3.0}; ref_ys = {165.0, 1.449231150793654, -6.384126984126984, 5.70200892857143}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.associate_laguerre(n, xs[i], k), ref_ys[i], 1e-6); } @@ -146,7 +147,7 @@ TEST_F(AssocLaguerreTest, AssociateLaguerreTest) k = 4; xs = {0.0, 1.0, 2.0, 3.0}; ref_ys = {495.0, 51.8809771825397, -20.098412698412695, -0.09441964285714727}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.associate_laguerre(n, xs[i], k), ref_ys[i], 1e-6); } @@ -155,7 +156,7 @@ TEST_F(AssocLaguerreTest, AssociateLaguerreTest) k = 5; xs = {0.0, 1.0, 2.0, 3.0}; ref_ys = {1287.0, 242.01411210317463, -21.990476190476176, -23.028348214285717}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.associate_laguerre(n, xs[i], k), ref_ys[i], 1e-6); } @@ -164,7 +165,7 @@ TEST_F(AssocLaguerreTest, AssociateLaguerreTest) k = 6; xs = {0.0, 1.0, 2.0, 3.0}; ref_ys = {3003.0, 777.6319692460318, 53.67301587301589, -60.999776785714275}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.associate_laguerre(n, xs[i], k), ref_ys[i], 1e-6); } @@ -173,7 +174,7 @@ TEST_F(AssocLaguerreTest, AssociateLaguerreTest) k = 7; xs = {0.0, 1.0, 2.0, 3.0}; ref_ys = {6435.0, 2055.2262152777776, 368.62539682539676, -75.53370535714284}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.associate_laguerre(n, xs[i], k), ref_ys[i], 1e-6); } @@ -182,7 +183,7 @@ TEST_F(AssocLaguerreTest, AssociateLaguerreTest) k = 8; xs = {0.0, 1.0, 2.0, 3.0}; ref_ys = {12870.0, 4777.330183531744, 1256.2666666666667, 53.21986607142856}; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.associate_laguerre(n, xs[i], k), ref_ys[i], 1e-6); } @@ -209,45 +210,45 @@ TEST_F(AssocLaguerreTest, FactorialTest) TEST_F(AssocLaguerreTest, ValueTest) { Assoc_Laguerre al; - //test n = 1, 2, ..., 4, from 1s to 4f + // test n = 1, 2, ..., 4, from 1s to 4f std::vector xs; // segment1: 0-0.25, 0.01 - for(double x = 0.0; x < 0.25; x += 0.01) + for (double x = 0.0; x < 0.25; x += 0.01) { xs.push_back(x); } // segment2: 0.25-1.0, 0.05 - for(double x = 0.25; x < 1.0; x += 0.05) + for (double x = 0.25; x < 1.0; x += 0.05) { xs.push_back(x); } // segment3: 1.0-2.0, 0.1 - for(double x = 1.0; x < 2.0; x += 0.1) + for (double x = 1.0; x < 2.0; x += 0.1) { xs.push_back(x); } // segment4: 2.0-5.0, 0.2 - for(double x = 2.0; x < 5.0; x += 0.2) + for (double x = 2.0; x < 5.0; x += 0.2) { xs.push_back(x); } // segment5: 5.0-10.0, 0.5 - for(double x = 5.0; x < 10.0; x += 0.5) + for (double x = 5.0; x < 10.0; x += 0.5) { xs.push_back(x); } int nmax = 4; - for(int n = 1; n < nmax; n++) + for (int n = 1; n < nmax; n++) { - for(int l = 0; l < n; l++) + for (int l = 0; l < n; l++) { std::vector ref_ys; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { - ref_ys.push_back(std::tr1::assoc_laguerre(n-l-1, 2*l+1, xs[i])); - //ref_ys.push_back(al.associate_laguerre(n-l-1, xs[i], 2*l+1)); + ref_ys.push_back(std::tr1::assoc_laguerre(n - l - 1, 2 * l + 1, xs[i])); + // ref_ys.push_back(al.associate_laguerre(n-l-1, xs[i], 2*l+1)); } - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(al.value(n, l, xs[i]), ref_ys[i], 1e-10); } @@ -258,22 +259,22 @@ TEST_F(AssocLaguerreTest, ValueTest) TEST_F(AssocLaguerreTest, GenerateVectorTest) { Assoc_Laguerre al; - //test n = 1, 2, ..., 4, from 1s to 4f + // test n = 1, 2, ..., 4, from 1s to 4f std::vector xs = {0.0, 1.0, 2.0, 3.0}; int nmax = 4; - for(int n = 1; n <= nmax; n++) + for (int n = 1; n <= nmax; n++) { - for(int l = 0; l < n; l++) + for (int l = 0; l < n; l++) { std::vector ref_ys; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { - ref_ys.push_back(al.associate_laguerre(n-l-1, xs[i], 2*l+1)); + ref_ys.push_back(al.associate_laguerre(n - l - 1, xs[i], 2 * l + 1)); } std::vector ys; ys.resize(xs.size()); al.generate(n, l, xs, ys); - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(ys[i], ref_ys[i], 1e-6); } @@ -284,21 +285,21 @@ TEST_F(AssocLaguerreTest, GenerateVectorTest) TEST_F(AssocLaguerreTest, GeneratePointerTest) { Assoc_Laguerre al; - //test n = 1, 2, ..., 4, from 1s to 4f + // test n = 1, 2, ..., 4, from 1s to 4f std::vector xs = {0.0, 1.0, 2.0, 3.0}; int nmax = 4; - for(int n = 1; n <= nmax; n++) + for (int n = 1; n <= nmax; n++) { - for(int l = 0; l < n; l++) + for (int l = 0; l < n; l++) { std::vector ref_ys; - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { - ref_ys.push_back(al.associate_laguerre(n-l-1, xs[i], 2*l+1)); + ref_ys.push_back(al.associate_laguerre(n - l - 1, xs[i], 2 * l + 1)); } double* ys = new double[xs.size()]; al.generate(n, l, xs.size(), xs.data(), ys); - for(int i = 0; i < xs.size(); i++) + for (int i = 0; i < xs.size(); i++) { EXPECT_NEAR(ys[i], ref_ys[i], 1e-6); } diff --git a/source/module_base/test/atom_in_test.cpp b/source/source_base/test/atom_in_test.cpp similarity index 100% rename from source/module_base/test/atom_in_test.cpp rename to source/source_base/test/atom_in_test.cpp diff --git a/source/module_base/test/blas_connector_test.cpp b/source/source_base/test/blas_connector_test.cpp similarity index 100% rename from source/module_base/test/blas_connector_test.cpp rename to source/source_base/test/blas_connector_test.cpp diff --git a/source/module_base/test/clebsch_gordan_coeff_test.cpp b/source/source_base/test/clebsch_gordan_coeff_test.cpp similarity index 100% rename from source/module_base/test/clebsch_gordan_coeff_test.cpp rename to source/source_base/test/clebsch_gordan_coeff_test.cpp diff --git a/source/module_base/test/complexarray_test.cpp b/source/source_base/test/complexarray_test.cpp similarity index 100% rename from source/module_base/test/complexarray_test.cpp rename to source/source_base/test/complexarray_test.cpp diff --git a/source/module_base/test/complexmatrix_test.cpp b/source/source_base/test/complexmatrix_test.cpp similarity index 100% rename from source/module_base/test/complexmatrix_test.cpp rename to source/source_base/test/complexmatrix_test.cpp diff --git a/source/module_base/test/container_operator_test.cpp b/source/source_base/test/container_operator_test.cpp similarity index 100% rename from source/module_base/test/container_operator_test.cpp rename to source/source_base/test/container_operator_test.cpp diff --git a/source/module_base/test/cubic_spline_test.cpp b/source/source_base/test/cubic_spline_test.cpp similarity index 64% rename from source/module_base/test/cubic_spline_test.cpp rename to source/source_base/test/cubic_spline_test.cpp index b28f53ce14..bd644c88f4 100644 --- a/source/module_base/test/cubic_spline_test.cpp +++ b/source/source_base/test/cubic_spline_test.cpp @@ -1,12 +1,11 @@ -#include "module_base/cubic_spline.h" +#include "source_base/cubic_spline.h" -#include +#include "gtest/gtest.h" #include +#include +#include #include #include -#include - -#include "gtest/gtest.h" using ModuleBase::CubicSpline; using BoundaryCondition = CubicSpline::BoundaryCondition; @@ -42,8 +41,7 @@ using BoundaryType = CubicSpline::BoundaryType; */ class CubicSplineTest : public ::testing::Test { -protected: - + protected: CubicSplineTest(); ~CubicSplineTest() = default; @@ -84,7 +82,6 @@ class CubicSplineTest : public ::testing::Test /// y/dy/d2y tolerance for cross-check const double tol_[3] = {1e-14, 1e-13, 1e-12}; - /** * @brief Sample functions & derivatives in error bound check. * @@ -99,77 +96,54 @@ class CubicSplineTest : public ::testing::Test std::vector>> f_; /// theoretical error bound for complete cubic spline - double error_bound( - int n, - const double* x, - const std::function& f, - int d = 0 - ) const; + double error_bound(int n, const double* x, const std::function& f, int d = 0) const; /// - void read( - const std::string& fname, - int& n, - double* x, - double* y, - BoundaryCondition& bc_start, - BoundaryCondition& bc_end, - int& n_interp, - double* x_interp, - double* y_interp, - double* dy_interp, - double* d2y_interp - ) const; + void read(const std::string& fname, + int& n, + double* x, + double* y, + BoundaryCondition& bc_start, + BoundaryCondition& bc_end, + int& n_interp, + double* x_interp, + double* y_interp, + double* dy_interp, + double* d2y_interp) const; }; +CubicSplineTest::CubicSplineTest() + : n_max_(1000), spline_(3 * n_max_), x_(spline_.data()), y_(x_ + n_max_), dy_(y_ + n_max_), n_interp_max_(1000), + interp_(7 * n_interp_max_), x_interp_(interp_.data()), y_interp_(x_interp_ + n_interp_max_), + dy_interp_(y_interp_ + n_interp_max_), d2y_interp_(dy_interp_ + n_interp_max_), + y_ref_(d2y_interp_ + n_interp_max_), dy_ref_(y_ref_ + n_interp_max_), + d2y_ref_(dy_ref_ + n_interp_max_), f_{ + { + [](double x) { return std::sin(x); }, + [](double x) { return std::cos(x); }, + [](double x) { return -std::sin(x); }, + [](double x) { return -std::cos(x); }, + [](double x) { return std::sin(x); }, + }, + { + [](double x) { return std::exp(-x); }, + [](double x) { return -std::exp(-x); }, + [](double x) { return std::exp(-x); }, + [](double x) { return -std::exp(-x); }, + [](double x) { return std::exp(-x); }, + }, + { + [](double x) { return std::log(x); }, + [](double x) { return 1.0 / x; }, + [](double x) { return -1.0 / (x * x); }, + [](double x) { return 2.0 / (x * x * x); }, + [](double x) { return -6.0 / (x * x * x * x); }, + }, + } +{ +} -CubicSplineTest::CubicSplineTest(): - n_max_(1000), - spline_(3 * n_max_), - x_(spline_.data()), - y_(x_ + n_max_), - dy_(y_ + n_max_), - n_interp_max_(1000), - interp_(7 * n_interp_max_), - x_interp_(interp_.data()), - y_interp_(x_interp_ + n_interp_max_), - dy_interp_(y_interp_ + n_interp_max_), - d2y_interp_(dy_interp_ + n_interp_max_), - y_ref_(d2y_interp_ + n_interp_max_), - dy_ref_(y_ref_ + n_interp_max_), - d2y_ref_(dy_ref_ + n_interp_max_), - f_{ - { - [](double x) { return std::sin(x); }, - [](double x) { return std::cos(x); }, - [](double x) { return -std::sin(x); }, - [](double x) { return -std::cos(x); }, - [](double x) { return std::sin(x); }, - }, - { - [](double x) { return std::exp(-x); }, - [](double x) { return -std::exp(-x); }, - [](double x) { return std::exp(-x); }, - [](double x) { return -std::exp(-x); }, - [](double x) { return std::exp(-x); }, - }, - { - [](double x) { return std::log(x); }, - [](double x) { return 1.0 / x; }, - [](double x) { return -1.0 / (x * x); }, - [](double x) { return 2.0 / (x * x * x); }, - [](double x) { return -6.0 / (x * x * x * x); }, - }, - } -{} - - -double CubicSplineTest::error_bound( - int n, - const double* x, - const std::function& d4f, - int d -) const +double CubicSplineTest::error_bound(int n, const double* x, const std::function& d4f, int d) const { std::vector buffer(n); @@ -183,31 +157,28 @@ double CubicSplineTest::error_bound( // See Carl de Boor, "A Practical Guide to Splines", Chapter V. switch (d) { - case 0: - return 5.0 / 384.0 * std::pow(max_dx, 4) * max_d4f; - case 1: - return 1.0 / 24.0 * std::pow(max_dx, 3) * max_d4f; - case 2: - return 3.0 / 8.0 * std::pow(max_dx, 2) * max_d4f; - default: - assert(false); // should not reach here + case 0: + return 5.0 / 384.0 * std::pow(max_dx, 4) * max_d4f; + case 1: + return 1.0 / 24.0 * std::pow(max_dx, 3) * max_d4f; + case 2: + return 3.0 / 8.0 * std::pow(max_dx, 2) * max_d4f; + default: + assert(false); // should not reach here } } - -void CubicSplineTest::read( - const std::string& fname, - int& n, - double* x, - double* y, - BoundaryCondition& bc_start, - BoundaryCondition& bc_end, - int& n_interp, - double* x_interp, - double* y_interp, - double* dy_interp, - double* d2y_interp -) const +void CubicSplineTest::read(const std::string& fname, + int& n, + double* x, + double* y, + BoundaryCondition& bc_start, + BoundaryCondition& bc_end, + int& n_interp, + double* x_interp, + double* y_interp, + double* dy_interp, + double* d2y_interp) const { std::ifstream ifs(fname); assert(ifs.is_open()); @@ -219,8 +190,7 @@ void CubicSplineTest::read( std::stringstream ss(line); ss >> bc1 >> bc2; - auto bc_parse = [](const std::string& bc) - { + auto bc_parse = [](const std::string& bc) { if (bc == "periodic") { return BoundaryCondition(BoundaryType::periodic); @@ -231,13 +201,11 @@ void CubicSplineTest::read( } if (bc.find("first_deriv") != std::string::npos) { - return BoundaryCondition(BoundaryType::first_deriv, - std::stod(bc.substr(12, std::string::npos))); + return BoundaryCondition(BoundaryType::first_deriv, std::stod(bc.substr(12, std::string::npos))); } if (bc.find("second_deriv") != std::string::npos) { - return BoundaryCondition(BoundaryType::second_deriv, - std::stod(bc.substr(13, std::string::npos))); + return BoundaryCondition(BoundaryType::second_deriv, std::stod(bc.substr(13, std::string::npos))); } else { @@ -253,14 +221,12 @@ void CubicSplineTest::read( { std::getline(ifs, line); std::stringstream ss(line); - data[i] = std::copy(std::istream_iterator(ss), - std::istream_iterator(), data[i]); + data[i] = std::copy(std::istream_iterator(ss), std::istream_iterator(), data[i]); } n = data[0] - x; n_interp = data[2] - x_interp; } - TEST_F(CubicSplineTest, MultiEval) { int n = 100; @@ -277,8 +243,7 @@ TEST_F(CubicSplineTest, MultiEval) for (size_t i = 0; i < f_.size(); ++i) { std::transform(x_, x_ + n, y_, [this, i](double x) { return f_[i][0](x); }); - cubspl.add(y_, {BoundaryType::first_deriv, f_[i][1](xmin)}, - {BoundaryType::first_deriv, f_[i][1](xmax)}); + cubspl.add(y_, {BoundaryType::first_deriv, f_[i][1](xmin)}, {BoundaryType::first_deriv, f_[i][1](xmax)}); } EXPECT_EQ(cubspl.n_spline(), f_.size()); @@ -293,8 +258,7 @@ TEST_F(CubicSplineTest, MultiEval) int n_interp = 1000; double dx_interp = (xmax - xmin) / (n_interp - 1); - std::for_each(x_interp_, x_interp_ + n_interp, - [&](double& x) { x = (&x - x_interp_) * dx_interp + xmin; }); + std::for_each(x_interp_, x_interp_ + n_interp, [&](double& x) { x = (&x - x_interp_) * dx_interp + xmin; }); for (int p = 0; p < n_interp; ++p) { @@ -314,7 +278,6 @@ TEST_F(CubicSplineTest, MultiEval) } } - TEST_F(CubicSplineTest, ErrorBound) { // Error bound formula used in this test correspond to the complete cubic @@ -333,8 +296,7 @@ TEST_F(CubicSplineTest, ErrorBound) // places to evaluate the interpolant int n_interp = 777; double dx_interp = (xmax - xmin) / (n_interp - 1); - std::for_each(x_interp_, x_interp_ + n_interp, - [&](double& x) { x = (&x - x_interp_) * dx_interp + xmin; }); + std::for_each(x_interp_, x_interp_ + n_interp, [&](double& x) { x = (&x - x_interp_) * dx_interp + xmin; }); // make sure x_interp is inside the range of x x_interp_[0] += tol_[0]; @@ -345,32 +307,29 @@ TEST_F(CubicSplineTest, ErrorBound) std::transform(x_, x_ + n, y_, f_[i][0]); // complete cubic spline (exact first_deriv boundary conditions at both ends) - CubicSpline::build( - n, x_, y_, - {BoundaryType::first_deriv, f_[i][1](x_[0])}, - {BoundaryType::first_deriv, f_[i][1](x_[n - 1])}, - dy_ - ); - - CubicSpline::eval( - n, x_, y_, dy_, - n_interp, x_interp_, y_interp_, dy_interp_, d2y_interp_ - ); + CubicSpline::build(n, + x_, + y_, + {BoundaryType::first_deriv, f_[i][1](x_[0])}, + {BoundaryType::first_deriv, f_[i][1](x_[n - 1])}, + dy_); + + CubicSpline::eval(n, x_, y_, dy_, n_interp, x_interp_, y_interp_, dy_interp_, d2y_interp_); double* diff[3] = {y_interp_, dy_interp_, d2y_interp_}; for (int d = 0; d < 3; ++d) { - std::transform(x_interp_, x_interp_ + n_interp, diff[d], diff[d], - [&](double x, double y) { return std::abs(y - f_[i][d](x)); }); + std::transform(x_interp_, x_interp_ + n_interp, diff[d], diff[d], [&](double x, double y) { + return std::abs(y - f_[i][d](x)); + }); double err_bound = error_bound(n, x_, f_[i][4], d); - EXPECT_TRUE(std::all_of(diff[d], diff[d] + n_interp, - [err_bound](double diff) { return diff < err_bound; })); + EXPECT_TRUE( + std::all_of(diff[d], diff[d] + n_interp, [err_bound](double diff) { return diff < err_bound; })); } } } - TEST_F(CubicSplineTest, Reserve) { int n_spline = 20; @@ -391,7 +350,6 @@ TEST_F(CubicSplineTest, Reserve) EXPECT_EQ(cubspl.heap_usage(), (1 + n_spline * 2) * n * sizeof(double)); } - TEST_F(CubicSplineTest, MinMax) { int n = 1000; @@ -410,10 +368,8 @@ TEST_F(CubicSplineTest, MinMax) cubspl = CubicSpline(m, x0, dx, y_); EXPECT_EQ(cubspl.xmin(), x0); EXPECT_EQ(cubspl.xmax(), x0 + (m - 1) * dx); - } - TEST_F(CubicSplineTest, CrossCheck) { std::vector fnames = { @@ -431,10 +387,9 @@ TEST_F(CubicSplineTest, CrossCheck) int n = 0, n_interp = 0; BoundaryCondition bc_start, bc_end; - for (const auto& fname : fnames) + for (const auto& fname: fnames) { - read(fname, n, x_, y_, bc_start, bc_end, - n_interp, x_interp_, y_ref_, dy_ref_, d2y_ref_); + read(fname, n, x_, y_, bc_start, bc_end, n_interp, x_interp_, y_ref_, dy_ref_, d2y_ref_); CubicSpline cubspl(n, x_, y_, bc_start, bc_end); cubspl.eval(n_interp, x_interp_, y_interp_, dy_interp_, d2y_interp_); @@ -443,17 +398,14 @@ TEST_F(CubicSplineTest, CrossCheck) for (int d = 0; d < 3; ++d) { std::transform(diff[d], diff[d] + n_interp, ref[d], diff[d], std::minus()); - EXPECT_TRUE(std::all_of(diff[d], diff[d] + n_interp, - [this, d](double diff) { return std::abs(diff) < tol_[d]; })); + EXPECT_TRUE( + std::all_of(diff[d], diff[d] + n_interp, [this, d](double diff) { return std::abs(diff) < tol_[d]; })); } } } - int main() { ::testing::InitGoogleTest(); return RUN_ALL_TESTS(); } - - diff --git a/source/module_base/test/data/bjo.bin b/source/source_base/test/data/bjo.bin similarity index 100% rename from source/module_base/test/data/bjo.bin rename to source/source_base/test/data/bjo.bin diff --git a/source/module_base/test/data/bjxo.bin b/source/source_base/test/data/bjxo.bin similarity index 100% rename from source/module_base/test/data/bjxo.bin rename to source/source_base/test/data/bjxo.bin diff --git a/source/module_base/test/data/cos_periodic.dat b/source/source_base/test/data/cos_periodic.dat similarity index 100% rename from source/module_base/test/data/cos_periodic.dat rename to source/source_base/test/data/cos_periodic.dat diff --git a/source/module_base/test/data/exp_first_deriv.dat b/source/source_base/test/data/exp_first_deriv.dat similarity index 100% rename from source/module_base/test/data/exp_first_deriv.dat rename to source/source_base/test/data/exp_first_deriv.dat diff --git a/source/module_base/test/data/gen_ref.py b/source/source_base/test/data/gen_ref.py similarity index 100% rename from source/module_base/test/data/gen_ref.py rename to source/source_base/test/data/gen_ref.py diff --git a/source/module_base/test/data/log_second_deriv.dat b/source/source_base/test/data/log_second_deriv.dat similarity index 100% rename from source/module_base/test/data/log_second_deriv.dat rename to source/source_base/test/data/log_second_deriv.dat diff --git a/source/module_base/test/data/sin_not_a_knot.dat b/source/source_base/test/data/sin_not_a_knot.dat similarity index 100% rename from source/module_base/test/data/sin_not_a_knot.dat rename to source/source_base/test/data/sin_not_a_knot.dat diff --git a/source/module_base/test/data/sqrt_mix_bc.dat b/source/source_base/test/data/sqrt_mix_bc.dat similarity index 100% rename from source/module_base/test/data/sqrt_mix_bc.dat rename to source/source_base/test/data/sqrt_mix_bc.dat diff --git a/source/module_base/test/data/three_points_not_a_knot.dat b/source/source_base/test/data/three_points_not_a_knot.dat similarity index 100% rename from source/module_base/test/data/three_points_not_a_knot.dat rename to source/source_base/test/data/three_points_not_a_knot.dat diff --git a/source/module_base/test/data/two_points_first_deriv.dat b/source/source_base/test/data/two_points_first_deriv.dat similarity index 100% rename from source/module_base/test/data/two_points_first_deriv.dat rename to source/source_base/test/data/two_points_first_deriv.dat diff --git a/source/module_base/test/data/two_points_periodic.dat b/source/source_base/test/data/two_points_periodic.dat similarity index 100% rename from source/module_base/test/data/two_points_periodic.dat rename to source/source_base/test/data/two_points_periodic.dat diff --git a/source/module_base/test/data/two_points_second_deriv.dat b/source/source_base/test/data/two_points_second_deriv.dat similarity index 100% rename from source/module_base/test/data/two_points_second_deriv.dat rename to source/source_base/test/data/two_points_second_deriv.dat diff --git a/source/module_base/test/element_basis_index_test.cpp b/source/source_base/test/element_basis_index_test.cpp similarity index 100% rename from source/module_base/test/element_basis_index_test.cpp rename to source/source_base/test/element_basis_index_test.cpp diff --git a/source/module_base/test/formatter_test.cpp b/source/source_base/test/formatter_test.cpp similarity index 95% rename from source/module_base/test/formatter_test.cpp rename to source/source_base/test/formatter_test.cpp index 20696e1357..cf699a99e0 100644 --- a/source/module_base/test/formatter_test.cpp +++ b/source/source_base/test/formatter_test.cpp @@ -1,9 +1,11 @@ -#include "module_base/formatter.h" -#include +#include "source_base/formatter.h" + #include +#include #include -TEST(FormatterTest, FmtCoreStaticFormat) { +TEST(FormatterTest, FmtCoreStaticFormat) +{ // const char* std::string result = FmtCore::format("Hello, %s!", "world"); // remove the last '\0' character @@ -63,7 +65,7 @@ TEST(FormatterTest, FmtPyStrFuncSplit) // default delimiter, whitespace std::vector result = FmtCore::split(fmt); std::vector ref = {"Hello,", "%s,", "%d,", "%f,", "%c!"}; - for(int i = 0; i < result.size(); i++) + for (int i = 0; i < result.size(); i++) { EXPECT_EQ(result[i], ref[i]); } @@ -71,21 +73,21 @@ TEST(FormatterTest, FmtPyStrFuncSplit) // other delimiter result = FmtCore::split(fmt, "%"); ref = {"Hello, ", "s, ", "d, ", "f, ", "c"}; - for(int i = 0; i < result.size(); i++) + for (int i = 0; i < result.size(); i++) { EXPECT_EQ(result[i], ref[i]); } // really string case, multiple chars result = FmtCore::split(fmt, ", %"); ref = {"Hello", "s", "d", "f", "c"}; - for(int i = 0; i < result.size(); i++) + for (int i = 0; i < result.size(); i++) { EXPECT_EQ(result[i], ref[i]); } // no such delimiter result = FmtCore::split(fmt, "z"); ref = {"Hello, %s, %d, %f, %c"}; - for(int i = 0; i < result.size(); i++) + for (int i = 0; i < result.size(); i++) { EXPECT_EQ(result[i], ref[i]); } @@ -93,13 +95,13 @@ TEST(FormatterTest, FmtPyStrFuncSplit) fmt = "Hello, %s, %d, %f, %c!"; result = FmtCore::split(fmt); ref = {"Hello,", "%s,", "%d,", "%f,", "%c!"}; - for(int i = 0; i < result.size(); i++) + for (int i = 0; i < result.size(); i++) { EXPECT_EQ(result[i], ref[i]); } result = FmtCore::split(fmt, " "); ref = {"Hello,", "", "", "", "", "", "", "%s,", "", "%d,", "", "", "", "%f,", "", "%c!"}; - for(int i = 0; i < result.size(); i++) + for (int i = 0; i < result.size(); i++) { EXPECT_EQ(result[i], ref[i]); } @@ -325,12 +327,7 @@ TEST(FormatterTest, FmtTableCustomArgsAlignFrame) std::vector col2 = {1, 2, 3, 4, 5}; std::vector col3 = {1.1, 2.2, 3.3, 4.4, 5.5}; - FmtTable table1(titles, - 5, - fmts, - 0, - {FmtTable::Align::LEFT, FmtTable::Align::LEFT}, - {'+', '?', '*', '.', '^'}); + FmtTable table1(titles, 5, fmts, 0, {FmtTable::Align::LEFT, FmtTable::Align::LEFT}, {'+', '?', '*', '.', '^'}); table1 << col1 << col2 << col3; std::string result = table1.str(); std::cout << result << std::endl; @@ -355,11 +352,11 @@ TEST(FormatterTest, FmtTableCustomArgsAlignFrameDelim) std::vector col1 = {"row1", "row2", "row3", "row4", "row5"}; std::vector col2 = {1, 2, 3, 4, 5}; std::vector col3 = {1.1, 2.2, 3.3, 4.4, 5.5}; - FmtTable table1(titles, - 5, - fmts, + FmtTable table1(titles, + 5, + fmts, 0, - {FmtTable::Align::LEFT, FmtTable::Align::LEFT}, + {FmtTable::Align::LEFT, FmtTable::Align::LEFT}, {'=', '/', '&', '#', '%'}, {'"', ']'}); table1 << col1 << col2 << col3; @@ -402,7 +399,8 @@ TEST(FormatterTest, FmtTableCustomIndent) EXPECT_EQ(result, ref); } -int main(int argc, char** argv) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); +int main(int argc, char** argv) +{ + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); } \ No newline at end of file diff --git a/source/source_base/test/global_file_test.cpp b/source/source_base/test/global_file_test.cpp new file mode 100644 index 0000000000..b85e190d27 --- /dev/null +++ b/source/source_base/test/global_file_test.cpp @@ -0,0 +1,160 @@ +#include "gmock/gmock.h" +#include "gtest/gtest.h" +#define private public +#include "module_parameter/parameter.h" +#undef private +#include "../global_file.h" +#include "../global_variable.h" + +#include +#include + +#ifdef __MPI +#include "mpi.h" +#endif + +/************************************************ + * unit test of functions in global_file.cpp + ***********************************************/ + +/** + * - Tested Function + * - mkdiratom + * - generate atom dir for each type of atom + * - openlog + * - Open the out file with the name *.log + */ + +class GlobalFile : public testing::Test +{ +}; + +TEST_F(GlobalFile, mkdirout) +{ + std::string output; + testing::internal::CaptureStdout(); + ModuleBase::Global_File::make_dir_out("Si", "m", false, 0, true, true); + output = testing::internal::GetCapturedStdout(); + EXPECT_THAT(output, testing::HasSubstr("MAKE THE DIR")); + GlobalV::ofs_warning.close(); + EXPECT_TRUE(GlobalV::ofs_running.is_open()); + GlobalV::ofs_running.close(); + std::string dd = "OUT.Si/running_m_1.log"; + remove(dd.c_str()); + + testing::internal::CaptureStdout(); + ModuleBase::Global_File::make_dir_out("Si", "md", false, 0, true, false); + output = testing::internal::GetCapturedStdout(); + EXPECT_THAT(output, testing::HasSubstr("MAKE THE STRU DIR")); + EXPECT_TRUE(GlobalV::ofs_running.is_open()); + GlobalV::ofs_running.close(); + GlobalV::ofs_warning.close(); + std::string bb = "OUT.Si/running_md.log"; + remove(bb.c_str()); + + testing::internal::CaptureStdout(); + ModuleBase::Global_File::make_dir_out("Si", "md", true, 0, true, true); + output = testing::internal::GetCapturedStdout(); + EXPECT_THAT(output, testing::HasSubstr("MAKE THE MATRIX DIR")); + EXPECT_TRUE(GlobalV::ofs_running.is_open()); + GlobalV::ofs_running.close(); + std::string cc = "OUT.Si/running_md_1.log"; + remove(cc.c_str()); + std::string aa = "OUT.Si/warning.log"; + remove(aa.c_str()); + rmdir(PARAM.sys.global_stru_dir.c_str()); + rmdir(PARAM.sys.global_matrix_dir.c_str()); + rmdir(PARAM.sys.global_out_dir.c_str()); +} + +TEST_F(GlobalFile, mkdiratom) +{ + PARAM.sys.global_out_dir = "./"; + ModuleBase::Global_File::make_dir_atom("Si"); + int a = access("./Si/", 0); + EXPECT_EQ(a, 0); + std::string ss = "./Si/"; + rmdir(ss.c_str()); +} + +TEST_F(GlobalFile, openlog) +{ + std::ofstream ofs; + ModuleBase::Global_File::open_log(ofs, "Si.log", "md", true); + EXPECT_TRUE(ofs.is_open()); + ofs.close(); + ModuleBase::Global_File::open_log(ofs, "Si.log", "md", false); + EXPECT_TRUE(ofs.is_open()); + ofs.close(); + std::string sss = "Si.log"; + remove(sss.c_str()); +} + +TEST_F(GlobalFile, closelog) +{ + std::ofstream ofs; + std::string sss = "Si.log"; + ofs.open(sss.c_str()); + ModuleBase::Global_File::close_log(ofs, sss); + EXPECT_FALSE(ofs.is_open()); + if (ofs.is_open()) + { + ofs.close(); + } + remove(sss.c_str()); +} + +TEST_F(GlobalFile, closealllog) +{ + /* + For module_io/input.cpp:line3578 close_log() is a void function, + All its contents is calling close_all_log() in source_base/global_file.cpp + For Input::close_log() what is left to test are the validities of parameters + GlobalV::MY_RANK and this->out_alllog. + */ + /* Test out_alllog == true case */ + std::string header = "running_"; + std::string tailCpuRank0 = "_cpu0.log"; + std::string tail = ".log"; + std::string f1 = header + PARAM.input.calculation + tailCpuRank0; + + if (GlobalV::ofs_running.is_open()) + { + GlobalV::ofs_running.close(); + } + if (GlobalV::ofs_warning.is_open()) + { + GlobalV::ofs_warning.close(); + } + GlobalV::ofs_running.open(f1.c_str()); + GlobalV::ofs_warning.open("warning.log"); + ModuleBase::Global_File::close_all_log(0, true, PARAM.input.calculation); + EXPECT_FALSE(GlobalV::ofs_running.is_open()); + if (GlobalV::ofs_running.is_open()) + { + GlobalV::ofs_running.close(); + } + EXPECT_FALSE(GlobalV::ofs_warning.is_open()); + if (GlobalV::ofs_warning.is_open()) + { + GlobalV::ofs_warning.close(); + } + remove(f1.c_str()); + // remove("warning.log"); + /* Test out_alllog == false case */ + GlobalV::ofs_running.open("running.log"); + GlobalV::ofs_warning.open("warning.log"); + ModuleBase::Global_File::close_all_log(0, false, PARAM.input.calculation); + EXPECT_FALSE(GlobalV::ofs_running.is_open()); + if (GlobalV::ofs_running.is_open()) + { + GlobalV::ofs_running.close(); + } + EXPECT_FALSE(GlobalV::ofs_warning.is_open()); + if (GlobalV::ofs_warning.is_open()) + { + GlobalV::ofs_warning.close(); + } + remove("running.log"); + remove("warning.log"); +} \ No newline at end of file diff --git a/source/module_base/test/global_function_test.cpp b/source/source_base/test/global_function_test.cpp similarity index 100% rename from source/module_base/test/global_function_test.cpp rename to source/source_base/test/global_function_test.cpp diff --git a/source/module_base/test/gram_schmidt_orth_test.cpp b/source/source_base/test/gram_schmidt_orth_test.cpp similarity index 100% rename from source/module_base/test/gram_schmidt_orth_test.cpp rename to source/source_base/test/gram_schmidt_orth_test.cpp diff --git a/source/module_base/test/intarray_test.cpp b/source/source_base/test/intarray_test.cpp similarity index 100% rename from source/module_base/test/intarray_test.cpp rename to source/source_base/test/intarray_test.cpp diff --git a/source/module_base/test/inverse_matrix_test.cpp b/source/source_base/test/inverse_matrix_test.cpp similarity index 100% rename from source/module_base/test/inverse_matrix_test.cpp rename to source/source_base/test/inverse_matrix_test.cpp diff --git a/source/module_base/test/lapack_connector_test.cpp b/source/source_base/test/lapack_connector_test.cpp similarity index 100% rename from source/module_base/test/lapack_connector_test.cpp rename to source/source_base/test/lapack_connector_test.cpp diff --git a/source/module_base/test/math_bspline_test.cpp b/source/source_base/test/math_bspline_test.cpp similarity index 100% rename from source/module_base/test/math_bspline_test.cpp rename to source/source_base/test/math_bspline_test.cpp diff --git a/source/module_base/test/math_chebyshev_test.cpp b/source/source_base/test/math_chebyshev_test.cpp similarity index 100% rename from source/module_base/test/math_chebyshev_test.cpp rename to source/source_base/test/math_chebyshev_test.cpp diff --git a/source/module_base/test/math_integral_test.cpp b/source/source_base/test/math_integral_test.cpp similarity index 51% rename from source/module_base/test/math_integral_test.cpp rename to source/source_base/test/math_integral_test.cpp index eded83f76d..860ac08472 100644 --- a/source/module_base/test/math_integral_test.cpp +++ b/source/source_base/test/math_integral_test.cpp @@ -1,19 +1,17 @@ -#include"../math_integral.h" -#include"gtest/gtest.h" +#include "../math_integral.h" -#include +#include "source_base/constants.h" + +#include "gtest/gtest.h" #include #include - -#include "module_base/constants.h" +#include #define doublethreshold 1e-12 - - /************************************************ -* unit test of class Integral -***********************************************/ + * unit test of class Integral + ***********************************************/ /** * Tested functions: @@ -27,19 +25,22 @@ */ // generate irregular grid with sinx -void sinspace(double start, double end, const int nums, double* xv, double* h){ +void sinspace(double start, double end, const int nums, double* xv, double* h) +{ double astart = asin(start); double aend = asin(end); double step = (aend - astart) / (nums - 1); - for(int i = 0; i < nums; ++i){ + for (int i = 0; i < nums; ++i) + { h[i] = sin(astart + i * step); } // calculate the difference xv[0] = start; - for(int i = 0; i< nums - 1; ++i){ - h[i] = h[i+1] - h[i]; - xv[i+1] = xv[i] + h[i]; + for (int i = 0; i < nums - 1; ++i) + { + h[i] = h[i + 1] - h[i]; + xv[i + 1] = xv[i] + h[i]; } } @@ -49,26 +50,25 @@ class SimpsonIntegralSinx : public testing::Test * test the integral of sinx between [0,PI], * devide to mesh-1 parts */ - - protected: - double* func; - double* rab; - int mesh = 10001; - double dr = M_PI/(mesh-1); - double asum; - double* asumlist; - double expectvalue = 2.0; + protected: + double* func; + double* rab; + int mesh = 10001; + double dr = M_PI / (mesh - 1); + double asum; + double* asumlist; + double expectvalue = 2.0; void SetUp() { - func = new double[mesh]; - rab = new double[mesh]; - asumlist = new double[mesh]; + func = new double[mesh]; + rab = new double[mesh]; + asumlist = new double[mesh]; - for (int i=0;i(&err), sizeof(double)); } @@ -351,50 +363,58 @@ TEST_F(SimpsonIntegralITF, SinGridOdd) { double start = -1.0, end = 1.0; const int ngrid_max = 10000; - double *xv = new double[ngrid_max]; - double *h = new double[ngrid_max]; - double *f = new double[ngrid_max]; + double* xv = new double[ngrid_max]; + double* h = new double[ngrid_max]; + double* f = new double[ngrid_max]; std::ofstream file_o("data/itf_sin_out.bin", std::ios::binary); double ref_val = std::atan(end) - std::atan(start); - for (int ngrid = 5; ngrid <= ngrid_max; ngrid += 2) { + for (int ngrid = 5; ngrid <= ngrid_max; ngrid += 2) + { sinspace(start, end, ngrid, xv, h); - for (int i = 0; i < ngrid; ++i) { + for (int i = 0; i < ngrid; ++i) + { f[i] = 1.0 / (1.0 + xv[i] * xv[i]); } - + // crude estimate for irregular-grid error bound double dx = h[ngrid / 2]; - double tol = (end-start) * std::pow(dx, 4); - EXPECT_NEAR(std::atan(end) - std::atan(start), ModuleBase::Integral::simpson(ngrid, f, h), std::max(tol, doublethreshold)); + double tol = (end - start) * std::pow(dx, 4); + EXPECT_NEAR(std::atan(end) - std::atan(start), + ModuleBase::Integral::simpson(ngrid, f, h), + std::max(tol, doublethreshold)); double err = std::abs(ModuleBase::Integral::simpson(ngrid, f, h) - ref_val) / std::abs(ref_val); file_o.write(reinterpret_cast(&err), sizeof(double)); } - + delete[] xv; delete[] h; delete[] f; file_o.close(); } -class SimpsonIntegralExp : public testing::Test{ - +class SimpsonIntegralExp : public testing::Test +{ }; TEST_F(SimpsonIntegralExp, UniformGridOdd) { double start = 0.0, end = 1.0; const int ngrid_max = 10000; - double *f = new double[ngrid_max]; + double* f = new double[ngrid_max]; std::ofstream file_o("data/exp_uni_out.bin", std::ios::binary); double ref_val = std::exp(end) - std::exp(start); - for (int ngrid = 5; ngrid <= ngrid_max; ngrid += 2) { + for (int ngrid = 5; ngrid <= ngrid_max; ngrid += 2) + { const double dx = (end - start) / (ngrid - 1); - for (int i = 0; i < ngrid; ++i) { + for (int i = 0; i < ngrid; ++i) + { double x = start + i * dx; f[i] = std::exp(x); } - double tol = (end-start) * std::exp(1) * std::pow(dx, 4) / 180; - EXPECT_NEAR(std::exp(end) - std::exp(start), ModuleBase::Integral::simpson(ngrid, f, dx), std::max(tol, doublethreshold)); + double tol = (end - start) * std::exp(1) * std::pow(dx, 4) / 180; + EXPECT_NEAR(std::exp(end) - std::exp(start), + ModuleBase::Integral::simpson(ngrid, f, dx), + std::max(tol, doublethreshold)); double err = std::abs(ModuleBase::Integral::simpson(ngrid, f, dx) - ref_val) / std::abs(ref_val); file_o.write(reinterpret_cast(&err), sizeof(double)); } @@ -406,25 +426,29 @@ TEST_F(SimpsonIntegralExp, SinGridOdd) { double start = 0.0, end = 1.0; const int ngrid_max = 10000; - double *xv = new double[ngrid_max]; - double *h = new double[ngrid_max]; - double *f = new double[ngrid_max]; + double* xv = new double[ngrid_max]; + double* h = new double[ngrid_max]; + double* f = new double[ngrid_max]; std::ofstream file_o("data/exp_sin_out.bin", std::ios::binary); double ref_val = std::exp(end) - std::exp(start); - // skip ngrid = 3 since the errors exceeds the threshold - for (int ngrid = 5; ngrid <= ngrid_max; ngrid += 2) { + // skip ngrid = 3 since the errors exceeds the threshold + for (int ngrid = 5; ngrid <= ngrid_max; ngrid += 2) + { sinspace(start, end, ngrid, xv, h); - for (int i = 0; i < ngrid; ++i) { + for (int i = 0; i < ngrid; ++i) + { f[i] = std::exp(xv[i]); } double dx = h[ngrid / 2]; - double tol = (end-start) * std::pow(dx, 4); - EXPECT_NEAR(std::exp(end) - std::exp(start), ModuleBase::Integral::simpson(ngrid, f, h), std::max(tol, doublethreshold)); + double tol = (end - start) * std::pow(dx, 4); + EXPECT_NEAR(std::exp(end) - std::exp(start), + ModuleBase::Integral::simpson(ngrid, f, h), + std::max(tol, doublethreshold)); double err = std::abs(ModuleBase::Integral::simpson(ngrid, f, h) - ref_val) / std::abs(ref_val); file_o.write(reinterpret_cast(&err), sizeof(double)); } - + delete[] xv; delete[] h; delete[] f; diff --git a/source/module_base/test/math_polyint_test.cpp b/source/source_base/test/math_polyint_test.cpp similarity index 100% rename from source/module_base/test/math_polyint_test.cpp rename to source/source_base/test/math_polyint_test.cpp diff --git a/source/module_base/test/math_sphbes_test.cpp b/source/source_base/test/math_sphbes_test.cpp similarity index 100% rename from source/module_base/test/math_sphbes_test.cpp rename to source/source_base/test/math_sphbes_test.cpp diff --git a/source/source_base/test/math_ylmreal_test.cpp b/source/source_base/test/math_ylmreal_test.cpp new file mode 100644 index 0000000000..fac2bfb694 --- /dev/null +++ b/source/source_base/test/math_ylmreal_test.cpp @@ -0,0 +1,840 @@ +#include "../math_ylmreal.h" + +#include "../matrix.h" +#include "../vector3.h" +#include "../ylm.h" +#include "module_psi/psi.h" +#include "source_base/array_pool.h" + +#include "gtest/gtest.h" +#include + +#define doublethreshold 1e-12 + +/************************************************ + * unit test of class YlmReal and Ylm + ***********************************************/ + +/** + * For lmax <5 cases, the reference values are calculated by the formula from + * https://formulasearchengine.com/wiki/Table_of_spherical_harmonics. Note, these + * formula lack of the Condon–Shortley phase (-1)^m, and in this unit test, item + * (-1)^m is multiplied. + * For lmax >=5, the reference values are calculated by YlmReal::Ylm_Real. + * + * - Tested functions of class YlmReal + * - Ylm_Real + * - Ylm_Real2 + * - rlylm + * - YlmRealTemplate (double and float) + * + * - Tested functions of class Ylm + * - get_ylm_real + * - sph_harm + * - rl_sph_harm + * - grad_rl_sph_harm + * - equality_value_test: test the eqaulity of Ylm function between rl_sph_harm (spherical input) and get_ylm_real + * (Cartesian input) + * - equality_gradient_test:test the eqaulity of Ylm gradient function between grad_rl_sph_harm(spherical input) + * and rlylm (Cartesian input) + * + */ + +class YlmRealTest : public testing::Test +{ + protected: + int lmax = 7; // maximum angular quantum number + int ng = 4; // test the 4 selected points on the sphere + int nylm = 64; // total Ylm number; + + ModuleBase::matrix ylm; // Ylm + ModuleBase::matrix* dylm; // dYlm/dx, dYlm/dy, dYlm/dz + ModuleBase::Vector3* g; // vectors of the 4 points + double* ref; // reference of Ylm + double* rly; // Ylm + double (*rlgy)[3]; // the gradient of Ylm + std::vector rlyvector; // Ylm + ModuleBase::Array_Pool rlgyvector; // the gradient of Ylm + + // Ylm function + inline double norm(const double& x, const double& y, const double& z) + { + return sqrt(x * x + y * y + z * z); + } + double y00(const double& x, const double& y, const double& z) + { + return 1.0 / 2.0 / sqrt(M_PI); + } + double y10(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return sqrt(3.0 / (4.0 * M_PI)) * z / r; + } + double y11(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return -1.0 * sqrt(3.0 / (4. * M_PI)) * x / r; + } + double y1m1(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return -1.0 * sqrt(3. / (4. * M_PI)) * y / r; + } // y1m1 means Y1,-1 + double y20(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return 1. / 4. * sqrt(5. / M_PI) * (-1. * x * x - y * y + 2. * z * z) / (r * r); + } + double y21(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return -1.0 * 1. / 2. * sqrt(15. / M_PI) * (z * x) / (r * r); + } + double y2m1(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return -1.0 * 1. / 2. * sqrt(15. / M_PI) * (z * y) / (r * r); + } + double y22(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return 1. / 4. * sqrt(15. / M_PI) * (x * x - y * y) / (r * r); + } + double y2m2(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return 1. / 2. * sqrt(15. / M_PI) * (x * y) / (r * r); + } + double y30(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return 1. / 4. * sqrt(7. / M_PI) * z * (2. * z * z - 3. * x * x - 3. * y * y) / (r * r * r); + } + double y31(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return -1.0 * 1. / 4. * sqrt(21. / 2. / M_PI) * x * (4. * z * z - x * x - y * y) / (r * r * r); + } + double y3m1(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return -1.0 * 1. / 4. * sqrt(21. / 2. / M_PI) * y * (4. * z * z - x * x - y * y) / (r * r * r); + } + double y32(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return 1. / 4. * sqrt(105. / M_PI) * (x * x - y * y) * z / (r * r * r); + } + double y3m2(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return 1. / 2. * sqrt(105. / M_PI) * x * y * z / (r * r * r); + } + double y33(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return -1.0 * 1. / 4. * sqrt(35. / 2. / M_PI) * x * (x * x - 3. * y * y) / (r * r * r); + } + double y3m3(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return -1.0 * 1. / 4. * sqrt(35. / 2. / M_PI) * y * (3. * x * x - y * y) / (r * r * r); + } + double y40(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return 3. / 16. * sqrt(1. / M_PI) * (35. * z * z * z * z - 30. * z * z * r * r + 3 * r * r * r * r) + / (r * r * r * r); + } + double y41(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return -1.0 * 3. / 4. * sqrt(5. / 2. / M_PI) * x * z * (7. * z * z - 3 * r * r) / (r * r * r * r); + } + double y4m1(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return -1.0 * 3. / 4. * sqrt(5. / 2. / M_PI) * y * z * (7. * z * z - 3. * r * r) / (r * r * r * r); + } + double y42(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return 3. / 8. * sqrt(5. / M_PI) * (x * x - y * y) * (7. * z * z - r * r) / (r * r * r * r); + } + double y4m2(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return 3. / 4. * sqrt(5. / M_PI) * x * y * (7. * z * z - r * r) / (r * r * r * r); + } + double y43(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return -1.0 * 3. / 4. * sqrt(35. / 2. / M_PI) * x * z * (x * x - 3. * y * y) / (r * r * r * r); + } + double y4m3(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return -1.0 * 3. / 4. * sqrt(35. / 2. / M_PI) * y * z * (3. * x * x - y * y) / (r * r * r * r); + } + double y44(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return 3. / 16. * sqrt(35. / M_PI) * (x * x * (x * x - 3. * y * y) - y * y * (3. * x * x - y * y)) + / (r * r * r * r); + } + double y4m4(const double& x, const double& y, const double& z) + { + double r = norm(x, y, z); + return 3. / 4. * sqrt(35. / M_PI) * x * y * (x * x - y * y) / (r * r * r * r); + } + + // the reference values are calculated by ModuleBase::Ylm::grad_rl_sph_harm + // 1st dimension: example, 2nd dimension: Ylm, 3rd dimension: dx/dy/dz + double rlgyref[4][64][3] = {{{0.00000e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 4.88603e-01}, + {-4.88603e-01, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -4.88603e-01, 0.00000e+00}, + {-6.30783e-01, 0.00000e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, -1.09255e+00}, + {0.00000e+00, -0.00000e+00, 0.00000e+00}, {1.09255e+00, 0.00000e+00, 0.00000e+00}, + {-0.00000e+00, 1.09255e+00, -0.00000e+00}, {-0.00000e+00, 0.00000e+00, -1.11953e+00}, + {1.37114e+00, 0.00000e+00, -0.00000e+00}, {0.00000e+00, 4.57046e-01, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 1.44531e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, + {-1.77013e+00, 0.00000e+00, -0.00000e+00}, {0.00000e+00, -1.77013e+00, 0.00000e+00}, + {1.26943e+00, 0.00000e+00, -0.00000e+00}, {0.00000e+00, 0.00000e+00, 2.00714e+00}, + {0.00000e+00, 0.00000e+00, 0.00000e+00}, {-1.89235e+00, 0.00000e+00, 0.00000e+00}, + {-0.00000e+00, -9.46175e-01, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, -1.77013e+00}, + {0.00000e+00, -0.00000e+00, 0.00000e+00}, {2.50334e+00, 0.00000e+00, 0.00000e+00}, + {-0.00000e+00, 2.50334e+00, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 1.75425e+00}, + {-2.26473e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -4.52947e-01, 0.00000e+00}, + {-0.00000e+00, 0.00000e+00, -2.39677e+00}, {-0.00000e+00, -0.00000e+00, 0.00000e+00}, + {2.44619e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 1.46771e+00, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 2.07566e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, + {-3.28191e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -3.28191e+00, 0.00000e+00}, + {-1.90708e+00, 0.00000e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, -2.91311e+00}, + {0.00000e+00, -0.00000e+00, 0.00000e+00}, {2.76362e+00, 0.00000e+00, -0.00000e+00}, + {-0.00000e+00, 9.21205e-01, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 2.76362e+00}, + {0.00000e+00, 0.00000e+00, 0.00000e+00}, {-3.02739e+00, 0.00000e+00, 0.00000e+00}, + {-0.00000e+00, -2.01826e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, -2.36662e+00}, + {0.00000e+00, -0.00000e+00, 0.00000e+00}, {4.09910e+00, 0.00000e+00, 0.00000e+00}, + {-0.00000e+00, 4.09910e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, -2.38995e+00}, + {3.16161e+00, 0.00000e+00, -0.00000e+00}, {0.00000e+00, 4.51658e-01, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 3.31900e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, + {-3.28564e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -1.40813e+00, 0.00000e+00}, + {-0.00000e+00, 0.00000e+00, -3.11349e+00}, {-0.00000e+00, -0.00000e+00, 0.00000e+00}, + {3.63241e+00, 0.00000e+00, -0.00000e+00}, {0.00000e+00, 2.59458e+00, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 2.64596e+00}, {0.00000e+00, 0.00000e+00, 0.00000e+00}, + {-4.95014e+00, 0.00000e+00, -0.00000e+00}, {0.00000e+00, -4.95014e+00, 0.00000e+00}}, + {{0.00000e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 4.88603e-01}, + {-4.88603e-01, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -4.88603e-01, 0.00000e+00}, + {0.00000e+00, -6.30783e-01, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, + {0.00000e+00, -0.00000e+00, -1.09255e+00}, {0.00000e+00, -1.09255e+00, 0.00000e+00}, + {1.09255e+00, 0.00000e+00, -0.00000e+00}, {0.00000e+00, -0.00000e+00, -1.11953e+00}, + {4.57046e-01, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 1.37114e+00, -0.00000e+00}, + {0.00000e+00, -0.00000e+00, -1.44531e+00}, {0.00000e+00, 0.00000e+00, 0.00000e+00}, + {1.77013e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 1.77013e+00, 0.00000e+00}, + {0.00000e+00, 1.26943e+00, -0.00000e+00}, {0.00000e+00, 0.00000e+00, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 2.00714e+00}, {0.00000e+00, 1.89235e+00, -0.00000e+00}, + {-9.46175e-01, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 1.77013e+00}, {0.00000e+00, 2.50334e+00, -0.00000e+00}, + {-2.50334e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 1.75425e+00}, + {-4.52947e-01, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -2.26473e+00, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 2.39677e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, + {-1.46771e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -2.44619e+00, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 2.07566e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, + {-3.28191e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -3.28191e+00, 0.00000e+00}, + {0.00000e+00, -1.90708e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, + {0.00000e+00, -0.00000e+00, -2.91311e+00}, {0.00000e+00, -2.76362e+00, 0.00000e+00}, + {9.21205e-01, 0.00000e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, + {0.00000e+00, -0.00000e+00, -2.76362e+00}, {0.00000e+00, -3.02739e+00, 0.00000e+00}, + {2.01826e+00, 0.00000e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, + {0.00000e+00, -0.00000e+00, -2.36662e+00}, {0.00000e+00, -4.09910e+00, 0.00000e+00}, + {4.09910e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -0.00000e+00, -2.38995e+00}, + {4.51658e-01, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 3.16161e+00, -0.00000e+00}, + {0.00000e+00, -0.00000e+00, -3.31900e+00}, {0.00000e+00, 0.00000e+00, 0.00000e+00}, + {1.40813e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 3.28564e+00, -0.00000e+00}, + {0.00000e+00, -0.00000e+00, -3.11349e+00}, {0.00000e+00, 0.00000e+00, 0.00000e+00}, + {2.59458e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 3.63241e+00, -0.00000e+00}, + {0.00000e+00, 0.00000e+00, -2.64596e+00}, {0.00000e+00, 0.00000e+00, 0.00000e+00}, + {4.95014e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 4.95014e+00, -0.00000e+00}}, + {{0.00000e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 4.88603e-01}, + {-4.88603e-01, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -4.88603e-01, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 1.26157e+00}, {-1.09255e+00, 0.00000e+00, 0.00000e+00}, + {0.00000e+00, -1.09255e+00, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 2.22045e-16}, + {-0.00000e+00, 0.00000e+00, -0.00000e+00}, {0.00000e+00, 0.00000e+00, 2.23906e+00}, + {-1.82818e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -1.82818e+00, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 8.81212e-16}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, + {-1.84324e-16, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 5.55112e-17, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 3.38514e+00}, {-2.67619e+00, 0.00000e+00, 0.00000e+00}, + {0.00000e+00, -2.67619e+00, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 2.30756e-15}, + {-0.00000e+00, 0.00000e+00, 0.00000e+00}, {-5.52973e-16, 0.00000e+00, 0.00000e+00}, + {0.00000e+00, 1.66533e-16, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 0.00000e+00}, + {-0.00000e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 4.67801e+00}, + {-3.62357e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -3.62357e+00, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 4.87108e-15}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, + {-1.22267e-15, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 3.68219e-16, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, + {4.93038e-32, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -6.16298e-33, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 6.10264e+00}, {-4.66097e+00, 0.00000e+00, 0.00000e+00}, + {0.00000e+00, -4.66097e+00, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 8.98664e-15}, + {-0.00000e+00, 0.00000e+00, 0.00000e+00}, {-2.30221e-15, 0.00000e+00, 0.00000e+00}, + {0.00000e+00, 6.93334e-16, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 0.00000e+00}, + {-0.00000e+00, 0.00000e+00, 0.00000e+00}, {1.77767e-31, 0.00000e+00, 0.00000e+00}, + {0.00000e+00, -2.22209e-32, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 0.00000e+00}, + {-0.00000e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 7.64784e+00}, + {-5.78122e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -5.78122e+00, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 1.51096e-14}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, + {-3.91011e-15, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 1.17757e-15, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 0.00000e+00}, {-0.00000e+00, 0.00000e+00, 0.00000e+00}, + {4.67737e-31, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -5.84671e-32, 0.00000e+00}, + {0.00000e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 0.00000e+00}, + {1.13319e-47, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -1.41649e-48, 0.00000e+00}}, + {{0.00000e+00, 0.00000e+00, 0.00000e+00}, {0.00000e+00, 0.00000e+00, 4.88603e-01}, + {-4.88603e-01, 0.00000e+00, 0.00000e+00}, {0.00000e+00, -4.88603e-01, 0.00000e+00}, + {3.64183e-01, 3.64183e-01, -7.28366e-01}, {6.30783e-01, -0.00000e+00, 6.30783e-01}, + {-0.00000e+00, 6.30783e-01, 6.30783e-01}, {-6.30783e-01, 6.30783e-01, -1.66533e-16}, + {-6.30783e-01, -6.30783e-01, 0.00000e+00}, {-7.46353e-01, -7.46353e-01, 0.00000e+00}, + {0.00000e+00, 3.04697e-01, -1.21879e+00}, {3.04697e-01, 0.00000e+00, -1.21879e+00}, + {9.63537e-01, -9.63537e-01, 4.01253e-16}, {9.63537e-01, 9.63537e-01, 9.63537e-01}, + {-4.44089e-16, 1.18009e+00, -2.22045e-16}, {-1.18009e+00, -1.11022e-16, 0.00000e+00}, + {4.88603e-01, 4.88603e-01, 1.30294e+00}, {-1.03006e+00, -7.72548e-01, 7.72548e-01}, + {-7.72548e-01, -1.03006e+00, 7.72548e-01}, {-7.28366e-01, 7.28366e-01, -5.25363e-16}, + {-3.64183e-01, -3.64183e-01, -2.18510e+00}, {7.69185e-16, -2.04397e+00, -6.81324e-01}, + {2.04397e+00, 1.92296e-16, 6.81324e-01}, {9.63537e-01, 9.63537e-01, -1.44756e-16}, + {-9.63537e-01, 9.63537e-01, -5.55112e-17}, {5.19779e-01, 5.19779e-01, -1.81923e+00}, + {1.40917e+00, 8.05238e-01, 8.05238e-01}, {8.05238e-01, 1.40917e+00, 8.05238e-01}, + {0.00000e+00, -4.44089e-16, 3.24739e-16}, {-1.06523e+00, -1.06523e+00, 2.13046e+00}, + {-2.17439e-01, 1.73951e+00, 1.73951e+00}, {-1.73951e+00, 2.17439e-01, -1.73951e+00}, + {-1.84503e+00, -1.84503e+00, -9.22517e-01}, {1.84503e+00, -1.84503e+00, 6.58625e-16}, + {1.45863e+00, 1.11022e-15, 0.00000e+00}, {-8.88178e-16, 1.45863e+00, 0.00000e+00}, + {-1.46807e+00, -1.46807e+00, 5.87227e-01}, {-4.48502e-01, -3.36617e-16, -2.24251e+00}, + {-3.36617e-16, -4.48502e-01, -2.24251e+00}, {7.09144e-01, -7.09144e-01, 1.87222e-16}, + {2.12743e+00, 2.12743e+00, -9.38779e-16}, {7.09144e-01, -5.11006e-16, -2.12743e+00}, + {1.02201e-15, -7.09144e-01, 2.12743e+00}, {1.81260e+00, 1.81260e+00, 2.58943e+00}, + {-2.07154e+00, 2.07154e+00, -1.66969e-15}, {-3.03637e+00, -2.31111e-15, -6.07275e-01}, + {1.84889e-15, -3.03637e+00, -6.07275e-01}, {1.05183e+00, -1.05183e+00, 5.77778e-17}, + {1.05183e+00, 1.05183e+00, 4.03986e-17}, {1.27464e+00, 1.27464e+00, 1.69952e+00}, + {-1.28472e+00, -1.20442e+00, 1.92707e+00}, {-1.20442e+00, -1.28472e+00, 1.92707e+00}, + {-8.52285e-01, 8.52285e-01, -6.74704e-16}, {-1.50789e+00, -1.50789e+00, -2.95022e+00}, + {-1.11260e+00, -2.08612e+00, 9.27164e-01}, {2.08612e+00, 1.11260e+00, -9.27164e-01}, + {-3.07506e-01, -3.07506e-01, -3.69007e+00}, {1.23002e+00, -1.23002e+00, 2.28018e-15}, + {3.69007e+00, -1.53753e-01, 1.84503e+00}, {-1.53753e-01, 3.69007e+00, 1.84503e+00}, + {-2.35197e+00, 2.35197e+00, -8.00513e-16}, {-2.35197e+00, -2.35197e+00, -7.83988e-01}, + {1.37903e-15, -1.46671e+00, 9.77875e-17}, {1.46671e+00, 1.14919e-15, 1.34475e-16}}}; + + void SetUp() + { + ylm.create(nylm, ng); + dylm = new ModuleBase::matrix[3]; + for (int i = 0; i < 3; ++i) + dylm[i].create(nylm, ng); + g = new ModuleBase::Vector3[ng]; + g[0].set(1.0, 0.0, 0.0); + g[1].set(0.0, 1.0, 0.0); + g[2].set(0.0, 0.0, 1.0); + g[3].set(-1.0, -1.0, -1.0); + + rly = new double[nylm]; + rlyvector.resize(nylm); + rlgy = new double[nylm][3]; + rlgyvector = ModuleBase::Array_Pool(nylm, 3); + ref = new double[64 * 4]{y00(g[0].x, g[0].y, g[0].z), + y00(g[1].x, g[1].y, g[1].z), + y00(g[2].x, g[2].y, g[2].z), + y00(g[3].x, g[3].y, g[3].z), + y10(g[0].x, g[0].y, g[0].z), + y10(g[1].x, g[1].y, g[1].z), + y10(g[2].x, g[2].y, g[2].z), + y10(g[3].x, g[3].y, g[3].z), + y11(g[0].x, g[0].y, g[0].z), + y11(g[1].x, g[1].y, g[1].z), + y11(g[2].x, g[2].y, g[2].z), + y11(g[3].x, g[3].y, g[3].z), + y1m1(g[0].x, g[0].y, g[0].z), + y1m1(g[1].x, g[1].y, g[1].z), + y1m1(g[2].x, g[2].y, g[2].z), + y1m1(g[3].x, g[3].y, g[3].z), + y20(g[0].x, g[0].y, g[0].z), + y20(g[1].x, g[1].y, g[1].z), + y20(g[2].x, g[2].y, g[2].z), + y20(g[3].x, g[3].y, g[3].z), + y21(g[0].x, g[0].y, g[0].z), + y21(g[1].x, g[1].y, g[1].z), + y21(g[2].x, g[2].y, g[2].z), + y21(g[3].x, g[3].y, g[3].z), + y2m1(g[0].x, g[0].y, g[0].z), + y2m1(g[1].x, g[1].y, g[1].z), + y2m1(g[2].x, g[2].y, g[2].z), + y2m1(g[3].x, g[3].y, g[3].z), + y22(g[0].x, g[0].y, g[0].z), + y22(g[1].x, g[1].y, g[1].z), + y22(g[2].x, g[2].y, g[2].z), + y22(g[3].x, g[3].y, g[3].z), + y2m2(g[0].x, g[0].y, g[0].z), + y2m2(g[1].x, g[1].y, g[1].z), + y2m2(g[2].x, g[2].y, g[2].z), + y2m2(g[3].x, g[3].y, g[3].z), + y30(g[0].x, g[0].y, g[0].z), + y30(g[1].x, g[1].y, g[1].z), + y30(g[2].x, g[2].y, g[2].z), + y30(g[3].x, g[3].y, g[3].z), + y31(g[0].x, g[0].y, g[0].z), + y31(g[1].x, g[1].y, g[1].z), + y31(g[2].x, g[2].y, g[2].z), + y31(g[3].x, g[3].y, g[3].z), + y3m1(g[0].x, g[0].y, g[0].z), + y3m1(g[1].x, g[1].y, g[1].z), + y3m1(g[2].x, g[2].y, g[2].z), + y3m1(g[3].x, g[3].y, g[3].z), + y32(g[0].x, g[0].y, g[0].z), + y32(g[1].x, g[1].y, g[1].z), + y32(g[2].x, g[2].y, g[2].z), + y32(g[3].x, g[3].y, g[3].z), + y3m2(g[0].x, g[0].y, g[0].z), + y3m2(g[1].x, g[1].y, g[1].z), + y3m2(g[2].x, g[2].y, g[2].z), + y3m2(g[3].x, g[3].y, g[3].z), + y33(g[0].x, g[0].y, g[0].z), + y33(g[1].x, g[1].y, g[1].z), + y33(g[2].x, g[2].y, g[2].z), + y33(g[3].x, g[3].y, g[3].z), + y3m3(g[0].x, g[0].y, g[0].z), + y3m3(g[1].x, g[1].y, g[1].z), + y3m3(g[2].x, g[2].y, g[2].z), + y3m3(g[3].x, g[3].y, g[3].z), + y40(g[0].x, g[0].y, g[0].z), + y40(g[1].x, g[1].y, g[1].z), + y40(g[2].x, g[2].y, g[2].z), + y40(g[3].x, g[3].y, g[3].z), + y41(g[0].x, g[0].y, g[0].z), + y41(g[1].x, g[1].y, g[1].z), + y41(g[2].x, g[2].y, g[2].z), + y41(g[3].x, g[3].y, g[3].z), + y4m1(g[0].x, g[0].y, g[0].z), + y4m1(g[1].x, g[1].y, g[1].z), + y4m1(g[2].x, g[2].y, g[2].z), + y4m1(g[3].x, g[3].y, g[3].z), + y42(g[0].x, g[0].y, g[0].z), + y42(g[1].x, g[1].y, g[1].z), + y42(g[2].x, g[2].y, g[2].z), + y42(g[3].x, g[3].y, g[3].z), + y4m2(g[0].x, g[0].y, g[0].z), + y4m2(g[1].x, g[1].y, g[1].z), + y4m2(g[2].x, g[2].y, g[2].z), + y4m2(g[3].x, g[3].y, g[3].z), + y43(g[0].x, g[0].y, g[0].z), + y43(g[1].x, g[1].y, g[1].z), + y43(g[2].x, g[2].y, g[2].z), + y43(g[3].x, g[3].y, g[3].z), + y4m3(g[0].x, g[0].y, g[0].z), + y4m3(g[1].x, g[1].y, g[1].z), + y4m3(g[2].x, g[2].y, g[2].z), + y4m3(g[3].x, g[3].y, g[3].z), + y44(g[0].x, g[0].y, g[0].z), + y44(g[1].x, g[1].y, g[1].z), + y44(g[2].x, g[2].y, g[2].z), + y44(g[3].x, g[3].y, g[3].z), + y4m4(g[0].x, g[0].y, g[0].z), + y4m4(g[1].x, g[1].y, g[1].z), + y4m4(g[2].x, g[2].y, g[2].z), + y4m4(g[3].x, g[3].y, g[3].z), + 0.000000000000000, + 0.000000000000000, + 0.935602579627389, + 0.090028400200397, + -0.452946651195697, + -0.000000000000000, + -0.000000000000000, + -0.348678494661834, + -0.000000000000000, + -0.452946651195697, + -0.000000000000000, + -0.348678494661834, + -0.000000000000000, + 0.000000000000000, + 0.000000000000000, + -0.000000000000000, + -0.000000000000000, + -0.000000000000000, + 0.000000000000000, + -0.000000000000000, + 0.489238299435250, + 0.000000000000000, + -0.000000000000000, + -0.376615818502422, + 0.000000000000000, + -0.489238299435250, + -0.000000000000000, + 0.376615818502422, + 0.000000000000000, + 0.000000000000000, + 0.000000000000000, + 0.532615198330370, + 0.000000000000000, + 0.000000000000000, + 0.000000000000000, + -0.000000000000000, + -0.656382056840170, + -0.000000000000000, + -0.000000000000000, + -0.168427714314628, + -0.000000000000000, + -0.656382056840170, + -0.000000000000000, + -0.168427714314628, + -0.317846011338142, + -0.317846011338142, + 1.017107236282055, + 0.226023830284901, + -0.000000000000000, + -0.000000000000000, + -0.000000000000000, + 0.258942827786103, + -0.000000000000000, + -0.000000000000000, + -0.000000000000000, + 0.258942827786103, + 0.460602629757462, + -0.460602629757462, + 0.000000000000000, + -0.000000000000000, + 0.000000000000000, + 0.000000000000000, + 0.000000000000000, + -0.409424559784410, + -0.000000000000000, + -0.000000000000000, + -0.000000000000000, + 0.136474853261470, + -0.000000000000000, + 0.000000000000000, + -0.000000000000000, + -0.136474853261470, + -0.504564900728724, + -0.504564900728724, + 0.000000000000000, + -0.598002845308118, + -0.000000000000000, + -0.000000000000000, + 0.000000000000000, + 0.000000000000000, + -0.000000000000000, + -0.000000000000000, + -0.000000000000000, + 0.350610246256556, + -0.000000000000000, + -0.000000000000000, + -0.000000000000000, + 0.350610246256556, + 0.683184105191914, + -0.683184105191914, + 0.000000000000000, + -0.000000000000000, + 0.000000000000000, + 0.000000000000000, + 0.000000000000000, + -0.202424920056864, + 0.000000000000000, + 0.000000000000000, + 1.092548430592079, + -0.350435072502801, + 0.451658037912587, + 0.000000000000000, + -0.000000000000000, + 0.046358202625865, + 0.000000000000000, + 0.451658037912587, + -0.000000000000000, + 0.046358202625865, + 0.000000000000000, + -0.000000000000000, + 0.000000000000000, + 0.000000000000000, + 0.000000000000000, + 0.000000000000000, + 0.000000000000000, + 0.492067081245654, + -0.469376801586882, + -0.000000000000000, + -0.000000000000000, + 0.187354445356332, + -0.000000000000000, + 0.469376801586882, + -0.000000000000000, + -0.187354445356332, + 0.000000000000000, + 0.000000000000000, + 0.000000000000000, + 0.355076798886913, + 0.000000000000000, + 0.000000000000000, + 0.000000000000000, + -0.000000000000000, + 0.518915578720260, + 0.000000000000000, + -0.000000000000000, + -0.443845998608641, + 0.000000000000000, + 0.518915578720260, + -0.000000000000000, + -0.443845998608641, + 0.000000000000000, + -0.000000000000000, + 0.000000000000000, + 0.000000000000000, + 0.000000000000000, + 0.000000000000000, + 0.000000000000000, + 0.452635881587108, + -0.707162732524596, + 0.000000000000000, + -0.000000000000000, + 0.120972027847095, + -0.000000000000000, + 0.707162732524596, + -0.000000000000000, + -0.120972027847095}; + } + + void TearDown() + { + delete[] dylm; + delete[] g; + delete[] ref; + delete[] rly; + delete[] rlgy; + } +}; + +TEST_F(YlmRealTest, Constructor) +{ + EXPECT_NO_THROW(ModuleBase::YlmReal YR); +} + +TEST_F(YlmRealTest, YlmReal) +{ + ModuleBase::YlmReal::Ylm_Real(nylm, ng, g, ylm); + for (int i = 0; i < nylm; ++i) + { + for (int j = 0; j < ng; ++j) + { + EXPECT_NEAR(ylm(i, j), ref[i * ng + j], doublethreshold) + << "Ylm[" << i << "], example " << j << " not pass"; + } + } +} + +TEST_F(YlmRealTest, YlmRealTemplate) +{ + base_device::DEVICE_CPU* cpu_ctx = {}; + ModuleBase::YlmReal::Ylm_Real(cpu_ctx, nylm, ng, reinterpret_cast(g), ylm.c); + for (int i = 0; i < nylm; ++i) + { + for (int j = 0; j < ng; ++j) + { + EXPECT_NEAR(ylm(i, j), ref[i * ng + j], doublethreshold) + << "Ylm[" << i << "], example " << j << " not pass"; + } + } +} + +TEST_F(YlmRealTest, gradYlmReal) +{ + ModuleBase::YlmReal::grad_Ylm_Real(nylm, ng, g, ylm, dylm[0], dylm[1], dylm[2]); + for (int i = 0; i < nylm; ++i) + { + for (int j = 0; j < ng; ++j) + { + EXPECT_NEAR(ylm(i, j), ref[i * ng + j], doublethreshold) + << "Ylm[" << i << "], example " << j << " not pass"; + } + } + ModuleBase::matrix ylmplus(nylm, 1); + ModuleBase::matrix ylmminus(nylm, 1); + double step = 1e-7; + for (int id = 0; id < 3; ++id) + { + for (int j = 0; j < ng; ++j) + { + ModuleBase::Vector3 gplus = g[j]; + ModuleBase::Vector3 gminus = g[j]; + gplus[id] += step / 2; + gminus[id] -= step / 2; + ModuleBase::YlmReal::Ylm_Real(nylm, 1, &gplus, ylmplus); + ModuleBase::YlmReal::Ylm_Real(nylm, 1, &gminus, ylmminus); + for (int i = 0; i < nylm; ++i) + { + if (std::abs(ylmplus(i, 0)) < 1e-6 && std::abs(ylmminus(i, 0)) < 1e-6) + continue; + double diff = (ylmplus(i, 0) - ylmminus(i, 0)) / step; + EXPECT_NEAR(diff, dylm[id](i, j), 1e-6) + << "dYlm[" << id << "][" << i << "], example " << j << " not pass"; + } + } + } +} + +TEST_F(YlmRealTest, YlmReal2) +{ + ModuleBase::YlmReal::Ylm_Real2(nylm, ng, g, ylm); + for (int i = 0; i < nylm; ++i) + { + for (int j = 0; j < ng; ++j) + { + EXPECT_NEAR(ylm(i, j), ref[i * ng + j], doublethreshold) + << "Ylm[" << i << "], example " << j << " not pass"; + } + } +} + +TEST_F(YlmRealTest, YlmRealRlylm) +{ + for (int j = 0; j < ng; ++j) + { + ModuleBase::YlmReal::rlylm(lmax, g[j].x, g[j].y, g[j].z, rly); + for (int i = 0; i < nylm; ++i) + { + EXPECT_NEAR(rly[i], ref[i * ng + j], doublethreshold) << "Ylm[" << i << "], example " << j << " not pass"; + } + } +} + +TEST_F(YlmRealTest, YlmGetYlmReal) +{ + for (int j = 0; j < ng; ++j) + { + ModuleBase::Ylm::get_ylm_real(lmax + 1, g[j], rly); + for (int i = 0; i < nylm; ++i) + { + EXPECT_NEAR(rly[i], ref[i * ng + j], 1e-5) << "Ylm[" << i << "], example " << j << " not pass"; + } + } +} + +TEST_F(YlmRealTest, YlmSphHarm) +{ + ModuleBase::Ylm::set_coefficients(); + for (int j = 0; j < ng; ++j) + { + double r = sqrt(g[j].x * g[j].x + g[j].y * g[j].y + g[j].z * g[j].z); + ModuleBase::Ylm::sph_harm(lmax, g[j].x / r, g[j].y / r, g[j].z / r, rlyvector); + for (int i = 0; i < nylm; ++i) + { + EXPECT_NEAR(rlyvector[i], ref[i * ng + j], doublethreshold) + << "Ylm[" << i << "], example " << j << " not pass"; + } + } +} + +TEST_F(YlmRealTest, YlmRlSphHarm) +{ + ModuleBase::Ylm::set_coefficients(); + for (int j = 0; j < ng; ++j) + { + double r = sqrt(g[j].x * g[j].x + g[j].y * g[j].y + g[j].z * g[j].z); + ModuleBase::Ylm::rl_sph_harm(lmax, g[j].x / r, g[j].y / r, g[j].z / r, rlyvector); + for (int i = 0; i < nylm; ++i) + { + EXPECT_NEAR(rlyvector[i], ref[i * ng + j], doublethreshold) + << "Ylm[" << i << "], example " << j << " not pass"; + } + } +} +// used to be test1 in ylm.h +TEST_F(YlmRealTest, YlmGradRlSphHarm) +{ + ModuleBase::Ylm::set_coefficients(); + for (int j = 0; j < ng; ++j) + { + double r = sqrt(g[j].x * g[j].x + g[j].y * g[j].y + g[j].z * g[j].z); + ModuleBase::Ylm::grad_rl_sph_harm(lmax, + g[j].x / r, + g[j].y / r, + g[j].z / r, + rlyvector.data(), + rlgyvector.get_ptr_2D()); + for (int i = 0; i < nylm; ++i) + { + EXPECT_NEAR(rlyvector[i], ref[i * ng + j], doublethreshold) + << "Ylm[" << i << "], example " << j << " not pass"; + for (int k = 0; k < 3; ++k) + { + EXPECT_NEAR(rlgyvector[i][k], rlgyref[j][i][k], 1e-5); + } + } + } +} + +// used to be test1 in ylm.h +TEST_F(YlmRealTest, equality_value_test) +{ + + ModuleBase::Vector3 R(20.0, 0.0, 0.0); + const double xdr = R.x / R.norm(); + const double ydr = R.y / R.norm(); + const double zdr = R.z / R.norm(); + const int L = 9; + const double rl = std::pow(R.norm(), L); + // std::cout << " rl=" << rl << std::endl; + ModuleBase::Ylm::set_coefficients(); + + int nu = 100; + + // Peize Lin change rlya 2016-08-26 + std::vector rlya; + double rlyb[400]; + ModuleBase::Ylm::ZEROS(rlyb, 400); + + ModuleBase::Ylm::rl_sph_harm(L, xdr, ydr, zdr, rlya); + ModuleBase::Ylm::get_ylm_real(L + 1, R, rlyb); + + for (int i = 0; i < nu; i++) + { + double diff = fabs(rlya[i] - rlyb[i]); + EXPECT_LT(diff, 1e-8); + } +} + +// used to be test2 in ylm.h +TEST_F(YlmRealTest, equality_gradient_test) +{ + + ModuleBase::Vector3 R(0.1, -0.2, 0.5); + ModuleBase::Ylm::set_coefficients(); + + // int nu = 100; + + double rlya[100]; + double rlyb[400]; + + ModuleBase::Array_Pool grlya(100, 3); + double grlyb[400][3]; + + ModuleBase::Ylm::grad_rl_sph_harm(9, R.x, R.y, R.z, rlya, grlya.get_ptr_2D()); + ModuleBase::Ylm::rlylm(10, R.x, R.y, R.z, rlyb, grlyb); + + for (int i = 0; i < 100; i++) + { + double diffx = fabs(grlya[i][2] - grlyb[i][2]); + EXPECT_LT(diffx, 1e-8); + } +} +TEST_F(YlmRealTest, YlmRealTemplatefloat) +{ + ModuleBase::Vector3* gg; + gg = new ModuleBase::Vector3[ng]; + gg[0].set(1.0, 0.0, 0.0); + gg[1].set(0.0, 1.0, 0.0); + gg[2].set(0.0, 0.0, 1.0); + gg[3].set(-1.0, -1.0, -1.0); + float* ccc; + ccc = new float[nylm * ng]; + base_device::DEVICE_CPU* cpu_ctx = {}; + ModuleBase::YlmReal::Ylm_Real(cpu_ctx, nylm, ng, reinterpret_cast(gg), ccc); + for (int i = 0; i < nylm; ++i) + { + for (int j = 0; j < ng; ++j) + { + EXPECT_NEAR(ccc[i * ng + j], ref[i * ng + j], 2.45e-06) << "Ylm[" << i << "], example " << j << " not pass"; + } + } + delete[] gg; + delete[] ccc; +} diff --git a/source/module_base/test/mathzone_add1_test.cpp b/source/source_base/test/mathzone_add1_test.cpp similarity index 100% rename from source/module_base/test/mathzone_add1_test.cpp rename to source/source_base/test/mathzone_add1_test.cpp diff --git a/source/module_base/test/mathzone_test.cpp b/source/source_base/test/mathzone_test.cpp similarity index 100% rename from source/module_base/test/mathzone_test.cpp rename to source/source_base/test/mathzone_test.cpp diff --git a/source/module_base/test/matrix3_test.cpp b/source/source_base/test/matrix3_test.cpp similarity index 100% rename from source/module_base/test/matrix3_test.cpp rename to source/source_base/test/matrix3_test.cpp diff --git a/source/module_base/test/matrix_test.cpp b/source/source_base/test/matrix_test.cpp similarity index 100% rename from source/module_base/test/matrix_test.cpp rename to source/source_base/test/matrix_test.cpp diff --git a/source/module_base/test/memory_test.cpp b/source/source_base/test/memory_test.cpp similarity index 100% rename from source/module_base/test/memory_test.cpp rename to source/source_base/test/memory_test.cpp diff --git a/source/module_base/test/mymath_test.cpp b/source/source_base/test/mymath_test.cpp similarity index 100% rename from source/module_base/test/mymath_test.cpp rename to source/source_base/test/mymath_test.cpp diff --git a/source/module_base/test/ndarray_test.cpp b/source/source_base/test/ndarray_test.cpp similarity index 97% rename from source/module_base/test/ndarray_test.cpp rename to source/source_base/test/ndarray_test.cpp index b31d04144d..26a4f6e79f 100644 --- a/source/module_base/test/ndarray_test.cpp +++ b/source/source_base/test/ndarray_test.cpp @@ -1,5 +1,6 @@ +#include "source_base/ndarray.h" + #include -#include "module_base/ndarray.h" #include // TEST(NDArray, Constructor) @@ -135,7 +136,7 @@ TEST(NDArray, IndexOperatorMultiIndex) TEST(NDArray, Reshape) { NDArray a(1, 2, 3); /* 1 * 2 * 3, 3d array */ - a.reshape(2, 3, 1); /* 2 * 3 * 1, 3d array */ + a.reshape(2, 3, 1); /* 2 * 3 * 1, 3d array */ EXPECT_EQ(a.size(), 6); EXPECT_EQ(a.empty(), false); // expect assert error if the size is not the same @@ -190,7 +191,7 @@ TEST(NDArray, ReshapeInfer) // infer the last dimension } -int main(int argc, char **argv) +int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); diff --git a/source/module_base/test/opt_CG_test.cpp b/source/source_base/test/opt_CG_test.cpp similarity index 100% rename from source/module_base/test/opt_CG_test.cpp rename to source/source_base/test/opt_CG_test.cpp diff --git a/source/module_base/test/opt_TN_test.cpp b/source/source_base/test/opt_TN_test.cpp similarity index 100% rename from source/module_base/test/opt_TN_test.cpp rename to source/source_base/test/opt_TN_test.cpp diff --git a/source/module_base/test/opt_test_tools.cpp b/source/source_base/test/opt_test_tools.cpp similarity index 100% rename from source/module_base/test/opt_test_tools.cpp rename to source/source_base/test/opt_test_tools.cpp diff --git a/source/module_base/test/opt_test_tools.h b/source/source_base/test/opt_test_tools.h similarity index 100% rename from source/module_base/test/opt_test_tools.h rename to source/source_base/test/opt_test_tools.h diff --git a/source/module_base/test/perf_sphbes_test.cpp b/source/source_base/test/perf_sphbes_test.cpp similarity index 100% rename from source/module_base/test/perf_sphbes_test.cpp rename to source/source_base/test/perf_sphbes_test.cpp diff --git a/source/module_base/test/realarray_test.cpp b/source/source_base/test/realarray_test.cpp similarity index 100% rename from source/module_base/test/realarray_test.cpp rename to source/source_base/test/realarray_test.cpp diff --git a/source/module_base/test/sph_bessel_recursive_test.cpp b/source/source_base/test/sph_bessel_recursive_test.cpp similarity index 100% rename from source/module_base/test/sph_bessel_recursive_test.cpp rename to source/source_base/test/sph_bessel_recursive_test.cpp diff --git a/source/module_base/test/spherical_bessel_transformer_test.cpp b/source/source_base/test/spherical_bessel_transformer_test.cpp similarity index 97% rename from source/module_base/test/spherical_bessel_transformer_test.cpp rename to source/source_base/test/spherical_bessel_transformer_test.cpp index b282736160..60d3709435 100644 --- a/source/module_base/test/spherical_bessel_transformer_test.cpp +++ b/source/source_base/test/spherical_bessel_transformer_test.cpp @@ -1,10 +1,10 @@ -#include "module_base/spherical_bessel_transformer.h" +#include "source_base/spherical_bessel_transformer.h" -#include -#include +#include "source_base/constants.h" #include "gtest/gtest.h" -#include "module_base/constants.h" +#include +#include #ifdef __MPI #include @@ -45,8 +45,8 @@ class SphericalBesselTransformTest : public ::testing::Test /// Gets the maximum absolute element-wise difference between two arrays static double max_diff(int sz, const double* arr1, const double* arr2); - const int sz_max = 10000; ///< size of each buffer - double* buffer = nullptr; ///< buffer for all arrays below + const int sz_max = 10000; ///< size of each buffer + double* buffer = nullptr; ///< buffer for all arrays below double* f = nullptr; ///< input array double* g = nullptr; ///< output array @@ -443,14 +443,14 @@ TEST_F(SphericalBesselTransformTest, HeapUsage) // zeroth-order transform does not involve tabulating jl // but FFT needs to allocate memory EXPECT_EQ(sbt_no_cache.heap_usage(), 0); - EXPECT_EQ(sbt_cached.heap_usage(), 2*(sz-1)*sizeof(double)); + EXPECT_EQ(sbt_cached.heap_usage(), 2 * (sz - 1) * sizeof(double)); // higher-order transforms involve tabulating jl sbt_no_cache.radrfft(5, sz, rcut, f, g, 0); sbt_cached.radrfft(5, sz, rcut, f, g, 0); EXPECT_EQ(sbt_no_cache.heap_usage(), 0); - EXPECT_GT(sbt_cached.heap_usage(), 2*(sz-1)*sizeof(double)); + EXPECT_GT(sbt_cached.heap_usage(), 2 * (sz - 1) * sizeof(double)); sbt_no_cache.clear(); sbt_cached.clear(); @@ -459,7 +459,6 @@ TEST_F(SphericalBesselTransformTest, HeapUsage) EXPECT_EQ(sbt_cached.heap_usage(), 0); } - int main(int argc, char** argv) { diff --git a/source/module_base/test/test_lebedev_laikov.cpp b/source/source_base/test/test_lebedev_laikov.cpp similarity index 62% rename from source/module_base/test/test_lebedev_laikov.cpp rename to source/source_base/test/test_lebedev_laikov.cpp index f0758c6ae4..c1e8dbdc5c 100644 --- a/source/module_base/test/test_lebedev_laikov.cpp +++ b/source/source_base/test/test_lebedev_laikov.cpp @@ -1,5 +1,5 @@ -#include "module_base/math_lebedev_laikov.h" -#include "module_base/ylm.h" +#include "source_base/math_lebedev_laikov.h" +#include "source_base/ylm.h" #include "gtest/gtest.h" #include @@ -10,43 +10,50 @@ using ModuleBase::Lebedev_laikov_grid; // mock the function to prevent unnecessary dependency -namespace ModuleBase { -void WARNING_QUIT(const std::string&, const std::string&) {} +namespace ModuleBase +{ +void WARNING_QUIT(const std::string&, const std::string&) +{ } +} // namespace ModuleBase -class LebedevLaikovTest: public ::testing::Test { -protected: +class LebedevLaikovTest : public ::testing::Test +{ + protected: void randgen(int lmax, std::vector& coef); const double tol = 1e-12; }; - -void LebedevLaikovTest::randgen(int lmax, std::vector& coef) { +void LebedevLaikovTest::randgen(int lmax, std::vector& coef) +{ coef.resize((lmax + 1) * (lmax + 1)); // fill coef with uniformly distributed random numbers std::random_device rd; std::mt19937 gen(rd()); std::uniform_real_distribution dis(0.0, 1.0); - for (size_t i = 0; i < coef.size(); ++i) { + for (size_t i = 0; i < coef.size(); ++i) + { coef[i] = dis(gen); } // normalize the coefficients double fac = 0.0; - for (size_t i = 0; i < coef.size(); ++i) { + for (size_t i = 0; i < coef.size(); ++i) + { fac += coef[i] * coef[i]; } fac = 1.0 / std::sqrt(fac); - for (size_t i = 0; i < coef.size(); ++i) { + for (size_t i = 0; i < coef.size(); ++i) + { coef[i] *= fac; } } - -TEST_F(LebedevLaikovTest, Accuracy) { - /* +TEST_F(LebedevLaikovTest, Accuracy) +{ + /* * Given * * f = c[0]*Y00 + c[1]*Y10 + c[2]*Y11 + ..., @@ -63,49 +70,22 @@ TEST_F(LebedevLaikovTest, Accuracy) { // (ngrid, lmax) std::set> supported = { - {6, 3}, - {14, 5}, - {26, 7}, - {38, 9}, - {50, 11}, - {74, 13}, - {86, 15}, - {110, 17}, - {146, 19}, - {170, 21}, - {194, 23}, - {230, 25}, - {266, 27}, - {302, 29}, - {350, 31}, - {434, 35}, - {590, 41}, - {770, 47}, - {974, 53}, - {1202, 59}, - {1454, 65}, - {1730, 71}, - {2030, 77}, - {2354, 83}, - {2702, 89}, - {3074, 95}, - {3470, 101}, - {3890, 107}, - {4334, 113}, - {4802, 119}, - {5294, 125}, - {5810, 131}, + {6, 3}, {14, 5}, {26, 7}, {38, 9}, {50, 11}, {74, 13}, {86, 15}, {110, 17}, + {146, 19}, {170, 21}, {194, 23}, {230, 25}, {266, 27}, {302, 29}, {350, 31}, {434, 35}, + {590, 41}, {770, 47}, {974, 53}, {1202, 59}, {1454, 65}, {1730, 71}, {2030, 77}, {2354, 83}, + {2702, 89}, {3074, 95}, {3470, 101}, {3890, 107}, {4334, 113}, {4802, 119}, {5294, 125}, {5810, 131}, }; std::vector coef; - for (auto& grid_info: supported) { + for (auto& grid_info: supported) + { int ngrid = grid_info.first; int grid_lmax = grid_info.second; Lebedev_laikov_grid lebgrid(ngrid); lebgrid.generate_grid_points(); - + const double* weight = lebgrid.get_weight(); const ModuleBase::Vector3* grid = lebgrid.get_grid_coor(); @@ -114,18 +94,20 @@ TEST_F(LebedevLaikovTest, Accuracy) { double val = 0.0; std::vector ylm_real; - for (int i = 0; i < ngrid; i++) { - ModuleBase::Ylm::sph_harm(func_lmax, - grid[i].x, grid[i].y, grid[i].z, ylm_real); + for (int i = 0; i < ngrid; i++) + { + ModuleBase::Ylm::sph_harm(func_lmax, grid[i].x, grid[i].y, grid[i].z, ylm_real); double tmp = 0.0; - for (size_t j = 0; j < coef.size(); ++j) { + for (size_t j = 0; j < coef.size(); ++j) + { tmp += coef[j] * ylm_real[j]; } val += weight[i] * tmp * tmp; } double val_ref = 0.0; - for (size_t i = 0; i < coef.size(); ++i) { + for (size_t i = 0; i < coef.size(); ++i) + { val_ref += coef[i] * coef[i]; } @@ -134,7 +116,6 @@ TEST_F(LebedevLaikovTest, Accuracy) { } } - int main(int argc, char** argv) { #ifdef __MPI diff --git a/source/module_base/test/timer_test.cpp b/source/source_base/test/timer_test.cpp similarity index 100% rename from source/module_base/test/timer_test.cpp rename to source/source_base/test/timer_test.cpp diff --git a/source/module_base/test/tool_check_test.cpp b/source/source_base/test/tool_check_test.cpp similarity index 100% rename from source/module_base/test/tool_check_test.cpp rename to source/source_base/test/tool_check_test.cpp diff --git a/source/module_base/test/tool_quit_no_exit.cpp b/source/source_base/test/tool_quit_no_exit.cpp similarity index 100% rename from source/module_base/test/tool_quit_no_exit.cpp rename to source/source_base/test/tool_quit_no_exit.cpp diff --git a/source/module_base/test/tool_quit_test.cpp b/source/source_base/test/tool_quit_test.cpp similarity index 100% rename from source/module_base/test/tool_quit_test.cpp rename to source/source_base/test/tool_quit_test.cpp diff --git a/source/module_base/test/tool_threading_test.cpp b/source/source_base/test/tool_threading_test.cpp similarity index 100% rename from source/module_base/test/tool_threading_test.cpp rename to source/source_base/test/tool_threading_test.cpp diff --git a/source/module_base/test/tool_title_test.cpp b/source/source_base/test/tool_title_test.cpp similarity index 100% rename from source/module_base/test/tool_title_test.cpp rename to source/source_base/test/tool_title_test.cpp diff --git a/source/module_base/test/vector3_test.cpp b/source/source_base/test/vector3_test.cpp similarity index 100% rename from source/module_base/test/vector3_test.cpp rename to source/source_base/test/vector3_test.cpp diff --git a/source/module_base/test/ylm_test.cpp b/source/source_base/test/ylm_test.cpp similarity index 100% rename from source/module_base/test/ylm_test.cpp rename to source/source_base/test/ylm_test.cpp diff --git a/source/module_base/test_parallel/CMakeLists.txt b/source/source_base/test_parallel/CMakeLists.txt similarity index 100% rename from source/module_base/test_parallel/CMakeLists.txt rename to source/source_base/test_parallel/CMakeLists.txt diff --git a/source/module_base/test_parallel/blacs_connector_test.cpp b/source/source_base/test_parallel/blacs_connector_test.cpp similarity index 100% rename from source/module_base/test_parallel/blacs_connector_test.cpp rename to source/source_base/test_parallel/blacs_connector_test.cpp diff --git a/source/module_base/test_parallel/blacs_connector_test.sh b/source/source_base/test_parallel/blacs_connector_test.sh similarity index 100% rename from source/module_base/test_parallel/blacs_connector_test.sh rename to source/source_base/test_parallel/blacs_connector_test.sh diff --git a/source/module_base/test_parallel/math_chebyshev_mpi_test.cpp b/source/source_base/test_parallel/math_chebyshev_mpi_test.cpp similarity index 97% rename from source/module_base/test_parallel/math_chebyshev_mpi_test.cpp rename to source/source_base/test_parallel/math_chebyshev_mpi_test.cpp index 5ca222bb3c..5c8e9c39b4 100644 --- a/source/module_base/test_parallel/math_chebyshev_mpi_test.cpp +++ b/source/source_base/test_parallel/math_chebyshev_mpi_test.cpp @@ -1,16 +1,17 @@ #include "../math_chebyshev.h" #include "mpi.h" -#include "module_base/parallel_comm.h" +#include "source_base/parallel_comm.h" + #include "gmock/gmock.h" #include "gtest/gtest.h" /************************************************ * unit test of class Chebyshev MPI part ***********************************************/ - /** - * - Tested Functions: - * - checkconverge - */ +/** + * - Tested Functions: + * - checkconverge + */ class toolfunc { public: @@ -43,9 +44,10 @@ class toolfunc void sigma_y(std::complex* spin_in, std::complex* spin_out, const int m = 1) { const std::complex j(0.0, 1.0); - if (this->LDA < 2) { + if (this->LDA < 2) + { this->LDA = 2; -} + } for (int i = 0; i < m; ++i) { spin_out[LDA * i] = -factor * j * spin_in[LDA * i + 1]; @@ -104,12 +106,12 @@ class MathChebyshevTest : public testing::Test MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); int world_size; MPI_Comm_size(MPI_COMM_WORLD, &world_size); - + int color = (world_rank < world_size / 2) ? 0 : 1; int key = world_rank; - + MPI_Comm_split(MPI_COMM_WORLD, color, key, &POOL_WORLD); - + int pool_rank, pool_size; MPI_Comm_rank(POOL_WORLD, &pool_rank); MPI_Comm_size(POOL_WORLD, &pool_size); diff --git a/source/module_base/test_parallel/parallel_2d_test.cpp b/source/source_base/test_parallel/parallel_2d_test.cpp similarity index 100% rename from source/module_base/test_parallel/parallel_2d_test.cpp rename to source/source_base/test_parallel/parallel_2d_test.cpp diff --git a/source/module_base/test_parallel/parallel_2d_test.sh b/source/source_base/test_parallel/parallel_2d_test.sh similarity index 100% rename from source/module_base/test_parallel/parallel_2d_test.sh rename to source/source_base/test_parallel/parallel_2d_test.sh diff --git a/source/module_base/test_parallel/parallel_common_test.cpp b/source/source_base/test_parallel/parallel_common_test.cpp similarity index 96% rename from source/module_base/test_parallel/parallel_common_test.cpp rename to source/source_base/test_parallel/parallel_common_test.cpp index 111eef0884..a3d526ab5b 100644 --- a/source/module_base/test_parallel/parallel_common_test.cpp +++ b/source/source_base/test_parallel/parallel_common_test.cpp @@ -1,5 +1,5 @@ #ifdef __MPI -#include "module_base/parallel_common.h" +#include "source_base/parallel_common.h" #include "mpi.h" @@ -14,7 +14,7 @@ /** * The tested functions are wrappers of MPI_Bcast - * in ABACUS, as defined in module_base/parallel_common.h. + * in ABACUS, as defined in source_base/parallel_common.h. * The source is process 0 in all MPI_Bcast * wrappers. */ diff --git a/source/module_base/test_parallel/parallel_common_test.sh b/source/source_base/test_parallel/parallel_common_test.sh similarity index 100% rename from source/module_base/test_parallel/parallel_common_test.sh rename to source/source_base/test_parallel/parallel_common_test.sh diff --git a/source/module_base/test_parallel/parallel_global_test.cpp b/source/source_base/test_parallel/parallel_global_test.cpp similarity index 88% rename from source/module_base/test_parallel/parallel_global_test.cpp rename to source/source_base/test_parallel/parallel_global_test.cpp index 8b9e5053a4..27da698f42 100644 --- a/source/module_base/test_parallel/parallel_global_test.cpp +++ b/source/source_base/test_parallel/parallel_global_test.cpp @@ -1,10 +1,10 @@ #ifdef __MPI -#include "module_base/parallel_global.h" +#include "source_base/parallel_global.h" #include "mpi.h" -#include "gtest/gtest.h" #include "gmock/gmock.h" +#include "gtest/gtest.h" #include #include #include @@ -168,20 +168,21 @@ TEST_F(ParaGlobal, InitPools) my_rank = 5; testing::internal::CaptureStdout(); EXPECT_EXIT(Parallel_Global::init_pools(nproc, - my_rank, - mpi.nstogroup, - mpi.kpar, - mpi.nproc_in_stogroup, - mpi.rank_in_stogroup, - mpi.MY_BNDGROUP, - mpi.nproc_in_pool, - mpi.rank_in_pool, - mpi.my_pool), ::testing::ExitedWithCode(1), ""); + my_rank, + mpi.nstogroup, + mpi.kpar, + mpi.nproc_in_stogroup, + mpi.rank_in_stogroup, + mpi.MY_BNDGROUP, + mpi.nproc_in_pool, + mpi.rank_in_pool, + mpi.my_pool), + ::testing::ExitedWithCode(1), + ""); std::string output = testing::internal::GetCapturedStdout(); EXPECT_THAT(output, testing::HasSubstr("Error:")); } - TEST_F(ParaGlobal, DivideMPIPools) { this->nproc = 12; diff --git a/source/module_base/test_parallel/parallel_global_test.sh b/source/source_base/test_parallel/parallel_global_test.sh similarity index 100% rename from source/module_base/test_parallel/parallel_global_test.sh rename to source/source_base/test_parallel/parallel_global_test.sh diff --git a/source/module_base/test_parallel/parallel_reduce_test.cpp b/source/source_base/test_parallel/parallel_reduce_test.cpp similarity index 99% rename from source/module_base/test_parallel/parallel_reduce_test.cpp rename to source/source_base/test_parallel/parallel_reduce_test.cpp index 50d1290899..5c0fabc0b7 100644 --- a/source/module_base/test_parallel/parallel_reduce_test.cpp +++ b/source/source_base/test_parallel/parallel_reduce_test.cpp @@ -1,8 +1,8 @@ #ifdef __MPI -#include "module_base/parallel_reduce.h" +#include "source_base/parallel_reduce.h" -#include "module_base/parallel_global.h" #include "mpi.h" +#include "source_base/parallel_global.h" #include "gtest/gtest.h" #include @@ -15,7 +15,7 @@ /** * The tested functions are mainly wrappers of MPI_Allreduce - * and MPI_Allgather in ABACUS, as defined in module_base/ + * and MPI_Allgather in ABACUS, as defined in source_base/ * parallel_reduce.h. * * The logic to test MPI_Allreduce wrapper functions is to diff --git a/source/module_base/test_parallel/parallel_reduce_test.sh b/source/source_base/test_parallel/parallel_reduce_test.sh similarity index 100% rename from source/module_base/test_parallel/parallel_reduce_test.sh rename to source/source_base/test_parallel/parallel_reduce_test.sh diff --git a/source/module_base/test_parallel/test_para_gemm.cpp b/source/source_base/test_parallel/test_para_gemm.cpp similarity index 100% rename from source/module_base/test_parallel/test_para_gemm.cpp rename to source/source_base/test_parallel/test_para_gemm.cpp diff --git a/source/source_base/timer.cpp b/source/source_base/timer.cpp new file mode 100644 index 0000000000..74c572c577 --- /dev/null +++ b/source/source_base/timer.cpp @@ -0,0 +1,318 @@ +#include "timer.h" + +#include + +#ifdef __MPI +#include +#endif +#ifdef _OPENMP +#include +#endif + +#include "chrono" +#include "source_base/formatter.h" + +#include + +namespace ModuleBase +{ + +//---------------------------------------------------------- +// EXPLAIN : +//---------------------------------------------------------- +bool timer::disabled = false; +size_t timer::n_now = 0; +std::map> timer::timer_pool; + +void timer::finish(std::ofstream& ofs, const bool print_flag) +{ + timer::tick("", "total"); + if (print_flag) + { + print_all(ofs); + } +} + +//---------------------------------------------------------- +// +//---------------------------------------------------------- +void timer::start() +{ + // first init ,then we can use tick + timer::tick("", "total"); +} + +double timer::cpu_time() +{ + //---------------------------------------------------------- + // EXPLAIN : here static is important !! + // only first call can let t0 = 0,clock begin + // when enter this function second time , t0 > 0 + //---------------------------------------------------------- + static auto t1 = std::chrono::system_clock::now(); + const auto t2 = std::chrono::system_clock::now(); + auto duration = std::chrono::duration_cast(t2 - t1); + return double(duration.count()) * std::chrono::microseconds::period::num / std::chrono::microseconds::period::den; +} + +void timer::tick(const std::string& class_name, const std::string& name) +{ + //---------------------------------------------------------- + // EXPLAIN : if timer is disabled , return + //---------------------------------------------------------- + if (disabled) + { + return; + } + +#ifdef _OPENMP + if (!omp_get_thread_num()) +#endif + { + Timer_One& timer_one = timer_pool[class_name][name]; + + //---------------------------------------------------------- + // CALL MEMBER FUNCTION : + // NAME : cpu_time + // + // EXPLAIN : + // if start_flag == true,means a new clock counting begin, + // hence we record the start time of this clock counting. + // if start_flag == false, means it's the end of this counting, + // so we add the time during this two 'time point' to the clock time storage. + //---------------------------------------------------------- + if (timer_one.start_flag) + { +#ifdef __MPI + int is_initialized = 0; + MPI_Initialized(&is_initialized); + if (is_initialized) + { + timer_one.cpu_start = MPI_Wtime(); + } +#else + timer_one.cpu_start = cpu_time(); +#endif + ++timer_one.calls; + timer_one.start_flag = false; + } + else + { +#ifdef __MPI + int is_initialized = 0; + MPI_Initialized(&is_initialized); + if (is_initialized) + { + timer_one.cpu_second += MPI_Wtime() - timer_one.cpu_start; + } +#else + timer_one.cpu_second += (cpu_time() - timer_one.cpu_start); +#endif + timer_one.start_flag = true; + } + } // end if(!omp_get_thread_num()) +} + +long double timer::print_until_now() +{ + // stop the clock + timer::tick("", "total"); + // start again + timer::tick("", "total"); + return timer_pool[""]["total"].cpu_second; +} + +void timer::write_to_json(std::string file_name) +{ +#ifdef __MPI + // in some unit test, the mpi is not initialized, so we need to check it + // if mpi is not initialized, we do not run this function + int is_initialized = 0; + MPI_Initialized(&is_initialized); + if (!is_initialized) + { + return; + } + int my_rank = 0; + MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); + if (my_rank != 0) + { + return; + } +#endif + + // check if a double is inf, if so, return "null", else return a string of the input double + auto double_to_string = [](double d) -> std::string { + if (std::isinf(d)) + { + return "Infinity"; + } + else + { + return FmtCore::format("%.15f", d); + } + }; + + // The output json file format is like this: + // { + // "total": 1.0, + // "sub": [ + // { + // "class_name": "wavefunc", + // "sub": [ + // { + // "name": "evc", + // "cpu_second": 0.000318, + // "calls": 2, + // "cpu_second_per_call": 0.000159, + // "cpu_second_per_total": 0.000318 + // } + // ] + // } + // ] + // } + + std::ofstream ofs(file_name); + std::string indent = " "; + int order_a = 0; + ofs << "{\n"; + ofs << indent << "\"total\": " << timer_pool[""]["total"].cpu_second << ",\n"; + ofs << indent << "\"sub\": [\n"; + for (auto& timer_pool_A: timer_pool) + { + order_a++; + // if calss_name == "", it means total time, so we skip it + if (timer_pool_A.first == "") + { + continue; + } + int order_b = 0; + const std::string class_name = timer_pool_A.first; + ofs << indent << indent << "{\n"; + ofs << indent << indent << indent << "\"class_name\": \"" << class_name << "\",\n"; + ofs << indent << indent << indent << "\"sub\": [\n"; + for (auto& timer_pool_B: timer_pool_A.second) + { + order_b++; + const std::string name = timer_pool_B.first; + const Timer_One timer_one = timer_pool_B.second; + ofs << indent << indent << indent << indent << "{\n"; + ofs << indent << indent << indent << indent << "\"name\": \"" << name << "\",\n"; + ofs << indent << indent << indent << indent << "\"cpu_second\": " << std::setprecision(15) + << timer_one.cpu_second << ",\n"; + ofs << indent << indent << indent << indent << "\"calls\": " << timer_one.calls << ",\n"; + ofs << indent << indent << indent << indent + << "\"cpu_second_per_call\": " << double_to_string(timer_one.cpu_second / timer_one.calls) << ",\n"; + ofs << indent << indent << indent << indent << "\"cpu_second_per_total\": " + << double_to_string(timer_one.cpu_second / timer_pool[""]["total"].cpu_second) << "\n"; + + if (order_b == timer_pool_A.second.size()) + { + ofs << indent << indent << indent << indent << "}\n"; + } + else + { + ofs << indent << indent << indent << indent << "},\n"; + } + } + ofs << indent << indent << indent << "]\n"; + if (order_a == timer_pool.size()) + { + ofs << indent << indent << "}\n"; + } + else + { + ofs << indent << indent << "},\n"; + } + } + ofs << indent << "]\n"; + ofs << "}\n"; + ofs.close(); +} + +void timer::print_all(std::ofstream& ofs) +{ + constexpr double small = 0.1; // cpu = 10^6 + // if want to print > 1s , set small = 10^6 + + std::vector, Timer_One>> timer_pool_order; + for (auto& timer_pool_A: timer_pool) + { + const std::string class_name = timer_pool_A.first; + for (auto& timer_pool_B: timer_pool_A.second) + { + const std::string name = timer_pool_B.first; + const Timer_One timer_one = timer_pool_B.second; + if (timer_pool_order.size() < timer_one.order + 1) + { + timer_pool_order.resize(timer_one.order + 1); + } + // timer_pool_order[timer_one.order] = {{class_name, name}, timer_one}; //qianrui change it to make it + // compatible with old compiler version + timer_pool_order[timer_one.order] = std::pair, Timer_One>{ + std::pair{class_name, name}, + timer_one}; + } + } + std::vector class_names; + std::vector names; + std::vector times; + std::vector calls; + std::vector avgs; + std::vector pers; + for (auto& timer_pool_order_A: timer_pool_order) + { + const std::string& class_name = timer_pool_order_A.first.first; + const std::string& name = timer_pool_order_A.first.second; + const Timer_One& timer_one = timer_pool_order_A.second; + + if (timer_one.cpu_second < 0) + { + continue; + } + + // only print out timers that are larger than 1% + // mohan add 2025-03-09 + const double percentage_thr = 1.0; + const double percentage = timer_one.cpu_second / timer_pool_order[0].second.cpu_second * 100; + if (percentage < percentage_thr) + { + continue; + } + + class_names.push_back(class_name); + names.push_back(name); + times.push_back(timer_one.cpu_second); + calls.push_back(timer_one.calls); + avgs.push_back(timer_one.cpu_second / timer_one.calls); + + // if the total time is too small, we do not calculate the percentage + if (timer_pool_order[0].second.cpu_second < 1e-9) + { + pers.push_back(0); + } + else + { + pers.push_back(percentage); + } + } + assert(class_names.size() == names.size()); + assert(class_names.size() == times.size()); + assert(class_names.size() == calls.size()); + assert(class_names.size() == avgs.size()); + assert(class_names.size() == pers.size()); + + std::vector titles = {"CLASS_NAME", "NAME", "TIME/s", "CALLS", "AVG/s", "PER/%"}; + std::vector formats = {"%-10s", "%-10s", "%6.2f", "%8d", "%6.2f", "%6.2f"}; + FmtTable time_statistics(/*titles=*/titles, + /*nrows=*/pers.size(), + /*formats=*/formats, + /*indent=*/0, + /*align=*/{/*value*/ FmtTable::Align::LEFT, /*title*/ FmtTable::Align::CENTER}); + time_statistics << class_names << names << times << calls << avgs << pers; + const std::string table = "\nTIME STATISTICS\n" + time_statistics.str(); + std::cout << table << std::endl; + ofs << table << std::endl; + write_to_json("time.json"); +} +} // namespace ModuleBase diff --git a/source/module_base/timer.h b/source/source_base/timer.h similarity index 100% rename from source/module_base/timer.h rename to source/source_base/timer.h diff --git a/source/module_base/tool_check.cpp b/source/source_base/tool_check.cpp similarity index 100% rename from source/module_base/tool_check.cpp rename to source/source_base/tool_check.cpp diff --git a/source/module_base/tool_check.h b/source/source_base/tool_check.h similarity index 100% rename from source/module_base/tool_check.h rename to source/source_base/tool_check.h diff --git a/source/module_base/tool_quit.cpp b/source/source_base/tool_quit.cpp similarity index 100% rename from source/module_base/tool_quit.cpp rename to source/source_base/tool_quit.cpp diff --git a/source/module_base/tool_quit.h b/source/source_base/tool_quit.h similarity index 100% rename from source/module_base/tool_quit.h rename to source/source_base/tool_quit.h diff --git a/source/module_base/tool_threading.h b/source/source_base/tool_threading.h similarity index 100% rename from source/module_base/tool_threading.h rename to source/source_base/tool_threading.h diff --git a/source/module_base/tool_title.cpp b/source/source_base/tool_title.cpp similarity index 100% rename from source/module_base/tool_title.cpp rename to source/source_base/tool_title.cpp diff --git a/source/module_base/tool_title.h b/source/source_base/tool_title.h similarity index 100% rename from source/module_base/tool_title.h rename to source/source_base/tool_title.h diff --git a/source/module_base/vector3.h b/source/source_base/vector3.h similarity index 100% rename from source/module_base/vector3.h rename to source/source_base/vector3.h diff --git a/source/module_base/ylm.cpp b/source/source_base/ylm.cpp similarity index 100% rename from source/module_base/ylm.cpp rename to source/source_base/ylm.cpp diff --git a/source/module_base/ylm.h b/source/source_base/ylm.h similarity index 100% rename from source/module_base/ylm.h rename to source/source_base/ylm.h diff --git a/source/source_esolver/esolver.cpp b/source/source_esolver/esolver.cpp index c3a7c4d5bc..b0d957deb5 100644 --- a/source/source_esolver/esolver.cpp +++ b/source/source_esolver/esolver.cpp @@ -2,8 +2,8 @@ #include "esolver_ks_pw.h" #include "esolver_sdft_pw.h" -#include "module_base/module_device/device.h" #include "module_parameter/parameter.h" +#include "source_base/module_device/device.h" #ifdef __LCAO #include "esolver_dm2rho.h" #include "esolver_gets.h" @@ -13,7 +13,7 @@ #include "module_lr/esolver_lrtd_lcao.h" extern "C" { -#include "module_base/blacs_connector.h" +#include "source_base/blacs_connector.h" } #endif #include "esolver_dp.h" @@ -114,7 +114,7 @@ std::string determine_type() } GlobalV::ofs_running << "\n RUNNING WITH DEVICE : " << device_info << " / " - << base_device::information::get_device_info(PARAM.inp.device) << std::endl; + << base_device::information::get_device_info(PARAM.inp.device) << std::endl; /***auto end_time = std::chrono::high_resolution_clock::now(); auto duration = std::chrono::duration_cast>(end_time - start_time); std::cout << "hipGetDeviceInfo took " << duration.count() << " seconds" << std::endl;***/ @@ -275,20 +275,20 @@ ESolver* init_esolver(const Input_para& inp, UnitCell& ucell) std::cout << " PREPARING FOR EXCITED STATES." << std::endl; // initialize the 2nd ESolver_LR at the temporary pointer ModuleESolver::ESolver* p_esolver_lr = nullptr; - if (PARAM.globalv.gamma_only_local) - { - p_esolver_lr = new LR::ESolver_LR( - std::move(*dynamic_cast*>(p_esolver)), - inp, - ucell); - } + if (PARAM.globalv.gamma_only_local) + { + p_esolver_lr = new LR::ESolver_LR( + std::move(*dynamic_cast*>(p_esolver)), + inp, + ucell); + } else - { - p_esolver_lr = new LR::ESolver_LR, double>( - std::move(*dynamic_cast, double>*>(p_esolver)), - inp, - ucell); - } + { + p_esolver_lr = new LR::ESolver_LR, double>( + std::move(*dynamic_cast, double>*>(p_esolver)), + inp, + ucell); + } // clean the 1st ESolver_KS and swap the pointer ModuleESolver::clean_esolver(p_esolver, false); // do not call Cblacs_exit, remain it for the 2nd ESolver return p_esolver_lr; diff --git a/source/source_esolver/esolver.h b/source/source_esolver/esolver.h index d889052348..0de8c70eeb 100644 --- a/source/source_esolver/esolver.h +++ b/source/source_esolver/esolver.h @@ -1,9 +1,9 @@ #ifndef ESOLVER_H #define ESOLVER_H -#include "module_base/matrix.h" #include "module_cell/unitcell.h" #include "module_parameter/parameter.h" +#include "source_base/matrix.h" namespace ModuleESolver { @@ -30,7 +30,7 @@ class ESolver //! deal with exx and other calculation than scf/md/relax/cell-relax: //! such as nscf, get_wf and get_pchg - virtual void others(UnitCell& ucell, const int istep) {}; + virtual void others(UnitCell& ucell, const int istep){}; //! calculate total energy of a given system virtual double cal_energy() = 0; @@ -50,7 +50,7 @@ class ESolver * @brief A subrutine called in init_esolver() * This function returns type of ESolver * Based on PARAM.inp.basis_type and PARAM.inp.esolver_type - * + * * @return [out] std::string The type of ESolver */ std::string determine_type(); diff --git a/source/source_esolver/esolver_dm2rho.cpp b/source/source_esolver/esolver_dm2rho.cpp index 2a10c71306..d13f1db50b 100644 --- a/source/source_esolver/esolver_dm2rho.cpp +++ b/source/source_esolver/esolver_dm2rho.cpp @@ -1,6 +1,5 @@ #include "esolver_dm2rho.h" -#include "module_base/timer.h" #include "module_cell/module_neighbor/sltk_atom_arrange.h" #include "module_elecstate/elecstate_lcao.h" #include "module_elecstate/read_pseudo.h" @@ -10,6 +9,7 @@ #include "module_io/cube_io.h" #include "module_io/io_npz.h" #include "module_io/print_info.h" +#include "source_base/timer.h" namespace ModuleESolver { diff --git a/source/source_esolver/esolver_dp.cpp b/source/source_esolver/esolver_dp.cpp index 1ca9939c35..490e4d40ec 100644 --- a/source/source_esolver/esolver_dp.cpp +++ b/source/source_esolver/esolver_dp.cpp @@ -18,11 +18,10 @@ * @date 2023-05-15 */ #include "esolver_dp.h" - -#include "module_base/parallel_common.h" -#include "module_base/timer.h" -#include "module_io/output_log.h" #include "module_io/cif_io.h" +#include "module_io/output_log.h" +#include "source_base/parallel_common.h" +#include "source_base/timer.h" #include #include @@ -36,8 +35,8 @@ void ESolver_DP::before_all_runners(UnitCell& ucell, const Input_para& inp) dp_force.create(ucell.nat, 3); dp_virial.create(3, 3); - ModuleIO::CifParser::write(PARAM.globalv.global_out_dir + "STRU.cif", - ucell, + ModuleIO::CifParser::write(PARAM.globalv.global_out_dir + "STRU.cif", + ucell, "# Generated by ABACUS ModuleIO::CifParser", "data_?"); diff --git a/source/source_esolver/esolver_fp.cpp b/source/source_esolver/esolver_fp.cpp index 5aebb6724e..45c02390fa 100644 --- a/source/source_esolver/esolver_fp.cpp +++ b/source/source_esolver/esolver_fp.cpp @@ -1,6 +1,6 @@ #include "esolver_fp.h" -#include "module_base/global_variable.h" +#include "module_cell/k_vector_utils.h" #include "module_elecstate/cal_ux.h" #include "module_elecstate/module_charge/symmetry_rho.h" #include "module_elecstate/read_pseudo.h" @@ -17,7 +17,7 @@ #include "module_io/write_elecstat_pot.h" #include "module_io/write_elf.h" #include "module_parameter/parameter.h" -#include "module_cell/k_vector_utils.h" +#include "source_base/global_variable.h" #ifdef USE_LIBXC #include "module_io/write_libxc_r.h" @@ -50,24 +50,24 @@ void ESolver_FP::before_all_runners(UnitCell& ucell, const Input_para& inp) std::string fft_device = PARAM.inp.device; std::string fft_precison = PARAM.inp.precision; // LCAO basis doesn't support GPU acceleration on FFT currently - if(PARAM.inp.basis_type == "lcao") + if (PARAM.inp.basis_type == "lcao") { fft_device = "cpu"; } - if ((PARAM.inp.precision=="single") || (PARAM.inp.precision=="mixing")) + if ((PARAM.inp.precision == "single") || (PARAM.inp.precision == "mixing")) { fft_precison = "mixing"; } - else if (PARAM.inp.precision=="double") + else if (PARAM.inp.precision == "double") { fft_precison = "double"; } - #if (not defined(__ENABLE_FLOAT_FFTW) and (defined(__CUDA) || defined(__RCOM))) - if (fft_device == "gpu") - { - fft_precison = "double"; - } - #endif +#if (not defined(__ENABLE_FLOAT_FFTW) and (defined(__CUDA) || defined(__RCOM))) + if (fft_device == "gpu") + { + fft_precison = "double"; + } +#endif pw_rho = new ModulePW::PW_Basis_Big(fft_device, fft_precison); pw_rho_flag = true; if (PARAM.globalv.double_grid) @@ -110,7 +110,7 @@ void ESolver_FP::before_all_runners(UnitCell& ucell, const Input_para& inp) this->pw_rho->collect_uniqgg(); //! 3) initialize the double grid (for uspp) if necessary - if ( PARAM.globalv.double_grid) + if (PARAM.globalv.double_grid) { ModulePW::PW_Basis_Sup* pw_rhod_sup = static_cast(pw_rhod); #ifdef __MPI @@ -170,7 +170,7 @@ void ESolver_FP::after_scf(UnitCell& ucell, const int istep, const bool conv_eso for (int is = 0; is < PARAM.inp.nspin; is++) { this->pw_rhod->real2recip(this->chr.rho_save[is], this->chr.rhog_save[is]); - std::string fn =PARAM.globalv.global_out_dir + "/chgs" + std::to_string(is + 1) + ".cube"; + std::string fn = PARAM.globalv.global_out_dir + "/chgs" + std::to_string(is + 1) + ".cube"; ModuleIO::write_vdata_palgrid(Pgrid, this->chr.rho_save[is], is, @@ -184,7 +184,7 @@ void ESolver_FP::after_scf(UnitCell& ucell, const int istep, const bool conv_eso if (XC_Functional::get_ked_flag()) { - fn =PARAM.globalv.global_out_dir + "/taus" + std::to_string(is + 1) + ".cube"; + fn = PARAM.globalv.global_out_dir + "/taus" + std::to_string(is + 1) + ".cube"; ModuleIO::write_vdata_palgrid(Pgrid, this->chr.kin_r_save[is], is, @@ -202,7 +202,7 @@ void ESolver_FP::after_scf(UnitCell& ucell, const int istep, const bool conv_eso { for (int is = 0; is < PARAM.inp.nspin; is++) { - std::string fn =PARAM.globalv.global_out_dir + "/pots" + std::to_string(is + 1) + ".cube"; + std::string fn = PARAM.globalv.global_out_dir + "/pots" + std::to_string(is + 1) + ".cube"; ModuleIO::write_vdata_palgrid(Pgrid, this->pelec->pot->get_effective_v(is), @@ -218,7 +218,7 @@ void ESolver_FP::after_scf(UnitCell& ucell, const int istep, const bool conv_eso } else if (PARAM.inp.out_pot == 2) { - std::string fn =PARAM.globalv.global_out_dir + "/pot_es.cube"; + std::string fn = PARAM.globalv.global_out_dir + "/pot_es.cube"; ModuleIO::write_elecstat_pot( #ifdef __MPI this->pw_big->bz, @@ -243,7 +243,7 @@ void ESolver_FP::after_scf(UnitCell& ucell, const int istep, const bool conv_eso srho.begin(is, this->chr, this->pw_rhod, ucell.symm); } - std::string out_dir =PARAM.globalv.global_out_dir; + std::string out_dir = PARAM.globalv.global_out_dir; ModuleIO::write_elf( #ifdef __MPI this->pw_big->bz, @@ -262,17 +262,16 @@ void ESolver_FP::after_scf(UnitCell& ucell, const int istep, const bool conv_eso #ifdef USE_LIBXC // 7) write xc(r) - if(PARAM.inp.out_xc_r[0]>=0) + if (PARAM.inp.out_xc_r[0] >= 0) { - ModuleIO::write_libxc_r( - PARAM.inp.out_xc_r[0], - XC_Functional::get_func_id(), - this->pw_rhod->nrxx, // number of real-space grid - ucell.omega, // volume of cell - ucell.tpiba, - this->chr, - *this->pw_big, - *this->pw_rhod); + ModuleIO::write_libxc_r(PARAM.inp.out_xc_r[0], + XC_Functional::get_func_id(), + this->pw_rhod->nrxx, // number of real-space grid + ucell.omega, // volume of cell + ucell.tpiba, + this->chr, + *this->pw_big, + *this->pw_rhod); } #endif } @@ -323,12 +322,8 @@ void ESolver_FP::before_scf(UnitCell& ucell, const int istep) if (ucell.ionic_position_updated) { this->CE.update_all_dis(ucell); - this->CE.extrapolate_charge(&this->Pgrid, - ucell, - &this->chr, - &this->sf, - GlobalV::ofs_running, - GlobalV::ofs_warning); + this->CE + .extrapolate_charge(&this->Pgrid, ucell, &this->chr, &this->sf, GlobalV::ofs_running, GlobalV::ofs_warning); } //---------------------------------------------------------- @@ -349,7 +344,7 @@ void ESolver_FP::before_scf(UnitCell& ucell, const int istep) } //---------------------------------------------------------- - //! set direction of magnetism, used in non-collinear case + //! set direction of magnetism, used in non-collinear case //---------------------------------------------------------- elecstate::cal_ux(ucell); diff --git a/source/source_esolver/esolver_gets.cpp b/source/source_esolver/esolver_gets.cpp index 734790ca1c..760e82f99f 100644 --- a/source/source_esolver/esolver_gets.cpp +++ b/source/source_esolver/esolver_gets.cpp @@ -1,6 +1,5 @@ #include "esolver_gets.h" -#include "module_base/timer.h" #include "module_cell/module_neighbor/sltk_atom_arrange.h" #include "module_elecstate/elecstate_lcao.h" #include "module_elecstate/read_pseudo.h" @@ -10,6 +9,7 @@ #include "module_io/cal_r_overlap_R.h" #include "module_io/print_info.h" #include "module_io/write_HS_R.h" +#include "source_base/timer.h" namespace ModuleESolver { @@ -154,12 +154,12 @@ void ESolver_GetS::runner(UnitCell& ucell, const int istep) ModuleBase::timer::tick("ESolver_GetS", "runner"); } -void ESolver_GetS::after_all_runners(UnitCell& ucell) {}; +void ESolver_GetS::after_all_runners(UnitCell& ucell){}; double ESolver_GetS::cal_energy() { return 0.0; }; -void ESolver_GetS::cal_force(UnitCell& ucell, ModuleBase::matrix& force) {}; -void ESolver_GetS::cal_stress(UnitCell& ucell, ModuleBase::matrix& stress) {}; +void ESolver_GetS::cal_force(UnitCell& ucell, ModuleBase::matrix& force){}; +void ESolver_GetS::cal_stress(UnitCell& ucell, ModuleBase::matrix& stress){}; } // namespace ModuleESolver diff --git a/source/source_esolver/esolver_ks.cpp b/source/source_esolver/esolver_ks.cpp index 9bfca23bfd..5e3ba916c6 100644 --- a/source/source_esolver/esolver_ks.cpp +++ b/source/source_esolver/esolver_ks.cpp @@ -1,19 +1,17 @@ #include "esolver_ks.h" // To setup plane wave for electronic wave functions -#include "pw_setup.h" - -#include "module_base/timer.h" -#include "module_base/global_variable.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" -#include "module_parameter/parameter.h" -#include "module_hamilt_lcao/module_dftu/dftu.h" - #include "module_cell/cal_atoms_info.h" #include "module_elecstate/elecstate_print.h" #include "module_hamilt_general/module_xc/xc_functional.h" -#include "source_hsolver/hsolver.h" +#include "module_hamilt_lcao/module_dftu/dftu.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/cube_io.h" +#include "module_parameter/parameter.h" +#include "pw_setup.h" +#include "source_base/global_variable.h" +#include "source_base/timer.h" +#include "source_hsolver/hsolver.h" // for NSCF calculations of band structures #include "module_io/nscf_band.h" @@ -25,8 +23,6 @@ #include "module_io/json_output/init_info.h" #include "module_io/json_output/output_info.h" - - namespace ModuleESolver { @@ -35,7 +31,6 @@ ESolver_KS::ESolver_KS() { } - template ESolver_KS::~ESolver_KS() { @@ -46,14 +41,13 @@ ESolver_KS::~ESolver_KS() this->ppcell.release_memory(); } - template void ESolver_KS::before_all_runners(UnitCell& ucell, const Input_para& inp) { ModuleBase::TITLE("ESolver_KS", "before_all_runners"); //! 1) initialize "before_all_runniers" in ESolver_FP ESolver_FP::before_all_runners(ucell, inp); - + classname = "ESolver_KS"; basisname = ""; @@ -67,7 +61,7 @@ void ESolver_KS::before_all_runners(UnitCell& ucell, const Input_para // Fast Fourier Transform // LCAO basis doesn't support GPU acceleration on FFT currently - if(PARAM.inp.basis_type == "lcao") + if (PARAM.inp.basis_type == "lcao") { fft_device = "cpu"; } @@ -94,12 +88,11 @@ void ESolver_KS::before_all_runners(UnitCell& ucell, const Input_para // cell_factor this->ppcell.cell_factor = PARAM.inp.cell_factor; - //! 3) it has been established that // xc_func is same for all elements, therefore // only the first one if used XC_Functional::set_xc_type(ucell.atoms[0].ncpp.xc_func); - + ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "SETUP UNITCELL"); //! 4) setup the charge mixing parameters @@ -127,7 +120,8 @@ void ESolver_KS::before_all_runners(UnitCell& ucell, const Input_para } //! 6) Setup the k points according to symmetry. - this->kv.set(ucell,ucell.symm, PARAM.inp.kpoint_file, PARAM.inp.nspin, ucell.G, ucell.latvec, GlobalV::ofs_running); + this->kv + .set(ucell, ucell.symm, PARAM.inp.kpoint_file, PARAM.inp.nspin, ucell.G, ucell.latvec, GlobalV::ofs_running); ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "INIT K-POINTS"); //! 7) print information @@ -138,13 +132,13 @@ void ESolver_KS::before_all_runners(UnitCell& ucell, const Input_para //! 9) initialize the real-space uniform grid for FFT and parallel //! distribution of plane waves - Pgrid.init(this->pw_rhod->nx, - this->pw_rhod->ny, - this->pw_rhod->nz, - this->pw_rhod->nplane, - this->pw_rhod->nrxx, - pw_big->nbz, - pw_big->bz); + Pgrid.init(this->pw_rhod->nx, + this->pw_rhod->ny, + this->pw_rhod->nz, + this->pw_rhod->nplane, + this->pw_rhod->nrxx, + pw_big->nbz, + pw_big->bz); //! 10) calculate the structure factor this->sf.setup_structure_factor(&ucell, Pgrid, this->pw_rhod); @@ -239,24 +233,24 @@ void ESolver_KS::runner(UnitCell& ucell, const int istep) this->diag_ethr = PARAM.inp.pw_diag_thr; for (int iter = 1; iter <= this->maxniter; ++iter) { - //---------------------------------------------------------------- - // 3) initialization of SCF iterations - //---------------------------------------------------------------- - this->iter_init(ucell, istep, iter); + //---------------------------------------------------------------- + // 3) initialization of SCF iterations + //---------------------------------------------------------------- + this->iter_init(ucell, istep, iter); - //---------------------------------------------------------------- + //---------------------------------------------------------------- // 4) use Hamiltonian to obtain charge density - //---------------------------------------------------------------- + //---------------------------------------------------------------- this->hamilt2rho(ucell, istep, iter, diag_ethr); - //---------------------------------------------------------------- + //---------------------------------------------------------------- // 5) finish scf iterations - //---------------------------------------------------------------- + //---------------------------------------------------------------- this->iter_finish(ucell, istep, iter, conv_esolver); - //---------------------------------------------------------------- + //---------------------------------------------------------------- // 6) check convergence - //---------------------------------------------------------------- + //---------------------------------------------------------------- if (conv_esolver || this->oscillate_esolver) { this->niter = iter; @@ -268,9 +262,9 @@ void ESolver_KS::runner(UnitCell& ucell, const int istep) } } // end scf iterations - //---------------------------------------------------------------- - // 7) after scf - //---------------------------------------------------------------- + //---------------------------------------------------------------- + // 7) after scf + //---------------------------------------------------------------- this->after_scf(ucell, istep, conv_esolver); ModuleBase::timer::tick(this->classname, "runner"); @@ -329,11 +323,11 @@ void ESolver_KS::iter_init(UnitCell& ucell, const int istep, const in } template -void ESolver_KS::iter_finish(UnitCell& ucell, const int istep, int& iter, bool &conv_esolver) +void ESolver_KS::iter_finish(UnitCell& ucell, const int istep, int& iter, bool& conv_esolver) { - //---------------------------------------------------------------- - // 1) print out band gap - //---------------------------------------------------------------- + //---------------------------------------------------------------- + // 1) print out band gap + //---------------------------------------------------------------- if (PARAM.inp.out_bandgap) { if (!PARAM.globalv.two_fermi) @@ -351,24 +345,24 @@ void ESolver_KS::iter_finish(UnitCell& ucell, const int istep, int& i elecstate::print_band(this->pelec->ekb, this->pelec->wg, this->pelec->klist, - ik, - PARAM.inp.printe, + ik, + PARAM.inp.printe, iter, GlobalV::ofs_running); } - //---------------------------------------------------------------- + //---------------------------------------------------------------- // 2) compute magnetization, only for LSDA(spin==2) - //---------------------------------------------------------------- + //---------------------------------------------------------------- ucell.magnet.compute_mag(ucell.omega, - this->chr.nrxx, - this->chr.nxyz, - this->chr.rho, - this->pelec->nelec_spin.data()); - - //---------------------------------------------------------------- - // 3) charge mixing - //---------------------------------------------------------------- + this->chr.nrxx, + this->chr.nxyz, + this->chr.rho, + this->pelec->nelec_spin.data()); + + //---------------------------------------------------------------- + // 3) charge mixing + //---------------------------------------------------------------- if (PARAM.globalv.ks_run) { // mixing will restart at this->p_chgmix->mixing_restart steps @@ -413,8 +407,7 @@ void ESolver_KS::iter_finish(UnitCell& ucell, const int istep, int& i if (iter > 1 && conv_esolver == 1) // only check when density is converged { // update the convergence flag - conv_esolver - = (std::abs(this->pelec->f_en.etot_delta * ModuleBase::Ry_to_eV) < this->scf_ene_thr); + conv_esolver = (std::abs(this->pelec->f_en.etot_delta * ModuleBase::Ry_to_eV) < this->scf_ene_thr); } } @@ -446,7 +439,7 @@ void ESolver_KS::iter_finish(UnitCell& ucell, const int istep, int& i if (PARAM.inp.scf_thr_type == 2) { this->chr.renormalize_rho(); // renormalize rho in R-space would - // induce a error in K-space + // induce a error in K-space } //----------charge mixing done----------- } @@ -455,21 +448,21 @@ void ESolver_KS::iter_finish(UnitCell& ucell, const int istep, int& i #ifdef __MPI MPI_Bcast(&drho, 1, MPI_DOUBLE, 0, BP_WORLD); - // change MPI_DOUBLE to MPI_C_BOOL, mohan 2025-04-13 + // change MPI_DOUBLE to MPI_C_BOOL, mohan 2025-04-13 MPI_Bcast(&conv_esolver, 1, MPI_C_BOOL, 0, BP_WORLD); MPI_Bcast(this->chr.rho[0], this->pw_rhod->nrxx, MPI_DOUBLE, 0, BP_WORLD); #endif - //---------------------------------------------------------------- + //---------------------------------------------------------------- // 4) Update potentials (should be done every SF iter) - //---------------------------------------------------------------- + //---------------------------------------------------------------- // Hamilt should be used after it is constructed. // this->phamilt->update(conv_esolver); this->update_pot(ucell, istep, iter, conv_esolver); - //---------------------------------------------------------------- + //---------------------------------------------------------------- // 5) calculate energies - //---------------------------------------------------------------- + //---------------------------------------------------------------- // 1 means Harris-Foulkes functional // 2 means Kohn-Sham functional this->pelec->cal_energies(1); @@ -481,11 +474,9 @@ void ESolver_KS::iter_finish(UnitCell& ucell, const int istep, int& i this->pelec->f_en.etot_delta = this->pelec->f_en.etot - this->pelec->f_en.etot_old; this->pelec->f_en.etot_old = this->pelec->f_en.etot; - - - //---------------------------------------------------------------- - // 6) time and meta-GGA - //---------------------------------------------------------------- + //---------------------------------------------------------------- + // 6) time and meta-GGA + //---------------------------------------------------------------- #ifdef __MPI double duration = (double)(MPI_Wtime() - iter_time); #else @@ -502,13 +493,12 @@ void ESolver_KS::iter_finish(UnitCell& ucell, const int istep, int& i } // pint energy - elecstate::print_etot(ucell.magnet, *pelec,conv_esolver, iter, drho, dkin, duration, PARAM.inp.printe, diag_ethr); - + elecstate::print_etot(ucell.magnet, *pelec, conv_esolver, iter, drho, dkin, duration, PARAM.inp.printe, diag_ethr); #ifdef __RAPIDJSON - //---------------------------------------------------------------- + //---------------------------------------------------------------- // 7) add Json of scf mag - //---------------------------------------------------------------- + //---------------------------------------------------------------- Json::add_output_scf_mag(ucell.magnet.tot_mag, ucell.magnet.abs_mag, this->pelec->f_en.etot * ModuleBase::Ry_to_eV, @@ -517,21 +507,18 @@ void ESolver_KS::iter_finish(UnitCell& ucell, const int istep, int& i duration); #endif //__RAPIDJSON - - //---------------------------------------------------------------- - // 7) SCF restart information - //---------------------------------------------------------------- - if (PARAM.inp.mixing_restart > 0 - && iter == this->p_chgmix->mixing_restart_step - 1 - && iter != PARAM.inp.scf_nmax) + //---------------------------------------------------------------- + // 7) SCF restart information + //---------------------------------------------------------------- + if (PARAM.inp.mixing_restart > 0 && iter == this->p_chgmix->mixing_restart_step - 1 && iter != PARAM.inp.scf_nmax) { this->p_chgmix->mixing_restart_last = iter; std::cout << " SCF restart after this step!" << std::endl; } - //---------------------------------------------------------------- - // 8) Iter finish - //---------------------------------------------------------------- + //---------------------------------------------------------------- + // 8) Iter finish + //---------------------------------------------------------------- ESolver_FP::iter_finish(ucell, istep, iter, conv_esolver); } @@ -540,21 +527,21 @@ template void ESolver_KS::after_scf(UnitCell& ucell, const int istep, const bool conv_esolver) { ModuleBase::TITLE("ESolver_KS", "after_scf"); - + // 1) calculate the kinetic energy density tau if (PARAM.inp.out_elf[0] > 0) { assert(this->psi != nullptr); this->pelec->cal_tau(*(this->psi)); } - + // 2) call after_scf() of ESolver_FP ESolver_FP::after_scf(ucell, istep, conv_esolver); // 3) write eigenvalues if (istep % PARAM.inp.out_interval == 0) { -// elecstate::print_eigenvalue(this->pelec->ekb,this->pelec->wg,this->pelec->klist,GlobalV::ofs_running); + // elecstate::print_eigenvalue(this->pelec->ekb,this->pelec->wg,this->pelec->klist,GlobalV::ofs_running); } } diff --git a/source/source_esolver/esolver_ks_lcao.cpp b/source/source_esolver/esolver_ks_lcao.cpp index ab4bac8ae7..8a295de89b 100644 --- a/source/source_esolver/esolver_ks_lcao.cpp +++ b/source/source_esolver/esolver_ks_lcao.cpp @@ -1,12 +1,6 @@ #include "esolver_ks_lcao.h" -#include "module_io/write_proj_band_lcao.h" // projcted band structure - -#include "module_base/formatter.h" -#include "module_base/global_variable.h" -#include "module_base/tool_title.h" #include "module_elecstate/elecstate_tools.h" - #include "module_elecstate/module_dm/cal_dm_psi.h" #include "module_hamilt_lcao/module_deltaspin/spin_constrain.h" #include "module_hamilt_lcao/module_dftu/dftu.h" @@ -26,23 +20,26 @@ #include "module_io/to_wannier90_lcao_in_pw.h" #include "module_io/write_HS.h" #include "module_io/write_elecstat_pot.h" +#include "module_io/write_proj_band_lcao.h" // projcted band structure #include "module_parameter/parameter.h" +#include "source_base/formatter.h" +#include "source_base/global_variable.h" +#include "source_base/tool_title.h" // be careful of hpp, there may be multiple definitions of functions, 20250302, mohan -#include "module_hamilt_lcao/hamilt_lcaodft/hs_matrix_k.hpp" -#include "module_io/write_eband_terms.hpp" -#include "module_io/write_vxc.hpp" -#include "module_io/write_vxc_r.hpp" - -#include "module_base/global_function.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_elecstate/cal_ux.h" #include "module_elecstate/module_charge/symmetry_rho.h" #include "module_elecstate/occupy.h" #include "module_hamilt_lcao/hamilt_lcaodft/LCAO_domain.h" // need DeePKS_init +#include "module_hamilt_lcao/hamilt_lcaodft/hs_matrix_k.hpp" #include "module_hamilt_lcao/module_dftu/dftu.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/print_info.h" +#include "module_io/write_eband_terms.hpp" +#include "module_io/write_vxc.hpp" +#include "module_io/write_vxc_r.hpp" +#include "source_base/global_function.h" #include @@ -160,14 +157,14 @@ void ESolver_KS_LCAO::before_all_runners(UnitCell& ucell, const Input_pa // 5) read psi from file if (PARAM.inp.init_wfc == "file") - { - if (!ModuleIO::read_wfc_nao(PARAM.globalv.global_readin_dir, - this->pv, - *(this->psi), - this->pelec, - this->pelec->klist->ik2iktot, - this->pelec->klist->get_nkstot(), - PARAM.inp.nspin)) + { + if (!ModuleIO::read_wfc_nao(PARAM.globalv.global_readin_dir, + this->pv, + *(this->psi), + this->pelec, + this->pelec->klist->ik2iktot, + this->pelec->klist->get_nkstot(), + PARAM.inp.nspin)) { ModuleBase::WARNING_QUIT("ESolver_KS_LCAO", "read electronic wave functions failed"); } diff --git a/source/source_esolver/esolver_ks_lcao_tddft.cpp b/source/source_esolver/esolver_ks_lcao_tddft.cpp index b338d7e2dc..f66aac1ef9 100644 --- a/source/source_esolver/esolver_ks_lcao_tddft.cpp +++ b/source/source_esolver/esolver_ks_lcao_tddft.cpp @@ -1,17 +1,13 @@ #include "esolver_ks_lcao_tddft.h" +#include "module_elecstate/elecstate_tools.h" #include "module_io/cal_r_overlap_R.h" #include "module_io/dipole_io.h" #include "module_io/td_current_io.h" #include "module_io/write_HS.h" #include "module_io/write_HS_R.h" -#include "module_elecstate/elecstate_tools.h" //--------------temporary---------------------------- -#include "module_base/blas_connector.h" -#include "module_base/global_function.h" -#include "module_base/lapack_connector.h" -#include "module_base/scalapack_connector.h" #include "module_elecstate/module_charge/symmetry_rho.h" #include "module_elecstate/module_dm/cal_dm_psi.h" #include "module_elecstate/module_dm/cal_edm_tddft.h" @@ -21,14 +17,18 @@ #include "module_hamilt_lcao/module_tddft/td_velocity.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/print_info.h" +#include "source_base/blas_connector.h" +#include "source_base/global_function.h" +#include "source_base/lapack_connector.h" +#include "source_base/scalapack_connector.h" //-----HSolver ElecState Hamilt-------- #include "module_elecstate/cal_ux.h" #include "module_elecstate/elecstate_lcao.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" -#include "source_hsolver/hsolver_lcao.h" #include "module_parameter/parameter.h" #include "module_psi/psi.h" +#include "source_hsolver/hsolver_lcao.h" //-----force& stress------------------- #include "module_hamilt_lcao/hamilt_lcaodft/FORCE_STRESS.h" @@ -87,9 +87,9 @@ void ESolver_KS_LCAO_TDDFT::before_all_runners(UnitCell& ucell, const In template void ESolver_KS_LCAO_TDDFT::hamilt2rho_single(UnitCell& ucell, - const int istep, - const int iter, - const double ethr) + const int istep, + const int iter, + const double ethr) { if (PARAM.inp.init_wfc == "file") { @@ -163,17 +163,12 @@ void ESolver_KS_LCAO_TDDFT::hamilt2rho_single(UnitCell& ucell, } template -void ESolver_KS_LCAO_TDDFT::iter_finish( - UnitCell& ucell, - const int istep, - int& iter, - bool& conv_esolver) +void ESolver_KS_LCAO_TDDFT::iter_finish(UnitCell& ucell, const int istep, int& iter, bool& conv_esolver) { // print occupation of each band if (iter == 1 && istep <= 2) { - GlobalV::ofs_running << " ---------------------------------------------------------" - << std::endl; + GlobalV::ofs_running << " ---------------------------------------------------------" << std::endl; GlobalV::ofs_running << " occupations of electrons" << std::endl; GlobalV::ofs_running << " k-point state occupation" << std::endl; GlobalV::ofs_running << std::setiosflags(std::ios::showpoint); @@ -183,23 +178,21 @@ void ESolver_KS_LCAO_TDDFT::iter_finish( { for (int ib = 0; ib < PARAM.inp.nbands; ib++) { - GlobalV::ofs_running << " " << std::setw(9) - << ik+1 << std::setw(8) << ib + 1 - << std::setw(12) << this->pelec->wg(ik, ib) << std::endl; + GlobalV::ofs_running << " " << std::setw(9) << ik + 1 << std::setw(8) << ib + 1 << std::setw(12) + << this->pelec->wg(ik, ib) << std::endl; } } - GlobalV::ofs_running << " ---------------------------------------------------------" - << std::endl; + GlobalV::ofs_running << " ---------------------------------------------------------" << std::endl; } ESolver_KS_LCAO, double>::iter_finish(ucell, istep, iter, conv_esolver); } template -void ESolver_KS_LCAO_TDDFT::update_pot(UnitCell& ucell, - const int istep, - const int iter, - const bool conv_esolver) +void ESolver_KS_LCAO_TDDFT::update_pot(UnitCell& ucell, + const int istep, + const int iter, + const bool conv_esolver) { // Calculate new potential according to new Charge Density if (!conv_esolver) @@ -234,7 +227,6 @@ void ESolver_KS_LCAO_TDDFT::update_pot(UnitCell& ucell, nrow_tmp = nlocal; #endif this->psi_laststep = new psi::Psi>(kv.get_nks(), ncol_tmp, nrow_tmp, kv.ngk, true); - } // allocate memory for Hk_laststep and Sk_laststep @@ -323,31 +315,31 @@ void ESolver_KS_LCAO_TDDFT::update_pot(UnitCell& ucell, } // print "eigen value" for tddft -// it seems uncessary to print out E_ii because the band energies are printed -/* - if (conv_esolver) - { - GlobalV::ofs_running << "----------------------------------------------------------" - << std::endl; - GlobalV::ofs_running << " Print E= " << std::endl; - GlobalV::ofs_running << " k-point state energy (eV)" << std::endl; - GlobalV::ofs_running << "----------------------------------------------------------" - << std::endl; - GlobalV::ofs_running << std::setprecision(6); - GlobalV::ofs_running << std::setiosflags(std::ios::showpoint); - - for (int ik = 0; ik < kv.get_nks(); ik++) + // it seems uncessary to print out E_ii because the band energies are printed + /* + if (conv_esolver) { - for (int ib = 0; ib < PARAM.inp.nbands; ib++) + GlobalV::ofs_running << "----------------------------------------------------------" + << std::endl; + GlobalV::ofs_running << " Print E= " << std::endl; + GlobalV::ofs_running << " k-point state energy (eV)" << std::endl; + GlobalV::ofs_running << "----------------------------------------------------------" + << std::endl; + GlobalV::ofs_running << std::setprecision(6); + GlobalV::ofs_running << std::setiosflags(std::ios::showpoint); + + for (int ik = 0; ik < kv.get_nks(); ik++) { - GlobalV::ofs_running << " " << std::setw(7) << ik + 1 - << std::setw(7) << ib + 1 - << std::setw(10) << this->pelec->ekb(ik, ib) * ModuleBase::Ry_to_eV - << std::endl; + for (int ib = 0; ib < PARAM.inp.nbands; ib++) + { + GlobalV::ofs_running << " " << std::setw(7) << ik + 1 + << std::setw(7) << ib + 1 + << std::setw(10) << this->pelec->ekb(ik, ib) * ModuleBase::Ry_to_eV + << std::endl; + } } } - } -*/ + */ } template @@ -365,16 +357,11 @@ void ESolver_KS_LCAO_TDDFT::after_scf(UnitCell& ucell, const int istep, { std::stringstream ss_dipole; ss_dipole << PARAM.globalv.global_out_dir << "SPIN" << is + 1 << "_DIPOLE"; - ModuleIO::write_dipole(ucell, - this->chr.rho_save[is], - this->chr.rhopw, - is, - istep, - ss_dipole.str()); + ModuleIO::write_dipole(ucell, this->chr.rho_save[is], this->chr.rhopw, is, istep, ss_dipole.str()); } } - // (2) write current information + // (2) write current information if (TD_Velocity::out_current == true) { elecstate::DensityMatrix, double>* tmp_DM @@ -392,7 +379,6 @@ void ESolver_KS_LCAO_TDDFT::after_scf(UnitCell& ucell, const int istep, this->RA); } - ModuleBase::timer::tick("ESolver_LCAO_TDDFT", "after_scf"); } @@ -410,7 +396,7 @@ void ESolver_KS_LCAO_TDDFT::weight_dm_rho() } // calculate Eband energy - elecstate::calEBand(this->pelec->ekb,this->pelec->wg,this->pelec->f_en); + elecstate::calEBand(this->pelec->ekb, this->pelec->wg, this->pelec->f_en); // calculate the density matrix ModuleBase::GlobalFunc::NOTE("Calculate the density matrix."); diff --git a/source/source_esolver/esolver_ks_lcao_tddft.h b/source/source_esolver/esolver_ks_lcao_tddft.h index 862b16a6ca..b8fdfab183 100644 --- a/source/source_esolver/esolver_ks_lcao_tddft.h +++ b/source/source_esolver/esolver_ks_lcao_tddft.h @@ -2,9 +2,9 @@ #define ESOLVER_KS_LCAO_TDDFT_H #include "esolver_ks.h" #include "esolver_ks_lcao.h" -#include "module_base/scalapack_connector.h" // Cpxgemr2d #include "module_hamilt_lcao/hamilt_lcaodft/record_adj.h" #include "module_psi/psi.h" +#include "source_base/scalapack_connector.h" // Cpxgemr2d namespace ModuleESolver { diff --git a/source/source_esolver/esolver_ks_lcaopw.cpp b/source/source_esolver/esolver_ks_lcaopw.cpp index 2f07137996..3afa483523 100644 --- a/source/source_esolver/esolver_ks_lcaopw.cpp +++ b/source/source_esolver/esolver_ks_lcaopw.cpp @@ -18,14 +18,9 @@ //-----stress------------------ #include "module_hamilt_pw/hamilt_pwdft/stress_pw.h" //--------------------------------------------------- -#include "module_base/memory.h" #include "module_elecstate/elecstate_pw.h" #include "module_hamilt_pw/hamilt_pwdft/hamilt_lcaopw.h" #include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" -#include "source_hsolver/diago_iter_assist.h" -#include "source_hsolver/hsolver_lcaopw.h" -#include "source_hsolver/kernels/dngvd_op.h" -#include "module_base/kernels/math_kernel_op.h" #include "module_io/berryphase.h" #include "module_io/numerical_basis.h" #include "module_io/numerical_descriptor.h" @@ -34,6 +29,11 @@ #include "module_io/write_elecstat_pot.h" #include "module_io/write_wfc_r.h" #include "module_parameter/parameter.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/memory.h" +#include "source_hsolver/diago_iter_assist.h" +#include "source_hsolver/hsolver_lcaopw.h" +#include "source_hsolver/kernels/dngvd_op.h" #include #include @@ -45,225 +45,232 @@ namespace ModuleESolver { - template - ESolver_KS_LIP::ESolver_KS_LIP() - { - this->classname = "ESolver_KS_LIP"; - this->basisname = "LIP"; - } - template - ESolver_KS_LIP::~ESolver_KS_LIP() - { - delete this->psi_local; - // delete Hamilt - this->deallocate_hamilt(); - } +template +ESolver_KS_LIP::ESolver_KS_LIP() +{ + this->classname = "ESolver_KS_LIP"; + this->basisname = "LIP"; +} +template +ESolver_KS_LIP::~ESolver_KS_LIP() +{ + delete this->psi_local; + // delete Hamilt + this->deallocate_hamilt(); +} - template - void ESolver_KS_LIP::allocate_hamilt(const UnitCell& ucell) - { - this->p_hamilt = new hamilt::HamiltLIP(this->pelec->pot, this->pw_wfc, &this->kv, &this->ppcell, &ucell +template +void ESolver_KS_LIP::allocate_hamilt(const UnitCell& ucell) +{ + this->p_hamilt = new hamilt::HamiltLIP(this->pelec->pot, + this->pw_wfc, + &this->kv, + &this->ppcell, + &ucell #ifdef __EXX - , *this->exx_lip + , + *this->exx_lip #endif - ); + ); +} +template +void ESolver_KS_LIP::deallocate_hamilt() +{ + if (this->p_hamilt != nullptr) + { + delete reinterpret_cast*>(this->p_hamilt); + this->p_hamilt = nullptr; } - template - void ESolver_KS_LIP::deallocate_hamilt() +} +template +void ESolver_KS_LIP::before_scf(UnitCell& ucell, const int istep) +{ + ESolver_KS_PW::before_scf(ucell, istep); + this->p_psi_init->initialize_lcao_in_pw(this->psi_local, GlobalV::ofs_running); +} + +template +void ESolver_KS_LIP::before_all_runners(UnitCell& ucell, const Input_para& inp) +{ + ESolver_KS_PW::before_all_runners(ucell, inp); + delete this->psi_local; + this->psi_local = new psi::Psi(this->psi->get_nk(), + this->p_psi_init->psi_initer->nbands_start(), + this->psi->get_nbasis(), + this->kv.ngk, + true); +#ifdef __EXX + if (PARAM.inp.calculation == "scf" || PARAM.inp.calculation == "relax" || PARAM.inp.calculation == "cell-relax" + || PARAM.inp.calculation == "md") { - if (this->p_hamilt != nullptr) + if (GlobalC::exx_info.info_global.cal_exx) { - delete reinterpret_cast*>(this->p_hamilt); - this->p_hamilt = nullptr; + XC_Functional::set_xc_first_loop(ucell); + this->exx_lip = std::unique_ptr>(new Exx_Lip(GlobalC::exx_info.info_lip, + ucell.symm, + &this->kv, + this->psi_local, + this->kspw_psi, + this->pw_wfc, + this->pw_rho, + this->sf, + &ucell, + this->pelec)); + // this->exx_lip.init(GlobalC::exx_info.info_lip, cell.symm, &this->kv, this->p_psi_init, this->kspw_psi, + // this->pw_wfc, this->pw_rho, this->sf, &cell, this->pelec); } } - template - void ESolver_KS_LIP::before_scf(UnitCell& ucell, const int istep) - { - ESolver_KS_PW::before_scf(ucell, istep); - this->p_psi_init->initialize_lcao_in_pw(this->psi_local, GlobalV::ofs_running); - } - - template - void ESolver_KS_LIP::before_all_runners(UnitCell& ucell, const Input_para& inp) - { - ESolver_KS_PW::before_all_runners(ucell, inp); - delete this->psi_local; - this->psi_local = new psi::Psi(this->psi->get_nk(), - this->p_psi_init->psi_initer->nbands_start(), - this->psi->get_nbasis(), - this->kv.ngk, - true); -#ifdef __EXX - if (PARAM.inp.calculation == "scf" || PARAM.inp.calculation == "relax" - || PARAM.inp.calculation == "cell-relax" - || PARAM.inp.calculation == "md") { - if (GlobalC::exx_info.info_global.cal_exx) - { - XC_Functional::set_xc_first_loop(ucell); - this->exx_lip = std::unique_ptr>(new Exx_Lip(GlobalC::exx_info.info_lip, - ucell.symm, - &this->kv, - this->psi_local, - this->kspw_psi, - this->pw_wfc, - this->pw_rho, - this->sf, - &ucell, - this->pelec)); - // this->exx_lip.init(GlobalC::exx_info.info_lip, cell.symm, &this->kv, this->p_psi_init, this->kspw_psi, this->pw_wfc, this->pw_rho, this->sf, &cell, this->pelec); - } -} #endif - } +} - template - void ESolver_KS_LIP::iter_init(UnitCell& ucell, const int istep, const int iter) - { - ESolver_KS_PW::iter_init(ucell, istep, iter); +template +void ESolver_KS_LIP::iter_init(UnitCell& ucell, const int istep, const int iter) +{ + ESolver_KS_PW::iter_init(ucell, istep, iter); #ifdef __EXX - if (GlobalC::exx_info.info_global.cal_exx && !GlobalC::exx_info.info_global.separate_loop && this->two_level_step) { - this->exx_lip->cal_exx(); -} -#endif + if (GlobalC::exx_info.info_global.cal_exx && !GlobalC::exx_info.info_global.separate_loop && this->two_level_step) + { + this->exx_lip->cal_exx(); } +#endif +} - template - void ESolver_KS_LIP::hamilt2rho_single(UnitCell& ucell, const int istep, const int iter, const double ethr) - { - ModuleBase::TITLE("ESolver_KS_LIP", "hamilt2rho_single"); - ModuleBase::timer::tick("ESolver_KS_LIP", "hamilt2rho_single"); +template +void ESolver_KS_LIP::hamilt2rho_single(UnitCell& ucell, const int istep, const int iter, const double ethr) +{ + ModuleBase::TITLE("ESolver_KS_LIP", "hamilt2rho_single"); + ModuleBase::timer::tick("ESolver_KS_LIP", "hamilt2rho_single"); - // reset energy - this->pelec->f_en.eband = 0.0; - this->pelec->f_en.demet = 0.0; - // choose if psi should be diag in subspace - // be careful that istep start from 0 and iter start from 1 - // if (iter == 1) - hsolver::DiagoIterAssist::need_subspace = ((istep == 0 || istep == 1) && iter == 1) ? false : true; - hsolver::DiagoIterAssist::SCF_ITER = iter; - hsolver::DiagoIterAssist::PW_DIAG_THR = ethr; - hsolver::DiagoIterAssist::PW_DIAG_NMAX = PARAM.inp.pw_diag_nmax; - bool skip_charge = PARAM.inp.calculation == "nscf" ? true : false; + // reset energy + this->pelec->f_en.eband = 0.0; + this->pelec->f_en.demet = 0.0; + // choose if psi should be diag in subspace + // be careful that istep start from 0 and iter start from 1 + // if (iter == 1) + hsolver::DiagoIterAssist::need_subspace = ((istep == 0 || istep == 1) && iter == 1) ? false : true; + hsolver::DiagoIterAssist::SCF_ITER = iter; + hsolver::DiagoIterAssist::PW_DIAG_THR = ethr; + hsolver::DiagoIterAssist::PW_DIAG_NMAX = PARAM.inp.pw_diag_nmax; + bool skip_charge = PARAM.inp.calculation == "nscf" ? true : false; - hsolver::HSolverLIP hsolver_lip_obj(this->pw_wfc); - hsolver_lip_obj.solve(this->p_hamilt, this->kspw_psi[0], this->pelec, *this->psi_local, skip_charge,ucell.tpiba,ucell.nat); + hsolver::HSolverLIP hsolver_lip_obj(this->pw_wfc); + hsolver_lip_obj + .solve(this->p_hamilt, this->kspw_psi[0], this->pelec, *this->psi_local, skip_charge, ucell.tpiba, ucell.nat); - // add exx + // add exx #ifdef __EXX - if (GlobalC::exx_info.info_global.cal_exx) - { - this->pelec->set_exx(this->exx_lip->get_exx_energy()); // Peize Lin add 2019-03-09 - } + if (GlobalC::exx_info.info_global.cal_exx) + { + this->pelec->set_exx(this->exx_lip->get_exx_energy()); // Peize Lin add 2019-03-09 + } #endif - Symmetry_rho srho; - for (int is = 0; is < PARAM.inp.nspin; is++) - { - srho.begin(is, this->chr, this->pw_rhod, ucell.symm); - } + Symmetry_rho srho; + for (int is = 0; is < PARAM.inp.nspin; is++) + { + srho.begin(is, this->chr, this->pw_rhod, ucell.symm); + } - // deband is calculated from "output" charge density calculated - // in sum_band - // need 'rho(out)' and 'vr (v_h(in) and v_xc(in))' - this->pelec->f_en.deband = this->pelec->cal_delta_eband(ucell); + // deband is calculated from "output" charge density calculated + // in sum_band + // need 'rho(out)' and 'vr (v_h(in) and v_xc(in))' + this->pelec->f_en.deband = this->pelec->cal_delta_eband(ucell); - ModuleBase::timer::tick("ESolver_KS_LIP", "hamilt2rho_single"); - } + ModuleBase::timer::tick("ESolver_KS_LIP", "hamilt2rho_single"); +} - template - void ESolver_KS_LIP::iter_finish(UnitCell& ucell, const int istep, int& iter, bool& conv_esolver) - { - ESolver_KS_PW::iter_finish(ucell, istep, iter, conv_esolver); +template +void ESolver_KS_LIP::iter_finish(UnitCell& ucell, const int istep, int& iter, bool& conv_esolver) +{ + ESolver_KS_PW::iter_finish(ucell, istep, iter, conv_esolver); #ifdef __EXX - if (GlobalC::exx_info.info_global.cal_exx && conv_esolver) + if (GlobalC::exx_info.info_global.cal_exx && conv_esolver) + { + // no separate_loop case + if (!GlobalC::exx_info.info_global.separate_loop) { - // no separate_loop case - if (!GlobalC::exx_info.info_global.separate_loop) - { - GlobalC::exx_info.info_global.hybrid_step = 1; + GlobalC::exx_info.info_global.hybrid_step = 1; - // in no_separate_loop case, scf loop only did twice - // in first scf loop, exx updated once in beginning, - // in second scf loop, exx updated every iter + // in no_separate_loop case, scf loop only did twice + // in first scf loop, exx updated once in beginning, + // in second scf loop, exx updated every iter - if (!this->two_level_step) - { - // update exx and redo scf - XC_Functional::set_xc_type(ucell.atoms[0].ncpp.xc_func); - iter = 0; - std::cout << " Entering 2nd SCF, where EXX is updated" << std::endl; - this->two_level_step++; - conv_esolver = false; - } - } - // has separate_loop case - // exx converged or get max exx steps - else if (this->two_level_step == GlobalC::exx_info.info_global.hybrid_step - || (iter == 1 && this->two_level_step != 0)) - { - conv_esolver = true; - } - else + if (!this->two_level_step) { // update exx and redo scf - if (this->two_level_step == 0) - { - XC_Functional::set_xc_type(ucell.atoms[0].ncpp.xc_func); - } - - std::cout << " Updating EXX " << std::flush; - timeval t_start; - gettimeofday(&t_start, nullptr); - - this->exx_lip->cal_exx(); + XC_Functional::set_xc_type(ucell.atoms[0].ncpp.xc_func); iter = 0; + std::cout << " Entering 2nd SCF, where EXX is updated" << std::endl; this->two_level_step++; - - timeval t_end; - gettimeofday(&t_end, nullptr); - std::cout << "and rerun SCF\t" << std::setprecision(3) << std::setiosflags(std::ios::scientific) - << (double)(t_end.tv_sec - t_start.tv_sec) - + (double)(t_end.tv_usec - t_start.tv_usec) / 1000000.0 - << std::defaultfloat << " (s)" << std::endl; conv_esolver = false; } } -#endif + // has separate_loop case + // exx converged or get max exx steps + else if (this->two_level_step == GlobalC::exx_info.info_global.hybrid_step + || (iter == 1 && this->two_level_step != 0)) + { + conv_esolver = true; + } + else + { + // update exx and redo scf + if (this->two_level_step == 0) + { + XC_Functional::set_xc_type(ucell.atoms[0].ncpp.xc_func); + } + + std::cout << " Updating EXX " << std::flush; + timeval t_start; + gettimeofday(&t_start, nullptr); + + this->exx_lip->cal_exx(); + iter = 0; + this->two_level_step++; + + timeval t_end; + gettimeofday(&t_end, nullptr); + std::cout << "and rerun SCF\t" << std::setprecision(3) << std::setiosflags(std::ios::scientific) + << (double)(t_end.tv_sec - t_start.tv_sec) + (double)(t_end.tv_usec - t_start.tv_usec) / 1000000.0 + << std::defaultfloat << " (s)" << std::endl; + conv_esolver = false; + } } +#endif +} - template - void ESolver_KS_LIP::after_all_runners(UnitCell& ucell) - { - ESolver_KS_PW::after_all_runners(ucell); +template +void ESolver_KS_LIP::after_all_runners(UnitCell& ucell) +{ + ESolver_KS_PW::after_all_runners(ucell); #ifdef __LCAO - if (PARAM.inp.out_mat_xc) - { - ModuleIO::write_Vxc(PARAM.inp.nspin, - PARAM.globalv.nlocal, - GlobalV::DRANK, - *this->kspw_psi, - ucell, - this->sf, - this->solvent, - *this->pw_wfc, - *this->pw_rho, - *this->pw_rhod, - this->locpp.vloc, - this->chr, - this->kv, - this->pelec->wg + if (PARAM.inp.out_mat_xc) + { + ModuleIO::write_Vxc(PARAM.inp.nspin, + PARAM.globalv.nlocal, + GlobalV::DRANK, + *this->kspw_psi, + ucell, + this->sf, + this->solvent, + *this->pw_wfc, + *this->pw_rho, + *this->pw_rhod, + this->locpp.vloc, + this->chr, + this->kv, + this->pelec->wg #ifdef __EXX - , - *this->exx_lip -#endif - ); - } + , + *this->exx_lip #endif + ); } - template class ESolver_KS_LIP>; - template class ESolver_KS_LIP>; - // LIP is not supported on GPU yet. +#endif +} +template class ESolver_KS_LIP>; +template class ESolver_KS_LIP>; +// LIP is not supported on GPU yet. } // namespace ModuleESolver diff --git a/source/source_esolver/esolver_ks_pw.cpp b/source/source_esolver/esolver_ks_pw.cpp index 7ead98436b..940bfded69 100644 --- a/source/source_esolver/esolver_ks_pw.cpp +++ b/source/source_esolver/esolver_ks_pw.cpp @@ -1,9 +1,5 @@ #include "esolver_ks_pw.h" -#include "module_base/formatter.h" -#include "module_base/global_variable.h" -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/memory.h" #include "module_elecstate/cal_ux.h" #include "module_elecstate/elecstate_pw.h" #include "module_elecstate/elecstate_pw_sdft.h" @@ -18,9 +14,6 @@ #include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" #include "module_hamilt_pw/hamilt_pwdft/onsite_projector.h" #include "module_hamilt_pw/hamilt_pwdft/stress_pw.h" -#include "source_hsolver/diago_iter_assist.h" -#include "source_hsolver/hsolver_pw.h" -#include "source_hsolver/kernels/dngvd_op.h" #include "module_io/berryphase.h" #include "module_io/cal_ldos.h" #include "module_io/get_pchg_pw.h" @@ -33,6 +26,13 @@ #include "module_io/write_wfc_pw.h" #include "module_io/write_wfc_r.h" #include "module_parameter/parameter.h" +#include "source_base/formatter.h" +#include "source_base/global_variable.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/memory.h" +#include "source_hsolver/diago_iter_assist.h" +#include "source_hsolver/hsolver_pw.h" +#include "source_hsolver/kernels/dngvd_op.h" #include @@ -44,7 +44,7 @@ #include #ifdef __DSP -#include "module_base/kernels/dsp/dsp_connector.h" +#include "source_base/kernels/dsp/dsp_connector.h" #endif #include @@ -1005,29 +1005,29 @@ void ESolver_KS_PW::after_all_runners(UnitCell& ucell) ModuleIO::Write_MLKEDF_Descriptors write_mlkedf_desc; write_mlkedf_desc.cal_tool->set_para(this->chr.nrxx, - PARAM.inp.nelec, - PARAM.inp.of_tf_weight, - PARAM.inp.of_vw_weight, - PARAM.inp.of_ml_chi_p, - PARAM.inp.of_ml_chi_q, - PARAM.inp.of_ml_chi_xi, - PARAM.inp.of_ml_chi_pnl, - PARAM.inp.of_ml_chi_qnl, - PARAM.inp.of_ml_nkernel, - PARAM.inp.of_ml_kernel, - PARAM.inp.of_ml_kernel_scaling, - PARAM.inp.of_ml_yukawa_alpha, - PARAM.inp.of_ml_kernel_file, - ucell.omega, - this->pw_rho); + PARAM.inp.nelec, + PARAM.inp.of_tf_weight, + PARAM.inp.of_vw_weight, + PARAM.inp.of_ml_chi_p, + PARAM.inp.of_ml_chi_q, + PARAM.inp.of_ml_chi_xi, + PARAM.inp.of_ml_chi_pnl, + PARAM.inp.of_ml_chi_qnl, + PARAM.inp.of_ml_nkernel, + PARAM.inp.of_ml_kernel, + PARAM.inp.of_ml_kernel_scaling, + PARAM.inp.of_ml_yukawa_alpha, + PARAM.inp.of_ml_kernel_file, + ucell.omega, + this->pw_rho); write_mlkedf_desc.generateTrainData_KS(PARAM.globalv.global_mlkedf_descriptor_dir, - this->kspw_psi, - this->pelec, - this->pw_wfc, - this->pw_rho, - ucell, - this->pelec->pot->get_effective_v(0)); + this->kspw_psi, + this->pelec, + this->pw_wfc, + this->pw_rho, + ucell, + this->pelec->pot->get_effective_v(0)); } #endif } diff --git a/source/source_esolver/esolver_ks_pw.h b/source/source_esolver/esolver_ks_pw.h index c165086177..7cfd54bad6 100644 --- a/source/source_esolver/esolver_ks_pw.h +++ b/source/source_esolver/esolver_ks_pw.h @@ -1,13 +1,13 @@ #ifndef ESOLVER_KS_PW_H #define ESOLVER_KS_PW_H #include "./esolver_ks.h" +#include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_hamilt_pw/hamilt_pwdft/module_exx_helper/exx_helper.h" #include "module_hamilt_pw/hamilt_pwdft/operator_pw/velocity_pw.h" #include "module_psi/psi_init.h" -#include "module_hamilt_pw/hamilt_pwdft/module_exx_helper/exx_helper.h" -#include "module_hamilt_pw/hamilt_pwdft/global.h" #include -#include +#include namespace ModuleESolver { @@ -71,7 +71,6 @@ class ESolver_KS_PW : public ESolver_KS using castmem_2d_d2h_op = base_device::memory::cast_memory_op, T, base_device::DEVICE_CPU, Device>; - }; } // namespace ModuleESolver #endif diff --git a/source/source_esolver/esolver_of.cpp b/source/source_esolver/esolver_of.cpp index f19e65a538..ceac5f8cb2 100644 --- a/source/source_esolver/esolver_of.cpp +++ b/source/source_esolver/esolver_of.cpp @@ -1,16 +1,16 @@ #include "esolver_of.h" -#include "module_parameter/parameter.h" #include "module_io/cube_io.h" #include "module_io/output_log.h" #include "module_io/write_elecstat_pot.h" +#include "module_parameter/parameter.h" //-----------temporary------------------------- -#include "module_base/global_function.h" +#include "module_elecstate/cal_ux.h" #include "module_elecstate/module_charge/symmetry_rho.h" #include "module_hamilt_general/module_ewald/H_Ewald_pw.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/print_info.h" -#include "module_elecstate/cal_ux.h" +#include "source_base/global_function.h" //-----force------------------- #include "module_hamilt_pw/hamilt_pwdft/forces.h" //-----stress------------------ @@ -90,7 +90,7 @@ void ESolver_OF::before_all_runners(UnitCell& ucell, const Input_para& inp) } // Setup the k points according to symmetry. - kv.set(ucell,ucell.symm, PARAM.inp.kpoint_file, PARAM.inp.nspin, ucell.G, ucell.latvec, GlobalV::ofs_running); + kv.set(ucell, ucell.symm, PARAM.inp.kpoint_file, PARAM.inp.nspin, ucell.G, ucell.latvec, GlobalV::ofs_running); ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "INIT K-POINTS"); // print information @@ -100,21 +100,20 @@ void ESolver_OF::before_all_runners(UnitCell& ucell, const Input_para& inp) // initialize the real-space uniform grid for FFT and parallel // distribution of plane waves Pgrid.init(pw_rho->nx, - pw_rho->ny, - pw_rho->nz, - pw_rho->nplane, - pw_rho->nrxx, - pw_big->nbz, - pw_big->bz); // mohan add 2010-07-22, update 2011-05-04 + pw_rho->ny, + pw_rho->nz, + pw_rho->nplane, + pw_rho->nrxx, + pw_big->nbz, + pw_big->bz); // mohan add 2010-07-22, update 2011-05-04 // Calculate Structure factor sf.setup_structure_factor(&ucell, Pgrid, pw_rho); ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "INIT BASIS"); // initialize local pseudopotential - this->locpp.init_vloc(ucell,pw_rho); + this->locpp.init_vloc(ucell, pw_rho); ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "LOCAL POTENTIAL"); - // initialize elecstate, including potential this->init_elecstate(ucell); @@ -161,10 +160,11 @@ void ESolver_OF::runner(UnitCell& ucell, const int istep) #ifdef __MLALGO // for ML KEDF test - if (PARAM.inp.of_ml_local_test) this->ml_->localTest(this->chr.rho, this->pw_rho); + if (PARAM.inp.of_ml_local_test) + this->ml_->localTest(this->chr.rho, this->pw_rho); #endif - bool conv_esolver = false; // this conv_esolver is added by mohan 20250302 + bool conv_esolver = false; // this conv_esolver is added by mohan 20250302 #ifdef __MPI this->iter_time = MPI_Wtime(); #else @@ -181,7 +181,6 @@ void ESolver_OF::runner(UnitCell& ucell, const int istep) this->energy_last_ = this->energy_current_; this->energy_current_ = this->cal_energy(); - // check if the job is done if (this->check_exit(conv_esolver)) { @@ -235,11 +234,7 @@ void ESolver_OF::before_opt(const int istep, UnitCell& ucell) // Refresh the arrays delete this->psi_; - this->psi_ = new psi::Psi(1, - PARAM.inp.nspin, - this->pw_rho->nrxx, - this->pw_rho->nrxx, - true); + this->psi_ = new psi::Psi(1, PARAM.inp.nspin, this->pw_rho->nrxx, this->pw_rho->nrxx, true); for (int is = 0; is < PARAM.inp.nspin; ++is) { this->pphi_[is] = this->psi_->get_pointer(is); @@ -457,7 +452,7 @@ bool ESolver_OF::check_exit(bool& conv_esolver) } conv_esolver = (this->of_conv_ == "energy" && energyConv) || (this->of_conv_ == "potential" && potConv) - || (this->of_conv_ == "both" && potConv && energyConv); + || (this->of_conv_ == "both" && potConv && energyConv); this->print_info(conv_esolver); @@ -505,7 +500,6 @@ void ESolver_OF::after_opt(const int istep, UnitCell& ucell, const bool conv_eso //------------------------------------------------------------------ ESolver_FP::after_scf(ucell, istep, conv_esolver); - // should not be here? mohan note 2025-03-03 for (int ir = 0; ir < this->pw_rho->nrxx; ++ir) { @@ -520,9 +514,8 @@ void ESolver_OF::after_opt(const int istep, UnitCell& ucell, const bool conv_eso { this->tf_->get_energy(this->chr.rho); - std::cout << "ML Term = " << this->ml_->ml_energy - << " Ry, TF Term = " << this->tf_->tf_energy - << " Ry." << std::endl; + std::cout << "ML Term = " << this->ml_->ml_energy << " Ry, TF Term = " << this->tf_->tf_energy << " Ry." + << std::endl; if (this->ml_->ml_energy >= this->tf_->tf_energy) { @@ -536,8 +529,10 @@ void ESolver_OF::after_opt(const int istep, UnitCell& ucell, const bool conv_eso if (PARAM.inp.of_ml_gene_data) { this->pelec->pot->update_from_charge(&this->chr, &ucell); // Hartree + XC + external - this->kinetic_potential(this->chr.rho, this->pphi_, this->pelec->pot->get_effective_v()); // (kinetic + Hartree + XC + external) * 2 * phi - + this->kinetic_potential(this->chr.rho, + this->pphi_, + this->pelec->pot->get_effective_v()); // (kinetic + Hartree + XC + external) * 2 * phi + const double* vr_eff = this->pelec->pot->get_effective_v(0); for (int ir = 0; ir < this->pw_rho->nrxx; ++ir) { @@ -577,10 +572,8 @@ double ESolver_OF::cal_energy() double pseudopot_energy = 0.; // electron-ion interaction energy for (int is = 0; is < PARAM.inp.nspin; ++is) { - pseudopot_energy += this->inner_product(this->pelec->pot->get_fixed_v(), - this->chr.rho[is], - this->pw_rho->nrxx, - this->dV_); + pseudopot_energy + += this->inner_product(this->pelec->pot->get_fixed_v(), this->chr.rho[is], this->pw_rho->nrxx, this->dV_); } Parallel_Reduce::reduce_all(pseudopot_energy); this->pelec->f_en.ekinetic = kinetic_energy; diff --git a/source/source_esolver/esolver_of.h b/source/source_esolver/esolver_of.h index 222dfd74fc..5d6603b1d1 100644 --- a/source/source_esolver/esolver_of.h +++ b/source/source_esolver/esolver_of.h @@ -2,15 +2,15 @@ #define ESOLVER_OF_H #include "esolver_fp.h" -#include "module_base/opt_DCsrch.h" -#include "module_base/opt_TN.hpp" #include "module_elecstate/module_charge/charge.h" #include "module_hamilt_pw/hamilt_ofdft/kedf_lkt.h" +#include "module_hamilt_pw/hamilt_ofdft/kedf_ml.h" #include "module_hamilt_pw/hamilt_ofdft/kedf_tf.h" #include "module_hamilt_pw/hamilt_ofdft/kedf_vw.h" #include "module_hamilt_pw/hamilt_ofdft/kedf_wt.h" -#include "module_hamilt_pw/hamilt_ofdft/kedf_ml.h" #include "module_psi/psi.h" +#include "source_base/opt_DCsrch.h" +#include "source_base/opt_TN.hpp" namespace ModuleESolver { diff --git a/source/source_esolver/esolver_of_tool.cpp b/source/source_esolver/esolver_of_tool.cpp index 48f44e5fe8..c55275f6f4 100644 --- a/source/source_esolver/esolver_of_tool.cpp +++ b/source/source_esolver/esolver_of_tool.cpp @@ -1,11 +1,11 @@ #include "esolver_of.h" -#include "module_base/formatter.h" -#include "module_base/memory.h" +#include "module_elecstate/cal_ux.h" #include "module_elecstate/module_pot/efield.h" #include "module_elecstate/module_pot/gatefield.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_parameter/parameter.h" -#include "module_elecstate/cal_ux.h" +#include "source_base/formatter.h" +#include "source_base/memory.h" namespace ModuleESolver { @@ -71,11 +71,7 @@ void ESolver_OF::init_elecstate(UnitCell& ucell) void ESolver_OF::allocate_array() { // Initialize the "wavefunction", which is sqrt(rho) - this->psi_ = new psi::Psi(1, - PARAM.inp.nspin, - this->pw_rho->nrxx, - this->pw_rho->nrxx, - true); + this->psi_ = new psi::Psi(1, PARAM.inp.nspin, this->pw_rho->nrxx, this->pw_rho->nrxx, true); ModuleBase::Memory::record("OFDFT::Psi", sizeof(double) * PARAM.inp.nspin * this->pw_rho->nrxx); this->pphi_ = new double*[PARAM.inp.nspin]; for (int is = 0; is < PARAM.inp.nspin; ++is) @@ -106,7 +102,8 @@ void ESolver_OF::allocate_array() ModuleBase::Memory::record("OFDFT::pdLdphi_", sizeof(double) * PARAM.inp.nspin * this->pw_rho->nrxx); ModuleBase::Memory::record("OFDFT::pdEdphi_", sizeof(double) * PARAM.inp.nspin * this->pw_rho->nrxx); ModuleBase::Memory::record("OFDFT::pdirect_", sizeof(double) * PARAM.inp.nspin * this->pw_rho->nrxx); - ModuleBase::Memory::record("OFDFT::precip_dir_", sizeof(std::complex) * PARAM.inp.nspin * this->pw_rho->npw); + ModuleBase::Memory::record("OFDFT::precip_dir_", + sizeof(std::complex) * PARAM.inp.nspin * this->pw_rho->npw); } /** @@ -374,9 +371,10 @@ void ESolver_OF::test_direction(double* dEdtheta, double** ptemp_phi, UnitCell& Parallel_Reduce::reduce_all(pseudopot_energy); temp_energy += kinetic_energy + pseudopot_energy; GlobalV::ofs_warning << i << " " << dEdtheta[0] << " " << temp_energy << std::endl; - if (this->theta_[0] == 0) { + if (this->theta_[0] == 0) + { std::cout << "dEdtheta " << dEdtheta[0] << std::endl; -} + } } exit(0); } @@ -393,29 +391,25 @@ void ESolver_OF::print_info(const bool conv_esolver) std::cout << " ============================= Running OFDFT " "==============================" << std::endl; - std::cout << " ITER ETOT/eV EDIFF/eV EFERMI/eV POTNORM TIME/s" - << std::endl; + std::cout << " ITER ETOT/eV EDIFF/eV EFERMI/eV POTNORM TIME/s" << std::endl; } - std::map prefix_map = { - {"cg1", "CG"}, - {"cg2", "CG"}, - {"tn", "TN"} - }; + std::map prefix_map = {{"cg1", "CG"}, {"cg2", "CG"}, {"tn", "TN"}}; std::string iteration = prefix_map[PARAM.inp.of_method] + std::to_string(this->iter_); #ifdef __MPI double duration = (double)(MPI_Wtime() - this->iter_time); #else double duration - = (std::chrono::duration_cast(std::chrono::system_clock::now() - this->iter_time)).count() + = (std::chrono::duration_cast(std::chrono::system_clock::now() - this->iter_time)) + .count() / static_cast(1e6); #endif - std::cout << " " << std::setw(8) << iteration - << std::setw(18) << std::scientific << std::setprecision(8) << this->energy_current_ * ModuleBase::Ry_to_eV - << std::setw(18) << (this->energy_current_ - this->energy_last_) * ModuleBase::Ry_to_eV - << std::setw(13) << std::setprecision(4) << this->pelec->eferm.get_efval(0) * ModuleBase::Ry_to_eV - << std::setw(13) << std::setprecision(4) << this->normdLdphi_ - << std::setw(6) << std::fixed << std::setprecision(2) << duration << std::endl; + std::cout << " " << std::setw(8) << iteration << std::setw(18) << std::scientific << std::setprecision(8) + << this->energy_current_ * ModuleBase::Ry_to_eV << std::setw(18) + << (this->energy_current_ - this->energy_last_) * ModuleBase::Ry_to_eV << std::setw(13) + << std::setprecision(4) << this->pelec->eferm.get_efval(0) * ModuleBase::Ry_to_eV << std::setw(13) + << std::setprecision(4) << this->normdLdphi_ << std::setw(6) << std::fixed << std::setprecision(2) + << duration << std::endl; GlobalV::ofs_running << std::setprecision(12); GlobalV::ofs_running << std::setiosflags(std::ios::right); @@ -425,11 +419,9 @@ void ESolver_OF::print_info(const bool conv_esolver) std::vector titles; std::vector energies_Ry; std::vector energies_eV; - if ((PARAM.inp.printe > 0 && - ((this->iter_ + 1) % PARAM.inp.printe == 0 || - conv_esolver || - this->iter_ == PARAM.inp.scf_nmax)) || - PARAM.inp.init_chg == "file") + if ((PARAM.inp.printe > 0 + && ((this->iter_ + 1) % PARAM.inp.printe == 0 || conv_esolver || this->iter_ == PARAM.inp.scf_nmax)) + || PARAM.inp.init_chg == "file") { titles.push_back("E_Total"); energies_Ry.push_back(this->pelec->f_en.etot); @@ -522,9 +514,10 @@ void ESolver_OF::print_info(const bool conv_esolver) std::transform(energies_Ry.begin(), energies_Ry.end(), energies_eV.begin(), [](double energy) { return energy * ModuleBase::Ry_to_eV; }); - FmtTable table(/*titles=*/{"Energy", "Rydberg", "eV"}, - /*nrows=*/titles.size(), - /*formats=*/{"%20s", "%20.12f", "%20.12f"}, 0); + FmtTable table(/*titles=*/{"Energy", "Rydberg", "eV"}, + /*nrows=*/titles.size(), + /*formats=*/{"%20s", "%20.12f", "%20.12f"}, + 0); table << titles << energies_Ry << energies_eV; GlobalV::ofs_running << table.str() << std::endl; diff --git a/source/source_esolver/esolver_sdft_pw.cpp b/source/source_esolver/esolver_sdft_pw.cpp index 6559b3a778..669c0f4e67 100644 --- a/source/source_esolver/esolver_sdft_pw.cpp +++ b/source/source_esolver/esolver_sdft_pw.cpp @@ -1,15 +1,15 @@ #include "esolver_sdft_pw.h" -#include "module_base/global_variable.h" -#include "module_base/memory.h" #include "module_elecstate/module_charge/symmetry_rho.h" #include "module_hamilt_pw/hamilt_stodft/sto_dos.h" #include "module_hamilt_pw/hamilt_stodft/sto_elecond.h" #include "module_hamilt_pw/hamilt_stodft/sto_forces.h" #include "module_hamilt_pw/hamilt_stodft/sto_stress_pw.h" -#include "source_hsolver/diago_iter_assist.h" #include "module_io/write_istate_info.h" #include "module_parameter/parameter.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" +#include "source_hsolver/diago_iter_assist.h" #include #include @@ -65,21 +65,20 @@ void ESolver_SDFT_PW::before_all_runners(UnitCell& ucell, const Input // 4) allocate spaces for \sqrt(f(H))|chi> and |\tilde{chi}> size_t size = stowf.chi0->size(); - this->stowf.shchi - = new psi::Psi(this->kv.get_nks(), - this->stowf.nchip_max, - this->pw_wfc->npwk_max, - this->kv.ngk, - true); + this->stowf.shchi = new psi::Psi(this->kv.get_nks(), + this->stowf.nchip_max, + this->pw_wfc->npwk_max, + this->kv.ngk, + true); ModuleBase::Memory::record("SDFT::shchi", size * sizeof(T)); if (PARAM.inp.nbands > 0) { - this->stowf.chiortho - = new psi::Psi(this->kv.get_nks(), - this->stowf.nchip_max, - this->pw_wfc->npwk_max, - this->kv.ngk, true); + this->stowf.chiortho = new psi::Psi(this->kv.get_nks(), + this->stowf.nchip_max, + this->pw_wfc->npwk_max, + this->kv.ngk, + true); ModuleBase::Memory::record("SDFT::chiortho", size * sizeof(T)); } @@ -98,7 +97,7 @@ void ESolver_SDFT_PW::before_scf(UnitCell& ucell, const int istep) this->pw_wfc, &this->kv, &this->ppcell, - &ucell, + &ucell, PARAM.globalv.npol, &this->stoche.emin_sto, &this->stoche.emax_sto); @@ -269,7 +268,7 @@ void ESolver_SDFT_PW::after_all_runners(UnitCell& ucell) // 3) write down DOS if (PARAM.inp.out_dos) { - if(!std::is_same>::value || !std::is_same::value) + if (!std::is_same>::value || !std::is_same::value) { ModuleBase::WARNING_QUIT("ESolver_SDFT_PW", "DOS does not support complex float or GPU yet."); } @@ -315,7 +314,6 @@ void ESolver_SDFT_PW::after_all_runners(UnitCell& ucell) } } - // template class ESolver_SDFT_PW, base_device::DEVICE_CPU>; template class ESolver_SDFT_PW, base_device::DEVICE_CPU>; #if ((defined __CUDA) || (defined __ROCM)) diff --git a/source/source_esolver/lcao_before_scf.cpp b/source/source_esolver/lcao_before_scf.cpp index 58a6ea441d..35703c889e 100644 --- a/source/source_esolver/lcao_before_scf.cpp +++ b/source/source_esolver/lcao_before_scf.cpp @@ -1,12 +1,12 @@ #include "module_elecstate/module_charge/symmetry_rho.h" -#include "source_esolver/esolver_ks_lcao.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" #include "module_hamilt_lcao/module_dftu/dftu.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_esolver/esolver_ks_lcao.h" // -#include "module_base/timer.h" #include "module_cell/module_neighbor/sltk_atom_arrange.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" +#include "module_elecstate/elecstate_tools.h" #include "module_io/berryphase.h" #include "module_io/get_pchg_lcao.h" #include "module_io/get_wf_lcao.h" @@ -15,11 +15,10 @@ #include "module_io/to_wannier90_lcao_in_pw.h" #include "module_io/write_HS_R.h" #include "module_parameter/parameter.h" -#include "module_elecstate/elecstate_tools.h" +#include "source_base/timer.h" #ifdef __MLALGO #include "module_hamilt_lcao/module_deepks/LCAO_deepks.h" #endif -#include "module_base/formatter.h" #include "module_elecstate/elecstate_lcao.h" #include "module_elecstate/module_dm/cal_dm_psi.h" #include "module_hamilt_lcao/hamilt_lcaodft/LCAO_domain.h" @@ -28,6 +27,7 @@ #include "module_hamilt_lcao/module_deltaspin/spin_constrain.h" #include "module_io/cube_io.h" #include "module_io/write_elecstat_pot.h" +#include "source_base/formatter.h" #ifdef __EXX #include "module_io/restart_exx_csr.h" #endif @@ -59,7 +59,7 @@ void ESolver_KS_LCAO::before_scf(UnitCell& ucell, const int istep) search_radius, PARAM.inp.test_atom_input); - //! 4) initialize NAO basis set + //! 4) initialize NAO basis set double dr_uniform = 0.001; std::vector rcuts; std::vector> psi_u; @@ -95,22 +95,21 @@ void ESolver_KS_LCAO::before_scf(UnitCell& ucell, const int istep) //! 6) prepare grid integral #ifdef __NEW_GINT - auto gint_info = std::make_shared( - this->pw_big->nbx, - this->pw_big->nby, - this->pw_big->nbz, - this->pw_rho->nx, - this->pw_rho->ny, - this->pw_rho->nz, - 0, - 0, - this->pw_big->nbzp_start, - this->pw_big->nbx, - this->pw_big->nby, - this->pw_big->nbzp, - orb_.Phi, - ucell, - this->gd); + auto gint_info = std::make_shared(this->pw_big->nbx, + this->pw_big->nby, + this->pw_big->nbz, + this->pw_rho->nx, + this->pw_rho->ny, + this->pw_rho->nz, + 0, + 0, + this->pw_big->nbzp_start, + this->pw_big->nbx, + this->pw_big->nby, + this->pw_big->nbzp, + orb_.Phi, + ucell, + this->gd); ModuleGint::Gint::init_gint_info(gint_info); #endif @@ -165,9 +164,6 @@ void ESolver_KS_LCAO::before_scf(UnitCell& ucell, const int istep) ); } - - - #ifdef __MLALGO // 10) for each ionic step, the overlap must be rebuilt // since it depends on ionic positions @@ -269,11 +265,9 @@ void ESolver_KS_LCAO::before_scf(UnitCell& ucell, const int istep) // 18) update of RDMFT, added by jghan if (PARAM.inp.rdmft == true) { - // necessary operation of these parameters have be done with p_esolver->Init() in source/source_main/driver_run.cpp - rdmft_solver.update_ion(ucell, - *(this->pw_rho), - this->locpp.vloc, - this->sf.strucFac); + // necessary operation of these parameters have be done with p_esolver->Init() in + // source/source_main/driver_run.cpp + rdmft_solver.update_ion(ucell, *(this->pw_rho), this->locpp.vloc, this->sf.strucFac); } ModuleBase::timer::tick("ESolver_KS_LCAO", "before_scf"); diff --git a/source/source_esolver/lcao_others.cpp b/source/source_esolver/lcao_others.cpp index 1f60903d61..6dd516af7b 100644 --- a/source/source_esolver/lcao_others.cpp +++ b/source/source_esolver/lcao_others.cpp @@ -1,11 +1,10 @@ #include "module_elecstate/cal_ux.h" #include "module_elecstate/module_charge/symmetry_rho.h" -#include "source_esolver/esolver_ks_lcao.h" #include "module_hamilt_lcao/hamilt_lcaodft/hamilt_lcao.h" #include "module_hamilt_lcao/module_dftu/dftu.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "source_esolver/esolver_ks_lcao.h" // -#include "module_base/timer.h" #include "module_cell/module_neighbor/sltk_atom_arrange.h" #include "module_cell/module_neighbor/sltk_grid_driver.h" #include "module_io/berryphase.h" @@ -15,20 +14,19 @@ #include "module_io/to_wannier90_lcao_in_pw.h" #include "module_io/write_HS_R.h" #include "module_parameter/parameter.h" +#include "source_base/timer.h" #ifdef __MLALGO #include "module_hamilt_lcao/module_deepks/LCAO_deepks.h" #endif -#include "module_base/formatter.h" #include "module_elecstate/elecstate_lcao.h" #include "module_elecstate/module_dm/cal_dm_psi.h" - #include "module_hamilt_lcao/hamilt_lcaodft/LCAO_domain.h" #include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/op_exx_lcao.h" #include "module_hamilt_lcao/hamilt_lcaodft/operator_lcao/operator_lcao.h" #include "module_hamilt_lcao/module_deltaspin/spin_constrain.h" - #include "module_io/read_wfc_nao.h" #include "module_io/write_elecstat_pot.h" +#include "source_base/formatter.h" #ifdef __EXX #include "module_io/restart_exx_csr.h" @@ -174,13 +172,13 @@ void ESolver_KS_LCAO::others(UnitCell& ucell, const int istep) // init wfc from file if (istep == 0 && PARAM.inp.init_wfc == "file") { - if (!ModuleIO::read_wfc_nao(PARAM.globalv.global_readin_dir, - this->pv, - *(this->psi), - this->pelec, - this->pelec->klist->ik2iktot, - this->pelec->klist->get_nkstot(), - PARAM.inp.nspin)) + if (!ModuleIO::read_wfc_nao(PARAM.globalv.global_readin_dir, + this->pv, + *(this->psi), + this->pelec, + this->pelec->klist->ik2iktot, + this->pelec->klist->get_nkstot(), + PARAM.inp.nspin)) { ModuleBase::WARNING_QUIT("ESolver_KS_LCAO::others", "read wfc nao failed"); } @@ -287,63 +285,63 @@ void ESolver_KS_LCAO::others(UnitCell& ucell, const int istep) if (PARAM.globalv.gamma_only_local) { chr_i.begin(this->GG, - this->chr.rho, - this->pelec->wg, - this->pelec->eferm.get_all_ef(), - this->pw_rhod->nrxx, - this->pw_rhod->nplane, - this->pw_rhod->startz_current, - this->pw_rhod->nx, - this->pw_rhod->ny, - this->pw_rhod->nz, - this->pw_big->bz, - this->pw_big->nbz, - PARAM.globalv.gamma_only_local, - PARAM.inp.nbands_istate, - PARAM.inp.out_pchg, - PARAM.inp.nbands, - PARAM.inp.nelec, - PARAM.inp.nspin, - PARAM.globalv.nlocal, - PARAM.globalv.global_out_dir, - GlobalV::ofs_warning, - &ucell, - this->Pgrid, - &this->gd, - this->kv); + this->chr.rho, + this->pelec->wg, + this->pelec->eferm.get_all_ef(), + this->pw_rhod->nrxx, + this->pw_rhod->nplane, + this->pw_rhod->startz_current, + this->pw_rhod->nx, + this->pw_rhod->ny, + this->pw_rhod->nz, + this->pw_big->bz, + this->pw_big->nbz, + PARAM.globalv.gamma_only_local, + PARAM.inp.nbands_istate, + PARAM.inp.out_pchg, + PARAM.inp.nbands, + PARAM.inp.nelec, + PARAM.inp.nspin, + PARAM.globalv.nlocal, + PARAM.globalv.global_out_dir, + GlobalV::ofs_warning, + &ucell, + this->Pgrid, + &this->gd, + this->kv); } else { chr_i.begin(this->GK, - this->chr.rho, - this->chr.rhog, - this->pelec->wg, - this->pelec->eferm.get_all_ef(), - this->pw_rhod, - this->pw_rhod->nrxx, - this->pw_rhod->nplane, - this->pw_rhod->startz_current, - this->pw_rhod->nx, - this->pw_rhod->ny, - this->pw_rhod->nz, - this->pw_big->bz, - this->pw_big->nbz, - PARAM.globalv.gamma_only_local, - PARAM.inp.nbands_istate, - PARAM.inp.out_pchg, - PARAM.inp.nbands, - PARAM.inp.nelec, - PARAM.inp.nspin, - PARAM.globalv.nlocal, - PARAM.globalv.global_out_dir, - GlobalV::ofs_warning, - &ucell, - this->Pgrid, - &this->gd, - this->kv, - PARAM.inp.if_separate_k, - &this->Pgrid, - this->chr.ngmc); + this->chr.rho, + this->chr.rhog, + this->pelec->wg, + this->pelec->eferm.get_all_ef(), + this->pw_rhod, + this->pw_rhod->nrxx, + this->pw_rhod->nplane, + this->pw_rhod->startz_current, + this->pw_rhod->nx, + this->pw_rhod->ny, + this->pw_rhod->nz, + this->pw_big->bz, + this->pw_big->nbz, + PARAM.globalv.gamma_only_local, + PARAM.inp.nbands_istate, + PARAM.inp.out_pchg, + PARAM.inp.nbands, + PARAM.inp.nelec, + PARAM.inp.nspin, + PARAM.globalv.nlocal, + PARAM.globalv.global_out_dir, + GlobalV::ofs_warning, + &ucell, + this->Pgrid, + &this->gd, + this->kv, + PARAM.inp.if_separate_k, + &this->Pgrid, + this->chr.ngmc); } std::cout << FmtCore::format(" >> Finish %s.\n * * * * * *\n", "getting partial charge"); } @@ -354,44 +352,44 @@ void ESolver_KS_LCAO::others(UnitCell& ucell, const int istep) if (PARAM.globalv.gamma_only_local) { get_wf.begin(ucell, - this->psi, - this->pw_rhod, - this->pw_wfc, - this->pw_big, - this->Pgrid, - this->pv, - this->GG, - PARAM.inp.out_wfc_pw, - this->kv, - PARAM.inp.nelec, - PARAM.inp.nbands_istate, - PARAM.inp.out_wfc_norm, - PARAM.inp.out_wfc_re_im, - PARAM.inp.nbands, - PARAM.inp.nspin, - PARAM.globalv.nlocal, - PARAM.globalv.global_out_dir); + this->psi, + this->pw_rhod, + this->pw_wfc, + this->pw_big, + this->Pgrid, + this->pv, + this->GG, + PARAM.inp.out_wfc_pw, + this->kv, + PARAM.inp.nelec, + PARAM.inp.nbands_istate, + PARAM.inp.out_wfc_norm, + PARAM.inp.out_wfc_re_im, + PARAM.inp.nbands, + PARAM.inp.nspin, + PARAM.globalv.nlocal, + PARAM.globalv.global_out_dir); } else { get_wf.begin(ucell, - this->psi, - this->pw_rhod, - this->pw_wfc, - this->pw_big, - this->Pgrid, - this->pv, - this->GK, - PARAM.inp.out_wfc_pw, - this->kv, - PARAM.inp.nelec, - PARAM.inp.nbands_istate, - PARAM.inp.out_wfc_norm, - PARAM.inp.out_wfc_re_im, - PARAM.inp.nbands, - PARAM.inp.nspin, - PARAM.globalv.nlocal, - PARAM.globalv.global_out_dir); + this->psi, + this->pw_rhod, + this->pw_wfc, + this->pw_big, + this->Pgrid, + this->pv, + this->GK, + PARAM.inp.out_wfc_pw, + this->kv, + PARAM.inp.nelec, + PARAM.inp.nbands_istate, + PARAM.inp.out_wfc_norm, + PARAM.inp.out_wfc_re_im, + PARAM.inp.nbands, + PARAM.inp.nspin, + PARAM.globalv.nlocal, + PARAM.globalv.global_out_dir); } std::cout << FmtCore::format(" >> Finish %s.\n * * * * * *\n", "getting wave function"); } diff --git a/source/source_esolver/pw_others.cpp b/source/source_esolver/pw_others.cpp index 013e4eb9d7..08086c8c36 100644 --- a/source/source_esolver/pw_others.cpp +++ b/source/source_esolver/pw_others.cpp @@ -1,10 +1,9 @@ #include "esolver_ks_pw.h" - -#include "module_base/global_variable.h" #include "module_hamilt_pw/hamilt_pwdft/elecond.h" #include "module_io/input_conv.h" #include "module_io/nscf_band.h" #include "module_io/output_log.h" +#include "source_base/global_variable.h" #include @@ -19,15 +18,9 @@ //-----stress------------------ #include "module_hamilt_pw/hamilt_pwdft/stress_pw.h" //--------------------------------------------------- -#include "module_base/memory.h" -#include "module_base/module_device/device.h" #include "module_elecstate/elecstate_pw.h" #include "module_hamilt_general/module_vdw/vdw.h" #include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" -#include "source_hsolver/diago_iter_assist.h" -#include "source_hsolver/hsolver_pw.h" -#include "source_hsolver/kernels/dngvd_op.h" -#include "module_base/kernels/math_kernel_op.h" #include "module_io/berryphase.h" #include "module_io/numerical_basis.h" #include "module_io/numerical_descriptor.h" @@ -36,15 +29,22 @@ #include "module_io/write_elecstat_pot.h" #include "module_io/write_wfc_r.h" #include "module_parameter/parameter.h" +#include "source_base/formatter.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/memory.h" +#include "source_base/module_device/device.h" +#include "source_hsolver/diago_iter_assist.h" +#include "source_hsolver/hsolver_pw.h" +#include "source_hsolver/kernels/dngvd_op.h" #include #include -#include "module_base/formatter.h" // mohan add 2025-03-06 #include "module_io/cal_test.h" -namespace ModuleESolver { +namespace ModuleESolver +{ template void ESolver_KS_PW::others(UnitCell& ucell, const int istep) @@ -53,7 +53,7 @@ void ESolver_KS_PW::others(UnitCell& ucell, const int istep) const std::string cal_type = PARAM.inp.calculation; - if (cal_type == "test_memory") + if (cal_type == "test_memory") { Cal_Test::test_memory(ucell.nat, ucell.ntype, @@ -62,8 +62,8 @@ void ESolver_KS_PW::others(UnitCell& ucell, const int istep) this->pw_wfc, this->p_chgmix->get_mixing_mode(), this->p_chgmix->get_mixing_ndim()); - } - else if (cal_type == "gen_bessel") + } + else if (cal_type == "gen_bessel") { Numerical_Descriptor nc; nc.output_descriptor(ucell, @@ -73,11 +73,10 @@ void ESolver_KS_PW::others(UnitCell& ucell, const int istep) PARAM.inp.bessel_descriptor_tolerence, this->kv.get_nks()); ModuleBase::GlobalFunc::DONE(GlobalV::ofs_running, "GENERATE DESCRIPTOR FOR DEEPKS"); - } - else + } + else { - ModuleBase::WARNING_QUIT("ESolver_KS_PW::others", - "CALCULATION type not supported"); + ModuleBase::WARNING_QUIT("ESolver_KS_PW::others", "CALCULATION type not supported"); } return; diff --git a/source/source_esolver/pw_setup.cpp b/source/source_esolver/pw_setup.cpp index b3f6cb9a07..02f0a9b1e1 100644 --- a/source/source_esolver/pw_setup.cpp +++ b/source/source_esolver/pw_setup.cpp @@ -1,15 +1,15 @@ #include "pw_setup.h" // To get POOL_WORLD -#include "module_base/parallel_comm.h" -// Print information +#include "source_base/parallel_comm.h" +// Print information #include "module_io/print_info.h" void ModuleESolver::pw_setup(const Input_para& inp, - const UnitCell& ucell, - const ModulePW::PW_Basis& pw_rho, - K_Vectors& kv, - ModulePW::PW_Basis_K& pw_wfc) + const UnitCell& ucell, + const ModulePW::PW_Basis& pw_rho, + K_Vectors& kv, + ModulePW::PW_Basis_K& pw_wfc) { ModuleBase::TITLE("ModuleESolver", "pw_setup"); @@ -18,11 +18,7 @@ void ModuleESolver::pw_setup(const Input_para& inp, pw_wfc.initmpi(GlobalV::NPROC_IN_POOL, GlobalV::RANK_IN_POOL, POOL_WORLD); #endif - pw_wfc.initgrids(inp.ref_cell_factor * ucell.lat0, - ucell.latvec, - pw_rho.nx, - pw_rho.ny, - pw_rho.nz); + pw_wfc.initgrids(inp.ref_cell_factor * ucell.lat0, ucell.latvec, pw_rho.nx, pw_rho.ny, pw_rho.nz); pw_wfc.initparameters(false, inp.ecutwfc, kv.get_nks(), kv.kvec_d.data()); @@ -47,6 +43,4 @@ void ModuleESolver::pw_setup(const Input_para& inp, pw_wfc.collect_local_pw(inp.erf_ecut, inp.erf_height, inp.erf_sigma); ModuleIO::print_wfcfft(inp, pw_wfc, GlobalV::ofs_running); - } - diff --git a/source/source_hsolver/diag_const_nums.h b/source/source_hsolver/diag_const_nums.h index 24a33194e1..05520e4e84 100644 --- a/source/source_hsolver/diag_const_nums.h +++ b/source/source_hsolver/diag_const_nums.h @@ -1,6 +1,6 @@ #ifndef DIAG_CONST_NUMS #define DIAG_CONST_NUMS -#include "module_base/module_device/memory_op.h" +#include "source_base/module_device/memory_op.h" template struct const_nums diff --git a/source/source_hsolver/diag_hs_para.cpp b/source/source_hsolver/diag_hs_para.cpp index 8246fb2a3f..f6d7307872 100644 --- a/source/source_hsolver/diag_hs_para.cpp +++ b/source/source_hsolver/diag_hs_para.cpp @@ -1,7 +1,7 @@ #include "source_hsolver/diag_hs_para.h" -#include "module_base/scalapack_connector.h" -#include "module_base/parallel_2d.h" +#include "source_base/parallel_2d.h" +#include "source_base/scalapack_connector.h" #include "source_hsolver/diago_pxxxgvx.h" #ifdef __ELPA @@ -146,8 +146,8 @@ void diago_hs_para(T* h, } else { - std::cout << "Error: parallel diagonalization method is not supported. " << "diag_subspace = " << diag_subspace - << std::endl; + std::cout << "Error: parallel diagonalization method is not supported. " + << "diag_subspace = " << diag_subspace << std::endl; exit(1); } diff --git a/source/source_hsolver/diag_hs_para.h b/source/source_hsolver/diag_hs_para.h index 659f3b0781..247d4b5c65 100644 --- a/source/source_hsolver/diag_hs_para.h +++ b/source/source_hsolver/diag_hs_para.h @@ -1,5 +1,5 @@ -#include "module_base/parallel_2d.h" -#include "module_base/macros.h" +#include "source_base/macros.h" +#include "source_base/parallel_2d.h" #ifdef __MPI #include @@ -8,12 +8,11 @@ namespace hsolver { - #ifdef __MPI /** * @brief Parallel do the generalized eigenvalue problem - * + * * @tparam T double or complex or float or complex * @param H the hermitian matrix H. * @param S the overlap matrix S. @@ -23,12 +22,13 @@ namespace hsolver * @param wfc to store the eigenvectors * @param comm the communicator * @param diag_subspace the method to solve the generalized eigenvalue problem - * @param block_size the block size in 2d block cyclic distribution if use elpa or scalapack. - * + * @param block_size the block size in 2d block cyclic distribution if use elpa or scalapack. + * * @note 1. h and s should be full matrix in rank 0 of the communicator, and the other ranks is not concerned. * @note 2. wfc is complete in rank 0, and not store in other ranks. * @note 3. diag_subspace should be 1: by elpa, 2: by scalapack - * @note 4. block_size should be 0 or a positive integer. If it is 0, then will use a value as large as possible that is allowed + * @note 4. block_size should be 0 or a positive integer. If it is 0, then will use a value as large as possible that is + * allowed */ template void diago_hs_para(T* h, @@ -42,5 +42,4 @@ void diago_hs_para(T* h, const int block_size = 0); #endif -} // namespace hsolver - \ No newline at end of file +} // namespace hsolver diff --git a/source/source_hsolver/diago_bpcg.cpp b/source/source_hsolver/diago_bpcg.cpp index c04be1699b..e55a6d9af4 100644 --- a/source/source_hsolver/diago_bpcg.cpp +++ b/source/source_hsolver/diago_bpcg.cpp @@ -1,63 +1,66 @@ #include "source_hsolver/diago_bpcg.h" #include "diago_iter_assist.h" -#include "module_base/blas_connector.h" -#include "module_base/global_function.h" -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/parallel_comm.h" // different MPI worlds -#include "source_hsolver/kernels/bpcg_kernel_op.h" #include "para_linear_transform.h" +#include "source_base/blas_connector.h" +#include "source_base/global_function.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/parallel_comm.h" // different MPI worlds +#include "source_hsolver/kernels/bpcg_kernel_op.h" #include #include #include #include -namespace hsolver { +namespace hsolver +{ -template +template DiagoBPCG::DiagoBPCG(const Real* precondition_in) { - this->r_type = ct::DataTypeToEnum::value; - this->t_type = ct::DataTypeToEnum::value; - this->device_type = ct::DeviceTypeToEnum::value; + this->r_type = ct::DataTypeToEnum::value; + this->t_type = ct::DataTypeToEnum::value; + this->device_type = ct::DeviceTypeToEnum::value; - this->h_prec = std::move(ct::TensorMap((void *) precondition_in, r_type, device_type, {this->n_basis})); + this->h_prec = std::move(ct::TensorMap((void*)precondition_in, r_type, device_type, {this->n_basis})); this->one = &one_; this->zero = &zero_; this->neg_one = &neg_one_; } -template -DiagoBPCG::~DiagoBPCG() { +template +DiagoBPCG::~DiagoBPCG() +{ // Note, we do not need to free the h_prec and psi pointer as they are refs to the outside data } -template -void DiagoBPCG::init_iter(const int nband, const int nband_l, const int nbasis, const int ndim) { +template +void DiagoBPCG::init_iter(const int nband, const int nband_l, const int nbasis, const int ndim) +{ // Specify the problem size n_basis, n_band, while lda is n_basis - this->n_band = nband; - this->n_band_l = nband_l; - this->n_basis = nbasis; - this->n_dim = ndim; + this->n_band = nband; + this->n_band_l = nband_l; + this->n_basis = nbasis; + this->n_dim = ndim; // All column major tensors - this->beta = std::move(ct::Tensor(r_type, device_type, {this->n_band_l})); - this->eigen = std::move(ct::Tensor(r_type, device_type, {this->n_band})); - this->err_st = std::move(ct::Tensor(r_type, device_type, {this->n_band_l})); + this->beta = std::move(ct::Tensor(r_type, device_type, {this->n_band_l})); + this->eigen = std::move(ct::Tensor(r_type, device_type, {this->n_band})); + this->err_st = std::move(ct::Tensor(r_type, device_type, {this->n_band_l})); - this->hsub = std::move(ct::Tensor(t_type, device_type, {this->n_band, this->n_band})); + this->hsub = std::move(ct::Tensor(t_type, device_type, {this->n_band, this->n_band})); - this->hpsi = std::move(ct::Tensor(t_type, device_type, {this->n_band_l, this->n_basis})); - this->work = std::move(ct::Tensor(t_type, device_type, {this->n_band_l, this->n_basis})); - this->hgrad = std::move(ct::Tensor(t_type, device_type, {this->n_band_l, this->n_basis})); - this->grad_old = std::move(ct::Tensor(t_type, device_type, {this->n_band_l, this->n_basis})); + this->hpsi = std::move(ct::Tensor(t_type, device_type, {this->n_band_l, this->n_basis})); + this->work = std::move(ct::Tensor(t_type, device_type, {this->n_band_l, this->n_basis})); + this->hgrad = std::move(ct::Tensor(t_type, device_type, {this->n_band_l, this->n_basis})); + this->grad_old = std::move(ct::Tensor(t_type, device_type, {this->n_band_l, this->n_basis})); - this->prec = std::move(ct::Tensor(r_type, device_type, {this->n_basis})); + this->prec = std::move(ct::Tensor(r_type, device_type, {this->n_basis})); - this->grad = std::move(ct::Tensor(t_type, device_type, {this->n_band_l, this->n_basis})); + this->grad = std::move(ct::Tensor(t_type, device_type, {this->n_band_l, this->n_basis})); #ifdef __MPI this->pmmcn.set_dimension(BP_WORLD, POOL_WORLD, n_band_l, n_basis, n_band_l, n_basis, n_dim, n_band); this->plintrans.set_dimension(n_dim, nband_l, n_band_l, n_basis, BP_WORLD, false); @@ -67,13 +70,14 @@ void DiagoBPCG::init_iter(const int nband, const int nband_l, const i #endif } -template +template bool DiagoBPCG::test_error(const ct::Tensor& err_in, const std::vector& ethr_band) { Real* _err_st = err_in.data(); bool not_conv = false; std::vector tmp_cpu; - if (err_in.device_type() == ct::DeviceType::GpuDevice) { + if (err_in.device_type() == ct::DeviceType::GpuDevice) + { // ct::Tensor h_err_in = err_in.to_device(); // _err_st = h_err_in.data(); // qianrui change it, because it can not pass the valgrind test @@ -81,8 +85,10 @@ bool DiagoBPCG::test_error(const ct::Tensor& err_in, const std::vecto _err_st = tmp_cpu.data(); syncmem_var_d2h_op()(_err_st, err_in.data(), this->n_band_l); } - for (int ii = 0; ii < this->n_band_l; ii++) { - if (_err_st[ii] > ethr_band[ii]) { + for (int ii = 0; ii < this->n_band_l; ii++) + { + if (_err_st[ii] > ethr_band[ii]) + { not_conv = true; } } @@ -93,12 +99,11 @@ bool DiagoBPCG::test_error(const ct::Tensor& err_in, const std::vecto } // Finally, the last one! -template -void DiagoBPCG::line_minimize( - ct::Tensor& grad_in, - ct::Tensor& hgrad_in, - ct::Tensor& psi_out, - ct::Tensor& hpsi_out) +template +void DiagoBPCG::line_minimize(ct::Tensor& grad_in, + ct::Tensor& hgrad_in, + ct::Tensor& psi_out, + ct::Tensor& hpsi_out) { line_minimize_with_block_op()(grad_in.data(), hgrad_in.data(), @@ -109,40 +114,34 @@ void DiagoBPCG::line_minimize( this->n_band_l); } - // Finally, the last two! -template -void DiagoBPCG::orth_cholesky( - ct::Tensor& workspace_in, - ct::Tensor& psi_out, - ct::Tensor& hpsi_out, - ct::Tensor& hsub_out) +template +void DiagoBPCG::orth_cholesky(ct::Tensor& workspace_in, + ct::Tensor& psi_out, + ct::Tensor& hpsi_out, + ct::Tensor& hsub_out) { // gemm: hsub_out(n_band x n_band) = psi_out^T(n_band x n_basis) * psi_out(n_basis x n_band) this->pmmcn.multiply(1.0, psi_out.data(), psi_out.data(), 0.0, hsub_out.data()); - + // set hsub matrix to lower format; - ct::kernels::set_matrix()( - 'L', hsub_out.data(), this->n_band); + ct::kernels::set_matrix()('L', hsub_out.data(), this->n_band); - ct::kernels::lapack_potrf()( - 'U', this->n_band, hsub_out.data(), this->n_band); - ct::kernels::lapack_trtri()( - 'U', 'N', this->n_band, hsub_out.data(), this->n_band); + ct::kernels::lapack_potrf()('U', this->n_band, hsub_out.data(), this->n_band); + ct::kernels::lapack_trtri()('U', 'N', this->n_band, hsub_out.data(), this->n_band); this->rotate_wf(hsub_out, psi_out, workspace_in); this->rotate_wf(hsub_out, hpsi_out, workspace_in); } -template -void DiagoBPCG::calc_grad_with_block( - const ct::Tensor& prec_in, - ct::Tensor& err_out, - ct::Tensor& beta_out, - ct::Tensor& psi_in, - ct::Tensor& hpsi_in, - ct::Tensor& grad_out, - ct::Tensor& grad_old_out) +template +void DiagoBPCG::calc_grad_with_block(const ct::Tensor& prec_in, + ct::Tensor& err_out, + ct::Tensor& beta_out, + ct::Tensor& psi_in, + ct::Tensor& hpsi_in, + ct::Tensor& grad_out, + ct::Tensor& grad_old_out) { calc_grad_with_block_op()(prec_in.data(), err_out.data(), @@ -156,17 +155,14 @@ void DiagoBPCG::calc_grad_with_block( this->n_band_l); } -template +template void DiagoBPCG::calc_prec() { syncmem_var_h2d_op()(this->prec.template data(), this->h_prec.template data(), this->n_basis); } -template -void DiagoBPCG::orth_projection( - const ct::Tensor& psi_in, - ct::Tensor& hsub_in, - ct::Tensor& grad_out) +template +void DiagoBPCG::orth_projection(const ct::Tensor& psi_in, ct::Tensor& hsub_in, ct::Tensor& grad_out) { // gemm: hsub_in(n_band x n_band) = psi_in^T(n_band x n_basis) * grad_out(n_basis x n_band) this->pmmcn.multiply(1.0, psi_in.data(), grad_out.data(), 0.0, hsub_in.data()); @@ -177,11 +173,8 @@ void DiagoBPCG::orth_projection( return; } -template -void DiagoBPCG::rotate_wf( - const ct::Tensor& hsub_in, - ct::Tensor& psi_out, - ct::Tensor& workspace_in) +template +void DiagoBPCG::rotate_wf(const ct::Tensor& hsub_in, ct::Tensor& psi_out, ct::Tensor& workspace_in) { // gemm: workspace_in(n_basis x n_band) = psi_out(n_basis x n_band) * hsub_in(n_band x n_band) this->plintrans.act(1.0, psi_out.data(), hsub_in.data(), 0.0, workspace_in.data()); @@ -190,22 +183,18 @@ void DiagoBPCG::rotate_wf( return; } -template -void DiagoBPCG::calc_hpsi_with_block( - const HPsiFunc& hpsi_func, - T *psi_in, - ct::Tensor& hpsi_out) +template +void DiagoBPCG::calc_hpsi_with_block(const HPsiFunc& hpsi_func, T* psi_in, ct::Tensor& hpsi_out) { // calculate all-band hpsi hpsi_func(psi_in, hpsi_out.data(), this->n_basis, this->n_band_l); } -template -void DiagoBPCG::diag_hsub( - const ct::Tensor& psi_in, - const ct::Tensor& hpsi_in, - ct::Tensor& hsub_out, - ct::Tensor& eigenvalue_out) +template +void DiagoBPCG::diag_hsub(const ct::Tensor& psi_in, + const ct::Tensor& hpsi_in, + ct::Tensor& hsub_out, + ct::Tensor& eigenvalue_out) { // gemm: hsub_out(n_band x n_band) = hpsi_in^T(n_band x n_basis) * psi_in(n_basis x n_band) this->pmmcn.multiply(1.0, hpsi_in.data(), psi_in.data(), 0.0, hsub_out.data()); @@ -215,38 +204,36 @@ void DiagoBPCG::diag_hsub( return; } -template -void DiagoBPCG::calc_hsub_with_block( - const HPsiFunc& hpsi_func, - T *psi_in, - ct::Tensor& psi_out, - ct::Tensor& hpsi_out, - ct::Tensor& hsub_out, - ct::Tensor& workspace_in, - ct::Tensor& eigenvalue_out) +template +void DiagoBPCG::calc_hsub_with_block(const HPsiFunc& hpsi_func, + T* psi_in, + ct::Tensor& psi_out, + ct::Tensor& hpsi_out, + ct::Tensor& hsub_out, + ct::Tensor& workspace_in, + ct::Tensor& eigenvalue_out) { // Apply the H operator to psi and obtain the hpsi matrix. this->calc_hpsi_with_block(hpsi_func, psi_in, hpsi_out); // Diagonalization of the subspace matrix. - this->diag_hsub(psi_out,hpsi_out, hsub_out, eigenvalue_out); + this->diag_hsub(psi_out, hpsi_out, hsub_out, eigenvalue_out); // inplace matmul to get the initial guessed wavefunction psi. // psi_out[n_basis, n_band] = psi_out[n_basis, n_band] x hsub_out[n_band, n_band] // hpsi_out[n_basis, n_band] = psi_out[n_basis, n_band] x hsub_out[n_band, n_band] this->rotate_wf(hsub_out, psi_out, workspace_in); this->rotate_wf(hsub_out, hpsi_out, workspace_in); - + return; } -template -void DiagoBPCG::calc_hsub_with_block_exit( - ct::Tensor& psi_out, - ct::Tensor& hpsi_out, - ct::Tensor& hsub_out, - ct::Tensor& workspace_in, - ct::Tensor& eigenvalue_out) +template +void DiagoBPCG::calc_hsub_with_block_exit(ct::Tensor& psi_out, + ct::Tensor& hpsi_out, + ct::Tensor& hsub_out, + ct::Tensor& workspace_in, + ct::Tensor& eigenvalue_out) { // Diagonalization of the subspace matrix. this->diag_hsub(psi_out, hpsi_out, hsub_out, eigenvalue_out); @@ -266,7 +253,8 @@ void DiagoBPCG::diag(const HPsiFunc& hpsi_func, { const int current_scf_iter = hsolver::DiagoIterAssist::SCF_ITER; // Get the pointer of the input psi - this->psi = std::move(ct::TensorMap(psi_in /*psi_in.get_pointer()*/, t_type, device_type, {this->n_band_l, this->n_basis})); + this->psi = std::move( + ct::TensorMap(psi_in /*psi_in.get_pointer()*/, t_type, device_type, {this->n_band_l, this->n_basis})); // Update the precondition array this->calc_prec(); @@ -279,9 +267,7 @@ void DiagoBPCG::diag(const HPsiFunc& hpsi_func, setmem_var_op()(this->beta.template data(), std::numeric_limits::infinity(), this->n_band_l); int ntry = 0; - int max_iter = current_scf_iter > 1 ? - this->nline : - this->nline * 6; + int max_iter = current_scf_iter > 1 ? this->nline : this->nline * 6; do { ++ntry; @@ -291,8 +277,13 @@ void DiagoBPCG::diag(const HPsiFunc& hpsi_func, // 3. calculate the gradient by hpsi - epsilo * psi // 4. gradient mix with the previous gradient // 5. Do precondition - this->calc_grad_with_block(this->prec, this->err_st, this->beta, - this->psi, this->hpsi, this->grad, this->grad_old); + this->calc_grad_with_block(this->prec, + this->err_st, + this->beta, + this->psi, + this->hpsi, + this->grad, + this->grad_old); // Orthogonalize column vectors g_i in matrix grad to column vectors p_j in matrix psi // for all 'j less or equal to i'. @@ -314,7 +305,8 @@ void DiagoBPCG::diag(const HPsiFunc& hpsi_func, // orthogonal psi by cholesky method this->orth_cholesky(this->work, this->psi, this->hpsi, this->hsub); - if (current_scf_iter == 1 && ntry % this->nline == 0) { + if (current_scf_iter == 1 && ntry % this->nline == 0) + { this->calc_hsub_with_block(hpsi_func, psi_in, this->psi, this->hpsi, this->hsub, this->work, this->eigen); } } while (ntry < max_iter && this->test_error(this->err_st, ethr_band)); diff --git a/source/source_hsolver/diago_bpcg.h b/source/source_hsolver/diago_bpcg.h index 7c1553184d..78b75d5101 100644 --- a/source/source_hsolver/diago_bpcg.h +++ b/source/source_hsolver/diago_bpcg.h @@ -1,20 +1,21 @@ #ifndef DIAGO_BPCG_H_ #define DIAGO_BPCG_H_ -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/module_device/memory_op.h" -#include "module_base/module_device/types.h" -#include "module_base/para_gemm.h" #include "module_hamilt_general/hamilt.h" #include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/memory_op.h" +#include "source_base/module_device/types.h" +#include "source_base/para_gemm.h" #include "source_hsolver/kernels/dngvd_op.h" #include "source_hsolver/para_linear_transform.h" #include #include -#include +#include -namespace hsolver { +namespace hsolver +{ /** * @class DiagoBPCG @@ -26,11 +27,11 @@ template , typename Device = base_device::DEVI class DiagoBPCG { private: - // Note GetTypeReal::type will - // return T if T is real type(float, double), + // Note GetTypeReal::type will + // return T if T is real type(float, double), // otherwise return the real type of T(complex, complex) using Real = typename GetTypeReal::type; - // Column major psi in this class + // Column major psi in this class public: /** * @brief Constructor for DiagoBPCG class. @@ -69,10 +70,7 @@ class DiagoBPCG * @param psi_in Pointer to input wavefunction psi matrix with [dim: n_basis x n_band, column major]. * @param eigenvalue_in Pointer to the eigen array with [dim: n_band, column major]. */ - void diag(const HPsiFunc& hpsi_func, - T* psi_in, - Real* eigenvalue_in, - const std::vector& ethr_band); + void diag(const HPsiFunc& hpsi_func, T* psi_in, Real* eigenvalue_in, const std::vector& ethr_band); private: /// the number of bands of all processes @@ -89,9 +87,8 @@ class DiagoBPCG ModuleBase::PGemmCN pmmcn; PLinearTransform plintrans; - - ct::DataType r_type = ct::DataType::DT_INVALID; - ct::DataType t_type = ct::DataType::DT_INVALID; + ct::DataType r_type = ct::DataType::DT_INVALID; + ct::DataType t_type = ct::DataType::DT_INVALID; ct::DeviceType device_type = ct::DeviceType::UnKnown; ct::Tensor prec = {}, h_prec = {}; @@ -107,7 +104,7 @@ class DiagoBPCG /// Note: this pointer does not own memory, instead it ref the psi_in object. /// H|psi> matrix. ct::Tensor psi = {}, hpsi = {}; - + ct::Tensor hsub = {}; /// H|psi> - epsilo * psi, grad of the given problem. @@ -119,8 +116,8 @@ class DiagoBPCG // These are for hsolver gemm_op use /// ctx is nothing but the devices used in gemm_op (Device * ctx = nullptr;), - Device * ctx = {}; - // Pointer to objects of 1 and 0 for gemm + Device* ctx = {}; + // Pointer to objects of 1 and 0 for gemm const T *one = nullptr, *zero = nullptr, *neg_one = nullptr; const T one_ = static_cast(1.0), zero_ = static_cast(0.0), neg_one_ = static_cast(-1.0); @@ -159,10 +156,7 @@ class DiagoBPCG * @param psi_in The input wavefunction psi. * @param hpsi_out Pointer to the array where the resulting hpsi matrix will be stored. */ - void calc_hpsi_with_block( - const HPsiFunc& hpsi_func, - T *psi_in, - ct::Tensor& hpsi_out); + void calc_hpsi_with_block(const HPsiFunc& hpsi_func, T* psi_in, ct::Tensor& hpsi_out); /** * @brief Diagonalization of the subspace matrix. @@ -178,11 +172,10 @@ class DiagoBPCG * @param hsub_out Output Hamiltonian subtracted matrix with [dim: n_band x n_band, column major] * @param eigenvalue_out Computed eigen array with [dim: n_band] */ - void diag_hsub( - const ct::Tensor& psi_in, - const ct::Tensor& hpsi_in, - ct::Tensor& hsub_out, - ct::Tensor& eigenvalue_out); + void diag_hsub(const ct::Tensor& psi_in, + const ct::Tensor& hpsi_in, + ct::Tensor& hsub_out, + ct::Tensor& eigenvalue_out); /** * @brief Inplace matrix multiplication to obtain the initial guessed wavefunction. @@ -194,10 +187,7 @@ class DiagoBPCG * @param hsub_in Subspace matrix input, dim [n_basis, n_band] with column major. * @param psi_out output wavefunction matrix with dim [n_basis, n_band], column major. */ - void rotate_wf( - const ct::Tensor& hsub_in, - ct::Tensor& psi_out, - ct::Tensor& workspace_in); + void rotate_wf(const ct::Tensor& hsub_in, ct::Tensor& psi_out, ct::Tensor& workspace_in); /** * @brief Calculate the gradient for all bands used in CG method. @@ -224,12 +214,13 @@ class DiagoBPCG * 4. gradient mix with the previous gradient * 5. Do precondition */ - void calc_grad_with_block( - const ct::Tensor& prec_in, - ct::Tensor& err_out, - ct::Tensor& beta_out, - ct::Tensor& psi_in, ct::Tensor& hpsi_in, - ct::Tensor& grad_out, ct::Tensor& grad_old_out); + void calc_grad_with_block(const ct::Tensor& prec_in, + ct::Tensor& err_out, + ct::Tensor& beta_out, + ct::Tensor& psi_in, + ct::Tensor& hpsi_in, + ct::Tensor& grad_out, + ct::Tensor& grad_old_out); /** * @@ -247,13 +238,14 @@ class DiagoBPCG * @param hsub_out Subspace matrix output. * @param eigenvalue_out Computed eigen. */ - void calc_hsub_with_block( - const HPsiFunc& hpsi_func, - T *psi_in, - ct::Tensor& psi_out, ct::Tensor& hpsi_out, - ct::Tensor& hsub_out, ct::Tensor& workspace_in, - ct::Tensor& eigenvalue_out); - + void calc_hsub_with_block(const HPsiFunc& hpsi_func, + T* psi_in, + ct::Tensor& psi_out, + ct::Tensor& hpsi_out, + ct::Tensor& hsub_out, + ct::Tensor& workspace_in, + ct::Tensor& eigenvalue_out); + /** * * @brief Apply the Hamiltonian operator to psi and obtain the hpsi matrix. @@ -270,12 +262,11 @@ class DiagoBPCG * @param hsub_out Subspace matrix output. * @param eigenvalue_out Computed eigen. */ - void calc_hsub_with_block_exit( - ct::Tensor& psi_out, - ct::Tensor& hpsi_out, - ct::Tensor& hsub_out, - ct::Tensor& workspace_in, - ct::Tensor& eigenvalue_out); + void calc_hsub_with_block_exit(ct::Tensor& psi_out, + ct::Tensor& hpsi_out, + ct::Tensor& hsub_out, + ct::Tensor& workspace_in, + ct::Tensor& eigenvalue_out); /** * @brief Orthogonalize column vectors in grad to column vectors in psi. @@ -287,10 +278,7 @@ class DiagoBPCG * @param grad_out Input and output gradient array, [dim: n_basis x n_band, column major, lda = n_basis_max].. * @note This function is a member of the DiagoBPCG class. */ - void orth_projection( - const ct::Tensor& psi_in, - ct::Tensor& hsub_in, - ct::Tensor& grad_out); + void orth_projection(const ct::Tensor& psi_in, ct::Tensor& hsub_in, ct::Tensor& grad_out); /** * @@ -305,11 +293,7 @@ class DiagoBPCG * 2. Calculate theta. * 3. Update psi as well as hpsi. */ - void line_minimize( - ct::Tensor& grad_in, - ct::Tensor& hgrad_in, - ct::Tensor& psi_out, - ct::Tensor& hpsi_out); + void line_minimize(ct::Tensor& grad_in, ct::Tensor& hgrad_in, ct::Tensor& psi_out, ct::Tensor& hpsi_out); /** * @brief Orthogonalize and normalize the column vectors in psi_out using Cholesky decomposition. @@ -319,11 +303,7 @@ class DiagoBPCG * @param hpsi_out Input and output hpsi array. [dim: n_basis x n_band, column major, lda = n_basis_max]. * @param hsub_out Input Hamiltonian product array. [dim: n_band x n_band, column major, lda = n_band]. */ - void orth_cholesky( - ct::Tensor& workspace_in, - ct::Tensor& psi_out, - ct::Tensor& hpsi_out, - ct::Tensor& hsub_out); + void orth_cholesky(ct::Tensor& workspace_in, ct::Tensor& psi_out, ct::Tensor& hpsi_out, ct::Tensor& hsub_out); /** * @brief Checks if the error satisfies the given threshold. @@ -347,10 +327,9 @@ class DiagoBPCG using syncmem_complex_op = ct::kernels::synchronize_memory; // note: these operators use template parameter base_device::Device_* - // defined in module_base/module_device/types.h + // defined in source_base/module_device/types.h // different from ct_Device! using gemm_op = ModuleBase::gemm_op; - }; } // namespace hsolver diff --git a/source/source_hsolver/diago_cg.cpp b/source/source_hsolver/diago_cg.cpp index 7b4a1a9f79..7f8be9c2d8 100644 --- a/source/source_hsolver/diago_cg.cpp +++ b/source/source_hsolver/diago_cg.cpp @@ -4,12 +4,12 @@ #include #include #include -#include -#include -#include -#include -#include // ModuleBase::TITLE -#include // ModuleBase::GlobalFunc::NOTE +#include +#include // ModuleBase::GlobalFunc::NOTE +#include +#include +#include +#include // ModuleBase::TITLE #include using namespace hsolver; @@ -184,7 +184,8 @@ void DiagoCG::diag_mock(const ct::Tensor& prec_in, int ii = 0; for (ii = m - 2; ii >= 0; ii--) { - if (eigen_pack[m] - eigen_pack[ii] > 2.0 * pw_diag_thr_){ + if (eigen_pack[m] - eigen_pack[ii] > 2.0 * pw_diag_thr_) + { break; } } @@ -324,8 +325,7 @@ void DiagoCG::calc_gamma_cg(const int& iter, // (1) Update gg_inter! // gg_inter = // Attention : the 'g' in g0 is getted last time - gg_inter - = ModuleBase::dot_real_op()(this->n_basis_, grad.data(), g0.data()); // b means before + gg_inter = ModuleBase::dot_real_op()(this->n_basis_, grad.data(), g0.data()); // b means before } // (2) Update for g0! @@ -402,7 +402,8 @@ bool DiagoCG::update_psi(const ct::Tensor& pphi, { cg_norm = sqrt(ModuleBase::dot_real_op()(this->n_basis_, cg.data(), scg.data())); - if (cg_norm < 1.0e-10){ + if (cg_norm < 1.0e-10) + { return true; } @@ -529,8 +530,8 @@ void DiagoCG::schmit_orth(const int& m, const ct::Tensor& psi, const psi_norm -= ( conj(lagrange[j]) * lagrange[j] ).real(); }*/ //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - auto psi_norm = ct::extract(lagrange_so[m]) - - dot_real_op()(m, lagrange_so.data(), lagrange_so.data(), false); + auto psi_norm + = ct::extract(lagrange_so[m]) - dot_real_op()(m, lagrange_so.data(), lagrange_so.data(), false); if (psi_norm <= 0.0) { diff --git a/source/source_hsolver/diago_cg.h b/source/source_hsolver/diago_cg.h index 9d254ded18..30f1851ef6 100644 --- a/source/source_hsolver/diago_cg.h +++ b/source/source_hsolver/diago_cg.h @@ -1,15 +1,14 @@ #ifndef MODULE_HSOLVER_DIAGO_CG_H_ #define MODULE_HSOLVER_DIAGO_CG_H_ -#include - -#include -#include - #include #include +#include +#include +#include -namespace hsolver { +namespace hsolver +{ template class DiagoCG final @@ -20,21 +19,21 @@ class DiagoCG final // otherwise return the real type of T(complex, complex) using Real = typename GetTypeReal::type; using ct_Device = typename ct::PsiToContainer::type; + public: using Func = std::function; // Constructor need: // 1. temporary mock of Hamiltonian "Hamilt_PW" // 2. precondition pointer should point to place of precondition array. DiagoCG(const std::string& basis_type, const std::string& calculation); - DiagoCG( - const std::string& basis_type, - const std::string& calculation, - const bool& need_subspace, - const Func& subspace_func, - const Real& pw_diag_thr, - const int& pw_diag_nmax, - const int& nproc_in_pool); - + DiagoCG(const std::string& basis_type, + const std::string& calculation, + const bool& need_subspace, + const Func& subspace_func, + const Real& pw_diag_thr, + const int& pw_diag_nmax, + const int& nproc_in_pool); + ~DiagoCG(); // virtual void init(){}; @@ -48,7 +47,7 @@ class DiagoCG final const ct::Tensor& prec = {}); private: - Device * ctx_ = {}; + Device* ctx_ = {}; /// static variables, used for passing control variables /// record for how many bands not have convergence eigenvalues int notconv_ = 0; @@ -78,56 +77,41 @@ class DiagoCG final /// A function object that performs the subspace calculation. std::function subspace_func_ = nullptr; - void calc_grad( - const ct::Tensor& prec, - ct::Tensor& grad, - ct::Tensor& hphi, - ct::Tensor& sphi, - ct::Tensor& pphi); - - void orth_grad( - const ct::Tensor& psi, - const int& m, - ct::Tensor& grad, - ct::Tensor& scg, - ct::Tensor& lagrange); - - void calc_gamma_cg( - const int& iter, - const Real& cg_norm, - const Real& theta, - const ct::Tensor& prec, - const ct::Tensor& scg, - const ct::Tensor& grad, - const ct::Tensor& phi_m, - Real& gg_last, - ct::Tensor& g0, - ct::Tensor& cg); - - bool update_psi( - const ct::Tensor& pphi, - const ct::Tensor& cg, - const ct::Tensor& scg, - const double& ethreshold, - Real &cg_norm, - Real &theta, - Real &eigen, - ct::Tensor& phi_m, - ct::Tensor& sphi, - ct::Tensor& hphi); + void calc_grad(const ct::Tensor& prec, ct::Tensor& grad, ct::Tensor& hphi, ct::Tensor& sphi, ct::Tensor& pphi); + + void orth_grad(const ct::Tensor& psi, const int& m, ct::Tensor& grad, ct::Tensor& scg, ct::Tensor& lagrange); + + void calc_gamma_cg(const int& iter, + const Real& cg_norm, + const Real& theta, + const ct::Tensor& prec, + const ct::Tensor& scg, + const ct::Tensor& grad, + const ct::Tensor& phi_m, + Real& gg_last, + ct::Tensor& g0, + ct::Tensor& cg); + + bool update_psi(const ct::Tensor& pphi, + const ct::Tensor& cg, + const ct::Tensor& scg, + const double& ethreshold, + Real& cg_norm, + Real& theta, + Real& eigen, + ct::Tensor& phi_m, + ct::Tensor& sphi, + ct::Tensor& hphi); void schmit_orth(const int& m, const ct::Tensor& psi, const ct::Tensor& sphi, ct::Tensor& phi_m); // used in diag() for template replace Hamilt with Hamilt_PW - void diag_mock(const ct::Tensor& prec, - ct::Tensor& psi, - ct::Tensor& eigen, - const std::vector& ethr_band); + void diag_mock(const ct::Tensor& prec, ct::Tensor& psi, ct::Tensor& eigen, const std::vector& ethr_band); bool test_exit_cond(const int& ntry, const int& notconv) const; using dot_real_op = ModuleBase::dot_real_op; - const T * one_ = nullptr, * zero_ = nullptr, * neg_one_ = nullptr; + const T *one_ = nullptr, *zero_ = nullptr, *neg_one_ = nullptr; }; } // namespace hsolver diff --git a/source/source_hsolver/diago_cusolver.cpp b/source/source_hsolver/diago_cusolver.cpp index efaf20a28a..d9fb88fb45 100644 --- a/source/source_hsolver/diago_cusolver.cpp +++ b/source/source_hsolver/diago_cusolver.cpp @@ -1,10 +1,10 @@ #include "diago_cusolver.h" -#include "module_base/blacs_connector.h" -#include "module_base/global_variable.h" -#include "module_base/scalapack_connector.h" -#include "module_base/timer.h" #include "module_parameter/parameter.h" +#include "source_base/blacs_connector.h" +#include "source_base/global_variable.h" +#include "source_base/scalapack_connector.h" +#include "source_base/timer.h" #include #include diff --git a/source/source_hsolver/diago_cusolver.h b/source/source_hsolver/diago_cusolver.h index 1921b32e70..9c349e21a0 100644 --- a/source/source_hsolver/diago_cusolver.h +++ b/source/source_hsolver/diago_cusolver.h @@ -1,9 +1,9 @@ #ifndef DIAGOCUSOLVER_H #define DIAGOCUSOLVER_H -#include "module_base/macros.h" // GetRealType -#include "module_hamilt_general/hamilt.h" #include "module_basis/module_ao/parallel_orbitals.h" +#include "module_hamilt_general/hamilt.h" +#include "source_base/macros.h" // GetRealType #include "source_hsolver/kernels/cuda/diag_cusolver.cuh" // #include "source_hsolver/kernels/cuda/dngvd_op.cu" @@ -17,13 +17,12 @@ class DiagoCusolver private: // Real is the real part of the complex type T using Real = typename GetTypeReal::type; - Parallel_Orbitals const * ParaV; + Parallel_Orbitals const* ParaV; public: - DiagoCusolver(const Parallel_Orbitals* ParaV = nullptr); ~DiagoCusolver(); - + // Override the diag function for CUSOLVER diagonalization void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in); diff --git a/source/source_hsolver/diago_cusolvermp.cpp b/source/source_hsolver/diago_cusolvermp.cpp index 09aa85940b..46505f925c 100644 --- a/source/source_hsolver/diago_cusolvermp.cpp +++ b/source/source_hsolver/diago_cusolvermp.cpp @@ -1,9 +1,9 @@ #ifdef __CUSOLVERMP -#include "module_parameter/parameter.h" #include "diago_cusolvermp.h" -#include "module_base/timer.h" +#include "module_parameter/parameter.h" +#include "source_base/timer.h" using complex = std::complex; diff --git a/source/source_hsolver/diago_cusolvermp.h b/source/source_hsolver/diago_cusolvermp.h index 02cc22568f..a717cabf6e 100644 --- a/source/source_hsolver/diago_cusolvermp.h +++ b/source/source_hsolver/diago_cusolvermp.h @@ -2,9 +2,9 @@ #define DIAGO_CUSOLVERMPH #ifdef __CUSOLVERMP -#include "module_hamilt_general/hamilt.h" -#include "module_base/macros.h" #include "module_basis/module_ao/parallel_orbitals.h" +#include "module_hamilt_general/hamilt.h" +#include "source_base/macros.h" #include "source_hsolver/kernels/cuda/diag_cusolvermp.cuh" namespace hsolver { diff --git a/source/source_hsolver/diago_dav_subspace.cpp b/source/source_hsolver/diago_dav_subspace.cpp index 4efe46b2ab..b8a86ebfb5 100644 --- a/source/source_hsolver/diago_dav_subspace.cpp +++ b/source/source_hsolver/diago_dav_subspace.cpp @@ -1,15 +1,14 @@ #include "diago_dav_subspace.h" #include "diago_iter_assist.h" -#include "module_base/memory.h" -#include "module_base/module_device/device.h" -#include "module_base/timer.h" -#include "source_hsolver/kernels/dngvd_op.h" -#include "module_base/kernels/math_kernel_op.h" -#include "source_hsolver/kernels/bpcg_kernel_op.h" -#include "module_base/kernels/dsp/dsp_connector.h" - +#include "source_base/kernels/dsp/dsp_connector.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/memory.h" +#include "source_base/module_device/device.h" +#include "source_base/timer.h" #include "source_hsolver/diag_hs_para.h" +#include "source_hsolver/kernels/bpcg_kernel_op.h" +#include "source_hsolver/kernels/dngvd_op.h" #include @@ -32,7 +31,7 @@ Diago_DavSubspace::Diago_DavSubspace(const std::vector& precond const int diago_subspace_bs_in) : precondition(precondition_in), n_band(nband_in), dim(nbasis_in), nbase_x(nband_in * david_ndim_in), diag_thr(diag_thr_in), iter_nmax(diag_nmax_in), is_subspace(need_subspace_in), diag_comm(diag_comm_in), - diag_subspace(diag_subspace_in), diago_subspace_bs(diago_subspace_bs_in) + diag_subspace(diag_subspace_in), diago_subspace_bs(diago_subspace_bs_in) { this->device = base_device::get_device_type(this->ctx); @@ -124,9 +123,7 @@ int Diago_DavSubspace::diag_once(const HPsiFunc& hpsi_func, { unconv[m] = m; - syncmem_complex_op()(this->psi_in_iter + m * this->dim, - psi_in + m * psi_in_dmax, - this->dim); + syncmem_complex_op()(this->psi_in_iter + m * this->dim, psi_in + m * psi_in_dmax, this->dim); } // compute h*psi_in_iter @@ -227,9 +224,7 @@ int Diago_DavSubspace::diag_once(const HPsiFunc& hpsi_func, // update this->psi_in_iter according to psi_in for (size_t i = 0; i < this->n_band; i++) { - syncmem_complex_op()(this->psi_in_iter + i * this->dim, - psi_in + i * psi_in_dmax, - this->dim); + syncmem_complex_op()(this->psi_in_iter + i * this->dim, psi_in + i * psi_in_dmax, this->dim); } this->refresh(this->dim, @@ -280,19 +275,19 @@ void Diago_DavSubspace::cal_grad(const HPsiFunc& hpsi_func, #else ModuleBase::gemm_op() #endif - ('N', - 'N', - this->dim, - notconv, - nbase, - this->one, - hphi, - this->dim, - vcc, - this->nbase_x, - this->zero, - psi_iter + (nbase) * this->dim, - this->dim); + ('N', + 'N', + this->dim, + notconv, + nbase, + this->one, + hphi, + this->dim, + vcc, + this->nbase_x, + this->zero, + psi_iter + (nbase) * this->dim, + this->dim); // Eigenvalues operation section std::vector e_temp_cpu(this->notconv, 0); @@ -312,7 +307,7 @@ void Diago_DavSubspace::cal_grad(const HPsiFunc& hpsi_func, { syncmem_var_h2d_op()(e_temp_hd, e_temp_cpu.data(), this->notconv); } - + apply_eigenvalues_op()(nbase, this->nbase_x, this->notconv, this->vcc, this->vcc, e_temp_hd); if (this->device == base_device::GpuDevice) @@ -346,24 +341,19 @@ void Diago_DavSubspace::cal_grad(const HPsiFunc& hpsi_func, Real* eigenvalues_gpu = nullptr; resmem_real_op()(eigenvalues_gpu, notconv); syncmem_var_h2d_op()(eigenvalues_gpu, (*eigenvalue_iter).data(), notconv); - - precondition_op()(this->dim, - psi_iter, - nbase, - notconv, - d_precondition, - eigenvalues_gpu); + + precondition_op()(this->dim, psi_iter, nbase, notconv, d_precondition, eigenvalues_gpu); delmem_real_op()(eigenvalues_gpu); } else #endif { precondition_op()(this->dim, - psi_iter, - nbase, - notconv, - this->precondition.data(), - (*eigenvalue_iter).data()); + psi_iter, + nbase, + notconv, + this->precondition.data(), + (*eigenvalue_iter).data()); } // Normalize section @@ -374,23 +364,15 @@ void Diago_DavSubspace::cal_grad(const HPsiFunc& hpsi_func, resmem_real_op()(psi_norm, notconv); using setmem_real_op = base_device::memory::set_memory_op; setmem_real_op()(psi_norm, 0.0, notconv); - - normalize_op()(this->dim, - psi_iter, - nbase, - notconv, - psi_norm); + + normalize_op()(this->dim, psi_iter, nbase, notconv, psi_norm); delmem_real_op()(psi_norm); } else #endif { Real* psi_norm = nullptr; - normalize_op()(this->dim, - psi_iter, - nbase, - notconv, - psi_norm); + normalize_op()(this->dim, psi_iter, nbase, notconv, psi_norm); } // update hpsi[:, nbase:nbase+notconv] @@ -416,39 +398,39 @@ void Diago_DavSubspace::cal_elem(const int& dim, ModuleBase::gemm_op_mt() #else ModuleBase::gemm_op() -#endif - ('C', - 'N', - nbase + notconv, - notconv, - this->dim, - this->one, - psi_iter, - this->dim, - &hphi[nbase * this->dim], - this->dim, - this->zero, - &hcc[nbase * this->nbase_x], - this->nbase_x); +#endif + ('C', + 'N', + nbase + notconv, + notconv, + this->dim, + this->one, + psi_iter, + this->dim, + &hphi[nbase * this->dim], + this->dim, + this->zero, + &hcc[nbase * this->nbase_x], + this->nbase_x); #ifdef __DSP ModuleBase::gemm_op_mt() #else ModuleBase::gemm_op() #endif - ('C', - 'N', - nbase + notconv, - notconv, - this->dim, - this->one, - psi_iter, - this->dim, - psi_iter + nbase * this->dim, - this->dim, - this->zero, - &scc[nbase * this->nbase_x], - this->nbase_x); + ('C', + 'N', + nbase + notconv, + notconv, + this->dim, + this->one, + psi_iter, + this->dim, + psi_iter + nbase * this->dim, + this->dim, + this->zero, + &scc[nbase * this->nbase_x], + this->nbase_x); #ifdef __MPI if (this->diag_comm.nproc > 1) @@ -552,15 +534,21 @@ void Diago_DavSubspace::diag_zhegvx(const int& nbase, base_device::memory::resize_memory_op()(hcc_gpu, nbase * nbase); base_device::memory::resize_memory_op()(scc_gpu, nbase * nbase); base_device::memory::resize_memory_op()(vcc_gpu, nbase * nbase); - for(int i=0;i()(hcc_gpu + i * nbase, hcc + i * nbase_x, nbase); - base_device::memory::synchronize_memory_op()(scc_gpu + i * nbase, scc + i * nbase_x, nbase); + base_device::memory::synchronize_memory_op()(hcc_gpu + i * nbase, + hcc + i * nbase_x, + nbase); + base_device::memory::synchronize_memory_op()(scc_gpu + i * nbase, + scc + i * nbase_x, + nbase); } dngvd_op()(this->ctx, nbase, nbase, hcc_gpu, scc_gpu, eigenvalue_gpu, vcc_gpu); - for(int i=0;i()(vcc + i * nbase_x, vcc_gpu + i * nbase, nbase); + base_device::memory::synchronize_memory_op()(vcc + i * nbase_x, + vcc_gpu + i * nbase, + nbase); } delmem_complex_op()(hcc_gpu); delmem_complex_op()(scc_gpu); @@ -618,7 +606,7 @@ void Diago_DavSubspace::diag_zhegvx(const int& nbase, } else { -#ifdef __MPI +#ifdef __MPI std::vector h_diag; std::vector s_diag; std::vector vcc_tmp; @@ -657,7 +645,7 @@ void Diago_DavSubspace::diag_zhegvx(const int& nbase, } #else std::cout << "Error: parallel diagonalization is not supported in serial mode." << std::endl; - exit(1); + exit(1); #endif } } @@ -697,19 +685,19 @@ void Diago_DavSubspace::refresh(const int& dim, #else ModuleBase::gemm_op() #endif - ('N', - 'N', - this->dim, - nband, - nbase, - this->one, - this->hphi, - this->dim, - this->vcc, - this->nbase_x, - this->zero, - psi_iter + nband * this->dim, - this->dim); + ('N', + 'N', + this->dim, + nband, + nbase, + this->one, + this->hphi, + this->dim, + this->vcc, + this->nbase_x, + this->zero, + psi_iter + nband * this->dim, + this->dim); // update hphi syncmem_complex_op()(hphi, psi_iter + nband * this->dim, this->dim * nband); diff --git a/source/source_hsolver/diago_dav_subspace.h b/source/source_hsolver/diago_dav_subspace.h index a6dd87d799..d28d17360b 100644 --- a/source/source_hsolver/diago_dav_subspace.h +++ b/source/source_hsolver/diago_dav_subspace.h @@ -1,15 +1,14 @@ #ifndef DIAGO_NEW_DAV_H #define DIAGO_NEW_DAV_H -#include "module_base/macros.h" // GetRealType -#include "module_base/module_device/device.h" // base_device -#include "module_base/module_device/memory_op.h"// base_device::memory" - +#include "source_base/macros.h" // GetRealType +#include "source_base/module_device/device.h" // base_device +#include "source_base/module_device/memory_op.h" // base_device::memory" #include "source_hsolver/diag_comm_info.h" #include "source_hsolver/diag_const_nums.h" -#include #include +#include namespace hsolver { @@ -141,7 +140,7 @@ class Diago_DavSubspace bool test_exit_cond(const int& ntry, const int& notconv, const bool& scf); - int diag_subspace; // 0: LAPACK, 1: Gen-ELPA, 2: ScaLAPACK + int diag_subspace; // 0: LAPACK, 1: Gen-ELPA, 2: ScaLAPACK int diago_subspace_bs = 0; // the block size in 2d block cyclic distribution if use elpa or scalapack #ifdef __DSP diff --git a/source/source_hsolver/diago_david.cpp b/source/source_hsolver/diago_david.cpp index ec1599bee8..4602a81b14 100644 --- a/source/source_hsolver/diago_david.cpp +++ b/source/source_hsolver/diago_david.cpp @@ -1,24 +1,22 @@ #include "diago_david.h" -#include "module_base/timer.h" // ModuleBase::timer::tick -#include "module_base/tool_title.h" // ModuleBase::TITLE -#include "module_base/module_device/device.h" - +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/device.h" +#include "source_base/timer.h" // ModuleBase::timer::tick +#include "source_base/tool_title.h" // ModuleBase::TITLE #include "source_hsolver/kernels/dngvd_op.h" -#include "module_base/kernels/math_kernel_op.h" - using namespace hsolver; - template -DiagoDavid::DiagoDavid(const Real* precondition_in, +DiagoDavid::DiagoDavid(const Real* precondition_in, const int nband_in, const int dim_in, const int david_ndim_in, const bool use_paw_in, const diag_comm_info& diag_comm_in) - : nband(nband_in), dim(dim_in), nbase_x(david_ndim_in * nband_in), david_ndim(david_ndim_in), use_paw(use_paw_in), diag_comm(diag_comm_in) + : nband(nband_in), dim(dim_in), nbase_x(david_ndim_in * nband_in), david_ndim(david_ndim_in), use_paw(use_paw_in), + diag_comm(diag_comm_in) { this->device = base_device::get_device_type(this->ctx); this->precondition = precondition_in; @@ -33,7 +31,6 @@ DiagoDavid::DiagoDavid(const Real* precondition_in, // 3: check the eigenvalues and errors of the last result // default: no check - // set auxiliary memory // !!! // allocate operaions MUST be paired with deallocate operations @@ -46,14 +43,16 @@ DiagoDavid::DiagoDavid(const Real* precondition_in, // However, in most cases, total number of plane waves should be much larger than nband*PW_DIAG_NDIM /// initialize variables - /// k_first = 0 means that nks is more like a dimension of "basis" to be contracted in "HPsi".In LR-TDDFT the formula writes : + /// k_first = 0 means that nks is more like a dimension of "basis" to be contracted in "HPsi".In LR-TDDFT the + /// formula writes : /// $$\sum_{ jb\mathbf{k}'}A^I_{ia\mathbf{k}, jb\mathbf{k}' }X ^ I_{ jb\mathbf{k}'}$$ /// In the code : /// - "H" means A /// - "Psi" means X /// - "band" means the superscript I : the number of excited states to be solved /// - k : k-points, the same meaning as the ground state - /// - "basis" : number of occupied ks-orbitals(subscripts i,j) * number of unoccupied ks-orbitals(subscripts a,b), corresponding to "bands" of the ground state + /// - "basis" : number of occupied ks-orbitals(subscripts i,j) * number of unoccupied ks-orbitals(subscripts a,b), + /// corresponding to "bands" of the ground state // the lowest N eigenvalues base_device::memory::resize_memory_op()(this->eigenvalue, nbase_x, "DAV::eig"); @@ -84,7 +83,7 @@ DiagoDavid::DiagoDavid(const Real* precondition_in, resmem_complex_op()(this->vcc, nbase_x * nbase_x, "DAV::vcc"); setmem_complex_op()(this->vcc, 0, nbase_x * nbase_x); //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< - + // lagrange_matrix(nband, nband); // for orthogonalization resmem_complex_op()(this->lagrange_matrix, nband * nband); setmem_complex_op()(this->lagrange_matrix, 0, nband * nband); @@ -125,7 +124,7 @@ int DiagoDavid::diag_once(const HPsiFunc& hpsi_func, const int dim, const int nband, const int ld_psi, - T *psi_in, + T* psi_in, Real* eigenvalue_in, const std::vector& ethr_band, const int david_maxiter) @@ -145,7 +144,8 @@ int DiagoDavid::diag_once(const HPsiFunc& hpsi_func, this->notconv = nband; // the number of unconverged eigenvalues - for (int m = 0; m < nband; m++) { + for (int m = 0; m < nband; m++) + { unconv[m] = m; } @@ -162,24 +162,24 @@ int DiagoDavid::diag_once(const HPsiFunc& hpsi_func, { { // phm_in->sPsi(psi_in + m*ld_psi, &this->spsi[m * dim], dim, dim, 1); - spsi_func(psi_in + m*ld_psi,&this->spsi[m*dim],dim, 1); + spsi_func(psi_in + m * ld_psi, &this->spsi[m * dim], dim, 1); } } // begin SchmidtOrth for (int m = 0; m < nband; m++) { - syncmem_complex_op()(basis + dim*m, psi_in + m*ld_psi, dim); + syncmem_complex_op()(basis + dim * m, psi_in + m * ld_psi, dim); this->SchmidtOrth(dim, - nband, - m, - this->spsi, - &this->lagrange_matrix[m * nband], - pre_matrix_mm_m[m], - pre_matrix_mv_m[m]); + nband, + m, + this->spsi, + &this->lagrange_matrix[m * nband], + pre_matrix_mm_m[m], + pre_matrix_mv_m[m]); { // phm_in->sPsi(basis + dim*m, &this->spsi[m * dim], dim, dim, 1); - spsi_func(basis + dim*m, &this->spsi[m * dim], dim, 1); + spsi_func(basis + dim * m, &this->spsi[m * dim], dim, 1); } } @@ -238,8 +238,7 @@ int DiagoDavid::diag_once(const HPsiFunc& hpsi_func, } ModuleBase::timer::tick("DiagoDavid", "check_update"); - if (!this->notconv || (nbase + this->notconv > nbase_x) - || (dav_iter == david_maxiter)) + if (!this->notconv || (nbase + this->notconv > nbase_x) || (dav_iter == david_maxiter)) { ModuleBase::timer::tick("DiagoDavid", "last"); @@ -296,25 +295,26 @@ int DiagoDavid::diag_once(const HPsiFunc& hpsi_func, return dav_iter; } - template void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, - const SPsiFunc& spsi_func, - const int& dim, - const int& nbase, // current dimension of the reduced basis - const int nbase_x, // maximum dimension of the reduced basis set - const int& notconv, - T* hpsi, - T* spsi, - const T* vcc, - const int* unconv, - const Real* eigenvalue) + const SPsiFunc& spsi_func, + const int& dim, + const int& nbase, // current dimension of the reduced basis + const int nbase_x, // maximum dimension of the reduced basis set + const int& notconv, + T* hpsi, + T* spsi, + const T* vcc, + const int* unconv, + const Real* eigenvalue) { - if (test_david == 1) { + if (test_david == 1) + { ModuleBase::TITLE("DiagoDavid", "cal_grad"); } // if all eigenpairs have converged, return - if (notconv == 0) { + if (notconv == 0) + { return; } ModuleBase::timer::tick("DiagoDavid", "cal_grad"); @@ -349,9 +349,7 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // vc_ev_vector[m * nbase + i] = vcc[i * nbase_x + unconv[m]]; for (int m = 0; m < notconv; m++) { - syncmem_complex_op()(vc_ev_vector + m * nbase, - vcc + unconv[m] * nbase_x, - nbase); + syncmem_complex_op()(vc_ev_vector + m * nbase, vcc + unconv[m] * nbase_x, nbase); } // basis[nbase] = hpsi * vc_ev_vector = hpsi*vcc @@ -415,7 +413,7 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, // basis[nbase] = basis[nbase] - spsi * vc_ev_vector // = hpsi - spsi * lambda * vcc // = (H - lambda * S) * psi * vcc - // = (H - lambda * S) * psi_new + // = (H - lambda * S) * psi_new //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ModuleBase::gemm_op()('N', 'N', @@ -478,7 +476,7 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, { { // phm_in->sPsi(basis + dim*(nbase + m), &spsi[(nbase + m) * dim], dim, dim, 1); - spsi_func(basis + dim*(nbase + m), &spsi[(nbase + m) * dim], dim, 1); + spsi_func(basis + dim * (nbase + m), &spsi[(nbase + m) * dim], dim, 1); } } // first nbase bands psi* dot notconv bands spsi to prepare lagrange_matrix @@ -502,15 +500,15 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, for (int m = 0; m < notconv; m++) { this->SchmidtOrth(dim, - nbase + notconv, - nbase + m, - spsi, - &lagrange[m * (nbase + notconv)], - pre_matrix_mm_m[m], - pre_matrix_mv_m[m]); + nbase + notconv, + nbase + m, + spsi, + &lagrange[m * (nbase + notconv)], + pre_matrix_mm_m[m], + pre_matrix_mv_m[m]); { // phm_in->sPsi(basis + dim*(nbase + m), &spsi[(nbase + m) * dim], dim, dim, 1); - spsi_func(basis + dim*(nbase + m), &spsi[(nbase + m) * dim], dim, 1); + spsi_func(basis + dim * (nbase + m), &spsi[(nbase + m) * dim], dim, 1); } } // calculate H|psi> for not convergence bands @@ -528,22 +526,23 @@ void DiagoDavid::cal_grad(const HPsiFunc& hpsi_func, return; } - template void DiagoDavid::cal_elem(const int& dim, - int& nbase, // current dimension of the reduced basis - const int nbase_x, // maximum dimension of the reduced basis set - const int& notconv, // number of newly added basis vectors - const T* hpsi, - const T* spsi, - T* hcc, - T* scc) + int& nbase, // current dimension of the reduced basis + const int nbase_x, // maximum dimension of the reduced basis set + const int& notconv, // number of newly added basis vectors + const T* hpsi, + const T* spsi, + T* hcc, + T* scc) { - if (test_david == 1) { + if (test_david == 1) + { ModuleBase::TITLE("DiagoDavid", "cal_elem"); } - if (notconv == 0) { + if (notconv == 0) + { return; } ModuleBase::timer::tick("DiagoDavid", "cal_elem"); @@ -578,7 +577,6 @@ void DiagoDavid::cal_elem(const int& dim, // scc + nbase, // notconv * (nbase + notconv) // nbase_x); - #ifdef __MPI if (diag_comm.nproc > 1) { @@ -593,18 +591,29 @@ void DiagoDavid::cal_elem(const int& dim, } else { - if (base_device::get_current_precision(swap) == "single") { + if (base_device::get_current_precision(swap) == "single") + { MPI_Reduce(swap, hcc + nbase * nbase_x, notconv * nbase_x, MPI_COMPLEX, MPI_SUM, 0, diag_comm.comm); } - else { - MPI_Reduce(swap, hcc + nbase * nbase_x, notconv * nbase_x, MPI_DOUBLE_COMPLEX, MPI_SUM, 0, diag_comm.comm); + else + { + MPI_Reduce(swap, + hcc + nbase * nbase_x, + notconv * nbase_x, + MPI_DOUBLE_COMPLEX, + MPI_SUM, + 0, + diag_comm.comm); } // syncmem_complex_op()(this->ctx, this->ctx, swap, scc + nbase * nbase_x, notconv * nbase_x); - if (base_device::get_current_precision(swap) == "single") { + if (base_device::get_current_precision(swap) == "single") + { // MPI_Reduce(swap, scc + nbase * nbase_x, notconv * nbase_x, MPI_COMPLEX, MPI_SUM, 0, diag_comm.comm); } - else { - // MPI_Reduce(swap, scc + nbase * nbase_x, notconv * nbase_x, MPI_DOUBLE_COMPLEX, MPI_SUM, 0, diag_comm.comm); + else + { + // MPI_Reduce(swap, scc + nbase * nbase_x, notconv * nbase_x, MPI_DOUBLE_COMPLEX, MPI_SUM, 0, + // diag_comm.comm); } } delete[] swap; @@ -635,12 +644,12 @@ void DiagoDavid::cal_elem(const int& dim, //============================================================================== template void DiagoDavid::diag_zhegvx(const int& nbase, - const int& nband, - const T* hcc, - const T* /*scc*/, - const int& nbase_x, - Real* eigenvalue, // in CPU - T* vcc) + const int& nband, + const T* hcc, + const T* /*scc*/, + const int& nbase_x, + Real* eigenvalue, // in CPU + T* vcc) { ModuleBase::timer::tick("DiagoDavid", "diag_zhegvx"); if (diag_comm.rank == 0) @@ -682,28 +691,28 @@ void DiagoDavid::diag_zhegvx(const int& nbase, return; } - template void DiagoDavid::refresh(const int& dim, - const int& nband, - int& nbase, - const int nbase_x, // maximum dimension of the reduced basis set - const Real* eigenvalue_in, - const T *psi_in, - const int ld_psi, - T* hpsi, - T* spsi, - T* hcc, - T* scc, - T* vcc) + const int& nband, + int& nbase, + const int nbase_x, // maximum dimension of the reduced basis set + const Real* eigenvalue_in, + const T* psi_in, + const int ld_psi, + T* hpsi, + T* spsi, + T* hcc, + T* scc, + T* vcc) { - if (test_david == 1) { + if (test_david == 1) + { ModuleBase::TITLE("DiagoDavid", "refresh"); } ModuleBase::timer::tick("DiagoDavid", "refresh"); // update hp,sp - setmem_complex_op()(basis , 0, nbase_x * dim); + setmem_complex_op()(basis, 0, nbase_x * dim); // basis(dim, nband) = hpsi(dim, nbase) * vcc(nbase, nband) ModuleBase::gemm_op()('N', @@ -738,7 +747,7 @@ void DiagoDavid::refresh(const int& dim, // hpsi = basis, spsi = basis[nband] syncmem_complex_op()(hpsi, basis, dim * nband); - syncmem_complex_op()(spsi, basis + dim*nband, dim * nband); + syncmem_complex_op()(spsi, basis + dim * nband, dim * nband); /*for (int m = 0; m < nband; m++) { for (int ig = 0; ig < dim; ig++) { @@ -748,11 +757,11 @@ void DiagoDavid::refresh(const int& dim, }*/ // update basis - setmem_complex_op()(basis , 0, nbase_x * dim); + setmem_complex_op()(basis, 0, nbase_x * dim); for (int m = 0; m < nband; m++) { - syncmem_complex_op()(basis + dim*m,psi_in + m*ld_psi, dim); + syncmem_complex_op()(basis + dim * m, psi_in + m * ld_psi, dim); /*for (int ig = 0; ig < npw; ig++) basis(m, ig) = psi(m, ig);*/ } @@ -771,16 +780,12 @@ void DiagoDavid::refresh(const int& dim, T* hcc_cpu = nullptr; // T* scc_cpu = nullptr; T* vcc_cpu = nullptr; - base_device::memory::resize_memory_op()(hcc_cpu, - nbase_x * nbase_x, - "DAV::hcc"); + base_device::memory::resize_memory_op()(hcc_cpu, nbase_x * nbase_x, "DAV::hcc"); // base_device::memory::resize_memory_op()(this->cpu_ctx, // scc_cpu, // nbase_x * nbase_x, // "DAV::scc"); - base_device::memory::resize_memory_op()(vcc_cpu, - nbase_x * nbase_x, - "DAV::vcc"); + base_device::memory::resize_memory_op()(vcc_cpu, nbase_x * nbase_x, "DAV::vcc"); syncmem_d2h_op()(hcc_cpu, hcc, nbase_x * nbase_x); // syncmem_d2h_op()(this->cpu_ctx, this->ctx, scc_cpu, scc, nbase_x * nbase_x); @@ -817,15 +822,14 @@ void DiagoDavid::refresh(const int& dim, return; } - template void DiagoDavid::SchmidtOrth(const int& dim, - const int nband, - const int m, - const T* spsi, - T* lagrange_m, - const int mm_size, - const int mv_size) + const int nband, + const int m, + const T* spsi, + T* lagrange_m, + const int mm_size, + const int mv_size) { // if(test_david == 1) ModuleBase::TITLE("DiagoDavid","SchmidtOrth"); ModuleBase::timer::tick("DiagoDavid", "SchmidtOrth"); @@ -841,7 +845,7 @@ void DiagoDavid::SchmidtOrth(const int& dim, assert(m < nband); // psi_m = basis[m] - T* psi_m = basis + dim*m; + T* psi_m = basis + dim * m; // std::complex *lagrange = new std::complex[m + 1]; // ModuleBase::GlobalFunc::ZEROS(lagrange, m + 1); @@ -891,17 +895,7 @@ void DiagoDavid::SchmidtOrth(const int& dim, // / psi_m = psi_m - \sum_{i < m} \langle psi(i)|S|psi(m) \rangle psi(i) // psi_m = psi_m - basis * lagrange_m - ModuleBase::gemv_op()('N', - dim, - m, - this->neg_one, - basis, - dim, - lagrange_m, - 1, - this->one, - psi_m, - 1); + ModuleBase::gemv_op()('N', dim, m, this->neg_one, basis, dim, lagrange_m, 1, this->one, psi_m, 1); // psi_norm = psi_norm - lagrange_m · lagrange_m psi_norm -= ModuleBase::dot_real_op()(m, lagrange_m, lagrange_m, false); @@ -943,11 +937,13 @@ void DiagoDavid::SchmidtOrth(const int& dim, return; } - template -void DiagoDavid::planSchmidtOrth(const int nband, std::vector& pre_matrix_mm_m, std::vector& pre_matrix_mv_m) +void DiagoDavid::planSchmidtOrth(const int nband, + std::vector& pre_matrix_mm_m, + std::vector& pre_matrix_mv_m) { - if (nband <= 0) { + if (nband <= 0) + { return; } std::fill(pre_matrix_mm_m.begin(), pre_matrix_mm_m.end(), 0); @@ -964,11 +960,14 @@ void DiagoDavid::planSchmidtOrth(const int nband, std::vector& p { divide_points[0] = index; pre_matrix_mm_m[index] = matrix_size; - if (res_nband == matrix_size) { + if (res_nband == matrix_size) + { pre_matrix_mv_m[index] = 1; - } else { + } + else + { pre_matrix_mv_m[index] = 2; -} + } divide_times = 1; } else @@ -1007,12 +1006,11 @@ void DiagoDavid::planSchmidtOrth(const int nband, std::vector& p } } - template int DiagoDavid::diag(const HPsiFunc& hpsi_func, const SPsiFunc& spsi_func, const int ld_psi, - T *psi_in, + T* psi_in, Real* eigenvalue_in, const std::vector& ethr_band, const int david_maxiter, @@ -1026,7 +1024,15 @@ int DiagoDavid::diag(const HPsiFunc& hpsi_func, int sum_dav_iter = 0; do { - sum_dav_iter += this->diag_once(hpsi_func, spsi_func, dim, nband, ld_psi, psi_in, eigenvalue_in, ethr_band, david_maxiter); + sum_dav_iter += this->diag_once(hpsi_func, + spsi_func, + dim, + nband, + ld_psi, + psi_in, + eigenvalue_in, + ethr_band, + david_maxiter); ++ntry; } while (!check_block_conv(ntry, this->notconv, ntry_max, notconv_max)); @@ -1038,7 +1044,6 @@ int DiagoDavid::diag(const HPsiFunc& hpsi_func, return sum_dav_iter; } - template inline bool DiagoDavid::check_block_conv(const int& ntry, const int& notconv, @@ -1046,12 +1051,12 @@ inline bool DiagoDavid::check_block_conv(const int& ntry, const int& notconv_max) { // Allow at most 5 tries at diag. If more than 5 then exit loop. - if(ntry > ntry_max) + if (ntry > ntry_max) { return true; } // If notconv <= notconv_max allowed, set convergence to true and exit loop. - if(notconv <= notconv_max) + if (notconv <= notconv_max) { return true; } @@ -1059,7 +1064,8 @@ inline bool DiagoDavid::check_block_conv(const int& ntry, return false; } -namespace hsolver { +namespace hsolver +{ template class DiagoDavid, base_device::DEVICE_CPU>; template class DiagoDavid, base_device::DEVICE_CPU>; #if ((defined __CUDA) || (defined __ROCM)) diff --git a/source/source_hsolver/diago_david.h b/source/source_hsolver/diago_david.h index 8ea981d342..53aab1b52e 100644 --- a/source/source_hsolver/diago_david.h +++ b/source/source_hsolver/diago_david.h @@ -1,14 +1,13 @@ #ifndef DIAGODAVID_H #define DIAGODAVID_H -#include "module_base/macros.h" // GetRealType -#include "module_base/module_device/device.h" // base_device -#include "module_base/module_device/memory_op.h"// base_device::memory - +#include "source_base/macros.h" // GetRealType +#include "source_base/module_device/device.h" // base_device +#include "source_base/module_device/memory_op.h" // base_device::memory #include "source_hsolver/diag_comm_info.h" -#include #include +#include namespace hsolver { @@ -26,16 +25,15 @@ template , typename Device = base_device::DEVI class DiagoDavid { private: - // Note GetTypeReal::type will - // return T if T is real type(float, double), + // Note GetTypeReal::type will + // return T if T is real type(float, double), // otherwise return the real type of T(complex, complex) using Real = typename GetTypeReal::type; - - public: + public: /** * @brief Constructor for the DiagoDavid class. - * + * * @param[in] precondition_in Pointer to the preconditioning matrix. * @param[in] nband_in Number of eigenpairs required(i.e. bands). * @param[in] dim_in Dimension of the matrix. @@ -44,10 +42,10 @@ class DiagoDavid * the reduced basis set before \b restart of Davidson. * @param[in] use_paw_in Flag indicating whether to use PAW. * @param[in] diag_comm_in Communication information for diagonalization. - * + * * @tparam T The data type of the matrices and arrays. * @tparam Device The device type (base_device::DEVICE_CPU or DEVICE_GPU). - * + * * @note Auxiliary memory is allocated in the constructor and deallocated in the destructor. */ DiagoDavid(const Real* precondition_in, @@ -59,14 +57,13 @@ class DiagoDavid /** * @brief Destructor for the DiagoDavid class. - * + * * This destructor releases the dynamically allocated memory used by the class members. * It deletes the basis, hpsi, spsi, hcc, scc, vcc, lagrange_matrix, and eigenvalue arrays. - * + * */ ~DiagoDavid(); - // declare type of matrix-blockvector functions. // the function type is defined as a std::function object. /** @@ -75,7 +72,7 @@ class DiagoDavid * This function type is used to define a matrix-blockvector operator H. * For eigenvalue problem HX = λX or generalized eigenvalue problem HX = λSX, * this function computes the product of the Hamiltonian matrix H and a blockvector X. - * + * * Called as follows: * hpsi(X, HX, ld, nvec) where X and HX are (ld, nvec)-shaped blockvectors. * Result HX = H * X is stored in HX. @@ -84,7 +81,7 @@ class DiagoDavid * @param[in] HX Head address of output blockvector of type `T*`. * @param[in] ld Leading dimension of blockvector. * @param[in] nvec Number of vectors in a block. - * + * * @warning X and HX are the exact address to read input X and store output H*X, * @warning both of size ld * nvec. */ @@ -92,7 +89,7 @@ class DiagoDavid /** * @brief A function type representing the SX function. - * + * * nrow is leading dimension of spsi, npw is leading dimension of psi, nbands is number of vecs * * This function type is used to define a matrix-blockvector operator S. @@ -108,9 +105,9 @@ class DiagoDavid /** * @brief Performs iterative diagonalization using the David algorithm. - * + * * @warning Please see docs of `HPsiFunc` for more information about the hpsi mat-vec interface. - * + * * @tparam T The type of the elements in the matrix. * @tparam Device The device type (CPU or GPU). * @param hpsi_func The function object that computes the matrix-blockvector product H * psi. @@ -123,20 +120,19 @@ class DiagoDavid * @param ntry_max The maximum number of attempts for the diagonalization restart. * @param notconv_max The maximum number of bands unconverged allowed. * @return The total number of iterations performed during the diagonalization. - * + * * @note ntry_max is an empirical parameter that should be specified in external routine, default 5 * notconv_max is determined by the accuracy required for the calculation, default 0 */ - int diag( - const HPsiFunc& hpsi_func, // function void hpsi(T*, T*, const int, const int) - const SPsiFunc& spsi_func, // function void spsi(T*, T*, const int, const int, const int) - const int ld_psi, // Leading dimension of the psi input - T *psi_in, // Pointer to eigenvectors - Real* eigenvalue_in, // Pointer to store the resulting eigenvalues - const std::vector& ethr_band, // Convergence threshold for the Davidson iteration - const int david_maxiter, // Maximum allowed iterations for the Davidson method - const int ntry_max = 5, // Maximum number of diagonalization attempts (5 by default) - const int notconv_max = 0); // Maximum number of allowed non-converged eigenvectors + int diag(const HPsiFunc& hpsi_func, // function void hpsi(T*, T*, const int, const int) + const SPsiFunc& spsi_func, // function void spsi(T*, T*, const int, const int, const int) + const int ld_psi, // Leading dimension of the psi input + T* psi_in, // Pointer to eigenvectors + Real* eigenvalue_in, // Pointer to store the resulting eigenvalues + const std::vector& ethr_band, // Convergence threshold for the Davidson iteration + const int david_maxiter, // Maximum allowed iterations for the Davidson method + const int ntry_max = 5, // Maximum number of diagonalization attempts (5 by default) + const int notconv_max = 0); // Maximum number of allowed non-converged eigenvectors private: bool use_paw = false; @@ -162,17 +158,17 @@ class DiagoDavid /// eigenvalue results Real* eigenvalue = nullptr; - T *basis = nullptr; /// pointer to basis set(dim, nbase_x), leading dimension = dim + T* basis = nullptr; /// pointer to basis set(dim, nbase_x), leading dimension = dim - T* hpsi = nullptr; /// the product of H and psi in the reduced basis set + T* hpsi = nullptr; /// the product of H and psi in the reduced basis set - T* spsi = nullptr; /// the Product of S and psi in the reduced basis set + T* spsi = nullptr; /// the Product of S and psi in the reduced basis set - T* hcc = nullptr; /// Hamiltonian on the reduced basis + T* hcc = nullptr; /// Hamiltonian on the reduced basis - T* scc = nullptr; /// overlap on the reduced basis + T* scc = nullptr; /// overlap on the reduced basis - T* vcc = nullptr; /// eigenvectors of hc + T* vcc = nullptr; /// eigenvectors of hc T* lagrange_matrix = nullptr; @@ -186,7 +182,7 @@ class DiagoDavid const int dim, const int nband, const int ld_psi, - T *psi_in, + T* psi_in, Real* eigenvalue_in, const std::vector& ethr_band, const int david_maxiter); @@ -220,7 +216,7 @@ class DiagoDavid /** * Calculates the elements of the diagonalization matrix for the DiagoDavid class. - * + * * @param dim The dimension of the problem. * @param nbase The current dimension of the reduced basis. * @param nbase_x The maximum dimension of the reduced basis set. @@ -241,7 +237,7 @@ class DiagoDavid /** * Refreshes the diagonalization solver by updating the basis and the reduced Hamiltonian. - * + * * @param dim The dimension of the problem. * @param nband The number of bands. * @param nbase The number of basis states. @@ -254,14 +250,14 @@ class DiagoDavid * @param hcc Pointer to the output array for the updated reduced Hamiltonian. * @param scc Pointer to the output array for the updated overlap matrix. * @param vcc Pointer to the output array for the updated eigenvector matrix. - * + * */ void refresh(const int& dim, const int& nband, int& nbase, const int nbase_x, const Real* eigenvalue, - const T *psi_in, + const T* psi_in, const int ld_psi, T* hpsi, T* spsi, @@ -292,7 +288,7 @@ class DiagoDavid /** * @brief Plans the Schmidt orthogonalization for a given number of bands. - * + * * @tparam T The type of the elements in the vectors. * @tparam Device The device on which the computation will be performed. * @param nband The number of bands. @@ -329,7 +325,7 @@ class DiagoDavid * @note Exits the diagonalization loop if either the convergence criteria * are met or the maximum number of tries is exceeded. */ - bool check_block_conv(const int &ntry, const int ¬conv, const int &ntry_max, const int ¬conv_max); + bool check_block_conv(const int& ntry, const int& notconv, const int& ntry_max, const int& notconv_max); using resmem_complex_op = base_device::memory::resize_memory_op; using delmem_complex_op = base_device::memory::delete_memory_op; diff --git a/source/source_hsolver/diago_elpa.cpp b/source/source_hsolver/diago_elpa.cpp index 78ce0179d0..86a0e59463 100644 --- a/source/source_hsolver/diago_elpa.cpp +++ b/source/source_hsolver/diago_elpa.cpp @@ -1,32 +1,41 @@ #include "diago_elpa.h" -#include "module_parameter/parameter.h" #include "genelpa/elpa_solver.h" -#include "module_base/blacs_connector.h" -#include "module_base/global_variable.h" -#include "module_base/lapack_connector.h" -#include "module_base/scalapack_connector.h" -#include "module_base/timer.h" -#include "module_base/tool_quit.h" +#include "module_parameter/parameter.h" +#include "source_base/blacs_connector.h" +#include "source_base/global_variable.h" +#include "source_base/lapack_connector.h" +#include "source_base/scalapack_connector.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" typedef hamilt::MatrixBlock matd; typedef hamilt::MatrixBlock> matcd; -namespace hsolver { +namespace hsolver +{ #ifdef __MPI template <> -MPI_Comm DiagoElpa::setmpicomm() { - if (this->elpa_num_thread == -1) { +MPI_Comm DiagoElpa::setmpicomm() +{ + if (this->elpa_num_thread == -1) + { return MPI_COMM_WORLD; - } else { + } + else + { int _num = 0; MPI_Comm_size(MPI_COMM_WORLD, &_num); - if (elpa_num_thread > _num || elpa_num_thread <= 0) { + if (elpa_num_thread > _num || elpa_num_thread <= 0) + { return MPI_COMM_WORLD; - } else { + } + else + { lastmpinum++; int* _ranks = new int[elpa_num_thread]; - for (int i = 0; i < elpa_num_thread; i++) { + for (int i = 0; i < elpa_num_thread; i++) + { _ranks[i] = (lastmpinum + i) % _num; } MPI_Group _tempgroup, _oldgroup; @@ -40,18 +49,26 @@ MPI_Comm DiagoElpa::setmpicomm() { } } template <> -MPI_Comm DiagoElpa>::setmpicomm() { - if (this->elpa_num_thread == -1) { +MPI_Comm DiagoElpa>::setmpicomm() +{ + if (this->elpa_num_thread == -1) + { return MPI_COMM_WORLD; - } else { + } + else + { int _num = 0; MPI_Comm_size(MPI_COMM_WORLD, &_num); - if (elpa_num_thread > _num || elpa_num_thread <= 0) { + if (elpa_num_thread > _num || elpa_num_thread <= 0) + { return MPI_COMM_WORLD; - } else { + } + else + { lastmpinum++; int* _ranks = new int[elpa_num_thread]; - for (int i = 0; i < elpa_num_thread; i++) { + for (int i = 0; i < elpa_num_thread; i++) + { _ranks[i] = (lastmpinum + i) % _num; } MPI_Group _tempgroup, _oldgroup; @@ -66,10 +83,10 @@ MPI_Comm DiagoElpa>::setmpicomm() { } #endif template <> -void DiagoElpa>::diag( - hamilt::Hamilt>* phm_in, - psi::Psi>& psi, - Real* eigenvalue_in) { +void DiagoElpa>::diag(hamilt::Hamilt>* phm_in, + psi::Psi>& psi, + Real* eigenvalue_in) +{ ModuleBase::TITLE("DiagoElpa", "diag"); #ifdef __MPI matcd h_mat, s_mat; @@ -85,29 +102,22 @@ void DiagoElpa>::diag( (const int)h_mat.row, (const int)h_mat.col, (const int*)h_mat.desc); - this->DecomposedState - = 0; // for k pointer, the decomposed s_mat can not be reused + this->DecomposedState = 0; // for k pointer, the decomposed s_mat can not be reused ModuleBase::timer::tick("DiagoElpa", "elpa_solve"); - es.generalized_eigenvector(h_mat.p, - s_mat.p, - this->DecomposedState, - eigen.data(), - psi.get_pointer()); + es.generalized_eigenvector(h_mat.p, s_mat.p, this->DecomposedState, eigen.data(), psi.get_pointer()); ModuleBase::timer::tick("DiagoElpa", "elpa_solve"); es.exit(); const int inc = 1; BlasConnector::copy(PARAM.inp.nbands, eigen.data(), inc, eigenvalue_in, inc); #else - ModuleBase::WARNING_QUIT("DiagoElpa", - "DiagoElpa only can be used with macro __MPI"); + ModuleBase::WARNING_QUIT("DiagoElpa", "DiagoElpa only can be used with macro __MPI"); #endif } template <> -void DiagoElpa::diag(hamilt::Hamilt* phm_in, - psi::Psi& psi, - Real* eigenvalue_in) { +void DiagoElpa::diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in) +{ ModuleBase::TITLE("DiagoElpa", "diag"); #ifdef __MPI matd h_mat, s_mat; @@ -126,30 +136,24 @@ void DiagoElpa::diag(hamilt::Hamilt* phm_in, (const int)h_mat.col, (const int*)h_mat.desc); ModuleBase::timer::tick("DiagoElpa", "elpa_solve"); - es.generalized_eigenvector(h_mat.p, - s_mat.p, - this->DecomposedState, - eigen.data(), - psi.get_pointer()); + es.generalized_eigenvector(h_mat.p, s_mat.p, this->DecomposedState, eigen.data(), psi.get_pointer()); ModuleBase::timer::tick("DiagoElpa", "elpa_solve"); es.exit(); const int inc = 1; BlasConnector::copy(PARAM.inp.nbands, eigen.data(), inc, eigenvalue_in, inc); #else - ModuleBase::WARNING_QUIT("DiagoElpa", - "DiagoElpa only can be used with macro __MPI"); + ModuleBase::WARNING_QUIT("DiagoElpa", "DiagoElpa only can be used with macro __MPI"); #endif } - #ifdef __MPI template <> void DiagoElpa>::diag_pool(hamilt::MatrixBlock>& h_mat, - hamilt::MatrixBlock>& s_mat, - psi::Psi>& psi, - Real* eigenvalue_in, - MPI_Comm& comm) + hamilt::MatrixBlock>& s_mat, + psi::Psi>& psi, + Real* eigenvalue_in, + MPI_Comm& comm) { std::vector eigen(PARAM.globalv.nlocal, 0.0); bool isReal = false; @@ -159,14 +163,9 @@ void DiagoElpa>::diag_pool(hamilt::MatrixBlockDecomposedState - = 0; // for k pointer, the decomposed s_mat can not be reused + this->DecomposedState = 0; // for k pointer, the decomposed s_mat can not be reused ModuleBase::timer::tick("DiagoElpa", "elpa_solve"); - es.generalized_eigenvector(h_mat.p, - s_mat.p, - this->DecomposedState, - eigen.data(), - psi.get_pointer()); + es.generalized_eigenvector(h_mat.p, s_mat.p, this->DecomposedState, eigen.data(), psi.get_pointer()); ModuleBase::timer::tick("DiagoElpa", "elpa_solve"); es.exit(); const int inc = 1; @@ -175,10 +174,10 @@ void DiagoElpa>::diag_pool(hamilt::MatrixBlock void DiagoElpa::diag_pool(hamilt::MatrixBlock& h_mat, - hamilt::MatrixBlock& s_mat, - psi::Psi& psi, - Real* eigenvalue_in, - MPI_Comm& comm) + hamilt::MatrixBlock& s_mat, + psi::Psi& psi, + Real* eigenvalue_in, + MPI_Comm& comm) { std::vector eigen(PARAM.globalv.nlocal, 0.0); @@ -192,33 +191,28 @@ void DiagoElpa::diag_pool(hamilt::MatrixBlock& h_mat, (const int)h_mat.col, (const int*)h_mat.desc); ModuleBase::timer::tick("DiagoElpa", "elpa_solve"); - es.generalized_eigenvector(h_mat.p, - s_mat.p, - this->DecomposedState, - eigen.data(), - psi.get_pointer()); + es.generalized_eigenvector(h_mat.p, s_mat.p, this->DecomposedState, eigen.data(), psi.get_pointer()); ModuleBase::timer::tick("DiagoElpa", "elpa_solve"); es.exit(); const int inc = 1; - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, - "K-S equation was solved by genelpa2"); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "K-S equation was solved by genelpa2"); BlasConnector::copy(PARAM.inp.nbands, eigen.data(), inc, eigenvalue_in, inc); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, - "eigenvalues were copied to ekb"); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "eigenvalues were copied to ekb"); } #endif - - #ifdef __MPI template -bool DiagoElpa::ifElpaHandle(const bool& newIteration, const bool& ifNSCF) { +bool DiagoElpa::ifElpaHandle(const bool& newIteration, const bool& ifNSCF) +{ int doHandle = false; - if (newIteration) { + if (newIteration) + { doHandle = true; } - if (ifNSCF) { + if (ifNSCF) + { doHandle = true; } return doHandle; diff --git a/source/source_hsolver/diago_elpa.h b/source/source_hsolver/diago_elpa.h index 0ebe236ddb..6a6b9c7d82 100644 --- a/source/source_hsolver/diago_elpa.h +++ b/source/source_hsolver/diago_elpa.h @@ -1,9 +1,9 @@ #ifndef DIAGOELPA_H #define DIAGOELPA_H -#include "module_base/macros.h" // GetRealType -#include "module_hamilt_general/hamilt.h" #include "module_basis/module_ao/parallel_orbitals.h" +#include "module_hamilt_general/hamilt.h" +#include "source_base/macros.h" // GetRealType namespace hsolver { @@ -18,9 +18,13 @@ class DiagoElpa void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in); #ifdef __MPI // diagnolization used in parallel-k case - void diag_pool(hamilt::MatrixBlock& h_mat, hamilt::MatrixBlock& s_mat, psi::Psi& psi, Real* eigenvalue_in, MPI_Comm& comm); - MPI_Comm setmpicomm(); // set mpi comm; - static int elpa_num_thread; // need to set mpi_comm or not,-1 not,else the number of mpi needed + void diag_pool(hamilt::MatrixBlock& h_mat, + hamilt::MatrixBlock& s_mat, + psi::Psi& psi, + Real* eigenvalue_in, + MPI_Comm& comm); + MPI_Comm setmpicomm(); // set mpi comm; + static int elpa_num_thread; // need to set mpi_comm or not,-1 not,else the number of mpi needed #endif static int DecomposedState; diff --git a/source/source_hsolver/diago_elpa_native.cpp b/source/source_hsolver/diago_elpa_native.cpp index ad7846d7ee..80e69bd388 100644 --- a/source/source_hsolver/diago_elpa_native.cpp +++ b/source/source_hsolver/diago_elpa_native.cpp @@ -1,14 +1,14 @@ #include "diago_elpa_native.h" -#include "module_base/blacs_connector.h" -#include "module_base/global_variable.h" #include "module_parameter/parameter.h" -#include "module_base/lapack_connector.h" -#include "module_base/scalapack_connector.h" -#include "module_base/timer.h" -#include "module_base/tool_quit.h" -#include "source_hsolver/genelpa/elpa_new.h" #include "omp.h" +#include "source_base/blacs_connector.h" +#include "source_base/global_variable.h" +#include "source_base/lapack_connector.h" +#include "source_base/scalapack_connector.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" +#include "source_hsolver/genelpa/elpa_new.h" namespace hsolver { diff --git a/source/source_hsolver/diago_elpa_native.h b/source/source_hsolver/diago_elpa_native.h index 63415b79a7..e1953ae8b2 100644 --- a/source/source_hsolver/diago_elpa_native.h +++ b/source/source_hsolver/diago_elpa_native.h @@ -1,9 +1,9 @@ #ifndef DIAGOELPANATIVE_H #define DIAGOELPANATIVE_H -#include "module_base/macros.h" // GetRealType -#include "module_hamilt_general/hamilt.h" #include "module_basis/module_ao/parallel_orbitals.h" +#include "module_hamilt_general/hamilt.h" +#include "source_base/macros.h" // GetRealType namespace hsolver { @@ -18,15 +18,18 @@ class DiagoElpaNative void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in); #ifdef __MPI // diagnolization used in parallel-k case - void diag_pool(hamilt::MatrixBlock& h_mat, hamilt::MatrixBlock& s_mat, psi::Psi& psi, Real* eigenvalue_in, MPI_Comm& comm); - MPI_Comm setmpicomm(); // set mpi comm; - static int elpa_num_thread; // need to set mpi_comm or not,-1 not,else the number of mpi needed - static int lastmpinum; // last using mpi; + void diag_pool(hamilt::MatrixBlock& h_mat, + hamilt::MatrixBlock& s_mat, + psi::Psi& psi, + Real* eigenvalue_in, + MPI_Comm& comm); + MPI_Comm setmpicomm(); // set mpi comm; + static int elpa_num_thread; // need to set mpi_comm or not,-1 not,else the number of mpi needed + static int lastmpinum; // last using mpi; #endif static int DecomposedState; - }; template diff --git a/source/source_hsolver/diago_iter_assist.cpp b/source/source_hsolver/diago_iter_assist.cpp index d2bfb71e78..24dc1959b0 100644 --- a/source/source_hsolver/diago_iter_assist.cpp +++ b/source/source_hsolver/diago_iter_assist.cpp @@ -1,15 +1,16 @@ #include "diago_iter_assist.h" + #include "module_parameter/parameter.h" -#include "module_base/blas_connector.h" -#include "module_base/complexmatrix.h" -#include "module_base/constants.h" -#include "module_base/global_variable.h" -#include "module_base/lapack_connector.h" -#include "module_base/module_device/device.h" -#include "module_base/parallel_reduce.h" -#include "module_base/timer.h" +#include "source_base/blas_connector.h" +#include "source_base/complexmatrix.h" +#include "source_base/constants.h" +#include "source_base/global_variable.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/lapack_connector.h" +#include "source_base/module_device/device.h" +#include "source_base/parallel_reduce.h" +#include "source_base/timer.h" #include "source_hsolver/kernels/dngvd_op.h" -#include "module_base/kernels/math_kernel_op.h" namespace hsolver { @@ -20,12 +21,13 @@ namespace hsolver // Produces on output n_band eigenvectors (n_band <= nstart) in evc. //---------------------------------------------------------------------- template -void DiagoIterAssist::diagH_subspace(const hamilt::Hamilt* const pHamilt, // hamiltonian operator carrier - const psi::Psi& psi, // [in] wavefunction - psi::Psi& evc, // [out] wavefunction - Real* en, // [out] eigenvalues - int n_band // [in] number of bands to be calculated, also number of rows - // of evc, if set to 0, n_band = nstart, default 0 +void DiagoIterAssist::diagH_subspace( + const hamilt::Hamilt* const pHamilt, // hamiltonian operator carrier + const psi::Psi& psi, // [in] wavefunction + psi::Psi& evc, // [out] wavefunction + Real* en, // [out] eigenvalues + int n_band // [in] number of bands to be calculated, also number of rows + // of evc, if set to 0, n_band = nstart, default 0 ) { ModuleBase::TITLE("DiagoAssist", "diag_subspace"); @@ -115,7 +117,6 @@ void DiagoIterAssist::diagH_subspace(const hamilt::Hamilt* // after generation of H and S matrix, diag them DiagoIterAssist::diagH_LAPACK(nstart, n_band, hcc, scc, nstart, en, vcc); - const int ld_temp = in_place ? dmax : dmin; { // code block to calculate evc @@ -147,7 +148,8 @@ void DiagoIterAssist::diagH_subspace(const hamilt::Hamilt* } template -void DiagoIterAssist::diagH_subspace_init(hamilt::Hamilt* pHamilt, +void DiagoIterAssist::diagH_subspace_init( + hamilt::Hamilt* pHamilt, const T* psi, int psi_nr, int psi_nc, @@ -219,7 +221,8 @@ void DiagoIterAssist::diagH_subspace_init(hamilt::Hamilt* pHamilt->ops->hPsi(hpsi_in); // calculate the related elements in hcc - ModuleBase::gemv_op()('C', psi_nc, nstart, &one, psi, psi_nc, hpsi, 1, &zero, hcc + i * nstart, 1); + ModuleBase::gemv_op()('C', psi_nc, nstart, &one, psi, psi_nc, hpsi, 1, &zero, hcc + i * nstart, 1); } T* spsi = temp; @@ -260,17 +263,18 @@ void DiagoIterAssist::diagH_subspace_init(hamilt::Hamilt* hpsi_info hpsi_in(&psi_temp, all_bands_range, hpsi); pHamilt->ops->hPsi(hpsi_in); - ModuleBase::gemm_op()('C', 'N', nstart, nstart, dmin, &one, ppsi, dmax, hpsi, dmax, &zero, hcc, nstart); + ModuleBase::gemm_op()('C', 'N', nstart, nstart, dmin, &one, ppsi, dmax, hpsi, dmax, &zero, hcc, nstart); T* spsi = temp; // do sPsi for all bands pHamilt->sPsi(ppsi, spsi, psi_temp.get_nbasis(), psi_temp.get_nbasis(), psi_temp.get_nbands()); - ModuleBase::gemm_op()('C', 'N', nstart, nstart, dmin, &one, ppsi, dmax, spsi, dmax, &zero, scc, nstart); + ModuleBase::gemm_op()('C', 'N', nstart, nstart, dmin, &one, ppsi, dmax, spsi, dmax, &zero, scc, nstart); delmem_complex_op()(temp); add_to_hcc(hcc, nstart); - } if (GlobalV::NPROC_IN_POOL > 1) @@ -410,13 +414,14 @@ void DiagoIterAssist::diagH_LAPACK(const int nstart, } template -void DiagoIterAssist::cal_hs_subspace(const hamilt::Hamilt* pHamilt, // hamiltonian operator carrier - const psi::Psi& psi, // [in] wavefunction - T *hcc, - T *scc) +void DiagoIterAssist::cal_hs_subspace( + const hamilt::Hamilt* pHamilt, // hamiltonian operator carrier + const psi::Psi& psi, // [in] wavefunction + T* hcc, + T* scc) { const int nstart = psi.get_nbands(); - + setmem_complex_op()(hcc, 0, nstart * nstart); setmem_complex_op()(scc, 0, nstart * nstart); @@ -479,13 +484,13 @@ void DiagoIterAssist::cal_hs_subspace(const hamilt::Hamilt } template -void DiagoIterAssist::diag_responce( const T* hcc, - const T* scc, - const int nbands, - const T* mat_in, // [out] target matrix to be multiplied - T* mat_out, - int mat_col, // [in] number of columns of target matrix - Real* en // [out] eigenvalues +void DiagoIterAssist::diag_responce(const T* hcc, + const T* scc, + const int nbands, + const T* mat_in, // [out] target matrix to be multiplied + T* mat_out, + int mat_col, // [in] number of columns of target matrix + Real* en // [out] eigenvalues ) { ModuleBase::TITLE("DiagoIterAssist", "diag_responce"); @@ -493,7 +498,7 @@ void DiagoIterAssist::diag_responce( const T* hcc, const int nstart = nbands; - T *vcc = nullptr; + T* vcc = nullptr; resmem_complex_op()(vcc, nstart * nstart, "DiagSub::vcc"); setmem_complex_op()(vcc, 0, nstart * nstart); @@ -523,11 +528,10 @@ void DiagoIterAssist::diag_responce( const T* hcc, template void DiagoIterAssist::diag_subspace_psi(const T* hcc, - const T* scc, - const int dim_subspace, - psi::Psi& evc, - Real* en -) + const T* scc, + const int dim_subspace, + psi::Psi& evc, + Real* en) { ModuleBase::TITLE("DiagoIterAssist", "diag_subspace_psi"); ModuleBase::timer::tick("DiagoIterAssist", "diag_subspace_psi"); @@ -535,7 +539,7 @@ void DiagoIterAssist::diag_subspace_psi(const T* hcc, const int nstart = dim_subspace; const int n_band = evc.get_nbands(); - T *vcc = nullptr; + T* vcc = nullptr; resmem_complex_op()(vcc, nstart * nstart, "DiagSub::vcc"); setmem_complex_op()(vcc, 0, nstart * nstart); @@ -579,9 +583,10 @@ bool DiagoIterAssist::test_exit_cond(const int& ntry, const int& notc //================================================================ bool scf = true; - if (PARAM.inp.calculation == "nscf") { + if (PARAM.inp.calculation == "nscf") + { scf = false; -} + } // If ntry <=5, try to do it better, if ntry > 5, exit. const bool f1 = (ntry <= 5); diff --git a/source/source_hsolver/diago_iter_assist.h b/source/source_hsolver/diago_iter_assist.h index c5c4e9cfaa..11614f9f7e 100644 --- a/source/source_hsolver/diago_iter_assist.h +++ b/source/source_hsolver/diago_iter_assist.h @@ -1,10 +1,10 @@ #ifndef DIAGOITERASSIST_H #define DIAGOITERASSIST_H -#include "module_base/complexmatrix.h" -#include "module_base/macros.h" #include "module_hamilt_general/hamilt.h" #include "module_psi/psi.h" +#include "source_base/complexmatrix.h" +#include "source_base/macros.h" namespace hsolver { @@ -42,17 +42,18 @@ class DiagoIterAssist /// @param psi_nc number of columns (nbasis) /// @param evc new wavefunction /// @param en eigenenergies - /// @note exception handle: if there is no operator initialized in Hamilt, will directly copy value from psi to evc, + /// @note exception handle: if there is no operator initialized in Hamilt, will directly copy value from psi to evc, /// and return all - zero eigenenergies. static void diagH_subspace_init( - hamilt::Hamilt* pHamilt, - const T* psi, - int psi_nr, - int psi_nc, - psi::Psi &evc, - Real* en, - const std::function& add_to_hcc = [](T* null, const int n) {}, - const std::function& export_vcc = [](const T* null, const int n, const int m) {}); + hamilt::Hamilt* pHamilt, + const T* psi, + int psi_nr, + int psi_nc, + psi::Psi& evc, + Real* en, + const std::function& add_to_hcc = [](T* null, const int n) {}, + const std::function& export_vcc + = [](const T* null, const int n, const int m) {}); static void diagH_LAPACK(const int nstart, const int nbands, @@ -68,9 +69,9 @@ class DiagoIterAssist /// @param hcc : Hamiltonian matrix /// @param scc : overlap matrix static void cal_hs_subspace(const hamilt::Hamilt* pHamilt, // hamiltonian operator carrier - const psi::Psi& psi, // [in] wavefunction - T *hcc, - T *scc); + const psi::Psi& psi, // [in] wavefunction + T* hcc, + T* scc); /// @brief calculate the response matrix from rotation matrix solved by diagonalization of H and S matrix /// @param hcc : Hamiltonian matrix @@ -83,17 +84,17 @@ class DiagoIterAssist static void diag_responce(const T* hcc, const T* scc, const int nbands, - const T* mat_in, - T* mat_out, - int mat_col, + const T* mat_in, + T* mat_out, + int mat_col, Real* en); - + /// @brief calculate the response wavefunction psi from rotation matrix solved by diagonalization of H and S matrix static void diag_subspace_psi(const T* hcc, - const T* scc, - const int dim_subspace, - psi::Psi& evc, - Real* en); + const T* scc, + const int dim_subspace, + psi::Psi& evc, + Real* en); static bool test_exit_cond(const int& ntry, const int& notconv); diff --git a/source/source_hsolver/diago_lapack.cpp b/source/source_hsolver/diago_lapack.cpp index 6a4efcb556..d61ba9de0a 100644 --- a/source/source_hsolver/diago_lapack.cpp +++ b/source/source_hsolver/diago_lapack.cpp @@ -1,14 +1,13 @@ // Refactored according to diago_scalapack // This code will be futher refactored to remove the dependency of psi and hamilt -#include "module_parameter/parameter.h" - #include "diago_lapack.h" -#include "module_base/global_variable.h" -#include "module_base/lapack_connector.h" -#include "module_base/timer.h" -#include "module_base/tool_quit.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" +#include "module_parameter/parameter.h" +#include "source_base/global_variable.h" +#include "source_base/lapack_connector.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" typedef hamilt::MatrixBlock matd; typedef hamilt::MatrixBlock> matcd; @@ -67,7 +66,6 @@ int DiagoLapack::dsygvx_once(const int ncol, ModuleBase::matrix h_tmp(ncol, nrow, false); memcpy(h_tmp.c, h_mat, sizeof(double) * ncol * nrow); - ModuleBase::matrix s_tmp(ncol, nrow, false); memcpy(s_tmp.c, s_mat, sizeof(double) * ncol * nrow); @@ -142,7 +140,7 @@ int DiagoLapack::dsygvx_once(const int ncol, ifail.data(), &info);*/ - double *ev = new double[ncol * ncol]; + double* ev = new double[ncol * ncol]; dsygv_(&itype, &jobz, &uplo, &PARAM.globalv.nlocal, h_tmp.c, &ncol, s_tmp.c, &ncol, ekb, ev, &lwork, &info); @@ -172,7 +170,7 @@ int DiagoLapack::zhegvx_once(const int ncol, const double vl = 0, vu = 0; std::vector> work(1, 0); - double *rwork = new double[3 * ncol - 2]; + double* rwork = new double[3 * ncol - 2]; std::vector iwork(1, 0); std::vector ifail(PARAM.globalv.nlocal, 0); @@ -243,7 +241,7 @@ int DiagoLapack::zhegvx_once(const int ncol, */ - std::complex *ev = new std::complex[ncol * ncol]; + std::complex* ev = new std::complex[ncol * ncol]; zhegv_(&itype, &jobz, &uplo, &PARAM.globalv.nlocal, h_tmp.c, &ncol, s_tmp.c, &ncol, ekb, ev, &lwork, rwork, &info); @@ -262,7 +260,8 @@ void DiagoLapack::dsygvx_diag(const int ncol, { int info_result = dsygvx_once(ncol, nrow, h_mat, s_mat, ekb, wfc_2d); - if (info_result == 0) { + if (info_result == 0) + { break; } } @@ -279,7 +278,8 @@ void DiagoLapack::zhegvx_diag(const int ncol, while (true) { int info_result = zhegvx_once(ncol, nrow, h_mat, s_mat, ekb, wfc_2d); - if (info_result == 0) { + if (info_result == 0) + { break; } } @@ -289,8 +289,7 @@ template void DiagoLapack::post_processing(const int info, const std::vector& vec) { const std::string str_info = "info = " + ModuleBase::GlobalFunc::TO_STRING(info) + ".\n"; - const std::string str_FILE - = std::string(__FILE__) + " line " + std::to_string(__LINE__) + ".\n"; + const std::string str_FILE = std::string(__FILE__) + " line " + std::to_string(__LINE__) + ".\n"; const std::string str_info_FILE = str_info + str_FILE; if (info == 0) diff --git a/source/source_hsolver/diago_lapack.h b/source/source_hsolver/diago_lapack.h index f787b9054f..c20202c27f 100644 --- a/source/source_hsolver/diago_lapack.h +++ b/source/source_hsolver/diago_lapack.h @@ -8,10 +8,10 @@ #ifndef DIAGOLAPACK_H #define DIAGOLAPACK_H -#include "module_base/macros.h" // GetRealType -#include "module_hamilt_general/hamilt.h" -#include "module_base/matrix.h" #include "module_basis/module_ao/parallel_orbitals.h" +#include "module_hamilt_general/hamilt.h" +#include "source_base/macros.h" // GetRealType +#include "source_base/matrix.h" #include #include diff --git a/source/source_hsolver/diago_pexsi.cpp b/source/source_hsolver/diago_pexsi.cpp index 85df14c9af..97a11e4356 100644 --- a/source/source_hsolver/diago_pexsi.cpp +++ b/source/source_hsolver/diago_pexsi.cpp @@ -1,13 +1,14 @@ -#include -#include #include "module_parameter/parameter.h" + +#include #include +#include #ifdef __PEXSI #include "diago_pexsi.h" -#include "module_base/global_variable.h" -#include "module_base/tool_quit.h" #include "module_basis/module_ao/parallel_orbitals.h" #include "module_pexsi/pexsi_solver.h" +#include "source_base/global_variable.h" +#include "source_base/tool_quit.h" typedef hamilt::MatrixBlock matd; typedef hamilt::MatrixBlock> matcd; @@ -41,7 +42,6 @@ DiagoPexsi::DiagoPexsi(const Parallel_Orbitals* ParaV_in) this->DM[i] = new T[ParaV->nrow * ParaV->ncol]; this->EDM[i] = new T[ParaV->nrow * ParaV->ncol]; } - } template @@ -57,7 +57,6 @@ DiagoPexsi::~DiagoPexsi() delete[] this->DM[i]; delete[] this->EDM[i]; } - } template <> @@ -93,7 +92,7 @@ void DiagoPexsi>::diag(hamilt::Hamilt> } template class DiagoPexsi; -template class DiagoPexsi >; +template class DiagoPexsi>; } // namespace hsolver #endif \ No newline at end of file diff --git a/source/source_hsolver/diago_pexsi.h b/source/source_hsolver/diago_pexsi.h index e593e3b669..16351d08d2 100644 --- a/source/source_hsolver/diago_pexsi.h +++ b/source/source_hsolver/diago_pexsi.h @@ -1,13 +1,14 @@ #ifndef DIGAOPEXSI_H #define DIGAOPEXSI_H -#include -#include -#include "module_base/macros.h" // GetRealType -#include "module_hamilt_general/hamilt.h" -#include "module_base/global_variable.h" #include "module_basis/module_ao/parallel_orbitals.h" +#include "module_hamilt_general/hamilt.h" #include "module_pexsi/pexsi_solver.h" +#include "source_base/global_variable.h" +#include "source_base/macros.h" // GetRealType + +#include +#include namespace hsolver { diff --git a/source/source_hsolver/diago_pxxxgvx.cpp b/source/source_hsolver/diago_pxxxgvx.cpp index 51e29f27ff..baac6911dc 100644 --- a/source/source_hsolver/diago_pxxxgvx.cpp +++ b/source/source_hsolver/diago_pxxxgvx.cpp @@ -1,7 +1,7 @@ #include "diago_pxxxgvx.h" -#include "module_base/blacs_connector.h" -#include "module_base/scalapack_connector.h" +#include "source_base/blacs_connector.h" +#include "source_base/scalapack_connector.h" #include #include @@ -33,7 +33,7 @@ namespace hsolver /** * @brief Wrapper function for Scalapack's generalized eigensolver routines. - * + * * @param itype Specifies the problem type to be solved. * @param jobz Specifies whether to compute eigenvectors. * @param range Specifies the range of eigenvalues to be found. @@ -70,7 +70,7 @@ namespace hsolver * @param iclustr The array to store the indices of the eigenvalue clusters. * @param gap The array to store the gaps between eigenvalue clusters. * @param info Output status of the computation. - * + * * @note for a uniform interface, rwork and lrwork are input arguments, but not used in pdsygvx_/pssygvx_ */ void pxxxgvx_(const int* itype, @@ -101,7 +101,7 @@ void pxxxgvx_(const int* itype, const int* descz, double* work, int* lwork, - double* rwork, + double* rwork, int* lrwork, int* iwork, int* liwork, @@ -635,7 +635,7 @@ template void pxxxgvx_diag(const int* const desc, double* const ekb, double* const wfc_2d); -// std::complex +// std::complex template void pxxxgvx_diag(const int* const desc, const int ncol, const int nrow, diff --git a/source/source_hsolver/diago_pxxxgvx.h b/source/source_hsolver/diago_pxxxgvx.h index e4f9ba7896..466c4e522f 100644 --- a/source/source_hsolver/diago_pxxxgvx.h +++ b/source/source_hsolver/diago_pxxxgvx.h @@ -1,7 +1,8 @@ #ifndef HSOLVER_DIAGO_PXXXGVX_H #define HSOLVER_DIAGO_PXXXGVX_H +#include "source_base/macros.h" + #include -#include "module_base/macros.h" namespace hsolver { @@ -9,7 +10,7 @@ namespace hsolver #ifdef __MPI /** * @brief Wrapper function for Scalapack's generalized eigensolver routines: pdsygvx_, pzhegvx_, pssygvx_, pchegvx_. - * + * * @param desc the descriptor of scalapack descriptor * @param ncol the number of columns of the H/S matrix in current processor * @param nrow the number of rows of the H/S matrix in current processor @@ -18,7 +19,7 @@ namespace hsolver * @param s_mat the overlap matrix * @param ekb the eigenvalues * @param wfc_2d the eigenvectors in 2D block cyclic distribution - * + * */ template @@ -30,7 +31,7 @@ void pxxxgvx_diag(const int* const desc, const T* const s_mat, typename GetTypeReal::type* const ekb, T* const wfc_2d); -#endif +#endif } // namespace hsolver diff --git a/source/source_hsolver/diago_scalapack.cpp b/source/source_hsolver/diago_scalapack.cpp index 92388fd461..292149e159 100644 --- a/source/source_hsolver/diago_scalapack.cpp +++ b/source/source_hsolver/diago_scalapack.cpp @@ -7,22 +7,21 @@ //===================== #include "diago_scalapack.h" +#include "module_hamilt_general/matrixblock.h" +#include "source_base/global_function.h" +#include "source_base/global_variable.h" +#include "source_base/scalapack_connector.h" #include #include -#include "module_base/global_function.h" -#include "module_base/global_variable.h" -#include "module_base/scalapack_connector.h" -#include "module_hamilt_general/matrixblock.h" - typedef hamilt::MatrixBlock matd; typedef hamilt::MatrixBlock> matcd; namespace hsolver { - template<> - void DiagoScalapack::diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in) +template <> +void DiagoScalapack::diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in) { ModuleBase::TITLE("DiagoScalapack", "diag"); matd h_mat, s_mat; @@ -33,8 +32,10 @@ namespace hsolver const int inc = 1; BlasConnector::copy(PARAM.inp.nbands, eigen.data(), inc, eigenvalue_in, inc); } - template<> - void DiagoScalapack>::diag(hamilt::Hamilt>* phm_in, psi::Psi>& psi, Real* eigenvalue_in) +template <> +void DiagoScalapack>::diag(hamilt::Hamilt>* phm_in, + psi::Psi>& psi, + Real* eigenvalue_in) { ModuleBase::TITLE("DiagoScalapack", "diag"); matcd h_mat, s_mat; @@ -47,12 +48,12 @@ namespace hsolver } #ifdef __MPI - template<> - void DiagoScalapack::diag_pool(hamilt::MatrixBlock& h_mat, - hamilt::MatrixBlock& s_mat, - psi::Psi& psi, - Real* eigenvalue_in, - MPI_Comm& comm) +template <> +void DiagoScalapack::diag_pool(hamilt::MatrixBlock& h_mat, + hamilt::MatrixBlock& s_mat, + psi::Psi& psi, + Real* eigenvalue_in, + MPI_Comm& comm) { ModuleBase::TITLE("DiagoScalapack", "diag_pool"); assert(h_mat.col == s_mat.col && h_mat.row == s_mat.row && h_mat.desc == s_mat.desc); @@ -61,12 +62,12 @@ namespace hsolver const int inc = 1; BlasConnector::copy(PARAM.inp.nbands, eigen.data(), inc, eigenvalue_in, inc); } - template<> - void DiagoScalapack>::diag_pool(hamilt::MatrixBlock>& h_mat, - hamilt::MatrixBlock>& s_mat, - psi::Psi>& psi, - Real* eigenvalue_in, - MPI_Comm& comm) +template <> +void DiagoScalapack>::diag_pool(hamilt::MatrixBlock>& h_mat, + hamilt::MatrixBlock>& s_mat, + psi::Psi>& psi, + Real* eigenvalue_in, + MPI_Comm& comm) { ModuleBase::TITLE("DiagoScalapack", "diag_pool"); assert(h_mat.col == s_mat.col && h_mat.row == s_mat.row && h_mat.desc == s_mat.desc); @@ -77,14 +78,14 @@ namespace hsolver } #endif - template - std::pair> DiagoScalapack::pdsygvx_once(const int* const desc, - const int ncol, - const int nrow, - const double *const h_mat, - const double *const s_mat, - double *const ekb, - psi::Psi &wfc_2d) const +template +std::pair> DiagoScalapack::pdsygvx_once(const int* const desc, + const int ncol, + const int nrow, + const double* const h_mat, + const double* const s_mat, + double* const ekb, + psi::Psi& wfc_2d) const { ModuleBase::matrix h_tmp(ncol, nrow, false); memcpy(h_tmp.c, h_mat, sizeof(double) * ncol * nrow); @@ -136,15 +137,15 @@ namespace hsolver iclustr.data(), gap.data(), &info); - if (info) { - throw std::runtime_error("info = " + ModuleBase::GlobalFunc::TO_STRING(info) + ".\n" - + std::string(__FILE__) + " line " - + std::to_string(__LINE__)); -} + if (info) + { + throw std::runtime_error("info = " + ModuleBase::GlobalFunc::TO_STRING(info) + ".\n" + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } // GlobalV::ofs_running<<"lwork="< - std::pair> DiagoScalapack::pzhegvx_once(const int* const desc, - const int ncol, - const int nrow, - const std::complex *const h_mat, - const std::complex *const s_mat, - double *const ekb, - psi::Psi> &wfc_2d) const +template +std::pair> DiagoScalapack::pzhegvx_once(const int* const desc, + const int ncol, + const int nrow, + const std::complex* const h_mat, + const std::complex* const s_mat, + double* const ekb, + psi::Psi>& wfc_2d) const { ModuleBase::ComplexMatrix h_tmp(ncol, nrow, false); memcpy(h_tmp.c, h_mat, sizeof(std::complex) * ncol * nrow); @@ -220,9 +233,9 @@ namespace hsolver const int itype = 1, il = 1, iu = PARAM.inp.nbands, one = 1; int M = 0, NZ = 0, lwork = -1, lrwork = -1, liwork = -1, info = 0; const double abstol = 0, orfac = -1; - //Note: pzhegvx_ has a bug - // We must give vl,vu a value, although we do not use range 'V' - // We must give rwork at least a memory of sizeof(double) * 3 + // Note: pzhegvx_ has a bug + // We must give vl,vu a value, although we do not use range 'V' + // We must give rwork at least a memory of sizeof(double) * 3 const double vl = 0, vu = 0; std::vector> work(1, 0); std::vector rwork(3, 0); @@ -267,17 +280,17 @@ namespace hsolver iclustr.data(), gap.data(), &info); - if (info) { - throw std::runtime_error("info=" + ModuleBase::GlobalFunc::TO_STRING(info) + ". " - + std::string(__FILE__) + " line " - + std::to_string(__LINE__)); -} + if (info) + { + throw std::runtime_error("info=" + ModuleBase::GlobalFunc::TO_STRING(info) + ". " + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } // GlobalV::ofs_running<<"lwork="<degeneracy_max * PARAM.globalv.nlocal; - int maxlrwork = std::max(lrwork,3); + int maxlrwork = std::max(lrwork, 3); rwork.resize(maxlrwork, 0); liwork = iwork[0]; iwork.resize(liwork, 0); @@ -320,68 +333,81 @@ namespace hsolver &info); // GlobalV::ofs_running<<"M="<{}); - } else if (info < 0) { + } + else if (info < 0) + { return std::make_pair(info, std::vector{}); - } else if (info % 2) { + } + else if (info % 2) + { return std::make_pair(info, ifail); - } else if (info / 2 % 2) { + } + else if (info / 2 % 2) + { return std::make_pair(info, iclustr); - } else if (info / 4 % 2) { + } + else if (info / 4 % 2) + { return std::make_pair(info, std::vector{M, NZ}); - } else if (info / 16 % 2) { + } + else if (info / 16 % 2) + { return std::make_pair(info, ifail); - } else { - throw std::runtime_error("info = " + ModuleBase::GlobalFunc::TO_STRING(info) + ".\n" - + std::string(__FILE__) + " line " - + std::to_string(__LINE__)); -} + } + else + { + throw std::runtime_error("info = " + ModuleBase::GlobalFunc::TO_STRING(info) + ".\n" + std::string(__FILE__) + + " line " + std::to_string(__LINE__)); + } } - template - void DiagoScalapack::pdsygvx_diag(const int* const desc, - const int ncol, - const int nrow, - const double *const h_mat, - const double *const s_mat, - double *const ekb, - psi::Psi &wfc_2d) +template +void DiagoScalapack::pdsygvx_diag(const int* const desc, + const int ncol, + const int nrow, + const double* const h_mat, + const double* const s_mat, + double* const ekb, + psi::Psi& wfc_2d) { while (true) { const std::pair> info_vec = pdsygvx_once(desc, ncol, nrow, h_mat, s_mat, ekb, wfc_2d); post_processing(info_vec.first, info_vec.second); - if (info_vec.first == 0) { + if (info_vec.first == 0) + { break; -} + } } } - template - void DiagoScalapack ::pzhegvx_diag(const int* const desc, - const int ncol, - const int nrow, - const std::complex *const h_mat, - const std::complex *const s_mat, - double *const ekb, - psi::Psi> &wfc_2d) +template +void DiagoScalapack::pzhegvx_diag(const int* const desc, + const int ncol, + const int nrow, + const std::complex* const h_mat, + const std::complex* const s_mat, + double* const ekb, + psi::Psi>& wfc_2d) { while (true) { const std::pair> info_vec = pzhegvx_once(desc, ncol, nrow, h_mat, s_mat, ekb, wfc_2d); post_processing(info_vec.first, info_vec.second); - if (info_vec.first == 0) { + if (info_vec.first == 0) + { break; -} + } } } - template - void DiagoScalapack::post_processing(const int info, const std::vector& vec) +template +void DiagoScalapack::post_processing(const int info, const std::vector& vec) { const std::string str_info = "info = " + ModuleBase::GlobalFunc::TO_STRING(info) + ".\n"; - const std::string str_FILE - = std::string(__FILE__) + " line " + std::to_string(__LINE__) + ".\n"; + const std::string str_FILE = std::string(__FILE__) + " line " + std::to_string(__LINE__) + ".\n"; const std::string str_info_FILE = str_info + str_FILE; if (info == 0) @@ -401,17 +427,19 @@ namespace hsolver else if (info % 2) { std::string str_ifail = "ifail = "; - for (const int i: vec) { + for (const int i: vec) + { str_ifail += ModuleBase::GlobalFunc::TO_STRING(i) + " "; -} + } throw std::runtime_error(str_info_FILE + str_ifail); } else if (info / 2 % 2) { int degeneracy_need = 0; - for (int irank = 0; irank < GlobalV::DSIZE; ++irank) { + for (int irank = 0; irank < GlobalV::DSIZE; ++irank) + { degeneracy_need = std::max(degeneracy_need, vec[2 * irank + 1] - vec[2 * irank]); -} + } const std::string str_need = "degeneracy_need = " + ModuleBase::GlobalFunc::TO_STRING(degeneracy_need) + ".\n"; const std::string str_saved = "degeneracy_saved = " + ModuleBase::GlobalFunc::TO_STRING(this->degeneracy_max) + ".\n"; diff --git a/source/source_hsolver/diago_scalapack.h b/source/source_hsolver/diago_scalapack.h index 1ac2e31ab4..141ebd9f8f 100644 --- a/source/source_hsolver/diago_scalapack.h +++ b/source/source_hsolver/diago_scalapack.h @@ -8,65 +8,70 @@ #ifndef DIAGO_SCALAPACK_H #define DIAGO_SCALAPACK_H +#include "module_basis/module_ao/parallel_orbitals.h" +#include "module_hamilt_general/hamilt.h" +#include "module_psi/psi.h" +#include "source_base/complexmatrix.h" +#include "source_base/macros.h" // GetRealType +#include "source_base/matrix.h" + #include #include #include -#include "module_base/macros.h" // GetRealType -#include "module_hamilt_general/hamilt.h" -#include "module_psi/psi.h" -#include "module_base/complexmatrix.h" -#include "module_base/matrix.h" -#include "module_basis/module_ao/parallel_orbitals.h" - namespace hsolver { - template - class DiagoScalapack +template +class DiagoScalapack { -private: + private: using Real = typename GetTypeReal::type; + public: void diag(hamilt::Hamilt* phm_in, psi::Psi& psi, Real* eigenvalue_in); #ifdef __MPI // diagnolization used in parallel-k case - void diag_pool(hamilt::MatrixBlock& h_mat, hamilt::MatrixBlock& s_mat, psi::Psi& psi, Real* eigenvalue_in, MPI_Comm& comm); + void diag_pool(hamilt::MatrixBlock& h_mat, + hamilt::MatrixBlock& s_mat, + psi::Psi& psi, + Real* eigenvalue_in, + MPI_Comm& comm); #endif private: - void pdsygvx_diag(const int *const desc, + void pdsygvx_diag(const int* const desc, const int ncol, const int nrow, - const double *const h_mat, - const double *const s_mat, - double *const ekb, - psi::Psi &wfc_2d); - void pzhegvx_diag(const int *const desc, + const double* const h_mat, + const double* const s_mat, + double* const ekb, + psi::Psi& wfc_2d); + void pzhegvx_diag(const int* const desc, const int ncol, const int nrow, - const std::complex *const h_mat, - const std::complex *const s_mat, - double *const ekb, - psi::Psi> &wfc_2d); + const std::complex* const h_mat, + const std::complex* const s_mat, + double* const ekb, + psi::Psi>& wfc_2d); - std::pair> pdsygvx_once(const int *const desc, + std::pair> pdsygvx_once(const int* const desc, const int ncol, const int nrow, - const double *const h_mat, - const double *const s_mat, - double *const ekb, - psi::Psi &wfc_2d) const; - std::pair> pzhegvx_once(const int *const desc, + const double* const h_mat, + const double* const s_mat, + double* const ekb, + psi::Psi& wfc_2d) const; + std::pair> pzhegvx_once(const int* const desc, const int ncol, const int nrow, - const std::complex *const h_mat, - const std::complex *const s_mat, - double *const ekb, - psi::Psi> &wfc_2d) const; + const std::complex* const h_mat, + const std::complex* const s_mat, + double* const ekb, + psi::Psi>& wfc_2d) const; int degeneracy_max = 12; // For reorthogonalized memory. 12 followes siesta. - void post_processing(const int info, const std::vector &vec); + void post_processing(const int info, const std::vector& vec); }; } // namespace hsolver diff --git a/source/source_hsolver/genelpa/elpa_new_complex.cpp b/source/source_hsolver/genelpa/elpa_new_complex.cpp index 044cfbe6fd..15aeb8d63a 100644 --- a/source/source_hsolver/genelpa/elpa_new_complex.cpp +++ b/source/source_hsolver/genelpa/elpa_new_complex.cpp @@ -1,19 +1,16 @@ -#include -#include -#include -#include -#include -#include -#include - #include "elpa_new.h" #include "elpa_solver.h" - -#include "module_base/scalapack_connector.h" +#include "source_base/scalapack_connector.h" +#include "source_base/tool_quit.h" #include "utils.h" -#include "module_base/tool_quit.h" - +#include +#include +#include +#include +#include +#include +#include extern std::map NEW_ELPA_HANDLE_POOL; @@ -23,13 +20,13 @@ int ELPA_Solver::eigenvector(std::complex* A, double* EigenValue, std::c int allinfo; double t; - if((loglevel>0 && myid==0) || loglevel>1) + if ((loglevel > 0 && myid == 0) || loglevel > 1) { - t=-1; + t = -1; timer(myid, "elpa_eigenvectors_dc", "1", t); } elpa_eigenvectors(NEW_ELPA_HANDLE_POOL[handle_id], A, EigenValue, EigenVector, &info); - if((loglevel>0 && myid==0) || loglevel>1) + if ((loglevel > 0 && myid == 0) || loglevel > 1) { timer(myid, "elpa_eigenvectors_dc", "1", t); } @@ -38,61 +35,68 @@ int ELPA_Solver::eigenvector(std::complex* A, double* EigenValue, std::c return allinfo; } -int ELPA_Solver::generalized_eigenvector(std::complex* A, std::complex* B, int& DecomposedState, - double* EigenValue, std::complex* EigenVector) +int ELPA_Solver::generalized_eigenvector(std::complex* A, + std::complex* B, + int& DecomposedState, + double* EigenValue, + std::complex* EigenVector) { int info, allinfo; double t; - if((loglevel>0 && myid==0) || loglevel>1) + if ((loglevel > 0 && myid == 0) || loglevel > 1) { - t=-1; + t = -1; timer(myid, "decomposeRightMatrix", "1", t); } - if(DecomposedState==0) // B is not decomposed - allinfo=decomposeRightMatrix(B, EigenValue, EigenVector, DecomposedState); + if (DecomposedState == 0) // B is not decomposed + allinfo = decomposeRightMatrix(B, EigenValue, EigenVector, DecomposedState); else - allinfo=0; + allinfo = 0; - if((loglevel>0 && myid==0) || loglevel>1) + if ((loglevel > 0 && myid == 0) || loglevel > 1) { timer(myid, "decomposeRightMatrix", "1", t); } - if(allinfo != 0){ + if (allinfo != 0) + { // if allinfo is still not 0 anyway, report error and quit - if(myid == 0){ - ModuleBase::WARNING_QUIT("ELPA_Solver::generalized_eigenvector", "decomposeRightMatrix failed to decompose right matrix!\n info = " + std::to_string(allinfo)); + if (myid == 0) + { + ModuleBase::WARNING_QUIT("ELPA_Solver::generalized_eigenvector", + "decomposeRightMatrix failed to decompose right matrix!\n info = " + + std::to_string(allinfo)); } } // transform A to A~ - if((loglevel>0 && myid==0) || loglevel>1) + if ((loglevel > 0 && myid == 0) || loglevel > 1) { - t=-1; + t = -1; timer(myid, "transform A to A~", "2", t); } - if(DecomposedState == 1 || DecomposedState == 2) + if (DecomposedState == 1 || DecomposedState == 2) { // calculate A*U^-1, put to work - if(loglevel>1) + if (loglevel > 1) { - t=-1; + t = -1; timer(myid, "A*U^-1", "2.1a", t); } ScalapackConnector::gemm('C', 'N', nFull, nFull, nFull, 1.0, A, B, 0.0, zwork.data(), desc); - if(loglevel>1) + if (loglevel > 1) { timer(myid, "A*U^-1", "2.1a", t); } // calculate U^-C^(A*U^-1), put to a - if(loglevel>1) + if (loglevel > 1) { - t=-1; + t = -1; timer(myid, "U^-T*(A*U^-1)", "2.2a", t); } ScalapackConnector::gemm('C', 'N', nFull, nFull, nFull, 1.0, B, zwork.data(), 0.0, A, desc); - if(loglevel>1) + if (loglevel > 1) { timer(myid, "U^-T*(A*U^-1)", "2.2a", t); } @@ -100,42 +104,43 @@ int ELPA_Solver::generalized_eigenvector(std::complex* A, std::complex1) + if (loglevel > 1) { - t=-1; + t = -1; timer(myid, "B*A^T", "2.1b", t); } ScalapackConnector::gemm('N', 'C', nFull, nFull, nFull, 1.0, B, A, 0.0, zwork.data(), desc); - if(loglevel>1) + if (loglevel > 1) { timer(myid, "B*A^T", "2.1b", t); } // calculate b*work^C and put to a -- original A*x=v*B*x was transform to a*x'=v*x' - if(loglevel>1) + if (loglevel > 1) { - t=-1; + t = -1; timer(myid, "B*(B*A^T)^T", "2.2b", t); } ScalapackConnector::gemm('N', 'C', nFull, nFull, nFull, 1.0, B, zwork.data(), 0.0, A, desc); - if(loglevel>1) + if (loglevel > 1) { timer(myid, "B*(B*A^T)^T", "2.2b", t); } } - if((loglevel>0 && myid==0) || loglevel>1) + if ((loglevel > 0 && myid == 0) || loglevel > 1) { timer(myid, "transform A to A~", "2", t); } // calculate the eigenvalue and eigenvector of A~ - if((loglevel>0 && myid==0) || loglevel>1) + if ((loglevel > 0 && myid == 0) || loglevel > 1) { - t=-1; + t = -1; timer(myid, "elpa_eigenvectors", "3", t); } - if(loglevel>2) saveMatrix("A_tilde.dat", nFull, A, desc, cblacs_ctxt); - info=eigenvector(A, EigenValue, EigenVector); - if((loglevel>0 && myid==0) || loglevel>1) + if (loglevel > 2) + saveMatrix("A_tilde.dat", nFull, A, desc, cblacs_ctxt); + info = eigenvector(A, EigenValue, EigenVector); + if ((loglevel > 0 && myid == 0) || loglevel > 1) { timer(myid, "elpa_eigenvectors", "3", t); } @@ -144,85 +149,90 @@ int ELPA_Solver::generalized_eigenvector(std::complex* A, std::complex2) saveMatrix("EigenVector_tilde.dat", nFull, EigenVector, desc, cblacs_ctxt); + if (loglevel > 2) + saveMatrix("EigenVector_tilde.dat", nFull, EigenVector, desc, cblacs_ctxt); - if((loglevel>0 && myid==0) || loglevel>1) + if ((loglevel > 0 && myid == 0) || loglevel > 1) { - t=-1; + t = -1; timer(myid, "composeEigenVector", "4", t); } // transform eigenvector c~ to original eigenvector c - allinfo=composeEigenVector(DecomposedState, B, EigenVector); - if((loglevel>0 && myid==0) || loglevel>1) + allinfo = composeEigenVector(DecomposedState, B, EigenVector); + if ((loglevel > 0 && myid == 0) || loglevel > 1) { timer(myid, "composeEigenVector", "4", t); } return allinfo; } -int ELPA_Solver::decomposeRightMatrix(std::complex* B, double* EigenValue, std::complex* EigenVector, int& DecomposedState) +int ELPA_Solver::decomposeRightMatrix(std::complex* B, + double* EigenValue, + std::complex* EigenVector, + int& DecomposedState) { - int info=0; - int allinfo=0; + int info = 0; + int allinfo = 0; double t; // first try cholesky decomposing - if(nFull1) + DecomposedState = 1; + if (loglevel > 1) { - t=-1; + t = -1; timer(myid, "pzpotrf_", "1", t); } ScalapackConnector::potrf('U', nFull, B, desc); - if(loglevel>1) + if (loglevel > 1) { timer(myid, "pzpotrf_", "1", t); } MPI_Allreduce(&info, &allinfo, 1, MPI_INT, MPI_MAX, comm); allinfo = info; - if(allinfo != 0) //if pdpotrf fail, try elpa_cholesky_real + if (allinfo != 0) // if pdpotrf fail, try elpa_cholesky_real { - DecomposedState=2; - if(loglevel>1) + DecomposedState = 2; + if (loglevel > 1) { - t=-1; + t = -1; timer(myid, "elpa_cholesky_dc", "2", t); } elpa_cholesky(NEW_ELPA_HANDLE_POOL[handle_id], B, &info); - if(loglevel>1) + if (loglevel > 1) { timer(myid, "elpa_cholesky_dc", "2", t); } MPI_Allreduce(&info, &allinfo, 1, MPI_INT, MPI_MAX, comm); allinfo = info; } - } else + } + else { - DecomposedState=2; - if(loglevel>1) + DecomposedState = 2; + if (loglevel > 1) { - t=-1; + t = -1; timer(myid, "elpa_cholesky_dc", "1", t); } elpa_cholesky(NEW_ELPA_HANDLE_POOL[handle_id], B, &info); - if(loglevel>1) + if (loglevel > 1) { timer(myid, "elpa_cholesky_dc", "1", t); } MPI_Allreduce(&info, &allinfo, 1, MPI_INT, MPI_MAX, comm); allinfo = info; - if(allinfo != 0) + if (allinfo != 0) { - DecomposedState=1; - if(loglevel>1) + DecomposedState = 1; + if (loglevel > 1) { - t=-1; + t = -1; timer(myid, "pzpotrf_", "2", t); } ScalapackConnector::potrf('U', nFull, B, desc); - if(loglevel>1) + if (loglevel > 1) { timer(myid, "pzpotrf_", "2", t); } @@ -231,84 +241,90 @@ int ELPA_Solver::decomposeRightMatrix(std::complex* B, double* EigenValu } } - if(allinfo==0) // calculate U^{-1} + if (allinfo == 0) // calculate U^{-1} { - if(loglevel>1) + if (loglevel > 1) { - t=-1; + t = -1; timer(myid, "clear low triangle", "1", t); } - for(int j=0; jjGlobal) B[i+j*narows]=0; + int iGlobal = globalIndex(i, nblk, nprows, myprow); + if (iGlobal > jGlobal) + B[i + j * narows] = 0; } } - if(loglevel>1) + if (loglevel > 1) { timer(myid, "clear low triangle", "1", t); } - if(loglevel>2) saveMatrix("U.dat", nFull, B, desc, cblacs_ctxt); - if(loglevel>1) + if (loglevel > 2) + saveMatrix("U.dat", nFull, B, desc, cblacs_ctxt); + if (loglevel > 1) { - t=-1; + t = -1; timer(myid, "invert U", "1", t); } elpa_invert_triangular(NEW_ELPA_HANDLE_POOL[handle_id], B, &info); - if(loglevel>1) + if (loglevel > 1) { timer(myid, "invert U", "1", t); } - if(loglevel>2) saveMatrix("U_inv.dat", nFull, B, desc, cblacs_ctxt); - } else { + if (loglevel > 2) + saveMatrix("U_inv.dat", nFull, B, desc, cblacs_ctxt); + } + else + { // if cholesky decomposing failed, try diagonalize // calculate B^{-1/2}_{i,j}=\sum_k q_{i,k}*ev_k^{-1/2}*q_{j,k} and put to b, which will be b^-1/2 - DecomposedState=3; - if(loglevel>1) + DecomposedState = 3; + if (loglevel > 1) { - t=-1; + t = -1; timer(myid, "calculate eigenvalue and eigenvector of B", "1", t); } - //elpa_eigenvectors_all_host_arrays_dc(NEW_ELPA_HANDLE_POOL[handle_id], b, - // EigenValue, q, &info); - info=eigenvector(B, EigenValue, EigenVector); - if(loglevel>1) + // elpa_eigenvectors_all_host_arrays_dc(NEW_ELPA_HANDLE_POOL[handle_id], b, + // EigenValue, q, &info); + info = eigenvector(B, EigenValue, EigenVector); + if (loglevel > 1) { timer(myid, "calculate eigenvalue and eigenvector of B", "1", t); } MPI_Allreduce(&info, &allinfo, 1, MPI_INT, MPI_MAX, comm); allinfo = info; // calculate q*ev and put to work - for(int i=0; iDBL_MIN?1.0/sqrt(EigenValue[eidx]):0; - for(int j=0; j DBL_MIN ? 1.0 / sqrt(EigenValue[eidx]) : 0; + for (int j = 0; j < narows; ++j) + zwork[i * lda + j] = EigenVector[i * lda + j] * ev_sqrt; } // calculate qevq=qev*q^T, put to b, which is B^{-1/2} - if(loglevel>1) + if (loglevel > 1) { - t=-1; + t = -1; timer(myid, "qevq=qev*q^T", "2", t); } ScalapackConnector::gemm('N', 'C', nFull, nFull, nFull, 1.0, zwork.data(), EigenVector, 0.0, B, desc); - if(loglevel>1) + if (loglevel > 1) { timer(myid, "qevq=qev*q^T", "2", t); } } // if allinfo is still not 0 anyway, report error and quit - if(allinfo != 0) + if (allinfo != 0) { - if(myid == 0){ + if (myid == 0) + { ModuleBase::WARNING_QUIT("decomposeRightMatrix", - "Failed to decompose right matrix!\n info = " + std::to_string(allinfo)); + "Failed to decompose right matrix!\n info = " + std::to_string(allinfo)); } } return allinfo; @@ -317,28 +333,30 @@ int ELPA_Solver::decomposeRightMatrix(std::complex* B, double* EigenValu int ELPA_Solver::composeEigenVector(int DecomposedState, std::complex* B, std::complex* EigenVector) { double t; - if(DecomposedState==1 || DecomposedState==2) + if (DecomposedState == 1 || DecomposedState == 2) { // transform the eigenvectors to original general equation, let U^-1*q, and put to q - if(loglevel>1) + if (loglevel > 1) { - t=-1; + t = -1; timer(myid, "Cpztrmm", "1", t); } ScalapackConnector::trmm('L', 'U', 'N', 'N', nFull, nev, 1.0, B, EigenVector, desc); - if(loglevel>1) + if (loglevel > 1) { timer(myid, "Cpztrmm", "1", t); } - } else { + } + else + { // transform the eigenvectors to original general equation, let b^C*q, and put to q - if(loglevel>1) + if (loglevel > 1) { - t=-1; + t = -1; timer(myid, "Cpzgemm", "1", t); } ScalapackConnector::gemm('C', 'N', nFull, nev, nFull, 1.0, B, zwork.data(), 0.0, EigenVector, desc); - if(loglevel>1) + if (loglevel > 1) { timer(myid, "Cpzgemm", "1", t); } @@ -354,53 +372,57 @@ int ELPA_Solver::composeEigenVector(int DecomposedState, std::complex* B // D: Diagonal matrix of eigenvalue // maxError: maximum absolute value of error // meanError: mean absolute value of error -void ELPA_Solver::verify(std::complex* A, double* EigenValue, std::complex* EigenVector, - double &maxError, double &meanError) +void ELPA_Solver::verify(std::complex* A, + double* EigenValue, + std::complex* EigenVector, + double& maxError, + double& meanError) { - std::complex* V=EigenVector; - const int naloc=narows*nacols; - std::complex* D=new std::complex[naloc]; - std::complex* R=zwork.data(); + std::complex* V = EigenVector; + const int naloc = narows * nacols; + std::complex* D = new std::complex[naloc]; + std::complex* R = zwork.data(); - for(int i=0; i2) saveMatrix("VD.dat", nFull, R, desc, cblacs_ctxt); + if (loglevel > 2) + saveMatrix("VD.dat", nFull, R, desc, cblacs_ctxt); // R=A*V-V*D=A*V-R ScalapackConnector::hemm('L', 'U', nFull, 1.0, A, V, -1.0, R, desc); - if(loglevel>2) saveMatrix("AV-VD.dat", nFull, R, desc, cblacs_ctxt); + if (loglevel > 2) + saveMatrix("AV-VD.dat", nFull, R, desc, cblacs_ctxt); // calculate the maximum and mean value of sum_i{R(:,i)*R(:,i)} - double sumError=0; - maxError=0; - for(int i=1; i<=nev; ++i) + double sumError = 0; + maxError = 0; + for (int i = 1; i <= nev; ++i) { std::complex E; - ScalapackConnector::dot(nFull, E, R, 1, i, 1, - R, 1, i, 1, desc); - double abs_E=std::abs(E); - sumError+=abs_E; - maxError=std::max(maxError, abs_E); + ScalapackConnector::dot(nFull, E, R, 1, i, 1, R, 1, i, 1, desc); + double abs_E = std::abs(E); + sumError += abs_E; + maxError = std::max(maxError, abs_E); } - meanError=sumError/nFull; + meanError = sumError / nFull; delete[] D; } @@ -412,57 +434,62 @@ void ELPA_Solver::verify(std::complex* A, double* EigenValue, std::compl // D: Diagonal matrix of eigenvalue // maxError: maximum absolute value of error // meanError: mean absolute value of error -void ELPA_Solver::verify(std::complex* A, std::complex* B, - double* EigenValue, std::complex* EigenVector, - double &maxError, double &meanError) +void ELPA_Solver::verify(std::complex* A, + std::complex* B, + double* EigenValue, + std::complex* EigenVector, + double& maxError, + double& meanError) { - std::complex* V=EigenVector; - const int naloc=narows*nacols; - std::complex* D=new std::complex[naloc]; - std::complex* R=new std::complex[naloc]; + std::complex* V = EigenVector; + const int naloc = narows * nacols; + std::complex* D = new std::complex[naloc]; + std::complex* R = new std::complex[naloc]; - for(int i=0; i2) saveMatrix("BV.dat", nFull, zwork.data(), desc, cblacs_ctxt); + if (loglevel > 2) + saveMatrix("BV.dat", nFull, zwork.data(), desc, cblacs_ctxt); // R=B*V*D=zwork*D ScalapackConnector::hemm('L', 'U', nFull, 1.0, B, V, 0.0, zwork.data(), desc); - if(loglevel>2) saveMatrix("BVD.dat", nFull, R, desc, cblacs_ctxt); + if (loglevel > 2) + saveMatrix("BVD.dat", nFull, R, desc, cblacs_ctxt); // R=A*V-B*V*D=A*V-R ScalapackConnector::hemm('L', 'U', nFull, 1.0, B, V, 0.0, zwork.data(), desc); - if(loglevel>2) saveMatrix("AV-BVD.dat", nFull, R, desc, cblacs_ctxt); + if (loglevel > 2) + saveMatrix("AV-BVD.dat", nFull, R, desc, cblacs_ctxt); // calculate the maximum and mean value of sum_i{R(:,i)*R(:,i)} - double sumError=0; - maxError=0; - for(int i=1; i<=nev; ++i) + double sumError = 0; + maxError = 0; + for (int i = 1; i <= nev; ++i) { std::complex E; - ScalapackConnector::dot(nFull, E, R, 1, i, 1, - R, 1, i, 1, desc); - double abs_E=std::abs(E); - sumError+=abs_E; - maxError=std::max(maxError, abs_E); + ScalapackConnector::dot(nFull, E, R, 1, i, 1, R, 1, i, 1, desc); + double abs_E = std::abs(E); + sumError += abs_E; + maxError = std::max(maxError, abs_E); } - meanError=sumError/nFull; + meanError = sumError / nFull; delete[] D; delete[] R; diff --git a/source/source_hsolver/genelpa/elpa_new_real.cpp b/source/source_hsolver/genelpa/elpa_new_real.cpp index 3a82897a51..547674e9f4 100644 --- a/source/source_hsolver/genelpa/elpa_new_real.cpp +++ b/source/source_hsolver/genelpa/elpa_new_real.cpp @@ -1,11 +1,9 @@ #include "elpa_new.h" #include "elpa_solver.h" - -#include "module_base/scalapack_connector.h" +#include "source_base/scalapack_connector.h" +#include "source_base/tool_quit.h" #include "utils.h" -#include "module_base/tool_quit.h" - #include #include #include @@ -56,10 +54,14 @@ int ELPA_Solver::generalized_eigenvector(double* A, { timer(myid, "decomposeRightMatrix", "1", t); } - if (allinfo != 0){ + if (allinfo != 0) + { // if allinfo is still not 0 anyway, report error and quit - if(myid == 0){ - ModuleBase::WARNING_QUIT("ELPA_Solver::generalized_eigenvector", "decomposeRightMatrix failed to decompose right matrix!\n info = " + std::to_string(allinfo)); + if (myid == 0) + { + ModuleBase::WARNING_QUIT("ELPA_Solver::generalized_eigenvector", + "decomposeRightMatrix failed to decompose right matrix!\n info = " + + std::to_string(allinfo)); } } @@ -321,11 +323,12 @@ int ELPA_Solver::decomposeRightMatrix(double* B, double* EigenValue, double* Eig } // if allinfo is still not 0 anyway, report error and quit - if(allinfo != 0) + if (allinfo != 0) { - if(myid == 0){ + if (myid == 0) + { ModuleBase::WARNING_QUIT("decomposeRightMatrix", - "Failed to decompose right matrix!\n info = " + std::to_string(allinfo)); + "Failed to decompose right matrix!\n info = " + std::to_string(allinfo)); } } return allinfo; @@ -343,7 +346,7 @@ int ELPA_Solver::composeEigenVector(int DecomposedState, double* B, double* Eige timer(myid, "Cpdtrmm", "1", t); } ScalapackConnector::trmm('L', 'U', 'N', 'N', nFull, nev, 1.0, B, EigenVector, desc); - //Cpdtrmm('L', 'U', 'N', 'N', nFull, nev, 1.0, B, EigenVector, desc); + // Cpdtrmm('L', 'U', 'N', 'N', nFull, nev, 1.0, B, EigenVector, desc); if (loglevel > 1) { timer(myid, "Cpdtrmm", "1", t); diff --git a/source/source_hsolver/genelpa/utils.cpp b/source/source_hsolver/genelpa/utils.cpp index 370ce0cf05..60189acd29 100644 --- a/source/source_hsolver/genelpa/utils.cpp +++ b/source/source_hsolver/genelpa/utils.cpp @@ -1,7 +1,7 @@ #include "utils.h" -#include "module_base/blacs_connector.h" -#include "module_base/scalapack_connector.h" +#include "source_base/blacs_connector.h" +#include "source_base/scalapack_connector.h" #include #include @@ -94,7 +94,7 @@ void loadMatrix(const char FileName[], int nFull, double* a, int* desca, int bla if (myid == ROOT_PROC) matrixFile.open(FileName); - double* b; // buffer + double* b; // buffer const int MAX_BUFFER_SIZE = 1e9; // max buffer size is 1GB int N = nFull; @@ -179,7 +179,7 @@ void saveMatrix(const char FileName[], int nFull, double* a, int* desca, int bla matrixFile.width(24); } - double* b; // buffer + double* b; // buffer const int MAX_BUFFER_SIZE = 1e9; // max buffer size is 1GB int N = nFull; @@ -231,7 +231,7 @@ void loadMatrix(const char FileName[], int nFull, std::complex* a, int* if (myid == ROOT_PROC) matrixFile.open(FileName); - std::complex* b; // buffer + std::complex* b; // buffer const int MAX_BUFFER_SIZE = 1e9; // max buffer size is 1GB int N = nFull; @@ -317,7 +317,7 @@ void saveMatrix(const char FileName[], int nFull, std::complex* a, int* matrixFile.width(24); } - std::complex* b; // buffer + std::complex* b; // buffer const int MAX_BUFFER_SIZE = 1e9; // max buffer size is 1GB int N = nFull; diff --git a/source/source_hsolver/hsolver_lcao.cpp b/source/source_hsolver/hsolver_lcao.cpp index 9aafbbcab0..da87e0cbbb 100644 --- a/source/source_hsolver/hsolver_lcao.cpp +++ b/source/source_hsolver/hsolver_lcao.cpp @@ -2,7 +2,7 @@ #ifdef __MPI #include "diago_scalapack.h" -#include "module_base/scalapack_connector.h" +#include "source_base/scalapack_connector.h" #else #include "diago_lapack.h" #endif @@ -24,15 +24,15 @@ #include "diago_pexsi.h" #endif -#include "module_base/global_variable.h" -#include "module_elecstate/elecstate_tools.h" -#include "module_base/memory.h" -#include "module_base/timer.h" #include "module_elecstate/elecstate_lcao.h" +#include "module_elecstate/elecstate_tools.h" #include "module_elecstate/module_dm/cal_dm_psi.h" #include "module_elecstate/module_dm/density_matrix.h" -#include "source_hsolver/parallel_k2d.h" #include "module_parameter/parameter.h" +#include "source_base/global_variable.h" +#include "source_base/memory.h" +#include "source_base/timer.h" +#include "source_hsolver/parallel_k2d.h" namespace hsolver { diff --git a/source/source_hsolver/hsolver_lcaopw.cpp b/source/source_hsolver/hsolver_lcaopw.cpp index a279d4c8cc..0f84d6a861 100644 --- a/source/source_hsolver/hsolver_lcaopw.cpp +++ b/source/source_hsolver/hsolver_lcaopw.cpp @@ -1,16 +1,15 @@ #include "hsolver_lcaopw.h" -#include "module_base/global_variable.h" -#include "module_base/parallel_global.h" // for MPI -#include "module_base/timer.h" -#include "module_base/tool_quit.h" #include "module_elecstate/elecstate_pw.h" +#include "module_elecstate/elecstate_tools.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" -#include "source_hsolver/diago_iter_assist.h" #include "module_parameter/parameter.h" -#include "module_elecstate/elecstate_tools.h" - +#include "source_base/global_variable.h" +#include "source_base/parallel_global.h" // for MPI +#include "source_base/timer.h" +#include "source_base/tool_quit.h" +#include "source_hsolver/diago_iter_assist.h" #ifdef __EXX #include "module_hamilt_pw/hamilt_pwdft/hamilt_lcaopw.h" @@ -101,7 +100,7 @@ void HSolverLIP::solve(hamilt::Hamilt* pHamilt, // ESolver_KS_PW::p_hamilt pes->f_en, pes->nelec_spin, pes->skip_weights); - elecstate::calEBand(pes->ekb,pes->wg,pes->f_en); + elecstate::calEBand(pes->ekb, pes->wg, pes->f_en); if (skip_charge) { if (PARAM.globalv.use_uspp) diff --git a/source/source_hsolver/hsolver_lcaopw.h b/source/source_hsolver/hsolver_lcaopw.h index 4b29901ad9..d4817f1d09 100644 --- a/source/source_hsolver/hsolver_lcaopw.h +++ b/source/source_hsolver/hsolver_lcaopw.h @@ -3,8 +3,8 @@ #include "module_elecstate/elecstate.h" #include "module_hamilt_general/hamilt.h" -#include "module_base/macros.h" -#include "module_base/module_device/types.h" +#include "source_base/macros.h" +#include "source_base/module_device/types.h" namespace hsolver { @@ -19,7 +19,7 @@ class HSolverLIP using Real = typename GetTypeReal::type; public: - HSolverLIP(ModulePW::PW_Basis_K* wfc_basis_in) : wfc_basis(wfc_basis_in) {}; + HSolverLIP(ModulePW::PW_Basis_K* wfc_basis_in) : wfc_basis(wfc_basis_in){}; /// @brief solve function for lcao_in_pw /// @param pHamilt interface to hamilt diff --git a/source/source_hsolver/hsolver_pw.cpp b/source/source_hsolver/hsolver_pw.cpp index d6caafeab3..4f3eeac6ba 100644 --- a/source/source_hsolver/hsolver_pw.cpp +++ b/source/source_hsolver/hsolver_pw.cpp @@ -1,20 +1,19 @@ #include "hsolver_pw.h" -#include "module_base/global_variable.h" -#include "module_base/timer.h" -#include "module_base/tool_quit.h" #include "module_elecstate/elecstate_pw.h" +#include "module_elecstate/elecstate_tools.h" #include "module_hamilt_general/hamilt.h" +#include "module_parameter/parameter.h" +#include "module_psi/psi.h" +#include "source_base/global_variable.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" #include "source_hsolver/diag_comm_info.h" #include "source_hsolver/diago_bpcg.h" #include "source_hsolver/diago_cg.h" #include "source_hsolver/diago_dav_subspace.h" #include "source_hsolver/diago_david.h" #include "source_hsolver/diago_iter_assist.h" -#include "module_parameter/parameter.h" -#include "module_psi/psi.h" -#include "module_elecstate/elecstate_tools.h" - #include #include @@ -95,17 +94,19 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, // Initialize k-point continuity if enabled static int count = 0; - if (use_k_continuity) { + if (use_k_continuity) + { build_k_neighbors(); } // Loop over k points for solve Hamiltonian to charge density - if (use_k_continuity) { + if (use_k_continuity) + { // K-point continuity case for (int i = 0; i < this->wfc_basis->nks; ++i) { const int ik = k_order[i]; - + // update H(k) for each k point pHamilt->updateHk(ik); @@ -117,7 +118,8 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, psi.fix_k(ik); // If using k-point continuity and not first k-point, propagate from parent - if (ik > 0 && count == 0 && k_parent.find(ik) != k_parent.end()) { + if (ik > 0 && count == 0 && k_parent.find(ik) != k_parent.end()) + { propagate_psi(psi, k_parent[ik], ik); } @@ -128,9 +130,9 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, if (PARAM.inp.diago_smooth_ethr == true) { this->cal_smooth_ethr(pes->klist->wk[ik], - &pes->wg(ik, 0), - DiagoIterAssist::PW_DIAG_THR, - ethr_band); + &pes->wg(ik, 0), + DiagoIterAssist::PW_DIAG_THR, + ethr_band); } #ifdef USE_PAW @@ -138,18 +140,23 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, #endif // solve eigenvector and eigenvalue for H(k) - this->hamiltSolvePsiK(pHamilt, psi, precondition, eigenvalues.data() + ik * psi.get_nbands(), this->wfc_basis->nks); + this->hamiltSolvePsiK(pHamilt, + psi, + precondition, + eigenvalues.data() + ik * psi.get_nbands(), + this->wfc_basis->nks); if (skip_charge) { GlobalV::ofs_running << "Average iterative diagonalization steps for k-points " << ik - << " is: " << DiagoIterAssist::avg_iter - << " ; where current threshold is: " << this->diag_thr << " . " << std::endl; + << " is: " << DiagoIterAssist::avg_iter + << " ; where current threshold is: " << this->diag_thr << " . " << std::endl; DiagoIterAssist::avg_iter = 0.0; } } } - else { + else + { // Original code without k-point continuity for (int ik = 0; ik < this->wfc_basis->nks; ++ik) { @@ -170,9 +177,9 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, if (PARAM.inp.diago_smooth_ethr == true) { this->cal_smooth_ethr(pes->klist->wk[ik], - &pes->wg(ik, 0), - DiagoIterAssist::PW_DIAG_THR, - ethr_band); + &pes->wg(ik, 0), + DiagoIterAssist::PW_DIAG_THR, + ethr_band); } #ifdef USE_PAW @@ -180,11 +187,15 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, #endif // solve eigenvector and eigenvalue for H(k) - this->hamiltSolvePsiK(pHamilt, psi, precondition, eigenvalues.data() + ik * psi.get_nbands(), this->wfc_basis->nks); + this->hamiltSolvePsiK(pHamilt, + psi, + precondition, + eigenvalues.data() + ik * psi.get_nbands(), + this->wfc_basis->nks); if (skip_charge) { - GlobalV::ofs_running << " k(" << ik+1 << "/" << pes->klist->get_nkstot() + GlobalV::ofs_running << " k(" << ik + 1 << "/" << pes->klist->get_nkstot() << ") Iter steps (avg)=" << DiagoIterAssist::avg_iter << " threshold=" << this->diag_thr << std::endl; DiagoIterAssist::avg_iter = 0.0; @@ -192,7 +203,7 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, /// calculate the contribution of Psi for charge density rho } } - + count++; // END Loop over k points @@ -211,7 +222,7 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, _pes_pw->nelec_spin, _pes_pw->skip_weights); - elecstate::calEBand(_pes_pw->ekb,_pes_pw->wg,_pes_pw->f_en); + elecstate::calEBand(_pes_pw->ekb, _pes_pw->wg, _pes_pw->f_en); if (skip_charge) { if (PARAM.globalv.use_uspp) @@ -224,8 +235,8 @@ void HSolverPW::solve(hamilt::Hamilt* pHamilt, reinterpret_cast*>(pes)->psiToRho(psi); } - ModuleBase::timer::tick("HSolverPW", "solve"); - return; + ModuleBase::timer::tick("HSolverPW", "solve"); + return; } template @@ -350,7 +361,6 @@ void HSolverPW::hamiltSolvePsiK(hamilt::Hamilt* hm, const int ndim = psi.get_current_ngk(); // hpsi_func (X, HX, ld, nvec) -> HX = H(X), X and HX blockvectors of size ld x nvec auto hpsi_func = [hm, cur_nbasis](T* psi_in, T* hpsi_out, const int ld_psi, const int nvec) { - // Convert "pointer data stucture" to a psi::Psi object auto psi_iter_wrapper = psi::Psi(psi_in, 1, nvec, ld_psi, cur_nbasis); @@ -368,7 +378,6 @@ void HSolverPW::hamiltSolvePsiK(hamilt::Hamilt* hm, { // hpsi_func (X, HX, ld, nvec) -> HX = H(X), X and HX blockvectors of size ld x nvec auto hpsi_func = [hm, cur_nbasis](T* psi_in, T* hpsi_out, const int ld_psi, const int nvec) { - // Convert "pointer data stucture" to a psi::Psi object auto psi_iter_wrapper = psi::Psi(psi_in, 1, nvec, ld_psi, cur_nbasis); @@ -411,14 +420,13 @@ void HSolverPW::hamiltSolvePsiK(hamilt::Hamilt* hm, // dimensions of matrix to be solved const int dim = psi.get_current_ngk(); /// dimension of matrix - const int nband = psi.get_nbands(); /// number of eigenpairs sought - const int ld_psi = psi.get_nbasis(); /// leading dimension of psi + const int nband = psi.get_nbands(); /// number of eigenpairs sought + const int ld_psi = psi.get_nbasis(); /// leading dimension of psi // Davidson matrix-blockvector functions /// wrap hpsi into lambda function, Matrix \times blockvector // hpsi_func (X, HX, ld, nvec) -> HX = H(X), X and HX blockvectors of size ld x nvec auto hpsi_func = [hm, cur_nbasis](T* psi_in, T* hpsi_out, const int ld_psi, const int nvec) { - // Convert pointer of psi_in to a psi::Psi object auto psi_iter_wrapper = psi::Psi(psi_in, 1, nvec, ld_psi, cur_nbasis); @@ -522,91 +530,96 @@ void HSolverPW::output_iterInfo() } template -void HSolverPW::build_k_neighbors() { +void HSolverPW::build_k_neighbors() +{ const int nk = this->wfc_basis->nks; kvecs_c.resize(nk); k_order.clear(); k_order.reserve(nk); - + // Store k-points and corresponding indices - struct KPoint { + struct KPoint + { ModuleBase::Vector3 kvec; int index; double norm; - - KPoint(const ModuleBase::Vector3& v, int i) : - kvec(v), index(i), norm(v.norm()) {} + + KPoint(const ModuleBase::Vector3& v, int i) : kvec(v), index(i), norm(v.norm()) + { + } }; - + // Build k-point list std::vector klist; - for (int ik = 0; ik < nk; ++ik) { + for (int ik = 0; ik < nk; ++ik) + { kvecs_c[ik] = this->wfc_basis->kvec_c[ik]; klist.push_back(KPoint(kvecs_c[ik], ik)); } - + // Sort k-points by distance from origin - std::sort(klist.begin(), klist.end(), - [](const KPoint& a, const KPoint& b) { - return a.norm < b.norm; - }); - + std::sort(klist.begin(), klist.end(), [](const KPoint& a, const KPoint& b) { return a.norm < b.norm; }); + // Build parent-child relationships k_order.push_back(klist[0].index); - + // Find nearest processed k-point as parent for each k-point - for (int i = 1; i < nk; ++i) { + for (int i = 1; i < nk; ++i) + { int current_k = klist[i].index; double min_dist = 1e10; int parent = -1; - + // find the nearest k-point as parent - for (int j = 0; j < k_order.size(); ++j) { + for (int j = 0; j < k_order.size(); ++j) + { int processed_k = k_order[j]; double dist = (kvecs_c[current_k] - kvecs_c[processed_k]).norm2(); - if (dist < min_dist) { + if (dist < min_dist) + { min_dist = dist; parent = processed_k; } } - + k_parent[current_k] = parent; k_order.push_back(current_k); } } template -void HSolverPW::propagate_psi(psi::Psi& psi, const int from_ik, const int to_ik) { +void HSolverPW::propagate_psi(psi::Psi& psi, const int from_ik, const int to_ik) +{ const int nbands = psi.get_nbands(); const int npwk = this->wfc_basis->npwk[to_ik]; - + // Get k-point difference ModuleBase::Vector3 dk = kvecs_c[to_ik] - kvecs_c[from_ik]; - + // Allocate porter locally T* porter = nullptr; resmem_complex_op()(porter, this->wfc_basis->nmaxgr, "HSolverPW::porter"); - + // Process each band for (int ib = 0; ib < nbands; ib++) { // Fix current k-point and band // psi.fix_k(from_ik); - + // FFT to real space // this->wfc_basis->recip_to_real(this->ctx, psi.get_pointer(ib), porter, from_ik); this->wfc_basis->recip_to_real(this->ctx, &psi(from_ik, ib, 0), porter, from_ik); - + // Apply phase factor // // TODO: Check how to get the r vector // ModuleBase::Vector3 r = this->wfc_basis->get_ir2r(ir); // double phase = this->wfc_basis->tpiba * (dk.x * r.x + dk.y * r.y + dk.z * r.z); // psi_real[ir] *= std::exp(std::complex(0.0, phase)); // } - + // Fix k-point for target // psi.fix_k(to_ik); - + // FFT back to reciprocal space // this->wfc_basis->real_to_recip(this->ctx, porter, psi.get_pointer(ib), to_ik, true); this->wfc_basis->real_to_recip(this->ctx, porter, &psi(to_ik, ib, 0), to_ik); diff --git a/source/source_hsolver/hsolver_pw.h b/source/source_hsolver/hsolver_pw.h index 3a52293fb2..522fc9913f 100644 --- a/source/source_hsolver/hsolver_pw.h +++ b/source/source_hsolver/hsolver_pw.h @@ -1,12 +1,13 @@ #ifndef HSOLVERPW_H #define HSOLVERPW_H +#include "module_basis/module_pw/pw_basis_k.h" #include "module_elecstate/elecstate.h" #include "module_hamilt_general/hamilt.h" -#include "module_base/macros.h" -#include "module_basis/module_pw/pw_basis_k.h" +#include "source_base/macros.h" +#include "source_base/memory.h" + #include -#include "module_base/memory.h" namespace hsolver { @@ -39,7 +40,7 @@ class HSolverPW : wfc_basis(wfc_basis_in), calculation_type(calculation_type_in), basis_type(basis_type_in), method(method_in), use_paw(use_paw_in), use_uspp(use_uspp_in), nspin(nspin_in), scf_iter(scf_iter_in), diag_iter_max(diag_iter_max_in), diag_thr(diag_thr_in), need_subspace(need_subspace_in), - use_k_continuity(use_k_continuity_in) {}; + use_k_continuity(use_k_continuity_in){}; /// @brief solve function for pw /// @param pHamilt interface to hamilt @@ -57,7 +58,6 @@ class HSolverPW const double tpiba, const int nat); - protected: // diago caller void hamiltSolvePsiK(hamilt::Hamilt* hm, @@ -101,19 +101,18 @@ class HSolverPW void cal_smooth_ethr(const double& wk, const double* wg, const double& ethr, std::vector& ethrs); #ifdef USE_PAW - void paw_func_in_kloop(const int ik, - const double tpiba); + void paw_func_in_kloop(const int ik, const double tpiba); void call_paw_cell_set_currentk(const int ik); - void paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* pes,const double tpiba,const int nat); + void paw_func_after_kloop(psi::Psi& psi, elecstate::ElecState* pes, const double tpiba, const int nat); #endif // K-point continuity related members std::vector k_order; std::unordered_map k_parent; std::vector> kvecs_c; - + void build_k_neighbors(); void propagate_psi(psi::Psi& psi, const int from_ik, const int to_ik); }; diff --git a/source/source_hsolver/hsolver_pw_sdft.cpp b/source/source_hsolver/hsolver_pw_sdft.cpp index 3408284777..d416c9c8fe 100644 --- a/source/source_hsolver/hsolver_pw_sdft.cpp +++ b/source/source_hsolver/hsolver_pw_sdft.cpp @@ -1,11 +1,11 @@ #include "hsolver_pw_sdft.h" -#include "module_base/global_function.h" -#include "module_base/parallel_device.h" -#include "module_base/timer.h" -#include "module_base/tool_title.h" -#include "module_elecstate/module_charge/symmetry_rho.h" #include "module_elecstate/elecstate_tools.h" +#include "module_elecstate/module_charge/symmetry_rho.h" +#include "source_base/global_function.h" +#include "source_base/parallel_device.h" +#include "source_base/timer.h" +#include "source_base/tool_title.h" #include @@ -61,7 +61,7 @@ void HSolverPW_SDFT::solve(const UnitCell& ucell, #ifdef __MPI if (nbands > 0 && !PARAM.globalv.all_ks_run) { - Parallel_Common::bcast_dev(&psi(ik, 0, 0), npwx * nbands, BP_WORLD, &psi_cpu(ik, 0, 0)); + Parallel_Common::bcast_dev(&psi(ik, 0, 0), npwx * nbands, BP_WORLD, &psi_cpu(ik, 0, 0)); MPI_Bcast(&pes->ekb(ik, 0), nbands, MPI_DOUBLE, 0, BP_WORLD); } #endif @@ -90,14 +90,12 @@ void HSolverPW_SDFT::solve(const UnitCell& ucell, // calculate eband = \sum_{ik,ib} w(ik)f(ik,ib)e_{ikib}, demet = -TS elecstate::ElecStatePW* pes_pw = static_cast*>(pes); - elecstate::calEBand(pes_pw->ekb,pes_pw->wg,pes_pw->f_en); - if(!PARAM.globalv.all_ks_run) + elecstate::calEBand(pes_pw->ekb, pes_pw->wg, pes_pw->f_en); + if (!PARAM.globalv.all_ks_run) { pes->f_en.eband /= PARAM.inp.bndpar; } stoiter.sum_stoeband(stowf, pes_pw, pHamilt, wfc_basis); - - // for nscf, skip charge if (skip_charge) @@ -114,7 +112,7 @@ void HSolverPW_SDFT::solve(const UnitCell& ucell, pes_pw->psiToRho(psi); } // calculate stochastic rho - stoiter.cal_storho(ucell, stowf, pes_pw,wfc_basis); + stoiter.cal_storho(ucell, stowf, pes_pw, wfc_basis); // will do rho symmetry and energy calculation in esolver ModuleBase::timer::tick("HSolverPW_SDFT", "solve"); diff --git a/source/source_hsolver/kernels/bpcg_kernel_op.cpp b/source/source_hsolver/kernels/bpcg_kernel_op.cpp index afd4be384c..594381d783 100644 --- a/source/source_hsolver/kernels/bpcg_kernel_op.cpp +++ b/source/source_hsolver/kernels/bpcg_kernel_op.cpp @@ -1,7 +1,9 @@ #include "source_hsolver/kernels/bpcg_kernel_op.h" -#include "module_base/blas_connector.h" -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/parallel_reduce.h" + +#include "source_base/blas_connector.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/parallel_reduce.h" + #include namespace hsolver { @@ -111,7 +113,12 @@ template struct apply_eigenvalues_op { using Real = typename GetTypeReal::type; - void operator()(const int& nbase, const int& nbase_x, const int& notconv, T* result, const T* vectors, const Real* eigenvalues) + void operator()(const int& nbase, + const int& nbase_x, + const int& notconv, + T* result, + const T* vectors, + const Real* eigenvalues) { for (int m = 0; m < notconv; m++) { @@ -124,14 +131,15 @@ struct apply_eigenvalues_op }; template -struct precondition_op { +struct precondition_op +{ using Real = typename GetTypeReal::type; void operator()(const int& dim, - T* psi_iter, - const int& nbase, - const int& notconv, - const Real* precondition, - const Real* eigenvalues) + T* psi_iter, + const int& nbase, + const int& notconv, + const Real* precondition, + const Real* eigenvalues) { std::vector pre(dim, 0.0); for (int m = 0; m < notconv; m++) @@ -141,42 +149,41 @@ struct precondition_op { Real x = std::abs(precondition[i] - eigenvalues[m]); pre[i] = 0.5 * (1.0 + x + sqrt(1 + (x - 1.0) * (x - 1.0))); } - ModuleBase::vector_div_vector_op()( - dim, - psi_iter + (nbase + m) * dim, - psi_iter + (nbase + m) * dim, - pre.data()); + ModuleBase::vector_div_vector_op()(dim, + psi_iter + (nbase + m) * dim, + psi_iter + (nbase + m) * dim, + pre.data()); } } }; template -struct normalize_op { +struct normalize_op +{ void operator()(const int& dim, - T* psi_iter, - const int& nbase, - const int& notconv, - typename GetTypeReal::type* psi_norm) + T* psi_iter, + const int& nbase, + const int& notconv, + typename GetTypeReal::type* psi_norm) { using Real = typename GetTypeReal::type; for (int m = 0; m < notconv; m++) { // Calculate norm using dot_real_op - Real psi_m_norm = ModuleBase::dot_real_op()( - dim, - psi_iter + (nbase + m) * dim, - psi_iter + (nbase + m) * dim, - true); + Real psi_m_norm = ModuleBase::dot_real_op()(dim, + psi_iter + (nbase + m) * dim, + psi_iter + (nbase + m) * dim, + true); assert(psi_m_norm > 0.0); psi_m_norm = sqrt(psi_m_norm); // Normalize using vector_div_constant_op - ModuleBase::vector_div_constant_op()( - dim, - psi_iter + (nbase + m) * dim, - psi_iter + (nbase + m) * dim, - psi_m_norm); - if (psi_norm) { + ModuleBase::vector_div_constant_op()(dim, + psi_iter + (nbase + m) * dim, + psi_iter + (nbase + m) * dim, + psi_m_norm); + if (psi_norm) + { psi_norm[m] = psi_m_norm; } } diff --git a/source/source_hsolver/kernels/bpcg_kernel_op.h b/source/source_hsolver/kernels/bpcg_kernel_op.h index 31afb74caa..4531b6bc65 100644 --- a/source/source_hsolver/kernels/bpcg_kernel_op.h +++ b/source/source_hsolver/kernels/bpcg_kernel_op.h @@ -1,7 +1,7 @@ #ifndef MODULE_HSOLVER_BPCG_KERNEL_H #define MODULE_HSOLVER_BPCG_KERNEL_H -#include "module_base/macros.h" -#include "module_base/module_device/types.h" +#include "source_base/macros.h" +#include "source_base/module_device/types.h" namespace hsolver { @@ -63,84 +63,93 @@ template struct apply_eigenvalues_op { using Real = typename GetTypeReal::type; - void operator()(const int& nbase, - const int& nbase_x, - const int& notconv, - T* result, - const T* vectors, + void operator()(const int& nbase, + const int& nbase_x, + const int& notconv, + T* result, + const T* vectors, const Real* eigenvalues); }; template -struct precondition_op { +struct precondition_op +{ using Real = typename GetTypeReal::type; void operator()(const int& dim, - T* psi_iter, - const int& nbase, - const int& notconv, - const Real* precondition, - const Real* eigenvalues); + T* psi_iter, + const int& nbase, + const int& notconv, + const Real* precondition, + const Real* eigenvalues); }; template -struct normalize_op { +struct normalize_op +{ using Real = typename GetTypeReal::type; - void operator()(const int& dim, - T* psi_iter, - const int& nbase, - const int& notconv, - Real* psi_norm = nullptr); + void operator()(const int& dim, T* psi_iter, const int& nbase, const int& notconv, Real* psi_norm = nullptr); }; #if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM template -struct line_minimize_with_block_op { - using Real = typename GetTypeReal::type; - void operator()(T *grad_out, T *hgrad_out, T *psi_out, T *hpsi_out, - const int &n_basis, const int &n_basis_max, - const int &n_band); +struct line_minimize_with_block_op +{ + using Real = typename GetTypeReal::type; + void operator()(T* grad_out, + T* hgrad_out, + T* psi_out, + T* hpsi_out, + const int& n_basis, + const int& n_basis_max, + const int& n_band); }; template -struct calc_grad_with_block_op { - using Real = typename GetTypeReal::type; - void operator()(const Real *prec_in, Real *err_out, Real *beta_out, - T *psi_out, T *hpsi_out, T *grad_out, T *grad_old_out, - const int &n_basis, const int &n_basis_max, - const int &n_band); +struct calc_grad_with_block_op +{ + using Real = typename GetTypeReal::type; + void operator()(const Real* prec_in, + Real* err_out, + Real* beta_out, + T* psi_out, + T* hpsi_out, + T* grad_out, + T* grad_old_out, + const int& n_basis, + const int& n_basis_max, + const int& n_band); }; template -struct apply_eigenvalues_op { - using Real = typename GetTypeReal::type; - void operator()(const int& nbase, - const int& nbase_x, - const int& notconv, - T* result, - const T* vectors, - const Real* eigenvalues); +struct apply_eigenvalues_op +{ + using Real = typename GetTypeReal::type; + void operator()(const int& nbase, + const int& nbase_x, + const int& notconv, + T* result, + const T* vectors, + const Real* eigenvalues); }; template -struct precondition_op { - using Real = typename GetTypeReal::type; - void operator()(const int& dim, - T* psi_iter, - const int& nbase, - const int& notconv, - const Real* precondition, - const Real* eigenvalues); +struct precondition_op +{ + using Real = typename GetTypeReal::type; + void operator()(const int& dim, + T* psi_iter, + const int& nbase, + const int& notconv, + const Real* precondition, + const Real* eigenvalues); }; template -struct normalize_op { - using Real = typename GetTypeReal::type; - void operator()(const int& dim, - T* psi_iter, - const int& nbase, - const int& notconv, - Real* psi_norm = nullptr); +struct normalize_op +{ + using Real = typename GetTypeReal::type; + void operator()(const int& dim, T* psi_iter, const int& nbase, const int& notconv, Real* psi_norm = nullptr); }; #endif diff --git a/source/source_hsolver/kernels/cuda/bpcg_kernel_op.cu b/source/source_hsolver/kernels/cuda/bpcg_kernel_op.cu index 5636326093..700e9ab642 100644 --- a/source/source_hsolver/kernels/cuda/bpcg_kernel_op.cu +++ b/source/source_hsolver/kernels/cuda/bpcg_kernel_op.cu @@ -1,4 +1,4 @@ -#include "module_base/kernels/math_kernel_op.h" +#include "source_base/kernels/math_kernel_op.h" #include "source_hsolver/kernels/bpcg_kernel_op.h" #include @@ -9,16 +9,15 @@ const int warp_size = 32; const int thread_per_block = 256; template -__global__ void line_minimize_with_block( - thrust::complex* grad, - thrust::complex* hgrad, - thrust::complex* psi, - thrust::complex* hpsi, - const int n_basis, - const int n_basis_max) +__global__ void line_minimize_with_block(thrust::complex* grad, + thrust::complex* hgrad, + thrust::complex* psi, + thrust::complex* hpsi, + const int n_basis, + const int n_basis_max) { int band_idx = blockIdx.x; // band_idx - int tid = threadIdx.x; // basis_idx + int tid = threadIdx.x; // basis_idx int item = 0; Real epsilo_0 = 0.0, epsilo_1 = 0.0, epsilo_2 = 0.0; Real theta = 0.0, cos_theta = 0.0, sin_theta = 0.0; @@ -26,14 +25,17 @@ __global__ void line_minimize_with_block( data[tid] = 0; - for (int basis_idx = tid; basis_idx < n_basis; basis_idx += thread_per_block) { + for (int basis_idx = tid; basis_idx < n_basis; basis_idx += thread_per_block) + { item = band_idx * n_basis_max + basis_idx; data[tid] += (grad[item] * thrust::conj(grad[item])).real(); } __syncthreads(); // just do some parallel reduction in shared memory - for (int ii = thread_per_block >> 1; ii > warp_size; ii >>= 1) { - if (tid < ii) { + for (int ii = thread_per_block >> 1; ii > warp_size; ii >>= 1) + { + if (tid < ii) + { data[tid] += data[tid + ii]; } __syncthreads(); @@ -42,13 +44,20 @@ __global__ void line_minimize_with_block( // For threads in the same warp, it is better that they process the same work // Also, __syncwarp() should be used instead of __syncthreads() // Therefore we unroll the loop and ensure that the threads does the same work - if (tid < warp_size) { - data[tid] += data[tid + 32]; __syncwarp(); - data[tid] += data[tid + 16]; __syncwarp(); - data[tid] += data[tid + 8]; __syncwarp(); - data[tid] += data[tid + 4]; __syncwarp(); - data[tid] += data[tid + 2]; __syncwarp(); - data[tid] += data[tid + 1]; __syncwarp(); + if (tid < warp_size) + { + data[tid] += data[tid + 32]; + __syncwarp(); + data[tid] += data[tid + 16]; + __syncwarp(); + data[tid] += data[tid + 8]; + __syncwarp(); + data[tid] += data[tid + 4]; + __syncwarp(); + data[tid] += data[tid + 2]; + __syncwarp(); + data[tid] += data[tid + 1]; + __syncwarp(); } __syncthreads(); @@ -59,7 +68,8 @@ __global__ void line_minimize_with_block( data[tid] = 0; data[thread_per_block + tid] = 0; data[2 * thread_per_block + tid] = 0; - for (int basis_idx = tid; basis_idx < n_basis; basis_idx += thread_per_block) { + for (int basis_idx = tid; basis_idx < n_basis; basis_idx += thread_per_block) + { item = band_idx * n_basis_max + basis_idx; grad[item] *= norm; hgrad[item] *= norm; @@ -70,63 +80,84 @@ __global__ void line_minimize_with_block( __syncthreads(); // just do some parallel reduction in shared memory - for (int ii = thread_per_block >> 1; ii > warp_size; ii >>= 1) { - if (tid < ii) { + for (int ii = thread_per_block >> 1; ii > warp_size; ii >>= 1) + { + if (tid < ii) + { data[tid] += data[tid + ii]; data[thread_per_block + tid] += data[thread_per_block + tid + ii]; data[2 * thread_per_block + tid] += data[2 * thread_per_block + tid + ii]; } __syncthreads(); } - if (tid < warp_size) { - data[tid] += data[tid + 32]; __syncwarp(); - data[tid] += data[tid + 16]; __syncwarp(); - data[tid] += data[tid + 8]; __syncwarp(); - data[tid] += data[tid + 4]; __syncwarp(); - data[tid] += data[tid + 2]; __syncwarp(); - data[tid] += data[tid + 1]; __syncwarp(); - data[thread_per_block + tid] += data[thread_per_block + tid + 32]; __syncwarp(); - data[thread_per_block + tid] += data[thread_per_block + tid + 16]; __syncwarp(); - data[thread_per_block + tid] += data[thread_per_block + tid + 8]; __syncwarp(); - data[thread_per_block + tid] += data[thread_per_block + tid + 4]; __syncwarp(); - data[thread_per_block + tid] += data[thread_per_block + tid + 2]; __syncwarp(); - data[thread_per_block + tid] += data[thread_per_block + tid + 1]; __syncwarp(); - data[2 * thread_per_block + tid] += data[2 * thread_per_block + tid + 32]; __syncwarp(); - data[2 * thread_per_block + tid] += data[2 * thread_per_block + tid + 16]; __syncwarp(); - data[2 * thread_per_block + tid] += data[2 * thread_per_block + tid + 8]; __syncwarp(); - data[2 * thread_per_block + tid] += data[2 * thread_per_block + tid + 4]; __syncwarp(); - data[2 * thread_per_block + tid] += data[2 * thread_per_block + tid + 2]; __syncwarp(); - data[2 * thread_per_block + tid] += data[2 * thread_per_block + tid + 1]; __syncwarp(); + if (tid < warp_size) + { + data[tid] += data[tid + 32]; + __syncwarp(); + data[tid] += data[tid + 16]; + __syncwarp(); + data[tid] += data[tid + 8]; + __syncwarp(); + data[tid] += data[tid + 4]; + __syncwarp(); + data[tid] += data[tid + 2]; + __syncwarp(); + data[tid] += data[tid + 1]; + __syncwarp(); + data[thread_per_block + tid] += data[thread_per_block + tid + 32]; + __syncwarp(); + data[thread_per_block + tid] += data[thread_per_block + tid + 16]; + __syncwarp(); + data[thread_per_block + tid] += data[thread_per_block + tid + 8]; + __syncwarp(); + data[thread_per_block + tid] += data[thread_per_block + tid + 4]; + __syncwarp(); + data[thread_per_block + tid] += data[thread_per_block + tid + 2]; + __syncwarp(); + data[thread_per_block + tid] += data[thread_per_block + tid + 1]; + __syncwarp(); + data[2 * thread_per_block + tid] += data[2 * thread_per_block + tid + 32]; + __syncwarp(); + data[2 * thread_per_block + tid] += data[2 * thread_per_block + tid + 16]; + __syncwarp(); + data[2 * thread_per_block + tid] += data[2 * thread_per_block + tid + 8]; + __syncwarp(); + data[2 * thread_per_block + tid] += data[2 * thread_per_block + tid + 4]; + __syncwarp(); + data[2 * thread_per_block + tid] += data[2 * thread_per_block + tid + 2]; + __syncwarp(); + data[2 * thread_per_block + tid] += data[2 * thread_per_block + tid + 1]; + __syncwarp(); } __syncthreads(); epsilo_0 = data[0]; epsilo_1 = data[thread_per_block]; epsilo_2 = data[2 * thread_per_block]; - theta = 0.5 * abs(atan(2 * epsilo_1/(epsilo_0 - epsilo_2))); + theta = 0.5 * abs(atan(2 * epsilo_1 / (epsilo_0 - epsilo_2))); cos_theta = cos(theta); sin_theta = sin(theta); - for (int basis_idx = tid; basis_idx < n_basis; basis_idx += thread_per_block) { + for (int basis_idx = tid; basis_idx < n_basis; basis_idx += thread_per_block) + { item = band_idx * n_basis_max + basis_idx; - psi [item] = psi [item] * cos_theta + grad [item] * sin_theta; + psi[item] = psi[item] * cos_theta + grad[item] * sin_theta; hpsi[item] = hpsi[item] * cos_theta + hgrad[item] * sin_theta; } } template -__global__ void calc_grad_with_block( - const Real* prec, - Real* err, - Real* beta, - thrust::complex* psi, - thrust::complex* hpsi, - thrust::complex* grad, - thrust::complex* grad_old, - const int n_basis, - const int n_basis_max) +__global__ void calc_grad_with_block(const Real* prec, + Real* err, + Real* beta, + thrust::complex* psi, + thrust::complex* hpsi, + thrust::complex* grad, + thrust::complex* grad_old, + const int n_basis, + const int n_basis_max) { int band_idx = blockIdx.x; // band_idx - int tid = threadIdx.x; // basis_idx + int tid = threadIdx.x; // basis_idx int item = 0; Real err_st = 0.0; Real beta_st = 0.0; @@ -138,26 +169,36 @@ __global__ void calc_grad_with_block( // Init shared memory data[tid] = 0; - for (int basis_idx = tid; basis_idx < n_basis; basis_idx += thread_per_block) { + for (int basis_idx = tid; basis_idx < n_basis; basis_idx += thread_per_block) + { item = band_idx * n_basis_max + basis_idx; data[tid] += (psi[item] * thrust::conj(psi[item])).real(); } __syncthreads(); // just do some parallel reduction in shared memory - for (int ii = thread_per_block >> 1; ii > warp_size; ii >>= 1) { - if (tid < ii) { + for (int ii = thread_per_block >> 1; ii > warp_size; ii >>= 1) + { + if (tid < ii) + { data[tid] += data[tid + ii]; } __syncthreads(); } - if (tid < warp_size) { - data[tid] += data[tid + 32]; __syncwarp(); - data[tid] += data[tid + 16]; __syncwarp(); - data[tid] += data[tid + 8]; __syncwarp(); - data[tid] += data[tid + 4]; __syncwarp(); - data[tid] += data[tid + 2]; __syncwarp(); - data[tid] += data[tid + 1]; __syncwarp(); + if (tid < warp_size) + { + data[tid] += data[tid + 32]; + __syncwarp(); + data[tid] += data[tid + 16]; + __syncwarp(); + data[tid] += data[tid + 8]; + __syncwarp(); + data[tid] += data[tid + 4]; + __syncwarp(); + data[tid] += data[tid + 2]; + __syncwarp(); + data[tid] += data[tid + 1]; + __syncwarp(); } __syncthreads(); @@ -166,7 +207,8 @@ __global__ void calc_grad_with_block( __syncthreads(); data[tid] = 0; - for (int basis_idx = tid; basis_idx < n_basis; basis_idx += thread_per_block) { + for (int basis_idx = tid; basis_idx < n_basis; basis_idx += thread_per_block) + { item = band_idx * n_basis_max + basis_idx; psi[item] *= norm; hpsi[item] *= norm; @@ -175,20 +217,29 @@ __global__ void calc_grad_with_block( __syncthreads(); // just do some parallel reduction in shared memory - for (int ii = thread_per_block >> 1; ii > warp_size; ii >>= 1) { - if (tid < ii) { + for (int ii = thread_per_block >> 1; ii > warp_size; ii >>= 1) + { + if (tid < ii) + { data[tid] += data[tid + ii]; } __syncthreads(); } - if (tid < warp_size) { - data[tid] += data[tid + 32]; __syncwarp(); - data[tid] += data[tid + 16]; __syncwarp(); - data[tid] += data[tid + 8]; __syncwarp(); - data[tid] += data[tid + 4]; __syncwarp(); - data[tid] += data[tid + 2]; __syncwarp(); - data[tid] += data[tid + 1]; __syncwarp(); + if (tid < warp_size) + { + data[tid] += data[tid + 32]; + __syncwarp(); + data[tid] += data[tid + 16]; + __syncwarp(); + data[tid] += data[tid + 8]; + __syncwarp(); + data[tid] += data[tid + 4]; + __syncwarp(); + data[tid] += data[tid + 2]; + __syncwarp(); + data[tid] += data[tid + 1]; + __syncwarp(); } __syncthreads(); @@ -197,7 +248,8 @@ __global__ void calc_grad_with_block( data[tid] = 0; data[thread_per_block + tid] = 0; - for (int basis_idx = tid; basis_idx < n_basis; basis_idx += thread_per_block) { + for (int basis_idx = tid; basis_idx < n_basis; basis_idx += thread_per_block) + { item = band_idx * n_basis_max + basis_idx; grad_1 = hpsi[item] - epsilo * psi[item]; grad_2 = thrust::norm(grad_1); @@ -207,75 +259,92 @@ __global__ void calc_grad_with_block( __syncthreads(); // just do some parallel reduction in shared memory - for (int ii = thread_per_block >> 1; ii > warp_size; ii >>= 1) { - if (tid < ii) { + for (int ii = thread_per_block >> 1; ii > warp_size; ii >>= 1) + { + if (tid < ii) + { data[tid] += data[tid + ii]; data[thread_per_block + tid] += data[thread_per_block + tid + ii]; } __syncthreads(); } - if (tid < warp_size) { - data[tid] += data[tid + 32]; __syncwarp(); - data[tid] += data[tid + 16]; __syncwarp(); - data[tid] += data[tid + 8]; __syncwarp(); - data[tid] += data[tid + 4]; __syncwarp(); - data[tid] += data[tid + 2]; __syncwarp(); - data[tid] += data[tid + 1]; __syncwarp(); - data[thread_per_block + tid] += data[thread_per_block + tid + 32]; __syncwarp(); - data[thread_per_block + tid] += data[thread_per_block + tid + 16]; __syncwarp(); - data[thread_per_block + tid] += data[thread_per_block + tid + 8]; __syncwarp(); - data[thread_per_block + tid] += data[thread_per_block + tid + 4]; __syncwarp(); - data[thread_per_block + tid] += data[thread_per_block + tid + 2]; __syncwarp(); - data[thread_per_block + tid] += data[thread_per_block + tid + 1]; __syncwarp(); + if (tid < warp_size) + { + data[tid] += data[tid + 32]; + __syncwarp(); + data[tid] += data[tid + 16]; + __syncwarp(); + data[tid] += data[tid + 8]; + __syncwarp(); + data[tid] += data[tid + 4]; + __syncwarp(); + data[tid] += data[tid + 2]; + __syncwarp(); + data[tid] += data[tid + 1]; + __syncwarp(); + data[thread_per_block + tid] += data[thread_per_block + tid + 32]; + __syncwarp(); + data[thread_per_block + tid] += data[thread_per_block + tid + 16]; + __syncwarp(); + data[thread_per_block + tid] += data[thread_per_block + tid + 8]; + __syncwarp(); + data[thread_per_block + tid] += data[thread_per_block + tid + 4]; + __syncwarp(); + data[thread_per_block + tid] += data[thread_per_block + tid + 2]; + __syncwarp(); + data[thread_per_block + tid] += data[thread_per_block + tid + 1]; + __syncwarp(); } __syncthreads(); err_st = data[0]; beta_st = data[thread_per_block]; - for (int basis_idx = tid; basis_idx < n_basis; basis_idx += thread_per_block) { + for (int basis_idx = tid; basis_idx < n_basis; basis_idx += thread_per_block) + { item = band_idx * n_basis_max + basis_idx; grad_1 = hpsi[item] - epsilo * psi[item]; grad[item] = -grad_1 / prec[basis_idx] + beta_st / beta[band_idx] * grad_old[item]; } __syncthreads(); - if (tid == 0) { + if (tid == 0) + { beta[band_idx] = beta_st; err[band_idx] = sqrt(err_st); } } template -__global__ void apply_eigenvalues_kernel( - const thrust::complex* vectors, - thrust::complex* result, - const Real* eigenvalues, - const int nbase, - const int nbase_x, - const int notconv) +__global__ void apply_eigenvalues_kernel(const thrust::complex* vectors, + thrust::complex* result, + const Real* eigenvalues, + const int nbase, + const int nbase_x, + const int notconv) { int m = blockIdx.x; int idx = threadIdx.x + blockIdx.y * blockDim.x; - - if (m < notconv && idx < nbase) { + + if (m < notconv && idx < nbase) + { result[m * nbase_x + idx] = eigenvalues[m] * vectors[m * nbase_x + idx]; } } template -__global__ void precondition_kernel( - thrust::complex* psi_iter, - const Real* precondition, - const Real* eigenvalues, - const int dim, - const int nbase, - const int notconv) +__global__ void precondition_kernel(thrust::complex* psi_iter, + const Real* precondition, + const Real* eigenvalues, + const int dim, + const int nbase, + const int notconv) { int m = blockIdx.x; int i = threadIdx.x + blockIdx.y * blockDim.x; - - if (m < notconv && i < dim) { + + if (m < notconv && i < dim) + { Real x = abs(precondition[i] - eigenvalues[m]); Real pre = 0.5 * (1.0 + x + sqrt(1 + (x - 1.0) * (x - 1.0))); psi_iter[(nbase + m) * dim + i] = psi_iter[(nbase + m) * dim + i] / pre; @@ -283,55 +352,66 @@ __global__ void precondition_kernel( } template -__global__ void normalize_kernel( - thrust::complex* psi_iter, - Real* psi_norm, - const int dim, - const int nbase, - const int notconv) +__global__ void normalize_kernel(thrust::complex* psi_iter, + Real* psi_norm, + const int dim, + const int nbase, + const int notconv) { int m = blockIdx.x; int tid = threadIdx.x; __shared__ Real sum[thread_per_block]; - + sum[tid] = 0.0; - + // Calculate the sum for normalization - for (int i = tid; i < dim; i += thread_per_block) { + for (int i = tid; i < dim; i += thread_per_block) + { auto val = psi_iter[(nbase + m) * dim + i]; sum[tid] += (val * thrust::conj(val)).real(); } - + __syncthreads(); - + // Parallel reduction in shared memory - for (int s = thread_per_block/2; s > warp_size; s >>= 1) { - if (tid < s) { + for (int s = thread_per_block / 2; s > warp_size; s >>= 1) + { + if (tid < s) + { sum[tid] += sum[tid + s]; } __syncthreads(); } - - if (tid < warp_size) { - sum[tid] += sum[tid + 32]; __syncwarp(); - sum[tid] += sum[tid + 16]; __syncwarp(); - sum[tid] += sum[tid + 8]; __syncwarp(); - sum[tid] += sum[tid + 4]; __syncwarp(); - sum[tid] += sum[tid + 2]; __syncwarp(); - sum[tid] += sum[tid + 1]; __syncwarp(); + + if (tid < warp_size) + { + sum[tid] += sum[tid + 32]; + __syncwarp(); + sum[tid] += sum[tid + 16]; + __syncwarp(); + sum[tid] += sum[tid + 8]; + __syncwarp(); + sum[tid] += sum[tid + 4]; + __syncwarp(); + sum[tid] += sum[tid + 2]; + __syncwarp(); + sum[tid] += sum[tid + 1]; + __syncwarp(); } - + __syncthreads(); - + Real norm = sqrt(sum[0]); - + // Normalize the vector - for (int i = tid; i < dim; i += thread_per_block) { + for (int i = tid; i < dim; i += thread_per_block) + { psi_iter[(nbase + m) * dim + i] /= norm; } - + // Store the norm if needed - if (tid == 0 && psi_norm != nullptr) { + if (tid == 0 && psi_norm != nullptr) + { psi_norm[m] = norm; } } @@ -350,9 +430,7 @@ void line_minimize_with_block_op::operator()(T* grad auto C = reinterpret_cast*>(psi_out); auto D = reinterpret_cast*>(hpsi_out); - line_minimize_with_block<<>>( - A, B, C, D, - n_basis, n_basis_max); + line_minimize_with_block<<>>(A, B, C, D, n_basis, n_basis_max); cudaCheckOnDebug(); } @@ -374,69 +452,65 @@ void calc_grad_with_block_op::operator()(const Real* auto C = reinterpret_cast*>(grad_out); auto D = reinterpret_cast*>(grad_old_out); - calc_grad_with_block<<>>( - prec_in, err_out, beta_out, - A, B, C, D, - n_basis, n_basis_max); + calc_grad_with_block + <<>>(prec_in, err_out, beta_out, A, B, C, D, n_basis, n_basis_max); cudaCheckOnDebug(); } template void apply_eigenvalues_op::operator()(const int& nbase, - const int& nbase_x, - const int& notconv, - T* result, - const T* vectors, - const Real* eigenvalues) + const int& nbase_x, + const int& notconv, + T* result, + const T* vectors, + const Real* eigenvalues) { const int threads_per_block = 256; const int blocks_per_grid_y = (nbase + threads_per_block - 1) / threads_per_block; - + dim3 grid(notconv, blocks_per_grid_y); - + auto vec_complex = reinterpret_cast*>(vectors); auto res_complex = reinterpret_cast*>(result); - - apply_eigenvalues_kernel<<>>( - vec_complex, res_complex, eigenvalues, nbase, nbase_x, notconv); - + + apply_eigenvalues_kernel + <<>>(vec_complex, res_complex, eigenvalues, nbase, nbase_x, notconv); + cudaCheckOnDebug(); } template void precondition_op::operator()(const int& dim, - T* psi_iter, - const int& nbase, - const int& notconv, - const Real* precondition, - const Real* eigenvalues) + T* psi_iter, + const int& nbase, + const int& notconv, + const Real* precondition, + const Real* eigenvalues) { const int threads_per_block = 256; const int blocks_per_grid_y = (dim + threads_per_block - 1) / threads_per_block; - + dim3 grid(notconv, blocks_per_grid_y); - + auto psi_complex = reinterpret_cast*>(psi_iter); - - precondition_kernel<<>>( - psi_complex, precondition, eigenvalues, dim, nbase, notconv); - + + precondition_kernel<<>>(psi_complex, precondition, eigenvalues, dim, nbase, notconv); + cudaCheckOnDebug(); } template void normalize_op::operator()(const int& dim, - T* psi_iter, - const int& nbase, - const int& notconv, - Real* psi_norm) + T* psi_iter, + const int& nbase, + const int& notconv, + Real* psi_norm) { auto psi_complex = reinterpret_cast*>(psi_iter); - - normalize_kernel<<>>( - psi_complex, psi_norm, dim, nbase, notconv); - + + normalize_kernel<<>>(psi_complex, psi_norm, dim, nbase, notconv); + cudaCheckOnDebug(); } @@ -453,4 +527,4 @@ template struct precondition_op; template struct normalize_op, base_device::DEVICE_GPU>; template struct normalize_op, base_device::DEVICE_GPU>; template struct normalize_op; -} \ No newline at end of file +} // namespace hsolver \ No newline at end of file diff --git a/source/source_hsolver/kernels/cuda/diag_cusolvermp.cu b/source/source_hsolver/kernels/cuda/diag_cusolvermp.cu index 63f54147d7..3fec7e553d 100644 --- a/source/source_hsolver/kernels/cuda/diag_cusolvermp.cu +++ b/source/source_hsolver/kernels/cuda/diag_cusolvermp.cu @@ -1,7 +1,7 @@ #ifdef __CUSOLVERMP #include "diag_cusolvermp.cuh" #include "helper_cuda.h" -#include "module_base/global_variable.h" +#include "source_base/global_variable.h" #include @@ -9,11 +9,12 @@ extern "C" { #include "source_hsolver/genelpa/Cblacs.h" } -#include -#include #include "helper_cusolver.h" -#include "module_base/global_function.h" -#include "module_base/module_device/device.h" +#include "source_base/global_function.h" +#include "source_base/module_device/device.h" + +#include +#include static calError_t allgather(void* src_buf, void* recv_buf, size_t size, void* data, void** request) { MPI_Request req; @@ -114,26 +115,26 @@ Diag_CusolverMP_gvd::Diag_CusolverMP_gvd(const MPI_Comm mpi_comm, // So, when we use cusolvermp, we must ensure that the number of processes is equal to the number of GPUs. // In a sense, the MPI usage strategy of ABACUS must be subject to the cusolvermp. CUSOLVER_CHECK(cusolverMpCreateDeviceGrid(cusolverMpHandle, - &this->grid, - this->cusolverCalComm, - this->nprows, - this->npcols, - CUSOLVERMP_GRID_MAPPING_COL_MAJOR)); + &this->grid, + this->cusolverCalComm, + this->nprows, + this->npcols, + CUSOLVERMP_GRID_MAPPING_COL_MAJOR)); // 20240529 zhanghaochong // Actually, there should be three matrix descriptors, A matrix, B matrix, and output eigenvector matrix. // But in ABACUS the three matrices descriptors are the same. // So, I only create one matrix descriptor and use it for the three matrices. CUSOLVER_CHECK(cusolverMpCreateMatrixDesc(&this->desc_for_cusolvermp, - this->grid, - this->datatype, - nFull, - nFull, - mb, - nb, - rsrc, - csrc, - this->lda)); + this->grid, + this->datatype, + nFull, + nFull, + mb, + nb, + rsrc, + csrc, + this->lda)); } template @@ -147,46 +148,43 @@ Diag_CusolverMP_gvd::~Diag_CusolverMP_gvd() checkCudaErrors(cudaStreamDestroy(this->localStream)); } - template int Diag_CusolverMP_gvd::generalized_eigenvector(inputT* A, inputT* B, outputT* EigenValue, inputT* EigenVector) { - void *d_A = NULL; - void *d_B = NULL; - void *d_D = NULL; - void *d_Z = NULL; + void* d_A = NULL; + void* d_B = NULL; + void* d_D = NULL; + void* d_Z = NULL; checkCudaErrors(cudaMalloc((void**)&d_A, this->n_local * this->m_local * sizeof(inputT))); checkCudaErrors(cudaMalloc((void**)&d_B, this->n_local * this->m_local * sizeof(inputT))); checkCudaErrors(cudaMalloc((void**)&d_D, this->nFull * sizeof(outputT))); checkCudaErrors(cudaMalloc((void**)&d_Z, this->n_local * this->m_local * sizeof(inputT))); - checkCudaErrors( - cudaMemcpy(d_A, (void*)A, this->n_local * this->m_local * sizeof(inputT), cudaMemcpyHostToDevice)); - checkCudaErrors( - cudaMemcpy(d_B, (void*)B, this->n_local * this->m_local * sizeof(inputT), cudaMemcpyHostToDevice)); + checkCudaErrors(cudaMemcpy(d_A, (void*)A, this->n_local * this->m_local * sizeof(inputT), cudaMemcpyHostToDevice)); + checkCudaErrors(cudaMemcpy(d_B, (void*)B, this->n_local * this->m_local * sizeof(inputT), cudaMemcpyHostToDevice)); CAL_CHECK(cal_stream_sync(this->cusolverCalComm, this->localStream)); size_t sygvdWorkspaceInBytesOnDevice = 0; size_t sygvdWorkspaceInBytesOnHost = 0; CUSOLVER_CHECK(cusolverMpSygvd_bufferSize(cusolverMpHandle, - CUSOLVER_EIG_TYPE_1, - CUSOLVER_EIG_MODE_VECTOR, - CUBLAS_FILL_MODE_LOWER, - this->nFull, - this->matrix_i, - this->matrix_j, - this->desc_for_cusolvermp, - this->matrix_i, - this->matrix_j, - this->desc_for_cusolvermp, - this->matrix_i, - this->matrix_j, - this->desc_for_cusolvermp, - this->datatype, - &sygvdWorkspaceInBytesOnDevice, - &sygvdWorkspaceInBytesOnHost)); + CUSOLVER_EIG_TYPE_1, + CUSOLVER_EIG_MODE_VECTOR, + CUBLAS_FILL_MODE_LOWER, + this->nFull, + this->matrix_i, + this->matrix_j, + this->desc_for_cusolvermp, + this->matrix_i, + this->matrix_j, + this->desc_for_cusolvermp, + this->matrix_i, + this->matrix_j, + this->desc_for_cusolvermp, + this->datatype, + &sygvdWorkspaceInBytesOnDevice, + &sygvdWorkspaceInBytesOnHost)); /* Distributed host workspace */ void* h_sygvdWork = NULL; @@ -205,29 +203,29 @@ int Diag_CusolverMP_gvd::generalized_eigenvector(inputT* A, inputT* B, o CAL_CHECK(cal_stream_sync(cusolverCalComm, localStream)); CUSOLVER_CHECK(cusolverMpSygvd(cusolverMpHandle, - CUSOLVER_EIG_TYPE_1, - CUSOLVER_EIG_MODE_VECTOR, - CUBLAS_FILL_MODE_LOWER, - this->nFull, - d_A, - this->matrix_i, - this->matrix_j, - this->desc_for_cusolvermp, - d_B, - this->matrix_i, - this->matrix_j, - this->desc_for_cusolvermp, - d_D, - d_Z, - this->matrix_i, - this->matrix_j, - this->desc_for_cusolvermp, - this->datatype, - d_sygvdWork, - sygvdWorkspaceInBytesOnDevice, - h_sygvdWork, - sygvdWorkspaceInBytesOnHost, - d_sygvdInfo)); + CUSOLVER_EIG_TYPE_1, + CUSOLVER_EIG_MODE_VECTOR, + CUBLAS_FILL_MODE_LOWER, + this->nFull, + d_A, + this->matrix_i, + this->matrix_j, + this->desc_for_cusolvermp, + d_B, + this->matrix_i, + this->matrix_j, + this->desc_for_cusolvermp, + d_D, + d_Z, + this->matrix_i, + this->matrix_j, + this->desc_for_cusolvermp, + this->datatype, + d_sygvdWork, + sygvdWorkspaceInBytesOnDevice, + h_sygvdWork, + sygvdWorkspaceInBytesOnHost, + d_sygvdInfo)); int h_sygvdInfo = 0; checkCudaErrors(cudaMemcpyAsync(&h_sygvdInfo, d_sygvdInfo, sizeof(int), cudaMemcpyDeviceToHost, this->localStream)); @@ -245,15 +243,13 @@ int Diag_CusolverMP_gvd::generalized_eigenvector(inputT* A, inputT* B, o free(h_sygvdWork); checkCudaErrors(cudaMemcpy((void*)EigenValue, d_D, this->nFull * sizeof(outputT), cudaMemcpyDeviceToHost)); - checkCudaErrors(cudaMemcpy((void*)EigenVector, - d_Z, - this->n_local * this->m_local * sizeof(inputT), - cudaMemcpyDeviceToHost)); + checkCudaErrors( + cudaMemcpy((void*)EigenVector, d_Z, this->n_local * this->m_local * sizeof(inputT), cudaMemcpyDeviceToHost)); // 20240529 zhanghaochong // I move the free operations from destructor to here. // Because I think it is more reasonable to free the memory in the function where it is allocated. // Destructor is used to release resources that allocated in the constructor. - // And currently, we construct and destruct the object in every SCF iteration. Maybe one day we + // And currently, we construct and destruct the object in every SCF iteration. Maybe one day we // will construct the object only once during the whole program life cycle. // In that case, allocate and free memory in compute function is more reasonable. checkCudaErrors(cudaFree(d_A)); diff --git a/source/source_hsolver/kernels/cuda/diag_cusolvermp.cuh b/source/source_hsolver/kernels/cuda/diag_cusolvermp.cuh index dd4b3e13a6..2381b0ea93 100644 --- a/source/source_hsolver/kernels/cuda/diag_cusolvermp.cuh +++ b/source/source_hsolver/kernels/cuda/diag_cusolvermp.cuh @@ -1,38 +1,31 @@ #pragma once #include "mpi.h" +#include "source_base/macros.h" +#include #include +#include #include #include -#include -#include -#include "module_base/macros.h" -template +template class Diag_CusolverMP_gvd { private: using outputT = typename GetTypeReal::type; public: - Diag_CusolverMP_gvd(const MPI_Comm comm, - const int narows, - const int nacols, - const int* desc); - + Diag_CusolverMP_gvd(const MPI_Comm comm, const int narows, const int nacols, const int* desc); // 20240530 zhanghaochong // Here eigen is the output rather than the input. Don't be confused by inputT. // Here inputT is the data type, the data type of EigenVector should be the same as // the data type of the input matrix. - int generalized_eigenvector(inputT* A, - inputT* B, - outputT* EigenValue, - inputT* EigenVector); + int generalized_eigenvector(inputT* A, inputT* B, outputT* EigenValue, inputT* EigenVector); ~Diag_CusolverMP_gvd(); void outputParameters(); - private: + private: int nFull; int cblacs_ctxt; int lda; @@ -66,4 +59,3 @@ class Diag_CusolverMP_gvd }; // 实现模板类的成员函数 - diff --git a/source/source_hsolver/kernels/dngvd_op.h b/source/source_hsolver/kernels/dngvd_op.h index d2dd442412..f1b1e18972 100644 --- a/source/source_hsolver/kernels/dngvd_op.h +++ b/source/source_hsolver/kernels/dngvd_op.h @@ -3,22 +3,33 @@ #ifndef MODULE_HSOLVER_DNGVD_H #define MODULE_HSOLVER_DNGVD_H -#include "module_base/macros.h" -#include "module_base/lapack_wrapper.h" -#include "module_base/parallel_reduce.h" -#include "module_base/module_device/types.h" +#include "source_base/lapack_wrapper.h" +#include "source_base/macros.h" +#include "source_base/module_device/types.h" +#include "source_base/parallel_reduce.h" namespace hsolver { -inline double get_real(const std::complex &x) { return x.real(); } - -inline float get_real(const std::complex &x) { return x.real(); } +inline double get_real(const std::complex& x) +{ + return x.real(); +} -inline double get_real(const double &x) { return x; } +inline float get_real(const std::complex& x) +{ + return x.real(); +} -inline float get_real(const float &x) { return x; } +inline double get_real(const double& x) +{ + return x; +} +inline float get_real(const float& x) +{ + return x; +} template struct dngvd_op diff --git a/source/source_hsolver/kernels/rocm/bpcg_kernel_op.hip.cu b/source/source_hsolver/kernels/rocm/bpcg_kernel_op.hip.cu index 70f6494d2d..a200ddeab4 100644 --- a/source/source_hsolver/kernels/rocm/bpcg_kernel_op.hip.cu +++ b/source/source_hsolver/kernels/rocm/bpcg_kernel_op.hip.cu @@ -1,4 +1,4 @@ -#include "module_base/kernels/math_kernel_op.h" +#include "source_base/kernels/math_kernel_op.h" #include "source_hsolver/kernels/bpcg_kernel_op.h" #include @@ -8,16 +8,15 @@ namespace hsolver { template -__global__ void line_minimize_with_block( - thrust::complex* grad, - thrust::complex* hgrad, - thrust::complex* psi, - thrust::complex* hpsi, - const int n_basis, - const int n_basis_max) +__global__ void line_minimize_with_block(thrust::complex* grad, + thrust::complex* hgrad, + thrust::complex* psi, + thrust::complex* hpsi, + const int n_basis, + const int n_basis_max) { int band_idx = blockIdx.x; // band_idx - int tid = threadIdx.x; // basis_idx + int tid = threadIdx.x; // basis_idx int item = 0; Real epsilo_0 = 0.0, epsilo_1 = 0.0, epsilo_2 = 0.0; Real theta = 0.0, cos_theta = 0.0, sin_theta = 0.0; @@ -25,14 +24,17 @@ __global__ void line_minimize_with_block( data[tid] = 0; - for (int basis_idx = tid; basis_idx < n_basis; basis_idx += THREAD_PER_BLOCK) { + for (int basis_idx = tid; basis_idx < n_basis; basis_idx += THREAD_PER_BLOCK) + { item = band_idx * n_basis_max + basis_idx; data[tid] += (grad[item] * thrust::conj(grad[item])).real(); } __syncthreads(); // just do some parallel reduction in shared memory - for (int ii = THREAD_PER_BLOCK >> 1; ii > 0; ii >>= 1) { - if (tid < ii) { + for (int ii = THREAD_PER_BLOCK >> 1; ii > 0; ii >>= 1) + { + if (tid < ii) + { data[tid] += data[tid + ii]; } __syncthreads(); @@ -44,7 +46,8 @@ __global__ void line_minimize_with_block( data[tid] = 0; data[THREAD_PER_BLOCK + tid] = 0; data[2 * THREAD_PER_BLOCK + tid] = 0; - for (int basis_idx = tid; basis_idx < n_basis; basis_idx += THREAD_PER_BLOCK) { + for (int basis_idx = tid; basis_idx < n_basis; basis_idx += THREAD_PER_BLOCK) + { item = band_idx * n_basis_max + basis_idx; grad[item] *= norm; hgrad[item] *= norm; @@ -55,8 +58,10 @@ __global__ void line_minimize_with_block( __syncthreads(); // just do some parallel reduction in shared memory - for (int ii = THREAD_PER_BLOCK >> 1; ii > 0; ii >>= 1) { - if (tid < ii) { + for (int ii = THREAD_PER_BLOCK >> 1; ii > 0; ii >>= 1) + { + if (tid < ii) + { data[tid] += data[tid + ii]; data[THREAD_PER_BLOCK + tid] += data[THREAD_PER_BLOCK + tid + ii]; data[2 * THREAD_PER_BLOCK + tid] += data[2 * THREAD_PER_BLOCK + tid + ii]; @@ -67,30 +72,30 @@ __global__ void line_minimize_with_block( epsilo_1 = data[THREAD_PER_BLOCK]; epsilo_2 = data[2 * THREAD_PER_BLOCK]; - theta = 0.5 * abs(atan(2 * epsilo_1/(epsilo_0 - epsilo_2))); + theta = 0.5 * abs(atan(2 * epsilo_1 / (epsilo_0 - epsilo_2))); cos_theta = cos(theta); sin_theta = sin(theta); - for (int basis_idx = tid; basis_idx < n_basis; basis_idx += THREAD_PER_BLOCK) { + for (int basis_idx = tid; basis_idx < n_basis; basis_idx += THREAD_PER_BLOCK) + { item = band_idx * n_basis_max + basis_idx; - psi [item] = psi [item] * cos_theta + grad [item] * sin_theta; + psi[item] = psi[item] * cos_theta + grad[item] * sin_theta; hpsi[item] = hpsi[item] * cos_theta + hgrad[item] * sin_theta; } } template -__global__ void calc_grad_with_block( - const Real* prec, - Real* err, - Real* beta, - thrust::complex* psi, - thrust::complex* hpsi, - thrust::complex* grad, - thrust::complex* grad_old, - const int n_basis, - const int n_basis_max) +__global__ void calc_grad_with_block(const Real* prec, + Real* err, + Real* beta, + thrust::complex* psi, + thrust::complex* hpsi, + thrust::complex* grad, + thrust::complex* grad_old, + const int n_basis, + const int n_basis_max) { int band_idx = blockIdx.x; // band_idx - int tid = threadIdx.x; // basis_idx + int tid = threadIdx.x; // basis_idx int item = 0; Real err_st = 0.0; Real beta_st = 0.0; @@ -102,14 +107,17 @@ __global__ void calc_grad_with_block( // Init shared memory data[tid] = 0; - for (int basis_idx = tid; basis_idx < n_basis; basis_idx += THREAD_PER_BLOCK) { + for (int basis_idx = tid; basis_idx < n_basis; basis_idx += THREAD_PER_BLOCK) + { item = band_idx * n_basis_max + basis_idx; data[tid] += (psi[item] * thrust::conj(psi[item])).real(); } __syncthreads(); // just do some parallel reduction in shared memory - for (int ii = THREAD_PER_BLOCK >> 1; ii > 0; ii >>= 1) { - if (tid < ii) { + for (int ii = THREAD_PER_BLOCK >> 1; ii > 0; ii >>= 1) + { + if (tid < ii) + { data[tid] += data[tid + ii]; } __syncthreads(); @@ -119,7 +127,8 @@ __global__ void calc_grad_with_block( __syncthreads(); data[tid] = 0; - for (int basis_idx = tid; basis_idx < n_basis; basis_idx += THREAD_PER_BLOCK) { + for (int basis_idx = tid; basis_idx < n_basis; basis_idx += THREAD_PER_BLOCK) + { item = band_idx * n_basis_max + basis_idx; psi[item] *= norm; hpsi[item] *= norm; @@ -128,8 +137,10 @@ __global__ void calc_grad_with_block( __syncthreads(); // just do some parallel reduction in shared memory - for (int ii = THREAD_PER_BLOCK >> 1; ii > 0; ii >>= 1) { - if (tid < ii) { + for (int ii = THREAD_PER_BLOCK >> 1; ii > 0; ii >>= 1) + { + if (tid < ii) + { data[tid] += data[tid + ii]; } __syncthreads(); @@ -139,7 +150,8 @@ __global__ void calc_grad_with_block( data[tid] = 0; data[THREAD_PER_BLOCK + tid] = 0; - for (int basis_idx = tid; basis_idx < n_basis; basis_idx += THREAD_PER_BLOCK) { + for (int basis_idx = tid; basis_idx < n_basis; basis_idx += THREAD_PER_BLOCK) + { item = band_idx * n_basis_max + basis_idx; grad_1 = hpsi[item] - epsilo * psi[item]; grad_2 = thrust::norm(grad_1); @@ -149,8 +161,10 @@ __global__ void calc_grad_with_block( __syncthreads(); // just do some parallel reduction in shared memory - for (int ii = THREAD_PER_BLOCK >> 1; ii > 0; ii >>= 1) { - if (tid < ii) { + for (int ii = THREAD_PER_BLOCK >> 1; ii > 0; ii >>= 1) + { + if (tid < ii) + { data[tid] += data[tid + ii]; data[THREAD_PER_BLOCK + tid] += data[THREAD_PER_BLOCK + tid + ii]; } @@ -158,49 +172,51 @@ __global__ void calc_grad_with_block( } err_st = data[0]; beta_st = data[THREAD_PER_BLOCK]; - for (int basis_idx = tid; basis_idx < n_basis; basis_idx += THREAD_PER_BLOCK) { + for (int basis_idx = tid; basis_idx < n_basis; basis_idx += THREAD_PER_BLOCK) + { item = band_idx * n_basis_max + basis_idx; grad_1 = hpsi[item] - epsilo * psi[item]; grad[item] = -grad_1 / prec[basis_idx] + beta_st / beta[band_idx] * grad_old[item]; } __syncthreads(); - if (tid == 0) { + if (tid == 0) + { beta[band_idx] = beta_st; err[band_idx] = sqrt(err_st); } } template -__global__ void apply_eigenvalues_kernel( - const thrust::complex* vectors, - thrust::complex* result, - const Real* eigenvalues, - const int nbase, - const int nbase_x, - const int notconv) +__global__ void apply_eigenvalues_kernel(const thrust::complex* vectors, + thrust::complex* result, + const Real* eigenvalues, + const int nbase, + const int nbase_x, + const int notconv) { int m = blockIdx.x; int idx = threadIdx.x + blockIdx.y * blockDim.x; - - if (m < notconv && idx < nbase) { + + if (m < notconv && idx < nbase) + { result[m * nbase_x + idx] = eigenvalues[m] * vectors[m * nbase_x + idx]; } } template -__global__ void precondition_kernel( - thrust::complex* psi_iter, - const Real* precondition, - const Real* eigenvalues, - const int dim, - const int nbase, - const int notconv) +__global__ void precondition_kernel(thrust::complex* psi_iter, + const Real* precondition, + const Real* eigenvalues, + const int dim, + const int nbase, + const int notconv) { int m = blockIdx.x; int i = threadIdx.x + blockIdx.y * blockDim.x; - - if (m < notconv && i < dim) { + + if (m < notconv && i < dim) + { Real x = abs(precondition[i] - eigenvalues[m]); Real pre = 0.5 * (1.0 + x + sqrt(1 + (x - 1.0) * (x - 1.0))); psi_iter[(nbase + m) * dim + i] = psi_iter[(nbase + m) * dim + i] / pre; @@ -208,44 +224,48 @@ __global__ void precondition_kernel( } template -__global__ void normalize_kernel( - thrust::complex* psi_iter, - Real* psi_norm, - const int dim, - const int nbase, - const int notconv) +__global__ void normalize_kernel(thrust::complex* psi_iter, + Real* psi_norm, + const int dim, + const int nbase, + const int notconv) { int m = blockIdx.x; int tid = threadIdx.x; __shared__ Real sum[THREAD_PER_BLOCK]; - + sum[tid] = 0.0; - + // Calculate the sum for normalization - for (int i = tid; i < dim; i += THREAD_PER_BLOCK) { + for (int i = tid; i < dim; i += THREAD_PER_BLOCK) + { auto val = psi_iter[(nbase + m) * dim + i]; sum[tid] += (val * thrust::conj(val)).real(); } - + __syncthreads(); - + // Parallel reduction in shared memory - for (int s = THREAD_PER_BLOCK/2; s > 0; s >>= 1) { - if (tid < s) { + for (int s = THREAD_PER_BLOCK / 2; s > 0; s >>= 1) + { + if (tid < s) + { sum[tid] += sum[tid + s]; } __syncthreads(); } - + Real norm = sqrt(sum[0]); - + // Normalize the vector - for (int i = tid; i < dim; i += THREAD_PER_BLOCK) { + for (int i = tid; i < dim; i += THREAD_PER_BLOCK) + { psi_iter[(nbase + m) * dim + i] /= norm; } - + // Store the norm if needed - if (tid == 0 && psi_norm != nullptr) { + if (tid == 0 && psi_norm != nullptr) + { psi_norm[m] = norm; } } @@ -264,9 +284,7 @@ void line_minimize_with_block_op::operator()(T* grad auto C = reinterpret_cast*>(psi_out); auto D = reinterpret_cast*>(hpsi_out); - line_minimize_with_block<<>>( - A, B, C, D, - n_basis, n_basis_max); + line_minimize_with_block<<>>(A, B, C, D, n_basis, n_basis_max); hipCheckOnDebug(); } @@ -288,69 +306,65 @@ void calc_grad_with_block_op::operator()(const Real* auto C = reinterpret_cast*>(grad_out); auto D = reinterpret_cast*>(grad_old_out); - calc_grad_with_block<<>>( - prec_in, err_out, beta_out, - A, B, C, D, - n_basis, n_basis_max); + calc_grad_with_block + <<>>(prec_in, err_out, beta_out, A, B, C, D, n_basis, n_basis_max); hipCheckOnDebug(); } template void apply_eigenvalues_op::operator()(const int& nbase, - const int& nbase_x, - const int& notconv, - T* result, - const T* vectors, - const Real* eigenvalues) + const int& nbase_x, + const int& notconv, + T* result, + const T* vectors, + const Real* eigenvalues) { const int threads_per_block = 256; const int blocks_per_grid_y = (nbase + threads_per_block - 1) / threads_per_block; - + dim3 grid(notconv, blocks_per_grid_y); - + auto vec_complex = reinterpret_cast*>(vectors); auto res_complex = reinterpret_cast*>(result); - - apply_eigenvalues_kernel<<>>( - vec_complex, res_complex, eigenvalues, nbase, nbase_x, notconv); - + + apply_eigenvalues_kernel + <<>>(vec_complex, res_complex, eigenvalues, nbase, nbase_x, notconv); + hipCheckOnDebug(); } template void precondition_op::operator()(const int& dim, - T* psi_iter, - const int& nbase, - const int& notconv, - const Real* precondition, - const Real* eigenvalues) + T* psi_iter, + const int& nbase, + const int& notconv, + const Real* precondition, + const Real* eigenvalues) { const int threads_per_block = 256; const int blocks_per_grid_y = (dim + threads_per_block - 1) / threads_per_block; - + dim3 grid(notconv, blocks_per_grid_y); - + auto psi_complex = reinterpret_cast*>(psi_iter); - - precondition_kernel<<>>( - psi_complex, precondition, eigenvalues, dim, nbase, notconv); - + + precondition_kernel<<>>(psi_complex, precondition, eigenvalues, dim, nbase, notconv); + hipCheckOnDebug(); } template void normalize_op::operator()(const int& dim, - T* psi_iter, - const int& nbase, - const int& notconv, - Real* psi_norm) + T* psi_iter, + const int& nbase, + const int& notconv, + Real* psi_norm) { auto psi_complex = reinterpret_cast*>(psi_iter); - - normalize_kernel<<>>( - psi_complex, psi_norm, dim, nbase, notconv); - + + normalize_kernel<<>>(psi_complex, psi_norm, dim, nbase, notconv); + hipCheckOnDebug(); } @@ -367,4 +381,4 @@ template struct precondition_op; template struct normalize_op, base_device::DEVICE_GPU>; template struct normalize_op, base_device::DEVICE_GPU>; template struct normalize_op; -} \ No newline at end of file +} // namespace hsolver \ No newline at end of file diff --git a/source/source_hsolver/kernels/test/math_dngvd_test.cpp b/source/source_hsolver/kernels/test/math_dngvd_test.cpp index 6cba4caf53..5ecf508e64 100644 --- a/source/source_hsolver/kernels/test/math_dngvd_test.cpp +++ b/source/source_hsolver/kernels/test/math_dngvd_test.cpp @@ -1,8 +1,8 @@ -#include "module_base/complexmatrix.h" -#include "module_base/lapack_connector.h" -#include "module_base/module_device/memory_op.h" +#include "source_base/complexmatrix.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/lapack_connector.h" +#include "source_base/module_device/memory_op.h" #include "source_hsolver/kernels/dngvd_op.h" -#include "module_base/kernels/math_kernel_op.h" #include #include @@ -87,44 +87,42 @@ class TestModuleHsolverMathDngvd : public ::testing::Test // prepare W & V in CPU in dngv_op std::vector W_dngv_op = {0.0, 0.0, 0.0, 0.0}; std::vector> matrix_V_dngv_op = {{0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}}; + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}}; // prepare W & V in CPU in dngvx_op std::vector W_DNGVX = {0.0, 0.0}; std::vector> matrix_V_DNGVX = {{0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}, - {0.0, 0.0}}; + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}, + {0.0, 0.0}}; }; - - #if __UT_USE_CUDA || __UT_USE_ROCM TEST_F(TestModuleHsolverMathDngvd, transpose_gpu) @@ -146,9 +144,9 @@ TEST_F(TestModuleHsolverMathDngvd, transpose_gpu) // run ModuleBase::createGpuBlasHandle(); ModuleBase::matrixTranspose_op, base_device::DEVICE_GPU>()(2, - 3, - device_transpose, - device_transpose); + 3, + device_transpose, + device_transpose); ModuleBase::destoryBLAShandle(); // copy transpose data from GPU to CPU diff --git a/source/source_hsolver/kernels/test/perf_math_kernel.cpp b/source/source_hsolver/kernels/test/perf_math_kernel.cpp index f88de52272..bd14a4a64c 100644 --- a/source/source_hsolver/kernels/test/perf_math_kernel.cpp +++ b/source/source_hsolver/kernels/test/perf_math_kernel.cpp @@ -1,21 +1,21 @@ -#include "module_base/blas_connector.h" -#include "module_base/constants.h" -#include "module_base/module_device/memory_op.h" -#include "module_base/kernels/math_kernel_op.h" +#include "source_base/blas_connector.h" +#include "source_base/constants.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/memory_op.h" -#include #include -#include +#include #include +#include #include -#include +#include /************************************************ -* performace test of class math_kernel_op -***********************************************/ + * performace test of class math_kernel_op + ***********************************************/ /** - * Tested function: + * Tested function: * - zdot_real_cpu_op * - vector_mul_real_op_cpu * - vector_mul_vector_op_cpu @@ -33,9 +33,9 @@ * - scal_gpu */ -class PerfModuleHsolverMathKernel : public benchmark::Fixture { - public: - +class PerfModuleHsolverMathKernel : public benchmark::Fixture +{ + public: // DEVICE SYMBOL const base_device::DEVICE_CPU* cpu_ctx = {}; @@ -50,24 +50,25 @@ class PerfModuleHsolverMathKernel : public benchmark::Fixture { double dconstant_a = 1.0; double dconstant_b = 1.0; - std::complex zconstant_a = {1.0,1.0}; + std::complex zconstant_a = {1.0, 1.0}; - #if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM - const base_device::DEVICE_GPU * gpu_ctx = {}; +#if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM + const base_device::DEVICE_GPU* gpu_ctx = {}; // from CPU to GPU - using synchronize_memory_op - = base_device::memory::synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_CPU>; + using synchronize_memory_op = base_device::memory:: + synchronize_memory_op, base_device::DEVICE_GPU, base_device::DEVICE_CPU>; // form GPU to CPU - using synchronize_memory_op_gpu - = base_device::memory::synchronize_memory_op, base_device::DEVICE_CPU, base_device::DEVICE_GPU>; + using synchronize_memory_op_gpu = base_device::memory:: + synchronize_memory_op, base_device::DEVICE_CPU, base_device::DEVICE_GPU>; using resize_memory_op = base_device::memory::resize_memory_op, base_device::DEVICE_GPU>; using delete_memory_op = base_device::memory::delete_memory_op, base_device::DEVICE_GPU>; using resize_memory_op_double = base_device::memory::resize_memory_op; using delete_memory_op_double = base_device::memory::delete_memory_op; - using synchronize_memory_op_double = base_device::memory::synchronize_memory_op; + using synchronize_memory_op_double + = base_device::memory::synchronize_memory_op; using set_memory_op = base_device::memory::set_memory_op, base_device::DEVICE_GPU>; using set_memory_op_double = base_device::memory::set_memory_op; @@ -78,9 +79,10 @@ class PerfModuleHsolverMathKernel : public benchmark::Fixture { double* test_dvector_a_gpu = nullptr; - #endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM +#endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM - void SetUp(const benchmark::State& state){ + void SetUp(const benchmark::State& state) + { dim_vector = state.range(0); // Generate vectors with different diminsions (1,10,100,...,1e6) // This should be complex vectors @@ -91,18 +93,21 @@ class PerfModuleHsolverMathKernel : public benchmark::Fixture { // The following is double vectors test_dvector_a = new double[dim_vector + 1]; - - for (int i=0;i{(double)rand()+(double)rand()/(RAND_MAX+1.0),(double)rand()+(double)rand()/(RAND_MAX+1.0)}; - test_zvector_b[i] = std::complex{(double)rand()+(double)rand()/(RAND_MAX+1.0),(double)rand()+(double)rand()/(RAND_MAX+1.0)}; - test_dvector_a[i] = (double)rand()+(double)rand()/(RAND_MAX+1.0); + test_zvector_a[i] = std::complex{(double)rand() + (double)rand() / (RAND_MAX + 1.0), + (double)rand() + (double)rand() / (RAND_MAX + 1.0)}; + test_zvector_b[i] = std::complex{(double)rand() + (double)rand() / (RAND_MAX + 1.0), + (double)rand() + (double)rand() / (RAND_MAX + 1.0)}; + test_dvector_a[i] = (double)rand() + (double)rand() / (RAND_MAX + 1.0); } - dconstant_a = (double)rand()+(double)rand()/(RAND_MAX+1.0); - dconstant_b = (double)rand()+(double)rand()/(RAND_MAX+1.0); + dconstant_a = (double)rand() + (double)rand() / (RAND_MAX + 1.0); + dconstant_b = (double)rand() + (double)rand() / (RAND_MAX + 1.0); - zconstant_a = std::complex{(double)rand()+(double)rand()/(RAND_MAX+1.0),(double)rand()+(double)rand()/(RAND_MAX+1.0)}; + zconstant_a = std::complex{(double)rand() + (double)rand() / (RAND_MAX + 1.0), + (double)rand() + (double)rand() / (RAND_MAX + 1.0)}; #if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM resize_memory_op()(test_zvector_a_gpu, dim_vector); @@ -116,10 +121,10 @@ class PerfModuleHsolverMathKernel : public benchmark::Fixture { ModuleBase::createGpuBlasHandle(); - #endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM } - void TearDown(const benchmark::State& state){ + void TearDown(const benchmark::State& state) + { delete[] test_zvector_a; delete[] test_zvector_b; delete[] result_zvector; @@ -129,16 +134,14 @@ class PerfModuleHsolverMathKernel : public benchmark::Fixture { #endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM } - // OPs need benchmark // CPU operator using zdot_real_cpu_op = ModuleBase::dot_real_op, base_device::DEVICE_CPU>; - + using vector_mul_real_op_cpu = ModuleBase::vector_mul_real_op, base_device::DEVICE_CPU>; using vector_mul_vector_op_cpu = ModuleBase::vector_mul_vector_op, base_device::DEVICE_CPU>; using vector_div_vector_op_cpu = ModuleBase::vector_div_vector_op, base_device::DEVICE_CPU>; - using vector_add_vector_op_cpu - = ModuleBase::vector_add_vector_op, base_device::DEVICE_CPU>; + using vector_add_vector_op_cpu = ModuleBase::vector_add_vector_op, base_device::DEVICE_CPU>; using axpy_op_cpu = ModuleBase::axpy_op, base_device::DEVICE_CPU>; using scal_op_cpu = ModuleBase::scal_op; using gemv_op_cpu = ModuleBase::gemv_op, base_device::DEVICE_CPU>; @@ -151,67 +154,102 @@ class PerfModuleHsolverMathKernel : public benchmark::Fixture { using vector_mul_real_op_gpu = ModuleBase::vector_mul_real_op, base_device::DEVICE_GPU>; using vector_mul_vector_op_gpu = ModuleBase::vector_mul_vector_op, base_device::DEVICE_GPU>; using vector_div_vector_op_gpu = ModuleBase::vector_div_vector_op, base_device::DEVICE_GPU>; - using vector_add_vector_op_gpu - = ModuleBase::vector_add_vector_op, base_device::DEVICE_GPU>; + using vector_add_vector_op_gpu = ModuleBase::vector_add_vector_op, base_device::DEVICE_GPU>; using axpy_op_gpu = ModuleBase::axpy_op, base_device::DEVICE_GPU>; using scal_op_gpu = ModuleBase::scal_op; #endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM }; - -BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_zdot_real_cpu_op)(benchmark::State& state) { - for (auto _ : state) { +BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_zdot_real_cpu_op)(benchmark::State& state) +{ + for (auto _: state) + { double result = zdot_real_cpu_op()(dim_vector, test_zvector_a, test_zvector_b, false); } } - -BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_mul_real_op_cpu)(benchmark::State& state) { - for (auto _ : state) { +BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_mul_real_op_cpu)(benchmark::State& state) +{ + for (auto _: state) + { vector_mul_real_op_cpu()(dim_vector, result_zvector, test_zvector_a, dconstant_a); } } -BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_mul_vector_op_cpu)(benchmark::State& state) { - for (auto _ : state) { +BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_mul_vector_op_cpu)(benchmark::State& state) +{ + for (auto _: state) + { vector_mul_vector_op_cpu()(dim_vector, result_zvector, test_zvector_a, test_dvector_a); } } -BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_div_vector_op_cpu)(benchmark::State& state) { - for (auto _ : state) { +BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_div_vector_op_cpu)(benchmark::State& state) +{ + for (auto _: state) + { vector_div_vector_op_cpu()(dim_vector, result_zvector, test_zvector_a, test_dvector_a); } } -BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_add_vector_op_cpu)(benchmark::State& state) { - for (auto _ : state) { - vector_add_vector_op_cpu()(dim_vector, result_zvector, test_zvector_a, dconstant_a ,test_zvector_b, dconstant_b); +BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_add_vector_op_cpu)(benchmark::State& state) +{ + for (auto _: state) + { + vector_add_vector_op_cpu()(dim_vector, + result_zvector, + test_zvector_a, + dconstant_a, + test_zvector_b, + dconstant_b); } } -BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_axpy_op_cpu)(benchmark::State& state) { - for (auto _ : state) { - axpy_op_cpu()(dim_vector, &zconstant_a, test_zvector_a, 1 ,test_zvector_b, 1); +BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_axpy_op_cpu)(benchmark::State& state) +{ + for (auto _: state) + { + axpy_op_cpu()(dim_vector, &zconstant_a, test_zvector_a, 1, test_zvector_b, 1); } } -BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_scal_op_cpu)(benchmark::State& state) { - for (auto _ : state) { +BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_scal_op_cpu)(benchmark::State& state) +{ + for (auto _: state) + { scal_op_cpu()(dim_vector, &zconstant_a, test_zvector_a, 1); } } - -BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_zdot_real_cpu_op)->RangeMultiplier(10)->Range(1,10e6)->Unit(benchmark::kMicrosecond); -BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_mul_real_op_cpu)->RangeMultiplier(10)->Range(1,10e6)->Unit(benchmark::kMicrosecond); -BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_mul_vector_op_cpu)->RangeMultiplier(10)->Range(1,10e6)->Unit(benchmark::kMicrosecond); -BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_div_vector_op_cpu)->RangeMultiplier(10)->Range(1,10e6)->Unit(benchmark::kMicrosecond); -BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_add_vector_op_cpu)->RangeMultiplier(10)->Range(1,10e6)->Unit(benchmark::kMicrosecond); -BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_axpy_op_cpu)->RangeMultiplier(10)->Range(1,10e6)->Unit(benchmark::kMicrosecond); -BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_scal_op_cpu)->RangeMultiplier(10)->Range(1,10e6)->Unit(benchmark::kMicrosecond); - +BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_zdot_real_cpu_op) + ->RangeMultiplier(10) + ->Range(1, 10e6) + ->Unit(benchmark::kMicrosecond); +BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_mul_real_op_cpu) + ->RangeMultiplier(10) + ->Range(1, 10e6) + ->Unit(benchmark::kMicrosecond); +BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_mul_vector_op_cpu) + ->RangeMultiplier(10) + ->Range(1, 10e6) + ->Unit(benchmark::kMicrosecond); +BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_div_vector_op_cpu) + ->RangeMultiplier(10) + ->Range(1, 10e6) + ->Unit(benchmark::kMicrosecond); +BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_add_vector_op_cpu) + ->RangeMultiplier(10) + ->Range(1, 10e6) + ->Unit(benchmark::kMicrosecond); +BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_axpy_op_cpu) + ->RangeMultiplier(10) + ->Range(1, 10e6) + ->Unit(benchmark::kMicrosecond); +BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_scal_op_cpu) + ->RangeMultiplier(10) + ->Range(1, 10e6) + ->Unit(benchmark::kMicrosecond); #if __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM @@ -230,60 +268,100 @@ BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_zdot_real_gpu_op)(benchmark:: } */ -BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_zdot_real_gpu_op)(benchmark::State& state) { - for (auto _ : state) { +BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_zdot_real_gpu_op)(benchmark::State& state) +{ + for (auto _: state) + { double result = zdot_real_gpu_op()(dim_vector, test_zvector_a_gpu, test_zvector_b_gpu, false); } } -BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_mul_real_op_gpu)(benchmark::State& state) { - for (auto _ : state) { +BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_mul_real_op_gpu)(benchmark::State& state) +{ + for (auto _: state) + { vector_mul_real_op_gpu()(dim_vector, result_zvector_gpu, test_zvector_a_gpu, dconstant_a); } } -BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_mul_vector_op_gpu)(benchmark::State& state) { - for (auto _ : state) { +BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_mul_vector_op_gpu)(benchmark::State& state) +{ + for (auto _: state) + { vector_mul_vector_op_gpu()(dim_vector, result_zvector_gpu, test_zvector_a_gpu, test_dvector_a_gpu); } } -BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_div_vector_op_gpu)(benchmark::State& state) { - for (auto _ : state) { +BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_div_vector_op_gpu)(benchmark::State& state) +{ + for (auto _: state) + { vector_div_vector_op_gpu()(dim_vector, result_zvector_gpu, test_zvector_a_gpu, test_dvector_a_gpu); } } -BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_add_vector_op_gpu)(benchmark::State& state) { - for (auto _ : state) { - vector_add_vector_op_gpu()(dim_vector, result_zvector_gpu, test_zvector_a_gpu, dconstant_a ,test_zvector_b_gpu, dconstant_b); +BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_vector_add_vector_op_gpu)(benchmark::State& state) +{ + for (auto _: state) + { + vector_add_vector_op_gpu()(dim_vector, + result_zvector_gpu, + test_zvector_a_gpu, + dconstant_a, + test_zvector_b_gpu, + dconstant_b); } } -BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_axpy_op_gpu)(benchmark::State& state) { - for (auto _ : state) { - axpy_op_gpu()(dim_vector, &zconstant_a, test_zvector_a_gpu, 1 ,test_zvector_b_gpu, 1); +BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_axpy_op_gpu)(benchmark::State& state) +{ + for (auto _: state) + { + axpy_op_gpu()(dim_vector, &zconstant_a, test_zvector_a_gpu, 1, test_zvector_b_gpu, 1); } } -BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_scal_op_gpu)(benchmark::State& state) { - for (auto _ : state) { +BENCHMARK_DEFINE_F(PerfModuleHsolverMathKernel, BM_scal_op_gpu)(benchmark::State& state) +{ + for (auto _: state) + { scal_op_gpu()(dim_vector, &zconstant_a, test_zvector_a_gpu, 1); } } // If you want to use manual timer, you can refer to this. -// BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_zdot_real_gpu_op)->RangeMultiplier(10)->Range(1,10e6)->UseManualTime()->Unit(benchmark::kMicrosecond); - -BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_zdot_real_gpu_op)->RangeMultiplier(10)->Range(1,10e6)->Unit(benchmark::kMicrosecond); -BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_mul_real_op_gpu)->RangeMultiplier(10)->Range(1,10e6)->Unit(benchmark::kMicrosecond); -BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_mul_vector_op_gpu)->RangeMultiplier(10)->Range(1,10e6)->Unit(benchmark::kMicrosecond); -BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_div_vector_op_gpu)->RangeMultiplier(10)->Range(1,10e6)->Unit(benchmark::kMicrosecond); -BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_add_vector_op_gpu)->RangeMultiplier(10)->Range(1,10e6)->Unit(benchmark::kMicrosecond); -BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_axpy_op_gpu)->RangeMultiplier(10)->Range(1,10e6)->Unit(benchmark::kMicrosecond); -BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_scal_op_gpu)->RangeMultiplier(10)->Range(1,10e6)->Unit(benchmark::kMicrosecond); +// BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, +// BM_zdot_real_gpu_op)->RangeMultiplier(10)->Range(1,10e6)->UseManualTime()->Unit(benchmark::kMicrosecond); + +BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_zdot_real_gpu_op) + ->RangeMultiplier(10) + ->Range(1, 10e6) + ->Unit(benchmark::kMicrosecond); +BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_mul_real_op_gpu) + ->RangeMultiplier(10) + ->Range(1, 10e6) + ->Unit(benchmark::kMicrosecond); +BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_mul_vector_op_gpu) + ->RangeMultiplier(10) + ->Range(1, 10e6) + ->Unit(benchmark::kMicrosecond); +BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_div_vector_op_gpu) + ->RangeMultiplier(10) + ->Range(1, 10e6) + ->Unit(benchmark::kMicrosecond); +BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_vector_add_vector_op_gpu) + ->RangeMultiplier(10) + ->Range(1, 10e6) + ->Unit(benchmark::kMicrosecond); +BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_axpy_op_gpu) + ->RangeMultiplier(10) + ->Range(1, 10e6) + ->Unit(benchmark::kMicrosecond); +BENCHMARK_REGISTER_F(PerfModuleHsolverMathKernel, BM_scal_op_gpu) + ->RangeMultiplier(10) + ->Range(1, 10e6) + ->Unit(benchmark::kMicrosecond); #endif // __CUDA || __UT_USE_CUDA || __ROCM || __UT_USE_ROCM - -BENCHMARK_MAIN(); \ No newline at end of file +BENCHMARK_MAIN(); \ No newline at end of file diff --git a/source/source_hsolver/module_pexsi/pexsi_solver.cpp b/source/source_hsolver/module_pexsi/pexsi_solver.cpp index e830eb2eaf..837ef74c2c 100644 --- a/source/source_hsolver/module_pexsi/pexsi_solver.cpp +++ b/source/source_hsolver/module_pexsi/pexsi_solver.cpp @@ -1,15 +1,14 @@ -#include "module_base/parallel_global.h" +#include "source_base/parallel_global.h" #ifdef __PEXSI #include "module_parameter/parameter.h" #include "pexsi_solver.h" +#include "simple_pexsi.h" +#include "source_base/global_variable.h" -#include #include +#include #include -#include "module_base/global_variable.h" -#include "simple_pexsi.h" - extern MPI_Comm DIAG_WORLD; extern MPI_Comm GRID_WORLD; namespace pexsi @@ -72,7 +71,7 @@ int PEXSI_Solver::solve(double mu0) MPI_Comm_size(DIAG_WORLD, &grid_np); MPI_Comm_group(DIAG_WORLD, &world_group); - int grid_proc_range[3]={0, (GlobalV::NPROC/grid_np)*grid_np-1, GlobalV::NPROC/grid_np}; + int grid_proc_range[3] = {0, (GlobalV::NPROC / grid_np) * grid_np - 1, GlobalV::NPROC / grid_np}; MPI_Group_range_incl(world_group, 1, &grid_proc_range, &grid_group); simplePEXSI(DIAG_WORLD, diff --git a/source/source_hsolver/module_pexsi/simple_pexsi.cpp b/source/source_hsolver/module_pexsi/simple_pexsi.cpp index 55f5a7b823..badcd211cc 100644 --- a/source/source_hsolver/module_pexsi/simple_pexsi.cpp +++ b/source/source_hsolver/module_pexsi/simple_pexsi.cpp @@ -4,7 +4,15 @@ // the Density Matrix and Energy Density Matrix calculated by PEXSI are transformed to 2D block cyclic distribution // #include "mpi.h" #ifdef __PEXSI -#include +#include "c_pexsi_interface.h" +#include "dist_bcd_matrix.h" +#include "dist_ccs_matrix.h" +#include "dist_matrix_transformer.h" +#include "source_base/global_variable.h" +#include "source_base/lapack_connector.h" +#include "source_base/timer.h" +#include "source_base/tool_quit.h" +#include "source_hsolver/diago_pexsi.h" #include #include @@ -12,16 +20,7 @@ #include #include #include - -#include "c_pexsi_interface.h" -#include "dist_bcd_matrix.h" -#include "dist_ccs_matrix.h" -#include "dist_matrix_transformer.h" -#include "module_base/lapack_connector.h" -#include "module_base/timer.h" -#include "module_base/tool_quit.h" -#include "module_base/global_variable.h" -#include "source_hsolver/diago_pexsi.h" +#include namespace pexsi { @@ -115,7 +114,7 @@ int loadPEXSIOption(MPI_Comm comm, int_para[15] = 0; int_para[16] = pexsi::PEXSI_Solver::pexsi_nproc_pole; - double_para[0] = 2;//PARAM.inp.nspin; // pexsi::PEXSI_Solver::pexsi_spin; + double_para[0] = 2; // PARAM.inp.nspin; // pexsi::PEXSI_Solver::pexsi_spin; double_para[1] = pexsi::PEXSI_Solver::pexsi_temp; double_para[2] = pexsi::PEXSI_Solver::pexsi_gap; double_para[3] = pexsi::PEXSI_Solver::pexsi_delta_e; @@ -249,7 +248,7 @@ int simplePEXSI(MPI_Comm comm_PEXSI, plan = PPEXSIPlanInitialize(comm_PEXSI, pexsi_prow, pexsi_pcol, outputFileIndex, &info); } ModuleBase::timer::tick("Diago_LCAO_Matrix", "PEXSIPlanInit"); - + ModuleBase::timer::tick("Diago_LCAO_Matrix", "setup_PEXSI_plan"); // create compressed column storage distribution matrix parameter @@ -259,7 +258,6 @@ int simplePEXSI(MPI_Comm comm_PEXSI, // LiuXh modify 2021-03-30, add DONE(ofs_running,"xx") for test // DONE(ofs_running,"create compressed column storage distribution matrix parameter, finish"); - // create block cyclic distribution matrix parameter DistBCDMatrix SRC_Matrix(comm_2D, group_2D, blacs_ctxt, size, nblk, nrow, ncol, layout); // LiuXh modify 2021-03-30, add DONE(ofs_running,"xx") for test @@ -299,16 +297,16 @@ int simplePEXSI(MPI_Comm comm_PEXSI, int numTotalInertiaIter; // Number of total inertia[out] // LiuXh modify 2021-04-29, add DONE(ofs_running,"xx") for test ModuleBase::timer::tick("Diago_LCAO_Matrix", "PEXSIDFT"); - PPEXSIDFTDriver2(plan, // PEXSI plan[in] - &options, // PEXSI Options[in] - numElectronExact, // exact electron number[in] - &mu, // chemical potential[out] - &nelec, // number of electrons[out] - // &muMinInertia, // Lower bound for mu after the last inertia[out] - // &muMaxInertia, // Upper bound for mu after the last inertia[out] - &numTotalInertiaIter, // Number of total inertia[out] - // &numTotalPEXSIIter, // number of total pexsi evaluation procedure[out] - &info); // 0: successful; otherwise: unsuccessful + PPEXSIDFTDriver2(plan, // PEXSI plan[in] + &options, // PEXSI Options[in] + numElectronExact, // exact electron number[in] + &mu, // chemical potential[out] + &nelec, // number of electrons[out] + // &muMinInertia, // Lower bound for mu after the last inertia[out] + // &muMaxInertia, // Upper bound for mu after the last inertia[out] + &numTotalInertiaIter, // Number of total inertia[out] + // &numTotalPEXSIIter, // number of total pexsi evaluation procedure[out] + &info); // 0: successful; otherwise: unsuccessful // LiuXh modify 2021-04-29, add DONE(ofs_running,"xx") for test ModuleBase::timer::tick("Diago_LCAO_Matrix", "PEXSIDFT"); diff --git a/source/source_hsolver/para_linear_transform.cpp b/source/source_hsolver/para_linear_transform.cpp index 5a6c8def27..5b86e2c86e 100644 --- a/source/source_hsolver/para_linear_transform.cpp +++ b/source/source_hsolver/para_linear_transform.cpp @@ -1,6 +1,6 @@ #include "para_linear_transform.h" -#include "module_base/timer.h" +#include "source_base/timer.h" #include #include @@ -152,19 +152,7 @@ void PLinearTransform::act(const T alpha, const T* A, const T* U, con else #endif { - ModuleBase::gemm_op()('N', - 'N', - nrowA, - ncolB, - ncolA, - &alpha, - A, - LDA, - U, - ncolA, - &beta, - B, - LDA); + ModuleBase::gemm_op()('N', 'N', nrowA, ncolB, ncolA, &alpha, A, LDA, U, ncolA, &beta, B, LDA); } ModuleBase::timer::tick("PLinearTransform", "act"); }; diff --git a/source/source_hsolver/para_linear_transform.h b/source/source_hsolver/para_linear_transform.h index 8e5e69d203..5651695e0b 100644 --- a/source/source_hsolver/para_linear_transform.h +++ b/source/source_hsolver/para_linear_transform.h @@ -1,9 +1,9 @@ #ifndef __PARA_LINEAR_TRANSFORM_H__ #define __PARA_LINEAR_TRANSFORM_H__ -#include "module_base/kernels/math_kernel_op.h" -#include "module_base/module_device/device.h" -#include "module_base/module_device/memory_op.h" -#include "module_base/parallel_device.h" +#include "source_base/kernels/math_kernel_op.h" +#include "source_base/module_device/device.h" +#include "source_base/module_device/memory_op.h" +#include "source_base/parallel_device.h" #include #ifdef __MPI diff --git a/source/source_hsolver/parallel_k2d.cpp b/source/source_hsolver/parallel_k2d.cpp index 91ead02082..40cfd6035c 100644 --- a/source/source_hsolver/parallel_k2d.cpp +++ b/source/source_hsolver/parallel_k2d.cpp @@ -1,9 +1,9 @@ #include "parallel_k2d.h" -#include "module_base/parallel_global.h" -#include "module_base/scalapack_connector.h" -#include "module_base/timer.h" -#include "module_base/memory.h" +#include "source_base/memory.h" +#include "source_base/parallel_global.h" +#include "source_base/scalapack_connector.h" +#include "source_base/timer.h" template void Parallel_K2D::set_para_env(int nks, @@ -11,33 +11,24 @@ void Parallel_K2D::set_para_env(int nks, const int& nb2d, const int& nproc, const int& my_rank, - const int& nspin) { + const int& nspin) +{ const int kpar = this->get_kpar(); - Parallel_Global::divide_mpi_groups(nproc, - kpar, - my_rank, - this->NPROC_IN_POOL, - this->MY_POOL, - this->RANK_IN_POOL); + Parallel_Global::divide_mpi_groups(nproc, kpar, my_rank, this->NPROC_IN_POOL, this->MY_POOL, this->RANK_IN_POOL); #ifdef __MPI - MPI_Comm_split(MPI_COMM_WORLD, - this->MY_POOL, - this->RANK_IN_POOL, - &this->POOL_WORLD_K2D); + MPI_Comm_split(MPI_COMM_WORLD, this->MY_POOL, this->RANK_IN_POOL, &this->POOL_WORLD_K2D); #endif this->Pkpoints = new Parallel_Kpoints; this->P2D_global = new Parallel_2D; this->P2D_pool = new Parallel_2D; - this->Pkpoints - ->kinfo(nks, kpar, this->MY_POOL, this->RANK_IN_POOL, nproc, nspin); + this->Pkpoints->kinfo(nks, kpar, this->MY_POOL, this->RANK_IN_POOL, nproc, nspin); this->P2D_global->init(nw, nw, nb2d, MPI_COMM_WORLD); this->P2D_pool->init(nw, nw, nb2d, this->POOL_WORLD_K2D); } template -void Parallel_K2D::distribute_hsk(hamilt::Hamilt* pHamilt, - const std::vector& ik_kpar, - const int& nw) { +void Parallel_K2D::distribute_hsk(hamilt::Hamilt* pHamilt, const std::vector& ik_kpar, const int& nw) +{ #ifdef __MPI ModuleBase::timer::tick("Parallel_K2D", "distribute_hsk"); for (int ipool = 0; ipool < ik_kpar.size(); ++ipool) @@ -45,13 +36,15 @@ void Parallel_K2D::distribute_hsk(hamilt::Hamilt* pHamilt, pHamilt->updateHk(ik_kpar[ipool]); hamilt::MatrixBlock HK_global, SK_global; pHamilt->matrix(HK_global, SK_global); - if (this->MY_POOL == this->Pkpoints->whichpool[ik_kpar[ipool]]) { + if (this->MY_POOL == this->Pkpoints->whichpool[ik_kpar[ipool]]) + { this->hk_pool.resize(this->P2D_pool->get_local_size(), 0.0); this->sk_pool.resize(this->P2D_pool->get_local_size(), 0.0); } int desc_pool[9]; std::copy(this->P2D_pool->desc, this->P2D_pool->desc + 9, desc_pool); - if (this->MY_POOL != this->Pkpoints->whichpool[ik_kpar[ipool]]) { + if (this->MY_POOL != this->Pkpoints->whichpool[ik_kpar[ipool]]) + { desc_pool[1] = -1; } Cpxgemr2d(nw, @@ -84,16 +77,20 @@ void Parallel_K2D::distribute_hsk(hamilt::Hamilt* pHamilt, } template -void Parallel_K2D::unset_para_env() { - if (this->Pkpoints != nullptr) { +void Parallel_K2D::unset_para_env() +{ + if (this->Pkpoints != nullptr) + { delete this->Pkpoints; this->Pkpoints = nullptr; } - if (this->P2D_global != nullptr) { + if (this->P2D_global != nullptr) + { delete this->P2D_global; this->P2D_global = nullptr; } - if (this->P2D_pool != nullptr) { + if (this->P2D_pool != nullptr) + { delete this->P2D_pool; this->P2D_pool = nullptr; } @@ -101,10 +98,11 @@ void Parallel_K2D::unset_para_env() { } template -void Parallel_K2D::set_kpar(int kpar) { - if (kpar < 1) { - ModuleBase::WARNING_QUIT("Parallel_K2D::set_kpar", - "kpar must be greater than 0."); +void Parallel_K2D::set_kpar(int kpar) +{ + if (kpar < 1) + { + ModuleBase::WARNING_QUIT("Parallel_K2D::set_kpar", "kpar must be greater than 0."); } this->kpar_ = kpar; } diff --git a/source/source_hsolver/parallel_k2d.h b/source/source_hsolver/parallel_k2d.h index cdd7a951c8..57063abf24 100644 --- a/source/source_hsolver/parallel_k2d.h +++ b/source/source_hsolver/parallel_k2d.h @@ -1,9 +1,9 @@ #ifndef PARALLEL_K2D_H #define PARALLEL_K2D_H -#include "module_base/parallel_2d.h" #include "module_cell/parallel_kpoints.h" #include "module_hamilt_general/matrixblock.h" +#include "source_base/parallel_2d.h" #ifdef __MPI #include "mpi.h" #endif @@ -15,28 +15,26 @@ */ template -class Parallel_K2D { +class Parallel_K2D +{ public: - /// private constructor - Parallel_K2D() {} + /// private constructor + Parallel_K2D() + { + } /// private destructor - ~Parallel_K2D() {} + ~Parallel_K2D() + { + } /** * Public member functions */ /// this function sets the parallel environment for k-points parallelism /// including the glabal and pool 2D parallel distribution - void set_para_env(int nks, - const int& nw, - const int& nb2d, - const int& nproc, - const int& my_rank, - const int& nspin); + void set_para_env(int nks, const int& nw, const int& nb2d, const int& nproc, const int& my_rank, const int& nspin); /// this function distributes the Hk and Sk matrices to hk_pool and sk_pool - void distribute_hsk(hamilt::Hamilt* pHamilt, - const std::vector& ik_kpar, - const int& nw); + void distribute_hsk(hamilt::Hamilt* pHamilt, const std::vector& ik_kpar, const int& nw); /// this function unsets the parallel environment for k-points parallelism /// including the glabal and pool 2D parallel distribution @@ -44,15 +42,30 @@ class Parallel_K2D { /// set the number of k-points void set_kpar(int kpar); /// get the number of k-points - int get_kpar() { return this->kpar_; } + int get_kpar() + { + return this->kpar_; + } /// get my pool - int get_my_pool() { return this->MY_POOL; } + int get_my_pool() + { + return this->MY_POOL; + } /// get pKpoints - Parallel_Kpoints* get_pKpoints() { return this->Pkpoints; } + Parallel_Kpoints* get_pKpoints() + { + return this->Pkpoints; + } /// get p2D_global - Parallel_2D* get_p2D_global() { return this->P2D_global; } + Parallel_2D* get_p2D_global() + { + return this->P2D_global; + } /// get p2D_pool - Parallel_2D* get_p2D_pool() { return this->P2D_pool; } + Parallel_2D* get_p2D_pool() + { + return this->P2D_pool; + } /** * the local Hk, Sk matrices in POOL_WORLD_K2D diff --git a/source/source_hsolver/test/diago_bpcg_test.cpp b/source/source_hsolver/test/diago_bpcg_test.cpp index 70ae44942e..a6edd461b0 100644 --- a/source/source_hsolver/test/diago_bpcg_test.cpp +++ b/source/source_hsolver/test/diago_bpcg_test.cpp @@ -1,17 +1,18 @@ -#include "module_base/inverse_matrix.h" -#include "module_base/lapack_connector.h" -#include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" -#include "module_psi/psi.h" -#include "module_hamilt_general/hamilt.h" -#include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" -#include "../diago_iter_assist.h" #include "../diago_bpcg.h" + +#include "../diago_iter_assist.h" #include "diago_mock.h" -#include "mpi.h" #include "module_basis/module_pw/test/test_tool.h" +#include "module_hamilt_general/hamilt.h" +#include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" +#include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" +#include "module_psi/psi.h" +#include "mpi.h" +#include "source_base/inverse_matrix.h" +#include "source_base/lapack_connector.h" -#include #include +#include #include /************************************************ @@ -35,20 +36,21 @@ */ // call lapack in order to compare to bpcg -void lapackEigen(int &npw, std::vector> &hm, double *e, bool outtime = false) +void lapackEigen(int& npw, std::vector>& hm, double* e, bool outtime = false) { clock_t start, end; start = clock(); int lwork = 2 * npw; - std::complex *work2 = new std::complex[lwork]; - double *rwork = new double[3 * npw - 2]; + std::complex* work2 = new std::complex[lwork]; + double* rwork = new double[3 * npw - 2]; int info = 0; char tmp_c1 = 'V', tmp_c2 = 'U'; zheev_(&tmp_c1, &tmp_c2, &npw, hm.data(), &npw, e, work2, &lwork, rwork, &info); end = clock(); - if (outtime) { + if (outtime) + { std::cout << "Lapack Run time: " << (double)(end - start) / CLOCKS_PER_SEC << " S" << std::endl; -} + } delete[] rwork; delete[] work2; } @@ -57,13 +59,12 @@ class DiagoBPCGPrepare { public: DiagoBPCGPrepare(int nband, int npw, int sparsity, bool reorder, double eps, int maxiter, double threshold) - : nband(nband), npw(npw), sparsity(sparsity), reorder(reorder), eps(eps), maxiter(maxiter), - threshold(threshold) + : nband(nband), npw(npw), sparsity(sparsity), reorder(reorder), eps(eps), maxiter(maxiter), threshold(threshold) { -#ifdef __MPI - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); +#ifdef __MPI + MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); -#endif +#endif } int nband, npw, sparsity, maxiter, notconv; @@ -71,16 +72,18 @@ class DiagoBPCGPrepare double eps, avg_iter; bool reorder; double threshold; - int nprocs=1, mypnum=0; + int nprocs = 1, mypnum = 0; // threshold is the comparison standard between bpcg and lapack - void CompareEigen(double *precondition) + void CompareEigen(double* precondition) { // calculate eigenvalues by LAPACK; - double *e_lapack = new double[npw]; + double* e_lapack = new double[npw]; auto ev = DIAGOTEST::hmatrix; - if(mypnum == 0) { lapackEigen(npw, ev, e_lapack, false); -} + if (mypnum == 0) + { + lapackEigen(npw, ev, e_lapack, false); + } // initial guess of psi by perturbing lapack psi ModuleBase::ComplexMatrix psiguess(nband, npw); std::default_random_engine p(1); @@ -89,44 +92,48 @@ class DiagoBPCGPrepare { for (int j = 0; j < npw; j++) { - double rand = static_cast(u(p))/10.; + double rand = static_cast(u(p)) / 10.; // psiguess(i,j) = ev(j,i)*(1+rand); psiguess(i, j) = ev[j * DIAGOTEST::h_nc + i] * rand; } } // run bpcg - //====================================================================== - double *en = new double[npw]; + //====================================================================== + double* en = new double[npw]; int ik = 1; - hamilt::Hamilt>* ha; - ha =new hamilt::HamiltPW>(nullptr, nullptr, nullptr, nullptr,nullptr); - int* ngk = new int [1]; - //psi::Psi> psi(ngk,ik,nband,npw); - psi::Psi> psi; - psi.resize(ik,nband,npw); - //psi.fix_k(0); + hamilt::Hamilt>* ha; + ha = new hamilt::HamiltPW>(nullptr, nullptr, nullptr, nullptr, nullptr); + int* ngk = new int[1]; + // psi::Psi> psi(ngk,ik,nband,npw); + psi::Psi> psi; + psi.resize(ik, nband, npw); + // psi.fix_k(0); for (int i = 0; i < nband; i++) { for (int j = 0; j < npw; j++) { - psi(i,j)=psiguess(i,j); - } - } + psi(i, j) = psiguess(i, j); + } + } psi::Psi> psi_local; double* precondition_local; DIAGOTEST::npw_local = new int[nprocs]; -#ifdef __MPI - DIAGOTEST::cal_division(DIAGOTEST::npw); - DIAGOTEST::divide_hpsi(psi, psi_local, DIAGOTEST::hmatrix, DIAGOTEST::hmatrix_local); //will distribute psi and Hmatrix to each process - precondition_local = new double[DIAGOTEST::npw_local[mypnum]]; - DIAGOTEST::divide_psi(precondition,precondition_local); +#ifdef __MPI + DIAGOTEST::cal_division(DIAGOTEST::npw); + DIAGOTEST::divide_hpsi(psi, + psi_local, + DIAGOTEST::hmatrix, + DIAGOTEST::hmatrix_local); // will distribute psi and Hmatrix to each process + precondition_local = new double[DIAGOTEST::npw_local[mypnum]]; + DIAGOTEST::divide_psi(precondition, precondition_local); #else - DIAGOTEST::hmatrix_local = DIAGOTEST::hmatrix; - DIAGOTEST::npw_local[0] = DIAGOTEST::npw; - psi_local = psi; - precondition_local = new double[DIAGOTEST::npw]; - for(int i=0;i> bpcg(precondition_local); psi_local.fix_k(0); @@ -134,24 +141,28 @@ class DiagoBPCGPrepare start = MPI_Wtime(); using T = std::complex; const int dim = DIAGOTEST::npw; - const std::vector &h_mat = DIAGOTEST::hmatrix_local; - auto hpsi_func = [h_mat, dim](T *psi_in, T *hpsi_out, - const int ld_psi, const int nvec) { + const std::vector& h_mat = DIAGOTEST::hmatrix_local; + auto hpsi_func = [h_mat, dim](T* psi_in, T* hpsi_out, const int ld_psi, const int nvec) { auto one = std::make_unique(1.0); auto zero = std::make_unique(0.0); - const T *one_ = one.get(); - const T *zero_ = zero.get(); + const T* one_ = one.get(); + const T* zero_ = zero.get(); - base_device::DEVICE_CPU *ctx = {}; + base_device::DEVICE_CPU* ctx = {}; // hpsi_out(dim * nvec) = h_mat(dim * dim) * psi_in(dim * nvec) - ModuleBase::gemm_op()( - 'N', 'N', - dim, nvec, dim, - one_, - h_mat.data(), dim, - psi_in, ld_psi, - zero_, - hpsi_out, ld_psi); + ModuleBase::gemm_op()('N', + 'N', + dim, + nvec, + dim, + one_, + h_mat.data(), + dim, + psi_in, + ld_psi, + zero_, + hpsi_out, + ld_psi); }; const int ndim = psi_local.get_current_ngk(); bpcg.init_iter(nband, nband, npw, ndim); @@ -161,10 +172,10 @@ class DiagoBPCGPrepare bpcg.diag(hpsi_func, psi_local.get_pointer(), en, ethr_band); bpcg.diag(hpsi_func, psi_local.get_pointer(), en, ethr_band); end = MPI_Wtime(); - //if(mypnum == 0) printf("diago time:%7.3f\n",end-start); - delete [] DIAGOTEST::npw_local; - delete [] precondition_local; - //====================================================================== + // if(mypnum == 0) printf("diago time:%7.3f\n",end-start); + delete[] DIAGOTEST::npw_local; + delete[] precondition_local; + //====================================================================== for (int i = 0; i < nband; i++) { EXPECT_NEAR(en[i], e_lapack[i], threshold); @@ -183,12 +194,12 @@ class DiagoBPCGTest : public ::testing::TestWithParam TEST_P(DiagoBPCGTest, RandomHamilt) { DiagoBPCGPrepare dcp = GetParam(); - //std::cout << "npw=" << dcp.npw << ", nband=" << dcp.nband << ", sparsity=" + // std::cout << "npw=" << dcp.npw << ", nband=" << dcp.nband << ", sparsity=" // << dcp.sparsity << ", eps=" << dcp.eps << std::endl; hsolver::DiagoIterAssist>::PW_DIAG_NMAX = dcp.maxiter; hsolver::DiagoIterAssist>::PW_DIAG_THR = dcp.eps; - //std::cout<<"maxiter "<>::PW_DIAG_NMAX<>::PW_DIAG_THR<>::PW_DIAG_NMAX<>::PW_DIAG_THR<> hpsi(dcp.nband, dcp.npw, dcp.sparsity); DIAGOTEST::hmatrix = hpsi.hamilt(); @@ -204,9 +215,9 @@ INSTANTIATE_TEST_SUITE_P(VerifyCG, DiagoBPCGPrepare(10, 500, 0, true, 1e-5, 300, 5e-2), DiagoBPCGPrepare(20, 500, 6, true, 1e-5, 300, 5e-2), DiagoBPCGPrepare(20, 1000, 8, true, 1e-5, 300, 5e-2), - DiagoBPCGPrepare(40, 1000, 8, true, 1e-6, 300, 5e-2))); - //DiagoBPCGPrepare(40, 2000, 8, true, 1e-5, 500, 1e-2))); - // the last one is passed but time-consumming. + DiagoBPCGPrepare(40, 1000, 8, true, 1e-6, 300, 5e-2))); +// DiagoBPCGPrepare(40, 2000, 8, true, 1e-5, 500, 1e-2))); +// the last one is passed but time-consumming. // check that the mock class HPsi work well // in generating a Hermite matrix @@ -245,7 +256,6 @@ TEST(DiagoBPCGTest, Hamilt) } }*/ - TEST(DiagoBPCGTest, readH) { // read Hamilt matrix from file data-H @@ -275,32 +285,34 @@ TEST(DiagoBPCGTest, readH) dcp.CompareEigen(hpsi.precond()); } -int main(int argc, char **argv) +int main(int argc, char** argv) { - int nproc = 1, myrank = 0; + int nproc = 1, myrank = 0; #ifdef __MPI - int nproc_in_pool, kpar=1, mypool, rank_in_pool; - setupmpi(argc,argv,nproc, myrank); + int nproc_in_pool, kpar = 1, mypool, rank_in_pool; + setupmpi(argc, argv, nproc, myrank); divide_pools(nproc, myrank, nproc_in_pool, kpar, mypool, rank_in_pool); - MPI_Comm_split(MPI_COMM_WORLD,myrank,0,&BP_WORLD); + MPI_Comm_split(MPI_COMM_WORLD, myrank, 0, &BP_WORLD); GlobalV::NPROC_IN_POOL = nproc; #else - MPI_Init(&argc, &argv); + MPI_Init(&argc, &argv); #endif testing::InitGoogleTest(&argc, argv); - ::testing::TestEventListeners &listeners = ::testing::UnitTest::GetInstance()->listeners(); - if (myrank != 0) { delete listeners.Release(listeners.default_result_printer()); -} + ::testing::TestEventListeners& listeners = ::testing::UnitTest::GetInstance()->listeners(); + if (myrank != 0) + { + delete listeners.Release(listeners.default_result_printer()); + } int result = RUN_ALL_TESTS(); if (myrank == 0 && result != 0) { std::cout << "ERROR:some tests are not passed" << std::endl; return result; - } + } MPI_Finalize(); - return 0; + return 0; } diff --git a/source/source_hsolver/test/diago_cg_float_test.cpp b/source/source_hsolver/test/diago_cg_float_test.cpp index fe7cfb699a..77677db8e5 100644 --- a/source/source_hsolver/test/diago_cg_float_test.cpp +++ b/source/source_hsolver/test/diago_cg_float_test.cpp @@ -2,22 +2,21 @@ #define private public #include "module_parameter/parameter.h" #undef private -#include "module_base/inverse_matrix.h" -#include "module_base/lapack_connector.h" -#include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" -#include "module_psi/psi.h" -#include "module_hamilt_general/hamilt.h" -#include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" #include "../diago_cg.h" #include "../diago_iter_assist.h" #include "diago_mock.h" -#include "mpi.h" #include "module_basis/module_pw/test/test_tool.h" -#include - -#include +#include "module_hamilt_general/hamilt.h" +#include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" +#include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" +#include "module_psi/psi.h" +#include "mpi.h" +#include "source_base/inverse_matrix.h" +#include "source_base/lapack_connector.h" #include +#include +#include /************************************************ * unit test of functions in Diago_CG @@ -40,20 +39,21 @@ */ // call lapack in order to compare to cg -void lapackEigen(int &npw, std::vector> &hm, float *e, bool outtime = false) +void lapackEigen(int& npw, std::vector>& hm, float* e, bool outtime = false) { clock_t start, end; start = clock(); int lwork = 2 * npw; - std::complex *work2 = new std::complex[lwork]; - float *rwork = new float[3 * npw - 2]; + std::complex* work2 = new std::complex[lwork]; + float* rwork = new float[3 * npw - 2]; int info = 0; char tmp_c1 = 'V', tmp_c2 = 'U'; cheev_(&tmp_c1, &tmp_c2, &npw, hm.data(), &npw, e, work2, &lwork, rwork, &info); end = clock(); - if (outtime) { + if (outtime) + { std::cout << "Lapack Run time: " << (float)(end - start) / CLOCKS_PER_SEC << " S" << std::endl; -} + } delete[] rwork; delete[] work2; } @@ -62,13 +62,12 @@ class DiagoCGPrepare { public: DiagoCGPrepare(int nband, int npw, int sparsity, bool reorder, float eps, int maxiter, float threshold) - : nband(nband), npw(npw), sparsity(sparsity), reorder(reorder), eps(eps), maxiter(maxiter), - threshold(threshold) + : nband(nband), npw(npw), sparsity(sparsity), reorder(reorder), eps(eps), maxiter(maxiter), threshold(threshold) { -#ifdef __MPI - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); +#ifdef __MPI + MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); -#endif +#endif } int nband, npw, sparsity, maxiter, notconv; @@ -76,17 +75,19 @@ class DiagoCGPrepare float eps, avg_iter; bool reorder; float threshold; - int nprocs=1, mypnum=0; + int nprocs = 1, mypnum = 0; // threshold is the comparison standard between cg and lapack - void CompareEigen(float *precondition) + void CompareEigen(float* precondition) { // calculate eigenvalues by LAPACK; - float *e_lapack = new float[npw]; + float* e_lapack = new float[npw]; auto ev = DIAGOTEST::hmatrix_f; - if(mypnum == 0) { lapackEigen(npw, ev, e_lapack, false); -} + if (mypnum == 0) + { + lapackEigen(npw, ev, e_lapack, false); + } // initial guess of psi by perturbing lapack psi std::vector> psiguess(nband * npw); @@ -97,60 +98,63 @@ class DiagoCGPrepare { for (int j = 0; j < npw; j++) { - float rand = static_cast(u(p))/10.; + float rand = static_cast(u(p)) / 10.; // psiguess(i,j) = ev(j,i)*(1+rand); psiguess[i * npw + j] = ev[j * DIAGOTEST::h_nc + i] * rand; } } // run cg - //====================================================================== - float *en = new float[npw]; + //====================================================================== + float* en = new float[npw]; int ik = 1; - hamilt::Hamilt>* ha; - ha =new hamilt::HamiltPW>(nullptr, nullptr, nullptr, nullptr,nullptr); - psi::Psi> psi; - psi.resize(ik,nband,npw); - //psi.fix_k(0); + hamilt::Hamilt>* ha; + ha = new hamilt::HamiltPW>(nullptr, nullptr, nullptr, nullptr, nullptr); + psi::Psi> psi; + psi.resize(ik, nband, npw); + // psi.fix_k(0); for (int i = 0; i < nband; i++) { for (int j = 0; j < npw; j++) { - psi(i,j)=psiguess[i * npw + j]; - } - } + psi(i, j) = psiguess[i * npw + j]; + } + } psi::Psi> psi_local; float* precondition_local; DIAGOTEST::npw_local = new int[nprocs]; -#ifdef __MPI - DIAGOTEST::cal_division(DIAGOTEST::npw); - DIAGOTEST::divide_hpsi(psi, psi_local, DIAGOTEST::hmatrix_f, DIAGOTEST::hmatrix_local_f); //will distribute psi and Hmatrix to each process - precondition_local = new float[DIAGOTEST::npw_local[mypnum]]; +#ifdef __MPI + DIAGOTEST::cal_division(DIAGOTEST::npw); + DIAGOTEST::divide_hpsi(psi, + psi_local, + DIAGOTEST::hmatrix_f, + DIAGOTEST::hmatrix_local_f); // will distribute psi and Hmatrix to each process + precondition_local = new float[DIAGOTEST::npw_local[mypnum]]; DIAGOTEST::divide_psi(precondition, precondition_local); #else - DIAGOTEST::hmatrix_local_f = DIAGOTEST::hmatrix_f; - DIAGOTEST::npw_local[0] = DIAGOTEST::npw; - psi_local = psi; - precondition_local = new float[DIAGOTEST::npw]; - for(int i=0;i> cg(precondition_local); psi_local.fix_k(0); - // cg.diag(ha,psi_local,en); + // cg.diag(ha,psi_local,en); /**************************************************************/ // New interface of cg method /**************************************************************/ // warp the subspace_func into a lambda function auto subspace_func = [ha](const ct::Tensor& psi_in, ct::Tensor& psi_out) { /*do nothing*/ }; - hsolver::DiagoCG> cg( - PARAM.input.basis_type, - PARAM.input.calculation, - hsolver::DiagoIterAssist>::need_subspace, - subspace_func, - hsolver::DiagoIterAssist>::PW_DIAG_THR, - hsolver::DiagoIterAssist>::PW_DIAG_NMAX, - GlobalV::NPROC_IN_POOL); + hsolver::DiagoCG> cg(PARAM.input.basis_type, + PARAM.input.calculation, + hsolver::DiagoIterAssist>::need_subspace, + subspace_func, + hsolver::DiagoIterAssist>::PW_DIAG_THR, + hsolver::DiagoIterAssist>::PW_DIAG_NMAX, + GlobalV::NPROC_IN_POOL); // hsolver::DiagoCG> cg(precondition_local); psi_local.fix_k(0); float start, end; @@ -159,10 +163,12 @@ class DiagoCGPrepare auto hpsi_func = [ha](const ct::Tensor& psi_in, ct::Tensor& hpsi_out) { const auto ndim = psi_in.shape().ndim(); REQUIRES_OK(ndim <= 2, "dims of psi_in should be less than or equal to 2"); - auto psi_wrapper = psi::Psi>( - psi_in.data>(), 1, - ndim == 1 ? 1 : psi_in.shape().dim_size(0), - ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), true); + auto psi_wrapper + = psi::Psi>(psi_in.data>(), + 1, + ndim == 1 ? 1 : psi_in.shape().dim_size(0), + ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), + true); psi::Range all_bands_range(true, psi_wrapper.get_current_k(), 0, psi_wrapper.get_nbands() - 1); using hpsi_info = typename hamilt::Operator>::hpsi_info; hpsi_info info(&psi_wrapper, all_bands_range, hpsi_out.data>()); @@ -171,41 +177,42 @@ class DiagoCGPrepare auto spsi_func = [ha](const ct::Tensor& psi_in, ct::Tensor& spsi_out) { const auto ndim = psi_in.shape().ndim(); REQUIRES_OK(ndim <= 2, "dims of psi_in should be less than or equal to 2"); - ha->sPsi(psi_in.data>(), spsi_out.data>(), - ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), - ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), - ndim == 1 ? 1 : psi_in.shape().dim_size(0)); + ha->sPsi(psi_in.data>(), + spsi_out.data>(), + ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), + ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), + ndim == 1 ? 1 : psi_in.shape().dim_size(0)); }; - auto psi_tensor = ct::TensorMap( - psi_local.get_pointer(), - ct::DataType::DT_COMPLEX, - ct::DeviceType::CpuDevice, - ct::TensorShape({psi_local.get_nbands(), psi_local.get_nbasis()})).slice({0, 0}, {psi_local.get_nbands(), psi_local.get_current_ngk()}); - auto eigen_tensor = ct::TensorMap( - en, - ct::DataType::DT_FLOAT, - ct::DeviceType::CpuDevice, - ct::TensorShape({psi_local.get_nbands()})); - auto prec_tensor = ct::TensorMap( - precondition_local, - ct::DataType::DT_FLOAT, - ct::DeviceType::CpuDevice, - ct::TensorShape({static_cast(psi_local.get_current_ngk())})).slice({0}, {psi_local.get_current_ngk()}); + auto psi_tensor = ct::TensorMap(psi_local.get_pointer(), + ct::DataType::DT_COMPLEX, + ct::DeviceType::CpuDevice, + ct::TensorShape({psi_local.get_nbands(), psi_local.get_nbasis()})) + .slice({0, 0}, {psi_local.get_nbands(), psi_local.get_current_ngk()}); + auto eigen_tensor = ct::TensorMap(en, + ct::DataType::DT_FLOAT, + ct::DeviceType::CpuDevice, + ct::TensorShape({psi_local.get_nbands()})); + auto prec_tensor = ct::TensorMap(precondition_local, + ct::DataType::DT_FLOAT, + ct::DeviceType::CpuDevice, + ct::TensorShape({static_cast(psi_local.get_current_ngk())})) + .slice({0}, {psi_local.get_current_ngk()}); std::vector ethr_band(nband, 1e-5); cg.diag(hpsi_func, spsi_func, psi_tensor, eigen_tensor, ethr_band, prec_tensor); // TODO: Double check tensormap's potential problem - ct::TensorMap(psi_local.get_pointer(), psi_tensor, {psi_local.get_nbands(), psi_local.get_nbasis()}).sync(psi_tensor); + ct::TensorMap(psi_local.get_pointer(), psi_tensor, {psi_local.get_nbands(), psi_local.get_nbasis()}) + .sync(psi_tensor); /**************************************************************/ end = MPI_Wtime(); - //if(mypnum == 0) printf("diago time:%7.3f\n",end-start); - delete [] DIAGOTEST::npw_local; - delete [] precondition_local; - //====================================================================== + // if(mypnum == 0) printf("diago time:%7.3f\n",end-start); + delete[] DIAGOTEST::npw_local; + delete[] precondition_local; + //====================================================================== for (int i = 0; i < nband; i++) { - EXPECT_NEAR(en[i], e_lapack[i], threshold)< TEST_P(DiagoCGFloatTest, RandomHamilt) { DiagoCGPrepare dcp = GetParam(); - //std::cout << "npw=" << dcp.npw << ", nband=" << dcp.nband << ", sparsity=" + // std::cout << "npw=" << dcp.npw << ", nband=" << dcp.nband << ", sparsity=" // << dcp.sparsity << ", eps=" << dcp.eps << std::endl; hsolver::DiagoIterAssist>::PW_DIAG_NMAX = dcp.maxiter; hsolver::DiagoIterAssist>::PW_DIAG_THR = dcp.eps; - //std::cout<<"maxiter "<>::PW_DIAG_NMAX<>::PW_DIAG_THR<>::PW_DIAG_NMAX<>::PW_DIAG_THR<> hpsi(dcp.nband, dcp.npw, dcp.sparsity); DIAGOTEST::hmatrix_f = hpsi.hamilt(); @@ -242,9 +249,9 @@ INSTANTIATE_TEST_SUITE_P(VerifyCG, DiagoCGPrepare(10, 200, 0, true, 1e-6, 300, 1e-0), DiagoCGPrepare(10, 200, 6, true, 1e-6, 300, 1e-0), DiagoCGPrepare(10, 400, 8, true, 1e-6, 300, 1e-0), - DiagoCGPrepare(10, 600, 8, true, 1e-6, 300, 1e-0))); - //DiagoCGPrepare(40, 2000, 8, true, 1e-5, 500, 1e-2))); - // the last one is passed but time-consumming. + DiagoCGPrepare(10, 600, 8, true, 1e-6, 300, 1e-0))); +// DiagoCGPrepare(40, 2000, 8, true, 1e-5, 500, 1e-2))); +// the last one is passed but time-consumming. // check that the mock class HPsi work well // in generating a Hermite matrix @@ -335,31 +342,33 @@ TEST(DiagoCGFloatTest, readH) dcp.CompareEigen(hpsi.precond()); } -int main(int argc, char **argv) +int main(int argc, char** argv) { - int nproc = 1, myrank = 0; + int nproc = 1, myrank = 0; #ifdef __MPI - int nproc_in_pool, kpar=1, mypool, rank_in_pool; - setupmpi(argc,argv,nproc, myrank); + int nproc_in_pool, kpar = 1, mypool, rank_in_pool; + setupmpi(argc, argv, nproc, myrank); divide_pools(nproc, myrank, nproc_in_pool, kpar, mypool, rank_in_pool); GlobalV::NPROC_IN_POOL = nproc; #else - MPI_Init(&argc, &argv); + MPI_Init(&argc, &argv); #endif testing::InitGoogleTest(&argc, argv); - ::testing::TestEventListeners &listeners = ::testing::UnitTest::GetInstance()->listeners(); - if (myrank != 0) { delete listeners.Release(listeners.default_result_printer()); -} + ::testing::TestEventListeners& listeners = ::testing::UnitTest::GetInstance()->listeners(); + if (myrank != 0) + { + delete listeners.Release(listeners.default_result_printer()); + } int result = RUN_ALL_TESTS(); if (myrank == 0 && result != 0) { std::cout << "ERROR:some tests are not passed" << std::endl; return result; - } + } MPI_Finalize(); - return 0; + return 0; } diff --git a/source/source_hsolver/test/diago_cg_real_test.cpp b/source/source_hsolver/test/diago_cg_real_test.cpp index 0fda01e350..b6f3b9ac59 100644 --- a/source/source_hsolver/test/diago_cg_real_test.cpp +++ b/source/source_hsolver/test/diago_cg_real_test.cpp @@ -2,43 +2,43 @@ #define private public #include "module_parameter/parameter.h" #undef private -#include "module_base/inverse_matrix.h" -#include "module_base/lapack_connector.h" -#include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" -#include "module_psi/psi.h" -#include "module_hamilt_general/hamilt.h" -#include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" #include "../diago_cg.h" #include "../diago_iter_assist.h" #include "diago_mock.h" -#include "mpi.h" #include "module_basis/module_pw/test/test_tool.h" -#include -#include +#include "module_hamilt_general/hamilt.h" +#include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" +#include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" +#include "module_psi/psi.h" +#include "mpi.h" +#include "source_base/inverse_matrix.h" +#include "source_base/lapack_connector.h" #include +#include +#include /************************************************ * unit test of functions in Diago_CG ***********************************************/ - /** - * Class Diago_CG is an approach for eigenvalue problems - * This unittest test the function Diago_CG::diag() for FPTYPE=double, Device=cpu - * with different examples. - * - the Hermite matrices (npw=500,1000) produced using random numbers and with sparsity of 0%, 60%, 80% - * - the Hamiltonian matrix read from "data-H", produced by using out_hs in INPUT of a LCAO calculation - * - a 2x2 Hermite matrix for learning and checking - * - * Note: - * The test is passed when the eignvalues are closed to these calculated by LAPACK. - * It is used together with a header file diago_mock.h. - * The default Hermite matrix generated here is real symmetric, one can add an imaginary part - * by changing two commented out lines in diago_mock.h. - * - */ +/** + * Class Diago_CG is an approach for eigenvalue problems + * This unittest test the function Diago_CG::diag() for FPTYPE=double, Device=cpu + * with different examples. + * - the Hermite matrices (npw=500,1000) produced using random numbers and with sparsity of 0%, 60%, 80% + * - the Hamiltonian matrix read from "data-H", produced by using out_hs in INPUT of a LCAO calculation + * - a 2x2 Hermite matrix for learning and checking + * + * Note: + * The test is passed when the eignvalues are closed to these calculated by LAPACK. + * It is used together with a header file diago_mock.h. + * The default Hermite matrix generated here is real symmetric, one can add an imaginary part + * by changing two commented out lines in diago_mock.h. + * + */ - // call lapack in order to compare to cg +// call lapack in order to compare to cg void lapackEigen(int& npw, std::vector& hm, double* e, bool outtime = false) { int info = 0; @@ -49,30 +49,33 @@ void lapackEigen(int& npw, std::vector& hm, double* e, bool outtime = fa double work_tmp; constexpr int minus_one = -1; - dsyev_(&tmp_c1, &tmp_c2, &npw, tmp.data(), &npw, e, &work_tmp, &minus_one, &info); // get best lwork + dsyev_(&tmp_c1, &tmp_c2, &npw, tmp.data(), &npw, e, &work_tmp, &minus_one, &info); // get best lwork const int lwork = work_tmp; double* work2 = new double[lwork]; dsyev_(&tmp_c1, &tmp_c2, &npw, tmp.data(), &npw, e, work2, &lwork, &info); end = clock(); - if (info) { std::cout << "ERROR: Lapack solver, info=" << info << std::endl; -} - if (outtime) { std::cout << "Lapack Run time: " << (double)(end - start) / CLOCKS_PER_SEC << " S" << std::endl; -} + if (info) + { + std::cout << "ERROR: Lapack solver, info=" << info << std::endl; + } + if (outtime) + { + std::cout << "Lapack Run time: " << (double)(end - start) / CLOCKS_PER_SEC << " S" << std::endl; + } delete[] work2; } class DiagoCGPrepare { -public: + public: DiagoCGPrepare(int nband, int npw, int sparsity, bool reorder, double eps, int maxiter, double threshold) - : nband(nband), npw(npw), sparsity(sparsity), reorder(reorder), eps(eps), maxiter(maxiter), - threshold(threshold) + : nband(nband), npw(npw), sparsity(sparsity), reorder(reorder), eps(eps), maxiter(maxiter), threshold(threshold) { -#ifdef __MPI +#ifdef __MPI MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); -#endif +#endif } int nband, npw, sparsity, maxiter, notconv; @@ -88,8 +91,10 @@ class DiagoCGPrepare // calculate eigenvalues by LAPACK; double* e_lapack = new double[npw]; auto ev = DIAGOTEST::hmatrix_d; - if (mypnum == 0) { lapackEigen(npw, ev, e_lapack, false); -} + if (mypnum == 0) + { + lapackEigen(npw, ev, e_lapack, false); + } // initial guess of psi by perturbing lapack psi ModuleBase::matrix psiguess(nband, npw); std::default_random_engine p(1); @@ -104,7 +109,7 @@ class DiagoCGPrepare } } // run cg - //====================================================================== + //====================================================================== double* en = new double[npw]; int ik = 1; hamilt::Hamilt* ha; @@ -112,7 +117,7 @@ class DiagoCGPrepare int* ngk = new int[1]; psi::Psi psi; psi.resize(ik, nband, npw); - //psi.fix_k(0); + // psi.fix_k(0); for (int i = 0; i < nband; i++) { for (int j = 0; j < npw; j++) @@ -124,9 +129,12 @@ class DiagoCGPrepare psi::Psi psi_local; double* precondition_local; DIAGOTEST::npw_local = new int[nprocs]; -#ifdef __MPI +#ifdef __MPI DIAGOTEST::cal_division(DIAGOTEST::npw); - DIAGOTEST::divide_hpsi(psi, psi_local, DIAGOTEST::hmatrix_d, DIAGOTEST::hmatrix_local_d); //will distribute psi and Hmatrix to each process + DIAGOTEST::divide_hpsi(psi, + psi_local, + DIAGOTEST::hmatrix_d, + DIAGOTEST::hmatrix_local_d); // will distribute psi and Hmatrix to each process precondition_local = new double[DIAGOTEST::npw_local[mypnum]]; DIAGOTEST::divide_psi(precondition, precondition_local); #else @@ -134,7 +142,8 @@ class DiagoCGPrepare DIAGOTEST::npw_local[0] = DIAGOTEST::npw; psi_local = psi; precondition_local = new double[DIAGOTEST::npw]; - for (int i = 0;i < DIAGOTEST::npw;i++) precondition_local[i] = precondition[i]; + for (int i = 0; i < DIAGOTEST::npw; i++) + precondition_local[i] = precondition[i]; #endif // hsolver::DiagoCG cg(precondition_local); psi_local.fix_k(0); @@ -142,20 +151,18 @@ class DiagoCGPrepare // start = MPI_Wtime(); // cg.diag(ha, psi_local, en); - /**************************************************************/ // New interface of cg method /**************************************************************/ // warp the subspace_func into a lambda function auto subspace_func = [ha](const ct::Tensor& psi_in, ct::Tensor& psi_out) { /*do nothing*/ }; - hsolver::DiagoCG cg( - PARAM.input.basis_type, - PARAM.input.calculation, - hsolver::DiagoIterAssist::need_subspace, - subspace_func, - hsolver::DiagoIterAssist::PW_DIAG_THR, - hsolver::DiagoIterAssist::PW_DIAG_NMAX, - GlobalV::NPROC_IN_POOL); + hsolver::DiagoCG cg(PARAM.input.basis_type, + PARAM.input.calculation, + hsolver::DiagoIterAssist::need_subspace, + subspace_func, + hsolver::DiagoIterAssist::PW_DIAG_THR, + hsolver::DiagoIterAssist::PW_DIAG_NMAX, + GlobalV::NPROC_IN_POOL); // hsolver::DiagoCG cg(precondition_local); psi_local.fix_k(0); double start, end; @@ -164,10 +171,11 @@ class DiagoCGPrepare auto hpsi_func = [ha](const ct::Tensor& psi_in, ct::Tensor& hpsi_out) { const auto ndim = psi_in.shape().ndim(); REQUIRES_OK(ndim <= 2, "dims of psi_in should be less than or equal to 2"); - auto psi_wrapper = psi::Psi( - psi_in.data(), 1, - ndim == 1 ? 1 : psi_in.shape().dim_size(0), - ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), true); + auto psi_wrapper = psi::Psi(psi_in.data(), + 1, + ndim == 1 ? 1 : psi_in.shape().dim_size(0), + ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), + true); psi::Range all_bands_range(true, psi_wrapper.get_current_k(), 0, psi_wrapper.get_nbands() - 1); using hpsi_info = typename hamilt::Operator::hpsi_info; hpsi_info info(&psi_wrapper, all_bands_range, hpsi_out.data()); @@ -176,35 +184,36 @@ class DiagoCGPrepare auto spsi_func = [ha](const ct::Tensor& psi_in, ct::Tensor& spsi_out) { const auto ndim = psi_in.shape().ndim(); REQUIRES_OK(ndim <= 2, "dims of psi_in should be less than or equal to 2"); - ha->sPsi(psi_in.data(), spsi_out.data(), - ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), - ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), - ndim == 1 ? 1 : psi_in.shape().dim_size(0)); + ha->sPsi(psi_in.data(), + spsi_out.data(), + ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), + ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), + ndim == 1 ? 1 : psi_in.shape().dim_size(0)); }; - auto psi_tensor = ct::TensorMap( - psi_local.get_pointer(), - ct::DataType::DT_DOUBLE, - ct::DeviceType::CpuDevice, - ct::TensorShape({psi_local.get_nbands(), psi_local.get_nbasis()})).slice({0, 0}, {psi_local.get_nbands(), psi_local.get_current_ngk()}); - auto eigen_tensor = ct::TensorMap( - en, - ct::DataType::DT_DOUBLE, - ct::DeviceType::CpuDevice, - ct::TensorShape({psi_local.get_nbands()})); - auto prec_tensor = ct::TensorMap( - precondition_local, - ct::DataType::DT_DOUBLE, - ct::DeviceType::CpuDevice, - ct::TensorShape({static_cast(psi_local.get_current_ngk())})).slice({0}, {psi_local.get_current_ngk()}); + auto psi_tensor = ct::TensorMap(psi_local.get_pointer(), + ct::DataType::DT_DOUBLE, + ct::DeviceType::CpuDevice, + ct::TensorShape({psi_local.get_nbands(), psi_local.get_nbasis()})) + .slice({0, 0}, {psi_local.get_nbands(), psi_local.get_current_ngk()}); + auto eigen_tensor = ct::TensorMap(en, + ct::DataType::DT_DOUBLE, + ct::DeviceType::CpuDevice, + ct::TensorShape({psi_local.get_nbands()})); + auto prec_tensor = ct::TensorMap(precondition_local, + ct::DataType::DT_DOUBLE, + ct::DeviceType::CpuDevice, + ct::TensorShape({static_cast(psi_local.get_current_ngk())})) + .slice({0}, {psi_local.get_current_ngk()}); std::vector ethr_band(nband, 1e-5); cg.diag(hpsi_func, spsi_func, psi_tensor, eigen_tensor, ethr_band, prec_tensor); // TODO: Double check tensormap's potential problem - ct::TensorMap(psi_local.get_pointer(), psi_tensor, {psi_local.get_nbands(), psi_local.get_nbasis()}).sync(psi_tensor); + ct::TensorMap(psi_local.get_pointer(), psi_tensor, {psi_local.get_nbands(), psi_local.get_nbasis()}) + .sync(psi_tensor); /**************************************************************/ end = MPI_Wtime(); - //if(mypnum == 0) printf("diago time:%7.3f\n",end-start); + // if(mypnum == 0) printf("diago time:%7.3f\n",end-start); delete[] DIAGOTEST::npw_local; delete[] precondition_local; //====================================================================== @@ -237,15 +246,15 @@ TEST_P(DiagoCGTest, RandomHamilt) } INSTANTIATE_TEST_SUITE_P(VerifyCG, - DiagoCGTest, - ::testing::Values( - // nband, npw, sparsity, reorder, eps, maxiter, threshold - DiagoCGPrepare(10, 500, 0, true, 1e-5, 300, 1e-3), - DiagoCGPrepare(20, 500, 6, true, 1e-5, 300, 1e-3), - DiagoCGPrepare(20, 1000, 8, true, 1e-5, 300, 1e-3), - DiagoCGPrepare(40, 1000, 8, true, 1e-6, 300, 1e-3))); -//DiagoCGPrepare(40, 2000, 8, true, 1e-5, 500, 1e-2))); -// the last one is passed but time-consumming. + DiagoCGTest, + ::testing::Values( + // nband, npw, sparsity, reorder, eps, maxiter, threshold + DiagoCGPrepare(10, 500, 0, true, 1e-5, 300, 1e-3), + DiagoCGPrepare(20, 500, 6, true, 1e-5, 300, 1e-3), + DiagoCGPrepare(20, 1000, 8, true, 1e-5, 300, 1e-3), + DiagoCGPrepare(40, 1000, 8, true, 1e-6, 300, 1e-3))); +// DiagoCGPrepare(40, 2000, 8, true, 1e-5, 500, 1e-2))); +// the last one is passed but time-consumming. // check that the mock class HPsi work well // in generating a Hermite matrix @@ -327,8 +336,10 @@ int main(int argc, char** argv) testing::InitGoogleTest(&argc, argv); ::testing::TestEventListeners& listeners = ::testing::UnitTest::GetInstance()->listeners(); - if (myrank != 0) { delete listeners.Release(listeners.default_result_printer()); -} + if (myrank != 0) + { + delete listeners.Release(listeners.default_result_printer()); + } int result = RUN_ALL_TESTS(); if (myrank == 0 && result != 0) diff --git a/source/source_hsolver/test/diago_cg_test.cpp b/source/source_hsolver/test/diago_cg_test.cpp index 0365766638..2049ee0c0d 100644 --- a/source/source_hsolver/test/diago_cg_test.cpp +++ b/source/source_hsolver/test/diago_cg_test.cpp @@ -2,21 +2,20 @@ #define private public #include "module_parameter/parameter.h" #undef private -#include "module_base/inverse_matrix.h" -#include "module_base/lapack_connector.h" -#include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" -#include "module_psi/psi.h" -#include "module_hamilt_general/hamilt.h" -#include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" #include "../diago_cg.h" #include "../diago_iter_assist.h" #include "diago_mock.h" -#include "mpi.h" #include "module_basis/module_pw/test/test_tool.h" -#include +#include "module_hamilt_general/hamilt.h" +#include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" +#include "module_hamilt_pw/hamilt_pwdft/structure_factor.h" +#include "module_psi/psi.h" +#include "mpi.h" +#include "source_base/inverse_matrix.h" +#include "source_base/lapack_connector.h" #include - +#include #include /************************************************ @@ -40,20 +39,21 @@ */ // call lapack in order to compare to cg -void lapackEigen(int &npw, std::vector> &hm, double *e, bool outtime = false) +void lapackEigen(int& npw, std::vector>& hm, double* e, bool outtime = false) { clock_t start, end; start = clock(); int lwork = 2 * npw; - std::complex *work2 = new std::complex[lwork]; - double *rwork = new double[3 * npw - 2]; + std::complex* work2 = new std::complex[lwork]; + double* rwork = new double[3 * npw - 2]; int info = 0; char tmp_c1 = 'V', tmp_c2 = 'U'; zheev_(&tmp_c1, &tmp_c2, &npw, hm.data(), &npw, e, work2, &lwork, rwork, &info); end = clock(); - if (outtime) { + if (outtime) + { std::cout << "Lapack Run time: " << (double)(end - start) / CLOCKS_PER_SEC << " S" << std::endl; -} + } delete[] rwork; delete[] work2; } @@ -62,13 +62,12 @@ class DiagoCGPrepare { public: DiagoCGPrepare(int nband, int npw, int sparsity, bool reorder, double eps, int maxiter, double threshold) - : nband(nband), npw(npw), sparsity(sparsity), reorder(reorder), eps(eps), maxiter(maxiter), - threshold(threshold) + : nband(nband), npw(npw), sparsity(sparsity), reorder(reorder), eps(eps), maxiter(maxiter), threshold(threshold) { -#ifdef __MPI - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); +#ifdef __MPI + MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); -#endif +#endif } int nband, npw, sparsity, maxiter, notconv; @@ -76,16 +75,18 @@ class DiagoCGPrepare double eps, avg_iter; bool reorder; double threshold; - int nprocs=1, mypnum=0; + int nprocs = 1, mypnum = 0; // threshold is the comparison standard between cg and lapack - void CompareEigen(double *precondition) + void CompareEigen(double* precondition) { // calculate eigenvalues by LAPACK; - double *e_lapack = new double[npw]; + double* e_lapack = new double[npw]; auto ev = DIAGOTEST::hmatrix; - if(mypnum == 0) { lapackEigen(npw, ev, e_lapack, false); -} + if (mypnum == 0) + { + lapackEigen(npw, ev, e_lapack, false); + } // initial guess of psi by perturbing lapack psi ModuleBase::ComplexMatrix psiguess(nband, npw); std::default_random_engine p(1); @@ -94,42 +95,46 @@ class DiagoCGPrepare { for (int j = 0; j < npw; j++) { - double rand = static_cast(u(p))/10.; + double rand = static_cast(u(p)) / 10.; // psiguess(i,j) = ev(j,i)*(1+rand); psiguess(i, j) = ev[j * DIAGOTEST::h_nc + i] * rand; } } // run cg - //====================================================================== - double *en = new double[npw]; + //====================================================================== + double* en = new double[npw]; int ik = 1; - hamilt::Hamilt>* ha; - ha =new hamilt::HamiltPW>(nullptr, nullptr, nullptr, nullptr,nullptr); - psi::Psi> psi; - psi.resize(ik,nband,npw); - //psi.fix_k(0); + hamilt::Hamilt>* ha; + ha = new hamilt::HamiltPW>(nullptr, nullptr, nullptr, nullptr, nullptr); + psi::Psi> psi; + psi.resize(ik, nband, npw); + // psi.fix_k(0); for (int i = 0; i < nband; i++) { for (int j = 0; j < npw; j++) { - psi(i,j)=psiguess(i,j); - } - } + psi(i, j) = psiguess(i, j); + } + } psi::Psi> psi_local; double* precondition_local; DIAGOTEST::npw_local = new int[nprocs]; -#ifdef __MPI - DIAGOTEST::cal_division(DIAGOTEST::npw); - DIAGOTEST::divide_hpsi(psi, psi_local, DIAGOTEST::hmatrix, DIAGOTEST::hmatrix_local); //will distribute psi and Hmatrix to each process - precondition_local = new double[DIAGOTEST::npw_local[mypnum]]; - DIAGOTEST::divide_psi(precondition,precondition_local); +#ifdef __MPI + DIAGOTEST::cal_division(DIAGOTEST::npw); + DIAGOTEST::divide_hpsi(psi, + psi_local, + DIAGOTEST::hmatrix, + DIAGOTEST::hmatrix_local); // will distribute psi and Hmatrix to each process + precondition_local = new double[DIAGOTEST::npw_local[mypnum]]; + DIAGOTEST::divide_psi(precondition, precondition_local); #else - DIAGOTEST::hmatrix_local = DIAGOTEST::hmatrix; - DIAGOTEST::npw_local[0] = DIAGOTEST::npw; - psi_local = psi; - precondition_local = new double[DIAGOTEST::npw]; - for(int i=0;i> cg( - PARAM.input.basis_type, - PARAM.input.calculation, - hsolver::DiagoIterAssist>::need_subspace, - subspace_func, - hsolver::DiagoIterAssist>::PW_DIAG_THR, - hsolver::DiagoIterAssist>::PW_DIAG_NMAX, - GlobalV::NPROC_IN_POOL); + hsolver::DiagoCG> cg(PARAM.input.basis_type, + PARAM.input.calculation, + hsolver::DiagoIterAssist>::need_subspace, + subspace_func, + hsolver::DiagoIterAssist>::PW_DIAG_THR, + hsolver::DiagoIterAssist>::PW_DIAG_NMAX, + GlobalV::NPROC_IN_POOL); // hsolver::DiagoCG> cg(precondition_local); psi_local.fix_k(0); double start, end; @@ -153,10 +157,12 @@ class DiagoCGPrepare auto hpsi_func = [ha](const ct::Tensor& psi_in, ct::Tensor& hpsi_out) { const auto ndim = psi_in.shape().ndim(); REQUIRES_OK(ndim <= 2, "dims of psi_in should be less than or equal to 2"); - auto psi_wrapper = psi::Psi>( - psi_in.data>(), 1, - ndim == 1 ? 1 : psi_in.shape().dim_size(0), - ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), true); + auto psi_wrapper + = psi::Psi>(psi_in.data>(), + 1, + ndim == 1 ? 1 : psi_in.shape().dim_size(0), + ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), + true); psi::Range all_bands_range(true, psi_wrapper.get_current_k(), 0, psi_wrapper.get_nbands() - 1); using hpsi_info = typename hamilt::Operator>::hpsi_info; hpsi_info info(&psi_wrapper, all_bands_range, hpsi_out.data>()); @@ -165,39 +171,40 @@ class DiagoCGPrepare auto spsi_func = [ha](const ct::Tensor& psi_in, ct::Tensor& spsi_out) { const auto ndim = psi_in.shape().ndim(); REQUIRES_OK(ndim <= 2, "dims of psi_in should be less than or equal to 2"); - ha->sPsi(psi_in.data>(), spsi_out.data>(), - ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), - ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), - ndim == 1 ? 1 : psi_in.shape().dim_size(0)); + ha->sPsi(psi_in.data>(), + spsi_out.data>(), + ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), + ndim == 1 ? psi_in.NumElements() : psi_in.shape().dim_size(1), + ndim == 1 ? 1 : psi_in.shape().dim_size(0)); }; - auto psi_tensor = ct::TensorMap( - psi_local.get_pointer(), - ct::DataType::DT_COMPLEX_DOUBLE, - ct::DeviceType::CpuDevice, - ct::TensorShape({psi_local.get_nbands(), psi_local.get_nbasis()})).slice({0, 0}, {psi_local.get_nbands(), psi_local.get_current_ngk()}); - auto eigen_tensor = ct::TensorMap( - en, - ct::DataType::DT_DOUBLE, - ct::DeviceType::CpuDevice, - ct::TensorShape({psi_local.get_nbands()})); - auto prec_tensor = ct::TensorMap( - precondition_local, - ct::DataType::DT_DOUBLE, - ct::DeviceType::CpuDevice, - ct::TensorShape({static_cast(psi_local.get_current_ngk())})).slice({0}, {psi_local.get_current_ngk()}); + auto psi_tensor = ct::TensorMap(psi_local.get_pointer(), + ct::DataType::DT_COMPLEX_DOUBLE, + ct::DeviceType::CpuDevice, + ct::TensorShape({psi_local.get_nbands(), psi_local.get_nbasis()})) + .slice({0, 0}, {psi_local.get_nbands(), psi_local.get_current_ngk()}); + auto eigen_tensor = ct::TensorMap(en, + ct::DataType::DT_DOUBLE, + ct::DeviceType::CpuDevice, + ct::TensorShape({psi_local.get_nbands()})); + auto prec_tensor = ct::TensorMap(precondition_local, + ct::DataType::DT_DOUBLE, + ct::DeviceType::CpuDevice, + ct::TensorShape({static_cast(psi_local.get_current_ngk())})) + .slice({0}, {psi_local.get_current_ngk()}); std::vector ethr_band(nband, 1e-5); cg.diag(hpsi_func, spsi_func, psi_tensor, eigen_tensor, ethr_band, prec_tensor); // TODO: Double check tensormap's potential problem - ct::TensorMap(psi_local.get_pointer(), psi_tensor, {psi_local.get_nbands(), psi_local.get_nbasis()}).sync(psi_tensor); + ct::TensorMap(psi_local.get_pointer(), psi_tensor, {psi_local.get_nbands(), psi_local.get_nbasis()}) + .sync(psi_tensor); /**************************************************************/ - // cg.diag(ha,psi_local,en); + // cg.diag(ha,psi_local,en); end = MPI_Wtime(); - //if(mypnum == 0) printf("diago time:%7.3f\n",end-start); - delete [] DIAGOTEST::npw_local; - delete [] precondition_local; - //====================================================================== + // if(mypnum == 0) printf("diago time:%7.3f\n",end-start); + delete[] DIAGOTEST::npw_local; + delete[] precondition_local; + //====================================================================== for (int i = 0; i < nband; i++) { EXPECT_NEAR(en[i], e_lapack[i], threshold); @@ -216,12 +223,12 @@ class DiagoCGTest : public ::testing::TestWithParam TEST_P(DiagoCGTest, RandomHamilt) { DiagoCGPrepare dcp = GetParam(); - //std::cout << "npw=" << dcp.npw << ", nband=" << dcp.nband << ", sparsity=" + // std::cout << "npw=" << dcp.npw << ", nband=" << dcp.nband << ", sparsity=" // << dcp.sparsity << ", eps=" << dcp.eps << std::endl; hsolver::DiagoIterAssist>::PW_DIAG_NMAX = dcp.maxiter; hsolver::DiagoIterAssist>::PW_DIAG_THR = dcp.eps; - //std::cout<<"maxiter "<>::PW_DIAG_NMAX<>::PW_DIAG_THR<>::PW_DIAG_NMAX<>::PW_DIAG_THR<> hpsi(dcp.nband, dcp.npw, dcp.sparsity); DIAGOTEST::hmatrix = hpsi.hamilt(); @@ -237,9 +244,9 @@ INSTANTIATE_TEST_SUITE_P(VerifyCG, DiagoCGPrepare(10, 500, 0, true, 1e-5, 300, 1e-3), DiagoCGPrepare(20, 500, 6, true, 1e-5, 300, 1e-3), DiagoCGPrepare(20, 1000, 8, true, 1e-5, 300, 1e-3), - DiagoCGPrepare(40, 1000, 8, true, 1e-6, 300, 1e-3))); - //DiagoCGPrepare(40, 2000, 8, true, 1e-5, 500, 1e-2))); - // the last one is passed but time-consumming. + DiagoCGPrepare(40, 1000, 8, true, 1e-6, 300, 1e-3))); +// DiagoCGPrepare(40, 2000, 8, true, 1e-5, 500, 1e-2))); +// the last one is passed but time-consumming. // check that the mock class HPsi work well // in generating a Hermite matrix @@ -330,31 +337,33 @@ TEST(DiagoCGTest, readH) dcp.CompareEigen(hpsi.precond()); } -int main(int argc, char **argv) +int main(int argc, char** argv) { - int nproc = 1, myrank = 0; + int nproc = 1, myrank = 0; #ifdef __MPI - int nproc_in_pool, kpar=1, mypool, rank_in_pool; - setupmpi(argc,argv,nproc, myrank); + int nproc_in_pool, kpar = 1, mypool, rank_in_pool; + setupmpi(argc, argv, nproc, myrank); divide_pools(nproc, myrank, nproc_in_pool, kpar, mypool, rank_in_pool); GlobalV::NPROC_IN_POOL = nproc; #else - MPI_Init(&argc, &argv); + MPI_Init(&argc, &argv); #endif testing::InitGoogleTest(&argc, argv); - ::testing::TestEventListeners &listeners = ::testing::UnitTest::GetInstance()->listeners(); - if (myrank != 0) { delete listeners.Release(listeners.default_result_printer()); -} + ::testing::TestEventListeners& listeners = ::testing::UnitTest::GetInstance()->listeners(); + if (myrank != 0) + { + delete listeners.Release(listeners.default_result_printer()); + } int result = RUN_ALL_TESTS(); if (myrank == 0 && result != 0) { std::cout << "ERROR:some tests are not passed" << std::endl; return result; - } + } MPI_Finalize(); - return 0; + return 0; } diff --git a/source/source_hsolver/test/diago_david_float_test.cpp b/source/source_hsolver/test/diago_david_float_test.cpp index 7f4bfd1f88..010e09ed65 100644 --- a/source/source_hsolver/test/diago_david_float_test.cpp +++ b/source/source_hsolver/test/diago_david_float_test.cpp @@ -1,21 +1,21 @@ -#include"source_hsolver/diago_david.h" -#include"source_hsolver/diago_iter_assist.h" -#include"module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" -#include"diago_mock.h" -#include "module_psi/psi.h" -#include"gtest/gtest.h" -#include "module_base/inverse_matrix.h" -#include "module_base/lapack_connector.h" +#include "diago_mock.h" #include "module_basis/module_pw/test/test_tool.h" -#include"mpi.h" +#include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" +#include "module_psi/psi.h" +#include "mpi.h" +#include "source_base/inverse_matrix.h" +#include "source_base/lapack_connector.h" +#include "source_hsolver/diago_david.h" +#include "source_hsolver/diago_iter_assist.h" + +#include "gtest/gtest.h" #define CONVTHRESHOLD 1e-0 #define DETAILINFO false - /************************************************ -* unit test of class Diago_David -***********************************************/ + * unit test of class Diago_David + ***********************************************/ /** * Class Diago_David is used to solve the eigenvalues @@ -25,242 +25,257 @@ * - the hamilt matrix (npw=100,500,1000) produced by random with sparsity of 50% * - the hamilt matrix (npw=100,500,1000) produced by random with sparsity of 0% * - the hamilt matrix read from "data-H" - * + * * The test is passed when the eignvalues are closed to these calculated by LAPACK. - * + * */ -//use lapack to calcualte eigenvalue of matrix hm -//NOTE: after finish this function, hm stores the eigen vectors. -void lapackEigen(int &npw, std::vector> &hm, float * e, bool outtime=false) +// use lapack to calcualte eigenvalue of matrix hm +// NOTE: after finish this function, hm stores the eigen vectors. +void lapackEigen(int& npw, std::vector>& hm, float* e, bool outtime = false) { - int lwork = 2 * npw; - std::complex *work2= new std::complex[lwork]; - float* rwork = new float[3*npw-2]; - int info = 0; - - auto tmp = hm; - - clock_t start,end; - start = clock(); - char tmp_c1 = 'V', tmp_c2 = 'U'; - cheev_(&tmp_c1, &tmp_c2, &npw, tmp.data(), &npw, e, work2, &lwork, rwork, &info); - end = clock(); - if(info) { std::cout << "ERROR: Lapack solver, info=" << info <* work2 = new std::complex[lwork]; + float* rwork = new float[3 * npw - 2]; + int info = 0; + + auto tmp = hm; + + clock_t start, end; + start = clock(); + char tmp_c1 = 'V', tmp_c2 = 'U'; + cheev_(&tmp_c1, &tmp_c2, &npw, tmp.data(), &npw, e, work2, &lwork, rwork, &info); + end = clock(); + if (info) + { + std::cout << "ERROR: Lapack solver, info=" << info << std::endl; + } + if (outtime) + { + std::cout << "Lapack Run time: " << (float)(end - start) / CLOCKS_PER_SEC << " S" << std::endl; + } - delete [] rwork; - delete [] work2; + delete[] rwork; + delete[] work2; } -class DiagoDavPrepare +class DiagoDavPrepare { -public: - DiagoDavPrepare(int nband, int npw, int sparsity, int order,float eps,int maxiter): - nband(nband),npw(npw),sparsity(sparsity),order(order),eps(eps),maxiter(maxiter) - { -#ifdef __MPI - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); + public: + DiagoDavPrepare(int nband, int npw, int sparsity, int order, float eps, int maxiter) + : nband(nband), npw(npw), sparsity(sparsity), order(order), eps(eps), maxiter(maxiter) + { +#ifdef __MPI + MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); -#endif - } - - int nband, npw, sparsity, order, maxiter, notconv; - float eps, avg_iter; - int nprocs=1, mypnum=0; - - void CompareEigen(psi::Psi> &phi, float *precondition) - { - //calculate eigenvalues by LAPACK; - float* e_lapack = new float[npw]; - float* ev; - if(mypnum == 0) { lapackEigen(npw, DIAGOTEST::hmatrix_f, e_lapack,DETAILINFO); -} +#endif + } + + int nband, npw, sparsity, order, maxiter, notconv; + float eps, avg_iter; + int nprocs = 1, mypnum = 0; - //do Diago_David::diag() - float* en = new float[npw]; - hamilt::Hamilt> *phm; - phm = new hamilt::HamiltPW>(nullptr, nullptr, nullptr, nullptr,nullptr); + void CompareEigen(psi::Psi>& phi, float* precondition) + { + // calculate eigenvalues by LAPACK; + float* e_lapack = new float[npw]; + float* ev; + if (mypnum == 0) + { + lapackEigen(npw, DIAGOTEST::hmatrix_f, e_lapack, DETAILINFO); + } + + // do Diago_David::diag() + float* en = new float[npw]; + hamilt::Hamilt>* phm; + phm = new hamilt::HamiltPW>(nullptr, nullptr, nullptr, nullptr, nullptr); -#ifdef __MPI +#ifdef __MPI const hsolver::diag_comm_info comm_info = {MPI_COMM_WORLD, mypnum, nprocs}; #else - const hsolver::diag_comm_info comm_info = {mypnum, nprocs}; + const hsolver::diag_comm_info comm_info = {mypnum, nprocs}; #endif - const int dim = phi.get_current_ngk() ; - const int nband = phi.get_nbands(); - const int ld_psi =phi.get_nbasis(); - hsolver::DiagoDavid> dav(precondition, nband, dim, order, false, comm_info); + const int dim = phi.get_current_ngk(); + const int nband = phi.get_nbands(); + const int ld_psi = phi.get_nbasis(); + hsolver::DiagoDavid> dav(precondition, nband, dim, order, false, comm_info); - hsolver::DiagoIterAssist>::PW_DIAG_NMAX = maxiter; - hsolver::DiagoIterAssist>::PW_DIAG_THR = eps; - GlobalV::NPROC_IN_POOL = nprocs; - phi.fix_k(0); + hsolver::DiagoIterAssist>::PW_DIAG_NMAX = maxiter; + hsolver::DiagoIterAssist>::PW_DIAG_THR = eps; + GlobalV::NPROC_IN_POOL = nprocs; + phi.fix_k(0); - float use_time = 0.0; -#ifdef __MPI - float start = 0.0, end = 0.0; - start = MPI_Wtime(); + float use_time = 0.0; +#ifdef __MPI + float start = 0.0, end = 0.0; + start = MPI_Wtime(); #else - clock_t start, end; - start = clock(); -#endif - - - auto hpsi_func = [phm](std::complex* psi_in,std::complex* hpsi_out, - const int ld_psi, const int nvec) - { - auto psi_iter_wrapper = psi::Psi>(psi_in, 1, nvec, ld_psi, true); - psi::Range bands_range(true, 0, 0, nvec-1); - using hpsi_info = typename hamilt::Operator>::hpsi_info; - hpsi_info info(&psi_iter_wrapper, bands_range, hpsi_out); - phm->ops->hPsi(info); - }; + clock_t start, end; + start = clock(); +#endif + + auto hpsi_func + = [phm](std::complex* psi_in, std::complex* hpsi_out, const int ld_psi, const int nvec) { + auto psi_iter_wrapper = psi::Psi>(psi_in, 1, nvec, ld_psi, true); + psi::Range bands_range(true, 0, 0, nvec - 1); + using hpsi_info = typename hamilt::Operator>::hpsi_info; + hpsi_info info(&psi_iter_wrapper, bands_range, hpsi_out); + phm->ops->hPsi(info); + }; auto spsi_func = [phm](const std::complex* psi_in, std::complex* spsi_out, const int ld_psi, const int nbands) { phm->sPsi(psi_in, spsi_out, ld_psi, ld_psi, nbands); }; std::vector ethr_band(phi.get_nbands(), eps); - dav.diag(hpsi_func,spsi_func, ld_psi, phi.get_pointer(), en, ethr_band, maxiter); - -#ifdef __MPI - end = MPI_Wtime(); - use_time = end - start; -#else - end = clock(); - use_time = (float)(end-start); -#endif - - if(mypnum == 0) - { - if (DETAILINFO) { std::cout<<"diag Run time: "<< use_time << std::endl; -} - for(int i=0;i {}; +class DiagoDavTest : public ::testing::TestWithParam +{ +}; -TEST_P(DiagoDavTest,RandomHamilt) +TEST_P(DiagoDavTest, RandomHamilt) { - DiagoDavPrepare ddp = GetParam(); - if (DETAILINFO&&ddp.mypnum==0) { std::cout << "npw=" << ddp.npw << ", nband=" << ddp.nband << ", sparsity=" - << ddp.sparsity << ", eps=" << ddp.eps << std::endl; -} + DiagoDavPrepare ddp = GetParam(); + if (DETAILINFO && ddp.mypnum == 0) + { + std::cout << "npw=" << ddp.npw << ", nband=" << ddp.nband << ", sparsity=" << ddp.sparsity + << ", eps=" << ddp.eps << std::endl; + } HPsi> hpsi(ddp.nband, ddp.npw, ddp.sparsity); - DIAGOTEST::hmatrix_f = hpsi.hamilt(); - DIAGOTEST::npw = ddp.npw; - DIAGOTEST::npw_local = new int[ddp.nprocs]; - psi::Psi> psi = hpsi.psi(); - psi::Psi> psi_local; - float* precondition_local; - -#ifdef __MPI - DIAGOTEST::cal_division(DIAGOTEST::npw); + DIAGOTEST::hmatrix_f = hpsi.hamilt(); + DIAGOTEST::npw = ddp.npw; + DIAGOTEST::npw_local = new int[ddp.nprocs]; + psi::Psi> psi = hpsi.psi(); + psi::Psi> psi_local; + float* precondition_local; + +#ifdef __MPI + DIAGOTEST::cal_division(DIAGOTEST::npw); DIAGOTEST::divide_hpsi(psi, psi_local, DIAGOTEST::hmatrix_f, DIAGOTEST::hmatrix_local_f); - precondition_local = new float[DIAGOTEST::npw_local[ddp.mypnum]]; + precondition_local = new float[DIAGOTEST::npw_local[ddp.mypnum]]; DIAGOTEST::divide_psi(hpsi.precond(), precondition_local); #else - DIAGOTEST::hmatrix_local_f = DIAGOTEST::hmatrix_f; - DIAGOTEST::npw_local[0] = DIAGOTEST::npw; - psi_local = psi; - precondition_local = new float[DIAGOTEST::npw]; - for(int i=0;i> hmatrix; - std::ifstream ifs; - std::string filename = "H-KPoints-Si64.dat"; - ifs.open(filename); + std::vector> hmatrix; + std::ifstream ifs; + std::string filename = "H-KPoints-Si64.dat"; + ifs.open(filename); // open file and check status if (!ifs.is_open()) { std::cout << "Error opening file " << filename << std::endl; exit(1); } - DIAGOTEST::readh(ifs,hmatrix); - ifs.close(); - DIAGOTEST::hmatrix_f = hmatrix; - int nband = std::max(DIAGOTEST::npw/20,1); + DIAGOTEST::readh(ifs, hmatrix); + ifs.close(); + DIAGOTEST::hmatrix_f = hmatrix; + int nband = std::max(DIAGOTEST::npw / 20, 1); + + DiagoDavPrepare ddp(nband, DIAGOTEST::npw, 0, 2, 1e-5, 500); - DiagoDavPrepare ddp(nband,DIAGOTEST::npw,0,2,1e-5,500); - HPsi> hpsi(nband, DIAGOTEST::npw); - psi::Psi> psi = hpsi.psi(); - DIAGOTEST::npw_local = new int[ddp.nprocs]; - psi::Psi> psi_local; - float* precondition_local; + psi::Psi> psi = hpsi.psi(); + DIAGOTEST::npw_local = new int[ddp.nprocs]; + psi::Psi> psi_local; + float* precondition_local; -#ifdef __MPI - DIAGOTEST::cal_division(DIAGOTEST::npw); +#ifdef __MPI + DIAGOTEST::cal_division(DIAGOTEST::npw); DIAGOTEST::divide_hpsi(psi, psi_local, DIAGOTEST::hmatrix_f, DIAGOTEST::hmatrix_local_f); - precondition_local = new float[DIAGOTEST::npw_local[ddp.mypnum]]; + precondition_local = new float[DIAGOTEST::npw_local[ddp.mypnum]]; DIAGOTEST::divide_psi(hpsi.precond(), precondition_local); #else - DIAGOTEST::hmatrix_local_f = DIAGOTEST::hmatrix_f; - DIAGOTEST::npw_local[0] = DIAGOTEST::npw; - psi_local = psi; - precondition_local = new float[DIAGOTEST::npw]; - for(int i=0;ilisteners(); - if (myrank != 0) { delete listeners.Release(listeners.default_result_printer()); -} + ::testing::TestEventListeners& listeners = ::testing::UnitTest::GetInstance()->listeners(); + if (myrank != 0) + { + delete listeners.Release(listeners.default_result_printer()); + } int result = RUN_ALL_TESTS(); if (myrank == 0 && result != 0) { std::cout << "ERROR:some tests are not passed" << std::endl; return result; - } + } MPI_Finalize(); - return 0; + return 0; } diff --git a/source/source_hsolver/test/diago_david_real_test.cpp b/source/source_hsolver/test/diago_david_real_test.cpp index b9109faa78..a283c11b68 100644 --- a/source/source_hsolver/test/diago_david_real_test.cpp +++ b/source/source_hsolver/test/diago_david_real_test.cpp @@ -1,21 +1,21 @@ -#include"source_hsolver/diago_david.h" -#include"source_hsolver/diago_iter_assist.h" -#include"module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" -#include"diago_mock.h" -#include "module_psi/psi.h" -#include"gtest/gtest.h" -#include "module_base/inverse_matrix.h" -#include "module_base/lapack_connector.h" +#include "diago_mock.h" #include "module_basis/module_pw/test/test_tool.h" -#include"mpi.h" +#include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" +#include "module_psi/psi.h" +#include "mpi.h" +#include "source_base/inverse_matrix.h" +#include "source_base/lapack_connector.h" +#include "source_hsolver/diago_david.h" +#include "source_hsolver/diago_iter_assist.h" + +#include "gtest/gtest.h" #define CONVTHRESHOLD 1e-0 #define DETAILINFO false - /************************************************ -* unit test of class Diago_David -***********************************************/ + * unit test of class Diago_David + ***********************************************/ /** * Class Diago_David is used to solve the eigenvalues @@ -30,8 +30,8 @@ * */ - //use lapack to calcualte eigenvalue of matrix hm - //NOTE: after finish this function, hm stores the eigen vectors. +// use lapack to calcualte eigenvalue of matrix hm +// NOTE: after finish this function, hm stores the eigen vectors. void lapackEigen(int& npw, std::vector& hm, double* e, bool outtime = false) { int info = 0; @@ -42,28 +42,32 @@ void lapackEigen(int& npw, std::vector& hm, double* e, bool outtime = fa double work_tmp; constexpr int minus_one = -1; - dsyev_(&tmp_c1, &tmp_c2, &npw, tmp.data(), &npw, e, &work_tmp, &minus_one, &info); // get best lwork + dsyev_(&tmp_c1, &tmp_c2, &npw, tmp.data(), &npw, e, &work_tmp, &minus_one, &info); // get best lwork const int lwork = work_tmp; double* work2 = new double[lwork]; dsyev_(&tmp_c1, &tmp_c2, &npw, tmp.data(), &npw, e, work2, &lwork, &info); end = clock(); - if (info) { std::cout << "ERROR: Lapack solver, info=" << info << std::endl; -} - if (outtime) { std::cout << "Lapack Run time: " << (double)(end - start) / CLOCKS_PER_SEC << " S" << std::endl; -} + if (info) + { + std::cout << "ERROR: Lapack solver, info=" << info << std::endl; + } + if (outtime) + { + std::cout << "Lapack Run time: " << (double)(end - start) / CLOCKS_PER_SEC << " S" << std::endl; + } delete[] work2; } class DiagoDavPrepare { -public: - DiagoDavPrepare(int nband, int npw, int sparsity, int order, double eps, int maxiter) : - nband(nband), npw(npw), sparsity(sparsity), order(order), eps(eps), maxiter(maxiter) + public: + DiagoDavPrepare(int nband, int npw, int sparsity, int order, double eps, int maxiter) + : nband(nband), npw(npw), sparsity(sparsity), order(order), eps(eps), maxiter(maxiter) { -#ifdef __MPI +#ifdef __MPI MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); -#endif +#endif } int nband, npw, sparsity, order, maxiter, notconv; @@ -72,24 +76,26 @@ class DiagoDavPrepare void CompareEigen(psi::Psi& phi, double* precondition) { - //calculate eigenvalues by LAPACK; + // calculate eigenvalues by LAPACK; double* e_lapack = new double[npw]; double* ev; - if (mypnum == 0) { lapackEigen(npw, DIAGOTEST::hmatrix_d, e_lapack, DETAILINFO); -} + if (mypnum == 0) + { + lapackEigen(npw, DIAGOTEST::hmatrix_d, e_lapack, DETAILINFO); + } - //do Diago_David::diag() + // do Diago_David::diag() double* en = new double[npw]; hamilt::Hamilt* phm; - phm = new hamilt::HamiltPW(nullptr, nullptr, nullptr, nullptr,nullptr); + phm = new hamilt::HamiltPW(nullptr, nullptr, nullptr, nullptr, nullptr); -#ifdef __MPI +#ifdef __MPI const hsolver::diag_comm_info comm_info = {MPI_COMM_WORLD, mypnum, nprocs}; #else const hsolver::diag_comm_info comm_info = {mypnum, nprocs}; #endif - const int dim = phi.get_current_ngk(); + const int dim = phi.get_current_ngk(); const int nband = phi.get_nbands(); const int ld_psi = phi.get_nbasis(); hsolver::DiagoDavid dav(precondition, nband, dim, order, false, comm_info); @@ -100,43 +106,42 @@ class DiagoDavPrepare phi.fix_k(0); double use_time = 0.0; -#ifdef __MPI +#ifdef __MPI double start = 0.0, end = 0.0; start = MPI_Wtime(); #else clock_t start, end; start = clock(); -#endif - - - auto hpsi_func = [phm](double* psi_in,double* hpsi_out, - const int ld_psi, const int nvec) - { - auto psi_iter_wrapper = psi::Psi(psi_in, 1, nvec, ld_psi, true); - psi::Range bands_range(true, 0, 0, nvec-1); - using hpsi_info = typename hamilt::Operator::hpsi_info; - hpsi_info info(&psi_iter_wrapper, bands_range, hpsi_out); - phm->ops->hPsi(info); - }; +#endif + + auto hpsi_func = [phm](double* psi_in, double* hpsi_out, const int ld_psi, const int nvec) { + auto psi_iter_wrapper = psi::Psi(psi_in, 1, nvec, ld_psi, true); + psi::Range bands_range(true, 0, 0, nvec - 1); + using hpsi_info = typename hamilt::Operator::hpsi_info; + hpsi_info info(&psi_iter_wrapper, bands_range, hpsi_out); + phm->ops->hPsi(info); + }; auto spsi_func = [phm](const double* psi_in, double* spsi_out, const int ld_psi, const int nbands) { - phm->sPsi(psi_in, spsi_out, ld_psi, ld_psi, nbands); + phm->sPsi(psi_in, spsi_out, ld_psi, ld_psi, nbands); }; std::vector ethr_band(phi.get_nbands(), eps); - dav.diag(hpsi_func,spsi_func, ld_psi, phi.get_pointer(), en, ethr_band, maxiter); + dav.diag(hpsi_func, spsi_func, ld_psi, phi.get_pointer(), en, ethr_band, maxiter); -#ifdef __MPI +#ifdef __MPI end = MPI_Wtime(); use_time = end - start; -#else +#else end = clock(); use_time = (double)(end - start); -#endif +#endif if (mypnum == 0) { - if (DETAILINFO) { std::cout << "diag Run time: " << use_time << std::endl; -} - for (int i = 0;i < nband;i++) + if (DETAILINFO) + { + std::cout << "diag Run time: " << use_time << std::endl; + } + for (int i = 0; i < nband; i++) { EXPECT_NEAR(en[i], e_lapack[i], CONVTHRESHOLD); } @@ -147,14 +152,18 @@ class DiagoDavPrepare } }; -class DiagoDavTest : public ::testing::TestWithParam {}; +class DiagoDavTest : public ::testing::TestWithParam +{ +}; TEST_P(DiagoDavTest, RandomHamilt) { DiagoDavPrepare ddp = GetParam(); - if (DETAILINFO && ddp.mypnum == 0) { std::cout << "npw=" << ddp.npw << ", nband=" << ddp.nband << ", sparsity=" - << ddp.sparsity << ", eps=" << ddp.eps << std::endl; -} + if (DETAILINFO && ddp.mypnum == 0) + { + std::cout << "npw=" << ddp.npw << ", nband=" << ddp.nband << ", sparsity=" << ddp.sparsity + << ", eps=" << ddp.eps << std::endl; + } HPsi hpsi(ddp.nband, ddp.npw, ddp.sparsity); DIAGOTEST::hmatrix_d = hpsi.hamilt(); @@ -164,7 +173,7 @@ TEST_P(DiagoDavTest, RandomHamilt) psi::Psi psi_local; double* precondition_local; -#ifdef __MPI +#ifdef __MPI DIAGOTEST::cal_division(DIAGOTEST::npw); DIAGOTEST::divide_hpsi(psi, psi_local, DIAGOTEST::hmatrix_d, DIAGOTEST::hmatrix_local_d); precondition_local = new double[DIAGOTEST::npw_local[ddp.mypnum]]; @@ -174,7 +183,8 @@ TEST_P(DiagoDavTest, RandomHamilt) DIAGOTEST::npw_local[0] = DIAGOTEST::npw; psi_local = psi; precondition_local = new double[DIAGOTEST::npw]; - for (int i = 0;i < DIAGOTEST::npw;i++) precondition_local[i] = (hpsi.precond())[i]; + for (int i = 0; i < DIAGOTEST::npw; i++) + precondition_local[i] = (hpsi.precond())[i]; #endif ddp.CompareEigen(psi_local, precondition_local); @@ -182,14 +192,15 @@ TEST_P(DiagoDavTest, RandomHamilt) delete[] precondition_local; } - -INSTANTIATE_TEST_SUITE_P(VerifyDiag, DiagoDavTest, ::testing::Values( - //DiagoDavPrepare(int nband, int npw, int sparsity, int order,double eps,int maxiter) - DiagoDavPrepare(10, 100, 0, 4, 1e-5, 500), - DiagoDavPrepare(20, 500, 7, 4, 1e-5, 500) - //DiagoDavPrepare(50,1000,8,4,1e-5,500) - //DiagoDavPrepare(20,2000,8,4,1e-5,500) -)); +INSTANTIATE_TEST_SUITE_P(VerifyDiag, + DiagoDavTest, + ::testing::Values( + // DiagoDavPrepare(int nband, int npw, int sparsity, int order,double eps,int maxiter) + DiagoDavPrepare(10, 100, 0, 4, 1e-5, 500), + DiagoDavPrepare(20, 500, 7, 4, 1e-5, 500) + // DiagoDavPrepare(50,1000,8,4,1e-5,500) + // DiagoDavPrepare(20,2000,8,4,1e-5,500) + )); TEST(DiagoDavRealSystemTest, dataH) { @@ -216,7 +227,7 @@ TEST(DiagoDavRealSystemTest, dataH) psi::Psi psi_local; double* precondition_local; -#ifdef __MPI +#ifdef __MPI DIAGOTEST::cal_division(DIAGOTEST::npw); DIAGOTEST::divide_hpsi(psi, psi_local, DIAGOTEST::hmatrix_d, DIAGOTEST::hmatrix_local_d); precondition_local = new double[DIAGOTEST::npw_local[ddp.mypnum]]; @@ -226,7 +237,8 @@ TEST(DiagoDavRealSystemTest, dataH) DIAGOTEST::npw_local[0] = DIAGOTEST::npw; psi_local = psi; precondition_local = new double[DIAGOTEST::npw]; - for (int i = 0;i < DIAGOTEST::npw;i++) precondition_local[i] = (hpsi.precond())[i]; + for (int i = 0; i < DIAGOTEST::npw; i++) + precondition_local[i] = (hpsi.precond())[i]; #endif ddp.CompareEigen(psi_local, precondition_local); @@ -249,8 +261,10 @@ int main(int argc, char** argv) testing::InitGoogleTest(&argc, argv); ::testing::TestEventListeners& listeners = ::testing::UnitTest::GetInstance()->listeners(); - if (myrank != 0) { delete listeners.Release(listeners.default_result_printer()); -} + if (myrank != 0) + { + delete listeners.Release(listeners.default_result_printer()); + } int result = RUN_ALL_TESTS(); if (myrank == 0 && result != 0) diff --git a/source/source_hsolver/test/diago_david_test.cpp b/source/source_hsolver/test/diago_david_test.cpp index 72f4c8ddb3..f64a50e831 100644 --- a/source/source_hsolver/test/diago_david_test.cpp +++ b/source/source_hsolver/test/diago_david_test.cpp @@ -1,21 +1,22 @@ -#include"source_hsolver/diago_david.h" -#include"source_hsolver/diago_iter_assist.h" -#include"module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" -#include"diago_mock.h" -#include "module_psi/psi.h" -#include"gtest/gtest.h" -#include "module_base/inverse_matrix.h" -#include "module_base/lapack_connector.h" +#include "source_hsolver/diago_david.h" + +#include "diago_mock.h" #include "module_basis/module_pw/test/test_tool.h" -#include"mpi.h" +#include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" +#include "module_psi/psi.h" +#include "mpi.h" +#include "source_base/inverse_matrix.h" +#include "source_base/lapack_connector.h" +#include "source_hsolver/diago_iter_assist.h" + +#include "gtest/gtest.h" #define CONVTHRESHOLD 1e-3 #define DETAILINFO false - /************************************************ -* unit test of class Diago_David -***********************************************/ + * unit test of class Diago_David + ***********************************************/ /** * Class Diago_David is used to solve the eigenvalues @@ -25,244 +26,258 @@ * - the hamilt matrix (npw=100,500,1000) produced by random with sparsity of 50% * - the hamilt matrix (npw=100,500,1000) produced by random with sparsity of 0% * - the hamilt matrix read from "data-H" - * + * * The test is passed when the eignvalues are closed to these calculated by LAPACK. - * + * */ -//use lapack to calcualte eigenvalue of matrix hm -//NOTE: after finish this function, hm stores the eigen vectors. - +// use lapack to calcualte eigenvalue of matrix hm +// NOTE: after finish this function, hm stores the eigen vectors. void lapackEigen(int& npw, std::vector>& hm, double* e, bool outtime = false) { - int lwork = 2 * npw; - std::complex *work2= new std::complex[lwork]; - double* rwork = new double[3*npw-2]; - int info = 0; - - auto tmp = hm; - - clock_t start,end; - start = clock(); - char tmp_c1 = 'V', tmp_c2 = 'U'; - zheev_(&tmp_c1, &tmp_c2, &npw, tmp.data(), &npw, e, work2, &lwork, rwork, &info); - end = clock(); - if(info) { std::cout << "ERROR: Lapack solver, info=" << info <* work2 = new std::complex[lwork]; + double* rwork = new double[3 * npw - 2]; + int info = 0; + + auto tmp = hm; + + clock_t start, end; + start = clock(); + char tmp_c1 = 'V', tmp_c2 = 'U'; + zheev_(&tmp_c1, &tmp_c2, &npw, tmp.data(), &npw, e, work2, &lwork, rwork, &info); + end = clock(); + if (info) + { + std::cout << "ERROR: Lapack solver, info=" << info << std::endl; + } + if (outtime) + { + std::cout << "Lapack Run time: " << (double)(end - start) / CLOCKS_PER_SEC << " S" << std::endl; + } - delete [] rwork; - delete [] work2; + delete[] rwork; + delete[] work2; } -class DiagoDavPrepare +class DiagoDavPrepare { -public: - DiagoDavPrepare(int nband, int npw, int sparsity, int order,double eps,int maxiter): - nband(nband),npw(npw),sparsity(sparsity),order(order),eps(eps),maxiter(maxiter) - { -#ifdef __MPI - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); + public: + DiagoDavPrepare(int nband, int npw, int sparsity, int order, double eps, int maxiter) + : nband(nband), npw(npw), sparsity(sparsity), order(order), eps(eps), maxiter(maxiter) + { +#ifdef __MPI + MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); -#endif - } - - int nband, npw, sparsity, order, maxiter, notconv; - double eps, avg_iter; - int nprocs=1, mypnum=0; - - void CompareEigen(psi::Psi> &phi, double *precondition) - { - //calculate eigenvalues by LAPACK; - double* e_lapack = new double[npw]; - double* ev; - if(mypnum == 0) { lapackEigen(npw, DIAGOTEST::hmatrix, e_lapack,DETAILINFO); -} +#endif + } - //do Diago_David::diag() - double* en = new double[npw]; - hamilt::Hamilt> *phm; - phm = new hamilt::HamiltPW>(nullptr, nullptr, nullptr, nullptr,nullptr); + int nband, npw, sparsity, order, maxiter, notconv; + double eps, avg_iter; + int nprocs = 1, mypnum = 0; -#ifdef __MPI + void CompareEigen(psi::Psi>& phi, double* precondition) + { + // calculate eigenvalues by LAPACK; + double* e_lapack = new double[npw]; + double* ev; + if (mypnum == 0) + { + lapackEigen(npw, DIAGOTEST::hmatrix, e_lapack, DETAILINFO); + } + + // do Diago_David::diag() + double* en = new double[npw]; + hamilt::Hamilt>* phm; + phm = new hamilt::HamiltPW>(nullptr, nullptr, nullptr, nullptr, nullptr); + +#ifdef __MPI const hsolver::diag_comm_info comm_info = {MPI_COMM_WORLD, mypnum, nprocs}; #else const hsolver::diag_comm_info comm_info = {mypnum, nprocs}; #endif - const int dim = phi.get_current_ngk(); - const int nband = phi.get_nbands(); - const int ld_psi = phi.get_nbasis(); - hsolver::DiagoDavid> dav(precondition, nband, dim, order, false, comm_info); + const int dim = phi.get_current_ngk(); + const int nband = phi.get_nbands(); + const int ld_psi = phi.get_nbasis(); + hsolver::DiagoDavid> dav(precondition, nband, dim, order, false, comm_info); - hsolver::DiagoIterAssist>::PW_DIAG_NMAX = maxiter; - hsolver::DiagoIterAssist>::PW_DIAG_THR = eps; - GlobalV::NPROC_IN_POOL = nprocs; - phi.fix_k(0); + hsolver::DiagoIterAssist>::PW_DIAG_NMAX = maxiter; + hsolver::DiagoIterAssist>::PW_DIAG_THR = eps; + GlobalV::NPROC_IN_POOL = nprocs; + phi.fix_k(0); - double use_time = 0.0; -#ifdef __MPI - double start = 0.0, end = 0.0; - start = MPI_Wtime(); + double use_time = 0.0; +#ifdef __MPI + double start = 0.0, end = 0.0; + start = MPI_Wtime(); #else - clock_t start, end; - start = clock(); -#endif - - - auto hpsi_func = [phm](std::complex* psi_in,std::complex* hpsi_out, - const int ld_psi, const int nvec) - { - auto psi_iter_wrapper = psi::Psi>(psi_in, 1, nvec, ld_psi, true); - psi::Range bands_range(true, 0, 0, nvec-1); - using hpsi_info = typename hamilt::Operator>::hpsi_info; - hpsi_info info(&psi_iter_wrapper, bands_range, hpsi_out); - phm->ops->hPsi(info); - }; + clock_t start, end; + start = clock(); +#endif + + auto hpsi_func + = [phm](std::complex* psi_in, std::complex* hpsi_out, const int ld_psi, const int nvec) { + auto psi_iter_wrapper = psi::Psi>(psi_in, 1, nvec, ld_psi, true); + psi::Range bands_range(true, 0, 0, nvec - 1); + using hpsi_info = typename hamilt::Operator>::hpsi_info; + hpsi_info info(&psi_iter_wrapper, bands_range, hpsi_out); + phm->ops->hPsi(info); + }; auto spsi_func = [phm](const std::complex* psi_in, std::complex* spsi_out, const int ld_psi, const int nbands) { phm->sPsi(psi_in, spsi_out, ld_psi, ld_psi, nbands); }; std::vector ethr_band(phi.get_nbands(), eps); - dav.diag(hpsi_func,spsi_func, ld_psi, phi.get_pointer(), en, ethr_band, maxiter); - -#ifdef __MPI - end = MPI_Wtime(); - use_time = end - start; -#else - end = clock(); - use_time = (double)(end-start); -#endif - - if(mypnum == 0) - { - if (DETAILINFO) { std::cout<<"diag Run time: "<< use_time << std::endl; -} - for(int i=0;i {}; +class DiagoDavTest : public ::testing::TestWithParam +{ +}; -TEST_P(DiagoDavTest,RandomHamilt) +TEST_P(DiagoDavTest, RandomHamilt) { - DiagoDavPrepare ddp = GetParam(); - if (DETAILINFO&&ddp.mypnum==0) { std::cout << "npw=" << ddp.npw << ", nband=" << ddp.nband << ", sparsity=" - << ddp.sparsity << ", eps=" << ddp.eps << std::endl; -} + DiagoDavPrepare ddp = GetParam(); + if (DETAILINFO && ddp.mypnum == 0) + { + std::cout << "npw=" << ddp.npw << ", nband=" << ddp.nband << ", sparsity=" << ddp.sparsity + << ", eps=" << ddp.eps << std::endl; + } HPsi> hpsi(ddp.nband, ddp.npw, ddp.sparsity); - DIAGOTEST::hmatrix = hpsi.hamilt(); - DIAGOTEST::npw = ddp.npw; - DIAGOTEST::npw_local = new int[ddp.nprocs]; - psi::Psi> psi = hpsi.psi(); - psi::Psi> psi_local; - double* precondition_local; - -#ifdef __MPI - DIAGOTEST::cal_division(DIAGOTEST::npw); + DIAGOTEST::hmatrix = hpsi.hamilt(); + DIAGOTEST::npw = ddp.npw; + DIAGOTEST::npw_local = new int[ddp.nprocs]; + psi::Psi> psi = hpsi.psi(); + psi::Psi> psi_local; + double* precondition_local; + +#ifdef __MPI + DIAGOTEST::cal_division(DIAGOTEST::npw); DIAGOTEST::divide_hpsi(psi, psi_local, DIAGOTEST::hmatrix, DIAGOTEST::hmatrix_local); - precondition_local = new double[DIAGOTEST::npw_local[ddp.mypnum]]; - DIAGOTEST::divide_psi(hpsi.precond(),precondition_local); + precondition_local = new double[DIAGOTEST::npw_local[ddp.mypnum]]; + DIAGOTEST::divide_psi(hpsi.precond(), precondition_local); #else - DIAGOTEST::hmatrix_local = DIAGOTEST::hmatrix; - DIAGOTEST::npw_local[0] = DIAGOTEST::npw; - psi_local = psi; - precondition_local = new double[DIAGOTEST::npw]; - for(int i=0;i> hmatrix; - std::ifstream ifs; - std::string filename = "H-KPoints-Si64.dat"; - ifs.open(filename); + std::vector> hmatrix; + std::ifstream ifs; + std::string filename = "H-KPoints-Si64.dat"; + ifs.open(filename); // open file and check status if (!ifs.is_open()) { std::cout << "Error opening file " << filename << std::endl; exit(1); } - DIAGOTEST::readh(ifs,hmatrix); - ifs.close(); - DIAGOTEST::hmatrix = hmatrix; - int nband = std::max(DIAGOTEST::npw/20,1); + DIAGOTEST::readh(ifs, hmatrix); + ifs.close(); + DIAGOTEST::hmatrix = hmatrix; + int nband = std::max(DIAGOTEST::npw / 20, 1); + + DiagoDavPrepare ddp(nband, DIAGOTEST::npw, 0, 2, 1e-5, 500); - DiagoDavPrepare ddp(nband,DIAGOTEST::npw,0,2,1e-5,500); - HPsi> hpsi(nband, DIAGOTEST::npw); - psi::Psi> psi = hpsi.psi(); - DIAGOTEST::npw_local = new int[ddp.nprocs]; - psi::Psi> psi_local; - double* precondition_local; + psi::Psi> psi = hpsi.psi(); + DIAGOTEST::npw_local = new int[ddp.nprocs]; + psi::Psi> psi_local; + double* precondition_local; -#ifdef __MPI - DIAGOTEST::cal_division(DIAGOTEST::npw); +#ifdef __MPI + DIAGOTEST::cal_division(DIAGOTEST::npw); DIAGOTEST::divide_hpsi(psi, psi_local, DIAGOTEST::hmatrix, DIAGOTEST::hmatrix_local); - precondition_local = new double[DIAGOTEST::npw_local[ddp.mypnum]]; - DIAGOTEST::divide_psi(hpsi.precond(),precondition_local); + precondition_local = new double[DIAGOTEST::npw_local[ddp.mypnum]]; + DIAGOTEST::divide_psi(hpsi.precond(), precondition_local); #else - DIAGOTEST::hmatrix_local = DIAGOTEST::hmatrix; - DIAGOTEST::npw_local[0] = DIAGOTEST::npw; - psi_local = psi; - precondition_local = new double[DIAGOTEST::npw]; - for(int i=0;ilisteners(); - if (myrank != 0) { delete listeners.Release(listeners.default_result_printer()); -} + ::testing::TestEventListeners& listeners = ::testing::UnitTest::GetInstance()->listeners(); + if (myrank != 0) + { + delete listeners.Release(listeners.default_result_printer()); + } int result = RUN_ALL_TESTS(); if (myrank == 0 && result != 0) { std::cout << "ERROR:some tests are not passed" << std::endl; return result; - } + } MPI_Finalize(); - return 0; + return 0; } diff --git a/source/source_hsolver/test/diago_elpa_utils.h b/source/source_hsolver/test/diago_elpa_utils.h index 91160a253f..f3afe1d8ad 100644 --- a/source/source_hsolver/test/diago_elpa_utils.h +++ b/source/source_hsolver/test/diago_elpa_utils.h @@ -1,7 +1,7 @@ -#include "module_base/blacs_connector.h" -#include "module_base/lapack_connector.h" -#include "module_base/scalapack_connector.h" #include "mpi.h" +#include "source_base/blacs_connector.h" +#include "source_base/lapack_connector.h" +#include "source_base/scalapack_connector.h" #include #include @@ -18,7 +18,7 @@ namespace LCAO_DIAGO_TEST { -void process_2d(int &nprows, int &npcols, int &myprow, int &mypcol, int &icontxt) // map the processes to 2D matrix +void process_2d(int& nprows, int& npcols, int& myprow, int& mypcol, int& icontxt) // map the processes to 2D matrix { int nprocs, mypnum; MPI_Comm_size(MPI_COMM_WORLD, &nprocs); @@ -31,7 +31,7 @@ void process_2d(int &nprows, int &npcols, int &myprow, int &mypcol, int &icontxt } nprows = nprocs / npcols; - int *usermap = new int[nprocs]; + int* usermap = new int[nprocs]; for (int i = 0; i < nprows; i++) { for (int j = 0; j < npcols; j++) @@ -58,7 +58,7 @@ inline int na_rc(int n, int nblk, int nprows, int myprow) // calculate the row/c // distribute hmatrix to each process // hmatrix is row-first, and new_matrix is column-first template -void distribute_data(T *hmatrix, T *new_matrix, int &nFull, int &nblk, int &na_rows, int &na_cols, int &icontxt) +void distribute_data(T* hmatrix, T* new_matrix, int& nFull, int& nblk, int& na_rows, int& na_cols, int& icontxt) { int mypnum; MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); @@ -66,12 +66,12 @@ void distribute_data(T *hmatrix, T *new_matrix, int &nFull, int &nblk, int &na_r Cblacs_gridinfo(icontxt, &nprows, &npcols, &myprow, &mypcol); int SENDPROW = 0, SENDPCOL = 0, tag = 0; - T *tmp = new T[nblk]; + T* tmp = new T[nblk]; // do iteration for matrix, distribute old_matrix to each process, pass a block each time for (int row = 0; row < nFull; row++) { - int recv_prow = (row / nblk) % nprows; // the row number of recive process + int recv_prow = (row / nblk) % nprows; // the row number of recive process int nm_row = ((row / nblk) / nprows) * nblk + row % nblk; // row number of block in new_matrix for (int col = 0; col < nFull; col += nblk) { @@ -122,7 +122,8 @@ void distribute_data(T *hmatrix, T *new_matrix, int &nFull, int &nblk, int &na_r delete[] tmp; } -template inline void print_matrix(std::ofstream &fp, T *matrix, int &nrow, int &ncol, bool row_first) +template +inline void print_matrix(std::ofstream& fp, T* matrix, int& nrow, int& ncol, bool row_first) { int coef_row = row_first ? ncol : 1; int coef_col = row_first ? 1 : nrow; @@ -136,17 +137,18 @@ template inline void print_matrix(std::ofstream &fp, T *matrix, int &n } } -template bool read_hs(std::string fname, T &matrix) +template +bool read_hs(std::string fname, T& matrix) { int ndim; std::ifstream inf(fname); - if(! inf.is_open()) + if (!inf.is_open()) { std::cout << "Error: open file " << fname << " failed, skip!" << std::endl; return false; } inf >> ndim; - matrix.resize(ndim*ndim); + matrix.resize(ndim * ndim); for (int i = 0; i < ndim; i++) { for (int j = i; j < ndim; j++) @@ -162,16 +164,16 @@ template bool read_hs(std::string fname, T &matrix) return true; } -void lapack_diago(double *hmatrix, double *smatrix, double *e, int &nFull) +void lapack_diago(double* hmatrix, double* smatrix, double* e, int& nFull) { - const int itype = 1; // solve A*X=(lambda)*B*X + const int itype = 1; // solve A*X=(lambda)*B*X const char jobz = 'V'; // 'N':only calc eigenvalue, 'V': eigenvalues and eigenvectors const char uplo = 'U'; // Upper triangles int lwork = (nFull + 2) * nFull, info = 0; - double *ev = new double[nFull * nFull]; + double* ev = new double[nFull * nFull]; - double *a = new double[nFull * nFull]; - double *b = new double[nFull * nFull]; + double* a = new double[nFull * nFull]; + double* b = new double[nFull * nFull]; for (int i = 0; i < nFull * nFull; i++) { a[i] = hmatrix[i]; @@ -190,17 +192,17 @@ void lapack_diago(double *hmatrix, double *smatrix, double *e, int &nFull) delete[] ev; } -void lapack_diago(std::complex *hmatrix, std::complex *smatrix, double *e, int &nFull) +void lapack_diago(std::complex* hmatrix, std::complex* smatrix, double* e, int& nFull) { - const int itype = 1; // solve A*X=(lambda)*B*X + const int itype = 1; // solve A*X=(lambda)*B*X const char jobz = 'V'; // 'N':only calc eigenvalue, 'V': eigenvalues and eigenvectors const char uplo = 'U'; // Upper triangles int lwork = (nFull + 1) * nFull, info = 0; - double *rwork = new double[3 * nFull - 2]; - std::complex *ev = new std::complex[nFull * nFull]; + double* rwork = new double[3 * nFull - 2]; + std::complex* ev = new std::complex[nFull * nFull]; - std::complex *a = new std::complex[nFull * nFull]; - std::complex *b = new std::complex[nFull * nFull]; + std::complex* a = new std::complex[nFull * nFull]; + std::complex* b = new std::complex[nFull * nFull]; for (int i = 0; i < nFull * nFull; i++) { a[i] = hmatrix[i]; diff --git a/source/source_hsolver/test/diago_lapack_test.cpp b/source/source_hsolver/test/diago_lapack_test.cpp index 01acc2ebbd..6b067dea78 100644 --- a/source/source_hsolver/test/diago_lapack_test.cpp +++ b/source/source_hsolver/test/diago_lapack_test.cpp @@ -6,13 +6,13 @@ // Remove some useless functions and dependencies. Serialized the full code // and refactored some function. +#include "source_base/lapack_connector.h" +#include "source_hsolver/diago_lapack.h" + #include "gtest/gtest.h" #include #include -#include "source_hsolver/diago_lapack.h" -#include "module_base/lapack_connector.h" - #define PASSTHRESHOLD 1e-5 #define DETAILINFO false #define PRINT_HS false @@ -45,17 +45,18 @@ class HamiltTEST : public hamilt::Hamilt // The serialized version of functions from diago_elpa_utils -template bool read_hs(std::string fname, T &matrix) +template +bool read_hs(std::string fname, T& matrix) { int ndim; std::ifstream inf(fname); - if(! inf.is_open()) + if (!inf.is_open()) { std::cout << "Error: open file " << fname << " failed, skip!" << std::endl; return false; } inf >> ndim; - matrix.resize(ndim*ndim); + matrix.resize(ndim * ndim); for (int i = 0; i < ndim; i++) { for (int j = i; j < ndim; j++) @@ -71,11 +72,11 @@ template bool read_hs(std::string fname, T &matrix) return true; } -bool read_solution(std::string fname, std::vector &result) +bool read_solution(std::string fname, std::vector& result) { int ndim; std::ifstream inf(fname); - if(! inf.is_open()) + if (!inf.is_open()) { std::cout << "Error: open file " << fname << " failed, skip!" << std::endl; return false; @@ -89,8 +90,8 @@ bool read_solution(std::string fname, std::vector &result) return true; } - -template inline void print_matrix(std::ofstream &fp, T *matrix, int &nrow, int &ncol, bool row_first) +template +inline void print_matrix(std::ofstream& fp, T* matrix, int& nrow, int& ncol, bool row_first) { int coef_row = row_first ? ncol : 1; int coef_col = row_first ? 1 : nrow; @@ -104,11 +105,10 @@ template inline void print_matrix(std::ofstream &fp, T *matrix, int &n } } - template class DiagoLapackPrepare { - public: + public: DiagoLapackPrepare(int nlocal, int nbands, int nb2d, @@ -116,8 +116,8 @@ class DiagoLapackPrepare std::string hfname, std::string sfname, std::string solutionfname) - : nlocal(nlocal), nbands(nbands), nb2d(nb2d), sparsity(sparsity), hfname(hfname), - sfname(sfname), solutionfname(solutionfname) + : nlocal(nlocal), nbands(nbands), nb2d(nb2d), sparsity(sparsity), hfname(hfname), sfname(sfname), + solutionfname(solutionfname) { // dh = new hsolver::DiagoLapack; } @@ -149,9 +149,10 @@ class DiagoLapackPrepare } nlocal = hdim; nbands = nlocal / 2; - if (readhfile && readsfile) { + if (readhfile && readsfile) + { return true; - } + } return false; } @@ -165,7 +166,8 @@ class DiagoLapackPrepare void print_hs() { - if (!PRINT_HS) { + if (!PRINT_HS) + { return; } std::ofstream fp("hmatrix.dat"); @@ -224,7 +226,8 @@ class DiagoLapackPrepare maxerror = error; iindex = i; } - if (error > PASSTHRESHOLD) { + if (error > PASSTHRESHOLD) + { pass = false; } } @@ -261,13 +264,22 @@ TEST_P(DiagoLapackGammaOnlyTest, LCAO) EXPECT_TRUE(pass) << out_info.str(); } -INSTANTIATE_TEST_SUITE_P( - DiagoLapackTest, - DiagoLapackGammaOnlyTest, - ::testing::Values( - DiagoLapackPrepare(0, 0, 1, 0, "H-GammaOnly-Si2.dat", "S-GammaOnly-Si2.dat", "GammaOnly-Si2-Solution.dat"), - DiagoLapackPrepare(0, 0, 32, 0, "H-GammaOnly-Si64.dat", "S-GammaOnly-Si64.dat", "GammaOnly-Si64-Solution.dat"))); - +INSTANTIATE_TEST_SUITE_P(DiagoLapackTest, + DiagoLapackGammaOnlyTest, + ::testing::Values(DiagoLapackPrepare(0, + 0, + 1, + 0, + "H-GammaOnly-Si2.dat", + "S-GammaOnly-Si2.dat", + "GammaOnly-Si2-Solution.dat"), + DiagoLapackPrepare(0, + 0, + 32, + 0, + "H-GammaOnly-Si64.dat", + "S-GammaOnly-Si64.dat", + "GammaOnly-Si64-Solution.dat"))); class DiagoLapackKPointsTest : public ::testing::TestWithParam>> { @@ -284,12 +296,22 @@ TEST_P(DiagoLapackKPointsTest, LCAO) EXPECT_TRUE(pass) << out_info.str(); } -INSTANTIATE_TEST_SUITE_P( - DiagoLapackTest, - DiagoLapackKPointsTest, - ::testing::Values( - DiagoLapackPrepare>(0, 0, 1, 0, "H-KPoints-Si2.dat", "S-KPoints-Si2.dat", "KPoints-Si2-Solution.dat"), - DiagoLapackPrepare>(0, 0, 32, 0, "H-KPoints-Si64.dat", "S-KPoints-Si64.dat", "KPoints-Si64-Solution.dat"))); +INSTANTIATE_TEST_SUITE_P(DiagoLapackTest, + DiagoLapackKPointsTest, + ::testing::Values(DiagoLapackPrepare>(0, + 0, + 1, + 0, + "H-KPoints-Si2.dat", + "S-KPoints-Si2.dat", + "KPoints-Si2-Solution.dat"), + DiagoLapackPrepare>(0, + 0, + 32, + 0, + "H-KPoints-Si64.dat", + "S-KPoints-Si64.dat", + "KPoints-Si64-Solution.dat"))); int main(int argc, char** argv) { diff --git a/source/source_hsolver/test/diago_mock.h b/source/source_hsolver/test/diago_mock.h index 85a7750fc5..6f09b7a2d1 100644 --- a/source/source_hsolver/test/diago_mock.h +++ b/source/source_hsolver/test/diago_mock.h @@ -1,247 +1,296 @@ -#include -#include "../../module_base/lapack_connector.h" -#include "../../module_base/blas_connector.h" -#include "mpi.h" -#include "module_base/parallel_reduce.h" +#include "../../source_base/blas_connector.h" +#include "../../source_base/lapack_connector.h" #include "module_hamilt_pw/hamilt_pwdft/hamilt_pw.h" +#include "mpi.h" +#include "source_base/parallel_reduce.h" + +#include namespace DIAGOTEST { - std::vector hmatrix_d; - std::vector hmatrix_local_d; - std::vector> hmatrix; - std::vector> hmatrix_local; - std::vector> hmatrix_f; - std::vector> hmatrix_local_f; - int h_nr; - int h_nc; - int npw; - int* npw_local; //number of plane wave distributed to each process - - void readh(std::ifstream& inf, std::vector& hm) +std::vector hmatrix_d; +std::vector hmatrix_local_d; +std::vector> hmatrix; +std::vector> hmatrix_local; +std::vector> hmatrix_f; +std::vector> hmatrix_local_f; +int h_nr; +int h_nc; +int npw; +int* npw_local; // number of plane wave distributed to each process + +void readh(std::ifstream& inf, std::vector& hm) +{ + int npw_; + inf >> npw_; + DIAGOTEST::npw = npw_; + hm.resize(npw * npw); + h_nr = npw; + h_nc = npw; + for (int i = 0; i < npw; i++) { - int npw_; - inf >> npw_; - DIAGOTEST::npw = npw_; - hm.resize(npw * npw); - h_nr = npw; - h_nc = npw; - for (int i = 0;i < npw;i++) + for (int j = i; j < npw; j++) { - for (int j = i;j < npw;j++) + inf >> hm[i * npw + j]; + if (i != j) { - inf >> hm[i * npw + j]; - if (i != j) { hm[j * npw + i] = hm[i * npw + j]; } + hm[j * npw + i] = hm[i * npw + j]; } } } +} - void readh(std::ifstream& inf, std::vector>& hm) +void readh(std::ifstream& inf, std::vector>& hm) +{ + int npw_; + inf >> npw_; + DIAGOTEST::npw = npw_; + hm.resize(npw * npw); + h_nr = npw; + h_nc = npw; + for (int i = 0; i < npw; i++) { - int npw_; - inf >> npw_; - DIAGOTEST::npw = npw_; - hm.resize(npw * npw); - h_nr = npw; - h_nc = npw; - for(int i=0;i> hm[i * npw + j]; + if (i != j) { - inf >> hm[i * npw + j]; - if (i != j) {hm[j * npw + i] = conj(hm[i * npw + j]);} + hm[j * npw + i] = conj(hm[i * npw + j]); } - double real = hm[i * npw + i].real(); - hm[i * npw + i] = std::complex {real,0.0}; } + double real = hm[i * npw + i].real(); + hm[i * npw + i] = std::complex{real, 0.0}; } +} - void readh(std::ifstream &inf, std::vector> &hm) +void readh(std::ifstream& inf, std::vector>& hm) +{ + int npw_; + inf >> npw_; + DIAGOTEST::npw = npw_; + hm.resize(npw * npw); + h_nr = npw; + h_nc = npw; + for (int i = 0; i < npw; i++) { - int npw_; - inf >> npw_; - DIAGOTEST::npw = npw_; - hm.resize(npw * npw); - h_nr = npw; - h_nc = npw; - for(int i=0;i> hm[i * npw + j]; + if (i != j) { - inf >> hm[i * npw + j]; - if (i != j) {hm[j * npw + i] = conj(hm[i * npw + j]);} + hm[j * npw + i] = conj(hm[i * npw + j]); } - float real = hm[i * npw + i].real(); - hm[i * npw + i] = std::complex {real,0.0}; } + float real = hm[i * npw + i].real(); + hm[i * npw + i] = std::complex{real, 0.0}; } +} - template - void divide_psi(T *psi, T *psi_local) - { - int nprocs=1, mypnum=0; -#ifdef __MPI - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); -#endif +template +void divide_psi(T* psi, T* psi_local) +{ + int nprocs = 1, mypnum = 0; +#ifdef __MPI + MPI_Comm_size(MPI_COMM_WORLD, &nprocs); + MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); +#endif - if(mypnum == 0) - { - for(int j=0;j::value) { - if (std::is_same::value) { - MPI_Send(&(psi[start_point]),npw_local[j],MPI_DOUBLE,j,0,MPI_COMM_WORLD); - } else if(std::is_same>::value) { - MPI_Send(&(psi[start_point]),npw_local[j],MPI_DOUBLE_COMPLEX,j,0,MPI_COMM_WORLD); - } else if (std::is_same::value) { - MPI_Send(&(psi[start_point]), npw_local[j], MPI_FLOAT, j, 0, MPI_COMM_WORLD); - } else if (std::is_same>::value) { - MPI_Send(&(psi[start_point]), npw_local[j], MPI_C_FLOAT_COMPLEX, j, 0, MPI_COMM_WORLD); -} - start_point += npw_local[j]; + MPI_Send(&(psi[start_point]), npw_local[j], MPI_DOUBLE, j, 0, MPI_COMM_WORLD); + } + else if (std::is_same>::value) + { + MPI_Send(&(psi[start_point]), npw_local[j], MPI_DOUBLE_COMPLEX, j, 0, MPI_COMM_WORLD); } + else if (std::is_same::value) + { + MPI_Send(&(psi[start_point]), npw_local[j], MPI_FLOAT, j, 0, MPI_COMM_WORLD); + } + else if (std::is_same>::value) + { + MPI_Send(&(psi[start_point]), npw_local[j], MPI_C_FLOAT_COMPLEX, j, 0, MPI_COMM_WORLD); + } + start_point += npw_local[j]; } - else + } + else + { + int recv_len = mypnum < (npw % nprocs) ? npw / nprocs + 1 : npw / nprocs; + if (std::is_same::value) { - int recv_len = mypnum < (npw%nprocs) ? npw/nprocs + 1 : npw/nprocs; - if (std::is_same::value) { - MPI_Recv(psi_local, npw_local[mypnum],MPI_DOUBLE,0,0,MPI_COMM_WORLD, MPI_STATUS_IGNORE); - } else if(std::is_same>::value) { - MPI_Recv(psi_local, npw_local[mypnum], MPI_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); - } else if (std::is_same::value) { - MPI_Recv(psi_local, npw_local[mypnum], MPI_FLOAT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); - } else if (std::is_same>::value) { - MPI_Recv(psi_local, npw_local[mypnum], MPI_C_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); -} -#endif - } + MPI_Recv(psi_local, npw_local[mypnum], MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + } + else if (std::is_same>::value) + { + MPI_Recv(psi_local, npw_local[mypnum], MPI_DOUBLE_COMPLEX, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + } + else if (std::is_same::value) + { + MPI_Recv(psi_local, npw_local[mypnum], MPI_FLOAT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + } + else if (std::is_same>::value) + { + MPI_Recv(psi_local, npw_local[mypnum], MPI_C_FLOAT_COMPLEX, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); + } +#endif } - template void divide_psi(double* psi, double* psi_local); - template void divide_psi>(std::complex* psi, std::complex* psi_local); - template void divide_psi>(std::complex* psi, std::complex* psi_local); +} +template void divide_psi(double* psi, double* psi_local); +template void divide_psi>(std::complex* psi, std::complex* psi_local); +template void divide_psi>(std::complex* psi, std::complex* psi_local); #ifdef __MPI - void cal_division(int &npw) +void cal_division(int& npw) +{ + int nprocs, mypnum; + MPI_Comm_size(MPI_COMM_WORLD, &nprocs); + MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); + for (int i = 0; i < nprocs; i++) { - int nprocs, mypnum; - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); - for(int i=0;i - void divide_hpsi(psi::Psi& psi, psi::Psi& psi_local, std::vector& hmatrix, std::vector& hmatrix_local) - { - int nprocs, mypnum; - MPI_Comm_size(MPI_COMM_WORLD, &nprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); +template +void divide_hpsi(psi::Psi& psi, psi::Psi& psi_local, std::vector& hmatrix, std::vector& hmatrix_local) +{ + int nprocs, mypnum; + MPI_Comm_size(MPI_COMM_WORLD, &nprocs); + MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); - int npw = psi.get_nbasis(); - int nbands = psi.get_nbands(); - int nk = psi.get_nk(); + int npw = psi.get_nbasis(); + int nbands = psi.get_nbands(); + int nk = psi.get_nk(); - hmatrix_local.resize(npw * npw_local[mypnum]); - h_nc = npw_local[mypnum]; - h_nr = npw; - psi_local.resize(nk,nbands,npw_local[mypnum]); - for(int i=0;i(&(hmatrix[i * npw]), &(hmatrix_local[i * npw_local[mypnum]])); + if (i < nbands) { - divide_psi(&(hmatrix[i * npw]), &(hmatrix_local[i * npw_local[mypnum]])); - if(i(psi.get_pointer(i), psi_local.get_pointer(i)); - } + psi.fix_k(k); + psi_local.fix_k(k); + divide_psi(psi.get_pointer(i), psi_local.get_pointer(i)); } } } -#endif } +#endif +} // namespace DIAGOTEST -#include "module_base/macros.h" -template +#include "source_base/macros.h" +template class HPsi { /** - * This calss used to produce the Hermite matrix, the initial - * guess wave function, and the precondition by the random + * This calss used to produce the Hermite matrix, the initial + * guess wave function, and the precondition by the random * number. The elements of Hermite matrix and wave function are * between -1.0 to 1.0, and the preconddition is between 1.0 to 2.0. - * + * * The parameters in construct function or function create() * are same: * - int nband/nbd: number of calculated bands * - int npw: number of plane wave - * - int sparsity: the sparsity of Halmit matrix, between 0 and 10. + * - int sparsity: the sparsity of Halmit matrix, between 0 and 10. * (0 means no sparsity, 10 means a diagonal matrix) - * + * * After instantiation a HPsi, one can use below functions: * - hamilt(): return the Hermite matrix (type: std::vector) * - precond(): return the precondition (type: Real Pointer) - * + * */ using Real = typename GetTypeReal::type; - public: - HPsi(int nband,int npw, int sparsity=7): - nband(nband),npw(npw),sparsity(sparsity) {genhmatrix();genpsi();genprecondition();} + + public: + HPsi(int nband, int npw, int sparsity = 7) : nband(nband), npw(npw), sparsity(sparsity) + { + genhmatrix(); + genpsi(); + genprecondition(); + } HPsi(){}; - ~HPsi() {delete [] precondition;} + ~HPsi() + { + delete[] precondition; + } - void create(int nbd,int npw, int sparsity=7) + void create(int nbd, int npw, int sparsity = 7) { this->nband = nbd; this->npw = npw; this->sparsity = sparsity; - genhmatrix();genpsi();genprecondition(); + genhmatrix(); + genpsi(); + genprecondition(); } - //return the matrix - Real* precond() { return precondition; } - std::vector hamilt() { return hmatrix; } - //ModuleBase::ComplexMatrix psi() {return psimatrix;} + // return the matrix + Real* precond() + { + return precondition; + } + std::vector hamilt() + { + return hmatrix; + } + // ModuleBase::ComplexMatrix psi() {return psimatrix;} psi::Psi psi() { Structure_Factor* sf; int* ngk = nullptr; psi::Psi psitmp(1, nband, npw, npw, true); - for(int i=0;i u(min, max); - for (int i = 0;i < npw;i++) + for (int i = 0; i < npw; i++) { precondition[i] = 1.0 + static_cast(u(e)) / max; } } -private: + private: int npw; int nband; std::vector hmatrix; @@ -252,7 +301,7 @@ class HPsi int sparsity; }; -template<> +template <> void HPsi::genhmatrix() { hmatrix.resize(npw * npw); @@ -260,27 +309,36 @@ void HPsi::genhmatrix() DIAGOTEST::h_nc = npw; std::default_random_engine e(100); std::uniform_int_distribution u(min, max); - if (sparsity < 0) { sparsity = 0; -} - if (sparsity > 10) { sparsity = 10; -} - for (int i = 0;i < npw;i++) + if (sparsity < 0) + { + sparsity = 0; + } + if (sparsity > 10) { - for (int j = 0;j <= i;j++) + sparsity = 10; + } + for (int i = 0; i < npw; i++) + { + for (int j = 0; j <= i; j++) { double mincoef = 0.0; double realp = pow(-1.0, u(e) % 2) * static_cast(u(e)) / max; - if (int(u(e) % 10) > int(sparsity - 1)) { mincoef = 1.0; -} - if (i == j) { + if (int(u(e) % 10) > int(sparsity - 1)) + { + mincoef = 1.0; + } + if (i == j) + { hmatrix[i * npw + j] = realp; - } else { + } + else + { hmatrix[j * npw + i] = hmatrix[i * npw + j] = mincoef * realp; -} + } } } } -template<> +template <> void HPsi>::genhmatrix() { hmatrix.resize(npw * npw); @@ -288,33 +346,39 @@ void HPsi>::genhmatrix() DIAGOTEST::h_nc = npw; std::default_random_engine e(100); std::uniform_int_distribution u(min, max); - if (sparsity < 0) { sparsity = 0; -} - if (sparsity > 10) { sparsity = 10; -} - for (int i = 0;i < npw;i++) + if (sparsity < 0) + { + sparsity = 0; + } + if (sparsity > 10) { - for (int j = 0;j <= i;j++) + sparsity = 10; + } + for (int i = 0; i < npw; i++) + { + for (int j = 0; j <= i; j++) { double mincoef = 0.0; double realp = pow(-1.0, u(e) % 2) * static_cast(u(e)) / max; - //double imagp= pow(-1.0,u(e)%2) * static_cast(u(e))/max; - if (int(u(e) % 10) > int(sparsity - 1)) { mincoef = 1.0; -} + // double imagp= pow(-1.0,u(e)%2) * static_cast(u(e))/max; + if (int(u(e) % 10) > int(sparsity - 1)) + { + mincoef = 1.0; + } if (i == j) { - hmatrix[i * npw + j] = std::complex{ realp,0.0 }; + hmatrix[i * npw + j] = std::complex{realp, 0.0}; } else { - //hmatrix(i,j) = mincoef*std::complex{realp,imagp}; - hmatrix[i * npw + j] = mincoef * std::complex{ realp, 0.0 }; + // hmatrix(i,j) = mincoef*std::complex{realp,imagp}; + hmatrix[i * npw + j] = mincoef * std::complex{realp, 0.0}; hmatrix[j * npw + i] = conj(hmatrix[i * npw + j]); } } } } -template<> +template <> void HPsi>::genhmatrix() { hmatrix.resize(npw * npw); @@ -322,78 +386,86 @@ void HPsi>::genhmatrix() DIAGOTEST::h_nc = npw; std::default_random_engine e(100); std::uniform_int_distribution u(min, max); - if (sparsity < 0) { sparsity = 0; -} - if (sparsity > 10) { sparsity = 10; -} - for (int i = 0;i < npw;i++) + if (sparsity < 0) { - for (int j = 0;j <= i;j++) + sparsity = 0; + } + if (sparsity > 10) + { + sparsity = 10; + } + for (int i = 0; i < npw; i++) + { + for (int j = 0; j <= i; j++) { float mincoef = 0.0; float realp = pow(-1.0, u(e) % 2) * static_cast(u(e)) / max; - if (int(u(e) % 10) > int(sparsity - 1)) { mincoef = 1.0; -} + if (int(u(e) % 10) > int(sparsity - 1)) + { + mincoef = 1.0; + } if (i == j) { - hmatrix[i * npw + j] = std::complex{ realp,0.0 }; + hmatrix[i * npw + j] = std::complex{realp, 0.0}; } else { - hmatrix[i * npw + j] = mincoef * std::complex{ realp, 0.0 }; + hmatrix[i * npw + j] = mincoef * std::complex{realp, 0.0}; hmatrix[j * npw + i] = conj(hmatrix[i * npw + j]); } } } } -template<> +template <> void HPsi::genpsi() { { psimatrix.resize(nband * npw); std::default_random_engine e(10); std::uniform_int_distribution u(min, max); - for (int i = 0;i < nband;i++) { - for (int j = 0;j < npw;j++) { + for (int i = 0; i < nband; i++) + { + for (int j = 0; j < npw; j++) + { psimatrix[i * npw + j] = pow(-1.0, u(e) % 2) * static_cast(u(e)) / max; -} -} + } + } } } -template<> +template <> void HPsi>::genpsi() { { psimatrix.resize(nband * npw); std::default_random_engine e(10); std::uniform_int_distribution u(min, max); - for (int i = 0;i < nband;i++) + for (int i = 0; i < nband; i++) { - for (int j = 0;j < npw;j++) + for (int j = 0; j < npw; j++) { double realp = pow(-1.0, u(e) % 2) * static_cast(u(e)) / max; - //double imagp=pow(-1.0,u(e)%2) * static_cast(u(e))/max; + // double imagp=pow(-1.0,u(e)%2) * static_cast(u(e))/max; double imagp = 0.0; - psimatrix[i * npw + j] = std::complex{ realp,imagp }; + psimatrix[i * npw + j] = std::complex{realp, imagp}; } } } } -template<> +template <> void HPsi>::genpsi() { { psimatrix.resize(nband * npw); std::default_random_engine e(10); std::uniform_int_distribution u(min, max); - for (int i = 0;i < nband;i++) + for (int i = 0; i < nband; i++) { - for (int j = 0;j < npw;j++) + for (int j = 0; j < npw; j++) { float realp = pow(-1.0, u(e) % 2) * static_cast(u(e)) / max; float imagp = 0.0; - psimatrix[i * npw + j] = std::complex{ realp,imagp }; + psimatrix[i * npw + j] = std::complex{realp, imagp}; } } } @@ -403,7 +475,7 @@ template class HPsi; template class HPsi>; template class HPsi>; -//totally same as the original function +// totally same as the original function template <> void hamilt::HamiltPW::sPsi(const double* psi_in, double* spsi, @@ -444,52 +516,49 @@ void hamilt::HamiltPW, base_device::DEVICE_CPU>::sPsi(const return; } -//Mock function h_psi +// Mock function h_psi #include "module_hamilt_pw/hamilt_pwdft/operator_pw/operator_pw.h" -template +template class OperatorMock : public hamilt::Operator { ~OperatorMock() { - if(this->hpsi != nullptr) + if (this->hpsi != nullptr) { delete this->hpsi; this->hpsi = nullptr; } } - virtual void act - ( - const int nbands, - const int nbasis, - const int npol, - const T* tmpsi_in, - T* tmhpsi, - const int ngk_ik = 0, - const bool is_first_node = false)const; + virtual void act(const int nbands, + const int nbasis, + const int npol, + const T* tmpsi_in, + T* tmhpsi, + const int ngk_ik = 0, + const bool is_first_node = false) const; }; -template<> -void OperatorMock::act( - const int nbands, - const int nbasis, - const int npol, - const double* tmpsi_in, - double* tmhpsi, - const int ngk_ik, - const bool is_first_node)const +template <> +void OperatorMock::act(const int nbands, + const int nbasis, + const int npol, + const double* tmpsi_in, + double* tmhpsi, + const int ngk_ik, + const bool is_first_node) const { int nprocs = 1, mypnum = 0; -#ifdef __MPI +#ifdef __MPI MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); -#endif +#endif double* hpsi0 = new double[DIAGOTEST::npw]; for (int m = 0; m < nbands; m++) { - for (int i = 0;i < DIAGOTEST::npw;i++) + for (int i = 0; i < DIAGOTEST::npw; i++) { hpsi0[i] = 0.0; - for (int j = 0;j < (DIAGOTEST::npw_local[mypnum]);j++) + for (int j = 0; j < (DIAGOTEST::npw_local[mypnum]); j++) { hpsi0[i] += DIAGOTEST::hmatrix_local_d[i * DIAGOTEST::h_nc + j] * tmpsi_in[j]; } @@ -501,29 +570,28 @@ void OperatorMock::act( } delete[] hpsi0; } -template<> -void OperatorMock>::act( - const int nbands, - const int nbasis, - const int npol, - const std::complex* tmpsi_in, - std::complex* tmhpsi, - const int ngk_ik, - const bool is_first_node)const +template <> +void OperatorMock>::act(const int nbands, + const int nbasis, + const int npol, + const std::complex* tmpsi_in, + std::complex* tmhpsi, + const int ngk_ik, + const bool is_first_node) const { int nprocs = 1, mypnum = 0; -#ifdef __MPI +#ifdef __MPI MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); -#endif +#endif std::complex* hpsi0 = new std::complex[DIAGOTEST::npw]; for (int m = 0; m < nbands; m++) { - for (int i = 0;i < DIAGOTEST::npw;i++) + for (int i = 0; i < DIAGOTEST::npw; i++) { hpsi0[i] = 0.0; - for (int j = 0;j < (DIAGOTEST::npw_local[mypnum]);j++) + for (int j = 0; j < (DIAGOTEST::npw_local[mypnum]); j++) { hpsi0[i] += DIAGOTEST::hmatrix_local[i * DIAGOTEST::h_nc + j] * tmpsi_in[j]; } @@ -535,29 +603,28 @@ void OperatorMock>::act( } delete[] hpsi0; } -template<> -void OperatorMock>::act( - const int nbands, - const int nbasis, - const int npol, - const std::complex* tmpsi_in, - std::complex* tmhpsi, - const int ngk_ik, - const bool is_first_node)const +template <> +void OperatorMock>::act(const int nbands, + const int nbasis, + const int npol, + const std::complex* tmpsi_in, + std::complex* tmhpsi, + const int ngk_ik, + const bool is_first_node) const { int nprocs = 1, mypnum = 0; -#ifdef __MPI +#ifdef __MPI MPI_Comm_size(MPI_COMM_WORLD, &nprocs); MPI_Comm_rank(MPI_COMM_WORLD, &mypnum); -#endif +#endif std::complex* hpsi0 = new std::complex[DIAGOTEST::npw]; for (int m = 0; m < nbands; m++) { - for (int i = 0;i < DIAGOTEST::npw;i++) + for (int i = 0; i < DIAGOTEST::npw; i++) { hpsi0[i] = 0.0; - for (int j = 0;j < (DIAGOTEST::npw_local[mypnum]);j++) + for (int j = 0; j < (DIAGOTEST::npw_local[mypnum]); j++) { hpsi0[i] += DIAGOTEST::hmatrix_local_f[i * DIAGOTEST::h_nc + j] * tmpsi_in[j]; } @@ -569,47 +636,68 @@ void OperatorMock>::act( } delete[] hpsi0; } -template<> void hamilt::HamiltPW::updateHk(const int ik) +template <> +void hamilt::HamiltPW::updateHk(const int ik) { return; } -template<> hamilt::HamiltPW::HamiltPW(elecstate::Potential* pot_in, ModulePW::PW_Basis_K* wfc_basis, K_Vectors* pkv, pseudopot_cell_vnl*,const UnitCell*) +template <> +hamilt::HamiltPW::HamiltPW(elecstate::Potential* pot_in, + ModulePW::PW_Basis_K* wfc_basis, + K_Vectors* pkv, + pseudopot_cell_vnl*, + const UnitCell*) { this->ops = new OperatorMock; } -template<> hamilt::HamiltPW::~HamiltPW() +template <> +hamilt::HamiltPW::~HamiltPW() { delete this->ops; } -template<> void hamilt::HamiltPW>::updateHk(const int ik) +template <> +void hamilt::HamiltPW>::updateHk(const int ik) { return; } -template<> hamilt::HamiltPW>::HamiltPW(elecstate::Potential* pot_in, ModulePW::PW_Basis_K* wfc_basis, K_Vectors* pkv, pseudopot_cell_vnl*,const UnitCell*) +template <> +hamilt::HamiltPW>::HamiltPW(elecstate::Potential* pot_in, + ModulePW::PW_Basis_K* wfc_basis, + K_Vectors* pkv, + pseudopot_cell_vnl*, + const UnitCell*) { this->ops = new OperatorMock>; } -template<> hamilt::HamiltPW>::~HamiltPW() +template <> +hamilt::HamiltPW>::~HamiltPW() { delete this->ops; } -template<> void hamilt::HamiltPW>::updateHk(const int ik) +template <> +void hamilt::HamiltPW>::updateHk(const int ik) { return; } -template<> hamilt::HamiltPW>::HamiltPW(elecstate::Potential* pot_in, ModulePW::PW_Basis_K* wfc_basis, K_Vectors* pkv, pseudopot_cell_vnl*,const UnitCell*) +template <> +hamilt::HamiltPW>::HamiltPW(elecstate::Potential* pot_in, + ModulePW::PW_Basis_K* wfc_basis, + K_Vectors* pkv, + pseudopot_cell_vnl*, + const UnitCell*) { this->ops = new OperatorMock>; } -template<> hamilt::HamiltPW>::~HamiltPW() +template <> +hamilt::HamiltPW>::~HamiltPW() { delete this->ops; } diff --git a/source/source_hsolver/test/diago_pexsi_test.cpp b/source/source_hsolver/test/diago_pexsi_test.cpp index 3918fd43ff..3548ba84fd 100644 --- a/source/source_hsolver/test/diago_pexsi_test.cpp +++ b/source/source_hsolver/test/diago_pexsi_test.cpp @@ -4,9 +4,9 @@ #include "module_parameter/parameter.h" #undef private -#include "module_base/global_variable.h" -#include "module_base/parallel_global.h" #include "module_basis/module_ao/parallel_orbitals.h" +#include "source_base/global_variable.h" +#include "source_base/parallel_global.h" #include "source_hsolver/module_pexsi/pexsi_solver.h" #include "source_hsolver/test/diago_elpa_utils.h" diff --git a/source/source_hsolver/test/parallel_k2d_test.cpp b/source/source_hsolver/test/parallel_k2d_test.cpp index b025f9184f..916361f50d 100644 --- a/source/source_hsolver/test/parallel_k2d_test.cpp +++ b/source/source_hsolver/test/parallel_k2d_test.cpp @@ -1,7 +1,7 @@ #ifdef __MPI #include "source_hsolver/parallel_k2d.h" -#include "module_base/parallel_global.h" +#include "source_base/parallel_global.h" #include "gmock/gmock.h" #include "gtest/gtest.h" @@ -14,15 +14,23 @@ * Test fixture for class Parallel_K2D */ -class MPIContext { +class MPIContext +{ public: - MPIContext() { + MPIContext() + { MPI_Comm_rank(MPI_COMM_WORLD, &_rank); MPI_Comm_size(MPI_COMM_WORLD, &_size); } - int GetRank() const { return _rank; } - int GetSize() const { return _size; } + int GetRank() const + { + return _rank; + } + int GetSize() const + { + return _size; + } int KPAR; int NPROC_IN_POOL; @@ -34,33 +42,41 @@ class MPIContext { int _size; }; -class ParaPrepare { +class ParaPrepare +{ public: - ParaPrepare(int KPAR_in, int nkstot_in) - : KPAR_(KPAR_in), nkstot_(nkstot_in) {} + ParaPrepare(int KPAR_in, int nkstot_in) : KPAR_(KPAR_in), nkstot_(nkstot_in) + { + } int KPAR_; int nkstot_; }; -class ParallelK2DTest : public ::testing::TestWithParam { +class ParallelK2DTest : public ::testing::TestWithParam +{ protected: Parallel_K2D k2d = Parallel_K2D(); MPIContext mpi; int NPROC; int MY_RANK; - void SetUp() override { + void SetUp() override + { NPROC = mpi.GetSize(); MY_RANK = mpi.GetRank(); } - void TearDown() override {} + void TearDown() override + { + } }; -TEST_P(ParallelK2DTest, DividePools) { +TEST_P(ParallelK2DTest, DividePools) +{ ParaPrepare pp = GetParam(); mpi.KPAR = pp.KPAR_; - //k2d.Pkpoints = new Parallel_Kpoints; - //k2d.get_p2D_pool() = new Parallel_2D; - if (mpi.KPAR > NPROC) { + // k2d.Pkpoints = new Parallel_Kpoints; + // k2d.get_p2D_pool() = new Parallel_2D; + if (mpi.KPAR > NPROC) + { std::string output; testing::internal::CaptureStdout(); EXPECT_EXIT(Parallel_Global::divide_mpi_groups(this->NPROC, @@ -72,10 +88,10 @@ TEST_P(ParallelK2DTest, DividePools) { testing::ExitedWithCode(1), ""); output = testing::internal::GetCapturedStdout(); - EXPECT_THAT( - output, - testing::HasSubstr("must be greater than the number of groups")); - } else { + EXPECT_THAT(output, testing::HasSubstr("must be greater than the number of groups")); + } + else + { k2d.set_kpar(mpi.KPAR); k2d.set_para_env(pp.nkstot_, 10, 1, this->NPROC, this->MY_RANK, 1); /* @@ -111,7 +127,7 @@ TEST_P(ParallelK2DTest, DividePools) { k2d.Pkpoints->get_startpro_pool(ipool) << std::endl; } */ - //k2d.get_p2D_pool()->init(10, 10, 1, POOL_WORLD, 0); + // k2d.get_p2D_pool()->init(10, 10, 1, POOL_WORLD, 0); EXPECT_EQ(this->NPROC, 8); EXPECT_EQ(k2d.get_p2D_pool()->dim0, 2); EXPECT_EQ(k2d.get_p2D_pool()->dim1, 2); @@ -121,8 +137,8 @@ TEST_P(ParallelK2DTest, DividePools) { EXPECT_EQ(k2d.get_kpar(), 10); k2d.unset_para_env(); } - //delete k2d.Pkpoints; - //delete k2d.get_p2D_pool(); + // delete k2d.Pkpoints; + // delete k2d.get_p2D_pool(); } INSTANTIATE_TEST_SUITE_P(TESTPK, @@ -131,7 +147,8 @@ INSTANTIATE_TEST_SUITE_P(TESTPK, // KPAR, nkstot ParaPrepare(2, 16))); -int main(int argc, char** argv) { +int main(int argc, char** argv) +{ MPI_Init(&argc, &argv); testing::InitGoogleTest(&argc, argv); int result = RUN_ALL_TESTS(); diff --git a/source/source_hsolver/test/test_hsolver.cpp b/source/source_hsolver/test/test_hsolver.cpp index e20cb36358..6e9ab26009 100644 --- a/source/source_hsolver/test/test_hsolver.cpp +++ b/source/source_hsolver/test/test_hsolver.cpp @@ -6,7 +6,7 @@ #include "hsolver_supplementary_mock.h" #include "source_hsolver/hsolver.h" -#include +#include // template class hsolver::HSolver, base_device::DEVICE_CPU>; // template class hsolver::HSolver, base_device::DEVICE_CPU>; diff --git a/source/source_hsolver/test/test_hsolver_pw.cpp b/source/source_hsolver/test/test_hsolver_pw.cpp index 6f4dbbd07c..fd1b928112 100644 --- a/source/source_hsolver/test/test_hsolver_pw.cpp +++ b/source/source_hsolver/test/test_hsolver_pw.cpp @@ -4,78 +4,73 @@ #define private public #define protected public -#include "module_parameter/parameter.h" -#include "source_hsolver/hsolver_pw.h" -#include "source_hsolver/hsolver_lcaopw.h" -#include "hsolver_supplementary_mock.h" #include "hsolver_pw_sup.h" #include "hsolver_supplementary_mock.h" -#include "module_base/global_variable.h" +#include "module_parameter/parameter.h" +#include "source_base/global_variable.h" +#include "source_hsolver/hsolver_lcaopw.h" #include "source_hsolver/hsolver_pw.h" #undef private #undef protected // Mock implementations for the template functions causing linking errors -namespace ModulePW { - // Mock implementation for recip_to_real - template - void PW_Basis_K::recip_to_real(const Device* ctx, - const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const FPTYPE factor) const - { - // Simple mock implementation that does nothing - // In a real test, you might want to implement behavior that simulates the actual function - } - - // Mock implementation for real_to_recip - template - void PW_Basis_K::real_to_recip(const Device* ctx, - const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const FPTYPE factor) const - { - // Simple mock implementation that does nothing - } +namespace ModulePW +{ +// Mock implementation for recip_to_real +template +void PW_Basis_K::recip_to_real(const Device* ctx, + const std::complex* in, + std::complex* out, + const int ik, + const bool add, + const FPTYPE factor) const +{ + // Simple mock implementation that does nothing + // In a real test, you might want to implement behavior that simulates the actual function +} - // Explicit template instantiations - template void PW_Basis_K::recip_to_real( - const base_device::DEVICE_CPU* ctx, - const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const float factor) const; - - template void PW_Basis_K::recip_to_real( - const base_device::DEVICE_CPU* ctx, - const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const double factor) const; - - template void PW_Basis_K::real_to_recip( - const base_device::DEVICE_CPU* ctx, - const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const float factor) const; - - template void PW_Basis_K::real_to_recip( - const base_device::DEVICE_CPU* ctx, - const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const double factor) const; +// Mock implementation for real_to_recip +template +void PW_Basis_K::real_to_recip(const Device* ctx, + const std::complex* in, + std::complex* out, + const int ik, + const bool add, + const FPTYPE factor) const +{ + // Simple mock implementation that does nothing } +// Explicit template instantiations +template void PW_Basis_K::recip_to_real(const base_device::DEVICE_CPU* ctx, + const std::complex* in, + std::complex* out, + const int ik, + const bool add, + const float factor) const; + +template void PW_Basis_K::recip_to_real(const base_device::DEVICE_CPU* ctx, + const std::complex* in, + std::complex* out, + const int ik, + const bool add, + const double factor) const; + +template void PW_Basis_K::real_to_recip(const base_device::DEVICE_CPU* ctx, + const std::complex* in, + std::complex* out, + const int ik, + const bool add, + const float factor) const; + +template void PW_Basis_K::real_to_recip(const base_device::DEVICE_CPU* ctx, + const std::complex* in, + std::complex* out, + const int ik, + const bool add, + const double factor) const; +} // namespace ModulePW + /************************************************ * unit test of HSolverPW class ***********************************************/ @@ -96,7 +91,8 @@ namespace ModulePW { */ // mock diago_hs_para -namespace hsolver { +namespace hsolver +{ template void diago_hs_para(T* h, T* s, @@ -107,7 +103,8 @@ void diago_hs_para(T* h, const MPI_Comm& comm, const int diag_subspace, const int block_size = 0) -{} +{ +} template void diago_hs_para(double* h, double* s, const int lda, @@ -137,7 +134,7 @@ template void diago_hs_para(float* h, const MPI_Comm& comm, const int diag_subspace, const int block_size); - + template void diago_hs_para>(std::complex* h, std::complex* s, const int lda, @@ -148,35 +145,38 @@ template void diago_hs_para>(std::complex* h, const int diag_subspace, const int block_size); -} +} // namespace hsolver -class TestHSolverPW : public ::testing::Test { +class TestHSolverPW : public ::testing::Test +{ public: ModulePW::PW_Basis_K pwbk; hsolver::HSolverPW, base_device::DEVICE_CPU> hs_f - = hsolver::HSolverPW, base_device::DEVICE_CPU>(&pwbk, - "scf", - "pw", - "cg", - false, - PARAM.sys.use_uspp, - PARAM.input.nspin, - hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::SCF_ITER, - hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::PW_DIAG_NMAX, - hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::PW_DIAG_THR, - hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::need_subspace); + = hsolver::HSolverPW, base_device::DEVICE_CPU>( + &pwbk, + "scf", + "pw", + "cg", + false, + PARAM.sys.use_uspp, + PARAM.input.nspin, + hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::SCF_ITER, + hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::PW_DIAG_NMAX, + hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::PW_DIAG_THR, + hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::need_subspace); hsolver::HSolverPW, base_device::DEVICE_CPU> hs_d - = hsolver::HSolverPW, base_device::DEVICE_CPU>(&pwbk, - "scf", - "pw", - "cg", - false, - PARAM.sys.use_uspp, - PARAM.input.nspin, - hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::SCF_ITER, - hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::PW_DIAG_NMAX, - hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::PW_DIAG_THR, - hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::need_subspace); + = hsolver::HSolverPW, base_device::DEVICE_CPU>( + &pwbk, + "scf", + "pw", + "cg", + false, + PARAM.sys.use_uspp, + PARAM.input.nspin, + hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::SCF_ITER, + hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::PW_DIAG_NMAX, + hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::PW_DIAG_THR, + hsolver::DiagoIterAssist, base_device::DEVICE_CPU>::need_subspace); hamilt::Hamilt> hamilt_test_d; hamilt::Hamilt> hamilt_test_f; @@ -228,12 +228,12 @@ class TestHSolverPW : public ::testing::Test { // psi_test_cd, // &elecstate_test, // elecstate_test.ekb.c, - + // GlobalV::RANK_IN_POOL, // GlobalV::NPROC_IN_POOL, // true); - + // // EXPECT_EQ(this->hs_d.initialed_psi, true); // EXPECT_DOUBLE_EQ(hsolver::DiagoIterAssist>::avg_iter, // 0.0); @@ -325,13 +325,14 @@ class TestHSolverPW : public ::testing::Test { // // EXPECT_EQ(test_diagethr_d, 0.0001); // } -TEST_F(TestHSolverPW, SolveLcaoInPW) { +TEST_F(TestHSolverPW, SolveLcaoInPW) +{ pwbk.nks = 1; // initial memory and data elecstate_test.ekb.create(1, 2); - elecstate_test.wg.create(1,2); - elecstate_test.klist=new K_Vectors; - elecstate_test.skip_weights=true; + elecstate_test.wg.create(1, 2); + elecstate_test.klist = new K_Vectors; + elecstate_test.skip_weights = true; elecstate_test.pot = new elecstate::Potential; // 1 kpt, 2 bands, 3 basis psi_test_cf.resize(1, 2, 3); @@ -347,15 +348,12 @@ TEST_F(TestHSolverPW, SolveLcaoInPW) { std::complex psi_value_d = {0.0, 0.0}; std::complex psi_value_f = {0.0, 0.0}; - for (int iband = 0; iband < transform_test_cd.get_nbands(); iband++) { - for (int ibasis = 0; ibasis < transform_test_cd.get_nbasis(); - ibasis++) { - transform_test_cd - .get_pointer()[iband * transform_test_cd.get_nbasis() + ibasis] - = psi_value_d; - transform_test_cf - .get_pointer()[iband * transform_test_cf.get_nbasis() + ibasis] - = psi_value_f; + for (int iband = 0; iband < transform_test_cd.get_nbands(); iband++) + { + for (int ibasis = 0; ibasis < transform_test_cd.get_nbasis(); ibasis++) + { + transform_test_cd.get_pointer()[iband * transform_test_cd.get_nbasis() + ibasis] = psi_value_d; + transform_test_cf.get_pointer()[iband * transform_test_cf.get_nbasis() + ibasis] = psi_value_f; psi_value_d += std::complex(1.0, 0.0); psi_value_f += std::complex(1.0, 0.0); } @@ -365,12 +363,10 @@ TEST_F(TestHSolverPW, SolveLcaoInPW) { // check solve() elecstate_test.ekb.c[0] = 1.0; elecstate_test.ekb.c[1] = 2.0; - - hsolver::HSolverLIP> hs_f_lip - = hsolver::HSolverLIP>(&pwbk); - hsolver::HSolverLIP> hs_d_lip - = hsolver::HSolverLIP>(&pwbk); - hs_f_lip.solve(&hamilt_test_f, psi_test_cf, &elecstate_test,transform_test_cf, true,0.0,0); + + hsolver::HSolverLIP> hs_f_lip = hsolver::HSolverLIP>(&pwbk); + hsolver::HSolverLIP> hs_d_lip = hsolver::HSolverLIP>(&pwbk); + hs_f_lip.solve(&hamilt_test_f, psi_test_cf, &elecstate_test, transform_test_cf, true, 0.0, 0); EXPECT_DOUBLE_EQ(hsolver::DiagoIterAssist>::avg_iter, 0.0); for (int i = 0; i < psi_test_cf.size(); i++) { @@ -381,7 +377,7 @@ TEST_F(TestHSolverPW, SolveLcaoInPW) { elecstate_test.ekb.c[0] = 1.0; elecstate_test.ekb.c[1] = 2.0; - hs_d_lip.solve(&hamilt_test_d, psi_test_cd, &elecstate_test, transform_test_cd, true,0.0,0); + hs_d_lip.solve(&hamilt_test_d, psi_test_cd, &elecstate_test, transform_test_cd, true, 0.0, 0); EXPECT_DOUBLE_EQ(hsolver::DiagoIterAssist>::avg_iter, 0.0); for (int i = 0; i < psi_test_cd.size(); i++) { diff --git a/source/source_hsolver/test/test_hsolver_sdft.cpp b/source/source_hsolver/test/test_hsolver_sdft.cpp index 777e85a50f..24a4f2f330 100644 --- a/source/source_hsolver/test/test_hsolver_sdft.cpp +++ b/source/source_hsolver/test/test_hsolver_sdft.cpp @@ -9,10 +9,10 @@ #define protected public #include "hsolver_pw_sup.h" #include "hsolver_supplementary_mock.h" -#include "module_base/global_variable.h" +#include "module_elecstate/elecstate_pw.h" +#include "source_base/global_variable.h" #include "source_hsolver/hsolver_pw.h" #include "source_hsolver/hsolver_pw_sdft.h" -#include "module_elecstate/elecstate_pw.h" #undef private #undef protected @@ -24,7 +24,8 @@ Sto_Func::Sto_Func() template class Sto_Func; // mock diago_hs_para -namespace hsolver { +namespace hsolver +{ template void diago_hs_para(T* h, T* s, @@ -35,7 +36,8 @@ void diago_hs_para(T* h, const MPI_Comm& comm, const int diag_subspace, const int block_size = 0) -{} +{ +} template void diago_hs_para(double* h, double* s, const int lda, @@ -62,7 +64,7 @@ template void diago_hs_para(float* h, float* const wfc, const MPI_Comm& comm, const int diag_subspace, - const int block_size); + const int block_size); template void diago_hs_para>(std::complex* h, std::complex* s, const int lda, @@ -73,11 +75,10 @@ template void diago_hs_para>(std::complex* h, const int diag_subspace, const int block_size); -} - +} // namespace hsolver -template<> -void elecstate::ElecStatePW, base_device::DEVICE_CPU>::init_rho_data() +template <> +void elecstate::ElecStatePW, base_device::DEVICE_CPU>::init_rho_data() { } @@ -165,9 +166,9 @@ void Stochastic_Iter::calHsqrtchi(Stochastic_WF& stowf) template void Stochastic_Iter::sum_stoeband(Stochastic_WF& stowf, - elecstate::ElecStatePW* pes, - hamilt::Hamilt* pHamilt, - ModulePW::PW_Basis_K* wfc_basis) + elecstate::ElecStatePW* pes, + hamilt::Hamilt* pHamilt, + ModulePW::PW_Basis_K* wfc_basis) { // do something to verify this function has been called stowf.nbands_total++; @@ -176,9 +177,9 @@ void Stochastic_Iter::sum_stoeband(Stochastic_WF& stowf, template void Stochastic_Iter::cal_storho(const UnitCell& ucell, - Stochastic_WF& stowf, - elecstate::ElecStatePW* pes, - ModulePW::PW_Basis_K* wfc_basis) + Stochastic_WF& stowf, + elecstate::ElecStatePW* pes, + ModulePW::PW_Basis_K* wfc_basis) { } template class Stochastic_Iter, base_device::DEVICE_CPU>; @@ -187,65 +188,62 @@ Charge::Charge(){}; Charge::~Charge(){}; // Mock implementations for the template functions causing linking errors -namespace ModulePW { - // Mock implementation for recip_to_real - template - void PW_Basis_K::recip_to_real(const Device* ctx, - const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const FPTYPE factor) const - { - // Simple mock implementation that does nothing - // In a real test, you might want to implement behavior that simulates the actual function - } - - // Mock implementation for real_to_recip - template - void PW_Basis_K::real_to_recip(const Device* ctx, - const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const FPTYPE factor) const - { - // Simple mock implementation that does nothing - } +namespace ModulePW +{ +// Mock implementation for recip_to_real +template +void PW_Basis_K::recip_to_real(const Device* ctx, + const std::complex* in, + std::complex* out, + const int ik, + const bool add, + const FPTYPE factor) const +{ + // Simple mock implementation that does nothing + // In a real test, you might want to implement behavior that simulates the actual function +} - // Explicit template instantiations - template void PW_Basis_K::recip_to_real( - const base_device::DEVICE_CPU* ctx, - const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const float factor) const; - - template void PW_Basis_K::recip_to_real( - const base_device::DEVICE_CPU* ctx, - const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const double factor) const; - - template void PW_Basis_K::real_to_recip( - const base_device::DEVICE_CPU* ctx, - const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const float factor) const; - - template void PW_Basis_K::real_to_recip( - const base_device::DEVICE_CPU* ctx, - const std::complex* in, - std::complex* out, - const int ik, - const bool add, - const double factor) const; +// Mock implementation for real_to_recip +template +void PW_Basis_K::real_to_recip(const Device* ctx, + const std::complex* in, + std::complex* out, + const int ik, + const bool add, + const FPTYPE factor) const +{ + // Simple mock implementation that does nothing } + +// Explicit template instantiations +template void PW_Basis_K::recip_to_real(const base_device::DEVICE_CPU* ctx, + const std::complex* in, + std::complex* out, + const int ik, + const bool add, + const float factor) const; + +template void PW_Basis_K::recip_to_real(const base_device::DEVICE_CPU* ctx, + const std::complex* in, + std::complex* out, + const int ik, + const bool add, + const double factor) const; + +template void PW_Basis_K::real_to_recip(const base_device::DEVICE_CPU* ctx, + const std::complex* in, + std::complex* out, + const int ik, + const bool add, + const float factor) const; + +template void PW_Basis_K::real_to_recip(const base_device::DEVICE_CPU* ctx, + const std::complex* in, + std::complex* out, + const int ik, + const bool add, + const double factor) const; +} // namespace ModulePW /************************************************ * unit test of HSolverPW_SDFT class ***********************************************/ @@ -262,7 +260,8 @@ namespace ModulePW { class TestHSolverPW_SDFT : public ::testing::Test { public: - TestHSolverPW_SDFT() : stoche(8, 1, 0, 0), elecstate_test(nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr) + TestHSolverPW_SDFT() + : stoche(8, 1, 0, 0), elecstate_test(nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr) { } ModulePW::PW_Basis_K pwbk; @@ -389,8 +388,8 @@ class TestHSolverPW_SDFT : public ::testing::Test // } #ifdef __MPI -#include "module_base/timer.h" #include "mpi.h" +#include "source_base/timer.h" int main(int argc, char** argv) { ModuleBase::timer::disable(); diff --git a/source/source_main/driver.cpp b/source/source_main/driver.cpp index 37f99d482a..5dad40c33c 100644 --- a/source/source_main/driver.cpp +++ b/source/source_main/driver.cpp @@ -1,9 +1,5 @@ #include "source_main/driver.h" -#include "module_base/global_file.h" -#include "module_base/memory.h" -#include "module_base/timer.h" -#include "source_esolver/esolver.h" #include "module_hamilt_pw/hamilt_pwdft/global.h" #include "module_io/cal_test.h" #include "module_io/input_conv.h" @@ -12,6 +8,10 @@ #include "module_io/read_input.h" #include "module_io/winput.h" #include "module_parameter/parameter.h" +#include "source_base/global_file.h" +#include "source_base/memory.h" +#include "source_base/timer.h" +#include "source_esolver/esolver.h" #include "source_main/version.h" Driver::Driver() { @@ -39,13 +39,12 @@ void Driver::init() // 5) All memory recorders are printed. ModuleBase::Memory::print_all(GlobalV::ofs_running); - // 6) Print the final time, hopefully it will not cost too long. + // 6) Print the final time, hopefully it will not cost too long. time_t time_finish = std::time(nullptr); ModuleIO::print_time(time_start, time_finish); // 7) Clean up: close all of the running logs - ModuleBase::Global_File::close_all_log(GlobalV::MY_RANK, PARAM.inp.out_alllog,PARAM.inp.calculation); - + ModuleBase::Global_File::close_all_log(GlobalV::MY_RANK, PARAM.inp.out_alllog, PARAM.inp.calculation); } void Driver::print_start_info() @@ -104,7 +103,7 @@ void Driver::print_start_info() GlobalV::ofs_running << "\n READING GENERAL INFORMATION" << std::endl; ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "global_out_dir", PARAM.globalv.global_out_dir); - ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "global_in_card", PARAM.globalv.global_in_card); + ModuleBase::GlobalFunc::OUT(GlobalV::ofs_running, "global_in_card", PARAM.globalv.global_in_card); } void Driver::reading() @@ -116,7 +115,7 @@ void Driver::reading() // (1) read the input file ModuleIO::ReadInput read_input(PARAM.globalv.myrank); - read_input.read_parameters(PARAM, PARAM.globalv.global_in_card); + read_input.read_parameters(PARAM, PARAM.globalv.global_in_card); // (2) create the output directory, running_*.log and print info read_input.create_directory(PARAM); @@ -124,7 +123,7 @@ void Driver::reading() // (3) write the input file std::stringstream ss1; - ss1 << PARAM.globalv.global_out_dir << PARAM.globalv.global_in_card; + ss1 << PARAM.globalv.global_out_dir << PARAM.globalv.global_in_card; read_input.write_parameters(PARAM, ss1.str()); // (*temp*) copy the variables from INPUT to each class @@ -174,7 +173,7 @@ void Driver::atomic_world() ModuleBase::TITLE("Driver", "atomic_world"); ModuleBase::timer::tick("Driver", "atomic_world"); - // reading information + // reading information this->reading(); // where the actual stuff is done diff --git a/source/source_main/main.cpp b/source/source_main/main.cpp index 4949b922ef..061c9950d6 100644 --- a/source/source_main/main.cpp +++ b/source/source_main/main.cpp @@ -3,11 +3,11 @@ // DATE : 2008-11-10 //========================================================== -#include "source_main/driver.h" #include "fftw3.h" -#include "module_base/parallel_global.h" #include "module_io/parse_args.h" #include "module_parameter/parameter.h" +#include "source_base/parallel_global.h" +#include "source_main/driver.h" #ifdef _OPENMP #include #endif From 3d1f87f94206640c080a3cbdd4934a5050c1c023 Mon Sep 17 00:00:00 2001 From: Critsium-xy Date: Wed, 18 Jun 2025 22:28:24 +0800 Subject: [PATCH 2/2] Fix makefile --- source/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Makefile b/source/Makefile index 5b9c60dcb2..b3860097f4 100644 --- a/source/Makefile +++ b/source/Makefile @@ -4,7 +4,7 @@ include Makefile.vars # Compiler information #========================== -INCLUDES = -I. -Isource_main -Isource_main/commands -Icommands -I../ -Imodule_base/module_container +INCLUDES = -I. -Isource_main -Isource_main/commands -Icommands -I../ -Isource_base/module_container LIBS = -lm -lpthread OPTS = -std=c++14 -pedantic -m64 ${INCLUDES}